From 15f52fa3890838e791ebebeb302f778c22472c12 Mon Sep 17 00:00:00 2001 From: ThinLiquid Date: Sun, 15 Oct 2023 23:58:38 +0100 Subject: [PATCH] =?UTF-8?q?[=F0=9F=94=A5]=20Remove=20dist?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/501.bundle.js | 2 -- dist/flow.bundle.js | 3 --- dist/flow.bundle.js.LICENSE.txt | 12 ------------ .../images/2893674da98cb77a7081ab698791e26e.png | Bin 44495 -> 0 bytes .../images/67031c15d90a3d85854fb0857c00dfb3.png | Bin 58902 -> 0 bytes .../images/d71072aad36a754b1038c4245ea986df.png | Bin 44733 -> 0 bytes .../images/dbd1723a2fcf92e3b03a760a1259282c.png | Bin 53298 -> 0 bytes dist/index.html | 1 - 8 files changed, 18 deletions(-) delete mode 100644 dist/501.bundle.js delete mode 100644 dist/flow.bundle.js delete mode 100644 dist/flow.bundle.js.LICENSE.txt delete mode 100644 dist/images/2893674da98cb77a7081ab698791e26e.png delete mode 100644 dist/images/67031c15d90a3d85854fb0857c00dfb3.png delete mode 100644 dist/images/d71072aad36a754b1038c4245ea986df.png delete mode 100644 dist/images/dbd1723a2fcf92e3b03a760a1259282c.png delete mode 100644 dist/index.html diff --git a/dist/501.bundle.js b/dist/501.bundle.js deleted file mode 100644 index 5502eec..0000000 --- a/dist/501.bundle.js +++ /dev/null @@ -1,2 +0,0 @@ -(self.webpackChunkflow_os=self.webpackChunkflow_os||[]).push([[501],{5501:(e,t,i)=>{!function(){var e=function(){return this}();e||"undefined"==typeof window||(e=window);var t=function(e,i,n){"string"==typeof e?(2==arguments.length&&(n=i),t.modules[e]||(t.payloads[e]=n,t.modules[e]=null)):t.original?t.original.apply(this,arguments):(console.error("dropping module because define wasn't a string."),console.trace())};t.modules={},t.payloads={};var i,n,s=function(e,t,i){if("string"==typeof t){var n=a(e,t);if(null!=n)return i&&i(),n}else if("[object Array]"===Object.prototype.toString.call(t)){for(var s=[],r=0,l=t.length;r1&&function(e,t,i){if(Array.prototype.indexOf)return e.indexOf("",i);for(var n=0;n-1&&(i=RegExp(this.source,s.replace.call(((n=this).global?"g":"")+(n.ignoreCase?"i":"")+(n.multiline?"m":"")+(n.extended?"x":"")+(n.sticky?"y":""),"g","")),s.replace.call(e.slice(a.index),i,(function(){for(var e=1;ea.index&&this.lastIndex--}return a},r||(RegExp.prototype.test=function(e){var t=s.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t}))})),ace.define("ace/lib/es5-shim",["require","exports","module"],(function(e,t,i){function n(){}Function.prototype.bind||(Function.prototype.bind=function(e){var t=this;if("function"!=typeof t)throw new TypeError("Function.prototype.bind called on incompatible "+t);var i=d.call(arguments,1),s=function(){if(this instanceof s){var n=t.apply(this,i.concat(d.call(arguments)));return Object(n)===n?n:this}return t.apply(e,i.concat(d.call(arguments)))};return t.prototype&&(n.prototype=t.prototype,s.prototype=new n,n.prototype=null),s});var s,o,r,a,l,h=Function.prototype.call,c=Array.prototype,u=Object.prototype,d=c.slice,g=h.bind(u.toString),f=h.bind(u.hasOwnProperty);if((l=f(u,"__defineGetter__"))&&(s=h.bind(u.__defineGetter__),o=h.bind(u.__defineSetter__),r=h.bind(u.__lookupGetter__),a=h.bind(u.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t,i=[];if(i.splice.apply(i,e(20)),i.splice.apply(i,e(26)),t=i.length,i.splice(5,0,"XXX"),i.length,t+1==i.length)return!0}()){var m=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?m.apply(this,[void 0===e?0:e,void 0===t?this.length-e:t].concat(d.call(arguments,2))):[]}}else Array.prototype.splice=function(e,t){var i=this.length;e>0?e>i&&(e=i):null==e?e=0:e<0&&(e=Math.max(i+e,0)),e+ta)for(u=h;u--;)this[l+u]=this[a+u];if(o&&e===c)this.length=c,this.push.apply(this,s);else for(this.length=c+o,u=0;u>>0;if("[object Function]"!=g(e))throw new TypeError;for(;++s>>0,s=Array(n),o=arguments[1];if("[object Function]"!=g(e))throw new TypeError(e+" is not a function");for(var r=0;r>>0,o=[],r=arguments[1];if("[object Function]"!=g(e))throw new TypeError(e+" is not a function");for(var a=0;a>>0,s=arguments[1];if("[object Function]"!=g(e))throw new TypeError(e+" is not a function");for(var o=0;o>>0,s=arguments[1];if("[object Function]"!=g(e))throw new TypeError(e+" is not a function");for(var o=0;o>>0;if("[object Function]"!=g(e))throw new TypeError(e+" is not a function");if(!n&&1==arguments.length)throw new TypeError("reduce of empty array with no initial value");var s,o=0;if(arguments.length>=2)s=arguments[1];else for(;;){if(o in i){s=i[o++];break}if(++o>=n)throw new TypeError("reduce of empty array with no initial value")}for(;o>>0;if("[object Function]"!=g(e))throw new TypeError(e+" is not a function");if(!n&&1==arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var s,o=n-1;if(arguments.length>=2)s=arguments[1];else for(;;){if(o in i){s=i[o--];break}if(--o<0)throw new TypeError("reduceRight of empty array with no initial value")}do{o in this&&(s=e.call(void 0,s,i[o],o,t))}while(o--);return s}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(e){var t=F&&"[object String]"==g(this)?this.split(""):R(this),i=t.length>>>0;if(!i)return-1;var n=0;for(arguments.length>1&&(n=L(arguments[1])),n=n>=0?n:Math.max(0,i+n);n>>0;if(!i)return-1;var n=i-1;for(arguments.length>1&&(n=Math.min(n,L(arguments[1]))),n=n>=0?n:i-Math.abs(n);n>=0;n--)if(n in t&&e===t[n])return n;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(e){return e.__proto__||(e.constructor?e.constructor.prototype:u)}),Object.getOwnPropertyDescriptor||(Object.getOwnPropertyDescriptor=function(e,t){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError("Object.getOwnPropertyDescriptor called on a non-object: "+e);if(f(e,t)){var i;if(i={enumerable:!0,configurable:!0},l){var n=e.__proto__;e.__proto__=u;var s=r(e,t),o=a(e,t);if(e.__proto__=n,s||o)return s&&(i.get=s),o&&(i.set=o),i}return i.value=e[t],i}}),Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(e){return Object.keys(e)}),Object.create||(p=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(e,t){var i;if(null===e)i=p();else{if("object"!=typeof e)throw new TypeError("typeof prototype["+typeof e+"] != 'object'");var n=function(){};n.prototype=e,(i=new n).__proto__=e}return void 0!==t&&Object.defineProperties(i,t),i}),Object.defineProperty){var v=w({}),E="undefined"==typeof document||w(document.createElement("div"));if(!v||!E)var b=Object.defineProperty}Object.defineProperty&&!b||(Object.defineProperty=function(e,t,i){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError("Object.defineProperty called on non-object: "+e);if("object"!=typeof i&&"function"!=typeof i||null===i)throw new TypeError("Property description must be an object: "+i);if(b)try{return b.call(Object,e,t,i)}catch(e){}if(f(i,"value"))if(l&&(r(e,t)||a(e,t))){var n=e.__proto__;e.__proto__=u,delete e[t],e[t]=i.value,e.__proto__=n}else e[t]=i.value;else{if(!l)throw new TypeError("getters & setters can not be defined on this javascript engine");f(i,"get")&&s(e,t,i.get),f(i,"set")&&o(e,t,i.set)}return e}),Object.defineProperties||(Object.defineProperties=function(e,t){for(var i in t)f(t,i)&&Object.defineProperty(e,i,t[i]);return e}),Object.seal||(Object.seal=function(e){return e}),Object.freeze||(Object.freeze=function(e){return e});try{Object.freeze((function(){}))}catch(e){Object.freeze=(A=Object.freeze,function(e){return"function"==typeof e?e:A(e)})}if(Object.preventExtensions||(Object.preventExtensions=function(e){return e}),Object.isSealed||(Object.isSealed=function(e){return!1}),Object.isFrozen||(Object.isFrozen=function(e){return!1}),Object.isExtensible||(Object.isExtensible=function(e){if(Object(e)===e)throw new TypeError;for(var t="";f(e,t);)t+="?";e[t]=!0;var i=f(e,t);return delete e[t],i}),!Object.keys){var $=!0,y=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],B=y.length;for(var D in{toString:null})$=!1;Object.keys=function(e){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError("Object.keys called on a non-object");var t=[];for(var i in e)f(e,i)&&t.push(i);if($)for(var n=0,s=B;n0||-1)*Math.floor(Math.abs(e))),e}var R=function(e){if(null==e)throw new TypeError("can't convert "+e+" to object");return Object(e)}})),ace.define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"],(function(e,t,i){"use strict";e("./regexp"),e("./es5-shim")})),ace.define("ace/lib/dom",["require","exports","module"],(function(e,t,i){"use strict";t.getDocumentHead=function(e){return e||(e=document),e.head||e.getElementsByTagName("head")[0]||e.documentElement},t.createElement=function(e,t){return document.createElementNS?document.createElementNS(t||"http://www.w3.org/1999/xhtml",e):document.createElement(e)},t.hasCssClass=function(e,t){return-1!==(e.className+"").split(/\s+/g).indexOf(t)},t.addCssClass=function(e,i){t.hasCssClass(e,i)||(e.className+=" "+i)},t.removeCssClass=function(e,t){for(var i=e.className.split(/\s+/g);;){var n=i.indexOf(t);if(-1==n)break;i.splice(n,1)}e.className=i.join(" ")},t.toggleCssClass=function(e,t){for(var i=e.className.split(/\s+/g),n=!0;;){var s=i.indexOf(t);if(-1==s)break;n=!1,i.splice(s,1)}return n&&i.push(t),e.className=i.join(" "),n},t.setCssClass=function(e,i,n){n?t.addCssClass(e,i):t.removeCssClass(e,i)},t.hasCssString=function(e,t){var i,n=0;if((t=t||document).createStyleSheet&&(i=t.styleSheets)){for(;n=0?parseFloat((s.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]):parseFloat((s.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=(window.Controllers||window.controllers)&&"Gecko"===window.navigator.product,t.isOldGecko=t.isGecko&&parseInt((s.match(/rv:(\d+)/)||[])[1],10)<4,t.isOpera=window.opera&&"[object Opera]"==Object.prototype.toString.call(window.opera),t.isWebKit=parseFloat(s.split("WebKit/")[1])||void 0,t.isChrome=parseFloat(s.split(" Chrome/")[1])||void 0,t.isAIR=s.indexOf("AdobeAIR")>=0,t.isIPad=s.indexOf("iPad")>=0,t.isChromeOS=s.indexOf(" CrOS ")>=0,t.isIOS=/iPad|iPhone|iPod/.test(s)&&!window.MSStream,t.isIOS&&(t.isMac=!0)}})),ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"],(function(e,t,i){"use strict";var n=e("./keys"),s=e("./useragent"),o=null,r=0;t.addListener=function(e,t,i){if(e.addEventListener)return e.addEventListener(t,i,!1);if(e.attachEvent){var n=function(){i.call(e,window.event)};i._wrapper=n,e.attachEvent("on"+t,n)}},t.removeListener=function(e,t,i){if(e.removeEventListener)return e.removeEventListener(t,i,!1);e.detachEvent&&e.detachEvent("on"+t,i._wrapper||i)},t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},t.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},t.getButton=function(e){return"dblclick"==e.type?0:"contextmenu"==e.type||s.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey?2:e.preventDefault?e.button:{1:0,2:2,4:1}[e.button]},t.capture=function(e,i,n){function s(e){i&&i(e),n&&n(e),t.removeListener(document,"mousemove",i,!0),t.removeListener(document,"mouseup",s,!0),t.removeListener(document,"dragstart",s,!0)}return t.addListener(document,"mousemove",i,!0),t.addListener(document,"mouseup",s,!0),t.addListener(document,"dragstart",s,!0),s},t.addTouchMoveListener=function(e,i){var n,s;t.addListener(e,"touchstart",(function(e){var t=e.touches[0];n=t.clientX,s=t.clientY})),t.addListener(e,"touchmove",(function(e){var t=e.touches;if(!(t.length>1)){var o=t[0];e.wheelX=n-o.clientX,e.wheelY=s-o.clientY,n=o.clientX,s=o.clientY,i(e)}}))},t.addMouseWheelListener=function(e,i){"onmousewheel"in e?t.addListener(e,"mousewheel",(function(e){void 0!==e.wheelDeltaX?(e.wheelX=-e.wheelDeltaX/8,e.wheelY=-e.wheelDeltaY/8):(e.wheelX=0,e.wheelY=-e.wheelDelta/8),i(e)})):"onwheel"in e?t.addListener(e,"wheel",(function(e){switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=.35*e.deltaX||0,e.wheelY=.35*e.deltaY||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=5*(e.deltaX||0),e.wheelY=5*(e.deltaY||0)}i(e)})):t.addListener(e,"DOMMouseScroll",(function(e){e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=5*(e.detail||0),e.wheelY=0):(e.wheelX=0,e.wheelY=5*(e.detail||0)),i(e)}))},t.addMultiMouseDownListener=function(e,i,n,o){var r,a,l,h=0,c={2:"dblclick",3:"tripleclick",4:"quadclick"};function u(e){if(0!==t.getButton(e)?h=0:e.detail>1?++h>4&&(h=1):h=1,s.isIE){var u=Math.abs(e.clientX-r)>5||Math.abs(e.clientY-a)>5;l&&!u||(h=1),l&&clearTimeout(l),l=setTimeout((function(){l=null}),i[h-1]||600),1==h&&(r=e.clientX,a=e.clientY)}if(e._clicks=h,n[o]("mousedown",e),h>4)h=0;else if(h>1)return n[o](c[h],e)}function d(e){h=2,l&&clearTimeout(l),l=setTimeout((function(){l=null}),i[h-1]||600),n[o]("mousedown",e),n[o](c[h],e)}Array.isArray(e)||(e=[e]),e.forEach((function(e){t.addListener(e,"mousedown",u),s.isOldIE&&t.addListener(e,"dblclick",d)}))};var a=s.isMac&&s.isOpera&&!("KeyboardEvent"in window)?function(e){return 0|(e.metaKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.ctrlKey?8:0)}:function(e){return 0|(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0)};function l(e,t,i){var l=a(t);if(!s.isMac&&o){if(t.getModifierState&&(t.getModifierState("OS")||t.getModifierState("Win"))&&(l|=8),o.altGr){if(3==(3&l))return;o.altGr=0}if(18===i||17===i){var h="location"in t?t.location:t.keyLocation;17===i&&1===h?1==o[i]&&(r=t.timeStamp):18===i&&3===l&&2===h&&t.timeStamp-r<50&&(o.altGr=!0)}}if(i in n.MODIFIER_KEYS&&(i=-1),8&l&&i>=91&&i<=93&&(i=-1),l||13!==i||3!==(h="location"in t?t.location:t.keyLocation)||(e(t,l,-i),!t.defaultPrevented)){if(s.isChromeOS&&8&l){if(e(t,l,i),t.defaultPrevented)return;l&=-9}return!!(l||i in n.FUNCTION_KEYS||i in n.PRINTABLE_KEYS)&&e(t,l,i)}}function h(){o=Object.create(null)}t.getModifierString=function(e){return n.KEY_MODS[a(e)]},t.addCommandKeyListener=function(e,i){var n=t.addListener;if(s.isOldGecko||s.isOpera&&!("KeyboardEvent"in window)){var r=null;n(e,"keydown",(function(e){r=e.keyCode})),n(e,"keypress",(function(e){return l(i,e,r)}))}else{var a=null;n(e,"keydown",(function(e){o[e.keyCode]=(o[e.keyCode]||0)+1;var t=l(i,e,e.keyCode);return a=e.defaultPrevented,t})),n(e,"keypress",(function(e){a&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&(t.stopEvent(e),a=null)})),n(e,"keyup",(function(e){o[e.keyCode]=null})),o||(h(),n(window,"focus",h))}},"object"==typeof window&&window.postMessage&&!s.isOldIE&&(t.nextTick=function(e,i){i=i||window;var n="zero-timeout-message-1";t.addListener(i,"message",(function s(o){o.data==n&&(t.stopPropagation(o),t.removeListener(i,"message",s),e())})),i.postMessage(n,"*")}),t.nextFrame="object"==typeof window&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),t.nextFrame?t.nextFrame=t.nextFrame.bind(window):t.nextFrame=function(e){setTimeout(e,17)}})),ace.define("ace/lib/lang",["require","exports","module"],(function(e,t,i){"use strict";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split("").reverse().join("")},t.stringRepeat=function(e,t){for(var i="";t>0;)1&t&&(i+=e),(t>>=1)&&(e+=e);return i};var n=/^\s\s*/,s=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(n,"")},t.stringTrimRight=function(e){return e.replace(s,"")},t.copyObject=function(e){var t={};for(var i in e)t[i]=e[i];return t},t.copyArray=function(e){for(var t=[],i=0,n=e.length;i9?e=e.substr(9):e.substr(0,4)==u.substr(0,4)?e=e.substr(4,e.length-9+1):e.charAt(e.length-1)==u.charAt(0)&&(e=e.slice(0,-1)),e==u.charAt(0)||e.charAt(e.length-1)==u.charAt(0)&&(e=e.slice(0,-1)),e&&t.onTextInput(e)),d&&(d=!1),$&&($=!1))},B=function(e){if(!m){var t=i.value;y(t),E()}},D=function(e,t,i){var n=e.clipboardData||window.clipboardData;if(n&&!h){var s=c||i?"Text":"text/plain";try{return t?!1!==n.setData(s,t):n.getData(s)}catch(e){if(!i)return D(e,t,!0)}}},S=function(e,o){var r=t.getCopyText();if(!r)return n.preventDefault(e);D(e,r)?(s.isIOS&&(g=o,i.value="\n aa"+r+"a a\n",i.setSelectionRange(4,4+r.length),d={value:r}),o?t.onCut():t.onCopy(),s.isIOS||n.preventDefault(e)):(d=!0,i.value=r,i.select(),setTimeout((function(){d=!1,E(),v(),o?t.onCut():t.onCopy()})))};n.addCommandKeyListener(i,t.onCommandKey.bind(t)),n.addListener(i,"select",(function(e){!function(e){return 0===e.selectionStart&&e.selectionEnd===e.value.length}(i)?b&&v(t.selection.isEmpty()):(t.selectAll(),v())})),n.addListener(i,"input",B),n.addListener(i,"cut",(function(e){S(e,!0)})),n.addListener(i,"copy",(function(e){S(e,!1)})),n.addListener(i,"paste",(function(e){var o=D(e);"string"==typeof o?(o&&t.onPaste(o,e),s.isIE&&setTimeout(v),n.preventDefault(e)):(i.value="",f=!0)}));var x,k=function(){if(m&&t.onCompositionUpdate&&!t.$readOnly){var e=i.value.replace(/\x01/g,"");if(m.lastValue!==e&&(t.onCompositionUpdate(e),m.lastValue&&t.undo(),m.canUndo&&(m.lastValue=e),m.lastValue)){var n=t.selection.getRange();t.insert(m.lastValue),t.session.markUndoGroup(),m.range=t.selection.getRange(),t.selection.setRange(n),t.selection.clearSelection()}}},L=function(e){if(t.onCompositionEnd&&!t.$readOnly){var n=m;m=!1;var o=setTimeout((function(){o=null;var e=i.value.replace(/\x01/g,"");m||(e==n.lastValue?E():!n.lastValue&&e&&(E(),y(e)))}));b=function(e){return o&&clearTimeout(o),(e=e.replace(/\x01/g,""))==n.lastValue?"":(n.lastValue&&o&&t.undo(),e)},t.onCompositionEnd(),t.removeListener("mousedown",L),"compositionend"==e.type&&n.range&&t.selection.setRange(n.range),(s.isChrome&&s.isChrome>=53||s.isWebKit&&s.isWebKit>=603)&&B()}},R=r.delayedCall(k,50);function M(){clearTimeout(x),x=setTimeout((function(){p&&(i.style.cssText=p,p=""),null==t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=!0,t.renderer.$moveTextAreaToCursor())}),0)}n.addListener(i,"compositionstart",(function(e){m||!t.onCompositionStart||t.$readOnly||((m={}).canUndo=t.session.$undoManager,t.onCompositionStart(),setTimeout(k,0),t.on("mousedown",L),m.canUndo&&!t.selection.isEmpty()&&(t.insert(""),t.session.markUndoGroup(),t.selection.clearSelection()),t.session.markUndoGroup())})),s.isGecko?n.addListener(i,"text",(function(){R.schedule()})):(n.addListener(i,"keyup",(function(){R.schedule()})),n.addListener(i,"keydown",(function(){R.schedule()}))),n.addListener(i,"compositionend",L),this.getElement=function(){return i},this.setReadOnly=function(e){i.readOnly=e},this.onContextMenu=function(e){$=!0,v(t.selection.isEmpty()),t._emit("nativecontextmenu",{target:t,domEvent:e}),this.moveToMouse(e,!0)},this.moveToMouse=function(e,r){p||(p=i.style.cssText),i.style.cssText=(r?"z-index:100000;":"")+"height:"+i.style.height+";"+(s.isIE?"opacity:0.1;":"");var a=t.container.getBoundingClientRect(),l=o.computedStyle(t.container),h=a.top+(parseInt(l.borderTopWidth)||0),c=a.left+(parseInt(a.borderLeftWidth)||0),u=a.bottom-h-i.clientHeight-2,d=function(e){i.style.left=e.clientX-c-2+"px",i.style.top=Math.min(e.clientY-h-2,u)+"px"};d(e),"mousedown"==e.type&&(t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=null),clearTimeout(x),s.isWin&&n.capture(t.container,d,M))},this.onContextMenuClose=M;var T=function(e){t.textInput.onContextMenu(e),M()};if(n.addListener(i,"mouseup",T),n.addListener(i,"mousedown",(function(e){e.preventDefault(),M()})),n.addListener(t.renderer.scroller,"contextmenu",T),n.addListener(i,"contextmenu",T),s.isIOS){var _=null,O=!1;e.addEventListener("keydown",(function(e){_&&clearTimeout(_),O=!0})),e.addEventListener("keyup",(function(e){_=setTimeout((function(){O=!1}),100)}));var I=function(e){if(document.activeElement===i&&!O){if(g)return setTimeout((function(){g=!1}),100);var n=i.selectionStart,s=i.selectionEnd;if(i.setSelectionRange(4,5),n==s)switch(n){case 0:t.onCommandKey(null,0,a.up);break;case 1:t.onCommandKey(null,0,a.home);break;case 2:t.onCommandKey(null,l.option,a.left);break;case 4:t.onCommandKey(null,0,a.left);break;case 5:t.onCommandKey(null,0,a.right);break;case 7:t.onCommandKey(null,l.option,a.right);break;case 8:t.onCommandKey(null,0,a.end);break;case 9:t.onCommandKey(null,0,a.down)}else{switch(s){case 6:t.onCommandKey(null,l.shift,a.right);break;case 7:t.onCommandKey(null,l.shift|l.option,a.right);break;case 8:t.onCommandKey(null,l.shift,a.end);break;case 9:t.onCommandKey(null,l.shift,a.down)}switch(n){case 0:t.onCommandKey(null,l.shift,a.up);break;case 1:t.onCommandKey(null,l.shift,a.home);break;case 2:t.onCommandKey(null,l.shift|l.option,a.left);break;case 3:t.onCommandKey(null,l.shift,a.left)}}}};document.addEventListener("selectionchange",I),t.on("destroy",(function(){document.removeEventListener("selectionchange",I)}))}}})),ace.define("ace/keyboard/textinput",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/lib/dom","ace/lib/lang","ace/keyboard/textinput_ios"],(function(e,t,i){"use strict";var n=e("../lib/event"),s=e("../lib/useragent"),o=e("../lib/dom"),r=e("../lib/lang"),a=s.isChrome<18,l=s.isIE,h=e("./textinput_ios").TextInput;t.TextInput=function(e,t){if(s.isIOS)return h.call(this,e,t);var i=o.createElement("textarea");i.className="ace_text-input",i.setAttribute("wrap","off"),i.setAttribute("autocorrect","off"),i.setAttribute("autocapitalize","off"),i.setAttribute("spellcheck",!1),i.style.opacity="0",e.insertBefore(i,e.firstChild);var c="\u2028\u2028",u=!1,d=!1,g=!1,f="",m=!0;try{var p=document.activeElement===i}catch(e){}n.addListener(i,"blur",(function(e){t.onBlur(e),p=!1})),n.addListener(i,"focus",(function(e){p=!0,t.onFocus(e),F()})),this.focus=function(){if(f)return i.focus();var e=i.style.top;i.style.position="fixed",i.style.top="0px",i.focus(),setTimeout((function(){i.style.position="","0px"==i.style.top&&(i.style.top=e)}),0)},this.blur=function(){i.blur()},this.isFocused=function(){return p};var A=r.delayedCall((function(){p&&F(m)})),C=r.delayedCall((function(){g||(i.value=c,p&&F())}));function F(e){if(!g){if(g=!0,v)var t=0,n=e?0:i.value.length-1;else t=e?2:1,n=2;try{i.setSelectionRange(t,n)}catch(e){}g=!1}}function w(){g||(i.value=c,s.isWebKit&&C.schedule())}s.isWebKit||t.addEventListener("changeSelection",(function(){t.selection.isEmpty()!=m&&(m=!m,A.schedule())})),w(),p&&t.onFocus();var v=null;this.setInputHandler=function(e){v=e},this.getInputHandler=function(){return v};var E=!1,b=function(e){v&&(e=v(e),v=null),d?(F(),e&&t.onPaste(e),d=!1):e==c.charAt(0)?E?t.execCommand("del",{source:"ace"}):t.execCommand("backspace",{source:"ace"}):(e.substring(0,2)==c?e=e.substr(2):e.charAt(0)==c.charAt(0)?e=e.substr(1):e.charAt(e.length-1)==c.charAt(0)&&(e=e.slice(0,-1)),e.charAt(e.length-1)==c.charAt(0)&&(e=e.slice(0,-1)),e&&t.onTextInput(e)),E&&(E=!1)},$=function(e){if(!g){var t=i.value;b(t),w()}},y=function(e,t,i){var n=e.clipboardData||window.clipboardData;if(n&&!a){var s=l||i?"Text":"text/plain";try{return t?!1!==n.setData(s,t):n.getData(s)}catch(e){if(!i)return y(e,t,!0)}}},B=function(e,s){var o=t.getCopyText();if(!o)return n.preventDefault(e);y(e,o)?(s?t.onCut():t.onCopy(),n.preventDefault(e)):(u=!0,i.value=o,i.select(),setTimeout((function(){u=!1,w(),F(),s?t.onCut():t.onCopy()})))},D=function(e){B(e,!0)},S=function(e){B(e,!1)},x=function(e){var o=y(e);"string"==typeof o?(o&&t.onPaste(o,e),s.isIE&&setTimeout(F),n.preventDefault(e)):(i.value="",d=!0)};n.addCommandKeyListener(i,t.onCommandKey.bind(t)),n.addListener(i,"select",(function(e){u?u=!1:function(e){return 0===e.selectionStart&&e.selectionEnd===e.value.length}(i)?(t.selectAll(),F()):v&&F(t.selection.isEmpty())})),n.addListener(i,"input",$),n.addListener(i,"cut",D),n.addListener(i,"copy",S),n.addListener(i,"paste",x),"oncut"in i&&"oncopy"in i&&"onpaste"in i||n.addListener(e,"keydown",(function(e){if((!s.isMac||e.metaKey)&&e.ctrlKey)switch(e.keyCode){case 67:S(e);break;case 86:x(e);break;case 88:D(e)}}));var k,L=function(){if(g&&t.onCompositionUpdate&&!t.$readOnly){var e=i.value.replace(/\u2028/g,"");if(g.lastValue!==e&&(t.onCompositionUpdate(e),g.lastValue&&t.undo(),g.canUndo&&(g.lastValue=e),g.lastValue)){var n=t.selection.getRange();t.insert(g.lastValue),t.session.markUndoGroup(),g.range=t.selection.getRange(),t.selection.setRange(n),t.selection.clearSelection()}}},R=function(e){if(t.onCompositionEnd&&!t.$readOnly){var n=g;g=!1;var o=setTimeout((function(){o=null;var e=i.value.replace(/\u2028/g,"");g||(e==n.lastValue?w():!n.lastValue&&e&&(w(),b(e)))}));v=function(e){return o&&clearTimeout(o),(e=e.replace(/\u2028/g,""))==n.lastValue?"":(n.lastValue&&o&&t.undo(),e)},t.onCompositionEnd(),t.removeListener("mousedown",R),"compositionend"==e.type&&n.range&&t.selection.setRange(n.range),(s.isChrome&&s.isChrome>=53||s.isWebKit&&s.isWebKit>=603)&&$()}},M=r.delayedCall(L,50);function T(){clearTimeout(k),k=setTimeout((function(){f&&(i.style.cssText=f,f=""),null==t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=!0,t.renderer.$moveTextAreaToCursor())}),0)}n.addListener(i,"compositionstart",(function(e){g||!t.onCompositionStart||t.$readOnly||((g={}).canUndo=t.session.$undoManager,t.onCompositionStart(),setTimeout(L,0),t.on("mousedown",R),g.canUndo&&!t.selection.isEmpty()&&(t.insert(""),t.session.markUndoGroup(),t.selection.clearSelection()),t.session.markUndoGroup())})),s.isGecko?n.addListener(i,"text",(function(){M.schedule()})):(n.addListener(i,"keyup",(function(){M.schedule()})),n.addListener(i,"keydown",(function(){M.schedule()}))),n.addListener(i,"compositionend",R),this.getElement=function(){return i},this.setReadOnly=function(e){i.readOnly=e},this.onContextMenu=function(e){E=!0,F(t.selection.isEmpty()),t._emit("nativecontextmenu",{target:t,domEvent:e}),this.moveToMouse(e,!0)},this.moveToMouse=function(e,r){f||(f=i.style.cssText),i.style.cssText=(r?"z-index:100000;":"")+"height:"+i.style.height+";"+(s.isIE?"opacity:0.1;":"");var a=t.container.getBoundingClientRect(),l=o.computedStyle(t.container),h=a.top+(parseInt(l.borderTopWidth)||0),c=a.left+(parseInt(a.borderLeftWidth)||0),u=a.bottom-h-i.clientHeight-2,d=function(e){i.style.left=e.clientX-c-2+"px",i.style.top=Math.min(e.clientY-h-2,u)+"px"};d(e),"mousedown"==e.type&&(t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=null),clearTimeout(k),s.isWin&&n.capture(t.container,d,T))},this.onContextMenuClose=T;var _=function(e){t.textInput.onContextMenu(e),T()};n.addListener(i,"mouseup",_),n.addListener(i,"mousedown",(function(e){e.preventDefault(),T()})),n.addListener(t.renderer.scroller,"contextmenu",_),n.addListener(i,"contextmenu",_)}})),ace.define("ace/mouse/default_handlers",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],(function(e,t,i){"use strict";e("../lib/dom"),e("../lib/event");var n=e("../lib/useragent");function s(e){e.$clickSelection=null;var t=e.editor;t.setDefaultHandler("mousedown",this.onMouseDown.bind(e)),t.setDefaultHandler("dblclick",this.onDoubleClick.bind(e)),t.setDefaultHandler("tripleclick",this.onTripleClick.bind(e)),t.setDefaultHandler("quadclick",this.onQuadClick.bind(e)),t.setDefaultHandler("mousewheel",this.onMouseWheel.bind(e)),t.setDefaultHandler("touchmove",this.onTouchMove.bind(e)),["select","startSelect","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","dragWait","dragWaitEnd","focusWait"].forEach((function(t){e[t]=this[t]}),this),e.selectByLines=this.extendSelectionBy.bind(e,"getLineRange"),e.selectByWords=this.extendSelectionBy.bind(e,"getWordRange")}function o(e,t){if(e.start.row==e.end.row)var i=2*t.column-e.start.column-e.end.column;else if(e.start.row!=e.end.row-1||e.start.column||e.end.column)i=2*t.row-e.start.row-e.end.row;else i=t.column-4;return i<0?{cursor:e.start,anchor:e.end}:{cursor:e.end,anchor:e.start}}(function(){this.onMouseDown=function(e){var t=e.inSelection(),i=e.getDocumentPosition();this.mousedownEvent=e;var s=this.editor,o=e.getButton();if(0!==o){var r=s.getSelectionRange().isEmpty();return s.$blockScrolling++,(r||1==o)&&s.selection.moveToPosition(i),s.$blockScrolling--,void(2==o&&(s.textInput.onContextMenu(e.domEvent),n.isMozilla||e.preventDefault()))}return this.mousedownEvent.time=Date.now(),!t||s.isFocused()||(s.focus(),!this.$focusTimout||this.$clickSelection||s.inMultiSelectMode)?(this.captureMouse(e),this.startSelect(i,e.domEvent._clicks>1),e.preventDefault()):(this.setState("focusWait"),void this.captureMouse(e))},this.startSelect=function(e,t){e=e||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var i=this.editor;i.$blockScrolling++,this.mousedownEvent.getShiftKey()?i.selection.selectToPosition(e):t||i.selection.moveToPosition(e),t||this.select(),i.renderer.scroller.setCapture&&i.renderer.scroller.setCapture(),i.setStyle("ace_selecting"),this.setState("select"),i.$blockScrolling--},this.select=function(){var e,t=this.editor,i=t.renderer.screenToTextCoordinates(this.x,this.y);if(t.$blockScrolling++,this.$clickSelection){var n=this.$clickSelection.comparePoint(i);if(-1==n)e=this.$clickSelection.end;else if(1==n)e=this.$clickSelection.start;else{var s=o(this.$clickSelection,i);i=s.cursor,e=s.anchor}t.selection.setSelectionAnchor(e.row,e.column)}t.selection.selectToPosition(i),t.$blockScrolling--,t.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(e){var t,i=this.editor,n=i.renderer.screenToTextCoordinates(this.x,this.y),s=i.selection[e](n.row,n.column);if(i.$blockScrolling++,this.$clickSelection){var r=this.$clickSelection.comparePoint(s.start),a=this.$clickSelection.comparePoint(s.end);if(-1==r&&a<=0)t=this.$clickSelection.end,s.end.row==n.row&&s.end.column==n.column||(n=s.start);else if(1==a&&r>=0)t=this.$clickSelection.start,s.start.row==n.row&&s.start.column==n.column||(n=s.end);else if(-1==r&&1==a)n=s.end,t=s.start;else{var l=o(this.$clickSelection,n);n=l.cursor,t=l.anchor}i.selection.setSelectionAnchor(t.row,t.column)}i.selection.selectToPosition(n),i.$blockScrolling--,i.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle("ace_selecting"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var e,t,i,n,s=(e=this.mousedownEvent.x,t=this.mousedownEvent.y,i=this.x,n=this.y,Math.sqrt(Math.pow(i-e,2)+Math.pow(n-t,2))),o=Date.now();(s>0||o-this.mousedownEvent.time>this.$focusTimout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),i=this.editor,n=i.session.getBracketRange(t);n?(n.isEmpty()&&(n.start.column--,n.end.column++),this.setState("select")):(n=i.selection.getWordRange(t.row,t.column),this.setState("selectByWords")),this.$clickSelection=n,this.select()},this.onTripleClick=function(e){var t=e.getDocumentPosition(),i=this.editor;this.setState("selectByLines");var n=i.getSelectionRange();n.isMultiLine()&&n.contains(t.row,t.column)?(this.$clickSelection=i.selection.getLineRange(n.start.row),this.$clickSelection.end=i.selection.getLineRange(n.end.row).end):this.$clickSelection=i.selection.getLineRange(t.row),this.select()},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState("selectAll")},this.onMouseWheel=function(e){if(!e.getAccelKey()){e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=this.editor;this.$lastScroll||(this.$lastScroll={t:0,vx:0,vy:0,allowed:0});var i=this.$lastScroll,n=e.domEvent.timeStamp,s=n-i.t,o=e.wheelX/s,r=e.wheelY/s;s<250&&(o=(o+i.vx)/2,r=(r+i.vy)/2);var a=Math.abs(o/r),l=!1;return a>=1&&t.renderer.isScrollableBy(e.wheelX*e.speed,0)&&(l=!0),a<=1&&t.renderer.isScrollableBy(0,e.wheelY*e.speed)&&(l=!0),l?i.allowed=n:n-i.allowed<250&&(Math.abs(o)<=1.1*Math.abs(i.vx)&&Math.abs(r)<=1.1*Math.abs(i.vy)?(l=!0,i.allowed=n):i.allowed=0),i.t=n,i.vx=o,i.vy=r,l?(t.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()):void 0}},this.onTouchMove=function(e){this.editor._emit("mousewheel",e)}}).call(s.prototype),t.DefaultHandlers=s})),ace.define("ace/tooltip",["require","exports","module","ace/lib/oop","ace/lib/dom"],(function(e,t,i){"use strict";e("./lib/oop");var n=e("./lib/dom");function s(e){this.isOpen=!1,this.$element=null,this.$parentNode=e}(function(){this.$init=function(){return this.$element=n.createElement("div"),this.$element.className="ace_tooltip",this.$element.style.display="none",this.$parentNode.appendChild(this.$element),this.$element},this.getElement=function(){return this.$element||this.$init()},this.setText=function(e){n.setInnerText(this.getElement(),e)},this.setHtml=function(e){this.getElement().innerHTML=e},this.setPosition=function(e,t){this.getElement().style.left=e+"px",this.getElement().style.top=t+"px"},this.setClassName=function(e){n.addCssClass(this.getElement(),e)},this.show=function(e,t,i){null!=e&&this.setText(e),null!=t&&null!=i&&this.setPosition(t,i),this.isOpen||(this.getElement().style.display="block",this.isOpen=!0)},this.hide=function(){this.isOpen&&(this.getElement().style.display="none",this.isOpen=!1)},this.getHeight=function(){return this.getElement().offsetHeight},this.getWidth=function(){return this.getElement().offsetWidth},this.destroy=function(){this.isOpen=!1,this.$element&&this.$element.parentNode&&this.$element.parentNode.removeChild(this.$element)}}).call(s.prototype),t.Tooltip=s})),ace.define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event","ace/tooltip"],(function(e,t,i){"use strict";var n=e("../lib/dom"),s=e("../lib/oop"),o=e("../lib/event"),r=e("../tooltip").Tooltip;function a(e){r.call(this,e)}s.inherits(a,r),function(){this.setPosition=function(e,t){var i=window.innerWidth||document.documentElement.clientWidth,n=window.innerHeight||document.documentElement.clientHeight,s=this.getWidth(),o=this.getHeight();(e+=15)+s>i&&(e-=e+s-i),(t+=15)+o>n&&(t-=20+o),r.prototype.setPosition.call(this,e,t)}}.call(a.prototype),t.GutterHandler=function(e){var t,i,s,r=e.editor,l=r.renderer.$gutterLayer,h=new a(r.container);function c(){t&&(t=clearTimeout(t)),s&&(h.hide(),s=null,r._signal("hideGutterTooltip",h),r.removeEventListener("mousewheel",c))}function u(e){h.setPosition(e.x,e.y)}e.editor.setDefaultHandler("guttermousedown",(function(t){if(r.isFocused()&&0==t.getButton()&&"foldWidgets"!=l.getRegion(t)){var i=t.getDocumentPosition().row,n=r.session.selection;if(t.getShiftKey())n.selectTo(i,0);else{if(2==t.domEvent.detail)return r.selectAll(),t.preventDefault();e.$clickSelection=r.selection.getLineRange(i)}return e.setState("selectByLines"),e.captureMouse(t),t.preventDefault()}})),e.editor.setDefaultHandler("guttermousemove",(function(o){var a=o.domEvent.target||o.domEvent.srcElement;if(n.hasCssClass(a,"ace_fold-widget"))return c();s&&e.$tooltipFollowsMouse&&u(o),i=o,t||(t=setTimeout((function(){t=null,i&&!e.isMousePressed?function(){var t=i.getDocumentPosition().row,n=l.$annotations[t];if(!n)return c();if(t==r.session.getLength()){var o=r.renderer.pixelToScreenCoordinates(0,i.y).row,a=i.$pos;if(o>r.session.documentToScreenRow(a.row,a.column))return c()}if(s!=n)if(s=n.text.join("
"),h.setHtml(s),h.show(),r._signal("showGutterTooltip",h),r.on("mousewheel",c),e.$tooltipFollowsMouse)u(i);else{var d=i.domEvent.target.getBoundingClientRect(),g=h.getElement().style;g.left=d.right+"px",g.top=d.bottom+"px"}}():c()}),50))})),o.addListener(r.renderer.$gutter,"mouseout",(function(e){i=null,s&&!t&&(t=setTimeout((function(){t=null,c()}),50))})),r.on("changeSession",c)}})),ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"],(function(e,t,i){"use strict";var n=e("../lib/event"),s=e("../lib/useragent"),o=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){n.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){n.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos||(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY)),this.$pos},this.inSelection=function(){if(null!==this.$inSelection)return this.$inSelection;var e=this.editor.getSelectionRange();if(e.isEmpty())this.$inSelection=!1;else{var t=this.getDocumentPosition();this.$inSelection=e.contains(t.row,t.column)}return this.$inSelection},this.getButton=function(){return n.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=s.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(o.prototype)})),ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],(function(e,t,i){"use strict";var n=e("../lib/dom"),s=e("../lib/event"),o=e("../lib/useragent");function r(e){var t=e.editor,i=n.createElement("img");i.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",o.isOpera&&(i.style.cssText="width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;"),["dragWait","dragWaitEnd","startDrag","dragReadyEnd","onMouseDrag"].forEach((function(t){e[t]=this[t]}),this),t.addEventListener("mousedown",this.onMouseDown.bind(e));var r,l,h,c,u,d,g,f,m,p,A,C=t.container,F=0;function w(){var e=d;(function(e,i){var n=Date.now(),s=!i||e.row!=i.row,o=!i||e.column!=i.column;!p||s||o?(t.$blockScrolling+=1,t.moveCursorToPosition(e),t.$blockScrolling-=1,p=n,A={x:l,y:h}):a(A.x,A.y,l,h)>5?p=null:n-p>=200&&(t.renderer.scrollCursorIntoView(),p=null)})(d=t.renderer.screenToTextCoordinates(l,h),e),function(e,i){var n=Date.now(),s=t.renderer.layerConfig.lineHeight,o=t.renderer.layerConfig.characterWidth,r=t.renderer.scroller.getBoundingClientRect(),a={x:{left:l-r.left,right:r.right-l},y:{top:h-r.top,bottom:r.bottom-h}},c=Math.min(a.x.left,a.x.right),u=Math.min(a.y.top,a.y.bottom),d={row:e.row,column:e.column};c/o<=2&&(d.column+=a.x.left=200&&t.renderer.scrollCursorIntoView(d):m=n:m=null}(d,e)}function v(){u=t.selection.toOrientedRange(),r=t.session.addMarker(u,"ace_selection",t.getSelectionStyle()),t.clearSelection(),t.isFocused()&&t.renderer.$cursorLayer.setBlinking(!1),clearInterval(c),w(),c=setInterval(w,20),F=0,s.addListener(document,"mousemove",$)}function E(){clearInterval(c),t.session.removeMarker(r),r=null,t.$blockScrolling+=1,t.selection.fromOrientedRange(u),t.$blockScrolling-=1,t.isFocused()&&!f&&t.renderer.$cursorLayer.setBlinking(!t.getReadOnly()),u=null,d=null,F=0,m=null,p=null,s.removeListener(document,"mousemove",$)}this.onDragStart=function(e){if(this.cancelDrag||!C.draggable){var n=this;return setTimeout((function(){n.startSelect(),n.captureMouse(e)}),0),e.preventDefault()}u=t.getSelectionRange();var s=e.dataTransfer;s.effectAllowed=t.getReadOnly()?"copy":"copyMove",o.isOpera&&(t.container.appendChild(i),i.scrollTop=0),s.setDragImage&&s.setDragImage(i,0,0),o.isOpera&&t.container.removeChild(i),s.clearData(),s.setData("Text",t.session.getTextRange()),f=!0,this.setState("drag")},this.onDragEnd=function(e){if(C.draggable=!1,f=!1,this.setState(null),!t.getReadOnly()){var i=e.dataTransfer.dropEffect;g||"move"!=i||t.session.remove(t.getSelectionRange()),t.renderer.$cursorLayer.setBlinking(!0)}this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle("")},this.onDragEnter=function(e){if(!t.getReadOnly()&&y(e.dataTransfer))return l=e.clientX,h=e.clientY,r||v(),F++,e.dataTransfer.dropEffect=g=B(e),s.preventDefault(e)},this.onDragOver=function(e){if(!t.getReadOnly()&&y(e.dataTransfer))return l=e.clientX,h=e.clientY,r||(v(),F++),null!==b&&(b=null),e.dataTransfer.dropEffect=g=B(e),s.preventDefault(e)},this.onDragLeave=function(e){if(--F<=0&&r)return E(),g=null,s.preventDefault(e)},this.onDrop=function(e){if(d){var i=e.dataTransfer;if(f)switch(g){case"move":u=u.contains(d.row,d.column)?{start:d,end:d}:t.moveText(u,d);break;case"copy":u=t.moveText(u,d,!0)}else{var n=i.getData("Text");u={start:d,end:t.session.insert(d,n)},t.focus(),g=null}return E(),s.preventDefault(e)}},s.addListener(C,"dragstart",this.onDragStart.bind(e)),s.addListener(C,"dragend",this.onDragEnd.bind(e)),s.addListener(C,"dragenter",this.onDragEnter.bind(e)),s.addListener(C,"dragover",this.onDragOver.bind(e)),s.addListener(C,"dragleave",this.onDragLeave.bind(e)),s.addListener(C,"drop",this.onDrop.bind(e));var b=null;function $(){null==b&&(b=setTimeout((function(){null!=b&&r&&E()}),20))}function y(e){var t=e.types;return!t||Array.prototype.some.call(t,(function(e){return"text/plain"==e||"Text"==e}))}function B(e){var t=["copy","copymove","all","uninitialized"],i=o.isMac?e.altKey:e.ctrlKey,n="uninitialized";try{n=e.dataTransfer.effectAllowed.toLowerCase()}catch(e){}var s="none";return i&&t.indexOf(n)>=0?s="copy":["move","copymove","linkmove","all","uninitialized"].indexOf(n)>=0?s="move":t.indexOf(n)>=0&&(s="copy"),s}}function a(e,t,i,n){return Math.sqrt(Math.pow(i-e,2)+Math.pow(n-t,2))}(function(){this.dragWait=function(){Date.now()-this.mousedownEvent.time>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){this.editor.container.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()),this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle(""),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor;e.container.draggable=!0,e.renderer.$cursorLayer.setBlinking(!1),e.setStyle("ace_dragging");var t=o.isWin?"default":"move";e.renderer.setCursorStyle(t),this.setState("dragReady")},this.onMouseDrag=function(e){var t=this.editor.container;o.isIE&&"dragReady"==this.state&&a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)>3&&t.dragDrop(),"dragWait"===this.state&&a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)>0&&(t.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()))},this.onMouseDown=function(e){if(this.$dragEnabled){this.mousedownEvent=e;var t=this.editor,i=e.inSelection(),n=e.getButton();if(1===(e.domEvent.detail||1)&&0===n&&i){if(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey()))return;this.mousedownEvent.time=Date.now();var s=e.domEvent.target||e.domEvent.srcElement;"unselectable"in s&&(s.unselectable="on"),t.getDragDelay()?(o.isWebKit&&(this.cancelDrag=!0,t.container.draggable=!0),this.setState("dragWait")):this.startDrag(),this.captureMouse(e,this.onMouseDrag.bind(this)),e.defaultPrevented=!0}}}}).call(r.prototype),t.DragdropHandler=r})),ace.define("ace/lib/net",["require","exports","module","ace/lib/dom"],(function(e,t,i){"use strict";var n=e("./dom");t.get=function(e,t){var i=new XMLHttpRequest;i.open("GET",e,!0),i.onreadystatechange=function(){4===i.readyState&&t(i.responseText)},i.send(null)},t.loadScript=function(e,t){var i=n.getDocumentHead(),s=document.createElement("script");s.src=e,i.appendChild(s),s.onload=s.onreadystatechange=function(e,i){!i&&s.readyState&&"loaded"!=s.readyState&&"complete"!=s.readyState||(s=s.onload=s.onreadystatechange=null,i||t())}},t.qualifyURL=function(e){var t=document.createElement("a");return t.href=e,t.href}})),ace.define("ace/lib/event_emitter",["require","exports","module"],(function(e,t,i){"use strict";var n={},s=function(){this.propagationStopped=!0},o=function(){this.defaultPrevented=!0};n._emit=n._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var i=this._eventRegistry[e]||[],n=this._defaultHandlers[e];if(i.length||n){"object"==typeof t&&t||(t={}),t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=s),t.preventDefault||(t.preventDefault=o),i=i.slice();for(var r=0;r1&&(s=i[i.length-2]);var r=l[t+"Path"];return null==r?r=l.basePath:"/"==n&&(t=n=""),r&&"/"!=r.slice(-1)&&(r+="/"),r+t+n+s+this.get("suffix")},t.setModuleUrl=function(e,t){return l.$moduleUrls[e]=t},t.$loading={},t.loadModule=function(i,n){var s,r;Array.isArray(i)&&(r=i[0],i=i[1]);try{s=e(i)}catch(e){}if(s&&!t.$loading[i])return n&&n(s);if(t.$loading[i]||(t.$loading[i]=[]),t.$loading[i].push(n),!(t.$loading[i].length>1)){var a=function(){e([i],(function(e){t._emit("load.module",{name:i,module:e});var n=t.$loading[i];t.$loading[i]=null,n.forEach((function(t){t&&t(e)}))}))};if(!t.get("packaged"))return a();o.loadScript(t.moduleUrl(i,r),a)}},h(!0),t.init=h})),ace.define("ace/mouse/mouse_handler",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/mouse/default_handlers","ace/mouse/default_gutter_handler","ace/mouse/mouse_event","ace/mouse/dragdrop_handler","ace/config"],(function(e,t,i){"use strict";var n=e("../lib/event"),s=e("../lib/useragent"),o=e("./default_handlers").DefaultHandlers,r=e("./default_gutter_handler").GutterHandler,a=e("./mouse_event").MouseEvent,l=e("./dragdrop_handler").DragdropHandler,h=e("../config"),c=function(e){var t=this;this.editor=e,new o(this),new r(this),new l(this);var i=function(t){(!document.hasFocus||!document.hasFocus()||!e.isFocused()&&document.activeElement==(e.textInput&&e.textInput.getElement()))&&window.focus(),e.focus()},a=e.renderer.getMouseEventTarget();n.addListener(a,"click",this.onMouseEvent.bind(this,"click")),n.addListener(a,"mousemove",this.onMouseMove.bind(this,"mousemove")),n.addMultiMouseDownListener([a,e.renderer.scrollBarV&&e.renderer.scrollBarV.inner,e.renderer.scrollBarH&&e.renderer.scrollBarH.inner,e.textInput&&e.textInput.getElement()].filter(Boolean),[400,300,250],this,"onMouseEvent"),n.addMouseWheelListener(e.container,this.onMouseWheel.bind(this,"mousewheel")),n.addTouchMoveListener(e.container,this.onTouchMove.bind(this,"touchmove"));var h=e.renderer.$gutter;n.addListener(h,"mousedown",this.onMouseEvent.bind(this,"guttermousedown")),n.addListener(h,"click",this.onMouseEvent.bind(this,"gutterclick")),n.addListener(h,"dblclick",this.onMouseEvent.bind(this,"gutterdblclick")),n.addListener(h,"mousemove",this.onMouseEvent.bind(this,"guttermousemove")),n.addListener(a,"mousedown",i),n.addListener(h,"mousedown",i),s.isIE&&e.renderer.scrollBarV&&(n.addListener(e.renderer.scrollBarV.element,"mousedown",i),n.addListener(e.renderer.scrollBarH.element,"mousedown",i)),e.on("mousemove",(function(i){if(!t.state&&!t.$dragDelay&&t.$dragEnabled){var n=e.renderer.screenToTextCoordinates(i.x,i.y),s=e.session.selection.getRange(),o=e.renderer;!s.isEmpty()&&s.insideStart(n.row,n.column)?o.setCursorStyle("default"):o.setCursorStyle("")}}))};(function(){this.onMouseEvent=function(e,t){this.editor._emit(e,new a(t,this.editor))},this.onMouseMove=function(e,t){var i=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;i&&i.length&&this.editor._emit(e,new a(t,this.editor))},this.onMouseWheel=function(e,t){var i=new a(t,this.editor);i.speed=2*this.$scrollSpeed,i.wheelX=t.wheelX,i.wheelY=t.wheelY,this.editor._emit(e,i)},this.onTouchMove=function(e,t){var i=new a(t,this.editor);i.speed=1,i.wheelX=t.wheelX,i.wheelY=t.wheelY,this.editor._emit(e,i)},this.setState=function(e){this.state=e},this.captureMouse=function(e,t){this.x=e.x,this.y=e.y,this.isMousePressed=!0;var i=this.editor.renderer;i.$keepTextAreaAtCursor&&(i.$keepTextAreaAtCursor=null);var o=this,r=function(e){if(e){if(s.isWebKit&&!e.which&&o.releaseMouse)return o.releaseMouse();o.x=e.clientX,o.y=e.clientY,t&&t(e),o.mouseEvent=new a(e,o.editor),o.$mouseMoved=!0}},l=function(e){clearInterval(c),h(),o[o.state+"End"]&&o[o.state+"End"](e),o.state="",null==i.$keepTextAreaAtCursor&&(i.$keepTextAreaAtCursor=!0,i.$moveTextAreaToCursor()),o.isMousePressed=!1,o.$onCaptureMouseMove=o.releaseMouse=null,e&&o.onMouseEvent("mouseup",e)},h=function(){o[o.state]&&o[o.state](),o.$mouseMoved=!1};if(s.isOldIE&&"dblclick"==e.domEvent.type)return setTimeout((function(){l(e)}));o.$onCaptureMouseMove=r,o.releaseMouse=n.capture(this.editor.container,r,l);var c=setInterval(h,20)},this.releaseMouse=null,this.cancelContextMenu=function(){var e=function(t){t&&t.domEvent&&"contextmenu"!=t.domEvent.type||(this.editor.off("nativecontextmenu",e),t&&t.domEvent&&n.stopEvent(t.domEvent))}.bind(this);setTimeout(e,10),this.editor.on("nativecontextmenu",e)}}).call(c.prototype),h.defineOptions(c.prototype,"mouseHandler",{scrollSpeed:{initialValue:2},dragDelay:{initialValue:s.isMac?150:0},dragEnabled:{initialValue:!0},focusTimout:{initialValue:0},tooltipFollowsMouse:{initialValue:!0}}),t.MouseHandler=c})),ace.define("ace/mouse/fold_handler",["require","exports","module"],(function(e,t,i){"use strict";t.FoldHandler=function(e){e.on("click",(function(t){var i=t.getDocumentPosition(),n=e.session,s=n.getFoldAt(i.row,i.column,1);s&&(t.getAccelKey()?n.removeFold(s):n.expandFold(s),t.stop())})),e.on("gutterclick",(function(t){if("foldWidgets"==e.renderer.$gutterLayer.getRegion(t)){var i=t.getDocumentPosition().row,n=e.session;n.foldWidgets&&n.foldWidgets[i]&&e.session.onFoldWidgetClick(i,t),e.isFocused()||e.focus(),t.stop()}})),e.on("gutterdblclick",(function(t){if("foldWidgets"==e.renderer.$gutterLayer.getRegion(t)){var i=t.getDocumentPosition().row,n=e.session,s=n.getParentFoldRangeData(i,!0),o=s.range||s.firstRange;if(o){i=o.start.row;var r=n.getFoldAt(i,n.getLine(i).length,1);r?n.removeFold(r):(n.addFold("...",o),e.renderer.scrollCursorIntoView({row:o.start.row,column:0}))}t.stop()}}))}})),ace.define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event"],(function(e,t,i){"use strict";var n=e("../lib/keys"),s=e("../lib/event"),o=function(e){this.$editor=e,this.$data={editor:e},this.$handlers=[],this.setDefaultHandler(e.commands)};(function(){this.setDefaultHandler=function(e){this.removeKeyboardHandler(this.$defaultHandler),this.$defaultHandler=e,this.addKeyboardHandler(e,0)},this.setKeyboardHandler=function(e){var t=this.$handlers;if(t[t.length-1]!=e){for(;t[t.length-1]&&t[t.length-1]!=this.$defaultHandler;)this.removeKeyboardHandler(t[t.length-1]);this.addKeyboardHandler(e,1)}},this.addKeyboardHandler=function(e,t){if(e){"function"!=typeof e||e.handleKeyboard||(e.handleKeyboard=e);var i=this.$handlers.indexOf(e);-1!=i&&this.$handlers.splice(i,1),null==t?this.$handlers.push(e):this.$handlers.splice(t,0,e),-1==i&&e.attach&&e.attach(this.$editor)}},this.removeKeyboardHandler=function(e){var t=this.$handlers.indexOf(e);return-1!=t&&(this.$handlers.splice(t,1),e.detach&&e.detach(this.$editor),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.getStatusText=function(){var e=this.$data,t=e.editor;return this.$handlers.map((function(i){return i.getStatusText&&i.getStatusText(t,e)||""})).filter(Boolean).join(" ")},this.$callKeyboardHandlers=function(e,t,i,n){for(var o,r=!1,a=this.$editor.commands,l=this.$handlers.length;l--&&!((o=this.$handlers[l].handleKeyboard(this.$data,e,t,i,n))&&o.command&&((r="null"==o.command||a.exec(o.command,this.$editor,o.args,n))&&n&&-1!=e&&1!=o.passEvent&&1!=o.command.passEvent&&s.stopEvent(n),r)););return r||-1!=e||(o={command:"insertstring"},r=a.exec("insertstring",this.$editor,t)),r&&this.$editor._signal&&this.$editor._signal("keyboardActivity",o),r},this.onCommandKey=function(e,t,i){var s=n.keyCodeToString(i);this.$callKeyboardHandlers(t,s,i,e)},this.onTextInput=function(e){this.$callKeyboardHandlers(-1,e)}}).call(o.prototype),t.KeyBinding=o})),ace.define("ace/lib/bidiutil",["require","exports","module"],(function(e,t,i){"use strict";var n=0,s=0,o=!1,r=!1,a=!1,l=[[0,3,0,1,0,0,0],[0,3,0,1,2,2,0],[0,3,0,17,2,0,1],[0,3,5,5,4,1,0],[0,3,21,21,4,0,1],[0,3,5,5,4,2,0]],h=[[2,0,1,1,0,1,0],[2,0,1,1,0,2,0],[2,0,2,1,3,2,0],[2,0,2,33,3,1,1]],c=11,u=18,d=[u,u,u,u,u,u,u,u,u,6,5,6,8,5,u,u,u,u,u,u,u,u,u,u,u,u,u,u,5,5,5,6,8,4,4,c,c,c,4,4,4,4,4,10,9,10,9,9,2,2,2,2,2,2,2,2,2,2,9,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,u,u,u,u,u,u,5,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,9,4,c,c,c,c,4,4,4,4,0,4,4,u,4,4,c,c,2,2,4,0,4,4,4,2,0,4,4,4,4,4],g=[8,8,8,8,8,8,8,8,8,8,8,u,u,u,0,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8,5,13,14,15,16,17,9,c,c,c,c,c,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,9,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8];function f(e,t,i){if(!(s=e){for(o=u+1;o=e;)o++;for(a=u,l=o-1;a=t.length||2!=(l=i[s-1])&&3!=l||2!=(h=t[s+1])&&3!=h?4:(o&&(h=3),h==l?h:4);case 10:return 2==(l=s>0?i[s-1]:5)&&s+10&&2==i[s-1])return 2;if(o)return 4;for(g=s+1,d=t.length;g=1425&&m<=2303||64286==m;if(l=t[g],p&&(1==l||7==l))return 1}return s<1||5==(l=t[s-1])?4:i[s-1];case 5:return o=!1,r=!0,n;case 6:return a=!0,4;case 13:case 14:case 16:case 17:case 15:o=!1;case u:return 4}}function p(e){var t=e.charCodeAt(0),i=t>>8;return 0==i?t>191?0:d[t]:5==i?/[\u0591-\u05f4]/.test(e)?1:0:6==i?/[\u0610-\u061a\u064b-\u065f\u06d6-\u06e4\u06e7-\u06ed]/.test(e)?12:/[\u0660-\u0669\u066b-\u066c]/.test(e)?3:1642==t?c:/[\u06f0-\u06f9]/.test(e)?2:7:32==i&&t<=8287?g[255&t]:254==i&&t>=65136?7:4}t.L=0,t.R=1,t.EN=2,t.ON_R=3,t.AN=4,t.R_H=5,t.B=6,t.DOT="·",t.doBidiReorder=function(e,i,c){if(e.length<2)return{};var d=e.split(""),g=new Array(d.length),A=new Array(d.length),C=[];n=c?1:0,function(e,t,i,c){var u=n?h:l,d=null,g=null,f=null,A=0,C=null,F=-1,w=null,v=null,E=[];if(!c)for(w=0,c=[];w0)if(16==C){for(w=F;w-1){for(w=F;w=0&&8==c[b];b--)t[b]=n}}(d,C,d.length,i);for(var F=0;F7&&i[F]<13||4===i[F]||i[F]===u)?C[F]=t.ON_R:F>0&&"ل"===d[F-1]&&/\u0622|\u0623|\u0625|\u0627/.test(d[F])&&(C[F-1]=C[F]=t.R_H,F++);for(d[d.length-1]===t.DOT&&(C[d.length-1]=t.B),F=0;F=0&&(e=this.session.$docRowCache[i])}return e},this.getSplitIndex=function(){var e=0,t=this.session.$screenRowCache;if(t.length)for(var i,n=this.session.$getRowCacheIndex(t,this.currentRow);this.currentRow-e>0&&(i=this.session.$getRowCacheIndex(t,this.currentRow-e-1))===n;)n=i,e++;return e},this.updateRowLine=function(e,t){if(void 0===e&&(e=this.getDocumentRow()),this.wrapIndent=0,this.isLastRow=e===this.session.getLength()-1,this.line=this.session.getLine(e),this.session.$useWrapMode){var i=this.session.$wrapData[e];i&&(void 0===t&&(t=this.getSplitIndex()),t>0&&i.length?(this.wrapIndent=i.indent,this.line=t0?e-1:0,this.bidiMap),i=this.bidiMap.bidiLevels,s=0;0===e&&i[t]%2!=0&&t++;for(var o=0;o=h&&si+r/2;){if(i+=r,s===o.length-1){r=0;break}r=this.charWidths[o[++s]]}return s>0&&o[s-1]%2!=0&&o[s]%2==0?(e0&&o[s-1]%2==0&&o[s]%2!=0?t=1+(e>i?this.bidiMap.logicalFromVisual[s]:this.bidiMap.logicalFromVisual[s-1]):this.isRtlDir&&s===o.length-1&&0===r&&o[s-1]%2==0||!this.isRtlDir&&0===s&&o[s]%2!=0?t=1+this.bidiMap.logicalFromVisual[s]:(s>0&&o[s-1]%2!=0&&0!==r&&s--,t=this.bidiMap.logicalFromVisual[s]),t+this.wrapIndent}}).call(a.prototype),t.BidiHandler=a})),ace.define("ace/range",["require","exports","module"],(function(e,t,i){"use strict";var n=function(e,t,i,n){this.start={row:e,column:t},this.end={row:i,column:n}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return 0==this.compare(e,t)},this.compareRange=function(e){var t,i=e.end,n=e.start;return 1==(t=this.compare(i.row,i.column))?1==(t=this.compare(n.row,n.column))?2:0==t?1:0:-1==t?-2:-1==(t=this.compare(n.row,n.column))?-1:1==t?42:0},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return 0==this.comparePoint(e.start)&&0==this.comparePoint(e.end)},this.intersects=function(e){var t=this.compareRange(e);return-1==t||0==t||1==t},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){"object"==typeof e?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){"object"==typeof e?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return 0==this.compare(e,t)&&!this.isEnd(e,t)&&!this.isStart(e,t)},this.insideStart=function(e,t){return 0==this.compare(e,t)&&!this.isEnd(e,t)},this.insideEnd=function(e,t){return 0==this.compare(e,t)&&!this.isStart(e,t)},this.compare=function(e,t){return this.isMultiLine()||e!==this.start.row?ethis.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0:tthis.end.column?1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var i={row:t+1,column:0};else this.end.rowt)var s={row:t+1,column:0};else this.start.rowt.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.isEmpty()?r.fromPoints(t,t):this.isBackwards()?r.fromPoints(t,e):r.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit("changeSelection"))},this.selectAll=function(){var e=this.doc.getLength()-1;this.setSelectionAnchor(0,0),this.moveCursorTo(e,this.doc.getLine(e).length)},this.setRange=this.setSelectionRange=function(e,t){t?(this.setSelectionAnchor(e.end.row,e.end.column),this.selectTo(e.start.row,e.start.column)):(this.setSelectionAnchor(e.start.row,e.start.column),this.selectTo(e.end.row,e.end.column)),this.getRange().isEmpty()&&(this.$isEmpty=!0),this.$desiredColumn=null},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection((function(){this.moveCursorTo(e,t)}))},this.selectToPosition=function(e){this.$moveSelection((function(){this.moveCursorToPosition(e)}))},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if(void 0===t){var i=e||this.lead;e=i.row,t=i.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var i,n="number"==typeof e?e:this.lead.row,s=this.session.getFoldLine(n);return s?(n=s.start.row,i=s.end.row):i=n,!0===t?new r(n,0,i,this.session.getLine(i).length):new r(n,0,i+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.wouldMoveIntoSoftTab=function(e,t,i){var n=e.column,s=e.column+t;return i<0&&(n=e.column-t,s=e.column),this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(n,s).split(" ").length-1==t},this.moveCursorLeft=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,-1))this.moveCursorTo(e.start.row,e.start.column);else if(0===t.column)t.row>0&&this.moveCursorTo(t.row-1,this.doc.getLine(t.row-1).length);else{var i=this.session.getTabSize();this.wouldMoveIntoSoftTab(t,i,-1)&&!this.session.getNavigateWithinSoftTabs()?this.moveCursorBy(0,-i):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,1))this.moveCursorTo(e.end.row,e.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row0&&(t.column=n)}}this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,i=this.doc.getLine(e),n=i.substring(t);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var s=this.session.getFoldAt(e,t,1);if(s)this.moveCursorTo(s.end.row,s.end.column);else{if(this.session.nonTokenRe.exec(n)&&(t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,n=i.substring(t)),t>=i.length)return this.moveCursorTo(e,i.length),this.moveCursorRight(),void(e0&&this.moveCursorWordLeft());this.session.tokenRe.exec(o)&&(i-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(t,i)}},this.$shortWordEndIndex=function(e){var t,i=0,n=/\s/,s=this.session.tokenRe;if(s.lastIndex=0,this.session.tokenRe.exec(e))i=this.session.tokenRe.lastIndex;else{for(;(t=e[i])&&n.test(t);)i++;if(i<1)for(s.lastIndex=0;(t=e[i])&&!s.test(t);)if(s.lastIndex=0,i++,n.test(t)){if(i>2){i--;break}for(;(t=e[i])&&n.test(t);)i++;if(i>2)break}}return s.lastIndex=0,i},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,i=this.doc.getLine(e),n=i.substring(t),s=this.session.getFoldAt(e,t,1);if(s)return this.moveCursorTo(s.end.row,s.end.column);if(t==i.length){var o=this.doc.getLength();do{e++,n=this.doc.getLine(e)}while(e0&&/^\s*$/.test(n));i=n.length,/\s+$/.test(n)||(n="")}var o=s.stringReverse(n),r=this.$shortWordEndIndex(o);return this.moveCursorTo(t,i-r)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var i,n=this.session.documentToScreenPosition(this.lead.row,this.lead.column);0===t&&(0!==e&&(this.session.$bidiHandler.isBidiRow(n.row,this.lead.row)?(i=this.session.$bidiHandler.getPosLeft(n.column),n.column=Math.round(i/this.session.$bidiHandler.charWidths[0])):i=n.column*this.session.$bidiHandler.charWidths[0]),this.$desiredColumn?n.column=this.$desiredColumn:this.$desiredColumn=n.column);var s=this.session.screenToDocumentPosition(n.row+e,n.column,i);0!==e&&0===t&&s.row===this.lead.row&&s.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[s.row]&&(s.row>0||e>0)&&s.row++,this.moveCursorTo(s.row,s.column+t,0===t)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,i){var n=this.session.getFoldAt(e,t,1);n&&(e=n.start.row,t=n.start.column),this.$keepDesiredColumnOnChange=!0;var s=this.session.getLine(e);/[\uDC00-\uDFFF]/.test(s.charAt(t))&&s.charAt(t-1)&&(this.lead.row==e&&this.lead.column==t+1?t-=1:t+=1),this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,i||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,i){var n=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(n.row,n.column,i)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e(this);var i=this.getCursor();return r.fromPoints(t,i)}catch(e){return r.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){if(this.rangeCount)var e=this.ranges.map((function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t}));else(e=this.getRange()).isBackwards=this.isBackwards();return e},this.fromJSON=function(e){if(null==e.start){if(this.rangeList){this.toSingleRange(e[0]);for(var t=e.length;t--;){var i=r.fromPoints(e[t].start,e[t].end);e[t].isBackwards&&(i.cursor=i.start),this.addRange(i,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call(a.prototype),t.Selection=a})),ace.define("ace/tokenizer",["require","exports","module","ace/config"],(function(e,t,i){"use strict";var n=e("./config"),s=2e3,o=function(e){for(var t in this.states=e,this.regExps={},this.matchMappings={},this.states){for(var i=this.states[t],n=[],s=0,o=this.matchMappings[t]={defaultToken:"text"},r="g",a=[],l=0;l1?this.$applyToken:h.token),u>1&&(/\\\d/.test(h.regex)?c=h.regex.replace(/\\([0-9]+)/g,(function(e,t){return"\\"+(parseInt(t,10)+s+1)})):(u=1,c=this.removeCapturingGroups(h.regex)),h.splitRegex||"string"==typeof h.token||a.push(h)),o[s]=l,s+=u,n.push(c),h.onMatch||(h.onMatch=null)}}n.length||(o[0]=0,n.push("$")),a.forEach((function(e){e.splitRegex=this.createSplitterRegexp(e.regex,r)}),this),this.regExps[t]=new RegExp("("+n.join(")|(")+")|($)",r)}};(function(){this.$setMaxTokenCount=function(e){s=0|e},this.$applyToken=function(e){var t=this.splitRegex.exec(e).slice(1),i=this.token.apply(this,t);if("string"==typeof i)return[{type:i,value:e}];for(var n=[],s=0,o=i.length;sc){var A=e.substring(c,p-m.length);d.type==g?d.value+=A:(d.type&&h.push(d),d={type:g,value:A})}for(var C=0;Cs){for(u>2*e.length&&this.reportError("infinite loop with in ace tokenizer",{startState:t,line:e});c1&&i[0]!==n&&i.unshift("#tmp",n),{tokens:h,state:i.length?i:n}},this.reportError=n.reportError}).call(o.prototype),t.Tokenizer=o})),ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"],(function(e,t,i){"use strict";var n=e("../lib/lang"),s=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{defaultToken:"text"}]}};(function(){this.addRules=function(e,t){if(t)for(var i in e){for(var n=e[i],s=0;s=this.$rowTokens.length;){if(this.$row+=1,e||(e=this.$session.getLength()),this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,i=e[t].start;if(void 0!==i)return i;for(i=0;t>0;)i+=e[t-=1].value.length;return i},this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}},this.getCurrentTokenRange=function(){var e=this.$rowTokens[this.$tokenIndex],t=this.getCurrentTokenColumn();return new n(this.$row,t,this.$row,t+e.value.length)}}).call(s.prototype),t.TokenIterator=s})),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],(function(e,t,i){"use strict";var n,s=e("../../lib/oop"),o=e("../behaviour").Behaviour,r=e("../../token_iterator").TokenIterator,a=e("../../lib/lang"),l=["text","paren.rparen","punctuation.operator"],h=["text","paren.rparen","punctuation.operator","comment"],c={},u={'"':'"',"'":"'"},d=function(e){var t=-1;if(e.multiSelect&&(t=e.selection.index,c.rangeCount!=e.multiSelect.rangeCount&&(c={rangeCount:e.multiSelect.rangeCount})),c[t])return n=c[t];n=c[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},g=function(e,t,i,n){var s=e.end.row-e.start.row;return{text:i+t+n,selection:[0,e.start.column+1,s,e.end.column+(s?0:1)]}},f=function(e){this.add("braces","insertion",(function(t,i,s,o,r){var l=s.getCursorPosition(),h=o.doc.getLine(l.row);if("{"==r){d(s);var c=s.getSelectionRange(),u=o.doc.getTextRange(c);if(""!==u&&"{"!==u&&s.getWrapBehavioursEnabled())return g(c,u,"{","}");if(f.isSaneInsertion(s,o))return/[\]\}\)]/.test(h[l.column])||s.inMultiSelectMode||e&&e.braces?(f.recordAutoInsert(s,o,"}"),{text:"{}",selection:[1,1]}):(f.recordMaybeInsert(s,o,"{"),{text:"{",selection:[1,1]})}else if("}"==r){if(d(s),"}"==h.substring(l.column,l.column+1)&&null!==o.$findOpeningBracket("}",{column:l.column+1,row:l.row})&&f.isAutoInsertedClosing(l,h,r))return f.popAutoInsertedClosing(),{text:"",selection:[1,1]}}else{if("\n"==r||"\r\n"==r){d(s);var m="";if(f.isMaybeInsertedClosing(l,h)&&(m=a.stringRepeat("}",n.maybeInsertedBrackets),f.clearMaybeInsertedClosing()),"}"===h.substring(l.column,l.column+1)){var p=o.findMatchingBracket({row:l.row,column:l.column+1},"}");if(!p)return null;var A=this.$getIndent(o.getLine(p.row))}else{if(!m)return void f.clearMaybeInsertedClosing();A=this.$getIndent(h)}var C=A+o.getTabString();return{text:"\n"+C+"\n"+A+m,selection:[1,C.length,1,C.length]}}f.clearMaybeInsertedClosing()}})),this.add("braces","deletion",(function(e,t,i,s,o){var r=s.doc.getTextRange(o);if(!o.isMultiLine()&&"{"==r){if(d(i),"}"==s.doc.getLine(o.start.row).substring(o.end.column,o.end.column+1))return o.end.column++,o;n.maybeInsertedBrackets--}})),this.add("parens","insertion",(function(e,t,i,n,s){if("("==s){d(i);var o=i.getSelectionRange(),r=n.doc.getTextRange(o);if(""!==r&&i.getWrapBehavioursEnabled())return g(o,r,"(",")");if(f.isSaneInsertion(i,n))return f.recordAutoInsert(i,n,")"),{text:"()",selection:[1,1]}}else if(")"==s){d(i);var a=i.getCursorPosition(),l=n.doc.getLine(a.row);if(")"==l.substring(a.column,a.column+1)&&null!==n.$findOpeningBracket(")",{column:a.column+1,row:a.row})&&f.isAutoInsertedClosing(a,l,s))return f.popAutoInsertedClosing(),{text:"",selection:[1,1]}}})),this.add("parens","deletion",(function(e,t,i,n,s){var o=n.doc.getTextRange(s);if(!s.isMultiLine()&&"("==o&&(d(i),")"==n.doc.getLine(s.start.row).substring(s.start.column+1,s.start.column+2)))return s.end.column++,s})),this.add("brackets","insertion",(function(e,t,i,n,s){if("["==s){d(i);var o=i.getSelectionRange(),r=n.doc.getTextRange(o);if(""!==r&&i.getWrapBehavioursEnabled())return g(o,r,"[","]");if(f.isSaneInsertion(i,n))return f.recordAutoInsert(i,n,"]"),{text:"[]",selection:[1,1]}}else if("]"==s){d(i);var a=i.getCursorPosition(),l=n.doc.getLine(a.row);if("]"==l.substring(a.column,a.column+1)&&null!==n.$findOpeningBracket("]",{column:a.column+1,row:a.row})&&f.isAutoInsertedClosing(a,l,s))return f.popAutoInsertedClosing(),{text:"",selection:[1,1]}}})),this.add("brackets","deletion",(function(e,t,i,n,s){var o=n.doc.getTextRange(s);if(!s.isMultiLine()&&"["==o&&(d(i),"]"==n.doc.getLine(s.start.row).substring(s.start.column+1,s.start.column+2)))return s.end.column++,s})),this.add("string_dquotes","insertion",(function(e,t,i,n,s){var o=n.$mode.$quotes||u;if(1==s.length&&o[s]){if(this.lineCommentStart&&-1!=this.lineCommentStart.indexOf(s))return;d(i);var r=s,a=i.getSelectionRange(),l=n.doc.getTextRange(a);if(!(""===l||1==l.length&&o[l])&&i.getWrapBehavioursEnabled())return g(a,l,r,r);if(!l){var h=i.getCursorPosition(),c=n.doc.getLine(h.row),f=c.substring(h.column-1,h.column),m=c.substring(h.column,h.column+1),p=n.getTokenAt(h.row,h.column),A=n.getTokenAt(h.row,h.column+1);if("\\"==f&&p&&/escape/.test(p.type))return null;var C,F=p&&/string|escape/.test(p.type),w=!A||/string|escape/.test(A.type);if(m==r)(C=F!==w)&&/string\.end/.test(A.type)&&(C=!1);else{if(F&&!w)return null;if(F&&w)return null;var v=n.$mode.tokenRe;v.lastIndex=0;var E=v.test(f);v.lastIndex=0;var b=v.test(f);if(E||b)return null;if(m&&!/[\s;,.})\]\\]/.test(m))return null;C=!0}return{text:C?r+r:"",selection:[1,1]}}}})),this.add("string_dquotes","deletion",(function(e,t,i,n,s){var o=n.doc.getTextRange(s);if(!s.isMultiLine()&&('"'==o||"'"==o)&&(d(i),n.doc.getLine(s.start.row).substring(s.start.column+1,s.start.column+2)==o))return s.end.column++,s}))};f.isSaneInsertion=function(e,t){var i=e.getCursorPosition(),n=new r(t,i.row,i.column);if(!this.$matchTokenType(n.getCurrentToken()||"text",l)){var s=new r(t,i.row,i.column+1);if(!this.$matchTokenType(s.getCurrentToken()||"text",l))return!1}return n.stepForward(),n.getCurrentTokenRow()!==i.row||this.$matchTokenType(n.getCurrentToken()||"text",h)},f.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},f.recordAutoInsert=function(e,t,i){var s=e.getCursorPosition(),o=t.doc.getLine(s.row);this.isAutoInsertedClosing(s,o,n.autoInsertedLineEnd[0])||(n.autoInsertedBrackets=0),n.autoInsertedRow=s.row,n.autoInsertedLineEnd=i+o.substr(s.column),n.autoInsertedBrackets++},f.recordMaybeInsert=function(e,t,i){var s=e.getCursorPosition(),o=t.doc.getLine(s.row);this.isMaybeInsertedClosing(s,o)||(n.maybeInsertedBrackets=0),n.maybeInsertedRow=s.row,n.maybeInsertedLineStart=o.substr(0,s.column)+i,n.maybeInsertedLineEnd=o.substr(s.column),n.maybeInsertedBrackets++},f.isAutoInsertedClosing=function(e,t,i){return n.autoInsertedBrackets>0&&e.row===n.autoInsertedRow&&i===n.autoInsertedLineEnd[0]&&t.substr(e.column)===n.autoInsertedLineEnd},f.isMaybeInsertedClosing=function(e,t){return n.maybeInsertedBrackets>0&&e.row===n.maybeInsertedRow&&t.substr(e.column)===n.maybeInsertedLineEnd&&t.substr(0,e.column)==n.maybeInsertedLineStart},f.popAutoInsertedClosing=function(){n.autoInsertedLineEnd=n.autoInsertedLineEnd.substr(1),n.autoInsertedBrackets--},f.clearMaybeInsertedClosing=function(){n&&(n.maybeInsertedBrackets=0,n.maybeInsertedRow=-1)},s.inherits(f,o),t.CstyleBehaviour=f})),ace.define("ace/unicode",["require","exports","module"],(function(e,t,i){"use strict";t.packages={},function(e){var i=/\w{4}/g;for(var n in e)t.packages[n]=e[n].replace(i,"\\u$&")}({L:"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",Ll:"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A",Lu:"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A",Lt:"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC",Lm:"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F",Lo:"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",M:"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26",Mn:"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26",Mc:"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC",Me:"0488048906DE20DD-20E020E2-20E4A670-A672",N:"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nd:"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nl:"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF",No:"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835",P:"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65",Pd:"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D",Ps:"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62",Pe:"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63",Pi:"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20",Pf:"00BB2019201D203A2E032E052E0A2E0D2E1D2E21",Pc:"005F203F20402054FE33FE34FE4D-FE4FFF3F",Po:"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65",S:"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD",Sm:"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC",Sc:"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6",Sk:"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3",So:"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD",Z:"002000A01680180E2000-200A20282029202F205F3000",Zs:"002000A01680180E2000-200A202F205F3000",Zl:"2028",Zp:"2029",C:"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF",Cc:"0000-001F007F-009F",Cf:"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB",Co:"E000-F8FF",Cs:"D800-DFFF",Cn:"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF"})})),ace.define("ace/mode/text",["require","exports","module","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour/cstyle","ace/unicode","ace/lib/lang","ace/token_iterator","ace/range"],(function(e,t,i){"use strict";var n=e("../tokenizer").Tokenizer,s=e("./text_highlight_rules").TextHighlightRules,o=e("./behaviour/cstyle").CstyleBehaviour,r=e("../unicode"),a=e("../lib/lang"),l=e("../token_iterator").TokenIterator,h=e("../range").Range,c=function(){this.HighlightRules=s};(function(){this.$defaultBehaviour=new o,this.tokenRe=new RegExp("^["+r.packages.L+r.packages.Mn+r.packages.Mc+r.packages.Nd+r.packages.Pc+"\\$_]+","g"),this.nonTokenRe=new RegExp("^(?:[^"+r.packages.L+r.packages.Mn+r.packages.Mc+r.packages.Nd+r.packages.Pc+"\\$_]|\\s])+","g"),this.getTokenizer=function(){return this.$tokenizer||(this.$highlightRules=this.$highlightRules||new this.HighlightRules(this.$highlightRuleConfig),this.$tokenizer=new n(this.$highlightRules.getRules())),this.$tokenizer},this.lineCommentStart="",this.blockComment="",this.toggleCommentLines=function(e,t,i,n){var s=t.doc,o=!0,r=!0,l=1/0,h=t.getTabSize(),c=!1;if(this.lineCommentStart){Array.isArray(this.lineCommentStart)?(m=this.lineCommentStart.map(a.escapeRegExp).join("|"),g=this.lineCommentStart[0]):(m=a.escapeRegExp(this.lineCommentStart),g=this.lineCommentStart),m=new RegExp("^(\\s*)(?:"+m+") ?"),c=t.getUseSoftTabs(),C=function(e,t){var i=e.match(m);if(i){var n=i[1].length,o=i[0].length;d(e,n,o)||" "!=i[0][o-1]||o--,s.removeInLine(t,n,o)}};var u=g+" ",d=(A=function(e,t){o&&!/\S/.test(e)||(d(e,l,l)?s.insertInLine({row:t,column:l},u):s.insertInLine({row:t,column:l},g))},F=function(e,t){return m.test(e)},function(e,t,i){for(var n=0;t--&&" "==e.charAt(t);)n++;if(n%h!=0)return!1;for(n=0;" "==e.charAt(i++);)n++;return h>2?n%h!=h-1:n%h==0})}else{if(!this.blockComment)return!1;var g=this.blockComment.start,f=this.blockComment.end,m=new RegExp("^(\\s*)(?:"+a.escapeRegExp(g)+")"),p=new RegExp("(?:"+a.escapeRegExp(f)+")\\s*$"),A=function(e,t){F(e,t)||o&&!/\S/.test(e)||(s.insertInLine({row:t,column:e.length},f),s.insertInLine({row:t,column:l},g))},C=function(e,t){var i;(i=e.match(p))&&s.removeInLine(t,e.length-i[0].length,e.length),(i=e.match(m))&&s.removeInLine(t,i[1].length,i[0].length)},F=function(e,i){if(m.test(e))return!0;for(var n=t.getTokens(i),s=0;se.length&&(v=e.length)})),l==1/0&&(l=v,o=!1,r=!1),c&&l%h!=0&&(l=Math.floor(l/h)*h),w(r?C:A)},this.toggleBlockComment=function(e,t,i,n){var s=this.blockComment;if(s){!s.start&&s[0]&&(s=s[0]);var o,r,a=(m=new l(t,n.row,n.column)).getCurrentToken(),c=(t.selection,t.selection.toOrientedRange());if(a&&/comment/.test(a.type)){for(var u,d;a&&/comment/.test(a.type);){if(-1!=(p=a.value.indexOf(s.start))){var g=m.getCurrentTokenRow(),f=m.getCurrentTokenColumn()+p;u=new h(g,f,g,f+s.start.length);break}a=m.stepBackward()}var m;for(a=(m=new l(t,n.row,n.column)).getCurrentToken();a&&/comment/.test(a.type);){var p;if(-1!=(p=a.value.indexOf(s.end))){g=m.getCurrentTokenRow(),f=m.getCurrentTokenColumn()+p,d=new h(g,f,g,f+s.end.length);break}a=m.stepForward()}d&&t.remove(d),u&&(t.remove(u),o=u.start.row,r=-s.start.length)}else r=s.start.length,o=i.start.row,t.insert(i.end,s.end),t.insert(i.start,s.start);c.start.row==o&&(c.start.column+=r),c.end.row==o&&(c.end.column+=r),t.selection.fromOrientedRange(c)}},this.getNextLineIndent=function(e,t,i){return this.$getIndent(t)},this.checkOutdent=function(e,t,i){return!1},this.autoOutdent=function(e,t,i){},this.$getIndent=function(e){return e.match(/^\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){for(var t in this.$embeds=[],this.$modes={},e)e[t]&&(this.$embeds.push(t),this.$modes[t]=new e[t]);var i=["toggleBlockComment","toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction","getCompletions"];for(t=0;tthis.row)){var i=function(t,i,n){var s="insert"==t.action,o=(s?1:-1)*(t.end.row-t.start.row),r=(s?1:-1)*(t.end.column-t.start.column),a=t.start,l=s?a:t.end;return e(i,a,n)?{row:i.row,column:i.column}:e(l,i,!n)?{row:i.row+o,column:i.column+(i.row==l.row?r:0)}:{row:a.row,column:a.column}}(t,{row:this.row,column:this.column},this.$insertRight);this.setPosition(i.row,i.column,!0)}},this.setPosition=function(e,t,i){var n;if(n=i?{row:e,column:t}:this.$clipPositionToDocument(e,t),this.row!=n.row||this.column!=n.column){var s={row:this.row,column:this.column};this.row=n.row,this.column=n.column,this._signal("change",{old:s,value:n})}},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(e,t){var i={};return e>=this.document.getLength()?(i.row=Math.max(0,this.document.getLength()-1),i.column=this.document.getLine(i.row).length):e<0?(i.row=0,i.column=0):(i.row=e,i.column=Math.min(this.document.getLine(i.row).length,Math.max(0,t))),t<0&&(i.column=0),i}}).call(o.prototype)})),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"],(function(e,t,i){"use strict";var n=e("./lib/oop"),s=e("./apply_delta").applyDelta,o=e("./lib/event_emitter").EventEmitter,r=e("./range").Range,a=e("./anchor").Anchor,l=function(e){this.$lines=[""],0===e.length?this.$lines=[""]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){n.implement(this,o),this.setValue=function(e){var t=this.getLength()-1;this.remove(new r(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new a(this,e,t)},0==="aaa".split(/a/).length?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=t?t[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(e){this.$newLineMode!==e&&(this.$newLineMode=e,this._signal("changeNewLineMode"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return"\r\n"==e||"\r"==e||"\n"==e},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{(t=this.getLines(e.start.row,e.end.row))[0]=(t[0]||"").substring(e.start.column);var i=t.length-1;e.end.row-e.start.row==i&&(t[i]=t[i].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."),this.insertMergedLines(e,["",""])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var i=this.clippedPos(e.row,e.column),n=this.pos(e.row,e.column+t.length);return this.applyDelta({start:i,end:n,action:"insert",lines:[t]},!0),this.clonePos(n)},this.clippedPos=function(e,t){var i=this.getLength();void 0===e?e=i:e<0?e=0:e>=i&&(e=i-1,t=void 0);var n=this.getLine(e);return null==t&&(t=n.length),{row:e,column:t=Math.min(Math.max(t,0),n.length)}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){var i=0;(e=Math.min(Math.max(e,0),this.getLength()))0,n=t=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:"remove",lines:["",""]})},this.replace=function(e,t){return e instanceof r||(e=r.fromPoints(e.start,e.end)),0===t.length&&e.isEmpty()?e.start:t==this.getTextRange(e)?e.end:(this.remove(e),t?this.insert(e.start,t):e.start)},this.applyDeltas=function(e){for(var t=0;t=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var i="insert"==e.action;(i?e.lines.length<=1&&!e.lines[0]:!r.comparePoints(e.start,e.end))||(i&&e.lines.length>2e4&&this.$splitAndapplyLargeDelta(e,2e4),s(this.$lines,e,t),this._signal("change",e))},this.$splitAndapplyLargeDelta=function(e,t){for(var i=e.lines,n=i.length,s=e.start.row,o=e.start.column,r=0,a=0;;){r=a,a+=t-1;var l=i.slice(r,a);if(a>n){e.lines=l,e.start.row=s+r,e.start.column=o;break}l.push(""),this.applyDelta({start:this.pos(s+r,o),end:this.pos(s+a,o=0),action:e.action,lines:l},!0)}},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:"insert"==e.action?"remove":"insert",lines:e.lines.slice()})},this.indexToPosition=function(e,t){for(var i=this.$lines||this.getAllLines(),n=this.getNewLineCharacter().length,s=t||0,o=i.length;s20){i.running=setTimeout(i.$worker,20);break}}i.currentLine=t,-1==n&&(n=t),o<=n&&i.fireUpdateEvent(o,n)}}};(function(){n.implement(this,s),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){var i={first:e,last:t};this._signal("update",{data:i})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(e){var t=e.start.row,i=e.end.row-t;if(0===i)this.lines[t]=null;else if("remove"==e.action)this.lines.splice(t,i+1,null),this.states.splice(t,i+1,null);else{var n=Array(i+1);n.unshift(t,1),this.lines.splice.apply(this.lines,n),this.states.splice.apply(this.states,n)}this.currentLine=Math.min(t,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||"start"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),i=this.states[e-1],n=this.tokenizer.getLineTokens(t,i,e);return this.states[e]+""!=n.state+""?(this.states[e]=n.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=n.tokens}}).call(o.prototype),t.BackgroundTokenizer=o})),ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],(function(e,t,i){"use strict";var n=e("./lib/lang"),s=(e("./lib/oop"),e("./range").Range),o=function(e,t,i){this.setRegexp(e),this.clazz=t,this.type=i||"text"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){this.regExp+""!=e+""&&(this.regExp=e,this.cache=[])},this.update=function(e,t,i,o){if(this.regExp)for(var r=o.firstRow,a=o.lastRow,l=r;l<=a;l++){var h=this.cache[l];null==h&&((h=n.getMatchOffsets(i.getLine(l),this.regExp)).length>this.MAX_RANGES&&(h=h.slice(0,this.MAX_RANGES)),h=h.map((function(e){return new s(l,e.offset,l,e.offset+e.length)})),this.cache[l]=h.length?h:"");for(var c=h.length;c--;)t.drawSingleLineMarker(e,h[c].toScreenRange(i),this.clazz,o)}}}).call(o.prototype),t.SearchHighlight=o})),ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"],(function(e,t,i){"use strict";var n=e("../range").Range;function s(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var i=t[t.length-1];this.range=new n(t[0].start.row,t[0].start.column,i.end.row,i.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach((function(e){e.setFoldLine(this)}),this)}(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach((function(t){t.start.row+=e,t.end.row+=e}))},this.addFold=function(e){if(e.sameRow){if(e.start.rowthis.endRow)throw new Error("Can't add a fold to this FoldLine as it has no connection");this.folds.push(e),this.folds.sort((function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)})),this.range.compareEnd(e.start.row,e.start.column)>0?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw new Error("Trying to add fold to FoldRow that doesn't have a matching row");this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,i){var n,s,o=0,r=this.folds,a=!0;null==t&&(t=this.end.row,i=this.end.column);for(var l=0;l0)){var l=n(e,r.start);return 0===a?t&&0!==l?-o-2:o:l>0||0===l&&!t?o:-o-1}}return-o-1},this.add=function(e){var t=!e.isEmpty(),i=this.pointIndex(e.start,t);i<0&&(i=-i-1);var n=this.pointIndex(e.end,t,i);return n<0?n=-n-1:n++,this.ranges.splice(i,n-i,e)},this.addList=function(e){for(var t=[],i=e.length;i--;)t.push.apply(t,this.add(e[i]));return t},this.substractPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges.splice(t,1)},this.merge=function(){for(var e,t=[],i=this.ranges,s=(i=i.sort((function(e,t){return n(e.start,t.start)})))[0],o=1;o=0},this.containsPoint=function(e){return this.pointIndex(e)>=0},this.rangeAtPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges[t]},this.clipRows=function(e,t){var i=this.ranges;if(i[0].start.row>t||i[i.length-1].start.rown)break;if(h.start.row==n&&h.start.column>=t.column&&(h.start.column==t.column&&this.$insertRight||(h.start.column+=o,h.start.row+=s)),h.end.row==n&&h.end.column>=t.column){if(h.end.column==t.column&&this.$insertRight)continue;h.end.column==t.column&&o>0&&ah.start.column&&h.end.column==r[a+1].start.column&&(h.end.column-=o),h.end.column+=o,h.end.row+=s}}if(0!=s&&a=e)return s;if(s.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var i=this.$foldData,n=0;for(t&&(n=i.indexOf(t)),-1==n&&(n=0);n=e)return s}return null},this.getFoldedRowCount=function(e,t){for(var i=this.$foldData,n=t-e+1,s=0;s=t){a=e?n-=t-a:n=0);break}r>=e&&(n-=a>=e?r-a:r-e+1)}return n},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort((function(e,t){return e.start.row-t.start.row})),e},this.addFold=function(e,t){var i,n=this.$foldData,r=!1;e instanceof o?i=e:(i=new o(t,e)).collapseChildren=t.collapseChildren,this.$clipRangeToDocument(i.range);var a=i.start.row,l=i.start.column,h=i.end.row,c=i.end.column;if(!(a0&&(this.removeFolds(g),g.forEach((function(e){i.addSubFold(e)})));for(var f=0;f0&&this.foldAll(e.start.row+1,e.end.row,e.collapseChildren-1),e.subFolds=[]},this.expandFolds=function(e){e.forEach((function(e){this.expandFold(e)}),this)},this.unfold=function(e,t){var i,s;if(null==e?(i=new n(0,0,this.getLength(),0),t=!0):i="number"==typeof e?new n(e,0,e,this.getLine(e).length):"row"in e?n.fromPoints(e,e):e,s=this.getFoldsInRangeList(i),t)this.removeFolds(s);else for(var o=s;o.length;)this.expandFolds(o),o=this.getFoldsInRangeList(i);if(s.length)return s},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){var i=this.getFoldLine(e,t);return i?i.end.row:e},this.getRowFoldStart=function(e,t){var i=this.getFoldLine(e,t);return i?i.start.row:e},this.getFoldDisplayLine=function(e,t,i,n,s){null==n&&(n=e.start.row),null==s&&(s=0),null==t&&(t=e.end.row),null==i&&(i=this.getLine(t).length);var o=this.doc,r="";return e.walk((function(e,t,i,a){if(!(tc)break}while(o&&l.test(o.type));o=s.stepBackward()}else o=s.getCurrentToken();return h.end.row=s.getCurrentTokenRow(),h.end.column=s.getCurrentTokenColumn()+o.value.length-2,h}},this.foldAll=function(e,t,i){null==i&&(i=1e5);var n=this.foldWidgets;if(n){t=t||this.getLength();for(var s=e=e||0;s=e){s=o.end.row;try{var r=this.addFold("...",o);r&&(r.collapseChildren=i)}catch(e){}}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle="markbegin",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error("invalid fold style: "+e+"["+Object.keys(this.$foldStyles).join(", ")+"]");if(this.$foldStyle!=e){this.$foldStyle=e,"manual"==e&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)}},this.$setFolding=function(e){this.$foldMode!=e&&(this.$foldMode=e,this.off("change",this.$updateFoldWidgets),this.off("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets),this._signal("changeAnnotation"),e&&"manual"!=this.$foldStyle?(this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on("change",this.$updateFoldWidgets),this.on("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets)):this.foldWidgets=null)},this.getParentFoldRangeData=function(e,t){var i=this.foldWidgets;if(!i||t&&i[e])return{};for(var n,s=e-1;s>=0;){var o=i[s];if(null==o&&(o=i[s]=this.getFoldWidget(s)),"start"==o){var r=this.getFoldWidgetRange(s);if(n||(n=r),r&&r.end.row>=e)break}s--}return{range:-1!==s&&r,firstRange:n}},this.onFoldWidgetClick=function(e,t){var i={children:(t=t.domEvent).shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey};if(!this.$toggleFoldWidget(e,i)){var n=t.target||t.srcElement;n&&/ace_fold-widget/.test(n.className)&&(n.className+=" ace_invalid")}},this.$toggleFoldWidget=function(e,t){if(this.getFoldWidget){var i=this.getFoldWidget(e),n=this.getLine(e),s="end"===i?-1:1,o=this.getFoldAt(e,-1===s?0:n.length,s);if(o)return t.children||t.all?this.removeFold(o):this.expandFold(o),o;var r=this.getFoldWidgetRange(e,!0);if(r&&!r.isMultiLine()&&(o=this.getFoldAt(r.start.row,r.start.column,1))&&r.isEqual(o.range))return this.removeFold(o),o;if(t.siblings){var a=this.getParentFoldRangeData(e);if(a.range)var l=a.range.start.row+1,h=a.range.end.row;this.foldAll(l,h,t.all?1e4:0)}else t.children?(h=r?r.end.row:this.getLength(),this.foldAll(e+1,h,t.all?1e4:0)):r&&(t.all&&(r.collapseChildren=1e4),this.addFold("...",r));return r}},this.toggleFoldWidget=function(e){var t=this.selection.getCursor().row;t=this.getRowFoldStart(t);var i=this.$toggleFoldWidget(t,{});if(!i){var n=this.getParentFoldRangeData(t,!0);if(i=n.range||n.firstRange){t=i.start.row;var s=this.getFoldAt(t,this.getLine(t).length,1);s?this.removeFold(s):this.addFold("...",i)}}},this.updateFoldWidgets=function(e){var t=e.start.row,i=e.end.row-t;if(0===i)this.foldWidgets[t]=null;else if("remove"==e.action)this.foldWidgets.splice(t,i+1,null);else{var n=Array(i+1);n.unshift(t,1),this.foldWidgets.splice.apply(this.foldWidgets,n)}},this.tokenizerUpdateFoldWidgets=function(e){var t=e.data;t.first!=t.last&&this.foldWidgets.length>t.first&&this.foldWidgets.splice(t.first,this.foldWidgets.length)}}})),ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"],(function(e,t,i){"use strict";var n=e("../token_iterator").TokenIterator,s=e("../range").Range;t.BracketMatch=function(){this.findMatchingBracket=function(e,t){if(0==e.column)return null;var i=t||this.getLine(e.row).charAt(e.column-1);if(""==i)return null;var n=i.match(/([\(\[\{])|([\)\]\}])/);return n?n[1]?this.$findClosingBracket(n[1],e):this.$findOpeningBracket(n[2],e):null},this.getBracketRange=function(e){var t,i=this.getLine(e.row),n=!0,o=i.charAt(e.column-1),r=o&&o.match(/([\(\[\{])|([\)\]\}])/);if(r||(o=i.charAt(e.column),e={row:e.row,column:e.column+1},r=o&&o.match(/([\(\[\{])|([\)\]\}])/),n=!1),!r)return null;if(r[1]){if(!(a=this.$findClosingBracket(r[1],e)))return null;t=s.fromPoints(e,a),n||(t.end.column++,t.start.column--),t.cursor=t.end}else{var a;if(!(a=this.$findOpeningBracket(r[2],e)))return null;t=s.fromPoints(a,e),n||(t.start.column++,t.end.column--),t.cursor=t.start}return t},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{"},this.$findOpeningBracket=function(e,t,i){var s=this.$brackets[e],o=1,r=new n(this,t.row,t.column),a=r.getCurrentToken();if(a||(a=r.stepForward()),a){i||(i=new RegExp("(\\.?"+a.type.replace(".","\\.").replace("rparen",".paren").replace(/\b(?:end)\b/,"(?:start|begin|end)")+")+"));for(var l=t.column-r.getCurrentTokenColumn()-2,h=a.value;;){for(;l>=0;){var c=h.charAt(l);if(c==s){if(0==(o-=1))return{row:r.getCurrentTokenRow(),column:l+r.getCurrentTokenColumn()}}else c==e&&(o+=1);l-=1}do{a=r.stepBackward()}while(a&&!i.test(a.type));if(null==a)break;l=(h=a.value).length-1}return null}},this.$findClosingBracket=function(e,t,i){var s=this.$brackets[e],o=1,r=new n(this,t.row,t.column),a=r.getCurrentToken();if(a||(a=r.stepForward()),a){i||(i=new RegExp("(\\.?"+a.type.replace(".","\\.").replace("lparen",".paren").replace(/\b(?:start|begin)\b/,"(?:start|begin|end)")+")+"));for(var l=t.column-r.getCurrentTokenColumn();;){for(var h=a.value,c=h.length;li&&(this.$docRowCache.splice(i,t),this.$screenRowCache.splice(i,t))},this.$getRowCacheIndex=function(e,t){for(var i=0,n=e.length-1;i<=n;){var s=i+n>>1,o=e[s];if(t>o)i=s+1;else{if(!(t=t);o++);return(i=n[o])?(i.index=o,i.start=s-i.value.length,i):null},this.setUndoManager=function(e){if(this.$undoManager=e,this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.$informUndoManager&&this.$informUndoManager.cancel(),e){var t=this;this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.$deltasFold.length&&(t.$deltas.push({group:"fold",deltas:t.$deltasFold}),t.$deltasFold=[]),t.$deltasDoc.length&&(t.$deltas.push({group:"doc",deltas:t.$deltasDoc}),t.$deltasDoc=[]),t.$deltas.length>0&&e.execute({action:"aceupdate",args:[t.$deltas,t],merge:t.mergeUndoDeltas}),t.mergeUndoDeltas=!1,t.$deltas=[]},this.$informUndoManager=s.delayedCall(this.$syncInformUndoManager)}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?s.stringRepeat(" ",this.getTabSize()):"\t"},this.setUseSoftTabs=function(e){this.setOption("useSoftTabs",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption("tabSize",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize==0},this.setNavigateWithinSoftTabs=function(e){this.setOption("navigateWithinSoftTabs",e)},this.getNavigateWithinSoftTabs=function(){return this.$navigateWithinSoftTabs},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption("overwrite",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=""),this.$decorations[e]+=" "+t,this._signal("changeBreakpoint",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||"").replace(" "+t,""),this._signal("changeBreakpoint",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t0&&(n=!!i.charAt(t-1).match(this.tokenRe)),n||(n=!!i.charAt(t).match(this.tokenRe)),n)var s=this.tokenRe;else s=/^\s+$/.test(i.slice(t-1,t+1))?/\s/:this.nonTokenRe;var o=t;if(o>0){do{o--}while(o>=0&&i.charAt(o).match(s));o++}for(var r=t;re&&(e=t.screenWidth)})),this.lineWidgetWidth=e},this.$computeWidth=function(e){if(this.$modified||e){if(this.$modified=!1,this.$useWrapMode)return this.screenWidth=this.$wrapLimit;for(var t=this.doc.getAllLines(),i=this.$rowLengthCache,n=0,s=0,o=this.$foldData[s],r=o?o.start.row:1/0,a=t.length,l=0;lr){if((l=o.end.row+1)>=a)break;r=(o=this.$foldData[s++])?o.start.row:1/0}null==i[l]&&(i[l]=this.$getStringScreenWidth(t[l])[0]),i[l]>n&&(n=i[l])}this.screenWidth=n}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.removeFullLines=function(e,t){return this.doc.removeFullLines(e,t)},this.undoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var i=null,n=e.length-1;-1!=n;n--){var s=e[n];"doc"==s.group?(this.doc.revertDeltas(s.deltas),i=this.$getUndoSelection(s.deltas,!0,i)):s.deltas.forEach((function(e){this.addFolds(e.folds)}),this)}return this.$fromUndo=!1,i&&this.$undoSelect&&!t&&this.selection.setSelectionRange(i),i}},this.redoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var i=null,n=0;ne.end.column&&(o.start.column+=h),o.end.row==e.end.row&&o.end.column>e.end.column&&(o.end.column+=h)),r&&o.start.row>=e.end.row&&(o.start.row+=r,o.end.row+=r)}if(o.end=this.insert(o.start,n),s.length){var a=e.start,l=o.start,h=(r=l.row-a.row,l.column-a.column);this.addFolds(s.map((function(e){return(e=e.clone()).start.row==a.row&&(e.start.column+=h),e.end.row==a.row&&(e.end.column+=h),e.start.row+=r,e.end.row+=r,e})))}return o},this.indentRows=function(e,t,i){i=i.replace(/\t/g,this.getTabString());for(var n=e;n<=t;n++)this.doc.insertInLine({row:n,column:0},i)},this.outdentRows=function(e){for(var t=e.collapseRows(),i=new c(0,0,0,0),n=this.getTabSize(),s=t.start.row;s<=t.end.row;++s){var o=this.getLine(s);i.start.row=s,i.end.row=s;for(var r=0;r0){var s;if((s=this.getRowFoldEnd(t+i))>this.doc.getLength()-1)return 0;n=s-t}else e=this.$clipRowToDocument(e),n=(t=this.$clipRowToDocument(t))-e+1;var o=new c(e,0,t,Number.MAX_VALUE),r=this.getFoldsInRange(o).map((function(e){return(e=e.clone()).start.row+=n,e.end.row+=n,e})),a=0==i?this.doc.getLines(e,t):this.doc.removeFullLines(e,t);return this.doc.insertFullLines(e+n,a),r.length&&this.addFolds(r),n},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){if(t=Math.max(0,t),e<0)e=0,t=0;else{var i=this.doc.getLength();e>=i?(e=i-1,t=this.doc.getLine(i-1).length):t=Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){if(this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0),e){var t=this.getLength();this.$wrapData=Array(t),this.$updateWrapData(0,t-1)}this._signal("changeWrapMode")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){this.$wrapLimitRange.min===e&&this.$wrapLimitRange.max===t||(this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this.$bidiHandler.markAsDirty(),this.$useWrapMode&&this._signal("changeWrapMode"))},this.adjustWrapLimit=function(e,t){var i=this.$wrapLimitRange;i.max<0&&(i={min:t,max:t});var n=this.$constrainWrapLimit(e,i.min,i.max);return n!=this.$wrapLimit&&n>1&&(this.$wrapLimit=n,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal("changeWrapLimit")),!0)},this.$constrainWrapLimit=function(e,t,i){return t&&(e=Math.max(t,e)),i&&(e=Math.min(i,e)),e},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(e){this.setWrapLimitRange(e,e)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t=this.$useWrapMode,i=e.action,n=e.start,s=e.end,o=n.row,r=s.row,a=r-o,l=null;if(this.$updating=!0,0!=a)if("remove"===i){this[t?"$wrapData":"$rowLengthCache"].splice(o,a);var h=this.$foldData;l=this.getFoldsInRange(e),this.removeFolds(l);var c=0;if(m=this.getFoldLine(s.row)){m.addRemoveChars(s.row,s.column,n.column-s.column),m.shiftRow(-a);var u=this.getFoldLine(o);u&&u!==m&&(u.merge(m),m=u),c=h.indexOf(m)+1}for(;c=s.row&&m.shiftRow(-a);r=o}else{var d=Array(a);d.unshift(o,0);var g=t?this.$wrapData:this.$rowLengthCache;if(g.splice.apply(g,d),h=this.$foldData,c=0,m=this.getFoldLine(o)){var f=m.range.compareInside(n.row,n.column);0==f?(m=m.split(n.row,n.column))&&(m.shiftRow(a),m.addRemoveChars(r,0,s.column-n.column)):-1==f&&(m.addRemoveChars(o,0,s.column-n.column),m.shiftRow(a)),c=h.indexOf(m)+1}for(;c=o&&m.shiftRow(a)}}else a=Math.abs(e.start.column-e.end.column),"remove"===i&&(l=this.getFoldsInRange(e),this.removeFolds(l),a=-a),(m=this.getFoldLine(o))&&m.addRemoveChars(o,n.column,a);return t&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),this.$updating=!1,t?this.$updateWrapData(o,r):this.$updateRowLengthCache(o,r),l},this.$updateRowLengthCache=function(e,t,i){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(i,n){var s,o,r=this.doc.getAllLines(),a=this.getTabSize(),l=this.$wrapData,h=this.$wrapLimit,c=i;for(n=Math.min(n,r.length-1);c<=n;)(o=this.getFoldLine(c,o))?(s=[],o.walk(function(i,n,o,a){var l;if(null!=i){(l=this.$getDisplayTokens(i,s.length))[0]=e;for(var h=1;h=4352&&e<=4447||e>=4515&&e<=4519||e>=4602&&e<=4607||e>=9001&&e<=9002||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12283||e>=12288&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12589||e>=12593&&e<=12686||e>=12688&&e<=12730||e>=12736&&e<=12771||e>=12784&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=13054||e>=13056&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=55216&&e<=55238||e>=55243&&e<=55291||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=65281&&e<=65376||e>=65504&&e<=65510)}this.$computeWrapSplits=function(i,n,s){if(0==i.length)return[];var o=[],r=i.length,a=0,l=0,h=this.$wrapAsCode,c=this.$indentedSoftWrap,u=n<=Math.max(2*s,8)||!1===c?0:Math.floor(n/2);function d(e){var t=i.slice(a,e),n=t.length;t.join("").replace(/12/g,(function(){n-=1})).replace(/2/g,(function(){n-=1})),o.length||(g=function(){var e=0;if(0===u)return e;if(c)for(var t=0;tn-g;){var f=a+n-g;if(i[f-1]>=10&&i[f]>=10)d(f);else if(i[f]!=e&&i[f]!=t){for(var m=Math.max(f-(n-(n>>2)),a-1);f>m&&i[f]m&&i[f]m&&9==i[f];)f--}else for(;f>m&&i[f]<10;)f--;f>m?d(++f):(2==i[f=a+n]&&f--,d(f-g))}else{for(;f!=a-1&&i[f]!=e;f--);if(f>a){d(f);continue}for(f=a+n;f39&&r<48||r>57&&r<64?s.push(9):r>=4352&&i(r)?s.push(1,2):s.push(1)}return s},this.$getStringScreenWidth=function(e,t,n){if(0==t)return[0,0];var s,o;for(null==t&&(t=1/0),n=n||0,o=0;o=4352&&i(s)?n+=2:n+=1,!(n>t));o++);return[n,o]},this.lineWidgets=null,this.getRowLength=function(e){if(this.lineWidgets)var t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0;else t=0;return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.getRowLineCount=function(e){return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1:1},this.getRowWrapIndent=function(e){if(this.$useWrapMode){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE),i=this.$wrapData[t.row];return i.length&&i[0]=0){a=h[c],o=this.$docRowCache[c];var d=e>h[u-1]}else d=!u;for(var g=this.getLength()-1,f=this.getNextFoldLine(o),m=f?f.start.row:1/0;a<=e&&!(a+(l=this.getRowLength(o))>e||o>=g);)a+=l,++o>m&&(o=f.end.row+1,m=(f=this.getNextFoldLine(o,f))?f.start.row:1/0),d&&(this.$docRowCache.push(o),this.$screenRowCache.push(a));if(f&&f.start.row<=o)n=this.getFoldDisplayLine(f),o=f.start.row;else{if(a+l<=e||o>g)return{row:g,column:this.getLine(g).length};n=this.getLine(o),f=null}var p=0,A=Math.floor(e-a);if(this.$useWrapMode){var C=this.$wrapData[o];C&&(s=C[A],A>0&&C.length&&(p=C.indent,r=C[A-1]||C[C.length-1],n=n.substring(r)))}return void 0!==i&&this.$bidiHandler.isBidiRow(a+A,o,A)&&(t=this.$bidiHandler.offsetToCol(i)),r+=this.$getStringScreenWidth(n,t-p)[1],this.$useWrapMode&&r>=s&&(r=s-1),f?f.idxToPosition(r):{row:o,column:r}},this.documentToScreenPosition=function(e,t){if(void 0===t)var i=this.$clipPositionToDocument(e.row,e.column);else i=this.$clipPositionToDocument(e,t);e=i.row,t=i.column;var n,s=0,o=null;(n=this.getFoldAt(e,t,1))&&(e=n.start.row,t=n.start.column);var r,a=0,l=this.$docRowCache,h=this.$getRowCacheIndex(l,e),c=l.length;if(c&&h>=0){a=l[h],s=this.$screenRowCache[h];var u=e>l[c-1]}else u=!c;for(var d=this.getNextFoldLine(a),g=d?d.start.row:1/0;a=g){if((r=d.end.row+1)>e)break;g=(d=this.getNextFoldLine(r,d))?d.start.row:1/0}else r=a+1;s+=this.getRowLength(a),a=r,u&&(this.$docRowCache.push(a),this.$screenRowCache.push(s))}var f="";d&&a>=g?(f=this.getFoldDisplayLine(d,e,t),o=d.start.row):(f=this.getLine(e).substring(0,t),o=e);var m=0;if(this.$useWrapMode){var p=this.$wrapData[o];if(p){for(var A=0;f.length>=p[A];)s++,A++;f=f.substring(p[A-1]||0,f.length),m=A>0?p.indent:0}}return{row:s,column:m+this.$getStringScreenWidth(f)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(this.$useWrapMode)for(var i=this.$wrapData.length,n=0,s=(a=0,(t=this.$foldData[a++])?t.start.row:1/0);ns&&(n=t.end.row+1,s=(t=this.$foldData[a++])?t.start.row:1/0)}else{e=this.getLength();for(var r=this.$foldData,a=0;ai);o++);return[n,o]})},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()},this.isFullWidth=i}.call(f.prototype),e("./edit_session/folding").Folding.call(f.prototype),e("./edit_session/bracket_match").BracketMatch.call(f.prototype),r.defineOptions(f.prototype,"session",{wrap:{set:function(e){if(e&&"off"!=e?"free"==e?e=!0:"printMargin"==e?e=-1:"string"==typeof e&&(e=parseInt(e,10)||!1):e=!1,this.$wrap!=e)if(this.$wrap=e,e){var t="number"==typeof e?e:null;this.setWrapLimitRange(t,t),this.setUseWrapMode(!0)}else this.setUseWrapMode(!1)},get:function(){return this.getUseWrapMode()?-1==this.$wrap?"printMargin":this.getWrapLimitRange().min?this.$wrap:"free":"off"},handlesSet:!0},wrapMethod:{set:function(e){(e="auto"==e?"text"!=this.$mode.type:"text"!=e)!=this.$wrapAsCode&&(this.$wrapAsCode=e,this.$useWrapMode&&(this.$modified=!0,this.$resetRowCache(0),this.$updateWrapData(0,this.getLength()-1)))},initialValue:"auto"},indentedSoftWrap:{initialValue:!0},firstLineNumber:{set:function(){this._signal("changeBreakpoint")},initialValue:1},useWorker:{set:function(e){this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(e){isNaN(e)||this.$tabSize===e||(this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._signal("changeTabSize"))},initialValue:4,handlesSet:!0},navigateWithinSoftTabs:{initialValue:!1},overwrite:{set:function(e){this._signal("changeOverwrite")},initialValue:!1},newLineMode:{set:function(e){this.doc.setNewLineMode(e)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(e){this.setMode(e)},get:function(){return this.$modeId}}}),t.EditSession=f})),ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],(function(e,t,i){"use strict";var n=e("./lib/lang"),s=e("./lib/oop"),o=e("./range").Range,r=function(){this.$options={}};(function(){this.set=function(e){return s.mixin(this.$options,e),this},this.getOptions=function(){return n.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$options,i=this.$matchIterator(e,t);if(!i)return!1;var n=null;return i.forEach((function(e,i,s,r){return n=new o(e,i,s,r),!(i==r&&t.start&&t.start.start&&0!=t.skipCurrent&&n.isEqual(t.start)&&(n=null,1))})),n},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var i=t.range,s=i?e.getLines(i.start.row,i.end.row):e.doc.getAllLines(),r=[],a=t.re;if(t.$isMultiLine){var l,h=a.length,c=s.length-h;e:for(var u=a.offset||0;u<=c;u++){for(var d=0;dm||(r.push(l=new o(u,m,u+h-1,p)),h>2&&(u=u+h-2))}}else for(var A=0;Av&&r[d].end.row==i.end.row;)d--;for(r=r.slice(A,d+1),A=0,d=r.length;A=a;i--)if(u(i,Number.MAX_VALUE,e))return;if(0!=t.wrap)for(i=l,a=r.row;i>=a;i--)if(u(i,Number.MAX_VALUE,e))return}};else h=function(e){var i=r.row;if(!u(i,r.column,e)){for(i+=1;i<=l;i++)if(u(i,0,e))return;if(0!=t.wrap)for(i=a,l=r.row;i<=l;i++)if(u(i,0,e))return}};if(t.$isMultiLine)var c=i.length,u=function(t,s,o){var r=n?t-c+1:t;if(!(r<0)){var a=e.getLine(r),l=a.search(i[0]);if(!(!n&&ls))return!!o(r,l,r+c-1,u)||void 0}}};else u=n?function(t,n,s){var o,r=e.getLine(t),a=[],l=0;for(i.lastIndex=0;o=i.exec(r);){var h=o[0].length;if(l=o.index,!h){if(l>=r.length)break;i.lastIndex=l+=1}if(o.index+h>n)break;a.push(o.index,h)}for(var c=a.length-1;c>=0;c-=2){var u=a[c-1];if(s(t,u,t,u+(h=a[c])))return!0}}:function(t,n,s){var o,r=e.getLine(t),a=n;for(i.lastIndex=n;o=i.exec(r);){var l=o[0].length;if(s(t,a=o.index,t,a+l))return!0;if(!l&&(i.lastIndex=a+=1,a>=r.length))return!1}};return{forEach:h}}}).call(r.prototype),t.Search=r})),ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"],(function(e,t,i){"use strict";var n=e("../lib/keys"),s=e("../lib/useragent"),o=n.KEY_MODS;function r(e,t){this.platform=t||(s.isMac?"mac":"win"),this.commands={},this.commandKeyBinding={},this.addCommands(e),this.$singleCommand=!0}function a(e,t){r.call(this,e,t),this.$singleCommand=!1}a.prototype=r.prototype,function(){function e(e){return"object"==typeof e&&e.bindKey&&e.bindKey.position||(e.isDefault?-100:0)}this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),this.commands[e.name]=e,e.bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e,t){var i=e&&("string"==typeof e?e:e.name);e=this.commands[i],t||delete this.commands[i];var n=this.commandKeyBinding;for(var s in n){var o=n[s];if(o==e)delete n[s];else if(Array.isArray(o)){var r=o.indexOf(e);-1!=r&&(o.splice(r,1),1==o.length&&(n[s]=o[0]))}}},this.bindKey=function(e,t,i){if("object"==typeof e&&e&&(null==i&&(i=e.position),e=e[this.platform]),e)return"function"==typeof t?this.addCommand({exec:t,bindKey:e,name:t.name||e}):void e.split("|").forEach((function(e){var n="";if(-1!=e.indexOf(" ")){var s=e.split(/\s+/);e=s.pop(),s.forEach((function(e){var t=this.parseKeys(e),i=o[t.hashId]+t.key;n+=(n?" ":"")+i,this._addCommandToBinding(n,"chainKeys")}),this),n+=" "}var r=this.parseKeys(e),a=o[r.hashId]+r.key;this._addCommandToBinding(n+a,t,i)}),this)},this._addCommandToBinding=function(t,i,n){var s,o=this.commandKeyBinding;if(i)if(!o[t]||this.$singleCommand)o[t]=i;else{Array.isArray(o[t])?-1!=(s=o[t].indexOf(i))&&o[t].splice(s,1):o[t]=[o[t]],"number"!=typeof n&&(n=e(i));var r=o[t];for(s=0;sn);s++);r.splice(s,0,i)}else delete o[t]},this.addCommands=function(e){e&&Object.keys(e).forEach((function(t){var i=e[t];if(i){if("string"==typeof i)return this.bindKey(i,t);"function"==typeof i&&(i={exec:i}),"object"==typeof i&&(i.name||(i.name=t),this.addCommand(i))}}),this)},this.removeCommands=function(e){Object.keys(e).forEach((function(t){this.removeCommand(e[t])}),this)},this.bindKeys=function(e){Object.keys(e).forEach((function(t){this.bindKey(t,e[t])}),this)},this._buildKeyHash=function(e){this.bindKey(e.bindKey,e)},this.parseKeys=function(e){var t=e.toLowerCase().split(/[\-\+]([\-\+])?/).filter((function(e){return e})),i=t.pop(),s=n[i];if(n.FUNCTION_KEYS[s])i=n.FUNCTION_KEYS[s].toLowerCase();else{if(!t.length)return{key:i,hashId:-1};if(1==t.length&&"shift"==t[0])return{key:i.toUpperCase(),hashId:-1}}for(var o=0,r=t.length;r--;){var a=n.KEY_MODS[t[r]];if(null==a)return"undefined"!=typeof console&&console.error("invalid modifier "+t[r]+" in "+e),!1;o|=a}return{key:i,hashId:o}},this.findKeyCommand=function(e,t){var i=o[e]+t;return this.commandKeyBinding[i]},this.handleKeyboard=function(e,t,i,n){if(!(n<0)){var s=o[t]+i,r=this.commandKeyBinding[s];return e.$keyChain&&(e.$keyChain+=" "+s,r=this.commandKeyBinding[e.$keyChain]||r),!r||"chainKeys"!=r&&"chainKeys"!=r[r.length-1]?(e.$keyChain&&(t&&4!=t||1!=i.length?(-1==t||n>0)&&(e.$keyChain=""):e.$keyChain=e.$keyChain.slice(0,-s.length-1)),{command:r}):(e.$keyChain=e.$keyChain||s,{command:"null"})}},this.getStatusText=function(e,t){return t.$keyChain||""}}.call(r.prototype),t.HashHandler=r,t.MultiHashHandler=a})),ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"],(function(e,t,i){"use strict";var n=e("../lib/oop"),s=e("../keyboard/hash_handler").MultiHashHandler,o=e("../lib/event_emitter").EventEmitter,r=function(e,t){s.call(this,t,e),this.byName=this.commands,this.setDefaultHandler("exec",(function(e){return e.command.exec(e.editor,e.args||{})}))};n.inherits(r,s),function(){n.implement(this,o),this.exec=function(e,t,i){if(Array.isArray(e)){for(var n=e.length;n--;)if(this.exec(e[n],t,i))return!0;return!1}if("string"==typeof e&&(e=this.commands[e]),!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;if(e.isAvailable&&!e.isAvailable(t))return!1;var s={editor:t,command:e,args:i};return s.returnValue=this._emit("exec",s),this._signal("afterExec",s),!1!==s.returnValue},this.toggleRecording=function(e){if(!this.$inReplay)return e&&e._emit("changeStatus"),this.recording?(this.macro.pop(),this.removeEventListener("exec",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on("exec",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(!this.$inReplay&&this.macro){if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach((function(t){"string"==typeof t?this.exec(t,e):this.exec(t[0],e,t[1])}),this)}finally{this.$inReplay=!1}}},this.trimMacro=function(e){return e.map((function(e){return"string"!=typeof e[0]&&(e[0]=e[0].name),e[1]||(e=e[0]),e}))}}.call(r.prototype),t.CommandManager=r})),ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"],(function(e,t,i){"use strict";var n=e("../lib/lang"),s=e("../config"),o=e("../range").Range;function r(e,t){return{win:e,mac:t}}t.commands=[{name:"showSettingsMenu",bindKey:r("Ctrl-,","Command-,"),exec:function(e){s.loadModule("ace/ext/settings_menu",(function(t){t.init(e),e.showSettingsMenu()}))},readOnly:!0},{name:"goToNextError",bindKey:r("Alt-E","F4"),exec:function(e){s.loadModule("ace/ext/error_marker",(function(t){t.showErrorMarker(e,1)}))},scrollIntoView:"animate",readOnly:!0},{name:"goToPreviousError",bindKey:r("Alt-Shift-E","Shift-F4"),exec:function(e){s.loadModule("ace/ext/error_marker",(function(t){t.showErrorMarker(e,-1)}))},scrollIntoView:"animate",readOnly:!0},{name:"selectall",bindKey:r("Ctrl-A","Command-A"),exec:function(e){e.selectAll()},readOnly:!0},{name:"centerselection",bindKey:r(null,"Ctrl-L"),exec:function(e){e.centerSelection()},readOnly:!0},{name:"gotoline",bindKey:r("Ctrl-L","Command-L"),exec:function(e){var t=parseInt(prompt("Enter line number:"),10);isNaN(t)||e.gotoLine(t)},readOnly:!0},{name:"fold",bindKey:r("Alt-L|Ctrl-F1","Command-Alt-L|Command-F1"),exec:function(e){e.session.toggleFold(!1)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"unfold",bindKey:r("Alt-Shift-L|Ctrl-Shift-F1","Command-Alt-Shift-L|Command-Shift-F1"),exec:function(e){e.session.toggleFold(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleFoldWidget",bindKey:r("F2","F2"),exec:function(e){e.session.toggleFoldWidget()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleParentFoldWidget",bindKey:r("Alt-F2","Alt-F2"),exec:function(e){e.session.toggleFoldWidget(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"foldall",bindKey:r(null,"Ctrl-Command-Option-0"),exec:function(e){e.session.foldAll()},scrollIntoView:"center",readOnly:!0},{name:"foldOther",bindKey:r("Alt-0","Command-Option-0"),exec:function(e){e.session.foldAll(),e.session.unfold(e.selection.getAllRanges())},scrollIntoView:"center",readOnly:!0},{name:"unfoldall",bindKey:r("Alt-Shift-0","Command-Option-Shift-0"),exec:function(e){e.session.unfold()},scrollIntoView:"center",readOnly:!0},{name:"findnext",bindKey:r("Ctrl-K","Command-G"),exec:function(e){e.findNext()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"findprevious",bindKey:r("Ctrl-Shift-K","Command-Shift-G"),exec:function(e){e.findPrevious()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"selectOrFindNext",bindKey:r("Alt-K","Ctrl-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findNext()},readOnly:!0},{name:"selectOrFindPrevious",bindKey:r("Alt-Shift-K","Ctrl-Shift-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findPrevious()},readOnly:!0},{name:"find",bindKey:r("Ctrl-F","Command-F"),exec:function(e){s.loadModule("ace/ext/searchbox",(function(t){t.Search(e)}))},readOnly:!0},{name:"overwrite",bindKey:"Insert",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:"selecttostart",bindKey:r("Ctrl-Shift-Home","Command-Shift-Home|Command-Shift-Up"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotostart",bindKey:r("Ctrl-Home","Command-Home|Command-Up"),exec:function(e){e.navigateFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectup",bindKey:r("Shift-Up","Shift-Up|Ctrl-Shift-P"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golineup",bindKey:r("Up","Up|Ctrl-P"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttoend",bindKey:r("Ctrl-Shift-End","Command-Shift-End|Command-Shift-Down"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotoend",bindKey:r("Ctrl-End","Command-End|Command-Down"),exec:function(e){e.navigateFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectdown",bindKey:r("Shift-Down","Shift-Down|Ctrl-Shift-N"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golinedown",bindKey:r("Down","Down|Ctrl-N"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordleft",bindKey:r("Ctrl-Shift-Left","Option-Shift-Left"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordleft",bindKey:r("Ctrl-Left","Option-Left"),exec:function(e){e.navigateWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolinestart",bindKey:r("Alt-Shift-Left","Command-Shift-Left|Ctrl-Shift-A"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolinestart",bindKey:r("Alt-Left|Home","Command-Left|Home|Ctrl-A"),exec:function(e){e.navigateLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectleft",bindKey:r("Shift-Left","Shift-Left|Ctrl-Shift-B"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoleft",bindKey:r("Left","Left|Ctrl-B"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordright",bindKey:r("Ctrl-Shift-Right","Option-Shift-Right"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordright",bindKey:r("Ctrl-Right","Option-Right"),exec:function(e){e.navigateWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolineend",bindKey:r("Alt-Shift-Right","Command-Shift-Right|Shift-End|Ctrl-Shift-E"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolineend",bindKey:r("Alt-Right|End","Command-Right|End|Ctrl-E"),exec:function(e){e.navigateLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectright",bindKey:r("Shift-Right","Shift-Right"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoright",bindKey:r("Right","Right|Ctrl-F"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectpagedown",bindKey:"Shift-PageDown",exec:function(e){e.selectPageDown()},readOnly:!0},{name:"pagedown",bindKey:r(null,"Option-PageDown"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:"gotopagedown",bindKey:r("PageDown","PageDown|Ctrl-V"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:"selectpageup",bindKey:"Shift-PageUp",exec:function(e){e.selectPageUp()},readOnly:!0},{name:"pageup",bindKey:r(null,"Option-PageUp"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:"gotopageup",bindKey:"PageUp",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:"scrollup",bindKey:r("Ctrl-Up",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"scrolldown",bindKey:r("Ctrl-Down",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"selectlinestart",bindKey:"Shift-Home",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectlineend",bindKey:"Shift-End",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"togglerecording",bindKey:r("Ctrl-Alt-E","Command-Option-E"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:"replaymacro",bindKey:r("Ctrl-Shift-E","Command-Shift-E"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:"jumptomatching",bindKey:r("Ctrl-P","Ctrl-P"),exec:function(e){e.jumpToMatching()},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"selecttomatching",bindKey:r("Ctrl-Shift-P","Ctrl-Shift-P"),exec:function(e){e.jumpToMatching(!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"expandToMatching",bindKey:r("Ctrl-Shift-M","Ctrl-Shift-M"),exec:function(e){e.jumpToMatching(!0,!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"passKeysToBrowser",bindKey:r(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:"copy",exec:function(e){},readOnly:!0},{name:"cut",exec:function(e){var t=e.getSelectionRange();e._emit("cut",t),e.selection.isEmpty()||(e.session.remove(t),e.clearSelection())},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"paste",exec:function(e,t){e.$handlePaste(t)},scrollIntoView:"cursor"},{name:"removeline",bindKey:r("Ctrl-D","Command-D"),exec:function(e){e.removeLines()},scrollIntoView:"cursor",multiSelectAction:"forEachLine"},{name:"duplicateSelection",bindKey:r("Ctrl-Shift-D","Command-Shift-D"),exec:function(e){e.duplicateSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"sortlines",bindKey:r("Ctrl-Alt-S","Command-Alt-S"),exec:function(e){e.sortLines()},scrollIntoView:"selection",multiSelectAction:"forEachLine"},{name:"togglecomment",bindKey:r("Ctrl-/","Command-/"),exec:function(e){e.toggleCommentLines()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"toggleBlockComment",bindKey:r("Ctrl-Shift-/","Command-Shift-/"),exec:function(e){e.toggleBlockComment()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"modifyNumberUp",bindKey:r("Ctrl-Shift-Up","Alt-Shift-Up"),exec:function(e){e.modifyNumber(1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"modifyNumberDown",bindKey:r("Ctrl-Shift-Down","Alt-Shift-Down"),exec:function(e){e.modifyNumber(-1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"replace",bindKey:r("Ctrl-H","Command-Option-F"),exec:function(e){s.loadModule("ace/ext/searchbox",(function(t){t.Search(e,!0)}))}},{name:"undo",bindKey:r("Ctrl-Z","Command-Z"),exec:function(e){e.undo()}},{name:"redo",bindKey:r("Ctrl-Shift-Z|Ctrl-Y","Command-Shift-Z|Command-Y"),exec:function(e){e.redo()}},{name:"copylinesup",bindKey:r("Alt-Shift-Up","Command-Option-Up"),exec:function(e){e.copyLinesUp()},scrollIntoView:"cursor"},{name:"movelinesup",bindKey:r("Alt-Up","Option-Up"),exec:function(e){e.moveLinesUp()},scrollIntoView:"cursor"},{name:"copylinesdown",bindKey:r("Alt-Shift-Down","Command-Option-Down"),exec:function(e){e.copyLinesDown()},scrollIntoView:"cursor"},{name:"movelinesdown",bindKey:r("Alt-Down","Option-Down"),exec:function(e){e.moveLinesDown()},scrollIntoView:"cursor"},{name:"del",bindKey:r("Delete","Delete|Ctrl-D|Shift-Delete"),exec:function(e){e.remove("right")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"backspace",bindKey:r("Shift-Backspace|Backspace","Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"),exec:function(e){e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"cut_or_delete",bindKey:r("Shift-Delete",null),exec:function(e){if(!e.selection.isEmpty())return!1;e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestart",bindKey:r("Alt-Backspace","Command-Backspace"),exec:function(e){e.removeToLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineend",bindKey:r("Alt-Delete","Ctrl-K|Command-Delete"),exec:function(e){e.removeToLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestarthard",bindKey:r("Ctrl-Shift-Backspace",null),exec:function(e){var t=e.selection.getRange();t.start.column=0,e.session.remove(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineendhard",bindKey:r("Ctrl-Shift-Delete",null),exec:function(e){var t=e.selection.getRange();t.end.column=Number.MAX_VALUE,e.session.remove(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordleft",bindKey:r("Ctrl-Backspace","Alt-Backspace|Ctrl-Alt-Backspace"),exec:function(e){e.removeWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordright",bindKey:r("Ctrl-Delete","Alt-Delete"),exec:function(e){e.removeWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"outdent",bindKey:r("Shift-Tab","Shift-Tab"),exec:function(e){e.blockOutdent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"indent",bindKey:r("Tab","Tab"),exec:function(e){e.indent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"blockoutdent",bindKey:r("Ctrl-[","Ctrl-["),exec:function(e){e.blockOutdent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"blockindent",bindKey:r("Ctrl-]","Ctrl-]"),exec:function(e){e.blockIndent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"insertstring",exec:function(e,t){e.insert(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"inserttext",exec:function(e,t){e.insert(n.stringRepeat(t.text||"",t.times||1))},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"splitline",bindKey:r(null,"Ctrl-O"),exec:function(e){e.splitLine()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"transposeletters",bindKey:r("Alt-Shift-X","Ctrl-T"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)},scrollIntoView:"cursor"},{name:"touppercase",bindKey:r("Ctrl-U","Ctrl-U"),exec:function(e){e.toUpperCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"tolowercase",bindKey:r("Ctrl-Shift-U","Ctrl-Shift-U"),exec:function(e){e.toLowerCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"expandtoline",bindKey:r("Ctrl-Shift-L","Command-Shift-L"),exec:function(e){var t=e.selection.getRange();t.start.column=t.end.column=0,t.end.row++,e.selection.setRange(t,!1)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"joinlines",bindKey:r(null,null),exec:function(e){for(var t=e.selection.isBackwards(),i=t?e.selection.getSelectionLead():e.selection.getSelectionAnchor(),s=t?e.selection.getSelectionAnchor():e.selection.getSelectionLead(),r=e.session.doc.getLine(i.row).length,a=e.session.doc.getTextRange(e.selection.getRange()).replace(/\n\s*/," ").length,l=e.session.doc.getLine(i.row),h=i.row+1;h<=s.row+1;h++){var c=n.stringTrimLeft(n.stringTrimRight(e.session.doc.getLine(h)));0!==c.length&&(c=" "+c),l+=c}s.row+10?(e.selection.moveCursorTo(i.row,i.column),e.selection.selectTo(i.row,i.column+a)):(r=e.session.doc.getLine(i.row).length>r?r+1:r,e.selection.moveCursorTo(i.row,r))},multiSelectAction:"forEach",readOnly:!0},{name:"invertSelection",bindKey:r(null,null),exec:function(e){var t=e.session.doc.getLength()-1,i=e.session.doc.getLine(t).length,n=e.selection.rangeList.ranges,s=[];n.length<1&&(n=[e.selection.getRange()]);for(var r=0;r0&&this.$blockScrolling--;var i=t&&t.scrollIntoView;if(i){switch(i){case"center-animate":i="animate";case"center":this.renderer.scrollCursorIntoView(null,.5);break;case"animate":case"cursor":this.renderer.scrollCursorIntoView();break;case"selectionPart":var n=this.selection.getRange(),s=this.renderer.layerConfig;(n.start.row>=s.lastRow||n.end.row<=s.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead)}"animate"==i&&this.renderer.animateScrolling(this.curOp.scrollTop)}this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=["backspace","del","insertstring"],this.$historyTracker=function(e){if(this.$mergeUndoDeltas){var t=this.prevOp,i=this.$mergeableCommands,n=t.command&&e.command.name==t.command.name;if("insertstring"==e.command.name){var s=e.args;void 0===this.mergeNextCommand&&(this.mergeNextCommand=!0),n=n&&this.mergeNextCommand&&(!/\s/.test(s)||/\s/.test(t.args)),this.mergeNextCommand=!0}else n=n&&-1!==i.indexOf(e.command.name);"always"!=this.$mergeUndoDeltas&&Date.now()-this.sequenceStartTime>2e3&&(n=!1),n?this.session.mergeUndoDeltas=!0:-1!==i.indexOf(e.command.name)&&(this.sequenceStartTime=Date.now())}},this.setKeyboardHandler=function(e,t){if(e&&"string"==typeof e){this.$keybindingId=e;var i=this;A.loadModule(["keybinding",e],(function(n){i.$keybindingId==e&&i.keyBinding.setKeyboardHandler(n&&n.handler),t&&t()}))}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(e),t&&t()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){if(this.session!=e){this.curOp&&this.endOperation(),this.curOp={};var t=this.session;if(t){this.session.off("change",this.$onDocumentChange),this.session.off("changeMode",this.$onChangeMode),this.session.off("tokenizerUpdate",this.$onTokenizerUpdate),this.session.off("changeTabSize",this.$onChangeTabSize),this.session.off("changeWrapLimit",this.$onChangeWrapLimit),this.session.off("changeWrapMode",this.$onChangeWrapMode),this.session.off("changeFold",this.$onChangeFold),this.session.off("changeFrontMarker",this.$onChangeFrontMarker),this.session.off("changeBackMarker",this.$onChangeBackMarker),this.session.off("changeBreakpoint",this.$onChangeBreakpoint),this.session.off("changeAnnotation",this.$onChangeAnnotation),this.session.off("changeOverwrite",this.$onCursorChange),this.session.off("changeScrollTop",this.$onScrollTopChange),this.session.off("changeScrollLeft",this.$onScrollLeftChange);var i=this.session.getSelection();i.off("changeCursor",this.$onCursorChange),i.off("changeSelection",this.$onSelectionChange)}this.session=e,e?(this.$onDocumentChange=this.onDocumentChange.bind(this),e.on("change",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.on("changeMode",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.on("tokenizerUpdate",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.on("changeTabSize",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.on("changeWrapLimit",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.on("changeWrapMode",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.on("changeFold",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.on("changeFrontMarker",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.on("changeBackMarker",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.on("changeBreakpoint",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.on("changeAnnotation",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.on("changeOverwrite",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.on("changeScrollTop",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.on("changeScrollLeft",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.on("changeCursor",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.on("changeSelection",this.$onSelectionChange),this.onChangeMode(),this.$blockScrolling+=1,this.onCursorChange(),this.$blockScrolling-=1,this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(e)),this._signal("changeSession",{session:e,oldSession:t}),this.curOp=null,t&&t._signal("changeEditor",{oldEditor:this}),e&&e._signal("changeEditor",{editor:this}),e&&e.bgTokenizer&&e.bgTokenizer.scheduleStart()}},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?1==t?this.navigateFileEnd():-1==t&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e,t){this.renderer.setTheme(e,t)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.getFontSize=function(){return this.getOption("fontSize")||s.computedStyle(this.container,"fontSize")},this.setFontSize=function(e){this.setOption("fontSize",e)},this.$highlightBrackets=function(){if(this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null),!this.$highlightPending){var e=this;this.$highlightPending=!0,setTimeout((function(){e.$highlightPending=!1;var t=e.session;if(t&&t.bgTokenizer){var i=t.findMatchingBracket(e.getCursorPosition());if(i)var n=new g(i.row,i.column,i.row,i.column+1);else t.$mode.getMatching&&(n=t.$mode.getMatching(e.session));n&&(t.$bracketHighlight=t.addMarker(n,"ace_bracket","text"))}}),50)}},this.$highlightTags=function(){if(!this.$highlightTagPending){var e=this;this.$highlightTagPending=!0,setTimeout((function(){e.$highlightTagPending=!1;var t=e.session;if(t&&t.bgTokenizer){var i=e.getCursorPosition(),n=new C(e.session,i.row,i.column),s=n.getCurrentToken();if(!s||!/\b(?:tag-open|tag-name)/.test(s.type))return t.removeMarker(t.$tagHighlight),void(t.$tagHighlight=null);if(-1==s.type.indexOf("tag-open")||(s=n.stepForward())){var o=s.value,r=0,a=n.stepBackward();if("<"==a.value)do{a=s,(s=n.stepForward())&&s.value===o&&-1!==s.type.indexOf("tag-name")&&("<"===a.value?r++:"=0);else{do{s=a,a=n.stepBackward(),s&&s.value===o&&-1!==s.type.indexOf("tag-name")&&("<"===a.value?r++:"1||(e=!1)),t.$highlightLineMarker&&!e)t.removeMarker(t.$highlightLineMarker.id),t.$highlightLineMarker=null;else if(!t.$highlightLineMarker&&e){var i=new g(e.row,e.column,e.row,1/0);i.id=t.addMarker(i,"ace_active-line","screenLine"),t.$highlightLineMarker=i}else e&&(t.$highlightLineMarker.start.row=e.row,t.$highlightLineMarker.end.row=e.row,t.$highlightLineMarker.start.column=e.column,t._signal("changeBackMarker"))},this.onSelectionChange=function(e){var t=this.session;if(t.$selectionMarker&&t.removeMarker(t.$selectionMarker),t.$selectionMarker=null,this.selection.isEmpty())this.$updateHighlightActiveLine();else{var i=this.selection.getRange(),n=this.getSelectionStyle();t.$selectionMarker=t.addMarker(i,"ace_selection",n)}var s=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(s),this._signal("changeSelection")},this.$getSelectionHighLightRegexp=function(){var e=this.session,t=this.getSelectionRange();if(!t.isEmpty()&&!t.isMultiLine()){var i=t.start.column-1,n=t.end.column+1,s=e.getLine(t.start.row),o=s.length,r=s.substring(Math.max(i,0),Math.min(n,o));if(!(i>=0&&/^[\w\d]/.test(r)||n<=o&&/[\w\d]$/.test(r))&&(r=s.substring(t.start.column,t.end.column),/^[\w\d]+$/.test(r)))return this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:r})}},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(e){this.renderer.updateText(),this._emit("changeMode",e)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var e=this.getSelectedText();return this._signal("copy",e),e},this.onCopy=function(){this.commands.exec("copy",this)},this.onCut=function(){this.commands.exec("cut",this)},this.onPaste=function(e,t){var i={text:e,event:t};this.commands.exec("paste",this,i)},this.$handlePaste=function(e){"string"==typeof e&&(e={text:e}),this._signal("paste",e);var t=e.text;if(!this.inMultiSelectMode||this.inVirtualSelectionMode)this.insert(t);else{var i=t.split(/\r\n|\r|\n/),n=this.selection.rangeList.ranges;if(i.length>n.length||i.length<2||!i[1])return this.commands.exec("insertstring",this,t);for(var s=n.length;s--;){var o=n[s];o.isEmpty()||this.session.remove(o),this.session.insert(o.start,i[s])}}},this.execCommand=function(e,t){return this.commands.exec(e,this,t)},this.insert=function(e,t){var i=this.session,n=i.getMode(),s=this.getCursorPosition();if(this.getBehavioursEnabled()&&!t){var o=n.transformAction(i.getState(s.row),"insertion",this,i,e);o&&(e!==o.text&&(this.session.mergeUndoDeltas=!1,this.$mergeNextCommand=!1),e=o.text)}if("\t"==e&&(e=this.session.getTabString()),this.selection.isEmpty())this.session.getOverwrite()&&-1==e.indexOf("\n")&&((r=new g.fromPoints(s,s)).end.column+=e.length,this.session.remove(r));else{var r=this.getSelectionRange();s=this.session.remove(r),this.clearSelection()}if("\n"==e||"\r\n"==e){var a=i.getLine(s.row);if(s.column>a.search(/\S|$/)){var l=a.substr(s.column).search(/\S|$/);i.doc.removeInLine(s.row,s.column,s.column+l)}}this.clearSelection();var h=s.column,c=i.getState(s.row),u=(a=i.getLine(s.row),n.checkOutdent(c,a,e));if(i.insert(s,e),o&&o.selection&&(2==o.selection.length?this.selection.setSelectionRange(new g(s.row,h+o.selection[0],s.row,h+o.selection[1])):this.selection.setSelectionRange(new g(s.row+o.selection[0],o.selection[1],s.row+o.selection[2],o.selection[3]))),i.getDocument().isNewLine(e)){var d=n.getNextLineIndent(c,a.slice(0,s.column),i.getTabString());i.insert({row:s.row+1,column:0},d)}u&&n.autoOutdent(c,i,s.row)},this.onTextInput=function(e){this.keyBinding.onTextInput(e)},this.onCommandKey=function(e,t,i){this.keyBinding.onCommandKey(e,t,i)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption("scrollSpeed",e)},this.getScrollSpeed=function(){return this.getOption("scrollSpeed")},this.setDragDelay=function(e){this.setOption("dragDelay",e)},this.getDragDelay=function(){return this.getOption("dragDelay")},this.setSelectionStyle=function(e){this.setOption("selectionStyle",e)},this.getSelectionStyle=function(){return this.getOption("selectionStyle")},this.setHighlightActiveLine=function(e){this.setOption("highlightActiveLine",e)},this.getHighlightActiveLine=function(){return this.getOption("highlightActiveLine")},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.setHighlightSelectedWord=function(e){this.setOption("highlightSelectedWord",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption("readOnly",e)},this.getReadOnly=function(){return this.getOption("readOnly")},this.setBehavioursEnabled=function(e){this.setOption("behavioursEnabled",e)},this.getBehavioursEnabled=function(){return this.getOption("behavioursEnabled")},this.setWrapBehavioursEnabled=function(e){this.setOption("wrapBehavioursEnabled",e)},this.getWrapBehavioursEnabled=function(){return this.getOption("wrapBehavioursEnabled")},this.setShowFoldWidgets=function(e){this.setOption("showFoldWidgets",e)},this.getShowFoldWidgets=function(){return this.getOption("showFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.remove=function(e){this.selection.isEmpty()&&("left"==e?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var i=this.session,n=i.getState(t.start.row),s=i.getMode().transformAction(n,"deletion",this,i,t);if(0===t.end.column){var o=i.getTextRange(t);if("\n"==o[o.length-1]){var r=i.getLine(t.end.row);/^\s+$/.test(r)&&(t.end.column=r.length)}}s&&(t=s)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert("\n"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(this.selection.isEmpty()){var e=this.getCursorPosition(),t=e.column;if(0!==t){var i,n,s=this.session.getLine(e.row);tt.toLowerCase()?1:0}));var s=new g(0,0,0,0);for(n=e.first;n<=e.last;n++){var o=t.getLine(n);s.start.row=n,s.end.row=n,s.end.column=o.length,t.replace(s,i[n-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),i=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,i,e)},this.getNumberAt=function(e,t){var i=/[\-]?[0-9]+(?:\.[0-9]+)?/g;i.lastIndex=0;for(var n=this.session.getLine(e);i.lastIndex=t)return{value:s[0],start:s.index,end:s.index+s[0].length}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,i=this.selection.getCursor().column,n=new g(t,i-1,t,i),s=this.session.getTextRange(n);if(!isNaN(parseFloat(s))&&isFinite(s)){var o=this.getNumberAt(t,i);if(o){var r=o.value.indexOf(".")>=0?o.start+o.value.indexOf(".")+1:o.end,a=o.start+o.value.length-r,l=parseFloat(o.value);l*=Math.pow(10,a),r!==o.end&&ig+1)break;g=f.last}for(c--,a=this.session.$moveLines(d,g,t?0:e),t&&-1==e&&(u=c+1);u<=c;)r[u].moveBy(a,0),u++;t||(a=0),l+=a}s.fromOrientedRange(s.ranges[0]),s.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(e){return e=(e||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(this.getCursorPosition())},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var i=this.renderer,n=this.renderer.layerConfig,s=e*Math.floor(n.height/n.lineHeight);this.$blockScrolling++,!0===t?this.selection.$moveSelection((function(){this.moveCursorBy(s,0)})):!1===t&&(this.selection.moveCursorBy(s,0),this.selection.clearSelection()),this.$blockScrolling--;var o=i.scrollTop;i.scrollBy(0,s*n.lineHeight),null!=t&&i.scrollCursorIntoView(null,.5),i.animateScrolling(o)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,i,n){this.renderer.scrollToLine(e,t,i,n)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.$blockScrolling+=1,this.selection.selectAll(),this.$blockScrolling-=1},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e,t){var i=this.getCursorPosition(),n=new C(this.session,i.row,i.column),s=n.getCurrentToken(),o=s||n.stepForward();if(o){var r,a,l=!1,h={},c=i.column-o.start,u={")":"(","(":"(","]":"[","[":"[","{":"{","}":"{"};do{if(o.value.match(/[{}()\[\]]/g)){for(;c=0;--o)this.$tryReplace(i[o],e)&&n++;return this.selection.setSelectionRange(s),this.$blockScrolling-=1,n},this.$tryReplace=function(e,t){var i=this.session.getTextRange(e);return null!==(t=this.$search.replace(i,t))?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,i){t||(t={}),"string"==typeof e||e instanceof RegExp?t.needle=e:"object"==typeof e&&n.mixin(t,e);var s=this.selection.getRange();null==t.needle&&((e=this.session.getTextRange(s)||this.$search.$options.needle)||(s=this.session.getWordRange(s.start.row,s.start.column),e=this.session.getTextRange(s)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:s});var o=this.$search.find(this.session);return t.preventScroll?o:o?(this.revealRange(o,i),o):(t.backwards?s.start=s.end:s.end=s.start,void this.selection.setRange(s))},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.$blockScrolling+=1,this.session.unfold(e),this.selection.setSelectionRange(e),this.$blockScrolling-=1;var i=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),!1!==t&&this.renderer.animateScrolling(i)},this.undo=function(){this.$blockScrolling++,this.session.getUndoManager().undo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.$blockScrolling++,this.session.getUndoManager().redo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal("destroy",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(e){if(e){var t,i=this,n=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement("div"));var s=this.$scrollAnchor;s.style.cssText="position:absolute",this.container.insertBefore(s,this.container.firstChild);var o=this.on("changeSelection",(function(){n=!0})),r=this.renderer.on("beforeRender",(function(){n&&(t=i.renderer.container.getBoundingClientRect())})),a=this.renderer.on("afterRender",(function(){if(n&&t&&(i.isFocused()||i.searchBox&&i.searchBox.isFocused())){var e=i.renderer,o=e.$cursorLayer.$pixelPos,r=e.layerConfig,a=o.top-r.offset;null!=(n=o.top>=0&&a+t.top<0||!(o.topwindow.innerHeight)&&null)&&(s.style.top=a+"px",s.style.left=o.left+"px",s.style.height=r.lineHeight+"px",s.scrollIntoView(n)),n=t=null}}));this.setAutoScrollEditorIntoView=function(e){e||(delete this.setAutoScrollEditorIntoView,this.off("changeSelection",o),this.renderer.off("afterRender",a),this.renderer.off("beforeRender",r))}}},this.$resetCursorStyle=function(){var e=this.$cursorStyle||"ace",t=this.renderer.$cursorLayer;t&&(t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&"wide"!=e,s.setCssClass(t.element,"ace_slim-cursors",/slim/.test(e)))}}.call(F.prototype),A.defineOptions(F.prototype,"editor",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal("changeSelectionStyle",{data:e})},initialValue:"line"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.$resetCursorStyle()},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:["ace","slim","smooth","wide"],initialValue:"ace"},mergeUndoDeltas:{values:[!1,!0,"always"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},keyboardHandler:{set:function(e){this.setKeyboardHandler(e)},get:function(){return this.keybindingId},handlesSet:!0},hScrollBarAlwaysVisible:"renderer",vScrollBarAlwaysVisible:"renderer",highlightGutterLine:"renderer",animatedScroll:"renderer",showInvisibles:"renderer",showPrintMargin:"renderer",printMarginColumn:"renderer",printMargin:"renderer",fadeFoldWidgets:"renderer",showFoldWidgets:"renderer",showLineNumbers:"renderer",showGutter:"renderer",displayIndentGuides:"renderer",fontSize:"renderer",fontFamily:"renderer",maxLines:"renderer",minLines:"renderer",scrollPastEnd:"renderer",fixedWidthGutter:"renderer",theme:"renderer",scrollSpeed:"$mouseHandler",dragDelay:"$mouseHandler",dragEnabled:"$mouseHandler",focusTimout:"$mouseHandler",tooltipFollowsMouse:"$mouseHandler",firstLineNumber:"session",overwrite:"session",newLineMode:"session",useWorker:"session",useSoftTabs:"session",tabSize:"session",wrap:"session",indentedSoftWrap:"session",foldStyle:"session",mode:"session"}),t.Editor=F})),ace.define("ace/undomanager",["require","exports","module"],(function(e,t,i){"use strict";var n=function(){this.reset()};(function(){function e(e){return{action:e.action,start:e.start,end:e.end,lines:1==e.lines.length?null:e.lines,text:1==e.lines.length?e.lines[0]:null}}function t(e){return{action:e.action,start:e.start,end:e.end,lines:e.lines||[e.text]}}function i(e,t){for(var i=new Array(e.length),n=0;n0},this.hasRedo=function(){return this.$redoStack.length>0},this.markClean=function(){this.dirtyCounter=0},this.isClean=function(){return 0===this.dirtyCounter},this.$serializeDeltas=function(t){return i(t,e)},this.$deserializeDeltas=function(e){return i(e,t)}}).call(n.prototype),t.UndoManager=n})),ace.define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter"],(function(e,t,i){"use strict";var n=e("../lib/dom"),s=e("../lib/oop"),o=e("../lib/lang"),r=e("../lib/event_emitter").EventEmitter,a=function(e){this.element=n.createElement("div"),this.element.className="ace_layer ace_gutter-layer",e.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$annotations=[],this.$updateAnnotations=this.$updateAnnotations.bind(this),this.$cells=[]};(function(){s.implement(this,r),this.setSession=function(e){this.session&&this.session.removeEventListener("change",this.$updateAnnotations),this.session=e,e&&e.on("change",this.$updateAnnotations)},this.addGutterDecoration=function(e,t){window.console&&console.warn&&console.warn("deprecated use session.addGutterDecoration"),this.session.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){window.console&&console.warn&&console.warn("deprecated use session.removeGutterDecoration"),this.session.removeGutterDecoration(e,t)},this.setAnnotations=function(e){this.$annotations=[];for(var t=0;tr&&(m=o.end.row+1,r=(o=t.getNextFoldLine(m,o))?o.start.row:1/0),m>s){for(;this.$cells.length>f+1;)g=this.$cells.pop(),this.element.removeChild(g.element);break}(g=this.$cells[++f])||((g={element:null,textNode:null,foldWidget:null}).element=n.createElement("div"),g.textNode=document.createTextNode(""),g.element.appendChild(g.textNode),this.element.appendChild(g.element),this.$cells[f]=g);var p="ace_gutter-cell ";if(l[m]&&(p+=l[m]),h[m]&&(p+=h[m]),this.$annotations[m]&&(p+=this.$annotations[m].className),g.element.className!=p&&(g.element.className=p),(C=t.getRowLength(m)*e.lineHeight+"px")!=g.element.style.height&&(g.element.style.height=C),a){var A=a[m];null==A&&(A=a[m]=t.getFoldWidget(m))}if(A){g.foldWidget||(g.foldWidget=n.createElement("span"),g.element.appendChild(g.foldWidget)),p="ace_fold-widget ace_"+A,"start"==A&&m==r&&mi.right-t.right?"foldWidgets":void 0}}).call(a.prototype),t.Gutter=a})),ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"],(function(e,t,i){"use strict";var n=e("../range").Range,s=e("../lib/dom"),o=function(e){this.element=s.createElement("div"),this.element.className="ace_layer ace_marker-layer",e.appendChild(this.element)};(function(){this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.update=function(e){if(e){this.config=e;var t=[];for(var i in this.markers){var n=this.markers[i];if(n.range){var s=n.range.clipRows(e.firstRow,e.lastRow);if(!s.isEmpty())if(s=s.toScreenRange(this.session),n.renderer){var o=this.$getTop(s.start.row,e),r=this.$padding+(this.session.$bidiHandler.isBidiRow(s.start.row)?this.session.$bidiHandler.getPosLeft(s.start.column):s.start.column*e.characterWidth);n.renderer(t,s,r,o,e)}else"fullLine"==n.type?this.drawFullLineMarker(t,s,n.clazz,e):"screenLine"==n.type?this.drawScreenLineMarker(t,s,n.clazz,e):s.isMultiLine()?"text"==n.type?this.drawTextMarker(t,s,n.clazz,e):this.drawMultiLineMarker(t,s,n.clazz,e):this.session.$bidiHandler.isBidiRow(s.start.row)?this.drawBidiSingleLineMarker(t,s,n.clazz+" ace_start ace_br15",e):this.drawSingleLineMarker(t,s,n.clazz+" ace_start ace_br15",e)}else n.update(t,this,this.session,e)}this.element.innerHTML=t.join("")}},this.$getTop=function(e,t){return(e-t.firstRowScreen)*t.lineHeight},this.drawTextMarker=function(e,t,i,s,o){for(var r=this.session,a=t.start.row,l=t.end.row,h=a,c=0,u=0,d=r.getScreenLastRowColumn(h),g=null,f=new n(h,t.start.column,h,u);h<=l;h++)f.start.row=f.end.row=h,f.start.column=h==a?t.start.column:r.getRowWrapIndent(h),f.end.column=d,c=u,u=d,d=h+1d?4:0)|(h==l?8:0)),this.session.$bidiHandler.isBidiRow(h)?this.drawBidiSingleLineMarker(e,f,g,s,h==l?0:1,o):this.drawSingleLineMarker(e,f,g,s,h==l?0:1,o)},this.drawMultiLineMarker=function(e,t,i,n,s){var o,r,a,l=this.$padding;if(s=s||"",this.session.$bidiHandler.isBidiRow(t.start.row)?((h=t.clone()).end.row=h.start.row,h.end.column=this.session.getLine(h.start.row).length,this.drawBidiSingleLineMarker(e,h,i+" ace_br1 ace_start",n,null,s)):(o=n.lineHeight,r=this.$getTop(t.start.row,n),a=l+t.start.column*n.characterWidth,e.push("
")),this.session.$bidiHandler.isBidiRow(t.end.row)){var h;(h=t.clone()).start.row=h.end.row,h.start.column=0,this.drawBidiSingleLineMarker(e,h,i+" ace_br12",n,null,s)}else{var c=t.end.column*n.characterWidth;o=n.lineHeight,r=this.$getTop(t.end.row,n),e.push("
")}if(!((o=(t.end.row-t.start.row-1)*n.lineHeight)<=0)){r=this.$getTop(t.start.row+1,n);var u=(t.start.column?1:0)|(t.end.column?0:8);e.push("
")}},this.drawSingleLineMarker=function(e,t,i,n,s,o){var r=n.lineHeight,a=(t.end.column+(s||0)-t.start.column)*n.characterWidth,l=this.$getTop(t.start.row,n),h=this.$padding+t.start.column*n.characterWidth;e.push("
")},this.drawBidiSingleLineMarker=function(e,t,i,n,s,o){var r=n.lineHeight,a=this.$getTop(t.start.row,n),l=this.$padding;this.session.$bidiHandler.getSelections(t.start.column,t.end.column).forEach((function(t){e.push("
")}))},this.drawFullLineMarker=function(e,t,i,n,s){var o=this.$getTop(t.start.row,n),r=n.lineHeight;t.start.row!=t.end.row&&(r+=this.$getTop(t.end.row,n)-o),e.push("
")},this.drawScreenLineMarker=function(e,t,i,n,s){var o=this.$getTop(t.start.row,n),r=n.lineHeight;e.push("
")}}).call(o.prototype),t.Marker=o})),ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],(function(e,t,i){"use strict";var n=e("../lib/oop"),s=e("../lib/dom"),o=e("../lib/lang"),r=(e("../lib/useragent"),e("../lib/event_emitter").EventEmitter),a=function(e){this.element=s.createElement("div"),this.element.className="ace_layer ace_text-layer",e.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this)};(function(){n.implement(this,r),this.EOF_CHAR="¶",this.EOL_CHAR_LF="¬",this.EOL_CHAR_CRLF="¤",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR="—",this.SPACE_CHAR="·",this.$padding=0,this.$updateEolChar=function(){var e="\n"==this.session.doc.getNewLineCharacter()?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=e)return this.EOL_CHAR=e,!0},this.setPadding=function(e){this.$padding=e,this.element.style.padding="0 "+e+"px"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(e){this.$fontMetrics=e,this.$fontMetrics.on("changeCharacterSize",function(e){this._signal("changeCharacterSize",e)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(e){this.session=e,e&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(e){return this.showInvisibles!=e&&(this.showInvisibles=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides!=e&&(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;for(var t=this.$tabStrings=[0],i=1;i"+o.stringRepeat(this.TAB_CHAR,i)+""):t.push(o.stringRepeat(" ",i));if(this.displayIndentGuides){this.$indentGuideRe=/\s\S| \t|\t |\s$/;var n="ace_indent-guide",s="",r="";if(this.showInvisibles){n+=" ace_invisible",s=" ace_invisible_space",r=" ace_invisible_tab";var a=o.stringRepeat(this.SPACE_CHAR,this.tabSize),l=o.stringRepeat(this.TAB_CHAR,this.tabSize)}else l=a=o.stringRepeat(" ",this.tabSize);this.$tabStrings[" "]=""+a+"",this.$tabStrings["\t"]=""+l+""}},this.updateLines=function(e,t,i){this.config.lastRow==e.lastRow&&this.config.firstRow==e.firstRow||this.scrollLines(e),this.config=e;for(var n=Math.max(t,e.firstRow),s=Math.min(i,e.lastRow),o=this.element.childNodes,r=0,a=e.firstRow;ah&&(a=l.end.row+1,h=(l=this.session.getNextFoldLine(a,l))?l.start.row:1/0),!(a>s);){var c=o[r++];if(c){var u=[];this.$renderLine(u,a,!this.$useLineGroups(),a==h&&l),c.style.height=e.lineHeight*this.session.getRowLength(a)+"px",c.innerHTML=u.join("")}a++}},this.scrollLines=function(e){var t=this.config;if(this.config=e,!t||t.lastRow0;n--)i.removeChild(i.firstChild);if(t.lastRow>e.lastRow)for(n=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);n>0;n--)i.removeChild(i.lastChild);if(e.firstRowt.lastRow&&(s=this.$renderLinesFragment(e,t.lastRow+1,e.lastRow),i.appendChild(s))},this.$renderLinesFragment=function(e,t,i){for(var n=this.element.ownerDocument.createDocumentFragment(),o=t,r=this.session.getNextFoldLine(o),a=r?r.start.row:1/0;o>a&&(o=r.end.row+1,a=(r=this.session.getNextFoldLine(o,r))?r.start.row:1/0),!(o>i);){var l=s.createElement("div"),h=[];if(this.$renderLine(h,o,!1,o==a&&r),l.innerHTML=h.join(""),this.$useLineGroups())l.className="ace_line_group",n.appendChild(l),l.style.height=e.lineHeight*this.session.getRowLength(o)+"px";else for(;l.firstChild;)n.appendChild(l.firstChild);o++}return n},this.update=function(e){this.config=e;for(var t=[],i=e.firstRow,n=e.lastRow,s=i,o=this.session.getNextFoldLine(s),r=o?o.start.row:1/0;s>r&&(s=o.end.row+1,r=(o=this.session.getNextFoldLine(s,o))?o.start.row:1/0),!(s>n);)this.$useLineGroups()&&t.push("
"),this.$renderLine(t,s,!1,s==r&&o),this.$useLineGroups()&&t.push("
"),s++;this.element.innerHTML=t.join("")},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,i,n){var s=this,r=n.replace(/\t|&|<|>|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF\uFFF9-\uFFFC])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,(function(e,i,n,r,a){if(i)return s.showInvisibles?""+o.stringRepeat(s.SPACE_CHAR,e.length)+"":e;if("&"==e)return"&";if("<"==e)return"<";if(">"==e)return">";if("\t"==e){var l=s.session.getScreenTabSize(t+r);return t+=l-1,s.$tabStrings[l]}if(" "==e){var h=s.showInvisibles?"ace_cjk ace_invisible ace_invisible_space":"ace_cjk",c=s.showInvisibles?s.SPACE_CHAR:"";return t+=1,""+c+""}return n?""+s.SPACE_CHAR+"":(t+=1,""+e+"")}));if(this.$textToken[i.type])e.push(r);else{var a="ace_"+i.type.replace(/\./g," ace_"),l="";"fold"==i.type&&(l=" style='width:"+i.value.length*this.config.characterWidth+"px;' "),e.push("",r,"")}return t+n.length},this.renderIndentGuide=function(e,t,i){var n=t.search(this.$indentGuideRe);return n<=0||n>=i?t:" "==t[0]?(n-=n%this.tabSize,e.push(o.stringRepeat(this.$tabStrings[" "],n/this.tabSize)),t.substr(n)):"\t"==t[0]?(e.push(o.stringRepeat(this.$tabStrings["\t"],n)),t.substr(n)):t},this.$renderWrappedLine=function(e,t,i,n){for(var s=0,r=0,a=i[0],l=0,h=0;h=a;)l=this.$renderToken(e,l,c,u.substring(0,a-s)),u=u.substring(a-s),s=a,n||e.push("","
"),e.push(o.stringRepeat(" ",i.indent)),l=0,a=i[++r]||Number.MAX_VALUE;0!=u.length&&(s+=u.length,l=this.$renderToken(e,l,c,u))}}},this.$renderSimpleLine=function(e,t){var i=0,n=t[0],s=n.value;this.displayIndentGuides&&(s=this.renderIndentGuide(e,s)),s&&(i=this.$renderToken(e,i,n,s));for(var o=1;o"),s.length){var o=this.session.getRowSplitData(t);o&&o.length?this.$renderWrappedLine(e,s,o,i):this.$renderSimpleLine(e,s)}this.showInvisibles&&(n&&(t=n.end.row),e.push("",t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,"")),i||e.push("
")},this.$getFoldLineTokens=function(e,t){var i=this.session,n=[],s=i.getTokens(e);return t.walk((function(e,t,o,r,a){null!=e?n.push({type:"fold",value:e}):(a&&(s=i.getTokens(t)),s.length&&function(e,t,i){for(var s=0,o=0;o+e[s].value.lengthi-t&&(r=r.substring(0,i-t)),n.push({type:e[s].type,value:r}),o=t+r.length,s+=1);oi?n.push({type:e[s].type,value:r.substring(0,i-o)}):n.push(e[s]),o+=r.length,s+=1}}(s,r,o))}),t.end.row,this.session.getLine(t.end.row).length),n},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$measureNode&&this.$measureNode.parentNode.removeChild(this.$measureNode),delete this.$measureNode}}).call(a.prototype),t.Text=a})),ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"],(function(e,t,i){"use strict";var n,s=e("../lib/dom"),o=function(e){this.element=s.createElement("div"),this.element.className="ace_layer ace_cursor-layer",e.appendChild(this.element),void 0===n&&(n=!("opacity"in this.element.style)),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),s.addCssClass(this.element,"ace_hidden-cursors"),this.$updateCursors=(n?this.$updateVisibility:this.$updateOpacity).bind(this)};(function(){this.$updateVisibility=function(e){for(var t=this.cursors,i=t.length;i--;)t[i].style.visibility=e?"":"hidden"},this.$updateOpacity=function(e){for(var t=this.cursors,i=t.length;i--;)t[i].style.opacity=e?"":"0"},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e==this.smoothBlinking||n||(this.smoothBlinking=e,s.setCssClass(this.element,"ace_smooth-blinking",e),this.$updateCursors(!0),this.$updateCursors=this.$updateOpacity.bind(this),this.restartTimer())},this.addCursor=function(){var e=s.createElement("div");return e.className="ace_cursor",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(this.cursors.length>1){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,s.addCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,s.removeCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.restartTimer=function(){var e=this.$updateCursors;if(clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.smoothBlinking&&s.removeCssClass(this.element,"ace_smooth-blinking"),e(!0),this.isBlinking&&this.blinkInterval&&this.isVisible){this.smoothBlinking&&setTimeout(function(){s.addCssClass(this.element,"ace_smooth-blinking")}.bind(this));var t=function(){this.timeoutId=setTimeout((function(){e(!1)}),.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval((function(){e(!0),t()}),this.blinkInterval),t()}},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e||(e=this.session.selection.getCursor());var i=this.session.documentToScreenPosition(e);return{left:this.$padding+(this.session.$bidiHandler.isBidiRow(i.row,e.row)?this.session.$bidiHandler.getPosLeft(i.column):i.column*this.config.characterWidth),top:(i.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight}},this.update=function(e){this.config=e;var t=this.session.$selectionMarkers,i=0,n=0;void 0!==t&&0!==t.length||(t=[{cursor:null}]),i=0;for(var s=t.length;ie.height+e.offset||o.top<0)&&i>1)){var r=(this.cursors[n++]||this.addCursor()).style;this.drawCursor?this.drawCursor(r,o,e,t[i],this.session):(r.left=o.left+"px",r.top=o.top+"px",r.width=e.characterWidth+"px",r.height=e.lineHeight+"px")}}for(;this.cursors.length>n;)this.removeCursor();var a=this.session.getOverwrite();this.$setOverwrite(a),this.$pixelPos=o,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(e){e!=this.overwrite&&(this.overwrite=e,e?s.addCssClass(this.element,"ace_overwrite-cursors"):s.removeCssClass(this.element,"ace_overwrite-cursors"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(o.prototype),t.Cursor=o})),ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],(function(e,t,i){"use strict";var n=e("./lib/oop"),s=e("./lib/dom"),o=e("./lib/event"),r=e("./lib/event_emitter").EventEmitter,a=32768,l=function(e){this.element=s.createElement("div"),this.element.className="ace_scrollbar ace_scrollbar"+this.classSuffix,this.inner=s.createElement("div"),this.inner.className="ace_scrollbar-inner",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,o.addListener(this.element,"scroll",this.onScroll.bind(this)),o.addListener(this.element,"mousedown",o.preventDefault)};(function(){n.implement(this,r),this.setVisible=function(e){this.element.style.display=e?"":"none",this.isVisible=e,this.coeff=1}}).call(l.prototype);var h=function(e,t){l.call(this,e),this.scrollTop=0,this.scrollHeight=0,t.$scrollbarWidth=this.width=s.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+"px",this.$minWidth=0};n.inherits(h,l),function(){this.classSuffix="-v",this.onScroll=function(){if(!this.skipEvent){if(this.scrollTop=this.element.scrollTop,1!=this.coeff){var e=this.element.clientHeight/this.scrollHeight;this.scrollTop=this.scrollTop*(1-e)/(this.coeff-e)}this._emit("scroll",{data:this.scrollTop})}this.skipEvent=!1},this.getWidth=function(){return Math.max(this.isVisible?this.width:0,this.$minWidth||0)},this.setHeight=function(e){this.element.style.height=e+"px"},this.setInnerHeight=this.setScrollHeight=function(e){this.scrollHeight=e,e>a?(this.coeff=a/e,e=a):1!=this.coeff&&(this.coeff=1),this.inner.style.height=e+"px"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=e,this.element.scrollTop=e*this.coeff)}}.call(h.prototype);var c=function(e,t){l.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+"px"};n.inherits(c,l),function(){this.classSuffix="-h",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit("scroll",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+"px"},this.setInnerWidth=function(e){this.inner.style.width=e+"px"},this.setScrollWidth=function(e){this.inner.style.width=e+"px"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}.call(c.prototype),t.ScrollBar=h,t.ScrollBarV=h,t.ScrollBarH=c,t.VScrollBar=h,t.HScrollBar=c})),ace.define("ace/renderloop",["require","exports","module","ace/lib/event"],(function(e,t,i){"use strict";var n=e("./lib/event"),s=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.window=t||window};(function(){this.schedule=function(e){if(this.changes=this.changes|e,!this.pending&&this.changes){this.pending=!0;var t=this;n.nextFrame((function(){var e;for(t.pending=!1;e=t.changes;)t.changes=0,t.onRender(e)}),this.window)}}}).call(s.prototype),t.RenderLoop=s})),ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],(function(e,t,i){var n=e("../lib/oop"),s=e("../lib/dom"),o=e("../lib/lang"),r=e("../lib/useragent"),a=e("../lib/event_emitter").EventEmitter,l=0,h=t.FontMetrics=function(e){this.el=s.createElement("div"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=s.createElement("div"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=s.createElement("div"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),l||this.$testFractionalRect(),this.$measureNode.innerHTML=o.stringRepeat("X",l),this.$characterSize={width:0,height:0},this.checkForSizeChanges()};(function(){n.implement(this,a),this.$characterSize={width:0,height:0},this.$testFractionalRect=function(){var e=s.createElement("div");this.$setMeasureNodeStyles(e.style),e.style.width="0.2px",document.documentElement.appendChild(e);var t=e.getBoundingClientRect().width;l=t>0&&t<1?50:100,e.parentNode.removeChild(e)},this.$setMeasureNodeStyles=function(e,t){e.width=e.height="auto",e.left=e.top="0px",e.visibility="hidden",e.position="absolute",e.whiteSpace="pre",r.isIE<8?e["font-family"]="inherit":e.font="inherit",e.overflow=t?"hidden":"visible"},this.checkForSizeChanges=function(){var e=this.$measureSizes();if(e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight="bold";var t=this.$measureSizes();this.$measureNode.style.fontWeight="",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit("changeCharacterSize",{data:e})}},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer)return this.$pollSizeChangesTimer;var e=this;return this.$pollSizeChangesTimer=setInterval((function(){e.checkForSizeChanges()}),500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(){if(50===l){var e=null;try{e=this.$measureNode.getBoundingClientRect()}catch(t){e={width:0,height:0}}var t={height:e.height,width:e.width/l}}else t={height:this.$measureNode.clientHeight,width:this.$measureNode.clientWidth/l};return 0===t.width||0===t.height?null:t},this.$measureCharWidth=function(e){return this.$main.innerHTML=o.stringRepeat(e,l),this.$main.getBoundingClientRect().width/l},this.getCharacterWidth=function(e){var t=this.charSizes[e];return void 0===t&&(t=this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)}}).call(h.prototype)})),ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/lib/useragent","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter"],(function(e,t,i){"use strict";var n=e("./lib/oop"),s=e("./lib/dom"),o=e("./config"),r=e("./lib/useragent"),a=e("./layer/gutter").Gutter,l=e("./layer/marker").Marker,h=e("./layer/text").Text,c=e("./layer/cursor").Cursor,u=e("./scrollbar").HScrollBar,d=e("./scrollbar").VScrollBar,g=e("./renderloop").RenderLoop,f=e("./layer/font_metrics").FontMetrics,m=e("./lib/event_emitter").EventEmitter;s.importCssString('.ace_editor {position: relative;overflow: hidden;font: 12px/normal \'Monaco\', \'Menlo\', \'Ubuntu Mono\', \'Consolas\', \'source-code-pro\', monospace;direction: ltr;text-align: left;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;cursor: text;}.ace_content {position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;min-width: 100%;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \'\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC");}.ace_scrollbar {position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;text-indent: -1em;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;white-space: pre!important;}.ace_text-input.ace_composition {background: inherit;color: inherit;z-index: 1000;opacity: 1;text-indent: 0;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;word-wrap: normal;white-space: pre;height: 100%;width: 100%;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;}.ace_text-layer {font: inherit !important;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;border-left: 2px solid;transform: translatez(0);}.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_smooth-blinking .ace_cursor {-webkit-transition: opacity 0.18s;transition: opacity 0.18s;}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;}.ace_line .ace_fold {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC");}.ace_tooltip {background-color: #FFF;background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block; }.ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==");}.ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC");}.ace_dark .ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {-webkit-transition: opacity 0.4s ease 0.05s;transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {-webkit-transition: opacity 0.05s ease 0.05s;transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}.ace_br1 {border-top-left-radius : 3px;}.ace_br2 {border-top-right-radius : 3px;}.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}.ace_br4 {border-bottom-right-radius: 3px;}.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}.ace_br8 {border-bottom-left-radius : 3px;}.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_text-input-ios {position: absolute !important;top: -100000px !important;left: -100000px !important;}',"ace_editor.css");var p=function(e,t){var i=this;this.container=e||s.createElement("div"),this.$keepTextAreaAtCursor=!r.isOldIE,s.addCssClass(this.container,"ace_editor"),this.setTheme(t),this.$gutter=s.createElement("div"),this.$gutter.className="ace_gutter",this.container.appendChild(this.$gutter),this.$gutter.setAttribute("aria-hidden",!0),this.scroller=s.createElement("div"),this.scroller.className="ace_scroller",this.container.appendChild(this.scroller),this.content=s.createElement("div"),this.content.className="ace_content",this.scroller.appendChild(this.content),this.$gutterLayer=new a(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onGutterResize.bind(this)),this.$markerBack=new l(this.content);var n=this.$textLayer=new h(this.content);this.canvas=n.element,this.$markerFront=new l(this.content),this.$cursorLayer=new c(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new d(this.container,this),this.scrollBarH=new u(this.container,this),this.scrollBarV.addEventListener("scroll",(function(e){i.$scrollAnimation||i.session.setScrollTop(e.data-i.scrollMargin.top)})),this.scrollBarH.addEventListener("scroll",(function(e){i.$scrollAnimation||i.session.setScrollLeft(e.data-i.scrollMargin.left)})),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new f(this.container),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener("changeCharacterSize",(function(e){i.updateCharacterSize(),i.onResize(!0,i.gutterWidth,i.$size.width,i.$size.height),i._signal("changeCharacterSize",e)})),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$loop=new g(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),o.resetOptions(this),o._emit("renderer",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,n.implement(this,m),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle("ace_nobold",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin()},this.setSession=function(e){this.session&&this.session.doc.off("changeNewLineMode",this.onChangeNewLineMode),this.session=e,e&&this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e),e&&(this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.scrollBarH.scrollLeft=this.scrollBarV.scrollTop=null,this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on("changeNewLineMode",this.onChangeNewLineMode))},this.updateLines=function(e,t,i){if(void 0===t&&(t=1/0),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRowthis.layerConfig.lastRow||this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar(),this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR)},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(e,t,i,n){if(!(this.resizing>2)){this.resizing>0?this.resizing++:this.resizing=e?1:0;var s=this.container;n||(n=s.clientHeight||s.scrollHeight),i||(i=s.clientWidth||s.scrollWidth);var o=this.$updateCachedSize(e,t,i,n);if(!this.$size.scrollerHeight||!i&&!n)return this.resizing=0;e&&(this.$gutterLayer.$padding=null),e?this.$renderChanges(o|this.$changes,!0):this.$loop.schedule(o|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null}},this.$updateCachedSize=function(e,t,i,n){n-=this.$extraHeight||0;var s=0,o=this.$size,r={width:o.width,height:o.height,scrollerHeight:o.scrollerHeight,scrollerWidth:o.scrollerWidth};return n&&(e||o.height!=n)&&(o.height=n,s|=this.CHANGE_SIZE,o.scrollerHeight=o.height,this.$horizScroll&&(o.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+"px",s|=this.CHANGE_SCROLL),i&&(e||o.width!=i)&&(s|=this.CHANGE_SIZE,o.width=i,null==t&&(t=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=t,this.scrollBarH.element.style.left=this.scroller.style.left=t+"px",o.scrollerWidth=Math.max(0,i-t-this.scrollBarV.getWidth()),this.scrollBarH.element.style.right=this.scroller.style.right=this.scrollBarV.getWidth()+"px",this.scroller.style.bottom=this.scrollBarH.getHeight()+"px",(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)&&(s|=this.CHANGE_FULL)),o.$dirty=!i||!n,s&&this._signal("resize",r),s},this.onGutterResize=function(){var e=this.$showGutter?this.$gutter.offsetWidth:0;e!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,e,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()||this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):(this.$computeLayerConfig(),this.$loop.schedule(this.CHANGE_MARKER))},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-2*this.$padding,t=Math.floor(e/this.characterWidth);return this.session.adjustWrapLimit(t,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(e){this.setOption("animatedScroll",e)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.setOption("showInvisibles",e),this.session.$bidiHandler.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.getOption("showInvisibles")},this.getDisplayIndentGuides=function(){return this.getOption("displayIndentGuides")},this.setDisplayIndentGuides=function(e){this.setOption("displayIndentGuides",e)},this.setShowPrintMargin=function(e){this.setOption("showPrintMargin",e)},this.getShowPrintMargin=function(){return this.getOption("showPrintMargin")},this.setPrintMarginColumn=function(e){this.setOption("printMarginColumn",e)},this.getPrintMarginColumn=function(){return this.getOption("printMarginColumn")},this.getShowGutter=function(){return this.getOption("showGutter")},this.setShowGutter=function(e){return this.setOption("showGutter",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.$updateGutterLineHighlight=function(){var e=this.$cursorLayer.$pixelPos,t=this.layerConfig.lineHeight;if(this.session.getUseWrapMode()){var i=this.session.selection.getCursor();i.column=0,e=this.$cursorLayer.getPixelPosition(i,!0),t*=this.session.getRowLength(i.row)}this.$gutterLineHighlight.style.top=e.top-this.layerConfig.offset+"px",this.$gutterLineHighlight.style.height=t+"px"},this.$updatePrintMargin=function(){if(this.$showPrintMargin||this.$printMarginEl){if(!this.$printMarginEl){var e=s.createElement("div");e.className="ace_layer ace_print-margin-layer",this.$printMarginEl=s.createElement("div"),this.$printMarginEl.className="ace_print-margin",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)}var t=this.$printMarginEl.style;t.left=this.characterWidth*this.$printMarginColumn+this.$padding+"px",t.visibility=this.$showPrintMargin?"visible":"hidden",this.session&&-1==this.session.$wrap&&this.adjustWrapLimit()}},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.scroller},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){if(this.$keepTextAreaAtCursor){var e=this.layerConfig,t=this.$cursorLayer.$pixelPos.top,i=this.$cursorLayer.$pixelPos.left;t-=e.offset;var n=this.textarea.style,s=this.lineHeight;if(t<0||t>e.height-s)n.top=n.left="0";else{var o=this.characterWidth;if(this.$composition){var r=this.textarea.value.replace(/^\x01+/,"");o*=this.session.$getStringScreenWidth(r)[0]+2,s+=2}(i-=this.scrollLeft)>this.$size.scrollerWidth-o&&(i=this.$size.scrollerWidth-o),i+=this.gutterWidth,n.height=s+"px",n.width=o+"px",n.left=Math.min(i,this.$size.scrollerWidth-o)+"px",n.top=Math.min(t,this.$size.height-s)+"px"}}},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(0===this.layerConfig.offset?0:1)},this.getLastFullyVisibleRow=function(){var e=this.layerConfig,t=e.lastRow;return this.session.documentToScreenRow(t,0)*e.lineHeight-this.session.getScrollTop()>e.height-e.lineHeight?t-1:t},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,i,n){var s=this.scrollMargin;s.top=0|e,s.bottom=0|t,s.right=0|n,s.left=0|i,s.v=s.top+s.bottom,s.h=s.left+s.right,s.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-s.top),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption("hScrollBarAlwaysVisible",e)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption("vScrollBarAlwaysVisible",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(e-=(t-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>e-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){if(this.$changes&&(e|=this.$changes,this.$changes=0),this.session&&this.container.offsetWidth&&!this.$frozen&&(e||t)){if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal("beforeRender"),this.session&&this.session.$bidiHandler&&this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);var i=this.layerConfig;if(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL){if(e|=this.$computeLayerConfig(),i.firstRow!=this.layerConfig.firstRow&&i.firstRowScreen==this.layerConfig.firstRowScreen){var n=this.scrollTop+(i.firstRow-this.layerConfig.firstRow)*this.lineHeight;n>0&&(this.scrollTop=n,e|=this.CHANGE_SCROLL,e|=this.$computeLayerConfig())}i=this.layerConfig,this.$updateScrollBarV(),e&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),this.$gutterLayer.element.style.marginTop=-i.offset+"px",this.content.style.marginTop=-i.offset+"px",this.content.style.width=i.width+2*this.$padding+"px",this.content.style.height=i.minHeight+"px"}if(e&this.CHANGE_H_SCROLL&&(this.content.style.marginLeft=-this.scrollLeft+"px",this.scroller.className=this.scrollLeft<=0?"ace_scroller":"ace_scroller ace_scroll-left"),e&this.CHANGE_FULL)return this.$textLayer.update(i),this.$showGutter&&this.$gutterLayer.update(i),this.$markerBack.update(i),this.$markerFront.update(i),this.$cursorLayer.update(i),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),void this._signal("afterRender");if(e&this.CHANGE_SCROLL)return e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(i):this.$textLayer.scrollLines(i),this.$showGutter&&this.$gutterLayer.update(i),this.$markerBack.update(i),this.$markerFront.update(i),this.$cursorLayer.update(i),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),this.$moveTextAreaToCursor(),void this._signal("afterRender");e&this.CHANGE_TEXT?(this.$textLayer.update(i),this.$showGutter&&this.$gutterLayer.update(i)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(i):(e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER)&&this.$showGutter&&this.$gutterLayer.update(i),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(i),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(i),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(i),this._signal("afterRender")}else this.$changes|=e},this.$autosize=function(){var e=this.session.getScreenLength()*this.lineHeight,t=this.$maxLines*this.lineHeight,i=Math.min(t,Math.max((this.$minLines||1)*this.lineHeight,e))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(i+=this.scrollBarH.getHeight()),this.$maxPixelHeight&&i>this.$maxPixelHeight&&(i=this.$maxPixelHeight);var n=e>t;if(i!=this.desiredHeight||this.$size.height!=this.desiredHeight||n!=this.$vScroll){n!=this.$vScroll&&(this.$vScroll=n,this.scrollBarV.setVisible(n));var s=this.container.clientWidth;this.container.style.height=i+"px",this.$updateCachedSize(!0,this.$gutterWidth,s,i),this.desiredHeight=i,this._signal("autosize")}},this.$computeLayerConfig=function(){var e=this.session,t=this.$size,i=t.height<=2*this.lineHeight,n=this.session.getScreenLength()*this.lineHeight,s=this.$getLongestLine(),o=!i&&(this.$hScrollBarAlwaysVisible||t.scrollerWidth-s-2*this.$padding<0),r=this.$horizScroll!==o;r&&(this.$horizScroll=o,this.scrollBarH.setVisible(o));var a=this.$vScroll;this.$maxLines&&this.lineHeight>1&&this.$autosize();var l=this.scrollTop%this.lineHeight,h=t.scrollerHeight+this.lineHeight,c=!this.$maxLines&&this.$scrollPastEnd?(t.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;n+=c;var u=this.scrollMargin;this.session.setScrollTop(Math.max(-u.top,Math.min(this.scrollTop,n-t.scrollerHeight+u.bottom))),this.session.setScrollLeft(Math.max(-u.left,Math.min(this.scrollLeft,s+2*this.$padding-t.scrollerWidth+u.right)));var d=!i&&(this.$vScrollBarAlwaysVisible||t.scrollerHeight-n+c<0||this.scrollTop>u.top),g=a!==d;g&&(this.$vScroll=d,this.scrollBarV.setVisible(d));var f,m,p=Math.ceil(h/this.lineHeight)-1,A=Math.max(0,Math.round((this.scrollTop-l)/this.lineHeight)),C=A+p,F=this.lineHeight;A=e.screenToDocumentRow(A,0);var w=e.getFoldLine(A);w&&(A=w.start.row),f=e.documentToScreenRow(A,0),m=e.getRowLength(A)*F,C=Math.min(e.screenToDocumentRow(C,0),e.getLength()-1),h=t.scrollerHeight+e.getRowLength(C)*F+m,l=this.scrollTop-f*F;var v=0;return this.layerConfig.width!=s&&(v=this.CHANGE_H_SCROLL),(r||g)&&(v=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal("scrollbarVisibilityChanged"),g&&(s=this.$getLongestLine())),this.layerConfig={width:s,padding:this.$padding,firstRow:A,firstRowScreen:f,lastRow:C,lineHeight:F,characterWidth:this.characterWidth,minHeight:h,maxHeight:n,offset:l,gutterOffset:F?Math.max(0,Math.ceil((l+t.height-t.scrollerHeight)/F)):0,height:this.$size.scrollerHeight},v},this.$updateLines=function(){if(this.$changedLines){var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var i=this.layerConfig;if(!(e>i.lastRow+1||to?(t&&l+r>o+this.lineHeight&&(o-=t*this.$size.scrollerHeight),0===o&&(o=-this.scrollMargin.top),this.session.setScrollTop(o)):l+this.$size.scrollerHeight-as?(s=1-this.scrollMargin.top||t>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom||e<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left||e>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right||void 0},this.pixelToScreenCoordinates=function(e,t){var i=this.scroller.getBoundingClientRect(),n=e+this.scrollLeft-i.left-this.$padding,s=n/this.characterWidth,o=Math.floor((t+this.scrollTop-i.top)/this.lineHeight),r=Math.round(s);return{row:o,column:r,side:s-r>0?1:-1,offsetX:n}},this.screenToTextCoordinates=function(e,t){var i=this.scroller.getBoundingClientRect(),n=e+this.scrollLeft-i.left-this.$padding,s=Math.round(n/this.characterWidth),o=(t+this.scrollTop-i.top)/this.lineHeight;return this.session.screenToDocumentPosition(o,Math.max(s,0),n)},this.textToScreenCoordinates=function(e,t){var i=this.scroller.getBoundingClientRect(),n=this.session.documentToScreenPosition(e,t),s=this.$padding+(this.session.$bidiHandler.isBidiRow(n.row,e)?this.session.$bidiHandler.getPosLeft(n.column):Math.round(n.column*this.characterWidth)),o=n.row*this.lineHeight;return{pageX:i.left+s-this.scrollLeft,pageY:i.top+o-this.scrollTop}},this.visualizeFocus=function(){s.addCssClass(this.container,"ace_focus")},this.visualizeBlur=function(){s.removeCssClass(this.container,"ace_focus")},this.showComposition=function(e){this.$composition||(this.$composition={keepTextAreaAtCursor:this.$keepTextAreaAtCursor,cssText:this.textarea.style.cssText}),this.$keepTextAreaAtCursor=!0,s.addCssClass(this.textarea,"ace_composition"),this.textarea.style.cssText="",this.$moveTextAreaToCursor()},this.setCompositionText=function(e){this.$moveTextAreaToCursor()},this.hideComposition=function(){this.$composition&&(s.removeCssClass(this.textarea,"ace_composition"),this.$keepTextAreaAtCursor=this.$composition.keepTextAreaAtCursor,this.textarea.style.cssText=this.$composition.cssText,this.$composition=null)},this.setTheme=function(e,t){var i=this;if(this.$themeId=e,i._dispatchEvent("themeChange",{theme:e}),e&&"string"!=typeof e)r(e);else{var n=e||this.$options.theme.initialValue;o.loadModule(["theme",n],r)}function r(n){if(i.$themeId!=e)return t&&t();if(!n||!n.cssClass)throw new Error("couldn't load module "+e+" or it didn't call define");s.importCssString(n.cssText,n.cssClass,i.container.ownerDocument),i.theme&&s.removeCssClass(i.container,i.theme.cssClass);var o="padding"in n?n.padding:"padding"in(i.theme||{})?4:i.$padding;i.$padding&&o!=i.$padding&&i.setPadding(o),i.$theme=n.cssClass,i.theme=n,s.addCssClass(i.container,n.cssClass),s.setCssClass(i.container,"ace_dark",n.isDark),i.$size&&(i.$size.width=0,i.$updateSizeAsync()),i._dispatchEvent("themeLoaded",{theme:n}),t&&t()}},this.getTheme=function(){return this.$themeId},this.setStyle=function(e,t){s.setCssClass(this.container,e,!1!==t)},this.unsetStyle=function(e){s.removeCssClass(this.container,e)},this.setCursorStyle=function(e){this.scroller.style.cursor!=e&&(this.scroller.style.cursor=e)},this.setMouseCursor=function(e){this.scroller.style.cursor=e},this.destroy=function(){this.$textLayer.destroy(),this.$cursorLayer.destroy()}}).call(p.prototype),o.defineOptions(p.prototype,"renderer",{animatedScroll:{initialValue:!1},showInvisibles:{set:function(e){this.$textLayer.setShowInvisibles(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!1},showPrintMargin:{set:function(){this.$updatePrintMargin()},initialValue:!0},printMarginColumn:{set:function(){this.$updatePrintMargin()},initialValue:80},printMargin:{set:function(e){"number"==typeof e&&(this.$printMarginColumn=e),this.$showPrintMargin=!!e,this.$updatePrintMargin()},get:function(){return this.$showPrintMargin&&this.$printMarginColumn}},showGutter:{set:function(e){this.$gutter.style.display=e?"block":"none",this.$loop.schedule(this.CHANGE_FULL),this.onGutterResize()},initialValue:!0},fadeFoldWidgets:{set:function(e){s.setCssClass(this.$gutter,"ace_fade-fold-widgets",e)},initialValue:!1},showFoldWidgets:{set:function(e){this.$gutterLayer.setShowFoldWidgets(e)},initialValue:!0},showLineNumbers:{set:function(e){this.$gutterLayer.setShowLineNumbers(e),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},displayIndentGuides:{set:function(e){this.$textLayer.setDisplayIndentGuides(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!0},highlightGutterLine:{set:function(e){if(!this.$gutterLineHighlight)return this.$gutterLineHighlight=s.createElement("div"),this.$gutterLineHighlight.className="ace_gutter-active-line",void this.$gutter.appendChild(this.$gutterLineHighlight);this.$gutterLineHighlight.style.display=e?"":"none",this.$cursorLayer.$pixelPos&&this.$updateGutterLineHighlight()},initialValue:!1,value:!0},hScrollBarAlwaysVisible:{set:function(e){this.$hScrollBarAlwaysVisible&&this.$horizScroll||this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},vScrollBarAlwaysVisible:{set:function(e){this.$vScrollBarAlwaysVisible&&this.$vScroll||this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},fontSize:{set:function(e){"number"==typeof e&&(e+="px"),this.container.style.fontSize=e,this.updateFontSize()},initialValue:12},fontFamily:{set:function(e){this.container.style.fontFamily=e,this.updateFontSize()}},maxLines:{set:function(e){this.updateFull()}},minLines:{set:function(e){this.updateFull()}},maxPixelHeight:{set:function(e){this.updateFull()},initialValue:0},scrollPastEnd:{set:function(e){e=+e||0,this.$scrollPastEnd!=e&&(this.$scrollPastEnd=e,this.$loop.schedule(this.CHANGE_SCROLL))},initialValue:0,handlesSet:!0},fixedWidthGutter:{set:function(e){this.$gutterLayer.$fixedWidth=!!e,this.$loop.schedule(this.CHANGE_GUTTER)}},theme:{set:function(e){this.setTheme(e)},get:function(){return this.$themeId||this.theme},initialValue:"./theme/textmate",handlesSet:!0}}),t.VirtualRenderer=p})),ace.define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/net","ace/lib/event_emitter","ace/config"],(function(e,t,i){"use strict";var n=e("../lib/oop"),s=e("../lib/net"),o=e("../lib/event_emitter").EventEmitter,r=e("../config");function a(e,t){var i=function(e,t){var i=t.src;s.qualifyURL(e);try{return new Blob([i],{type:"application/javascript"})}catch(e){var n=new(window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder);return n.append(i),n.getBlob("application/javascript")}}(e,t),n=(window.URL||window.webkitURL).createObjectURL(i);return new Worker(n)}var l=function(t,i,n,s,o){if(this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.onMessage=this.onMessage.bind(this),e.nameToUrl&&!e.toUrl&&(e.toUrl=e.nameToUrl),r.get("packaged")||!e.toUrl)s=s||r.moduleUrl(i.id,"worker");else{var l=this.$normalizePath;s=s||l(e.toUrl("ace/worker/worker.js",null,"_"));var h={};t.forEach((function(t){h[t]=l(e.toUrl(t,null,"_").replace(/(\.js)?(\?.*)?$/,""))}))}this.$worker=a(s,i),o&&this.send("importScripts",o),this.$worker.postMessage({init:!0,tlns:h,module:i.id,classname:n}),this.callbackId=1,this.callbacks={},this.$worker.onmessage=this.onMessage};(function(){n.implement(this,o),this.onMessage=function(e){var t=e.data;switch(t.type){case"event":this._signal(t.name,{data:t.data});break;case"call":var i=this.callbacks[t.id];i&&(i(t.data),delete this.callbacks[t.id]);break;case"error":this.reportError(t.data);break;case"log":window.console&&console.log&&console.log.apply(console,t.data)}},this.reportError=function(e){window.console&&console.error&&console.error(e)},this.$normalizePath=function(e){return s.qualifyURL(e)},this.terminate=function(){this._signal("terminate",{}),this.deltaQueue=null,this.$worker.terminate(),this.$worker=null,this.$doc&&this.$doc.off("change",this.changeListener),this.$doc=null},this.send=function(e,t){this.$worker.postMessage({command:e,args:t})},this.call=function(e,t,i){if(i){var n=this.callbackId++;this.callbacks[n]=i,t.push(n)}this.send(e,t)},this.emit=function(e,t){try{this.$worker.postMessage({event:e,data:{data:t.data}})}catch(e){console.error(e.stack)}},this.attachToDocument=function(e){this.$doc&&this.terminate(),this.$doc=e,this.call("setValue",[e.getValue()]),e.on("change",this.changeListener)},this.changeListener=function(e){this.deltaQueue||(this.deltaQueue=[],setTimeout(this.$sendDeltaQueue,0)),"insert"==e.action?this.deltaQueue.push(e.start,e.lines):this.deltaQueue.push(e.start,e.end)},this.$sendDeltaQueue=function(){var e=this.deltaQueue;e&&(this.deltaQueue=null,e.length>50&&e.length>this.$doc.getLength()>>1?this.call("setValue",[this.$doc.getValue()]):this.emit("change",{data:e}))}}).call(l.prototype);var h=function(e,t,i){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.callbackId=1,this.callbacks={},this.messageBuffer=[];var n=null,s=!1,a=Object.create(o),l=this;this.$worker={},this.$worker.terminate=function(){},this.$worker.postMessage=function(e){l.messageBuffer.push(e),n&&(s?setTimeout(h):h())},this.setEmitSync=function(e){s=e};var h=function(){var e=l.messageBuffer.shift();e.command?n[e.command].apply(n,e.args):e.event&&a._signal(e.event,e.data)};a.postMessage=function(e){l.onMessage({data:e})},a.callback=function(e,t){this.postMessage({type:"call",id:t,data:e})},a.emit=function(e,t){this.postMessage({type:"event",name:e,data:t})},r.loadModule(["worker",t],(function(e){for(n=new e[i](a);l.messageBuffer.length;)h()}))};h.prototype=l.prototype,t.UIWorkerClient=h,t.WorkerClient=l,t.createWorker=a})),ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"],(function(e,t,i){"use strict";var n=e("./range").Range,s=e("./lib/event_emitter").EventEmitter,o=e("./lib/oop"),r=function(e,t,i,n,s,o){var r=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=s,this.othersClass=o,this.$onUpdate=this.onUpdate.bind(this),this.doc.on("change",this.$onUpdate),this.$others=n,this.$onCursorChange=function(){setTimeout((function(){r.onCursorChange()}))},this.$pos=i;var a=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=a.length,this.setup(),e.selection.on("changeCursor",this.$onCursorChange)};(function(){o.implement(this,s),this.setup=function(){var e=this,t=this.doc,i=this.session;this.selectionBefore=i.selection.toJSON(),i.selection.inMultiSelectMode&&i.selection.toSingleRange(),this.pos=t.createAnchor(this.$pos.row,this.$pos.column);var s=this.pos;s.$insertRight=!0,s.detach(),s.markerId=i.addMarker(new n(s.row,s.column,s.row,s.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach((function(i){var n=t.createAnchor(i.row,i.column);n.$insertRight=!0,n.detach(),e.others.push(n)})),i.setUndoSelect(!1)},this.showOtherMarkers=function(){if(!this.othersActive){var e=this.session,t=this;this.othersActive=!0,this.others.forEach((function(i){i.markerId=e.addMarker(new n(i.row,i.column,i.row,i.column+t.length),t.othersClass,null,!1)}))}},this.hideOtherMarkers=function(){if(this.othersActive){this.othersActive=!1;for(var e=0;e=this.pos.column&&t.start.column<=this.pos.column+this.length+1,o=t.start.column-this.pos.column;if(this.updateAnchors(e),s&&(this.length+=i),s&&!this.session.$fromUndo)if("insert"===e.action)for(var r=this.others.length-1;r>=0;r--){var a={row:(l=this.others[r]).row,column:l.column+o};this.doc.insertMergedLines(a,e.lines)}else if("remove"===e.action)for(r=this.others.length-1;r>=0;r--){var l;a={row:(l=this.others[r]).row,column:l.column+o},this.doc.remove(new n(a.row,a.column,a.row,a.column-i))}this.$updating=!1,this.updateMarkers()}},this.updateAnchors=function(e){this.pos.onChange(e);for(var t=this.others.length;t--;)this.others[t].onChange(e);this.updateMarkers()},this.updateMarkers=function(){if(!this.$updating){var e=this,t=this.session,i=function(i,s){t.removeMarker(i.markerId),i.markerId=t.addMarker(new n(i.row,i.column,i.row,i.column+e.length),s,null,!1)};i(this.pos,this.mainClass);for(var s=this.others.length;s--;)i(this.others[s],this.othersClass)}},this.onCursorChange=function(e){if(!this.$updating&&this.session){var t=this.session.selection.getCursor();t.row===this.pos.row&&t.column>=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",e)):(this.hideOtherMarkers(),this._emit("cursorLeave",e))}},this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.removeEventListener("change",this.$onUpdate),this.session.selection.removeEventListener("changeCursor",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(-1!==this.$undoStackDepth){for(var e=this.session.getUndoManager(),t=(e.$undoStack||e.$undostack).length-this.$undoStackDepth,i=0;i1&&!this.inMultiSelectMode&&(this._signal("multiSelect"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)}},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){var t=this.rangeList.substractPoint(e);if(t)return this.$onRemoveRange(t),t[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length?this.$onRemoveRange(e):this.ranges[0]&&this.fromOrientedRange(this.ranges[0])},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._signal("addRange",{range:e})},this.$onRemoveRange=function(e){if(this.rangeCount=this.rangeList.ranges.length,1==this.rangeCount&&this.inMultiSelectMode){var t=this.rangeList.ranges.pop();e.push(t),this.rangeCount=0}for(var i=e.length;i--;){var n=this.ranges.indexOf(e[i]);this.ranges.splice(n,1)}this._signal("removeRange",{ranges:e}),0===this.rangeCount&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal("singleSelect"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),(t=t||this.ranges[0])&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){this.rangeList||(this.rangeList=new n,this.ranges=[],this.rangeCount=0)},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],i=s.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(i,t.cursor==t.start)}else{i=this.getRange();var n=this.isBackwards(),o=i.start.row,r=i.end.row;if(o==r){if(n)var a=i.end,l=i.start;else a=i.start,l=i.end;return this.addRange(s.fromPoints(l,l)),void this.addRange(s.fromPoints(a,a))}var h=[],c=this.getLineRange(o,!0);c.start.column=i.start.column,h.push(c);for(var u=o+1;u1){var e=this.rangeList.ranges,t=e[e.length-1],i=s.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(i,t.cursor==t.start)}else{var n=this.session.documentToScreenPosition(this.selectionLead),o=this.session.documentToScreenPosition(this.selectionAnchor);this.rectangularRangeBlock(n,o).forEach(this.addRange,this)}},this.rectangularRangeBlock=function(e,t,i){var n=[],o=e.column0;)C--;if(C>0)for(var F=0;n[F].isEmpty();)F++;for(var w=C;w>=F;w--)n[w].isEmpty()&&n.splice(w,1)}return n}}.call(o.prototype);var d=e("./editor").Editor;function g(e){e.$multiselectOnSessionChange||(e.$onAddRange=e.$onAddRange.bind(e),e.$onRemoveRange=e.$onRemoveRange.bind(e),e.$onMultiSelect=e.$onMultiSelect.bind(e),e.$onSingleSelect=e.$onSingleSelect.bind(e),e.$multiselectOnSessionChange=t.onSessionChange.bind(e),e.$checkMultiselectChange=e.$checkMultiselectChange.bind(e),e.$multiselectOnSessionChange(e),e.on("changeSession",e.$multiselectOnSessionChange),e.on("mousedown",r),e.commands.addCommands(h.defaultCommands),function(e){var t=e.textInput.getElement(),i=!1;function n(t){i&&(e.renderer.setMouseCursor(""),i=!1)}a.addListener(t,"keydown",(function(t){var s=18==t.keyCode&&!(t.ctrlKey||t.shiftKey||t.metaKey);e.$blockSelectEnabled&&s?i||(e.renderer.setMouseCursor("crosshair"),i=!0):i&&n()})),a.addListener(t,"keyup",n),a.addListener(t,"blur",n)}(e))}(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,"ace_selection",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){if(e.marker){this.session.removeMarker(e.marker);var t=this.session.$selectionMarkers.indexOf(e);-1!=t&&this.session.$selectionMarkers.splice(t,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length}},this.removeSelectionMarkers=function(e){for(var t=this.session.$selectionMarkers,i=e.length;i--;){var n=e[i];if(n.marker){this.session.removeMarker(n.marker);var s=t.indexOf(n);-1!=s&&t.splice(s,1)}}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){this.inMultiSelectMode||(this.inMultiSelectMode=!0,this.setStyle("ace_multiselect"),this.keyBinding.addKeyboardHandler(h.keyboardHandler),this.commands.setDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers())},this.$onSingleSelect=function(e){this.session.multiSelect.inVirtualMode||(this.inMultiSelectMode=!1,this.unsetStyle("ace_multiselect"),this.keyBinding.removeKeyboardHandler(h.keyboardHandler),this.commands.removeDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit("changeSelection"))},this.$onMultiSelectExec=function(e){var t=e.command,i=e.editor;if(i.multiSelect){if(t.multiSelectAction)"forEach"==t.multiSelectAction?n=i.forEachSelection(t,e.args):"forEachLine"==t.multiSelectAction?n=i.forEachSelection(t,e.args,!0):"single"==t.multiSelectAction?(i.exitMultiSelectMode(),n=t.exec(i,e.args||{})):n=t.multiSelectAction(i,e.args||{});else{var n=t.exec(i,e.args||{});i.multiSelect.addRange(i.multiSelect.toOrientedRange()),i.multiSelect.mergeOverlappingRanges()}return n}},this.forEachSelection=function(e,t,i){if(!this.inVirtualSelectionMode){var n,s=i&&i.keepOrder,r=1==i||i&&i.$byLines,a=this.session,l=this.selection,h=l.rangeList,c=(s?l:h).ranges;if(!c.length)return e.exec?e.exec(this,t||{}):e(this,t||{});var u=l._eventRegistry;l._eventRegistry={};var d=new o(a);this.inVirtualSelectionMode=!0;for(var g=c.length;g--;){if(r)for(;g>0&&c[g].start.row==c[g-1].end.row;)g--;d.fromOrientedRange(c[g]),d.index=g,this.selection=a.selection=d;var f=e.exec?e.exec(this,t||{}):e(this,t||{});n||void 0===f||(n=f),d.toOrientedRange(c[g])}d.detach(),this.selection=a.selection=l,this.inVirtualSelectionMode=!1,l._eventRegistry=u,l.mergeOverlappingRanges();var m=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),m&&m.from==m.to&&this.renderer.animateScrolling(m.from),n}},this.exitMultiSelectMode=function(){this.inMultiSelectMode&&!this.inVirtualSelectionMode&&this.multiSelect.toSingleRange()},this.getSelectedText=function(){var e="";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){for(var t=this.multiSelect.rangeList.ranges,i=[],n=0;nr&&(r=i.column),nc?e.insert(n,l.stringRepeat(" ",o-c)):e.remove(new s(n.row,n.column,n.row,n.column-o+c)),t.start.column=t.end.column=r,t.start.row=t.end.row=n.row,t.cursor=t.end})),t.fromOrientedRange(i[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}else{var c=this.selection.getRange(),u=c.start.row,d=c.end.row,g=u==d;if(g){var f,m=this.session.getLength();do{f=this.session.getLine(d)}while(/[=:]/.test(f)&&++d0);u<0&&(u=0),d>=m&&(d=m-1)}var p=this.session.removeFullLines(u,d);p=this.$reAlignText(p,g),this.session.insert({row:u,column:0},p.join("\n")+"\n"),g||(c.start.column=0,c.end.column=p[p.length-1].length),this.selection.setRange(c)}},this.$reAlignText=function(e,t){var i,n,s,o=!0,r=!0;return e.map((function(e){var t=e.match(/(\s*)(.*?)(\s*)([=:].*)/);return t?null==i?(i=t[1].length,n=t[2].length,s=t[3].length,t):(i+n+s!=t[1].length+t[2].length+t[3].length&&(r=!1),i!=t[1].length&&(o=!1),i>t[1].length&&(i=t[1].length),nt[3].length&&(s=t[3].length),t):[e]})).map(t?h:o?r?function(e){return e[2]?a(i+n-e[2].length)+e[2]+a(s)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}:h:function(e){return e[2]?a(i)+e[2]+a(s)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]});function a(e){return l.stringRepeat(" ",e)}function h(e){return e[2]?a(i)+e[2]+a(n-e[2].length+s)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}}}).call(d.prototype),t.onSessionChange=function(e){var t=e.session;t&&!t.multiSelect&&(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t&&t.multiSelect;var i=e.oldSession;i&&(i.multiSelect.off("addRange",this.$onAddRange),i.multiSelect.off("removeRange",this.$onRemoveRange),i.multiSelect.off("multiSelect",this.$onMultiSelect),i.multiSelect.off("singleSelect",this.$onSingleSelect),i.multiSelect.lead.off("change",this.$checkMultiselectChange),i.multiSelect.anchor.off("change",this.$checkMultiselectChange)),t&&(t.multiSelect.on("addRange",this.$onAddRange),t.multiSelect.on("removeRange",this.$onRemoveRange),t.multiSelect.on("multiSelect",this.$onMultiSelect),t.multiSelect.on("singleSelect",this.$onSingleSelect),t.multiSelect.lead.on("change",this.$checkMultiselectChange),t.multiSelect.anchor.on("change",this.$checkMultiselectChange)),t&&this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=g,e("./config").defineOptions(d.prototype,"editor",{enableMultiselect:{set:function(e){g(this),e?(this.on("changeSession",this.$multiselectOnSessionChange),this.on("mousedown",r)):(this.off("changeSession",this.$multiselectOnSessionChange),this.off("mousedown",r))},value:!0},enableBlockSelect:{set:function(e){this.$blockSelectEnabled=e},value:!0}})})),ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],(function(e,t,i){"use strict";var n=e("../../range").Range,s=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,i){var n=e.getLine(i);return this.foldingStartMarker.test(n)?"start":"markbeginend"==t&&this.foldingStopMarker&&this.foldingStopMarker.test(n)?"end":""},this.getFoldWidgetRange=function(e,t,i){return null},this.indentationBlock=function(e,t,i){var s=/\S/,o=e.getLine(t),r=o.search(s);if(-1!=r){for(var a=i||o.length,l=e.getLength(),h=t,c=t;++th){var d=e.getLine(c).length;return new n(h,a,c,d)}}},this.openingBracketBlock=function(e,t,i,s,o){var r={row:i,column:s+1},a=e.$findClosingBracket(t,r,o);if(a){var l=e.foldWidgets[a.row];return null==l&&(l=e.getFoldWidget(a.row)),"start"==l&&a.row>r.row&&(a.row--,a.column=e.getLine(a.row).length),n.fromPoints(r,a)}},this.closingBracketBlock=function(e,t,i,s,o){var r={row:i,column:s},a=e.$findOpeningBracket(t,r);if(a)return a.column++,r.column--,n.fromPoints(a,r)}}).call(s.prototype)})),ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],(function(e,t,i){"use strict";t.isDark=!1,t.cssClass="ace-tm",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}',e("../lib/dom").importCssString(t.cssText,t.cssClass)})),ace.define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"],(function(e,t,i){"use strict";e("./lib/oop");var n=e("./lib/dom");function s(e){this.session=e,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on("change",this.updateOnChange),this.session.on("changeFold",this.updateOnFold),this.session.on("changeEditor",this.$onChangeEditor)}e("./range").Range,function(){this.getRowLength=function(e){var t;return t=this.lineWidgets&&this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0,this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.$getWidgetScreenLength=function(){var e=0;return this.lineWidgets.forEach((function(t){t&&t.rowCount&&!t.hidden&&(e+=t.rowCount)})),e},this.$onChangeEditor=function(e){this.attach(e.editor)},this.attach=function(e){e&&e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach(),this.editor!=e&&(this.detach(),this.editor=e,e&&(e.widgetManager=this,e.renderer.on("beforeRender",this.measureWidgets),e.renderer.on("afterRender",this.renderWidgets)))},this.detach=function(e){var t=this.editor;if(t){this.editor=null,t.widgetManager=null,t.renderer.off("beforeRender",this.measureWidgets),t.renderer.off("afterRender",this.renderWidgets);var i=this.session.lineWidgets;i&&i.forEach((function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))}))}},this.updateOnFold=function(e,t){var i=t.lineWidgets;if(i&&e.action){for(var n=e.data,s=n.start.row,o=n.end.row,r="add"==e.action,a=s+1;a0&&!n[s];)s--;this.firstRow=i.firstRow,this.lastRow=i.lastRow,t.$cursorLayer.config=i;for(var r=s;r<=o;r++){var a=n[r];if(a&&a.el)if(a.hidden)a.el.style.top=-100-(a.pixelHeight||0)+"px";else{a._inDocument||(a._inDocument=!0,t.container.appendChild(a.el));var l=t.$cursorLayer.getPixelPosition({row:r,column:0},!0).top;a.coverLine||(l+=i.lineHeight*this.session.getRowLineCount(a.row)),a.el.style.top=l-i.offset+"px";var h=a.coverGutter?0:t.gutterWidth;a.fixedWidth||(h-=t.scrollLeft),a.el.style.left=h+"px",a.fullWidth&&a.screenWidth&&(a.el.style.minWidth=i.width+2*i.padding+"px"),a.fixedWidth?a.el.style.right=t.scrollBar.getWidth()+"px":a.el.style.right=""}}}}}.call(s.prototype),t.LineWidgets=s})),ace.define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"],(function(e,t,i){"use strict";var n=e("../line_widgets").LineWidgets,s=e("../lib/dom"),o=e("../range").Range;t.showErrorMarker=function(e,t){var i=e.session;i.widgetManager||(i.widgetManager=new n(i),i.widgetManager.attach(e));var r=e.getCursorPosition(),a=r.row,l=i.widgetManager.getWidgetsAtRow(a).filter((function(e){return"errorMarker"==e.type}))[0];l?l.destroy():a-=t;var h,c=function(e,t,i){var n=e.getAnnotations().sort(o.comparePoints);if(n.length){var s=function(e,t,i){for(var n=0,s=e.length-1;n<=s;){var o=n+s>>1,r=i(t,e[o]);if(r>0)n=o+1;else{if(!(r<0))return o;s=o-1}}return-(n+1)}(n,{row:t,column:-1},o.comparePoints);s<0&&(s=-s-1),s>=n.length?s=i>0?0:n.length-1:0===s&&i<0&&(s=n.length-1);var r=n[s];if(r&&i){if(r.row===t){do{r=n[s+=i]}while(r&&r.row===t);if(!r)return n.slice()}var a=[];t=r.row;do{a[i<0?"unshift":"push"](r),r=n[s+=i]}while(r&&r.row==t);return a.length&&a}}}(i,a,t);if(c){var u=c[0];r.column=(u.pos&&"number"!=typeof u.column?u.pos.sc:u.column)||0,r.row=u.row,h=e.renderer.$gutterLayer.$annotations[r.row]}else{if(l)return;h={text:["Looks good!"],className:"ace_ok"}}e.session.unfold(r.row),e.selection.moveToPosition(r);var d={row:r.row,fixedWidth:!0,coverGutter:!0,el:s.createElement("div"),type:"errorMarker"},g=d.el.appendChild(s.createElement("div")),f=d.el.appendChild(s.createElement("div"));f.className="error_widget_arrow "+h.className;var m=e.renderer.$cursorLayer.getPixelPosition(r).left;f.style.left=m+e.renderer.gutterWidth-5+"px",d.el.className="error_widget_wrapper",g.className="error_widget "+h.className,g.innerHTML=h.text.join("
"),g.appendChild(s.createElement("div"));var p=function(e,t,i){if(0===t&&("esc"===i||"return"===i))return d.destroy(),{command:"null"}};d.destroy=function(){e.$mouseHandler.isMousePressed||(e.keyBinding.removeKeyboardHandler(p),i.widgetManager.removeLineWidget(d),e.off("changeSelection",d.destroy),e.off("changeSession",d.destroy),e.off("mouseup",d.destroy),e.off("change",d.destroy))},e.keyBinding.addKeyboardHandler(p),e.on("changeSelection",d.destroy),e.on("changeSession",d.destroy),e.on("mouseup",d.destroy),e.on("change",d.destroy),e.session.widgetManager.addLineWidget(d),d.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:d.el.offsetHeight})},s.importCssString(" .error_widget_wrapper { background: inherit; color: inherit; border:none } .error_widget { border-top: solid 2px; border-bottom: solid 2px; margin: 5px 0; padding: 10px 40px; white-space: pre-wrap; } .error_widget.ace_error, .error_widget_arrow.ace_error{ border-color: #ff5a5a } .error_widget.ace_warning, .error_widget_arrow.ace_warning{ border-color: #F1D817 } .error_widget.ace_info, .error_widget_arrow.ace_info{ border-color: #5a5a5a } .error_widget.ace_ok, .error_widget_arrow.ace_ok{ border-color: #5aaa5a } .error_widget_arrow { position: absolute; border: solid 5px; border-top-color: transparent!important; border-right-color: transparent!important; border-left-color: transparent!important; top: -5px; }","")})),ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"],(function(e,t,n){"use strict";e("./lib/fixoldbrowsers");var s=e("./lib/dom"),o=e("./lib/event"),r=e("./editor").Editor,a=e("./edit_session").EditSession,l=e("./undomanager").UndoManager,h=e("./virtual_renderer").VirtualRenderer;e("./worker/worker_client"),e("./keyboard/hash_handler"),e("./placeholder"),e("./multi_select"),e("./mode/folding/fold_mode"),e("./theme/textmate"),e("./ext/error_marker"),t.config=e("./config"),t.acequire=e,t.define=i.amdD,t.edit=function(e){if("string"==typeof e){var i=e;if(!(e=document.getElementById(i)))throw new Error("ace.edit can't find div #"+i)}if(e&&e.env&&e.env.editor instanceof r)return e.env.editor;var n="";if(e&&/input|textarea/i.test(e.tagName)){var a=e;n=a.value,e=s.createElement("pre"),a.parentNode.replaceChild(e,a)}else e&&(n=s.getInnerText(e),e.innerHTML="");var l=t.createEditSession(n),c=new r(new h(e));c.setSession(l);var u={document:l,editor:c,onResize:c.resize.bind(c,null)};return a&&(u.textarea=a),o.addListener(window,"resize",u.onResize),c.on("destroy",(function(){o.removeListener(window,"resize",u.onResize),u.editor.container.env=null})),c.container.env=c.env=u,c},t.createEditSession=function(e,t){var i=new a(e,t);return i.setUndoManager(new l),i},t.EditSession=a,t.UndoManager=l,t.version="1.2.9"})),ace.acequire(["ace/ace"],(function(e){for(var t in e&&(e.config.init(!0),e.define=ace.define),window.ace||(window.ace=e),e)e.hasOwnProperty(t)&&(window.ace[t]=e[t])})),e.exports=window.ace.acequire("ace/ace")}}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFNBQVMsQ0FBQyxZQUFZLFNBQVN1RSxHQU8vQixJQUFLLElBQUlrRixLQU5MbEYsSUFDQUEsRUFBRXF3QixPQUFPOUIsTUFBSyxHQUNkdnVCLEVBQUVuRyxPQUFTOEMsSUFBSTlDLFFBRWRELE9BQU8rQyxNQUNSL0MsT0FBTytDLElBQU1xRCxHQUNEQSxFQUFPQSxFQUFFUCxlQUFleUYsS0FDcEN0TCxPQUFPK0MsSUFBSXVJLEdBQU9sRixFQUFFa0YsR0FDNUIsSUFHaEJwTCxFQUFPd0MsUUFBVTFDLE9BQU8rQyxJQUFJbEIsU0FBUyxVIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9icmFjZS9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqXG4gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2U6XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEwLCBBamF4Lm9yZyBCLlYuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFqYXgub3JnIEIuVi4gbm9yIHRoZVxuICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHNcbiAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFKQVguT1JHIEIuVi4gQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKlxuICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi9cblxuLyoqXG4gKiBEZWZpbmUgYSBtb2R1bGUgYWxvbmcgd2l0aCBhIHBheWxvYWRcbiAqIEBwYXJhbSBtb2R1bGUgYSBuYW1lIGZvciB0aGUgcGF5bG9hZFxuICogQHBhcmFtIHBheWxvYWQgYSBmdW5jdGlvbiB0byBjYWxsIHdpdGggKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHBhcmFtc1xuICovXG5cbihmdW5jdGlvbigpIHtcblxudmFyIEFDRV9OQU1FU1BBQ0UgPSBcImFjZVwiO1xuXG52YXIgZ2xvYmFsID0gKGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSkoKTtcbmlmICghZ2xvYmFsICYmIHR5cGVvZiB3aW5kb3cgIT0gXCJ1bmRlZmluZWRcIikgZ2xvYmFsID0gd2luZG93OyAvLyBzdHJpY3QgbW9kZVxuXG5cbmlmICghQUNFX05BTUVTUEFDRSAmJiB0eXBlb2YgYWNlcXVpcmVqcyAhPT0gXCJ1bmRlZmluZWRcIilcbiAgICByZXR1cm47XG5cblxudmFyIGRlZmluZSA9IGZ1bmN0aW9uKG1vZHVsZSwgZGVwcywgcGF5bG9hZCkge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmIChkZWZpbmUub3JpZ2luYWwpXG4gICAgICAgICAgICBkZWZpbmUub3JpZ2luYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiZHJvcHBpbmcgbW9kdWxlIGJlY2F1c2UgZGVmaW5lIHdhc25cXCd0IGEgc3RyaW5nLlwiKTtcbiAgICAgICAgICAgIGNvbnNvbGUudHJhY2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDIpXG4gICAgICAgIHBheWxvYWQgPSBkZXBzO1xuICAgIGlmICghZGVmaW5lLm1vZHVsZXNbbW9kdWxlXSkge1xuICAgICAgICBkZWZpbmUucGF5bG9hZHNbbW9kdWxlXSA9IHBheWxvYWQ7XG4gICAgICAgIGRlZmluZS5tb2R1bGVzW21vZHVsZV0gPSBudWxsO1xuICAgIH1cbn07XG5cbmRlZmluZS5tb2R1bGVzID0ge307XG5kZWZpbmUucGF5bG9hZHMgPSB7fTtcblxuLyoqXG4gKiBHZXQgYXQgZnVuY3Rpb25hbGl0eSBkZWZpbmUoKWVkIHVzaW5nIHRoZSBmdW5jdGlvbiBhYm92ZVxuICovXG52YXIgX2FjZXF1aXJlID0gZnVuY3Rpb24ocGFyZW50SWQsIG1vZHVsZSwgY2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB2YXIgcGF5bG9hZCA9IGxvb2t1cChwYXJlbnRJZCwgbW9kdWxlKTtcbiAgICAgICAgaWYgKHBheWxvYWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtb2R1bGUpID09PSBcIltvYmplY3QgQXJyYXldXCIpIHtcbiAgICAgICAgdmFyIHBhcmFtcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG1vZHVsZS5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIHZhciBkZXAgPSBsb29rdXAocGFyZW50SWQsIG1vZHVsZVtpXSk7XG4gICAgICAgICAgICBpZiAoZGVwID09IHVuZGVmaW5lZCAmJiBhY2VxdWlyZS5vcmlnaW5hbClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBwYXJhbXMucHVzaChkZXApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWxsYmFjayAmJiBjYWxsYmFjay5hcHBseShudWxsLCBwYXJhbXMpIHx8IHRydWU7XG4gICAgfVxufTtcblxudmFyIGFjZXF1aXJlID0gZnVuY3Rpb24obW9kdWxlLCBjYWxsYmFjaykge1xuICAgIHZhciBwYWNrYWdlZE1vZHVsZSA9IF9hY2VxdWlyZShcIlwiLCBtb2R1bGUsIGNhbGxiYWNrKTtcbiAgICBpZiAocGFja2FnZWRNb2R1bGUgPT0gdW5kZWZpbmVkICYmIGFjZXF1aXJlLm9yaWdpbmFsKVxuICAgICAgICByZXR1cm4gYWNlcXVpcmUub3JpZ2luYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gcGFja2FnZWRNb2R1bGU7XG59O1xuXG52YXIgbm9ybWFsaXplTW9kdWxlID0gZnVuY3Rpb24ocGFyZW50SWQsIG1vZHVsZU5hbWUpIHtcbiAgICAvLyBub3JtYWxpemUgcGx1Z2luIGFjZXF1aXJlc1xuICAgIGlmIChtb2R1bGVOYW1lLmluZGV4T2YoXCIhXCIpICE9PSAtMSkge1xuICAgICAgICB2YXIgY2h1bmtzID0gbW9kdWxlTmFtZS5zcGxpdChcIiFcIik7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVNb2R1bGUocGFyZW50SWQsIGNodW5rc1swXSkgKyBcIiFcIiArIG5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgY2h1bmtzWzFdKTtcbiAgICB9XG4gICAgLy8gbm9ybWFsaXplIHJlbGF0aXZlIGFjZXF1aXJlc1xuICAgIGlmIChtb2R1bGVOYW1lLmNoYXJBdCgwKSA9PSBcIi5cIikge1xuICAgICAgICB2YXIgYmFzZSA9IHBhcmVudElkLnNwbGl0KFwiL1wiKS5zbGljZSgwLCAtMSkuam9pbihcIi9cIik7XG4gICAgICAgIG1vZHVsZU5hbWUgPSBiYXNlICsgXCIvXCIgKyBtb2R1bGVOYW1lO1xuXG4gICAgICAgIHdoaWxlKG1vZHVsZU5hbWUuaW5kZXhPZihcIi5cIikgIT09IC0xICYmIHByZXZpb3VzICE9IG1vZHVsZU5hbWUpIHtcbiAgICAgICAgICAgIHZhciBwcmV2aW91cyA9IG1vZHVsZU5hbWU7XG4gICAgICAgICAgICBtb2R1bGVOYW1lID0gbW9kdWxlTmFtZS5yZXBsYWNlKC9cXC9cXC5cXC8vLCBcIi9cIikucmVwbGFjZSgvW15cXC9dK1xcL1xcLlxcLlxcLy8sIFwiXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtb2R1bGVOYW1lO1xufTtcblxuLyoqXG4gKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBsb29rdXAgbW9kdWxlTmFtZXMgYW5kIHJlc29sdmUgdGhlbSBieSBjYWxsaW5nIHRoZVxuICogZGVmaW5pdGlvbiBmdW5jdGlvbiBpZiBuZWVkZWQuXG4gKi9cbnZhciBsb29rdXAgPSBmdW5jdGlvbihwYXJlbnRJZCwgbW9kdWxlTmFtZSkge1xuICAgIG1vZHVsZU5hbWUgPSBub3JtYWxpemVNb2R1bGUocGFyZW50SWQsIG1vZHVsZU5hbWUpO1xuXG4gICAgdmFyIG1vZHVsZSA9IGRlZmluZS5tb2R1bGVzW21vZHVsZU5hbWVdO1xuICAgIGlmICghbW9kdWxlKSB7XG4gICAgICAgIG1vZHVsZSA9IGRlZmluZS5wYXlsb2Fkc1ttb2R1bGVOYW1lXTtcbiAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBleHBvcnRzID0ge307XG4gICAgICAgICAgICB2YXIgbW9kID0ge1xuICAgICAgICAgICAgICAgIGlkOiBtb2R1bGVOYW1lLFxuICAgICAgICAgICAgICAgIHVyaTogJycsXG4gICAgICAgICAgICAgICAgZXhwb3J0czogZXhwb3J0cyxcbiAgICAgICAgICAgICAgICBwYWNrYWdlZDogdHJ1ZVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdmFyIHJlcSA9IGZ1bmN0aW9uKG1vZHVsZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2FjZXF1aXJlKG1vZHVsZU5hbWUsIG1vZHVsZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdmFyIHJldHVyblZhbHVlID0gbW9kdWxlKHJlcSwgZXhwb3J0cywgbW9kKTtcbiAgICAgICAgICAgIGV4cG9ydHMgPSByZXR1cm5WYWx1ZSB8fCBtb2QuZXhwb3J0cztcbiAgICAgICAgICAgIGRlZmluZS5tb2R1bGVzW21vZHVsZU5hbWVdID0gZXhwb3J0cztcbiAgICAgICAgICAgIGRlbGV0ZSBkZWZpbmUucGF5bG9hZHNbbW9kdWxlTmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgbW9kdWxlID0gZGVmaW5lLm1vZHVsZXNbbW9kdWxlTmFtZV0gPSBleHBvcnRzIHx8IG1vZHVsZTtcbiAgICB9XG4gICAgcmV0dXJuIG1vZHVsZTtcbn07XG5cbmZ1bmN0aW9uIGV4cG9ydEFjZShucykge1xuICAgIHZhciByb290ID0gZ2xvYmFsO1xuICAgIGlmIChucykge1xuICAgICAgICBpZiAoIWdsb2JhbFtuc10pXG4gICAgICAgICAgICBnbG9iYWxbbnNdID0ge307XG4gICAgICAgIHJvb3QgPSBnbG9iYWxbbnNdO1xuICAgIH1cblxuICAgIGlmICghcm9vdC5kZWZpbmUgfHwgIXJvb3QuZGVmaW5lLnBhY2thZ2VkKSB7XG4gICAgICAgIGRlZmluZS5vcmlnaW5hbCA9IHJvb3QuZGVmaW5lO1xuICAgICAgICByb290LmRlZmluZSA9IGRlZmluZTtcbiAgICAgICAgcm9vdC5kZWZpbmUucGFja2FnZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghcm9vdC5hY2VxdWlyZSB8fCAhcm9vdC5hY2VxdWlyZS5wYWNrYWdlZCkge1xuICAgICAgICBhY2VxdWlyZS5vcmlnaW5hbCA9IHJvb3QuYWNlcXVpcmU7XG4gICAgICAgIHJvb3QuYWNlcXVpcmUgPSBhY2VxdWlyZTtcbiAgICAgICAgcm9vdC5hY2VxdWlyZS5wYWNrYWdlZCA9IHRydWU7XG4gICAgfVxufVxuXG5leHBvcnRBY2UoQUNFX05BTUVTUEFDRSk7XG5cbn0pKCk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvbGliL3JlZ2V4cFwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICB2YXIgcmVhbCA9IHtcbiAgICAgICAgICAgIGV4ZWM6IFJlZ0V4cC5wcm90b3R5cGUuZXhlYyxcbiAgICAgICAgICAgIHRlc3Q6IFJlZ0V4cC5wcm90b3R5cGUudGVzdCxcbiAgICAgICAgICAgIG1hdGNoOiBTdHJpbmcucHJvdG90eXBlLm1hdGNoLFxuICAgICAgICAgICAgcmVwbGFjZTogU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlLFxuICAgICAgICAgICAgc3BsaXQ6IFN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxpYW50RXhlY05wY2cgPSByZWFsLmV4ZWMuY2FsbCgvKCk/Py8sIFwiXCIpWzFdID09PSB1bmRlZmluZWQsIC8vIGNoZWNrIGBleGVjYCBoYW5kbGluZyBvZiBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cHNcbiAgICAgICAgY29tcGxpYW50TGFzdEluZGV4SW5jcmVtZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHggPSAvXi9nO1xuICAgICAgICAgICAgcmVhbC50ZXN0LmNhbGwoeCwgXCJcIik7XG4gICAgICAgICAgICByZXR1cm4gIXgubGFzdEluZGV4O1xuICAgICAgICB9KCk7XG5cbiAgICBpZiAoY29tcGxpYW50TGFzdEluZGV4SW5jcmVtZW50ICYmIGNvbXBsaWFudEV4ZWNOcGNnKVxuICAgICAgICByZXR1cm47XG4gICAgUmVnRXhwLnByb3RvdHlwZS5leGVjID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICB2YXIgbWF0Y2ggPSByZWFsLmV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgICAgIG5hbWUsIHIyO1xuICAgICAgICBpZiAoIHR5cGVvZihzdHIpID09ICdzdHJpbmcnICYmIG1hdGNoKSB7XG4gICAgICAgICAgICBpZiAoIWNvbXBsaWFudEV4ZWNOcGNnICYmIG1hdGNoLmxlbmd0aCA+IDEgJiYgaW5kZXhPZihtYXRjaCwgXCJcIikgPiAtMSkge1xuICAgICAgICAgICAgICAgIHIyID0gUmVnRXhwKHRoaXMuc291cmNlLCByZWFsLnJlcGxhY2UuY2FsbChnZXROYXRpdmVGbGFncyh0aGlzKSwgXCJnXCIsIFwiXCIpKTtcbiAgICAgICAgICAgICAgICByZWFsLnJlcGxhY2UuY2FsbChzdHIuc2xpY2UobWF0Y2guaW5kZXgpLCByMiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3hyZWdleHAgJiYgdGhpcy5feHJlZ2V4cC5jYXB0dXJlTmFtZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IG1hdGNoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSB0aGlzLl94cmVnZXhwLmNhcHR1cmVOYW1lc1tpIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFtuYW1lXSA9IG1hdGNoW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY29tcGxpYW50TGFzdEluZGV4SW5jcmVtZW50ICYmIHRoaXMuZ2xvYmFsICYmICFtYXRjaFswXS5sZW5ndGggJiYgKHRoaXMubGFzdEluZGV4ID4gbWF0Y2guaW5kZXgpKVxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEluZGV4LS07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH07XG4gICAgaWYgKCFjb21wbGlhbnRMYXN0SW5kZXhJbmNyZW1lbnQpIHtcbiAgICAgICAgUmVnRXhwLnByb3RvdHlwZS50ZXN0ID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICAgICAgdmFyIG1hdGNoID0gcmVhbC5leGVjLmNhbGwodGhpcywgc3RyKTtcbiAgICAgICAgICAgIGlmIChtYXRjaCAmJiB0aGlzLmdsb2JhbCAmJiAhbWF0Y2hbMF0ubGVuZ3RoICYmICh0aGlzLmxhc3RJbmRleCA+IG1hdGNoLmluZGV4KSlcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RJbmRleC0tO1xuICAgICAgICAgICAgcmV0dXJuICEhbWF0Y2g7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0TmF0aXZlRmxhZ3MgKHJlZ2V4KSB7XG4gICAgICAgIHJldHVybiAocmVnZXguZ2xvYmFsICAgICA/IFwiZ1wiIDogXCJcIikgK1xuICAgICAgICAgICAgICAgKHJlZ2V4Lmlnbm9yZUNhc2UgPyBcImlcIiA6IFwiXCIpICtcbiAgICAgICAgICAgICAgIChyZWdleC5tdWx0aWxpbmUgID8gXCJtXCIgOiBcIlwiKSArXG4gICAgICAgICAgICAgICAocmVnZXguZXh0ZW5kZWQgICA/IFwieFwiIDogXCJcIikgKyAvLyBQcm9wb3NlZCBmb3IgRVM0OyBpbmNsdWRlZCBpbiBBUzNcbiAgICAgICAgICAgICAgIChyZWdleC5zdGlja3kgICAgID8gXCJ5XCIgOiBcIlwiKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbmRleE9mIChhcnJheSwgaXRlbSwgZnJvbSkge1xuICAgICAgICBpZiAoQXJyYXkucHJvdG90eXBlLmluZGV4T2YpIC8vIFVzZSB0aGUgbmF0aXZlIGFycmF5IG1ldGhvZCBpZiBhdmFpbGFibGVcbiAgICAgICAgICAgIHJldHVybiBhcnJheS5pbmRleE9mKGl0ZW0sIGZyb20pO1xuICAgICAgICBmb3IgKHZhciBpID0gZnJvbSB8fCAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJheVtpXSA9PT0gaXRlbSlcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9saWIvZXM1LXNoaW1cIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblxuZnVuY3Rpb24gRW1wdHkoKSB7fVxuXG5pZiAoIUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kKSB7XG4gICAgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHsgLy8gLmxlbmd0aCBpcyAxXG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzO1xuICAgICAgICBpZiAodHlwZW9mIHRhcmdldCAhPSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlIFwiICsgdGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsgLy8gZm9yIG5vcm1hbCBjYWxsXG4gICAgICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCkge1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5hcHBseShcbiAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseShcbiAgICAgICAgICAgICAgICAgICAgdGhhdCxcbiAgICAgICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9O1xuICAgICAgICBpZih0YXJnZXQucHJvdG90eXBlKSB7XG4gICAgICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuICAgICAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBib3VuZDtcbiAgICB9O1xufVxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcbnZhciBwcm90b3R5cGVPZkFycmF5ID0gQXJyYXkucHJvdG90eXBlO1xudmFyIHByb3RvdHlwZU9mT2JqZWN0ID0gT2JqZWN0LnByb3RvdHlwZTtcbnZhciBzbGljZSA9IHByb3RvdHlwZU9mQXJyYXkuc2xpY2U7XG52YXIgX3RvU3RyaW5nID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0LnRvU3RyaW5nKTtcbnZhciBvd25zID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Lmhhc093blByb3BlcnR5KTtcbnZhciBkZWZpbmVHZXR0ZXI7XG52YXIgZGVmaW5lU2V0dGVyO1xudmFyIGxvb2t1cEdldHRlcjtcbnZhciBsb29rdXBTZXR0ZXI7XG52YXIgc3VwcG9ydHNBY2Nlc3NvcnM7XG5pZiAoKHN1cHBvcnRzQWNjZXNzb3JzID0gb3ducyhwcm90b3R5cGVPZk9iamVjdCwgXCJfX2RlZmluZUdldHRlcl9fXCIpKSkge1xuICAgIGRlZmluZUdldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2RlZmluZUdldHRlcl9fKTtcbiAgICBkZWZpbmVTZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19kZWZpbmVTZXR0ZXJfXyk7XG4gICAgbG9va3VwR2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwR2V0dGVyX18pO1xuICAgIGxvb2t1cFNldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2xvb2t1cFNldHRlcl9fKTtcbn1cbmlmIChbMSwyXS5zcGxpY2UoMCkubGVuZ3RoICE9IDIpIHtcbiAgICBpZihmdW5jdGlvbigpIHsgLy8gdGVzdCBJRSA8IDkgdG8gc3BsaWNlIGJ1ZyAtIHNlZSBpc3N1ZSAjMTM4XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VBcnJheShsKSB7XG4gICAgICAgICAgICB2YXIgYSA9IG5ldyBBcnJheShsKzIpO1xuICAgICAgICAgICAgYVswXSA9IGFbMV0gPSAwO1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFycmF5ID0gW10sIGxlbmd0aEJlZm9yZTtcbiAgICAgICAgXG4gICAgICAgIGFycmF5LnNwbGljZS5hcHBseShhcnJheSwgbWFrZUFycmF5KDIwKSk7XG4gICAgICAgIGFycmF5LnNwbGljZS5hcHBseShhcnJheSwgbWFrZUFycmF5KDI2KSk7XG5cbiAgICAgICAgbGVuZ3RoQmVmb3JlID0gYXJyYXkubGVuZ3RoOyAvLzQ2XG4gICAgICAgIGFycmF5LnNwbGljZSg1LCAwLCBcIlhYWFwiKTsgLy8gYWRkIG9uZSBlbGVtZW50XG5cbiAgICAgICAgbGVuZ3RoQmVmb3JlICsgMSA9PSBhcnJheS5sZW5ndGhcblxuICAgICAgICBpZiAobGVuZ3RoQmVmb3JlICsgMSA9PSBhcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlOy8vIGhhcyByaWdodCBzcGxpY2UgaW1wbGVtZW50YXRpb24gd2l0aG91dCBidWdzXG4gICAgICAgIH1cbiAgICB9KCkpIHsvL0lFIDYvN1xuICAgICAgICB2YXIgYXJyYXlfc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnNwbGljZSA9IGZ1bmN0aW9uKHN0YXJ0LCBkZWxldGVDb3VudCkge1xuICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXlfc3BsaWNlLmFwcGx5KHRoaXMsIFtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPT09IHZvaWQgMCA/IDAgOiBzdGFydCxcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPT09IHZvaWQgMCA/ICh0aGlzLmxlbmd0aCAtIHN0YXJ0KSA6IGRlbGV0ZUNvdW50XG4gICAgICAgICAgICAgICAgXS5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9IGVsc2Ugey8vSUU4XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5zcGxpY2UgPSBmdW5jdGlvbihwb3MsIHJlbW92ZUNvdW50KXtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChwb3MgPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBvcyA+IGxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgcG9zID0gbGVuZ3RoO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwb3MgPT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgICAgcG9zID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zIDwgMCkge1xuICAgICAgICAgICAgICAgIHBvcyA9IE1hdGgubWF4KGxlbmd0aCArIHBvcywgMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghKHBvcytyZW1vdmVDb3VudCA8IGxlbmd0aCkpXG4gICAgICAgICAgICAgICAgcmVtb3ZlQ291bnQgPSBsZW5ndGggLSBwb3M7XG5cbiAgICAgICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5zbGljZShwb3MsIHBvcytyZW1vdmVDb3VudCk7XG4gICAgICAgICAgICB2YXIgaW5zZXJ0ID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgdmFyIGFkZCA9IGluc2VydC5sZW5ndGg7ICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAocG9zID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoYWRkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaC5hcHBseSh0aGlzLCBpbnNlcnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZSA9IE1hdGgubWluKHJlbW92ZUNvdW50LCBsZW5ndGggLSBwb3MpO1xuICAgICAgICAgICAgICAgIHZhciB0YWlsT2xkUG9zID0gcG9zICsgcmVtb3ZlO1xuICAgICAgICAgICAgICAgIHZhciB0YWlsTmV3UG9zID0gdGFpbE9sZFBvcyArIGFkZCAtIHJlbW92ZTtcbiAgICAgICAgICAgICAgICB2YXIgdGFpbENvdW50ID0gbGVuZ3RoIC0gdGFpbE9sZFBvcztcbiAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoQWZ0ZXJSZW1vdmUgPSBsZW5ndGggLSByZW1vdmU7XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbE5ld1BvcyA8IHRhaWxPbGRQb3MpIHsgLy8gY2FzZSBBXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFpbENvdW50OyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbdGFpbE5ld1BvcytpXSA9IHRoaXNbdGFpbE9sZFBvcytpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFpbE5ld1BvcyA+IHRhaWxPbGRQb3MpIHsgLy8gY2FzZSBCXG4gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHRhaWxDb3VudDsgaS0tOyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbdGFpbE5ld1BvcytpXSA9IHRoaXNbdGFpbE9sZFBvcytpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gLy8gZWxzZSwgYWRkID09IHJlbW92ZSAobm90aGluZyB0byBkbylcblxuICAgICAgICAgICAgICAgIGlmIChhZGQgJiYgcG9zID09PSBsZW5ndGhBZnRlclJlbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aEFmdGVyUmVtb3ZlOyAvLyB0cnVuY2F0ZSBhcnJheVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2guYXBwbHkodGhpcywgaW5zZXJ0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aEFmdGVyUmVtb3ZlICsgYWRkOyAvLyByZXNlcnZlcyBzcGFjZVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYWRkOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbcG9zK2ldID0gaW5zZXJ0W2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlbW92ZWQ7XG4gICAgICAgIH07XG4gICAgfVxufVxuaWYgKCFBcnJheS5pc0FycmF5KSB7XG4gICAgQXJyYXkuaXNBcnJheSA9IGZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcob2JqKSA9PSBcIltvYmplY3QgQXJyYXldXCI7XG4gICAgfTtcbn1cbnZhciBib3hlZFN0cmluZyA9IE9iamVjdChcImFcIiksXG4gICAgc3BsaXRTdHJpbmcgPSBib3hlZFN0cmluZ1swXSAhPSBcImFcIiB8fCAhKDAgaW4gYm94ZWRTdHJpbmcpO1xuXG5pZiAoIUFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZ1biAvKiwgdGhpc3AqLykge1xuICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksXG4gICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09IFwiW29iamVjdCBTdHJpbmddXCIgP1xuICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoXCJcIikgOlxuICAgICAgICAgICAgICAgIG9iamVjdCxcbiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdLFxuICAgICAgICAgICAgaSA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7XG4gICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSBcIltvYmplY3QgRnVuY3Rpb25dXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlXG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAoKytpIDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7XG4gICAgICAgICAgICAgICAgZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuaWYgKCFBcnJheS5wcm90b3R5cGUubWFwKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIG1hcChmdW4gLyosIHRoaXNwKi8pIHtcbiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLFxuICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSBcIltvYmplY3QgU3RyaW5nXVwiID9cbiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KFwiXCIpIDpcbiAgICAgICAgICAgICAgICBvYmplY3QsXG4gICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCxcbiAgICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTtcbiAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9IFwiW29iamVjdCBGdW5jdGlvbl1cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyBcIiBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpIGluIHNlbGYpXG4gICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xufVxuaWYgKCFBcnJheS5wcm90b3R5cGUuZmlsdGVyKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIGZpbHRlcihmdW4gLyosIHRoaXNwICovKSB7XG4gICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSxcbiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gXCJbb2JqZWN0IFN0cmluZ11cIiA/XG4gICAgICAgICAgICAgICAgdGhpcy5zcGxpdChcIlwiKSA6XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdCxcbiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLFxuICAgICAgICAgICAgcmVzdWx0ID0gW10sXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdO1xuICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gXCJbb2JqZWN0IEZ1bmN0aW9uXVwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArIFwiIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZltpXTtcbiAgICAgICAgICAgICAgICBpZiAoZnVuLmNhbGwodGhpc3AsIHZhbHVlLCBpLCBvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xufVxuaWYgKCFBcnJheS5wcm90b3R5cGUuZXZlcnkpIHtcbiAgICBBcnJheS5wcm90b3R5cGUuZXZlcnkgPSBmdW5jdGlvbiBldmVyeShmdW4gLyosIHRoaXNwICovKSB7XG4gICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSxcbiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gXCJbb2JqZWN0IFN0cmluZ11cIiA/XG4gICAgICAgICAgICAgICAgdGhpcy5zcGxpdChcIlwiKSA6XG4gICAgICAgICAgICAgICAgb2JqZWN0LFxuICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsXG4gICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTtcbiAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9IFwiW29iamVjdCBGdW5jdGlvbl1cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyBcIiBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgIWZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG59XG5pZiAoIUFycmF5LnByb3RvdHlwZS5zb21lKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLnNvbWUgPSBmdW5jdGlvbiBzb21lKGZ1biAvKiwgdGhpc3AgKi8pIHtcbiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLFxuICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSBcIltvYmplY3QgU3RyaW5nXVwiID9cbiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KFwiXCIpIDpcbiAgICAgICAgICAgICAgICBvYmplY3QsXG4gICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCxcbiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdO1xuICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gXCJbb2JqZWN0IEZ1bmN0aW9uXVwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArIFwiIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xufVxuaWYgKCFBcnJheS5wcm90b3R5cGUucmVkdWNlKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZSA9IGZ1bmN0aW9uIHJlZHVjZShmdW4gLyosIGluaXRpYWwqLykge1xuICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksXG4gICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09IFwiW29iamVjdCBTdHJpbmddXCIgP1xuICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoXCJcIikgOlxuICAgICAgICAgICAgICAgIG9iamVjdCxcbiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwO1xuICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gXCJbb2JqZWN0IEZ1bmN0aW9uXVwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArIFwiIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbGVuZ3RoICYmIGFyZ3VtZW50cy5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWVcIik7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGFyZ3VtZW50c1sxXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGZbaSsrXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgrK2kgPj0gbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJyZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bi5jYWxsKHZvaWQgMCwgcmVzdWx0LCBzZWxmW2ldLCBpLCBvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xufVxuaWYgKCFBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQpIHtcbiAgICBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiByZWR1Y2VSaWdodChmdW4gLyosIGluaXRpYWwqLykge1xuICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksXG4gICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09IFwiW29iamVjdCBTdHJpbmddXCIgP1xuICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoXCJcIikgOlxuICAgICAgICAgICAgICAgIG9iamVjdCxcbiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwO1xuICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gXCJbb2JqZWN0IEZ1bmN0aW9uXVwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArIFwiIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbGVuZ3RoICYmIGFyZ3VtZW50cy5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInJlZHVjZVJpZ2h0IG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHQsIGkgPSBsZW5ndGggLSAxO1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBhcmd1bWVudHNbMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmW2ktLV07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoLS1pIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicmVkdWNlUmlnaHQgb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKGkgaW4gdGhpcykge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bi5jYWxsKHZvaWQgMCwgcmVzdWx0LCBzZWxmW2ldLCBpLCBvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChpLS0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbn1cbmlmICghQXJyYXkucHJvdG90eXBlLmluZGV4T2YgfHwgKFswLCAxXS5pbmRleE9mKDEsIDIpICE9IC0xKSkge1xuICAgIEFycmF5LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZihzb3VnaHQgLyosIGZyb21JbmRleCAqLyApIHtcbiAgICAgICAgdmFyIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gXCJbb2JqZWN0IFN0cmluZ11cIiA/XG4gICAgICAgICAgICAgICAgdGhpcy5zcGxpdChcIlwiKSA6XG4gICAgICAgICAgICAgICAgdG9PYmplY3QodGhpcyksXG4gICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDtcblxuICAgICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGkgPSB0b0ludGVnZXIoYXJndW1lbnRzWzFdKTtcbiAgICAgICAgfVxuICAgICAgICBpID0gaSA+PSAwID8gaSA6IE1hdGgubWF4KDAsIGxlbmd0aCArIGkpO1xuICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmIHNlbGZbaV0gPT09IHNvdWdodCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9O1xufVxuaWYgKCFBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YgfHwgKFswLCAxXS5sYXN0SW5kZXhPZigwLCAtMykgIT0gLTEpKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2Yoc291Z2h0IC8qLCBmcm9tSW5kZXggKi8pIHtcbiAgICAgICAgdmFyIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gXCJbb2JqZWN0IFN0cmluZ11cIiA/XG4gICAgICAgICAgICAgICAgdGhpcy5zcGxpdChcIlwiKSA6XG4gICAgICAgICAgICAgICAgdG9PYmplY3QodGhpcyksXG4gICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDtcblxuICAgICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpID0gbGVuZ3RoIC0gMTtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBpID0gTWF0aC5taW4oaSwgdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSkpO1xuICAgICAgICB9XG4gICAgICAgIGkgPSBpID49IDAgPyBpIDogbGVuZ3RoIC0gTWF0aC5hYnMoaSk7XG4gICAgICAgIGZvciAoOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBzb3VnaHQgPT09IHNlbGZbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfTtcbn1cbmlmICghT2JqZWN0LmdldFByb3RvdHlwZU9mKSB7XG4gICAgT2JqZWN0LmdldFByb3RvdHlwZU9mID0gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2Yob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBvYmplY3QuX19wcm90b19fIHx8IChcbiAgICAgICAgICAgIG9iamVjdC5jb25zdHJ1Y3RvciA/XG4gICAgICAgICAgICBvYmplY3QuY29uc3RydWN0b3IucHJvdG90eXBlIDpcbiAgICAgICAgICAgIHByb3RvdHlwZU9mT2JqZWN0XG4gICAgICAgICk7XG4gICAgfTtcbn1cbmlmICghT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcikge1xuICAgIHZhciBFUlJfTk9OX09CSkVDVCA9IFwiT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciBjYWxsZWQgb24gYSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgXCJub24tb2JqZWN0OiBcIjtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICAgICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9iamVjdCAhPSBcImZ1bmN0aW9uXCIpIHx8IG9iamVjdCA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1QgKyBvYmplY3QpO1xuICAgICAgICBpZiAoIW93bnMob2JqZWN0LCBwcm9wZXJ0eSkpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdmFyIGRlc2NyaXB0b3IsIGdldHRlciwgc2V0dGVyO1xuICAgICAgICBkZXNjcmlwdG9yID0gIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH07XG4gICAgICAgIGlmIChzdXBwb3J0c0FjY2Vzc29ycykge1xuICAgICAgICAgICAgdmFyIHByb3RvdHlwZSA9IG9iamVjdC5fX3Byb3RvX187XG4gICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlT2ZPYmplY3Q7XG5cbiAgICAgICAgICAgIHZhciBnZXR0ZXIgPSBsb29rdXBHZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICB2YXIgc2V0dGVyID0gbG9va3VwU2V0dGVyKG9iamVjdCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTtcblxuICAgICAgICAgICAgaWYgKGdldHRlciB8fCBzZXR0ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0dGVyKSBkZXNjcmlwdG9yLmdldCA9IGdldHRlcjtcbiAgICAgICAgICAgICAgICBpZiAoc2V0dGVyKSBkZXNjcmlwdG9yLnNldCA9IHNldHRlcjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkZXNjcmlwdG9yLnZhbHVlID0gb2JqZWN0W3Byb3BlcnR5XTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfTtcbn1cbmlmICghT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpIHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpO1xuICAgIH07XG59XG5pZiAoIU9iamVjdC5jcmVhdGUpIHtcbiAgICB2YXIgY3JlYXRlRW1wdHk7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuX19wcm90b19fID09PSBudWxsKSB7XG4gICAgICAgIGNyZWF0ZUVtcHR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgXCJfX3Byb3RvX19cIjogbnVsbCB9O1xuICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNyZWF0ZUVtcHR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVtcHR5ID0ge307XG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIGVtcHR5KVxuICAgICAgICAgICAgICAgIGVtcHR5W2ldID0gbnVsbDtcbiAgICAgICAgICAgIGVtcHR5LmNvbnN0cnVjdG9yID1cbiAgICAgICAgICAgIGVtcHR5Lmhhc093blByb3BlcnR5ID1cbiAgICAgICAgICAgIGVtcHR5LnByb3BlcnR5SXNFbnVtZXJhYmxlID1cbiAgICAgICAgICAgIGVtcHR5LmlzUHJvdG90eXBlT2YgPVxuICAgICAgICAgICAgZW1wdHkudG9Mb2NhbGVTdHJpbmcgPVxuICAgICAgICAgICAgZW1wdHkudG9TdHJpbmcgPVxuICAgICAgICAgICAgZW1wdHkudmFsdWVPZiA9XG4gICAgICAgICAgICBlbXB0eS5fX3Byb3RvX18gPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIGVtcHR5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgT2JqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm90b3R5cGUsIHByb3BlcnRpZXMpIHtcbiAgICAgICAgdmFyIG9iamVjdDtcbiAgICAgICAgaWYgKHByb3RvdHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgb2JqZWN0ID0gY3JlYXRlRW1wdHkoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvdG90eXBlICE9IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInR5cGVvZiBwcm90b3R5cGVbXCIrKHR5cGVvZiBwcm90b3R5cGUpK1wiXSAhPSAnb2JqZWN0J1wiKTtcbiAgICAgICAgICAgIHZhciBUeXBlID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICBUeXBlLnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgICAgICAgICAgIG9iamVjdCA9IG5ldyBUeXBlKCk7XG4gICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzICE9PSB2b2lkIDApXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmplY3QsIHByb3BlcnRpZXMpO1xuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsob2JqZWN0KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgXCJzZW50aW5lbFwiLCB7fSk7XG4gICAgICAgIHJldHVybiBcInNlbnRpbmVsXCIgaW4gb2JqZWN0O1xuICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge1xuICAgIH1cbn1cbmlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICB2YXIgZGVmaW5lUHJvcGVydHlXb3Jrc09uT2JqZWN0ID0gZG9lc0RlZmluZVByb3BlcnR5V29yayh7fSk7XG4gICAgdmFyIGRlZmluZVByb3BlcnR5V29ya3NPbkRvbSA9IHR5cGVvZiBkb2N1bWVudCA9PSBcInVuZGVmaW5lZFwiIHx8XG4gICAgICAgIGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG4gICAgaWYgKCFkZWZpbmVQcm9wZXJ0eVdvcmtzT25PYmplY3QgfHwgIWRlZmluZVByb3BlcnR5V29ya3NPbkRvbSkge1xuICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHlGYWxsYmFjayA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbiAgICB9XG59XG5cbmlmICghT2JqZWN0LmRlZmluZVByb3BlcnR5IHx8IGRlZmluZVByb3BlcnR5RmFsbGJhY2spIHtcbiAgICB2YXIgRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRPUiA9IFwiUHJvcGVydHkgZGVzY3JpcHRpb24gbXVzdCBiZSBhbiBvYmplY3Q6IFwiO1xuICAgIHZhciBFUlJfTk9OX09CSkVDVF9UQVJHRVQgPSBcIk9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjYWxsZWQgb24gbm9uLW9iamVjdDogXCJcbiAgICB2YXIgRVJSX0FDQ0VTU09SU19OT1RfU1VQUE9SVEVEID0gXCJnZXR0ZXJzICYgc2V0dGVycyBjYW4gbm90IGJlIGRlZmluZWQgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9uIHRoaXMgamF2YXNjcmlwdCBlbmdpbmVcIjtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IpIHtcbiAgICAgICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9iamVjdCAhPSBcImZ1bmN0aW9uXCIpIHx8IG9iamVjdCA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfVEFSR0VUICsgb2JqZWN0KTtcbiAgICAgICAgaWYgKCh0eXBlb2YgZGVzY3JpcHRvciAhPSBcIm9iamVjdFwiICYmIHR5cGVvZiBkZXNjcmlwdG9yICE9IFwiZnVuY3Rpb25cIikgfHwgZGVzY3JpcHRvciA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRPUiArIGRlc2NyaXB0b3IpO1xuICAgICAgICBpZiAoZGVmaW5lUHJvcGVydHlGYWxsYmFjaykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5lUHJvcGVydHlGYWxsYmFjay5jYWxsKE9iamVjdCwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvcik7XG4gICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob3ducyhkZXNjcmlwdG9yLCBcInZhbHVlXCIpKSB7XG5cbiAgICAgICAgICAgIGlmIChzdXBwb3J0c0FjY2Vzc29ycyAmJiAobG9va3VwR2V0dGVyKG9iamVjdCwgcHJvcGVydHkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cFNldHRlcihvYmplY3QsIHByb3BlcnR5KSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHByb3RvdHlwZSA9IG9iamVjdC5fX3Byb3RvX187XG4gICAgICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZU9mT2JqZWN0O1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBvYmplY3RbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgICAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFzdXBwb3J0c0FjY2Vzc29ycylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9BQ0NFU1NPUlNfTk9UX1NVUFBPUlRFRCk7XG4gICAgICAgICAgICBpZiAob3ducyhkZXNjcmlwdG9yLCBcImdldFwiKSlcbiAgICAgICAgICAgICAgICBkZWZpbmVHZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvci5nZXQpO1xuICAgICAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwgXCJzZXRcIikpXG4gICAgICAgICAgICAgICAgZGVmaW5lU2V0dGVyKG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3Iuc2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfTtcbn1cbmlmICghT2JqZWN0LmRlZmluZVByb3BlcnRpZXMpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMob2JqZWN0LCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChvd25zKHByb3BlcnRpZXMsIHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgcHJvcGVydGllc1twcm9wZXJ0eV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfTtcbn1cbmlmICghT2JqZWN0LnNlYWwpIHtcbiAgICBPYmplY3Quc2VhbCA9IGZ1bmN0aW9uIHNlYWwob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfTtcbn1cbmlmICghT2JqZWN0LmZyZWV6ZSkge1xuICAgIE9iamVjdC5mcmVlemUgPSBmdW5jdGlvbiBmcmVlemUob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfTtcbn1cbnRyeSB7XG4gICAgT2JqZWN0LmZyZWV6ZShmdW5jdGlvbiAoKSB7fSk7XG59IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICBPYmplY3QuZnJlZXplID0gKGZ1bmN0aW9uIGZyZWV6ZShmcmVlemVPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShvYmplY3QpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmcmVlemVPYmplY3Qob2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KShPYmplY3QuZnJlZXplKTtcbn1cbmlmICghT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKSB7XG4gICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zID0gZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnMob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfTtcbn1cbmlmICghT2JqZWN0LmlzU2VhbGVkKSB7XG4gICAgT2JqZWN0LmlzU2VhbGVkID0gZnVuY3Rpb24gaXNTZWFsZWQob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xufVxuaWYgKCFPYmplY3QuaXNGcm96ZW4pIHtcbiAgICBPYmplY3QuaXNGcm96ZW4gPSBmdW5jdGlvbiBpc0Zyb3plbihvYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG59XG5pZiAoIU9iamVjdC5pc0V4dGVuc2libGUpIHtcbiAgICBPYmplY3QuaXNFeHRlbnNpYmxlID0gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKG9iamVjdCkge1xuICAgICAgICBpZiAoT2JqZWN0KG9iamVjdCkgPT09IG9iamVjdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2VcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9ICcnO1xuICAgICAgICB3aGlsZSAob3ducyhvYmplY3QsIG5hbWUpKSB7XG4gICAgICAgICAgICBuYW1lICs9ICc/JztcbiAgICAgICAgfVxuICAgICAgICBvYmplY3RbbmFtZV0gPSB0cnVlO1xuICAgICAgICB2YXIgcmV0dXJuVmFsdWUgPSBvd25zKG9iamVjdCwgbmFtZSk7XG4gICAgICAgIGRlbGV0ZSBvYmplY3RbbmFtZV07XG4gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICB9O1xufVxuaWYgKCFPYmplY3Qua2V5cykge1xuICAgIHZhciBoYXNEb250RW51bUJ1ZyA9IHRydWUsXG4gICAgICAgIGRvbnRFbnVtcyA9IFtcbiAgICAgICAgICAgIFwidG9TdHJpbmdcIixcbiAgICAgICAgICAgIFwidG9Mb2NhbGVTdHJpbmdcIixcbiAgICAgICAgICAgIFwidmFsdWVPZlwiLFxuICAgICAgICAgICAgXCJoYXNPd25Qcm9wZXJ0eVwiLFxuICAgICAgICAgICAgXCJpc1Byb3RvdHlwZU9mXCIsXG4gICAgICAgICAgICBcInByb3BlcnR5SXNFbnVtZXJhYmxlXCIsXG4gICAgICAgICAgICBcImNvbnN0cnVjdG9yXCJcbiAgICAgICAgXSxcbiAgICAgICAgZG9udEVudW1zTGVuZ3RoID0gZG9udEVudW1zLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGtleSBpbiB7XCJ0b1N0cmluZ1wiOiBudWxsfSkge1xuICAgICAgICBoYXNEb250RW51bUJ1ZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAodHlwZW9mIG9iamVjdCAhPSBcIm9iamVjdFwiICYmIHR5cGVvZiBvYmplY3QgIT0gXCJmdW5jdGlvblwiKSB8fFxuICAgICAgICAgICAgb2JqZWN0ID09PSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3RcIik7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIga2V5cyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9iamVjdCkge1xuICAgICAgICAgICAgaWYgKG93bnMob2JqZWN0LCBuYW1lKSkge1xuICAgICAgICAgICAgICAgIGtleXMucHVzaChuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNEb250RW51bUJ1Zykge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZG9udEVudW1zTGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBkb250RW51bSA9IGRvbnRFbnVtc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAob3ducyhvYmplY3QsIGRvbnRFbnVtKSkge1xuICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goZG9udEVudW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ga2V5cztcbiAgICB9O1xuXG59XG5pZiAoIURhdGUubm93KSB7XG4gICAgRGF0ZS5ub3cgPSBmdW5jdGlvbiBub3coKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9O1xufVxudmFyIHdzID0gXCJcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1wiICtcbiAgICBcIlxcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XCIgK1xuICAgIFwiXFx1MjAyOVxcdUZFRkZcIjtcbmlmICghU3RyaW5nLnByb3RvdHlwZS50cmltIHx8IHdzLnRyaW0oKSkge1xuICAgIHdzID0gXCJbXCIgKyB3cyArIFwiXVwiO1xuICAgIHZhciB0cmltQmVnaW5SZWdleHAgPSBuZXcgUmVnRXhwKFwiXlwiICsgd3MgKyB3cyArIFwiKlwiKSxcbiAgICAgICAgdHJpbUVuZFJlZ2V4cCA9IG5ldyBSZWdFeHAod3MgKyB3cyArIFwiKiRcIik7XG4gICAgU3RyaW5nLnByb3RvdHlwZS50cmltID0gZnVuY3Rpb24gdHJpbSgpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKHRyaW1CZWdpblJlZ2V4cCwgXCJcIikucmVwbGFjZSh0cmltRW5kUmVnZXhwLCBcIlwiKTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiB0b0ludGVnZXIobikge1xuICAgIG4gPSArbjtcbiAgICBpZiAobiAhPT0gbikgeyAvLyBpc05hTlxuICAgICAgICBuID0gMDtcbiAgICB9IGVsc2UgaWYgKG4gIT09IDAgJiYgbiAhPT0gKDEvMCkgJiYgbiAhPT0gLSgxLzApKSB7XG4gICAgICAgIG4gPSAobiA+IDAgfHwgLTEpICogTWF0aC5mbG9vcihNYXRoLmFicyhuKSk7XG4gICAgfVxuICAgIHJldHVybiBuO1xufVxuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZShpbnB1dCkge1xuICAgIHZhciB0eXBlID0gdHlwZW9mIGlucHV0O1xuICAgIHJldHVybiAoXG4gICAgICAgIGlucHV0ID09PSBudWxsIHx8XG4gICAgICAgIHR5cGUgPT09IFwidW5kZWZpbmVkXCIgfHxcbiAgICAgICAgdHlwZSA9PT0gXCJib29sZWFuXCIgfHxcbiAgICAgICAgdHlwZSA9PT0gXCJudW1iZXJcIiB8fFxuICAgICAgICB0eXBlID09PSBcInN0cmluZ1wiXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gdG9QcmltaXRpdmUoaW5wdXQpIHtcbiAgICB2YXIgdmFsLCB2YWx1ZU9mLCB0b1N0cmluZztcbiAgICBpZiAoaXNQcmltaXRpdmUoaW5wdXQpKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgdmFsdWVPZiA9IGlucHV0LnZhbHVlT2Y7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZU9mID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdmFsID0gdmFsdWVPZi5jYWxsKGlucHV0KTtcbiAgICAgICAgaWYgKGlzUHJpbWl0aXZlKHZhbCkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9TdHJpbmcgPSBpbnB1dC50b1N0cmluZztcbiAgICBpZiAodHlwZW9mIHRvU3RyaW5nID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdmFsID0gdG9TdHJpbmcuY2FsbChpbnB1dCk7XG4gICAgICAgIGlmIChpc1ByaW1pdGl2ZSh2YWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbn1cbnZhciB0b09iamVjdCA9IGZ1bmN0aW9uIChvKSB7XG4gICAgaWYgKG8gPT0gbnVsbCkgeyAvLyB0aGlzIG1hdGNoZXMgYm90aCBudWxsIGFuZCB1bmRlZmluZWRcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImNhbid0IGNvbnZlcnQgXCIrbytcIiB0byBvYmplY3RcIik7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3Qobyk7XG59O1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9saWIvZml4b2xkYnJvd3NlcnNcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvcmVnZXhwXCIsXCJhY2UvbGliL2VzNS1zaGltXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuYWNlcXVpcmUoXCIuL3JlZ2V4cFwiKTtcbmFjZXF1aXJlKFwiLi9lczUtc2hpbVwiKTtcblxufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvbGliL2RvbVwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBYSFRNTF9OUyA9IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiO1xuXG5leHBvcnRzLmdldERvY3VtZW50SGVhZCA9IGZ1bmN0aW9uKGRvYykge1xuICAgIGlmICghZG9jKVxuICAgICAgICBkb2MgPSBkb2N1bWVudDtcbiAgICByZXR1cm4gZG9jLmhlYWQgfHwgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSB8fCBkb2MuZG9jdW1lbnRFbGVtZW50O1xufTtcblxuZXhwb3J0cy5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24odGFnLCBucykge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMgP1xuICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobnMgfHwgWEhUTUxfTlMsIHRhZykgOlxuICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG59O1xuXG5leHBvcnRzLmhhc0Nzc0NsYXNzID0gZnVuY3Rpb24oZWwsIG5hbWUpIHtcbiAgICB2YXIgY2xhc3NlcyA9IChlbC5jbGFzc05hbWUgKyBcIlwiKS5zcGxpdCgvXFxzKy9nKTtcbiAgICByZXR1cm4gY2xhc3Nlcy5pbmRleE9mKG5hbWUpICE9PSAtMTtcbn07XG5leHBvcnRzLmFkZENzc0NsYXNzID0gZnVuY3Rpb24oZWwsIG5hbWUpIHtcbiAgICBpZiAoIWV4cG9ydHMuaGFzQ3NzQ2xhc3MoZWwsIG5hbWUpKSB7XG4gICAgICAgIGVsLmNsYXNzTmFtZSArPSBcIiBcIiArIG5hbWU7XG4gICAgfVxufTtcbmV4cG9ydHMucmVtb3ZlQ3NzQ2xhc3MgPSBmdW5jdGlvbihlbCwgbmFtZSkge1xuICAgIHZhciBjbGFzc2VzID0gZWwuY2xhc3NOYW1lLnNwbGl0KC9cXHMrL2cpO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNsYXNzZXMuaW5kZXhPZihuYW1lKTtcbiAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjbGFzc2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIGVsLmNsYXNzTmFtZSA9IGNsYXNzZXMuam9pbihcIiBcIik7XG59O1xuXG5leHBvcnRzLnRvZ2dsZUNzc0NsYXNzID0gZnVuY3Rpb24oZWwsIG5hbWUpIHtcbiAgICB2YXIgY2xhc3NlcyA9IGVsLmNsYXNzTmFtZS5zcGxpdCgvXFxzKy9nKSwgYWRkID0gdHJ1ZTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjbGFzc2VzLmluZGV4T2YobmFtZSk7XG4gICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgYWRkID0gZmFsc2U7XG4gICAgICAgIGNsYXNzZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgaWYgKGFkZClcbiAgICAgICAgY2xhc3Nlcy5wdXNoKG5hbWUpO1xuXG4gICAgZWwuY2xhc3NOYW1lID0gY2xhc3Nlcy5qb2luKFwiIFwiKTtcbiAgICByZXR1cm4gYWRkO1xufTtcbmV4cG9ydHMuc2V0Q3NzQ2xhc3MgPSBmdW5jdGlvbihub2RlLCBjbGFzc05hbWUsIGluY2x1ZGUpIHtcbiAgICBpZiAoaW5jbHVkZSkge1xuICAgICAgICBleHBvcnRzLmFkZENzc0NsYXNzKG5vZGUsIGNsYXNzTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXhwb3J0cy5yZW1vdmVDc3NDbGFzcyhub2RlLCBjbGFzc05hbWUpO1xuICAgIH1cbn07XG5cbmV4cG9ydHMuaGFzQ3NzU3RyaW5nID0gZnVuY3Rpb24oaWQsIGRvYykge1xuICAgIHZhciBpbmRleCA9IDAsIHNoZWV0cztcbiAgICBkb2MgPSBkb2MgfHwgZG9jdW1lbnQ7XG5cbiAgICBpZiAoZG9jLmNyZWF0ZVN0eWxlU2hlZXQgJiYgKHNoZWV0cyA9IGRvYy5zdHlsZVNoZWV0cykpIHtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgc2hlZXRzLmxlbmd0aClcbiAgICAgICAgICAgIGlmIChzaGVldHNbaW5kZXgrK10ub3duaW5nRWxlbWVudC5pZCA9PT0gaWQpIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoKHNoZWV0cyA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZShcInN0eWxlXCIpKSkge1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBzaGVldHMubGVuZ3RoKVxuICAgICAgICAgICAgaWYgKHNoZWV0c1tpbmRleCsrXS5pZCA9PT0gaWQpIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydHMuaW1wb3J0Q3NzU3RyaW5nID0gZnVuY3Rpb24gaW1wb3J0Q3NzU3RyaW5nKGNzc1RleHQsIGlkLCBkb2MpIHtcbiAgICBkb2MgPSBkb2MgfHwgZG9jdW1lbnQ7XG4gICAgaWYgKGlkICYmIGV4cG9ydHMuaGFzQ3NzU3RyaW5nKGlkLCBkb2MpKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBcbiAgICB2YXIgc3R5bGU7XG4gICAgXG4gICAgaWYgKGlkKVxuICAgICAgICBjc3NUZXh0ICs9IFwiXFxuLyojIHNvdXJjZVVSTD1hY2UvY3NzL1wiICsgaWQgKyBcIiAqL1wiO1xuICAgIFxuICAgIGlmIChkb2MuY3JlYXRlU3R5bGVTaGVldCkge1xuICAgICAgICBzdHlsZSA9IGRvYy5jcmVhdGVTdHlsZVNoZWV0KCk7XG4gICAgICAgIHN0eWxlLmNzc1RleHQgPSBjc3NUZXh0O1xuICAgICAgICBpZiAoaWQpXG4gICAgICAgICAgICBzdHlsZS5vd25pbmdFbGVtZW50LmlkID0gaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGUgPSBleHBvcnRzLmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICAgICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKGNzc1RleHQpKTtcbiAgICAgICAgaWYgKGlkKVxuICAgICAgICAgICAgc3R5bGUuaWQgPSBpZDtcblxuICAgICAgICBleHBvcnRzLmdldERvY3VtZW50SGVhZChkb2MpLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG59O1xuXG5leHBvcnRzLmltcG9ydENzc1N0eWxzaGVldCA9IGZ1bmN0aW9uKHVyaSwgZG9jKSB7XG4gICAgaWYgKGRvYy5jcmVhdGVTdHlsZVNoZWV0KSB7XG4gICAgICAgIGRvYy5jcmVhdGVTdHlsZVNoZWV0KHVyaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGxpbmsgPSBleHBvcnRzLmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgICAgbGluay5yZWwgPSAnc3R5bGVzaGVldCc7XG4gICAgICAgIGxpbmsuaHJlZiA9IHVyaTtcblxuICAgICAgICBleHBvcnRzLmdldERvY3VtZW50SGVhZChkb2MpLmFwcGVuZENoaWxkKGxpbmspO1xuICAgIH1cbn07XG5cbmV4cG9ydHMuZ2V0SW5uZXJXaWR0aCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBwYXJzZUludChleHBvcnRzLmNvbXB1dGVkU3R5bGUoZWxlbWVudCwgXCJwYWRkaW5nTGVmdFwiKSwgMTApICtcbiAgICAgICAgcGFyc2VJbnQoZXhwb3J0cy5jb21wdXRlZFN0eWxlKGVsZW1lbnQsIFwicGFkZGluZ1JpZ2h0XCIpLCAxMCkgKyBcbiAgICAgICAgZWxlbWVudC5jbGllbnRXaWR0aFxuICAgICk7XG59O1xuXG5leHBvcnRzLmdldElubmVySGVpZ2h0ID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiAoXG4gICAgICAgIHBhcnNlSW50KGV4cG9ydHMuY29tcHV0ZWRTdHlsZShlbGVtZW50LCBcInBhZGRpbmdUb3BcIiksIDEwKSArXG4gICAgICAgIHBhcnNlSW50KGV4cG9ydHMuY29tcHV0ZWRTdHlsZShlbGVtZW50LCBcInBhZGRpbmdCb3R0b21cIiksIDEwKSArXG4gICAgICAgIGVsZW1lbnQuY2xpZW50SGVpZ2h0XG4gICAgKTtcbn07XG5cbmV4cG9ydHMuc2Nyb2xsYmFyV2lkdGggPSBmdW5jdGlvbihkb2N1bWVudCkge1xuICAgIHZhciBpbm5lciA9IGV4cG9ydHMuY3JlYXRlRWxlbWVudChcImFjZV9pbm5lclwiKTtcbiAgICBpbm5lci5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgIGlubmVyLnN0eWxlLm1pbldpZHRoID0gXCIwcHhcIjtcbiAgICBpbm5lci5zdHlsZS5oZWlnaHQgPSBcIjIwMHB4XCI7XG4gICAgaW5uZXIuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblxuICAgIHZhciBvdXRlciA9IGV4cG9ydHMuY3JlYXRlRWxlbWVudChcImFjZV9vdXRlclwiKTtcbiAgICB2YXIgc3R5bGUgPSBvdXRlci5zdHlsZTtcblxuICAgIHN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgIHN0eWxlLmxlZnQgPSBcIi0xMDAwMHB4XCI7XG4gICAgc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuICAgIHN0eWxlLndpZHRoID0gXCIyMDBweFwiO1xuICAgIHN0eWxlLm1pbldpZHRoID0gXCIwcHhcIjtcbiAgICBzdHlsZS5oZWlnaHQgPSBcIjE1MHB4XCI7XG4gICAgc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblxuICAgIG91dGVyLmFwcGVuZENoaWxkKGlubmVyKTtcblxuICAgIHZhciBib2R5ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIGJvZHkuYXBwZW5kQ2hpbGQob3V0ZXIpO1xuXG4gICAgdmFyIG5vU2Nyb2xsYmFyID0gaW5uZXIub2Zmc2V0V2lkdGg7XG5cbiAgICBzdHlsZS5vdmVyZmxvdyA9IFwic2Nyb2xsXCI7XG4gICAgdmFyIHdpdGhTY3JvbGxiYXIgPSBpbm5lci5vZmZzZXRXaWR0aDtcblxuICAgIGlmIChub1Njcm9sbGJhciA9PSB3aXRoU2Nyb2xsYmFyKSB7XG4gICAgICAgIHdpdGhTY3JvbGxiYXIgPSBvdXRlci5jbGllbnRXaWR0aDtcbiAgICB9XG5cbiAgICBib2R5LnJlbW92ZUNoaWxkKG91dGVyKTtcblxuICAgIHJldHVybiBub1Njcm9sbGJhci13aXRoU2Nyb2xsYmFyO1xufTtcblxuaWYgKHR5cGVvZiBkb2N1bWVudCA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgZXhwb3J0cy5pbXBvcnRDc3NTdHJpbmcgPSBmdW5jdGlvbigpIHt9O1xuICAgIHJldHVybjtcbn1cblxuaWYgKHdpbmRvdy5wYWdlWU9mZnNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZXhwb3J0cy5nZXRQYWdlU2Nyb2xsVG9wID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cucGFnZVlPZmZzZXQ7XG4gICAgfTtcblxuICAgIGV4cG9ydHMuZ2V0UGFnZVNjcm9sbExlZnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5wYWdlWE9mZnNldDtcbiAgICB9O1xufVxuZWxzZSB7XG4gICAgZXhwb3J0cy5nZXRQYWdlU2Nyb2xsVG9wID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcDtcbiAgICB9O1xuXG4gICAgZXhwb3J0cy5nZXRQYWdlU2Nyb2xsTGVmdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0O1xuICAgIH07XG59XG5cbmlmICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSlcbiAgICBleHBvcnRzLmNvbXB1dGVkU3R5bGUgPSBmdW5jdGlvbihlbGVtZW50LCBzdHlsZSkge1xuICAgICAgICBpZiAoc3R5bGUpXG4gICAgICAgICAgICByZXR1cm4gKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIFwiXCIpIHx8IHt9KVtzdHlsZV0gfHwgXCJcIjtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIFwiXCIpIHx8IHt9O1xuICAgIH07XG5lbHNlXG4gICAgZXhwb3J0cy5jb21wdXRlZFN0eWxlID0gZnVuY3Rpb24oZWxlbWVudCwgc3R5bGUpIHtcbiAgICAgICAgaWYgKHN0eWxlKVxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuY3VycmVudFN0eWxlW3N0eWxlXTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuY3VycmVudFN0eWxlO1xuICAgIH07XG5leHBvcnRzLnNldElubmVySHRtbCA9IGZ1bmN0aW9uKGVsLCBpbm5lckh0bWwpIHtcbiAgICB2YXIgZWxlbWVudCA9IGVsLmNsb25lTm9kZShmYWxzZSk7Ly9kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gaW5uZXJIdG1sO1xuICAgIGVsLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGVsZW1lbnQsIGVsKTtcbiAgICByZXR1cm4gZWxlbWVudDtcbn07XG5cbmlmIChcInRleHRDb250ZW50XCIgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgZXhwb3J0cy5zZXRJbm5lclRleHQgPSBmdW5jdGlvbihlbCwgaW5uZXJUZXh0KSB7XG4gICAgICAgIGVsLnRleHRDb250ZW50ID0gaW5uZXJUZXh0O1xuICAgIH07XG5cbiAgICBleHBvcnRzLmdldElubmVyVGV4dCA9IGZ1bmN0aW9uKGVsKSB7XG4gICAgICAgIHJldHVybiBlbC50ZXh0Q29udGVudDtcbiAgICB9O1xufVxuZWxzZSB7XG4gICAgZXhwb3J0cy5zZXRJbm5lclRleHQgPSBmdW5jdGlvbihlbCwgaW5uZXJUZXh0KSB7XG4gICAgICAgIGVsLmlubmVyVGV4dCA9IGlubmVyVGV4dDtcbiAgICB9O1xuXG4gICAgZXhwb3J0cy5nZXRJbm5lclRleHQgPSBmdW5jdGlvbihlbCkge1xuICAgICAgICByZXR1cm4gZWwuaW5uZXJUZXh0O1xuICAgIH07XG59XG5cbmV4cG9ydHMuZ2V0UGFyZW50V2luZG93ID0gZnVuY3Rpb24oZG9jdW1lbnQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgZG9jdW1lbnQucGFyZW50V2luZG93O1xufTtcblxufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvbGliL29vcFwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBmdW5jdGlvbihjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvcjtcbiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9KTtcbn07XG5cbmV4cG9ydHMubWl4aW4gPSBmdW5jdGlvbihvYmosIG1peGluKSB7XG4gICAgZm9yICh2YXIga2V5IGluIG1peGluKSB7XG4gICAgICAgIG9ialtrZXldID0gbWl4aW5ba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbn07XG5cbmV4cG9ydHMuaW1wbGVtZW50ID0gZnVuY3Rpb24ocHJvdG8sIG1peGluKSB7XG4gICAgZXhwb3J0cy5taXhpbihwcm90bywgbWl4aW4pO1xufTtcblxufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvbGliL2tleXNcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvZml4b2xkYnJvd3NlcnNcIixcImFjZS9saWIvb29wXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuYWNlcXVpcmUoXCIuL2ZpeG9sZGJyb3dzZXJzXCIpO1xuXG52YXIgb29wID0gYWNlcXVpcmUoXCIuL29vcFwiKTtcbnZhciBLZXlzID0gKGZ1bmN0aW9uKCkge1xuICAgIHZhciByZXQgPSB7XG4gICAgICAgIE1PRElGSUVSX0tFWVM6IHtcbiAgICAgICAgICAgIDE2OiAnU2hpZnQnLCAxNzogJ0N0cmwnLCAxODogJ0FsdCcsIDIyNDogJ01ldGEnXG4gICAgICAgIH0sXG5cbiAgICAgICAgS0VZX01PRFM6IHtcbiAgICAgICAgICAgIFwiY3RybFwiOiAxLCBcImFsdFwiOiAyLCBcIm9wdGlvblwiIDogMiwgXCJzaGlmdFwiOiA0LFxuICAgICAgICAgICAgXCJzdXBlclwiOiA4LCBcIm1ldGFcIjogOCwgXCJjb21tYW5kXCI6IDgsIFwiY21kXCI6IDhcbiAgICAgICAgfSxcblxuICAgICAgICBGVU5DVElPTl9LRVlTIDoge1xuICAgICAgICAgICAgOCAgOiBcIkJhY2tzcGFjZVwiLFxuICAgICAgICAgICAgOSAgOiBcIlRhYlwiLFxuICAgICAgICAgICAgMTMgOiBcIlJldHVyblwiLFxuICAgICAgICAgICAgMTkgOiBcIlBhdXNlXCIsXG4gICAgICAgICAgICAyNyA6IFwiRXNjXCIsXG4gICAgICAgICAgICAzMiA6IFwiU3BhY2VcIixcbiAgICAgICAgICAgIDMzIDogXCJQYWdlVXBcIixcbiAgICAgICAgICAgIDM0IDogXCJQYWdlRG93blwiLFxuICAgICAgICAgICAgMzUgOiBcIkVuZFwiLFxuICAgICAgICAgICAgMzYgOiBcIkhvbWVcIixcbiAgICAgICAgICAgIDM3IDogXCJMZWZ0XCIsXG4gICAgICAgICAgICAzOCA6IFwiVXBcIixcbiAgICAgICAgICAgIDM5IDogXCJSaWdodFwiLFxuICAgICAgICAgICAgNDAgOiBcIkRvd25cIixcbiAgICAgICAgICAgIDQ0IDogXCJQcmludFwiLFxuICAgICAgICAgICAgNDUgOiBcIkluc2VydFwiLFxuICAgICAgICAgICAgNDYgOiBcIkRlbGV0ZVwiLFxuICAgICAgICAgICAgOTYgOiBcIk51bXBhZDBcIixcbiAgICAgICAgICAgIDk3IDogXCJOdW1wYWQxXCIsXG4gICAgICAgICAgICA5OCA6IFwiTnVtcGFkMlwiLFxuICAgICAgICAgICAgOTkgOiBcIk51bXBhZDNcIixcbiAgICAgICAgICAgIDEwMDogXCJOdW1wYWQ0XCIsXG4gICAgICAgICAgICAxMDE6IFwiTnVtcGFkNVwiLFxuICAgICAgICAgICAgMTAyOiBcIk51bXBhZDZcIixcbiAgICAgICAgICAgIDEwMzogXCJOdW1wYWQ3XCIsXG4gICAgICAgICAgICAxMDQ6IFwiTnVtcGFkOFwiLFxuICAgICAgICAgICAgMTA1OiBcIk51bXBhZDlcIixcbiAgICAgICAgICAgICctMTMnOiBcIk51bXBhZEVudGVyXCIsXG4gICAgICAgICAgICAxMTI6IFwiRjFcIixcbiAgICAgICAgICAgIDExMzogXCJGMlwiLFxuICAgICAgICAgICAgMTE0OiBcIkYzXCIsXG4gICAgICAgICAgICAxMTU6IFwiRjRcIixcbiAgICAgICAgICAgIDExNjogXCJGNVwiLFxuICAgICAgICAgICAgMTE3OiBcIkY2XCIsXG4gICAgICAgICAgICAxMTg6IFwiRjdcIixcbiAgICAgICAgICAgIDExOTogXCJGOFwiLFxuICAgICAgICAgICAgMTIwOiBcIkY5XCIsXG4gICAgICAgICAgICAxMjE6IFwiRjEwXCIsXG4gICAgICAgICAgICAxMjI6IFwiRjExXCIsXG4gICAgICAgICAgICAxMjM6IFwiRjEyXCIsXG4gICAgICAgICAgICAxNDQ6IFwiTnVtbG9ja1wiLFxuICAgICAgICAgICAgMTQ1OiBcIlNjcm9sbGxvY2tcIlxuICAgICAgICB9LFxuXG4gICAgICAgIFBSSU5UQUJMRV9LRVlTOiB7XG4gICAgICAgICAgIDMyOiAnICcsICA0ODogJzAnLCAgNDk6ICcxJywgIDUwOiAnMicsICA1MTogJzMnLCAgNTI6ICc0JywgNTM6ICAnNScsXG4gICAgICAgICAgIDU0OiAnNicsICA1NTogJzcnLCAgNTY6ICc4JywgIDU3OiAnOScsICA1OTogJzsnLCAgNjE6ICc9JywgNjU6ICAnYScsXG4gICAgICAgICAgIDY2OiAnYicsICA2NzogJ2MnLCAgNjg6ICdkJywgIDY5OiAnZScsICA3MDogJ2YnLCAgNzE6ICdnJywgNzI6ICAnaCcsXG4gICAgICAgICAgIDczOiAnaScsICA3NDogJ2onLCAgNzU6ICdrJywgIDc2OiAnbCcsICA3NzogJ20nLCAgNzg6ICduJywgNzk6ICAnbycsXG4gICAgICAgICAgIDgwOiAncCcsICA4MTogJ3EnLCAgODI6ICdyJywgIDgzOiAncycsICA4NDogJ3QnLCAgODU6ICd1JywgODY6ICAndicsXG4gICAgICAgICAgIDg3OiAndycsICA4ODogJ3gnLCAgODk6ICd5JywgIDkwOiAneicsIDEwNzogJysnLCAxMDk6ICctJywgMTEwOiAnLicsXG4gICAgICAgICAgMTg2OiAnOycsIDE4NzogJz0nLCAxODg6ICcsJywgMTg5OiAnLScsIDE5MDogJy4nLCAxOTE6ICcvJywgMTkyOiAnYCcsXG4gICAgICAgICAgMjE5OiAnWycsIDIyMDogJ1xcXFwnLDIyMTogJ10nLCAyMjI6IFwiJ1wiLCAxMTE6ICcvJywgMTA2OiAnKidcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIG5hbWUsIGk7XG4gICAgZm9yIChpIGluIHJldC5GVU5DVElPTl9LRVlTKSB7XG4gICAgICAgIG5hbWUgPSByZXQuRlVOQ1RJT05fS0VZU1tpXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXRbbmFtZV0gPSBwYXJzZUludChpLCAxMCk7XG4gICAgfVxuICAgIGZvciAoaSBpbiByZXQuUFJJTlRBQkxFX0tFWVMpIHtcbiAgICAgICAgbmFtZSA9IHJldC5QUklOVEFCTEVfS0VZU1tpXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXRbbmFtZV0gPSBwYXJzZUludChpLCAxMCk7XG4gICAgfVxuICAgIG9vcC5taXhpbihyZXQsIHJldC5NT0RJRklFUl9LRVlTKTtcbiAgICBvb3AubWl4aW4ocmV0LCByZXQuUFJJTlRBQkxFX0tFWVMpO1xuICAgIG9vcC5taXhpbihyZXQsIHJldC5GVU5DVElPTl9LRVlTKTtcbiAgICByZXQuZW50ZXIgPSByZXRbXCJyZXR1cm5cIl07XG4gICAgcmV0LmVzY2FwZSA9IHJldC5lc2M7XG4gICAgcmV0LmRlbCA9IHJldFtcImRlbGV0ZVwiXTtcbiAgICByZXRbMTczXSA9ICctJztcbiAgICBcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBtb2RzID0gW1wiY21kXCIsIFwiY3RybFwiLCBcImFsdFwiLCBcInNoaWZ0XCJdO1xuICAgICAgICBmb3IgKHZhciBpID0gTWF0aC5wb3coMiwgbW9kcy5sZW5ndGgpOyBpLS07KSB7ICAgICAgICAgICAgXG4gICAgICAgICAgICByZXQuS0VZX01PRFNbaV0gPSBtb2RzLmZpbHRlcihmdW5jdGlvbih4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgJiByZXQuS0VZX01PRFNbeF07XG4gICAgICAgICAgICB9KS5qb2luKFwiLVwiKSArIFwiLVwiO1xuICAgICAgICB9XG4gICAgfSkoKTtcblxuICAgIHJldC5LRVlfTU9EU1swXSA9IFwiXCI7XG4gICAgcmV0LktFWV9NT0RTWy0xXSA9IFwiaW5wdXQtXCI7XG5cbiAgICByZXR1cm4gcmV0O1xufSkoKTtcbm9vcC5taXhpbihleHBvcnRzLCBLZXlzKTtcblxuZXhwb3J0cy5rZXlDb2RlVG9TdHJpbmcgPSBmdW5jdGlvbihrZXlDb2RlKSB7XG4gICAgdmFyIGtleVN0cmluZyA9IEtleXNba2V5Q29kZV07XG4gICAgaWYgKHR5cGVvZiBrZXlTdHJpbmcgIT0gXCJzdHJpbmdcIilcbiAgICAgICAga2V5U3RyaW5nID0gU3RyaW5nLmZyb21DaGFyQ29kZShrZXlDb2RlKTtcbiAgICByZXR1cm4ga2V5U3RyaW5nLnRvTG93ZXJDYXNlKCk7XG59O1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9saWIvdXNlcmFnZW50XCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcbmV4cG9ydHMuT1MgPSB7XG4gICAgTElOVVg6IFwiTElOVVhcIixcbiAgICBNQUM6IFwiTUFDXCIsXG4gICAgV0lORE9XUzogXCJXSU5ET1dTXCJcbn07XG5leHBvcnRzLmdldE9TID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKGV4cG9ydHMuaXNNYWMpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuT1MuTUFDO1xuICAgIH0gZWxzZSBpZiAoZXhwb3J0cy5pc0xpbnV4KSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLk9TLkxJTlVYO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLk9TLldJTkRPV1M7XG4gICAgfVxufTtcbmlmICh0eXBlb2YgbmF2aWdhdG9yICE9IFwib2JqZWN0XCIpXG4gICAgcmV0dXJuO1xuXG52YXIgb3MgPSAobmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKC9tYWN8d2lufGxpbnV4L2kpIHx8IFtcIm90aGVyXCJdKVswXS50b0xvd2VyQ2FzZSgpO1xudmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbmV4cG9ydHMuaXNXaW4gPSAob3MgPT0gXCJ3aW5cIik7XG5leHBvcnRzLmlzTWFjID0gKG9zID09IFwibWFjXCIpO1xuZXhwb3J0cy5pc0xpbnV4ID0gKG9zID09IFwibGludXhcIik7XG5leHBvcnRzLmlzSUUgPSBcbiAgICAobmF2aWdhdG9yLmFwcE5hbWUgPT0gXCJNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXJcIiB8fCBuYXZpZ2F0b3IuYXBwTmFtZS5pbmRleE9mKFwiTVNBcHBIb3N0XCIpID49IDApXG4gICAgPyBwYXJzZUZsb2F0KCh1YS5tYXRjaCgvKD86TVNJRSB8VHJpZGVudFxcL1swLTldK1tcXC4wLTldKzsuKnJ2OikoWzAtOV0rW1xcLjAtOV0rKS8pfHxbXSlbMV0pXG4gICAgOiBwYXJzZUZsb2F0KCh1YS5tYXRjaCgvKD86VHJpZGVudFxcL1swLTldK1tcXC4wLTldKzsuKnJ2OikoWzAtOV0rW1xcLjAtOV0rKS8pfHxbXSlbMV0pOyAvLyBmb3IgaWVcbiAgICBcbmV4cG9ydHMuaXNPbGRJRSA9IGV4cG9ydHMuaXNJRSAmJiBleHBvcnRzLmlzSUUgPCA5O1xuZXhwb3J0cy5pc0dlY2tvID0gZXhwb3J0cy5pc01vemlsbGEgPSAod2luZG93LkNvbnRyb2xsZXJzIHx8IHdpbmRvdy5jb250cm9sbGVycykgJiYgd2luZG93Lm5hdmlnYXRvci5wcm9kdWN0ID09PSBcIkdlY2tvXCI7XG5leHBvcnRzLmlzT2xkR2Vja28gPSBleHBvcnRzLmlzR2Vja28gJiYgcGFyc2VJbnQoKHVhLm1hdGNoKC9ydjooXFxkKykvKXx8W10pWzFdLCAxMCkgPCA0O1xuZXhwb3J0cy5pc09wZXJhID0gd2luZG93Lm9wZXJhICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3aW5kb3cub3BlcmEpID09IFwiW29iamVjdCBPcGVyYV1cIjtcbmV4cG9ydHMuaXNXZWJLaXQgPSBwYXJzZUZsb2F0KHVhLnNwbGl0KFwiV2ViS2l0L1wiKVsxXSkgfHwgdW5kZWZpbmVkO1xuXG5leHBvcnRzLmlzQ2hyb21lID0gcGFyc2VGbG9hdCh1YS5zcGxpdChcIiBDaHJvbWUvXCIpWzFdKSB8fCB1bmRlZmluZWQ7XG5cbmV4cG9ydHMuaXNBSVIgPSB1YS5pbmRleE9mKFwiQWRvYmVBSVJcIikgPj0gMDtcblxuZXhwb3J0cy5pc0lQYWQgPSB1YS5pbmRleE9mKFwiaVBhZFwiKSA+PSAwO1xuXG5leHBvcnRzLmlzQ2hyb21lT1MgPSB1YS5pbmRleE9mKFwiIENyT1MgXCIpID49IDA7XG5cbmV4cG9ydHMuaXNJT1MgPSAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdCh1YSkgJiYgIXdpbmRvdy5NU1N0cmVhbTtcblxuaWYgKGV4cG9ydHMuaXNJT1MpIGV4cG9ydHMuaXNNYWMgPSB0cnVlO1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9saWIvZXZlbnRcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIva2V5c1wiLFwiYWNlL2xpYi91c2VyYWdlbnRcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG52YXIga2V5cyA9IGFjZXF1aXJlKFwiLi9rZXlzXCIpO1xudmFyIHVzZXJhZ2VudCA9IGFjZXF1aXJlKFwiLi91c2VyYWdlbnRcIik7XG5cbnZhciBwcmVzc2VkS2V5cyA9IG51bGw7XG52YXIgdHMgPSAwO1xuXG5leHBvcnRzLmFkZExpc3RlbmVyID0gZnVuY3Rpb24oZWxlbSwgdHlwZSwgY2FsbGJhY2spIHtcbiAgICBpZiAoZWxlbS5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHJldHVybiBlbGVtLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2ssIGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKGVsZW0uYXR0YWNoRXZlbnQpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoZWxlbSwgd2luZG93LmV2ZW50KTtcbiAgICAgICAgfTtcbiAgICAgICAgY2FsbGJhY2suX3dyYXBwZXIgPSB3cmFwcGVyO1xuICAgICAgICBlbGVtLmF0dGFjaEV2ZW50KFwib25cIiArIHR5cGUsIHdyYXBwZXIpO1xuICAgIH1cbn07XG5cbmV4cG9ydHMucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbihlbGVtLCB0eXBlLCBjYWxsYmFjaykge1xuICAgIGlmIChlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgcmV0dXJuIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgZmFsc2UpO1xuICAgIH1cbiAgICBpZiAoZWxlbS5kZXRhY2hFdmVudCkge1xuICAgICAgICBlbGVtLmRldGFjaEV2ZW50KFwib25cIiArIHR5cGUsIGNhbGxiYWNrLl93cmFwcGVyIHx8IGNhbGxiYWNrKTtcbiAgICB9XG59O1xuZXhwb3J0cy5zdG9wRXZlbnQgPSBmdW5jdGlvbihlKSB7XG4gICAgZXhwb3J0cy5zdG9wUHJvcGFnYXRpb24oZSk7XG4gICAgZXhwb3J0cy5wcmV2ZW50RGVmYXVsdChlKTtcbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnRzLnN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKGUpIHtcbiAgICBpZiAoZS5zdG9wUHJvcGFnYXRpb24pXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZWxzZVxuICAgICAgICBlLmNhbmNlbEJ1YmJsZSA9IHRydWU7XG59O1xuXG5leHBvcnRzLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oZSkge1xuICAgIGlmIChlLnByZXZlbnREZWZhdWx0KVxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgZWxzZVxuICAgICAgICBlLnJldHVyblZhbHVlID0gZmFsc2U7XG59O1xuZXhwb3J0cy5nZXRCdXR0b24gPSBmdW5jdGlvbihlKSB7XG4gICAgaWYgKGUudHlwZSA9PSBcImRibGNsaWNrXCIpXG4gICAgICAgIHJldHVybiAwO1xuICAgIGlmIChlLnR5cGUgPT0gXCJjb250ZXh0bWVudVwiIHx8ICh1c2VyYWdlbnQuaXNNYWMgJiYgKGUuY3RybEtleSAmJiAhZS5hbHRLZXkgJiYgIWUuc2hpZnRLZXkpKSlcbiAgICAgICAgcmV0dXJuIDI7XG4gICAgaWYgKGUucHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgcmV0dXJuIGUuYnV0dG9uO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHsxOjAsIDI6MiwgNDoxfVtlLmJ1dHRvbl07XG4gICAgfVxufTtcblxuZXhwb3J0cy5jYXB0dXJlID0gZnVuY3Rpb24oZWwsIGV2ZW50SGFuZGxlciwgcmVsZWFzZUNhcHR1cmVIYW5kbGVyKSB7XG4gICAgZnVuY3Rpb24gb25Nb3VzZVVwKGUpIHtcbiAgICAgICAgZXZlbnRIYW5kbGVyICYmIGV2ZW50SGFuZGxlcihlKTtcbiAgICAgICAgcmVsZWFzZUNhcHR1cmVIYW5kbGVyICYmIHJlbGVhc2VDYXB0dXJlSGFuZGxlcihlKTtcblxuICAgICAgICBleHBvcnRzLnJlbW92ZUxpc3RlbmVyKGRvY3VtZW50LCBcIm1vdXNlbW92ZVwiLCBldmVudEhhbmRsZXIsIHRydWUpO1xuICAgICAgICBleHBvcnRzLnJlbW92ZUxpc3RlbmVyKGRvY3VtZW50LCBcIm1vdXNldXBcIiwgb25Nb3VzZVVwLCB0cnVlKTtcbiAgICAgICAgZXhwb3J0cy5yZW1vdmVMaXN0ZW5lcihkb2N1bWVudCwgXCJkcmFnc3RhcnRcIiwgb25Nb3VzZVVwLCB0cnVlKTtcbiAgICB9XG5cbiAgICBleHBvcnRzLmFkZExpc3RlbmVyKGRvY3VtZW50LCBcIm1vdXNlbW92ZVwiLCBldmVudEhhbmRsZXIsIHRydWUpO1xuICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZG9jdW1lbnQsIFwibW91c2V1cFwiLCBvbk1vdXNlVXAsIHRydWUpO1xuICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZG9jdW1lbnQsIFwiZHJhZ3N0YXJ0XCIsIG9uTW91c2VVcCwgdHJ1ZSk7XG4gICAgXG4gICAgcmV0dXJuIG9uTW91c2VVcDtcbn07XG5cbmV4cG9ydHMuYWRkVG91Y2hNb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiAoZWwsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHN0YXJ0eCwgc3RhcnR5O1xuICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZWwsIFwidG91Y2hzdGFydFwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgdG91Y2hlcyA9IGUudG91Y2hlcztcbiAgICAgICAgdmFyIHRvdWNoT2JqID0gdG91Y2hlc1swXTtcbiAgICAgICAgc3RhcnR4ID0gdG91Y2hPYmouY2xpZW50WDtcbiAgICAgICAgc3RhcnR5ID0gdG91Y2hPYmouY2xpZW50WTtcbiAgICB9KTtcbiAgICBleHBvcnRzLmFkZExpc3RlbmVyKGVsLCBcInRvdWNobW92ZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgdG91Y2hlcyA9IGUudG91Y2hlcztcbiAgICAgICAgaWYgKHRvdWNoZXMubGVuZ3RoID4gMSkgcmV0dXJuO1xuXG4gICAgICAgIHZhciB0b3VjaE9iaiA9IHRvdWNoZXNbMF07XG5cbiAgICAgICAgZS53aGVlbFggPSBzdGFydHggLSB0b3VjaE9iai5jbGllbnRYO1xuICAgICAgICBlLndoZWVsWSA9IHN0YXJ0eSAtIHRvdWNoT2JqLmNsaWVudFk7XG5cbiAgICAgICAgc3RhcnR4ID0gdG91Y2hPYmouY2xpZW50WDtcbiAgICAgICAgc3RhcnR5ID0gdG91Y2hPYmouY2xpZW50WTtcblxuICAgICAgICBjYWxsYmFjayhlKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydHMuYWRkTW91c2VXaGVlbExpc3RlbmVyID0gZnVuY3Rpb24oZWwsIGNhbGxiYWNrKSB7XG4gICAgaWYgKFwib25tb3VzZXdoZWVsXCIgaW4gZWwpIHtcbiAgICAgICAgZXhwb3J0cy5hZGRMaXN0ZW5lcihlbCwgXCJtb3VzZXdoZWVsXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHZhciBmYWN0b3IgPSA4O1xuICAgICAgICAgICAgaWYgKGUud2hlZWxEZWx0YVggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGUud2hlZWxYID0gLWUud2hlZWxEZWx0YVggLyBmYWN0b3I7XG4gICAgICAgICAgICAgICAgZS53aGVlbFkgPSAtZS53aGVlbERlbHRhWSAvIGZhY3RvcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZS53aGVlbFggPSAwO1xuICAgICAgICAgICAgICAgIGUud2hlZWxZID0gLWUud2hlZWxEZWx0YSAvIGZhY3RvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKGUpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKFwib253aGVlbFwiIGluIGVsKSB7XG4gICAgICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZWwsIFwid2hlZWxcIiwgIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHZhciBmYWN0b3IgPSAwLjM1O1xuICAgICAgICAgICAgc3dpdGNoIChlLmRlbHRhTW9kZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgZS5ET01fREVMVEFfUElYRUw6XG4gICAgICAgICAgICAgICAgICAgIGUud2hlZWxYID0gZS5kZWx0YVggKiBmYWN0b3IgfHwgMDtcbiAgICAgICAgICAgICAgICAgICAgZS53aGVlbFkgPSBlLmRlbHRhWSAqIGZhY3RvciB8fCAwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIGUuRE9NX0RFTFRBX0xJTkU6XG4gICAgICAgICAgICAgICAgY2FzZSBlLkRPTV9ERUxUQV9QQUdFOlxuICAgICAgICAgICAgICAgICAgICBlLndoZWVsWCA9IChlLmRlbHRhWCB8fCAwKSAqIDU7XG4gICAgICAgICAgICAgICAgICAgIGUud2hlZWxZID0gKGUuZGVsdGFZIHx8IDApICogNTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNhbGxiYWNrKGUpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBleHBvcnRzLmFkZExpc3RlbmVyKGVsLCBcIkRPTU1vdXNlU2Nyb2xsXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChlLmF4aXMgJiYgZS5heGlzID09IGUuSE9SSVpPTlRBTF9BWElTKSB7XG4gICAgICAgICAgICAgICAgZS53aGVlbFggPSAoZS5kZXRhaWwgfHwgMCkgKiA1O1xuICAgICAgICAgICAgICAgIGUud2hlZWxZID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZS53aGVlbFggPSAwO1xuICAgICAgICAgICAgICAgIGUud2hlZWxZID0gKGUuZGV0YWlsIHx8IDApICogNTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKGUpO1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5leHBvcnRzLmFkZE11bHRpTW91c2VEb3duTGlzdGVuZXIgPSBmdW5jdGlvbihlbGVtZW50cywgdGltZW91dHMsIGV2ZW50SGFuZGxlciwgY2FsbGJhY2tOYW1lKSB7XG4gICAgdmFyIGNsaWNrcyA9IDA7XG4gICAgdmFyIHN0YXJ0WCwgc3RhcnRZLCB0aW1lcjsgXG4gICAgdmFyIGV2ZW50TmFtZXMgPSB7XG4gICAgICAgIDI6IFwiZGJsY2xpY2tcIixcbiAgICAgICAgMzogXCJ0cmlwbGVjbGlja1wiLFxuICAgICAgICA0OiBcInF1YWRjbGlja1wiXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9uTW91c2Vkb3duKGUpIHtcbiAgICAgICAgaWYgKGV4cG9ydHMuZ2V0QnV0dG9uKGUpICE9PSAwKSB7XG4gICAgICAgICAgICBjbGlja3MgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGUuZGV0YWlsID4gMSkge1xuICAgICAgICAgICAgY2xpY2tzKys7XG4gICAgICAgICAgICBpZiAoY2xpY2tzID4gNClcbiAgICAgICAgICAgICAgICBjbGlja3MgPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xpY2tzID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXNlcmFnZW50LmlzSUUpIHtcbiAgICAgICAgICAgIHZhciBpc05ld0NsaWNrID0gTWF0aC5hYnMoZS5jbGllbnRYIC0gc3RhcnRYKSA+IDUgfHwgTWF0aC5hYnMoZS5jbGllbnRZIC0gc3RhcnRZKSA+IDU7XG4gICAgICAgICAgICBpZiAoIXRpbWVyIHx8IGlzTmV3Q2xpY2spXG4gICAgICAgICAgICAgICAgY2xpY2tzID0gMTtcbiAgICAgICAgICAgIGlmICh0aW1lcilcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3RpbWVyID0gbnVsbDt9LCB0aW1lb3V0c1tjbGlja3MgLSAxXSB8fCA2MDApO1xuXG4gICAgICAgICAgICBpZiAoY2xpY2tzID09IDEpIHtcbiAgICAgICAgICAgICAgICBzdGFydFggPSBlLmNsaWVudFg7XG4gICAgICAgICAgICAgICAgc3RhcnRZID0gZS5jbGllbnRZO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBlLl9jbGlja3MgPSBjbGlja3M7XG5cbiAgICAgICAgZXZlbnRIYW5kbGVyW2NhbGxiYWNrTmFtZV0oXCJtb3VzZWRvd25cIiwgZSk7XG5cbiAgICAgICAgaWYgKGNsaWNrcyA+IDQpXG4gICAgICAgICAgICBjbGlja3MgPSAwO1xuICAgICAgICBlbHNlIGlmIChjbGlja3MgPiAxKVxuICAgICAgICAgICAgcmV0dXJuIGV2ZW50SGFuZGxlcltjYWxsYmFja05hbWVdKGV2ZW50TmFtZXNbY2xpY2tzXSwgZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9uRGJsY2xpY2soZSkge1xuICAgICAgICBjbGlja3MgPSAyO1xuICAgICAgICBpZiAodGltZXIpXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7dGltZXIgPSBudWxsO30sIHRpbWVvdXRzW2NsaWNrcyAtIDFdIHx8IDYwMCk7XG4gICAgICAgIGV2ZW50SGFuZGxlcltjYWxsYmFja05hbWVdKFwibW91c2Vkb3duXCIsIGUpO1xuICAgICAgICBldmVudEhhbmRsZXJbY2FsbGJhY2tOYW1lXShldmVudE5hbWVzW2NsaWNrc10sIGUpO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZWxlbWVudHMpKVxuICAgICAgICBlbGVtZW50cyA9IFtlbGVtZW50c107XG4gICAgZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbCkge1xuICAgICAgICBleHBvcnRzLmFkZExpc3RlbmVyKGVsLCBcIm1vdXNlZG93blwiLCBvbk1vdXNlZG93bik7XG4gICAgICAgIGlmICh1c2VyYWdlbnQuaXNPbGRJRSlcbiAgICAgICAgICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZWwsIFwiZGJsY2xpY2tcIiwgb25EYmxjbGljayk7XG4gICAgfSk7XG59O1xuXG52YXIgZ2V0TW9kaWZpZXJIYXNoID0gdXNlcmFnZW50LmlzTWFjICYmIHVzZXJhZ2VudC5pc09wZXJhICYmICEoXCJLZXlib2FyZEV2ZW50XCIgaW4gd2luZG93KVxuICAgID8gZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gMCB8IChlLm1ldGFLZXkgPyAxIDogMCkgfCAoZS5hbHRLZXkgPyAyIDogMCkgfCAoZS5zaGlmdEtleSA/IDQgOiAwKSB8IChlLmN0cmxLZXkgPyA4IDogMCk7XG4gICAgfVxuICAgIDogZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gMCB8IChlLmN0cmxLZXkgPyAxIDogMCkgfCAoZS5hbHRLZXkgPyAyIDogMCkgfCAoZS5zaGlmdEtleSA/IDQgOiAwKSB8IChlLm1ldGFLZXkgPyA4IDogMCk7XG4gICAgfTtcblxuZXhwb3J0cy5nZXRNb2RpZmllclN0cmluZyA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4ga2V5cy5LRVlfTU9EU1tnZXRNb2RpZmllckhhc2goZSldO1xufTtcblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tbWFuZEtleXMoY2FsbGJhY2ssIGUsIGtleUNvZGUpIHtcbiAgICB2YXIgaGFzaElkID0gZ2V0TW9kaWZpZXJIYXNoKGUpO1xuXG4gICAgaWYgKCF1c2VyYWdlbnQuaXNNYWMgJiYgcHJlc3NlZEtleXMpIHtcbiAgICAgICAgaWYgKGUuZ2V0TW9kaWZpZXJTdGF0ZSAmJiAoZS5nZXRNb2RpZmllclN0YXRlKFwiT1NcIikgfHwgZS5nZXRNb2RpZmllclN0YXRlKFwiV2luXCIpKSlcbiAgICAgICAgICAgIGhhc2hJZCB8PSA4O1xuICAgICAgICBpZiAocHJlc3NlZEtleXMuYWx0R3IpIHtcbiAgICAgICAgICAgIGlmICgoMyAmIGhhc2hJZCkgIT0gMylcbiAgICAgICAgICAgICAgICBwcmVzc2VkS2V5cy5hbHRHciA9IDA7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXlDb2RlID09PSAxOCB8fCBrZXlDb2RlID09PSAxNykge1xuICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gXCJsb2NhdGlvblwiIGluIGUgPyBlLmxvY2F0aW9uIDogZS5rZXlMb2NhdGlvbjtcbiAgICAgICAgICAgIGlmIChrZXlDb2RlID09PSAxNyAmJiBsb2NhdGlvbiA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChwcmVzc2VkS2V5c1trZXlDb2RlXSA9PSAxKVxuICAgICAgICAgICAgICAgICAgICB0cyA9IGUudGltZVN0YW1wO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChrZXlDb2RlID09PSAxOCAmJiBoYXNoSWQgPT09IDMgJiYgbG9jYXRpb24gPT09IDIpIHtcbiAgICAgICAgICAgICAgICB2YXIgZHQgPSBlLnRpbWVTdGFtcCAtIHRzO1xuICAgICAgICAgICAgICAgIGlmIChkdCA8IDUwKVxuICAgICAgICAgICAgICAgICAgICBwcmVzc2VkS2V5cy5hbHRHciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgaWYgKGtleUNvZGUgaW4ga2V5cy5NT0RJRklFUl9LRVlTKSB7XG4gICAgICAgIGtleUNvZGUgPSAtMTtcbiAgICB9XG4gICAgaWYgKGhhc2hJZCAmIDggJiYgKGtleUNvZGUgPj0gOTEgJiYga2V5Q29kZSA8PSA5MykpIHtcbiAgICAgICAga2V5Q29kZSA9IC0xO1xuICAgIH1cbiAgICBcbiAgICBpZiAoIWhhc2hJZCAmJiBrZXlDb2RlID09PSAxMykge1xuICAgICAgICB2YXIgbG9jYXRpb24gPSBcImxvY2F0aW9uXCIgaW4gZSA/IGUubG9jYXRpb24gOiBlLmtleUxvY2F0aW9uO1xuICAgICAgICBpZiAobG9jYXRpb24gPT09IDMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGUsIGhhc2hJZCwgLWtleUNvZGUpO1xuICAgICAgICAgICAgaWYgKGUuZGVmYXVsdFByZXZlbnRlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgaWYgKHVzZXJhZ2VudC5pc0Nocm9tZU9TICYmIGhhc2hJZCAmIDgpIHtcbiAgICAgICAgY2FsbGJhY2soZSwgaGFzaElkLCBrZXlDb2RlKTtcbiAgICAgICAgaWYgKGUuZGVmYXVsdFByZXZlbnRlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgaGFzaElkICY9IH44O1xuICAgIH1cbiAgICBpZiAoIWhhc2hJZCAmJiAhKGtleUNvZGUgaW4ga2V5cy5GVU5DVElPTl9LRVlTKSAmJiAhKGtleUNvZGUgaW4ga2V5cy5QUklOVEFCTEVfS0VZUykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gY2FsbGJhY2soZSwgaGFzaElkLCBrZXlDb2RlKTtcbn1cblxuXG5leHBvcnRzLmFkZENvbW1hbmRLZXlMaXN0ZW5lciA9IGZ1bmN0aW9uKGVsLCBjYWxsYmFjaykge1xuICAgIHZhciBhZGRMaXN0ZW5lciA9IGV4cG9ydHMuYWRkTGlzdGVuZXI7XG4gICAgaWYgKHVzZXJhZ2VudC5pc09sZEdlY2tvIHx8ICh1c2VyYWdlbnQuaXNPcGVyYSAmJiAhKFwiS2V5Ym9hcmRFdmVudFwiIGluIHdpbmRvdykpKSB7XG4gICAgICAgIHZhciBsYXN0S2V5RG93bktleUNvZGUgPSBudWxsO1xuICAgICAgICBhZGRMaXN0ZW5lcihlbCwgXCJrZXlkb3duXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGxhc3RLZXlEb3duS2V5Q29kZSA9IGUua2V5Q29kZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFkZExpc3RlbmVyKGVsLCBcImtleXByZXNzXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVDb21tYW5kS2V5cyhjYWxsYmFjaywgZSwgbGFzdEtleURvd25LZXlDb2RlKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGxhc3REZWZhdWx0UHJldmVudGVkID0gbnVsbDtcblxuICAgICAgICBhZGRMaXN0ZW5lcihlbCwgXCJrZXlkb3duXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHByZXNzZWRLZXlzW2Uua2V5Q29kZV0gPSAocHJlc3NlZEtleXNbZS5rZXlDb2RlXSB8fCAwKSArIDE7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gbm9ybWFsaXplQ29tbWFuZEtleXMoY2FsbGJhY2ssIGUsIGUua2V5Q29kZSk7XG4gICAgICAgICAgICBsYXN0RGVmYXVsdFByZXZlbnRlZCA9IGUuZGVmYXVsdFByZXZlbnRlZDtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFkZExpc3RlbmVyKGVsLCBcImtleXByZXNzXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChsYXN0RGVmYXVsdFByZXZlbnRlZCAmJiAoZS5jdHJsS2V5IHx8IGUuYWx0S2V5IHx8IGUuc2hpZnRLZXkgfHwgZS5tZXRhS2V5KSkge1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuc3RvcEV2ZW50KGUpO1xuICAgICAgICAgICAgICAgIGxhc3REZWZhdWx0UHJldmVudGVkID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZWwsIFwia2V5dXBcIiwgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcHJlc3NlZEtleXNbZS5rZXlDb2RlXSA9IG51bGw7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghcHJlc3NlZEtleXMpIHtcbiAgICAgICAgICAgIHJlc2V0UHJlc3NlZEtleXMoKTtcbiAgICAgICAgICAgIGFkZExpc3RlbmVyKHdpbmRvdywgXCJmb2N1c1wiLCByZXNldFByZXNzZWRLZXlzKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5mdW5jdGlvbiByZXNldFByZXNzZWRLZXlzKCkge1xuICAgIHByZXNzZWRLZXlzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbn1cblxuaWYgKHR5cGVvZiB3aW5kb3cgPT0gXCJvYmplY3RcIiAmJiB3aW5kb3cucG9zdE1lc3NhZ2UgJiYgIXVzZXJhZ2VudC5pc09sZElFKSB7XG4gICAgdmFyIHBvc3RNZXNzYWdlSWQgPSAxO1xuICAgIGV4cG9ydHMubmV4dFRpY2sgPSBmdW5jdGlvbihjYWxsYmFjaywgd2luKSB7XG4gICAgICAgIHdpbiA9IHdpbiB8fCB3aW5kb3c7XG4gICAgICAgIHZhciBtZXNzYWdlTmFtZSA9IFwiemVyby10aW1lb3V0LW1lc3NhZ2UtXCIgKyBwb3N0TWVzc2FnZUlkO1xuICAgICAgICBleHBvcnRzLmFkZExpc3RlbmVyKHdpbiwgXCJtZXNzYWdlXCIsIGZ1bmN0aW9uIGxpc3RlbmVyKGUpIHtcbiAgICAgICAgICAgIGlmIChlLmRhdGEgPT0gbWVzc2FnZU5hbWUpIHtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnN0b3BQcm9wYWdhdGlvbihlKTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnJlbW92ZUxpc3RlbmVyKHdpbiwgXCJtZXNzYWdlXCIsIGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgd2luLnBvc3RNZXNzYWdlKG1lc3NhZ2VOYW1lLCBcIipcIik7XG4gICAgfTtcbn1cblxuXG5leHBvcnRzLm5leHRGcmFtZSA9IHR5cGVvZiB3aW5kb3cgPT0gXCJvYmplY3RcIiAmJiAod2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgIHx8IHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAgICB8fCB3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgfHwgd2luZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgfHwgd2luZG93Lm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUpO1xuXG5pZiAoZXhwb3J0cy5uZXh0RnJhbWUpXG4gICAgZXhwb3J0cy5uZXh0RnJhbWUgPSBleHBvcnRzLm5leHRGcmFtZS5iaW5kKHdpbmRvdyk7XG5lbHNlXG4gICAgZXhwb3J0cy5uZXh0RnJhbWUgPSBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICBzZXRUaW1lb3V0KGNhbGxiYWNrLCAxNyk7XG4gICAgfTtcbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL2xpYi9sYW5nXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5sYXN0ID0gZnVuY3Rpb24oYSkge1xuICAgIHJldHVybiBhW2EubGVuZ3RoIC0gMV07XG59O1xuXG5leHBvcnRzLnN0cmluZ1JldmVyc2UgPSBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLnNwbGl0KFwiXCIpLnJldmVyc2UoKS5qb2luKFwiXCIpO1xufTtcblxuZXhwb3J0cy5zdHJpbmdSZXBlYXQgPSBmdW5jdGlvbiAoc3RyaW5nLCBjb3VudCkge1xuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB3aGlsZSAoY291bnQgPiAwKSB7XG4gICAgICAgIGlmIChjb3VudCAmIDEpXG4gICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5nO1xuXG4gICAgICAgIGlmIChjb3VudCA+Pj0gMSlcbiAgICAgICAgICAgIHN0cmluZyArPSBzdHJpbmc7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgdHJpbUJlZ2luUmVnZXhwID0gL15cXHNcXHMqLztcbnZhciB0cmltRW5kUmVnZXhwID0gL1xcc1xccyokLztcblxuZXhwb3J0cy5zdHJpbmdUcmltTGVmdCA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCAnJyk7XG59O1xuXG5leHBvcnRzLnN0cmluZ1RyaW1SaWdodCA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UodHJpbUVuZFJlZ2V4cCwgJycpO1xufTtcblxuZXhwb3J0cy5jb3B5T2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGNvcHkgPSB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICAgIGNvcHlba2V5XSA9IG9ialtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gY29weTtcbn07XG5cbmV4cG9ydHMuY29weUFycmF5ID0gZnVuY3Rpb24oYXJyYXkpe1xuICAgIHZhciBjb3B5ID0gW107XG4gICAgZm9yICh2YXIgaT0wLCBsPWFycmF5Lmxlbmd0aDsgaTxsOyBpKyspIHtcbiAgICAgICAgaWYgKGFycmF5W2ldICYmIHR5cGVvZiBhcnJheVtpXSA9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgY29weVtpXSA9IHRoaXMuY29weU9iamVjdChhcnJheVtpXSk7XG4gICAgICAgIGVsc2UgXG4gICAgICAgICAgICBjb3B5W2ldID0gYXJyYXlbaV07XG4gICAgfVxuICAgIHJldHVybiBjb3B5O1xufTtcblxuZXhwb3J0cy5kZWVwQ29weSA9IGZ1bmN0aW9uIGRlZXBDb3B5KG9iaikge1xuICAgIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8ICFvYmopXG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgdmFyIGNvcHk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICBjb3B5ID0gW107XG4gICAgICAgIGZvciAodmFyIGtleSA9IDA7IGtleSA8IG9iai5sZW5ndGg7IGtleSsrKSB7XG4gICAgICAgICAgICBjb3B5W2tleV0gPSBkZWVwQ29weShvYmpba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIilcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICBcbiAgICBjb3B5ID0ge307XG4gICAgZm9yICh2YXIga2V5IGluIG9iailcbiAgICAgICAgY29weVtrZXldID0gZGVlcENvcHkob2JqW2tleV0pO1xuICAgIHJldHVybiBjb3B5O1xufTtcblxuZXhwb3J0cy5hcnJheVRvTWFwID0gZnVuY3Rpb24oYXJyKSB7XG4gICAgdmFyIG1hcCA9IHt9O1xuICAgIGZvciAodmFyIGk9MDsgaTxhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbWFwW2FycltpXV0gPSAxO1xuICAgIH1cbiAgICByZXR1cm4gbWFwO1xuXG59O1xuXG5leHBvcnRzLmNyZWF0ZU1hcCA9IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgdmFyIG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgZm9yICh2YXIgaSBpbiBwcm9wcykge1xuICAgICAgICBtYXBbaV0gPSBwcm9wc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcDtcbn07XG5leHBvcnRzLmFycmF5UmVtb3ZlID0gZnVuY3Rpb24oYXJyYXksIHZhbHVlKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDw9IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHZhbHVlID09PSBhcnJheVtpXSkge1xuICAgICAgYXJyYXkuc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0cy5lc2NhcGVSZWdFeHAgPSBmdW5jdGlvbihzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbLiorP14ke30oKXxbXFxdXFwvXFxcXF0pL2csICdcXFxcJDEnKTtcbn07XG5cbmV4cG9ydHMuZXNjYXBlSFRNTCA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvJi9nLCBcIiYjMzg7XCIpLnJlcGxhY2UoL1wiL2csIFwiJiMzNDtcIikucmVwbGFjZSgvJy9nLCBcIiYjMzk7XCIpLnJlcGxhY2UoLzwvZywgXCImIzYwO1wiKTtcbn07XG5cbmV4cG9ydHMuZ2V0TWF0Y2hPZmZzZXRzID0gZnVuY3Rpb24oc3RyaW5nLCByZWdFeHApIHtcbiAgICB2YXIgbWF0Y2hlcyA9IFtdO1xuXG4gICAgc3RyaW5nLnJlcGxhY2UocmVnRXhwLCBmdW5jdGlvbihzdHIpIHtcbiAgICAgICAgbWF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICAgIG9mZnNldDogYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMl0sXG4gICAgICAgICAgICBsZW5ndGg6IHN0ci5sZW5ndGhcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbn07XG5leHBvcnRzLmRlZmVycmVkQ2FsbCA9IGZ1bmN0aW9uKGZjbikge1xuICAgIHZhciB0aW1lciA9IG51bGw7XG4gICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgZmNuKCk7XG4gICAgfTtcblxuICAgIHZhciBkZWZlcnJlZCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHtcbiAgICAgICAgZGVmZXJyZWQuY2FuY2VsKCk7XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dChjYWxsYmFjaywgdGltZW91dCB8fCAwKTtcbiAgICAgICAgcmV0dXJuIGRlZmVycmVkO1xuICAgIH07XG5cbiAgICBkZWZlcnJlZC5zY2hlZHVsZSA9IGRlZmVycmVkO1xuXG4gICAgZGVmZXJyZWQuY2FsbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgICBmY24oKTtcbiAgICAgICAgcmV0dXJuIGRlZmVycmVkO1xuICAgIH07XG5cbiAgICBkZWZlcnJlZC5jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICByZXR1cm4gZGVmZXJyZWQ7XG4gICAgfTtcbiAgICBcbiAgICBkZWZlcnJlZC5pc1BlbmRpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRpbWVyO1xuICAgIH07XG5cbiAgICByZXR1cm4gZGVmZXJyZWQ7XG59O1xuXG5cbmV4cG9ydHMuZGVsYXllZENhbGwgPSBmdW5jdGlvbihmY24sIGRlZmF1bHRUaW1lb3V0KSB7XG4gICAgdmFyIHRpbWVyID0gbnVsbDtcbiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICBmY24oKTtcbiAgICB9O1xuXG4gICAgdmFyIF9zZWxmID0gZnVuY3Rpb24odGltZW91dCkge1xuICAgICAgICBpZiAodGltZXIgPT0gbnVsbClcbiAgICAgICAgICAgIHRpbWVyID0gc2V0VGltZW91dChjYWxsYmFjaywgdGltZW91dCB8fCBkZWZhdWx0VGltZW91dCk7XG4gICAgfTtcblxuICAgIF9zZWxmLmRlbGF5ID0gZnVuY3Rpb24odGltZW91dCkge1xuICAgICAgICB0aW1lciAmJiBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgZGVmYXVsdFRpbWVvdXQpO1xuICAgIH07XG4gICAgX3NlbGYuc2NoZWR1bGUgPSBfc2VsZjtcblxuICAgIF9zZWxmLmNhbGwgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5jYW5jZWwoKTtcbiAgICAgICAgZmNuKCk7XG4gICAgfTtcblxuICAgIF9zZWxmLmNhbmNlbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aW1lciAmJiBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgfTtcblxuICAgIF9zZWxmLmlzUGVuZGluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGltZXI7XG4gICAgfTtcblxuICAgIHJldHVybiBfc2VsZjtcbn07XG59KTtcblxuYWNlLmRlZmluZShcImFjZS9rZXlib2FyZC90ZXh0aW5wdXRfaW9zXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL2V2ZW50XCIsXCJhY2UvbGliL3VzZXJhZ2VudFwiLFwiYWNlL2xpYi9kb21cIixcImFjZS9saWIvbGFuZ1wiLFwiYWNlL2xpYi9rZXlzXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGV2ZW50ID0gYWNlcXVpcmUoXCIuLi9saWIvZXZlbnRcIik7XG52YXIgdXNlcmFnZW50ID0gYWNlcXVpcmUoXCIuLi9saWIvdXNlcmFnZW50XCIpO1xudmFyIGRvbSA9IGFjZXF1aXJlKFwiLi4vbGliL2RvbVwiKTtcbnZhciBsYW5nID0gYWNlcXVpcmUoXCIuLi9saWIvbGFuZ1wiKTtcbnZhciBLRVlTID0gYWNlcXVpcmUoXCIuLi9saWIva2V5c1wiKTtcbnZhciBNT0RTID0gS0VZUy5LRVlfTU9EUztcbnZhciBCUk9LRU5fU0VUREFUQSA9IHVzZXJhZ2VudC5pc0Nocm9tZSA8IDE4O1xudmFyIFVTRV9JRV9NSU1FX1RZUEUgPSAgdXNlcmFnZW50LmlzSUU7XG5cbnZhciBUZXh0SW5wdXQgPSBmdW5jdGlvbihwYXJlbnROb2RlLCBob3N0KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciB0ZXh0ID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKTtcbiAgICB0ZXh0LmNsYXNzTmFtZSA9IHVzZXJhZ2VudC5pc0lPUyA/IFwiYWNlX3RleHQtaW5wdXQgYWNlX3RleHQtaW5wdXQtaW9zXCIgOiBcImFjZV90ZXh0LWlucHV0XCI7XG5cbiAgICBpZiAodXNlcmFnZW50LmlzVG91Y2hQYWQpXG4gICAgICAgIHRleHQuc2V0QXR0cmlidXRlKFwieC1wYWxtLWRpc2FibGUtYXV0by1jYXBcIiwgdHJ1ZSk7XG5cbiAgICB0ZXh0LnNldEF0dHJpYnV0ZShcIndyYXBcIiwgXCJvZmZcIik7XG4gICAgdGV4dC5zZXRBdHRyaWJ1dGUoXCJhdXRvY29ycmVjdFwiLCBcIm9mZlwiKTtcbiAgICB0ZXh0LnNldEF0dHJpYnV0ZShcImF1dG9jYXBpdGFsaXplXCIsIFwib2ZmXCIpO1xuICAgIHRleHQuc2V0QXR0cmlidXRlKFwic3BlbGxjaGVja1wiLCBmYWxzZSk7XG5cbiAgICB0ZXh0LnN0eWxlLm9wYWNpdHkgPSBcIjBcIjtcbiAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZSh0ZXh0LCBwYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xuXG4gICAgdmFyIFBMQUNFSE9MREVSID0gXCJcXG4gYWFhYSBhXFxuXCI7XG5cbiAgICB2YXIgY29waWVkID0gZmFsc2U7XG4gICAgdmFyIGN1dCA9IGZhbHNlO1xuICAgIHZhciBwYXN0ZWQgPSBmYWxzZTtcbiAgICB2YXIgaW5Db21wb3NpdGlvbiA9IGZhbHNlO1xuICAgIHZhciB0ZW1wU3R5bGUgPSAnJztcbiAgICB2YXIgaXNTZWxlY3Rpb25FbXB0eSA9IHRydWU7XG4gICAgdHJ5IHsgdmFyIGlzRm9jdXNlZCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRleHQ7IH0gY2F0Y2goZSkge31cblxuICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsIFwiYmx1clwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIGhvc3Qub25CbHVyKGUpO1xuICAgICAgICBpc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICB9KTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCBcImZvY3VzXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgaG9zdC5vbkZvY3VzKGUpO1xuICAgICAgICByZXNldFNlbGVjdGlvbigpO1xuICAgIH0pO1xuICAgIHRoaXMuZm9jdXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRlbXBTdHlsZSkgcmV0dXJuIHRleHQuZm9jdXMoKTtcbiAgICAgICAgdGV4dC5zdHlsZS5wb3NpdGlvbiA9IFwiZml4ZWRcIjtcbiAgICAgICAgdGV4dC5mb2N1cygpO1xuICAgIH07XG4gICAgdGhpcy5ibHVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRleHQuYmx1cigpO1xuICAgIH07XG4gICAgdGhpcy5pc0ZvY3VzZWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzRm9jdXNlZDtcbiAgICB9O1xuICAgIHZhciBzeW5jU2VsZWN0aW9uID0gbGFuZy5kZWxheWVkQ2FsbChmdW5jdGlvbigpIHtcbiAgICAgICAgaXNGb2N1c2VkICYmIHJlc2V0U2VsZWN0aW9uKGlzU2VsZWN0aW9uRW1wdHkpO1xuICAgIH0pO1xuICAgIHZhciBzeW5jVmFsdWUgPSBsYW5nLmRlbGF5ZWRDYWxsKGZ1bmN0aW9uKCkge1xuICAgICAgICAgaWYgKCFpbkNvbXBvc2l0aW9uKSB7XG4gICAgICAgICAgICB0ZXh0LnZhbHVlID0gUExBQ0VIT0xERVI7XG4gICAgICAgICAgICBpc0ZvY3VzZWQgJiYgcmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIHJlc2V0U2VsZWN0aW9uKGlzRW1wdHkpIHtcbiAgICAgICAgaWYgKGluQ29tcG9zaXRpb24pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGluQ29tcG9zaXRpb24gPSB0cnVlO1xuXG4gICAgICAgIGlmIChpbnB1dEhhbmRsZXIpIHtcbiAgICAgICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gMDtcbiAgICAgICAgICAgIHNlbGVjdGlvbkVuZCA9IGlzRW1wdHkgPyAwIDogdGV4dC52YWx1ZS5sZW5ndGggLSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHNlbGVjdGlvblN0YXJ0ID0gNDtcbiAgICAgICAgICAgIHZhciBzZWxlY3Rpb25FbmQgPSA1O1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0ZXh0LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpO1xuICAgICAgICB9IGNhdGNoKGUpIHt9XG5cbiAgICAgICAgaW5Db21wb3NpdGlvbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc2V0VmFsdWUoKSB7XG4gICAgICAgIGlmIChpbkNvbXBvc2l0aW9uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0ZXh0LnZhbHVlID0gUExBQ0VIT0xERVI7XG4gICAgICAgIGlmICh1c2VyYWdlbnQuaXNXZWJLaXQpXG4gICAgICAgICAgICBzeW5jVmFsdWUuc2NoZWR1bGUoKTtcbiAgICB9XG5cbiAgICB1c2VyYWdlbnQuaXNXZWJLaXQgfHwgaG9zdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2VTZWxlY3Rpb24nLCBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKGhvc3Quc2VsZWN0aW9uLmlzRW1wdHkoKSAhPSBpc1NlbGVjdGlvbkVtcHR5KSB7XG4gICAgICAgICAgICBpc1NlbGVjdGlvbkVtcHR5ID0gIWlzU2VsZWN0aW9uRW1wdHk7XG4gICAgICAgICAgICBzeW5jU2VsZWN0aW9uLnNjaGVkdWxlKCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJlc2V0VmFsdWUoKTtcbiAgICBpZiAoaXNGb2N1c2VkKVxuICAgICAgICBob3N0Lm9uRm9jdXMoKTtcblxuXG4gICAgdmFyIGlzQWxsU2VsZWN0ZWQgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICAgIHJldHVybiB0ZXh0LnNlbGVjdGlvblN0YXJ0ID09PSAwICYmIHRleHQuc2VsZWN0aW9uRW5kID09PSB0ZXh0LnZhbHVlLmxlbmd0aDtcbiAgICB9O1xuXG4gICAgdmFyIG9uU2VsZWN0ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICBpZiAoaXNBbGxTZWxlY3RlZCh0ZXh0KSkge1xuICAgICAgICAgICAgaG9zdC5zZWxlY3RBbGwoKTtcbiAgICAgICAgICAgIHJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXRIYW5kbGVyKSB7XG4gICAgICAgICAgICByZXNldFNlbGVjdGlvbihob3N0LnNlbGVjdGlvbi5pc0VtcHR5KCkpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBpbnB1dEhhbmRsZXIgPSBudWxsO1xuICAgIHRoaXMuc2V0SW5wdXRIYW5kbGVyID0gZnVuY3Rpb24oY2IpIHtpbnB1dEhhbmRsZXIgPSBjYjt9O1xuICAgIHRoaXMuZ2V0SW5wdXRIYW5kbGVyID0gZnVuY3Rpb24oKSB7cmV0dXJuIGlucHV0SGFuZGxlcjt9O1xuICAgIHZhciBhZnRlckNvbnRleHRNZW51ID0gZmFsc2U7XG5cbiAgICB2YXIgc2VuZFRleHQgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgIGlmICh0ZXh0LnNlbGVjdGlvblN0YXJ0ID09PSA0ICYmIHRleHQuc2VsZWN0aW9uRW5kID09PSA1KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dEhhbmRsZXIpIHtcbiAgICAgICAgICAgIGRhdGEgPSBpbnB1dEhhbmRsZXIoZGF0YSk7XG4gICAgICAgICAgICBpbnB1dEhhbmRsZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXN0ZWQpIHtcbiAgICAgICAgICAgIHJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICBpZiAoZGF0YSlcbiAgICAgICAgICAgICAgICBob3N0Lm9uUGFzdGUoZGF0YSk7XG4gICAgICAgICAgICBwYXN0ZWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhID09IFBMQUNFSE9MREVSLnN1YnN0cigwKSAmJiB0ZXh0LnNlbGVjdGlvblN0YXJ0ID09PSA0KSB7XG4gICAgICAgICAgICBpZiAoYWZ0ZXJDb250ZXh0TWVudSlcbiAgICAgICAgICAgICAgICBob3N0LmV4ZWNDb21tYW5kKFwiZGVsXCIsIHtzb3VyY2U6IFwiYWNlXCJ9KTtcbiAgICAgICAgICAgIGVsc2UgLy8gc29tZSB2ZXJzaW9ucyBvZiBhbmRyb2lkIGRvIG5vdCBmaXJlIGtleWRvd24gd2hlbiBwcmVzc2luZyBiYWNrc3BhY2VcbiAgICAgICAgICAgICAgICBob3N0LmV4ZWNDb21tYW5kKFwiYmFja3NwYWNlXCIsIHtzb3VyY2U6IFwiYWNlXCJ9KTtcbiAgICAgICAgfSBlbHNlIGlmICghY29waWVkKSB7XG4gICAgICAgICAgICBpZiAoZGF0YS5zdWJzdHJpbmcoMCwgOSkgPT0gUExBQ0VIT0xERVIgJiYgZGF0YS5sZW5ndGggPiBQTEFDRUhPTERFUi5sZW5ndGgpXG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuc3Vic3RyKDkpO1xuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS5zdWJzdHIoMCwgNCkgPT0gUExBQ0VIT0xERVIuc3Vic3RyKDAsIDQpKVxuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLnN1YnN0cig0LCBkYXRhLmxlbmd0aCAtIFBMQUNFSE9MREVSLmxlbmd0aCArIDEpO1xuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS5jaGFyQXQoZGF0YS5sZW5ndGggLSAxKSA9PSBQTEFDRUhPTERFUi5jaGFyQXQoMCkpXG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuc2xpY2UoMCwgLTEpO1xuICAgICAgICAgICAgaWYgKGRhdGEgPT0gUExBQ0VIT0xERVIuY2hhckF0KDApKSB7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEuY2hhckF0KGRhdGEubGVuZ3RoIC0gMSkgPT0gUExBQ0VIT0xERVIuY2hhckF0KDApKVxuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLnNsaWNlKDAsIC0xKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEpXG4gICAgICAgICAgICAgICAgaG9zdC5vblRleHRJbnB1dChkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29waWVkKSB7XG4gICAgICAgICAgY29waWVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFmdGVyQ29udGV4dE1lbnUpXG4gICAgICAgICAgICBhZnRlckNvbnRleHRNZW51ID0gZmFsc2U7XG4gICAgfTtcbiAgICB2YXIgb25JbnB1dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaWYgKGluQ29tcG9zaXRpb24pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBkYXRhID0gdGV4dC52YWx1ZTtcbiAgICAgICAgc2VuZFRleHQoZGF0YSk7XG4gICAgICAgIHJlc2V0VmFsdWUoKTtcbiAgICB9O1xuXG4gICAgdmFyIGhhbmRsZUNsaXBib2FyZERhdGEgPSBmdW5jdGlvbihlLCBkYXRhLCBmb3JjZUlFTWltZSkge1xuICAgICAgICB2YXIgY2xpcGJvYXJkRGF0YSA9IGUuY2xpcGJvYXJkRGF0YSB8fCB3aW5kb3cuY2xpcGJvYXJkRGF0YTtcbiAgICAgICAgaWYgKCFjbGlwYm9hcmREYXRhIHx8IEJST0tFTl9TRVREQVRBKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgbWltZSA9IFVTRV9JRV9NSU1FX1RZUEUgfHwgZm9yY2VJRU1pbWUgPyBcIlRleHRcIiA6IFwidGV4dC9wbGFpblwiO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xpcGJvYXJkRGF0YS5zZXREYXRhKG1pbWUsIGRhdGEpICE9PSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsaXBib2FyZERhdGEuZ2V0RGF0YShtaW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICBpZiAoIWZvcmNlSUVNaW1lKVxuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVDbGlwYm9hcmREYXRhKGUsIGRhdGEsIHRydWUpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBkb0NvcHkgPSBmdW5jdGlvbihlLCBpc0N1dCkge1xuICAgICAgICB2YXIgZGF0YSA9IGhvc3QuZ2V0Q29weVRleHQoKTtcbiAgICAgICAgaWYgKCFkYXRhKVxuICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KGUpO1xuXG4gICAgICAgIGlmIChoYW5kbGVDbGlwYm9hcmREYXRhKGUsIGRhdGEpKSB7XG4gICAgICAgICAgICBpZiAodXNlcmFnZW50LmlzSU9TKSB7XG4gICAgICAgICAgICAgICAgY3V0ID0gaXNDdXQ7XG4gICAgICAgICAgICAgICAgdGV4dC52YWx1ZSA9IFwiXFxuIGFhXCIgKyBkYXRhICsgXCJhIGFcXG5cIjtcbiAgICAgICAgICAgICAgICB0ZXh0LnNldFNlbGVjdGlvblJhbmdlKDQsIDQgKyBkYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgY29waWVkID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZGF0YVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpc0N1dCA/IGhvc3Qub25DdXQoKSA6IGhvc3Qub25Db3B5KCk7XG4gICAgICAgICAgICBpZiAoIXVzZXJhZ2VudC5pc0lPUykgZXZlbnQucHJldmVudERlZmF1bHQoZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb3BpZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGV4dC52YWx1ZSA9IGRhdGE7XG4gICAgICAgICAgICB0ZXh0LnNlbGVjdCgpO1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIGNvcGllZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJlc2V0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICByZXNldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIGlzQ3V0ID8gaG9zdC5vbkN1dCgpIDogaG9zdC5vbkNvcHkoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBvbkN1dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZG9Db3B5KGUsIHRydWUpO1xuICAgIH07XG5cbiAgICB2YXIgb25Db3B5ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICBkb0NvcHkoZSwgZmFsc2UpO1xuICAgIH07XG5cbiAgICB2YXIgb25QYXN0ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIGRhdGEgPSBoYW5kbGVDbGlwYm9hcmREYXRhKGUpO1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaWYgKGRhdGEpXG4gICAgICAgICAgICAgICAgaG9zdC5vblBhc3RlKGRhdGEsIGUpO1xuICAgICAgICAgICAgaWYgKHVzZXJhZ2VudC5pc0lFKVxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQocmVzZXRTZWxlY3Rpb24pO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0ZXh0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgIHBhc3RlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZXZlbnQuYWRkQ29tbWFuZEtleUxpc3RlbmVyKHRleHQsIGhvc3Qub25Db21tYW5kS2V5LmJpbmQoaG9zdCkpO1xuXG4gICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgXCJzZWxlY3RcIiwgb25TZWxlY3QpO1xuXG4gICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgXCJpbnB1dFwiLCBvbklucHV0KTtcblxuICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsIFwiY3V0XCIsIG9uQ3V0KTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCBcImNvcHlcIiwgb25Db3B5KTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCBcInBhc3RlXCIsIG9uUGFzdGUpO1xuICAgIHZhciBvbkNvbXBvc2l0aW9uU3RhcnQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmIChpbkNvbXBvc2l0aW9uIHx8ICFob3N0Lm9uQ29tcG9zaXRpb25TdGFydCB8fCBob3N0LiRyZWFkT25seSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaW5Db21wb3NpdGlvbiA9IHt9O1xuICAgICAgICBpbkNvbXBvc2l0aW9uLmNhblVuZG8gPSBob3N0LnNlc3Npb24uJHVuZG9NYW5hZ2VyO1xuICAgICAgICBob3N0Lm9uQ29tcG9zaXRpb25TdGFydCgpO1xuICAgICAgICBzZXRUaW1lb3V0KG9uQ29tcG9zaXRpb25VcGRhdGUsIDApO1xuICAgICAgICBob3N0Lm9uKFwibW91c2Vkb3duXCIsIG9uQ29tcG9zaXRpb25FbmQpO1xuICAgICAgICBpZiAoaW5Db21wb3NpdGlvbi5jYW5VbmRvICYmICFob3N0LnNlbGVjdGlvbi5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIGhvc3QuaW5zZXJ0KFwiXCIpO1xuICAgICAgICAgICAgaG9zdC5zZXNzaW9uLm1hcmtVbmRvR3JvdXAoKTtcbiAgICAgICAgICAgIGhvc3Quc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgaG9zdC5zZXNzaW9uLm1hcmtVbmRvR3JvdXAoKTtcbiAgICB9O1xuXG4gICAgdmFyIG9uQ29tcG9zaXRpb25VcGRhdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCFpbkNvbXBvc2l0aW9uIHx8ICFob3N0Lm9uQ29tcG9zaXRpb25VcGRhdGUgfHwgaG9zdC4kcmVhZE9ubHkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciB2YWwgPSB0ZXh0LnZhbHVlLnJlcGxhY2UoL1xceDAxL2csIFwiXCIpO1xuICAgICAgICBpZiAoaW5Db21wb3NpdGlvbi5sYXN0VmFsdWUgPT09IHZhbCkgcmV0dXJuO1xuXG4gICAgICAgIGhvc3Qub25Db21wb3NpdGlvblVwZGF0ZSh2YWwpO1xuICAgICAgICBpZiAoaW5Db21wb3NpdGlvbi5sYXN0VmFsdWUpXG4gICAgICAgICAgICBob3N0LnVuZG8oKTtcbiAgICAgICAgaWYgKGluQ29tcG9zaXRpb24uY2FuVW5kbylcbiAgICAgICAgICAgIGluQ29tcG9zaXRpb24ubGFzdFZhbHVlID0gdmFsO1xuICAgICAgICBpZiAoaW5Db21wb3NpdGlvbi5sYXN0VmFsdWUpIHtcbiAgICAgICAgICAgIHZhciByID0gaG9zdC5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTtcbiAgICAgICAgICAgIGhvc3QuaW5zZXJ0KGluQ29tcG9zaXRpb24ubGFzdFZhbHVlKTtcbiAgICAgICAgICAgIGhvc3Quc2Vzc2lvbi5tYXJrVW5kb0dyb3VwKCk7XG4gICAgICAgICAgICBpbkNvbXBvc2l0aW9uLnJhbmdlID0gaG9zdC5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTtcbiAgICAgICAgICAgIGhvc3Quc2VsZWN0aW9uLnNldFJhbmdlKHIpO1xuICAgICAgICAgICAgaG9zdC5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgb25Db21wb3NpdGlvbkVuZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaWYgKCFob3N0Lm9uQ29tcG9zaXRpb25FbmQgfHwgaG9zdC4kcmVhZE9ubHkpIHJldHVybjtcbiAgICAgICAgdmFyIGMgPSBpbkNvbXBvc2l0aW9uO1xuICAgICAgICBpbkNvbXBvc2l0aW9uID0gZmFsc2U7XG4gICAgICAgIHZhciB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgICAgICB2YXIgc3RyID0gdGV4dC52YWx1ZS5yZXBsYWNlKC9cXHgwMS9nLCBcIlwiKTtcbiAgICAgICAgICAgIGlmIChpbkNvbXBvc2l0aW9uKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGVsc2UgaWYgKHN0ciA9PSBjLmxhc3RWYWx1ZSlcbiAgICAgICAgICAgICAgICByZXNldFZhbHVlKCk7XG4gICAgICAgICAgICBlbHNlIGlmICghYy5sYXN0VmFsdWUgJiYgc3RyKSB7XG4gICAgICAgICAgICAgICAgcmVzZXRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIHNlbmRUZXh0KHN0cik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpbnB1dEhhbmRsZXIgPSBmdW5jdGlvbiBjb21wb3NpdGlvbklucHV0SGFuZGxlcihzdHIpIHtcbiAgICAgICAgICAgIGlmICh0aW1lcilcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xceDAxL2csIFwiXCIpO1xuICAgICAgICAgICAgaWYgKHN0ciA9PSBjLmxhc3RWYWx1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgIGlmIChjLmxhc3RWYWx1ZSAmJiB0aW1lcilcbiAgICAgICAgICAgICAgICBob3N0LnVuZG8oKTtcbiAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgIH07XG4gICAgICAgIGhvc3Qub25Db21wb3NpdGlvbkVuZCgpO1xuICAgICAgICBob3N0LnJlbW92ZUxpc3RlbmVyKFwibW91c2Vkb3duXCIsIG9uQ29tcG9zaXRpb25FbmQpO1xuICAgICAgICBpZiAoZS50eXBlID09IFwiY29tcG9zaXRpb25lbmRcIiAmJiBjLnJhbmdlKSB7XG4gICAgICAgICAgICBob3N0LnNlbGVjdGlvbi5zZXRSYW5nZShjLnJhbmdlKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmVlZHNPbklucHV0ID1cbiAgICAgICAgICAgICghIXVzZXJhZ2VudC5pc0Nocm9tZSAmJiB1c2VyYWdlbnQuaXNDaHJvbWUgPj0gNTMpIHx8XG4gICAgICAgICAgICAoISF1c2VyYWdlbnQuaXNXZWJLaXQgJiYgdXNlcmFnZW50LmlzV2ViS2l0ID49IDYwMyk7XG5cbiAgICAgICAgaWYgKG5lZWRzT25JbnB1dCkge1xuICAgICAgICAgIG9uSW5wdXQoKTtcbiAgICAgICAgfVxuICAgIH07XG5cblxuXG4gICAgdmFyIHN5bmNDb21wb3NpdGlvbiA9IGxhbmcuZGVsYXllZENhbGwob25Db21wb3NpdGlvblVwZGF0ZSwgNTApO1xuXG4gICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgXCJjb21wb3NpdGlvbnN0YXJ0XCIsIG9uQ29tcG9zaXRpb25TdGFydCk7XG4gICAgaWYgKHVzZXJhZ2VudC5pc0dlY2tvKSB7XG4gICAgICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsIFwidGV4dFwiLCBmdW5jdGlvbigpe3N5bmNDb21wb3NpdGlvbi5zY2hlZHVsZSgpO30pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsIFwia2V5dXBcIiwgZnVuY3Rpb24oKXtzeW5jQ29tcG9zaXRpb24uc2NoZWR1bGUoKTt9KTtcbiAgICAgICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgXCJrZXlkb3duXCIsIGZ1bmN0aW9uKCl7c3luY0NvbXBvc2l0aW9uLnNjaGVkdWxlKCk7fSk7XG4gICAgfVxuICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsIFwiY29tcG9zaXRpb25lbmRcIiwgb25Db21wb3NpdGlvbkVuZCk7XG5cbiAgICB0aGlzLmdldEVsZW1lbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfTtcblxuICAgIHRoaXMuc2V0UmVhZE9ubHkgPSBmdW5jdGlvbihyZWFkT25seSkge1xuICAgICAgIHRleHQucmVhZE9ubHkgPSByZWFkT25seTtcbiAgICB9O1xuXG4gICAgdGhpcy5vbkNvbnRleHRNZW51ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICBhZnRlckNvbnRleHRNZW51ID0gdHJ1ZTtcbiAgICAgICAgcmVzZXRTZWxlY3Rpb24oaG9zdC5zZWxlY3Rpb24uaXNFbXB0eSgpKTtcbiAgICAgICAgaG9zdC5fZW1pdChcIm5hdGl2ZWNvbnRleHRtZW51XCIsIHt0YXJnZXQ6IGhvc3QsIGRvbUV2ZW50OiBlfSk7XG4gICAgICAgIHRoaXMubW92ZVRvTW91c2UoZSwgdHJ1ZSk7XG4gICAgfTtcblxuICAgIHRoaXMubW92ZVRvTW91c2UgPSBmdW5jdGlvbihlLCBicmluZ1RvRnJvbnQpIHtcbiAgICAgICAgaWYgKCF0ZW1wU3R5bGUpXG4gICAgICAgICAgICB0ZW1wU3R5bGUgPSB0ZXh0LnN0eWxlLmNzc1RleHQ7XG4gICAgICAgIHRleHQuc3R5bGUuY3NzVGV4dCA9IChicmluZ1RvRnJvbnQgPyBcInotaW5kZXg6MTAwMDAwO1wiIDogXCJcIilcbiAgICAgICAgICAgICsgXCJoZWlnaHQ6XCIgKyB0ZXh0LnN0eWxlLmhlaWdodCArIFwiO1wiXG4gICAgICAgICAgICArICh1c2VyYWdlbnQuaXNJRSA/IFwib3BhY2l0eTowLjE7XCIgOiBcIlwiKTtcblxuICAgICAgICB2YXIgcmVjdCA9IGhvc3QuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB2YXIgc3R5bGUgPSBkb20uY29tcHV0ZWRTdHlsZShob3N0LmNvbnRhaW5lcik7XG4gICAgICAgIHZhciB0b3AgPSByZWN0LnRvcCArIChwYXJzZUludChzdHlsZS5ib3JkZXJUb3BXaWR0aCkgfHwgMCk7XG4gICAgICAgIHZhciBsZWZ0ID0gcmVjdC5sZWZ0ICsgKHBhcnNlSW50KHJlY3QuYm9yZGVyTGVmdFdpZHRoKSB8fCAwKTtcbiAgICAgICAgdmFyIG1heFRvcCA9IHJlY3QuYm90dG9tIC0gdG9wIC0gdGV4dC5jbGllbnRIZWlnaHQgLTI7XG4gICAgICAgIHZhciBtb3ZlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgdGV4dC5zdHlsZS5sZWZ0ID0gZS5jbGllbnRYIC0gbGVmdCAtIDIgKyBcInB4XCI7XG4gICAgICAgICAgICB0ZXh0LnN0eWxlLnRvcCA9IE1hdGgubWluKGUuY2xpZW50WSAtIHRvcCAtIDIsIG1heFRvcCkgKyBcInB4XCI7XG4gICAgICAgIH07XG4gICAgICAgIG1vdmUoZSk7XG5cbiAgICAgICAgaWYgKGUudHlwZSAhPSBcIm1vdXNlZG93blwiKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGlmIChob3N0LnJlbmRlcmVyLiRrZWVwVGV4dEFyZWFBdEN1cnNvcilcbiAgICAgICAgICAgIGhvc3QucmVuZGVyZXIuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yID0gbnVsbDtcblxuICAgICAgICBjbGVhclRpbWVvdXQoY2xvc2VUaW1lb3V0KTtcbiAgICAgICAgaWYgKHVzZXJhZ2VudC5pc1dpbilcbiAgICAgICAgICAgIGV2ZW50LmNhcHR1cmUoaG9zdC5jb250YWluZXIsIG1vdmUsIG9uQ29udGV4dE1lbnVDbG9zZSk7XG4gICAgfTtcblxuICAgIHRoaXMub25Db250ZXh0TWVudUNsb3NlID0gb25Db250ZXh0TWVudUNsb3NlO1xuICAgIHZhciBjbG9zZVRpbWVvdXQ7XG4gICAgZnVuY3Rpb24gb25Db250ZXh0TWVudUNsb3NlKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoY2xvc2VUaW1lb3V0KTtcbiAgICAgICAgY2xvc2VUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGVtcFN0eWxlKSB7XG4gICAgICAgICAgICAgICAgdGV4dC5zdHlsZS5jc3NUZXh0ID0gdGVtcFN0eWxlO1xuICAgICAgICAgICAgICAgIHRlbXBTdHlsZSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhvc3QucmVuZGVyZXIuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBob3N0LnJlbmRlcmVyLiRrZWVwVGV4dEFyZWFBdEN1cnNvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgaG9zdC5yZW5kZXJlci4kbW92ZVRleHRBcmVhVG9DdXJzb3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgdmFyIG9uQ29udGV4dE1lbnUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGhvc3QudGV4dElucHV0Lm9uQ29udGV4dE1lbnUoZSk7XG4gICAgICAgIG9uQ29udGV4dE1lbnVDbG9zZSgpO1xuICAgIH07XG4gICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgXCJtb3VzZXVwXCIsIG9uQ29udGV4dE1lbnUpO1xuICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsIFwibW91c2Vkb3duXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBvbkNvbnRleHRNZW51Q2xvc2UoKTtcbiAgICB9KTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcihob3N0LnJlbmRlcmVyLnNjcm9sbGVyLCBcImNvbnRleHRtZW51XCIsIG9uQ29udGV4dE1lbnUpO1xuICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsIFwiY29udGV4dG1lbnVcIiwgb25Db250ZXh0TWVudSk7XG5cbiAgICBpZiAodXNlcmFnZW50LmlzSU9TKSB7XG4gICAgICAgIHZhciB0eXBpbmdSZXNldFRpbWVvdXQgPSBudWxsO1xuICAgICAgICB2YXIgdHlwaW5nID0gZmFsc2U7XG5cbiAgICAgICAgcGFyZW50Tm9kZS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgaWYgKHR5cGluZ1Jlc2V0VGltZW91dCkgY2xlYXJUaW1lb3V0KHR5cGluZ1Jlc2V0VGltZW91dCk7XG4gICAgICAgICAgICB0eXBpbmcgPSB0cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBwYXJlbnROb2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgdHlwaW5nUmVzZXRUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHlwaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGRldGVjdEFycm93S2V5cyA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSB0ZXh0KSByZXR1cm47XG4gICAgICAgICAgICBpZiAodHlwaW5nKSByZXR1cm47XG5cbiAgICAgICAgICAgIGlmIChjdXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1dCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uU3RhcnQgPSB0ZXh0LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICAgICAgdmFyIHNlbGVjdGlvbkVuZCA9IHRleHQuc2VsZWN0aW9uRW5kO1xuICAgICAgICAgICAgdGV4dC5zZXRTZWxlY3Rpb25SYW5nZSg0LCA1KTtcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25TdGFydCA9PSBzZWxlY3Rpb25FbmQpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHNlbGVjdGlvblN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogaG9zdC5vbkNvbW1hbmRLZXkobnVsbCwgMCwgS0VZUy51cCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IGhvc3Qub25Db21tYW5kS2V5KG51bGwsIDAsIEtFWVMuaG9tZSk7IGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IGhvc3Qub25Db21tYW5kS2V5KG51bGwsIE1PRFMub3B0aW9uLCBLRVlTLmxlZnQpOyBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBob3N0Lm9uQ29tbWFuZEtleShudWxsLCAwLCBLRVlTLmxlZnQpOyBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiBob3N0Lm9uQ29tbWFuZEtleShudWxsLCAwLCBLRVlTLnJpZ2h0KTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNzogaG9zdC5vbkNvbW1hbmRLZXkobnVsbCwgTU9EUy5vcHRpb24sIEtFWVMucmlnaHQpOyBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA4OiBob3N0Lm9uQ29tbWFuZEtleShudWxsLCAwLCBLRVlTLmVuZCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDk6IGhvc3Qub25Db21tYW5kS2V5KG51bGwsIDAsIEtFWVMuZG93bik7IGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChzZWxlY3Rpb25FbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OiBob3N0Lm9uQ29tbWFuZEtleShudWxsLCBNT0RTLnNoaWZ0LCBLRVlTLnJpZ2h0KTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNzogaG9zdC5vbkNvbW1hbmRLZXkobnVsbCwgTU9EUy5zaGlmdCB8IE1PRFMub3B0aW9uLCBLRVlTLnJpZ2h0KTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgODogaG9zdC5vbkNvbW1hbmRLZXkobnVsbCwgTU9EUy5zaGlmdCwgS0VZUy5lbmQpOyBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA5OiBob3N0Lm9uQ29tbWFuZEtleShudWxsLCBNT0RTLnNoaWZ0LCBLRVlTLmRvd24pOyBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3dpdGNoIChzZWxlY3Rpb25TdGFydCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IGhvc3Qub25Db21tYW5kS2V5KG51bGwsIE1PRFMuc2hpZnQsIEtFWVMudXApOyBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBob3N0Lm9uQ29tbWFuZEtleShudWxsLCBNT0RTLnNoaWZ0LCBLRVlTLmhvbWUpOyBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBob3N0Lm9uQ29tbWFuZEtleShudWxsLCBNT0RTLnNoaWZ0IHwgTU9EUy5vcHRpb24sIEtFWVMubGVmdCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IGhvc3Qub25Db21tYW5kS2V5KG51bGwsIE1PRFMuc2hpZnQsIEtFWVMubGVmdCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNlbGVjdGlvbmNoYW5nZVwiLCBkZXRlY3RBcnJvd0tleXMpO1xuICAgICAgICBob3N0Lm9uKFwiZGVzdHJveVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzZWxlY3Rpb25jaGFuZ2VcIiwgZGV0ZWN0QXJyb3dLZXlzKTtcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuZXhwb3J0cy5UZXh0SW5wdXQgPSBUZXh0SW5wdXQ7XG59KTtcblxuYWNlLmRlZmluZShcImFjZS9rZXlib2FyZC90ZXh0aW5wdXRcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvZXZlbnRcIixcImFjZS9saWIvdXNlcmFnZW50XCIsXCJhY2UvbGliL2RvbVwiLFwiYWNlL2xpYi9sYW5nXCIsXCJhY2Uva2V5Ym9hcmQvdGV4dGlucHV0X2lvc1wiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBldmVudCA9IGFjZXF1aXJlKFwiLi4vbGliL2V2ZW50XCIpO1xudmFyIHVzZXJhZ2VudCA9IGFjZXF1aXJlKFwiLi4vbGliL3VzZXJhZ2VudFwiKTtcbnZhciBkb20gPSBhY2VxdWlyZShcIi4uL2xpYi9kb21cIik7XG52YXIgbGFuZyA9IGFjZXF1aXJlKFwiLi4vbGliL2xhbmdcIik7XG52YXIgQlJPS0VOX1NFVERBVEEgPSB1c2VyYWdlbnQuaXNDaHJvbWUgPCAxODtcbnZhciBVU0VfSUVfTUlNRV9UWVBFID0gIHVzZXJhZ2VudC5pc0lFO1xuXG52YXIgVGV4dElucHV0SU9TID0gYWNlcXVpcmUoXCIuL3RleHRpbnB1dF9pb3NcIikuVGV4dElucHV0O1xudmFyIFRleHRJbnB1dCA9IGZ1bmN0aW9uKHBhcmVudE5vZGUsIGhvc3QpIHtcbiAgICBpZiAodXNlcmFnZW50LmlzSU9TKVxuICAgICAgICByZXR1cm4gVGV4dElucHV0SU9TLmNhbGwodGhpcywgcGFyZW50Tm9kZSwgaG9zdCk7XG5cbiAgICB2YXIgdGV4dCA9IGRvbS5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIik7XG4gICAgdGV4dC5jbGFzc05hbWUgPSBcImFjZV90ZXh0LWlucHV0XCI7XG5cbiAgICB0ZXh0LnNldEF0dHJpYnV0ZShcIndyYXBcIiwgXCJvZmZcIik7XG4gICAgdGV4dC5zZXRBdHRyaWJ1dGUoXCJhdXRvY29ycmVjdFwiLCBcIm9mZlwiKTtcbiAgICB0ZXh0LnNldEF0dHJpYnV0ZShcImF1dG9jYXBpdGFsaXplXCIsIFwib2ZmXCIpO1xuICAgIHRleHQuc2V0QXR0cmlidXRlKFwic3BlbGxjaGVja1wiLCBmYWxzZSk7XG5cbiAgICB0ZXh0LnN0eWxlLm9wYWNpdHkgPSBcIjBcIjtcbiAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZSh0ZXh0LCBwYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xuXG4gICAgdmFyIFBMQUNFSE9MREVSID0gXCJcXHUyMDI4XFx1MjAyOFwiO1xuXG4gICAgdmFyIGNvcGllZCA9IGZhbHNlO1xuICAgIHZhciBwYXN0ZWQgPSBmYWxzZTtcbiAgICB2YXIgaW5Db21wb3NpdGlvbiA9IGZhbHNlO1xuICAgIHZhciB0ZW1wU3R5bGUgPSAnJztcbiAgICB2YXIgaXNTZWxlY3Rpb25FbXB0eSA9IHRydWU7XG4gICAgdHJ5IHsgdmFyIGlzRm9jdXNlZCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRleHQ7IH0gY2F0Y2goZSkge31cbiAgICBcbiAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCBcImJsdXJcIiwgZnVuY3Rpb24oZSkge1xuICAgICAgICBob3N0Lm9uQmx1cihlKTtcbiAgICAgICAgaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgfSk7XG4gICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgXCJmb2N1c1wiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlzRm9jdXNlZCA9IHRydWU7XG4gICAgICAgIGhvc3Qub25Gb2N1cyhlKTtcbiAgICAgICAgcmVzZXRTZWxlY3Rpb24oKTtcbiAgICB9KTtcbiAgICB0aGlzLmZvY3VzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0ZW1wU3R5bGUpIHJldHVybiB0ZXh0LmZvY3VzKCk7XG4gICAgICAgIHZhciB0b3AgPSB0ZXh0LnN0eWxlLnRvcDtcbiAgICAgICAgdGV4dC5zdHlsZS5wb3NpdGlvbiA9IFwiZml4ZWRcIjtcbiAgICAgICAgdGV4dC5zdHlsZS50b3AgPSBcIjBweFwiO1xuICAgICAgICB0ZXh0LmZvY3VzKCk7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0ZXh0LnN0eWxlLnBvc2l0aW9uID0gXCJcIjtcbiAgICAgICAgICAgIGlmICh0ZXh0LnN0eWxlLnRvcCA9PSBcIjBweFwiKVxuICAgICAgICAgICAgICAgIHRleHQuc3R5bGUudG9wID0gdG9wO1xuICAgICAgICB9LCAwKTtcbiAgICB9O1xuICAgIHRoaXMuYmx1ciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0ZXh0LmJsdXIoKTtcbiAgICB9O1xuICAgIHRoaXMuaXNGb2N1c2VkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpc0ZvY3VzZWQ7XG4gICAgfTtcbiAgICB2YXIgc3luY1NlbGVjdGlvbiA9IGxhbmcuZGVsYXllZENhbGwoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlzRm9jdXNlZCAmJiByZXNldFNlbGVjdGlvbihpc1NlbGVjdGlvbkVtcHR5KTtcbiAgICB9KTtcbiAgICB2YXIgc3luY1ZhbHVlID0gbGFuZy5kZWxheWVkQ2FsbChmdW5jdGlvbigpIHtcbiAgICAgICAgIGlmICghaW5Db21wb3NpdGlvbikge1xuICAgICAgICAgICAgdGV4dC52YWx1ZSA9IFBMQUNFSE9MREVSO1xuICAgICAgICAgICAgaXNGb2N1c2VkICYmIHJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiByZXNldFNlbGVjdGlvbihpc0VtcHR5KSB7XG4gICAgICAgIGlmIChpbkNvbXBvc2l0aW9uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpbkNvbXBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgICAgXG4gICAgICAgIGlmIChpbnB1dEhhbmRsZXIpIHtcbiAgICAgICAgICAgIHZhciBzZWxlY3Rpb25TdGFydCA9IDA7XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uRW5kID0gaXNFbXB0eSA/IDAgOiB0ZXh0LnZhbHVlLmxlbmd0aCAtIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uU3RhcnQgPSBpc0VtcHR5ID8gMiA6IDE7XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uRW5kID0gMjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGV4dC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTtcbiAgICAgICAgfSBjYXRjaChlKXt9XG4gICAgICAgIFxuICAgICAgICBpbkNvbXBvc2l0aW9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzZXRWYWx1ZSgpIHtcbiAgICAgICAgaWYgKGluQ29tcG9zaXRpb24pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRleHQudmFsdWUgPSBQTEFDRUhPTERFUjtcbiAgICAgICAgaWYgKHVzZXJhZ2VudC5pc1dlYktpdClcbiAgICAgICAgICAgIHN5bmNWYWx1ZS5zY2hlZHVsZSgpO1xuICAgIH1cblxuICAgIHVzZXJhZ2VudC5pc1dlYktpdCB8fCBob3N0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZVNlbGVjdGlvbicsIGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoaG9zdC5zZWxlY3Rpb24uaXNFbXB0eSgpICE9IGlzU2VsZWN0aW9uRW1wdHkpIHtcbiAgICAgICAgICAgIGlzU2VsZWN0aW9uRW1wdHkgPSAhaXNTZWxlY3Rpb25FbXB0eTtcbiAgICAgICAgICAgIHN5bmNTZWxlY3Rpb24uc2NoZWR1bGUoKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmVzZXRWYWx1ZSgpO1xuICAgIGlmIChpc0ZvY3VzZWQpXG4gICAgICAgIGhvc3Qub25Gb2N1cygpO1xuXG5cbiAgICB2YXIgaXNBbGxTZWxlY3RlZCA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgICAgcmV0dXJuIHRleHQuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiYgdGV4dC5zZWxlY3Rpb25FbmQgPT09IHRleHQudmFsdWUubGVuZ3RoO1xuICAgIH07XG5cbiAgICB2YXIgb25TZWxlY3QgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmIChjb3BpZWQpIHtcbiAgICAgICAgICAgIGNvcGllZCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQWxsU2VsZWN0ZWQodGV4dCkpIHtcbiAgICAgICAgICAgIGhvc3Quc2VsZWN0QWxsKCk7XG4gICAgICAgICAgICByZXNldFNlbGVjdGlvbigpO1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0SGFuZGxlcikge1xuICAgICAgICAgICAgcmVzZXRTZWxlY3Rpb24oaG9zdC5zZWxlY3Rpb24uaXNFbXB0eSgpKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgaW5wdXRIYW5kbGVyID0gbnVsbDtcbiAgICB0aGlzLnNldElucHV0SGFuZGxlciA9IGZ1bmN0aW9uKGNiKSB7aW5wdXRIYW5kbGVyID0gY2I7fTtcbiAgICB0aGlzLmdldElucHV0SGFuZGxlciA9IGZ1bmN0aW9uKCkge3JldHVybiBpbnB1dEhhbmRsZXI7fTtcbiAgICB2YXIgYWZ0ZXJDb250ZXh0TWVudSA9IGZhbHNlO1xuICAgIFxuICAgIHZhciBzZW5kVGV4dCA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgaWYgKGlucHV0SGFuZGxlcikge1xuICAgICAgICAgICAgZGF0YSA9IGlucHV0SGFuZGxlcihkYXRhKTtcbiAgICAgICAgICAgIGlucHV0SGFuZGxlciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhc3RlZCkge1xuICAgICAgICAgICAgcmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIGlmIChkYXRhKVxuICAgICAgICAgICAgICAgIGhvc3Qub25QYXN0ZShkYXRhKTtcbiAgICAgICAgICAgIHBhc3RlZCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT0gUExBQ0VIT0xERVIuY2hhckF0KDApKSB7XG4gICAgICAgICAgICBpZiAoYWZ0ZXJDb250ZXh0TWVudSlcbiAgICAgICAgICAgICAgICBob3N0LmV4ZWNDb21tYW5kKFwiZGVsXCIsIHtzb3VyY2U6IFwiYWNlXCJ9KTtcbiAgICAgICAgICAgIGVsc2UgLy8gc29tZSB2ZXJzaW9ucyBvZiBhbmRyb2lkIGRvIG5vdCBmaXJlIGtleWRvd24gd2hlbiBwcmVzc2luZyBiYWNrc3BhY2VcbiAgICAgICAgICAgICAgICBob3N0LmV4ZWNDb21tYW5kKFwiYmFja3NwYWNlXCIsIHtzb3VyY2U6IFwiYWNlXCJ9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkYXRhLnN1YnN0cmluZygwLCAyKSA9PSBQTEFDRUhPTERFUilcbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5zdWJzdHIoMik7XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhLmNoYXJBdCgwKSA9PSBQTEFDRUhPTERFUi5jaGFyQXQoMCkpXG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuc3Vic3RyKDEpO1xuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS5jaGFyQXQoZGF0YS5sZW5ndGggLSAxKSA9PSBQTEFDRUhPTERFUi5jaGFyQXQoMCkpXG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuc2xpY2UoMCwgLTEpO1xuICAgICAgICAgICAgaWYgKGRhdGEuY2hhckF0KGRhdGEubGVuZ3RoIC0gMSkgPT0gUExBQ0VIT0xERVIuY2hhckF0KDApKVxuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGRhdGEpXG4gICAgICAgICAgICAgICAgaG9zdC5vblRleHRJbnB1dChkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWZ0ZXJDb250ZXh0TWVudSlcbiAgICAgICAgICAgIGFmdGVyQ29udGV4dE1lbnUgPSBmYWxzZTtcbiAgICB9O1xuICAgIHZhciBvbklucHV0ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICBpZiAoaW5Db21wb3NpdGlvbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGRhdGEgPSB0ZXh0LnZhbHVlO1xuICAgICAgICBzZW5kVGV4dChkYXRhKTtcbiAgICAgICAgcmVzZXRWYWx1ZSgpO1xuICAgIH07XG4gICAgXG4gICAgdmFyIGhhbmRsZUNsaXBib2FyZERhdGEgPSBmdW5jdGlvbihlLCBkYXRhLCBmb3JjZUlFTWltZSkge1xuICAgICAgICB2YXIgY2xpcGJvYXJkRGF0YSA9IGUuY2xpcGJvYXJkRGF0YSB8fCB3aW5kb3cuY2xpcGJvYXJkRGF0YTtcbiAgICAgICAgaWYgKCFjbGlwYm9hcmREYXRhIHx8IEJST0tFTl9TRVREQVRBKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgbWltZSA9IFVTRV9JRV9NSU1FX1RZUEUgfHwgZm9yY2VJRU1pbWUgPyBcIlRleHRcIiA6IFwidGV4dC9wbGFpblwiO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xpcGJvYXJkRGF0YS5zZXREYXRhKG1pbWUsIGRhdGEpICE9PSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsaXBib2FyZERhdGEuZ2V0RGF0YShtaW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICBpZiAoIWZvcmNlSUVNaW1lKVxuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVDbGlwYm9hcmREYXRhKGUsIGRhdGEsIHRydWUpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBkb0NvcHkgPSBmdW5jdGlvbihlLCBpc0N1dCkge1xuICAgICAgICB2YXIgZGF0YSA9IGhvc3QuZ2V0Q29weVRleHQoKTtcbiAgICAgICAgaWYgKCFkYXRhKVxuICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KGUpO1xuXG4gICAgICAgIGlmIChoYW5kbGVDbGlwYm9hcmREYXRhKGUsIGRhdGEpKSB7XG4gICAgICAgICAgICBpc0N1dCA/IGhvc3Qub25DdXQoKSA6IGhvc3Qub25Db3B5KCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdChlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvcGllZCA9IHRydWU7XG4gICAgICAgICAgICB0ZXh0LnZhbHVlID0gZGF0YTtcbiAgICAgICAgICAgIHRleHQuc2VsZWN0KCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgY29waWVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmVzZXRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIHJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgaXNDdXQgPyBob3N0Lm9uQ3V0KCkgOiBob3N0Lm9uQ29weSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFxuICAgIHZhciBvbkN1dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZG9Db3B5KGUsIHRydWUpO1xuICAgIH07XG4gICAgXG4gICAgdmFyIG9uQ29weSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZG9Db3B5KGUsIGZhbHNlKTtcbiAgICB9O1xuICAgIFxuICAgIHZhciBvblBhc3RlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICB2YXIgZGF0YSA9IGhhbmRsZUNsaXBib2FyZERhdGEoZSk7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBpZiAoZGF0YSlcbiAgICAgICAgICAgICAgICBob3N0Lm9uUGFzdGUoZGF0YSwgZSk7XG4gICAgICAgICAgICBpZiAodXNlcmFnZW50LmlzSUUpXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChyZXNldFNlbGVjdGlvbik7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdChlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRleHQudmFsdWUgPSBcIlwiO1xuICAgICAgICAgICAgcGFzdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBldmVudC5hZGRDb21tYW5kS2V5TGlzdGVuZXIodGV4dCwgaG9zdC5vbkNvbW1hbmRLZXkuYmluZChob3N0KSk7XG5cbiAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCBcInNlbGVjdFwiLCBvblNlbGVjdCk7XG5cbiAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCBcImlucHV0XCIsIG9uSW5wdXQpO1xuXG4gICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgXCJjdXRcIiwgb25DdXQpO1xuICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsIFwiY29weVwiLCBvbkNvcHkpO1xuICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsIFwicGFzdGVcIiwgb25QYXN0ZSk7XG4gICAgaWYgKCEoJ29uY3V0JyBpbiB0ZXh0KSB8fCAhKCdvbmNvcHknIGluIHRleHQpIHx8ICEoJ29ucGFzdGUnIGluIHRleHQpKSB7XG4gICAgICAgIGV2ZW50LmFkZExpc3RlbmVyKHBhcmVudE5vZGUsIFwia2V5ZG93blwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAoKHVzZXJhZ2VudC5pc01hYyAmJiAhZS5tZXRhS2V5KSB8fCAhZS5jdHJsS2V5KVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgc3dpdGNoIChlLmtleUNvZGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDY3OlxuICAgICAgICAgICAgICAgICAgICBvbkNvcHkoZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgODY6XG4gICAgICAgICAgICAgICAgICAgIG9uUGFzdGUoZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgODg6XG4gICAgICAgICAgICAgICAgICAgIG9uQ3V0KGUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHZhciBvbkNvbXBvc2l0aW9uU3RhcnQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmIChpbkNvbXBvc2l0aW9uIHx8ICFob3N0Lm9uQ29tcG9zaXRpb25TdGFydCB8fCBob3N0LiRyZWFkT25seSkgXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGluQ29tcG9zaXRpb24gPSB7fTtcbiAgICAgICAgaW5Db21wb3NpdGlvbi5jYW5VbmRvID0gaG9zdC5zZXNzaW9uLiR1bmRvTWFuYWdlcjtcbiAgICAgICAgaG9zdC5vbkNvbXBvc2l0aW9uU3RhcnQoKTtcbiAgICAgICAgc2V0VGltZW91dChvbkNvbXBvc2l0aW9uVXBkYXRlLCAwKTtcbiAgICAgICAgaG9zdC5vbihcIm1vdXNlZG93blwiLCBvbkNvbXBvc2l0aW9uRW5kKTtcbiAgICAgICAgaWYgKGluQ29tcG9zaXRpb24uY2FuVW5kbyAmJiAhaG9zdC5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICBob3N0Lmluc2VydChcIlwiKTtcbiAgICAgICAgICAgIGhvc3Quc2Vzc2lvbi5tYXJrVW5kb0dyb3VwKCk7XG4gICAgICAgICAgICBob3N0LnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGhvc3Quc2Vzc2lvbi5tYXJrVW5kb0dyb3VwKCk7XG4gICAgfTtcblxuICAgIHZhciBvbkNvbXBvc2l0aW9uVXBkYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghaW5Db21wb3NpdGlvbiB8fCAhaG9zdC5vbkNvbXBvc2l0aW9uVXBkYXRlIHx8IGhvc3QuJHJlYWRPbmx5KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgdmFsID0gdGV4dC52YWx1ZS5yZXBsYWNlKC9cXHUyMDI4L2csIFwiXCIpO1xuICAgICAgICBpZiAoaW5Db21wb3NpdGlvbi5sYXN0VmFsdWUgPT09IHZhbCkgcmV0dXJuO1xuICAgICAgICBcbiAgICAgICAgaG9zdC5vbkNvbXBvc2l0aW9uVXBkYXRlKHZhbCk7XG4gICAgICAgIGlmIChpbkNvbXBvc2l0aW9uLmxhc3RWYWx1ZSlcbiAgICAgICAgICAgIGhvc3QudW5kbygpO1xuICAgICAgICBpZiAoaW5Db21wb3NpdGlvbi5jYW5VbmRvKVxuICAgICAgICAgICAgaW5Db21wb3NpdGlvbi5sYXN0VmFsdWUgPSB2YWw7XG4gICAgICAgIGlmIChpbkNvbXBvc2l0aW9uLmxhc3RWYWx1ZSkge1xuICAgICAgICAgICAgdmFyIHIgPSBob3N0LnNlbGVjdGlvbi5nZXRSYW5nZSgpO1xuICAgICAgICAgICAgaG9zdC5pbnNlcnQoaW5Db21wb3NpdGlvbi5sYXN0VmFsdWUpO1xuICAgICAgICAgICAgaG9zdC5zZXNzaW9uLm1hcmtVbmRvR3JvdXAoKTtcbiAgICAgICAgICAgIGluQ29tcG9zaXRpb24ucmFuZ2UgPSBob3N0LnNlbGVjdGlvbi5nZXRSYW5nZSgpO1xuICAgICAgICAgICAgaG9zdC5zZWxlY3Rpb24uc2V0UmFuZ2Uocik7XG4gICAgICAgICAgICBob3N0LnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBvbkNvbXBvc2l0aW9uRW5kID0gZnVuY3Rpb24oZSkge1xuICAgICAgICBpZiAoIWhvc3Qub25Db21wb3NpdGlvbkVuZCB8fCBob3N0LiRyZWFkT25seSkgcmV0dXJuO1xuICAgICAgICB2YXIgYyA9IGluQ29tcG9zaXRpb247XG4gICAgICAgIGluQ29tcG9zaXRpb24gPSBmYWxzZTtcbiAgICAgICAgdmFyIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgICAgIHZhciBzdHIgPSB0ZXh0LnZhbHVlLnJlcGxhY2UoL1xcdTIwMjgvZywgXCJcIik7XG4gICAgICAgICAgICBpZiAoaW5Db21wb3NpdGlvbilcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBlbHNlIGlmIChzdHIgPT0gYy5sYXN0VmFsdWUpXG4gICAgICAgICAgICAgICAgcmVzZXRWYWx1ZSgpO1xuICAgICAgICAgICAgZWxzZSBpZiAoIWMubGFzdFZhbHVlICYmIHN0cikge1xuICAgICAgICAgICAgICAgIHJlc2V0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICBzZW5kVGV4dChzdHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaW5wdXRIYW5kbGVyID0gZnVuY3Rpb24gY29tcG9zaXRpb25JbnB1dEhhbmRsZXIoc3RyKSB7XG4gICAgICAgICAgICBpZiAodGltZXIpXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUyMDI4L2csIFwiXCIpO1xuICAgICAgICAgICAgaWYgKHN0ciA9PSBjLmxhc3RWYWx1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgIGlmIChjLmxhc3RWYWx1ZSAmJiB0aW1lcilcbiAgICAgICAgICAgICAgICBob3N0LnVuZG8oKTtcbiAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgIH07XG4gICAgICAgIGhvc3Qub25Db21wb3NpdGlvbkVuZCgpO1xuICAgICAgICBob3N0LnJlbW92ZUxpc3RlbmVyKFwibW91c2Vkb3duXCIsIG9uQ29tcG9zaXRpb25FbmQpO1xuICAgICAgICBpZiAoZS50eXBlID09IFwiY29tcG9zaXRpb25lbmRcIiAmJiBjLnJhbmdlKSB7XG4gICAgICAgICAgICBob3N0LnNlbGVjdGlvbi5zZXRSYW5nZShjLnJhbmdlKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmVlZHNPbklucHV0ID1cbiAgICAgICAgICAgICghIXVzZXJhZ2VudC5pc0Nocm9tZSAmJiB1c2VyYWdlbnQuaXNDaHJvbWUgPj0gNTMpIHx8XG4gICAgICAgICAgICAoISF1c2VyYWdlbnQuaXNXZWJLaXQgJiYgdXNlcmFnZW50LmlzV2ViS2l0ID49IDYwMyk7XG5cbiAgICAgICAgaWYgKG5lZWRzT25JbnB1dCkge1xuICAgICAgICAgIG9uSW5wdXQoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgXG4gICAgXG5cbiAgICB2YXIgc3luY0NvbXBvc2l0aW9uID0gbGFuZy5kZWxheWVkQ2FsbChvbkNvbXBvc2l0aW9uVXBkYXRlLCA1MCk7XG5cbiAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCBcImNvbXBvc2l0aW9uc3RhcnRcIiwgb25Db21wb3NpdGlvblN0YXJ0KTtcbiAgICBpZiAodXNlcmFnZW50LmlzR2Vja28pIHtcbiAgICAgICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgXCJ0ZXh0XCIsIGZ1bmN0aW9uKCl7c3luY0NvbXBvc2l0aW9uLnNjaGVkdWxlKCk7fSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgXCJrZXl1cFwiLCBmdW5jdGlvbigpe3N5bmNDb21wb3NpdGlvbi5zY2hlZHVsZSgpO30pO1xuICAgICAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCBcImtleWRvd25cIiwgZnVuY3Rpb24oKXtzeW5jQ29tcG9zaXRpb24uc2NoZWR1bGUoKTt9KTtcbiAgICB9XG4gICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgXCJjb21wb3NpdGlvbmVuZFwiLCBvbkNvbXBvc2l0aW9uRW5kKTtcblxuICAgIHRoaXMuZ2V0RWxlbWVudCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9O1xuXG4gICAgdGhpcy5zZXRSZWFkT25seSA9IGZ1bmN0aW9uKHJlYWRPbmx5KSB7XG4gICAgICAgdGV4dC5yZWFkT25seSA9IHJlYWRPbmx5O1xuICAgIH07XG5cbiAgICB0aGlzLm9uQ29udGV4dE1lbnUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGFmdGVyQ29udGV4dE1lbnUgPSB0cnVlO1xuICAgICAgICByZXNldFNlbGVjdGlvbihob3N0LnNlbGVjdGlvbi5pc0VtcHR5KCkpO1xuICAgICAgICBob3N0Ll9lbWl0KFwibmF0aXZlY29udGV4dG1lbnVcIiwge3RhcmdldDogaG9zdCwgZG9tRXZlbnQ6IGV9KTtcbiAgICAgICAgdGhpcy5tb3ZlVG9Nb3VzZShlLCB0cnVlKTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMubW92ZVRvTW91c2UgPSBmdW5jdGlvbihlLCBicmluZ1RvRnJvbnQpIHtcbiAgICAgICAgaWYgKCF0ZW1wU3R5bGUpXG4gICAgICAgICAgICB0ZW1wU3R5bGUgPSB0ZXh0LnN0eWxlLmNzc1RleHQ7XG4gICAgICAgIHRleHQuc3R5bGUuY3NzVGV4dCA9IChicmluZ1RvRnJvbnQgPyBcInotaW5kZXg6MTAwMDAwO1wiIDogXCJcIilcbiAgICAgICAgICAgICsgXCJoZWlnaHQ6XCIgKyB0ZXh0LnN0eWxlLmhlaWdodCArIFwiO1wiXG4gICAgICAgICAgICArICh1c2VyYWdlbnQuaXNJRSA/IFwib3BhY2l0eTowLjE7XCIgOiBcIlwiKTtcblxuICAgICAgICB2YXIgcmVjdCA9IGhvc3QuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB2YXIgc3R5bGUgPSBkb20uY29tcHV0ZWRTdHlsZShob3N0LmNvbnRhaW5lcik7XG4gICAgICAgIHZhciB0b3AgPSByZWN0LnRvcCArIChwYXJzZUludChzdHlsZS5ib3JkZXJUb3BXaWR0aCkgfHwgMCk7XG4gICAgICAgIHZhciBsZWZ0ID0gcmVjdC5sZWZ0ICsgKHBhcnNlSW50KHJlY3QuYm9yZGVyTGVmdFdpZHRoKSB8fCAwKTtcbiAgICAgICAgdmFyIG1heFRvcCA9IHJlY3QuYm90dG9tIC0gdG9wIC0gdGV4dC5jbGllbnRIZWlnaHQgLTI7XG4gICAgICAgIHZhciBtb3ZlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgdGV4dC5zdHlsZS5sZWZ0ID0gZS5jbGllbnRYIC0gbGVmdCAtIDIgKyBcInB4XCI7XG4gICAgICAgICAgICB0ZXh0LnN0eWxlLnRvcCA9IE1hdGgubWluKGUuY2xpZW50WSAtIHRvcCAtIDIsIG1heFRvcCkgKyBcInB4XCI7XG4gICAgICAgIH07IFxuICAgICAgICBtb3ZlKGUpO1xuXG4gICAgICAgIGlmIChlLnR5cGUgIT0gXCJtb3VzZWRvd25cIilcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpZiAoaG9zdC5yZW5kZXJlci4ka2VlcFRleHRBcmVhQXRDdXJzb3IpXG4gICAgICAgICAgICBob3N0LnJlbmRlcmVyLiRrZWVwVGV4dEFyZWFBdEN1cnNvciA9IG51bGw7XG5cbiAgICAgICAgY2xlYXJUaW1lb3V0KGNsb3NlVGltZW91dCk7XG4gICAgICAgIGlmICh1c2VyYWdlbnQuaXNXaW4pXG4gICAgICAgICAgICBldmVudC5jYXB0dXJlKGhvc3QuY29udGFpbmVyLCBtb3ZlLCBvbkNvbnRleHRNZW51Q2xvc2UpO1xuICAgIH07XG5cbiAgICB0aGlzLm9uQ29udGV4dE1lbnVDbG9zZSA9IG9uQ29udGV4dE1lbnVDbG9zZTtcbiAgICB2YXIgY2xvc2VUaW1lb3V0O1xuICAgIGZ1bmN0aW9uIG9uQ29udGV4dE1lbnVDbG9zZSgpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGNsb3NlVGltZW91dCk7XG4gICAgICAgIGNsb3NlVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRlbXBTdHlsZSkge1xuICAgICAgICAgICAgICAgIHRleHQuc3R5bGUuY3NzVGV4dCA9IHRlbXBTdHlsZTtcbiAgICAgICAgICAgICAgICB0ZW1wU3R5bGUgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChob3N0LnJlbmRlcmVyLiRrZWVwVGV4dEFyZWFBdEN1cnNvciA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaG9zdC5yZW5kZXJlci4ka2VlcFRleHRBcmVhQXRDdXJzb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGhvc3QucmVuZGVyZXIuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDApO1xuICAgIH1cblxuICAgIHZhciBvbkNvbnRleHRNZW51ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICBob3N0LnRleHRJbnB1dC5vbkNvbnRleHRNZW51KGUpO1xuICAgICAgICBvbkNvbnRleHRNZW51Q2xvc2UoKTtcbiAgICB9O1xuICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsIFwibW91c2V1cFwiLCBvbkNvbnRleHRNZW51KTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCBcIm1vdXNlZG93blwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgb25Db250ZXh0TWVudUNsb3NlKCk7XG4gICAgfSk7XG4gICAgZXZlbnQuYWRkTGlzdGVuZXIoaG9zdC5yZW5kZXJlci5zY3JvbGxlciwgXCJjb250ZXh0bWVudVwiLCBvbkNvbnRleHRNZW51KTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCBcImNvbnRleHRtZW51XCIsIG9uQ29udGV4dE1lbnUpO1xufTtcblxuZXhwb3J0cy5UZXh0SW5wdXQgPSBUZXh0SW5wdXQ7XG59KTtcblxuYWNlLmRlZmluZShcImFjZS9tb3VzZS9kZWZhdWx0X2hhbmRsZXJzXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL2RvbVwiLFwiYWNlL2xpYi9ldmVudFwiLFwiYWNlL2xpYi91c2VyYWdlbnRcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG52YXIgZG9tID0gYWNlcXVpcmUoXCIuLi9saWIvZG9tXCIpO1xudmFyIGV2ZW50ID0gYWNlcXVpcmUoXCIuLi9saWIvZXZlbnRcIik7XG52YXIgdXNlcmFnZW50ID0gYWNlcXVpcmUoXCIuLi9saWIvdXNlcmFnZW50XCIpO1xuXG52YXIgRFJBR19PRkZTRVQgPSAwOyAvLyBwaXhlbHNcbnZhciBTQ1JPTExfQ09PTERPV05fVCA9IDI1MDsgLy8gbWlsbGlzZWNvbmRzXG5cbmZ1bmN0aW9uIERlZmF1bHRIYW5kbGVycyhtb3VzZUhhbmRsZXIpIHtcbiAgICBtb3VzZUhhbmRsZXIuJGNsaWNrU2VsZWN0aW9uID0gbnVsbDtcblxuICAgIHZhciBlZGl0b3IgPSBtb3VzZUhhbmRsZXIuZWRpdG9yO1xuICAgIGVkaXRvci5zZXREZWZhdWx0SGFuZGxlcihcIm1vdXNlZG93blwiLCB0aGlzLm9uTW91c2VEb3duLmJpbmQobW91c2VIYW5kbGVyKSk7XG4gICAgZWRpdG9yLnNldERlZmF1bHRIYW5kbGVyKFwiZGJsY2xpY2tcIiwgdGhpcy5vbkRvdWJsZUNsaWNrLmJpbmQobW91c2VIYW5kbGVyKSk7XG4gICAgZWRpdG9yLnNldERlZmF1bHRIYW5kbGVyKFwidHJpcGxlY2xpY2tcIiwgdGhpcy5vblRyaXBsZUNsaWNrLmJpbmQobW91c2VIYW5kbGVyKSk7XG4gICAgZWRpdG9yLnNldERlZmF1bHRIYW5kbGVyKFwicXVhZGNsaWNrXCIsIHRoaXMub25RdWFkQ2xpY2suYmluZChtb3VzZUhhbmRsZXIpKTtcbiAgICBlZGl0b3Iuc2V0RGVmYXVsdEhhbmRsZXIoXCJtb3VzZXdoZWVsXCIsIHRoaXMub25Nb3VzZVdoZWVsLmJpbmQobW91c2VIYW5kbGVyKSk7XG4gICAgZWRpdG9yLnNldERlZmF1bHRIYW5kbGVyKFwidG91Y2htb3ZlXCIsIHRoaXMub25Ub3VjaE1vdmUuYmluZChtb3VzZUhhbmRsZXIpKTtcblxuICAgIHZhciBleHBvcnRzID0gW1wic2VsZWN0XCIsIFwic3RhcnRTZWxlY3RcIiwgXCJzZWxlY3RFbmRcIiwgXCJzZWxlY3RBbGxFbmRcIiwgXCJzZWxlY3RCeVdvcmRzRW5kXCIsXG4gICAgICAgIFwic2VsZWN0QnlMaW5lc0VuZFwiLCBcImRyYWdXYWl0XCIsIFwiZHJhZ1dhaXRFbmRcIiwgXCJmb2N1c1dhaXRcIl07XG5cbiAgICBleHBvcnRzLmZvckVhY2goZnVuY3Rpb24oeCkge1xuICAgICAgICBtb3VzZUhhbmRsZXJbeF0gPSB0aGlzW3hdO1xuICAgIH0sIHRoaXMpO1xuXG4gICAgbW91c2VIYW5kbGVyLnNlbGVjdEJ5TGluZXMgPSB0aGlzLmV4dGVuZFNlbGVjdGlvbkJ5LmJpbmQobW91c2VIYW5kbGVyLCBcImdldExpbmVSYW5nZVwiKTtcbiAgICBtb3VzZUhhbmRsZXIuc2VsZWN0QnlXb3JkcyA9IHRoaXMuZXh0ZW5kU2VsZWN0aW9uQnkuYmluZChtb3VzZUhhbmRsZXIsIFwiZ2V0V29yZFJhbmdlXCIpO1xufVxuXG4oZnVuY3Rpb24oKSB7XG5cbiAgICB0aGlzLm9uTW91c2VEb3duID0gZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgdmFyIGluU2VsZWN0aW9uID0gZXYuaW5TZWxlY3Rpb24oKTtcbiAgICAgICAgdmFyIHBvcyA9IGV2LmdldERvY3VtZW50UG9zaXRpb24oKTtcbiAgICAgICAgdGhpcy5tb3VzZWRvd25FdmVudCA9IGV2O1xuICAgICAgICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG5cbiAgICAgICAgdmFyIGJ1dHRvbiA9IGV2LmdldEJ1dHRvbigpO1xuICAgICAgICBpZiAoYnV0dG9uICE9PSAwKSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uUmFuZ2UgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgICAgIHZhciBzZWxlY3Rpb25FbXB0eSA9IHNlbGVjdGlvblJhbmdlLmlzRW1wdHkoKTtcbiAgICAgICAgICAgIGVkaXRvci4kYmxvY2tTY3JvbGxpbmcrKztcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25FbXB0eSB8fCBidXR0b24gPT0gMSlcbiAgICAgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLm1vdmVUb1Bvc2l0aW9uKHBvcyk7XG4gICAgICAgICAgICBlZGl0b3IuJGJsb2NrU2Nyb2xsaW5nLS07XG4gICAgICAgICAgICBpZiAoYnV0dG9uID09IDIpIHtcbiAgICAgICAgICAgICAgICBlZGl0b3IudGV4dElucHV0Lm9uQ29udGV4dE1lbnUoZXYuZG9tRXZlbnQpO1xuICAgICAgICAgICAgICAgIGlmICghdXNlcmFnZW50LmlzTW96aWxsYSlcbiAgICAgICAgICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubW91c2Vkb3duRXZlbnQudGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIGlmIChpblNlbGVjdGlvbiAmJiAhZWRpdG9yLmlzRm9jdXNlZCgpKSB7XG4gICAgICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLiRmb2N1c1RpbW91dCAmJiAhdGhpcy4kY2xpY2tTZWxlY3Rpb24gJiYgIWVkaXRvci5pbk11bHRpU2VsZWN0TW9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoXCJmb2N1c1dhaXRcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXB0dXJlTW91c2UoZXYpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FwdHVyZU1vdXNlKGV2KTtcbiAgICAgICAgdGhpcy5zdGFydFNlbGVjdChwb3MsIGV2LmRvbUV2ZW50Ll9jbGlja3MgPiAxKTtcbiAgICAgICAgcmV0dXJuIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfTtcblxuICAgIHRoaXMuc3RhcnRTZWxlY3QgPSBmdW5jdGlvbihwb3MsIHdhaXRGb3JDbGlja1NlbGVjdGlvbikge1xuICAgICAgICBwb3MgPSBwb3MgfHwgdGhpcy5lZGl0b3IucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXModGhpcy54LCB0aGlzLnkpO1xuICAgICAgICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgICAgIGVkaXRvci4kYmxvY2tTY3JvbGxpbmcrKztcbiAgICAgICAgaWYgKHRoaXMubW91c2Vkb3duRXZlbnQuZ2V0U2hpZnRLZXkoKSlcbiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2VsZWN0VG9Qb3NpdGlvbihwb3MpO1xuICAgICAgICBlbHNlIGlmICghd2FpdEZvckNsaWNrU2VsZWN0aW9uKVxuICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5tb3ZlVG9Qb3NpdGlvbihwb3MpO1xuICAgICAgICBpZiAoIXdhaXRGb3JDbGlja1NlbGVjdGlvbilcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0KCk7XG4gICAgICAgIGlmIChlZGl0b3IucmVuZGVyZXIuc2Nyb2xsZXIuc2V0Q2FwdHVyZSkge1xuICAgICAgICAgICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbGVyLnNldENhcHR1cmUoKTtcbiAgICAgICAgfVxuICAgICAgICBlZGl0b3Iuc2V0U3R5bGUoXCJhY2Vfc2VsZWN0aW5nXCIpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKFwic2VsZWN0XCIpO1xuICAgICAgICBlZGl0b3IuJGJsb2NrU2Nyb2xsaW5nLS07XG4gICAgfTtcblxuICAgIHRoaXMuc2VsZWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhbmNob3IsIGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLnJlbmRlcmVyLnNjcmVlblRvVGV4dENvb3JkaW5hdGVzKHRoaXMueCwgdGhpcy55KTtcbiAgICAgICAgZWRpdG9yLiRibG9ja1Njcm9sbGluZysrO1xuICAgICAgICBpZiAodGhpcy4kY2xpY2tTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBjbXAgPSB0aGlzLiRjbGlja1NlbGVjdGlvbi5jb21wYXJlUG9pbnQoY3Vyc29yKTtcblxuICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkge1xuICAgICAgICAgICAgICAgIGFuY2hvciA9IHRoaXMuJGNsaWNrU2VsZWN0aW9uLmVuZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09IDEpIHtcbiAgICAgICAgICAgICAgICBhbmNob3IgPSB0aGlzLiRjbGlja1NlbGVjdGlvbi5zdGFydDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIG9yaWVudGVkUmFuZ2UgPSBjYWxjUmFuZ2VPcmllbnRhdGlvbih0aGlzLiRjbGlja1NlbGVjdGlvbiwgY3Vyc29yKTtcbiAgICAgICAgICAgICAgICBjdXJzb3IgPSBvcmllbnRlZFJhbmdlLmN1cnNvcjtcbiAgICAgICAgICAgICAgICBhbmNob3IgPSBvcmllbnRlZFJhbmdlLmFuY2hvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uQW5jaG9yKGFuY2hvci5yb3csIGFuY2hvci5jb2x1bW4pO1xuICAgICAgICB9XG4gICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2VsZWN0VG9Qb3NpdGlvbihjdXJzb3IpO1xuICAgICAgICBlZGl0b3IuJGJsb2NrU2Nyb2xsaW5nLS07XG4gICAgICAgIGVkaXRvci5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldygpO1xuICAgIH07XG5cbiAgICB0aGlzLmV4dGVuZFNlbGVjdGlvbkJ5ID0gZnVuY3Rpb24odW5pdE5hbWUpIHtcbiAgICAgICAgdmFyIGFuY2hvciwgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXModGhpcy54LCB0aGlzLnkpO1xuICAgICAgICB2YXIgcmFuZ2UgPSBlZGl0b3Iuc2VsZWN0aW9uW3VuaXROYW1lXShjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTtcbiAgICAgICAgZWRpdG9yLiRibG9ja1Njcm9sbGluZysrO1xuICAgICAgICBpZiAodGhpcy4kY2xpY2tTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBjbXBTdGFydCA9IHRoaXMuJGNsaWNrU2VsZWN0aW9uLmNvbXBhcmVQb2ludChyYW5nZS5zdGFydCk7XG4gICAgICAgICAgICB2YXIgY21wRW5kID0gdGhpcy4kY2xpY2tTZWxlY3Rpb24uY29tcGFyZVBvaW50KHJhbmdlLmVuZCk7XG5cbiAgICAgICAgICAgIGlmIChjbXBTdGFydCA9PSAtMSAmJiBjbXBFbmQgPD0gMCkge1xuICAgICAgICAgICAgICAgIGFuY2hvciA9IHRoaXMuJGNsaWNrU2VsZWN0aW9uLmVuZDtcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2UuZW5kLnJvdyAhPSBjdXJzb3Iucm93IHx8IHJhbmdlLmVuZC5jb2x1bW4gIT0gY3Vyc29yLmNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gcmFuZ2Uuc3RhcnQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNtcEVuZCA9PSAxICYmIGNtcFN0YXJ0ID49IDApIHtcbiAgICAgICAgICAgICAgICBhbmNob3IgPSB0aGlzLiRjbGlja1NlbGVjdGlvbi5zdGFydDtcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ICE9IGN1cnNvci5yb3cgfHwgcmFuZ2Uuc3RhcnQuY29sdW1uICE9IGN1cnNvci5jb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIGN1cnNvciA9IHJhbmdlLmVuZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wU3RhcnQgPT0gLTEgJiYgY21wRW5kID09IDEpIHtcbiAgICAgICAgICAgICAgICBjdXJzb3IgPSByYW5nZS5lbmQ7XG4gICAgICAgICAgICAgICAgYW5jaG9yID0gcmFuZ2Uuc3RhcnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBvcmllbnRlZFJhbmdlID0gY2FsY1JhbmdlT3JpZW50YXRpb24odGhpcy4kY2xpY2tTZWxlY3Rpb24sIGN1cnNvcik7XG4gICAgICAgICAgICAgICAgY3Vyc29yID0gb3JpZW50ZWRSYW5nZS5jdXJzb3I7XG4gICAgICAgICAgICAgICAgYW5jaG9yID0gb3JpZW50ZWRSYW5nZS5hbmNob3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFNlbGVjdGlvbkFuY2hvcihhbmNob3Iucm93LCBhbmNob3IuY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNlbGVjdFRvUG9zaXRpb24oY3Vyc29yKTtcbiAgICAgICAgZWRpdG9yLiRibG9ja1Njcm9sbGluZy0tO1xuICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zZWxlY3RFbmQgPVxuICAgIHRoaXMuc2VsZWN0QWxsRW5kID1cbiAgICB0aGlzLnNlbGVjdEJ5V29yZHNFbmQgPVxuICAgIHRoaXMuc2VsZWN0QnlMaW5lc0VuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRjbGlja1NlbGVjdGlvbiA9IG51bGw7XG4gICAgICAgIHRoaXMuZWRpdG9yLnVuc2V0U3R5bGUoXCJhY2Vfc2VsZWN0aW5nXCIpO1xuICAgICAgICBpZiAodGhpcy5lZGl0b3IucmVuZGVyZXIuc2Nyb2xsZXIucmVsZWFzZUNhcHR1cmUpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLnJlbmRlcmVyLnNjcm9sbGVyLnJlbGVhc2VDYXB0dXJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5mb2N1c1dhaXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGRpc3RhbmNlID0gY2FsY0Rpc3RhbmNlKHRoaXMubW91c2Vkb3duRXZlbnQueCwgdGhpcy5tb3VzZWRvd25FdmVudC55LCB0aGlzLngsIHRoaXMueSk7XG4gICAgICAgIHZhciB0aW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgICBpZiAoZGlzdGFuY2UgPiBEUkFHX09GRlNFVCB8fCB0aW1lIC0gdGhpcy5tb3VzZWRvd25FdmVudC50aW1lID4gdGhpcy4kZm9jdXNUaW1vdXQpXG4gICAgICAgICAgICB0aGlzLnN0YXJ0U2VsZWN0KHRoaXMubW91c2Vkb3duRXZlbnQuZ2V0RG9jdW1lbnRQb3NpdGlvbigpKTtcbiAgICB9O1xuXG4gICAgdGhpcy5vbkRvdWJsZUNsaWNrID0gZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgdmFyIHBvcyA9IGV2LmdldERvY3VtZW50UG9zaXRpb24oKTtcbiAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgICAgICB2YXIgc2Vzc2lvbiA9IGVkaXRvci5zZXNzaW9uO1xuXG4gICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uZ2V0QnJhY2tldFJhbmdlKHBvcyk7XG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbi0tO1xuICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoXCJzZWxlY3RcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByYW5nZSA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0V29yZFJhbmdlKHBvcy5yb3csIHBvcy5jb2x1bW4pO1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZShcInNlbGVjdEJ5V29yZHNcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kY2xpY2tTZWxlY3Rpb24gPSByYW5nZTtcbiAgICAgICAgdGhpcy5zZWxlY3QoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5vblRyaXBsZUNsaWNrID0gZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgdmFyIHBvcyA9IGV2LmdldERvY3VtZW50UG9zaXRpb24oKTtcbiAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXCJzZWxlY3RCeUxpbmVzXCIpO1xuICAgICAgICB2YXIgcmFuZ2UgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgaWYgKHJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgcmFuZ2UuY29udGFpbnMocG9zLnJvdywgcG9zLmNvbHVtbikpIHtcbiAgICAgICAgICAgIHRoaXMuJGNsaWNrU2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRMaW5lUmFuZ2UocmFuZ2Uuc3RhcnQucm93KTtcbiAgICAgICAgICAgIHRoaXMuJGNsaWNrU2VsZWN0aW9uLmVuZCA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0TGluZVJhbmdlKHJhbmdlLmVuZC5yb3cpLmVuZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuJGNsaWNrU2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRMaW5lUmFuZ2UocG9zLnJvdyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3QoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5vblF1YWRDbGljayA9IGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcblxuICAgICAgICBlZGl0b3Iuc2VsZWN0QWxsKCk7XG4gICAgICAgIHRoaXMuJGNsaWNrU2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXCJzZWxlY3RBbGxcIik7XG4gICAgfTtcblxuICAgIHRoaXMub25Nb3VzZVdoZWVsID0gZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgaWYgKGV2LmdldEFjY2VsS2V5KCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChldi5nZXRTaGlmdEtleSgpICYmIGV2LndoZWVsWSAmJiAhZXYud2hlZWxYKSB7XG4gICAgICAgICAgICBldi53aGVlbFggPSBldi53aGVlbFk7XG4gICAgICAgICAgICBldi53aGVlbFkgPSAwO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG5cbiAgICAgICAgaWYgKCF0aGlzLiRsYXN0U2Nyb2xsKVxuICAgICAgICAgICAgdGhpcy4kbGFzdFNjcm9sbCA9IHsgdDogMCwgdng6IDAsIHZ5OiAwLCBhbGxvd2VkOiAwIH07XG5cbiAgICAgICAgdmFyIHByZXZTY3JvbGwgPSB0aGlzLiRsYXN0U2Nyb2xsO1xuICAgICAgICB2YXIgdCA9IGV2LmRvbUV2ZW50LnRpbWVTdGFtcDtcbiAgICAgICAgdmFyIGR0ID0gdCAtIHByZXZTY3JvbGwudDtcbiAgICAgICAgdmFyIHZ4ID0gZXYud2hlZWxYIC8gZHQ7XG4gICAgICAgIHZhciB2eSA9IGV2LndoZWVsWSAvIGR0O1xuICAgICAgICBpZiAoZHQgPCBTQ1JPTExfQ09PTERPV05fVCkge1xuICAgICAgICAgICAgdnggPSAodnggKyBwcmV2U2Nyb2xsLnZ4KSAvIDI7XG4gICAgICAgICAgICB2eSA9ICh2eSArIHByZXZTY3JvbGwudnkpIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSBNYXRoLmFicyh2eCAvIHZ5KTtcblxuICAgICAgICB2YXIgY2FuU2Nyb2xsID0gZmFsc2U7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPj0gMSAmJiBlZGl0b3IucmVuZGVyZXIuaXNTY3JvbGxhYmxlQnkoZXYud2hlZWxYICogZXYuc3BlZWQsIDApKVxuICAgICAgICAgICAgY2FuU2Nyb2xsID0gdHJ1ZTtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA8PSAxICYmIGVkaXRvci5yZW5kZXJlci5pc1Njcm9sbGFibGVCeSgwLCBldi53aGVlbFkgKiBldi5zcGVlZCkpXG4gICAgICAgICAgICBjYW5TY3JvbGwgPSB0cnVlO1xuXG4gICAgICAgIGlmIChjYW5TY3JvbGwpIHtcbiAgICAgICAgICAgIHByZXZTY3JvbGwuYWxsb3dlZCA9IHQ7XG4gICAgICAgIH0gZWxzZSBpZiAodCAtIHByZXZTY3JvbGwuYWxsb3dlZCA8IFNDUk9MTF9DT09MRE9XTl9UKSB7XG4gICAgICAgICAgICB2YXIgaXNTbG93ZXIgPSBNYXRoLmFicyh2eCkgPD0gMS4xICogTWF0aC5hYnMocHJldlNjcm9sbC52eClcbiAgICAgICAgICAgICAgICAmJiBNYXRoLmFicyh2eSkgPD0gMS4xICogTWF0aC5hYnMocHJldlNjcm9sbC52eSk7XG4gICAgICAgICAgICBpZiAoaXNTbG93ZXIpIHtcbiAgICAgICAgICAgICAgICBjYW5TY3JvbGwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHByZXZTY3JvbGwuYWxsb3dlZCA9IHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwcmV2U2Nyb2xsLmFsbG93ZWQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJldlNjcm9sbC50ID0gdDtcbiAgICAgICAgcHJldlNjcm9sbC52eCA9IHZ4O1xuICAgICAgICBwcmV2U2Nyb2xsLnZ5ID0gdnk7XG5cbiAgICAgICAgaWYgKGNhblNjcm9sbCkge1xuICAgICAgICAgICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbEJ5KGV2LndoZWVsWCAqIGV2LnNwZWVkLCBldi53aGVlbFkgKiBldi5zcGVlZCk7XG4gICAgICAgICAgICByZXR1cm4gZXYuc3RvcCgpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMub25Ub3VjaE1vdmUgPSBmdW5jdGlvbihldikge1xuICAgICAgICB0aGlzLmVkaXRvci5fZW1pdChcIm1vdXNld2hlZWxcIiwgZXYpO1xuICAgIH07XG5cbn0pLmNhbGwoRGVmYXVsdEhhbmRsZXJzLnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuRGVmYXVsdEhhbmRsZXJzID0gRGVmYXVsdEhhbmRsZXJzO1xuXG5mdW5jdGlvbiBjYWxjRGlzdGFuY2UoYXgsIGF5LCBieCwgYnkpIHtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KGJ4IC0gYXgsIDIpICsgTWF0aC5wb3coYnkgLSBheSwgMikpO1xufVxuXG5mdW5jdGlvbiBjYWxjUmFuZ2VPcmllbnRhdGlvbihyYW5nZSwgY3Vyc29yKSB7XG4gICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9PSByYW5nZS5lbmQucm93KVxuICAgICAgICB2YXIgY21wID0gMiAqIGN1cnNvci5jb2x1bW4gLSByYW5nZS5zdGFydC5jb2x1bW4gLSByYW5nZS5lbmQuY29sdW1uO1xuICAgIGVsc2UgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9PSByYW5nZS5lbmQucm93IC0gMSAmJiAhcmFuZ2Uuc3RhcnQuY29sdW1uICYmICFyYW5nZS5lbmQuY29sdW1uKVxuICAgICAgICB2YXIgY21wID0gY3Vyc29yLmNvbHVtbiAtIDQ7XG4gICAgZWxzZVxuICAgICAgICB2YXIgY21wID0gMiAqIGN1cnNvci5yb3cgLSByYW5nZS5zdGFydC5yb3cgLSByYW5nZS5lbmQucm93O1xuXG4gICAgaWYgKGNtcCA8IDApXG4gICAgICAgIHJldHVybiB7Y3Vyc29yOiByYW5nZS5zdGFydCwgYW5jaG9yOiByYW5nZS5lbmR9O1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHtjdXJzb3I6IHJhbmdlLmVuZCwgYW5jaG9yOiByYW5nZS5zdGFydH07XG59XG5cbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL3Rvb2x0aXBcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvb29wXCIsXCJhY2UvbGliL2RvbVwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBvb3AgPSBhY2VxdWlyZShcIi4vbGliL29vcFwiKTtcbnZhciBkb20gPSBhY2VxdWlyZShcIi4vbGliL2RvbVwiKTtcbmZ1bmN0aW9uIFRvb2x0aXAgKHBhcmVudE5vZGUpIHtcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuJGVsZW1lbnQgPSBudWxsO1xuICAgIHRoaXMuJHBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xufVxuXG4oZnVuY3Rpb24oKSB7XG4gICAgdGhpcy4kaW5pdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRlbGVtZW50ID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuY2xhc3NOYW1lID0gXCJhY2VfdG9vbHRpcFwiO1xuICAgICAgICB0aGlzLiRlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgICAgdGhpcy4kcGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLiRlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGVsZW1lbnQ7XG4gICAgfTtcbiAgICB0aGlzLmdldEVsZW1lbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGVsZW1lbnQgfHwgdGhpcy4kaW5pdCgpO1xuICAgIH07XG4gICAgdGhpcy5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dCkge1xuICAgICAgICBkb20uc2V0SW5uZXJUZXh0KHRoaXMuZ2V0RWxlbWVudCgpLCB0ZXh0KTtcbiAgICB9O1xuICAgIHRoaXMuc2V0SHRtbCA9IGZ1bmN0aW9uKGh0bWwpIHtcbiAgICAgICAgdGhpcy5nZXRFbGVtZW50KCkuaW5uZXJIVE1MID0gaHRtbDtcbiAgICB9O1xuICAgIHRoaXMuc2V0UG9zaXRpb24gPSBmdW5jdGlvbih4LCB5KSB7XG4gICAgICAgIHRoaXMuZ2V0RWxlbWVudCgpLnN0eWxlLmxlZnQgPSB4ICsgXCJweFwiO1xuICAgICAgICB0aGlzLmdldEVsZW1lbnQoKS5zdHlsZS50b3AgPSB5ICsgXCJweFwiO1xuICAgIH07XG4gICAgdGhpcy5zZXRDbGFzc05hbWUgPSBmdW5jdGlvbihjbGFzc05hbWUpIHtcbiAgICAgICAgZG9tLmFkZENzc0NsYXNzKHRoaXMuZ2V0RWxlbWVudCgpLCBjbGFzc05hbWUpO1xuICAgIH07XG4gICAgdGhpcy5zaG93ID0gZnVuY3Rpb24odGV4dCwgeCwgeSkge1xuICAgICAgICBpZiAodGV4dCAhPSBudWxsKVxuICAgICAgICAgICAgdGhpcy5zZXRUZXh0KHRleHQpO1xuICAgICAgICBpZiAoeCAhPSBudWxsICYmIHkgIT0gbnVsbClcbiAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24oeCwgeSk7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RWxlbWVudCgpLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5oaWRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5nZXRFbGVtZW50KCkuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5nZXRIZWlnaHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudCgpLm9mZnNldEhlaWdodDtcbiAgICB9O1xuICAgIHRoaXMuZ2V0V2lkdGggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudCgpLm9mZnNldFdpZHRoO1xuICAgIH07XG5cbiAgICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuJGVsZW1lbnQgJiYgdGhpcy4kZWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICB0aGlzLiRlbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy4kZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG59KS5jYWxsKFRvb2x0aXAucHJvdG90eXBlKTtcblxuZXhwb3J0cy5Ub29sdGlwID0gVG9vbHRpcDtcbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL21vdXNlL2RlZmF1bHRfZ3V0dGVyX2hhbmRsZXJcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvZG9tXCIsXCJhY2UvbGliL29vcFwiLFwiYWNlL2xpYi9ldmVudFwiLFwiYWNlL3Rvb2x0aXBcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xudmFyIGRvbSA9IGFjZXF1aXJlKFwiLi4vbGliL2RvbVwiKTtcbnZhciBvb3AgPSBhY2VxdWlyZShcIi4uL2xpYi9vb3BcIik7XG52YXIgZXZlbnQgPSBhY2VxdWlyZShcIi4uL2xpYi9ldmVudFwiKTtcbnZhciBUb29sdGlwID0gYWNlcXVpcmUoXCIuLi90b29sdGlwXCIpLlRvb2x0aXA7XG5cbmZ1bmN0aW9uIEd1dHRlckhhbmRsZXIobW91c2VIYW5kbGVyKSB7XG4gICAgdmFyIGVkaXRvciA9IG1vdXNlSGFuZGxlci5lZGl0b3I7XG4gICAgdmFyIGd1dHRlciA9IGVkaXRvci5yZW5kZXJlci4kZ3V0dGVyTGF5ZXI7XG4gICAgdmFyIHRvb2x0aXAgPSBuZXcgR3V0dGVyVG9vbHRpcChlZGl0b3IuY29udGFpbmVyKTtcblxuICAgIG1vdXNlSGFuZGxlci5lZGl0b3Iuc2V0RGVmYXVsdEhhbmRsZXIoXCJndXR0ZXJtb3VzZWRvd25cIiwgZnVuY3Rpb24oZSkge1xuICAgICAgICBpZiAoIWVkaXRvci5pc0ZvY3VzZWQoKSB8fCBlLmdldEJ1dHRvbigpICE9IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBndXR0ZXJSZWdpb24gPSBndXR0ZXIuZ2V0UmVnaW9uKGUpO1xuXG4gICAgICAgIGlmIChndXR0ZXJSZWdpb24gPT0gXCJmb2xkV2lkZ2V0c1wiKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHZhciByb3cgPSBlLmdldERvY3VtZW50UG9zaXRpb24oKS5yb3c7XG4gICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0b3Iuc2Vzc2lvbi5zZWxlY3Rpb247XG5cbiAgICAgICAgaWYgKGUuZ2V0U2hpZnRLZXkoKSlcbiAgICAgICAgICAgIHNlbGVjdGlvbi5zZWxlY3RUbyhyb3csIDApO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChlLmRvbUV2ZW50LmRldGFpbCA9PSAyKSB7XG4gICAgICAgICAgICAgICAgZWRpdG9yLnNlbGVjdEFsbCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtb3VzZUhhbmRsZXIuJGNsaWNrU2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRMaW5lUmFuZ2Uocm93KTtcbiAgICAgICAgfVxuICAgICAgICBtb3VzZUhhbmRsZXIuc2V0U3RhdGUoXCJzZWxlY3RCeUxpbmVzXCIpO1xuICAgICAgICBtb3VzZUhhbmRsZXIuY2FwdHVyZU1vdXNlKGUpO1xuICAgICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0pO1xuXG5cbiAgICB2YXIgdG9vbHRpcFRpbWVvdXQsIG1vdXNlRXZlbnQsIHRvb2x0aXBBbm5vdGF0aW9uO1xuXG4gICAgZnVuY3Rpb24gc2hvd1Rvb2x0aXAoKSB7XG4gICAgICAgIHZhciByb3cgPSBtb3VzZUV2ZW50LmdldERvY3VtZW50UG9zaXRpb24oKS5yb3c7XG4gICAgICAgIHZhciBhbm5vdGF0aW9uID0gZ3V0dGVyLiRhbm5vdGF0aW9uc1tyb3ddO1xuICAgICAgICBpZiAoIWFubm90YXRpb24pXG4gICAgICAgICAgICByZXR1cm4gaGlkZVRvb2x0aXAoKTtcblxuICAgICAgICB2YXIgbWF4Um93ID0gZWRpdG9yLnNlc3Npb24uZ2V0TGVuZ3RoKCk7XG4gICAgICAgIGlmIChyb3cgPT0gbWF4Um93KSB7XG4gICAgICAgICAgICB2YXIgc2NyZWVuUm93ID0gZWRpdG9yLnJlbmRlcmVyLnBpeGVsVG9TY3JlZW5Db29yZGluYXRlcygwLCBtb3VzZUV2ZW50LnkpLnJvdztcbiAgICAgICAgICAgIHZhciBwb3MgPSBtb3VzZUV2ZW50LiRwb3M7XG4gICAgICAgICAgICBpZiAoc2NyZWVuUm93ID4gZWRpdG9yLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblJvdyhwb3Mucm93LCBwb3MuY29sdW1uKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gaGlkZVRvb2x0aXAoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0b29sdGlwQW5ub3RhdGlvbiA9PSBhbm5vdGF0aW9uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0b29sdGlwQW5ub3RhdGlvbiA9IGFubm90YXRpb24udGV4dC5qb2luKFwiPGJyLz5cIik7XG5cbiAgICAgICAgdG9vbHRpcC5zZXRIdG1sKHRvb2x0aXBBbm5vdGF0aW9uKTtcbiAgICAgICAgdG9vbHRpcC5zaG93KCk7XG4gICAgICAgIGVkaXRvci5fc2lnbmFsKFwic2hvd0d1dHRlclRvb2x0aXBcIiwgdG9vbHRpcCk7XG4gICAgICAgIGVkaXRvci5vbihcIm1vdXNld2hlZWxcIiwgaGlkZVRvb2x0aXApO1xuXG4gICAgICAgIGlmIChtb3VzZUhhbmRsZXIuJHRvb2x0aXBGb2xsb3dzTW91c2UpIHtcbiAgICAgICAgICAgIG1vdmVUb29sdGlwKG1vdXNlRXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGd1dHRlckVsZW1lbnQgPSBtb3VzZUV2ZW50LmRvbUV2ZW50LnRhcmdldDtcbiAgICAgICAgICAgIHZhciByZWN0ID0gZ3V0dGVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIHZhciBzdHlsZSA9IHRvb2x0aXAuZ2V0RWxlbWVudCgpLnN0eWxlO1xuICAgICAgICAgICAgc3R5bGUubGVmdCA9IHJlY3QucmlnaHQgKyBcInB4XCI7XG4gICAgICAgICAgICBzdHlsZS50b3AgPSByZWN0LmJvdHRvbSArIFwicHhcIjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhpZGVUb29sdGlwKCkge1xuICAgICAgICBpZiAodG9vbHRpcFRpbWVvdXQpXG4gICAgICAgICAgICB0b29sdGlwVGltZW91dCA9IGNsZWFyVGltZW91dCh0b29sdGlwVGltZW91dCk7XG4gICAgICAgIGlmICh0b29sdGlwQW5ub3RhdGlvbikge1xuICAgICAgICAgICAgdG9vbHRpcC5oaWRlKCk7XG4gICAgICAgICAgICB0b29sdGlwQW5ub3RhdGlvbiA9IG51bGw7XG4gICAgICAgICAgICBlZGl0b3IuX3NpZ25hbChcImhpZGVHdXR0ZXJUb29sdGlwXCIsIHRvb2x0aXApO1xuICAgICAgICAgICAgZWRpdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXdoZWVsXCIsIGhpZGVUb29sdGlwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdmVUb29sdGlwKGUpIHtcbiAgICAgICAgdG9vbHRpcC5zZXRQb3NpdGlvbihlLngsIGUueSk7XG4gICAgfVxuXG4gICAgbW91c2VIYW5kbGVyLmVkaXRvci5zZXREZWZhdWx0SGFuZGxlcihcImd1dHRlcm1vdXNlbW92ZVwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSBlLmRvbUV2ZW50LnRhcmdldCB8fCBlLmRvbUV2ZW50LnNyY0VsZW1lbnQ7XG4gICAgICAgIGlmIChkb20uaGFzQ3NzQ2xhc3ModGFyZ2V0LCBcImFjZV9mb2xkLXdpZGdldFwiKSlcbiAgICAgICAgICAgIHJldHVybiBoaWRlVG9vbHRpcCgpO1xuXG4gICAgICAgIGlmICh0b29sdGlwQW5ub3RhdGlvbiAmJiBtb3VzZUhhbmRsZXIuJHRvb2x0aXBGb2xsb3dzTW91c2UpXG4gICAgICAgICAgICBtb3ZlVG9vbHRpcChlKTtcblxuICAgICAgICBtb3VzZUV2ZW50ID0gZTtcbiAgICAgICAgaWYgKHRvb2x0aXBUaW1lb3V0KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0b29sdGlwVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0b29sdGlwVGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICBpZiAobW91c2VFdmVudCAmJiAhbW91c2VIYW5kbGVyLmlzTW91c2VQcmVzc2VkKVxuICAgICAgICAgICAgICAgIHNob3dUb29sdGlwKCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgaGlkZVRvb2x0aXAoKTtcbiAgICAgICAgfSwgNTApO1xuICAgIH0pO1xuXG4gICAgZXZlbnQuYWRkTGlzdGVuZXIoZWRpdG9yLnJlbmRlcmVyLiRndXR0ZXIsIFwibW91c2VvdXRcIiwgZnVuY3Rpb24oZSkge1xuICAgICAgICBtb3VzZUV2ZW50ID0gbnVsbDtcbiAgICAgICAgaWYgKCF0b29sdGlwQW5ub3RhdGlvbiB8fCB0b29sdGlwVGltZW91dClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB0b29sdGlwVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0b29sdGlwVGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICBoaWRlVG9vbHRpcCgpO1xuICAgICAgICB9LCA1MCk7XG4gICAgfSk7XG4gICAgXG4gICAgZWRpdG9yLm9uKFwiY2hhbmdlU2Vzc2lvblwiLCBoaWRlVG9vbHRpcCk7XG59XG5cbmZ1bmN0aW9uIEd1dHRlclRvb2x0aXAocGFyZW50Tm9kZSkge1xuICAgIFRvb2x0aXAuY2FsbCh0aGlzLCBwYXJlbnROb2RlKTtcbn1cblxub29wLmluaGVyaXRzKEd1dHRlclRvb2x0aXAsIFRvb2x0aXApO1xuXG4oZnVuY3Rpb24oKXtcbiAgICB0aGlzLnNldFBvc2l0aW9uID0gZnVuY3Rpb24oeCwgeSkge1xuICAgICAgICB2YXIgd2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICAgIHZhciB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5nZXRXaWR0aCgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRIZWlnaHQoKTtcbiAgICAgICAgeCArPSAxNTtcbiAgICAgICAgeSArPSAxNTtcbiAgICAgICAgaWYgKHggKyB3aWR0aCA+IHdpbmRvd1dpZHRoKSB7XG4gICAgICAgICAgICB4IC09ICh4ICsgd2lkdGgpIC0gd2luZG93V2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHkgKyBoZWlnaHQgPiB3aW5kb3dIZWlnaHQpIHtcbiAgICAgICAgICAgIHkgLT0gMjAgKyBoZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgVG9vbHRpcC5wcm90b3R5cGUuc2V0UG9zaXRpb24uY2FsbCh0aGlzLCB4LCB5KTtcbiAgICB9O1xuXG59KS5jYWxsKEd1dHRlclRvb2x0aXAucHJvdG90eXBlKTtcblxuXG5cbmV4cG9ydHMuR3V0dGVySGFuZGxlciA9IEd1dHRlckhhbmRsZXI7XG5cbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL21vdXNlL21vdXNlX2V2ZW50XCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL2V2ZW50XCIsXCJhY2UvbGliL3VzZXJhZ2VudFwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBldmVudCA9IGFjZXF1aXJlKFwiLi4vbGliL2V2ZW50XCIpO1xudmFyIHVzZXJhZ2VudCA9IGFjZXF1aXJlKFwiLi4vbGliL3VzZXJhZ2VudFwiKTtcbnZhciBNb3VzZUV2ZW50ID0gZXhwb3J0cy5Nb3VzZUV2ZW50ID0gZnVuY3Rpb24oZG9tRXZlbnQsIGVkaXRvcikge1xuICAgIHRoaXMuZG9tRXZlbnQgPSBkb21FdmVudDtcbiAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjtcbiAgICBcbiAgICB0aGlzLnggPSB0aGlzLmNsaWVudFggPSBkb21FdmVudC5jbGllbnRYO1xuICAgIHRoaXMueSA9IHRoaXMuY2xpZW50WSA9IGRvbUV2ZW50LmNsaWVudFk7XG5cbiAgICB0aGlzLiRwb3MgPSBudWxsO1xuICAgIHRoaXMuJGluU2VsZWN0aW9uID0gbnVsbDtcbiAgICBcbiAgICB0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IGZhbHNlO1xuICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xufTtcblxuKGZ1bmN0aW9uKCkgeyAgXG4gICAgXG4gICAgdGhpcy5zdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKHRoaXMuZG9tRXZlbnQpO1xuICAgICAgICB0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KHRoaXMuZG9tRXZlbnQpO1xuICAgICAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgIH07XG4gICAgXG4gICAgdGhpcy5zdG9wID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0RG9jdW1lbnRQb3NpdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy4kcG9zKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHBvcztcbiAgICAgICAgXG4gICAgICAgIHRoaXMuJHBvcyA9IHRoaXMuZWRpdG9yLnJlbmRlcmVyLnNjcmVlblRvVGV4dENvb3JkaW5hdGVzKHRoaXMuY2xpZW50WCwgdGhpcy5jbGllbnRZKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHBvcztcbiAgICB9O1xuICAgIHRoaXMuaW5TZWxlY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuJGluU2VsZWN0aW9uICE9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGluU2VsZWN0aW9uO1xuICAgICAgICAgICAgXG4gICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICAgICAgXG5cbiAgICAgICAgdmFyIHNlbGVjdGlvblJhbmdlID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgIGlmIChzZWxlY3Rpb25SYW5nZS5pc0VtcHR5KCkpXG4gICAgICAgICAgICB0aGlzLiRpblNlbGVjdGlvbiA9IGZhbHNlO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBwb3MgPSB0aGlzLmdldERvY3VtZW50UG9zaXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuJGluU2VsZWN0aW9uID0gc2VsZWN0aW9uUmFuZ2UuY29udGFpbnMocG9zLnJvdywgcG9zLmNvbHVtbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy4kaW5TZWxlY3Rpb247XG4gICAgfTtcbiAgICB0aGlzLmdldEJ1dHRvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZXZlbnQuZ2V0QnV0dG9uKHRoaXMuZG9tRXZlbnQpO1xuICAgIH07XG4gICAgdGhpcy5nZXRTaGlmdEtleSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kb21FdmVudC5zaGlmdEtleTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuZ2V0QWNjZWxLZXkgPSB1c2VyYWdlbnQuaXNNYWNcbiAgICAgICAgPyBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuZG9tRXZlbnQubWV0YUtleTsgfVxuICAgICAgICA6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5kb21FdmVudC5jdHJsS2V5OyB9O1xuICAgIFxufSkuY2FsbChNb3VzZUV2ZW50LnByb3RvdHlwZSk7XG5cbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL21vdXNlL2RyYWdkcm9wX2hhbmRsZXJcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvZG9tXCIsXCJhY2UvbGliL2V2ZW50XCIsXCJhY2UvbGliL3VzZXJhZ2VudFwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBkb20gPSBhY2VxdWlyZShcIi4uL2xpYi9kb21cIik7XG52YXIgZXZlbnQgPSBhY2VxdWlyZShcIi4uL2xpYi9ldmVudFwiKTtcbnZhciB1c2VyYWdlbnQgPSBhY2VxdWlyZShcIi4uL2xpYi91c2VyYWdlbnRcIik7XG5cbnZhciBBVVRPU0NST0xMX0RFTEFZID0gMjAwO1xudmFyIFNDUk9MTF9DVVJTT1JfREVMQVkgPSAyMDA7XG52YXIgU0NST0xMX0NVUlNPUl9IWVNURVJFU0lTID0gNTtcblxuZnVuY3Rpb24gRHJhZ2Ryb3BIYW5kbGVyKG1vdXNlSGFuZGxlcikge1xuXG4gICAgdmFyIGVkaXRvciA9IG1vdXNlSGFuZGxlci5lZGl0b3I7XG5cbiAgICB2YXIgYmxhbmtJbWFnZSA9IGRvbS5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xuICAgIGJsYW5rSW1hZ2Uuc3JjID0gXCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFBQUFDSDVCQUVLQUFFQUxBQUFBQUFCQUFFQUFBSUNUQUVBT3c9PVwiO1xuICAgIGlmICh1c2VyYWdlbnQuaXNPcGVyYSlcbiAgICAgICAgYmxhbmtJbWFnZS5zdHlsZS5jc3NUZXh0ID0gXCJ3aWR0aDoxcHg7aGVpZ2h0OjFweDtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7ei1pbmRleDoyMTQ3NDgzNjQ3O29wYWNpdHk6MDtcIjtcblxuICAgIHZhciBleHBvcnRzID0gW1wiZHJhZ1dhaXRcIiwgXCJkcmFnV2FpdEVuZFwiLCBcInN0YXJ0RHJhZ1wiLCBcImRyYWdSZWFkeUVuZFwiLCBcIm9uTW91c2VEcmFnXCJdO1xuXG4gICAgIGV4cG9ydHMuZm9yRWFjaChmdW5jdGlvbih4KSB7XG4gICAgICAgICBtb3VzZUhhbmRsZXJbeF0gPSB0aGlzW3hdO1xuICAgIH0sIHRoaXMpO1xuICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIHRoaXMub25Nb3VzZURvd24uYmluZChtb3VzZUhhbmRsZXIpKTtcblxuXG4gICAgdmFyIG1vdXNlVGFyZ2V0ID0gZWRpdG9yLmNvbnRhaW5lcjtcbiAgICB2YXIgZHJhZ1NlbGVjdGlvbk1hcmtlciwgeCwgeTtcbiAgICB2YXIgdGltZXJJZCwgcmFuZ2U7XG4gICAgdmFyIGRyYWdDdXJzb3IsIGNvdW50ZXIgPSAwO1xuICAgIHZhciBkcmFnT3BlcmF0aW9uO1xuICAgIHZhciBpc0ludGVybmFsO1xuICAgIHZhciBhdXRvU2Nyb2xsU3RhcnRUaW1lO1xuICAgIHZhciBjdXJzb3JNb3ZlZFRpbWU7XG4gICAgdmFyIGN1cnNvclBvaW50T25DYXJldE1vdmVkO1xuXG4gICAgdGhpcy5vbkRyYWdTdGFydCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuY2VsRHJhZyB8fCAhbW91c2VUYXJnZXQuZHJhZ2dhYmxlKSB7XG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgc2VsZi5zdGFydFNlbGVjdCgpO1xuICAgICAgICAgICAgICAgIHNlbGYuY2FwdHVyZU1vdXNlKGUpO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJhbmdlID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7XG5cbiAgICAgICAgdmFyIGRhdGFUcmFuc2ZlciA9IGUuZGF0YVRyYW5zZmVyO1xuICAgICAgICBkYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9IGVkaXRvci5nZXRSZWFkT25seSgpID8gXCJjb3B5XCIgOiBcImNvcHlNb3ZlXCI7XG4gICAgICAgIGlmICh1c2VyYWdlbnQuaXNPcGVyYSkge1xuICAgICAgICAgICAgZWRpdG9yLmNvbnRhaW5lci5hcHBlbmRDaGlsZChibGFua0ltYWdlKTtcbiAgICAgICAgICAgIGJsYW5rSW1hZ2Uuc2Nyb2xsVG9wID0gMDtcbiAgICAgICAgfVxuICAgICAgICBkYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlICYmIGRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoYmxhbmtJbWFnZSwgMCwgMCk7XG4gICAgICAgIGlmICh1c2VyYWdlbnQuaXNPcGVyYSkge1xuICAgICAgICAgICAgZWRpdG9yLmNvbnRhaW5lci5yZW1vdmVDaGlsZChibGFua0ltYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhVHJhbnNmZXIuY2xlYXJEYXRhKCk7XG4gICAgICAgIGRhdGFUcmFuc2Zlci5zZXREYXRhKFwiVGV4dFwiLCBlZGl0b3Iuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UoKSk7XG5cbiAgICAgICAgaXNJbnRlcm5hbCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXCJkcmFnXCIpO1xuICAgIH07XG5cbiAgICB0aGlzLm9uRHJhZ0VuZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgbW91c2VUYXJnZXQuZHJhZ2dhYmxlID0gZmFsc2U7XG4gICAgICAgIGlzSW50ZXJuYWwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShudWxsKTtcbiAgICAgICAgaWYgKCFlZGl0b3IuZ2V0UmVhZE9ubHkoKSkge1xuICAgICAgICAgICAgdmFyIGRyb3BFZmZlY3QgPSBlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0O1xuICAgICAgICAgICAgaWYgKCFkcmFnT3BlcmF0aW9uICYmIGRyb3BFZmZlY3QgPT0gXCJtb3ZlXCIpXG4gICAgICAgICAgICAgICAgZWRpdG9yLnNlc3Npb24ucmVtb3ZlKGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpKTtcbiAgICAgICAgICAgIGVkaXRvci5yZW5kZXJlci4kY3Vyc29yTGF5ZXIuc2V0QmxpbmtpbmcodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lZGl0b3IudW5zZXRTdHlsZShcImFjZV9kcmFnZ2luZ1wiKTtcbiAgICAgICAgdGhpcy5lZGl0b3IucmVuZGVyZXIuc2V0Q3Vyc29yU3R5bGUoXCJcIik7XG4gICAgfTtcblxuICAgIHRoaXMub25EcmFnRW50ZXIgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmIChlZGl0b3IuZ2V0UmVhZE9ubHkoKSB8fCAhY2FuQWNjZXB0KGUuZGF0YVRyYW5zZmVyKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgeCA9IGUuY2xpZW50WDtcbiAgICAgICAgeSA9IGUuY2xpZW50WTtcbiAgICAgICAgaWYgKCFkcmFnU2VsZWN0aW9uTWFya2VyKVxuICAgICAgICAgICAgYWRkRHJhZ01hcmtlcigpO1xuICAgICAgICBjb3VudGVyKys7XG4gICAgICAgIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSBkcmFnT3BlcmF0aW9uID0gZ2V0RHJvcEVmZmVjdChlKTtcbiAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KGUpO1xuICAgIH07XG5cbiAgICB0aGlzLm9uRHJhZ092ZXIgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmIChlZGl0b3IuZ2V0UmVhZE9ubHkoKSB8fCAhY2FuQWNjZXB0KGUuZGF0YVRyYW5zZmVyKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgeCA9IGUuY2xpZW50WDtcbiAgICAgICAgeSA9IGUuY2xpZW50WTtcbiAgICAgICAgaWYgKCFkcmFnU2VsZWN0aW9uTWFya2VyKSB7XG4gICAgICAgICAgICBhZGREcmFnTWFya2VyKCk7XG4gICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9uTW91c2VNb3ZlVGltZXIgIT09IG51bGwpXG4gICAgICAgICAgICBvbk1vdXNlTW92ZVRpbWVyID0gbnVsbDtcblxuICAgICAgICBlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gZHJhZ09wZXJhdGlvbiA9IGdldERyb3BFZmZlY3QoZSk7XG4gICAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdChlKTtcbiAgICB9O1xuXG4gICAgdGhpcy5vbkRyYWdMZWF2ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgY291bnRlci0tO1xuICAgICAgICBpZiAoY291bnRlciA8PSAwICYmIGRyYWdTZWxlY3Rpb25NYXJrZXIpIHtcbiAgICAgICAgICAgIGNsZWFyRHJhZ01hcmtlcigpO1xuICAgICAgICAgICAgZHJhZ09wZXJhdGlvbiA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5vbkRyb3AgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmICghZHJhZ0N1cnNvcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGRhdGFUcmFuc2ZlciA9IGUuZGF0YVRyYW5zZmVyO1xuICAgICAgICBpZiAoaXNJbnRlcm5hbCkge1xuICAgICAgICAgICAgc3dpdGNoIChkcmFnT3BlcmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1vdmVcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlLmNvbnRhaW5zKGRyYWdDdXJzb3Iucm93LCBkcmFnQ3Vyc29yLmNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBkcmFnQ3Vyc29yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogZHJhZ0N1cnNvclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gZWRpdG9yLm1vdmVUZXh0KHJhbmdlLCBkcmFnQ3Vyc29yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY29weVwiOlxuICAgICAgICAgICAgICAgICAgICByYW5nZSA9IGVkaXRvci5tb3ZlVGV4dChyYW5nZSwgZHJhZ0N1cnNvciwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGRyb3BEYXRhID0gZGF0YVRyYW5zZmVyLmdldERhdGEoJ1RleHQnKTtcbiAgICAgICAgICAgIHJhbmdlID0ge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiBkcmFnQ3Vyc29yLFxuICAgICAgICAgICAgICAgIGVuZDogZWRpdG9yLnNlc3Npb24uaW5zZXJ0KGRyYWdDdXJzb3IsIGRyb3BEYXRhKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgICAgICAgZHJhZ09wZXJhdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY2xlYXJEcmFnTWFya2VyKCk7XG4gICAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdChlKTtcbiAgICB9O1xuXG4gICAgZXZlbnQuYWRkTGlzdGVuZXIobW91c2VUYXJnZXQsIFwiZHJhZ3N0YXJ0XCIsIHRoaXMub25EcmFnU3RhcnQuYmluZChtb3VzZUhhbmRsZXIpKTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcihtb3VzZVRhcmdldCwgXCJkcmFnZW5kXCIsIHRoaXMub25EcmFnRW5kLmJpbmQobW91c2VIYW5kbGVyKSk7XG4gICAgZXZlbnQuYWRkTGlzdGVuZXIobW91c2VUYXJnZXQsIFwiZHJhZ2VudGVyXCIsIHRoaXMub25EcmFnRW50ZXIuYmluZChtb3VzZUhhbmRsZXIpKTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcihtb3VzZVRhcmdldCwgXCJkcmFnb3ZlclwiLCB0aGlzLm9uRHJhZ092ZXIuYmluZChtb3VzZUhhbmRsZXIpKTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcihtb3VzZVRhcmdldCwgXCJkcmFnbGVhdmVcIiwgdGhpcy5vbkRyYWdMZWF2ZS5iaW5kKG1vdXNlSGFuZGxlcikpO1xuICAgIGV2ZW50LmFkZExpc3RlbmVyKG1vdXNlVGFyZ2V0LCBcImRyb3BcIiwgdGhpcy5vbkRyb3AuYmluZChtb3VzZUhhbmRsZXIpKTtcblxuICAgIGZ1bmN0aW9uIHNjcm9sbEN1cnNvckludG9WaWV3KGN1cnNvciwgcHJldkN1cnNvcikge1xuICAgICAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgdmFyIHZNb3ZlbWVudCA9ICFwcmV2Q3Vyc29yIHx8IGN1cnNvci5yb3cgIT0gcHJldkN1cnNvci5yb3c7XG4gICAgICAgIHZhciBoTW92ZW1lbnQgPSAhcHJldkN1cnNvciB8fCBjdXJzb3IuY29sdW1uICE9IHByZXZDdXJzb3IuY29sdW1uO1xuICAgICAgICBpZiAoIWN1cnNvck1vdmVkVGltZSB8fCB2TW92ZW1lbnQgfHwgaE1vdmVtZW50KSB7XG4gICAgICAgICAgICBlZGl0b3IuJGJsb2NrU2Nyb2xsaW5nICs9IDE7XG4gICAgICAgICAgICBlZGl0b3IubW92ZUN1cnNvclRvUG9zaXRpb24oY3Vyc29yKTtcbiAgICAgICAgICAgIGVkaXRvci4kYmxvY2tTY3JvbGxpbmcgLT0gMTtcbiAgICAgICAgICAgIGN1cnNvck1vdmVkVGltZSA9IG5vdztcbiAgICAgICAgICAgIGN1cnNvclBvaW50T25DYXJldE1vdmVkID0ge3g6IHgsIHk6IHl9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gY2FsY0Rpc3RhbmNlKGN1cnNvclBvaW50T25DYXJldE1vdmVkLngsIGN1cnNvclBvaW50T25DYXJldE1vdmVkLnksIHgsIHkpO1xuICAgICAgICAgICAgaWYgKGRpc3RhbmNlID4gU0NST0xMX0NVUlNPUl9IWVNURVJFU0lTKSB7XG4gICAgICAgICAgICAgICAgY3Vyc29yTW92ZWRUaW1lID0gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobm93IC0gY3Vyc29yTW92ZWRUaW1lID49IFNDUk9MTF9DVVJTT1JfREVMQVkpIHtcbiAgICAgICAgICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKTtcbiAgICAgICAgICAgICAgICBjdXJzb3JNb3ZlZFRpbWUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXV0b1Njcm9sbChjdXJzb3IsIHByZXZDdXJzb3IpIHtcbiAgICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIHZhciBsaW5lSGVpZ2h0ID0gZWRpdG9yLnJlbmRlcmVyLmxheWVyQ29uZmlnLmxpbmVIZWlnaHQ7XG4gICAgICAgIHZhciBjaGFyYWN0ZXJXaWR0aCA9IGVkaXRvci5yZW5kZXJlci5sYXllckNvbmZpZy5jaGFyYWN0ZXJXaWR0aDtcbiAgICAgICAgdmFyIGVkaXRvclJlY3QgPSBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHZhciBvZmZzZXRzID0ge1xuICAgICAgICAgICB4OiB7XG4gICAgICAgICAgICAgICBsZWZ0OiB4IC0gZWRpdG9yUmVjdC5sZWZ0LFxuICAgICAgICAgICAgICAgcmlnaHQ6IGVkaXRvclJlY3QucmlnaHQgLSB4XG4gICAgICAgICAgIH0sXG4gICAgICAgICAgIHk6IHtcbiAgICAgICAgICAgICAgIHRvcDogeSAtIGVkaXRvclJlY3QudG9wLFxuICAgICAgICAgICAgICAgYm90dG9tOiBlZGl0b3JSZWN0LmJvdHRvbSAtIHlcbiAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgbmVhcmVzdFhPZmZzZXQgPSBNYXRoLm1pbihvZmZzZXRzLngubGVmdCwgb2Zmc2V0cy54LnJpZ2h0KTtcbiAgICAgICAgdmFyIG5lYXJlc3RZT2Zmc2V0ID0gTWF0aC5taW4ob2Zmc2V0cy55LnRvcCwgb2Zmc2V0cy55LmJvdHRvbSk7XG4gICAgICAgIHZhciBzY3JvbGxDdXJzb3IgPSB7cm93OiBjdXJzb3Iucm93LCBjb2x1bW46IGN1cnNvci5jb2x1bW59O1xuICAgICAgICBpZiAobmVhcmVzdFhPZmZzZXQgLyBjaGFyYWN0ZXJXaWR0aCA8PSAyKSB7XG4gICAgICAgICAgICBzY3JvbGxDdXJzb3IuY29sdW1uICs9IChvZmZzZXRzLngubGVmdCA8IG9mZnNldHMueC5yaWdodCA/IC0zIDogKzIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZWFyZXN0WU9mZnNldCAvIGxpbmVIZWlnaHQgPD0gMSkge1xuICAgICAgICAgICAgc2Nyb2xsQ3Vyc29yLnJvdyArPSAob2Zmc2V0cy55LnRvcCA8IG9mZnNldHMueS5ib3R0b20gPyAtMSA6ICsxKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdlNjcm9sbCA9IGN1cnNvci5yb3cgIT0gc2Nyb2xsQ3Vyc29yLnJvdztcbiAgICAgICAgdmFyIGhTY3JvbGwgPSBjdXJzb3IuY29sdW1uICE9IHNjcm9sbEN1cnNvci5jb2x1bW47XG4gICAgICAgIHZhciB2TW92ZW1lbnQgPSAhcHJldkN1cnNvciB8fCBjdXJzb3Iucm93ICE9IHByZXZDdXJzb3Iucm93O1xuICAgICAgICBpZiAodlNjcm9sbCB8fCAoaFNjcm9sbCAmJiAhdk1vdmVtZW50KSkge1xuICAgICAgICAgICAgaWYgKCFhdXRvU2Nyb2xsU3RhcnRUaW1lKVxuICAgICAgICAgICAgICAgIGF1dG9TY3JvbGxTdGFydFRpbWUgPSBub3c7XG4gICAgICAgICAgICBlbHNlIGlmIChub3cgLSBhdXRvU2Nyb2xsU3RhcnRUaW1lID49IEFVVE9TQ1JPTExfREVMQVkpXG4gICAgICAgICAgICAgICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KHNjcm9sbEN1cnNvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhdXRvU2Nyb2xsU3RhcnRUaW1lID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uRHJhZ0ludGVydmFsKCkge1xuICAgICAgICB2YXIgcHJldkN1cnNvciA9IGRyYWdDdXJzb3I7XG4gICAgICAgIGRyYWdDdXJzb3IgPSBlZGl0b3IucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXMoeCwgeSk7XG4gICAgICAgIHNjcm9sbEN1cnNvckludG9WaWV3KGRyYWdDdXJzb3IsIHByZXZDdXJzb3IpO1xuICAgICAgICBhdXRvU2Nyb2xsKGRyYWdDdXJzb3IsIHByZXZDdXJzb3IpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZERyYWdNYXJrZXIoKSB7XG4gICAgICAgIHJhbmdlID0gZWRpdG9yLnNlbGVjdGlvbi50b09yaWVudGVkUmFuZ2UoKTtcbiAgICAgICAgZHJhZ1NlbGVjdGlvbk1hcmtlciA9IGVkaXRvci5zZXNzaW9uLmFkZE1hcmtlcihyYW5nZSwgXCJhY2Vfc2VsZWN0aW9uXCIsIGVkaXRvci5nZXRTZWxlY3Rpb25TdHlsZSgpKTtcbiAgICAgICAgZWRpdG9yLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIGlmIChlZGl0b3IuaXNGb2N1c2VkKCkpXG4gICAgICAgICAgICBlZGl0b3IucmVuZGVyZXIuJGN1cnNvckxheWVyLnNldEJsaW5raW5nKGZhbHNlKTtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcklkKTtcbiAgICAgICAgb25EcmFnSW50ZXJ2YWwoKTtcbiAgICAgICAgdGltZXJJZCA9IHNldEludGVydmFsKG9uRHJhZ0ludGVydmFsLCAyMCk7XG4gICAgICAgIGNvdW50ZXIgPSAwO1xuICAgICAgICBldmVudC5hZGRMaXN0ZW5lcihkb2N1bWVudCwgXCJtb3VzZW1vdmVcIiwgb25Nb3VzZU1vdmUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFyRHJhZ01hcmtlcigpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcklkKTtcbiAgICAgICAgZWRpdG9yLnNlc3Npb24ucmVtb3ZlTWFya2VyKGRyYWdTZWxlY3Rpb25NYXJrZXIpO1xuICAgICAgICBkcmFnU2VsZWN0aW9uTWFya2VyID0gbnVsbDtcbiAgICAgICAgZWRpdG9yLiRibG9ja1Njcm9sbGluZyArPSAxO1xuICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLmZyb21PcmllbnRlZFJhbmdlKHJhbmdlKTtcbiAgICAgICAgZWRpdG9yLiRibG9ja1Njcm9sbGluZyAtPSAxO1xuICAgICAgICBpZiAoZWRpdG9yLmlzRm9jdXNlZCgpICYmICFpc0ludGVybmFsKVxuICAgICAgICAgICAgZWRpdG9yLnJlbmRlcmVyLiRjdXJzb3JMYXllci5zZXRCbGlua2luZyghZWRpdG9yLmdldFJlYWRPbmx5KCkpO1xuICAgICAgICByYW5nZSA9IG51bGw7XG4gICAgICAgIGRyYWdDdXJzb3IgPSBudWxsO1xuICAgICAgICBjb3VudGVyID0gMDtcbiAgICAgICAgYXV0b1Njcm9sbFN0YXJ0VGltZSA9IG51bGw7XG4gICAgICAgIGN1cnNvck1vdmVkVGltZSA9IG51bGw7XG4gICAgICAgIGV2ZW50LnJlbW92ZUxpc3RlbmVyKGRvY3VtZW50LCBcIm1vdXNlbW92ZVwiLCBvbk1vdXNlTW92ZSk7XG4gICAgfVxuICAgIHZhciBvbk1vdXNlTW92ZVRpbWVyID0gbnVsbDtcbiAgICBmdW5jdGlvbiBvbk1vdXNlTW92ZSgpIHtcbiAgICAgICAgaWYgKG9uTW91c2VNb3ZlVGltZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgb25Nb3VzZU1vdmVUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9uTW91c2VNb3ZlVGltZXIgIT0gbnVsbCAmJiBkcmFnU2VsZWN0aW9uTWFya2VyKVxuICAgICAgICAgICAgICAgICAgICBjbGVhckRyYWdNYXJrZXIoKTtcbiAgICAgICAgICAgIH0sIDIwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbkFjY2VwdChkYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgdmFyIHR5cGVzID0gZGF0YVRyYW5zZmVyLnR5cGVzO1xuICAgICAgICByZXR1cm4gIXR5cGVzIHx8IEFycmF5LnByb3RvdHlwZS5zb21lLmNhbGwodHlwZXMsIGZ1bmN0aW9uKHR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlID09ICd0ZXh0L3BsYWluJyB8fCB0eXBlID09ICdUZXh0JztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RHJvcEVmZmVjdChlKSB7XG4gICAgICAgIHZhciBjb3B5QWxsb3dlZCA9IFsnY29weScsICdjb3B5bW92ZScsICdhbGwnLCAndW5pbml0aWFsaXplZCddO1xuICAgICAgICB2YXIgbW92ZUFsbG93ZWQgPSBbJ21vdmUnLCAnY29weW1vdmUnLCAnbGlua21vdmUnLCAnYWxsJywgJ3VuaW5pdGlhbGl6ZWQnXTtcblxuICAgICAgICB2YXIgY29weU1vZGlmaWVyU3RhdGUgPSB1c2VyYWdlbnQuaXNNYWMgPyBlLmFsdEtleSA6IGUuY3RybEtleTtcbiAgICAgICAgdmFyIGVmZmVjdEFsbG93ZWQgPSBcInVuaW5pdGlhbGl6ZWRcIjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGVmZmVjdEFsbG93ZWQgPSBlLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgIHZhciBkcm9wRWZmZWN0ID0gXCJub25lXCI7XG5cbiAgICAgICAgaWYgKGNvcHlNb2RpZmllclN0YXRlICYmIGNvcHlBbGxvd2VkLmluZGV4T2YoZWZmZWN0QWxsb3dlZCkgPj0gMClcbiAgICAgICAgICAgIGRyb3BFZmZlY3QgPSBcImNvcHlcIjtcbiAgICAgICAgZWxzZSBpZiAobW92ZUFsbG93ZWQuaW5kZXhPZihlZmZlY3RBbGxvd2VkKSA+PSAwKVxuICAgICAgICAgICAgZHJvcEVmZmVjdCA9IFwibW92ZVwiO1xuICAgICAgICBlbHNlIGlmIChjb3B5QWxsb3dlZC5pbmRleE9mKGVmZmVjdEFsbG93ZWQpID49IDApXG4gICAgICAgICAgICBkcm9wRWZmZWN0ID0gXCJjb3B5XCI7XG5cbiAgICAgICAgcmV0dXJuIGRyb3BFZmZlY3Q7XG4gICAgfVxufVxuXG4oZnVuY3Rpb24oKSB7XG5cbiAgICB0aGlzLmRyYWdXYWl0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBpbnRlcnZhbCA9IERhdGUubm93KCkgLSB0aGlzLm1vdXNlZG93bkV2ZW50LnRpbWU7XG4gICAgICAgIGlmIChpbnRlcnZhbCA+IHRoaXMuZWRpdG9yLmdldERyYWdEZWxheSgpKVxuICAgICAgICAgICAgdGhpcy5zdGFydERyYWcoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5kcmFnV2FpdEVuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy5lZGl0b3IuY29udGFpbmVyO1xuICAgICAgICB0YXJnZXQuZHJhZ2dhYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhcnRTZWxlY3QodGhpcy5tb3VzZWRvd25FdmVudC5nZXREb2N1bWVudFBvc2l0aW9uKCkpO1xuICAgICAgICB0aGlzLnNlbGVjdEVuZCgpO1xuICAgIH07XG5cbiAgICB0aGlzLmRyYWdSZWFkeUVuZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdGhpcy5lZGl0b3IucmVuZGVyZXIuJGN1cnNvckxheWVyLnNldEJsaW5raW5nKCF0aGlzLmVkaXRvci5nZXRSZWFkT25seSgpKTtcbiAgICAgICAgdGhpcy5lZGl0b3IudW5zZXRTdHlsZShcImFjZV9kcmFnZ2luZ1wiKTtcbiAgICAgICAgdGhpcy5lZGl0b3IucmVuZGVyZXIuc2V0Q3Vyc29yU3R5bGUoXCJcIik7XG4gICAgICAgIHRoaXMuZHJhZ1dhaXRFbmQoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zdGFydERyYWcgPSBmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmNhbmNlbERyYWcgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgICAgICB2YXIgdGFyZ2V0ID0gZWRpdG9yLmNvbnRhaW5lcjtcbiAgICAgICAgdGFyZ2V0LmRyYWdnYWJsZSA9IHRydWU7XG4gICAgICAgIGVkaXRvci5yZW5kZXJlci4kY3Vyc29yTGF5ZXIuc2V0QmxpbmtpbmcoZmFsc2UpO1xuICAgICAgICBlZGl0b3Iuc2V0U3R5bGUoXCJhY2VfZHJhZ2dpbmdcIik7XG4gICAgICAgIHZhciBjdXJzb3JTdHlsZSA9IHVzZXJhZ2VudC5pc1dpbiA/IFwiZGVmYXVsdFwiIDogXCJtb3ZlXCI7XG4gICAgICAgIGVkaXRvci5yZW5kZXJlci5zZXRDdXJzb3JTdHlsZShjdXJzb3JTdHlsZSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXCJkcmFnUmVhZHlcIik7XG4gICAgfTtcblxuICAgIHRoaXMub25Nb3VzZURyYWcgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLmVkaXRvci5jb250YWluZXI7XG4gICAgICAgIGlmICh1c2VyYWdlbnQuaXNJRSAmJiB0aGlzLnN0YXRlID09IFwiZHJhZ1JlYWR5XCIpIHtcbiAgICAgICAgICAgIHZhciBkaXN0YW5jZSA9IGNhbGNEaXN0YW5jZSh0aGlzLm1vdXNlZG93bkV2ZW50LngsIHRoaXMubW91c2Vkb3duRXZlbnQueSwgdGhpcy54LCB0aGlzLnkpO1xuICAgICAgICAgICAgaWYgKGRpc3RhbmNlID4gMylcbiAgICAgICAgICAgICAgICB0YXJnZXQuZHJhZ0Ryb3AoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gXCJkcmFnV2FpdFwiKSB7XG4gICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSBjYWxjRGlzdGFuY2UodGhpcy5tb3VzZWRvd25FdmVudC54LCB0aGlzLm1vdXNlZG93bkV2ZW50LnksIHRoaXMueCwgdGhpcy55KTtcbiAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IDApIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQuZHJhZ2dhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFNlbGVjdCh0aGlzLm1vdXNlZG93bkV2ZW50LmdldERvY3VtZW50UG9zaXRpb24oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLiRkcmFnRW5hYmxlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5tb3VzZWRvd25FdmVudCA9IGU7XG4gICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcblxuICAgICAgICB2YXIgaW5TZWxlY3Rpb24gPSBlLmluU2VsZWN0aW9uKCk7XG4gICAgICAgIHZhciBidXR0b24gPSBlLmdldEJ1dHRvbigpO1xuICAgICAgICB2YXIgY2xpY2tDb3VudCA9IGUuZG9tRXZlbnQuZGV0YWlsIHx8IDE7XG4gICAgICAgIGlmIChjbGlja0NvdW50ID09PSAxICYmIGJ1dHRvbiA9PT0gMCAmJiBpblNlbGVjdGlvbikge1xuICAgICAgICAgICAgaWYgKGUuZWRpdG9yLmluTXVsdGlTZWxlY3RNb2RlICYmIChlLmdldEFjY2VsS2V5KCkgfHwgZS5nZXRTaGlmdEtleSgpKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLm1vdXNlZG93bkV2ZW50LnRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgdmFyIGV2ZW50VGFyZ2V0ID0gZS5kb21FdmVudC50YXJnZXQgfHwgZS5kb21FdmVudC5zcmNFbGVtZW50O1xuICAgICAgICAgICAgaWYgKFwidW5zZWxlY3RhYmxlXCIgaW4gZXZlbnRUYXJnZXQpXG4gICAgICAgICAgICAgICAgZXZlbnRUYXJnZXQudW5zZWxlY3RhYmxlID0gXCJvblwiO1xuICAgICAgICAgICAgaWYgKGVkaXRvci5nZXREcmFnRGVsYXkoKSkge1xuICAgICAgICAgICAgICAgIGlmICh1c2VyYWdlbnQuaXNXZWJLaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxEcmFnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1vdXNlVGFyZ2V0ID0gZWRpdG9yLmNvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICAgICAgbW91c2VUYXJnZXQuZHJhZ2dhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZShcImRyYWdXYWl0XCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0RHJhZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jYXB0dXJlTW91c2UoZSwgdGhpcy5vbk1vdXNlRHJhZy5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIGUuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG59KS5jYWxsKERyYWdkcm9wSGFuZGxlci5wcm90b3R5cGUpO1xuXG5cbmZ1bmN0aW9uIGNhbGNEaXN0YW5jZShheCwgYXksIGJ4LCBieSkge1xuICAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coYnggLSBheCwgMikgKyBNYXRoLnBvdyhieSAtIGF5LCAyKSk7XG59XG5cbmV4cG9ydHMuRHJhZ2Ryb3BIYW5kbGVyID0gRHJhZ2Ryb3BIYW5kbGVyO1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9saWIvbmV0XCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL2RvbVwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgZG9tID0gYWNlcXVpcmUoXCIuL2RvbVwiKTtcblxuZXhwb3J0cy5nZXQgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaykge1xuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTtcbiAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB4aHIuc2VuZChudWxsKTtcbn07XG5cbmV4cG9ydHMubG9hZFNjcmlwdCA9IGZ1bmN0aW9uKHBhdGgsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGhlYWQgPSBkb20uZ2V0RG9jdW1lbnRIZWFkKCk7XG4gICAgdmFyIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblxuICAgIHMuc3JjID0gcGF0aDtcbiAgICBoZWFkLmFwcGVuZENoaWxkKHMpO1xuXG4gICAgcy5vbmxvYWQgPSBzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKF8sIGlzQWJvcnQpIHtcbiAgICAgICAgaWYgKGlzQWJvcnQgfHwgIXMucmVhZHlTdGF0ZSB8fCBzLnJlYWR5U3RhdGUgPT0gXCJsb2FkZWRcIiB8fCBzLnJlYWR5U3RhdGUgPT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICBzID0gcy5vbmxvYWQgPSBzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICBpZiAoIWlzQWJvcnQpXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0cy5xdWFsaWZ5VVJMID0gZnVuY3Rpb24odXJsKSB7XG4gICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgYS5ocmVmID0gdXJsO1xuICAgIHJldHVybiBhLmhyZWY7XG59O1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9saWIvZXZlbnRfZW1pdHRlclwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBFdmVudEVtaXR0ZXIgPSB7fTtcbnZhciBzdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbigpIHsgdGhpcy5wcm9wYWdhdGlvblN0b3BwZWQgPSB0cnVlOyB9O1xudmFyIHByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oKSB7IHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7IH07XG5cbkV2ZW50RW1pdHRlci5fZW1pdCA9XG5FdmVudEVtaXR0ZXIuX2Rpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbihldmVudE5hbWUsIGUpIHtcbiAgICB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8ICh0aGlzLl9ldmVudFJlZ2lzdHJ5ID0ge30pO1xuICAgIHRoaXMuX2RlZmF1bHRIYW5kbGVycyB8fCAodGhpcy5fZGVmYXVsdEhhbmRsZXJzID0ge30pO1xuXG4gICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSB8fCBbXTtcbiAgICB2YXIgZGVmYXVsdEhhbmRsZXIgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnNbZXZlbnROYW1lXTtcbiAgICBpZiAoIWxpc3RlbmVycy5sZW5ndGggJiYgIWRlZmF1bHRIYW5kbGVyKVxuICAgICAgICByZXR1cm47XG5cbiAgICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCAhZSlcbiAgICAgICAgZSA9IHt9O1xuXG4gICAgaWYgKCFlLnR5cGUpXG4gICAgICAgIGUudHlwZSA9IGV2ZW50TmFtZTtcbiAgICBpZiAoIWUuc3RvcFByb3BhZ2F0aW9uKVxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbiA9IHN0b3BQcm9wYWdhdGlvbjtcbiAgICBpZiAoIWUucHJldmVudERlZmF1bHQpXG4gICAgICAgIGUucHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVmYXVsdDtcblxuICAgIGxpc3RlbmVycyA9IGxpc3RlbmVycy5zbGljZSgpO1xuICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGlzdGVuZXJzW2ldKGUsIHRoaXMpO1xuICAgICAgICBpZiAoZS5wcm9wYWdhdGlvblN0b3BwZWQpXG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgXG4gICAgaWYgKGRlZmF1bHRIYW5kbGVyICYmICFlLmRlZmF1bHRQcmV2ZW50ZWQpXG4gICAgICAgIHJldHVybiBkZWZhdWx0SGFuZGxlcihlLCB0aGlzKTtcbn07XG5cblxuRXZlbnRFbWl0dGVyLl9zaWduYWwgPSBmdW5jdGlvbihldmVudE5hbWUsIGUpIHtcbiAgICB2YXIgbGlzdGVuZXJzID0gKHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge30pW2V2ZW50TmFtZV07XG4gICAgaWYgKCFsaXN0ZW5lcnMpXG4gICAgICAgIHJldHVybjtcbiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTtcbiAgICBmb3IgKHZhciBpPTA7IGk8bGlzdGVuZXJzLmxlbmd0aDsgaSsrKVxuICAgICAgICBsaXN0ZW5lcnNbaV0oZSwgdGhpcyk7XG59O1xuXG5FdmVudEVtaXR0ZXIub25jZSA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgX3NlbGYgPSB0aGlzO1xuICAgIGNhbGxiYWNrICYmIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGZ1bmN0aW9uIG5ld0NhbGxiYWNrKCkge1xuICAgICAgICBfc2VsZi5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgbmV3Q2FsbGJhY2spO1xuICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH0pO1xufTtcblxuXG5FdmVudEVtaXR0ZXIuc2V0RGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGhhbmRsZXJzID0gdGhpcy5fZGVmYXVsdEhhbmRsZXJzO1xuICAgIGlmICghaGFuZGxlcnMpXG4gICAgICAgIGhhbmRsZXJzID0gdGhpcy5fZGVmYXVsdEhhbmRsZXJzID0ge19kaXNhYmxlZF86IHt9fTtcbiAgICBcbiAgICBpZiAoaGFuZGxlcnNbZXZlbnROYW1lXSkge1xuICAgICAgICB2YXIgb2xkID0gaGFuZGxlcnNbZXZlbnROYW1lXTtcbiAgICAgICAgdmFyIGRpc2FibGVkID0gaGFuZGxlcnMuX2Rpc2FibGVkX1tldmVudE5hbWVdO1xuICAgICAgICBpZiAoIWRpc2FibGVkKVxuICAgICAgICAgICAgaGFuZGxlcnMuX2Rpc2FibGVkX1tldmVudE5hbWVdID0gZGlzYWJsZWQgPSBbXTtcbiAgICAgICAgZGlzYWJsZWQucHVzaChvbGQpO1xuICAgICAgICB2YXIgaSA9IGRpc2FibGVkLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgICBpZiAoaSAhPSAtMSkgXG4gICAgICAgICAgICBkaXNhYmxlZC5zcGxpY2UoaSwgMSk7XG4gICAgfVxuICAgIGhhbmRsZXJzW2V2ZW50TmFtZV0gPSBjYWxsYmFjaztcbn07XG5FdmVudEVtaXR0ZXIucmVtb3ZlRGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGhhbmRsZXJzID0gdGhpcy5fZGVmYXVsdEhhbmRsZXJzO1xuICAgIGlmICghaGFuZGxlcnMpXG4gICAgICAgIHJldHVybjtcbiAgICB2YXIgZGlzYWJsZWQgPSBoYW5kbGVycy5fZGlzYWJsZWRfW2V2ZW50TmFtZV07XG4gICAgXG4gICAgaWYgKGhhbmRsZXJzW2V2ZW50TmFtZV0gPT0gY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIG9sZCA9IGhhbmRsZXJzW2V2ZW50TmFtZV07XG4gICAgICAgIGlmIChkaXNhYmxlZClcbiAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdEhhbmRsZXIoZXZlbnROYW1lLCBkaXNhYmxlZC5wb3AoKSk7XG4gICAgfSBlbHNlIGlmIChkaXNhYmxlZCkge1xuICAgICAgICB2YXIgaSA9IGRpc2FibGVkLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgICBpZiAoaSAhPSAtMSlcbiAgICAgICAgICAgIGRpc2FibGVkLnNwbGljZShpLCAxKTtcbiAgICB9XG59O1xuXG5FdmVudEVtaXR0ZXIub24gPVxuRXZlbnRFbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrLCBjYXB0dXJpbmcpIHtcbiAgICB0aGlzLl9ldmVudFJlZ2lzdHJ5ID0gdGhpcy5fZXZlbnRSZWdpc3RyeSB8fCB7fTtcblxuICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07XG4gICAgaWYgKCFsaXN0ZW5lcnMpXG4gICAgICAgIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSA9IFtdO1xuXG4gICAgaWYgKGxpc3RlbmVycy5pbmRleE9mKGNhbGxiYWNrKSA9PSAtMSlcbiAgICAgICAgbGlzdGVuZXJzW2NhcHR1cmluZyA/IFwidW5zaGlmdFwiIDogXCJwdXNoXCJdKGNhbGxiYWNrKTtcbiAgICByZXR1cm4gY2FsbGJhY2s7XG59O1xuXG5FdmVudEVtaXR0ZXIub2ZmID1cbkV2ZW50RW1pdHRlci5yZW1vdmVMaXN0ZW5lciA9XG5FdmVudEVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHtcbiAgICB0aGlzLl9ldmVudFJlZ2lzdHJ5ID0gdGhpcy5fZXZlbnRSZWdpc3RyeSB8fCB7fTtcblxuICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07XG4gICAgaWYgKCFsaXN0ZW5lcnMpXG4gICAgICAgIHJldHVybjtcblxuICAgIHZhciBpbmRleCA9IGxpc3RlbmVycy5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKVxuICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbn07XG5cbkV2ZW50RW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbihldmVudE5hbWUpIHtcbiAgICBpZiAodGhpcy5fZXZlbnRSZWdpc3RyeSkgdGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdID0gW107XG59O1xuXG5leHBvcnRzLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvbGliL2FwcF9jb25maWdcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvb29wXCIsXCJhY2UvbGliL2V2ZW50X2VtaXR0ZXJcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwibm8gdXNlIHN0cmljdFwiO1xuXG52YXIgb29wID0gYWNlcXVpcmUoXCIuL29vcFwiKTtcbnZhciBFdmVudEVtaXR0ZXIgPSBhY2VxdWlyZShcIi4vZXZlbnRfZW1pdHRlclwiKS5FdmVudEVtaXR0ZXI7XG5cbnZhciBvcHRpb25zUHJvdmlkZXIgPSB7XG4gICAgc2V0T3B0aW9uczogZnVuY3Rpb24ob3B0TGlzdCkge1xuICAgICAgICBPYmplY3Qua2V5cyhvcHRMaXN0KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgICAgdGhpcy5zZXRPcHRpb24oa2V5LCBvcHRMaXN0W2tleV0pO1xuICAgICAgICB9LCB0aGlzKTtcbiAgICB9LFxuICAgIGdldE9wdGlvbnM6IGZ1bmN0aW9uKG9wdGlvbk5hbWVzKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgICAgaWYgKCFvcHRpb25OYW1lcykge1xuICAgICAgICAgICAgb3B0aW9uTmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLiRvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShvcHRpb25OYW1lcykpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG9wdGlvbk5hbWVzO1xuICAgICAgICAgICAgb3B0aW9uTmFtZXMgPSBPYmplY3Qua2V5cyhyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbk5hbWVzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHRoaXMuZ2V0T3B0aW9uKGtleSk7XG4gICAgICAgIH0sIHRoaXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgc2V0T3B0aW9uOiBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgICBpZiAodGhpc1tcIiRcIiArIG5hbWVdID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIG9wdCA9IHRoaXMuJG9wdGlvbnNbbmFtZV07XG4gICAgICAgIGlmICghb3B0KSB7XG4gICAgICAgICAgICByZXR1cm4gd2FybignbWlzc3BlbGxlZCBvcHRpb24gXCInICsgbmFtZSArICdcIicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHQuZm9yd2FyZFRvKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXNbb3B0LmZvcndhcmRUb10gJiYgdGhpc1tvcHQuZm9yd2FyZFRvXS5zZXRPcHRpb24obmFtZSwgdmFsdWUpO1xuXG4gICAgICAgIGlmICghb3B0LmhhbmRsZXNTZXQpXG4gICAgICAgICAgICB0aGlzW1wiJFwiICsgbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgaWYgKG9wdCAmJiBvcHQuc2V0KVxuICAgICAgICAgICAgb3B0LnNldC5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICB9LFxuICAgIGdldE9wdGlvbjogZnVuY3Rpb24obmFtZSkge1xuICAgICAgICB2YXIgb3B0ID0gdGhpcy4kb3B0aW9uc1tuYW1lXTtcbiAgICAgICAgaWYgKCFvcHQpIHtcbiAgICAgICAgICAgIHJldHVybiB3YXJuKCdtaXNzcGVsbGVkIG9wdGlvbiBcIicgKyBuYW1lICsgJ1wiJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdC5mb3J3YXJkVG8pXG4gICAgICAgICAgICByZXR1cm4gdGhpc1tvcHQuZm9yd2FyZFRvXSAmJiB0aGlzW29wdC5mb3J3YXJkVG9dLmdldE9wdGlvbihuYW1lKTtcbiAgICAgICAgcmV0dXJuIG9wdCAmJiBvcHQuZ2V0ID8gb3B0LmdldC5jYWxsKHRoaXMpIDogdGhpc1tcIiRcIiArIG5hbWVdO1xuICAgIH1cbn07XG5cbmZ1bmN0aW9uIHdhcm4obWVzc2FnZSkge1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybilcbiAgICAgICAgY29uc29sZS53YXJuLmFwcGx5KGNvbnNvbGUsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIHJlcG9ydEVycm9yKG1zZywgZGF0YSkge1xuICAgIHZhciBlID0gbmV3IEVycm9yKG1zZyk7XG4gICAgZS5kYXRhID0gZGF0YTtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT0gXCJvYmplY3RcIiAmJiBjb25zb2xlLmVycm9yKVxuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRocm93IGU7IH0pO1xufVxuXG52YXIgQXBwQ29uZmlnID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy4kZGVmYXVsdE9wdGlvbnMgPSB7fTtcbn07XG5cbihmdW5jdGlvbigpIHtcbiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7XG4gICAgdGhpcy5kZWZpbmVPcHRpb25zID0gZnVuY3Rpb24ob2JqLCBwYXRoLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICghb2JqLiRvcHRpb25zKVxuICAgICAgICAgICAgdGhpcy4kZGVmYXVsdE9wdGlvbnNbcGF0aF0gPSBvYmouJG9wdGlvbnMgPSB7fTtcblxuICAgICAgICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgICAgdmFyIG9wdCA9IG9wdGlvbnNba2V5XTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0ID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgb3B0ID0ge2ZvcndhcmRUbzogb3B0fTtcblxuICAgICAgICAgICAgb3B0Lm5hbWUgfHwgKG9wdC5uYW1lID0ga2V5KTtcbiAgICAgICAgICAgIG9iai4kb3B0aW9uc1tvcHQubmFtZV0gPSBvcHQ7XG4gICAgICAgICAgICBpZiAoXCJpbml0aWFsVmFsdWVcIiBpbiBvcHQpXG4gICAgICAgICAgICAgICAgb2JqW1wiJFwiICsgb3B0Lm5hbWVdID0gb3B0LmluaXRpYWxWYWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9vcC5pbXBsZW1lbnQob2JqLCBvcHRpb25zUHJvdmlkZXIpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICB0aGlzLnJlc2V0T3B0aW9ucyA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICBPYmplY3Qua2V5cyhvYmouJG9wdGlvbnMpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgICB2YXIgb3B0ID0gb2JqLiRvcHRpb25zW2tleV07XG4gICAgICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIG9wdClcbiAgICAgICAgICAgICAgICBvYmouc2V0T3B0aW9uKGtleSwgb3B0LnZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlID0gZnVuY3Rpb24ocGF0aCwgbmFtZSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIG9wdHMgPSB0aGlzLiRkZWZhdWx0T3B0aW9uc1twYXRoXSB8fCAodGhpcy4kZGVmYXVsdE9wdGlvbnNbcGF0aF0gPSB7fSk7XG4gICAgICAgIGlmIChvcHRzW25hbWVdKSB7XG4gICAgICAgICAgICBpZiAob3B0cy5mb3J3YXJkVG8pXG4gICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0VmFsdWUob3B0cy5mb3J3YXJkVG8sIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBvcHRzW25hbWVdLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5zZXREZWZhdWx0VmFsdWVzID0gZnVuY3Rpb24ocGF0aCwgb3B0aW9uSGFzaCkge1xuICAgICAgICBPYmplY3Qua2V5cyhvcHRpb25IYXNoKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0VmFsdWUocGF0aCwga2V5LCBvcHRpb25IYXNoW2tleV0pO1xuICAgICAgICB9LCB0aGlzKTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMud2FybiA9IHdhcm47XG4gICAgdGhpcy5yZXBvcnRFcnJvciA9IHJlcG9ydEVycm9yO1xuICAgIFxufSkuY2FsbChBcHBDb25maWcucHJvdG90eXBlKTtcblxuZXhwb3J0cy5BcHBDb25maWcgPSBBcHBDb25maWc7XG5cbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL2NvbmZpZ1wiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpYi9sYW5nXCIsXCJhY2UvbGliL29vcFwiLFwiYWNlL2xpYi9uZXRcIixcImFjZS9saWIvYXBwX2NvbmZpZ1wiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJubyB1c2Ugc3RyaWN0XCI7XG5cbnZhciBsYW5nID0gYWNlcXVpcmUoXCIuL2xpYi9sYW5nXCIpO1xudmFyIG9vcCA9IGFjZXF1aXJlKFwiLi9saWIvb29wXCIpO1xudmFyIG5ldCA9IGFjZXF1aXJlKFwiLi9saWIvbmV0XCIpO1xudmFyIEFwcENvbmZpZyA9IGFjZXF1aXJlKFwiLi9saWIvYXBwX2NvbmZpZ1wiKS5BcHBDb25maWc7XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IG5ldyBBcHBDb25maWcoKTtcblxudmFyIGdsb2JhbCA9IChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcyB8fCB0eXBlb2Ygd2luZG93ICE9IFwidW5kZWZpbmVkXCIgJiYgd2luZG93O1xufSkoKTtcblxudmFyIG9wdGlvbnMgPSB7XG4gICAgcGFja2FnZWQ6IGZhbHNlLFxuICAgIHdvcmtlclBhdGg6IG51bGwsXG4gICAgbW9kZVBhdGg6IG51bGwsXG4gICAgdGhlbWVQYXRoOiBudWxsLFxuICAgIGJhc2VQYXRoOiBcIlwiLFxuICAgIHN1ZmZpeDogXCIuanNcIixcbiAgICAkbW9kdWxlVXJsczoge31cbn07XG5cbmV4cG9ydHMuZ2V0ID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKCFvcHRpb25zLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gY29uZmlnIGtleTogXCIgKyBrZXkpO1xuXG4gICAgcmV0dXJuIG9wdGlvbnNba2V5XTtcbn07XG5cbmV4cG9ydHMuc2V0ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgIGlmICghb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGNvbmZpZyBrZXk6IFwiICsga2V5KTtcblxuICAgIG9wdGlvbnNba2V5XSA9IHZhbHVlO1xufTtcblxuZXhwb3J0cy5hbGwgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbGFuZy5jb3B5T2JqZWN0KG9wdGlvbnMpO1xufTtcbmV4cG9ydHMubW9kdWxlVXJsID0gZnVuY3Rpb24obmFtZSwgY29tcG9uZW50KSB7XG4gICAgaWYgKG9wdGlvbnMuJG1vZHVsZVVybHNbbmFtZV0pXG4gICAgICAgIHJldHVybiBvcHRpb25zLiRtb2R1bGVVcmxzW25hbWVdO1xuXG4gICAgdmFyIHBhcnRzID0gbmFtZS5zcGxpdChcIi9cIik7XG4gICAgY29tcG9uZW50ID0gY29tcG9uZW50IHx8IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdIHx8IFwiXCI7XG4gICAgdmFyIHNlcCA9IGNvbXBvbmVudCA9PSBcInNuaXBwZXRzXCIgPyBcIi9cIiA6IFwiLVwiO1xuICAgIHZhciBiYXNlID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG4gICAgaWYgKGNvbXBvbmVudCA9PSBcIndvcmtlclwiICYmIHNlcCA9PSBcIi1cIikge1xuICAgICAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKFwiXlwiICsgY29tcG9uZW50ICsgXCJbXFxcXC1fXXxbXFxcXC1fXVwiICsgY29tcG9uZW50ICsgXCIkXCIsIFwiZ1wiKTtcbiAgICAgICAgYmFzZSA9IGJhc2UucmVwbGFjZShyZSwgXCJcIik7XG4gICAgfVxuXG4gICAgaWYgKCghYmFzZSB8fCBiYXNlID09IGNvbXBvbmVudCkgJiYgcGFydHMubGVuZ3RoID4gMSlcbiAgICAgICAgYmFzZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdO1xuICAgIHZhciBwYXRoID0gb3B0aW9uc1tjb21wb25lbnQgKyBcIlBhdGhcIl07XG4gICAgaWYgKHBhdGggPT0gbnVsbCkge1xuICAgICAgICBwYXRoID0gb3B0aW9ucy5iYXNlUGF0aDtcbiAgICB9IGVsc2UgaWYgKHNlcCA9PSBcIi9cIikge1xuICAgICAgICBjb21wb25lbnQgPSBzZXAgPSBcIlwiO1xuICAgIH1cbiAgICBpZiAocGF0aCAmJiBwYXRoLnNsaWNlKC0xKSAhPSBcIi9cIilcbiAgICAgICAgcGF0aCArPSBcIi9cIjtcbiAgICByZXR1cm4gcGF0aCArIGNvbXBvbmVudCArIHNlcCArIGJhc2UgKyB0aGlzLmdldChcInN1ZmZpeFwiKTtcbn07XG5cbmV4cG9ydHMuc2V0TW9kdWxlVXJsID0gZnVuY3Rpb24obmFtZSwgc3Vic3QpIHtcbiAgICByZXR1cm4gb3B0aW9ucy4kbW9kdWxlVXJsc1tuYW1lXSA9IHN1YnN0O1xufTtcblxuZXhwb3J0cy4kbG9hZGluZyA9IHt9O1xuZXhwb3J0cy5sb2FkTW9kdWxlID0gZnVuY3Rpb24obW9kdWxlTmFtZSwgb25Mb2FkKSB7XG4gICAgdmFyIG1vZHVsZSwgbW9kdWxlVHlwZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShtb2R1bGVOYW1lKSkge1xuICAgICAgICBtb2R1bGVUeXBlID0gbW9kdWxlTmFtZVswXTtcbiAgICAgICAgbW9kdWxlTmFtZSA9IG1vZHVsZU5hbWVbMV07XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgICAgbW9kdWxlID0gYWNlcXVpcmUobW9kdWxlTmFtZSk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICBpZiAobW9kdWxlICYmICFleHBvcnRzLiRsb2FkaW5nW21vZHVsZU5hbWVdKVxuICAgICAgICByZXR1cm4gb25Mb2FkICYmIG9uTG9hZChtb2R1bGUpO1xuXG4gICAgaWYgKCFleHBvcnRzLiRsb2FkaW5nW21vZHVsZU5hbWVdKVxuICAgICAgICBleHBvcnRzLiRsb2FkaW5nW21vZHVsZU5hbWVdID0gW107XG5cbiAgICBleHBvcnRzLiRsb2FkaW5nW21vZHVsZU5hbWVdLnB1c2gob25Mb2FkKTtcblxuICAgIGlmIChleHBvcnRzLiRsb2FkaW5nW21vZHVsZU5hbWVdLmxlbmd0aCA+IDEpXG4gICAgICAgIHJldHVybjtcblxuICAgIHZhciBhZnRlckxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgYWNlcXVpcmUoW21vZHVsZU5hbWVdLCBmdW5jdGlvbihtb2R1bGUpIHtcbiAgICAgICAgICAgIGV4cG9ydHMuX2VtaXQoXCJsb2FkLm1vZHVsZVwiLCB7bmFtZTogbW9kdWxlTmFtZSwgbW9kdWxlOiBtb2R1bGV9KTtcbiAgICAgICAgICAgIHZhciBsaXN0ZW5lcnMgPSBleHBvcnRzLiRsb2FkaW5nW21vZHVsZU5hbWVdO1xuICAgICAgICAgICAgZXhwb3J0cy4kbG9hZGluZ1ttb2R1bGVOYW1lXSA9IG51bGw7XG4gICAgICAgICAgICBsaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbihvbkxvYWQpIHtcbiAgICAgICAgICAgICAgICBvbkxvYWQgJiYgb25Mb2FkKG1vZHVsZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGlmICghZXhwb3J0cy5nZXQoXCJwYWNrYWdlZFwiKSlcbiAgICAgICAgcmV0dXJuIGFmdGVyTG9hZCgpO1xuICAgIG5ldC5sb2FkU2NyaXB0KGV4cG9ydHMubW9kdWxlVXJsKG1vZHVsZU5hbWUsIG1vZHVsZVR5cGUpLCBhZnRlckxvYWQpO1xufTtcbmluaXQodHJ1ZSk7ZnVuY3Rpb24gaW5pdChwYWNrYWdlZCkge1xuXG4gICAgaWYgKCFnbG9iYWwgfHwgIWdsb2JhbC5kb2N1bWVudClcbiAgICAgICAgcmV0dXJuO1xuICAgIFxuICAgIG9wdGlvbnMucGFja2FnZWQgPSBwYWNrYWdlZCB8fCBhY2VxdWlyZS5wYWNrYWdlZCB8fCBtb2R1bGUucGFja2FnZWQgfHwgKGdsb2JhbC5kZWZpbmUgJiYgZGVmaW5lLnBhY2thZ2VkKTtcblxuICAgIHZhciBzY3JpcHRPcHRpb25zID0ge307XG4gICAgdmFyIHNjcmlwdFVybCA9IFwiXCI7XG4gICAgdmFyIGN1cnJlbnRTY3JpcHQgPSAoZG9jdW1lbnQuY3VycmVudFNjcmlwdCB8fCBkb2N1bWVudC5fY3VycmVudFNjcmlwdCApOyAvLyBuYXRpdmUgb3IgcG9seWZpbGxcbiAgICB2YXIgY3VycmVudERvY3VtZW50ID0gY3VycmVudFNjcmlwdCAmJiBjdXJyZW50U2NyaXB0Lm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQ7XG4gICAgXG4gICAgdmFyIHNjcmlwdHMgPSBjdXJyZW50RG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIik7XG4gICAgZm9yICh2YXIgaT0wOyBpPHNjcmlwdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHNjcmlwdCA9IHNjcmlwdHNbaV07XG5cbiAgICAgICAgdmFyIHNyYyA9IHNjcmlwdC5zcmMgfHwgc2NyaXB0LmdldEF0dHJpYnV0ZShcInNyY1wiKTtcbiAgICAgICAgaWYgKCFzcmMpXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHNjcmlwdC5hdHRyaWJ1dGVzO1xuICAgICAgICBmb3IgKHZhciBqPTAsIGw9YXR0cmlidXRlcy5sZW5ndGg7IGogPCBsOyBqKyspIHtcbiAgICAgICAgICAgIHZhciBhdHRyID0gYXR0cmlidXRlc1tqXTtcbiAgICAgICAgICAgIGlmIChhdHRyLm5hbWUuaW5kZXhPZihcImRhdGEtYWNlLVwiKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHNjcmlwdE9wdGlvbnNbZGVIeXBoZW5hdGUoYXR0ci5uYW1lLnJlcGxhY2UoL15kYXRhLWFjZS0vLCBcIlwiKSldID0gYXR0ci52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtID0gc3JjLm1hdGNoKC9eKC4qKVxcL2FjZShcXC1cXHcrKT9cXC5qcyhcXD98JCkvKTtcbiAgICAgICAgaWYgKG0pXG4gICAgICAgICAgICBzY3JpcHRVcmwgPSBtWzFdO1xuICAgIH1cblxuICAgIGlmIChzY3JpcHRVcmwpIHtcbiAgICAgICAgc2NyaXB0T3B0aW9ucy5iYXNlID0gc2NyaXB0T3B0aW9ucy5iYXNlIHx8IHNjcmlwdFVybDtcbiAgICAgICAgc2NyaXB0T3B0aW9ucy5wYWNrYWdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgc2NyaXB0T3B0aW9ucy5iYXNlUGF0aCA9IHNjcmlwdE9wdGlvbnMuYmFzZTtcbiAgICBzY3JpcHRPcHRpb25zLndvcmtlclBhdGggPSBzY3JpcHRPcHRpb25zLndvcmtlclBhdGggfHwgc2NyaXB0T3B0aW9ucy5iYXNlO1xuICAgIHNjcmlwdE9wdGlvbnMubW9kZVBhdGggPSBzY3JpcHRPcHRpb25zLm1vZGVQYXRoIHx8IHNjcmlwdE9wdGlvbnMuYmFzZTtcbiAgICBzY3JpcHRPcHRpb25zLnRoZW1lUGF0aCA9IHNjcmlwdE9wdGlvbnMudGhlbWVQYXRoIHx8IHNjcmlwdE9wdGlvbnMuYmFzZTtcbiAgICBkZWxldGUgc2NyaXB0T3B0aW9ucy5iYXNlO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHNjcmlwdE9wdGlvbnMpXG4gICAgICAgIGlmICh0eXBlb2Ygc2NyaXB0T3B0aW9uc1trZXldICE9PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgZXhwb3J0cy5zZXQoa2V5LCBzY3JpcHRPcHRpb25zW2tleV0pO1xufVxuXG5leHBvcnRzLmluaXQgPSBpbml0O1xuXG5mdW5jdGlvbiBkZUh5cGhlbmF0ZShzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLy0oLikvZywgZnVuY3Rpb24obSwgbTEpIHsgcmV0dXJuIG0xLnRvVXBwZXJDYXNlKCk7IH0pO1xufVxuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9tb3VzZS9tb3VzZV9oYW5kbGVyXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL2V2ZW50XCIsXCJhY2UvbGliL3VzZXJhZ2VudFwiLFwiYWNlL21vdXNlL2RlZmF1bHRfaGFuZGxlcnNcIixcImFjZS9tb3VzZS9kZWZhdWx0X2d1dHRlcl9oYW5kbGVyXCIsXCJhY2UvbW91c2UvbW91c2VfZXZlbnRcIixcImFjZS9tb3VzZS9kcmFnZHJvcF9oYW5kbGVyXCIsXCJhY2UvY29uZmlnXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGV2ZW50ID0gYWNlcXVpcmUoXCIuLi9saWIvZXZlbnRcIik7XG52YXIgdXNlcmFnZW50ID0gYWNlcXVpcmUoXCIuLi9saWIvdXNlcmFnZW50XCIpO1xudmFyIERlZmF1bHRIYW5kbGVycyA9IGFjZXF1aXJlKFwiLi9kZWZhdWx0X2hhbmRsZXJzXCIpLkRlZmF1bHRIYW5kbGVycztcbnZhciBEZWZhdWx0R3V0dGVySGFuZGxlciA9IGFjZXF1aXJlKFwiLi9kZWZhdWx0X2d1dHRlcl9oYW5kbGVyXCIpLkd1dHRlckhhbmRsZXI7XG52YXIgTW91c2VFdmVudCA9IGFjZXF1aXJlKFwiLi9tb3VzZV9ldmVudFwiKS5Nb3VzZUV2ZW50O1xudmFyIERyYWdkcm9wSGFuZGxlciA9IGFjZXF1aXJlKFwiLi9kcmFnZHJvcF9oYW5kbGVyXCIpLkRyYWdkcm9wSGFuZGxlcjtcbnZhciBjb25maWcgPSBhY2VxdWlyZShcIi4uL2NvbmZpZ1wiKTtcblxudmFyIE1vdXNlSGFuZGxlciA9IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgIHZhciBfc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7XG5cbiAgICBuZXcgRGVmYXVsdEhhbmRsZXJzKHRoaXMpO1xuICAgIG5ldyBEZWZhdWx0R3V0dGVySGFuZGxlcih0aGlzKTtcbiAgICBuZXcgRHJhZ2Ryb3BIYW5kbGVyKHRoaXMpO1xuXG4gICAgdmFyIGZvY3VzRWRpdG9yID0gZnVuY3Rpb24oZSkge1xuICAgICAgICB2YXIgd2luZG93Qmx1cnJlZCA9ICFkb2N1bWVudC5oYXNGb2N1cyB8fCAhZG9jdW1lbnQuaGFzRm9jdXMoKVxuICAgICAgICAgICAgfHwgIWVkaXRvci5pc0ZvY3VzZWQoKSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IChlZGl0b3IudGV4dElucHV0ICYmIGVkaXRvci50ZXh0SW5wdXQuZ2V0RWxlbWVudCgpKTtcbiAgICAgICAgaWYgKHdpbmRvd0JsdXJyZWQpXG4gICAgICAgICAgICB3aW5kb3cuZm9jdXMoKTtcbiAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgfTtcblxuICAgIHZhciBtb3VzZVRhcmdldCA9IGVkaXRvci5yZW5kZXJlci5nZXRNb3VzZUV2ZW50VGFyZ2V0KCk7XG4gICAgZXZlbnQuYWRkTGlzdGVuZXIobW91c2VUYXJnZXQsIFwiY2xpY2tcIiwgdGhpcy5vbk1vdXNlRXZlbnQuYmluZCh0aGlzLCBcImNsaWNrXCIpKTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcihtb3VzZVRhcmdldCwgXCJtb3VzZW1vdmVcIiwgdGhpcy5vbk1vdXNlTW92ZS5iaW5kKHRoaXMsIFwibW91c2Vtb3ZlXCIpKTtcbiAgICBldmVudC5hZGRNdWx0aU1vdXNlRG93bkxpc3RlbmVyKFtcbiAgICAgICAgbW91c2VUYXJnZXQsXG4gICAgICAgIGVkaXRvci5yZW5kZXJlci5zY3JvbGxCYXJWICYmIGVkaXRvci5yZW5kZXJlci5zY3JvbGxCYXJWLmlubmVyLFxuICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQmFySCAmJiBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQmFySC5pbm5lcixcbiAgICAgICAgZWRpdG9yLnRleHRJbnB1dCAmJiBlZGl0b3IudGV4dElucHV0LmdldEVsZW1lbnQoKVxuICAgIF0uZmlsdGVyKEJvb2xlYW4pLCBbNDAwLCAzMDAsIDI1MF0sIHRoaXMsIFwib25Nb3VzZUV2ZW50XCIpO1xuICAgIGV2ZW50LmFkZE1vdXNlV2hlZWxMaXN0ZW5lcihlZGl0b3IuY29udGFpbmVyLCB0aGlzLm9uTW91c2VXaGVlbC5iaW5kKHRoaXMsIFwibW91c2V3aGVlbFwiKSk7XG4gICAgZXZlbnQuYWRkVG91Y2hNb3ZlTGlzdGVuZXIoZWRpdG9yLmNvbnRhaW5lciwgdGhpcy5vblRvdWNoTW92ZS5iaW5kKHRoaXMsIFwidG91Y2htb3ZlXCIpKTtcblxuICAgIHZhciBndXR0ZXJFbCA9IGVkaXRvci5yZW5kZXJlci4kZ3V0dGVyO1xuICAgIGV2ZW50LmFkZExpc3RlbmVyKGd1dHRlckVsLCBcIm1vdXNlZG93blwiLCB0aGlzLm9uTW91c2VFdmVudC5iaW5kKHRoaXMsIFwiZ3V0dGVybW91c2Vkb3duXCIpKTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcihndXR0ZXJFbCwgXCJjbGlja1wiLCB0aGlzLm9uTW91c2VFdmVudC5iaW5kKHRoaXMsIFwiZ3V0dGVyY2xpY2tcIikpO1xuICAgIGV2ZW50LmFkZExpc3RlbmVyKGd1dHRlckVsLCBcImRibGNsaWNrXCIsIHRoaXMub25Nb3VzZUV2ZW50LmJpbmQodGhpcywgXCJndXR0ZXJkYmxjbGlja1wiKSk7XG4gICAgZXZlbnQuYWRkTGlzdGVuZXIoZ3V0dGVyRWwsIFwibW91c2Vtb3ZlXCIsIHRoaXMub25Nb3VzZUV2ZW50LmJpbmQodGhpcywgXCJndXR0ZXJtb3VzZW1vdmVcIikpO1xuXG4gICAgZXZlbnQuYWRkTGlzdGVuZXIobW91c2VUYXJnZXQsIFwibW91c2Vkb3duXCIsIGZvY3VzRWRpdG9yKTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcihndXR0ZXJFbCwgXCJtb3VzZWRvd25cIiwgZm9jdXNFZGl0b3IpO1xuICAgIGlmICh1c2VyYWdlbnQuaXNJRSAmJiBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQmFyVikge1xuICAgICAgICBldmVudC5hZGRMaXN0ZW5lcihlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQmFyVi5lbGVtZW50LCBcIm1vdXNlZG93blwiLCBmb2N1c0VkaXRvcik7XG4gICAgICAgIGV2ZW50LmFkZExpc3RlbmVyKGVkaXRvci5yZW5kZXJlci5zY3JvbGxCYXJILmVsZW1lbnQsIFwibW91c2Vkb3duXCIsIGZvY3VzRWRpdG9yKTtcbiAgICB9XG5cbiAgICBlZGl0b3Iub24oXCJtb3VzZW1vdmVcIiwgZnVuY3Rpb24oZSl7XG4gICAgICAgIGlmIChfc2VsZi5zdGF0ZSB8fCBfc2VsZi4kZHJhZ0RlbGF5IHx8ICFfc2VsZi4kZHJhZ0VuYWJsZWQpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdmFyIGNoYXJhY3RlciA9IGVkaXRvci5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlcyhlLngsIGUueSk7XG4gICAgICAgIHZhciByYW5nZSA9IGVkaXRvci5zZXNzaW9uLnNlbGVjdGlvbi5nZXRSYW5nZSgpO1xuICAgICAgICB2YXIgcmVuZGVyZXIgPSBlZGl0b3IucmVuZGVyZXI7XG5cbiAgICAgICAgaWYgKCFyYW5nZS5pc0VtcHR5KCkgJiYgcmFuZ2UuaW5zaWRlU3RhcnQoY2hhcmFjdGVyLnJvdywgY2hhcmFjdGVyLmNvbHVtbikpIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldEN1cnNvclN0eWxlKFwiZGVmYXVsdFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldEN1cnNvclN0eWxlKFwiXCIpO1xuICAgICAgICB9XG4gICAgfSk7XG59O1xuXG4oZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5vbk1vdXNlRXZlbnQgPSBmdW5jdGlvbihuYW1lLCBlKSB7XG4gICAgICAgIHRoaXMuZWRpdG9yLl9lbWl0KG5hbWUsIG5ldyBNb3VzZUV2ZW50KGUsIHRoaXMuZWRpdG9yKSk7XG4gICAgfTtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBmdW5jdGlvbihuYW1lLCBlKSB7XG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLmVkaXRvci5fZXZlbnRSZWdpc3RyeSAmJiB0aGlzLmVkaXRvci5fZXZlbnRSZWdpc3RyeS5tb3VzZW1vdmU7XG4gICAgICAgIGlmICghbGlzdGVuZXJzIHx8ICFsaXN0ZW5lcnMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuZWRpdG9yLl9lbWl0KG5hbWUsIG5ldyBNb3VzZUV2ZW50KGUsIHRoaXMuZWRpdG9yKSk7XG4gICAgfTtcblxuICAgIHRoaXMub25Nb3VzZVdoZWVsID0gZnVuY3Rpb24obmFtZSwgZSkge1xuICAgICAgICB2YXIgbW91c2VFdmVudCA9IG5ldyBNb3VzZUV2ZW50KGUsIHRoaXMuZWRpdG9yKTtcbiAgICAgICAgbW91c2VFdmVudC5zcGVlZCA9IHRoaXMuJHNjcm9sbFNwZWVkICogMjtcbiAgICAgICAgbW91c2VFdmVudC53aGVlbFggPSBlLndoZWVsWDtcbiAgICAgICAgbW91c2VFdmVudC53aGVlbFkgPSBlLndoZWVsWTtcblxuICAgICAgICB0aGlzLmVkaXRvci5fZW1pdChuYW1lLCBtb3VzZUV2ZW50KTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAobmFtZSwgZSkge1xuICAgICAgICB2YXIgbW91c2VFdmVudCA9IG5ldyBNb3VzZUV2ZW50KGUsIHRoaXMuZWRpdG9yKTtcbiAgICAgICAgbW91c2VFdmVudC5zcGVlZCA9IDE7Ly90aGlzLiRzY3JvbGxTcGVlZCAqIDI7XG4gICAgICAgIG1vdXNlRXZlbnQud2hlZWxYID0gZS53aGVlbFg7XG4gICAgICAgIG1vdXNlRXZlbnQud2hlZWxZID0gZS53aGVlbFk7XG4gICAgICAgIHRoaXMuZWRpdG9yLl9lbWl0KG5hbWUsIG1vdXNlRXZlbnQpO1xuICAgIH07XG5cbiAgICB0aGlzLnNldFN0YXRlID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIH07XG5cbiAgICB0aGlzLmNhcHR1cmVNb3VzZSA9IGZ1bmN0aW9uKGV2LCBtb3VzZU1vdmVIYW5kbGVyKSB7XG4gICAgICAgIHRoaXMueCA9IGV2Lng7XG4gICAgICAgIHRoaXMueSA9IGV2Lnk7XG5cbiAgICAgICAgdGhpcy5pc01vdXNlUHJlc3NlZCA9IHRydWU7XG4gICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMuZWRpdG9yLnJlbmRlcmVyO1xuICAgICAgICBpZiAocmVuZGVyZXIuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yKVxuICAgICAgICAgICAgcmVuZGVyZXIuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yID0gbnVsbDtcblxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHZhciBvbk1vdXNlTW92ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmICghZSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHVzZXJhZ2VudC5pc1dlYktpdCAmJiAhZS53aGljaCAmJiBzZWxmLnJlbGVhc2VNb3VzZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5yZWxlYXNlTW91c2UoKTtcblxuICAgICAgICAgICAgc2VsZi54ID0gZS5jbGllbnRYO1xuICAgICAgICAgICAgc2VsZi55ID0gZS5jbGllbnRZO1xuICAgICAgICAgICAgbW91c2VNb3ZlSGFuZGxlciAmJiBtb3VzZU1vdmVIYW5kbGVyKGUpO1xuICAgICAgICAgICAgc2VsZi5tb3VzZUV2ZW50ID0gbmV3IE1vdXNlRXZlbnQoZSwgc2VsZi5lZGl0b3IpO1xuICAgICAgICAgICAgc2VsZi4kbW91c2VNb3ZlZCA9IHRydWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIG9uQ2FwdHVyZUVuZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJJZCk7XG4gICAgICAgICAgICBvbkNhcHR1cmVJbnRlcnZhbCgpO1xuICAgICAgICAgICAgc2VsZltzZWxmLnN0YXRlICsgXCJFbmRcIl0gJiYgc2VsZltzZWxmLnN0YXRlICsgXCJFbmRcIl0oZSk7XG4gICAgICAgICAgICBzZWxmLnN0YXRlID0gXCJcIjtcbiAgICAgICAgICAgIGlmIChyZW5kZXJlci4ka2VlcFRleHRBcmVhQXRDdXJzb3IgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJlbmRlcmVyLiRrZWVwVGV4dEFyZWFBdEN1cnNvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVuZGVyZXIuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLmlzTW91c2VQcmVzc2VkID0gZmFsc2U7XG4gICAgICAgICAgICBzZWxmLiRvbkNhcHR1cmVNb3VzZU1vdmUgPSBzZWxmLnJlbGVhc2VNb3VzZSA9IG51bGw7XG4gICAgICAgICAgICBlICYmIHNlbGYub25Nb3VzZUV2ZW50KFwibW91c2V1cFwiLCBlKTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgb25DYXB0dXJlSW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHNlbGZbc2VsZi5zdGF0ZV0gJiYgc2VsZltzZWxmLnN0YXRlXSgpO1xuICAgICAgICAgICAgc2VsZi4kbW91c2VNb3ZlZCA9IGZhbHNlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh1c2VyYWdlbnQuaXNPbGRJRSAmJiBldi5kb21FdmVudC50eXBlID09IFwiZGJsY2xpY2tcIikge1xuICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7b25DYXB0dXJlRW5kKGV2KTt9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYuJG9uQ2FwdHVyZU1vdXNlTW92ZSA9IG9uTW91c2VNb3ZlO1xuICAgICAgICBzZWxmLnJlbGVhc2VNb3VzZSA9IGV2ZW50LmNhcHR1cmUodGhpcy5lZGl0b3IuY29udGFpbmVyLCBvbk1vdXNlTW92ZSwgb25DYXB0dXJlRW5kKTtcbiAgICAgICAgdmFyIHRpbWVySWQgPSBzZXRJbnRlcnZhbChvbkNhcHR1cmVJbnRlcnZhbCwgMjApO1xuICAgIH07XG4gICAgdGhpcy5yZWxlYXNlTW91c2UgPSBudWxsO1xuICAgIHRoaXMuY2FuY2VsQ29udGV4dE1lbnUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHN0b3AgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAoZSAmJiBlLmRvbUV2ZW50ICYmIGUuZG9tRXZlbnQudHlwZSAhPSBcImNvbnRleHRtZW51XCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3Iub2ZmKFwibmF0aXZlY29udGV4dG1lbnVcIiwgc3RvcCk7XG4gICAgICAgICAgICBpZiAoZSAmJiBlLmRvbUV2ZW50KVxuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BFdmVudChlLmRvbUV2ZW50KTtcbiAgICAgICAgfS5iaW5kKHRoaXMpO1xuICAgICAgICBzZXRUaW1lb3V0KHN0b3AsIDEwKTtcbiAgICAgICAgdGhpcy5lZGl0b3Iub24oXCJuYXRpdmVjb250ZXh0bWVudVwiLCBzdG9wKTtcbiAgICB9O1xufSkuY2FsbChNb3VzZUhhbmRsZXIucHJvdG90eXBlKTtcblxuY29uZmlnLmRlZmluZU9wdGlvbnMoTW91c2VIYW5kbGVyLnByb3RvdHlwZSwgXCJtb3VzZUhhbmRsZXJcIiwge1xuICAgIHNjcm9sbFNwZWVkOiB7aW5pdGlhbFZhbHVlOiAyfSxcbiAgICBkcmFnRGVsYXk6IHtpbml0aWFsVmFsdWU6ICh1c2VyYWdlbnQuaXNNYWMgPyAxNTAgOiAwKX0sXG4gICAgZHJhZ0VuYWJsZWQ6IHtpbml0aWFsVmFsdWU6IHRydWV9LFxuICAgIGZvY3VzVGltb3V0OiB7aW5pdGlhbFZhbHVlOiAwfSxcbiAgICB0b29sdGlwRm9sbG93c01vdXNlOiB7aW5pdGlhbFZhbHVlOiB0cnVlfVxufSk7XG5cblxuZXhwb3J0cy5Nb3VzZUhhbmRsZXIgPSBNb3VzZUhhbmRsZXI7XG59KTtcblxuYWNlLmRlZmluZShcImFjZS9tb3VzZS9mb2xkX2hhbmRsZXJcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBGb2xkSGFuZGxlcihlZGl0b3IpIHtcblxuICAgIGVkaXRvci5vbihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gZS5nZXREb2N1bWVudFBvc2l0aW9uKCk7XG4gICAgICAgIHZhciBzZXNzaW9uID0gZWRpdG9yLnNlc3Npb247XG4gICAgICAgIHZhciBmb2xkID0gc2Vzc2lvbi5nZXRGb2xkQXQocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4sIDEpO1xuICAgICAgICBpZiAoZm9sZCkge1xuICAgICAgICAgICAgaWYgKGUuZ2V0QWNjZWxLZXkoKSlcbiAgICAgICAgICAgICAgICBzZXNzaW9uLnJlbW92ZUZvbGQoZm9sZCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgc2Vzc2lvbi5leHBhbmRGb2xkKGZvbGQpO1xuXG4gICAgICAgICAgICBlLnN0b3AoKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgZWRpdG9yLm9uKFwiZ3V0dGVyY2xpY2tcIiwgZnVuY3Rpb24oZSkge1xuICAgICAgICB2YXIgZ3V0dGVyUmVnaW9uID0gZWRpdG9yLnJlbmRlcmVyLiRndXR0ZXJMYXllci5nZXRSZWdpb24oZSk7XG5cbiAgICAgICAgaWYgKGd1dHRlclJlZ2lvbiA9PSBcImZvbGRXaWRnZXRzXCIpIHtcbiAgICAgICAgICAgIHZhciByb3cgPSBlLmdldERvY3VtZW50UG9zaXRpb24oKS5yb3c7XG4gICAgICAgICAgICB2YXIgc2Vzc2lvbiA9IGVkaXRvci5zZXNzaW9uO1xuICAgICAgICAgICAgaWYgKHNlc3Npb24uZm9sZFdpZGdldHMgJiYgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3ddKVxuICAgICAgICAgICAgICAgIGVkaXRvci5zZXNzaW9uLm9uRm9sZFdpZGdldENsaWNrKHJvdywgZSk7XG4gICAgICAgICAgICBpZiAoIWVkaXRvci5pc0ZvY3VzZWQoKSlcbiAgICAgICAgICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgICAgICAgIGUuc3RvcCgpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBlZGl0b3Iub24oXCJndXR0ZXJkYmxjbGlja1wiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciBndXR0ZXJSZWdpb24gPSBlZGl0b3IucmVuZGVyZXIuJGd1dHRlckxheWVyLmdldFJlZ2lvbihlKTtcblxuICAgICAgICBpZiAoZ3V0dGVyUmVnaW9uID09IFwiZm9sZFdpZGdldHNcIikge1xuICAgICAgICAgICAgdmFyIHJvdyA9IGUuZ2V0RG9jdW1lbnRQb3NpdGlvbigpLnJvdztcbiAgICAgICAgICAgIHZhciBzZXNzaW9uID0gZWRpdG9yLnNlc3Npb247XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHNlc3Npb24uZ2V0UGFyZW50Rm9sZFJhbmdlRGF0YShyb3csIHRydWUpO1xuICAgICAgICAgICAgdmFyIHJhbmdlID0gZGF0YS5yYW5nZSB8fCBkYXRhLmZpcnN0UmFuZ2U7XG5cbiAgICAgICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgICAgICAgIHJvdyA9IHJhbmdlLnN0YXJ0LnJvdztcbiAgICAgICAgICAgICAgICB2YXIgZm9sZCA9IHNlc3Npb24uZ2V0Rm9sZEF0KHJvdywgc2Vzc2lvbi5nZXRMaW5lKHJvdykubGVuZ3RoLCAxKTtcblxuICAgICAgICAgICAgICAgIGlmIChmb2xkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlRm9sZChmb2xkKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmFkZEZvbGQoXCIuLi5cIiwgcmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoe3JvdzogcmFuZ2Uuc3RhcnQucm93LCBjb2x1bW46IDB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlLnN0b3AoKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5leHBvcnRzLkZvbGRIYW5kbGVyID0gRm9sZEhhbmRsZXI7XG5cbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL2tleWJvYXJkL2tleWJpbmRpbmdcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIva2V5c1wiLFwiYWNlL2xpYi9ldmVudFwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBrZXlVdGlsICA9IGFjZXF1aXJlKFwiLi4vbGliL2tleXNcIik7XG52YXIgZXZlbnQgPSBhY2VxdWlyZShcIi4uL2xpYi9ldmVudFwiKTtcblxudmFyIEtleUJpbmRpbmcgPSBmdW5jdGlvbihlZGl0b3IpIHtcbiAgICB0aGlzLiRlZGl0b3IgPSBlZGl0b3I7XG4gICAgdGhpcy4kZGF0YSA9IHtlZGl0b3I6IGVkaXRvcn07XG4gICAgdGhpcy4kaGFuZGxlcnMgPSBbXTtcbiAgICB0aGlzLnNldERlZmF1bHRIYW5kbGVyKGVkaXRvci5jb21tYW5kcyk7XG59O1xuXG4oZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXREZWZhdWx0SGFuZGxlciA9IGZ1bmN0aW9uKGtiKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlS2V5Ym9hcmRIYW5kbGVyKHRoaXMuJGRlZmF1bHRIYW5kbGVyKTtcbiAgICAgICAgdGhpcy4kZGVmYXVsdEhhbmRsZXIgPSBrYjtcbiAgICAgICAgdGhpcy5hZGRLZXlib2FyZEhhbmRsZXIoa2IsIDApO1xuICAgIH07XG5cbiAgICB0aGlzLnNldEtleWJvYXJkSGFuZGxlciA9IGZ1bmN0aW9uKGtiKSB7XG4gICAgICAgIHZhciBoID0gdGhpcy4kaGFuZGxlcnM7XG4gICAgICAgIGlmIChoW2gubGVuZ3RoIC0gMV0gPT0ga2IpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgd2hpbGUgKGhbaC5sZW5ndGggLSAxXSAmJiBoW2gubGVuZ3RoIC0gMV0gIT0gdGhpcy4kZGVmYXVsdEhhbmRsZXIpXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUtleWJvYXJkSGFuZGxlcihoW2gubGVuZ3RoIC0gMV0pO1xuXG4gICAgICAgIHRoaXMuYWRkS2V5Ym9hcmRIYW5kbGVyKGtiLCAxKTtcbiAgICB9O1xuXG4gICAgdGhpcy5hZGRLZXlib2FyZEhhbmRsZXIgPSBmdW5jdGlvbihrYiwgcG9zKSB7XG4gICAgICAgIGlmICgha2IpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0eXBlb2Yga2IgPT0gXCJmdW5jdGlvblwiICYmICFrYi5oYW5kbGVLZXlib2FyZClcbiAgICAgICAgICAgIGtiLmhhbmRsZUtleWJvYXJkID0ga2I7XG4gICAgICAgIHZhciBpID0gdGhpcy4kaGFuZGxlcnMuaW5kZXhPZihrYik7XG4gICAgICAgIGlmIChpICE9IC0xKVxuICAgICAgICAgICAgdGhpcy4kaGFuZGxlcnMuc3BsaWNlKGksIDEpO1xuXG4gICAgICAgIGlmIChwb3MgPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhpcy4kaGFuZGxlcnMucHVzaChrYik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuJGhhbmRsZXJzLnNwbGljZShwb3MsIDAsIGtiKTtcblxuICAgICAgICBpZiAoaSA9PSAtMSAmJiBrYi5hdHRhY2gpXG4gICAgICAgICAgICBrYi5hdHRhY2godGhpcy4kZWRpdG9yKTtcbiAgICB9O1xuXG4gICAgdGhpcy5yZW1vdmVLZXlib2FyZEhhbmRsZXIgPSBmdW5jdGlvbihrYikge1xuICAgICAgICB2YXIgaSA9IHRoaXMuJGhhbmRsZXJzLmluZGV4T2Yoa2IpO1xuICAgICAgICBpZiAoaSA9PSAtMSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpcy4kaGFuZGxlcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICBrYi5kZXRhY2ggJiYga2IuZGV0YWNoKHRoaXMuJGVkaXRvcik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICB0aGlzLmdldEtleWJvYXJkSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kaGFuZGxlcnNbdGhpcy4kaGFuZGxlcnMubGVuZ3RoIC0gMV07XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmdldFN0YXR1c1RleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLiRkYXRhO1xuICAgICAgICB2YXIgZWRpdG9yID0gZGF0YS5lZGl0b3I7XG4gICAgICAgIHJldHVybiB0aGlzLiRoYW5kbGVycy5tYXAoZnVuY3Rpb24oaCkge1xuICAgICAgICAgICAgcmV0dXJuIGguZ2V0U3RhdHVzVGV4dCAmJiBoLmdldFN0YXR1c1RleHQoZWRpdG9yLCBkYXRhKSB8fCBcIlwiO1xuICAgICAgICB9KS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG4gICAgfTtcblxuICAgIHRoaXMuJGNhbGxLZXlib2FyZEhhbmRsZXJzID0gZnVuY3Rpb24oaGFzaElkLCBrZXlTdHJpbmcsIGtleUNvZGUsIGUpIHtcbiAgICAgICAgdmFyIHRvRXhlY3V0ZTtcbiAgICAgICAgdmFyIHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgdmFyIGNvbW1hbmRzID0gdGhpcy4kZWRpdG9yLmNvbW1hbmRzO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLiRoYW5kbGVycy5sZW5ndGg7IGktLTspIHtcbiAgICAgICAgICAgIHRvRXhlY3V0ZSA9IHRoaXMuJGhhbmRsZXJzW2ldLmhhbmRsZUtleWJvYXJkKFxuICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEsIGhhc2hJZCwga2V5U3RyaW5nLCBrZXlDb2RlLCBlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCF0b0V4ZWN1dGUgfHwgIXRvRXhlY3V0ZS5jb21tYW5kKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKHRvRXhlY3V0ZS5jb21tYW5kID09IFwibnVsbFwiKSB7XG4gICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBjb21tYW5kcy5leGVjKHRvRXhlY3V0ZS5jb21tYW5kLCB0aGlzLiRlZGl0b3IsIHRvRXhlY3V0ZS5hcmdzLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdWNjZXNzICYmIGUgJiYgaGFzaElkICE9IC0xICYmIFxuICAgICAgICAgICAgICAgIHRvRXhlY3V0ZS5wYXNzRXZlbnQgIT0gdHJ1ZSAmJiB0b0V4ZWN1dGUuY29tbWFuZC5wYXNzRXZlbnQgIT0gdHJ1ZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcEV2ZW50KGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICghc3VjY2VzcyAmJiBoYXNoSWQgPT0gLTEpIHtcbiAgICAgICAgICAgIHRvRXhlY3V0ZSA9IHtjb21tYW5kOiBcImluc2VydHN0cmluZ1wifTtcbiAgICAgICAgICAgIHN1Y2Nlc3MgPSBjb21tYW5kcy5leGVjKFwiaW5zZXJ0c3RyaW5nXCIsIHRoaXMuJGVkaXRvciwga2V5U3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgdGhpcy4kZWRpdG9yLl9zaWduYWwpXG4gICAgICAgICAgICB0aGlzLiRlZGl0b3IuX3NpZ25hbChcImtleWJvYXJkQWN0aXZpdHlcIiwgdG9FeGVjdXRlKTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgIH07XG5cbiAgICB0aGlzLm9uQ29tbWFuZEtleSA9IGZ1bmN0aW9uKGUsIGhhc2hJZCwga2V5Q29kZSkge1xuICAgICAgICB2YXIga2V5U3RyaW5nID0ga2V5VXRpbC5rZXlDb2RlVG9TdHJpbmcoa2V5Q29kZSk7XG4gICAgICAgIHRoaXMuJGNhbGxLZXlib2FyZEhhbmRsZXJzKGhhc2hJZCwga2V5U3RyaW5nLCBrZXlDb2RlLCBlKTtcbiAgICB9O1xuXG4gICAgdGhpcy5vblRleHRJbnB1dCA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgICAgdGhpcy4kY2FsbEtleWJvYXJkSGFuZGxlcnMoLTEsIHRleHQpO1xuICAgIH07XG5cbn0pLmNhbGwoS2V5QmluZGluZy5wcm90b3R5cGUpO1xuXG5leHBvcnRzLktleUJpbmRpbmcgPSBLZXlCaW5kaW5nO1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvbGliL2JpZGl1dGlsXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIEFyYWJpY0FsZWZCZXRJbnRlcnZhbHNCZWdpbmUgPSBbJ1xcdTA2MjEnLCAnXFx1MDY0MSddO1xudmFyIEFyYWJpY0FsZWZCZXRJbnRlcnZhbHNFbmQgPSBbJ1xcdTA2M0EnLCAnXFx1MDY0YSddO1xudmFyIGRpciA9IDAsIGhpTGV2ZWwgPSAwO1xudmFyIGxhc3RBcmFiaWMgPSBmYWxzZSwgaGFzVUJBVF9BTCA9IGZhbHNlLCAgaGFzVUJBVF9CID0gZmFsc2UsICBoYXNVQkFUX1MgPSBmYWxzZSwgaGFzQmxvY2tTZXAgPSBmYWxzZSwgaGFzU2VnU2VwID0gZmFsc2U7XG5cbnZhciBpbXBUYWJfTFRSID0gW1x0W1x0MCxcdFx0MyxcdFx0MCxcdFx0MSxcdFx0MCxcdFx0MCxcdFx0MFx0XSxcdFtcdDAsXHRcdDMsXHRcdDAsXHRcdDEsXHRcdDIsXHRcdDIsXHRcdDBcdF0sXHRbXHQwLFx0XHQzLFx0XHQwLFx0XHQweDExLFx0XHQyLFx0XHQwLFx0XHQxXHRdLFx0W1x0MCxcdFx0MyxcdFx0NSxcdFx0NSxcdFx0NCxcdFx0MSxcdFx0MFx0XSxcdFtcdDAsXHRcdDMsXHRcdDB4MTUsXHRcdDB4MTUsXHRcdDQsXHRcdDAsXHRcdDFcdF0sXHRbXHQwLFx0XHQzLFx0XHQ1LFx0XHQ1LFx0XHQ0LFx0XHQyLFx0XHQwXHRdXG5dO1xuXG52YXIgaW1wVGFiX1JUTCA9IFtcdFtcdDIsXHRcdDAsXHRcdDEsXHRcdDEsXHRcdDAsXHRcdDEsXHRcdDBcdF0sXHRbXHQyLFx0XHQwLFx0XHQxLFx0XHQxLFx0XHQwLFx0XHQyLFx0XHQwXHRdLFx0W1x0MixcdFx0MCxcdFx0MixcdFx0MSxcdFx0MyxcdFx0MixcdFx0MFx0XSxcdFtcdDIsXHRcdDAsXHRcdDIsXHRcdDB4MjEsXHRcdDMsXHRcdDEsXHRcdDFcdF1cbl07XG5cbnZhciBMVFIgPSAwLCBSVEwgPSAxO1xuXG52YXIgTCA9IDA7XG52YXIgUiA9IDE7XG52YXIgRU4gPSAyO1xudmFyIEFOID0gMztcbnZhciBPTiA9IDQ7XG52YXIgQiA9IDU7XG52YXIgUyA9IDY7XG52YXIgQUwgPSA3O1xudmFyIFdTID0gODtcbnZhciBDUyA9IDk7XG52YXIgRVMgPSAxMDtcbnZhciBFVCA9IDExO1xudmFyIE5TTSA9IDEyO1xudmFyIExSRSA9IDEzO1xudmFyIFJMRSA9IDE0O1xudmFyIFBERiA9IDE1O1xudmFyIExSTyA9IDE2O1xudmFyIFJMTyA9IDE3O1xudmFyIEJOID0gMTg7XG5cbnZhciBVbmljb2RlVEJMMDAgPSBbXG5CTixCTixCTixCTixCTixCTixCTixCTixCTixTLEIsUyxXUyxCLEJOLEJOLFxuQk4sQk4sQk4sQk4sQk4sQk4sQk4sQk4sQk4sQk4sQk4sQk4sQixCLEIsUyxcbldTLE9OLE9OLEVULEVULEVULE9OLE9OLE9OLE9OLE9OLEVTLENTLEVTLENTLENTLFxuRU4sRU4sRU4sRU4sRU4sRU4sRU4sRU4sRU4sRU4sQ1MsT04sT04sT04sT04sT04sXG5PTixMLEwsTCxMLEwsTCxMLEwsTCxMLEwsTCxMLEwsTCxcbkwsTCxMLEwsTCxMLEwsTCxMLEwsTCxPTixPTixPTixPTixPTixcbk9OLEwsTCxMLEwsTCxMLEwsTCxMLEwsTCxMLEwsTCxMLFxuTCxMLEwsTCxMLEwsTCxMLEwsTCxMLE9OLE9OLE9OLE9OLEJOLFxuQk4sQk4sQk4sQk4sQk4sQixCTixCTixCTixCTixCTixCTixCTixCTixCTixCTixcbkJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLFxuQ1MsT04sRVQsRVQsRVQsRVQsT04sT04sT04sT04sTCxPTixPTixCTixPTixPTixcbkVULEVULEVOLEVOLE9OLEwsT04sT04sT04sRU4sTCxPTixPTixPTixPTixPTlxuXTtcblxudmFyIFVuaWNvZGVUQkwyMCA9IFtcbldTLFdTLFdTLFdTLFdTLFdTLFdTLFdTLFdTLFdTLFdTLEJOLEJOLEJOLEwsUlx0LFxuT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sXG5PTixPTixPTixPTixPTixPTixPTixPTixXUyxCLExSRSxSTEUsUERGLExSTyxSTE8sQ1MsXG5FVCxFVCxFVCxFVCxFVCxPTixPTixPTixPTixPTixPTixPTixPTixPTixPTixPTixcbk9OLE9OLE9OLE9OLENTLE9OLE9OLE9OLE9OLE9OLE9OLE9OLE9OLE9OLE9OLE9OLFxuT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sV1Ncbl07XG5cbmZ1bmN0aW9uIF9jb21wdXRlTGV2ZWxzKGNoYXJzLCBsZXZlbHMsIGxlbiwgY2hhclR5cGVzKSB7XG5cdHZhciBpbXBUYWIgPSBkaXIgPyBpbXBUYWJfUlRMIDogaW1wVGFiX0xUUlxuXHRcdCwgcHJldlN0YXRlID0gbnVsbCwgbmV3Q2xhc3MgPSBudWxsLCBuZXdMZXZlbCA9IG51bGwsIG5ld1N0YXRlID0gMFxuXHRcdCwgYWN0aW9uID0gbnVsbCwgY29uZCA9IG51bGwsIGNvbmRQb3MgPSAtMSwgaSA9IG51bGwsIGl4ID0gbnVsbCwgY2xhc3NlcyA9IFtdO1xuXG5cdGlmICghY2hhclR5cGVzKSB7XG5cdFx0Zm9yIChpID0gMCwgY2hhclR5cGVzID0gW107IGkgPCBsZW47IGkrKykge1xuXHRcdFx0Y2hhclR5cGVzW2ldID0gX2dldENoYXJhY3RlclR5cGUoY2hhcnNbaV0pO1xuXHRcdH1cblx0fVxuXHRoaUxldmVsID0gZGlyO1xuXHRsYXN0QXJhYmljID0gZmFsc2U7XG5cdGhhc1VCQVRfQUwgPSBmYWxzZTtcblx0aGFzVUJBVF9CID0gZmFsc2U7XG5cdGhhc1VCQVRfUyA9IGZhbHNlO1xuXHRmb3IgKGl4ID0gMDsgaXggPCBsZW47IGl4Kyspe1xuXHRcdHByZXZTdGF0ZSA9IG5ld1N0YXRlO1xuXHRcdGNsYXNzZXNbaXhdID0gbmV3Q2xhc3MgPSBfZ2V0Q2hhckNsYXNzKGNoYXJzLCBjaGFyVHlwZXMsIGNsYXNzZXMsIGl4KTtcblx0XHRuZXdTdGF0ZSA9IGltcFRhYltwcmV2U3RhdGVdW25ld0NsYXNzXTtcblx0XHRhY3Rpb24gPSBuZXdTdGF0ZSAmIDB4RjA7XG5cdFx0bmV3U3RhdGUgJj0gMHgwRjtcblx0XHRsZXZlbHNbaXhdID0gbmV3TGV2ZWwgPSBpbXBUYWJbbmV3U3RhdGVdWzVdO1xuXHRcdGlmIChhY3Rpb24gPiAwKXtcblx0XHRcdGlmIChhY3Rpb24gPT0gMHgxMCl7XG5cdFx0XHRcdGZvcihpID0gY29uZFBvczsgaSA8IGl4OyBpKyspe1xuXHRcdFx0XHRcdGxldmVsc1tpXSA9IDE7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uZFBvcyA9IC0xO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uZFBvcyA9IC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25kID0gaW1wVGFiW25ld1N0YXRlXVs2XTtcblx0XHRpZiAoY29uZCl7XG5cdFx0XHRpZihjb25kUG9zID09IC0xKXtcblx0XHRcdFx0Y29uZFBvcyA9IGl4O1xuXHRcdFx0fVxuXHRcdH1lbHNle1xuXHRcdFx0aWYgKGNvbmRQb3MgPiAtMSl7XG5cdFx0XHRcdGZvcihpID0gY29uZFBvczsgaSA8IGl4OyBpKyspe1xuXHRcdFx0XHRcdGxldmVsc1tpXSA9IG5ld0xldmVsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbmRQb3MgPSAtMTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGNoYXJUeXBlc1tpeF0gPT0gQil7XG5cdFx0XHRsZXZlbHNbaXhdID0gMDtcblx0XHR9XG5cdFx0aGlMZXZlbCB8PSBuZXdMZXZlbDtcblx0fVxuXHRpZiAoaGFzVUJBVF9TKXtcblx0XHRmb3IoaSA9IDA7IGkgPCBsZW47IGkrKyl7XG5cdFx0XHRpZihjaGFyVHlwZXNbaV0gPT0gUyl7XG5cdFx0XHRcdGxldmVsc1tpXSA9IGRpcjtcblx0XHRcdFx0Zm9yKHZhciBqID0gaSAtIDE7IGogPj0gMDsgai0tKXtcblx0XHRcdFx0XHRpZihjaGFyVHlwZXNbal0gPT0gV1Mpe1xuXHRcdFx0XHRcdFx0bGV2ZWxzW2pdID0gZGlyO1xuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIF9pbnZlcnRMZXZlbChsZXYsIGxldmVscywgX2FycmF5KSB7XG5cdGlmIChoaUxldmVsIDwgbGV2KXtcblx0XHRyZXR1cm47XG5cdH1cblx0aWYgKGxldiA9PSAxICYmIGRpciA9PSBSVEwgJiYgIWhhc1VCQVRfQil7XG5cdFx0X2FycmF5LnJldmVyc2UoKTtcblx0XHRyZXR1cm47XG5cdH1cblx0dmFyIGxlbiA9IF9hcnJheS5sZW5ndGgsIHN0YXJ0ID0gMCwgZW5kLCBsbywgaGksIHRtcDtcblx0d2hpbGUoc3RhcnQgPCBsZW4pe1xuXHRcdGlmIChsZXZlbHNbc3RhcnRdID49IGxldil7XG5cdFx0XHRlbmQgPSBzdGFydCArIDE7XG5cdFx0d2hpbGUoZW5kIDwgbGVuICYmIGxldmVsc1tlbmRdID49IGxldil7XG5cdFx0XHRlbmQrKztcblx0XHR9XG5cdFx0Zm9yKGxvID0gc3RhcnQsIGhpID0gZW5kIC0gMSA7IGxvIDwgaGk7IGxvKyssIGhpLS0pe1xuXHRcdFx0dG1wID0gX2FycmF5W2xvXTtcblx0XHRcdF9hcnJheVtsb10gPSBfYXJyYXlbaGldO1xuXHRcdFx0X2FycmF5W2hpXSA9IHRtcDtcblx0XHR9XG5cdFx0c3RhcnQgPSBlbmQ7XG5cdH1cblx0c3RhcnQrKztcblx0fVxufVxuXG5mdW5jdGlvbiBfZ2V0Q2hhckNsYXNzKGNoYXJzLCB0eXBlcywgY2xhc3NlcywgaXgpIHtcblx0dmFyIGNUeXBlID0gdHlwZXNbaXhdLCB3VHlwZSwgblR5cGUsIGxlbiwgaTtcblx0c3dpdGNoKGNUeXBlKXtcblx0XHRjYXNlIEw6XG5cdFx0Y2FzZSBSOlxuXHRcdFx0bGFzdEFyYWJpYyA9IGZhbHNlO1xuXHRcdGNhc2UgT046XG5cdFx0Y2FzZSBBTjpcblx0XHRcdHJldHVybiBjVHlwZTtcblx0XHRjYXNlIEVOOlxuXHRcdFx0cmV0dXJuIGxhc3RBcmFiaWMgPyBBTiA6IEVOO1xuXHRcdGNhc2UgQUw6XG5cdFx0XHRsYXN0QXJhYmljID0gdHJ1ZTtcblx0XHRcdGhhc1VCQVRfQUwgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIFI7XG5cdFx0Y2FzZSBXUzpcblx0XHRcdHJldHVybiBPTjtcblx0XHRjYXNlIENTOlxuXHRcdFx0aWYgKGl4IDwgMSB8fCAoaXggKyAxKSA+PSB0eXBlcy5sZW5ndGggfHxcblx0XHRcdFx0KCh3VHlwZSA9IGNsYXNzZXNbaXggLSAxXSkgIT0gRU4gJiYgd1R5cGUgIT0gQU4pIHx8XG5cdFx0XHRcdCgoblR5cGUgPSB0eXBlc1tpeCArIDFdKSAhPSBFTiAmJiBuVHlwZSAhPSBBTikpe1xuXHRcdFx0XHRyZXR1cm4gT047XG5cdFx0XHR9XG5cdFx0XHRpZiAobGFzdEFyYWJpYyl7blR5cGUgPSBBTjt9XG5cdFx0XHRyZXR1cm4gblR5cGUgPT0gd1R5cGUgPyBuVHlwZSA6IE9OO1xuXHRcdGNhc2UgRVM6XG5cdFx0XHR3VHlwZSA9IGl4ID4gMCA/IGNsYXNzZXNbaXggLSAxXSA6IEI7XG5cdFx0XHRpZiAod1R5cGUgPT0gRU4gJiYgKGl4ICsgMSkgPCB0eXBlcy5sZW5ndGggJiYgdHlwZXNbaXggKyAxXSA9PSBFTil7XG5cdFx0XHRcdHJldHVybiBFTjtcblx0XHRcdH1cblx0XHRcdHJldHVybiBPTjtcblx0XHRjYXNlIEVUOlxuXHRcdFx0aWYgKGl4ID4gMCAmJiBjbGFzc2VzW2l4IC0gMV0gPT0gRU4pe1xuXHRcdFx0XHRyZXR1cm4gRU47XG5cdFx0XHR9XG5cdFx0XHRpZiAobGFzdEFyYWJpYyl7XG5cdFx0XHRcdHJldHVybiBPTjtcblx0XHRcdH1cblx0XHRcdGkgPSBpeCArIDE7XG5cdFx0XHRsZW4gPSB0eXBlcy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoaSA8IGxlbiAmJiB0eXBlc1tpXSA9PSBFVCl7XG5cdFx0XHRcdGkrKztcblx0XHRcdH1cblx0XHRcdGlmIChpIDwgbGVuICYmIHR5cGVzW2ldID09IEVOKXtcblx0XHRcdFx0cmV0dXJuIEVOO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIE9OO1xuXHRcdGNhc2UgTlNNOlxuXHRcdFx0bGVuID0gdHlwZXMubGVuZ3RoO1xuXHRcdFx0aSA9IGl4ICsgMTtcblx0XHRcdHdoaWxlIChpIDwgbGVuICYmIHR5cGVzW2ldID09IE5TTSl7XG5cdFx0XHRcdGkrKztcblx0XHRcdH1cblx0XHRcdGlmIChpIDwgbGVuKXtcblx0XHRcdFx0dmFyIGMgPSBjaGFyc1tpeF0sIHJ0bENhbmRpZGF0ZSA9IChjID49IDB4MDU5MSAmJiBjIDw9IDB4MDhGRikgfHwgYyA9PSAweEZCMUU7XG5cblx0XHRcdFx0d1R5cGUgPSB0eXBlc1tpXTtcblx0XHRcdFx0aWYgKHJ0bENhbmRpZGF0ZSAmJiAod1R5cGUgPT0gUiB8fCB3VHlwZSA9PSBBTCkpe1xuXHRcdFx0XHRcdHJldHVybiBSO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpeCA8IDEgfHwgKHdUeXBlID0gdHlwZXNbaXggLSAxXSkgPT0gQil7XG5cdFx0XHRcdHJldHVybiBPTjtcblx0XHRcdH1cblx0XHRcdHJldHVybiBjbGFzc2VzW2l4IC0gMV07XG5cdFx0Y2FzZSBCOlxuXHRcdFx0bGFzdEFyYWJpYyA9IGZhbHNlO1xuXHRcdFx0aGFzVUJBVF9CID0gdHJ1ZTtcblx0XHRcdHJldHVybiBkaXI7XG5cdFx0Y2FzZSBTOlxuXHRcdFx0aGFzVUJBVF9TID0gdHJ1ZTtcblx0XHRcdHJldHVybiBPTjtcblx0XHRjYXNlIExSRTpcblx0XHRjYXNlIFJMRTpcblx0XHRjYXNlIExSTzpcblx0XHRjYXNlIFJMTzpcblx0XHRjYXNlIFBERjpcblx0XHRcdGxhc3RBcmFiaWMgPSBmYWxzZTtcblx0XHRjYXNlIEJOOlxuXHRcdFx0cmV0dXJuIE9OO1xuXHR9XG59XG5cbmZ1bmN0aW9uIF9nZXRDaGFyYWN0ZXJUeXBlKCBjaCApIHtcblx0dmFyIHVjID0gY2guY2hhckNvZGVBdCgwKSwgaGkgPSB1YyA+PiA4O1xuXG5cdGlmIChoaSA9PSAwKSB7XG5cdFx0cmV0dXJuICgodWMgPiAweDAwQkYpID8gTCA6IFVuaWNvZGVUQkwwMFt1Y10pO1xuXHR9IGVsc2UgaWYgKGhpID09IDUpIHtcblx0XHRyZXR1cm4gKC9bXFx1MDU5MS1cXHUwNWY0XS8udGVzdChjaCkgPyBSIDogTCk7XG5cdH0gZWxzZSBpZiAoaGkgPT0gNikge1xuXHRcdGlmICgvW1xcdTA2MTAtXFx1MDYxYVxcdTA2NGItXFx1MDY1ZlxcdTA2ZDYtXFx1MDZlNFxcdTA2ZTctXFx1MDZlZF0vLnRlc3QoY2gpKVxuXHRcdFx0cmV0dXJuIE5TTTtcblx0XHRlbHNlIGlmICgvW1xcdTA2NjAtXFx1MDY2OVxcdTA2NmItXFx1MDY2Y10vLnRlc3QoY2gpKVxuXHRcdFx0cmV0dXJuIEFOO1xuXHRcdGVsc2UgaWYgKHVjID09IDB4MDY2QSlcblx0XHRcdHJldHVybiBFVDtcblx0XHRlbHNlIGlmICgvW1xcdTA2ZjAtXFx1MDZmOV0vLnRlc3QoY2gpKVxuXHRcdFx0cmV0dXJuIEVOO1xuXHRcdGVsc2Vcblx0XHRcdHJldHVybiBBTDtcblx0fSBlbHNlIGlmIChoaSA9PSAweDIwICYmIHVjIDw9IDB4MjA1Rikge1xuXHRcdHJldHVybiBVbmljb2RlVEJMMjBbdWMgJiAweEZGXTtcblx0fSBlbHNlIGlmIChoaSA9PSAweEZFKSB7XG5cdFx0cmV0dXJuICh1YyA+PSAweEZFNzAgPyBBTCA6IE9OKTtcblx0fVxuXHRyZXR1cm4gT047XG59XG5cbmZ1bmN0aW9uIF9pc0FyYWJpY0RpYWNyaXRpY3MoIGNoICkge1xuXHRyZXR1cm4gKGNoID49ICdcXHUwNjRiJyAmJiBjaCA8PSAnXFx1MDY1NScpO1xufVxuZXhwb3J0cy5MID0gTDtcbmV4cG9ydHMuUiA9IFI7XG5leHBvcnRzLkVOID0gRU47XG5leHBvcnRzLk9OX1IgPSAzO1xuZXhwb3J0cy5BTiA9IDQ7XG5leHBvcnRzLlJfSCA9IDU7XG5leHBvcnRzLkIgPSA2O1xuXG5leHBvcnRzLkRPVCA9IFwiXFx4QjdcIjtcbmV4cG9ydHMuZG9CaWRpUmVvcmRlciA9IGZ1bmN0aW9uKHRleHQsIHRleHRDaGFyVHlwZXMsIGlzUnRsKSB7XG5cdGlmICh0ZXh0Lmxlbmd0aCA8IDIpXG5cdFx0cmV0dXJuIHt9O1xuXG5cdHZhciBjaGFycyA9IHRleHQuc3BsaXQoXCJcIiksIGxvZ2ljYWxGcm9tVmlzdWFsID0gbmV3IEFycmF5KGNoYXJzLmxlbmd0aCksXG5cdFx0YmlkaUxldmVscyA9IG5ldyBBcnJheShjaGFycy5sZW5ndGgpLCBsZXZlbHMgPSBbXTtcblxuXHRkaXIgPSBpc1J0bCA/IFJUTCA6IExUUjtcblxuXHRfY29tcHV0ZUxldmVscyhjaGFycywgbGV2ZWxzLCBjaGFycy5sZW5ndGgsIHRleHRDaGFyVHlwZXMpO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbG9naWNhbEZyb21WaXN1YWwubGVuZ3RoOyBsb2dpY2FsRnJvbVZpc3VhbFtpXSA9IGksIGkrKyk7XG5cblx0X2ludmVydExldmVsKDIsIGxldmVscywgbG9naWNhbEZyb21WaXN1YWwpO1xuXHRfaW52ZXJ0TGV2ZWwoMSwgbGV2ZWxzLCBsb2dpY2FsRnJvbVZpc3VhbCk7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsb2dpY2FsRnJvbVZpc3VhbC5sZW5ndGggLSAxOyBpKyspIHsgLy9maXggbGV2ZWxzIHRvIHJlZmxlY3QgY2hhcmFjdGVyIHdpZHRoXG5cdFx0aWYgKHRleHRDaGFyVHlwZXNbaV0gPT09IEFOKSB7XG5cdFx0XHRsZXZlbHNbaV0gPSBleHBvcnRzLkFOO1xuXHRcdH0gZWxzZSBpZiAobGV2ZWxzW2ldID09PSBSICYmICgodGV4dENoYXJUeXBlc1tpXSA+IEFMICYmIHRleHRDaGFyVHlwZXNbaV0gPCBMUkUpXG5cdFx0XHR8fCB0ZXh0Q2hhclR5cGVzW2ldID09PSBPTiB8fCB0ZXh0Q2hhclR5cGVzW2ldID09PSBCTikpIHtcblx0XHRcdGxldmVsc1tpXSA9IGV4cG9ydHMuT05fUjtcblx0XHR9IGVsc2UgaWYgKChpID4gMCAmJiBjaGFyc1tpIC0gMV0gPT09ICdcXHUwNjQ0JykgJiYgL1xcdTA2MjJ8XFx1MDYyM3xcXHUwNjI1fFxcdTA2MjcvLnRlc3QoY2hhcnNbaV0pKSB7XG5cdFx0XHRsZXZlbHNbaSAtIDFdID0gbGV2ZWxzW2ldID0gZXhwb3J0cy5SX0g7XG5cdFx0XHRpKys7XG5cdFx0fVxuXHR9XG5cdGlmIChjaGFyc1tjaGFycy5sZW5ndGggLSAxXSA9PT0gZXhwb3J0cy5ET1QpXG5cdFx0bGV2ZWxzW2NoYXJzLmxlbmd0aCAtIDFdID0gZXhwb3J0cy5CO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbG9naWNhbEZyb21WaXN1YWwubGVuZ3RoOyBpKyspIHtcblx0XHRiaWRpTGV2ZWxzW2ldID0gbGV2ZWxzW2xvZ2ljYWxGcm9tVmlzdWFsW2ldXTtcblx0fVxuXG5cdHJldHVybiB7J2xvZ2ljYWxGcm9tVmlzdWFsJzogbG9naWNhbEZyb21WaXN1YWwsICdiaWRpTGV2ZWxzJzogYmlkaUxldmVsc307XG59O1xuZXhwb3J0cy5oYXNCaWRpQ2hhcmFjdGVycyA9IGZ1bmN0aW9uKHRleHQsIHRleHRDaGFyVHlwZXMpe1xuXHR2YXIgcmV0ID0gZmFsc2U7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKyl7XG5cdFx0dGV4dENoYXJUeXBlc1tpXSA9IF9nZXRDaGFyYWN0ZXJUeXBlKHRleHQuY2hhckF0KGkpKTtcblx0XHRpZiAoIXJldCAmJiAodGV4dENoYXJUeXBlc1tpXSA9PSBSIHx8IHRleHRDaGFyVHlwZXNbaV0gPT0gQUwpKVxuXHRcdFx0cmV0ID0gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gcmV0O1xufTtcbmV4cG9ydHMuZ2V0VmlzdWFsRnJvbUxvZ2ljYWxJZHggPSBmdW5jdGlvbihsb2dJZHgsIHJvd01hcCkge1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHJvd01hcC5sb2dpY2FsRnJvbVZpc3VhbC5sZW5ndGg7IGkrKykge1xuXHRcdGlmIChyb3dNYXAubG9naWNhbEZyb21WaXN1YWxbaV0gPT0gbG9nSWR4KVxuXHRcdFx0cmV0dXJuIGk7XG5cdH1cblx0cmV0dXJuIDA7XG59O1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9iaWRpaGFuZGxlclwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpYi9iaWRpdXRpbFwiLFwiYWNlL2xpYi9sYW5nXCIsXCJhY2UvbGliL3VzZXJhZ2VudFwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBiaWRpVXRpbCA9IGFjZXF1aXJlKFwiLi9saWIvYmlkaXV0aWxcIik7XG52YXIgbGFuZyA9IGFjZXF1aXJlKFwiLi9saWIvbGFuZ1wiKTtcbnZhciB1c2VyYWdlbnQgPSBhY2VxdWlyZShcIi4vbGliL3VzZXJhZ2VudFwiKTtcbnZhciBiaWRpUkUgPSAvW1xcdTA1OTAtXFx1MDVmNFxcdTA2MDAtXFx1MDZmZlxcdTA3MDAtXFx1MDhhY10vO1xudmFyIEJpZGlIYW5kbGVyID0gZnVuY3Rpb24oc2Vzc2lvbikge1xuICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247XG4gICAgdGhpcy5iaWRpTWFwID0ge307XG4gICAgdGhpcy5jdXJyZW50Um93ID0gbnVsbDtcbiAgICB0aGlzLmJpZGlVdGlsID0gYmlkaVV0aWw7XG4gICAgdGhpcy5jaGFyV2lkdGhzID0gW107XG4gICAgdGhpcy5FT0wgPSBcIlxceEFDXCI7XG4gICAgdGhpcy5zaG93SW52aXNpYmxlcyA9IHRydWU7XG4gICAgdGhpcy5pc1J0bERpciA9IGZhbHNlO1xuICAgIHRoaXMubGluZSA9IFwiXCI7XG4gICAgdGhpcy53cmFwSW5kZW50ID0gMDtcbiAgICB0aGlzLmlzTGFzdFJvdyA9IGZhbHNlO1xuICAgIHRoaXMuRU9GID0gXCJcXHhCNlwiO1xuICAgIHRoaXMuc2VlbkJpZGkgPSBmYWxzZTtcbn07XG5cbihmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzQmlkaVJvdyA9IGZ1bmN0aW9uKHNjcmVlblJvdywgZG9jUm93LCBzcGxpdEluZGV4KSB7XG4gICAgICAgIGlmICghdGhpcy5zZWVuQmlkaSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHNjcmVlblJvdyAhPT0gdGhpcy5jdXJyZW50Um93KSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRSb3cgPSBzY3JlZW5Sb3c7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJvd0xpbmUoZG9jUm93LCBzcGxpdEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQmlkaU1hcCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmJpZGlNYXAuYmlkaUxldmVscztcbiAgICB9O1xuXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZ1bmN0aW9uKGRlbHRhKSB7XG4gICAgICAgIGlmICghdGhpcy5zZWVuQmlkaSkge1xuICAgICAgICAgICAgaWYgKGRlbHRhLmFjdGlvbiA9PSBcImluc2VydFwiICYmIGJpZGlSRS50ZXN0KGRlbHRhLmxpbmVzLmpvaW4oXCJcXG5cIikpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWVuQmlkaSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Um93ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFJvdyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5nZXREb2N1bWVudFJvdyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZG9jUm93ID0gMDtcbiAgICAgICAgdmFyIHJvd0NhY2hlID0gdGhpcy5zZXNzaW9uLiRzY3JlZW5Sb3dDYWNoZTtcbiAgICAgICAgaWYgKHJvd0NhY2hlLmxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5zZXNzaW9uLiRnZXRSb3dDYWNoZUluZGV4KHJvd0NhY2hlLCB0aGlzLmN1cnJlbnRSb3cpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApXG4gICAgICAgICAgICAgICAgZG9jUm93ID0gdGhpcy5zZXNzaW9uLiRkb2NSb3dDYWNoZVtpbmRleF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZG9jUm93O1xuICAgIH07XG5cbiAgICB0aGlzLmdldFNwbGl0SW5kZXggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHNwbGl0SW5kZXggPSAwO1xuICAgICAgICB2YXIgcm93Q2FjaGUgPSB0aGlzLnNlc3Npb24uJHNjcmVlblJvd0NhY2hlO1xuICAgICAgICBpZiAocm93Q2FjaGUubGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEluZGV4LCBwcmV2SW5kZXggPSB0aGlzLnNlc3Npb24uJGdldFJvd0NhY2hlSW5kZXgocm93Q2FjaGUsIHRoaXMuY3VycmVudFJvdyk7XG4gICAgICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50Um93IC0gc3BsaXRJbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50SW5kZXggPSB0aGlzLnNlc3Npb24uJGdldFJvd0NhY2hlSW5kZXgocm93Q2FjaGUsIHRoaXMuY3VycmVudFJvdyAtIHNwbGl0SW5kZXggLSAxKTtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEluZGV4ICE9PSBwcmV2SW5kZXgpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgcHJldkluZGV4ID0gY3VycmVudEluZGV4O1xuICAgICAgICAgICAgICAgIHNwbGl0SW5kZXgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzcGxpdEluZGV4O1xuICAgIH07XG5cbiAgICB0aGlzLnVwZGF0ZVJvd0xpbmUgPSBmdW5jdGlvbihkb2NSb3csIHNwbGl0SW5kZXgpIHtcbiAgICAgICAgaWYgKGRvY1JvdyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgZG9jUm93ID0gdGhpcy5nZXREb2N1bWVudFJvdygpO1xuXG4gICAgICAgIHRoaXMud3JhcEluZGVudCA9IDA7XG4gICAgICAgIHRoaXMuaXNMYXN0Um93ID0gKGRvY1JvdyA9PT0gdGhpcy5zZXNzaW9uLmdldExlbmd0aCgpIC0gMSk7XG4gICAgICAgIHRoaXMubGluZSA9IHRoaXMuc2Vzc2lvbi5nZXRMaW5lKGRvY1Jvdyk7XG4gICAgICAgIGlmICh0aGlzLnNlc3Npb24uJHVzZVdyYXBNb2RlKSB7XG4gICAgICAgICAgICB2YXIgc3BsaXRzID0gdGhpcy5zZXNzaW9uLiR3cmFwRGF0YVtkb2NSb3ddO1xuICAgICAgICAgICAgaWYgKHNwbGl0cykge1xuICAgICAgICAgICAgICAgIGlmIChzcGxpdEluZGV4ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHNwbGl0SW5kZXggPSB0aGlzLmdldFNwbGl0SW5kZXgoKTtcblxuICAgICAgICAgICAgICAgIGlmKHNwbGl0SW5kZXggPiAwICYmIHNwbGl0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cmFwSW5kZW50ID0gc3BsaXRzLmluZGVudDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lID0gKHNwbGl0SW5kZXggPCBzcGxpdHMubGVuZ3RoKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmUuc3Vic3RyaW5nKHNwbGl0c1tzcGxpdEluZGV4IC0gMV0sIHNwbGl0c1tzcGxpdHMubGVuZ3RoIC0gMV0pIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmUuc3Vic3RyaW5nKHNwbGl0c1tzcGxpdHMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGluZSA9IHRoaXMubGluZS5zdWJzdHJpbmcoMCwgc3BsaXRzW3NwbGl0SW5kZXhdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb24sIHNoaWZ0ID0gMCwgc2l6ZTtcbiAgICAgICAgdGhpcy5saW5lID0gdGhpcy5saW5lLnJlcGxhY2UoL1xcdHxbXFx1MTEwMC1cXHUyMDI5LCBcXHUyMDJGLVxcdUZGRTZdL2csIGZ1bmN0aW9uKGNoLCBpKXtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xcdCcgfHwgc2Vzc2lvbi5pc0Z1bGxXaWR0aChjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgICAgIHNpemUgPSAoY2ggPT09ICdcXHQnKSA/IHNlc3Npb24uZ2V0U2NyZWVuVGFiU2l6ZShpICsgc2hpZnQpIDogMjtcbiAgICAgICAgICAgICAgICBzaGlmdCArPSBzaXplIC0gMTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFuZy5zdHJpbmdSZXBlYXQoYmlkaVV0aWwuRE9ULCBzaXplKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjaDtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlQmlkaU1hcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdGV4dENoYXJUeXBlcyA9IFtdLCBlbmRPZkxpbmUgPSB0aGlzLmlzTGFzdFJvdyA/IHRoaXMuRU9GIDogdGhpcy5FT0w7XG4gICAgICAgIHZhciBsaW5lID0gdGhpcy5saW5lICsgKHRoaXMuc2hvd0ludmlzaWJsZXMgPyBlbmRPZkxpbmUgOiBiaWRpVXRpbC5ET1QpO1xuICAgICAgICBpZiAoYmlkaVV0aWwuaGFzQmlkaUNoYXJhY3RlcnMobGluZSwgdGV4dENoYXJUeXBlcykpIHtcbiAgICAgICAgICAgIHRoaXMuYmlkaU1hcCA9IGJpZGlVdGlsLmRvQmlkaVJlb3JkZXIobGluZSwgdGV4dENoYXJUeXBlcywgdGhpcy5pc1J0bERpcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJpZGlNYXAgPSB7fTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5tYXJrQXNEaXJ0eSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRSb3cgPSBudWxsO1xuICAgIH07XG4gICAgdGhpcy51cGRhdGVDaGFyYWN0ZXJXaWR0aHMgPSBmdW5jdGlvbihmb250TWV0cmljcykge1xuICAgICAgICBpZiAoIXRoaXMuc2VlbkJpZGkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLmNoYXJhY3RlcldpZHRoID09PSBmb250TWV0cmljcy4kY2hhcmFjdGVyU2l6ZS53aWR0aClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB2YXIgY2hhcmFjdGVyV2lkdGggPSB0aGlzLmNoYXJhY3RlcldpZHRoID0gZm9udE1ldHJpY3MuJGNoYXJhY3RlclNpemUud2lkdGg7XG4gICAgICAgIHZhciBiaWRpQ2hhcldpZHRoID0gZm9udE1ldHJpY3MuJG1lYXN1cmVDaGFyV2lkdGgoXCJcXHUwNWQ0XCIpO1xuXG4gICAgICAgIHRoaXMuY2hhcldpZHRoc1tiaWRpVXRpbC5MXSA9IHRoaXMuY2hhcldpZHRoc1tiaWRpVXRpbC5FTl0gPSB0aGlzLmNoYXJXaWR0aHNbYmlkaVV0aWwuT05fUl0gPSBjaGFyYWN0ZXJXaWR0aDtcbiAgICAgICAgdGhpcy5jaGFyV2lkdGhzW2JpZGlVdGlsLlJdID0gdGhpcy5jaGFyV2lkdGhzW2JpZGlVdGlsLkFOXSA9IGJpZGlDaGFyV2lkdGg7XG4gICAgICAgIHRoaXMuY2hhcldpZHRoc1tiaWRpVXRpbC5SX0hdID0gdXNlcmFnZW50LmlzQ2hyb21lID8gYmlkaUNoYXJXaWR0aCA6IGJpZGlDaGFyV2lkdGggKiAwLjQ1O1xuICAgICAgICB0aGlzLmNoYXJXaWR0aHNbYmlkaVV0aWwuQl0gPSAwO1xuXG4gICAgICAgIHRoaXMuY3VycmVudFJvdyA9IG51bGw7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0U2hvd0ludmlzaWJsZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd0ludmlzaWJsZXM7XG4gICAgfTtcblxuICAgIHRoaXMuc2V0U2hvd0ludmlzaWJsZXMgPSBmdW5jdGlvbihzaG93SW52aXNpYmxlcykge1xuICAgICAgICB0aGlzLnNob3dJbnZpc2libGVzID0gc2hvd0ludmlzaWJsZXM7XG4gICAgICAgIHRoaXMuY3VycmVudFJvdyA9IG51bGw7XG4gICAgfTtcblxuICAgIHRoaXMuc2V0RW9sQ2hhciA9IGZ1bmN0aW9uKGVvbENoYXIpIHtcbiAgICAgICAgdGhpcy5FT0wgPSBlb2xDaGFyO1xuICAgIH07XG5cbiAgICB0aGlzLnNldFRleHREaXIgPSBmdW5jdGlvbihpc1J0bERpcikge1xuICAgICAgICB0aGlzLmlzUnRsRGlyID0gaXNSdGxEaXI7XG4gICAgfTtcbiAgICB0aGlzLmdldFBvc0xlZnQgPSBmdW5jdGlvbihjb2wpIHtcbiAgICAgICAgY29sIC09IHRoaXMud3JhcEluZGVudDtcbiAgICAgICAgdmFyIHZpc3VhbElkeCA9IGJpZGlVdGlsLmdldFZpc3VhbEZyb21Mb2dpY2FsSWR4KGNvbCA+IDAgPyBjb2wgLSAxIDogMCwgdGhpcy5iaWRpTWFwKSxcbiAgICAgICAgICAgIGxldmVscyA9IHRoaXMuYmlkaU1hcC5iaWRpTGV2ZWxzLCBsZWZ0ID0gMDtcblxuICAgICAgICBpZiAoY29sID09PSAwICYmIGxldmVsc1t2aXN1YWxJZHhdICUgMiAhPT0gMClcbiAgICAgICAgICAgIHZpc3VhbElkeCsrO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzdWFsSWR4OyBpKyspIHtcbiAgICAgICAgICAgIGxlZnQgKz0gdGhpcy5jaGFyV2lkdGhzW2xldmVsc1tpXV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sICE9PSAwICYmIGxldmVsc1t2aXN1YWxJZHhdICUgMiA9PT0gMClcbiAgICAgICAgICAgIGxlZnQgKz0gdGhpcy5jaGFyV2lkdGhzW2xldmVsc1t2aXN1YWxJZHhdXTtcblxuICAgICAgICBpZiAodGhpcy53cmFwSW5kZW50KVxuICAgICAgICAgICAgbGVmdCArPSB0aGlzLndyYXBJbmRlbnQgKiB0aGlzLmNoYXJXaWR0aHNbYmlkaVV0aWwuTF07XG5cbiAgICAgICAgcmV0dXJuIGxlZnQ7XG4gICAgfTtcbiAgICB0aGlzLmdldFNlbGVjdGlvbnMgPSBmdW5jdGlvbihzdGFydENvbCwgZW5kQ29sKSB7XG4gICAgICAgIHZhciBtYXAgPSB0aGlzLmJpZGlNYXAsIGxldmVscyA9IG1hcC5iaWRpTGV2ZWxzLCBsZXZlbCwgb2Zmc2V0ID0gdGhpcy53cmFwSW5kZW50ICogdGhpcy5jaGFyV2lkdGhzW2JpZGlVdGlsLkxdLCBzZWxlY3Rpb25zID0gW10sXG4gICAgICAgICAgICBzZWxDb2xNaW4gPSBNYXRoLm1pbihzdGFydENvbCwgZW5kQ29sKSAtIHRoaXMud3JhcEluZGVudCwgc2VsQ29sTWF4ID0gTWF0aC5tYXgoc3RhcnRDb2wsIGVuZENvbCkgLSB0aGlzLndyYXBJbmRlbnQsXG4gICAgICAgICAgICAgICAgaXNTZWxlY3RlZCA9IGZhbHNlLCBpc1NlbGVjdGVkUHJldiA9IGZhbHNlLCBzZWxlY3Rpb25TdGFydCA9IDA7XG5cbiAgICAgICAgZm9yICh2YXIgbG9nSWR4LCB2aXNJZHggPSAwOyB2aXNJZHggPCBsZXZlbHMubGVuZ3RoOyB2aXNJZHgrKykge1xuICAgICAgICAgICAgbG9nSWR4ID0gbWFwLmxvZ2ljYWxGcm9tVmlzdWFsW3Zpc0lkeF07XG4gICAgICAgICAgICBsZXZlbCA9IGxldmVsc1t2aXNJZHhdO1xuICAgICAgICAgICAgaXNTZWxlY3RlZCA9IChsb2dJZHggPj0gc2VsQ29sTWluKSAmJiAobG9nSWR4IDwgc2VsQ29sTWF4KTtcbiAgICAgICAgICAgIGlmIChpc1NlbGVjdGVkICYmICFpc1NlbGVjdGVkUHJldikge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gb2Zmc2V0O1xuICAgICAgICAgICAgfSBlbHNlIGlmICghaXNTZWxlY3RlZCAmJiBpc1NlbGVjdGVkUHJldikge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbnMucHVzaCh7bGVmdDogc2VsZWN0aW9uU3RhcnQsIHdpZHRoOiBvZmZzZXQgLSBzZWxlY3Rpb25TdGFydH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2Zmc2V0ICs9IHRoaXMuY2hhcldpZHRoc1tsZXZlbF07XG4gICAgICAgICAgICBpc1NlbGVjdGVkUHJldiA9IGlzU2VsZWN0ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNTZWxlY3RlZCAmJiAodmlzSWR4ID09PSBsZXZlbHMubGVuZ3RoKSkge1xuICAgICAgICAgICAgc2VsZWN0aW9ucy5wdXNoKHtsZWZ0OiBzZWxlY3Rpb25TdGFydCwgd2lkdGg6IG9mZnNldCAtIHNlbGVjdGlvblN0YXJ0fSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0aW9ucztcbiAgICB9O1xuICAgIHRoaXMub2Zmc2V0VG9Db2wgPSBmdW5jdGlvbihwb3NYKSB7XG4gICAgICAgIHZhciBsb2dpY2FsSWR4ID0gMCwgcG9zWCA9IE1hdGgubWF4KHBvc1gsIDApLFxuICAgICAgICAgICAgb2Zmc2V0ID0gMCwgdmlzdWFsSWR4ID0gMCwgbGV2ZWxzID0gdGhpcy5iaWRpTWFwLmJpZGlMZXZlbHMsXG4gICAgICAgICAgICAgICAgY2hhcldpZHRoID0gdGhpcy5jaGFyV2lkdGhzW2xldmVsc1t2aXN1YWxJZHhdXTtcblxuICAgICAgICBpZiAodGhpcy53cmFwSW5kZW50KSB7XG4gICAgICAgICAgICBwb3NYIC09IHRoaXMud3JhcEluZGVudCAqIHRoaXMuY2hhcldpZHRoc1tiaWRpVXRpbC5MXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlKHBvc1ggPiBvZmZzZXQgKyBjaGFyV2lkdGgvMikge1xuICAgICAgICAgICAgb2Zmc2V0ICs9IGNoYXJXaWR0aDtcbiAgICAgICAgICAgIGlmKHZpc3VhbElkeCA9PT0gbGV2ZWxzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBjaGFyV2lkdGggPSAwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hhcldpZHRoID0gdGhpcy5jaGFyV2lkdGhzW2xldmVsc1srK3Zpc3VhbElkeF1dO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZpc3VhbElkeCA+IDAgJiYgKGxldmVsc1t2aXN1YWxJZHggLSAxXSAlIDIgIT09IDApICYmIChsZXZlbHNbdmlzdWFsSWR4XSAlIDIgPT09IDApKXtcbiAgICAgICAgICAgIGlmKHBvc1ggPCBvZmZzZXQpXG4gICAgICAgICAgICAgICAgdmlzdWFsSWR4LS07XG4gICAgICAgICAgICBsb2dpY2FsSWR4ID0gdGhpcy5iaWRpTWFwLmxvZ2ljYWxGcm9tVmlzdWFsW3Zpc3VhbElkeF07XG5cbiAgICAgICAgfSBlbHNlIGlmICh2aXN1YWxJZHggPiAwICYmIChsZXZlbHNbdmlzdWFsSWR4IC0gMV0gJSAyID09PSAwKSAmJiAobGV2ZWxzW3Zpc3VhbElkeF0gJSAyICE9PSAwKSl7XG4gICAgICAgICAgICBsb2dpY2FsSWR4ID0gMSArICgocG9zWCA+IG9mZnNldCkgPyB0aGlzLmJpZGlNYXAubG9naWNhbEZyb21WaXN1YWxbdmlzdWFsSWR4XVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuYmlkaU1hcC5sb2dpY2FsRnJvbVZpc3VhbFt2aXN1YWxJZHggLSAxXSk7XG5cbiAgICAgICAgfSBlbHNlIGlmICgodGhpcy5pc1J0bERpciAmJiB2aXN1YWxJZHggPT09IGxldmVscy5sZW5ndGggLSAxICYmIGNoYXJXaWR0aCA9PT0gMCAmJiAobGV2ZWxzW3Zpc3VhbElkeCAtIDFdICUgMiA9PT0gMCkpXG4gICAgICAgICAgICAgICAgfHwgKCF0aGlzLmlzUnRsRGlyICYmIHZpc3VhbElkeCA9PT0gMCAmJiAobGV2ZWxzW3Zpc3VhbElkeF0gJSAyICE9PSAwKSkpe1xuICAgICAgICAgICAgbG9naWNhbElkeCA9IDEgKyB0aGlzLmJpZGlNYXAubG9naWNhbEZyb21WaXN1YWxbdmlzdWFsSWR4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh2aXN1YWxJZHggPiAwICYmIChsZXZlbHNbdmlzdWFsSWR4IC0gMV0gJSAyICE9PSAwKSAmJiBjaGFyV2lkdGggIT09IDApXG4gICAgICAgICAgICAgICAgdmlzdWFsSWR4LS07XG4gICAgICAgICAgICBsb2dpY2FsSWR4ID0gdGhpcy5iaWRpTWFwLmxvZ2ljYWxGcm9tVmlzdWFsW3Zpc3VhbElkeF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKGxvZ2ljYWxJZHggKyB0aGlzLndyYXBJbmRlbnQpO1xuICAgIH07XG5cbn0pLmNhbGwoQmlkaUhhbmRsZXIucHJvdG90eXBlKTtcblxuZXhwb3J0cy5CaWRpSGFuZGxlciA9IEJpZGlIYW5kbGVyO1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvcmFuZ2VcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xudmFyIGNvbXBhcmVQb2ludHMgPSBmdW5jdGlvbihwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEucm93IC0gcDIucm93IHx8IHAxLmNvbHVtbiAtIHAyLmNvbHVtbjtcbn07XG52YXIgUmFuZ2UgPSBmdW5jdGlvbihzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgZW5kQ29sdW1uKSB7XG4gICAgdGhpcy5zdGFydCA9IHtcbiAgICAgICAgcm93OiBzdGFydFJvdyxcbiAgICAgICAgY29sdW1uOiBzdGFydENvbHVtblxuICAgIH07XG5cbiAgICB0aGlzLmVuZCA9IHtcbiAgICAgICAgcm93OiBlbmRSb3csXG4gICAgICAgIGNvbHVtbjogZW5kQ29sdW1uXG4gICAgfTtcbn07XG5cbihmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzRXF1YWwgPSBmdW5jdGlvbihyYW5nZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydC5yb3cgPT09IHJhbmdlLnN0YXJ0LnJvdyAmJlxuICAgICAgICAgICAgdGhpcy5lbmQucm93ID09PSByYW5nZS5lbmQucm93ICYmXG4gICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9PT0gcmFuZ2Uuc3RhcnQuY29sdW1uICYmXG4gICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPT09IHJhbmdlLmVuZC5jb2x1bW47XG4gICAgfTtcbiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAoXCJSYW5nZTogW1wiICsgdGhpcy5zdGFydC5yb3cgKyBcIi9cIiArIHRoaXMuc3RhcnQuY29sdW1uICtcbiAgICAgICAgICAgIFwiXSAtPiBbXCIgKyB0aGlzLmVuZC5yb3cgKyBcIi9cIiArIHRoaXMuZW5kLmNvbHVtbiArIFwiXVwiKTtcbiAgICB9O1xuXG4gICAgdGhpcy5jb250YWlucyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pID09IDA7XG4gICAgfTtcbiAgICB0aGlzLmNvbXBhcmVSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7XG4gICAgICAgIHZhciBjbXAsXG4gICAgICAgICAgICBlbmQgPSByYW5nZS5lbmQsXG4gICAgICAgICAgICBzdGFydCA9IHJhbmdlLnN0YXJ0O1xuXG4gICAgICAgIGNtcCA9IHRoaXMuY29tcGFyZShlbmQucm93LCBlbmQuY29sdW1uKTtcbiAgICAgICAgaWYgKGNtcCA9PSAxKSB7XG4gICAgICAgICAgICBjbXAgPSB0aGlzLmNvbXBhcmUoc3RhcnQucm93LCBzdGFydC5jb2x1bW4pO1xuICAgICAgICAgICAgaWYgKGNtcCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIC0yO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY21wID0gdGhpcy5jb21wYXJlKHN0YXJ0LnJvdywgc3RhcnQuY29sdW1uKTtcbiAgICAgICAgICAgIGlmIChjbXAgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDQyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5jb21wYXJlUG9pbnQgPSBmdW5jdGlvbihwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocC5yb3csIHAuY29sdW1uKTtcbiAgICB9O1xuICAgIHRoaXMuY29udGFpbnNSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVQb2ludChyYW5nZS5zdGFydCkgPT0gMCAmJiB0aGlzLmNvbXBhcmVQb2ludChyYW5nZS5lbmQpID09IDA7XG4gICAgfTtcbiAgICB0aGlzLmludGVyc2VjdHMgPSBmdW5jdGlvbihyYW5nZSkge1xuICAgICAgICB2YXIgY21wID0gdGhpcy5jb21wYXJlUmFuZ2UocmFuZ2UpO1xuICAgICAgICByZXR1cm4gKGNtcCA9PSAtMSB8fCBjbXAgPT0gMCB8fCBjbXAgPT0gMSk7XG4gICAgfTtcbiAgICB0aGlzLmlzRW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbjtcbiAgICB9O1xuICAgIHRoaXMuaXNTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LnJvdyA9PSByb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT0gY29sdW1uO1xuICAgIH07XG4gICAgdGhpcy5zZXRTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygcm93ID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gcm93LmNvbHVtbjtcbiAgICAgICAgICAgIHRoaXMuc3RhcnQucm93ID0gcm93LnJvdztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnQucm93ID0gcm93O1xuICAgICAgICAgICAgdGhpcy5zdGFydC5jb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc2V0RW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgaWYgKHR5cGVvZiByb3cgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgdGhpcy5lbmQuY29sdW1uID0gcm93LmNvbHVtbjtcbiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9IHJvdy5yb3c7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVuZC5yb3cgPSByb3c7XG4gICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuaW5zaWRlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNFbmQocm93LCBjb2x1bW4pIHx8IHRoaXMuaXNTdGFydChyb3csIGNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIHRoaXMuaW5zaWRlU3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikge1xuICAgICAgICBpZiAodGhpcy5jb21wYXJlKHJvdywgY29sdW1uKSA9PSAwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0VuZChyb3csIGNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIHRoaXMuaW5zaWRlRW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGFydChyb3csIGNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIHRoaXMuY29tcGFyZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7XG4gICAgICAgIGlmICghdGhpcy5pc011bHRpTGluZSgpKSB7XG4gICAgICAgICAgICBpZiAocm93ID09PSB0aGlzLnN0YXJ0LnJvdykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPCB0aGlzLnN0YXJ0LmNvbHVtbiA/IC0xIDogKGNvbHVtbiA+IHRoaXMuZW5kLmNvbHVtbiA/IDEgOiAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyb3cgPCB0aGlzLnN0YXJ0LnJvdylcbiAgICAgICAgICAgIHJldHVybiAtMTtcblxuICAgICAgICBpZiAocm93ID4gdGhpcy5lbmQucm93KVxuICAgICAgICAgICAgcmV0dXJuIDE7XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93ID09PSByb3cpXG4gICAgICAgICAgICByZXR1cm4gY29sdW1uID49IHRoaXMuc3RhcnQuY29sdW1uID8gMCA6IC0xO1xuXG4gICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPT09IHJvdylcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPD0gdGhpcy5lbmQuY29sdW1uID8gMCA6IDE7XG5cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfTtcbiAgICB0aGlzLmNvbXBhcmVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA9PSByb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT0gY29sdW1uKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5jb21wYXJlRW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbikge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5jb21wYXJlSW5zaWRlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbikge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGFydC5yb3cgPT0gcm93ICYmIHRoaXMuc3RhcnQuY29sdW1uID09IGNvbHVtbikge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuY2xpcFJvd3MgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykge1xuICAgICAgICBpZiAodGhpcy5lbmQucm93ID4gbGFzdFJvdylcbiAgICAgICAgICAgIHZhciBlbmQgPSB7cm93OiBsYXN0Um93ICsgMSwgY29sdW1uOiAwfTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5lbmQucm93IDwgZmlyc3RSb3cpXG4gICAgICAgICAgICB2YXIgZW5kID0ge3JvdzogZmlyc3RSb3csIGNvbHVtbjogMH07XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93ID4gbGFzdFJvdylcbiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IGxhc3RSb3cgKyAxLCBjb2x1bW46IDB9O1xuICAgICAgICBlbHNlIGlmICh0aGlzLnN0YXJ0LnJvdyA8IGZpcnN0Um93KVxuICAgICAgICAgICAgdmFyIHN0YXJ0ID0ge3JvdzogZmlyc3RSb3csIGNvbHVtbjogMH07XG5cbiAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHMoc3RhcnQgfHwgdGhpcy5zdGFydCwgZW5kIHx8IHRoaXMuZW5kKTtcbiAgICB9O1xuICAgIHRoaXMuZXh0ZW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgdmFyIGNtcCA9IHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7XG5cbiAgICAgICAgaWYgKGNtcCA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIGVsc2UgaWYgKGNtcCA9PSAtMSlcbiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB2YXIgZW5kID0ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn07XG5cbiAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHMoc3RhcnQgfHwgdGhpcy5zdGFydCwgZW5kIHx8IHRoaXMuZW5kKTtcbiAgICB9O1xuXG4gICAgdGhpcy5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zdGFydC5yb3cgPT09IHRoaXMuZW5kLnJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PT0gdGhpcy5lbmQuY29sdW1uKTtcbiAgICB9O1xuICAgIHRoaXMuaXNNdWx0aUxpbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnN0YXJ0LnJvdyAhPT0gdGhpcy5lbmQucm93KTtcbiAgICB9O1xuICAgIHRoaXMuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGhpcy5zdGFydCwgdGhpcy5lbmQpO1xuICAgIH07XG4gICAgdGhpcy5jb2xsYXBzZVJvd3MgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZW5kLmNvbHVtbiA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZSh0aGlzLnN0YXJ0LnJvdywgMCwgTWF0aC5tYXgodGhpcy5zdGFydC5yb3csIHRoaXMuZW5kLnJvdy0xKSwgMCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2UodGhpcy5zdGFydC5yb3csIDAsIHRoaXMuZW5kLnJvdywgMCk7XG4gICAgfTtcbiAgICB0aGlzLnRvU2NyZWVuUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uKSB7XG4gICAgICAgIHZhciBzY3JlZW5Qb3NTdGFydCA9IHNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHRoaXMuc3RhcnQpO1xuICAgICAgICB2YXIgc2NyZWVuUG9zRW5kID0gc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5lbmQpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUmFuZ2UoXG4gICAgICAgICAgICBzY3JlZW5Qb3NTdGFydC5yb3csIHNjcmVlblBvc1N0YXJ0LmNvbHVtbixcbiAgICAgICAgICAgIHNjcmVlblBvc0VuZC5yb3csIHNjcmVlblBvc0VuZC5jb2x1bW5cbiAgICAgICAgKTtcbiAgICB9O1xuICAgIHRoaXMubW92ZUJ5ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgdGhpcy5zdGFydC5yb3cgKz0gcm93O1xuICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiArPSBjb2x1bW47XG4gICAgICAgIHRoaXMuZW5kLnJvdyArPSByb3c7XG4gICAgICAgIHRoaXMuZW5kLmNvbHVtbiArPSBjb2x1bW47XG4gICAgfTtcblxufSkuY2FsbChSYW5nZS5wcm90b3R5cGUpO1xuUmFuZ2UuZnJvbVBvaW50cyA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0LnJvdywgc3RhcnQuY29sdW1uLCBlbmQucm93LCBlbmQuY29sdW1uKTtcbn07XG5SYW5nZS5jb21wYXJlUG9pbnRzID0gY29tcGFyZVBvaW50cztcblxuUmFuZ2UuY29tcGFyZVBvaW50cyA9IGZ1bmN0aW9uKHAxLCBwMikge1xuICAgIHJldHVybiBwMS5yb3cgLSBwMi5yb3cgfHwgcDEuY29sdW1uIC0gcDIuY29sdW1uO1xufTtcblxuXG5leHBvcnRzLlJhbmdlID0gUmFuZ2U7XG59KTtcblxuYWNlLmRlZmluZShcImFjZS9zZWxlY3Rpb25cIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvb29wXCIsXCJhY2UvbGliL2xhbmdcIixcImFjZS9saWIvZXZlbnRfZW1pdHRlclwiLFwiYWNlL3JhbmdlXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIG9vcCA9IGFjZXF1aXJlKFwiLi9saWIvb29wXCIpO1xudmFyIGxhbmcgPSBhY2VxdWlyZShcIi4vbGliL2xhbmdcIik7XG52YXIgRXZlbnRFbWl0dGVyID0gYWNlcXVpcmUoXCIuL2xpYi9ldmVudF9lbWl0dGVyXCIpLkV2ZW50RW1pdHRlcjtcbnZhciBSYW5nZSA9IGFjZXF1aXJlKFwiLi9yYW5nZVwiKS5SYW5nZTtcbnZhciBTZWxlY3Rpb24gPSBmdW5jdGlvbihzZXNzaW9uKSB7XG4gICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjtcbiAgICB0aGlzLmRvYyA9IHNlc3Npb24uZ2V0RG9jdW1lbnQoKTtcblxuICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB0aGlzLmxlYWQgPSB0aGlzLnNlbGVjdGlvbkxlYWQgPSB0aGlzLmRvYy5jcmVhdGVBbmNob3IoMCwgMCk7XG4gICAgdGhpcy5hbmNob3IgPSB0aGlzLnNlbGVjdGlvbkFuY2hvciA9IHRoaXMuZG9jLmNyZWF0ZUFuY2hvcigwLCAwKTtcblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmxlYWQub24oXCJjaGFuZ2VcIiwgZnVuY3Rpb24oZSkge1xuICAgICAgICBzZWxmLl9lbWl0KFwiY2hhbmdlQ3Vyc29yXCIpO1xuICAgICAgICBpZiAoIXNlbGYuJGlzRW1wdHkpXG4gICAgICAgICAgICBzZWxmLl9lbWl0KFwiY2hhbmdlU2VsZWN0aW9uXCIpO1xuICAgICAgICBpZiAoIXNlbGYuJGtlZXBEZXNpcmVkQ29sdW1uT25DaGFuZ2UgJiYgZS5vbGQuY29sdW1uICE9IGUudmFsdWUuY29sdW1uKVxuICAgICAgICAgICAgc2VsZi4kZGVzaXJlZENvbHVtbiA9IG51bGw7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbkFuY2hvci5vbihcImNoYW5nZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCFzZWxmLiRpc0VtcHR5KVxuICAgICAgICAgICAgc2VsZi5fZW1pdChcImNoYW5nZVNlbGVjdGlvblwiKTtcbiAgICB9KTtcbn07XG5cbihmdW5jdGlvbigpIHtcblxuICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTtcbiAgICB0aGlzLmlzRW1wdHkgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiRpc0VtcHR5IHx8IChcbiAgICAgICAgICAgIHRoaXMuYW5jaG9yLnJvdyA9PSB0aGlzLmxlYWQucm93ICYmXG4gICAgICAgICAgICB0aGlzLmFuY2hvci5jb2x1bW4gPT0gdGhpcy5sZWFkLmNvbHVtblxuICAgICAgICApKTtcbiAgICB9O1xuICAgIHRoaXMuaXNNdWx0aUxpbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRSYW5nZSgpLmlzTXVsdGlMaW5lKCk7XG4gICAgfTtcbiAgICB0aGlzLmdldEN1cnNvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sZWFkLmdldFBvc2l0aW9uKCk7XG4gICAgfTtcbiAgICB0aGlzLnNldFNlbGVjdGlvbkFuY2hvciA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7XG4gICAgICAgIHRoaXMuYW5jaG9yLnNldFBvc2l0aW9uKHJvdywgY29sdW1uKTtcblxuICAgICAgICBpZiAodGhpcy4kaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy4kaXNFbXB0eSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fZW1pdChcImNoYW5nZVNlbGVjdGlvblwiKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5nZXRTZWxlY3Rpb25BbmNob3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuJGlzRW1wdHkpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWxlY3Rpb25MZWFkKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFuY2hvci5nZXRQb3NpdGlvbigpO1xuICAgIH07XG4gICAgdGhpcy5nZXRTZWxlY3Rpb25MZWFkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxlYWQuZ2V0UG9zaXRpb24oKTtcbiAgICB9O1xuICAgIHRoaXMuc2hpZnRTZWxlY3Rpb24gPSBmdW5jdGlvbihjb2x1bW5zKSB7XG4gICAgICAgIGlmICh0aGlzLiRpc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyh0aGlzLmxlYWQucm93LCB0aGlzLmxlYWQuY29sdW1uICsgY29sdW1ucyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb25BbmNob3IoKTtcbiAgICAgICAgdmFyIGxlYWQgPSB0aGlzLmdldFNlbGVjdGlvbkxlYWQoKTtcblxuICAgICAgICB2YXIgaXNCYWNrd2FyZHMgPSB0aGlzLmlzQmFja3dhcmRzKCk7XG5cbiAgICAgICAgaWYgKCFpc0JhY2t3YXJkcyB8fCBhbmNob3IuY29sdW1uICE9PSAwKVxuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25BbmNob3IoYW5jaG9yLnJvdywgYW5jaG9yLmNvbHVtbiArIGNvbHVtbnMpO1xuXG4gICAgICAgIGlmIChpc0JhY2t3YXJkcyB8fCBsZWFkLmNvbHVtbiAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhsZWFkLnJvdywgbGVhZC5jb2x1bW4gKyBjb2x1bW5zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmlzQmFja3dhcmRzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhbmNob3IgPSB0aGlzLmFuY2hvcjtcbiAgICAgICAgdmFyIGxlYWQgPSB0aGlzLmxlYWQ7XG4gICAgICAgIHJldHVybiAoYW5jaG9yLnJvdyA+IGxlYWQucm93IHx8IChhbmNob3Iucm93ID09IGxlYWQucm93ICYmIGFuY2hvci5jb2x1bW4gPiBsZWFkLmNvbHVtbikpO1xuICAgIH07XG4gICAgdGhpcy5nZXRSYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgYW5jaG9yID0gdGhpcy5hbmNob3I7XG4gICAgICAgIHZhciBsZWFkID0gdGhpcy5sZWFkO1xuXG4gICAgICAgIGlmICh0aGlzLmlzRW1wdHkoKSlcbiAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKGxlYWQsIGxlYWQpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzQmFja3dhcmRzKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKGxlYWQsIGFuY2hvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhhbmNob3IsIGxlYWQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmNsZWFyU2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy4kaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy4kaXNFbXB0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9lbWl0KFwiY2hhbmdlU2VsZWN0aW9uXCIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdEFsbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbGFzdFJvdyA9IHRoaXMuZG9jLmdldExlbmd0aCgpIC0gMTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25BbmNob3IoMCwgMCk7XG4gICAgICAgIHRoaXMubW92ZUN1cnNvclRvKGxhc3RSb3csIHRoaXMuZG9jLmdldExpbmUobGFzdFJvdykubGVuZ3RoKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0UmFuZ2UgPVxuICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSwgcmV2ZXJzZSkge1xuICAgICAgICBpZiAocmV2ZXJzZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25BbmNob3IocmFuZ2UuZW5kLnJvdywgcmFuZ2UuZW5kLmNvbHVtbik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFRvKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uQW5jaG9yKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0VG8ocmFuZ2UuZW5kLnJvdywgcmFuZ2UuZW5kLmNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ2V0UmFuZ2UoKS5pc0VtcHR5KCkpXG4gICAgICAgICAgICB0aGlzLiRpc0VtcHR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy4kZGVzaXJlZENvbHVtbiA9IG51bGw7XG4gICAgfTtcblxuICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24gPSBmdW5jdGlvbihtb3Zlcikge1xuICAgICAgICB2YXIgbGVhZCA9IHRoaXMubGVhZDtcbiAgICAgICAgaWYgKHRoaXMuJGlzRW1wdHkpXG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvbkFuY2hvcihsZWFkLnJvdywgbGVhZC5jb2x1bW4pO1xuXG4gICAgICAgIG1vdmVyLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdFRvID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywgY29sdW1uKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdFRvUG9zaXRpb24gPSBmdW5jdGlvbihwb3MpIHtcbiAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb24ocG9zKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLm1vdmVUbyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocm93LCBjb2x1bW4pO1xuICAgIH07XG4gICAgdGhpcy5tb3ZlVG9Qb3NpdGlvbiA9IGZ1bmN0aW9uKHBvcykge1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb24ocG9zKTtcbiAgICB9O1xuICAgIHRoaXMuc2VsZWN0VXAgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JVcCk7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdERvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JEb3duKTtcbiAgICB9O1xuICAgIHRoaXMuc2VsZWN0UmlnaHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JSaWdodCk7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdExlZnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JMZWZ0KTtcbiAgICB9O1xuICAgIHRoaXMuc2VsZWN0TGluZVN0YXJ0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yTGluZVN0YXJ0KTtcbiAgICB9O1xuICAgIHRoaXMuc2VsZWN0TGluZUVuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvckxpbmVFbmQpO1xuICAgIH07XG4gICAgdGhpcy5zZWxlY3RGaWxlRW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yRmlsZUVuZCk7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdEZpbGVTdGFydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvckZpbGVTdGFydCk7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdFdvcmRSaWdodCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvcldvcmRSaWdodCk7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdFdvcmRMZWZ0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yV29yZExlZnQpO1xuICAgIH07XG4gICAgdGhpcy5nZXRXb3JkUmFuZ2UgPSBmdW5jdGlvbihyb3csIGNvbHVtbikge1xuICAgICAgICBpZiAodHlwZW9mIGNvbHVtbiA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB2YXIgY3Vyc29yID0gcm93IHx8IHRoaXMubGVhZDtcbiAgICAgICAgICAgIHJvdyA9IGN1cnNvci5yb3c7XG4gICAgICAgICAgICBjb2x1bW4gPSBjdXJzb3IuY29sdW1uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uZ2V0V29yZFJhbmdlKHJvdywgY29sdW1uKTtcbiAgICB9O1xuICAgIHRoaXMuc2VsZWN0V29yZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHRoaXMuZ2V0V29yZFJhbmdlKCkpO1xuICAgIH07XG4gICAgdGhpcy5zZWxlY3RBV29yZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5nZXRDdXJzb3IoKTtcbiAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5zZXNzaW9uLmdldEFXb3JkUmFuZ2UoY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2UpO1xuICAgIH07XG5cbiAgICB0aGlzLmdldExpbmVSYW5nZSA9IGZ1bmN0aW9uKHJvdywgZXhjbHVkZUxhc3RDaGFyKSB7XG4gICAgICAgIHZhciByb3dTdGFydCA9IHR5cGVvZiByb3cgPT0gXCJudW1iZXJcIiA/IHJvdyA6IHRoaXMubGVhZC5yb3c7XG4gICAgICAgIHZhciByb3dFbmQ7XG5cbiAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdldEZvbGRMaW5lKHJvd1N0YXJ0KTtcbiAgICAgICAgaWYgKGZvbGRMaW5lKSB7XG4gICAgICAgICAgICByb3dTdGFydCA9IGZvbGRMaW5lLnN0YXJ0LnJvdztcbiAgICAgICAgICAgIHJvd0VuZCA9IGZvbGRMaW5lLmVuZC5yb3c7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3dFbmQgPSByb3dTdGFydDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXhjbHVkZUxhc3RDaGFyID09PSB0cnVlKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShyb3dTdGFydCwgMCwgcm93RW5kLCB0aGlzLnNlc3Npb24uZ2V0TGluZShyb3dFbmQpLmxlbmd0aCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uocm93U3RhcnQsIDAsIHJvd0VuZCArIDEsIDApO1xuICAgIH07XG4gICAgdGhpcy5zZWxlY3RMaW5lID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UodGhpcy5nZXRMaW5lUmFuZ2UoKSk7XG4gICAgfTtcbiAgICB0aGlzLm1vdmVDdXJzb3JVcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLm1vdmVDdXJzb3JCeSgtMSwgMCk7XG4gICAgfTtcbiAgICB0aGlzLm1vdmVDdXJzb3JEb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMubW92ZUN1cnNvckJ5KDEsIDApO1xuICAgIH07XG4gICAgdGhpcy53b3VsZE1vdmVJbnRvU29mdFRhYiA9IGZ1bmN0aW9uKGN1cnNvciwgdGFiU2l6ZSwgZGlyZWN0aW9uKSB7XG4gICAgICAgIHZhciBzdGFydCA9IGN1cnNvci5jb2x1bW47XG4gICAgICAgIHZhciBlbmQgPSBjdXJzb3IuY29sdW1uICsgdGFiU2l6ZTtcblxuICAgICAgICBpZiAoZGlyZWN0aW9uIDwgMCkge1xuICAgICAgICAgICAgc3RhcnQgPSBjdXJzb3IuY29sdW1uIC0gdGFiU2l6ZTtcbiAgICAgICAgICAgIGVuZCA9IGN1cnNvci5jb2x1bW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5pc1RhYlN0b3AoY3Vyc29yKSAmJiB0aGlzLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpLnNsaWNlKHN0YXJ0LCBlbmQpLnNwbGl0KFwiIFwiKS5sZW5ndGgtMSA9PSB0YWJTaXplO1xuICAgIH07XG4gICAgdGhpcy5tb3ZlQ3Vyc29yTGVmdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5sZWFkLmdldFBvc2l0aW9uKCksXG4gICAgICAgICAgICBmb2xkO1xuXG4gICAgICAgIGlmIChmb2xkID0gdGhpcy5zZXNzaW9uLmdldEZvbGRBdChjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uLCAtMSkpIHtcbiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKGZvbGQuc3RhcnQucm93LCBmb2xkLnN0YXJ0LmNvbHVtbik7XG4gICAgICAgIH0gZWxzZSBpZiAoY3Vyc29yLmNvbHVtbiA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKGN1cnNvci5yb3cgPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8oY3Vyc29yLnJvdyAtIDEsIHRoaXMuZG9jLmdldExpbmUoY3Vyc29yLnJvdyAtIDEpLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgdGFiU2l6ZSA9IHRoaXMuc2Vzc2lvbi5nZXRUYWJTaXplKCk7XG4gICAgICAgICAgICBpZiAodGhpcy53b3VsZE1vdmVJbnRvU29mdFRhYihjdXJzb3IsIHRhYlNpemUsIC0xKSAmJiAhdGhpcy5zZXNzaW9uLmdldE5hdmlnYXRlV2l0aGluU29mdFRhYnMoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvckJ5KDAsIC10YWJTaXplKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yQnkoMCwgLTEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLm1vdmVDdXJzb3JSaWdodCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5sZWFkLmdldFBvc2l0aW9uKCksXG4gICAgICAgICAgICBmb2xkO1xuICAgICAgICBpZiAoZm9sZCA9IHRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQoY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbiwgMSkpIHtcbiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKGZvbGQuZW5kLnJvdywgZm9sZC5lbmQuY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmxlYWQuY29sdW1uID09IHRoaXMuZG9jLmdldExpbmUodGhpcy5sZWFkLnJvdykubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sZWFkLnJvdyA8IHRoaXMuZG9jLmdldExlbmd0aCgpIC0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHRoaXMubGVhZC5yb3cgKyAxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciB0YWJTaXplID0gdGhpcy5zZXNzaW9uLmdldFRhYlNpemUoKTtcbiAgICAgICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLmxlYWQ7XG4gICAgICAgICAgICBpZiAodGhpcy53b3VsZE1vdmVJbnRvU29mdFRhYihjdXJzb3IsIHRhYlNpemUsIDEpICYmICF0aGlzLnNlc3Npb24uZ2V0TmF2aWdhdGVXaXRoaW5Tb2Z0VGFicygpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yQnkoMCwgdGFiU2l6ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvckJ5KDAsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLm1vdmVDdXJzb3JMaW5lU3RhcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHJvdyA9IHRoaXMubGVhZC5yb3c7XG4gICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmxlYWQuY29sdW1uO1xuICAgICAgICB2YXIgc2NyZWVuUm93ID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Sb3cocm93LCBjb2x1bW4pO1xuICAgICAgICB2YXIgZmlyc3RDb2x1bW5Qb3NpdGlvbiA9IHRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuUm93LCAwKTtcbiAgICAgICAgdmFyIGJlZm9yZUN1cnNvciA9IHRoaXMuc2Vzc2lvbi5nZXREaXNwbGF5TGluZShcbiAgICAgICAgICAgIHJvdywgbnVsbCwgZmlyc3RDb2x1bW5Qb3NpdGlvbi5yb3csXG4gICAgICAgICAgICBmaXJzdENvbHVtblBvc2l0aW9uLmNvbHVtblxuICAgICAgICApO1xuXG4gICAgICAgIHZhciBsZWFkaW5nU3BhY2UgPSBiZWZvcmVDdXJzb3IubWF0Y2goL15cXHMqLyk7XG4gICAgICAgIGlmIChsZWFkaW5nU3BhY2VbMF0ubGVuZ3RoICE9IGNvbHVtbiAmJiAhdGhpcy5zZXNzaW9uLiR1c2VFbWFjc1N0eWxlTGluZVN0YXJ0KVxuICAgICAgICAgICAgZmlyc3RDb2x1bW5Qb3NpdGlvbi5jb2x1bW4gKz0gbGVhZGluZ1NwYWNlWzBdLmxlbmd0aDtcbiAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihmaXJzdENvbHVtblBvc2l0aW9uKTtcbiAgICB9O1xuICAgIHRoaXMubW92ZUN1cnNvckxpbmVFbmQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGxlYWQgPSB0aGlzLmxlYWQ7XG4gICAgICAgIHZhciBsaW5lRW5kID0gdGhpcy5zZXNzaW9uLmdldERvY3VtZW50TGFzdFJvd0NvbHVtblBvc2l0aW9uKGxlYWQucm93LCBsZWFkLmNvbHVtbik7XG4gICAgICAgIGlmICh0aGlzLmxlYWQuY29sdW1uID09IGxpbmVFbmQuY29sdW1uKSB7XG4gICAgICAgICAgICB2YXIgbGluZSA9IHRoaXMuc2Vzc2lvbi5nZXRMaW5lKGxpbmVFbmQucm93KTtcbiAgICAgICAgICAgIGlmIChsaW5lRW5kLmNvbHVtbiA9PSBsaW5lLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciB0ZXh0RW5kID0gbGluZS5zZWFyY2goL1xccyskLyk7XG4gICAgICAgICAgICAgICAgaWYgKHRleHRFbmQgPiAwKVxuICAgICAgICAgICAgICAgICAgICBsaW5lRW5kLmNvbHVtbiA9IHRleHRFbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhsaW5lRW5kLnJvdywgbGluZUVuZC5jb2x1bW4pO1xuICAgIH07XG4gICAgdGhpcy5tb3ZlQ3Vyc29yRmlsZUVuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcm93ID0gdGhpcy5kb2MuZ2V0TGVuZ3RoKCkgLSAxO1xuICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5kb2MuZ2V0TGluZShyb3cpLmxlbmd0aDtcbiAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocm93LCBjb2x1bW4pO1xuICAgIH07XG4gICAgdGhpcy5tb3ZlQ3Vyc29yRmlsZVN0YXJ0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMubW92ZUN1cnNvclRvKDAsIDApO1xuICAgIH07XG4gICAgdGhpcy5tb3ZlQ3Vyc29yTG9uZ1dvcmRSaWdodCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcm93ID0gdGhpcy5sZWFkLnJvdztcbiAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMubGVhZC5jb2x1bW47XG4gICAgICAgIHZhciBsaW5lID0gdGhpcy5kb2MuZ2V0TGluZShyb3cpO1xuICAgICAgICB2YXIgcmlnaHRPZkN1cnNvciA9IGxpbmUuc3Vic3RyaW5nKGNvbHVtbik7XG5cbiAgICAgICAgdmFyIG1hdGNoO1xuICAgICAgICB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXggPSAwO1xuICAgICAgICB0aGlzLnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXggPSAwO1xuICAgICAgICB2YXIgZm9sZCA9IHRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQocm93LCBjb2x1bW4sIDEpO1xuICAgICAgICBpZiAoZm9sZCkge1xuICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8oZm9sZC5lbmQucm93LCBmb2xkLmVuZC5jb2x1bW4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCA9IHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmV4ZWMocmlnaHRPZkN1cnNvcikpIHtcbiAgICAgICAgICAgIGNvbHVtbiArPSB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXg7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgcmlnaHRPZkN1cnNvciA9IGxpbmUuc3Vic3RyaW5nKGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbHVtbiA+PSBsaW5lLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocm93LCBsaW5lLmxlbmd0aCk7XG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JSaWdodCgpO1xuICAgICAgICAgICAgaWYgKHJvdyA8IHRoaXMuZG9jLmdldExlbmd0aCgpIC0gMSlcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JXb3JkUmlnaHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2ggPSB0aGlzLnNlc3Npb24udG9rZW5SZS5leGVjKHJpZ2h0T2ZDdXJzb3IpKSB7XG4gICAgICAgICAgICBjb2x1bW4gKz0gdGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4O1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywgY29sdW1uKTtcbiAgICB9O1xuICAgIHRoaXMubW92ZUN1cnNvckxvbmdXb3JkTGVmdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcm93ID0gdGhpcy5sZWFkLnJvdztcbiAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMubGVhZC5jb2x1bW47XG4gICAgICAgIHZhciBmb2xkO1xuICAgICAgICBpZiAoZm9sZCA9IHRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQocm93LCBjb2x1bW4sIC0xKSkge1xuICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8oZm9sZC5zdGFydC5yb3csIGZvbGQuc3RhcnQuY29sdW1uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdHIgPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZFN0cmluZ0F0KHJvdywgY29sdW1uLCAtMSk7XG4gICAgICAgIGlmIChzdHIgPT0gbnVsbCkge1xuICAgICAgICAgICAgc3RyID0gdGhpcy5kb2MuZ2V0TGluZShyb3cpLnN1YnN0cmluZygwLCBjb2x1bW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxlZnRPZkN1cnNvciA9IGxhbmcuc3RyaW5nUmV2ZXJzZShzdHIpO1xuICAgICAgICB2YXIgbWF0Y2g7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi50b2tlblJlLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIGlmIChtYXRjaCA9IHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmV4ZWMobGVmdE9mQ3Vyc29yKSkge1xuICAgICAgICAgICAgY29sdW1uIC09IHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmxhc3RJbmRleDtcbiAgICAgICAgICAgIGxlZnRPZkN1cnNvciA9IGxlZnRPZkN1cnNvci5zbGljZSh0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm5vblRva2VuUmUubGFzdEluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sdW1uIDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywgMCk7XG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JMZWZ0KCk7XG4gICAgICAgICAgICBpZiAocm93ID4gMClcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JXb3JkTGVmdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCA9IHRoaXMuc2Vzc2lvbi50b2tlblJlLmV4ZWMobGVmdE9mQ3Vyc29yKSkge1xuICAgICAgICAgICAgY29sdW1uIC09IHRoaXMuc2Vzc2lvbi50b2tlblJlLmxhc3RJbmRleDtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi50b2tlblJlLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhyb3csIGNvbHVtbik7XG4gICAgfTtcblxuICAgIHRoaXMuJHNob3J0V29yZEVuZEluZGV4ID0gZnVuY3Rpb24ocmlnaHRPZkN1cnNvcikge1xuICAgICAgICB2YXIgbWF0Y2gsIGluZGV4ID0gMCwgY2g7XG4gICAgICAgIHZhciB3aGl0ZXNwYWNlUmUgPSAvXFxzLztcbiAgICAgICAgdmFyIHRva2VuUmUgPSB0aGlzLnNlc3Npb24udG9rZW5SZTtcblxuICAgICAgICB0b2tlblJlLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIGlmIChtYXRjaCA9IHRoaXMuc2Vzc2lvbi50b2tlblJlLmV4ZWMocmlnaHRPZkN1cnNvcikpIHtcbiAgICAgICAgICAgIGluZGV4ID0gdGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2hpbGUgKChjaCA9IHJpZ2h0T2ZDdXJzb3JbaW5kZXhdKSAmJiB3aGl0ZXNwYWNlUmUudGVzdChjaCkpXG4gICAgICAgICAgICAgICAgaW5kZXggKys7XG5cbiAgICAgICAgICAgIGlmIChpbmRleCA8IDEpIHtcbiAgICAgICAgICAgICAgICB0b2tlblJlLmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgIHdoaWxlICgoY2ggPSByaWdodE9mQ3Vyc29yW2luZGV4XSkgJiYgIXRva2VuUmUudGVzdChjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5SZS5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICBpbmRleCArKztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdoaXRlc3BhY2VSZS50ZXN0KGNoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY2ggPSByaWdodE9mQ3Vyc29yW2luZGV4XSkgJiYgd2hpdGVzcGFjZVJlLnRlc3QoY2gpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCArKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0b2tlblJlLmxhc3RJbmRleCA9IDA7XG5cbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH07XG5cbiAgICB0aGlzLm1vdmVDdXJzb3JTaG9ydFdvcmRSaWdodCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcm93ID0gdGhpcy5sZWFkLnJvdztcbiAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMubGVhZC5jb2x1bW47XG4gICAgICAgIHZhciBsaW5lID0gdGhpcy5kb2MuZ2V0TGluZShyb3cpO1xuICAgICAgICB2YXIgcmlnaHRPZkN1cnNvciA9IGxpbmUuc3Vic3RyaW5nKGNvbHVtbik7XG5cbiAgICAgICAgdmFyIGZvbGQgPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZEF0KHJvdywgY29sdW1uLCAxKTtcbiAgICAgICAgaWYgKGZvbGQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3ZlQ3Vyc29yVG8oZm9sZC5lbmQucm93LCBmb2xkLmVuZC5jb2x1bW4pO1xuXG4gICAgICAgIGlmIChjb2x1bW4gPT0gbGluZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBsID0gdGhpcy5kb2MuZ2V0TGVuZ3RoKCk7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgcm93Kys7XG4gICAgICAgICAgICAgICAgcmlnaHRPZkN1cnNvciA9IHRoaXMuZG9jLmdldExpbmUocm93KTtcbiAgICAgICAgICAgIH0gd2hpbGUgKHJvdyA8IGwgJiYgL15cXHMqJC8udGVzdChyaWdodE9mQ3Vyc29yKSk7XG5cbiAgICAgICAgICAgIGlmICghL15cXHMrLy50ZXN0KHJpZ2h0T2ZDdXJzb3IpKVxuICAgICAgICAgICAgICAgIHJpZ2h0T2ZDdXJzb3IgPSBcIlwiO1xuICAgICAgICAgICAgY29sdW1uID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuJHNob3J0V29yZEVuZEluZGV4KHJpZ2h0T2ZDdXJzb3IpO1xuXG4gICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywgY29sdW1uICsgaW5kZXgpO1xuICAgIH07XG5cbiAgICB0aGlzLm1vdmVDdXJzb3JTaG9ydFdvcmRMZWZ0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByb3cgPSB0aGlzLmxlYWQucm93O1xuICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5sZWFkLmNvbHVtbjtcblxuICAgICAgICB2YXIgZm9sZDtcbiAgICAgICAgaWYgKGZvbGQgPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZEF0KHJvdywgY29sdW1uLCAtMSkpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb3ZlQ3Vyc29yVG8oZm9sZC5zdGFydC5yb3csIGZvbGQuc3RhcnQuY29sdW1uKTtcblxuICAgICAgICB2YXIgbGluZSA9IHRoaXMuc2Vzc2lvbi5nZXRMaW5lKHJvdykuc3Vic3RyaW5nKDAsIGNvbHVtbik7XG4gICAgICAgIGlmIChjb2x1bW4gPT09IDApIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICByb3ctLTtcbiAgICAgICAgICAgICAgICBsaW5lID0gdGhpcy5kb2MuZ2V0TGluZShyb3cpO1xuICAgICAgICAgICAgfSB3aGlsZSAocm93ID4gMCAmJiAvXlxccyokLy50ZXN0KGxpbmUpKTtcblxuICAgICAgICAgICAgY29sdW1uID0gbGluZS5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoIS9cXHMrJC8udGVzdChsaW5lKSlcbiAgICAgICAgICAgICAgICBsaW5lID0gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZWZ0T2ZDdXJzb3IgPSBsYW5nLnN0cmluZ1JldmVyc2UobGluZSk7XG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuJHNob3J0V29yZEVuZEluZGV4KGxlZnRPZkN1cnNvcik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubW92ZUN1cnNvclRvKHJvdywgY29sdW1uIC0gaW5kZXgpO1xuICAgIH07XG5cbiAgICB0aGlzLm1vdmVDdXJzb3JXb3JkUmlnaHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi4kc2VsZWN0TG9uZ1dvcmRzKVxuICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yTG9uZ1dvcmRSaWdodCgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JTaG9ydFdvcmRSaWdodCgpO1xuICAgIH07XG5cbiAgICB0aGlzLm1vdmVDdXJzb3JXb3JkTGVmdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5zZXNzaW9uLiRzZWxlY3RMb25nV29yZHMpXG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JMb25nV29yZExlZnQoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yU2hvcnRXb3JkTGVmdCgpO1xuICAgIH07XG4gICAgdGhpcy5tb3ZlQ3Vyc29yQnkgPSBmdW5jdGlvbihyb3dzLCBjaGFycykge1xuICAgICAgICB2YXIgc2NyZWVuUG9zID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihcbiAgICAgICAgICAgIHRoaXMubGVhZC5yb3csXG4gICAgICAgICAgICB0aGlzLmxlYWQuY29sdW1uXG4gICAgICAgICk7XG5cbiAgICAgICAgdmFyIG9mZnNldFg7XG5cbiAgICAgICAgaWYgKGNoYXJzID09PSAwKSB7XG4gICAgICAgICAgICBpZiAocm93cyAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmlzQmlkaVJvdyhzY3JlZW5Qb3Mucm93LCB0aGlzLmxlYWQucm93KSkge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRYID0gdGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci5nZXRQb3NMZWZ0KHNjcmVlblBvcy5jb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICBzY3JlZW5Qb3MuY29sdW1uID0gTWF0aC5yb3VuZChvZmZzZXRYIC8gdGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci5jaGFyV2lkdGhzWzBdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRYID0gc2NyZWVuUG9zLmNvbHVtbiAqIHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuY2hhcldpZHRoc1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLiRkZXNpcmVkQ29sdW1uKVxuICAgICAgICAgICAgICAgIHNjcmVlblBvcy5jb2x1bW4gPSB0aGlzLiRkZXNpcmVkQ29sdW1uO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuJGRlc2lyZWRDb2x1bW4gPSBzY3JlZW5Qb3MuY29sdW1uO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRvY1BvcyA9IHRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuUG9zLnJvdyArIHJvd3MsIHNjcmVlblBvcy5jb2x1bW4sIG9mZnNldFgpO1xuICAgICAgICBcbiAgICAgICAgaWYgKHJvd3MgIT09IDAgJiYgY2hhcnMgPT09IDAgJiYgZG9jUG9zLnJvdyA9PT0gdGhpcy5sZWFkLnJvdyAmJiBkb2NQb3MuY29sdW1uID09PSB0aGlzLmxlYWQuY29sdW1uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzICYmIHRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0c1tkb2NQb3Mucm93XSkge1xuICAgICAgICAgICAgICAgIGlmIChkb2NQb3Mucm93ID4gMCB8fCByb3dzID4gMClcbiAgICAgICAgICAgICAgICAgICAgZG9jUG9zLnJvdysrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubW92ZUN1cnNvclRvKGRvY1Bvcy5yb3csIGRvY1Bvcy5jb2x1bW4gKyBjaGFycywgY2hhcnMgPT09IDApO1xuICAgIH07XG4gICAgdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbiA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7XG4gICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTtcbiAgICB9O1xuICAgIHRoaXMubW92ZUN1cnNvclRvID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIGtlZXBEZXNpcmVkQ29sdW1uKSB7XG4gICAgICAgIHZhciBmb2xkID0gdGhpcy5zZXNzaW9uLmdldEZvbGRBdChyb3csIGNvbHVtbiwgMSk7XG4gICAgICAgIGlmIChmb2xkKSB7XG4gICAgICAgICAgICByb3cgPSBmb2xkLnN0YXJ0LnJvdztcbiAgICAgICAgICAgIGNvbHVtbiA9IGZvbGQuc3RhcnQuY29sdW1uO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4ka2VlcERlc2lyZWRDb2x1bW5PbkNoYW5nZSA9IHRydWU7XG4gICAgICAgIHZhciBsaW5lID0gdGhpcy5zZXNzaW9uLmdldExpbmUocm93KTtcbiAgICAgICAgaWYgKC9bXFx1REMwMC1cXHVERkZGXS8udGVzdChsaW5lLmNoYXJBdChjb2x1bW4pKSAmJiBsaW5lLmNoYXJBdChjb2x1bW4gLSAxKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubGVhZC5yb3cgPT0gcm93ICYmIHRoaXMubGVhZC5jb2x1bW4gPT0gY29sdW1uICsgMSlcbiAgICAgICAgICAgICAgICBjb2x1bW4gPSBjb2x1bW4gLSAxO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGNvbHVtbiA9IGNvbHVtbiArIDE7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sZWFkLnNldFBvc2l0aW9uKHJvdywgY29sdW1uKTtcbiAgICAgICAgdGhpcy4ka2VlcERlc2lyZWRDb2x1bW5PbkNoYW5nZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICgha2VlcERlc2lyZWRDb2x1bW4pXG4gICAgICAgICAgICB0aGlzLiRkZXNpcmVkQ29sdW1uID0gbnVsbDtcbiAgICB9O1xuICAgIHRoaXMubW92ZUN1cnNvclRvU2NyZWVuID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIGtlZXBEZXNpcmVkQ29sdW1uKSB7XG4gICAgICAgIHZhciBwb3MgPSB0aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHJvdywgY29sdW1uKTtcbiAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocG9zLnJvdywgcG9zLmNvbHVtbiwga2VlcERlc2lyZWRDb2x1bW4pO1xuICAgIH07XG4gICAgdGhpcy5kZXRhY2ggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5sZWFkLmRldGFjaCgpO1xuICAgICAgICB0aGlzLmFuY2hvci5kZXRhY2goKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uID0gdGhpcy5kb2MgPSBudWxsO1xuICAgIH07XG5cbiAgICB0aGlzLmZyb21PcmllbnRlZFJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShyYW5nZSwgcmFuZ2UuY3Vyc29yID09IHJhbmdlLnN0YXJ0KTtcbiAgICAgICAgdGhpcy4kZGVzaXJlZENvbHVtbiA9IHJhbmdlLmRlc2lyZWRDb2x1bW4gfHwgdGhpcy4kZGVzaXJlZENvbHVtbjtcbiAgICB9O1xuXG4gICAgdGhpcy50b09yaWVudGVkUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkge1xuICAgICAgICB2YXIgciA9IHRoaXMuZ2V0UmFuZ2UoKTtcbiAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4gPSByLnN0YXJ0LmNvbHVtbjtcbiAgICAgICAgICAgIHJhbmdlLnN0YXJ0LnJvdyA9IHIuc3RhcnQucm93O1xuICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IHIuZW5kLmNvbHVtbjtcbiAgICAgICAgICAgIHJhbmdlLmVuZC5yb3cgPSByLmVuZC5yb3c7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByYW5nZSA9IHI7XG4gICAgICAgIH1cblxuICAgICAgICByYW5nZS5jdXJzb3IgPSB0aGlzLmlzQmFja3dhcmRzKCkgPyByYW5nZS5zdGFydCA6IHJhbmdlLmVuZDtcbiAgICAgICAgcmFuZ2UuZGVzaXJlZENvbHVtbiA9IHRoaXMuJGRlc2lyZWRDb2x1bW47XG4gICAgICAgIHJldHVybiByYW5nZTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0UmFuZ2VPZk1vdmVtZW50cyA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5nZXRDdXJzb3IoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZ1bmModGhpcyk7XG4gICAgICAgICAgICB2YXIgZW5kID0gdGhpcy5nZXRDdXJzb3IoKTtcbiAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LGVuZCk7XG4gICAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHMoc3RhcnQsc3RhcnQpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihzdGFydCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMucmFuZ2VDb3VudCkge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLnJhbmdlcy5tYXAoZnVuY3Rpb24ocikge1xuICAgICAgICAgICAgICAgIHZhciByMSA9IHIuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICByMS5pc0JhY2t3YXJkcyA9IHIuY3Vyc29yID09IHIuc3RhcnQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHIxO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ2V0UmFuZ2UoKTtcbiAgICAgICAgICAgIGRhdGEuaXNCYWNrd2FyZHMgPSB0aGlzLmlzQmFja3dhcmRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfTtcblxuICAgIHRoaXMuZnJvbUpTT04gPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgIGlmIChkYXRhLnN0YXJ0ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucmFuZ2VMaXN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b1NpbmdsZVJhbmdlKGRhdGFbMF0pO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBkYXRhLmxlbmd0aDsgaS0tOyApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBSYW5nZS5mcm9tUG9pbnRzKGRhdGFbaV0uc3RhcnQsIGRhdGFbaV0uZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFbaV0uaXNCYWNrd2FyZHMpXG4gICAgICAgICAgICAgICAgICAgICAgICByLmN1cnNvciA9IHIuc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkUmFuZ2UociwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJhbmdlTGlzdClcbiAgICAgICAgICAgIHRoaXMudG9TaW5nbGVSYW5nZShkYXRhKTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShkYXRhLCBkYXRhLmlzQmFja3dhcmRzKTtcbiAgICB9O1xuXG4gICAgdGhpcy5pc0VxdWFsID0gZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICBpZiAoKGRhdGEubGVuZ3RoIHx8IHRoaXMucmFuZ2VDb3VudCkgJiYgZGF0YS5sZW5ndGggIT0gdGhpcy5yYW5nZUNvdW50KVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIWRhdGEubGVuZ3RoIHx8ICF0aGlzLnJhbmdlcylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJhbmdlKCkuaXNFcXVhbChkYXRhKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5yYW5nZXMubGVuZ3RoOyBpLS07ICkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJhbmdlc1tpXS5pc0VxdWFsKGRhdGFbaV0pKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG59KS5jYWxsKFNlbGVjdGlvbi5wcm90b3R5cGUpO1xuXG5leHBvcnRzLlNlbGVjdGlvbiA9IFNlbGVjdGlvbjtcbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL3Rva2VuaXplclwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2NvbmZpZ1wiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjb25maWcgPSBhY2VxdWlyZShcIi4vY29uZmlnXCIpO1xudmFyIE1BWF9UT0tFTl9DT1VOVCA9IDIwMDA7XG52YXIgVG9rZW5pemVyID0gZnVuY3Rpb24ocnVsZXMpIHtcbiAgICB0aGlzLnN0YXRlcyA9IHJ1bGVzO1xuXG4gICAgdGhpcy5yZWdFeHBzID0ge307XG4gICAgdGhpcy5tYXRjaE1hcHBpbmdzID0ge307XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMuc3RhdGVzKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuc3RhdGVzW2tleV07XG4gICAgICAgIHZhciBydWxlUmVnRXhwcyA9IFtdO1xuICAgICAgICB2YXIgbWF0Y2hUb3RhbCA9IDA7XG4gICAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5tYXRjaE1hcHBpbmdzW2tleV0gPSB7ZGVmYXVsdFRva2VuOiBcInRleHRcIn07XG4gICAgICAgIHZhciBmbGFnID0gXCJnXCI7XG5cbiAgICAgICAgdmFyIHNwbGl0dGVyUnVybGVzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBydWxlID0gc3RhdGVbaV07XG4gICAgICAgICAgICBpZiAocnVsZS5kZWZhdWx0VG9rZW4pXG4gICAgICAgICAgICAgICAgbWFwcGluZy5kZWZhdWx0VG9rZW4gPSBydWxlLmRlZmF1bHRUb2tlbjtcbiAgICAgICAgICAgIGlmIChydWxlLmNhc2VJbnNlbnNpdGl2ZSlcbiAgICAgICAgICAgICAgICBmbGFnID0gXCJnaVwiO1xuICAgICAgICAgICAgaWYgKHJ1bGUucmVnZXggPT0gbnVsbClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgaWYgKHJ1bGUucmVnZXggaW5zdGFuY2VvZiBSZWdFeHApXG4gICAgICAgICAgICAgICAgcnVsZS5yZWdleCA9IHJ1bGUucmVnZXgudG9TdHJpbmcoKS5zbGljZSgxLCAtMSk7XG4gICAgICAgICAgICB2YXIgYWRqdXN0ZWRyZWdleCA9IHJ1bGUucmVnZXg7XG4gICAgICAgICAgICB2YXIgbWF0Y2hjb3VudCA9IG5ldyBSZWdFeHAoXCIoPzooXCIgKyBhZGp1c3RlZHJlZ2V4ICsgXCIpfCguKSlcIikuZXhlYyhcImFcIikubGVuZ3RoIC0gMjtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJ1bGUudG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUudG9rZW4ubGVuZ3RoID09IDEgfHwgbWF0Y2hjb3VudCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bGUudG9rZW4gPSBydWxlLnRva2VuWzBdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2hjb3VudCAtIDEgIT0gcnVsZS50b2tlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRFcnJvcihcIm51bWJlciBvZiBjbGFzc2VzIGFuZCByZWdleHAgZ3JvdXBzIGRvZXNuJ3QgbWF0Y2hcIiwgeyBcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGU6IHJ1bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cENvdW50OiBtYXRjaGNvdW50IC0gMVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcnVsZS50b2tlbiA9IHJ1bGUudG9rZW5bMF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcnVsZS50b2tlbkFycmF5ID0gcnVsZS50b2tlbjtcbiAgICAgICAgICAgICAgICAgICAgcnVsZS50b2tlbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJ1bGUub25NYXRjaCA9IHRoaXMuJGFycmF5VG9rZW5zO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJ1bGUudG9rZW4gPT0gXCJmdW5jdGlvblwiICYmICFydWxlLm9uTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hjb3VudCA+IDEpXG4gICAgICAgICAgICAgICAgICAgIHJ1bGUub25NYXRjaCA9IHRoaXMuJGFwcGx5VG9rZW47XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBydWxlLm9uTWF0Y2ggPSBydWxlLnRva2VuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobWF0Y2hjb3VudCA+IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAoL1xcXFxcXGQvLnRlc3QocnVsZS5yZWdleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRqdXN0ZWRyZWdleCA9IHJ1bGUucmVnZXgucmVwbGFjZSgvXFxcXChbMC05XSspL2csIGZ1bmN0aW9uKG1hdGNoLCBkaWdpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXFxcXFwiICsgKHBhcnNlSW50KGRpZ2l0LCAxMCkgKyBtYXRjaFRvdGFsICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoY291bnQgPSAxO1xuICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZHJlZ2V4ID0gdGhpcy5yZW1vdmVDYXB0dXJpbmdHcm91cHMocnVsZS5yZWdleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghcnVsZS5zcGxpdFJlZ2V4ICYmIHR5cGVvZiBydWxlLnRva2VuICE9IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgIHNwbGl0dGVyUnVybGVzLnB1c2gocnVsZSk7IC8vIGZsYWcgd2lsbCBiZSBrbm93biBvbmx5IGF0IHRoZSB2ZXJ5IGVuZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtYXBwaW5nW21hdGNoVG90YWxdID0gaTtcbiAgICAgICAgICAgIG1hdGNoVG90YWwgKz0gbWF0Y2hjb3VudDtcblxuICAgICAgICAgICAgcnVsZVJlZ0V4cHMucHVzaChhZGp1c3RlZHJlZ2V4KTtcbiAgICAgICAgICAgIGlmICghcnVsZS5vbk1hdGNoKVxuICAgICAgICAgICAgICAgIHJ1bGUub25NYXRjaCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICghcnVsZVJlZ0V4cHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBtYXBwaW5nWzBdID0gMDtcbiAgICAgICAgICAgIHJ1bGVSZWdFeHBzLnB1c2goXCIkXCIpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBzcGxpdHRlclJ1cmxlcy5mb3JFYWNoKGZ1bmN0aW9uKHJ1bGUpIHtcbiAgICAgICAgICAgIHJ1bGUuc3BsaXRSZWdleCA9IHRoaXMuY3JlYXRlU3BsaXR0ZXJSZWdleHAocnVsZS5yZWdleCwgZmxhZyk7XG4gICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgIHRoaXMucmVnRXhwc1trZXldID0gbmV3IFJlZ0V4cChcIihcIiArIHJ1bGVSZWdFeHBzLmpvaW4oXCIpfChcIikgKyBcIil8KCQpXCIsIGZsYWcpO1xuICAgIH1cbn07XG5cbihmdW5jdGlvbigpIHtcbiAgICB0aGlzLiRzZXRNYXhUb2tlbkNvdW50ID0gZnVuY3Rpb24obSkge1xuICAgICAgICBNQVhfVE9LRU5fQ09VTlQgPSBtIHwgMDtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuJGFwcGx5VG9rZW4gPSBmdW5jdGlvbihzdHIpIHtcbiAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuc3BsaXRSZWdleC5leGVjKHN0cikuc2xpY2UoMSk7XG4gICAgICAgIHZhciB0eXBlcyA9IHRoaXMudG9rZW4uYXBwbHkodGhpcywgdmFsdWVzKTtcbiAgICAgICAgaWYgKHR5cGVvZiB0eXBlcyA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHJldHVybiBbe3R5cGU6IHR5cGVzLCB2YWx1ZTogc3RyfV07XG5cbiAgICAgICAgdmFyIHRva2VucyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHR5cGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgaWYgKHZhbHVlc1tpXSlcbiAgICAgICAgICAgICAgICB0b2tlbnNbdG9rZW5zLmxlbmd0aF0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVzW2ldLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVzW2ldXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW5zO1xuICAgIH07XG5cbiAgICB0aGlzLiRhcnJheVRva2VucyA9IGZ1bmN0aW9uKHN0cikge1xuICAgICAgICBpZiAoIXN0cilcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuc3BsaXRSZWdleC5leGVjKHN0cik7XG4gICAgICAgIGlmICghdmFsdWVzKVxuICAgICAgICAgICAgcmV0dXJuIFwidGV4dFwiO1xuICAgICAgICB2YXIgdG9rZW5zID0gW107XG4gICAgICAgIHZhciB0eXBlcyA9IHRoaXMudG9rZW5BcnJheTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0eXBlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZXNbaSArIDFdKVxuICAgICAgICAgICAgICAgIHRva2Vuc1t0b2tlbnMubGVuZ3RoXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZXNbaV0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZXNbaSArIDFdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW5zO1xuICAgIH07XG5cbiAgICB0aGlzLnJlbW92ZUNhcHR1cmluZ0dyb3VwcyA9IGZ1bmN0aW9uKHNyYykge1xuICAgICAgICB2YXIgciA9IHNyYy5yZXBsYWNlKFxuICAgICAgICAgICAgL1xcWyg/OlxcXFwufFteXFxdXSkqP1xcXXxcXFxcLnxcXChcXD9bOj0hXXwoXFwoKS9nLFxuICAgICAgICAgICAgZnVuY3Rpb24oeCwgeSkge3JldHVybiB5ID8gXCIoPzpcIiA6IHg7fVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gcjtcbiAgICB9O1xuXG4gICAgdGhpcy5jcmVhdGVTcGxpdHRlclJlZ2V4cCA9IGZ1bmN0aW9uKHNyYywgZmxhZykge1xuICAgICAgICBpZiAoc3JjLmluZGV4T2YoXCIoPz1cIikgIT0gLTEpIHtcbiAgICAgICAgICAgIHZhciBzdGFjayA9IDA7XG4gICAgICAgICAgICB2YXIgaW5DaENsYXNzID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgbGFzdENhcHR1cmUgPSB7fTtcbiAgICAgICAgICAgIHNyYy5yZXBsYWNlKC8oXFxcXC4pfChcXCgoPzpcXD9bPSFdKT8pfChcXCkpfChbXFxbXFxdXSkvZywgZnVuY3Rpb24oXG4gICAgICAgICAgICAgICAgbSwgZXNjLCBwYXJlbk9wZW4sIHBhcmVuQ2xvc2UsIHNxdWFyZSwgaW5kZXhcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChpbkNoQ2xhc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5DaENsYXNzID0gc3F1YXJlICE9IFwiXVwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3F1YXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIGluQ2hDbGFzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJlbkNsb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFjayA9PSBsYXN0Q2FwdHVyZS5zdGFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENhcHR1cmUuZW5kID0gaW5kZXgrMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDYXB0dXJlLnN0YWNrID0gLTE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3RhY2stLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmVuT3Blbikge1xuICAgICAgICAgICAgICAgICAgICBzdGFjaysrO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW5PcGVuLmxlbmd0aCAhPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q2FwdHVyZS5zdGFjayA9IHN0YWNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENhcHR1cmUuc3RhcnQgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAobGFzdENhcHR1cmUuZW5kICE9IG51bGwgJiYgL15cXCkqJC8udGVzdChzcmMuc3Vic3RyKGxhc3RDYXB0dXJlLmVuZCkpKVxuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoMCwgbGFzdENhcHR1cmUuc3RhcnQpICsgc3JjLnN1YnN0cihsYXN0Q2FwdHVyZS5lbmQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzcmMuY2hhckF0KDApICE9IFwiXlwiKSBzcmMgPSBcIl5cIiArIHNyYztcbiAgICAgICAgaWYgKHNyYy5jaGFyQXQoc3JjLmxlbmd0aCAtIDEpICE9IFwiJFwiKSBzcmMgKz0gXCIkXCI7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChzcmMsIChmbGFnfHxcIlwiKS5yZXBsYWNlKFwiZ1wiLCBcIlwiKSk7XG4gICAgfTtcbiAgICB0aGlzLmdldExpbmVUb2tlbnMgPSBmdW5jdGlvbihsaW5lLCBzdGFydFN0YXRlKSB7XG4gICAgICAgIGlmIChzdGFydFN0YXRlICYmIHR5cGVvZiBzdGFydFN0YXRlICE9IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHZhciBzdGFjayA9IHN0YXJ0U3RhdGUuc2xpY2UoMCk7XG4gICAgICAgICAgICBzdGFydFN0YXRlID0gc3RhY2tbMF07XG4gICAgICAgICAgICBpZiAoc3RhcnRTdGF0ZSA9PT0gXCIjdG1wXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHN0YXJ0U3RhdGUgPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIHZhciBzdGFjayA9IFtdO1xuXG4gICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBzdGFydFN0YXRlIHx8IFwic3RhcnRcIjtcbiAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZXNbY3VycmVudFN0YXRlXTtcbiAgICAgICAgaWYgKCFzdGF0ZSkge1xuICAgICAgICAgICAgY3VycmVudFN0YXRlID0gXCJzdGFydFwiO1xuICAgICAgICAgICAgc3RhdGUgPSB0aGlzLnN0YXRlc1tjdXJyZW50U3RhdGVdO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5tYXRjaE1hcHBpbmdzW2N1cnJlbnRTdGF0ZV07XG4gICAgICAgIHZhciByZSA9IHRoaXMucmVnRXhwc1tjdXJyZW50U3RhdGVdO1xuICAgICAgICByZS5sYXN0SW5kZXggPSAwO1xuXG4gICAgICAgIHZhciBtYXRjaCwgdG9rZW5zID0gW107XG4gICAgICAgIHZhciBsYXN0SW5kZXggPSAwO1xuICAgICAgICB2YXIgbWF0Y2hBdHRlbXB0cyA9IDA7XG5cbiAgICAgICAgdmFyIHRva2VuID0ge3R5cGU6IG51bGwsIHZhbHVlOiBcIlwifTtcblxuICAgICAgICB3aGlsZSAobWF0Y2ggPSByZS5leGVjKGxpbmUpKSB7XG4gICAgICAgICAgICB2YXIgdHlwZSA9IG1hcHBpbmcuZGVmYXVsdFRva2VuO1xuICAgICAgICAgICAgdmFyIHJ1bGUgPSBudWxsO1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gbWF0Y2hbMF07XG4gICAgICAgICAgICB2YXIgaW5kZXggPSByZS5sYXN0SW5kZXg7XG5cbiAgICAgICAgICAgIGlmIChpbmRleCAtIHZhbHVlLmxlbmd0aCA+IGxhc3RJbmRleCkge1xuICAgICAgICAgICAgICAgIHZhciBza2lwcGVkID0gbGluZS5zdWJzdHJpbmcobGFzdEluZGV4LCBpbmRleCAtIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT0gdHlwZSkge1xuICAgICAgICAgICAgICAgICAgICB0b2tlbi52YWx1ZSArPSBza2lwcGVkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlKVxuICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHt0eXBlOiB0eXBlLCB2YWx1ZTogc2tpcHBlZH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hdGNoLmxlbmd0aC0yOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbaSArIDFdID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgcnVsZSA9IHN0YXRlW21hcHBpbmdbaV1dO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUub25NYXRjaClcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHJ1bGUub25NYXRjaCh2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaywgbGluZSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gcnVsZS50b2tlbjtcblxuICAgICAgICAgICAgICAgIGlmIChydWxlLm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBydWxlLm5leHQgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gcnVsZS5uZXh0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gcnVsZS5uZXh0KGN1cnJlbnRTdGF0ZSwgc3RhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHRoaXMuc3RhdGVzW2N1cnJlbnRTdGF0ZV07XG4gICAgICAgICAgICAgICAgICAgIGlmICghc3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0RXJyb3IoXCJzdGF0ZSBkb2Vzbid0IGV4aXN0XCIsIGN1cnJlbnRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBcInN0YXJ0XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHRoaXMuc3RhdGVzW2N1cnJlbnRTdGF0ZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IHRoaXMubWF0Y2hNYXBwaW5nc1tjdXJyZW50U3RhdGVdO1xuICAgICAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgcmUgPSB0aGlzLnJlZ0V4cHNbY3VycmVudFN0YXRlXTtcbiAgICAgICAgICAgICAgICAgICAgcmUubGFzdEluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChydWxlLmNvbnN1bWVMaW5lRW5kKVxuICAgICAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoIXJ1bGUgfHwgcnVsZS5tZXJnZSAhPT0gZmFsc2UpICYmIHRva2VuLnR5cGUgPT09IHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLnZhbHVlICs9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB7dHlwZTogdHlwZSwgdmFsdWU6IHZhbHVlfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB7dHlwZTogbnVsbCwgdmFsdWU6IFwiXCJ9O1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0eXBlW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsYXN0SW5kZXggPT0gbGluZS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGxhc3RJbmRleCA9IGluZGV4O1xuXG4gICAgICAgICAgICBpZiAobWF0Y2hBdHRlbXB0cysrID4gTUFYX1RPS0VOX0NPVU5UKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoQXR0ZW1wdHMgPiAyICogbGluZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRFcnJvcihcImluZmluaXRlIGxvb3Agd2l0aCBpbiBhY2UgdG9rZW5pemVyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0U3RhdGU6IHN0YXJ0U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiBsaW5lXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aGlsZSAobGFzdEluZGV4IDwgbGluZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGxpbmUuc3Vic3RyaW5nKGxhc3RJbmRleCwgbGFzdEluZGV4ICs9IDIwMDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvdmVyZmxvd1wiXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IFwic3RhcnRcIjtcbiAgICAgICAgICAgICAgICBzdGFjayA9IFtdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRva2VuLnR5cGUpXG4gICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgIFxuICAgICAgICBpZiAoc3RhY2subGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgaWYgKHN0YWNrWzBdICE9PSBjdXJyZW50U3RhdGUpXG4gICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdChcIiN0bXBcIiwgY3VycmVudFN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9rZW5zIDogdG9rZW5zLFxuICAgICAgICAgICAgc3RhdGUgOiBzdGFjay5sZW5ndGggPyBzdGFjayA6IGN1cnJlbnRTdGF0ZVxuICAgICAgICB9O1xuICAgIH07XG4gICAgXG4gICAgdGhpcy5yZXBvcnRFcnJvciA9IGNvbmZpZy5yZXBvcnRFcnJvcjtcbiAgICBcbn0pLmNhbGwoVG9rZW5pemVyLnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuVG9rZW5pemVyID0gVG9rZW5pemVyO1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlc1wiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpYi9sYW5nXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGxhbmcgPSBhY2VxdWlyZShcIi4uL2xpYi9sYW5nXCIpO1xuXG52YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7XG5cbiAgICB0aGlzLiRydWxlcyA9IHtcbiAgICAgICAgXCJzdGFydFwiIDogW3tcbiAgICAgICAgICAgIHRva2VuIDogXCJlbXB0eV9saW5lXCIsXG4gICAgICAgICAgICByZWdleCA6ICdeJCdcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogXCJ0ZXh0XCJcbiAgICAgICAgfV1cbiAgICB9O1xufTtcblxuKGZ1bmN0aW9uKCkge1xuXG4gICAgdGhpcy5hZGRSdWxlcyA9IGZ1bmN0aW9uKHJ1bGVzLCBwcmVmaXgpIHtcbiAgICAgICAgaWYgKCFwcmVmaXgpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBydWxlcylcbiAgICAgICAgICAgICAgICB0aGlzLiRydWxlc1trZXldID0gcnVsZXNba2V5XTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcnVsZXMpIHtcbiAgICAgICAgICAgIHZhciBzdGF0ZSA9IHJ1bGVzW2tleV07XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJ1bGUgPSBzdGF0ZVtpXTtcbiAgICAgICAgICAgICAgICBpZiAocnVsZS5uZXh0IHx8IHJ1bGUub25NYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJ1bGUubmV4dCA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocnVsZS5uZXh0LmluZGV4T2YocHJlZml4KSAhPT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlLm5leHQgPSBwcmVmaXggKyBydWxlLm5leHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bGUubmV4dFN0YXRlICYmIHJ1bGUubmV4dFN0YXRlLmluZGV4T2YocHJlZml4KSAhPT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGUubmV4dFN0YXRlID0gcHJlZml4ICsgcnVsZS5uZXh0U3RhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4kcnVsZXNbcHJlZml4ICsga2V5XSA9IHN0YXRlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0UnVsZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJ1bGVzO1xuICAgIH07XG5cbiAgICB0aGlzLmVtYmVkUnVsZXMgPSBmdW5jdGlvbiAoSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgZXNjYXBlUnVsZXMsIHN0YXRlcywgYXBwZW5kKSB7XG4gICAgICAgIHZhciBlbWJlZFJ1bGVzID0gdHlwZW9mIEhpZ2hsaWdodFJ1bGVzID09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgPyBuZXcgSGlnaGxpZ2h0UnVsZXMoKS5nZXRSdWxlcygpXG4gICAgICAgICAgICA6IEhpZ2hsaWdodFJ1bGVzO1xuICAgICAgICBpZiAoc3RhdGVzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICBzdGF0ZXNbaV0gPSBwcmVmaXggKyBzdGF0ZXNbaV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBlbWJlZFJ1bGVzKVxuICAgICAgICAgICAgICAgIHN0YXRlcy5wdXNoKHByZWZpeCArIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkZFJ1bGVzKGVtYmVkUnVsZXMsIHByZWZpeCk7XG5cbiAgICAgICAgaWYgKGVzY2FwZVJ1bGVzKSB7XG4gICAgICAgICAgICB2YXIgYWRkUnVsZXMgPSBBcnJheS5wcm90b3R5cGVbYXBwZW5kID8gXCJwdXNoXCIgOiBcInVuc2hpZnRcIl07XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICBhZGRSdWxlcy5hcHBseSh0aGlzLiRydWxlc1tzdGF0ZXNbaV1dLCBsYW5nLmRlZXBDb3B5KGVzY2FwZVJ1bGVzKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuJGVtYmVkcylcbiAgICAgICAgICAgIHRoaXMuJGVtYmVkcyA9IFtdO1xuICAgICAgICB0aGlzLiRlbWJlZHMucHVzaChwcmVmaXgpO1xuICAgIH07XG5cbiAgICB0aGlzLmdldEVtYmVkcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kZW1iZWRzO1xuICAgIH07XG5cbiAgICB2YXIgcHVzaFN0YXRlID0gZnVuY3Rpb24oY3VycmVudFN0YXRlLCBzdGFjaykge1xuICAgICAgICBpZiAoY3VycmVudFN0YXRlICE9IFwic3RhcnRcIiB8fCBzdGFjay5sZW5ndGgpXG4gICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dFN0YXRlLCBjdXJyZW50U3RhdGUpO1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0U3RhdGU7XG4gICAgfTtcbiAgICB2YXIgcG9wU3RhdGUgPSBmdW5jdGlvbihjdXJyZW50U3RhdGUsIHN0YWNrKSB7XG4gICAgICAgIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgIHJldHVybiBzdGFjay5zaGlmdCgpIHx8IFwic3RhcnRcIjtcbiAgICB9O1xuXG4gICAgdGhpcy5ub3JtYWxpemVSdWxlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgaWQgPSAwO1xuICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLiRydWxlcztcbiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1N0YXRlKGtleSkge1xuICAgICAgICAgICAgdmFyIHN0YXRlID0gcnVsZXNba2V5XTtcbiAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NlZCA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJ1bGUgPSBzdGF0ZVtpXTtcbiAgICAgICAgICAgICAgICB2YXIgdG9JbnNlcnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJ1bGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvSW5zZXJ0ID0gcnVsZTtcbiAgICAgICAgICAgICAgICAgICAgcnVsZSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXJ1bGUucmVnZXggJiYgcnVsZS5zdGFydCkge1xuICAgICAgICAgICAgICAgICAgICBydWxlLnJlZ2V4ID0gcnVsZS5zdGFydDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFydWxlLm5leHQpXG4gICAgICAgICAgICAgICAgICAgICAgICBydWxlLm5leHQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgcnVsZS5uZXh0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiBydWxlLnRva2VuXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiBydWxlLnRva2VuICsgXCIuZW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdleDogcnVsZS5lbmQgfHwgcnVsZS5zdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IFwicG9wXCJcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJ1bGUudG9rZW4gPSBydWxlLnRva2VuICsgXCIuc3RhcnRcIjtcbiAgICAgICAgICAgICAgICAgICAgcnVsZS5wdXNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIG5leHQgPSBydWxlLm5leHQgfHwgcnVsZS5wdXNoO1xuICAgICAgICAgICAgICAgIGlmIChuZXh0ICYmIEFycmF5LmlzQXJyYXkobmV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlTmFtZSA9IHJ1bGUuc3RhdGVOYW1lO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXRlTmFtZSkgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlTmFtZSA9IHJ1bGUudG9rZW47XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHN0YXRlTmFtZSAhPSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlTmFtZSA9IHN0YXRlTmFtZVswXSB8fCBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bGVzW3N0YXRlTmFtZV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVOYW1lICs9IGlkKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcnVsZXNbc3RhdGVOYW1lXSA9IG5leHQ7XG4gICAgICAgICAgICAgICAgICAgIHJ1bGUubmV4dCA9IHN0YXRlTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1N0YXRlKHN0YXRlTmFtZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuZXh0ID09IFwicG9wXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVsZS5uZXh0ID0gcG9wU3RhdGU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUucHVzaCkge1xuICAgICAgICAgICAgICAgICAgICBydWxlLm5leHRTdGF0ZSA9IHJ1bGUubmV4dCB8fCBydWxlLnB1c2g7XG4gICAgICAgICAgICAgICAgICAgIHJ1bGUubmV4dCA9IHB1c2hTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJ1bGUucHVzaDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocnVsZS5ydWxlcykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciByIGluIHJ1bGUucnVsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydWxlc1tyXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydWxlc1tyXS5wdXNoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlc1tyXS5wdXNoLmFwcGx5KHJ1bGVzW3JdLCBydWxlLnJ1bGVzW3JdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZXNbcl0gPSBydWxlLnJ1bGVzW3JdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBpbmNsdWRlTmFtZSA9IHR5cGVvZiBydWxlID09IFwic3RyaW5nXCIgPyBydWxlIDogcnVsZS5pbmNsdWRlO1xuICAgICAgICAgICAgICAgIGlmIChpbmNsdWRlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbmNsdWRlTmFtZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB0b0luc2VydCA9IGluY2x1ZGVOYW1lLm1hcChmdW5jdGlvbih4KSB7IHJldHVybiBydWxlc1t4XTsgfSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvSW5zZXJ0ID0gcnVsZXNbaW5jbHVkZU5hbWVdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0b0luc2VydCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtpLCAxXS5jb25jYXQodG9JbnNlcnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocnVsZS5ub0VzY2FwZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzLmZpbHRlcihmdW5jdGlvbih4KSB7cmV0dXJuICF4Lm5leHQ7fSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnNwbGljZS5hcHBseShzdGF0ZSwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUua2V5d29yZE1hcCkge1xuICAgICAgICAgICAgICAgICAgICBydWxlLnRva2VuID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgcnVsZS5rZXl3b3JkTWFwLCBydWxlLmRlZmF1bHRUb2tlbiB8fCBcInRleHRcIiwgcnVsZS5jYXNlSW5zZW5zaXRpdmVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJ1bGUuZGVmYXVsdFRva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBPYmplY3Qua2V5cyhydWxlcykuZm9yRWFjaChwcm9jZXNzU3RhdGUsIHRoaXMpO1xuICAgIH07XG5cbiAgICB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIgPSBmdW5jdGlvbihtYXAsIGRlZmF1bHRUb2tlbiwgaWdub3JlQ2FzZSwgc3BsaXRDaGFyKSB7XG4gICAgICAgIHZhciBrZXl3b3JkcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIE9iamVjdC5rZXlzKG1hcCkuZm9yRWFjaChmdW5jdGlvbihjbGFzc05hbWUpIHtcbiAgICAgICAgICAgIHZhciBhID0gbWFwW2NsYXNzTmFtZV07XG4gICAgICAgICAgICBpZiAoaWdub3JlQ2FzZSlcbiAgICAgICAgICAgICAgICBhID0gYS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgdmFyIGxpc3QgPSBhLnNwbGl0KHNwbGl0Q2hhciB8fCBcInxcIik7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gbGlzdC5sZW5ndGg7IGktLTsgKVxuICAgICAgICAgICAgICAgIGtleXdvcmRzW2xpc3RbaV1dID0gY2xhc3NOYW1lO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihrZXl3b3JkcykpIHtcbiAgICAgICAgICAgIGtleXdvcmRzLl9fcHJvdG9fXyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4ka2V5d29yZExpc3QgPSBPYmplY3Qua2V5cyhrZXl3b3Jkcyk7XG4gICAgICAgIG1hcCA9IG51bGw7XG4gICAgICAgIHJldHVybiBpZ25vcmVDYXNlXG4gICAgICAgICAgICA/IGZ1bmN0aW9uKHZhbHVlKSB7cmV0dXJuIGtleXdvcmRzW3ZhbHVlLnRvTG93ZXJDYXNlKCldIHx8IGRlZmF1bHRUb2tlbjsgfVxuICAgICAgICAgICAgOiBmdW5jdGlvbih2YWx1ZSkge3JldHVybiBrZXl3b3Jkc1t2YWx1ZV0gfHwgZGVmYXVsdFRva2VuOyB9O1xuICAgIH07XG5cbiAgICB0aGlzLmdldEtleXdvcmRzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRrZXl3b3JkcztcbiAgICB9O1xuXG59KS5jYWxsKFRleHRIaWdobGlnaHRSdWxlcy5wcm90b3R5cGUpO1xuXG5leHBvcnRzLlRleHRIaWdobGlnaHRSdWxlcyA9IFRleHRIaWdobGlnaHRSdWxlcztcbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL21vZGUvYmVoYXZpb3VyXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIEJlaGF2aW91ciA9IGZ1bmN0aW9uKCkge1xuICAgdGhpcy4kYmVoYXZpb3VycyA9IHt9O1xufTtcblxuKGZ1bmN0aW9uICgpIHtcblxuICAgIHRoaXMuYWRkID0gZnVuY3Rpb24gKG5hbWUsIGFjdGlvbiwgY2FsbGJhY2spIHtcbiAgICAgICAgc3dpdGNoICh1bmRlZmluZWQpIHtcbiAgICAgICAgICBjYXNlIHRoaXMuJGJlaGF2aW91cnM6XG4gICAgICAgICAgICAgIHRoaXMuJGJlaGF2aW91cnMgPSB7fTtcbiAgICAgICAgICBjYXNlIHRoaXMuJGJlaGF2aW91cnNbbmFtZV06XG4gICAgICAgICAgICAgIHRoaXMuJGJlaGF2aW91cnNbbmFtZV0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRiZWhhdmlvdXJzW25hbWVdW2FjdGlvbl0gPSBjYWxsYmFjaztcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuYWRkQmVoYXZpb3VycyA9IGZ1bmN0aW9uIChiZWhhdmlvdXJzKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBiZWhhdmlvdXJzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBhY3Rpb24gaW4gYmVoYXZpb3Vyc1trZXldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGQoa2V5LCBhY3Rpb24sIGJlaGF2aW91cnNba2V5XVthY3Rpb25dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgXG4gICAgdGhpcy5yZW1vdmUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBpZiAodGhpcy4kYmVoYXZpb3VycyAmJiB0aGlzLiRiZWhhdmlvdXJzW25hbWVdKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy4kYmVoYXZpb3Vyc1tuYW1lXTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgXG4gICAgdGhpcy5pbmhlcml0ID0gZnVuY3Rpb24gKG1vZGUsIGZpbHRlcikge1xuICAgICAgICBpZiAodHlwZW9mIG1vZGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdmFyIGJlaGF2aW91cnMgPSBuZXcgbW9kZSgpLmdldEJlaGF2aW91cnMoZmlsdGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBiZWhhdmlvdXJzID0gbW9kZS5nZXRCZWhhdmlvdXJzKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRCZWhhdmlvdXJzKGJlaGF2aW91cnMpO1xuICAgIH07XG4gICAgXG4gICAgdGhpcy5nZXRCZWhhdmlvdXJzID0gZnVuY3Rpb24gKGZpbHRlcikge1xuICAgICAgICBpZiAoIWZpbHRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGJlaGF2aW91cnM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmV0ID0ge307XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLiRiZWhhdmlvdXJzW2ZpbHRlcltpXV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0W2ZpbHRlcltpXV0gPSB0aGlzLiRiZWhhdmlvdXJzW2ZpbHRlcltpXV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgIH07XG5cbn0pLmNhbGwoQmVoYXZpb3VyLnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuQmVoYXZpb3VyID0gQmVoYXZpb3VyO1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvdG9rZW5faXRlcmF0b3JcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9yYW5nZVwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBSYW5nZSA9IGFjZXF1aXJlKFwiLi9yYW5nZVwiKS5SYW5nZTtcbnZhciBUb2tlbkl0ZXJhdG9yID0gZnVuY3Rpb24oc2Vzc2lvbiwgaW5pdGlhbFJvdywgaW5pdGlhbENvbHVtbikge1xuICAgIHRoaXMuJHNlc3Npb24gPSBzZXNzaW9uO1xuICAgIHRoaXMuJHJvdyA9IGluaXRpYWxSb3c7XG4gICAgdGhpcy4kcm93VG9rZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMoaW5pdGlhbFJvdyk7XG5cbiAgICB2YXIgdG9rZW4gPSBzZXNzaW9uLmdldFRva2VuQXQoaW5pdGlhbFJvdywgaW5pdGlhbENvbHVtbik7XG4gICAgdGhpcy4kdG9rZW5JbmRleCA9IHRva2VuID8gdG9rZW4uaW5kZXggOiAtMTtcbn07XG5cbihmdW5jdGlvbigpIHsgXG4gICAgdGhpcy5zdGVwQmFja3dhcmQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kdG9rZW5JbmRleCAtPSAxO1xuICAgICAgICBcbiAgICAgICAgd2hpbGUgKHRoaXMuJHRva2VuSW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aGlzLiRyb3cgLT0gMTtcbiAgICAgICAgICAgIGlmICh0aGlzLiRyb3cgPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kcm93ID0gMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuJHJvd1Rva2VucyA9IHRoaXMuJHNlc3Npb24uZ2V0VG9rZW5zKHRoaXMuJHJvdyk7XG4gICAgICAgICAgICB0aGlzLiR0b2tlbkluZGV4ID0gdGhpcy4kcm93VG9rZW5zLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICByZXR1cm4gdGhpcy4kcm93VG9rZW5zW3RoaXMuJHRva2VuSW5kZXhdO1xuICAgIH07ICAgXG4gICAgdGhpcy5zdGVwRm9yd2FyZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiR0b2tlbkluZGV4ICs9IDE7XG4gICAgICAgIHZhciByb3dDb3VudDtcbiAgICAgICAgd2hpbGUgKHRoaXMuJHRva2VuSW5kZXggPj0gdGhpcy4kcm93VG9rZW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy4kcm93ICs9IDE7XG4gICAgICAgICAgICBpZiAoIXJvd0NvdW50KVxuICAgICAgICAgICAgICAgIHJvd0NvdW50ID0gdGhpcy4kc2Vzc2lvbi5nZXRMZW5ndGgoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLiRyb3cgPj0gcm93Q291bnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRyb3cgPSByb3dDb3VudCAtIDE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuJHJvd1Rva2VucyA9IHRoaXMuJHNlc3Npb24uZ2V0VG9rZW5zKHRoaXMuJHJvdyk7XG4gICAgICAgICAgICB0aGlzLiR0b2tlbkluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgIHJldHVybiB0aGlzLiRyb3dUb2tlbnNbdGhpcy4kdG9rZW5JbmRleF07XG4gICAgfTsgICAgICBcbiAgICB0aGlzLmdldEN1cnJlbnRUb2tlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJvd1Rva2Vuc1t0aGlzLiR0b2tlbkluZGV4XTtcbiAgICB9OyAgICAgIFxuICAgIHRoaXMuZ2V0Q3VycmVudFRva2VuUm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kcm93O1xuICAgIH07ICAgICBcbiAgICB0aGlzLmdldEN1cnJlbnRUb2tlbkNvbHVtbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcm93VG9rZW5zID0gdGhpcy4kcm93VG9rZW5zO1xuICAgICAgICB2YXIgdG9rZW5JbmRleCA9IHRoaXMuJHRva2VuSW5kZXg7XG4gICAgICAgIHZhciBjb2x1bW4gPSByb3dUb2tlbnNbdG9rZW5JbmRleF0uc3RhcnQ7XG4gICAgICAgIGlmIChjb2x1bW4gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgICAgICAgICBcbiAgICAgICAgY29sdW1uID0gMDtcbiAgICAgICAgd2hpbGUgKHRva2VuSW5kZXggPiAwKSB7XG4gICAgICAgICAgICB0b2tlbkluZGV4IC09IDE7XG4gICAgICAgICAgICBjb2x1bW4gKz0gcm93VG9rZW5zW3Rva2VuSW5kZXhdLnZhbHVlLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIGNvbHVtbjsgIFxuICAgIH07XG4gICAgdGhpcy5nZXRDdXJyZW50VG9rZW5Qb3NpdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4ge3JvdzogdGhpcy4kcm93LCBjb2x1bW46IHRoaXMuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCl9O1xuICAgIH07XG4gICAgdGhpcy5nZXRDdXJyZW50VG9rZW5SYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLiRyb3dUb2tlbnNbdGhpcy4kdG9rZW5JbmRleF07XG4gICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpO1xuICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHRoaXMuJHJvdywgY29sdW1uLCB0aGlzLiRyb3csIGNvbHVtbiArIHRva2VuLnZhbHVlLmxlbmd0aCk7XG4gICAgfTtcblxufSkuY2FsbChUb2tlbkl0ZXJhdG9yLnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuVG9rZW5JdGVyYXRvciA9IFRva2VuSXRlcmF0b3I7XG59KTtcblxuYWNlLmRlZmluZShcImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGVcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvb29wXCIsXCJhY2UvbW9kZS9iZWhhdmlvdXJcIixcImFjZS90b2tlbl9pdGVyYXRvclwiLFwiYWNlL2xpYi9sYW5nXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIG9vcCA9IGFjZXF1aXJlKFwiLi4vLi4vbGliL29vcFwiKTtcbnZhciBCZWhhdmlvdXIgPSBhY2VxdWlyZShcIi4uL2JlaGF2aW91clwiKS5CZWhhdmlvdXI7XG52YXIgVG9rZW5JdGVyYXRvciA9IGFjZXF1aXJlKFwiLi4vLi4vdG9rZW5faXRlcmF0b3JcIikuVG9rZW5JdGVyYXRvcjtcbnZhciBsYW5nID0gYWNlcXVpcmUoXCIuLi8uLi9saWIvbGFuZ1wiKTtcblxudmFyIFNBRkVfSU5TRVJUX0lOX1RPS0VOUyA9XG4gICAgW1widGV4dFwiLCBcInBhcmVuLnJwYXJlblwiLCBcInB1bmN0dWF0aW9uLm9wZXJhdG9yXCJdO1xudmFyIFNBRkVfSU5TRVJUX0JFRk9SRV9UT0tFTlMgPVxuICAgIFtcInRleHRcIiwgXCJwYXJlbi5ycGFyZW5cIiwgXCJwdW5jdHVhdGlvbi5vcGVyYXRvclwiLCBcImNvbW1lbnRcIl07XG5cbnZhciBjb250ZXh0O1xudmFyIGNvbnRleHRDYWNoZSA9IHt9O1xudmFyIGRlZmF1bHRRdW90ZXMgPSB7J1wiJyA6ICdcIicsIFwiJ1wiIDogXCInXCJ9O1xuXG52YXIgaW5pdENvbnRleHQgPSBmdW5jdGlvbihlZGl0b3IpIHtcbiAgICB2YXIgaWQgPSAtMTtcbiAgICBpZiAoZWRpdG9yLm11bHRpU2VsZWN0KSB7XG4gICAgICAgIGlkID0gZWRpdG9yLnNlbGVjdGlvbi5pbmRleDtcbiAgICAgICAgaWYgKGNvbnRleHRDYWNoZS5yYW5nZUNvdW50ICE9IGVkaXRvci5tdWx0aVNlbGVjdC5yYW5nZUNvdW50KVxuICAgICAgICAgICAgY29udGV4dENhY2hlID0ge3JhbmdlQ291bnQ6IGVkaXRvci5tdWx0aVNlbGVjdC5yYW5nZUNvdW50fTtcbiAgICB9XG4gICAgaWYgKGNvbnRleHRDYWNoZVtpZF0pXG4gICAgICAgIHJldHVybiBjb250ZXh0ID0gY29udGV4dENhY2hlW2lkXTtcbiAgICBjb250ZXh0ID0gY29udGV4dENhY2hlW2lkXSA9IHtcbiAgICAgICAgYXV0b0luc2VydGVkQnJhY2tldHM6IDAsXG4gICAgICAgIGF1dG9JbnNlcnRlZFJvdzogLTEsXG4gICAgICAgIGF1dG9JbnNlcnRlZExpbmVFbmQ6IFwiXCIsXG4gICAgICAgIG1heWJlSW5zZXJ0ZWRCcmFja2V0czogMCxcbiAgICAgICAgbWF5YmVJbnNlcnRlZFJvdzogLTEsXG4gICAgICAgIG1heWJlSW5zZXJ0ZWRMaW5lU3RhcnQ6IFwiXCIsXG4gICAgICAgIG1heWJlSW5zZXJ0ZWRMaW5lRW5kOiBcIlwiXG4gICAgfTtcbn07XG5cbnZhciBnZXRXcmFwcGVkID0gZnVuY3Rpb24oc2VsZWN0aW9uLCBzZWxlY3RlZCwgb3BlbmluZywgY2xvc2luZykge1xuICAgIHZhciByb3dEaWZmID0gc2VsZWN0aW9uLmVuZC5yb3cgLSBzZWxlY3Rpb24uc3RhcnQucm93O1xuICAgIHJldHVybiB7XG4gICAgICAgIHRleHQ6IG9wZW5pbmcgKyBzZWxlY3RlZCArIGNsb3NpbmcsXG4gICAgICAgIHNlbGVjdGlvbjogW1xuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uLnN0YXJ0LmNvbHVtbiArIDEsXG4gICAgICAgICAgICAgICAgcm93RGlmZixcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24uZW5kLmNvbHVtbiArIChyb3dEaWZmID8gMCA6IDEpXG4gICAgICAgICAgICBdXG4gICAgfTtcbn07XG5cbnZhciBDc3R5bGVCZWhhdmlvdXIgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgdGhpcy5hZGQoXCJicmFjZXNcIiwgXCJpbnNlcnRpb25cIiwgZnVuY3Rpb24oc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7XG4gICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTtcbiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpO1xuICAgICAgICBpZiAodGV4dCA9PSAneycpIHtcbiAgICAgICAgICAgIGluaXRDb250ZXh0KGVkaXRvcik7XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2Uoc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZCAhPT0gXCJcIiAmJiBzZWxlY3RlZCAhPT0gXCJ7XCIgJiYgZWRpdG9yLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldFdyYXBwZWQoc2VsZWN0aW9uLCBzZWxlY3RlZCwgJ3snLCAnfScpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVkaXRvciwgc2Vzc2lvbikpIHtcbiAgICAgICAgICAgICAgICBpZiAoL1tcXF1cXH1cXCldLy50ZXN0KGxpbmVbY3Vyc29yLmNvbHVtbl0pIHx8IGVkaXRvci5pbk11bHRpU2VsZWN0TW9kZSB8fCBvcHRpb25zICYmIG9wdGlvbnMuYnJhY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgXCJ9XCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJ3t9JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgQ3N0eWxlQmVoYXZpb3VyLnJlY29yZE1heWJlSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgXCJ7XCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJ3snLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGV4dCA9PSAnfScpIHtcbiAgICAgICAgICAgIGluaXRDb250ZXh0KGVkaXRvcik7XG4gICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpO1xuICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSAnfScpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF0Y2hpbmcgPSBzZXNzaW9uLiRmaW5kT3BlbmluZ0JyYWNrZXQoJ30nLCB7Y29sdW1uOiBjdXJzb3IuY29sdW1uICsgMSwgcm93OiBjdXJzb3Iucm93fSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nICE9PSBudWxsICYmIENzdHlsZUJlaGF2aW91ci5pc0F1dG9JbnNlcnRlZENsb3NpbmcoY3Vyc29yLCBsaW5lLCB0ZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucG9wQXV0b0luc2VydGVkQ2xvc2luZygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0ZXh0ID09IFwiXFxuXCIgfHwgdGV4dCA9PSBcIlxcclxcblwiKSB7XG4gICAgICAgICAgICBpbml0Q29udGV4dChlZGl0b3IpO1xuICAgICAgICAgICAgdmFyIGNsb3NpbmcgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKENzdHlsZUJlaGF2aW91ci5pc01heWJlSW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSkpIHtcbiAgICAgICAgICAgICAgICBjbG9zaW5nID0gbGFuZy5zdHJpbmdSZXBlYXQoXCJ9XCIsIGNvbnRleHQubWF5YmVJbnNlcnRlZEJyYWNrZXRzKTtcbiAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIuY2xlYXJNYXliZUluc2VydGVkQ2xvc2luZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTtcbiAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICd9Jykge1xuICAgICAgICAgICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBzZXNzaW9uLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3JvdzogY3Vyc29yLnJvdywgY29sdW1uOiBjdXJzb3IuY29sdW1uKzF9LCAnfScpO1xuICAgICAgICAgICAgICAgIGlmICghb3BlbkJyYWNlUG9zKVxuICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgdmFyIG5leHRfaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KHNlc3Npb24uZ2V0TGluZShvcGVuQnJhY2VQb3Mucm93KSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNsb3NpbmcpIHtcbiAgICAgICAgICAgICAgICB2YXIgbmV4dF9pbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5jbGVhck1heWJlSW5zZXJ0ZWRDbG9zaW5nKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGluZGVudCA9IG5leHRfaW5kZW50ICsgc2Vzc2lvbi5nZXRUYWJTdHJpbmcoKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiAnXFxuJyArIGluZGVudCArICdcXG4nICsgbmV4dF9pbmRlbnQgKyBjbG9zaW5nLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIGluZGVudC5sZW5ndGgsIDEsIGluZGVudC5sZW5ndGhdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgQ3N0eWxlQmVoYXZpb3VyLmNsZWFyTWF5YmVJbnNlcnRlZENsb3NpbmcoKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGQoXCJicmFjZXNcIiwgXCJkZWxldGlvblwiLCBmdW5jdGlvbihzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7XG4gICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7XG4gICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PSAneycpIHtcbiAgICAgICAgICAgIGluaXRDb250ZXh0KGVkaXRvcik7XG4gICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTtcbiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5lbmQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uICsgMSk7XG4gICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICd9Jykge1xuICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKztcbiAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubWF5YmVJbnNlcnRlZEJyYWNrZXRzLS07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuYWRkKFwicGFyZW5zXCIsIFwiaW5zZXJ0aW9uXCIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkge1xuICAgICAgICBpZiAodGV4dCA9PSAnKCcpIHtcbiAgICAgICAgICAgIGluaXRDb250ZXh0KGVkaXRvcik7XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2Uoc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZCAhPT0gXCJcIiAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZChzZWxlY3Rpb24sIHNlbGVjdGVkLCAnKCcsICcpJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKENzdHlsZUJlaGF2aW91ci5pc1NhbmVJbnNlcnRpb24oZWRpdG9yLCBzZXNzaW9uKSkge1xuICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgXCIpXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6ICcoKScsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0ZXh0ID09ICcpJykge1xuICAgICAgICAgICAgaW5pdENvbnRleHQoZWRpdG9yKTtcbiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTtcbiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTtcbiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7XG4gICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICcpJykge1xuICAgICAgICAgICAgICAgIHZhciBtYXRjaGluZyA9IHNlc3Npb24uJGZpbmRPcGVuaW5nQnJhY2tldCgnKScsIHtjb2x1bW46IGN1cnNvci5jb2x1bW4gKyAxLCByb3c6IGN1cnNvci5yb3d9KTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmcgIT09IG51bGwgJiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUsIHRleHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZChcInBhcmVuc1wiLCBcImRlbGV0aW9uXCIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHtcbiAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTtcbiAgICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgpICYmIHNlbGVjdGVkID09ICcoJykge1xuICAgICAgICAgICAgaW5pdENvbnRleHQoZWRpdG9yKTtcbiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpO1xuICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbiArIDEsIHJhbmdlLnN0YXJ0LmNvbHVtbiArIDIpO1xuICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSAnKScpIHtcbiAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZChcImJyYWNrZXRzXCIsIFwiaW5zZXJ0aW9uXCIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkge1xuICAgICAgICBpZiAodGV4dCA9PSAnWycpIHtcbiAgICAgICAgICAgIGluaXRDb250ZXh0KGVkaXRvcik7XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2Uoc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZCAhPT0gXCJcIiAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZChzZWxlY3Rpb24sIHNlbGVjdGVkLCAnWycsICddJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKENzdHlsZUJlaGF2aW91ci5pc1NhbmVJbnNlcnRpb24oZWRpdG9yLCBzZXNzaW9uKSkge1xuICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgXCJdXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6ICdbXScsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0ZXh0ID09ICddJykge1xuICAgICAgICAgICAgaW5pdENvbnRleHQoZWRpdG9yKTtcbiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTtcbiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTtcbiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7XG4gICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICddJykge1xuICAgICAgICAgICAgICAgIHZhciBtYXRjaGluZyA9IHNlc3Npb24uJGZpbmRPcGVuaW5nQnJhY2tldCgnXScsIHtjb2x1bW46IGN1cnNvci5jb2x1bW4gKyAxLCByb3c6IGN1cnNvci5yb3d9KTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmcgIT09IG51bGwgJiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUsIHRleHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZChcImJyYWNrZXRzXCIsIFwiZGVsZXRpb25cIiwgZnVuY3Rpb24oc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkge1xuICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpO1xuICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT0gJ1snKSB7XG4gICAgICAgICAgICBpbml0Q29udGV4dChlZGl0b3IpO1xuICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7XG4gICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uICsgMSwgcmFuZ2Uuc3RhcnQuY29sdW1uICsgMik7XG4gICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICddJykge1xuICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKztcbiAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuYWRkKFwic3RyaW5nX2RxdW90ZXNcIiwgXCJpbnNlcnRpb25cIiwgZnVuY3Rpb24oc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7XG4gICAgICAgIHZhciBxdW90ZXMgPSBzZXNzaW9uLiRtb2RlLiRxdW90ZXMgfHwgZGVmYXVsdFF1b3RlcztcbiAgICAgICAgaWYgKHRleHQubGVuZ3RoID09IDEgJiYgcXVvdGVzW3RleHRdKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5saW5lQ29tbWVudFN0YXJ0ICYmIHRoaXMubGluZUNvbW1lbnRTdGFydC5pbmRleE9mKHRleHQpICE9IC0xKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGluaXRDb250ZXh0KGVkaXRvcik7XG4gICAgICAgICAgICB2YXIgcXVvdGUgPSB0ZXh0O1xuICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpO1xuICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHNlbGVjdGlvbik7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQgIT09IFwiXCIgJiYgKHNlbGVjdGVkLmxlbmd0aCAhPSAxIHx8ICFxdW90ZXNbc2VsZWN0ZWRdKSAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZChzZWxlY3Rpb24sIHNlbGVjdGVkLCBxdW90ZSwgcXVvdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpO1xuICAgICAgICAgICAgICAgIHZhciBsZWZ0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4tMSwgY3Vyc29yLmNvbHVtbik7XG4gICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTtcblxuICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTtcbiAgICAgICAgICAgICAgICB2YXIgcmlnaHRUb2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uICsgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGxlZnRDaGFyID09IFwiXFxcXFwiICYmIHRva2VuICYmIC9lc2NhcGUvLnRlc3QodG9rZW4udHlwZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICAgICAgdmFyIHN0cmluZ0JlZm9yZSA9IHRva2VuICYmIC9zdHJpbmd8ZXNjYXBlLy50ZXN0KHRva2VuLnR5cGUpO1xuICAgICAgICAgICAgICAgIHZhciBzdHJpbmdBZnRlciA9ICFyaWdodFRva2VuIHx8IC9zdHJpbmd8ZXNjYXBlLy50ZXN0KHJpZ2h0VG9rZW4udHlwZSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcGFpcjtcbiAgICAgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHF1b3RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhaXIgPSBzdHJpbmdCZWZvcmUgIT09IHN0cmluZ0FmdGVyO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFpciAmJiAvc3RyaW5nXFwuZW5kLy50ZXN0KHJpZ2h0VG9rZW4udHlwZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWlyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZ0JlZm9yZSAmJiAhc3RyaW5nQWZ0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gd3JhcCBzdHJpbmcgd2l0aCBkaWZmZXJlbnQgcXVvdGVcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZ0JlZm9yZSAmJiBzdHJpbmdBZnRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBkbyBub3QgcGFpciBxdW90ZXMgaW5zaWRlIHN0cmluZ3NcbiAgICAgICAgICAgICAgICAgICAgdmFyIHdvcmRSZSA9IHNlc3Npb24uJG1vZGUudG9rZW5SZTtcbiAgICAgICAgICAgICAgICAgICAgd29yZFJlLmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc1dvcmRCZWZvcmUgPSB3b3JkUmUudGVzdChsZWZ0Q2hhcik7XG4gICAgICAgICAgICAgICAgICAgIHdvcmRSZS5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXNXb3JkQWZ0ZXIgPSB3b3JkUmUudGVzdChsZWZ0Q2hhcik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1dvcmRCZWZvcmUgfHwgaXNXb3JkQWZ0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gYmVmb3JlIG9yIGFmdGVyIGFscGhhbnVtZXJpY1xuICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRDaGFyICYmICEvW1xcczssLn0pXFxdXFxcXF0vLnRlc3QocmlnaHRDaGFyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyB0aGVyZSBpcyByaWdodENoYXIgYW5kIGl0IGlzbid0IGNsb3NpbmdcbiAgICAgICAgICAgICAgICAgICAgcGFpciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHBhaXIgPyBxdW90ZSArIHF1b3RlIDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwxXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuYWRkKFwic3RyaW5nX2RxdW90ZXNcIiwgXCJkZWxldGlvblwiLCBmdW5jdGlvbihzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7XG4gICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7XG4gICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiAoc2VsZWN0ZWQgPT0gJ1wiJyB8fCBzZWxlY3RlZCA9PSBcIidcIikpIHtcbiAgICAgICAgICAgIGluaXRDb250ZXh0KGVkaXRvcik7XG4gICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTtcbiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTtcbiAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbn07XG5cblxuQ3N0eWxlQmVoYXZpb3VyLmlzU2FuZUluc2VydGlvbiA9IGZ1bmN0aW9uKGVkaXRvciwgc2Vzc2lvbikge1xuICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTtcbiAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTtcbiAgICBpZiAoIXRoaXMuJG1hdGNoVG9rZW5UeXBlKGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpIHx8IFwidGV4dFwiLCBTQUZFX0lOU0VSVF9JTl9UT0tFTlMpKSB7XG4gICAgICAgIHZhciBpdGVyYXRvcjIgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uICsgMSk7XG4gICAgICAgIGlmICghdGhpcy4kbWF0Y2hUb2tlblR5cGUoaXRlcmF0b3IyLmdldEN1cnJlbnRUb2tlbigpIHx8IFwidGV4dFwiLCBTQUZFX0lOU0VSVF9JTl9UT0tFTlMpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpdGVyYXRvci5zdGVwRm9yd2FyZCgpO1xuICAgIHJldHVybiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSAhPT0gY3Vyc29yLnJvdyB8fFxuICAgICAgICB0aGlzLiRtYXRjaFRva2VuVHlwZShpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKSB8fCBcInRleHRcIiwgU0FGRV9JTlNFUlRfQkVGT1JFX1RPS0VOUyk7XG59O1xuXG5Dc3R5bGVCZWhhdmlvdXIuJG1hdGNoVG9rZW5UeXBlID0gZnVuY3Rpb24odG9rZW4sIHR5cGVzKSB7XG4gICAgcmV0dXJuIHR5cGVzLmluZGV4T2YodG9rZW4udHlwZSB8fCB0b2tlbikgPiAtMTtcbn07XG5cbkNzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5zZXJ0ID0gZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9uLCBicmFja2V0KSB7XG4gICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpO1xuICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTtcbiAgICBpZiAoIXRoaXMuaXNBdXRvSW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSwgY29udGV4dC5hdXRvSW5zZXJ0ZWRMaW5lRW5kWzBdKSlcbiAgICAgICAgY29udGV4dC5hdXRvSW5zZXJ0ZWRCcmFja2V0cyA9IDA7XG4gICAgY29udGV4dC5hdXRvSW5zZXJ0ZWRSb3cgPSBjdXJzb3Iucm93O1xuICAgIGNvbnRleHQuYXV0b0luc2VydGVkTGluZUVuZCA9IGJyYWNrZXQgKyBsaW5lLnN1YnN0cihjdXJzb3IuY29sdW1uKTtcbiAgICBjb250ZXh0LmF1dG9JbnNlcnRlZEJyYWNrZXRzKys7XG59O1xuXG5Dc3R5bGVCZWhhdmlvdXIucmVjb3JkTWF5YmVJbnNlcnQgPSBmdW5jdGlvbihlZGl0b3IsIHNlc3Npb24sIGJyYWNrZXQpIHtcbiAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7XG4gICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpO1xuICAgIGlmICghdGhpcy5pc01heWJlSW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSkpXG4gICAgICAgIGNvbnRleHQubWF5YmVJbnNlcnRlZEJyYWNrZXRzID0gMDtcbiAgICBjb250ZXh0Lm1heWJlSW5zZXJ0ZWRSb3cgPSBjdXJzb3Iucm93O1xuICAgIGNvbnRleHQubWF5YmVJbnNlcnRlZExpbmVTdGFydCA9IGxpbmUuc3Vic3RyKDAsIGN1cnNvci5jb2x1bW4pICsgYnJhY2tldDtcbiAgICBjb250ZXh0Lm1heWJlSW5zZXJ0ZWRMaW5lRW5kID0gbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbik7XG4gICAgY29udGV4dC5tYXliZUluc2VydGVkQnJhY2tldHMrKztcbn07XG5cbkNzdHlsZUJlaGF2aW91ci5pc0F1dG9JbnNlcnRlZENsb3NpbmcgPSBmdW5jdGlvbihjdXJzb3IsIGxpbmUsIGJyYWNrZXQpIHtcbiAgICByZXR1cm4gY29udGV4dC5hdXRvSW5zZXJ0ZWRCcmFja2V0cyA+IDAgJiZcbiAgICAgICAgY3Vyc29yLnJvdyA9PT0gY29udGV4dC5hdXRvSW5zZXJ0ZWRSb3cgJiZcbiAgICAgICAgYnJhY2tldCA9PT0gY29udGV4dC5hdXRvSW5zZXJ0ZWRMaW5lRW5kWzBdICYmXG4gICAgICAgIGxpbmUuc3Vic3RyKGN1cnNvci5jb2x1bW4pID09PSBjb250ZXh0LmF1dG9JbnNlcnRlZExpbmVFbmQ7XG59O1xuXG5Dc3R5bGVCZWhhdmlvdXIuaXNNYXliZUluc2VydGVkQ2xvc2luZyA9IGZ1bmN0aW9uKGN1cnNvciwgbGluZSkge1xuICAgIHJldHVybiBjb250ZXh0Lm1heWJlSW5zZXJ0ZWRCcmFja2V0cyA+IDAgJiZcbiAgICAgICAgY3Vyc29yLnJvdyA9PT0gY29udGV4dC5tYXliZUluc2VydGVkUm93ICYmXG4gICAgICAgIGxpbmUuc3Vic3RyKGN1cnNvci5jb2x1bW4pID09PSBjb250ZXh0Lm1heWJlSW5zZXJ0ZWRMaW5lRW5kICYmXG4gICAgICAgIGxpbmUuc3Vic3RyKDAsIGN1cnNvci5jb2x1bW4pID09IGNvbnRleHQubWF5YmVJbnNlcnRlZExpbmVTdGFydDtcbn07XG5cbkNzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgY29udGV4dC5hdXRvSW5zZXJ0ZWRMaW5lRW5kID0gY29udGV4dC5hdXRvSW5zZXJ0ZWRMaW5lRW5kLnN1YnN0cigxKTtcbiAgICBjb250ZXh0LmF1dG9JbnNlcnRlZEJyYWNrZXRzLS07XG59O1xuXG5Dc3R5bGVCZWhhdmlvdXIuY2xlYXJNYXliZUluc2VydGVkQ2xvc2luZyA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChjb250ZXh0KSB7XG4gICAgICAgIGNvbnRleHQubWF5YmVJbnNlcnRlZEJyYWNrZXRzID0gMDtcbiAgICAgICAgY29udGV4dC5tYXliZUluc2VydGVkUm93ID0gLTE7XG4gICAgfVxufTtcblxuXG5cbm9vcC5pbmhlcml0cyhDc3R5bGVCZWhhdmlvdXIsIEJlaGF2aW91cik7XG5cbmV4cG9ydHMuQ3N0eWxlQmVoYXZpb3VyID0gQ3N0eWxlQmVoYXZpb3VyO1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvdW5pY29kZVwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5leHBvcnRzLnBhY2thZ2VzID0ge307XG5cbmFkZFVuaWNvZGVQYWNrYWdlKHtcbiAgICBMOiAgXCIwMDQxLTAwNUEwMDYxLTAwN0EwMEFBMDBCNTAwQkEwMEMwLTAwRDYwMEQ4LTAwRjYwMEY4LTAyQzEwMkM2LTAyRDEwMkUwLTAyRTQwMkVDMDJFRTAzNzAtMDM3NDAzNzYwMzc3MDM3QS0wMzdEMDM4NjAzODgtMDM4QTAzOEMwMzhFLTAzQTEwM0EzLTAzRjUwM0Y3LTA0ODEwNDhBLTA1MjUwNTMxLTA1NTYwNTU5MDU2MS0wNTg3MDVEMC0wNUVBMDVGMC0wNUYyMDYyMS0wNjRBMDY2RTA2NkYwNjcxLTA2RDMwNkQ1MDZFNTA2RTYwNkVFMDZFRjA2RkEtMDZGQzA2RkYwNzEwMDcxMi0wNzJGMDc0RC0wN0E1MDdCMTA3Q0EtMDdFQTA3RjQwN0Y1MDdGQTA4MDAtMDgxNTA4MUEwODI0MDgyODA5MDQtMDkzOTA5M0QwOTUwMDk1OC0wOTYxMDk3MTA5NzIwOTc5LTA5N0YwOTg1LTA5OEMwOThGMDk5MDA5OTMtMDlBODA5QUEtMDlCMDA5QjIwOUI2LTA5QjkwOUJEMDlDRTA5REMwOUREMDlERi0wOUUxMDlGMDA5RjEwQTA1LTBBMEEwQTBGMEExMDBBMTMtMEEyODBBMkEtMEEzMDBBMzIwQTMzMEEzNTBBMzYwQTM4MEEzOTBBNTktMEE1QzBBNUUwQTcyLTBBNzQwQTg1LTBBOEQwQThGLTBBOTEwQTkzLTBBQTgwQUFBLTBBQjAwQUIyMEFCMzBBQjUtMEFCOTBBQkQwQUQwMEFFMDBBRTEwQjA1LTBCMEMwQjBGMEIxMDBCMTMtMEIyODBCMkEtMEIzMDBCMzIwQjMzMEIzNS0wQjM5MEIzRDBCNUMwQjVEMEI1Ri0wQjYxMEI3MTBCODMwQjg1LTBCOEEwQjhFLTBCOTAwQjkyLTBCOTUwQjk5MEI5QTBCOUMwQjlFMEI5RjBCQTMwQkE0MEJBOC0wQkFBMEJBRS0wQkI5MEJEMDBDMDUtMEMwQzBDMEUtMEMxMDBDMTItMEMyODBDMkEtMEMzMzBDMzUtMEMzOTBDM0QwQzU4MEM1OTBDNjAwQzYxMEM4NS0wQzhDMEM4RS0wQzkwMEM5Mi0wQ0E4MENBQS0wQ0IzMENCNS0wQ0I5MENCRDBDREUwQ0UwMENFMTBEMDUtMEQwQzBEMEUtMEQxMDBEMTItMEQyODBEMkEtMEQzOTBEM0QwRDYwMEQ2MTBEN0EtMEQ3RjBEODUtMEQ5NjBEOUEtMERCMTBEQjMtMERCQjBEQkQwREMwLTBEQzYwRTAxLTBFMzAwRTMyMEUzMzBFNDAtMEU0NjBFODEwRTgyMEU4NDBFODcwRTg4MEU4QTBFOEQwRTk0LTBFOTcwRTk5LTBFOUYwRUExLTBFQTMwRUE1MEVBNzBFQUEwRUFCMEVBRC0wRUIwMEVCMjBFQjMwRUJEMEVDMC0wRUM0MEVDNjBFREMwRUREMEYwMDBGNDAtMEY0NzBGNDktMEY2QzBGODgtMEY4QjEwMDAtMTAyQTEwM0YxMDUwLTEwNTUxMDVBLTEwNUQxMDYxMTA2NTEwNjYxMDZFLTEwNzAxMDc1LTEwODExMDhFMTBBMC0xMEM1MTBEMC0xMEZBMTBGQzExMDAtMTI0ODEyNEEtMTI0RDEyNTAtMTI1NjEyNTgxMjVBLTEyNUQxMjYwLTEyODgxMjhBLTEyOEQxMjkwLTEyQjAxMkIyLTEyQjUxMkI4LTEyQkUxMkMwMTJDMi0xMkM1MTJDOC0xMkQ2MTJEOC0xMzEwMTMxMi0xMzE1MTMxOC0xMzVBMTM4MC0xMzhGMTNBMC0xM0Y0MTQwMS0xNjZDMTY2Ri0xNjdGMTY4MS0xNjlBMTZBMC0xNkVBMTcwMC0xNzBDMTcwRS0xNzExMTcyMC0xNzMxMTc0MC0xNzUxMTc2MC0xNzZDMTc2RS0xNzcwMTc4MC0xN0IzMTdENzE3REMxODIwLTE4NzcxODgwLTE4QTgxOEFBMThCMC0xOEY1MTkwMC0xOTFDMTk1MC0xOTZEMTk3MC0xOTc0MTk4MC0xOUFCMTlDMS0xOUM3MUEwMC0xQTE2MUEyMC0xQTU0MUFBNzFCMDUtMUIzMzFCNDUtMUI0QjFCODMtMUJBMDFCQUUxQkFGMUMwMC0xQzIzMUM0RC0xQzRGMUM1QS0xQzdEMUNFOS0xQ0VDMUNFRS0xQ0YxMUQwMC0xREJGMUUwMC0xRjE1MUYxOC0xRjFEMUYyMC0xRjQ1MUY0OC0xRjREMUY1MC0xRjU3MUY1OTFGNUIxRjVEMUY1Ri0xRjdEMUY4MC0xRkI0MUZCNi0xRkJDMUZCRTFGQzItMUZDNDFGQzYtMUZDQzFGRDAtMUZEMzFGRDYtMUZEQjFGRTAtMUZFQzFGRjItMUZGNDFGRjYtMUZGQzIwNzEyMDdGMjA5MC0yMDk0MjEwMjIxMDcyMTBBLTIxMTMyMTE1MjExOS0yMTFEMjEyNDIxMjYyMTI4MjEyQS0yMTJEMjEyRi0yMTM5MjEzQy0yMTNGMjE0NS0yMTQ5MjE0RTIxODMyMTg0MkMwMC0yQzJFMkMzMC0yQzVFMkM2MC0yQ0U0MkNFQi0yQ0VFMkQwMC0yRDI1MkQzMC0yRDY1MkQ2RjJEODAtMkQ5NjJEQTAtMkRBNjJEQTgtMkRBRTJEQjAtMkRCNjJEQjgtMkRCRTJEQzAtMkRDNjJEQzgtMkRDRTJERDAtMkRENjJERDgtMkRERTJFMkYzMDA1MzAwNjMwMzEtMzAzNTMwM0IzMDNDMzA0MS0zMDk2MzA5RC0zMDlGMzBBMS0zMEZBMzBGQy0zMEZGMzEwNS0zMTJEMzEzMS0zMThFMzFBMC0zMUI3MzFGMC0zMUZGMzQwMC00REI1NEUwMC05RkNCQTAwMC1BNDhDQTREMC1BNEZEQTUwMC1BNjBDQTYxMC1BNjFGQTYyQUE2MkJBNjQwLUE2NUZBNjYyLUE2NkVBNjdGLUE2OTdBNkEwLUE2RTVBNzE3LUE3MUZBNzIyLUE3ODhBNzhCQTc4Q0E3RkItQTgwMUE4MDMtQTgwNUE4MDctQTgwQUE4MEMtQTgyMkE4NDAtQTg3M0E4ODItQThCM0E4RjItQThGN0E4RkJBOTBBLUE5MjVBOTMwLUE5NDZBOTYwLUE5N0NBOTg0LUE5QjJBOUNGQUEwMC1BQTI4QUE0MC1BQTQyQUE0NC1BQTRCQUE2MC1BQTc2QUE3QUFBODAtQUFBRkFBQjFBQUI1QUFCNkFBQjktQUFCREFBQzBBQUMyQUFEQi1BQUREQUJDMC1BQkUyQUMwMC1EN0EzRDdCMC1EN0M2RDdDQi1EN0ZCRjkwMC1GQTJERkEzMC1GQTZERkE3MC1GQUQ5RkIwMC1GQjA2RkIxMy1GQjE3RkIxREZCMUYtRkIyOEZCMkEtRkIzNkZCMzgtRkIzQ0ZCM0VGQjQwRkI0MUZCNDNGQjQ0RkI0Ni1GQkIxRkJEMy1GRDNERkQ1MC1GRDhGRkQ5Mi1GREM3RkRGMC1GREZCRkU3MC1GRTc0RkU3Ni1GRUZDRkYyMS1GRjNBRkY0MS1GRjVBRkY2Ni1GRkJFRkZDMi1GRkM3RkZDQS1GRkNGRkZEMi1GRkQ3RkZEQS1GRkRDXCIsXG4gICAgTGw6IFwiMDA2MS0wMDdBMDBBQTAwQjUwMEJBMDBERi0wMEY2MDBGOC0wMEZGMDEwMTAxMDMwMTA1MDEwNzAxMDkwMTBCMDEwRDAxMEYwMTExMDExMzAxMTUwMTE3MDExOTAxMUIwMTFEMDExRjAxMjEwMTIzMDEyNTAxMjcwMTI5MDEyQjAxMkQwMTJGMDEzMTAxMzMwMTM1MDEzNzAxMzgwMTNBMDEzQzAxM0UwMTQwMDE0MjAxNDQwMTQ2MDE0ODAxNDkwMTRCMDE0RDAxNEYwMTUxMDE1MzAxNTUwMTU3MDE1OTAxNUIwMTVEMDE1RjAxNjEwMTYzMDE2NTAxNjcwMTY5MDE2QjAxNkQwMTZGMDE3MTAxNzMwMTc1MDE3NzAxN0EwMTdDMDE3RS0wMTgwMDE4MzAxODUwMTg4MDE4QzAxOEQwMTkyMDE5NTAxOTktMDE5QjAxOUUwMUExMDFBMzAxQTUwMUE4MDFBQTAxQUIwMUFEMDFCMDAxQjQwMUI2MDFCOTAxQkEwMUJELTAxQkYwMUM2MDFDOTAxQ0MwMUNFMDFEMDAxRDIwMUQ0MDFENjAxRDgwMURBMDFEQzAxREQwMURGMDFFMTAxRTMwMUU1MDFFNzAxRTkwMUVCMDFFRDAxRUYwMUYwMDFGMzAxRjUwMUY5MDFGQjAxRkQwMUZGMDIwMTAyMDMwMjA1MDIwNzAyMDkwMjBCMDIwRDAyMEYwMjExMDIxMzAyMTUwMjE3MDIxOTAyMUIwMjFEMDIxRjAyMjEwMjIzMDIyNTAyMjcwMjI5MDIyQjAyMkQwMjJGMDIzMTAyMzMtMDIzOTAyM0MwMjNGMDI0MDAyNDIwMjQ3MDI0OTAyNEIwMjREMDI0Ri0wMjkzMDI5NS0wMkFGMDM3MTAzNzMwMzc3MDM3Qi0wMzdEMDM5MDAzQUMtMDNDRTAzRDAwM0QxMDNENS0wM0Q3MDNEOTAzREIwM0REMDNERjAzRTEwM0UzMDNFNTAzRTcwM0U5MDNFQjAzRUQwM0VGLTAzRjMwM0Y1MDNGODAzRkIwM0ZDMDQzMC0wNDVGMDQ2MTA0NjMwNDY1MDQ2NzA0NjkwNDZCMDQ2RDA0NkYwNDcxMDQ3MzA0NzUwNDc3MDQ3OTA0N0IwNDdEMDQ3RjA0ODEwNDhCMDQ4RDA0OEYwNDkxMDQ5MzA0OTUwNDk3MDQ5OTA0OUIwNDlEMDQ5RjA0QTEwNEEzMDRBNTA0QTcwNEE5MDRBQjA0QUQwNEFGMDRCMTA0QjMwNEI1MDRCNzA0QjkwNEJCMDRCRDA0QkYwNEMyMDRDNDA0QzYwNEM4MDRDQTA0Q0MwNENFMDRDRjA0RDEwNEQzMDRENTA0RDcwNEQ5MDREQjA0REQwNERGMDRFMTA0RTMwNEU1MDRFNzA0RTkwNEVCMDRFRDA0RUYwNEYxMDRGMzA0RjUwNEY3MDRGOTA0RkIwNEZEMDRGRjA1MDEwNTAzMDUwNTA1MDcwNTA5MDUwQjA1MEQwNTBGMDUxMTA1MTMwNTE1MDUxNzA1MTkwNTFCMDUxRDA1MUYwNTIxMDUyMzA1MjUwNTYxLTA1ODcxRDAwLTFEMkIxRDYyLTFENzcxRDc5LTFEOUExRTAxMUUwMzFFMDUxRTA3MUUwOTFFMEIxRTBEMUUwRjFFMTExRTEzMUUxNTFFMTcxRTE5MUUxQjFFMUQxRTFGMUUyMTFFMjMxRTI1MUUyNzFFMjkxRTJCMUUyRDFFMkYxRTMxMUUzMzFFMzUxRTM3MUUzOTFFM0IxRTNEMUUzRjFFNDExRTQzMUU0NTFFNDcxRTQ5MUU0QjFFNEQxRTRGMUU1MTFFNTMxRTU1MUU1NzFFNTkxRTVCMUU1RDFFNUYxRTYxMUU2MzFFNjUxRTY3MUU2OTFFNkIxRTZEMUU2RjFFNzExRTczMUU3NTFFNzcxRTc5MUU3QjFFN0QxRTdGMUU4MTFFODMxRTg1MUU4NzFFODkxRThCMUU4RDFFOEYxRTkxMUU5MzFFOTUtMUU5RDFFOUYxRUExMUVBMzFFQTUxRUE3MUVBOTFFQUIxRUFEMUVBRjFFQjExRUIzMUVCNTFFQjcxRUI5MUVCQjFFQkQxRUJGMUVDMTFFQzMxRUM1MUVDNzFFQzkxRUNCMUVDRDFFQ0YxRUQxMUVEMzFFRDUxRUQ3MUVEOTFFREIxRUREMUVERjFFRTExRUUzMUVFNTFFRTcxRUU5MUVFQjFFRUQxRUVGMUVGMTFFRjMxRUY1MUVGNzFFRjkxRUZCMUVGRDFFRkYtMUYwNzFGMTAtMUYxNTFGMjAtMUYyNzFGMzAtMUYzNzFGNDAtMUY0NTFGNTAtMUY1NzFGNjAtMUY2NzFGNzAtMUY3RDFGODAtMUY4NzFGOTAtMUY5NzFGQTAtMUZBNzFGQjAtMUZCNDFGQjYxRkI3MUZCRTFGQzItMUZDNDFGQzYxRkM3MUZEMC0xRkQzMUZENjFGRDcxRkUwLTFGRTcxRkYyLTFGRjQxRkY2MUZGNzIxMEEyMTBFMjEwRjIxMTMyMTJGMjEzNDIxMzkyMTNDMjEzRDIxNDYtMjE0OTIxNEUyMTg0MkMzMC0yQzVFMkM2MTJDNjUyQzY2MkM2ODJDNkEyQzZDMkM3MTJDNzMyQzc0MkM3Ni0yQzdDMkM4MTJDODMyQzg1MkM4NzJDODkyQzhCMkM4RDJDOEYyQzkxMkM5MzJDOTUyQzk3MkM5OTJDOUIyQzlEMkM5RjJDQTEyQ0EzMkNBNTJDQTcyQ0E5MkNBQjJDQUQyQ0FGMkNCMTJDQjMyQ0I1MkNCNzJDQjkyQ0JCMkNCRDJDQkYyQ0MxMkNDMzJDQzUyQ0M3MkNDOTJDQ0IyQ0NEMkNDRjJDRDEyQ0QzMkNENTJDRDcyQ0Q5MkNEQjJDREQyQ0RGMkNFMTJDRTMyQ0U0MkNFQzJDRUUyRDAwLTJEMjVBNjQxQTY0M0E2NDVBNjQ3QTY0OUE2NEJBNjREQTY0RkE2NTFBNjUzQTY1NUE2NTdBNjU5QTY1QkE2NURBNjVGQTY2M0E2NjVBNjY3QTY2OUE2NkJBNjZEQTY4MUE2ODNBNjg1QTY4N0E2ODlBNjhCQTY4REE2OEZBNjkxQTY5M0E2OTVBNjk3QTcyM0E3MjVBNzI3QTcyOUE3MkJBNzJEQTcyRi1BNzMxQTczM0E3MzVBNzM3QTczOUE3M0JBNzNEQTczRkE3NDFBNzQzQTc0NUE3NDdBNzQ5QTc0QkE3NERBNzRGQTc1MUE3NTNBNzU1QTc1N0E3NTlBNzVCQTc1REE3NUZBNzYxQTc2M0E3NjVBNzY3QTc2OUE3NkJBNzZEQTc2RkE3NzEtQTc3OEE3N0FBNzdDQTc3RkE3ODFBNzgzQTc4NUE3ODdBNzhDRkIwMC1GQjA2RkIxMy1GQjE3RkY0MS1GRjVBXCIsXG4gICAgTHU6IFwiMDA0MS0wMDVBMDBDMC0wMEQ2MDBEOC0wMERFMDEwMDAxMDIwMTA0MDEwNjAxMDgwMTBBMDEwQzAxMEUwMTEwMDExMjAxMTQwMTE2MDExODAxMUEwMTFDMDExRTAxMjAwMTIyMDEyNDAxMjYwMTI4MDEyQTAxMkMwMTJFMDEzMDAxMzIwMTM0MDEzNjAxMzkwMTNCMDEzRDAxM0YwMTQxMDE0MzAxNDUwMTQ3MDE0QTAxNEMwMTRFMDE1MDAxNTIwMTU0MDE1NjAxNTgwMTVBMDE1QzAxNUUwMTYwMDE2MjAxNjQwMTY2MDE2ODAxNkEwMTZDMDE2RTAxNzAwMTcyMDE3NDAxNzYwMTc4MDE3OTAxN0IwMTdEMDE4MTAxODIwMTg0MDE4NjAxODcwMTg5LTAxOEIwMThFLTAxOTEwMTkzMDE5NDAxOTYtMDE5ODAxOUMwMTlEMDE5RjAxQTAwMUEyMDFBNDAxQTYwMUE3MDFBOTAxQUMwMUFFMDFBRjAxQjEtMDFCMzAxQjUwMUI3MDFCODAxQkMwMUM0MDFDNzAxQ0EwMUNEMDFDRjAxRDEwMUQzMDFENTAxRDcwMUQ5MDFEQjAxREUwMUUwMDFFMjAxRTQwMUU2MDFFODAxRUEwMUVDMDFFRTAxRjEwMUY0MDFGNi0wMUY4MDFGQTAxRkMwMUZFMDIwMDAyMDIwMjA0MDIwNjAyMDgwMjBBMDIwQzAyMEUwMjEwMDIxMjAyMTQwMjE2MDIxODAyMUEwMjFDMDIxRTAyMjAwMjIyMDIyNDAyMjYwMjI4MDIyQTAyMkMwMjJFMDIzMDAyMzIwMjNBMDIzQjAyM0QwMjNFMDI0MTAyNDMtMDI0NjAyNDgwMjRBMDI0QzAyNEUwMzcwMDM3MjAzNzYwMzg2MDM4OC0wMzhBMDM4QzAzOEUwMzhGMDM5MS0wM0ExMDNBMy0wM0FCMDNDRjAzRDItMDNENDAzRDgwM0RBMDNEQzAzREUwM0UwMDNFMjAzRTQwM0U2MDNFODAzRUEwM0VDMDNFRTAzRjQwM0Y3MDNGOTAzRkEwM0ZELTA0MkYwNDYwMDQ2MjA0NjQwNDY2MDQ2ODA0NkEwNDZDMDQ2RTA0NzAwNDcyMDQ3NDA0NzYwNDc4MDQ3QTA0N0MwNDdFMDQ4MDA0OEEwNDhDMDQ4RTA0OTAwNDkyMDQ5NDA0OTYwNDk4MDQ5QTA0OUMwNDlFMDRBMDA0QTIwNEE0MDRBNjA0QTgwNEFBMDRBQzA0QUUwNEIwMDRCMjA0QjQwNEI2MDRCODA0QkEwNEJDMDRCRTA0QzAwNEMxMDRDMzA0QzUwNEM3MDRDOTA0Q0IwNENEMDREMDA0RDIwNEQ0MDRENjA0RDgwNERBMDREQzA0REUwNEUwMDRFMjA0RTQwNEU2MDRFODA0RUEwNEVDMDRFRTA0RjAwNEYyMDRGNDA0RjYwNEY4MDRGQTA0RkMwNEZFMDUwMDA1MDIwNTA0MDUwNjA1MDgwNTBBMDUwQzA1MEUwNTEwMDUxMjA1MTQwNTE2MDUxODA1MUEwNTFDMDUxRTA1MjAwNTIyMDUyNDA1MzEtMDU1NjEwQTAtMTBDNTFFMDAxRTAyMUUwNDFFMDYxRTA4MUUwQTFFMEMxRTBFMUUxMDFFMTIxRTE0MUUxNjFFMTgxRTFBMUUxQzFFMUUxRTIwMUUyMjFFMjQxRTI2MUUyODFFMkExRTJDMUUyRTFFMzAxRTMyMUUzNDFFMzYxRTM4MUUzQTFFM0MxRTNFMUU0MDFFNDIxRTQ0MUU0NjFFNDgxRTRBMUU0QzFFNEUxRTUwMUU1MjFFNTQxRTU2MUU1ODFFNUExRTVDMUU1RTFFNjAxRTYyMUU2NDFFNjYxRTY4MUU2QTFFNkMxRTZFMUU3MDFFNzIxRTc0MUU3NjFFNzgxRTdBMUU3QzFFN0UxRTgwMUU4MjFFODQxRTg2MUU4ODFFOEExRThDMUU4RTFFOTAxRTkyMUU5NDFFOUUxRUEwMUVBMjFFQTQxRUE2MUVBODFFQUExRUFDMUVBRTFFQjAxRUIyMUVCNDFFQjYxRUI4MUVCQTFFQkMxRUJFMUVDMDFFQzIxRUM0MUVDNjFFQzgxRUNBMUVDQzFFQ0UxRUQwMUVEMjFFRDQxRUQ2MUVEODFFREExRURDMUVERTFFRTAxRUUyMUVFNDFFRTYxRUU4MUVFQTFFRUMxRUVFMUVGMDFFRjIxRUY0MUVGNjFFRjgxRUZBMUVGQzFFRkUxRjA4LTFGMEYxRjE4LTFGMUQxRjI4LTFGMkYxRjM4LTFGM0YxRjQ4LTFGNEQxRjU5MUY1QjFGNUQxRjVGMUY2OC0xRjZGMUZCOC0xRkJCMUZDOC0xRkNCMUZEOC0xRkRCMUZFOC0xRkVDMUZGOC0xRkZCMjEwMjIxMDcyMTBCLTIxMEQyMTEwLTIxMTIyMTE1MjExOS0yMTFEMjEyNDIxMjYyMTI4MjEyQS0yMTJEMjEzMC0yMTMzMjEzRTIxM0YyMTQ1MjE4MzJDMDAtMkMyRTJDNjAyQzYyLTJDNjQyQzY3MkM2OTJDNkIyQzZELTJDNzAyQzcyMkM3NTJDN0UtMkM4MDJDODIyQzg0MkM4NjJDODgyQzhBMkM4QzJDOEUyQzkwMkM5MjJDOTQyQzk2MkM5ODJDOUEyQzlDMkM5RTJDQTAyQ0EyMkNBNDJDQTYyQ0E4MkNBQTJDQUMyQ0FFMkNCMDJDQjIyQ0I0MkNCNjJDQjgyQ0JBMkNCQzJDQkUyQ0MwMkNDMjJDQzQyQ0M2MkNDODJDQ0EyQ0NDMkNDRTJDRDAyQ0QyMkNENDJDRDYyQ0Q4MkNEQTJDREMyQ0RFMkNFMDJDRTIyQ0VCMkNFREE2NDBBNjQyQTY0NEE2NDZBNjQ4QTY0QUE2NENBNjRFQTY1MEE2NTJBNjU0QTY1NkE2NThBNjVBQTY1Q0E2NUVBNjYyQTY2NEE2NjZBNjY4QTY2QUE2NkNBNjgwQTY4MkE2ODRBNjg2QTY4OEE2OEFBNjhDQTY4RUE2OTBBNjkyQTY5NEE2OTZBNzIyQTcyNEE3MjZBNzI4QTcyQUE3MkNBNzJFQTczMkE3MzRBNzM2QTczOEE3M0FBNzNDQTczRUE3NDBBNzQyQTc0NEE3NDZBNzQ4QTc0QUE3NENBNzRFQTc1MEE3NTJBNzU0QTc1NkE3NThBNzVBQTc1Q0E3NUVBNzYwQTc2MkE3NjRBNzY2QTc2OEE3NkFBNzZDQTc2RUE3NzlBNzdCQTc3REE3N0VBNzgwQTc4MkE3ODRBNzg2QTc4QkZGMjEtRkYzQVwiLFxuICAgIEx0OiBcIjAxQzUwMUM4MDFDQjAxRjIxRjg4LTFGOEYxRjk4LTFGOUYxRkE4LTFGQUYxRkJDMUZDQzFGRkNcIixcbiAgICBMbTogXCIwMkIwLTAyQzEwMkM2LTAyRDEwMkUwLTAyRTQwMkVDMDJFRTAzNzQwMzdBMDU1OTA2NDAwNkU1MDZFNjA3RjQwN0Y1MDdGQTA4MUEwODI0MDgyODA5NzEwRTQ2MEVDNjEwRkMxN0Q3MTg0MzFBQTcxQzc4LTFDN0QxRDJDLTFENjExRDc4MUQ5Qi0xREJGMjA3MTIwN0YyMDkwLTIwOTQyQzdEMkQ2RjJFMkYzMDA1MzAzMS0zMDM1MzAzQjMwOUQzMDlFMzBGQy0zMEZFQTAxNUE0RjgtQTRGREE2MENBNjdGQTcxNy1BNzFGQTc3MEE3ODhBOUNGQUE3MEFBRERGRjcwRkY5RUZGOUZcIixcbiAgICBMbzogXCIwMUJCMDFDMC0wMUMzMDI5NDA1RDAtMDVFQTA1RjAtMDVGMjA2MjEtMDYzRjA2NDEtMDY0QTA2NkUwNjZGMDY3MS0wNkQzMDZENTA2RUUwNkVGMDZGQS0wNkZDMDZGRjA3MTAwNzEyLTA3MkYwNzRELTA3QTUwN0IxMDdDQS0wN0VBMDgwMC0wODE1MDkwNC0wOTM5MDkzRDA5NTAwOTU4LTA5NjEwOTcyMDk3OS0wOTdGMDk4NS0wOThDMDk4RjA5OTAwOTkzLTA5QTgwOUFBLTA5QjAwOUIyMDlCNi0wOUI5MDlCRDA5Q0UwOURDMDlERDA5REYtMDlFMTA5RjAwOUYxMEEwNS0wQTBBMEEwRjBBMTAwQTEzLTBBMjgwQTJBLTBBMzAwQTMyMEEzMzBBMzUwQTM2MEEzODBBMzkwQTU5LTBBNUMwQTVFMEE3Mi0wQTc0MEE4NS0wQThEMEE4Ri0wQTkxMEE5My0wQUE4MEFBQS0wQUIwMEFCMjBBQjMwQUI1LTBBQjkwQUJEMEFEMDBBRTAwQUUxMEIwNS0wQjBDMEIwRjBCMTAwQjEzLTBCMjgwQjJBLTBCMzAwQjMyMEIzMzBCMzUtMEIzOTBCM0QwQjVDMEI1RDBCNUYtMEI2MTBCNzEwQjgzMEI4NS0wQjhBMEI4RS0wQjkwMEI5Mi0wQjk1MEI5OTBCOUEwQjlDMEI5RTBCOUYwQkEzMEJBNDBCQTgtMEJBQTBCQUUtMEJCOTBCRDAwQzA1LTBDMEMwQzBFLTBDMTAwQzEyLTBDMjgwQzJBLTBDMzMwQzM1LTBDMzkwQzNEMEM1ODBDNTkwQzYwMEM2MTBDODUtMEM4QzBDOEUtMEM5MDBDOTItMENBODBDQUEtMENCMzBDQjUtMENCOTBDQkQwQ0RFMENFMDBDRTEwRDA1LTBEMEMwRDBFLTBEMTAwRDEyLTBEMjgwRDJBLTBEMzkwRDNEMEQ2MDBENjEwRDdBLTBEN0YwRDg1LTBEOTYwRDlBLTBEQjEwREIzLTBEQkIwREJEMERDMC0wREM2MEUwMS0wRTMwMEUzMjBFMzMwRTQwLTBFNDUwRTgxMEU4MjBFODQwRTg3MEU4ODBFOEEwRThEMEU5NC0wRTk3MEU5OS0wRTlGMEVBMS0wRUEzMEVBNTBFQTcwRUFBMEVBQjBFQUQtMEVCMDBFQjIwRUIzMEVCRDBFQzAtMEVDNDBFREMwRUREMEYwMDBGNDAtMEY0NzBGNDktMEY2QzBGODgtMEY4QjEwMDAtMTAyQTEwM0YxMDUwLTEwNTUxMDVBLTEwNUQxMDYxMTA2NTEwNjYxMDZFLTEwNzAxMDc1LTEwODExMDhFMTBEMC0xMEZBMTEwMC0xMjQ4MTI0QS0xMjREMTI1MC0xMjU2MTI1ODEyNUEtMTI1RDEyNjAtMTI4ODEyOEEtMTI4RDEyOTAtMTJCMDEyQjItMTJCNTEyQjgtMTJCRTEyQzAxMkMyLTEyQzUxMkM4LTEyRDYxMkQ4LTEzMTAxMzEyLTEzMTUxMzE4LTEzNUExMzgwLTEzOEYxM0EwLTEzRjQxNDAxLTE2NkMxNjZGLTE2N0YxNjgxLTE2OUExNkEwLTE2RUExNzAwLTE3MEMxNzBFLTE3MTExNzIwLTE3MzExNzQwLTE3NTExNzYwLTE3NkMxNzZFLTE3NzAxNzgwLTE3QjMxN0RDMTgyMC0xODQyMTg0NC0xODc3MTg4MC0xOEE4MThBQTE4QjAtMThGNTE5MDAtMTkxQzE5NTAtMTk2RDE5NzAtMTk3NDE5ODAtMTlBQjE5QzEtMTlDNzFBMDAtMUExNjFBMjAtMUE1NDFCMDUtMUIzMzFCNDUtMUI0QjFCODMtMUJBMDFCQUUxQkFGMUMwMC0xQzIzMUM0RC0xQzRGMUM1QS0xQzc3MUNFOS0xQ0VDMUNFRS0xQ0YxMjEzNS0yMTM4MkQzMC0yRDY1MkQ4MC0yRDk2MkRBMC0yREE2MkRBOC0yREFFMkRCMC0yREI2MkRCOC0yREJFMkRDMC0yREM2MkRDOC0yRENFMkREMC0yREQ2MkREOC0yRERFMzAwNjMwM0MzMDQxLTMwOTYzMDlGMzBBMS0zMEZBMzBGRjMxMDUtMzEyRDMxMzEtMzE4RTMxQTAtMzFCNzMxRjAtMzFGRjM0MDAtNERCNTRFMDAtOUZDQkEwMDAtQTAxNEEwMTYtQTQ4Q0E0RDAtQTRGN0E1MDAtQTYwQkE2MTAtQTYxRkE2MkFBNjJCQTY2RUE2QTAtQTZFNUE3RkItQTgwMUE4MDMtQTgwNUE4MDctQTgwQUE4MEMtQTgyMkE4NDAtQTg3M0E4ODItQThCM0E4RjItQThGN0E4RkJBOTBBLUE5MjVBOTMwLUE5NDZBOTYwLUE5N0NBOTg0LUE5QjJBQTAwLUFBMjhBQTQwLUFBNDJBQTQ0LUFBNEJBQTYwLUFBNkZBQTcxLUFBNzZBQTdBQUE4MC1BQUFGQUFCMUFBQjVBQUI2QUFCOS1BQUJEQUFDMEFBQzJBQURCQUFEQ0FCQzAtQUJFMkFDMDAtRDdBM0Q3QjAtRDdDNkQ3Q0ItRDdGQkY5MDAtRkEyREZBMzAtRkE2REZBNzAtRkFEOUZCMURGQjFGLUZCMjhGQjJBLUZCMzZGQjM4LUZCM0NGQjNFRkI0MEZCNDFGQjQzRkI0NEZCNDYtRkJCMUZCRDMtRkQzREZENTAtRkQ4RkZEOTItRkRDN0ZERjAtRkRGQkZFNzAtRkU3NEZFNzYtRkVGQ0ZGNjYtRkY2RkZGNzEtRkY5REZGQTAtRkZCRUZGQzItRkZDN0ZGQ0EtRkZDRkZGRDItRkZEN0ZGREEtRkZEQ1wiLFxuICAgIE06ICBcIjAzMDAtMDM2RjA0ODMtMDQ4OTA1OTEtMDVCRDA1QkYwNUMxMDVDMjA1QzQwNUM1MDVDNzA2MTAtMDYxQTA2NEItMDY1RTA2NzAwNkQ2LTA2REMwNkRFLTA2RTQwNkU3MDZFODA2RUEtMDZFRDA3MTEwNzMwLTA3NEEwN0E2LTA3QjAwN0VCLTA3RjMwODE2LTA4MTkwODFCLTA4MjMwODI1LTA4MjcwODI5LTA4MkQwOTAwLTA5MDMwOTNDMDkzRS0wOTRFMDk1MS0wOTU1MDk2MjA5NjMwOTgxLTA5ODMwOUJDMDlCRS0wOUM0MDlDNzA5QzgwOUNCLTA5Q0QwOUQ3MDlFMjA5RTMwQTAxLTBBMDMwQTNDMEEzRS0wQTQyMEE0NzBBNDgwQTRCLTBBNEQwQTUxMEE3MDBBNzEwQTc1MEE4MS0wQTgzMEFCQzBBQkUtMEFDNTBBQzctMEFDOTBBQ0ItMEFDRDBBRTIwQUUzMEIwMS0wQjAzMEIzQzBCM0UtMEI0NDBCNDcwQjQ4MEI0Qi0wQjREMEI1NjBCNTcwQjYyMEI2MzBCODIwQkJFLTBCQzIwQkM2LTBCQzgwQkNBLTBCQ0QwQkQ3MEMwMS0wQzAzMEMzRS0wQzQ0MEM0Ni0wQzQ4MEM0QS0wQzREMEM1NTBDNTYwQzYyMEM2MzBDODIwQzgzMENCQzBDQkUtMENDNDBDQzYtMENDODBDQ0EtMENDRDBDRDUwQ0Q2MENFMjBDRTMwRDAyMEQwMzBEM0UtMEQ0NDBENDYtMEQ0ODBENEEtMEQ0RDBENTcwRDYyMEQ2MzBEODIwRDgzMERDQTBEQ0YtMERENDBERDYwREQ4LTBEREYwREYyMERGMzBFMzEwRTM0LTBFM0EwRTQ3LTBFNEUwRUIxMEVCNC0wRUI5MEVCQjBFQkMwRUM4LTBFQ0QwRjE4MEYxOTBGMzUwRjM3MEYzOTBGM0UwRjNGMEY3MS0wRjg0MEY4NjBGODcwRjkwLTBGOTcwRjk5LTBGQkMwRkM2MTAyQi0xMDNFMTA1Ni0xMDU5MTA1RS0xMDYwMTA2Mi0xMDY0MTA2Ny0xMDZEMTA3MS0xMDc0MTA4Mi0xMDhEMTA4RjEwOUEtMTA5RDEzNUYxNzEyLTE3MTQxNzMyLTE3MzQxNzUyMTc1MzE3NzIxNzczMTdCNi0xN0QzMTdERDE4MEItMTgwRDE4QTkxOTIwLTE5MkIxOTMwLTE5M0IxOUIwLTE5QzAxOUM4MTlDOTFBMTctMUExQjFBNTUtMUE1RTFBNjAtMUE3QzFBN0YxQjAwLTFCMDQxQjM0LTFCNDQxQjZCLTFCNzMxQjgwLTFCODIxQkExLTFCQUExQzI0LTFDMzcxQ0QwLTFDRDIxQ0Q0LTFDRTgxQ0VEMUNGMjFEQzAtMURFNjFERkQtMURGRjIwRDAtMjBGMDJDRUYtMkNGMTJERTAtMkRGRjMwMkEtMzAyRjMwOTkzMDlBQTY2Ri1BNjcyQTY3Q0E2N0RBNkYwQTZGMUE4MDJBODA2QTgwQkE4MjMtQTgyN0E4ODBBODgxQThCNC1BOEM0QThFMC1BOEYxQTkyNi1BOTJEQTk0Ny1BOTUzQTk4MC1BOTgzQTlCMy1BOUMwQUEyOS1BQTM2QUE0M0FBNENBQTREQUE3QkFBQjBBQUIyLUFBQjRBQUI3QUFCOEFBQkVBQUJGQUFDMUFCRTMtQUJFQUFCRUNBQkVERkIxRUZFMDAtRkUwRkZFMjAtRkUyNlwiLFxuICAgIE1uOiBcIjAzMDAtMDM2RjA0ODMtMDQ4NzA1OTEtMDVCRDA1QkYwNUMxMDVDMjA1QzQwNUM1MDVDNzA2MTAtMDYxQTA2NEItMDY1RTA2NzAwNkQ2LTA2REMwNkRGLTA2RTQwNkU3MDZFODA2RUEtMDZFRDA3MTEwNzMwLTA3NEEwN0E2LTA3QjAwN0VCLTA3RjMwODE2LTA4MTkwODFCLTA4MjMwODI1LTA4MjcwODI5LTA4MkQwOTAwLTA5MDIwOTNDMDk0MS0wOTQ4MDk0RDA5NTEtMDk1NTA5NjIwOTYzMDk4MTA5QkMwOUMxLTA5QzQwOUNEMDlFMjA5RTMwQTAxMEEwMjBBM0MwQTQxMEE0MjBBNDcwQTQ4MEE0Qi0wQTREMEE1MTBBNzAwQTcxMEE3NTBBODEwQTgyMEFCQzBBQzEtMEFDNTBBQzcwQUM4MEFDRDBBRTIwQUUzMEIwMTBCM0MwQjNGMEI0MS0wQjQ0MEI0RDBCNTYwQjYyMEI2MzBCODIwQkMwMEJDRDBDM0UtMEM0MDBDNDYtMEM0ODBDNEEtMEM0RDBDNTUwQzU2MEM2MjBDNjMwQ0JDMENCRjBDQzYwQ0NDMENDRDBDRTIwQ0UzMEQ0MS0wRDQ0MEQ0RDBENjIwRDYzMERDQTBERDItMERENDBERDYwRTMxMEUzNC0wRTNBMEU0Ny0wRTRFMEVCMTBFQjQtMEVCOTBFQkIwRUJDMEVDOC0wRUNEMEYxODBGMTkwRjM1MEYzNzBGMzkwRjcxLTBGN0UwRjgwLTBGODQwRjg2MEY4NzBGOTAtMEY5NzBGOTktMEZCQzBGQzYxMDJELTEwMzAxMDMyLTEwMzcxMDM5MTAzQTEwM0QxMDNFMTA1ODEwNTkxMDVFLTEwNjAxMDcxLTEwNzQxMDgyMTA4NTEwODYxMDhEMTA5RDEzNUYxNzEyLTE3MTQxNzMyLTE3MzQxNzUyMTc1MzE3NzIxNzczMTdCNy0xN0JEMTdDNjE3QzktMTdEMzE3REQxODBCLTE4MEQxOEE5MTkyMC0xOTIyMTkyNzE5MjgxOTMyMTkzOS0xOTNCMUExNzFBMTgxQTU2MUE1OC0xQTVFMUE2MDFBNjIxQTY1LTFBNkMxQTczLTFBN0MxQTdGMUIwMC0xQjAzMUIzNDFCMzYtMUIzQTFCM0MxQjQyMUI2Qi0xQjczMUI4MDFCODExQkEyLTFCQTUxQkE4MUJBOTFDMkMtMUMzMzFDMzYxQzM3MUNEMC0xQ0QyMUNENC0xQ0UwMUNFMi0xQ0U4MUNFRDFEQzAtMURFNjFERkQtMURGRjIwRDAtMjBEQzIwRTEyMEU1LTIwRjAyQ0VGLTJDRjEyREUwLTJERkYzMDJBLTMwMkYzMDk5MzA5QUE2NkZBNjdDQTY3REE2RjBBNkYxQTgwMkE4MDZBODBCQTgyNUE4MjZBOEM0QThFMC1BOEYxQTkyNi1BOTJEQTk0Ny1BOTUxQTk4MC1BOTgyQTlCM0E5QjYtQTlCOUE5QkNBQTI5LUFBMkVBQTMxQUEzMkFBMzVBQTM2QUE0M0FBNENBQUIwQUFCMi1BQUI0QUFCN0FBQjhBQUJFQUFCRkFBQzFBQkU1QUJFOEFCRURGQjFFRkUwMC1GRTBGRkUyMC1GRTI2XCIsXG4gICAgTWM6IFwiMDkwMzA5M0UtMDk0MDA5NDktMDk0QzA5NEUwOTgyMDk4MzA5QkUtMDlDMDA5QzcwOUM4MDlDQjA5Q0MwOUQ3MEEwMzBBM0UtMEE0MDBBODMwQUJFLTBBQzAwQUM5MEFDQjBBQ0MwQjAyMEIwMzBCM0UwQjQwMEI0NzBCNDgwQjRCMEI0QzBCNTcwQkJFMEJCRjBCQzEwQkMyMEJDNi0wQkM4MEJDQS0wQkNDMEJENzBDMDEtMEMwMzBDNDEtMEM0NDBDODIwQzgzMENCRTBDQzAtMENDNDBDQzcwQ0M4MENDQTBDQ0IwQ0Q1MENENjBEMDIwRDAzMEQzRS0wRDQwMEQ0Ni0wRDQ4MEQ0QS0wRDRDMEQ1NzBEODIwRDgzMERDRi0wREQxMEREOC0wRERGMERGMjBERjMwRjNFMEYzRjBGN0YxMDJCMTAyQzEwMzExMDM4MTAzQjEwM0MxMDU2MTA1NzEwNjItMTA2NDEwNjctMTA2RDEwODMxMDg0MTA4Ny0xMDhDMTA4RjEwOUEtMTA5QzE3QjYxN0JFLTE3QzUxN0M3MTdDODE5MjMtMTkyNjE5MjktMTkyQjE5MzAxOTMxMTkzMy0xOTM4MTlCMC0xOUMwMTlDODE5QzkxQTE5LTFBMUIxQTU1MUE1NzFBNjExQTYzMUE2NDFBNkQtMUE3MjFCMDQxQjM1MUIzQjFCM0QtMUI0MTFCNDMxQjQ0MUI4MjFCQTExQkE2MUJBNzFCQUExQzI0LTFDMkIxQzM0MUMzNTFDRTExQ0YyQTgyM0E4MjRBODI3QTg4MEE4ODFBOEI0LUE4QzNBOTUyQTk1M0E5ODNBOUI0QTlCNUE5QkFBOUJCQTlCRC1BOUMwQUEyRkFBMzBBQTMzQUEzNEFBNERBQTdCQUJFM0FCRTRBQkU2QUJFN0FCRTlBQkVBQUJFQ1wiLFxuICAgIE1lOiBcIjA0ODgwNDg5MDZERTIwREQtMjBFMDIwRTItMjBFNEE2NzAtQTY3MlwiLFxuICAgIE46ICBcIjAwMzAtMDAzOTAwQjIwMEIzMDBCOTAwQkMtMDBCRTA2NjAtMDY2OTA2RjAtMDZGOTA3QzAtMDdDOTA5NjYtMDk2RjA5RTYtMDlFRjA5RjQtMDlGOTBBNjYtMEE2RjBBRTYtMEFFRjBCNjYtMEI2RjBCRTYtMEJGMjBDNjYtMEM2RjBDNzgtMEM3RTBDRTYtMENFRjBENjYtMEQ3NTBFNTAtMEU1OTBFRDAtMEVEOTBGMjAtMEYzMzEwNDAtMTA0OTEwOTAtMTA5OTEzNjktMTM3QzE2RUUtMTZGMDE3RTAtMTdFOTE3RjAtMTdGOTE4MTAtMTgxOTE5NDYtMTk0RjE5RDAtMTlEQTFBODAtMUE4OTFBOTAtMUE5OTFCNTAtMUI1OTFCQjAtMUJCOTFDNDAtMUM0OTFDNTAtMUM1OTIwNzAyMDc0LTIwNzkyMDgwLTIwODkyMTUwLTIxODIyMTg1LTIxODkyNDYwLTI0OUIyNEVBLTI0RkYyNzc2LTI3OTMyQ0ZEMzAwNzMwMjEtMzAyOTMwMzgtMzAzQTMxOTItMzE5NTMyMjAtMzIyOTMyNTEtMzI1RjMyODAtMzI4OTMyQjEtMzJCRkE2MjAtQTYyOUE2RTYtQTZFRkE4MzAtQTgzNUE4RDAtQThEOUE5MDAtQTkwOUE5RDAtQTlEOUFBNTAtQUE1OUFCRjAtQUJGOUZGMTAtRkYxOVwiLFxuICAgIE5kOiBcIjAwMzAtMDAzOTA2NjAtMDY2OTA2RjAtMDZGOTA3QzAtMDdDOTA5NjYtMDk2RjA5RTYtMDlFRjBBNjYtMEE2RjBBRTYtMEFFRjBCNjYtMEI2RjBCRTYtMEJFRjBDNjYtMEM2RjBDRTYtMENFRjBENjYtMEQ2RjBFNTAtMEU1OTBFRDAtMEVEOTBGMjAtMEYyOTEwNDAtMTA0OTEwOTAtMTA5OTE3RTAtMTdFOTE4MTAtMTgxOTE5NDYtMTk0RjE5RDAtMTlEQTFBODAtMUE4OTFBOTAtMUE5OTFCNTAtMUI1OTFCQjAtMUJCOTFDNDAtMUM0OTFDNTAtMUM1OUE2MjAtQTYyOUE4RDAtQThEOUE5MDAtQTkwOUE5RDAtQTlEOUFBNTAtQUE1OUFCRjAtQUJGOUZGMTAtRkYxOVwiLFxuICAgIE5sOiBcIjE2RUUtMTZGMDIxNjAtMjE4MjIxODUtMjE4ODMwMDczMDIxLTMwMjkzMDM4LTMwM0FBNkU2LUE2RUZcIixcbiAgICBObzogXCIwMEIyMDBCMzAwQjkwMEJDLTAwQkUwOUY0LTA5RjkwQkYwLTBCRjIwQzc4LTBDN0UwRDcwLTBENzUwRjJBLTBGMzMxMzY5LTEzN0MxN0YwLTE3RjkyMDcwMjA3NC0yMDc5MjA4MC0yMDg5MjE1MC0yMTVGMjE4OTI0NjAtMjQ5QjI0RUEtMjRGRjI3NzYtMjc5MzJDRkQzMTkyLTMxOTUzMjIwLTMyMjkzMjUxLTMyNUYzMjgwLTMyODkzMkIxLTMyQkZBODMwLUE4MzVcIixcbiAgICBQOiAgXCIwMDIxLTAwMjMwMDI1LTAwMkEwMDJDLTAwMkYwMDNBMDAzQjAwM0YwMDQwMDA1Qi0wMDVEMDA1RjAwN0IwMDdEMDBBMTAwQUIwMEI3MDBCQjAwQkYwMzdFMDM4NzA1NUEtMDU1RjA1ODkwNThBMDVCRTA1QzAwNUMzMDVDNjA1RjMwNUY0MDYwOTA2MEEwNjBDMDYwRDA2MUIwNjFFMDYxRjA2NkEtMDY2RDA2RDQwNzAwLTA3MEQwN0Y3LTA3RjkwODMwLTA4M0UwOTY0MDk2NTA5NzAwREY0MEU0RjBFNUEwRTVCMEYwNC0wRjEyMEYzQS0wRjNEMEY4NTBGRDAtMEZENDEwNEEtMTA0RjEwRkIxMzYxLTEzNjgxNDAwMTY2RDE2NkUxNjlCMTY5QzE2RUItMTZFRDE3MzUxNzM2MTdENC0xN0Q2MTdEOC0xN0RBMTgwMC0xODBBMTk0NDE5NDUxOURFMTlERjFBMUUxQTFGMUFBMC0xQUE2MUFBOC0xQUFEMUI1QS0xQjYwMUMzQi0xQzNGMUM3RTFDN0YxQ0QzMjAxMC0yMDI3MjAzMC0yMDQzMjA0NS0yMDUxMjA1My0yMDVFMjA3RDIwN0UyMDhEMjA4RTIzMjkyMzJBMjc2OC0yNzc1MjdDNTI3QzYyN0U2LTI3RUYyOTgzLTI5OTgyOUQ4LTI5REIyOUZDMjlGRDJDRjktMkNGQzJDRkUyQ0ZGMkUwMC0yRTJFMkUzMDJFMzEzMDAxLTMwMDMzMDA4LTMwMTEzMDE0LTMwMUYzMDMwMzAzRDMwQTAzMEZCQTRGRUE0RkZBNjBELUE2MEZBNjczQTY3RUE2RjItQTZGN0E4NzQtQTg3N0E4Q0VBOENGQThGOC1BOEZBQTkyRUE5MkZBOTVGQTlDMS1BOUNEQTlERUE5REZBQTVDLUFBNUZBQURFQUFERkFCRUJGRDNFRkQzRkZFMTAtRkUxOUZFMzAtRkU1MkZFNTQtRkU2MUZFNjNGRTY4RkU2QUZFNkJGRjAxLUZGMDNGRjA1LUZGMEFGRjBDLUZGMEZGRjFBRkYxQkZGMUZGRjIwRkYzQi1GRjNERkYzRkZGNUJGRjVERkY1Ri1GRjY1XCIsXG4gICAgUGQ6IFwiMDAyRDA1OEEwNUJFMTQwMDE4MDYyMDEwLTIwMTUyRTE3MkUxQTMwMUMzMDMwMzBBMEZFMzFGRTMyRkU1OEZFNjNGRjBEXCIsXG4gICAgUHM6IFwiMDAyODAwNUIwMDdCMEYzQTBGM0MxNjlCMjAxQTIwMUUyMDQ1MjA3RDIwOEQyMzI5Mjc2ODI3NkEyNzZDMjc2RTI3NzAyNzcyMjc3NDI3QzUyN0U2MjdFODI3RUEyN0VDMjdFRTI5ODMyOTg1Mjk4NzI5ODkyOThCMjk4RDI5OEYyOTkxMjk5MzI5OTUyOTk3MjlEODI5REEyOUZDMkUyMjJFMjQyRTI2MkUyODMwMDgzMDBBMzAwQzMwMEUzMDEwMzAxNDMwMTYzMDE4MzAxQTMwMURGRDNFRkUxN0ZFMzVGRTM3RkUzOUZFM0JGRTNERkUzRkZFNDFGRTQzRkU0N0ZFNTlGRTVCRkU1REZGMDhGRjNCRkY1QkZGNUZGRjYyXCIsXG4gICAgUGU6IFwiMDAyOTAwNUQwMDdEMEYzQjBGM0QxNjlDMjA0NjIwN0UyMDhFMjMyQTI3NjkyNzZCMjc2RDI3NkYyNzcxMjc3MzI3NzUyN0M2MjdFNzI3RTkyN0VCMjdFRDI3RUYyOTg0Mjk4NjI5ODgyOThBMjk4QzI5OEUyOTkwMjk5MjI5OTQyOTk2Mjk5ODI5RDkyOURCMjlGRDJFMjMyRTI1MkUyNzJFMjkzMDA5MzAwQjMwMEQzMDBGMzAxMTMwMTUzMDE3MzAxOTMwMUIzMDFFMzAxRkZEM0ZGRTE4RkUzNkZFMzhGRTNBRkUzQ0ZFM0VGRTQwRkU0MkZFNDRGRTQ4RkU1QUZFNUNGRTVFRkYwOUZGM0RGRjVERkY2MEZGNjNcIixcbiAgICBQaTogXCIwMEFCMjAxODIwMUIyMDFDMjAxRjIwMzkyRTAyMkUwNDJFMDkyRTBDMkUxQzJFMjBcIixcbiAgICBQZjogXCIwMEJCMjAxOTIwMUQyMDNBMkUwMzJFMDUyRTBBMkUwRDJFMUQyRTIxXCIsXG4gICAgUGM6IFwiMDA1RjIwM0YyMDQwMjA1NEZFMzNGRTM0RkU0RC1GRTRGRkYzRlwiLFxuICAgIFBvOiBcIjAwMjEtMDAyMzAwMjUtMDAyNzAwMkEwMDJDMDAyRTAwMkYwMDNBMDAzQjAwM0YwMDQwMDA1QzAwQTEwMEI3MDBCRjAzN0UwMzg3MDU1QS0wNTVGMDU4OTA1QzAwNUMzMDVDNjA1RjMwNUY0MDYwOTA2MEEwNjBDMDYwRDA2MUIwNjFFMDYxRjA2NkEtMDY2RDA2RDQwNzAwLTA3MEQwN0Y3LTA3RjkwODMwLTA4M0UwOTY0MDk2NTA5NzAwREY0MEU0RjBFNUEwRTVCMEYwNC0wRjEyMEY4NTBGRDAtMEZENDEwNEEtMTA0RjEwRkIxMzYxLTEzNjgxNjZEMTY2RTE2RUItMTZFRDE3MzUxNzM2MTdENC0xN0Q2MTdEOC0xN0RBMTgwMC0xODA1MTgwNy0xODBBMTk0NDE5NDUxOURFMTlERjFBMUUxQTFGMUFBMC0xQUE2MUFBOC0xQUFEMUI1QS0xQjYwMUMzQi0xQzNGMUM3RTFDN0YxQ0QzMjAxNjIwMTcyMDIwLTIwMjcyMDMwLTIwMzgyMDNCLTIwM0UyMDQxLTIwNDMyMDQ3LTIwNTEyMDUzMjA1NS0yMDVFMkNGOS0yQ0ZDMkNGRTJDRkYyRTAwMkUwMTJFMDYtMkUwODJFMEIyRTBFLTJFMTYyRTE4MkUxOTJFMUIyRTFFMkUxRjJFMkEtMkUyRTJFMzAyRTMxMzAwMS0zMDAzMzAzRDMwRkJBNEZFQTRGRkE2MEQtQTYwRkE2NzNBNjdFQTZGMi1BNkY3QTg3NC1BODc3QThDRUE4Q0ZBOEY4LUE4RkFBOTJFQTkyRkE5NUZBOUMxLUE5Q0RBOURFQTlERkFBNUMtQUE1RkFBREVBQURGQUJFQkZFMTAtRkUxNkZFMTlGRTMwRkU0NUZFNDZGRTQ5LUZFNENGRTUwLUZFNTJGRTU0LUZFNTdGRTVGLUZFNjFGRTY4RkU2QUZFNkJGRjAxLUZGMDNGRjA1LUZGMDdGRjBBRkYwQ0ZGMEVGRjBGRkYxQUZGMUJGRjFGRkYyMEZGM0NGRjYxRkY2NEZGNjVcIixcbiAgICBTOiAgXCIwMDI0MDAyQjAwM0MtMDAzRTAwNUUwMDYwMDA3QzAwN0UwMEEyLTAwQTkwMEFDMDBBRS0wMEIxMDBCNDAwQjYwMEI4MDBENzAwRjcwMkMyLTAyQzUwMkQyLTAyREYwMkU1LTAyRUIwMkVEMDJFRi0wMkZGMDM3NTAzODQwMzg1MDNGNjA0ODIwNjA2LTA2MDgwNjBCMDYwRTA2MEYwNkU5MDZGRDA2RkUwN0Y2MDlGMjA5RjMwOUZBMDlGQjBBRjEwQjcwMEJGMy0wQkZBMEM3RjBDRjEwQ0YyMEQ3OTBFM0YwRjAxLTBGMDMwRjEzLTBGMTcwRjFBLTBGMUYwRjM0MEYzNjBGMzgwRkJFLTBGQzUwRkM3LTBGQ0MwRkNFMEZDRjBGRDUtMEZEODEwOUUxMDlGMTM2MDEzOTAtMTM5OTE3REIxOTQwMTlFMC0xOUZGMUI2MS0xQjZBMUI3NC0xQjdDMUZCRDFGQkYtMUZDMTFGQ0QtMUZDRjFGREQtMUZERjFGRUQtMUZFRjFGRkQxRkZFMjA0NDIwNTIyMDdBLTIwN0MyMDhBLTIwOEMyMEEwLTIwQjgyMTAwMjEwMTIxMDMtMjEwNjIxMDgyMTA5MjExNDIxMTYtMjExODIxMUUtMjEyMzIxMjUyMTI3MjEyOTIxMkUyMTNBMjEzQjIxNDAtMjE0NDIxNEEtMjE0RDIxNEYyMTkwLTIzMjgyMzJCLTIzRTgyNDAwLTI0MjYyNDQwLTI0NEEyNDlDLTI0RTkyNTAwLTI2Q0QyNkNGLTI2RTEyNkUzMjZFOC0yNkZGMjcwMS0yNzA0MjcwNi0yNzA5MjcwQy0yNzI3MjcyOS0yNzRCMjc0RDI3NEYtMjc1MjI3NTYtMjc1RTI3NjEtMjc2NzI3OTQyNzk4LTI3QUYyN0IxLTI3QkUyN0MwLTI3QzQyN0M3LTI3Q0EyN0NDMjdEMC0yN0U1MjdGMC0yOTgyMjk5OS0yOUQ3MjlEQy0yOUZCMjlGRS0yQjRDMkI1MC0yQjU5MkNFNS0yQ0VBMkU4MC0yRTk5MkU5Qi0yRUYzMkYwMC0yRkQ1MkZGMC0yRkZCMzAwNDMwMTIzMDEzMzAyMDMwMzYzMDM3MzAzRTMwM0YzMDlCMzA5QzMxOTAzMTkxMzE5Ni0zMTlGMzFDMC0zMUUzMzIwMC0zMjFFMzIyQS0zMjUwMzI2MC0zMjdGMzI4QS0zMkIwMzJDMC0zMkZFMzMwMC0zM0ZGNERDMC00REZGQTQ5MC1BNEM2QTcwMC1BNzE2QTcyMEE3MjFBNzg5QTc4QUE4MjgtQTgyQkE4MzYtQTgzOUFBNzctQUE3OUZCMjlGREZDRkRGREZFNjJGRTY0LUZFNjZGRTY5RkYwNEZGMEJGRjFDLUZGMUVGRjNFRkY0MEZGNUNGRjVFRkZFMC1GRkU2RkZFOC1GRkVFRkZGQ0ZGRkRcIixcbiAgICBTbTogXCIwMDJCMDAzQy0wMDNFMDA3QzAwN0UwMEFDMDBCMTAwRDcwMEY3MDNGNjA2MDYtMDYwODIwNDQyMDUyMjA3QS0yMDdDMjA4QS0yMDhDMjE0MC0yMTQ0MjE0QjIxOTAtMjE5NDIxOUEyMTlCMjFBMDIxQTMyMUE2MjFBRTIxQ0UyMUNGMjFEMjIxRDQyMUY0LTIyRkYyMzA4LTIzMEIyMzIwMjMyMTIzN0MyMzlCLTIzQjMyM0RDLTIzRTEyNUI3MjVDMTI1RjgtMjVGRjI2NkYyN0MwLTI3QzQyN0M3LTI3Q0EyN0NDMjdEMC0yN0U1MjdGMC0yN0ZGMjkwMC0yOTgyMjk5OS0yOUQ3MjlEQy0yOUZCMjlGRS0yQUZGMkIzMC0yQjQ0MkI0Ny0yQjRDRkIyOUZFNjJGRTY0LUZFNjZGRjBCRkYxQy1GRjFFRkY1Q0ZGNUVGRkUyRkZFOS1GRkVDXCIsXG4gICAgU2M6IFwiMDAyNDAwQTItMDBBNTA2MEIwOUYyMDlGMzA5RkIwQUYxMEJGOTBFM0YxN0RCMjBBMC0yMEI4QTgzOEZERkNGRTY5RkYwNEZGRTBGRkUxRkZFNUZGRTZcIixcbiAgICBTazogXCIwMDVFMDA2MDAwQTgwMEFGMDBCNDAwQjgwMkMyLTAyQzUwMkQyLTAyREYwMkU1LTAyRUIwMkVEMDJFRi0wMkZGMDM3NTAzODQwMzg1MUZCRDFGQkYtMUZDMTFGQ0QtMUZDRjFGREQtMUZERjFGRUQtMUZFRjFGRkQxRkZFMzA5QjMwOUNBNzAwLUE3MTZBNzIwQTcyMUE3ODlBNzhBRkYzRUZGNDBGRkUzXCIsXG4gICAgU286IFwiMDBBNjAwQTcwMEE5MDBBRTAwQjAwMEI2MDQ4MjA2MEUwNjBGMDZFOTA2RkQwNkZFMDdGNjA5RkEwQjcwMEJGMy0wQkY4MEJGQTBDN0YwQ0YxMENGMjBENzkwRjAxLTBGMDMwRjEzLTBGMTcwRjFBLTBGMUYwRjM0MEYzNjBGMzgwRkJFLTBGQzUwRkM3LTBGQ0MwRkNFMEZDRjBGRDUtMEZEODEwOUUxMDlGMTM2MDEzOTAtMTM5OTE5NDAxOUUwLTE5RkYxQjYxLTFCNkExQjc0LTFCN0MyMTAwMjEwMTIxMDMtMjEwNjIxMDgyMTA5MjExNDIxMTYtMjExODIxMUUtMjEyMzIxMjUyMTI3MjEyOTIxMkUyMTNBMjEzQjIxNEEyMTRDMjE0RDIxNEYyMTk1LTIxOTkyMTlDLTIxOUYyMUExMjFBMjIxQTQyMUE1MjFBNy0yMUFEMjFBRi0yMUNEMjFEMDIxRDEyMUQzMjFENS0yMUYzMjMwMC0yMzA3MjMwQy0yMzFGMjMyMi0yMzI4MjMyQi0yMzdCMjM3RC0yMzlBMjNCNC0yM0RCMjNFMi0yM0U4MjQwMC0yNDI2MjQ0MC0yNDRBMjQ5Qy0yNEU5MjUwMC0yNUI2MjVCOC0yNUMwMjVDMi0yNUY3MjYwMC0yNjZFMjY3MC0yNkNEMjZDRi0yNkUxMjZFMzI2RTgtMjZGRjI3MDEtMjcwNDI3MDYtMjcwOTI3MEMtMjcyNzI3MjktMjc0QjI3NEQyNzRGLTI3NTIyNzU2LTI3NUUyNzYxLTI3NjcyNzk0Mjc5OC0yN0FGMjdCMS0yN0JFMjgwMC0yOEZGMkIwMC0yQjJGMkI0NTJCNDYyQjUwLTJCNTkyQ0U1LTJDRUEyRTgwLTJFOTkyRTlCLTJFRjMyRjAwLTJGRDUyRkYwLTJGRkIzMDA0MzAxMjMwMTMzMDIwMzAzNjMwMzczMDNFMzAzRjMxOTAzMTkxMzE5Ni0zMTlGMzFDMC0zMUUzMzIwMC0zMjFFMzIyQS0zMjUwMzI2MC0zMjdGMzI4QS0zMkIwMzJDMC0zMkZFMzMwMC0zM0ZGNERDMC00REZGQTQ5MC1BNEM2QTgyOC1BODJCQTgzNkE4MzdBODM5QUE3Ny1BQTc5RkRGREZGRTRGRkU4RkZFREZGRUVGRkZDRkZGRFwiLFxuICAgIFo6ICBcIjAwMjAwMEEwMTY4MDE4MEUyMDAwLTIwMEEyMDI4MjAyOTIwMkYyMDVGMzAwMFwiLFxuICAgIFpzOiBcIjAwMjAwMEEwMTY4MDE4MEUyMDAwLTIwMEEyMDJGMjA1RjMwMDBcIixcbiAgICBabDogXCIyMDI4XCIsXG4gICAgWnA6IFwiMjAyOVwiLFxuICAgIEM6ICBcIjAwMDAtMDAxRjAwN0YtMDA5RjAwQUQwMzc4MDM3OTAzN0YtMDM4MzAzOEIwMzhEMDNBMjA1MjYtMDUzMDA1NTcwNTU4MDU2MDA1ODgwNThCLTA1OTAwNUM4LTA1Q0YwNUVCLTA1RUYwNUY1LTA2MDUwNjFDMDYxRDA2MjAwNjVGMDZERDA3MEUwNzBGMDc0QjA3NEMwN0IyLTA3QkYwN0ZCLTA3RkYwODJFMDgyRjA4M0YtMDhGRjA5M0EwOTNCMDk0RjA5NTYwOTU3MDk3My0wOTc4MDk4MDA5ODQwOThEMDk4RTA5OTEwOTkyMDlBOTA5QjEwOUIzLTA5QjUwOUJBMDlCQjA5QzUwOUM2MDlDOTA5Q0EwOUNGLTA5RDYwOUQ4LTA5REIwOURFMDlFNDA5RTUwOUZDLTBBMDAwQTA0MEEwQi0wQTBFMEExMTBBMTIwQTI5MEEzMTBBMzQwQTM3MEEzQTBBM0IwQTNEMEE0My0wQTQ2MEE0OTBBNEEwQTRFLTBBNTAwQTUyLTBBNTgwQTVEMEE1Ri0wQTY1MEE3Ni0wQTgwMEE4NDBBOEUwQTkyMEFBOTBBQjEwQUI0MEFCQTBBQkIwQUM2MEFDQTBBQ0UwQUNGMEFEMS0wQURGMEFFNDBBRTUwQUYwMEFGMi0wQjAwMEIwNDBCMEQwQjBFMEIxMTBCMTIwQjI5MEIzMTBCMzQwQjNBMEIzQjBCNDUwQjQ2MEI0OTBCNEEwQjRFLTBCNTUwQjU4LTBCNUIwQjVFMEI2NDBCNjUwQjcyLTBCODEwQjg0MEI4Qi0wQjhEMEI5MTBCOTYtMEI5ODBCOUIwQjlEMEJBMC0wQkEyMEJBNS0wQkE3MEJBQi0wQkFEMEJCQS0wQkJEMEJDMy0wQkM1MEJDOTBCQ0UwQkNGMEJEMS0wQkQ2MEJEOC0wQkU1MEJGQi0wQzAwMEMwNDBDMEQwQzExMEMyOTBDMzQwQzNBLTBDM0MwQzQ1MEM0OTBDNEUtMEM1NDBDNTcwQzVBLTBDNUYwQzY0MEM2NTBDNzAtMEM3NzBDODAwQzgxMEM4NDBDOEQwQzkxMENBOTBDQjQwQ0JBMENCQjBDQzUwQ0M5MENDRS0wQ0Q0MENENy0wQ0REMENERjBDRTQwQ0U1MENGMDBDRjMtMEQwMTBEMDQwRDBEMEQxMTBEMjkwRDNBLTBEM0MwRDQ1MEQ0OTBENEUtMEQ1NjBENTgtMEQ1RjBENjQwRDY1MEQ3Ni0wRDc4MEQ4MDBEODEwRDg0MEQ5Ny0wRDk5MERCMjBEQkMwREJFMERCRjBEQzctMERDOTBEQ0ItMERDRTBERDUwREQ3MERFMC0wREYxMERGNS0wRTAwMEUzQi0wRTNFMEU1Qy0wRTgwMEU4MzBFODUwRTg2MEU4OTBFOEIwRThDMEU4RS0wRTkzMEU5ODBFQTAwRUE0MEVBNjBFQTgwRUE5MEVBQzBFQkEwRUJFMEVCRjBFQzUwRUM3MEVDRTBFQ0YwRURBMEVEQjBFREUtMEVGRjBGNDgwRjZELTBGNzAwRjhDLTBGOEYwRjk4MEZCRDBGQ0QwRkQ5LTBGRkYxMEM2LTEwQ0YxMEZELTEwRkYxMjQ5MTI0RTEyNEYxMjU3MTI1OTEyNUUxMjVGMTI4OTEyOEUxMjhGMTJCMTEyQjYxMkI3MTJCRjEyQzExMkM2MTJDNzEyRDcxMzExMTMxNjEzMTcxMzVCLTEzNUUxMzdELTEzN0YxMzlBLTEzOUYxM0Y1LTEzRkYxNjlELTE2OUYxNkYxLTE2RkYxNzBEMTcxNS0xNzFGMTczNy0xNzNGMTc1NC0xNzVGMTc2RDE3NzExNzc0LTE3N0YxN0I0MTdCNTE3REUxN0RGMTdFQS0xN0VGMTdGQS0xN0ZGMTgwRjE4MUEtMTgxRjE4NzgtMTg3RjE4QUItMThBRjE4RjYtMThGRjE5MUQtMTkxRjE5MkMtMTkyRjE5M0MtMTkzRjE5NDEtMTk0MzE5NkUxOTZGMTk3NS0xOTdGMTlBQy0xOUFGMTlDQS0xOUNGMTlEQi0xOUREMUExQzFBMUQxQTVGMUE3RDFBN0UxQThBLTFBOEYxQTlBLTFBOUYxQUFFLTFBRkYxQjRDLTFCNEYxQjdELTFCN0YxQkFCLTFCQUQxQkJBLTFCRkYxQzM4LTFDM0ExQzRBLTFDNEMxQzgwLTFDQ0YxQ0YzLTFDRkYxREU3LTFERkMxRjE2MUYxNzFGMUUxRjFGMUY0NjFGNDcxRjRFMUY0RjFGNTgxRjVBMUY1QzFGNUUxRjdFMUY3RjFGQjUxRkM1MUZENDFGRDUxRkRDMUZGMDFGRjExRkY1MUZGRjIwMEItMjAwRjIwMkEtMjAyRTIwNjAtMjA2RjIwNzIyMDczMjA4RjIwOTUtMjA5RjIwQjktMjBDRjIwRjEtMjBGRjIxOEEtMjE4RjIzRTktMjNGRjI0MjctMjQzRjI0NEItMjQ1RjI2Q0UyNkUyMjZFNC0yNkU3MjcwMDI3MDUyNzBBMjcwQjI3MjgyNzRDMjc0RTI3NTMtMjc1NTI3NUYyNzYwMjc5NS0yNzk3MjdCMDI3QkYyN0NCMjdDRC0yN0NGMkI0RC0yQjRGMkI1QS0yQkZGMkMyRjJDNUYyQ0YyLTJDRjgyRDI2LTJEMkYyRDY2LTJENkUyRDcwLTJEN0YyRDk3LTJEOUYyREE3MkRBRjJEQjcyREJGMkRDNzJEQ0YyREQ3MkRERjJFMzItMkU3RjJFOUEyRUY0LTJFRkYyRkQ2LTJGRUYyRkZDLTJGRkYzMDQwMzA5NzMwOTgzMTAwLTMxMDQzMTJFLTMxMzAzMThGMzFCOC0zMUJGMzFFNC0zMUVGMzIxRjMyRkY0REI2LTREQkY5RkNDLTlGRkZBNDhELUE0OEZBNEM3LUE0Q0ZBNjJDLUE2M0ZBNjYwQTY2MUE2NzQtQTY3QkE2OTgtQTY5RkE2RjgtQTZGRkE3OEQtQTdGQUE4MkMtQTgyRkE4M0EtQTgzRkE4NzgtQTg3RkE4QzUtQThDREE4REEtQThERkE4RkMtQThGRkE5NTQtQTk1RUE5N0QtQTk3RkE5Q0VBOURBLUE5RERBOUUwLUE5RkZBQTM3LUFBM0ZBQTRFQUE0RkFBNUFBQTVCQUE3Qy1BQTdGQUFDMy1BQURBQUFFMC1BQkJGQUJFRUFCRUZBQkZBLUFCRkZEN0E0LUQ3QUZEN0M3LUQ3Q0FEN0ZDLUY4RkZGQTJFRkEyRkZBNkVGQTZGRkFEQS1GQUZGRkIwNy1GQjEyRkIxOC1GQjFDRkIzN0ZCM0RGQjNGRkI0MkZCNDVGQkIyLUZCRDJGRDQwLUZENEZGRDkwRkQ5MUZEQzgtRkRFRkZERkVGREZGRkUxQS1GRTFGRkUyNy1GRTJGRkU1M0ZFNjdGRTZDLUZFNkZGRTc1RkVGRC1GRjAwRkZCRi1GRkMxRkZDOEZGQzlGRkQwRkZEMUZGRDhGRkQ5RkZERC1GRkRGRkZFN0ZGRUYtRkZGQkZGRkVGRkZGXCIsXG4gICAgQ2M6IFwiMDAwMC0wMDFGMDA3Ri0wMDlGXCIsXG4gICAgQ2Y6IFwiMDBBRDA2MDAtMDYwMzA2REQwNzBGMTdCNDE3QjUyMDBCLTIwMEYyMDJBLTIwMkUyMDYwLTIwNjQyMDZBLTIwNkZGRUZGRkZGOS1GRkZCXCIsXG4gICAgQ286IFwiRTAwMC1GOEZGXCIsXG4gICAgQ3M6IFwiRDgwMC1ERkZGXCIsXG4gICAgQ246IFwiMDM3ODAzNzkwMzdGLTAzODMwMzhCMDM4RDAzQTIwNTI2LTA1MzAwNTU3MDU1ODA1NjAwNTg4MDU4Qi0wNTkwMDVDOC0wNUNGMDVFQi0wNUVGMDVGNS0wNUZGMDYwNDA2MDUwNjFDMDYxRDA2MjAwNjVGMDcwRTA3NEIwNzRDMDdCMi0wN0JGMDdGQi0wN0ZGMDgyRTA4MkYwODNGLTA4RkYwOTNBMDkzQjA5NEYwOTU2MDk1NzA5NzMtMDk3ODA5ODAwOTg0MDk4RDA5OEUwOTkxMDk5MjA5QTkwOUIxMDlCMy0wOUI1MDlCQTA5QkIwOUM1MDlDNjA5QzkwOUNBMDlDRi0wOUQ2MDlEOC0wOURCMDlERTA5RTQwOUU1MDlGQy0wQTAwMEEwNDBBMEItMEEwRTBBMTEwQTEyMEEyOTBBMzEwQTM0MEEzNzBBM0EwQTNCMEEzRDBBNDMtMEE0NjBBNDkwQTRBMEE0RS0wQTUwMEE1Mi0wQTU4MEE1RDBBNUYtMEE2NTBBNzYtMEE4MDBBODQwQThFMEE5MjBBQTkwQUIxMEFCNDBBQkEwQUJCMEFDNjBBQ0EwQUNFMEFDRjBBRDEtMEFERjBBRTQwQUU1MEFGMDBBRjItMEIwMDBCMDQwQjBEMEIwRTBCMTEwQjEyMEIyOTBCMzEwQjM0MEIzQTBCM0IwQjQ1MEI0NjBCNDkwQjRBMEI0RS0wQjU1MEI1OC0wQjVCMEI1RTBCNjQwQjY1MEI3Mi0wQjgxMEI4NDBCOEItMEI4RDBCOTEwQjk2LTBCOTgwQjlCMEI5RDBCQTAtMEJBMjBCQTUtMEJBNzBCQUItMEJBRDBCQkEtMEJCRDBCQzMtMEJDNTBCQzkwQkNFMEJDRjBCRDEtMEJENjBCRDgtMEJFNTBCRkItMEMwMDBDMDQwQzBEMEMxMTBDMjkwQzM0MEMzQS0wQzNDMEM0NTBDNDkwQzRFLTBDNTQwQzU3MEM1QS0wQzVGMEM2NDBDNjUwQzcwLTBDNzcwQzgwMEM4MTBDODQwQzhEMEM5MTBDQTkwQ0I0MENCQTBDQkIwQ0M1MENDOTBDQ0UtMENENDBDRDctMENERDBDREYwQ0U0MENFNTBDRjAwQ0YzLTBEMDEwRDA0MEQwRDBEMTEwRDI5MEQzQS0wRDNDMEQ0NTBENDkwRDRFLTBENTYwRDU4LTBENUYwRDY0MEQ2NTBENzYtMEQ3ODBEODAwRDgxMEQ4NDBEOTctMEQ5OTBEQjIwREJDMERCRTBEQkYwREM3LTBEQzkwRENCLTBEQ0UwREQ1MERENzBERTAtMERGMTBERjUtMEUwMDBFM0ItMEUzRTBFNUMtMEU4MDBFODMwRTg1MEU4NjBFODkwRThCMEU4QzBFOEUtMEU5MzBFOTgwRUEwMEVBNDBFQTYwRUE4MEVBOTBFQUMwRUJBMEVCRTBFQkYwRUM1MEVDNzBFQ0UwRUNGMEVEQTBFREIwRURFLTBFRkYwRjQ4MEY2RC0wRjcwMEY4Qy0wRjhGMEY5ODBGQkQwRkNEMEZEOS0wRkZGMTBDNi0xMENGMTBGRC0xMEZGMTI0OTEyNEUxMjRGMTI1NzEyNTkxMjVFMTI1RjEyODkxMjhFMTI4RjEyQjExMkI2MTJCNzEyQkYxMkMxMTJDNjEyQzcxMkQ3MTMxMTEzMTYxMzE3MTM1Qi0xMzVFMTM3RC0xMzdGMTM5QS0xMzlGMTNGNS0xM0ZGMTY5RC0xNjlGMTZGMS0xNkZGMTcwRDE3MTUtMTcxRjE3MzctMTczRjE3NTQtMTc1RjE3NkQxNzcxMTc3NC0xNzdGMTdERTE3REYxN0VBLTE3RUYxN0ZBLTE3RkYxODBGMTgxQS0xODFGMTg3OC0xODdGMThBQi0xOEFGMThGNi0xOEZGMTkxRC0xOTFGMTkyQy0xOTJGMTkzQy0xOTNGMTk0MS0xOTQzMTk2RTE5NkYxOTc1LTE5N0YxOUFDLTE5QUYxOUNBLTE5Q0YxOURCLTE5REQxQTFDMUExRDFBNUYxQTdEMUE3RTFBOEEtMUE4RjFBOUEtMUE5RjFBQUUtMUFGRjFCNEMtMUI0RjFCN0QtMUI3RjFCQUItMUJBRDFCQkEtMUJGRjFDMzgtMUMzQTFDNEEtMUM0QzFDODAtMUNDRjFDRjMtMUNGRjFERTctMURGQzFGMTYxRjE3MUYxRTFGMUYxRjQ2MUY0NzFGNEUxRjRGMUY1ODFGNUExRjVDMUY1RTFGN0UxRjdGMUZCNTFGQzUxRkQ0MUZENTFGREMxRkYwMUZGMTFGRjUxRkZGMjA2NS0yMDY5MjA3MjIwNzMyMDhGMjA5NS0yMDlGMjBCOS0yMENGMjBGMS0yMEZGMjE4QS0yMThGMjNFOS0yM0ZGMjQyNy0yNDNGMjQ0Qi0yNDVGMjZDRTI2RTIyNkU0LTI2RTcyNzAwMjcwNTI3MEEyNzBCMjcyODI3NEMyNzRFMjc1My0yNzU1Mjc1RjI3NjAyNzk1LTI3OTcyN0IwMjdCRjI3Q0IyN0NELTI3Q0YyQjRELTJCNEYyQjVBLTJCRkYyQzJGMkM1RjJDRjItMkNGODJEMjYtMkQyRjJENjYtMkQ2RTJENzAtMkQ3RjJEOTctMkQ5RjJEQTcyREFGMkRCNzJEQkYyREM3MkRDRjJERDcyRERGMkUzMi0yRTdGMkU5QTJFRjQtMkVGRjJGRDYtMkZFRjJGRkMtMkZGRjMwNDAzMDk3MzA5ODMxMDAtMzEwNDMxMkUtMzEzMDMxOEYzMUI4LTMxQkYzMUU0LTMxRUYzMjFGMzJGRjREQjYtNERCRjlGQ0MtOUZGRkE0OEQtQTQ4RkE0QzctQTRDRkE2MkMtQTYzRkE2NjBBNjYxQTY3NC1BNjdCQTY5OC1BNjlGQTZGOC1BNkZGQTc4RC1BN0ZBQTgyQy1BODJGQTgzQS1BODNGQTg3OC1BODdGQThDNS1BOENEQThEQS1BOERGQThGQy1BOEZGQTk1NC1BOTVFQTk3RC1BOTdGQTlDRUE5REEtQTlEREE5RTAtQTlGRkFBMzctQUEzRkFBNEVBQTRGQUE1QUFBNUJBQTdDLUFBN0ZBQUMzLUFBREFBQUUwLUFCQkZBQkVFQUJFRkFCRkEtQUJGRkQ3QTQtRDdBRkQ3QzctRDdDQUQ3RkMtRDdGRkZBMkVGQTJGRkE2RUZBNkZGQURBLUZBRkZGQjA3LUZCMTJGQjE4LUZCMUNGQjM3RkIzREZCM0ZGQjQyRkI0NUZCQjItRkJEMkZENDAtRkQ0RkZEOTBGRDkxRkRDOC1GREVGRkRGRUZERkZGRTFBLUZFMUZGRTI3LUZFMkZGRTUzRkU2N0ZFNkMtRkU2RkZFNzVGRUZERkVGRUZGMDBGRkJGLUZGQzFGRkM4RkZDOUZGRDBGRkQxRkZEOEZGRDlGRkRELUZGREZGRkU3RkZFRi1GRkY4RkZGRUZGRkZcIlxufSk7XG5cbmZ1bmN0aW9uIGFkZFVuaWNvZGVQYWNrYWdlIChwYWNrKSB7XG4gICAgdmFyIGNvZGVQb2ludCA9IC9cXHd7NH0vZztcbiAgICBmb3IgKHZhciBuYW1lIGluIHBhY2spXG4gICAgICAgIGV4cG9ydHMucGFja2FnZXNbbmFtZV0gPSBwYWNrW25hbWVdLnJlcGxhY2UoY29kZVBvaW50LCBcIlxcXFx1JCZcIik7XG59XG5cbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL21vZGUvdGV4dFwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL3Rva2VuaXplclwiLFwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXNcIixcImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGVcIixcImFjZS91bmljb2RlXCIsXCJhY2UvbGliL2xhbmdcIixcImFjZS90b2tlbl9pdGVyYXRvclwiLFwiYWNlL3JhbmdlXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIFRva2VuaXplciA9IGFjZXF1aXJlKFwiLi4vdG9rZW5pemVyXCIpLlRva2VuaXplcjtcbnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSBhY2VxdWlyZShcIi4vdGV4dF9oaWdobGlnaHRfcnVsZXNcIikuVGV4dEhpZ2hsaWdodFJ1bGVzO1xudmFyIENzdHlsZUJlaGF2aW91ciA9IGFjZXF1aXJlKFwiLi9iZWhhdmlvdXIvY3N0eWxlXCIpLkNzdHlsZUJlaGF2aW91cjtcbnZhciB1bmljb2RlID0gYWNlcXVpcmUoXCIuLi91bmljb2RlXCIpO1xudmFyIGxhbmcgPSBhY2VxdWlyZShcIi4uL2xpYi9sYW5nXCIpO1xudmFyIFRva2VuSXRlcmF0b3IgPSBhY2VxdWlyZShcIi4uL3Rva2VuX2l0ZXJhdG9yXCIpLlRva2VuSXRlcmF0b3I7XG52YXIgUmFuZ2UgPSBhY2VxdWlyZShcIi4uL3JhbmdlXCIpLlJhbmdlO1xuXG52YXIgTW9kZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBUZXh0SGlnaGxpZ2h0UnVsZXM7XG59O1xuXG4oZnVuY3Rpb24oKSB7XG4gICAgdGhpcy4kZGVmYXVsdEJlaGF2aW91ciA9IG5ldyBDc3R5bGVCZWhhdmlvdXIoKTtcblxuICAgIHRoaXMudG9rZW5SZSA9IG5ldyBSZWdFeHAoXCJeW1wiXG4gICAgICAgICsgdW5pY29kZS5wYWNrYWdlcy5MXG4gICAgICAgICsgdW5pY29kZS5wYWNrYWdlcy5NbiArIHVuaWNvZGUucGFja2FnZXMuTWNcbiAgICAgICAgKyB1bmljb2RlLnBhY2thZ2VzLk5kXG4gICAgICAgICsgdW5pY29kZS5wYWNrYWdlcy5QYyArIFwiXFxcXCRfXStcIiwgXCJnXCJcbiAgICApO1xuXG4gICAgdGhpcy5ub25Ub2tlblJlID0gbmV3IFJlZ0V4cChcIl4oPzpbXlwiXG4gICAgICAgICsgdW5pY29kZS5wYWNrYWdlcy5MXG4gICAgICAgICsgdW5pY29kZS5wYWNrYWdlcy5NbiArIHVuaWNvZGUucGFja2FnZXMuTWNcbiAgICAgICAgKyB1bmljb2RlLnBhY2thZ2VzLk5kXG4gICAgICAgICsgdW5pY29kZS5wYWNrYWdlcy5QYyArIFwiXFxcXCRfXXxcXFxcc10pK1wiLCBcImdcIlxuICAgICk7XG5cbiAgICB0aGlzLmdldFRva2VuaXplciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIXRoaXMuJHRva2VuaXplcikge1xuICAgICAgICAgICAgdGhpcy4kaGlnaGxpZ2h0UnVsZXMgPSB0aGlzLiRoaWdobGlnaHRSdWxlcyB8fCBuZXcgdGhpcy5IaWdobGlnaHRSdWxlcyh0aGlzLiRoaWdobGlnaHRSdWxlQ29uZmlnKTtcbiAgICAgICAgICAgIHRoaXMuJHRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIodGhpcy4kaGlnaGxpZ2h0UnVsZXMuZ2V0UnVsZXMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuJHRva2VuaXplcjtcbiAgICB9O1xuXG4gICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gXCJcIjtcbiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IFwiXCI7XG5cbiAgICB0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBzdGFydFJvdywgZW5kUm93KSB7XG4gICAgICAgIHZhciBkb2MgPSBzZXNzaW9uLmRvYztcblxuICAgICAgICB2YXIgaWdub3JlQmxhbmtMaW5lcyA9IHRydWU7XG4gICAgICAgIHZhciBzaG91bGRSZW1vdmUgPSB0cnVlO1xuICAgICAgICB2YXIgbWluSW5kZW50ID0gSW5maW5pdHk7XG4gICAgICAgIHZhciB0YWJTaXplID0gc2Vzc2lvbi5nZXRUYWJTaXplKCk7XG4gICAgICAgIHZhciBpbnNlcnRBdFRhYlN0b3AgPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXRoaXMubGluZUNvbW1lbnRTdGFydCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmJsb2NrQ29tbWVudClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB2YXIgbGluZUNvbW1lbnRTdGFydCA9IHRoaXMuYmxvY2tDb21tZW50LnN0YXJ0O1xuICAgICAgICAgICAgdmFyIGxpbmVDb21tZW50RW5kID0gdGhpcy5ibG9ja0NvbW1lbnQuZW5kO1xuICAgICAgICAgICAgdmFyIHJlZ2V4cFN0YXJ0ID0gbmV3IFJlZ0V4cChcIl4oXFxcXHMqKSg/OlwiICsgbGFuZy5lc2NhcGVSZWdFeHAobGluZUNvbW1lbnRTdGFydCkgKyBcIilcIik7XG4gICAgICAgICAgICB2YXIgcmVnZXhwRW5kID0gbmV3IFJlZ0V4cChcIig/OlwiICsgbGFuZy5lc2NhcGVSZWdFeHAobGluZUNvbW1lbnRFbmQpICsgXCIpXFxcXHMqJFwiKTtcblxuICAgICAgICAgICAgdmFyIGNvbW1lbnQgPSBmdW5jdGlvbihsaW5lLCBpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRlc3RSZW1vdmUobGluZSwgaSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBpZiAoIWlnbm9yZUJsYW5rTGluZXMgfHwgL1xcUy8udGVzdChsaW5lKSkge1xuICAgICAgICAgICAgICAgICAgICBkb2MuaW5zZXJ0SW5MaW5lKHtyb3c6IGksIGNvbHVtbjogbGluZS5sZW5ndGh9LCBsaW5lQ29tbWVudEVuZCk7XG4gICAgICAgICAgICAgICAgICAgIGRvYy5pbnNlcnRJbkxpbmUoe3JvdzogaSwgY29sdW1uOiBtaW5JbmRlbnR9LCBsaW5lQ29tbWVudFN0YXJ0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB2YXIgdW5jb21tZW50ID0gZnVuY3Rpb24obGluZSwgaSkge1xuICAgICAgICAgICAgICAgIHZhciBtO1xuICAgICAgICAgICAgICAgIGlmIChtID0gbGluZS5tYXRjaChyZWdleHBFbmQpKVxuICAgICAgICAgICAgICAgICAgICBkb2MucmVtb3ZlSW5MaW5lKGksIGxpbmUubGVuZ3RoIC0gbVswXS5sZW5ndGgsIGxpbmUubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBpZiAobSA9IGxpbmUubWF0Y2gocmVnZXhwU3RhcnQpKVxuICAgICAgICAgICAgICAgICAgICBkb2MucmVtb3ZlSW5MaW5lKGksIG1bMV0ubGVuZ3RoLCBtWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB2YXIgdGVzdFJlbW92ZSA9IGZ1bmN0aW9uKGxpbmUsIHJvdykge1xuICAgICAgICAgICAgICAgIGlmIChyZWdleHBTdGFydC50ZXN0KGxpbmUpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMocm93KTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zW2ldLnR5cGUgPT09IFwiY29tbWVudFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMubGluZUNvbW1lbnRTdGFydCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVnZXhwU3RhcnQgPSB0aGlzLmxpbmVDb21tZW50U3RhcnQubWFwKGxhbmcuZXNjYXBlUmVnRXhwKS5qb2luKFwifFwiKTtcbiAgICAgICAgICAgICAgICB2YXIgbGluZUNvbW1lbnRTdGFydCA9IHRoaXMubGluZUNvbW1lbnRTdGFydFswXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlZ2V4cFN0YXJ0ID0gbGFuZy5lc2NhcGVSZWdFeHAodGhpcy5saW5lQ29tbWVudFN0YXJ0KTtcbiAgICAgICAgICAgICAgICB2YXIgbGluZUNvbW1lbnRTdGFydCA9IHRoaXMubGluZUNvbW1lbnRTdGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZ2V4cFN0YXJ0ID0gbmV3IFJlZ0V4cChcIl4oXFxcXHMqKSg/OlwiICsgcmVnZXhwU3RhcnQgKyBcIikgP1wiKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaW5zZXJ0QXRUYWJTdG9wID0gc2Vzc2lvbi5nZXRVc2VTb2Z0VGFicygpO1xuXG4gICAgICAgICAgICB2YXIgdW5jb21tZW50ID0gZnVuY3Rpb24obGluZSwgaSkge1xuICAgICAgICAgICAgICAgIHZhciBtID0gbGluZS5tYXRjaChyZWdleHBTdGFydCk7XG4gICAgICAgICAgICAgICAgaWYgKCFtKSByZXR1cm47XG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gbVsxXS5sZW5ndGgsIGVuZCA9IG1bMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmICghc2hvdWxkSW5zZXJ0U3BhY2UobGluZSwgc3RhcnQsIGVuZCkgJiYgbVswXVtlbmQgLSAxXSA9PSBcIiBcIilcbiAgICAgICAgICAgICAgICAgICAgZW5kLS07XG4gICAgICAgICAgICAgICAgZG9jLnJlbW92ZUluTGluZShpLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgY29tbWVudFdpdGhTcGFjZSA9IGxpbmVDb21tZW50U3RhcnQgKyBcIiBcIjtcbiAgICAgICAgICAgIHZhciBjb21tZW50ID0gZnVuY3Rpb24obGluZSwgaSkge1xuICAgICAgICAgICAgICAgIGlmICghaWdub3JlQmxhbmtMaW5lcyB8fCAvXFxTLy50ZXN0KGxpbmUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRJbnNlcnRTcGFjZShsaW5lLCBtaW5JbmRlbnQsIG1pbkluZGVudCkpXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2MuaW5zZXJ0SW5MaW5lKHtyb3c6IGksIGNvbHVtbjogbWluSW5kZW50fSwgY29tbWVudFdpdGhTcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvYy5pbnNlcnRJbkxpbmUoe3JvdzogaSwgY29sdW1uOiBtaW5JbmRlbnR9LCBsaW5lQ29tbWVudFN0YXJ0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHRlc3RSZW1vdmUgPSBmdW5jdGlvbihsaW5lLCBpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZ2V4cFN0YXJ0LnRlc3QobGluZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgc2hvdWxkSW5zZXJ0U3BhY2UgPSBmdW5jdGlvbihsaW5lLCBiZWZvcmUsIGFmdGVyKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNwYWNlcyA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGJlZm9yZS0tICYmIGxpbmUuY2hhckF0KGJlZm9yZSkgPT0gXCIgXCIpXG4gICAgICAgICAgICAgICAgICAgIHNwYWNlcysrO1xuICAgICAgICAgICAgICAgIGlmIChzcGFjZXMgJSB0YWJTaXplICE9IDApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgc3BhY2VzID0gMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAobGluZS5jaGFyQXQoYWZ0ZXIrKykgPT0gXCIgXCIpXG4gICAgICAgICAgICAgICAgICAgIHNwYWNlcysrO1xuICAgICAgICAgICAgICAgIGlmICh0YWJTaXplID4gMilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNwYWNlcyAlIHRhYlNpemUgIT0gdGFiU2l6ZSAtIDE7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3BhY2VzICUgdGFiU2l6ZSA9PSAwO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGl0ZXIoZnVuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRSb3c7IGkgPD0gZW5kUm93OyBpKyspXG4gICAgICAgICAgICAgICAgZnVuKGRvYy5nZXRMaW5lKGkpLCBpKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgdmFyIG1pbkVtcHR5TGVuZ3RoID0gSW5maW5pdHk7XG4gICAgICAgIGl0ZXIoZnVuY3Rpb24obGluZSwgaSkge1xuICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cXFMvKTtcbiAgICAgICAgICAgIGlmIChpbmRlbnQgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGVudCA8IG1pbkluZGVudClcbiAgICAgICAgICAgICAgICAgICAgbWluSW5kZW50ID0gaW5kZW50O1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRSZW1vdmUgJiYgIXRlc3RSZW1vdmUobGluZSwgaSkpXG4gICAgICAgICAgICAgICAgICAgIHNob3VsZFJlbW92ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtaW5FbXB0eUxlbmd0aCA+IGxpbmUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbWluRW1wdHlMZW5ndGggPSBsaW5lLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG1pbkluZGVudCA9PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgbWluSW5kZW50ID0gbWluRW1wdHlMZW5ndGg7XG4gICAgICAgICAgICBpZ25vcmVCbGFua0xpbmVzID0gZmFsc2U7XG4gICAgICAgICAgICBzaG91bGRSZW1vdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnNlcnRBdFRhYlN0b3AgJiYgbWluSW5kZW50ICUgdGFiU2l6ZSAhPSAwKVxuICAgICAgICAgICAgbWluSW5kZW50ID0gTWF0aC5mbG9vcihtaW5JbmRlbnQgLyB0YWJTaXplKSAqIHRhYlNpemU7XG5cbiAgICAgICAgaXRlcihzaG91bGRSZW1vdmUgPyB1bmNvbW1lbnQgOiBjb21tZW50KTtcbiAgICB9O1xuXG4gICAgdGhpcy50b2dnbGVCbG9ja0NvbW1lbnQgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcmFuZ2UsIGN1cnNvcikge1xuICAgICAgICB2YXIgY29tbWVudCA9IHRoaXMuYmxvY2tDb21tZW50O1xuICAgICAgICBpZiAoIWNvbW1lbnQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICghY29tbWVudC5zdGFydCAmJiBjb21tZW50WzBdKVxuICAgICAgICAgICAgY29tbWVudCA9IGNvbW1lbnRbMF07XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7XG4gICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpO1xuXG4gICAgICAgIHZhciBzZWwgPSBzZXNzaW9uLnNlbGVjdGlvbjtcbiAgICAgICAgdmFyIGluaXRpYWxSYW5nZSA9IHNlc3Npb24uc2VsZWN0aW9uLnRvT3JpZW50ZWRSYW5nZSgpO1xuICAgICAgICB2YXIgc3RhcnRSb3csIGNvbERpZmY7XG5cbiAgICAgICAgaWYgKHRva2VuICYmIC9jb21tZW50Ly50ZXN0KHRva2VuLnR5cGUpKSB7XG4gICAgICAgICAgICB2YXIgc3RhcnRSYW5nZSwgZW5kUmFuZ2U7XG4gICAgICAgICAgICB3aGlsZSAodG9rZW4gJiYgL2NvbW1lbnQvLnRlc3QodG9rZW4udHlwZSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgaSA9IHRva2VuLnZhbHVlLmluZGV4T2YoY29tbWVudC5zdGFydCk7XG4gICAgICAgICAgICAgICAgaWYgKGkgIT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyBpO1xuICAgICAgICAgICAgICAgICAgICBzdGFydFJhbmdlID0gbmV3IFJhbmdlKHJvdywgY29sdW1uLCByb3csIGNvbHVtbiArIGNvbW1lbnQuc3RhcnQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pO1xuICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7XG4gICAgICAgICAgICB3aGlsZSAodG9rZW4gJiYgL2NvbW1lbnQvLnRlc3QodG9rZW4udHlwZSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgaSA9IHRva2VuLnZhbHVlLmluZGV4T2YoY29tbWVudC5lbmQpO1xuICAgICAgICAgICAgICAgIGlmIChpICE9IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpICsgaTtcbiAgICAgICAgICAgICAgICAgICAgZW5kUmFuZ2UgPSBuZXcgUmFuZ2Uocm93LCBjb2x1bW4sIHJvdywgY29sdW1uICsgY29tbWVudC5lbmQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbmRSYW5nZSlcbiAgICAgICAgICAgICAgICBzZXNzaW9uLnJlbW92ZShlbmRSYW5nZSk7XG4gICAgICAgICAgICBpZiAoc3RhcnRSYW5nZSkge1xuICAgICAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlKHN0YXJ0UmFuZ2UpO1xuICAgICAgICAgICAgICAgIHN0YXJ0Um93ID0gc3RhcnRSYW5nZS5zdGFydC5yb3c7XG4gICAgICAgICAgICAgICAgY29sRGlmZiA9IC1jb21tZW50LnN0YXJ0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbERpZmYgPSBjb21tZW50LnN0YXJ0Lmxlbmd0aDtcbiAgICAgICAgICAgIHN0YXJ0Um93ID0gcmFuZ2Uuc3RhcnQucm93O1xuICAgICAgICAgICAgc2Vzc2lvbi5pbnNlcnQocmFuZ2UuZW5kLCBjb21tZW50LmVuZCk7XG4gICAgICAgICAgICBzZXNzaW9uLmluc2VydChyYW5nZS5zdGFydCwgY29tbWVudC5zdGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluaXRpYWxSYW5nZS5zdGFydC5yb3cgPT0gc3RhcnRSb3cpXG4gICAgICAgICAgICBpbml0aWFsUmFuZ2Uuc3RhcnQuY29sdW1uICs9IGNvbERpZmY7XG4gICAgICAgIGlmIChpbml0aWFsUmFuZ2UuZW5kLnJvdyA9PSBzdGFydFJvdylcbiAgICAgICAgICAgIGluaXRpYWxSYW5nZS5lbmQuY29sdW1uICs9IGNvbERpZmY7XG4gICAgICAgIHNlc3Npb24uc2VsZWN0aW9uLmZyb21PcmllbnRlZFJhbmdlKGluaXRpYWxSYW5nZSk7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRnZXRJbmRlbnQobGluZSk7XG4gICAgfTtcblxuICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykge1xuICAgIH07XG5cbiAgICB0aGlzLiRnZXRJbmRlbnQgPSBmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXFxzKi8pWzBdO1xuICAgIH07XG5cbiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIHRoaXMuY3JlYXRlTW9kZURlbGVnYXRlcyA9IGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICAgIHRoaXMuJGVtYmVkcyA9IFtdO1xuICAgICAgICB0aGlzLiRtb2RlcyA9IHt9O1xuICAgICAgICBmb3IgKHZhciBpIGluIG1hcHBpbmcpIHtcbiAgICAgICAgICAgIGlmIChtYXBwaW5nW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZW1iZWRzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgdGhpcy4kbW9kZXNbaV0gPSBuZXcgbWFwcGluZ1tpXSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRlbGVnYXRpb25zID0gW1widG9nZ2xlQmxvY2tDb21tZW50XCIsIFwidG9nZ2xlQ29tbWVudExpbmVzXCIsIFwiZ2V0TmV4dExpbmVJbmRlbnRcIiwgXG4gICAgICAgICAgICBcImNoZWNrT3V0ZGVudFwiLCBcImF1dG9PdXRkZW50XCIsIFwidHJhbnNmb3JtQWN0aW9uXCIsIFwiZ2V0Q29tcGxldGlvbnNcIl07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxlZ2F0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgKGZ1bmN0aW9uKHNjb3BlKSB7XG4gICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBkZWxlZ2F0aW9uc1tpXTtcbiAgICAgICAgICAgICAgdmFyIGRlZmF1bHRIYW5kbGVyID0gc2NvcGVbZnVuY3Rpb25OYW1lXTtcbiAgICAgICAgICAgICAgc2NvcGVbZGVsZWdhdGlvbnNbaV1dID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kZGVsZWdhdG9yKGZ1bmN0aW9uTmFtZSwgYXJndW1lbnRzLCBkZWZhdWx0SGFuZGxlcik7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLiRkZWxlZ2F0b3IgPSBmdW5jdGlvbihtZXRob2QsIGFyZ3MsIGRlZmF1bHRIYW5kbGVyKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGFyZ3NbMF07XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgIT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHN0YXRlID0gc3RhdGVbMF07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy4kZW1iZWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuJG1vZGVzW3RoaXMuJGVtYmVkc1tpXV0pIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICB2YXIgc3BsaXQgPSBzdGF0ZS5zcGxpdCh0aGlzLiRlbWJlZHNbaV0pO1xuICAgICAgICAgICAgaWYgKCFzcGxpdFswXSAmJiBzcGxpdFsxXSkge1xuICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSBzcGxpdFsxXTtcbiAgICAgICAgICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJG1vZGVzW3RoaXMuJGVtYmVkc1tpXV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZGVbbWV0aG9kXS5hcHBseShtb2RlLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgcmV0ID0gZGVmYXVsdEhhbmRsZXIuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiBkZWZhdWx0SGFuZGxlciA/IHJldCA6IHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgdGhpcy50cmFuc2Zvcm1BY3Rpb24gPSBmdW5jdGlvbihzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHBhcmFtKSB7XG4gICAgICAgIGlmICh0aGlzLiRiZWhhdmlvdXIpIHtcbiAgICAgICAgICAgIHZhciBiZWhhdmlvdXJzID0gdGhpcy4kYmVoYXZpb3VyLmdldEJlaGF2aW91cnMoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBiZWhhdmlvdXJzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGJlaGF2aW91cnNba2V5XVthY3Rpb25dKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBiZWhhdmlvdXJzW2tleV1bYWN0aW9uXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmdldEtleXdvcmRzID0gZnVuY3Rpb24oYXBwZW5kKSB7XG4gICAgICAgIGlmICghdGhpcy5jb21wbGV0aW9uS2V5d29yZHMpIHtcbiAgICAgICAgICAgIHZhciBydWxlcyA9IHRoaXMuJHRva2VuaXplci5ydWxlcztcbiAgICAgICAgICAgIHZhciBjb21wbGV0aW9uS2V5d29yZHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIHJ1bGUgaW4gcnVsZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcnVsZUl0ciA9IHJ1bGVzW3J1bGVdO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwLCBsID0gcnVsZUl0ci5sZW5ndGg7IHIgPCBsOyByKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBydWxlSXRyW3JdLnRva2VuID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoL2tleXdvcmR8c3VwcG9ydHxzdG9yYWdlLy50ZXN0KHJ1bGVJdHJbcl0udG9rZW4pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25LZXl3b3Jkcy5wdXNoKHJ1bGVJdHJbcl0ucmVnZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBydWxlSXRyW3JdLnRva2VuID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBhID0gMCwgYUxlbmd0aCA9IHJ1bGVJdHJbcl0udG9rZW4ubGVuZ3RoOyBhIDwgYUxlbmd0aDsgYSsrKSB7ICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgva2V5d29yZHxzdXBwb3J0fHN0b3JhZ2UvLnRlc3QocnVsZUl0cltyXS50b2tlblthXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bGUgPSBydWxlSXRyW3JdLnJlZ2V4Lm1hdGNoKC9cXCguKz9cXCkvZylbYV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25LZXl3b3Jkcy5wdXNoKHJ1bGUuc3Vic3RyKDEsIHJ1bGUubGVuZ3RoIC0gMikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29tcGxldGlvbktleXdvcmRzID0gY29tcGxldGlvbktleXdvcmRzO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYXBwZW5kKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGtleXdvcmRMaXN0O1xuICAgICAgICByZXR1cm4gY29tcGxldGlvbktleXdvcmRzLmNvbmNhdCh0aGlzLiRrZXl3b3JkTGlzdCB8fCBbXSk7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLiRjcmVhdGVLZXl3b3JkTGlzdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIXRoaXMuJGhpZ2hsaWdodFJ1bGVzKVxuICAgICAgICAgICAgdGhpcy5nZXRUb2tlbml6ZXIoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGtleXdvcmRMaXN0ID0gdGhpcy4kaGlnaGxpZ2h0UnVsZXMuJGtleXdvcmRMaXN0IHx8IFtdO1xuICAgIH07XG5cbiAgICB0aGlzLmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7XG4gICAgICAgIHZhciBrZXl3b3JkcyA9IHRoaXMuJGtleXdvcmRMaXN0IHx8IHRoaXMuJGNyZWF0ZUtleXdvcmRMaXN0KCk7XG4gICAgICAgIHJldHVybiBrZXl3b3Jkcy5tYXAoZnVuY3Rpb24od29yZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lOiB3b3JkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB3b3JkLFxuICAgICAgICAgICAgICAgIHNjb3JlOiAwLFxuICAgICAgICAgICAgICAgIG1ldGE6IFwia2V5d29yZFwiXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy4kaWQgPSBcImFjZS9tb2RlL3RleHRcIjtcbn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpO1xuXG5leHBvcnRzLk1vZGUgPSBNb2RlO1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvYXBwbHlfZGVsdGFcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsIGVycm9yVGV4dCl7XG4gICAgY29uc29sZS5sb2coXCJJbnZhbGlkIERlbHRhOlwiLCBkZWx0YSk7XG4gICAgdGhyb3cgXCJJbnZhbGlkIERlbHRhOiBcIiArIGVycm9yVGV4dDtcbn1cblxuZnVuY3Rpb24gcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBwb3NpdGlvbikge1xuICAgIHJldHVybiBwb3NpdGlvbi5yb3cgICAgPj0gMCAmJiBwb3NpdGlvbi5yb3cgICAgPCAgZG9jTGluZXMubGVuZ3RoICYmXG4gICAgICAgICAgIHBvc2l0aW9uLmNvbHVtbiA+PSAwICYmIHBvc2l0aW9uLmNvbHVtbiA8PSBkb2NMaW5lc1twb3NpdGlvbi5yb3ddLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEZWx0YShkb2NMaW5lcywgZGVsdGEpIHtcbiAgICBpZiAoZGVsdGEuYWN0aW9uICE9IFwiaW5zZXJ0XCIgJiYgZGVsdGEuYWN0aW9uICE9IFwicmVtb3ZlXCIpXG4gICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgXCJkZWx0YS5hY3Rpb24gbXVzdCBiZSAnaW5zZXJ0JyBvciAncmVtb3ZlJ1wiKTtcbiAgICBpZiAoIShkZWx0YS5saW5lcyBpbnN0YW5jZW9mIEFycmF5KSlcbiAgICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCBcImRlbHRhLmxpbmVzIG11c3QgYmUgYW4gQXJyYXlcIik7XG4gICAgaWYgKCFkZWx0YS5zdGFydCB8fCAhZGVsdGEuZW5kKVxuICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgXCJkZWx0YS5zdGFydC9lbmQgbXVzdCBiZSBhbiBwcmVzZW50XCIpO1xuICAgIHZhciBzdGFydCA9IGRlbHRhLnN0YXJ0O1xuICAgIGlmICghcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBkZWx0YS5zdGFydCkpXG4gICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgXCJkZWx0YS5zdGFydCBtdXN0IGJlIGNvbnRhaW5lZCBpbiBkb2N1bWVudFwiKTtcbiAgICB2YXIgZW5kID0gZGVsdGEuZW5kO1xuICAgIGlmIChkZWx0YS5hY3Rpb24gPT0gXCJyZW1vdmVcIiAmJiAhcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBlbmQpKVxuICAgICAgICB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsIFwiZGVsdGEuZW5kIG11c3QgY29udGFpbmVkIGluIGRvY3VtZW50IGZvciAncmVtb3ZlJyBhY3Rpb25zXCIpO1xuICAgIHZhciBudW1SYW5nZVJvd3MgPSBlbmQucm93IC0gc3RhcnQucm93O1xuICAgIHZhciBudW1SYW5nZUxhc3RMaW5lQ2hhcnMgPSAoZW5kLmNvbHVtbiAtIChudW1SYW5nZVJvd3MgPT0gMCA/IHN0YXJ0LmNvbHVtbiA6IDApKTtcbiAgICBpZiAobnVtUmFuZ2VSb3dzICE9IGRlbHRhLmxpbmVzLmxlbmd0aCAtIDEgfHwgZGVsdGEubGluZXNbbnVtUmFuZ2VSb3dzXS5sZW5ndGggIT0gbnVtUmFuZ2VMYXN0TGluZUNoYXJzKVxuICAgICAgICB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsIFwiZGVsdGEucmFuZ2UgbXVzdCBtYXRjaCBkZWx0YSBsaW5lc1wiKTtcbn1cblxuZXhwb3J0cy5hcHBseURlbHRhID0gZnVuY3Rpb24oZG9jTGluZXMsIGRlbHRhLCBkb05vdFZhbGlkYXRlKSB7XG4gICAgXG4gICAgdmFyIHJvdyA9IGRlbHRhLnN0YXJ0LnJvdztcbiAgICB2YXIgc3RhcnRDb2x1bW4gPSBkZWx0YS5zdGFydC5jb2x1bW47XG4gICAgdmFyIGxpbmUgPSBkb2NMaW5lc1tyb3ddIHx8IFwiXCI7XG4gICAgc3dpdGNoIChkZWx0YS5hY3Rpb24pIHtcbiAgICAgICAgY2FzZSBcImluc2VydFwiOlxuICAgICAgICAgICAgdmFyIGxpbmVzID0gZGVsdGEubGluZXM7XG4gICAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZG9jTGluZXNbcm93XSA9IGxpbmUuc3Vic3RyaW5nKDAsIHN0YXJ0Q29sdW1uKSArIGRlbHRhLmxpbmVzWzBdICsgbGluZS5zdWJzdHJpbmcoc3RhcnRDb2x1bW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtyb3csIDFdLmNvbmNhdChkZWx0YS5saW5lcyk7XG4gICAgICAgICAgICAgICAgZG9jTGluZXMuc3BsaWNlLmFwcGx5KGRvY0xpbmVzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3ddID0gbGluZS5zdWJzdHJpbmcoMCwgc3RhcnRDb2x1bW4pICsgZG9jTGluZXNbcm93XTtcbiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3cgKyBkZWx0YS5saW5lcy5sZW5ndGggLSAxXSArPSBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJlbW92ZVwiOlxuICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IGRlbHRhLmVuZC5jb2x1bW47XG4gICAgICAgICAgICB2YXIgZW5kUm93ID0gZGVsdGEuZW5kLnJvdztcbiAgICAgICAgICAgIGlmIChyb3cgPT09IGVuZFJvdykge1xuICAgICAgICAgICAgICAgIGRvY0xpbmVzW3Jvd10gPSBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBsaW5lLnN1YnN0cmluZyhlbmRDb2x1bW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb2NMaW5lcy5zcGxpY2UoXG4gICAgICAgICAgICAgICAgICAgIHJvdywgZW5kUm93IC0gcm93ICsgMSxcbiAgICAgICAgICAgICAgICAgICAgbGluZS5zdWJzdHJpbmcoMCwgc3RhcnRDb2x1bW4pICsgZG9jTGluZXNbZW5kUm93XS5zdWJzdHJpbmcoZW5kQ29sdW1uKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvYW5jaG9yXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL29vcFwiLFwiYWNlL2xpYi9ldmVudF9lbWl0dGVyXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIG9vcCA9IGFjZXF1aXJlKFwiLi9saWIvb29wXCIpO1xudmFyIEV2ZW50RW1pdHRlciA9IGFjZXF1aXJlKFwiLi9saWIvZXZlbnRfZW1pdHRlclwiKS5FdmVudEVtaXR0ZXI7XG5cbnZhciBBbmNob3IgPSBleHBvcnRzLkFuY2hvciA9IGZ1bmN0aW9uKGRvYywgcm93LCBjb2x1bW4pIHtcbiAgICB0aGlzLiRvbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB0aGlzLmF0dGFjaChkb2MpO1xuICAgIFxuICAgIGlmICh0eXBlb2YgY29sdW1uID09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24ocm93LnJvdywgcm93LmNvbHVtbik7XG4gICAgZWxzZVxuICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHJvdywgY29sdW1uKTtcbn07XG5cbihmdW5jdGlvbigpIHtcblxuICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTtcbiAgICB0aGlzLmdldFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50KHRoaXMucm93LCB0aGlzLmNvbHVtbik7XG4gICAgfTtcbiAgICB0aGlzLmdldERvY3VtZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50O1xuICAgIH07XG4gICAgdGhpcy4kaW5zZXJ0UmlnaHQgPSBmYWxzZTtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZnVuY3Rpb24oZGVsdGEpIHtcbiAgICAgICAgaWYgKGRlbHRhLnN0YXJ0LnJvdyA9PSBkZWx0YS5lbmQucm93ICYmIGRlbHRhLnN0YXJ0LnJvdyAhPSB0aGlzLnJvdylcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpZiAoZGVsdGEuc3RhcnQucm93ID4gdGhpcy5yb3cpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBcbiAgICAgICAgdmFyIHBvaW50ID0gJGdldFRyYW5zZm9ybWVkUG9pbnQoZGVsdGEsIHtyb3c6IHRoaXMucm93LCBjb2x1bW46IHRoaXMuY29sdW1ufSwgdGhpcy4kaW5zZXJ0UmlnaHQpO1xuICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHBvaW50LnJvdywgcG9pbnQuY29sdW1uLCB0cnVlKTtcbiAgICB9O1xuICAgIFxuICAgIGZ1bmN0aW9uICRwb2ludHNJbk9yZGVyKHBvaW50MSwgcG9pbnQyLCBlcXVhbFBvaW50c0luT3JkZXIpIHtcbiAgICAgICAgdmFyIGJDb2xJc0FmdGVyID0gZXF1YWxQb2ludHNJbk9yZGVyID8gcG9pbnQxLmNvbHVtbiA8PSBwb2ludDIuY29sdW1uIDogcG9pbnQxLmNvbHVtbiA8IHBvaW50Mi5jb2x1bW47XG4gICAgICAgIHJldHVybiAocG9pbnQxLnJvdyA8IHBvaW50Mi5yb3cpIHx8IChwb2ludDEucm93ID09IHBvaW50Mi5yb3cgJiYgYkNvbElzQWZ0ZXIpO1xuICAgIH1cbiAgICAgICAgICAgIFxuICAgIGZ1bmN0aW9uICRnZXRUcmFuc2Zvcm1lZFBvaW50KGRlbHRhLCBwb2ludCwgbW92ZUlmRXF1YWwpIHtcbiAgICAgICAgdmFyIGRlbHRhSXNJbnNlcnQgPSBkZWx0YS5hY3Rpb24gPT0gXCJpbnNlcnRcIjtcbiAgICAgICAgdmFyIGRlbHRhUm93U2hpZnQgPSAoZGVsdGFJc0luc2VydCA/IDEgOiAtMSkgKiAoZGVsdGEuZW5kLnJvdyAgICAtIGRlbHRhLnN0YXJ0LnJvdyk7XG4gICAgICAgIHZhciBkZWx0YUNvbFNoaWZ0ID0gKGRlbHRhSXNJbnNlcnQgPyAxIDogLTEpICogKGRlbHRhLmVuZC5jb2x1bW4gLSBkZWx0YS5zdGFydC5jb2x1bW4pO1xuICAgICAgICB2YXIgZGVsdGFTdGFydCA9IGRlbHRhLnN0YXJ0O1xuICAgICAgICB2YXIgZGVsdGFFbmQgPSBkZWx0YUlzSW5zZXJ0ID8gZGVsdGFTdGFydCA6IGRlbHRhLmVuZDsgLy8gQ29sbGFwc2UgaW5zZXJ0IHJhbmdlLlxuICAgICAgICBpZiAoJHBvaW50c0luT3JkZXIocG9pbnQsIGRlbHRhU3RhcnQsIG1vdmVJZkVxdWFsKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByb3c6IHBvaW50LnJvdyxcbiAgICAgICAgICAgICAgICBjb2x1bW46IHBvaW50LmNvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJHBvaW50c0luT3JkZXIoZGVsdGFFbmQsIHBvaW50LCAhbW92ZUlmRXF1YWwpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJvdzogcG9pbnQucm93ICsgZGVsdGFSb3dTaGlmdCxcbiAgICAgICAgICAgICAgICBjb2x1bW46IHBvaW50LmNvbHVtbiArIChwb2ludC5yb3cgPT0gZGVsdGFFbmQucm93ID8gZGVsdGFDb2xTaGlmdCA6IDApXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcm93OiBkZWx0YVN0YXJ0LnJvdyxcbiAgICAgICAgICAgIGNvbHVtbjogZGVsdGFTdGFydC5jb2x1bW5cbiAgICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5zZXRQb3NpdGlvbiA9IGZ1bmN0aW9uKHJvdywgY29sdW1uLCBub0NsaXApIHtcbiAgICAgICAgdmFyIHBvcztcbiAgICAgICAgaWYgKG5vQ2xpcCkge1xuICAgICAgICAgICAgcG9zID0ge1xuICAgICAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChyb3csIGNvbHVtbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yb3cgPT0gcG9zLnJvdyAmJiB0aGlzLmNvbHVtbiA9PSBwb3MuY29sdW1uKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHZhciBvbGQgPSB7XG4gICAgICAgICAgICByb3c6IHRoaXMucm93LFxuICAgICAgICAgICAgY29sdW1uOiB0aGlzLmNvbHVtblxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMucm93ID0gcG9zLnJvdztcbiAgICAgICAgdGhpcy5jb2x1bW4gPSBwb3MuY29sdW1uO1xuICAgICAgICB0aGlzLl9zaWduYWwoXCJjaGFuZ2VcIiwge1xuICAgICAgICAgICAgb2xkOiBvbGQsXG4gICAgICAgICAgICB2YWx1ZTogcG9zXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5kZXRhY2ggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIHRoaXMuJG9uQ2hhbmdlKTtcbiAgICB9O1xuICAgIHRoaXMuYXR0YWNoID0gZnVuY3Rpb24oZG9jKSB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQgPSBkb2MgfHwgdGhpcy5kb2N1bWVudDtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5vbihcImNoYW5nZVwiLCB0aGlzLiRvbkNoYW5nZSk7XG4gICAgfTtcbiAgICB0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgdmFyIHBvcyA9IHt9O1xuXG4gICAgICAgIGlmIChyb3cgPj0gdGhpcy5kb2N1bWVudC5nZXRMZW5ndGgoKSkge1xuICAgICAgICAgICAgcG9zLnJvdyA9IE1hdGgubWF4KDAsIHRoaXMuZG9jdW1lbnQuZ2V0TGVuZ3RoKCkgLSAxKTtcbiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSB0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHJvdyA8IDApIHtcbiAgICAgICAgICAgIHBvcy5yb3cgPSAwO1xuICAgICAgICAgICAgcG9zLmNvbHVtbiA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwb3Mucm93ID0gcm93O1xuICAgICAgICAgICAgcG9zLmNvbHVtbiA9IE1hdGgubWluKHRoaXMuZG9jdW1lbnQuZ2V0TGluZShwb3Mucm93KS5sZW5ndGgsIE1hdGgubWF4KDAsIGNvbHVtbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbHVtbiA8IDApXG4gICAgICAgICAgICBwb3MuY29sdW1uID0gMDtcblxuICAgICAgICByZXR1cm4gcG9zO1xuICAgIH07XG5cbn0pLmNhbGwoQW5jaG9yLnByb3RvdHlwZSk7XG5cbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL2RvY3VtZW50XCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL29vcFwiLFwiYWNlL2FwcGx5X2RlbHRhXCIsXCJhY2UvbGliL2V2ZW50X2VtaXR0ZXJcIixcImFjZS9yYW5nZVwiLFwiYWNlL2FuY2hvclwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBvb3AgPSBhY2VxdWlyZShcIi4vbGliL29vcFwiKTtcbnZhciBhcHBseURlbHRhID0gYWNlcXVpcmUoXCIuL2FwcGx5X2RlbHRhXCIpLmFwcGx5RGVsdGE7XG52YXIgRXZlbnRFbWl0dGVyID0gYWNlcXVpcmUoXCIuL2xpYi9ldmVudF9lbWl0dGVyXCIpLkV2ZW50RW1pdHRlcjtcbnZhciBSYW5nZSA9IGFjZXF1aXJlKFwiLi9yYW5nZVwiKS5SYW5nZTtcbnZhciBBbmNob3IgPSBhY2VxdWlyZShcIi4vYW5jaG9yXCIpLkFuY2hvcjtcblxudmFyIERvY3VtZW50ID0gZnVuY3Rpb24odGV4dE9yTGluZXMpIHtcbiAgICB0aGlzLiRsaW5lcyA9IFtcIlwiXTtcbiAgICBpZiAodGV4dE9yTGluZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuJGxpbmVzID0gW1wiXCJdO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0ZXh0T3JMaW5lcykpIHtcbiAgICAgICAgdGhpcy5pbnNlcnRNZXJnZWRMaW5lcyh7cm93OiAwLCBjb2x1bW46IDB9LCB0ZXh0T3JMaW5lcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pbnNlcnQoe3JvdzogMCwgY29sdW1uOjB9LCB0ZXh0T3JMaW5lcyk7XG4gICAgfVxufTtcblxuKGZ1bmN0aW9uKCkge1xuXG4gICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpO1xuICAgIHRoaXMuc2V0VmFsdWUgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICAgIHZhciBsZW4gPSB0aGlzLmdldExlbmd0aCgpIC0gMTtcbiAgICAgICAgdGhpcy5yZW1vdmUobmV3IFJhbmdlKDAsIDAsIGxlbiwgdGhpcy5nZXRMaW5lKGxlbikubGVuZ3RoKSk7XG4gICAgICAgIHRoaXMuaW5zZXJ0KHtyb3c6IDAsIGNvbHVtbjogMH0sIHRleHQpO1xuICAgIH07XG4gICAgdGhpcy5nZXRWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBbGxMaW5lcygpLmpvaW4odGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkpO1xuICAgIH07XG4gICAgdGhpcy5jcmVhdGVBbmNob3IgPSBmdW5jdGlvbihyb3csIGNvbHVtbikge1xuICAgICAgICByZXR1cm4gbmV3IEFuY2hvcih0aGlzLCByb3csIGNvbHVtbik7XG4gICAgfTtcbiAgICBpZiAoXCJhYWFcIi5zcGxpdCgvYS8pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLiRzcGxpdCA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoL1xcclxcbnxcXHIvZywgXCJcXG5cIikuc3BsaXQoXCJcXG5cIik7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4kc3BsaXQgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dC5zcGxpdCgvXFxyXFxufFxccnxcXG4vKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIHRoaXMuJGRldGVjdE5ld0xpbmUgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHRleHQubWF0Y2goL14uKj8oXFxyXFxufFxccnxcXG4pL20pO1xuICAgICAgICB0aGlzLiRhdXRvTmV3TGluZSA9IG1hdGNoID8gbWF0Y2hbMV0gOiBcIlxcblwiO1xuICAgICAgICB0aGlzLl9zaWduYWwoXCJjaGFuZ2VOZXdMaW5lTW9kZVwiKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuJG5ld0xpbmVNb2RlKSB7XG4gICAgICAgICAgY2FzZSBcIndpbmRvd3NcIjpcbiAgICAgICAgICAgIHJldHVybiBcIlxcclxcblwiO1xuICAgICAgICAgIGNhc2UgXCJ1bml4XCI6XG4gICAgICAgICAgICByZXR1cm4gXCJcXG5cIjtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGF1dG9OZXdMaW5lIHx8IFwiXFxuXCI7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy4kYXV0b05ld0xpbmUgPSBcIlwiO1xuICAgIHRoaXMuJG5ld0xpbmVNb2RlID0gXCJhdXRvXCI7XG4gICAgdGhpcy5zZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKG5ld0xpbmVNb2RlKSB7XG4gICAgICAgIGlmICh0aGlzLiRuZXdMaW5lTW9kZSA9PT0gbmV3TGluZU1vZGUpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy4kbmV3TGluZU1vZGUgPSBuZXdMaW5lTW9kZTtcbiAgICAgICAgdGhpcy5fc2lnbmFsKFwiY2hhbmdlTmV3TGluZU1vZGVcIik7XG4gICAgfTtcbiAgICB0aGlzLmdldE5ld0xpbmVNb2RlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRuZXdMaW5lTW9kZTtcbiAgICB9O1xuICAgIHRoaXMuaXNOZXdMaW5lID0gZnVuY3Rpb24odGV4dCkge1xuICAgICAgICByZXR1cm4gKHRleHQgPT0gXCJcXHJcXG5cIiB8fCB0ZXh0ID09IFwiXFxyXCIgfHwgdGV4dCA9PSBcIlxcblwiKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0TGluZSA9IGZ1bmN0aW9uKHJvdykge1xuICAgICAgICByZXR1cm4gdGhpcy4kbGluZXNbcm93XSB8fCBcIlwiO1xuICAgIH07XG4gICAgdGhpcy5nZXRMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRsaW5lcy5zbGljZShmaXJzdFJvdywgbGFzdFJvdyArIDEpO1xuICAgIH07XG4gICAgdGhpcy5nZXRBbGxMaW5lcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRMaW5lcygwLCB0aGlzLmdldExlbmd0aCgpKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0TGVuZ3RoID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRsaW5lcy5sZW5ndGg7XG4gICAgfTtcbiAgICB0aGlzLmdldFRleHRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldExpbmVzRm9yUmFuZ2UocmFuZ2UpLmpvaW4odGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkpO1xuICAgIH07XG4gICAgdGhpcy5nZXRMaW5lc0ZvclJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHtcbiAgICAgICAgdmFyIGxpbmVzO1xuICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ID09PSByYW5nZS5lbmQucm93KSB7XG4gICAgICAgICAgICBsaW5lcyA9IFt0aGlzLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uKV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaW5lcyA9IHRoaXMuZ2V0TGluZXMocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5lbmQucm93KTtcbiAgICAgICAgICAgIGxpbmVzWzBdID0gKGxpbmVzWzBdIHx8IFwiXCIpLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4pO1xuICAgICAgICAgICAgdmFyIGwgPSBsaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgaWYgKHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFydC5yb3cgPT0gbClcbiAgICAgICAgICAgICAgICBsaW5lc1tsXSA9IGxpbmVzW2xdLnN1YnN0cmluZygwLCByYW5nZS5lbmQuY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGluZXM7XG4gICAgfTtcbiAgICB0aGlzLmluc2VydExpbmVzID0gZnVuY3Rpb24ocm93LCBsaW5lcykge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJVc2Ugb2YgZG9jdW1lbnQuaW5zZXJ0TGluZXMgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBpbnNlcnRGdWxsTGluZXMgbWV0aG9kIGluc3RlYWQuXCIpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnRGdWxsTGluZXMocm93LCBsaW5lcyk7XG4gICAgfTtcbiAgICB0aGlzLnJlbW92ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiVXNlIG9mIGRvY3VtZW50LnJlbW92ZUxpbmVzIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgcmVtb3ZlRnVsbExpbmVzIG1ldGhvZCBpbnN0ZWFkLlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlRnVsbExpbmVzKGZpcnN0Um93LCBsYXN0Um93KTtcbiAgICB9O1xuICAgIHRoaXMuaW5zZXJ0TmV3TGluZSA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIlVzZSBvZiBkb2N1bWVudC5pbnNlcnROZXdMaW5lIGlzIGRlcHJlY2F0ZWQuIFVzZSBpbnNlcnRNZXJnZWRMaW5lcyhwb3NpdGlvbiwgWycnLCAnJ10pIGluc3RlYWQuXCIpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnRNZXJnZWRMaW5lcyhwb3NpdGlvbiwgW1wiXCIsIFwiXCJdKTtcbiAgICB9O1xuICAgIHRoaXMuaW5zZXJ0ID0gZnVuY3Rpb24ocG9zaXRpb24sIHRleHQpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0TGVuZ3RoKCkgPD0gMSlcbiAgICAgICAgICAgIHRoaXMuJGRldGVjdE5ld0xpbmUodGV4dCk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnRNZXJnZWRMaW5lcyhwb3NpdGlvbiwgdGhpcy4kc3BsaXQodGV4dCkpO1xuICAgIH07XG4gICAgdGhpcy5pbnNlcnRJbkxpbmUgPSBmdW5jdGlvbihwb3NpdGlvbiwgdGV4dCkge1xuICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmNsaXBwZWRQb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pO1xuICAgICAgICB2YXIgZW5kID0gdGhpcy5wb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4gKyB0ZXh0Lmxlbmd0aCk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmFwcGx5RGVsdGEoe1xuICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBlbmQsXG4gICAgICAgICAgICBhY3Rpb246IFwiaW5zZXJ0XCIsXG4gICAgICAgICAgICBsaW5lczogW3RleHRdXG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmVQb3MoZW5kKTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuY2xpcHBlZFBvcyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7XG4gICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpO1xuICAgICAgICBpZiAocm93ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJvdyA9IGxlbmd0aDtcbiAgICAgICAgfSBlbHNlIGlmIChyb3cgPCAwKSB7XG4gICAgICAgICAgICByb3cgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKHJvdyA+PSBsZW5ndGgpIHtcbiAgICAgICAgICAgIHJvdyA9IGxlbmd0aCAtIDE7XG4gICAgICAgICAgICBjb2x1bW4gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUocm93KTtcbiAgICAgICAgaWYgKGNvbHVtbiA9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBjb2x1bW4gPSBsaW5lLmxlbmd0aDtcbiAgICAgICAgY29sdW1uID0gTWF0aC5taW4oTWF0aC5tYXgoY29sdW1uLCAwKSwgbGluZS5sZW5ndGgpO1xuICAgICAgICByZXR1cm4ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn07XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmNsb25lUG9zID0gZnVuY3Rpb24ocG9zKSB7XG4gICAgICAgIHJldHVybiB7cm93OiBwb3Mucm93LCBjb2x1bW46IHBvcy5jb2x1bW59O1xuICAgIH07XG4gICAgXG4gICAgdGhpcy5wb3MgPSBmdW5jdGlvbihyb3csIGNvbHVtbikge1xuICAgICAgICByZXR1cm4ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn07XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLiRjbGlwUG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbikge1xuICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5nZXRMZW5ndGgoKTtcbiAgICAgICAgaWYgKHBvc2l0aW9uLnJvdyA+PSBsZW5ndGgpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIGxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgcG9zaXRpb24uY29sdW1uID0gdGhpcy5nZXRMaW5lKGxlbmd0aCAtIDEpLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIHBvc2l0aW9uLnJvdyk7XG4gICAgICAgICAgICBwb3NpdGlvbi5jb2x1bW4gPSBNYXRoLm1pbihNYXRoLm1heChwb3NpdGlvbi5jb2x1bW4sIDApLCB0aGlzLmdldExpbmUocG9zaXRpb24ucm93KS5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3NpdGlvbjtcbiAgICB9O1xuICAgIHRoaXMuaW5zZXJ0RnVsbExpbmVzID0gZnVuY3Rpb24ocm93LCBsaW5lcykge1xuICAgICAgICByb3cgPSBNYXRoLm1pbihNYXRoLm1heChyb3csIDApLCB0aGlzLmdldExlbmd0aCgpKTtcbiAgICAgICAgdmFyIGNvbHVtbiA9IDA7XG4gICAgICAgIGlmIChyb3cgPCB0aGlzLmdldExlbmd0aCgpKSB7XG4gICAgICAgICAgICBsaW5lcyA9IGxpbmVzLmNvbmNhdChbXCJcIl0pO1xuICAgICAgICAgICAgY29sdW1uID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpbmVzID0gW1wiXCJdLmNvbmNhdChsaW5lcyk7XG4gICAgICAgICAgICByb3ctLTtcbiAgICAgICAgICAgIGNvbHVtbiA9IHRoaXMuJGxpbmVzW3Jvd10ubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMoe3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn0sIGxpbmVzKTtcbiAgICB9OyAgICBcbiAgICB0aGlzLmluc2VydE1lcmdlZExpbmVzID0gZnVuY3Rpb24ocG9zaXRpb24sIGxpbmVzKSB7XG4gICAgICAgIHZhciBzdGFydCA9IHRoaXMuY2xpcHBlZFBvcyhwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbik7XG4gICAgICAgIHZhciBlbmQgPSB7XG4gICAgICAgICAgICByb3c6IHN0YXJ0LnJvdyArIGxpbmVzLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICBjb2x1bW46IChsaW5lcy5sZW5ndGggPT0gMSA/IHN0YXJ0LmNvbHVtbiA6IDApICsgbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICB0aGlzLmFwcGx5RGVsdGEoe1xuICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBlbmQsXG4gICAgICAgICAgICBhY3Rpb246IFwiaW5zZXJ0XCIsXG4gICAgICAgICAgICBsaW5lczogbGluZXNcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdGhpcy5jbG9uZVBvcyhlbmQpO1xuICAgIH07XG4gICAgdGhpcy5yZW1vdmUgPSBmdW5jdGlvbihyYW5nZSkge1xuICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmNsaXBwZWRQb3MocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5zdGFydC5jb2x1bW4pO1xuICAgICAgICB2YXIgZW5kID0gdGhpcy5jbGlwcGVkUG9zKHJhbmdlLmVuZC5yb3csIHJhbmdlLmVuZC5jb2x1bW4pO1xuICAgICAgICB0aGlzLmFwcGx5RGVsdGEoe1xuICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBlbmQsXG4gICAgICAgICAgICBhY3Rpb246IFwicmVtb3ZlXCIsXG4gICAgICAgICAgICBsaW5lczogdGhpcy5nZXRMaW5lc0ZvclJhbmdlKHtzdGFydDogc3RhcnQsIGVuZDogZW5kfSlcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsb25lUG9zKHN0YXJ0KTtcbiAgICB9O1xuICAgIHRoaXMucmVtb3ZlSW5MaW5lID0gZnVuY3Rpb24ocm93LCBzdGFydENvbHVtbiwgZW5kQ29sdW1uKSB7XG4gICAgICAgIHZhciBzdGFydCA9IHRoaXMuY2xpcHBlZFBvcyhyb3csIHN0YXJ0Q29sdW1uKTtcbiAgICAgICAgdmFyIGVuZCA9IHRoaXMuY2xpcHBlZFBvcyhyb3csIGVuZENvbHVtbik7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmFwcGx5RGVsdGEoe1xuICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBlbmQsXG4gICAgICAgICAgICBhY3Rpb246IFwicmVtb3ZlXCIsXG4gICAgICAgICAgICBsaW5lczogdGhpcy5nZXRMaW5lc0ZvclJhbmdlKHtzdGFydDogc3RhcnQsIGVuZDogZW5kfSlcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdGhpcy5jbG9uZVBvcyhzdGFydCk7XG4gICAgfTtcbiAgICB0aGlzLnJlbW92ZUZ1bGxMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7XG4gICAgICAgIGZpcnN0Um93ID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZmlyc3RSb3cpLCB0aGlzLmdldExlbmd0aCgpIC0gMSk7XG4gICAgICAgIGxhc3RSb3cgID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgbGFzdFJvdyApLCB0aGlzLmdldExlbmd0aCgpIC0gMSk7XG4gICAgICAgIHZhciBkZWxldGVGaXJzdE5ld0xpbmUgPSBsYXN0Um93ID09IHRoaXMuZ2V0TGVuZ3RoKCkgLSAxICYmIGZpcnN0Um93ID4gMDtcbiAgICAgICAgdmFyIGRlbGV0ZUxhc3ROZXdMaW5lICA9IGxhc3RSb3cgIDwgdGhpcy5nZXRMZW5ndGgoKSAtIDE7XG4gICAgICAgIHZhciBzdGFydFJvdyA9ICggZGVsZXRlRmlyc3ROZXdMaW5lID8gZmlyc3RSb3cgLSAxICAgICAgICAgICAgICAgICAgOiBmaXJzdFJvdyAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgdmFyIHN0YXJ0Q29sID0gKCBkZWxldGVGaXJzdE5ld0xpbmUgPyB0aGlzLmdldExpbmUoc3RhcnRSb3cpLmxlbmd0aCA6IDAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICB2YXIgZW5kUm93ICAgPSAoIGRlbGV0ZUxhc3ROZXdMaW5lICA/IGxhc3RSb3cgKyAxICAgICAgICAgICAgICAgICAgIDogbGFzdFJvdyAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgIHZhciBlbmRDb2wgICA9ICggZGVsZXRlTGFzdE5ld0xpbmUgID8gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmdldExpbmUoZW5kUm93KS5sZW5ndGggKTsgXG4gICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2wsIGVuZFJvdywgZW5kQ29sKTtcbiAgICAgICAgdmFyIGRlbGV0ZWRMaW5lcyA9IHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmFwcGx5RGVsdGEoe1xuICAgICAgICAgICAgc3RhcnQ6IHJhbmdlLnN0YXJ0LFxuICAgICAgICAgICAgZW5kOiByYW5nZS5lbmQsXG4gICAgICAgICAgICBhY3Rpb246IFwicmVtb3ZlXCIsXG4gICAgICAgICAgICBsaW5lczogdGhpcy5nZXRMaW5lc0ZvclJhbmdlKHJhbmdlKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRlbGV0ZWRMaW5lcztcbiAgICB9O1xuICAgIHRoaXMucmVtb3ZlTmV3TGluZSA9IGZ1bmN0aW9uKHJvdykge1xuICAgICAgICBpZiAocm93IDwgdGhpcy5nZXRMZW5ndGgoKSAtIDEgJiYgcm93ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMucG9zKHJvdywgdGhpcy5nZXRMaW5lKHJvdykubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICBlbmQ6IHRoaXMucG9zKHJvdyArIDEsIDApLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogXCJyZW1vdmVcIixcbiAgICAgICAgICAgICAgICBsaW5lczogW1wiXCIsIFwiXCJdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5yZXBsYWNlID0gZnVuY3Rpb24ocmFuZ2UsIHRleHQpIHtcbiAgICAgICAgaWYgKCEocmFuZ2UgaW5zdGFuY2VvZiBSYW5nZSkpXG4gICAgICAgICAgICByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4gICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA9PT0gMCAmJiByYW5nZS5pc0VtcHR5KCkpXG4gICAgICAgICAgICByZXR1cm4gcmFuZ2Uuc3RhcnQ7XG4gICAgICAgIGlmICh0ZXh0ID09IHRoaXMuZ2V0VGV4dFJhbmdlKHJhbmdlKSlcbiAgICAgICAgICAgIHJldHVybiByYW5nZS5lbmQ7XG5cbiAgICAgICAgdGhpcy5yZW1vdmUocmFuZ2UpO1xuICAgICAgICB2YXIgZW5kO1xuICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgICAgZW5kID0gdGhpcy5pbnNlcnQocmFuZ2Uuc3RhcnQsIHRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZW5kID0gcmFuZ2Uuc3RhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybiBlbmQ7XG4gICAgfTtcbiAgICB0aGlzLmFwcGx5RGVsdGFzID0gZnVuY3Rpb24oZGVsdGFzKSB7XG4gICAgICAgIGZvciAodmFyIGk9MDsgaTxkZWx0YXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlEZWx0YShkZWx0YXNbaV0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnJldmVydERlbHRhcyA9IGZ1bmN0aW9uKGRlbHRhcykge1xuICAgICAgICBmb3IgKHZhciBpPWRlbHRhcy5sZW5ndGgtMTsgaT49MDsgaS0tKSB7XG4gICAgICAgICAgICB0aGlzLnJldmVydERlbHRhKGRlbHRhc1tpXSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuYXBwbHlEZWx0YSA9IGZ1bmN0aW9uKGRlbHRhLCBkb05vdFZhbGlkYXRlKSB7XG4gICAgICAgIHZhciBpc0luc2VydCA9IGRlbHRhLmFjdGlvbiA9PSBcImluc2VydFwiO1xuICAgICAgICBpZiAoaXNJbnNlcnQgPyBkZWx0YS5saW5lcy5sZW5ndGggPD0gMSAmJiAhZGVsdGEubGluZXNbMF1cbiAgICAgICAgICAgIDogIVJhbmdlLmNvbXBhcmVQb2ludHMoZGVsdGEuc3RhcnQsIGRlbHRhLmVuZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKGlzSW5zZXJ0ICYmIGRlbHRhLmxpbmVzLmxlbmd0aCA+IDIwMDAwKVxuICAgICAgICAgICAgdGhpcy4kc3BsaXRBbmRhcHBseUxhcmdlRGVsdGEoZGVsdGEsIDIwMDAwKTtcbiAgICAgICAgYXBwbHlEZWx0YSh0aGlzLiRsaW5lcywgZGVsdGEsIGRvTm90VmFsaWRhdGUpO1xuICAgICAgICB0aGlzLl9zaWduYWwoXCJjaGFuZ2VcIiwgZGVsdGEpO1xuICAgIH07XG4gICAgXG4gICAgdGhpcy4kc3BsaXRBbmRhcHBseUxhcmdlRGVsdGEgPSBmdW5jdGlvbihkZWx0YSwgTUFYKSB7XG4gICAgICAgIHZhciBsaW5lcyA9IGRlbHRhLmxpbmVzO1xuICAgICAgICB2YXIgbCA9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgdmFyIHJvdyA9IGRlbHRhLnN0YXJ0LnJvdzsgXG4gICAgICAgIHZhciBjb2x1bW4gPSBkZWx0YS5zdGFydC5jb2x1bW47XG4gICAgICAgIHZhciBmcm9tID0gMCwgdG8gPSAwO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBmcm9tID0gdG87XG4gICAgICAgICAgICB0byArPSBNQVggLSAxO1xuICAgICAgICAgICAgdmFyIGNodW5rID0gbGluZXMuc2xpY2UoZnJvbSwgdG8pO1xuICAgICAgICAgICAgaWYgKHRvID4gbCkge1xuICAgICAgICAgICAgICAgIGRlbHRhLmxpbmVzID0gY2h1bms7XG4gICAgICAgICAgICAgICAgZGVsdGEuc3RhcnQucm93ID0gcm93ICsgZnJvbTtcbiAgICAgICAgICAgICAgICBkZWx0YS5zdGFydC5jb2x1bW4gPSBjb2x1bW47XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaHVuay5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgdGhpcy5hcHBseURlbHRhKHtcbiAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5wb3Mocm93ICsgZnJvbSwgY29sdW1uKSxcbiAgICAgICAgICAgICAgICBlbmQ6IHRoaXMucG9zKHJvdyArIHRvLCBjb2x1bW4gPSAwKSxcbiAgICAgICAgICAgICAgICBhY3Rpb246IGRlbHRhLmFjdGlvbixcbiAgICAgICAgICAgICAgICBsaW5lczogY2h1bmtcbiAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICB9IHdoaWxlKHRydWUpO1xuICAgIH07XG4gICAgdGhpcy5yZXZlcnREZWx0YSA9IGZ1bmN0aW9uKGRlbHRhKSB7XG4gICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7XG4gICAgICAgICAgICBzdGFydDogdGhpcy5jbG9uZVBvcyhkZWx0YS5zdGFydCksXG4gICAgICAgICAgICBlbmQ6IHRoaXMuY2xvbmVQb3MoZGVsdGEuZW5kKSxcbiAgICAgICAgICAgIGFjdGlvbjogKGRlbHRhLmFjdGlvbiA9PSBcImluc2VydFwiID8gXCJyZW1vdmVcIiA6IFwiaW5zZXJ0XCIpLFxuICAgICAgICAgICAgbGluZXM6IGRlbHRhLmxpbmVzLnNsaWNlKClcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLmluZGV4VG9Qb3NpdGlvbiA9IGZ1bmN0aW9uKGluZGV4LCBzdGFydFJvdykge1xuICAgICAgICB2YXIgbGluZXMgPSB0aGlzLiRsaW5lcyB8fCB0aGlzLmdldEFsbExpbmVzKCk7XG4gICAgICAgIHZhciBuZXdsaW5lTGVuZ3RoID0gdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRSb3cgfHwgMCwgbCA9IGxpbmVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgaW5kZXggLT0gbGluZXNbaV0ubGVuZ3RoICsgbmV3bGluZUxlbmd0aDtcbiAgICAgICAgICAgIGlmIChpbmRleCA8IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtyb3c6IGksIGNvbHVtbjogaW5kZXggKyBsaW5lc1tpXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3RofTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge3JvdzogbC0xLCBjb2x1bW46IGxpbmVzW2wtMV0ubGVuZ3RofTtcbiAgICB9O1xuICAgIHRoaXMucG9zaXRpb25Ub0luZGV4ID0gZnVuY3Rpb24ocG9zLCBzdGFydFJvdykge1xuICAgICAgICB2YXIgbGluZXMgPSB0aGlzLiRsaW5lcyB8fCB0aGlzLmdldEFsbExpbmVzKCk7XG4gICAgICAgIHZhciBuZXdsaW5lTGVuZ3RoID0gdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkubGVuZ3RoO1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICB2YXIgcm93ID0gTWF0aC5taW4ocG9zLnJvdywgbGluZXMubGVuZ3RoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0Um93IHx8IDA7IGkgPCByb3c7ICsraSlcbiAgICAgICAgICAgIGluZGV4ICs9IGxpbmVzW2ldLmxlbmd0aCArIG5ld2xpbmVMZW5ndGg7XG5cbiAgICAgICAgcmV0dXJuIGluZGV4ICsgcG9zLmNvbHVtbjtcbiAgICB9O1xuXG59KS5jYWxsKERvY3VtZW50LnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuRG9jdW1lbnQgPSBEb2N1bWVudDtcbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL2JhY2tncm91bmRfdG9rZW5pemVyXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL29vcFwiLFwiYWNlL2xpYi9ldmVudF9lbWl0dGVyXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIG9vcCA9IGFjZXF1aXJlKFwiLi9saWIvb29wXCIpO1xudmFyIEV2ZW50RW1pdHRlciA9IGFjZXF1aXJlKFwiLi9saWIvZXZlbnRfZW1pdHRlclwiKS5FdmVudEVtaXR0ZXI7XG5cbnZhciBCYWNrZ3JvdW5kVG9rZW5pemVyID0gZnVuY3Rpb24odG9rZW5pemVyLCBlZGl0b3IpIHtcbiAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLmxpbmVzID0gW107XG4gICAgdGhpcy5zdGF0ZXMgPSBbXTtcbiAgICB0aGlzLmN1cnJlbnRMaW5lID0gMDtcbiAgICB0aGlzLnRva2VuaXplciA9IHRva2VuaXplcjtcblxuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHRoaXMuJHdvcmtlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIXNlbGYucnVubmluZykgeyByZXR1cm47IH1cblxuICAgICAgICB2YXIgd29ya2VyU3RhcnQgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB2YXIgY3VycmVudExpbmUgPSBzZWxmLmN1cnJlbnRMaW5lO1xuICAgICAgICB2YXIgZW5kTGluZSA9IC0xO1xuICAgICAgICB2YXIgZG9jID0gc2VsZi5kb2M7XG5cbiAgICAgICAgdmFyIHN0YXJ0TGluZSA9IGN1cnJlbnRMaW5lO1xuICAgICAgICB3aGlsZSAoc2VsZi5saW5lc1tjdXJyZW50TGluZV0pXG4gICAgICAgICAgICBjdXJyZW50TGluZSsrO1xuICAgICAgICBcbiAgICAgICAgdmFyIGxlbiA9IGRvYy5nZXRMZW5ndGgoKTtcbiAgICAgICAgdmFyIHByb2Nlc3NlZExpbmVzID0gMDtcbiAgICAgICAgc2VsZi5ydW5uaW5nID0gZmFsc2U7XG4gICAgICAgIHdoaWxlIChjdXJyZW50TGluZSA8IGxlbikge1xuICAgICAgICAgICAgc2VsZi4kdG9rZW5pemVSb3coY3VycmVudExpbmUpO1xuICAgICAgICAgICAgZW5kTGluZSA9IGN1cnJlbnRMaW5lO1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRMaW5lKys7XG4gICAgICAgICAgICB9IHdoaWxlIChzZWxmLmxpbmVzW2N1cnJlbnRMaW5lXSk7XG4gICAgICAgICAgICBwcm9jZXNzZWRMaW5lcyArKztcbiAgICAgICAgICAgIGlmICgocHJvY2Vzc2VkTGluZXMgJSA1ID09PSAwKSAmJiAobmV3IERhdGUoKSAtIHdvcmtlclN0YXJ0KSA+IDIwKSB7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHNlbGYucnVubmluZyA9IHNldFRpbWVvdXQoc2VsZi4kd29ya2VyLCAyMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5jdXJyZW50TGluZSA9IGN1cnJlbnRMaW5lO1xuICAgICAgICBcbiAgICAgICAgaWYgKGVuZExpbmUgPT0gLTEpXG4gICAgICAgICAgICBlbmRMaW5lID0gY3VycmVudExpbmU7XG5cbiAgICAgICAgaWYgKHN0YXJ0TGluZSA8PSBlbmRMaW5lKVxuICAgICAgICAgICAgc2VsZi5maXJlVXBkYXRlRXZlbnQoc3RhcnRMaW5lLCBlbmRMaW5lKTtcbiAgICB9O1xufTtcblxuKGZ1bmN0aW9uKCl7XG5cbiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7XG4gICAgdGhpcy5zZXRUb2tlbml6ZXIgPSBmdW5jdGlvbih0b2tlbml6ZXIpIHtcbiAgICAgICAgdGhpcy50b2tlbml6ZXIgPSB0b2tlbml6ZXI7XG4gICAgICAgIHRoaXMubGluZXMgPSBbXTtcbiAgICAgICAgdGhpcy5zdGF0ZXMgPSBbXTtcblxuICAgICAgICB0aGlzLnN0YXJ0KDApO1xuICAgIH07XG4gICAgdGhpcy5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKGRvYykge1xuICAgICAgICB0aGlzLmRvYyA9IGRvYztcbiAgICAgICAgdGhpcy5saW5lcyA9IFtdO1xuICAgICAgICB0aGlzLnN0YXRlcyA9IFtdO1xuXG4gICAgICAgIHRoaXMuc3RvcCgpO1xuICAgIH07XG4gICAgdGhpcy5maXJlVXBkYXRlRXZlbnQgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykge1xuICAgICAgICB2YXIgZGF0YSA9IHtcbiAgICAgICAgICAgIGZpcnN0OiBmaXJzdFJvdyxcbiAgICAgICAgICAgIGxhc3Q6IGxhc3RSb3dcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fc2lnbmFsKFwidXBkYXRlXCIsIHtkYXRhOiBkYXRhfSk7XG4gICAgfTtcbiAgICB0aGlzLnN0YXJ0ID0gZnVuY3Rpb24oc3RhcnRSb3cpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50TGluZSA9IE1hdGgubWluKHN0YXJ0Um93IHx8IDAsIHRoaXMuY3VycmVudExpbmUsIHRoaXMuZG9jLmdldExlbmd0aCgpKTtcbiAgICAgICAgdGhpcy5saW5lcy5zcGxpY2UodGhpcy5jdXJyZW50TGluZSwgdGhpcy5saW5lcy5sZW5ndGgpO1xuICAgICAgICB0aGlzLnN0YXRlcy5zcGxpY2UodGhpcy5jdXJyZW50TGluZSwgdGhpcy5zdGF0ZXMubGVuZ3RoKTtcblxuICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgdGhpcy5ydW5uaW5nID0gc2V0VGltZW91dCh0aGlzLiR3b3JrZXIsIDcwMCk7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLnNjaGVkdWxlU3RhcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJ1bm5pbmcpXG4gICAgICAgICAgICB0aGlzLnJ1bm5pbmcgPSBzZXRUaW1lb3V0KHRoaXMuJHdvcmtlciwgNzAwKTtcbiAgICB9O1xuXG4gICAgdGhpcy4kdXBkYXRlT25DaGFuZ2UgPSBmdW5jdGlvbihkZWx0YSkge1xuICAgICAgICB2YXIgc3RhcnRSb3cgPSBkZWx0YS5zdGFydC5yb3c7XG4gICAgICAgIHZhciBsZW4gPSBkZWx0YS5lbmQucm93IC0gc3RhcnRSb3c7XG5cbiAgICAgICAgaWYgKGxlbiA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5saW5lc1tzdGFydFJvd10gPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PSBcInJlbW92ZVwiKSB7XG4gICAgICAgICAgICB0aGlzLmxpbmVzLnNwbGljZShzdGFydFJvdywgbGVuICsgMSwgbnVsbCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlcy5zcGxpY2Uoc3RhcnRSb3csIGxlbiArIDEsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheShsZW4gKyAxKTtcbiAgICAgICAgICAgIGFyZ3MudW5zaGlmdChzdGFydFJvdywgMSk7XG4gICAgICAgICAgICB0aGlzLmxpbmVzLnNwbGljZS5hcHBseSh0aGlzLmxpbmVzLCBhcmdzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVzLnNwbGljZS5hcHBseSh0aGlzLnN0YXRlcywgYXJncyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmN1cnJlbnRMaW5lID0gTWF0aC5taW4oc3RhcnRSb3csIHRoaXMuY3VycmVudExpbmUsIHRoaXMuZG9jLmdldExlbmd0aCgpKTtcblxuICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICB9O1xuICAgIHRoaXMuc3RvcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5ydW5uaW5nKVxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucnVubmluZyk7XG4gICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xuICAgIH07XG4gICAgdGhpcy5nZXRUb2tlbnMgPSBmdW5jdGlvbihyb3cpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGluZXNbcm93XSB8fCB0aGlzLiR0b2tlbml6ZVJvdyhyb3cpO1xuICAgIH07XG4gICAgdGhpcy5nZXRTdGF0ZSA9IGZ1bmN0aW9uKHJvdykge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50TGluZSA9PSByb3cpXG4gICAgICAgICAgICB0aGlzLiR0b2tlbml6ZVJvdyhyb3cpO1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZXNbcm93XSB8fCBcInN0YXJ0XCI7XG4gICAgfTtcblxuICAgIHRoaXMuJHRva2VuaXplUm93ID0gZnVuY3Rpb24ocm93KSB7XG4gICAgICAgIHZhciBsaW5lID0gdGhpcy5kb2MuZ2V0TGluZShyb3cpO1xuICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlc1tyb3cgLSAxXTtcblxuICAgICAgICB2YXIgZGF0YSA9IHRoaXMudG9rZW5pemVyLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUsIHJvdyk7XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhdGVzW3Jvd10gKyBcIlwiICE9PSBkYXRhLnN0YXRlICsgXCJcIikge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZXNbcm93XSA9IGRhdGEuc3RhdGU7XG4gICAgICAgICAgICB0aGlzLmxpbmVzW3JvdyArIDFdID0gbnVsbDtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRMaW5lID4gcm93ICsgMSlcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRMaW5lID0gcm93ICsgMTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRMaW5lID09IHJvdykge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50TGluZSA9IHJvdyArIDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5saW5lc1tyb3ddID0gZGF0YS50b2tlbnM7XG4gICAgfTtcblxufSkuY2FsbChCYWNrZ3JvdW5kVG9rZW5pemVyLnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuQmFja2dyb3VuZFRva2VuaXplciA9IEJhY2tncm91bmRUb2tlbml6ZXI7XG59KTtcblxuYWNlLmRlZmluZShcImFjZS9zZWFyY2hfaGlnaGxpZ2h0XCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL2xhbmdcIixcImFjZS9saWIvb29wXCIsXCJhY2UvcmFuZ2VcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG52YXIgbGFuZyA9IGFjZXF1aXJlKFwiLi9saWIvbGFuZ1wiKTtcbnZhciBvb3AgPSBhY2VxdWlyZShcIi4vbGliL29vcFwiKTtcbnZhciBSYW5nZSA9IGFjZXF1aXJlKFwiLi9yYW5nZVwiKS5SYW5nZTtcblxudmFyIFNlYXJjaEhpZ2hsaWdodCA9IGZ1bmN0aW9uKHJlZ0V4cCwgY2xhenosIHR5cGUpIHtcbiAgICB0aGlzLnNldFJlZ2V4cChyZWdFeHApO1xuICAgIHRoaXMuY2xhenogPSBjbGF6ejtcbiAgICB0aGlzLnR5cGUgPSB0eXBlIHx8IFwidGV4dFwiO1xufTtcblxuKGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuTUFYX1JBTkdFUyA9IDUwMDtcbiAgICBcbiAgICB0aGlzLnNldFJlZ2V4cCA9IGZ1bmN0aW9uKHJlZ0V4cCkge1xuICAgICAgICBpZiAodGhpcy5yZWdFeHArXCJcIiA9PSByZWdFeHArXCJcIilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5yZWdFeHAgPSByZWdFeHA7XG4gICAgICAgIHRoaXMuY2FjaGUgPSBbXTtcbiAgICB9O1xuXG4gICAgdGhpcy51cGRhdGUgPSBmdW5jdGlvbihodG1sLCBtYXJrZXJMYXllciwgc2Vzc2lvbiwgY29uZmlnKSB7XG4gICAgICAgIGlmICghdGhpcy5yZWdFeHApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBzdGFydCA9IGNvbmZpZy5maXJzdFJvdywgZW5kID0gY29uZmlnLmxhc3RSb3c7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcmFuZ2VzID0gdGhpcy5jYWNoZVtpXTtcbiAgICAgICAgICAgIGlmIChyYW5nZXMgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJhbmdlcyA9IGxhbmcuZ2V0TWF0Y2hPZmZzZXRzKHNlc3Npb24uZ2V0TGluZShpKSwgdGhpcy5yZWdFeHApO1xuICAgICAgICAgICAgICAgIGlmIChyYW5nZXMubGVuZ3RoID4gdGhpcy5NQVhfUkFOR0VTKVxuICAgICAgICAgICAgICAgICAgICByYW5nZXMgPSByYW5nZXMuc2xpY2UoMCwgdGhpcy5NQVhfUkFOR0VTKTtcbiAgICAgICAgICAgICAgICByYW5nZXMgPSByYW5nZXMubWFwKGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2UoaSwgbWF0Y2gub2Zmc2V0LCBpLCBtYXRjaC5vZmZzZXQgKyBtYXRjaC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVbaV0gPSByYW5nZXMubGVuZ3RoID8gcmFuZ2VzIDogXCJcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IHJhbmdlcy5sZW5ndGg7IGogLS07ICkge1xuICAgICAgICAgICAgICAgIG1hcmtlckxheWVyLmRyYXdTaW5nbGVMaW5lTWFya2VyKFxuICAgICAgICAgICAgICAgICAgICBodG1sLCByYW5nZXNbal0udG9TY3JlZW5SYW5nZShzZXNzaW9uKSwgdGhpcy5jbGF6eiwgY29uZmlnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbn0pLmNhbGwoU2VhcmNoSGlnaGxpZ2h0LnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuU2VhcmNoSGlnaGxpZ2h0ID0gU2VhcmNoSGlnaGxpZ2h0O1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvZWRpdF9zZXNzaW9uL2ZvbGRfbGluZVwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL3JhbmdlXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIFJhbmdlID0gYWNlcXVpcmUoXCIuLi9yYW5nZVwiKS5SYW5nZTtcbmZ1bmN0aW9uIEZvbGRMaW5lKGZvbGREYXRhLCBmb2xkcykge1xuICAgIHRoaXMuZm9sZERhdGEgPSBmb2xkRGF0YTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb2xkcykpIHtcbiAgICAgICAgdGhpcy5mb2xkcyA9IGZvbGRzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvbGRzID0gdGhpcy5mb2xkcyA9IFsgZm9sZHMgXTtcbiAgICB9XG5cbiAgICB2YXIgbGFzdCA9IGZvbGRzW2ZvbGRzLmxlbmd0aCAtIDFdO1xuICAgIHRoaXMucmFuZ2UgPSBuZXcgUmFuZ2UoZm9sZHNbMF0uc3RhcnQucm93LCBmb2xkc1swXS5zdGFydC5jb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0LmVuZC5yb3csIGxhc3QuZW5kLmNvbHVtbik7XG4gICAgdGhpcy5zdGFydCA9IHRoaXMucmFuZ2Uuc3RhcnQ7XG4gICAgdGhpcy5lbmQgICA9IHRoaXMucmFuZ2UuZW5kO1xuXG4gICAgdGhpcy5mb2xkcy5mb3JFYWNoKGZ1bmN0aW9uKGZvbGQpIHtcbiAgICAgICAgZm9sZC5zZXRGb2xkTGluZSh0aGlzKTtcbiAgICB9LCB0aGlzKTtcbn1cblxuKGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2hpZnRSb3cgPSBmdW5jdGlvbihzaGlmdCkge1xuICAgICAgICB0aGlzLnN0YXJ0LnJvdyArPSBzaGlmdDtcbiAgICAgICAgdGhpcy5lbmQucm93ICs9IHNoaWZ0O1xuICAgICAgICB0aGlzLmZvbGRzLmZvckVhY2goZnVuY3Rpb24oZm9sZCkge1xuICAgICAgICAgICAgZm9sZC5zdGFydC5yb3cgKz0gc2hpZnQ7XG4gICAgICAgICAgICBmb2xkLmVuZC5yb3cgKz0gc2hpZnQ7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLmFkZEZvbGQgPSBmdW5jdGlvbihmb2xkKSB7XG4gICAgICAgIGlmIChmb2xkLnNhbWVSb3cpIHtcbiAgICAgICAgICAgIGlmIChmb2xkLnN0YXJ0LnJvdyA8IHRoaXMuc3RhcnRSb3cgfHwgZm9sZC5lbmRSb3cgPiB0aGlzLmVuZFJvdykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGFkZCBhIGZvbGQgdG8gdGhpcyBGb2xkTGluZSBhcyBpdCBoYXMgbm8gY29ubmVjdGlvblwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZm9sZHMucHVzaChmb2xkKTtcbiAgICAgICAgICAgIHRoaXMuZm9sZHMuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC1hLnJhbmdlLmNvbXBhcmVFbmQoYi5zdGFydC5yb3csIGIuc3RhcnQuY29sdW1uKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMucmFuZ2UuY29tcGFyZUVuZChmb2xkLnN0YXJ0LnJvdywgZm9sZC5zdGFydC5jb2x1bW4pID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9IGZvbGQuZW5kLnJvdztcbiAgICAgICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPSAgZm9sZC5lbmQuY29sdW1uO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJhbmdlLmNvbXBhcmVTdGFydChmb2xkLmVuZC5yb3csIGZvbGQuZW5kLmNvbHVtbikgPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydC5yb3cgPSBmb2xkLnN0YXJ0LnJvdztcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9IGZvbGQuc3RhcnQuY29sdW1uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZvbGQuc3RhcnQucm93ID09IHRoaXMuZW5kLnJvdykge1xuICAgICAgICAgICAgdGhpcy5mb2xkcy5wdXNoKGZvbGQpO1xuICAgICAgICAgICAgdGhpcy5lbmQucm93ID0gZm9sZC5lbmQucm93O1xuICAgICAgICAgICAgdGhpcy5lbmQuY29sdW1uID0gZm9sZC5lbmQuY29sdW1uO1xuICAgICAgICB9IGVsc2UgaWYgKGZvbGQuZW5kLnJvdyA9PSB0aGlzLnN0YXJ0LnJvdykge1xuICAgICAgICAgICAgdGhpcy5mb2xkcy51bnNoaWZ0KGZvbGQpO1xuICAgICAgICAgICAgdGhpcy5zdGFydC5yb3cgPSBmb2xkLnN0YXJ0LnJvdztcbiAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gZm9sZC5zdGFydC5jb2x1bW47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUcnlpbmcgdG8gYWRkIGZvbGQgdG8gRm9sZFJvdyB0aGF0IGRvZXNuJ3QgaGF2ZSBhIG1hdGNoaW5nIHJvd1wiKTtcbiAgICAgICAgfVxuICAgICAgICBmb2xkLmZvbGRMaW5lID0gdGhpcztcbiAgICB9O1xuXG4gICAgdGhpcy5jb250YWluc1JvdyA9IGZ1bmN0aW9uKHJvdykge1xuICAgICAgICByZXR1cm4gcm93ID49IHRoaXMuc3RhcnQucm93ICYmIHJvdyA8PSB0aGlzLmVuZC5yb3c7XG4gICAgfTtcblxuICAgIHRoaXMud2FsayA9IGZ1bmN0aW9uKGNhbGxiYWNrLCBlbmRSb3csIGVuZENvbHVtbikge1xuICAgICAgICB2YXIgbGFzdEVuZCA9IDAsXG4gICAgICAgICAgICBmb2xkcyA9IHRoaXMuZm9sZHMsXG4gICAgICAgICAgICBmb2xkLFxuICAgICAgICAgICAgY21wLCBzdG9wLCBpc05ld1JvdyA9IHRydWU7XG5cbiAgICAgICAgaWYgKGVuZFJvdyA9PSBudWxsKSB7XG4gICAgICAgICAgICBlbmRSb3cgPSB0aGlzLmVuZC5yb3c7XG4gICAgICAgICAgICBlbmRDb2x1bW4gPSB0aGlzLmVuZC5jb2x1bW47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb2xkID0gZm9sZHNbaV07XG5cbiAgICAgICAgICAgIGNtcCA9IGZvbGQucmFuZ2UuY29tcGFyZVN0YXJ0KGVuZFJvdywgZW5kQ29sdW1uKTtcbiAgICAgICAgICAgIGlmIChjbXAgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBlbmRSb3csIGVuZENvbHVtbiwgbGFzdEVuZCwgaXNOZXdSb3cpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RvcCA9IGNhbGxiYWNrKG51bGwsIGZvbGQuc3RhcnQucm93LCBmb2xkLnN0YXJ0LmNvbHVtbiwgbGFzdEVuZCwgaXNOZXdSb3cpO1xuICAgICAgICAgICAgc3RvcCA9ICFzdG9wICYmIGNhbGxiYWNrKGZvbGQucGxhY2Vob2xkZXIsIGZvbGQuc3RhcnQucm93LCBmb2xkLnN0YXJ0LmNvbHVtbiwgbGFzdEVuZCk7XG4gICAgICAgICAgICBpZiAoc3RvcCB8fCBjbXAgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpc05ld1JvdyA9ICFmb2xkLnNhbWVSb3c7XG4gICAgICAgICAgICBsYXN0RW5kID0gZm9sZC5lbmQuY29sdW1uO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIGVuZFJvdywgZW5kQ29sdW1uLCBsYXN0RW5kLCBpc05ld1Jvdyk7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0TmV4dEZvbGRUbyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7XG4gICAgICAgIHZhciBmb2xkLCBjbXA7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5mb2xkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9sZCA9IHRoaXMuZm9sZHNbaV07XG4gICAgICAgICAgICBjbXAgPSBmb2xkLnJhbmdlLmNvbXBhcmVFbmQocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGZvbGQ6IGZvbGQsXG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6IFwiYWZ0ZXJcIlxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGZvbGQ6IGZvbGQsXG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6IFwiaW5zaWRlXCJcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICB0aGlzLmFkZFJlbW92ZUNoYXJzID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIGxlbikge1xuICAgICAgICB2YXIgcmV0ID0gdGhpcy5nZXROZXh0Rm9sZFRvKHJvdywgY29sdW1uKSxcbiAgICAgICAgICAgIGZvbGQsIGZvbGRzO1xuICAgICAgICBpZiAocmV0KSB7XG4gICAgICAgICAgICBmb2xkID0gcmV0LmZvbGQ7XG4gICAgICAgICAgICBpZiAocmV0LmtpbmQgPT0gXCJpbnNpZGVcIlxuICAgICAgICAgICAgICAgICYmIGZvbGQuc3RhcnQuY29sdW1uICE9IGNvbHVtblxuICAgICAgICAgICAgICAgICYmIGZvbGQuc3RhcnQucm93ICE9IHJvdylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS5sb2cocm93LCBjb2x1bW4sIGZvbGQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkLnN0YXJ0LnJvdyA9PSByb3cpIHtcbiAgICAgICAgICAgICAgICBmb2xkcyA9IHRoaXMuZm9sZHM7XG4gICAgICAgICAgICAgICAgdmFyIGkgPSBmb2xkcy5pbmRleE9mKGZvbGQpO1xuICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uICs9IGxlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChpOyBpIDwgZm9sZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZm9sZCA9IGZvbGRzW2ldO1xuICAgICAgICAgICAgICAgICAgICBmb2xkLnN0YXJ0LmNvbHVtbiArPSBsZW47XG4gICAgICAgICAgICAgICAgICAgIGlmICghZm9sZC5zYW1lUm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZm9sZC5lbmQuY29sdW1uICs9IGxlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5lbmQuY29sdW1uICs9IGxlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLnNwbGl0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgdmFyIHBvcyA9IHRoaXMuZ2V0TmV4dEZvbGRUbyhyb3csIGNvbHVtbik7XG4gICAgICAgIFxuICAgICAgICBpZiAoIXBvcyB8fCBwb3Mua2luZCA9PSBcImluc2lkZVwiKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBcbiAgICAgICAgdmFyIGZvbGQgPSBwb3MuZm9sZDtcbiAgICAgICAgdmFyIGZvbGRzID0gdGhpcy5mb2xkcztcbiAgICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy5mb2xkRGF0YTtcbiAgICAgICAgXG4gICAgICAgIHZhciBpID0gZm9sZHMuaW5kZXhPZihmb2xkKTtcbiAgICAgICAgdmFyIGZvbGRCZWZvcmUgPSBmb2xkc1tpIC0gMV07XG4gICAgICAgIHRoaXMuZW5kLnJvdyA9IGZvbGRCZWZvcmUuZW5kLnJvdztcbiAgICAgICAgdGhpcy5lbmQuY29sdW1uID0gZm9sZEJlZm9yZS5lbmQuY29sdW1uO1xuICAgICAgICBmb2xkcyA9IGZvbGRzLnNwbGljZShpLCBmb2xkcy5sZW5ndGggLSBpKTtcblxuICAgICAgICB2YXIgbmV3Rm9sZExpbmUgPSBuZXcgRm9sZExpbmUoZm9sZERhdGEsIGZvbGRzKTtcbiAgICAgICAgZm9sZERhdGEuc3BsaWNlKGZvbGREYXRhLmluZGV4T2YodGhpcykgKyAxLCAwLCBuZXdGb2xkTGluZSk7XG4gICAgICAgIHJldHVybiBuZXdGb2xkTGluZTtcbiAgICB9O1xuXG4gICAgdGhpcy5tZXJnZSA9IGZ1bmN0aW9uKGZvbGRMaW5lTmV4dCkge1xuICAgICAgICB2YXIgZm9sZHMgPSBmb2xkTGluZU5leHQuZm9sZHM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9sZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRm9sZChmb2xkc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy5mb2xkRGF0YTtcbiAgICAgICAgZm9sZERhdGEuc3BsaWNlKGZvbGREYXRhLmluZGV4T2YoZm9sZExpbmVOZXh0KSwgMSk7XG4gICAgfTtcblxuICAgIHRoaXMudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHJldCA9IFt0aGlzLnJhbmdlLnRvU3RyaW5nKCkgKyBcIjogW1wiIF07XG5cbiAgICAgICAgdGhpcy5mb2xkcy5mb3JFYWNoKGZ1bmN0aW9uKGZvbGQpIHtcbiAgICAgICAgICAgIHJldC5wdXNoKFwiICBcIiArIGZvbGQudG9TdHJpbmcoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXQucHVzaChcIl1cIik7XG4gICAgICAgIHJldHVybiByZXQuam9pbihcIlxcblwiKTtcbiAgICB9O1xuXG4gICAgdGhpcy5pZHhUb1Bvc2l0aW9uID0gZnVuY3Rpb24oaWR4KSB7XG4gICAgICAgIHZhciBsYXN0Rm9sZEVuZENvbHVtbiA9IDA7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZvbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZm9sZCA9IHRoaXMuZm9sZHNbaV07XG5cbiAgICAgICAgICAgIGlkeCAtPSBmb2xkLnN0YXJ0LmNvbHVtbiAtIGxhc3RGb2xkRW5kQ29sdW1uO1xuICAgICAgICAgICAgaWYgKGlkeCA8IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByb3c6IGZvbGQuc3RhcnQucm93LFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGZvbGQuc3RhcnQuY29sdW1uICsgaWR4XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWR4IC09IGZvbGQucGxhY2Vob2xkZXIubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGlkeCA8IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9sZC5zdGFydDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGFzdEZvbGRFbmRDb2x1bW4gPSBmb2xkLmVuZC5jb2x1bW47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcm93OiB0aGlzLmVuZC5yb3csXG4gICAgICAgICAgICBjb2x1bW46IHRoaXMuZW5kLmNvbHVtbiArIGlkeFxuICAgICAgICB9O1xuICAgIH07XG59KS5jYWxsKEZvbGRMaW5lLnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuRm9sZExpbmUgPSBGb2xkTGluZTtcbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL3JhbmdlX2xpc3RcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9yYW5nZVwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgUmFuZ2UgPSBhY2VxdWlyZShcIi4vcmFuZ2VcIikuUmFuZ2U7XG52YXIgY29tcGFyZVBvaW50cyA9IFJhbmdlLmNvbXBhcmVQb2ludHM7XG5cbnZhciBSYW5nZUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJhbmdlcyA9IFtdO1xufTtcblxuKGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY29tcGFyZVBvaW50cyA9IGNvbXBhcmVQb2ludHM7XG5cbiAgICB0aGlzLnBvaW50SW5kZXggPSBmdW5jdGlvbihwb3MsIGV4Y2x1ZGVFZGdlcywgc3RhcnRJbmRleCkge1xuICAgICAgICB2YXIgbGlzdCA9IHRoaXMucmFuZ2VzO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4IHx8IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcmFuZ2UgPSBsaXN0W2ldO1xuICAgICAgICAgICAgdmFyIGNtcEVuZCA9IGNvbXBhcmVQb2ludHMocG9zLCByYW5nZS5lbmQpO1xuICAgICAgICAgICAgaWYgKGNtcEVuZCA+IDApXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB2YXIgY21wU3RhcnQgPSBjb21wYXJlUG9pbnRzKHBvcywgcmFuZ2Uuc3RhcnQpO1xuICAgICAgICAgICAgaWYgKGNtcEVuZCA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhjbHVkZUVkZ2VzICYmIGNtcFN0YXJ0ICE9PSAwID8gLWktMiA6IGk7XG4gICAgICAgICAgICBpZiAoY21wU3RhcnQgPiAwIHx8IChjbXBTdGFydCA9PT0gMCAmJiAhZXhjbHVkZUVkZ2VzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcblxuICAgICAgICAgICAgcmV0dXJuIC1pLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC1pIC0gMTtcbiAgICB9O1xuXG4gICAgdGhpcy5hZGQgPSBmdW5jdGlvbihyYW5nZSkge1xuICAgICAgICB2YXIgZXhjbHVkZUVkZ2VzID0gIXJhbmdlLmlzRW1wdHkoKTtcbiAgICAgICAgdmFyIHN0YXJ0SW5kZXggPSB0aGlzLnBvaW50SW5kZXgocmFuZ2Uuc3RhcnQsIGV4Y2x1ZGVFZGdlcyk7XG4gICAgICAgIGlmIChzdGFydEluZGV4IDwgMClcbiAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAtc3RhcnRJbmRleCAtIDE7XG5cbiAgICAgICAgdmFyIGVuZEluZGV4ID0gdGhpcy5wb2ludEluZGV4KHJhbmdlLmVuZCwgZXhjbHVkZUVkZ2VzLCBzdGFydEluZGV4KTtcblxuICAgICAgICBpZiAoZW5kSW5kZXggPCAwKVxuICAgICAgICAgICAgZW5kSW5kZXggPSAtZW5kSW5kZXggLSAxO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBlbmRJbmRleCsrO1xuICAgICAgICByZXR1cm4gdGhpcy5yYW5nZXMuc3BsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4IC0gc3RhcnRJbmRleCwgcmFuZ2UpO1xuICAgIH07XG5cbiAgICB0aGlzLmFkZExpc3QgPSBmdW5jdGlvbihsaXN0KSB7XG4gICAgICAgIHZhciByZW1vdmVkID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSBsaXN0Lmxlbmd0aDsgaS0tOyApIHtcbiAgICAgICAgICAgIHJlbW92ZWQucHVzaC5hcHBseShyZW1vdmVkLCB0aGlzLmFkZChsaXN0W2ldKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlbW92ZWQ7XG4gICAgfTtcblxuICAgIHRoaXMuc3Vic3RyYWN0UG9pbnQgPSBmdW5jdGlvbihwb3MpIHtcbiAgICAgICAgdmFyIGkgPSB0aGlzLnBvaW50SW5kZXgocG9zKTtcblxuICAgICAgICBpZiAoaSA+PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFuZ2VzLnNwbGljZShpLCAxKTtcbiAgICB9O1xuICAgIHRoaXMubWVyZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHJlbW92ZWQgPSBbXTtcbiAgICAgICAgdmFyIGxpc3QgPSB0aGlzLnJhbmdlcztcbiAgICAgICAgXG4gICAgICAgIGxpc3QgPSBsaXN0LnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVQb2ludHMoYS5zdGFydCwgYi5zdGFydCk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgdmFyIG5leHQgPSBsaXN0WzBdLCByYW5nZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByYW5nZSA9IG5leHQ7XG4gICAgICAgICAgICBuZXh0ID0gbGlzdFtpXTtcbiAgICAgICAgICAgIHZhciBjbXAgPSBjb21wYXJlUG9pbnRzKHJhbmdlLmVuZCwgbmV4dC5zdGFydCk7XG4gICAgICAgICAgICBpZiAoY21wIDwgMClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgaWYgKGNtcCA9PSAwICYmICFyYW5nZS5pc0VtcHR5KCkgJiYgIW5leHQuaXNFbXB0eSgpKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBpZiAoY29tcGFyZVBvaW50cyhyYW5nZS5lbmQsIG5leHQuZW5kKSA8IDApIHtcbiAgICAgICAgICAgICAgICByYW5nZS5lbmQucm93ID0gbmV4dC5lbmQucm93O1xuICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gPSBuZXh0LmVuZC5jb2x1bW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxpc3Quc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKG5leHQpO1xuICAgICAgICAgICAgbmV4dCA9IHJhbmdlO1xuICAgICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0aGlzLnJhbmdlcyA9IGxpc3Q7XG5cbiAgICAgICAgcmV0dXJuIHJlbW92ZWQ7XG4gICAgfTtcblxuICAgIHRoaXMuY29udGFpbnMgPSBmdW5jdGlvbihyb3csIGNvbHVtbikge1xuICAgICAgICByZXR1cm4gdGhpcy5wb2ludEluZGV4KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KSA+PSAwO1xuICAgIH07XG5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbihwb3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9pbnRJbmRleChwb3MpID49IDA7XG4gICAgfTtcblxuICAgIHRoaXMucmFuZ2VBdFBvaW50ID0gZnVuY3Rpb24ocG9zKSB7XG4gICAgICAgIHZhciBpID0gdGhpcy5wb2ludEluZGV4KHBvcyk7XG4gICAgICAgIGlmIChpID49IDApXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYW5nZXNbaV07XG4gICAgfTtcblxuXG4gICAgdGhpcy5jbGlwUm93cyA9IGZ1bmN0aW9uKHN0YXJ0Um93LCBlbmRSb3cpIHtcbiAgICAgICAgdmFyIGxpc3QgPSB0aGlzLnJhbmdlcztcbiAgICAgICAgaWYgKGxpc3RbMF0uc3RhcnQucm93ID4gZW5kUm93IHx8IGxpc3RbbGlzdC5sZW5ndGggLSAxXS5zdGFydC5yb3cgPCBzdGFydFJvdylcbiAgICAgICAgICAgIHJldHVybiBbXTtcblxuICAgICAgICB2YXIgc3RhcnRJbmRleCA9IHRoaXMucG9pbnRJbmRleCh7cm93OiBzdGFydFJvdywgY29sdW1uOiAwfSk7XG4gICAgICAgIGlmIChzdGFydEluZGV4IDwgMClcbiAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAtc3RhcnRJbmRleCAtIDE7XG4gICAgICAgIHZhciBlbmRJbmRleCA9IHRoaXMucG9pbnRJbmRleCh7cm93OiBlbmRSb3csIGNvbHVtbjogMH0sIHN0YXJ0SW5kZXgpO1xuICAgICAgICBpZiAoZW5kSW5kZXggPCAwKVxuICAgICAgICAgICAgZW5kSW5kZXggPSAtZW5kSW5kZXggLSAxO1xuXG4gICAgICAgIHZhciBjbGlwcGVkID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwgZW5kSW5kZXg7IGkrKykge1xuICAgICAgICAgICAgY2xpcHBlZC5wdXNoKGxpc3RbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbGlwcGVkO1xuICAgIH07XG5cbiAgICB0aGlzLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yYW5nZXMuc3BsaWNlKDAsIHRoaXMucmFuZ2VzLmxlbmd0aCk7XG4gICAgfTtcblxuICAgIHRoaXMuYXR0YWNoID0gZnVuY3Rpb24oc2Vzc2lvbikge1xuICAgICAgICBpZiAodGhpcy5zZXNzaW9uKVxuICAgICAgICAgICAgdGhpcy5kZXRhY2goKTtcblxuICAgICAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy4kb25DaGFuZ2UuYmluZCh0aGlzKTtcblxuICAgICAgICB0aGlzLnNlc3Npb24ub24oJ2NoYW5nZScsIHRoaXMub25DaGFuZ2UpO1xuICAgIH07XG5cbiAgICB0aGlzLmRldGFjaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2Vzc2lvbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUxpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uID0gbnVsbDtcbiAgICB9O1xuXG4gICAgdGhpcy4kb25DaGFuZ2UgPSBmdW5jdGlvbihkZWx0YSkge1xuICAgICAgICBpZiAoZGVsdGEuYWN0aW9uID09IFwiaW5zZXJ0XCIpe1xuICAgICAgICAgICAgdmFyIHN0YXJ0ID0gZGVsdGEuc3RhcnQ7XG4gICAgICAgICAgICB2YXIgZW5kID0gZGVsdGEuZW5kO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGVuZCA9IGRlbHRhLnN0YXJ0O1xuICAgICAgICAgICAgdmFyIHN0YXJ0ID0gZGVsdGEuZW5kO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzdGFydFJvdyA9IHN0YXJ0LnJvdztcbiAgICAgICAgdmFyIGVuZFJvdyA9IGVuZC5yb3c7XG4gICAgICAgIHZhciBsaW5lRGlmID0gZW5kUm93IC0gc3RhcnRSb3c7XG5cbiAgICAgICAgdmFyIGNvbERpZmYgPSAtc3RhcnQuY29sdW1uICsgZW5kLmNvbHVtbjtcbiAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMucmFuZ2VzO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gcmFuZ2VzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgdmFyIHIgPSByYW5nZXNbaV07XG4gICAgICAgICAgICBpZiAoci5lbmQucm93IDwgc3RhcnRSb3cpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAoci5zdGFydC5yb3cgPiBzdGFydFJvdylcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgaWYgKHIuc3RhcnQucm93ID09IHN0YXJ0Um93ICYmIHIuc3RhcnQuY29sdW1uID49IHN0YXJ0LmNvbHVtbiApIHtcbiAgICAgICAgICAgICAgICBpZiAoci5zdGFydC5jb2x1bW4gPT0gc3RhcnQuY29sdW1uICYmIHRoaXMuJGluc2VydFJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgci5zdGFydC5jb2x1bW4gKz0gY29sRGlmZjtcbiAgICAgICAgICAgICAgICAgICAgci5zdGFydC5yb3cgKz0gbGluZURpZjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoci5lbmQucm93ID09IHN0YXJ0Um93ICYmIHIuZW5kLmNvbHVtbiA+PSBzdGFydC5jb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoci5lbmQuY29sdW1uID09IHN0YXJ0LmNvbHVtbiAmJiB0aGlzLiRpbnNlcnRSaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHIuZW5kLmNvbHVtbiA9PSBzdGFydC5jb2x1bW4gJiYgY29sRGlmZiA+IDAgJiYgaSA8IG4gLSAxKSB7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBpZiAoci5lbmQuY29sdW1uID4gci5zdGFydC5jb2x1bW4gJiYgci5lbmQuY29sdW1uID09IHJhbmdlc1tpKzFdLnN0YXJ0LmNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuZW5kLmNvbHVtbiAtPSBjb2xEaWZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByLmVuZC5jb2x1bW4gKz0gY29sRGlmZjtcbiAgICAgICAgICAgICAgICByLmVuZC5yb3cgKz0gbGluZURpZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaW5lRGlmICE9IDAgJiYgaSA8IG4pIHtcbiAgICAgICAgICAgIGZvciAoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHIgPSByYW5nZXNbaV07XG4gICAgICAgICAgICAgICAgci5zdGFydC5yb3cgKz0gbGluZURpZjtcbiAgICAgICAgICAgICAgICByLmVuZC5yb3cgKz0gbGluZURpZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbn0pLmNhbGwoUmFuZ2VMaXN0LnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuUmFuZ2VMaXN0ID0gUmFuZ2VMaXN0O1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvZWRpdF9zZXNzaW9uL2ZvbGRcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9yYW5nZVwiLFwiYWNlL3JhbmdlX2xpc3RcIixcImFjZS9saWIvb29wXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIFJhbmdlID0gYWNlcXVpcmUoXCIuLi9yYW5nZVwiKS5SYW5nZTtcbnZhciBSYW5nZUxpc3QgPSBhY2VxdWlyZShcIi4uL3JhbmdlX2xpc3RcIikuUmFuZ2VMaXN0O1xudmFyIG9vcCA9IGFjZXF1aXJlKFwiLi4vbGliL29vcFwiKTtcbnZhciBGb2xkID0gZXhwb3J0cy5Gb2xkID0gZnVuY3Rpb24ocmFuZ2UsIHBsYWNlaG9sZGVyKSB7XG4gICAgdGhpcy5mb2xkTGluZSA9IG51bGw7XG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xuICAgIHRoaXMucmFuZ2UgPSByYW5nZTtcbiAgICB0aGlzLnN0YXJ0ID0gcmFuZ2Uuc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSByYW5nZS5lbmQ7XG5cbiAgICB0aGlzLnNhbWVSb3cgPSByYW5nZS5zdGFydC5yb3cgPT0gcmFuZ2UuZW5kLnJvdztcbiAgICB0aGlzLnN1YkZvbGRzID0gdGhpcy5yYW5nZXMgPSBbXTtcbn07XG5cbm9vcC5pbmhlcml0cyhGb2xkLCBSYW5nZUxpc3QpO1xuXG4oZnVuY3Rpb24oKSB7XG5cbiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAnXCInICsgdGhpcy5wbGFjZWhvbGRlciArICdcIiAnICsgdGhpcy5yYW5nZS50b1N0cmluZygpO1xuICAgIH07XG5cbiAgICB0aGlzLnNldEZvbGRMaW5lID0gZnVuY3Rpb24oZm9sZExpbmUpIHtcbiAgICAgICAgdGhpcy5mb2xkTGluZSA9IGZvbGRMaW5lO1xuICAgICAgICB0aGlzLnN1YkZvbGRzLmZvckVhY2goZnVuY3Rpb24oZm9sZCkge1xuICAgICAgICAgICAgZm9sZC5zZXRGb2xkTGluZShmb2xkTGluZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByYW5nZSA9IHRoaXMucmFuZ2UuY2xvbmUoKTtcbiAgICAgICAgdmFyIGZvbGQgPSBuZXcgRm9sZChyYW5nZSwgdGhpcy5wbGFjZWhvbGRlcik7XG4gICAgICAgIHRoaXMuc3ViRm9sZHMuZm9yRWFjaChmdW5jdGlvbihzdWJGb2xkKSB7XG4gICAgICAgICAgICBmb2xkLnN1YkZvbGRzLnB1c2goc3ViRm9sZC5jbG9uZSgpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZvbGQuY29sbGFwc2VDaGlsZHJlbiA9IHRoaXMuY29sbGFwc2VDaGlsZHJlbjtcbiAgICAgICAgcmV0dXJuIGZvbGQ7XG4gICAgfTtcblxuICAgIHRoaXMuYWRkU3ViRm9sZCA9IGZ1bmN0aW9uKGZvbGQpIHtcbiAgICAgICAgaWYgKHRoaXMucmFuZ2UuaXNFcXVhbChmb2xkKSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpZiAoIXRoaXMucmFuZ2UuY29udGFpbnNSYW5nZShmb2xkKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgZm9sZCBjYW4ndCBpbnRlcnNlY3QgYWxyZWFkeSBleGlzdGluZyBmb2xkXCIgKyBmb2xkLnJhbmdlICsgdGhpcy5yYW5nZSk7XG4gICAgICAgIGNvbnN1bWVSYW5nZShmb2xkLCB0aGlzLnN0YXJ0KTtcblxuICAgICAgICB2YXIgcm93ID0gZm9sZC5zdGFydC5yb3csIGNvbHVtbiA9IGZvbGQuc3RhcnQuY29sdW1uO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgY21wID0gLTE7IGkgPCB0aGlzLnN1YkZvbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbXAgPSB0aGlzLnN1YkZvbGRzW2ldLnJhbmdlLmNvbXBhcmUocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgaWYgKGNtcCAhPSAxKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHZhciBhZnRlclN0YXJ0ID0gdGhpcy5zdWJGb2xkc1tpXTtcblxuICAgICAgICBpZiAoY21wID09IDApXG4gICAgICAgICAgICByZXR1cm4gYWZ0ZXJTdGFydC5hZGRTdWJGb2xkKGZvbGQpO1xuICAgICAgICB2YXIgcm93ID0gZm9sZC5yYW5nZS5lbmQucm93LCBjb2x1bW4gPSBmb2xkLnJhbmdlLmVuZC5jb2x1bW47XG4gICAgICAgIGZvciAodmFyIGogPSBpLCBjbXAgPSAtMTsgaiA8IHRoaXMuc3ViRm9sZHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNtcCA9IHRoaXMuc3ViRm9sZHNbal0ucmFuZ2UuY29tcGFyZShyb3csIGNvbHVtbik7XG4gICAgICAgICAgICBpZiAoY21wICE9IDEpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFmdGVyRW5kID0gdGhpcy5zdWJGb2xkc1tqXTtcblxuICAgICAgICBpZiAoY21wID09IDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGZvbGQgY2FuJ3QgaW50ZXJzZWN0IGFscmVhZHkgZXhpc3RpbmcgZm9sZFwiICsgZm9sZC5yYW5nZSArIHRoaXMucmFuZ2UpO1xuXG4gICAgICAgIHZhciBjb25zdW1lZEZvbGRzID0gdGhpcy5zdWJGb2xkcy5zcGxpY2UoaSwgaiAtIGksIGZvbGQpO1xuICAgICAgICBmb2xkLnNldEZvbGRMaW5lKHRoaXMuZm9sZExpbmUpO1xuXG4gICAgICAgIHJldHVybiBmb2xkO1xuICAgIH07XG4gICAgXG4gICAgdGhpcy5yZXN0b3JlUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkge1xuICAgICAgICByZXR1cm4gcmVzdG9yZVJhbmdlKHJhbmdlLCB0aGlzLnN0YXJ0KTtcbiAgICB9O1xuXG59KS5jYWxsKEZvbGQucHJvdG90eXBlKTtcblxuZnVuY3Rpb24gY29uc3VtZVBvaW50KHBvaW50LCBhbmNob3IpIHtcbiAgICBwb2ludC5yb3cgLT0gYW5jaG9yLnJvdztcbiAgICBpZiAocG9pbnQucm93ID09IDApXG4gICAgICAgIHBvaW50LmNvbHVtbiAtPSBhbmNob3IuY29sdW1uO1xufVxuZnVuY3Rpb24gY29uc3VtZVJhbmdlKHJhbmdlLCBhbmNob3IpIHtcbiAgICBjb25zdW1lUG9pbnQocmFuZ2Uuc3RhcnQsIGFuY2hvcik7XG4gICAgY29uc3VtZVBvaW50KHJhbmdlLmVuZCwgYW5jaG9yKTtcbn1cbmZ1bmN0aW9uIHJlc3RvcmVQb2ludChwb2ludCwgYW5jaG9yKSB7XG4gICAgaWYgKHBvaW50LnJvdyA9PSAwKVxuICAgICAgICBwb2ludC5jb2x1bW4gKz0gYW5jaG9yLmNvbHVtbjtcbiAgICBwb2ludC5yb3cgKz0gYW5jaG9yLnJvdztcbn1cbmZ1bmN0aW9uIHJlc3RvcmVSYW5nZShyYW5nZSwgYW5jaG9yKSB7XG4gICAgcmVzdG9yZVBvaW50KHJhbmdlLnN0YXJ0LCBhbmNob3IpO1xuICAgIHJlc3RvcmVQb2ludChyYW5nZS5lbmQsIGFuY2hvcik7XG59XG5cbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL2VkaXRfc2Vzc2lvbi9mb2xkaW5nXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvcmFuZ2VcIixcImFjZS9lZGl0X3Nlc3Npb24vZm9sZF9saW5lXCIsXCJhY2UvZWRpdF9zZXNzaW9uL2ZvbGRcIixcImFjZS90b2tlbl9pdGVyYXRvclwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBSYW5nZSA9IGFjZXF1aXJlKFwiLi4vcmFuZ2VcIikuUmFuZ2U7XG52YXIgRm9sZExpbmUgPSBhY2VxdWlyZShcIi4vZm9sZF9saW5lXCIpLkZvbGRMaW5lO1xudmFyIEZvbGQgPSBhY2VxdWlyZShcIi4vZm9sZFwiKS5Gb2xkO1xudmFyIFRva2VuSXRlcmF0b3IgPSBhY2VxdWlyZShcIi4uL3Rva2VuX2l0ZXJhdG9yXCIpLlRva2VuSXRlcmF0b3I7XG5cbmZ1bmN0aW9uIEZvbGRpbmcoKSB7XG4gICAgdGhpcy5nZXRGb2xkQXQgPSBmdW5jdGlvbihyb3csIGNvbHVtbiwgc2lkZSkge1xuICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLmdldEZvbGRMaW5lKHJvdyk7XG4gICAgICAgIGlmICghZm9sZExpbmUpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICB2YXIgZm9sZHMgPSBmb2xkTGluZS5mb2xkcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGZvbGQgPSBmb2xkc1tpXTtcbiAgICAgICAgICAgIGlmIChmb2xkLnJhbmdlLmNvbnRhaW5zKHJvdywgY29sdW1uKSkge1xuICAgICAgICAgICAgICAgIGlmIChzaWRlID09IDEgJiYgZm9sZC5yYW5nZS5pc0VuZChyb3csIGNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzaWRlID09IC0xICYmIGZvbGQucmFuZ2UuaXNTdGFydChyb3csIGNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmb2xkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmdldEZvbGRzSW5SYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7XG4gICAgICAgIHZhciBzdGFydCA9IHJhbmdlLnN0YXJ0O1xuICAgICAgICB2YXIgZW5kID0gcmFuZ2UuZW5kO1xuICAgICAgICB2YXIgZm9sZExpbmVzID0gdGhpcy4kZm9sZERhdGE7XG4gICAgICAgIHZhciBmb3VuZEZvbGRzID0gW107XG5cbiAgICAgICAgc3RhcnQuY29sdW1uICs9IDE7XG4gICAgICAgIGVuZC5jb2x1bW4gLT0gMTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGRMaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNtcCA9IGZvbGRMaW5lc1tpXS5yYW5nZS5jb21wYXJlUmFuZ2UocmFuZ2UpO1xuICAgICAgICAgICAgaWYgKGNtcCA9PSAyKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjbXAgPT0gLTIpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGZvbGRzID0gZm9sZExpbmVzW2ldLmZvbGRzO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBmb2xkcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBmb2xkID0gZm9sZHNbal07XG4gICAgICAgICAgICAgICAgY21wID0gZm9sZC5yYW5nZS5jb21wYXJlUmFuZ2UocmFuZ2UpO1xuICAgICAgICAgICAgICAgIGlmIChjbXAgPT0gLTIpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0gMikge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICBpZiAoY21wID09IDQyKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3VuZEZvbGRzLnB1c2goZm9sZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnQuY29sdW1uIC09IDE7XG4gICAgICAgIGVuZC5jb2x1bW4gKz0gMTtcblxuICAgICAgICByZXR1cm4gZm91bmRGb2xkcztcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRGb2xkc0luUmFuZ2VMaXN0ID0gZnVuY3Rpb24ocmFuZ2VzKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJhbmdlcykpIHtcbiAgICAgICAgICAgIHZhciBmb2xkcyA9IFtdO1xuICAgICAgICAgICAgcmFuZ2VzLmZvckVhY2goZnVuY3Rpb24ocmFuZ2UpIHtcbiAgICAgICAgICAgICAgICBmb2xkcyA9IGZvbGRzLmNvbmNhdCh0aGlzLmdldEZvbGRzSW5SYW5nZShyYW5nZSkpO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgZm9sZHMgPSB0aGlzLmdldEZvbGRzSW5SYW5nZShyYW5nZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb2xkcztcbiAgICB9O1xuICAgIHRoaXMuZ2V0QWxsRm9sZHMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGZvbGRzID0gW107XG4gICAgICAgIHZhciBmb2xkTGluZXMgPSB0aGlzLiRmb2xkRGF0YTtcbiAgICAgICAgXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9sZExpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBmb2xkTGluZXNbaV0uZm9sZHMubGVuZ3RoOyBqKyspXG4gICAgICAgICAgICAgICAgZm9sZHMucHVzaChmb2xkTGluZXNbaV0uZm9sZHNbal0pO1xuXG4gICAgICAgIHJldHVybiBmb2xkcztcbiAgICB9O1xuICAgIHRoaXMuZ2V0Rm9sZFN0cmluZ0F0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIHRyaW0sIGZvbGRMaW5lKSB7XG4gICAgICAgIGZvbGRMaW5lID0gZm9sZExpbmUgfHwgdGhpcy5nZXRGb2xkTGluZShyb3cpO1xuICAgICAgICBpZiAoIWZvbGRMaW5lKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgdmFyIGxhc3RGb2xkID0ge1xuICAgICAgICAgICAgZW5kOiB7IGNvbHVtbjogMCB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciBzdHIsIGZvbGQ7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9sZExpbmUuZm9sZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZvbGQgPSBmb2xkTGluZS5mb2xkc1tpXTtcbiAgICAgICAgICAgIHZhciBjbXAgPSBmb2xkLnJhbmdlLmNvbXBhcmVFbmQocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkge1xuICAgICAgICAgICAgICAgIHN0ciA9IHRoaXNcbiAgICAgICAgICAgICAgICAgICAgLmdldExpbmUoZm9sZC5zdGFydC5yb3cpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzdHJpbmcobGFzdEZvbGQuZW5kLmNvbHVtbiwgZm9sZC5zdGFydC5jb2x1bW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY21wID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0Rm9sZCA9IGZvbGQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdHIpXG4gICAgICAgICAgICBzdHIgPSB0aGlzLmdldExpbmUoZm9sZC5zdGFydC5yb3cpLnN1YnN0cmluZyhsYXN0Rm9sZC5lbmQuY29sdW1uKTtcblxuICAgICAgICBpZiAodHJpbSA9PSAtMSlcbiAgICAgICAgICAgIHJldHVybiBzdHIuc3Vic3RyaW5nKDAsIGNvbHVtbiAtIGxhc3RGb2xkLmVuZC5jb2x1bW4pO1xuICAgICAgICBlbHNlIGlmICh0cmltID09IDEpXG4gICAgICAgICAgICByZXR1cm4gc3RyLnN1YnN0cmluZyhjb2x1bW4gLSBsYXN0Rm9sZC5lbmQuY29sdW1uKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRGb2xkTGluZSA9IGZ1bmN0aW9uKGRvY1Jvdywgc3RhcnRGb2xkTGluZSkge1xuICAgICAgICB2YXIgZm9sZERhdGEgPSB0aGlzLiRmb2xkRGF0YTtcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICBpZiAoc3RhcnRGb2xkTGluZSlcbiAgICAgICAgICAgIGkgPSBmb2xkRGF0YS5pbmRleE9mKHN0YXJ0Rm9sZExpbmUpO1xuICAgICAgICBpZiAoaSA9PSAtMSlcbiAgICAgICAgICAgIGkgPSAwO1xuICAgICAgICBmb3IgKGk7IGkgPCBmb2xkRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gZm9sZERhdGFbaV07XG4gICAgICAgICAgICBpZiAoZm9sZExpbmUuc3RhcnQucm93IDw9IGRvY1JvdyAmJiBmb2xkTGluZS5lbmQucm93ID49IGRvY1Jvdykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmb2xkTGluZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZExpbmUuZW5kLnJvdyA+IGRvY1Jvdykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgdGhpcy5nZXROZXh0Rm9sZExpbmUgPSBmdW5jdGlvbihkb2NSb3csIHN0YXJ0Rm9sZExpbmUpIHtcbiAgICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy4kZm9sZERhdGE7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgaWYgKHN0YXJ0Rm9sZExpbmUpXG4gICAgICAgICAgICBpID0gZm9sZERhdGEuaW5kZXhPZihzdGFydEZvbGRMaW5lKTtcbiAgICAgICAgaWYgKGkgPT0gLTEpXG4gICAgICAgICAgICBpID0gMDtcbiAgICAgICAgZm9yIChpOyBpIDwgZm9sZERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBmb2xkTGluZSA9IGZvbGREYXRhW2ldO1xuICAgICAgICAgICAgaWYgKGZvbGRMaW5lLmVuZC5yb3cgPj0gZG9jUm93KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvbGRMaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICB0aGlzLmdldEZvbGRlZFJvd0NvdW50ID0gZnVuY3Rpb24oZmlyc3QsIGxhc3QpIHtcbiAgICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy4kZm9sZERhdGEsIHJvd0NvdW50ID0gbGFzdC1maXJzdCsxO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGREYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZm9sZExpbmUgPSBmb2xkRGF0YVtpXSxcbiAgICAgICAgICAgICAgICBlbmQgPSBmb2xkTGluZS5lbmQucm93LFxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gZm9sZExpbmUuc3RhcnQucm93O1xuICAgICAgICAgICAgaWYgKGVuZCA+PSBsYXN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0IDwgbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gZmlyc3QpXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dDb3VudCAtPSBsYXN0LXN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dDb3VudCA9IDA7IC8vIGluIG9uZSBmb2xkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbmQgPj0gZmlyc3Qpe1xuICAgICAgICAgICAgICAgIGlmIChzdGFydCA+PSBmaXJzdCkgLy8gZm9sZCBpbnNpZGUgcmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgcm93Q291bnQgLT0gIGVuZC1zdGFydDtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJvd0NvdW50IC09ICBlbmQtZmlyc3QrMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm93Q291bnQ7XG4gICAgfTtcblxuICAgIHRoaXMuJGFkZEZvbGRMaW5lID0gZnVuY3Rpb24oZm9sZExpbmUpIHtcbiAgICAgICAgdGhpcy4kZm9sZERhdGEucHVzaChmb2xkTGluZSk7XG4gICAgICAgIHRoaXMuJGZvbGREYXRhLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGEuc3RhcnQucm93IC0gYi5zdGFydC5yb3c7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZm9sZExpbmU7XG4gICAgfTtcbiAgICB0aGlzLmFkZEZvbGQgPSBmdW5jdGlvbihwbGFjZWhvbGRlciwgcmFuZ2UpIHtcbiAgICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy4kZm9sZERhdGE7XG4gICAgICAgIHZhciBhZGRlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZm9sZDtcbiAgICAgICAgXG4gICAgICAgIGlmIChwbGFjZWhvbGRlciBpbnN0YW5jZW9mIEZvbGQpXG4gICAgICAgICAgICBmb2xkID0gcGxhY2Vob2xkZXI7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9sZCA9IG5ldyBGb2xkKHJhbmdlLCBwbGFjZWhvbGRlcik7XG4gICAgICAgICAgICBmb2xkLmNvbGxhcHNlQ2hpbGRyZW4gPSByYW5nZS5jb2xsYXBzZUNoaWxkcmVuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuJGNsaXBSYW5nZVRvRG9jdW1lbnQoZm9sZC5yYW5nZSk7XG5cbiAgICAgICAgdmFyIHN0YXJ0Um93ID0gZm9sZC5zdGFydC5yb3c7XG4gICAgICAgIHZhciBzdGFydENvbHVtbiA9IGZvbGQuc3RhcnQuY29sdW1uO1xuICAgICAgICB2YXIgZW5kUm93ID0gZm9sZC5lbmQucm93O1xuICAgICAgICB2YXIgZW5kQ29sdW1uID0gZm9sZC5lbmQuY29sdW1uO1xuICAgICAgICBpZiAoIShzdGFydFJvdyA8IGVuZFJvdyB8fCBcbiAgICAgICAgICAgIHN0YXJ0Um93ID09IGVuZFJvdyAmJiBzdGFydENvbHVtbiA8PSBlbmRDb2x1bW4gLSAyKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSByYW5nZSBoYXMgdG8gYmUgYXQgbGVhc3QgMiBjaGFyYWN0ZXJzIHdpZHRoXCIpO1xuXG4gICAgICAgIHZhciBzdGFydEZvbGQgPSB0aGlzLmdldEZvbGRBdChzdGFydFJvdywgc3RhcnRDb2x1bW4sIDEpO1xuICAgICAgICB2YXIgZW5kRm9sZCA9IHRoaXMuZ2V0Rm9sZEF0KGVuZFJvdywgZW5kQ29sdW1uLCAtMSk7XG4gICAgICAgIGlmIChzdGFydEZvbGQgJiYgZW5kRm9sZCA9PSBzdGFydEZvbGQpXG4gICAgICAgICAgICByZXR1cm4gc3RhcnRGb2xkLmFkZFN1YkZvbGQoZm9sZCk7XG5cbiAgICAgICAgaWYgKHN0YXJ0Rm9sZCAmJiAhc3RhcnRGb2xkLnJhbmdlLmlzU3RhcnQoc3RhcnRSb3csIHN0YXJ0Q29sdW1uKSlcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRm9sZChzdGFydEZvbGQpO1xuICAgICAgICBcbiAgICAgICAgaWYgKGVuZEZvbGQgJiYgIWVuZEZvbGQucmFuZ2UuaXNFbmQoZW5kUm93LCBlbmRDb2x1bW4pKVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVGb2xkKGVuZEZvbGQpO1xuICAgICAgICB2YXIgZm9sZHMgPSB0aGlzLmdldEZvbGRzSW5SYW5nZShmb2xkLnJhbmdlKTtcbiAgICAgICAgaWYgKGZvbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRm9sZHMoZm9sZHMpO1xuICAgICAgICAgICAgZm9sZHMuZm9yRWFjaChmdW5jdGlvbihzdWJGb2xkKSB7XG4gICAgICAgICAgICAgICAgZm9sZC5hZGRTdWJGb2xkKHN1YkZvbGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGREYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZm9sZExpbmUgPSBmb2xkRGF0YVtpXTtcbiAgICAgICAgICAgIGlmIChlbmRSb3cgPT0gZm9sZExpbmUuc3RhcnQucm93KSB7XG4gICAgICAgICAgICAgICAgZm9sZExpbmUuYWRkRm9sZChmb2xkKTtcbiAgICAgICAgICAgICAgICBhZGRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0Um93ID09IGZvbGRMaW5lLmVuZC5yb3cpIHtcbiAgICAgICAgICAgICAgICBmb2xkTGluZS5hZGRGb2xkKGZvbGQpO1xuICAgICAgICAgICAgICAgIGFkZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoIWZvbGQuc2FtZVJvdykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmVOZXh0ID0gZm9sZERhdGFbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZExpbmVOZXh0ICYmIGZvbGRMaW5lTmV4dC5zdGFydC5yb3cgPT0gZW5kUm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5tZXJnZShmb2xkTGluZU5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVuZFJvdyA8PSBmb2xkTGluZS5zdGFydC5yb3cpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYWRkZWQpXG4gICAgICAgICAgICBmb2xkTGluZSA9IHRoaXMuJGFkZEZvbGRMaW5lKG5ldyBGb2xkTGluZSh0aGlzLiRmb2xkRGF0YSwgZm9sZCkpO1xuXG4gICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSlcbiAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVdyYXBEYXRhKGZvbGRMaW5lLnN0YXJ0LnJvdywgZm9sZExpbmUuc3RhcnQucm93KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy4kdXBkYXRlUm93TGVuZ3RoQ2FjaGUoZm9sZExpbmUuc3RhcnQucm93LCBmb2xkTGluZS5zdGFydC5yb3cpO1xuICAgICAgICB0aGlzLiRtb2RpZmllZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZUZvbGRcIiwgeyBkYXRhOiBmb2xkLCBhY3Rpb246IFwiYWRkXCIgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZvbGQ7XG4gICAgfTtcblxuICAgIHRoaXMuYWRkRm9sZHMgPSBmdW5jdGlvbihmb2xkcykge1xuICAgICAgICBmb2xkcy5mb3JFYWNoKGZ1bmN0aW9uKGZvbGQpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRm9sZChmb2xkKTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfTtcblxuICAgIHRoaXMucmVtb3ZlRm9sZCA9IGZ1bmN0aW9uKGZvbGQpIHtcbiAgICAgICAgdmFyIGZvbGRMaW5lID0gZm9sZC5mb2xkTGluZTtcbiAgICAgICAgdmFyIHN0YXJ0Um93ID0gZm9sZExpbmUuc3RhcnQucm93O1xuICAgICAgICB2YXIgZW5kUm93ID0gZm9sZExpbmUuZW5kLnJvdztcblxuICAgICAgICB2YXIgZm9sZExpbmVzID0gdGhpcy4kZm9sZERhdGE7XG4gICAgICAgIHZhciBmb2xkcyA9IGZvbGRMaW5lLmZvbGRzO1xuICAgICAgICBpZiAoZm9sZHMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgIGZvbGRMaW5lcy5zcGxpY2UoZm9sZExpbmVzLmluZGV4T2YoZm9sZExpbmUpLCAxKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgIGlmIChmb2xkTGluZS5yYW5nZS5pc0VuZChmb2xkLmVuZC5yb3csIGZvbGQuZW5kLmNvbHVtbikpIHtcbiAgICAgICAgICAgIGZvbGRzLnBvcCgpO1xuICAgICAgICAgICAgZm9sZExpbmUuZW5kLnJvdyA9IGZvbGRzW2ZvbGRzLmxlbmd0aCAtIDFdLmVuZC5yb3c7XG4gICAgICAgICAgICBmb2xkTGluZS5lbmQuY29sdW1uID0gZm9sZHNbZm9sZHMubGVuZ3RoIC0gMV0uZW5kLmNvbHVtbjtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgIGlmIChmb2xkTGluZS5yYW5nZS5pc1N0YXJ0KGZvbGQuc3RhcnQucm93LCBmb2xkLnN0YXJ0LmNvbHVtbikpIHtcbiAgICAgICAgICAgIGZvbGRzLnNoaWZ0KCk7XG4gICAgICAgICAgICBmb2xkTGluZS5zdGFydC5yb3cgPSBmb2xkc1swXS5zdGFydC5yb3c7XG4gICAgICAgICAgICBmb2xkTGluZS5zdGFydC5jb2x1bW4gPSBmb2xkc1swXS5zdGFydC5jb2x1bW47XG4gICAgICAgIH0gZWxzZVxuICAgICAgICBpZiAoZm9sZC5zYW1lUm93KSB7XG4gICAgICAgICAgICBmb2xkcy5zcGxpY2UoZm9sZHMuaW5kZXhPZihmb2xkKSwgMSk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgbmV3Rm9sZExpbmUgPSBmb2xkTGluZS5zcGxpdChmb2xkLnN0YXJ0LnJvdywgZm9sZC5zdGFydC5jb2x1bW4pO1xuICAgICAgICAgICAgZm9sZHMgPSBuZXdGb2xkTGluZS5mb2xkcztcbiAgICAgICAgICAgIGZvbGRzLnNoaWZ0KCk7XG4gICAgICAgICAgICBuZXdGb2xkTGluZS5zdGFydC5yb3cgPSBmb2xkc1swXS5zdGFydC5yb3c7XG4gICAgICAgICAgICBuZXdGb2xkTGluZS5zdGFydC5jb2x1bW4gPSBmb2xkc1swXS5zdGFydC5jb2x1bW47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuJHVwZGF0aW5nKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUpXG4gICAgICAgICAgICAgICAgdGhpcy4kdXBkYXRlV3JhcERhdGEoc3RhcnRSb3csIGVuZFJvdyk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy4kdXBkYXRlUm93TGVuZ3RoQ2FjaGUoc3RhcnRSb3csIGVuZFJvdyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9zaWduYWwoXCJjaGFuZ2VGb2xkXCIsIHsgZGF0YTogZm9sZCwgYWN0aW9uOiBcInJlbW92ZVwiIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLnJlbW92ZUZvbGRzID0gZnVuY3Rpb24oZm9sZHMpIHtcbiAgICAgICAgdmFyIGNsb25lRm9sZHMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmVGb2xkcy5wdXNoKGZvbGRzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb25lRm9sZHMuZm9yRWFjaChmdW5jdGlvbihmb2xkKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZvbGQoZm9sZCk7XG4gICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB0aGlzLiRtb2RpZmllZCA9IHRydWU7XG4gICAgfTtcblxuICAgIHRoaXMuZXhwYW5kRm9sZCA9IGZ1bmN0aW9uKGZvbGQpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVGb2xkKGZvbGQpO1xuICAgICAgICBmb2xkLnN1YkZvbGRzLmZvckVhY2goZnVuY3Rpb24oc3ViRm9sZCkge1xuICAgICAgICAgICAgZm9sZC5yZXN0b3JlUmFuZ2Uoc3ViRm9sZCk7XG4gICAgICAgICAgICB0aGlzLmFkZEZvbGQoc3ViRm9sZCk7XG4gICAgICAgIH0sIHRoaXMpO1xuICAgICAgICBpZiAoZm9sZC5jb2xsYXBzZUNoaWxkcmVuID4gMCkge1xuICAgICAgICAgICAgdGhpcy5mb2xkQWxsKGZvbGQuc3RhcnQucm93KzEsIGZvbGQuZW5kLnJvdywgZm9sZC5jb2xsYXBzZUNoaWxkcmVuLTEpO1xuICAgICAgICB9XG4gICAgICAgIGZvbGQuc3ViRm9sZHMgPSBbXTtcbiAgICB9O1xuXG4gICAgdGhpcy5leHBhbmRGb2xkcyA9IGZ1bmN0aW9uKGZvbGRzKSB7XG4gICAgICAgIGZvbGRzLmZvckVhY2goZnVuY3Rpb24oZm9sZCkge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRGb2xkKGZvbGQpO1xuICAgICAgICB9LCB0aGlzKTtcbiAgICB9O1xuXG4gICAgdGhpcy51bmZvbGQgPSBmdW5jdGlvbihsb2NhdGlvbiwgZXhwYW5kSW5uZXIpIHtcbiAgICAgICAgdmFyIHJhbmdlLCBmb2xkcztcbiAgICAgICAgaWYgKGxvY2F0aW9uID09IG51bGwpIHtcbiAgICAgICAgICAgIHJhbmdlID0gbmV3IFJhbmdlKDAsIDAsIHRoaXMuZ2V0TGVuZ3RoKCksIDApO1xuICAgICAgICAgICAgZXhwYW5kSW5uZXIgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsb2NhdGlvbiA9PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgcmFuZ2UgPSBuZXcgUmFuZ2UobG9jYXRpb24sIDAsIGxvY2F0aW9uLCB0aGlzLmdldExpbmUobG9jYXRpb24pLmxlbmd0aCk7XG4gICAgICAgIGVsc2UgaWYgKFwicm93XCIgaW4gbG9jYXRpb24pXG4gICAgICAgICAgICByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMobG9jYXRpb24sIGxvY2F0aW9uKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmFuZ2UgPSBsb2NhdGlvbjtcbiAgICAgICAgXG4gICAgICAgIGZvbGRzID0gdGhpcy5nZXRGb2xkc0luUmFuZ2VMaXN0KHJhbmdlKTtcbiAgICAgICAgaWYgKGV4cGFuZElubmVyKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZvbGRzKGZvbGRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBzdWJGb2xkcyA9IGZvbGRzO1xuICAgICAgICAgICAgd2hpbGUgKHN1YkZvbGRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kRm9sZHMoc3ViRm9sZHMpO1xuICAgICAgICAgICAgICAgIHN1YkZvbGRzID0gdGhpcy5nZXRGb2xkc0luUmFuZ2VMaXN0KHJhbmdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9sZHMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIGZvbGRzO1xuICAgIH07XG4gICAgdGhpcy5pc1Jvd0ZvbGRlZCA9IGZ1bmN0aW9uKGRvY1Jvdywgc3RhcnRGb2xkUm93KSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZ2V0Rm9sZExpbmUoZG9jUm93LCBzdGFydEZvbGRSb3cpO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFJvd0ZvbGRFbmQgPSBmdW5jdGlvbihkb2NSb3csIHN0YXJ0Rm9sZFJvdykge1xuICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLmdldEZvbGRMaW5lKGRvY1Jvdywgc3RhcnRGb2xkUm93KTtcbiAgICAgICAgcmV0dXJuIGZvbGRMaW5lID8gZm9sZExpbmUuZW5kLnJvdyA6IGRvY1JvdztcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRSb3dGb2xkU3RhcnQgPSBmdW5jdGlvbihkb2NSb3csIHN0YXJ0Rm9sZFJvdykge1xuICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLmdldEZvbGRMaW5lKGRvY1Jvdywgc3RhcnRGb2xkUm93KTtcbiAgICAgICAgcmV0dXJuIGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogZG9jUm93O1xuICAgIH07XG5cbiAgICB0aGlzLmdldEZvbGREaXNwbGF5TGluZSA9IGZ1bmN0aW9uKGZvbGRMaW5lLCBlbmRSb3csIGVuZENvbHVtbiwgc3RhcnRSb3csIHN0YXJ0Q29sdW1uKSB7XG4gICAgICAgIGlmIChzdGFydFJvdyA9PSBudWxsKVxuICAgICAgICAgICAgc3RhcnRSb3cgPSBmb2xkTGluZS5zdGFydC5yb3c7XG4gICAgICAgIGlmIChzdGFydENvbHVtbiA9PSBudWxsKVxuICAgICAgICAgICAgc3RhcnRDb2x1bW4gPSAwO1xuICAgICAgICBpZiAoZW5kUm93ID09IG51bGwpXG4gICAgICAgICAgICBlbmRSb3cgPSBmb2xkTGluZS5lbmQucm93O1xuICAgICAgICBpZiAoZW5kQ29sdW1uID09IG51bGwpXG4gICAgICAgICAgICBlbmRDb2x1bW4gPSB0aGlzLmdldExpbmUoZW5kUm93KS5sZW5ndGg7XG4gICAgICAgIHZhciBkb2MgPSB0aGlzLmRvYztcbiAgICAgICAgdmFyIHRleHRMaW5lID0gXCJcIjtcblxuICAgICAgICBmb2xkTGluZS53YWxrKGZ1bmN0aW9uKHBsYWNlaG9sZGVyLCByb3csIGNvbHVtbiwgbGFzdENvbHVtbikge1xuICAgICAgICAgICAgaWYgKHJvdyA8IHN0YXJ0Um93KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmIChyb3cgPT0gc3RhcnRSb3cpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uIDwgc3RhcnRDb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBsYXN0Q29sdW1uID0gTWF0aC5tYXgoc3RhcnRDb2x1bW4sIGxhc3RDb2x1bW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGxhY2Vob2xkZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRleHRMaW5lICs9IHBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXh0TGluZSArPSBkb2MuZ2V0TGluZShyb3cpLnN1YnN0cmluZyhsYXN0Q29sdW1uLCBjb2x1bW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBlbmRSb3csIGVuZENvbHVtbik7XG4gICAgICAgIHJldHVybiB0ZXh0TGluZTtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXREaXNwbGF5TGluZSA9IGZ1bmN0aW9uKHJvdywgZW5kQ29sdW1uLCBzdGFydFJvdywgc3RhcnRDb2x1bW4pIHtcbiAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5nZXRGb2xkTGluZShyb3cpO1xuXG4gICAgICAgIGlmICghZm9sZExpbmUpIHtcbiAgICAgICAgICAgIHZhciBsaW5lO1xuICAgICAgICAgICAgbGluZSA9IHRoaXMuZG9jLmdldExpbmUocm93KTtcbiAgICAgICAgICAgIHJldHVybiBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbiB8fCAwLCBlbmRDb2x1bW4gfHwgbGluZS5sZW5ndGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9sZERpc3BsYXlMaW5lKFxuICAgICAgICAgICAgICAgIGZvbGRMaW5lLCByb3csIGVuZENvbHVtbiwgc3RhcnRSb3csIHN0YXJ0Q29sdW1uKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLiRjbG9uZUZvbGREYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBmZCA9IFtdO1xuICAgICAgICBmZCA9IHRoaXMuJGZvbGREYXRhLm1hcChmdW5jdGlvbihmb2xkTGluZSkge1xuICAgICAgICAgICAgdmFyIGZvbGRzID0gZm9sZExpbmUuZm9sZHMubWFwKGZ1bmN0aW9uKGZvbGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9sZC5jbG9uZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZvbGRMaW5lKGZkLCBmb2xkcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBmZDtcbiAgICB9O1xuXG4gICAgdGhpcy50b2dnbGVGb2xkID0gZnVuY3Rpb24odHJ5VG9VbmZvbGQpIHtcbiAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uO1xuICAgICAgICB2YXIgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2UoKTtcbiAgICAgICAgdmFyIGZvbGQ7XG4gICAgICAgIHZhciBicmFja2V0UG9zO1xuXG4gICAgICAgIGlmIChyYW5nZS5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIHZhciBjdXJzb3IgPSByYW5nZS5zdGFydDtcbiAgICAgICAgICAgIGZvbGQgPSB0aGlzLmdldEZvbGRBdChjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTtcblxuICAgICAgICAgICAgaWYgKGZvbGQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEZvbGQoZm9sZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChicmFja2V0UG9zID0gdGhpcy5maW5kTWF0Y2hpbmdCcmFja2V0KGN1cnNvcikpIHtcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2UuY29tcGFyZVBvaW50KGJyYWNrZXRQb3MpID09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UuZW5kID0gYnJhY2tldFBvcztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByYW5nZS5zdGFydCA9IGJyYWNrZXRQb3M7XG4gICAgICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbisrO1xuICAgICAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uLS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChicmFja2V0UG9zID0gdGhpcy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IGN1cnNvci5yb3csIGNvbHVtbjogY3Vyc29yLmNvbHVtbiArIDF9KSkge1xuICAgICAgICAgICAgICAgIGlmIChyYW5nZS5jb21wYXJlUG9pbnQoYnJhY2tldFBvcykgPT0gMSlcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UuZW5kID0gYnJhY2tldFBvcztcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0ID0gYnJhY2tldFBvcztcblxuICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbisrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0Q29tbWVudEZvbGRSYW5nZShjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKSB8fCByYW5nZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBmb2xkcyA9IHRoaXMuZ2V0Rm9sZHNJblJhbmdlKHJhbmdlKTtcbiAgICAgICAgICAgIGlmICh0cnlUb1VuZm9sZCAmJiBmb2xkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEZvbGRzKGZvbGRzKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRzLmxlbmd0aCA9PSAxICkge1xuICAgICAgICAgICAgICAgIGZvbGQgPSBmb2xkc1swXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZm9sZClcbiAgICAgICAgICAgIGZvbGQgPSB0aGlzLmdldEZvbGRBdChyYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LmNvbHVtbik7XG5cbiAgICAgICAgaWYgKGZvbGQgJiYgZm9sZC5yYW5nZS50b1N0cmluZygpID09IHJhbmdlLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kRm9sZChmb2xkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwbGFjZWhvbGRlciA9IFwiLi4uXCI7XG4gICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSkge1xuICAgICAgICAgICAgcGxhY2Vob2xkZXIgPSB0aGlzLmdldFRleHRSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICBpZiAocGxhY2Vob2xkZXIubGVuZ3RoIDwgNClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBwbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyLnRyaW0oKS5zdWJzdHJpbmcoMCwgMikgKyBcIi4uXCI7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkZEZvbGQocGxhY2Vob2xkZXIsIHJhbmdlKTtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRDb21tZW50Rm9sZFJhbmdlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIGRpcikge1xuICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcih0aGlzLCByb3csIGNvbHVtbik7XG4gICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpO1xuICAgICAgICB2YXIgdHlwZSA9IHRva2VuLnR5cGU7XG4gICAgICAgIGlmICh0b2tlbiAmJiAvXmNvbW1lbnR8c3RyaW5nLy50ZXN0KHR5cGUpKSB7XG4gICAgICAgICAgICB0eXBlID0gdHlwZS5tYXRjaCgvY29tbWVudHxzdHJpbmcvKVswXTtcbiAgICAgICAgICAgIGlmICh0eXBlID09IFwiY29tbWVudFwiKVxuICAgICAgICAgICAgICAgIHR5cGUgKz0gXCJ8ZG9jLXN0YXJ0XCI7XG4gICAgICAgICAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKHR5cGUpO1xuICAgICAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gICAgICAgICAgICBpZiAoZGlyICE9IDEpIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAodG9rZW4gJiYgcmUudGVzdCh0b2tlbi50eXBlKSk7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmFuZ2Uuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7XG4gICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIDI7XG5cbiAgICAgICAgICAgIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3IodGhpcywgcm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoZGlyICE9IC0xKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhc3RSb3cgPSAtMTtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RSb3cgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoaXRlcmF0b3IuJHJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlLnRlc3Qoc3RhdGUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RSb3cgPSBpdGVyYXRvci4kcm93O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZXJhdG9yLiRyb3cgPiBsYXN0Um93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKHRva2VuICYmIHJlLnRlc3QodG9rZW4udHlwZSkpO1xuICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpO1xuXG4gICAgICAgICAgICByYW5nZS5lbmQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7XG4gICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGggLSAyO1xuICAgICAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuZm9sZEFsbCA9IGZ1bmN0aW9uKHN0YXJ0Um93LCBlbmRSb3csIGRlcHRoKSB7XG4gICAgICAgIGlmIChkZXB0aCA9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBkZXB0aCA9IDEwMDAwMDsgLy8gSlNPTi5zdHJpbmdpZnkgZG9lc24ndCBoYW5sZSBJbmZpbml0eVxuICAgICAgICB2YXIgZm9sZFdpZGdldHMgPSB0aGlzLmZvbGRXaWRnZXRzO1xuICAgICAgICBpZiAoIWZvbGRXaWRnZXRzKVxuICAgICAgICAgICAgcmV0dXJuOyAvLyBtb2RlIGRvZXNuJ3Qgc3VwcG9ydCBmb2xkaW5nXG4gICAgICAgIGVuZFJvdyA9IGVuZFJvdyB8fCB0aGlzLmdldExlbmd0aCgpO1xuICAgICAgICBzdGFydFJvdyA9IHN0YXJ0Um93IHx8IDA7XG4gICAgICAgIGZvciAodmFyIHJvdyA9IHN0YXJ0Um93OyByb3cgPCBlbmRSb3c7IHJvdysrKSB7XG4gICAgICAgICAgICBpZiAoZm9sZFdpZGdldHNbcm93XSA9PSBudWxsKVxuICAgICAgICAgICAgICAgIGZvbGRXaWRnZXRzW3Jvd10gPSB0aGlzLmdldEZvbGRXaWRnZXQocm93KTtcbiAgICAgICAgICAgIGlmIChmb2xkV2lkZ2V0c1tyb3ddICE9IFwic3RhcnRcIilcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uocm93KTtcbiAgICAgICAgICAgIGlmIChyYW5nZSAmJiByYW5nZS5pc011bHRpTGluZSgpXG4gICAgICAgICAgICAgICAgJiYgcmFuZ2UuZW5kLnJvdyA8PSBlbmRSb3dcbiAgICAgICAgICAgICAgICAmJiByYW5nZS5zdGFydC5yb3cgPj0gc3RhcnRSb3dcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJvdyA9IHJhbmdlLmVuZC5yb3c7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvbGQgPSB0aGlzLmFkZEZvbGQoXCIuLi5cIiwgcmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZClcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbGQuY29sbGFwc2VDaGlsZHJlbiA9IGRlcHRoO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkge31cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy4kZm9sZFN0eWxlcyA9IHtcbiAgICAgICAgXCJtYW51YWxcIjogMSxcbiAgICAgICAgXCJtYXJrYmVnaW5cIjogMSxcbiAgICAgICAgXCJtYXJrYmVnaW5lbmRcIjogMVxuICAgIH07XG4gICAgdGhpcy4kZm9sZFN0eWxlID0gXCJtYXJrYmVnaW5cIjtcbiAgICB0aGlzLnNldEZvbGRTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlKSB7XG4gICAgICAgIGlmICghdGhpcy4kZm9sZFN0eWxlc1tzdHlsZV0pXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGZvbGQgc3R5bGU6IFwiICsgc3R5bGUgKyBcIltcIiArIE9iamVjdC5rZXlzKHRoaXMuJGZvbGRTdHlsZXMpLmpvaW4oXCIsIFwiKSArIFwiXVwiKTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0aGlzLiRmb2xkU3R5bGUgPT0gc3R5bGUpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy4kZm9sZFN0eWxlID0gc3R5bGU7XG4gICAgICAgIFxuICAgICAgICBpZiAoc3R5bGUgPT0gXCJtYW51YWxcIilcbiAgICAgICAgICAgIHRoaXMudW5mb2xkKCk7XG4gICAgICAgIHZhciBtb2RlID0gdGhpcy4kZm9sZE1vZGU7XG4gICAgICAgIHRoaXMuJHNldEZvbGRpbmcobnVsbCk7XG4gICAgICAgIHRoaXMuJHNldEZvbGRpbmcobW9kZSk7XG4gICAgfTtcblxuICAgIHRoaXMuJHNldEZvbGRpbmcgPSBmdW5jdGlvbihmb2xkTW9kZSkge1xuICAgICAgICBpZiAodGhpcy4kZm9sZE1vZGUgPT0gZm9sZE1vZGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBcbiAgICAgICAgdGhpcy4kZm9sZE1vZGUgPSBmb2xkTW9kZTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMub2ZmKCdjaGFuZ2UnLCB0aGlzLiR1cGRhdGVGb2xkV2lkZ2V0cyk7XG4gICAgICAgIHRoaXMub2ZmKCd0b2tlbml6ZXJVcGRhdGUnLCB0aGlzLiR0b2tlbml6ZXJVcGRhdGVGb2xkV2lkZ2V0cyk7XG4gICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZUFubm90YXRpb25cIik7XG4gICAgICAgIFxuICAgICAgICBpZiAoIWZvbGRNb2RlIHx8IHRoaXMuJGZvbGRTdHlsZSA9PSBcIm1hbnVhbFwiKSB7XG4gICAgICAgICAgICB0aGlzLmZvbGRXaWRnZXRzID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdGhpcy5mb2xkV2lkZ2V0cyA9IFtdO1xuICAgICAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmb2xkTW9kZS5nZXRGb2xkV2lkZ2V0LmJpbmQoZm9sZE1vZGUsIHRoaXMsIHRoaXMuJGZvbGRTdHlsZSk7XG4gICAgICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZm9sZE1vZGUuZ2V0Rm9sZFdpZGdldFJhbmdlLmJpbmQoZm9sZE1vZGUsIHRoaXMsIHRoaXMuJGZvbGRTdHlsZSk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLiR1cGRhdGVGb2xkV2lkZ2V0cyA9IHRoaXMudXBkYXRlRm9sZFdpZGdldHMuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy4kdG9rZW5pemVyVXBkYXRlRm9sZFdpZGdldHMgPSB0aGlzLnRva2VuaXplclVwZGF0ZUZvbGRXaWRnZXRzLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub24oJ2NoYW5nZScsIHRoaXMuJHVwZGF0ZUZvbGRXaWRnZXRzKTtcbiAgICAgICAgdGhpcy5vbigndG9rZW5pemVyVXBkYXRlJywgdGhpcy4kdG9rZW5pemVyVXBkYXRlRm9sZFdpZGdldHMpO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFBhcmVudEZvbGRSYW5nZURhdGEgPSBmdW5jdGlvbiAocm93LCBpZ25vcmVDdXJyZW50KSB7XG4gICAgICAgIHZhciBmdyA9IHRoaXMuZm9sZFdpZGdldHM7XG4gICAgICAgIGlmICghZncgfHwgKGlnbm9yZUN1cnJlbnQgJiYgZndbcm93XSkpXG4gICAgICAgICAgICByZXR1cm4ge307XG5cbiAgICAgICAgdmFyIGkgPSByb3cgLSAxLCBmaXJzdFJhbmdlO1xuICAgICAgICB3aGlsZSAoaSA+PSAwKSB7XG4gICAgICAgICAgICB2YXIgYyA9IGZ3W2ldO1xuICAgICAgICAgICAgaWYgKGMgPT0gbnVsbClcbiAgICAgICAgICAgICAgICBjID0gZndbaV0gPSB0aGlzLmdldEZvbGRXaWRnZXQoaSk7XG5cbiAgICAgICAgICAgIGlmIChjID09IFwic3RhcnRcIikge1xuICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKGkpO1xuICAgICAgICAgICAgICAgIGlmICghZmlyc3RSYW5nZSlcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RSYW5nZSA9IHJhbmdlO1xuICAgICAgICAgICAgICAgIGlmIChyYW5nZSAmJiByYW5nZS5lbmQucm93ID49IHJvdylcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpLS07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmFuZ2U6IGkgIT09IC0xICYmIHJhbmdlLFxuICAgICAgICAgICAgZmlyc3RSYW5nZTogZmlyc3RSYW5nZVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB0aGlzLm9uRm9sZFdpZGdldENsaWNrID0gZnVuY3Rpb24ocm93LCBlKSB7XG4gICAgICAgIGUgPSBlLmRvbUV2ZW50O1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBlLnNoaWZ0S2V5LFxuICAgICAgICAgICAgYWxsOiBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5LFxuICAgICAgICAgICAgc2libGluZ3M6IGUuYWx0S2V5XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLiR0b2dnbGVGb2xkV2lkZ2V0KHJvdywgb3B0aW9ucyk7XG4gICAgICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgICAgIHZhciBlbCA9IChlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGVsICYmIC9hY2VfZm9sZC13aWRnZXQvLnRlc3QoZWwuY2xhc3NOYW1lKSlcbiAgICAgICAgICAgICAgICBlbC5jbGFzc05hbWUgKz0gXCIgYWNlX2ludmFsaWRcIjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgXG4gICAgdGhpcy4kdG9nZ2xlRm9sZFdpZGdldCA9IGZ1bmN0aW9uKHJvdywgb3B0aW9ucykge1xuICAgICAgICBpZiAoIXRoaXMuZ2V0Rm9sZFdpZGdldClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHR5cGUgPSB0aGlzLmdldEZvbGRXaWRnZXQocm93KTtcbiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUocm93KTtcblxuICAgICAgICB2YXIgZGlyID0gdHlwZSA9PT0gXCJlbmRcIiA/IC0xIDogMTtcbiAgICAgICAgdmFyIGZvbGQgPSB0aGlzLmdldEZvbGRBdChyb3csIGRpciA9PT0gLTEgPyAwIDogbGluZS5sZW5ndGgsIGRpcik7XG5cbiAgICAgICAgaWYgKGZvbGQpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmNoaWxkcmVuIHx8IG9wdGlvbnMuYWxsKVxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRm9sZChmb2xkKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEZvbGQoZm9sZCk7XG4gICAgICAgICAgICByZXR1cm4gZm9sZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHJvdywgdHJ1ZSk7XG4gICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkge1xuICAgICAgICAgICAgZm9sZCA9IHRoaXMuZ2V0Rm9sZEF0KHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uLCAxKTtcbiAgICAgICAgICAgIGlmIChmb2xkICYmIHJhbmdlLmlzRXF1YWwoZm9sZC5yYW5nZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZvbGQoZm9sZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvbGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmIChvcHRpb25zLnNpYmxpbmdzKSB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ2V0UGFyZW50Rm9sZFJhbmdlRGF0YShyb3cpO1xuICAgICAgICAgICAgaWYgKGRhdGEucmFuZ2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnRSb3cgPSBkYXRhLnJhbmdlLnN0YXJ0LnJvdyArIDE7XG4gICAgICAgICAgICAgICAgdmFyIGVuZFJvdyA9IGRhdGEucmFuZ2UuZW5kLnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZm9sZEFsbChzdGFydFJvdywgZW5kUm93LCBvcHRpb25zLmFsbCA/IDEwMDAwIDogMCk7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5jaGlsZHJlbikge1xuICAgICAgICAgICAgZW5kUm93ID0gcmFuZ2UgPyByYW5nZS5lbmQucm93IDogdGhpcy5nZXRMZW5ndGgoKTtcbiAgICAgICAgICAgIHRoaXMuZm9sZEFsbChyb3cgKyAxLCBlbmRSb3csIG9wdGlvbnMuYWxsID8gMTAwMDAgOiAwKTtcbiAgICAgICAgfSBlbHNlIGlmIChyYW5nZSkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWxsKSBcbiAgICAgICAgICAgICAgICByYW5nZS5jb2xsYXBzZUNoaWxkcmVuID0gMTAwMDA7XG4gICAgICAgICAgICB0aGlzLmFkZEZvbGQoXCIuLi5cIiwgcmFuZ2UpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgfTtcbiAgICBcbiAgICBcbiAgICBcbiAgICB0aGlzLnRvZ2dsZUZvbGRXaWRnZXQgPSBmdW5jdGlvbih0b2dnbGVQYXJlbnQpIHtcbiAgICAgICAgdmFyIHJvdyA9IHRoaXMuc2VsZWN0aW9uLmdldEN1cnNvcigpLnJvdztcbiAgICAgICAgcm93ID0gdGhpcy5nZXRSb3dGb2xkU3RhcnQocm93KTtcbiAgICAgICAgdmFyIHJhbmdlID0gdGhpcy4kdG9nZ2xlRm9sZFdpZGdldChyb3csIHt9KTtcbiAgICAgICAgXG4gICAgICAgIGlmIChyYW5nZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmdldFBhcmVudEZvbGRSYW5nZURhdGEocm93LCB0cnVlKTtcbiAgICAgICAgcmFuZ2UgPSBkYXRhLnJhbmdlIHx8IGRhdGEuZmlyc3RSYW5nZTtcbiAgICAgICAgXG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgICAgcm93ID0gcmFuZ2Uuc3RhcnQucm93O1xuICAgICAgICAgICAgdmFyIGZvbGQgPSB0aGlzLmdldEZvbGRBdChyb3csIHRoaXMuZ2V0TGluZShyb3cpLmxlbmd0aCwgMSk7XG5cbiAgICAgICAgICAgIGlmIChmb2xkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGb2xkKGZvbGQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZvbGQoXCIuLi5cIiwgcmFuZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlRm9sZFdpZGdldHMgPSBmdW5jdGlvbihkZWx0YSkge1xuICAgICAgICB2YXIgZmlyc3RSb3cgPSBkZWx0YS5zdGFydC5yb3c7XG4gICAgICAgIHZhciBsZW4gPSBkZWx0YS5lbmQucm93IC0gZmlyc3RSb3c7XG5cbiAgICAgICAgaWYgKGxlbiA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5mb2xkV2lkZ2V0c1tmaXJzdFJvd10gPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PSAncmVtb3ZlJykge1xuICAgICAgICAgICAgdGhpcy5mb2xkV2lkZ2V0cy5zcGxpY2UoZmlyc3RSb3csIGxlbiArIDEsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheShsZW4gKyAxKTtcbiAgICAgICAgICAgIGFyZ3MudW5zaGlmdChmaXJzdFJvdywgMSk7XG4gICAgICAgICAgICB0aGlzLmZvbGRXaWRnZXRzLnNwbGljZS5hcHBseSh0aGlzLmZvbGRXaWRnZXRzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy50b2tlbml6ZXJVcGRhdGVGb2xkV2lkZ2V0cyA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIHJvd3MgPSBlLmRhdGE7XG4gICAgICAgIGlmIChyb3dzLmZpcnN0ICE9IHJvd3MubGFzdCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9sZFdpZGdldHMubGVuZ3RoID4gcm93cy5maXJzdClcbiAgICAgICAgICAgICAgICB0aGlzLmZvbGRXaWRnZXRzLnNwbGljZShyb3dzLmZpcnN0LCB0aGlzLmZvbGRXaWRnZXRzLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5leHBvcnRzLkZvbGRpbmcgPSBGb2xkaW5nO1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9lZGl0X3Nlc3Npb24vYnJhY2tldF9tYXRjaFwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL3Rva2VuX2l0ZXJhdG9yXCIsXCJhY2UvcmFuZ2VcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG52YXIgVG9rZW5JdGVyYXRvciA9IGFjZXF1aXJlKFwiLi4vdG9rZW5faXRlcmF0b3JcIikuVG9rZW5JdGVyYXRvcjtcbnZhciBSYW5nZSA9IGFjZXF1aXJlKFwiLi4vcmFuZ2VcIikuUmFuZ2U7XG5cblxuZnVuY3Rpb24gQnJhY2tldE1hdGNoKCkge1xuXG4gICAgdGhpcy5maW5kTWF0Y2hpbmdCcmFja2V0ID0gZnVuY3Rpb24ocG9zaXRpb24sIGNocikge1xuICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uID09IDApIHJldHVybiBudWxsO1xuXG4gICAgICAgIHZhciBjaGFyQmVmb3JlQ3Vyc29yID0gY2hyIHx8IHRoaXMuZ2V0TGluZShwb3NpdGlvbi5yb3cpLmNoYXJBdChwb3NpdGlvbi5jb2x1bW4tMSk7XG4gICAgICAgIGlmIChjaGFyQmVmb3JlQ3Vyc29yID09IFwiXCIpIHJldHVybiBudWxsO1xuXG4gICAgICAgIHZhciBtYXRjaCA9IGNoYXJCZWZvcmVDdXJzb3IubWF0Y2goLyhbXFwoXFxbXFx7XSl8KFtcXClcXF1cXH1dKS8pO1xuICAgICAgICBpZiAoIW1hdGNoKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgaWYgKG1hdGNoWzFdKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGZpbmRDbG9zaW5nQnJhY2tldChtYXRjaFsxXSwgcG9zaXRpb24pO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kZmluZE9wZW5pbmdCcmFja2V0KG1hdGNoWzJdLCBwb3NpdGlvbik7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmdldEJyYWNrZXRSYW5nZSA9IGZ1bmN0aW9uKHBvcykge1xuICAgICAgICB2YXIgbGluZSA9IHRoaXMuZ2V0TGluZShwb3Mucm93KTtcbiAgICAgICAgdmFyIGJlZm9yZSA9IHRydWUsIHJhbmdlO1xuXG4gICAgICAgIHZhciBjaHIgPSBsaW5lLmNoYXJBdChwb3MuY29sdW1uLTEpO1xuICAgICAgICB2YXIgbWF0Y2ggPSBjaHIgJiYgY2hyLm1hdGNoKC8oW1xcKFxcW1xce10pfChbXFwpXFxdXFx9XSkvKTtcbiAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgICAgY2hyID0gbGluZS5jaGFyQXQocG9zLmNvbHVtbik7XG4gICAgICAgICAgICBwb3MgPSB7cm93OiBwb3Mucm93LCBjb2x1bW46IHBvcy5jb2x1bW4gKyAxfTtcbiAgICAgICAgICAgIG1hdGNoID0gY2hyICYmIGNoci5tYXRjaCgvKFtcXChcXFtcXHtdKXwoW1xcKVxcXVxcfV0pLyk7XG4gICAgICAgICAgICBiZWZvcmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1hdGNoKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgaWYgKG1hdGNoWzFdKSB7XG4gICAgICAgICAgICB2YXIgYnJhY2tldFBvcyA9IHRoaXMuJGZpbmRDbG9zaW5nQnJhY2tldChtYXRjaFsxXSwgcG9zKTtcbiAgICAgICAgICAgIGlmICghYnJhY2tldFBvcylcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhwb3MsIGJyYWNrZXRQb3MpO1xuICAgICAgICAgICAgaWYgKCFiZWZvcmUpIHtcbiAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByYW5nZS5jdXJzb3IgPSByYW5nZS5lbmQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgYnJhY2tldFBvcyA9IHRoaXMuJGZpbmRPcGVuaW5nQnJhY2tldChtYXRjaFsyXSwgcG9zKTtcbiAgICAgICAgICAgIGlmICghYnJhY2tldFBvcylcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhicmFja2V0UG9zLCBwb3MpO1xuICAgICAgICAgICAgaWYgKCFiZWZvcmUpIHtcbiAgICAgICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4rKztcbiAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByYW5nZS5jdXJzb3IgPSByYW5nZS5zdGFydDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgIH07XG5cbiAgICB0aGlzLiRicmFja2V0cyA9IHtcbiAgICAgICAgXCIpXCI6IFwiKFwiLFxuICAgICAgICBcIihcIjogXCIpXCIsXG4gICAgICAgIFwiXVwiOiBcIltcIixcbiAgICAgICAgXCJbXCI6IFwiXVwiLFxuICAgICAgICBcIntcIjogXCJ9XCIsXG4gICAgICAgIFwifVwiOiBcIntcIlxuICAgIH07XG5cbiAgICB0aGlzLiRmaW5kT3BlbmluZ0JyYWNrZXQgPSBmdW5jdGlvbihicmFja2V0LCBwb3NpdGlvbiwgdHlwZVJlKSB7XG4gICAgICAgIHZhciBvcGVuQnJhY2tldCA9IHRoaXMuJGJyYWNrZXRzW2JyYWNrZXRdO1xuICAgICAgICB2YXIgZGVwdGggPSAxO1xuXG4gICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHRoaXMsIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTtcbiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7XG4gICAgICAgIGlmICghdG9rZW4pXG4gICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7XG4gICAgICAgIGlmICghdG9rZW4pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIFxuICAgICAgICAgaWYgKCF0eXBlUmUpe1xuICAgICAgICAgICAgdHlwZVJlID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICBcIihcXFxcLj9cIiArXG4gICAgICAgICAgICAgICAgdG9rZW4udHlwZS5yZXBsYWNlKFwiLlwiLCBcIlxcXFwuXCIpLnJlcGxhY2UoXCJycGFyZW5cIiwgXCIucGFyZW5cIilcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcYig/OmVuZClcXGIvLCBcIig/OnN0YXJ0fGJlZ2lufGVuZClcIilcbiAgICAgICAgICAgICAgICArIFwiKStcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdmFsdWVJbmRleCA9IHBvc2l0aW9uLmNvbHVtbiAtIGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpIC0gMjtcbiAgICAgICAgdmFyIHZhbHVlID0gdG9rZW4udmFsdWU7XG4gICAgICAgIFxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBcbiAgICAgICAgICAgIHdoaWxlICh2YWx1ZUluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgY2hyID0gdmFsdWUuY2hhckF0KHZhbHVlSW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmIChjaHIgPT0gb3BlbkJyYWNrZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVwdGggLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlcHRoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7cm93OiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHZhbHVlSW5kZXggKyBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKX07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hyID09IGJyYWNrZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVwdGggKz0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFsdWVJbmRleCAtPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7XG4gICAgICAgICAgICB9IHdoaWxlICh0b2tlbiAmJiAhdHlwZVJlLnRlc3QodG9rZW4udHlwZSkpO1xuXG4gICAgICAgICAgICBpZiAodG9rZW4gPT0gbnVsbClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIHZhbHVlID0gdG9rZW4udmFsdWU7XG4gICAgICAgICAgICB2YWx1ZUluZGV4ID0gdmFsdWUubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIHRoaXMuJGZpbmRDbG9zaW5nQnJhY2tldCA9IGZ1bmN0aW9uKGJyYWNrZXQsIHBvc2l0aW9uLCB0eXBlUmUpIHtcbiAgICAgICAgdmFyIGNsb3NpbmdCcmFja2V0ID0gdGhpcy4kYnJhY2tldHNbYnJhY2tldF07XG4gICAgICAgIHZhciBkZXB0aCA9IDE7XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3IodGhpcywgcG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pO1xuICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgaWYgKCF0b2tlbilcbiAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTtcbiAgICAgICAgaWYgKCF0b2tlbilcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpZiAoIXR5cGVSZSl7XG4gICAgICAgICAgICB0eXBlUmUgPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgIFwiKFxcXFwuP1wiICtcbiAgICAgICAgICAgICAgICB0b2tlbi50eXBlLnJlcGxhY2UoXCIuXCIsIFwiXFxcXC5cIikucmVwbGFjZShcImxwYXJlblwiLCBcIi5wYXJlblwiKVxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxiKD86c3RhcnR8YmVnaW4pXFxiLywgXCIoPzpzdGFydHxiZWdpbnxlbmQpXCIpXG4gICAgICAgICAgICAgICAgKyBcIikrXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHZhbHVlSW5kZXggPSBwb3NpdGlvbi5jb2x1bW4gLSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKTtcblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB0b2tlbi52YWx1ZTtcbiAgICAgICAgICAgIHZhciB2YWx1ZUxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICh2YWx1ZUluZGV4IDwgdmFsdWVMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2hyID0gdmFsdWUuY2hhckF0KHZhbHVlSW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmIChjaHIgPT0gY2xvc2luZ0JyYWNrZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVwdGggLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlcHRoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7cm93OiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHZhbHVlSW5kZXggKyBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKX07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hyID09IGJyYWNrZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVwdGggKz0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFsdWVJbmRleCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTtcbiAgICAgICAgICAgIH0gd2hpbGUgKHRva2VuICYmICF0eXBlUmUudGVzdCh0b2tlbi50eXBlKSk7XG5cbiAgICAgICAgICAgIGlmICh0b2tlbiA9PSBudWxsKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICB2YWx1ZUluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbn1cbmV4cG9ydHMuQnJhY2tldE1hdGNoID0gQnJhY2tldE1hdGNoO1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9lZGl0X3Nlc3Npb25cIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvb29wXCIsXCJhY2UvbGliL2xhbmdcIixcImFjZS9iaWRpaGFuZGxlclwiLFwiYWNlL2NvbmZpZ1wiLFwiYWNlL2xpYi9ldmVudF9lbWl0dGVyXCIsXCJhY2Uvc2VsZWN0aW9uXCIsXCJhY2UvbW9kZS90ZXh0XCIsXCJhY2UvcmFuZ2VcIixcImFjZS9kb2N1bWVudFwiLFwiYWNlL2JhY2tncm91bmRfdG9rZW5pemVyXCIsXCJhY2Uvc2VhcmNoX2hpZ2hsaWdodFwiLFwiYWNlL2VkaXRfc2Vzc2lvbi9mb2xkaW5nXCIsXCJhY2UvZWRpdF9zZXNzaW9uL2JyYWNrZXRfbWF0Y2hcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG52YXIgb29wID0gYWNlcXVpcmUoXCIuL2xpYi9vb3BcIik7XG52YXIgbGFuZyA9IGFjZXF1aXJlKFwiLi9saWIvbGFuZ1wiKTtcbnZhciBCaWRpSGFuZGxlciA9IGFjZXF1aXJlKFwiLi9iaWRpaGFuZGxlclwiKS5CaWRpSGFuZGxlcjtcbnZhciBjb25maWcgPSBhY2VxdWlyZShcIi4vY29uZmlnXCIpO1xudmFyIEV2ZW50RW1pdHRlciA9IGFjZXF1aXJlKFwiLi9saWIvZXZlbnRfZW1pdHRlclwiKS5FdmVudEVtaXR0ZXI7XG52YXIgU2VsZWN0aW9uID0gYWNlcXVpcmUoXCIuL3NlbGVjdGlvblwiKS5TZWxlY3Rpb247XG52YXIgVGV4dE1vZGUgPSBhY2VxdWlyZShcIi4vbW9kZS90ZXh0XCIpLk1vZGU7XG52YXIgUmFuZ2UgPSBhY2VxdWlyZShcIi4vcmFuZ2VcIikuUmFuZ2U7XG52YXIgRG9jdW1lbnQgPSBhY2VxdWlyZShcIi4vZG9jdW1lbnRcIikuRG9jdW1lbnQ7XG52YXIgQmFja2dyb3VuZFRva2VuaXplciA9IGFjZXF1aXJlKFwiLi9iYWNrZ3JvdW5kX3Rva2VuaXplclwiKS5CYWNrZ3JvdW5kVG9rZW5pemVyO1xudmFyIFNlYXJjaEhpZ2hsaWdodCA9IGFjZXF1aXJlKFwiLi9zZWFyY2hfaGlnaGxpZ2h0XCIpLlNlYXJjaEhpZ2hsaWdodDtcblxudmFyIEVkaXRTZXNzaW9uID0gZnVuY3Rpb24odGV4dCwgbW9kZSkge1xuICAgIHRoaXMuJGJyZWFrcG9pbnRzID0gW107XG4gICAgdGhpcy4kZGVjb3JhdGlvbnMgPSBbXTtcbiAgICB0aGlzLiRmcm9udE1hcmtlcnMgPSB7fTtcbiAgICB0aGlzLiRiYWNrTWFya2VycyA9IHt9O1xuICAgIHRoaXMuJG1hcmtlcklkID0gMTtcbiAgICB0aGlzLiR1bmRvU2VsZWN0ID0gdHJ1ZTtcblxuICAgIHRoaXMuJGZvbGREYXRhID0gW107XG4gICAgdGhpcy5pZCA9IFwic2Vzc2lvblwiICsgKCsrRWRpdFNlc3Npb24uJHVpZCk7XG4gICAgdGhpcy4kZm9sZERhdGEudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9pbihcIlxcblwiKTtcbiAgICB9O1xuICAgIHRoaXMub24oXCJjaGFuZ2VGb2xkXCIsIHRoaXMub25DaGFuZ2VGb2xkLmJpbmQodGhpcykpO1xuICAgIHRoaXMuJG9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xuXG4gICAgaWYgKHR5cGVvZiB0ZXh0ICE9IFwib2JqZWN0XCIgfHwgIXRleHQuZ2V0TGluZSlcbiAgICAgICAgdGV4dCA9IG5ldyBEb2N1bWVudCh0ZXh0KTtcblxuICAgIHRoaXMuJGJpZGlIYW5kbGVyID0gbmV3IEJpZGlIYW5kbGVyKHRoaXMpO1xuICAgIHRoaXMuc2V0RG9jdW1lbnQodGV4dCk7XG4gICAgdGhpcy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHRoaXMpO1xuXG4gICAgY29uZmlnLnJlc2V0T3B0aW9ucyh0aGlzKTtcbiAgICB0aGlzLnNldE1vZGUobW9kZSk7XG4gICAgY29uZmlnLl9zaWduYWwoXCJzZXNzaW9uXCIsIHRoaXMpO1xufTtcblxuXG5FZGl0U2Vzc2lvbi4kdWlkID0gMDtcblxuKGZ1bmN0aW9uKCkge1xuXG4gICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpO1xuICAgIHRoaXMuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbihkb2MpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9jKVxuICAgICAgICAgICAgdGhpcy5kb2MucmVtb3ZlTGlzdGVuZXIoXCJjaGFuZ2VcIiwgdGhpcy4kb25DaGFuZ2UpO1xuXG4gICAgICAgIHRoaXMuZG9jID0gZG9jO1xuICAgICAgICBkb2Mub24oXCJjaGFuZ2VcIiwgdGhpcy4kb25DaGFuZ2UpO1xuXG4gICAgICAgIGlmICh0aGlzLmJnVG9rZW5pemVyKVxuICAgICAgICAgICAgdGhpcy5iZ1Rva2VuaXplci5zZXREb2N1bWVudCh0aGlzLmdldERvY3VtZW50KCkpO1xuXG4gICAgICAgIHRoaXMucmVzZXRDYWNoZXMoKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0RG9jdW1lbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jO1xuICAgIH07XG4gICAgdGhpcy4kcmVzZXRSb3dDYWNoZSA9IGZ1bmN0aW9uKGRvY1Jvdykge1xuICAgICAgICBpZiAoIWRvY1Jvdykge1xuICAgICAgICAgICAgdGhpcy4kZG9jUm93Q2FjaGUgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuJHNjcmVlblJvd0NhY2hlID0gW107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGwgPSB0aGlzLiRkb2NSb3dDYWNoZS5sZW5ndGg7XG4gICAgICAgIHZhciBpID0gdGhpcy4kZ2V0Um93Q2FjaGVJbmRleCh0aGlzLiRkb2NSb3dDYWNoZSwgZG9jUm93KSArIDE7XG4gICAgICAgIGlmIChsID4gaSkge1xuICAgICAgICAgICAgdGhpcy4kZG9jUm93Q2FjaGUuc3BsaWNlKGksIGwpO1xuICAgICAgICAgICAgdGhpcy4kc2NyZWVuUm93Q2FjaGUuc3BsaWNlKGksIGwpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuJGdldFJvd0NhY2hlSW5kZXggPSBmdW5jdGlvbihjYWNoZUFycmF5LCB2YWwpIHtcbiAgICAgICAgdmFyIGxvdyA9IDA7XG4gICAgICAgIHZhciBoaSA9IGNhY2hlQXJyYXkubGVuZ3RoIC0gMTtcblxuICAgICAgICB3aGlsZSAobG93IDw9IGhpKSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gKGxvdyArIGhpKSA+PiAxO1xuICAgICAgICAgICAgdmFyIGMgPSBjYWNoZUFycmF5W21pZF07XG5cbiAgICAgICAgICAgIGlmICh2YWwgPiBjKVxuICAgICAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWwgPCBjKVxuICAgICAgICAgICAgICAgIGhpID0gbWlkIC0gMTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gbWlkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvdyAtMTtcbiAgICB9O1xuXG4gICAgdGhpcy5yZXNldENhY2hlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRtb2RpZmllZCA9IHRydWU7XG4gICAgICAgIHRoaXMuJHdyYXBEYXRhID0gW107XG4gICAgICAgIHRoaXMuJHJvd0xlbmd0aENhY2hlID0gW107XG4gICAgICAgIHRoaXMuJHJlc2V0Um93Q2FjaGUoMCk7XG4gICAgICAgIGlmICh0aGlzLmJnVG9rZW5pemVyKVxuICAgICAgICAgICAgdGhpcy5iZ1Rva2VuaXplci5zdGFydCgwKTtcbiAgICB9O1xuXG4gICAgdGhpcy5vbkNoYW5nZUZvbGQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciBmb2xkID0gZS5kYXRhO1xuICAgICAgICB0aGlzLiRyZXNldFJvd0NhY2hlKGZvbGQuc3RhcnQucm93KTtcbiAgICB9O1xuXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZ1bmN0aW9uKGRlbHRhKSB7XG4gICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy4kYmlkaUhhbmRsZXIub25DaGFuZ2UoZGVsdGEpO1xuICAgICAgICB0aGlzLiRyZXNldFJvd0NhY2hlKGRlbHRhLnN0YXJ0LnJvdyk7XG5cbiAgICAgICAgdmFyIHJlbW92ZWRGb2xkcyA9IHRoaXMuJHVwZGF0ZUludGVybmFsRGF0YU9uQ2hhbmdlKGRlbHRhKTtcbiAgICAgICAgaWYgKCF0aGlzLiRmcm9tVW5kbyAmJiB0aGlzLiR1bmRvTWFuYWdlciAmJiAhZGVsdGEuaWdub3JlKSB7XG4gICAgICAgICAgICB0aGlzLiRkZWx0YXNEb2MucHVzaChkZWx0YSk7XG4gICAgICAgICAgICBpZiAocmVtb3ZlZEZvbGRzICYmIHJlbW92ZWRGb2xkcy5sZW5ndGggIT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGRlbHRhc0ZvbGQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogXCJyZW1vdmVGb2xkc1wiLFxuICAgICAgICAgICAgICAgICAgICBmb2xkczogIHJlbW92ZWRGb2xkc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLiRpbmZvcm1VbmRvTWFuYWdlci5zY2hlZHVsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5iZ1Rva2VuaXplciAmJiB0aGlzLmJnVG9rZW5pemVyLiR1cGRhdGVPbkNoYW5nZShkZWx0YSk7XG4gICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZVwiLCBkZWx0YSk7XG4gICAgfTtcbiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odGV4dCkge1xuICAgICAgICB0aGlzLmRvYy5zZXRWYWx1ZSh0ZXh0KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZVRvKDAsIDApO1xuXG4gICAgICAgIHRoaXMuJHJlc2V0Um93Q2FjaGUoMCk7XG4gICAgICAgIHRoaXMuJGRlbHRhcyA9IFtdO1xuICAgICAgICB0aGlzLiRkZWx0YXNEb2MgPSBbXTtcbiAgICAgICAgdGhpcy4kZGVsdGFzRm9sZCA9IFtdO1xuICAgICAgICB0aGlzLnNldFVuZG9NYW5hZ2VyKHRoaXMuJHVuZG9NYW5hZ2VyKTtcbiAgICAgICAgdGhpcy5nZXRVbmRvTWFuYWdlcigpLnJlc2V0KCk7XG4gICAgfTtcbiAgICB0aGlzLmdldFZhbHVlID1cbiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXRWYWx1ZSgpO1xuICAgIH07XG4gICAgdGhpcy5nZXRTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uO1xuICAgIH07XG4gICAgdGhpcy5nZXRTdGF0ZSA9IGZ1bmN0aW9uKHJvdykge1xuICAgICAgICByZXR1cm4gdGhpcy5iZ1Rva2VuaXplci5nZXRTdGF0ZShyb3cpO1xuICAgIH07XG4gICAgdGhpcy5nZXRUb2tlbnMgPSBmdW5jdGlvbihyb3cpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmdUb2tlbml6ZXIuZ2V0VG9rZW5zKHJvdyk7XG4gICAgfTtcbiAgICB0aGlzLmdldFRva2VuQXQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikge1xuICAgICAgICB2YXIgdG9rZW5zID0gdGhpcy5iZ1Rva2VuaXplci5nZXRUb2tlbnMocm93KTtcbiAgICAgICAgdmFyIHRva2VuLCBjID0gMDtcbiAgICAgICAgaWYgKGNvbHVtbiA9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgaSA9IHRva2Vucy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgYyA9IHRoaXMuZ2V0TGluZShyb3cpLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYyArPSB0b2tlbnNbaV0udmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChjID49IGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW4gPSB0b2tlbnNbaV07XG4gICAgICAgIGlmICghdG9rZW4pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgdG9rZW4uaW5kZXggPSBpO1xuICAgICAgICB0b2tlbi5zdGFydCA9IGMgLSB0b2tlbi52YWx1ZS5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9O1xuICAgIHRoaXMuc2V0VW5kb01hbmFnZXIgPSBmdW5jdGlvbih1bmRvTWFuYWdlcikge1xuICAgICAgICB0aGlzLiR1bmRvTWFuYWdlciA9IHVuZG9NYW5hZ2VyO1xuICAgICAgICB0aGlzLiRkZWx0YXMgPSBbXTtcbiAgICAgICAgdGhpcy4kZGVsdGFzRG9jID0gW107XG4gICAgICAgIHRoaXMuJGRlbHRhc0ZvbGQgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy4kaW5mb3JtVW5kb01hbmFnZXIpXG4gICAgICAgICAgICB0aGlzLiRpbmZvcm1VbmRvTWFuYWdlci5jYW5jZWwoKTtcblxuICAgICAgICBpZiAodW5kb01hbmFnZXIpIHtcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgICAgICAgdGhpcy4kc3luY0luZm9ybVVuZG9NYW5hZ2VyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgc2VsZi4kaW5mb3JtVW5kb01hbmFnZXIuY2FuY2VsKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi4kZGVsdGFzRm9sZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi4kZGVsdGFzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA6IFwiZm9sZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFzOiBzZWxmLiRkZWx0YXNGb2xkXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLiRkZWx0YXNGb2xkID0gW107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuJGRlbHRhc0RvYy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi4kZGVsdGFzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA6IFwiZG9jXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWx0YXM6IHNlbGYuJGRlbHRhc0RvY1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi4kZGVsdGFzRG9jID0gW107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuJGRlbHRhcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHVuZG9NYW5hZ2VyLmV4ZWN1dGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBcImFjZXVwZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW3NlbGYuJGRlbHRhcywgc2VsZl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXJnZTogc2VsZi5tZXJnZVVuZG9EZWx0YXNcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGYubWVyZ2VVbmRvRGVsdGFzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc2VsZi4kZGVsdGFzID0gW107XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy4kaW5mb3JtVW5kb01hbmFnZXIgPSBsYW5nLmRlbGF5ZWRDYWxsKHRoaXMuJHN5bmNJbmZvcm1VbmRvTWFuYWdlcik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMubWFya1VuZG9Hcm91cCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy4kc3luY0luZm9ybVVuZG9NYW5hZ2VyKVxuICAgICAgICAgICAgdGhpcy4kc3luY0luZm9ybVVuZG9NYW5hZ2VyKCk7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLiRkZWZhdWx0VW5kb01hbmFnZXIgPSB7XG4gICAgICAgIHVuZG86IGZ1bmN0aW9uKCkge30sXG4gICAgICAgIHJlZG86IGZ1bmN0aW9uKCkge30sXG4gICAgICAgIHJlc2V0OiBmdW5jdGlvbigpIHt9XG4gICAgfTtcbiAgICB0aGlzLmdldFVuZG9NYW5hZ2VyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiR1bmRvTWFuYWdlciB8fCB0aGlzLiRkZWZhdWx0VW5kb01hbmFnZXI7XG4gICAgfTtcbiAgICB0aGlzLmdldFRhYlN0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5nZXRVc2VTb2Z0VGFicygpKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFuZy5zdHJpbmdSZXBlYXQoXCIgXCIsIHRoaXMuZ2V0VGFiU2l6ZSgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBcIlxcdFwiO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnNldFVzZVNvZnRUYWJzID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uKFwidXNlU29mdFRhYnNcIiwgdmFsKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0VXNlU29mdFRhYnMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHVzZVNvZnRUYWJzICYmICF0aGlzLiRtb2RlLiRpbmRlbnRXaXRoVGFicztcbiAgICB9O1xuICAgIHRoaXMuc2V0VGFiU2l6ZSA9IGZ1bmN0aW9uKHRhYlNpemUpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJ0YWJTaXplXCIsIHRhYlNpemUpO1xuICAgIH07XG4gICAgdGhpcy5nZXRUYWJTaXplID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiR0YWJTaXplO1xuICAgIH07XG4gICAgdGhpcy5pc1RhYlN0b3AgPSBmdW5jdGlvbihwb3NpdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy4kdXNlU29mdFRhYnMgJiYgKHBvc2l0aW9uLmNvbHVtbiAlIHRoaXMuJHRhYlNpemUgPT09IDApO1xuICAgIH07XG4gICAgdGhpcy5zZXROYXZpZ2F0ZVdpdGhpblNvZnRUYWJzID0gZnVuY3Rpb24gKG5hdmlnYXRlV2l0aGluU29mdFRhYnMpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJuYXZpZ2F0ZVdpdGhpblNvZnRUYWJzXCIsIG5hdmlnYXRlV2l0aGluU29mdFRhYnMpO1xuICAgIH07XG4gICAgdGhpcy5nZXROYXZpZ2F0ZVdpdGhpblNvZnRUYWJzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRuYXZpZ2F0ZVdpdGhpblNvZnRUYWJzO1xuICAgIH07XG5cbiAgICB0aGlzLiRvdmVyd3JpdGUgPSBmYWxzZTtcbiAgICB0aGlzLnNldE92ZXJ3cml0ZSA9IGZ1bmN0aW9uKG92ZXJ3cml0ZSkge1xuICAgICAgICB0aGlzLnNldE9wdGlvbihcIm92ZXJ3cml0ZVwiLCBvdmVyd3JpdGUpO1xuICAgIH07XG4gICAgdGhpcy5nZXRPdmVyd3JpdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJG92ZXJ3cml0ZTtcbiAgICB9O1xuICAgIHRoaXMudG9nZ2xlT3ZlcndyaXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuc2V0T3ZlcndyaXRlKCF0aGlzLiRvdmVyd3JpdGUpO1xuICAgIH07XG4gICAgdGhpcy5hZGRHdXR0ZXJEZWNvcmF0aW9uID0gZnVuY3Rpb24ocm93LCBjbGFzc05hbWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLiRkZWNvcmF0aW9uc1tyb3ddKVxuICAgICAgICAgICAgdGhpcy4kZGVjb3JhdGlvbnNbcm93XSA9IFwiXCI7XG4gICAgICAgIHRoaXMuJGRlY29yYXRpb25zW3Jvd10gKz0gXCIgXCIgKyBjbGFzc05hbWU7XG4gICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZUJyZWFrcG9pbnRcIiwge30pO1xuICAgIH07XG4gICAgdGhpcy5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9uID0gZnVuY3Rpb24ocm93LCBjbGFzc05hbWUpIHtcbiAgICAgICAgdGhpcy4kZGVjb3JhdGlvbnNbcm93XSA9ICh0aGlzLiRkZWNvcmF0aW9uc1tyb3ddIHx8IFwiXCIpLnJlcGxhY2UoXCIgXCIgKyBjbGFzc05hbWUsIFwiXCIpO1xuICAgICAgICB0aGlzLl9zaWduYWwoXCJjaGFuZ2VCcmVha3BvaW50XCIsIHt9KTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0QnJlYWtwb2ludHMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGJyZWFrcG9pbnRzO1xuICAgIH07XG4gICAgdGhpcy5zZXRCcmVha3BvaW50cyA9IGZ1bmN0aW9uKHJvd3MpIHtcbiAgICAgICAgdGhpcy4kYnJlYWtwb2ludHMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaT0wOyBpPHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuJGJyZWFrcG9pbnRzW3Jvd3NbaV1dID0gXCJhY2VfYnJlYWtwb2ludFwiO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZUJyZWFrcG9pbnRcIiwge30pO1xuICAgIH07XG4gICAgdGhpcy5jbGVhckJyZWFrcG9pbnRzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuJGJyZWFrcG9pbnRzID0gW107XG4gICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZUJyZWFrcG9pbnRcIiwge30pO1xuICAgIH07XG4gICAgdGhpcy5zZXRCcmVha3BvaW50ID0gZnVuY3Rpb24ocm93LCBjbGFzc05hbWUpIHtcbiAgICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgY2xhc3NOYW1lID0gXCJhY2VfYnJlYWtwb2ludFwiO1xuICAgICAgICBpZiAoY2xhc3NOYW1lKVxuICAgICAgICAgICAgdGhpcy4kYnJlYWtwb2ludHNbcm93XSA9IGNsYXNzTmFtZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuJGJyZWFrcG9pbnRzW3Jvd107XG4gICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZUJyZWFrcG9pbnRcIiwge30pO1xuICAgIH07XG4gICAgdGhpcy5jbGVhckJyZWFrcG9pbnQgPSBmdW5jdGlvbihyb3cpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuJGJyZWFrcG9pbnRzW3Jvd107XG4gICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZUJyZWFrcG9pbnRcIiwge30pO1xuICAgIH07XG4gICAgdGhpcy5hZGRNYXJrZXIgPSBmdW5jdGlvbihyYW5nZSwgY2xhenosIHR5cGUsIGluRnJvbnQpIHtcbiAgICAgICAgdmFyIGlkID0gdGhpcy4kbWFya2VySWQrKztcblxuICAgICAgICB2YXIgbWFya2VyID0ge1xuICAgICAgICAgICAgcmFuZ2UgOiByYW5nZSxcbiAgICAgICAgICAgIHR5cGUgOiB0eXBlIHx8IFwibGluZVwiLFxuICAgICAgICAgICAgcmVuZGVyZXI6IHR5cGVvZiB0eXBlID09IFwiZnVuY3Rpb25cIiA/IHR5cGUgOiBudWxsLFxuICAgICAgICAgICAgY2xhenogOiBjbGF6eixcbiAgICAgICAgICAgIGluRnJvbnQ6ICEhaW5Gcm9udCxcbiAgICAgICAgICAgIGlkOiBpZFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChpbkZyb250KSB7XG4gICAgICAgICAgICB0aGlzLiRmcm9udE1hcmtlcnNbaWRdID0gbWFya2VyO1xuICAgICAgICAgICAgdGhpcy5fc2lnbmFsKFwiY2hhbmdlRnJvbnRNYXJrZXJcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiRiYWNrTWFya2Vyc1tpZF0gPSBtYXJrZXI7XG4gICAgICAgICAgICB0aGlzLl9zaWduYWwoXCJjaGFuZ2VCYWNrTWFya2VyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH07XG4gICAgdGhpcy5hZGREeW5hbWljTWFya2VyID0gZnVuY3Rpb24obWFya2VyLCBpbkZyb250KSB7XG4gICAgICAgIGlmICghbWFya2VyLnVwZGF0ZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGlkID0gdGhpcy4kbWFya2VySWQrKztcbiAgICAgICAgbWFya2VyLmlkID0gaWQ7XG4gICAgICAgIG1hcmtlci5pbkZyb250ID0gISFpbkZyb250O1xuXG4gICAgICAgIGlmIChpbkZyb250KSB7XG4gICAgICAgICAgICB0aGlzLiRmcm9udE1hcmtlcnNbaWRdID0gbWFya2VyO1xuICAgICAgICAgICAgdGhpcy5fc2lnbmFsKFwiY2hhbmdlRnJvbnRNYXJrZXJcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiRiYWNrTWFya2Vyc1tpZF0gPSBtYXJrZXI7XG4gICAgICAgICAgICB0aGlzLl9zaWduYWwoXCJjaGFuZ2VCYWNrTWFya2VyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1hcmtlcjtcbiAgICB9O1xuICAgIHRoaXMucmVtb3ZlTWFya2VyID0gZnVuY3Rpb24obWFya2VySWQpIHtcbiAgICAgICAgdmFyIG1hcmtlciA9IHRoaXMuJGZyb250TWFya2Vyc1ttYXJrZXJJZF0gfHwgdGhpcy4kYmFja01hcmtlcnNbbWFya2VySWRdO1xuICAgICAgICBpZiAoIW1hcmtlcilcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB2YXIgbWFya2VycyA9IG1hcmtlci5pbkZyb250ID8gdGhpcy4kZnJvbnRNYXJrZXJzIDogdGhpcy4kYmFja01hcmtlcnM7XG4gICAgICAgIGlmIChtYXJrZXIpIHtcbiAgICAgICAgICAgIGRlbGV0ZSAobWFya2Vyc1ttYXJrZXJJZF0pO1xuICAgICAgICAgICAgdGhpcy5fc2lnbmFsKG1hcmtlci5pbkZyb250ID8gXCJjaGFuZ2VGcm9udE1hcmtlclwiIDogXCJjaGFuZ2VCYWNrTWFya2VyXCIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmdldE1hcmtlcnMgPSBmdW5jdGlvbihpbkZyb250KSB7XG4gICAgICAgIHJldHVybiBpbkZyb250ID8gdGhpcy4kZnJvbnRNYXJrZXJzIDogdGhpcy4kYmFja01hcmtlcnM7XG4gICAgfTtcblxuICAgIHRoaXMuaGlnaGxpZ2h0ID0gZnVuY3Rpb24ocmUpIHtcbiAgICAgICAgaWYgKCF0aGlzLiRzZWFyY2hIaWdobGlnaHQpIHtcbiAgICAgICAgICAgIHZhciBoaWdobGlnaHQgPSBuZXcgU2VhcmNoSGlnaGxpZ2h0KG51bGwsIFwiYWNlX3NlbGVjdGVkLXdvcmRcIiwgXCJ0ZXh0XCIpO1xuICAgICAgICAgICAgdGhpcy4kc2VhcmNoSGlnaGxpZ2h0ID0gdGhpcy5hZGREeW5hbWljTWFya2VyKGhpZ2hsaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kc2VhcmNoSGlnaGxpZ2h0LnNldFJlZ2V4cChyZSk7XG4gICAgfTtcbiAgICB0aGlzLmhpZ2hsaWdodExpbmVzID0gZnVuY3Rpb24oc3RhcnRSb3csIGVuZFJvdywgY2xhenosIGluRnJvbnQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbmRSb3cgIT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgY2xhenogPSBlbmRSb3c7XG4gICAgICAgICAgICBlbmRSb3cgPSBzdGFydFJvdztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNsYXp6KVxuICAgICAgICAgICAgY2xhenogPSBcImFjZV9zdGVwXCI7XG5cbiAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKHN0YXJ0Um93LCAwLCBlbmRSb3csIEluZmluaXR5KTtcbiAgICAgICAgcmFuZ2UuaWQgPSB0aGlzLmFkZE1hcmtlcihyYW5nZSwgY2xhenosIFwiZnVsbExpbmVcIiwgaW5Gcm9udCk7XG4gICAgICAgIHJldHVybiByYW5nZTtcbiAgICB9O1xuICAgIHRoaXMuc2V0QW5ub3RhdGlvbnMgPSBmdW5jdGlvbihhbm5vdGF0aW9ucykge1xuICAgICAgICB0aGlzLiRhbm5vdGF0aW9ucyA9IGFubm90YXRpb25zO1xuICAgICAgICB0aGlzLl9zaWduYWwoXCJjaGFuZ2VBbm5vdGF0aW9uXCIsIHt9KTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0QW5ub3RhdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGFubm90YXRpb25zIHx8IFtdO1xuICAgIH07XG4gICAgdGhpcy5jbGVhckFubm90YXRpb25zID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuc2V0QW5ub3RhdGlvbnMoW10pO1xuICAgIH07XG4gICAgdGhpcy4kZGV0ZWN0TmV3TGluZSA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gdGV4dC5tYXRjaCgvXi4qPyhcXHI/XFxuKS9tKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICB0aGlzLiRhdXRvTmV3TGluZSA9IG1hdGNoWzFdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4kYXV0b05ld0xpbmUgPSBcIlxcblwiO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmdldFdvcmRSYW5nZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7XG4gICAgICAgIHZhciBsaW5lID0gdGhpcy5nZXRMaW5lKHJvdyk7XG5cbiAgICAgICAgdmFyIGluVG9rZW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKGNvbHVtbiA+IDApXG4gICAgICAgICAgICBpblRva2VuID0gISFsaW5lLmNoYXJBdChjb2x1bW4gLSAxKS5tYXRjaCh0aGlzLnRva2VuUmUpO1xuXG4gICAgICAgIGlmICghaW5Ub2tlbilcbiAgICAgICAgICAgIGluVG9rZW4gPSAhIWxpbmUuY2hhckF0KGNvbHVtbikubWF0Y2godGhpcy50b2tlblJlKTtcblxuICAgICAgICBpZiAoaW5Ub2tlbilcbiAgICAgICAgICAgIHZhciByZSA9IHRoaXMudG9rZW5SZTtcbiAgICAgICAgZWxzZSBpZiAoL15cXHMrJC8udGVzdChsaW5lLnNsaWNlKGNvbHVtbi0xLCBjb2x1bW4rMSkpKVxuICAgICAgICAgICAgdmFyIHJlID0gL1xccy87XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHZhciByZSA9IHRoaXMubm9uVG9rZW5SZTtcblxuICAgICAgICB2YXIgc3RhcnQgPSBjb2x1bW47XG4gICAgICAgIGlmIChzdGFydCA+IDApIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBzdGFydC0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKHN0YXJ0ID49IDAgJiYgbGluZS5jaGFyQXQoc3RhcnQpLm1hdGNoKHJlKSk7XG4gICAgICAgICAgICBzdGFydCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGVuZCA9IGNvbHVtbjtcbiAgICAgICAgd2hpbGUgKGVuZCA8IGxpbmUubGVuZ3RoICYmIGxpbmUuY2hhckF0KGVuZCkubWF0Y2gocmUpKSB7XG4gICAgICAgICAgICBlbmQrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgUmFuZ2Uocm93LCBzdGFydCwgcm93LCBlbmQpO1xuICAgIH07XG4gICAgdGhpcy5nZXRBV29yZFJhbmdlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgdmFyIHdvcmRSYW5nZSA9IHRoaXMuZ2V0V29yZFJhbmdlKHJvdywgY29sdW1uKTtcbiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUod29yZFJhbmdlLmVuZC5yb3cpO1xuXG4gICAgICAgIHdoaWxlIChsaW5lLmNoYXJBdCh3b3JkUmFuZ2UuZW5kLmNvbHVtbikubWF0Y2goL1sgXFx0XS8pKSB7XG4gICAgICAgICAgICB3b3JkUmFuZ2UuZW5kLmNvbHVtbiArPSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3b3JkUmFuZ2U7XG4gICAgfTtcbiAgICB0aGlzLnNldE5ld0xpbmVNb2RlID0gZnVuY3Rpb24obmV3TGluZU1vZGUpIHtcbiAgICAgICAgdGhpcy5kb2Muc2V0TmV3TGluZU1vZGUobmV3TGluZU1vZGUpO1xuICAgIH07XG4gICAgdGhpcy5nZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2MuZ2V0TmV3TGluZU1vZGUoKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0VXNlV29ya2VyID0gZnVuY3Rpb24odXNlV29ya2VyKSB7IHRoaXMuc2V0T3B0aW9uKFwidXNlV29ya2VyXCIsIHVzZVdvcmtlcik7IH07XG4gICAgdGhpcy5nZXRVc2VXb3JrZXIgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuJHVzZVdvcmtlcjsgfTtcbiAgICB0aGlzLm9uUmVsb2FkVG9rZW5pemVyID0gZnVuY3Rpb24oZSkge1xuICAgICAgICB2YXIgcm93cyA9IGUuZGF0YTtcbiAgICAgICAgdGhpcy5iZ1Rva2VuaXplci5zdGFydChyb3dzLmZpcnN0KTtcbiAgICAgICAgdGhpcy5fc2lnbmFsKFwidG9rZW5pemVyVXBkYXRlXCIsIGUpO1xuICAgIH07XG5cbiAgICB0aGlzLiRtb2RlcyA9IHt9O1xuICAgIHRoaXMuJG1vZGUgPSBudWxsO1xuICAgIHRoaXMuJG1vZGVJZCA9IG51bGw7XG4gICAgdGhpcy5zZXRNb2RlID0gZnVuY3Rpb24obW9kZSwgY2IpIHtcbiAgICAgICAgaWYgKG1vZGUgJiYgdHlwZW9mIG1vZGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGlmIChtb2RlLmdldFRva2VuaXplcilcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kb25DaGFuZ2VNb2RlKG1vZGUpO1xuICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSBtb2RlO1xuICAgICAgICAgICAgdmFyIHBhdGggPSBvcHRpb25zLnBhdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXRoID0gbW9kZSB8fCBcImFjZS9tb2RlL3RleHRcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuJG1vZGVzW1wiYWNlL21vZGUvdGV4dFwiXSlcbiAgICAgICAgICAgIHRoaXMuJG1vZGVzW1wiYWNlL21vZGUvdGV4dFwiXSA9IG5ldyBUZXh0TW9kZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLiRtb2Rlc1twYXRoXSAmJiAhb3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy4kb25DaGFuZ2VNb2RlKHRoaXMuJG1vZGVzW3BhdGhdKTtcbiAgICAgICAgICAgIGNiICYmIGNiKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kbW9kZUlkID0gcGF0aDtcbiAgICAgICAgY29uZmlnLmxvYWRNb2R1bGUoW1wibW9kZVwiLCBwYXRoXSwgZnVuY3Rpb24obSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuJG1vZGVJZCAhPT0gcGF0aClcbiAgICAgICAgICAgICAgICByZXR1cm4gY2IgJiYgY2IoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLiRtb2Rlc1twYXRoXSAmJiAhb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHRoaXMuJG9uQ2hhbmdlTW9kZSh0aGlzLiRtb2Rlc1twYXRoXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG0gJiYgbS5Nb2RlKSB7XG4gICAgICAgICAgICAgICAgbSA9IG5ldyBtLk1vZGUob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJG1vZGVzW3BhdGhdID0gbTtcbiAgICAgICAgICAgICAgICAgICAgbS4kaWQgPSBwYXRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLiRvbkNoYW5nZU1vZGUobSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYiAmJiBjYigpO1xuICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICBpZiAoIXRoaXMuJG1vZGUpXG4gICAgICAgICAgICB0aGlzLiRvbkNoYW5nZU1vZGUodGhpcy4kbW9kZXNbXCJhY2UvbW9kZS90ZXh0XCJdLCB0cnVlKTtcbiAgICB9O1xuXG4gICAgdGhpcy4kb25DaGFuZ2VNb2RlID0gZnVuY3Rpb24obW9kZSwgJGlzUGxhY2Vob2xkZXIpIHtcbiAgICAgICAgaWYgKCEkaXNQbGFjZWhvbGRlcilcbiAgICAgICAgICAgIHRoaXMuJG1vZGVJZCA9IG1vZGUuJGlkO1xuICAgICAgICBpZiAodGhpcy4kbW9kZSA9PT0gbW9kZSkgXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy4kbW9kZSA9IG1vZGU7XG5cbiAgICAgICAgdGhpcy4kc3RvcFdvcmtlcigpO1xuXG4gICAgICAgIGlmICh0aGlzLiR1c2VXb3JrZXIpXG4gICAgICAgICAgICB0aGlzLiRzdGFydFdvcmtlcigpO1xuXG4gICAgICAgIHZhciB0b2tlbml6ZXIgPSBtb2RlLmdldFRva2VuaXplcigpO1xuXG4gICAgICAgIGlmKHRva2VuaXplci5hZGRFdmVudExpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHZhciBvblJlbG9hZFRva2VuaXplciA9IHRoaXMub25SZWxvYWRUb2tlbml6ZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRva2VuaXplci5hZGRFdmVudExpc3RlbmVyKFwidXBkYXRlXCIsIG9uUmVsb2FkVG9rZW5pemVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5iZ1Rva2VuaXplcikge1xuICAgICAgICAgICAgdGhpcy5iZ1Rva2VuaXplciA9IG5ldyBCYWNrZ3JvdW5kVG9rZW5pemVyKHRva2VuaXplcik7XG4gICAgICAgICAgICB2YXIgX3NlbGYgPSB0aGlzO1xuICAgICAgICAgICAgdGhpcy5iZ1Rva2VuaXplci5hZGRFdmVudExpc3RlbmVyKFwidXBkYXRlXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICBfc2VsZi5fc2lnbmFsKFwidG9rZW5pemVyVXBkYXRlXCIsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJnVG9rZW5pemVyLnNldFRva2VuaXplcih0b2tlbml6ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5iZ1Rva2VuaXplci5zZXREb2N1bWVudCh0aGlzLmdldERvY3VtZW50KCkpO1xuXG4gICAgICAgIHRoaXMudG9rZW5SZSA9IG1vZGUudG9rZW5SZTtcbiAgICAgICAgdGhpcy5ub25Ub2tlblJlID0gbW9kZS5ub25Ub2tlblJlO1xuXG4gICAgICAgIFxuICAgICAgICBpZiAoISRpc1BsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICBpZiAobW9kZS5hdHRhY2hUb1Nlc3Npb24pXG4gICAgICAgICAgICAgICAgbW9kZS5hdHRhY2hUb1Nlc3Npb24odGhpcyk7XG4gICAgICAgICAgICB0aGlzLiRvcHRpb25zLndyYXBNZXRob2Quc2V0LmNhbGwodGhpcywgdGhpcy4kd3JhcE1ldGhvZCk7XG4gICAgICAgICAgICB0aGlzLiRzZXRGb2xkaW5nKG1vZGUuZm9sZGluZ1J1bGVzKTtcbiAgICAgICAgICAgIHRoaXMuYmdUb2tlbml6ZXIuc3RhcnQoMCk7XG4gICAgICAgICAgICB0aGlzLl9lbWl0KFwiY2hhbmdlTW9kZVwiKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLiRzdG9wV29ya2VyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLiR3b3JrZXIpIHtcbiAgICAgICAgICAgIHRoaXMuJHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgIHRoaXMuJHdvcmtlciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy4kc3RhcnRXb3JrZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuJHdvcmtlciA9IHRoaXMuJG1vZGUuY3JlYXRlV29ya2VyKHRoaXMpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25maWcud2FybihcIkNvdWxkIG5vdCBsb2FkIHdvcmtlclwiLCBlKTtcbiAgICAgICAgICAgIHRoaXMuJHdvcmtlciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ2V0TW9kZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kbW9kZTtcbiAgICB9O1xuXG4gICAgdGhpcy4kc2Nyb2xsVG9wID0gMDtcbiAgICB0aGlzLnNldFNjcm9sbFRvcCA9IGZ1bmN0aW9uKHNjcm9sbFRvcCkge1xuICAgICAgICBpZiAodGhpcy4kc2Nyb2xsVG9wID09PSBzY3JvbGxUb3AgfHwgaXNOYU4oc2Nyb2xsVG9wKSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB0aGlzLiRzY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZVNjcm9sbFRvcFwiLCBzY3JvbGxUb3ApO1xuICAgIH07XG4gICAgdGhpcy5nZXRTY3JvbGxUb3AgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHNjcm9sbFRvcDtcbiAgICB9O1xuXG4gICAgdGhpcy4kc2Nyb2xsTGVmdCA9IDA7XG4gICAgdGhpcy5zZXRTY3JvbGxMZWZ0ID0gZnVuY3Rpb24oc2Nyb2xsTGVmdCkge1xuICAgICAgICBpZiAodGhpcy4kc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCB8fCBpc05hTihzY3JvbGxMZWZ0KSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB0aGlzLiRzY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgICAgICAgdGhpcy5fc2lnbmFsKFwiY2hhbmdlU2Nyb2xsTGVmdFwiLCBzY3JvbGxMZWZ0KTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0U2Nyb2xsTGVmdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kc2Nyb2xsTGVmdDtcbiAgICB9O1xuICAgIHRoaXMuZ2V0U2NyZWVuV2lkdGggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kY29tcHV0ZVdpZHRoKCk7XG4gICAgICAgIGlmICh0aGlzLmxpbmVXaWRnZXRzKSBcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLmdldExpbmVXaWRnZXRNYXhXaWR0aCgpLCB0aGlzLnNjcmVlbldpZHRoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuV2lkdGg7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmdldExpbmVXaWRnZXRNYXhXaWR0aCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5saW5lV2lkZ2V0c1dpZHRoICE9IG51bGwpIHJldHVybiB0aGlzLmxpbmVXaWRnZXRzV2lkdGg7XG4gICAgICAgIHZhciB3aWR0aCA9IDA7XG4gICAgICAgIHRoaXMubGluZVdpZGdldHMuZm9yRWFjaChmdW5jdGlvbih3KSB7XG4gICAgICAgICAgICBpZiAodyAmJiB3LnNjcmVlbldpZHRoID4gd2lkdGgpXG4gICAgICAgICAgICAgICAgd2lkdGggPSB3LnNjcmVlbldpZHRoO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMubGluZVdpZGdldFdpZHRoID0gd2lkdGg7XG4gICAgfTtcblxuICAgIHRoaXMuJGNvbXB1dGVXaWR0aCA9IGZ1bmN0aW9uKGZvcmNlKSB7XG4gICAgICAgIGlmICh0aGlzLiRtb2RpZmllZCB8fCBmb3JjZSkge1xuICAgICAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuJHVzZVdyYXBNb2RlKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjcmVlbldpZHRoID0gdGhpcy4kd3JhcExpbWl0O1xuXG4gICAgICAgICAgICB2YXIgbGluZXMgPSB0aGlzLmRvYy5nZXRBbGxMaW5lcygpO1xuICAgICAgICAgICAgdmFyIGNhY2hlID0gdGhpcy4kcm93TGVuZ3RoQ2FjaGU7XG4gICAgICAgICAgICB2YXIgbG9uZ2VzdFNjcmVlbkxpbmUgPSAwO1xuICAgICAgICAgICAgdmFyIGZvbGRJbmRleCA9IDA7XG4gICAgICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLiRmb2xkRGF0YVtmb2xkSW5kZXhdO1xuICAgICAgICAgICAgdmFyIGZvbGRTdGFydCA9IGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7XG4gICAgICAgICAgICB2YXIgbGVuID0gbGluZXMubGVuZ3RoO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPiBmb2xkU3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGZvbGRMaW5lLmVuZC5yb3cgKyAxO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBsZW4pXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLiRmb2xkRGF0YVtmb2xkSW5kZXgrK107XG4gICAgICAgICAgICAgICAgICAgIGZvbGRTdGFydCA9IGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNhY2hlW2ldID09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlW2ldID0gdGhpcy4kZ2V0U3RyaW5nU2NyZWVuV2lkdGgobGluZXNbaV0pWzBdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNhY2hlW2ldID4gbG9uZ2VzdFNjcmVlbkxpbmUpXG4gICAgICAgICAgICAgICAgICAgIGxvbmdlc3RTY3JlZW5MaW5lID0gY2FjaGVbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNjcmVlbldpZHRoID0gbG9uZ2VzdFNjcmVlbkxpbmU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ2V0TGluZSA9IGZ1bmN0aW9uKHJvdykge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2MuZ2V0TGluZShyb3cpO1xuICAgIH07XG4gICAgdGhpcy5nZXRMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXRMaW5lcyhmaXJzdFJvdywgbGFzdFJvdyk7XG4gICAgfTtcbiAgICB0aGlzLmdldExlbmd0aCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2MuZ2V0TGVuZ3RoKCk7XG4gICAgfTtcbiAgICB0aGlzLmdldFRleHRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UgfHwgdGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKSk7XG4gICAgfTtcbiAgICB0aGlzLmluc2VydCA9IGZ1bmN0aW9uKHBvc2l0aW9uLCB0ZXh0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvYy5pbnNlcnQocG9zaXRpb24sIHRleHQpO1xuICAgIH07XG4gICAgdGhpcy5yZW1vdmUgPSBmdW5jdGlvbihyYW5nZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2MucmVtb3ZlKHJhbmdlKTtcbiAgICB9O1xuICAgIHRoaXMucmVtb3ZlRnVsbExpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpe1xuICAgICAgICByZXR1cm4gdGhpcy5kb2MucmVtb3ZlRnVsbExpbmVzKGZpcnN0Um93LCBsYXN0Um93KTtcbiAgICB9O1xuICAgIHRoaXMudW5kb0NoYW5nZXMgPSBmdW5jdGlvbihkZWx0YXMsIGRvbnRTZWxlY3QpIHtcbiAgICAgICAgaWYgKCFkZWx0YXMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuJGZyb21VbmRvID0gdHJ1ZTtcbiAgICAgICAgdmFyIGxhc3RVbmRvUmFuZ2UgPSBudWxsO1xuICAgICAgICBmb3IgKHZhciBpID0gZGVsdGFzLmxlbmd0aCAtIDE7IGkgIT0gLTE7IGktLSkge1xuICAgICAgICAgICAgdmFyIGRlbHRhID0gZGVsdGFzW2ldO1xuICAgICAgICAgICAgaWYgKGRlbHRhLmdyb3VwID09IFwiZG9jXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvYy5yZXZlcnREZWx0YXMoZGVsdGEuZGVsdGFzKTtcbiAgICAgICAgICAgICAgICBsYXN0VW5kb1JhbmdlID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZ2V0VW5kb1NlbGVjdGlvbihkZWx0YS5kZWx0YXMsIHRydWUsIGxhc3RVbmRvUmFuZ2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWx0YS5kZWx0YXMuZm9yRWFjaChmdW5jdGlvbihmb2xkRGVsdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRGb2xkcyhmb2xkRGVsdGEuZm9sZHMpO1xuICAgICAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuJGZyb21VbmRvID0gZmFsc2U7XG4gICAgICAgIGxhc3RVbmRvUmFuZ2UgJiZcbiAgICAgICAgICAgIHRoaXMuJHVuZG9TZWxlY3QgJiZcbiAgICAgICAgICAgICFkb250U2VsZWN0ICYmXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShsYXN0VW5kb1JhbmdlKTtcbiAgICAgICAgcmV0dXJuIGxhc3RVbmRvUmFuZ2U7XG4gICAgfTtcbiAgICB0aGlzLnJlZG9DaGFuZ2VzID0gZnVuY3Rpb24oZGVsdGFzLCBkb250U2VsZWN0KSB7XG4gICAgICAgIGlmICghZGVsdGFzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB0aGlzLiRmcm9tVW5kbyA9IHRydWU7XG4gICAgICAgIHZhciBsYXN0VW5kb1JhbmdlID0gbnVsbDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWx0YXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBkZWx0YSA9IGRlbHRhc1tpXTtcbiAgICAgICAgICAgIGlmIChkZWx0YS5ncm91cCA9PSBcImRvY1wiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb2MuYXBwbHlEZWx0YXMoZGVsdGEuZGVsdGFzKTtcbiAgICAgICAgICAgICAgICBsYXN0VW5kb1JhbmdlID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZ2V0VW5kb1NlbGVjdGlvbihkZWx0YS5kZWx0YXMsIGZhbHNlLCBsYXN0VW5kb1JhbmdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRmcm9tVW5kbyA9IGZhbHNlO1xuICAgICAgICBsYXN0VW5kb1JhbmdlICYmXG4gICAgICAgICAgICB0aGlzLiR1bmRvU2VsZWN0ICYmXG4gICAgICAgICAgICAhZG9udFNlbGVjdCAmJlxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UobGFzdFVuZG9SYW5nZSk7XG4gICAgICAgIHJldHVybiBsYXN0VW5kb1JhbmdlO1xuICAgIH07XG4gICAgdGhpcy5zZXRVbmRvU2VsZWN0ID0gZnVuY3Rpb24oZW5hYmxlKSB7XG4gICAgICAgIHRoaXMuJHVuZG9TZWxlY3QgPSBlbmFibGU7XG4gICAgfTtcblxuICAgIHRoaXMuJGdldFVuZG9TZWxlY3Rpb24gPSBmdW5jdGlvbihkZWx0YXMsIGlzVW5kbywgbGFzdFVuZG9SYW5nZSkge1xuICAgICAgICBmdW5jdGlvbiBpc0luc2VydChkZWx0YSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzVW5kbyA/IGRlbHRhLmFjdGlvbiAhPT0gXCJpbnNlcnRcIiA6IGRlbHRhLmFjdGlvbiA9PT0gXCJpbnNlcnRcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkZWx0YSA9IGRlbHRhc1swXTtcbiAgICAgICAgdmFyIHJhbmdlLCBwb2ludDtcbiAgICAgICAgdmFyIGxhc3REZWx0YUlzSW5zZXJ0ID0gZmFsc2U7XG4gICAgICAgIGlmIChpc0luc2VydChkZWx0YSkpIHtcbiAgICAgICAgICAgIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhkZWx0YS5zdGFydCwgZGVsdGEuZW5kKTtcbiAgICAgICAgICAgIGxhc3REZWx0YUlzSW5zZXJ0ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhkZWx0YS5zdGFydCwgZGVsdGEuc3RhcnQpO1xuICAgICAgICAgICAgbGFzdERlbHRhSXNJbnNlcnQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgZGVsdGFzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBkZWx0YSA9IGRlbHRhc1tpXTtcbiAgICAgICAgICAgIGlmIChpc0luc2VydChkZWx0YSkpIHtcbiAgICAgICAgICAgICAgICBwb2ludCA9IGRlbHRhLnN0YXJ0O1xuICAgICAgICAgICAgICAgIGlmIChyYW5nZS5jb21wYXJlKHBvaW50LnJvdywgcG9pbnQuY29sdW1uKSA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByYW5nZS5zZXRTdGFydChwb2ludCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBvaW50ID0gZGVsdGEuZW5kO1xuICAgICAgICAgICAgICAgIGlmIChyYW5nZS5jb21wYXJlKHBvaW50LnJvdywgcG9pbnQuY29sdW1uKSA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJhbmdlLnNldEVuZChwb2ludCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxhc3REZWx0YUlzSW5zZXJ0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcG9pbnQgPSBkZWx0YS5zdGFydDtcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2UuY29tcGFyZShwb2ludC5yb3csIHBvaW50LmNvbHVtbikgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKGRlbHRhLnN0YXJ0LCBkZWx0YS5zdGFydCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxhc3REZWx0YUlzSW5zZXJ0ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhc3RVbmRvUmFuZ2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKFJhbmdlLmNvbXBhcmVQb2ludHMobGFzdFVuZG9SYW5nZS5zdGFydCwgcmFuZ2Uuc3RhcnQpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbGFzdFVuZG9SYW5nZS5zdGFydC5jb2x1bW4gKz0gcmFuZ2UuZW5kLmNvbHVtbiAtIHJhbmdlLnN0YXJ0LmNvbHVtbjtcbiAgICAgICAgICAgICAgICBsYXN0VW5kb1JhbmdlLmVuZC5jb2x1bW4gKz0gcmFuZ2UuZW5kLmNvbHVtbiAtIHJhbmdlLnN0YXJ0LmNvbHVtbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNtcCA9IGxhc3RVbmRvUmFuZ2UuY29tcGFyZVJhbmdlKHJhbmdlKTtcbiAgICAgICAgICAgIGlmIChjbXAgPT0gMSkge1xuICAgICAgICAgICAgICAgIHJhbmdlLnNldFN0YXJ0KGxhc3RVbmRvUmFuZ2Uuc3RhcnQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICByYW5nZS5zZXRFbmQobGFzdFVuZG9SYW5nZS5lbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgIH07XG4gICAgdGhpcy5yZXBsYWNlID0gZnVuY3Rpb24ocmFuZ2UsIHRleHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jLnJlcGxhY2UocmFuZ2UsIHRleHQpO1xuICAgIH07XG4gICAgdGhpcy5tb3ZlVGV4dCA9IGZ1bmN0aW9uKGZyb21SYW5nZSwgdG9Qb3NpdGlvbiwgY29weSkge1xuICAgICAgICB2YXIgdGV4dCA9IHRoaXMuZ2V0VGV4dFJhbmdlKGZyb21SYW5nZSk7XG4gICAgICAgIHZhciBmb2xkcyA9IHRoaXMuZ2V0Rm9sZHNJblJhbmdlKGZyb21SYW5nZSk7XG5cbiAgICAgICAgdmFyIHRvUmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKHRvUG9zaXRpb24sIHRvUG9zaXRpb24pO1xuICAgICAgICBpZiAoIWNvcHkpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKGZyb21SYW5nZSk7XG4gICAgICAgICAgICB2YXIgcm93RGlmZiA9IGZyb21SYW5nZS5zdGFydC5yb3cgLSBmcm9tUmFuZ2UuZW5kLnJvdztcbiAgICAgICAgICAgIHZhciBjb2xsRGlmZiA9IHJvd0RpZmYgPyAtZnJvbVJhbmdlLmVuZC5jb2x1bW4gOiBmcm9tUmFuZ2Uuc3RhcnQuY29sdW1uIC0gZnJvbVJhbmdlLmVuZC5jb2x1bW47XG4gICAgICAgICAgICBpZiAoY29sbERpZmYpIHtcbiAgICAgICAgICAgICAgICBpZiAodG9SYW5nZS5zdGFydC5yb3cgPT0gZnJvbVJhbmdlLmVuZC5yb3cgJiYgdG9SYW5nZS5zdGFydC5jb2x1bW4gPiBmcm9tUmFuZ2UuZW5kLmNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgdG9SYW5nZS5zdGFydC5jb2x1bW4gKz0gY29sbERpZmY7XG4gICAgICAgICAgICAgICAgaWYgKHRvUmFuZ2UuZW5kLnJvdyA9PSBmcm9tUmFuZ2UuZW5kLnJvdyAmJiB0b1JhbmdlLmVuZC5jb2x1bW4gPiBmcm9tUmFuZ2UuZW5kLmNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgdG9SYW5nZS5lbmQuY29sdW1uICs9IGNvbGxEaWZmO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJvd0RpZmYgJiYgdG9SYW5nZS5zdGFydC5yb3cgPj0gZnJvbVJhbmdlLmVuZC5yb3cpIHtcbiAgICAgICAgICAgICAgICB0b1JhbmdlLnN0YXJ0LnJvdyArPSByb3dEaWZmO1xuICAgICAgICAgICAgICAgIHRvUmFuZ2UuZW5kLnJvdyArPSByb3dEaWZmO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdG9SYW5nZS5lbmQgPSB0aGlzLmluc2VydCh0b1JhbmdlLnN0YXJ0LCB0ZXh0KTtcbiAgICAgICAgaWYgKGZvbGRzLmxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIG9sZFN0YXJ0ID0gZnJvbVJhbmdlLnN0YXJ0O1xuICAgICAgICAgICAgdmFyIG5ld1N0YXJ0ID0gdG9SYW5nZS5zdGFydDtcbiAgICAgICAgICAgIHZhciByb3dEaWZmID0gbmV3U3RhcnQucm93IC0gb2xkU3RhcnQucm93O1xuICAgICAgICAgICAgdmFyIGNvbGxEaWZmID0gbmV3U3RhcnQuY29sdW1uIC0gb2xkU3RhcnQuY29sdW1uO1xuICAgICAgICAgICAgdGhpcy5hZGRGb2xkcyhmb2xkcy5tYXAoZnVuY3Rpb24oeCkge1xuICAgICAgICAgICAgICAgIHggPSB4LmNsb25lKCk7XG4gICAgICAgICAgICAgICAgaWYgKHguc3RhcnQucm93ID09IG9sZFN0YXJ0LnJvdylcbiAgICAgICAgICAgICAgICAgICAgeC5zdGFydC5jb2x1bW4gKz0gY29sbERpZmY7XG4gICAgICAgICAgICAgICAgaWYgKHguZW5kLnJvdyA9PSBvbGRTdGFydC5yb3cpXG4gICAgICAgICAgICAgICAgICAgIHguZW5kLmNvbHVtbiArPSBjb2xsRGlmZjtcbiAgICAgICAgICAgICAgICB4LnN0YXJ0LnJvdyArPSByb3dEaWZmO1xuICAgICAgICAgICAgICAgIHguZW5kLnJvdyArPSByb3dEaWZmO1xuICAgICAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRvUmFuZ2U7XG4gICAgfTtcbiAgICB0aGlzLmluZGVudFJvd3MgPSBmdW5jdGlvbihzdGFydFJvdywgZW5kUm93LCBpbmRlbnRTdHJpbmcpIHtcbiAgICAgICAgaW5kZW50U3RyaW5nID0gaW5kZW50U3RyaW5nLnJlcGxhY2UoL1xcdC9nLCB0aGlzLmdldFRhYlN0cmluZygpKTtcbiAgICAgICAgZm9yICh2YXIgcm93PXN0YXJ0Um93OyByb3c8PWVuZFJvdzsgcm93KyspXG4gICAgICAgICAgICB0aGlzLmRvYy5pbnNlcnRJbkxpbmUoe3Jvdzogcm93LCBjb2x1bW46IDB9LCBpbmRlbnRTdHJpbmcpO1xuICAgIH07XG4gICAgdGhpcy5vdXRkZW50Um93cyA9IGZ1bmN0aW9uIChyYW5nZSkge1xuICAgICAgICB2YXIgcm93UmFuZ2UgPSByYW5nZS5jb2xsYXBzZVJvd3MoKTtcbiAgICAgICAgdmFyIGRlbGV0ZVJhbmdlID0gbmV3IFJhbmdlKDAsIDAsIDAsIDApO1xuICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuZ2V0VGFiU2l6ZSgpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSByb3dSYW5nZS5zdGFydC5yb3c7IGkgPD0gcm93UmFuZ2UuZW5kLnJvdzsgKytpKSB7XG4gICAgICAgICAgICB2YXIgbGluZSA9IHRoaXMuZ2V0TGluZShpKTtcblxuICAgICAgICAgICAgZGVsZXRlUmFuZ2Uuc3RhcnQucm93ID0gaTtcbiAgICAgICAgICAgIGRlbGV0ZVJhbmdlLmVuZC5yb3cgPSBpO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzaXplOyArK2opXG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuY2hhckF0KGopICE9ICcgJylcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBpZiAoaiA8IHNpemUgJiYgbGluZS5jaGFyQXQoaikgPT0gJ1xcdCcpIHtcbiAgICAgICAgICAgICAgICBkZWxldGVSYW5nZS5zdGFydC5jb2x1bW4gPSBqO1xuICAgICAgICAgICAgICAgIGRlbGV0ZVJhbmdlLmVuZC5jb2x1bW4gPSBqICsgMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlUmFuZ2Uuc3RhcnQuY29sdW1uID0gMDtcbiAgICAgICAgICAgICAgICBkZWxldGVSYW5nZS5lbmQuY29sdW1uID0gajtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKGRlbGV0ZVJhbmdlKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLiRtb3ZlTGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdywgZGlyKSB7XG4gICAgICAgIGZpcnN0Um93ID0gdGhpcy5nZXRSb3dGb2xkU3RhcnQoZmlyc3RSb3cpO1xuICAgICAgICBsYXN0Um93ID0gdGhpcy5nZXRSb3dGb2xkRW5kKGxhc3RSb3cpO1xuICAgICAgICBpZiAoZGlyIDwgMCkge1xuICAgICAgICAgICAgdmFyIHJvdyA9IHRoaXMuZ2V0Um93Rm9sZFN0YXJ0KGZpcnN0Um93ICsgZGlyKTtcbiAgICAgICAgICAgIGlmIChyb3cgPCAwKSByZXR1cm4gMDtcbiAgICAgICAgICAgIHZhciBkaWZmID0gcm93LWZpcnN0Um93O1xuICAgICAgICB9IGVsc2UgaWYgKGRpciA+IDApIHtcbiAgICAgICAgICAgIHZhciByb3cgPSB0aGlzLmdldFJvd0ZvbGRFbmQobGFzdFJvdyArIGRpcik7XG4gICAgICAgICAgICBpZiAocm93ID4gdGhpcy5kb2MuZ2V0TGVuZ3RoKCktMSkgcmV0dXJuIDA7XG4gICAgICAgICAgICB2YXIgZGlmZiA9IHJvdy1sYXN0Um93O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmlyc3RSb3cgPSB0aGlzLiRjbGlwUm93VG9Eb2N1bWVudChmaXJzdFJvdyk7XG4gICAgICAgICAgICBsYXN0Um93ID0gdGhpcy4kY2xpcFJvd1RvRG9jdW1lbnQobGFzdFJvdyk7XG4gICAgICAgICAgICB2YXIgZGlmZiA9IGxhc3RSb3cgLSBmaXJzdFJvdyArIDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2UoZmlyc3RSb3csIDAsIGxhc3RSb3csIE51bWJlci5NQVhfVkFMVUUpO1xuICAgICAgICB2YXIgZm9sZHMgPSB0aGlzLmdldEZvbGRzSW5SYW5nZShyYW5nZSkubWFwKGZ1bmN0aW9uKHgpe1xuICAgICAgICAgICAgeCA9IHguY2xvbmUoKTtcbiAgICAgICAgICAgIHguc3RhcnQucm93ICs9IGRpZmY7XG4gICAgICAgICAgICB4LmVuZC5yb3cgKz0gZGlmZjtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIHZhciBsaW5lcyA9IGRpciA9PSAwXG4gICAgICAgICAgICA/IHRoaXMuZG9jLmdldExpbmVzKGZpcnN0Um93LCBsYXN0Um93KVxuICAgICAgICAgICAgOiB0aGlzLmRvYy5yZW1vdmVGdWxsTGluZXMoZmlyc3RSb3csIGxhc3RSb3cpO1xuICAgICAgICB0aGlzLmRvYy5pbnNlcnRGdWxsTGluZXMoZmlyc3RSb3crZGlmZiwgbGluZXMpO1xuICAgICAgICBmb2xkcy5sZW5ndGggJiYgdGhpcy5hZGRGb2xkcyhmb2xkcyk7XG4gICAgICAgIHJldHVybiBkaWZmO1xuICAgIH07XG4gICAgdGhpcy5tb3ZlTGluZXNVcCA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRtb3ZlTGluZXMoZmlyc3RSb3csIGxhc3RSb3csIC0xKTtcbiAgICB9O1xuICAgIHRoaXMubW92ZUxpbmVzRG93biA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRtb3ZlTGluZXMoZmlyc3RSb3csIGxhc3RSb3csIDEpO1xuICAgIH07XG4gICAgdGhpcy5kdXBsaWNhdGVMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRtb3ZlTGluZXMoZmlyc3RSb3csIGxhc3RSb3csIDApO1xuICAgIH07XG5cblxuICAgIHRoaXMuJGNsaXBSb3dUb0RvY3VtZW50ID0gZnVuY3Rpb24ocm93KSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3csIHRoaXMuZG9jLmdldExlbmd0aCgpLTEpKTtcbiAgICB9O1xuXG4gICAgdGhpcy4kY2xpcENvbHVtblRvUm93ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgaWYgKGNvbHVtbiA8IDApXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKHRoaXMuZG9jLmdldExpbmUocm93KS5sZW5ndGgsIGNvbHVtbik7XG4gICAgfTtcblxuXG4gICAgdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7XG4gICAgICAgIGNvbHVtbiA9IE1hdGgubWF4KDAsIGNvbHVtbik7XG5cbiAgICAgICAgaWYgKHJvdyA8IDApIHtcbiAgICAgICAgICAgIHJvdyA9IDA7XG4gICAgICAgICAgICBjb2x1bW4gPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGxlbiA9IHRoaXMuZG9jLmdldExlbmd0aCgpO1xuICAgICAgICAgICAgaWYgKHJvdyA+PSBsZW4pIHtcbiAgICAgICAgICAgICAgICByb3cgPSBsZW4gLSAxO1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IHRoaXMuZG9jLmdldExpbmUobGVuLTEpLmxlbmd0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29sdW1uID0gTWF0aC5taW4odGhpcy5kb2MuZ2V0TGluZShyb3cpLmxlbmd0aCwgY29sdW1uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgIGNvbHVtbjogY29sdW1uXG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHRoaXMuJGNsaXBSYW5nZVRvRG9jdW1lbnQgPSBmdW5jdGlvbihyYW5nZSkge1xuICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93IDwgMCkge1xuICAgICAgICAgICAgcmFuZ2Uuc3RhcnQucm93ID0gMDtcbiAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4gPSB0aGlzLiRjbGlwQ29sdW1uVG9Sb3coXG4gICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQucm93LFxuICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW4gPSB0aGlzLmRvYy5nZXRMZW5ndGgoKSAtIDE7XG4gICAgICAgIGlmIChyYW5nZS5lbmQucm93ID4gbGVuKSB7XG4gICAgICAgICAgICByYW5nZS5lbmQucm93ID0gbGVuO1xuICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IHRoaXMuZG9jLmdldExpbmUobGVuKS5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uID0gdGhpcy4kY2xpcENvbHVtblRvUm93KFxuICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5yb3csXG4gICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgfTtcbiAgICB0aGlzLiR3cmFwTGltaXQgPSA4MDtcbiAgICB0aGlzLiR1c2VXcmFwTW9kZSA9IGZhbHNlO1xuICAgIHRoaXMuJHdyYXBMaW1pdFJhbmdlID0ge1xuICAgICAgICBtaW4gOiBudWxsLFxuICAgICAgICBtYXggOiBudWxsXG4gICAgfTtcbiAgICB0aGlzLnNldFVzZVdyYXBNb2RlID0gZnVuY3Rpb24odXNlV3JhcE1vZGUpIHtcbiAgICAgICAgaWYgKHVzZVdyYXBNb2RlICE9IHRoaXMuJHVzZVdyYXBNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLiR1c2VXcmFwTW9kZSA9IHVzZVdyYXBNb2RlO1xuICAgICAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy4kcmVzZXRSb3dDYWNoZSgwKTtcbiAgICAgICAgICAgIGlmICh1c2VXcmFwTW9kZSkge1xuICAgICAgICAgICAgICAgIHZhciBsZW4gPSB0aGlzLmdldExlbmd0aCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuJHdyYXBEYXRhID0gQXJyYXkobGVuKTtcbiAgICAgICAgICAgICAgICB0aGlzLiR1cGRhdGVXcmFwRGF0YSgwLCBsZW4gLSAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fc2lnbmFsKFwiY2hhbmdlV3JhcE1vZGVcIik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ2V0VXNlV3JhcE1vZGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHVzZVdyYXBNb2RlO1xuICAgIH07XG4gICAgdGhpcy5zZXRXcmFwTGltaXRSYW5nZSA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG4gICAgICAgIGlmICh0aGlzLiR3cmFwTGltaXRSYW5nZS5taW4gIT09IG1pbiB8fCB0aGlzLiR3cmFwTGltaXRSYW5nZS5tYXggIT09IG1heCkge1xuICAgICAgICAgICAgdGhpcy4kd3JhcExpbWl0UmFuZ2UgPSB7IG1pbjogbWluLCBtYXg6IG1heCB9O1xuICAgICAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy4kYmlkaUhhbmRsZXIubWFya0FzRGlydHkoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSlcbiAgICAgICAgICAgICAgICB0aGlzLl9zaWduYWwoXCJjaGFuZ2VXcmFwTW9kZVwiKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5hZGp1c3RXcmFwTGltaXQgPSBmdW5jdGlvbihkZXNpcmVkTGltaXQsICRwcmludE1hcmdpbikge1xuICAgICAgICB2YXIgbGltaXRzID0gdGhpcy4kd3JhcExpbWl0UmFuZ2U7XG4gICAgICAgIGlmIChsaW1pdHMubWF4IDwgMClcbiAgICAgICAgICAgIGxpbWl0cyA9IHttaW46ICRwcmludE1hcmdpbiwgbWF4OiAkcHJpbnRNYXJnaW59O1xuICAgICAgICB2YXIgd3JhcExpbWl0ID0gdGhpcy4kY29uc3RyYWluV3JhcExpbWl0KGRlc2lyZWRMaW1pdCwgbGltaXRzLm1pbiwgbGltaXRzLm1heCk7XG4gICAgICAgIGlmICh3cmFwTGltaXQgIT0gdGhpcy4kd3JhcExpbWl0ICYmIHdyYXBMaW1pdCA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMuJHdyYXBMaW1pdCA9IHdyYXBMaW1pdDtcbiAgICAgICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVdyYXBEYXRhKDAsIHRoaXMuZ2V0TGVuZ3RoKCkgLSAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLiRyZXNldFJvd0NhY2hlKDApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZVdyYXBMaW1pdFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgdGhpcy4kY29uc3RyYWluV3JhcExpbWl0ID0gZnVuY3Rpb24od3JhcExpbWl0LCBtaW4sIG1heCkge1xuICAgICAgICBpZiAobWluKVxuICAgICAgICAgICAgd3JhcExpbWl0ID0gTWF0aC5tYXgobWluLCB3cmFwTGltaXQpO1xuXG4gICAgICAgIGlmIChtYXgpXG4gICAgICAgICAgICB3cmFwTGltaXQgPSBNYXRoLm1pbihtYXgsIHdyYXBMaW1pdCk7XG5cbiAgICAgICAgcmV0dXJuIHdyYXBMaW1pdDtcbiAgICB9O1xuICAgIHRoaXMuZ2V0V3JhcExpbWl0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiR3cmFwTGltaXQ7XG4gICAgfTtcbiAgICB0aGlzLnNldFdyYXBMaW1pdCA9IGZ1bmN0aW9uIChsaW1pdCkge1xuICAgICAgICB0aGlzLnNldFdyYXBMaW1pdFJhbmdlKGxpbWl0LCBsaW1pdCk7XG4gICAgfTtcbiAgICB0aGlzLmdldFdyYXBMaW1pdFJhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtaW4gOiB0aGlzLiR3cmFwTGltaXRSYW5nZS5taW4sXG4gICAgICAgICAgICBtYXggOiB0aGlzLiR3cmFwTGltaXRSYW5nZS5tYXhcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgdGhpcy4kdXBkYXRlSW50ZXJuYWxEYXRhT25DaGFuZ2UgPSBmdW5jdGlvbihkZWx0YSkge1xuICAgICAgICB2YXIgdXNlV3JhcE1vZGUgPSB0aGlzLiR1c2VXcmFwTW9kZTtcbiAgICAgICAgdmFyIGFjdGlvbiA9IGRlbHRhLmFjdGlvbjtcbiAgICAgICAgdmFyIHN0YXJ0ID0gZGVsdGEuc3RhcnQ7XG4gICAgICAgIHZhciBlbmQgPSBkZWx0YS5lbmQ7XG4gICAgICAgIHZhciBmaXJzdFJvdyA9IHN0YXJ0LnJvdztcbiAgICAgICAgdmFyIGxhc3RSb3cgPSBlbmQucm93O1xuICAgICAgICB2YXIgbGVuID0gbGFzdFJvdyAtIGZpcnN0Um93O1xuICAgICAgICB2YXIgcmVtb3ZlZEZvbGRzID0gbnVsbDtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuJHVwZGF0aW5nID0gdHJ1ZTtcbiAgICAgICAgaWYgKGxlbiAhPSAwKSB7XG4gICAgICAgICAgICBpZiAoYWN0aW9uID09PSBcInJlbW92ZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhpc1t1c2VXcmFwTW9kZSA/IFwiJHdyYXBEYXRhXCIgOiBcIiRyb3dMZW5ndGhDYWNoZVwiXS5zcGxpY2UoZmlyc3RSb3csIGxlbik7XG5cbiAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmVzID0gdGhpcy4kZm9sZERhdGE7XG4gICAgICAgICAgICAgICAgcmVtb3ZlZEZvbGRzID0gdGhpcy5nZXRGb2xkc0luUmFuZ2UoZGVsdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRm9sZHMocmVtb3ZlZEZvbGRzKTtcblxuICAgICAgICAgICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuZ2V0Rm9sZExpbmUoZW5kLnJvdyk7XG4gICAgICAgICAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGZvbGRMaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLmFkZFJlbW92ZUNoYXJzKGVuZC5yb3csIGVuZC5jb2x1bW4sIHN0YXJ0LmNvbHVtbiAtIGVuZC5jb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5zaGlmdFJvdygtbGVuKTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmVCZWZvcmUgPSB0aGlzLmdldEZvbGRMaW5lKGZpcnN0Um93KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRMaW5lQmVmb3JlICYmIGZvbGRMaW5lQmVmb3JlICE9PSBmb2xkTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmVCZWZvcmUubWVyZ2UoZm9sZExpbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUgPSBmb2xkTGluZUJlZm9yZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZHggPSBmb2xkTGluZXMuaW5kZXhPZihmb2xkTGluZSkgKyAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAoaWR4OyBpZHggPCBmb2xkTGluZXMubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmUgPSBmb2xkTGluZXNbaWR4XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRMaW5lLnN0YXJ0LnJvdyA+PSBlbmQucm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5zaGlmdFJvdygtbGVuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxhc3RSb3cgPSBmaXJzdFJvdztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheShsZW4pO1xuICAgICAgICAgICAgICAgIGFyZ3MudW5zaGlmdChmaXJzdFJvdywgMCk7XG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHVzZVdyYXBNb2RlID8gdGhpcy4kd3JhcERhdGEgOiB0aGlzLiRyb3dMZW5ndGhDYWNoZTtcbiAgICAgICAgICAgICAgICBhcnIuc3BsaWNlLmFwcGx5KGFyciwgYXJncyk7XG4gICAgICAgICAgICAgICAgdmFyIGZvbGRMaW5lcyA9IHRoaXMuJGZvbGREYXRhO1xuICAgICAgICAgICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuZ2V0Rm9sZExpbmUoZmlyc3RSb3cpO1xuICAgICAgICAgICAgICAgIHZhciBpZHggPSAwO1xuICAgICAgICAgICAgICAgIGlmIChmb2xkTGluZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY21wID0gZm9sZExpbmUucmFuZ2UuY29tcGFyZUluc2lkZShzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjbXAgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUgPSBmb2xkTGluZS5zcGxpdChzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZExpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5zaGlmdFJvdyhsZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLmFkZFJlbW92ZUNoYXJzKGxhc3RSb3csIDAsIGVuZC5jb2x1bW4gLSBzdGFydC5jb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUuYWRkUmVtb3ZlQ2hhcnMoZmlyc3RSb3csIDAsIGVuZC5jb2x1bW4gLSBzdGFydC5jb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUuc2hpZnRSb3cobGVuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZHggPSBmb2xkTGluZXMuaW5kZXhPZihmb2xkTGluZSkgKyAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAoaWR4OyBpZHggPCBmb2xkTGluZXMubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmUgPSBmb2xkTGluZXNbaWR4XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRMaW5lLnN0YXJ0LnJvdyA+PSBmaXJzdFJvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUuc2hpZnRSb3cobGVuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxlbiA9IE1hdGguYWJzKGRlbHRhLnN0YXJ0LmNvbHVtbiAtIGRlbHRhLmVuZC5jb2x1bW4pO1xuICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gXCJyZW1vdmVcIikge1xuICAgICAgICAgICAgICAgIHJlbW92ZWRGb2xkcyA9IHRoaXMuZ2V0Rm9sZHNJblJhbmdlKGRlbHRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZvbGRzKHJlbW92ZWRGb2xkcyk7XG5cbiAgICAgICAgICAgICAgICBsZW4gPSAtbGVuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5nZXRGb2xkTGluZShmaXJzdFJvdyk7XG4gICAgICAgICAgICBpZiAoZm9sZExpbmUpIHtcbiAgICAgICAgICAgICAgICBmb2xkTGluZS5hZGRSZW1vdmVDaGFycyhmaXJzdFJvdywgc3RhcnQuY29sdW1uLCBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVzZVdyYXBNb2RlICYmIHRoaXMuJHdyYXBEYXRhLmxlbmd0aCAhPSB0aGlzLmRvYy5nZXRMZW5ndGgoKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImRvYy5nZXRMZW5ndGgoKSBhbmQgJHdyYXBEYXRhLmxlbmd0aCBoYXZlIHRvIGJlIHRoZSBzYW1lIVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiR1cGRhdGluZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh1c2VXcmFwTW9kZSlcbiAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVdyYXBEYXRhKGZpcnN0Um93LCBsYXN0Um93KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy4kdXBkYXRlUm93TGVuZ3RoQ2FjaGUoZmlyc3RSb3csIGxhc3RSb3cpO1xuXG4gICAgICAgIHJldHVybiByZW1vdmVkRm9sZHM7XG4gICAgfTtcblxuICAgIHRoaXMuJHVwZGF0ZVJvd0xlbmd0aENhY2hlID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3csIGIpIHtcbiAgICAgICAgdGhpcy4kcm93TGVuZ3RoQ2FjaGVbZmlyc3RSb3ddID0gbnVsbDtcbiAgICAgICAgdGhpcy4kcm93TGVuZ3RoQ2FjaGVbbGFzdFJvd10gPSBudWxsO1xuICAgIH07XG5cbiAgICB0aGlzLiR1cGRhdGVXcmFwRGF0YSA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7XG4gICAgICAgIHZhciBsaW5lcyA9IHRoaXMuZG9jLmdldEFsbExpbmVzKCk7XG4gICAgICAgIHZhciB0YWJTaXplID0gdGhpcy5nZXRUYWJTaXplKCk7XG4gICAgICAgIHZhciB3cmFwRGF0YSA9IHRoaXMuJHdyYXBEYXRhO1xuICAgICAgICB2YXIgd3JhcExpbWl0ID0gdGhpcy4kd3JhcExpbWl0O1xuICAgICAgICB2YXIgdG9rZW5zO1xuICAgICAgICB2YXIgZm9sZExpbmU7XG5cbiAgICAgICAgdmFyIHJvdyA9IGZpcnN0Um93O1xuICAgICAgICBsYXN0Um93ID0gTWF0aC5taW4obGFzdFJvdywgbGluZXMubGVuZ3RoIC0gMSk7XG4gICAgICAgIHdoaWxlIChyb3cgPD0gbGFzdFJvdykge1xuICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLmdldEZvbGRMaW5lKHJvdywgZm9sZExpbmUpO1xuICAgICAgICAgICAgaWYgKCFmb2xkTGluZSkge1xuICAgICAgICAgICAgICAgIHRva2VucyA9IHRoaXMuJGdldERpc3BsYXlUb2tlbnMobGluZXNbcm93XSk7XG4gICAgICAgICAgICAgICAgd3JhcERhdGFbcm93XSA9IHRoaXMuJGNvbXB1dGVXcmFwU3BsaXRzKHRva2Vucywgd3JhcExpbWl0LCB0YWJTaXplKTtcbiAgICAgICAgICAgICAgICByb3cgKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRva2VucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvbGRMaW5lLndhbGsoZnVuY3Rpb24ocGxhY2Vob2xkZXIsIHJvdywgY29sdW1uLCBsYXN0Q29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2Fsa1Rva2VucztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbGFjZWhvbGRlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Fsa1Rva2VucyA9IHRoaXMuJGdldERpc3BsYXlUb2tlbnMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyLCB0b2tlbnMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWxrVG9rZW5zWzBdID0gUExBQ0VIT0xERVJfU1RBUlQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB3YWxrVG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtUb2tlbnNbaV0gPSBQTEFDRUhPTERFUl9CT0RZO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Fsa1Rva2VucyA9IHRoaXMuJGdldERpc3BsYXlUb2tlbnMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzW3Jvd10uc3Vic3RyaW5nKGxhc3RDb2x1bW4sIGNvbHVtbiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zID0gdG9rZW5zLmNvbmNhdCh3YWxrVG9rZW5zKTtcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5lbmQucm93LFxuICAgICAgICAgICAgICAgICAgICBsaW5lc1tmb2xkTGluZS5lbmQucm93XS5sZW5ndGggKyAxXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIHdyYXBEYXRhW2ZvbGRMaW5lLnN0YXJ0LnJvd10gPSB0aGlzLiRjb21wdXRlV3JhcFNwbGl0cyh0b2tlbnMsIHdyYXBMaW1pdCwgdGFiU2l6ZSk7XG4gICAgICAgICAgICAgICAgcm93ID0gZm9sZExpbmUuZW5kLnJvdyArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciBDSEFSID0gMSxcbiAgICAgICAgQ0hBUl9FWFQgPSAyLFxuICAgICAgICBQTEFDRUhPTERFUl9TVEFSVCA9IDMsXG4gICAgICAgIFBMQUNFSE9MREVSX0JPRFkgPSAgNCxcbiAgICAgICAgUFVOQ1RVQVRJT04gPSA5LFxuICAgICAgICBTUEFDRSA9IDEwLFxuICAgICAgICBUQUIgPSAxMSxcbiAgICAgICAgVEFCX1NQQUNFID0gMTI7XG5cblxuICAgIHRoaXMuJGNvbXB1dGVXcmFwU3BsaXRzID0gZnVuY3Rpb24odG9rZW5zLCB3cmFwTGltaXQsIHRhYlNpemUpIHtcbiAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNwbGl0cyA9IFtdO1xuICAgICAgICB2YXIgZGlzcGxheUxlbmd0aCA9IHRva2Vucy5sZW5ndGg7XG4gICAgICAgIHZhciBsYXN0U3BsaXQgPSAwLCBsYXN0RG9jU3BsaXQgPSAwO1xuXG4gICAgICAgIHZhciBpc0NvZGUgPSB0aGlzLiR3cmFwQXNDb2RlO1xuXG4gICAgICAgIHZhciBpbmRlbnRlZFNvZnRXcmFwID0gdGhpcy4kaW5kZW50ZWRTb2Z0V3JhcDtcbiAgICAgICAgdmFyIG1heEluZGVudCA9IHdyYXBMaW1pdCA8PSBNYXRoLm1heCgyICogdGFiU2l6ZSwgOClcbiAgICAgICAgICAgIHx8IGluZGVudGVkU29mdFdyYXAgPT09IGZhbHNlID8gMCA6IE1hdGguZmxvb3Iod3JhcExpbWl0IC8gMik7XG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0V3JhcEluZGVudCgpIHtcbiAgICAgICAgICAgIHZhciBpbmRlbnRhdGlvbiA9IDA7XG4gICAgICAgICAgICBpZiAobWF4SW5kZW50ID09PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBpbmRlbnRhdGlvbjtcbiAgICAgICAgICAgIGlmIChpbmRlbnRlZFNvZnRXcmFwKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gU1BBQ0UpXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnRhdGlvbiArPSAxO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0b2tlbiA9PSBUQUIpXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnRhdGlvbiArPSB0YWJTaXplO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0b2tlbiA9PSBUQUJfU1BBQ0UpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzQ29kZSAmJiBpbmRlbnRlZFNvZnRXcmFwICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICBpbmRlbnRhdGlvbiArPSB0YWJTaXplO1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKGluZGVudGF0aW9uLCBtYXhJbmRlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFkZFNwbGl0KHNjcmVlblBvcykge1xuICAgICAgICAgICAgdmFyIGRpc3BsYXllZCA9IHRva2Vucy5zbGljZShsYXN0U3BsaXQsIHNjcmVlblBvcyk7XG4gICAgICAgICAgICB2YXIgbGVuID0gZGlzcGxheWVkLmxlbmd0aDtcbiAgICAgICAgICAgIGRpc3BsYXllZC5qb2luKFwiXCIpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLzEyL2csIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBsZW4gLT0gMTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8yL2csIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBsZW4gLT0gMTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKCFzcGxpdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaW5kZW50ID0gZ2V0V3JhcEluZGVudCgpO1xuICAgICAgICAgICAgICAgIHNwbGl0cy5pbmRlbnQgPSBpbmRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0RG9jU3BsaXQgKz0gbGVuO1xuICAgICAgICAgICAgc3BsaXRzLnB1c2gobGFzdERvY1NwbGl0KTtcbiAgICAgICAgICAgIGxhc3RTcGxpdCA9IHNjcmVlblBvcztcbiAgICAgICAgfVxuICAgICAgICB2YXIgaW5kZW50ID0gMDtcbiAgICAgICAgd2hpbGUgKGRpc3BsYXlMZW5ndGggLSBsYXN0U3BsaXQgPiB3cmFwTGltaXQgLSBpbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBzcGxpdCA9IGxhc3RTcGxpdCArIHdyYXBMaW1pdCAtIGluZGVudDtcbiAgICAgICAgICAgIGlmICh0b2tlbnNbc3BsaXQgLSAxXSA+PSBTUEFDRSAmJiB0b2tlbnNbc3BsaXRdID49IFNQQUNFKSB7XG4gICAgICAgICAgICAgICAgYWRkU3BsaXQoc3BsaXQpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRva2Vuc1tzcGxpdF0gPT0gUExBQ0VIT0xERVJfU1RBUlQgfHwgdG9rZW5zW3NwbGl0XSA9PSBQTEFDRUhPTERFUl9CT0RZKSB7XG4gICAgICAgICAgICAgICAgZm9yIChzcGxpdDsgc3BsaXQgIT0gbGFzdFNwbGl0IC0gMTsgc3BsaXQtLSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zW3NwbGl0XSA9PSBQTEFDRUhPTERFUl9TVEFSVCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNwbGl0ID4gbGFzdFNwbGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFNwbGl0KHNwbGl0KTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNwbGl0ID0gbGFzdFNwbGl0ICsgd3JhcExpbWl0O1xuICAgICAgICAgICAgICAgIGZvciAoc3BsaXQ7IHNwbGl0IDwgdG9rZW5zLmxlbmd0aDsgc3BsaXQrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zW3NwbGl0XSAhPSBQTEFDRUhPTERFUl9CT0RZKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc3BsaXQgPT0gdG9rZW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhazsgIC8vIEJyZWFrcyB0aGUgd2hpbGUtbG9vcC5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWRkU3BsaXQoc3BsaXQpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG1pblNwbGl0ID0gTWF0aC5tYXgoc3BsaXQgLSAod3JhcExpbWl0IC0od3JhcExpbWl0Pj4yKSksIGxhc3RTcGxpdCAtIDEpO1xuICAgICAgICAgICAgd2hpbGUgKHNwbGl0ID4gbWluU3BsaXQgJiYgdG9rZW5zW3NwbGl0XSA8IFBMQUNFSE9MREVSX1NUQVJUKSB7XG4gICAgICAgICAgICAgICAgc3BsaXQgLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNDb2RlKSB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHNwbGl0ID4gbWluU3BsaXQgJiYgdG9rZW5zW3NwbGl0XSA8IFBMQUNFSE9MREVSX1NUQVJUKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwbGl0IC0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aGlsZSAoc3BsaXQgPiBtaW5TcGxpdCAmJiB0b2tlbnNbc3BsaXRdID09IFBVTkNUVUFUSU9OKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwbGl0IC0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHNwbGl0ID4gbWluU3BsaXQgJiYgdG9rZW5zW3NwbGl0XSA8IFNQQUNFKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwbGl0IC0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzcGxpdCA+IG1pblNwbGl0KSB7XG4gICAgICAgICAgICAgICAgYWRkU3BsaXQoKytzcGxpdCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzcGxpdCA9IGxhc3RTcGxpdCArIHdyYXBMaW1pdDtcbiAgICAgICAgICAgIGlmICh0b2tlbnNbc3BsaXRdID09IENIQVJfRVhUKVxuICAgICAgICAgICAgICAgIHNwbGl0LS07XG4gICAgICAgICAgICBhZGRTcGxpdChzcGxpdCAtIGluZGVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNwbGl0cztcbiAgICB9O1xuICAgIHRoaXMuJGdldERpc3BsYXlUb2tlbnMgPSBmdW5jdGlvbihzdHIsIG9mZnNldCkge1xuICAgICAgICB2YXIgYXJyID0gW107XG4gICAgICAgIHZhciB0YWJTaXplO1xuICAgICAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGMgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICAgIGlmIChjID09IDkpIHtcbiAgICAgICAgICAgICAgICB0YWJTaXplID0gdGhpcy5nZXRTY3JlZW5UYWJTaXplKGFyci5sZW5ndGggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKFRBQik7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDE7IG4gPCB0YWJTaXplOyBuKyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goVEFCX1NQQUNFKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjID09IDMyKSB7XG4gICAgICAgICAgICAgICAgYXJyLnB1c2goU1BBQ0UpO1xuICAgICAgICAgICAgfSBlbHNlIGlmKChjID4gMzkgJiYgYyA8IDQ4KSB8fCAoYyA+IDU3ICYmIGMgPCA2NCkpIHtcbiAgICAgICAgICAgICAgICBhcnIucHVzaChQVU5DVFVBVElPTik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjID49IDB4MTEwMCAmJiBpc0Z1bGxXaWR0aChjKSkge1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKENIQVIsIENIQVJfRVhUKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXJyLnB1c2goQ0hBUik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9O1xuICAgIHRoaXMuJGdldFN0cmluZ1NjcmVlbldpZHRoID0gZnVuY3Rpb24oc3RyLCBtYXhTY3JlZW5Db2x1bW4sIHNjcmVlbkNvbHVtbikge1xuICAgICAgICBpZiAobWF4U2NyZWVuQ29sdW1uID09IDApXG4gICAgICAgICAgICByZXR1cm4gWzAsIDBdO1xuICAgICAgICBpZiAobWF4U2NyZWVuQ29sdW1uID09IG51bGwpXG4gICAgICAgICAgICBtYXhTY3JlZW5Db2x1bW4gPSBJbmZpbml0eTtcbiAgICAgICAgc2NyZWVuQ29sdW1uID0gc2NyZWVuQ29sdW1uIHx8IDA7XG5cbiAgICAgICAgdmFyIGMsIGNvbHVtbjtcbiAgICAgICAgZm9yIChjb2x1bW4gPSAwOyBjb2x1bW4gPCBzdHIubGVuZ3RoOyBjb2x1bW4rKykge1xuICAgICAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KGNvbHVtbik7XG4gICAgICAgICAgICBpZiAoYyA9PSA5KSB7XG4gICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uICs9IHRoaXMuZ2V0U2NyZWVuVGFiU2l6ZShzY3JlZW5Db2x1bW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYyA+PSAweDExMDAgJiYgaXNGdWxsV2lkdGgoYykpIHtcbiAgICAgICAgICAgICAgICBzY3JlZW5Db2x1bW4gKz0gMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2NyZWVuQ29sdW1uID4gbWF4U2NyZWVuQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW3NjcmVlbkNvbHVtbiwgY29sdW1uXTtcbiAgICB9O1xuXG4gICAgdGhpcy5saW5lV2lkZ2V0cyA9IG51bGw7XG4gICAgdGhpcy5nZXRSb3dMZW5ndGggPSBmdW5jdGlvbihyb3cpIHtcbiAgICAgICAgaWYgKHRoaXMubGluZVdpZGdldHMpXG4gICAgICAgICAgICB2YXIgaCA9IHRoaXMubGluZVdpZGdldHNbcm93XSAmJiB0aGlzLmxpbmVXaWRnZXRzW3Jvd10ucm93Q291bnQgfHwgMDtcbiAgICAgICAgZWxzZSBcbiAgICAgICAgICAgIGggPSAwO1xuICAgICAgICBpZiAoIXRoaXMuJHVzZVdyYXBNb2RlIHx8ICF0aGlzLiR3cmFwRGF0YVtyb3ddKSB7XG4gICAgICAgICAgICByZXR1cm4gMSArIGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kd3JhcERhdGFbcm93XS5sZW5ndGggKyAxICsgaDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5nZXRSb3dMaW5lQ291bnQgPSBmdW5jdGlvbihyb3cpIHtcbiAgICAgICAgaWYgKCF0aGlzLiR1c2VXcmFwTW9kZSB8fCAhdGhpcy4kd3JhcERhdGFbcm93XSkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kd3JhcERhdGFbcm93XS5sZW5ndGggKyAxO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0Um93V3JhcEluZGVudCA9IGZ1bmN0aW9uKHNjcmVlblJvdykge1xuICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUpIHtcbiAgICAgICAgICAgIHZhciBwb3MgPSB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5Sb3csIE51bWJlci5NQVhfVkFMVUUpO1xuICAgICAgICAgICAgdmFyIHNwbGl0cyA9IHRoaXMuJHdyYXBEYXRhW3Bvcy5yb3ddO1xuICAgICAgICAgICAgcmV0dXJuIHNwbGl0cy5sZW5ndGggJiYgc3BsaXRzWzBdIDwgcG9zLmNvbHVtbiA/IHNwbGl0cy5pbmRlbnQgOiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ2V0U2NyZWVuTGFzdFJvd0NvbHVtbiA9IGZ1bmN0aW9uKHNjcmVlblJvdykge1xuICAgICAgICB2YXIgcG9zID0gdGhpcy5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuUm93LCBOdW1iZXIuTUFYX1ZBTFVFKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRUb1NjcmVlbkNvbHVtbihwb3Mucm93LCBwb3MuY29sdW1uKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0RG9jdW1lbnRMYXN0Um93Q29sdW1uID0gZnVuY3Rpb24oZG9jUm93LCBkb2NDb2x1bW4pIHtcbiAgICAgICAgdmFyIHNjcmVlblJvdyA9IHRoaXMuZG9jdW1lbnRUb1NjcmVlblJvdyhkb2NSb3csIGRvY0NvbHVtbik7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNjcmVlbkxhc3RSb3dDb2x1bW4oc2NyZWVuUm93KTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0RG9jdW1lbnRMYXN0Um93Q29sdW1uUG9zaXRpb24gPSBmdW5jdGlvbihkb2NSb3csIGRvY0NvbHVtbikge1xuICAgICAgICB2YXIgc2NyZWVuUm93ID0gdGhpcy5kb2N1bWVudFRvU2NyZWVuUm93KGRvY1JvdywgZG9jQ29sdW1uKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHNjcmVlblJvdywgTnVtYmVyLk1BWF9WQUxVRSAvIDEwKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0Um93U3BsaXREYXRhID0gZnVuY3Rpb24ocm93KSB7XG4gICAgICAgIGlmICghdGhpcy4kdXNlV3JhcE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kd3JhcERhdGFbcm93XTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5nZXRTY3JlZW5UYWJTaXplID0gZnVuY3Rpb24oc2NyZWVuQ29sdW1uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiR0YWJTaXplIC0gc2NyZWVuQ29sdW1uICUgdGhpcy4kdGFiU2l6ZTtcbiAgICB9O1xuXG5cbiAgICB0aGlzLnNjcmVlblRvRG9jdW1lbnRSb3cgPSBmdW5jdGlvbihzY3JlZW5Sb3csIHNjcmVlbkNvbHVtbikge1xuICAgICAgICByZXR1cm4gdGhpcy5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuUm93LCBzY3JlZW5Db2x1bW4pLnJvdztcbiAgICB9O1xuXG5cbiAgICB0aGlzLnNjcmVlblRvRG9jdW1lbnRDb2x1bW4gPSBmdW5jdGlvbihzY3JlZW5Sb3csIHNjcmVlbkNvbHVtbikge1xuICAgICAgICByZXR1cm4gdGhpcy5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuUm93LCBzY3JlZW5Db2x1bW4pLmNvbHVtbjtcbiAgICB9O1xuICAgIHRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uID0gZnVuY3Rpb24oc2NyZWVuUm93LCBzY3JlZW5Db2x1bW4sIG9mZnNldFgpIHtcbiAgICAgICAgaWYgKHNjcmVlblJvdyA8IDApXG4gICAgICAgICAgICByZXR1cm4ge3JvdzogMCwgY29sdW1uOiAwfTtcblxuICAgICAgICB2YXIgbGluZTtcbiAgICAgICAgdmFyIGRvY1JvdyA9IDA7XG4gICAgICAgIHZhciBkb2NDb2x1bW4gPSAwO1xuICAgICAgICB2YXIgY29sdW1uO1xuICAgICAgICB2YXIgcm93ID0gMDtcbiAgICAgICAgdmFyIHJvd0xlbmd0aCA9IDA7XG5cbiAgICAgICAgdmFyIHJvd0NhY2hlID0gdGhpcy4kc2NyZWVuUm93Q2FjaGU7XG4gICAgICAgIHZhciBpID0gdGhpcy4kZ2V0Um93Q2FjaGVJbmRleChyb3dDYWNoZSwgc2NyZWVuUm93KTtcbiAgICAgICAgdmFyIGwgPSByb3dDYWNoZS5sZW5ndGg7XG4gICAgICAgIGlmIChsICYmIGkgPj0gMCkge1xuICAgICAgICAgICAgdmFyIHJvdyA9IHJvd0NhY2hlW2ldO1xuICAgICAgICAgICAgdmFyIGRvY1JvdyA9IHRoaXMuJGRvY1Jvd0NhY2hlW2ldO1xuICAgICAgICAgICAgdmFyIGRvQ2FjaGUgPSBzY3JlZW5Sb3cgPiByb3dDYWNoZVtsIC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgZG9DYWNoZSA9ICFsO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1heFJvdyA9IHRoaXMuZ2V0TGVuZ3RoKCkgLSAxO1xuICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLmdldE5leHRGb2xkTGluZShkb2NSb3cpO1xuICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOiBJbmZpbml0eTtcblxuICAgICAgICB3aGlsZSAocm93IDw9IHNjcmVlblJvdykge1xuICAgICAgICAgICAgcm93TGVuZ3RoID0gdGhpcy5nZXRSb3dMZW5ndGgoZG9jUm93KTtcbiAgICAgICAgICAgIGlmIChyb3cgKyByb3dMZW5ndGggPiBzY3JlZW5Sb3cgfHwgZG9jUm93ID49IG1heFJvdykge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByb3cgKz0gcm93TGVuZ3RoO1xuICAgICAgICAgICAgICAgIGRvY1JvdysrO1xuICAgICAgICAgICAgICAgIGlmIChkb2NSb3cgPiBmb2xkU3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9jUm93ID0gZm9sZExpbmUuZW5kLnJvdysxO1xuICAgICAgICAgICAgICAgICAgICBmb2xkTGluZSA9IHRoaXMuZ2V0TmV4dEZvbGRMaW5lKGRvY1JvdywgZm9sZExpbmUpO1xuICAgICAgICAgICAgICAgICAgICBmb2xkU3RhcnQgPSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6IEluZmluaXR5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRvQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRkb2NSb3dDYWNoZS5wdXNoKGRvY1Jvdyk7XG4gICAgICAgICAgICAgICAgdGhpcy4kc2NyZWVuUm93Q2FjaGUucHVzaChyb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvbGRMaW5lICYmIGZvbGRMaW5lLnN0YXJ0LnJvdyA8PSBkb2NSb3cpIHtcbiAgICAgICAgICAgIGxpbmUgPSB0aGlzLmdldEZvbGREaXNwbGF5TGluZShmb2xkTGluZSk7XG4gICAgICAgICAgICBkb2NSb3cgPSBmb2xkTGluZS5zdGFydC5yb3c7XG4gICAgICAgIH0gZWxzZSBpZiAocm93ICsgcm93TGVuZ3RoIDw9IHNjcmVlblJvdyB8fCBkb2NSb3cgPiBtYXhSb3cpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcm93OiBtYXhSb3csXG4gICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLmdldExpbmUobWF4Um93KS5sZW5ndGhcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaW5lID0gdGhpcy5nZXRMaW5lKGRvY1Jvdyk7XG4gICAgICAgICAgICBmb2xkTGluZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJbmRlbnQgPSAwLCBzcGxpdEluZGV4ID0gTWF0aC5mbG9vcihzY3JlZW5Sb3cgLSByb3cpO1xuICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUpIHtcbiAgICAgICAgICAgIHZhciBzcGxpdHMgPSB0aGlzLiR3cmFwRGF0YVtkb2NSb3ddO1xuICAgICAgICAgICAgaWYgKHNwbGl0cykge1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IHNwbGl0c1tzcGxpdEluZGV4XTtcbiAgICAgICAgICAgICAgICBpZihzcGxpdEluZGV4ID4gMCAmJiBzcGxpdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdyYXBJbmRlbnQgPSBzcGxpdHMuaW5kZW50O1xuICAgICAgICAgICAgICAgICAgICBkb2NDb2x1bW4gPSBzcGxpdHNbc3BsaXRJbmRleCAtIDFdIHx8IHNwbGl0c1tzcGxpdHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0cmluZyhkb2NDb2x1bW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvZmZzZXRYICE9PSB1bmRlZmluZWQgJiYgdGhpcy4kYmlkaUhhbmRsZXIuaXNCaWRpUm93KHJvdyArIHNwbGl0SW5kZXgsIGRvY1Jvdywgc3BsaXRJbmRleCkpXG4gICAgICAgICAgICBzY3JlZW5Db2x1bW4gPSB0aGlzLiRiaWRpSGFuZGxlci5vZmZzZXRUb0NvbChvZmZzZXRYKTtcblxuICAgICAgICBkb2NDb2x1bW4gKz0gdGhpcy4kZ2V0U3RyaW5nU2NyZWVuV2lkdGgobGluZSwgc2NyZWVuQ29sdW1uIC0gd3JhcEluZGVudClbMV07XG4gICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSAmJiBkb2NDb2x1bW4gPj0gY29sdW1uKVxuICAgICAgICAgICAgZG9jQ29sdW1uID0gY29sdW1uIC0gMTtcblxuICAgICAgICBpZiAoZm9sZExpbmUpXG4gICAgICAgICAgICByZXR1cm4gZm9sZExpbmUuaWR4VG9Qb3NpdGlvbihkb2NDb2x1bW4pO1xuXG4gICAgICAgIHJldHVybiB7cm93OiBkb2NSb3csIGNvbHVtbjogZG9jQ29sdW1ufTtcbiAgICB9O1xuICAgIHRoaXMuZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uID0gZnVuY3Rpb24oZG9jUm93LCBkb2NDb2x1bW4pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkb2NDb2x1bW4gPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICB2YXIgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChkb2NSb3cucm93LCBkb2NSb3cuY29sdW1uKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChkb2NSb3csIGRvY0NvbHVtbik7XG5cbiAgICAgICAgZG9jUm93ID0gcG9zLnJvdztcbiAgICAgICAgZG9jQ29sdW1uID0gcG9zLmNvbHVtbjtcblxuICAgICAgICB2YXIgc2NyZWVuUm93ID0gMDtcbiAgICAgICAgdmFyIGZvbGRTdGFydFJvdyA9IG51bGw7XG4gICAgICAgIHZhciBmb2xkID0gbnVsbDtcbiAgICAgICAgZm9sZCA9IHRoaXMuZ2V0Rm9sZEF0KGRvY1JvdywgZG9jQ29sdW1uLCAxKTtcbiAgICAgICAgaWYgKGZvbGQpIHtcbiAgICAgICAgICAgIGRvY1JvdyA9IGZvbGQuc3RhcnQucm93O1xuICAgICAgICAgICAgZG9jQ29sdW1uID0gZm9sZC5zdGFydC5jb2x1bW47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcm93RW5kLCByb3cgPSAwO1xuXG5cbiAgICAgICAgdmFyIHJvd0NhY2hlID0gdGhpcy4kZG9jUm93Q2FjaGU7XG4gICAgICAgIHZhciBpID0gdGhpcy4kZ2V0Um93Q2FjaGVJbmRleChyb3dDYWNoZSwgZG9jUm93KTtcbiAgICAgICAgdmFyIGwgPSByb3dDYWNoZS5sZW5ndGg7XG4gICAgICAgIGlmIChsICYmIGkgPj0gMCkge1xuICAgICAgICAgICAgdmFyIHJvdyA9IHJvd0NhY2hlW2ldO1xuICAgICAgICAgICAgdmFyIHNjcmVlblJvdyA9IHRoaXMuJHNjcmVlblJvd0NhY2hlW2ldO1xuICAgICAgICAgICAgdmFyIGRvQ2FjaGUgPSBkb2NSb3cgPiByb3dDYWNoZVtsIC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgZG9DYWNoZSA9ICFsO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5nZXROZXh0Rm9sZExpbmUocm93KTtcbiAgICAgICAgdmFyIGZvbGRTdGFydCA9IGZvbGRMaW5lID9mb2xkTGluZS5zdGFydC5yb3cgOkluZmluaXR5O1xuXG4gICAgICAgIHdoaWxlIChyb3cgPCBkb2NSb3cpIHtcbiAgICAgICAgICAgIGlmIChyb3cgPj0gZm9sZFN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgcm93RW5kID0gZm9sZExpbmUuZW5kLnJvdyArIDE7XG4gICAgICAgICAgICAgICAgaWYgKHJvd0VuZCA+IGRvY1JvdylcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLmdldE5leHRGb2xkTGluZShyb3dFbmQsIGZvbGRMaW5lKTtcbiAgICAgICAgICAgICAgICBmb2xkU3RhcnQgPSBmb2xkTGluZSA/Zm9sZExpbmUuc3RhcnQucm93IDpJbmZpbml0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJvd0VuZCA9IHJvdyArIDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjcmVlblJvdyArPSB0aGlzLmdldFJvd0xlbmd0aChyb3cpO1xuICAgICAgICAgICAgcm93ID0gcm93RW5kO1xuXG4gICAgICAgICAgICBpZiAoZG9DYWNoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGRvY1Jvd0NhY2hlLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgICB0aGlzLiRzY3JlZW5Sb3dDYWNoZS5wdXNoKHNjcmVlblJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRleHRMaW5lID0gXCJcIjtcbiAgICAgICAgaWYgKGZvbGRMaW5lICYmIHJvdyA+PSBmb2xkU3RhcnQpIHtcbiAgICAgICAgICAgIHRleHRMaW5lID0gdGhpcy5nZXRGb2xkRGlzcGxheUxpbmUoZm9sZExpbmUsIGRvY1JvdywgZG9jQ29sdW1uKTtcbiAgICAgICAgICAgIGZvbGRTdGFydFJvdyA9IGZvbGRMaW5lLnN0YXJ0LnJvdztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRleHRMaW5lID0gdGhpcy5nZXRMaW5lKGRvY1Jvdykuc3Vic3RyaW5nKDAsIGRvY0NvbHVtbik7XG4gICAgICAgICAgICBmb2xkU3RhcnRSb3cgPSBkb2NSb3c7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJbmRlbnQgPSAwO1xuICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUpIHtcbiAgICAgICAgICAgIHZhciB3cmFwUm93ID0gdGhpcy4kd3JhcERhdGFbZm9sZFN0YXJ0Um93XTtcbiAgICAgICAgICAgIGlmICh3cmFwUm93KSB7XG4gICAgICAgICAgICAgICAgdmFyIHNjcmVlblJvd09mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHRleHRMaW5lLmxlbmd0aCA+PSB3cmFwUm93W3NjcmVlblJvd09mZnNldF0pIHtcbiAgICAgICAgICAgICAgICAgICAgc2NyZWVuUm93ICsrO1xuICAgICAgICAgICAgICAgICAgICBzY3JlZW5Sb3dPZmZzZXQrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGV4dExpbmUgPSB0ZXh0TGluZS5zdWJzdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgIHdyYXBSb3dbc2NyZWVuUm93T2Zmc2V0IC0gMV0gfHwgMCwgdGV4dExpbmUubGVuZ3RoXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB3cmFwSW5kZW50ID0gc2NyZWVuUm93T2Zmc2V0ID4gMCA/IHdyYXBSb3cuaW5kZW50IDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByb3c6IHNjcmVlblJvdyxcbiAgICAgICAgICAgIGNvbHVtbjogd3JhcEluZGVudCArIHRoaXMuJGdldFN0cmluZ1NjcmVlbldpZHRoKHRleHRMaW5lKVswXVxuICAgICAgICB9O1xuICAgIH07XG4gICAgdGhpcy5kb2N1bWVudFRvU2NyZWVuQ29sdW1uID0gZnVuY3Rpb24ocm93LCBkb2NDb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHJvdywgZG9jQ29sdW1uKS5jb2x1bW47XG4gICAgfTtcbiAgICB0aGlzLmRvY3VtZW50VG9TY3JlZW5Sb3cgPSBmdW5jdGlvbihkb2NSb3csIGRvY0NvbHVtbikge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24oZG9jUm93LCBkb2NDb2x1bW4pLnJvdztcbiAgICB9O1xuICAgIHRoaXMuZ2V0U2NyZWVuTGVuZ3RoID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBzY3JlZW5Sb3dzID0gMDtcbiAgICAgICAgdmFyIGZvbGQgPSBudWxsO1xuICAgICAgICBpZiAoIXRoaXMuJHVzZVdyYXBNb2RlKSB7XG4gICAgICAgICAgICBzY3JlZW5Sb3dzID0gdGhpcy5nZXRMZW5ndGgoKTtcbiAgICAgICAgICAgIHZhciBmb2xkRGF0YSA9IHRoaXMuJGZvbGREYXRhO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xkRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGZvbGQgPSBmb2xkRGF0YVtpXTtcbiAgICAgICAgICAgICAgICBzY3JlZW5Sb3dzIC09IGZvbGQuZW5kLnJvdyAtIGZvbGQuc3RhcnQucm93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGxhc3RSb3cgPSB0aGlzLiR3cmFwRGF0YS5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgcm93ID0gMCwgaSA9IDA7XG4gICAgICAgICAgICB2YXIgZm9sZCA9IHRoaXMuJGZvbGREYXRhW2krK107XG4gICAgICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZCA/IGZvbGQuc3RhcnQucm93IDpJbmZpbml0eTtcblxuICAgICAgICAgICAgd2hpbGUgKHJvdyA8IGxhc3RSb3cpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3BsaXRzID0gdGhpcy4kd3JhcERhdGFbcm93XTtcbiAgICAgICAgICAgICAgICBzY3JlZW5Sb3dzICs9IHNwbGl0cyA/IHNwbGl0cy5sZW5ndGggKyAxIDogMTtcbiAgICAgICAgICAgICAgICByb3cgKys7XG4gICAgICAgICAgICAgICAgaWYgKHJvdyA+IGZvbGRTdGFydCkge1xuICAgICAgICAgICAgICAgICAgICByb3cgPSBmb2xkLmVuZC5yb3crMTtcbiAgICAgICAgICAgICAgICAgICAgZm9sZCA9IHRoaXMuJGZvbGREYXRhW2krK107XG4gICAgICAgICAgICAgICAgICAgIGZvbGRTdGFydCA9IGZvbGQgP2ZvbGQuc3RhcnQucm93IDpJbmZpbml0eTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGluZVdpZGdldHMpXG4gICAgICAgICAgICBzY3JlZW5Sb3dzICs9IHRoaXMuJGdldFdpZGdldFNjcmVlbkxlbmd0aCgpO1xuXG4gICAgICAgIHJldHVybiBzY3JlZW5Sb3dzO1xuICAgIH07XG4gICAgdGhpcy4kc2V0Rm9udE1ldHJpY3MgPSBmdW5jdGlvbihmbSkge1xuICAgICAgICBpZiAoIXRoaXMuJGVuYWJsZVZhckNoYXIpIHJldHVybjtcbiAgICAgICAgdGhpcy4kZ2V0U3RyaW5nU2NyZWVuV2lkdGggPSBmdW5jdGlvbihzdHIsIG1heFNjcmVlbkNvbHVtbiwgc2NyZWVuQ29sdW1uKSB7XG4gICAgICAgICAgICBpZiAobWF4U2NyZWVuQ29sdW1uID09PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBbMCwgMF07XG4gICAgICAgICAgICBpZiAoIW1heFNjcmVlbkNvbHVtbilcbiAgICAgICAgICAgICAgICBtYXhTY3JlZW5Db2x1bW4gPSBJbmZpbml0eTtcbiAgICAgICAgICAgIHNjcmVlbkNvbHVtbiA9IHNjcmVlbkNvbHVtbiB8fCAwO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgYywgY29sdW1uO1xuICAgICAgICAgICAgZm9yIChjb2x1bW4gPSAwOyBjb2x1bW4gPCBzdHIubGVuZ3RoOyBjb2x1bW4rKykge1xuICAgICAgICAgICAgICAgIGMgPSBzdHIuY2hhckF0KGNvbHVtbik7XG4gICAgICAgICAgICAgICAgaWYgKGMgPT09IFwiXFx0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uICs9IHRoaXMuZ2V0U2NyZWVuVGFiU2l6ZShzY3JlZW5Db2x1bW4pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNjcmVlbkNvbHVtbiArPSBmbS5nZXRDaGFyYWN0ZXJXaWR0aChjKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNjcmVlbkNvbHVtbiA+IG1heFNjcmVlbkNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBbc2NyZWVuQ29sdW1uLCBjb2x1bW5dO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgXG4gICAgdGhpcy5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmJnVG9rZW5pemVyKSB7XG4gICAgICAgICAgICB0aGlzLmJnVG9rZW5pemVyLnNldERvY3VtZW50KG51bGwpO1xuICAgICAgICAgICAgdGhpcy5iZ1Rva2VuaXplciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kc3RvcFdvcmtlcigpO1xuICAgIH07XG5cbiAgICB0aGlzLmlzRnVsbFdpZHRoID0gaXNGdWxsV2lkdGg7XG4gICAgZnVuY3Rpb24gaXNGdWxsV2lkdGgoYykge1xuICAgICAgICBpZiAoYyA8IDB4MTEwMClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGMgPj0gMHgxMTAwICYmIGMgPD0gMHgxMTVGIHx8XG4gICAgICAgICAgICAgICBjID49IDB4MTFBMyAmJiBjIDw9IDB4MTFBNyB8fFxuICAgICAgICAgICAgICAgYyA+PSAweDExRkEgJiYgYyA8PSAweDExRkYgfHxcbiAgICAgICAgICAgICAgIGMgPj0gMHgyMzI5ICYmIGMgPD0gMHgyMzJBIHx8XG4gICAgICAgICAgICAgICBjID49IDB4MkU4MCAmJiBjIDw9IDB4MkU5OSB8fFxuICAgICAgICAgICAgICAgYyA+PSAweDJFOUIgJiYgYyA8PSAweDJFRjMgfHxcbiAgICAgICAgICAgICAgIGMgPj0gMHgyRjAwICYmIGMgPD0gMHgyRkQ1IHx8XG4gICAgICAgICAgICAgICBjID49IDB4MkZGMCAmJiBjIDw9IDB4MkZGQiB8fFxuICAgICAgICAgICAgICAgYyA+PSAweDMwMDAgJiYgYyA8PSAweDMwM0UgfHxcbiAgICAgICAgICAgICAgIGMgPj0gMHgzMDQxICYmIGMgPD0gMHgzMDk2IHx8XG4gICAgICAgICAgICAgICBjID49IDB4MzA5OSAmJiBjIDw9IDB4MzBGRiB8fFxuICAgICAgICAgICAgICAgYyA+PSAweDMxMDUgJiYgYyA8PSAweDMxMkQgfHxcbiAgICAgICAgICAgICAgIGMgPj0gMHgzMTMxICYmIGMgPD0gMHgzMThFIHx8XG4gICAgICAgICAgICAgICBjID49IDB4MzE5MCAmJiBjIDw9IDB4MzFCQSB8fFxuICAgICAgICAgICAgICAgYyA+PSAweDMxQzAgJiYgYyA8PSAweDMxRTMgfHxcbiAgICAgICAgICAgICAgIGMgPj0gMHgzMUYwICYmIGMgPD0gMHgzMjFFIHx8XG4gICAgICAgICAgICAgICBjID49IDB4MzIyMCAmJiBjIDw9IDB4MzI0NyB8fFxuICAgICAgICAgICAgICAgYyA+PSAweDMyNTAgJiYgYyA8PSAweDMyRkUgfHxcbiAgICAgICAgICAgICAgIGMgPj0gMHgzMzAwICYmIGMgPD0gMHg0REJGIHx8XG4gICAgICAgICAgICAgICBjID49IDB4NEUwMCAmJiBjIDw9IDB4QTQ4QyB8fFxuICAgICAgICAgICAgICAgYyA+PSAweEE0OTAgJiYgYyA8PSAweEE0QzYgfHxcbiAgICAgICAgICAgICAgIGMgPj0gMHhBOTYwICYmIGMgPD0gMHhBOTdDIHx8XG4gICAgICAgICAgICAgICBjID49IDB4QUMwMCAmJiBjIDw9IDB4RDdBMyB8fFxuICAgICAgICAgICAgICAgYyA+PSAweEQ3QjAgJiYgYyA8PSAweEQ3QzYgfHxcbiAgICAgICAgICAgICAgIGMgPj0gMHhEN0NCICYmIGMgPD0gMHhEN0ZCIHx8XG4gICAgICAgICAgICAgICBjID49IDB4RjkwMCAmJiBjIDw9IDB4RkFGRiB8fFxuICAgICAgICAgICAgICAgYyA+PSAweEZFMTAgJiYgYyA8PSAweEZFMTkgfHxcbiAgICAgICAgICAgICAgIGMgPj0gMHhGRTMwICYmIGMgPD0gMHhGRTUyIHx8XG4gICAgICAgICAgICAgICBjID49IDB4RkU1NCAmJiBjIDw9IDB4RkU2NiB8fFxuICAgICAgICAgICAgICAgYyA+PSAweEZFNjggJiYgYyA8PSAweEZFNkIgfHxcbiAgICAgICAgICAgICAgIGMgPj0gMHhGRjAxICYmIGMgPD0gMHhGRjYwIHx8XG4gICAgICAgICAgICAgICBjID49IDB4RkZFMCAmJiBjIDw9IDB4RkZFNjtcbiAgICB9XG5cbn0pLmNhbGwoRWRpdFNlc3Npb24ucHJvdG90eXBlKTtcblxuYWNlcXVpcmUoXCIuL2VkaXRfc2Vzc2lvbi9mb2xkaW5nXCIpLkZvbGRpbmcuY2FsbChFZGl0U2Vzc2lvbi5wcm90b3R5cGUpO1xuYWNlcXVpcmUoXCIuL2VkaXRfc2Vzc2lvbi9icmFja2V0X21hdGNoXCIpLkJyYWNrZXRNYXRjaC5jYWxsKEVkaXRTZXNzaW9uLnByb3RvdHlwZSk7XG5cblxuY29uZmlnLmRlZmluZU9wdGlvbnMoRWRpdFNlc3Npb24ucHJvdG90eXBlLCBcInNlc3Npb25cIiwge1xuICAgIHdyYXA6IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZSA9PSBcIm9mZlwiKVxuICAgICAgICAgICAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBcImZyZWVcIilcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBcInByaW50TWFyZ2luXCIpXG4gICAgICAgICAgICAgICAgdmFsdWUgPSAtMTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUsIDEwKSB8fCBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuJHdyYXAgPT0gdmFsdWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy4kd3JhcCA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VXNlV3JhcE1vZGUoZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgY29sID0gdHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIgPyB2YWx1ZSA6IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRXcmFwTGltaXRSYW5nZShjb2wsIGNvbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRVc2VXcmFwTW9kZSh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldFVzZVdyYXBNb2RlKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4kd3JhcCA9PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicHJpbnRNYXJnaW5cIjtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZ2V0V3JhcExpbWl0UmFuZ2UoKS5taW4pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcImZyZWVcIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kd3JhcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBcIm9mZlwiO1xuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVzU2V0OiB0cnVlXG4gICAgfSwgICAgXG4gICAgd3JhcE1ldGhvZDoge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICAgICAgdmFsID0gdmFsID09IFwiYXV0b1wiXG4gICAgICAgICAgICAgICAgPyB0aGlzLiRtb2RlLnR5cGUgIT0gXCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICA6IHZhbCAhPSBcInRleHRcIjtcbiAgICAgICAgICAgIGlmICh2YWwgIT0gdGhpcy4kd3JhcEFzQ29kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJHdyYXBBc0NvZGUgPSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuJHVzZVdyYXBNb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kcmVzZXRSb3dDYWNoZSgwKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kdXBkYXRlV3JhcERhdGEoMCwgdGhpcy5nZXRMZW5ndGgoKSAtIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiBcImF1dG9cIlxuICAgIH0sXG4gICAgaW5kZW50ZWRTb2Z0V3JhcDogeyBpbml0aWFsVmFsdWU6IHRydWUgfSxcbiAgICBmaXJzdExpbmVOdW1iZXI6IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbigpIHt0aGlzLl9zaWduYWwoXCJjaGFuZ2VCcmVha3BvaW50XCIpO30sXG4gICAgICAgIGluaXRpYWxWYWx1ZTogMVxuICAgIH0sXG4gICAgdXNlV29ya2VyOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24odXNlV29ya2VyKSB7XG4gICAgICAgICAgICB0aGlzLiR1c2VXb3JrZXIgPSB1c2VXb3JrZXI7XG5cbiAgICAgICAgICAgIHRoaXMuJHN0b3BXb3JrZXIoKTtcbiAgICAgICAgICAgIGlmICh1c2VXb3JrZXIpXG4gICAgICAgICAgICAgICAgdGhpcy4kc3RhcnRXb3JrZXIoKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiB0cnVlXG4gICAgfSxcbiAgICB1c2VTb2Z0VGFiczoge2luaXRpYWxWYWx1ZTogdHJ1ZX0sXG4gICAgdGFiU2l6ZToge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHRhYlNpemUpIHtcbiAgICAgICAgICAgIGlmIChpc05hTih0YWJTaXplKSB8fCB0aGlzLiR0YWJTaXplID09PSB0YWJTaXplKSByZXR1cm47XG5cbiAgICAgICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuJHJvd0xlbmd0aENhY2hlID0gW107XG4gICAgICAgICAgICB0aGlzLiR0YWJTaXplID0gdGFiU2l6ZTtcbiAgICAgICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZVRhYlNpemVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGluaXRpYWxWYWx1ZTogNCxcbiAgICAgICAgaGFuZGxlc1NldDogdHJ1ZVxuICAgIH0sXG4gICAgbmF2aWdhdGVXaXRoaW5Tb2Z0VGFiczoge2luaXRpYWxWYWx1ZTogZmFsc2V9LFxuICAgIG92ZXJ3cml0ZToge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbCkge3RoaXMuX3NpZ25hbChcImNoYW5nZU92ZXJ3cml0ZVwiKTt9LFxuICAgICAgICBpbml0aWFsVmFsdWU6IGZhbHNlXG4gICAgfSxcbiAgICBuZXdMaW5lTW9kZToge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbCkge3RoaXMuZG9jLnNldE5ld0xpbmVNb2RlKHZhbCk7fSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5kb2MuZ2V0TmV3TGluZU1vZGUoKTt9LFxuICAgICAgICBoYW5kbGVzU2V0OiB0cnVlXG4gICAgfSxcbiAgICBtb2RlOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7IHRoaXMuc2V0TW9kZSh2YWwpOyB9LFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy4kbW9kZUlkOyB9XG4gICAgfVxufSk7XG5cbmV4cG9ydHMuRWRpdFNlc3Npb24gPSBFZGl0U2Vzc2lvbjtcbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL3NlYXJjaFwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpYi9sYW5nXCIsXCJhY2UvbGliL29vcFwiLFwiYWNlL3JhbmdlXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGxhbmcgPSBhY2VxdWlyZShcIi4vbGliL2xhbmdcIik7XG52YXIgb29wID0gYWNlcXVpcmUoXCIuL2xpYi9vb3BcIik7XG52YXIgUmFuZ2UgPSBhY2VxdWlyZShcIi4vcmFuZ2VcIikuUmFuZ2U7XG5cbnZhciBTZWFyY2ggPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLiRvcHRpb25zID0ge307XG59O1xuXG4oZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXQgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAgIG9vcC5taXhpbih0aGlzLiRvcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICB0aGlzLmdldE9wdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGxhbmcuY29weU9iamVjdCh0aGlzLiRvcHRpb25zKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0T3B0aW9ucyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy4kb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfTtcbiAgICB0aGlzLmZpbmQgPSBmdW5jdGlvbihzZXNzaW9uKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gdGhpcy4kb3B0aW9ucztcbiAgICAgICAgdmFyIGl0ZXJhdG9yID0gdGhpcy4kbWF0Y2hJdGVyYXRvcihzZXNzaW9uLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKCFpdGVyYXRvcilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICB2YXIgZmlyc3RSYW5nZSA9IG51bGw7XG4gICAgICAgIGl0ZXJhdG9yLmZvckVhY2goZnVuY3Rpb24oc3IsIHNjLCBlciwgZWMpIHtcbiAgICAgICAgICAgIGZpcnN0UmFuZ2UgPSBuZXcgUmFuZ2Uoc3IsIHNjLCBlciwgZWMpO1xuICAgICAgICAgICAgaWYgKHNjID09IGVjICYmIG9wdGlvbnMuc3RhcnQgJiYgb3B0aW9ucy5zdGFydC5zdGFydFxuICAgICAgICAgICAgICAgICYmIG9wdGlvbnMuc2tpcEN1cnJlbnQgIT0gZmFsc2UgJiYgZmlyc3RSYW5nZS5pc0VxdWFsKG9wdGlvbnMuc3RhcnQpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBmaXJzdFJhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmlyc3RSYW5nZTtcbiAgICB9O1xuICAgIHRoaXMuZmluZEFsbCA9IGZ1bmN0aW9uKHNlc3Npb24pIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLiRvcHRpb25zO1xuICAgICAgICBpZiAoIW9wdGlvbnMubmVlZGxlKVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB0aGlzLiRhc3NlbWJsZVJlZ0V4cChvcHRpb25zKTtcblxuICAgICAgICB2YXIgcmFuZ2UgPSBvcHRpb25zLnJhbmdlO1xuICAgICAgICB2YXIgbGluZXMgPSByYW5nZVxuICAgICAgICAgICAgPyBzZXNzaW9uLmdldExpbmVzKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2UuZW5kLnJvdylcbiAgICAgICAgICAgIDogc2Vzc2lvbi5kb2MuZ2V0QWxsTGluZXMoKTtcblxuICAgICAgICB2YXIgcmFuZ2VzID0gW107XG4gICAgICAgIHZhciByZSA9IG9wdGlvbnMucmU7XG4gICAgICAgIGlmIChvcHRpb25zLiRpc011bHRpTGluZSkge1xuICAgICAgICAgICAgdmFyIGxlbiA9IHJlLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBtYXhSb3cgPSBsaW5lcy5sZW5ndGggLSBsZW47XG4gICAgICAgICAgICB2YXIgcHJldlJhbmdlO1xuICAgICAgICAgICAgb3V0ZXI6IGZvciAodmFyIHJvdyA9IHJlLm9mZnNldCB8fCAwOyByb3cgPD0gbWF4Um93OyByb3crKykge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGVuOyBqKyspXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaW5lc1tyb3cgKyBqXS5zZWFyY2gocmVbal0pID09IC0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0TGluZSA9IGxpbmVzW3Jvd107XG4gICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBsaW5lc1tyb3cgKyBsZW4gLSAxXTtcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnRJbmRleCA9IHN0YXJ0TGluZS5sZW5ndGggLSBzdGFydExpbmUubWF0Y2gocmVbMF0pWzBdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB2YXIgZW5kSW5kZXggPSBsaW5lLm1hdGNoKHJlW2xlbiAtIDFdKVswXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKHByZXZSYW5nZSAmJiBwcmV2UmFuZ2UuZW5kLnJvdyA9PT0gcm93ICYmXG4gICAgICAgICAgICAgICAgICAgIHByZXZSYW5nZS5lbmQuY29sdW1uID4gc3RhcnRJbmRleFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2gocHJldlJhbmdlID0gbmV3IFJhbmdlKFxuICAgICAgICAgICAgICAgICAgICByb3csIHN0YXJ0SW5kZXgsIHJvdyArIGxlbiAtIDEsIGVuZEluZGV4XG4gICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgICAgaWYgKGxlbiA+IDIpXG4gICAgICAgICAgICAgICAgICAgIHJvdyA9IHJvdyArIGxlbiAtIDI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBsYW5nLmdldE1hdGNoT2Zmc2V0cyhsaW5lc1tpXSwgcmUpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWF0Y2hlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBtYXRjaGVzW2pdO1xuICAgICAgICAgICAgICAgICAgICByYW5nZXMucHVzaChuZXcgUmFuZ2UoaSwgbWF0Y2gub2Zmc2V0LCBpLCBtYXRjaC5vZmZzZXQgKyBtYXRjaC5sZW5ndGgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICAgIHZhciBzdGFydENvbHVtbiA9IHJhbmdlLnN0YXJ0LmNvbHVtbjtcbiAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSByYW5nZS5zdGFydC5jb2x1bW47XG4gICAgICAgICAgICB2YXIgaSA9IDAsIGogPSByYW5nZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChpIDwgaiAmJiByYW5nZXNbaV0uc3RhcnQuY29sdW1uIDwgc3RhcnRDb2x1bW4gJiYgcmFuZ2VzW2ldLnN0YXJ0LnJvdyA9PSByYW5nZS5zdGFydC5yb3cpXG4gICAgICAgICAgICAgICAgaSsrO1xuXG4gICAgICAgICAgICB3aGlsZSAoaSA8IGogJiYgcmFuZ2VzW2pdLmVuZC5jb2x1bW4gPiBlbmRDb2x1bW4gJiYgcmFuZ2VzW2pdLmVuZC5yb3cgPT0gcmFuZ2UuZW5kLnJvdylcbiAgICAgICAgICAgICAgICBqLS07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJhbmdlcyA9IHJhbmdlcy5zbGljZShpLCBqICsgMSk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBqID0gcmFuZ2VzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgICAgICAgIHJhbmdlc1tpXS5zdGFydC5yb3cgKz0gcmFuZ2Uuc3RhcnQucm93O1xuICAgICAgICAgICAgICAgIHJhbmdlc1tpXS5lbmQucm93ICs9IHJhbmdlLnN0YXJ0LnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByYW5nZXM7XG4gICAgfTtcbiAgICB0aGlzLnJlcGxhY2UgPSBmdW5jdGlvbihpbnB1dCwgcmVwbGFjZW1lbnQpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLiRvcHRpb25zO1xuXG4gICAgICAgIHZhciByZSA9IHRoaXMuJGFzc2VtYmxlUmVnRXhwKG9wdGlvbnMpO1xuICAgICAgICBpZiAob3B0aW9ucy4kaXNNdWx0aUxpbmUpXG4gICAgICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7XG5cbiAgICAgICAgaWYgKCFyZSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB2YXIgbWF0Y2ggPSByZS5leGVjKGlucHV0KTtcbiAgICAgICAgaWYgKCFtYXRjaCB8fCBtYXRjaFswXS5sZW5ndGggIT0gaW5wdXQubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIFxuICAgICAgICByZXBsYWNlbWVudCA9IGlucHV0LnJlcGxhY2UocmUsIHJlcGxhY2VtZW50KTtcbiAgICAgICAgaWYgKG9wdGlvbnMucHJlc2VydmVDYXNlKSB7XG4gICAgICAgICAgICByZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50LnNwbGl0KFwiXCIpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IE1hdGgubWluKGlucHV0Lmxlbmd0aCwgaW5wdXQubGVuZ3RoKTsgaS0tOyApIHtcbiAgICAgICAgICAgICAgICB2YXIgY2ggPSBpbnB1dFtpXTtcbiAgICAgICAgICAgICAgICBpZiAoY2ggJiYgY2gudG9Mb3dlckNhc2UoKSAhPSBjaClcbiAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRbaV0gPSByZXBsYWNlbWVudFtpXS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRbaV0gPSByZXBsYWNlbWVudFtpXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudC5qb2luKFwiXCIpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7XG4gICAgfTtcblxuICAgIHRoaXMuJGFzc2VtYmxlUmVnRXhwID0gZnVuY3Rpb24ob3B0aW9ucywgJGRpc2FibGVGYWtlTXVsdGlsaW5lKSB7XG4gICAgICAgIGlmIChvcHRpb25zLm5lZWRsZSBpbnN0YW5jZW9mIFJlZ0V4cClcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnJlID0gb3B0aW9ucy5uZWVkbGU7XG5cbiAgICAgICAgdmFyIG5lZWRsZSA9IG9wdGlvbnMubmVlZGxlO1xuXG4gICAgICAgIGlmICghb3B0aW9ucy5uZWVkbGUpXG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5yZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghb3B0aW9ucy5yZWdFeHApXG4gICAgICAgICAgICBuZWVkbGUgPSBsYW5nLmVzY2FwZVJlZ0V4cChuZWVkbGUpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLndob2xlV29yZClcbiAgICAgICAgICAgIG5lZWRsZSA9IGFkZFdvcmRCb3VuZGFyeShuZWVkbGUsIG9wdGlvbnMpO1xuXG4gICAgICAgIHZhciBtb2RpZmllciA9IG9wdGlvbnMuY2FzZVNlbnNpdGl2ZSA/IFwiZ21cIiA6IFwiZ21pXCI7XG5cbiAgICAgICAgb3B0aW9ucy4kaXNNdWx0aUxpbmUgPSAhJGRpc2FibGVGYWtlTXVsdGlsaW5lICYmIC9bXFxuXFxyXS8udGVzdChuZWVkbGUpO1xuICAgICAgICBpZiAob3B0aW9ucy4kaXNNdWx0aUxpbmUpXG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5yZSA9IHRoaXMuJGFzc2VtYmxlTXVsdGlsaW5lUmVnRXhwKG5lZWRsZSwgbW9kaWZpZXIpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKG5lZWRsZSwgbW9kaWZpZXIpO1xuICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgIHJlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9wdGlvbnMucmUgPSByZTtcbiAgICB9O1xuXG4gICAgdGhpcy4kYXNzZW1ibGVNdWx0aWxpbmVSZWdFeHAgPSBmdW5jdGlvbihuZWVkbGUsIG1vZGlmaWVyKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IG5lZWRsZS5yZXBsYWNlKC9cXHJcXG58XFxyfFxcbi9nLCBcIiRcXG5eXCIpLnNwbGl0KFwiXFxuXCIpO1xuICAgICAgICB2YXIgcmUgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykgdHJ5IHtcbiAgICAgICAgICAgIHJlLnB1c2gobmV3IFJlZ0V4cChwYXJ0c1tpXSwgbW9kaWZpZXIpKTtcbiAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlO1xuICAgIH07XG5cbiAgICB0aGlzLiRtYXRjaEl0ZXJhdG9yID0gZnVuY3Rpb24oc2Vzc2lvbiwgb3B0aW9ucykge1xuICAgICAgICB2YXIgcmUgPSB0aGlzLiRhc3NlbWJsZVJlZ0V4cChvcHRpb25zKTtcbiAgICAgICAgaWYgKCFyZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGJhY2t3YXJkcyA9IG9wdGlvbnMuYmFja3dhcmRzID09IHRydWU7XG4gICAgICAgIHZhciBza2lwQ3VycmVudCA9IG9wdGlvbnMuc2tpcEN1cnJlbnQgIT0gZmFsc2U7XG5cbiAgICAgICAgdmFyIHJhbmdlID0gb3B0aW9ucy5yYW5nZTtcbiAgICAgICAgdmFyIHN0YXJ0ID0gb3B0aW9ucy5zdGFydDtcbiAgICAgICAgaWYgKCFzdGFydClcbiAgICAgICAgICAgIHN0YXJ0ID0gcmFuZ2UgPyByYW5nZVtiYWNrd2FyZHMgPyBcImVuZFwiIDogXCJzdGFydFwiXSA6IHNlc3Npb24uc2VsZWN0aW9uLmdldFJhbmdlKCk7XG4gICAgICAgICBcbiAgICAgICAgaWYgKHN0YXJ0LnN0YXJ0KVxuICAgICAgICAgICAgc3RhcnQgPSBzdGFydFtza2lwQ3VycmVudCAhPSBiYWNrd2FyZHMgPyBcImVuZFwiIDogXCJzdGFydFwiXTtcblxuICAgICAgICB2YXIgZmlyc3RSb3cgPSByYW5nZSA/IHJhbmdlLnN0YXJ0LnJvdyA6IDA7XG4gICAgICAgIHZhciBsYXN0Um93ID0gcmFuZ2UgPyByYW5nZS5lbmQucm93IDogc2Vzc2lvbi5nZXRMZW5ndGgoKSAtIDE7XG5cbiAgICAgICAgaWYgKGJhY2t3YXJkcykge1xuICAgICAgICAgICAgdmFyIGZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHZhciByb3cgPSBzdGFydC5yb3c7XG4gICAgICAgICAgICAgICAgaWYgKGZvckVhY2hJbkxpbmUocm93LCBzdGFydC5jb2x1bW4sIGNhbGxiYWNrKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGZvciAocm93LS07IHJvdyA+PSBmaXJzdFJvdzsgcm93LS0pXG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JFYWNoSW5MaW5lKHJvdywgTnVtYmVyLk1BWF9WQUxVRSwgY2FsbGJhY2spKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLndyYXAgPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBmb3IgKHJvdyA9IGxhc3RSb3csIGZpcnN0Um93ID0gc3RhcnQucm93OyByb3cgPj0gZmlyc3RSb3c7IHJvdy0tKVxuICAgICAgICAgICAgICAgICAgICBpZiAoZm9yRWFjaEluTGluZShyb3csIE51bWJlci5NQVhfVkFMVUUsIGNhbGxiYWNrKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJvdyA9IHN0YXJ0LnJvdztcbiAgICAgICAgICAgICAgICBpZiAoZm9yRWFjaEluTGluZShyb3csIHN0YXJ0LmNvbHVtbiwgY2FsbGJhY2spKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgZm9yIChyb3cgPSByb3cgKyAxOyByb3cgPD0gbGFzdFJvdzsgcm93KyspXG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JFYWNoSW5MaW5lKHJvdywgMCwgY2FsbGJhY2spKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLndyYXAgPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBmb3IgKHJvdyA9IGZpcnN0Um93LCBsYXN0Um93ID0gc3RhcnQucm93OyByb3cgPD0gbGFzdFJvdzsgcm93KyspXG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JFYWNoSW5MaW5lKHJvdywgMCwgY2FsbGJhY2spKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKG9wdGlvbnMuJGlzTXVsdGlMaW5lKSB7XG4gICAgICAgICAgICB2YXIgbGVuID0gcmUubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGZvckVhY2hJbkxpbmUgPSBmdW5jdGlvbihyb3csIG9mZnNldCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnRSb3cgPSBiYWNrd2FyZHMgPyByb3cgLSBsZW4gKyAxIDogcm93O1xuICAgICAgICAgICAgICAgIGlmIChzdGFydFJvdyA8IDApIHJldHVybjtcbiAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShzdGFydFJvdyk7XG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0SW5kZXggPSBsaW5lLnNlYXJjaChyZVswXSk7XG4gICAgICAgICAgICAgICAgaWYgKCFiYWNrd2FyZHMgJiYgc3RhcnRJbmRleCA8IG9mZnNldCB8fCBzdGFydEluZGV4ID09PSAtMSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShzdGFydFJvdyArIGkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGluZS5zZWFyY2gocmVbaV0pID09IC0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgZW5kSW5kZXggPSBsaW5lLm1hdGNoKHJlW2xlbiAtIDFdKVswXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKGJhY2t3YXJkcyAmJiBlbmRJbmRleCA+IG9mZnNldCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhzdGFydFJvdywgc3RhcnRJbmRleCwgc3RhcnRSb3cgKyBsZW4gLSAxLCBlbmRJbmRleCkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChiYWNrd2FyZHMpIHtcbiAgICAgICAgICAgIHZhciBmb3JFYWNoSW5MaW5lID0gZnVuY3Rpb24ocm93LCBlbmRJbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpO1xuICAgICAgICAgICAgICAgIHZhciBtYXRjaGVzID0gW107XG4gICAgICAgICAgICAgICAgdmFyIG0sIGxhc3QgPSAwO1xuICAgICAgICAgICAgICAgIHJlLmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUoKG0gPSByZS5leGVjKGxpbmUpKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gbVswXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGxhc3QgPSBtLmluZGV4O1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3QgPj0gbGluZS5sZW5ndGgpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmUubGFzdEluZGV4ID0gbGFzdCArPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChtLmluZGV4ICsgbGVuZ3RoID4gZW5kSW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKG0uaW5kZXgsIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBtYXRjaGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaSAtPSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaGVzW2kgLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IG1hdGNoZXNbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhyb3csIGNvbHVtbiwgcm93LCBjb2x1bW4gKyBsZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBmb3JFYWNoSW5MaW5lID0gZnVuY3Rpb24ocm93LCBzdGFydEluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7XG4gICAgICAgICAgICAgICAgdmFyIG07XG4gICAgICAgICAgICAgICAgdmFyIGxhc3QgPSBzdGFydEluZGV4O1xuICAgICAgICAgICAgICAgIHJlLmxhc3RJbmRleCA9IHN0YXJ0SW5kZXg7XG4gICAgICAgICAgICAgICAgd2hpbGUoKG0gPSByZS5leGVjKGxpbmUpKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gbVswXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGxhc3QgPSBtLmluZGV4O1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2socm93LCBsYXN0LCByb3csbGFzdCArIGxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlLmxhc3RJbmRleCA9IGxhc3QgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0ID49IGxpbmUubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7Zm9yRWFjaDogZm9yRWFjaH07XG4gICAgfTtcblxufSkuY2FsbChTZWFyY2gucHJvdG90eXBlKTtcblxuZnVuY3Rpb24gYWRkV29yZEJvdW5kYXJ5KG5lZWRsZSwgb3B0aW9ucykge1xuICAgIGZ1bmN0aW9uIHdvcmRCb3VuZGFyeShjKSB7XG4gICAgICAgIGlmICgvXFx3Ly50ZXN0KGMpIHx8IG9wdGlvbnMucmVnRXhwKSByZXR1cm4gXCJcXFxcYlwiO1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHdvcmRCb3VuZGFyeShuZWVkbGVbMF0pICsgbmVlZGxlXG4gICAgICAgICsgd29yZEJvdW5kYXJ5KG5lZWRsZVtuZWVkbGUubGVuZ3RoIC0gMV0pO1xufVxuXG5leHBvcnRzLlNlYXJjaCA9IFNlYXJjaDtcbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL2tleWJvYXJkL2hhc2hfaGFuZGxlclwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpYi9rZXlzXCIsXCJhY2UvbGliL3VzZXJhZ2VudFwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBrZXlVdGlsID0gYWNlcXVpcmUoXCIuLi9saWIva2V5c1wiKTtcbnZhciB1c2VyYWdlbnQgPSBhY2VxdWlyZShcIi4uL2xpYi91c2VyYWdlbnRcIik7XG52YXIgS0VZX01PRFMgPSBrZXlVdGlsLktFWV9NT0RTO1xuXG5mdW5jdGlvbiBIYXNoSGFuZGxlcihjb25maWcsIHBsYXRmb3JtKSB7XG4gICAgdGhpcy5wbGF0Zm9ybSA9IHBsYXRmb3JtIHx8ICh1c2VyYWdlbnQuaXNNYWMgPyBcIm1hY1wiIDogXCJ3aW5cIik7XG4gICAgdGhpcy5jb21tYW5kcyA9IHt9O1xuICAgIHRoaXMuY29tbWFuZEtleUJpbmRpbmcgPSB7fTtcbiAgICB0aGlzLmFkZENvbW1hbmRzKGNvbmZpZyk7XG4gICAgdGhpcy4kc2luZ2xlQ29tbWFuZCA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIE11bHRpSGFzaEhhbmRsZXIoY29uZmlnLCBwbGF0Zm9ybSkge1xuICAgIEhhc2hIYW5kbGVyLmNhbGwodGhpcywgY29uZmlnLCBwbGF0Zm9ybSk7XG4gICAgdGhpcy4kc2luZ2xlQ29tbWFuZCA9IGZhbHNlO1xufVxuXG5NdWx0aUhhc2hIYW5kbGVyLnByb3RvdHlwZSA9IEhhc2hIYW5kbGVyLnByb3RvdHlwZTtcblxuKGZ1bmN0aW9uKCkge1xuICAgIFxuXG4gICAgdGhpcy5hZGRDb21tYW5kID0gZnVuY3Rpb24oY29tbWFuZCkge1xuICAgICAgICBpZiAodGhpcy5jb21tYW5kc1tjb21tYW5kLm5hbWVdKVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVDb21tYW5kKGNvbW1hbmQpO1xuXG4gICAgICAgIHRoaXMuY29tbWFuZHNbY29tbWFuZC5uYW1lXSA9IGNvbW1hbmQ7XG5cbiAgICAgICAgaWYgKGNvbW1hbmQuYmluZEtleSlcbiAgICAgICAgICAgIHRoaXMuX2J1aWxkS2V5SGFzaChjb21tYW5kKTtcbiAgICB9O1xuXG4gICAgdGhpcy5yZW1vdmVDb21tYW5kID0gZnVuY3Rpb24oY29tbWFuZCwga2VlcENvbW1hbmQpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBjb21tYW5kICYmICh0eXBlb2YgY29tbWFuZCA9PT0gJ3N0cmluZycgPyBjb21tYW5kIDogY29tbWFuZC5uYW1lKTtcbiAgICAgICAgY29tbWFuZCA9IHRoaXMuY29tbWFuZHNbbmFtZV07XG4gICAgICAgIGlmICgha2VlcENvbW1hbmQpXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jb21tYW5kc1tuYW1lXTtcbiAgICAgICAgdmFyIGNrYiA9IHRoaXMuY29tbWFuZEtleUJpbmRpbmc7XG4gICAgICAgIGZvciAodmFyIGtleUlkIGluIGNrYikge1xuICAgICAgICAgICAgdmFyIGNtZEdyb3VwID0gY2tiW2tleUlkXTtcbiAgICAgICAgICAgIGlmIChjbWRHcm91cCA9PSBjb21tYW5kKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGNrYltrZXlJZF07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY21kR3JvdXApKSB7XG4gICAgICAgICAgICAgICAgdmFyIGkgPSBjbWRHcm91cC5pbmRleE9mKGNvbW1hbmQpO1xuICAgICAgICAgICAgICAgIGlmIChpICE9IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNtZEdyb3VwLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNtZEdyb3VwLmxlbmd0aCA9PSAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgY2tiW2tleUlkXSA9IGNtZEdyb3VwWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmJpbmRLZXkgPSBmdW5jdGlvbihrZXksIGNvbW1hbmQsIHBvc2l0aW9uKSB7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09IFwib2JqZWN0XCIgJiYga2V5KSB7XG4gICAgICAgICAgICBpZiAocG9zaXRpb24gPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHBvc2l0aW9uID0ga2V5LnBvc2l0aW9uO1xuICAgICAgICAgICAga2V5ID0ga2V5W3RoaXMucGxhdGZvcm1dO1xuICAgICAgICB9XG4gICAgICAgIGlmICgha2V5KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkQ29tbWFuZCh7ZXhlYzogY29tbWFuZCwgYmluZEtleToga2V5LCBuYW1lOiBjb21tYW5kLm5hbWUgfHwga2V5fSk7XG4gICAgICAgIFxuICAgICAgICBrZXkuc3BsaXQoXCJ8XCIpLmZvckVhY2goZnVuY3Rpb24oa2V5UGFydCkge1xuICAgICAgICAgICAgdmFyIGNoYWluID0gXCJcIjtcbiAgICAgICAgICAgIGlmIChrZXlQYXJ0LmluZGV4T2YoXCIgXCIpICE9IC0xKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnRzID0ga2V5UGFydC5zcGxpdCgvXFxzKy8pO1xuICAgICAgICAgICAgICAgIGtleVBhcnQgPSBwYXJ0cy5wb3AoKTtcbiAgICAgICAgICAgICAgICBwYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uKGtleVBhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJpbmRpbmcgPSB0aGlzLnBhcnNlS2V5cyhrZXlQYXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkID0gS0VZX01PRFNbYmluZGluZy5oYXNoSWRdICsgYmluZGluZy5rZXk7XG4gICAgICAgICAgICAgICAgICAgIGNoYWluICs9IChjaGFpbiA/IFwiIFwiIDogXCJcIikgKyBpZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkQ29tbWFuZFRvQmluZGluZyhjaGFpbiwgXCJjaGFpbktleXNcIik7XG4gICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgY2hhaW4gKz0gXCIgXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYmluZGluZyA9IHRoaXMucGFyc2VLZXlzKGtleVBhcnQpO1xuICAgICAgICAgICAgdmFyIGlkID0gS0VZX01PRFNbYmluZGluZy5oYXNoSWRdICsgYmluZGluZy5rZXk7XG4gICAgICAgICAgICB0aGlzLl9hZGRDb21tYW5kVG9CaW5kaW5nKGNoYWluICsgaWQsIGNvbW1hbmQsIHBvc2l0aW9uKTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfTtcbiAgICBcbiAgICBmdW5jdGlvbiBnZXRQb3NpdGlvbihjb21tYW5kKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgY29tbWFuZCA9PSBcIm9iamVjdFwiICYmIGNvbW1hbmQuYmluZEtleVxuICAgICAgICAgICAgJiYgY29tbWFuZC5iaW5kS2V5LnBvc2l0aW9uXG4gICAgICAgICAgICB8fCAoY29tbWFuZC5pc0RlZmF1bHQgPyAtMTAwIDogMCk7XG4gICAgfVxuICAgIHRoaXMuX2FkZENvbW1hbmRUb0JpbmRpbmcgPSBmdW5jdGlvbihrZXlJZCwgY29tbWFuZCwgcG9zaXRpb24pIHtcbiAgICAgICAgdmFyIGNrYiA9IHRoaXMuY29tbWFuZEtleUJpbmRpbmcsIGk7XG4gICAgICAgIGlmICghY29tbWFuZCkge1xuICAgICAgICAgICAgZGVsZXRlIGNrYltrZXlJZF07XG4gICAgICAgIH0gZWxzZSBpZiAoIWNrYltrZXlJZF0gfHwgdGhpcy4kc2luZ2xlQ29tbWFuZCkge1xuICAgICAgICAgICAgY2tiW2tleUlkXSA9IGNvbW1hbmQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2tiW2tleUlkXSkpIHtcbiAgICAgICAgICAgICAgICBja2Jba2V5SWRdID0gW2NrYltrZXlJZF1dO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgoaSA9IGNrYltrZXlJZF0uaW5kZXhPZihjb21tYW5kKSkgIT0gLTEpIHtcbiAgICAgICAgICAgICAgICBja2Jba2V5SWRdLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwb3NpdGlvbiAhPSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb24gPSBnZXRQb3NpdGlvbihjb21tYW5kKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNvbW1hbmRzID0gY2tiW2tleUlkXTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb21tYW5kcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBvdGhlciA9IGNvbW1hbmRzW2ldO1xuICAgICAgICAgICAgICAgIHZhciBvdGhlclBvcyA9IGdldFBvc2l0aW9uKG90aGVyKTtcbiAgICAgICAgICAgICAgICBpZiAob3RoZXJQb3MgPiBwb3NpdGlvbilcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21tYW5kcy5zcGxpY2UoaSwgMCwgY29tbWFuZCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5hZGRDb21tYW5kcyA9IGZ1bmN0aW9uKGNvbW1hbmRzKSB7XG4gICAgICAgIGNvbW1hbmRzICYmIE9iamVjdC5rZXlzKGNvbW1hbmRzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgIHZhciBjb21tYW5kID0gY29tbWFuZHNbbmFtZV07XG4gICAgICAgICAgICBpZiAoIWNvbW1hbmQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmluZEtleShjb21tYW5kLCBuYW1lKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb21tYW5kID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICAgICAgY29tbWFuZCA9IHsgZXhlYzogY29tbWFuZCB9O1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBpZiAoIWNvbW1hbmQubmFtZSlcbiAgICAgICAgICAgICAgICBjb21tYW5kLm5hbWUgPSBuYW1lO1xuXG4gICAgICAgICAgICB0aGlzLmFkZENvbW1hbmQoY29tbWFuZCk7XG4gICAgICAgIH0sIHRoaXMpO1xuICAgIH07XG5cbiAgICB0aGlzLnJlbW92ZUNvbW1hbmRzID0gZnVuY3Rpb24oY29tbWFuZHMpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoY29tbWFuZHMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDb21tYW5kKGNvbW1hbmRzW25hbWVdKTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfTtcblxuICAgIHRoaXMuYmluZEtleXMgPSBmdW5jdGlvbihrZXlMaXN0KSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGtleUxpc3QpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgICB0aGlzLmJpbmRLZXkoa2V5LCBrZXlMaXN0W2tleV0pO1xuICAgICAgICB9LCB0aGlzKTtcbiAgICB9O1xuXG4gICAgdGhpcy5fYnVpbGRLZXlIYXNoID0gZnVuY3Rpb24oY29tbWFuZCkge1xuICAgICAgICB0aGlzLmJpbmRLZXkoY29tbWFuZC5iaW5kS2V5LCBjb21tYW5kKTtcbiAgICB9O1xuICAgIHRoaXMucGFyc2VLZXlzID0gZnVuY3Rpb24oa2V5cykge1xuICAgICAgICB2YXIgcGFydHMgPSBrZXlzLnRvTG93ZXJDYXNlKCkuc3BsaXQoL1tcXC1cXCtdKFtcXC1cXCtdKT8vKS5maWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIHg7fSk7XG4gICAgICAgIHZhciBrZXkgPSBwYXJ0cy5wb3AoKTtcblxuICAgICAgICB2YXIga2V5Q29kZSA9IGtleVV0aWxba2V5XTtcbiAgICAgICAgaWYgKGtleVV0aWwuRlVOQ1RJT05fS0VZU1trZXlDb2RlXSlcbiAgICAgICAgICAgIGtleSA9IGtleVV0aWwuRlVOQ1RJT05fS0VZU1trZXlDb2RlXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBlbHNlIGlmICghcGFydHMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIHtrZXk6IGtleSwgaGFzaElkOiAtMX07XG4gICAgICAgIGVsc2UgaWYgKHBhcnRzLmxlbmd0aCA9PSAxICYmIHBhcnRzWzBdID09IFwic2hpZnRcIilcbiAgICAgICAgICAgIHJldHVybiB7a2V5OiBrZXkudG9VcHBlckNhc2UoKSwgaGFzaElkOiAtMX07XG5cbiAgICAgICAgdmFyIGhhc2hJZCA9IDA7XG4gICAgICAgIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGg7IGktLTspIHtcbiAgICAgICAgICAgIHZhciBtb2RpZmllciA9IGtleVV0aWwuS0VZX01PRFNbcGFydHNbaV1dO1xuICAgICAgICAgICAgaWYgKG1vZGlmaWVyID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImludmFsaWQgbW9kaWZpZXIgXCIgKyBwYXJ0c1tpXSArIFwiIGluIFwiICsga2V5cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGFzaElkIHw9IG1vZGlmaWVyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7a2V5OiBrZXksIGhhc2hJZDogaGFzaElkfTtcbiAgICB9O1xuXG4gICAgdGhpcy5maW5kS2V5Q29tbWFuZCA9IGZ1bmN0aW9uIGZpbmRLZXlDb21tYW5kKGhhc2hJZCwga2V5U3RyaW5nKSB7XG4gICAgICAgIHZhciBrZXkgPSBLRVlfTU9EU1toYXNoSWRdICsga2V5U3RyaW5nO1xuICAgICAgICByZXR1cm4gdGhpcy5jb21tYW5kS2V5QmluZGluZ1trZXldO1xuICAgIH07XG5cbiAgICB0aGlzLmhhbmRsZUtleWJvYXJkID0gZnVuY3Rpb24oZGF0YSwgaGFzaElkLCBrZXlTdHJpbmcsIGtleUNvZGUpIHtcbiAgICAgICAgaWYgKGtleUNvZGUgPCAwKSByZXR1cm47XG4gICAgICAgIHZhciBrZXkgPSBLRVlfTU9EU1toYXNoSWRdICsga2V5U3RyaW5nO1xuICAgICAgICB2YXIgY29tbWFuZCA9IHRoaXMuY29tbWFuZEtleUJpbmRpbmdba2V5XTtcbiAgICAgICAgaWYgKGRhdGEuJGtleUNoYWluKSB7XG4gICAgICAgICAgICBkYXRhLiRrZXlDaGFpbiArPSBcIiBcIiArIGtleTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSB0aGlzLmNvbW1hbmRLZXlCaW5kaW5nW2RhdGEuJGtleUNoYWluXSB8fCBjb21tYW5kO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgaWYgKGNvbW1hbmQgPT0gXCJjaGFpbktleXNcIiB8fCBjb21tYW5kW2NvbW1hbmQubGVuZ3RoIC0gMV0gPT0gXCJjaGFpbktleXNcIikge1xuICAgICAgICAgICAgICAgIGRhdGEuJGtleUNoYWluID0gZGF0YS4ka2V5Q2hhaW4gfHwga2V5O1xuICAgICAgICAgICAgICAgIHJldHVybiB7Y29tbWFuZDogXCJudWxsXCJ9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAoZGF0YS4ka2V5Q2hhaW4pIHtcbiAgICAgICAgICAgIGlmICgoIWhhc2hJZCB8fCBoYXNoSWQgPT0gNCkgJiYga2V5U3RyaW5nLmxlbmd0aCA9PSAxKVxuICAgICAgICAgICAgICAgIGRhdGEuJGtleUNoYWluID0gZGF0YS4ka2V5Q2hhaW4uc2xpY2UoMCwgLWtleS5sZW5ndGggLSAxKTsgLy8gd2FpdCBmb3IgaW5wdXRcbiAgICAgICAgICAgIGVsc2UgaWYgKGhhc2hJZCA9PSAtMSB8fCBrZXlDb2RlID4gMClcbiAgICAgICAgICAgICAgICBkYXRhLiRrZXlDaGFpbiA9IFwiXCI7IC8vIHJlc2V0IGtleUNoYWluXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtjb21tYW5kOiBjb21tYW5kfTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuZ2V0U3RhdHVzVGV4dCA9IGZ1bmN0aW9uKGVkaXRvciwgZGF0YSkge1xuICAgICAgICByZXR1cm4gZGF0YS4ka2V5Q2hhaW4gfHwgXCJcIjtcbiAgICB9O1xuXG59KS5jYWxsKEhhc2hIYW5kbGVyLnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuSGFzaEhhbmRsZXIgPSBIYXNoSGFuZGxlcjtcbmV4cG9ydHMuTXVsdGlIYXNoSGFuZGxlciA9IE11bHRpSGFzaEhhbmRsZXI7XG59KTtcblxuYWNlLmRlZmluZShcImFjZS9jb21tYW5kcy9jb21tYW5kX21hbmFnZXJcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvb29wXCIsXCJhY2Uva2V5Ym9hcmQvaGFzaF9oYW5kbGVyXCIsXCJhY2UvbGliL2V2ZW50X2VtaXR0ZXJcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG52YXIgb29wID0gYWNlcXVpcmUoXCIuLi9saWIvb29wXCIpO1xudmFyIE11bHRpSGFzaEhhbmRsZXIgPSBhY2VxdWlyZShcIi4uL2tleWJvYXJkL2hhc2hfaGFuZGxlclwiKS5NdWx0aUhhc2hIYW5kbGVyO1xudmFyIEV2ZW50RW1pdHRlciA9IGFjZXF1aXJlKFwiLi4vbGliL2V2ZW50X2VtaXR0ZXJcIikuRXZlbnRFbWl0dGVyO1xuXG52YXIgQ29tbWFuZE1hbmFnZXIgPSBmdW5jdGlvbihwbGF0Zm9ybSwgY29tbWFuZHMpIHtcbiAgICBNdWx0aUhhc2hIYW5kbGVyLmNhbGwodGhpcywgY29tbWFuZHMsIHBsYXRmb3JtKTtcbiAgICB0aGlzLmJ5TmFtZSA9IHRoaXMuY29tbWFuZHM7XG4gICAgdGhpcy5zZXREZWZhdWx0SGFuZGxlcihcImV4ZWNcIiwgZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gZS5jb21tYW5kLmV4ZWMoZS5lZGl0b3IsIGUuYXJncyB8fCB7fSk7XG4gICAgfSk7XG59O1xuXG5vb3AuaW5oZXJpdHMoQ29tbWFuZE1hbmFnZXIsIE11bHRpSGFzaEhhbmRsZXIpO1xuXG4oZnVuY3Rpb24oKSB7XG5cbiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7XG5cbiAgICB0aGlzLmV4ZWMgPSBmdW5jdGlvbihjb21tYW5kLCBlZGl0b3IsIGFyZ3MpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29tbWFuZCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBjb21tYW5kLmxlbmd0aDsgaS0tOyApIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5leGVjKGNvbW1hbmRbaV0sIGVkaXRvciwgYXJncykpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjb21tYW5kID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgY29tbWFuZCA9IHRoaXMuY29tbWFuZHNbY29tbWFuZF07XG5cbiAgICAgICAgaWYgKCFjb21tYW5kKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGlmIChlZGl0b3IgJiYgZWRpdG9yLiRyZWFkT25seSAmJiAhY29tbWFuZC5yZWFkT25seSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICBpZiAoY29tbWFuZC5pc0F2YWlsYWJsZSAmJiAhY29tbWFuZC5pc0F2YWlsYWJsZShlZGl0b3IpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHZhciBlID0ge2VkaXRvcjogZWRpdG9yLCBjb21tYW5kOiBjb21tYW5kLCBhcmdzOiBhcmdzfTtcbiAgICAgICAgZS5yZXR1cm5WYWx1ZSA9IHRoaXMuX2VtaXQoXCJleGVjXCIsIGUpO1xuICAgICAgICB0aGlzLl9zaWduYWwoXCJhZnRlckV4ZWNcIiwgZSk7XG5cbiAgICAgICAgcmV0dXJuIGUucmV0dXJuVmFsdWUgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlO1xuICAgIH07XG5cbiAgICB0aGlzLnRvZ2dsZVJlY29yZGluZyA9IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgICAgICBpZiAodGhpcy4kaW5SZXBsYXkpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgZWRpdG9yICYmIGVkaXRvci5fZW1pdChcImNoYW5nZVN0YXR1c1wiKTtcbiAgICAgICAgaWYgKHRoaXMucmVjb3JkaW5nKSB7XG4gICAgICAgICAgICB0aGlzLm1hY3JvLnBvcCgpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXhlY1wiLCB0aGlzLiRhZGRDb21tYW5kVG9NYWNybyk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5tYWNyby5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdGhpcy5tYWNybyA9IHRoaXMub2xkTWFjcm87XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlY29yZGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy4kYWRkQ29tbWFuZFRvTWFjcm8pIHtcbiAgICAgICAgICAgIHRoaXMuJGFkZENvbW1hbmRUb01hY3JvID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFjcm8ucHVzaChbZS5jb21tYW5kLCBlLmFyZ3NdKTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub2xkTWFjcm8gPSB0aGlzLm1hY3JvO1xuICAgICAgICB0aGlzLm1hY3JvID0gW107XG4gICAgICAgIHRoaXMub24oXCJleGVjXCIsIHRoaXMuJGFkZENvbW1hbmRUb01hY3JvKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVjb3JkaW5nID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdGhpcy5yZXBsYXkgPSBmdW5jdGlvbihlZGl0b3IpIHtcbiAgICAgICAgaWYgKHRoaXMuJGluUmVwbGF5IHx8ICF0aGlzLm1hY3JvKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0aGlzLnJlY29yZGluZylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRvZ2dsZVJlY29yZGluZyhlZGl0b3IpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLiRpblJlcGxheSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLm1hY3JvLmZvckVhY2goZnVuY3Rpb24oeCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgeCA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4ZWMoeCwgZWRpdG9yKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlYyh4WzBdLCBlZGl0b3IsIHhbMV0pO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLiRpblJlcGxheSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMudHJpbU1hY3JvID0gZnVuY3Rpb24obSkge1xuICAgICAgICByZXR1cm4gbS5tYXAoZnVuY3Rpb24oeCl7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHhbMF0gIT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICB4WzBdID0geFswXS5uYW1lO1xuICAgICAgICAgICAgaWYgKCF4WzFdKVxuICAgICAgICAgICAgICAgIHggPSB4WzBdO1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbn0pLmNhbGwoQ29tbWFuZE1hbmFnZXIucHJvdG90eXBlKTtcblxuZXhwb3J0cy5Db21tYW5kTWFuYWdlciA9IENvbW1hbmRNYW5hZ2VyO1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9jb21tYW5kcy9kZWZhdWx0X2NvbW1hbmRzXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL2xhbmdcIixcImFjZS9jb25maWdcIixcImFjZS9yYW5nZVwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBsYW5nID0gYWNlcXVpcmUoXCIuLi9saWIvbGFuZ1wiKTtcbnZhciBjb25maWcgPSBhY2VxdWlyZShcIi4uL2NvbmZpZ1wiKTtcbnZhciBSYW5nZSA9IGFjZXF1aXJlKFwiLi4vcmFuZ2VcIikuUmFuZ2U7XG5cbmZ1bmN0aW9uIGJpbmRLZXkod2luLCBtYWMpIHtcbiAgICByZXR1cm4ge3dpbjogd2luLCBtYWM6IG1hY307XG59XG5leHBvcnRzLmNvbW1hbmRzID0gW3tcbiAgICBuYW1lOiBcInNob3dTZXR0aW5nc01lbnVcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC0sXCIsIFwiQ29tbWFuZC0sXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgICAgICBjb25maWcubG9hZE1vZHVsZShcImFjZS9leHQvc2V0dGluZ3NfbWVudVwiLCBmdW5jdGlvbihtb2R1bGUpIHtcbiAgICAgICAgICAgIG1vZHVsZS5pbml0KGVkaXRvcik7XG4gICAgICAgICAgICBlZGl0b3Iuc2hvd1NldHRpbmdzTWVudSgpO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJnb1RvTmV4dEVycm9yXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkFsdC1FXCIsIFwiRjRcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7XG4gICAgICAgIGNvbmZpZy5sb2FkTW9kdWxlKFwiYWNlL2V4dC9lcnJvcl9tYXJrZXJcIiwgZnVuY3Rpb24obW9kdWxlKSB7XG4gICAgICAgICAgICBtb2R1bGUuc2hvd0Vycm9yTWFya2VyKGVkaXRvciwgMSk7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiYW5pbWF0ZVwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJnb1RvUHJldmlvdXNFcnJvclwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJBbHQtU2hpZnQtRVwiLCBcIlNoaWZ0LUY0XCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgICAgICBjb25maWcubG9hZE1vZHVsZShcImFjZS9leHQvZXJyb3JfbWFya2VyXCIsIGZ1bmN0aW9uKG1vZHVsZSkge1xuICAgICAgICAgICAgbW9kdWxlLnNob3dFcnJvck1hcmtlcihlZGl0b3IsIC0xKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJhbmltYXRlXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInNlbGVjdGFsbFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJDdHJsLUFcIiwgXCJDb21tYW5kLUFcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZWxlY3RBbGwoKTsgfSxcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwiY2VudGVyc2VsZWN0aW9uXCIsXG4gICAgYmluZEtleTogYmluZEtleShudWxsLCBcIkN0cmwtTFwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmNlbnRlclNlbGVjdGlvbigpOyB9LFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJnb3RvbGluZVwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJDdHJsLUxcIiwgXCJDb21tYW5kLUxcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7XG4gICAgICAgIHZhciBsaW5lID0gcGFyc2VJbnQocHJvbXB0KFwiRW50ZXIgbGluZSBudW1iZXI6XCIpLCAxMCk7XG4gICAgICAgIGlmICghaXNOYU4obGluZSkpIHtcbiAgICAgICAgICAgIGVkaXRvci5nb3RvTGluZShsaW5lKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcImZvbGRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQWx0LUx8Q3RybC1GMVwiLCBcIkNvbW1hbmQtQWx0LUx8Q29tbWFuZC1GMVwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlc3Npb24udG9nZ2xlRm9sZChmYWxzZSk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImNlbnRlclwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJ1bmZvbGRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQWx0LVNoaWZ0LUx8Q3RybC1TaGlmdC1GMVwiLCBcIkNvbW1hbmQtQWx0LVNoaWZ0LUx8Q29tbWFuZC1TaGlmdC1GMVwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlc3Npb24udG9nZ2xlRm9sZCh0cnVlKTsgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY2VudGVyXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInRvZ2dsZUZvbGRXaWRnZXRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiRjJcIiwgXCJGMlwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlc3Npb24udG9nZ2xlRm9sZFdpZGdldCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjZW50ZXJcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwidG9nZ2xlUGFyZW50Rm9sZFdpZGdldFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJBbHQtRjJcIiwgXCJBbHQtRjJcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZXNzaW9uLnRvZ2dsZUZvbGRXaWRnZXQodHJ1ZSk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImNlbnRlclwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJmb2xkYWxsXCIsXG4gICAgYmluZEtleTogYmluZEtleShudWxsLCBcIkN0cmwtQ29tbWFuZC1PcHRpb24tMFwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlc3Npb24uZm9sZEFsbCgpOyB9LFxuICAgIHNjcm9sbEludG9WaWV3OiBcImNlbnRlclwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJmb2xkT3RoZXJcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQWx0LTBcIiwgXCJDb21tYW5kLU9wdGlvbi0wXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBcbiAgICAgICAgZWRpdG9yLnNlc3Npb24uZm9sZEFsbCgpO1xuICAgICAgICBlZGl0b3Iuc2Vzc2lvbi51bmZvbGQoZWRpdG9yLnNlbGVjdGlvbi5nZXRBbGxSYW5nZXMoKSk7XG4gICAgfSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjZW50ZXJcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwidW5mb2xkYWxsXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkFsdC1TaGlmdC0wXCIsIFwiQ29tbWFuZC1PcHRpb24tU2hpZnQtMFwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlc3Npb24udW5mb2xkKCk7IH0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY2VudGVyXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcImZpbmRuZXh0XCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtS1wiLCBcIkNvbW1hbmQtR1wiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmZpbmROZXh0KCk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImNlbnRlclwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJmaW5kcHJldmlvdXNcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1TaGlmdC1LXCIsIFwiQ29tbWFuZC1TaGlmdC1HXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZmluZFByZXZpb3VzKCk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImNlbnRlclwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJzZWxlY3RPckZpbmROZXh0XCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkFsdC1LXCIsIFwiQ3RybC1HXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgICAgICBpZiAoZWRpdG9yLnNlbGVjdGlvbi5pc0VtcHR5KCkpXG4gICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNlbGVjdFdvcmQoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgZWRpdG9yLmZpbmROZXh0KCk7IFxuICAgIH0sXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInNlbGVjdE9yRmluZFByZXZpb3VzXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkFsdC1TaGlmdC1LXCIsIFwiQ3RybC1TaGlmdC1HXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBcbiAgICAgICAgaWYgKGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKVxuICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3RXb3JkKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGVkaXRvci5maW5kUHJldmlvdXMoKTtcbiAgICB9LFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJmaW5kXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtRlwiLCBcIkNvbW1hbmQtRlwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHtcbiAgICAgICAgY29uZmlnLmxvYWRNb2R1bGUoXCJhY2UvZXh0L3NlYXJjaGJveFwiLCBmdW5jdGlvbihlKSB7ZS5TZWFyY2goZWRpdG9yKTt9KTtcbiAgICB9LFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJvdmVyd3JpdGVcIixcbiAgICBiaW5kS2V5OiBcIkluc2VydFwiLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IudG9nZ2xlT3ZlcndyaXRlKCk7IH0sXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInNlbGVjdHRvc3RhcnRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1TaGlmdC1Ib21lXCIsIFwiQ29tbWFuZC1TaGlmdC1Ib21lfENvbW1hbmQtU2hpZnQtVXBcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5zZWxlY3RGaWxlU3RhcnQoKTsgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgcmVhZE9ubHk6IHRydWUsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiYW5pbWF0ZVwiLFxuICAgIGFjZUNvbW1hbmRHcm91cDogXCJmaWxlSnVtcFwiXG59LCB7XG4gICAgbmFtZTogXCJnb3Rvc3RhcnRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1Ib21lXCIsIFwiQ29tbWFuZC1Ib21lfENvbW1hbmQtVXBcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5uYXZpZ2F0ZUZpbGVTdGFydCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICByZWFkT25seTogdHJ1ZSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJhbmltYXRlXCIsXG4gICAgYWNlQ29tbWFuZEdyb3VwOiBcImZpbGVKdW1wXCJcbn0sIHtcbiAgICBuYW1lOiBcInNlbGVjdHVwXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIlNoaWZ0LVVwXCIsIFwiU2hpZnQtVXB8Q3RybC1TaGlmdC1QXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0VXAoKTsgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcImdvbGluZXVwXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIlVwXCIsIFwiVXB8Q3RybC1QXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvciwgYXJncykgeyBlZGl0b3IubmF2aWdhdGVVcChhcmdzLnRpbWVzKTsgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInNlbGVjdHRvZW5kXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtU2hpZnQtRW5kXCIsIFwiQ29tbWFuZC1TaGlmdC1FbmR8Q29tbWFuZC1TaGlmdC1Eb3duXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0RmlsZUVuZCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICByZWFkT25seTogdHJ1ZSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJhbmltYXRlXCIsXG4gICAgYWNlQ29tbWFuZEdyb3VwOiBcImZpbGVKdW1wXCJcbn0sIHtcbiAgICBuYW1lOiBcImdvdG9lbmRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1FbmRcIiwgXCJDb21tYW5kLUVuZHxDb21tYW5kLURvd25cIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5uYXZpZ2F0ZUZpbGVFbmQoKTsgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgcmVhZE9ubHk6IHRydWUsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiYW5pbWF0ZVwiLFxuICAgIGFjZUNvbW1hbmRHcm91cDogXCJmaWxlSnVtcFwiXG59LCB7XG4gICAgbmFtZTogXCJzZWxlY3Rkb3duXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIlNoaWZ0LURvd25cIiwgXCJTaGlmdC1Eb3dufEN0cmwtU2hpZnQtTlwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdERvd24oKTsgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcImdvbGluZWRvd25cIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiRG93blwiLCBcIkRvd258Q3RybC1OXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvciwgYXJncykgeyBlZGl0b3IubmF2aWdhdGVEb3duKGFyZ3MudGltZXMpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwic2VsZWN0d29yZGxlZnRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1TaGlmdC1MZWZ0XCIsIFwiT3B0aW9uLVNoaWZ0LUxlZnRcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5zZWxlY3RXb3JkTGVmdCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwiZ290b3dvcmRsZWZ0XCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtTGVmdFwiLCBcIk9wdGlvbi1MZWZ0XCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubmF2aWdhdGVXb3JkTGVmdCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwic2VsZWN0dG9saW5lc3RhcnRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQWx0LVNoaWZ0LUxlZnRcIiwgXCJDb21tYW5kLVNoaWZ0LUxlZnR8Q3RybC1TaGlmdC1BXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0TGluZVN0YXJ0KCk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImN1cnNvclwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJnb3RvbGluZXN0YXJ0XCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkFsdC1MZWZ0fEhvbWVcIiwgXCJDb21tYW5kLUxlZnR8SG9tZXxDdHJsLUFcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5uYXZpZ2F0ZUxpbmVTdGFydCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwic2VsZWN0bGVmdFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJTaGlmdC1MZWZ0XCIsIFwiU2hpZnQtTGVmdHxDdHJsLVNoaWZ0LUJcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMZWZ0KCk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImN1cnNvclwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJnb3RvbGVmdFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJMZWZ0XCIsIFwiTGVmdHxDdHJsLUJcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yLCBhcmdzKSB7IGVkaXRvci5uYXZpZ2F0ZUxlZnQoYXJncy50aW1lcyk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImN1cnNvclwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJzZWxlY3R3b3JkcmlnaHRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1TaGlmdC1SaWdodFwiLCBcIk9wdGlvbi1TaGlmdC1SaWdodFwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdFdvcmRSaWdodCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwiZ290b3dvcmRyaWdodFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJDdHJsLVJpZ2h0XCIsIFwiT3B0aW9uLVJpZ2h0XCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubmF2aWdhdGVXb3JkUmlnaHQoKTsgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInNlbGVjdHRvbGluZWVuZFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJBbHQtU2hpZnQtUmlnaHRcIiwgXCJDb21tYW5kLVNoaWZ0LVJpZ2h0fFNoaWZ0LUVuZHxDdHJsLVNoaWZ0LUVcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMaW5lRW5kKCk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImN1cnNvclwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJnb3RvbGluZWVuZFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJBbHQtUmlnaHR8RW5kXCIsIFwiQ29tbWFuZC1SaWdodHxFbmR8Q3RybC1FXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubmF2aWdhdGVMaW5lRW5kKCk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImN1cnNvclwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJzZWxlY3RyaWdodFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJTaGlmdC1SaWdodFwiLCBcIlNoaWZ0LVJpZ2h0XCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0UmlnaHQoKTsgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcImdvdG9yaWdodFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJSaWdodFwiLCBcIlJpZ2h0fEN0cmwtRlwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IsIGFyZ3MpIHsgZWRpdG9yLm5hdmlnYXRlUmlnaHQoYXJncy50aW1lcyk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImN1cnNvclwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJzZWxlY3RwYWdlZG93blwiLFxuICAgIGJpbmRLZXk6IFwiU2hpZnQtUGFnZURvd25cIixcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdFBhZ2VEb3duKCk7IH0sXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInBhZ2Vkb3duXCIsXG4gICAgYmluZEtleTogYmluZEtleShudWxsLCBcIk9wdGlvbi1QYWdlRG93blwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNjcm9sbFBhZ2VEb3duKCk7IH0sXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcImdvdG9wYWdlZG93blwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJQYWdlRG93blwiLCBcIlBhZ2VEb3dufEN0cmwtVlwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdvdG9QYWdlRG93bigpOyB9LFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJzZWxlY3RwYWdldXBcIixcbiAgICBiaW5kS2V5OiBcIlNoaWZ0LVBhZ2VVcFwiLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2VsZWN0UGFnZVVwKCk7IH0sXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInBhZ2V1cFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkobnVsbCwgXCJPcHRpb24tUGFnZVVwXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2Nyb2xsUGFnZVVwKCk7IH0sXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcImdvdG9wYWdldXBcIixcbiAgICBiaW5kS2V5OiBcIlBhZ2VVcFwiLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ290b1BhZ2VVcCgpOyB9LFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJzY3JvbGx1cFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJDdHJsLVVwXCIsIG51bGwpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGUpIHsgZS5yZW5kZXJlci5zY3JvbGxCeSgwLCAtMiAqIGUucmVuZGVyZXIubGF5ZXJDb25maWcubGluZUhlaWdodCk7IH0sXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInNjcm9sbGRvd25cIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1Eb3duXCIsIG51bGwpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGUpIHsgZS5yZW5kZXJlci5zY3JvbGxCeSgwLCAyICogZS5yZW5kZXJlci5sYXllckNvbmZpZy5saW5lSGVpZ2h0KTsgfSxcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwic2VsZWN0bGluZXN0YXJ0XCIsXG4gICAgYmluZEtleTogXCJTaGlmdC1Ib21lXCIsXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMaW5lU3RhcnQoKTsgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInNlbGVjdGxpbmVlbmRcIixcbiAgICBiaW5kS2V5OiBcIlNoaWZ0LUVuZFwiLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0TGluZUVuZCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwidG9nZ2xlcmVjb3JkaW5nXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtQWx0LUVcIiwgXCJDb21tYW5kLU9wdGlvbi1FXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuY29tbWFuZHMudG9nZ2xlUmVjb3JkaW5nKGVkaXRvcik7IH0sXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInJlcGxheW1hY3JvXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtU2hpZnQtRVwiLCBcIkNvbW1hbmQtU2hpZnQtRVwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmNvbW1hbmRzLnJlcGxheShlZGl0b3IpOyB9LFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJqdW1wdG9tYXRjaGluZ1wiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJDdHJsLVBcIiwgXCJDdHJsLVBcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5qdW1wVG9NYXRjaGluZygpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJhbmltYXRlXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInNlbGVjdHRvbWF0Y2hpbmdcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1TaGlmdC1QXCIsIFwiQ3RybC1TaGlmdC1QXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuanVtcFRvTWF0Y2hpbmcodHJ1ZSk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImFuaW1hdGVcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwiZXhwYW5kVG9NYXRjaGluZ1wiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJDdHJsLVNoaWZ0LU1cIiwgXCJDdHJsLVNoaWZ0LU1cIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5qdW1wVG9NYXRjaGluZyh0cnVlLCB0cnVlKTsgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiYW5pbWF0ZVwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJwYXNzS2V5c1RvQnJvd3NlclwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkobnVsbCwgbnVsbCksXG4gICAgZXhlYzogZnVuY3Rpb24oKSB7fSxcbiAgICBwYXNzRXZlbnQ6IHRydWUsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcImNvcHlcIixcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHtcbiAgICB9LFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LFxue1xuICAgIG5hbWU6IFwiY3V0XCIsXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7XG4gICAgICAgIHZhciByYW5nZSA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpO1xuICAgICAgICBlZGl0b3IuX2VtaXQoXCJjdXRcIiwgcmFuZ2UpO1xuXG4gICAgICAgIGlmICghZWRpdG9yLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIGVkaXRvci5zZXNzaW9uLnJlbW92ZShyYW5nZSk7XG4gICAgICAgICAgICBlZGl0b3IuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCIsXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiXG59LCB7XG4gICAgbmFtZTogXCJwYXN0ZVwiLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvciwgYXJncykge1xuICAgICAgICBlZGl0b3IuJGhhbmRsZVBhc3RlKGFyZ3MpO1xuICAgIH0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCJcbn0sIHtcbiAgICBuYW1lOiBcInJlbW92ZWxpbmVcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1EXCIsIFwiQ29tbWFuZC1EXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IucmVtb3ZlTGluZXMoKTsgfSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoTGluZVwiXG59LCB7XG4gICAgbmFtZTogXCJkdXBsaWNhdGVTZWxlY3Rpb25cIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1TaGlmdC1EXCIsIFwiQ29tbWFuZC1TaGlmdC1EXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZHVwbGljYXRlU2VsZWN0aW9uKCk7IH0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCIsXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiXG59LCB7XG4gICAgbmFtZTogXCJzb3J0bGluZXNcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1BbHQtU1wiLCBcIkNvbW1hbmQtQWx0LVNcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zb3J0TGluZXMoKTsgfSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJzZWxlY3Rpb25cIixcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoTGluZVwiXG59LCB7XG4gICAgbmFtZTogXCJ0b2dnbGVjb21tZW50XCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtL1wiLCBcIkNvbW1hbmQtL1wiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnRvZ2dsZUNvbW1lbnRMaW5lcygpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hMaW5lXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwic2VsZWN0aW9uUGFydFwiXG59LCB7XG4gICAgbmFtZTogXCJ0b2dnbGVCbG9ja0NvbW1lbnRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1TaGlmdC0vXCIsIFwiQ29tbWFuZC1TaGlmdC0vXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IudG9nZ2xlQmxvY2tDb21tZW50KCk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcInNlbGVjdGlvblBhcnRcIlxufSwge1xuICAgIG5hbWU6IFwibW9kaWZ5TnVtYmVyVXBcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1TaGlmdC1VcFwiLCBcIkFsdC1TaGlmdC1VcFwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLm1vZGlmeU51bWJlcigxKTsgfSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCJcbn0sIHtcbiAgICBuYW1lOiBcIm1vZGlmeU51bWJlckRvd25cIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1TaGlmdC1Eb3duXCIsIFwiQWx0LVNoaWZ0LURvd25cIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5tb2RpZnlOdW1iZXIoLTEpOyB9LFxuICAgIHNjcm9sbEludG9WaWV3OiBcImN1cnNvclwiLFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIlxufSwge1xuICAgIG5hbWU6IFwicmVwbGFjZVwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJDdHJsLUhcIiwgXCJDb21tYW5kLU9wdGlvbi1GXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgICAgICBjb25maWcubG9hZE1vZHVsZShcImFjZS9leHQvc2VhcmNoYm94XCIsIGZ1bmN0aW9uKGUpIHtlLlNlYXJjaChlZGl0b3IsIHRydWUpO30pO1xuICAgIH1cbn0sIHtcbiAgICBuYW1lOiBcInVuZG9cIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1aXCIsIFwiQ29tbWFuZC1aXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IudW5kbygpOyB9XG59LCB7XG4gICAgbmFtZTogXCJyZWRvXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtU2hpZnQtWnxDdHJsLVlcIiwgXCJDb21tYW5kLVNoaWZ0LVp8Q29tbWFuZC1ZXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IucmVkbygpOyB9XG59LCB7XG4gICAgbmFtZTogXCJjb3B5bGluZXN1cFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJBbHQtU2hpZnQtVXBcIiwgXCJDb21tYW5kLU9wdGlvbi1VcFwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmNvcHlMaW5lc1VwKCk7IH0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCJcbn0sIHtcbiAgICBuYW1lOiBcIm1vdmVsaW5lc3VwXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkFsdC1VcFwiLCBcIk9wdGlvbi1VcFwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLm1vdmVMaW5lc1VwKCk7IH0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCJcbn0sIHtcbiAgICBuYW1lOiBcImNvcHlsaW5lc2Rvd25cIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQWx0LVNoaWZ0LURvd25cIiwgXCJDb21tYW5kLU9wdGlvbi1Eb3duXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuY29weUxpbmVzRG93bigpOyB9LFxuICAgIHNjcm9sbEludG9WaWV3OiBcImN1cnNvclwiXG59LCB7XG4gICAgbmFtZTogXCJtb3ZlbGluZXNkb3duXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkFsdC1Eb3duXCIsIFwiT3B0aW9uLURvd25cIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5tb3ZlTGluZXNEb3duKCk7IH0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCJcbn0sIHtcbiAgICBuYW1lOiBcImRlbFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJEZWxldGVcIiwgXCJEZWxldGV8Q3RybC1EfFNoaWZ0LURlbGV0ZVwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnJlbW92ZShcInJpZ2h0XCIpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIlxufSwge1xuICAgIG5hbWU6IFwiYmFja3NwYWNlXCIsXG4gICAgYmluZEtleTogYmluZEtleShcbiAgICAgICAgXCJTaGlmdC1CYWNrc3BhY2V8QmFja3NwYWNlXCIsXG4gICAgICAgIFwiQ3RybC1CYWNrc3BhY2V8U2hpZnQtQmFja3NwYWNlfEJhY2tzcGFjZXxDdHJsLUhcIlxuICAgICksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5yZW1vdmUoXCJsZWZ0XCIpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIlxufSwge1xuICAgIG5hbWU6IFwiY3V0X29yX2RlbGV0ZVwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJTaGlmdC1EZWxldGVcIiwgbnVsbCksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IFxuICAgICAgICBpZiAoZWRpdG9yLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIGVkaXRvci5yZW1vdmUoXCJsZWZ0XCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCJcbn0sIHtcbiAgICBuYW1lOiBcInJlbW92ZXRvbGluZXN0YXJ0XCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkFsdC1CYWNrc3BhY2VcIiwgXCJDb21tYW5kLUJhY2tzcGFjZVwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnJlbW92ZVRvTGluZVN0YXJ0KCk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImN1cnNvclwiXG59LCB7XG4gICAgbmFtZTogXCJyZW1vdmV0b2xpbmVlbmRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQWx0LURlbGV0ZVwiLCBcIkN0cmwtS3xDb21tYW5kLURlbGV0ZVwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnJlbW92ZVRvTGluZUVuZCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIlxufSwge1xuICAgIG5hbWU6IFwicmVtb3ZldG9saW5lc3RhcnRoYXJkXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtU2hpZnQtQmFja3NwYWNlXCIsIG51bGwpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgICAgICB2YXIgcmFuZ2UgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJhbmdlKCk7XG4gICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiA9IDA7XG4gICAgICAgIGVkaXRvci5zZXNzaW9uLnJlbW92ZShyYW5nZSk7XG4gICAgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCJcbn0sIHtcbiAgICBuYW1lOiBcInJlbW92ZXRvbGluZWVuZGhhcmRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiQ3RybC1TaGlmdC1EZWxldGVcIiwgbnVsbCksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7XG4gICAgICAgIHZhciByYW5nZSA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTtcbiAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICAgIGVkaXRvci5zZXNzaW9uLnJlbW92ZShyYW5nZSk7XG4gICAgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCJcbn0sIHtcbiAgICBuYW1lOiBcInJlbW92ZXdvcmRsZWZ0XCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtQmFja3NwYWNlXCIsIFwiQWx0LUJhY2tzcGFjZXxDdHJsLUFsdC1CYWNrc3BhY2VcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5yZW1vdmVXb3JkTGVmdCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIlxufSwge1xuICAgIG5hbWU6IFwicmVtb3Zld29yZHJpZ2h0XCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtRGVsZXRlXCIsIFwiQWx0LURlbGV0ZVwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnJlbW92ZVdvcmRSaWdodCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIlxufSwge1xuICAgIG5hbWU6IFwib3V0ZGVudFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJTaGlmdC1UYWJcIiwgXCJTaGlmdC1UYWJcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5ibG9ja091dGRlbnQoKTsgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwic2VsZWN0aW9uUGFydFwiXG59LCB7XG4gICAgbmFtZTogXCJpbmRlbnRcIixcbiAgICBiaW5kS2V5OiBiaW5kS2V5KFwiVGFiXCIsIFwiVGFiXCIpLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuaW5kZW50KCk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcInNlbGVjdGlvblBhcnRcIlxufSwge1xuICAgIG5hbWU6IFwiYmxvY2tvdXRkZW50XCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtW1wiLCBcIkN0cmwtW1wiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmJsb2NrT3V0ZGVudCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hMaW5lXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwic2VsZWN0aW9uUGFydFwiXG59LCB7XG4gICAgbmFtZTogXCJibG9ja2luZGVudFwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJDdHJsLV1cIiwgXCJDdHJsLV1cIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5ibG9ja0luZGVudCgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hMaW5lXCIsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwic2VsZWN0aW9uUGFydFwiXG59LCB7XG4gICAgbmFtZTogXCJpbnNlcnRzdHJpbmdcIixcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IsIHN0cikgeyBlZGl0b3IuaW5zZXJ0KHN0cik7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImN1cnNvclwiXG59LCB7XG4gICAgbmFtZTogXCJpbnNlcnR0ZXh0XCIsXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yLCBhcmdzKSB7XG4gICAgICAgIGVkaXRvci5pbnNlcnQobGFuZy5zdHJpbmdSZXBlYXQoYXJncy50ZXh0ICB8fCBcIlwiLCBhcmdzLnRpbWVzIHx8IDEpKTtcbiAgICB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIlxufSwge1xuICAgIG5hbWU6IFwic3BsaXRsaW5lXCIsXG4gICAgYmluZEtleTogYmluZEtleShudWxsLCBcIkN0cmwtT1wiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNwbGl0TGluZSgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIlxufSwge1xuICAgIG5hbWU6IFwidHJhbnNwb3NlbGV0dGVyc1wiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJBbHQtU2hpZnQtWFwiLCBcIkN0cmwtVFwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnRyYW5zcG9zZUxldHRlcnMoKTsgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogZnVuY3Rpb24oZWRpdG9yKSB7ZWRpdG9yLnRyYW5zcG9zZVNlbGVjdGlvbnMoMSk7IH0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCJcbn0sIHtcbiAgICBuYW1lOiBcInRvdXBwZXJjYXNlXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtVVwiLCBcIkN0cmwtVVwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnRvVXBwZXJDYXNlKCk7IH0sXG4gICAgbXVsdGlTZWxlY3RBY3Rpb246IFwiZm9yRWFjaFwiLFxuICAgIHNjcm9sbEludG9WaWV3OiBcImN1cnNvclwiXG59LCB7XG4gICAgbmFtZTogXCJ0b2xvd2VyY2FzZVwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkoXCJDdHJsLVNoaWZ0LVVcIiwgXCJDdHJsLVNoaWZ0LVVcIiksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci50b0xvd2VyQ2FzZSgpOyB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIlxufSwge1xuICAgIG5hbWU6IFwiZXhwYW5kdG9saW5lXCIsXG4gICAgYmluZEtleTogYmluZEtleShcIkN0cmwtU2hpZnQtTFwiLCBcIkNvbW1hbmQtU2hpZnQtTFwiKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHtcbiAgICAgICAgdmFyIHJhbmdlID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSYW5nZSgpO1xuXG4gICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiA9IHJhbmdlLmVuZC5jb2x1bW4gPSAwO1xuICAgICAgICByYW5nZS5lbmQucm93Kys7XG4gICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0UmFuZ2UocmFuZ2UsIGZhbHNlKTtcbiAgICB9LFxuICAgIG11bHRpU2VsZWN0QWN0aW9uOiBcImZvckVhY2hcIixcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwiam9pbmxpbmVzXCIsXG4gICAgYmluZEtleTogYmluZEtleShudWxsLCBudWxsKSxcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHtcbiAgICAgICAgdmFyIGlzQmFja3dhcmRzID0gZWRpdG9yLnNlbGVjdGlvbi5pc0JhY2t3YXJkcygpO1xuICAgICAgICB2YXIgc2VsZWN0aW9uU3RhcnQgPSBpc0JhY2t3YXJkcyA/IGVkaXRvci5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uTGVhZCgpIDogZWRpdG9yLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25BbmNob3IoKTtcbiAgICAgICAgdmFyIHNlbGVjdGlvbkVuZCA9IGlzQmFja3dhcmRzID8gZWRpdG9yLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25BbmNob3IoKSA6IGVkaXRvci5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uTGVhZCgpO1xuICAgICAgICB2YXIgZmlyc3RMaW5lRW5kQ29sID0gZWRpdG9yLnNlc3Npb24uZG9jLmdldExpbmUoc2VsZWN0aW9uU3RhcnQucm93KS5sZW5ndGg7XG4gICAgICAgIHZhciBzZWxlY3RlZFRleHQgPSBlZGl0b3Iuc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKGVkaXRvci5zZWxlY3Rpb24uZ2V0UmFuZ2UoKSk7XG4gICAgICAgIHZhciBzZWxlY3RlZENvdW50ID0gc2VsZWN0ZWRUZXh0LnJlcGxhY2UoL1xcblxccyovLCBcIiBcIikubGVuZ3RoO1xuICAgICAgICB2YXIgaW5zZXJ0TGluZSA9IGVkaXRvci5zZXNzaW9uLmRvYy5nZXRMaW5lKHNlbGVjdGlvblN0YXJ0LnJvdyk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IHNlbGVjdGlvblN0YXJ0LnJvdyArIDE7IGkgPD0gc2VsZWN0aW9uRW5kLnJvdyArIDE7IGkrKykge1xuICAgICAgICAgICAgdmFyIGN1ckxpbmUgPSBsYW5nLnN0cmluZ1RyaW1MZWZ0KGxhbmcuc3RyaW5nVHJpbVJpZ2h0KGVkaXRvci5zZXNzaW9uLmRvYy5nZXRMaW5lKGkpKSk7XG4gICAgICAgICAgICBpZiAoY3VyTGluZS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgICBjdXJMaW5lID0gXCIgXCIgKyBjdXJMaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5zZXJ0TGluZSArPSBjdXJMaW5lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlbGVjdGlvbkVuZC5yb3cgKyAxIDwgKGVkaXRvci5zZXNzaW9uLmRvYy5nZXRMZW5ndGgoKSAtIDEpKSB7XG4gICAgICAgICAgICBpbnNlcnRMaW5lICs9IGVkaXRvci5zZXNzaW9uLmRvYy5nZXROZXdMaW5lQ2hhcmFjdGVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBlZGl0b3IuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgZWRpdG9yLnNlc3Npb24uZG9jLnJlcGxhY2UobmV3IFJhbmdlKHNlbGVjdGlvblN0YXJ0LnJvdywgMCwgc2VsZWN0aW9uRW5kLnJvdyArIDIsIDApLCBpbnNlcnRMaW5lKTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRDb3VudCA+IDApIHtcbiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24ubW92ZUN1cnNvclRvKHNlbGVjdGlvblN0YXJ0LnJvdywgc2VsZWN0aW9uU3RhcnQuY29sdW1uKTtcbiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2VsZWN0VG8oc2VsZWN0aW9uU3RhcnQucm93LCBzZWxlY3Rpb25TdGFydC5jb2x1bW4gKyBzZWxlY3RlZENvdW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpcnN0TGluZUVuZENvbCA9IGVkaXRvci5zZXNzaW9uLmRvYy5nZXRMaW5lKHNlbGVjdGlvblN0YXJ0LnJvdykubGVuZ3RoID4gZmlyc3RMaW5lRW5kQ29sID8gKGZpcnN0TGluZUVuZENvbCArIDEpIDogZmlyc3RMaW5lRW5kQ29sO1xuICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG8oc2VsZWN0aW9uU3RhcnQucm93LCBmaXJzdExpbmVFbmRDb2wpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtdWx0aVNlbGVjdEFjdGlvbjogXCJmb3JFYWNoXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcImludmVydFNlbGVjdGlvblwiLFxuICAgIGJpbmRLZXk6IGJpbmRLZXkobnVsbCwgbnVsbCksXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7XG4gICAgICAgIHZhciBlbmRSb3cgPSBlZGl0b3Iuc2Vzc2lvbi5kb2MuZ2V0TGVuZ3RoKCkgLSAxO1xuICAgICAgICB2YXIgZW5kQ29sID0gZWRpdG9yLnNlc3Npb24uZG9jLmdldExpbmUoZW5kUm93KS5sZW5ndGg7XG4gICAgICAgIHZhciByYW5nZXMgPSBlZGl0b3Iuc2VsZWN0aW9uLnJhbmdlTGlzdC5yYW5nZXM7XG4gICAgICAgIHZhciBuZXdSYW5nZXMgPSBbXTtcbiAgICAgICAgaWYgKHJhbmdlcy5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICByYW5nZXMgPSBbZWRpdG9yLnNlbGVjdGlvbi5nZXRSYW5nZSgpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSA9PSAocmFuZ2VzLmxlbmd0aCAtIDEpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEocmFuZ2VzW2ldLmVuZC5yb3cgPT09IGVuZFJvdyAmJiByYW5nZXNbaV0uZW5kLmNvbHVtbiA9PT0gZW5kQ29sKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdSYW5nZXMucHVzaChuZXcgUmFuZ2UocmFuZ2VzW2ldLmVuZC5yb3csIHJhbmdlc1tpXS5lbmQuY29sdW1uLCBlbmRSb3csIGVuZENvbCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoIShyYW5nZXNbaV0uc3RhcnQucm93ID09PSAwICYmIHJhbmdlc1tpXS5zdGFydC5jb2x1bW4gPT09IDApKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1Jhbmdlcy5wdXNoKG5ldyBSYW5nZSgwLCAwLCByYW5nZXNbaV0uc3RhcnQucm93LCByYW5nZXNbaV0uc3RhcnQuY29sdW1uKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdSYW5nZXMucHVzaChuZXcgUmFuZ2UocmFuZ2VzW2ktMV0uZW5kLnJvdywgcmFuZ2VzW2ktMV0uZW5kLmNvbHVtbiwgcmFuZ2VzW2ldLnN0YXJ0LnJvdywgcmFuZ2VzW2ldLnN0YXJ0LmNvbHVtbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZWRpdG9yLmV4aXRNdWx0aVNlbGVjdE1vZGUoKTtcbiAgICAgICAgZWRpdG9yLmNsZWFyU2VsZWN0aW9uKCk7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IG5ld1Jhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5nZXNbaV0sIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcmVhZE9ubHk6IHRydWUsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwibm9uZVwiXG59XTtcblxufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvZWRpdG9yXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL2ZpeG9sZGJyb3dzZXJzXCIsXCJhY2UvbGliL29vcFwiLFwiYWNlL2xpYi9kb21cIixcImFjZS9saWIvbGFuZ1wiLFwiYWNlL2xpYi91c2VyYWdlbnRcIixcImFjZS9rZXlib2FyZC90ZXh0aW5wdXRcIixcImFjZS9tb3VzZS9tb3VzZV9oYW5kbGVyXCIsXCJhY2UvbW91c2UvZm9sZF9oYW5kbGVyXCIsXCJhY2Uva2V5Ym9hcmQva2V5YmluZGluZ1wiLFwiYWNlL2VkaXRfc2Vzc2lvblwiLFwiYWNlL3NlYXJjaFwiLFwiYWNlL3JhbmdlXCIsXCJhY2UvbGliL2V2ZW50X2VtaXR0ZXJcIixcImFjZS9jb21tYW5kcy9jb21tYW5kX21hbmFnZXJcIixcImFjZS9jb21tYW5kcy9kZWZhdWx0X2NvbW1hbmRzXCIsXCJhY2UvY29uZmlnXCIsXCJhY2UvdG9rZW5faXRlcmF0b3JcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG5hY2VxdWlyZShcIi4vbGliL2ZpeG9sZGJyb3dzZXJzXCIpO1xuXG52YXIgb29wID0gYWNlcXVpcmUoXCIuL2xpYi9vb3BcIik7XG52YXIgZG9tID0gYWNlcXVpcmUoXCIuL2xpYi9kb21cIik7XG52YXIgbGFuZyA9IGFjZXF1aXJlKFwiLi9saWIvbGFuZ1wiKTtcbnZhciB1c2VyYWdlbnQgPSBhY2VxdWlyZShcIi4vbGliL3VzZXJhZ2VudFwiKTtcbnZhciBUZXh0SW5wdXQgPSBhY2VxdWlyZShcIi4va2V5Ym9hcmQvdGV4dGlucHV0XCIpLlRleHRJbnB1dDtcbnZhciBNb3VzZUhhbmRsZXIgPSBhY2VxdWlyZShcIi4vbW91c2UvbW91c2VfaGFuZGxlclwiKS5Nb3VzZUhhbmRsZXI7XG52YXIgRm9sZEhhbmRsZXIgPSBhY2VxdWlyZShcIi4vbW91c2UvZm9sZF9oYW5kbGVyXCIpLkZvbGRIYW5kbGVyO1xudmFyIEtleUJpbmRpbmcgPSBhY2VxdWlyZShcIi4va2V5Ym9hcmQva2V5YmluZGluZ1wiKS5LZXlCaW5kaW5nO1xudmFyIEVkaXRTZXNzaW9uID0gYWNlcXVpcmUoXCIuL2VkaXRfc2Vzc2lvblwiKS5FZGl0U2Vzc2lvbjtcbnZhciBTZWFyY2ggPSBhY2VxdWlyZShcIi4vc2VhcmNoXCIpLlNlYXJjaDtcbnZhciBSYW5nZSA9IGFjZXF1aXJlKFwiLi9yYW5nZVwiKS5SYW5nZTtcbnZhciBFdmVudEVtaXR0ZXIgPSBhY2VxdWlyZShcIi4vbGliL2V2ZW50X2VtaXR0ZXJcIikuRXZlbnRFbWl0dGVyO1xudmFyIENvbW1hbmRNYW5hZ2VyID0gYWNlcXVpcmUoXCIuL2NvbW1hbmRzL2NvbW1hbmRfbWFuYWdlclwiKS5Db21tYW5kTWFuYWdlcjtcbnZhciBkZWZhdWx0Q29tbWFuZHMgPSBhY2VxdWlyZShcIi4vY29tbWFuZHMvZGVmYXVsdF9jb21tYW5kc1wiKS5jb21tYW5kcztcbnZhciBjb25maWcgPSBhY2VxdWlyZShcIi4vY29uZmlnXCIpO1xudmFyIFRva2VuSXRlcmF0b3IgPSBhY2VxdWlyZShcIi4vdG9rZW5faXRlcmF0b3JcIikuVG9rZW5JdGVyYXRvcjtcbnZhciBFZGl0b3IgPSBmdW5jdGlvbihyZW5kZXJlciwgc2Vzc2lvbikge1xuICAgIHZhciBjb250YWluZXIgPSByZW5kZXJlci5nZXRDb250YWluZXJFbGVtZW50KCk7XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgIHRoaXMuaWQgPSBcImVkaXRvclwiICsgKCsrRWRpdG9yLiR1aWQpO1xuXG4gICAgdGhpcy5jb21tYW5kcyA9IG5ldyBDb21tYW5kTWFuYWdlcih1c2VyYWdlbnQuaXNNYWMgPyBcIm1hY1wiIDogXCJ3aW5cIiwgZGVmYXVsdENvbW1hbmRzKTtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdGhpcy50ZXh0SW5wdXQgID0gbmV3IFRleHRJbnB1dChyZW5kZXJlci5nZXRUZXh0QXJlYUNvbnRhaW5lcigpLCB0aGlzKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci50ZXh0YXJlYSA9IHRoaXMudGV4dElucHV0LmdldEVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy4kbW91c2VIYW5kbGVyID0gbmV3IE1vdXNlSGFuZGxlcih0aGlzKTtcbiAgICAgICAgbmV3IEZvbGRIYW5kbGVyKHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMua2V5QmluZGluZyA9IG5ldyBLZXlCaW5kaW5nKHRoaXMpO1xuXG4gICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcgPSAwO1xuICAgIHRoaXMuJHNlYXJjaCA9IG5ldyBTZWFyY2goKS5zZXQoe1xuICAgICAgICB3cmFwOiB0cnVlXG4gICAgfSk7XG5cbiAgICB0aGlzLiRoaXN0b3J5VHJhY2tlciA9IHRoaXMuJGhpc3RvcnlUcmFja2VyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jb21tYW5kcy5vbihcImV4ZWNcIiwgdGhpcy4kaGlzdG9yeVRyYWNrZXIpO1xuXG4gICAgdGhpcy4kaW5pdE9wZXJhdGlvbkxpc3RlbmVycygpO1xuICAgIFxuICAgIHRoaXMuXyRlbWl0SW5wdXRFdmVudCA9IGxhbmcuZGVsYXllZENhbGwoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX3NpZ25hbChcImlucHV0XCIsIHt9KTtcbiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbiAmJiB0aGlzLnNlc3Npb24uYmdUb2tlbml6ZXIpXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uYmdUb2tlbml6ZXIuc2NoZWR1bGVTdGFydCgpO1xuICAgIH0uYmluZCh0aGlzKSk7XG4gICAgXG4gICAgdGhpcy5vbihcImNoYW5nZVwiLCBmdW5jdGlvbihfLCBfc2VsZikge1xuICAgICAgICBfc2VsZi5fJGVtaXRJbnB1dEV2ZW50LnNjaGVkdWxlKDMxKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2V0U2Vzc2lvbihzZXNzaW9uIHx8IG5ldyBFZGl0U2Vzc2lvbihcIlwiKSk7XG4gICAgY29uZmlnLnJlc2V0T3B0aW9ucyh0aGlzKTtcbiAgICBjb25maWcuX3NpZ25hbChcImVkaXRvclwiLCB0aGlzKTtcbn07XG5cbkVkaXRvci4kdWlkID0gMDtcblxuKGZ1bmN0aW9uKCl7XG5cbiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7XG5cbiAgICB0aGlzLiRpbml0T3BlcmF0aW9uTGlzdGVuZXJzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGZ1bmN0aW9uIGxhc3QoYSkge3JldHVybiBhW2EubGVuZ3RoIC0gMV07fVxuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmNvbW1hbmRzLm9uKFwiZXhlY1wiLCB0aGlzLnN0YXJ0T3BlcmF0aW9uLmJpbmQodGhpcyksIHRydWUpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzLm9uKFwiYWZ0ZXJFeGVjXCIsIHRoaXMuZW5kT3BlcmF0aW9uLmJpbmQodGhpcyksIHRydWUpO1xuXG4gICAgICAgIHRoaXMuJG9wUmVzZXRUaW1lciA9IGxhbmcuZGVsYXllZENhbGwodGhpcy5lbmRPcGVyYXRpb24uYmluZCh0aGlzKSk7XG5cbiAgICAgICAgdGhpcy5vbihcImNoYW5nZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMuY3VyT3AgfHwgdGhpcy5zdGFydE9wZXJhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5jdXJPcC5kb2NDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCB0cnVlKTtcblxuICAgICAgICB0aGlzLm9uKFwiY2hhbmdlU2VsZWN0aW9uXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5jdXJPcCB8fCB0aGlzLnN0YXJ0T3BlcmF0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9LmJpbmQodGhpcyksIHRydWUpO1xuICAgIH07XG5cbiAgICB0aGlzLmN1ck9wID0gbnVsbDtcbiAgICB0aGlzLnByZXZPcCA9IHt9O1xuICAgIHRoaXMuc3RhcnRPcGVyYXRpb24gPSBmdW5jdGlvbihjb21tYWRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5jdXJPcCkge1xuICAgICAgICAgICAgaWYgKCFjb21tYWRFdmVudCB8fCB0aGlzLmN1ck9wLmNvbW1hbmQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5wcmV2T3AgPSB0aGlzLmN1ck9wO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29tbWFkRXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNDb21tYW5kID0gbnVsbDtcbiAgICAgICAgICAgIGNvbW1hZEV2ZW50ID0ge307XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiRvcFJlc2V0VGltZXIuc2NoZWR1bGUoKTtcbiAgICAgICAgdGhpcy5jdXJPcCA9IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6IGNvbW1hZEV2ZW50LmNvbW1hbmQgfHwge30sXG4gICAgICAgICAgICBhcmdzOiBjb21tYWRFdmVudC5hcmdzLFxuICAgICAgICAgICAgc2Nyb2xsVG9wOiB0aGlzLnJlbmRlcmVyLnNjcm9sbFRvcFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5jdXJPcC5jb21tYW5kLm5hbWUgJiYgdGhpcy5jdXJPcC5jb21tYW5kLnNjcm9sbEludG9WaWV3ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZysrO1xuICAgIH07XG5cbiAgICB0aGlzLmVuZE9wZXJhdGlvbiA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VyT3ApIHtcbiAgICAgICAgICAgIGlmIChlICYmIGUucmV0dXJuVmFsdWUgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmN1ck9wID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3NpZ25hbChcImJlZm9yZUVuZE9wZXJhdGlvblwiKTtcbiAgICAgICAgICAgIHZhciBjb21tYW5kID0gdGhpcy5jdXJPcC5jb21tYW5kO1xuICAgICAgICAgICAgaWYgKGNvbW1hbmQubmFtZSAmJiB0aGlzLiRibG9ja1Njcm9sbGluZyA+IDApXG4gICAgICAgICAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmctLTtcbiAgICAgICAgICAgIHZhciBzY3JvbGxJbnRvVmlldyA9IGNvbW1hbmQgJiYgY29tbWFuZC5zY3JvbGxJbnRvVmlldztcbiAgICAgICAgICAgIGlmIChzY3JvbGxJbnRvVmlldykge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoc2Nyb2xsSW50b1ZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImNlbnRlci1hbmltYXRlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxJbnRvVmlldyA9IFwiYW5pbWF0ZVwiO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiY2VudGVyXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KG51bGwsIDAuNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImFuaW1hdGVcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImN1cnNvclwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzZWxlY3Rpb25QYXJ0XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi5nZXRSYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZpZyA9IHRoaXMucmVuZGVyZXIubGF5ZXJDb25maWc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ID49IGNvbmZpZy5sYXN0Um93IHx8IHJhbmdlLmVuZC5yb3cgPD0gY29uZmlnLmZpcnN0Um93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxTZWxlY3Rpb25JbnRvVmlldyh0aGlzLnNlbGVjdGlvbi5hbmNob3IsIHRoaXMuc2VsZWN0aW9uLmxlYWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNjcm9sbEludG9WaWV3ID09IFwiYW5pbWF0ZVwiKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFuaW1hdGVTY3JvbGxpbmcodGhpcy5jdXJPcC5zY3JvbGxUb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLnByZXZPcCA9IHRoaXMuY3VyT3A7XG4gICAgICAgICAgICB0aGlzLmN1ck9wID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy4kbWVyZ2VhYmxlQ29tbWFuZHMgPSBbXCJiYWNrc3BhY2VcIiwgXCJkZWxcIiwgXCJpbnNlcnRzdHJpbmdcIl07XG4gICAgdGhpcy4kaGlzdG9yeVRyYWNrZXIgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmICghdGhpcy4kbWVyZ2VVbmRvRGVsdGFzKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHZhciBwcmV2ID0gdGhpcy5wcmV2T3A7XG4gICAgICAgIHZhciBtZXJnZWFibGVDb21tYW5kcyA9IHRoaXMuJG1lcmdlYWJsZUNvbW1hbmRzO1xuICAgICAgICB2YXIgc2hvdWxkTWVyZ2UgPSBwcmV2LmNvbW1hbmQgJiYgKGUuY29tbWFuZC5uYW1lID09IHByZXYuY29tbWFuZC5uYW1lKTtcbiAgICAgICAgaWYgKGUuY29tbWFuZC5uYW1lID09IFwiaW5zZXJ0c3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHZhciB0ZXh0ID0gZS5hcmdzO1xuICAgICAgICAgICAgaWYgKHRoaXMubWVyZ2VOZXh0Q29tbWFuZCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VOZXh0Q29tbWFuZCA9IHRydWU7XG5cbiAgICAgICAgICAgIHNob3VsZE1lcmdlID0gc2hvdWxkTWVyZ2VcbiAgICAgICAgICAgICAgICAmJiB0aGlzLm1lcmdlTmV4dENvbW1hbmQgLy8gcHJldmlvdXMgY29tbWFuZCBhbGxvd3MgdG8gY29hbGVzY2Ugd2l0aFxuICAgICAgICAgICAgICAgICYmICghL1xccy8udGVzdCh0ZXh0KSB8fCAvXFxzLy50ZXN0KHByZXYuYXJncykpOyAvLyBwcmV2aW91cyBpbnNlcnRpb24gd2FzIG9mIHNhbWUgdHlwZVxuXG4gICAgICAgICAgICB0aGlzLm1lcmdlTmV4dENvbW1hbmQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2hvdWxkTWVyZ2UgPSBzaG91bGRNZXJnZVxuICAgICAgICAgICAgICAgICYmIG1lcmdlYWJsZUNvbW1hbmRzLmluZGV4T2YoZS5jb21tYW5kLm5hbWUpICE9PSAtMTsgLy8gdGhlIGNvbW1hbmQgaXMgbWVyZ2VhYmxlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLiRtZXJnZVVuZG9EZWx0YXMgIT0gXCJhbHdheXNcIlxuICAgICAgICAgICAgJiYgRGF0ZS5ub3coKSAtIHRoaXMuc2VxdWVuY2VTdGFydFRpbWUgPiAyMDAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgc2hvdWxkTWVyZ2UgPSBmYWxzZTsgLy8gdGhlIHNlcXVlbmNlIGlzIHRvbyBsb25nXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2hvdWxkTWVyZ2UpXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ubWVyZ2VVbmRvRGVsdGFzID0gdHJ1ZTtcbiAgICAgICAgZWxzZSBpZiAobWVyZ2VhYmxlQ29tbWFuZHMuaW5kZXhPZihlLmNvbW1hbmQubmFtZSkgIT09IC0xKVxuICAgICAgICAgICAgdGhpcy5zZXF1ZW5jZVN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgfTtcbiAgICB0aGlzLnNldEtleWJvYXJkSGFuZGxlciA9IGZ1bmN0aW9uKGtleWJvYXJkSGFuZGxlciwgY2IpIHtcbiAgICAgICAgaWYgKGtleWJvYXJkSGFuZGxlciAmJiB0eXBlb2Yga2V5Ym9hcmRIYW5kbGVyID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLiRrZXliaW5kaW5nSWQgPSBrZXlib2FyZEhhbmRsZXI7XG4gICAgICAgICAgICB2YXIgX3NlbGYgPSB0aGlzO1xuICAgICAgICAgICAgY29uZmlnLmxvYWRNb2R1bGUoW1wia2V5YmluZGluZ1wiLCBrZXlib2FyZEhhbmRsZXJdLCBmdW5jdGlvbihtb2R1bGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoX3NlbGYuJGtleWJpbmRpbmdJZCA9PSBrZXlib2FyZEhhbmRsZXIpXG4gICAgICAgICAgICAgICAgICAgIF9zZWxmLmtleUJpbmRpbmcuc2V0S2V5Ym9hcmRIYW5kbGVyKG1vZHVsZSAmJiBtb2R1bGUuaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgY2IgJiYgY2IoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4ka2V5YmluZGluZ0lkID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMua2V5QmluZGluZy5zZXRLZXlib2FyZEhhbmRsZXIoa2V5Ym9hcmRIYW5kbGVyKTtcbiAgICAgICAgICAgIGNiICYmIGNiKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ2V0S2V5Ym9hcmRIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmtleUJpbmRpbmcuZ2V0S2V5Ym9hcmRIYW5kbGVyKCk7XG4gICAgfTtcbiAgICB0aGlzLnNldFNlc3Npb24gPSBmdW5jdGlvbihzZXNzaW9uKSB7XG4gICAgICAgIGlmICh0aGlzLnNlc3Npb24gPT0gc2Vzc2lvbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuY3VyT3ApIHRoaXMuZW5kT3BlcmF0aW9uKCk7XG4gICAgICAgIHRoaXMuY3VyT3AgPSB7fTtcblxuICAgICAgICB2YXIgb2xkU2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcbiAgICAgICAgaWYgKG9sZFNlc3Npb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5vZmYoXCJjaGFuZ2VcIiwgdGhpcy4kb25Eb2N1bWVudENoYW5nZSk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ub2ZmKFwiY2hhbmdlTW9kZVwiLCB0aGlzLiRvbkNoYW5nZU1vZGUpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm9mZihcInRva2VuaXplclVwZGF0ZVwiLCB0aGlzLiRvblRva2VuaXplclVwZGF0ZSk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ub2ZmKFwiY2hhbmdlVGFiU2l6ZVwiLCB0aGlzLiRvbkNoYW5nZVRhYlNpemUpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm9mZihcImNoYW5nZVdyYXBMaW1pdFwiLCB0aGlzLiRvbkNoYW5nZVdyYXBMaW1pdCk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ub2ZmKFwiY2hhbmdlV3JhcE1vZGVcIiwgdGhpcy4kb25DaGFuZ2VXcmFwTW9kZSk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ub2ZmKFwiY2hhbmdlRm9sZFwiLCB0aGlzLiRvbkNoYW5nZUZvbGQpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm9mZihcImNoYW5nZUZyb250TWFya2VyXCIsIHRoaXMuJG9uQ2hhbmdlRnJvbnRNYXJrZXIpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm9mZihcImNoYW5nZUJhY2tNYXJrZXJcIiwgdGhpcy4kb25DaGFuZ2VCYWNrTWFya2VyKTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5vZmYoXCJjaGFuZ2VCcmVha3BvaW50XCIsIHRoaXMuJG9uQ2hhbmdlQnJlYWtwb2ludCk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ub2ZmKFwiY2hhbmdlQW5ub3RhdGlvblwiLCB0aGlzLiRvbkNoYW5nZUFubm90YXRpb24pO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm9mZihcImNoYW5nZU92ZXJ3cml0ZVwiLCB0aGlzLiRvbkN1cnNvckNoYW5nZSk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ub2ZmKFwiY2hhbmdlU2Nyb2xsVG9wXCIsIHRoaXMuJG9uU2Nyb2xsVG9wQ2hhbmdlKTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5vZmYoXCJjaGFuZ2VTY3JvbGxMZWZ0XCIsIHRoaXMuJG9uU2Nyb2xsTGVmdENoYW5nZSk7XG5cbiAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLnNlc3Npb24uZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICBzZWxlY3Rpb24ub2ZmKFwiY2hhbmdlQ3Vyc29yXCIsIHRoaXMuJG9uQ3Vyc29yQ2hhbmdlKTtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5vZmYoXCJjaGFuZ2VTZWxlY3Rpb25cIiwgdGhpcy4kb25TZWxlY3Rpb25DaGFuZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjtcbiAgICAgICAgaWYgKHNlc3Npb24pIHtcbiAgICAgICAgICAgIHRoaXMuJG9uRG9jdW1lbnRDaGFuZ2UgPSB0aGlzLm9uRG9jdW1lbnRDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHNlc3Npb24ub24oXCJjaGFuZ2VcIiwgdGhpcy4kb25Eb2N1bWVudENoYW5nZSk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFNlc3Npb24oc2Vzc2lvbik7XG4gICAgXG4gICAgICAgICAgICB0aGlzLiRvbkNoYW5nZU1vZGUgPSB0aGlzLm9uQ2hhbmdlTW9kZS5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgc2Vzc2lvbi5vbihcImNoYW5nZU1vZGVcIiwgdGhpcy4kb25DaGFuZ2VNb2RlKTtcbiAgICBcbiAgICAgICAgICAgIHRoaXMuJG9uVG9rZW5pemVyVXBkYXRlID0gdGhpcy5vblRva2VuaXplclVwZGF0ZS5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgc2Vzc2lvbi5vbihcInRva2VuaXplclVwZGF0ZVwiLCB0aGlzLiRvblRva2VuaXplclVwZGF0ZSk7XG4gICAgXG4gICAgICAgICAgICB0aGlzLiRvbkNoYW5nZVRhYlNpemUgPSB0aGlzLnJlbmRlcmVyLm9uQ2hhbmdlVGFiU2l6ZS5iaW5kKHRoaXMucmVuZGVyZXIpO1xuICAgICAgICAgICAgc2Vzc2lvbi5vbihcImNoYW5nZVRhYlNpemVcIiwgdGhpcy4kb25DaGFuZ2VUYWJTaXplKTtcbiAgICBcbiAgICAgICAgICAgIHRoaXMuJG9uQ2hhbmdlV3JhcExpbWl0ID0gdGhpcy5vbkNoYW5nZVdyYXBMaW1pdC5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgc2Vzc2lvbi5vbihcImNoYW5nZVdyYXBMaW1pdFwiLCB0aGlzLiRvbkNoYW5nZVdyYXBMaW1pdCk7XG4gICAgXG4gICAgICAgICAgICB0aGlzLiRvbkNoYW5nZVdyYXBNb2RlID0gdGhpcy5vbkNoYW5nZVdyYXBNb2RlLmJpbmQodGhpcyk7XG4gICAgICAgICAgICBzZXNzaW9uLm9uKFwiY2hhbmdlV3JhcE1vZGVcIiwgdGhpcy4kb25DaGFuZ2VXcmFwTW9kZSk7XG4gICAgXG4gICAgICAgICAgICB0aGlzLiRvbkNoYW5nZUZvbGQgPSB0aGlzLm9uQ2hhbmdlRm9sZC5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgc2Vzc2lvbi5vbihcImNoYW5nZUZvbGRcIiwgdGhpcy4kb25DaGFuZ2VGb2xkKTtcbiAgICBcbiAgICAgICAgICAgIHRoaXMuJG9uQ2hhbmdlRnJvbnRNYXJrZXIgPSB0aGlzLm9uQ2hhbmdlRnJvbnRNYXJrZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5vbihcImNoYW5nZUZyb250TWFya2VyXCIsIHRoaXMuJG9uQ2hhbmdlRnJvbnRNYXJrZXIpO1xuICAgIFxuICAgICAgICAgICAgdGhpcy4kb25DaGFuZ2VCYWNrTWFya2VyID0gdGhpcy5vbkNoYW5nZUJhY2tNYXJrZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5vbihcImNoYW5nZUJhY2tNYXJrZXJcIiwgdGhpcy4kb25DaGFuZ2VCYWNrTWFya2VyKTtcbiAgICBcbiAgICAgICAgICAgIHRoaXMuJG9uQ2hhbmdlQnJlYWtwb2ludCA9IHRoaXMub25DaGFuZ2VCcmVha3BvaW50LmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ub24oXCJjaGFuZ2VCcmVha3BvaW50XCIsIHRoaXMuJG9uQ2hhbmdlQnJlYWtwb2ludCk7XG4gICAgXG4gICAgICAgICAgICB0aGlzLiRvbkNoYW5nZUFubm90YXRpb24gPSB0aGlzLm9uQ2hhbmdlQW5ub3RhdGlvbi5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm9uKFwiY2hhbmdlQW5ub3RhdGlvblwiLCB0aGlzLiRvbkNoYW5nZUFubm90YXRpb24pO1xuICAgIFxuICAgICAgICAgICAgdGhpcy4kb25DdXJzb3JDaGFuZ2UgPSB0aGlzLm9uQ3Vyc29yQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ub24oXCJjaGFuZ2VPdmVyd3JpdGVcIiwgdGhpcy4kb25DdXJzb3JDaGFuZ2UpO1xuICAgIFxuICAgICAgICAgICAgdGhpcy4kb25TY3JvbGxUb3BDaGFuZ2UgPSB0aGlzLm9uU2Nyb2xsVG9wQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ub24oXCJjaGFuZ2VTY3JvbGxUb3BcIiwgdGhpcy4kb25TY3JvbGxUb3BDaGFuZ2UpO1xuICAgIFxuICAgICAgICAgICAgdGhpcy4kb25TY3JvbGxMZWZ0Q2hhbmdlID0gdGhpcy5vblNjcm9sbExlZnRDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5vbihcImNoYW5nZVNjcm9sbExlZnRcIiwgdGhpcy4kb25TY3JvbGxMZWZ0Q2hhbmdlKTtcbiAgICBcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gc2Vzc2lvbi5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLm9uKFwiY2hhbmdlQ3Vyc29yXCIsIHRoaXMuJG9uQ3Vyc29yQ2hhbmdlKTtcbiAgICBcbiAgICAgICAgICAgIHRoaXMuJG9uU2VsZWN0aW9uQ2hhbmdlID0gdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ub24oXCJjaGFuZ2VTZWxlY3Rpb25cIiwgdGhpcy4kb25TZWxlY3Rpb25DaGFuZ2UpO1xuICAgIFxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZU1vZGUoKTtcbiAgICBcbiAgICAgICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nICs9IDE7XG4gICAgICAgICAgICB0aGlzLm9uQ3Vyc29yQ2hhbmdlKCk7XG4gICAgICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZyAtPSAxO1xuICAgIFxuICAgICAgICAgICAgdGhpcy5vblNjcm9sbFRvcENoYW5nZSgpO1xuICAgICAgICAgICAgdGhpcy5vblNjcm9sbExlZnRDaGFuZ2UoKTtcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VGcm9udE1hcmtlcigpO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUJhY2tNYXJrZXIoKTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VCcmVha3BvaW50KCk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlQW5ub3RhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmdldFVzZVdyYXBNb2RlKCkgJiYgdGhpcy5yZW5kZXJlci5hZGp1c3RXcmFwTGltaXQoKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlRnVsbCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTZXNzaW9uKHNlc3Npb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2lnbmFsKFwiY2hhbmdlU2Vzc2lvblwiLCB7XG4gICAgICAgICAgICBzZXNzaW9uOiBzZXNzaW9uLFxuICAgICAgICAgICAgb2xkU2Vzc2lvbjogb2xkU2Vzc2lvblxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY3VyT3AgPSBudWxsO1xuICAgICAgICBcbiAgICAgICAgb2xkU2Vzc2lvbiAmJiBvbGRTZXNzaW9uLl9zaWduYWwoXCJjaGFuZ2VFZGl0b3JcIiwge29sZEVkaXRvcjogdGhpc30pO1xuICAgICAgICBzZXNzaW9uICYmIHNlc3Npb24uX3NpZ25hbChcImNoYW5nZUVkaXRvclwiLCB7ZWRpdG9yOiB0aGlzfSk7XG5cbiAgICAgICAgaWYgKHNlc3Npb24gJiYgc2Vzc2lvbi5iZ1Rva2VuaXplcilcbiAgICAgICAgICAgIHNlc3Npb24uYmdUb2tlbml6ZXIuc2NoZWR1bGVTdGFydCgpO1xuICAgIH07XG4gICAgdGhpcy5nZXRTZXNzaW9uID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlc3Npb247XG4gICAgfTtcbiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odmFsLCBjdXJzb3JQb3MpIHtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmRvYy5zZXRWYWx1ZSh2YWwpO1xuXG4gICAgICAgIGlmICghY3Vyc29yUG9zKVxuICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGwoKTtcbiAgICAgICAgZWxzZSBpZiAoY3Vyc29yUG9zID09IDEpXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlRmlsZUVuZCgpO1xuICAgICAgICBlbHNlIGlmIChjdXJzb3JQb3MgPT0gLTEpXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlRmlsZVN0YXJ0KCk7XG5cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9O1xuICAgIHRoaXMuZ2V0VmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRWYWx1ZSgpO1xuICAgIH07XG4gICAgdGhpcy5nZXRTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uO1xuICAgIH07XG4gICAgdGhpcy5yZXNpemUgPSBmdW5jdGlvbihmb3JjZSkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLm9uUmVzaXplKGZvcmNlKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0VGhlbWUgPSBmdW5jdGlvbih0aGVtZSwgY2IpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRUaGVtZSh0aGVtZSwgY2IpO1xuICAgIH07XG4gICAgdGhpcy5nZXRUaGVtZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRUaGVtZSgpO1xuICAgIH07XG4gICAgdGhpcy5zZXRTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc3R5bGUpO1xuICAgIH07XG4gICAgdGhpcy51bnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51bnNldFN0eWxlKHN0eWxlKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0Rm9udFNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbihcImZvbnRTaXplXCIpIHx8XG4gICAgICAgICAgIGRvbS5jb21wdXRlZFN0eWxlKHRoaXMuY29udGFpbmVyLCBcImZvbnRTaXplXCIpO1xuICAgIH07XG4gICAgdGhpcy5zZXRGb250U2l6ZSA9IGZ1bmN0aW9uKHNpemUpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJmb250U2l6ZVwiLCBzaXplKTtcbiAgICB9O1xuXG4gICAgdGhpcy4kaGlnaGxpZ2h0QnJhY2tldHMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi4kYnJhY2tldEhpZ2hsaWdodCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZU1hcmtlcih0aGlzLnNlc3Npb24uJGJyYWNrZXRIaWdobGlnaHQpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLiRicmFja2V0SGlnaGxpZ2h0ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLiRoaWdobGlnaHRQZW5kaW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB0aGlzLiRoaWdobGlnaHRQZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHNlbGYuJGhpZ2hsaWdodFBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBzZXNzaW9uID0gc2VsZi5zZXNzaW9uO1xuICAgICAgICAgICAgaWYgKCFzZXNzaW9uIHx8ICFzZXNzaW9uLmJnVG9rZW5pemVyKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgcG9zID0gc2Vzc2lvbi5maW5kTWF0Y2hpbmdCcmFja2V0KHNlbGYuZ2V0Q3Vyc29yUG9zaXRpb24oKSk7XG4gICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKHBvcy5yb3csIHBvcy5jb2x1bW4sIHBvcy5yb3csIHBvcy5jb2x1bW4gKyAxKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Vzc2lvbi4kbW9kZS5nZXRNYXRjaGluZykge1xuICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uJG1vZGUuZ2V0TWF0Y2hpbmcoc2VsZi5zZXNzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyYW5nZSlcbiAgICAgICAgICAgICAgICBzZXNzaW9uLiRicmFja2V0SGlnaGxpZ2h0ID0gc2Vzc2lvbi5hZGRNYXJrZXIocmFuZ2UsIFwiYWNlX2JyYWNrZXRcIiwgXCJ0ZXh0XCIpO1xuICAgICAgICB9LCA1MCk7XG4gICAgfTtcbiAgICB0aGlzLiRoaWdobGlnaHRUYWdzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLiRoaWdobGlnaHRUYWdQZW5kaW5nKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHRoaXMuJGhpZ2hsaWdodFRhZ1BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgc2VsZi4kaGlnaGxpZ2h0VGFnUGVuZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgc2Vzc2lvbiA9IHNlbGYuc2Vzc2lvbjtcbiAgICAgICAgICAgIGlmICghc2Vzc2lvbiB8fCAhc2Vzc2lvbi5iZ1Rva2VuaXplcikgcmV0dXJuO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgcG9zID0gc2VsZi5nZXRDdXJzb3JQb3NpdGlvbigpO1xuICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2VsZi5zZXNzaW9uLCBwb3Mucm93LCBwb3MuY29sdW1uKTtcbiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoIXRva2VuIHx8ICEvXFxiKD86dGFnLW9wZW58dGFnLW5hbWUpLy50ZXN0KHRva2VuLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmVNYXJrZXIoc2Vzc2lvbi4kdGFnSGlnaGxpZ2h0KTtcbiAgICAgICAgICAgICAgICBzZXNzaW9uLiR0YWdIaWdobGlnaHQgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUuaW5kZXhPZihcInRhZy1vcGVuXCIpICE9IC0xKSB7XG4gICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpO1xuICAgICAgICAgICAgICAgIGlmICghdG9rZW4pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRhZyA9IHRva2VuLnZhbHVlO1xuICAgICAgICAgICAgdmFyIGRlcHRoID0gMDtcbiAgICAgICAgICAgIHZhciBwcmV2VG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PSAnPCcpe1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldlRva2VuID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZSA9PT0gdGFnICYmIHRva2VuLnR5cGUuaW5kZXhPZigndGFnLW5hbWUnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09ICc8Jyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJldlRva2VuLnZhbHVlID09PSAnPC8nKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKHRva2VuICYmIGRlcHRoID49IDApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0gcHJldlRva2VuO1xuICAgICAgICAgICAgICAgICAgICBwcmV2VG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZSA9PT0gdGFnICYmIHRva2VuLnR5cGUuaW5kZXhPZigndGFnLW5hbWUnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09ICc8Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gJzwvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoLS07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IHdoaWxlIChwcmV2VG9rZW4gJiYgZGVwdGggPD0gMCk7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKCF0b2tlbikge1xuICAgICAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlTWFya2VyKHNlc3Npb24uJHRhZ0hpZ2hsaWdodCk7XG4gICAgICAgICAgICAgICAgc2Vzc2lvbi4kdGFnSGlnaGxpZ2h0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciByb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTtcbiAgICAgICAgICAgIHZhciBjb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKTtcbiAgICAgICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShyb3csIGNvbHVtbiwgcm93LCBjb2x1bW4rdG9rZW4udmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIHZhciBzYm0gPSBzZXNzaW9uLiRiYWNrTWFya2Vyc1tzZXNzaW9uLiR0YWdIaWdobGlnaHRdO1xuICAgICAgICAgICAgaWYgKHNlc3Npb24uJHRhZ0hpZ2hsaWdodCAmJiBzYm0gIT0gdW5kZWZpbmVkICYmIHJhbmdlLmNvbXBhcmVSYW5nZShzYm0ucmFuZ2UpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmVNYXJrZXIoc2Vzc2lvbi4kdGFnSGlnaGxpZ2h0KTtcbiAgICAgICAgICAgICAgICBzZXNzaW9uLiR0YWdIaWdobGlnaHQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXNlc3Npb24uJHRhZ0hpZ2hsaWdodClcbiAgICAgICAgICAgICAgICBzZXNzaW9uLiR0YWdIaWdobGlnaHQgPSBzZXNzaW9uLmFkZE1hcmtlcihyYW5nZSwgXCJhY2VfYnJhY2tldFwiLCBcInRleHRcIik7XG4gICAgICAgIH0sIDUwKTtcbiAgICB9O1xuICAgIHRoaXMuZm9jdXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIF9zZWxmID0gdGhpcztcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIF9zZWxmLnRleHRJbnB1dC5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50ZXh0SW5wdXQuZm9jdXMoKTtcbiAgICB9O1xuICAgIHRoaXMuaXNGb2N1c2VkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHRJbnB1dC5pc0ZvY3VzZWQoKTtcbiAgICB9O1xuICAgIHRoaXMuYmx1ciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnRleHRJbnB1dC5ibHVyKCk7XG4gICAgfTtcbiAgICB0aGlzLm9uRm9jdXMgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmICh0aGlzLiRpc0ZvY3VzZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuJGlzRm9jdXNlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2hvd0N1cnNvcigpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnZpc3VhbGl6ZUZvY3VzKCk7XG4gICAgICAgIHRoaXMuX2VtaXQoXCJmb2N1c1wiLCBlKTtcbiAgICB9O1xuICAgIHRoaXMub25CbHVyID0gZnVuY3Rpb24oZSkge1xuICAgICAgICBpZiAoIXRoaXMuJGlzRm9jdXNlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy4kaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuaGlkZUN1cnNvcigpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnZpc3VhbGl6ZUJsdXIoKTtcbiAgICAgICAgdGhpcy5fZW1pdChcImJsdXJcIiwgZSk7XG4gICAgfTtcblxuICAgIHRoaXMuJGN1cnNvckNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgIH07XG4gICAgdGhpcy5vbkRvY3VtZW50Q2hhbmdlID0gZnVuY3Rpb24oZGVsdGEpIHtcbiAgICAgICAgdmFyIHdyYXAgPSB0aGlzLnNlc3Npb24uJHVzZVdyYXBNb2RlO1xuICAgICAgICB2YXIgbGFzdFJvdyA9IChkZWx0YS5zdGFydC5yb3cgPT0gZGVsdGEuZW5kLnJvdyA/IGRlbHRhLmVuZC5yb3cgOiBJbmZpbml0eSk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlTGluZXMoZGVsdGEuc3RhcnQucm93LCBsYXN0Um93LCB3cmFwKTtcblxuICAgICAgICB0aGlzLl9zaWduYWwoXCJjaGFuZ2VcIiwgZGVsdGEpO1xuICAgICAgICB0aGlzLiRjdXJzb3JDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy4kdXBkYXRlSGlnaGxpZ2h0QWN0aXZlTGluZSgpO1xuICAgIH07XG5cbiAgICB0aGlzLm9uVG9rZW5pemVyVXBkYXRlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICB2YXIgcm93cyA9IGUuZGF0YTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVMaW5lcyhyb3dzLmZpcnN0LCByb3dzLmxhc3QpO1xuICAgIH07XG5cblxuICAgIHRoaXMub25TY3JvbGxUb3BDaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxUb1kodGhpcy5zZXNzaW9uLmdldFNjcm9sbFRvcCgpKTtcbiAgICB9O1xuXG4gICAgdGhpcy5vblNjcm9sbExlZnRDaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxUb1godGhpcy5zZXNzaW9uLmdldFNjcm9sbExlZnQoKSk7XG4gICAgfTtcbiAgICB0aGlzLm9uQ3Vyc29yQ2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuJGN1cnNvckNoYW5nZSgpO1xuXG4gICAgICAgIGlmICghdGhpcy4kYmxvY2tTY3JvbGxpbmcpIHtcbiAgICAgICAgICAgIGNvbmZpZy53YXJuKFwiQXV0b21hdGljYWxseSBzY3JvbGxpbmcgY3Vyc29yIGludG8gdmlldyBhZnRlciBzZWxlY3Rpb24gY2hhbmdlXCIsXG4gICAgICAgICAgICAgICAgXCJ0aGlzIHdpbGwgYmUgZGlzYWJsZWQgaW4gdGhlIG5leHQgdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIFwic2V0IGVkaXRvci4kYmxvY2tTY3JvbGxpbmcgPSBJbmZpbml0eSB0byBkaXNhYmxlIHRoaXMgbWVzc2FnZVwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4kaGlnaGxpZ2h0QnJhY2tldHMoKTtcbiAgICAgICAgdGhpcy4kaGlnaGxpZ2h0VGFncygpO1xuICAgICAgICB0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lKCk7XG4gICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZVNlbGVjdGlvblwiKTtcbiAgICB9O1xuXG4gICAgdGhpcy4kdXBkYXRlSGlnaGxpZ2h0QWN0aXZlTGluZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuZ2V0U2Vzc2lvbigpO1xuXG4gICAgICAgIHZhciBoaWdobGlnaHQ7XG4gICAgICAgIGlmICh0aGlzLiRoaWdobGlnaHRBY3RpdmVMaW5lKSB7XG4gICAgICAgICAgICBpZiAoKHRoaXMuJHNlbGVjdGlvblN0eWxlICE9IFwibGluZVwiIHx8ICF0aGlzLnNlbGVjdGlvbi5pc011bHRpTGluZSgpKSlcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5yZW5kZXJlci4kbWF4TGluZXMgJiYgdGhpcy5zZXNzaW9uLmdldExlbmd0aCgpID09PSAxICYmICEodGhpcy5yZW5kZXJlci4kbWluTGluZXMgPiAxKSlcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZXNzaW9uLiRoaWdobGlnaHRMaW5lTWFya2VyICYmICFoaWdobGlnaHQpIHtcbiAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlTWFya2VyKHNlc3Npb24uJGhpZ2hsaWdodExpbmVNYXJrZXIuaWQpO1xuICAgICAgICAgICAgc2Vzc2lvbi4kaGlnaGxpZ2h0TGluZU1hcmtlciA9IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAoIXNlc3Npb24uJGhpZ2hsaWdodExpbmVNYXJrZXIgJiYgaGlnaGxpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2UoaGlnaGxpZ2h0LnJvdywgaGlnaGxpZ2h0LmNvbHVtbiwgaGlnaGxpZ2h0LnJvdywgSW5maW5pdHkpO1xuICAgICAgICAgICAgcmFuZ2UuaWQgPSBzZXNzaW9uLmFkZE1hcmtlcihyYW5nZSwgXCJhY2VfYWN0aXZlLWxpbmVcIiwgXCJzY3JlZW5MaW5lXCIpO1xuICAgICAgICAgICAgc2Vzc2lvbi4kaGlnaGxpZ2h0TGluZU1hcmtlciA9IHJhbmdlO1xuICAgICAgICB9IGVsc2UgaWYgKGhpZ2hsaWdodCkge1xuICAgICAgICAgICAgc2Vzc2lvbi4kaGlnaGxpZ2h0TGluZU1hcmtlci5zdGFydC5yb3cgPSBoaWdobGlnaHQucm93O1xuICAgICAgICAgICAgc2Vzc2lvbi4kaGlnaGxpZ2h0TGluZU1hcmtlci5lbmQucm93ID0gaGlnaGxpZ2h0LnJvdztcbiAgICAgICAgICAgIHNlc3Npb24uJGhpZ2hsaWdodExpbmVNYXJrZXIuc3RhcnQuY29sdW1uID0gaGlnaGxpZ2h0LmNvbHVtbjtcbiAgICAgICAgICAgIHNlc3Npb24uX3NpZ25hbChcImNoYW5nZUJhY2tNYXJrZXJcIik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG5cbiAgICAgICAgaWYgKHNlc3Npb24uJHNlbGVjdGlvbk1hcmtlcikge1xuICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmVNYXJrZXIoc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2VyKTtcbiAgICAgICAgfVxuICAgICAgICBzZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXIgPSBudWxsO1xuXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi5nZXRSYW5nZSgpO1xuICAgICAgICAgICAgdmFyIHN0eWxlID0gdGhpcy5nZXRTZWxlY3Rpb25TdHlsZSgpO1xuICAgICAgICAgICAgc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2VyID0gc2Vzc2lvbi5hZGRNYXJrZXIocmFuZ2UsIFwiYWNlX3NlbGVjdGlvblwiLCBzdHlsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmUgPSB0aGlzLiRoaWdobGlnaHRTZWxlY3RlZFdvcmQgJiYgdGhpcy4kZ2V0U2VsZWN0aW9uSGlnaExpZ2h0UmVnZXhwKCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5oaWdobGlnaHQocmUpO1xuXG4gICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZVNlbGVjdGlvblwiKTtcbiAgICB9O1xuXG4gICAgdGhpcy4kZ2V0U2VsZWN0aW9uSGlnaExpZ2h0UmVnZXhwID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uO1xuXG4gICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgIGlmIChzZWxlY3Rpb24uaXNFbXB0eSgpIHx8IHNlbGVjdGlvbi5pc011bHRpTGluZSgpKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHZhciBzdGFydE91dGVyID0gc2VsZWN0aW9uLnN0YXJ0LmNvbHVtbiAtIDE7XG4gICAgICAgIHZhciBlbmRPdXRlciA9IHNlbGVjdGlvbi5lbmQuY29sdW1uICsgMTtcbiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUoc2VsZWN0aW9uLnN0YXJ0LnJvdyk7XG4gICAgICAgIHZhciBsaW5lQ29scyA9IGxpbmUubGVuZ3RoO1xuICAgICAgICB2YXIgbmVlZGxlID0gbGluZS5zdWJzdHJpbmcoTWF0aC5tYXgoc3RhcnRPdXRlciwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihlbmRPdXRlciwgbGluZUNvbHMpKTtcbiAgICAgICAgaWYgKChzdGFydE91dGVyID49IDAgJiYgL15bXFx3XFxkXS8udGVzdChuZWVkbGUpKSB8fFxuICAgICAgICAgICAgKGVuZE91dGVyIDw9IGxpbmVDb2xzICYmIC9bXFx3XFxkXSQvLnRlc3QobmVlZGxlKSkpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgbmVlZGxlID0gbGluZS5zdWJzdHJpbmcoc2VsZWN0aW9uLnN0YXJ0LmNvbHVtbiwgc2VsZWN0aW9uLmVuZC5jb2x1bW4pO1xuICAgICAgICBpZiAoIS9eW1xcd1xcZF0rJC8udGVzdChuZWVkbGUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHZhciByZSA9IHRoaXMuJHNlYXJjaC4kYXNzZW1ibGVSZWdFeHAoe1xuICAgICAgICAgICAgd2hvbGVXb3JkOiB0cnVlLFxuICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgIG5lZWRsZTogbmVlZGxlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZTtcbiAgICB9O1xuXG5cbiAgICB0aGlzLm9uQ2hhbmdlRnJvbnRNYXJrZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVGcm9udE1hcmtlcnMoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5vbkNoYW5nZUJhY2tNYXJrZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVCYWNrTWFya2VycygpO1xuICAgIH07XG5cblxuICAgIHRoaXMub25DaGFuZ2VCcmVha3BvaW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQnJlYWtwb2ludHMoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5vbkNoYW5nZUFubm90YXRpb24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBbm5vdGF0aW9ucyh0aGlzLnNlc3Npb24uZ2V0QW5ub3RhdGlvbnMoKSk7XG4gICAgfTtcblxuXG4gICAgdGhpcy5vbkNoYW5nZU1vZGUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dCgpO1xuICAgICAgICB0aGlzLl9lbWl0KFwiY2hhbmdlTW9kZVwiLCBlKTtcbiAgICB9O1xuXG5cbiAgICB0aGlzLm9uQ2hhbmdlV3JhcExpbWl0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlRnVsbCgpO1xuICAgIH07XG5cbiAgICB0aGlzLm9uQ2hhbmdlV3JhcE1vZGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5vblJlc2l6ZSh0cnVlKTtcbiAgICB9O1xuXG5cbiAgICB0aGlzLm9uQ2hhbmdlRm9sZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lKCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlRnVsbCgpO1xuICAgIH07XG4gICAgdGhpcy5nZXRTZWxlY3RlZFRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0Q29weVRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHRleHQgPSB0aGlzLmdldFNlbGVjdGVkVGV4dCgpO1xuICAgICAgICB0aGlzLl9zaWduYWwoXCJjb3B5XCIsIHRleHQpO1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9O1xuICAgIHRoaXMub25Db3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuY29tbWFuZHMuZXhlYyhcImNvcHlcIiwgdGhpcyk7XG4gICAgfTtcbiAgICB0aGlzLm9uQ3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuY29tbWFuZHMuZXhlYyhcImN1dFwiLCB0aGlzKTtcbiAgICB9O1xuICAgIHRoaXMub25QYXN0ZSA9IGZ1bmN0aW9uKHRleHQsIGV2ZW50KSB7XG4gICAgICAgIHZhciBlID0ge3RleHQ6IHRleHQsIGV2ZW50OiBldmVudH07XG4gICAgICAgIHRoaXMuY29tbWFuZHMuZXhlYyhcInBhc3RlXCIsIHRoaXMsIGUpO1xuICAgIH07XG4gICAgXG4gICAgdGhpcy4kaGFuZGxlUGFzdGUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZSA9PSBcInN0cmluZ1wiKSBcbiAgICAgICAgICAgIGUgPSB7dGV4dDogZX07XG4gICAgICAgIHRoaXMuX3NpZ25hbChcInBhc3RlXCIsIGUpO1xuICAgICAgICB2YXIgdGV4dCA9IGUudGV4dDtcbiAgICAgICAgaWYgKCF0aGlzLmluTXVsdGlTZWxlY3RNb2RlIHx8IHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSkge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnQodGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KC9cXHJcXG58XFxyfFxcbi8pO1xuICAgICAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuc2VsZWN0aW9uLnJhbmdlTGlzdC5yYW5nZXM7XG4gICAgXG4gICAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID4gcmFuZ2VzLmxlbmd0aCB8fCBsaW5lcy5sZW5ndGggPCAyIHx8ICFsaW5lc1sxXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb21tYW5kcy5leGVjKFwiaW5zZXJ0c3RyaW5nXCIsIHRoaXMsIHRleHQpO1xuICAgIFxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHJhbmdlcy5sZW5ndGg7IGktLTspIHtcbiAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSByYW5nZXNbaV07XG4gICAgICAgICAgICAgICAgaWYgKCFyYW5nZS5pc0VtcHR5KCkpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUocmFuZ2UpO1xuICAgIFxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnQocmFuZ2Uuc3RhcnQsIGxpbmVzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmV4ZWNDb21tYW5kID0gZnVuY3Rpb24oY29tbWFuZCwgYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21tYW5kcy5leGVjKGNvbW1hbmQsIHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gICAgdGhpcy5pbnNlcnQgPSBmdW5jdGlvbih0ZXh0LCBwYXN0ZWQpIHtcbiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG4gICAgICAgIHZhciBtb2RlID0gc2Vzc2lvbi5nZXRNb2RlKCk7XG4gICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZ2V0QmVoYXZpb3Vyc0VuYWJsZWQoKSAmJiAhcGFzdGVkKSB7XG4gICAgICAgICAgICB2YXIgdHJhbnNmb3JtID0gbW9kZS50cmFuc2Zvcm1BY3Rpb24oc2Vzc2lvbi5nZXRTdGF0ZShjdXJzb3Iucm93KSwgJ2luc2VydGlvbicsIHRoaXMsIHNlc3Npb24sIHRleHQpO1xuICAgICAgICAgICAgaWYgKHRyYW5zZm9ybSkge1xuICAgICAgICAgICAgICAgIGlmICh0ZXh0ICE9PSB0cmFuc2Zvcm0udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24ubWVyZ2VVbmRvRGVsdGFzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJG1lcmdlTmV4dENvbW1hbmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGV4dCA9IHRyYW5zZm9ybS50ZXh0O1xuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICh0ZXh0ID09IFwiXFx0XCIpXG4gICAgICAgICAgICB0ZXh0ID0gdGhpcy5zZXNzaW9uLmdldFRhYlN0cmluZygpO1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO1xuICAgICAgICAgICAgY3Vyc29yID0gdGhpcy5zZXNzaW9uLnJlbW92ZShyYW5nZSk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5zZXNzaW9uLmdldE92ZXJ3cml0ZSgpICYmIHRleHQuaW5kZXhPZihcIlxcblwiKSA9PSAtMSkge1xuICAgICAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlLmZyb21Qb2ludHMoY3Vyc29yLCBjdXJzb3IpO1xuICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiArPSB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUocmFuZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRleHQgPT0gXCJcXG5cIiB8fCB0ZXh0ID09IFwiXFxyXFxuXCIpIHtcbiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpO1xuICAgICAgICAgICAgaWYgKGN1cnNvci5jb2x1bW4gPiBsaW5lLnNlYXJjaCgvXFxTfCQvKSkge1xuICAgICAgICAgICAgICAgIHZhciBkID0gbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbikuc2VhcmNoKC9cXFN8JC8pO1xuICAgICAgICAgICAgICAgIHNlc3Npb24uZG9jLnJlbW92ZUluTGluZShjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuXG4gICAgICAgIHZhciBzdGFydCA9IGN1cnNvci5jb2x1bW47XG4gICAgICAgIHZhciBsaW5lU3RhdGUgPSBzZXNzaW9uLmdldFN0YXRlKGN1cnNvci5yb3cpO1xuICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShjdXJzb3Iucm93KTtcbiAgICAgICAgdmFyIHNob3VsZE91dGRlbnQgPSBtb2RlLmNoZWNrT3V0ZGVudChsaW5lU3RhdGUsIGxpbmUsIHRleHQpO1xuICAgICAgICB2YXIgZW5kID0gc2Vzc2lvbi5pbnNlcnQoY3Vyc29yLCB0ZXh0KTtcblxuICAgICAgICBpZiAodHJhbnNmb3JtICYmIHRyYW5zZm9ybS5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICh0cmFuc2Zvcm0uc2VsZWN0aW9uLmxlbmd0aCA9PSAyKSB7IC8vIFRyYW5zZm9ybSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBjb2x1bW5cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShcbiAgICAgICAgICAgICAgICAgICAgbmV3IFJhbmdlKGN1cnNvci5yb3csIHN0YXJ0ICsgdHJhbnNmb3JtLnNlbGVjdGlvblswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvci5yb3csIHN0YXJ0ICsgdHJhbnNmb3JtLnNlbGVjdGlvblsxXSkpO1xuICAgICAgICAgICAgfSBlbHNlIHsgLy8gVHJhbnNmb3JtIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHJvdy5cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShcbiAgICAgICAgICAgICAgICAgICAgbmV3IFJhbmdlKGN1cnNvci5yb3cgKyB0cmFuc2Zvcm0uc2VsZWN0aW9uWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnNlbGVjdGlvblsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvci5yb3cgKyB0cmFuc2Zvcm0uc2VsZWN0aW9uWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnNlbGVjdGlvblszXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlc3Npb24uZ2V0RG9jdW1lbnQoKS5pc05ld0xpbmUodGV4dCkpIHtcbiAgICAgICAgICAgIHZhciBsaW5lSW5kZW50ID0gbW9kZS5nZXROZXh0TGluZUluZGVudChsaW5lU3RhdGUsIGxpbmUuc2xpY2UoMCwgY3Vyc29yLmNvbHVtbiksIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCkpO1xuXG4gICAgICAgICAgICBzZXNzaW9uLmluc2VydCh7cm93OiBjdXJzb3Iucm93KzEsIGNvbHVtbjogMH0sIGxpbmVJbmRlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaG91bGRPdXRkZW50KVxuICAgICAgICAgICAgbW9kZS5hdXRvT3V0ZGVudChsaW5lU3RhdGUsIHNlc3Npb24sIGN1cnNvci5yb3cpO1xuICAgIH07XG5cbiAgICB0aGlzLm9uVGV4dElucHV0ID0gZnVuY3Rpb24odGV4dCkge1xuICAgICAgICB0aGlzLmtleUJpbmRpbmcub25UZXh0SW5wdXQodGV4dCk7XG4gICAgfTtcblxuICAgIHRoaXMub25Db21tYW5kS2V5ID0gZnVuY3Rpb24oZSwgaGFzaElkLCBrZXlDb2RlKSB7XG4gICAgICAgIHRoaXMua2V5QmluZGluZy5vbkNvbW1hbmRLZXkoZSwgaGFzaElkLCBrZXlDb2RlKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0T3ZlcndyaXRlID0gZnVuY3Rpb24ob3ZlcndyaXRlKSB7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRPdmVyd3JpdGUob3ZlcndyaXRlKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0T3ZlcndyaXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uZ2V0T3ZlcndyaXRlKCk7XG4gICAgfTtcbiAgICB0aGlzLnRvZ2dsZU92ZXJ3cml0ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNlc3Npb24udG9nZ2xlT3ZlcndyaXRlKCk7XG4gICAgfTtcbiAgICB0aGlzLnNldFNjcm9sbFNwZWVkID0gZnVuY3Rpb24oc3BlZWQpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJzY3JvbGxTcGVlZFwiLCBzcGVlZCk7XG4gICAgfTtcbiAgICB0aGlzLmdldFNjcm9sbFNwZWVkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbihcInNjcm9sbFNwZWVkXCIpO1xuICAgIH07XG4gICAgdGhpcy5zZXREcmFnRGVsYXkgPSBmdW5jdGlvbihkcmFnRGVsYXkpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJkcmFnRGVsYXlcIiwgZHJhZ0RlbGF5KTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0RHJhZ0RlbGF5ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbihcImRyYWdEZWxheVwiKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uU3R5bGUgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJzZWxlY3Rpb25TdHlsZVwiLCB2YWwpO1xuICAgIH07XG4gICAgdGhpcy5nZXRTZWxlY3Rpb25TdHlsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJzZWxlY3Rpb25TdHlsZVwiKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0SGlnaGxpZ2h0QWN0aXZlTGluZSA9IGZ1bmN0aW9uKHNob3VsZEhpZ2hsaWdodCkge1xuICAgICAgICB0aGlzLnNldE9wdGlvbihcImhpZ2hsaWdodEFjdGl2ZUxpbmVcIiwgc2hvdWxkSGlnaGxpZ2h0KTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0SGlnaGxpZ2h0QWN0aXZlTGluZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJoaWdobGlnaHRBY3RpdmVMaW5lXCIpO1xuICAgIH07XG4gICAgdGhpcy5zZXRIaWdobGlnaHRHdXR0ZXJMaW5lID0gZnVuY3Rpb24oc2hvdWxkSGlnaGxpZ2h0KSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uKFwiaGlnaGxpZ2h0R3V0dGVyTGluZVwiLCBzaG91bGRIaWdobGlnaHQpO1xuICAgIH07XG5cbiAgICB0aGlzLmdldEhpZ2hsaWdodEd1dHRlckxpbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKFwiaGlnaGxpZ2h0R3V0dGVyTGluZVwiKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0SGlnaGxpZ2h0U2VsZWN0ZWRXb3JkID0gZnVuY3Rpb24oc2hvdWxkSGlnaGxpZ2h0KSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uKFwiaGlnaGxpZ2h0U2VsZWN0ZWRXb3JkXCIsIHNob3VsZEhpZ2hsaWdodCk7XG4gICAgfTtcbiAgICB0aGlzLmdldEhpZ2hsaWdodFNlbGVjdGVkV29yZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kaGlnaGxpZ2h0U2VsZWN0ZWRXb3JkO1xuICAgIH07XG5cbiAgICB0aGlzLnNldEFuaW1hdGVkU2Nyb2xsID0gZnVuY3Rpb24oc2hvdWxkQW5pbWF0ZSl7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QW5pbWF0ZWRTY3JvbGwoc2hvdWxkQW5pbWF0ZSk7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0QW5pbWF0ZWRTY3JvbGwgPSBmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRBbmltYXRlZFNjcm9sbCgpO1xuICAgIH07XG4gICAgdGhpcy5zZXRTaG93SW52aXNpYmxlcyA9IGZ1bmN0aW9uKHNob3dJbnZpc2libGVzKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U2hvd0ludmlzaWJsZXMoc2hvd0ludmlzaWJsZXMpO1xuICAgIH07XG4gICAgdGhpcy5nZXRTaG93SW52aXNpYmxlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRTaG93SW52aXNpYmxlcygpO1xuICAgIH07XG5cbiAgICB0aGlzLnNldERpc3BsYXlJbmRlbnRHdWlkZXMgPSBmdW5jdGlvbihkaXNwbGF5KSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0RGlzcGxheUluZGVudEd1aWRlcyhkaXNwbGF5KTtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXREaXNwbGF5SW5kZW50R3VpZGVzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmdldERpc3BsYXlJbmRlbnRHdWlkZXMoKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0U2hvd1ByaW50TWFyZ2luID0gZnVuY3Rpb24oc2hvd1ByaW50TWFyZ2luKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U2hvd1ByaW50TWFyZ2luKHNob3dQcmludE1hcmdpbik7XG4gICAgfTtcbiAgICB0aGlzLmdldFNob3dQcmludE1hcmdpbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRTaG93UHJpbnRNYXJnaW4oKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0UHJpbnRNYXJnaW5Db2x1bW4gPSBmdW5jdGlvbihzaG93UHJpbnRNYXJnaW4pIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcmludE1hcmdpbkNvbHVtbihzaG93UHJpbnRNYXJnaW4pO1xuICAgIH07XG4gICAgdGhpcy5nZXRQcmludE1hcmdpbkNvbHVtbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRQcmludE1hcmdpbkNvbHVtbigpO1xuICAgIH07XG4gICAgdGhpcy5zZXRSZWFkT25seSA9IGZ1bmN0aW9uKHJlYWRPbmx5KSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uKFwicmVhZE9ubHlcIiwgcmVhZE9ubHkpO1xuICAgIH07XG4gICAgdGhpcy5nZXRSZWFkT25seSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJyZWFkT25seVwiKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0QmVoYXZpb3Vyc0VuYWJsZWQgPSBmdW5jdGlvbiAoZW5hYmxlZCkge1xuICAgICAgICB0aGlzLnNldE9wdGlvbihcImJlaGF2aW91cnNFbmFibGVkXCIsIGVuYWJsZWQpO1xuICAgIH07XG4gICAgdGhpcy5nZXRCZWhhdmlvdXJzRW5hYmxlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKFwiYmVoYXZpb3Vyc0VuYWJsZWRcIik7XG4gICAgfTtcbiAgICB0aGlzLnNldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCA9IGZ1bmN0aW9uIChlbmFibGVkKSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uKFwid3JhcEJlaGF2aW91cnNFbmFibGVkXCIsIGVuYWJsZWQpO1xuICAgIH07XG4gICAgdGhpcy5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbihcIndyYXBCZWhhdmlvdXJzRW5hYmxlZFwiKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0U2hvd0ZvbGRXaWRnZXRzID0gZnVuY3Rpb24oc2hvdykge1xuICAgICAgICB0aGlzLnNldE9wdGlvbihcInNob3dGb2xkV2lkZ2V0c1wiLCBzaG93KTtcblxuICAgIH07XG4gICAgdGhpcy5nZXRTaG93Rm9sZFdpZGdldHMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKFwic2hvd0ZvbGRXaWRnZXRzXCIpO1xuICAgIH07XG5cbiAgICB0aGlzLnNldEZhZGVGb2xkV2lkZ2V0cyA9IGZ1bmN0aW9uKGZhZGUpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJmYWRlRm9sZFdpZGdldHNcIiwgZmFkZSk7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0RmFkZUZvbGRXaWRnZXRzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbihcImZhZGVGb2xkV2lkZ2V0c1wiKTtcbiAgICB9O1xuICAgIHRoaXMucmVtb3ZlID0gZnVuY3Rpb24oZGlyKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpe1xuICAgICAgICAgICAgaWYgKGRpciA9PSBcImxlZnRcIilcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RMZWZ0KCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0UmlnaHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0QmVoYXZpb3Vyc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG4gICAgICAgICAgICB2YXIgc3RhdGUgPSBzZXNzaW9uLmdldFN0YXRlKHJhbmdlLnN0YXJ0LnJvdyk7XG4gICAgICAgICAgICB2YXIgbmV3X3JhbmdlID0gc2Vzc2lvbi5nZXRNb2RlKCkudHJhbnNmb3JtQWN0aW9uKHN0YXRlLCAnZGVsZXRpb24nLCB0aGlzLCBzZXNzaW9uLCByYW5nZSk7XG5cbiAgICAgICAgICAgIGlmIChyYW5nZS5lbmQuY29sdW1uID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRleHQgPSBzZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRleHRbdGV4dC5sZW5ndGggLSAxXSA9PSBcIlxcblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJhbmdlLmVuZC5yb3cpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoL15cXHMrJC8udGVzdChsaW5lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IGxpbmUubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5ld19yYW5nZSlcbiAgICAgICAgICAgICAgICByYW5nZSA9IG5ld19yYW5nZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUocmFuZ2UpO1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfTtcbiAgICB0aGlzLnJlbW92ZVdvcmRSaWdodCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0V29yZFJpZ2h0KCk7XG5cbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZSh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpO1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfTtcbiAgICB0aGlzLnJlbW92ZVdvcmRMZWZ0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RXb3JkTGVmdCgpO1xuXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKTtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIH07XG4gICAgdGhpcy5yZW1vdmVUb0xpbmVTdGFydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0TGluZVN0YXJ0KCk7XG5cbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZSh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpO1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfTtcbiAgICB0aGlzLnJlbW92ZVRvTGluZUVuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0TGluZUVuZCgpO1xuXG4gICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LmNvbHVtbiA9PSByYW5nZS5lbmQuY29sdW1uICYmIHJhbmdlLnN0YXJ0LnJvdyA9PSByYW5nZS5lbmQucm93KSB7XG4gICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uID0gMDtcbiAgICAgICAgICAgIHJhbmdlLmVuZC5yb3crKztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUocmFuZ2UpO1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfTtcbiAgICB0aGlzLnNwbGl0TGluZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZSh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpO1xuICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGN1cnNvciA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKTtcbiAgICAgICAgdGhpcy5pbnNlcnQoXCJcXG5cIik7XG4gICAgICAgIHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb24oY3Vyc29yKTtcbiAgICB9O1xuICAgIHRoaXMudHJhbnNwb3NlTGV0dGVycyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGN1cnNvciA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKTtcbiAgICAgICAgdmFyIGNvbHVtbiA9IGN1cnNvci5jb2x1bW47XG4gICAgICAgIGlmIChjb2x1bW4gPT09IDApXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLnNlc3Npb24uZ2V0TGluZShjdXJzb3Iucm93KTtcbiAgICAgICAgdmFyIHN3YXAsIHJhbmdlO1xuICAgICAgICBpZiAoY29sdW1uIDwgbGluZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHN3YXAgPSBsaW5lLmNoYXJBdChjb2x1bW4pICsgbGluZS5jaGFyQXQoY29sdW1uLTEpO1xuICAgICAgICAgICAgcmFuZ2UgPSBuZXcgUmFuZ2UoY3Vyc29yLnJvdywgY29sdW1uLTEsIGN1cnNvci5yb3csIGNvbHVtbisxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN3YXAgPSBsaW5lLmNoYXJBdChjb2x1bW4tMSkgKyBsaW5lLmNoYXJBdChjb2x1bW4tMik7XG4gICAgICAgICAgICByYW5nZSA9IG5ldyBSYW5nZShjdXJzb3Iucm93LCBjb2x1bW4tMiwgY3Vyc29yLnJvdywgY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlc3Npb24ucmVwbGFjZShyYW5nZSwgc3dhcCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb24ubW92ZVRvUG9zaXRpb24ocmFuZ2UuZW5kKTtcbiAgICB9O1xuICAgIHRoaXMudG9Mb3dlckNhc2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsUmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdFdvcmQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgdmFyIHRleHQgPSB0aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHJhbmdlKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlcGxhY2UocmFuZ2UsIHRleHQudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKG9yaWdpbmFsUmFuZ2UpO1xuICAgIH07XG4gICAgdGhpcy50b1VwcGVyQ2FzZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgb3JpZ2luYWxSYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0V29yZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO1xuICAgICAgICB2YXIgdGV4dCA9IHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UocmFuZ2UpO1xuICAgICAgICB0aGlzLnNlc3Npb24ucmVwbGFjZShyYW5nZSwgdGV4dC50b1VwcGVyQ2FzZSgpKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2Uob3JpZ2luYWxSYW5nZSk7XG4gICAgfTtcbiAgICB0aGlzLmluZGVudCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcbiAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO1xuXG4gICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPCByYW5nZS5lbmQucm93KSB7XG4gICAgICAgICAgICB2YXIgcm93cyA9IHRoaXMuJGdldFNlbGVjdGVkUm93cygpO1xuICAgICAgICAgICAgc2Vzc2lvbi5pbmRlbnRSb3dzKHJvd3MuZmlyc3QsIHJvd3MubGFzdCwgXCJcXHRcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAocmFuZ2Uuc3RhcnQuY29sdW1uIDwgcmFuZ2UuZW5kLmNvbHVtbikge1xuICAgICAgICAgICAgdmFyIHRleHQgPSBzZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICBpZiAoIS9eXFxzKyQvLnRlc3QodGV4dCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgcm93cyA9IHRoaXMuJGdldFNlbGVjdGVkUm93cygpO1xuICAgICAgICAgICAgICAgIHNlc3Npb24uaW5kZW50Um93cyhyb3dzLmZpcnN0LCByb3dzLmxhc3QsIFwiXFx0XCIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTtcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gcmFuZ2Uuc3RhcnQ7XG4gICAgICAgIHZhciBzaXplID0gc2Vzc2lvbi5nZXRUYWJTaXplKCk7XG4gICAgICAgIHZhciBjb2x1bW4gPSBzZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Db2x1bW4ocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pO1xuXG4gICAgICAgIGlmICh0aGlzLnNlc3Npb24uZ2V0VXNlU29mdFRhYnMoKSkge1xuICAgICAgICAgICAgdmFyIGNvdW50ID0gKHNpemUgLSBjb2x1bW4gJSBzaXplKTtcbiAgICAgICAgICAgIHZhciBpbmRlbnRTdHJpbmcgPSBsYW5nLnN0cmluZ1JlcGVhdChcIiBcIiwgY291bnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGNvdW50ID0gY29sdW1uICUgc2l6ZTtcbiAgICAgICAgICAgIHdoaWxlIChsaW5lW3JhbmdlLnN0YXJ0LmNvbHVtbiAtIDFdID09IFwiIFwiICYmIGNvdW50KSB7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uLS07XG4gICAgICAgICAgICAgICAgY291bnQtLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKHJhbmdlKTtcbiAgICAgICAgICAgIGluZGVudFN0cmluZyA9IFwiXFx0XCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0KGluZGVudFN0cmluZyk7XG4gICAgfTtcbiAgICB0aGlzLmJsb2NrSW5kZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByb3dzID0gdGhpcy4kZ2V0U2VsZWN0ZWRSb3dzKCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5pbmRlbnRSb3dzKHJvd3MuZmlyc3QsIHJvd3MubGFzdCwgXCJcXHRcIik7XG4gICAgfTtcbiAgICB0aGlzLmJsb2NrT3V0ZGVudCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5zZXNzaW9uLmdldFNlbGVjdGlvbigpO1xuICAgICAgICB0aGlzLnNlc3Npb24ub3V0ZGVudFJvd3Moc2VsZWN0aW9uLmdldFJhbmdlKCkpO1xuICAgIH07XG4gICAgdGhpcy5zb3J0TGluZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHJvd3MgPSB0aGlzLiRnZXRTZWxlY3RlZFJvd3MoKTtcbiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG5cbiAgICAgICAgdmFyIGxpbmVzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSByb3dzLmZpcnN0OyBpIDw9IHJvd3MubGFzdDsgaSsrKVxuICAgICAgICAgICAgbGluZXMucHVzaChzZXNzaW9uLmdldExpbmUoaSkpO1xuXG4gICAgICAgIGxpbmVzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAgICAgICAgICAgaWYgKGEudG9Mb3dlckNhc2UoKSA8IGIudG9Mb3dlckNhc2UoKSkgcmV0dXJuIC0xO1xuICAgICAgICAgICAgaWYgKGEudG9Mb3dlckNhc2UoKSA+IGIudG9Mb3dlckNhc2UoKSkgcmV0dXJuIDE7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGRlbGV0ZVJhbmdlID0gbmV3IFJhbmdlKDAsIDAsIDAsIDApO1xuICAgICAgICBmb3IgKHZhciBpID0gcm93cy5maXJzdDsgaSA8PSByb3dzLmxhc3Q7IGkrKykge1xuICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUoaSk7XG4gICAgICAgICAgICBkZWxldGVSYW5nZS5zdGFydC5yb3cgPSBpO1xuICAgICAgICAgICAgZGVsZXRlUmFuZ2UuZW5kLnJvdyA9IGk7XG4gICAgICAgICAgICBkZWxldGVSYW5nZS5lbmQuY29sdW1uID0gbGluZS5sZW5ndGg7XG4gICAgICAgICAgICBzZXNzaW9uLnJlcGxhY2UoZGVsZXRlUmFuZ2UsIGxpbmVzW2ktcm93cy5maXJzdF0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnNlc3Npb24uZ2V0U3RhdGUodGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpLnJvdyk7XG4gICAgICAgIHZhciByb3dzID0gdGhpcy4kZ2V0U2VsZWN0ZWRSb3dzKCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5nZXRNb2RlKCkudG9nZ2xlQ29tbWVudExpbmVzKHN0YXRlLCB0aGlzLnNlc3Npb24sIHJvd3MuZmlyc3QsIHJvd3MubGFzdCk7XG4gICAgfTtcblxuICAgIHRoaXMudG9nZ2xlQmxvY2tDb21tZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKCk7XG4gICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuc2Vzc2lvbi5nZXRTdGF0ZShjdXJzb3Iucm93KTtcbiAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO1xuICAgICAgICB0aGlzLnNlc3Npb24uZ2V0TW9kZSgpLnRvZ2dsZUJsb2NrQ29tbWVudChzdGF0ZSwgdGhpcy5zZXNzaW9uLCByYW5nZSwgY3Vyc29yKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0TnVtYmVyQXQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikge1xuICAgICAgICB2YXIgX251bWJlclJ4ID0gL1tcXC1dP1swLTldKyg/OlxcLlswLTldKyk/L2c7XG4gICAgICAgIF9udW1iZXJSeC5sYXN0SW5kZXggPSAwO1xuXG4gICAgICAgIHZhciBzID0gdGhpcy5zZXNzaW9uLmdldExpbmUocm93KTtcbiAgICAgICAgd2hpbGUgKF9udW1iZXJSeC5sYXN0SW5kZXggPCBjb2x1bW4pIHtcbiAgICAgICAgICAgIHZhciBtID0gX251bWJlclJ4LmV4ZWMocyk7XG4gICAgICAgICAgICBpZihtLmluZGV4IDw9IGNvbHVtbiAmJiBtLmluZGV4K21bMF0ubGVuZ3RoID49IGNvbHVtbil7XG4gICAgICAgICAgICAgICAgdmFyIG51bWJlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1bMF0sXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBtLmluZGV4LFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IG0uaW5kZXgrbVswXS5sZW5ndGhcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICB0aGlzLm1vZGlmeU51bWJlciA9IGZ1bmN0aW9uKGFtb3VudCkge1xuICAgICAgICB2YXIgcm93ID0gdGhpcy5zZWxlY3Rpb24uZ2V0Q3Vyc29yKCkucm93O1xuICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5zZWxlY3Rpb24uZ2V0Q3Vyc29yKCkuY29sdW1uO1xuICAgICAgICB2YXIgY2hhclJhbmdlID0gbmV3IFJhbmdlKHJvdywgY29sdW1uLTEsIHJvdywgY29sdW1uKTtcblxuICAgICAgICB2YXIgYyA9IHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UoY2hhclJhbmdlKTtcbiAgICAgICAgaWYgKCFpc05hTihwYXJzZUZsb2F0KGMpKSAmJiBpc0Zpbml0ZShjKSkge1xuICAgICAgICAgICAgdmFyIG5yID0gdGhpcy5nZXROdW1iZXJBdChyb3csIGNvbHVtbik7XG4gICAgICAgICAgICBpZiAobnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgZnAgPSBuci52YWx1ZS5pbmRleE9mKFwiLlwiKSA+PSAwID8gbnIuc3RhcnQgKyBuci52YWx1ZS5pbmRleE9mKFwiLlwiKSArIDEgOiBuci5lbmQ7XG4gICAgICAgICAgICAgICAgdmFyIGRlY2ltYWxzID0gbnIuc3RhcnQgKyBuci52YWx1ZS5sZW5ndGggLSBmcDtcblxuICAgICAgICAgICAgICAgIHZhciB0ID0gcGFyc2VGbG9hdChuci52YWx1ZSk7XG4gICAgICAgICAgICAgICAgdCAqPSBNYXRoLnBvdygxMCwgZGVjaW1hbHMpO1xuXG5cbiAgICAgICAgICAgICAgICBpZihmcCAhPT0gbnIuZW5kICYmIGNvbHVtbiA8IGZwKXtcbiAgICAgICAgICAgICAgICAgICAgYW1vdW50ICo9IE1hdGgucG93KDEwLCBuci5lbmQgLSBjb2x1bW4gLSAxKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhbW91bnQgKj0gTWF0aC5wb3coMTAsIG5yLmVuZCAtIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdCArPSBhbW91bnQ7XG4gICAgICAgICAgICAgICAgdCAvPSBNYXRoLnBvdygxMCwgZGVjaW1hbHMpO1xuICAgICAgICAgICAgICAgIHZhciBubnIgPSB0LnRvRml4ZWQoZGVjaW1hbHMpO1xuICAgICAgICAgICAgICAgIHZhciByZXBsYWNlUmFuZ2UgPSBuZXcgUmFuZ2Uocm93LCBuci5zdGFydCwgcm93LCBuci5lbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZXBsYWNlKHJlcGxhY2VSYW5nZSwgbm5yKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhyb3csIE1hdGgubWF4KG5yLnN0YXJ0ICsxLCBjb2x1bW4gKyBubnIubGVuZ3RoIC0gbnIudmFsdWUubGVuZ3RoKSk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5yZW1vdmVMaW5lcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcm93cyA9IHRoaXMuJGdldFNlbGVjdGVkUm93cygpO1xuICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRnVsbExpbmVzKHJvd3MuZmlyc3QsIHJvd3MubGFzdCk7XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9O1xuXG4gICAgdGhpcy5kdXBsaWNhdGVTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHNlbCA9IHRoaXMuc2VsZWN0aW9uO1xuICAgICAgICB2YXIgZG9jID0gdGhpcy5zZXNzaW9uO1xuICAgICAgICB2YXIgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2UoKTtcbiAgICAgICAgdmFyIHJldmVyc2UgPSBzZWwuaXNCYWNrd2FyZHMoKTtcbiAgICAgICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgdmFyIHJvdyA9IHJhbmdlLnN0YXJ0LnJvdztcbiAgICAgICAgICAgIGRvYy5kdXBsaWNhdGVMaW5lcyhyb3csIHJvdyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcG9pbnQgPSByZXZlcnNlID8gcmFuZ2Uuc3RhcnQgOiByYW5nZS5lbmQ7XG4gICAgICAgICAgICB2YXIgZW5kUG9pbnQgPSBkb2MuaW5zZXJ0KHBvaW50LCBkb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKSwgZmFsc2UpO1xuICAgICAgICAgICAgcmFuZ2Uuc3RhcnQgPSBwb2ludDtcbiAgICAgICAgICAgIHJhbmdlLmVuZCA9IGVuZFBvaW50O1xuXG4gICAgICAgICAgICBzZWwuc2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2UsIHJldmVyc2UpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLm1vdmVMaW5lc0Rvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kbW92ZUxpbmVzKDEsIGZhbHNlKTtcbiAgICB9O1xuICAgIHRoaXMubW92ZUxpbmVzVXAgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kbW92ZUxpbmVzKC0xLCBmYWxzZSk7XG4gICAgfTtcbiAgICB0aGlzLm1vdmVUZXh0ID0gZnVuY3Rpb24ocmFuZ2UsIHRvUG9zaXRpb24sIGNvcHkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5tb3ZlVGV4dChyYW5nZSwgdG9Qb3NpdGlvbiwgY29weSk7XG4gICAgfTtcbiAgICB0aGlzLmNvcHlMaW5lc1VwID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuJG1vdmVMaW5lcygtMSwgdHJ1ZSk7XG4gICAgfTtcbiAgICB0aGlzLmNvcHlMaW5lc0Rvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kbW92ZUxpbmVzKDEsIHRydWUpO1xuICAgIH07XG4gICAgdGhpcy4kbW92ZUxpbmVzID0gZnVuY3Rpb24oZGlyLCBjb3B5KSB7XG4gICAgICAgIHZhciByb3dzLCBtb3ZlZDtcbiAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uO1xuICAgICAgICBpZiAoIXNlbGVjdGlvbi5pbk11bHRpU2VsZWN0TW9kZSB8fCB0aGlzLmluVmlydHVhbFNlbGVjdGlvbk1vZGUpIHtcbiAgICAgICAgICAgIHZhciByYW5nZSA9IHNlbGVjdGlvbi50b09yaWVudGVkUmFuZ2UoKTtcbiAgICAgICAgICAgIHJvd3MgPSB0aGlzLiRnZXRTZWxlY3RlZFJvd3MocmFuZ2UpO1xuICAgICAgICAgICAgbW92ZWQgPSB0aGlzLnNlc3Npb24uJG1vdmVMaW5lcyhyb3dzLmZpcnN0LCByb3dzLmxhc3QsIGNvcHkgPyAwIDogZGlyKTtcbiAgICAgICAgICAgIGlmIChjb3B5ICYmIGRpciA9PSAtMSkgbW92ZWQgPSAwO1xuICAgICAgICAgICAgcmFuZ2UubW92ZUJ5KG1vdmVkLCAwKTtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5mcm9tT3JpZW50ZWRSYW5nZShyYW5nZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmFuZ2VzID0gc2VsZWN0aW9uLnJhbmdlTGlzdC5yYW5nZXM7XG4gICAgICAgICAgICBzZWxlY3Rpb24ucmFuZ2VMaXN0LmRldGFjaCh0aGlzLnNlc3Npb24pO1xuICAgICAgICAgICAgdGhpcy5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGRpZmYgPSAwO1xuICAgICAgICAgICAgdmFyIHRvdGFsRGlmZiA9IDA7XG4gICAgICAgICAgICB2YXIgbCA9IHJhbmdlcy5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciByYW5nZUluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICByYW5nZXNbaV0ubW92ZUJ5KGRpZmYsIDApO1xuICAgICAgICAgICAgICAgIHJvd3MgPSB0aGlzLiRnZXRTZWxlY3RlZFJvd3MocmFuZ2VzW2ldKTtcbiAgICAgICAgICAgICAgICB2YXIgZmlyc3QgPSByb3dzLmZpcnN0O1xuICAgICAgICAgICAgICAgIHZhciBsYXN0ID0gcm93cy5sYXN0O1xuICAgICAgICAgICAgICAgIHdoaWxlICgrK2kgPCBsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b3RhbERpZmYpIHJhbmdlc1tpXS5tb3ZlQnkodG90YWxEaWZmLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN1YlJvd3MgPSB0aGlzLiRnZXRTZWxlY3RlZFJvd3MocmFuZ2VzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvcHkgJiYgc3ViUm93cy5maXJzdCAhPSBsYXN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFjb3B5ICYmIHN1YlJvd3MuZmlyc3QgPiBsYXN0ICsgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBsYXN0ID0gc3ViUm93cy5sYXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgZGlmZiA9IHRoaXMuc2Vzc2lvbi4kbW92ZUxpbmVzKGZpcnN0LCBsYXN0LCBjb3B5ID8gMCA6IGRpcik7XG4gICAgICAgICAgICAgICAgaWYgKGNvcHkgJiYgZGlyID09IC0xKSByYW5nZUluZGV4ID0gaSArIDE7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHJhbmdlSW5kZXggPD0gaSkge1xuICAgICAgICAgICAgICAgICAgICByYW5nZXNbcmFuZ2VJbmRleF0ubW92ZUJ5KGRpZmYsIDApO1xuICAgICAgICAgICAgICAgICAgICByYW5nZUluZGV4Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghY29weSkgZGlmZiA9IDA7XG4gICAgICAgICAgICAgICAgdG90YWxEaWZmICs9IGRpZmY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHNlbGVjdGlvbi5mcm9tT3JpZW50ZWRSYW5nZShzZWxlY3Rpb24ucmFuZ2VzWzBdKTtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5yYW5nZUxpc3QuYXR0YWNoKHRoaXMuc2Vzc2lvbik7XG4gICAgICAgICAgICB0aGlzLmluVmlydHVhbFNlbGVjdGlvbk1vZGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy4kZ2V0U2VsZWN0ZWRSb3dzID0gZnVuY3Rpb24ocmFuZ2UpIHtcbiAgICAgICAgcmFuZ2UgPSAocmFuZ2UgfHwgdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKS5jb2xsYXBzZVJvd3MoKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZmlyc3Q6IHRoaXMuc2Vzc2lvbi5nZXRSb3dGb2xkU3RhcnQocmFuZ2Uuc3RhcnQucm93KSxcbiAgICAgICAgICAgIGxhc3Q6IHRoaXMuc2Vzc2lvbi5nZXRSb3dGb2xkRW5kKHJhbmdlLmVuZC5yb3cpXG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHRoaXMub25Db21wb3NpdGlvblN0YXJ0ID0gZnVuY3Rpb24odGV4dCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNob3dDb21wb3NpdGlvbih0aGlzLmdldEN1cnNvclBvc2l0aW9uKCkpO1xuICAgIH07XG5cbiAgICB0aGlzLm9uQ29tcG9zaXRpb25VcGRhdGUgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0Q29tcG9zaXRpb25UZXh0KHRleHQpO1xuICAgIH07XG5cbiAgICB0aGlzLm9uQ29tcG9zaXRpb25FbmQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5oaWRlQ29tcG9zaXRpb24oKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmdldEZpcnN0VmlzaWJsZVJvdygpO1xuICAgIH07XG4gICAgdGhpcy5nZXRMYXN0VmlzaWJsZVJvdyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRMYXN0VmlzaWJsZVJvdygpO1xuICAgIH07XG4gICAgdGhpcy5pc1Jvd1Zpc2libGUgPSBmdW5jdGlvbihyb3cpIHtcbiAgICAgICAgcmV0dXJuIChyb3cgPj0gdGhpcy5nZXRGaXJzdFZpc2libGVSb3coKSAmJiByb3cgPD0gdGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpKTtcbiAgICB9O1xuICAgIHRoaXMuaXNSb3dGdWxseVZpc2libGUgPSBmdW5jdGlvbihyb3cpIHtcbiAgICAgICAgcmV0dXJuIChyb3cgPj0gdGhpcy5yZW5kZXJlci5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpICYmIHJvdyA8PSB0aGlzLnJlbmRlcmVyLmdldExhc3RGdWxseVZpc2libGVSb3coKSk7XG4gICAgfTtcbiAgICB0aGlzLiRnZXRWaXNpYmxlUm93Q291bnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0U2Nyb2xsQm90dG9tUm93KCkgLSB0aGlzLnJlbmRlcmVyLmdldFNjcm9sbFRvcFJvdygpICsgMTtcbiAgICB9O1xuXG4gICAgdGhpcy4kbW92ZUJ5UGFnZSA9IGZ1bmN0aW9uKGRpciwgc2VsZWN0KSB7XG4gICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgICAgIHZhciBjb25maWcgPSB0aGlzLnJlbmRlcmVyLmxheWVyQ29uZmlnO1xuICAgICAgICB2YXIgcm93cyA9IGRpciAqIE1hdGguZmxvb3IoY29uZmlnLmhlaWdodCAvIGNvbmZpZy5saW5lSGVpZ2h0KTtcblxuICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZysrO1xuICAgICAgICBpZiAoc2VsZWN0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi4kbW92ZVNlbGVjdGlvbihmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvckJ5KHJvd3MsIDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvckJ5KHJvd3MsIDApO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZy0tO1xuXG4gICAgICAgIHZhciBzY3JvbGxUb3AgPSByZW5kZXJlci5zY3JvbGxUb3A7XG5cbiAgICAgICAgcmVuZGVyZXIuc2Nyb2xsQnkoMCwgcm93cyAqIGNvbmZpZy5saW5lSGVpZ2h0KTtcbiAgICAgICAgaWYgKHNlbGVjdCAhPSBudWxsKVxuICAgICAgICAgICAgcmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcobnVsbCwgMC41KTtcblxuICAgICAgICByZW5kZXJlci5hbmltYXRlU2Nyb2xsaW5nKHNjcm9sbFRvcCk7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdFBhZ2VEb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuJG1vdmVCeVBhZ2UoMSwgdHJ1ZSk7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdFBhZ2VVcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRtb3ZlQnlQYWdlKC0xLCB0cnVlKTtcbiAgICB9O1xuICAgIHRoaXMuZ290b1BhZ2VEb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICAgdGhpcy4kbW92ZUJ5UGFnZSgxLCBmYWxzZSk7XG4gICAgfTtcbiAgICB0aGlzLmdvdG9QYWdlVXAgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kbW92ZUJ5UGFnZSgtMSwgZmFsc2UpO1xuICAgIH07XG4gICAgdGhpcy5zY3JvbGxQYWdlRG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRtb3ZlQnlQYWdlKDEpO1xuICAgIH07XG4gICAgdGhpcy5zY3JvbGxQYWdlVXAgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kbW92ZUJ5UGFnZSgtMSk7XG4gICAgfTtcbiAgICB0aGlzLnNjcm9sbFRvUm93ID0gZnVuY3Rpb24ocm93KSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2Nyb2xsVG9Sb3cocm93KTtcbiAgICB9O1xuICAgIHRoaXMuc2Nyb2xsVG9MaW5lID0gZnVuY3Rpb24obGluZSwgY2VudGVyLCBhbmltYXRlLCBjYWxsYmFjaykge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcm9sbFRvTGluZShsaW5lLCBjZW50ZXIsIGFuaW1hdGUsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIHRoaXMuY2VudGVyU2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgdmFyIHBvcyA9IHtcbiAgICAgICAgICAgIHJvdzogTWF0aC5mbG9vcihyYW5nZS5zdGFydC5yb3cgKyAocmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdykgLyAyKSxcbiAgICAgICAgICAgIGNvbHVtbjogTWF0aC5mbG9vcihyYW5nZS5zdGFydC5jb2x1bW4gKyAocmFuZ2UuZW5kLmNvbHVtbiAtIHJhbmdlLnN0YXJ0LmNvbHVtbikgLyAyKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFsaWduQ3Vyc29yKHBvcywgMC41KTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLmdldEN1cnNvcigpO1xuICAgIH07XG4gICAgdGhpcy5nZXRDdXJzb3JQb3NpdGlvblNjcmVlbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLmdldEN1cnNvclBvc2l0aW9uKCkpO1xuICAgIH07XG4gICAgdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTtcbiAgICB9O1xuICAgIHRoaXMuc2VsZWN0QWxsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nICs9IDE7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdEFsbCgpO1xuICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZyAtPSAxO1xuICAgIH07XG4gICAgdGhpcy5jbGVhclNlbGVjdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpO1xuICAgIH07XG4gICAgdGhpcy5tb3ZlQ3Vyc29yVG8gPSBmdW5jdGlvbihyb3csIGNvbHVtbikge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG8ocm93LCBjb2x1bW4pO1xuICAgIH07XG4gICAgdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbiA9IGZ1bmN0aW9uKHBvcykge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihwb3MpO1xuICAgIH07XG4gICAgdGhpcy5qdW1wVG9NYXRjaGluZyA9IGZ1bmN0aW9uKHNlbGVjdCwgZXhwYW5kKSB7XG4gICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKCk7XG4gICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHRoaXMuc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7XG4gICAgICAgIHZhciBwcmV2VG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgdmFyIHRva2VuID0gcHJldlRva2VuIHx8IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7XG5cbiAgICAgICAgaWYgKCF0b2tlbikgcmV0dXJuO1xuICAgICAgICB2YXIgbWF0Y2hUeXBlO1xuICAgICAgICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGRlcHRoID0ge307XG4gICAgICAgIHZhciBpID0gY3Vyc29yLmNvbHVtbiAtIHRva2VuLnN0YXJ0O1xuICAgICAgICB2YXIgYnJhY2tldFR5cGU7XG4gICAgICAgIHZhciBicmFja2V0cyA9IHtcbiAgICAgICAgICAgIFwiKVwiOiBcIihcIixcbiAgICAgICAgICAgIFwiKFwiOiBcIihcIixcbiAgICAgICAgICAgIFwiXVwiOiBcIltcIixcbiAgICAgICAgICAgIFwiW1wiOiBcIltcIixcbiAgICAgICAgICAgIFwie1wiOiBcIntcIixcbiAgICAgICAgICAgIFwifVwiOiBcIntcIlxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlLm1hdGNoKC9be30oKVxcW1xcXV0vZykpIHtcbiAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IHRva2VuLnZhbHVlLmxlbmd0aCAmJiAhZm91bmQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWJyYWNrZXRzW3Rva2VuLnZhbHVlW2ldXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBicmFja2V0VHlwZSA9IGJyYWNrZXRzW3Rva2VuLnZhbHVlW2ldXSArICcuJyArIHRva2VuLnR5cGUucmVwbGFjZShcInJwYXJlblwiLCBcImxwYXJlblwiKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oZGVwdGhbYnJhY2tldFR5cGVdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGhbYnJhY2tldFR5cGVdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodG9rZW4udmFsdWVbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJygnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnWyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd7JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aFticmFja2V0VHlwZV0rKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJyknOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnXSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd9JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aFticmFja2V0VHlwZV0tLTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXB0aFticmFja2V0VHlwZV0gPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoVHlwZSA9ICdicmFja2V0JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4gJiYgdG9rZW4udHlwZS5pbmRleE9mKCd0YWctbmFtZScpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChpc05hTihkZXB0aFt0b2tlbi52YWx1ZV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlcHRoW3Rva2VuLnZhbHVlXSA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09ICc8Jykge1xuICAgICAgICAgICAgICAgICAgICBkZXB0aFt0b2tlbi52YWx1ZV0rKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocHJldlRva2VuLnZhbHVlID09PSAnPC8nKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlcHRoW3Rva2VuLnZhbHVlXS0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAoZGVwdGhbdG9rZW4udmFsdWVdID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBtYXRjaFR5cGUgPSAndGFnJztcbiAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgICAgICAgIHByZXZUb2tlbiA9IHRva2VuO1xuICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTtcbiAgICAgICAgICAgICAgICBpID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAodG9rZW4gJiYgIWZvdW5kKTtcbiAgICAgICAgaWYgKCFtYXRjaFR5cGUpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdmFyIHJhbmdlLCBwb3M7XG4gICAgICAgIGlmIChtYXRjaFR5cGUgPT09ICdicmFja2V0Jykge1xuICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLnNlc3Npb24uZ2V0QnJhY2tldFJhbmdlKGN1cnNvcik7XG4gICAgICAgICAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgICAgICAgICAgcmFuZ2UgPSBuZXcgUmFuZ2UoXG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpLFxuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIGkgLSAxLFxuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSxcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyBpIC0gMVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcG9zID0gcmFuZ2Uuc3RhcnQ7XG4gICAgICAgICAgICAgICAgaWYgKGV4cGFuZCB8fCBwb3Mucm93ID09PSBjdXJzb3Iucm93ICYmIE1hdGguYWJzKHBvcy5jb2x1bW4gLSBjdXJzb3IuY29sdW1uKSA8IDIpXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5zZXNzaW9uLmdldEJyYWNrZXRSYW5nZShwb3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1hdGNoVHlwZSA9PT0gJ3RhZycpIHtcbiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoJ3RhZy1uYW1lJykgIT09IC0xKSBcbiAgICAgICAgICAgICAgICB2YXIgdGFnID0gdG9rZW4udmFsdWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICByYW5nZSA9IG5ldyBSYW5nZShcbiAgICAgICAgICAgICAgICBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSxcbiAgICAgICAgICAgICAgICBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSAtIDIsXG4gICAgICAgICAgICAgICAgaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCksXG4gICAgICAgICAgICAgICAgaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgLSAyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHJhbmdlLmNvbXBhcmUoY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbikgPT09IDApIHtcbiAgICAgICAgICAgICAgICBmb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBwcmV2VG9rZW47XG4gICAgICAgICAgICAgICAgICAgIHByZXZUb2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZUb2tlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZUb2tlbi50eXBlLmluZGV4T2YoJ3RhZy1jbG9zZScpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlLnNldEVuZChpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSwgaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSB0YWcgJiYgdG9rZW4udHlwZS5pbmRleE9mKCd0YWctbmFtZScpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09ICc8Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aFt0YWddKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gJzwvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aFt0YWddLS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXB0aFt0YWddID09PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IHdoaWxlIChwcmV2VG9rZW4gJiYgIWZvdW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoJ3RhZy1uYW1lJykpIHtcbiAgICAgICAgICAgICAgICBwb3MgPSByYW5nZS5zdGFydDtcbiAgICAgICAgICAgICAgICBpZiAocG9zLnJvdyA9PSBjdXJzb3Iucm93ICYmIE1hdGguYWJzKHBvcy5jb2x1bW4gLSBjdXJzb3IuY29sdW1uKSA8IDIpXG4gICAgICAgICAgICAgICAgICAgIHBvcyA9IHJhbmdlLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHBvcyA9IHJhbmdlICYmIHJhbmdlLmN1cnNvciB8fCBwb3M7XG4gICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgIGlmIChzZWxlY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2UgJiYgZXhwYW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFJhbmdlKHJhbmdlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJhbmdlICYmIHJhbmdlLmlzRXF1YWwodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0VG8ocG9zLnJvdywgcG9zLmNvbHVtbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlVG8ocG9zLnJvdywgcG9zLmNvbHVtbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ290b0xpbmUgPSBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW4sIGFuaW1hdGUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnVuZm9sZCh7cm93OiBsaW5lTnVtYmVyIC0gMSwgY29sdW1uOiBjb2x1bW4gfHwgMH0pO1xuXG4gICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nICs9IDE7XG4gICAgICAgIHRoaXMuZXhpdE11bHRpU2VsZWN0TW9kZSAmJiB0aGlzLmV4aXRNdWx0aVNlbGVjdE1vZGUoKTtcbiAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8obGluZU51bWJlciAtIDEsIGNvbHVtbiB8fCAwKTtcbiAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcgLT0gMTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNSb3dGdWxseVZpc2libGUobGluZU51bWJlciAtIDEpKVxuICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0xpbmUobGluZU51bWJlciAtIDEsIHRydWUsIGFuaW1hdGUpO1xuICAgIH07XG4gICAgdGhpcy5uYXZpZ2F0ZVRvID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZVRvKHJvdywgY29sdW1uKTtcbiAgICB9O1xuICAgIHRoaXMubmF2aWdhdGVVcCA9IGZ1bmN0aW9uKHRpbWVzKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc011bHRpTGluZSgpICYmICF0aGlzLnNlbGVjdGlvbi5pc0JhY2t3YXJkcygpKSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uU3RhcnQgPSB0aGlzLnNlbGVjdGlvbi5hbmNob3IuZ2V0UG9zaXRpb24oKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHNlbGVjdGlvblN0YXJ0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yQnkoLXRpbWVzIHx8IC0xLCAwKTtcbiAgICB9O1xuICAgIHRoaXMubmF2aWdhdGVEb3duID0gZnVuY3Rpb24odGltZXMpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzTXVsdGlMaW5lKCkgJiYgdGhpcy5zZWxlY3Rpb24uaXNCYWNrd2FyZHMoKSkge1xuICAgICAgICAgICAgdmFyIHNlbGVjdGlvbkVuZCA9IHRoaXMuc2VsZWN0aW9uLmFuY2hvci5nZXRQb3NpdGlvbigpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb24oc2VsZWN0aW9uRW5kKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yQnkodGltZXMgfHwgMSwgMCk7XG4gICAgfTtcbiAgICB0aGlzLm5hdmlnYXRlTGVmdCA9IGZ1bmN0aW9uKHRpbWVzKSB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uU3RhcnQgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7XG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHNlbGVjdGlvblN0YXJ0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRpbWVzID0gdGltZXMgfHwgMTtcbiAgICAgICAgICAgIHdoaWxlICh0aW1lcy0tKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvckxlZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfTtcbiAgICB0aGlzLm5hdmlnYXRlUmlnaHQgPSBmdW5jdGlvbih0aW1lcykge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgdmFyIHNlbGVjdGlvbkVuZCA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKS5lbmQ7XG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHNlbGVjdGlvbkVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aW1lcyA9IHRpbWVzIHx8IDE7XG4gICAgICAgICAgICB3aGlsZSAodGltZXMtLSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JSaWdodCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9O1xuICAgIHRoaXMubmF2aWdhdGVMaW5lU3RhcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvckxpbmVTdGFydCgpO1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfTtcbiAgICB0aGlzLm5hdmlnYXRlTGluZUVuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yTGluZUVuZCgpO1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfTtcbiAgICB0aGlzLm5hdmlnYXRlRmlsZUVuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yRmlsZUVuZCgpO1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfTtcbiAgICB0aGlzLm5hdmlnYXRlRmlsZVN0YXJ0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JGaWxlU3RhcnQoKTtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIH07XG4gICAgdGhpcy5uYXZpZ2F0ZVdvcmRSaWdodCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yV29yZFJpZ2h0KCk7XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9O1xuICAgIHRoaXMubmF2aWdhdGVXb3JkTGVmdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yV29yZExlZnQoKTtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIH07XG4gICAgdGhpcy5yZXBsYWNlID0gZnVuY3Rpb24ocmVwbGFjZW1lbnQsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMpXG4gICAgICAgICAgICB0aGlzLiRzZWFyY2guc2V0KG9wdGlvbnMpO1xuXG4gICAgICAgIHZhciByYW5nZSA9IHRoaXMuJHNlYXJjaC5maW5kKHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIHZhciByZXBsYWNlZCA9IDA7XG4gICAgICAgIGlmICghcmFuZ2UpXG4gICAgICAgICAgICByZXR1cm4gcmVwbGFjZWQ7XG5cbiAgICAgICAgaWYgKHRoaXMuJHRyeVJlcGxhY2UocmFuZ2UsIHJlcGxhY2VtZW50KSkge1xuICAgICAgICAgICAgcmVwbGFjZWQgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyYW5nZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2UpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxTZWxlY3Rpb25JbnRvVmlldyhyYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXBsYWNlZDtcbiAgICB9O1xuICAgIHRoaXMucmVwbGFjZUFsbCA9IGZ1bmN0aW9uKHJlcGxhY2VtZW50LCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLiRzZWFyY2guc2V0KG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuJHNlYXJjaC5maW5kQWxsKHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIHZhciByZXBsYWNlZCA9IDA7XG4gICAgICAgIGlmICghcmFuZ2VzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiByZXBsYWNlZDtcblxuICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZyArPSAxO1xuXG4gICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVUbygwLCAwKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gcmFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICBpZih0aGlzLiR0cnlSZXBsYWNlKHJhbmdlc1tpXSwgcmVwbGFjZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmVwbGFjZWQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvbik7XG4gICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nIC09IDE7XG5cbiAgICAgICAgcmV0dXJuIHJlcGxhY2VkO1xuICAgIH07XG5cbiAgICB0aGlzLiR0cnlSZXBsYWNlID0gZnVuY3Rpb24ocmFuZ2UsIHJlcGxhY2VtZW50KSB7XG4gICAgICAgIHZhciBpbnB1dCA9IHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UocmFuZ2UpO1xuICAgICAgICByZXBsYWNlbWVudCA9IHRoaXMuJHNlYXJjaC5yZXBsYWNlKGlucHV0LCByZXBsYWNlbWVudCk7XG4gICAgICAgIGlmIChyZXBsYWNlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmFuZ2UuZW5kID0gdGhpcy5zZXNzaW9uLnJlcGxhY2UocmFuZ2UsIHJlcGxhY2VtZW50KTtcbiAgICAgICAgICAgIHJldHVybiByYW5nZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmdldExhc3RTZWFyY2hPcHRpb25zID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRzZWFyY2guZ2V0T3B0aW9ucygpO1xuICAgIH07XG4gICAgdGhpcy5maW5kID0gZnVuY3Rpb24obmVlZGxlLCBvcHRpb25zLCBhbmltYXRlKSB7XG4gICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcblxuICAgICAgICBpZiAodHlwZW9mIG5lZWRsZSA9PSBcInN0cmluZ1wiIHx8IG5lZWRsZSBpbnN0YW5jZW9mIFJlZ0V4cClcbiAgICAgICAgICAgIG9wdGlvbnMubmVlZGxlID0gbmVlZGxlO1xuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbmVlZGxlID09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICBvb3AubWl4aW4ob3B0aW9ucywgbmVlZGxlKTtcblxuICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi5nZXRSYW5nZSgpO1xuICAgICAgICBpZiAob3B0aW9ucy5uZWVkbGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgbmVlZGxlID0gdGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZSlcbiAgICAgICAgICAgICAgICB8fCB0aGlzLiRzZWFyY2guJG9wdGlvbnMubmVlZGxlO1xuICAgICAgICAgICAgaWYgKCFuZWVkbGUpIHtcbiAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuc2Vzc2lvbi5nZXRXb3JkUmFuZ2UocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5zdGFydC5jb2x1bW4pO1xuICAgICAgICAgICAgICAgIG5lZWRsZSA9IHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UocmFuZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4kc2VhcmNoLnNldCh7bmVlZGxlOiBuZWVkbGV9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuJHNlYXJjaC5zZXQob3B0aW9ucyk7XG4gICAgICAgIGlmICghb3B0aW9ucy5zdGFydClcbiAgICAgICAgICAgIHRoaXMuJHNlYXJjaC5zZXQoe3N0YXJ0OiByYW5nZX0pO1xuXG4gICAgICAgIHZhciBuZXdSYW5nZSA9IHRoaXMuJHNlYXJjaC5maW5kKHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIGlmIChvcHRpb25zLnByZXZlbnRTY3JvbGwpXG4gICAgICAgICAgICByZXR1cm4gbmV3UmFuZ2U7XG4gICAgICAgIGlmIChuZXdSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5yZXZlYWxSYW5nZShuZXdSYW5nZSwgYW5pbWF0ZSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3UmFuZ2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuYmFja3dhcmRzKVxuICAgICAgICAgICAgcmFuZ2Uuc3RhcnQgPSByYW5nZS5lbmQ7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJhbmdlLmVuZCA9IHJhbmdlLnN0YXJ0O1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRSYW5nZShyYW5nZSk7XG4gICAgfTtcbiAgICB0aGlzLmZpbmROZXh0ID0gZnVuY3Rpb24ob3B0aW9ucywgYW5pbWF0ZSkge1xuICAgICAgICB0aGlzLmZpbmQoe3NraXBDdXJyZW50OiB0cnVlLCBiYWNrd2FyZHM6IGZhbHNlfSwgb3B0aW9ucywgYW5pbWF0ZSk7XG4gICAgfTtcbiAgICB0aGlzLmZpbmRQcmV2aW91cyA9IGZ1bmN0aW9uKG9wdGlvbnMsIGFuaW1hdGUpIHtcbiAgICAgICAgdGhpcy5maW5kKG9wdGlvbnMsIHtza2lwQ3VycmVudDogdHJ1ZSwgYmFja3dhcmRzOiB0cnVlfSwgYW5pbWF0ZSk7XG4gICAgfTtcblxuICAgIHRoaXMucmV2ZWFsUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSwgYW5pbWF0ZSkge1xuICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZyArPSAxO1xuICAgICAgICB0aGlzLnNlc3Npb24udW5mb2xkKHJhbmdlKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2UpO1xuICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZyAtPSAxO1xuXG4gICAgICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLnJlbmRlcmVyLnNjcm9sbFRvcDtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxTZWxlY3Rpb25JbnRvVmlldyhyYW5nZS5zdGFydCwgcmFuZ2UuZW5kLCAwLjUpO1xuICAgICAgICBpZiAoYW5pbWF0ZSAhPT0gZmFsc2UpXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFuaW1hdGVTY3JvbGxpbmcoc2Nyb2xsVG9wKTtcbiAgICB9O1xuICAgIHRoaXMudW5kbyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZysrO1xuICAgICAgICB0aGlzLnNlc3Npb24uZ2V0VW5kb01hbmFnZXIoKS51bmRvKCk7XG4gICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nLS07XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcobnVsbCwgMC41KTtcbiAgICB9O1xuICAgIHRoaXMucmVkbyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZysrO1xuICAgICAgICB0aGlzLnNlc3Npb24uZ2V0VW5kb01hbmFnZXIoKS5yZWRvKCk7XG4gICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nLS07XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcobnVsbCwgMC41KTtcbiAgICB9O1xuICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5fc2lnbmFsKFwiZGVzdHJveVwiLCB0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbikge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5zZXRBdXRvU2Nyb2xsRWRpdG9ySW50b1ZpZXcgPSBmdW5jdGlvbihlbmFibGUpIHtcbiAgICAgICAgaWYgKCFlbmFibGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciByZWN0O1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHZhciBzaG91bGRTY3JvbGwgPSBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLiRzY3JvbGxBbmNob3IpXG4gICAgICAgICAgICB0aGlzLiRzY3JvbGxBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB2YXIgc2Nyb2xsQW5jaG9yID0gdGhpcy4kc2Nyb2xsQW5jaG9yO1xuICAgICAgICBzY3JvbGxBbmNob3Iuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGVcIjtcbiAgICAgICAgdGhpcy5jb250YWluZXIuaW5zZXJ0QmVmb3JlKHNjcm9sbEFuY2hvciwgdGhpcy5jb250YWluZXIuZmlyc3RDaGlsZCk7XG4gICAgICAgIHZhciBvbkNoYW5nZVNlbGVjdGlvbiA9IHRoaXMub24oXCJjaGFuZ2VTZWxlY3Rpb25cIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBzaG91bGRTY3JvbGwgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIG9uQmVmb3JlUmVuZGVyID0gdGhpcy5yZW5kZXJlci5vbihcImJlZm9yZVJlbmRlclwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChzaG91bGRTY3JvbGwpXG4gICAgICAgICAgICAgICAgcmVjdCA9IHNlbGYucmVuZGVyZXIuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIG9uQWZ0ZXJSZW5kZXIgPSB0aGlzLnJlbmRlcmVyLm9uKFwiYWZ0ZXJSZW5kZXJcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsICYmIHJlY3QgJiYgKHNlbGYuaXNGb2N1c2VkKClcbiAgICAgICAgICAgICAgICB8fCBzZWxmLnNlYXJjaEJveCAmJiBzZWxmLnNlYXJjaEJveC5pc0ZvY3VzZWQoKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciByZW5kZXJlciA9IHNlbGYucmVuZGVyZXI7XG4gICAgICAgICAgICAgICAgdmFyIHBvcyA9IHJlbmRlcmVyLiRjdXJzb3JMYXllci4kcGl4ZWxQb3M7XG4gICAgICAgICAgICAgICAgdmFyIGNvbmZpZyA9IHJlbmRlcmVyLmxheWVyQ29uZmlnO1xuICAgICAgICAgICAgICAgIHZhciB0b3AgPSBwb3MudG9wIC0gY29uZmlnLm9mZnNldDtcbiAgICAgICAgICAgICAgICBpZiAocG9zLnRvcCA+PSAwICYmIHRvcCArIHJlY3QudG9wIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBzaG91bGRTY3JvbGwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zLnRvcCA8IGNvbmZpZy5oZWlnaHQgJiZcbiAgICAgICAgICAgICAgICAgICAgcG9zLnRvcCArIHJlY3QudG9wICsgY29uZmlnLmxpbmVIZWlnaHQgPiB3aW5kb3cuaW5uZXJIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2Nyb2xsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2Nyb2xsID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZFNjcm9sbCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbEFuY2hvci5zdHlsZS50b3AgPSB0b3AgKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbEFuY2hvci5zdHlsZS5sZWZ0ID0gcG9zLmxlZnQgKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbEFuY2hvci5zdHlsZS5oZWlnaHQgPSBjb25maWcubGluZUhlaWdodCArIFwicHhcIjtcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsQW5jaG9yLnNjcm9sbEludG9WaWV3KHNob3VsZFNjcm9sbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNob3VsZFNjcm9sbCA9IHJlY3QgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZXRBdXRvU2Nyb2xsRWRpdG9ySW50b1ZpZXcgPSBmdW5jdGlvbihlbmFibGUpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2V0QXV0b1Njcm9sbEVkaXRvckludG9WaWV3O1xuICAgICAgICAgICAgdGhpcy5vZmYoXCJjaGFuZ2VTZWxlY3Rpb25cIiwgb25DaGFuZ2VTZWxlY3Rpb24pO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5vZmYoXCJhZnRlclJlbmRlclwiLCBvbkFmdGVyUmVuZGVyKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIub2ZmKFwiYmVmb3JlUmVuZGVyXCIsIG9uQmVmb3JlUmVuZGVyKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG5cbiAgICB0aGlzLiRyZXNldEN1cnNvclN0eWxlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBzdHlsZSA9IHRoaXMuJGN1cnNvclN0eWxlIHx8IFwiYWNlXCI7XG4gICAgICAgIHZhciBjdXJzb3JMYXllciA9IHRoaXMucmVuZGVyZXIuJGN1cnNvckxheWVyO1xuICAgICAgICBpZiAoIWN1cnNvckxheWVyKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjdXJzb3JMYXllci5zZXRTbW9vdGhCbGlua2luZygvc21vb3RoLy50ZXN0KHN0eWxlKSk7XG4gICAgICAgIGN1cnNvckxheWVyLmlzQmxpbmtpbmcgPSAhdGhpcy4kcmVhZE9ubHkgJiYgc3R5bGUgIT0gXCJ3aWRlXCI7XG4gICAgICAgIGRvbS5zZXRDc3NDbGFzcyhjdXJzb3JMYXllci5lbGVtZW50LCBcImFjZV9zbGltLWN1cnNvcnNcIiwgL3NsaW0vLnRlc3Qoc3R5bGUpKTtcbiAgICB9O1xuXG59KS5jYWxsKEVkaXRvci5wcm90b3R5cGUpO1xuXG5cblxuY29uZmlnLmRlZmluZU9wdGlvbnMoRWRpdG9yLnByb3RvdHlwZSwgXCJlZGl0b3JcIiwge1xuICAgIHNlbGVjdGlvblN0eWxlOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24oc3R5bGUpIHtcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICAgICAgICAgIHRoaXMuX3NpZ25hbChcImNoYW5nZVNlbGVjdGlvblN0eWxlXCIsIHtkYXRhOiBzdHlsZX0pO1xuICAgICAgICB9LFxuICAgICAgICBpbml0aWFsVmFsdWU6IFwibGluZVwiXG4gICAgfSxcbiAgICBoaWdobGlnaHRBY3RpdmVMaW5lOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24oKSB7dGhpcy4kdXBkYXRlSGlnaGxpZ2h0QWN0aXZlTGluZSgpO30sXG4gICAgICAgIGluaXRpYWxWYWx1ZTogdHJ1ZVxuICAgIH0sXG4gICAgaGlnaGxpZ2h0U2VsZWN0ZWRXb3JkOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24oc2hvdWxkSGlnaGxpZ2h0KSB7dGhpcy4kb25TZWxlY3Rpb25DaGFuZ2UoKTt9LFxuICAgICAgICBpbml0aWFsVmFsdWU6IHRydWVcbiAgICB9LFxuICAgIHJlYWRPbmx5OiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24ocmVhZE9ubHkpIHtcbiAgICAgICAgICAgIHRoaXMuJHJlc2V0Q3Vyc29yU3R5bGUoKTsgXG4gICAgICAgIH0sXG4gICAgICAgIGluaXRpYWxWYWx1ZTogZmFsc2VcbiAgICB9LFxuICAgIGN1cnNvclN0eWxlOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7IHRoaXMuJHJlc2V0Q3Vyc29yU3R5bGUoKTsgfSxcbiAgICAgICAgdmFsdWVzOiBbXCJhY2VcIiwgXCJzbGltXCIsIFwic21vb3RoXCIsIFwid2lkZVwiXSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiBcImFjZVwiXG4gICAgfSxcbiAgICBtZXJnZVVuZG9EZWx0YXM6IHtcbiAgICAgICAgdmFsdWVzOiBbZmFsc2UsIHRydWUsIFwiYWx3YXlzXCJdLFxuICAgICAgICBpbml0aWFsVmFsdWU6IHRydWVcbiAgICB9LFxuICAgIGJlaGF2aW91cnNFbmFibGVkOiB7aW5pdGlhbFZhbHVlOiB0cnVlfSxcbiAgICB3cmFwQmVoYXZpb3Vyc0VuYWJsZWQ6IHtpbml0aWFsVmFsdWU6IHRydWV9LFxuICAgIGF1dG9TY3JvbGxFZGl0b3JJbnRvVmlldzoge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbCkge3RoaXMuc2V0QXV0b1Njcm9sbEVkaXRvckludG9WaWV3KHZhbCk7fVxuICAgIH0sXG4gICAga2V5Ym9hcmRIYW5kbGVyOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7IHRoaXMuc2V0S2V5Ym9hcmRIYW5kbGVyKHZhbCk7IH0sXG4gICAgICAgIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmtleWJpbmRpbmdJZDsgfSxcbiAgICAgICAgaGFuZGxlc1NldDogdHJ1ZVxuICAgIH0sXG5cbiAgICBoU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZTogXCJyZW5kZXJlclwiLFxuICAgIHZTY3JvbGxCYXJBbHdheXNWaXNpYmxlOiBcInJlbmRlcmVyXCIsXG4gICAgaGlnaGxpZ2h0R3V0dGVyTGluZTogXCJyZW5kZXJlclwiLFxuICAgIGFuaW1hdGVkU2Nyb2xsOiBcInJlbmRlcmVyXCIsXG4gICAgc2hvd0ludmlzaWJsZXM6IFwicmVuZGVyZXJcIixcbiAgICBzaG93UHJpbnRNYXJnaW46IFwicmVuZGVyZXJcIixcbiAgICBwcmludE1hcmdpbkNvbHVtbjogXCJyZW5kZXJlclwiLFxuICAgIHByaW50TWFyZ2luOiBcInJlbmRlcmVyXCIsXG4gICAgZmFkZUZvbGRXaWRnZXRzOiBcInJlbmRlcmVyXCIsXG4gICAgc2hvd0ZvbGRXaWRnZXRzOiBcInJlbmRlcmVyXCIsXG4gICAgc2hvd0xpbmVOdW1iZXJzOiBcInJlbmRlcmVyXCIsXG4gICAgc2hvd0d1dHRlcjogXCJyZW5kZXJlclwiLFxuICAgIGRpc3BsYXlJbmRlbnRHdWlkZXM6IFwicmVuZGVyZXJcIixcbiAgICBmb250U2l6ZTogXCJyZW5kZXJlclwiLFxuICAgIGZvbnRGYW1pbHk6IFwicmVuZGVyZXJcIixcbiAgICBtYXhMaW5lczogXCJyZW5kZXJlclwiLFxuICAgIG1pbkxpbmVzOiBcInJlbmRlcmVyXCIsXG4gICAgc2Nyb2xsUGFzdEVuZDogXCJyZW5kZXJlclwiLFxuICAgIGZpeGVkV2lkdGhHdXR0ZXI6IFwicmVuZGVyZXJcIixcbiAgICB0aGVtZTogXCJyZW5kZXJlclwiLFxuXG4gICAgc2Nyb2xsU3BlZWQ6IFwiJG1vdXNlSGFuZGxlclwiLFxuICAgIGRyYWdEZWxheTogXCIkbW91c2VIYW5kbGVyXCIsXG4gICAgZHJhZ0VuYWJsZWQ6IFwiJG1vdXNlSGFuZGxlclwiLFxuICAgIGZvY3VzVGltb3V0OiBcIiRtb3VzZUhhbmRsZXJcIixcbiAgICB0b29sdGlwRm9sbG93c01vdXNlOiBcIiRtb3VzZUhhbmRsZXJcIixcblxuICAgIGZpcnN0TGluZU51bWJlcjogXCJzZXNzaW9uXCIsXG4gICAgb3ZlcndyaXRlOiBcInNlc3Npb25cIixcbiAgICBuZXdMaW5lTW9kZTogXCJzZXNzaW9uXCIsXG4gICAgdXNlV29ya2VyOiBcInNlc3Npb25cIixcbiAgICB1c2VTb2Z0VGFiczogXCJzZXNzaW9uXCIsXG4gICAgdGFiU2l6ZTogXCJzZXNzaW9uXCIsXG4gICAgd3JhcDogXCJzZXNzaW9uXCIsXG4gICAgaW5kZW50ZWRTb2Z0V3JhcDogXCJzZXNzaW9uXCIsXG4gICAgZm9sZFN0eWxlOiBcInNlc3Npb25cIixcbiAgICBtb2RlOiBcInNlc3Npb25cIlxufSk7XG5cbmV4cG9ydHMuRWRpdG9yID0gRWRpdG9yO1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvdW5kb21hbmFnZXJcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xudmFyIFVuZG9NYW5hZ2VyID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZXNldCgpO1xufTtcblxuKGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuZXhlY3V0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGRlbHRhU2V0cyA9IG9wdGlvbnMuYXJnc1swXTtcbiAgICAgICAgdGhpcy4kZG9jICA9IG9wdGlvbnMuYXJnc1sxXTtcbiAgICAgICAgaWYgKG9wdGlvbnMubWVyZ2UgJiYgdGhpcy5oYXNVbmRvKCkpe1xuICAgICAgICAgICAgdGhpcy5kaXJ0eUNvdW50ZXItLTtcbiAgICAgICAgICAgIGRlbHRhU2V0cyA9IHRoaXMuJHVuZG9TdGFjay5wb3AoKS5jb25jYXQoZGVsdGFTZXRzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiR1bmRvU3RhY2sucHVzaChkZWx0YVNldHMpO1xuICAgICAgICB0aGlzLiRyZWRvU3RhY2sgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuZGlydHlDb3VudGVyIDwgMCkge1xuICAgICAgICAgICAgdGhpcy5kaXJ0eUNvdW50ZXIgPSBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXJ0eUNvdW50ZXIrKztcbiAgICB9O1xuICAgIHRoaXMudW5kbyA9IGZ1bmN0aW9uKGRvbnRTZWxlY3QpIHtcbiAgICAgICAgdmFyIGRlbHRhU2V0cyA9IHRoaXMuJHVuZG9TdGFjay5wb3AoKTtcbiAgICAgICAgdmFyIHVuZG9TZWxlY3Rpb25SYW5nZSA9IG51bGw7XG4gICAgICAgIGlmIChkZWx0YVNldHMpIHtcbiAgICAgICAgICAgIHVuZG9TZWxlY3Rpb25SYW5nZSA9IHRoaXMuJGRvYy51bmRvQ2hhbmdlcyhkZWx0YVNldHMsIGRvbnRTZWxlY3QpO1xuICAgICAgICAgICAgdGhpcy4kcmVkb1N0YWNrLnB1c2goZGVsdGFTZXRzKTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlDb3VudGVyLS07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kb1NlbGVjdGlvblJhbmdlO1xuICAgIH07XG4gICAgdGhpcy5yZWRvID0gZnVuY3Rpb24oZG9udFNlbGVjdCkge1xuICAgICAgICB2YXIgZGVsdGFTZXRzID0gdGhpcy4kcmVkb1N0YWNrLnBvcCgpO1xuICAgICAgICB2YXIgcmVkb1NlbGVjdGlvblJhbmdlID0gbnVsbDtcbiAgICAgICAgaWYgKGRlbHRhU2V0cykge1xuICAgICAgICAgICAgcmVkb1NlbGVjdGlvblJhbmdlID1cbiAgICAgICAgICAgICAgICB0aGlzLiRkb2MucmVkb0NoYW5nZXModGhpcy4kZGVzZXJpYWxpemVEZWx0YXMoZGVsdGFTZXRzKSwgZG9udFNlbGVjdCk7XG4gICAgICAgICAgICB0aGlzLiR1bmRvU3RhY2sucHVzaChkZWx0YVNldHMpO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eUNvdW50ZXIrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVkb1NlbGVjdGlvblJhbmdlO1xuICAgIH07XG4gICAgdGhpcy5yZXNldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiR1bmRvU3RhY2sgPSBbXTtcbiAgICAgICAgdGhpcy4kcmVkb1N0YWNrID0gW107XG4gICAgICAgIHRoaXMuZGlydHlDb3VudGVyID0gMDtcbiAgICB9O1xuICAgIHRoaXMuaGFzVW5kbyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kdW5kb1N0YWNrLmxlbmd0aCA+IDA7XG4gICAgfTtcbiAgICB0aGlzLmhhc1JlZG8gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJlZG9TdGFjay5sZW5ndGggPiAwO1xuICAgIH07XG4gICAgdGhpcy5tYXJrQ2xlYW4gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5kaXJ0eUNvdW50ZXIgPSAwO1xuICAgIH07XG4gICAgdGhpcy5pc0NsZWFuID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpcnR5Q291bnRlciA9PT0gMDtcbiAgICB9O1xuICAgIHRoaXMuJHNlcmlhbGl6ZURlbHRhcyA9IGZ1bmN0aW9uKGRlbHRhU2V0cykge1xuICAgICAgICByZXR1cm4gY2xvbmVEZWx0YVNldHNPYmooZGVsdGFTZXRzLCAkc2VyaWFsaXplRGVsdGEpO1xuICAgIH07XG4gICAgdGhpcy4kZGVzZXJpYWxpemVEZWx0YXMgPSBmdW5jdGlvbihkZWx0YVNldHMpIHtcbiAgICAgICAgcmV0dXJuIGNsb25lRGVsdGFTZXRzT2JqKGRlbHRhU2V0cywgJGRlc2VyaWFsaXplRGVsdGEpO1xuICAgIH07XG4gICAgXG4gICAgZnVuY3Rpb24gJHNlcmlhbGl6ZURlbHRhKGRlbHRhKXtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFjdGlvbjogZGVsdGEuYWN0aW9uLFxuICAgICAgICAgICAgc3RhcnQ6IGRlbHRhLnN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBkZWx0YS5lbmQsXG4gICAgICAgICAgICBsaW5lczogZGVsdGEubGluZXMubGVuZ3RoID09IDEgPyBudWxsIDogZGVsdGEubGluZXMsXG4gICAgICAgICAgICB0ZXh0OiBkZWx0YS5saW5lcy5sZW5ndGggPT0gMSA/IGRlbHRhLmxpbmVzWzBdIDogbnVsbFxuICAgICAgICB9O1xuICAgIH1cbiAgICAgICAgXG4gICAgZnVuY3Rpb24gJGRlc2VyaWFsaXplRGVsdGEoZGVsdGEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFjdGlvbjogZGVsdGEuYWN0aW9uLFxuICAgICAgICAgICAgc3RhcnQ6IGRlbHRhLnN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBkZWx0YS5lbmQsXG4gICAgICAgICAgICBsaW5lczogZGVsdGEubGluZXMgfHwgW2RlbHRhLnRleHRdXG4gICAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIGZ1bmN0aW9uIGNsb25lRGVsdGFTZXRzT2JqKGRlbHRhU2V0c19vbGQsIGZuR2V0TW9kaWZpZWREZWx0YSkge1xuICAgICAgICB2YXIgZGVsdGFTZXRzX25ldyA9IG5ldyBBcnJheShkZWx0YVNldHNfb2xkLmxlbmd0aCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsdGFTZXRzX29sZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGRlbHRhU2V0X29sZCA9IGRlbHRhU2V0c19vbGRbaV07XG4gICAgICAgICAgICB2YXIgZGVsdGFTZXRfbmV3ID0geyBncm91cDogZGVsdGFTZXRfb2xkLmdyb3VwLCBkZWx0YXM6IG5ldyBBcnJheShkZWx0YVNldF9vbGQubGVuZ3RoKX07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZGVsdGFTZXRfb2xkLmRlbHRhcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBkZWx0YV9vbGQgPSBkZWx0YVNldF9vbGQuZGVsdGFzW2pdO1xuICAgICAgICAgICAgICAgIGRlbHRhU2V0X25ldy5kZWx0YXNbal0gPSBmbkdldE1vZGlmaWVkRGVsdGEoZGVsdGFfb2xkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZGVsdGFTZXRzX25ld1tpXSA9IGRlbHRhU2V0X25ldztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVsdGFTZXRzX25ldztcbiAgICB9XG4gICAgXG59KS5jYWxsKFVuZG9NYW5hZ2VyLnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuVW5kb01hbmFnZXIgPSBVbmRvTWFuYWdlcjtcbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL2xheWVyL2d1dHRlclwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpYi9kb21cIixcImFjZS9saWIvb29wXCIsXCJhY2UvbGliL2xhbmdcIixcImFjZS9saWIvZXZlbnRfZW1pdHRlclwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBkb20gPSBhY2VxdWlyZShcIi4uL2xpYi9kb21cIik7XG52YXIgb29wID0gYWNlcXVpcmUoXCIuLi9saWIvb29wXCIpO1xudmFyIGxhbmcgPSBhY2VxdWlyZShcIi4uL2xpYi9sYW5nXCIpO1xudmFyIEV2ZW50RW1pdHRlciA9IGFjZXF1aXJlKFwiLi4vbGliL2V2ZW50X2VtaXR0ZXJcIikuRXZlbnRFbWl0dGVyO1xuXG52YXIgR3V0dGVyID0gZnVuY3Rpb24ocGFyZW50RWwpIHtcbiAgICB0aGlzLmVsZW1lbnQgPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gXCJhY2VfbGF5ZXIgYWNlX2d1dHRlci1sYXllclwiO1xuICAgIHBhcmVudEVsLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7XG4gICAgdGhpcy5zZXRTaG93Rm9sZFdpZGdldHModGhpcy4kc2hvd0ZvbGRXaWRnZXRzKTtcbiAgICBcbiAgICB0aGlzLmd1dHRlcldpZHRoID0gMDtcblxuICAgIHRoaXMuJGFubm90YXRpb25zID0gW107XG4gICAgdGhpcy4kdXBkYXRlQW5ub3RhdGlvbnMgPSB0aGlzLiR1cGRhdGVBbm5vdGF0aW9ucy5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy4kY2VsbHMgPSBbXTtcbn07XG5cbihmdW5jdGlvbigpIHtcblxuICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTtcblxuICAgIHRoaXMuc2V0U2Vzc2lvbiA9IGZ1bmN0aW9uKHNlc3Npb24pIHtcbiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbilcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIHRoaXMuJHVwZGF0ZUFubm90YXRpb25zKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjtcbiAgICAgICAgaWYgKHNlc3Npb24pXG4gICAgICAgICAgICBzZXNzaW9uLm9uKFwiY2hhbmdlXCIsIHRoaXMuJHVwZGF0ZUFubm90YXRpb25zKTtcbiAgICB9O1xuXG4gICAgdGhpcy5hZGRHdXR0ZXJEZWNvcmF0aW9uID0gZnVuY3Rpb24ocm93LCBjbGFzc05hbWUpe1xuICAgICAgICBpZiAod2luZG93LmNvbnNvbGUpXG4gICAgICAgICAgICBjb25zb2xlLndhcm4gJiYgY29uc29sZS53YXJuKFwiZGVwcmVjYXRlZCB1c2Ugc2Vzc2lvbi5hZGRHdXR0ZXJEZWNvcmF0aW9uXCIpO1xuICAgICAgICB0aGlzLnNlc3Npb24uYWRkR3V0dGVyRGVjb3JhdGlvbihyb3csIGNsYXNzTmFtZSk7XG4gICAgfTtcblxuICAgIHRoaXMucmVtb3ZlR3V0dGVyRGVjb3JhdGlvbiA9IGZ1bmN0aW9uKHJvdywgY2xhc3NOYW1lKXtcbiAgICAgICAgaWYgKHdpbmRvdy5jb25zb2xlKVxuICAgICAgICAgICAgY29uc29sZS53YXJuICYmIGNvbnNvbGUud2FybihcImRlcHJlY2F0ZWQgdXNlIHNlc3Npb24ucmVtb3ZlR3V0dGVyRGVjb3JhdGlvblwiKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUd1dHRlckRlY29yYXRpb24ocm93LCBjbGFzc05hbWUpO1xuICAgIH07XG5cbiAgICB0aGlzLnNldEFubm90YXRpb25zID0gZnVuY3Rpb24oYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgdGhpcy4kYW5ub3RhdGlvbnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbm5vdGF0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGFubm90YXRpb24gPSBhbm5vdGF0aW9uc1tpXTtcbiAgICAgICAgICAgIHZhciByb3cgPSBhbm5vdGF0aW9uLnJvdztcbiAgICAgICAgICAgIHZhciByb3dJbmZvID0gdGhpcy4kYW5ub3RhdGlvbnNbcm93XTtcbiAgICAgICAgICAgIGlmICghcm93SW5mbylcbiAgICAgICAgICAgICAgICByb3dJbmZvID0gdGhpcy4kYW5ub3RhdGlvbnNbcm93XSA9IHt0ZXh0OiBbXX07XG4gICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGFubm9UZXh0ID0gYW5ub3RhdGlvbi50ZXh0O1xuICAgICAgICAgICAgYW5ub1RleHQgPSBhbm5vVGV4dCA/IGxhbmcuZXNjYXBlSFRNTChhbm5vVGV4dCkgOiBhbm5vdGF0aW9uLmh0bWwgfHwgXCJcIjtcblxuICAgICAgICAgICAgaWYgKHJvd0luZm8udGV4dC5pbmRleE9mKGFubm9UZXh0KSA9PT0gLTEpXG4gICAgICAgICAgICAgICAgcm93SW5mby50ZXh0LnB1c2goYW5ub1RleHQpO1xuXG4gICAgICAgICAgICB2YXIgdHlwZSA9IGFubm90YXRpb24udHlwZTtcbiAgICAgICAgICAgIGlmICh0eXBlID09IFwiZXJyb3JcIilcbiAgICAgICAgICAgICAgICByb3dJbmZvLmNsYXNzTmFtZSA9IFwiIGFjZV9lcnJvclwiO1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBcIndhcm5pbmdcIiAmJiByb3dJbmZvLmNsYXNzTmFtZSAhPSBcIiBhY2VfZXJyb3JcIilcbiAgICAgICAgICAgICAgICByb3dJbmZvLmNsYXNzTmFtZSA9IFwiIGFjZV93YXJuaW5nXCI7XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IFwiaW5mb1wiICYmICghcm93SW5mby5jbGFzc05hbWUpKVxuICAgICAgICAgICAgICAgIHJvd0luZm8uY2xhc3NOYW1lID0gXCIgYWNlX2luZm9cIjtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLiR1cGRhdGVBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uIChkZWx0YSkge1xuICAgICAgICBpZiAoIXRoaXMuJGFubm90YXRpb25zLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGZpcnN0Um93ID0gZGVsdGEuc3RhcnQucm93O1xuICAgICAgICB2YXIgbGVuID0gZGVsdGEuZW5kLnJvdyAtIGZpcnN0Um93O1xuICAgICAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICAgIH0gZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICdyZW1vdmUnKSB7XG4gICAgICAgICAgICB0aGlzLiRhbm5vdGF0aW9ucy5zcGxpY2UoZmlyc3RSb3csIGxlbiArIDEsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgICAgICAgICBhcmdzLnVuc2hpZnQoZmlyc3RSb3csIDEpO1xuICAgICAgICAgICAgdGhpcy4kYW5ub3RhdGlvbnMuc3BsaWNlLmFwcGx5KHRoaXMuJGFubm90YXRpb25zLCBhcmdzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLnVwZGF0ZSA9IGZ1bmN0aW9uKGNvbmZpZykge1xuICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcbiAgICAgICAgdmFyIGZpcnN0Um93ID0gY29uZmlnLmZpcnN0Um93O1xuICAgICAgICB2YXIgbGFzdFJvdyA9IE1hdGgubWluKGNvbmZpZy5sYXN0Um93ICsgY29uZmlnLmd1dHRlck9mZnNldCwgIC8vIG5lZWRlZCB0byBjb21wZW5zYXRlIGZvciBob3Igc2NvbGxiYXJcbiAgICAgICAgICAgIHNlc3Npb24uZ2V0TGVuZ3RoKCkgLSAxKTtcbiAgICAgICAgdmFyIGZvbGQgPSBzZXNzaW9uLmdldE5leHRGb2xkTGluZShmaXJzdFJvdyk7XG4gICAgICAgIHZhciBmb2xkU3RhcnQgPSBmb2xkID8gZm9sZC5zdGFydC5yb3cgOiBJbmZpbml0eTtcbiAgICAgICAgdmFyIGZvbGRXaWRnZXRzID0gdGhpcy4kc2hvd0ZvbGRXaWRnZXRzICYmIHNlc3Npb24uZm9sZFdpZGdldHM7XG4gICAgICAgIHZhciBicmVha3BvaW50cyA9IHNlc3Npb24uJGJyZWFrcG9pbnRzO1xuICAgICAgICB2YXIgZGVjb3JhdGlvbnMgPSBzZXNzaW9uLiRkZWNvcmF0aW9ucztcbiAgICAgICAgdmFyIGZpcnN0TGluZU51bWJlciA9IHNlc3Npb24uJGZpcnN0TGluZU51bWJlcjtcbiAgICAgICAgdmFyIGxhc3RMaW5lTnVtYmVyID0gMDtcbiAgICAgICAgXG4gICAgICAgIHZhciBndXR0ZXJSZW5kZXJlciA9IHNlc3Npb24uZ3V0dGVyUmVuZGVyZXIgfHwgdGhpcy4kcmVuZGVyZXI7XG5cbiAgICAgICAgdmFyIGNlbGwgPSBudWxsO1xuICAgICAgICB2YXIgaW5kZXggPSAtMTtcbiAgICAgICAgdmFyIHJvdyA9IGZpcnN0Um93O1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgaWYgKHJvdyA+IGZvbGRTdGFydCkge1xuICAgICAgICAgICAgICAgIHJvdyA9IGZvbGQuZW5kLnJvdyArIDE7XG4gICAgICAgICAgICAgICAgZm9sZCA9IHNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKHJvdywgZm9sZCk7XG4gICAgICAgICAgICAgICAgZm9sZFN0YXJ0ID0gZm9sZCA/IGZvbGQuc3RhcnQucm93IDogSW5maW5pdHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocm93ID4gbGFzdFJvdykge1xuICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLiRjZWxscy5sZW5ndGggPiBpbmRleCArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY2VsbCA9IHRoaXMuJGNlbGxzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGQoY2VsbC5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNlbGwgPSB0aGlzLiRjZWxsc1srK2luZGV4XTtcbiAgICAgICAgICAgIGlmICghY2VsbCkge1xuICAgICAgICAgICAgICAgIGNlbGwgPSB7ZWxlbWVudDogbnVsbCwgdGV4dE5vZGU6IG51bGwsIGZvbGRXaWRnZXQ6IG51bGx9O1xuICAgICAgICAgICAgICAgIGNlbGwuZWxlbWVudCA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgICAgICAgIGNlbGwudGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgICAgICAgICAgICAgY2VsbC5lbGVtZW50LmFwcGVuZENoaWxkKGNlbGwudGV4dE5vZGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChjZWxsLmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuJGNlbGxzW2luZGV4XSA9IGNlbGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjbGFzc05hbWUgPSBcImFjZV9ndXR0ZXItY2VsbCBcIjtcbiAgICAgICAgICAgIGlmIChicmVha3BvaW50c1tyb3ddKVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZSArPSBicmVha3BvaW50c1tyb3ddO1xuICAgICAgICAgICAgaWYgKGRlY29yYXRpb25zW3Jvd10pXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lICs9IGRlY29yYXRpb25zW3Jvd107XG4gICAgICAgICAgICBpZiAodGhpcy4kYW5ub3RhdGlvbnNbcm93XSlcbiAgICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gdGhpcy4kYW5ub3RhdGlvbnNbcm93XS5jbGFzc05hbWU7XG4gICAgICAgICAgICBpZiAoY2VsbC5lbGVtZW50LmNsYXNzTmFtZSAhPSBjbGFzc05hbWUpXG4gICAgICAgICAgICAgICAgY2VsbC5lbGVtZW50LmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcblxuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHNlc3Npb24uZ2V0Um93TGVuZ3RoKHJvdykgKiBjb25maWcubGluZUhlaWdodCArIFwicHhcIjtcbiAgICAgICAgICAgIGlmIChoZWlnaHQgIT0gY2VsbC5lbGVtZW50LnN0eWxlLmhlaWdodClcbiAgICAgICAgICAgICAgICBjZWxsLmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoZm9sZFdpZGdldHMpIHtcbiAgICAgICAgICAgICAgICB2YXIgYyA9IGZvbGRXaWRnZXRzW3Jvd107XG4gICAgICAgICAgICAgICAgaWYgKGMgPT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgYyA9IGZvbGRXaWRnZXRzW3Jvd10gPSBzZXNzaW9uLmdldEZvbGRXaWRnZXQocm93KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNlbGwuZm9sZFdpZGdldCkge1xuICAgICAgICAgICAgICAgICAgICBjZWxsLmZvbGRXaWRnZXQgPSBkb20uY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwuZWxlbWVudC5hcHBlbmRDaGlsZChjZWxsLmZvbGRXaWRnZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgY2xhc3NOYW1lID0gXCJhY2VfZm9sZC13aWRnZXQgYWNlX1wiICsgYztcbiAgICAgICAgICAgICAgICBpZiAoYyA9PSBcInN0YXJ0XCIgJiYgcm93ID09IGZvbGRTdGFydCAmJiByb3cgPCBmb2xkLmVuZC5yb3cpXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSArPSBcIiBhY2VfY2xvc2VkXCI7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gXCIgYWNlX29wZW5cIjtcbiAgICAgICAgICAgICAgICBpZiAoY2VsbC5mb2xkV2lkZ2V0LmNsYXNzTmFtZSAhPSBjbGFzc05hbWUpXG4gICAgICAgICAgICAgICAgICAgIGNlbGwuZm9sZFdpZGdldC5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG5cbiAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gY29uZmlnLmxpbmVIZWlnaHQgKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgaWYgKGNlbGwuZm9sZFdpZGdldC5zdHlsZS5oZWlnaHQgIT0gaGVpZ2h0KVxuICAgICAgICAgICAgICAgICAgICBjZWxsLmZvbGRXaWRnZXQuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY2VsbC5mb2xkV2lkZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwuZWxlbWVudC5yZW1vdmVDaGlsZChjZWxsLmZvbGRXaWRnZXQpO1xuICAgICAgICAgICAgICAgICAgICBjZWxsLmZvbGRXaWRnZXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRleHQgPSBsYXN0TGluZU51bWJlciA9IGd1dHRlclJlbmRlcmVyXG4gICAgICAgICAgICAgICAgPyBndXR0ZXJSZW5kZXJlci5nZXRUZXh0KHNlc3Npb24sIHJvdylcbiAgICAgICAgICAgICAgICA6IHJvdyArIGZpcnN0TGluZU51bWJlcjtcbiAgICAgICAgICAgIGlmICh0ZXh0ICE9PSBjZWxsLnRleHROb2RlLmRhdGEpXG4gICAgICAgICAgICAgICAgY2VsbC50ZXh0Tm9kZS5kYXRhID0gdGV4dDtcblxuICAgICAgICAgICAgcm93Kys7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gY29uZmlnLm1pbkhlaWdodCArIFwicHhcIjtcblxuICAgICAgICBpZiAodGhpcy4kZml4ZWRXaWR0aCB8fCBzZXNzaW9uLiR1c2VXcmFwTW9kZSlcbiAgICAgICAgICAgIGxhc3RMaW5lTnVtYmVyID0gc2Vzc2lvbi5nZXRMZW5ndGgoKSArIGZpcnN0TGluZU51bWJlcjtcblxuICAgICAgICB2YXIgZ3V0dGVyV2lkdGggPSBndXR0ZXJSZW5kZXJlciBcbiAgICAgICAgICAgID8gZ3V0dGVyUmVuZGVyZXIuZ2V0V2lkdGgoc2Vzc2lvbiwgbGFzdExpbmVOdW1iZXIsIGNvbmZpZylcbiAgICAgICAgICAgIDogbGFzdExpbmVOdW1iZXIudG9TdHJpbmcoKS5sZW5ndGggKiBjb25maWcuY2hhcmFjdGVyV2lkdGg7XG4gICAgICAgIFxuICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMuJHBhZGRpbmcgfHwgdGhpcy4kY29tcHV0ZVBhZGRpbmcoKTtcbiAgICAgICAgZ3V0dGVyV2lkdGggKz0gcGFkZGluZy5sZWZ0ICsgcGFkZGluZy5yaWdodDtcbiAgICAgICAgaWYgKGd1dHRlcldpZHRoICE9PSB0aGlzLmd1dHRlcldpZHRoICYmICFpc05hTihndXR0ZXJXaWR0aCkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3V0dGVyV2lkdGggPSBndXR0ZXJXaWR0aDtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS53aWR0aCA9IE1hdGguY2VpbCh0aGlzLmd1dHRlcldpZHRoKSArIFwicHhcIjtcbiAgICAgICAgICAgIHRoaXMuX2VtaXQoXCJjaGFuZ2VHdXR0ZXJXaWR0aFwiLCBndXR0ZXJXaWR0aCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy4kZml4ZWRXaWR0aCA9IGZhbHNlO1xuICAgIFxuICAgIHRoaXMuJHNob3dMaW5lTnVtYmVycyA9IHRydWU7XG4gICAgdGhpcy4kcmVuZGVyZXIgPSBcIlwiO1xuICAgIHRoaXMuc2V0U2hvd0xpbmVOdW1iZXJzID0gZnVuY3Rpb24oc2hvdykge1xuICAgICAgICB0aGlzLiRyZW5kZXJlciA9ICFzaG93ICYmIHtcbiAgICAgICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHtyZXR1cm4gXCJcIjt9LFxuICAgICAgICAgICAgZ2V0VGV4dDogZnVuY3Rpb24oKSB7cmV0dXJuIFwiXCI7fVxuICAgICAgICB9O1xuICAgIH07XG4gICAgXG4gICAgdGhpcy5nZXRTaG93TGluZU51bWJlcnMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHNob3dMaW5lTnVtYmVycztcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuJHNob3dGb2xkV2lkZ2V0cyA9IHRydWU7XG4gICAgdGhpcy5zZXRTaG93Rm9sZFdpZGdldHMgPSBmdW5jdGlvbihzaG93KSB7XG4gICAgICAgIGlmIChzaG93KVxuICAgICAgICAgICAgZG9tLmFkZENzc0NsYXNzKHRoaXMuZWxlbWVudCwgXCJhY2VfZm9sZGluZy1lbmFibGVkXCIpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCBcImFjZV9mb2xkaW5nLWVuYWJsZWRcIik7XG5cbiAgICAgICAgdGhpcy4kc2hvd0ZvbGRXaWRnZXRzID0gc2hvdztcbiAgICAgICAgdGhpcy4kcGFkZGluZyA9IG51bGw7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmdldFNob3dGb2xkV2lkZ2V0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kc2hvd0ZvbGRXaWRnZXRzO1xuICAgIH07XG5cbiAgICB0aGlzLiRjb21wdXRlUGFkZGluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudC5maXJzdENoaWxkKVxuICAgICAgICAgICAgcmV0dXJuIHtsZWZ0OiAwLCByaWdodDogMH07XG4gICAgICAgIHZhciBzdHlsZSA9IGRvbS5jb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudC5maXJzdENoaWxkKTtcbiAgICAgICAgdGhpcy4kcGFkZGluZyA9IHt9O1xuICAgICAgICB0aGlzLiRwYWRkaW5nLmxlZnQgPSBwYXJzZUludChzdHlsZS5wYWRkaW5nTGVmdCkgKyAxIHx8IDA7XG4gICAgICAgIHRoaXMuJHBhZGRpbmcucmlnaHQgPSBwYXJzZUludChzdHlsZS5wYWRkaW5nUmlnaHQpIHx8IDA7XG4gICAgICAgIHJldHVybiB0aGlzLiRwYWRkaW5nO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFJlZ2lvbiA9IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy4kcGFkZGluZyB8fCB0aGlzLiRjb21wdXRlUGFkZGluZygpO1xuICAgICAgICB2YXIgcmVjdCA9IHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaWYgKHBvaW50LnggPCBwYWRkaW5nLmxlZnQgKyByZWN0LmxlZnQpXG4gICAgICAgICAgICByZXR1cm4gXCJtYXJrZXJzXCI7XG4gICAgICAgIGlmICh0aGlzLiRzaG93Rm9sZFdpZGdldHMgJiYgcG9pbnQueCA+IHJlY3QucmlnaHQgLSBwYWRkaW5nLnJpZ2h0KVxuICAgICAgICAgICAgcmV0dXJuIFwiZm9sZFdpZGdldHNcIjtcbiAgICB9O1xuXG59KS5jYWxsKEd1dHRlci5wcm90b3R5cGUpO1xuXG5leHBvcnRzLkd1dHRlciA9IEd1dHRlcjtcblxufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvbGF5ZXIvbWFya2VyXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvcmFuZ2VcIixcImFjZS9saWIvZG9tXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIFJhbmdlID0gYWNlcXVpcmUoXCIuLi9yYW5nZVwiKS5SYW5nZTtcbnZhciBkb20gPSBhY2VxdWlyZShcIi4uL2xpYi9kb21cIik7XG5cbnZhciBNYXJrZXIgPSBmdW5jdGlvbihwYXJlbnRFbCkge1xuICAgIHRoaXMuZWxlbWVudCA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSBcImFjZV9sYXllciBhY2VfbWFya2VyLWxheWVyXCI7XG4gICAgcGFyZW50RWwuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTtcbn07XG5cbihmdW5jdGlvbigpIHtcblxuICAgIHRoaXMuJHBhZGRpbmcgPSAwO1xuXG4gICAgdGhpcy5zZXRQYWRkaW5nID0gZnVuY3Rpb24ocGFkZGluZykge1xuICAgICAgICB0aGlzLiRwYWRkaW5nID0gcGFkZGluZztcbiAgICB9O1xuICAgIHRoaXMuc2V0U2Vzc2lvbiA9IGZ1bmN0aW9uKHNlc3Npb24pIHtcbiAgICAgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuc2V0TWFya2VycyA9IGZ1bmN0aW9uKG1hcmtlcnMpIHtcbiAgICAgICAgdGhpcy5tYXJrZXJzID0gbWFya2VycztcbiAgICB9O1xuXG4gICAgdGhpcy51cGRhdGUgPSBmdW5jdGlvbihjb25maWcpIHtcbiAgICAgICAgaWYgKCFjb25maWcpIHJldHVybjtcblxuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcblxuXG4gICAgICAgIHZhciBodG1sID0gW107XG4gICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLm1hcmtlcnMpIHtcbiAgICAgICAgICAgIHZhciBtYXJrZXIgPSB0aGlzLm1hcmtlcnNba2V5XTtcblxuICAgICAgICAgICAgaWYgKCFtYXJrZXIucmFuZ2UpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIudXBkYXRlKGh0bWwsIHRoaXMsIHRoaXMuc2Vzc2lvbiwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHJhbmdlID0gbWFya2VyLnJhbmdlLmNsaXBSb3dzKGNvbmZpZy5maXJzdFJvdywgY29uZmlnLmxhc3RSb3cpO1xuICAgICAgICAgICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIHJhbmdlID0gcmFuZ2UudG9TY3JlZW5SYW5nZSh0aGlzLnNlc3Npb24pO1xuICAgICAgICAgICAgaWYgKG1hcmtlci5yZW5kZXJlcikge1xuICAgICAgICAgICAgICAgIHZhciB0b3AgPSB0aGlzLiRnZXRUb3AocmFuZ2Uuc3RhcnQucm93LCBjb25maWcpO1xuICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gdGhpcy4kcGFkZGluZyArICh0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmlzQmlkaVJvdyhyYW5nZS5zdGFydC5yb3cpXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci5nZXRQb3NMZWZ0KHJhbmdlLnN0YXJ0LmNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgOiByYW5nZS5zdGFydC5jb2x1bW4gKiBjb25maWcuY2hhcmFjdGVyV2lkdGgpO1xuICAgICAgICAgICAgICAgIG1hcmtlci5yZW5kZXJlcihodG1sLCByYW5nZSwgbGVmdCwgdG9wLCBjb25maWcpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXJrZXIudHlwZSA9PSBcImZ1bGxMaW5lXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXdGdWxsTGluZU1hcmtlcihodG1sLCByYW5nZSwgbWFya2VyLmNsYXp6LCBjb25maWcpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXJrZXIudHlwZSA9PSBcInNjcmVlbkxpbmVcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhd1NjcmVlbkxpbmVNYXJrZXIoaHRtbCwgcmFuZ2UsIG1hcmtlci5jbGF6eiwgY29uZmlnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmFuZ2UuaXNNdWx0aUxpbmUoKSkge1xuICAgICAgICAgICAgICAgIGlmIChtYXJrZXIudHlwZSA9PSBcInRleHRcIilcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3VGV4dE1hcmtlcihodG1sLCByYW5nZSwgbWFya2VyLmNsYXp6LCBjb25maWcpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3TXVsdGlMaW5lTWFya2VyKGh0bWwsIHJhbmdlLCBtYXJrZXIuY2xhenosIGNvbmZpZyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmlzQmlkaVJvdyhyYW5nZS5zdGFydC5yb3cpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd0JpZGlTaW5nbGVMaW5lTWFya2VyKGh0bWwsIHJhbmdlLCBtYXJrZXIuY2xhenogKyBcIiBhY2Vfc3RhcnRcIiArIFwiIGFjZV9icjE1XCIsIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3U2luZ2xlTGluZU1hcmtlcihodG1sLCByYW5nZSwgbWFya2VyLmNsYXp6ICsgXCIgYWNlX3N0YXJ0XCIgKyBcIiBhY2VfYnIxNVwiLCBjb25maWcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MID0gaHRtbC5qb2luKFwiXCIpO1xuICAgIH07XG5cbiAgICB0aGlzLiRnZXRUb3AgPSBmdW5jdGlvbihyb3csIGxheWVyQ29uZmlnKSB7XG4gICAgICAgIHJldHVybiAocm93IC0gbGF5ZXJDb25maWcuZmlyc3RSb3dTY3JlZW4pICogbGF5ZXJDb25maWcubGluZUhlaWdodDtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZ2V0Qm9yZGVyQ2xhc3ModGwsIHRyLCBiciwgYmwpIHtcbiAgICAgICAgcmV0dXJuICh0bCA/IDEgOiAwKSB8ICh0ciA/IDIgOiAwKSB8IChiciA/IDQgOiAwKSB8IChibCA/IDggOiAwKTtcbiAgICB9XG4gICAgdGhpcy5kcmF3VGV4dE1hcmtlciA9IGZ1bmN0aW9uKHN0cmluZ0J1aWxkZXIsIHJhbmdlLCBjbGF6eiwgbGF5ZXJDb25maWcsIGV4dHJhU3R5bGUpIHtcbiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG4gICAgICAgIHZhciBzdGFydCA9IHJhbmdlLnN0YXJ0LnJvdztcbiAgICAgICAgdmFyIGVuZCA9IHJhbmdlLmVuZC5yb3c7XG4gICAgICAgIHZhciByb3cgPSBzdGFydDtcbiAgICAgICAgdmFyIHByZXYgPSAwOyBcbiAgICAgICAgdmFyIGN1cnIgPSAwO1xuICAgICAgICB2YXIgbmV4dCA9IHNlc3Npb24uZ2V0U2NyZWVuTGFzdFJvd0NvbHVtbihyb3cpO1xuICAgICAgICB2YXIgY2xhenpNb2RpZmllZCA9IG51bGw7XG4gICAgICAgIHZhciBsaW5lUmFuZ2UgPSBuZXcgUmFuZ2Uocm93LCByYW5nZS5zdGFydC5jb2x1bW4sIHJvdywgY3Vycik7XG4gICAgICAgIGZvciAoOyByb3cgPD0gZW5kOyByb3crKykge1xuICAgICAgICAgICAgbGluZVJhbmdlLnN0YXJ0LnJvdyA9IGxpbmVSYW5nZS5lbmQucm93ID0gcm93O1xuICAgICAgICAgICAgbGluZVJhbmdlLnN0YXJ0LmNvbHVtbiA9IHJvdyA9PSBzdGFydCA/IHJhbmdlLnN0YXJ0LmNvbHVtbiA6IHNlc3Npb24uZ2V0Um93V3JhcEluZGVudChyb3cpO1xuICAgICAgICAgICAgbGluZVJhbmdlLmVuZC5jb2x1bW4gPSBuZXh0O1xuICAgICAgICAgICAgcHJldiA9IGN1cnI7XG4gICAgICAgICAgICBjdXJyID0gbmV4dDtcbiAgICAgICAgICAgIG5leHQgPSByb3cgKyAxIDwgZW5kID8gc2Vzc2lvbi5nZXRTY3JlZW5MYXN0Um93Q29sdW1uKHJvdyArIDEpIDogcm93ID09IGVuZCA/IDAgOiByYW5nZS5lbmQuY29sdW1uO1xuICAgICAgICAgICAgY2xhenpNb2RpZmllZCA9IGNsYXp6ICsgKHJvdyA9PSBzdGFydCAgPyBcIiBhY2Vfc3RhcnRcIiA6IFwiXCIpICsgXCIgYWNlX2JyXCJcbiAgICAgICAgICAgICAgICArIGdldEJvcmRlckNsYXNzKHJvdyA9PSBzdGFydCB8fCByb3cgPT0gc3RhcnQgKyAxICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiwgcHJldiA8IGN1cnIsIGN1cnIgPiBuZXh0LCByb3cgPT0gZW5kKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuaXNCaWRpUm93KHJvdykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXdCaWRpU2luZ2xlTGluZU1hcmtlcihzdHJpbmdCdWlsZGVyLCBsaW5lUmFuZ2UsIGNsYXp6TW9kaWZpZWQsXG4gICAgICAgICAgICAgICAgICAgIGxheWVyQ29uZmlnLCByb3cgPT0gZW5kID8gMCA6IDEsIGV4dHJhU3R5bGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXdTaW5nbGVMaW5lTWFya2VyKHN0cmluZ0J1aWxkZXIsIGxpbmVSYW5nZSwgY2xhenpNb2RpZmllZCxcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXJDb25maWcsIHJvdyA9PSBlbmQgPyAwIDogMSwgZXh0cmFTdHlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZHJhd011bHRpTGluZU1hcmtlciA9IGZ1bmN0aW9uKHN0cmluZ0J1aWxkZXIsIHJhbmdlLCBjbGF6eiwgY29uZmlnLCBleHRyYVN0eWxlKSB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy4kcGFkZGluZztcbiAgICAgICAgdmFyIGhlaWdodCwgdG9wLCBsZWZ0O1xuICAgICAgICBleHRyYVN0eWxlID0gZXh0cmFTdHlsZSB8fCBcIlwiO1xuICAgICAgIGlmICh0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmlzQmlkaVJvdyhyYW5nZS5zdGFydC5yb3cpKSB7XG4gICAgICAgICAgIHZhciByYW5nZTEgPSByYW5nZS5jbG9uZSgpO1xuICAgICAgICAgICByYW5nZTEuZW5kLnJvdyA9IHJhbmdlMS5zdGFydC5yb3c7XG4gICAgICAgICAgIHJhbmdlMS5lbmQuY29sdW1uID0gdGhpcy5zZXNzaW9uLmdldExpbmUocmFuZ2UxLnN0YXJ0LnJvdykubGVuZ3RoO1xuICAgICAgICAgICB0aGlzLmRyYXdCaWRpU2luZ2xlTGluZU1hcmtlcihzdHJpbmdCdWlsZGVyLCByYW5nZTEsIGNsYXp6ICsgXCIgYWNlX2JyMSBhY2Vfc3RhcnRcIiwgY29uZmlnLCBudWxsLCBleHRyYVN0eWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgaGVpZ2h0ID0gY29uZmlnLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgIHRvcCA9IHRoaXMuJGdldFRvcChyYW5nZS5zdGFydC5yb3csIGNvbmZpZyk7XG4gICAgICAgICAgIGxlZnQgPSBwYWRkaW5nICsgcmFuZ2Uuc3RhcnQuY29sdW1uICogY29uZmlnLmNoYXJhY3RlcldpZHRoO1xuICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2goXG4gICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J1wiLCBjbGF6eiwgXCIgYWNlX2JyMSBhY2Vfc3RhcnQnIHN0eWxlPSdcIixcbiAgICAgICAgICAgICAgIFwiaGVpZ2h0OlwiLCBoZWlnaHQsIFwicHg7XCIsXG4gICAgICAgICAgICAgICBcInJpZ2h0OjA7XCIsXG4gICAgICAgICAgICAgICBcInRvcDpcIiwgdG9wLCBcInB4O1wiLFxuICAgICAgICAgICAgICAgXCJsZWZ0OlwiLCBsZWZ0LCBcInB4O1wiLCBleHRyYVN0eWxlLCBcIic+PC9kaXY+XCJcbiAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci5pc0JpZGlSb3cocmFuZ2UuZW5kLnJvdykpIHtcbiAgICAgICAgICAgdmFyIHJhbmdlMSA9IHJhbmdlLmNsb25lKCk7XG4gICAgICAgICAgIHJhbmdlMS5zdGFydC5yb3cgPSByYW5nZTEuZW5kLnJvdztcbiAgICAgICAgICAgcmFuZ2UxLnN0YXJ0LmNvbHVtbiA9IDA7XG4gICAgICAgICAgIHRoaXMuZHJhd0JpZGlTaW5nbGVMaW5lTWFya2VyKHN0cmluZ0J1aWxkZXIsIHJhbmdlMSwgY2xhenogKyBcIiBhY2VfYnIxMlwiLCBjb25maWcsIG51bGwsIGV4dHJhU3R5bGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICB2YXIgd2lkdGggPSByYW5nZS5lbmQuY29sdW1uICogY29uZmlnLmNoYXJhY3RlcldpZHRoO1xuICAgICAgICAgICBoZWlnaHQgPSBjb25maWcubGluZUhlaWdodDtcbiAgICAgICAgICAgdG9wID0gdGhpcy4kZ2V0VG9wKHJhbmdlLmVuZC5yb3csIGNvbmZpZyk7XG4gICAgICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaChcbiAgICAgICAgICAgICAgIFwiPGRpdiBjbGFzcz0nXCIsIGNsYXp6LCBcIiBhY2VfYnIxMicgc3R5bGU9J1wiLFxuICAgICAgICAgICAgICAgXCJoZWlnaHQ6XCIsIGhlaWdodCwgXCJweDtcIixcbiAgICAgICAgICAgICAgIFwid2lkdGg6XCIsIHdpZHRoLCBcInB4O1wiLFxuICAgICAgICAgICAgICAgXCJ0b3A6XCIsIHRvcCwgXCJweDtcIixcbiAgICAgICAgICAgICAgIFwibGVmdDpcIiwgcGFkZGluZywgXCJweDtcIiwgZXh0cmFTdHlsZSwgXCInPjwvZGl2PlwiXG4gICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaGVpZ2h0ID0gKHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFydC5yb3cgLSAxKSAqIGNvbmZpZy5saW5lSGVpZ2h0O1xuICAgICAgICBpZiAoaGVpZ2h0IDw9IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRvcCA9IHRoaXMuJGdldFRvcChyYW5nZS5zdGFydC5yb3cgKyAxLCBjb25maWcpO1xuICAgICAgICBcbiAgICAgICAgdmFyIHJhZGl1c0NsYXNzID0gKHJhbmdlLnN0YXJ0LmNvbHVtbiA/IDEgOiAwKSB8IChyYW5nZS5lbmQuY29sdW1uID8gMCA6IDgpO1xuXG4gICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaChcbiAgICAgICAgICAgIFwiPGRpdiBjbGFzcz0nXCIsIGNsYXp6LCAocmFkaXVzQ2xhc3MgPyBcIiBhY2VfYnJcIiArIHJhZGl1c0NsYXNzIDogXCJcIiksIFwiJyBzdHlsZT0nXCIsXG4gICAgICAgICAgICBcImhlaWdodDpcIiwgaGVpZ2h0LCBcInB4O1wiLFxuICAgICAgICAgICAgXCJyaWdodDowO1wiLFxuICAgICAgICAgICAgXCJ0b3A6XCIsIHRvcCwgXCJweDtcIixcbiAgICAgICAgICAgIFwibGVmdDpcIiwgcGFkZGluZywgXCJweDtcIiwgZXh0cmFTdHlsZSwgXCInPjwvZGl2PlwiXG4gICAgICAgICk7XG4gICAgfTtcbiAgICB0aGlzLmRyYXdTaW5nbGVMaW5lTWFya2VyID0gZnVuY3Rpb24oc3RyaW5nQnVpbGRlciwgcmFuZ2UsIGNsYXp6LCBjb25maWcsIGV4dHJhTGVuZ3RoLCBleHRyYVN0eWxlKSB7XG4gICAgICAgIHZhciBoZWlnaHQgPSBjb25maWcubGluZUhlaWdodDtcbiAgICAgICAgdmFyIHdpZHRoID0gKHJhbmdlLmVuZC5jb2x1bW4gKyAoZXh0cmFMZW5ndGggfHwgMCkgLSByYW5nZS5zdGFydC5jb2x1bW4pICogY29uZmlnLmNoYXJhY3RlcldpZHRoO1xuXG4gICAgICAgIHZhciB0b3AgPSB0aGlzLiRnZXRUb3AocmFuZ2Uuc3RhcnQucm93LCBjb25maWcpO1xuICAgICAgICB2YXIgbGVmdCA9IHRoaXMuJHBhZGRpbmcgKyByYW5nZS5zdGFydC5jb2x1bW4gKiBjb25maWcuY2hhcmFjdGVyV2lkdGg7XG5cbiAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKFxuICAgICAgICAgICAgXCI8ZGl2IGNsYXNzPSdcIiwgY2xhenosIFwiJyBzdHlsZT0nXCIsXG4gICAgICAgICAgICBcImhlaWdodDpcIiwgaGVpZ2h0LCBcInB4O1wiLFxuICAgICAgICAgICAgXCJ3aWR0aDpcIiwgd2lkdGgsIFwicHg7XCIsXG4gICAgICAgICAgICBcInRvcDpcIiwgdG9wLCBcInB4O1wiLFxuICAgICAgICAgICAgXCJsZWZ0OlwiLCBsZWZ0LCBcInB4O1wiLCBleHRyYVN0eWxlIHx8IFwiXCIsIFwiJz48L2Rpdj5cIlxuICAgICAgICApO1xuICAgIH07XG4gICAgdGhpcy5kcmF3QmlkaVNpbmdsZUxpbmVNYXJrZXIgPSBmdW5jdGlvbihzdHJpbmdCdWlsZGVyLCByYW5nZSwgY2xhenosIGNvbmZpZywgZXh0cmFMZW5ndGgsIGV4dHJhU3R5bGUpIHtcbiAgICAgICAgdmFyIGhlaWdodCA9IGNvbmZpZy5saW5lSGVpZ2h0LCB0b3AgPSB0aGlzLiRnZXRUb3AocmFuZ2Uuc3RhcnQucm93LCBjb25maWcpLCBwYWRkaW5nID0gdGhpcy4kcGFkZGluZztcbiAgICAgICAgdmFyIHNlbGVjdGlvbnMgPSB0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmdldFNlbGVjdGlvbnMocmFuZ2Uuc3RhcnQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uKTtcblxuICAgICAgICBzZWxlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2goXG4gICAgICAgICAgICAgICAgXCI8ZGl2IGNsYXNzPSdcIiwgY2xhenosIFwiJyBzdHlsZT0nXCIsXG4gICAgICAgICAgICAgICAgXCJoZWlnaHQ6XCIsIGhlaWdodCwgXCJweDtcIixcbiAgICAgICAgICAgICAgICBcIndpZHRoOlwiLCBzZWxlY3Rpb24ud2lkdGggKyAoZXh0cmFMZW5ndGggfHwgMCksIFwicHg7XCIsXG4gICAgICAgICAgICAgICAgXCJ0b3A6XCIsIHRvcCwgXCJweDtcIixcbiAgICAgICAgICAgICAgICBcImxlZnQ6XCIsIHBhZGRpbmcgKyBzZWxlY3Rpb24ubGVmdCwgXCJweDtcIiwgZXh0cmFTdHlsZSB8fCBcIlwiLCBcIic+PC9kaXY+XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLmRyYXdGdWxsTGluZU1hcmtlciA9IGZ1bmN0aW9uKHN0cmluZ0J1aWxkZXIsIHJhbmdlLCBjbGF6eiwgY29uZmlnLCBleHRyYVN0eWxlKSB7XG4gICAgICAgIHZhciB0b3AgPSB0aGlzLiRnZXRUb3AocmFuZ2Uuc3RhcnQucm93LCBjb25maWcpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gY29uZmlnLmxpbmVIZWlnaHQ7XG4gICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgIT0gcmFuZ2UuZW5kLnJvdylcbiAgICAgICAgICAgIGhlaWdodCArPSB0aGlzLiRnZXRUb3AocmFuZ2UuZW5kLnJvdywgY29uZmlnKSAtIHRvcDtcblxuICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2goXG4gICAgICAgICAgICBcIjxkaXYgY2xhc3M9J1wiLCBjbGF6eiwgXCInIHN0eWxlPSdcIixcbiAgICAgICAgICAgIFwiaGVpZ2h0OlwiLCBoZWlnaHQsIFwicHg7XCIsXG4gICAgICAgICAgICBcInRvcDpcIiwgdG9wLCBcInB4O1wiLFxuICAgICAgICAgICAgXCJsZWZ0OjA7cmlnaHQ6MDtcIiwgZXh0cmFTdHlsZSB8fCBcIlwiLCBcIic+PC9kaXY+XCJcbiAgICAgICAgKTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuZHJhd1NjcmVlbkxpbmVNYXJrZXIgPSBmdW5jdGlvbihzdHJpbmdCdWlsZGVyLCByYW5nZSwgY2xhenosIGNvbmZpZywgZXh0cmFTdHlsZSkge1xuICAgICAgICB2YXIgdG9wID0gdGhpcy4kZ2V0VG9wKHJhbmdlLnN0YXJ0LnJvdywgY29uZmlnKTtcbiAgICAgICAgdmFyIGhlaWdodCA9IGNvbmZpZy5saW5lSGVpZ2h0O1xuXG4gICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaChcbiAgICAgICAgICAgIFwiPGRpdiBjbGFzcz0nXCIsIGNsYXp6LCBcIicgc3R5bGU9J1wiLFxuICAgICAgICAgICAgXCJoZWlnaHQ6XCIsIGhlaWdodCwgXCJweDtcIixcbiAgICAgICAgICAgIFwidG9wOlwiLCB0b3AsIFwicHg7XCIsXG4gICAgICAgICAgICBcImxlZnQ6MDtyaWdodDowO1wiLCBleHRyYVN0eWxlIHx8IFwiXCIsIFwiJz48L2Rpdj5cIlxuICAgICAgICApO1xuICAgIH07XG5cbn0pLmNhbGwoTWFya2VyLnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuTWFya2VyID0gTWFya2VyO1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9sYXllci90ZXh0XCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL29vcFwiLFwiYWNlL2xpYi9kb21cIixcImFjZS9saWIvbGFuZ1wiLFwiYWNlL2xpYi91c2VyYWdlbnRcIixcImFjZS9saWIvZXZlbnRfZW1pdHRlclwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBvb3AgPSBhY2VxdWlyZShcIi4uL2xpYi9vb3BcIik7XG52YXIgZG9tID0gYWNlcXVpcmUoXCIuLi9saWIvZG9tXCIpO1xudmFyIGxhbmcgPSBhY2VxdWlyZShcIi4uL2xpYi9sYW5nXCIpO1xudmFyIHVzZXJhZ2VudCA9IGFjZXF1aXJlKFwiLi4vbGliL3VzZXJhZ2VudFwiKTtcbnZhciBFdmVudEVtaXR0ZXIgPSBhY2VxdWlyZShcIi4uL2xpYi9ldmVudF9lbWl0dGVyXCIpLkV2ZW50RW1pdHRlcjtcblxudmFyIFRleHQgPSBmdW5jdGlvbihwYXJlbnRFbCkge1xuICAgIHRoaXMuZWxlbWVudCA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSBcImFjZV9sYXllciBhY2VfdGV4dC1sYXllclwiO1xuICAgIHBhcmVudEVsLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7XG4gICAgdGhpcy4kdXBkYXRlRW9sQ2hhciA9IHRoaXMuJHVwZGF0ZUVvbENoYXIuYmluZCh0aGlzKTtcbn07XG5cbihmdW5jdGlvbigpIHtcblxuICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTtcblxuICAgIHRoaXMuRU9GX0NIQVIgPSBcIlxceEI2XCI7XG4gICAgdGhpcy5FT0xfQ0hBUl9MRiA9IFwiXFx4QUNcIjtcbiAgICB0aGlzLkVPTF9DSEFSX0NSTEYgPSBcIlxceGE0XCI7XG4gICAgdGhpcy5FT0xfQ0hBUiA9IHRoaXMuRU9MX0NIQVJfTEY7XG4gICAgdGhpcy5UQUJfQ0hBUiA9IFwiXFx1MjAxNFwiOyAvL1wiXFx1MjFFNVwiO1xuICAgIHRoaXMuU1BBQ0VfQ0hBUiA9IFwiXFx4QjdcIjtcbiAgICB0aGlzLiRwYWRkaW5nID0gMDtcblxuICAgIHRoaXMuJHVwZGF0ZUVvbENoYXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIEVPTF9DSEFSID0gdGhpcy5zZXNzaW9uLmRvYy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkgPT0gXCJcXG5cIlxuICAgICAgICAgICA/IHRoaXMuRU9MX0NIQVJfTEZcbiAgICAgICAgICAgOiB0aGlzLkVPTF9DSEFSX0NSTEY7XG4gICAgICAgIGlmICh0aGlzLkVPTF9DSEFSICE9IEVPTF9DSEFSKSB7XG4gICAgICAgICAgICB0aGlzLkVPTF9DSEFSID0gRU9MX0NIQVI7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLnNldFBhZGRpbmcgPSBmdW5jdGlvbihwYWRkaW5nKSB7XG4gICAgICAgIHRoaXMuJHBhZGRpbmcgPSBwYWRkaW5nO1xuICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUucGFkZGluZyA9IFwiMCBcIiArIHBhZGRpbmcgKyBcInB4XCI7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0TGluZUhlaWdodCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kZm9udE1ldHJpY3MuJGNoYXJhY3RlclNpemUuaGVpZ2h0IHx8IDA7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0Q2hhcmFjdGVyV2lkdGggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGZvbnRNZXRyaWNzLiRjaGFyYWN0ZXJTaXplLndpZHRoIHx8IDA7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLiRzZXRGb250TWV0cmljcyA9IGZ1bmN0aW9uKG1lYXN1cmUpIHtcbiAgICAgICAgdGhpcy4kZm9udE1ldHJpY3MgPSBtZWFzdXJlO1xuICAgICAgICB0aGlzLiRmb250TWV0cmljcy5vbihcImNoYW5nZUNoYXJhY3RlclNpemVcIiwgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgdGhpcy5fc2lnbmFsKFwiY2hhbmdlQ2hhcmFjdGVyU2l6ZVwiLCBlKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy4kcG9sbFNpemVDaGFuZ2VzKCk7XG4gICAgfTtcblxuICAgIHRoaXMuY2hlY2tGb3JTaXplQ2hhbmdlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRmb250TWV0cmljcy5jaGVja0ZvclNpemVDaGFuZ2VzKCk7XG4gICAgfTtcbiAgICB0aGlzLiRwb2xsU2l6ZUNoYW5nZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHBvbGxTaXplQ2hhbmdlc1RpbWVyID0gdGhpcy4kZm9udE1ldHJpY3MuJHBvbGxTaXplQ2hhbmdlcygpO1xuICAgIH07XG4gICAgdGhpcy5zZXRTZXNzaW9uID0gZnVuY3Rpb24oc2Vzc2lvbikge1xuICAgICAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uO1xuICAgICAgICBpZiAoc2Vzc2lvbilcbiAgICAgICAgICAgIHRoaXMuJGNvbXB1dGVUYWJTdHJpbmcoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zaG93SW52aXNpYmxlcyA9IGZhbHNlO1xuICAgIHRoaXMuc2V0U2hvd0ludmlzaWJsZXMgPSBmdW5jdGlvbihzaG93SW52aXNpYmxlcykge1xuICAgICAgICBpZiAodGhpcy5zaG93SW52aXNpYmxlcyA9PSBzaG93SW52aXNpYmxlcylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICB0aGlzLnNob3dJbnZpc2libGVzID0gc2hvd0ludmlzaWJsZXM7XG4gICAgICAgIHRoaXMuJGNvbXB1dGVUYWJTdHJpbmcoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIHRoaXMuZGlzcGxheUluZGVudEd1aWRlcyA9IHRydWU7XG4gICAgdGhpcy5zZXREaXNwbGF5SW5kZW50R3VpZGVzID0gZnVuY3Rpb24oZGlzcGxheSkge1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5SW5kZW50R3VpZGVzID09IGRpc3BsYXkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5kaXNwbGF5SW5kZW50R3VpZGVzID0gZGlzcGxheTtcbiAgICAgICAgdGhpcy4kY29tcHV0ZVRhYlN0cmluZygpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdGhpcy4kdGFiU3RyaW5ncyA9IFtdO1xuICAgIHRoaXMub25DaGFuZ2VUYWJTaXplID1cbiAgICB0aGlzLiRjb21wdXRlVGFiU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB0YWJTaXplID0gdGhpcy5zZXNzaW9uLmdldFRhYlNpemUoKTtcbiAgICAgICAgdGhpcy50YWJTaXplID0gdGFiU2l6ZTtcbiAgICAgICAgdmFyIHRhYlN0ciA9IHRoaXMuJHRhYlN0cmluZ3MgPSBbMF07XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdGFiU2l6ZSArIDE7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0ludmlzaWJsZXMpIHtcbiAgICAgICAgICAgICAgICB0YWJTdHIucHVzaChcIjxzcGFuIGNsYXNzPSdhY2VfaW52aXNpYmxlIGFjZV9pbnZpc2libGVfdGFiJz5cIlxuICAgICAgICAgICAgICAgICAgICArIGxhbmcuc3RyaW5nUmVwZWF0KHRoaXMuVEFCX0NIQVIsIGkpXG4gICAgICAgICAgICAgICAgICAgICsgXCI8L3NwYW4+XCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YWJTdHIucHVzaChsYW5nLnN0cmluZ1JlcGVhdChcIiBcIiwgaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXlJbmRlbnRHdWlkZXMpIHtcbiAgICAgICAgICAgIHRoaXMuJGluZGVudEd1aWRlUmUgPSAgL1xcc1xcU3wgXFx0fFxcdCB8XFxzJC87XG4gICAgICAgICAgICB2YXIgY2xhc3NOYW1lID0gXCJhY2VfaW5kZW50LWd1aWRlXCI7XG4gICAgICAgICAgICB2YXIgc3BhY2VDbGFzcyA9IFwiXCI7XG4gICAgICAgICAgICB2YXIgdGFiQ2xhc3MgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0ludmlzaWJsZXMpIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gXCIgYWNlX2ludmlzaWJsZVwiO1xuICAgICAgICAgICAgICAgIHNwYWNlQ2xhc3MgPSBcIiBhY2VfaW52aXNpYmxlX3NwYWNlXCI7XG4gICAgICAgICAgICAgICAgdGFiQ2xhc3MgPSBcIiBhY2VfaW52aXNpYmxlX3RhYlwiO1xuICAgICAgICAgICAgICAgIHZhciBzcGFjZUNvbnRlbnQgPSBsYW5nLnN0cmluZ1JlcGVhdCh0aGlzLlNQQUNFX0NIQVIsIHRoaXMudGFiU2l6ZSk7XG4gICAgICAgICAgICAgICAgdmFyIHRhYkNvbnRlbnQgPSBsYW5nLnN0cmluZ1JlcGVhdCh0aGlzLlRBQl9DSEFSLCB0aGlzLnRhYlNpemUpO1xuICAgICAgICAgICAgfSBlbHNle1xuICAgICAgICAgICAgICAgIHZhciBzcGFjZUNvbnRlbnQgPSBsYW5nLnN0cmluZ1JlcGVhdChcIiBcIiwgdGhpcy50YWJTaXplKTtcbiAgICAgICAgICAgICAgICB2YXIgdGFiQ29udGVudCA9IHNwYWNlQ29udGVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy4kdGFiU3RyaW5nc1tcIiBcIl0gPSBcIjxzcGFuIGNsYXNzPSdcIiArIGNsYXNzTmFtZSArIHNwYWNlQ2xhc3MgKyBcIic+XCIgKyBzcGFjZUNvbnRlbnQgKyBcIjwvc3Bhbj5cIjtcbiAgICAgICAgICAgIHRoaXMuJHRhYlN0cmluZ3NbXCJcXHRcIl0gPSBcIjxzcGFuIGNsYXNzPSdcIiArIGNsYXNzTmFtZSArIHRhYkNsYXNzICsgXCInPlwiICsgdGFiQ29udGVudCArIFwiPC9zcGFuPlwiO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlTGluZXMgPSBmdW5jdGlvbihjb25maWcsIGZpcnN0Um93LCBsYXN0Um93KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5sYXN0Um93ICE9IGNvbmZpZy5sYXN0Um93IHx8XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5maXJzdFJvdyAhPSBjb25maWcuZmlyc3RSb3cpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsTGluZXMoY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcblxuICAgICAgICB2YXIgZmlyc3QgPSBNYXRoLm1heChmaXJzdFJvdywgY29uZmlnLmZpcnN0Um93KTtcbiAgICAgICAgdmFyIGxhc3QgPSBNYXRoLm1pbihsYXN0Um93LCBjb25maWcubGFzdFJvdyk7XG5cbiAgICAgICAgdmFyIGxpbmVFbGVtZW50cyA9IHRoaXMuZWxlbWVudC5jaGlsZE5vZGVzO1xuICAgICAgICB2YXIgbGluZUVsZW1lbnRzSWR4ID0gMDtcblxuICAgICAgICBmb3IgKHZhciByb3cgPSBjb25maWcuZmlyc3RSb3c7IHJvdyA8IGZpcnN0OyByb3crKykge1xuICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdldEZvbGRMaW5lKHJvdyk7XG4gICAgICAgICAgICBpZiAoZm9sZExpbmUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZm9sZExpbmUuY29udGFpbnNSb3coZmlyc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZm9sZExpbmUuc3RhcnQucm93O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByb3cgPSBmb2xkTGluZS5lbmQucm93O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbmVFbGVtZW50c0lkeCArKztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByb3cgPSBmaXJzdDtcbiAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdldE5leHRGb2xkTGluZShyb3cpO1xuICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOiBJbmZpbml0eTtcblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgaWYgKHJvdyA+IGZvbGRTdGFydCkge1xuICAgICAgICAgICAgICAgIHJvdyA9IGZvbGRMaW5lLmVuZC5yb3crMTtcbiAgICAgICAgICAgICAgICBmb2xkTGluZSA9IHRoaXMuc2Vzc2lvbi5nZXROZXh0Rm9sZExpbmUocm93LCBmb2xkTGluZSk7XG4gICAgICAgICAgICAgICAgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOkluZmluaXR5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJvdyA+IGxhc3QpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIHZhciBsaW5lRWxlbWVudCA9IGxpbmVFbGVtZW50c1tsaW5lRWxlbWVudHNJZHgrK107XG4gICAgICAgICAgICBpZiAobGluZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuJHJlbmRlckxpbmUoXG4gICAgICAgICAgICAgICAgICAgIGh0bWwsIHJvdywgIXRoaXMuJHVzZUxpbmVHcm91cHMoKSwgcm93ID09IGZvbGRTdGFydCA/IGZvbGRMaW5lIDogZmFsc2VcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGxpbmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGNvbmZpZy5saW5lSGVpZ2h0ICogdGhpcy5zZXNzaW9uLmdldFJvd0xlbmd0aChyb3cpICsgXCJweFwiO1xuICAgICAgICAgICAgICAgIGxpbmVFbGVtZW50LmlubmVySFRNTCA9IGh0bWwuam9pbihcIlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvdysrO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuc2Nyb2xsTGluZXMgPSBmdW5jdGlvbihjb25maWcpIHtcbiAgICAgICAgdmFyIG9sZENvbmZpZyA9IHRoaXMuY29uZmlnO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcblxuICAgICAgICBpZiAoIW9sZENvbmZpZyB8fCBvbGRDb25maWcubGFzdFJvdyA8IGNvbmZpZy5maXJzdFJvdylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShjb25maWcpO1xuXG4gICAgICAgIGlmIChjb25maWcubGFzdFJvdyA8IG9sZENvbmZpZy5maXJzdFJvdylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShjb25maWcpO1xuXG4gICAgICAgIHZhciBlbCA9IHRoaXMuZWxlbWVudDtcbiAgICAgICAgaWYgKG9sZENvbmZpZy5maXJzdFJvdyA8IGNvbmZpZy5maXJzdFJvdylcbiAgICAgICAgICAgIGZvciAodmFyIHJvdz10aGlzLnNlc3Npb24uZ2V0Rm9sZGVkUm93Q291bnQob2xkQ29uZmlnLmZpcnN0Um93LCBjb25maWcuZmlyc3RSb3cgLSAxKTsgcm93PjA7IHJvdy0tKVxuICAgICAgICAgICAgICAgIGVsLnJlbW92ZUNoaWxkKGVsLmZpcnN0Q2hpbGQpO1xuXG4gICAgICAgIGlmIChvbGRDb25maWcubGFzdFJvdyA+IGNvbmZpZy5sYXN0Um93KVxuICAgICAgICAgICAgZm9yICh2YXIgcm93PXRoaXMuc2Vzc2lvbi5nZXRGb2xkZWRSb3dDb3VudChjb25maWcubGFzdFJvdyArIDEsIG9sZENvbmZpZy5sYXN0Um93KTsgcm93PjA7IHJvdy0tKVxuICAgICAgICAgICAgICAgIGVsLnJlbW92ZUNoaWxkKGVsLmxhc3RDaGlsZCk7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5maXJzdFJvdyA8IG9sZENvbmZpZy5maXJzdFJvdykge1xuICAgICAgICAgICAgdmFyIGZyYWdtZW50ID0gdGhpcy4kcmVuZGVyTGluZXNGcmFnbWVudChjb25maWcsIGNvbmZpZy5maXJzdFJvdywgb2xkQ29uZmlnLmZpcnN0Um93IC0gMSk7XG4gICAgICAgICAgICBpZiAoZWwuZmlyc3RDaGlsZClcbiAgICAgICAgICAgICAgICBlbC5pbnNlcnRCZWZvcmUoZnJhZ21lbnQsIGVsLmZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGVsLmFwcGVuZENoaWxkKGZyYWdtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcubGFzdFJvdyA+IG9sZENvbmZpZy5sYXN0Um93KSB7XG4gICAgICAgICAgICB2YXIgZnJhZ21lbnQgPSB0aGlzLiRyZW5kZXJMaW5lc0ZyYWdtZW50KGNvbmZpZywgb2xkQ29uZmlnLmxhc3RSb3cgKyAxLCBjb25maWcubGFzdFJvdyk7XG4gICAgICAgICAgICBlbC5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy4kcmVuZGVyTGluZXNGcmFnbWVudCA9IGZ1bmN0aW9uKGNvbmZpZywgZmlyc3RSb3csIGxhc3RSb3cpIHtcbiAgICAgICAgdmFyIGZyYWdtZW50ID0gdGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICB2YXIgcm93ID0gZmlyc3RSb3c7XG4gICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuc2Vzc2lvbi5nZXROZXh0Rm9sZExpbmUocm93KTtcbiAgICAgICAgdmFyIGZvbGRTdGFydCA9IGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7XG5cbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGlmIChyb3cgPiBmb2xkU3RhcnQpIHtcbiAgICAgICAgICAgICAgICByb3cgPSBmb2xkTGluZS5lbmQucm93KzE7XG4gICAgICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLnNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKHJvdywgZm9sZExpbmUpO1xuICAgICAgICAgICAgICAgIGZvbGRTdGFydCA9IGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocm93ID4gbGFzdFJvdylcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgICAgICAgICB2YXIgaHRtbCA9IFtdO1xuICAgICAgICAgICAgdGhpcy4kcmVuZGVyTGluZShodG1sLCByb3csIGZhbHNlLCByb3cgPT0gZm9sZFN0YXJ0ID8gZm9sZExpbmUgOiBmYWxzZSk7XG4gICAgICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gaHRtbC5qb2luKFwiXCIpO1xuICAgICAgICAgICAgaWYgKHRoaXMuJHVzZUxpbmVHcm91cHMoKSkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc05hbWUgPSAnYWNlX2xpbmVfZ3JvdXAnO1xuICAgICAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmhlaWdodCA9IGNvbmZpZy5saW5lSGVpZ2h0ICogdGhpcy5zZXNzaW9uLmdldFJvd0xlbmd0aChyb3cpICsgXCJweFwiO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdoaWxlKGNvbnRhaW5lci5maXJzdENoaWxkKVxuICAgICAgICAgICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChjb250YWluZXIuZmlyc3RDaGlsZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJvdysrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmcmFnbWVudDtcbiAgICB9O1xuXG4gICAgdGhpcy51cGRhdGUgPSBmdW5jdGlvbihjb25maWcpIHtcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG5cbiAgICAgICAgdmFyIGh0bWwgPSBbXTtcbiAgICAgICAgdmFyIGZpcnN0Um93ID0gY29uZmlnLmZpcnN0Um93LCBsYXN0Um93ID0gY29uZmlnLmxhc3RSb3c7XG5cbiAgICAgICAgdmFyIHJvdyA9IGZpcnN0Um93O1xuICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLnNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKHJvdyk7XG4gICAgICAgIHZhciBmb2xkU3RhcnQgPSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6IEluZmluaXR5O1xuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBpZiAocm93ID4gZm9sZFN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgcm93ID0gZm9sZExpbmUuZW5kLnJvdysxO1xuICAgICAgICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdldE5leHRGb2xkTGluZShyb3csIGZvbGRMaW5lKTtcbiAgICAgICAgICAgICAgICBmb2xkU3RhcnQgPSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6SW5maW5pdHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocm93ID4gbGFzdFJvdylcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgaWYgKHRoaXMuJHVzZUxpbmVHcm91cHMoKSlcbiAgICAgICAgICAgICAgICBodG1sLnB1c2goXCI8ZGl2IGNsYXNzPSdhY2VfbGluZV9ncm91cCcgc3R5bGU9J2hlaWdodDpcIiwgY29uZmlnLmxpbmVIZWlnaHQqdGhpcy5zZXNzaW9uLmdldFJvd0xlbmd0aChyb3cpLCBcInB4Jz5cIik7XG5cbiAgICAgICAgICAgIHRoaXMuJHJlbmRlckxpbmUoaHRtbCwgcm93LCBmYWxzZSwgcm93ID09IGZvbGRTdGFydCA/IGZvbGRMaW5lIDogZmFsc2UpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy4kdXNlTGluZUdyb3VwcygpKVxuICAgICAgICAgICAgICAgIGh0bWwucHVzaChcIjwvZGl2PlwiKTsgLy8gZW5kIHRoZSBsaW5lIGdyb3VwXG5cbiAgICAgICAgICAgIHJvdysrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgPSBodG1sLmpvaW4oXCJcIik7XG4gICAgfTtcblxuICAgIHRoaXMuJHRleHRUb2tlbiA9IHtcbiAgICAgICAgXCJ0ZXh0XCI6IHRydWUsXG4gICAgICAgIFwicnBhcmVuXCI6IHRydWUsXG4gICAgICAgIFwibHBhcmVuXCI6IHRydWVcbiAgICB9O1xuXG4gICAgdGhpcy4kcmVuZGVyVG9rZW4gPSBmdW5jdGlvbihzdHJpbmdCdWlsZGVyLCBzY3JlZW5Db2x1bW4sIHRva2VuLCB2YWx1ZSkge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHZhciByZXBsYWNlUmVnID0gL1xcdHwmfDx8PnwoICspfChbXFx4MDAtXFx4MWZcXHg4MC1cXHhhMFxceGFkXFx1MTY4MFxcdTE4MEVcXHUyMDAwLVxcdTIwMGZcXHUyMDI4XFx1MjAyOVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdUZFRkZcXHVGRkY5LVxcdUZGRkNdKXxbXFx1MTEwMC1cXHUxMTVGXFx1MTFBMy1cXHUxMUE3XFx1MTFGQS1cXHUxMUZGXFx1MjMyOS1cXHUyMzJBXFx1MkU4MC1cXHUyRTk5XFx1MkU5Qi1cXHUyRUYzXFx1MkYwMC1cXHUyRkQ1XFx1MkZGMC1cXHUyRkZCXFx1MzAwMC1cXHUzMDNFXFx1MzA0MS1cXHUzMDk2XFx1MzA5OS1cXHUzMEZGXFx1MzEwNS1cXHUzMTJEXFx1MzEzMS1cXHUzMThFXFx1MzE5MC1cXHUzMUJBXFx1MzFDMC1cXHUzMUUzXFx1MzFGMC1cXHUzMjFFXFx1MzIyMC1cXHUzMjQ3XFx1MzI1MC1cXHUzMkZFXFx1MzMwMC1cXHU0REJGXFx1NEUwMC1cXHVBNDhDXFx1QTQ5MC1cXHVBNEM2XFx1QTk2MC1cXHVBOTdDXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQUZGXFx1RkUxMC1cXHVGRTE5XFx1RkUzMC1cXHVGRTUyXFx1RkU1NC1cXHVGRTY2XFx1RkU2OC1cXHVGRTZCXFx1RkYwMS1cXHVGRjYwXFx1RkZFMC1cXHVGRkU2XXxbXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdL2c7XG4gICAgICAgIHZhciByZXBsYWNlRnVuYyA9IGZ1bmN0aW9uKGMsIGEsIGIsIHRhYklkeCwgaWR4NCkge1xuICAgICAgICAgICAgaWYgKGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zaG93SW52aXNpYmxlc1xuICAgICAgICAgICAgICAgICAgICA/IFwiPHNwYW4gY2xhc3M9J2FjZV9pbnZpc2libGUgYWNlX2ludmlzaWJsZV9zcGFjZSc+XCIgKyBsYW5nLnN0cmluZ1JlcGVhdChzZWxmLlNQQUNFX0NIQVIsIGMubGVuZ3RoKSArIFwiPC9zcGFuPlwiXG4gICAgICAgICAgICAgICAgICAgIDogYztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSBcIiZcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIiYjMzg7XCI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gXCI8XCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCImIzYwO1wiO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjID09IFwiPlwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiJiM2MjtcIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSBcIlxcdFwiKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRhYlNpemUgPSBzZWxmLnNlc3Npb24uZ2V0U2NyZWVuVGFiU2l6ZShzY3JlZW5Db2x1bW4gKyB0YWJJZHgpO1xuICAgICAgICAgICAgICAgIHNjcmVlbkNvbHVtbiArPSB0YWJTaXplIC0gMTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi4kdGFiU3RyaW5nc1t0YWJTaXplXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSBcIlxcdTMwMDBcIikge1xuICAgICAgICAgICAgICAgIHZhciBjbGFzc1RvVXNlID0gc2VsZi5zaG93SW52aXNpYmxlcyA/IFwiYWNlX2NqayBhY2VfaW52aXNpYmxlIGFjZV9pbnZpc2libGVfc3BhY2VcIiA6IFwiYWNlX2Nqa1wiO1xuICAgICAgICAgICAgICAgIHZhciBzcGFjZSA9IHNlbGYuc2hvd0ludmlzaWJsZXMgPyBzZWxmLlNQQUNFX0NIQVIgOiBcIlwiO1xuICAgICAgICAgICAgICAgIHNjcmVlbkNvbHVtbiArPSAxO1xuICAgICAgICAgICAgICAgIHJldHVybiBcIjxzcGFuIGNsYXNzPSdcIiArIGNsYXNzVG9Vc2UgKyBcIicgc3R5bGU9J3dpZHRoOlwiICtcbiAgICAgICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLmNoYXJhY3RlcldpZHRoICogMikgK1xuICAgICAgICAgICAgICAgICAgICBcInB4Jz5cIiArIHNwYWNlICsgXCI8L3NwYW4+XCI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCI8c3BhbiBjbGFzcz0nYWNlX2ludmlzaWJsZSBhY2VfaW52aXNpYmxlX3NwYWNlIGFjZV9pbnZhbGlkJz5cIiArIHNlbGYuU1BBQ0VfQ0hBUiArIFwiPC9zcGFuPlwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzY3JlZW5Db2x1bW4gKz0gMTtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCI8c3BhbiBjbGFzcz0nYWNlX2Nqaycgc3R5bGU9J3dpZHRoOlwiICtcbiAgICAgICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLmNoYXJhY3RlcldpZHRoICogMikgK1xuICAgICAgICAgICAgICAgICAgICBcInB4Jz5cIiArIGMgKyBcIjwvc3Bhbj5cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgb3V0cHV0ID0gdmFsdWUucmVwbGFjZShyZXBsYWNlUmVnLCByZXBsYWNlRnVuYyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLiR0ZXh0VG9rZW5bdG9rZW4udHlwZV0pIHtcbiAgICAgICAgICAgIHZhciBjbGFzc2VzID0gXCJhY2VfXCIgKyB0b2tlbi50eXBlLnJlcGxhY2UoL1xcLi9nLCBcIiBhY2VfXCIpO1xuICAgICAgICAgICAgdmFyIHN0eWxlID0gXCJcIjtcbiAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09IFwiZm9sZFwiKVxuICAgICAgICAgICAgICAgIHN0eWxlID0gXCIgc3R5bGU9J3dpZHRoOlwiICsgKHRva2VuLnZhbHVlLmxlbmd0aCAqIHRoaXMuY29uZmlnLmNoYXJhY3RlcldpZHRoKSArIFwicHg7JyBcIjtcbiAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaChcIjxzcGFuIGNsYXNzPSdcIiwgY2xhc3NlcywgXCInXCIsIHN0eWxlLCBcIj5cIiwgb3V0cHV0LCBcIjwvc3Bhbj5cIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2gob3V0cHV0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NyZWVuQ29sdW1uICsgdmFsdWUubGVuZ3RoO1xuICAgIH07XG5cbiAgICB0aGlzLnJlbmRlckluZGVudEd1aWRlID0gZnVuY3Rpb24oc3RyaW5nQnVpbGRlciwgdmFsdWUsIG1heCkge1xuICAgICAgICB2YXIgY29scyA9IHZhbHVlLnNlYXJjaCh0aGlzLiRpbmRlbnRHdWlkZVJlKTtcbiAgICAgICAgaWYgKGNvbHMgPD0gMCB8fCBjb2xzID49IG1heClcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlWzBdID09IFwiIFwiKSB7XG4gICAgICAgICAgICBjb2xzIC09IGNvbHMgJSB0aGlzLnRhYlNpemU7XG4gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2gobGFuZy5zdHJpbmdSZXBlYXQodGhpcy4kdGFiU3RyaW5nc1tcIiBcIl0sIGNvbHMvdGhpcy50YWJTaXplKSk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyKGNvbHMpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlWzBdID09IFwiXFx0XCIpIHtcbiAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaChsYW5nLnN0cmluZ1JlcGVhdCh0aGlzLiR0YWJTdHJpbmdzW1wiXFx0XCJdLCBjb2xzKSk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyKGNvbHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuXG4gICAgdGhpcy4kcmVuZGVyV3JhcHBlZExpbmUgPSBmdW5jdGlvbihzdHJpbmdCdWlsZGVyLCB0b2tlbnMsIHNwbGl0cywgb25seUNvbnRlbnRzKSB7XG4gICAgICAgIHZhciBjaGFycyA9IDA7XG4gICAgICAgIHZhciBzcGxpdCA9IDA7XG4gICAgICAgIHZhciBzcGxpdENoYXJzID0gc3BsaXRzWzBdO1xuICAgICAgICB2YXIgc2NyZWVuQ29sdW1uID0gMDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldO1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gdG9rZW4udmFsdWU7XG4gICAgICAgICAgICBpZiAoaSA9PSAwICYmIHRoaXMuZGlzcGxheUluZGVudEd1aWRlcykge1xuICAgICAgICAgICAgICAgIGNoYXJzID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5yZW5kZXJJbmRlbnRHdWlkZShzdHJpbmdCdWlsZGVyLCB2YWx1ZSwgc3BsaXRDaGFycyk7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2hhcnMgLT0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY2hhcnMgKyB2YWx1ZS5sZW5ndGggPCBzcGxpdENoYXJzKSB7XG4gICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uID0gdGhpcy4kcmVuZGVyVG9rZW4oc3RyaW5nQnVpbGRlciwgc2NyZWVuQ29sdW1uLCB0b2tlbiwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGNoYXJzICs9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGNoYXJzICsgdmFsdWUubGVuZ3RoID49IHNwbGl0Q2hhcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uID0gdGhpcy4kcmVuZGVyVG9rZW4oXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLCBzY3JlZW5Db2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiwgdmFsdWUuc3Vic3RyaW5nKDAsIHNwbGl0Q2hhcnMgLSBjaGFycylcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoc3BsaXRDaGFycyAtIGNoYXJzKTtcbiAgICAgICAgICAgICAgICAgICAgY2hhcnMgPSBzcGxpdENoYXJzO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghb25seUNvbnRlbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2goXCI8L2Rpdj5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J2FjZV9saW5lJyBzdHlsZT0naGVpZ2h0OlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmxpbmVIZWlnaHQsIFwicHgnPlwiXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKGxhbmcuc3RyaW5nUmVwZWF0KFwiXFx4YTBcIiwgc3BsaXRzLmluZGVudCkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHNwbGl0ICsrO1xuICAgICAgICAgICAgICAgICAgICBzY3JlZW5Db2x1bW4gPSAwO1xuICAgICAgICAgICAgICAgICAgICBzcGxpdENoYXJzID0gc3BsaXRzW3NwbGl0XSB8fCBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhcnMgKz0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBzY3JlZW5Db2x1bW4gPSB0aGlzLiRyZW5kZXJUb2tlbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIsIHNjcmVlbkNvbHVtbiwgdG9rZW4sIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuJHJlbmRlclNpbXBsZUxpbmUgPSBmdW5jdGlvbihzdHJpbmdCdWlsZGVyLCB0b2tlbnMpIHtcbiAgICAgICAgdmFyIHNjcmVlbkNvbHVtbiA9IDA7XG4gICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1swXTtcbiAgICAgICAgdmFyIHZhbHVlID0gdG9rZW4udmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXlJbmRlbnRHdWlkZXMpXG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMucmVuZGVySW5kZW50R3VpZGUoc3RyaW5nQnVpbGRlciwgdmFsdWUpO1xuICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICBzY3JlZW5Db2x1bW4gPSB0aGlzLiRyZW5kZXJUb2tlbihzdHJpbmdCdWlsZGVyLCBzY3JlZW5Db2x1bW4sIHRva2VuLCB2YWx1ZSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIHZhbHVlID0gdG9rZW4udmFsdWU7XG4gICAgICAgICAgICBzY3JlZW5Db2x1bW4gPSB0aGlzLiRyZW5kZXJUb2tlbihzdHJpbmdCdWlsZGVyLCBzY3JlZW5Db2x1bW4sIHRva2VuLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuJHJlbmRlckxpbmUgPSBmdW5jdGlvbihzdHJpbmdCdWlsZGVyLCByb3csIG9ubHlDb250ZW50cywgZm9sZExpbmUpIHtcbiAgICAgICAgaWYgKCFmb2xkTGluZSAmJiBmb2xkTGluZSAhPSBmYWxzZSlcbiAgICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdldEZvbGRMaW5lKHJvdyk7XG5cbiAgICAgICAgaWYgKGZvbGRMaW5lKVxuICAgICAgICAgICAgdmFyIHRva2VucyA9IHRoaXMuJGdldEZvbGRMaW5lVG9rZW5zKHJvdywgZm9sZExpbmUpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB2YXIgdG9rZW5zID0gdGhpcy5zZXNzaW9uLmdldFRva2Vucyhyb3cpO1xuXG5cbiAgICAgICAgaWYgKCFvbmx5Q29udGVudHMpIHtcbiAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaChcbiAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J2FjZV9saW5lJyBzdHlsZT0naGVpZ2h0OlwiLCBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcubGluZUhlaWdodCAqIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHVzZUxpbmVHcm91cHMoKSA/IDEgOnRoaXMuc2Vzc2lvbi5nZXRSb3dMZW5ndGgocm93KVxuICAgICAgICAgICAgICAgICAgICApLCBcInB4Jz5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0b2tlbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgc3BsaXRzID0gdGhpcy5zZXNzaW9uLmdldFJvd1NwbGl0RGF0YShyb3cpO1xuICAgICAgICAgICAgaWYgKHNwbGl0cyAmJiBzcGxpdHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHRoaXMuJHJlbmRlcldyYXBwZWRMaW5lKHN0cmluZ0J1aWxkZXIsIHRva2Vucywgc3BsaXRzLCBvbmx5Q29udGVudHMpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuJHJlbmRlclNpbXBsZUxpbmUoc3RyaW5nQnVpbGRlciwgdG9rZW5zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNob3dJbnZpc2libGVzKSB7XG4gICAgICAgICAgICBpZiAoZm9sZExpbmUpXG4gICAgICAgICAgICAgICAgcm93ID0gZm9sZExpbmUuZW5kLnJvdztcblxuICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKFxuICAgICAgICAgICAgICAgIFwiPHNwYW4gY2xhc3M9J2FjZV9pbnZpc2libGUgYWNlX2ludmlzaWJsZV9lb2wnPlwiLFxuICAgICAgICAgICAgICAgIHJvdyA9PSB0aGlzLnNlc3Npb24uZ2V0TGVuZ3RoKCkgLSAxID8gdGhpcy5FT0ZfQ0hBUiA6IHRoaXMuRU9MX0NIQVIsXG4gICAgICAgICAgICAgICAgXCI8L3NwYW4+XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvbmx5Q29udGVudHMpXG4gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2goXCI8L2Rpdj5cIik7XG4gICAgfTtcblxuICAgIHRoaXMuJGdldEZvbGRMaW5lVG9rZW5zID0gZnVuY3Rpb24ocm93LCBmb2xkTGluZSkge1xuICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcbiAgICAgICAgdmFyIHJlbmRlclRva2VucyA9IFtdO1xuXG4gICAgICAgIGZ1bmN0aW9uIGFkZFRva2Vucyh0b2tlbnMsIGZyb20sIHRvKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gMCwgY29sID0gMDtcbiAgICAgICAgICAgIHdoaWxlICgoY29sICsgdG9rZW5zW2lkeF0udmFsdWUubGVuZ3RoKSA8IGZyb20pIHtcbiAgICAgICAgICAgICAgICBjb2wgKz0gdG9rZW5zW2lkeF0udmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlkeCsrO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlkeCA9PSB0b2tlbnMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29sICE9IGZyb20pIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB0b2tlbnNbaWR4XS52YWx1ZS5zdWJzdHJpbmcoZnJvbSAtIGNvbCk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+ICh0byAtIGZyb20pKVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCB0byAtIGZyb20pO1xuXG4gICAgICAgICAgICAgICAgcmVuZGVyVG9rZW5zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiB0b2tlbnNbaWR4XS50eXBlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGNvbCA9IGZyb20gKyB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWR4ICs9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdoaWxlIChjb2wgPCB0byAmJiBpZHggPCB0b2tlbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdG9rZW5zW2lkeF0udmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCArIGNvbCA+IHRvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlclRva2Vucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHRva2Vuc1tpZHhdLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUuc3Vic3RyaW5nKDAsIHRvIC0gY29sKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyVG9rZW5zLnB1c2godG9rZW5zW2lkeF0pO1xuICAgICAgICAgICAgICAgIGNvbCArPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWR4ICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdG9rZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMocm93KTtcbiAgICAgICAgZm9sZExpbmUud2FsayhmdW5jdGlvbihwbGFjZWhvbGRlciwgcm93LCBjb2x1bW4sIGxhc3RDb2x1bW4sIGlzTmV3Um93KSB7XG4gICAgICAgICAgICBpZiAocGxhY2Vob2xkZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJlbmRlclRva2Vucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJmb2xkXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNOZXdSb3cpXG4gICAgICAgICAgICAgICAgICAgIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7XG5cbiAgICAgICAgICAgICAgICBpZiAodG9rZW5zLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgYWRkVG9rZW5zKHRva2VucywgbGFzdENvbHVtbiwgY29sdW1uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZm9sZExpbmUuZW5kLnJvdywgdGhpcy5zZXNzaW9uLmdldExpbmUoZm9sZExpbmUuZW5kLnJvdykubGVuZ3RoKTtcblxuICAgICAgICByZXR1cm4gcmVuZGVyVG9rZW5zO1xuICAgIH07XG5cbiAgICB0aGlzLiR1c2VMaW5lR3JvdXBzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uZ2V0VXNlV3JhcE1vZGUoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy4kcG9sbFNpemVDaGFuZ2VzVGltZXIpO1xuICAgICAgICBpZiAodGhpcy4kbWVhc3VyZU5vZGUpXG4gICAgICAgICAgICB0aGlzLiRtZWFzdXJlTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuJG1lYXN1cmVOb2RlKTtcbiAgICAgICAgZGVsZXRlIHRoaXMuJG1lYXN1cmVOb2RlO1xuICAgIH07XG5cbn0pLmNhbGwoVGV4dC5wcm90b3R5cGUpO1xuXG5leHBvcnRzLlRleHQgPSBUZXh0O1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9sYXllci9jdXJzb3JcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvZG9tXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGRvbSA9IGFjZXF1aXJlKFwiLi4vbGliL2RvbVwiKTtcbnZhciBpc0lFODtcblxudmFyIEN1cnNvciA9IGZ1bmN0aW9uKHBhcmVudEVsKSB7XG4gICAgdGhpcy5lbGVtZW50ID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9IFwiYWNlX2xheWVyIGFjZV9jdXJzb3ItbGF5ZXJcIjtcbiAgICBwYXJlbnRFbC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpO1xuICAgIFxuICAgIGlmIChpc0lFOCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICBpc0lFOCA9ICEoXCJvcGFjaXR5XCIgaW4gdGhpcy5lbGVtZW50LnN0eWxlKTtcblxuICAgIHRoaXMuaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy5pc0JsaW5raW5nID0gdHJ1ZTtcbiAgICB0aGlzLmJsaW5rSW50ZXJ2YWwgPSAxMDAwO1xuICAgIHRoaXMuc21vb3RoQmxpbmtpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuY3Vyc29ycyA9IFtdO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5hZGRDdXJzb3IoKTtcbiAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCBcImFjZV9oaWRkZW4tY3Vyc29yc1wiKTtcbiAgICB0aGlzLiR1cGRhdGVDdXJzb3JzID0gKGlzSUU4XG4gICAgICAgID8gdGhpcy4kdXBkYXRlVmlzaWJpbGl0eVxuICAgICAgICA6IHRoaXMuJHVwZGF0ZU9wYWNpdHkpLmJpbmQodGhpcyk7XG59O1xuXG4oZnVuY3Rpb24oKSB7XG4gICAgXG4gICAgdGhpcy4kdXBkYXRlVmlzaWJpbGl0eSA9IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB2YXIgY3Vyc29ycyA9IHRoaXMuY3Vyc29ycztcbiAgICAgICAgZm9yICh2YXIgaSA9IGN1cnNvcnMubGVuZ3RoOyBpLS07IClcbiAgICAgICAgICAgIGN1cnNvcnNbaV0uc3R5bGUudmlzaWJpbGl0eSA9IHZhbCA/IFwiXCIgOiBcImhpZGRlblwiO1xuICAgIH07XG4gICAgdGhpcy4kdXBkYXRlT3BhY2l0eSA9IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB2YXIgY3Vyc29ycyA9IHRoaXMuY3Vyc29ycztcbiAgICAgICAgZm9yICh2YXIgaSA9IGN1cnNvcnMubGVuZ3RoOyBpLS07IClcbiAgICAgICAgICAgIGN1cnNvcnNbaV0uc3R5bGUub3BhY2l0eSA9IHZhbCA/IFwiXCIgOiBcIjBcIjtcbiAgICB9O1xuICAgIFxuXG4gICAgdGhpcy4kcGFkZGluZyA9IDA7XG4gICAgdGhpcy5zZXRQYWRkaW5nID0gZnVuY3Rpb24ocGFkZGluZykge1xuICAgICAgICB0aGlzLiRwYWRkaW5nID0gcGFkZGluZztcbiAgICB9O1xuXG4gICAgdGhpcy5zZXRTZXNzaW9uID0gZnVuY3Rpb24oc2Vzc2lvbikge1xuICAgICAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uO1xuICAgIH07XG5cbiAgICB0aGlzLnNldEJsaW5raW5nID0gZnVuY3Rpb24oYmxpbmtpbmcpIHtcbiAgICAgICAgaWYgKGJsaW5raW5nICE9IHRoaXMuaXNCbGlua2luZyl7XG4gICAgICAgICAgICB0aGlzLmlzQmxpbmtpbmcgPSBibGlua2luZztcbiAgICAgICAgICAgIHRoaXMucmVzdGFydFRpbWVyKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5zZXRCbGlua0ludGVydmFsID0gZnVuY3Rpb24oYmxpbmtJbnRlcnZhbCkge1xuICAgICAgICBpZiAoYmxpbmtJbnRlcnZhbCAhPSB0aGlzLmJsaW5rSW50ZXJ2YWwpe1xuICAgICAgICAgICAgdGhpcy5ibGlua0ludGVydmFsID0gYmxpbmtJbnRlcnZhbDtcbiAgICAgICAgICAgIHRoaXMucmVzdGFydFRpbWVyKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5zZXRTbW9vdGhCbGlua2luZyA9IGZ1bmN0aW9uKHNtb290aEJsaW5raW5nKSB7XG4gICAgICAgIGlmIChzbW9vdGhCbGlua2luZyAhPSB0aGlzLnNtb290aEJsaW5raW5nICYmICFpc0lFOCkge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhCbGlua2luZyA9IHNtb290aEJsaW5raW5nO1xuICAgICAgICAgICAgZG9tLnNldENzc0NsYXNzKHRoaXMuZWxlbWVudCwgXCJhY2Vfc21vb3RoLWJsaW5raW5nXCIsIHNtb290aEJsaW5raW5nKTtcbiAgICAgICAgICAgIHRoaXMuJHVwZGF0ZUN1cnNvcnModHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLiR1cGRhdGVDdXJzb3JzID0gKHRoaXMuJHVwZGF0ZU9wYWNpdHkpLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnJlc3RhcnRUaW1lcigpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuYWRkQ3Vyc29yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlbCA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBlbC5jbGFzc05hbWUgPSBcImFjZV9jdXJzb3JcIjtcbiAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGVsKTtcbiAgICAgICAgdGhpcy5jdXJzb3JzLnB1c2goZWwpO1xuICAgICAgICByZXR1cm4gZWw7XG4gICAgfTtcblxuICAgIHRoaXMucmVtb3ZlQ3Vyc29yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnNvcnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5jdXJzb3JzLnBvcCgpO1xuICAgICAgICAgICAgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7XG4gICAgICAgICAgICByZXR1cm4gZWw7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5oaWRlQ3Vyc29yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIGRvbS5hZGRDc3NDbGFzcyh0aGlzLmVsZW1lbnQsIFwiYWNlX2hpZGRlbi1jdXJzb3JzXCIpO1xuICAgICAgICB0aGlzLnJlc3RhcnRUaW1lcigpO1xuICAgIH07XG5cbiAgICB0aGlzLnNob3dDdXJzb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5pc1Zpc2libGUgPSB0cnVlO1xuICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCBcImFjZV9oaWRkZW4tY3Vyc29yc1wiKTtcbiAgICAgICAgdGhpcy5yZXN0YXJ0VGltZXIoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5yZXN0YXJ0VGltZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHVwZGF0ZSA9IHRoaXMuJHVwZGF0ZUN1cnNvcnM7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbElkKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dElkKTtcbiAgICAgICAgaWYgKHRoaXMuc21vb3RoQmxpbmtpbmcpIHtcbiAgICAgICAgICAgIGRvbS5yZW1vdmVDc3NDbGFzcyh0aGlzLmVsZW1lbnQsIFwiYWNlX3Ntb290aC1ibGlua2luZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdXBkYXRlKHRydWUpO1xuXG4gICAgICAgIGlmICghdGhpcy5pc0JsaW5raW5nIHx8ICF0aGlzLmJsaW5rSW50ZXJ2YWwgfHwgIXRoaXMuaXNWaXNpYmxlKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0aGlzLnNtb290aEJsaW5raW5nKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgZG9tLmFkZENzc0NsYXNzKHRoaXMuZWxlbWVudCwgXCJhY2Vfc21vb3RoLWJsaW5raW5nXCIpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdmFyIGJsaW5rID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHRoaXMudGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGUoZmFsc2UpO1xuICAgICAgICAgICAgfSwgMC42ICogdGhpcy5ibGlua0ludGVydmFsKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdXBkYXRlKHRydWUpO1xuICAgICAgICAgICAgYmxpbmsoKTtcbiAgICAgICAgfSwgdGhpcy5ibGlua0ludGVydmFsKTtcblxuICAgICAgICBibGluaygpO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFBpeGVsUG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbiwgb25TY3JlZW4pIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZyB8fCAhdGhpcy5zZXNzaW9uKVxuICAgICAgICAgICAgcmV0dXJuIHtsZWZ0IDogMCwgdG9wIDogMH07XG5cbiAgICAgICAgaWYgKCFwb3NpdGlvbilcbiAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5zZXNzaW9uLnNlbGVjdGlvbi5nZXRDdXJzb3IoKTtcbiAgICAgICAgdmFyIHBvcyA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24ocG9zaXRpb24pO1xuICAgICAgICB2YXIgY3Vyc29yTGVmdCA9IHRoaXMuJHBhZGRpbmcgKyAodGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci5pc0JpZGlSb3cocG9zLnJvdywgcG9zaXRpb24ucm93KVxuICAgICAgICAgICAgPyB0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmdldFBvc0xlZnQocG9zLmNvbHVtbilcbiAgICAgICAgICAgIDogcG9zLmNvbHVtbiAqIHRoaXMuY29uZmlnLmNoYXJhY3RlcldpZHRoKTtcblxuICAgICAgICB2YXIgY3Vyc29yVG9wID0gKHBvcy5yb3cgLSAob25TY3JlZW4gPyB0aGlzLmNvbmZpZy5maXJzdFJvd1NjcmVlbiA6IDApKSAqXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5saW5lSGVpZ2h0O1xuXG4gICAgICAgIHJldHVybiB7bGVmdCA6IGN1cnNvckxlZnQsIHRvcCA6IGN1cnNvclRvcH07XG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlID0gZnVuY3Rpb24oY29uZmlnKSB7XG4gICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuXG4gICAgICAgIHZhciBzZWxlY3Rpb25zID0gdGhpcy5zZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXJzO1xuICAgICAgICB2YXIgaSA9IDAsIGN1cnNvckluZGV4ID0gMDtcblxuICAgICAgICBpZiAoc2VsZWN0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHNlbGVjdGlvbnMubGVuZ3RoID09PSAwKXtcbiAgICAgICAgICAgIHNlbGVjdGlvbnMgPSBbe2N1cnNvcjogbnVsbH1dO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBzZWxlY3Rpb25zLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgdmFyIHBpeGVsUG9zID0gdGhpcy5nZXRQaXhlbFBvc2l0aW9uKHNlbGVjdGlvbnNbaV0uY3Vyc29yLCB0cnVlKTtcbiAgICAgICAgICAgIGlmICgocGl4ZWxQb3MudG9wID4gY29uZmlnLmhlaWdodCArIGNvbmZpZy5vZmZzZXQgfHxcbiAgICAgICAgICAgICAgICAgcGl4ZWxQb3MudG9wIDwgMCkgJiYgaSA+IDEpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHN0eWxlID0gKHRoaXMuY3Vyc29yc1tjdXJzb3JJbmRleCsrXSB8fCB0aGlzLmFkZEN1cnNvcigpKS5zdHlsZTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKCF0aGlzLmRyYXdDdXJzb3IpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5sZWZ0ID0gcGl4ZWxQb3MubGVmdCArIFwicHhcIjtcbiAgICAgICAgICAgICAgICBzdHlsZS50b3AgPSBwaXhlbFBvcy50b3AgKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgc3R5bGUud2lkdGggPSBjb25maWcuY2hhcmFjdGVyV2lkdGggKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgc3R5bGUuaGVpZ2h0ID0gY29uZmlnLmxpbmVIZWlnaHQgKyBcInB4XCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhd0N1cnNvcihzdHlsZSwgcGl4ZWxQb3MsIGNvbmZpZywgc2VsZWN0aW9uc1tpXSwgdGhpcy5zZXNzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAodGhpcy5jdXJzb3JzLmxlbmd0aCA+IGN1cnNvckluZGV4KVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVDdXJzb3IoKTtcblxuICAgICAgICB2YXIgb3ZlcndyaXRlID0gdGhpcy5zZXNzaW9uLmdldE92ZXJ3cml0ZSgpO1xuICAgICAgICB0aGlzLiRzZXRPdmVyd3JpdGUob3ZlcndyaXRlKTtcbiAgICAgICAgdGhpcy4kcGl4ZWxQb3MgPSBwaXhlbFBvcztcbiAgICAgICAgdGhpcy5yZXN0YXJ0VGltZXIoKTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuZHJhd0N1cnNvciA9IG51bGw7XG5cbiAgICB0aGlzLiRzZXRPdmVyd3JpdGUgPSBmdW5jdGlvbihvdmVyd3JpdGUpIHtcbiAgICAgICAgaWYgKG92ZXJ3cml0ZSAhPSB0aGlzLm92ZXJ3cml0ZSkge1xuICAgICAgICAgICAgdGhpcy5vdmVyd3JpdGUgPSBvdmVyd3JpdGU7XG4gICAgICAgICAgICBpZiAob3ZlcndyaXRlKVxuICAgICAgICAgICAgICAgIGRvbS5hZGRDc3NDbGFzcyh0aGlzLmVsZW1lbnQsIFwiYWNlX292ZXJ3cml0ZS1jdXJzb3JzXCIpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRvbS5yZW1vdmVDc3NDbGFzcyh0aGlzLmVsZW1lbnQsIFwiYWNlX292ZXJ3cml0ZS1jdXJzb3JzXCIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxJZCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRJZCk7XG4gICAgfTtcblxufSkuY2FsbChDdXJzb3IucHJvdG90eXBlKTtcblxuZXhwb3J0cy5DdXJzb3IgPSBDdXJzb3I7XG5cbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL3Njcm9sbGJhclwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpYi9vb3BcIixcImFjZS9saWIvZG9tXCIsXCJhY2UvbGliL2V2ZW50XCIsXCJhY2UvbGliL2V2ZW50X2VtaXR0ZXJcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG52YXIgb29wID0gYWNlcXVpcmUoXCIuL2xpYi9vb3BcIik7XG52YXIgZG9tID0gYWNlcXVpcmUoXCIuL2xpYi9kb21cIik7XG52YXIgZXZlbnQgPSBhY2VxdWlyZShcIi4vbGliL2V2ZW50XCIpO1xudmFyIEV2ZW50RW1pdHRlciA9IGFjZXF1aXJlKFwiLi9saWIvZXZlbnRfZW1pdHRlclwiKS5FdmVudEVtaXR0ZXI7XG52YXIgTUFYX1NDUk9MTF9IID0gMHg4MDAwO1xudmFyIFNjcm9sbEJhciA9IGZ1bmN0aW9uKHBhcmVudCkge1xuICAgIHRoaXMuZWxlbWVudCA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSBcImFjZV9zY3JvbGxiYXIgYWNlX3Njcm9sbGJhclwiICsgdGhpcy5jbGFzc1N1ZmZpeDtcblxuICAgIHRoaXMuaW5uZXIgPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmlubmVyLmNsYXNzTmFtZSA9IFwiYWNlX3Njcm9sbGJhci1pbm5lclwiO1xuICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmlubmVyKTtcblxuICAgIHBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpO1xuXG4gICAgdGhpcy5zZXRWaXNpYmxlKGZhbHNlKTtcbiAgICB0aGlzLnNraXBFdmVudCA9IGZhbHNlO1xuXG4gICAgZXZlbnQuYWRkTGlzdGVuZXIodGhpcy5lbGVtZW50LCBcInNjcm9sbFwiLCB0aGlzLm9uU2Nyb2xsLmJpbmQodGhpcykpO1xuICAgIGV2ZW50LmFkZExpc3RlbmVyKHRoaXMuZWxlbWVudCwgXCJtb3VzZWRvd25cIiwgZXZlbnQucHJldmVudERlZmF1bHQpO1xufTtcblxuKGZ1bmN0aW9uKCkge1xuICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTtcblxuICAgIHRoaXMuc2V0VmlzaWJsZSA9IGZ1bmN0aW9uKGlzVmlzaWJsZSkge1xuICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IGlzVmlzaWJsZSA/IFwiXCIgOiBcIm5vbmVcIjtcbiAgICAgICAgdGhpcy5pc1Zpc2libGUgPSBpc1Zpc2libGU7XG4gICAgICAgIHRoaXMuY29lZmYgPSAxO1xuICAgIH07XG59KS5jYWxsKFNjcm9sbEJhci5wcm90b3R5cGUpO1xudmFyIFZTY3JvbGxCYXIgPSBmdW5jdGlvbihwYXJlbnQsIHJlbmRlcmVyKSB7XG4gICAgU2Nyb2xsQmFyLmNhbGwodGhpcywgcGFyZW50KTtcbiAgICB0aGlzLnNjcm9sbFRvcCA9IDA7XG4gICAgdGhpcy5zY3JvbGxIZWlnaHQgPSAwO1xuICAgIHJlbmRlcmVyLiRzY3JvbGxiYXJXaWR0aCA9IFxuICAgIHRoaXMud2lkdGggPSBkb20uc2Nyb2xsYmFyV2lkdGgocGFyZW50Lm93bmVyRG9jdW1lbnQpO1xuICAgIHRoaXMuaW5uZXIuc3R5bGUud2lkdGggPVxuICAgIHRoaXMuZWxlbWVudC5zdHlsZS53aWR0aCA9ICh0aGlzLndpZHRoIHx8IDE1KSArIDUgKyBcInB4XCI7XG4gICAgdGhpcy4kbWluV2lkdGggPSAwO1xufTtcblxub29wLmluaGVyaXRzKFZTY3JvbGxCYXIsIFNjcm9sbEJhcik7XG5cbihmdW5jdGlvbigpIHtcblxuICAgIHRoaXMuY2xhc3NTdWZmaXggPSAnLXYnO1xuICAgIHRoaXMub25TY3JvbGwgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNraXBFdmVudCkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxUb3AgPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgICAgICAgICAgaWYgKHRoaXMuY29lZmYgIT0gMSkge1xuICAgICAgICAgICAgICAgIHZhciBoID0gdGhpcy5lbGVtZW50LmNsaWVudEhlaWdodCAvIHRoaXMuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxUb3AgKiAoMSAtIGgpIC8gKHRoaXMuY29lZmYgLSBoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2VtaXQoXCJzY3JvbGxcIiwge2RhdGE6IHRoaXMuc2Nyb2xsVG9wfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5za2lwRXZlbnQgPSBmYWxzZTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0V2lkdGggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuaXNWaXNpYmxlID8gdGhpcy53aWR0aCA6IDAsIHRoaXMuJG1pbldpZHRoIHx8IDApO1xuICAgIH07XG4gICAgdGhpcy5zZXRIZWlnaHQgPSBmdW5jdGlvbihoZWlnaHQpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodCA9IGhlaWdodCArIFwicHhcIjtcbiAgICB9O1xuICAgIHRoaXMuc2V0SW5uZXJIZWlnaHQgPVxuICAgIHRoaXMuc2V0U2Nyb2xsSGVpZ2h0ID0gZnVuY3Rpb24oaGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsSGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICBpZiAoaGVpZ2h0ID4gTUFYX1NDUk9MTF9IKSB7XG4gICAgICAgICAgICB0aGlzLmNvZWZmID0gTUFYX1NDUk9MTF9IIC8gaGVpZ2h0O1xuICAgICAgICAgICAgaGVpZ2h0ID0gTUFYX1NDUk9MTF9IO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29lZmYgIT0gMSkge1xuICAgICAgICAgICAgdGhpcy5jb2VmZiA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbm5lci5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyBcInB4XCI7XG4gICAgfTtcbiAgICB0aGlzLnNldFNjcm9sbFRvcCA9IGZ1bmN0aW9uKHNjcm9sbFRvcCkge1xuICAgICAgICBpZiAodGhpcy5zY3JvbGxUb3AgIT0gc2Nyb2xsVG9wKSB7XG4gICAgICAgICAgICB0aGlzLnNraXBFdmVudCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3AgKiB0aGlzLmNvZWZmO1xuICAgICAgICB9XG4gICAgfTtcblxufSkuY2FsbChWU2Nyb2xsQmFyLnByb3RvdHlwZSk7XG52YXIgSFNjcm9sbEJhciA9IGZ1bmN0aW9uKHBhcmVudCwgcmVuZGVyZXIpIHtcbiAgICBTY3JvbGxCYXIuY2FsbCh0aGlzLCBwYXJlbnQpO1xuICAgIHRoaXMuc2Nyb2xsTGVmdCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSByZW5kZXJlci4kc2Nyb2xsYmFyV2lkdGg7XG4gICAgdGhpcy5pbm5lci5zdHlsZS5oZWlnaHQgPVxuICAgIHRoaXMuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSAodGhpcy5oZWlnaHQgfHwgMTUpICsgNSArIFwicHhcIjtcbn07XG5cbm9vcC5pbmhlcml0cyhIU2Nyb2xsQmFyLCBTY3JvbGxCYXIpO1xuXG4oZnVuY3Rpb24oKSB7XG5cbiAgICB0aGlzLmNsYXNzU3VmZml4ID0gJy1oJztcbiAgICB0aGlzLm9uU2Nyb2xsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy5za2lwRXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsTGVmdCA9IHRoaXMuZWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgdGhpcy5fZW1pdChcInNjcm9sbFwiLCB7ZGF0YTogdGhpcy5zY3JvbGxMZWZ0fSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5za2lwRXZlbnQgPSBmYWxzZTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0SGVpZ2h0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmlzaWJsZSA/IHRoaXMuaGVpZ2h0IDogMDtcbiAgICB9O1xuICAgIHRoaXMuc2V0V2lkdGggPSBmdW5jdGlvbih3aWR0aCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUud2lkdGggPSB3aWR0aCArIFwicHhcIjtcbiAgICB9O1xuICAgIHRoaXMuc2V0SW5uZXJXaWR0aCA9IGZ1bmN0aW9uKHdpZHRoKSB7XG4gICAgICAgIHRoaXMuaW5uZXIuc3R5bGUud2lkdGggPSB3aWR0aCArIFwicHhcIjtcbiAgICB9O1xuICAgIHRoaXMuc2V0U2Nyb2xsV2lkdGggPSBmdW5jdGlvbih3aWR0aCkge1xuICAgICAgICB0aGlzLmlubmVyLnN0eWxlLndpZHRoID0gd2lkdGggKyBcInB4XCI7XG4gICAgfTtcbiAgICB0aGlzLnNldFNjcm9sbExlZnQgPSBmdW5jdGlvbihzY3JvbGxMZWZ0KSB7XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbExlZnQgIT0gc2Nyb2xsTGVmdCkge1xuICAgICAgICAgICAgdGhpcy5za2lwRXZlbnQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxMZWZ0ID0gdGhpcy5lbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgICAgICB9XG4gICAgfTtcblxufSkuY2FsbChIU2Nyb2xsQmFyLnByb3RvdHlwZSk7XG5cblxuZXhwb3J0cy5TY3JvbGxCYXIgPSBWU2Nyb2xsQmFyOyAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5leHBvcnRzLlNjcm9sbEJhclYgPSBWU2Nyb2xsQmFyOyAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5leHBvcnRzLlNjcm9sbEJhckggPSBIU2Nyb2xsQmFyOyAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5cbmV4cG9ydHMuVlNjcm9sbEJhciA9IFZTY3JvbGxCYXI7XG5leHBvcnRzLkhTY3JvbGxCYXIgPSBIU2Nyb2xsQmFyO1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvcmVuZGVybG9vcFwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpYi9ldmVudFwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBldmVudCA9IGFjZXF1aXJlKFwiLi9saWIvZXZlbnRcIik7XG5cblxudmFyIFJlbmRlckxvb3AgPSBmdW5jdGlvbihvblJlbmRlciwgd2luKSB7XG4gICAgdGhpcy5vblJlbmRlciA9IG9uUmVuZGVyO1xuICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuY2hhbmdlcyA9IDA7XG4gICAgdGhpcy53aW5kb3cgPSB3aW4gfHwgd2luZG93O1xufTtcblxuKGZ1bmN0aW9uKCkge1xuXG5cbiAgICB0aGlzLnNjaGVkdWxlID0gZnVuY3Rpb24oY2hhbmdlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlcyA9IHRoaXMuY2hhbmdlcyB8IGNoYW5nZTtcbiAgICAgICAgaWYgKCF0aGlzLnBlbmRpbmcgJiYgdGhpcy5jaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIF9zZWxmID0gdGhpcztcbiAgICAgICAgICAgIGV2ZW50Lm5leHRGcmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBfc2VsZi5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdmFyIGNoYW5nZXM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGNoYW5nZXMgPSBfc2VsZi5jaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIF9zZWxmLmNoYW5nZXMgPSAwO1xuICAgICAgICAgICAgICAgICAgICBfc2VsZi5vblJlbmRlcihjaGFuZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0aGlzLndpbmRvdyk7XG4gICAgICAgIH1cbiAgICB9O1xuXG59KS5jYWxsKFJlbmRlckxvb3AucHJvdG90eXBlKTtcblxuZXhwb3J0cy5SZW5kZXJMb29wID0gUmVuZGVyTG9vcDtcbn0pO1xuXG5hY2UuZGVmaW5lKFwiYWNlL2xheWVyL2ZvbnRfbWV0cmljc1wiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpYi9vb3BcIixcImFjZS9saWIvZG9tXCIsXCJhY2UvbGliL2xhbmdcIixcImFjZS9saWIvdXNlcmFnZW50XCIsXCJhY2UvbGliL2V2ZW50X2VtaXR0ZXJcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblxudmFyIG9vcCA9IGFjZXF1aXJlKFwiLi4vbGliL29vcFwiKTtcbnZhciBkb20gPSBhY2VxdWlyZShcIi4uL2xpYi9kb21cIik7XG52YXIgbGFuZyA9IGFjZXF1aXJlKFwiLi4vbGliL2xhbmdcIik7XG52YXIgdXNlcmFnZW50ID0gYWNlcXVpcmUoXCIuLi9saWIvdXNlcmFnZW50XCIpO1xudmFyIEV2ZW50RW1pdHRlciA9IGFjZXF1aXJlKFwiLi4vbGliL2V2ZW50X2VtaXR0ZXJcIikuRXZlbnRFbWl0dGVyO1xuXG52YXIgQ0hBUl9DT1VOVCA9IDA7XG5cbnZhciBGb250TWV0cmljcyA9IGV4cG9ydHMuRm9udE1ldHJpY3MgPSBmdW5jdGlvbihwYXJlbnRFbCkge1xuICAgIHRoaXMuZWwgPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLiRzZXRNZWFzdXJlTm9kZVN0eWxlcyh0aGlzLmVsLnN0eWxlLCB0cnVlKTtcbiAgICBcbiAgICB0aGlzLiRtYWluID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy4kc2V0TWVhc3VyZU5vZGVTdHlsZXModGhpcy4kbWFpbi5zdHlsZSk7XG4gICAgXG4gICAgdGhpcy4kbWVhc3VyZU5vZGUgPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLiRzZXRNZWFzdXJlTm9kZVN0eWxlcyh0aGlzLiRtZWFzdXJlTm9kZS5zdHlsZSk7XG4gICAgXG4gICAgXG4gICAgdGhpcy5lbC5hcHBlbmRDaGlsZCh0aGlzLiRtYWluKTtcbiAgICB0aGlzLmVsLmFwcGVuZENoaWxkKHRoaXMuJG1lYXN1cmVOb2RlKTtcbiAgICBwYXJlbnRFbC5hcHBlbmRDaGlsZCh0aGlzLmVsKTtcbiAgICBcbiAgICBpZiAoIUNIQVJfQ09VTlQpXG4gICAgICAgIHRoaXMuJHRlc3RGcmFjdGlvbmFsUmVjdCgpO1xuICAgIHRoaXMuJG1lYXN1cmVOb2RlLmlubmVySFRNTCA9IGxhbmcuc3RyaW5nUmVwZWF0KFwiWFwiLCBDSEFSX0NPVU5UKTtcbiAgICBcbiAgICB0aGlzLiRjaGFyYWN0ZXJTaXplID0ge3dpZHRoOiAwLCBoZWlnaHQ6IDB9O1xuICAgIHRoaXMuY2hlY2tGb3JTaXplQ2hhbmdlcygpO1xufTtcblxuKGZ1bmN0aW9uKCkge1xuXG4gICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpO1xuICAgICAgICBcbiAgICB0aGlzLiRjaGFyYWN0ZXJTaXplID0ge3dpZHRoOiAwLCBoZWlnaHQ6IDB9O1xuICAgIFxuICAgIHRoaXMuJHRlc3RGcmFjdGlvbmFsUmVjdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZWwgPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdGhpcy4kc2V0TWVhc3VyZU5vZGVTdHlsZXMoZWwuc3R5bGUpO1xuICAgICAgICBlbC5zdHlsZS53aWR0aCA9IFwiMC4ycHhcIjtcbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGVsKTtcbiAgICAgICAgdmFyIHcgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgaWYgKHcgPiAwICYmIHcgPCAxKVxuICAgICAgICAgICAgQ0hBUl9DT1VOVCA9IDUwO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBDSEFSX0NPVU5UID0gMTAwO1xuICAgICAgICBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuJHNldE1lYXN1cmVOb2RlU3R5bGVzID0gZnVuY3Rpb24oc3R5bGUsIGlzUm9vdCkge1xuICAgICAgICBzdHlsZS53aWR0aCA9IHN0eWxlLmhlaWdodCA9IFwiYXV0b1wiO1xuICAgICAgICBzdHlsZS5sZWZ0ID0gc3R5bGUudG9wID0gXCIwcHhcIjtcbiAgICAgICAgc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gICAgICAgIHN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgICAgICBzdHlsZS53aGl0ZVNwYWNlID0gXCJwcmVcIjtcblxuICAgICAgICBpZiAodXNlcmFnZW50LmlzSUUgPCA4KSB7XG4gICAgICAgICAgICBzdHlsZVtcImZvbnQtZmFtaWx5XCJdID0gXCJpbmhlcml0XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHlsZS5mb250ID0gXCJpbmhlcml0XCI7XG4gICAgICAgIH1cbiAgICAgICAgc3R5bGUub3ZlcmZsb3cgPSBpc1Jvb3QgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XG4gICAgfTtcblxuICAgIHRoaXMuY2hlY2tGb3JTaXplQ2hhbmdlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuJG1lYXN1cmVTaXplcygpO1xuICAgICAgICBpZiAoc2l6ZSAmJiAodGhpcy4kY2hhcmFjdGVyU2l6ZS53aWR0aCAhPT0gc2l6ZS53aWR0aCB8fCB0aGlzLiRjaGFyYWN0ZXJTaXplLmhlaWdodCAhPT0gc2l6ZS5oZWlnaHQpKSB7XG4gICAgICAgICAgICB0aGlzLiRtZWFzdXJlTm9kZS5zdHlsZS5mb250V2VpZ2h0ID0gXCJib2xkXCI7XG4gICAgICAgICAgICB2YXIgYm9sZFNpemUgPSB0aGlzLiRtZWFzdXJlU2l6ZXMoKTtcbiAgICAgICAgICAgIHRoaXMuJG1lYXN1cmVOb2RlLnN0eWxlLmZvbnRXZWlnaHQgPSBcIlwiO1xuICAgICAgICAgICAgdGhpcy4kY2hhcmFjdGVyU2l6ZSA9IHNpemU7XG4gICAgICAgICAgICB0aGlzLmNoYXJTaXplcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICB0aGlzLmFsbG93Qm9sZEZvbnRzID0gYm9sZFNpemUgJiYgYm9sZFNpemUud2lkdGggPT09IHNpemUud2lkdGggJiYgYm9sZFNpemUuaGVpZ2h0ID09PSBzaXplLmhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuX2VtaXQoXCJjaGFuZ2VDaGFyYWN0ZXJTaXplXCIsIHtkYXRhOiBzaXplfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy4kcG9sbFNpemVDaGFuZ2VzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLiRwb2xsU2l6ZUNoYW5nZXNUaW1lcilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRwb2xsU2l6ZUNoYW5nZXNUaW1lcjtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICByZXR1cm4gdGhpcy4kcG9sbFNpemVDaGFuZ2VzVGltZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHNlbGYuY2hlY2tGb3JTaXplQ2hhbmdlcygpO1xuICAgICAgICB9LCA1MDApO1xuICAgIH07XG4gICAgXG4gICAgdGhpcy5zZXRQb2xsaW5nID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuJHBvbGxTaXplQ2hhbmdlcygpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuJHBvbGxTaXplQ2hhbmdlc1RpbWVyKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuJHBvbGxTaXplQ2hhbmdlc1RpbWVyKTtcbiAgICAgICAgICAgIHRoaXMuJHBvbGxTaXplQ2hhbmdlc1RpbWVyID0gMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLiRtZWFzdXJlU2l6ZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKENIQVJfQ09VTlQgPT09IDUwKSB7XG4gICAgICAgICAgICB2YXIgcmVjdCA9IG51bGw7XG4gICAgICAgICAgICB0cnkgeyBcbiAgICAgICAgICAgICAgIHJlY3QgPSB0aGlzLiRtZWFzdXJlTm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICAgICAgICAgcmVjdCA9IHt3aWR0aDogMCwgaGVpZ2h0OjAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBzaXplID0ge1xuICAgICAgICAgICAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHJlY3Qud2lkdGggLyBDSEFSX0NPVU5UXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHNpemUgPSB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLiRtZWFzdXJlTm9kZS5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMuJG1lYXN1cmVOb2RlLmNsaWVudFdpZHRoIC8gQ0hBUl9DT1VOVFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2l6ZS53aWR0aCA9PT0gMCB8fCBzaXplLmhlaWdodCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gc2l6ZTtcbiAgICB9O1xuXG4gICAgdGhpcy4kbWVhc3VyZUNoYXJXaWR0aCA9IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHRoaXMuJG1haW4uaW5uZXJIVE1MID0gbGFuZy5zdHJpbmdSZXBlYXQoY2gsIENIQVJfQ09VTlQpO1xuICAgICAgICB2YXIgcmVjdCA9IHRoaXMuJG1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHJldHVybiByZWN0LndpZHRoIC8gQ0hBUl9DT1VOVDtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuZ2V0Q2hhcmFjdGVyV2lkdGggPSBmdW5jdGlvbihjaCkge1xuICAgICAgICB2YXIgdyA9IHRoaXMuY2hhclNpemVzW2NoXTtcbiAgICAgICAgaWYgKHcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdyA9IHRoaXMuY2hhclNpemVzW2NoXSA9IHRoaXMuJG1lYXN1cmVDaGFyV2lkdGgoY2gpIC8gdGhpcy4kY2hhcmFjdGVyU2l6ZS53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdztcbiAgICB9O1xuXG4gICAgdGhpcy5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy4kcG9sbFNpemVDaGFuZ2VzVGltZXIpO1xuICAgICAgICBpZiAodGhpcy5lbCAmJiB0aGlzLmVsLnBhcmVudE5vZGUpXG4gICAgICAgICAgICB0aGlzLmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbCk7XG4gICAgfTtcblxufSkuY2FsbChGb250TWV0cmljcy5wcm90b3R5cGUpO1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS92aXJ0dWFsX3JlbmRlcmVyXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL29vcFwiLFwiYWNlL2xpYi9kb21cIixcImFjZS9jb25maWdcIixcImFjZS9saWIvdXNlcmFnZW50XCIsXCJhY2UvbGF5ZXIvZ3V0dGVyXCIsXCJhY2UvbGF5ZXIvbWFya2VyXCIsXCJhY2UvbGF5ZXIvdGV4dFwiLFwiYWNlL2xheWVyL2N1cnNvclwiLFwiYWNlL3Njcm9sbGJhclwiLFwiYWNlL3Njcm9sbGJhclwiLFwiYWNlL3JlbmRlcmxvb3BcIixcImFjZS9sYXllci9mb250X21ldHJpY3NcIixcImFjZS9saWIvZXZlbnRfZW1pdHRlclwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBvb3AgPSBhY2VxdWlyZShcIi4vbGliL29vcFwiKTtcbnZhciBkb20gPSBhY2VxdWlyZShcIi4vbGliL2RvbVwiKTtcbnZhciBjb25maWcgPSBhY2VxdWlyZShcIi4vY29uZmlnXCIpO1xudmFyIHVzZXJhZ2VudCA9IGFjZXF1aXJlKFwiLi9saWIvdXNlcmFnZW50XCIpO1xudmFyIEd1dHRlckxheWVyID0gYWNlcXVpcmUoXCIuL2xheWVyL2d1dHRlclwiKS5HdXR0ZXI7XG52YXIgTWFya2VyTGF5ZXIgPSBhY2VxdWlyZShcIi4vbGF5ZXIvbWFya2VyXCIpLk1hcmtlcjtcbnZhciBUZXh0TGF5ZXIgPSBhY2VxdWlyZShcIi4vbGF5ZXIvdGV4dFwiKS5UZXh0O1xudmFyIEN1cnNvckxheWVyID0gYWNlcXVpcmUoXCIuL2xheWVyL2N1cnNvclwiKS5DdXJzb3I7XG52YXIgSFNjcm9sbEJhciA9IGFjZXF1aXJlKFwiLi9zY3JvbGxiYXJcIikuSFNjcm9sbEJhcjtcbnZhciBWU2Nyb2xsQmFyID0gYWNlcXVpcmUoXCIuL3Njcm9sbGJhclwiKS5WU2Nyb2xsQmFyO1xudmFyIFJlbmRlckxvb3AgPSBhY2VxdWlyZShcIi4vcmVuZGVybG9vcFwiKS5SZW5kZXJMb29wO1xudmFyIEZvbnRNZXRyaWNzID0gYWNlcXVpcmUoXCIuL2xheWVyL2ZvbnRfbWV0cmljc1wiKS5Gb250TWV0cmljcztcbnZhciBFdmVudEVtaXR0ZXIgPSBhY2VxdWlyZShcIi4vbGliL2V2ZW50X2VtaXR0ZXJcIikuRXZlbnRFbWl0dGVyO1xudmFyIGVkaXRvckNzcyA9IFwiLmFjZV9lZGl0b3Ige1xcXG5wb3NpdGlvbjogcmVsYXRpdmU7XFxcbm92ZXJmbG93OiBoaWRkZW47XFxcbmZvbnQ6IDEycHgvbm9ybWFsICdNb25hY28nLCAnTWVubG8nLCAnVWJ1bnR1IE1vbm8nLCAnQ29uc29sYXMnLCAnc291cmNlLWNvZGUtcHJvJywgbW9ub3NwYWNlO1xcXG5kaXJlY3Rpb246IGx0cjtcXFxudGV4dC1hbGlnbjogbGVmdDtcXFxuLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApO1xcXG59XFxcbi5hY2Vfc2Nyb2xsZXIge1xcXG5wb3NpdGlvbjogYWJzb2x1dGU7XFxcbm92ZXJmbG93OiBoaWRkZW47XFxcbnRvcDogMDtcXFxuYm90dG9tOiAwO1xcXG5iYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xcXG4tbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxcbi1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxcbi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxcbnVzZXItc2VsZWN0OiBub25lO1xcXG5jdXJzb3I6IHRleHQ7XFxcbn1cXFxuLmFjZV9jb250ZW50IHtcXFxucG9zaXRpb246IGFic29sdXRlO1xcXG4tbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxcbi13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXFxuYm94LXNpemluZzogYm9yZGVyLWJveDtcXFxubWluLXdpZHRoOiAxMDAlO1xcXG59XFxcbi5hY2VfZHJhZ2dpbmcgLmFjZV9zY3JvbGxlcjpiZWZvcmV7XFxcbnBvc2l0aW9uOiBhYnNvbHV0ZTtcXFxudG9wOiAwO1xcXG5sZWZ0OiAwO1xcXG5yaWdodDogMDtcXFxuYm90dG9tOiAwO1xcXG5jb250ZW50OiAnJztcXFxuYmFja2dyb3VuZDogcmdiYSgyNTAsIDI1MCwgMjUwLCAwLjAxKTtcXFxuei1pbmRleDogMTAwMDtcXFxufVxcXG4uYWNlX2RyYWdnaW5nLmFjZV9kYXJrIC5hY2Vfc2Nyb2xsZXI6YmVmb3Jle1xcXG5iYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDEpO1xcXG59XFxcbi5hY2Vfc2VsZWN0aW5nLCAuYWNlX3NlbGVjdGluZyAqIHtcXFxuY3Vyc29yOiB0ZXh0ICFpbXBvcnRhbnQ7XFxcbn1cXFxuLmFjZV9ndXR0ZXIge1xcXG5wb3NpdGlvbjogYWJzb2x1dGU7XFxcbm92ZXJmbG93IDogaGlkZGVuO1xcXG53aWR0aDogYXV0bztcXFxudG9wOiAwO1xcXG5ib3R0b206IDA7XFxcbmxlZnQ6IDA7XFxcbmN1cnNvcjogZGVmYXVsdDtcXFxuei1pbmRleDogNDtcXFxuLW1zLXVzZXItc2VsZWN0OiBub25lO1xcXG4tbW96LXVzZXItc2VsZWN0OiBub25lO1xcXG4td2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcXG51c2VyLXNlbGVjdDogbm9uZTtcXFxufVxcXG4uYWNlX2d1dHRlci1hY3RpdmUtbGluZSB7XFxcbnBvc2l0aW9uOiBhYnNvbHV0ZTtcXFxubGVmdDogMDtcXFxucmlnaHQ6IDA7XFxcbn1cXFxuLmFjZV9zY3JvbGxlci5hY2Vfc2Nyb2xsLWxlZnQge1xcXG5ib3gtc2hhZG93OiAxN3B4IDAgMTZweCAtMTZweCByZ2JhKDAsIDAsIDAsIDAuNCkgaW5zZXQ7XFxcbn1cXFxuLmFjZV9ndXR0ZXItY2VsbCB7XFxcbnBhZGRpbmctbGVmdDogMTlweDtcXFxucGFkZGluZy1yaWdodDogNnB4O1xcXG5iYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcXG59XFxcbi5hY2VfZ3V0dGVyLWNlbGwuYWNlX2Vycm9yIHtcXFxuYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQU1BQUFBb0xROVRBQUFCT0ZCTVZFWC8vLy8vLy8vL1FSc3dGQWIvVWk0d0ZBWXdGQVl3RkFhV0dBZkRSeW16T1NIL1B4c3dGQWIvU2lVd0ZBWXdGQWJVUFJ2alFpRGxsb2c1SGhIZFJ5YnNUaTMvVHl2OVRpcitTeWovVUMzLy8vL1h1cmViTUJJd0ZBYi9SU0hiUHgvZ1V6ZmR3TDNrek1pdktCQXdGQWJidmJuaFB4NjZOaG93RkFZd0ZBYVpKZzh3RkFheEtCRFp1cmYvUkI2bU14Yi9TQ013RkFZd0ZBYnhRQjMrUkI0d0ZBYi9RaHk0T2grNFFpZmJOUmN3RkFZd0ZBWXdGQWIvUVJ6ZE5oZ3dGQVl3RkFiYXY3di9VeTdvYUU2OE1CSzVMeExld3IvcjJOWGV3THN3RkFheEp3NHdGQWJrUFJ5MlB5WXdGQWF4S2hMbTF0TXdGQWF6UGlRd0ZBYVVHQWIvUUJyZk94M2J2cnYvVkMvbWFFNHdGQWJSUEJxNk1STzhReW5ldzhEcDJ0amZ3YjB3RkFieDZlanU1K2J5NnVuczR1SDkvZjM2K3ZyL0drSGpBQUFBWW5SU1RsTUFHdCs2NHJuV3UvYm84ZUFBNEluSDMrRHdvTjdqNGVMaTR4UDk5TmZnNCtiKy91OUIvZURzMU1EMW1PNys0UEhnMk1YYTM0N2c3dkRpek1MTjRlRytQdjdpNWV2cy92Nzl5dTdTMy9EVjcvNDk4WXYyNGVIKzR1ZlEzT3p1L3Y3K3kxM3NScXdBQUFETFNVUkJWSGphWmMvWERzRmdHSUJodERyc2hsaXRtazJJcmJIRnFMMnB2WGYvKzc4RFBva2o3K0Z6OXFwVS85VVhKSWxobVBhVGFRNlFQYXowbW0rNWd3a2dvdmNWNkdaemQ1SnRDUXdnc3hvSE92Sk8xNWtsZVJMQW5NZ0hGSUVTVUVQbWF3QjluZ21lbFR0aXB3d2ZBU2lseE9MeWlWNVVWVXlWQWZiRzBjQ1BIaWcrR0JrekFFTkhTMEFzdFZGNmJhY1pJT3pnTG14c0hidDJPZWNOZ0pDODNKRVJtZVBVWXE4QVJHa0p4Nlh0RnNkZGRCUWdaRTJuUFI2Q0lDWmhhd2pBNEZiL2NodiszOTlrZlIrTU1NREdPUUFBQUFCSlJVNUVya0pnZ2c9PVxcXCIpO1xcXG5iYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcXG5iYWNrZ3JvdW5kLXBvc2l0aW9uOiAycHggY2VudGVyO1xcXG59XFxcbi5hY2VfZ3V0dGVyLWNlbGwuYWNlX3dhcm5pbmcge1xcXG5iYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBTUFBQUFvTFE5VEFBQUFtVkJNVkVYLy8vOEFBQUQvLy84QUFBQUFBQUJQU3piLzVzQUFBQUIvYmxILzczei91bGtBQUFBQUFBRDg1cGtBQUFBQUFBQUNBZ1Avdkd6L3JrRGVyR2JHclY3L3BrUUlDQWYvLy8vZTBJc0FBQUQvb0VEL3FUdmhyblVBQUFEL3lIRC9uamNBQUFEdXYyci9uei8vb1RqL3AwNjRvR2YvekhBQUFBQTlOaXIvdEZJQUFBRC90bFRpdVdmL3RrSUFBQUN5blhFQUFBQUFBQUF0SVJXN3pCcEJBQUFBTTNSU1RsTUFBQlIxbTdSWE84TG4zMVozNnpUK25lWGU1T3pvb1JEZm4rVFo0cDNoMmhUZjR0M2szdWN5ck4xSzUrWGFrczUyU2ZzOUNYZ3JBQUFBamtsRVFWUjQybzNQYlErQ0lCUUZZRXdib1BoU1lnb1l1bklxcUxuNi96OHVZZEg4Vm1kbnU5dno0V3dYZ04veFRQUkQyK3NnT2NaanNnZS93aFhaZ1VhWVl2VDhRbnVKYVVyanJIVVFyZUdjenVFYWZRQ08vU0pUdWZUYnJvV3NQZ3NsbFZocTN3SkVrMmpVU3pYM0NVRURKQzg0NzA3ZGpSYzVNVEFReG9MZ3VwV1J3VzZVQjVmUysrTlY4QWJPWmduc0M3QnBFQUFBQUFCSlJVNUVya0pnZ2c9PVxcXCIpO1xcXG5iYWNrZ3JvdW5kLXBvc2l0aW9uOiAycHggY2VudGVyO1xcXG59XFxcbi5hY2VfZ3V0dGVyLWNlbGwuYWNlX2luZm8ge1xcXG5iYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBQUFBQUE2bUtDOUFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBQUowVWs1VEFBQjJrODA0QUFBQVBrbEVRVlFZMDJOZ0lCNjhRdU8zdGlMem5qQXdwS1RnTnlEYk1lZ3dpc0NIWlVFVFVaVjBacU9xdUJwWGoycnRucFNKVDFBRW5uUm1MMk9nR2dBQUlLa1JRYXAyaHRnQUFBQUFTVVZPUks1Q1lJST1cXFwiKTtcXFxuYmFja2dyb3VuZC1wb3NpdGlvbjogMnB4IGNlbnRlcjtcXFxufVxcXG4uYWNlX2RhcmsgLmFjZV9ndXR0ZXItY2VsbC5hY2VfaW5mbyB7XFxcbmJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQkFNQUFBRHQzZUpTQUFBQUpGQk1WRVVBQUFDaG9hR0FnSUFxS2lxK3ZyNnRyYTFaV1ZtVWxKU2JtNXM4UER4dWJtNTZlbnJkZ3pnM0FBQUFBWFJTVGxNQVFPYllaZ0FBQUNsSlJFRlVlTnBqWU1BUGRzTVlIZWd5SlpGUUJsc1VsTUZWQ1dVWUtrQVpNeFpBR2R4bERNUUJBRytUQlA0QjZSeUpBQUFBQUVsRlRrU3VRbUNDXFxcIik7XFxcbn1cXFxuLmFjZV9zY3JvbGxiYXIge1xcXG5wb3NpdGlvbjogYWJzb2x1dGU7XFxcbnJpZ2h0OiAwO1xcXG5ib3R0b206IDA7XFxcbnotaW5kZXg6IDY7XFxcbn1cXFxuLmFjZV9zY3JvbGxiYXItaW5uZXIge1xcXG5wb3NpdGlvbjogYWJzb2x1dGU7XFxcbmN1cnNvcjogdGV4dDtcXFxubGVmdDogMDtcXFxudG9wOiAwO1xcXG59XFxcbi5hY2Vfc2Nyb2xsYmFyLXZ7XFxcbm92ZXJmbG93LXg6IGhpZGRlbjtcXFxub3ZlcmZsb3cteTogc2Nyb2xsO1xcXG50b3A6IDA7XFxcbn1cXFxuLmFjZV9zY3JvbGxiYXItaCB7XFxcbm92ZXJmbG93LXg6IHNjcm9sbDtcXFxub3ZlcmZsb3cteTogaGlkZGVuO1xcXG5sZWZ0OiAwO1xcXG59XFxcbi5hY2VfcHJpbnQtbWFyZ2luIHtcXFxucG9zaXRpb246IGFic29sdXRlO1xcXG5oZWlnaHQ6IDEwMCU7XFxcbn1cXFxuLmFjZV90ZXh0LWlucHV0IHtcXFxucG9zaXRpb246IGFic29sdXRlO1xcXG56LWluZGV4OiAwO1xcXG53aWR0aDogMC41ZW07XFxcbmhlaWdodDogMWVtO1xcXG5vcGFjaXR5OiAwO1xcXG5iYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXFxuLW1vei1hcHBlYXJhbmNlOiBub25lO1xcXG5hcHBlYXJhbmNlOiBub25lO1xcXG5ib3JkZXI6IG5vbmU7XFxcbnJlc2l6ZTogbm9uZTtcXFxub3V0bGluZTogbm9uZTtcXFxub3ZlcmZsb3c6IGhpZGRlbjtcXFxuZm9udDogaW5oZXJpdDtcXFxucGFkZGluZzogMCAxcHg7XFxcbm1hcmdpbjogMCAtMXB4O1xcXG50ZXh0LWluZGVudDogLTFlbTtcXFxuLW1zLXVzZXItc2VsZWN0OiB0ZXh0O1xcXG4tbW96LXVzZXItc2VsZWN0OiB0ZXh0O1xcXG4td2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0O1xcXG51c2VyLXNlbGVjdDogdGV4dDtcXFxud2hpdGUtc3BhY2U6IHByZSFpbXBvcnRhbnQ7XFxcbn1cXFxuLmFjZV90ZXh0LWlucHV0LmFjZV9jb21wb3NpdGlvbiB7XFxcbmJhY2tncm91bmQ6IGluaGVyaXQ7XFxcbmNvbG9yOiBpbmhlcml0O1xcXG56LWluZGV4OiAxMDAwO1xcXG5vcGFjaXR5OiAxO1xcXG50ZXh0LWluZGVudDogMDtcXFxufVxcXG4uYWNlX2xheWVyIHtcXFxuei1pbmRleDogMTtcXFxucG9zaXRpb246IGFic29sdXRlO1xcXG5vdmVyZmxvdzogaGlkZGVuO1xcXG53b3JkLXdyYXA6IG5vcm1hbDtcXFxud2hpdGUtc3BhY2U6IHByZTtcXFxuaGVpZ2h0OiAxMDAlO1xcXG53aWR0aDogMTAwJTtcXFxuLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcXG4td2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxcbmJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxcbnBvaW50ZXItZXZlbnRzOiBub25lO1xcXG59XFxcbi5hY2VfZ3V0dGVyLWxheWVyIHtcXFxucG9zaXRpb246IHJlbGF0aXZlO1xcXG53aWR0aDogYXV0bztcXFxudGV4dC1hbGlnbjogcmlnaHQ7XFxcbnBvaW50ZXItZXZlbnRzOiBhdXRvO1xcXG59XFxcbi5hY2VfdGV4dC1sYXllciB7XFxcbmZvbnQ6IGluaGVyaXQgIWltcG9ydGFudDtcXFxufVxcXG4uYWNlX2NqayB7XFxcbmRpc3BsYXk6IGlubGluZS1ibG9jaztcXFxudGV4dC1hbGlnbjogY2VudGVyO1xcXG59XFxcbi5hY2VfY3Vyc29yLWxheWVyIHtcXFxuei1pbmRleDogNDtcXFxufVxcXG4uYWNlX2N1cnNvciB7XFxcbnotaW5kZXg6IDQ7XFxcbnBvc2l0aW9uOiBhYnNvbHV0ZTtcXFxuLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcXG4td2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxcbmJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxcbmJvcmRlci1sZWZ0OiAycHggc29saWQ7XFxcbnRyYW5zZm9ybTogdHJhbnNsYXRleigwKTtcXFxufVxcXG4uYWNlX211bHRpc2VsZWN0IC5hY2VfY3Vyc29yIHtcXFxuYm9yZGVyLWxlZnQtd2lkdGg6IDFweDtcXFxufVxcXG4uYWNlX3NsaW0tY3Vyc29ycyAuYWNlX2N1cnNvciB7XFxcbmJvcmRlci1sZWZ0LXdpZHRoOiAxcHg7XFxcbn1cXFxuLmFjZV9vdmVyd3JpdGUtY3Vyc29ycyAuYWNlX2N1cnNvciB7XFxcbmJvcmRlci1sZWZ0LXdpZHRoOiAwO1xcXG5ib3JkZXItYm90dG9tOiAxcHggc29saWQ7XFxcbn1cXFxuLmFjZV9oaWRkZW4tY3Vyc29ycyAuYWNlX2N1cnNvciB7XFxcbm9wYWNpdHk6IDAuMjtcXFxufVxcXG4uYWNlX3Ntb290aC1ibGlua2luZyAuYWNlX2N1cnNvciB7XFxcbi13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE4cztcXFxudHJhbnNpdGlvbjogb3BhY2l0eSAwLjE4cztcXFxufVxcXG4uYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAsIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RhY2sge1xcXG5wb3NpdGlvbjogYWJzb2x1dGU7XFxcbnotaW5kZXg6IDM7XFxcbn1cXFxuLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24ge1xcXG5wb3NpdGlvbjogYWJzb2x1dGU7XFxcbnotaW5kZXg6IDU7XFxcbn1cXFxuLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHtcXFxucG9zaXRpb246IGFic29sdXRlO1xcXG56LWluZGV4OiA2O1xcXG59XFxcbi5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1xcXG5wb3NpdGlvbjogYWJzb2x1dGU7XFxcbnotaW5kZXg6IDI7XFxcbn1cXFxuLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtcXFxucG9zaXRpb246IGFic29sdXRlO1xcXG56LWluZGV4OiA0O1xcXG4tbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxcbi13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXFxuYm94LXNpemluZzogYm9yZGVyLWJveDtcXFxufVxcXG4uYWNlX2xpbmUgLmFjZV9mb2xkIHtcXFxuLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcXG4td2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxcbmJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxcbmRpc3BsYXk6IGlubGluZS1ibG9jaztcXFxuaGVpZ2h0OiAxMXB4O1xcXG5tYXJnaW4tdG9wOiAtMnB4O1xcXG52ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcXG5iYWNrZ3JvdW5kLWltYWdlOlxcXG51cmwoXFxcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkVBQUFBSkNBWUFBQURVNk1jTUFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBSnBKUkVGVWVOcGkvUC8vUHdPbGdBWEdZR1JrbEFWU29rRDhHbWp3WTF3YXNLbGpRcFlBQ3RwQ0ZlQURjSFZRZlF5TVFBd3p3QVpJM3dKS3ZDTGtmS0JhTVNDbEJsUjdCT1Fpa0NGR1FFRXJJSDBWcWthYmlHQ0Fxd1VhZEF6WkpSeFFyLzBnd2lYSWFsOHpRUVBuTlZUZ0oxVGRhd0wwVDVnQklQMU1VSk5oQnYySEtvUUhIanFOckE0V080elkwZ2x5TktMVDJLSWZJTUFBUXNkZ0dpWHZnbllBQUFBQVNVVk9SSzVDWUlJPVxcXCIpLFxcXG51cmwoXFxcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBM0NBWUFBQUROTmlBNUFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBQ0pKUkVGVWVOcGkrUC8vZnhnVEF3UERCeER4RDA3OFJTWCtZZUV5REZNQ0lNQUFJM0lObVhpd2YyWUFBQUFBU1VWT1JLNUNZSUk9XFxcIik7XFxcbmJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQsIHJlcGVhdC14O1xcXG5iYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyLCB0b3AgbGVmdDtcXFxuY29sb3I6IHRyYW5zcGFyZW50O1xcXG5ib3JkZXI6IDFweCBzb2xpZCBibGFjaztcXFxuYm9yZGVyLXJhZGl1czogMnB4O1xcXG5jdXJzb3I6IHBvaW50ZXI7XFxcbnBvaW50ZXItZXZlbnRzOiBhdXRvO1xcXG59XFxcbi5hY2VfZGFyayAuYWNlX2ZvbGQge1xcXG59XFxcbi5hY2VfZm9sZDpob3ZlcntcXFxuYmFja2dyb3VuZC1pbWFnZTpcXFxudXJsKFxcXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJFQUFBQUpDQVlBQUFEVTZNY01BQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQUpwSlJFRlVlTnBpL1AvL1B3T2xnQVhHWUdSa2xBVlNva0Q4R21qd1kxd2FzS2xqUXBZQUN0cENGZUFEY0hWUWZReU1RQXd6d0FaSTN3Skt2Q0xrZktCYU1TQ2xCbFI3Qk9RaWtDRkdRRUVySUgwVnFrYWJpR0NBcXdVYWRBelpKUnhRci8wZ3dpWElhbDh6UVFQbk5WVGdKMVRkYXdMMFQ1Z0JJUDFNVUpOaEJ2MkhLb1FISGpxTnJBNFdPNHpZMGdseU5LTFQyS0lmSU1BQVFzZGdHaVh2Z25ZQUFBQUFTVVZPUks1Q1lJST1cXFwiKSxcXFxudXJsKFxcXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQTNDQVlBQUFETk5pQTVBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQUNCSlJFRlVlTnBpK1AvL2Z6NFRBd1BEWnhEeEQ1WDRpNWZMTUV3SmdBQURBRVBWRGJqTnc4N1pBQUFBQUVsRlRrU3VRbUNDXFxcIik7XFxcbn1cXFxuLmFjZV90b29sdGlwIHtcXFxuYmFja2dyb3VuZC1jb2xvcjogI0ZGRjtcXFxuYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCB0cmFuc3BhcmVudCwgcmdiYSgwLCAwLCAwLCAwLjEpKTtcXFxuYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdHJhbnNwYXJlbnQsIHJnYmEoMCwgMCwgMCwgMC4xKSk7XFxcbmJvcmRlcjogMXB4IHNvbGlkIGdyYXk7XFxcbmJvcmRlci1yYWRpdXM6IDFweDtcXFxuYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4zKTtcXFxuY29sb3I6IGJsYWNrO1xcXG5tYXgtd2lkdGg6IDEwMCU7XFxcbnBhZGRpbmc6IDNweCA0cHg7XFxcbnBvc2l0aW9uOiBmaXhlZDtcXFxuei1pbmRleDogOTk5OTk5O1xcXG4tbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxcbi13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXFxuYm94LXNpemluZzogYm9yZGVyLWJveDtcXFxuY3Vyc29yOiBkZWZhdWx0O1xcXG53aGl0ZS1zcGFjZTogcHJlO1xcXG53b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XFxcbmxpbmUtaGVpZ2h0OiBub3JtYWw7XFxcbmZvbnQtc3R5bGU6IG5vcm1hbDtcXFxuZm9udC13ZWlnaHQ6IG5vcm1hbDtcXFxubGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcXFxucG9pbnRlci1ldmVudHM6IG5vbmU7XFxcbn1cXFxuLmFjZV9mb2xkaW5nLWVuYWJsZWQgPiAuYWNlX2d1dHRlci1jZWxsIHtcXFxucGFkZGluZy1yaWdodDogMTNweDtcXFxufVxcXG4uYWNlX2ZvbGQtd2lkZ2V0IHtcXFxuLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcXG4td2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxcbmJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxcbm1hcmdpbjogMCAtMTJweCAwIDFweDtcXFxuZGlzcGxheTogbm9uZTtcXFxud2lkdGg6IDExcHg7XFxcbnZlcnRpY2FsLWFsaWduOiB0b3A7XFxcbmJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBVUFBQUFGQ0FZQUFBQ05ieWJsQUFBQU5FbEVRVlI0Mm1XS3NRMEFNQXpDOGl4TGxyelFqem1CaUVqcDBBNld3QkNTUGdLQVhvTGtxU290N25OM3lNd1I3cFozMk56cEtrVm9EQlV4S0FBQUFBQkpSVTVFcmtKZ2dnPT1cXFwiKTtcXFxuYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXFxuYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcXG5ib3JkZXItcmFkaXVzOiAzcHg7XFxcbmJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcXG5jdXJzb3I6IHBvaW50ZXI7XFxcbn1cXFxuLmFjZV9mb2xkaW5nLWVuYWJsZWQgLmFjZV9mb2xkLXdpZGdldCB7XFxcbmRpc3BsYXk6IGlubGluZS1ibG9jazsgICBcXFxufVxcXG4uYWNlX2ZvbGQtd2lkZ2V0LmFjZV9lbmQge1xcXG5iYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVVBQUFBRkNBWUFBQUNOYnlibEFBQUFORWxFUVZSNDJtM0h3UWtBTUFoRDBZenNSY2hGS0k3c0Fpa2VXa3J4d1NjRUIwbmg1ZTdLVFBXaW1aa2k0dFlmVmJYK01ObDRweVpYZWpVTzFRQUFBQUJKUlU1RXJrSmdnZz09XFxcIik7XFxcbn1cXFxuLmFjZV9mb2xkLXdpZGdldC5hY2VfY2xvc2VkIHtcXFxuYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFNQUFBQUdDQVlBQUFBRzVTUU1BQUFBT1VsRVFWUjQyalhLd1FrQU1BZ0R3S3dxS0Q0RXdRMjZzU09rVldqZ0lJSEF6UGlDZ2FxaXFuSkhabktJQ0JFUkhOMTk0TzViOXZiTHVBVlJMK2wwWVduWkFBQUFBRWxGVGtTdVFtQ0NYQT09XFxcIik7XFxcbn1cXFxuLmFjZV9mb2xkLXdpZGdldDpob3ZlciB7XFxcbmJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4zKTtcXFxuYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xcXG5ib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xcXG59XFxcbi5hY2VfZm9sZC13aWRnZXQ6YWN0aXZlIHtcXFxuYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjQpO1xcXG5iYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xcXG5ib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xcXG59XFxcbi5hY2VfZGFyayAuYWNlX2ZvbGQtd2lkZ2V0IHtcXFxuYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFVQUFBQUZDQVlBQUFDTmJ5YmxBQUFBSGtsRVFWUUlXMlA0Ly84L0F6b0dFUTdvR0NhTExBaFdpU3dCMTQ2QkFRQ1NUUFlvY3FUMEFBQUFBRWxGVGtTdVFtQ0NcXFwiKTtcXFxufVxcXG4uYWNlX2RhcmsgLmFjZV9mb2xkLXdpZGdldC5hY2VfZW5kIHtcXFxuYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFVQUFBQUZDQVlBQUFDTmJ5YmxBQUFBSDBsRVFWUUlXMlA0Ly84L0F4UTd3TmpJQWpETWdDNEF4akNWS0JpcklBQUYwa3oycmxoeHBBQUFBQUJKUlU1RXJrSmdnZz09XFxcIik7XFxcbn1cXFxuLmFjZV9kYXJrIC5hY2VfZm9sZC13aWRnZXQuYWNlX2Nsb3NlZCB7XFxcbmJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBTUFBQUFGQ0FZQUFBQ0FjVmFpQUFBQUhFbEVRVlFJVzJQNC8vKy9BeEF6Z0RBRGxPT0F6bkhBS2dQV0F3QVJqaThVSURUZlFRQUFBQUJKUlU1RXJrSmdnZz09XFxcIik7XFxcbn1cXFxuLmFjZV9kYXJrIC5hY2VfZm9sZC13aWRnZXQ6aG92ZXIge1xcXG5ib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xcXG5iYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7XFxcbn1cXFxuLmFjZV9kYXJrIC5hY2VfZm9sZC13aWRnZXQ6YWN0aXZlIHtcXFxuYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcXFxufVxcXG4uYWNlX2ZvbGQtd2lkZ2V0LmFjZV9pbnZhbGlkIHtcXFxuYmFja2dyb3VuZC1jb2xvcjogI0ZGQjRCNDtcXFxuYm9yZGVyLWNvbG9yOiAjREU1NTU1O1xcXG59XFxcbi5hY2VfZmFkZS1mb2xkLXdpZGdldHMgLmFjZV9mb2xkLXdpZGdldCB7XFxcbi13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjRzIGVhc2UgMC4wNXM7XFxcbnRyYW5zaXRpb246IG9wYWNpdHkgMC40cyBlYXNlIDAuMDVzO1xcXG5vcGFjaXR5OiAwO1xcXG59XFxcbi5hY2VfZmFkZS1mb2xkLXdpZGdldHM6aG92ZXIgLmFjZV9mb2xkLXdpZGdldCB7XFxcbi13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjA1cyBlYXNlIDAuMDVzO1xcXG50cmFuc2l0aW9uOiBvcGFjaXR5IDAuMDVzIGVhc2UgMC4wNXM7XFxcbm9wYWNpdHk6MTtcXFxufVxcXG4uYWNlX3VuZGVybGluZSB7XFxcbnRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcXG59XFxcbi5hY2VfYm9sZCB7XFxcbmZvbnQtd2VpZ2h0OiBib2xkO1xcXG59XFxcbi5hY2Vfbm9ib2xkIC5hY2VfYm9sZCB7XFxcbmZvbnQtd2VpZ2h0OiBub3JtYWw7XFxcbn1cXFxuLmFjZV9pdGFsaWMge1xcXG5mb250LXN0eWxlOiBpdGFsaWM7XFxcbn1cXFxuLmFjZV9lcnJvci1tYXJrZXIge1xcXG5iYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMCwgMCwwLjIpO1xcXG5wb3NpdGlvbjogYWJzb2x1dGU7XFxcbnotaW5kZXg6IDk7XFxcbn1cXFxuLmFjZV9oaWdobGlnaHQtbWFya2VyIHtcXFxuYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMCwwLjIpO1xcXG5wb3NpdGlvbjogYWJzb2x1dGU7XFxcbnotaW5kZXg6IDg7XFxcbn1cXFxuLmFjZV9icjEge2JvcmRlci10b3AtbGVmdC1yYWRpdXMgICAgOiAzcHg7fVxcXG4uYWNlX2JyMiB7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXMgICA6IDNweDt9XFxcbi5hY2VfYnIzIHtib3JkZXItdG9wLWxlZnQtcmFkaXVzICAgIDogM3B4OyBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogICAgM3B4O31cXFxuLmFjZV9icjQge2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzcHg7fVxcXG4uYWNlX2JyNSB7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1cyAgICA6IDNweDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDt9XFxcbi5hY2VfYnI2IHtib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyAgIDogM3B4OyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4O31cXFxuLmFjZV9icjcge2JvcmRlci10b3AtbGVmdC1yYWRpdXMgICAgOiAzcHg7IGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAgICAzcHg7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzcHg7fVxcXG4uYWNlX2JyOCB7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyA6IDNweDt9XFxcbi5hY2VfYnI5IHtib3JkZXItdG9wLWxlZnQtcmFkaXVzICAgIDogM3B4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAgM3B4O31cXFxuLmFjZV9icjEwe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzICAgOiAzcHg7IGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICAzcHg7fVxcXG4uYWNlX2JyMTF7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1cyAgICA6IDNweDsgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICAgIDNweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogIDNweDt9XFxcbi5hY2VfYnIxMntib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAgM3B4O31cXFxuLmFjZV9icjEze2JvcmRlci10b3AtbGVmdC1yYWRpdXMgICAgOiAzcHg7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzcHg7IGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICAzcHg7fVxcXG4uYWNlX2JyMTR7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXMgICA6IDNweDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogIDNweDt9XFxcbi5hY2VfYnIxNXtib3JkZXItdG9wLWxlZnQtcmFkaXVzICAgIDogM3B4OyBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogICAgM3B4OyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7fVxcXG4uYWNlX3RleHQtaW5wdXQtaW9zIHtcXFxucG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XFxcbnRvcDogLTEwMDAwMHB4ICFpbXBvcnRhbnQ7XFxcbmxlZnQ6IC0xMDAwMDBweCAhaW1wb3J0YW50O1xcXG59XFxcblwiO1xuXG5kb20uaW1wb3J0Q3NzU3RyaW5nKGVkaXRvckNzcywgXCJhY2VfZWRpdG9yLmNzc1wiKTtcblxudmFyIFZpcnR1YWxSZW5kZXJlciA9IGZ1bmN0aW9uKGNvbnRhaW5lciwgdGhlbWUpIHtcbiAgICB2YXIgX3NlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXIgfHwgZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy4ka2VlcFRleHRBcmVhQXRDdXJzb3IgPSAhdXNlcmFnZW50LmlzT2xkSUU7XG5cbiAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy5jb250YWluZXIsIFwiYWNlX2VkaXRvclwiKTtcblxuICAgIHRoaXMuc2V0VGhlbWUodGhlbWUpO1xuXG4gICAgdGhpcy4kZ3V0dGVyID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy4kZ3V0dGVyLmNsYXNzTmFtZSA9IFwiYWNlX2d1dHRlclwiO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuJGd1dHRlcik7XG4gICAgdGhpcy4kZ3V0dGVyLnNldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIsIHRydWUpO1xuXG4gICAgdGhpcy5zY3JvbGxlciA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuc2Nyb2xsZXIuY2xhc3NOYW1lID0gXCJhY2Vfc2Nyb2xsZXJcIjtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbGVyKTtcblxuICAgIHRoaXMuY29udGVudCA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY29udGVudC5jbGFzc05hbWUgPSBcImFjZV9jb250ZW50XCI7XG4gICAgdGhpcy5zY3JvbGxlci5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xuXG4gICAgdGhpcy4kZ3V0dGVyTGF5ZXIgPSBuZXcgR3V0dGVyTGF5ZXIodGhpcy4kZ3V0dGVyKTtcbiAgICB0aGlzLiRndXR0ZXJMYXllci5vbihcImNoYW5nZUd1dHRlcldpZHRoXCIsIHRoaXMub25HdXR0ZXJSZXNpemUuYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLiRtYXJrZXJCYWNrID0gbmV3IE1hcmtlckxheWVyKHRoaXMuY29udGVudCk7XG5cbiAgICB2YXIgdGV4dExheWVyID0gdGhpcy4kdGV4dExheWVyID0gbmV3IFRleHRMYXllcih0aGlzLmNvbnRlbnQpO1xuICAgIHRoaXMuY2FudmFzID0gdGV4dExheWVyLmVsZW1lbnQ7XG5cbiAgICB0aGlzLiRtYXJrZXJGcm9udCA9IG5ldyBNYXJrZXJMYXllcih0aGlzLmNvbnRlbnQpO1xuXG4gICAgdGhpcy4kY3Vyc29yTGF5ZXIgPSBuZXcgQ3Vyc29yTGF5ZXIodGhpcy5jb250ZW50KTtcbiAgICB0aGlzLiRob3JpelNjcm9sbCA9IGZhbHNlO1xuICAgIHRoaXMuJHZTY3JvbGwgPSBmYWxzZTtcblxuICAgIHRoaXMuc2Nyb2xsQmFyID0gXG4gICAgdGhpcy5zY3JvbGxCYXJWID0gbmV3IFZTY3JvbGxCYXIodGhpcy5jb250YWluZXIsIHRoaXMpO1xuICAgIHRoaXMuc2Nyb2xsQmFySCA9IG5ldyBIU2Nyb2xsQmFyKHRoaXMuY29udGFpbmVyLCB0aGlzKTtcbiAgICB0aGlzLnNjcm9sbEJhclYuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmICghX3NlbGYuJHNjcm9sbEFuaW1hdGlvbilcbiAgICAgICAgICAgIF9zZWxmLnNlc3Npb24uc2V0U2Nyb2xsVG9wKGUuZGF0YSAtIF9zZWxmLnNjcm9sbE1hcmdpbi50b3ApO1xuICAgIH0pO1xuICAgIHRoaXMuc2Nyb2xsQmFySC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaWYgKCFfc2VsZi4kc2Nyb2xsQW5pbWF0aW9uKVxuICAgICAgICAgICAgX3NlbGYuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KGUuZGF0YSAtIF9zZWxmLnNjcm9sbE1hcmdpbi5sZWZ0KTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2Nyb2xsVG9wID0gMDtcbiAgICB0aGlzLnNjcm9sbExlZnQgPSAwO1xuXG4gICAgdGhpcy5jdXJzb3JQb3MgPSB7XG4gICAgICAgIHJvdyA6IDAsXG4gICAgICAgIGNvbHVtbiA6IDBcbiAgICB9O1xuXG4gICAgdGhpcy4kZm9udE1ldHJpY3MgPSBuZXcgRm9udE1ldHJpY3ModGhpcy5jb250YWluZXIpO1xuICAgIHRoaXMuJHRleHRMYXllci4kc2V0Rm9udE1ldHJpY3ModGhpcy4kZm9udE1ldHJpY3MpO1xuICAgIHRoaXMuJHRleHRMYXllci5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlQ2hhcmFjdGVyU2l6ZVwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIF9zZWxmLnVwZGF0ZUNoYXJhY3RlclNpemUoKTtcbiAgICAgICAgX3NlbGYub25SZXNpemUodHJ1ZSwgX3NlbGYuZ3V0dGVyV2lkdGgsIF9zZWxmLiRzaXplLndpZHRoLCBfc2VsZi4kc2l6ZS5oZWlnaHQpO1xuICAgICAgICBfc2VsZi5fc2lnbmFsKFwiY2hhbmdlQ2hhcmFjdGVyU2l6ZVwiLCBlKTtcbiAgICB9KTtcblxuICAgIHRoaXMuJHNpemUgPSB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIHNjcm9sbGVySGVpZ2h0OiAwLFxuICAgICAgICBzY3JvbGxlcldpZHRoOiAwLFxuICAgICAgICAkZGlydHk6IHRydWVcbiAgICB9O1xuXG4gICAgdGhpcy5sYXllckNvbmZpZyA9IHtcbiAgICAgICAgd2lkdGggOiAxLFxuICAgICAgICBwYWRkaW5nIDogMCxcbiAgICAgICAgZmlyc3RSb3cgOiAwLFxuICAgICAgICBmaXJzdFJvd1NjcmVlbjogMCxcbiAgICAgICAgbGFzdFJvdyA6IDAsXG4gICAgICAgIGxpbmVIZWlnaHQgOiAwLFxuICAgICAgICBjaGFyYWN0ZXJXaWR0aCA6IDAsXG4gICAgICAgIG1pbkhlaWdodCA6IDEsXG4gICAgICAgIG1heEhlaWdodCA6IDEsXG4gICAgICAgIG9mZnNldCA6IDAsXG4gICAgICAgIGhlaWdodCA6IDEsXG4gICAgICAgIGd1dHRlck9mZnNldDogMVxuICAgIH07XG4gICAgXG4gICAgdGhpcy5zY3JvbGxNYXJnaW4gPSB7XG4gICAgICAgIGxlZnQ6IDAsXG4gICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICB0b3A6IDAsXG4gICAgICAgIGJvdHRvbTogMCxcbiAgICAgICAgdjogMCxcbiAgICAgICAgaDogMFxuICAgIH07XG5cbiAgICB0aGlzLiRsb29wID0gbmV3IFJlbmRlckxvb3AoXG4gICAgICAgIHRoaXMuJHJlbmRlckNoYW5nZXMuYmluZCh0aGlzKSxcbiAgICAgICAgdGhpcy5jb250YWluZXIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld1xuICAgICk7XG4gICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKTtcblxuICAgIHRoaXMudXBkYXRlQ2hhcmFjdGVyU2l6ZSgpO1xuICAgIHRoaXMuc2V0UGFkZGluZyg0KTtcbiAgICBjb25maWcucmVzZXRPcHRpb25zKHRoaXMpO1xuICAgIGNvbmZpZy5fZW1pdChcInJlbmRlcmVyXCIsIHRoaXMpO1xufTtcblxuKGZ1bmN0aW9uKCkge1xuXG4gICAgdGhpcy5DSEFOR0VfQ1VSU09SID0gMTtcbiAgICB0aGlzLkNIQU5HRV9NQVJLRVIgPSAyO1xuICAgIHRoaXMuQ0hBTkdFX0dVVFRFUiA9IDQ7XG4gICAgdGhpcy5DSEFOR0VfU0NST0xMID0gODtcbiAgICB0aGlzLkNIQU5HRV9MSU5FUyA9IDE2O1xuICAgIHRoaXMuQ0hBTkdFX1RFWFQgPSAzMjtcbiAgICB0aGlzLkNIQU5HRV9TSVpFID0gNjQ7XG4gICAgdGhpcy5DSEFOR0VfTUFSS0VSX0JBQ0sgPSAxMjg7XG4gICAgdGhpcy5DSEFOR0VfTUFSS0VSX0ZST05UID0gMjU2O1xuICAgIHRoaXMuQ0hBTkdFX0ZVTEwgPSA1MTI7XG4gICAgdGhpcy5DSEFOR0VfSF9TQ1JPTEwgPSAxMDI0O1xuXG4gICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpO1xuXG4gICAgdGhpcy51cGRhdGVDaGFyYWN0ZXJTaXplID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLiR0ZXh0TGF5ZXIuYWxsb3dCb2xkRm9udHMgIT0gdGhpcy4kYWxsb3dCb2xkRm9udHMpIHtcbiAgICAgICAgICAgIHRoaXMuJGFsbG93Qm9sZEZvbnRzID0gdGhpcy4kdGV4dExheWVyLmFsbG93Qm9sZEZvbnRzO1xuICAgICAgICAgICAgdGhpcy5zZXRTdHlsZShcImFjZV9ub2JvbGRcIiwgIXRoaXMuJGFsbG93Qm9sZEZvbnRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGF5ZXJDb25maWcuY2hhcmFjdGVyV2lkdGggPVxuICAgICAgICB0aGlzLmNoYXJhY3RlcldpZHRoID0gdGhpcy4kdGV4dExheWVyLmdldENoYXJhY3RlcldpZHRoKCk7XG4gICAgICAgIHRoaXMubGF5ZXJDb25maWcubGluZUhlaWdodCA9XG4gICAgICAgIHRoaXMubGluZUhlaWdodCA9IHRoaXMuJHRleHRMYXllci5nZXRMaW5lSGVpZ2h0KCk7XG4gICAgICAgIHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCk7XG4gICAgfTtcbiAgICB0aGlzLnNldFNlc3Npb24gPSBmdW5jdGlvbihzZXNzaW9uKSB7XG4gICAgICAgIGlmICh0aGlzLnNlc3Npb24pXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uZG9jLm9mZihcImNoYW5nZU5ld0xpbmVNb2RlXCIsIHRoaXMub25DaGFuZ2VOZXdMaW5lTW9kZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjtcbiAgICAgICAgaWYgKHNlc3Npb24gJiYgdGhpcy5zY3JvbGxNYXJnaW4udG9wICYmIHNlc3Npb24uZ2V0U2Nyb2xsVG9wKCkgPD0gMClcbiAgICAgICAgICAgIHNlc3Npb24uc2V0U2Nyb2xsVG9wKC10aGlzLnNjcm9sbE1hcmdpbi50b3ApO1xuXG4gICAgICAgIHRoaXMuJGN1cnNvckxheWVyLnNldFNlc3Npb24oc2Vzc2lvbik7XG4gICAgICAgIHRoaXMuJG1hcmtlckJhY2suc2V0U2Vzc2lvbihzZXNzaW9uKTtcbiAgICAgICAgdGhpcy4kbWFya2VyRnJvbnQuc2V0U2Vzc2lvbihzZXNzaW9uKTtcbiAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIuc2V0U2Vzc2lvbihzZXNzaW9uKTtcbiAgICAgICAgdGhpcy4kdGV4dExheWVyLnNldFNlc3Npb24oc2Vzc2lvbik7XG4gICAgICAgIGlmICghc2Vzc2lvbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfRlVMTCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi4kc2V0Rm9udE1ldHJpY3ModGhpcy4kZm9udE1ldHJpY3MpO1xuICAgICAgICB0aGlzLnNjcm9sbEJhckguc2Nyb2xsTGVmdCA9IHRoaXMuc2Nyb2xsQmFyVi5zY3JvbGxUb3AgPSBudWxsO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5vbkNoYW5nZU5ld0xpbmVNb2RlID0gdGhpcy5vbkNoYW5nZU5ld0xpbmVNb2RlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25DaGFuZ2VOZXdMaW5lTW9kZSgpO1xuICAgICAgICB0aGlzLnNlc3Npb24uZG9jLm9uKFwiY2hhbmdlTmV3TGluZU1vZGVcIiwgdGhpcy5vbkNoYW5nZU5ld0xpbmVNb2RlKTtcbiAgICB9O1xuICAgIHRoaXMudXBkYXRlTGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdywgZm9yY2UpIHtcbiAgICAgICAgaWYgKGxhc3RSb3cgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGxhc3RSb3cgPSBJbmZpbml0eTtcblxuICAgICAgICBpZiAoIXRoaXMuJGNoYW5nZWRMaW5lcykge1xuICAgICAgICAgICAgdGhpcy4kY2hhbmdlZExpbmVzID0ge1xuICAgICAgICAgICAgICAgIGZpcnN0Um93OiBmaXJzdFJvdyxcbiAgICAgICAgICAgICAgICBsYXN0Um93OiBsYXN0Um93XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuJGNoYW5nZWRMaW5lcy5maXJzdFJvdyA+IGZpcnN0Um93KVxuICAgICAgICAgICAgICAgIHRoaXMuJGNoYW5nZWRMaW5lcy5maXJzdFJvdyA9IGZpcnN0Um93O1xuXG4gICAgICAgICAgICBpZiAodGhpcy4kY2hhbmdlZExpbmVzLmxhc3RSb3cgPCBsYXN0Um93KVxuICAgICAgICAgICAgICAgIHRoaXMuJGNoYW5nZWRMaW5lcy5sYXN0Um93ID0gbGFzdFJvdztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy4kY2hhbmdlZExpbmVzLmxhc3RSb3cgPCB0aGlzLmxheWVyQ29uZmlnLmZpcnN0Um93KSB7XG4gICAgICAgICAgICBpZiAoZm9yY2UpXG4gICAgICAgICAgICAgICAgdGhpcy4kY2hhbmdlZExpbmVzLmxhc3RSb3cgPSB0aGlzLmxheWVyQ29uZmlnLmxhc3RSb3c7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiRjaGFuZ2VkTGluZXMuZmlyc3RSb3cgPiB0aGlzLmxheWVyQ29uZmlnLmxhc3RSb3cpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfTElORVMpO1xuICAgIH07XG5cbiAgICB0aGlzLm9uQ2hhbmdlTmV3TGluZU1vZGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9URVhUKTtcbiAgICAgICAgdGhpcy4kdGV4dExheWVyLiR1cGRhdGVFb2xDaGFyKCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuc2V0RW9sQ2hhcih0aGlzLiR0ZXh0TGF5ZXIuRU9MX0NIQVIpO1xuICAgIH07XG4gICAgXG4gICAgdGhpcy5vbkNoYW5nZVRhYlNpemUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9URVhUIHwgdGhpcy5DSEFOR0VfTUFSS0VSKTtcbiAgICAgICAgdGhpcy4kdGV4dExheWVyLm9uQ2hhbmdlVGFiU2l6ZSgpO1xuICAgIH07XG4gICAgdGhpcy51cGRhdGVUZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfVEVYVCk7XG4gICAgfTtcbiAgICB0aGlzLnVwZGF0ZUZ1bGwgPSBmdW5jdGlvbihmb3JjZSkge1xuICAgICAgICBpZiAoZm9yY2UpXG4gICAgICAgICAgICB0aGlzLiRyZW5kZXJDaGFuZ2VzKHRoaXMuQ0hBTkdFX0ZVTEwsIHRydWUpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0ZVTEwpO1xuICAgIH07XG4gICAgdGhpcy51cGRhdGVGb250U2l6ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIuY2hlY2tGb3JTaXplQ2hhbmdlcygpO1xuICAgIH07XG5cbiAgICB0aGlzLiRjaGFuZ2VzID0gMDtcbiAgICB0aGlzLiR1cGRhdGVTaXplQXN5bmMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuJGxvb3AucGVuZGluZylcbiAgICAgICAgICAgIHRoaXMuJHNpemUuJGRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5vblJlc2l6ZSgpO1xuICAgIH07XG4gICAgdGhpcy5vblJlc2l6ZSA9IGZ1bmN0aW9uKGZvcmNlLCBndXR0ZXJXaWR0aCwgd2lkdGgsIGhlaWdodCkge1xuICAgICAgICBpZiAodGhpcy5yZXNpemluZyA+IDIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucmVzaXppbmcgPiAwKVxuICAgICAgICAgICAgdGhpcy5yZXNpemluZysrO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnJlc2l6aW5nID0gZm9yY2UgPyAxIDogMDtcbiAgICAgICAgdmFyIGVsID0gdGhpcy5jb250YWluZXI7XG4gICAgICAgIGlmICghaGVpZ2h0KVxuICAgICAgICAgICAgaGVpZ2h0ID0gZWwuY2xpZW50SGVpZ2h0IHx8IGVsLnNjcm9sbEhlaWdodDtcbiAgICAgICAgaWYgKCF3aWR0aClcbiAgICAgICAgICAgIHdpZHRoID0gZWwuY2xpZW50V2lkdGggfHwgZWwuc2Nyb2xsV2lkdGg7XG4gICAgICAgIHZhciBjaGFuZ2VzID0gdGhpcy4kdXBkYXRlQ2FjaGVkU2l6ZShmb3JjZSwgZ3V0dGVyV2lkdGgsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIFxuICAgICAgICBpZiAoIXRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQgfHwgKCF3aWR0aCAmJiAhaGVpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc2l6aW5nID0gMDtcblxuICAgICAgICBpZiAoZm9yY2UpXG4gICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci4kcGFkZGluZyA9IG51bGw7XG5cbiAgICAgICAgaWYgKGZvcmNlKVxuICAgICAgICAgICAgdGhpcy4kcmVuZGVyQ2hhbmdlcyhjaGFuZ2VzIHwgdGhpcy4kY2hhbmdlcywgdHJ1ZSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUoY2hhbmdlcyB8IHRoaXMuJGNoYW5nZXMpO1xuXG4gICAgICAgIGlmICh0aGlzLnJlc2l6aW5nKVxuICAgICAgICAgICAgdGhpcy5yZXNpemluZyA9IDA7XG4gICAgICAgIHRoaXMuc2Nyb2xsQmFyVi5zY3JvbGxMZWZ0ID0gdGhpcy5zY3JvbGxCYXJWLnNjcm9sbFRvcCA9IG51bGw7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLiR1cGRhdGVDYWNoZWRTaXplID0gZnVuY3Rpb24oZm9yY2UsIGd1dHRlcldpZHRoLCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIGhlaWdodCAtPSAodGhpcy4kZXh0cmFIZWlnaHQgfHwgMCk7XG4gICAgICAgIHZhciBjaGFuZ2VzID0gMDtcbiAgICAgICAgdmFyIHNpemUgPSB0aGlzLiRzaXplO1xuICAgICAgICB2YXIgb2xkU2l6ZSA9IHtcbiAgICAgICAgICAgIHdpZHRoOiBzaXplLndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiBzaXplLmhlaWdodCxcbiAgICAgICAgICAgIHNjcm9sbGVySGVpZ2h0OiBzaXplLnNjcm9sbGVySGVpZ2h0LFxuICAgICAgICAgICAgc2Nyb2xsZXJXaWR0aDogc2l6ZS5zY3JvbGxlcldpZHRoXG4gICAgICAgIH07XG4gICAgICAgIGlmIChoZWlnaHQgJiYgKGZvcmNlIHx8IHNpemUuaGVpZ2h0ICE9IGhlaWdodCkpIHtcbiAgICAgICAgICAgIHNpemUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICAgICAgY2hhbmdlcyB8PSB0aGlzLkNIQU5HRV9TSVpFO1xuXG4gICAgICAgICAgICBzaXplLnNjcm9sbGVySGVpZ2h0ID0gc2l6ZS5oZWlnaHQ7XG4gICAgICAgICAgICBpZiAodGhpcy4kaG9yaXpTY3JvbGwpXG4gICAgICAgICAgICAgICAgc2l6ZS5zY3JvbGxlckhlaWdodCAtPSB0aGlzLnNjcm9sbEJhckguZ2V0SGVpZ2h0KCk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEJhclYuZWxlbWVudC5zdHlsZS5ib3R0b20gPSB0aGlzLnNjcm9sbEJhckguZ2V0SGVpZ2h0KCkgKyBcInB4XCI7XG5cbiAgICAgICAgICAgIGNoYW5nZXMgPSBjaGFuZ2VzIHwgdGhpcy5DSEFOR0VfU0NST0xMO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHdpZHRoICYmIChmb3JjZSB8fCBzaXplLndpZHRoICE9IHdpZHRoKSkge1xuICAgICAgICAgICAgY2hhbmdlcyB8PSB0aGlzLkNIQU5HRV9TSVpFO1xuICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHdpZHRoO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoZ3V0dGVyV2lkdGggPT0gbnVsbClcbiAgICAgICAgICAgICAgICBndXR0ZXJXaWR0aCA9IHRoaXMuJHNob3dHdXR0ZXIgPyB0aGlzLiRndXR0ZXIub2Zmc2V0V2lkdGggOiAwO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLmd1dHRlcldpZHRoID0gZ3V0dGVyV2lkdGg7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQmFySC5lbGVtZW50LnN0eWxlLmxlZnQgPSBcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUubGVmdCA9IGd1dHRlcldpZHRoICsgXCJweFwiO1xuICAgICAgICAgICAgc2l6ZS5zY3JvbGxlcldpZHRoID0gTWF0aC5tYXgoMCwgd2lkdGggLSBndXR0ZXJXaWR0aCAtIHRoaXMuc2Nyb2xsQmFyVi5nZXRXaWR0aCgpKTsgICAgICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLnNjcm9sbEJhckguZWxlbWVudC5zdHlsZS5yaWdodCA9IFxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5yaWdodCA9IHRoaXMuc2Nyb2xsQmFyVi5nZXRXaWR0aCgpICsgXCJweFwiO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5ib3R0b20gPSB0aGlzLnNjcm9sbEJhckguZ2V0SGVpZ2h0KCkgKyBcInB4XCI7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnNlc3Npb24gJiYgdGhpcy5zZXNzaW9uLmdldFVzZVdyYXBNb2RlKCkgJiYgdGhpcy5hZGp1c3RXcmFwTGltaXQoKSB8fCBmb3JjZSlcbiAgICAgICAgICAgICAgICBjaGFuZ2VzIHw9IHRoaXMuQ0hBTkdFX0ZVTEw7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHNpemUuJGRpcnR5ID0gIXdpZHRoIHx8ICFoZWlnaHQ7XG5cbiAgICAgICAgaWYgKGNoYW5nZXMpXG4gICAgICAgICAgICB0aGlzLl9zaWduYWwoXCJyZXNpemVcIiwgb2xkU2l6ZSk7XG5cbiAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgfTtcblxuICAgIHRoaXMub25HdXR0ZXJSZXNpemUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGd1dHRlcldpZHRoID0gdGhpcy4kc2hvd0d1dHRlciA/IHRoaXMuJGd1dHRlci5vZmZzZXRXaWR0aCA6IDA7XG4gICAgICAgIGlmIChndXR0ZXJXaWR0aCAhPSB0aGlzLmd1dHRlcldpZHRoKVxuICAgICAgICAgICAgdGhpcy4kY2hhbmdlcyB8PSB0aGlzLiR1cGRhdGVDYWNoZWRTaXplKHRydWUsIGd1dHRlcldpZHRoLCB0aGlzLiRzaXplLndpZHRoLCB0aGlzLiRzaXplLmhlaWdodCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5nZXRVc2VXcmFwTW9kZSgpICYmIHRoaXMuYWRqdXN0V3JhcExpbWl0KCkpIHtcbiAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfRlVMTCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4kc2l6ZS4kZGlydHkpIHtcbiAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfRlVMTCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiRjb21wdXRlTGF5ZXJDb25maWcoKTtcbiAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfTUFSS0VSKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5hZGp1c3RXcmFwTGltaXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGF2YWlsYWJsZVdpZHRoID0gdGhpcy4kc2l6ZS5zY3JvbGxlcldpZHRoIC0gdGhpcy4kcGFkZGluZyAqIDI7XG4gICAgICAgIHZhciBsaW1pdCA9IE1hdGguZmxvb3IoYXZhaWxhYmxlV2lkdGggLyB0aGlzLmNoYXJhY3RlcldpZHRoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5hZGp1c3RXcmFwTGltaXQobGltaXQsIHRoaXMuJHNob3dQcmludE1hcmdpbiAmJiB0aGlzLiRwcmludE1hcmdpbkNvbHVtbik7XG4gICAgfTtcbiAgICB0aGlzLnNldEFuaW1hdGVkU2Nyb2xsID0gZnVuY3Rpb24oc2hvdWxkQW5pbWF0ZSl7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uKFwiYW5pbWF0ZWRTY3JvbGxcIiwgc2hvdWxkQW5pbWF0ZSk7XG4gICAgfTtcbiAgICB0aGlzLmdldEFuaW1hdGVkU2Nyb2xsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRhbmltYXRlZFNjcm9sbDtcbiAgICB9O1xuICAgIHRoaXMuc2V0U2hvd0ludmlzaWJsZXMgPSBmdW5jdGlvbihzaG93SW52aXNpYmxlcykge1xuICAgICAgICB0aGlzLnNldE9wdGlvbihcInNob3dJbnZpc2libGVzXCIsIHNob3dJbnZpc2libGVzKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci5zZXRTaG93SW52aXNpYmxlcyhzaG93SW52aXNpYmxlcyk7XG4gICAgfTtcbiAgICB0aGlzLmdldFNob3dJbnZpc2libGVzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbihcInNob3dJbnZpc2libGVzXCIpO1xuICAgIH07XG4gICAgdGhpcy5nZXREaXNwbGF5SW5kZW50R3VpZGVzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbihcImRpc3BsYXlJbmRlbnRHdWlkZXNcIik7XG4gICAgfTtcblxuICAgIHRoaXMuc2V0RGlzcGxheUluZGVudEd1aWRlcyA9IGZ1bmN0aW9uKGRpc3BsYXkpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJkaXNwbGF5SW5kZW50R3VpZGVzXCIsIGRpc3BsYXkpO1xuICAgIH07XG4gICAgdGhpcy5zZXRTaG93UHJpbnRNYXJnaW4gPSBmdW5jdGlvbihzaG93UHJpbnRNYXJnaW4pIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJzaG93UHJpbnRNYXJnaW5cIiwgc2hvd1ByaW50TWFyZ2luKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0U2hvd1ByaW50TWFyZ2luID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbihcInNob3dQcmludE1hcmdpblwiKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0UHJpbnRNYXJnaW5Db2x1bW4gPSBmdW5jdGlvbihzaG93UHJpbnRNYXJnaW4pIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJwcmludE1hcmdpbkNvbHVtblwiLCBzaG93UHJpbnRNYXJnaW4pO1xuICAgIH07XG4gICAgdGhpcy5nZXRQcmludE1hcmdpbkNvbHVtbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJwcmludE1hcmdpbkNvbHVtblwiKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0U2hvd0d1dHRlciA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbihcInNob3dHdXR0ZXJcIik7XG4gICAgfTtcbiAgICB0aGlzLnNldFNob3dHdXR0ZXIgPSBmdW5jdGlvbihzaG93KXtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9uKFwic2hvd0d1dHRlclwiLCBzaG93KTtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRGYWRlRm9sZFdpZGdldHMgPSBmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJmYWRlRm9sZFdpZGdldHNcIik7XG4gICAgfTtcblxuICAgIHRoaXMuc2V0RmFkZUZvbGRXaWRnZXRzID0gZnVuY3Rpb24oc2hvdykge1xuICAgICAgICB0aGlzLnNldE9wdGlvbihcImZhZGVGb2xkV2lkZ2V0c1wiLCBzaG93KTtcbiAgICB9O1xuXG4gICAgdGhpcy5zZXRIaWdobGlnaHRHdXR0ZXJMaW5lID0gZnVuY3Rpb24oc2hvdWxkSGlnaGxpZ2h0KSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uKFwiaGlnaGxpZ2h0R3V0dGVyTGluZVwiLCBzaG91bGRIaWdobGlnaHQpO1xuICAgIH07XG5cbiAgICB0aGlzLmdldEhpZ2hsaWdodEd1dHRlckxpbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKFwiaGlnaGxpZ2h0R3V0dGVyTGluZVwiKTtcbiAgICB9O1xuXG4gICAgdGhpcy4kdXBkYXRlR3V0dGVyTGluZUhpZ2hsaWdodCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcG9zID0gdGhpcy4kY3Vyc29yTGF5ZXIuJHBpeGVsUG9zO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5sYXllckNvbmZpZy5saW5lSGVpZ2h0O1xuICAgICAgICBpZiAodGhpcy5zZXNzaW9uLmdldFVzZVdyYXBNb2RlKCkpIHtcbiAgICAgICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLnNlc3Npb24uc2VsZWN0aW9uLmdldEN1cnNvcigpO1xuICAgICAgICAgICAgY3Vyc29yLmNvbHVtbiA9IDA7XG4gICAgICAgICAgICBwb3MgPSB0aGlzLiRjdXJzb3JMYXllci5nZXRQaXhlbFBvc2l0aW9uKGN1cnNvciwgdHJ1ZSk7XG4gICAgICAgICAgICBoZWlnaHQgKj0gdGhpcy5zZXNzaW9uLmdldFJvd0xlbmd0aChjdXJzb3Iucm93KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0LnN0eWxlLnRvcCA9IHBvcy50b3AgLSB0aGlzLmxheWVyQ29uZmlnLm9mZnNldCArIFwicHhcIjtcbiAgICAgICAgdGhpcy4kZ3V0dGVyTGluZUhpZ2hsaWdodC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyBcInB4XCI7XG4gICAgfTtcblxuICAgIHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy4kc2hvd1ByaW50TWFyZ2luICYmICF0aGlzLiRwcmludE1hcmdpbkVsKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGlmICghdGhpcy4kcHJpbnRNYXJnaW5FbCkge1xuICAgICAgICAgICAgdmFyIGNvbnRhaW5lckVsID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgICBjb250YWluZXJFbC5jbGFzc05hbWUgPSBcImFjZV9sYXllciBhY2VfcHJpbnQtbWFyZ2luLWxheWVyXCI7XG4gICAgICAgICAgICB0aGlzLiRwcmludE1hcmdpbkVsID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgICB0aGlzLiRwcmludE1hcmdpbkVsLmNsYXNzTmFtZSA9IFwiYWNlX3ByaW50LW1hcmdpblwiO1xuICAgICAgICAgICAgY29udGFpbmVyRWwuYXBwZW5kQ2hpbGQodGhpcy4kcHJpbnRNYXJnaW5FbCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnQuaW5zZXJ0QmVmb3JlKGNvbnRhaW5lckVsLCB0aGlzLmNvbnRlbnQuZmlyc3RDaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3R5bGUgPSB0aGlzLiRwcmludE1hcmdpbkVsLnN0eWxlO1xuICAgICAgICBzdHlsZS5sZWZ0ID0gKCh0aGlzLmNoYXJhY3RlcldpZHRoICogdGhpcy4kcHJpbnRNYXJnaW5Db2x1bW4pICsgdGhpcy4kcGFkZGluZykgKyBcInB4XCI7XG4gICAgICAgIHN0eWxlLnZpc2liaWxpdHkgPSB0aGlzLiRzaG93UHJpbnRNYXJnaW4gPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XG4gICAgICAgIFxuICAgICAgICBpZiAodGhpcy5zZXNzaW9uICYmIHRoaXMuc2Vzc2lvbi4kd3JhcCA9PSAtMSlcbiAgICAgICAgICAgIHRoaXMuYWRqdXN0V3JhcExpbWl0KCk7XG4gICAgfTtcbiAgICB0aGlzLmdldENvbnRhaW5lckVsZW1lbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICAgIH07XG4gICAgdGhpcy5nZXRNb3VzZUV2ZW50VGFyZ2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjcm9sbGVyO1xuICAgIH07XG4gICAgdGhpcy5nZXRUZXh0QXJlYUNvbnRhaW5lciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgfTtcbiAgICB0aGlzLiRtb3ZlVGV4dEFyZWFUb0N1cnNvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIXRoaXMuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgY29uZmlnID0gdGhpcy5sYXllckNvbmZpZztcbiAgICAgICAgdmFyIHBvc1RvcCA9IHRoaXMuJGN1cnNvckxheWVyLiRwaXhlbFBvcy50b3A7XG4gICAgICAgIHZhciBwb3NMZWZ0ID0gdGhpcy4kY3Vyc29yTGF5ZXIuJHBpeGVsUG9zLmxlZnQ7XG4gICAgICAgIHBvc1RvcCAtPSBjb25maWcub2Zmc2V0O1xuXG4gICAgICAgIHZhciBzdHlsZSA9IHRoaXMudGV4dGFyZWEuc3R5bGU7XG4gICAgICAgIHZhciBoID0gdGhpcy5saW5lSGVpZ2h0O1xuICAgICAgICBpZiAocG9zVG9wIDwgMCB8fCBwb3NUb3AgPiBjb25maWcuaGVpZ2h0IC0gaCkge1xuICAgICAgICAgICAgc3R5bGUudG9wID0gc3R5bGUubGVmdCA9IFwiMFwiO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHcgPSB0aGlzLmNoYXJhY3RlcldpZHRoO1xuICAgICAgICBpZiAodGhpcy4kY29tcG9zaXRpb24pIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLnRleHRhcmVhLnZhbHVlLnJlcGxhY2UoL15cXHgwMSsvLCBcIlwiKTtcbiAgICAgICAgICAgIHcgKj0gKHRoaXMuc2Vzc2lvbi4kZ2V0U3RyaW5nU2NyZWVuV2lkdGgodmFsKVswXSsyKTtcbiAgICAgICAgICAgIGggKz0gMjtcbiAgICAgICAgfVxuICAgICAgICBwb3NMZWZ0IC09IHRoaXMuc2Nyb2xsTGVmdDtcbiAgICAgICAgaWYgKHBvc0xlZnQgPiB0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGggLSB3KVxuICAgICAgICAgICAgcG9zTGVmdCA9IHRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aCAtIHc7XG5cbiAgICAgICAgcG9zTGVmdCArPSB0aGlzLmd1dHRlcldpZHRoO1xuICAgICAgICBzdHlsZS5oZWlnaHQgPSBoICsgXCJweFwiO1xuICAgICAgICBzdHlsZS53aWR0aCA9IHcgKyBcInB4XCI7XG4gICAgICAgIHN0eWxlLmxlZnQgPSBNYXRoLm1pbihwb3NMZWZ0LCB0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGggLSB3KSArIFwicHhcIjtcbiAgICAgICAgc3R5bGUudG9wID0gTWF0aC5taW4ocG9zVG9wLCB0aGlzLiRzaXplLmhlaWdodCAtIGgpICsgXCJweFwiO1xuICAgIH07XG4gICAgdGhpcy5nZXRGaXJzdFZpc2libGVSb3cgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5ZXJDb25maWcuZmlyc3RSb3c7XG4gICAgfTtcbiAgICB0aGlzLmdldEZpcnN0RnVsbHlWaXNpYmxlUm93ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxheWVyQ29uZmlnLmZpcnN0Um93ICsgKHRoaXMubGF5ZXJDb25maWcub2Zmc2V0ID09PSAwID8gMCA6IDEpO1xuICAgIH07XG4gICAgdGhpcy5nZXRMYXN0RnVsbHlWaXNpYmxlUm93ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjb25maWcgPSB0aGlzLmxheWVyQ29uZmlnO1xuICAgICAgICB2YXIgbGFzdFJvdyA9IGNvbmZpZy5sYXN0Um93O1xuICAgICAgICB2YXIgdG9wID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Sb3cobGFzdFJvdywgMCkgKiBjb25maWcubGluZUhlaWdodDtcbiAgICAgICAgaWYgKHRvcCAtIHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKSA+IGNvbmZpZy5oZWlnaHQgLSBjb25maWcubGluZUhlaWdodClcbiAgICAgICAgICAgIHJldHVybiBsYXN0Um93IC0gMTtcbiAgICAgICAgcmV0dXJuIGxhc3RSb3c7XG4gICAgfTtcbiAgICB0aGlzLmdldExhc3RWaXNpYmxlUm93ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxheWVyQ29uZmlnLmxhc3RSb3c7XG4gICAgfTtcblxuICAgIHRoaXMuJHBhZGRpbmcgPSBudWxsO1xuICAgIHRoaXMuc2V0UGFkZGluZyA9IGZ1bmN0aW9uKHBhZGRpbmcpIHtcbiAgICAgICAgdGhpcy4kcGFkZGluZyA9IHBhZGRpbmc7XG4gICAgICAgIHRoaXMuJHRleHRMYXllci5zZXRQYWRkaW5nKHBhZGRpbmcpO1xuICAgICAgICB0aGlzLiRjdXJzb3JMYXllci5zZXRQYWRkaW5nKHBhZGRpbmcpO1xuICAgICAgICB0aGlzLiRtYXJrZXJGcm9udC5zZXRQYWRkaW5nKHBhZGRpbmcpO1xuICAgICAgICB0aGlzLiRtYXJrZXJCYWNrLnNldFBhZGRpbmcocGFkZGluZyk7XG4gICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfRlVMTCk7XG4gICAgICAgIHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCk7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLnNldFNjcm9sbE1hcmdpbiA9IGZ1bmN0aW9uKHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCkge1xuICAgICAgICB2YXIgc20gPSB0aGlzLnNjcm9sbE1hcmdpbjtcbiAgICAgICAgc20udG9wID0gdG9wfDA7XG4gICAgICAgIHNtLmJvdHRvbSA9IGJvdHRvbXwwO1xuICAgICAgICBzbS5yaWdodCA9IHJpZ2h0fDA7XG4gICAgICAgIHNtLmxlZnQgPSBsZWZ0fDA7XG4gICAgICAgIHNtLnYgPSBzbS50b3AgKyBzbS5ib3R0b207XG4gICAgICAgIHNtLmggPSBzbS5sZWZ0ICsgc20ucmlnaHQ7XG4gICAgICAgIGlmIChzbS50b3AgJiYgdGhpcy5zY3JvbGxUb3AgPD0gMCAmJiB0aGlzLnNlc3Npb24pXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKC1zbS50b3ApO1xuICAgICAgICB0aGlzLnVwZGF0ZUZ1bGwoKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0SFNjcm9sbEJhckFsd2F5c1Zpc2libGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGhTY3JvbGxCYXJBbHdheXNWaXNpYmxlO1xuICAgIH07XG4gICAgdGhpcy5zZXRIU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZSA9IGZ1bmN0aW9uKGFsd2F5c1Zpc2libGUpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJoU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZVwiLCBhbHdheXNWaXNpYmxlKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0VlNjcm9sbEJhckFsd2F5c1Zpc2libGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHZTY3JvbGxCYXJBbHdheXNWaXNpYmxlO1xuICAgIH07XG4gICAgdGhpcy5zZXRWU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZSA9IGZ1bmN0aW9uKGFsd2F5c1Zpc2libGUpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJ2U2Nyb2xsQmFyQWx3YXlzVmlzaWJsZVwiLCBhbHdheXNWaXNpYmxlKTtcbiAgICB9O1xuXG4gICAgdGhpcy4kdXBkYXRlU2Nyb2xsQmFyViA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc2Nyb2xsSGVpZ2h0ID0gdGhpcy5sYXllckNvbmZpZy5tYXhIZWlnaHQ7XG4gICAgICAgIHZhciBzY3JvbGxlckhlaWdodCA9IHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQ7XG4gICAgICAgIGlmICghdGhpcy4kbWF4TGluZXMgJiYgdGhpcy4kc2Nyb2xsUGFzdEVuZCkge1xuICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0IC09IChzY3JvbGxlckhlaWdodCAtIHRoaXMubGluZUhlaWdodCkgKiB0aGlzLiRzY3JvbGxQYXN0RW5kO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2Nyb2xsVG9wID4gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsZXJIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBzY3JvbGxIZWlnaHQgPSB0aGlzLnNjcm9sbFRvcCArIHNjcm9sbGVySGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQmFyVi5zY3JvbGxUb3AgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2Nyb2xsQmFyVi5zZXRTY3JvbGxIZWlnaHQoc2Nyb2xsSGVpZ2h0ICsgdGhpcy5zY3JvbGxNYXJnaW4udik7XG4gICAgICAgIHRoaXMuc2Nyb2xsQmFyVi5zZXRTY3JvbGxUb3AodGhpcy5zY3JvbGxUb3AgKyB0aGlzLnNjcm9sbE1hcmdpbi50b3ApO1xuICAgIH07XG4gICAgdGhpcy4kdXBkYXRlU2Nyb2xsQmFySCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNjcm9sbEJhckguc2V0U2Nyb2xsV2lkdGgodGhpcy5sYXllckNvbmZpZy53aWR0aCArIDIgKiB0aGlzLiRwYWRkaW5nICsgdGhpcy5zY3JvbGxNYXJnaW4uaCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQmFySC5zZXRTY3JvbGxMZWZ0KHRoaXMuc2Nyb2xsTGVmdCArIHRoaXMuc2Nyb2xsTWFyZ2luLmxlZnQpO1xuICAgIH07XG4gICAgXG4gICAgdGhpcy4kZnJvemVuID0gZmFsc2U7XG4gICAgdGhpcy5mcmVlemUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kZnJvemVuID0gdHJ1ZTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMudW5mcmVlemUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kZnJvemVuID0gZmFsc2U7XG4gICAgfTtcblxuICAgIHRoaXMuJHJlbmRlckNoYW5nZXMgPSBmdW5jdGlvbihjaGFuZ2VzLCBmb3JjZSkge1xuICAgICAgICBpZiAodGhpcy4kY2hhbmdlcykge1xuICAgICAgICAgICAgY2hhbmdlcyB8PSB0aGlzLiRjaGFuZ2VzO1xuICAgICAgICAgICAgdGhpcy4kY2hhbmdlcyA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCghdGhpcy5zZXNzaW9uIHx8ICF0aGlzLmNvbnRhaW5lci5vZmZzZXRXaWR0aCB8fCB0aGlzLiRmcm96ZW4pIHx8ICghY2hhbmdlcyAmJiAhZm9yY2UpKSB7XG4gICAgICAgICAgICB0aGlzLiRjaGFuZ2VzIHw9IGNoYW5nZXM7XG4gICAgICAgICAgICByZXR1cm47IFxuICAgICAgICB9IFxuICAgICAgICBpZiAodGhpcy4kc2l6ZS4kZGlydHkpIHtcbiAgICAgICAgICAgIHRoaXMuJGNoYW5nZXMgfD0gY2hhbmdlcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9uUmVzaXplKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5saW5lSGVpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIuY2hlY2tGb3JTaXplQ2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9zaWduYWwoXCJiZWZvcmVSZW5kZXJcIik7XG5cbiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbiAmJiB0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyKVxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci51cGRhdGVDaGFyYWN0ZXJXaWR0aHModGhpcy4kZm9udE1ldHJpY3MpO1xuXG4gICAgICAgIHZhciBjb25maWcgPSB0aGlzLmxheWVyQ29uZmlnO1xuICAgICAgICBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0ZVTEwgfHxcbiAgICAgICAgICAgIGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9TSVpFIHx8XG4gICAgICAgICAgICBjaGFuZ2VzICYgdGhpcy5DSEFOR0VfVEVYVCB8fFxuICAgICAgICAgICAgY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0xJTkVTIHx8XG4gICAgICAgICAgICBjaGFuZ2VzICYgdGhpcy5DSEFOR0VfU0NST0xMIHx8XG4gICAgICAgICAgICBjaGFuZ2VzICYgdGhpcy5DSEFOR0VfSF9TQ1JPTExcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjaGFuZ2VzIHw9IHRoaXMuJGNvbXB1dGVMYXllckNvbmZpZygpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5maXJzdFJvdyAhPSB0aGlzLmxheWVyQ29uZmlnLmZpcnN0Um93ICYmIGNvbmZpZy5maXJzdFJvd1NjcmVlbiA9PSB0aGlzLmxheWVyQ29uZmlnLmZpcnN0Um93U2NyZWVuKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0ID0gdGhpcy5zY3JvbGxUb3AgKyAoY29uZmlnLmZpcnN0Um93IC0gdGhpcy5sYXllckNvbmZpZy5maXJzdFJvdykgKiB0aGlzLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICAgICAgaWYgKHN0ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvcCA9IHN0O1xuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzID0gY2hhbmdlcyB8IHRoaXMuQ0hBTkdFX1NDUk9MTDtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyB8PSB0aGlzLiRjb21wdXRlTGF5ZXJDb25maWcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25maWcgPSB0aGlzLmxheWVyQ29uZmlnO1xuICAgICAgICAgICAgdGhpcy4kdXBkYXRlU2Nyb2xsQmFyVigpO1xuICAgICAgICAgICAgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9IX1NDUk9MTClcbiAgICAgICAgICAgICAgICB0aGlzLiR1cGRhdGVTY3JvbGxCYXJIKCk7XG4gICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci5lbGVtZW50LnN0eWxlLm1hcmdpblRvcCA9ICgtY29uZmlnLm9mZnNldCkgKyBcInB4XCI7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnQuc3R5bGUubWFyZ2luVG9wID0gKC1jb25maWcub2Zmc2V0KSArIFwicHhcIjtcbiAgICAgICAgICAgIHRoaXMuY29udGVudC5zdHlsZS53aWR0aCA9IGNvbmZpZy53aWR0aCArIDIgKiB0aGlzLiRwYWRkaW5nICsgXCJweFwiO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50LnN0eWxlLmhlaWdodCA9IGNvbmZpZy5taW5IZWlnaHQgKyBcInB4XCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9IX1NDUk9MTCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50LnN0eWxlLm1hcmdpbkxlZnQgPSAtdGhpcy5zY3JvbGxMZWZ0ICsgXCJweFwiO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5jbGFzc05hbWUgPSB0aGlzLnNjcm9sbExlZnQgPD0gMCA/IFwiYWNlX3Njcm9sbGVyXCIgOiBcImFjZV9zY3JvbGxlciBhY2Vfc2Nyb2xsLWxlZnRcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0ZVTEwpIHtcbiAgICAgICAgICAgIHRoaXMuJHRleHRMYXllci51cGRhdGUoY29uZmlnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLiRzaG93R3V0dGVyKVxuICAgICAgICAgICAgICAgIHRoaXMuJGd1dHRlckxheWVyLnVwZGF0ZShjb25maWcpO1xuICAgICAgICAgICAgdGhpcy4kbWFya2VyQmFjay51cGRhdGUoY29uZmlnKTtcbiAgICAgICAgICAgIHRoaXMuJG1hcmtlckZyb250LnVwZGF0ZShjb25maWcpO1xuICAgICAgICAgICAgdGhpcy4kY3Vyc29yTGF5ZXIudXBkYXRlKGNvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLiRtb3ZlVGV4dEFyZWFUb0N1cnNvcigpO1xuICAgICAgICAgICAgdGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZSAmJiB0aGlzLiR1cGRhdGVHdXR0ZXJMaW5lSGlnaGxpZ2h0KCk7XG4gICAgICAgICAgICB0aGlzLl9zaWduYWwoXCJhZnRlclJlbmRlclwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX1NDUk9MTCkge1xuICAgICAgICAgICAgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9URVhUIHx8IGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9MSU5FUylcbiAgICAgICAgICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIudXBkYXRlKGNvbmZpZyk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy4kdGV4dExheWVyLnNjcm9sbExpbmVzKGNvbmZpZyk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLiRzaG93R3V0dGVyKVxuICAgICAgICAgICAgICAgIHRoaXMuJGd1dHRlckxheWVyLnVwZGF0ZShjb25maWcpO1xuICAgICAgICAgICAgdGhpcy4kbWFya2VyQmFjay51cGRhdGUoY29uZmlnKTtcbiAgICAgICAgICAgIHRoaXMuJG1hcmtlckZyb250LnVwZGF0ZShjb25maWcpO1xuICAgICAgICAgICAgdGhpcy4kY3Vyc29yTGF5ZXIudXBkYXRlKGNvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLiRoaWdobGlnaHRHdXR0ZXJMaW5lICYmIHRoaXMuJHVwZGF0ZUd1dHRlckxpbmVIaWdobGlnaHQoKTtcbiAgICAgICAgICAgIHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7XG4gICAgICAgICAgICB0aGlzLl9zaWduYWwoXCJhZnRlclJlbmRlclwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfVEVYVCkge1xuICAgICAgICAgICAgdGhpcy4kdGV4dExheWVyLnVwZGF0ZShjb25maWcpO1xuICAgICAgICAgICAgaWYgKHRoaXMuJHNob3dHdXR0ZXIpXG4gICAgICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0xJTkVTKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4kdXBkYXRlTGluZXMoKSB8fCAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0dVVFRFUikgJiYgdGhpcy4kc2hvd0d1dHRlcilcbiAgICAgICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci51cGRhdGUoY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfVEVYVCB8fCBjaGFuZ2VzICYgdGhpcy5DSEFOR0VfR1VUVEVSKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4kc2hvd0d1dHRlcilcbiAgICAgICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci51cGRhdGUoY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfQ1VSU09SKSB7XG4gICAgICAgICAgICB0aGlzLiRjdXJzb3JMYXllci51cGRhdGUoY29uZmlnKTtcbiAgICAgICAgICAgIHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7XG4gICAgICAgICAgICB0aGlzLiRoaWdobGlnaHRHdXR0ZXJMaW5lICYmIHRoaXMuJHVwZGF0ZUd1dHRlckxpbmVIaWdobGlnaHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzICYgKHRoaXMuQ0hBTkdFX01BUktFUiB8IHRoaXMuQ0hBTkdFX01BUktFUl9GUk9OVCkpIHtcbiAgICAgICAgICAgIHRoaXMuJG1hcmtlckZyb250LnVwZGF0ZShjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMgJiAodGhpcy5DSEFOR0VfTUFSS0VSIHwgdGhpcy5DSEFOR0VfTUFSS0VSX0JBQ0spKSB7XG4gICAgICAgICAgICB0aGlzLiRtYXJrZXJCYWNrLnVwZGF0ZShjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2lnbmFsKFwiYWZ0ZXJSZW5kZXJcIik7XG4gICAgfTtcblxuICAgIFxuICAgIHRoaXMuJGF1dG9zaXplID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLnNlc3Npb24uZ2V0U2NyZWVuTGVuZ3RoKCkgKiB0aGlzLmxpbmVIZWlnaHQ7XG4gICAgICAgIHZhciBtYXhIZWlnaHQgPSB0aGlzLiRtYXhMaW5lcyAqIHRoaXMubGluZUhlaWdodDtcbiAgICAgICAgdmFyIGRlc2lyZWRIZWlnaHQgPSBNYXRoLm1pbihtYXhIZWlnaHQsXG4gICAgICAgICAgICBNYXRoLm1heCgodGhpcy4kbWluTGluZXMgfHwgMSkgKiB0aGlzLmxpbmVIZWlnaHQsIGhlaWdodClcbiAgICAgICAgKSArIHRoaXMuc2Nyb2xsTWFyZ2luLnYgKyAodGhpcy4kZXh0cmFIZWlnaHQgfHwgMCk7XG4gICAgICAgIGlmICh0aGlzLiRob3JpelNjcm9sbClcbiAgICAgICAgICAgIGRlc2lyZWRIZWlnaHQgKz0gdGhpcy5zY3JvbGxCYXJILmdldEhlaWdodCgpO1xuICAgICAgICBpZiAodGhpcy4kbWF4UGl4ZWxIZWlnaHQgJiYgZGVzaXJlZEhlaWdodCA+IHRoaXMuJG1heFBpeGVsSGVpZ2h0KVxuICAgICAgICAgICAgZGVzaXJlZEhlaWdodCA9IHRoaXMuJG1heFBpeGVsSGVpZ2h0O1xuICAgICAgICB2YXIgdlNjcm9sbCA9IGhlaWdodCA+IG1heEhlaWdodDtcbiAgICAgICAgXG4gICAgICAgIGlmIChkZXNpcmVkSGVpZ2h0ICE9IHRoaXMuZGVzaXJlZEhlaWdodCB8fFxuICAgICAgICAgICAgdGhpcy4kc2l6ZS5oZWlnaHQgIT0gdGhpcy5kZXNpcmVkSGVpZ2h0IHx8IHZTY3JvbGwgIT0gdGhpcy4kdlNjcm9sbCkge1xuICAgICAgICAgICAgaWYgKHZTY3JvbGwgIT0gdGhpcy4kdlNjcm9sbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJHZTY3JvbGwgPSB2U2Nyb2xsO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQmFyVi5zZXRWaXNpYmxlKHZTY3JvbGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdyA9IHRoaXMuY29udGFpbmVyLmNsaWVudFdpZHRoO1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gZGVzaXJlZEhlaWdodCArIFwicHhcIjtcbiAgICAgICAgICAgIHRoaXMuJHVwZGF0ZUNhY2hlZFNpemUodHJ1ZSwgdGhpcy4kZ3V0dGVyV2lkdGgsIHcsIGRlc2lyZWRIZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5kZXNpcmVkSGVpZ2h0ID0gZGVzaXJlZEhlaWdodDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5fc2lnbmFsKFwiYXV0b3NpemVcIik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFxuICAgIHRoaXMuJGNvbXB1dGVMYXllckNvbmZpZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcbiAgICAgICAgdmFyIHNpemUgPSB0aGlzLiRzaXplO1xuICAgICAgICBcbiAgICAgICAgdmFyIGhpZGVTY3JvbGxiYXJzID0gc2l6ZS5oZWlnaHQgPD0gMiAqIHRoaXMubGluZUhlaWdodDtcbiAgICAgICAgdmFyIHNjcmVlbkxpbmVzID0gdGhpcy5zZXNzaW9uLmdldFNjcmVlbkxlbmd0aCgpO1xuICAgICAgICB2YXIgbWF4SGVpZ2h0ID0gc2NyZWVuTGluZXMgKiB0aGlzLmxpbmVIZWlnaHQ7XG5cbiAgICAgICAgdmFyIGxvbmdlc3RMaW5lID0gdGhpcy4kZ2V0TG9uZ2VzdExpbmUoKTtcbiAgICAgICAgXG4gICAgICAgIHZhciBob3JpelNjcm9sbCA9ICFoaWRlU2Nyb2xsYmFycyAmJiAodGhpcy4kaFNjcm9sbEJhckFsd2F5c1Zpc2libGUgfHxcbiAgICAgICAgICAgIHNpemUuc2Nyb2xsZXJXaWR0aCAtIGxvbmdlc3RMaW5lIC0gMiAqIHRoaXMuJHBhZGRpbmcgPCAwKTtcblxuICAgICAgICB2YXIgaFNjcm9sbENoYW5nZWQgPSB0aGlzLiRob3JpelNjcm9sbCAhPT0gaG9yaXpTY3JvbGw7XG4gICAgICAgIGlmIChoU2Nyb2xsQ2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy4kaG9yaXpTY3JvbGwgPSBob3JpelNjcm9sbDtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQmFySC5zZXRWaXNpYmxlKGhvcml6U2Nyb2xsKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdlNjcm9sbEJlZm9yZSA9IHRoaXMuJHZTY3JvbGw7IC8vIGF1dG9zaXplIGNhbiBjaGFuZ2UgdnNjcm9sbCB2YWx1ZSBpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gdXBkYXRlIGxvbmdlc3RMaW5lXG4gICAgICAgIGlmICh0aGlzLiRtYXhMaW5lcyAmJiB0aGlzLmxpbmVIZWlnaHQgPiAxKVxuICAgICAgICAgICAgdGhpcy4kYXV0b3NpemUoKTtcblxuICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5zY3JvbGxUb3AgJSB0aGlzLmxpbmVIZWlnaHQ7XG4gICAgICAgIHZhciBtaW5IZWlnaHQgPSBzaXplLnNjcm9sbGVySGVpZ2h0ICsgdGhpcy5saW5lSGVpZ2h0O1xuICAgICAgICBcbiAgICAgICAgdmFyIHNjcm9sbFBhc3RFbmQgPSAhdGhpcy4kbWF4TGluZXMgJiYgdGhpcy4kc2Nyb2xsUGFzdEVuZFxuICAgICAgICAgICAgPyAoc2l6ZS5zY3JvbGxlckhlaWdodCAtIHRoaXMubGluZUhlaWdodCkgKiB0aGlzLiRzY3JvbGxQYXN0RW5kXG4gICAgICAgICAgICA6IDA7XG4gICAgICAgIG1heEhlaWdodCArPSBzY3JvbGxQYXN0RW5kO1xuICAgICAgICBcbiAgICAgICAgdmFyIHNtID0gdGhpcy5zY3JvbGxNYXJnaW47XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3AoTWF0aC5tYXgoLXNtLnRvcCxcbiAgICAgICAgICAgIE1hdGgubWluKHRoaXMuc2Nyb2xsVG9wLCBtYXhIZWlnaHQgLSBzaXplLnNjcm9sbGVySGVpZ2h0ICsgc20uYm90dG9tKSkpO1xuXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KE1hdGgubWF4KC1zbS5sZWZ0LCBNYXRoLm1pbih0aGlzLnNjcm9sbExlZnQsIFxuICAgICAgICAgICAgbG9uZ2VzdExpbmUgKyAyICogdGhpcy4kcGFkZGluZyAtIHNpemUuc2Nyb2xsZXJXaWR0aCArIHNtLnJpZ2h0KSkpO1xuICAgICAgICBcbiAgICAgICAgdmFyIHZTY3JvbGwgPSAhaGlkZVNjcm9sbGJhcnMgJiYgKHRoaXMuJHZTY3JvbGxCYXJBbHdheXNWaXNpYmxlIHx8XG4gICAgICAgICAgICBzaXplLnNjcm9sbGVySGVpZ2h0IC0gbWF4SGVpZ2h0ICsgc2Nyb2xsUGFzdEVuZCA8IDAgfHwgdGhpcy5zY3JvbGxUb3AgPiBzbS50b3ApO1xuICAgICAgICB2YXIgdlNjcm9sbENoYW5nZWQgPSB2U2Nyb2xsQmVmb3JlICE9PSB2U2Nyb2xsO1xuICAgICAgICBpZiAodlNjcm9sbENoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMuJHZTY3JvbGwgPSB2U2Nyb2xsO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxCYXJWLnNldFZpc2libGUodlNjcm9sbCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGluZUNvdW50ID0gTWF0aC5jZWlsKG1pbkhlaWdodCAvIHRoaXMubGluZUhlaWdodCkgLSAxO1xuICAgICAgICB2YXIgZmlyc3RSb3cgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKCh0aGlzLnNjcm9sbFRvcCAtIG9mZnNldCkgLyB0aGlzLmxpbmVIZWlnaHQpKTtcbiAgICAgICAgdmFyIGxhc3RSb3cgPSBmaXJzdFJvdyArIGxpbmVDb3VudDtcbiAgICAgICAgdmFyIGZpcnN0Um93U2NyZWVuLCBmaXJzdFJvd0hlaWdodDtcbiAgICAgICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLmxpbmVIZWlnaHQ7XG4gICAgICAgIGZpcnN0Um93ID0gc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50Um93KGZpcnN0Um93LCAwKTtcbiAgICAgICAgdmFyIGZvbGRMaW5lID0gc2Vzc2lvbi5nZXRGb2xkTGluZShmaXJzdFJvdyk7XG4gICAgICAgIGlmIChmb2xkTGluZSkge1xuICAgICAgICAgICAgZmlyc3RSb3cgPSBmb2xkTGluZS5zdGFydC5yb3c7XG4gICAgICAgIH1cblxuICAgICAgICBmaXJzdFJvd1NjcmVlbiA9IHNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblJvdyhmaXJzdFJvdywgMCk7XG4gICAgICAgIGZpcnN0Um93SGVpZ2h0ID0gc2Vzc2lvbi5nZXRSb3dMZW5ndGgoZmlyc3RSb3cpICogbGluZUhlaWdodDtcblxuICAgICAgICBsYXN0Um93ID0gTWF0aC5taW4oc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50Um93KGxhc3RSb3csIDApLCBzZXNzaW9uLmdldExlbmd0aCgpIC0gMSk7XG4gICAgICAgIG1pbkhlaWdodCA9IHNpemUuc2Nyb2xsZXJIZWlnaHQgKyBzZXNzaW9uLmdldFJvd0xlbmd0aChsYXN0Um93KSAqIGxpbmVIZWlnaHQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RSb3dIZWlnaHQ7XG5cbiAgICAgICAgb2Zmc2V0ID0gdGhpcy5zY3JvbGxUb3AgLSBmaXJzdFJvd1NjcmVlbiAqIGxpbmVIZWlnaHQ7XG5cbiAgICAgICAgdmFyIGNoYW5nZXMgPSAwO1xuICAgICAgICBpZiAodGhpcy5sYXllckNvbmZpZy53aWR0aCAhPSBsb25nZXN0TGluZSkgXG4gICAgICAgICAgICBjaGFuZ2VzID0gdGhpcy5DSEFOR0VfSF9TQ1JPTEw7XG4gICAgICAgIGlmIChoU2Nyb2xsQ2hhbmdlZCB8fCB2U2Nyb2xsQ2hhbmdlZCkge1xuICAgICAgICAgICAgY2hhbmdlcyA9IHRoaXMuJHVwZGF0ZUNhY2hlZFNpemUodHJ1ZSwgdGhpcy5ndXR0ZXJXaWR0aCwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5fc2lnbmFsKFwic2Nyb2xsYmFyVmlzaWJpbGl0eUNoYW5nZWRcIik7XG4gICAgICAgICAgICBpZiAodlNjcm9sbENoYW5nZWQpXG4gICAgICAgICAgICAgICAgbG9uZ2VzdExpbmUgPSB0aGlzLiRnZXRMb25nZXN0TGluZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0aGlzLmxheWVyQ29uZmlnID0ge1xuICAgICAgICAgICAgd2lkdGggOiBsb25nZXN0TGluZSxcbiAgICAgICAgICAgIHBhZGRpbmcgOiB0aGlzLiRwYWRkaW5nLFxuICAgICAgICAgICAgZmlyc3RSb3cgOiBmaXJzdFJvdyxcbiAgICAgICAgICAgIGZpcnN0Um93U2NyZWVuOiBmaXJzdFJvd1NjcmVlbixcbiAgICAgICAgICAgIGxhc3RSb3cgOiBsYXN0Um93LFxuICAgICAgICAgICAgbGluZUhlaWdodCA6IGxpbmVIZWlnaHQsXG4gICAgICAgICAgICBjaGFyYWN0ZXJXaWR0aCA6IHRoaXMuY2hhcmFjdGVyV2lkdGgsXG4gICAgICAgICAgICBtaW5IZWlnaHQgOiBtaW5IZWlnaHQsXG4gICAgICAgICAgICBtYXhIZWlnaHQgOiBtYXhIZWlnaHQsXG4gICAgICAgICAgICBvZmZzZXQgOiBvZmZzZXQsXG4gICAgICAgICAgICBndXR0ZXJPZmZzZXQgOiBsaW5lSGVpZ2h0ID8gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKChvZmZzZXQgKyBzaXplLmhlaWdodCAtIHNpemUuc2Nyb2xsZXJIZWlnaHQpIC8gbGluZUhlaWdodCkpIDogMCxcbiAgICAgICAgICAgIGhlaWdodCA6IHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHRcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gY2hhbmdlcztcbiAgICB9O1xuXG4gICAgdGhpcy4kdXBkYXRlTGluZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLiRjaGFuZ2VkTGluZXMpIHJldHVybjtcbiAgICAgICAgdmFyIGZpcnN0Um93ID0gdGhpcy4kY2hhbmdlZExpbmVzLmZpcnN0Um93O1xuICAgICAgICB2YXIgbGFzdFJvdyA9IHRoaXMuJGNoYW5nZWRMaW5lcy5sYXN0Um93O1xuICAgICAgICB0aGlzLiRjaGFuZ2VkTGluZXMgPSBudWxsO1xuXG4gICAgICAgIHZhciBsYXllckNvbmZpZyA9IHRoaXMubGF5ZXJDb25maWc7XG5cbiAgICAgICAgaWYgKGZpcnN0Um93ID4gbGF5ZXJDb25maWcubGFzdFJvdyArIDEpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmIChsYXN0Um93IDwgbGF5ZXJDb25maWcuZmlyc3RSb3cpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmIChsYXN0Um93ID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuJHNob3dHdXR0ZXIpXG4gICAgICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKGxheWVyQ29uZmlnKTtcbiAgICAgICAgICAgIHRoaXMuJHRleHRMYXllci51cGRhdGUobGF5ZXJDb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuJHRleHRMYXllci51cGRhdGVMaW5lcyhsYXllckNvbmZpZywgZmlyc3RSb3csIGxhc3RSb3cpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdGhpcy4kZ2V0TG9uZ2VzdExpbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoYXJDb3VudCA9IHRoaXMuc2Vzc2lvbi5nZXRTY3JlZW5XaWR0aCgpO1xuICAgICAgICBpZiAodGhpcy5zaG93SW52aXNpYmxlcyAmJiAhdGhpcy5zZXNzaW9uLiR1c2VXcmFwTW9kZSlcbiAgICAgICAgICAgIGNoYXJDb3VudCArPSAxO1xuXG4gICAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGggLSAyICogdGhpcy4kcGFkZGluZywgTWF0aC5yb3VuZChjaGFyQ291bnQgKiB0aGlzLmNoYXJhY3RlcldpZHRoKSk7XG4gICAgfTtcbiAgICB0aGlzLnVwZGF0ZUZyb250TWFya2VycyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRtYXJrZXJGcm9udC5zZXRNYXJrZXJzKHRoaXMuc2Vzc2lvbi5nZXRNYXJrZXJzKHRydWUpKTtcbiAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9NQVJLRVJfRlJPTlQpO1xuICAgIH07XG4gICAgdGhpcy51cGRhdGVCYWNrTWFya2VycyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRtYXJrZXJCYWNrLnNldE1hcmtlcnModGhpcy5zZXNzaW9uLmdldE1hcmtlcnMoKSk7XG4gICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfTUFSS0VSX0JBQ0spO1xuICAgIH07XG4gICAgdGhpcy5hZGRHdXR0ZXJEZWNvcmF0aW9uID0gZnVuY3Rpb24ocm93LCBjbGFzc05hbWUpe1xuICAgICAgICB0aGlzLiRndXR0ZXJMYXllci5hZGRHdXR0ZXJEZWNvcmF0aW9uKHJvdywgY2xhc3NOYW1lKTtcbiAgICB9O1xuICAgIHRoaXMucmVtb3ZlR3V0dGVyRGVjb3JhdGlvbiA9IGZ1bmN0aW9uKHJvdywgY2xhc3NOYW1lKXtcbiAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIucmVtb3ZlR3V0dGVyRGVjb3JhdGlvbihyb3csIGNsYXNzTmFtZSk7XG4gICAgfTtcbiAgICB0aGlzLnVwZGF0ZUJyZWFrcG9pbnRzID0gZnVuY3Rpb24ocm93cykge1xuICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0dVVFRFUik7XG4gICAgfTtcbiAgICB0aGlzLnNldEFubm90YXRpb25zID0gZnVuY3Rpb24oYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIuc2V0QW5ub3RhdGlvbnMoYW5ub3RhdGlvbnMpO1xuICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0dVVFRFUik7XG4gICAgfTtcbiAgICB0aGlzLnVwZGF0ZUN1cnNvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0NVUlNPUik7XG4gICAgfTtcbiAgICB0aGlzLmhpZGVDdXJzb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy4kY3Vyc29yTGF5ZXIuaGlkZUN1cnNvcigpO1xuICAgIH07XG4gICAgdGhpcy5zaG93Q3Vyc29yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuJGN1cnNvckxheWVyLnNob3dDdXJzb3IoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zY3JvbGxTZWxlY3Rpb25JbnRvVmlldyA9IGZ1bmN0aW9uKGFuY2hvciwgbGVhZCwgb2Zmc2V0KSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoYW5jaG9yLCBvZmZzZXQpO1xuICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9WaWV3KGxlYWQsIG9mZnNldCk7XG4gICAgfTtcbiAgICB0aGlzLnNjcm9sbEN1cnNvckludG9WaWV3ID0gZnVuY3Rpb24oY3Vyc29yLCBvZmZzZXQsICR2aWV3TWFyZ2luKSB7XG4gICAgICAgIGlmICh0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0ID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHZhciBwb3MgPSB0aGlzLiRjdXJzb3JMYXllci5nZXRQaXhlbFBvc2l0aW9uKGN1cnNvcik7XG5cbiAgICAgICAgdmFyIGxlZnQgPSBwb3MubGVmdDtcbiAgICAgICAgdmFyIHRvcCA9IHBvcy50b3A7XG4gICAgICAgIFxuICAgICAgICB2YXIgdG9wTWFyZ2luID0gJHZpZXdNYXJnaW4gJiYgJHZpZXdNYXJnaW4udG9wIHx8IDA7XG4gICAgICAgIHZhciBib3R0b21NYXJnaW4gPSAkdmlld01hcmdpbiAmJiAkdmlld01hcmdpbi5ib3R0b20gfHwgMDtcbiAgICAgICAgXG4gICAgICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLiRzY3JvbGxBbmltYXRpb24gPyB0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCkgOiB0aGlzLnNjcm9sbFRvcDtcbiAgICAgICAgXG4gICAgICAgIGlmIChzY3JvbGxUb3AgKyB0b3BNYXJnaW4gPiB0b3ApIHtcbiAgICAgICAgICAgIGlmIChvZmZzZXQgJiYgc2Nyb2xsVG9wICsgdG9wTWFyZ2luID4gdG9wICsgdGhpcy5saW5lSGVpZ2h0KVxuICAgICAgICAgICAgICAgIHRvcCAtPSBvZmZzZXQgKiB0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0O1xuICAgICAgICAgICAgaWYgKHRvcCA9PT0gMClcbiAgICAgICAgICAgICAgICB0b3AgPSAtdGhpcy5zY3JvbGxNYXJnaW4udG9wO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcCh0b3ApO1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFRvcCArIHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQgLSBib3R0b21NYXJnaW4gPCB0b3AgKyB0aGlzLmxpbmVIZWlnaHQpIHtcbiAgICAgICAgICAgIGlmIChvZmZzZXQgJiYgc2Nyb2xsVG9wICsgdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCAtIGJvdHRvbU1hcmdpbiA8IHRvcCAtICB0aGlzLmxpbmVIZWlnaHQpXG4gICAgICAgICAgICAgICAgdG9wICs9IG9mZnNldCAqIHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKHRvcCArIHRoaXMubGluZUhlaWdodCAtIHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNjcm9sbExlZnQgPSB0aGlzLnNjcm9sbExlZnQ7XG5cbiAgICAgICAgaWYgKHNjcm9sbExlZnQgPiBsZWZ0KSB7XG4gICAgICAgICAgICBpZiAobGVmdCA8IHRoaXMuJHBhZGRpbmcgKyAyICogdGhpcy5sYXllckNvbmZpZy5jaGFyYWN0ZXJXaWR0aClcbiAgICAgICAgICAgICAgICBsZWZ0ID0gLXRoaXMuc2Nyb2xsTWFyZ2luLmxlZnQ7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsTGVmdChsZWZ0KTtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxMZWZ0ICsgdGhpcy4kc2l6ZS5zY3JvbGxlcldpZHRoIDwgbGVmdCArIHRoaXMuY2hhcmFjdGVyV2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KE1hdGgucm91bmQobGVmdCArIHRoaXMuY2hhcmFjdGVyV2lkdGggLSB0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxMZWZ0IDw9IHRoaXMuJHBhZGRpbmcgJiYgbGVmdCAtIHNjcm9sbExlZnQgPCB0aGlzLmNoYXJhY3RlcldpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsTGVmdCgwKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5nZXRTY3JvbGxUb3AgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0U2Nyb2xsTGVmdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldFNjcm9sbExlZnQoKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0U2Nyb2xsVG9wUm93ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjcm9sbFRvcCAvIHRoaXMubGluZUhlaWdodDtcbiAgICB9O1xuICAgIHRoaXMuZ2V0U2Nyb2xsQm90dG9tUm93ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLmZsb29yKCh0aGlzLnNjcm9sbFRvcCArIHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQpIC8gdGhpcy5saW5lSGVpZ2h0KSAtIDEpO1xuICAgIH07XG4gICAgdGhpcy5zY3JvbGxUb1JvdyA9IGZ1bmN0aW9uKHJvdykge1xuICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKHJvdyAqIHRoaXMubGluZUhlaWdodCk7XG4gICAgfTtcblxuICAgIHRoaXMuYWxpZ25DdXJzb3IgPSBmdW5jdGlvbihjdXJzb3IsIGFsaWdubWVudCkge1xuICAgICAgICBpZiAodHlwZW9mIGN1cnNvciA9PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgY3Vyc29yID0ge3JvdzogY3Vyc29yLCBjb2x1bW46IDB9O1xuXG4gICAgICAgIHZhciBwb3MgPSB0aGlzLiRjdXJzb3JMYXllci5nZXRQaXhlbFBvc2l0aW9uKGN1cnNvcik7XG4gICAgICAgIHZhciBoID0gdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCAtIHRoaXMubGluZUhlaWdodDtcbiAgICAgICAgdmFyIG9mZnNldCA9IHBvcy50b3AgLSBoICogKGFsaWdubWVudCB8fCAwKTtcblxuICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKG9mZnNldCk7XG4gICAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgfTtcblxuICAgIHRoaXMuU1RFUFMgPSA4O1xuICAgIHRoaXMuJGNhbGNTdGVwcyA9IGZ1bmN0aW9uKGZyb21WYWx1ZSwgdG9WYWx1ZSl7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgdmFyIGwgPSB0aGlzLlNURVBTO1xuICAgICAgICB2YXIgc3RlcHMgPSBbXTtcblxuICAgICAgICB2YXIgZnVuYyAgPSBmdW5jdGlvbih0LCB4X21pbiwgZHgpIHtcbiAgICAgICAgICAgIHJldHVybiBkeCAqIChNYXRoLnBvdyh0IC0gMSwgMykgKyAxKSArIHhfbWluO1xuICAgICAgICB9O1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsOyArK2kpXG4gICAgICAgICAgICBzdGVwcy5wdXNoKGZ1bmMoaSAvIHRoaXMuU1RFUFMsIGZyb21WYWx1ZSwgdG9WYWx1ZSAtIGZyb21WYWx1ZSkpO1xuXG4gICAgICAgIHJldHVybiBzdGVwcztcbiAgICB9O1xuICAgIHRoaXMuc2Nyb2xsVG9MaW5lID0gZnVuY3Rpb24obGluZSwgY2VudGVyLCBhbmltYXRlLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcG9zID0gdGhpcy4kY3Vyc29yTGF5ZXIuZ2V0UGl4ZWxQb3NpdGlvbih7cm93OiBsaW5lLCBjb2x1bW46IDB9KTtcbiAgICAgICAgdmFyIG9mZnNldCA9IHBvcy50b3A7XG4gICAgICAgIGlmIChjZW50ZXIpXG4gICAgICAgICAgICBvZmZzZXQgLT0gdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCAvIDI7XG5cbiAgICAgICAgdmFyIGluaXRpYWxTY3JvbGwgPSB0aGlzLnNjcm9sbFRvcDtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcChvZmZzZXQpO1xuICAgICAgICBpZiAoYW5pbWF0ZSAhPT0gZmFsc2UpXG4gICAgICAgICAgICB0aGlzLmFuaW1hdGVTY3JvbGxpbmcoaW5pdGlhbFNjcm9sbCwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB0aGlzLmFuaW1hdGVTY3JvbGxpbmcgPSBmdW5jdGlvbihmcm9tVmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciB0b1ZhbHVlID0gdGhpcy5zY3JvbGxUb3A7XG4gICAgICAgIGlmICghdGhpcy4kYW5pbWF0ZWRTY3JvbGwpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBfc2VsZiA9IHRoaXM7XG4gICAgICAgIFxuICAgICAgICBpZiAoZnJvbVZhbHVlID09IHRvVmFsdWUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIFxuICAgICAgICBpZiAodGhpcy4kc2Nyb2xsQW5pbWF0aW9uKSB7XG4gICAgICAgICAgICB2YXIgb2xkU3RlcHMgPSB0aGlzLiRzY3JvbGxBbmltYXRpb24uc3RlcHM7XG4gICAgICAgICAgICBpZiAob2xkU3RlcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZnJvbVZhbHVlID0gb2xkU3RlcHNbMF07XG4gICAgICAgICAgICAgICAgaWYgKGZyb21WYWx1ZSA9PSB0b1ZhbHVlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHZhciBzdGVwcyA9IF9zZWxmLiRjYWxjU3RlcHMoZnJvbVZhbHVlLCB0b1ZhbHVlKTtcbiAgICAgICAgdGhpcy4kc2Nyb2xsQW5pbWF0aW9uID0ge2Zyb206IGZyb21WYWx1ZSwgdG86IHRvVmFsdWUsIHN0ZXBzOiBzdGVwc307XG5cbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLiR0aW1lcik7XG5cbiAgICAgICAgX3NlbGYuc2Vzc2lvbi5zZXRTY3JvbGxUb3Aoc3RlcHMuc2hpZnQoKSk7XG4gICAgICAgIF9zZWxmLnNlc3Npb24uJHNjcm9sbFRvcCA9IHRvVmFsdWU7XG4gICAgICAgIHRoaXMuJHRpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoc3RlcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgX3NlbGYuc2Vzc2lvbi5zZXRTY3JvbGxUb3Aoc3RlcHMuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgX3NlbGYuc2Vzc2lvbi4kc2Nyb2xsVG9wID0gdG9WYWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG9WYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgX3NlbGYuc2Vzc2lvbi4kc2Nyb2xsVG9wID0gLTE7XG4gICAgICAgICAgICAgICAgX3NlbGYuc2Vzc2lvbi5zZXRTY3JvbGxUb3AodG9WYWx1ZSk7XG4gICAgICAgICAgICAgICAgdG9WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF9zZWxmLiR0aW1lciA9IGNsZWFySW50ZXJ2YWwoX3NlbGYuJHRpbWVyKTtcbiAgICAgICAgICAgICAgICBfc2VsZi4kc2Nyb2xsQW5pbWF0aW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAxMCk7XG4gICAgfTtcbiAgICB0aGlzLnNjcm9sbFRvWSA9IGZ1bmN0aW9uKHNjcm9sbFRvcCkge1xuICAgICAgICBpZiAodGhpcy5zY3JvbGxUb3AgIT09IHNjcm9sbFRvcCkge1xuICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9TQ1JPTEwpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc2Nyb2xsVG9YID0gZnVuY3Rpb24oc2Nyb2xsTGVmdCkge1xuICAgICAgICBpZiAodGhpcy5zY3JvbGxMZWZ0ICE9PSBzY3JvbGxMZWZ0KVxuICAgICAgICAgICAgdGhpcy5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9IX1NDUk9MTCk7XG4gICAgfTtcbiAgICB0aGlzLnNjcm9sbFRvID0gZnVuY3Rpb24oeCwgeSkge1xuICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKHkpO1xuICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsTGVmdCh5KTtcbiAgICB9O1xuICAgIHRoaXMuc2Nyb2xsQnkgPSBmdW5jdGlvbihkZWx0YVgsIGRlbHRhWSkge1xuICAgICAgICBkZWx0YVkgJiYgdGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcCh0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCkgKyBkZWx0YVkpO1xuICAgICAgICBkZWx0YVggJiYgdGhpcy5zZXNzaW9uLnNldFNjcm9sbExlZnQodGhpcy5zZXNzaW9uLmdldFNjcm9sbExlZnQoKSArIGRlbHRhWCk7XG4gICAgfTtcbiAgICB0aGlzLmlzU2Nyb2xsYWJsZUJ5ID0gZnVuY3Rpb24oZGVsdGFYLCBkZWx0YVkpIHtcbiAgICAgICAgaWYgKGRlbHRhWSA8IDAgJiYgdGhpcy5zZXNzaW9uLmdldFNjcm9sbFRvcCgpID49IDEgLSB0aGlzLnNjcm9sbE1hcmdpbi50b3ApXG4gICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoZGVsdGFZID4gMCAmJiB0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCkgKyB0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0XG4gICAgICAgICAgICAtIHRoaXMubGF5ZXJDb25maWcubWF4SGVpZ2h0IDwgLTEgKyB0aGlzLnNjcm9sbE1hcmdpbi5ib3R0b20pXG4gICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoZGVsdGFYIDwgMCAmJiB0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsTGVmdCgpID49IDEgLSB0aGlzLnNjcm9sbE1hcmdpbi5sZWZ0KVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChkZWx0YVggPiAwICYmIHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxMZWZ0KCkgKyB0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGhcbiAgICAgICAgICAgIC0gdGhpcy5sYXllckNvbmZpZy53aWR0aCA8IC0xICsgdGhpcy5zY3JvbGxNYXJnaW4ucmlnaHQpXG4gICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICB0aGlzLnBpeGVsVG9TY3JlZW5Db29yZGluYXRlcyA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgICAgdmFyIGNhbnZhc1BvcyA9IHRoaXMuc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgdmFyIG9mZnNldFggPSB4ICsgdGhpcy5zY3JvbGxMZWZ0IC0gY2FudmFzUG9zLmxlZnQgLSB0aGlzLiRwYWRkaW5nO1xuICAgICAgICB2YXIgb2Zmc2V0ID0gb2Zmc2V0WCAvIHRoaXMuY2hhcmFjdGVyV2lkdGg7XG4gICAgICAgIHZhciByb3cgPSBNYXRoLmZsb29yKCh5ICsgdGhpcy5zY3JvbGxUb3AgLSBjYW52YXNQb3MudG9wKSAvIHRoaXMubGluZUhlaWdodCk7XG4gICAgICAgIHZhciBjb2wgPSBNYXRoLnJvdW5kKG9mZnNldCk7XG5cbiAgICAgICAgcmV0dXJuIHtyb3c6IHJvdywgY29sdW1uOiBjb2wsIHNpZGU6IG9mZnNldCAtIGNvbCA+IDAgPyAxIDogLTEsIG9mZnNldFg6ICBvZmZzZXRYfTtcbiAgICB9O1xuXG4gICAgdGhpcy5zY3JlZW5Ub1RleHRDb29yZGluYXRlcyA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgICAgdmFyIGNhbnZhc1BvcyA9IHRoaXMuc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHZhciBvZmZzZXRYID0geCArIHRoaXMuc2Nyb2xsTGVmdCAtIGNhbnZhc1Bvcy5sZWZ0IC0gdGhpcy4kcGFkZGluZztcblxuICAgICAgICB2YXIgY29sID0gTWF0aC5yb3VuZChvZmZzZXRYIC8gdGhpcy5jaGFyYWN0ZXJXaWR0aCk7XG5cbiAgICAgICAgdmFyIHJvdyA9ICh5ICsgdGhpcy5zY3JvbGxUb3AgLSBjYW52YXNQb3MudG9wKSAvIHRoaXMubGluZUhlaWdodDtcblxuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihyb3csIE1hdGgubWF4KGNvbCwgMCksIG9mZnNldFgpO1xuICAgIH07XG4gICAgdGhpcy50ZXh0VG9TY3JlZW5Db29yZGluYXRlcyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7XG4gICAgICAgIHZhciBjYW52YXNQb3MgPSB0aGlzLnNjcm9sbGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB2YXIgcG9zID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihyb3csIGNvbHVtbik7XG5cbiAgICAgICAgdmFyIHggPSB0aGlzLiRwYWRkaW5nICsgKHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuaXNCaWRpUm93KHBvcy5yb3csIHJvdylcbiAgICAgICAgICAgICA/IHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuZ2V0UG9zTGVmdChwb3MuY29sdW1uKVxuICAgICAgICAgICAgIDogTWF0aC5yb3VuZChwb3MuY29sdW1uICogdGhpcy5jaGFyYWN0ZXJXaWR0aCkpO1xuXG4gICAgICAgIHZhciB5ID0gcG9zLnJvdyAqIHRoaXMubGluZUhlaWdodDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGFnZVg6IGNhbnZhc1Bvcy5sZWZ0ICsgeCAtIHRoaXMuc2Nyb2xsTGVmdCxcbiAgICAgICAgICAgIHBhZ2VZOiBjYW52YXNQb3MudG9wICsgeSAtIHRoaXMuc2Nyb2xsVG9wXG4gICAgICAgIH07XG4gICAgfTtcbiAgICB0aGlzLnZpc3VhbGl6ZUZvY3VzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGRvbS5hZGRDc3NDbGFzcyh0aGlzLmNvbnRhaW5lciwgXCJhY2VfZm9jdXNcIik7XG4gICAgfTtcbiAgICB0aGlzLnZpc3VhbGl6ZUJsdXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZG9tLnJlbW92ZUNzc0NsYXNzKHRoaXMuY29udGFpbmVyLCBcImFjZV9mb2N1c1wiKTtcbiAgICB9O1xuICAgIHRoaXMuc2hvd0NvbXBvc2l0aW9uID0gZnVuY3Rpb24ocG9zaXRpb24pIHtcbiAgICAgICAgaWYgKCF0aGlzLiRjb21wb3NpdGlvbilcbiAgICAgICAgICAgIHRoaXMuJGNvbXBvc2l0aW9uID0ge1xuICAgICAgICAgICAgICAgIGtlZXBUZXh0QXJlYUF0Q3Vyc29yOiB0aGlzLiRrZWVwVGV4dEFyZWFBdEN1cnNvcixcbiAgICAgICAgICAgICAgICBjc3NUZXh0OiB0aGlzLnRleHRhcmVhLnN0eWxlLmNzc1RleHRcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgdGhpcy4ka2VlcFRleHRBcmVhQXRDdXJzb3IgPSB0cnVlO1xuICAgICAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy50ZXh0YXJlYSwgXCJhY2VfY29tcG9zaXRpb25cIik7XG4gICAgICAgIHRoaXMudGV4dGFyZWEuc3R5bGUuY3NzVGV4dCA9IFwiXCI7XG4gICAgICAgIHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7XG4gICAgfTtcbiAgICB0aGlzLnNldENvbXBvc2l0aW9uVGV4dCA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgICAgdGhpcy4kbW92ZVRleHRBcmVhVG9DdXJzb3IoKTtcbiAgICB9O1xuICAgIHRoaXMuaGlkZUNvbXBvc2l0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy4kY29tcG9zaXRpb24pXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgZG9tLnJlbW92ZUNzc0NsYXNzKHRoaXMudGV4dGFyZWEsIFwiYWNlX2NvbXBvc2l0aW9uXCIpO1xuICAgICAgICB0aGlzLiRrZWVwVGV4dEFyZWFBdEN1cnNvciA9IHRoaXMuJGNvbXBvc2l0aW9uLmtlZXBUZXh0QXJlYUF0Q3Vyc29yO1xuICAgICAgICB0aGlzLnRleHRhcmVhLnN0eWxlLmNzc1RleHQgPSB0aGlzLiRjb21wb3NpdGlvbi5jc3NUZXh0O1xuICAgICAgICB0aGlzLiRjb21wb3NpdGlvbiA9IG51bGw7XG4gICAgfTtcbiAgICB0aGlzLnNldFRoZW1lID0gZnVuY3Rpb24odGhlbWUsIGNiKSB7XG4gICAgICAgIHZhciBfc2VsZiA9IHRoaXM7XG4gICAgICAgIHRoaXMuJHRoZW1lSWQgPSB0aGVtZTtcbiAgICAgICAgX3NlbGYuX2Rpc3BhdGNoRXZlbnQoJ3RoZW1lQ2hhbmdlJyx7dGhlbWU6dGhlbWV9KTtcblxuICAgICAgICBpZiAoIXRoZW1lIHx8IHR5cGVvZiB0aGVtZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB2YXIgbW9kdWxlTmFtZSA9IHRoZW1lIHx8IHRoaXMuJG9wdGlvbnMudGhlbWUuaW5pdGlhbFZhbHVlO1xuICAgICAgICAgICAgY29uZmlnLmxvYWRNb2R1bGUoW1widGhlbWVcIiwgbW9kdWxlTmFtZV0sIGFmdGVyTG9hZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhZnRlckxvYWQodGhlbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gYWZ0ZXJMb2FkKG1vZHVsZSkge1xuICAgICAgICAgICAgaWYgKF9zZWxmLiR0aGVtZUlkICE9IHRoZW1lKVxuICAgICAgICAgICAgICAgIHJldHVybiBjYiAmJiBjYigpO1xuICAgICAgICAgICAgaWYgKCFtb2R1bGUgfHwgIW1vZHVsZS5jc3NDbGFzcylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb3VsZG4ndCBsb2FkIG1vZHVsZSBcIiArIHRoZW1lICsgXCIgb3IgaXQgZGlkbid0IGNhbGwgZGVmaW5lXCIpO1xuICAgICAgICAgICAgZG9tLmltcG9ydENzc1N0cmluZyhcbiAgICAgICAgICAgICAgICBtb2R1bGUuY3NzVGV4dCxcbiAgICAgICAgICAgICAgICBtb2R1bGUuY3NzQ2xhc3MsXG4gICAgICAgICAgICAgICAgX3NlbGYuY29udGFpbmVyLm93bmVyRG9jdW1lbnRcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChfc2VsZi50aGVtZSlcbiAgICAgICAgICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3MoX3NlbGYuY29udGFpbmVyLCBfc2VsZi50aGVtZS5jc3NDbGFzcyk7XG5cbiAgICAgICAgICAgIHZhciBwYWRkaW5nID0gXCJwYWRkaW5nXCIgaW4gbW9kdWxlID8gbW9kdWxlLnBhZGRpbmcgXG4gICAgICAgICAgICAgICAgOiBcInBhZGRpbmdcIiBpbiAoX3NlbGYudGhlbWUgfHwge30pID8gNCA6IF9zZWxmLiRwYWRkaW5nO1xuICAgICAgICAgICAgaWYgKF9zZWxmLiRwYWRkaW5nICYmIHBhZGRpbmcgIT0gX3NlbGYuJHBhZGRpbmcpXG4gICAgICAgICAgICAgICAgX3NlbGYuc2V0UGFkZGluZyhwYWRkaW5nKTtcbiAgICAgICAgICAgIF9zZWxmLiR0aGVtZSA9IG1vZHVsZS5jc3NDbGFzcztcblxuICAgICAgICAgICAgX3NlbGYudGhlbWUgPSBtb2R1bGU7XG4gICAgICAgICAgICBkb20uYWRkQ3NzQ2xhc3MoX3NlbGYuY29udGFpbmVyLCBtb2R1bGUuY3NzQ2xhc3MpO1xuICAgICAgICAgICAgZG9tLnNldENzc0NsYXNzKF9zZWxmLmNvbnRhaW5lciwgXCJhY2VfZGFya1wiLCBtb2R1bGUuaXNEYXJrKTtcbiAgICAgICAgICAgIGlmIChfc2VsZi4kc2l6ZSkge1xuICAgICAgICAgICAgICAgIF9zZWxmLiRzaXplLndpZHRoID0gMDtcbiAgICAgICAgICAgICAgICBfc2VsZi4kdXBkYXRlU2l6ZUFzeW5jKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF9zZWxmLl9kaXNwYXRjaEV2ZW50KCd0aGVtZUxvYWRlZCcsIHt0aGVtZTptb2R1bGV9KTtcbiAgICAgICAgICAgIGNiICYmIGNiKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ2V0VGhlbWUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHRoZW1lSWQ7XG4gICAgfTtcbiAgICB0aGlzLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUsIGluY2x1ZGUpIHtcbiAgICAgICAgZG9tLnNldENzc0NsYXNzKHRoaXMuY29udGFpbmVyLCBzdHlsZSwgaW5jbHVkZSAhPT0gZmFsc2UpO1xuICAgIH07XG4gICAgdGhpcy51bnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpIHtcbiAgICAgICAgZG9tLnJlbW92ZUNzc0NsYXNzKHRoaXMuY29udGFpbmVyLCBzdHlsZSk7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLnNldEN1cnNvclN0eWxlID0gZnVuY3Rpb24oc3R5bGUpIHtcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsZXIuc3R5bGUuY3Vyc29yICE9IHN0eWxlKVxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5zdHlsZS5jdXJzb3IgPSBzdHlsZTtcbiAgICB9O1xuICAgIHRoaXMuc2V0TW91c2VDdXJzb3IgPSBmdW5jdGlvbihjdXJzb3JTdHlsZSkge1xuICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmN1cnNvciA9IGN1cnNvclN0eWxlO1xuICAgIH07XG4gICAgdGhpcy5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuJHRleHRMYXllci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuJGN1cnNvckxheWVyLmRlc3Ryb3koKTtcbiAgICB9O1xuXG59KS5jYWxsKFZpcnR1YWxSZW5kZXJlci5wcm90b3R5cGUpO1xuXG5cbmNvbmZpZy5kZWZpbmVPcHRpb25zKFZpcnR1YWxSZW5kZXJlci5wcm90b3R5cGUsIFwicmVuZGVyZXJcIiwge1xuICAgIGFuaW1hdGVkU2Nyb2xsOiB7aW5pdGlhbFZhbHVlOiBmYWxzZX0sXG4gICAgc2hvd0ludmlzaWJsZXM6IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuJHRleHRMYXllci5zZXRTaG93SW52aXNpYmxlcyh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9URVhUKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiBmYWxzZVxuICAgIH0sXG4gICAgc2hvd1ByaW50TWFyZ2luOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24oKSB7IHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCk7IH0sXG4gICAgICAgIGluaXRpYWxWYWx1ZTogdHJ1ZVxuICAgIH0sXG4gICAgcHJpbnRNYXJnaW5Db2x1bW46IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbigpIHsgdGhpcy4kdXBkYXRlUHJpbnRNYXJnaW4oKTsgfSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiA4MFxuICAgIH0sXG4gICAgcHJpbnRNYXJnaW46IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgdGhpcy4kcHJpbnRNYXJnaW5Db2x1bW4gPSB2YWw7XG4gICAgICAgICAgICB0aGlzLiRzaG93UHJpbnRNYXJnaW4gPSAhIXZhbDtcbiAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kc2hvd1ByaW50TWFyZ2luICYmIHRoaXMuJHByaW50TWFyZ2luQ29sdW1uOyBcbiAgICAgICAgfVxuICAgIH0sXG4gICAgc2hvd0d1dHRlcjoge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHNob3cpe1xuICAgICAgICAgICAgdGhpcy4kZ3V0dGVyLnN0eWxlLmRpc3BsYXkgPSBzaG93ID8gXCJibG9ja1wiIDogXCJub25lXCI7XG4gICAgICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0ZVTEwpO1xuICAgICAgICAgICAgdGhpcy5vbkd1dHRlclJlc2l6ZSgpO1xuICAgICAgICB9LFxuICAgICAgICBpbml0aWFsVmFsdWU6IHRydWVcbiAgICB9LFxuICAgIGZhZGVGb2xkV2lkZ2V0czoge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHNob3cpIHtcbiAgICAgICAgICAgIGRvbS5zZXRDc3NDbGFzcyh0aGlzLiRndXR0ZXIsIFwiYWNlX2ZhZGUtZm9sZC13aWRnZXRzXCIsIHNob3cpO1xuICAgICAgICB9LFxuICAgICAgICBpbml0aWFsVmFsdWU6IGZhbHNlXG4gICAgfSxcbiAgICBzaG93Rm9sZFdpZGdldHM6IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbihzaG93KSB7dGhpcy4kZ3V0dGVyTGF5ZXIuc2V0U2hvd0ZvbGRXaWRnZXRzKHNob3cpO30sXG4gICAgICAgIGluaXRpYWxWYWx1ZTogdHJ1ZVxuICAgIH0sXG4gICAgc2hvd0xpbmVOdW1iZXJzOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24oc2hvdykge1xuICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIuc2V0U2hvd0xpbmVOdW1iZXJzKHNob3cpO1xuICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9HVVRURVIpO1xuICAgICAgICB9LFxuICAgICAgICBpbml0aWFsVmFsdWU6IHRydWVcbiAgICB9LFxuICAgIGRpc3BsYXlJbmRlbnRHdWlkZXM6IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbihzaG93KSB7XG4gICAgICAgICAgICBpZiAodGhpcy4kdGV4dExheWVyLnNldERpc3BsYXlJbmRlbnRHdWlkZXMoc2hvdykpXG4gICAgICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9URVhUKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiB0cnVlXG4gICAgfSxcbiAgICBoaWdobGlnaHRHdXR0ZXJMaW5lOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24oc2hvdWxkSGlnaGxpZ2h0KSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuJGd1dHRlckxpbmVIaWdobGlnaHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0ID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGluZUhpZ2hsaWdodC5jbGFzc05hbWUgPSBcImFjZV9ndXR0ZXItYWN0aXZlLWxpbmVcIjtcbiAgICAgICAgICAgICAgICB0aGlzLiRndXR0ZXIuYXBwZW5kQ2hpbGQodGhpcy4kZ3V0dGVyTGluZUhpZ2hsaWdodCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0LnN0eWxlLmRpc3BsYXkgPSBzaG91bGRIaWdobGlnaHQgPyBcIlwiIDogXCJub25lXCI7XG4gICAgICAgICAgICBpZiAodGhpcy4kY3Vyc29yTGF5ZXIuJHBpeGVsUG9zKVxuICAgICAgICAgICAgICAgIHRoaXMuJHVwZGF0ZUd1dHRlckxpbmVIaWdobGlnaHQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IHRydWVcbiAgICB9LFxuICAgIGhTY3JvbGxCYXJBbHdheXNWaXNpYmxlOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuJGhTY3JvbGxCYXJBbHdheXNWaXNpYmxlIHx8ICF0aGlzLiRob3JpelNjcm9sbClcbiAgICAgICAgICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1NDUk9MTCk7XG4gICAgICAgIH0sXG4gICAgICAgIGluaXRpYWxWYWx1ZTogZmFsc2VcbiAgICB9LFxuICAgIHZTY3JvbGxCYXJBbHdheXNWaXNpYmxlOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuJHZTY3JvbGxCYXJBbHdheXNWaXNpYmxlIHx8ICF0aGlzLiR2U2Nyb2xsKVxuICAgICAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfU0NST0xMKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiBmYWxzZVxuICAgIH0sXG4gICAgZm9udFNpemU6ICB7XG4gICAgICAgIHNldDogZnVuY3Rpb24oc2l6ZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzaXplID09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgc2l6ZSA9IHNpemUgKyBcInB4XCI7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5mb250U2l6ZSA9IHNpemU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZvbnRTaXplKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGluaXRpYWxWYWx1ZTogMTJcbiAgICB9LFxuICAgIGZvbnRGYW1pbHk6IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5mb250RmFtaWx5ID0gbmFtZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRm9udFNpemUoKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWF4TGluZXM6IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRnVsbCgpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtaW5MaW5lczoge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGdWxsKCk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1heFBpeGVsSGVpZ2h0OiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZ1bGwoKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiAwXG4gICAgfSxcbiAgICBzY3JvbGxQYXN0RW5kOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICB2YWwgPSArdmFsIHx8IDA7XG4gICAgICAgICAgICBpZiAodGhpcy4kc2Nyb2xsUGFzdEVuZCA9PSB2YWwpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy4kc2Nyb2xsUGFzdEVuZCA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfU0NST0xMKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiAwLFxuICAgICAgICBoYW5kbGVzU2V0OiB0cnVlXG4gICAgfSxcbiAgICBmaXhlZFdpZHRoR3V0dGVyOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci4kZml4ZWRXaWR0aCA9ICEhdmFsO1xuICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9HVVRURVIpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB0aGVtZToge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbCkgeyB0aGlzLnNldFRoZW1lKHZhbCk7IH0sXG4gICAgICAgIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLiR0aGVtZUlkIHx8IHRoaXMudGhlbWU7IH0sXG4gICAgICAgIGluaXRpYWxWYWx1ZTogXCIuL3RoZW1lL3RleHRtYXRlXCIsXG4gICAgICAgIGhhbmRsZXNTZXQ6IHRydWVcbiAgICB9XG59KTtcblxuZXhwb3J0cy5WaXJ0dWFsUmVuZGVyZXIgPSBWaXJ0dWFsUmVuZGVyZXI7XG59KTtcblxuYWNlLmRlZmluZShcImFjZS93b3JrZXIvd29ya2VyX2NsaWVudFwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpYi9vb3BcIixcImFjZS9saWIvbmV0XCIsXCJhY2UvbGliL2V2ZW50X2VtaXR0ZXJcIixcImFjZS9jb25maWdcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG52YXIgb29wID0gYWNlcXVpcmUoXCIuLi9saWIvb29wXCIpO1xudmFyIG5ldCA9IGFjZXF1aXJlKFwiLi4vbGliL25ldFwiKTtcbnZhciBFdmVudEVtaXR0ZXIgPSBhY2VxdWlyZShcIi4uL2xpYi9ldmVudF9lbWl0dGVyXCIpLkV2ZW50RW1pdHRlcjtcbnZhciBjb25maWcgPSBhY2VxdWlyZShcIi4uL2NvbmZpZ1wiKTtcblxuZnVuY3Rpb24gJHdvcmtlckJsb2Iod29ya2VyVXJsLCBtb2QpIHtcbiAgICB2YXIgc2NyaXB0ID0gbW9kLnNyYztcImltcG9ydFNjcmlwdHMoJ1wiICsgbmV0LnF1YWxpZnlVUkwod29ya2VyVXJsKSArIFwiJyk7XCI7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9iKFtzY3JpcHRdLCB7XCJ0eXBlXCI6IFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwifSk7XG4gICAgfSBjYXRjaCAoZSkgeyAvLyBCYWNrd2FyZHMtY29tcGF0aWJpbGl0eVxuICAgICAgICB2YXIgQmxvYkJ1aWxkZXIgPSB3aW5kb3cuQmxvYkJ1aWxkZXIgfHwgd2luZG93LldlYktpdEJsb2JCdWlsZGVyIHx8IHdpbmRvdy5Nb3pCbG9iQnVpbGRlcjtcbiAgICAgICAgdmFyIGJsb2JCdWlsZGVyID0gbmV3IEJsb2JCdWlsZGVyKCk7XG4gICAgICAgIGJsb2JCdWlsZGVyLmFwcGVuZChzY3JpcHQpO1xuICAgICAgICByZXR1cm4gYmxvYkJ1aWxkZXIuZ2V0QmxvYihcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVXb3JrZXIod29ya2VyVXJsLCBtb2QpIHtcbiAgICB2YXIgYmxvYiA9ICR3b3JrZXJCbG9iKHdvcmtlclVybCwgbW9kKTtcbiAgICB2YXIgVVJMID0gd2luZG93LlVSTCB8fCB3aW5kb3cud2Via2l0VVJMO1xuICAgIHZhciBibG9iVVJMID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICByZXR1cm4gbmV3IFdvcmtlcihibG9iVVJMKTtcbn1cblxudmFyIFdvcmtlckNsaWVudCA9IGZ1bmN0aW9uKHRvcExldmVsTmFtZXNwYWNlcywgbW9kLCBjbGFzc25hbWUsIHdvcmtlclVybCwgaW1wb3J0U2NyaXB0cykge1xuICAgIHRoaXMuJHNlbmREZWx0YVF1ZXVlID0gdGhpcy4kc2VuZERlbHRhUXVldWUuYmluZCh0aGlzKTtcbiAgICB0aGlzLmNoYW5nZUxpc3RlbmVyID0gdGhpcy5jaGFuZ2VMaXN0ZW5lci5iaW5kKHRoaXMpO1xuICAgIHRoaXMub25NZXNzYWdlID0gdGhpcy5vbk1lc3NhZ2UuYmluZCh0aGlzKTtcbiAgICBpZiAoYWNlcXVpcmUubmFtZVRvVXJsICYmICFhY2VxdWlyZS50b1VybClcbiAgICAgICAgYWNlcXVpcmUudG9VcmwgPSBhY2VxdWlyZS5uYW1lVG9Vcmw7XG4gICAgXG4gICAgaWYgKGNvbmZpZy5nZXQoXCJwYWNrYWdlZFwiKSB8fCAhYWNlcXVpcmUudG9VcmwpIHtcbiAgICAgICAgd29ya2VyVXJsID0gd29ya2VyVXJsIHx8IGNvbmZpZy5tb2R1bGVVcmwobW9kLmlkLCBcIndvcmtlclwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgbm9ybWFsaXplUGF0aCA9IHRoaXMuJG5vcm1hbGl6ZVBhdGg7XG4gICAgICAgIHdvcmtlclVybCA9IHdvcmtlclVybCB8fCBub3JtYWxpemVQYXRoKGFjZXF1aXJlLnRvVXJsKFwiYWNlL3dvcmtlci93b3JrZXIuanNcIiwgbnVsbCwgXCJfXCIpKTtcblxuICAgICAgICB2YXIgdGxucyA9IHt9O1xuICAgICAgICB0b3BMZXZlbE5hbWVzcGFjZXMuZm9yRWFjaChmdW5jdGlvbihucykge1xuICAgICAgICAgICAgdGxuc1tuc10gPSBub3JtYWxpemVQYXRoKGFjZXF1aXJlLnRvVXJsKG5zLCBudWxsLCBcIl9cIikucmVwbGFjZSgvKFxcLmpzKT8oXFw/LiopPyQvLCBcIlwiKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuJHdvcmtlciA9IGNyZWF0ZVdvcmtlcih3b3JrZXJVcmwsIG1vZCk7XG4gICAgaWYgKGltcG9ydFNjcmlwdHMpIHtcbiAgICAgICAgdGhpcy5zZW5kKFwiaW1wb3J0U2NyaXB0c1wiLCBpbXBvcnRTY3JpcHRzKTtcbiAgICB9XG4gICAgdGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgaW5pdCA6IHRydWUsXG4gICAgICAgIHRsbnMgOiB0bG5zLFxuICAgICAgICBtb2R1bGUgOiBtb2QuaWQsXG4gICAgICAgIGNsYXNzbmFtZSA6IGNsYXNzbmFtZVxuICAgIH0pO1xuXG4gICAgdGhpcy5jYWxsYmFja0lkID0gMTtcbiAgICB0aGlzLmNhbGxiYWNrcyA9IHt9O1xuXG4gICAgdGhpcy4kd29ya2VyLm9ubWVzc2FnZSA9IHRoaXMub25NZXNzYWdlO1xufTtcblxuKGZ1bmN0aW9uKCl7XG5cbiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7XG5cbiAgICB0aGlzLm9uTWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIG1zZyA9IGUuZGF0YTtcbiAgICAgICAgc3dpdGNoIChtc2cudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcImV2ZW50XCI6XG4gICAgICAgICAgICAgICAgdGhpcy5fc2lnbmFsKG1zZy5uYW1lLCB7ZGF0YTogbXNnLmRhdGF9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJjYWxsXCI6XG4gICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gdGhpcy5jYWxsYmFja3NbbXNnLmlkXTtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobXNnLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5jYWxsYmFja3NbbXNnLmlkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiZXJyb3JcIjpcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydEVycm9yKG1zZy5kYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJsb2dcIjpcbiAgICAgICAgICAgICAgICB3aW5kb3cuY29uc29sZSAmJiBjb25zb2xlLmxvZyAmJiBjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBtc2cuZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFxuICAgIHRoaXMucmVwb3J0RXJyb3IgPSBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS5lcnJvciAmJiBjb25zb2xlLmVycm9yKGVycik7XG4gICAgfTtcblxuICAgIHRoaXMuJG5vcm1hbGl6ZVBhdGggPSBmdW5jdGlvbihwYXRoKSB7XG4gICAgICAgIHJldHVybiBuZXQucXVhbGlmeVVSTChwYXRoKTtcbiAgICB9O1xuXG4gICAgdGhpcy50ZXJtaW5hdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fc2lnbmFsKFwidGVybWluYXRlXCIsIHt9KTtcbiAgICAgICAgdGhpcy5kZWx0YVF1ZXVlID0gbnVsbDtcbiAgICAgICAgdGhpcy4kd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICB0aGlzLiR3b3JrZXIgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy4kZG9jKVxuICAgICAgICAgICAgdGhpcy4kZG9jLm9mZihcImNoYW5nZVwiLCB0aGlzLmNoYW5nZUxpc3RlbmVyKTtcbiAgICAgICAgdGhpcy4kZG9jID0gbnVsbDtcbiAgICB9O1xuXG4gICAgdGhpcy5zZW5kID0gZnVuY3Rpb24oY21kLCBhcmdzKSB7XG4gICAgICAgIHRoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7Y29tbWFuZDogY21kLCBhcmdzOiBhcmdzfSk7XG4gICAgfTtcblxuICAgIHRoaXMuY2FsbCA9IGZ1bmN0aW9uKGNtZCwgYXJncywgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgaWQgPSB0aGlzLmNhbGxiYWNrSWQrKztcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzW2lkXSA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgYXJncy5wdXNoKGlkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbmQoY21kLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgdGhpcy5lbWl0ID0gZnVuY3Rpb24oZXZlbnQsIGRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7ZXZlbnQ6IGV2ZW50LCBkYXRhOiB7ZGF0YTogZGF0YS5kYXRhfX0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoKGV4KSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGV4LnN0YWNrKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmF0dGFjaFRvRG9jdW1lbnQgPSBmdW5jdGlvbihkb2MpIHtcbiAgICAgICAgaWYgKHRoaXMuJGRvYylcbiAgICAgICAgICAgIHRoaXMudGVybWluYXRlKCk7XG5cbiAgICAgICAgdGhpcy4kZG9jID0gZG9jO1xuICAgICAgICB0aGlzLmNhbGwoXCJzZXRWYWx1ZVwiLCBbZG9jLmdldFZhbHVlKCldKTtcbiAgICAgICAgZG9jLm9uKFwiY2hhbmdlXCIsIHRoaXMuY2hhbmdlTGlzdGVuZXIpO1xuICAgIH07XG5cbiAgICB0aGlzLmNoYW5nZUxpc3RlbmVyID0gZnVuY3Rpb24oZGVsdGEpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRlbHRhUXVldWUpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsdGFRdWV1ZSA9IFtdO1xuICAgICAgICAgICAgc2V0VGltZW91dCh0aGlzLiRzZW5kRGVsdGFRdWV1ZSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlbHRhLmFjdGlvbiA9PSBcImluc2VydFwiKVxuICAgICAgICAgICAgdGhpcy5kZWx0YVF1ZXVlLnB1c2goZGVsdGEuc3RhcnQsIGRlbHRhLmxpbmVzKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5kZWx0YVF1ZXVlLnB1c2goZGVsdGEuc3RhcnQsIGRlbHRhLmVuZCk7XG4gICAgfTtcblxuICAgIHRoaXMuJHNlbmREZWx0YVF1ZXVlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBxID0gdGhpcy5kZWx0YVF1ZXVlO1xuICAgICAgICBpZiAoIXEpIHJldHVybjtcbiAgICAgICAgdGhpcy5kZWx0YVF1ZXVlID0gbnVsbDtcbiAgICAgICAgaWYgKHEubGVuZ3RoID4gNTAgJiYgcS5sZW5ndGggPiB0aGlzLiRkb2MuZ2V0TGVuZ3RoKCkgPj4gMSkge1xuICAgICAgICAgICAgdGhpcy5jYWxsKFwic2V0VmFsdWVcIiwgW3RoaXMuJGRvYy5nZXRWYWx1ZSgpXSk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHtkYXRhOiBxfSk7XG4gICAgfTtcblxufSkuY2FsbChXb3JrZXJDbGllbnQucHJvdG90eXBlKTtcblxuXG52YXIgVUlXb3JrZXJDbGllbnQgPSBmdW5jdGlvbih0b3BMZXZlbE5hbWVzcGFjZXMsIG1vZCwgY2xhc3NuYW1lKSB7XG4gICAgdGhpcy4kc2VuZERlbHRhUXVldWUgPSB0aGlzLiRzZW5kRGVsdGFRdWV1ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuY2hhbmdlTGlzdGVuZXIgPSB0aGlzLmNoYW5nZUxpc3RlbmVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jYWxsYmFja0lkID0gMTtcbiAgICB0aGlzLmNhbGxiYWNrcyA9IHt9O1xuICAgIHRoaXMubWVzc2FnZUJ1ZmZlciA9IFtdO1xuXG4gICAgdmFyIG1haW4gPSBudWxsO1xuICAgIHZhciBlbWl0U3luYyA9IGZhbHNlO1xuICAgIHZhciBzZW5kZXIgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlcik7XG4gICAgdmFyIF9zZWxmID0gdGhpcztcblxuICAgIHRoaXMuJHdvcmtlciA9IHt9O1xuICAgIHRoaXMuJHdvcmtlci50ZXJtaW5hdGUgPSBmdW5jdGlvbigpIHt9O1xuICAgIHRoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgX3NlbGYubWVzc2FnZUJ1ZmZlci5wdXNoKGUpO1xuICAgICAgICBpZiAobWFpbikge1xuICAgICAgICAgICAgaWYgKGVtaXRTeW5jKVxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQocHJvY2Vzc05leHQpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHByb2Nlc3NOZXh0KCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc2V0RW1pdFN5bmMgPSBmdW5jdGlvbih2YWwpIHsgZW1pdFN5bmMgPSB2YWw7IH07XG5cbiAgICB2YXIgcHJvY2Vzc05leHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG1zZyA9IF9zZWxmLm1lc3NhZ2VCdWZmZXIuc2hpZnQoKTtcbiAgICAgICAgaWYgKG1zZy5jb21tYW5kKVxuICAgICAgICAgICAgbWFpblttc2cuY29tbWFuZF0uYXBwbHkobWFpbiwgbXNnLmFyZ3MpO1xuICAgICAgICBlbHNlIGlmIChtc2cuZXZlbnQpXG4gICAgICAgICAgICBzZW5kZXIuX3NpZ25hbChtc2cuZXZlbnQsIG1zZy5kYXRhKTtcbiAgICB9O1xuXG4gICAgc2VuZGVyLnBvc3RNZXNzYWdlID0gZnVuY3Rpb24obXNnKSB7XG4gICAgICAgIF9zZWxmLm9uTWVzc2FnZSh7ZGF0YTogbXNnfSk7XG4gICAgfTtcbiAgICBzZW5kZXIuY2FsbGJhY2sgPSBmdW5jdGlvbihkYXRhLCBjYWxsYmFja0lkKSB7XG4gICAgICAgIHRoaXMucG9zdE1lc3NhZ2Uoe3R5cGU6IFwiY2FsbFwiLCBpZDogY2FsbGJhY2tJZCwgZGF0YTogZGF0YX0pO1xuICAgIH07XG4gICAgc2VuZGVyLmVtaXQgPSBmdW5jdGlvbihuYW1lLCBkYXRhKSB7XG4gICAgICAgIHRoaXMucG9zdE1lc3NhZ2Uoe3R5cGU6IFwiZXZlbnRcIiwgbmFtZTogbmFtZSwgZGF0YTogZGF0YX0pO1xuICAgIH07XG5cbiAgICBjb25maWcubG9hZE1vZHVsZShbXCJ3b3JrZXJcIiwgbW9kXSwgZnVuY3Rpb24oTWFpbikge1xuICAgICAgICBtYWluID0gbmV3IE1haW5bY2xhc3NuYW1lXShzZW5kZXIpO1xuICAgICAgICB3aGlsZSAoX3NlbGYubWVzc2FnZUJ1ZmZlci5sZW5ndGgpXG4gICAgICAgICAgICBwcm9jZXNzTmV4dCgpO1xuICAgIH0pO1xufTtcblxuVUlXb3JrZXJDbGllbnQucHJvdG90eXBlID0gV29ya2VyQ2xpZW50LnByb3RvdHlwZTtcblxuZXhwb3J0cy5VSVdvcmtlckNsaWVudCA9IFVJV29ya2VyQ2xpZW50O1xuZXhwb3J0cy5Xb3JrZXJDbGllbnQgPSBXb3JrZXJDbGllbnQ7XG5leHBvcnRzLmNyZWF0ZVdvcmtlciA9IGNyZWF0ZVdvcmtlcjtcblxuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9wbGFjZWhvbGRlclwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL3JhbmdlXCIsXCJhY2UvbGliL2V2ZW50X2VtaXR0ZXJcIixcImFjZS9saWIvb29wXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIFJhbmdlID0gYWNlcXVpcmUoXCIuL3JhbmdlXCIpLlJhbmdlO1xudmFyIEV2ZW50RW1pdHRlciA9IGFjZXF1aXJlKFwiLi9saWIvZXZlbnRfZW1pdHRlclwiKS5FdmVudEVtaXR0ZXI7XG52YXIgb29wID0gYWNlcXVpcmUoXCIuL2xpYi9vb3BcIik7XG5cbnZhciBQbGFjZUhvbGRlciA9IGZ1bmN0aW9uKHNlc3Npb24sIGxlbmd0aCwgcG9zLCBvdGhlcnMsIG1haW5DbGFzcywgb3RoZXJzQ2xhc3MpIHtcbiAgICB2YXIgX3NlbGYgPSB0aGlzO1xuICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoO1xuICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247XG4gICAgdGhpcy5kb2MgPSBzZXNzaW9uLmdldERvY3VtZW50KCk7XG4gICAgdGhpcy5tYWluQ2xhc3MgPSBtYWluQ2xhc3M7XG4gICAgdGhpcy5vdGhlcnNDbGFzcyA9IG90aGVyc0NsYXNzO1xuICAgIHRoaXMuJG9uVXBkYXRlID0gdGhpcy5vblVwZGF0ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZG9jLm9uKFwiY2hhbmdlXCIsIHRoaXMuJG9uVXBkYXRlKTtcbiAgICB0aGlzLiRvdGhlcnMgPSBvdGhlcnM7XG4gICAgXG4gICAgdGhpcy4kb25DdXJzb3JDaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIF9zZWxmLm9uQ3Vyc29yQ2hhbmdlKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgXG4gICAgdGhpcy4kcG9zID0gcG9zO1xuICAgIHZhciB1bmRvU3RhY2sgPSBzZXNzaW9uLmdldFVuZG9NYW5hZ2VyKCkuJHVuZG9TdGFjayB8fCBzZXNzaW9uLmdldFVuZG9NYW5hZ2VyKCkuJHVuZG9zdGFjayB8fCB7bGVuZ3RoOiAtMX07XG4gICAgdGhpcy4kdW5kb1N0YWNrRGVwdGggPSB1bmRvU3RhY2subGVuZ3RoO1xuICAgIHRoaXMuc2V0dXAoKTtcblxuICAgIHNlc3Npb24uc2VsZWN0aW9uLm9uKFwiY2hhbmdlQ3Vyc29yXCIsIHRoaXMuJG9uQ3Vyc29yQ2hhbmdlKTtcbn07XG5cbihmdW5jdGlvbigpIHtcblxuICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTtcbiAgICB0aGlzLnNldHVwID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBfc2VsZiA9IHRoaXM7XG4gICAgICAgIHZhciBkb2MgPSB0aGlzLmRvYztcbiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG4gICAgICAgIFxuICAgICAgICB0aGlzLnNlbGVjdGlvbkJlZm9yZSA9IHNlc3Npb24uc2VsZWN0aW9uLnRvSlNPTigpO1xuICAgICAgICBpZiAoc2Vzc2lvbi5zZWxlY3Rpb24uaW5NdWx0aVNlbGVjdE1vZGUpXG4gICAgICAgICAgICBzZXNzaW9uLnNlbGVjdGlvbi50b1NpbmdsZVJhbmdlKCk7XG5cbiAgICAgICAgdGhpcy5wb3MgPSBkb2MuY3JlYXRlQW5jaG9yKHRoaXMuJHBvcy5yb3csIHRoaXMuJHBvcy5jb2x1bW4pO1xuICAgICAgICB2YXIgcG9zID0gdGhpcy5wb3M7XG4gICAgICAgIHBvcy4kaW5zZXJ0UmlnaHQgPSB0cnVlO1xuICAgICAgICBwb3MuZGV0YWNoKCk7XG4gICAgICAgIHBvcy5tYXJrZXJJZCA9IHNlc3Npb24uYWRkTWFya2VyKG5ldyBSYW5nZShwb3Mucm93LCBwb3MuY29sdW1uLCBwb3Mucm93LCBwb3MuY29sdW1uICsgdGhpcy5sZW5ndGgpLCB0aGlzLm1haW5DbGFzcywgbnVsbCwgZmFsc2UpO1xuICAgICAgICB0aGlzLm90aGVycyA9IFtdO1xuICAgICAgICB0aGlzLiRvdGhlcnMuZm9yRWFjaChmdW5jdGlvbihvdGhlcikge1xuICAgICAgICAgICAgdmFyIGFuY2hvciA9IGRvYy5jcmVhdGVBbmNob3Iob3RoZXIucm93LCBvdGhlci5jb2x1bW4pO1xuICAgICAgICAgICAgYW5jaG9yLiRpbnNlcnRSaWdodCA9IHRydWU7XG4gICAgICAgICAgICBhbmNob3IuZGV0YWNoKCk7XG4gICAgICAgICAgICBfc2VsZi5vdGhlcnMucHVzaChhbmNob3IpO1xuICAgICAgICB9KTtcbiAgICAgICAgc2Vzc2lvbi5zZXRVbmRvU2VsZWN0KGZhbHNlKTtcbiAgICB9O1xuICAgIHRoaXMuc2hvd090aGVyTWFya2VycyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5vdGhlcnNBY3RpdmUpIHJldHVybjtcbiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG4gICAgICAgIHZhciBfc2VsZiA9IHRoaXM7XG4gICAgICAgIHRoaXMub3RoZXJzQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vdGhlcnMuZm9yRWFjaChmdW5jdGlvbihhbmNob3IpIHtcbiAgICAgICAgICAgIGFuY2hvci5tYXJrZXJJZCA9IHNlc3Npb24uYWRkTWFya2VyKG5ldyBSYW5nZShhbmNob3Iucm93LCBhbmNob3IuY29sdW1uLCBhbmNob3Iucm93LCBhbmNob3IuY29sdW1uK19zZWxmLmxlbmd0aCksIF9zZWxmLm90aGVyc0NsYXNzLCBudWxsLCBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5oaWRlT3RoZXJNYXJrZXJzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy5vdGhlcnNBY3RpdmUpIHJldHVybjtcbiAgICAgICAgdGhpcy5vdGhlcnNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm90aGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZU1hcmtlcih0aGlzLm90aGVyc1tpXS5tYXJrZXJJZCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMub25VcGRhdGUgPSBmdW5jdGlvbihkZWx0YSkge1xuICAgICAgICBpZiAodGhpcy4kdXBkYXRpbmcpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVBbmNob3JzKGRlbHRhKTtcbiAgICAgICAgICAgIFxuICAgICAgICB2YXIgcmFuZ2UgPSBkZWx0YTtcbiAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyAhPT0gcmFuZ2UuZW5kLnJvdykgcmV0dXJuO1xuICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ICE9PSB0aGlzLnBvcy5yb3cpIHJldHVybjtcbiAgICAgICAgdGhpcy4kdXBkYXRpbmcgPSB0cnVlO1xuICAgICAgICB2YXIgbGVuZ3RoRGlmZiA9IGRlbHRhLmFjdGlvbiA9PT0gXCJpbnNlcnRcIiA/IHJhbmdlLmVuZC5jb2x1bW4gLSByYW5nZS5zdGFydC5jb2x1bW4gOiByYW5nZS5zdGFydC5jb2x1bW4gLSByYW5nZS5lbmQuY29sdW1uO1xuICAgICAgICB2YXIgaW5NYWluUmFuZ2UgPSByYW5nZS5zdGFydC5jb2x1bW4gPj0gdGhpcy5wb3MuY29sdW1uICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA8PSB0aGlzLnBvcy5jb2x1bW4gKyB0aGlzLmxlbmd0aCArIDE7XG4gICAgICAgIHZhciBkaXN0YW5jZUZyb21TdGFydCA9IHJhbmdlLnN0YXJ0LmNvbHVtbiAtIHRoaXMucG9zLmNvbHVtbjtcbiAgICAgICAgXG4gICAgICAgIHRoaXMudXBkYXRlQW5jaG9ycyhkZWx0YSk7XG4gICAgICAgIFxuICAgICAgICBpZiAoaW5NYWluUmFuZ2UpXG4gICAgICAgICAgICB0aGlzLmxlbmd0aCArPSBsZW5ndGhEaWZmO1xuXG4gICAgICAgIGlmIChpbk1haW5SYW5nZSAmJiAhdGhpcy5zZXNzaW9uLiRmcm9tVW5kbykge1xuICAgICAgICAgICAgaWYgKGRlbHRhLmFjdGlvbiA9PT0gJ2luc2VydCcpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5vdGhlcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG90aGVyUG9zID0gdGhpcy5vdGhlcnNbaV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdQb3MgPSB7cm93OiBvdGhlclBvcy5yb3csIGNvbHVtbjogb3RoZXJQb3MuY29sdW1uICsgZGlzdGFuY2VGcm9tU3RhcnR9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvYy5pbnNlcnRNZXJnZWRMaW5lcyhuZXdQb3MsIGRlbHRhLmxpbmVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PT0gJ3JlbW92ZScpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5vdGhlcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG90aGVyUG9zID0gdGhpcy5vdGhlcnNbaV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdQb3MgPSB7cm93OiBvdGhlclBvcy5yb3csIGNvbHVtbjogb3RoZXJQb3MuY29sdW1uICsgZGlzdGFuY2VGcm9tU3RhcnR9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvYy5yZW1vdmUobmV3IFJhbmdlKG5ld1Bvcy5yb3csIG5ld1Bvcy5jb2x1bW4sIG5ld1Bvcy5yb3csIG5ld1Bvcy5jb2x1bW4gLSBsZW5ndGhEaWZmKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0aGlzLiR1cGRhdGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnVwZGF0ZU1hcmtlcnMoKTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMudXBkYXRlQW5jaG9ycyA9IGZ1bmN0aW9uKGRlbHRhKSB7XG4gICAgICAgIHRoaXMucG9zLm9uQ2hhbmdlKGRlbHRhKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMub3RoZXJzLmxlbmd0aDsgaS0tOylcbiAgICAgICAgICAgIHRoaXMub3RoZXJzW2ldLm9uQ2hhbmdlKGRlbHRhKTtcbiAgICAgICAgdGhpcy51cGRhdGVNYXJrZXJzKCk7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLnVwZGF0ZU1hcmtlcnMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuJHVwZGF0aW5nKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgX3NlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcbiAgICAgICAgdmFyIHVwZGF0ZU1hcmtlciA9IGZ1bmN0aW9uKHBvcywgY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICBzZXNzaW9uLnJlbW92ZU1hcmtlcihwb3MubWFya2VySWQpO1xuICAgICAgICAgICAgcG9zLm1hcmtlcklkID0gc2Vzc2lvbi5hZGRNYXJrZXIobmV3IFJhbmdlKHBvcy5yb3csIHBvcy5jb2x1bW4sIHBvcy5yb3csIHBvcy5jb2x1bW4rX3NlbGYubGVuZ3RoKSwgY2xhc3NOYW1lLCBudWxsLCBmYWxzZSk7XG4gICAgICAgIH07XG4gICAgICAgIHVwZGF0ZU1hcmtlcih0aGlzLnBvcywgdGhpcy5tYWluQ2xhc3MpO1xuICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5vdGhlcnMubGVuZ3RoOyBpLS07KVxuICAgICAgICAgICAgdXBkYXRlTWFya2VyKHRoaXMub3RoZXJzW2ldLCB0aGlzLm90aGVyc0NsYXNzKTtcbiAgICB9O1xuXG4gICAgdGhpcy5vbkN1cnNvckNoYW5nZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLiR1cGRhdGluZyB8fCAhdGhpcy5zZXNzaW9uKSByZXR1cm47XG4gICAgICAgIHZhciBwb3MgPSB0aGlzLnNlc3Npb24uc2VsZWN0aW9uLmdldEN1cnNvcigpO1xuICAgICAgICBpZiAocG9zLnJvdyA9PT0gdGhpcy5wb3Mucm93ICYmIHBvcy5jb2x1bW4gPj0gdGhpcy5wb3MuY29sdW1uICYmIHBvcy5jb2x1bW4gPD0gdGhpcy5wb3MuY29sdW1uICsgdGhpcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd090aGVyTWFya2VycygpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdChcImN1cnNvckVudGVyXCIsIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZU90aGVyTWFya2VycygpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdChcImN1cnNvckxlYXZlXCIsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH07ICAgIFxuICAgIHRoaXMuZGV0YWNoID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVNYXJrZXIodGhpcy5wb3MgJiYgdGhpcy5wb3MubWFya2VySWQpO1xuICAgICAgICB0aGlzLmhpZGVPdGhlck1hcmtlcnMoKTtcbiAgICAgICAgdGhpcy5kb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCB0aGlzLiRvblVwZGF0ZSk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNoYW5nZUN1cnNvclwiLCB0aGlzLiRvbkN1cnNvckNoYW5nZSk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRVbmRvU2VsZWN0KHRydWUpO1xuICAgICAgICB0aGlzLnNlc3Npb24gPSBudWxsO1xuICAgIH07XG4gICAgdGhpcy5jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuJHVuZG9TdGFja0RlcHRoID09PSAtMSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHVuZG9NYW5hZ2VyID0gdGhpcy5zZXNzaW9uLmdldFVuZG9NYW5hZ2VyKCk7XG4gICAgICAgIHZhciB1bmRvc1JlcXVpcmVkID0gKHVuZG9NYW5hZ2VyLiR1bmRvU3RhY2sgfHwgdW5kb01hbmFnZXIuJHVuZG9zdGFjaykubGVuZ3RoIC0gdGhpcy4kdW5kb1N0YWNrRGVwdGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5kb3NSZXF1aXJlZDsgaSsrKSB7XG4gICAgICAgICAgICB1bmRvTWFuYWdlci51bmRvKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkJlZm9yZSlcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb24uZnJvbUpTT04odGhpcy5zZWxlY3Rpb25CZWZvcmUpO1xuICAgIH07XG59KS5jYWxsKFBsYWNlSG9sZGVyLnByb3RvdHlwZSk7XG5cblxuZXhwb3J0cy5QbGFjZUhvbGRlciA9IFBsYWNlSG9sZGVyO1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvbW91c2UvbXVsdGlfc2VsZWN0X2hhbmRsZXJcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvZXZlbnRcIixcImFjZS9saWIvdXNlcmFnZW50XCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cbnZhciBldmVudCA9IGFjZXF1aXJlKFwiLi4vbGliL2V2ZW50XCIpO1xudmFyIHVzZXJhZ2VudCA9IGFjZXF1aXJlKFwiLi4vbGliL3VzZXJhZ2VudFwiKTtcbmZ1bmN0aW9uIGlzU2FtZVBvaW50KHAxLCBwMikge1xuICAgIHJldHVybiBwMS5yb3cgPT0gcDIucm93ICYmIHAxLmNvbHVtbiA9PSBwMi5jb2x1bW47XG59XG5cbmZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHtcbiAgICB2YXIgZXYgPSBlLmRvbUV2ZW50O1xuICAgIHZhciBhbHQgPSBldi5hbHRLZXk7XG4gICAgdmFyIHNoaWZ0ID0gZXYuc2hpZnRLZXk7XG4gICAgdmFyIGN0cmwgPSBldi5jdHJsS2V5O1xuICAgIHZhciBhY2NlbCA9IGUuZ2V0QWNjZWxLZXkoKTtcbiAgICB2YXIgYnV0dG9uID0gZS5nZXRCdXR0b24oKTtcbiAgICBcbiAgICBpZiAoY3RybCAmJiB1c2VyYWdlbnQuaXNNYWMpXG4gICAgICAgIGJ1dHRvbiA9IGV2LmJ1dHRvbjtcblxuICAgIGlmIChlLmVkaXRvci5pbk11bHRpU2VsZWN0TW9kZSAmJiBidXR0b24gPT0gMikge1xuICAgICAgICBlLmVkaXRvci50ZXh0SW5wdXQub25Db250ZXh0TWVudShlLmRvbUV2ZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBpZiAoIWN0cmwgJiYgIWFsdCAmJiAhYWNjZWwpIHtcbiAgICAgICAgaWYgKGJ1dHRvbiA9PT0gMCAmJiBlLmVkaXRvci5pbk11bHRpU2VsZWN0TW9kZSlcbiAgICAgICAgICAgIGUuZWRpdG9yLmV4aXRNdWx0aVNlbGVjdE1vZGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBpZiAoYnV0dG9uICE9PSAwKVxuICAgICAgICByZXR1cm47XG5cbiAgICB2YXIgZWRpdG9yID0gZS5lZGl0b3I7XG4gICAgdmFyIHNlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3Rpb247XG4gICAgdmFyIGlzTXVsdGlTZWxlY3QgPSBlZGl0b3IuaW5NdWx0aVNlbGVjdE1vZGU7XG4gICAgdmFyIHBvcyA9IGUuZ2V0RG9jdW1lbnRQb3NpdGlvbigpO1xuICAgIHZhciBjdXJzb3IgPSBzZWxlY3Rpb24uZ2V0Q3Vyc29yKCk7XG4gICAgdmFyIGluU2VsZWN0aW9uID0gZS5pblNlbGVjdGlvbigpIHx8IChzZWxlY3Rpb24uaXNFbXB0eSgpICYmIGlzU2FtZVBvaW50KHBvcywgY3Vyc29yKSk7XG5cbiAgICB2YXIgbW91c2VYID0gZS54LCBtb3VzZVkgPSBlLnk7XG4gICAgdmFyIG9uTW91c2VTZWxlY3Rpb24gPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIG1vdXNlWCA9IGUuY2xpZW50WDtcbiAgICAgICAgbW91c2VZID0gZS5jbGllbnRZO1xuICAgIH07XG4gICAgXG4gICAgdmFyIHNlc3Npb24gPSBlZGl0b3Iuc2Vzc2lvbjtcbiAgICB2YXIgc2NyZWVuQW5jaG9yID0gZWRpdG9yLnJlbmRlcmVyLnBpeGVsVG9TY3JlZW5Db29yZGluYXRlcyhtb3VzZVgsIG1vdXNlWSk7XG4gICAgdmFyIHNjcmVlbkN1cnNvciA9IHNjcmVlbkFuY2hvcjtcbiAgICBcbiAgICB2YXIgc2VsZWN0aW9uTW9kZTtcbiAgICBpZiAoZWRpdG9yLiRtb3VzZUhhbmRsZXIuJGVuYWJsZUp1bXBUb0RlZikge1xuICAgICAgICBpZiAoY3RybCAmJiBhbHQgfHwgYWNjZWwgJiYgYWx0KVxuICAgICAgICAgICAgc2VsZWN0aW9uTW9kZSA9IHNoaWZ0ID8gXCJibG9ja1wiIDogXCJhZGRcIjtcbiAgICAgICAgZWxzZSBpZiAoYWx0ICYmIGVkaXRvci4kYmxvY2tTZWxlY3RFbmFibGVkKVxuICAgICAgICAgICAgc2VsZWN0aW9uTW9kZSA9IFwiYmxvY2tcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYWNjZWwgJiYgIWFsdCkge1xuICAgICAgICAgICAgc2VsZWN0aW9uTW9kZSA9IFwiYWRkXCI7XG4gICAgICAgICAgICBpZiAoIWlzTXVsdGlTZWxlY3QgJiYgc2hpZnQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKGFsdCAmJiBlZGl0b3IuJGJsb2NrU2VsZWN0RW5hYmxlZCkge1xuICAgICAgICAgICAgc2VsZWN0aW9uTW9kZSA9IFwiYmxvY2tcIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBpZiAoc2VsZWN0aW9uTW9kZSAmJiB1c2VyYWdlbnQuaXNNYWMgJiYgZXYuY3RybEtleSkge1xuICAgICAgICBlZGl0b3IuJG1vdXNlSGFuZGxlci5jYW5jZWxDb250ZXh0TWVudSgpO1xuICAgIH1cblxuICAgIGlmIChzZWxlY3Rpb25Nb2RlID09IFwiYWRkXCIpIHtcbiAgICAgICAgaWYgKCFpc011bHRpU2VsZWN0ICYmIGluU2VsZWN0aW9uKVxuICAgICAgICAgICAgcmV0dXJuOyAvLyBkcmFnZ2luZ1xuXG4gICAgICAgIGlmICghaXNNdWx0aVNlbGVjdCkge1xuICAgICAgICAgICAgdmFyIHJhbmdlID0gc2VsZWN0aW9uLnRvT3JpZW50ZWRSYW5nZSgpO1xuICAgICAgICAgICAgZWRpdG9yLmFkZFNlbGVjdGlvbk1hcmtlcihyYW5nZSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb2xkUmFuZ2UgPSBzZWxlY3Rpb24ucmFuZ2VMaXN0LnJhbmdlQXRQb2ludChwb3MpO1xuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIGVkaXRvci4kYmxvY2tTY3JvbGxpbmcrKztcbiAgICAgICAgZWRpdG9yLmluVmlydHVhbFNlbGVjdGlvbk1vZGUgPSB0cnVlO1xuICAgICAgICBcbiAgICAgICAgaWYgKHNoaWZ0KSB7XG4gICAgICAgICAgICBvbGRSYW5nZSA9IG51bGw7XG4gICAgICAgICAgICByYW5nZSA9IHNlbGVjdGlvbi5yYW5nZXNbMF0gfHwgcmFuZ2U7XG4gICAgICAgICAgICBlZGl0b3IucmVtb3ZlU2VsZWN0aW9uTWFya2VyKHJhbmdlKTtcbiAgICAgICAgfVxuICAgICAgICBlZGl0b3Iub25jZShcIm1vdXNldXBcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgdG1wU2VsID0gc2VsZWN0aW9uLnRvT3JpZW50ZWRSYW5nZSgpO1xuXG4gICAgICAgICAgICBpZiAob2xkUmFuZ2UgJiYgdG1wU2VsLmlzRW1wdHkoKSAmJiBpc1NhbWVQb2ludChvbGRSYW5nZS5jdXJzb3IsIHRtcFNlbC5jdXJzb3IpKVxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5zdWJzdHJhY3RQb2ludCh0bXBTZWwuY3Vyc29yKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzaGlmdCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uc3Vic3RyYWN0UG9pbnQocmFuZ2UuY3Vyc29yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVkaXRvci5yZW1vdmVTZWxlY3Rpb25NYXJrZXIocmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UodG1wU2VsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVkaXRvci4kYmxvY2tTY3JvbGxpbmctLTtcbiAgICAgICAgICAgIGVkaXRvci5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlID0gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgfSBlbHNlIGlmIChzZWxlY3Rpb25Nb2RlID09IFwiYmxvY2tcIikge1xuICAgICAgICBlLnN0b3AoKTtcbiAgICAgICAgZWRpdG9yLmluVmlydHVhbFNlbGVjdGlvbk1vZGUgPSB0cnVlOyAgICAgICAgXG4gICAgICAgIHZhciBpbml0aWFsUmFuZ2U7XG4gICAgICAgIHZhciByZWN0U2VsID0gW107XG4gICAgICAgIHZhciBibG9ja1NlbGVjdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIG5ld0N1cnNvciA9IGVkaXRvci5yZW5kZXJlci5waXhlbFRvU2NyZWVuQ29vcmRpbmF0ZXMobW91c2VYLCBtb3VzZVkpO1xuICAgICAgICAgICAgdmFyIGN1cnNvciA9IHNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKG5ld0N1cnNvci5yb3csIG5ld0N1cnNvci5jb2x1bW4sIG5ld0N1cnNvci5vZmZzZXRYKTtcblxuICAgICAgICAgICAgaWYgKGlzU2FtZVBvaW50KHNjcmVlbkN1cnNvciwgbmV3Q3Vyc29yKSAmJiBpc1NhbWVQb2ludChjdXJzb3IsIHNlbGVjdGlvbi5sZWFkKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBzY3JlZW5DdXJzb3IgPSBuZXdDdXJzb3I7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGVkaXRvci4kYmxvY2tTY3JvbGxpbmcrKztcbiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24ubW92ZVRvUG9zaXRpb24oY3Vyc29yKTtcbiAgICAgICAgICAgIGVkaXRvci5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldygpO1xuXG4gICAgICAgICAgICBlZGl0b3IucmVtb3ZlU2VsZWN0aW9uTWFya2VycyhyZWN0U2VsKTtcbiAgICAgICAgICAgIHJlY3RTZWwgPSBzZWxlY3Rpb24ucmVjdGFuZ3VsYXJSYW5nZUJsb2NrKHNjcmVlbkN1cnNvciwgc2NyZWVuQW5jaG9yKTtcbiAgICAgICAgICAgIGlmIChlZGl0b3IuJG1vdXNlSGFuZGxlci4kY2xpY2tTZWxlY3Rpb24gJiYgcmVjdFNlbC5sZW5ndGggPT0gMSAmJiByZWN0U2VsWzBdLmlzRW1wdHkoKSlcbiAgICAgICAgICAgICAgICByZWN0U2VsWzBdID0gZWRpdG9yLiRtb3VzZUhhbmRsZXIuJGNsaWNrU2VsZWN0aW9uLmNsb25lKCk7XG4gICAgICAgICAgICByZWN0U2VsLmZvckVhY2goZWRpdG9yLmFkZFNlbGVjdGlvbk1hcmtlciwgZWRpdG9yKTtcbiAgICAgICAgICAgIGVkaXRvci51cGRhdGVTZWxlY3Rpb25NYXJrZXJzKCk7XG4gICAgICAgICAgICBlZGl0b3IuJGJsb2NrU2Nyb2xsaW5nLS07XG4gICAgICAgIH07XG4gICAgICAgIGVkaXRvci4kYmxvY2tTY3JvbGxpbmcrKztcbiAgICAgICAgaWYgKGlzTXVsdGlTZWxlY3QgJiYgIWFjY2VsKSB7XG4gICAgICAgICAgICBzZWxlY3Rpb24udG9TaW5nbGVSYW5nZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc011bHRpU2VsZWN0ICYmIGFjY2VsKSB7XG4gICAgICAgICAgICBpbml0aWFsUmFuZ2UgPSBzZWxlY3Rpb24udG9PcmllbnRlZFJhbmdlKCk7XG4gICAgICAgICAgICBlZGl0b3IuYWRkU2VsZWN0aW9uTWFya2VyKGluaXRpYWxSYW5nZSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmIChzaGlmdClcbiAgICAgICAgICAgIHNjcmVlbkFuY2hvciA9IHNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHNlbGVjdGlvbi5sZWFkKTsgICAgICAgICAgICBcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc2VsZWN0aW9uLm1vdmVUb1Bvc2l0aW9uKHBvcyk7XG4gICAgICAgIGVkaXRvci4kYmxvY2tTY3JvbGxpbmctLTtcbiAgICAgICAgXG4gICAgICAgIHNjcmVlbkN1cnNvciA9IHtyb3c6IC0xLCBjb2x1bW46IC0xfTtcblxuICAgICAgICB2YXIgb25Nb3VzZVNlbGVjdGlvbkVuZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJJZCk7XG4gICAgICAgICAgICBlZGl0b3IucmVtb3ZlU2VsZWN0aW9uTWFya2VycyhyZWN0U2VsKTtcbiAgICAgICAgICAgIGlmICghcmVjdFNlbC5sZW5ndGgpXG4gICAgICAgICAgICAgICAgcmVjdFNlbCA9IFtzZWxlY3Rpb24udG9PcmllbnRlZFJhbmdlKCldO1xuICAgICAgICAgICAgZWRpdG9yLiRibG9ja1Njcm9sbGluZysrO1xuICAgICAgICAgICAgaWYgKGluaXRpYWxSYW5nZSkge1xuICAgICAgICAgICAgICAgIGVkaXRvci5yZW1vdmVTZWxlY3Rpb25NYXJrZXIoaW5pdGlhbFJhbmdlKTtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24udG9TaW5nbGVSYW5nZShpbml0aWFsUmFuZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWN0U2VsLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyZWN0U2VsW2ldKTtcbiAgICAgICAgICAgIGVkaXRvci5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlID0gZmFsc2U7XG4gICAgICAgICAgICBlZGl0b3IuJG1vdXNlSGFuZGxlci4kY2xpY2tTZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgZWRpdG9yLiRibG9ja1Njcm9sbGluZy0tO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBvblNlbGVjdGlvbkludGVydmFsID0gYmxvY2tTZWxlY3Q7XG5cbiAgICAgICAgZXZlbnQuY2FwdHVyZShlZGl0b3IuY29udGFpbmVyLCBvbk1vdXNlU2VsZWN0aW9uLCBvbk1vdXNlU2VsZWN0aW9uRW5kKTtcbiAgICAgICAgdmFyIHRpbWVySWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHtvblNlbGVjdGlvbkludGVydmFsKCk7fSwgMjApO1xuXG4gICAgICAgIHJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxufVxuXG5cbmV4cG9ydHMub25Nb3VzZURvd24gPSBvbk1vdXNlRG93bjtcblxufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvY29tbWFuZHMvbXVsdGlfc2VsZWN0X2NvbW1hbmRzXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2Uva2V5Ym9hcmQvaGFzaF9oYW5kbGVyXCJdLCBmdW5jdGlvbihhY2VxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5leHBvcnRzLmRlZmF1bHRDb21tYW5kcyA9IFt7XG4gICAgbmFtZTogXCJhZGRDdXJzb3JBYm92ZVwiLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2VsZWN0TW9yZUxpbmVzKC0xKTsgfSxcbiAgICBiaW5kS2V5OiB7d2luOiBcIkN0cmwtQWx0LVVwXCIsIG1hYzogXCJDdHJsLUFsdC1VcFwifSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwiYWRkQ3Vyc29yQmVsb3dcIixcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdE1vcmVMaW5lcygxKTsgfSxcbiAgICBiaW5kS2V5OiB7d2luOiBcIkN0cmwtQWx0LURvd25cIiwgbWFjOiBcIkN0cmwtQWx0LURvd25cIn0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcImFkZEN1cnNvckFib3ZlU2tpcEN1cnJlbnRcIixcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdE1vcmVMaW5lcygtMSwgdHJ1ZSk7IH0sXG4gICAgYmluZEtleToge3dpbjogXCJDdHJsLUFsdC1TaGlmdC1VcFwiLCBtYWM6IFwiQ3RybC1BbHQtU2hpZnQtVXBcIn0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcImFkZEN1cnNvckJlbG93U2tpcEN1cnJlbnRcIixcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdE1vcmVMaW5lcygxLCB0cnVlKTsgfSxcbiAgICBiaW5kS2V5OiB7d2luOiBcIkN0cmwtQWx0LVNoaWZ0LURvd25cIiwgbWFjOiBcIkN0cmwtQWx0LVNoaWZ0LURvd25cIn0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInNlbGVjdE1vcmVCZWZvcmVcIixcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdE1vcmUoLTEpOyB9LFxuICAgIGJpbmRLZXk6IHt3aW46IFwiQ3RybC1BbHQtTGVmdFwiLCBtYWM6IFwiQ3RybC1BbHQtTGVmdFwifSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwic2VsZWN0TW9yZUFmdGVyXCIsXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZWxlY3RNb3JlKDEpOyB9LFxuICAgIGJpbmRLZXk6IHt3aW46IFwiQ3RybC1BbHQtUmlnaHRcIiwgbWFjOiBcIkN0cmwtQWx0LVJpZ2h0XCJ9LFxuICAgIHNjcm9sbEludG9WaWV3OiBcImN1cnNvclwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJzZWxlY3ROZXh0QmVmb3JlXCIsXG4gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZWxlY3RNb3JlKC0xLCB0cnVlKTsgfSxcbiAgICBiaW5kS2V5OiB7d2luOiBcIkN0cmwtQWx0LVNoaWZ0LUxlZnRcIiwgbWFjOiBcIkN0cmwtQWx0LVNoaWZ0LUxlZnRcIn0sXG4gICAgc2Nyb2xsSW50b1ZpZXc6IFwiY3Vyc29yXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbn0sIHtcbiAgICBuYW1lOiBcInNlbGVjdE5leHRBZnRlclwiLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2VsZWN0TW9yZSgxLCB0cnVlKTsgfSxcbiAgICBiaW5kS2V5OiB7d2luOiBcIkN0cmwtQWx0LVNoaWZ0LVJpZ2h0XCIsIG1hYzogXCJDdHJsLUFsdC1TaGlmdC1SaWdodFwifSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICByZWFkT25seTogdHJ1ZVxufSwge1xuICAgIG5hbWU6IFwic3BsaXRJbnRvTGluZXNcIixcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLm11bHRpU2VsZWN0LnNwbGl0SW50b0xpbmVzKCk7IH0sXG4gICAgYmluZEtleToge3dpbjogXCJDdHJsLUFsdC1MXCIsIG1hYzogXCJDdHJsLUFsdC1MXCJ9LFxuICAgIHJlYWRPbmx5OiB0cnVlXG59LCB7XG4gICAgbmFtZTogXCJhbGlnbkN1cnNvcnNcIixcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmFsaWduQ3Vyc29ycygpOyB9LFxuICAgIGJpbmRLZXk6IHt3aW46IFwiQ3RybC1BbHQtQVwiLCBtYWM6IFwiQ3RybC1BbHQtQVwifSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIlxufSwge1xuICAgIG5hbWU6IFwiZmluZEFsbFwiLFxuICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZmluZEFsbCgpOyB9LFxuICAgIGJpbmRLZXk6IHt3aW46IFwiQ3RybC1BbHQtS1wiLCBtYWM6IFwiQ3RybC1BbHQtR1wifSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICByZWFkT25seTogdHJ1ZVxufV07XG5leHBvcnRzLm11bHRpU2VsZWN0Q29tbWFuZHMgPSBbe1xuICAgIG5hbWU6IFwic2luZ2xlU2VsZWN0aW9uXCIsXG4gICAgYmluZEtleTogXCJlc2NcIixcbiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmV4aXRNdWx0aVNlbGVjdE1vZGUoKTsgfSxcbiAgICBzY3JvbGxJbnRvVmlldzogXCJjdXJzb3JcIixcbiAgICByZWFkT25seTogdHJ1ZSxcbiAgICBpc0F2YWlsYWJsZTogZnVuY3Rpb24oZWRpdG9yKSB7cmV0dXJuIGVkaXRvciAmJiBlZGl0b3IuaW5NdWx0aVNlbGVjdE1vZGU7fVxufV07XG5cbnZhciBIYXNoSGFuZGxlciA9IGFjZXF1aXJlKFwiLi4va2V5Ym9hcmQvaGFzaF9oYW5kbGVyXCIpLkhhc2hIYW5kbGVyO1xuZXhwb3J0cy5rZXlib2FyZEhhbmRsZXIgPSBuZXcgSGFzaEhhbmRsZXIoZXhwb3J0cy5tdWx0aVNlbGVjdENvbW1hbmRzKTtcblxufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvbXVsdGlfc2VsZWN0XCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvcmFuZ2VfbGlzdFwiLFwiYWNlL3JhbmdlXCIsXCJhY2Uvc2VsZWN0aW9uXCIsXCJhY2UvbW91c2UvbXVsdGlfc2VsZWN0X2hhbmRsZXJcIixcImFjZS9saWIvZXZlbnRcIixcImFjZS9saWIvbGFuZ1wiLFwiYWNlL2NvbW1hbmRzL211bHRpX3NlbGVjdF9jb21tYW5kc1wiLFwiYWNlL3NlYXJjaFwiLFwiYWNlL2VkaXRfc2Vzc2lvblwiLFwiYWNlL2VkaXRvclwiLFwiYWNlL2NvbmZpZ1wiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXG52YXIgUmFuZ2VMaXN0ID0gYWNlcXVpcmUoXCIuL3JhbmdlX2xpc3RcIikuUmFuZ2VMaXN0O1xudmFyIFJhbmdlID0gYWNlcXVpcmUoXCIuL3JhbmdlXCIpLlJhbmdlO1xudmFyIFNlbGVjdGlvbiA9IGFjZXF1aXJlKFwiLi9zZWxlY3Rpb25cIikuU2VsZWN0aW9uO1xudmFyIG9uTW91c2VEb3duID0gYWNlcXVpcmUoXCIuL21vdXNlL211bHRpX3NlbGVjdF9oYW5kbGVyXCIpLm9uTW91c2VEb3duO1xudmFyIGV2ZW50ID0gYWNlcXVpcmUoXCIuL2xpYi9ldmVudFwiKTtcbnZhciBsYW5nID0gYWNlcXVpcmUoXCIuL2xpYi9sYW5nXCIpO1xudmFyIGNvbW1hbmRzID0gYWNlcXVpcmUoXCIuL2NvbW1hbmRzL211bHRpX3NlbGVjdF9jb21tYW5kc1wiKTtcbmV4cG9ydHMuY29tbWFuZHMgPSBjb21tYW5kcy5kZWZhdWx0Q29tbWFuZHMuY29uY2F0KGNvbW1hbmRzLm11bHRpU2VsZWN0Q29tbWFuZHMpO1xudmFyIFNlYXJjaCA9IGFjZXF1aXJlKFwiLi9zZWFyY2hcIikuU2VhcmNoO1xudmFyIHNlYXJjaCA9IG5ldyBTZWFyY2goKTtcblxuZnVuY3Rpb24gZmluZChzZXNzaW9uLCBuZWVkbGUsIGRpcikge1xuICAgIHNlYXJjaC4kb3B0aW9ucy53cmFwID0gdHJ1ZTtcbiAgICBzZWFyY2guJG9wdGlvbnMubmVlZGxlID0gbmVlZGxlO1xuICAgIHNlYXJjaC4kb3B0aW9ucy5iYWNrd2FyZHMgPSBkaXIgPT0gLTE7XG4gICAgcmV0dXJuIHNlYXJjaC5maW5kKHNlc3Npb24pO1xufVxudmFyIEVkaXRTZXNzaW9uID0gYWNlcXVpcmUoXCIuL2VkaXRfc2Vzc2lvblwiKS5FZGl0U2Vzc2lvbjtcbihmdW5jdGlvbigpIHtcbiAgICB0aGlzLmdldFNlbGVjdGlvbk1hcmtlcnMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHNlbGVjdGlvbk1hcmtlcnM7XG4gICAgfTtcbn0pLmNhbGwoRWRpdFNlc3Npb24ucHJvdG90eXBlKTtcbihmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJhbmdlcyA9IG51bGw7XG4gICAgdGhpcy5yYW5nZUxpc3QgPSBudWxsO1xuICAgIHRoaXMuYWRkUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSwgJGJsb2NrQ2hhbmdlRXZlbnRzKSB7XG4gICAgICAgIGlmICghcmFuZ2UpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgaWYgKCF0aGlzLmluTXVsdGlTZWxlY3RNb2RlICYmIHRoaXMucmFuZ2VDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgdmFyIG9sZFJhbmdlID0gdGhpcy50b09yaWVudGVkUmFuZ2UoKTtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VMaXN0LmFkZChvbGRSYW5nZSk7XG4gICAgICAgICAgICB0aGlzLnJhbmdlTGlzdC5hZGQocmFuZ2UpO1xuICAgICAgICAgICAgaWYgKHRoaXMucmFuZ2VMaXN0LnJhbmdlcy5sZW5ndGggIT0gMikge1xuICAgICAgICAgICAgICAgIHRoaXMucmFuZ2VMaXN0LnJlbW92ZUFsbCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiAkYmxvY2tDaGFuZ2VFdmVudHMgfHwgdGhpcy5mcm9tT3JpZW50ZWRSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJhbmdlTGlzdC5yZW1vdmVBbGwoKTtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VMaXN0LmFkZChvbGRSYW5nZSk7XG4gICAgICAgICAgICB0aGlzLiRvbkFkZFJhbmdlKG9sZFJhbmdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcmFuZ2UuY3Vyc29yKVxuICAgICAgICAgICAgcmFuZ2UuY3Vyc29yID0gcmFuZ2UuZW5kO1xuXG4gICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5yYW5nZUxpc3QuYWRkKHJhbmdlKTtcblxuICAgICAgICB0aGlzLiRvbkFkZFJhbmdlKHJhbmdlKTtcblxuICAgICAgICBpZiAocmVtb3ZlZC5sZW5ndGgpXG4gICAgICAgICAgICB0aGlzLiRvblJlbW92ZVJhbmdlKHJlbW92ZWQpO1xuXG4gICAgICAgIGlmICh0aGlzLnJhbmdlQ291bnQgPiAxICYmICF0aGlzLmluTXVsdGlTZWxlY3RNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLl9zaWduYWwoXCJtdWx0aVNlbGVjdFwiKTtcbiAgICAgICAgICAgIHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLiR1bmRvU2VsZWN0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJhbmdlTGlzdC5hdHRhY2godGhpcy5zZXNzaW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAkYmxvY2tDaGFuZ2VFdmVudHMgfHwgdGhpcy5mcm9tT3JpZW50ZWRSYW5nZShyYW5nZSk7XG4gICAgfTtcblxuICAgIHRoaXMudG9TaW5nbGVSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7XG4gICAgICAgIHJhbmdlID0gcmFuZ2UgfHwgdGhpcy5yYW5nZXNbMF07XG4gICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5yYW5nZUxpc3QucmVtb3ZlQWxsKCk7XG4gICAgICAgIGlmIChyZW1vdmVkLmxlbmd0aClcbiAgICAgICAgICAgIHRoaXMuJG9uUmVtb3ZlUmFuZ2UocmVtb3ZlZCk7XG5cbiAgICAgICAgcmFuZ2UgJiYgdGhpcy5mcm9tT3JpZW50ZWRSYW5nZShyYW5nZSk7XG4gICAgfTtcbiAgICB0aGlzLnN1YnN0cmFjdFBvaW50ID0gZnVuY3Rpb24ocG9zKSB7XG4gICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5yYW5nZUxpc3Quc3Vic3RyYWN0UG9pbnQocG9zKTtcbiAgICAgICAgaWYgKHJlbW92ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuJG9uUmVtb3ZlUmFuZ2UocmVtb3ZlZCk7XG4gICAgICAgICAgICByZXR1cm4gcmVtb3ZlZFswXTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5tZXJnZU92ZXJsYXBwaW5nUmFuZ2VzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5yYW5nZUxpc3QubWVyZ2UoKTtcbiAgICAgICAgaWYgKHJlbW92ZWQubGVuZ3RoKVxuICAgICAgICAgICAgdGhpcy4kb25SZW1vdmVSYW5nZShyZW1vdmVkKTtcbiAgICAgICAgZWxzZSBpZih0aGlzLnJhbmdlc1swXSlcbiAgICAgICAgICAgIHRoaXMuZnJvbU9yaWVudGVkUmFuZ2UodGhpcy5yYW5nZXNbMF0pO1xuICAgIH07XG5cbiAgICB0aGlzLiRvbkFkZFJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHtcbiAgICAgICAgdGhpcy5yYW5nZUNvdW50ID0gdGhpcy5yYW5nZUxpc3QucmFuZ2VzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yYW5nZXMudW5zaGlmdChyYW5nZSk7XG4gICAgICAgIHRoaXMuX3NpZ25hbChcImFkZFJhbmdlXCIsIHtyYW5nZTogcmFuZ2V9KTtcbiAgICB9O1xuXG4gICAgdGhpcy4kb25SZW1vdmVSYW5nZSA9IGZ1bmN0aW9uKHJlbW92ZWQpIHtcbiAgICAgICAgdGhpcy5yYW5nZUNvdW50ID0gdGhpcy5yYW5nZUxpc3QucmFuZ2VzLmxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMucmFuZ2VDb3VudCA9PSAxICYmIHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUpIHtcbiAgICAgICAgICAgIHZhciBsYXN0UmFuZ2UgPSB0aGlzLnJhbmdlTGlzdC5yYW5nZXMucG9wKCk7XG4gICAgICAgICAgICByZW1vdmVkLnB1c2gobGFzdFJhbmdlKTtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VDb3VudCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gcmVtb3ZlZC5sZW5ndGg7IGktLTsgKSB7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnJhbmdlcy5pbmRleE9mKHJlbW92ZWRbaV0pO1xuICAgICAgICAgICAgdGhpcy5yYW5nZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NpZ25hbChcInJlbW92ZVJhbmdlXCIsIHtyYW5nZXM6IHJlbW92ZWR9KTtcblxuICAgICAgICBpZiAodGhpcy5yYW5nZUNvdW50ID09PSAwICYmIHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX3NpZ25hbChcInNpbmdsZVNlbGVjdFwiKTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi4kdW5kb1NlbGVjdCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnJhbmdlTGlzdC5kZXRhY2godGhpcy5zZXNzaW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RSYW5nZSA9IGxhc3RSYW5nZSB8fCB0aGlzLnJhbmdlc1swXTtcbiAgICAgICAgaWYgKGxhc3RSYW5nZSAmJiAhbGFzdFJhbmdlLmlzRXF1YWwodGhpcy5nZXRSYW5nZSgpKSlcbiAgICAgICAgICAgIHRoaXMuZnJvbU9yaWVudGVkUmFuZ2UobGFzdFJhbmdlKTtcbiAgICB9O1xuICAgIHRoaXMuJGluaXRSYW5nZUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMucmFuZ2VMaXN0KVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMucmFuZ2VMaXN0ID0gbmV3IFJhbmdlTGlzdCgpO1xuICAgICAgICB0aGlzLnJhbmdlcyA9IFtdO1xuICAgICAgICB0aGlzLnJhbmdlQ291bnQgPSAwO1xuICAgIH07XG4gICAgdGhpcy5nZXRBbGxSYW5nZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmFuZ2VDb3VudCA/IHRoaXMucmFuZ2VMaXN0LnJhbmdlcy5jb25jYXQoKSA6IFt0aGlzLmdldFJhbmdlKCldO1xuICAgIH07XG5cbiAgICB0aGlzLnNwbGl0SW50b0xpbmVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5yYW5nZUNvdW50ID4gMSkge1xuICAgICAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMucmFuZ2VMaXN0LnJhbmdlcztcbiAgICAgICAgICAgIHZhciBsYXN0UmFuZ2UgPSByYW5nZXNbcmFuZ2VzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgdmFyIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhyYW5nZXNbMF0uc3RhcnQsIGxhc3RSYW5nZS5lbmQpO1xuXG4gICAgICAgICAgICB0aGlzLnRvU2luZ2xlUmFuZ2UoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2UsIGxhc3RSYW5nZS5jdXJzb3IgPT0gbGFzdFJhbmdlLnN0YXJ0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0UmFuZ2UoKTtcbiAgICAgICAgICAgIHZhciBpc0JhY2t3YXJkcyA9IHRoaXMuaXNCYWNrd2FyZHMoKTtcbiAgICAgICAgICAgIHZhciBzdGFydFJvdyA9IHJhbmdlLnN0YXJ0LnJvdztcbiAgICAgICAgICAgIHZhciBlbmRSb3cgPSByYW5nZS5lbmQucm93O1xuICAgICAgICAgICAgaWYgKHN0YXJ0Um93ID09IGVuZFJvdykge1xuICAgICAgICAgICAgICAgIGlmIChpc0JhY2t3YXJkcylcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gcmFuZ2UuZW5kLCBlbmQgPSByYW5nZS5zdGFydDtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IHJhbmdlLnN0YXJ0LCBlbmQgPSByYW5nZS5lbmQ7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRSYW5nZShSYW5nZS5mcm9tUG9pbnRzKGVuZCwgZW5kKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRSYW5nZShSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCBzdGFydCkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHJlY3RTZWwgPSBbXTtcbiAgICAgICAgICAgIHZhciByID0gdGhpcy5nZXRMaW5lUmFuZ2Uoc3RhcnRSb3csIHRydWUpO1xuICAgICAgICAgICAgci5zdGFydC5jb2x1bW4gPSByYW5nZS5zdGFydC5jb2x1bW47XG4gICAgICAgICAgICByZWN0U2VsLnB1c2gocik7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydFJvdyArIDE7IGkgPCBlbmRSb3c7IGkrKylcbiAgICAgICAgICAgICAgICByZWN0U2VsLnB1c2godGhpcy5nZXRMaW5lUmFuZ2UoaSwgdHJ1ZSkpO1xuXG4gICAgICAgICAgICByID0gdGhpcy5nZXRMaW5lUmFuZ2UoZW5kUm93LCB0cnVlKTtcbiAgICAgICAgICAgIHIuZW5kLmNvbHVtbiA9IHJhbmdlLmVuZC5jb2x1bW47XG4gICAgICAgICAgICByZWN0U2VsLnB1c2gocik7XG5cbiAgICAgICAgICAgIHJlY3RTZWwuZm9yRWFjaCh0aGlzLmFkZFJhbmdlLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy50b2dnbGVCbG9ja1NlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMucmFuZ2VDb3VudCA+IDEpIHtcbiAgICAgICAgICAgIHZhciByYW5nZXMgPSB0aGlzLnJhbmdlTGlzdC5yYW5nZXM7XG4gICAgICAgICAgICB2YXIgbGFzdFJhbmdlID0gcmFuZ2VzW3Jhbmdlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIHZhciByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMocmFuZ2VzWzBdLnN0YXJ0LCBsYXN0UmFuZ2UuZW5kKTtcblxuICAgICAgICAgICAgdGhpcy50b1NpbmdsZVJhbmdlKCk7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHJhbmdlLCBsYXN0UmFuZ2UuY3Vyc29yID09IGxhc3RSYW5nZS5zdGFydCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLnNlbGVjdGlvbkxlYWQpO1xuICAgICAgICAgICAgdmFyIGFuY2hvciA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5zZWxlY3Rpb25BbmNob3IpO1xuXG4gICAgICAgICAgICB2YXIgcmVjdFNlbCA9IHRoaXMucmVjdGFuZ3VsYXJSYW5nZUJsb2NrKGN1cnNvciwgYW5jaG9yKTtcbiAgICAgICAgICAgIHJlY3RTZWwuZm9yRWFjaCh0aGlzLmFkZFJhbmdlLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5yZWN0YW5ndWxhclJhbmdlQmxvY2sgPSBmdW5jdGlvbihzY3JlZW5DdXJzb3IsIHNjcmVlbkFuY2hvciwgaW5jbHVkZUVtcHR5TGluZXMpIHtcbiAgICAgICAgdmFyIHJlY3RTZWwgPSBbXTtcblxuICAgICAgICB2YXIgeEJhY2t3YXJkcyA9IHNjcmVlbkN1cnNvci5jb2x1bW4gPCBzY3JlZW5BbmNob3IuY29sdW1uO1xuICAgICAgICBpZiAoeEJhY2t3YXJkcykge1xuICAgICAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gc2NyZWVuQ3Vyc29yLmNvbHVtbjtcbiAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSBzY3JlZW5BbmNob3IuY29sdW1uO1xuICAgICAgICAgICAgdmFyIHN0YXJ0T2Zmc2V0WCA9IHNjcmVlbkN1cnNvci5vZmZzZXRYO1xuICAgICAgICAgICAgdmFyIGVuZE9mZnNldFggPSBzY3JlZW5BbmNob3Iub2Zmc2V0WDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBzdGFydENvbHVtbiA9IHNjcmVlbkFuY2hvci5jb2x1bW47XG4gICAgICAgICAgICB2YXIgZW5kQ29sdW1uID0gc2NyZWVuQ3Vyc29yLmNvbHVtbjtcbiAgICAgICAgICAgIHZhciBzdGFydE9mZnNldFggPSBzY3JlZW5BbmNob3Iub2Zmc2V0WDtcbiAgICAgICAgICAgIHZhciBlbmRPZmZzZXRYID0gc2NyZWVuQ3Vyc29yLm9mZnNldFg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeUJhY2t3YXJkcyA9IHNjcmVlbkN1cnNvci5yb3cgPCBzY3JlZW5BbmNob3Iucm93O1xuICAgICAgICBpZiAoeUJhY2t3YXJkcykge1xuICAgICAgICAgICAgdmFyIHN0YXJ0Um93ID0gc2NyZWVuQ3Vyc29yLnJvdztcbiAgICAgICAgICAgIHZhciBlbmRSb3cgPSBzY3JlZW5BbmNob3Iucm93O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHN0YXJ0Um93ID0gc2NyZWVuQW5jaG9yLnJvdztcbiAgICAgICAgICAgIHZhciBlbmRSb3cgPSBzY3JlZW5DdXJzb3Iucm93O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXJ0Q29sdW1uIDwgMClcbiAgICAgICAgICAgIHN0YXJ0Q29sdW1uID0gMDtcbiAgICAgICAgaWYgKHN0YXJ0Um93IDwgMClcbiAgICAgICAgICAgIHN0YXJ0Um93ID0gMDtcblxuICAgICAgICBpZiAoc3RhcnRSb3cgPT0gZW5kUm93KVxuICAgICAgICAgICAgaW5jbHVkZUVtcHR5TGluZXMgPSB0cnVlO1xuXG4gICAgICAgIGZvciAodmFyIHJvdyA9IHN0YXJ0Um93OyByb3cgPD0gZW5kUm93OyByb3crKykge1xuICAgICAgICAgICAgdmFyIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHJvdywgc3RhcnRDb2x1bW4sIHN0YXJ0T2Zmc2V0WCksXG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihyb3csIGVuZENvbHVtbiwgZW5kT2Zmc2V0WClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAocmFuZ2UuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvY0VuZCAmJiBpc1NhbWVQb2ludChyYW5nZS5lbmQsIGRvY0VuZCkpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIHZhciBkb2NFbmQgPSByYW5nZS5lbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByYW5nZS5jdXJzb3IgPSB4QmFja3dhcmRzID8gcmFuZ2Uuc3RhcnQgOiByYW5nZS5lbmQ7XG4gICAgICAgICAgICByZWN0U2VsLnB1c2gocmFuZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHlCYWNrd2FyZHMpXG4gICAgICAgICAgICByZWN0U2VsLnJldmVyc2UoKTtcblxuICAgICAgICBpZiAoIWluY2x1ZGVFbXB0eUxpbmVzKSB7XG4gICAgICAgICAgICB2YXIgZW5kID0gcmVjdFNlbC5sZW5ndGggLSAxO1xuICAgICAgICAgICAgd2hpbGUgKHJlY3RTZWxbZW5kXS5pc0VtcHR5KCkgJiYgZW5kID4gMClcbiAgICAgICAgICAgICAgICBlbmQtLTtcbiAgICAgICAgICAgIGlmIChlbmQgPiAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAocmVjdFNlbFtzdGFydF0uaXNFbXB0eSgpKVxuICAgICAgICAgICAgICAgICAgICBzdGFydCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGVuZDsgaSA+PSBzdGFydDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlY3RTZWxbaV0uaXNFbXB0eSgpKVxuICAgICAgICAgICAgICAgICAgICByZWN0U2VsLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWN0U2VsO1xuICAgIH07XG59KS5jYWxsKFNlbGVjdGlvbi5wcm90b3R5cGUpO1xudmFyIEVkaXRvciA9IGFjZXF1aXJlKFwiLi9lZGl0b3JcIikuRWRpdG9yO1xuKGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uTWFya2VycyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUJhY2tNYXJrZXJzKCk7XG4gICAgfTtcbiAgICB0aGlzLmFkZFNlbGVjdGlvbk1hcmtlciA9IGZ1bmN0aW9uKG9yaWVudGVkUmFuZ2UpIHtcbiAgICAgICAgaWYgKCFvcmllbnRlZFJhbmdlLmN1cnNvcilcbiAgICAgICAgICAgIG9yaWVudGVkUmFuZ2UuY3Vyc29yID0gb3JpZW50ZWRSYW5nZS5lbmQ7XG5cbiAgICAgICAgdmFyIHN0eWxlID0gdGhpcy5nZXRTZWxlY3Rpb25TdHlsZSgpO1xuICAgICAgICBvcmllbnRlZFJhbmdlLm1hcmtlciA9IHRoaXMuc2Vzc2lvbi5hZGRNYXJrZXIob3JpZW50ZWRSYW5nZSwgXCJhY2Vfc2VsZWN0aW9uXCIsIHN0eWxlKTtcblxuICAgICAgICB0aGlzLnNlc3Npb24uJHNlbGVjdGlvbk1hcmtlcnMucHVzaChvcmllbnRlZFJhbmdlKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnNlbGVjdGlvbk1hcmtlckNvdW50ID0gdGhpcy5zZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXJzLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIG9yaWVudGVkUmFuZ2U7XG4gICAgfTtcbiAgICB0aGlzLnJlbW92ZVNlbGVjdGlvbk1hcmtlciA9IGZ1bmN0aW9uKHJhbmdlKSB7XG4gICAgICAgIGlmICghcmFuZ2UubWFya2VyKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlTWFya2VyKHJhbmdlLm1hcmtlcik7XG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vycy5pbmRleE9mKHJhbmdlKTtcbiAgICAgICAgaWYgKGluZGV4ICE9IC0xKVxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb25NYXJrZXJDb3VudCA9IHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vycy5sZW5ndGg7XG4gICAgfTtcblxuICAgIHRoaXMucmVtb3ZlU2VsZWN0aW9uTWFya2VycyA9IGZ1bmN0aW9uKHJhbmdlcykge1xuICAgICAgICB2YXIgbWFya2VyTGlzdCA9IHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2VycztcbiAgICAgICAgZm9yICh2YXIgaSA9IHJhbmdlcy5sZW5ndGg7IGktLTsgKSB7XG4gICAgICAgICAgICB2YXIgcmFuZ2UgPSByYW5nZXNbaV07XG4gICAgICAgICAgICBpZiAoIXJhbmdlLm1hcmtlcilcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVNYXJrZXIocmFuZ2UubWFya2VyKTtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IG1hcmtlckxpc3QuaW5kZXhPZihyYW5nZSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT0gLTEpXG4gICAgICAgICAgICAgICAgbWFya2VyTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb25NYXJrZXJDb3VudCA9IG1hcmtlckxpc3QubGVuZ3RoO1xuICAgIH07XG5cbiAgICB0aGlzLiRvbkFkZFJhbmdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICB0aGlzLmFkZFNlbGVjdGlvbk1hcmtlcihlLnJhbmdlKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVCYWNrTWFya2VycygpO1xuICAgIH07XG5cbiAgICB0aGlzLiRvblJlbW92ZVJhbmdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGlvbk1hcmtlcnMoZS5yYW5nZXMpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUJhY2tNYXJrZXJzKCk7XG4gICAgfTtcblxuICAgIHRoaXMuJG9uTXVsdGlTZWxlY3QgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmICh0aGlzLmluTXVsdGlTZWxlY3RNb2RlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmluTXVsdGlTZWxlY3RNb2RlID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLnNldFN0eWxlKFwiYWNlX211bHRpc2VsZWN0XCIpO1xuICAgICAgICB0aGlzLmtleUJpbmRpbmcuYWRkS2V5Ym9hcmRIYW5kbGVyKGNvbW1hbmRzLmtleWJvYXJkSGFuZGxlcik7XG4gICAgICAgIHRoaXMuY29tbWFuZHMuc2V0RGVmYXVsdEhhbmRsZXIoXCJleGVjXCIsIHRoaXMuJG9uTXVsdGlTZWxlY3RFeGVjKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUJhY2tNYXJrZXJzKCk7XG4gICAgfTtcblxuICAgIHRoaXMuJG9uU2luZ2xlU2VsZWN0ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICBpZiAodGhpcy5zZXNzaW9uLm11bHRpU2VsZWN0LmluVmlydHVhbE1vZGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnVuc2V0U3R5bGUoXCJhY2VfbXVsdGlzZWxlY3RcIik7XG4gICAgICAgIHRoaXMua2V5QmluZGluZy5yZW1vdmVLZXlib2FyZEhhbmRsZXIoY29tbWFuZHMua2V5Ym9hcmRIYW5kbGVyKTtcblxuICAgICAgICB0aGlzLmNvbW1hbmRzLnJlbW92ZURlZmF1bHRIYW5kbGVyKFwiZXhlY1wiLCB0aGlzLiRvbk11bHRpU2VsZWN0RXhlYyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQmFja01hcmtlcnMoKTtcbiAgICAgICAgdGhpcy5fZW1pdChcImNoYW5nZVNlbGVjdGlvblwiKTtcbiAgICB9O1xuXG4gICAgdGhpcy4kb25NdWx0aVNlbGVjdEV4ZWMgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciBjb21tYW5kID0gZS5jb21tYW5kO1xuICAgICAgICB2YXIgZWRpdG9yID0gZS5lZGl0b3I7XG4gICAgICAgIGlmICghZWRpdG9yLm11bHRpU2VsZWN0KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIWNvbW1hbmQubXVsdGlTZWxlY3RBY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBjb21tYW5kLmV4ZWMoZWRpdG9yLCBlLmFyZ3MgfHwge30pO1xuICAgICAgICAgICAgZWRpdG9yLm11bHRpU2VsZWN0LmFkZFJhbmdlKGVkaXRvci5tdWx0aVNlbGVjdC50b09yaWVudGVkUmFuZ2UoKSk7XG4gICAgICAgICAgICBlZGl0b3IubXVsdGlTZWxlY3QubWVyZ2VPdmVybGFwcGluZ1JhbmdlcygpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmQubXVsdGlTZWxlY3RBY3Rpb24gPT0gXCJmb3JFYWNoXCIpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGVkaXRvci5mb3JFYWNoU2VsZWN0aW9uKGNvbW1hbmQsIGUuYXJncyk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29tbWFuZC5tdWx0aVNlbGVjdEFjdGlvbiA9PSBcImZvckVhY2hMaW5lXCIpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGVkaXRvci5mb3JFYWNoU2VsZWN0aW9uKGNvbW1hbmQsIGUuYXJncywgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29tbWFuZC5tdWx0aVNlbGVjdEFjdGlvbiA9PSBcInNpbmdsZVwiKSB7XG4gICAgICAgICAgICBlZGl0b3IuZXhpdE11bHRpU2VsZWN0TW9kZSgpO1xuICAgICAgICAgICAgcmVzdWx0ID0gY29tbWFuZC5leGVjKGVkaXRvciwgZS5hcmdzIHx8IHt9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGNvbW1hbmQubXVsdGlTZWxlY3RBY3Rpb24oZWRpdG9yLCBlLmFyZ3MgfHwge30pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTsgXG4gICAgdGhpcy5mb3JFYWNoU2VsZWN0aW9uID0gZnVuY3Rpb24oY21kLCBhcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICh0aGlzLmluVmlydHVhbFNlbGVjdGlvbk1vZGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBrZWVwT3JkZXIgPSBvcHRpb25zICYmIG9wdGlvbnMua2VlcE9yZGVyO1xuICAgICAgICB2YXIgJGJ5TGluZXMgPSBvcHRpb25zID09IHRydWUgfHwgb3B0aW9ucyAmJiBvcHRpb25zLiRieUxpbmVzO1xuICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcbiAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uO1xuICAgICAgICB2YXIgcmFuZ2VMaXN0ID0gc2VsZWN0aW9uLnJhbmdlTGlzdDtcbiAgICAgICAgdmFyIHJhbmdlcyA9IChrZWVwT3JkZXIgPyBzZWxlY3Rpb24gOiByYW5nZUxpc3QpLnJhbmdlcztcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgXG4gICAgICAgIGlmICghcmFuZ2VzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBjbWQuZXhlYyA/IGNtZC5leGVjKHRoaXMsIGFyZ3MgfHwge30pIDogY21kKHRoaXMsIGFyZ3MgfHwge30pO1xuICAgICAgICBcbiAgICAgICAgdmFyIHJlZyA9IHNlbGVjdGlvbi5fZXZlbnRSZWdpc3RyeTtcbiAgICAgICAgc2VsZWN0aW9uLl9ldmVudFJlZ2lzdHJ5ID0ge307XG5cbiAgICAgICAgdmFyIHRtcFNlbCA9IG5ldyBTZWxlY3Rpb24oc2Vzc2lvbik7XG4gICAgICAgIHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSA9IHRydWU7XG4gICAgICAgIGZvciAodmFyIGkgPSByYW5nZXMubGVuZ3RoOyBpLS07KSB7XG4gICAgICAgICAgICBpZiAoJGJ5TGluZXMpIHtcbiAgICAgICAgICAgICAgICB3aGlsZSAoaSA+IDAgJiYgcmFuZ2VzW2ldLnN0YXJ0LnJvdyA9PSByYW5nZXNbaSAtIDFdLmVuZC5yb3cpXG4gICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRtcFNlbC5mcm9tT3JpZW50ZWRSYW5nZShyYW5nZXNbaV0pO1xuICAgICAgICAgICAgdG1wU2VsLmluZGV4ID0gaTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gc2Vzc2lvbi5zZWxlY3Rpb24gPSB0bXBTZWw7XG4gICAgICAgICAgICB2YXIgY21kUmVzdWx0ID0gY21kLmV4ZWMgPyBjbWQuZXhlYyh0aGlzLCBhcmdzIHx8IHt9KSA6IGNtZCh0aGlzLCBhcmdzIHx8IHt9KTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0ICYmIGNtZFJlc3VsdCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNtZFJlc3VsdDtcbiAgICAgICAgICAgIHRtcFNlbC50b09yaWVudGVkUmFuZ2UocmFuZ2VzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICB0bXBTZWwuZGV0YWNoKCk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBzZXNzaW9uLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjtcbiAgICAgICAgdGhpcy5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlID0gZmFsc2U7XG4gICAgICAgIHNlbGVjdGlvbi5fZXZlbnRSZWdpc3RyeSA9IHJlZztcbiAgICAgICAgc2VsZWN0aW9uLm1lcmdlT3ZlcmxhcHBpbmdSYW5nZXMoKTtcbiAgICAgICAgXG4gICAgICAgIHZhciBhbmltID0gdGhpcy5yZW5kZXJlci4kc2Nyb2xsQW5pbWF0aW9uO1xuICAgICAgICB0aGlzLm9uQ3Vyc29yQ2hhbmdlKCk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS5mcm9tID09IGFuaW0udG8pXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFuaW1hdGVTY3JvbGxpbmcoYW5pbS5mcm9tKTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICB0aGlzLmV4aXRNdWx0aVNlbGVjdE1vZGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmluTXVsdGlTZWxlY3RNb2RlIHx8IHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdC50b1NpbmdsZVJhbmdlKCk7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0U2VsZWN0ZWRUZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB0ZXh0ID0gXCJcIjtcbiAgICAgICAgaWYgKHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUgJiYgIXRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSkge1xuICAgICAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMubXVsdGlTZWxlY3QucmFuZ2VMaXN0LnJhbmdlcztcbiAgICAgICAgICAgIHZhciBidWYgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYnVmLnB1c2godGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZXNbaV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBubCA9IHRoaXMuc2Vzc2lvbi5nZXREb2N1bWVudCgpLmdldE5ld0xpbmVDaGFyYWN0ZXIoKTtcbiAgICAgICAgICAgIHRleHQgPSBidWYuam9pbihubCk7XG4gICAgICAgICAgICBpZiAodGV4dC5sZW5ndGggPT0gKGJ1Zi5sZW5ndGggLSAxKSAqIG5sLmxlbmd0aClcbiAgICAgICAgICAgICAgICB0ZXh0ID0gXCJcIjtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICB0ZXh0ID0gdGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZSh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH07XG4gICAgXG4gICAgdGhpcy4kY2hlY2tNdWx0aXNlbGVjdENoYW5nZSA9IGZ1bmN0aW9uKGUsIGFuY2hvcikge1xuICAgICAgICBpZiAodGhpcy5pbk11bHRpU2VsZWN0TW9kZSAmJiAhdGhpcy5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlKSB7XG4gICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLm11bHRpU2VsZWN0LnJhbmdlc1swXTtcbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpU2VsZWN0LmlzRW1wdHkoKSAmJiBhbmNob3IgPT0gdGhpcy5tdWx0aVNlbGVjdC5hbmNob3IpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIHBvcyA9IGFuY2hvciA9PSB0aGlzLm11bHRpU2VsZWN0LmFuY2hvclxuICAgICAgICAgICAgICAgID8gcmFuZ2UuY3Vyc29yID09IHJhbmdlLnN0YXJ0ID8gcmFuZ2UuZW5kIDogcmFuZ2Uuc3RhcnRcbiAgICAgICAgICAgICAgICA6IHJhbmdlLmN1cnNvcjtcbiAgICAgICAgICAgIGlmIChwb3Mucm93ICE9IGFuY2hvci5yb3cgXG4gICAgICAgICAgICAgICAgfHwgdGhpcy5zZXNzaW9uLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50KHBvcy5yb3csIHBvcy5jb2x1bW4pLmNvbHVtbiAhPSBhbmNob3IuY29sdW1uKVxuICAgICAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3QudG9TaW5nbGVSYW5nZSh0aGlzLm11bHRpU2VsZWN0LnRvT3JpZW50ZWRSYW5nZSgpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5maW5kQWxsID0gZnVuY3Rpb24obmVlZGxlLCBvcHRpb25zLCBhZGRpdGl2ZSkge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgb3B0aW9ucy5uZWVkbGUgPSBuZWVkbGUgfHwgb3B0aW9ucy5uZWVkbGU7XG4gICAgICAgIGlmIChvcHRpb25zLm5lZWRsZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHZhciByYW5nZSA9IHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKVxuICAgICAgICAgICAgICAgID8gdGhpcy5zZWxlY3Rpb24uZ2V0V29yZFJhbmdlKClcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0aW9uLmdldFJhbmdlKCk7XG4gICAgICAgICAgICBvcHRpb25zLm5lZWRsZSA9IHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UocmFuZ2UpO1xuICAgICAgICB9ICAgIFxuICAgICAgICB0aGlzLiRzZWFyY2guc2V0KG9wdGlvbnMpO1xuICAgICAgICBcbiAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuJHNlYXJjaC5maW5kQWxsKHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIGlmICghcmFuZ2VzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nICs9IDE7XG4gICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLm11bHRpU2VsZWN0O1xuXG4gICAgICAgIGlmICghYWRkaXRpdmUpXG4gICAgICAgICAgICBzZWxlY3Rpb24udG9TaW5nbGVSYW5nZShyYW5nZXNbMF0pO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSByYW5nZXMubGVuZ3RoOyBpLS07IClcbiAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZXNbaV0sIHRydWUpO1xuICAgICAgICBpZiAocmFuZ2UgJiYgc2VsZWN0aW9uLnJhbmdlTGlzdC5yYW5nZUF0UG9pbnQocmFuZ2Uuc3RhcnQpKVxuICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlLCB0cnVlKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nIC09IDE7XG5cbiAgICAgICAgcmV0dXJuIHJhbmdlcy5sZW5ndGg7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdE1vcmVMaW5lcyA9IGZ1bmN0aW9uKGRpciwgc2tpcCkge1xuICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi50b09yaWVudGVkUmFuZ2UoKTtcbiAgICAgICAgdmFyIGlzQmFja3dhcmRzID0gcmFuZ2UuY3Vyc29yID09IHJhbmdlLmVuZDtcblxuICAgICAgICB2YXIgc2NyZWVuTGVhZCA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24ocmFuZ2UuY3Vyc29yKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLiRkZXNpcmVkQ29sdW1uKVxuICAgICAgICAgICAgc2NyZWVuTGVhZC5jb2x1bW4gPSB0aGlzLnNlbGVjdGlvbi4kZGVzaXJlZENvbHVtbjtcblxuICAgICAgICB2YXIgbGVhZCA9IHRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuTGVhZC5yb3cgKyBkaXIsIHNjcmVlbkxlYWQuY29sdW1uKTtcblxuICAgICAgICBpZiAoIXJhbmdlLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgdmFyIHNjcmVlbkFuY2hvciA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24oaXNCYWNrd2FyZHMgPyByYW5nZS5lbmQgOiByYW5nZS5zdGFydCk7XG4gICAgICAgICAgICB2YXIgYW5jaG9yID0gdGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5BbmNob3Iucm93ICsgZGlyLCBzY3JlZW5BbmNob3IuY29sdW1uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBhbmNob3IgPSBsZWFkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzQmFja3dhcmRzKSB7XG4gICAgICAgICAgICB2YXIgbmV3UmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKGxlYWQsIGFuY2hvcik7XG4gICAgICAgICAgICBuZXdSYW5nZS5jdXJzb3IgPSBuZXdSYW5nZS5zdGFydDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBuZXdSYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMoYW5jaG9yLCBsZWFkKTtcbiAgICAgICAgICAgIG5ld1JhbmdlLmN1cnNvciA9IG5ld1JhbmdlLmVuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIG5ld1JhbmdlLmRlc2lyZWRDb2x1bW4gPSBzY3JlZW5MZWFkLmNvbHVtbjtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pbk11bHRpU2VsZWN0TW9kZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNraXApXG4gICAgICAgICAgICAgICAgdmFyIHRvUmVtb3ZlID0gcmFuZ2UuY3Vyc29yO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uYWRkUmFuZ2UobmV3UmFuZ2UpO1xuICAgICAgICBpZiAodG9SZW1vdmUpXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zdWJzdHJhY3RQb2ludCh0b1JlbW92ZSk7XG4gICAgfTtcbiAgICB0aGlzLnRyYW5zcG9zZVNlbGVjdGlvbnMgPSBmdW5jdGlvbihkaXIpIHtcbiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG4gICAgICAgIHZhciBzZWwgPSBzZXNzaW9uLm11bHRpU2VsZWN0O1xuICAgICAgICB2YXIgYWxsID0gc2VsLnJhbmdlcztcblxuICAgICAgICBmb3IgKHZhciBpID0gYWxsLmxlbmd0aDsgaS0tOyApIHtcbiAgICAgICAgICAgIHZhciByYW5nZSA9IGFsbFtpXTtcbiAgICAgICAgICAgIGlmIChyYW5nZS5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdG1wID0gc2Vzc2lvbi5nZXRXb3JkUmFuZ2UocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5zdGFydC5jb2x1bW4pO1xuICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LnJvdyA9IHRtcC5zdGFydC5yb3c7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uID0gdG1wLnN0YXJ0LmNvbHVtbjtcbiAgICAgICAgICAgICAgICByYW5nZS5lbmQucm93ID0gdG1wLmVuZC5yb3c7XG4gICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IHRtcC5lbmQuY29sdW1uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNlbC5tZXJnZU92ZXJsYXBwaW5nUmFuZ2VzKCk7XG5cbiAgICAgICAgdmFyIHdvcmRzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSBhbGwubGVuZ3RoOyBpLS07ICkge1xuICAgICAgICAgICAgdmFyIHJhbmdlID0gYWxsW2ldO1xuICAgICAgICAgICAgd29yZHMudW5zaGlmdChzZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpciA8IDApXG4gICAgICAgICAgICB3b3Jkcy51bnNoaWZ0KHdvcmRzLnBvcCgpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgd29yZHMucHVzaCh3b3Jkcy5zaGlmdCgpKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gYWxsLmxlbmd0aDsgaS0tOyApIHtcbiAgICAgICAgICAgIHZhciByYW5nZSA9IGFsbFtpXTtcbiAgICAgICAgICAgIHZhciB0bXAgPSByYW5nZS5jbG9uZSgpO1xuICAgICAgICAgICAgc2Vzc2lvbi5yZXBsYWNlKHJhbmdlLCB3b3Jkc1tpXSk7XG4gICAgICAgICAgICByYW5nZS5zdGFydC5yb3cgPSB0bXAuc3RhcnQucm93O1xuICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uID0gdG1wLnN0YXJ0LmNvbHVtbjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5zZWxlY3RNb3JlID0gZnVuY3Rpb24oZGlyLCBza2lwLCBzdG9wQXRGaXJzdCkge1xuICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcbiAgICAgICAgdmFyIHNlbCA9IHNlc3Npb24ubXVsdGlTZWxlY3Q7XG5cbiAgICAgICAgdmFyIHJhbmdlID0gc2VsLnRvT3JpZW50ZWRSYW5nZSgpO1xuICAgICAgICBpZiAocmFuZ2UuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICByYW5nZSA9IHNlc3Npb24uZ2V0V29yZFJhbmdlKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTtcbiAgICAgICAgICAgIHJhbmdlLmN1cnNvciA9IGRpciA9PSAtMSA/IHJhbmdlLnN0YXJ0IDogcmFuZ2UuZW5kO1xuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdC5hZGRSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICBpZiAoc3RvcEF0Rmlyc3QpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBuZWVkbGUgPSBzZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZSk7XG5cbiAgICAgICAgdmFyIG5ld1JhbmdlID0gZmluZChzZXNzaW9uLCBuZWVkbGUsIGRpcik7XG4gICAgICAgIGlmIChuZXdSYW5nZSkge1xuICAgICAgICAgICAgbmV3UmFuZ2UuY3Vyc29yID0gZGlyID09IC0xID8gbmV3UmFuZ2Uuc3RhcnQgOiBuZXdSYW5nZS5lbmQ7XG4gICAgICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZyArPSAxO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnVuZm9sZChuZXdSYW5nZSk7XG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0LmFkZFJhbmdlKG5ld1JhbmdlKTtcbiAgICAgICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nIC09IDE7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KG51bGwsIDAuNSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNraXApXG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0LnN1YnN0cmFjdFBvaW50KHJhbmdlLmN1cnNvcik7XG4gICAgfTtcbiAgICB0aGlzLmFsaWduQ3Vyc29ycyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcbiAgICAgICAgdmFyIHNlbCA9IHNlc3Npb24ubXVsdGlTZWxlY3Q7XG4gICAgICAgIHZhciByYW5nZXMgPSBzZWwucmFuZ2VzO1xuICAgICAgICB2YXIgcm93ID0gLTE7XG4gICAgICAgIHZhciBzYW1lUm93UmFuZ2VzID0gcmFuZ2VzLmZpbHRlcihmdW5jdGlvbihyKSB7XG4gICAgICAgICAgICBpZiAoci5jdXJzb3Iucm93ID09IHJvdylcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHJvdyA9IHIuY3Vyc29yLnJvdztcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpZiAoIXJhbmdlcy5sZW5ndGggfHwgc2FtZVJvd1Jhbmdlcy5sZW5ndGggPT0gcmFuZ2VzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHZhciByYW5nZSA9IHRoaXMuc2VsZWN0aW9uLmdldFJhbmdlKCk7XG4gICAgICAgICAgICB2YXIgZnIgPSByYW5nZS5zdGFydC5yb3csIGxyID0gcmFuZ2UuZW5kLnJvdztcbiAgICAgICAgICAgIHZhciBndWVzc1JhbmdlID0gZnIgPT0gbHI7XG4gICAgICAgICAgICBpZiAoZ3Vlc3NSYW5nZSkge1xuICAgICAgICAgICAgICAgIHZhciBtYXggPSB0aGlzLnNlc3Npb24uZ2V0TGVuZ3RoKCk7XG4gICAgICAgICAgICAgICAgdmFyIGxpbmU7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBsaW5lID0gdGhpcy5zZXNzaW9uLmdldExpbmUobHIpO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKC9bPTpdLy50ZXN0KGxpbmUpICYmICsrbHIgPCBtYXgpO1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZSA9IHRoaXMuc2Vzc2lvbi5nZXRMaW5lKGZyKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlICgvWz06XS8udGVzdChsaW5lKSAmJiAtLWZyID4gMCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKGZyIDwgMCkgZnIgPSAwO1xuICAgICAgICAgICAgICAgIGlmIChsciA+PSBtYXgpIGxyID0gbWF4IC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBsaW5lcyA9IHRoaXMuc2Vzc2lvbi5yZW1vdmVGdWxsTGluZXMoZnIsIGxyKTtcbiAgICAgICAgICAgIGxpbmVzID0gdGhpcy4kcmVBbGlnblRleHQobGluZXMsIGd1ZXNzUmFuZ2UpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydCh7cm93OiBmciwgY29sdW1uOiAwfSwgbGluZXMuam9pbihcIlxcblwiKSArIFwiXFxuXCIpO1xuICAgICAgICAgICAgaWYgKCFndWVzc1JhbmdlKSB7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uID0gMDtcbiAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uID0gbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0UmFuZ2UocmFuZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2FtZVJvd1Jhbmdlcy5mb3JFYWNoKGZ1bmN0aW9uKHIpIHtcbiAgICAgICAgICAgICAgICBzZWwuc3Vic3RyYWN0UG9pbnQoci5jdXJzb3IpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHZhciBtYXhDb2wgPSAwO1xuICAgICAgICAgICAgdmFyIG1pblNwYWNlID0gSW5maW5pdHk7XG4gICAgICAgICAgICB2YXIgc3BhY2VPZmZzZXRzID0gcmFuZ2VzLm1hcChmdW5jdGlvbihyKSB7XG4gICAgICAgICAgICAgICAgdmFyIHAgPSByLmN1cnNvcjtcbiAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwLnJvdyk7XG4gICAgICAgICAgICAgICAgdmFyIHNwYWNlT2Zmc2V0ID0gbGluZS5zdWJzdHIocC5jb2x1bW4pLnNlYXJjaCgvXFxTL2cpO1xuICAgICAgICAgICAgICAgIGlmIChzcGFjZU9mZnNldCA9PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgc3BhY2VPZmZzZXQgPSAwO1xuXG4gICAgICAgICAgICAgICAgaWYgKHAuY29sdW1uID4gbWF4Q29sKVxuICAgICAgICAgICAgICAgICAgICBtYXhDb2wgPSBwLmNvbHVtbjtcbiAgICAgICAgICAgICAgICBpZiAoc3BhY2VPZmZzZXQgPCBtaW5TcGFjZSlcbiAgICAgICAgICAgICAgICAgICAgbWluU3BhY2UgPSBzcGFjZU9mZnNldDtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3BhY2VPZmZzZXQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJhbmdlcy5mb3JFYWNoKGZ1bmN0aW9uKHIsIGkpIHtcbiAgICAgICAgICAgICAgICB2YXIgcCA9IHIuY3Vyc29yO1xuICAgICAgICAgICAgICAgIHZhciBsID0gbWF4Q29sIC0gcC5jb2x1bW47XG4gICAgICAgICAgICAgICAgdmFyIGQgPSBzcGFjZU9mZnNldHNbaV0gLSBtaW5TcGFjZTtcbiAgICAgICAgICAgICAgICBpZiAobCA+IGQpXG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb24uaW5zZXJ0KHAsIGxhbmcuc3RyaW5nUmVwZWF0KFwiIFwiLCBsIC0gZCkpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmUobmV3IFJhbmdlKHAucm93LCBwLmNvbHVtbiwgcC5yb3csIHAuY29sdW1uIC0gbCArIGQpKTtcblxuICAgICAgICAgICAgICAgIHIuc3RhcnQuY29sdW1uID0gci5lbmQuY29sdW1uID0gbWF4Q29sO1xuICAgICAgICAgICAgICAgIHIuc3RhcnQucm93ID0gci5lbmQucm93ID0gcC5yb3c7XG4gICAgICAgICAgICAgICAgci5jdXJzb3IgPSByLmVuZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VsLmZyb21PcmllbnRlZFJhbmdlKHJhbmdlc1swXSk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVCYWNrTWFya2VycygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuJHJlQWxpZ25UZXh0ID0gZnVuY3Rpb24obGluZXMsIGZvcmNlTGVmdCkge1xuICAgICAgICB2YXIgaXNMZWZ0QWxpZ25lZCA9IHRydWUsIGlzUmlnaHRBbGlnbmVkID0gdHJ1ZTtcbiAgICAgICAgdmFyIHN0YXJ0VywgdGV4dFcsIGVuZFc7XG5cbiAgICAgICAgcmV0dXJuIGxpbmVzLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICB2YXIgbSA9IGxpbmUubWF0Y2goLyhcXHMqKSguKj8pKFxccyopKFs9Ol0uKikvKTtcbiAgICAgICAgICAgIGlmICghbSlcbiAgICAgICAgICAgICAgICByZXR1cm4gW2xpbmVdO1xuXG4gICAgICAgICAgICBpZiAoc3RhcnRXID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzdGFydFcgPSBtWzFdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB0ZXh0VyA9IG1bMl0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGVuZFcgPSBtWzNdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0YXJ0VyArIHRleHRXICsgZW5kVyAhPSBtWzFdLmxlbmd0aCArIG1bMl0ubGVuZ3RoICsgbVszXS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgaXNSaWdodEFsaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChzdGFydFcgIT0gbVsxXS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgaXNMZWZ0QWxpZ25lZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoc3RhcnRXID4gbVsxXS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgc3RhcnRXID0gbVsxXS5sZW5ndGg7XG4gICAgICAgICAgICBpZiAodGV4dFcgPCBtWzJdLmxlbmd0aClcbiAgICAgICAgICAgICAgICB0ZXh0VyA9IG1bMl0ubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGVuZFcgPiBtWzNdLmxlbmd0aClcbiAgICAgICAgICAgICAgICBlbmRXID0gbVszXS5sZW5ndGg7XG5cbiAgICAgICAgICAgIHJldHVybiBtO1xuICAgICAgICB9KS5tYXAoZm9yY2VMZWZ0ID8gYWxpZ25MZWZ0IDpcbiAgICAgICAgICAgIGlzTGVmdEFsaWduZWQgPyBpc1JpZ2h0QWxpZ25lZCA/IGFsaWduUmlnaHQgOiBhbGlnbkxlZnQgOiB1bkFsaWduKTtcblxuICAgICAgICBmdW5jdGlvbiBzcGFjZXMobikge1xuICAgICAgICAgICAgcmV0dXJuIGxhbmcuc3RyaW5nUmVwZWF0KFwiIFwiLCBuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGFsaWduTGVmdChtKSB7XG4gICAgICAgICAgICByZXR1cm4gIW1bMl0gPyBtWzBdIDogc3BhY2VzKHN0YXJ0VykgKyBtWzJdXG4gICAgICAgICAgICAgICAgKyBzcGFjZXModGV4dFcgLSBtWzJdLmxlbmd0aCArIGVuZFcpXG4gICAgICAgICAgICAgICAgKyBtWzRdLnJlcGxhY2UoL14oWz06XSlcXHMrLywgXCIkMSBcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWxpZ25SaWdodChtKSB7XG4gICAgICAgICAgICByZXR1cm4gIW1bMl0gPyBtWzBdIDogc3BhY2VzKHN0YXJ0VyArIHRleHRXIC0gbVsyXS5sZW5ndGgpICsgbVsyXVxuICAgICAgICAgICAgICAgICsgc3BhY2VzKGVuZFcsIFwiIFwiKVxuICAgICAgICAgICAgICAgICsgbVs0XS5yZXBsYWNlKC9eKFs9Ol0pXFxzKy8sIFwiJDEgXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHVuQWxpZ24obSkge1xuICAgICAgICAgICAgcmV0dXJuICFtWzJdID8gbVswXSA6IHNwYWNlcyhzdGFydFcpICsgbVsyXVxuICAgICAgICAgICAgICAgICsgc3BhY2VzKGVuZFcpXG4gICAgICAgICAgICAgICAgKyBtWzRdLnJlcGxhY2UoL14oWz06XSlcXHMrLywgXCIkMSBcIik7XG4gICAgICAgIH1cbiAgICB9O1xufSkuY2FsbChFZGl0b3IucHJvdG90eXBlKTtcblxuXG5mdW5jdGlvbiBpc1NhbWVQb2ludChwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEucm93ID09IHAyLnJvdyAmJiBwMS5jb2x1bW4gPT0gcDIuY29sdW1uO1xufVxuZXhwb3J0cy5vblNlc3Npb25DaGFuZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIHNlc3Npb24gPSBlLnNlc3Npb247XG4gICAgaWYgKHNlc3Npb24gJiYgIXNlc3Npb24ubXVsdGlTZWxlY3QpIHtcbiAgICAgICAgc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2VycyA9IFtdO1xuICAgICAgICBzZXNzaW9uLnNlbGVjdGlvbi4kaW5pdFJhbmdlTGlzdCgpO1xuICAgICAgICBzZXNzaW9uLm11bHRpU2VsZWN0ID0gc2Vzc2lvbi5zZWxlY3Rpb247XG4gICAgfVxuICAgIHRoaXMubXVsdGlTZWxlY3QgPSBzZXNzaW9uICYmIHNlc3Npb24ubXVsdGlTZWxlY3Q7XG5cbiAgICB2YXIgb2xkU2Vzc2lvbiA9IGUub2xkU2Vzc2lvbjtcbiAgICBpZiAob2xkU2Vzc2lvbikge1xuICAgICAgICBvbGRTZXNzaW9uLm11bHRpU2VsZWN0Lm9mZihcImFkZFJhbmdlXCIsIHRoaXMuJG9uQWRkUmFuZ2UpO1xuICAgICAgICBvbGRTZXNzaW9uLm11bHRpU2VsZWN0Lm9mZihcInJlbW92ZVJhbmdlXCIsIHRoaXMuJG9uUmVtb3ZlUmFuZ2UpO1xuICAgICAgICBvbGRTZXNzaW9uLm11bHRpU2VsZWN0Lm9mZihcIm11bHRpU2VsZWN0XCIsIHRoaXMuJG9uTXVsdGlTZWxlY3QpO1xuICAgICAgICBvbGRTZXNzaW9uLm11bHRpU2VsZWN0Lm9mZihcInNpbmdsZVNlbGVjdFwiLCB0aGlzLiRvblNpbmdsZVNlbGVjdCk7XG4gICAgICAgIG9sZFNlc3Npb24ubXVsdGlTZWxlY3QubGVhZC5vZmYoXCJjaGFuZ2VcIiwgdGhpcy4kY2hlY2tNdWx0aXNlbGVjdENoYW5nZSk7XG4gICAgICAgIG9sZFNlc3Npb24ubXVsdGlTZWxlY3QuYW5jaG9yLm9mZihcImNoYW5nZVwiLCB0aGlzLiRjaGVja011bHRpc2VsZWN0Q2hhbmdlKTtcbiAgICB9XG5cbiAgICBpZiAoc2Vzc2lvbikge1xuICAgICAgICBzZXNzaW9uLm11bHRpU2VsZWN0Lm9uKFwiYWRkUmFuZ2VcIiwgdGhpcy4kb25BZGRSYW5nZSk7XG4gICAgICAgIHNlc3Npb24ubXVsdGlTZWxlY3Qub24oXCJyZW1vdmVSYW5nZVwiLCB0aGlzLiRvblJlbW92ZVJhbmdlKTtcbiAgICAgICAgc2Vzc2lvbi5tdWx0aVNlbGVjdC5vbihcIm11bHRpU2VsZWN0XCIsIHRoaXMuJG9uTXVsdGlTZWxlY3QpO1xuICAgICAgICBzZXNzaW9uLm11bHRpU2VsZWN0Lm9uKFwic2luZ2xlU2VsZWN0XCIsIHRoaXMuJG9uU2luZ2xlU2VsZWN0KTtcbiAgICAgICAgc2Vzc2lvbi5tdWx0aVNlbGVjdC5sZWFkLm9uKFwiY2hhbmdlXCIsIHRoaXMuJGNoZWNrTXVsdGlzZWxlY3RDaGFuZ2UpO1xuICAgICAgICBzZXNzaW9uLm11bHRpU2VsZWN0LmFuY2hvci5vbihcImNoYW5nZVwiLCB0aGlzLiRjaGVja011bHRpc2VsZWN0Q2hhbmdlKTtcbiAgICB9XG5cbiAgICBpZiAoc2Vzc2lvbiAmJiB0aGlzLmluTXVsdGlTZWxlY3RNb2RlICE9IHNlc3Npb24uc2VsZWN0aW9uLmluTXVsdGlTZWxlY3RNb2RlKSB7XG4gICAgICAgIGlmIChzZXNzaW9uLnNlbGVjdGlvbi5pbk11bHRpU2VsZWN0TW9kZSlcbiAgICAgICAgICAgIHRoaXMuJG9uTXVsdGlTZWxlY3QoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy4kb25TaW5nbGVTZWxlY3QoKTtcbiAgICB9XG59O1xuZnVuY3Rpb24gTXVsdGlTZWxlY3QoZWRpdG9yKSB7XG4gICAgaWYgKGVkaXRvci4kbXVsdGlzZWxlY3RPblNlc3Npb25DaGFuZ2UpXG4gICAgICAgIHJldHVybjtcbiAgICBlZGl0b3IuJG9uQWRkUmFuZ2UgPSBlZGl0b3IuJG9uQWRkUmFuZ2UuYmluZChlZGl0b3IpO1xuICAgIGVkaXRvci4kb25SZW1vdmVSYW5nZSA9IGVkaXRvci4kb25SZW1vdmVSYW5nZS5iaW5kKGVkaXRvcik7XG4gICAgZWRpdG9yLiRvbk11bHRpU2VsZWN0ID0gZWRpdG9yLiRvbk11bHRpU2VsZWN0LmJpbmQoZWRpdG9yKTtcbiAgICBlZGl0b3IuJG9uU2luZ2xlU2VsZWN0ID0gZWRpdG9yLiRvblNpbmdsZVNlbGVjdC5iaW5kKGVkaXRvcik7XG4gICAgZWRpdG9yLiRtdWx0aXNlbGVjdE9uU2Vzc2lvbkNoYW5nZSA9IGV4cG9ydHMub25TZXNzaW9uQ2hhbmdlLmJpbmQoZWRpdG9yKTtcbiAgICBlZGl0b3IuJGNoZWNrTXVsdGlzZWxlY3RDaGFuZ2UgPSBlZGl0b3IuJGNoZWNrTXVsdGlzZWxlY3RDaGFuZ2UuYmluZChlZGl0b3IpO1xuXG4gICAgZWRpdG9yLiRtdWx0aXNlbGVjdE9uU2Vzc2lvbkNoYW5nZShlZGl0b3IpO1xuICAgIGVkaXRvci5vbihcImNoYW5nZVNlc3Npb25cIiwgZWRpdG9yLiRtdWx0aXNlbGVjdE9uU2Vzc2lvbkNoYW5nZSk7XG5cbiAgICBlZGl0b3Iub24oXCJtb3VzZWRvd25cIiwgb25Nb3VzZURvd24pO1xuICAgIGVkaXRvci5jb21tYW5kcy5hZGRDb21tYW5kcyhjb21tYW5kcy5kZWZhdWx0Q29tbWFuZHMpO1xuXG4gICAgYWRkQWx0Q3Vyc29yTGlzdGVuZXJzKGVkaXRvcik7XG59XG5cbmZ1bmN0aW9uIGFkZEFsdEN1cnNvckxpc3RlbmVycyhlZGl0b3Ipe1xuICAgIHZhciBlbCA9IGVkaXRvci50ZXh0SW5wdXQuZ2V0RWxlbWVudCgpO1xuICAgIHZhciBhbHRDdXJzb3IgPSBmYWxzZTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcihlbCwgXCJrZXlkb3duXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIGFsdERvd24gPSBlLmtleUNvZGUgPT0gMTggJiYgIShlLmN0cmxLZXkgfHwgZS5zaGlmdEtleSB8fCBlLm1ldGFLZXkpO1xuICAgICAgICBpZiAoZWRpdG9yLiRibG9ja1NlbGVjdEVuYWJsZWQgJiYgYWx0RG93bikge1xuICAgICAgICAgICAgaWYgKCFhbHRDdXJzb3IpIHtcbiAgICAgICAgICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2V0TW91c2VDdXJzb3IoXCJjcm9zc2hhaXJcIik7XG4gICAgICAgICAgICAgICAgYWx0Q3Vyc29yID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChhbHRDdXJzb3IpIHtcbiAgICAgICAgICAgIHJlc2V0KCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGV2ZW50LmFkZExpc3RlbmVyKGVsLCBcImtleXVwXCIsIHJlc2V0KTtcbiAgICBldmVudC5hZGRMaXN0ZW5lcihlbCwgXCJibHVyXCIsIHJlc2V0KTtcbiAgICBmdW5jdGlvbiByZXNldChlKSB7XG4gICAgICAgIGlmIChhbHRDdXJzb3IpIHtcbiAgICAgICAgICAgIGVkaXRvci5yZW5kZXJlci5zZXRNb3VzZUN1cnNvcihcIlwiKTtcbiAgICAgICAgICAgIGFsdEN1cnNvciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnRzLk11bHRpU2VsZWN0ID0gTXVsdGlTZWxlY3Q7XG5cblxuYWNlcXVpcmUoXCIuL2NvbmZpZ1wiKS5kZWZpbmVPcHRpb25zKEVkaXRvci5wcm90b3R5cGUsIFwiZWRpdG9yXCIsIHtcbiAgICBlbmFibGVNdWx0aXNlbGVjdDoge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICAgICAgTXVsdGlTZWxlY3QodGhpcyk7XG4gICAgICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbihcImNoYW5nZVNlc3Npb25cIiwgdGhpcy4kbXVsdGlzZWxlY3RPblNlc3Npb25DaGFuZ2UpO1xuICAgICAgICAgICAgICAgIHRoaXMub24oXCJtb3VzZWRvd25cIiwgb25Nb3VzZURvd24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZihcImNoYW5nZVNlc3Npb25cIiwgdGhpcy4kbXVsdGlzZWxlY3RPblNlc3Npb25DaGFuZ2UpO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKFwibW91c2Vkb3duXCIsIG9uTW91c2VEb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWU6IHRydWVcbiAgICB9LFxuICAgIGVuYWJsZUJsb2NrU2VsZWN0OiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICB0aGlzLiRibG9ja1NlbGVjdEVuYWJsZWQgPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlOiB0cnVlXG4gICAgfVxufSk7XG5cblxuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvcmFuZ2VcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG52YXIgUmFuZ2UgPSBhY2VxdWlyZShcIi4uLy4uL3JhbmdlXCIpLlJhbmdlO1xuXG52YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oKSB7fTtcblxuKGZ1bmN0aW9uKCkge1xuXG4gICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSBudWxsO1xuICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBudWxsO1xuICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7XG4gICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7XG4gICAgICAgIGlmICh0aGlzLmZvbGRpbmdTdGFydE1hcmtlci50ZXN0KGxpbmUpKVxuICAgICAgICAgICAgcmV0dXJuIFwic3RhcnRcIjtcbiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PSBcIm1hcmtiZWdpbmVuZFwiXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5mb2xkaW5nU3RvcE1hcmtlclxuICAgICAgICAgICAgICAgICYmIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIudGVzdChsaW5lKSlcbiAgICAgICAgICAgIHJldHVybiBcImVuZFwiO1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgdGhpcy5pbmRlbnRhdGlvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93LCBjb2x1bW4pIHtcbiAgICAgICAgdmFyIHJlID0gL1xcUy87XG4gICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7XG4gICAgICAgIHZhciBzdGFydExldmVsID0gbGluZS5zZWFyY2gocmUpO1xuICAgICAgICBpZiAoc3RhcnRMZXZlbCA9PSAtMSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBjb2x1bW4gfHwgbGluZS5sZW5ndGg7XG4gICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpO1xuICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7XG4gICAgICAgIHZhciBlbmRSb3cgPSByb3c7XG5cbiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7XG4gICAgICAgICAgICB2YXIgbGV2ZWwgPSBzZXNzaW9uLmdldExpbmUocm93KS5zZWFyY2gocmUpO1xuXG4gICAgICAgICAgICBpZiAobGV2ZWwgPT0gLTEpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgIGlmIChsZXZlbCA8PSBzdGFydExldmVsKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBlbmRSb3cgPSByb3c7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHtcbiAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBlbmRDb2x1bW4pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGJyYWNrZXQsIHJvdywgY29sdW1uLCB0eXBlUmUpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbiArIDF9O1xuICAgICAgICB2YXIgZW5kID0gc2Vzc2lvbi4kZmluZENsb3NpbmdCcmFja2V0KGJyYWNrZXQsIHN0YXJ0LCB0eXBlUmUpO1xuICAgICAgICBpZiAoIWVuZClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB2YXIgZncgPSBzZXNzaW9uLmZvbGRXaWRnZXRzW2VuZC5yb3ddO1xuICAgICAgICBpZiAoZncgPT0gbnVsbClcbiAgICAgICAgICAgIGZ3ID0gc2Vzc2lvbi5nZXRGb2xkV2lkZ2V0KGVuZC5yb3cpO1xuXG4gICAgICAgIGlmIChmdyA9PSBcInN0YXJ0XCIgJiYgZW5kLnJvdyA+IHN0YXJ0LnJvdykge1xuICAgICAgICAgICAgZW5kLnJvdyAtLTtcbiAgICAgICAgICAgIGVuZC5jb2x1bW4gPSBzZXNzaW9uLmdldExpbmUoZW5kLnJvdykubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCBlbmQpO1xuICAgIH07XG5cbiAgICB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBicmFja2V0LCByb3csIGNvbHVtbiwgdHlwZVJlKSB7XG4gICAgICAgIHZhciBlbmQgPSB7cm93OiByb3csIGNvbHVtbjogY29sdW1ufTtcbiAgICAgICAgdmFyIHN0YXJ0ID0gc2Vzc2lvbi4kZmluZE9wZW5pbmdCcmFja2V0KGJyYWNrZXQsIGVuZCk7XG5cbiAgICAgICAgaWYgKCFzdGFydClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBzdGFydC5jb2x1bW4rKztcbiAgICAgICAgZW5kLmNvbHVtbi0tO1xuXG4gICAgICAgIHJldHVybiAgUmFuZ2UuZnJvbVBvaW50cyhzdGFydCwgZW5kKTtcbiAgICB9O1xufSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpO1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS90aGVtZS90ZXh0bWF0ZVwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpYi9kb21cIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLmlzRGFyayA9IGZhbHNlO1xuZXhwb3J0cy5jc3NDbGFzcyA9IFwiYWNlLXRtXCI7XG5leHBvcnRzLmNzc1RleHQgPSBcIi5hY2UtdG0gLmFjZV9ndXR0ZXIge1xcXG5iYWNrZ3JvdW5kOiAjZjBmMGYwO1xcXG5jb2xvcjogIzMzMztcXFxufVxcXG4uYWNlLXRtIC5hY2VfcHJpbnQtbWFyZ2luIHtcXFxud2lkdGg6IDFweDtcXFxuYmFja2dyb3VuZDogI2U4ZThlODtcXFxufVxcXG4uYWNlLXRtIC5hY2VfZm9sZCB7XFxcbmJhY2tncm91bmQtY29sb3I6ICM2QjcyRTY7XFxcbn1cXFxuLmFjZS10bSB7XFxcbmJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7XFxcbmNvbG9yOiBibGFjaztcXFxufVxcXG4uYWNlLXRtIC5hY2VfY3Vyc29yIHtcXFxuY29sb3I6IGJsYWNrO1xcXG59XFxcbi5hY2UtdG0gLmFjZV9pbnZpc2libGUge1xcXG5jb2xvcjogcmdiKDE5MSwgMTkxLCAxOTEpO1xcXG59XFxcbi5hY2UtdG0gLmFjZV9zdG9yYWdlLFxcXG4uYWNlLXRtIC5hY2Vfa2V5d29yZCB7XFxcbmNvbG9yOiBibHVlO1xcXG59XFxcbi5hY2UtdG0gLmFjZV9jb25zdGFudCB7XFxcbmNvbG9yOiByZ2IoMTk3LCA2LCAxMSk7XFxcbn1cXFxuLmFjZS10bSAuYWNlX2NvbnN0YW50LmFjZV9idWlsZGluIHtcXFxuY29sb3I6IHJnYig4OCwgNzIsIDI0Nik7XFxcbn1cXFxuLmFjZS10bSAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSB7XFxcbmNvbG9yOiByZ2IoODgsIDkyLCAyNDYpO1xcXG59XFxcbi5hY2UtdG0gLmFjZV9jb25zdGFudC5hY2VfbGlicmFyeSB7XFxcbmNvbG9yOiByZ2IoNiwgMTUwLCAxNCk7XFxcbn1cXFxuLmFjZS10bSAuYWNlX2ludmFsaWQge1xcXG5iYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMCwgMCwgMC4xKTtcXFxuY29sb3I6IHJlZDtcXFxufVxcXG4uYWNlLXRtIC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24ge1xcXG5jb2xvcjogcmdiKDYwLCA3NiwgMTE0KTtcXFxufVxcXG4uYWNlLXRtIC5hY2Vfc3VwcG9ydC5hY2VfY29uc3RhbnQge1xcXG5jb2xvcjogcmdiKDYsIDE1MCwgMTQpO1xcXG59XFxcbi5hY2UtdG0gLmFjZV9zdXBwb3J0LmFjZV90eXBlLFxcXG4uYWNlLXRtIC5hY2Vfc3VwcG9ydC5hY2VfY2xhc3Mge1xcXG5jb2xvcjogcmdiKDEwOSwgMTIxLCAyMjIpO1xcXG59XFxcbi5hY2UtdG0gLmFjZV9rZXl3b3JkLmFjZV9vcGVyYXRvciB7XFxcbmNvbG9yOiByZ2IoMTA0LCAxMTgsIDEzNSk7XFxcbn1cXFxuLmFjZS10bSAuYWNlX3N0cmluZyB7XFxcbmNvbG9yOiByZ2IoMywgMTA2LCA3KTtcXFxufVxcXG4uYWNlLXRtIC5hY2VfY29tbWVudCB7XFxcbmNvbG9yOiByZ2IoNzYsIDEzNiwgMTA3KTtcXFxufVxcXG4uYWNlLXRtIC5hY2VfY29tbWVudC5hY2VfZG9jIHtcXFxuY29sb3I6IHJnYigwLCAxMDIsIDI1NSk7XFxcbn1cXFxuLmFjZS10bSAuYWNlX2NvbW1lbnQuYWNlX2RvYy5hY2VfdGFnIHtcXFxuY29sb3I6IHJnYigxMjgsIDE1OSwgMTkxKTtcXFxufVxcXG4uYWNlLXRtIC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMge1xcXG5jb2xvcjogcmdiKDAsIDAsIDIwNSk7XFxcbn1cXFxuLmFjZS10bSAuYWNlX3ZhcmlhYmxlIHtcXFxuY29sb3I6IHJnYig0OSwgMTMyLCAxNDkpO1xcXG59XFxcbi5hY2UtdG0gLmFjZV94bWwtcGUge1xcXG5jb2xvcjogcmdiKDEwNCwgMTA0LCA5MSk7XFxcbn1cXFxuLmFjZS10bSAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfZnVuY3Rpb24ge1xcXG5jb2xvcjogIzAwMDBBMjtcXFxufVxcXG4uYWNlLXRtIC5hY2VfaGVhZGluZyB7XFxcbmNvbG9yOiByZ2IoMTIsIDcsIDI1NSk7XFxcbn1cXFxuLmFjZS10bSAuYWNlX2xpc3Qge1xcXG5jb2xvcjpyZ2IoMTg1LCA2LCAxNDQpO1xcXG59XFxcbi5hY2UtdG0gLmFjZV9tZXRhLmFjZV90YWcge1xcXG5jb2xvcjpyZ2IoMCwgMjIsIDE0Mik7XFxcbn1cXFxuLmFjZS10bSAuYWNlX3N0cmluZy5hY2VfcmVnZXgge1xcXG5jb2xvcjogcmdiKDI1NSwgMCwgMClcXFxufVxcXG4uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHtcXFxuYmFja2dyb3VuZDogcmdiKDE4MSwgMjEzLCAyNTUpO1xcXG59XFxcbi5hY2UtdG0uYWNlX211bHRpc2VsZWN0IC5hY2Vfc2VsZWN0aW9uLmFjZV9zdGFydCB7XFxcbmJveC1zaGFkb3c6IDAgMCAzcHggMHB4IHdoaXRlO1xcXG59XFxcbi5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHtcXFxuYmFja2dyb3VuZDogcmdiKDI1MiwgMjU1LCAwKTtcXFxufVxcXG4uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RhY2sge1xcXG5iYWNrZ3JvdW5kOiByZ2IoMTY0LCAyMjksIDEwMSk7XFxcbn1cXFxuLmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQge1xcXG5tYXJnaW46IC0xcHggMCAwIC0xcHg7XFxcbmJvcmRlcjogMXB4IHNvbGlkIHJnYigxOTIsIDE5MiwgMTkyKTtcXFxufVxcXG4uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1xcXG5iYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDcpO1xcXG59XFxcbi5hY2UtdG0gLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge1xcXG5iYWNrZ3JvdW5kLWNvbG9yIDogI2RjZGNkYztcXFxufVxcXG4uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWQtd29yZCB7XFxcbmJhY2tncm91bmQ6IHJnYigyNTAsIDI1MCwgMjU1KTtcXFxuYm9yZGVyOiAxcHggc29saWQgcmdiKDIwMCwgMjAwLCAyNTApO1xcXG59XFxcbi5hY2UtdG0gLmFjZV9pbmRlbnQtZ3VpZGUge1xcXG5iYWNrZ3JvdW5kOiB1cmwoXFxcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQ0NBWUFBQUNaZ2JZbkFBQUFFMGxFUVZRSW1XUDQvLy8vZjRiTGx5Ly9Cd0FtVmdkMS93MTEvZ0FBQUFCSlJVNUVya0pnZ2c9PVxcXCIpIHJpZ2h0IHJlcGVhdC15O1xcXG59XFxcblwiO1xuXG52YXIgZG9tID0gYWNlcXVpcmUoXCIuLi9saWIvZG9tXCIpO1xuZG9tLmltcG9ydENzc1N0cmluZyhleHBvcnRzLmNzc1RleHQsIGV4cG9ydHMuY3NzQ2xhc3MpO1xufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvbGluZV93aWRnZXRzXCIsW1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCIsXCJhY2UvbGliL29vcFwiLFwiYWNlL2xpYi9kb21cIixcImFjZS9yYW5nZVwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBvb3AgPSBhY2VxdWlyZShcIi4vbGliL29vcFwiKTtcbnZhciBkb20gPSBhY2VxdWlyZShcIi4vbGliL2RvbVwiKTtcbnZhciBSYW5nZSA9IGFjZXF1aXJlKFwiLi9yYW5nZVwiKS5SYW5nZTtcblxuXG5mdW5jdGlvbiBMaW5lV2lkZ2V0cyhzZXNzaW9uKSB7XG4gICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjtcbiAgICB0aGlzLnNlc3Npb24ud2lkZ2V0TWFuYWdlciA9IHRoaXM7XG4gICAgdGhpcy5zZXNzaW9uLmdldFJvd0xlbmd0aCA9IHRoaXMuZ2V0Um93TGVuZ3RoO1xuICAgIHRoaXMuc2Vzc2lvbi4kZ2V0V2lkZ2V0U2NyZWVuTGVuZ3RoID0gdGhpcy4kZ2V0V2lkZ2V0U2NyZWVuTGVuZ3RoO1xuICAgIHRoaXMudXBkYXRlT25DaGFuZ2UgPSB0aGlzLnVwZGF0ZU9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5yZW5kZXJXaWRnZXRzID0gdGhpcy5yZW5kZXJXaWRnZXRzLmJpbmQodGhpcyk7XG4gICAgdGhpcy5tZWFzdXJlV2lkZ2V0cyA9IHRoaXMubWVhc3VyZVdpZGdldHMuYmluZCh0aGlzKTtcbiAgICB0aGlzLnNlc3Npb24uX2NoYW5nZWRXaWRnZXRzID0gW107XG4gICAgdGhpcy4kb25DaGFuZ2VFZGl0b3IgPSB0aGlzLiRvbkNoYW5nZUVkaXRvci5iaW5kKHRoaXMpO1xuICAgIFxuICAgIHRoaXMuc2Vzc2lvbi5vbihcImNoYW5nZVwiLCB0aGlzLnVwZGF0ZU9uQ2hhbmdlKTtcbiAgICB0aGlzLnNlc3Npb24ub24oXCJjaGFuZ2VGb2xkXCIsIHRoaXMudXBkYXRlT25Gb2xkKTtcbiAgICB0aGlzLnNlc3Npb24ub24oXCJjaGFuZ2VFZGl0b3JcIiwgdGhpcy4kb25DaGFuZ2VFZGl0b3IpO1xufVxuXG4oZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5nZXRSb3dMZW5ndGggPSBmdW5jdGlvbihyb3cpIHtcbiAgICAgICAgdmFyIGg7XG4gICAgICAgIGlmICh0aGlzLmxpbmVXaWRnZXRzKVxuICAgICAgICAgICAgaCA9IHRoaXMubGluZVdpZGdldHNbcm93XSAmJiB0aGlzLmxpbmVXaWRnZXRzW3Jvd10ucm93Q291bnQgfHwgMDtcbiAgICAgICAgZWxzZSBcbiAgICAgICAgICAgIGggPSAwO1xuICAgICAgICBpZiAoIXRoaXMuJHVzZVdyYXBNb2RlIHx8ICF0aGlzLiR3cmFwRGF0YVtyb3ddKSB7XG4gICAgICAgICAgICByZXR1cm4gMSArIGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kd3JhcERhdGFbcm93XS5sZW5ndGggKyAxICsgaDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLiRnZXRXaWRnZXRTY3JlZW5MZW5ndGggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHNjcmVlblJvd3MgPSAwO1xuICAgICAgICB0aGlzLmxpbmVXaWRnZXRzLmZvckVhY2goZnVuY3Rpb24odyl7XG4gICAgICAgICAgICBpZiAodyAmJiB3LnJvd0NvdW50ICYmICF3LmhpZGRlbilcbiAgICAgICAgICAgICAgICBzY3JlZW5Sb3dzICs9IHcucm93Q291bnQ7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc2NyZWVuUm93cztcbiAgICB9OyAgICBcbiAgICBcbiAgICB0aGlzLiRvbkNoYW5nZUVkaXRvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdGhpcy5hdHRhY2goZS5lZGl0b3IpO1xuICAgIH07XG4gICAgXG4gICAgdGhpcy5hdHRhY2ggPSBmdW5jdGlvbihlZGl0b3IpIHtcbiAgICAgICAgaWYgKGVkaXRvciAgJiYgZWRpdG9yLndpZGdldE1hbmFnZXIgJiYgZWRpdG9yLndpZGdldE1hbmFnZXIgIT0gdGhpcylcbiAgICAgICAgICAgIGVkaXRvci53aWRnZXRNYW5hZ2VyLmRldGFjaCgpO1xuXG4gICAgICAgIGlmICh0aGlzLmVkaXRvciA9PSBlZGl0b3IpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5kZXRhY2goKTtcbiAgICAgICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7XG4gICAgICAgIFxuICAgICAgICBpZiAoZWRpdG9yKSB7XG4gICAgICAgICAgICBlZGl0b3Iud2lkZ2V0TWFuYWdlciA9IHRoaXM7XG4gICAgICAgICAgICBlZGl0b3IucmVuZGVyZXIub24oXCJiZWZvcmVSZW5kZXJcIiwgdGhpcy5tZWFzdXJlV2lkZ2V0cyk7XG4gICAgICAgICAgICBlZGl0b3IucmVuZGVyZXIub24oXCJhZnRlclJlbmRlclwiLCB0aGlzLnJlbmRlcldpZGdldHMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmRldGFjaCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgICAgICBpZiAoIWVkaXRvcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuZWRpdG9yID0gbnVsbDtcbiAgICAgICAgZWRpdG9yLndpZGdldE1hbmFnZXIgPSBudWxsO1xuICAgICAgICBcbiAgICAgICAgZWRpdG9yLnJlbmRlcmVyLm9mZihcImJlZm9yZVJlbmRlclwiLCB0aGlzLm1lYXN1cmVXaWRnZXRzKTtcbiAgICAgICAgZWRpdG9yLnJlbmRlcmVyLm9mZihcImFmdGVyUmVuZGVyXCIsIHRoaXMucmVuZGVyV2lkZ2V0cyk7XG4gICAgICAgIHZhciBsaW5lV2lkZ2V0cyA9IHRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0cztcbiAgICAgICAgbGluZVdpZGdldHMgJiYgbGluZVdpZGdldHMuZm9yRWFjaChmdW5jdGlvbih3KSB7XG4gICAgICAgICAgICBpZiAodyAmJiB3LmVsICYmIHcuZWwucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIHcuX2luRG9jdW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB3LmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQody5lbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLnVwZGF0ZU9uRm9sZCA9IGZ1bmN0aW9uKGUsIHNlc3Npb24pIHtcbiAgICAgICAgdmFyIGxpbmVXaWRnZXRzID0gc2Vzc2lvbi5saW5lV2lkZ2V0cztcbiAgICAgICAgaWYgKCFsaW5lV2lkZ2V0cyB8fCAhZS5hY3Rpb24pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBmb2xkID0gZS5kYXRhO1xuICAgICAgICB2YXIgc3RhcnQgPSBmb2xkLnN0YXJ0LnJvdztcbiAgICAgICAgdmFyIGVuZCA9IGZvbGQuZW5kLnJvdztcbiAgICAgICAgdmFyIGhpZGUgPSBlLmFjdGlvbiA9PSBcImFkZFwiO1xuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnQgKyAxOyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChsaW5lV2lkZ2V0c1tpXSlcbiAgICAgICAgICAgICAgICBsaW5lV2lkZ2V0c1tpXS5oaWRkZW4gPSBoaWRlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaW5lV2lkZ2V0c1tlbmRdKSB7XG4gICAgICAgICAgICBpZiAoaGlkZSkge1xuICAgICAgICAgICAgICAgIGlmICghbGluZVdpZGdldHNbc3RhcnRdKVxuICAgICAgICAgICAgICAgICAgICBsaW5lV2lkZ2V0c1tzdGFydF0gPSBsaW5lV2lkZ2V0c1tlbmRdO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgbGluZVdpZGdldHNbZW5kXS5oaWRkZW4gPSBoaWRlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAobGluZVdpZGdldHNbc3RhcnRdID09IGxpbmVXaWRnZXRzW2VuZF0pXG4gICAgICAgICAgICAgICAgICAgIGxpbmVXaWRnZXRzW3N0YXJ0XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBsaW5lV2lkZ2V0c1tlbmRdLmhpZGRlbiA9IGhpZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFxuICAgIHRoaXMudXBkYXRlT25DaGFuZ2UgPSBmdW5jdGlvbihkZWx0YSkge1xuICAgICAgICB2YXIgbGluZVdpZGdldHMgPSB0aGlzLnNlc3Npb24ubGluZVdpZGdldHM7XG4gICAgICAgIGlmICghbGluZVdpZGdldHMpIHJldHVybjtcbiAgICAgICAgXG4gICAgICAgIHZhciBzdGFydFJvdyA9IGRlbHRhLnN0YXJ0LnJvdztcbiAgICAgICAgdmFyIGxlbiA9IGRlbHRhLmVuZC5yb3cgLSBzdGFydFJvdztcblxuICAgICAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICAgIH0gZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICdyZW1vdmUnKSB7XG4gICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGxpbmVXaWRnZXRzLnNwbGljZShzdGFydFJvdyArIDEsIGxlbik7XG4gICAgICAgICAgICByZW1vdmVkLmZvckVhY2goZnVuY3Rpb24odykge1xuICAgICAgICAgICAgICAgIHcgJiYgdGhpcy5yZW1vdmVMaW5lV2lkZ2V0KHcpO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICB0aGlzLiR1cGRhdGVSb3dzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4pO1xuICAgICAgICAgICAgYXJncy51bnNoaWZ0KHN0YXJ0Um93LCAwKTtcbiAgICAgICAgICAgIGxpbmVXaWRnZXRzLnNwbGljZS5hcHBseShsaW5lV2lkZ2V0cywgYXJncyk7XG4gICAgICAgICAgICB0aGlzLiR1cGRhdGVSb3dzKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFxuICAgIHRoaXMuJHVwZGF0ZVJvd3MgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGxpbmVXaWRnZXRzID0gdGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzO1xuICAgICAgICBpZiAoIWxpbmVXaWRnZXRzKSByZXR1cm47XG4gICAgICAgIHZhciBub1dpZGdldHMgPSB0cnVlO1xuICAgICAgICBsaW5lV2lkZ2V0cy5mb3JFYWNoKGZ1bmN0aW9uKHcsIGkpIHtcbiAgICAgICAgICAgIGlmICh3KSB7XG4gICAgICAgICAgICAgICAgbm9XaWRnZXRzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdy5yb3cgPSBpO1xuICAgICAgICAgICAgICAgIHdoaWxlICh3LiRvbGRXaWRnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdy4kb2xkV2lkZ2V0LnJvdyA9IGk7XG4gICAgICAgICAgICAgICAgICAgIHcgPSB3LiRvbGRXaWRnZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG5vV2lkZ2V0cylcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0cyA9IG51bGw7XG4gICAgfTtcblxuICAgIHRoaXMuYWRkTGluZVdpZGdldCA9IGZ1bmN0aW9uKHcpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlc3Npb24ubGluZVdpZGdldHMpXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ubGluZVdpZGdldHMgPSBuZXcgQXJyYXkodGhpcy5zZXNzaW9uLmdldExlbmd0aCgpKTtcbiAgICAgICAgXG4gICAgICAgIHZhciBvbGQgPSB0aGlzLnNlc3Npb24ubGluZVdpZGdldHNbdy5yb3ddO1xuICAgICAgICBpZiAob2xkKSB7XG4gICAgICAgICAgICB3LiRvbGRXaWRnZXQgPSBvbGQ7XG4gICAgICAgICAgICBpZiAob2xkLmVsICYmIG9sZC5lbC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgb2xkLmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQob2xkLmVsKTtcbiAgICAgICAgICAgICAgICBvbGQuX2luRG9jdW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0c1t3LnJvd10gPSB3O1xuICAgICAgICBcbiAgICAgICAgdy5zZXNzaW9uID0gdGhpcy5zZXNzaW9uO1xuICAgICAgICBcbiAgICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5lZGl0b3IucmVuZGVyZXI7XG4gICAgICAgIGlmICh3Lmh0bWwgJiYgIXcuZWwpIHtcbiAgICAgICAgICAgIHcuZWwgPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgICAgIHcuZWwuaW5uZXJIVE1MID0gdy5odG1sO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3LmVsKSB7XG4gICAgICAgICAgICBkb20uYWRkQ3NzQ2xhc3Mody5lbCwgXCJhY2VfbGluZVdpZGdldENvbnRhaW5lclwiKTtcbiAgICAgICAgICAgIHcuZWwuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gICAgICAgICAgICB3LmVsLnN0eWxlLnpJbmRleCA9IDU7XG4gICAgICAgICAgICByZW5kZXJlci5jb250YWluZXIuYXBwZW5kQ2hpbGQody5lbCk7XG4gICAgICAgICAgICB3Ll9pbkRvY3VtZW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKCF3LmNvdmVyR3V0dGVyKSB7XG4gICAgICAgICAgICB3LmVsLnN0eWxlLnpJbmRleCA9IDM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHcucGl4ZWxIZWlnaHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdy5waXhlbEhlaWdodCA9IHcuZWwub2Zmc2V0SGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh3LnJvd0NvdW50ID09IG51bGwpIHtcbiAgICAgICAgICAgIHcucm93Q291bnQgPSB3LnBpeGVsSGVpZ2h0IC8gcmVuZGVyZXIubGF5ZXJDb25maWcubGluZUhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdmFyIGZvbGQgPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZEF0KHcucm93LCAwKTtcbiAgICAgICAgdy4kZm9sZCA9IGZvbGQ7XG4gICAgICAgIGlmIChmb2xkKSB7XG4gICAgICAgICAgICB2YXIgbGluZVdpZGdldHMgPSB0aGlzLnNlc3Npb24ubGluZVdpZGdldHM7XG4gICAgICAgICAgICBpZiAody5yb3cgPT0gZm9sZC5lbmQucm93ICYmICFsaW5lV2lkZ2V0c1tmb2xkLnN0YXJ0LnJvd10pXG4gICAgICAgICAgICAgICAgbGluZVdpZGdldHNbZm9sZC5zdGFydC5yb3ddID0gdztcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB3LmhpZGRlbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICB0aGlzLnNlc3Npb24uX2VtaXQoXCJjaGFuZ2VGb2xkXCIsIHtkYXRhOntzdGFydDp7cm93OiB3LnJvd319fSk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLiR1cGRhdGVSb3dzKCk7XG4gICAgICAgIHRoaXMucmVuZGVyV2lkZ2V0cyhudWxsLCByZW5kZXJlcik7XG4gICAgICAgIHRoaXMub25XaWRnZXRDaGFuZ2VkKHcpO1xuICAgICAgICByZXR1cm4gdztcbiAgICB9O1xuICAgIFxuICAgIHRoaXMucmVtb3ZlTGluZVdpZGdldCA9IGZ1bmN0aW9uKHcpIHtcbiAgICAgICAgdy5faW5Eb2N1bWVudCA9IGZhbHNlO1xuICAgICAgICB3LnNlc3Npb24gPSBudWxsO1xuICAgICAgICBpZiAody5lbCAmJiB3LmVsLnBhcmVudE5vZGUpXG4gICAgICAgICAgICB3LmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQody5lbCk7XG4gICAgICAgIGlmICh3LmVkaXRvciAmJiB3LmVkaXRvci5kZXN0cm95KSB0cnkge1xuICAgICAgICAgICAgdy5lZGl0b3IuZGVzdHJveSgpO1xuICAgICAgICB9IGNhdGNoKGUpe31cbiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0cykge1xuICAgICAgICAgICAgdmFyIHcxID0gdGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzW3cucm93XTtcbiAgICAgICAgICAgIGlmICh3MSA9PSB3KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzW3cucm93XSA9IHcuJG9sZFdpZGdldDtcbiAgICAgICAgICAgICAgICBpZiAody4kb2xkV2lkZ2V0KVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uV2lkZ2V0Q2hhbmdlZCh3LiRvbGRXaWRnZXQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3aGlsZSAodzEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHcxLiRvbGRXaWRnZXQgPT0gdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdzEuJG9sZFdpZGdldCA9IHcuJG9sZFdpZGdldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHcxID0gdzEuJG9sZFdpZGdldDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXNzaW9uLl9lbWl0KFwiY2hhbmdlRm9sZFwiLCB7ZGF0YTp7c3RhcnQ6e3Jvdzogdy5yb3d9fX0pO1xuICAgICAgICB0aGlzLiR1cGRhdGVSb3dzKCk7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmdldFdpZGdldHNBdFJvdyA9IGZ1bmN0aW9uKHJvdykge1xuICAgICAgICB2YXIgbGluZVdpZGdldHMgPSB0aGlzLnNlc3Npb24ubGluZVdpZGdldHM7XG4gICAgICAgIHZhciB3ID0gbGluZVdpZGdldHMgJiYgbGluZVdpZGdldHNbcm93XTtcbiAgICAgICAgdmFyIGxpc3QgPSBbXTtcbiAgICAgICAgd2hpbGUgKHcpIHtcbiAgICAgICAgICAgIGxpc3QucHVzaCh3KTtcbiAgICAgICAgICAgIHcgPSB3LiRvbGRXaWRnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLm9uV2lkZ2V0Q2hhbmdlZCA9IGZ1bmN0aW9uKHcpIHtcbiAgICAgICAgdGhpcy5zZXNzaW9uLl9jaGFuZ2VkV2lkZ2V0cy5wdXNoKHcpO1xuICAgICAgICB0aGlzLmVkaXRvciAmJiB0aGlzLmVkaXRvci5yZW5kZXJlci51cGRhdGVGdWxsKCk7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLm1lYXN1cmVXaWRnZXRzID0gZnVuY3Rpb24oZSwgcmVuZGVyZXIpIHtcbiAgICAgICAgdmFyIGNoYW5nZWRXaWRnZXRzID0gdGhpcy5zZXNzaW9uLl9jaGFuZ2VkV2lkZ2V0cztcbiAgICAgICAgdmFyIGNvbmZpZyA9IHJlbmRlcmVyLmxheWVyQ29uZmlnO1xuICAgICAgICBcbiAgICAgICAgaWYgKCFjaGFuZ2VkV2lkZ2V0cyB8fCAhY2hhbmdlZFdpZGdldHMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIHZhciBtaW4gPSBJbmZpbml0eTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VkV2lkZ2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHcgPSBjaGFuZ2VkV2lkZ2V0c1tpXTtcbiAgICAgICAgICAgIGlmICghdyB8fCAhdy5lbCkgY29udGludWU7XG4gICAgICAgICAgICBpZiAody5zZXNzaW9uICE9IHRoaXMuc2Vzc2lvbikgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIXcuX2luRG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzW3cucm93XSAhPSB3KVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB3Ll9pbkRvY3VtZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZW5kZXJlci5jb250YWluZXIuYXBwZW5kQ2hpbGQody5lbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHcuaCA9IHcuZWwub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoIXcuZml4ZWRXaWR0aCkge1xuICAgICAgICAgICAgICAgIHcudyA9IHcuZWwub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICAgICAgdy5zY3JlZW5XaWR0aCA9IE1hdGguY2VpbCh3LncgLyBjb25maWcuY2hhcmFjdGVyV2lkdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgcm93Q291bnQgPSB3LmggLyBjb25maWcubGluZUhlaWdodDtcbiAgICAgICAgICAgIGlmICh3LmNvdmVyTGluZSkge1xuICAgICAgICAgICAgICAgIHJvd0NvdW50IC09IHRoaXMuc2Vzc2lvbi5nZXRSb3dMaW5lQ291bnQody5yb3cpO1xuICAgICAgICAgICAgICAgIGlmIChyb3dDb3VudCA8IDApXG4gICAgICAgICAgICAgICAgICAgIHJvd0NvdW50ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh3LnJvd0NvdW50ICE9IHJvd0NvdW50KSB7XG4gICAgICAgICAgICAgICAgdy5yb3dDb3VudCA9IHJvd0NvdW50O1xuICAgICAgICAgICAgICAgIGlmICh3LnJvdyA8IG1pbilcbiAgICAgICAgICAgICAgICAgICAgbWluID0gdy5yb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbiAhPSBJbmZpbml0eSkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLl9lbWl0KFwiY2hhbmdlRm9sZFwiLCB7ZGF0YTp7c3RhcnQ6e3JvdzogbWlufX19KTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0V2lkdGggPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5fY2hhbmdlZFdpZGdldHMgPSBbXTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMucmVuZGVyV2lkZ2V0cyA9IGZ1bmN0aW9uKGUsIHJlbmRlcmVyKSB7XG4gICAgICAgIHZhciBjb25maWcgPSByZW5kZXJlci5sYXllckNvbmZpZztcbiAgICAgICAgdmFyIGxpbmVXaWRnZXRzID0gdGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzO1xuICAgICAgICBpZiAoIWxpbmVXaWRnZXRzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgZmlyc3QgPSBNYXRoLm1pbih0aGlzLmZpcnN0Um93LCBjb25maWcuZmlyc3RSb3cpO1xuICAgICAgICB2YXIgbGFzdCA9IE1hdGgubWF4KHRoaXMubGFzdFJvdywgY29uZmlnLmxhc3RSb3csIGxpbmVXaWRnZXRzLmxlbmd0aCk7XG4gICAgICAgIFxuICAgICAgICB3aGlsZSAoZmlyc3QgPiAwICYmICFsaW5lV2lkZ2V0c1tmaXJzdF0pXG4gICAgICAgICAgICBmaXJzdC0tO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5maXJzdFJvdyA9IGNvbmZpZy5maXJzdFJvdztcbiAgICAgICAgdGhpcy5sYXN0Um93ID0gY29uZmlnLmxhc3RSb3c7XG5cbiAgICAgICAgcmVuZGVyZXIuJGN1cnNvckxheWVyLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgZm9yICh2YXIgaSA9IGZpcnN0OyBpIDw9IGxhc3Q7IGkrKykge1xuICAgICAgICAgICAgdmFyIHcgPSBsaW5lV2lkZ2V0c1tpXTtcbiAgICAgICAgICAgIGlmICghdyB8fCAhdy5lbCkgY29udGludWU7XG4gICAgICAgICAgICBpZiAody5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICB3LmVsLnN0eWxlLnRvcCA9IC0xMDAgLSAody5waXhlbEhlaWdodCB8fCAwKSArIFwicHhcIjtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdy5faW5Eb2N1bWVudCkge1xuICAgICAgICAgICAgICAgIHcuX2luRG9jdW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh3LmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB0b3AgPSByZW5kZXJlci4kY3Vyc29yTGF5ZXIuZ2V0UGl4ZWxQb3NpdGlvbih7cm93OiBpLCBjb2x1bW46MH0sIHRydWUpLnRvcDtcbiAgICAgICAgICAgIGlmICghdy5jb3ZlckxpbmUpXG4gICAgICAgICAgICAgICAgdG9wICs9IGNvbmZpZy5saW5lSGVpZ2h0ICogdGhpcy5zZXNzaW9uLmdldFJvd0xpbmVDb3VudCh3LnJvdyk7XG4gICAgICAgICAgICB3LmVsLnN0eWxlLnRvcCA9IHRvcCAtIGNvbmZpZy5vZmZzZXQgKyBcInB4XCI7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBsZWZ0ID0gdy5jb3Zlckd1dHRlciA/IDAgOiByZW5kZXJlci5ndXR0ZXJXaWR0aDtcbiAgICAgICAgICAgIGlmICghdy5maXhlZFdpZHRoKVxuICAgICAgICAgICAgICAgIGxlZnQgLT0gcmVuZGVyZXIuc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgIHcuZWwuc3R5bGUubGVmdCA9IGxlZnQgKyBcInB4XCI7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICh3LmZ1bGxXaWR0aCAmJiB3LnNjcmVlbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgdy5lbC5zdHlsZS5taW5XaWR0aCA9IGNvbmZpZy53aWR0aCArIDIgKiBjb25maWcucGFkZGluZyArIFwicHhcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHcuZml4ZWRXaWR0aCkge1xuICAgICAgICAgICAgICAgIHcuZWwuc3R5bGUucmlnaHQgPSByZW5kZXJlci5zY3JvbGxCYXIuZ2V0V2lkdGgoKSArIFwicHhcIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdy5lbC5zdHlsZS5yaWdodCA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFxufSkuY2FsbChMaW5lV2lkZ2V0cy5wcm90b3R5cGUpO1xuXG5cbmV4cG9ydHMuTGluZVdpZGdldHMgPSBMaW5lV2lkZ2V0cztcblxufSk7XG5cbmFjZS5kZWZpbmUoXCJhY2UvZXh0L2Vycm9yX21hcmtlclwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpbmVfd2lkZ2V0c1wiLFwiYWNlL2xpYi9kb21cIixcImFjZS9yYW5nZVwiXSwgZnVuY3Rpb24oYWNlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgTGluZVdpZGdldHMgPSBhY2VxdWlyZShcIi4uL2xpbmVfd2lkZ2V0c1wiKS5MaW5lV2lkZ2V0cztcbnZhciBkb20gPSBhY2VxdWlyZShcIi4uL2xpYi9kb21cIik7XG52YXIgUmFuZ2UgPSBhY2VxdWlyZShcIi4uL3JhbmdlXCIpLlJhbmdlO1xuXG5mdW5jdGlvbiBiaW5hcnlTZWFyY2goYXJyYXksIG5lZWRsZSwgY29tcGFyYXRvcikge1xuICAgIHZhciBmaXJzdCA9IDA7XG4gICAgdmFyIGxhc3QgPSBhcnJheS5sZW5ndGggLSAxO1xuXG4gICAgd2hpbGUgKGZpcnN0IDw9IGxhc3QpIHtcbiAgICAgICAgdmFyIG1pZCA9IChmaXJzdCArIGxhc3QpID4+IDE7XG4gICAgICAgIHZhciBjID0gY29tcGFyYXRvcihuZWVkbGUsIGFycmF5W21pZF0pO1xuICAgICAgICBpZiAoYyA+IDApXG4gICAgICAgICAgICBmaXJzdCA9IG1pZCArIDE7XG4gICAgICAgIGVsc2UgaWYgKGMgPCAwKVxuICAgICAgICAgICAgbGFzdCA9IG1pZCAtIDE7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBtaWQ7XG4gICAgfVxuICAgIHJldHVybiAtKGZpcnN0ICsgMSk7XG59XG5cbmZ1bmN0aW9uIGZpbmRBbm5vdGF0aW9ucyhzZXNzaW9uLCByb3csIGRpcikge1xuICAgIHZhciBhbm5vdGF0aW9ucyA9IHNlc3Npb24uZ2V0QW5ub3RhdGlvbnMoKS5zb3J0KFJhbmdlLmNvbXBhcmVQb2ludHMpO1xuICAgIGlmICghYW5ub3RhdGlvbnMubGVuZ3RoKVxuICAgICAgICByZXR1cm47XG4gICAgXG4gICAgdmFyIGkgPSBiaW5hcnlTZWFyY2goYW5ub3RhdGlvbnMsIHtyb3c6IHJvdywgY29sdW1uOiAtMX0sIFJhbmdlLmNvbXBhcmVQb2ludHMpO1xuICAgIGlmIChpIDwgMClcbiAgICAgICAgaSA9IC1pIC0gMTtcbiAgICBcbiAgICBpZiAoaSA+PSBhbm5vdGF0aW9ucy5sZW5ndGgpXG4gICAgICAgIGkgPSBkaXIgPiAwID8gMCA6IGFubm90YXRpb25zLmxlbmd0aCAtIDE7XG4gICAgZWxzZSBpZiAoaSA9PT0gMCAmJiBkaXIgPCAwKVxuICAgICAgICBpID0gYW5ub3RhdGlvbnMubGVuZ3RoIC0gMTtcbiAgICBcbiAgICB2YXIgYW5ub3RhdGlvbiA9IGFubm90YXRpb25zW2ldO1xuICAgIGlmICghYW5ub3RhdGlvbiB8fCAhZGlyKVxuICAgICAgICByZXR1cm47XG5cbiAgICBpZiAoYW5ub3RhdGlvbi5yb3cgPT09IHJvdykge1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBhbm5vdGF0aW9uID0gYW5ub3RhdGlvbnNbaSArPSBkaXJdO1xuICAgICAgICB9IHdoaWxlIChhbm5vdGF0aW9uICYmIGFubm90YXRpb24ucm93ID09PSByb3cpO1xuICAgICAgICBpZiAoIWFubm90YXRpb24pXG4gICAgICAgICAgICByZXR1cm4gYW5ub3RhdGlvbnMuc2xpY2UoKTtcbiAgICB9XG4gICAgXG4gICAgXG4gICAgdmFyIG1hdGNoZWQgPSBbXTtcbiAgICByb3cgPSBhbm5vdGF0aW9uLnJvdztcbiAgICBkbyB7XG4gICAgICAgIG1hdGNoZWRbZGlyIDwgMCA/IFwidW5zaGlmdFwiIDogXCJwdXNoXCJdKGFubm90YXRpb24pO1xuICAgICAgICBhbm5vdGF0aW9uID0gYW5ub3RhdGlvbnNbaSArPSBkaXJdO1xuICAgIH0gd2hpbGUgKGFubm90YXRpb24gJiYgYW5ub3RhdGlvbi5yb3cgPT0gcm93KTtcbiAgICByZXR1cm4gbWF0Y2hlZC5sZW5ndGggJiYgbWF0Y2hlZDtcbn1cblxuZXhwb3J0cy5zaG93RXJyb3JNYXJrZXIgPSBmdW5jdGlvbihlZGl0b3IsIGRpcikge1xuICAgIHZhciBzZXNzaW9uID0gZWRpdG9yLnNlc3Npb247XG4gICAgaWYgKCFzZXNzaW9uLndpZGdldE1hbmFnZXIpIHtcbiAgICAgICAgc2Vzc2lvbi53aWRnZXRNYW5hZ2VyID0gbmV3IExpbmVXaWRnZXRzKHNlc3Npb24pO1xuICAgICAgICBzZXNzaW9uLndpZGdldE1hbmFnZXIuYXR0YWNoKGVkaXRvcik7XG4gICAgfVxuICAgIFxuICAgIHZhciBwb3MgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTtcbiAgICB2YXIgcm93ID0gcG9zLnJvdztcbiAgICB2YXIgb2xkV2lkZ2V0ID0gc2Vzc2lvbi53aWRnZXRNYW5hZ2VyLmdldFdpZGdldHNBdFJvdyhyb3cpLmZpbHRlcihmdW5jdGlvbih3KSB7XG4gICAgICAgIHJldHVybiB3LnR5cGUgPT0gXCJlcnJvck1hcmtlclwiO1xuICAgIH0pWzBdO1xuICAgIGlmIChvbGRXaWRnZXQpIHtcbiAgICAgICAgb2xkV2lkZ2V0LmRlc3Ryb3koKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb3cgLT0gZGlyO1xuICAgIH1cbiAgICB2YXIgYW5ub3RhdGlvbnMgPSBmaW5kQW5ub3RhdGlvbnMoc2Vzc2lvbiwgcm93LCBkaXIpO1xuICAgIHZhciBndXR0ZXJBbm5vO1xuICAgIGlmIChhbm5vdGF0aW9ucykge1xuICAgICAgICB2YXIgYW5ub3RhdGlvbiA9IGFubm90YXRpb25zWzBdO1xuICAgICAgICBwb3MuY29sdW1uID0gKGFubm90YXRpb24ucG9zICYmIHR5cGVvZiBhbm5vdGF0aW9uLmNvbHVtbiAhPSBcIm51bWJlclwiXG4gICAgICAgICAgICA/IGFubm90YXRpb24ucG9zLnNjXG4gICAgICAgICAgICA6IGFubm90YXRpb24uY29sdW1uKSB8fCAwO1xuICAgICAgICBwb3Mucm93ID0gYW5ub3RhdGlvbi5yb3c7XG4gICAgICAgIGd1dHRlckFubm8gPSBlZGl0b3IucmVuZGVyZXIuJGd1dHRlckxheWVyLiRhbm5vdGF0aW9uc1twb3Mucm93XTtcbiAgICB9IGVsc2UgaWYgKG9sZFdpZGdldCkge1xuICAgICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZ3V0dGVyQW5ubyA9IHtcbiAgICAgICAgICAgIHRleHQ6IFtcIkxvb2tzIGdvb2QhXCJdLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImFjZV9va1wiXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVkaXRvci5zZXNzaW9uLnVuZm9sZChwb3Mucm93KTtcbiAgICBlZGl0b3Iuc2VsZWN0aW9uLm1vdmVUb1Bvc2l0aW9uKHBvcyk7XG4gICAgXG4gICAgdmFyIHcgPSB7XG4gICAgICAgIHJvdzogcG9zLnJvdywgXG4gICAgICAgIGZpeGVkV2lkdGg6IHRydWUsXG4gICAgICAgIGNvdmVyR3V0dGVyOiB0cnVlLFxuICAgICAgICBlbDogZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gICAgICAgIHR5cGU6IFwiZXJyb3JNYXJrZXJcIlxuICAgIH07XG4gICAgdmFyIGVsID0gdy5lbC5hcHBlbmRDaGlsZChkb20uY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG4gICAgdmFyIGFycm93ID0gdy5lbC5hcHBlbmRDaGlsZChkb20uY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG4gICAgYXJyb3cuY2xhc3NOYW1lID0gXCJlcnJvcl93aWRnZXRfYXJyb3cgXCIgKyBndXR0ZXJBbm5vLmNsYXNzTmFtZTtcbiAgICBcbiAgICB2YXIgbGVmdCA9IGVkaXRvci5yZW5kZXJlci4kY3Vyc29yTGF5ZXJcbiAgICAgICAgLmdldFBpeGVsUG9zaXRpb24ocG9zKS5sZWZ0O1xuICAgIGFycm93LnN0eWxlLmxlZnQgPSBsZWZ0ICsgZWRpdG9yLnJlbmRlcmVyLmd1dHRlcldpZHRoIC0gNSArIFwicHhcIjtcbiAgICBcbiAgICB3LmVsLmNsYXNzTmFtZSA9IFwiZXJyb3Jfd2lkZ2V0X3dyYXBwZXJcIjtcbiAgICBlbC5jbGFzc05hbWUgPSBcImVycm9yX3dpZGdldCBcIiArIGd1dHRlckFubm8uY2xhc3NOYW1lO1xuICAgIGVsLmlubmVySFRNTCA9IGd1dHRlckFubm8udGV4dC5qb2luKFwiPGJyPlwiKTtcbiAgICBcbiAgICBlbC5hcHBlbmRDaGlsZChkb20uY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG4gICAgXG4gICAgdmFyIGtiID0gZnVuY3Rpb24oXywgaGFzaElkLCBrZXlTdHJpbmcpIHtcbiAgICAgICAgaWYgKGhhc2hJZCA9PT0gMCAmJiAoa2V5U3RyaW5nID09PSBcImVzY1wiIHx8IGtleVN0cmluZyA9PT0gXCJyZXR1cm5cIikpIHtcbiAgICAgICAgICAgIHcuZGVzdHJveSgpO1xuICAgICAgICAgICAgcmV0dXJuIHtjb21tYW5kOiBcIm51bGxcIn07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFxuICAgIHcuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoZWRpdG9yLiRtb3VzZUhhbmRsZXIuaXNNb3VzZVByZXNzZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGVkaXRvci5rZXlCaW5kaW5nLnJlbW92ZUtleWJvYXJkSGFuZGxlcihrYik7XG4gICAgICAgIHNlc3Npb24ud2lkZ2V0TWFuYWdlci5yZW1vdmVMaW5lV2lkZ2V0KHcpO1xuICAgICAgICBlZGl0b3Iub2ZmKFwiY2hhbmdlU2VsZWN0aW9uXCIsIHcuZGVzdHJveSk7XG4gICAgICAgIGVkaXRvci5vZmYoXCJjaGFuZ2VTZXNzaW9uXCIsIHcuZGVzdHJveSk7XG4gICAgICAgIGVkaXRvci5vZmYoXCJtb3VzZXVwXCIsIHcuZGVzdHJveSk7XG4gICAgICAgIGVkaXRvci5vZmYoXCJjaGFuZ2VcIiwgdy5kZXN0cm95KTtcbiAgICB9O1xuICAgIFxuICAgIGVkaXRvci5rZXlCaW5kaW5nLmFkZEtleWJvYXJkSGFuZGxlcihrYik7XG4gICAgZWRpdG9yLm9uKFwiY2hhbmdlU2VsZWN0aW9uXCIsIHcuZGVzdHJveSk7XG4gICAgZWRpdG9yLm9uKFwiY2hhbmdlU2Vzc2lvblwiLCB3LmRlc3Ryb3kpO1xuICAgIGVkaXRvci5vbihcIm1vdXNldXBcIiwgdy5kZXN0cm95KTtcbiAgICBlZGl0b3Iub24oXCJjaGFuZ2VcIiwgdy5kZXN0cm95KTtcbiAgICBcbiAgICBlZGl0b3Iuc2Vzc2lvbi53aWRnZXRNYW5hZ2VyLmFkZExpbmVXaWRnZXQodyk7XG4gICAgXG4gICAgdy5lbC5vbm1vdXNlZG93biA9IGVkaXRvci5mb2N1cy5iaW5kKGVkaXRvcik7XG4gICAgXG4gICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KG51bGwsIDAuNSwge2JvdHRvbTogdy5lbC5vZmZzZXRIZWlnaHR9KTtcbn07XG5cblxuZG9tLmltcG9ydENzc1N0cmluZyhcIlxcXG4gICAgLmVycm9yX3dpZGdldF93cmFwcGVyIHtcXFxuICAgICAgICBiYWNrZ3JvdW5kOiBpbmhlcml0O1xcXG4gICAgICAgIGNvbG9yOiBpbmhlcml0O1xcXG4gICAgICAgIGJvcmRlcjpub25lXFxcbiAgICB9XFxcbiAgICAuZXJyb3Jfd2lkZ2V0IHtcXFxuICAgICAgICBib3JkZXItdG9wOiBzb2xpZCAycHg7XFxcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQgMnB4O1xcXG4gICAgICAgIG1hcmdpbjogNXB4IDA7XFxcbiAgICAgICAgcGFkZGluZzogMTBweCA0MHB4O1xcXG4gICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcXFxuICAgIH1cXFxuICAgIC5lcnJvcl93aWRnZXQuYWNlX2Vycm9yLCAuZXJyb3Jfd2lkZ2V0X2Fycm93LmFjZV9lcnJvcntcXFxuICAgICAgICBib3JkZXItY29sb3I6ICNmZjVhNWFcXFxuICAgIH1cXFxuICAgIC5lcnJvcl93aWRnZXQuYWNlX3dhcm5pbmcsIC5lcnJvcl93aWRnZXRfYXJyb3cuYWNlX3dhcm5pbmd7XFxcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjRjFEODE3XFxcbiAgICB9XFxcbiAgICAuZXJyb3Jfd2lkZ2V0LmFjZV9pbmZvLCAuZXJyb3Jfd2lkZ2V0X2Fycm93LmFjZV9pbmZve1xcXG4gICAgICAgIGJvcmRlci1jb2xvcjogIzVhNWE1YVxcXG4gICAgfVxcXG4gICAgLmVycm9yX3dpZGdldC5hY2Vfb2ssIC5lcnJvcl93aWRnZXRfYXJyb3cuYWNlX29re1xcXG4gICAgICAgIGJvcmRlci1jb2xvcjogIzVhYWE1YVxcXG4gICAgfVxcXG4gICAgLmVycm9yX3dpZGdldF9hcnJvdyB7XFxcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcXG4gICAgICAgIGJvcmRlcjogc29saWQgNXB4O1xcXG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6IHRyYW5zcGFyZW50IWltcG9ydGFudDtcXFxuICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50IWltcG9ydGFudDtcXFxuICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQhaW1wb3J0YW50O1xcXG4gICAgICAgIHRvcDogLTVweDtcXFxuICAgIH1cXFxuXCIsIFwiXCIpO1xuXG59KTtcblxuYWNlLmRlZmluZShcImFjZS9hY2VcIixbXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIixcImFjZS9saWIvZml4b2xkYnJvd3NlcnNcIixcImFjZS9saWIvZG9tXCIsXCJhY2UvbGliL2V2ZW50XCIsXCJhY2UvZWRpdG9yXCIsXCJhY2UvZWRpdF9zZXNzaW9uXCIsXCJhY2UvdW5kb21hbmFnZXJcIixcImFjZS92aXJ0dWFsX3JlbmRlcmVyXCIsXCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnRcIixcImFjZS9rZXlib2FyZC9oYXNoX2hhbmRsZXJcIixcImFjZS9wbGFjZWhvbGRlclwiLFwiYWNlL211bHRpX3NlbGVjdFwiLFwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGVcIixcImFjZS90aGVtZS90ZXh0bWF0ZVwiLFwiYWNlL2V4dC9lcnJvcl9tYXJrZXJcIixcImFjZS9jb25maWdcIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwidXNlIHN0cmljdFwiO1xuXG5hY2VxdWlyZShcIi4vbGliL2ZpeG9sZGJyb3dzZXJzXCIpO1xuXG52YXIgZG9tID0gYWNlcXVpcmUoXCIuL2xpYi9kb21cIik7XG52YXIgZXZlbnQgPSBhY2VxdWlyZShcIi4vbGliL2V2ZW50XCIpO1xuXG52YXIgRWRpdG9yID0gYWNlcXVpcmUoXCIuL2VkaXRvclwiKS5FZGl0b3I7XG52YXIgRWRpdFNlc3Npb24gPSBhY2VxdWlyZShcIi4vZWRpdF9zZXNzaW9uXCIpLkVkaXRTZXNzaW9uO1xudmFyIFVuZG9NYW5hZ2VyID0gYWNlcXVpcmUoXCIuL3VuZG9tYW5hZ2VyXCIpLlVuZG9NYW5hZ2VyO1xudmFyIFJlbmRlcmVyID0gYWNlcXVpcmUoXCIuL3ZpcnR1YWxfcmVuZGVyZXJcIikuVmlydHVhbFJlbmRlcmVyO1xuYWNlcXVpcmUoXCIuL3dvcmtlci93b3JrZXJfY2xpZW50XCIpO1xuYWNlcXVpcmUoXCIuL2tleWJvYXJkL2hhc2hfaGFuZGxlclwiKTtcbmFjZXF1aXJlKFwiLi9wbGFjZWhvbGRlclwiKTtcbmFjZXF1aXJlKFwiLi9tdWx0aV9zZWxlY3RcIik7XG5hY2VxdWlyZShcIi4vbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZVwiKTtcbmFjZXF1aXJlKFwiLi90aGVtZS90ZXh0bWF0ZVwiKTtcbmFjZXF1aXJlKFwiLi9leHQvZXJyb3JfbWFya2VyXCIpO1xuXG5leHBvcnRzLmNvbmZpZyA9IGFjZXF1aXJlKFwiLi9jb25maWdcIik7XG5leHBvcnRzLmFjZXF1aXJlID0gYWNlcXVpcmU7XG5cbmlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIpXG4gICAgZXhwb3J0cy5kZWZpbmUgPSBkZWZpbmU7XG5leHBvcnRzLmVkaXQgPSBmdW5jdGlvbihlbCkge1xuICAgIGlmICh0eXBlb2YgZWwgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICB2YXIgX2lkID0gZWw7XG4gICAgICAgIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoX2lkKTtcbiAgICAgICAgaWYgKCFlbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFjZS5lZGl0IGNhbid0IGZpbmQgZGl2ICNcIiArIF9pZCk7XG4gICAgfVxuXG4gICAgaWYgKGVsICYmIGVsLmVudiAmJiBlbC5lbnYuZWRpdG9yIGluc3RhbmNlb2YgRWRpdG9yKVxuICAgICAgICByZXR1cm4gZWwuZW52LmVkaXRvcjtcblxuICAgIHZhciB2YWx1ZSA9IFwiXCI7XG4gICAgaWYgKGVsICYmIC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoZWwudGFnTmFtZSkpIHtcbiAgICAgICAgdmFyIG9sZE5vZGUgPSBlbDtcbiAgICAgICAgdmFsdWUgPSBvbGROb2RlLnZhbHVlO1xuICAgICAgICBlbCA9IGRvbS5jcmVhdGVFbGVtZW50KFwicHJlXCIpO1xuICAgICAgICBvbGROb2RlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGVsLCBvbGROb2RlKTtcbiAgICB9IGVsc2UgaWYgKGVsKSB7XG4gICAgICAgIHZhbHVlID0gZG9tLmdldElubmVyVGV4dChlbCk7XG4gICAgICAgIGVsLmlubmVySFRNTCA9IFwiXCI7XG4gICAgfVxuXG4gICAgdmFyIGRvYyA9IGV4cG9ydHMuY3JlYXRlRWRpdFNlc3Npb24odmFsdWUpO1xuXG4gICAgdmFyIGVkaXRvciA9IG5ldyBFZGl0b3IobmV3IFJlbmRlcmVyKGVsKSk7XG4gICAgZWRpdG9yLnNldFNlc3Npb24oZG9jKTtcblxuICAgIHZhciBlbnYgPSB7XG4gICAgICAgIGRvY3VtZW50OiBkb2MsXG4gICAgICAgIGVkaXRvcjogZWRpdG9yLFxuICAgICAgICBvblJlc2l6ZTogZWRpdG9yLnJlc2l6ZS5iaW5kKGVkaXRvciwgbnVsbClcbiAgICB9O1xuICAgIGlmIChvbGROb2RlKSBlbnYudGV4dGFyZWEgPSBvbGROb2RlO1xuICAgIGV2ZW50LmFkZExpc3RlbmVyKHdpbmRvdywgXCJyZXNpemVcIiwgZW52Lm9uUmVzaXplKTtcbiAgICBlZGl0b3Iub24oXCJkZXN0cm95XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICBldmVudC5yZW1vdmVMaXN0ZW5lcih3aW5kb3csIFwicmVzaXplXCIsIGVudi5vblJlc2l6ZSk7XG4gICAgICAgIGVudi5lZGl0b3IuY29udGFpbmVyLmVudiA9IG51bGw7IC8vIHByZXZlbnQgbWVtb3J5IGxlYWsgb24gb2xkIGllXG4gICAgfSk7XG4gICAgZWRpdG9yLmNvbnRhaW5lci5lbnYgPSBlZGl0b3IuZW52ID0gZW52O1xuICAgIHJldHVybiBlZGl0b3I7XG59O1xuZXhwb3J0cy5jcmVhdGVFZGl0U2Vzc2lvbiA9IGZ1bmN0aW9uKHRleHQsIG1vZGUpIHtcbiAgICB2YXIgZG9jID0gbmV3IEVkaXRTZXNzaW9uKHRleHQsIG1vZGUpO1xuICAgIGRvYy5zZXRVbmRvTWFuYWdlcihuZXcgVW5kb01hbmFnZXIoKSk7XG4gICAgcmV0dXJuIGRvYztcbn07XG5leHBvcnRzLkVkaXRTZXNzaW9uID0gRWRpdFNlc3Npb247XG5leHBvcnRzLlVuZG9NYW5hZ2VyID0gVW5kb01hbmFnZXI7XG5leHBvcnRzLnZlcnNpb24gPSBcIjEuMi45XCI7XG59KTtcbiAgICAgICAgICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBhY2UuYWNlcXVpcmUoW1wiYWNlL2FjZVwiXSwgZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5jb25maWcuaW5pdCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuZGVmaW5lID0gYWNlLmRlZmluZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXdpbmRvdy5hY2UpXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWNlID0gYTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGEpIGlmIChhLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWNlW2tleV0gPSBhW2tleV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICBcbm1vZHVsZS5leHBvcnRzID0gd2luZG93LmFjZS5hY2VxdWlyZShcImFjZS9hY2VcIik7Il0sIm5hbWVzIjpbImdsb2JhbCIsInRoaXMiLCJ3aW5kb3ciLCJkZWZpbmUiLCJtb2R1bGUiLCJkZXBzIiwicGF5bG9hZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsIm1vZHVsZXMiLCJwYXlsb2FkcyIsIm9yaWdpbmFsIiwiYXBwbHkiLCJjb25zb2xlIiwiZXJyb3IiLCJ0cmFjZSIsIm5zIiwicm9vdCIsIl9hY2VxdWlyZSIsInBhcmVudElkIiwiY2FsbGJhY2siLCJsb29rdXAiLCJ1bmRlZmluZWQiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJwYXJhbXMiLCJpIiwibCIsImRlcCIsImFjZXF1aXJlIiwicHVzaCIsInBhY2thZ2VkTW9kdWxlIiwibm9ybWFsaXplTW9kdWxlIiwibW9kdWxlTmFtZSIsImluZGV4T2YiLCJjaHVua3MiLCJzcGxpdCIsImNoYXJBdCIsInNsaWNlIiwiam9pbiIsInByZXZpb3VzIiwicmVwbGFjZSIsImV4cG9ydHMiLCJtb2QiLCJpZCIsInVyaSIsInBhY2thZ2VkIiwiYWNlIiwieCIsInJlYWwiLCJleGVjIiwiUmVnRXhwIiwidGVzdCIsIm1hdGNoIiwiU3RyaW5nIiwiY29tcGxpYW50RXhlY05wY2ciLCJjb21wbGlhbnRMYXN0SW5kZXhJbmNyZW1lbnQiLCJsYXN0SW5kZXgiLCJzdHIiLCJuYW1lIiwicjIiLCJyZWdleCIsImFycmF5IiwiaXRlbSIsImZyb20iLCJBcnJheSIsInNvdXJjZSIsImlnbm9yZUNhc2UiLCJtdWx0aWxpbmUiLCJleHRlbmRlZCIsInN0aWNreSIsImluZGV4IiwiX3hyZWdleHAiLCJjYXB0dXJlTmFtZXMiLCJFbXB0eSIsIkZ1bmN0aW9uIiwiYmluZCIsInRoYXQiLCJ0YXJnZXQiLCJUeXBlRXJyb3IiLCJhcmdzIiwiYm91bmQiLCJyZXN1bHQiLCJjb25jYXQiLCJkZWZpbmVHZXR0ZXIiLCJkZWZpbmVTZXR0ZXIiLCJsb29rdXBHZXR0ZXIiLCJsb29rdXBTZXR0ZXIiLCJzdXBwb3J0c0FjY2Vzc29ycyIsInByb3RvdHlwZU9mQXJyYXkiLCJwcm90b3R5cGVPZk9iamVjdCIsIl90b1N0cmluZyIsIm93bnMiLCJoYXNPd25Qcm9wZXJ0eSIsIl9fZGVmaW5lR2V0dGVyX18iLCJfX2RlZmluZVNldHRlcl9fIiwiX19sb29rdXBHZXR0ZXJfXyIsIl9fbG9va3VwU2V0dGVyX18iLCJzcGxpY2UiLCJtYWtlQXJyYXkiLCJhIiwibGVuZ3RoQmVmb3JlIiwiYXJyYXlfc3BsaWNlIiwic3RhcnQiLCJkZWxldGVDb3VudCIsInBvcyIsInJlbW92ZUNvdW50IiwiTWF0aCIsIm1heCIsInJlbW92ZWQiLCJpbnNlcnQiLCJhZGQiLCJyZW1vdmUiLCJtaW4iLCJ0YWlsT2xkUG9zIiwidGFpbE5ld1BvcyIsInRhaWxDb3VudCIsImxlbmd0aEFmdGVyUmVtb3ZlIiwiaXNBcnJheSIsIm9iaiIsImNyZWF0ZUVtcHR5IiwiZnJlZXplT2JqZWN0IiwiYm94ZWRTdHJpbmciLCJzcGxpdFN0cmluZyIsImRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsiLCJvYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4Y2VwdGlvbiIsImZvckVhY2giLCJmdW4iLCJ0b09iamVjdCIsInNlbGYiLCJ0aGlzcCIsIm1hcCIsImZpbHRlciIsInZhbHVlIiwiZXZlcnkiLCJzb21lIiwicmVkdWNlIiwicmVkdWNlUmlnaHQiLCJzb3VnaHQiLCJ0b0ludGVnZXIiLCJsYXN0SW5kZXhPZiIsImFicyIsImdldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiY29uc3RydWN0b3IiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJwcm9wZXJ0eSIsImRlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwiZ2V0dGVyIiwic2V0dGVyIiwiZ2V0Iiwic2V0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImtleXMiLCJjcmVhdGUiLCJlbXB0eSIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiaXNQcm90b3R5cGVPZiIsInRvTG9jYWxlU3RyaW5nIiwidmFsdWVPZiIsInByb3BlcnRpZXMiLCJUeXBlIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5V29ya3NPbk9iamVjdCIsImRlZmluZVByb3BlcnR5V29ya3NPbkRvbSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImRlZmluZVByb3BlcnR5RmFsbGJhY2siLCJzZWFsIiwiZnJlZXplIiwicHJldmVudEV4dGVuc2lvbnMiLCJpc1NlYWxlZCIsImlzRnJvemVuIiwiaXNFeHRlbnNpYmxlIiwicmV0dXJuVmFsdWUiLCJoYXNEb250RW51bUJ1ZyIsImRvbnRFbnVtcyIsImRvbnRFbnVtc0xlbmd0aCIsImtleSIsImlpIiwiZG9udEVudW0iLCJEYXRlIiwibm93IiwiZ2V0VGltZSIsIndzIiwidHJpbSIsInRyaW1CZWdpblJlZ2V4cCIsInRyaW1FbmRSZWdleHAiLCJuIiwiZmxvb3IiLCJvIiwiZ2V0RG9jdW1lbnRIZWFkIiwiZG9jIiwiaGVhZCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZG9jdW1lbnRFbGVtZW50IiwidGFnIiwiY3JlYXRlRWxlbWVudE5TIiwiaGFzQ3NzQ2xhc3MiLCJlbCIsImNsYXNzTmFtZSIsImFkZENzc0NsYXNzIiwicmVtb3ZlQ3NzQ2xhc3MiLCJjbGFzc2VzIiwidG9nZ2xlQ3NzQ2xhc3MiLCJzZXRDc3NDbGFzcyIsIm5vZGUiLCJpbmNsdWRlIiwiaGFzQ3NzU3RyaW5nIiwic2hlZXRzIiwiY3JlYXRlU3R5bGVTaGVldCIsInN0eWxlU2hlZXRzIiwib3duaW5nRWxlbWVudCIsImltcG9ydENzc1N0cmluZyIsImNzc1RleHQiLCJzdHlsZSIsImFwcGVuZENoaWxkIiwiY3JlYXRlVGV4dE5vZGUiLCJpbXBvcnRDc3NTdHlsc2hlZXQiLCJsaW5rIiwicmVsIiwiaHJlZiIsImdldElubmVyV2lkdGgiLCJlbGVtZW50IiwicGFyc2VJbnQiLCJjb21wdXRlZFN0eWxlIiwiY2xpZW50V2lkdGgiLCJnZXRJbm5lckhlaWdodCIsImNsaWVudEhlaWdodCIsInNjcm9sbGJhcldpZHRoIiwiaW5uZXIiLCJ3aWR0aCIsIm1pbldpZHRoIiwiaGVpZ2h0IiwiZGlzcGxheSIsIm91dGVyIiwicG9zaXRpb24iLCJsZWZ0Iiwib3ZlcmZsb3ciLCJib2R5Iiwibm9TY3JvbGxiYXIiLCJvZmZzZXRXaWR0aCIsIndpdGhTY3JvbGxiYXIiLCJyZW1vdmVDaGlsZCIsInBhZ2VZT2Zmc2V0IiwiZ2V0UGFnZVNjcm9sbFRvcCIsImdldFBhZ2VTY3JvbGxMZWZ0IiwicGFnZVhPZmZzZXQiLCJzY3JvbGxUb3AiLCJzY3JvbGxMZWZ0IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImN1cnJlbnRTdHlsZSIsInNldElubmVySHRtbCIsImlubmVySHRtbCIsImNsb25lTm9kZSIsImlubmVySFRNTCIsInBhcmVudE5vZGUiLCJyZXBsYWNlQ2hpbGQiLCJzZXRJbm5lclRleHQiLCJpbm5lclRleHQiLCJ0ZXh0Q29udGVudCIsImdldElubmVyVGV4dCIsImdldFBhcmVudFdpbmRvdyIsImRlZmF1bHRWaWV3IiwicGFyZW50V2luZG93IiwiaW5oZXJpdHMiLCJjdG9yIiwic3VwZXJDdG9yIiwic3VwZXJfIiwid3JpdGFibGUiLCJtaXhpbiIsImltcGxlbWVudCIsInByb3RvIiwib29wIiwiS2V5cyIsInJldCIsIk1PRElGSUVSX0tFWVMiLCJLRVlfTU9EUyIsIkZVTkNUSU9OX0tFWVMiLCJQUklOVEFCTEVfS0VZUyIsInRvTG93ZXJDYXNlIiwiZW50ZXIiLCJlc2NhcGUiLCJlc2MiLCJkZWwiLCJtb2RzIiwicG93Iiwia2V5Q29kZVRvU3RyaW5nIiwia2V5Q29kZSIsImtleVN0cmluZyIsImZyb21DaGFyQ29kZSIsIk9TIiwiTElOVVgiLCJNQUMiLCJXSU5ET1dTIiwiZ2V0T1MiLCJpc01hYyIsImlzTGludXgiLCJuYXZpZ2F0b3IiLCJvcyIsInBsYXRmb3JtIiwidWEiLCJ1c2VyQWdlbnQiLCJpc1dpbiIsImlzSUUiLCJhcHBOYW1lIiwicGFyc2VGbG9hdCIsImlzT2xkSUUiLCJpc0dlY2tvIiwiaXNNb3ppbGxhIiwiQ29udHJvbGxlcnMiLCJjb250cm9sbGVycyIsInByb2R1Y3QiLCJpc09sZEdlY2tvIiwiaXNPcGVyYSIsIm9wZXJhIiwiaXNXZWJLaXQiLCJpc0Nocm9tZSIsImlzQUlSIiwiaXNJUGFkIiwiaXNDaHJvbWVPUyIsImlzSU9TIiwiTVNTdHJlYW0iLCJ1c2VyYWdlbnQiLCJwcmVzc2VkS2V5cyIsInRzIiwiYWRkTGlzdGVuZXIiLCJlbGVtIiwidHlwZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsIndyYXBwZXIiLCJldmVudCIsIl93cmFwcGVyIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZGV0YWNoRXZlbnQiLCJzdG9wRXZlbnQiLCJlIiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJjYW5jZWxCdWJibGUiLCJnZXRCdXR0b24iLCJjdHJsS2V5IiwiYWx0S2V5Iiwic2hpZnRLZXkiLCJidXR0b24iLCJjYXB0dXJlIiwiZXZlbnRIYW5kbGVyIiwicmVsZWFzZUNhcHR1cmVIYW5kbGVyIiwib25Nb3VzZVVwIiwiYWRkVG91Y2hNb3ZlTGlzdGVuZXIiLCJzdGFydHgiLCJzdGFydHkiLCJ0b3VjaE9iaiIsInRvdWNoZXMiLCJjbGllbnRYIiwiY2xpZW50WSIsIndoZWVsWCIsIndoZWVsWSIsImFkZE1vdXNlV2hlZWxMaXN0ZW5lciIsIndoZWVsRGVsdGFYIiwid2hlZWxEZWx0YVkiLCJ3aGVlbERlbHRhIiwiZGVsdGFNb2RlIiwiRE9NX0RFTFRBX1BJWEVMIiwiZGVsdGFYIiwiZGVsdGFZIiwiRE9NX0RFTFRBX0xJTkUiLCJET01fREVMVEFfUEFHRSIsImF4aXMiLCJIT1JJWk9OVEFMX0FYSVMiLCJkZXRhaWwiLCJhZGRNdWx0aU1vdXNlRG93bkxpc3RlbmVyIiwiZWxlbWVudHMiLCJ0aW1lb3V0cyIsImNhbGxiYWNrTmFtZSIsInN0YXJ0WCIsInN0YXJ0WSIsInRpbWVyIiwiY2xpY2tzIiwiZXZlbnROYW1lcyIsIm9uTW91c2Vkb3duIiwiaXNOZXdDbGljayIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJfY2xpY2tzIiwib25EYmxjbGljayIsImdldE1vZGlmaWVySGFzaCIsIm1ldGFLZXkiLCJub3JtYWxpemVDb21tYW5kS2V5cyIsImhhc2hJZCIsImdldE1vZGlmaWVyU3RhdGUiLCJhbHRHciIsImxvY2F0aW9uIiwia2V5TG9jYXRpb24iLCJ0aW1lU3RhbXAiLCJkZWZhdWx0UHJldmVudGVkIiwicmVzZXRQcmVzc2VkS2V5cyIsImdldE1vZGlmaWVyU3RyaW5nIiwiYWRkQ29tbWFuZEtleUxpc3RlbmVyIiwibGFzdEtleURvd25LZXlDb2RlIiwibGFzdERlZmF1bHRQcmV2ZW50ZWQiLCJwb3N0TWVzc2FnZSIsIm5leHRUaWNrIiwid2luIiwibWVzc2FnZU5hbWUiLCJsaXN0ZW5lciIsImRhdGEiLCJuZXh0RnJhbWUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJtb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJtc1JlcXVlc3RBbmltYXRpb25GcmFtZSIsIm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJsYXN0Iiwic3RyaW5nUmV2ZXJzZSIsInN0cmluZyIsInJldmVyc2UiLCJzdHJpbmdSZXBlYXQiLCJjb3VudCIsInN0cmluZ1RyaW1MZWZ0Iiwic3RyaW5nVHJpbVJpZ2h0IiwiY29weU9iamVjdCIsImNvcHkiLCJjb3B5QXJyYXkiLCJkZWVwQ29weSIsImFycmF5VG9NYXAiLCJhcnIiLCJjcmVhdGVNYXAiLCJwcm9wcyIsImFycmF5UmVtb3ZlIiwiZXNjYXBlUmVnRXhwIiwiZXNjYXBlSFRNTCIsImdldE1hdGNoT2Zmc2V0cyIsInJlZ0V4cCIsIm1hdGNoZXMiLCJvZmZzZXQiLCJkZWZlcnJlZENhbGwiLCJmY24iLCJkZWZlcnJlZCIsInRpbWVvdXQiLCJjYW5jZWwiLCJzY2hlZHVsZSIsImlzUGVuZGluZyIsImRlbGF5ZWRDYWxsIiwiZGVmYXVsdFRpbWVvdXQiLCJfc2VsZiIsImRlbGF5IiwiZG9tIiwibGFuZyIsIktFWVMiLCJNT0RTIiwiQlJPS0VOX1NFVERBVEEiLCJVU0VfSUVfTUlNRV9UWVBFIiwiVGV4dElucHV0IiwiaG9zdCIsInRleHQiLCJpc1RvdWNoUGFkIiwic2V0QXR0cmlidXRlIiwib3BhY2l0eSIsImluc2VydEJlZm9yZSIsImZpcnN0Q2hpbGQiLCJQTEFDRUhPTERFUiIsImNvcGllZCIsImN1dCIsInBhc3RlZCIsImluQ29tcG9zaXRpb24iLCJ0ZW1wU3R5bGUiLCJpc1NlbGVjdGlvbkVtcHR5IiwiaXNGb2N1c2VkIiwiYWN0aXZlRWxlbWVudCIsIm9uQmx1ciIsIm9uRm9jdXMiLCJyZXNldFNlbGVjdGlvbiIsImZvY3VzIiwiYmx1ciIsInN5bmNTZWxlY3Rpb24iLCJzeW5jVmFsdWUiLCJpc0VtcHR5IiwiaW5wdXRIYW5kbGVyIiwic2VsZWN0aW9uU3RhcnQiLCJzZWxlY3Rpb25FbmQiLCJzZXRTZWxlY3Rpb25SYW5nZSIsInJlc2V0VmFsdWUiLCJzZWxlY3Rpb24iLCJzZXRJbnB1dEhhbmRsZXIiLCJjYiIsImdldElucHV0SGFuZGxlciIsImFmdGVyQ29udGV4dE1lbnUiLCJzZW5kVGV4dCIsIm9uUGFzdGUiLCJzdWJzdHIiLCJleGVjQ29tbWFuZCIsInN1YnN0cmluZyIsIm9uVGV4dElucHV0Iiwib25JbnB1dCIsImhhbmRsZUNsaXBib2FyZERhdGEiLCJmb3JjZUlFTWltZSIsImNsaXBib2FyZERhdGEiLCJtaW1lIiwic2V0RGF0YSIsImdldERhdGEiLCJkb0NvcHkiLCJpc0N1dCIsImdldENvcHlUZXh0Iiwib25DdXQiLCJvbkNvcHkiLCJzZWxlY3QiLCJvbkNvbW1hbmRLZXkiLCJpc0FsbFNlbGVjdGVkIiwic2VsZWN0QWxsIiwiY2xvc2VUaW1lb3V0Iiwib25Db21wb3NpdGlvblVwZGF0ZSIsIiRyZWFkT25seSIsInZhbCIsImxhc3RWYWx1ZSIsInVuZG8iLCJjYW5VbmRvIiwiciIsImdldFJhbmdlIiwic2Vzc2lvbiIsIm1hcmtVbmRvR3JvdXAiLCJyYW5nZSIsInNldFJhbmdlIiwiY2xlYXJTZWxlY3Rpb24iLCJvbkNvbXBvc2l0aW9uRW5kIiwiYyIsInN5bmNDb21wb3NpdGlvbiIsIm9uQ29udGV4dE1lbnVDbG9zZSIsInJlbmRlcmVyIiwiJGtlZXBUZXh0QXJlYUF0Q3Vyc29yIiwiJG1vdmVUZXh0QXJlYVRvQ3Vyc29yIiwib25Db21wb3NpdGlvblN0YXJ0IiwiJHVuZG9NYW5hZ2VyIiwib24iLCJnZXRFbGVtZW50Iiwic2V0UmVhZE9ubHkiLCJyZWFkT25seSIsIm9uQ29udGV4dE1lbnUiLCJfZW1pdCIsImRvbUV2ZW50IiwibW92ZVRvTW91c2UiLCJicmluZ1RvRnJvbnQiLCJyZWN0IiwiY29udGFpbmVyIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwidG9wIiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJMZWZ0V2lkdGgiLCJtYXhUb3AiLCJib3R0b20iLCJtb3ZlIiwidGV4dElucHV0Iiwic2Nyb2xsZXIiLCJ0eXBpbmdSZXNldFRpbWVvdXQiLCJ0eXBpbmciLCJkZXRlY3RBcnJvd0tleXMiLCJ1cCIsImhvbWUiLCJvcHRpb24iLCJyaWdodCIsImVuZCIsImRvd24iLCJzaGlmdCIsIlRleHRJbnB1dElPUyIsIkRlZmF1bHRIYW5kbGVycyIsIm1vdXNlSGFuZGxlciIsIiRjbGlja1NlbGVjdGlvbiIsImVkaXRvciIsInNldERlZmF1bHRIYW5kbGVyIiwib25Nb3VzZURvd24iLCJvbkRvdWJsZUNsaWNrIiwib25UcmlwbGVDbGljayIsIm9uUXVhZENsaWNrIiwib25Nb3VzZVdoZWVsIiwib25Ub3VjaE1vdmUiLCJzZWxlY3RCeUxpbmVzIiwiZXh0ZW5kU2VsZWN0aW9uQnkiLCJzZWxlY3RCeVdvcmRzIiwiY2FsY1JhbmdlT3JpZW50YXRpb24iLCJjdXJzb3IiLCJyb3ciLCJjbXAiLCJjb2x1bW4iLCJhbmNob3IiLCJldiIsImluU2VsZWN0aW9uIiwiZ2V0RG9jdW1lbnRQb3NpdGlvbiIsIm1vdXNlZG93bkV2ZW50Iiwic2VsZWN0aW9uRW1wdHkiLCJnZXRTZWxlY3Rpb25SYW5nZSIsIiRibG9ja1Njcm9sbGluZyIsIm1vdmVUb1Bvc2l0aW9uIiwidGltZSIsIiRmb2N1c1RpbW91dCIsImluTXVsdGlTZWxlY3RNb2RlIiwiY2FwdHVyZU1vdXNlIiwic3RhcnRTZWxlY3QiLCJzZXRTdGF0ZSIsIndhaXRGb3JDbGlja1NlbGVjdGlvbiIsInNjcmVlblRvVGV4dENvb3JkaW5hdGVzIiwieSIsImdldFNoaWZ0S2V5Iiwic2VsZWN0VG9Qb3NpdGlvbiIsInNldENhcHR1cmUiLCJzZXRTdHlsZSIsImNvbXBhcmVQb2ludCIsIm9yaWVudGVkUmFuZ2UiLCJzZXRTZWxlY3Rpb25BbmNob3IiLCJzY3JvbGxDdXJzb3JJbnRvVmlldyIsInVuaXROYW1lIiwiY21wU3RhcnQiLCJjbXBFbmQiLCJzZWxlY3RFbmQiLCJzZWxlY3RBbGxFbmQiLCJzZWxlY3RCeVdvcmRzRW5kIiwic2VsZWN0QnlMaW5lc0VuZCIsInVuc2V0U3R5bGUiLCJyZWxlYXNlQ2FwdHVyZSIsImZvY3VzV2FpdCIsImF4IiwiYXkiLCJieCIsImJ5IiwiZGlzdGFuY2UiLCJzcXJ0IiwiZ2V0QnJhY2tldFJhbmdlIiwiZ2V0V29yZFJhbmdlIiwiaXNNdWx0aUxpbmUiLCJjb250YWlucyIsImdldExpbmVSYW5nZSIsImdldEFjY2VsS2V5IiwiJGxhc3RTY3JvbGwiLCJ0IiwidngiLCJ2eSIsImFsbG93ZWQiLCJwcmV2U2Nyb2xsIiwiZHQiLCJkaXJlY3Rpb24iLCJjYW5TY3JvbGwiLCJpc1Njcm9sbGFibGVCeSIsInNwZWVkIiwic2Nyb2xsQnkiLCJzdG9wIiwiVG9vbHRpcCIsImlzT3BlbiIsIiRlbGVtZW50IiwiJHBhcmVudE5vZGUiLCIkaW5pdCIsInNldFRleHQiLCJzZXRIdG1sIiwiaHRtbCIsInNldFBvc2l0aW9uIiwic2V0Q2xhc3NOYW1lIiwic2hvdyIsImhpZGUiLCJnZXRIZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJnZXRXaWR0aCIsImRlc3Ryb3kiLCJHdXR0ZXJUb29sdGlwIiwid2luZG93V2lkdGgiLCJpbm5lcldpZHRoIiwid2luZG93SGVpZ2h0IiwiaW5uZXJIZWlnaHQiLCJHdXR0ZXJIYW5kbGVyIiwidG9vbHRpcFRpbWVvdXQiLCJtb3VzZUV2ZW50IiwidG9vbHRpcEFubm90YXRpb24iLCJndXR0ZXIiLCIkZ3V0dGVyTGF5ZXIiLCJ0b29sdGlwIiwiaGlkZVRvb2x0aXAiLCJfc2lnbmFsIiwibW92ZVRvb2x0aXAiLCJnZXRSZWdpb24iLCJzZWxlY3RUbyIsInNyY0VsZW1lbnQiLCIkdG9vbHRpcEZvbGxvd3NNb3VzZSIsImlzTW91c2VQcmVzc2VkIiwiYW5ub3RhdGlvbiIsIiRhbm5vdGF0aW9ucyIsImdldExlbmd0aCIsInNjcmVlblJvdyIsInBpeGVsVG9TY3JlZW5Db29yZGluYXRlcyIsIiRwb3MiLCJkb2N1bWVudFRvU2NyZWVuUm93Iiwic2hvd1Rvb2x0aXAiLCIkZ3V0dGVyIiwiTW91c2VFdmVudCIsIiRpblNlbGVjdGlvbiIsInByb3BhZ2F0aW9uU3RvcHBlZCIsInNlbGVjdGlvblJhbmdlIiwiRHJhZ2Ryb3BIYW5kbGVyIiwiYmxhbmtJbWFnZSIsInNyYyIsImRyYWdTZWxlY3Rpb25NYXJrZXIiLCJ0aW1lcklkIiwiZHJhZ0N1cnNvciIsImRyYWdPcGVyYXRpb24iLCJpc0ludGVybmFsIiwiYXV0b1Njcm9sbFN0YXJ0VGltZSIsImN1cnNvck1vdmVkVGltZSIsImN1cnNvclBvaW50T25DYXJldE1vdmVkIiwibW91c2VUYXJnZXQiLCJjb3VudGVyIiwib25EcmFnSW50ZXJ2YWwiLCJwcmV2Q3Vyc29yIiwidk1vdmVtZW50IiwiaE1vdmVtZW50IiwibW92ZUN1cnNvclRvUG9zaXRpb24iLCJjYWxjRGlzdGFuY2UiLCJsaW5lSGVpZ2h0IiwibGF5ZXJDb25maWciLCJjaGFyYWN0ZXJXaWR0aCIsImVkaXRvclJlY3QiLCJvZmZzZXRzIiwibmVhcmVzdFhPZmZzZXQiLCJuZWFyZXN0WU9mZnNldCIsInNjcm9sbEN1cnNvciIsInZTY3JvbGwiLCJoU2Nyb2xsIiwiYXV0b1Njcm9sbCIsImFkZERyYWdNYXJrZXIiLCJ0b09yaWVudGVkUmFuZ2UiLCJhZGRNYXJrZXIiLCJnZXRTZWxlY3Rpb25TdHlsZSIsIiRjdXJzb3JMYXllciIsInNldEJsaW5raW5nIiwiY2xlYXJJbnRlcnZhbCIsInNldEludGVydmFsIiwib25Nb3VzZU1vdmUiLCJjbGVhckRyYWdNYXJrZXIiLCJyZW1vdmVNYXJrZXIiLCJmcm9tT3JpZW50ZWRSYW5nZSIsImdldFJlYWRPbmx5Iiwib25EcmFnU3RhcnQiLCJjYW5jZWxEcmFnIiwiZHJhZ2dhYmxlIiwiZGF0YVRyYW5zZmVyIiwiZWZmZWN0QWxsb3dlZCIsInNldERyYWdJbWFnZSIsImNsZWFyRGF0YSIsImdldFRleHRSYW5nZSIsIm9uRHJhZ0VuZCIsImRyb3BFZmZlY3QiLCJzZXRDdXJzb3JTdHlsZSIsIm9uRHJhZ0VudGVyIiwiY2FuQWNjZXB0IiwiZ2V0RHJvcEVmZmVjdCIsIm9uRHJhZ092ZXIiLCJvbk1vdXNlTW92ZVRpbWVyIiwib25EcmFnTGVhdmUiLCJvbkRyb3AiLCJtb3ZlVGV4dCIsImRyb3BEYXRhIiwidHlwZXMiLCJjb3B5QWxsb3dlZCIsImNvcHlNb2RpZmllclN0YXRlIiwiZHJhZ1dhaXQiLCJnZXREcmFnRGVsYXkiLCJzdGFydERyYWciLCJkcmFnV2FpdEVuZCIsImRyYWdSZWFkeUVuZCIsImN1cnNvclN0eWxlIiwib25Nb3VzZURyYWciLCJzdGF0ZSIsImRyYWdEcm9wIiwiJGRyYWdFbmFibGVkIiwiZXZlbnRUYXJnZXQiLCJ1bnNlbGVjdGFibGUiLCJ1cmwiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVzcG9uc2VUZXh0Iiwic2VuZCIsImxvYWRTY3JpcHQiLCJwYXRoIiwicyIsIm9ubG9hZCIsIl8iLCJpc0Fib3J0IiwicXVhbGlmeVVSTCIsIkV2ZW50RW1pdHRlciIsIl9kaXNwYXRjaEV2ZW50IiwiZXZlbnROYW1lIiwiX2V2ZW50UmVnaXN0cnkiLCJfZGVmYXVsdEhhbmRsZXJzIiwibGlzdGVuZXJzIiwiZGVmYXVsdEhhbmRsZXIiLCJvbmNlIiwibmV3Q2FsbGJhY2siLCJoYW5kbGVycyIsIl9kaXNhYmxlZF8iLCJvbGQiLCJkaXNhYmxlZCIsInJlbW92ZURlZmF1bHRIYW5kbGVyIiwicG9wIiwiY2FwdHVyaW5nIiwib2ZmIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwib3B0aW9uc1Byb3ZpZGVyIiwic2V0T3B0aW9ucyIsIm9wdExpc3QiLCJzZXRPcHRpb24iLCJnZXRPcHRpb25zIiwib3B0aW9uTmFtZXMiLCIkb3B0aW9ucyIsImdldE9wdGlvbiIsIm9wdCIsIndhcm4iLCJmb3J3YXJkVG8iLCJoYW5kbGVzU2V0IiwibWVzc2FnZSIsInJlcG9ydEVycm9yIiwibXNnIiwiRXJyb3IiLCJBcHBDb25maWciLCIkZGVmYXVsdE9wdGlvbnMiLCJkZWZpbmVPcHRpb25zIiwib3B0aW9ucyIsImluaXRpYWxWYWx1ZSIsInJlc2V0T3B0aW9ucyIsInNldERlZmF1bHRWYWx1ZSIsIm9wdHMiLCJzZXREZWZhdWx0VmFsdWVzIiwib3B0aW9uSGFzaCIsIm5ldCIsIndvcmtlclBhdGgiLCJtb2RlUGF0aCIsInRoZW1lUGF0aCIsImJhc2VQYXRoIiwic3VmZml4IiwiJG1vZHVsZVVybHMiLCJpbml0Iiwic2NyaXB0T3B0aW9ucyIsInNjcmlwdFVybCIsImN1cnJlbnRTY3JpcHQiLCJfY3VycmVudFNjcmlwdCIsInNjcmlwdHMiLCJvd25lckRvY3VtZW50Iiwic2NyaXB0IiwiZ2V0QXR0cmlidXRlIiwiYXR0cmlidXRlcyIsImoiLCJhdHRyIiwibSIsIm0xIiwidG9VcHBlckNhc2UiLCJiYXNlIiwiYWxsIiwibW9kdWxlVXJsIiwiY29tcG9uZW50IiwicGFydHMiLCJzZXAiLCJyZSIsInNldE1vZHVsZVVybCIsInN1YnN0IiwiJGxvYWRpbmciLCJsb2FkTW9kdWxlIiwib25Mb2FkIiwibW9kdWxlVHlwZSIsImFmdGVyTG9hZCIsIkRlZmF1bHRHdXR0ZXJIYW5kbGVyIiwiY29uZmlnIiwiTW91c2VIYW5kbGVyIiwiZm9jdXNFZGl0b3IiLCJoYXNGb2N1cyIsImdldE1vdXNlRXZlbnRUYXJnZXQiLCJvbk1vdXNlRXZlbnQiLCJzY3JvbGxCYXJWIiwic2Nyb2xsQmFySCIsIkJvb2xlYW4iLCJndXR0ZXJFbCIsIiRkcmFnRGVsYXkiLCJjaGFyYWN0ZXIiLCJpbnNpZGVTdGFydCIsIm1vdXNlbW92ZSIsIiRzY3JvbGxTcGVlZCIsIm1vdXNlTW92ZUhhbmRsZXIiLCJ3aGljaCIsInJlbGVhc2VNb3VzZSIsIiRtb3VzZU1vdmVkIiwib25DYXB0dXJlRW5kIiwib25DYXB0dXJlSW50ZXJ2YWwiLCIkb25DYXB0dXJlTW91c2VNb3ZlIiwiY2FuY2VsQ29udGV4dE1lbnUiLCJzY3JvbGxTcGVlZCIsImRyYWdEZWxheSIsImRyYWdFbmFibGVkIiwiZm9jdXNUaW1vdXQiLCJ0b29sdGlwRm9sbG93c01vdXNlIiwiRm9sZEhhbmRsZXIiLCJmb2xkIiwiZ2V0Rm9sZEF0IiwicmVtb3ZlRm9sZCIsImV4cGFuZEZvbGQiLCJmb2xkV2lkZ2V0cyIsIm9uRm9sZFdpZGdldENsaWNrIiwiZ2V0UGFyZW50Rm9sZFJhbmdlRGF0YSIsImZpcnN0UmFuZ2UiLCJnZXRMaW5lIiwiYWRkRm9sZCIsImtleVV0aWwiLCJLZXlCaW5kaW5nIiwiJGVkaXRvciIsIiRkYXRhIiwiJGhhbmRsZXJzIiwiY29tbWFuZHMiLCJrYiIsInJlbW92ZUtleWJvYXJkSGFuZGxlciIsIiRkZWZhdWx0SGFuZGxlciIsImFkZEtleWJvYXJkSGFuZGxlciIsInNldEtleWJvYXJkSGFuZGxlciIsImgiLCJoYW5kbGVLZXlib2FyZCIsImF0dGFjaCIsImRldGFjaCIsImdldEtleWJvYXJkSGFuZGxlciIsImdldFN0YXR1c1RleHQiLCIkY2FsbEtleWJvYXJkSGFuZGxlcnMiLCJ0b0V4ZWN1dGUiLCJzdWNjZXNzIiwiY29tbWFuZCIsInBhc3NFdmVudCIsImRpciIsImhpTGV2ZWwiLCJsYXN0QXJhYmljIiwiaGFzVUJBVF9CIiwiaGFzVUJBVF9TIiwiaW1wVGFiX0xUUiIsImltcFRhYl9SVEwiLCJFVCIsIkJOIiwiVW5pY29kZVRCTDAwIiwiVW5pY29kZVRCTDIwIiwiX2ludmVydExldmVsIiwibGV2IiwibGV2ZWxzIiwiX2FycmF5IiwibG8iLCJoaSIsInRtcCIsImxlbiIsIl9nZXRDaGFyQ2xhc3MiLCJjaGFycyIsIml4Iiwid1R5cGUiLCJuVHlwZSIsImNUeXBlIiwicnRsQ2FuZGlkYXRlIiwiX2dldENoYXJhY3RlclR5cGUiLCJjaCIsInVjIiwiY2hhckNvZGVBdCIsIkwiLCJSIiwiRU4iLCJPTl9SIiwiQU4iLCJSX0giLCJCIiwiRE9UIiwiZG9CaWRpUmVvcmRlciIsInRleHRDaGFyVHlwZXMiLCJpc1J0bCIsImxvZ2ljYWxGcm9tVmlzdWFsIiwiYmlkaUxldmVscyIsImNoYXJUeXBlcyIsImltcFRhYiIsInByZXZTdGF0ZSIsIm5ld0NsYXNzIiwibmV3TGV2ZWwiLCJuZXdTdGF0ZSIsImFjdGlvbiIsImNvbmRQb3MiLCJfY29tcHV0ZUxldmVscyIsImhhc0JpZGlDaGFyYWN0ZXJzIiwiZ2V0VmlzdWFsRnJvbUxvZ2ljYWxJZHgiLCJsb2dJZHgiLCJyb3dNYXAiLCJiaWRpVXRpbCIsImJpZGlSRSIsIkJpZGlIYW5kbGVyIiwiYmlkaU1hcCIsImN1cnJlbnRSb3ciLCJjaGFyV2lkdGhzIiwiRU9MIiwic2hvd0ludmlzaWJsZXMiLCJpc1J0bERpciIsImxpbmUiLCJ3cmFwSW5kZW50IiwiaXNMYXN0Um93IiwiRU9GIiwic2VlbkJpZGkiLCJpc0JpZGlSb3ciLCJkb2NSb3ciLCJzcGxpdEluZGV4IiwidXBkYXRlUm93TGluZSIsInVwZGF0ZUJpZGlNYXAiLCJvbkNoYW5nZSIsImRlbHRhIiwibGluZXMiLCJnZXREb2N1bWVudFJvdyIsInJvd0NhY2hlIiwiJHNjcmVlblJvd0NhY2hlIiwiJGdldFJvd0NhY2hlSW5kZXgiLCIkZG9jUm93Q2FjaGUiLCJnZXRTcGxpdEluZGV4IiwiY3VycmVudEluZGV4IiwicHJldkluZGV4IiwiJHVzZVdyYXBNb2RlIiwic3BsaXRzIiwiJHdyYXBEYXRhIiwiaW5kZW50Iiwic2l6ZSIsImlzRnVsbFdpZHRoIiwiZ2V0U2NyZWVuVGFiU2l6ZSIsImVuZE9mTGluZSIsIm1hcmtBc0RpcnR5IiwidXBkYXRlQ2hhcmFjdGVyV2lkdGhzIiwiZm9udE1ldHJpY3MiLCIkY2hhcmFjdGVyU2l6ZSIsImJpZGlDaGFyV2lkdGgiLCIkbWVhc3VyZUNoYXJXaWR0aCIsImdldFNob3dJbnZpc2libGVzIiwic2V0U2hvd0ludmlzaWJsZXMiLCJzZXRFb2xDaGFyIiwiZW9sQ2hhciIsInNldFRleHREaXIiLCJnZXRQb3NMZWZ0IiwiY29sIiwidmlzdWFsSWR4IiwiZ2V0U2VsZWN0aW9ucyIsInN0YXJ0Q29sIiwiZW5kQ29sIiwibGV2ZWwiLCJzZWxlY3Rpb25zIiwic2VsQ29sTWluIiwic2VsQ29sTWF4IiwiaXNTZWxlY3RlZCIsImlzU2VsZWN0ZWRQcmV2IiwidmlzSWR4Iiwib2Zmc2V0VG9Db2wiLCJwb3NYIiwibG9naWNhbElkeCIsImNoYXJXaWR0aCIsIlJhbmdlIiwic3RhcnRSb3ciLCJzdGFydENvbHVtbiIsImVuZFJvdyIsImVuZENvbHVtbiIsImlzRXF1YWwiLCJjb21wYXJlIiwiY29tcGFyZVJhbmdlIiwicCIsImNvbnRhaW5zUmFuZ2UiLCJpbnRlcnNlY3RzIiwiaXNFbmQiLCJpc1N0YXJ0Iiwic2V0U3RhcnQiLCJzZXRFbmQiLCJpbnNpZGUiLCJpbnNpZGVFbmQiLCJjb21wYXJlU3RhcnQiLCJjb21wYXJlRW5kIiwiY29tcGFyZUluc2lkZSIsImNsaXBSb3dzIiwiZmlyc3RSb3ciLCJsYXN0Um93IiwiZnJvbVBvaW50cyIsImV4dGVuZCIsImNsb25lIiwiY29sbGFwc2VSb3dzIiwidG9TY3JlZW5SYW5nZSIsInNjcmVlblBvc1N0YXJ0IiwiZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uIiwic2NyZWVuUG9zRW5kIiwibW92ZUJ5IiwiY29tcGFyZVBvaW50cyIsInAxIiwicDIiLCJTZWxlY3Rpb24iLCJnZXREb2N1bWVudCIsImxlYWQiLCJzZWxlY3Rpb25MZWFkIiwiY3JlYXRlQW5jaG9yIiwic2VsZWN0aW9uQW5jaG9yIiwiJGlzRW1wdHkiLCIka2VlcERlc2lyZWRDb2x1bW5PbkNoYW5nZSIsIiRkZXNpcmVkQ29sdW1uIiwiZ2V0Q3Vyc29yIiwiZ2V0UG9zaXRpb24iLCJnZXRTZWxlY3Rpb25BbmNob3IiLCJnZXRTZWxlY3Rpb25MZWFkIiwic2hpZnRTZWxlY3Rpb24iLCJjb2x1bW5zIiwibW92ZUN1cnNvclRvIiwiaXNCYWNrd2FyZHMiLCIkbW92ZVNlbGVjdGlvbiIsIm1vdmVyIiwibW92ZVRvIiwic2VsZWN0VXAiLCJtb3ZlQ3Vyc29yVXAiLCJzZWxlY3REb3duIiwibW92ZUN1cnNvckRvd24iLCJzZWxlY3RSaWdodCIsIm1vdmVDdXJzb3JSaWdodCIsInNlbGVjdExlZnQiLCJtb3ZlQ3Vyc29yTGVmdCIsInNlbGVjdExpbmVTdGFydCIsIm1vdmVDdXJzb3JMaW5lU3RhcnQiLCJzZWxlY3RMaW5lRW5kIiwibW92ZUN1cnNvckxpbmVFbmQiLCJzZWxlY3RGaWxlRW5kIiwibW92ZUN1cnNvckZpbGVFbmQiLCJzZWxlY3RGaWxlU3RhcnQiLCJtb3ZlQ3Vyc29yRmlsZVN0YXJ0Iiwic2VsZWN0V29yZFJpZ2h0IiwibW92ZUN1cnNvcldvcmRSaWdodCIsInNlbGVjdFdvcmRMZWZ0IiwibW92ZUN1cnNvcldvcmRMZWZ0Iiwic2VsZWN0V29yZCIsInNlbGVjdEFXb3JkIiwiZ2V0QVdvcmRSYW5nZSIsImV4Y2x1ZGVMYXN0Q2hhciIsInJvd0VuZCIsInJvd1N0YXJ0IiwiZm9sZExpbmUiLCJnZXRGb2xkTGluZSIsInNlbGVjdExpbmUiLCJtb3ZlQ3Vyc29yQnkiLCJ3b3VsZE1vdmVJbnRvU29mdFRhYiIsInRhYlNpemUiLCJpc1RhYlN0b3AiLCJnZXRUYWJTaXplIiwiZ2V0TmF2aWdhdGVXaXRoaW5Tb2Z0VGFicyIsImZpcnN0Q29sdW1uUG9zaXRpb24iLCJzY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24iLCJsZWFkaW5nU3BhY2UiLCJnZXREaXNwbGF5TGluZSIsIiR1c2VFbWFjc1N0eWxlTGluZVN0YXJ0IiwibGluZUVuZCIsImdldERvY3VtZW50TGFzdFJvd0NvbHVtblBvc2l0aW9uIiwidGV4dEVuZCIsInNlYXJjaCIsIm1vdmVDdXJzb3JMb25nV29yZFJpZ2h0IiwicmlnaHRPZkN1cnNvciIsIm5vblRva2VuUmUiLCJ0b2tlblJlIiwibW92ZUN1cnNvckxvbmdXb3JkTGVmdCIsImdldEZvbGRTdHJpbmdBdCIsImxlZnRPZkN1cnNvciIsIiRzaG9ydFdvcmRFbmRJbmRleCIsIndoaXRlc3BhY2VSZSIsIm1vdmVDdXJzb3JTaG9ydFdvcmRSaWdodCIsIm1vdmVDdXJzb3JTaG9ydFdvcmRMZWZ0IiwiJHNlbGVjdExvbmdXb3JkcyIsInJvd3MiLCJvZmZzZXRYIiwic2NyZWVuUG9zIiwiJGJpZGlIYW5kbGVyIiwicm91bmQiLCJkb2NQb3MiLCJsaW5lV2lkZ2V0cyIsImtlZXBEZXNpcmVkQ29sdW1uIiwibW92ZUN1cnNvclRvU2NyZWVuIiwiZGVzaXJlZENvbHVtbiIsImdldFJhbmdlT2ZNb3ZlbWVudHMiLCJmdW5jIiwidG9KU09OIiwicmFuZ2VDb3VudCIsInJhbmdlcyIsInIxIiwiZnJvbUpTT04iLCJyYW5nZUxpc3QiLCJ0b1NpbmdsZVJhbmdlIiwiYWRkUmFuZ2UiLCJNQVhfVE9LRU5fQ09VTlQiLCJUb2tlbml6ZXIiLCJydWxlcyIsInN0YXRlcyIsInJlZ0V4cHMiLCJtYXRjaE1hcHBpbmdzIiwicnVsZVJlZ0V4cHMiLCJtYXRjaFRvdGFsIiwibWFwcGluZyIsImRlZmF1bHRUb2tlbiIsImZsYWciLCJzcGxpdHRlclJ1cmxlcyIsInJ1bGUiLCJjYXNlSW5zZW5zaXRpdmUiLCJhZGp1c3RlZHJlZ2V4IiwibWF0Y2hjb3VudCIsInRva2VuIiwiZ3JvdXBDb3VudCIsInRva2VuQXJyYXkiLCJvbk1hdGNoIiwiJGFycmF5VG9rZW5zIiwiJGFwcGx5VG9rZW4iLCJkaWdpdCIsInJlbW92ZUNhcHR1cmluZ0dyb3VwcyIsInNwbGl0UmVnZXgiLCJjcmVhdGVTcGxpdHRlclJlZ2V4cCIsIiRzZXRNYXhUb2tlbkNvdW50IiwidmFsdWVzIiwidG9rZW5zIiwic3RhY2siLCJpbkNoQ2xhc3MiLCJsYXN0Q2FwdHVyZSIsInBhcmVuT3BlbiIsInBhcmVuQ2xvc2UiLCJzcXVhcmUiLCJnZXRMaW5lVG9rZW5zIiwic3RhcnRTdGF0ZSIsImN1cnJlbnRTdGF0ZSIsIm1hdGNoQXR0ZW1wdHMiLCJza2lwcGVkIiwibmV4dCIsImNvbnN1bWVMaW5lRW5kIiwibWVyZ2UiLCJ1bnNoaWZ0IiwiVGV4dEhpZ2hsaWdodFJ1bGVzIiwiJHJ1bGVzIiwiYWRkUnVsZXMiLCJwcmVmaXgiLCJuZXh0U3RhdGUiLCJnZXRSdWxlcyIsImVtYmVkUnVsZXMiLCJIaWdobGlnaHRSdWxlcyIsImVzY2FwZVJ1bGVzIiwiYXBwZW5kIiwiJGVtYmVkcyIsImdldEVtYmVkcyIsInB1c2hTdGF0ZSIsInBvcFN0YXRlIiwibm9ybWFsaXplUnVsZXMiLCJwcm9jZXNzU3RhdGUiLCJwcm9jZXNzZWQiLCJ0b0luc2VydCIsInN0YXRlTmFtZSIsImluY2x1ZGVOYW1lIiwibm9Fc2NhcGUiLCJrZXl3b3JkTWFwIiwiY3JlYXRlS2V5d29yZE1hcHBlciIsInNwbGl0Q2hhciIsImtleXdvcmRzIiwibGlzdCIsIiRrZXl3b3JkTGlzdCIsImdldEtleXdvcmRzIiwiJGtleXdvcmRzIiwiQmVoYXZpb3VyIiwiJGJlaGF2aW91cnMiLCJhZGRCZWhhdmlvdXJzIiwiYmVoYXZpb3VycyIsImluaGVyaXQiLCJtb2RlIiwiZ2V0QmVoYXZpb3VycyIsIlRva2VuSXRlcmF0b3IiLCJpbml0aWFsUm93IiwiaW5pdGlhbENvbHVtbiIsIiRzZXNzaW9uIiwiJHJvdyIsIiRyb3dUb2tlbnMiLCJnZXRUb2tlbnMiLCJnZXRUb2tlbkF0IiwiJHRva2VuSW5kZXgiLCJzdGVwQmFja3dhcmQiLCJzdGVwRm9yd2FyZCIsInJvd0NvdW50IiwiZ2V0Q3VycmVudFRva2VuIiwiZ2V0Q3VycmVudFRva2VuUm93IiwiZ2V0Q3VycmVudFRva2VuQ29sdW1uIiwicm93VG9rZW5zIiwidG9rZW5JbmRleCIsImdldEN1cnJlbnRUb2tlblBvc2l0aW9uIiwiZ2V0Q3VycmVudFRva2VuUmFuZ2UiLCJjb250ZXh0IiwiU0FGRV9JTlNFUlRfSU5fVE9LRU5TIiwiU0FGRV9JTlNFUlRfQkVGT1JFX1RPS0VOUyIsImNvbnRleHRDYWNoZSIsImRlZmF1bHRRdW90ZXMiLCJpbml0Q29udGV4dCIsIm11bHRpU2VsZWN0IiwiYXV0b0luc2VydGVkQnJhY2tldHMiLCJhdXRvSW5zZXJ0ZWRSb3ciLCJhdXRvSW5zZXJ0ZWRMaW5lRW5kIiwibWF5YmVJbnNlcnRlZEJyYWNrZXRzIiwibWF5YmVJbnNlcnRlZFJvdyIsIm1heWJlSW5zZXJ0ZWRMaW5lU3RhcnQiLCJtYXliZUluc2VydGVkTGluZUVuZCIsImdldFdyYXBwZWQiLCJzZWxlY3RlZCIsIm9wZW5pbmciLCJjbG9zaW5nIiwicm93RGlmZiIsIkNzdHlsZUJlaGF2aW91ciIsImdldEN1cnNvclBvc2l0aW9uIiwiZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkIiwiaXNTYW5lSW5zZXJ0aW9uIiwiYnJhY2VzIiwicmVjb3JkQXV0b0luc2VydCIsInJlY29yZE1heWJlSW5zZXJ0IiwiJGZpbmRPcGVuaW5nQnJhY2tldCIsImlzQXV0b0luc2VydGVkQ2xvc2luZyIsInBvcEF1dG9JbnNlcnRlZENsb3NpbmciLCJpc01heWJlSW5zZXJ0ZWRDbG9zaW5nIiwiY2xlYXJNYXliZUluc2VydGVkQ2xvc2luZyIsIm9wZW5CcmFjZVBvcyIsImZpbmRNYXRjaGluZ0JyYWNrZXQiLCJuZXh0X2luZGVudCIsIiRnZXRJbmRlbnQiLCJnZXRUYWJTdHJpbmciLCJxdW90ZXMiLCIkbW9kZSIsIiRxdW90ZXMiLCJsaW5lQ29tbWVudFN0YXJ0IiwicXVvdGUiLCJsZWZ0Q2hhciIsInJpZ2h0Q2hhciIsInJpZ2h0VG9rZW4iLCJwYWlyIiwic3RyaW5nQmVmb3JlIiwic3RyaW5nQWZ0ZXIiLCJ3b3JkUmUiLCJpc1dvcmRCZWZvcmUiLCJpc1dvcmRBZnRlciIsIml0ZXJhdG9yIiwiJG1hdGNoVG9rZW5UeXBlIiwiaXRlcmF0b3IyIiwiYnJhY2tldCIsInBhY2thZ2VzIiwicGFjayIsImNvZGVQb2ludCIsImFkZFVuaWNvZGVQYWNrYWdlIiwiTGwiLCJMdSIsIkx0IiwiTG0iLCJMbyIsIk0iLCJNbiIsIk1jIiwiTWUiLCJOIiwiTmQiLCJObCIsIk5vIiwiUCIsIlBkIiwiUHMiLCJQZSIsIlBpIiwiUGYiLCJQYyIsIlBvIiwiUyIsIlNtIiwiU2MiLCJTayIsIlNvIiwiWiIsIlpzIiwiWmwiLCJacCIsIkMiLCJDYyIsIkNmIiwiQ28iLCJDcyIsIkNuIiwidW5pY29kZSIsIk1vZGUiLCIkZGVmYXVsdEJlaGF2aW91ciIsImdldFRva2VuaXplciIsIiR0b2tlbml6ZXIiLCIkaGlnaGxpZ2h0UnVsZXMiLCIkaGlnaGxpZ2h0UnVsZUNvbmZpZyIsImJsb2NrQ29tbWVudCIsInRvZ2dsZUNvbW1lbnRMaW5lcyIsImlnbm9yZUJsYW5rTGluZXMiLCJzaG91bGRSZW1vdmUiLCJtaW5JbmRlbnQiLCJJbmZpbml0eSIsImluc2VydEF0VGFiU3RvcCIsInJlZ2V4cFN0YXJ0IiwiZ2V0VXNlU29mdFRhYnMiLCJ1bmNvbW1lbnQiLCJzaG91bGRJbnNlcnRTcGFjZSIsInJlbW92ZUluTGluZSIsImNvbW1lbnRXaXRoU3BhY2UiLCJjb21tZW50IiwiaW5zZXJ0SW5MaW5lIiwidGVzdFJlbW92ZSIsImJlZm9yZSIsImFmdGVyIiwic3BhY2VzIiwibGluZUNvbW1lbnRFbmQiLCJyZWdleHBFbmQiLCJpdGVyIiwibWluRW1wdHlMZW5ndGgiLCJ0b2dnbGVCbG9ja0NvbW1lbnQiLCJjb2xEaWZmIiwiaW5pdGlhbFJhbmdlIiwic3RhcnRSYW5nZSIsImVuZFJhbmdlIiwiZ2V0TmV4dExpbmVJbmRlbnQiLCJ0YWIiLCJjaGVja091dGRlbnQiLCJpbnB1dCIsImF1dG9PdXRkZW50IiwiY3JlYXRlV29ya2VyIiwiY3JlYXRlTW9kZURlbGVnYXRlcyIsIiRtb2RlcyIsImRlbGVnYXRpb25zIiwic2NvcGUiLCJmdW5jdGlvbk5hbWUiLCIkZGVsZWdhdG9yIiwibWV0aG9kIiwidHJhbnNmb3JtQWN0aW9uIiwicGFyYW0iLCIkYmVoYXZpb3VyIiwiY29tcGxldGlvbktleXdvcmRzIiwicnVsZUl0ciIsImFMZW5ndGgiLCIkY3JlYXRlS2V5d29yZExpc3QiLCJnZXRDb21wbGV0aW9ucyIsIndvcmQiLCJzY29yZSIsIm1ldGEiLCIkaWQiLCJhcHBseURlbHRhIiwiZG9jTGluZXMiLCJkb05vdFZhbGlkYXRlIiwiQW5jaG9yIiwiJG9uQ2hhbmdlIiwiJHBvaW50c0luT3JkZXIiLCJwb2ludDEiLCJwb2ludDIiLCJlcXVhbFBvaW50c0luT3JkZXIiLCJiQ29sSXNBZnRlciIsIiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50IiwiJGluc2VydFJpZ2h0IiwicG9pbnQiLCJtb3ZlSWZFcXVhbCIsImRlbHRhSXNJbnNlcnQiLCJkZWx0YVJvd1NoaWZ0IiwiZGVsdGFDb2xTaGlmdCIsImRlbHRhU3RhcnQiLCJkZWx0YUVuZCIsIiRnZXRUcmFuc2Zvcm1lZFBvaW50Iiwibm9DbGlwIiwiRG9jdW1lbnQiLCJ0ZXh0T3JMaW5lcyIsIiRsaW5lcyIsImluc2VydE1lcmdlZExpbmVzIiwic2V0VmFsdWUiLCJnZXRWYWx1ZSIsImdldEFsbExpbmVzIiwiZ2V0TmV3TGluZUNoYXJhY3RlciIsIiRzcGxpdCIsIiRkZXRlY3ROZXdMaW5lIiwiJGF1dG9OZXdMaW5lIiwiJG5ld0xpbmVNb2RlIiwic2V0TmV3TGluZU1vZGUiLCJuZXdMaW5lTW9kZSIsImdldE5ld0xpbmVNb2RlIiwiaXNOZXdMaW5lIiwiZ2V0TGluZXMiLCJnZXRMaW5lc0ZvclJhbmdlIiwiaW5zZXJ0TGluZXMiLCJpbnNlcnRGdWxsTGluZXMiLCJyZW1vdmVMaW5lcyIsInJlbW92ZUZ1bGxMaW5lcyIsImluc2VydE5ld0xpbmUiLCJjbGlwcGVkUG9zIiwiY2xvbmVQb3MiLCIkY2xpcFBvc2l0aW9uIiwiZGVsZXRlRmlyc3ROZXdMaW5lIiwiZGVsZXRlTGFzdE5ld0xpbmUiLCJkZWxldGVkTGluZXMiLCJyZW1vdmVOZXdMaW5lIiwiYXBwbHlEZWx0YXMiLCJkZWx0YXMiLCJyZXZlcnREZWx0YXMiLCJyZXZlcnREZWx0YSIsImlzSW5zZXJ0IiwiJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhIiwiTUFYIiwidG8iLCJjaHVuayIsImluZGV4VG9Qb3NpdGlvbiIsIm5ld2xpbmVMZW5ndGgiLCJwb3NpdGlvblRvSW5kZXgiLCJCYWNrZ3JvdW5kVG9rZW5pemVyIiwidG9rZW5pemVyIiwicnVubmluZyIsImN1cnJlbnRMaW5lIiwiJHdvcmtlciIsIndvcmtlclN0YXJ0IiwiZW5kTGluZSIsInN0YXJ0TGluZSIsInByb2Nlc3NlZExpbmVzIiwiJHRva2VuaXplUm93IiwiZmlyZVVwZGF0ZUV2ZW50Iiwic2V0VG9rZW5pemVyIiwic2V0RG9jdW1lbnQiLCJmaXJzdCIsInNjaGVkdWxlU3RhcnQiLCIkdXBkYXRlT25DaGFuZ2UiLCJnZXRTdGF0ZSIsIlNlYXJjaEhpZ2hsaWdodCIsImNsYXp6Iiwic2V0UmVnZXhwIiwiTUFYX1JBTkdFUyIsImNhY2hlIiwidXBkYXRlIiwibWFya2VyTGF5ZXIiLCJkcmF3U2luZ2xlTGluZU1hcmtlciIsIkZvbGRMaW5lIiwiZm9sZERhdGEiLCJmb2xkcyIsInNldEZvbGRMaW5lIiwic2hpZnRSb3ciLCJzYW1lUm93Iiwic29ydCIsImIiLCJjb250YWluc1JvdyIsIndhbGsiLCJsYXN0RW5kIiwiaXNOZXdSb3ciLCJwbGFjZWhvbGRlciIsImdldE5leHRGb2xkVG8iLCJraW5kIiwiYWRkUmVtb3ZlQ2hhcnMiLCJsb2ciLCJmb2xkQmVmb3JlIiwibmV3Rm9sZExpbmUiLCJmb2xkTGluZU5leHQiLCJpZHhUb1Bvc2l0aW9uIiwiaWR4IiwibGFzdEZvbGRFbmRDb2x1bW4iLCJSYW5nZUxpc3QiLCJwb2ludEluZGV4IiwiZXhjbHVkZUVkZ2VzIiwic3RhcnRJbmRleCIsImVuZEluZGV4IiwiYWRkTGlzdCIsInN1YnN0cmFjdFBvaW50IiwiY29udGFpbnNQb2ludCIsInJhbmdlQXRQb2ludCIsImNsaXBwZWQiLCJyZW1vdmVBbGwiLCJsaW5lRGlmIiwiRm9sZCIsInN1YkZvbGRzIiwiY29uc3VtZVBvaW50IiwicmVzdG9yZVBvaW50Iiwic3ViRm9sZCIsImNvbGxhcHNlQ2hpbGRyZW4iLCJhZGRTdWJGb2xkIiwiYWZ0ZXJTdGFydCIsInJlc3RvcmVSYW5nZSIsIkZvbGRpbmciLCJzaWRlIiwiZ2V0Rm9sZHNJblJhbmdlIiwiZm9sZExpbmVzIiwiJGZvbGREYXRhIiwiZm91bmRGb2xkcyIsImdldEZvbGRzSW5SYW5nZUxpc3QiLCJnZXRBbGxGb2xkcyIsImxhc3RGb2xkIiwic3RhcnRGb2xkTGluZSIsImdldE5leHRGb2xkTGluZSIsImdldEZvbGRlZFJvd0NvdW50IiwiJGFkZEZvbGRMaW5lIiwiYWRkZWQiLCIkY2xpcFJhbmdlVG9Eb2N1bWVudCIsInN0YXJ0Rm9sZCIsImVuZEZvbGQiLCJyZW1vdmVGb2xkcyIsIiR1cGRhdGVXcmFwRGF0YSIsIiR1cGRhdGVSb3dMZW5ndGhDYWNoZSIsIiRtb2RpZmllZCIsImFkZEZvbGRzIiwiJHVwZGF0aW5nIiwiY2xvbmVGb2xkcyIsImZvbGRBbGwiLCJleHBhbmRGb2xkcyIsInVuZm9sZCIsImV4cGFuZElubmVyIiwiaXNSb3dGb2xkZWQiLCJzdGFydEZvbGRSb3ciLCJnZXRSb3dGb2xkRW5kIiwiZ2V0Um93Rm9sZFN0YXJ0IiwiZ2V0Rm9sZERpc3BsYXlMaW5lIiwidGV4dExpbmUiLCJsYXN0Q29sdW1uIiwiJGNsb25lRm9sZERhdGEiLCJmZCIsInRvZ2dsZUZvbGQiLCJ0cnlUb1VuZm9sZCIsImJyYWNrZXRQb3MiLCJnZXRDb21tZW50Rm9sZFJhbmdlIiwiZGVwdGgiLCJnZXRGb2xkV2lkZ2V0IiwiZ2V0Rm9sZFdpZGdldFJhbmdlIiwiJGZvbGRTdHlsZXMiLCIkZm9sZFN0eWxlIiwic2V0Rm9sZFN0eWxlIiwiJGZvbGRNb2RlIiwiJHNldEZvbGRpbmciLCJmb2xkTW9kZSIsIiR1cGRhdGVGb2xkV2lkZ2V0cyIsIiR0b2tlbml6ZXJVcGRhdGVGb2xkV2lkZ2V0cyIsInVwZGF0ZUZvbGRXaWRnZXRzIiwidG9rZW5pemVyVXBkYXRlRm9sZFdpZGdldHMiLCJpZ25vcmVDdXJyZW50IiwiZnciLCJjaGlsZHJlbiIsInNpYmxpbmdzIiwiJHRvZ2dsZUZvbGRXaWRnZXQiLCJ0b2dnbGVGb2xkV2lkZ2V0IiwidG9nZ2xlUGFyZW50IiwiQnJhY2tldE1hdGNoIiwiY2hyIiwiY2hhckJlZm9yZUN1cnNvciIsIiRmaW5kQ2xvc2luZ0JyYWNrZXQiLCIkYnJhY2tldHMiLCJ0eXBlUmUiLCJvcGVuQnJhY2tldCIsInZhbHVlSW5kZXgiLCJjbG9zaW5nQnJhY2tldCIsInZhbHVlTGVuZ3RoIiwiVGV4dE1vZGUiLCJFZGl0U2Vzc2lvbiIsIiRicmVha3BvaW50cyIsIiRkZWNvcmF0aW9ucyIsIiRmcm9udE1hcmtlcnMiLCIkYmFja01hcmtlcnMiLCIkbWFya2VySWQiLCIkdW5kb1NlbGVjdCIsIiR1aWQiLCJvbkNoYW5nZUZvbGQiLCJzZXRNb2RlIiwiYmdUb2tlbml6ZXIiLCJyZXNldENhY2hlcyIsIiRyZXNldFJvd0NhY2hlIiwiY2FjaGVBcnJheSIsImxvdyIsIm1pZCIsIiRyb3dMZW5ndGhDYWNoZSIsInJlbW92ZWRGb2xkcyIsIiR1cGRhdGVJbnRlcm5hbERhdGFPbkNoYW5nZSIsIiRmcm9tVW5kbyIsImlnbm9yZSIsIiRkZWx0YXNEb2MiLCIkZGVsdGFzRm9sZCIsIiRpbmZvcm1VbmRvTWFuYWdlciIsIiRkZWx0YXMiLCJzZXRVbmRvTWFuYWdlciIsImdldFVuZG9NYW5hZ2VyIiwicmVzZXQiLCJnZXRTZWxlY3Rpb24iLCJ1bmRvTWFuYWdlciIsIiRzeW5jSW5mb3JtVW5kb01hbmFnZXIiLCJncm91cCIsImV4ZWN1dGUiLCJtZXJnZVVuZG9EZWx0YXMiLCIkZGVmYXVsdFVuZG9NYW5hZ2VyIiwicmVkbyIsInNldFVzZVNvZnRUYWJzIiwiJHVzZVNvZnRUYWJzIiwiJGluZGVudFdpdGhUYWJzIiwic2V0VGFiU2l6ZSIsIiR0YWJTaXplIiwic2V0TmF2aWdhdGVXaXRoaW5Tb2Z0VGFicyIsIm5hdmlnYXRlV2l0aGluU29mdFRhYnMiLCIkbmF2aWdhdGVXaXRoaW5Tb2Z0VGFicyIsIiRvdmVyd3JpdGUiLCJzZXRPdmVyd3JpdGUiLCJvdmVyd3JpdGUiLCJnZXRPdmVyd3JpdGUiLCJ0b2dnbGVPdmVyd3JpdGUiLCJhZGRHdXR0ZXJEZWNvcmF0aW9uIiwicmVtb3ZlR3V0dGVyRGVjb3JhdGlvbiIsImdldEJyZWFrcG9pbnRzIiwic2V0QnJlYWtwb2ludHMiLCJjbGVhckJyZWFrcG9pbnRzIiwic2V0QnJlYWtwb2ludCIsImNsZWFyQnJlYWtwb2ludCIsImluRnJvbnQiLCJtYXJrZXIiLCJhZGREeW5hbWljTWFya2VyIiwibWFya2VySWQiLCJtYXJrZXJzIiwiZ2V0TWFya2VycyIsImhpZ2hsaWdodCIsIiRzZWFyY2hIaWdobGlnaHQiLCJoaWdobGlnaHRMaW5lcyIsInNldEFubm90YXRpb25zIiwiYW5ub3RhdGlvbnMiLCJnZXRBbm5vdGF0aW9ucyIsImNsZWFyQW5ub3RhdGlvbnMiLCJpblRva2VuIiwid29yZFJhbmdlIiwic2V0VXNlV29ya2VyIiwidXNlV29ya2VyIiwiZ2V0VXNlV29ya2VyIiwiJHVzZVdvcmtlciIsIm9uUmVsb2FkVG9rZW5pemVyIiwiJG1vZGVJZCIsIiRvbkNoYW5nZU1vZGUiLCIkaXNQbGFjZWhvbGRlciIsIiRzdG9wV29ya2VyIiwiJHN0YXJ0V29ya2VyIiwiYXR0YWNoVG9TZXNzaW9uIiwid3JhcE1ldGhvZCIsIiR3cmFwTWV0aG9kIiwiZm9sZGluZ1J1bGVzIiwidGVybWluYXRlIiwiZ2V0TW9kZSIsIiRzY3JvbGxUb3AiLCJzZXRTY3JvbGxUb3AiLCJpc05hTiIsImdldFNjcm9sbFRvcCIsIiRzY3JvbGxMZWZ0Iiwic2V0U2Nyb2xsTGVmdCIsImdldFNjcm9sbExlZnQiLCJnZXRTY3JlZW5XaWR0aCIsIiRjb21wdXRlV2lkdGgiLCJnZXRMaW5lV2lkZ2V0TWF4V2lkdGgiLCJzY3JlZW5XaWR0aCIsImxpbmVXaWRnZXRzV2lkdGgiLCJ3IiwibGluZVdpZGdldFdpZHRoIiwiZm9yY2UiLCIkd3JhcExpbWl0IiwibG9uZ2VzdFNjcmVlbkxpbmUiLCJmb2xkSW5kZXgiLCJmb2xkU3RhcnQiLCIkZ2V0U3RyaW5nU2NyZWVuV2lkdGgiLCJ1bmRvQ2hhbmdlcyIsImRvbnRTZWxlY3QiLCJsYXN0VW5kb1JhbmdlIiwiJGdldFVuZG9TZWxlY3Rpb24iLCJmb2xkRGVsdGEiLCJyZWRvQ2hhbmdlcyIsInNldFVuZG9TZWxlY3QiLCJlbmFibGUiLCJpc1VuZG8iLCJmcm9tUmFuZ2UiLCJ0b1Bvc2l0aW9uIiwidG9SYW5nZSIsImNvbGxEaWZmIiwib2xkU3RhcnQiLCJuZXdTdGFydCIsImluZGVudFJvd3MiLCJpbmRlbnRTdHJpbmciLCJvdXRkZW50Um93cyIsInJvd1JhbmdlIiwiZGVsZXRlUmFuZ2UiLCIkbW92ZUxpbmVzIiwiZGlmZiIsIiRjbGlwUm93VG9Eb2N1bWVudCIsIk51bWJlciIsIk1BWF9WQUxVRSIsIm1vdmVMaW5lc1VwIiwibW92ZUxpbmVzRG93biIsImR1cGxpY2F0ZUxpbmVzIiwiJGNsaXBDb2x1bW5Ub1JvdyIsIiR3cmFwTGltaXRSYW5nZSIsInNldFVzZVdyYXBNb2RlIiwidXNlV3JhcE1vZGUiLCJnZXRVc2VXcmFwTW9kZSIsInNldFdyYXBMaW1pdFJhbmdlIiwiYWRqdXN0V3JhcExpbWl0IiwiZGVzaXJlZExpbWl0IiwiJHByaW50TWFyZ2luIiwibGltaXRzIiwid3JhcExpbWl0IiwiJGNvbnN0cmFpbldyYXBMaW1pdCIsImdldFdyYXBMaW1pdCIsInNldFdyYXBMaW1pdCIsImxpbWl0IiwiZ2V0V3JhcExpbWl0UmFuZ2UiLCJmb2xkTGluZUJlZm9yZSIsIndyYXBEYXRhIiwid2Fsa1Rva2VucyIsIiRnZXREaXNwbGF5VG9rZW5zIiwiUExBQ0VIT0xERVJfU1RBUlQiLCJQTEFDRUhPTERFUl9CT0RZIiwiJGNvbXB1dGVXcmFwU3BsaXRzIiwiZGlzcGxheUxlbmd0aCIsImxhc3RTcGxpdCIsImxhc3REb2NTcGxpdCIsImlzQ29kZSIsIiR3cmFwQXNDb2RlIiwiaW5kZW50ZWRTb2Z0V3JhcCIsIiRpbmRlbnRlZFNvZnRXcmFwIiwibWF4SW5kZW50IiwiYWRkU3BsaXQiLCJkaXNwbGF5ZWQiLCJpbmRlbnRhdGlvbiIsImdldFdyYXBJbmRlbnQiLCJtaW5TcGxpdCIsIm1heFNjcmVlbkNvbHVtbiIsInNjcmVlbkNvbHVtbiIsImdldFJvd0xlbmd0aCIsImdldFJvd0xpbmVDb3VudCIsImdldFJvd1dyYXBJbmRlbnQiLCJnZXRTY3JlZW5MYXN0Um93Q29sdW1uIiwiZG9jdW1lbnRUb1NjcmVlbkNvbHVtbiIsImdldERvY3VtZW50TGFzdFJvd0NvbHVtbiIsImRvY0NvbHVtbiIsImdldFJvd1NwbGl0RGF0YSIsInNjcmVlblRvRG9jdW1lbnRSb3ciLCJzY3JlZW5Ub0RvY3VtZW50Q29sdW1uIiwicm93TGVuZ3RoIiwiZG9DYWNoZSIsIm1heFJvdyIsImZvbGRTdGFydFJvdyIsIndyYXBSb3ciLCJzY3JlZW5Sb3dPZmZzZXQiLCJnZXRTY3JlZW5MZW5ndGgiLCJzY3JlZW5Sb3dzIiwiJGdldFdpZGdldFNjcmVlbkxlbmd0aCIsIiRzZXRGb250TWV0cmljcyIsImZtIiwiJGVuYWJsZVZhckNoYXIiLCJnZXRDaGFyYWN0ZXJXaWR0aCIsIndyYXAiLCIkd3JhcCIsImZpcnN0TGluZU51bWJlciIsInVzZVNvZnRUYWJzIiwiU2VhcmNoIiwiZmluZCIsIiRtYXRjaEl0ZXJhdG9yIiwic3IiLCJzYyIsImVyIiwiZWMiLCJza2lwQ3VycmVudCIsImZpbmRBbGwiLCJuZWVkbGUiLCIkYXNzZW1ibGVSZWdFeHAiLCIkaXNNdWx0aUxpbmUiLCJwcmV2UmFuZ2UiLCJyZXBsYWNlbWVudCIsInByZXNlcnZlQ2FzZSIsIiRkaXNhYmxlRmFrZU11bHRpbGluZSIsIndob2xlV29yZCIsIndvcmRCb3VuZGFyeSIsImFkZFdvcmRCb3VuZGFyeSIsIm1vZGlmaWVyIiwiY2FzZVNlbnNpdGl2ZSIsIiRhc3NlbWJsZU11bHRpbGluZVJlZ0V4cCIsImJhY2t3YXJkcyIsImZvckVhY2hJbkxpbmUiLCJIYXNoSGFuZGxlciIsImNvbW1hbmRLZXlCaW5kaW5nIiwiYWRkQ29tbWFuZHMiLCIkc2luZ2xlQ29tbWFuZCIsIk11bHRpSGFzaEhhbmRsZXIiLCJiaW5kS2V5IiwiaXNEZWZhdWx0IiwiYWRkQ29tbWFuZCIsInJlbW92ZUNvbW1hbmQiLCJfYnVpbGRLZXlIYXNoIiwia2VlcENvbW1hbmQiLCJja2IiLCJrZXlJZCIsImNtZEdyb3VwIiwia2V5UGFydCIsImNoYWluIiwiYmluZGluZyIsInBhcnNlS2V5cyIsIl9hZGRDb21tYW5kVG9CaW5kaW5nIiwicmVtb3ZlQ29tbWFuZHMiLCJiaW5kS2V5cyIsImtleUxpc3QiLCJmaW5kS2V5Q29tbWFuZCIsIiRrZXlDaGFpbiIsIkNvbW1hbmRNYW5hZ2VyIiwiYnlOYW1lIiwiaXNBdmFpbGFibGUiLCJ0b2dnbGVSZWNvcmRpbmciLCIkaW5SZXBsYXkiLCJyZWNvcmRpbmciLCJtYWNybyIsIiRhZGRDb21tYW5kVG9NYWNybyIsIm9sZE1hY3JvIiwicmVwbGF5IiwidHJpbU1hY3JvIiwibWFjIiwic2hvd1NldHRpbmdzTWVudSIsInNob3dFcnJvck1hcmtlciIsInNjcm9sbEludG9WaWV3IiwiY2VudGVyU2VsZWN0aW9uIiwicHJvbXB0IiwiZ290b0xpbmUiLCJtdWx0aVNlbGVjdEFjdGlvbiIsImdldEFsbFJhbmdlcyIsImZpbmROZXh0IiwiZmluZFByZXZpb3VzIiwiYWNlQ29tbWFuZEdyb3VwIiwibmF2aWdhdGVGaWxlU3RhcnQiLCJuYXZpZ2F0ZVVwIiwidGltZXMiLCJuYXZpZ2F0ZUZpbGVFbmQiLCJuYXZpZ2F0ZURvd24iLCJuYXZpZ2F0ZVdvcmRMZWZ0IiwibmF2aWdhdGVMaW5lU3RhcnQiLCJuYXZpZ2F0ZUxlZnQiLCJuYXZpZ2F0ZVdvcmRSaWdodCIsIm5hdmlnYXRlTGluZUVuZCIsIm5hdmlnYXRlUmlnaHQiLCJzZWxlY3RQYWdlRG93biIsInNjcm9sbFBhZ2VEb3duIiwiZ290b1BhZ2VEb3duIiwic2VsZWN0UGFnZVVwIiwic2Nyb2xsUGFnZVVwIiwiZ290b1BhZ2VVcCIsImp1bXBUb01hdGNoaW5nIiwiJGhhbmRsZVBhc3RlIiwiZHVwbGljYXRlU2VsZWN0aW9uIiwic29ydExpbmVzIiwibW9kaWZ5TnVtYmVyIiwiY29weUxpbmVzVXAiLCJjb3B5TGluZXNEb3duIiwicmVtb3ZlVG9MaW5lU3RhcnQiLCJyZW1vdmVUb0xpbmVFbmQiLCJyZW1vdmVXb3JkTGVmdCIsInJlbW92ZVdvcmRSaWdodCIsImJsb2NrT3V0ZGVudCIsImJsb2NrSW5kZW50Iiwic3BsaXRMaW5lIiwidHJhbnNwb3NlTGV0dGVycyIsInRyYW5zcG9zZVNlbGVjdGlvbnMiLCJmaXJzdExpbmVFbmRDb2wiLCJzZWxlY3RlZENvdW50IiwiaW5zZXJ0TGluZSIsImN1ckxpbmUiLCJuZXdSYW5nZXMiLCJleGl0TXVsdGlTZWxlY3RNb2RlIiwiZGVmYXVsdENvbW1hbmRzIiwiRWRpdG9yIiwiZ2V0Q29udGFpbmVyRWxlbWVudCIsImdldFRleHRBcmVhQ29udGFpbmVyIiwidGV4dGFyZWEiLCIkbW91c2VIYW5kbGVyIiwia2V5QmluZGluZyIsIiRzZWFyY2giLCIkaGlzdG9yeVRyYWNrZXIiLCIkaW5pdE9wZXJhdGlvbkxpc3RlbmVycyIsIl8kZW1pdElucHV0RXZlbnQiLCJzZXRTZXNzaW9uIiwic3RhcnRPcGVyYXRpb24iLCJlbmRPcGVyYXRpb24iLCIkb3BSZXNldFRpbWVyIiwiY3VyT3AiLCJkb2NDaGFuZ2VkIiwic2VsZWN0aW9uQ2hhbmdlZCIsInByZXZPcCIsImNvbW1hZEV2ZW50IiwicHJldmlvdXNDb21tYW5kIiwic2Nyb2xsU2VsZWN0aW9uSW50b1ZpZXciLCJhbmltYXRlU2Nyb2xsaW5nIiwiJG1lcmdlYWJsZUNvbW1hbmRzIiwiJG1lcmdlVW5kb0RlbHRhcyIsInByZXYiLCJtZXJnZWFibGVDb21tYW5kcyIsInNob3VsZE1lcmdlIiwibWVyZ2VOZXh0Q29tbWFuZCIsInNlcXVlbmNlU3RhcnRUaW1lIiwia2V5Ym9hcmRIYW5kbGVyIiwiJGtleWJpbmRpbmdJZCIsImhhbmRsZXIiLCJvbGRTZXNzaW9uIiwiJG9uRG9jdW1lbnRDaGFuZ2UiLCIkb25Ub2tlbml6ZXJVcGRhdGUiLCIkb25DaGFuZ2VUYWJTaXplIiwiJG9uQ2hhbmdlV3JhcExpbWl0IiwiJG9uQ2hhbmdlV3JhcE1vZGUiLCIkb25DaGFuZ2VGb2xkIiwiJG9uQ2hhbmdlRnJvbnRNYXJrZXIiLCIkb25DaGFuZ2VCYWNrTWFya2VyIiwiJG9uQ2hhbmdlQnJlYWtwb2ludCIsIiRvbkNoYW5nZUFubm90YXRpb24iLCIkb25DdXJzb3JDaGFuZ2UiLCIkb25TY3JvbGxUb3BDaGFuZ2UiLCIkb25TY3JvbGxMZWZ0Q2hhbmdlIiwiJG9uU2VsZWN0aW9uQ2hhbmdlIiwib25Eb2N1bWVudENoYW5nZSIsIm9uQ2hhbmdlTW9kZSIsIm9uVG9rZW5pemVyVXBkYXRlIiwib25DaGFuZ2VUYWJTaXplIiwib25DaGFuZ2VXcmFwTGltaXQiLCJvbkNoYW5nZVdyYXBNb2RlIiwib25DaGFuZ2VGcm9udE1hcmtlciIsIm9uQ2hhbmdlQmFja01hcmtlciIsIm9uQ2hhbmdlQnJlYWtwb2ludCIsIm9uQ2hhbmdlQW5ub3RhdGlvbiIsIm9uQ3Vyc29yQ2hhbmdlIiwib25TY3JvbGxUb3BDaGFuZ2UiLCJvblNjcm9sbExlZnRDaGFuZ2UiLCJvblNlbGVjdGlvbkNoYW5nZSIsInVwZGF0ZUZ1bGwiLCJvbGRFZGl0b3IiLCJnZXRTZXNzaW9uIiwiY3Vyc29yUG9zIiwicmVzaXplIiwib25SZXNpemUiLCJzZXRUaGVtZSIsInRoZW1lIiwiZ2V0VGhlbWUiLCJnZXRGb250U2l6ZSIsInNldEZvbnRTaXplIiwiJGhpZ2hsaWdodEJyYWNrZXRzIiwiJGJyYWNrZXRIaWdobGlnaHQiLCIkaGlnaGxpZ2h0UGVuZGluZyIsImdldE1hdGNoaW5nIiwiJGhpZ2hsaWdodFRhZ3MiLCIkaGlnaGxpZ2h0VGFnUGVuZGluZyIsIiR0YWdIaWdobGlnaHQiLCJwcmV2VG9rZW4iLCJzYm0iLCIkaXNGb2N1c2VkIiwic2hvd0N1cnNvciIsInZpc3VhbGl6ZUZvY3VzIiwiaGlkZUN1cnNvciIsInZpc3VhbGl6ZUJsdXIiLCIkY3Vyc29yQ2hhbmdlIiwidXBkYXRlQ3Vyc29yIiwidXBkYXRlTGluZXMiLCIkdXBkYXRlSGlnaGxpZ2h0QWN0aXZlTGluZSIsInNjcm9sbFRvWSIsInNjcm9sbFRvWCIsIiRoaWdobGlnaHRBY3RpdmVMaW5lIiwiJHNlbGVjdGlvblN0eWxlIiwiJG1heExpbmVzIiwiJG1pbkxpbmVzIiwiJGhpZ2hsaWdodExpbmVNYXJrZXIiLCIkc2VsZWN0aW9uTWFya2VyIiwiJGhpZ2hsaWdodFNlbGVjdGVkV29yZCIsIiRnZXRTZWxlY3Rpb25IaWdoTGlnaHRSZWdleHAiLCJzdGFydE91dGVyIiwiZW5kT3V0ZXIiLCJsaW5lQ29scyIsInVwZGF0ZUZyb250TWFya2VycyIsInVwZGF0ZUJhY2tNYXJrZXJzIiwidXBkYXRlQnJlYWtwb2ludHMiLCJ1cGRhdGVUZXh0IiwiZ2V0U2VsZWN0ZWRUZXh0IiwiaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSIsImdldEJlaGF2aW91cnNFbmFibGVkIiwidHJhbnNmb3JtIiwiJG1lcmdlTmV4dENvbW1hbmQiLCJkIiwibGluZVN0YXRlIiwic2hvdWxkT3V0ZGVudCIsImxpbmVJbmRlbnQiLCJzZXRTY3JvbGxTcGVlZCIsImdldFNjcm9sbFNwZWVkIiwic2V0RHJhZ0RlbGF5Iiwic2V0U2VsZWN0aW9uU3R5bGUiLCJzZXRIaWdobGlnaHRBY3RpdmVMaW5lIiwic2hvdWxkSGlnaGxpZ2h0IiwiZ2V0SGlnaGxpZ2h0QWN0aXZlTGluZSIsInNldEhpZ2hsaWdodEd1dHRlckxpbmUiLCJnZXRIaWdobGlnaHRHdXR0ZXJMaW5lIiwic2V0SGlnaGxpZ2h0U2VsZWN0ZWRXb3JkIiwiZ2V0SGlnaGxpZ2h0U2VsZWN0ZWRXb3JkIiwic2V0QW5pbWF0ZWRTY3JvbGwiLCJzaG91bGRBbmltYXRlIiwiZ2V0QW5pbWF0ZWRTY3JvbGwiLCJzZXREaXNwbGF5SW5kZW50R3VpZGVzIiwiZ2V0RGlzcGxheUluZGVudEd1aWRlcyIsInNldFNob3dQcmludE1hcmdpbiIsInNob3dQcmludE1hcmdpbiIsImdldFNob3dQcmludE1hcmdpbiIsInNldFByaW50TWFyZ2luQ29sdW1uIiwiZ2V0UHJpbnRNYXJnaW5Db2x1bW4iLCJzZXRCZWhhdmlvdXJzRW5hYmxlZCIsImVuYWJsZWQiLCJzZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQiLCJzZXRTaG93Rm9sZFdpZGdldHMiLCJnZXRTaG93Rm9sZFdpZGdldHMiLCJzZXRGYWRlRm9sZFdpZGdldHMiLCJmYWRlIiwiZ2V0RmFkZUZvbGRXaWRnZXRzIiwibmV3X3JhbmdlIiwic3dhcCIsIm9yaWdpbmFsUmFuZ2UiLCIkZ2V0U2VsZWN0ZWRSb3dzIiwiZ2V0TnVtYmVyQXQiLCJfbnVtYmVyUngiLCJhbW91bnQiLCJjaGFyUmFuZ2UiLCJpc0Zpbml0ZSIsIm5yIiwiZnAiLCJkZWNpbWFscyIsIm5uciIsInRvRml4ZWQiLCJyZXBsYWNlUmFuZ2UiLCJzZWwiLCJlbmRQb2ludCIsIm1vdmVkIiwidG90YWxEaWZmIiwicmFuZ2VJbmRleCIsInN1YlJvd3MiLCJzaG93Q29tcG9zaXRpb24iLCJzZXRDb21wb3NpdGlvblRleHQiLCJoaWRlQ29tcG9zaXRpb24iLCJnZXRGaXJzdFZpc2libGVSb3ciLCJnZXRMYXN0VmlzaWJsZVJvdyIsImlzUm93VmlzaWJsZSIsImlzUm93RnVsbHlWaXNpYmxlIiwiZ2V0Rmlyc3RGdWxseVZpc2libGVSb3ciLCJnZXRMYXN0RnVsbHlWaXNpYmxlUm93IiwiJGdldFZpc2libGVSb3dDb3VudCIsImdldFNjcm9sbEJvdHRvbVJvdyIsImdldFNjcm9sbFRvcFJvdyIsIiRtb3ZlQnlQYWdlIiwic2Nyb2xsVG9Sb3ciLCJzY3JvbGxUb0xpbmUiLCJjZW50ZXIiLCJhbmltYXRlIiwiYWxpZ25DdXJzb3IiLCJnZXRDdXJzb3JQb3NpdGlvblNjcmVlbiIsImV4cGFuZCIsIm1hdGNoVHlwZSIsImJyYWNrZXRUeXBlIiwiZm91bmQiLCJicmFja2V0cyIsImxpbmVOdW1iZXIiLCJuYXZpZ2F0ZVRvIiwicmVwbGFjZWQiLCIkdHJ5UmVwbGFjZSIsInJlcGxhY2VBbGwiLCJnZXRMYXN0U2VhcmNoT3B0aW9ucyIsIm5ld1JhbmdlIiwicHJldmVudFNjcm9sbCIsInJldmVhbFJhbmdlIiwic2V0QXV0b1Njcm9sbEVkaXRvckludG9WaWV3Iiwic2hvdWxkU2Nyb2xsIiwiJHNjcm9sbEFuY2hvciIsInNjcm9sbEFuY2hvciIsIm9uQ2hhbmdlU2VsZWN0aW9uIiwib25CZWZvcmVSZW5kZXIiLCJvbkFmdGVyUmVuZGVyIiwic2VhcmNoQm94IiwiJHBpeGVsUG9zIiwiJHJlc2V0Q3Vyc29yU3R5bGUiLCIkY3Vyc29yU3R5bGUiLCJjdXJzb3JMYXllciIsInNldFNtb290aEJsaW5raW5nIiwiaXNCbGlua2luZyIsInNlbGVjdGlvblN0eWxlIiwiaGlnaGxpZ2h0QWN0aXZlTGluZSIsImhpZ2hsaWdodFNlbGVjdGVkV29yZCIsImJlaGF2aW91cnNFbmFibGVkIiwid3JhcEJlaGF2aW91cnNFbmFibGVkIiwiYXV0b1Njcm9sbEVkaXRvckludG9WaWV3Iiwia2V5YmluZGluZ0lkIiwiaFNjcm9sbEJhckFsd2F5c1Zpc2libGUiLCJ2U2Nyb2xsQmFyQWx3YXlzVmlzaWJsZSIsImhpZ2hsaWdodEd1dHRlckxpbmUiLCJhbmltYXRlZFNjcm9sbCIsInByaW50TWFyZ2luQ29sdW1uIiwicHJpbnRNYXJnaW4iLCJmYWRlRm9sZFdpZGdldHMiLCJzaG93Rm9sZFdpZGdldHMiLCJzaG93TGluZU51bWJlcnMiLCJzaG93R3V0dGVyIiwiZGlzcGxheUluZGVudEd1aWRlcyIsImZvbnRTaXplIiwiZm9udEZhbWlseSIsIm1heExpbmVzIiwibWluTGluZXMiLCJzY3JvbGxQYXN0RW5kIiwiZml4ZWRXaWR0aEd1dHRlciIsImZvbGRTdHlsZSIsIlVuZG9NYW5hZ2VyIiwiJHNlcmlhbGl6ZURlbHRhIiwiJGRlc2VyaWFsaXplRGVsdGEiLCJjbG9uZURlbHRhU2V0c09iaiIsImRlbHRhU2V0c19vbGQiLCJmbkdldE1vZGlmaWVkRGVsdGEiLCJkZWx0YVNldHNfbmV3IiwiZGVsdGFTZXRfb2xkIiwiZGVsdGFTZXRfbmV3IiwiZGVsdGFfb2xkIiwiZGVsdGFTZXRzIiwiJGRvYyIsImhhc1VuZG8iLCJkaXJ0eUNvdW50ZXIiLCIkdW5kb1N0YWNrIiwiJHJlZG9TdGFjayIsIk5hTiIsInVuZG9TZWxlY3Rpb25SYW5nZSIsInJlZG9TZWxlY3Rpb25SYW5nZSIsIiRkZXNlcmlhbGl6ZURlbHRhcyIsImhhc1JlZG8iLCJtYXJrQ2xlYW4iLCJpc0NsZWFuIiwiJHNlcmlhbGl6ZURlbHRhcyIsIkd1dHRlciIsInBhcmVudEVsIiwiJHNob3dGb2xkV2lkZ2V0cyIsImd1dHRlcldpZHRoIiwiJHVwZGF0ZUFubm90YXRpb25zIiwiJGNlbGxzIiwicm93SW5mbyIsImFubm9UZXh0IiwiZ3V0dGVyT2Zmc2V0IiwiYnJlYWtwb2ludHMiLCJkZWNvcmF0aW9ucyIsIiRmaXJzdExpbmVOdW1iZXIiLCJsYXN0TGluZU51bWJlciIsImd1dHRlclJlbmRlcmVyIiwiJHJlbmRlcmVyIiwiY2VsbCIsInRleHROb2RlIiwiZm9sZFdpZGdldCIsImdldFRleHQiLCJtaW5IZWlnaHQiLCIkZml4ZWRXaWR0aCIsInBhZGRpbmciLCIkcGFkZGluZyIsIiRjb21wdXRlUGFkZGluZyIsImNlaWwiLCIkc2hvd0xpbmVOdW1iZXJzIiwic2V0U2hvd0xpbmVOdW1iZXJzIiwiZ2V0U2hvd0xpbmVOdW1iZXJzIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiLCJNYXJrZXIiLCJzZXRQYWRkaW5nIiwic2V0TWFya2VycyIsIiRnZXRUb3AiLCJkcmF3RnVsbExpbmVNYXJrZXIiLCJkcmF3U2NyZWVuTGluZU1hcmtlciIsImRyYXdUZXh0TWFya2VyIiwiZHJhd011bHRpTGluZU1hcmtlciIsImRyYXdCaWRpU2luZ2xlTGluZU1hcmtlciIsImZpcnN0Um93U2NyZWVuIiwic3RyaW5nQnVpbGRlciIsImV4dHJhU3R5bGUiLCJjdXJyIiwiY2xhenpNb2RpZmllZCIsImxpbmVSYW5nZSIsInJhbmdlMSIsInJhZGl1c0NsYXNzIiwiZXh0cmFMZW5ndGgiLCJUZXh0IiwiJHVwZGF0ZUVvbENoYXIiLCJFT0ZfQ0hBUiIsIkVPTF9DSEFSX0xGIiwiRU9MX0NIQVJfQ1JMRiIsIkVPTF9DSEFSIiwiVEFCX0NIQVIiLCJTUEFDRV9DSEFSIiwiZ2V0TGluZUhlaWdodCIsIiRmb250TWV0cmljcyIsIm1lYXN1cmUiLCIkcG9sbFNpemVDaGFuZ2VzIiwiY2hlY2tGb3JTaXplQ2hhbmdlcyIsIiRwb2xsU2l6ZUNoYW5nZXNUaW1lciIsIiRjb21wdXRlVGFiU3RyaW5nIiwiJHRhYlN0cmluZ3MiLCJ0YWJTdHIiLCIkaW5kZW50R3VpZGVSZSIsInNwYWNlQ2xhc3MiLCJ0YWJDbGFzcyIsInNwYWNlQ29udGVudCIsInRhYkNvbnRlbnQiLCJzY3JvbGxMaW5lcyIsImxpbmVFbGVtZW50cyIsImNoaWxkTm9kZXMiLCJsaW5lRWxlbWVudHNJZHgiLCJsaW5lRWxlbWVudCIsIiRyZW5kZXJMaW5lIiwiJHVzZUxpbmVHcm91cHMiLCJvbGRDb25maWciLCJsYXN0Q2hpbGQiLCJmcmFnbWVudCIsIiRyZW5kZXJMaW5lc0ZyYWdtZW50IiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsIiR0ZXh0VG9rZW4iLCIkcmVuZGVyVG9rZW4iLCJvdXRwdXQiLCJ0YWJJZHgiLCJpZHg0IiwiY2xhc3NUb1VzZSIsInNwYWNlIiwicmVuZGVySW5kZW50R3VpZGUiLCJjb2xzIiwiJHJlbmRlcldyYXBwZWRMaW5lIiwib25seUNvbnRlbnRzIiwic3BsaXRDaGFycyIsIiRyZW5kZXJTaW1wbGVMaW5lIiwiJGdldEZvbGRMaW5lVG9rZW5zIiwicmVuZGVyVG9rZW5zIiwiYWRkVG9rZW5zIiwiJG1lYXN1cmVOb2RlIiwiaXNJRTgiLCJDdXJzb3IiLCJpc1Zpc2libGUiLCJibGlua0ludGVydmFsIiwic21vb3RoQmxpbmtpbmciLCJjdXJzb3JzIiwiYWRkQ3Vyc29yIiwiJHVwZGF0ZUN1cnNvcnMiLCIkdXBkYXRlVmlzaWJpbGl0eSIsIiR1cGRhdGVPcGFjaXR5IiwidmlzaWJpbGl0eSIsImJsaW5raW5nIiwicmVzdGFydFRpbWVyIiwic2V0QmxpbmtJbnRlcnZhbCIsInJlbW92ZUN1cnNvciIsImludGVydmFsSWQiLCJ0aW1lb3V0SWQiLCJibGluayIsImdldFBpeGVsUG9zaXRpb24iLCJvblNjcmVlbiIsIiRzZWxlY3Rpb25NYXJrZXJzIiwiY3Vyc29ySW5kZXgiLCJwaXhlbFBvcyIsImRyYXdDdXJzb3IiLCIkc2V0T3ZlcndyaXRlIiwiTUFYX1NDUk9MTF9IIiwiU2Nyb2xsQmFyIiwicGFyZW50IiwiY2xhc3NTdWZmaXgiLCJzZXRWaXNpYmxlIiwic2tpcEV2ZW50Iiwib25TY3JvbGwiLCJjb2VmZiIsIlZTY3JvbGxCYXIiLCJzY3JvbGxIZWlnaHQiLCIkc2Nyb2xsYmFyV2lkdGgiLCIkbWluV2lkdGgiLCJzZXRIZWlnaHQiLCJzZXRJbm5lckhlaWdodCIsInNldFNjcm9sbEhlaWdodCIsIkhTY3JvbGxCYXIiLCJzZXRXaWR0aCIsInNldElubmVyV2lkdGgiLCJzZXRTY3JvbGxXaWR0aCIsIlNjcm9sbEJhclYiLCJTY3JvbGxCYXJIIiwiUmVuZGVyTG9vcCIsIm9uUmVuZGVyIiwicGVuZGluZyIsImNoYW5nZXMiLCJjaGFuZ2UiLCJDSEFSX0NPVU5UIiwiRm9udE1ldHJpY3MiLCIkc2V0TWVhc3VyZU5vZGVTdHlsZXMiLCIkbWFpbiIsIiR0ZXN0RnJhY3Rpb25hbFJlY3QiLCJpc1Jvb3QiLCJ3aGl0ZVNwYWNlIiwiZm9udCIsIiRtZWFzdXJlU2l6ZXMiLCJmb250V2VpZ2h0IiwiYm9sZFNpemUiLCJjaGFyU2l6ZXMiLCJhbGxvd0JvbGRGb250cyIsInNldFBvbGxpbmciLCJHdXR0ZXJMYXllciIsIk1hcmtlckxheWVyIiwiVGV4dExheWVyIiwiQ3Vyc29yTGF5ZXIiLCJWaXJ0dWFsUmVuZGVyZXIiLCJjb250ZW50Iiwib25HdXR0ZXJSZXNpemUiLCIkbWFya2VyQmFjayIsInRleHRMYXllciIsIiR0ZXh0TGF5ZXIiLCJjYW52YXMiLCIkbWFya2VyRnJvbnQiLCIkaG9yaXpTY3JvbGwiLCIkdlNjcm9sbCIsInNjcm9sbEJhciIsIiRzY3JvbGxBbmltYXRpb24iLCJzY3JvbGxNYXJnaW4iLCJ1cGRhdGVDaGFyYWN0ZXJTaXplIiwiJHNpemUiLCJzY3JvbGxlckhlaWdodCIsInNjcm9sbGVyV2lkdGgiLCIkZGlydHkiLCJtYXhIZWlnaHQiLCJ2IiwiJGxvb3AiLCIkcmVuZGVyQ2hhbmdlcyIsIkNIQU5HRV9GVUxMIiwiQ0hBTkdFX0NVUlNPUiIsIkNIQU5HRV9NQVJLRVIiLCJDSEFOR0VfR1VUVEVSIiwiQ0hBTkdFX1NDUk9MTCIsIkNIQU5HRV9MSU5FUyIsIkNIQU5HRV9URVhUIiwiQ0hBTkdFX1NJWkUiLCJDSEFOR0VfTUFSS0VSX0JBQ0siLCJDSEFOR0VfTUFSS0VSX0ZST05UIiwiQ0hBTkdFX0hfU0NST0xMIiwiJGFsbG93Qm9sZEZvbnRzIiwiJHVwZGF0ZVByaW50TWFyZ2luIiwib25DaGFuZ2VOZXdMaW5lTW9kZSIsIiRjaGFuZ2VkTGluZXMiLCJ1cGRhdGVGb250U2l6ZSIsIiRjaGFuZ2VzIiwiJHVwZGF0ZVNpemVBc3luYyIsInJlc2l6aW5nIiwic2Nyb2xsV2lkdGgiLCIkdXBkYXRlQ2FjaGVkU2l6ZSIsIiRleHRyYUhlaWdodCIsIm9sZFNpemUiLCIkc2hvd0d1dHRlciIsIiRjb21wdXRlTGF5ZXJDb25maWciLCJhdmFpbGFibGVXaWR0aCIsIiRzaG93UHJpbnRNYXJnaW4iLCIkcHJpbnRNYXJnaW5Db2x1bW4iLCIkYW5pbWF0ZWRTY3JvbGwiLCJnZXRTaG93R3V0dGVyIiwic2V0U2hvd0d1dHRlciIsIiR1cGRhdGVHdXR0ZXJMaW5lSGlnaGxpZ2h0IiwiJGd1dHRlckxpbmVIaWdobGlnaHQiLCIkcHJpbnRNYXJnaW5FbCIsImNvbnRhaW5lckVsIiwicG9zVG9wIiwicG9zTGVmdCIsIiRjb21wb3NpdGlvbiIsInNldFNjcm9sbE1hcmdpbiIsInNtIiwiZ2V0SFNjcm9sbEJhckFsd2F5c1Zpc2libGUiLCIkaFNjcm9sbEJhckFsd2F5c1Zpc2libGUiLCJzZXRIU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZSIsImFsd2F5c1Zpc2libGUiLCJnZXRWU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZSIsIiR2U2Nyb2xsQmFyQWx3YXlzVmlzaWJsZSIsInNldFZTY3JvbGxCYXJBbHdheXNWaXNpYmxlIiwiJHVwZGF0ZVNjcm9sbEJhclYiLCIkc2Nyb2xsUGFzdEVuZCIsIiR1cGRhdGVTY3JvbGxCYXJIIiwiJGZyb3plbiIsInVuZnJlZXplIiwic3QiLCJtYXJnaW5Ub3AiLCJtYXJnaW5MZWZ0IiwiJGhpZ2hsaWdodEd1dHRlckxpbmUiLCIkdXBkYXRlTGluZXMiLCIkYXV0b3NpemUiLCJkZXNpcmVkSGVpZ2h0IiwiJG1heFBpeGVsSGVpZ2h0IiwiJGd1dHRlcldpZHRoIiwiaGlkZVNjcm9sbGJhcnMiLCJsb25nZXN0TGluZSIsIiRnZXRMb25nZXN0TGluZSIsImhvcml6U2Nyb2xsIiwiaFNjcm9sbENoYW5nZWQiLCJ2U2Nyb2xsQmVmb3JlIiwidlNjcm9sbENoYW5nZWQiLCJmaXJzdFJvd0hlaWdodCIsImxpbmVDb3VudCIsImNoYXJDb3VudCIsIiR2aWV3TWFyZ2luIiwidG9wTWFyZ2luIiwiYm90dG9tTWFyZ2luIiwiYWxpZ25tZW50IiwiU1RFUFMiLCIkY2FsY1N0ZXBzIiwiZnJvbVZhbHVlIiwidG9WYWx1ZSIsInhfbWluIiwic3RlcHMiLCJpbml0aWFsU2Nyb2xsIiwib2xkU3RlcHMiLCIkdGltZXIiLCJzY3JvbGxUbyIsImNhbnZhc1BvcyIsInRleHRUb1NjcmVlbkNvb3JkaW5hdGVzIiwicGFnZVgiLCJwYWdlWSIsImtlZXBUZXh0QXJlYUF0Q3Vyc29yIiwiJHRoZW1lSWQiLCJjc3NDbGFzcyIsIiR0aGVtZSIsImlzRGFyayIsInNldE1vdXNlQ3Vyc29yIiwibWF4UGl4ZWxIZWlnaHQiLCJ3b3JrZXJVcmwiLCJibG9iIiwiQmxvYiIsImJsb2JCdWlsZGVyIiwiQmxvYkJ1aWxkZXIiLCJXZWJLaXRCbG9iQnVpbGRlciIsIk1vekJsb2JCdWlsZGVyIiwiZ2V0QmxvYiIsIiR3b3JrZXJCbG9iIiwiYmxvYlVSTCIsIlVSTCIsIndlYmtpdFVSTCIsImNyZWF0ZU9iamVjdFVSTCIsIldvcmtlciIsIldvcmtlckNsaWVudCIsInRvcExldmVsTmFtZXNwYWNlcyIsImNsYXNzbmFtZSIsImltcG9ydFNjcmlwdHMiLCIkc2VuZERlbHRhUXVldWUiLCJjaGFuZ2VMaXN0ZW5lciIsIm9uTWVzc2FnZSIsIm5hbWVUb1VybCIsInRvVXJsIiwibm9ybWFsaXplUGF0aCIsIiRub3JtYWxpemVQYXRoIiwidGxucyIsImNhbGxiYWNrSWQiLCJjYWxsYmFja3MiLCJvbm1lc3NhZ2UiLCJlcnIiLCJkZWx0YVF1ZXVlIiwiY21kIiwiZW1pdCIsImV4IiwiYXR0YWNoVG9Eb2N1bWVudCIsInEiLCJVSVdvcmtlckNsaWVudCIsIm1lc3NhZ2VCdWZmZXIiLCJtYWluIiwiZW1pdFN5bmMiLCJzZW5kZXIiLCJwcm9jZXNzTmV4dCIsInNldEVtaXRTeW5jIiwiTWFpbiIsIlBsYWNlSG9sZGVyIiwib3RoZXJzIiwibWFpbkNsYXNzIiwib3RoZXJzQ2xhc3MiLCIkb25VcGRhdGUiLCJvblVwZGF0ZSIsIiRvdGhlcnMiLCJ1bmRvU3RhY2siLCIkdW5kb3N0YWNrIiwiJHVuZG9TdGFja0RlcHRoIiwic2V0dXAiLCJzZWxlY3Rpb25CZWZvcmUiLCJvdGhlciIsInNob3dPdGhlck1hcmtlcnMiLCJvdGhlcnNBY3RpdmUiLCJoaWRlT3RoZXJNYXJrZXJzIiwidXBkYXRlQW5jaG9ycyIsImxlbmd0aERpZmYiLCJpbk1haW5SYW5nZSIsImRpc3RhbmNlRnJvbVN0YXJ0IiwibmV3UG9zIiwib3RoZXJQb3MiLCJ1cGRhdGVNYXJrZXJzIiwidXBkYXRlTWFya2VyIiwidW5kb3NSZXF1aXJlZCIsImlzU2FtZVBvaW50IiwiYWx0IiwiY3RybCIsImFjY2VsIiwic2VsZWN0aW9uTW9kZSIsImlzTXVsdGlTZWxlY3QiLCJtb3VzZVgiLCJtb3VzZVkiLCJzY3JlZW5BbmNob3IiLCJzY3JlZW5DdXJzb3IiLCIkZW5hYmxlSnVtcFRvRGVmIiwiJGJsb2NrU2VsZWN0RW5hYmxlZCIsImFkZFNlbGVjdGlvbk1hcmtlciIsIm9sZFJhbmdlIiwicmVtb3ZlU2VsZWN0aW9uTWFya2VyIiwidG1wU2VsIiwicmVjdFNlbCIsInJlbW92ZVNlbGVjdGlvbk1hcmtlcnMiLCJuZXdDdXJzb3IiLCJyZWN0YW5ndWxhclJhbmdlQmxvY2siLCJ1cGRhdGVTZWxlY3Rpb25NYXJrZXJzIiwib25TZWxlY3Rpb25JbnRlcnZhbCIsInNlbGVjdE1vcmVMaW5lcyIsInNlbGVjdE1vcmUiLCJzcGxpdEludG9MaW5lcyIsImFsaWduQ3Vyc29ycyIsIm11bHRpU2VsZWN0Q29tbWFuZHMiLCJnZXRTZWxlY3Rpb25NYXJrZXJzIiwiJGJsb2NrQ2hhbmdlRXZlbnRzIiwiJG9uQWRkUmFuZ2UiLCIkb25SZW1vdmVSYW5nZSIsIm1lcmdlT3ZlcmxhcHBpbmdSYW5nZXMiLCJsYXN0UmFuZ2UiLCIkaW5pdFJhbmdlTGlzdCIsInRvZ2dsZUJsb2NrU2VsZWN0aW9uIiwiaW5jbHVkZUVtcHR5TGluZXMiLCJ4QmFja3dhcmRzIiwic3RhcnRPZmZzZXRYIiwiZW5kT2Zmc2V0WCIsInlCYWNrd2FyZHMiLCJkb2NFbmQiLCJNdWx0aVNlbGVjdCIsIiRtdWx0aXNlbGVjdE9uU2Vzc2lvbkNoYW5nZSIsIiRvbk11bHRpU2VsZWN0IiwiJG9uU2luZ2xlU2VsZWN0Iiwib25TZXNzaW9uQ2hhbmdlIiwiJGNoZWNrTXVsdGlzZWxlY3RDaGFuZ2UiLCJhbHRDdXJzb3IiLCJhbHREb3duIiwiYWRkQWx0Q3Vyc29yTGlzdGVuZXJzIiwic2VsZWN0aW9uTWFya2VyQ291bnQiLCJtYXJrZXJMaXN0IiwiJG9uTXVsdGlTZWxlY3RFeGVjIiwiaW5WaXJ0dWFsTW9kZSIsImZvckVhY2hTZWxlY3Rpb24iLCJrZWVwT3JkZXIiLCIkYnlMaW5lcyIsInJlZyIsImNtZFJlc3VsdCIsImFuaW0iLCJidWYiLCJubCIsImFkZGl0aXZlIiwic2tpcCIsInNjcmVlbkxlYWQiLCJ0b1JlbW92ZSIsIndvcmRzIiwic3RvcEF0Rmlyc3QiLCJzYW1lUm93UmFuZ2VzIiwibWF4Q29sIiwibWluU3BhY2UiLCJzcGFjZU9mZnNldHMiLCJzcGFjZU9mZnNldCIsImZyIiwibHIiLCJndWVzc1JhbmdlIiwiJHJlQWxpZ25UZXh0IiwiZm9yY2VMZWZ0Iiwic3RhcnRXIiwidGV4dFciLCJlbmRXIiwiaXNMZWZ0QWxpZ25lZCIsImlzUmlnaHRBbGlnbmVkIiwiYWxpZ25MZWZ0IiwiZW5hYmxlTXVsdGlzZWxlY3QiLCJlbmFibGVCbG9ja1NlbGVjdCIsIkZvbGRNb2RlIiwiZm9sZGluZ1N0YXJ0TWFya2VyIiwiZm9sZGluZ1N0b3BNYXJrZXIiLCJpbmRlbnRhdGlvbkJsb2NrIiwic3RhcnRMZXZlbCIsIm9wZW5pbmdCcmFja2V0QmxvY2siLCJjbG9zaW5nQnJhY2tldEJsb2NrIiwiTGluZVdpZGdldHMiLCJ3aWRnZXRNYW5hZ2VyIiwidXBkYXRlT25DaGFuZ2UiLCJyZW5kZXJXaWRnZXRzIiwibWVhc3VyZVdpZGdldHMiLCJfY2hhbmdlZFdpZGdldHMiLCIkb25DaGFuZ2VFZGl0b3IiLCJ1cGRhdGVPbkZvbGQiLCJoaWRkZW4iLCJfaW5Eb2N1bWVudCIsInJlbW92ZUxpbmVXaWRnZXQiLCIkdXBkYXRlUm93cyIsIm5vV2lkZ2V0cyIsIiRvbGRXaWRnZXQiLCJhZGRMaW5lV2lkZ2V0IiwiekluZGV4IiwiY292ZXJHdXR0ZXIiLCJwaXhlbEhlaWdodCIsIiRmb2xkIiwib25XaWRnZXRDaGFuZ2VkIiwidzEiLCJnZXRXaWRnZXRzQXRSb3ciLCJjaGFuZ2VkV2lkZ2V0cyIsImZpeGVkV2lkdGgiLCJjb3ZlckxpbmUiLCJmdWxsV2lkdGgiLCJvbGRXaWRnZXQiLCJndXR0ZXJBbm5vIiwiY29tcGFyYXRvciIsImJpbmFyeVNlYXJjaCIsIm1hdGNoZWQiLCJmaW5kQW5ub3RhdGlvbnMiLCJhcnJvdyIsIm9ubW91c2Vkb3duIiwiUmVuZGVyZXIiLCJlZGl0IiwiX2lkIiwiZ2V0RWxlbWVudEJ5SWQiLCJlbnYiLCJ0YWdOYW1lIiwib2xkTm9kZSIsImNyZWF0ZUVkaXRTZXNzaW9uIiwidmVyc2lvbiJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/dist/flow.bundle.js b/dist/flow.bundle.js deleted file mode 100644 index 9f42924..0000000 --- a/dist/flow.bundle.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see flow.bundle.js.LICENSE.txt */ -(()=>{var e,t,r,n,a={935:(e,t,r)=>{"use strict";r.d(t,{Z:()=>s});var n=r(1864),a=r.n(n),o=r(352),i=r.n(o)()(a());i.push([e.id,"@import url(https://unpkg.com/boxicons@2.1.4/css/boxicons.min.css);"]),i.push([e.id,"/* Satoshi */\n@font-face {\n font-family: 'Satoshi';\n src: url('//cdn.fontshare.com/wf/NWBQYJIM7GCZ5XWD7D26ARB3VDY55ZRT/K63EV2KZIGKLE7RANQ2U42S6SVHU5RJ7/X6XYTKIVDUW7GZTZPZNN4EUM5KH54KHF.woff2') format('woff2'), url('//cdn.fontshare.com/wf/NWBQYJIM7GCZ5XWD7D26ARB3VDY55ZRT/K63EV2KZIGKLE7RANQ2U42S6SVHU5RJ7/X6XYTKIVDUW7GZTZPZNN4EUM5KH54KHF.woff') format('woff'), url('//cdn.fontshare.com/wf/NWBQYJIM7GCZ5XWD7D26ARB3VDY55ZRT/K63EV2KZIGKLE7RANQ2U42S6SVHU5RJ7/X6XYTKIVDUW7GZTZPZNN4EUM5KH54KHF.ttf') format('truetype');\n font-weight: 300 900;\n font-display: swap;\n font-style: normal;\n}\n@font-face {\n font-family: 'Satoshi';\n src: url('//cdn.fontshare.com/wf/3JZIFUW7KLFSPLVCIUI2DLGNIER6IFCX/MMP4RUF5LYGUAZS3DCJC3GJ6F6SAGKSN/E3NEPGEAHYCHR37DSBXHV33XCYYRE2CY.woff2') format('woff2'), url('//cdn.fontshare.com/wf/3JZIFUW7KLFSPLVCIUI2DLGNIER6IFCX/MMP4RUF5LYGUAZS3DCJC3GJ6F6SAGKSN/E3NEPGEAHYCHR37DSBXHV33XCYYRE2CY.woff') format('woff'), url('//cdn.fontshare.com/wf/3JZIFUW7KLFSPLVCIUI2DLGNIER6IFCX/MMP4RUF5LYGUAZS3DCJC3GJ6F6SAGKSN/E3NEPGEAHYCHR37DSBXHV33XCYYRE2CY.ttf') format('truetype');\n font-weight: 300 900;\n font-display: swap;\n font-style: italic;\n}\n:root {\n --text: #cdd6f4;\n --surface-2: #585b70;\n --surface-1: #45475a;\n --surface-0: #313244;\n --base: #1e1e2e;\n --mantle: #181825;\n --crust: #11111b;\n}\nbody,\nhtml {\n background-color: var(--crust);\n width: 100vw;\n height: 100vh;\n margin: 10px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n*::-webkit-scrollbar {\n display: none;\n}\n* {\n -ms-overflow-style: none;\n scrollbar-width: none;\n font-family: 'Satoshi', sans-serif;\n font-weight: 600;\n color: var(--text);\n}\n.bx {\n font-size: 25px;\n}\ntoolbar {\n width: 100%;\n display: flex;\n gap: 10px;\n margin-bottom: 10px;\n justify-content: center;\n}\ntoolbar > div {\n background: var(--base);\n padding: 5px;\n border-radius: 5px;\n box-shadow: 0 10px 10px rgba(0, 0, 0, 0.1), 0 0px 10px rgba(0, 0, 0, 0.1);\n height: 40px!important;\n display: flex;\n align-items: center;\n}\ntoolbar > div app {\n display: flex;\n gap: 10px;\n align-items: center;\n}\ntoolbar > div app img {\n aspect-ratio: 1 / 1;\n height: 2em;\n border-radius: 40%;\n}\nwindow-area {\n position: relative;\n width: calc(100% - 40px);\n margin-left: 20px;\n margin-bottom: 20px;\n height: 100%;\n overflow: hidden;\n}\nwindow-area window {\n background: var(--base);\n display: flex;\n flex-direction: column;\n border-radius: 5px;\n box-shadow: 0 10px 10px rgba(0, 0, 0, 0.2), 0 0px 10px rgba(0, 0, 0, 0.2);\n overflow: hidden;\n border: 1px solid rgba(255, 255, 255, 0.2);\n background: var(--crust);\n}\nwindow-area window window-header {\n height: 20px;\n padding: 7.5px;\n display: flex;\n align-items: center;\n gap: 7.5px;\n}\nwindow-area window window-header img {\n aspect-ratio: 1 / 1;\n height: 1.2em;\n border-radius: 40%;\n}\nwindow-area window window-content {\n height: 100%;\n border-radius: 10px 10px 0 0;\n background: var(--mantle);\n overflow: scroll;\n}\nwindow-area window window-content h1 {\n margin-top: 0;\n}\nlauncher {\n position: absolute;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n top: 0;\n background: rgba(0, 0, 0, 0.5);\n z-index: 99999999999999999999999;\n width: 100vw;\n height: calc(100vh + 20px);\n gap: 20px;\n transition: 0.2s opacity, 0.2s backdrop-filter;\n}\nlauncher apps {\n max-height: 70vh;\n padding: 20px;\n margin: 40px;\n display: flex;\n justify-content: center;\n gap: 40px;\n flex-wrap: wrap;\n}\nlauncher apps app {\n justify-content: center;\n display: flex;\n flex-direction: column;\n gap: 10px;\n height: max-content;\n text-align: center;\n}\nlauncher apps app img {\n width: 100px;\n border-radius: 40%;\n aspect-ratio: 1 / 1;\n}\nlauncher input {\n background: var(--mantle);\n border: 2px solid var(--crust);\n border-radius: 10px;\n padding: 10px;\n width: 300px;\n max-width: 100vw;\n text-align: center;\n transition: border 0.2s;\n}\nlauncher input:focus {\n outline: none;\n border: 2px solid var(--text);\n}\n.ace_editor * {\n font-family: monospace;\n}\n.ace-monokai .ace_marker-layer .ace_active-line {\n background: var(--mantle) !important;\n}\n.ace_layer.ace_gutter-layer.ace_folding-enabled {\n background: var(--mantle) !important;\n}\n.ace_content {\n background: var(--base) !important;\n}\n.ace_gutter-cell.ace_info {\n background: var(--crust) !important;\n}\n.ace-monokai .ace_marker-layer .ace_selection {\n background: var(--surface-0) !important;\n}\n","",{version:3,sources:["webpack://./src/style.less","https:\\api.fontshare.com\\v2\\css?f[]=satoshi@1,2&display=swap"],names:[],mappings:"AACA,YAAY;ACAZ;EACE,sBAAA;EACA,0cAAA;EAGA,oBAAA;EACA,kBAAA;EACA,kBAAA;ADAF;ACGA;EACE,sBAAA;EACA,0cAAA;EAGA,oBAAA;EACA,kBAAA;EACA,kBAAA;ADHF;AAZA;EACE,eAAA;EACA,oBAAA;EACA,oBAAA;EACA,oBAAA;EACA,eAAA;EACA,iBAAA;EACA,gBAAA;AAcF;AAXA;;EACE,8BAAA;EAEA,YAAA;EACA,aAAA;EAEA,YAAA;EAEA,aAAA;EACA,sBAAA;EAEA,gBAAA;AAUF;AANA;EACE,aAAA;AAQF;AALA;EACE,wBAAA;EACA,qBAAA;EAEA,kCAAA;EACA,gBAAA;EAEA,kBAAA;AAKF;AAHA;EACE,eAAA;AAKF;AAFA;EACE,WAAA;EACA,aAAA;EACA,SAAA;EACA,mBAAA;EACA,uBAAA;AAIF;AAFE;EACE,uBAAA;EACA,YAAA;EACA,kBAAA;EACA,yEAAA;EACA,sBAAA;EACA,aAAA;EACA,mBAAA;AAIJ;AAXE;EAUI,aAAA;EACA,SAAA;EACA,mBAAA;AAIN;AAhBE;EAeM,mBAAA;EACA,WAAA;EACA,kBAAA;AAIR;AAEA;EACE,kBAAA;EACA,wBAAA;EACA,iBAAA;EACA,mBAAA;EACA,YAAA;EACA,gBAAA;AAAF;AANA;EASI,uBAAA;EACA,aAAA;EACA,sBAAA;EACA,kBAAA;EACA,yEAAA;EACA,gBAAA;EACA,0CAAA;EACA,wBAAA;AAAJ;AAhBA;EAmBM,YAAA;EACA,cAAA;EACA,aAAA;EACA,mBAAA;EACA,UAAA;AAAN;AAvBA;EA0BQ,mBAAA;EACA,aAAA;EACA,kBAAA;AAAR;AA5BA;EAiCM,YAAA;EACA,4BAAA;EACA,yBAAA;EACA,gBAAA;AAFN;AAlCA;EAuCQ,aAAA;AAFR;AAQA;EACE,kBAAA;EACA,aAAA;EACA,sBAAA;EACA,uBAAA;EACA,mBAAA;EACA,MAAA;EACA,8BAAA;EACA,gCAAA;EACA,YAAA;EACA,0BAAA;EACA,SAAA;EACA,8CAAA;AANF;AANA;EAeI,gBAAA;EACA,aAAA;EACA,YAAA;EACA,aAAA;EACA,uBAAA;EACA,SAAA;EACA,eAAA;AANJ;AAfA;EAwBM,uBAAA;EACA,aAAA;EACA,sBAAA;EACA,SAAA;EACA,mBAAA;EACA,kBAAA;AANN;AAvBA;EAgCQ,YAAA;EACA,kBAAA;EACA,mBAAA;AANR;AA5BA;EAwCI,yBAAA;EACA,8BAAA;EACA,mBAAA;EACA,aAAA;EACA,YAAA;EACA,gBAAA;EACA,kBAAA;EACA,uBAAA;AATJ;AAWI;EACE,aAAA;EACA,6BAAA;AATN;AAcA;EACE,sBAAA;AAZF;AAeA;EACE,oCAAA;AAbF;AAgBA;EACE,oCAAA;AAdF;AAiBA;EACE,kCAAA;AAfF;AAkBA;EACE,mCAAA;AAhBF;AAmBA;EACE,uCAAA;AAjBF",sourcesContent:["@import url(https://unpkg.com/boxicons@2.1.4/css/boxicons.min.css);\n@import url(https://api.fontshare.com/v2/css?f[]=satoshi@1,2&display=swap);\n\n:root {\n --text: #cdd6f4;\n --surface-2: #585b70;\n --surface-1: #45475a;\n --surface-0: #313244;\n --base: #1e1e2e;\n --mantle: #181825;\n --crust: #11111b;\n}\n\nbody, html {\n background-color: var(--crust);\n\n width: 100vw;\n height: 100vh;\n\n margin: 10px;\n\n display: flex;\n flex-direction: column;\n\n overflow: hidden;\n}\n\n\n*::-webkit-scrollbar {\n display: none;\n}\n\n* {\n -ms-overflow-style: none;\n scrollbar-width: none;\n\n font-family: 'Satoshi', sans-serif;\n font-weight: 600;\n\n color: var(--text);\n}\n.bx {\n font-size: 25px;\n}\n\ntoolbar {\n width: 100%;\n display: flex;\n gap: 10px;\n margin-bottom: 10px;\n justify-content: center;\n\n & > div {\n background: var(--base);\n padding: 5px;\n border-radius: 5px;\n box-shadow: 0 10px 10px rgba(0, 0, 0, 0.1), 0 0px 10px rgba(0, 0, 0, 0.1);\n height: 40px!important;\n display: flex;\n align-items: center;\n\n app {\n display: flex;\n gap: 10px;\n align-items: center;\n\n img {\n aspect-ratio: 1 / 1;\n height: 2em;\n border-radius: 40%;\n }\n }\n }\n}\n\nwindow-area {\n position: relative;\n width: calc(100% - 40px);\n margin-left: 20px;\n margin-bottom: 20px;\n height: 100%;\n overflow: hidden;\n\n window {\n background: var(--base);\n display: flex;\n flex-direction: column;\n border-radius: 5px;\n box-shadow: 0 10px 10px rgba(0, 0, 0, 0.2), 0 0px 10px rgba(0, 0, 0, 0.2);\n overflow: hidden;\n border: 1px solid rgba(255, 255, 255, 0.2);\n background: var(--crust);\n \n window-header {\n height: 20px;\n padding: 7.5px;\n display: flex;\n align-items: center;\n gap: 7.5px;\n\n img {\n aspect-ratio: 1 / 1;\n height: 1.2em;\n border-radius: 40%;\n }\n }\n \n window-content {\n height: 100%;\n border-radius: 10px 10px 0 0;\n background: var(--mantle);\n overflow: scroll;\n\n h1 {\n margin-top: 0;\n }\n }\n }\n}\n\nlauncher {\n position: absolute;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n top: 0;\n background: rgba(0, 0, 0, 0.5);\n z-index: 99999999999999999999999;\n width: 100vw;\n height: calc(100vh + 20px);\n gap: 20px;\n transition: .2s opacity, .2s backdrop-filter;\n\n apps {\n max-height: 70vh;\n padding: 20px;\n margin: 40px;\n display: flex;\n justify-content: center;\n gap: 40px;\n flex-wrap: wrap;\n\n app {\n justify-content: center;\n display: flex;\n flex-direction: column;\n gap: 10px;\n height: max-content;\n text-align: center;\n\n img {\n width: 100px;\n border-radius: 40%;\n aspect-ratio: 1 / 1;\n }\n }\n }\n\n input {\n background: var(--mantle);\n border: 2px solid var(--crust);\n border-radius: 10px;\n padding: 10px;\n width: 300px;\n max-width: 100vw;\n text-align: center;\n transition: border .2s;\n\n &:focus {\n outline: none;\n border: 2px solid var(--text);\n }\n }\n}\n\n.ace_editor * {\n font-family: monospace;\n}\n\n.ace-monokai .ace_marker-layer .ace_active-line {\n background: var(--mantle)!important;\n}\n\n.ace_layer.ace_gutter-layer.ace_folding-enabled {\n background: var(--mantle)!important;\n}\n\n.ace_content {\n background: var(--base)!important;\n}\n\n.ace_gutter-cell.ace_info {\n background: var(--crust)!important;\n}\n\n.ace-monokai .ace_marker-layer .ace_selection {\n background: var(--surface-0)!important;\n}","/* Satoshi */\n@font-face {\n font-family: 'Satoshi';\n src: url('//cdn.fontshare.com/wf/NWBQYJIM7GCZ5XWD7D26ARB3VDY55ZRT/K63EV2KZIGKLE7RANQ2U42S6SVHU5RJ7/X6XYTKIVDUW7GZTZPZNN4EUM5KH54KHF.woff2') format('woff2'),\n url('//cdn.fontshare.com/wf/NWBQYJIM7GCZ5XWD7D26ARB3VDY55ZRT/K63EV2KZIGKLE7RANQ2U42S6SVHU5RJ7/X6XYTKIVDUW7GZTZPZNN4EUM5KH54KHF.woff') format('woff'),\n url('//cdn.fontshare.com/wf/NWBQYJIM7GCZ5XWD7D26ARB3VDY55ZRT/K63EV2KZIGKLE7RANQ2U42S6SVHU5RJ7/X6XYTKIVDUW7GZTZPZNN4EUM5KH54KHF.ttf') format('truetype');\n font-weight: 300 900;\n font-display: swap;\n font-style: normal;\n}\n\n@font-face {\n font-family: 'Satoshi';\n src: url('//cdn.fontshare.com/wf/3JZIFUW7KLFSPLVCIUI2DLGNIER6IFCX/MMP4RUF5LYGUAZS3DCJC3GJ6F6SAGKSN/E3NEPGEAHYCHR37DSBXHV33XCYYRE2CY.woff2') format('woff2'),\n url('//cdn.fontshare.com/wf/3JZIFUW7KLFSPLVCIUI2DLGNIER6IFCX/MMP4RUF5LYGUAZS3DCJC3GJ6F6SAGKSN/E3NEPGEAHYCHR37DSBXHV33XCYYRE2CY.woff') format('woff'),\n url('//cdn.fontshare.com/wf/3JZIFUW7KLFSPLVCIUI2DLGNIER6IFCX/MMP4RUF5LYGUAZS3DCJC3GJ6F6SAGKSN/E3NEPGEAHYCHR37DSBXHV33XCYYRE2CY.ttf') format('truetype');\n font-weight: 300 900;\n font-display: swap;\n font-style: italic;\n}\n\n"],sourceRoot:""}]);const s=i},4740:(e,t,r)=>{"use strict";var n=r(2821);function a(e,t){if(Array.isArray(t)){for(var r=0;r{"use strict";var n=/^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d:\d\d)?$/i,a=/t|\s/i,o={date:s,time:c,"date-time":function(e,t){if(e&&t){e=e.split(a),t=t.split(a);var r=s(e[0],t[0]);if(void 0!==r)return r||c(e[1],t[1])}}},i={type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1};function s(e,t){if(e&&t)return e>t?1:e(t=t[1]+t[2]+t[3]+(t[4]||""))?1:e{"use strict";e.exports={metaSchemaRef:function(e){var r=e._opts.defaultMeta;return"string"==typeof r?{$ref:r}:e.getSchema(t)?{$ref:t}:(console.warn("meta schema not defined"),{})}};var t="http://json-schema.org/draft-07/schema"},7768:e=>{"use strict";e.exports=function e(t){return e.definition={type:"object",macro:function(e,t){if(!e)return!0;var r=Object.keys(t.properties);return 0==r.length||{required:r}},metaSchema:{type:"boolean"},dependencies:["properties"]},t.addKeyword("allRequired",e.definition),t}},7907:e=>{"use strict";e.exports=function e(t){return e.definition={type:"object",macro:function(e){return 0==e.length||(1==e.length?{required:e}:{anyOf:e.map((function(e){return{required:[e]}}))})},metaSchema:{type:"array",items:{type:"string"}}},t.addKeyword("anyRequired",e.definition),t}},8716:(e,t,r)=>{"use strict";var n=r(2078);function a(e,t){for(var r=e.split("/"),n={},a=n,o=1;o{"use strict";function t(e,t){var o="data"+(t||"");if(!e)return o;for(var i,s=o,c=e.split("/"),u=1;u{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="valid"+a;if(n+="var "+f+" = undefined;",!1===e.opts.format)return n+" "+f+" = true; ";var h=e.schema.format,p=e.opts.$data&&h.$data,d="";if(p)n+=" var "+(m="format"+a)+" = formats["+e.util.getData(h.$data,o,e.dataPathArr)+"] , "+(v="compare"+a)+" = "+m+" && "+m+".compare;";else{var m;if(!(m=e.formats[h])||!m.compare)return n+" "+f+" = true; ";var v="formats"+e.util.getProperty(h)+".compare"}var y,g,w="formatMaximum"==t,b="formatExclusive"+(w?"Maximum":"Minimum"),E=e.schema[b],A=e.opts.$data&&E&&E.$data,P=w?"<":">",x="result"+a,S=e.opts.$data&&i&&i.$data;if(S?(n+=" var schema"+a+" = "+e.util.getData(i.$data,o,e.dataPathArr)+"; ",y="schema"+a):y=i,A){var O=e.util.getData(E.$data,o,e.dataPathArr),_="exclusive"+a,I="' + "+(D="op"+a)+" + '";n+=" var schemaExcl"+a+" = "+O+"; ",n+=" if (typeof "+(O="schemaExcl"+a)+" != 'boolean' && "+O+" !== undefined) { "+f+" = false; ";var R=b;(g=g||[]).push(n),n="",!1!==e.createErrors?(n+=" { keyword: '"+(R||"_formatExclusiveLimit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: {} ",!1!==e.opts.messages&&(n+=" , message: '"+b+" should be boolean' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var j=n;n=g.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+j+"]); ":n+=" validate.errors = ["+j+"]; return false; ":n+=" var err = "+j+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ",u&&(d+="}",n+=" else { "),S&&(n+=" if ("+y+" === undefined) "+f+" = true; else if (typeof "+y+" != 'string') "+f+" = false; else { ",d+="}"),p&&(n+=" if (!"+v+") "+f+" = true; else { ",d+="}"),n+=" var "+x+" = "+v+"("+l+", ",n+=S?""+y:""+e.util.toQuotedString(i),n+=" ); if ("+x+" === undefined) "+f+" = false; var "+_+" = "+O+" === true; if ("+f+" === undefined) { "+f+" = "+_+" ? "+x+" "+P+" 0 : "+x+" "+P+"= 0; } if (!"+f+") var op"+a+" = "+_+" ? '"+P+"' : '"+P+"=';"}else{I=P,(_=!0===E)||(I+="=");var D="'"+I+"'";S&&(n+=" if ("+y+" === undefined) "+f+" = true; else if (typeof "+y+" != 'string') "+f+" = false; else { ",d+="}"),p&&(n+=" if (!"+v+") "+f+" = true; else { ",d+="}"),n+=" var "+x+" = "+v+"("+l+", ",n+=S?""+y:""+e.util.toQuotedString(i),n+=" ); if ("+x+" === undefined) "+f+" = false; if ("+f+" === undefined) "+f+" = "+x+" "+P,_||(n+="="),n+=" 0;"}return n+=d+"if (!"+f+") { ",R=t,(g=g||[]).push(n),n="",!1!==e.createErrors?(n+=" { keyword: '"+(R||"_formatLimit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { comparison: "+D+", limit: ",n+=S?""+y:""+e.util.toQuotedString(i),n+=" , exclusive: "+_+" } ",!1!==e.opts.messages&&(n+=" , message: 'should be "+I+' "',n+=S?"' + "+y+" + '":""+e.util.escapeQuotes(i),n+="\"' "),e.opts.verbose&&(n+=" , schema: ",n+=S?"validate.schema"+s:""+e.util.toQuotedString(i),n+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",j=n,n=g.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+j+"]); ":n+=" validate.errors = ["+j+"]; return false; ":n+=" var err = "+j+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+"}"}},7903:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="valid"+a,h="key"+a,p="idx"+a,d="patternMatched"+a,m="dataProperties"+a,v="",y=e.opts.ownProperties;n+="var "+f+" = true;",y&&(n+=" var "+m+" = undefined;");var g=i;if(g)for(var w,b=-1,E=g.length-1;b{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="valid"+a,h="errs__"+a,p=e.util.copy(e),d="";p.level++;var m,v="valid"+p.level,y="ifPassed"+e.level,g=p.baseId;n+="var "+y+";";var w=i;if(w)for(var b,E=-1,A=w.length-1;E0:e.util.schemaHasRules(b.if,e.RULES.all))){n+=" var "+h+" = errors; ";var P=e.compositeRule;if(e.compositeRule=p.compositeRule=!0,p.createErrors=!1,p.schema=b.if,p.schemaPath=s+"["+E+"].if",p.errSchemaPath=c+"/"+E+"/if",n+=" "+e.validate(p)+" ",p.baseId=g,p.createErrors=!0,e.compositeRule=p.compositeRule=P,n+=" "+y+" = "+v+"; if ("+y+") { ","boolean"==typeof b.then){if(!1===b.then){(S=S||[]).push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'switch' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { caseIndex: "+E+" } ",!1!==e.opts.messages&&(n+=" , message: 'should pass \"switch\" keyword validation' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var x=n;n=S.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+x+"]); ":n+=" validate.errors = ["+x+"]; return false; ":n+=" var err = "+x+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}n+=" var "+v+" = "+b.then+"; "}else p.schema=b.then,p.schemaPath=s+"["+E+"].then",p.errSchemaPath=c+"/"+E+"/then",n+=" "+e.validate(p)+" ",p.baseId=g;n+=" } else { errors = "+h+"; if (vErrors !== null) { if ("+h+") vErrors.length = "+h+"; else vErrors = null; } } "}else if(n+=" "+y+" = true; ","boolean"==typeof b.then){var S;if(!1===b.then)(S=S||[]).push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'switch' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { caseIndex: "+E+" } ",!1!==e.opts.messages&&(n+=" , message: 'should pass \"switch\" keyword validation' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",x=n,n=S.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+x+"]); ":n+=" validate.errors = ["+x+"]; return false; ":n+=" var err = "+x+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";n+=" var "+v+" = "+b.then+"; "}else p.schema=b.then,p.schemaPath=s+"["+E+"].then",p.errSchemaPath=c+"/"+E+"/then",n+=" "+e.validate(p)+" ",p.baseId=g;m=b.continue}return n+(d+"var ")+f+" = "+v+";"}},2165:e=>{"use strict";var t={},r={timestamp:function(){return Date.now()},datetime:function(){return(new Date).toISOString()},date:function(){return(new Date).toISOString().slice(0,10)},time:function(){return(new Date).toISOString().slice(11)},random:function(){return Math.random()},randomint:function(e){var t=e&&e.max||2;return function(){return Math.floor(Math.random()*t)}},seq:function(e){var r=e&&e.name||"";return t[r]=t[r]||0,function(){return t[r]++}}};e.exports=function e(t){return e.definition={compile:function(e,t,r){var a={};for(var o in e){var i=e[o],s=n("string"==typeof i?i:i.func);a[o]=s.length?s(i.args):s}return r.opts.useDefaults&&!r.compositeRule?function(t){for(var n in e)void 0!==t[n]&&("empty"!=r.opts.useDefaults||null!==t[n]&&""!==t[n])||(t[n]=a[n]());return!0}:function(){return!0}},DEFAULTS:r,metaSchema:{type:"object",additionalProperties:{type:["string","object"],additionalProperties:!1,required:["func","args"],properties:{func:{type:"string"},args:{type:"object"}}}}},t.addKeyword("dynamicDefaults",e.definition),t;function n(e){var t=r[e];if(t)return t;throw new Error('invalid "dynamicDefaults" keyword property value: '+e)}}},5955:(e,t,r)=>{"use strict";e.exports=r(8435)("Maximum")},8436:(e,t,r)=>{"use strict";e.exports=r(8435)("Minimum")},2821:(e,t,r)=>{"use strict";e.exports={instanceof:r(5211),range:r(4210),regexp:r(9945),typeof:r(4414),dynamicDefaults:r(2165),allRequired:r(7768),anyRequired:r(7907),oneRequired:r(8647),prohibited:r(4528),uniqueItemProperties:r(5246),deepProperties:r(8716),deepRequired:r(9489),formatMinimum:r(8436),formatMaximum:r(5955),patternRequired:r(1389),switch:r(9901),select:r(3561),transform:r(1733)}},5211:(e,t,r)=>{"use strict";var n=r(2486).lW,a={Object,Array,Function,Number,String,Date,RegExp};e.exports=function e(t){return void 0!==n&&(a.Buffer=n),"undefined"!=typeof Promise&&(a.Promise=Promise),e.definition={compile:function(e){if("string"==typeof e){var t=r(e);return function(e){return e instanceof t}}var n=e.map(r);return function(e){for(var t=0;t{"use strict";e.exports=function e(t){return e.definition={type:"object",macro:function(e){return 0==e.length||(1==e.length?{required:e}:{oneOf:e.map((function(e){return{required:[e]}}))})},metaSchema:{type:"array",items:{type:"string"}}},t.addKeyword("oneRequired",e.definition),t}},1389:(e,t,r)=>{"use strict";e.exports=function e(t){return e.definition={type:"object",inline:r(7903),statements:!0,errors:"full",metaSchema:{type:"array",items:{type:"string",format:"regex"},uniqueItems:!0}},t.addKeyword("patternRequired",e.definition),t}},4528:e=>{"use strict";e.exports=function e(t){return e.definition={type:"object",macro:function(e){return 0==e.length||(1==e.length?{not:{required:e}}:{not:{anyOf:e.map((function(e){return{required:[e]}}))}})},metaSchema:{type:"array",items:{type:"string"}}},t.addKeyword("prohibited",e.definition),t}},4210:e=>{"use strict";e.exports=function e(t){return e.definition={type:"number",macro:function(e,t){var r=e[0],n=e[1],a=t.exclusiveRange;return function(e,t,r){if(void 0!==r&&"boolean"!=typeof r)throw new Error("Invalid schema for exclusiveRange keyword, should be boolean");if(e>t||r&&e==t)throw new Error("There are no numbers in range")}(r,n,a),!0===a?{exclusiveMinimum:r,exclusiveMaximum:n}:{minimum:r,maximum:n}},metaSchema:{type:"array",minItems:2,maxItems:2,items:{type:"number"}}},t.addKeyword("range",e.definition),t.addKeyword("exclusiveRange"),t}},9945:e=>{"use strict";e.exports=function e(t){return e.definition={type:"string",inline:function(e,t,r){return function(){try{if("object"==typeof r)return new RegExp(r.pattern,r.flags);var e=r.match(/^\/(.*)\/([gimuy]*)$/);if(e)return new RegExp(e[1],e[2]);throw new Error("cannot parse string into RegExp")}catch(e){throw console.error("regular expression",r,"is invalid"),e}}()+".test(data"+(e.dataLevel||"")+")"},metaSchema:{type:["string","object"],properties:{pattern:{type:"string"},flags:{type:"string"}},required:["pattern"],additionalProperties:!1}},t.addKeyword("regexp",e.definition),t}},3561:(e,t,r)=>{"use strict";var n=r(2078);e.exports=function e(t){if(!t._opts.$data)return console.warn("keyword select requires $data option"),t;var r=n.metaSchemaRef(t),a=[];return e.definition={validate:function e(t,r,n){if(void 0===n.selectCases)throw new Error('keyword "selectCases" is absent');var a=o(n,!1),i=a.cases[t];if(void 0===i&&(i=a.default),"boolean"==typeof i)return i;var s=i(r);return s||(e.errors=i.errors),s},$data:!0,metaSchema:{type:["string","number","boolean","null"]}},t.addKeyword("select",e.definition),t.addKeyword("selectCases",{compile:function(e,t){var r=o(t);for(var n in e)r.cases[n]=i(e[n]);return function(){return!0}},valid:!0,metaSchema:{type:"object",additionalProperties:r}}),t.addKeyword("selectDefault",{compile:function(e,t){return o(t).default=i(e),function(){return!0}},valid:!0,metaSchema:r}),t;function o(e,t){var r;return a.some((function(t){if(t.parentSchema===e)return r=t,!0})),r||!1===t||(r={parentSchema:e,cases:{},default:!0},a.push(r)),r}function i(e){return"boolean"==typeof e?e:t.compile(e)}}},9901:(e,t,r)=>{"use strict";var n=r(2078);e.exports=function e(t){if(!t.RULES.keywords.switch||!t.RULES.keywords.if){var a=n.metaSchemaRef(t);return e.definition={inline:r(8157),statements:!0,errors:"full",metaSchema:{type:"array",items:{required:["then"],properties:{if:a,then:{anyOf:[{type:"boolean"},a]},continue:{type:"boolean"}},additionalProperties:!1,dependencies:{continue:["if"]}}}},t.addKeyword("switch",e.definition),t}}},1733:e=>{"use strict";e.exports=function e(t){var r={trimLeft:function(e){return e.replace(/^[\s]+/,"")},trimRight:function(e){return e.replace(/[\s]+$/,"")},trim:function(e){return e.trim()},toLowerCase:function(e){return e.toLowerCase()},toUpperCase:function(e){return e.toUpperCase()},toEnumCase:function(e,t){return t.hash[n(e)]||e}};return e.definition={type:"string",errors:!1,modifying:!0,valid:!0,compile:function(e,t){var a;if(-1!==e.indexOf("toEnumCase")){if(a={hash:{}},!t.enum)throw new Error('Missing enum. To use `transform:["toEnumCase"]`, `enum:[...]` is required.');for(var o=t.enum.length;o--;o){var i=t.enum[o];if("string"==typeof i){var s=n(i);if(a.hash[s])throw new Error('Invalid enum uniqueness. To use `transform:["toEnumCase"]`, all values must be unique when case insensitive.');a.hash[s]=i}}}return function(t,n,o,i){if(o){for(var s=0,c=e.length;s{"use strict";var t=["undefined","string","number","object","function","boolean","symbol"];e.exports=function e(r){return e.definition={inline:function(e,t,r){var n="data"+(e.dataLevel||"");return"string"==typeof r?"typeof "+n+' == "'+r+'"':(r="validate.schema"+e.schemaPath+"."+t)+".indexOf(typeof "+n+") >= 0"},metaSchema:{anyOf:[{type:"string",enum:t},{type:"array",items:{type:"string",enum:t}}]}},r.addKeyword("typeof",e.definition),r}},5246:e=>{"use strict";var t=["number","integer","string","boolean","null"];e.exports=function e(r){return e.definition={type:"array",compile:function(e,r,n){var a=n.util.equal,o=function(e,r){return e.map((function(e){var n=r.items&&r.items.properties,a=n&&n[e]&&n[e].type;return Array.isArray(a)?a.indexOf("object")<0&&a.indexOf("array")<0:t.indexOf(a)>=0}))}(e,r);return function(t){if(t.length>1)for(var r=0;r{"use strict";var n=r(5689),a=r(3969),o=r(5255),i=r(4293),s=r(3508),c=r(3368),u=r(742),l=r(9394),f=r(3724);e.exports=y,y.prototype.validate=function(e,t){var r;if("string"==typeof e){if(!(r=this.getSchema(e)))throw new Error('no schema with key or ref "'+e+'"')}else{var n=this._addSchema(e);r=n.validate||this._compile(n)}var a=r(t);return!0!==r.$async&&(this.errors=r.errors),a},y.prototype.compile=function(e,t){var r=this._addSchema(e,void 0,t);return r.validate||this._compile(r)},y.prototype.addSchema=function(e,t,r,n){if(Array.isArray(e)){for(var o=0;o{"use strict";var t=e.exports=function(){this._cache={}};t.prototype.put=function(e,t){this._cache[e]=t},t.prototype.get=function(e){return this._cache[e]},t.prototype.del=function(e){delete this._cache[e]},t.prototype.clear=function(){this._cache={}}},9677:(e,t,r)=>{"use strict";var n=r(5359).MissingRef;e.exports=function e(t,r,a){var o=this;if("function"!=typeof this._opts.loadSchema)throw new Error("options.loadSchema should be a function");"function"==typeof r&&(a=r,r=void 0);var i=s(t).then((function(){var e=o._addSchema(t,void 0,r);return e.validate||c(e)}));return a&&i.then((function(e){a(null,e)}),a),i;function s(t){var r=t.$schema;return r&&!o.getSchema(r)?e.call(o,{$ref:r},!0):Promise.resolve()}function c(e){try{return o._compile(e)}catch(t){if(t instanceof n)return function(t){var n=t.missingSchema;if(u(n))throw new Error("Schema "+n+" is loaded but "+t.missingRef+" cannot be resolved");var a=o._loadingSchemas[n];return a||(a=o._loadingSchemas[n]=o._opts.loadSchema(n)).then(i,i),a.then((function(e){if(!u(n))return s(e).then((function(){u(n)||o.addSchema(e,n,void 0,r)}))})).then((function(){return c(e)}));function i(){delete o._loadingSchemas[n]}function u(e){return o._refs[e]||o._schemas[e]}}(t);throw t}}}},5359:(e,t,r)=>{"use strict";var n=r(3969);function a(e,t,r){this.message=r||a.message(e,t),this.missingRef=n.url(e,t),this.missingSchema=n.normalizeId(n.fullPath(this.missingRef))}function o(e){return e.prototype=Object.create(Error.prototype),e.prototype.constructor=e,e}e.exports={Validation:o((function(e){this.message="validation failed",this.errors=e,this.ajv=this.validation=!0})),MissingRef:o(a)},a.message=function(e,t){return"can't resolve reference "+t+" from id "+e}},3368:(e,t,r)=>{"use strict";var n=r(3724),a=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,o=[0,31,28,31,30,31,30,31,31,30,31,30,31],i=/^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d(?::?\d\d)?)?$/i,s=/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,c=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,u=/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,l=/^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-)*(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-)*(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i,f=/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,h=/^(?:\/(?:[^~/]|~0|~1)*)*$/,p=/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,d=/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/;function m(e){return e="full"==e?"full":"fast",n.copy(m[e])}function v(e){var t=e.match(a);if(!t)return!1;var r=+t[1],n=+t[2],i=+t[3];return n>=1&&n<=12&&i>=1&&i<=(2==n&&function(e){return e%4==0&&(e%100!=0||e%400==0)}(r)?29:o[n])}function y(e,t){var r=e.match(i);if(!r)return!1;var n=r[1],a=r[2],o=r[3],s=r[5];return(n<=23&&a<=59&&o<=59||23==n&&59==a&&60==o)&&(!t||s)}e.exports=m,m.fast={date:/^\d\d\d\d-[0-1]\d-[0-3]\d$/,time:/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,"date-time":/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,"uri-template":u,url:l,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,hostname:s,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:E,uuid:f,"json-pointer":h,"json-pointer-uri-fragment":p,"relative-json-pointer":d},m.full={date:v,time:y,"date-time":function(e){var t=e.split(g);return 2==t.length&&v(t[0])&&y(t[1],!0)},uri:function(e){return w.test(e)&&c.test(e)},"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":u,url:l,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:s,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:E,uuid:f,"json-pointer":h,"json-pointer-uri-fragment":p,"relative-json-pointer":d};var g=/t|\s/i,w=/\/|:/,b=/[^\\]\\Z/;function E(e){if(b.test(e))return!1;try{return new RegExp(e),!0}catch(e){return!1}}},5689:(e,t,r)=>{"use strict";var n=r(3969),a=r(3724),o=r(5359),i=r(3508),s=r(1869),c=a.ucs2length,u=r(2303),l=o.Validation;function f(e,t,r){var n=p.call(this,e,t,r);return n>=0?{index:n,compiling:!0}:(n=this._compilations.length,this._compilations[n]={schema:e,root:t,baseId:r},{index:n,compiling:!1})}function h(e,t,r){var n=p.call(this,e,t,r);n>=0&&this._compilations.splice(n,1)}function p(e,t,r){for(var n=0;n{"use strict";var n=r(7533),a=r(2303),o=r(3724),i=r(4293),s=r(500);function c(e,t,r){var n=this._refs[r];if("string"==typeof n){if(!this._refs[n])return c.call(this,e,t,n);n=this._refs[n]}if((n=n||this._schemas[r])instanceof i)return d(n.schema,this._opts.inlineRefs)?n.schema:n.validate||this._compile(n);var a,o,s,l=u.call(this,t,r);return l&&(a=l.schema,t=l.root,s=l.baseId),a instanceof i?o=a.validate||e.call(this,a.schema,t,void 0,s):void 0!==a&&(o=d(a,this._opts.inlineRefs)?a:e.call(this,a,t,void 0,s)),o}function u(e,t){var r=n.parse(t),a=g(r),o=y(this._getId(e.schema));if(0===Object.keys(e.schema).length||a!==o){var s=b(a),c=this._refs[s];if("string"==typeof c)return l.call(this,e,c,r);if(c instanceof i)c.validate||this._compile(c),e=c;else{if(!((c=this._schemas[s])instanceof i))return;if(c.validate||this._compile(c),s==b(t))return{schema:c,root:e,baseId:o};e=c}if(!e.schema)return;o=y(this._getId(e.schema))}return h.call(this,r,o,e.schema,e)}function l(e,t,r){var n=u.call(this,e,t);if(n){var a=n.schema,o=n.baseId;e=n.root;var i=this._getId(a);return i&&(o=E(o,i)),h.call(this,r,o,a,e)}}e.exports=c,c.normalizeId=b,c.fullPath=y,c.url=E,c.ids=function(e){var t=b(this._getId(e)),r={"":t},i={"":y(t,!1)},c={},u=this;return s(e,{allKeys:!0},(function(e,t,s,l,f,h,p){if(""!==t){var d=u._getId(e),m=r[l],v=i[l]+"/"+f;if(void 0!==p&&(v+="/"+("number"==typeof p?p:o.escapeFragment(p))),"string"==typeof d){d=m=b(m?n.resolve(m,d):d);var y=u._refs[d];if("string"==typeof y&&(y=u._refs[y]),y&&y.schema){if(!a(e,y.schema))throw new Error('id "'+d+'" resolves to more than one schema')}else if(d!=b(v))if("#"==d[0]){if(c[d]&&!a(e,c[d]))throw new Error('id "'+d+'" resolves to more than one schema');c[d]=e}else u._refs[d]=v}r[t]=m,i[t]=v}})),c},c.inlineRef=d,c.schema=u;var f=o.toHash(["properties","patternProperties","enum","dependencies","definitions"]);function h(e,t,r,n){if(e.fragment=e.fragment||"","/"==e.fragment.slice(0,1)){for(var a=e.fragment.split("/"),i=1;i{"use strict";var n=r(9646),a=r(3724).toHash;e.exports=function(){var e=[{type:"number",rules:[{maximum:["exclusiveMaximum"]},{minimum:["exclusiveMinimum"]},"multipleOf","format"]},{type:"string",rules:["maxLength","minLength","pattern","format"]},{type:"array",rules:["maxItems","minItems","items","contains","uniqueItems"]},{type:"object",rules:["maxProperties","minProperties","required","dependencies","propertyNames",{properties:["additionalProperties","patternProperties"]}]},{rules:["$ref","const","enum","not","anyOf","oneOf","allOf","if"]}],t=["type","$comment"];return e.all=a(t),e.types=a(["number","integer","string","array","object","boolean","null"]),e.forEach((function(r){r.rules=r.rules.map((function(r){var a;if("object"==typeof r){var o=Object.keys(r)[0];a=r[o],r=o,a.forEach((function(r){t.push(r),e.all[r]=!0}))}return t.push(r),e.all[r]={keyword:r,code:n[r],implements:a}})),e.all.$comment={keyword:"$comment",code:n.$comment},r.type&&(e.types[r.type]=r)})),e.keywords=a(t.concat(["$schema","$id","id","$data","$async","title","description","default","definitions","examples","readOnly","writeOnly","contentMediaType","contentEncoding","additionalItems","then","else"])),e.custom={},e}},4293:(e,t,r)=>{"use strict";var n=r(3724);e.exports=function(e){n.copy(e,this)}},6887:e=>{"use strict";e.exports=function(e){for(var t,r=0,n=e.length,a=0;a=55296&&t<=56319&&a{"use strict";function n(e,t,r,n){var a=n?" !== ":" === ",o=n?" || ":" && ",i=n?"!":"",s=n?"":"!";switch(e){case"null":return t+a+"null";case"array":return i+"Array.isArray("+t+")";case"object":return"("+i+t+o+"typeof "+t+a+'"object"'+o+s+"Array.isArray("+t+"))";case"integer":return"(typeof "+t+a+'"number"'+o+s+"("+t+" % 1)"+o+t+a+t+(r?o+i+"isFinite("+t+")":"")+")";case"number":return"(typeof "+t+a+'"'+e+'"'+(r?o+i+"isFinite("+t+")":"")+")";default:return"typeof "+t+a+'"'+e+'"'}}e.exports={copy:function(e,t){for(var r in t=t||{},e)t[r]=e[r];return t},checkDataType:n,checkDataTypes:function(e,t,r){if(1===e.length)return n(e[0],t,r,!0);var a="",i=o(e);for(var s in i.array&&i.object&&(a=i.null?"(":"(!"+t+" || ",a+="typeof "+t+' !== "object")',delete i.null,delete i.array,delete i.object),i.number&&delete i.integer,i)a+=(a?" && ":"")+n(s,t,r,!0);return a},coerceToTypes:function(e,t){if(Array.isArray(t)){for(var r=[],n=0;n=t)throw new Error("Cannot access property/index "+n+" levels up, current level is "+t);return r[t-n]}if(n>t)throw new Error("Cannot access data "+n+" levels up, current level is "+t);if(o="data"+(t-n||""),!a)return o}for(var s=o,u=a.split("/"),l=0;l{"use strict";var t=["multipleOf","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","additionalItems","maxItems","minItems","uniqueItems","maxProperties","minProperties","required","additionalProperties","enum","format","const"];e.exports=function(e,r){for(var n=0;n{"use strict";var n=r(6680);e.exports={$id:"https://github.com/ajv-validator/ajv/blob/master/lib/definition_schema.js",definitions:{simpleTypes:n.definitions.simpleTypes},type:"object",dependencies:{schema:["validate"],$data:["validate"],statements:["inline"],valid:{not:{required:["macro"]}}},properties:{type:n.properties.type,schema:{type:"boolean"},statements:{type:"boolean"},dependencies:{type:"array",items:{type:"string"}},metaSchema:{type:"object"},modifying:{type:"boolean"},valid:{type:"boolean"},$data:{type:"boolean"},async:{type:"boolean"},errors:{anyOf:[{type:"boolean"},{const:"full"}]}}}},1796:e=>{"use strict";e.exports=function(e,t,r){var n,a=" ",o=e.level,i=e.dataLevel,s=e.schema[t],c=e.schemaPath+e.util.getProperty(t),u=e.errSchemaPath+"/"+t,l=!e.opts.allErrors,f="data"+(i||""),h=e.opts.$data&&s&&s.$data;h?(a+=" var schema"+o+" = "+e.util.getData(s.$data,i,e.dataPathArr)+"; ",n="schema"+o):n=s;var p="maximum"==t,d=p?"exclusiveMaximum":"exclusiveMinimum",m=e.schema[d],v=e.opts.$data&&m&&m.$data,y=p?"<":">",g=p?">":"<",w=void 0;if(!h&&"number"!=typeof s&&void 0!==s)throw new Error(t+" must be number");if(!v&&void 0!==m&&"number"!=typeof m&&"boolean"!=typeof m)throw new Error(d+" must be number or boolean");if(v){var b,E=e.util.getData(m.$data,i,e.dataPathArr),A="exclusive"+o,P="exclType"+o,x="exclIsNumber"+o,S="' + "+(_="op"+o)+" + '";a+=" var schemaExcl"+o+" = "+E+"; ",a+=" var "+A+"; var "+P+" = typeof "+(E="schemaExcl"+o)+"; if ("+P+" != 'boolean' && "+P+" != 'undefined' && "+P+" != 'number') { ",w=d,(b=b||[]).push(a),a="",!1!==e.createErrors?(a+=" { keyword: '"+(w||"_exclusiveLimit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: {} ",!1!==e.opts.messages&&(a+=" , message: '"+d+" should be boolean' "),e.opts.verbose&&(a+=" , schema: validate.schema"+c+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+f+" "),a+=" } "):a+=" {} ";var O=a;a=b.pop(),!e.compositeRule&&l?e.async?a+=" throw new ValidationError(["+O+"]); ":a+=" validate.errors = ["+O+"]; return false; ":a+=" var err = "+O+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } else if ( ",h&&(a+=" ("+n+" !== undefined && typeof "+n+" != 'number') || "),a+=" "+P+" == 'number' ? ( ("+A+" = "+n+" === undefined || "+E+" "+y+"= "+n+") ? "+f+" "+g+"= "+E+" : "+f+" "+g+" "+n+" ) : ( ("+A+" = "+E+" === true) ? "+f+" "+g+"= "+n+" : "+f+" "+g+" "+n+" ) || "+f+" !== "+f+") { var op"+o+" = "+A+" ? '"+y+"' : '"+y+"='; ",void 0===s&&(w=d,u=e.errSchemaPath+"/"+d,n=E,h=v)}else if(S=y,(x="number"==typeof m)&&h){var _="'"+S+"'";a+=" if ( ",h&&(a+=" ("+n+" !== undefined && typeof "+n+" != 'number') || "),a+=" ( "+n+" === undefined || "+m+" "+y+"= "+n+" ? "+f+" "+g+"= "+m+" : "+f+" "+g+" "+n+" ) || "+f+" !== "+f+") { "}else x&&void 0===s?(A=!0,w=d,u=e.errSchemaPath+"/"+d,n=m,g+="="):(x&&(n=Math[p?"min":"max"](m,s)),m===(!x||n)?(A=!0,w=d,u=e.errSchemaPath+"/"+d,g+="="):(A=!1,S+="=")),_="'"+S+"'",a+=" if ( ",h&&(a+=" ("+n+" !== undefined && typeof "+n+" != 'number') || "),a+=" "+f+" "+g+" "+n+" || "+f+" !== "+f+") { ";return w=w||t,(b=b||[]).push(a),a="",!1!==e.createErrors?(a+=" { keyword: '"+(w||"_limit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: { comparison: "+_+", limit: "+n+", exclusive: "+A+" } ",!1!==e.opts.messages&&(a+=" , message: 'should be "+S+" ",a+=h?"' + "+n:n+"'"),e.opts.verbose&&(a+=" , schema: ",a+=h?"validate.schema"+c:""+s,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+f+" "),a+=" } "):a+=" {} ",O=a,a=b.pop(),!e.compositeRule&&l?e.async?a+=" throw new ValidationError(["+O+"]); ":a+=" validate.errors = ["+O+"]; return false; ":a+=" var err = "+O+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } ",l&&(a+=" else { "),a}},2407:e=>{"use strict";e.exports=function(e,t,r){var n,a=" ",o=e.level,i=e.dataLevel,s=e.schema[t],c=e.schemaPath+e.util.getProperty(t),u=e.errSchemaPath+"/"+t,l=!e.opts.allErrors,f="data"+(i||""),h=e.opts.$data&&s&&s.$data;if(h?(a+=" var schema"+o+" = "+e.util.getData(s.$data,i,e.dataPathArr)+"; ",n="schema"+o):n=s,!h&&"number"!=typeof s)throw new Error(t+" must be number");a+="if ( ",h&&(a+=" ("+n+" !== undefined && typeof "+n+" != 'number') || "),a+=" "+f+".length "+("maxItems"==t?">":"<")+" "+n+") { ";var p=t,d=d||[];d.push(a),a="",!1!==e.createErrors?(a+=" { keyword: '"+(p||"_limitItems")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: { limit: "+n+" } ",!1!==e.opts.messages&&(a+=" , message: 'should NOT have ",a+="maxItems"==t?"more":"fewer",a+=" than ",a+=h?"' + "+n+" + '":""+s,a+=" items' "),e.opts.verbose&&(a+=" , schema: ",a+=h?"validate.schema"+c:""+s,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+f+" "),a+=" } "):a+=" {} ";var m=a;return a=d.pop(),!e.compositeRule&&l?e.async?a+=" throw new ValidationError(["+m+"]); ":a+=" validate.errors = ["+m+"]; return false; ":a+=" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",l&&(a+=" else { "),a}},1250:e=>{"use strict";e.exports=function(e,t,r){var n,a=" ",o=e.level,i=e.dataLevel,s=e.schema[t],c=e.schemaPath+e.util.getProperty(t),u=e.errSchemaPath+"/"+t,l=!e.opts.allErrors,f="data"+(i||""),h=e.opts.$data&&s&&s.$data;if(h?(a+=" var schema"+o+" = "+e.util.getData(s.$data,i,e.dataPathArr)+"; ",n="schema"+o):n=s,!h&&"number"!=typeof s)throw new Error(t+" must be number");var p="maxLength"==t?">":"<";a+="if ( ",h&&(a+=" ("+n+" !== undefined && typeof "+n+" != 'number') || "),!1===e.opts.unicode?a+=" "+f+".length ":a+=" ucs2length("+f+") ",a+=" "+p+" "+n+") { ";var d=t,m=m||[];m.push(a),a="",!1!==e.createErrors?(a+=" { keyword: '"+(d||"_limitLength")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: { limit: "+n+" } ",!1!==e.opts.messages&&(a+=" , message: 'should NOT be ",a+="maxLength"==t?"longer":"shorter",a+=" than ",a+=h?"' + "+n+" + '":""+s,a+=" characters' "),e.opts.verbose&&(a+=" , schema: ",a+=h?"validate.schema"+c:""+s,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+f+" "),a+=" } "):a+=" {} ";var v=a;return a=m.pop(),!e.compositeRule&&l?e.async?a+=" throw new ValidationError(["+v+"]); ":a+=" validate.errors = ["+v+"]; return false; ":a+=" var err = "+v+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",l&&(a+=" else { "),a}},2596:e=>{"use strict";e.exports=function(e,t,r){var n,a=" ",o=e.level,i=e.dataLevel,s=e.schema[t],c=e.schemaPath+e.util.getProperty(t),u=e.errSchemaPath+"/"+t,l=!e.opts.allErrors,f="data"+(i||""),h=e.opts.$data&&s&&s.$data;if(h?(a+=" var schema"+o+" = "+e.util.getData(s.$data,i,e.dataPathArr)+"; ",n="schema"+o):n=s,!h&&"number"!=typeof s)throw new Error(t+" must be number");a+="if ( ",h&&(a+=" ("+n+" !== undefined && typeof "+n+" != 'number') || "),a+=" Object.keys("+f+").length "+("maxProperties"==t?">":"<")+" "+n+") { ";var p=t,d=d||[];d.push(a),a="",!1!==e.createErrors?(a+=" { keyword: '"+(p||"_limitProperties")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: { limit: "+n+" } ",!1!==e.opts.messages&&(a+=" , message: 'should NOT have ",a+="maxProperties"==t?"more":"fewer",a+=" than ",a+=h?"' + "+n+" + '":""+s,a+=" properties' "),e.opts.verbose&&(a+=" , schema: ",a+=h?"validate.schema"+c:""+s,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+f+" "),a+=" } "):a+=" {} ";var m=a;return a=d.pop(),!e.compositeRule&&l?e.async?a+=" throw new ValidationError(["+m+"]); ":a+=" validate.errors = ["+m+"]; return false; ":a+=" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",l&&(a+=" else { "),a}},9486:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.schema[t],o=e.schemaPath+e.util.getProperty(t),i=e.errSchemaPath+"/"+t,s=!e.opts.allErrors,c=e.util.copy(e),u="";c.level++;var l="valid"+c.level,f=c.baseId,h=!0,p=a;if(p)for(var d,m=-1,v=p.length-1;m0||!1===d:e.util.schemaHasRules(d,e.RULES.all))&&(h=!1,c.schema=d,c.schemaPath=o+"["+m+"]",c.errSchemaPath=i+"/"+m,n+=" "+e.validate(c)+" ",c.baseId=f,s&&(n+=" if ("+l+") { ",u+="}"));return s&&(n+=h?" if (true) { ":" "+u.slice(0,-1)+" "),n}},5347:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="valid"+a,h="errs__"+a,p=e.util.copy(e),d="";p.level++;var m="valid"+p.level,v=i.every((function(t){return e.opts.strictKeywords?"object"==typeof t&&Object.keys(t).length>0||!1===t:e.util.schemaHasRules(t,e.RULES.all)}));if(v){var y=p.baseId;n+=" var "+h+" = errors; var "+f+" = false; ";var g=e.compositeRule;e.compositeRule=p.compositeRule=!0;var w=i;if(w)for(var b,E=-1,A=w.length-1;E{"use strict";e.exports=function(e,t,r){var n=" ",a=e.schema[t],o=e.errSchemaPath+"/"+t,i=(e.opts.allErrors,e.util.toQuotedString(a));return!0===e.opts.$comment?n+=" console.log("+i+");":"function"==typeof e.opts.$comment&&(n+=" self._opts.$comment("+i+", "+e.util.toQuotedString(o)+", validate.root.schema);"),n}},2617:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="valid"+a,h=e.opts.$data&&i&&i.$data;h&&(n+=" var schema"+a+" = "+e.util.getData(i.$data,o,e.dataPathArr)+"; "),h||(n+=" var schema"+a+" = validate.schema"+s+";"),n+="var "+f+" = equal("+l+", schema"+a+"); if (!"+f+") { ";var p=p||[];p.push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'const' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { allowedValue: schema"+a+" } ",!1!==e.opts.messages&&(n+=" , message: 'should be equal to constant' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var d=n;return n=p.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+d+"]); ":n+=" validate.errors = ["+d+"]; return false; ":n+=" var err = "+d+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" }",u&&(n+=" else { "),n}},2119:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="valid"+a,h="errs__"+a,p=e.util.copy(e);p.level++;var d="valid"+p.level,m="i"+a,v=p.dataLevel=e.dataLevel+1,y="data"+v,g=e.baseId,w=e.opts.strictKeywords?"object"==typeof i&&Object.keys(i).length>0||!1===i:e.util.schemaHasRules(i,e.RULES.all);if(n+="var "+h+" = errors;var "+f+";",w){var b=e.compositeRule;e.compositeRule=p.compositeRule=!0,p.schema=i,p.schemaPath=s,p.errSchemaPath=c,n+=" var "+d+" = false; for (var "+m+" = 0; "+m+" < "+l+".length; "+m+"++) { ",p.errorPath=e.util.getPathExpr(e.errorPath,m,e.opts.jsonPointers,!0);var E=l+"["+m+"]";p.dataPathArr[v]=m;var A=e.validate(p);p.baseId=g,e.util.varOccurences(A,y)<2?n+=" "+e.util.varReplace(A,y,E)+" ":n+=" var "+y+" = "+E+"; "+A+" ",n+=" if ("+d+") break; } ",e.compositeRule=p.compositeRule=b,n+=" if (!"+d+") {"}else n+=" if ("+l+".length == 0) {";var P=P||[];P.push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'contains' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: {} ",!1!==e.opts.messages&&(n+=" , message: 'should contain a valid item' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var x=n;return n=P.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+x+"]); ":n+=" validate.errors = ["+x+"]; return false; ":n+=" var err = "+x+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } else { ",w&&(n+=" errors = "+h+"; if (vErrors !== null) { if ("+h+") vErrors.length = "+h+"; else vErrors = null; } "),e.opts.allErrors&&(n+=" } "),n}},1793:e=>{"use strict";e.exports=function(e,t,r){var n,a,o=" ",i=e.level,s=e.dataLevel,c=e.schema[t],u=e.schemaPath+e.util.getProperty(t),l=e.errSchemaPath+"/"+t,f=!e.opts.allErrors,h="data"+(s||""),p="valid"+i,d="errs__"+i,m=e.opts.$data&&c&&c.$data;m?(o+=" var schema"+i+" = "+e.util.getData(c.$data,s,e.dataPathArr)+"; ",a="schema"+i):a=c;var v,y,g,w,b,E=this,A="definition"+i,P=E.definition,x="";if(m&&P.$data){b="keywordValidate"+i;var S=P.validateSchema;o+=" var "+A+" = RULES.custom['"+t+"'].definition; var "+b+" = "+A+".validate;"}else{if(!(w=e.useCustomRule(E,c,e.schema,e)))return;a="validate.schema"+u,b=w.code,v=P.compile,y=P.inline,g=P.macro}var O=b+".errors",_="i"+i,I="ruleErr"+i,R=P.async;if(R&&!e.async)throw new Error("async keyword in sync schema");if(y||g||(o+=O+" = null;"),o+="var "+d+" = errors;var "+p+";",m&&P.$data&&(x+="}",o+=" if ("+a+" === undefined) { "+p+" = true; } else { ",S&&(x+="}",o+=" "+p+" = "+A+".validateSchema("+a+"); if ("+p+") { ")),y)P.statements?o+=" "+w.validate+" ":o+=" "+p+" = "+w.validate+"; ";else if(g){var j=e.util.copy(e);x="",j.level++;var D="valid"+j.level;j.schema=w.validate,j.schemaPath="";var $=e.compositeRule;e.compositeRule=j.compositeRule=!0;var L=e.validate(j).replace(/validate\.schema/g,b);e.compositeRule=j.compositeRule=$,o+=" "+L}else{(T=T||[]).push(o),o="",o+=" "+b+".call( ",e.opts.passContext?o+="this":o+="self",v||!1===P.schema?o+=" , "+h+" ":o+=" , "+a+" , "+h+" , validate.schema"+e.schemaPath+" ",o+=" , (dataPath || '')",'""'!=e.errorPath&&(o+=" + "+e.errorPath);var k=s?"data"+(s-1||""):"parentData",F=s?e.dataPathArr[s]:"parentDataProperty",C=o+=" , "+k+" , "+F+" , rootData ) ";o=T.pop(),!1===P.errors?(o+=" "+p+" = ",R&&(o+="await "),o+=C+"; "):o+=R?" var "+(O="customErrors"+i)+" = null; try { "+p+" = await "+C+"; } catch (e) { "+p+" = false; if (e instanceof ValidationError) "+O+" = e.errors; else throw e; } ":" "+O+" = null; "+p+" = "+C+"; "}if(P.modifying&&(o+=" if ("+k+") "+h+" = "+k+"["+F+"];"),o+=""+x,P.valid)f&&(o+=" if (true) { ");else{var T;o+=" if ( ",void 0===P.valid?(o+=" !",o+=g?""+D:""+p):o+=" "+!P.valid+" ",o+=") { ",n=E.keyword,(T=T||[]).push(o),o="",(T=T||[]).push(o),o="",!1!==e.createErrors?(o+=" { keyword: '"+(n||"custom")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { keyword: '"+E.keyword+"' } ",!1!==e.opts.messages&&(o+=" , message: 'should pass \""+E.keyword+"\" keyword validation' "),e.opts.verbose&&(o+=" , schema: validate.schema"+u+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),o+=" } "):o+=" {} ";var N=o;o=T.pop(),!e.compositeRule&&f?e.async?o+=" throw new ValidationError(["+N+"]); ":o+=" validate.errors = ["+N+"]; return false; ":o+=" var err = "+N+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";var B=o;o=T.pop(),y?P.errors?"full"!=P.errors&&(o+=" for (var "+_+"="+d+"; "+_+"{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="errs__"+a,h=e.util.copy(e),p="";h.level++;var d="valid"+h.level,m={},v={},y=e.opts.ownProperties;for(E in i)if("__proto__"!=E){var g=i[E],w=Array.isArray(g)?v:m;w[E]=g}n+="var "+f+" = errors;";var b=e.errorPath;for(var E in n+="var missing"+a+";",v)if((w=v[E]).length){if(n+=" if ( "+l+e.util.getProperty(E)+" !== undefined ",y&&(n+=" && Object.prototype.hasOwnProperty.call("+l+", '"+e.util.escapeQuotes(E)+"') "),u){n+=" && ( ";var A=w;if(A)for(var P=-1,x=A.length-1;P0||!1===g:e.util.schemaHasRules(g,e.RULES.all))&&(n+=" "+d+" = true; if ( "+l+e.util.getProperty(E)+" !== undefined ",y&&(n+=" && Object.prototype.hasOwnProperty.call("+l+", '"+e.util.escapeQuotes(E)+"') "),n+=") { ",h.schema=g,h.schemaPath=s+e.util.getProperty(E),h.errSchemaPath=c+"/"+e.util.escapeFragment(E),n+=" "+e.validate(h)+" ",h.baseId=F,n+=" } ",u&&(n+=" if ("+d+") { ",p+="}"));return u&&(n+=" "+p+" if ("+f+" == errors) {"),n}},9317:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="valid"+a,h=e.opts.$data&&i&&i.$data;h&&(n+=" var schema"+a+" = "+e.util.getData(i.$data,o,e.dataPathArr)+"; ");var p="i"+a,d="schema"+a;h||(n+=" var "+d+" = validate.schema"+s+";"),n+="var "+f+";",h&&(n+=" if (schema"+a+" === undefined) "+f+" = true; else if (!Array.isArray(schema"+a+")) "+f+" = false; else {"),n+=f+" = false;for (var "+p+"=0; "+p+"<"+d+".length; "+p+"++) if (equal("+l+", "+d+"["+p+"])) { "+f+" = true; break; }",h&&(n+=" } "),n+=" if (!"+f+") { ";var m=m||[];m.push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'enum' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { allowedValues: schema"+a+" } ",!1!==e.opts.messages&&(n+=" , message: 'should be equal to one of the allowed values' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var v=n;return n=m.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+v+"]); ":n+=" validate.errors = ["+v+"]; return false; ":n+=" var err = "+v+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" }",u&&(n+=" else { "),n}},8327:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||"");if(!1===e.opts.format)return u&&(n+=" if (true) { "),n;var f,h=e.opts.$data&&i&&i.$data;h?(n+=" var schema"+a+" = "+e.util.getData(i.$data,o,e.dataPathArr)+"; ",f="schema"+a):f=i;var p=e.opts.unknownFormats,d=Array.isArray(p);if(h)n+=" var "+(m="format"+a)+" = formats["+f+"]; var "+(v="isObject"+a)+" = typeof "+m+" == 'object' && !("+m+" instanceof RegExp) && "+m+".validate; var "+(y="formatType"+a)+" = "+v+" && "+m+".type || 'string'; if ("+v+") { ",e.async&&(n+=" var async"+a+" = "+m+".async; "),n+=" "+m+" = "+m+".validate; } if ( ",h&&(n+=" ("+f+" !== undefined && typeof "+f+" != 'string') || "),n+=" (","ignore"!=p&&(n+=" ("+f+" && !"+m+" ",d&&(n+=" && self._opts.unknownFormats.indexOf("+f+") == -1 "),n+=") || "),n+=" ("+m+" && "+y+" == '"+r+"' && !(typeof "+m+" == 'function' ? ",e.async?n+=" (async"+a+" ? await "+m+"("+l+") : "+m+"("+l+")) ":n+=" "+m+"("+l+") ",n+=" : "+m+".test("+l+"))))) {";else{var m;if(!(m=e.formats[i])){if("ignore"==p)return e.logger.warn('unknown format "'+i+'" ignored in schema at path "'+e.errSchemaPath+'"'),u&&(n+=" if (true) { "),n;if(d&&p.indexOf(i)>=0)return u&&(n+=" if (true) { "),n;throw new Error('unknown format "'+i+'" is used in schema at path "'+e.errSchemaPath+'"')}var v,y=(v="object"==typeof m&&!(m instanceof RegExp)&&m.validate)&&m.type||"string";if(v){var g=!0===m.async;m=m.validate}if(y!=r)return u&&(n+=" if (true) { "),n;if(g){if(!e.async)throw new Error("async format in sync schema");n+=" if (!(await "+(w="formats"+e.util.getProperty(i)+".validate")+"("+l+"))) { "}else{n+=" if (! ";var w="formats"+e.util.getProperty(i);v&&(w+=".validate"),n+="function"==typeof m?" "+w+"("+l+") ":" "+w+".test("+l+") ",n+=") { "}}var b=b||[];b.push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'format' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { format: ",n+=h?""+f:""+e.util.toQuotedString(i),n+=" } ",!1!==e.opts.messages&&(n+=" , message: 'should match format \"",n+=h?"' + "+f+" + '":""+e.util.escapeQuotes(i),n+="\"' "),e.opts.verbose&&(n+=" , schema: ",n+=h?"validate.schema"+s:""+e.util.toQuotedString(i),n+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var E=n;return n=b.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+E+"]); ":n+=" validate.errors = ["+E+"]; return false; ":n+=" var err = "+E+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ",u&&(n+=" else { "),n}},5926:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="valid"+a,h="errs__"+a,p=e.util.copy(e);p.level++;var d="valid"+p.level,m=e.schema.then,v=e.schema.else,y=void 0!==m&&(e.opts.strictKeywords?"object"==typeof m&&Object.keys(m).length>0||!1===m:e.util.schemaHasRules(m,e.RULES.all)),g=void 0!==v&&(e.opts.strictKeywords?"object"==typeof v&&Object.keys(v).length>0||!1===v:e.util.schemaHasRules(v,e.RULES.all)),w=p.baseId;if(y||g){var b;p.createErrors=!1,p.schema=i,p.schemaPath=s,p.errSchemaPath=c,n+=" var "+h+" = errors; var "+f+" = true; ";var E=e.compositeRule;e.compositeRule=p.compositeRule=!0,n+=" "+e.validate(p)+" ",p.baseId=w,p.createErrors=!0,n+=" errors = "+h+"; if (vErrors !== null) { if ("+h+") vErrors.length = "+h+"; else vErrors = null; } ",e.compositeRule=p.compositeRule=E,y?(n+=" if ("+d+") { ",p.schema=e.schema.then,p.schemaPath=e.schemaPath+".then",p.errSchemaPath=e.errSchemaPath+"/then",n+=" "+e.validate(p)+" ",p.baseId=w,n+=" "+f+" = "+d+"; ",y&&g?n+=" var "+(b="ifClause"+a)+" = 'then'; ":b="'then'",n+=" } ",g&&(n+=" else { ")):n+=" if (!"+d+") { ",g&&(p.schema=e.schema.else,p.schemaPath=e.schemaPath+".else",p.errSchemaPath=e.errSchemaPath+"/else",n+=" "+e.validate(p)+" ",p.baseId=w,n+=" "+f+" = "+d+"; ",y&&g?n+=" var "+(b="ifClause"+a)+" = 'else'; ":b="'else'",n+=" } "),n+=" if (!"+f+") { var err = ",!1!==e.createErrors?(n+=" { keyword: 'if' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { failingKeyword: "+b+" } ",!1!==e.opts.messages&&(n+=" , message: 'should match \"' + "+b+" + '\" schema' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",!e.compositeRule&&u&&(e.async?n+=" throw new ValidationError(vErrors); ":n+=" validate.errors = vErrors; return false; "),n+=" } ",u&&(n+=" else { ")}else u&&(n+=" if (true) { ");return n}},9646:(e,t,r)=>{"use strict";e.exports={$ref:r(2331),allOf:r(9486),anyOf:r(5347),$comment:r(4767),const:r(2617),contains:r(2119),dependencies:r(9115),enum:r(9317),format:r(8327),if:r(5926),items:r(392),maximum:r(1796),minimum:r(1796),maxItems:r(2407),minItems:r(2407),maxLength:r(1250),minLength:r(1250),maxProperties:r(2596),minProperties:r(2596),multipleOf:r(6039),not:r(7946),oneOf:r(9344),pattern:r(9737),properties:r(2537),propertyNames:r(2127),required:r(1204),uniqueItems:r(1985),validate:r(1869)}},392:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="valid"+a,h="errs__"+a,p=e.util.copy(e),d="";p.level++;var m="valid"+p.level,v="i"+a,y=p.dataLevel=e.dataLevel+1,g="data"+y,w=e.baseId;if(n+="var "+h+" = errors;var "+f+";",Array.isArray(i)){var b=e.schema.additionalItems;if(!1===b){n+=" "+f+" = "+l+".length <= "+i.length+"; ";var E=c;c=e.errSchemaPath+"/additionalItems",n+=" if (!"+f+") { ";var A=A||[];A.push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'additionalItems' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { limit: "+i.length+" } ",!1!==e.opts.messages&&(n+=" , message: 'should NOT have more than "+i.length+" items' "),e.opts.verbose&&(n+=" , schema: false , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var P=n;n=A.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+P+"]); ":n+=" validate.errors = ["+P+"]; return false; ":n+=" var err = "+P+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ",c=E,u&&(d+="}",n+=" else { ")}var x=i;if(x)for(var S,O=-1,_=x.length-1;O<_;)if(S=x[O+=1],e.opts.strictKeywords?"object"==typeof S&&Object.keys(S).length>0||!1===S:e.util.schemaHasRules(S,e.RULES.all)){n+=" "+m+" = true; if ("+l+".length > "+O+") { ";var I=l+"["+O+"]";p.schema=S,p.schemaPath=s+"["+O+"]",p.errSchemaPath=c+"/"+O,p.errorPath=e.util.getPathExpr(e.errorPath,O,e.opts.jsonPointers,!0),p.dataPathArr[y]=O;var R=e.validate(p);p.baseId=w,e.util.varOccurences(R,g)<2?n+=" "+e.util.varReplace(R,g,I)+" ":n+=" var "+g+" = "+I+"; "+R+" ",n+=" } ",u&&(n+=" if ("+m+") { ",d+="}")}"object"==typeof b&&(e.opts.strictKeywords?"object"==typeof b&&Object.keys(b).length>0||!1===b:e.util.schemaHasRules(b,e.RULES.all))&&(p.schema=b,p.schemaPath=e.schemaPath+".additionalItems",p.errSchemaPath=e.errSchemaPath+"/additionalItems",n+=" "+m+" = true; if ("+l+".length > "+i.length+") { for (var "+v+" = "+i.length+"; "+v+" < "+l+".length; "+v+"++) { ",p.errorPath=e.util.getPathExpr(e.errorPath,v,e.opts.jsonPointers,!0),I=l+"["+v+"]",p.dataPathArr[y]=v,R=e.validate(p),p.baseId=w,e.util.varOccurences(R,g)<2?n+=" "+e.util.varReplace(R,g,I)+" ":n+=" var "+g+" = "+I+"; "+R+" ",u&&(n+=" if (!"+m+") break; "),n+=" } } ",u&&(n+=" if ("+m+") { ",d+="}"))}else(e.opts.strictKeywords?"object"==typeof i&&Object.keys(i).length>0||!1===i:e.util.schemaHasRules(i,e.RULES.all))&&(p.schema=i,p.schemaPath=s,p.errSchemaPath=c,n+=" for (var "+v+" = 0; "+v+" < "+l+".length; "+v+"++) { ",p.errorPath=e.util.getPathExpr(e.errorPath,v,e.opts.jsonPointers,!0),I=l+"["+v+"]",p.dataPathArr[y]=v,R=e.validate(p),p.baseId=w,e.util.varOccurences(R,g)<2?n+=" "+e.util.varReplace(R,g,I)+" ":n+=" var "+g+" = "+I+"; "+R+" ",u&&(n+=" if (!"+m+") break; "),n+=" }");return u&&(n+=" "+d+" if ("+h+" == errors) {"),n}},6039:e=>{"use strict";e.exports=function(e,t,r){var n,a=" ",o=e.level,i=e.dataLevel,s=e.schema[t],c=e.schemaPath+e.util.getProperty(t),u=e.errSchemaPath+"/"+t,l=!e.opts.allErrors,f="data"+(i||""),h=e.opts.$data&&s&&s.$data;if(h?(a+=" var schema"+o+" = "+e.util.getData(s.$data,i,e.dataPathArr)+"; ",n="schema"+o):n=s,!h&&"number"!=typeof s)throw new Error(t+" must be number");a+="var division"+o+";if (",h&&(a+=" "+n+" !== undefined && ( typeof "+n+" != 'number' || "),a+=" (division"+o+" = "+f+" / "+n+", ",e.opts.multipleOfPrecision?a+=" Math.abs(Math.round(division"+o+") - division"+o+") > 1e-"+e.opts.multipleOfPrecision+" ":a+=" division"+o+" !== parseInt(division"+o+") ",a+=" ) ",h&&(a+=" ) "),a+=" ) { ";var p=p||[];p.push(a),a="",!1!==e.createErrors?(a+=" { keyword: 'multipleOf' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: { multipleOf: "+n+" } ",!1!==e.opts.messages&&(a+=" , message: 'should be multiple of ",a+=h?"' + "+n:n+"'"),e.opts.verbose&&(a+=" , schema: ",a+=h?"validate.schema"+c:""+s,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+f+" "),a+=" } "):a+=" {} ";var d=a;return a=p.pop(),!e.compositeRule&&l?e.async?a+=" throw new ValidationError(["+d+"]); ":a+=" validate.errors = ["+d+"]; return false; ":a+=" var err = "+d+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",l&&(a+=" else { "),a}},7946:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="errs__"+a,h=e.util.copy(e);h.level++;var p="valid"+h.level;if(e.opts.strictKeywords?"object"==typeof i&&Object.keys(i).length>0||!1===i:e.util.schemaHasRules(i,e.RULES.all)){h.schema=i,h.schemaPath=s,h.errSchemaPath=c,n+=" var "+f+" = errors; ";var d,m=e.compositeRule;e.compositeRule=h.compositeRule=!0,h.createErrors=!1,h.opts.allErrors&&(d=h.opts.allErrors,h.opts.allErrors=!1),n+=" "+e.validate(h)+" ",h.createErrors=!0,d&&(h.opts.allErrors=d),e.compositeRule=h.compositeRule=m,n+=" if ("+p+") { ";var v=v||[];v.push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'not' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: {} ",!1!==e.opts.messages&&(n+=" , message: 'should NOT be valid' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var y=n;n=v.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+y+"]); ":n+=" validate.errors = ["+y+"]; return false; ":n+=" var err = "+y+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } else { errors = "+f+"; if (vErrors !== null) { if ("+f+") vErrors.length = "+f+"; else vErrors = null; } ",e.opts.allErrors&&(n+=" } ")}else n+=" var err = ",!1!==e.createErrors?(n+=" { keyword: 'not' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: {} ",!1!==e.opts.messages&&(n+=" , message: 'should NOT be valid' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",u&&(n+=" if (false) { ");return n}},9344:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="valid"+a,h="errs__"+a,p=e.util.copy(e),d="";p.level++;var m="valid"+p.level,v=p.baseId,y="prevValid"+a,g="passingSchemas"+a;n+="var "+h+" = errors , "+y+" = false , "+f+" = false , "+g+" = null; ";var w=e.compositeRule;e.compositeRule=p.compositeRule=!0;var b=i;if(b)for(var E,A=-1,P=b.length-1;A0||!1===E:e.util.schemaHasRules(E,e.RULES.all))?(p.schema=E,p.schemaPath=s+"["+A+"]",p.errSchemaPath=c+"/"+A,n+=" "+e.validate(p)+" ",p.baseId=v):n+=" var "+m+" = true; ",A&&(n+=" if ("+m+" && "+y+") { "+f+" = false; "+g+" = ["+g+", "+A+"]; } else { ",d+="}"),n+=" if ("+m+") { "+f+" = "+y+" = true; "+g+" = "+A+"; }";return e.compositeRule=p.compositeRule=w,n+=d+"if (!"+f+") { var err = ",!1!==e.createErrors?(n+=" { keyword: 'oneOf' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { passingSchemas: "+g+" } ",!1!==e.opts.messages&&(n+=" , message: 'should match exactly one schema in oneOf' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",!e.compositeRule&&u&&(e.async?n+=" throw new ValidationError(vErrors); ":n+=" validate.errors = vErrors; return false; "),n+="} else { errors = "+h+"; if (vErrors !== null) { if ("+h+") vErrors.length = "+h+"; else vErrors = null; }",e.opts.allErrors&&(n+=" } "),n}},9737:e=>{"use strict";e.exports=function(e,t,r){var n,a=" ",o=e.level,i=e.dataLevel,s=e.schema[t],c=e.schemaPath+e.util.getProperty(t),u=e.errSchemaPath+"/"+t,l=!e.opts.allErrors,f="data"+(i||""),h=e.opts.$data&&s&&s.$data;h?(a+=" var schema"+o+" = "+e.util.getData(s.$data,i,e.dataPathArr)+"; ",n="schema"+o):n=s,a+="if ( ",h&&(a+=" ("+n+" !== undefined && typeof "+n+" != 'string') || "),a+=" !"+(h?"(new RegExp("+n+"))":e.usePattern(s))+".test("+f+") ) { ";var p=p||[];p.push(a),a="",!1!==e.createErrors?(a+=" { keyword: 'pattern' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: { pattern: ",a+=h?""+n:""+e.util.toQuotedString(s),a+=" } ",!1!==e.opts.messages&&(a+=" , message: 'should match pattern \"",a+=h?"' + "+n+" + '":""+e.util.escapeQuotes(s),a+="\"' "),e.opts.verbose&&(a+=" , schema: ",a+=h?"validate.schema"+c:""+e.util.toQuotedString(s),a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+f+" "),a+=" } "):a+=" {} ";var d=a;return a=p.pop(),!e.compositeRule&&l?e.async?a+=" throw new ValidationError(["+d+"]); ":a+=" validate.errors = ["+d+"]; return false; ":a+=" var err = "+d+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",l&&(a+=" else { "),a}},2537:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="errs__"+a,h=e.util.copy(e),p="";h.level++;var d="valid"+h.level,m="key"+a,v="idx"+a,y=h.dataLevel=e.dataLevel+1,g="data"+y,w="dataProperties"+a,b=Object.keys(i||{}).filter(L),E=e.schema.patternProperties||{},A=Object.keys(E).filter(L),P=e.schema.additionalProperties,x=b.length||A.length,S=!1===P,O="object"==typeof P&&Object.keys(P).length,_=e.opts.removeAdditional,I=S||O||_,R=e.opts.ownProperties,j=e.baseId,D=e.schema.required;if(D&&(!e.opts.$data||!D.$data)&&D.length8)n+=" || validate.schema"+s+".hasOwnProperty("+m+") ";else{var k=b;if(k)for(var F=-1,C=k.length-1;F0||!1===W:e.util.schemaHasRules(W,e.RULES.all)){var Z=e.util.getProperty(Q),ee=(Y=l+Z,G&&void 0!==W.default);if(h.schema=W,h.schemaPath=s+Z,h.errSchemaPath=c+"/"+e.util.escapeFragment(Q),h.errorPath=e.util.getPath(e.errorPath,Q,e.opts.jsonPointers),h.dataPathArr[y]=e.util.toQuotedString(Q),z=e.validate(h),h.baseId=j,e.util.varOccurences(z,g)<2){z=e.util.varReplace(z,g,Y);var te=Y}else te=g,n+=" var "+g+" = "+Y+"; ";if(ee)n+=" "+z+" ";else{if($&&$[Q]){n+=" if ( "+te+" === undefined ",R&&(n+=" || ! Object.prototype.hasOwnProperty.call("+l+", '"+e.util.escapeQuotes(Q)+"') "),n+=") { "+d+" = false; ",M=e.errorPath,V=c;var re,ne=e.util.escapeQuotes(Q);e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPath(M,Q,e.opts.jsonPointers)),c=e.errSchemaPath+"/required",(re=re||[]).push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'required' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { missingProperty: '"+ne+"' } ",!1!==e.opts.messages&&(n+=" , message: '",e.opts._errorDataPathProperty?n+="is a required property":n+="should have required property \\'"+ne+"\\'",n+="' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",q=n,n=re.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+q+"]); ":n+=" validate.errors = ["+q+"]; return false; ":n+=" var err = "+q+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",c=V,e.errorPath=M,n+=" } else { "}else u?(n+=" if ( "+te+" === undefined ",R&&(n+=" || ! Object.prototype.hasOwnProperty.call("+l+", '"+e.util.escapeQuotes(Q)+"') "),n+=") { "+d+" = true; } else { "):(n+=" if ("+te+" !== undefined ",R&&(n+=" && Object.prototype.hasOwnProperty.call("+l+", '"+e.util.escapeQuotes(Q)+"') "),n+=" ) { ");n+=" "+z+" } "}}u&&(n+=" if ("+d+") { ",p+="}")}}if(A.length){var ae=A;if(ae)for(var oe,ie=-1,se=ae.length-1;ie0||!1===W:e.util.schemaHasRules(W,e.RULES.all))&&(h.schema=W,h.schemaPath=e.schemaPath+".patternProperties"+e.util.getProperty(oe),h.errSchemaPath=e.errSchemaPath+"/patternProperties/"+e.util.escapeFragment(oe),n+=R?" "+w+" = "+w+" || Object.keys("+l+"); for (var "+v+"=0; "+v+"<"+w+".length; "+v+"++) { var "+m+" = "+w+"["+v+"]; ":" for (var "+m+" in "+l+") { ",n+=" if ("+e.usePattern(oe)+".test("+m+")) { ",h.errorPath=e.util.getPathExpr(e.errorPath,m,e.opts.jsonPointers),Y=l+"["+m+"]",h.dataPathArr[y]=m,z=e.validate(h),h.baseId=j,e.util.varOccurences(z,g)<2?n+=" "+e.util.varReplace(z,g,Y)+" ":n+=" var "+g+" = "+Y+"; "+z+" ",u&&(n+=" if (!"+d+") break; "),n+=" } ",u&&(n+=" else "+d+" = true; "),n+=" } ",u&&(n+=" if ("+d+") { ",p+="}"))}return u&&(n+=" "+p+" if ("+f+" == errors) {"),n}},2127:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="errs__"+a,h=e.util.copy(e);h.level++;var p="valid"+h.level;if(n+="var "+f+" = errors;",e.opts.strictKeywords?"object"==typeof i&&Object.keys(i).length>0||!1===i:e.util.schemaHasRules(i,e.RULES.all)){h.schema=i,h.schemaPath=s,h.errSchemaPath=c;var d="key"+a,m="idx"+a,v="i"+a,y="' + "+d+" + '",g="data"+(h.dataLevel=e.dataLevel+1),w="dataProperties"+a,b=e.opts.ownProperties,E=e.baseId;b&&(n+=" var "+w+" = undefined; "),n+=b?" "+w+" = "+w+" || Object.keys("+l+"); for (var "+m+"=0; "+m+"<"+w+".length; "+m+"++) { var "+d+" = "+w+"["+m+"]; ":" for (var "+d+" in "+l+") { ",n+=" var startErrs"+a+" = errors; ";var A=d,P=e.compositeRule;e.compositeRule=h.compositeRule=!0;var x=e.validate(h);h.baseId=E,e.util.varOccurences(x,g)<2?n+=" "+e.util.varReplace(x,g,A)+" ":n+=" var "+g+" = "+A+"; "+x+" ",e.compositeRule=h.compositeRule=P,n+=" if (!"+p+") { for (var "+v+"=startErrs"+a+"; "+v+"{"use strict";e.exports=function(e,t,r){var n,a,o=" ",i=e.level,s=e.dataLevel,c=e.schema[t],u=e.errSchemaPath+"/"+t,l=!e.opts.allErrors,f="data"+(s||""),h="valid"+i;if("#"==c||"#/"==c)e.isRoot?(n=e.async,a="validate"):(n=!0===e.root.schema.$async,a="root.refVal[0]");else{var p=e.resolveRef(e.baseId,c,e.isRoot);if(void 0===p){var d=e.MissingRefError.message(e.baseId,c);if("fail"==e.opts.missingRefs){e.logger.error(d),(g=g||[]).push(o),o="",!1!==e.createErrors?(o+=" { keyword: '$ref' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: { ref: '"+e.util.escapeQuotes(c)+"' } ",!1!==e.opts.messages&&(o+=" , message: 'can\\'t resolve reference "+e.util.escapeQuotes(c)+"' "),e.opts.verbose&&(o+=" , schema: "+e.util.toQuotedString(c)+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+f+" "),o+=" } "):o+=" {} ";var m=o;o=g.pop(),!e.compositeRule&&l?e.async?o+=" throw new ValidationError(["+m+"]); ":o+=" validate.errors = ["+m+"]; return false; ":o+=" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",l&&(o+=" if (false) { ")}else{if("ignore"!=e.opts.missingRefs)throw new e.MissingRefError(e.baseId,c,d);e.logger.warn(d),l&&(o+=" if (true) { ")}}else if(p.inline){var v=e.util.copy(e);v.level++;var y="valid"+v.level;v.schema=p.schema,v.schemaPath="",v.errSchemaPath=c,o+=" "+e.validate(v).replace(/validate\.schema/g,p.code)+" ",l&&(o+=" if ("+y+") { ")}else n=!0===p.$async||e.async&&!1!==p.$async,a=p.code}if(a){var g;(g=g||[]).push(o),o="",e.opts.passContext?o+=" "+a+".call(this, ":o+=" "+a+"( ",o+=" "+f+", (dataPath || '')",'""'!=e.errorPath&&(o+=" + "+e.errorPath);var w=o+=" , "+(s?"data"+(s-1||""):"parentData")+" , "+(s?e.dataPathArr[s]:"parentDataProperty")+", rootData) ";if(o=g.pop(),n){if(!e.async)throw new Error("async schema referenced by sync schema");l&&(o+=" var "+h+"; "),o+=" try { await "+w+"; ",l&&(o+=" "+h+" = true; "),o+=" } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; ",l&&(o+=" "+h+" = false; "),o+=" } ",l&&(o+=" if ("+h+") { ")}else o+=" if (!"+w+") { if (vErrors === null) vErrors = "+a+".errors; else vErrors = vErrors.concat("+a+".errors); errors = vErrors.length; } ",l&&(o+=" else { ")}return o}},1204:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="valid"+a,h=e.opts.$data&&i&&i.$data;h&&(n+=" var schema"+a+" = "+e.util.getData(i.$data,o,e.dataPathArr)+"; ");var p="schema"+a;if(!h)if(i.length0||!1===w:e.util.schemaHasRules(w,e.RULES.all))||(d[d.length]=v)}}else d=i;if(h||d.length){var b=e.errorPath,E=h||d.length>=e.opts.loopRequired,A=e.opts.ownProperties;if(u)if(n+=" var missing"+a+"; ",E){h||(n+=" var "+p+" = validate.schema"+s+"; ");var P="' + "+(R="schema"+a+"["+(_="i"+a)+"]")+" + '";e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPathExpr(b,R,e.opts.jsonPointers)),n+=" var "+f+" = true; ",h&&(n+=" if (schema"+a+" === undefined) "+f+" = true; else if (!Array.isArray(schema"+a+")) "+f+" = false; else {"),n+=" for (var "+_+" = 0; "+_+" < "+p+".length; "+_+"++) { "+f+" = "+l+"["+p+"["+_+"]] !== undefined ",A&&(n+=" && Object.prototype.hasOwnProperty.call("+l+", "+p+"["+_+"]) "),n+="; if (!"+f+") break; } ",h&&(n+=" } "),n+=" if (!"+f+") { ",(S=S||[]).push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'required' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { missingProperty: '"+P+"' } ",!1!==e.opts.messages&&(n+=" , message: '",e.opts._errorDataPathProperty?n+="is a required property":n+="should have required property \\'"+P+"\\'",n+="' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var x=n;n=S.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+x+"]); ":n+=" validate.errors = ["+x+"]; return false; ":n+=" var err = "+x+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } else { "}else{n+=" if ( ";var S,O=d;if(O)for(var _=-1,I=O.length-1;_{"use strict";e.exports=function(e,t,r){var n,a=" ",o=e.level,i=e.dataLevel,s=e.schema[t],c=e.schemaPath+e.util.getProperty(t),u=e.errSchemaPath+"/"+t,l=!e.opts.allErrors,f="data"+(i||""),h="valid"+o,p=e.opts.$data&&s&&s.$data;if(p?(a+=" var schema"+o+" = "+e.util.getData(s.$data,i,e.dataPathArr)+"; ",n="schema"+o):n=s,(s||p)&&!1!==e.opts.uniqueItems){p&&(a+=" var "+h+"; if ("+n+" === false || "+n+" === undefined) "+h+" = true; else if (typeof "+n+" != 'boolean') "+h+" = false; else { "),a+=" var i = "+f+".length , "+h+" = true , j; if (i > 1) { ";var d=e.schema.items&&e.schema.items.type,m=Array.isArray(d);if(!d||"object"==d||"array"==d||m&&(d.indexOf("object")>=0||d.indexOf("array")>=0))a+=" outer: for (;i--;) { for (j = i; j--;) { if (equal("+f+"[i], "+f+"[j])) { "+h+" = false; break outer; } } } ";else{a+=" var itemIndices = {}, item; for (;i--;) { var item = "+f+"[i]; ";var v="checkDataType"+(m?"s":"");a+=" if ("+e.util[v](d,"item",e.opts.strictNumbers,!0)+") continue; ",m&&(a+=" if (typeof item == 'string') item = '\"' + item; "),a+=" if (typeof itemIndices[item] == 'number') { "+h+" = false; j = itemIndices[item]; break; } itemIndices[item] = i; } "}a+=" } ",p&&(a+=" } "),a+=" if (!"+h+") { ";var y=y||[];y.push(a),a="",!1!==e.createErrors?(a+=" { keyword: 'uniqueItems' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: { i: i, j: j } ",!1!==e.opts.messages&&(a+=" , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' "),e.opts.verbose&&(a+=" , schema: ",a+=p?"validate.schema"+c:""+s,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+f+" "),a+=" } "):a+=" {} ";var g=a;a=y.pop(),!e.compositeRule&&l?e.async?a+=" throw new ValidationError(["+g+"]); ":a+=" validate.errors = ["+g+"]; return false; ":a+=" var err = "+g+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } ",l&&(a+=" else { ")}else l&&(a+=" if (true) { ");return a}},1869:e=>{"use strict";e.exports=function(e,t,r){var n="",a=!0===e.schema.$async,o=e.util.schemaHasRulesExcept(e.schema,e.RULES.all,"$ref"),i=e.self._getId(e.schema);if(e.opts.strictKeywords){var s=e.util.schemaUnknownRules(e.schema,e.RULES.keywords);if(s){var c="unknown keyword: "+s;if("log"!==e.opts.strictKeywords)throw new Error(c);e.logger.warn(c)}}if(e.isTop&&(n+=" var validate = ",a&&(e.async=!0,n+="async "),n+="function(data, dataPath, parentData, parentDataProperty, rootData) { 'use strict'; ",i&&(e.opts.sourceCode||e.opts.processCode)&&(n+=" /*# sourceURL="+i+" */ ")),"boolean"==typeof e.schema||!o&&!e.schema.$ref){t="false schema";var u=e.level,l=e.dataLevel,f=e.schema[t],h=e.schemaPath+e.util.getProperty(t),p=e.errSchemaPath+"/"+t,d=!e.opts.allErrors,m="data"+(l||""),v="valid"+u;if(!1===e.schema){e.isTop?d=!0:n+=" var "+v+" = false; ",(Y=Y||[]).push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'false schema' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(p)+" , params: {} ",!1!==e.opts.messages&&(n+=" , message: 'boolean schema is false' "),e.opts.verbose&&(n+=" , schema: false , parentSchema: validate.schema"+e.schemaPath+" , data: "+m+" "),n+=" } "):n+=" {} ";var y=n;n=Y.pop(),!e.compositeRule&&d?e.async?n+=" throw new ValidationError(["+y+"]); ":n+=" validate.errors = ["+y+"]; return false; ":n+=" var err = "+y+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}else e.isTop?n+=a?" return data; ":" validate.errors = null; return true; ":n+=" var "+v+" = true; ";return e.isTop&&(n+=" }; return validate; "),n}if(e.isTop){var g=e.isTop;if(u=e.level=0,l=e.dataLevel=0,m="data",e.rootId=e.resolve.fullPath(e.self._getId(e.root.schema)),e.baseId=e.baseId||e.rootId,delete e.isTop,e.dataPathArr=[""],void 0!==e.schema.default&&e.opts.useDefaults&&e.opts.strictDefaults){var w="default is ignored in the schema root";if("log"!==e.opts.strictDefaults)throw new Error(w);e.logger.warn(w)}n+=" var vErrors = null; ",n+=" var errors = 0; ",n+=" if (rootData === undefined) rootData = data; "}else{if(u=e.level,m="data"+((l=e.dataLevel)||""),i&&(e.baseId=e.resolve.url(e.baseId,i)),a&&!e.async)throw new Error("async schema in sync schema");n+=" var errs_"+u+" = errors;"}v="valid"+u,d=!e.opts.allErrors;var b="",E="",A=e.schema.type,P=Array.isArray(A);if(A&&e.opts.nullable&&!0===e.schema.nullable&&(P?-1==A.indexOf("null")&&(A=A.concat("null")):"null"!=A&&(A=[A,"null"],P=!0)),P&&1==A.length&&(A=A[0],P=!1),e.schema.$ref&&o){if("fail"==e.opts.extendRefs)throw new Error('$ref: validation keywords used in schema at path "'+e.errSchemaPath+'" (see option extendRefs)');!0!==e.opts.extendRefs&&(o=!1,e.logger.warn('$ref: keywords ignored in schema at path "'+e.errSchemaPath+'"'))}if(e.schema.$comment&&e.opts.$comment&&(n+=" "+e.RULES.all.$comment.code(e,"$comment")),A){if(e.opts.coerceTypes)var x=e.util.coerceToTypes(e.opts.coerceTypes,A);var S=e.RULES.types[A];if(x||P||!0===S||S&&!X(S)){h=e.schemaPath+".type",p=e.errSchemaPath+"/type",h=e.schemaPath+".type",p=e.errSchemaPath+"/type";var O=P?"checkDataTypes":"checkDataType";if(n+=" if ("+e.util[O](A,m,e.opts.strictNumbers,!0)+") { ",x){var _="dataType"+u,I="coerced"+u;n+=" var "+_+" = typeof "+m+"; var "+I+" = undefined; ","array"==e.opts.coerceTypes&&(n+=" if ("+_+" == 'object' && Array.isArray("+m+") && "+m+".length == 1) { "+m+" = "+m+"[0]; "+_+" = typeof "+m+"; if ("+e.util.checkDataType(e.schema.type,m,e.opts.strictNumbers)+") "+I+" = "+m+"; } "),n+=" if ("+I+" !== undefined) ; ";var R=x;if(R)for(var j,D=-1,$=R.length-1;D<$;)"string"==(j=R[D+=1])?n+=" else if ("+_+" == 'number' || "+_+" == 'boolean') "+I+" = '' + "+m+"; else if ("+m+" === null) "+I+" = ''; ":"number"==j||"integer"==j?(n+=" else if ("+_+" == 'boolean' || "+m+" === null || ("+_+" == 'string' && "+m+" && "+m+" == +"+m+" ","integer"==j&&(n+=" && !("+m+" % 1)"),n+=")) "+I+" = +"+m+"; "):"boolean"==j?n+=" else if ("+m+" === 'false' || "+m+" === 0 || "+m+" === null) "+I+" = false; else if ("+m+" === 'true' || "+m+" === 1) "+I+" = true; ":"null"==j?n+=" else if ("+m+" === '' || "+m+" === 0 || "+m+" === false) "+I+" = null; ":"array"==e.opts.coerceTypes&&"array"==j&&(n+=" else if ("+_+" == 'string' || "+_+" == 'number' || "+_+" == 'boolean' || "+m+" == null) "+I+" = ["+m+"]; ");n+=" else { ",(Y=Y||[]).push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'type' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(p)+" , params: { type: '",n+=P?""+A.join(","):""+A,n+="' } ",!1!==e.opts.messages&&(n+=" , message: 'should be ",n+=P?""+A.join(","):""+A,n+="' "),e.opts.verbose&&(n+=" , schema: validate.schema"+h+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+m+" "),n+=" } "):n+=" {} ",y=n,n=Y.pop(),!e.compositeRule&&d?e.async?n+=" throw new ValidationError(["+y+"]); ":n+=" validate.errors = ["+y+"]; return false; ":n+=" var err = "+y+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } if ("+I+" !== undefined) { ";var L=l?"data"+(l-1||""):"parentData";n+=" "+m+" = "+I+"; ",l||(n+="if ("+L+" !== undefined)"),n+=" "+L+"["+(l?e.dataPathArr[l]:"parentDataProperty")+"] = "+I+"; } "}else(Y=Y||[]).push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'type' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(p)+" , params: { type: '",n+=P?""+A.join(","):""+A,n+="' } ",!1!==e.opts.messages&&(n+=" , message: 'should be ",n+=P?""+A.join(","):""+A,n+="' "),e.opts.verbose&&(n+=" , schema: validate.schema"+h+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+m+" "),n+=" } "):n+=" {} ",y=n,n=Y.pop(),!e.compositeRule&&d?e.async?n+=" throw new ValidationError(["+y+"]); ":n+=" validate.errors = ["+y+"]; return false; ":n+=" var err = "+y+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";n+=" } "}}if(e.schema.$ref&&!o)n+=" "+e.RULES.all.$ref.code(e,"$ref")+" ",d&&(n+=" } if (errors === ",n+=g?"0":"errs_"+u,n+=") { ",E+="}");else{var k=e.RULES;if(k)for(var F=-1,C=k.length-1;F{"use strict";var n=/^[a-z_$][a-z0-9_$-]*$/i,a=r(1793),o=r(5868);e.exports={add:function(e,t){var r=this.RULES;if(r.keywords[e])throw new Error("Keyword "+e+" is already defined");if(!n.test(e))throw new Error("Keyword "+e+" is not a valid identifier");if(t){this.validateKeyword(t,!0);var o=t.type;if(Array.isArray(o))for(var i=0;i{"use strict";function t(e,t,a){e instanceof RegExp&&(e=r(e,a)),t instanceof RegExp&&(t=r(t,a));var o=n(e,t,a);return o&&{start:o[0],end:o[1],pre:a.slice(0,o[0]),body:a.slice(o[0]+e.length,o[1]),post:a.slice(o[1]+t.length)}}function r(e,t){var r=t.match(e);return r?r[0]:null}function n(e,t,r){var n,a,o,i,s,c=r.indexOf(e),u=r.indexOf(t,c+1),l=c;if(c>=0&&u>0){if(e===t)return[c,u];for(n=[],o=r.length;l>=0&&!s;)l==c?(n.push(l),c=r.indexOf(e,l+1)):1==n.length?s=[n.pop(),u]:((a=n.pop())=0?c:u;n.length&&(s=[o,i])}return s}e.exports=t,t.range=n},5155:(e,t)=>{"use strict";t.byteLength=function(e){var t=s(e),r=t[0],n=t[1];return 3*(r+n)/4-n},t.toByteArray=function(e){var t,r,o=s(e),i=o[0],c=o[1],u=new a(function(e,t,r){return 3*(t+r)/4-r}(0,i,c)),l=0,f=c>0?i-4:i;for(r=0;r>16&255,u[l++]=t>>8&255,u[l++]=255&t;return 2===c&&(t=n[e.charCodeAt(r)]<<2|n[e.charCodeAt(r+1)]>>4,u[l++]=255&t),1===c&&(t=n[e.charCodeAt(r)]<<10|n[e.charCodeAt(r+1)]<<4|n[e.charCodeAt(r+2)]>>2,u[l++]=t>>8&255,u[l++]=255&t),u},t.fromByteArray=function(e){for(var t,n=e.length,a=n%3,o=[],i=16383,s=0,u=n-a;su?u:s+i));return 1===a?(t=e[n-1],o.push(r[t>>2]+r[t<<4&63]+"==")):2===a&&(t=(e[n-2]<<8)+e[n-1],o.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"=")),o.join("")};for(var r=[],n=[],a="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0;i<64;++i)r[i]=o[i],n[o.charCodeAt(i)]=i;function s(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function c(e,t,n){for(var a,o,i=[],s=t;s>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return i.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},8098:(e,t,r)=>{var n=r(1787),a=r(8639);e.exports=function(e){return e?("{}"===e.substr(0,2)&&(e="\\{\\}"+e.substr(2)),y(function(e){return e.split("\\\\").join(o).split("\\{").join(i).split("\\}").join(s).split("\\,").join(c).split("\\.").join(u)}(e),!0).map(f)):[]};var o="\0SLASH"+Math.random()+"\0",i="\0OPEN"+Math.random()+"\0",s="\0CLOSE"+Math.random()+"\0",c="\0COMMA"+Math.random()+"\0",u="\0PERIOD"+Math.random()+"\0";function l(e){return parseInt(e,10)==e?parseInt(e,10):e.charCodeAt(0)}function f(e){return e.split(o).join("\\").split(i).join("{").split(s).join("}").split(c).join(",").split(u).join(".")}function h(e){if(!e)return[""];var t=[],r=a("{","}",e);if(!r)return e.split(",");var n=r.pre,o=r.body,i=r.post,s=n.split(",");s[s.length-1]+="{"+o+"}";var c=h(i);return i.length&&(s[s.length-1]+=c.shift(),s.push.apply(s,c)),t.push.apply(t,s),t}function p(e){return"{"+e+"}"}function d(e){return/^-?0\d/.test(e)}function m(e,t){return e<=t}function v(e,t){return e>=t}function y(e,t){var r=[],o=a("{","}",e);if(!o||/\$$/.test(o.pre))return[e];var i,c=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(o.body),u=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(o.body),f=c||u,g=o.body.indexOf(",")>=0;if(!f&&!g)return o.post.match(/,.*\}/)?y(e=o.pre+"{"+o.body+s+o.post):[e];if(f)i=o.body.split(/\.\./);else if(1===(i=h(o.body)).length&&1===(i=y(i[0],!1).map(p)).length)return(E=o.post.length?y(o.post,!1):[""]).map((function(e){return o.pre+i[0]+e}));var w,b=o.pre,E=o.post.length?y(o.post,!1):[""];if(f){var A=l(i[0]),P=l(i[1]),x=Math.max(i[0].length,i[1].length),S=3==i.length?Math.abs(l(i[2])):1,O=m;P0){var D=new Array(j+1).join("0");R=I<0?"-"+D+R.slice(1):D+R}}w.push(R)}}else w=n(i,(function(e){return y(e,!1)}));for(var $=0;${ace.define("ace/theme/monokai",["require","exports","module","ace/lib/dom"],(function(e,t,r){t.isDark=!0,t.cssClass="ace-monokai",t.cssText=".ace-monokai .ace_gutter {background: #2F3129;color: #8F908A}.ace-monokai .ace_print-margin {width: 1px;background: #555651}.ace-monokai {background-color: #272822;color: #F8F8F2}.ace-monokai .ace_cursor {color: #F8F8F0}.ace-monokai .ace_marker-layer .ace_selection {background: #49483E}.ace-monokai.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #272822;}.ace-monokai .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-monokai .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #49483E}.ace-monokai .ace_marker-layer .ace_active-line {background: #202020}.ace-monokai .ace_gutter-active-line {background-color: #272727}.ace-monokai .ace_marker-layer .ace_selected-word {border: 1px solid #49483E}.ace-monokai .ace_invisible {color: #52524d}.ace-monokai .ace_entity.ace_name.ace_tag,.ace-monokai .ace_keyword,.ace-monokai .ace_meta.ace_tag,.ace-monokai .ace_storage {color: #F92672}.ace-monokai .ace_punctuation,.ace-monokai .ace_punctuation.ace_tag {color: #fff}.ace-monokai .ace_constant.ace_character,.ace-monokai .ace_constant.ace_language,.ace-monokai .ace_constant.ace_numeric,.ace-monokai .ace_constant.ace_other {color: #AE81FF}.ace-monokai .ace_invalid {color: #F8F8F0;background-color: #F92672}.ace-monokai .ace_invalid.ace_deprecated {color: #F8F8F0;background-color: #AE81FF}.ace-monokai .ace_support.ace_constant,.ace-monokai .ace_support.ace_function {color: #66D9EF}.ace-monokai .ace_fold {background-color: #A6E22E;border-color: #F8F8F2}.ace-monokai .ace_storage.ace_type,.ace-monokai .ace_support.ace_class,.ace-monokai .ace_support.ace_type {font-style: italic;color: #66D9EF}.ace-monokai .ace_entity.ace_name.ace_function,.ace-monokai .ace_entity.ace_other,.ace-monokai .ace_entity.ace_other.ace_attribute-name,.ace-monokai .ace_variable {color: #A6E22E}.ace-monokai .ace_variable.ace_parameter {font-style: italic;color: #FD971F}.ace-monokai .ace_string {color: #E6DB74}.ace-monokai .ace_comment {color: #75715E}.ace-monokai .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y}",e("../lib/dom").importCssString(t.cssText,t.cssClass)}))},2486:(e,t,r)=>{"use strict";const n=r(5155),a=r(4525),o="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;t.lW=c,t.h2=50;const i=2147483647;function s(e){if(e>i)throw new RangeError('The value "'+e+'" is invalid for option "size"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,c.prototype),t}function c(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return f(e)}return u(e,t,r)}function u(e,t,r){if("string"==typeof e)return function(e,t){if("string"==typeof t&&""!==t||(t="utf8"),!c.isEncoding(t))throw new TypeError("Unknown encoding: "+t);const r=0|m(e,t);let n=s(r);const a=n.write(e,t);return a!==r&&(n=n.slice(0,a)),n}(e,t);if(ArrayBuffer.isView(e))return function(e){if(Q(e,Uint8Array)){const t=new Uint8Array(e);return p(t.buffer,t.byteOffset,t.byteLength)}return h(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(Q(e,ArrayBuffer)||e&&Q(e.buffer,ArrayBuffer))return p(e,t,r);if("undefined"!=typeof SharedArrayBuffer&&(Q(e,SharedArrayBuffer)||e&&Q(e.buffer,SharedArrayBuffer)))return p(e,t,r);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');const n=e.valueOf&&e.valueOf();if(null!=n&&n!==e)return c.from(n,t,r);const a=function(e){if(c.isBuffer(e)){const t=0|d(e.length),r=s(t);return 0===r.length||e.copy(r,0,0,t),r}return void 0!==e.length?"number"!=typeof e.length||J(e.length)?s(0):h(e):"Buffer"===e.type&&Array.isArray(e.data)?h(e.data):void 0}(e);if(a)return a;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return c.from(e[Symbol.toPrimitive]("string"),t,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function l(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function f(e){return l(e),s(e<0?0:0|d(e))}function h(e){const t=e.length<0?0:0|d(e.length),r=s(t);for(let n=0;n=i)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i.toString(16)+" bytes");return 0|e}function m(e,t){if(c.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||Q(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const r=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let a=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return z(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return G(e).length;default:if(a)return n?-1:z(e).length;t=(""+t).toLowerCase(),a=!0}}function v(e,t,r){let n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return j(this,t,r);case"utf8":case"utf-8":return O(this,t,r);case"ascii":return I(this,t,r);case"latin1":case"binary":return R(this,t,r);case"base64":return S(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return D(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function y(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function g(e,t,r,n,a){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),J(r=+r)&&(r=a?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(a)return-1;r=e.length-1}else if(r<0){if(!a)return-1;r=0}if("string"==typeof t&&(t=c.from(t,n)),c.isBuffer(t))return 0===t.length?-1:w(e,t,r,n,a);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?a?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):w(e,[t],r,n,a);throw new TypeError("val must be string, number or Buffer")}function w(e,t,r,n,a){let o,i=1,s=e.length,c=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;i=2,s/=2,c/=2,r/=2}function u(e,t){return 1===i?e[t]:e.readUInt16BE(t*i)}if(a){let n=-1;for(o=r;os&&(r=s-c),o=r;o>=0;o--){let r=!0;for(let n=0;na&&(n=a):n=a;const o=t.length;let i;for(n>o/2&&(n=o/2),i=0;i>8,a=r%256,o.push(a),o.push(n);return o}(t,e.length-r),e,r,n)}function S(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function O(e,t,r){r=Math.min(e.length,r);const n=[];let a=t;for(;a239?4:t>223?3:t>191?2:1;if(a+i<=r){let r,n,s,c;switch(i){case 1:t<128&&(o=t);break;case 2:r=e[a+1],128==(192&r)&&(c=(31&t)<<6|63&r,c>127&&(o=c));break;case 3:r=e[a+1],n=e[a+2],128==(192&r)&&128==(192&n)&&(c=(15&t)<<12|(63&r)<<6|63&n,c>2047&&(c<55296||c>57343)&&(o=c));break;case 4:r=e[a+1],n=e[a+2],s=e[a+3],128==(192&r)&&128==(192&n)&&128==(192&s)&&(c=(15&t)<<18|(63&r)<<12|(63&n)<<6|63&s,c>65535&&c<1114112&&(o=c))}}null===o?(o=65533,i=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|1023&o),n.push(o),a+=i}return function(e){const t=e.length;if(t<=_)return String.fromCharCode.apply(String,e);let r="",n=0;for(;nn.length?(c.isBuffer(t)||(t=c.from(t)),t.copy(n,a)):Uint8Array.prototype.set.call(n,t,a);else{if(!c.isBuffer(t))throw new TypeError('"list" argument must be an Array of Buffers');t.copy(n,a)}a+=t.length}return n},c.byteLength=m,c.prototype._isBuffer=!0,c.prototype.swap16=function(){const e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;tr&&(e+=" ... "),""},o&&(c.prototype[o]=c.prototype.inspect),c.prototype.compare=function(e,t,r,n,a){if(Q(e,Uint8Array)&&(e=c.from(e,e.offset,e.byteLength)),!c.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===a&&(a=this.length),t<0||r>e.length||n<0||a>this.length)throw new RangeError("out of range index");if(n>=a&&t>=r)return 0;if(n>=a)return-1;if(t>=r)return 1;if(this===e)return 0;let o=(a>>>=0)-(n>>>=0),i=(r>>>=0)-(t>>>=0);const s=Math.min(o,i),u=this.slice(n,a),l=e.slice(t,r);for(let e=0;e>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}const a=this.length-t;if((void 0===r||r>a)&&(r=a),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let o=!1;for(;;)switch(n){case"hex":return b(this,e,t,r);case"utf8":case"utf-8":return E(this,e,t,r);case"ascii":case"latin1":case"binary":return A(this,e,t,r);case"base64":return P(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,e,t,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const _=4096;function I(e,t,r){let n="";r=Math.min(e.length,r);for(let a=t;an)&&(r=n);let a="";for(let n=t;nr)throw new RangeError("Trying to access beyond buffer length")}function L(e,t,r,n,a,o){if(!c.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>a||te.length)throw new RangeError("Index out of range")}function k(e,t,r,n,a){V(t,n,a,e,r,7);let o=Number(t&BigInt(4294967295));e[r++]=o,o>>=8,e[r++]=o,o>>=8,e[r++]=o,o>>=8,e[r++]=o;let i=Number(t>>BigInt(32)&BigInt(4294967295));return e[r++]=i,i>>=8,e[r++]=i,i>>=8,e[r++]=i,i>>=8,e[r++]=i,r}function F(e,t,r,n,a){V(t,n,a,e,r,7);let o=Number(t&BigInt(4294967295));e[r+7]=o,o>>=8,e[r+6]=o,o>>=8,e[r+5]=o,o>>=8,e[r+4]=o;let i=Number(t>>BigInt(32)&BigInt(4294967295));return e[r+3]=i,i>>=8,e[r+2]=i,i>>=8,e[r+1]=i,i>>=8,e[r]=i,r+8}function C(e,t,r,n,a,o){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function T(e,t,r,n,o){return t=+t,r>>>=0,o||C(e,0,r,4),a.write(e,t,r,n,23,4),r+4}function N(e,t,r,n,o){return t=+t,r>>>=0,o||C(e,0,r,8),a.write(e,t,r,n,52,8),r+8}c.prototype.slice=function(e,t){const r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,t>>>=0,r||$(e,t,this.length);let n=this[e],a=1,o=0;for(;++o>>=0,t>>>=0,r||$(e,t,this.length);let n=this[e+--t],a=1;for(;t>0&&(a*=256);)n+=this[e+--t]*a;return n},c.prototype.readUint8=c.prototype.readUInt8=function(e,t){return e>>>=0,t||$(e,1,this.length),this[e]},c.prototype.readUint16LE=c.prototype.readUInt16LE=function(e,t){return e>>>=0,t||$(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUint16BE=c.prototype.readUInt16BE=function(e,t){return e>>>=0,t||$(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUint32LE=c.prototype.readUInt32LE=function(e,t){return e>>>=0,t||$(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUint32BE=c.prototype.readUInt32BE=function(e,t){return e>>>=0,t||$(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readBigUInt64LE=W((function(e){q(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||K(e,this.length-8);const n=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,a=this[++e]+256*this[++e]+65536*this[++e]+r*2**24;return BigInt(n)+(BigInt(a)<>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||K(e,this.length-8);const n=t*2**24+65536*this[++e]+256*this[++e]+this[++e],a=this[++e]*2**24+65536*this[++e]+256*this[++e]+r;return(BigInt(n)<>>=0,t>>>=0,r||$(e,t,this.length);let n=this[e],a=1,o=0;for(;++o=a&&(n-=Math.pow(2,8*t)),n},c.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||$(e,t,this.length);let n=t,a=1,o=this[e+--n];for(;n>0&&(a*=256);)o+=this[e+--n]*a;return a*=128,o>=a&&(o-=Math.pow(2,8*t)),o},c.prototype.readInt8=function(e,t){return e>>>=0,t||$(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){e>>>=0,t||$(e,2,this.length);const r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},c.prototype.readInt16BE=function(e,t){e>>>=0,t||$(e,2,this.length);const r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},c.prototype.readInt32LE=function(e,t){return e>>>=0,t||$(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return e>>>=0,t||$(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readBigInt64LE=W((function(e){q(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||K(e,this.length-8);const n=this[e+4]+256*this[e+5]+65536*this[e+6]+(r<<24);return(BigInt(n)<>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||K(e,this.length-8);const n=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(n)<>>=0,t||$(e,4,this.length),a.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return e>>>=0,t||$(e,4,this.length),a.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return e>>>=0,t||$(e,8,this.length),a.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return e>>>=0,t||$(e,8,this.length),a.read(this,e,!1,52,8)},c.prototype.writeUintLE=c.prototype.writeUIntLE=function(e,t,r,n){e=+e,t>>>=0,r>>>=0,n||L(this,e,t,r,Math.pow(2,8*r)-1,0);let a=1,o=0;for(this[t]=255&e;++o>>=0,r>>>=0,n||L(this,e,t,r,Math.pow(2,8*r)-1,0);let a=r-1,o=1;for(this[t+a]=255&e;--a>=0&&(o*=256);)this[t+a]=e/o&255;return t+r},c.prototype.writeUint8=c.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||L(this,e,t,1,255,0),this[t]=255&e,t+1},c.prototype.writeUint16LE=c.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||L(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},c.prototype.writeUint16BE=c.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||L(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},c.prototype.writeUint32LE=c.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||L(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},c.prototype.writeUint32BE=c.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||L(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},c.prototype.writeBigUInt64LE=W((function(e,t=0){return k(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),c.prototype.writeBigUInt64BE=W((function(e,t=0){return F(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),c.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){const n=Math.pow(2,8*r-1);L(this,e,t,r,n-1,-n)}let a=0,o=1,i=0;for(this[t]=255&e;++a>0)-i&255;return t+r},c.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t>>>=0,!n){const n=Math.pow(2,8*r-1);L(this,e,t,r,n-1,-n)}let a=r-1,o=1,i=0;for(this[t+a]=255&e;--a>=0&&(o*=256);)e<0&&0===i&&0!==this[t+a+1]&&(i=1),this[t+a]=(e/o>>0)-i&255;return t+r},c.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||L(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||L(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},c.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||L(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},c.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||L(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},c.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||L(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},c.prototype.writeBigInt64LE=W((function(e,t=0){return k(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),c.prototype.writeBigInt64BE=W((function(e,t=0){return F(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),c.prototype.writeFloatLE=function(e,t,r){return T(this,e,t,!0,r)},c.prototype.writeFloatBE=function(e,t,r){return T(this,e,t,!1,r)},c.prototype.writeDoubleLE=function(e,t,r){return N(this,e,t,!0,r)},c.prototype.writeDoubleBE=function(e,t,r){return N(this,e,t,!1,r)},c.prototype.copy=function(e,t,r,n){if(!c.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(a=t;a=n+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function V(e,t,r,n,a,o){if(e>r||e3?0===t||t===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(o+1)}${n}`:`>= -(2${n} ** ${8*(o+1)-1}${n}) and < 2 ** ${8*(o+1)-1}${n}`:`>= ${t}${n} and <= ${r}${n}`,new B.ERR_OUT_OF_RANGE("value",a,e)}!function(e,t,r){q(t,"offset"),void 0!==e[t]&&void 0!==e[t+r]||K(t,e.length-(r+1))}(n,a,o)}function q(e,t){if("number"!=typeof e)throw new B.ERR_INVALID_ARG_TYPE(t,"number",e)}function K(e,t,r){if(Math.floor(e)!==e)throw q(e,r),new B.ERR_OUT_OF_RANGE(r||"offset","an integer",e);if(t<0)throw new B.ERR_BUFFER_OUT_OF_BOUNDS;throw new B.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${t}`,e)}M("ERR_BUFFER_OUT_OF_BOUNDS",(function(e){return e?`${e} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),M("ERR_INVALID_ARG_TYPE",(function(e,t){return`The "${e}" argument must be of type number. Received type ${typeof t}`}),TypeError),M("ERR_OUT_OF_RANGE",(function(e,t,r){let n=`The value of "${e}" is out of range.`,a=r;return Number.isInteger(r)&&Math.abs(r)>2**32?a=U(String(r)):"bigint"==typeof r&&(a=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(a=U(a)),a+="n"),n+=` It must be ${t}. Received ${a}`,n}),RangeError);const Y=/[^+/0-9A-Za-z-_]/g;function z(e,t){let r;t=t||1/0;const n=e.length;let a=null;const o=[];for(let i=0;i55295&&r<57344){if(!a){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(i+1===n){(t-=3)>-1&&o.push(239,191,189);continue}a=r;continue}if(r<56320){(t-=3)>-1&&o.push(239,191,189),a=r;continue}r=65536+(a-55296<<10|r-56320)}else a&&(t-=3)>-1&&o.push(239,191,189);if(a=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function G(e){return n.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(Y,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function H(e,t,r,n){let a;for(a=0;a=t.length||a>=e.length);++a)t[a+r]=e[a];return a}function Q(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function J(e){return e!=e}const X=function(){const e="0123456789abcdef",t=new Array(256);for(let r=0;r<16;++r){const n=16*r;for(let a=0;a<16;++a)t[n+a]=e[r]+e[a]}return t}();function W(e){return"undefined"==typeof BigInt?Z:e}function Z(){throw new Error("BigInt not supported")}},1787:e=>{e.exports=function(e,r){for(var n=[],a=0;a{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var r="",n=void 0!==t[5];return t[4]&&(r+="@supports (".concat(t[4],") {")),t[2]&&(r+="@media ".concat(t[2]," {")),n&&(r+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),r+=e(t),n&&(r+="}"),t[2]&&(r+="}"),t[4]&&(r+="}"),r})).join("")},t.i=function(e,r,n,a,o){"string"==typeof e&&(e=[[null,e,void 0]]);var i={};if(n)for(var s=0;s0?" ".concat(l[5]):""," {").concat(l[1],"}")),l[5]=o),r&&(l[2]?(l[1]="@media ".concat(l[2]," {").concat(l[1],"}"),l[2]=r):l[2]=r),a&&(l[4]?(l[1]="@supports (".concat(l[4],") {").concat(l[1],"}"),l[4]=a):l[4]="".concat(a)),t.push(l))}},t}},1864:e=>{"use strict";e.exports=function(e){var t=e[1],r=e[3];if(!r)return t;if("function"==typeof btoa){var n=btoa(unescape(encodeURIComponent(JSON.stringify(r)))),a="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(n),o="/*# ".concat(a," */");return[t].concat([o]).join("\n")}return[t].join("\n")}},8658:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.promisify=n;var r="__ES6-PROMISIFY--CUSTOM-ARGUMENTS__";function n(e){if("function"!=typeof e)throw new TypeError("Argument to promisify must be a function");var t=e[r],a=n.Promise||Promise;if("function"!=typeof a)throw new Error("No Promise implementation found; do you need a polyfill?");return function(){for(var r=this,n=arguments.length,o=Array(n),i=0;i{"use strict";e.exports=function e(t,r){if(t===r)return!0;if(t&&r&&"object"==typeof t&&"object"==typeof r){if(t.constructor!==r.constructor)return!1;var n,a,o;if(Array.isArray(t)){if((n=t.length)!=r.length)return!1;for(a=n;0!=a--;)if(!e(t[a],r[a]))return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if((n=(o=Object.keys(t)).length)!==Object.keys(r).length)return!1;for(a=n;0!=a--;)if(!Object.prototype.hasOwnProperty.call(r,o[a]))return!1;for(a=n;0!=a--;){var i=o[a];if(!e(t[i],r[i]))return!1}return!0}return t!=t&&r!=r}},3508:e=>{"use strict";e.exports=function(e,t){t||(t={}),"function"==typeof t&&(t={cmp:t});var r,n="boolean"==typeof t.cycles&&t.cycles,a=t.cmp&&(r=t.cmp,function(e){return function(t,n){var a={key:t,value:e[t]},o={key:n,value:e[n]};return r(a,o)}}),o=[];return function e(t){if(t&&t.toJSON&&"function"==typeof t.toJSON&&(t=t.toJSON()),void 0!==t){if("number"==typeof t)return isFinite(t)?""+t:"null";if("object"!=typeof t)return JSON.stringify(t);var r,i;if(Array.isArray(t)){for(i="[",r=0;r{var n,a,o=r(2530);a={},void 0!==o&&o.nextTick?(a.nextTick=o.nextTick,"undefined"!=typeof setImmediate?a.setImmediate=function(e){setImmediate(e)}:a.setImmediate=a.nextTick):"function"==typeof setImmediate?(a.nextTick=function(e){setImmediate(e)},a.setImmediate=a.nextTick):(a.nextTick=function(e){setTimeout(e,0)},a.setImmediate=a.nextTick),a.eachSeries=function(e,t,r){if(r=r||function(){},!e.length)return r();var n=0,a=function(){t(e[n],(function(t){t?(r(t),r=function(){}):(n+=1)>=e.length?r():a()}))};a()},a.forEachSeries=a.eachSeries,void 0===(n=function(){return a}.apply(t,[]))||(e.exports=n)},2040:e=>{var t=function(){};t.createInterface=function(e){var t={on:function(t,r){void 0===this[e]&&(this[e]={}),this[e].hasOwnProperty(t)||(this[e][t]=[]),this[e][t].push(r)},off:function(t,r){void 0!==this[e]&&this[e].hasOwnProperty(t)&&function(e,t){for(var r=t.length-1;r>=0;r--)t[r]===e&&t.splice(r,1)}(r,this[e][t])},trigger:function(t){if(void 0!==this[e]&&this[e].hasOwnProperty(t))for(var r=Array.prototype.slice.call(arguments,1),n=0;n{var n=r(2040),a=r(5123).guid;function o(e,t){var r=0;return function(){var n=Date.now();n-r>e&&(r=n,t.apply(this,arguments))}}var i=function(e){return void 0===e||void 0===e.localStorage?{getItem:function(){},setItem:function(){},removeItem:function(){}}:e.localStorage}(r.g);function s(){var e=this,t=Date.now();this.origin=a(),this.lastMessage=t,this.receivedIDs={},this.previousValues={};var n=function(){e._onStorageEvent.apply(e,arguments)};"undefined"!=typeof document&&(document.attachEvent?document.attachEvent("onstorage",n):r.g.addEventListener("storage",n,!1))}s.prototype._transaction=function(e){var t=this,r=!1,n=!1,a=null;!function o(){if(!r){var s=Date.now(),c=0|i.getItem(f);if(c&&s-c<1e3)return n||(t._on("storage",o),n=!0),void(a=setTimeout(o,20));r=!0,i.setItem(f,s),e(),n&&t._off("storage",o),a&&clearTimeout(a),i.removeItem(f)}}()},s.prototype._cleanup_emit=o(100,(function(){this._transaction((function(){var e,t=Date.now()-h,r=0;try{e=JSON.parse(i.getItem(u)||"[]")}catch(t){e=[]}for(var n=e.length-1;n>=0;n--)e[n].timestamp0&&i.setItem(u,JSON.stringify(e))}))})),s.prototype._cleanup_once=o(100,(function(){var e=this;e._transaction((function(){Date.now();var t,r,n=0;try{r=JSON.parse(i.getItem(l)||"{}")}catch(e){r={}}for(t in r)e._once_expired(t,r)&&(delete r[t],n++);n>0&&i.setItem(l,JSON.stringify(r))}))})),s.prototype._once_expired=function(e,t){if(!t)return!0;if(!t.hasOwnProperty(e))return!0;if("object"!=typeof t[e])return!0;var r=t[e].ttl||p,n=Date.now();return t[e].timestamp{const{FileSystem:n}=r(28);let a;try{a=r(699)}catch(e){a=r(699)}const o=new a;let i,s,c=new Promise(((e,t)=>{i=e,s=t}));var u=new n({provider:o},(e=>{e?s(e):i(!0)}));function l(e,t){return t in e}const f=new Proxy(u.promises,{get(e,t){if(l(e,t))return async(...r)=>(await c,await e[t](...r))}}),h=new Proxy(u,{get(e,t){if(l(e,t))return"promises"===t?f:(...r)=>{(async()=>{await c,e[t](...r)})()}}});e.exports=h},2872:(e,t,r)=>{const{path:n}=r(28);e.exports=n},699:(e,t,r)=>{const{Default:n}=r(6119);e.exports=n},2762:e=>{var t="READ",r="WRITE",n="CREATE",a="EXCLUSIVE",o="TRUNCATE",i="APPEND";e.exports={FILE_SYSTEM_NAME:"local",FILE_STORE_NAME:"files",IDB_RO:"readonly",IDB_RW:"readwrite",WSQL_VERSION:"1",WSQL_SIZE:5242880,WSQL_DESC:"FileSystem Storage",NODE_TYPE_FILE:"FILE",NODE_TYPE_DIRECTORY:"DIRECTORY",NODE_TYPE_SYMBOLIC_LINK:"SYMLINK",NODE_TYPE_META:"META",DEFAULT_DIR_PERMISSIONS:493,DEFAULT_FILE_PERMISSIONS:420,FULL_READ_WRITE_EXEC_PERMISSIONS:511,READ_WRITE_PERMISSIONS:438,SYMLOOP_MAX:10,BINARY_MIME_TYPE:"application/octet-stream",JSON_MIME_TYPE:"application/json",ROOT_DIRECTORY_NAME:"/",FS_FORMAT:"FORMAT",FS_NOCTIME:"NOCTIME",FS_NOMTIME:"NOMTIME",FS_NODUPEIDCHECK:"FS_NODUPEIDCHECK",O_READ:t,O_WRITE:r,O_CREATE:n,O_EXCLUSIVE:a,O_TRUNCATE:o,O_APPEND:i,O_FLAGS:{r:[t],"r+":[t,r],w:[r,n,o],"w+":[r,t,n,o],wx:[r,n,a,o],"wx+":[r,t,n,a,o],a:[r,n,i],"a+":[r,t,n,i],ax:[r,n,a,i],"ax+":[r,t,n,a,i]},XATTR_CREATE:"CREATE",XATTR_REPLACE:"REPLACE",FS_READY:"READY",FS_PENDING:"PENDING",FS_ERROR:"ERROR",SUPER_NODE_ID:"00000000-0000-0000-0000-000000000000",STDIN:0,STDOUT:1,STDERR:2,FIRST_DESCRIPTOR:3,ENVIRONMENT:{TMP:"/tmp",PATH:""},fsConstants:{O_RDONLY:0,O_WRONLY:1,O_RDWR:2,S_IFMT:61440,S_IFREG:32768,S_IFDIR:16384,S_IFCHR:8192,S_IFBLK:24576,S_IFIFO:4096,S_IFLNK:40960,S_IFSOCK:49152,O_CREAT:512,O_EXCL:2048,O_NOCTTY:131072,O_TRUNC:1024,O_APPEND:8,O_DIRECTORY:1048576,O_NOFOLLOW:256,O_SYNC:128,O_DSYNC:4194304,O_SYMLINK:2097152,O_NONBLOCK:4,S_IRWXU:448,S_IRUSR:256,S_IWUSR:128,S_IXUSR:64,S_IRWXG:56,S_IRGRP:32,S_IWGRP:16,S_IXGRP:8,S_IRWXO:7,S_IROTH:4,S_IWOTH:2,S_IXOTH:1,F_OK:0,R_OK:4,W_OK:2,X_OK:1,UV_FS_COPYFILE_EXCL:1,COPYFILE_EXCL:1}}},8336:(e,t,r)=>{var n=r(2762).NODE_TYPE_FILE;e.exports=function(e,t){this.id=e,this.type=t||n}},4235:(e,t,r)=>{"use strict";const n=r(6769);function a(e,t,r){this.constructor=a,n.call(this,e,t,r)}a.prototype=n.prototype,e.exports=a},8096:e=>{var t={};["3:EACCES:permission denied","9:EBADF:bad file descriptor","10:EBUSY:resource busy or locked","18:EINVAL:invalid argument","27:ENOTDIR:not a directory","28:EISDIR:illegal operation on a directory","34:ENOENT:no such file or directory","47:EEXIST:file already exists","50:EPERM:operation not permitted","51:ELOOP:too many symbolic links encountered","53:ENOTEMPTY:directory not empty","55:EIO:i/o error","1000:ENOTMOUNTED:not mounted","1001:EFILESYSTEMERROR:missing super node, use 'FORMAT' flag to format filesystem.","1002:ENOATTR:attribute does not exist"].forEach((function(e){var r=+(e=e.split(":"))[0],n=e[1],a=e[2];function o(e,t){Error.call(this),this.name=n,this.code=n,this.errno=r,this.message=e||a,t&&(this.path=t),this.stack=new Error(this.message).stack}o.prototype=Object.create(Error.prototype),o.prototype.constructor=o,o.prototype.toString=function(){var e=this.path?", '"+this.path+"'":"";return this.name+": "+this.message+e},t[n]=t[r]=o})),e.exports=t},8726:(e,t,r)=>{var n=r(2486).lW,a=r(4148),o=a.normalize,i=a.dirname,s=a.basename,c=a.isAbsolute,u=r(5123),l=r(4971),f=r(2762),h=f.NODE_TYPE_FILE,p=f.NODE_TYPE_DIRECTORY,d=f.NODE_TYPE_SYMBOLIC_LINK,m=f.NODE_TYPE_META,v=f.FULL_READ_WRITE_EXEC_PERMISSIONS,y=f.ROOT_DIRECTORY_NAME,g=f.SUPER_NODE_ID,w=f.SYMLOOP_MAX,b=f.O_READ,E=f.O_WRITE,A=f.O_CREATE,P=f.O_EXCLUSIVE,x=f.O_APPEND,S=f.O_FLAGS,O=f.XATTR_CREATE,_=f.XATTR_REPLACE,I=f.FS_NOMTIME,R=f.FS_NOCTIME,j=r(8096),D=r(8336),$=r(7816),L=r(5471),k=r(4698),F=r(8544),C=r(4235),T=r(6769);function N(e,t,r,n,a){var o=e.flags;o.includes(R)&&delete n.ctime,o.includes(I)&&delete n.mtime;var i=!1;function s(r){e.changes.push({event:"change",path:t}),a(r)}n.ctime&&(r.ctime=n.ctime,r.atime=n.ctime,i=!0),n.atime&&(r.atime=n.atime,i=!0),n.mtime&&(r.mtime=n.mtime,i=!0),i?e.putObject(r.id,r,s):s()}function B(e,t,r){if(!(t=o(t)))return r(new j.ENOENT("path is an empty string"));var n=s(t),a=i(t),c=0;function u(t,n){if(t)return r(t);const a=new k(n);a&&a.type===m&&a.rnode?e.getObject(a.rnode,l):r(new j.EFILESYSTEMERROR)}function l(e,t){e?r(e):t?F.create(t,r):r(new j.ENOENT)}function f(n,a){n?r(n):a.type===p&&a.data?e.getObject(a.data,h):r(new j.ENOTDIR("a component of the path prefix is not a directory",t))}function h(a,o){if(a)r(a);else if(Object.prototype.hasOwnProperty.call(o,n)){var i=o[n].id;e.getObject(i,v)}else r(new j.ENOENT(null,t))}function v(e,t){if(e)return r(e);F.create(t,b)}function b(l,h){var p;l?r(l):h.type===d?++c>w?r(new j.ELOOP(null,t)):(p=h.data,p=o(p),a=i(p),n=s(p),y===n?e.getObject(g,u):B(e,a,f)):r(null,h)}y===n?e.getObject(g,u):B(e,a,f)}function M(e,t,r,n,a,o,i){var s=r.xattrs;o===O&&Object.prototype.hasOwnProperty.call(s,n)?i(new j.EEXIST("attribute already exists",t)):o!==_||Object.prototype.hasOwnProperty.call(s,n)?(s[n]=a,e.putObject(r.id,r,(function(n){n?i(n):N(e,t,r,{ctime:Date.now()},i)}))):i(new j.ENOATTR(null,t))}function U(e,t,r){t=o(t);var n,a,c,u,l=s(t),f=i(t);function h(t,n){t?r(t):(c=n,e.getObject(c.data,d))}function d(t,a){t?r(t):(u=a,F.create({guid:e.guid,type:p},(function(t,a){t?r(t):((n=a).nlinks+=1,e.putObject(n.id,n,m))})))}function m(t){t?r(t):(a={},e.putObject(n.data,a,y))}function v(t){if(t)r(t);else{var n=Date.now();N(e,f,c,{mtime:n,ctime:n},r)}}function y(t){t?r(t):(u[l]=new D(n.id,p),e.putObject(c.data,u,v))}B(e,t,(function(n,a){!n&&a?r(new j.EEXIST(null,t)):!n||n instanceof j.ENOENT?B(e,f,h):r(n)}))}function V(e,t,r){t=o(t);var n,a,c,u,l=s(t),f=i(t);function h(a,o){a?r(a):y===l?r(new j.EBUSY(null,t)):Object.prototype.hasOwnProperty.call(o,l)?(n=(u=o)[l].id,e.getObject(n,d)):r(new j.ENOENT(null,t))}function d(a,o){a?r(a):o.type!==p?r(new j.ENOTDIR(null,t)):(n=o,e.getObject(n.data,m))}function m(n,o){n?r(n):(a=o,Object.keys(a).length>0?r(new j.ENOTEMPTY(null,t)):(delete u[l],e.putObject(c.data,u,v)))}function v(t){if(t)r(t);else{var n=Date.now();N(e,f,c,{mtime:n,ctime:n},g)}}function g(t){t?r(t):e.delete(n.id,w)}function w(t){t?r(t):e.delete(n.data,r)}B(e,f,(function(t,n){t?r(t):(c=n,e.getObject(c.data,h))}))}function q(e,t,r,a,c){"function"==typeof a&&(c=a,a=null),t=o(t);var u,l,f,m,v,g=s(t),b=i(t),x=0;function S(r,n){r?c(r):n.type!==p?c(new j.ENOENT(null,t)):(u=n,e.getObject(u.data,O))}function O(n,o){n?c(n):(l=o,Object.prototype.hasOwnProperty.call(l,g)?r.includes(P)?c(new j.EEXIST("O_CREATE and O_EXCLUSIVE are set, and the named file exists",t)):(f=l[g]).type===p&&r.includes(E)?c(new j.EISDIR("the named file is a directory and O_WRITE is set",t)):e.getObject(f.id,_):r.includes(A)?F.create({guid:e.guid,type:h},(function(t,r){t?c(t):((m=r).nlinks+=1,a&&(m.mode=a),e.putObject(m.id,m,R))})):c(new j.ENOENT("O_CREATE is not set and the named file does not exist",t)))}function _(n,a){if(n)c(n);else{var u=a;u.type===d?++x>w?c(new j.ELOOP(null,t)):(l=u.data,l=o(l),b=i(l),g=s(l),y===g&&(r.includes(E)?c(new j.EISDIR("the named file is a directory and O_WRITE is set",t)):B(e,t,I)),B(e,b,S)):I(void 0,u)}var l}function I(e,t){e?c(e):c(null,m=t)}function R(t){t?c(t):(v=n.alloc(0),e.putBuffer(m.data,v,L))}function $(t){if(t)c(t);else{var r=Date.now();N(e,b,u,{mtime:r,ctime:r},k)}}function L(t){t?c(t):(l[g]=new D(m.id,h),e.putObject(u.data,l,$))}function k(e){e?c(e):c(null,m)}y===g?r.includes(E)?c(new j.EISDIR("the named file is a directory and O_WRITE is set",t)):B(e,t,I):B(e,b,S)}function K(e,t,r,a,o,i,s){var c,u;function l(e){e?s(e):s(null,o)}function f(r){if(r)s(r);else{var n=Date.now();N(e,t.path,c,{mtime:n,ctime:n},l)}}function h(t){t?s(t):e.putObject(c.id,c,f)}function p(l,f){if(l)s(l);else{if(!(u=f))return s(new j.EIO("Expected Buffer"));var p=null!=i?i:t.position,d=Math.max(u.length,p+o),m=n.alloc(d);u&&u.copy(m),r.copy(m,p,a,a+o),void 0===i&&(t.position+=o),c.size=d,c.version+=1,e.putBuffer(c.data,m,h)}}e.getObject(t.id,(function(t,r){t?s(t):(c=r,e.getBuffer(c.data,p))}))}function Y(e,t,r,n,a,o,i){var s,c;function u(e,s){if(e)i(e);else{if(!(c=s))return i(new j.EIO("Expected Buffer"));var u=null!=o?o:t.position;a=u+a>r.length?a-u:a,c.copy(r,n,u,u+a),void 0===o&&(t.position+=a),i(null,a)}}e.getObject(t.id,(function(r,n){r?i(r):n.type===p?i(new j.EISDIR("the named file is a directory",t.path)):(s=n,e.getBuffer(s.data,u))}))}function z(e,t,r){t.getNode(e,r)}function G(e,t,r){t=o(t);var n,a,c=s(t),u=i(t);function l(e,t){if(e)return r(e);F.create(t,r)}function f(n,o){n?r(n):(a=o,Object.prototype.hasOwnProperty.call(a,c)?e.getObject(a[c].id,l):r(new j.ENOENT("a component of the path does not name an existing file",t)))}y===c?B(e,t,r):B(e,u,(function(t,a){t?r(t):(n=a,e.getObject(n.data,f))}))}function H(e,t,r,n){t=o(t);var a=s(t),c=i(t);r=o(r);var u,l,f,h,d,m,v=s(r),y=i(r),g=Date.now();function w(t){t?n(t):N(e,r,m,{ctime:g},n)}function b(t,r){t?n(t):((m=r).nlinks+=1,e.putObject(m.id,m,w))}function E(t){t?n(t):e.getObject(d,b)}function A(t,r){t?n(t):(h=r,Object.prototype.hasOwnProperty.call(h,v)?n(new j.EEXIST("newpath resolves to an existing file",v)):(h[v]=l[a],d=h[v].id,e.putObject(f.data,h,E)))}function P(t,r){t?n(t):(f=r,e.getObject(f.data,A))}function x(t,r){t?n(t):(l=r,Object.prototype.hasOwnProperty.call(l,a)?l[a].type===p?n(new j.EPERM("oldpath refers to a directory")):B(e,y,P):n(new j.ENOENT("a component of either path prefix does not exist",a)))}B(e,c,(function(t,r){t?n(t):(u=r,e.getObject(u.data,x))}))}function Q(e,t,r){t=o(t);var n,a,c,u=s(t),l=i(t);function f(t){t?r(t):(delete a[u],e.putObject(n.data,a,(function(t){if(t)r(t);else{var a=Date.now();N(e,l,n,{mtime:a,ctime:a},r)}})))}function h(t){t?r(t):e.delete(c.data,f)}function d(n,a){n?r(n):a.type===p?r(new j.EPERM("unlink not permitted on directories",u)):function(n,a){(c=a).nlinks-=1,c.nlinks<1?e.delete(c.id,h):e.putObject(c.id,c,(function(n){n?r(n):N(e,t,c,{ctime:Date.now()},f)}))}(0,a)}function m(t,n){t?r(t):(a=n,Object.prototype.hasOwnProperty.call(a,u)?e.getObject(a[u].id,d):r(new j.ENOENT("a component of the path does not name an existing file",u)))}B(e,l,(function(t,a){t?r(t):(n=a,e.getObject(n.data,m))}))}function J(e){return Object.prototype.hasOwnProperty.call(S,e)?S[e]:null}function X(e,t,r){return e?"function"==typeof e?e={encoding:t,flag:r}:"string"==typeof e&&(e={encoding:e,flag:r}):e={encoding:t,flag:r},e}function W(e,t,r){!function(e,t,r){B(e,t=o(t),r)}(e,t,(function(n,a){if(n)r(n);else{var o=new T(t,a,e.name);r(null,o)}}))}function Z(e,t){if("number"==typeof e)return e;t(new j.EINVAL("Expected integer",e))}var ee=/^[0-7]+$/;function te(e){return e===e>>>0}function re(e,t,r){return"function"==typeof t&&(r=t,t=void 0),te(e)?e&v:"number"==typeof e?(Number.isInteger(e),r(new j.EINVAL("mode not a valid an integer value",e)),!1):"string"==typeof e?ee.test(e)?parseInt(e,8)&v:(r(new j.EINVAL("mode not a valid octal string",e)),!1):void 0!==t?t:(r(new j.EINVAL("mode not valid",e)),!1)}function ne(e){return"number"==typeof e?e:"object"==typeof e&&"function"==typeof e.getTime?e.getTime():void 0}e.exports={appendFile:function(e,t,r,a,o){o=arguments[arguments.length-1];var i=J((a=X(a,"utf8","a")).flag||"a");if(!i)return o(new j.EINVAL("flags is not valid",t));"number"==typeof(r=r||"")&&(r=""+r),"string"==typeof r&&"utf8"===a.encoding&&(r=n.from(r)),q(e,t,i,(function(n,a){if(n)return o(n);var s=new L(t,a.id,i,a.size),c=$.allocDescriptor(s);K(e,s,r,0,r.length,s.position,(function(e){if($.releaseDescriptor(c),e)return o(e);o(null)}))}))},access:function(e,t,r,n){"function"==typeof r&&(n=r,r=f.fsConstants.F_OK),function(e,t,r,n){const{F_OK:a,R_OK:i,W_OK:s,X_OK:c,S_IXUSR:u,S_IXGRP:l,S_IXOTH:h}=f.fsConstants;B(e,t=o(t),(function(e,o){if(e)return n(e);if(r===a)return n(null);var f=re(o.mode,n);return f?r&(i|s)||r&c&&f&(u|l|h)?n(null):void n(new j.EACCES("permission denied",t)):void 0}))}(e,t,r|=f.fsConstants.F_OK,n)},chown:function(e,t,r,n,a){return te(r)?te(n)?void function(e,t,r,n,a){t=o(t),B(e,t,(function(o,i){o?a(o):(i.uid=r,i.gid=n,N(e,t,i,{mtime:Date.now()},a))}))}(e,t,r,n,a):a(new j.EINVAL("gid must be a valid integer",n)):a(new j.EINVAL("uid must be a valid integer",r))},chmod:function(e,t,r,n){(r=re(r,n))&&function(e,t,r,n){t=o(t),"number"!=typeof r?n(new j.EINVAL("mode must be number",t)):B(e,t,(function(a,o){a?n(a):(o.mode=r,N(e,t,o,{mtime:Date.now()},n))}))}(e,t,r,n)},close:function(e,t,r){$.getOpenFileDescription(t)?($.releaseDescriptor(t),r(null)):r(new j.EBADF)},ensureRootDirectory:function(e,t){var r,n,a;function o(a){a?t(a):F.create({guid:e.guid,id:r.rnode,type:p},(function(r,a){r?t(r):((n=a).nlinks+=1,e.putObject(n.id,n,i))}))}function i(r){r?t(r):(a={},e.putObject(n.data,a,t))}e.getObject(g,(function(n,a){!n&&a?t():!n||n instanceof j.ENOENT?k.create({guid:e.guid},(function(n,a){n?t(n):(r=a,e.putObject(r.id,r,o))})):t(n)}))},exists:function(e,t,r){W(e,t,(function(e){r(!e)}))},fchown:function(e,t,r,n,a){if(!te(r))return a(new j.EINVAL("uid must be a valid integer",r));if(!te(n))return a(new j.EINVAL("gid must be a valid integer",n));var o=$.getOpenFileDescription(t);o?o.flags.includes(E)?function(e,t,r,n,a){t.getNode(e,(function(o,i){o?a(o):(i.uid=r,i.gid=n,N(e,t.path,i,{mtime:Date.now()},a))}))}(e,o,r,n,a):a(new j.EBADF("descriptor does not permit writing")):a(new j.EBADF)},fchmod:function(e,t,r,n){if(r=re(r,n)){var a=$.getOpenFileDescription(t);a?a.flags.includes(E)?function(e,t,r,n){"number"!=typeof r?n(new j.EINVAL("mode must be a number")):t.getNode(e,(function(a,o){a?n(a):(o.mode=r,N(e,t.path,o,{mtime:Date.now()},n))}))}(e,a,r,n):n(new j.EBADF("descriptor does not permit writing")):n(new j.EBADF)}},fgetxattr:function(e,t,r,n){var a=$.getOpenFileDescription(t);a?function(e,t,r,n){"string"!=typeof r?n(new j.EINVAL):r?t.getNode(e,(function(e,t){if(e)return n(e);var a=t.xattrs;Object.prototype.hasOwnProperty.call(a,r)?n(null,a[r]):n(new j.ENOATTR)})):n(new j.EINVAL("attribute name cannot be an empty string"))}(e,a,r,n):n(new j.EBADF)},fremovexattr:function(e,t,r,n){var a=$.getOpenFileDescription(t);a?a.flags.includes(E)?function(e,t,r,n){"string"!=typeof r?n(new j.EINVAL("attribute name must be a string")):r?t.getNode(e,(function(a,o){if(a)return n(a);var i=o.xattrs;Object.prototype.hasOwnProperty.call(i,r)?(delete i[r],e.putObject(o.id,o,(function(r){r?n(r):N(e,t.path,o,{ctime:Date.now()},n)}))):n(new j.ENOATTR)})):n(new j.EINVAL("attribute name cannot be an empty string"))}(e,a,r,n):n(new j.EBADF("descriptor does not permit writing")):n(new j.EBADF)},fsetxattr:function(e,t,r,n,a,o){"function"==typeof a&&(o=a,a=null);var i=$.getOpenFileDescription(t);i?i.flags.includes(E)?function(e,t,r,n,a,o){"string"!=typeof r?o(new j.EINVAL("attribute name must be a string")):r?null!==a&&a!==O&&a!==_?o(new j.EINVAL("invalid flag, must be null, XATTR_CREATE or XATTR_REPLACE")):t.getNode(e,(function(i,s){if(i)return o(i);M(e,t.path,s,r,n,a,o)})):o(new j.EINVAL("attribute name cannot be an empty string"))}(e,i,r,n,a,o):o(new j.EBADF("descriptor does not permit writing")):o(new j.EBADF)},fstat:function(e,t,r){var n=$.getOpenFileDescription(t);n?z(e,n,(function(t,a){if(t)r(t);else{var o=new T(n.path,a,e.name);r(null,o)}})):r(new j.EBADF)},fsync:function(e,t,r){Z(t,r)===t&&($.getOpenFileDescription(t)?r():r(new j.EBADF))},ftruncate:function(e,t,r,a){a=arguments[arguments.length-1],r=r||0;var o=$.getOpenFileDescription(t);if(o)if(o.flags.includes(E)){if(Z(r,a)!==r)return;!function(e,t,r,a){var o;function i(t,i){if(t)a(t);else{var s;if(!i)return a(new j.EIO("Expected Buffer"));s=i?i.slice(0,r):n.alloc(r),e.putBuffer(o.data,s,c)}}function s(r){if(r)a(r);else{var n=Date.now();N(e,t.path,o,{mtime:n,ctime:n},a)}}function c(t){t?a(t):(o.size=r,o.version+=1,e.putObject(o.id,o,s))}r<0?a(new j.EINVAL("length cannot be negative")):t.getNode(e,(function(t,r){t?a(t):r.type===p?a(new j.EISDIR):(o=r,e.getBuffer(o.data,i))}))}(e,o,r,a)}else a(new j.EBADF("descriptor does not permit writing"));else a(new j.EBADF)},futimes:function(e,t,r,n,a){var o=Date.now();r=ne(r||o),n=ne(n||o);var i=$.getOpenFileDescription(t);i?i.flags.includes(E)?function(e,t,r,n,a){"number"!=typeof r||"number"!=typeof n?a(new j.EINVAL("atime and mtime must be a number")):r<0||n<0?a(new j.EINVAL("atime and mtime must be positive integers")):t.getNode(e,(function(o,i){o?a(o):N(e,t.path,i,{atime:r,ctime:n,mtime:n},a)}))}(e,i,r,n,a):a(new j.EBADF("descriptor does not permit writing")):a(new j.EBADF)},getxattr:function(e,t,r,n){!function(e,t,r,n){t=o(t),"string"!=typeof r?n(new j.EINVAL("attribute name must be a string",t)):r?B(e,t,(function(e,a){if(e)return n(e);var o=a.xattrs;Object.prototype.hasOwnProperty.call(o,r)?n(null,o[r]):n(new j.ENOATTR(null,t))})):n(new j.EINVAL("attribute name cannot be an empty string",t))}(e,t,r,n)},link:function(e,t,r,n){H(e,t,r,n)},lseek:function(e,t,r,n,a){var o=$.getOpenFileDescription(t);o||a(new j.EBADF),"SET"===n?r<0?a(new j.EINVAL("resulting file offset would be negative")):(o.position=r,a(null,o.position)):"CUR"===n?o.position+r<0?a(new j.EINVAL("resulting file offset would be negative")):(o.position+=r,a(null,o.position)):"END"===n?z(e,o,(function(e,t){e?a(e):t.size+r<0?a(new j.EINVAL("resulting file offset would be negative")):(o.position=t.size+r,a(null,o.position))})):a(new j.EINVAL("whence argument is not a proper value"))},lstat:function(e,t,r){G(e,t,(function(n,a){if(n)r(n);else{var o=new T(t,a,e.name);r(null,o)}}))},mkdir:function(e,t,r,n){if(arguments.length<4)n=r,r=v;else if(!(r=re(r,v,n)))return;U(e,t,n)},mkdtemp:function(e,t,r,n){if(n=arguments[arguments.length-1],!t)return n(new Error("filename prefix is required"));var a=t+"-"+u.randomChars(6);U(e,a,(function(e){n(e,a)}))},mknod:function(e,t,r,n){!function(e,t,r,n){if(r!==p&&r!==h)return n(new j.EINVAL("type must be a directory or file",t));t=o(t);var a,c,u,l=s(t),f=i(t);function d(r,o){!r&&o?n(new j.EEXIST("path name already exists",t)):!r||r instanceof j.ENOENT?e.getObject(a.data,m):n(r)}function m(t,a){t?n(t):(c=a,F.create({guid:e.guid,type:r},(function(t,r){t?n(t):((u=r).nlinks+=1,e.putObject(u.id,u,y))})))}function v(t){if(t)n(t);else{var r=Date.now();N(e,f,u,{mtime:r,ctime:r},n)}}function y(t){t?n(t):(c[l]=new D(u.id,r),e.putObject(a.data,c,v))}B(e,f,(function(r,o){r?n(r):o.type!==p?n(new j.ENOTDIR("a component of the path prefix is not a directory",t)):(a=o,B(e,t,d))}))}(e,t,r,n)},open:function(e,t,r,n,a){if(arguments.length<5?(a=arguments[arguments.length-1],n=420):n=re(n,v,a),!(r=J(r)))return a(new j.EINVAL("flags is not valid"),t);q(e,t,r,n,(function(e,n){if(e)a(e);else{var o;o=r.includes(x)?n.size:0;var i=new L(t,n.id,r,o),s=$.allocDescriptor(i);a(null,s)}}))},readdir:function(e,t,r,i){!function(e,t,r,i){var s,c;function u(o,s){if(o)i(o);else{c=s;var u=Object.keys(c);if(r.encoding){var f=u.map((function(e){return n.from(e)}));u="buffer"===r.encoding?f:f.map((function(e){return e.toString(r.encoding)}))}if(r.withFileTypes){var h=[];l.eachSeries(u,(function(o,i){const s=n.from(o,r.encoding).toString(),c=a.join(t,s);!function(e,t,r){G(e,t,(function(n,a){if(n)r(n);else{var o=new C(t,a,e.name);r(null,o)}}))}(e,c,(function(e,t){e&&i(e),t.name=o,h.push(t),i()}))}),(function(e){i(e,h)}))}else i(null,u)}}t=o(t),"function"==typeof r&&(i=r,r={}),r=function(e,t){return e?"function"==typeof e?e={encoding:t}:"string"==typeof e&&(e={encoding:e}):e={encoding:t},e}(r),B(e,t,(function(r,n){r?i(r):n.type!==p?i(new j.ENOTDIR(null,t)):(s=n,e.getObject(s.data,u))}))}(e,t,r,i)},read:function(e,t,r,n,a,o,i){n=void 0===n?0:n,a=void 0===a?r.length-n:a,i=arguments[arguments.length-1];var s=$.getOpenFileDescription(t);s?s.flags.includes(b)?Y(e,s,r,n,a,o,(function(e,t){i(e,t||0,r)})):i(new j.EBADF("descriptor does not permit reading")):i(new j.EBADF)},readFile:function(e,t,r,a){a=arguments[arguments.length-1];var o=J((r=X(r,null,"r")).flag||"r");if(!o)return a(new j.EINVAL("flags is not valid",t));q(e,t,o,(function(i,s){if(i)return a(i);var c=new L(t,s.id,o,0),u=$.allocDescriptor(c);function l(){$.releaseDescriptor(u)}z(e,c,(function(o,i){if(o)return l(),a(o);var s=new T(c.path,i,e.name);if(s.isDirectory())return l(),a(new j.EISDIR("illegal operation on directory",t));var u=s.size,f=n.alloc(u);Y(e,c,f,0,u,0,(function(e){if(l(),e)return a(e);var t;t="utf8"===r.encoding?f.toString("utf8"):f,a(null,t)}))}))}))},readlink:function(e,t,r){!function(e,t,r){t=o(t);var n,a,c=s(t),u=i(t);function l(t,n){t?r(t):(a=n,Object.prototype.hasOwnProperty.call(a,c)?e.getObject(a[c].id,f):r(new j.ENOENT("a component of the path does not name an existing file",c)))}function f(e,n){if(e)r(e);else if(n.type!==d)r(new j.EINVAL("path not a symbolic link",t));else{var a=n.symlink_relpath?n.symlink_relpath:n.data;r(null,a)}}B(e,u,(function(t,a){t?r(t):(n=a,e.getObject(n.data,l))}))}(e,t,r)},removexattr:function(e,t,r,n){!function(e,t,r,n){t=o(t),"string"!=typeof r?n(new j.EINVAL("attribute name must be a string",t)):r?B(e,t,(function(a,o){if(a)return n(a);var i=o.xattrs;Object.prototype.hasOwnProperty.call(i,r)?(delete i[r],e.putObject(o.id,o,(function(r){r?n(r):N(e,t,o,{ctime:Date.now()},n)}))):n(new j.ENOATTR(null,t))})):n(new j.EINVAL("attribute name cannot be an empty string",t))}(e,t,r,n)},rename:function(e,t,r,n){t=o(t),r=o(r);var i,s,c,u,l=a.dirname(t),f=a.dirname(r),h=a.basename(t),d=a.basename(r),m=Date.now();function v(t,a){t?n(t):N(e,r,a,{ctime:m},n)}function y(t){t?n(t):e.getObject(u[d].id,v)}function g(t){t?n(t):(i.id===c.id&&(s=u),delete s[h],e.putObject(i.data,s,y))}function w(t){t?n(t):(u[d]=s[h],e.putObject(c.data,u,g))}function b(t,a){t?n(t):(u=a,Object.prototype.hasOwnProperty.call(u,d)?V(e,r,w):w())}function E(t,r){t?n(t):(c=r,e.getObject(c.data,b))}function A(t,r){t?n(t):(s=r,B(e,f,E))}function P(t,r){t?n(t):(i=r,e.getObject(r.data,A))}function x(r){r?n(r):Q(e,t,n)}B(e,t,(function(a,o){a?n(a):o.type===p?B(e,l,P):H(e,t,r,x)}))},rmdir:function(e,t,r){V(e,t,r)},setxattr:function(e,t,r,n,a,i){"function"==typeof a&&(i=a,a=null),function(e,t,r,n,a,i){t=o(t),"string"!=typeof r?i(new j.EINVAL("attribute name must be a string",t)):r?null!==a&&a!==O&&a!==_?i(new j.EINVAL("invalid flag, must be null, XATTR_CREATE or XATTR_REPLACE",t)):B(e,t,(function(o,s){if(o)return i(o);M(e,t,s,r,n,a,i)})):i(new j.EINVAL("attribute name cannot be an empty string",t))}(e,t,r,n,a,i)},stat:W,symlink:function(e,t,r,n,u){!function(e,t,r,n){r=o(r);var u,l,f,h=s(r),p=i(r);function m(r,o){r?n(r):(l=o,Object.prototype.hasOwnProperty.call(l,h)?n(new j.EEXIST(null,h)):F.create({guid:e.guid,type:d},(function(r,o){r?n(r):((f=o).nlinks+=1,c(t)||(f.symlink_relpath=t,t=a.resolve(p,t)),f.size=t.length,f.data=t,e.putObject(f.id,f,g))})))}function v(t){if(t)n(t);else{var r=Date.now();N(e,p,u,{mtime:r,ctime:r},n)}}function g(t){t?n(t):(l[h]=new D(f.id,d),e.putObject(u.data,l,v))}y===h?n(new j.EEXIST(null,h)):B(e,p,(function(t,r){t?n(t):(u=r,e.getObject(u.data,m))}))}(e,t,r,u=arguments[arguments.length-1])},truncate:function(e,t,r,a){Z(r=r||0,a=arguments[arguments.length-1])===r&&function(e,t,r,a){var i;function s(t,o){if(t)a(t);else{if(!o)return a(new j.EIO("Expected Buffer"));var s=n.alloc(r);o&&o.copy(s),e.putBuffer(i.data,s,u)}}function c(r){if(r)a(r);else{var n=Date.now();N(e,t,i,{mtime:n,ctime:n},a)}}function u(t){t?a(t):(i.size=r,i.version+=1,e.putObject(i.id,i,c))}t=o(t),r<0?a(new j.EINVAL("length cannot be negative")):B(e,t,(function(r,n){r?a(r):n.type===p?a(new j.EISDIR(null,t)):(i=n,e.getBuffer(i.data,s))}))}(e,t,r,a)},unlink:function(e,t,r){Q(e,t,r)},utimes:function(e,t,r,n,a){var i=Date.now();!function(e,t,r,n,a){t=o(t),"number"!=typeof r||"number"!=typeof n?a(new j.EINVAL("atime and mtime must be number",t)):r<0||n<0?a(new j.EINVAL("atime and mtime must be positive integers",t)):B(e,t,(function(o,i){o?a(o):N(e,t,i,{atime:r,ctime:n,mtime:n},a)}))}(e,t,r=ne(r||i),n=ne(n||i),a)},writeFile:function(e,t,r,a,o){o=arguments[arguments.length-1];var i=J((a=X(a,"utf8","w")).flag||"w");if(!i)return o(new j.EINVAL("flags is not valid",t));n.isBuffer(r)||("number"==typeof r&&(r=""+r),r="string"!=typeof(r=r||"")?n.from(r.toString()):n.from(r||"",a.encoding||"utf8")),q(e,t,i,(function(a,s){if(a)return o(a);var c=new L(t,s.id,i,0),u=$.allocDescriptor(c);!function(e,t,r,a,o,i){var s;function c(e){e?i(e):i(null,o)}function u(r){if(r)i(r);else{var n=Date.now();N(e,t.path,s,{mtime:n,ctime:n},c)}}function l(t){t?i(t):e.putObject(s.id,s,u)}e.getObject(t.id,(function(a,c){if(a)i(a);else{s=c;var u=n.alloc(o);r.copy(u,0,0,0+o),t.position=o,s.size=o,s.version+=1,e.putBuffer(s.data,u,l)}}))}(e,c,r,0,r.length,(function(e){if($.releaseDescriptor(u),e)return o(e);o(null)}))}))},write:function(e,t,r,n,a,o,i){i=arguments[arguments.length-1],n=void 0===n?0:n,a=void 0===a?r.length-n:a;var s=$.getOpenFileDescription(t);s?s.flags.includes(E)?r.length-n{"use strict";var n=r(2486).lW;const{promisify:a}=r(8658),o=r(4148),i=r(6119),s=r(4702),c=r(4946),u=r(923),l=r(8096),{nop:f,guid:h}=r(5123),{fsConstants:p,FILE_SYSTEM_NAME:d,FS_FORMAT:m,FS_READY:v,FS_PENDING:y,FS_ERROR:g,FS_NODUPEIDCHECK:w,STDIN:b,STDOUT:E,STDERR:A}=r(2762),P=r(8726);function x(e){e&&console.error("Filer error: ",e)}function S(e,t,r){let a=e[t];var i;a=function(e){if(!(e&&e.protocol&&e.pathname))return e;if("file:"!==e.protocol)throw new l.EINVAL("only file: URLs are supported for paths",e);const t=e.pathname;for(let r=0;rS(n,e,!1))),e.relPathArgs&&e.relPathArgs.forEach((e=>S(n,e,!0)));const s=r.queueOrRun((function(){const e=r.provider.openReadWriteContext();if(g===r.readyState){const e=new l.EFILESYSTEMERROR("filesystem unavailable, operation canceled");return i.call(r,e)}function s(){e.close(),i.apply(r,arguments)}o?n.push(s):n[a]=s;const c=[e].concat(n);P[t].apply(null,c)}));s&&i(s)},r&&(O.prototype.promises[t]=a(O.prototype[t].bind(j)))}))}O.providers=i,e.exports=O},923:(e,t,r)=>{const n=r(2040),a=r(4148),o=r(4946);function i(){n.call(this);const e=this;let t,r,i=!1;function s(n){(r===n||i&&0===n.indexOf(t))&&e.trigger("change","change",n)}e.start=function(e,n,c){if(!r){if(a.isNull(e))throw new Error("Path must be a string without null bytes.");r=a.normalize(e),i=!0===c,i&&(t="/"===r?"/":r+"/"),o.getInstance().on("change",s)}},e.close=function(){o.getInstance().off("change",s),e.removeAllListeners("change")}}i.prototype=new n,i.prototype.constructor=i,e.exports=i},28:(e,t,r)=>{var n=r(2486).lW;let a=null,o=null;e.exports=o={FileSystem:r(3397),Buffer:n,Path:r(4148),path:r(4148),Errors:r(8096),Shell:r(4702),FilerWebpackPlugin:r(5595)},Object.defineProperty(o,"fs",{enumerable:!0,get:()=>(a||(a=new o.FileSystem),a)})},8544:(e,t,r)=>{const{NODE_TYPE_FILE:n,NODE_TYPE_DIRECTORY:a,NODE_TYPE_SYMBOLIC_LINK:o,DEFAULT_FILE_PERMISSIONS:i,DEFAULT_DIR_PERMISSIONS:s}=r(2762),{S_IFREG:c,S_IFDIR:u,S_IFLNK:l}=r(2762).fsConstants;function f(e,t,r){if(e[t])return r();e.guid((function(n,a){if(n)return r(n);e[t]=a,r()}))}function h(e,t){switch(e){case a:return(t||s)|u;case o:return(t||i)|l;default:return(t||i)|c}}class p{constructor(e){var t=Date.now();this.id=e.id,this.data=e.data,this.size=e.size||0,this.atime=e.atime||t,this.ctime=e.ctime||t,this.mtime=e.mtime||t,this.flags=e.flags||[],this.xattrs=e.xattrs||{},this.nlinks=e.nlinks||0,"string"==typeof e.type?this.type=e.type:"string"==typeof e.mode?this.type=e.mode:this.type=n,this.permissions=e.permissions||h(this.type),this.uid=e.uid||0,this.gid=e.gid||0}toJSON(){return{id:this.id,data:this.data,size:this.size,atime:this.atime,ctime:this.ctime,mtime:this.ctime,flags:this.flags,xattrs:this.xattrs,nlinks:this.nlinks,mode:this.type,permissions:this.permissions,uid:this.uid,gid:this.gid}}get mode(){return h(this.type,this.permissions)}set mode(e){this.permissions=e}}e.exports.create=function(e,t){f(e,"id",(function(r){if(r)return t(r);f(e,"data",(function(r){if(r)return t(r);t(null,new p(e))}))}))}},5471:(e,t,r)=>{const n=r(8096),a=r(8544);function o(e,t,r,n){this.path=e,this.id=t,this.flags=r,this.position=n}o.prototype.getNode=function(e,t){var r=this.id,o=this.path;e.getObject(r,(function(e,r){return e?t(e):r?void a.create(r,t):t(new n.EBADF("file descriptor refers to unknown node",o))}))},e.exports=o},7816:(e,t,r)=>{const{FIRST_DESCRIPTOR:n}=r(2762),a={},o=e=>a[e];e.exports={allocDescriptor:e=>{const t=(()=>{let e=n;for(;o(e);)e++;return e})();return a[t]=e,t},releaseDescriptor:e=>delete a[e],getOpenFileDescription:o}},4148:(e,t,r)=>{r(2530).cwd=()=>"/";const n=r(9368),a=Object.assign({},n);a.basename=(e,t)=>{const r=n.basename(e,t);return""===r?"/":r},a.normalize=e=>"/"===(e=n.normalize(e))?e:a.removeTrailing(e),a.isNull=e=>-1!==(""+e).indexOf("\0"),a.addTrailing=e=>e.replace(/\/*$/,"/"),a.removeTrailing=e=>""===(e=e.replace(/\/*$/,""))?"/":e,e.exports=a},6119:(e,t,r)=>{const n=r(6535),a=r(4250);e.exports={IndexedDB:n,Default:n,Memory:a}},6535:(e,t,r)=>{var n=r(2486).lW,a=r(2762).FILE_SYSTEM_NAME,o=r(2762).FILE_STORE_NAME,i=r(2762).IDB_RW,s=r(2762).IDB_RO;function c(e,t){this.db=e,this.mode=t}function u(e){this.name=e||a,this.db=null}c.prototype._getObjectStore=function(){if(this.objectStore)return this.objectStore;var e=this.db.transaction(o,this.mode);return this.objectStore=e.objectStore(o),this.objectStore},c.prototype.clear=function(e){try{var t=this._getObjectStore().clear();t.onsuccess=function(){e()},t.onerror=function(t){t.preventDefault(),e(t.error)}}catch(t){e(t)}},c.prototype._get=function(e,t){try{var r=this._getObjectStore().get(e);r.onsuccess=function(e){var r=e.target.result;t(null,r)},r.onerror=function(e){e.preventDefault(),t(e.error)}}catch(e){t(e)}},c.prototype.getObject=function(e,t){this._get(e,t)},c.prototype.getBuffer=function(e,t){this._get(e,(function(e,r){if(e)return t(e);t(null,n.from(r))}))},c.prototype._put=function(e,t,r){try{var n=this._getObjectStore().put(t,e);n.onsuccess=function(e){var t=e.target.result;r(null,t)},n.onerror=function(e){e.preventDefault(),r(e.error)}}catch(e){r(e)}},c.prototype.putObject=function(e,t,r){this._put(e,t,r)},c.prototype.putBuffer=function(e,t,r){var n=t.buffer;this._put(e,n,r)},c.prototype.delete=function(e,t){try{var r=this._getObjectStore().delete(e);r.onsuccess=function(e){var r=e.target.result;t(null,r)},r.onerror=function(e){e.preventDefault(),t(e.error)}}catch(e){t(e)}},u.isSupported=function(){return!!(r.g.indexedDB||r.g.mozIndexedDB||r.g.webkitIndexedDB||r.g.msIndexedDB)},u.prototype.open=function(e){var t=this;if(t.db)return e();try{var n=(r.g.indexedDB||r.g.mozIndexedDB||r.g.webkitIndexedDB||r.g.msIndexedDB).open(t.name);n.onupgradeneeded=function(e){var t=e.target.result;t.objectStoreNames.contains(o)&&t.deleteObjectStore(o),t.createObjectStore(o)},n.onsuccess=function(r){t.db=r.target.result,e()},n.onerror=function(t){t.preventDefault(),e(t.error)}}catch(t){e(t)}},u.prototype.getReadOnlyContext=function(){return new c(this.db,s)},u.prototype.getReadWriteContext=function(){return new c(this.db,i)},e.exports=u},4250:(e,t,r)=>{var n,a=r(2762).FILE_SYSTEM_NAME,o=r(4971).setImmediate,i=(n={},function(e){return Object.prototype.hasOwnProperty.call(n,e)||(n[e]={}),n[e]});function s(e,t){this.readOnly=t,this.objectStore=e}function c(e){this.name=e||a}s.prototype.clear=function(e){if(this.readOnly)o((function(){e("[MemoryContext] Error: write operation on read only context")}));else{var t=this.objectStore;Object.keys(t).forEach((function(e){delete t[e]})),o(e)}},s.prototype.getObject=s.prototype.getBuffer=function(e,t){var r=this;o((function(){t(null,r.objectStore[e])}))},s.prototype.putObject=s.prototype.putBuffer=function(e,t,r){this.readOnly?o((function(){r("[MemoryContext] Error: write operation on read only context")})):(this.objectStore[e]=t,o(r))},s.prototype.delete=function(e,t){this.readOnly?o((function(){t("[MemoryContext] Error: write operation on read only context")})):(delete this.objectStore[e],o(t))},c.isSupported=function(){return!0},c.prototype.open=function(e){this.db=i(this.name),o(e)},c.prototype.getReadOnlyContext=function(){return new s(this.db,!0)},c.prototype.getReadWriteContext=function(){return new s(this.db,!1)},e.exports=c},5123:e=>{function t(e){return e.replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}))}e.exports={guid:function(){return t("xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx").toUpperCase()},nop:function(){},randomChars:function(e){return t("x".repeat(e=e||6))}}},2224:(e,t,r)=>{"use strict";const n=r(2762).ENVIRONMENT;e.exports=function(e){(e=e||{}).TMP=e.TMP||n.TMP,e.PATH=e.PATH||n.PATH,this.get=function(t){return e[t]},this.set=function(t,r){e[t]=r}}},4702:(e,t,r)=>{var{promisify:n}=r(8658),a=r(4148),o=r(8096),i=r(2224),s=r(4971),c=r(7247);function u(e,t){var r=new i((t=t||{}).env),s="/";Object.defineProperty(this,"fs",{get:function(){return e},enumerable:!0}),Object.defineProperty(this,"env",{get:function(){return r},enumerable:!0}),this.cd=function(t,r){t=a.resolve(s,t),e.stat(t,(function(e,n){e?r(new o.ENOTDIR(null,t)):"DIRECTORY"===n.type?(s=t,r()):r(new o.ENOTDIR(null,t))}))},this.pwd=function(){return s},this.promises={},["cd","exec","touch","cat","ls","rm","tempDir","mkdirp","find"].forEach((e=>{this.promises[e]=n(this[e].bind(this))}))}u.prototype.exec=function(e,t,r){var n=this.fs;"function"==typeof t&&(r=t,t=[]),t=t||[],r=r||function(){},e=a.resolve(this.pwd(),e),n.readFile(e,"utf8",(function(e,a){if(e)r(e);else try{new Function("fs","args","callback",a)(n,t,r)}catch(e){r(e)}}))},u.prototype.touch=function(e,t,r){var n=this.fs;"function"==typeof t&&(r=t,t={}),t=t||{},r=r||function(){},e=a.resolve(this.pwd(),e),n.stat(e,(function(a){a?!0===t.updateOnly?r():function(e){n.writeFile(e,"",r)}(e):function(e){var a=Date.now(),o=t.date||a,i=t.date||a;n.utimes(e,o,i,r)}(e)}))},u.prototype.cat=function(e,t){var r=this,n=r.fs,i="";t=t||function(){},e?(e="string"==typeof e?[e]:e,s.eachSeries(e,(function(e,t){var o=a.resolve(r.pwd(),e);n.readFile(o,"utf8",(function(e,r){e?t(e):(i+=r+"\n",t())}))}),(function(e){e?t(e):t(null,i.replace(/\n$/,""))}))):t(new o.EINVAL("Missing files argument"))},u.prototype.ls=function(e,t,r){var n=this,i=n.fs;"function"==typeof t&&(r=t,t={}),t=t||{},r=r||function(){},e?function e(r,o){var c=a.resolve(n.pwd(),r),u=[];i.readdir(c,(function(r,n){r?o(r):s.eachSeries(n,(function(r,n){r=a.join(c,r),i.stat(r,(function(r,o){if(r)n(r);else{var i=o;t.recursive&&"DIRECTORY"===o.type?e(a.join(c,i.name),(function(e,t){e?n(e):(i.contents=t,u.push(i),n())})):(u.push(i),n())}}))}),(function(e){o(e,u)}))}))}(e,r):r(new o.EINVAL("Missing dir argument"))},u.prototype.rm=function(e,t,r){var n=this,i=n.fs;"function"==typeof t&&(r=t,t={}),t=t||{},r=r||function(){},e?function e(r,c){r=a.resolve(n.pwd(),r),i.stat(r,(function(n,u){n?c(n):"FILE"!==u.type?i.readdir(r,(function(n,u){n?c(n):0!==u.length?t.recursive?(u=u.map((function(e){return a.join(r,e)})),s.eachSeries(u,e,(function(e){e?c(e):i.rmdir(r,c)}))):c(new o.ENOTEMPTY(null,r)):i.rmdir(r,c)})):i.unlink(r,c)}))}(e,r):r(new o.EINVAL("Missing path argument"))},u.prototype.tempDir=function(e){var t=this.fs,r=this.env.get("TMP");e=e||function(){},t.mkdir(r,(function(){e(null,r)}))},u.prototype.mkdirp=function(e,t){var r=this.fs;t=t||function(){},e?"/"!==(e=a.resolve(this.pwd(),e))?function e(t,n){r.stat(t,(function(i,s){if(s){if(s.isDirectory())return void n();if(s.isFile())return void n(new o.ENOTDIR(null,t))}else{if(i&&"ENOENT"!==i.code)return void n(i);var c=a.dirname(t);"/"===c?r.mkdir(t,(function(e){e&&"EEXIST"!==e.code?n(e):n()})):e(c,(function(e){if(e)return n(e);r.mkdir(t,(function(e){e&&"EEXIST"!==e.code?n(e):n()}))}))}}))}(e,t):t():t(new o.EINVAL("Missing path argument"))},u.prototype.find=function(e,t,r){var n=this,i=n.fs;"function"==typeof t&&(r=t,t={}),r=r||function(){};var u=(t=t||{}).exec||function(e,t){t()},l=[];function f(e,r){var n=a.removeTrailing(e);!t.regex||t.regex.test(n)?t.name&&!c(a.basename(n),t.name)||t.path&&!c(a.dirname(n),t.path)?r():function(e,t){u(e,(function(r){r?t(r):(l.push(e),t())}))}(e,r):r()}function h(e,t){e=a.resolve(n.pwd(),e),i.readdir(e,(function(r,n){r?"ENOTDIR"===r.code?f(e,t):t(r):f(a.addTrailing(e),(function(r){r?t(r):(n=n.map((function(t){return a.join(e,t)})),s.eachSeries(n,h,(function(e){t(e,l)})))}))}))}e?i.stat(e,(function(t,n){t?r(t):n.isDirectory()?h(e,r):r(new o.ENOTDIR(null,e))})):r(new o.EINVAL("Missing path argument"))},e.exports=u},6769:(e,t,r)=>{"use strict";const n=r(2762),a=r(4148);function o(e){return new Date(Number(e))}function i(e,t,r){this.dev=r,this.node=t.id,this.type=t.type,this.size=t.size,this.nlinks=t.nlinks,this.atime=o(t.atime),this.mtime=o(t.mtime),this.ctime=o(t.ctime),this.atimeMs=t.atime,this.mtimeMs=t.mtime,this.ctimeMs=t.ctime,this.version=t.version,this.mode=t.mode,this.uid=t.uid,this.gid=t.gid,this.name=a.basename(e)}i.prototype.isFile=function(){return this.type===n.NODE_TYPE_FILE},i.prototype.isDirectory=function(){return this.type===n.NODE_TYPE_DIRECTORY},i.prototype.isSymbolicLink=function(){return this.type===n.NODE_TYPE_SYMBOLIC_LINK},i.prototype.isSocket=i.prototype.isFIFO=i.prototype.isCharacterDevice=i.prototype.isBlockDevice=function(){return!1},e.exports=i},4698:(e,t,r)=>{var n=r(2762);function a(e){var t=Date.now();this.id=n.SUPER_NODE_ID,this.type=n.NODE_TYPE_META,this.atime=e.atime||t,this.ctime=e.ctime||t,this.mtime=e.mtime||t,this.rnode=e.rnode}a.create=function(e,t){e.guid((function(r,n){r?t(r):(e.rnode=e.rnode||n,t(null,new a(e)))}))},e.exports=a},5595:(e,t,r)=>{var n=r(9368),a=r(3848);const o="filer-webpack-plugin",i=r(3140),s=r(225);e.exports=class{constructor(e={}){a.validateOptions(e,i),this.options=a.processOptions(e,s)}apply(e){e.hooks.normalModuleFactory.tap(o,(e=>{e.hooks.resolve.tap(o,(e=>{if("fsProvider"===e.request&&e.context===this.options.shimsDir)return this.resolveFsProvider(e);if(!e.context.startsWith(this.options.filerDir))switch(e.request){case"fs":if(!this.options.shimFs)return;return this.applyFsShim(e);case"path":if(!this.options.shimPath)return;return this.applyPathShim(e);default:return}}))}))}resolveFsProvider(e){switch(this.options.fsProvider){case"default":e.request=n.join(this.options.fsProviderDir,"default.js");break;case"indexeddb":e.request=n.join(this.options.fsProviderDir,"indexeddb.js");break;case"memory":e.request=n.join(this.options.fsProviderDir,"memory.js");break;case"custom":e.request=n.join(this.options.fsProviderDir,"custom.js");break;default:throw new Error(["Invalid option for fsProvider.","fsProvider must be one of 'default', 'indexeddb', 'memory' or 'custom'.","If using a custom fsProvider, you must also provide the fsProviderDir option."].join(" "))}}applyFsShim(e){e.request=n.join(this.options.shimsDir,"fs.js")}applyPathShim(e){e.request=n.join(this.options.shimsDir,"path.js")}}},225:(e,t,r)=>{var n=r(2530),a=r(9368);const o="",i=n.cwd();e.exports={filerDir:{process:function(e){return e?a.resolve(e.replace(o,i)):a.join(i,"node_modules","filer")}},shimsDir:{process:function(e){return e?a.resolve(e.replace(o,i)):a.join(i,"node_modules","filer","shims")}},fsProviderDir:{process:function(e){return e?a.resolve(e.replace(o,i)):a.join(i,"node_modules","filer","shims","providers")}},shimFs:{default:!0},shimPath:{default:!0},fsProvider:{default:"default"}}},3140:e=>{e.exports={type:"object",properties:{filerDir:{type:"string"},shimsDir:{type:"string"},shimFs:{type:"boolean"},shimPath:{type:"boolean"},fsProvider:{type:"string"},fsProviderDir:{type:"string"}}}},3848:(e,t,r)=>{var{validate:n}=r(5842);e.exports={validateOptions:function(e,t){n(t,e)},processOptions:function(e,t){const r={};for(const[n,a]of Object.entries(t))r[n]=e[n],void 0===r[n]&&(r[n]=a.default),a.process&&(r[n]=a.process(r[n]));return r}}},4525:(e,t)=>{t.read=function(e,t,r,n,a){var o,i,s=8*a-n-1,c=(1<>1,l=-7,f=r?a-1:0,h=r?-1:1,p=e[t+f];for(f+=h,o=p&(1<<-l)-1,p>>=-l,l+=s;l>0;o=256*o+e[t+f],f+=h,l-=8);for(i=o&(1<<-l)-1,o>>=-l,l+=n;l>0;i=256*i+e[t+f],f+=h,l-=8);if(0===o)o=1-u;else{if(o===c)return i?NaN:1/0*(p?-1:1);i+=Math.pow(2,n),o-=u}return(p?-1:1)*i*Math.pow(2,o-n)},t.write=function(e,t,r,n,a,o){var i,s,c,u=8*o-a-1,l=(1<>1,h=23===a?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,d=n?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,i=l):(i=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-i))<1&&(i--,c*=2),(t+=i+f>=1?h/c:h*Math.pow(2,1-f))*c>=2&&(i++,c/=2),i+f>=l?(s=0,i=l):i+f>=1?(s=(t*c-1)*Math.pow(2,a),i+=f):(s=t*Math.pow(2,f-1)*Math.pow(2,a),i=0));a>=8;e[r+p]=255&s,p+=d,s/=256,a-=8);for(i=i<0;e[r+p]=255&i,p+=d,i/=256,u-=8);e[r+p-d]|=128*m}},500:e=>{"use strict";var t=e.exports=function(e,t,n){"function"==typeof t&&(n=t,t={}),r(t,"function"==typeof(n=t.cb||n)?n:n.pre||function(){},n.post||function(){},e,"",e)};function r(e,n,a,o,i,s,c,u,l,f){if(o&&"object"==typeof o&&!Array.isArray(o)){for(var h in n(o,i,s,c,u,l,f),o){var p=o[h];if(Array.isArray(p)){if(h in t.arrayKeywords)for(var d=0;d{e.exports=h,h.Minimatch=p;var n=function(){try{return r(2872)}catch(e){}}()||{sep:"/"};h.sep=n.sep;var a=h.GLOBSTAR=p.GLOBSTAR={},o=r(8098),i={"!":{open:"(?:(?!(?:",close:"))[^/]*?)"},"?":{open:"(?:",close:")?"},"+":{open:"(?:",close:")+"},"*":{open:"(?:",close:")*"},"@":{open:"(?:",close:")"}},s="[^/]",c=s+"*?",u="().*{}+?[]^$\\!".split("").reduce((function(e,t){return e[t]=!0,e}),{}),l=/\/+/;function f(e,t){t=t||{};var r={};return Object.keys(e).forEach((function(t){r[t]=e[t]})),Object.keys(t).forEach((function(e){r[e]=t[e]})),r}function h(e,t,r){return m(t),r||(r={}),!(!r.nocomment&&"#"===t.charAt(0))&&new p(t,r).match(e)}function p(e,t){if(!(this instanceof p))return new p(e,t);m(e),t||(t={}),e=e.trim(),t.allowWindowsEscape||"/"===n.sep||(e=e.split(n.sep).join("/")),this.options=t,this.set=[],this.pattern=e,this.regexp=null,this.negate=!1,this.comment=!1,this.empty=!1,this.partial=!!t.partial,this.make()}function d(e,t){return t||(t=this instanceof p?this.options:{}),e=void 0===e?this.pattern:e,m(e),t.nobrace||!/\{(?:(?!\{).)*\}/.test(e)?[e]:o(e)}h.filter=function(e,t){return t=t||{},function(r,n,a){return h(r,e,t)}},h.defaults=function(e){if(!e||"object"!=typeof e||!Object.keys(e).length)return h;var t=h,r=function(r,n,a){return t(r,n,f(e,a))};return(r.Minimatch=function(r,n){return new t.Minimatch(r,f(e,n))}).defaults=function(r){return t.defaults(f(e,r)).Minimatch},r.filter=function(r,n){return t.filter(r,f(e,n))},r.defaults=function(r){return t.defaults(f(e,r))},r.makeRe=function(r,n){return t.makeRe(r,f(e,n))},r.braceExpand=function(r,n){return t.braceExpand(r,f(e,n))},r.match=function(r,n,a){return t.match(r,n,f(e,a))},r},p.defaults=function(e){return h.defaults(e).Minimatch},p.prototype.debug=function(){},p.prototype.make=function(){var e=this.pattern,t=this.options;if(t.nocomment||"#"!==e.charAt(0))if(e){this.parseNegate();var r=this.globSet=this.braceExpand();t.debug&&(this.debug=function(){console.error.apply(console,arguments)}),this.debug(this.pattern,r),r=this.globParts=r.map((function(e){return e.split(l)})),this.debug(this.pattern,r),r=r.map((function(e,t,r){return e.map(this.parse,this)}),this),this.debug(this.pattern,r),r=r.filter((function(e){return-1===e.indexOf(!1)})),this.debug(this.pattern,r),this.set=r}else this.empty=!0;else this.comment=!0},p.prototype.parseNegate=function(){var e=this.pattern,t=!1,r=0;if(!this.options.nonegate){for(var n=0,a=e.length;n65536)throw new TypeError("pattern is too long")};p.prototype.parse=function(e,t){m(e);var r=this.options;if("**"===e){if(!r.noglobstar)return a;e="*"}if(""===e)return"";var n,o="",l=!!r.nocase,f=!1,h=[],p=[],d=!1,y=-1,g=-1,w="."===e.charAt(0)?"":r.dot?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)",b=this;function E(){if(n){switch(n){case"*":o+=c,l=!0;break;case"?":o+=s,l=!0;break;default:o+="\\"+n}b.debug("clearStateChar %j %j",n,o),n=!1}}for(var A,P=0,x=e.length;P-1;D--){var $=p[D],L=o.slice(0,$.reStart),k=o.slice($.reStart,$.reEnd-8),F=o.slice($.reEnd-8,$.reEnd),C=o.slice($.reEnd);F+=C;var T=L.split("(").length-1,N=C;for(P=0;P=0&&!(a=e[o]);o--);for(o=0;o>> no match, partial?",e,h,t,p),h!==s))}if("string"==typeof l?(u=f===l,this.debug("string match",l,f,u)):(u=f.match(l),this.debug("pattern match",l,f,u)),!u)return!1}if(o===s&&i===c)return!0;if(o===s)return r;if(i===c)return o===s-1&&""===e[o];throw new Error("wtf?")}},9368:(e,t,r)=>{"use strict";var n=r(2530);function a(e){if("string"!=typeof e)throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}function o(e,t){for(var r,n="",a=0,o=-1,i=0,s=0;s<=e.length;++s){if(s2){var c=n.lastIndexOf("/");if(c!==n.length-1){-1===c?(n="",a=0):a=(n=n.slice(0,c)).length-1-n.lastIndexOf("/"),o=s,i=0;continue}}else if(2===n.length||1===n.length){n="",a=0,o=s,i=0;continue}t&&(n.length>0?n+="/..":n="..",a=2)}else n.length>0?n+="/"+e.slice(o+1,s):n=e.slice(o+1,s),a=s-o-1;o=s,i=0}else 46===r&&-1!==i?++i:i=-1}return n}var i={resolve:function(){for(var e,t="",r=!1,i=arguments.length-1;i>=-1&&!r;i--){var s;i>=0?s=arguments[i]:(void 0===e&&(e=n.cwd()),s=e),a(s),0!==s.length&&(t=s+"/"+t,r=47===s.charCodeAt(0))}return t=o(t,!r),r?t.length>0?"/"+t:"/":t.length>0?t:"."},normalize:function(e){if(a(e),0===e.length)return".";var t=47===e.charCodeAt(0),r=47===e.charCodeAt(e.length-1);return 0!==(e=o(e,!t)).length||t||(e="."),e.length>0&&r&&(e+="/"),t?"/"+e:e},isAbsolute:function(e){return a(e),e.length>0&&47===e.charCodeAt(0)},join:function(){if(0===arguments.length)return".";for(var e,t=0;t0&&(void 0===e?e=r:e+="/"+r)}return void 0===e?".":i.normalize(e)},relative:function(e,t){if(a(e),a(t),e===t)return"";if((e=i.resolve(e))===(t=i.resolve(t)))return"";for(var r=1;ru){if(47===t.charCodeAt(s+f))return t.slice(s+f+1);if(0===f)return t.slice(s+f)}else o>u&&(47===e.charCodeAt(r+f)?l=f:0===f&&(l=0));break}var h=e.charCodeAt(r+f);if(h!==t.charCodeAt(s+f))break;47===h&&(l=f)}var p="";for(f=r+l+1;f<=n;++f)f!==n&&47!==e.charCodeAt(f)||(0===p.length?p+="..":p+="/..");return p.length>0?p+t.slice(s+l):(s+=l,47===t.charCodeAt(s)&&++s,t.slice(s))},_makeLong:function(e){return e},dirname:function(e){if(a(e),0===e.length)return".";for(var t=e.charCodeAt(0),r=47===t,n=-1,o=!0,i=e.length-1;i>=1;--i)if(47===(t=e.charCodeAt(i))){if(!o){n=i;break}}else o=!1;return-1===n?r?"/":".":r&&1===n?"//":e.slice(0,n)},basename:function(e,t){if(void 0!==t&&"string"!=typeof t)throw new TypeError('"ext" argument must be a string');a(e);var r,n=0,o=-1,i=!0;if(void 0!==t&&t.length>0&&t.length<=e.length){if(t.length===e.length&&t===e)return"";var s=t.length-1,c=-1;for(r=e.length-1;r>=0;--r){var u=e.charCodeAt(r);if(47===u){if(!i){n=r+1;break}}else-1===c&&(i=!1,c=r+1),s>=0&&(u===t.charCodeAt(s)?-1==--s&&(o=r):(s=-1,o=c))}return n===o?o=c:-1===o&&(o=e.length),e.slice(n,o)}for(r=e.length-1;r>=0;--r)if(47===e.charCodeAt(r)){if(!i){n=r+1;break}}else-1===o&&(i=!1,o=r+1);return-1===o?"":e.slice(n,o)},extname:function(e){a(e);for(var t=-1,r=0,n=-1,o=!0,i=0,s=e.length-1;s>=0;--s){var c=e.charCodeAt(s);if(47!==c)-1===n&&(o=!1,n=s+1),46===c?-1===t?t=s:1!==i&&(i=1):-1!==t&&(i=-1);else if(!o){r=s+1;break}}return-1===t||-1===n||0===i||1===i&&t===n-1&&t===r+1?"":e.slice(t,n)},format:function(e){if(null===e||"object"!=typeof e)throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof e);return function(e,t){var r=t.dir||t.root,n=t.base||(t.name||"")+(t.ext||"");return r?r===t.root?r+n:r+"/"+n:n}(0,e)},parse:function(e){a(e);var t={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return t;var r,n=e.charCodeAt(0),o=47===n;o?(t.root="/",r=1):r=0;for(var i=-1,s=0,c=-1,u=!0,l=e.length-1,f=0;l>=r;--l)if(47!==(n=e.charCodeAt(l)))-1===c&&(u=!1,c=l+1),46===n?-1===i?i=l:1!==f&&(f=1):-1!==i&&(f=-1);else if(!u){s=l+1;break}return-1===i||-1===c||0===f||1===f&&i===c-1&&i===s+1?-1!==c&&(t.base=t.name=0===s&&o?e.slice(1,c):e.slice(s,c)):(0===s&&o?(t.name=e.slice(1,i),t.base=e.slice(1,c)):(t.name=e.slice(s,i),t.base=e.slice(s,c)),t.ext=e.slice(i,c)),s>0?t.dir=e.slice(0,s-1):o&&(t.dir="/"),t},sep:"/",delimiter:":",win32:null,posix:null};i.posix=i,e.exports=i},2530:e=>{var t,r,n=e.exports={};function a(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function i(e){if(t===setTimeout)return setTimeout(e,0);if((t===a||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(r){try{return t.call(null,e,0)}catch(r){return t.call(this,e,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:a}catch(e){t=a}try{r="function"==typeof clearTimeout?clearTimeout:o}catch(e){r=o}}();var s,c=[],u=!1,l=-1;function f(){u&&s&&(u=!1,s.length?c=s.concat(c):l=-1,c.length&&h())}function h(){if(!u){var e=i(f);u=!0;for(var t=c.length;t;){for(s=c,c=[];++l1)for(var r=1;r{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;const{stringHints:n,numberHints:a}=r(6737),o={type:1,not:1,oneOf:1,anyOf:1,if:1,enum:1,const:1,instanceof:1,required:2,pattern:2,patternRequired:2,format:2,formatMinimum:2,formatMaximum:2,minimum:2,exclusiveMinimum:2,maximum:2,exclusiveMaximum:2,multipleOf:2,uniqueItems:2,contains:2,minLength:2,maxLength:2,minItems:2,maxItems:2,minProperties:2,maxProperties:2,dependencies:2,propertyNames:2,additionalItems:2,additionalProperties:2,absolutePath:2};function i(e,t){const r=e.reduce(((e,r)=>Math.max(e,t(r))),0);return e.filter((e=>t(e)===r))}function s(e,t){let r=e.length-1;const n=t=>0!==e[r].schemaPath.indexOf(t);for(;r>-1&&!t.every(n);)if("anyOf"===e[r].keyword||"oneOf"===e[r].keyword){const t=c(e[r]),n=s(e.slice(0,r),t.concat(e[r].schemaPath));r=n-1}else r-=1;return r+1}function c(e){const{schema:t}=e;return Array.isArray(t)?t.map((({$ref:e})=>e)).filter((e=>e)):[]}function u(e,t){return e.replace(/\n(?!$)/g,`\n${t}`)}function l(e){return!!e.not}function f(e){return l(e)?f(e.not):e}function h(e){const t=f(e);return d(t)||m(t)||v(t)||b(t)||y(t)}function p(e){return"object"==typeof e&&null!==e}function d(e){return"number"===e.type||void 0!==e.minimum||void 0!==e.exclusiveMinimum||void 0!==e.maximum||void 0!==e.exclusiveMaximum||void 0!==e.multipleOf}function m(e){return"integer"===e.type||void 0!==e.minimum||void 0!==e.exclusiveMinimum||void 0!==e.maximum||void 0!==e.exclusiveMaximum||void 0!==e.multipleOf}function v(e){return"string"===e.type||void 0!==e.minLength||void 0!==e.maxLength||void 0!==e.pattern||void 0!==e.format||void 0!==e.formatMinimum||void 0!==e.formatMaximum}function y(e){return"boolean"===e.type}function g(e){return"array"===e.type||"number"==typeof e.minItems||"number"==typeof e.maxItems||void 0!==e.uniqueItems||void 0!==e.items||void 0!==e.additionalItems||void 0!==e.contains}function w(e){return"object"===e.type||void 0!==e.minProperties||void 0!==e.maxProperties||void 0!==e.required||void 0!==e.properties||void 0!==e.patternProperties||void 0!==e.additionalProperties||void 0!==e.dependencies||void 0!==e.propertyNames||void 0!==e.patternRequired}function b(e){return"null"===e.type}function E(e){if(!e)return"";if(!e.type){if(d(e)||m(e))return" | should be any non-number";if(v(e))return" | should be any non-string";if(g(e))return" | should be any non-array";if(w(e))return" | should be any non-object"}return""}function A(e){return e.length>0?`(${e.join(", ")})`:""}function P(e,t){return d(e)||m(e)?a(e,t):v(e)?n(e,t):[]}class x extends Error{constructor(e,t,r={}){let n,a;if(super(),this.name="ValidationError",this.errors=e,this.schema=t,t.title&&(!r.name||!r.baseDataPath)){const e=t.title.match(/^(.+) (.+)$/);e&&(r.name||([,n]=e),r.baseDataPath||([,,a]=e))}this.headerName=r.name||n||"Object",this.baseDataPath=r.baseDataPath||a||"configuration",this.postFormatter=r.postFormatter||null;const o=`Invalid ${this.baseDataPath} object. ${this.headerName} has been initialized using ${i=this.baseDataPath,/^[aeiou]/i.test(i)?"an":"a"} ${this.baseDataPath} object that does not match the API schema.\n`;var i;this.message=`${o}${this.formatValidationErrors(e)}`,Error.captureStackTrace(this,this.constructor)}getSchemaPart(e){const t=e.split("/");let r=this.schema;for(let e=1;ea?r.includes(t)?"(recursive)":this.formatSchema(t,n,r.concat(e)):this.formatSchema(t,n,r);if(l(e)&&!w(e)){if(h(e.not))return n=!t,a(e.not);const r=!e.not.not;return n=!t,r?(t?"":"non ")+a(e.not):a(e.not)}if(e.instanceof){const{instanceof:t}=e;return(Array.isArray(t)?t:[t]).map((e=>"Function"===e?"function":e)).join(" | ")}if(e.enum)return`${e.enum.map((t=>null===t&&e.undefinedAsNull?`${JSON.stringify(t)} | undefined`:JSON.stringify(t))).join(" | ")}`;if(void 0!==e.const)return JSON.stringify(e.const);if(e.oneOf)return e.oneOf.map((e=>a(e,!0))).join(" | ");if(e.anyOf)return e.anyOf.map((e=>a(e,!0))).join(" | ");if(e.allOf)return e.allOf.map((e=>a(e,!0))).join(" & ");if(e.if){const{if:t,then:r,else:n}=e;return`${t?`if ${a(t)}`:""}${r?` then ${a(r)}`:""}${n?` else ${a(n)}`:""}`}if(e.$ref)return a(this.getSchemaPart(e.$ref),!0);if(d(e)||m(e)){const[r,...n]=P(e,t),a=`${r}${n.length>0?` ${A(n)}`:""}`;return t?a:n.length>0?`non-${r} | ${a}`:`non-${r}`}if(v(e)){const[r,...n]=P(e,t),a=`${r}${n.length>0?` ${A(n)}`:""}`;return t?a:"string"===a?"non-string":`non-string | ${a}`}if(y(e))return(t?"":"non-")+"boolean";if(g(e)){n=!0;const t=[];"number"==typeof e.minItems&&t.push(`should not have fewer than ${e.minItems} item${e.minItems>1?"s":""}`),"number"==typeof e.maxItems&&t.push(`should not have more than ${e.maxItems} item${e.maxItems>1?"s":""}`),e.uniqueItems&&t.push("should not have duplicate items");const r=void 0===e.additionalItems||Boolean(e.additionalItems);let o="";return e.items?Array.isArray(e.items)&&e.items.length>0?(o=`${e.items.map((e=>a(e))).join(", ")}`,r&&e.additionalItems&&p(e.additionalItems)&&Object.keys(e.additionalItems).length>0&&t.push(`additional items should be ${a(e.additionalItems)}`)):o=e.items&&Object.keys(e.items).length>0?`${a(e.items)}`:"any":o="any",e.contains&&Object.keys(e.contains).length>0&&t.push(`should contains at least one ${this.formatSchema(e.contains)} item`),`[${o}${r?", ...":""}]${t.length>0?` (${t.join(", ")})`:""}`}if(w(e)){n=!0;const t=[];if("number"==typeof e.minProperties&&t.push(`should not have fewer than ${e.minProperties} ${e.minProperties>1?"properties":"property"}`),"number"==typeof e.maxProperties&&t.push(`should not have more than ${e.maxProperties} ${e.minProperties&&e.minProperties>1?"properties":"property"}`),e.patternProperties&&Object.keys(e.patternProperties).length>0){const r=Object.keys(e.patternProperties);t.push(`additional property names should match pattern${r.length>1?"s":""} ${r.map((e=>JSON.stringify(e))).join(" | ")}`)}const r=e.properties?Object.keys(e.properties):[],o=e.required?e.required:[],i=[...new Set([].concat(o).concat(r))].map((e=>`${e}${o.includes(e)?"":"?"}`)).concat(void 0===e.additionalProperties||Boolean(e.additionalProperties)?e.additionalProperties&&p(e.additionalProperties)?[`: ${a(e.additionalProperties)}`]:["…"]:[]).join(", "),{dependencies:s,propertyNames:c,patternRequired:u}=e;return s&&Object.keys(s).forEach((e=>{const r=s[e];Array.isArray(r)?t.push(`should have ${r.length>1?"properties":"property"} ${r.map((e=>`'${e}'`)).join(", ")} when property '${e}' is present`):t.push(`should be valid according to the schema ${a(r)} when property '${e}' is present`)})),c&&Object.keys(c).length>0&&t.push(`each property name should match format ${JSON.stringify(e.propertyNames.format)}`),u&&u.length>0&&t.push(`should have property matching pattern ${u.map((e=>JSON.stringify(e)))}`),`object {${i?` ${i} `:""}}${t.length>0?` (${t.join(", ")})`:""}`}return b(e)?(t?"":"non-")+"null":Array.isArray(e.type)?`${e.type.join(" | ")}`:JSON.stringify(e,null,2)}getSchemaPartText(e,t,r=!1,n=!0){if(!e)return"";if(Array.isArray(t))for(let r=0;r ${e.description}`),e.link&&(a+=`\n-> Read more at ${e.link}`),a}getSchemaPartDescription(e){if(!e)return"";for(;e.$ref;)e=this.getSchemaPart(e.$ref);let t="";return e.description&&(t+=`\n-> ${e.description}`),e.link&&(t+=`\n-> Read more at ${e.link}`),t}formatValidationError(e){const{keyword:t,dataPath:r}=e,n=`${this.baseDataPath}${r}`;switch(t){case"type":{const{parentSchema:t,params:r}=e;switch(r.type){case"number":case"string":case"boolean":case"null":return`${n} should be a ${this.getSchemaPartText(t,!1,!0)}`;case"integer":return`${n} should be an ${this.getSchemaPartText(t,!1,!0)}`;case"array":return`${n} should be an array:\n${this.getSchemaPartText(t)}`;case"object":return`${n} should be an object:\n${this.getSchemaPartText(t)}`;default:return`${n} should be:\n${this.getSchemaPartText(t)}`}}case"instanceof":{const{parentSchema:t}=e;return`${n} should be an instance of ${this.getSchemaPartText(t,!1,!0)}`}case"pattern":{const{params:t,parentSchema:r}=e,{pattern:a}=t;return`${n} should match pattern ${JSON.stringify(a)}${E(r)}.${this.getSchemaPartDescription(r)}`}case"format":{const{params:t,parentSchema:r}=e,{format:a}=t;return`${n} should match format ${JSON.stringify(a)}${E(r)}.${this.getSchemaPartDescription(r)}`}case"formatMinimum":case"formatMaximum":{const{params:t,parentSchema:r}=e,{comparison:a,limit:o}=t;return`${n} should be ${a} ${JSON.stringify(o)}${E(r)}.${this.getSchemaPartDescription(r)}`}case"minimum":case"maximum":case"exclusiveMinimum":case"exclusiveMaximum":{const{parentSchema:t,params:r}=e,{comparison:a,limit:o}=r,[,...i]=P(t,!0);return 0===i.length&&i.push(`should be ${a} ${o}`),`${n} ${i.join(" ")}${E(t)}.${this.getSchemaPartDescription(t)}`}case"multipleOf":{const{params:t,parentSchema:r}=e,{multipleOf:a}=t;return`${n} should be multiple of ${a}${E(r)}.${this.getSchemaPartDescription(r)}`}case"patternRequired":{const{params:t,parentSchema:r}=e,{missingPattern:a}=t;return`${n} should have property matching pattern ${JSON.stringify(a)}${E(r)}.${this.getSchemaPartDescription(r)}`}case"minLength":{const{params:t,parentSchema:r}=e,{limit:a}=t;if(1===a)return`${n} should be a non-empty string${E(r)}.${this.getSchemaPartDescription(r)}`;const o=a-1;return`${n} should be longer than ${o} character${o>1?"s":""}${E(r)}.${this.getSchemaPartDescription(r)}`}case"minItems":{const{params:t,parentSchema:r}=e,{limit:a}=t;return 1===a?`${n} should be a non-empty array${E(r)}.${this.getSchemaPartDescription(r)}`:`${n} should not have fewer than ${a} items${E(r)}.${this.getSchemaPartDescription(r)}`}case"minProperties":{const{params:t,parentSchema:r}=e,{limit:a}=t;return 1===a?`${n} should be a non-empty object${E(r)}.${this.getSchemaPartDescription(r)}`:`${n} should not have fewer than ${a} properties${E(r)}.${this.getSchemaPartDescription(r)}`}case"maxLength":{const{params:t,parentSchema:r}=e,{limit:a}=t,o=a+1;return`${n} should be shorter than ${o} character${o>1?"s":""}${E(r)}.${this.getSchemaPartDescription(r)}`}case"maxItems":{const{params:t,parentSchema:r}=e,{limit:a}=t;return`${n} should not have more than ${a} items${E(r)}.${this.getSchemaPartDescription(r)}`}case"maxProperties":{const{params:t,parentSchema:r}=e,{limit:a}=t;return`${n} should not have more than ${a} properties${E(r)}.${this.getSchemaPartDescription(r)}`}case"uniqueItems":{const{params:t,parentSchema:r}=e,{i:a}=t;return`${n} should not contain the item '${e.data[a]}' twice${E(r)}.${this.getSchemaPartDescription(r)}`}case"additionalItems":{const{params:t,parentSchema:r}=e,{limit:a}=t;return`${n} should not have more than ${a} items${E(r)}. These items are valid:\n${this.getSchemaPartText(r)}`}case"contains":{const{parentSchema:t}=e;return`${n} should contains at least one ${this.getSchemaPartText(t,["contains"])} item${E(t)}.`}case"required":{const{parentSchema:t,params:r}=e,a=r.missingProperty.replace(/^\./,""),o=t&&Boolean(t.properties&&t.properties[a]);return`${n} misses the property '${a}'${E(t)}.${o?` Should be:\n${this.getSchemaPartText(t,["properties",a])}`:this.getSchemaPartDescription(t)}`}case"additionalProperties":{const{params:t,parentSchema:r}=e,{additionalProperty:a}=t;return`${n} has an unknown property '${a}'${E(r)}. These properties are valid:\n${this.getSchemaPartText(r)}`}case"dependencies":{const{params:t,parentSchema:r}=e,{property:a,deps:o}=t;return`${n} should have properties ${o.split(",").map((e=>`'${e.trim()}'`)).join(", ")} when property '${a}' is present${E(r)}.${this.getSchemaPartDescription(r)}`}case"propertyNames":{const{params:t,parentSchema:r,schema:a}=e,{propertyName:o}=t;return`${n} property name '${o}' is invalid${E(r)}. Property names should be match format ${JSON.stringify(a.format)}.${this.getSchemaPartDescription(r)}`}case"enum":{const{parentSchema:t}=e;return t&&t.enum&&1===t.enum.length?`${n} should be ${this.getSchemaPartText(t,!1,!0)}`:`${n} should be one of these:\n${this.getSchemaPartText(t)}`}case"const":{const{parentSchema:t}=e;return`${n} should be equal to constant ${this.getSchemaPartText(t,!1,!0)}`}case"not":{const t=w(e.parentSchema)?`\n${this.getSchemaPartText(e.parentSchema)}`:"",r=this.getSchemaPartText(e.schema,!1,!1,!1);if(h(e.schema))return`${n} should be any ${r}${t}.`;const{schema:a,parentSchema:o}=e;return`${n} should not be ${this.getSchemaPartText(a,!1,!0)}${o&&w(o)?`\n${this.getSchemaPartText(o)}`:""}`}case"oneOf":case"anyOf":{const{parentSchema:t,children:r}=e;if(r&&r.length>0){if(1===e.schema.length){const e=r[r.length-1],n=r.slice(0,r.length-1);return this.formatValidationError(Object.assign({},e,{children:n,parentSchema:Object.assign({},t,e.parentSchema)}))}let a=function(e){let t=e;return t=i(t,(e=>e.dataPath?e.dataPath.length:0)),t=i(t,(e=>o[e.keyword]||2)),t}(r);return 1===a.length?this.formatValidationError(a[0]):(a=function(e){const t=[];let r=e.length-1;for(;r>0;){const n=e[r];if("anyOf"===n.keyword||"oneOf"===n.keyword){const a=c(n),o=s(e.slice(0,r),a.concat(n.schemaPath));o!==r?(t.push(Object.assign({},n,{children:e.slice(o,r)})),r=o):t.push(n)}else t.push(n);r-=1}return 0===r&&t.push(e[r]),t.reverse()}(a),`${n} should be one of these:\n${this.getSchemaPartText(t)}\nDetails:\n${a.map((e=>` * ${u(this.formatValidationError(e)," ")}`)).join("\n")}`)}return`${n} should be one of these:\n${this.getSchemaPartText(t)}`}case"if":{const{params:t,parentSchema:r}=e,{failingKeyword:a}=t;return`${n} should match "${a}" schema:\n${this.getSchemaPartText(r,[a])}`}case"absolutePath":{const{message:t,parentSchema:r}=e;return`${n}: ${t}${this.getSchemaPartDescription(r)}`}default:{const{message:t,parentSchema:r}=e;return`${n} ${t} (${JSON.stringify(e,null,2)}).\n${this.getSchemaPartText(r,!1)}`}}}formatValidationErrors(e){return e.map((e=>{let t=this.formatValidationError(e);return this.postFormatter&&(t=this.postFormatter(t,e)),` - ${u(t," ")}`})).join("\n")}}var S=x;t.default=S},5842:(e,t,r)=>{"use strict";const{validate:n,ValidationError:a,enableValidation:o,disableValidation:i,needValidate:s}=r(202);e.exports={validate:n,ValidationError:a,enableValidation:o,disableValidation:i,needValidate:s}},120:(e,t)=>{"use strict";function r(e,t,r){return{dataPath:void 0,schemaPath:void 0,keyword:"absolutePath",params:{absolutePath:r},message:e,parentSchema:t}}function n(e,t,n){return r(e?`The provided value ${JSON.stringify(n)} is not an absolute path!`:`A relative path is expected. However, the provided value ${JSON.stringify(n)} is an absolute path!`,t,n)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){return e.addKeyword("absolutePath",{errors:!0,type:"string",compile(e,t){const a=o=>{let i=!0;return o.includes("!")&&(a.errors=[r(`The provided value ${JSON.stringify(o)} contains exclamation mark (!) which is not allowed because it's reserved for loader syntax.`,t,o)],i=!1),e===/^(?:[A-Za-z]:(\\|\/)|\\\\|\/)/.test(o)||(a.errors=[n(e,t,o)],i=!1),i};return a.errors=[],a}}),e}},5217:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){return function(e,t,n){let a;try{a=r(1793);const{RULES:o}=e;let i;for(let e=0;e{"use strict";class t{static getOperator(e,t){return"left"===e?t?">":">=":t?"<":"<="}static formatRight(e,r,n){return!1===r?t.formatLeft(e,!r,!n):`should be ${t.getOperator("right",n)} ${e}`}static formatLeft(e,r,n){return!1===r?t.formatRight(e,!r,!n):`should be ${t.getOperator("left",n)} ${e}`}static formatRange(e,r,n,a,o){let i="should be";return i+=` ${t.getOperator(o?"left":"right",o?n:!n)} ${e} `,i+=o?"and":"or",i+=` ${t.getOperator(o?"right":"left",o?a:!a)} ${r}`,i}static getRangeValue(e,t){let r=t?1/0:-1/0,n=-1;const a=t?([e])=>e<=r:([e])=>e>=r;for(let t=0;t-1?e[n]:[1/0,!0]}constructor(){this._left=[],this._right=[]}left(e,t=!1){this._left.push([e,t])}right(e,t=!1){this._right.push([e,t])}format(e=!0){const[r,n]=t.getRangeValue(this._left,e),[a,o]=t.getRangeValue(this._right,!e);if(!Number.isFinite(r)&&!Number.isFinite(a))return"";const i=n?r+1:r;return i===(o?a-1:a)?`should be ${e?"":"!"}= ${i}`:Number.isFinite(r)&&!Number.isFinite(a)?t.formatLeft(r,e,n):!Number.isFinite(r)&&Number.isFinite(a)?t.formatRight(a,e,o):t.formatRange(r,a,n,o,e)}}e.exports=t},6737:(e,t,r)=>{"use strict";const n=r(6804);e.exports.stringHints=function(e,t){const r=[];let n="string";const a={...e};if(!t){const e=a.minLength,t=a.formatMinimum,r=a.formatExclusiveMaximum;a.minLength=a.maxLength,a.maxLength=e,a.formatMinimum=a.formatMaximum,a.formatMaximum=t,a.formatExclusiveMaximum=!a.formatExclusiveMinimum,a.formatExclusiveMinimum=!r}if("number"==typeof a.minLength)if(1===a.minLength)n="non-empty string";else{const e=Math.max(a.minLength-1,0);r.push(`should be longer than ${e} character${e>1?"s":""}`)}if("number"==typeof a.maxLength)if(0===a.maxLength)n="empty string";else{const e=a.maxLength+1;r.push(`should be shorter than ${e} character${e>1?"s":""}`)}return a.pattern&&r.push(`should${t?"":" not"} match pattern ${JSON.stringify(a.pattern)}`),a.format&&r.push(`should${t?"":" not"} match format ${JSON.stringify(a.format)}`),a.formatMinimum&&r.push(`should be ${a.formatExclusiveMinimum?">":">="} ${JSON.stringify(a.formatMinimum)}`),a.formatMaximum&&r.push(`should be ${a.formatExclusiveMaximum?"<":"<="} ${JSON.stringify(a.formatMaximum)}`),[n].concat(r)},e.exports.numberHints=function(e,t){const r=["integer"===e.type?"integer":"number"],a=new n;"number"==typeof e.minimum&&a.left(e.minimum),"number"==typeof e.exclusiveMinimum&&a.left(e.exclusiveMinimum,!0),"number"==typeof e.maximum&&a.right(e.maximum),"number"==typeof e.exclusiveMaximum&&a.right(e.exclusiveMaximum,!0);const o=a.format(t);return o&&r.push(o),"number"==typeof e.multipleOf&&r.push(`should${t?"":" not"} be multiple of ${e.multipleOf}`),r}},202:(e,t,r)=>{"use strict";var n=r(2530);Object.defineProperty(t,"__esModule",{value:!0}),t.validate=function(e,t,r){if(!f())return;let n=[];if(Array.isArray(t))for(let r=0;r<=t.length-1;r++)n.push(...p(e,t[r]).map((e=>u(e,r))));else n=p(e,t);if(n.length>0)throw new i.default(n,e,r)},t.enableValidation=function(){l=!1,n&&n.env&&(n.env.SKIP_VALIDATION="n")},t.disableValidation=function(){l=!0,n&&n.env&&(n.env.SKIP_VALIDATION="y")},t.needValidate=f,Object.defineProperty(t,"ValidationError",{enumerable:!0,get:function(){return i.default}});var a=s(r(120)),o=s(r(5217)),i=s(r(3760));function s(e){return e&&e.__esModule?e:{default:e}}const c=(e=>{let t,r=!1;return()=>(r||(t=e(),r=!0,e=void 0),t)})((()=>{const e=r(8903),t=r(4740),n=new e({allErrors:!0,verbose:!0,$data:!0});return t(n,["instanceof","formatMinimum","formatMaximum","patternRequired"]),(0,a.default)(n),(0,o.default)(n),n}));function u(e,t){return e.dataPath=`[${t}]${e.dataPath}`,e.children&&e.children.forEach((e=>u(e,t))),e}let l=!1;function f(){if(l)return!1;if(n&&n.env&&n.env.SKIP_VALIDATION){const e=n.env.SKIP_VALIDATION.trim();if(/^(?:y|yes|true|1|on)$/i.test(e))return!1;if(/^(?:n|no|false|0|off)$/i.test(e))return!0}return!0}const h=new WeakMap;function p(e,t){let r=h.get(e);return r||(r=c().compile(e),h.set(e,r)),r(t)?[]:r.errors?function(e){let t=[];for(const r of e){const{dataPath:e}=r;let n=[];t=t.filter((t=>!t.dataPath.includes(e)||(t.children&&(n=n.concat(t.children.slice(0))),t.children=void 0,n.push(t),!1))),n.length&&(r.children=n),t.push(r)}return t}(r.errors):[]}},5701:e=>{"use strict";var t=[];function r(e){for(var r=-1,n=0;n{"use strict";var t={};e.exports=function(e,r){var n=function(e){if(void 0===t[e]){var r=document.querySelector(e);if(window.HTMLIFrameElement&&r instanceof window.HTMLIFrameElement)try{r=r.contentDocument.head}catch(e){r=null}t[e]=r}return t[e]}(e);if(!n)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");n.appendChild(r)}},7182:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},6850:(e,t,r)=>{"use strict";e.exports=function(e){var t=r.nc;t&&e.setAttribute("nonce",t)}},8236:e=>{"use strict";e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(r){!function(e,t,r){var n="";r.supports&&(n+="@supports (".concat(r.supports,") {")),r.media&&(n+="@media ".concat(r.media," {"));var a=void 0!==r.layer;a&&(n+="@layer".concat(r.layer.length>0?" ".concat(r.layer):""," {")),n+=r.css,a&&(n+="}"),r.media&&(n+="}"),r.supports&&(n+="}");var o=r.sourceMap;o&&"undefined"!=typeof btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),t.styleTagTransform(n,e,t.options)}(t,e,r)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},9213:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},7533:function(e,t){!function(e){"use strict";function t(){for(var e=arguments.length,t=Array(e),r=0;r1){t[0]=t[0].slice(0,-1);for(var n=t.length-1,a=1;a= 0x80 (not a basic code point)","invalid-input":"Invalid input"},m=Math.floor,v=String.fromCharCode;function y(e){throw new RangeError(d[e])}function g(e,t){var r=e.split("@"),n="";return r.length>1&&(n=r[0]+"@",e=r[1]),n+function(e,t){for(var r=[],n=e.length;n--;)r[n]=t(e[n]);return r}((e=e.replace(p,".")).split("."),t).join(".")}function w(e){for(var t=[],r=0,n=e.length;r=55296&&a<=56319&&r>1,e+=m(e/t);e>455;n+=l)e=m(e/35);return m(n+36*e/(e+38))},A=function(e){var t,r=[],n=e.length,a=0,o=128,i=72,s=e.lastIndexOf("-");s<0&&(s=0);for(var c=0;c=128&&y("not-basic"),r.push(e.charCodeAt(c));for(var f=s>0?s+1:0;f=n&&y("invalid-input");var v=(t=e.charCodeAt(f++))-48<10?t-22:t-65<26?t-65:t-97<26?t-97:l;(v>=l||v>m((u-a)/p))&&y("overflow"),a+=v*p;var g=d<=i?1:d>=i+26?26:d-i;if(vm(u/w)&&y("overflow"),p*=w}var b=r.length+1;i=E(a-h,b,0==h),m(a/b)>u-o&&y("overflow"),o+=m(a/b),a%=b,r.splice(a++,0,o)}return String.fromCodePoint.apply(String,r)},P=function(e){var t=[],r=(e=w(e)).length,n=128,a=0,o=72,i=!0,s=!1,c=void 0;try{for(var f,h=e[Symbol.iterator]();!(i=(f=h.next()).done);i=!0){var p=f.value;p<128&&t.push(v(p))}}catch(e){s=!0,c=e}finally{try{!i&&h.return&&h.return()}finally{if(s)throw c}}var d=t.length,g=d;for(d&&t.push("-");g=n&&Im((u-a)/R)&&y("overflow"),a+=(A-n)*R,n=A;var j=!0,D=!1,$=void 0;try{for(var L,k=e[Symbol.iterator]();!(j=(L=k.next()).done);j=!0){var F=L.value;if(Fu&&y("overflow"),F==n){for(var C=a,T=l;;T+=l){var N=T<=o?1:T>=o+26?26:T-o;if(C>6|192).toString(16).toUpperCase()+"%"+(63&t|128).toString(16).toUpperCase():"%"+(t>>12|224).toString(16).toUpperCase()+"%"+(t>>6&63|128).toString(16).toUpperCase()+"%"+(63&t|128).toString(16).toUpperCase()}function _(e){for(var t="",r=0,n=e.length;r=194&&a<224){if(n-r>=6){var o=parseInt(e.substr(r+4,2),16);t+=String.fromCharCode((31&a)<<6|63&o)}else t+=e.substr(r,6);r+=6}else if(a>=224){if(n-r>=9){var i=parseInt(e.substr(r+4,2),16),s=parseInt(e.substr(r+7,2),16);t+=String.fromCharCode((15&a)<<12|(63&i)<<6|63&s)}else t+=e.substr(r,9);r+=9}else t+=e.substr(r,3),r+=3}return t}function I(e,t){function r(e){var r=_(e);return r.match(t.UNRESERVED)?r:e}return e.scheme&&(e.scheme=String(e.scheme).replace(t.PCT_ENCODED,r).toLowerCase().replace(t.NOT_SCHEME,"")),void 0!==e.userinfo&&(e.userinfo=String(e.userinfo).replace(t.PCT_ENCODED,r).replace(t.NOT_USERINFO,O).replace(t.PCT_ENCODED,a)),void 0!==e.host&&(e.host=String(e.host).replace(t.PCT_ENCODED,r).toLowerCase().replace(t.NOT_HOST,O).replace(t.PCT_ENCODED,a)),void 0!==e.path&&(e.path=String(e.path).replace(t.PCT_ENCODED,r).replace(e.scheme?t.NOT_PATH:t.NOT_PATH_NOSCHEME,O).replace(t.PCT_ENCODED,a)),void 0!==e.query&&(e.query=String(e.query).replace(t.PCT_ENCODED,r).replace(t.NOT_QUERY,O).replace(t.PCT_ENCODED,a)),void 0!==e.fragment&&(e.fragment=String(e.fragment).replace(t.PCT_ENCODED,r).replace(t.NOT_FRAGMENT,O).replace(t.PCT_ENCODED,a)),e}function R(e){return e.replace(/^0*(.*)/,"$1")||"0"}function j(e,t){var r=e.match(t.IPV4ADDRESS)||[],n=c(r,2)[1];return n?n.split(".").map(R).join("."):e}function D(e,t){var r=e.match(t.IPV6ADDRESS)||[],n=c(r,3),a=n[1],o=n[2];if(a){for(var i=a.toLowerCase().split("::").reverse(),s=c(i,2),u=s[0],l=s[1],f=l?l.split(":").map(R):[],h=u.split(":").map(R),p=t.IPV4ADDRESS.test(h[h.length-1]),d=p?7:8,m=h.length-d,v=Array(d),y=0;y1){var b=v.slice(0,g.index),E=v.slice(g.index+g.length);w=b.join(":")+"::"+E.join(":")}else w=v.join(":");return o&&(w+="%"+o),w}return e}var $=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i,L=void 0==="".match(/(){0}/)[1];function k(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r={},n=!1!==t.iri?s:i;"suffix"===t.reference&&(e=(t.scheme?t.scheme+":":"")+"//"+e);var a=e.match($);if(a){L?(r.scheme=a[1],r.userinfo=a[3],r.host=a[4],r.port=parseInt(a[5],10),r.path=a[6]||"",r.query=a[7],r.fragment=a[8],isNaN(r.port)&&(r.port=a[5])):(r.scheme=a[1]||void 0,r.userinfo=-1!==e.indexOf("@")?a[3]:void 0,r.host=-1!==e.indexOf("//")?a[4]:void 0,r.port=parseInt(a[5],10),r.path=a[6]||"",r.query=-1!==e.indexOf("?")?a[7]:void 0,r.fragment=-1!==e.indexOf("#")?a[8]:void 0,isNaN(r.port)&&(r.port=e.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?a[4]:void 0)),r.host&&(r.host=D(j(r.host,n),n)),void 0!==r.scheme||void 0!==r.userinfo||void 0!==r.host||void 0!==r.port||r.path||void 0!==r.query?void 0===r.scheme?r.reference="relative":void 0===r.fragment?r.reference="absolute":r.reference="uri":r.reference="same-document",t.reference&&"suffix"!==t.reference&&t.reference!==r.reference&&(r.error=r.error||"URI is not a "+t.reference+" reference.");var o=S[(t.scheme||r.scheme||"").toLowerCase()];if(t.unicodeSupport||o&&o.unicodeSupport)I(r,n);else{if(r.host&&(t.domainHost||o&&o.domainHost))try{r.host=x.toASCII(r.host.replace(n.PCT_ENCODED,_).toLowerCase())}catch(e){r.error=r.error||"Host's domain name can not be converted to ASCII via punycode: "+e}I(r,i)}o&&o.parse&&o.parse(r,t)}else r.error=r.error||"URI can not be parsed.";return r}var F=/^\.\.?\//,C=/^\/\.(\/|$)/,T=/^\/\.\.(\/|$)/,N=/^\/?(?:.|\n)*?(?=\/|$)/;function B(e){for(var t=[];e.length;)if(e.match(F))e=e.replace(F,"");else if(e.match(C))e=e.replace(C,"/");else if(e.match(T))e=e.replace(T,"/"),t.pop();else if("."===e||".."===e)e="";else{var r=e.match(N);if(!r)throw new Error("Unexpected dot segment condition");var n=r[0];e=e.slice(n.length),t.push(n)}return t.join("")}function M(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.iri?s:i,n=[],a=S[(t.scheme||e.scheme||"").toLowerCase()];if(a&&a.serialize&&a.serialize(e,t),e.host)if(r.IPV6ADDRESS.test(e.host));else if(t.domainHost||a&&a.domainHost)try{e.host=t.iri?x.toUnicode(e.host):x.toASCII(e.host.replace(r.PCT_ENCODED,_).toLowerCase())}catch(r){e.error=e.error||"Host's domain name can not be converted to "+(t.iri?"Unicode":"ASCII")+" via punycode: "+r}I(e,r),"suffix"!==t.reference&&e.scheme&&(n.push(e.scheme),n.push(":"));var o=function(e,t){var r=!1!==t.iri?s:i,n=[];return void 0!==e.userinfo&&(n.push(e.userinfo),n.push("@")),void 0!==e.host&&n.push(D(j(String(e.host),r),r).replace(r.IPV6ADDRESS,(function(e,t,r){return"["+t+(r?"%25"+r:"")+"]"}))),"number"!=typeof e.port&&"string"!=typeof e.port||(n.push(":"),n.push(String(e.port))),n.length?n.join(""):void 0}(e,t);if(void 0!==o&&("suffix"!==t.reference&&n.push("//"),n.push(o),e.path&&"/"!==e.path.charAt(0)&&n.push("/")),void 0!==e.path){var c=e.path;t.absolutePath||a&&a.absolutePath||(c=B(c)),void 0===o&&(c=c.replace(/^\/\//,"/%2F")),n.push(c)}return void 0!==e.query&&(n.push("?"),n.push(e.query)),void 0!==e.fragment&&(n.push("#"),n.push(e.fragment)),n.join("")}function U(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n={};return arguments[3]||(e=k(M(e,r),r),t=k(M(t,r),r)),!(r=r||{}).tolerant&&t.scheme?(n.scheme=t.scheme,n.userinfo=t.userinfo,n.host=t.host,n.port=t.port,n.path=B(t.path||""),n.query=t.query):(void 0!==t.userinfo||void 0!==t.host||void 0!==t.port?(n.userinfo=t.userinfo,n.host=t.host,n.port=t.port,n.path=B(t.path||""),n.query=t.query):(t.path?("/"===t.path.charAt(0)?n.path=B(t.path):(void 0===e.userinfo&&void 0===e.host&&void 0===e.port||e.path?e.path?n.path=e.path.slice(0,e.path.lastIndexOf("/")+1)+t.path:n.path=t.path:n.path="/"+t.path,n.path=B(n.path)),n.query=t.query):(n.path=e.path,void 0!==t.query?n.query=t.query:n.query=e.query),n.userinfo=e.userinfo,n.host=e.host,n.port=e.port),n.scheme=e.scheme),n.fragment=t.fragment,n}function V(e,t){return e&&e.toString().replace(t&&t.iri?s.PCT_ENCODED:i.PCT_ENCODED,_)}var q={scheme:"http",domainHost:!0,parse:function(e,t){return e.host||(e.error=e.error||"HTTP URIs must have a host."),e},serialize:function(e,t){var r="https"===String(e.scheme).toLowerCase();return e.port!==(r?443:80)&&""!==e.port||(e.port=void 0),e.path||(e.path="/"),e}},K={scheme:"https",domainHost:q.domainHost,parse:q.parse,serialize:q.serialize};function Y(e){return"boolean"==typeof e.secure?e.secure:"wss"===String(e.scheme).toLowerCase()}var z={scheme:"ws",domainHost:!0,parse:function(e,t){var r=e;return r.secure=Y(r),r.resourceName=(r.path||"/")+(r.query?"?"+r.query:""),r.path=void 0,r.query=void 0,r},serialize:function(e,t){if(e.port!==(Y(e)?443:80)&&""!==e.port||(e.port=void 0),"boolean"==typeof e.secure&&(e.scheme=e.secure?"wss":"ws",e.secure=void 0),e.resourceName){var r=e.resourceName.split("?"),n=c(r,2),a=n[0],o=n[1];e.path=a&&"/"!==a?a:void 0,e.query=o,e.resourceName=void 0}return e.fragment=void 0,e}},G={scheme:"wss",domainHost:z.domainHost,parse:z.parse,serialize:z.serialize},H={},Q="[A-Za-z0-9\\-\\.\\_\\~\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]",J="[0-9A-Fa-f]",X=r(r("%[EFef]"+J+"%"+J+J+"%"+J+J)+"|"+r("%[89A-Fa-f]"+J+"%"+J+J)+"|"+r("%"+J+J)),W=t("[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",'[\\"\\\\]'),Z=new RegExp(Q,"g"),ee=new RegExp(X,"g"),te=new RegExp(t("[^]","[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]","[\\.]",'[\\"]',W),"g"),re=new RegExp(t("[^]",Q,"[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"),"g"),ne=re;function ae(e){var t=_(e);return t.match(Z)?t:e}var oe={scheme:"mailto",parse:function(e,t){var r=e,n=r.to=r.path?r.path.split(","):[];if(r.path=void 0,r.query){for(var a=!1,o={},i=r.query.split("&"),s=0,c=i.length;s{"use strict";e.exports=JSON.parse('{"$schema":"http://json-schema.org/draft-07/schema#","$id":"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#","description":"Meta-schema for $data reference (JSON Schema extension proposal)","type":"object","required":["$data"],"properties":{"$data":{"type":"string","anyOf":[{"format":"relative-json-pointer"},{"format":"json-pointer"}]}},"additionalProperties":false}')},6680:e=>{"use strict";e.exports=JSON.parse('{"$schema":"http://json-schema.org/draft-07/schema#","$id":"http://json-schema.org/draft-07/schema#","title":"Core schema meta-schema","definitions":{"schemaArray":{"type":"array","minItems":1,"items":{"$ref":"#"}},"nonNegativeInteger":{"type":"integer","minimum":0},"nonNegativeIntegerDefault0":{"allOf":[{"$ref":"#/definitions/nonNegativeInteger"},{"default":0}]},"simpleTypes":{"enum":["array","boolean","integer","null","number","object","string"]},"stringArray":{"type":"array","items":{"type":"string"},"uniqueItems":true,"default":[]}},"type":["object","boolean"],"properties":{"$id":{"type":"string","format":"uri-reference"},"$schema":{"type":"string","format":"uri"},"$ref":{"type":"string","format":"uri-reference"},"$comment":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"default":true,"readOnly":{"type":"boolean","default":false},"examples":{"type":"array","items":true},"multipleOf":{"type":"number","exclusiveMinimum":0},"maximum":{"type":"number"},"exclusiveMaximum":{"type":"number"},"minimum":{"type":"number"},"exclusiveMinimum":{"type":"number"},"maxLength":{"$ref":"#/definitions/nonNegativeInteger"},"minLength":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"pattern":{"type":"string","format":"regex"},"additionalItems":{"$ref":"#"},"items":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/schemaArray"}],"default":true},"maxItems":{"$ref":"#/definitions/nonNegativeInteger"},"minItems":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"uniqueItems":{"type":"boolean","default":false},"contains":{"$ref":"#"},"maxProperties":{"$ref":"#/definitions/nonNegativeInteger"},"minProperties":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"required":{"$ref":"#/definitions/stringArray"},"additionalProperties":{"$ref":"#"},"definitions":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"properties":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"patternProperties":{"type":"object","additionalProperties":{"$ref":"#"},"propertyNames":{"format":"regex"},"default":{}},"dependencies":{"type":"object","additionalProperties":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/stringArray"}]}},"propertyNames":{"$ref":"#"},"const":true,"enum":{"type":"array","items":true,"minItems":1,"uniqueItems":true},"type":{"anyOf":[{"$ref":"#/definitions/simpleTypes"},{"type":"array","items":{"$ref":"#/definitions/simpleTypes"},"minItems":1,"uniqueItems":true}]},"format":{"type":"string"},"contentMediaType":{"type":"string"},"contentEncoding":{"type":"string"},"if":{"$ref":"#"},"then":{"$ref":"#"},"else":{"$ref":"#"},"allOf":{"$ref":"#/definitions/schemaArray"},"anyOf":{"$ref":"#/definitions/schemaArray"},"oneOf":{"$ref":"#/definitions/schemaArray"},"not":{"$ref":"#"}},"default":true}')}},o={};function i(e){var t=o[e];if(void 0!==t)return t.exports;var r=o[e]={id:e,exports:{}};return a[e].call(r.exports,r,r.exports,i),r.exports}i.m=a,i.amdD=function(){throw new Error("define cannot be used indirect")},i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,i.t=function(r,n){if(1&n&&(r=this(r)),8&n)return r;if("object"==typeof r&&r){if(4&n&&r.__esModule)return r;if(16&n&&"function"==typeof r.then)return r}var a=Object.create(null);i.r(a);var o={};e=e||[null,t({}),t([]),t(t)];for(var s=2&n&&r;"object"==typeof s&&!~e.indexOf(s);s=t(s))Object.getOwnPropertyNames(s).forEach((e=>o[e]=()=>r[e]));return o.default=()=>r,i.d(a,o),a},i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>e+".bundle.js",i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},n="flow-os:",i.l=(e,t,a,o)=>{if(r[e])r[e].push(t);else{var s,c;if(void 0!==a)for(var u=document.getElementsByTagName("script"),l=0;l{s.onerror=s.onload=null,clearTimeout(p);var a=r[e];if(delete r[e],s.parentNode&&s.parentNode.removeChild(s),a&&a.forEach((e=>e(n))),t)return t(n)},p=setTimeout(h.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=h.bind(null,s.onerror),s.onload=h.bind(null,s.onload),c&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;i.g.importScripts&&(e=i.g.location+"");var t=i.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var r=t.getElementsByTagName("script");if(r.length)for(var n=r.length-1;n>-1&&!e;)e=r[n--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),i.p=e})(),(()=>{var e={239:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var a=new Promise(((r,a)=>n=e[t]=[r,a]));r.push(n[2]=a);var o=i.p+i.u(t),s=new Error;i.l(o,(r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var a=r&&("load"===r.type?"missing":r.type),o=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+a+": "+o+")",s.name="ChunkLoadError",s.type=a,s.request=o,n[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var n,a,[o,s,c]=r,u=0;if(o.some((t=>0!==e[t]))){for(n in s)i.o(s,n)&&(i.m[n]=s[n]);c&&c(i)}for(t&&t(r);u{"use strict";var e={};i.r(e),i.d(e,{meta:()=>w,run:()=>b});var t={};i.r(t),i.d(t,{meta:()=>E,run:()=>A});var r={};i.r(r),i.d(r,{meta:()=>P,run:()=>x});var n={};i.r(n),i.d(n,{meta:()=>R,run:()=>j});var a=i(5701),o=i.n(a),s=i(8236),c=i.n(s),u=i(6080),l=i.n(u),f=i(6850),h=i.n(f),p=i(7182),d=i.n(p),m=i(9213),v=i.n(m),y=i(935),g={};g.styleTagTransform=v(),g.setAttributes=h(),g.insert=l().bind(null,"head"),g.domAPI=c(),g.insertStyleElement=d(),o()(y.Z,g),y.Z&&y.Z.locals&&y.Z.locals;var w={name:"Clock",description:"Displays the date & time.",id:"clock"},b=function(e){e.style.display="flex",e.style.alignItems="center",e.innerText="9:41 AM\n10/14/2023"},E={name:"Desktop Switcher",description:"Allows you to switch between desktops.",id:"switcher"},A=function(e){e.style.display="flex",e.style.gap="10px",e.style.alignItems="center",e.style.paddingLeft="15px",e.style.paddingRight="15px",e.innerHTML=""},P={name:"App View",description:"Opens the app view.",id:"appview"},x=function(e){e.style.display="flex",e.style.alignItems="center",e.style.justifyContent="center",e.style.aspectRatio="1 / 1",e.innerHTML="",e.onclick=function(){window.wm.toggleLauncher()}};function S(e){return S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},S(e)}function O(){O=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,a=Object.defineProperty||function(e,t,r){e[t]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function u(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,r){return e[t]=r}}function l(e,t,r,n){var o=t&&t.prototype instanceof y?t:y,i=Object.create(o.prototype),s=new $(n||[]);return a(i,"_invoke",{value:I(e,r,s)}),i}function f(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=l;var h="suspendedStart",p="suspendedYield",d="executing",m="completed",v={};function y(){}function g(){}function w(){}var b={};u(b,i,(function(){return this}));var E=Object.getPrototypeOf,A=E&&E(E(L([])));A&&A!==r&&n.call(A,i)&&(b=A);var P=w.prototype=y.prototype=Object.create(b);function x(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function _(e,t){function r(a,o,i,s){var c=f(e[a],e,o);if("throw"!==c.type){var u=c.arg,l=u.value;return l&&"object"==S(l)&&n.call(l,"__await")?t.resolve(l.__await).then((function(e){r("next",e,i,s)}),(function(e){r("throw",e,i,s)})):t.resolve(l).then((function(e){u.value=e,i(u)}),(function(e){return r("throw",e,i,s)}))}s(c.arg)}var o;a(this,"_invoke",{value:function(e,n){function a(){return new t((function(t,a){r(e,n,t,a)}))}return o=o?o.then(a,a):a()}})}function I(t,r,n){var a=h;return function(o,i){if(a===d)throw new Error("Generator is already running");if(a===m){if("throw"===o)throw i;return{value:e,done:!0}}for(n.method=o,n.arg=i;;){var s=n.delegate;if(s){var c=R(s,n);if(c){if(c===v)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(a===h)throw a=m,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);a=d;var u=f(t,r,n);if("normal"===u.type){if(a=n.done?m:p,u.arg===v)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(a=m,n.method="throw",n.arg=u.arg)}}}function R(t,r){var n=r.method,a=t.iterator[n];if(a===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,R(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),v;var o=f(a,t.iterator,r.arg);if("throw"===o.type)return r.method="throw",r.arg=o.arg,r.delegate=null,v;var i=o.arg;return i?i.done?(r[t.resultName]=i.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,v):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,v)}function j(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function D(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function $(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(j,this),this.reset(!0)}function L(t){if(t||""===t){var r=t[i];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,o=function r(){for(;++a=0;--o){var i=this.tryEntries[o],s=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),D(r),v}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;D(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:L(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),v}},t}function _(e,t,r,n,a,o,i){try{var s=e[o](i),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function I(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var o=e.apply(t,r);function i(e){_(o,n,a,i,s,"next",e)}function s(e){_(o,n,a,i,s,"throw",e)}i(void 0)}))}}var R={name:"Apps",description:"Displays the current apps open.",id:"apps"},j=function(e){e.style.display="flex",e.style.alignItems="center",e.style.gap="10px",e.style.paddingLeft="15px",e.style.paddingRight="15px",window.addEventListener("app_opened",(function(t){var r=document.createElement("app");r.innerHTML=''),r.onclick=I(O().mark((function e(){var r;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.detail.win;case 2:return r=e.sent,e.next=5,r.focus();case 5:case"end":return e.stop()}}),e)}))),e.appendChild(r)}))};function D(e){return D="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},D(e)}function $(e,t){for(var r=0;r=0;--o){var i=this.tryEntries[o],s=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),R(r),v}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;R(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:D(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),v}},t}function N(e,t,r,n,a,o,i){try{var s=e[o](i),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function B(e,t){for(var r=0;rSettings\n

owo2

\n ",e.abrupt("return",t);case 4:case"end":return e.stop()}}),e,this)})),a=function(){var e=this,t=arguments;return new Promise((function(r,a){var o=n.apply(e,t);function i(e){N(o,r,a,i,s,"next",e)}function s(e){N(o,r,a,i,s,"throw",e)}i(void 0)}))},function(){return a.apply(this,arguments)})}],r&&B(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();const q=i.p+"images/d71072aad36a754b1038c4245ea986df.png";var K=i(3232),Y=i.n(K);function z(e){return z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},z(e)}function G(){G=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,a=Object.defineProperty||function(e,t,r){e[t]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function u(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,r){return e[t]=r}}function l(e,t,r,n){var o=t&&t.prototype instanceof y?t:y,i=Object.create(o.prototype),s=new j(n||[]);return a(i,"_invoke",{value:O(e,r,s)}),i}function f(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=l;var h="suspendedStart",p="suspendedYield",d="executing",m="completed",v={};function y(){}function g(){}function w(){}var b={};u(b,i,(function(){return this}));var E=Object.getPrototypeOf,A=E&&E(E(D([])));A&&A!==r&&n.call(A,i)&&(b=A);var P=w.prototype=y.prototype=Object.create(b);function x(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function r(a,o,i,s){var c=f(e[a],e,o);if("throw"!==c.type){var u=c.arg,l=u.value;return l&&"object"==z(l)&&n.call(l,"__await")?t.resolve(l.__await).then((function(e){r("next",e,i,s)}),(function(e){r("throw",e,i,s)})):t.resolve(l).then((function(e){u.value=e,i(u)}),(function(e){return r("throw",e,i,s)}))}s(c.arg)}var o;a(this,"_invoke",{value:function(e,n){function a(){return new t((function(t,a){r(e,n,t,a)}))}return o=o?o.then(a,a):a()}})}function O(t,r,n){var a=h;return function(o,i){if(a===d)throw new Error("Generator is already running");if(a===m){if("throw"===o)throw i;return{value:e,done:!0}}for(n.method=o,n.arg=i;;){var s=n.delegate;if(s){var c=_(s,n);if(c){if(c===v)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(a===h)throw a=m,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);a=d;var u=f(t,r,n);if("normal"===u.type){if(a=n.done?m:p,u.arg===v)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(a=m,n.method="throw",n.arg=u.arg)}}}function _(t,r){var n=r.method,a=t.iterator[n];if(a===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,_(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),v;var o=f(a,t.iterator,r.arg);if("throw"===o.type)return r.method="throw",r.arg=o.arg,r.delegate=null,v;var i=o.arg;return i?i.done?(r[t.resultName]=i.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,v):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,v)}function I(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function R(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function j(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(I,this),this.reset(!0)}function D(t){if(t||""===t){var r=t[i];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,o=function r(){for(;++a=0;--o){var i=this.tryEntries[o],s=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),R(r),v}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;R(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:D(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),v}},t}function H(e,t,r,n,a,o,i){try{var s=e[o](i),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function Q(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var o=e.apply(t,r);function i(e){H(o,n,a,i,s,"next",e)}function s(e){H(o,n,a,i,s,"throw",e)}i(void 0)}))}}function J(e,t){for(var r=0;r":"";t.content.innerHTML='\n
'.concat(o).concat(n,'
\n
\n '),""!==o&&(t.content.querySelector(".back").onclick=function(){n.split("/")[1]===n.replace("/","")?r("/"+n.split("/")[0]):r("/"+n.split("/")[1])});var i=function(e){var o="/"===n?"":"/";Y().stat(n+o+a[e],(function(i,s){var c=document.createElement("div");c.setAttribute("style","padding: 5px;border-bottom: 1px solid var(--text);"),c.innerText+="".concat(a[e]),c.onclick=function(){!0===s.isDirectory()?r(n+o+a[e]):ve.openApp("flow.editor",{path:n+o+a[e]})},t.content.querySelector(".files").appendChild(c)}))};for(var s in a)i(s)}));case 2:case"end":return e.stop()}}),e)}))),n.apply(this,arguments)},r=function(e){return n.apply(this,arguments)},t=window.wm.createWindow({title:this.name,icon:q,width:500,height:400}),e.prev=3,e.next=6,Y().mkdir("/home",(function(){}));case 6:return e.next=8,Y().mkdir("/home/meow",(function(){}));case 8:e.next=12;break;case 10:e.prev=10,e.t0=e.catch(3);case 12:return e.prev=12,e.next=15,Y().writeFile("/home/owo1.txt","sussy",(function(){}));case 15:return e.next=17,Y().writeFile("/home/owo2.html","",(function(){}));case 17:return e.next=19,Y().writeFile("/home/owo.js","alert(`hi`)",(function(){}));case 19:e.next=23;break;case 21:e.prev=21,e.t1=e.catch(12);case 23:return t.content.style.display="flex",t.content.style.flexDirection="column",r("/"),e.abrupt("return",t);case 27:case"end":return e.stop()}}),e,this,[[3,10],[12,21]])}))),function(){return n.apply(this,arguments)})}],r&&J(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();const ee=i.p+"images/67031c15d90a3d85854fb0857c00dfb3.png";function te(e){return te="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},te(e)}function re(){re=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,a=Object.defineProperty||function(e,t,r){e[t]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function u(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,r){return e[t]=r}}function l(e,t,r,n){var o=t&&t.prototype instanceof y?t:y,i=Object.create(o.prototype),s=new j(n||[]);return a(i,"_invoke",{value:O(e,r,s)}),i}function f(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=l;var h="suspendedStart",p="suspendedYield",d="executing",m="completed",v={};function y(){}function g(){}function w(){}var b={};u(b,i,(function(){return this}));var E=Object.getPrototypeOf,A=E&&E(E(D([])));A&&A!==r&&n.call(A,i)&&(b=A);var P=w.prototype=y.prototype=Object.create(b);function x(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function r(a,o,i,s){var c=f(e[a],e,o);if("throw"!==c.type){var u=c.arg,l=u.value;return l&&"object"==te(l)&&n.call(l,"__await")?t.resolve(l.__await).then((function(e){r("next",e,i,s)}),(function(e){r("throw",e,i,s)})):t.resolve(l).then((function(e){u.value=e,i(u)}),(function(e){return r("throw",e,i,s)}))}s(c.arg)}var o;a(this,"_invoke",{value:function(e,n){function a(){return new t((function(t,a){r(e,n,t,a)}))}return o=o?o.then(a,a):a()}})}function O(t,r,n){var a=h;return function(o,i){if(a===d)throw new Error("Generator is already running");if(a===m){if("throw"===o)throw i;return{value:e,done:!0}}for(n.method=o,n.arg=i;;){var s=n.delegate;if(s){var c=_(s,n);if(c){if(c===v)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(a===h)throw a=m,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);a=d;var u=f(t,r,n);if("normal"===u.type){if(a=n.done?m:p,u.arg===v)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(a=m,n.method="throw",n.arg=u.arg)}}}function _(t,r){var n=r.method,a=t.iterator[n];if(a===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,_(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),v;var o=f(a,t.iterator,r.arg);if("throw"===o.type)return r.method="throw",r.arg=o.arg,r.delegate=null,v;var i=o.arg;return i?i.done?(r[t.resultName]=i.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,v):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,v)}function I(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function R(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function j(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(I,this),this.reset(!0)}function D(t){if(t||""===t){var r=t[i];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,o=function r(){for(;++a=0;--o){var i=this.tryEntries[o],s=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),R(r),v}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;R(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:D(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),v}},t}function ne(e,t,r,n,a,o,i){try{var s=e[o](i),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function ae(e,t){for(var r=0;r=0;--o){var i=this.tryEntries[o],s=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),R(r),v}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;R(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:D(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),v}},t}function fe(e,t,r,n,a,o,i){try{var s=e[o](i),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function he(e,t){for(var r=0;r=0;--o){var i=this.tryEntries[o],s=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),R(r),v}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;R(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:D(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),v}},t}function we(e,t,r,n,a,o,i){try{var s=e[o](i),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function be(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r
').concat(r.title,"
"),this.content=document.createElement("window-content"),this.element.appendChild(this.header),this.element.appendChild(this.content),function(e,t){var r=0,n=0;function a(a){a.preventDefault();var o=a.clientX-r,i=a.clientY-n,s=e.offsetTop+i,c=e.offsetLeft+o,u=t.offsetWidth,l=t.offsetHeight;s>=0&&s+e.offsetHeight<=l&&(e.style.top=s+"px"),c>=0&&c+e.offsetWidth<=u&&(e.style.left=c+"px"),r=a.clientX,n=a.clientY}function o(){document.onmouseup=null,document.onmousemove=null,t.onmouseleave=null}e.querySelector("window-header").addEventListener("mousedown",(function(e){e.preventDefault(),o(),t.onmouseenter=null,r=e.clientX,n=e.clientY,document.onmouseup=o,document.onmousemove=a}))}(this.element,document.querySelector("window-area"))}return xe(e,[{key:"focus",value:function(){this.element.style.zIndex!==this.wm.getHighestZIndex().toString()&&(this.element.style.zIndex=(this.wm.getHighestZIndex()+1).toString())}},{key:"setTitle",value:function(e){this.header.querySelector(".title").innerText=e}}]),e}();const _e=function(){function e(){Ae(this,e),Ee(this,"launcherOpen",!1),Ee(this,"windows",[]),this.area=document.createElement("window-area"),this.launcher=document.createElement("launcher"),this.init()}var t,r;return xe(e,[{key:"getHighestZIndex",value:function(){var e,t=this.windows.map((function(e){if(""!==e.element.style.zIndex)return parseInt(e.element.style.zIndex)})).filter((function(e){return void 0!==e})),r=Math.max.apply(Math,function(e){if(Array.isArray(e))return be(e)}(e=t)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return be(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?be(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}());return r===-1/0?0:r}},{key:"createWindow",value:function(e){var t=new Oe(this,e);return this.windows.push(t),this.area.appendChild(t.element),t}},{key:"toggleLauncher",value:function(){!0===this.launcherOpen?(this.launcher.style.opacity="0",this.launcher.style.backdropFilter="blur(0px)",this.launcher.style.pointerEvents="none"):(this.launcher.style.opacity="1",this.launcher.style.backdropFilter="blur(20px)",this.launcher.style.pointerEvents=null),this.launcherOpen=!this.launcherOpen}},{key:"init",value:(t=ge().mark((function e(){var t,r,n=this;return ge().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:this.launcher.innerHTML='\n \n \n ',this.launcher.onclick=function(e){e.target===e.currentTarget&&n.toggleLauncher()},this.launcher.querySelector("apps").onclick=function(e){e.target===e.currentTarget&&n.toggleLauncher()},this.launcher.style.opacity="0",this.launcher.style.filter="blur(0px)",this.launcher.style.pointerEvents="none",t=ge().mark((function e(t){var r;return ge().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:(r=document.createElement("app")).onclick=function(){ve.openApp(t),n.toggleLauncher()},r.innerHTML='
').concat(ve.apps[t].name,"
"),n.launcher.querySelector("apps").appendChild(r);case 4:case"end":return e.stop()}}),e)})),e.t0=ge().keys(ve.apps);case 8:if((e.t1=e.t0()).done){e.next=13;break}return r=e.t1.value,e.delegateYield(t(r),"t2",11);case 11:e.next=8;break;case 13:document.body.appendChild(this.area),document.body.appendChild(this.launcher);case 15:case"end":return e.stop()}}),e,this)})),r=function(){var e=this,r=arguments;return new Promise((function(n,a){var o=t.apply(e,r);function i(e){we(o,n,a,i,s,"next",e)}function s(e){we(o,n,a,i,s,"throw",e)}i(void 0)}))},function(){return r.apply(this,arguments)})}]),e}();window.statusBar=new k,window.wm=new _e})()})(); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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YixPQUFId3VCLEVBQUdyQixFQUFBdnVFLEdBQUErTSxNQUFBd2hFLEVBQUF2QyxjQUFBeUMsRUFBQW1CLEdBQUEsaUJBQUFyQixFQUFBbnRCLEtBQUEsZ0JBVWQ3ZixTQUFTcFgsS0FBS3l1QyxZQUFZdnBELEtBQUs2aUUsTUFDL0Izd0MsU0FBU3BYLEtBQUt5dUMsWUFBWXZwRCxLQUFLOGlFLFVBQVUseUJBQUE1RCxFQUFBM0MsT0FBQSxHQUFBYyxFQUFBLFNBakMxQzJGLEVBaExILGVBQUFoaUUsRUFBQSxLQUFBdEgsRUFBQWlLLFVBQUEsV0FBQWpJLFNBQUEsU0FBQThELEVBQUFxMUIsR0FBQSxJQUFBZ29DLEVBQUFqdkMsRUFBQWxxQixNQUFBMUMsRUFBQXRILEdBQUEsU0FBQW9qRSxFQUFBcC9ELEdBQUFrL0QsR0FBQUMsRUFBQXI5RCxFQUFBcTFCLEVBQUFpb0MsRUFBQUMsRUFBQSxPQUFBci9ELEVBQUEsVUFBQXEvRCxFQUFBNXNDLEdBQUF5c0MsR0FBQUMsRUFBQXI5RCxFQUFBcTFCLEVBQUFpb0MsRUFBQUMsRUFBQSxRQUFBNXNDLEVBQUEsQ0FBQTJzQyxPQUFBOXNFLEVBQUEsS0FrTkcsa0JBQUFnekUsRUFBQXQvRCxNQUFBLEtBQUFDLFVBQUEsTUFBQWkvRCxDQUFBLENBakZLLEdDeEhScHhDLE9BQU91eUMsVUFBWSxJQUFJdEcsRUFDdkJqc0MsT0FBT3VvQyxHQUFLLElBQUk2SSIsInNvdXJjZXMiOlsid2VicGFjazovL2Zsb3ctb3Mvd2VicGFjay9ydW50aW1lL2NyZWF0ZSBmYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vZmxvdy1vcy93ZWJwYWNrL3J1bnRpbWUvbG9hZCBzY3JpcHQiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL3NyYy9zdHlsZS5sZXNzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2LWtleXdvcmRzL2luZGV4LmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2LWtleXdvcmRzL2tleXdvcmRzL19mb3JtYXRMaW1pdC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi1rZXl3b3Jkcy9rZXl3b3Jkcy9fdXRpbC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi1rZXl3b3Jkcy9rZXl3b3Jkcy9hbGxSZXF1aXJlZC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi1rZXl3b3Jkcy9rZXl3b3Jkcy9hbnlSZXF1aXJlZC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi1rZXl3b3Jkcy9rZXl3b3Jkcy9kZWVwUHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi1rZXl3b3Jkcy9rZXl3b3Jkcy9kZWVwUmVxdWlyZWQuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYta2V5d29yZHMva2V5d29yZHMvZG90anMvX2Zvcm1hdExpbWl0LmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2LWtleXdvcmRzL2tleXdvcmRzL2RvdGpzL3BhdHRlcm5SZXF1aXJlZC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi1rZXl3b3Jkcy9rZXl3b3Jkcy9kb3Rqcy9zd2l0Y2guanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYta2V5d29yZHMva2V5d29yZHMvZHluYW1pY0RlZmF1bHRzLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2LWtleXdvcmRzL2tleXdvcmRzL2Zvcm1hdE1heGltdW0uanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYta2V5d29yZHMva2V5d29yZHMvZm9ybWF0TWluaW11bS5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi1rZXl3b3Jkcy9rZXl3b3Jkcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi1rZXl3b3Jkcy9rZXl3b3Jkcy9pbnN0YW5jZW9mLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2LWtleXdvcmRzL2tleXdvcmRzL29uZVJlcXVpcmVkLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2LWtleXdvcmRzL2tleXdvcmRzL3BhdHRlcm5SZXF1aXJlZC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi1rZXl3b3Jkcy9rZXl3b3Jkcy9wcm9oaWJpdGVkLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2LWtleXdvcmRzL2tleXdvcmRzL3JhbmdlLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2LWtleXdvcmRzL2tleXdvcmRzL3JlZ2V4cC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi1rZXl3b3Jkcy9rZXl3b3Jkcy9zZWxlY3QuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYta2V5d29yZHMva2V5d29yZHMvc3dpdGNoLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2LWtleXdvcmRzL2tleXdvcmRzL3RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi1rZXl3b3Jkcy9rZXl3b3Jkcy90eXBlb2YuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYta2V5d29yZHMva2V5d29yZHMvdW5pcXVlSXRlbVByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2Fqdi5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvY2FjaGUuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2NvbXBpbGUvYXN5bmMuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2NvbXBpbGUvZXJyb3JfY2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvY29tcGlsZS9mb3JtYXRzLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL2luZGV4LmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL3Jlc29sdmUuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2NvbXBpbGUvcnVsZXMuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2NvbXBpbGUvc2NoZW1hX29iai5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvY29tcGlsZS91Y3MybGVuZ3RoLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL3V0aWwuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2RhdGEuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2RlZmluaXRpb25fc2NoZW1hLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9fbGltaXQuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL19saW1pdEl0ZW1zLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9fbGltaXRMZW5ndGguanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL19saW1pdFByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2FsbE9mLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9hbnlPZi5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvY29tbWVudC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvY29uc3QuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2NvbnRhaW5zLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9jdXN0b20uanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2RlcGVuZGVuY2llcy5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvZW51bS5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvZm9ybWF0LmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9pZi5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2l0ZW1zLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9tdWx0aXBsZU9mLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9ub3QuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL29uZU9mLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9wYXR0ZXJuLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9wcm9wZXJ0eU5hbWVzLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9yZWYuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL3JlcXVpcmVkLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy91bmlxdWVJdGVtcy5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvdmFsaWRhdGUuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2tleXdvcmQuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9iYWxhbmNlZC1tYXRjaC9pbmRleC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2JyYWNlLWV4cGFuc2lvbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2JyYWNlL3RoZW1lL21vbm9rYWkuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9jb25jYXQtbWFwL2luZGV4LmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2VzNi1wcm9taXNpZnkvZGlzdC9wcm9taXNpZnkuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9mYXN0LWRlZXAtZXF1YWwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9mYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeS9pbmRleC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL2xpYi9hc3luYy5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL2xpYi9ldmVudGVtaXR0ZXIuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9maWxlci9saWIvaW50ZXJjb20uanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9maWxlci9zaGltcy9mcy5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL3NoaW1zL3BhdGguanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9maWxlci9zaGltcy9wcm92aWRlcnMvZGVmYXVsdC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL3NyYy9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9maWxlci9zcmMvZGlyZWN0b3J5LWVudHJ5LmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvZmlsZXIvc3JjL2RpcmVudC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL3NyYy9lcnJvcnMuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9maWxlci9zcmMvZmlsZXN5c3RlbS9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL3NyYy9maWxlc3lzdGVtL2ludGVyZmFjZS5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL3NyYy9mcy13YXRjaGVyLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvZmlsZXIvc3JjL2luZGV4LmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvZmlsZXIvc3JjL25vZGUuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9maWxlci9zcmMvb3Blbi1maWxlLWRlc2NyaXB0aW9uLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvZmlsZXIvc3JjL29wZW4tZmlsZXMuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9maWxlci9zcmMvcGF0aC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL3NyYy9wcm92aWRlcnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9maWxlci9zcmMvcHJvdmlkZXJzL2luZGV4ZWRkYi5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL3NyYy9wcm92aWRlcnMvbWVtb3J5LmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvZmlsZXIvc3JjL3NoYXJlZC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL3NyYy9zaGVsbC9lbnZpcm9ubWVudC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL3NyYy9zaGVsbC9zaGVsbC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL3NyYy9zdGF0cy5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL3NyYy9zdXBlci1ub2RlLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvZmlsZXIvc3JjL3dlYnBhY2stcGx1Z2luL2luZGV4LmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvZmlsZXIvc3JjL3dlYnBhY2stcGx1Z2luL3Byb2Nlc3NvcnMuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9maWxlci9zcmMvd2VicGFjay1wbHVnaW4vc2NoZW1hLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvZmlsZXIvc3JjL3dlYnBhY2stcGx1Z2luL3V0aWxzLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLXRyYXZlcnNlL2luZGV4LmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvbWluaW1hdGNoL21pbmltYXRjaC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL3BhdGgtYnJvd3NlcmlmeS9pbmRleC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL3NjaGVtYS11dGlscy9kaXN0L1ZhbGlkYXRpb25FcnJvci5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL3NjaGVtYS11dGlscy9kaXN0L2luZGV4LmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvc2NoZW1hLXV0aWxzL2Rpc3Qva2V5d29yZHMvYWJzb2x1dGVQYXRoLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvc2NoZW1hLXV0aWxzL2Rpc3Qva2V5d29yZHMvdW5kZWZpbmVkQXNOdWxsLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvc2NoZW1hLXV0aWxzL2Rpc3QvdXRpbC9SYW5nZS5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL3NjaGVtYS11dGlscy9kaXN0L3V0aWwvaGludHMuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9zY2hlbWEtdXRpbHMvZGlzdC92YWxpZGF0ZS5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvdXJpLWpzL3NyYy91dGlsLnRzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvdXJpLWpzL3NyYy9yZWdleHBzLXVyaS50cyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL3VyaS1qcy9zcmMvcmVnZXhwcy1pcmkudHMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy91cmktanMvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmVzNi5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL3VyaS1qcy9zcmMvdXJpLnRzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvdXJpLWpzL3NyYy9zY2hlbWVzL2h0dHAudHMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy91cmktanMvc3JjL3NjaGVtZXMvaHR0cHMudHMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy91cmktanMvc3JjL3NjaGVtZXMvd3MudHMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy91cmktanMvc3JjL3NjaGVtZXMvd3NzLnRzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvdXJpLWpzL3NyYy9zY2hlbWVzL21haWx0by50cyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL3VyaS1qcy9zcmMvc2NoZW1lcy91cm4udHMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy91cmktanMvc3JjL3NjaGVtZXMvdXJuLXV1aWQudHMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy91cmktanMvc3JjL2luZGV4LnRzIiwid2VicGFjazovL2Zsb3ctb3Mvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vZmxvdy1vcy93ZWJwYWNrL3J1bnRpbWUvYW1kIGRlZmluZSIsIndlYnBhY2s6Ly9mbG93LW9zL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL2Zsb3ctb3Mvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL2Zsb3ctb3Mvd2VicGFjay9ydW50aW1lL2Vuc3VyZSBjaHVuayIsIndlYnBhY2s6Ly9mbG93LW9zL3dlYnBhY2svcnVudGltZS9nZXQgamF2YXNjcmlwdCBjaHVuayBmaWxlbmFtZSIsIndlYnBhY2s6Ly9mbG93LW9zL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vZmxvdy1vcy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL2Zsb3ctb3Mvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9mbG93LW9zL3dlYnBhY2svcnVudGltZS9wdWJsaWNQYXRoIiwid2VicGFjazovL2Zsb3ctb3Mvd2VicGFjay9ydW50aW1lL2pzb25wIGNodW5rIGxvYWRpbmciLCJ3ZWJwYWNrOi8vZmxvdy1vcy93ZWJwYWNrL3J1bnRpbWUvbm9uY2UiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL3NyYy9zdHlsZS5sZXNzP2VhNjgiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL3NyYy9tb2R1bGVzL2Nsb2NrLnRzIiwid2VicGFjazovL2Zsb3ctb3MvLi9zcmMvbW9kdWxlcy9zd2l0Y2hlci50cyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vc3JjL21vZHVsZXMvYXBwVmlldy50cyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vc3JjL21vZHVsZXMvYXBwcy50cyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vc3JjL3N0YXR1c2Jhci50cyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vc3JjL2Fzc2V0cy9pY29ucy9zZXR0aW5ncy5wbmciLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL3NyYy9hcHBzL3NldHRpbmdzLnRzIiwid2VicGFjazovL2Zsb3ctb3MvLi9zcmMvYXNzZXRzL2ljb25zL2ZpbGVzLnBuZyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vc3JjL2FwcHMvZmlsZXMudHMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL3NyYy9hc3NldHMvaWNvbnMvbXVzaWMucG5nIiwid2VicGFjazovL2Zsb3ctb3MvLi9zcmMvYXBwcy9tdXNpYy50cyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vc3JjL2Fzc2V0cy9pY29ucy9lZGl0b3IucG5nIiwid2VicGFjazovL2Zsb3ctb3MvLi9zcmMvYXBwcy9lZGl0b3IudHMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL3NyYy9mbG93LnRzIiwid2VicGFjazovL2Zsb3ctb3MvLi9zcmMvd20udHMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgPyAob2JqKSA9PiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikpIDogKG9iaikgPT4gKG9iai5fX3Byb3RvX18pO1xudmFyIGxlYWZQcm90b3R5cGVzO1xuLy8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLy8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vLyBtb2RlICYgMTY6IHJldHVybiB2YWx1ZSB3aGVuIGl0J3MgUHJvbWlzZS1saWtlXG4vLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuXHRpZihtb2RlICYgMSkgdmFsdWUgPSB0aGlzKHZhbHVlKTtcblx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcblx0aWYodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSkge1xuXHRcdGlmKChtb2RlICYgNCkgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuXHRcdGlmKChtb2RlICYgMTYpICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKSByZXR1cm4gdmFsdWU7XG5cdH1cblx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcblx0dmFyIGRlZiA9IHt9O1xuXHRsZWFmUHJvdG90eXBlcyA9IGxlYWZQcm90b3R5cGVzIHx8IFtudWxsLCBnZXRQcm90byh7fSksIGdldFByb3RvKFtdKSwgZ2V0UHJvdG8oZ2V0UHJvdG8pXTtcblx0Zm9yKHZhciBjdXJyZW50ID0gbW9kZSAmIDIgJiYgdmFsdWU7IHR5cGVvZiBjdXJyZW50ID09ICdvYmplY3QnICYmICF+bGVhZlByb3RvdHlwZXMuaW5kZXhPZihjdXJyZW50KTsgY3VycmVudCA9IGdldFByb3RvKGN1cnJlbnQpKSB7XG5cdFx0T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3VycmVudCkuZm9yRWFjaCgoa2V5KSA9PiAoZGVmW2tleV0gPSAoKSA9PiAodmFsdWVba2V5XSkpKTtcblx0fVxuXHRkZWZbJ2RlZmF1bHQnXSA9ICgpID0+ICh2YWx1ZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChucywgZGVmKTtcblx0cmV0dXJuIG5zO1xufTsiLCJ2YXIgaW5Qcm9ncmVzcyA9IHt9O1xudmFyIGRhdGFXZWJwYWNrUHJlZml4ID0gXCJmbG93LW9zOlwiO1xuLy8gbG9hZFNjcmlwdCBmdW5jdGlvbiB0byBsb2FkIGEgc2NyaXB0IHZpYSBzY3JpcHQgdGFnXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmwgPSAodXJsLCBkb25lLCBrZXksIGNodW5rSWQpID0+IHtcblx0aWYoaW5Qcm9ncmVzc1t1cmxdKSB7IGluUHJvZ3Jlc3NbdXJsXS5wdXNoKGRvbmUpOyByZXR1cm47IH1cblx0dmFyIHNjcmlwdCwgbmVlZEF0dGFjaDtcblx0aWYoa2V5ICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgcyA9IHNjcmlwdHNbaV07XG5cdFx0XHRpZihzLmdldEF0dHJpYnV0ZShcInNyY1wiKSA9PSB1cmwgfHwgcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLXdlYnBhY2tcIikgPT0gZGF0YVdlYnBhY2tQcmVmaXggKyBrZXkpIHsgc2NyaXB0ID0gczsgYnJlYWs7IH1cblx0XHR9XG5cdH1cblx0aWYoIXNjcmlwdCkge1xuXHRcdG5lZWRBdHRhY2ggPSB0cnVlO1xuXHRcdHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuXG5cdFx0c2NyaXB0LmNoYXJzZXQgPSAndXRmLTgnO1xuXHRcdHNjcmlwdC50aW1lb3V0ID0gMTIwO1xuXHRcdGlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLm5jKSB7XG5cdFx0XHRzY3JpcHQuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgX193ZWJwYWNrX3JlcXVpcmVfXy5uYyk7XG5cdFx0fVxuXHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXdlYnBhY2tcIiwgZGF0YVdlYnBhY2tQcmVmaXggKyBrZXkpO1xuXG5cdFx0c2NyaXB0LnNyYyA9IHVybDtcblx0fVxuXHRpblByb2dyZXNzW3VybF0gPSBbZG9uZV07XG5cdHZhciBvblNjcmlwdENvbXBsZXRlID0gKHByZXYsIGV2ZW50KSA9PiB7XG5cdFx0Ly8gYXZvaWQgbWVtIGxlYWtzIGluIElFLlxuXHRcdHNjcmlwdC5vbmVycm9yID0gc2NyaXB0Lm9ubG9hZCA9IG51bGw7XG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdHZhciBkb25lRm5zID0gaW5Qcm9ncmVzc1t1cmxdO1xuXHRcdGRlbGV0ZSBpblByb2dyZXNzW3VybF07XG5cdFx0c2NyaXB0LnBhcmVudE5vZGUgJiYgc2NyaXB0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcblx0XHRkb25lRm5zICYmIGRvbmVGbnMuZm9yRWFjaCgoZm4pID0+IChmbihldmVudCkpKTtcblx0XHRpZihwcmV2KSByZXR1cm4gcHJldihldmVudCk7XG5cdH1cblx0dmFyIHRpbWVvdXQgPSBzZXRUaW1lb3V0KG9uU2NyaXB0Q29tcGxldGUuYmluZChudWxsLCB1bmRlZmluZWQsIHsgdHlwZTogJ3RpbWVvdXQnLCB0YXJnZXQ6IHNjcmlwdCB9KSwgMTIwMDAwKTtcblx0c2NyaXB0Lm9uZXJyb3IgPSBvblNjcmlwdENvbXBsZXRlLmJpbmQobnVsbCwgc2NyaXB0Lm9uZXJyb3IpO1xuXHRzY3JpcHQub25sb2FkID0gb25TY3JpcHRDb21wbGV0ZS5iaW5kKG51bGwsIHNjcmlwdC5vbmxvYWQpO1xuXHRuZWVkQXR0YWNoICYmIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbn07IiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiQGltcG9ydCB1cmwoaHR0cHM6Ly91bnBrZy5jb20vYm94aWNvbnNAMi4xLjQvY3NzL2JveGljb25zLm1pbi5jc3MpO1wiXSk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC8qIFNhdG9zaGkgKi9cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ1NhdG9zaGknO1xuICBzcmM6IHVybCgnLy9jZG4uZm9udHNoYXJlLmNvbS93Zi9OV0JRWUpJTTdHQ1o1WFdEN0QyNkFSQjNWRFk1NVpSVC9LNjNFVjJLWklHS0xFN1JBTlEyVTQyUzZTVkhVNVJKNy9YNlhZVEtJVkRVVzdHWlRaUFpOTjRFVU01S0g1NEtIRi53b2ZmMicpIGZvcm1hdCgnd29mZjInKSwgdXJsKCcvL2Nkbi5mb250c2hhcmUuY29tL3dmL05XQlFZSklNN0dDWjVYV0Q3RDI2QVJCM1ZEWTU1WlJUL0s2M0VWMktaSUdLTEU3UkFOUTJVNDJTNlNWSFU1Uko3L1g2WFlUS0lWRFVXN0daVFpQWk5ONEVVTTVLSDU0S0hGLndvZmYnKSBmb3JtYXQoJ3dvZmYnKSwgdXJsKCcvL2Nkbi5mb250c2hhcmUuY29tL3dmL05XQlFZSklNN0dDWjVYV0Q3RDI2QVJCM1ZEWTU1WlJUL0s2M0VWMktaSUdLTEU3UkFOUTJVNDJTNlNWSFU1Uko3L1g2WFlUS0lWRFVXN0daVFpQWk5ONEVVTTVLSDU0S0hGLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKTtcbiAgZm9udC13ZWlnaHQ6IDMwMCA5MDA7XG4gIGZvbnQtZGlzcGxheTogc3dhcDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnU2F0b3NoaSc7XG4gIHNyYzogdXJsKCcvL2Nkbi5mb250c2hhcmUuY29tL3dmLzNKWklGVVc3S0xGU1BMVkNJVUkyRExHTklFUjZJRkNYL01NUDRSVUY1TFlHVUFaUzNEQ0pDM0dKNkY2U0FHS1NOL0UzTkVQR0VBSFlDSFIzN0RTQlhIVjMzWENZWVJFMkNZLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLCB1cmwoJy8vY2RuLmZvbnRzaGFyZS5jb20vd2YvM0paSUZVVzdLTEZTUExWQ0lVSTJETEdOSUVSNklGQ1gvTU1QNFJVRjVMWUdVQVpTM0RDSkMzR0o2RjZTQUdLU04vRTNORVBHRUFIWUNIUjM3RFNCWEhWMzNYQ1lZUkUyQ1kud29mZicpIGZvcm1hdCgnd29mZicpLCB1cmwoJy8vY2RuLmZvbnRzaGFyZS5jb20vd2YvM0paSUZVVzdLTEZTUExWQ0lVSTJETEdOSUVSNklGQ1gvTU1QNFJVRjVMWUdVQVpTM0RDSkMzR0o2RjZTQUdLU04vRTNORVBHRUFIWUNIUjM3RFNCWEhWMzNYQ1lZUkUyQ1kudHRmJykgZm9ybWF0KCd0cnVldHlwZScpO1xuICBmb250LXdlaWdodDogMzAwIDkwMDtcbiAgZm9udC1kaXNwbGF5OiBzd2FwO1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG46cm9vdCB7XG4gIC0tdGV4dDogI2NkZDZmNDtcbiAgLS1zdXJmYWNlLTI6ICM1ODViNzA7XG4gIC0tc3VyZmFjZS0xOiAjNDU0NzVhO1xuICAtLXN1cmZhY2UtMDogIzMxMzI0NDtcbiAgLS1iYXNlOiAjMWUxZTJlO1xuICAtLW1hbnRsZTogIzE4MTgyNTtcbiAgLS1jcnVzdDogIzExMTExYjtcbn1cbmJvZHksXG5odG1sIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY3J1c3QpO1xuICB3aWR0aDogMTAwdnc7XG4gIGhlaWdodDogMTAwdmg7XG4gIG1hcmdpbjogMTBweDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbio6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbioge1xuICAtbXMtb3ZlcmZsb3ctc3R5bGU6IG5vbmU7XG4gIHNjcm9sbGJhci13aWR0aDogbm9uZTtcbiAgZm9udC1mYW1pbHk6ICdTYXRvc2hpJywgc2Fucy1zZXJpZjtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgY29sb3I6IHZhcigtLXRleHQpO1xufVxuLmJ4IHtcbiAgZm9udC1zaXplOiAyNXB4O1xufVxudG9vbGJhciB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDEwcHg7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxudG9vbGJhciA+IGRpdiB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWJhc2UpO1xuICBwYWRkaW5nOiA1cHg7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgYm94LXNoYWRvdzogMCAxMHB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDBweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgaGVpZ2h0OiA0MHB4IWltcG9ydGFudDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbnRvb2xiYXIgPiBkaXYgYXBwIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiAxMHB4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxudG9vbGJhciA+IGRpdiBhcHAgaW1nIHtcbiAgYXNwZWN0LXJhdGlvOiAxIC8gMTtcbiAgaGVpZ2h0OiAyZW07XG4gIGJvcmRlci1yYWRpdXM6IDQwJTtcbn1cbndpbmRvdy1hcmVhIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogY2FsYygxMDAlIC0gNDBweCk7XG4gIG1hcmdpbi1sZWZ0OiAyMHB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBoZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG53aW5kb3ctYXJlYSB3aW5kb3cge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1iYXNlKTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBib3gtc2hhZG93OiAwIDEwcHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgMHB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNydXN0KTtcbn1cbndpbmRvdy1hcmVhIHdpbmRvdyB3aW5kb3ctaGVhZGVyIHtcbiAgaGVpZ2h0OiAyMHB4O1xuICBwYWRkaW5nOiA3LjVweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiA3LjVweDtcbn1cbndpbmRvdy1hcmVhIHdpbmRvdyB3aW5kb3ctaGVhZGVyIGltZyB7XG4gIGFzcGVjdC1yYXRpbzogMSAvIDE7XG4gIGhlaWdodDogMS4yZW07XG4gIGJvcmRlci1yYWRpdXM6IDQwJTtcbn1cbndpbmRvdy1hcmVhIHdpbmRvdyB3aW5kb3ctY29udGVudCB7XG4gIGhlaWdodDogMTAwJTtcbiAgYm9yZGVyLXJhZGl1czogMTBweCAxMHB4IDAgMDtcbiAgYmFja2dyb3VuZDogdmFyKC0tbWFudGxlKTtcbiAgb3ZlcmZsb3c6IHNjcm9sbDtcbn1cbndpbmRvdy1hcmVhIHdpbmRvdyB3aW5kb3ctY29udGVudCBoMSB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG5sYXVuY2hlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHRvcDogMDtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjUpO1xuICB6LWluZGV4OiA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTtcbiAgd2lkdGg6IDEwMHZ3O1xuICBoZWlnaHQ6IGNhbGMoMTAwdmggKyAyMHB4KTtcbiAgZ2FwOiAyMHB4O1xuICB0cmFuc2l0aW9uOiAwLjJzIG9wYWNpdHksIDAuMnMgYmFja2Ryb3AtZmlsdGVyO1xufVxubGF1bmNoZXIgYXBwcyB7XG4gIG1heC1oZWlnaHQ6IDcwdmg7XG4gIHBhZGRpbmc6IDIwcHg7XG4gIG1hcmdpbjogNDBweDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGdhcDogNDBweDtcbiAgZmxleC13cmFwOiB3cmFwO1xufVxubGF1bmNoZXIgYXBwcyBhcHAge1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiAxMHB4O1xuICBoZWlnaHQ6IG1heC1jb250ZW50O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5sYXVuY2hlciBhcHBzIGFwcCBpbWcge1xuICB3aWR0aDogMTAwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDQwJTtcbiAgYXNwZWN0LXJhdGlvOiAxIC8gMTtcbn1cbmxhdW5jaGVyIGlucHV0IHtcbiAgYmFja2dyb3VuZDogdmFyKC0tbWFudGxlKTtcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tY3J1c3QpO1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICBwYWRkaW5nOiAxMHB4O1xuICB3aWR0aDogMzAwcHg7XG4gIG1heC13aWR0aDogMTAwdnc7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdHJhbnNpdGlvbjogYm9yZGVyIDAuMnM7XG59XG5sYXVuY2hlciBpbnB1dDpmb2N1cyB7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLXRleHQpO1xufVxuLmFjZV9lZGl0b3IgKiB7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG59XG4uYWNlLW1vbm9rYWkgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmUtbGluZSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLW1hbnRsZSkgIWltcG9ydGFudDtcbn1cbi5hY2VfbGF5ZXIuYWNlX2d1dHRlci1sYXllci5hY2VfZm9sZGluZy1lbmFibGVkIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tbWFudGxlKSAhaW1wb3J0YW50O1xufVxuLmFjZV9jb250ZW50IHtcbiAgYmFja2dyb3VuZDogdmFyKC0tYmFzZSkgIWltcG9ydGFudDtcbn1cbi5hY2VfZ3V0dGVyLWNlbGwuYWNlX2luZm8ge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jcnVzdCkgIWltcG9ydGFudDtcbn1cbi5hY2UtbW9ub2thaSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7XG4gIGJhY2tncm91bmQ6IHZhcigtLXN1cmZhY2UtMCkgIWltcG9ydGFudDtcbn1cbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL3N0eWxlLmxlc3NcIixcImh0dHBzOlxcXFxhcGkuZm9udHNoYXJlLmNvbVxcXFx2MlxcXFxjc3M/ZltdPXNhdG9zaGlAMSwyJmRpc3BsYXk9c3dhcFwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFDQSxZQUFZO0FDQVo7RUFDRSxzQkFBQTtFQUNBLDBjQUFBO0VBR0Esb0JBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBO0FEQUY7QUNHQTtFQUNFLHNCQUFBO0VBQ0EsMGNBQUE7RUFHQSxvQkFBQTtFQUNBLGtCQUFBO0VBQ0Esa0JBQUE7QURIRjtBQVpBO0VBQ0UsZUFBQTtFQUNBLG9CQUFBO0VBQ0Esb0JBQUE7RUFDQSxvQkFBQTtFQUNBLGVBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0FBY0Y7QUFYQTs7RUFDRSw4QkFBQTtFQUVBLFlBQUE7RUFDQSxhQUFBO0VBRUEsWUFBQTtFQUVBLGFBQUE7RUFDQSxzQkFBQTtFQUVBLGdCQUFBO0FBVUY7QUFOQTtFQUNFLGFBQUE7QUFRRjtBQUxBO0VBQ0Usd0JBQUE7RUFDQSxxQkFBQTtFQUVBLGtDQUFBO0VBQ0EsZ0JBQUE7RUFFQSxrQkFBQTtBQUtGO0FBSEE7RUFDRSxlQUFBO0FBS0Y7QUFGQTtFQUNFLFdBQUE7RUFDQSxhQUFBO0VBQ0EsU0FBQTtFQUNBLG1CQUFBO0VBQ0EsdUJBQUE7QUFJRjtBQUZFO0VBQ0UsdUJBQUE7RUFDQSxZQUFBO0VBQ0Esa0JBQUE7RUFDQSx5RUFBQTtFQUNBLHNCQUFBO0VBQ0EsYUFBQTtFQUNBLG1CQUFBO0FBSUo7QUFYRTtFQVVJLGFBQUE7RUFDQSxTQUFBO0VBQ0EsbUJBQUE7QUFJTjtBQWhCRTtFQWVNLG1CQUFBO0VBQ0EsV0FBQTtFQUNBLGtCQUFBO0FBSVI7QUFFQTtFQUNFLGtCQUFBO0VBQ0Esd0JBQUE7RUFDQSxpQkFBQTtFQUNBLG1CQUFBO0VBQ0EsWUFBQTtFQUNBLGdCQUFBO0FBQUY7QUFOQTtFQVNJLHVCQUFBO0VBQ0EsYUFBQTtFQUNBLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSx5RUFBQTtFQUNBLGdCQUFBO0VBQ0EsMENBQUE7RUFDQSx3QkFBQTtBQUFKO0FBaEJBO0VBbUJNLFlBQUE7RUFDQSxjQUFBO0VBQ0EsYUFBQTtFQUNBLG1CQUFBO0VBQ0EsVUFBQTtBQUFOO0FBdkJBO0VBMEJRLG1CQUFBO0VBQ0EsYUFBQTtFQUNBLGtCQUFBO0FBQVI7QUE1QkE7RUFpQ00sWUFBQTtFQUNBLDRCQUFBO0VBQ0EseUJBQUE7RUFDQSxnQkFBQTtBQUZOO0FBbENBO0VBdUNRLGFBQUE7QUFGUjtBQVFBO0VBQ0Usa0JBQUE7RUFDQSxhQUFBO0VBQ0Esc0JBQUE7RUFDQSx1QkFBQTtFQUNBLG1CQUFBO0VBQ0EsTUFBQTtFQUNBLDhCQUFBO0VBQ0EsZ0NBQUE7RUFDQSxZQUFBO0VBQ0EsMEJBQUE7RUFDQSxTQUFBO0VBQ0EsOENBQUE7QUFORjtBQU5BO0VBZUksZ0JBQUE7RUFDQSxhQUFBO0VBQ0EsWUFBQTtFQUNBLGFBQUE7RUFDQSx1QkFBQTtFQUNBLFNBQUE7RUFDQSxlQUFBO0FBTko7QUFmQTtFQXdCTSx1QkFBQTtFQUNBLGFBQUE7RUFDQSxzQkFBQTtFQUNBLFNBQUE7RUFDQSxtQkFBQTtFQUNBLGtCQUFBO0FBTk47QUF2QkE7RUFnQ1EsWUFBQTtFQUNBLGtCQUFBO0VBQ0EsbUJBQUE7QUFOUjtBQTVCQTtFQXdDSSx5QkFBQTtFQUNBLDhCQUFBO0VBQ0EsbUJBQUE7RUFDQSxhQUFBO0VBQ0EsWUFBQTtFQUNBLGdCQUFBO0VBQ0Esa0JBQUE7RUFDQSx1QkFBQTtBQVRKO0FBV0k7RUFDRSxhQUFBO0VBQ0EsNkJBQUE7QUFUTjtBQWNBO0VBQ0Usc0JBQUE7QUFaRjtBQWVBO0VBQ0Usb0NBQUE7QUFiRjtBQWdCQTtFQUNFLG9DQUFBO0FBZEY7QUFpQkE7RUFDRSxrQ0FBQTtBQWZGO0FBa0JBO0VBQ0UsbUNBQUE7QUFoQkY7QUFtQkE7RUFDRSx1Q0FBQTtBQWpCRlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJAaW1wb3J0IHVybChodHRwczovL3VucGtnLmNvbS9ib3hpY29uc0AyLjEuNC9jc3MvYm94aWNvbnMubWluLmNzcyk7XFxuQGltcG9ydCB1cmwoaHR0cHM6Ly9hcGkuZm9udHNoYXJlLmNvbS92Mi9jc3M/ZltdPXNhdG9zaGlAMSwyJmRpc3BsYXk9c3dhcCk7XFxuXFxuOnJvb3Qge1xcbiAgLS10ZXh0OiAjY2RkNmY0O1xcbiAgLS1zdXJmYWNlLTI6ICM1ODViNzA7XFxuICAtLXN1cmZhY2UtMTogIzQ1NDc1YTtcXG4gIC0tc3VyZmFjZS0wOiAjMzEzMjQ0O1xcbiAgLS1iYXNlOiAjMWUxZTJlO1xcbiAgLS1tYW50bGU6ICMxODE4MjU7XFxuICAtLWNydXN0OiAjMTExMTFiO1xcbn1cXG5cXG5ib2R5LCBodG1sIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNydXN0KTtcXG5cXG4gIHdpZHRoOiAxMDB2dztcXG4gIGhlaWdodDogMTAwdmg7XFxuXFxuICBtYXJnaW46IDEwcHg7XFxuXFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG5cXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcblxcbio6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbioge1xcbiAgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lO1xcbiAgc2Nyb2xsYmFyLXdpZHRoOiBub25lO1xcblxcbiAgZm9udC1mYW1pbHk6ICdTYXRvc2hpJywgc2Fucy1zZXJpZjtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuXFxuICBjb2xvcjogdmFyKC0tdGV4dCk7XFxufVxcbi5ieCB7XFxuICBmb250LXNpemU6IDI1cHg7XFxufVxcblxcbnRvb2xiYXIge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZ2FwOiAxMHB4O1xcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcblxcbiAgJiA+IGRpdiB7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWJhc2UpO1xcbiAgICBwYWRkaW5nOiA1cHg7XFxuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcXG4gICAgYm94LXNoYWRvdzogMCAxMHB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDBweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gICAgaGVpZ2h0OiA0MHB4IWltcG9ydGFudDtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cXG4gICAgYXBwIHtcXG4gICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgIGdhcDogMTBweDtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcblxcbiAgICAgIGltZyB7XFxuICAgICAgICBhc3BlY3QtcmF0aW86IDEgLyAxO1xcbiAgICAgICAgaGVpZ2h0OiAyZW07XFxuICAgICAgICBib3JkZXItcmFkaXVzOiA0MCU7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxufVxcblxcbndpbmRvdy1hcmVhIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgLSA0MHB4KTtcXG4gIG1hcmdpbi1sZWZ0OiAyMHB4O1xcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuXFxuICB3aW5kb3cge1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iYXNlKTtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xcbiAgICBib3gtc2hhZG93OiAwIDEwcHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgMHB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNydXN0KTtcXG4gIFxcbiAgICB3aW5kb3ctaGVhZGVyIHtcXG4gICAgICBoZWlnaHQ6IDIwcHg7XFxuICAgICAgcGFkZGluZzogNy41cHg7XFxuICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgIGdhcDogNy41cHg7XFxuXFxuICAgICAgaW1nIHtcXG4gICAgICAgIGFzcGVjdC1yYXRpbzogMSAvIDE7XFxuICAgICAgICBoZWlnaHQ6IDEuMmVtO1xcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNDAlO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgXFxuICAgIHdpbmRvdy1jb250ZW50IHtcXG4gICAgICBoZWlnaHQ6IDEwMCU7XFxuICAgICAgYm9yZGVyLXJhZGl1czogMTBweCAxMHB4IDAgMDtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tYW50bGUpO1xcbiAgICAgIG92ZXJmbG93OiBzY3JvbGw7XFxuXFxuICAgICAgaDEge1xcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG59XFxuXFxubGF1bmNoZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICB0b3A6IDA7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNSk7XFxuICB6LWluZGV4OiA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTtcXG4gIHdpZHRoOiAxMDB2dztcXG4gIGhlaWdodDogY2FsYygxMDB2aCArIDIwcHgpO1xcbiAgZ2FwOiAyMHB4O1xcbiAgdHJhbnNpdGlvbjogLjJzIG9wYWNpdHksIC4ycyBiYWNrZHJvcC1maWx0ZXI7XFxuXFxuICBhcHBzIHtcXG4gICAgbWF4LWhlaWdodDogNzB2aDtcXG4gICAgcGFkZGluZzogMjBweDtcXG4gICAgbWFyZ2luOiA0MHB4O1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgZ2FwOiA0MHB4O1xcbiAgICBmbGV4LXdyYXA6IHdyYXA7XFxuXFxuICAgIGFwcCB7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICAgIGdhcDogMTBweDtcXG4gICAgICBoZWlnaHQ6IG1heC1jb250ZW50O1xcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG5cXG4gICAgICBpbWcge1xcbiAgICAgICAgd2lkdGg6IDEwMHB4O1xcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNDAlO1xcbiAgICAgICAgYXNwZWN0LXJhdGlvOiAxIC8gMTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cXG4gIGlucHV0IHtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tbWFudGxlKTtcXG4gICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tY3J1c3QpO1xcbiAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xcbiAgICBwYWRkaW5nOiAxMHB4O1xcbiAgICB3aWR0aDogMzAwcHg7XFxuICAgIG1heC13aWR0aDogMTAwdnc7XFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gICAgdHJhbnNpdGlvbjogYm9yZGVyIC4ycztcXG5cXG4gICAgJjpmb2N1cyB7XFxuICAgICAgb3V0bGluZTogbm9uZTtcXG4gICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS10ZXh0KTtcXG4gICAgfVxcbiAgfVxcbn1cXG5cXG4uYWNlX2VkaXRvciAqIHtcXG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XFxufVxcblxcbi5hY2UtbW9ub2thaSAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZS1saW5lIHtcXG4gIGJhY2tncm91bmQ6IHZhcigtLW1hbnRsZSkhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWNlX2xheWVyLmFjZV9ndXR0ZXItbGF5ZXIuYWNlX2ZvbGRpbmctZW5hYmxlZCB7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1tYW50bGUpIWltcG9ydGFudDtcXG59XFxuXFxuLmFjZV9jb250ZW50IHtcXG4gIGJhY2tncm91bmQ6IHZhcigtLWJhc2UpIWltcG9ydGFudDtcXG59XFxuXFxuLmFjZV9ndXR0ZXItY2VsbC5hY2VfaW5mbyB7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1jcnVzdCkhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWNlLW1vbm9rYWkgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24ge1xcbiAgYmFja2dyb3VuZDogdmFyKC0tc3VyZmFjZS0wKSFpbXBvcnRhbnQ7XFxufVwiLFwiLyogU2F0b3NoaSAqL1xcbkBmb250LWZhY2Uge1xcbiAgZm9udC1mYW1pbHk6ICdTYXRvc2hpJztcXG4gIHNyYzogdXJsKCcvL2Nkbi5mb250c2hhcmUuY29tL3dmL05XQlFZSklNN0dDWjVYV0Q3RDI2QVJCM1ZEWTU1WlJUL0s2M0VWMktaSUdLTEU3UkFOUTJVNDJTNlNWSFU1Uko3L1g2WFlUS0lWRFVXN0daVFpQWk5ONEVVTTVLSDU0S0hGLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxcbiAgICAgICB1cmwoJy8vY2RuLmZvbnRzaGFyZS5jb20vd2YvTldCUVlKSU03R0NaNVhXRDdEMjZBUkIzVkRZNTVaUlQvSzYzRVYyS1pJR0tMRTdSQU5RMlU0MlM2U1ZIVTVSSjcvWDZYWVRLSVZEVVc3R1pUWlBaTk40RVVNNUtINTRLSEYud29mZicpIGZvcm1hdCgnd29mZicpLFxcbiAgICAgICB1cmwoJy8vY2RuLmZvbnRzaGFyZS5jb20vd2YvTldCUVlKSU03R0NaNVhXRDdEMjZBUkIzVkRZNTVaUlQvSzYzRVYyS1pJR0tMRTdSQU5RMlU0MlM2U1ZIVTVSSjcvWDZYWVRLSVZEVVc3R1pUWlBaTk40RVVNNUtINTRLSEYudHRmJykgZm9ybWF0KCd0cnVldHlwZScpO1xcbiAgZm9udC13ZWlnaHQ6IDMwMCA5MDA7XFxuICBmb250LWRpc3BsYXk6IHN3YXA7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxufVxcblxcbkBmb250LWZhY2Uge1xcbiAgZm9udC1mYW1pbHk6ICdTYXRvc2hpJztcXG4gIHNyYzogdXJsKCcvL2Nkbi5mb250c2hhcmUuY29tL3dmLzNKWklGVVc3S0xGU1BMVkNJVUkyRExHTklFUjZJRkNYL01NUDRSVUY1TFlHVUFaUzNEQ0pDM0dKNkY2U0FHS1NOL0UzTkVQR0VBSFlDSFIzN0RTQlhIVjMzWENZWVJFMkNZLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxcbiAgICAgICB1cmwoJy8vY2RuLmZvbnRzaGFyZS5jb20vd2YvM0paSUZVVzdLTEZTUExWQ0lVSTJETEdOSUVSNklGQ1gvTU1QNFJVRjVMWUdVQVpTM0RDSkMzR0o2RjZTQUdLU04vRTNORVBHRUFIWUNIUjM3RFNCWEhWMzNYQ1lZUkUyQ1kud29mZicpIGZvcm1hdCgnd29mZicpLFxcbiAgICAgICB1cmwoJy8vY2RuLmZvbnRzaGFyZS5jb20vd2YvM0paSUZVVzdLTEZTUExWQ0lVSTJETEdOSUVSNklGQ1gvTU1QNFJVRjVMWUdVQVpTM0RDSkMzR0o2RjZTQUdLU04vRTNORVBHRUFIWUNIUjM3RFNCWEhWMzNYQ1lZUkUyQ1kudHRmJykgZm9ybWF0KCd0cnVldHlwZScpO1xcbiAgZm9udC13ZWlnaHQ6IDMwMCA5MDA7XFxuICBmb250LWRpc3BsYXk6IHN3YXA7XFxuICBmb250LXN0eWxlOiBpdGFsaWM7XFxufVxcblxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBLRVlXT1JEUyA9IHJlcXVpcmUoJy4va2V5d29yZHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVLZXl3b3JkcztcblxuXG4vKipcbiAqIERlZmluZXMgb25lIG9yIHNldmVyYWwga2V5d29yZHMgaW4gYWp2IGluc3RhbmNlXG4gKiBAcGFyYW0gIHtBanZ9IGFqdiB2YWxpZGF0b3IgaW5zdGFuY2VcbiAqIEBwYXJhbSAge1N0cmluZ3xBcnJheTxTdHJpbmc+fHVuZGVmaW5lZH0ga2V5d29yZCBrZXl3b3JkKHMpIHRvIGRlZmluZVxuICogQHJldHVybiB7QWp2fSBhanYgaW5zdGFuY2UgKGZvciBjaGFpbmluZylcbiAqL1xuZnVuY3Rpb24gZGVmaW5lS2V5d29yZHMoYWp2LCBrZXl3b3JkKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGtleXdvcmQpKSB7XG4gICAgZm9yICh2YXIgaT0wOyBpPGtleXdvcmQubGVuZ3RoOyBpKyspXG4gICAgICBnZXQoa2V5d29yZFtpXSkoYWp2KTtcbiAgICByZXR1cm4gYWp2O1xuICB9XG4gIGlmIChrZXl3b3JkKSB7XG4gICAgZ2V0KGtleXdvcmQpKGFqdik7XG4gICAgcmV0dXJuIGFqdjtcbiAgfVxuICBmb3IgKGtleXdvcmQgaW4gS0VZV09SRFMpIGdldChrZXl3b3JkKShhanYpO1xuICByZXR1cm4gYWp2O1xufVxuXG5cbmRlZmluZUtleXdvcmRzLmdldCA9IGdldDtcblxuZnVuY3Rpb24gZ2V0KGtleXdvcmQpIHtcbiAgdmFyIGRlZkZ1bmMgPSBLRVlXT1JEU1trZXl3b3JkXTtcbiAgaWYgKCFkZWZGdW5jKSB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24ga2V5d29yZCAnICsga2V5d29yZCk7XG4gIHJldHVybiBkZWZGdW5jO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVElNRSA9IC9eKFxcZFxcZCk6KFxcZFxcZCk6KFxcZFxcZCkoXFwuXFxkKyk/KHp8WystXVxcZFxcZDpcXGRcXGQpPyQvaTtcbnZhciBEQVRFX1RJTUVfU0VQQVJBVE9SID0gL3R8XFxzL2k7XG5cbnZhciBDT01QQVJFX0ZPUk1BVFMgPSB7XG4gIGRhdGU6IGNvbXBhcmVEYXRlLFxuICB0aW1lOiBjb21wYXJlVGltZSxcbiAgJ2RhdGUtdGltZSc6IGNvbXBhcmVEYXRlVGltZVxufTtcblxudmFyICRkYXRhTWV0YVNjaGVtYSA9IHtcbiAgdHlwZTogJ29iamVjdCcsXG4gIHJlcXVpcmVkOiBbICckZGF0YScgXSxcbiAgcHJvcGVydGllczoge1xuICAgICRkYXRhOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIGFueU9mOiBbXG4gICAgICAgIHsgZm9ybWF0OiAncmVsYXRpdmUtanNvbi1wb2ludGVyJyB9LFxuICAgICAgICB7IGZvcm1hdDogJ2pzb24tcG9pbnRlcicgfVxuICAgICAgXVxuICAgIH1cbiAgfSxcbiAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtaW5NYXgpIHtcbiAgdmFyIGtleXdvcmQgPSAnZm9ybWF0JyArIG1pbk1heDtcbiAgcmV0dXJuIGZ1bmN0aW9uIGRlZkZ1bmMoYWp2KSB7XG4gICAgZGVmRnVuYy5kZWZpbml0aW9uID0ge1xuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICBpbmxpbmU6IHJlcXVpcmUoJy4vZG90anMvX2Zvcm1hdExpbWl0JyksXG4gICAgICBzdGF0ZW1lbnRzOiB0cnVlLFxuICAgICAgZXJyb3JzOiAnZnVsbCcsXG4gICAgICBkZXBlbmRlbmNpZXM6IFsnZm9ybWF0J10sXG4gICAgICBtZXRhU2NoZW1hOiB7XG4gICAgICAgIGFueU9mOiBbXG4gICAgICAgICAge3R5cGU6ICdzdHJpbmcnfSxcbiAgICAgICAgICAkZGF0YU1ldGFTY2hlbWFcbiAgICAgICAgXVxuICAgICAgfVxuICAgIH07XG5cbiAgICBhanYuYWRkS2V5d29yZChrZXl3b3JkLCBkZWZGdW5jLmRlZmluaXRpb24pO1xuICAgIGFqdi5hZGRLZXl3b3JkKCdmb3JtYXRFeGNsdXNpdmUnICsgbWluTWF4LCB7XG4gICAgICBkZXBlbmRlbmNpZXM6IFsnZm9ybWF0JyArIG1pbk1heF0sXG4gICAgICBtZXRhU2NoZW1hOiB7XG4gICAgICAgIGFueU9mOiBbXG4gICAgICAgICAge3R5cGU6ICdib29sZWFuJ30sXG4gICAgICAgICAgJGRhdGFNZXRhU2NoZW1hXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBleHRlbmRGb3JtYXRzKGFqdik7XG4gICAgcmV0dXJuIGFqdjtcbiAgfTtcbn07XG5cblxuZnVuY3Rpb24gZXh0ZW5kRm9ybWF0cyhhanYpIHtcbiAgdmFyIGZvcm1hdHMgPSBhanYuX2Zvcm1hdHM7XG4gIGZvciAodmFyIG5hbWUgaW4gQ09NUEFSRV9GT1JNQVRTKSB7XG4gICAgdmFyIGZvcm1hdCA9IGZvcm1hdHNbbmFtZV07XG4gICAgLy8gdGhlIGxhc3QgY29uZGl0aW9uIGlzIG5lZWRlZCBpZiBpdCdzIFJlZ0V4cCBmcm9tIGFub3RoZXIgd2luZG93XG4gICAgaWYgKHR5cGVvZiBmb3JtYXQgIT0gJ29iamVjdCcgfHwgZm9ybWF0IGluc3RhbmNlb2YgUmVnRXhwIHx8ICFmb3JtYXQudmFsaWRhdGUpXG4gICAgICBmb3JtYXQgPSBmb3JtYXRzW25hbWVdID0geyB2YWxpZGF0ZTogZm9ybWF0IH07XG4gICAgaWYgKCFmb3JtYXQuY29tcGFyZSlcbiAgICAgIGZvcm1hdC5jb21wYXJlID0gQ09NUEFSRV9GT1JNQVRTW25hbWVdO1xuICB9XG59XG5cblxuZnVuY3Rpb24gY29tcGFyZURhdGUoZDEsIGQyKSB7XG4gIGlmICghKGQxICYmIGQyKSkgcmV0dXJuO1xuICBpZiAoZDEgPiBkMikgcmV0dXJuIDE7XG4gIGlmIChkMSA8IGQyKSByZXR1cm4gLTE7XG4gIGlmIChkMSA9PT0gZDIpIHJldHVybiAwO1xufVxuXG5cbmZ1bmN0aW9uIGNvbXBhcmVUaW1lKHQxLCB0Mikge1xuICBpZiAoISh0MSAmJiB0MikpIHJldHVybjtcbiAgdDEgPSB0MS5tYXRjaChUSU1FKTtcbiAgdDIgPSB0Mi5tYXRjaChUSU1FKTtcbiAgaWYgKCEodDEgJiYgdDIpKSByZXR1cm47XG4gIHQxID0gdDFbMV0gKyB0MVsyXSArIHQxWzNdICsgKHQxWzRdfHwnJyk7XG4gIHQyID0gdDJbMV0gKyB0MlsyXSArIHQyWzNdICsgKHQyWzRdfHwnJyk7XG4gIGlmICh0MSA+IHQyKSByZXR1cm4gMTtcbiAgaWYgKHQxIDwgdDIpIHJldHVybiAtMTtcbiAgaWYgKHQxID09PSB0MikgcmV0dXJuIDA7XG59XG5cblxuZnVuY3Rpb24gY29tcGFyZURhdGVUaW1lKGR0MSwgZHQyKSB7XG4gIGlmICghKGR0MSAmJiBkdDIpKSByZXR1cm47XG4gIGR0MSA9IGR0MS5zcGxpdChEQVRFX1RJTUVfU0VQQVJBVE9SKTtcbiAgZHQyID0gZHQyLnNwbGl0KERBVEVfVElNRV9TRVBBUkFUT1IpO1xuICB2YXIgcmVzID0gY29tcGFyZURhdGUoZHQxWzBdLCBkdDJbMF0pO1xuICBpZiAocmVzID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgcmV0dXJuIHJlcyB8fCBjb21wYXJlVGltZShkdDFbMV0sIGR0MlsxXSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhU2NoZW1hUmVmOiBtZXRhU2NoZW1hUmVmXG59O1xuXG52YXIgTUVUQV9TQ0hFTUFfSUQgPSAnaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEnO1xuXG5mdW5jdGlvbiBtZXRhU2NoZW1hUmVmKGFqdikge1xuICB2YXIgZGVmYXVsdE1ldGEgPSBhanYuX29wdHMuZGVmYXVsdE1ldGE7XG4gIGlmICh0eXBlb2YgZGVmYXVsdE1ldGEgPT0gJ3N0cmluZycpIHJldHVybiB7ICRyZWY6IGRlZmF1bHRNZXRhIH07XG4gIGlmIChhanYuZ2V0U2NoZW1hKE1FVEFfU0NIRU1BX0lEKSkgcmV0dXJuIHsgJHJlZjogTUVUQV9TQ0hFTUFfSUQgfTtcbiAgY29uc29sZS53YXJuKCdtZXRhIHNjaGVtYSBub3QgZGVmaW5lZCcpO1xuICByZXR1cm4ge307XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmRnVuYyhhanYpIHtcbiAgZGVmRnVuYy5kZWZpbml0aW9uID0ge1xuICAgIHR5cGU6ICdvYmplY3QnLFxuICAgIG1hY3JvOiBmdW5jdGlvbiAoc2NoZW1hLCBwYXJlbnRTY2hlbWEpIHtcbiAgICAgIGlmICghc2NoZW1hKSByZXR1cm4gdHJ1ZTtcbiAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocGFyZW50U2NoZW1hLnByb3BlcnRpZXMpO1xuICAgICAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID09IDApIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIHtyZXF1aXJlZDogcHJvcGVydGllc307XG4gICAgfSxcbiAgICBtZXRhU2NoZW1hOiB7dHlwZTogJ2Jvb2xlYW4nfSxcbiAgICBkZXBlbmRlbmNpZXM6IFsncHJvcGVydGllcyddXG4gIH07XG5cbiAgYWp2LmFkZEtleXdvcmQoJ2FsbFJlcXVpcmVkJywgZGVmRnVuYy5kZWZpbml0aW9uKTtcbiAgcmV0dXJuIGFqdjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmRnVuYyhhanYpIHtcbiAgZGVmRnVuYy5kZWZpbml0aW9uID0ge1xuICAgIHR5cGU6ICdvYmplY3QnLFxuICAgIG1hY3JvOiBmdW5jdGlvbiAoc2NoZW1hKSB7XG4gICAgICBpZiAoc2NoZW1hLmxlbmd0aCA9PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChzY2hlbWEubGVuZ3RoID09IDEpIHJldHVybiB7cmVxdWlyZWQ6IHNjaGVtYX07XG4gICAgICB2YXIgc2NoZW1hcyA9IHNjaGVtYS5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgcmV0dXJuIHtyZXF1aXJlZDogW3Byb3BdfTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHthbnlPZjogc2NoZW1hc307XG4gICAgfSxcbiAgICBtZXRhU2NoZW1hOiB7XG4gICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgaXRlbXM6IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZydcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgYWp2LmFkZEtleXdvcmQoJ2FueVJlcXVpcmVkJywgZGVmRnVuYy5kZWZpbml0aW9uKTtcbiAgcmV0dXJuIGFqdjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi9fdXRpbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZkZ1bmMoYWp2KSB7XG4gIGRlZkZ1bmMuZGVmaW5pdGlvbiA9IHtcbiAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICBtYWNybzogZnVuY3Rpb24gKHNjaGVtYSkge1xuICAgICAgdmFyIHNjaGVtYXMgPSBbXTtcbiAgICAgIGZvciAodmFyIHBvaW50ZXIgaW4gc2NoZW1hKVxuICAgICAgICBzY2hlbWFzLnB1c2goZ2V0U2NoZW1hKHBvaW50ZXIsIHNjaGVtYVtwb2ludGVyXSkpO1xuICAgICAgcmV0dXJuIHsnYWxsT2YnOiBzY2hlbWFzfTtcbiAgICB9LFxuICAgIG1ldGFTY2hlbWE6IHtcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgcHJvcGVydHlOYW1lczoge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZm9ybWF0OiAnanNvbi1wb2ludGVyJ1xuICAgICAgfSxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB1dGlsLm1ldGFTY2hlbWFSZWYoYWp2KVxuICAgIH1cbiAgfTtcblxuICBhanYuYWRkS2V5d29yZCgnZGVlcFByb3BlcnRpZXMnLCBkZWZGdW5jLmRlZmluaXRpb24pO1xuICByZXR1cm4gYWp2O1xufTtcblxuXG5mdW5jdGlvbiBnZXRTY2hlbWEoanNvblBvaW50ZXIsIHNjaGVtYSkge1xuICB2YXIgc2VnbWVudHMgPSBqc29uUG9pbnRlci5zcGxpdCgnLycpO1xuICB2YXIgcm9vdFNjaGVtYSA9IHt9O1xuICB2YXIgcG9pbnRlclNjaGVtYSA9IHJvb3RTY2hlbWE7XG4gIGZvciAodmFyIGk9MTsgaTxzZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzZWdtZW50ID0gc2VnbWVudHNbaV07XG4gICAgdmFyIGlzTGFzdCA9IGkgPT0gc2VnbWVudHMubGVuZ3RoIC0gMTtcbiAgICBzZWdtZW50ID0gdW5lc2NhcGVKc29uUG9pbnRlcihzZWdtZW50KTtcbiAgICB2YXIgcHJvcGVydGllcyA9IHBvaW50ZXJTY2hlbWEucHJvcGVydGllcyA9IHt9O1xuICAgIHZhciBpdGVtcyA9IHVuZGVmaW5lZDtcbiAgICBpZiAoL1swLTldKy8udGVzdChzZWdtZW50KSkge1xuICAgICAgdmFyIGNvdW50ID0gK3NlZ21lbnQ7XG4gICAgICBpdGVtcyA9IHBvaW50ZXJTY2hlbWEuaXRlbXMgPSBbXTtcbiAgICAgIHdoaWxlIChjb3VudC0tKSBpdGVtcy5wdXNoKHt9KTtcbiAgICB9XG4gICAgcG9pbnRlclNjaGVtYSA9IGlzTGFzdCA/IHNjaGVtYSA6IHt9O1xuICAgIHByb3BlcnRpZXNbc2VnbWVudF0gPSBwb2ludGVyU2NoZW1hO1xuICAgIGlmIChpdGVtcykgaXRlbXMucHVzaChwb2ludGVyU2NoZW1hKTtcbiAgfVxuICByZXR1cm4gcm9vdFNjaGVtYTtcbn1cblxuXG5mdW5jdGlvbiB1bmVzY2FwZUpzb25Qb2ludGVyKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL34xL2csICcvJykucmVwbGFjZSgvfjAvZywgJ34nKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZGdW5jKGFqdikge1xuICBkZWZGdW5jLmRlZmluaXRpb24gPSB7XG4gICAgdHlwZTogJ29iamVjdCcsXG4gICAgaW5saW5lOiBmdW5jdGlvbiAoaXQsIGtleXdvcmQsIHNjaGVtYSkge1xuICAgICAgdmFyIGV4cHIgPSAnJztcbiAgICAgIGZvciAodmFyIGk9MDsgaTxzY2hlbWEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGkpIGV4cHIgKz0gJyAmJiAnO1xuICAgICAgICBleHByICs9ICcoJyArIGdldERhdGEoc2NoZW1hW2ldLCBpdC5kYXRhTGV2ZWwpICsgJyAhPT0gdW5kZWZpbmVkKSc7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXhwcjtcbiAgICB9LFxuICAgIG1ldGFTY2hlbWE6IHtcbiAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICBpdGVtczoge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZm9ybWF0OiAnanNvbi1wb2ludGVyJ1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBhanYuYWRkS2V5d29yZCgnZGVlcFJlcXVpcmVkJywgZGVmRnVuYy5kZWZpbml0aW9uKTtcbiAgcmV0dXJuIGFqdjtcbn07XG5cblxuZnVuY3Rpb24gZ2V0RGF0YShqc29uUG9pbnRlciwgbHZsKSB7XG4gIHZhciBkYXRhID0gJ2RhdGEnICsgKGx2bCB8fCAnJyk7XG4gIGlmICghanNvblBvaW50ZXIpIHJldHVybiBkYXRhO1xuXG4gIHZhciBleHByID0gZGF0YTtcbiAgdmFyIHNlZ21lbnRzID0ganNvblBvaW50ZXIuc3BsaXQoJy8nKTtcbiAgZm9yICh2YXIgaT0xOyBpPHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNlZ21lbnQgPSBzZWdtZW50c1tpXTtcbiAgICBkYXRhICs9IGdldFByb3BlcnR5KHVuZXNjYXBlSnNvblBvaW50ZXIoc2VnbWVudCkpO1xuICAgIGV4cHIgKz0gJyAmJiAnICsgZGF0YTtcbiAgfVxuICByZXR1cm4gZXhwcjtcbn1cblxuXG52YXIgSURFTlRJRklFUiA9IC9eW2EteiRfXVthLXokXzAtOV0qJC9pO1xudmFyIElOVEVHRVIgPSAvXlswLTldKyQvO1xudmFyIFNJTkdMRV9RVU9URSA9IC8nfFxcXFwvZztcbmZ1bmN0aW9uIGdldFByb3BlcnR5KGtleSkge1xuICByZXR1cm4gSU5URUdFUi50ZXN0KGtleSlcbiAgICAgICAgICA/ICdbJyArIGtleSArICddJ1xuICAgICAgICAgIDogSURFTlRJRklFUi50ZXN0KGtleSlcbiAgICAgICAgICAgID8gJy4nICsga2V5XG4gICAgICAgICAgICA6IFwiWydcIiArIGtleS5yZXBsYWNlKFNJTkdMRV9RVU9URSwgJ1xcXFwkJicpICsgXCInXVwiO1xufVxuXG5cbmZ1bmN0aW9uIHVuZXNjYXBlSnNvblBvaW50ZXIoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvfjEvZywgJy8nKS5yZXBsYWNlKC9+MC9nLCAnficpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9fZm9ybWF0TGltaXQoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRlcnJvcktleXdvcmQ7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgb3V0ICs9ICd2YXIgJyArICgkdmFsaWQpICsgJyA9IHVuZGVmaW5lZDsnO1xuICBpZiAoaXQub3B0cy5mb3JtYXQgPT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgJyArICgkdmFsaWQpICsgJyA9IHRydWU7ICc7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuICB2YXIgJHNjaGVtYUZvcm1hdCA9IGl0LnNjaGVtYS5mb3JtYXQsXG4gICAgJGlzRGF0YUZvcm1hdCA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYUZvcm1hdC4kZGF0YSxcbiAgICAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICBpZiAoJGlzRGF0YUZvcm1hdCkge1xuICAgIHZhciAkc2NoZW1hVmFsdWVGb3JtYXQgPSBpdC51dGlsLmdldERhdGEoJHNjaGVtYUZvcm1hdC4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSxcbiAgICAgICRmb3JtYXQgPSAnZm9ybWF0JyArICRsdmwsXG4gICAgICAkY29tcGFyZSA9ICdjb21wYXJlJyArICRsdmw7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJGZvcm1hdCkgKyAnID0gZm9ybWF0c1snICsgKCRzY2hlbWFWYWx1ZUZvcm1hdCkgKyAnXSAsICcgKyAoJGNvbXBhcmUpICsgJyA9ICcgKyAoJGZvcm1hdCkgKyAnICYmICcgKyAoJGZvcm1hdCkgKyAnLmNvbXBhcmU7JztcbiAgfSBlbHNlIHtcbiAgICB2YXIgJGZvcm1hdCA9IGl0LmZvcm1hdHNbJHNjaGVtYUZvcm1hdF07XG4gICAgaWYgKCEoJGZvcm1hdCAmJiAkZm9ybWF0LmNvbXBhcmUpKSB7XG4gICAgICBvdXQgKz0gJyAgJyArICgkdmFsaWQpICsgJyA9IHRydWU7ICc7XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICB2YXIgJGNvbXBhcmUgPSAnZm9ybWF0cycgKyBpdC51dGlsLmdldFByb3BlcnR5KCRzY2hlbWFGb3JtYXQpICsgJy5jb21wYXJlJztcbiAgfVxuICB2YXIgJGlzTWF4ID0gJGtleXdvcmQgPT0gJ2Zvcm1hdE1heGltdW0nLFxuICAgICRleGNsdXNpdmVLZXl3b3JkID0gJ2Zvcm1hdEV4Y2x1c2l2ZScgKyAoJGlzTWF4ID8gJ01heGltdW0nIDogJ01pbmltdW0nKSxcbiAgICAkc2NoZW1hRXhjbCA9IGl0LnNjaGVtYVskZXhjbHVzaXZlS2V5d29yZF0sXG4gICAgJGlzRGF0YUV4Y2wgPSBpdC5vcHRzLiRkYXRhICYmICRzY2hlbWFFeGNsICYmICRzY2hlbWFFeGNsLiRkYXRhLFxuICAgICRvcCA9ICRpc01heCA/ICc8JyA6ICc+JyxcbiAgICAkcmVzdWx0ID0gJ3Jlc3VsdCcgKyAkbHZsO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgaWYgKCRpc0RhdGFFeGNsKSB7XG4gICAgdmFyICRzY2hlbWFWYWx1ZUV4Y2wgPSBpdC51dGlsLmdldERhdGEoJHNjaGVtYUV4Y2wuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFyciksXG4gICAgICAkZXhjbHVzaXZlID0gJ2V4Y2x1c2l2ZScgKyAkbHZsLFxuICAgICAgJG9wRXhwciA9ICdvcCcgKyAkbHZsLFxuICAgICAgJG9wU3RyID0gJ1xcJyArICcgKyAkb3BFeHByICsgJyArIFxcJyc7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYUV4Y2wnICsgKCRsdmwpICsgJyA9ICcgKyAoJHNjaGVtYVZhbHVlRXhjbCkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZUV4Y2wgPSAnc2NoZW1hRXhjbCcgKyAkbHZsO1xuICAgIG91dCArPSAnIGlmICh0eXBlb2YgJyArICgkc2NoZW1hVmFsdWVFeGNsKSArICcgIT0gXFwnYm9vbGVhblxcJyAmJiAnICsgKCRzY2hlbWFWYWx1ZUV4Y2wpICsgJyAhPT0gdW5kZWZpbmVkKSB7ICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgJztcbiAgICB2YXIgJGVycm9yS2V5d29yZCA9ICRleGNsdXNpdmVLZXl3b3JkO1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ19mb3JtYXRFeGNsdXNpdmVMaW1pdCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHt9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnICsgKCRleGNsdXNpdmVLZXl3b3JkKSArICcgc2hvdWxkIGJlIGJvb2xlYW5cXCcgJztcbiAgICAgIH1cbiAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgdmFyIF9fZXJyID0gb3V0O1xuICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICAnO1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgICB9XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnIGlmICgnICsgKCRzY2hlbWFWYWx1ZSkgKyAnID09PSB1bmRlZmluZWQpICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyBlbHNlIGlmICh0eXBlb2YgJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPSBcXCdzdHJpbmdcXCcpICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgZWxzZSB7ICc7XG4gICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgfVxuICAgIGlmICgkaXNEYXRhRm9ybWF0KSB7XG4gICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJGNvbXBhcmUpICsgJykgJyArICgkdmFsaWQpICsgJyA9IHRydWU7IGVsc2UgeyAnO1xuICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgIH1cbiAgICBvdXQgKz0gJyB2YXIgJyArICgkcmVzdWx0KSArICcgPSAnICsgKCRjb21wYXJlKSArICcoJyArICgkZGF0YSkgKyAnLCAgJztcbiAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWFWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRzY2hlbWEpKTtcbiAgICB9XG4gICAgb3V0ICs9ICcgKTsgaWYgKCcgKyAoJHJlc3VsdCkgKyAnID09PSB1bmRlZmluZWQpICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgdmFyICcgKyAoJGV4Y2x1c2l2ZSkgKyAnID0gJyArICgkc2NoZW1hVmFsdWVFeGNsKSArICcgPT09IHRydWU7IGlmICgnICsgKCR2YWxpZCkgKyAnID09PSB1bmRlZmluZWQpIHsgJyArICgkdmFsaWQpICsgJyA9ICcgKyAoJGV4Y2x1c2l2ZSkgKyAnID8gJyArICgkcmVzdWx0KSArICcgJyArICgkb3ApICsgJyAwIDogJyArICgkcmVzdWx0KSArICcgJyArICgkb3ApICsgJz0gMDsgfSBpZiAoIScgKyAoJHZhbGlkKSArICcpIHZhciBvcCcgKyAoJGx2bCkgKyAnID0gJyArICgkZXhjbHVzaXZlKSArICcgPyBcXCcnICsgKCRvcCkgKyAnXFwnIDogXFwnJyArICgkb3ApICsgJz1cXCc7JztcbiAgfSBlbHNlIHtcbiAgICB2YXIgJGV4Y2x1c2l2ZSA9ICRzY2hlbWFFeGNsID09PSB0cnVlLFxuICAgICAgJG9wU3RyID0gJG9wO1xuICAgIGlmICghJGV4Y2x1c2l2ZSkgJG9wU3RyICs9ICc9JztcbiAgICB2YXIgJG9wRXhwciA9ICdcXCcnICsgJG9wU3RyICsgJ1xcJyc7XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnIGlmICgnICsgKCRzY2hlbWFWYWx1ZSkgKyAnID09PSB1bmRlZmluZWQpICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyBlbHNlIGlmICh0eXBlb2YgJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPSBcXCdzdHJpbmdcXCcpICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgZWxzZSB7ICc7XG4gICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgfVxuICAgIGlmICgkaXNEYXRhRm9ybWF0KSB7XG4gICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJGNvbXBhcmUpICsgJykgJyArICgkdmFsaWQpICsgJyA9IHRydWU7IGVsc2UgeyAnO1xuICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgIH1cbiAgICBvdXQgKz0gJyB2YXIgJyArICgkcmVzdWx0KSArICcgPSAnICsgKCRjb21wYXJlKSArICcoJyArICgkZGF0YSkgKyAnLCAgJztcbiAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWFWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRzY2hlbWEpKTtcbiAgICB9XG4gICAgb3V0ICs9ICcgKTsgaWYgKCcgKyAoJHJlc3VsdCkgKyAnID09PSB1bmRlZmluZWQpICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgaWYgKCcgKyAoJHZhbGlkKSArICcgPT09IHVuZGVmaW5lZCkgJyArICgkdmFsaWQpICsgJyA9ICcgKyAoJHJlc3VsdCkgKyAnICcgKyAoJG9wKTtcbiAgICBpZiAoISRleGNsdXNpdmUpIHtcbiAgICAgIG91dCArPSAnPSc7XG4gICAgfVxuICAgIG91dCArPSAnIDA7JztcbiAgfVxuICBvdXQgKz0gJycgKyAoJGNsb3NpbmdCcmFjZXMpICsgJ2lmICghJyArICgkdmFsaWQpICsgJykgeyAnO1xuICB2YXIgJGVycm9yS2V5d29yZCA9ICRrZXl3b3JkO1xuICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJGVycm9yS2V5d29yZCB8fCAnX2Zvcm1hdExpbWl0JykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBjb21wYXJpc29uOiAnICsgKCRvcEV4cHIpICsgJywgbGltaXQ6ICAnO1xuICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJHNjaGVtYSkpO1xuICAgIH1cbiAgICBvdXQgKz0gJyAsIGV4Y2x1c2l2ZTogJyArICgkZXhjbHVzaXZlKSArICcgfSAnO1xuICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgYmUgJyArICgkb3BTdHIpICsgJyBcIic7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ1xcJyArICcgKyAoJHNjaGVtYVZhbHVlKSArICcgKyBcXCcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRzY2hlbWEpKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnXCJcXCcgJztcbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6ICAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICd2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRzY2hlbWEpKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnICAgICAgICAgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICd9JztcbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfcGF0dGVyblJlcXVpcmVkKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRrZXkgPSAna2V5JyArICRsdmwsXG4gICAgJGlkeCA9ICdpZHgnICsgJGx2bCxcbiAgICAkbWF0Y2hlZCA9ICdwYXR0ZXJuTWF0Y2hlZCcgKyAkbHZsLFxuICAgICRkYXRhUHJvcGVydGllcyA9ICdkYXRhUHJvcGVydGllcycgKyAkbHZsLFxuICAgICRjbG9zaW5nQnJhY2VzID0gJycsXG4gICAgJG93blByb3BlcnRpZXMgPSBpdC5vcHRzLm93blByb3BlcnRpZXM7XG4gIG91dCArPSAndmFyICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyc7XG4gIGlmICgkb3duUHJvcGVydGllcykge1xuICAgIG91dCArPSAnIHZhciAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnID0gdW5kZWZpbmVkOyc7XG4gIH1cbiAgdmFyIGFycjEgPSAkc2NoZW1hO1xuICBpZiAoYXJyMSkge1xuICAgIHZhciAkcFByb3BlcnR5LCBpMSA9IC0xLFxuICAgICAgbDEgPSBhcnIxLmxlbmd0aCAtIDE7XG4gICAgd2hpbGUgKGkxIDwgbDEpIHtcbiAgICAgICRwUHJvcGVydHkgPSBhcnIxW2kxICs9IDFdO1xuICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG1hdGNoZWQpICsgJyA9IGZhbHNlOyAgJztcbiAgICAgIGlmICgkb3duUHJvcGVydGllcykge1xuICAgICAgICBvdXQgKz0gJyAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnID0gJyArICgkZGF0YVByb3BlcnRpZXMpICsgJyB8fCBPYmplY3Qua2V5cygnICsgKCRkYXRhKSArICcpOyBmb3IgKHZhciAnICsgKCRpZHgpICsgJz0wOyAnICsgKCRpZHgpICsgJzwnICsgKCRkYXRhUHJvcGVydGllcykgKyAnLmxlbmd0aDsgJyArICgkaWR4KSArICcrKykgeyB2YXIgJyArICgka2V5KSArICcgPSAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnWycgKyAoJGlkeCkgKyAnXTsgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIGZvciAodmFyICcgKyAoJGtleSkgKyAnIGluICcgKyAoJGRhdGEpICsgJykgeyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgJyArICgkbWF0Y2hlZCkgKyAnID0gJyArIChpdC51c2VQYXR0ZXJuKCRwUHJvcGVydHkpKSArICcudGVzdCgnICsgKCRrZXkpICsgJyk7IGlmICgnICsgKCRtYXRjaGVkKSArICcpIGJyZWFrOyB9ICc7XG4gICAgICB2YXIgJG1pc3NpbmdQYXR0ZXJuID0gaXQudXRpbC5lc2NhcGVRdW90ZXMoJHBQcm9wZXJ0eSk7XG4gICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG1hdGNoZWQpICsgJykgeyAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7ICB2YXIgZXJyID0gICAnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdwYXR0ZXJuUmVxdWlyZWQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IG1pc3NpbmdQYXR0ZXJuOiBcXCcnICsgKCRtaXNzaW5nUGF0dGVybikgKyAnXFwnIH0gJztcbiAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgaGF2ZSBwcm9wZXJ0eSBtYXRjaGluZyBwYXR0ZXJuIFxcXFxcXCcnICsgKCRtaXNzaW5nUGF0dGVybikgKyAnXFxcXFxcJ1xcJyAnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyB9ICAgJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICAgICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIG91dCArPSAnJyArICgkY2xvc2luZ0JyYWNlcyk7XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX3N3aXRjaChpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICB2YXIgJGlmUGFzc2VkID0gJ2lmUGFzc2VkJyArIGl0LmxldmVsLFxuICAgICRjdXJyZW50QmFzZUlkID0gJGl0LmJhc2VJZCxcbiAgICAkc2hvdWxkQ29udGludWU7XG4gIG91dCArPSAndmFyICcgKyAoJGlmUGFzc2VkKSArICc7JztcbiAgdmFyIGFycjEgPSAkc2NoZW1hO1xuICBpZiAoYXJyMSkge1xuICAgIHZhciAkc2NoLCAkY2FzZUluZGV4ID0gLTEsXG4gICAgICBsMSA9IGFycjEubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoJGNhc2VJbmRleCA8IGwxKSB7XG4gICAgICAkc2NoID0gYXJyMVskY2FzZUluZGV4ICs9IDFdO1xuICAgICAgaWYgKCRjYXNlSW5kZXggJiYgISRzaG91bGRDb250aW51ZSkge1xuICAgICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJGlmUGFzc2VkKSArICcpIHsgJztcbiAgICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgfVxuICAgICAgaWYgKCRzY2guaWYgJiYgKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyB0eXBlb2YgJHNjaC5pZiA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoLmlmKS5sZW5ndGggPiAwIDogaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkc2NoLmlmLCBpdC5SVUxFUy5hbGwpKSkge1xuICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkZXJycykgKyAnID0gZXJyb3JzOyAgICc7XG4gICAgICAgIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgICAgICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gdHJ1ZTtcbiAgICAgICAgJGl0LmNyZWF0ZUVycm9ycyA9IGZhbHNlO1xuICAgICAgICAkaXQuc2NoZW1hID0gJHNjaC5pZjtcbiAgICAgICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aCArICdbJyArICRjYXNlSW5kZXggKyAnXS5pZic7XG4gICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGggKyAnLycgKyAkY2FzZUluZGV4ICsgJy9pZic7XG4gICAgICAgIG91dCArPSAnICAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICAgICRpdC5jcmVhdGVFcnJvcnMgPSB0cnVlO1xuICAgICAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSAkd2FzQ29tcG9zaXRlO1xuICAgICAgICBvdXQgKz0gJyAnICsgKCRpZlBhc3NlZCkgKyAnID0gJyArICgkbmV4dFZhbGlkKSArICc7IGlmICgnICsgKCRpZlBhc3NlZCkgKyAnKSB7ICAnO1xuICAgICAgICBpZiAodHlwZW9mICRzY2gudGhlbiA9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICBpZiAoJHNjaC50aGVuID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnc3dpdGNoJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBjYXNlSW5kZXg6ICcgKyAoJGNhc2VJbmRleCkgKyAnIH0gJztcbiAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgcGFzcyBcInN3aXRjaFwiIGtleXdvcmQgdmFsaWRhdGlvblxcJyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHRWYWxpZCkgKyAnID0gJyArICgkc2NoLnRoZW4pICsgJzsgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkaXQuc2NoZW1hID0gJHNjaC50aGVuO1xuICAgICAgICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGggKyAnWycgKyAkY2FzZUluZGV4ICsgJ10udGhlbic7XG4gICAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aCArICcvJyArICRjYXNlSW5kZXggKyAnL3RoZW4nO1xuICAgICAgICAgIG91dCArPSAnICAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyAgfSBlbHNlIHsgIGVycm9ycyA9ICcgKyAoJGVycnMpICsgJzsgaWYgKHZFcnJvcnMgIT09IG51bGwpIHsgaWYgKCcgKyAoJGVycnMpICsgJykgdkVycm9ycy5sZW5ndGggPSAnICsgKCRlcnJzKSArICc7IGVsc2UgdkVycm9ycyA9IG51bGw7IH0gfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgJyArICgkaWZQYXNzZWQpICsgJyA9IHRydWU7ICAnO1xuICAgICAgICBpZiAodHlwZW9mICRzY2gudGhlbiA9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICBpZiAoJHNjaC50aGVuID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnc3dpdGNoJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBjYXNlSW5kZXg6ICcgKyAoJGNhc2VJbmRleCkgKyAnIH0gJztcbiAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgcGFzcyBcInN3aXRjaFwiIGtleXdvcmQgdmFsaWRhdGlvblxcJyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHRWYWxpZCkgKyAnID0gJyArICgkc2NoLnRoZW4pICsgJzsgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkaXQuc2NoZW1hID0gJHNjaC50aGVuO1xuICAgICAgICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGggKyAnWycgKyAkY2FzZUluZGV4ICsgJ10udGhlbic7XG4gICAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aCArICcvJyArICRjYXNlSW5kZXggKyAnL3RoZW4nO1xuICAgICAgICAgIG91dCArPSAnICAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgJHNob3VsZENvbnRpbnVlID0gJHNjaC5jb250aW51ZVxuICAgIH1cbiAgfVxuICBvdXQgKz0gJycgKyAoJGNsb3NpbmdCcmFjZXMpICsgJ3ZhciAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkbmV4dFZhbGlkKSArICc7JztcbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHNlcXVlbmNlcyA9IHt9O1xuXG52YXIgREVGQVVMVFMgPSB7XG4gIHRpbWVzdGFtcDogZnVuY3Rpb24oKSB7IHJldHVybiBEYXRlLm5vdygpOyB9LFxuICBkYXRldGltZTogZnVuY3Rpb24oKSB7IHJldHVybiAobmV3IERhdGUpLnRvSVNPU3RyaW5nKCk7IH0sXG4gIGRhdGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gKG5ldyBEYXRlKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKTsgfSxcbiAgdGltZTogZnVuY3Rpb24oKSB7IHJldHVybiAobmV3IERhdGUpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMTEpOyB9LFxuICByYW5kb206IGZ1bmN0aW9uKCkgeyByZXR1cm4gTWF0aC5yYW5kb20oKTsgfSxcbiAgcmFuZG9taW50OiBmdW5jdGlvbiAoYXJncykge1xuICAgIHZhciBsaW1pdCA9IGFyZ3MgJiYgYXJncy5tYXggfHwgMjtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7IHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBsaW1pdCk7IH07XG4gIH0sXG4gIHNlcTogZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICB2YXIgbmFtZSA9IGFyZ3MgJiYgYXJncy5uYW1lIHx8ICcnO1xuICAgIHNlcXVlbmNlc1tuYW1lXSA9IHNlcXVlbmNlc1tuYW1lXSB8fCAwO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHsgcmV0dXJuIHNlcXVlbmNlc1tuYW1lXSsrOyB9O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZkZ1bmMoYWp2KSB7XG4gIGRlZkZ1bmMuZGVmaW5pdGlvbiA9IHtcbiAgICBjb21waWxlOiBmdW5jdGlvbiAoc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0KSB7XG4gICAgICB2YXIgZnVuY3MgPSB7fTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNjaGVtYSkge1xuICAgICAgICB2YXIgZCA9IHNjaGVtYVtrZXldO1xuICAgICAgICB2YXIgZnVuYyA9IGdldERlZmF1bHQodHlwZW9mIGQgPT0gJ3N0cmluZycgPyBkIDogZC5mdW5jKTtcbiAgICAgICAgZnVuY3Nba2V5XSA9IGZ1bmMubGVuZ3RoID8gZnVuYyhkLmFyZ3MpIDogZnVuYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGl0Lm9wdHMudXNlRGVmYXVsdHMgJiYgIWl0LmNvbXBvc2l0ZVJ1bGVcbiAgICAgICAgICAgICAgPyBhc3NpZ25EZWZhdWx0c1xuICAgICAgICAgICAgICA6IG5vb3A7XG5cbiAgICAgIGZ1bmN0aW9uIGFzc2lnbkRlZmF1bHRzKGRhdGEpIHtcbiAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBzY2hlbWEpe1xuICAgICAgICAgIGlmIChkYXRhW3Byb3BdID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgIHx8IChpdC5vcHRzLnVzZURlZmF1bHRzID09ICdlbXB0eSdcbiAgICAgICAgICAgICYmIChkYXRhW3Byb3BdID09PSBudWxsIHx8IGRhdGFbcHJvcF0gPT09ICcnKSkpXG4gICAgICAgICAgICBkYXRhW3Byb3BdID0gZnVuY3NbcHJvcF0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gbm9vcCgpIHsgcmV0dXJuIHRydWU7IH1cbiAgICB9LFxuICAgIERFRkFVTFRTOiBERUZBVUxUUyxcbiAgICBtZXRhU2NoZW1hOiB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgIHR5cGU6IFsnc3RyaW5nJywgJ29iamVjdCddLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgIHJlcXVpcmVkOiBbJ2Z1bmMnLCAnYXJncyddLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgZnVuYzogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgIGFyZ3M6IHsgdHlwZTogJ29iamVjdCcgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGFqdi5hZGRLZXl3b3JkKCdkeW5hbWljRGVmYXVsdHMnLCBkZWZGdW5jLmRlZmluaXRpb24pO1xuICByZXR1cm4gYWp2O1xuXG4gIGZ1bmN0aW9uIGdldERlZmF1bHQoZCkge1xuICAgIHZhciBkZWYgPSBERUZBVUxUU1tkXTtcbiAgICBpZiAoZGVmKSByZXR1cm4gZGVmO1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBcImR5bmFtaWNEZWZhdWx0c1wiIGtleXdvcmQgcHJvcGVydHkgdmFsdWU6ICcgKyBkKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19mb3JtYXRMaW1pdCcpKCdNYXhpbXVtJyk7XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZm9ybWF0TGltaXQnKSgnTWluaW11bScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgJ2luc3RhbmNlb2YnOiByZXF1aXJlKCcuL2luc3RhbmNlb2YnKSxcbiAgcmFuZ2U6IHJlcXVpcmUoJy4vcmFuZ2UnKSxcbiAgcmVnZXhwOiByZXF1aXJlKCcuL3JlZ2V4cCcpLFxuICAndHlwZW9mJzogcmVxdWlyZSgnLi90eXBlb2YnKSxcbiAgZHluYW1pY0RlZmF1bHRzOiByZXF1aXJlKCcuL2R5bmFtaWNEZWZhdWx0cycpLFxuICBhbGxSZXF1aXJlZDogcmVxdWlyZSgnLi9hbGxSZXF1aXJlZCcpLFxuICBhbnlSZXF1aXJlZDogcmVxdWlyZSgnLi9hbnlSZXF1aXJlZCcpLFxuICBvbmVSZXF1aXJlZDogcmVxdWlyZSgnLi9vbmVSZXF1aXJlZCcpLFxuICBwcm9oaWJpdGVkOiByZXF1aXJlKCcuL3Byb2hpYml0ZWQnKSxcbiAgdW5pcXVlSXRlbVByb3BlcnRpZXM6IHJlcXVpcmUoJy4vdW5pcXVlSXRlbVByb3BlcnRpZXMnKSxcbiAgZGVlcFByb3BlcnRpZXM6IHJlcXVpcmUoJy4vZGVlcFByb3BlcnRpZXMnKSxcbiAgZGVlcFJlcXVpcmVkOiByZXF1aXJlKCcuL2RlZXBSZXF1aXJlZCcpLFxuICBmb3JtYXRNaW5pbXVtOiByZXF1aXJlKCcuL2Zvcm1hdE1pbmltdW0nKSxcbiAgZm9ybWF0TWF4aW11bTogcmVxdWlyZSgnLi9mb3JtYXRNYXhpbXVtJyksXG4gIHBhdHRlcm5SZXF1aXJlZDogcmVxdWlyZSgnLi9wYXR0ZXJuUmVxdWlyZWQnKSxcbiAgJ3N3aXRjaCc6IHJlcXVpcmUoJy4vc3dpdGNoJyksXG4gIHNlbGVjdDogcmVxdWlyZSgnLi9zZWxlY3QnKSxcbiAgdHJhbnNmb3JtOiByZXF1aXJlKCcuL3RyYW5zZm9ybScpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ09OU1RSVUNUT1JTID0ge1xuICBPYmplY3Q6IE9iamVjdCxcbiAgQXJyYXk6IEFycmF5LFxuICBGdW5jdGlvbjogRnVuY3Rpb24sXG4gIE51bWJlcjogTnVtYmVyLFxuICBTdHJpbmc6IFN0cmluZyxcbiAgRGF0ZTogRGF0ZSxcbiAgUmVnRXhwOiBSZWdFeHBcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmRnVuYyhhanYpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHR5cGVvZiBCdWZmZXIgIT0gJ3VuZGVmaW5lZCcpXG4gICAgQ09OU1RSVUNUT1JTLkJ1ZmZlciA9IEJ1ZmZlcjtcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAodHlwZW9mIFByb21pc2UgIT0gJ3VuZGVmaW5lZCcpXG4gICAgQ09OU1RSVUNUT1JTLlByb21pc2UgPSBQcm9taXNlO1xuXG4gIGRlZkZ1bmMuZGVmaW5pdGlvbiA9IHtcbiAgICBjb21waWxlOiBmdW5jdGlvbiAoc2NoZW1hKSB7XG4gICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgQ29uc3RydWN0b3IgPSBnZXRDb25zdHJ1Y3RvcihzY2hlbWEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICByZXR1cm4gZGF0YSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgY29uc3RydWN0b3JzID0gc2NoZW1hLm1hcChnZXRDb25zdHJ1Y3Rvcik7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgZm9yICh2YXIgaT0wOyBpPGNvbnN0cnVjdG9ycy5sZW5ndGg7IGkrKylcbiAgICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yc1tpXSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG4gICAgfSxcbiAgICBDT05TVFJVQ1RPUlM6IENPTlNUUlVDVE9SUyxcbiAgICBtZXRhU2NoZW1hOiB7XG4gICAgICBhbnlPZjogW1xuICAgICAgICB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIGl0ZW1zOiB7IHR5cGU6ICdzdHJpbmcnIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgfTtcblxuICBhanYuYWRkS2V5d29yZCgnaW5zdGFuY2VvZicsIGRlZkZ1bmMuZGVmaW5pdGlvbik7XG4gIHJldHVybiBhanY7XG5cbiAgZnVuY3Rpb24gZ2V0Q29uc3RydWN0b3IoYykge1xuICAgIHZhciBDb25zdHJ1Y3RvciA9IENPTlNUUlVDVE9SU1tjXTtcbiAgICBpZiAoQ29uc3RydWN0b3IpIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgXCJpbnN0YW5jZW9mXCIga2V5d29yZCB2YWx1ZSAnICsgYyk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmRnVuYyhhanYpIHtcbiAgZGVmRnVuYy5kZWZpbml0aW9uID0ge1xuICAgIHR5cGU6ICdvYmplY3QnLFxuICAgIG1hY3JvOiBmdW5jdGlvbiAoc2NoZW1hKSB7XG4gICAgICBpZiAoc2NoZW1hLmxlbmd0aCA9PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChzY2hlbWEubGVuZ3RoID09IDEpIHJldHVybiB7cmVxdWlyZWQ6IHNjaGVtYX07XG4gICAgICB2YXIgc2NoZW1hcyA9IHNjaGVtYS5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgcmV0dXJuIHtyZXF1aXJlZDogW3Byb3BdfTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtvbmVPZjogc2NoZW1hc307XG4gICAgfSxcbiAgICBtZXRhU2NoZW1hOiB7XG4gICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgaXRlbXM6IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZydcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgYWp2LmFkZEtleXdvcmQoJ29uZVJlcXVpcmVkJywgZGVmRnVuYy5kZWZpbml0aW9uKTtcbiAgcmV0dXJuIGFqdjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmRnVuYyhhanYpIHtcbiAgZGVmRnVuYy5kZWZpbml0aW9uID0ge1xuICAgIHR5cGU6ICdvYmplY3QnLFxuICAgIGlubGluZTogcmVxdWlyZSgnLi9kb3Rqcy9wYXR0ZXJuUmVxdWlyZWQnKSxcbiAgICBzdGF0ZW1lbnRzOiB0cnVlLFxuICAgIGVycm9yczogJ2Z1bGwnLFxuICAgIG1ldGFTY2hlbWE6IHtcbiAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICBpdGVtczoge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZm9ybWF0OiAncmVnZXgnXG4gICAgICB9LFxuICAgICAgdW5pcXVlSXRlbXM6IHRydWVcbiAgICB9XG4gIH07XG5cbiAgYWp2LmFkZEtleXdvcmQoJ3BhdHRlcm5SZXF1aXJlZCcsIGRlZkZ1bmMuZGVmaW5pdGlvbik7XG4gIHJldHVybiBhanY7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZkZ1bmMoYWp2KSB7XG4gIGRlZkZ1bmMuZGVmaW5pdGlvbiA9IHtcbiAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICBtYWNybzogZnVuY3Rpb24gKHNjaGVtYSkge1xuICAgICAgaWYgKHNjaGVtYS5sZW5ndGggPT0gMCkgcmV0dXJuIHRydWU7XG4gICAgICBpZiAoc2NoZW1hLmxlbmd0aCA9PSAxKSByZXR1cm4ge25vdDoge3JlcXVpcmVkOiBzY2hlbWF9fTtcbiAgICAgIHZhciBzY2hlbWFzID0gc2NoZW1hLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICByZXR1cm4ge3JlcXVpcmVkOiBbcHJvcF19O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge25vdDoge2FueU9mOiBzY2hlbWFzfX07XG4gICAgfSxcbiAgICBtZXRhU2NoZW1hOiB7XG4gICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgaXRlbXM6IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZydcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgYWp2LmFkZEtleXdvcmQoJ3Byb2hpYml0ZWQnLCBkZWZGdW5jLmRlZmluaXRpb24pO1xuICByZXR1cm4gYWp2O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZGdW5jKGFqdikge1xuICBkZWZGdW5jLmRlZmluaXRpb24gPSB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgbWFjcm86IGZ1bmN0aW9uIChzY2hlbWEsIHBhcmVudFNjaGVtYSkge1xuICAgICAgdmFyIG1pbiA9IHNjaGVtYVswXVxuICAgICAgICAsIG1heCA9IHNjaGVtYVsxXVxuICAgICAgICAsIGV4Y2x1c2l2ZSA9IHBhcmVudFNjaGVtYS5leGNsdXNpdmVSYW5nZTtcblxuICAgICAgdmFsaWRhdGVSYW5nZVNjaGVtYShtaW4sIG1heCwgZXhjbHVzaXZlKTtcblxuICAgICAgcmV0dXJuIGV4Y2x1c2l2ZSA9PT0gdHJ1ZVxuICAgICAgICAgICAgICA/IHtleGNsdXNpdmVNaW5pbXVtOiBtaW4sIGV4Y2x1c2l2ZU1heGltdW06IG1heH1cbiAgICAgICAgICAgICAgOiB7bWluaW11bTogbWluLCBtYXhpbXVtOiBtYXh9O1xuICAgIH0sXG4gICAgbWV0YVNjaGVtYToge1xuICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgIG1pbkl0ZW1zOiAyLFxuICAgICAgbWF4SXRlbXM6IDIsXG4gICAgICBpdGVtczogeyB0eXBlOiAnbnVtYmVyJyB9XG4gICAgfVxuICB9O1xuXG4gIGFqdi5hZGRLZXl3b3JkKCdyYW5nZScsIGRlZkZ1bmMuZGVmaW5pdGlvbik7XG4gIGFqdi5hZGRLZXl3b3JkKCdleGNsdXNpdmVSYW5nZScpO1xuICByZXR1cm4gYWp2O1xuXG4gIGZ1bmN0aW9uIHZhbGlkYXRlUmFuZ2VTY2hlbWEobWluLCBtYXgsIGV4Y2x1c2l2ZSkge1xuICAgIGlmIChleGNsdXNpdmUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZXhjbHVzaXZlICE9ICdib29sZWFuJylcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzY2hlbWEgZm9yIGV4Y2x1c2l2ZVJhbmdlIGtleXdvcmQsIHNob3VsZCBiZSBib29sZWFuJyk7XG5cbiAgICBpZiAobWluID4gbWF4IHx8IChleGNsdXNpdmUgJiYgbWluID09IG1heCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGFyZSBubyBudW1iZXJzIGluIHJhbmdlJyk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmRnVuYyhhanYpIHtcbiAgZGVmRnVuYy5kZWZpbml0aW9uID0ge1xuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGlubGluZTogZnVuY3Rpb24gKGl0LCBrZXl3b3JkLCBzY2hlbWEpIHtcbiAgICAgIHJldHVybiBnZXRSZWdFeHAoKSArICcudGVzdChkYXRhJyArIChpdC5kYXRhTGV2ZWwgfHwgJycpICsgJyknO1xuXG4gICAgICBmdW5jdGlvbiBnZXRSZWdFeHAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gJ29iamVjdCcpXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChzY2hlbWEucGF0dGVybiwgc2NoZW1hLmZsYWdzKTtcblxuICAgICAgICAgIHZhciByeCA9IHNjaGVtYS5tYXRjaCgvXlxcLyguKilcXC8oW2dpbXV5XSopJC8pO1xuICAgICAgICAgIGlmIChyeCkgcmV0dXJuIG5ldyBSZWdFeHAocnhbMV0sIHJ4WzJdKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBwYXJzZSBzdHJpbmcgaW50byBSZWdFeHAnKTtcbiAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcigncmVndWxhciBleHByZXNzaW9uJywgc2NoZW1hLCAnaXMgaW52YWxpZCcpO1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG1ldGFTY2hlbWE6IHtcbiAgICAgIHR5cGU6IFsnc3RyaW5nJywgJ29iamVjdCddLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBwYXR0ZXJuOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIGZsYWdzOiB7IHR5cGU6ICdzdHJpbmcnIH1cbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogWydwYXR0ZXJuJ10sXG4gICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbiAgICB9XG4gIH07XG5cbiAgYWp2LmFkZEtleXdvcmQoJ3JlZ2V4cCcsIGRlZkZ1bmMuZGVmaW5pdGlvbik7XG4gIHJldHVybiBhanY7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vX3V0aWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZGdW5jKGFqdikge1xuICBpZiAoIWFqdi5fb3B0cy4kZGF0YSkge1xuICAgIGNvbnNvbGUud2Fybigna2V5d29yZCBzZWxlY3QgcmVxdWlyZXMgJGRhdGEgb3B0aW9uJyk7XG4gICAgcmV0dXJuIGFqdjtcbiAgfVxuICB2YXIgbWV0YVNjaGVtYVJlZiA9IHV0aWwubWV0YVNjaGVtYVJlZihhanYpO1xuICB2YXIgY29tcGlsZWRDYXNlU2NoZW1hcyA9IFtdO1xuXG4gIGRlZkZ1bmMuZGVmaW5pdGlvbiA9IHtcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24gdihzY2hlbWEsIGRhdGEsIHBhcmVudFNjaGVtYSkge1xuICAgICAgaWYgKHBhcmVudFNjaGVtYS5zZWxlY3RDYXNlcyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleXdvcmQgXCJzZWxlY3RDYXNlc1wiIGlzIGFic2VudCcpO1xuICAgICAgdmFyIGNvbXBpbGVkID0gZ2V0Q29tcGlsZWRTY2hlbWFzKHBhcmVudFNjaGVtYSwgZmFsc2UpO1xuICAgICAgdmFyIHZhbGlkYXRlID0gY29tcGlsZWQuY2FzZXNbc2NoZW1hXTtcbiAgICAgIGlmICh2YWxpZGF0ZSA9PT0gdW5kZWZpbmVkKSB2YWxpZGF0ZSA9IGNvbXBpbGVkLmRlZmF1bHQ7XG4gICAgICBpZiAodHlwZW9mIHZhbGlkYXRlID09ICdib29sZWFuJykgcmV0dXJuIHZhbGlkYXRlO1xuICAgICAgdmFyIHZhbGlkID0gdmFsaWRhdGUoZGF0YSk7XG4gICAgICBpZiAoIXZhbGlkKSB2LmVycm9ycyA9IHZhbGlkYXRlLmVycm9ycztcbiAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9LFxuICAgICRkYXRhOiB0cnVlLFxuICAgIG1ldGFTY2hlbWE6IHsgdHlwZTogWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnbnVsbCddIH1cbiAgfTtcblxuICBhanYuYWRkS2V5d29yZCgnc2VsZWN0JywgZGVmRnVuYy5kZWZpbml0aW9uKTtcbiAgYWp2LmFkZEtleXdvcmQoJ3NlbGVjdENhc2VzJywge1xuICAgIGNvbXBpbGU6IGZ1bmN0aW9uIChzY2hlbWFzLCBwYXJlbnRTY2hlbWEpIHtcbiAgICAgIHZhciBjb21waWxlZCA9IGdldENvbXBpbGVkU2NoZW1hcyhwYXJlbnRTY2hlbWEpO1xuICAgICAgZm9yICh2YXIgdmFsdWUgaW4gc2NoZW1hcylcbiAgICAgICAgY29tcGlsZWQuY2FzZXNbdmFsdWVdID0gY29tcGlsZU9yQm9vbGVhbihzY2hlbWFzW3ZhbHVlXSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9O1xuICAgIH0sXG4gICAgdmFsaWQ6IHRydWUsXG4gICAgbWV0YVNjaGVtYToge1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogbWV0YVNjaGVtYVJlZlxuICAgIH1cbiAgfSk7XG4gIGFqdi5hZGRLZXl3b3JkKCdzZWxlY3REZWZhdWx0Jywge1xuICAgIGNvbXBpbGU6IGZ1bmN0aW9uIChzY2hlbWEsIHBhcmVudFNjaGVtYSkge1xuICAgICAgdmFyIGNvbXBpbGVkID0gZ2V0Q29tcGlsZWRTY2hlbWFzKHBhcmVudFNjaGVtYSk7XG4gICAgICBjb21waWxlZC5kZWZhdWx0ID0gY29tcGlsZU9yQm9vbGVhbihzY2hlbWEpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfTtcbiAgICB9LFxuICAgIHZhbGlkOiB0cnVlLFxuICAgIG1ldGFTY2hlbWE6IG1ldGFTY2hlbWFSZWZcbiAgfSk7XG4gIHJldHVybiBhanY7XG5cblxuICBmdW5jdGlvbiBnZXRDb21waWxlZFNjaGVtYXMocGFyZW50U2NoZW1hLCBjcmVhdGUpIHtcbiAgICB2YXIgY29tcGlsZWQ7XG4gICAgY29tcGlsZWRDYXNlU2NoZW1hcy5zb21lKGZ1bmN0aW9uIChjKSB7XG4gICAgICBpZiAoYy5wYXJlbnRTY2hlbWEgPT09IHBhcmVudFNjaGVtYSkge1xuICAgICAgICBjb21waWxlZCA9IGM7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghY29tcGlsZWQgJiYgY3JlYXRlICE9PSBmYWxzZSkge1xuICAgICAgY29tcGlsZWQgPSB7XG4gICAgICAgIHBhcmVudFNjaGVtYTogcGFyZW50U2NoZW1hLFxuICAgICAgICBjYXNlczoge30sXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH07XG4gICAgICBjb21waWxlZENhc2VTY2hlbWFzLnB1c2goY29tcGlsZWQpO1xuICAgIH1cbiAgICByZXR1cm4gY29tcGlsZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBjb21waWxlT3JCb29sZWFuKHNjaGVtYSkge1xuICAgIHJldHVybiB0eXBlb2Ygc2NoZW1hID09ICdib29sZWFuJ1xuICAgICAgICAgICAgPyBzY2hlbWFcbiAgICAgICAgICAgIDogYWp2LmNvbXBpbGUoc2NoZW1hKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWwgPSByZXF1aXJlKCcuL191dGlsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmRnVuYyhhanYpIHtcbiAgaWYgKGFqdi5SVUxFUy5rZXl3b3Jkcy5zd2l0Y2ggJiYgYWp2LlJVTEVTLmtleXdvcmRzLmlmKSByZXR1cm47XG5cbiAgdmFyIG1ldGFTY2hlbWFSZWYgPSB1dGlsLm1ldGFTY2hlbWFSZWYoYWp2KTtcblxuICBkZWZGdW5jLmRlZmluaXRpb24gPSB7XG4gICAgaW5saW5lOiByZXF1aXJlKCcuL2RvdGpzL3N3aXRjaCcpLFxuICAgIHN0YXRlbWVudHM6IHRydWUsXG4gICAgZXJyb3JzOiAnZnVsbCcsXG4gICAgbWV0YVNjaGVtYToge1xuICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgIGl0ZW1zOiB7XG4gICAgICAgIHJlcXVpcmVkOiBbICd0aGVuJyBdLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgJ2lmJzogbWV0YVNjaGVtYVJlZixcbiAgICAgICAgICAndGhlbic6IHtcbiAgICAgICAgICAgIGFueU9mOiBbXG4gICAgICAgICAgICAgIHsgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gICAgICAgICAgICAgIG1ldGFTY2hlbWFSZWZcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgICdjb250aW51ZSc6IHsgdHlwZTogJ2Jvb2xlYW4nIH1cbiAgICAgICAgfSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICBkZXBlbmRlbmNpZXM6IHtcbiAgICAgICAgICAnY29udGludWUnOiBbICdpZicgXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGFqdi5hZGRLZXl3b3JkKCdzd2l0Y2gnLCBkZWZGdW5jLmRlZmluaXRpb24pO1xuICByZXR1cm4gYWp2O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZGdW5jIChhanYpIHtcbiAgdmFyIHRyYW5zZm9ybSA9IHtcbiAgICB0cmltTGVmdDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvXltcXHNdKy8sICcnKTtcbiAgICB9LFxuICAgIHRyaW1SaWdodDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvW1xcc10rJC8sICcnKTtcbiAgICB9LFxuICAgIHRyaW06IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRyaW0oKTtcbiAgICB9LFxuICAgIHRvTG93ZXJDYXNlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgIH0sXG4gICAgdG9VcHBlckNhc2U6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvVXBwZXJDYXNlKCk7XG4gICAgfSxcbiAgICB0b0VudW1DYXNlOiBmdW5jdGlvbiAodmFsdWUsIGNmZykge1xuICAgICAgcmV0dXJuIGNmZy5oYXNoW21ha2VIYXNoVGFibGVLZXkodmFsdWUpXSB8fCB2YWx1ZTtcbiAgICB9XG4gIH07XG5cbiAgZGVmRnVuYy5kZWZpbml0aW9uID0ge1xuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGVycm9yczogZmFsc2UsXG4gICAgbW9kaWZ5aW5nOiB0cnVlLFxuICAgIHZhbGlkOiB0cnVlLFxuICAgIGNvbXBpbGU6IGZ1bmN0aW9uIChzY2hlbWEsIHBhcmVudFNjaGVtYSkge1xuICAgICAgdmFyIGNmZztcblxuICAgICAgaWYgKHNjaGVtYS5pbmRleE9mKCd0b0VudW1DYXNlJykgIT09IC0xKSB7XG4gICAgICAgIC8vIGJ1aWxkIGhhc2ggdGFibGUgdG8gZW51bSB2YWx1ZXNcbiAgICAgICAgY2ZnID0ge2hhc2g6IHt9fTtcblxuICAgICAgICAvLyByZXF1aXJlcyBgZW51bWAgaW4gc2NoZW1hXG4gICAgICAgIGlmICghcGFyZW50U2NoZW1hLmVudW0pXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGVudW0uIFRvIHVzZSBgdHJhbnNmb3JtOltcInRvRW51bUNhc2VcIl1gLCBgZW51bTpbLi4uXWAgaXMgcmVxdWlyZWQuJyk7XG4gICAgICAgIGZvciAodmFyIGkgPSBwYXJlbnRTY2hlbWEuZW51bS5sZW5ndGg7IGktLTsgaSkge1xuICAgICAgICAgIHZhciB2ID0gcGFyZW50U2NoZW1hLmVudW1baV07XG4gICAgICAgICAgaWYgKHR5cGVvZiB2ICE9PSAnc3RyaW5nJykgY29udGludWU7XG4gICAgICAgICAgdmFyIGsgPSBtYWtlSGFzaFRhYmxlS2V5KHYpO1xuICAgICAgICAgIC8vIHJlcXVpcmVzIGFsbCBgZW51bWAgdmFsdWVzIGhhdmUgdW5pcXVlIGtleXNcbiAgICAgICAgICBpZiAoY2ZnLmhhc2hba10pXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZW51bSB1bmlxdWVuZXNzLiBUbyB1c2UgYHRyYW5zZm9ybTpbXCJ0b0VudW1DYXNlXCJdYCwgYWxsIHZhbHVlcyBtdXN0IGJlIHVuaXF1ZSB3aGVuIGNhc2UgaW5zZW5zaXRpdmUuJyk7XG4gICAgICAgICAgY2ZnLmhhc2hba10gPSB2O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZGF0YSwgZGF0YVBhdGgsIG9iamVjdCwga2V5KSB7XG4gICAgICAgIC8vIHNraXAgaWYgdmFsdWUgb25seVxuICAgICAgICBpZiAoIW9iamVjdCkgcmV0dXJuO1xuXG4gICAgICAgIC8vIGFwcGx5IHRyYW5zZm9ybSBpbiBvcmRlciBwcm92aWRlZFxuICAgICAgICBmb3IgKHZhciBqID0gMCwgbCA9IHNjaGVtYS5sZW5ndGg7IGogPCBsOyBqKyspXG4gICAgICAgICAgZGF0YSA9IHRyYW5zZm9ybVtzY2hlbWFbal1dKGRhdGEsIGNmZyk7XG5cbiAgICAgICAgb2JqZWN0W2tleV0gPSBkYXRhO1xuICAgICAgfTtcbiAgICB9LFxuICAgIG1ldGFTY2hlbWE6IHtcbiAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICBpdGVtczoge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZW51bTogW1xuICAgICAgICAgICd0cmltTGVmdCcsICd0cmltUmlnaHQnLCAndHJpbScsXG4gICAgICAgICAgJ3RvTG93ZXJDYXNlJywgJ3RvVXBwZXJDYXNlJywgJ3RvRW51bUNhc2UnXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgYWp2LmFkZEtleXdvcmQoJ3RyYW5zZm9ybScsIGRlZkZ1bmMuZGVmaW5pdGlvbik7XG4gIHJldHVybiBhanY7XG5cbiAgZnVuY3Rpb24gbWFrZUhhc2hUYWJsZUtleSAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEtOT1dOX1RZUEVTID0gWyd1bmRlZmluZWQnLCAnc3RyaW5nJywgJ251bWJlcicsICdvYmplY3QnLCAnZnVuY3Rpb24nLCAnYm9vbGVhbicsICdzeW1ib2wnXTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZGdW5jKGFqdikge1xuICBkZWZGdW5jLmRlZmluaXRpb24gPSB7XG4gICAgaW5saW5lOiBmdW5jdGlvbiAoaXQsIGtleXdvcmQsIHNjaGVtYSkge1xuICAgICAgdmFyIGRhdGEgPSAnZGF0YScgKyAoaXQuZGF0YUxldmVsIHx8ICcnKTtcbiAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09ICdzdHJpbmcnKSByZXR1cm4gJ3R5cGVvZiAnICsgZGF0YSArICcgPT0gXCInICsgc2NoZW1hICsgJ1wiJztcbiAgICAgIHNjaGVtYSA9ICd2YWxpZGF0ZS5zY2hlbWEnICsgaXQuc2NoZW1hUGF0aCArICcuJyArIGtleXdvcmQ7XG4gICAgICByZXR1cm4gc2NoZW1hICsgJy5pbmRleE9mKHR5cGVvZiAnICsgZGF0YSArICcpID49IDAnO1xuICAgIH0sXG4gICAgbWV0YVNjaGVtYToge1xuICAgICAgYW55T2Y6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIGVudW06IEtOT1dOX1RZUEVTXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGVudW06IEtOT1dOX1RZUEVTXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICB9O1xuXG4gIGFqdi5hZGRLZXl3b3JkKCd0eXBlb2YnLCBkZWZGdW5jLmRlZmluaXRpb24pO1xuICByZXR1cm4gYWp2O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFNDQUxBUl9UWVBFUyA9IFsnbnVtYmVyJywgJ2ludGVnZXInLCAnc3RyaW5nJywgJ2Jvb2xlYW4nLCAnbnVsbCddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZkZ1bmMoYWp2KSB7XG4gIGRlZkZ1bmMuZGVmaW5pdGlvbiA9IHtcbiAgICB0eXBlOiAnYXJyYXknLFxuICAgIGNvbXBpbGU6IGZ1bmN0aW9uKGtleXMsIHBhcmVudFNjaGVtYSwgaXQpIHtcbiAgICAgIHZhciBlcXVhbCA9IGl0LnV0aWwuZXF1YWw7XG4gICAgICB2YXIgc2NhbGFyID0gZ2V0U2NhbGFyS2V5cyhrZXlzLCBwYXJlbnRTY2hlbWEpO1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICBpZiAoZGF0YS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgZm9yICh2YXIgaz0wOyBrIDwga2V5cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgdmFyIGksIGtleSA9IGtleXNba107XG4gICAgICAgICAgICBpZiAoc2NhbGFyW2tdKSB7XG4gICAgICAgICAgICAgIHZhciBoYXNoID0ge307XG4gICAgICAgICAgICAgIGZvciAoaSA9IGRhdGEubGVuZ3RoOyBpLS07KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhW2ldIHx8IHR5cGVvZiBkYXRhW2ldICE9ICdvYmplY3QnKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB2YXIgcHJvcCA9IGRhdGFbaV1ba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAocHJvcCAmJiB0eXBlb2YgcHJvcCA9PSAnb2JqZWN0JykgY29udGludWU7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wID09ICdzdHJpbmcnKSBwcm9wID0gJ1wiJyArIHByb3A7XG4gICAgICAgICAgICAgICAgaWYgKGhhc2hbcHJvcF0pIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBoYXNoW3Byb3BdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZm9yIChpID0gZGF0YS5sZW5ndGg7IGktLTspIHtcbiAgICAgICAgICAgICAgICBpZiAoIWRhdGFbaV0gfHwgdHlwZW9mIGRhdGFbaV0gIT0gJ29iamVjdCcpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSBpOyBqLS07KSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZGF0YVtqXSAmJiB0eXBlb2YgZGF0YVtqXSA9PSAnb2JqZWN0JyAmJiBlcXVhbChkYXRhW2ldW2tleV0sIGRhdGFbal1ba2V5XSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgIH0sXG4gICAgbWV0YVNjaGVtYToge1xuICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgIGl0ZW1zOiB7dHlwZTogJ3N0cmluZyd9XG4gICAgfVxuICB9O1xuXG4gIGFqdi5hZGRLZXl3b3JkKCd1bmlxdWVJdGVtUHJvcGVydGllcycsIGRlZkZ1bmMuZGVmaW5pdGlvbik7XG4gIHJldHVybiBhanY7XG59O1xuXG5cbmZ1bmN0aW9uIGdldFNjYWxhcktleXMoa2V5cywgc2NoZW1hKSB7XG4gIHJldHVybiBrZXlzLm1hcChmdW5jdGlvbihrZXkpIHtcbiAgICB2YXIgcHJvcGVydGllcyA9IHNjaGVtYS5pdGVtcyAmJiBzY2hlbWEuaXRlbXMucHJvcGVydGllcztcbiAgICB2YXIgcHJvcFR5cGUgPSBwcm9wZXJ0aWVzICYmIHByb3BlcnRpZXNba2V5XSAmJiBwcm9wZXJ0aWVzW2tleV0udHlwZTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwcm9wVHlwZSlcbiAgICAgICAgICAgID8gcHJvcFR5cGUuaW5kZXhPZignb2JqZWN0JykgPCAwICYmIHByb3BUeXBlLmluZGV4T2YoJ2FycmF5JykgPCAwXG4gICAgICAgICAgICA6IFNDQUxBUl9UWVBFUy5pbmRleE9mKHByb3BUeXBlKSA+PSAwO1xuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNvbXBpbGVTY2hlbWEgPSByZXF1aXJlKCcuL2NvbXBpbGUnKVxuICAsIHJlc29sdmUgPSByZXF1aXJlKCcuL2NvbXBpbGUvcmVzb2x2ZScpXG4gICwgQ2FjaGUgPSByZXF1aXJlKCcuL2NhY2hlJylcbiAgLCBTY2hlbWFPYmplY3QgPSByZXF1aXJlKCcuL2NvbXBpbGUvc2NoZW1hX29iaicpXG4gICwgc3RhYmxlU3RyaW5naWZ5ID0gcmVxdWlyZSgnZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnknKVxuICAsIGZvcm1hdHMgPSByZXF1aXJlKCcuL2NvbXBpbGUvZm9ybWF0cycpXG4gICwgcnVsZXMgPSByZXF1aXJlKCcuL2NvbXBpbGUvcnVsZXMnKVxuICAsICRkYXRhTWV0YVNjaGVtYSA9IHJlcXVpcmUoJy4vZGF0YScpXG4gICwgdXRpbCA9IHJlcXVpcmUoJy4vY29tcGlsZS91dGlsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gQWp2O1xuXG5BanYucHJvdG90eXBlLnZhbGlkYXRlID0gdmFsaWRhdGU7XG5BanYucHJvdG90eXBlLmNvbXBpbGUgPSBjb21waWxlO1xuQWp2LnByb3RvdHlwZS5hZGRTY2hlbWEgPSBhZGRTY2hlbWE7XG5BanYucHJvdG90eXBlLmFkZE1ldGFTY2hlbWEgPSBhZGRNZXRhU2NoZW1hO1xuQWp2LnByb3RvdHlwZS52YWxpZGF0ZVNjaGVtYSA9IHZhbGlkYXRlU2NoZW1hO1xuQWp2LnByb3RvdHlwZS5nZXRTY2hlbWEgPSBnZXRTY2hlbWE7XG5BanYucHJvdG90eXBlLnJlbW92ZVNjaGVtYSA9IHJlbW92ZVNjaGVtYTtcbkFqdi5wcm90b3R5cGUuYWRkRm9ybWF0ID0gYWRkRm9ybWF0O1xuQWp2LnByb3RvdHlwZS5lcnJvcnNUZXh0ID0gZXJyb3JzVGV4dDtcblxuQWp2LnByb3RvdHlwZS5fYWRkU2NoZW1hID0gX2FkZFNjaGVtYTtcbkFqdi5wcm90b3R5cGUuX2NvbXBpbGUgPSBfY29tcGlsZTtcblxuQWp2LnByb3RvdHlwZS5jb21waWxlQXN5bmMgPSByZXF1aXJlKCcuL2NvbXBpbGUvYXN5bmMnKTtcbnZhciBjdXN0b21LZXl3b3JkID0gcmVxdWlyZSgnLi9rZXl3b3JkJyk7XG5BanYucHJvdG90eXBlLmFkZEtleXdvcmQgPSBjdXN0b21LZXl3b3JkLmFkZDtcbkFqdi5wcm90b3R5cGUuZ2V0S2V5d29yZCA9IGN1c3RvbUtleXdvcmQuZ2V0O1xuQWp2LnByb3RvdHlwZS5yZW1vdmVLZXl3b3JkID0gY3VzdG9tS2V5d29yZC5yZW1vdmU7XG5BanYucHJvdG90eXBlLnZhbGlkYXRlS2V5d29yZCA9IGN1c3RvbUtleXdvcmQudmFsaWRhdGU7XG5cbnZhciBlcnJvckNsYXNzZXMgPSByZXF1aXJlKCcuL2NvbXBpbGUvZXJyb3JfY2xhc3NlcycpO1xuQWp2LlZhbGlkYXRpb25FcnJvciA9IGVycm9yQ2xhc3Nlcy5WYWxpZGF0aW9uO1xuQWp2Lk1pc3NpbmdSZWZFcnJvciA9IGVycm9yQ2xhc3Nlcy5NaXNzaW5nUmVmO1xuQWp2LiRkYXRhTWV0YVNjaGVtYSA9ICRkYXRhTWV0YVNjaGVtYTtcblxudmFyIE1FVEFfU0NIRU1BX0lEID0gJ2h0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hJztcblxudmFyIE1FVEFfSUdOT1JFX09QVElPTlMgPSBbICdyZW1vdmVBZGRpdGlvbmFsJywgJ3VzZURlZmF1bHRzJywgJ2NvZXJjZVR5cGVzJywgJ3N0cmljdERlZmF1bHRzJyBdO1xudmFyIE1FVEFfU1VQUE9SVF9EQVRBID0gWycvcHJvcGVydGllcyddO1xuXG4vKipcbiAqIENyZWF0ZXMgdmFsaWRhdG9yIGluc3RhbmNlLlxuICogVXNhZ2U6IGBBanYob3B0cylgXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBvcHRpb25hbCBvcHRpb25zXG4gKiBAcmV0dXJuIHtPYmplY3R9IGFqdiBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBBanYob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQWp2KSkgcmV0dXJuIG5ldyBBanYob3B0cyk7XG4gIG9wdHMgPSB0aGlzLl9vcHRzID0gdXRpbC5jb3B5KG9wdHMpIHx8IHt9O1xuICBzZXRMb2dnZXIodGhpcyk7XG4gIHRoaXMuX3NjaGVtYXMgPSB7fTtcbiAgdGhpcy5fcmVmcyA9IHt9O1xuICB0aGlzLl9mcmFnbWVudHMgPSB7fTtcbiAgdGhpcy5fZm9ybWF0cyA9IGZvcm1hdHMob3B0cy5mb3JtYXQpO1xuXG4gIHRoaXMuX2NhY2hlID0gb3B0cy5jYWNoZSB8fCBuZXcgQ2FjaGU7XG4gIHRoaXMuX2xvYWRpbmdTY2hlbWFzID0ge307XG4gIHRoaXMuX2NvbXBpbGF0aW9ucyA9IFtdO1xuICB0aGlzLlJVTEVTID0gcnVsZXMoKTtcbiAgdGhpcy5fZ2V0SWQgPSBjaG9vc2VHZXRJZChvcHRzKTtcblxuICBvcHRzLmxvb3BSZXF1aXJlZCA9IG9wdHMubG9vcFJlcXVpcmVkIHx8IEluZmluaXR5O1xuICBpZiAob3B0cy5lcnJvckRhdGFQYXRoID09ICdwcm9wZXJ0eScpIG9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSA9IHRydWU7XG4gIGlmIChvcHRzLnNlcmlhbGl6ZSA9PT0gdW5kZWZpbmVkKSBvcHRzLnNlcmlhbGl6ZSA9IHN0YWJsZVN0cmluZ2lmeTtcbiAgdGhpcy5fbWV0YU9wdHMgPSBnZXRNZXRhU2NoZW1hT3B0aW9ucyh0aGlzKTtcblxuICBpZiAob3B0cy5mb3JtYXRzKSBhZGRJbml0aWFsRm9ybWF0cyh0aGlzKTtcbiAgaWYgKG9wdHMua2V5d29yZHMpIGFkZEluaXRpYWxLZXl3b3Jkcyh0aGlzKTtcbiAgYWRkRGVmYXVsdE1ldGFTY2hlbWEodGhpcyk7XG4gIGlmICh0eXBlb2Ygb3B0cy5tZXRhID09ICdvYmplY3QnKSB0aGlzLmFkZE1ldGFTY2hlbWEob3B0cy5tZXRhKTtcbiAgaWYgKG9wdHMubnVsbGFibGUpIHRoaXMuYWRkS2V5d29yZCgnbnVsbGFibGUnLCB7bWV0YVNjaGVtYToge3R5cGU6ICdib29sZWFuJ319KTtcbiAgYWRkSW5pdGlhbFNjaGVtYXModGhpcyk7XG59XG5cblxuXG4vKipcbiAqIFZhbGlkYXRlIGRhdGEgdXNpbmcgc2NoZW1hXG4gKiBTY2hlbWEgd2lsbCBiZSBjb21waWxlZCBhbmQgY2FjaGVkICh1c2luZyBzZXJpYWxpemVkIEpTT04gYXMga2V5LiBbZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnldKGh0dHBzOi8vZ2l0aHViLmNvbS9lcG9iZXJlemtpbi9mYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeSkgaXMgdXNlZCB0byBzZXJpYWxpemUuXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtICB7U3RyaW5nfE9iamVjdH0gc2NoZW1hS2V5UmVmIGtleSwgcmVmIG9yIHNjaGVtYSBvYmplY3RcbiAqIEBwYXJhbSAge0FueX0gZGF0YSB0byBiZSB2YWxpZGF0ZWRcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHZhbGlkYXRpb24gcmVzdWx0LiBFcnJvcnMgZnJvbSB0aGUgbGFzdCB2YWxpZGF0aW9uIHdpbGwgYmUgYXZhaWxhYmxlIGluIGBhanYuZXJyb3JzYCAoYW5kIGFsc28gaW4gY29tcGlsZWQgc2NoZW1hOiBgc2NoZW1hLmVycm9yc2ApLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZShzY2hlbWFLZXlSZWYsIGRhdGEpIHtcbiAgdmFyIHY7XG4gIGlmICh0eXBlb2Ygc2NoZW1hS2V5UmVmID09ICdzdHJpbmcnKSB7XG4gICAgdiA9IHRoaXMuZ2V0U2NoZW1hKHNjaGVtYUtleVJlZik7XG4gICAgaWYgKCF2KSB0aHJvdyBuZXcgRXJyb3IoJ25vIHNjaGVtYSB3aXRoIGtleSBvciByZWYgXCInICsgc2NoZW1hS2V5UmVmICsgJ1wiJyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNjaGVtYU9iaiA9IHRoaXMuX2FkZFNjaGVtYShzY2hlbWFLZXlSZWYpO1xuICAgIHYgPSBzY2hlbWFPYmoudmFsaWRhdGUgfHwgdGhpcy5fY29tcGlsZShzY2hlbWFPYmopO1xuICB9XG5cbiAgdmFyIHZhbGlkID0gdihkYXRhKTtcbiAgaWYgKHYuJGFzeW5jICE9PSB0cnVlKSB0aGlzLmVycm9ycyA9IHYuZXJyb3JzO1xuICByZXR1cm4gdmFsaWQ7XG59XG5cblxuLyoqXG4gKiBDcmVhdGUgdmFsaWRhdGluZyBmdW5jdGlvbiBmb3IgcGFzc2VkIHNjaGVtYS5cbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtPYmplY3R9IHNjaGVtYSBzY2hlbWEgb2JqZWN0XG4gKiBAcGFyYW0gIHtCb29sZWFufSBfbWV0YSB0cnVlIGlmIHNjaGVtYSBpcyBhIG1ldGEtc2NoZW1hLiBVc2VkIGludGVybmFsbHkgdG8gY29tcGlsZSBtZXRhIHNjaGVtYXMgb2YgY3VzdG9tIGtleXdvcmRzLlxuICogQHJldHVybiB7RnVuY3Rpb259IHZhbGlkYXRpbmcgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gY29tcGlsZShzY2hlbWEsIF9tZXRhKSB7XG4gIHZhciBzY2hlbWFPYmogPSB0aGlzLl9hZGRTY2hlbWEoc2NoZW1hLCB1bmRlZmluZWQsIF9tZXRhKTtcbiAgcmV0dXJuIHNjaGVtYU9iai52YWxpZGF0ZSB8fCB0aGlzLl9jb21waWxlKHNjaGVtYU9iaik7XG59XG5cblxuLyoqXG4gKiBBZGRzIHNjaGVtYSB0byB0aGUgaW5zdGFuY2UuXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IHNjaGVtYSBzY2hlbWEgb3IgYXJyYXkgb2Ygc2NoZW1hcy4gSWYgYXJyYXkgaXMgcGFzc2VkLCBga2V5YCBhbmQgb3RoZXIgcGFyYW1ldGVycyB3aWxsIGJlIGlnbm9yZWQuXG4gKiBAcGFyYW0ge1N0cmluZ30ga2V5IE9wdGlvbmFsIHNjaGVtYSBrZXkuIENhbiBiZSBwYXNzZWQgdG8gYHZhbGlkYXRlYCBtZXRob2QgaW5zdGVhZCBvZiBzY2hlbWEgb2JqZWN0IG9yIGlkL3JlZi4gT25lIHNjaGVtYSBwZXIgaW5zdGFuY2UgY2FuIGhhdmUgZW1wdHkgYGlkYCBhbmQgYGtleWAuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IF9za2lwVmFsaWRhdGlvbiB0cnVlIHRvIHNraXAgc2NoZW1hIHZhbGlkYXRpb24uIFVzZWQgaW50ZXJuYWxseSwgb3B0aW9uIHZhbGlkYXRlU2NoZW1hIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IF9tZXRhIHRydWUgaWYgc2NoZW1hIGlzIGEgbWV0YS1zY2hlbWEuIFVzZWQgaW50ZXJuYWxseSwgYWRkTWV0YVNjaGVtYSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLlxuICogQHJldHVybiB7QWp2fSB0aGlzIGZvciBtZXRob2QgY2hhaW5pbmdcbiAqL1xuZnVuY3Rpb24gYWRkU2NoZW1hKHNjaGVtYSwga2V5LCBfc2tpcFZhbGlkYXRpb24sIF9tZXRhKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpe1xuICAgIGZvciAodmFyIGk9MDsgaTxzY2hlbWEubGVuZ3RoOyBpKyspIHRoaXMuYWRkU2NoZW1hKHNjaGVtYVtpXSwgdW5kZWZpbmVkLCBfc2tpcFZhbGlkYXRpb24sIF9tZXRhKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB2YXIgaWQgPSB0aGlzLl9nZXRJZChzY2hlbWEpO1xuICBpZiAoaWQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgaWQgIT0gJ3N0cmluZycpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdzY2hlbWEgaWQgbXVzdCBiZSBzdHJpbmcnKTtcbiAga2V5ID0gcmVzb2x2ZS5ub3JtYWxpemVJZChrZXkgfHwgaWQpO1xuICBjaGVja1VuaXF1ZSh0aGlzLCBrZXkpO1xuICB0aGlzLl9zY2hlbWFzW2tleV0gPSB0aGlzLl9hZGRTY2hlbWEoc2NoZW1hLCBfc2tpcFZhbGlkYXRpb24sIF9tZXRhLCB0cnVlKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cblxuLyoqXG4gKiBBZGQgc2NoZW1hIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHZhbGlkYXRlIG90aGVyIHNjaGVtYXNcbiAqIG9wdGlvbnMgaW4gTUVUQV9JR05PUkVfT1BUSU9OUyBhcmUgYWx3YXkgc2V0IHRvIGZhbHNlXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYSBzY2hlbWEgb2JqZWN0XG4gKiBAcGFyYW0ge1N0cmluZ30ga2V5IG9wdGlvbmFsIHNjaGVtYSBrZXlcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gc2tpcFZhbGlkYXRpb24gdHJ1ZSB0byBza2lwIHNjaGVtYSB2YWxpZGF0aW9uLCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB2YWxpZGF0ZVNjaGVtYSBvcHRpb24gZm9yIG1ldGEtc2NoZW1hXG4gKiBAcmV0dXJuIHtBanZ9IHRoaXMgZm9yIG1ldGhvZCBjaGFpbmluZ1xuICovXG5mdW5jdGlvbiBhZGRNZXRhU2NoZW1hKHNjaGVtYSwga2V5LCBza2lwVmFsaWRhdGlvbikge1xuICB0aGlzLmFkZFNjaGVtYShzY2hlbWEsIGtleSwgc2tpcFZhbGlkYXRpb24sIHRydWUpO1xuICByZXR1cm4gdGhpcztcbn1cblxuXG4vKipcbiAqIFZhbGlkYXRlIHNjaGVtYVxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWEgc2NoZW1hIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHRocm93T3JMb2dFcnJvciBwYXNzIHRydWUgdG8gdGhyb3cgKG9yIGxvZykgYW4gZXJyb3IgaWYgaW52YWxpZFxuICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiBzY2hlbWEgaXMgdmFsaWRcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTY2hlbWEoc2NoZW1hLCB0aHJvd09yTG9nRXJyb3IpIHtcbiAgdmFyICRzY2hlbWEgPSBzY2hlbWEuJHNjaGVtYTtcbiAgaWYgKCRzY2hlbWEgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgJHNjaGVtYSAhPSAnc3RyaW5nJylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJyRzY2hlbWEgbXVzdCBiZSBhIHN0cmluZycpO1xuICAkc2NoZW1hID0gJHNjaGVtYSB8fCB0aGlzLl9vcHRzLmRlZmF1bHRNZXRhIHx8IGRlZmF1bHRNZXRhKHRoaXMpO1xuICBpZiAoISRzY2hlbWEpIHtcbiAgICB0aGlzLmxvZ2dlci53YXJuKCdtZXRhLXNjaGVtYSBub3QgYXZhaWxhYmxlJyk7XG4gICAgdGhpcy5lcnJvcnMgPSBudWxsO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciB2YWxpZCA9IHRoaXMudmFsaWRhdGUoJHNjaGVtYSwgc2NoZW1hKTtcbiAgaWYgKCF2YWxpZCAmJiB0aHJvd09yTG9nRXJyb3IpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdzY2hlbWEgaXMgaW52YWxpZDogJyArIHRoaXMuZXJyb3JzVGV4dCgpO1xuICAgIGlmICh0aGlzLl9vcHRzLnZhbGlkYXRlU2NoZW1hID09ICdsb2cnKSB0aGlzLmxvZ2dlci5lcnJvcihtZXNzYWdlKTtcbiAgICBlbHNlIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgfVxuICByZXR1cm4gdmFsaWQ7XG59XG5cblxuZnVuY3Rpb24gZGVmYXVsdE1ldGEoc2VsZikge1xuICB2YXIgbWV0YSA9IHNlbGYuX29wdHMubWV0YTtcbiAgc2VsZi5fb3B0cy5kZWZhdWx0TWV0YSA9IHR5cGVvZiBtZXRhID09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLl9nZXRJZChtZXRhKSB8fCBtZXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmdldFNjaGVtYShNRVRBX1NDSEVNQV9JRClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUVUQV9TQ0hFTUFfSURcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICByZXR1cm4gc2VsZi5fb3B0cy5kZWZhdWx0TWV0YTtcbn1cblxuXG4vKipcbiAqIEdldCBjb21waWxlZCBzY2hlbWEgZnJvbSB0aGUgaW5zdGFuY2UgYnkgYGtleWAgb3IgYHJlZmAuXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtICB7U3RyaW5nfSBrZXlSZWYgYGtleWAgdGhhdCB3YXMgcGFzc2VkIHRvIGBhZGRTY2hlbWFgIG9yIGZ1bGwgc2NoZW1hIHJlZmVyZW5jZSAoYHNjaGVtYS5pZGAgb3IgcmVzb2x2ZWQgaWQpLlxuICogQHJldHVybiB7RnVuY3Rpb259IHNjaGVtYSB2YWxpZGF0aW5nIGZ1bmN0aW9uICh3aXRoIHByb3BlcnR5IGBzY2hlbWFgKS5cbiAqL1xuZnVuY3Rpb24gZ2V0U2NoZW1hKGtleVJlZikge1xuICB2YXIgc2NoZW1hT2JqID0gX2dldFNjaGVtYU9iaih0aGlzLCBrZXlSZWYpO1xuICBzd2l0Y2ggKHR5cGVvZiBzY2hlbWFPYmopIHtcbiAgICBjYXNlICdvYmplY3QnOiByZXR1cm4gc2NoZW1hT2JqLnZhbGlkYXRlIHx8IHRoaXMuX2NvbXBpbGUoc2NoZW1hT2JqKTtcbiAgICBjYXNlICdzdHJpbmcnOiByZXR1cm4gdGhpcy5nZXRTY2hlbWEoc2NoZW1hT2JqKTtcbiAgICBjYXNlICd1bmRlZmluZWQnOiByZXR1cm4gX2dldFNjaGVtYUZyYWdtZW50KHRoaXMsIGtleVJlZik7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBfZ2V0U2NoZW1hRnJhZ21lbnQoc2VsZiwgcmVmKSB7XG4gIHZhciByZXMgPSByZXNvbHZlLnNjaGVtYS5jYWxsKHNlbGYsIHsgc2NoZW1hOiB7fSB9LCByZWYpO1xuICBpZiAocmVzKSB7XG4gICAgdmFyIHNjaGVtYSA9IHJlcy5zY2hlbWFcbiAgICAgICwgcm9vdCA9IHJlcy5yb290XG4gICAgICAsIGJhc2VJZCA9IHJlcy5iYXNlSWQ7XG4gICAgdmFyIHYgPSBjb21waWxlU2NoZW1hLmNhbGwoc2VsZiwgc2NoZW1hLCByb290LCB1bmRlZmluZWQsIGJhc2VJZCk7XG4gICAgc2VsZi5fZnJhZ21lbnRzW3JlZl0gPSBuZXcgU2NoZW1hT2JqZWN0KHtcbiAgICAgIHJlZjogcmVmLFxuICAgICAgZnJhZ21lbnQ6IHRydWUsXG4gICAgICBzY2hlbWE6IHNjaGVtYSxcbiAgICAgIHJvb3Q6IHJvb3QsXG4gICAgICBiYXNlSWQ6IGJhc2VJZCxcbiAgICAgIHZhbGlkYXRlOiB2XG4gICAgfSk7XG4gICAgcmV0dXJuIHY7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBfZ2V0U2NoZW1hT2JqKHNlbGYsIGtleVJlZikge1xuICBrZXlSZWYgPSByZXNvbHZlLm5vcm1hbGl6ZUlkKGtleVJlZik7XG4gIHJldHVybiBzZWxmLl9zY2hlbWFzW2tleVJlZl0gfHwgc2VsZi5fcmVmc1trZXlSZWZdIHx8IHNlbGYuX2ZyYWdtZW50c1trZXlSZWZdO1xufVxuXG5cbi8qKlxuICogUmVtb3ZlIGNhY2hlZCBzY2hlbWEocykuXG4gKiBJZiBubyBwYXJhbWV0ZXIgaXMgcGFzc2VkIGFsbCBzY2hlbWFzIGJ1dCBtZXRhLXNjaGVtYXMgYXJlIHJlbW92ZWQuXG4gKiBJZiBSZWdFeHAgaXMgcGFzc2VkIGFsbCBzY2hlbWFzIHdpdGgga2V5L2lkIG1hdGNoaW5nIHBhdHRlcm4gYnV0IG1ldGEtc2NoZW1hcyBhcmUgcmVtb3ZlZC5cbiAqIEV2ZW4gaWYgc2NoZW1hIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgc2NoZW1hcyBpdCBzdGlsbCBjYW4gYmUgcmVtb3ZlZCBhcyBvdGhlciBzY2hlbWFzIGhhdmUgbG9jYWwgcmVmZXJlbmNlcy5cbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtTdHJpbmd8T2JqZWN0fFJlZ0V4cH0gc2NoZW1hS2V5UmVmIGtleSwgcmVmLCBwYXR0ZXJuIHRvIG1hdGNoIGtleS9yZWYgb3Igc2NoZW1hIG9iamVjdFxuICogQHJldHVybiB7QWp2fSB0aGlzIGZvciBtZXRob2QgY2hhaW5pbmdcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlU2NoZW1hKHNjaGVtYUtleVJlZikge1xuICBpZiAoc2NoZW1hS2V5UmVmIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgX3JlbW92ZUFsbFNjaGVtYXModGhpcywgdGhpcy5fc2NoZW1hcywgc2NoZW1hS2V5UmVmKTtcbiAgICBfcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLCB0aGlzLl9yZWZzLCBzY2hlbWFLZXlSZWYpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHN3aXRjaCAodHlwZW9mIHNjaGVtYUtleVJlZikge1xuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICBfcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLCB0aGlzLl9zY2hlbWFzKTtcbiAgICAgIF9yZW1vdmVBbGxTY2hlbWFzKHRoaXMsIHRoaXMuX3JlZnMpO1xuICAgICAgdGhpcy5fY2FjaGUuY2xlYXIoKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICB2YXIgc2NoZW1hT2JqID0gX2dldFNjaGVtYU9iaih0aGlzLCBzY2hlbWFLZXlSZWYpO1xuICAgICAgaWYgKHNjaGVtYU9iaikgdGhpcy5fY2FjaGUuZGVsKHNjaGVtYU9iai5jYWNoZUtleSk7XG4gICAgICBkZWxldGUgdGhpcy5fc2NoZW1hc1tzY2hlbWFLZXlSZWZdO1xuICAgICAgZGVsZXRlIHRoaXMuX3JlZnNbc2NoZW1hS2V5UmVmXTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICB2YXIgc2VyaWFsaXplID0gdGhpcy5fb3B0cy5zZXJpYWxpemU7XG4gICAgICB2YXIgY2FjaGVLZXkgPSBzZXJpYWxpemUgPyBzZXJpYWxpemUoc2NoZW1hS2V5UmVmKSA6IHNjaGVtYUtleVJlZjtcbiAgICAgIHRoaXMuX2NhY2hlLmRlbChjYWNoZUtleSk7XG4gICAgICB2YXIgaWQgPSB0aGlzLl9nZXRJZChzY2hlbWFLZXlSZWYpO1xuICAgICAgaWYgKGlkKSB7XG4gICAgICAgIGlkID0gcmVzb2x2ZS5ub3JtYWxpemVJZChpZCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zY2hlbWFzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3JlZnNbaWRdO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5cbmZ1bmN0aW9uIF9yZW1vdmVBbGxTY2hlbWFzKHNlbGYsIHNjaGVtYXMsIHJlZ2V4KSB7XG4gIGZvciAodmFyIGtleVJlZiBpbiBzY2hlbWFzKSB7XG4gICAgdmFyIHNjaGVtYU9iaiA9IHNjaGVtYXNba2V5UmVmXTtcbiAgICBpZiAoIXNjaGVtYU9iai5tZXRhICYmICghcmVnZXggfHwgcmVnZXgudGVzdChrZXlSZWYpKSkge1xuICAgICAgc2VsZi5fY2FjaGUuZGVsKHNjaGVtYU9iai5jYWNoZUtleSk7XG4gICAgICBkZWxldGUgc2NoZW1hc1trZXlSZWZdO1xuICAgIH1cbiAgfVxufVxuXG5cbi8qIEB0aGlzICAgQWp2ICovXG5mdW5jdGlvbiBfYWRkU2NoZW1hKHNjaGVtYSwgc2tpcFZhbGlkYXRpb24sIG1ldGEsIHNob3VsZEFkZFNjaGVtYSkge1xuICBpZiAodHlwZW9mIHNjaGVtYSAhPSAnb2JqZWN0JyAmJiB0eXBlb2Ygc2NoZW1hICE9ICdib29sZWFuJylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NjaGVtYSBzaG91bGQgYmUgb2JqZWN0IG9yIGJvb2xlYW4nKTtcbiAgdmFyIHNlcmlhbGl6ZSA9IHRoaXMuX29wdHMuc2VyaWFsaXplO1xuICB2YXIgY2FjaGVLZXkgPSBzZXJpYWxpemUgPyBzZXJpYWxpemUoc2NoZW1hKSA6IHNjaGVtYTtcbiAgdmFyIGNhY2hlZCA9IHRoaXMuX2NhY2hlLmdldChjYWNoZUtleSk7XG4gIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cbiAgc2hvdWxkQWRkU2NoZW1hID0gc2hvdWxkQWRkU2NoZW1hIHx8IHRoaXMuX29wdHMuYWRkVXNlZFNjaGVtYSAhPT0gZmFsc2U7XG5cbiAgdmFyIGlkID0gcmVzb2x2ZS5ub3JtYWxpemVJZCh0aGlzLl9nZXRJZChzY2hlbWEpKTtcbiAgaWYgKGlkICYmIHNob3VsZEFkZFNjaGVtYSkgY2hlY2tVbmlxdWUodGhpcywgaWQpO1xuXG4gIHZhciB3aWxsVmFsaWRhdGUgPSB0aGlzLl9vcHRzLnZhbGlkYXRlU2NoZW1hICE9PSBmYWxzZSAmJiAhc2tpcFZhbGlkYXRpb247XG4gIHZhciByZWN1cnNpdmVNZXRhO1xuICBpZiAod2lsbFZhbGlkYXRlICYmICEocmVjdXJzaXZlTWV0YSA9IGlkICYmIGlkID09IHJlc29sdmUubm9ybWFsaXplSWQoc2NoZW1hLiRzY2hlbWEpKSlcbiAgICB0aGlzLnZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdHJ1ZSk7XG5cbiAgdmFyIGxvY2FsUmVmcyA9IHJlc29sdmUuaWRzLmNhbGwodGhpcywgc2NoZW1hKTtcblxuICB2YXIgc2NoZW1hT2JqID0gbmV3IFNjaGVtYU9iamVjdCh7XG4gICAgaWQ6IGlkLFxuICAgIHNjaGVtYTogc2NoZW1hLFxuICAgIGxvY2FsUmVmczogbG9jYWxSZWZzLFxuICAgIGNhY2hlS2V5OiBjYWNoZUtleSxcbiAgICBtZXRhOiBtZXRhXG4gIH0pO1xuXG4gIGlmIChpZFswXSAhPSAnIycgJiYgc2hvdWxkQWRkU2NoZW1hKSB0aGlzLl9yZWZzW2lkXSA9IHNjaGVtYU9iajtcbiAgdGhpcy5fY2FjaGUucHV0KGNhY2hlS2V5LCBzY2hlbWFPYmopO1xuXG4gIGlmICh3aWxsVmFsaWRhdGUgJiYgcmVjdXJzaXZlTWV0YSkgdGhpcy52YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRydWUpO1xuXG4gIHJldHVybiBzY2hlbWFPYmo7XG59XG5cblxuLyogQHRoaXMgICBBanYgKi9cbmZ1bmN0aW9uIF9jb21waWxlKHNjaGVtYU9iaiwgcm9vdCkge1xuICBpZiAoc2NoZW1hT2JqLmNvbXBpbGluZykge1xuICAgIHNjaGVtYU9iai52YWxpZGF0ZSA9IGNhbGxWYWxpZGF0ZTtcbiAgICBjYWxsVmFsaWRhdGUuc2NoZW1hID0gc2NoZW1hT2JqLnNjaGVtYTtcbiAgICBjYWxsVmFsaWRhdGUuZXJyb3JzID0gbnVsbDtcbiAgICBjYWxsVmFsaWRhdGUucm9vdCA9IHJvb3QgPyByb290IDogY2FsbFZhbGlkYXRlO1xuICAgIGlmIChzY2hlbWFPYmouc2NoZW1hLiRhc3luYyA9PT0gdHJ1ZSlcbiAgICAgIGNhbGxWYWxpZGF0ZS4kYXN5bmMgPSB0cnVlO1xuICAgIHJldHVybiBjYWxsVmFsaWRhdGU7XG4gIH1cbiAgc2NoZW1hT2JqLmNvbXBpbGluZyA9IHRydWU7XG5cbiAgdmFyIGN1cnJlbnRPcHRzO1xuICBpZiAoc2NoZW1hT2JqLm1ldGEpIHtcbiAgICBjdXJyZW50T3B0cyA9IHRoaXMuX29wdHM7XG4gICAgdGhpcy5fb3B0cyA9IHRoaXMuX21ldGFPcHRzO1xuICB9XG5cbiAgdmFyIHY7XG4gIHRyeSB7IHYgPSBjb21waWxlU2NoZW1hLmNhbGwodGhpcywgc2NoZW1hT2JqLnNjaGVtYSwgcm9vdCwgc2NoZW1hT2JqLmxvY2FsUmVmcyk7IH1cbiAgY2F0Y2goZSkge1xuICAgIGRlbGV0ZSBzY2hlbWFPYmoudmFsaWRhdGU7XG4gICAgdGhyb3cgZTtcbiAgfVxuICBmaW5hbGx5IHtcbiAgICBzY2hlbWFPYmouY29tcGlsaW5nID0gZmFsc2U7XG4gICAgaWYgKHNjaGVtYU9iai5tZXRhKSB0aGlzLl9vcHRzID0gY3VycmVudE9wdHM7XG4gIH1cblxuICBzY2hlbWFPYmoudmFsaWRhdGUgPSB2O1xuICBzY2hlbWFPYmoucmVmcyA9IHYucmVmcztcbiAgc2NoZW1hT2JqLnJlZlZhbCA9IHYucmVmVmFsO1xuICBzY2hlbWFPYmoucm9vdCA9IHYucm9vdDtcbiAgcmV0dXJuIHY7XG5cblxuICAvKiBAdGhpcyAgIHsqfSAtIGN1c3RvbSBjb250ZXh0LCBzZWUgcGFzc0NvbnRleHQgb3B0aW9uICovXG4gIGZ1bmN0aW9uIGNhbGxWYWxpZGF0ZSgpIHtcbiAgICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gICAgdmFyIF92YWxpZGF0ZSA9IHNjaGVtYU9iai52YWxpZGF0ZTtcbiAgICB2YXIgcmVzdWx0ID0gX3ZhbGlkYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgY2FsbFZhbGlkYXRlLmVycm9ycyA9IF92YWxpZGF0ZS5lcnJvcnM7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGNob29zZUdldElkKG9wdHMpIHtcbiAgc3dpdGNoIChvcHRzLnNjaGVtYUlkKSB7XG4gICAgY2FzZSAnYXV0byc6IHJldHVybiBfZ2V0JElkT3JJZDtcbiAgICBjYXNlICdpZCc6IHJldHVybiBfZ2V0SWQ7XG4gICAgZGVmYXVsdDogcmV0dXJuIF9nZXQkSWQ7XG4gIH1cbn1cblxuLyogQHRoaXMgICBBanYgKi9cbmZ1bmN0aW9uIF9nZXRJZChzY2hlbWEpIHtcbiAgaWYgKHNjaGVtYS4kaWQpIHRoaXMubG9nZ2VyLndhcm4oJ3NjaGVtYSAkaWQgaWdub3JlZCcsIHNjaGVtYS4kaWQpO1xuICByZXR1cm4gc2NoZW1hLmlkO1xufVxuXG4vKiBAdGhpcyAgIEFqdiAqL1xuZnVuY3Rpb24gX2dldCRJZChzY2hlbWEpIHtcbiAgaWYgKHNjaGVtYS5pZCkgdGhpcy5sb2dnZXIud2Fybignc2NoZW1hIGlkIGlnbm9yZWQnLCBzY2hlbWEuaWQpO1xuICByZXR1cm4gc2NoZW1hLiRpZDtcbn1cblxuXG5mdW5jdGlvbiBfZ2V0JElkT3JJZChzY2hlbWEpIHtcbiAgaWYgKHNjaGVtYS4kaWQgJiYgc2NoZW1hLmlkICYmIHNjaGVtYS4kaWQgIT0gc2NoZW1hLmlkKVxuICAgIHRocm93IG5ldyBFcnJvcignc2NoZW1hICRpZCBpcyBkaWZmZXJlbnQgZnJvbSBpZCcpO1xuICByZXR1cm4gc2NoZW1hLiRpZCB8fCBzY2hlbWEuaWQ7XG59XG5cblxuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIGVycm9yIG1lc3NhZ2Ugb2JqZWN0cyB0byBzdHJpbmdcbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtBcnJheTxPYmplY3Q+fSBlcnJvcnMgb3B0aW9uYWwgYXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnMsIGlmIG5vdCBwYXNzZWQgZXJyb3JzIGZyb20gdGhlIGluc3RhbmNlIGFyZSB1c2VkLlxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zIG9wdGlvbmFsIG9wdGlvbnMgd2l0aCBwcm9wZXJ0aWVzIGBzZXBhcmF0b3JgIGFuZCBgZGF0YVZhcmAuXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGh1bWFuIHJlYWRhYmxlIHN0cmluZyB3aXRoIGFsbCBlcnJvcnMgZGVzY3JpcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGVycm9yc1RleHQoZXJyb3JzLCBvcHRpb25zKSB7XG4gIGVycm9ycyA9IGVycm9ycyB8fCB0aGlzLmVycm9ycztcbiAgaWYgKCFlcnJvcnMpIHJldHVybiAnTm8gZXJyb3JzJztcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHZhciBzZXBhcmF0b3IgPSBvcHRpb25zLnNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywgJyA6IG9wdGlvbnMuc2VwYXJhdG9yO1xuICB2YXIgZGF0YVZhciA9IG9wdGlvbnMuZGF0YVZhciA9PT0gdW5kZWZpbmVkID8gJ2RhdGEnIDogb3B0aW9ucy5kYXRhVmFyO1xuXG4gIHZhciB0ZXh0ID0gJyc7XG4gIGZvciAodmFyIGk9MDsgaTxlcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZSA9IGVycm9yc1tpXTtcbiAgICBpZiAoZSkgdGV4dCArPSBkYXRhVmFyICsgZS5kYXRhUGF0aCArICcgJyArIGUubWVzc2FnZSArIHNlcGFyYXRvcjtcbiAgfVxuICByZXR1cm4gdGV4dC5zbGljZSgwLCAtc2VwYXJhdG9yLmxlbmd0aCk7XG59XG5cblxuLyoqXG4gKiBBZGQgY3VzdG9tIGZvcm1hdFxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIGZvcm1hdCBuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB8RnVuY3Rpb259IGZvcm1hdCBzdHJpbmcgaXMgY29udmVydGVkIHRvIFJlZ0V4cDsgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBib29sZWFuICh0cnVlIHdoZW4gdmFsaWQpXG4gKiBAcmV0dXJuIHtBanZ9IHRoaXMgZm9yIG1ldGhvZCBjaGFpbmluZ1xuICovXG5mdW5jdGlvbiBhZGRGb3JtYXQobmFtZSwgZm9ybWF0KSB7XG4gIGlmICh0eXBlb2YgZm9ybWF0ID09ICdzdHJpbmcnKSBmb3JtYXQgPSBuZXcgUmVnRXhwKGZvcm1hdCk7XG4gIHRoaXMuX2Zvcm1hdHNbbmFtZV0gPSBmb3JtYXQ7XG4gIHJldHVybiB0aGlzO1xufVxuXG5cbmZ1bmN0aW9uIGFkZERlZmF1bHRNZXRhU2NoZW1hKHNlbGYpIHtcbiAgdmFyICRkYXRhU2NoZW1hO1xuICBpZiAoc2VsZi5fb3B0cy4kZGF0YSkge1xuICAgICRkYXRhU2NoZW1hID0gcmVxdWlyZSgnLi9yZWZzL2RhdGEuanNvbicpO1xuICAgIHNlbGYuYWRkTWV0YVNjaGVtYSgkZGF0YVNjaGVtYSwgJGRhdGFTY2hlbWEuJGlkLCB0cnVlKTtcbiAgfVxuICBpZiAoc2VsZi5fb3B0cy5tZXRhID09PSBmYWxzZSkgcmV0dXJuO1xuICB2YXIgbWV0YVNjaGVtYSA9IHJlcXVpcmUoJy4vcmVmcy9qc29uLXNjaGVtYS1kcmFmdC0wNy5qc29uJyk7XG4gIGlmIChzZWxmLl9vcHRzLiRkYXRhKSBtZXRhU2NoZW1hID0gJGRhdGFNZXRhU2NoZW1hKG1ldGFTY2hlbWEsIE1FVEFfU1VQUE9SVF9EQVRBKTtcbiAgc2VsZi5hZGRNZXRhU2NoZW1hKG1ldGFTY2hlbWEsIE1FVEFfU0NIRU1BX0lELCB0cnVlKTtcbiAgc2VsZi5fcmVmc1snaHR0cDovL2pzb24tc2NoZW1hLm9yZy9zY2hlbWEnXSA9IE1FVEFfU0NIRU1BX0lEO1xufVxuXG5cbmZ1bmN0aW9uIGFkZEluaXRpYWxTY2hlbWFzKHNlbGYpIHtcbiAgdmFyIG9wdHNTY2hlbWFzID0gc2VsZi5fb3B0cy5zY2hlbWFzO1xuICBpZiAoIW9wdHNTY2hlbWFzKSByZXR1cm47XG4gIGlmIChBcnJheS5pc0FycmF5KG9wdHNTY2hlbWFzKSkgc2VsZi5hZGRTY2hlbWEob3B0c1NjaGVtYXMpO1xuICBlbHNlIGZvciAodmFyIGtleSBpbiBvcHRzU2NoZW1hcykgc2VsZi5hZGRTY2hlbWEob3B0c1NjaGVtYXNba2V5XSwga2V5KTtcbn1cblxuXG5mdW5jdGlvbiBhZGRJbml0aWFsRm9ybWF0cyhzZWxmKSB7XG4gIGZvciAodmFyIG5hbWUgaW4gc2VsZi5fb3B0cy5mb3JtYXRzKSB7XG4gICAgdmFyIGZvcm1hdCA9IHNlbGYuX29wdHMuZm9ybWF0c1tuYW1lXTtcbiAgICBzZWxmLmFkZEZvcm1hdChuYW1lLCBmb3JtYXQpO1xuICB9XG59XG5cblxuZnVuY3Rpb24gYWRkSW5pdGlhbEtleXdvcmRzKHNlbGYpIHtcbiAgZm9yICh2YXIgbmFtZSBpbiBzZWxmLl9vcHRzLmtleXdvcmRzKSB7XG4gICAgdmFyIGtleXdvcmQgPSBzZWxmLl9vcHRzLmtleXdvcmRzW25hbWVdO1xuICAgIHNlbGYuYWRkS2V5d29yZChuYW1lLCBrZXl3b3JkKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGNoZWNrVW5pcXVlKHNlbGYsIGlkKSB7XG4gIGlmIChzZWxmLl9zY2hlbWFzW2lkXSB8fCBzZWxmLl9yZWZzW2lkXSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NjaGVtYSB3aXRoIGtleSBvciBpZCBcIicgKyBpZCArICdcIiBhbHJlYWR5IGV4aXN0cycpO1xufVxuXG5cbmZ1bmN0aW9uIGdldE1ldGFTY2hlbWFPcHRpb25zKHNlbGYpIHtcbiAgdmFyIG1ldGFPcHRzID0gdXRpbC5jb3B5KHNlbGYuX29wdHMpO1xuICBmb3IgKHZhciBpPTA7IGk8TUVUQV9JR05PUkVfT1BUSU9OUy5sZW5ndGg7IGkrKylcbiAgICBkZWxldGUgbWV0YU9wdHNbTUVUQV9JR05PUkVfT1BUSU9OU1tpXV07XG4gIHJldHVybiBtZXRhT3B0cztcbn1cblxuXG5mdW5jdGlvbiBzZXRMb2dnZXIoc2VsZikge1xuICB2YXIgbG9nZ2VyID0gc2VsZi5fb3B0cy5sb2dnZXI7XG4gIGlmIChsb2dnZXIgPT09IGZhbHNlKSB7XG4gICAgc2VsZi5sb2dnZXIgPSB7bG9nOiBub29wLCB3YXJuOiBub29wLCBlcnJvcjogbm9vcH07XG4gIH0gZWxzZSB7XG4gICAgaWYgKGxvZ2dlciA9PT0gdW5kZWZpbmVkKSBsb2dnZXIgPSBjb25zb2xlO1xuICAgIGlmICghKHR5cGVvZiBsb2dnZXIgPT0gJ29iamVjdCcgJiYgbG9nZ2VyLmxvZyAmJiBsb2dnZXIud2FybiAmJiBsb2dnZXIuZXJyb3IpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdsb2dnZXIgbXVzdCBpbXBsZW1lbnQgbG9nLCB3YXJuIGFuZCBlcnJvciBtZXRob2RzJyk7XG4gICAgc2VsZi5sb2dnZXIgPSBsb2dnZXI7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBub29wKCkge31cbiIsIid1c2Ugc3RyaWN0JztcblxuXG52YXIgQ2FjaGUgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENhY2hlKCkge1xuICB0aGlzLl9jYWNoZSA9IHt9O1xufTtcblxuXG5DYWNoZS5wcm90b3R5cGUucHV0ID0gZnVuY3Rpb24gQ2FjaGVfcHV0KGtleSwgdmFsdWUpIHtcbiAgdGhpcy5fY2FjaGVba2V5XSA9IHZhbHVlO1xufTtcblxuXG5DYWNoZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gQ2FjaGVfZ2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fY2FjaGVba2V5XTtcbn07XG5cblxuQ2FjaGUucHJvdG90eXBlLmRlbCA9IGZ1bmN0aW9uIENhY2hlX2RlbChrZXkpIHtcbiAgZGVsZXRlIHRoaXMuX2NhY2hlW2tleV07XG59O1xuXG5cbkNhY2hlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIENhY2hlX2NsZWFyKCkge1xuICB0aGlzLl9jYWNoZSA9IHt9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIE1pc3NpbmdSZWZFcnJvciA9IHJlcXVpcmUoJy4vZXJyb3JfY2xhc3NlcycpLk1pc3NpbmdSZWY7XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZUFzeW5jO1xuXG5cbi8qKlxuICogQ3JlYXRlcyB2YWxpZGF0aW5nIGZ1bmN0aW9uIGZvciBwYXNzZWQgc2NoZW1hIHdpdGggYXN5bmNocm9ub3VzIGxvYWRpbmcgb2YgbWlzc2luZyBzY2hlbWFzLlxuICogYGxvYWRTY2hlbWFgIG9wdGlvbiBzaG91bGQgYmUgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgc2NoZW1hIHVyaSBhbmQgcmV0dXJucyBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgc2NoZW1hLlxuICogQHRoaXMgIEFqdlxuICogQHBhcmFtIHtPYmplY3R9ICAgc2NoZW1hIHNjaGVtYSBvYmplY3RcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gIG1ldGEgb3B0aW9uYWwgdHJ1ZSB0byBjb21waWxlIG1ldGEtc2NoZW1hOyB0aGlzIHBhcmFtZXRlciBjYW4gYmUgc2tpcHBlZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYW4gb3B0aW9uYWwgbm9kZS1zdHlsZSBjYWxsYmFjaywgaXQgaXMgY2FsbGVkIHdpdGggMiBwYXJhbWV0ZXJzOiBlcnJvciAob3IgbnVsbCkgYW5kIHZhbGlkYXRpbmcgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhIHZhbGlkYXRpbmcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVBc3luYyhzY2hlbWEsIG1ldGEsIGNhbGxiYWNrKSB7XG4gIC8qIGVzbGludCBuby1zaGFkb3c6IDAgKi9cbiAgLyogZ2xvYmFsIFByb21pc2UgKi9cbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIGlmICh0eXBlb2YgdGhpcy5fb3B0cy5sb2FkU2NoZW1hICE9ICdmdW5jdGlvbicpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zLmxvYWRTY2hlbWEgc2hvdWxkIGJlIGEgZnVuY3Rpb24nKTtcblxuICBpZiAodHlwZW9mIG1ldGEgPT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gbWV0YTtcbiAgICBtZXRhID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIHAgPSBsb2FkTWV0YVNjaGVtYU9mKHNjaGVtYSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNjaGVtYU9iaiA9IHNlbGYuX2FkZFNjaGVtYShzY2hlbWEsIHVuZGVmaW5lZCwgbWV0YSk7XG4gICAgcmV0dXJuIHNjaGVtYU9iai52YWxpZGF0ZSB8fCBfY29tcGlsZUFzeW5jKHNjaGVtYU9iaik7XG4gIH0pO1xuXG4gIGlmIChjYWxsYmFjaykge1xuICAgIHAudGhlbihcbiAgICAgIGZ1bmN0aW9uKHYpIHsgY2FsbGJhY2sobnVsbCwgdik7IH0sXG4gICAgICBjYWxsYmFja1xuICAgICk7XG4gIH1cblxuICByZXR1cm4gcDtcblxuXG4gIGZ1bmN0aW9uIGxvYWRNZXRhU2NoZW1hT2Yoc2NoKSB7XG4gICAgdmFyICRzY2hlbWEgPSBzY2guJHNjaGVtYTtcbiAgICByZXR1cm4gJHNjaGVtYSAmJiAhc2VsZi5nZXRTY2hlbWEoJHNjaGVtYSlcbiAgICAgICAgICAgID8gY29tcGlsZUFzeW5jLmNhbGwoc2VsZiwgeyAkcmVmOiAkc2NoZW1hIH0sIHRydWUpXG4gICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cblxuICBmdW5jdGlvbiBfY29tcGlsZUFzeW5jKHNjaGVtYU9iaikge1xuICAgIHRyeSB7IHJldHVybiBzZWxmLl9jb21waWxlKHNjaGVtYU9iaik7IH1cbiAgICBjYXRjaChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIE1pc3NpbmdSZWZFcnJvcikgcmV0dXJuIGxvYWRNaXNzaW5nU2NoZW1hKGUpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGxvYWRNaXNzaW5nU2NoZW1hKGUpIHtcbiAgICAgIHZhciByZWYgPSBlLm1pc3NpbmdTY2hlbWE7XG4gICAgICBpZiAoYWRkZWQocmVmKSkgdGhyb3cgbmV3IEVycm9yKCdTY2hlbWEgJyArIHJlZiArICcgaXMgbG9hZGVkIGJ1dCAnICsgZS5taXNzaW5nUmVmICsgJyBjYW5ub3QgYmUgcmVzb2x2ZWQnKTtcblxuICAgICAgdmFyIHNjaGVtYVByb21pc2UgPSBzZWxmLl9sb2FkaW5nU2NoZW1hc1tyZWZdO1xuICAgICAgaWYgKCFzY2hlbWFQcm9taXNlKSB7XG4gICAgICAgIHNjaGVtYVByb21pc2UgPSBzZWxmLl9sb2FkaW5nU2NoZW1hc1tyZWZdID0gc2VsZi5fb3B0cy5sb2FkU2NoZW1hKHJlZik7XG4gICAgICAgIHNjaGVtYVByb21pc2UudGhlbihyZW1vdmVQcm9taXNlLCByZW1vdmVQcm9taXNlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNjaGVtYVByb21pc2UudGhlbihmdW5jdGlvbiAoc2NoKSB7XG4gICAgICAgIGlmICghYWRkZWQocmVmKSkge1xuICAgICAgICAgIHJldHVybiBsb2FkTWV0YVNjaGVtYU9mKHNjaCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIWFkZGVkKHJlZikpIHNlbGYuYWRkU2NoZW1hKHNjaCwgcmVmLCB1bmRlZmluZWQsIG1ldGEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX2NvbXBpbGVBc3luYyhzY2hlbWFPYmopO1xuICAgICAgfSk7XG5cbiAgICAgIGZ1bmN0aW9uIHJlbW92ZVByb21pc2UoKSB7XG4gICAgICAgIGRlbGV0ZSBzZWxmLl9sb2FkaW5nU2NoZW1hc1tyZWZdO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBhZGRlZChyZWYpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuX3JlZnNbcmVmXSB8fCBzZWxmLl9zY2hlbWFzW3JlZl07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZXNvbHZlID0gcmVxdWlyZSgnLi9yZXNvbHZlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBWYWxpZGF0aW9uOiBlcnJvclN1YmNsYXNzKFZhbGlkYXRpb25FcnJvciksXG4gIE1pc3NpbmdSZWY6IGVycm9yU3ViY2xhc3MoTWlzc2luZ1JlZkVycm9yKVxufTtcblxuXG5mdW5jdGlvbiBWYWxpZGF0aW9uRXJyb3IoZXJyb3JzKSB7XG4gIHRoaXMubWVzc2FnZSA9ICd2YWxpZGF0aW9uIGZhaWxlZCc7XG4gIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICB0aGlzLmFqdiA9IHRoaXMudmFsaWRhdGlvbiA9IHRydWU7XG59XG5cblxuTWlzc2luZ1JlZkVycm9yLm1lc3NhZ2UgPSBmdW5jdGlvbiAoYmFzZUlkLCByZWYpIHtcbiAgcmV0dXJuICdjYW5cXCd0IHJlc29sdmUgcmVmZXJlbmNlICcgKyByZWYgKyAnIGZyb20gaWQgJyArIGJhc2VJZDtcbn07XG5cblxuZnVuY3Rpb24gTWlzc2luZ1JlZkVycm9yKGJhc2VJZCwgcmVmLCBtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgTWlzc2luZ1JlZkVycm9yLm1lc3NhZ2UoYmFzZUlkLCByZWYpO1xuICB0aGlzLm1pc3NpbmdSZWYgPSByZXNvbHZlLnVybChiYXNlSWQsIHJlZik7XG4gIHRoaXMubWlzc2luZ1NjaGVtYSA9IHJlc29sdmUubm9ybWFsaXplSWQocmVzb2x2ZS5mdWxsUGF0aCh0aGlzLm1pc3NpbmdSZWYpKTtcbn1cblxuXG5mdW5jdGlvbiBlcnJvclN1YmNsYXNzKFN1YmNsYXNzKSB7XG4gIFN1YmNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgU3ViY2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ViY2xhc3M7XG4gIHJldHVybiBTdWJjbGFzcztcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxudmFyIERBVEUgPSAvXihcXGRcXGRcXGRcXGQpLShcXGRcXGQpLShcXGRcXGQpJC87XG52YXIgREFZUyA9IFswLDMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXTtcbnZhciBUSU1FID0gL14oXFxkXFxkKTooXFxkXFxkKTooXFxkXFxkKShcXC5cXGQrKT8oenxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPyk/JC9pO1xudmFyIEhPU1ROQU1FID0gL14oPz0uezEsMjUzfVxcLj8kKVthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyg/OlxcLlthLXowLTldKD86Wy0wLTlhLXpdezAsNjF9WzAtOWEtel0pPykqXFwuPyQvaTtcbnZhciBVUkkgPSAvXig/OlthLXpdW2EtejAtOStcXC0uXSo6KSg/OlxcLz9cXC8oPzooPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06XXwlWzAtOWEtZl17Mn0pKkApPyg/OlxcWyg/Oig/Oig/Oig/OlswLTlhLWZdezEsNH06KXs2fXw6Oig/OlswLTlhLWZdezEsNH06KXs1fXwoPzpbMC05YS1mXXsxLDR9KT86Oig/OlswLTlhLWZdezEsNH06KXs0fXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCwxfVswLTlhLWZdezEsNH0pPzo6KD86WzAtOWEtZl17MSw0fTopezN9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDJ9WzAtOWEtZl17MSw0fSk/OjooPzpbMC05YS1mXXsxLDR9Oil7Mn18KD86KD86WzAtOWEtZl17MSw0fTopezAsM31bMC05YS1mXXsxLDR9KT86OlswLTlhLWZdezEsNH06fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDR9WzAtOWEtZl17MSw0fSk/OjopKD86WzAtOWEtZl17MSw0fTpbMC05YS1mXXsxLDR9fCg/Oig/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSl8KD86KD86WzAtOWEtZl17MSw0fTopezAsNX1bMC05YS1mXXsxLDR9KT86OlswLTlhLWZdezEsNH18KD86KD86WzAtOWEtZl17MSw0fTopezAsNn1bMC05YS1mXXsxLDR9KT86Oil8W1Z2XVswLTlhLWZdK1xcLlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpdKylcXF18KD86KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pfCg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PV18JVswLTlhLWZdezJ9KSopKD86OlxcZCopPyg/OlxcLyg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKikqfFxcLyg/Oig/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKyg/OlxcLyg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKikqKT98KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkrKD86XFwvKD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSopKD86XFw/KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkAvP118JVswLTlhLWZdezJ9KSopPyg/OiMoPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QC8/XXwlWzAtOWEtZl17Mn0pKik/JC9pO1xudmFyIFVSSVJFRiA9IC9eKD86W2Etel1bYS16MC05K1xcLS5dKjopPyg/OlxcLz9cXC8oPzooPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06XXwlWzAtOWEtZl17Mn0pKkApPyg/OlxcWyg/Oig/Oig/Oig/OlswLTlhLWZdezEsNH06KXs2fXw6Oig/OlswLTlhLWZdezEsNH06KXs1fXwoPzpbMC05YS1mXXsxLDR9KT86Oig/OlswLTlhLWZdezEsNH06KXs0fXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCwxfVswLTlhLWZdezEsNH0pPzo6KD86WzAtOWEtZl17MSw0fTopezN9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDJ9WzAtOWEtZl17MSw0fSk/OjooPzpbMC05YS1mXXsxLDR9Oil7Mn18KD86KD86WzAtOWEtZl17MSw0fTopezAsM31bMC05YS1mXXsxLDR9KT86OlswLTlhLWZdezEsNH06fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDR9WzAtOWEtZl17MSw0fSk/OjopKD86WzAtOWEtZl17MSw0fTpbMC05YS1mXXsxLDR9fCg/Oig/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSl8KD86KD86WzAtOWEtZl17MSw0fTopezAsNX1bMC05YS1mXXsxLDR9KT86OlswLTlhLWZdezEsNH18KD86KD86WzAtOWEtZl17MSw0fTopezAsNn1bMC05YS1mXXsxLDR9KT86Oil8W1Z2XVswLTlhLWZdK1xcLlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpdKylcXF18KD86KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pfCg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9XXwlWzAtOWEtZl17Mn0pKikoPzo6XFxkKik/KD86XFwvKD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz06QF18JVswLTlhLWZdezJ9KSopKnxcXC8oPzooPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKyg/OlxcLyg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSopP3woPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKyg/OlxcLyg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSopPyg/OlxcPyg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkAvP118JVswLTlhLWZdezJ9KSopPyg/OiMoPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpALz9dfCVbMC05YS1mXXsyfSkqKT8kL2k7XG4vLyB1cmktdGVtcGxhdGU6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NTcwXG52YXIgVVJJVEVNUExBVEUgPSAvXig/Oig/OlteXFx4MDAtXFx4MjBcIic8PiVcXFxcXmB7fH1dfCVbMC05YS1mXXsyfSl8XFx7WysjLi87PyY9LCFAfF0/KD86W2EtejAtOV9dfCVbMC05YS1mXXsyfSkrKD86OlsxLTldWzAtOV17MCwzfXxcXCopPyg/OiwoPzpbYS16MC05X118JVswLTlhLWZdezJ9KSsoPzo6WzEtOV1bMC05XXswLDN9fFxcKik/KSpcXH0pKiQvaTtcbi8vIEZvciB0aGUgc291cmNlOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9kcGVyaW5pLzcyOTI5NFxuLy8gRm9yIHRlc3QgY2FzZXM6IGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9kZW1vL3VybC1yZWdleFxuLy8gQHRvZG8gRGVsZXRlIGN1cnJlbnQgVVJMIGluIGZhdm91ciBvZiB0aGUgY29tbWVudGVkIG91dCBVUkwgcnVsZSB3aGVuIHRoaXMgaXNzdWUgaXMgZml4ZWQgaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9lc2xpbnQvaXNzdWVzLzc5ODMuXG4vLyB2YXIgVVJMID0gL14oPzooPzpodHRwcz98ZnRwKTpcXC9cXC8pKD86XFxTKyg/OjpcXFMqKT9AKT8oPzooPyExMCg/OlxcLlxcZHsxLDN9KXszfSkoPyExMjcoPzpcXC5cXGR7MSwzfSl7M30pKD8hMTY5XFwuMjU0KD86XFwuXFxkezEsM30pezJ9KSg/ITE5MlxcLjE2OCg/OlxcLlxcZHsxLDN9KXsyfSkoPyExNzJcXC4oPzoxWzYtOV18MlxcZHwzWzAtMV0pKD86XFwuXFxkezEsM30pezJ9KSg/OlsxLTldXFxkP3wxXFxkXFxkfDJbMDFdXFxkfDIyWzAtM10pKD86XFwuKD86MT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkpezJ9KD86XFwuKD86WzEtOV1cXGQ/fDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNF0pKXwoPzooPzpbYS16XFx1ezAwYTF9LVxcdXtmZmZmfTAtOV0rLSkqW2EtelxcdXswMGExfS1cXHV7ZmZmZn0wLTldKykoPzpcXC4oPzpbYS16XFx1ezAwYTF9LVxcdXtmZmZmfTAtOV0rLSkqW2EtelxcdXswMGExfS1cXHV7ZmZmZn0wLTldKykqKD86XFwuKD86W2EtelxcdXswMGExfS1cXHV7ZmZmZn1dezIsfSkpKSg/OjpcXGR7Miw1fSk/KD86XFwvW15cXHNdKik/JC9pdTtcbnZhciBVUkwgPSAvXig/Oig/Omh0dHBbc1xcdTAxN0ZdP3xmdHApOlxcL1xcLykoPzooPzpbXFwwLVxceDA4XFx4MEUtXFx4MUYhLVxceDlGXFx4QTEtXFx1MTY3RlxcdTE2ODEtXFx1MUZGRlxcdTIwMEItXFx1MjAyN1xcdTIwMkEtXFx1MjAyRVxcdTIwMzAtXFx1MjA1RVxcdTIwNjAtXFx1MkZGRlxcdTMwMDEtXFx1RDdGRlxcdUUwMDAtXFx1RkVGRVxcdUZGMDAtXFx1RkZGRl18W1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXXxbXFx1RDgwMC1cXHVEQkZGXSg/IVtcXHVEQzAwLVxcdURGRkZdKXwoPzpbXlxcdUQ4MDAtXFx1REJGRl18XilbXFx1REMwMC1cXHVERkZGXSkrKD86Oig/OltcXDAtXFx4MDhcXHgwRS1cXHgxRiEtXFx4OUZcXHhBMS1cXHUxNjdGXFx1MTY4MS1cXHUxRkZGXFx1MjAwQi1cXHUyMDI3XFx1MjAyQS1cXHUyMDJFXFx1MjAzMC1cXHUyMDVFXFx1MjA2MC1cXHUyRkZGXFx1MzAwMS1cXHVEN0ZGXFx1RTAwMC1cXHVGRUZFXFx1RkYwMC1cXHVGRkZGXXxbXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdKSopP0ApPyg/Oig/ITEwKD86XFwuWzAtOV17MSwzfSl7M30pKD8hMTI3KD86XFwuWzAtOV17MSwzfSl7M30pKD8hMTY5XFwuMjU0KD86XFwuWzAtOV17MSwzfSl7Mn0pKD8hMTkyXFwuMTY4KD86XFwuWzAtOV17MSwzfSl7Mn0pKD8hMTcyXFwuKD86MVs2LTldfDJbMC05XXwzWzAxXSkoPzpcXC5bMC05XXsxLDN9KXsyfSkoPzpbMS05XVswLTldP3wxWzAtOV1bMC05XXwyWzAxXVswLTldfDIyWzAtM10pKD86XFwuKD86MT9bMC05XXsxLDJ9fDJbMC00XVswLTldfDI1WzAtNV0pKXsyfSg/OlxcLig/OlsxLTldWzAtOV0/fDFbMC05XVswLTldfDJbMC00XVswLTldfDI1WzAtNF0pKXwoPzooPzooPzpbMC05YS16XFx4QTEtXFx1RDdGRlxcdUUwMDAtXFx1RkZGRl18W1xcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD86W15cXHVEODAwLVxcdURCRkZdfF4pW1xcdURDMDAtXFx1REZGRl0pKy0pKig/OlswLTlhLXpcXHhBMS1cXHVEN0ZGXFx1RTAwMC1cXHVGRkZGXXxbXFx1RDgwMC1cXHVEQkZGXSg/IVtcXHVEQzAwLVxcdURGRkZdKXwoPzpbXlxcdUQ4MDAtXFx1REJGRl18XilbXFx1REMwMC1cXHVERkZGXSkrKSg/OlxcLig/Oig/OlswLTlhLXpcXHhBMS1cXHVEN0ZGXFx1RTAwMC1cXHVGRkZGXXxbXFx1RDgwMC1cXHVEQkZGXSg/IVtcXHVEQzAwLVxcdURGRkZdKXwoPzpbXlxcdUQ4MDAtXFx1REJGRl18XilbXFx1REMwMC1cXHVERkZGXSkrLSkqKD86WzAtOWEtelxceEExLVxcdUQ3RkZcXHVFMDAwLVxcdUZGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdKSspKig/OlxcLig/Oig/OlthLXpcXHhBMS1cXHVEN0ZGXFx1RTAwMC1cXHVGRkZGXXxbXFx1RDgwMC1cXHVEQkZGXSg/IVtcXHVEQzAwLVxcdURGRkZdKXwoPzpbXlxcdUQ4MDAtXFx1REJGRl18XilbXFx1REMwMC1cXHVERkZGXSl7Mix9KSkpKD86OlswLTldezIsNX0pPyg/OlxcLyg/OltcXDAtXFx4MDhcXHgwRS1cXHgxRiEtXFx4OUZcXHhBMS1cXHUxNjdGXFx1MTY4MS1cXHUxRkZGXFx1MjAwQi1cXHUyMDI3XFx1MjAyQS1cXHUyMDJFXFx1MjAzMC1cXHUyMDVFXFx1MjA2MC1cXHUyRkZGXFx1MzAwMS1cXHVEN0ZGXFx1RTAwMC1cXHVGRUZFXFx1RkYwMC1cXHVGRkZGXXxbXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdKSopPyQvaTtcbnZhciBVVUlEID0gL14oPzp1cm46dXVpZDopP1swLTlhLWZdezh9LSg/OlswLTlhLWZdezR9LSl7M31bMC05YS1mXXsxMn0kL2k7XG52YXIgSlNPTl9QT0lOVEVSID0gL14oPzpcXC8oPzpbXn4vXXx+MHx+MSkqKSokLztcbnZhciBKU09OX1BPSU5URVJfVVJJX0ZSQUdNRU5UID0gL14jKD86XFwvKD86W2EtejAtOV9cXC0uISQmJygpKissOzo9QF18JVswLTlhLWZdezJ9fH4wfH4xKSopKiQvaTtcbnZhciBSRUxBVElWRV9KU09OX1BPSU5URVIgPSAvXig/OjB8WzEtOV1bMC05XSopKD86I3woPzpcXC8oPzpbXn4vXXx+MHx+MSkqKSopJC87XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmb3JtYXRzO1xuXG5mdW5jdGlvbiBmb3JtYXRzKG1vZGUpIHtcbiAgbW9kZSA9IG1vZGUgPT0gJ2Z1bGwnID8gJ2Z1bGwnIDogJ2Zhc3QnO1xuICByZXR1cm4gdXRpbC5jb3B5KGZvcm1hdHNbbW9kZV0pO1xufVxuXG5cbmZvcm1hdHMuZmFzdCA9IHtcbiAgLy8gZGF0ZTogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICBkYXRlOiAvXlxcZFxcZFxcZFxcZC1bMC0xXVxcZC1bMC0zXVxcZCQvLFxuICAvLyBkYXRlLXRpbWU6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjc2VjdGlvbi01LjZcbiAgdGltZTogL14oPzpbMC0yXVxcZDpbMC01XVxcZDpbMC01XVxcZHwyMzo1OTo2MCkoPzpcXC5cXGQrKT8oPzp6fFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/KT8kL2ksXG4gICdkYXRlLXRpbWUnOiAvXlxcZFxcZFxcZFxcZC1bMC0xXVxcZC1bMC0zXVxcZFt0XFxzXSg/OlswLTJdXFxkOlswLTVdXFxkOlswLTVdXFxkfDIzOjU5OjYwKSg/OlxcLlxcZCspPyg/Onp8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8pJC9pLFxuICAvLyB1cmk6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYWZpbnRvc2gvaXMtbXktanNvbi12YWxpZC9ibG9iL21hc3Rlci9mb3JtYXRzLmpzXG4gIHVyaTogL14oPzpbYS16XVthLXowLTkrXFwtLl0qOikoPzpcXC8/XFwvKT9bXlxcc10qJC9pLFxuICAndXJpLXJlZmVyZW5jZSc6IC9eKD86KD86W2Etel1bYS16MC05K1xcLS5dKjopP1xcLz9cXC8pPyg/OlteXFxcXFxccyNdW15cXHMjXSopPyg/OiNbXlxcXFxcXHNdKik/JC9pLFxuICAndXJpLXRlbXBsYXRlJzogVVJJVEVNUExBVEUsXG4gIHVybDogVVJMLFxuICAvLyBlbWFpbCAoc291cmNlcyBmcm9tIGpzZW4gdmFsaWRhdG9yKTpcbiAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMDEzMjMvdXNpbmctYS1yZWd1bGFyLWV4cHJlc3Npb24tdG8tdmFsaWRhdGUtYW4tZW1haWwtYWRkcmVzcyNhbnN3ZXItODgyOTM2M1xuICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9mb3Jtcy5odG1sI3ZhbGlkLWUtbWFpbC1hZGRyZXNzIChzZWFyY2ggZm9yICd3aWxsZnVsIHZpb2xhdGlvbicpXG4gIGVtYWlsOiAvXlthLXowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyg/OlxcLlthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPykqJC9pLFxuICBob3N0bmFtZTogSE9TVE5BTUUsXG4gIC8vIG9wdGltaXplZCBodHRwczovL3d3dy5zYWZhcmlib29rc29ubGluZS5jb20vbGlicmFyeS92aWV3L3JlZ3VsYXItZXhwcmVzc2lvbnMtY29va2Jvb2svOTc4MDU5NjgwMjgzNy9jaDA3czE2Lmh0bWxcbiAgaXB2NDogL14oPzooPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPykkLyxcbiAgLy8gb3B0aW1pemVkIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTM0OTcvcmVndWxhci1leHByZXNzaW9uLXRoYXQtbWF0Y2hlcy12YWxpZC1pcHY2LWFkZHJlc3Nlc1xuICBpcHY2OiAvXlxccyooPzooPzooPzpbMC05YS1mXXsxLDR9Oil7N30oPzpbMC05YS1mXXsxLDR9fDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7Nn0oPzo6WzAtOWEtZl17MSw0fXwoPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezV9KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsMn0pfDooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezR9KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsM30pfCg/Oig/OjpbMC05YS1mXXsxLDR9KT86KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7M30oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw0fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsMn06KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7Mn0oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw1fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsM306KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MX0oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw2fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsNH06KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzo6KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsN30pfCg/Oig/OjpbMC05YS1mXXsxLDR9KXswLDV9Oig/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSkpKD86JS4rKT9cXHMqJC9pLFxuICByZWdleDogcmVnZXgsXG4gIC8vIHV1aWQ6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxMjJcbiAgdXVpZDogVVVJRCxcbiAgLy8gSlNPTi1wb2ludGVyOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjkwMVxuICAvLyB1cmkgZnJhZ21lbnQ6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I2FwcGVuZGl4LUFcbiAgJ2pzb24tcG9pbnRlcic6IEpTT05fUE9JTlRFUixcbiAgJ2pzb24tcG9pbnRlci11cmktZnJhZ21lbnQnOiBKU09OX1BPSU5URVJfVVJJX0ZSQUdNRU5ULFxuICAvLyByZWxhdGl2ZSBKU09OLXBvaW50ZXI6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWx1ZmYtcmVsYXRpdmUtanNvbi1wb2ludGVyLTAwXG4gICdyZWxhdGl2ZS1qc29uLXBvaW50ZXInOiBSRUxBVElWRV9KU09OX1BPSU5URVJcbn07XG5cblxuZm9ybWF0cy5mdWxsID0ge1xuICBkYXRlOiBkYXRlLFxuICB0aW1lOiB0aW1lLFxuICAnZGF0ZS10aW1lJzogZGF0ZV90aW1lLFxuICB1cmk6IHVyaSxcbiAgJ3VyaS1yZWZlcmVuY2UnOiBVUklSRUYsXG4gICd1cmktdGVtcGxhdGUnOiBVUklURU1QTEFURSxcbiAgdXJsOiBVUkwsXG4gIGVtYWlsOiAvXlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcXC5bYS16MC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKSpAKD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1xcLikrW2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pPyQvaSxcbiAgaG9zdG5hbWU6IEhPU1ROQU1FLFxuICBpcHY0OiAvXig/Oig/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSQvLFxuICBpcHY2OiAvXlxccyooPzooPzooPzpbMC05YS1mXXsxLDR9Oil7N30oPzpbMC05YS1mXXsxLDR9fDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7Nn0oPzo6WzAtOWEtZl17MSw0fXwoPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezV9KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsMn0pfDooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezR9KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsM30pfCg/Oig/OjpbMC05YS1mXXsxLDR9KT86KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7M30oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw0fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsMn06KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7Mn0oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw1fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsM306KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MX0oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw2fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsNH06KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzo6KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsN30pfCg/Oig/OjpbMC05YS1mXXsxLDR9KXswLDV9Oig/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSkpKD86JS4rKT9cXHMqJC9pLFxuICByZWdleDogcmVnZXgsXG4gIHV1aWQ6IFVVSUQsXG4gICdqc29uLXBvaW50ZXInOiBKU09OX1BPSU5URVIsXG4gICdqc29uLXBvaW50ZXItdXJpLWZyYWdtZW50JzogSlNPTl9QT0lOVEVSX1VSSV9GUkFHTUVOVCxcbiAgJ3JlbGF0aXZlLWpzb24tcG9pbnRlcic6IFJFTEFUSVZFX0pTT05fUE9JTlRFUlxufTtcblxuXG5mdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHtcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjYXBwZW5kaXgtQ1xuICByZXR1cm4geWVhciAlIDQgPT09IDAgJiYgKHllYXIgJSAxMDAgIT09IDAgfHwgeWVhciAlIDQwMCA9PT0gMCk7XG59XG5cblxuZnVuY3Rpb24gZGF0ZShzdHIpIHtcbiAgLy8gZnVsbC1kYXRlIGZyb20gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICB2YXIgbWF0Y2hlcyA9IHN0ci5tYXRjaChEQVRFKTtcbiAgaWYgKCFtYXRjaGVzKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIHllYXIgPSArbWF0Y2hlc1sxXTtcbiAgdmFyIG1vbnRoID0gK21hdGNoZXNbMl07XG4gIHZhciBkYXkgPSArbWF0Y2hlc1szXTtcblxuICByZXR1cm4gbW9udGggPj0gMSAmJiBtb250aCA8PSAxMiAmJiBkYXkgPj0gMSAmJlxuICAgICAgICAgIGRheSA8PSAobW9udGggPT0gMiAmJiBpc0xlYXBZZWFyKHllYXIpID8gMjkgOiBEQVlTW21vbnRoXSk7XG59XG5cblxuZnVuY3Rpb24gdGltZShzdHIsIGZ1bGwpIHtcbiAgdmFyIG1hdGNoZXMgPSBzdHIubWF0Y2goVElNRSk7XG4gIGlmICghbWF0Y2hlcykgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBob3VyID0gbWF0Y2hlc1sxXTtcbiAgdmFyIG1pbnV0ZSA9IG1hdGNoZXNbMl07XG4gIHZhciBzZWNvbmQgPSBtYXRjaGVzWzNdO1xuICB2YXIgdGltZVpvbmUgPSBtYXRjaGVzWzVdO1xuICByZXR1cm4gKChob3VyIDw9IDIzICYmIG1pbnV0ZSA8PSA1OSAmJiBzZWNvbmQgPD0gNTkpIHx8XG4gICAgICAgICAgKGhvdXIgPT0gMjMgJiYgbWludXRlID09IDU5ICYmIHNlY29uZCA9PSA2MCkpICYmXG4gICAgICAgICAoIWZ1bGwgfHwgdGltZVpvbmUpO1xufVxuXG5cbnZhciBEQVRFX1RJTUVfU0VQQVJBVE9SID0gL3R8XFxzL2k7XG5mdW5jdGlvbiBkYXRlX3RpbWUoc3RyKSB7XG4gIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjc2VjdGlvbi01LjZcbiAgdmFyIGRhdGVUaW1lID0gc3RyLnNwbGl0KERBVEVfVElNRV9TRVBBUkFUT1IpO1xuICByZXR1cm4gZGF0ZVRpbWUubGVuZ3RoID09IDIgJiYgZGF0ZShkYXRlVGltZVswXSkgJiYgdGltZShkYXRlVGltZVsxXSwgdHJ1ZSk7XG59XG5cblxudmFyIE5PVF9VUklfRlJBR01FTlQgPSAvXFwvfDovO1xuZnVuY3Rpb24gdXJpKHN0cikge1xuICAvLyBodHRwOi8vam1yd2FyZS5jb20vYXJ0aWNsZXMvMjAwOS91cmlfcmVnZXhwL1VSSV9yZWdleC5odG1sICsgb3B0aW9uYWwgcHJvdG9jb2wgKyByZXF1aXJlZCBcIi5cIlxuICByZXR1cm4gTk9UX1VSSV9GUkFHTUVOVC50ZXN0KHN0cikgJiYgVVJJLnRlc3Qoc3RyKTtcbn1cblxuXG52YXIgWl9BTkNIT1IgPSAvW15cXFxcXVxcXFxaLztcbmZ1bmN0aW9uIHJlZ2V4KHN0cikge1xuICBpZiAoWl9BTkNIT1IudGVzdChzdHIpKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgbmV3IFJlZ0V4cChzdHIpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlc29sdmUgPSByZXF1aXJlKCcuL3Jlc29sdmUnKVxuICAsIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuICAsIGVycm9yQ2xhc3NlcyA9IHJlcXVpcmUoJy4vZXJyb3JfY2xhc3NlcycpXG4gICwgc3RhYmxlU3RyaW5naWZ5ID0gcmVxdWlyZSgnZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnknKTtcblxudmFyIHZhbGlkYXRlR2VuZXJhdG9yID0gcmVxdWlyZSgnLi4vZG90anMvdmFsaWRhdGUnKTtcblxuLyoqXG4gKiBGdW5jdGlvbnMgYmVsb3cgYXJlIHVzZWQgaW5zaWRlIGNvbXBpbGVkIHZhbGlkYXRpb25zIGZ1bmN0aW9uXG4gKi9cblxudmFyIHVjczJsZW5ndGggPSB1dGlsLnVjczJsZW5ndGg7XG52YXIgZXF1YWwgPSByZXF1aXJlKCdmYXN0LWRlZXAtZXF1YWwnKTtcblxuLy8gdGhpcyBlcnJvciBpcyB0aHJvd24gYnkgYXN5bmMgc2NoZW1hcyB0byByZXR1cm4gdmFsaWRhdGlvbiBlcnJvcnMgdmlhIGV4Y2VwdGlvblxudmFyIFZhbGlkYXRpb25FcnJvciA9IGVycm9yQ2xhc3Nlcy5WYWxpZGF0aW9uO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbXBpbGU7XG5cblxuLyoqXG4gKiBDb21waWxlcyBzY2hlbWEgdG8gdmFsaWRhdGlvbiBmdW5jdGlvblxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSAge09iamVjdH0gc2NoZW1hIHNjaGVtYSBvYmplY3RcbiAqIEBwYXJhbSAge09iamVjdH0gcm9vdCBvYmplY3Qgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcm9vdCBzY2hlbWEgZm9yIHRoaXMgc2NoZW1hXG4gKiBAcGFyYW0gIHtPYmplY3R9IGxvY2FsUmVmcyB0aGUgaGFzaCBvZiBsb2NhbCByZWZlcmVuY2VzIGluc2lkZSB0aGUgc2NoZW1hIChjcmVhdGVkIGJ5IHJlc29sdmUuaWQpLCB1c2VkIGZvciBpbmxpbmUgcmVzb2x1dGlvblxuICogQHBhcmFtICB7U3RyaW5nfSBiYXNlSWQgYmFzZSBJRCBmb3IgSURzIGluIHRoZSBzY2hlbWFcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSB2YWxpZGF0aW9uIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGUoc2NoZW1hLCByb290LCBsb2NhbFJlZnMsIGJhc2VJZCkge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlLCBldmlsOiB0cnVlICovXG4gIC8qIGVzbGludCBuby1zaGFkb3c6IDAgKi9cbiAgdmFyIHNlbGYgPSB0aGlzXG4gICAgLCBvcHRzID0gdGhpcy5fb3B0c1xuICAgICwgcmVmVmFsID0gWyB1bmRlZmluZWQgXVxuICAgICwgcmVmcyA9IHt9XG4gICAgLCBwYXR0ZXJucyA9IFtdXG4gICAgLCBwYXR0ZXJuc0hhc2ggPSB7fVxuICAgICwgZGVmYXVsdHMgPSBbXVxuICAgICwgZGVmYXVsdHNIYXNoID0ge31cbiAgICAsIGN1c3RvbVJ1bGVzID0gW107XG5cbiAgcm9vdCA9IHJvb3QgfHwgeyBzY2hlbWE6IHNjaGVtYSwgcmVmVmFsOiByZWZWYWwsIHJlZnM6IHJlZnMgfTtcblxuICB2YXIgYyA9IGNoZWNrQ29tcGlsaW5nLmNhbGwodGhpcywgc2NoZW1hLCByb290LCBiYXNlSWQpO1xuICB2YXIgY29tcGlsYXRpb24gPSB0aGlzLl9jb21waWxhdGlvbnNbYy5pbmRleF07XG4gIGlmIChjLmNvbXBpbGluZykgcmV0dXJuIChjb21waWxhdGlvbi5jYWxsVmFsaWRhdGUgPSBjYWxsVmFsaWRhdGUpO1xuXG4gIHZhciBmb3JtYXRzID0gdGhpcy5fZm9ybWF0cztcbiAgdmFyIFJVTEVTID0gdGhpcy5SVUxFUztcblxuICB0cnkge1xuICAgIHZhciB2ID0gbG9jYWxDb21waWxlKHNjaGVtYSwgcm9vdCwgbG9jYWxSZWZzLCBiYXNlSWQpO1xuICAgIGNvbXBpbGF0aW9uLnZhbGlkYXRlID0gdjtcbiAgICB2YXIgY3YgPSBjb21waWxhdGlvbi5jYWxsVmFsaWRhdGU7XG4gICAgaWYgKGN2KSB7XG4gICAgICBjdi5zY2hlbWEgPSB2LnNjaGVtYTtcbiAgICAgIGN2LmVycm9ycyA9IG51bGw7XG4gICAgICBjdi5yZWZzID0gdi5yZWZzO1xuICAgICAgY3YucmVmVmFsID0gdi5yZWZWYWw7XG4gICAgICBjdi5yb290ID0gdi5yb290O1xuICAgICAgY3YuJGFzeW5jID0gdi4kYXN5bmM7XG4gICAgICBpZiAob3B0cy5zb3VyY2VDb2RlKSBjdi5zb3VyY2UgPSB2LnNvdXJjZTtcbiAgICB9XG4gICAgcmV0dXJuIHY7XG4gIH0gZmluYWxseSB7XG4gICAgZW5kQ29tcGlsaW5nLmNhbGwodGhpcywgc2NoZW1hLCByb290LCBiYXNlSWQpO1xuICB9XG5cbiAgLyogQHRoaXMgICB7Kn0gLSBjdXN0b20gY29udGV4dCwgc2VlIHBhc3NDb250ZXh0IG9wdGlvbiAqL1xuICBmdW5jdGlvbiBjYWxsVmFsaWRhdGUoKSB7XG4gICAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICAgIHZhciB2YWxpZGF0ZSA9IGNvbXBpbGF0aW9uLnZhbGlkYXRlO1xuICAgIHZhciByZXN1bHQgPSB2YWxpZGF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGNhbGxWYWxpZGF0ZS5lcnJvcnMgPSB2YWxpZGF0ZS5lcnJvcnM7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvY2FsQ29tcGlsZShfc2NoZW1hLCBfcm9vdCwgbG9jYWxSZWZzLCBiYXNlSWQpIHtcbiAgICB2YXIgaXNSb290ID0gIV9yb290IHx8IChfcm9vdCAmJiBfcm9vdC5zY2hlbWEgPT0gX3NjaGVtYSk7XG4gICAgaWYgKF9yb290LnNjaGVtYSAhPSByb290LnNjaGVtYSlcbiAgICAgIHJldHVybiBjb21waWxlLmNhbGwoc2VsZiwgX3NjaGVtYSwgX3Jvb3QsIGxvY2FsUmVmcywgYmFzZUlkKTtcblxuICAgIHZhciAkYXN5bmMgPSBfc2NoZW1hLiRhc3luYyA9PT0gdHJ1ZTtcblxuICAgIHZhciBzb3VyY2VDb2RlID0gdmFsaWRhdGVHZW5lcmF0b3Ioe1xuICAgICAgaXNUb3A6IHRydWUsXG4gICAgICBzY2hlbWE6IF9zY2hlbWEsXG4gICAgICBpc1Jvb3Q6IGlzUm9vdCxcbiAgICAgIGJhc2VJZDogYmFzZUlkLFxuICAgICAgcm9vdDogX3Jvb3QsXG4gICAgICBzY2hlbWFQYXRoOiAnJyxcbiAgICAgIGVyclNjaGVtYVBhdGg6ICcjJyxcbiAgICAgIGVycm9yUGF0aDogJ1wiXCInLFxuICAgICAgTWlzc2luZ1JlZkVycm9yOiBlcnJvckNsYXNzZXMuTWlzc2luZ1JlZixcbiAgICAgIFJVTEVTOiBSVUxFUyxcbiAgICAgIHZhbGlkYXRlOiB2YWxpZGF0ZUdlbmVyYXRvcixcbiAgICAgIHV0aWw6IHV0aWwsXG4gICAgICByZXNvbHZlOiByZXNvbHZlLFxuICAgICAgcmVzb2x2ZVJlZjogcmVzb2x2ZVJlZixcbiAgICAgIHVzZVBhdHRlcm46IHVzZVBhdHRlcm4sXG4gICAgICB1c2VEZWZhdWx0OiB1c2VEZWZhdWx0LFxuICAgICAgdXNlQ3VzdG9tUnVsZTogdXNlQ3VzdG9tUnVsZSxcbiAgICAgIG9wdHM6IG9wdHMsXG4gICAgICBmb3JtYXRzOiBmb3JtYXRzLFxuICAgICAgbG9nZ2VyOiBzZWxmLmxvZ2dlcixcbiAgICAgIHNlbGY6IHNlbGZcbiAgICB9KTtcblxuICAgIHNvdXJjZUNvZGUgPSB2YXJzKHJlZlZhbCwgcmVmVmFsQ29kZSkgKyB2YXJzKHBhdHRlcm5zLCBwYXR0ZXJuQ29kZSlcbiAgICAgICAgICAgICAgICAgICArIHZhcnMoZGVmYXVsdHMsIGRlZmF1bHRDb2RlKSArIHZhcnMoY3VzdG9tUnVsZXMsIGN1c3RvbVJ1bGVDb2RlKVxuICAgICAgICAgICAgICAgICAgICsgc291cmNlQ29kZTtcblxuICAgIGlmIChvcHRzLnByb2Nlc3NDb2RlKSBzb3VyY2VDb2RlID0gb3B0cy5wcm9jZXNzQ29kZShzb3VyY2VDb2RlLCBfc2NoZW1hKTtcbiAgICAvLyBjb25zb2xlLmxvZygnXFxuXFxuXFxuICoqKiBcXG4nLCBKU09OLnN0cmluZ2lmeShzb3VyY2VDb2RlKSk7XG4gICAgdmFyIHZhbGlkYXRlO1xuICAgIHRyeSB7XG4gICAgICB2YXIgbWFrZVZhbGlkYXRlID0gbmV3IEZ1bmN0aW9uKFxuICAgICAgICAnc2VsZicsXG4gICAgICAgICdSVUxFUycsXG4gICAgICAgICdmb3JtYXRzJyxcbiAgICAgICAgJ3Jvb3QnLFxuICAgICAgICAncmVmVmFsJyxcbiAgICAgICAgJ2RlZmF1bHRzJyxcbiAgICAgICAgJ2N1c3RvbVJ1bGVzJyxcbiAgICAgICAgJ2VxdWFsJyxcbiAgICAgICAgJ3VjczJsZW5ndGgnLFxuICAgICAgICAnVmFsaWRhdGlvbkVycm9yJyxcbiAgICAgICAgc291cmNlQ29kZVxuICAgICAgKTtcblxuICAgICAgdmFsaWRhdGUgPSBtYWtlVmFsaWRhdGUoXG4gICAgICAgIHNlbGYsXG4gICAgICAgIFJVTEVTLFxuICAgICAgICBmb3JtYXRzLFxuICAgICAgICByb290LFxuICAgICAgICByZWZWYWwsXG4gICAgICAgIGRlZmF1bHRzLFxuICAgICAgICBjdXN0b21SdWxlcyxcbiAgICAgICAgZXF1YWwsXG4gICAgICAgIHVjczJsZW5ndGgsXG4gICAgICAgIFZhbGlkYXRpb25FcnJvclxuICAgICAgKTtcblxuICAgICAgcmVmVmFsWzBdID0gdmFsaWRhdGU7XG4gICAgfSBjYXRjaChlKSB7XG4gICAgICBzZWxmLmxvZ2dlci5lcnJvcignRXJyb3IgY29tcGlsaW5nIHNjaGVtYSwgZnVuY3Rpb24gY29kZTonLCBzb3VyY2VDb2RlKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUuc2NoZW1hID0gX3NjaGVtYTtcbiAgICB2YWxpZGF0ZS5lcnJvcnMgPSBudWxsO1xuICAgIHZhbGlkYXRlLnJlZnMgPSByZWZzO1xuICAgIHZhbGlkYXRlLnJlZlZhbCA9IHJlZlZhbDtcbiAgICB2YWxpZGF0ZS5yb290ID0gaXNSb290ID8gdmFsaWRhdGUgOiBfcm9vdDtcbiAgICBpZiAoJGFzeW5jKSB2YWxpZGF0ZS4kYXN5bmMgPSB0cnVlO1xuICAgIGlmIChvcHRzLnNvdXJjZUNvZGUgPT09IHRydWUpIHtcbiAgICAgIHZhbGlkYXRlLnNvdXJjZSA9IHtcbiAgICAgICAgY29kZTogc291cmNlQ29kZSxcbiAgICAgICAgcGF0dGVybnM6IHBhdHRlcm5zLFxuICAgICAgICBkZWZhdWx0czogZGVmYXVsdHNcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzb2x2ZVJlZihiYXNlSWQsIHJlZiwgaXNSb290KSB7XG4gICAgcmVmID0gcmVzb2x2ZS51cmwoYmFzZUlkLCByZWYpO1xuICAgIHZhciByZWZJbmRleCA9IHJlZnNbcmVmXTtcbiAgICB2YXIgX3JlZlZhbCwgcmVmQ29kZTtcbiAgICBpZiAocmVmSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgX3JlZlZhbCA9IHJlZlZhbFtyZWZJbmRleF07XG4gICAgICByZWZDb2RlID0gJ3JlZlZhbFsnICsgcmVmSW5kZXggKyAnXSc7XG4gICAgICByZXR1cm4gcmVzb2x2ZWRSZWYoX3JlZlZhbCwgcmVmQ29kZSk7XG4gICAgfVxuICAgIGlmICghaXNSb290ICYmIHJvb3QucmVmcykge1xuICAgICAgdmFyIHJvb3RSZWZJZCA9IHJvb3QucmVmc1tyZWZdO1xuICAgICAgaWYgKHJvb3RSZWZJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIF9yZWZWYWwgPSByb290LnJlZlZhbFtyb290UmVmSWRdO1xuICAgICAgICByZWZDb2RlID0gYWRkTG9jYWxSZWYocmVmLCBfcmVmVmFsKTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVkUmVmKF9yZWZWYWwsIHJlZkNvZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlZkNvZGUgPSBhZGRMb2NhbFJlZihyZWYpO1xuICAgIHZhciB2ID0gcmVzb2x2ZS5jYWxsKHNlbGYsIGxvY2FsQ29tcGlsZSwgcm9vdCwgcmVmKTtcbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgbG9jYWxTY2hlbWEgPSBsb2NhbFJlZnMgJiYgbG9jYWxSZWZzW3JlZl07XG4gICAgICBpZiAobG9jYWxTY2hlbWEpIHtcbiAgICAgICAgdiA9IHJlc29sdmUuaW5saW5lUmVmKGxvY2FsU2NoZW1hLCBvcHRzLmlubGluZVJlZnMpXG4gICAgICAgICAgICA/IGxvY2FsU2NoZW1hXG4gICAgICAgICAgICA6IGNvbXBpbGUuY2FsbChzZWxmLCBsb2NhbFNjaGVtYSwgcm9vdCwgbG9jYWxSZWZzLCBiYXNlSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlbW92ZUxvY2FsUmVmKHJlZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcGxhY2VMb2NhbFJlZihyZWYsIHYpO1xuICAgICAgcmV0dXJuIHJlc29sdmVkUmVmKHYsIHJlZkNvZGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZExvY2FsUmVmKHJlZiwgdikge1xuICAgIHZhciByZWZJZCA9IHJlZlZhbC5sZW5ndGg7XG4gICAgcmVmVmFsW3JlZklkXSA9IHY7XG4gICAgcmVmc1tyZWZdID0gcmVmSWQ7XG4gICAgcmV0dXJuICdyZWZWYWwnICsgcmVmSWQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVMb2NhbFJlZihyZWYpIHtcbiAgICBkZWxldGUgcmVmc1tyZWZdO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVwbGFjZUxvY2FsUmVmKHJlZiwgdikge1xuICAgIHZhciByZWZJZCA9IHJlZnNbcmVmXTtcbiAgICByZWZWYWxbcmVmSWRdID0gdjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc29sdmVkUmVmKHJlZlZhbCwgY29kZSkge1xuICAgIHJldHVybiB0eXBlb2YgcmVmVmFsID09ICdvYmplY3QnIHx8IHR5cGVvZiByZWZWYWwgPT0gJ2Jvb2xlYW4nXG4gICAgICAgICAgICA/IHsgY29kZTogY29kZSwgc2NoZW1hOiByZWZWYWwsIGlubGluZTogdHJ1ZSB9XG4gICAgICAgICAgICA6IHsgY29kZTogY29kZSwgJGFzeW5jOiByZWZWYWwgJiYgISFyZWZWYWwuJGFzeW5jIH07XG4gIH1cblxuICBmdW5jdGlvbiB1c2VQYXR0ZXJuKHJlZ2V4U3RyKSB7XG4gICAgdmFyIGluZGV4ID0gcGF0dGVybnNIYXNoW3JlZ2V4U3RyXTtcbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5kZXggPSBwYXR0ZXJuc0hhc2hbcmVnZXhTdHJdID0gcGF0dGVybnMubGVuZ3RoO1xuICAgICAgcGF0dGVybnNbaW5kZXhdID0gcmVnZXhTdHI7XG4gICAgfVxuICAgIHJldHVybiAncGF0dGVybicgKyBpbmRleDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVzZURlZmF1bHQodmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICByZXR1cm4gJycgKyB2YWx1ZTtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiB1dGlsLnRvUXVvdGVkU3RyaW5nKHZhbHVlKTtcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICdudWxsJztcbiAgICAgICAgdmFyIHZhbHVlU3RyID0gc3RhYmxlU3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgdmFyIGluZGV4ID0gZGVmYXVsdHNIYXNoW3ZhbHVlU3RyXTtcbiAgICAgICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpbmRleCA9IGRlZmF1bHRzSGFzaFt2YWx1ZVN0cl0gPSBkZWZhdWx0cy5sZW5ndGg7XG4gICAgICAgICAgZGVmYXVsdHNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdkZWZhdWx0JyArIGluZGV4O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVzZUN1c3RvbVJ1bGUocnVsZSwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0KSB7XG4gICAgaWYgKHNlbGYuX29wdHMudmFsaWRhdGVTY2hlbWEgIT09IGZhbHNlKSB7XG4gICAgICB2YXIgZGVwcyA9IHJ1bGUuZGVmaW5pdGlvbi5kZXBlbmRlbmNpZXM7XG4gICAgICBpZiAoZGVwcyAmJiAhZGVwcy5ldmVyeShmdW5jdGlvbihrZXl3b3JkKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGFyZW50U2NoZW1hLCBrZXl3b3JkKTtcbiAgICAgIH0pKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCBzY2hlbWEgbXVzdCBoYXZlIGFsbCByZXF1aXJlZCBrZXl3b3JkczogJyArIGRlcHMuam9pbignLCcpKTtcblxuICAgICAgdmFyIHZhbGlkYXRlU2NoZW1hID0gcnVsZS5kZWZpbml0aW9uLnZhbGlkYXRlU2NoZW1hO1xuICAgICAgaWYgKHZhbGlkYXRlU2NoZW1hKSB7XG4gICAgICAgIHZhciB2YWxpZCA9IHZhbGlkYXRlU2NoZW1hKHNjaGVtYSk7XG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICB2YXIgbWVzc2FnZSA9ICdrZXl3b3JkIHNjaGVtYSBpcyBpbnZhbGlkOiAnICsgc2VsZi5lcnJvcnNUZXh0KHZhbGlkYXRlU2NoZW1hLmVycm9ycyk7XG4gICAgICAgICAgaWYgKHNlbGYuX29wdHMudmFsaWRhdGVTY2hlbWEgPT0gJ2xvZycpIHNlbGYubG9nZ2VyLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNvbXBpbGUgPSBydWxlLmRlZmluaXRpb24uY29tcGlsZVxuICAgICAgLCBpbmxpbmUgPSBydWxlLmRlZmluaXRpb24uaW5saW5lXG4gICAgICAsIG1hY3JvID0gcnVsZS5kZWZpbml0aW9uLm1hY3JvO1xuXG4gICAgdmFyIHZhbGlkYXRlO1xuICAgIGlmIChjb21waWxlKSB7XG4gICAgICB2YWxpZGF0ZSA9IGNvbXBpbGUuY2FsbChzZWxmLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQpO1xuICAgIH0gZWxzZSBpZiAobWFjcm8pIHtcbiAgICAgIHZhbGlkYXRlID0gbWFjcm8uY2FsbChzZWxmLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQpO1xuICAgICAgaWYgKG9wdHMudmFsaWRhdGVTY2hlbWEgIT09IGZhbHNlKSBzZWxmLnZhbGlkYXRlU2NoZW1hKHZhbGlkYXRlLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKGlubGluZSkge1xuICAgICAgdmFsaWRhdGUgPSBpbmxpbmUuY2FsbChzZWxmLCBpdCwgcnVsZS5rZXl3b3JkLCBzY2hlbWEsIHBhcmVudFNjaGVtYSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbGlkYXRlID0gcnVsZS5kZWZpbml0aW9uLnZhbGlkYXRlO1xuICAgICAgaWYgKCF2YWxpZGF0ZSkgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjdXN0b20ga2V5d29yZCBcIicgKyBydWxlLmtleXdvcmQgKyAnXCJmYWlsZWQgdG8gY29tcGlsZScpO1xuXG4gICAgdmFyIGluZGV4ID0gY3VzdG9tUnVsZXMubGVuZ3RoO1xuICAgIGN1c3RvbVJ1bGVzW2luZGV4XSA9IHZhbGlkYXRlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGU6ICdjdXN0b21SdWxlJyArIGluZGV4LFxuICAgICAgdmFsaWRhdGU6IHZhbGlkYXRlXG4gICAgfTtcbiAgfVxufVxuXG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBzY2hlbWEgaXMgY3VycmVudGx5IGNvbXBpbGVkXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtICB7T2JqZWN0fSBzY2hlbWEgc2NoZW1hIHRvIGNvbXBpbGVcbiAqIEBwYXJhbSAge09iamVjdH0gcm9vdCByb290IG9iamVjdFxuICogQHBhcmFtICB7U3RyaW5nfSBiYXNlSWQgYmFzZSBzY2hlbWEgSURcbiAqIEByZXR1cm4ge09iamVjdH0gb2JqZWN0IHdpdGggcHJvcGVydGllcyBcImluZGV4XCIgKGNvbXBpbGF0aW9uIGluZGV4KSBhbmQgXCJjb21waWxpbmdcIiAoYm9vbGVhbilcbiAqL1xuZnVuY3Rpb24gY2hlY2tDb21waWxpbmcoc2NoZW1hLCByb290LCBiYXNlSWQpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICB2YXIgaW5kZXggPSBjb21wSW5kZXguY2FsbCh0aGlzLCBzY2hlbWEsIHJvb3QsIGJhc2VJZCk7XG4gIGlmIChpbmRleCA+PSAwKSByZXR1cm4geyBpbmRleDogaW5kZXgsIGNvbXBpbGluZzogdHJ1ZSB9O1xuICBpbmRleCA9IHRoaXMuX2NvbXBpbGF0aW9ucy5sZW5ndGg7XG4gIHRoaXMuX2NvbXBpbGF0aW9uc1tpbmRleF0gPSB7XG4gICAgc2NoZW1hOiBzY2hlbWEsXG4gICAgcm9vdDogcm9vdCxcbiAgICBiYXNlSWQ6IGJhc2VJZFxuICB9O1xuICByZXR1cm4geyBpbmRleDogaW5kZXgsIGNvbXBpbGluZzogZmFsc2UgfTtcbn1cblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIHNjaGVtYSBmcm9tIHRoZSBjdXJyZW50bHkgY29tcGlsZWQgbGlzdFxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSAge09iamVjdH0gc2NoZW1hIHNjaGVtYSB0byBjb21waWxlXG4gKiBAcGFyYW0gIHtPYmplY3R9IHJvb3Qgcm9vdCBvYmplY3RcbiAqIEBwYXJhbSAge1N0cmluZ30gYmFzZUlkIGJhc2Ugc2NoZW1hIElEXG4gKi9cbmZ1bmN0aW9uIGVuZENvbXBpbGluZyhzY2hlbWEsIHJvb3QsIGJhc2VJZCkge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIHZhciBpID0gY29tcEluZGV4LmNhbGwodGhpcywgc2NoZW1hLCByb290LCBiYXNlSWQpO1xuICBpZiAoaSA+PSAwKSB0aGlzLl9jb21waWxhdGlvbnMuc3BsaWNlKGksIDEpO1xufVxuXG5cbi8qKlxuICogSW5kZXggb2Ygc2NoZW1hIGNvbXBpbGF0aW9uIGluIHRoZSBjdXJyZW50bHkgY29tcGlsZWQgbGlzdFxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSAge09iamVjdH0gc2NoZW1hIHNjaGVtYSB0byBjb21waWxlXG4gKiBAcGFyYW0gIHtPYmplY3R9IHJvb3Qgcm9vdCBvYmplY3RcbiAqIEBwYXJhbSAge1N0cmluZ30gYmFzZUlkIGJhc2Ugc2NoZW1hIElEXG4gKiBAcmV0dXJuIHtJbnRlZ2VyfSBjb21waWxhdGlvbiBpbmRleFxuICovXG5mdW5jdGlvbiBjb21wSW5kZXgoc2NoZW1hLCByb290LCBiYXNlSWQpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICBmb3IgKHZhciBpPTA7IGk8dGhpcy5fY29tcGlsYXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGMgPSB0aGlzLl9jb21waWxhdGlvbnNbaV07XG4gICAgaWYgKGMuc2NoZW1hID09IHNjaGVtYSAmJiBjLnJvb3QgPT0gcm9vdCAmJiBjLmJhc2VJZCA9PSBiYXNlSWQpIHJldHVybiBpO1xuICB9XG4gIHJldHVybiAtMTtcbn1cblxuXG5mdW5jdGlvbiBwYXR0ZXJuQ29kZShpLCBwYXR0ZXJucykge1xuICByZXR1cm4gJ3ZhciBwYXR0ZXJuJyArIGkgKyAnID0gbmV3IFJlZ0V4cCgnICsgdXRpbC50b1F1b3RlZFN0cmluZyhwYXR0ZXJuc1tpXSkgKyAnKTsnO1xufVxuXG5cbmZ1bmN0aW9uIGRlZmF1bHRDb2RlKGkpIHtcbiAgcmV0dXJuICd2YXIgZGVmYXVsdCcgKyBpICsgJyA9IGRlZmF1bHRzWycgKyBpICsgJ107Jztcbn1cblxuXG5mdW5jdGlvbiByZWZWYWxDb2RlKGksIHJlZlZhbCkge1xuICByZXR1cm4gcmVmVmFsW2ldID09PSB1bmRlZmluZWQgPyAnJyA6ICd2YXIgcmVmVmFsJyArIGkgKyAnID0gcmVmVmFsWycgKyBpICsgJ107Jztcbn1cblxuXG5mdW5jdGlvbiBjdXN0b21SdWxlQ29kZShpKSB7XG4gIHJldHVybiAndmFyIGN1c3RvbVJ1bGUnICsgaSArICcgPSBjdXN0b21SdWxlc1snICsgaSArICddOyc7XG59XG5cblxuZnVuY3Rpb24gdmFycyhhcnIsIHN0YXRlbWVudCkge1xuICBpZiAoIWFyci5sZW5ndGgpIHJldHVybiAnJztcbiAgdmFyIGNvZGUgPSAnJztcbiAgZm9yICh2YXIgaT0wOyBpPGFyci5sZW5ndGg7IGkrKylcbiAgICBjb2RlICs9IHN0YXRlbWVudChpLCBhcnIpO1xuICByZXR1cm4gY29kZTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFVSSSA9IHJlcXVpcmUoJ3VyaS1qcycpXG4gICwgZXF1YWwgPSByZXF1aXJlKCdmYXN0LWRlZXAtZXF1YWwnKVxuICAsIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuICAsIFNjaGVtYU9iamVjdCA9IHJlcXVpcmUoJy4vc2NoZW1hX29iaicpXG4gICwgdHJhdmVyc2UgPSByZXF1aXJlKCdqc29uLXNjaGVtYS10cmF2ZXJzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlc29sdmU7XG5cbnJlc29sdmUubm9ybWFsaXplSWQgPSBub3JtYWxpemVJZDtcbnJlc29sdmUuZnVsbFBhdGggPSBnZXRGdWxsUGF0aDtcbnJlc29sdmUudXJsID0gcmVzb2x2ZVVybDtcbnJlc29sdmUuaWRzID0gcmVzb2x2ZUlkcztcbnJlc29sdmUuaW5saW5lUmVmID0gaW5saW5lUmVmO1xucmVzb2x2ZS5zY2hlbWEgPSByZXNvbHZlU2NoZW1hO1xuXG4vKipcbiAqIFtyZXNvbHZlIGFuZCBjb21waWxlIHRoZSByZWZlcmVuY2VzICgkcmVmKV1cbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gY29tcGlsZSByZWZlcmVuY2UgdG8gc2NoZW1hIGNvbXBpbGF0aW9uIGZ1bmNpdG9uIChsb2NhbENvbXBpbGUpXG4gKiBAcGFyYW0gIHtPYmplY3R9IHJvb3Qgb2JqZWN0IHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJvb3Qgc2NoZW1hIGZvciB0aGUgY3VycmVudCBzY2hlbWFcbiAqIEBwYXJhbSAge1N0cmluZ30gcmVmIHJlZmVyZW5jZSB0byByZXNvbHZlXG4gKiBAcmV0dXJuIHtPYmplY3R8RnVuY3Rpb259IHNjaGVtYSBvYmplY3QgKGlmIHRoZSBzY2hlbWEgY2FuIGJlIGlubGluZWQpIG9yIHZhbGlkYXRpb24gZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZShjb21waWxlLCByb290LCByZWYpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICB2YXIgcmVmVmFsID0gdGhpcy5fcmVmc1tyZWZdO1xuICBpZiAodHlwZW9mIHJlZlZhbCA9PSAnc3RyaW5nJykge1xuICAgIGlmICh0aGlzLl9yZWZzW3JlZlZhbF0pIHJlZlZhbCA9IHRoaXMuX3JlZnNbcmVmVmFsXTtcbiAgICBlbHNlIHJldHVybiByZXNvbHZlLmNhbGwodGhpcywgY29tcGlsZSwgcm9vdCwgcmVmVmFsKTtcbiAgfVxuXG4gIHJlZlZhbCA9IHJlZlZhbCB8fCB0aGlzLl9zY2hlbWFzW3JlZl07XG4gIGlmIChyZWZWYWwgaW5zdGFuY2VvZiBTY2hlbWFPYmplY3QpIHtcbiAgICByZXR1cm4gaW5saW5lUmVmKHJlZlZhbC5zY2hlbWEsIHRoaXMuX29wdHMuaW5saW5lUmVmcylcbiAgICAgICAgICAgID8gcmVmVmFsLnNjaGVtYVxuICAgICAgICAgICAgOiByZWZWYWwudmFsaWRhdGUgfHwgdGhpcy5fY29tcGlsZShyZWZWYWwpO1xuICB9XG5cbiAgdmFyIHJlcyA9IHJlc29sdmVTY2hlbWEuY2FsbCh0aGlzLCByb290LCByZWYpO1xuICB2YXIgc2NoZW1hLCB2LCBiYXNlSWQ7XG4gIGlmIChyZXMpIHtcbiAgICBzY2hlbWEgPSByZXMuc2NoZW1hO1xuICAgIHJvb3QgPSByZXMucm9vdDtcbiAgICBiYXNlSWQgPSByZXMuYmFzZUlkO1xuICB9XG5cbiAgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFNjaGVtYU9iamVjdCkge1xuICAgIHYgPSBzY2hlbWEudmFsaWRhdGUgfHwgY29tcGlsZS5jYWxsKHRoaXMsIHNjaGVtYS5zY2hlbWEsIHJvb3QsIHVuZGVmaW5lZCwgYmFzZUlkKTtcbiAgfSBlbHNlIGlmIChzY2hlbWEgIT09IHVuZGVmaW5lZCkge1xuICAgIHYgPSBpbmxpbmVSZWYoc2NoZW1hLCB0aGlzLl9vcHRzLmlubGluZVJlZnMpXG4gICAgICAgID8gc2NoZW1hXG4gICAgICAgIDogY29tcGlsZS5jYWxsKHRoaXMsIHNjaGVtYSwgcm9vdCwgdW5kZWZpbmVkLCBiYXNlSWQpO1xuICB9XG5cbiAgcmV0dXJuIHY7XG59XG5cblxuLyoqXG4gKiBSZXNvbHZlIHNjaGVtYSwgaXRzIHJvb3QgYW5kIGJhc2VJZFxuICogQHRoaXMgQWp2XG4gKiBAcGFyYW0gIHtPYmplY3R9IHJvb3Qgcm9vdCBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIHNjaGVtYSwgcmVmVmFsLCByZWZzXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHJlZiAgcmVmZXJlbmNlIHRvIHJlc29sdmVcbiAqIEByZXR1cm4ge09iamVjdH0gb2JqZWN0IHdpdGggcHJvcGVydGllcyBzY2hlbWEsIHJvb3QsIGJhc2VJZFxuICovXG5mdW5jdGlvbiByZXNvbHZlU2NoZW1hKHJvb3QsIHJlZikge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIHZhciBwID0gVVJJLnBhcnNlKHJlZilcbiAgICAsIHJlZlBhdGggPSBfZ2V0RnVsbFBhdGgocClcbiAgICAsIGJhc2VJZCA9IGdldEZ1bGxQYXRoKHRoaXMuX2dldElkKHJvb3Quc2NoZW1hKSk7XG4gIGlmIChPYmplY3Qua2V5cyhyb290LnNjaGVtYSkubGVuZ3RoID09PSAwIHx8IHJlZlBhdGggIT09IGJhc2VJZCkge1xuICAgIHZhciBpZCA9IG5vcm1hbGl6ZUlkKHJlZlBhdGgpO1xuICAgIHZhciByZWZWYWwgPSB0aGlzLl9yZWZzW2lkXTtcbiAgICBpZiAodHlwZW9mIHJlZlZhbCA9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHJlc29sdmVSZWN1cnNpdmUuY2FsbCh0aGlzLCByb290LCByZWZWYWwsIHApO1xuICAgIH0gZWxzZSBpZiAocmVmVmFsIGluc3RhbmNlb2YgU2NoZW1hT2JqZWN0KSB7XG4gICAgICBpZiAoIXJlZlZhbC52YWxpZGF0ZSkgdGhpcy5fY29tcGlsZShyZWZWYWwpO1xuICAgICAgcm9vdCA9IHJlZlZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVmVmFsID0gdGhpcy5fc2NoZW1hc1tpZF07XG4gICAgICBpZiAocmVmVmFsIGluc3RhbmNlb2YgU2NoZW1hT2JqZWN0KSB7XG4gICAgICAgIGlmICghcmVmVmFsLnZhbGlkYXRlKSB0aGlzLl9jb21waWxlKHJlZlZhbCk7XG4gICAgICAgIGlmIChpZCA9PSBub3JtYWxpemVJZChyZWYpKVxuICAgICAgICAgIHJldHVybiB7IHNjaGVtYTogcmVmVmFsLCByb290OiByb290LCBiYXNlSWQ6IGJhc2VJZCB9O1xuICAgICAgICByb290ID0gcmVmVmFsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXJvb3Quc2NoZW1hKSByZXR1cm47XG4gICAgYmFzZUlkID0gZ2V0RnVsbFBhdGgodGhpcy5fZ2V0SWQocm9vdC5zY2hlbWEpKTtcbiAgfVxuICByZXR1cm4gZ2V0SnNvblBvaW50ZXIuY2FsbCh0aGlzLCBwLCBiYXNlSWQsIHJvb3Quc2NoZW1hLCByb290KTtcbn1cblxuXG4vKiBAdGhpcyBBanYgKi9cbmZ1bmN0aW9uIHJlc29sdmVSZWN1cnNpdmUocm9vdCwgcmVmLCBwYXJzZWRSZWYpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICB2YXIgcmVzID0gcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIHJlZik7XG4gIGlmIChyZXMpIHtcbiAgICB2YXIgc2NoZW1hID0gcmVzLnNjaGVtYTtcbiAgICB2YXIgYmFzZUlkID0gcmVzLmJhc2VJZDtcbiAgICByb290ID0gcmVzLnJvb3Q7XG4gICAgdmFyIGlkID0gdGhpcy5fZ2V0SWQoc2NoZW1hKTtcbiAgICBpZiAoaWQpIGJhc2VJZCA9IHJlc29sdmVVcmwoYmFzZUlkLCBpZCk7XG4gICAgcmV0dXJuIGdldEpzb25Qb2ludGVyLmNhbGwodGhpcywgcGFyc2VkUmVmLCBiYXNlSWQsIHNjaGVtYSwgcm9vdCk7XG4gIH1cbn1cblxuXG52YXIgUFJFVkVOVF9TQ09QRV9DSEFOR0UgPSB1dGlsLnRvSGFzaChbJ3Byb3BlcnRpZXMnLCAncGF0dGVyblByb3BlcnRpZXMnLCAnZW51bScsICdkZXBlbmRlbmNpZXMnLCAnZGVmaW5pdGlvbnMnXSk7XG4vKiBAdGhpcyBBanYgKi9cbmZ1bmN0aW9uIGdldEpzb25Qb2ludGVyKHBhcnNlZFJlZiwgYmFzZUlkLCBzY2hlbWEsIHJvb3QpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICBwYXJzZWRSZWYuZnJhZ21lbnQgPSBwYXJzZWRSZWYuZnJhZ21lbnQgfHwgJyc7XG4gIGlmIChwYXJzZWRSZWYuZnJhZ21lbnQuc2xpY2UoMCwxKSAhPSAnLycpIHJldHVybjtcbiAgdmFyIHBhcnRzID0gcGFyc2VkUmVmLmZyYWdtZW50LnNwbGl0KCcvJyk7XG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwYXJ0ID0gcGFydHNbaV07XG4gICAgaWYgKHBhcnQpIHtcbiAgICAgIHBhcnQgPSB1dGlsLnVuZXNjYXBlRnJhZ21lbnQocGFydCk7XG4gICAgICBzY2hlbWEgPSBzY2hlbWFbcGFydF07XG4gICAgICBpZiAoc2NoZW1hID09PSB1bmRlZmluZWQpIGJyZWFrO1xuICAgICAgdmFyIGlkO1xuICAgICAgaWYgKCFQUkVWRU5UX1NDT1BFX0NIQU5HRVtwYXJ0XSkge1xuICAgICAgICBpZCA9IHRoaXMuX2dldElkKHNjaGVtYSk7XG4gICAgICAgIGlmIChpZCkgYmFzZUlkID0gcmVzb2x2ZVVybChiYXNlSWQsIGlkKTtcbiAgICAgICAgaWYgKHNjaGVtYS4kcmVmKSB7XG4gICAgICAgICAgdmFyICRyZWYgPSByZXNvbHZlVXJsKGJhc2VJZCwgc2NoZW1hLiRyZWYpO1xuICAgICAgICAgIHZhciByZXMgPSByZXNvbHZlU2NoZW1hLmNhbGwodGhpcywgcm9vdCwgJHJlZik7XG4gICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgc2NoZW1hID0gcmVzLnNjaGVtYTtcbiAgICAgICAgICAgIHJvb3QgPSByZXMucm9vdDtcbiAgICAgICAgICAgIGJhc2VJZCA9IHJlcy5iYXNlSWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChzY2hlbWEgIT09IHVuZGVmaW5lZCAmJiBzY2hlbWEgIT09IHJvb3Quc2NoZW1hKVxuICAgIHJldHVybiB7IHNjaGVtYTogc2NoZW1hLCByb290OiByb290LCBiYXNlSWQ6IGJhc2VJZCB9O1xufVxuXG5cbnZhciBTSU1QTEVfSU5MSU5FRCA9IHV0aWwudG9IYXNoKFtcbiAgJ3R5cGUnLCAnZm9ybWF0JywgJ3BhdHRlcm4nLFxuICAnbWF4TGVuZ3RoJywgJ21pbkxlbmd0aCcsXG4gICdtYXhQcm9wZXJ0aWVzJywgJ21pblByb3BlcnRpZXMnLFxuICAnbWF4SXRlbXMnLCAnbWluSXRlbXMnLFxuICAnbWF4aW11bScsICdtaW5pbXVtJyxcbiAgJ3VuaXF1ZUl0ZW1zJywgJ211bHRpcGxlT2YnLFxuICAncmVxdWlyZWQnLCAnZW51bSdcbl0pO1xuZnVuY3Rpb24gaW5saW5lUmVmKHNjaGVtYSwgbGltaXQpIHtcbiAgaWYgKGxpbWl0ID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICBpZiAobGltaXQgPT09IHVuZGVmaW5lZCB8fCBsaW1pdCA9PT0gdHJ1ZSkgcmV0dXJuIGNoZWNrTm9SZWYoc2NoZW1hKTtcbiAgZWxzZSBpZiAobGltaXQpIHJldHVybiBjb3VudEtleXMoc2NoZW1hKSA8PSBsaW1pdDtcbn1cblxuXG5mdW5jdGlvbiBjaGVja05vUmVmKHNjaGVtYSkge1xuICB2YXIgaXRlbTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgIGZvciAodmFyIGk9MDsgaTxzY2hlbWEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGl0ZW0gPSBzY2hlbWFbaV07XG4gICAgICBpZiAodHlwZW9mIGl0ZW0gPT0gJ29iamVjdCcgJiYgIWNoZWNrTm9SZWYoaXRlbSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIga2V5IGluIHNjaGVtYSkge1xuICAgICAgaWYgKGtleSA9PSAnJHJlZicpIHJldHVybiBmYWxzZTtcbiAgICAgIGl0ZW0gPSBzY2hlbWFba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PSAnb2JqZWN0JyAmJiAhY2hlY2tOb1JlZihpdGVtKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuXG5mdW5jdGlvbiBjb3VudEtleXMoc2NoZW1hKSB7XG4gIHZhciBjb3VudCA9IDAsIGl0ZW07XG4gIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpIHtcbiAgICBmb3IgKHZhciBpPTA7IGk8c2NoZW1hLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpdGVtID0gc2NoZW1hW2ldO1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09ICdvYmplY3QnKSBjb3VudCArPSBjb3VudEtleXMoaXRlbSk7XG4gICAgICBpZiAoY291bnQgPT0gSW5maW5pdHkpIHJldHVybiBJbmZpbml0eTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIga2V5IGluIHNjaGVtYSkge1xuICAgICAgaWYgKGtleSA9PSAnJHJlZicpIHJldHVybiBJbmZpbml0eTtcbiAgICAgIGlmIChTSU1QTEVfSU5MSU5FRFtrZXldKSB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtID0gc2NoZW1hW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PSAnb2JqZWN0JykgY291bnQgKz0gY291bnRLZXlzKGl0ZW0pICsgMTtcbiAgICAgICAgaWYgKGNvdW50ID09IEluZmluaXR5KSByZXR1cm4gSW5maW5pdHk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjb3VudDtcbn1cblxuXG5mdW5jdGlvbiBnZXRGdWxsUGF0aChpZCwgbm9ybWFsaXplKSB7XG4gIGlmIChub3JtYWxpemUgIT09IGZhbHNlKSBpZCA9IG5vcm1hbGl6ZUlkKGlkKTtcbiAgdmFyIHAgPSBVUkkucGFyc2UoaWQpO1xuICByZXR1cm4gX2dldEZ1bGxQYXRoKHApO1xufVxuXG5cbmZ1bmN0aW9uIF9nZXRGdWxsUGF0aChwKSB7XG4gIHJldHVybiBVUkkuc2VyaWFsaXplKHApLnNwbGl0KCcjJylbMF0gKyAnIyc7XG59XG5cblxudmFyIFRSQUlMSU5HX1NMQVNIX0hBU0ggPSAvI1xcLz8kLztcbmZ1bmN0aW9uIG5vcm1hbGl6ZUlkKGlkKSB7XG4gIHJldHVybiBpZCA/IGlkLnJlcGxhY2UoVFJBSUxJTkdfU0xBU0hfSEFTSCwgJycpIDogJyc7XG59XG5cblxuZnVuY3Rpb24gcmVzb2x2ZVVybChiYXNlSWQsIGlkKSB7XG4gIGlkID0gbm9ybWFsaXplSWQoaWQpO1xuICByZXR1cm4gVVJJLnJlc29sdmUoYmFzZUlkLCBpZCk7XG59XG5cblxuLyogQHRoaXMgQWp2ICovXG5mdW5jdGlvbiByZXNvbHZlSWRzKHNjaGVtYSkge1xuICB2YXIgc2NoZW1hSWQgPSBub3JtYWxpemVJZCh0aGlzLl9nZXRJZChzY2hlbWEpKTtcbiAgdmFyIGJhc2VJZHMgPSB7Jyc6IHNjaGVtYUlkfTtcbiAgdmFyIGZ1bGxQYXRocyA9IHsnJzogZ2V0RnVsbFBhdGgoc2NoZW1hSWQsIGZhbHNlKX07XG4gIHZhciBsb2NhbFJlZnMgPSB7fTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRyYXZlcnNlKHNjaGVtYSwge2FsbEtleXM6IHRydWV9LCBmdW5jdGlvbihzY2gsIGpzb25QdHIsIHJvb3RTY2hlbWEsIHBhcmVudEpzb25QdHIsIHBhcmVudEtleXdvcmQsIHBhcmVudFNjaGVtYSwga2V5SW5kZXgpIHtcbiAgICBpZiAoanNvblB0ciA9PT0gJycpIHJldHVybjtcbiAgICB2YXIgaWQgPSBzZWxmLl9nZXRJZChzY2gpO1xuICAgIHZhciBiYXNlSWQgPSBiYXNlSWRzW3BhcmVudEpzb25QdHJdO1xuICAgIHZhciBmdWxsUGF0aCA9IGZ1bGxQYXRoc1twYXJlbnRKc29uUHRyXSArICcvJyArIHBhcmVudEtleXdvcmQ7XG4gICAgaWYgKGtleUluZGV4ICE9PSB1bmRlZmluZWQpXG4gICAgICBmdWxsUGF0aCArPSAnLycgKyAodHlwZW9mIGtleUluZGV4ID09ICdudW1iZXInID8ga2V5SW5kZXggOiB1dGlsLmVzY2FwZUZyYWdtZW50KGtleUluZGV4KSk7XG5cbiAgICBpZiAodHlwZW9mIGlkID09ICdzdHJpbmcnKSB7XG4gICAgICBpZCA9IGJhc2VJZCA9IG5vcm1hbGl6ZUlkKGJhc2VJZCA/IFVSSS5yZXNvbHZlKGJhc2VJZCwgaWQpIDogaWQpO1xuXG4gICAgICB2YXIgcmVmVmFsID0gc2VsZi5fcmVmc1tpZF07XG4gICAgICBpZiAodHlwZW9mIHJlZlZhbCA9PSAnc3RyaW5nJykgcmVmVmFsID0gc2VsZi5fcmVmc1tyZWZWYWxdO1xuICAgICAgaWYgKHJlZlZhbCAmJiByZWZWYWwuc2NoZW1hKSB7XG4gICAgICAgIGlmICghZXF1YWwoc2NoLCByZWZWYWwuc2NoZW1hKSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lkIFwiJyArIGlkICsgJ1wiIHJlc29sdmVzIHRvIG1vcmUgdGhhbiBvbmUgc2NoZW1hJyk7XG4gICAgICB9IGVsc2UgaWYgKGlkICE9IG5vcm1hbGl6ZUlkKGZ1bGxQYXRoKSkge1xuICAgICAgICBpZiAoaWRbMF0gPT0gJyMnKSB7XG4gICAgICAgICAgaWYgKGxvY2FsUmVmc1tpZF0gJiYgIWVxdWFsKHNjaCwgbG9jYWxSZWZzW2lkXSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lkIFwiJyArIGlkICsgJ1wiIHJlc29sdmVzIHRvIG1vcmUgdGhhbiBvbmUgc2NoZW1hJyk7XG4gICAgICAgICAgbG9jYWxSZWZzW2lkXSA9IHNjaDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWxmLl9yZWZzW2lkXSA9IGZ1bGxQYXRoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGJhc2VJZHNbanNvblB0cl0gPSBiYXNlSWQ7XG4gICAgZnVsbFBhdGhzW2pzb25QdHJdID0gZnVsbFBhdGg7XG4gIH0pO1xuXG4gIHJldHVybiBsb2NhbFJlZnM7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBydWxlTW9kdWxlcyA9IHJlcXVpcmUoJy4uL2RvdGpzJylcbiAgLCB0b0hhc2ggPSByZXF1aXJlKCcuL3V0aWwnKS50b0hhc2g7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcnVsZXMoKSB7XG4gIHZhciBSVUxFUyA9IFtcbiAgICB7IHR5cGU6ICdudW1iZXInLFxuICAgICAgcnVsZXM6IFsgeyAnbWF4aW11bSc6IFsnZXhjbHVzaXZlTWF4aW11bSddIH0sXG4gICAgICAgICAgICAgICB7ICdtaW5pbXVtJzogWydleGNsdXNpdmVNaW5pbXVtJ10gfSwgJ211bHRpcGxlT2YnLCAnZm9ybWF0J10gfSxcbiAgICB7IHR5cGU6ICdzdHJpbmcnLFxuICAgICAgcnVsZXM6IFsgJ21heExlbmd0aCcsICdtaW5MZW5ndGgnLCAncGF0dGVybicsICdmb3JtYXQnIF0gfSxcbiAgICB7IHR5cGU6ICdhcnJheScsXG4gICAgICBydWxlczogWyAnbWF4SXRlbXMnLCAnbWluSXRlbXMnLCAnaXRlbXMnLCAnY29udGFpbnMnLCAndW5pcXVlSXRlbXMnIF0gfSxcbiAgICB7IHR5cGU6ICdvYmplY3QnLFxuICAgICAgcnVsZXM6IFsgJ21heFByb3BlcnRpZXMnLCAnbWluUHJvcGVydGllcycsICdyZXF1aXJlZCcsICdkZXBlbmRlbmNpZXMnLCAncHJvcGVydHlOYW1lcycsXG4gICAgICAgICAgICAgICB7ICdwcm9wZXJ0aWVzJzogWydhZGRpdGlvbmFsUHJvcGVydGllcycsICdwYXR0ZXJuUHJvcGVydGllcyddIH0gXSB9LFxuICAgIHsgcnVsZXM6IFsgJyRyZWYnLCAnY29uc3QnLCAnZW51bScsICdub3QnLCAnYW55T2YnLCAnb25lT2YnLCAnYWxsT2YnLCAnaWYnIF0gfVxuICBdO1xuXG4gIHZhciBBTEwgPSBbICd0eXBlJywgJyRjb21tZW50JyBdO1xuICB2YXIgS0VZV09SRFMgPSBbXG4gICAgJyRzY2hlbWEnLCAnJGlkJywgJ2lkJywgJyRkYXRhJywgJyRhc3luYycsICd0aXRsZScsXG4gICAgJ2Rlc2NyaXB0aW9uJywgJ2RlZmF1bHQnLCAnZGVmaW5pdGlvbnMnLFxuICAgICdleGFtcGxlcycsICdyZWFkT25seScsICd3cml0ZU9ubHknLFxuICAgICdjb250ZW50TWVkaWFUeXBlJywgJ2NvbnRlbnRFbmNvZGluZycsXG4gICAgJ2FkZGl0aW9uYWxJdGVtcycsICd0aGVuJywgJ2Vsc2UnXG4gIF07XG4gIHZhciBUWVBFUyA9IFsgJ251bWJlcicsICdpbnRlZ2VyJywgJ3N0cmluZycsICdhcnJheScsICdvYmplY3QnLCAnYm9vbGVhbicsICdudWxsJyBdO1xuICBSVUxFUy5hbGwgPSB0b0hhc2goQUxMKTtcbiAgUlVMRVMudHlwZXMgPSB0b0hhc2goVFlQRVMpO1xuXG4gIFJVTEVTLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgZ3JvdXAucnVsZXMgPSBncm91cC5ydWxlcy5tYXAoZnVuY3Rpb24gKGtleXdvcmQpIHtcbiAgICAgIHZhciBpbXBsS2V5d29yZHM7XG4gICAgICBpZiAodHlwZW9mIGtleXdvcmQgPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFyIGtleSA9IE9iamVjdC5rZXlzKGtleXdvcmQpWzBdO1xuICAgICAgICBpbXBsS2V5d29yZHMgPSBrZXl3b3JkW2tleV07XG4gICAgICAgIGtleXdvcmQgPSBrZXk7XG4gICAgICAgIGltcGxLZXl3b3Jkcy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgQUxMLnB1c2goayk7XG4gICAgICAgICAgUlVMRVMuYWxsW2tdID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBBTEwucHVzaChrZXl3b3JkKTtcbiAgICAgIHZhciBydWxlID0gUlVMRVMuYWxsW2tleXdvcmRdID0ge1xuICAgICAgICBrZXl3b3JkOiBrZXl3b3JkLFxuICAgICAgICBjb2RlOiBydWxlTW9kdWxlc1trZXl3b3JkXSxcbiAgICAgICAgaW1wbGVtZW50czogaW1wbEtleXdvcmRzXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJ1bGU7XG4gICAgfSk7XG5cbiAgICBSVUxFUy5hbGwuJGNvbW1lbnQgPSB7XG4gICAgICBrZXl3b3JkOiAnJGNvbW1lbnQnLFxuICAgICAgY29kZTogcnVsZU1vZHVsZXMuJGNvbW1lbnRcbiAgICB9O1xuXG4gICAgaWYgKGdyb3VwLnR5cGUpIFJVTEVTLnR5cGVzW2dyb3VwLnR5cGVdID0gZ3JvdXA7XG4gIH0pO1xuXG4gIFJVTEVTLmtleXdvcmRzID0gdG9IYXNoKEFMTC5jb25jYXQoS0VZV09SRFMpKTtcbiAgUlVMRVMuY3VzdG9tID0ge307XG5cbiAgcmV0dXJuIFJVTEVTO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTY2hlbWFPYmplY3Q7XG5cbmZ1bmN0aW9uIFNjaGVtYU9iamVjdChvYmopIHtcbiAgdXRpbC5jb3B5KG9iaiwgdGhpcyk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nXG4vLyBodHRwczovL2dpdGh1Yi5jb20vYmVzdGllanMvcHVueWNvZGUuanMgLSBwdW55Y29kZS51Y3MyLmRlY29kZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB1Y3MybGVuZ3RoKHN0cikge1xuICB2YXIgbGVuZ3RoID0gMFxuICAgICwgbGVuID0gc3RyLmxlbmd0aFxuICAgICwgcG9zID0gMFxuICAgICwgdmFsdWU7XG4gIHdoaWxlIChwb3MgPCBsZW4pIHtcbiAgICBsZW5ndGgrKztcbiAgICB2YWx1ZSA9IHN0ci5jaGFyQ29kZUF0KHBvcysrKTtcbiAgICBpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBwb3MgPCBsZW4pIHtcbiAgICAgIC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuICAgICAgdmFsdWUgPSBzdHIuY2hhckNvZGVBdChwb3MpO1xuICAgICAgaWYgKCh2YWx1ZSAmIDB4RkMwMCkgPT0gMHhEQzAwKSBwb3MrKzsgLy8gbG93IHN1cnJvZ2F0ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gbGVuZ3RoO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29weTogY29weSxcbiAgY2hlY2tEYXRhVHlwZTogY2hlY2tEYXRhVHlwZSxcbiAgY2hlY2tEYXRhVHlwZXM6IGNoZWNrRGF0YVR5cGVzLFxuICBjb2VyY2VUb1R5cGVzOiBjb2VyY2VUb1R5cGVzLFxuICB0b0hhc2g6IHRvSGFzaCxcbiAgZ2V0UHJvcGVydHk6IGdldFByb3BlcnR5LFxuICBlc2NhcGVRdW90ZXM6IGVzY2FwZVF1b3RlcyxcbiAgZXF1YWw6IHJlcXVpcmUoJ2Zhc3QtZGVlcC1lcXVhbCcpLFxuICB1Y3MybGVuZ3RoOiByZXF1aXJlKCcuL3VjczJsZW5ndGgnKSxcbiAgdmFyT2NjdXJlbmNlczogdmFyT2NjdXJlbmNlcyxcbiAgdmFyUmVwbGFjZTogdmFyUmVwbGFjZSxcbiAgc2NoZW1hSGFzUnVsZXM6IHNjaGVtYUhhc1J1bGVzLFxuICBzY2hlbWFIYXNSdWxlc0V4Y2VwdDogc2NoZW1hSGFzUnVsZXNFeGNlcHQsXG4gIHNjaGVtYVVua25vd25SdWxlczogc2NoZW1hVW5rbm93blJ1bGVzLFxuICB0b1F1b3RlZFN0cmluZzogdG9RdW90ZWRTdHJpbmcsXG4gIGdldFBhdGhFeHByOiBnZXRQYXRoRXhwcixcbiAgZ2V0UGF0aDogZ2V0UGF0aCxcbiAgZ2V0RGF0YTogZ2V0RGF0YSxcbiAgdW5lc2NhcGVGcmFnbWVudDogdW5lc2NhcGVGcmFnbWVudCxcbiAgdW5lc2NhcGVKc29uUG9pbnRlcjogdW5lc2NhcGVKc29uUG9pbnRlcixcbiAgZXNjYXBlRnJhZ21lbnQ6IGVzY2FwZUZyYWdtZW50LFxuICBlc2NhcGVKc29uUG9pbnRlcjogZXNjYXBlSnNvblBvaW50ZXJcbn07XG5cblxuZnVuY3Rpb24gY29weShvLCB0bykge1xuICB0byA9IHRvIHx8IHt9O1xuICBmb3IgKHZhciBrZXkgaW4gbykgdG9ba2V5XSA9IG9ba2V5XTtcbiAgcmV0dXJuIHRvO1xufVxuXG5cbmZ1bmN0aW9uIGNoZWNrRGF0YVR5cGUoZGF0YVR5cGUsIGRhdGEsIHN0cmljdE51bWJlcnMsIG5lZ2F0ZSkge1xuICB2YXIgRVFVQUwgPSBuZWdhdGUgPyAnICE9PSAnIDogJyA9PT0gJ1xuICAgICwgQU5EID0gbmVnYXRlID8gJyB8fCAnIDogJyAmJiAnXG4gICAgLCBPSyA9IG5lZ2F0ZSA/ICchJyA6ICcnXG4gICAgLCBOT1QgPSBuZWdhdGUgPyAnJyA6ICchJztcbiAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgIGNhc2UgJ251bGwnOiByZXR1cm4gZGF0YSArIEVRVUFMICsgJ251bGwnO1xuICAgIGNhc2UgJ2FycmF5JzogcmV0dXJuIE9LICsgJ0FycmF5LmlzQXJyYXkoJyArIGRhdGEgKyAnKSc7XG4gICAgY2FzZSAnb2JqZWN0JzogcmV0dXJuICcoJyArIE9LICsgZGF0YSArIEFORCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlb2YgJyArIGRhdGEgKyBFUVVBTCArICdcIm9iamVjdFwiJyArIEFORCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIE5PVCArICdBcnJheS5pc0FycmF5KCcgKyBkYXRhICsgJykpJztcbiAgICBjYXNlICdpbnRlZ2VyJzogcmV0dXJuICcodHlwZW9mICcgKyBkYXRhICsgRVFVQUwgKyAnXCJudW1iZXJcIicgKyBBTkQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9UICsgJygnICsgZGF0YSArICcgJSAxKScgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EICsgZGF0YSArIEVRVUFMICsgZGF0YSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaWN0TnVtYmVycyA/IChBTkQgKyBPSyArICdpc0Zpbml0ZSgnICsgZGF0YSArICcpJykgOiAnJykgKyAnKSc7XG4gICAgY2FzZSAnbnVtYmVyJzogcmV0dXJuICcodHlwZW9mICcgKyBkYXRhICsgRVFVQUwgKyAnXCInICsgZGF0YVR5cGUgKyAnXCInICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmljdE51bWJlcnMgPyAoQU5EICsgT0sgKyAnaXNGaW5pdGUoJyArIGRhdGEgKyAnKScpIDogJycpICsgJyknO1xuICAgIGRlZmF1bHQ6IHJldHVybiAndHlwZW9mICcgKyBkYXRhICsgRVFVQUwgKyAnXCInICsgZGF0YVR5cGUgKyAnXCInO1xuICB9XG59XG5cblxuZnVuY3Rpb24gY2hlY2tEYXRhVHlwZXMoZGF0YVR5cGVzLCBkYXRhLCBzdHJpY3ROdW1iZXJzKSB7XG4gIHN3aXRjaCAoZGF0YVR5cGVzLmxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGNoZWNrRGF0YVR5cGUoZGF0YVR5cGVzWzBdLCBkYXRhLCBzdHJpY3ROdW1iZXJzLCB0cnVlKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdmFyIGNvZGUgPSAnJztcbiAgICAgIHZhciB0eXBlcyA9IHRvSGFzaChkYXRhVHlwZXMpO1xuICAgICAgaWYgKHR5cGVzLmFycmF5ICYmIHR5cGVzLm9iamVjdCkge1xuICAgICAgICBjb2RlID0gdHlwZXMubnVsbCA/ICcoJzogJyghJyArIGRhdGEgKyAnIHx8ICc7XG4gICAgICAgIGNvZGUgKz0gJ3R5cGVvZiAnICsgZGF0YSArICcgIT09IFwib2JqZWN0XCIpJztcbiAgICAgICAgZGVsZXRlIHR5cGVzLm51bGw7XG4gICAgICAgIGRlbGV0ZSB0eXBlcy5hcnJheTtcbiAgICAgICAgZGVsZXRlIHR5cGVzLm9iamVjdDtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlcy5udW1iZXIpIGRlbGV0ZSB0eXBlcy5pbnRlZ2VyO1xuICAgICAgZm9yICh2YXIgdCBpbiB0eXBlcylcbiAgICAgICAgY29kZSArPSAoY29kZSA/ICcgJiYgJyA6ICcnICkgKyBjaGVja0RhdGFUeXBlKHQsIGRhdGEsIHN0cmljdE51bWJlcnMsIHRydWUpO1xuXG4gICAgICByZXR1cm4gY29kZTtcbiAgfVxufVxuXG5cbnZhciBDT0VSQ0VfVE9fVFlQRVMgPSB0b0hhc2goWyAnc3RyaW5nJywgJ251bWJlcicsICdpbnRlZ2VyJywgJ2Jvb2xlYW4nLCAnbnVsbCcgXSk7XG5mdW5jdGlvbiBjb2VyY2VUb1R5cGVzKG9wdGlvbkNvZXJjZVR5cGVzLCBkYXRhVHlwZXMpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YVR5cGVzKSkge1xuICAgIHZhciB0eXBlcyA9IFtdO1xuICAgIGZvciAodmFyIGk9MDsgaTxkYXRhVHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0ID0gZGF0YVR5cGVzW2ldO1xuICAgICAgaWYgKENPRVJDRV9UT19UWVBFU1t0XSkgdHlwZXNbdHlwZXMubGVuZ3RoXSA9IHQ7XG4gICAgICBlbHNlIGlmIChvcHRpb25Db2VyY2VUeXBlcyA9PT0gJ2FycmF5JyAmJiB0ID09PSAnYXJyYXknKSB0eXBlc1t0eXBlcy5sZW5ndGhdID0gdDtcbiAgICB9XG4gICAgaWYgKHR5cGVzLmxlbmd0aCkgcmV0dXJuIHR5cGVzO1xuICB9IGVsc2UgaWYgKENPRVJDRV9UT19UWVBFU1tkYXRhVHlwZXNdKSB7XG4gICAgcmV0dXJuIFtkYXRhVHlwZXNdO1xuICB9IGVsc2UgaWYgKG9wdGlvbkNvZXJjZVR5cGVzID09PSAnYXJyYXknICYmIGRhdGFUeXBlcyA9PT0gJ2FycmF5Jykge1xuICAgIHJldHVybiBbJ2FycmF5J107XG4gIH1cbn1cblxuXG5mdW5jdGlvbiB0b0hhc2goYXJyKSB7XG4gIHZhciBoYXNoID0ge307XG4gIGZvciAodmFyIGk9MDsgaTxhcnIubGVuZ3RoOyBpKyspIGhhc2hbYXJyW2ldXSA9IHRydWU7XG4gIHJldHVybiBoYXNoO1xufVxuXG5cbnZhciBJREVOVElGSUVSID0gL15bYS16JF9dW2EteiRfMC05XSokL2k7XG52YXIgU0lOR0xFX1FVT1RFID0gLyd8XFxcXC9nO1xuZnVuY3Rpb24gZ2V0UHJvcGVydHkoa2V5KSB7XG4gIHJldHVybiB0eXBlb2Yga2V5ID09ICdudW1iZXInXG4gICAgICAgICAgPyAnWycgKyBrZXkgKyAnXSdcbiAgICAgICAgICA6IElERU5USUZJRVIudGVzdChrZXkpXG4gICAgICAgICAgICA/ICcuJyArIGtleVxuICAgICAgICAgICAgOiBcIlsnXCIgKyBlc2NhcGVRdW90ZXMoa2V5KSArIFwiJ11cIjtcbn1cblxuXG5mdW5jdGlvbiBlc2NhcGVRdW90ZXMoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZShTSU5HTEVfUVVPVEUsICdcXFxcJCYnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcbi9nLCAnXFxcXG4nKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcci9nLCAnXFxcXHInKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcZi9nLCAnXFxcXGYnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcdC9nLCAnXFxcXHQnKTtcbn1cblxuXG5mdW5jdGlvbiB2YXJPY2N1cmVuY2VzKHN0ciwgZGF0YVZhcikge1xuICBkYXRhVmFyICs9ICdbXjAtOV0nO1xuICB2YXIgbWF0Y2hlcyA9IHN0ci5tYXRjaChuZXcgUmVnRXhwKGRhdGFWYXIsICdnJykpO1xuICByZXR1cm4gbWF0Y2hlcyA/IG1hdGNoZXMubGVuZ3RoIDogMDtcbn1cblxuXG5mdW5jdGlvbiB2YXJSZXBsYWNlKHN0ciwgZGF0YVZhciwgZXhwcikge1xuICBkYXRhVmFyICs9ICcoW14wLTldKSc7XG4gIGV4cHIgPSBleHByLnJlcGxhY2UoL1xcJC9nLCAnJCQkJCcpO1xuICByZXR1cm4gc3RyLnJlcGxhY2UobmV3IFJlZ0V4cChkYXRhVmFyLCAnZycpLCBleHByICsgJyQxJyk7XG59XG5cblxuZnVuY3Rpb24gc2NoZW1hSGFzUnVsZXMoc2NoZW1hLCBydWxlcykge1xuICBpZiAodHlwZW9mIHNjaGVtYSA9PSAnYm9vbGVhbicpIHJldHVybiAhc2NoZW1hO1xuICBmb3IgKHZhciBrZXkgaW4gc2NoZW1hKSBpZiAocnVsZXNba2V5XSkgcmV0dXJuIHRydWU7XG59XG5cblxuZnVuY3Rpb24gc2NoZW1hSGFzUnVsZXNFeGNlcHQoc2NoZW1hLCBydWxlcywgZXhjZXB0S2V5d29yZCkge1xuICBpZiAodHlwZW9mIHNjaGVtYSA9PSAnYm9vbGVhbicpIHJldHVybiAhc2NoZW1hICYmIGV4Y2VwdEtleXdvcmQgIT0gJ25vdCc7XG4gIGZvciAodmFyIGtleSBpbiBzY2hlbWEpIGlmIChrZXkgIT0gZXhjZXB0S2V5d29yZCAmJiBydWxlc1trZXldKSByZXR1cm4gdHJ1ZTtcbn1cblxuXG5mdW5jdGlvbiBzY2hlbWFVbmtub3duUnVsZXMoc2NoZW1hLCBydWxlcykge1xuICBpZiAodHlwZW9mIHNjaGVtYSA9PSAnYm9vbGVhbicpIHJldHVybjtcbiAgZm9yICh2YXIga2V5IGluIHNjaGVtYSkgaWYgKCFydWxlc1trZXldKSByZXR1cm4ga2V5O1xufVxuXG5cbmZ1bmN0aW9uIHRvUXVvdGVkU3RyaW5nKHN0cikge1xuICByZXR1cm4gJ1xcJycgKyBlc2NhcGVRdW90ZXMoc3RyKSArICdcXCcnO1xufVxuXG5cbmZ1bmN0aW9uIGdldFBhdGhFeHByKGN1cnJlbnRQYXRoLCBleHByLCBqc29uUG9pbnRlcnMsIGlzTnVtYmVyKSB7XG4gIHZhciBwYXRoID0ganNvblBvaW50ZXJzIC8vIGZhbHNlIGJ5IGRlZmF1bHRcbiAgICAgICAgICAgICAgPyAnXFwnL1xcJyArICcgKyBleHByICsgKGlzTnVtYmVyID8gJycgOiAnLnJlcGxhY2UoL34vZywgXFwnfjBcXCcpLnJlcGxhY2UoL1xcXFwvL2csIFxcJ34xXFwnKScpXG4gICAgICAgICAgICAgIDogKGlzTnVtYmVyID8gJ1xcJ1tcXCcgKyAnICsgZXhwciArICcgKyBcXCddXFwnJyA6ICdcXCdbXFxcXFxcJ1xcJyArICcgKyBleHByICsgJyArIFxcJ1xcXFxcXCddXFwnJyk7XG4gIHJldHVybiBqb2luUGF0aHMoY3VycmVudFBhdGgsIHBhdGgpO1xufVxuXG5cbmZ1bmN0aW9uIGdldFBhdGgoY3VycmVudFBhdGgsIHByb3AsIGpzb25Qb2ludGVycykge1xuICB2YXIgcGF0aCA9IGpzb25Qb2ludGVycyAvLyBmYWxzZSBieSBkZWZhdWx0XG4gICAgICAgICAgICAgID8gdG9RdW90ZWRTdHJpbmcoJy8nICsgZXNjYXBlSnNvblBvaW50ZXIocHJvcCkpXG4gICAgICAgICAgICAgIDogdG9RdW90ZWRTdHJpbmcoZ2V0UHJvcGVydHkocHJvcCkpO1xuICByZXR1cm4gam9pblBhdGhzKGN1cnJlbnRQYXRoLCBwYXRoKTtcbn1cblxuXG52YXIgSlNPTl9QT0lOVEVSID0gL15cXC8oPzpbXn5dfH4wfH4xKSokLztcbnZhciBSRUxBVElWRV9KU09OX1BPSU5URVIgPSAvXihbMC05XSspKCN8XFwvKD86W15+XXx+MHx+MSkqKT8kLztcbmZ1bmN0aW9uIGdldERhdGEoJGRhdGEsIGx2bCwgcGF0aHMpIHtcbiAgdmFyIHVwLCBqc29uUG9pbnRlciwgZGF0YSwgbWF0Y2hlcztcbiAgaWYgKCRkYXRhID09PSAnJykgcmV0dXJuICdyb290RGF0YSc7XG4gIGlmICgkZGF0YVswXSA9PSAnLycpIHtcbiAgICBpZiAoIUpTT05fUE9JTlRFUi50ZXN0KCRkYXRhKSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEpTT04tcG9pbnRlcjogJyArICRkYXRhKTtcbiAgICBqc29uUG9pbnRlciA9ICRkYXRhO1xuICAgIGRhdGEgPSAncm9vdERhdGEnO1xuICB9IGVsc2Uge1xuICAgIG1hdGNoZXMgPSAkZGF0YS5tYXRjaChSRUxBVElWRV9KU09OX1BPSU5URVIpO1xuICAgIGlmICghbWF0Y2hlcykgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEpTT04tcG9pbnRlcjogJyArICRkYXRhKTtcbiAgICB1cCA9ICttYXRjaGVzWzFdO1xuICAgIGpzb25Qb2ludGVyID0gbWF0Y2hlc1syXTtcbiAgICBpZiAoanNvblBvaW50ZXIgPT0gJyMnKSB7XG4gICAgICBpZiAodXAgPj0gbHZsKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhY2Nlc3MgcHJvcGVydHkvaW5kZXggJyArIHVwICsgJyBsZXZlbHMgdXAsIGN1cnJlbnQgbGV2ZWwgaXMgJyArIGx2bCk7XG4gICAgICByZXR1cm4gcGF0aHNbbHZsIC0gdXBdO1xuICAgIH1cblxuICAgIGlmICh1cCA+IGx2bCkgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWNjZXNzIGRhdGEgJyArIHVwICsgJyBsZXZlbHMgdXAsIGN1cnJlbnQgbGV2ZWwgaXMgJyArIGx2bCk7XG4gICAgZGF0YSA9ICdkYXRhJyArICgobHZsIC0gdXApIHx8ICcnKTtcbiAgICBpZiAoIWpzb25Qb2ludGVyKSByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHZhciBleHByID0gZGF0YTtcbiAgdmFyIHNlZ21lbnRzID0ganNvblBvaW50ZXIuc3BsaXQoJy8nKTtcbiAgZm9yICh2YXIgaT0wOyBpPHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNlZ21lbnQgPSBzZWdtZW50c1tpXTtcbiAgICBpZiAoc2VnbWVudCkge1xuICAgICAgZGF0YSArPSBnZXRQcm9wZXJ0eSh1bmVzY2FwZUpzb25Qb2ludGVyKHNlZ21lbnQpKTtcbiAgICAgIGV4cHIgKz0gJyAmJiAnICsgZGF0YTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGV4cHI7XG59XG5cblxuZnVuY3Rpb24gam9pblBhdGhzIChhLCBiKSB7XG4gIGlmIChhID09ICdcIlwiJykgcmV0dXJuIGI7XG4gIHJldHVybiAoYSArICcgKyAnICsgYikucmVwbGFjZSgvKFteXFxcXF0pJyBcXCsgJy9nLCAnJDEnKTtcbn1cblxuXG5mdW5jdGlvbiB1bmVzY2FwZUZyYWdtZW50KHN0cikge1xuICByZXR1cm4gdW5lc2NhcGVKc29uUG9pbnRlcihkZWNvZGVVUklDb21wb25lbnQoc3RyKSk7XG59XG5cblxuZnVuY3Rpb24gZXNjYXBlRnJhZ21lbnQoc3RyKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoZXNjYXBlSnNvblBvaW50ZXIoc3RyKSk7XG59XG5cblxuZnVuY3Rpb24gZXNjYXBlSnNvblBvaW50ZXIoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvfi9nLCAnfjAnKS5yZXBsYWNlKC9cXC8vZywgJ34xJyk7XG59XG5cblxuZnVuY3Rpb24gdW5lc2NhcGVKc29uUG9pbnRlcihzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9+MS9nLCAnLycpLnJlcGxhY2UoL34wL2csICd+Jyk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBLRVlXT1JEUyA9IFtcbiAgJ211bHRpcGxlT2YnLFxuICAnbWF4aW11bScsXG4gICdleGNsdXNpdmVNYXhpbXVtJyxcbiAgJ21pbmltdW0nLFxuICAnZXhjbHVzaXZlTWluaW11bScsXG4gICdtYXhMZW5ndGgnLFxuICAnbWluTGVuZ3RoJyxcbiAgJ3BhdHRlcm4nLFxuICAnYWRkaXRpb25hbEl0ZW1zJyxcbiAgJ21heEl0ZW1zJyxcbiAgJ21pbkl0ZW1zJyxcbiAgJ3VuaXF1ZUl0ZW1zJyxcbiAgJ21heFByb3BlcnRpZXMnLFxuICAnbWluUHJvcGVydGllcycsXG4gICdyZXF1aXJlZCcsXG4gICdhZGRpdGlvbmFsUHJvcGVydGllcycsXG4gICdlbnVtJyxcbiAgJ2Zvcm1hdCcsXG4gICdjb25zdCdcbl07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGFTY2hlbWEsIGtleXdvcmRzSnNvblBvaW50ZXJzKSB7XG4gIGZvciAodmFyIGk9MDsgaTxrZXl3b3Jkc0pzb25Qb2ludGVycy5sZW5ndGg7IGkrKykge1xuICAgIG1ldGFTY2hlbWEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG1ldGFTY2hlbWEpKTtcbiAgICB2YXIgc2VnbWVudHMgPSBrZXl3b3Jkc0pzb25Qb2ludGVyc1tpXS5zcGxpdCgnLycpO1xuICAgIHZhciBrZXl3b3JkcyA9IG1ldGFTY2hlbWE7XG4gICAgdmFyIGo7XG4gICAgZm9yIChqPTE7IGo8c2VnbWVudHMubGVuZ3RoOyBqKyspXG4gICAgICBrZXl3b3JkcyA9IGtleXdvcmRzW3NlZ21lbnRzW2pdXTtcblxuICAgIGZvciAoaj0wOyBqPEtFWVdPUkRTLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIga2V5ID0gS0VZV09SRFNbal07XG4gICAgICB2YXIgc2NoZW1hID0ga2V5d29yZHNba2V5XTtcbiAgICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAga2V5d29yZHNba2V5XSA9IHtcbiAgICAgICAgICBhbnlPZjogW1xuICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgeyAkcmVmOiAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Fqdi12YWxpZGF0b3IvYWp2L21hc3Rlci9saWIvcmVmcy9kYXRhLmpzb24jJyB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXRhU2NoZW1hO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIG1ldGFTY2hlbWEgPSByZXF1aXJlKCcuL3JlZnMvanNvbi1zY2hlbWEtZHJhZnQtMDcuanNvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgJGlkOiAnaHR0cHM6Ly9naXRodWIuY29tL2Fqdi12YWxpZGF0b3IvYWp2L2Jsb2IvbWFzdGVyL2xpYi9kZWZpbml0aW9uX3NjaGVtYS5qcycsXG4gIGRlZmluaXRpb25zOiB7XG4gICAgc2ltcGxlVHlwZXM6IG1ldGFTY2hlbWEuZGVmaW5pdGlvbnMuc2ltcGxlVHlwZXNcbiAgfSxcbiAgdHlwZTogJ29iamVjdCcsXG4gIGRlcGVuZGVuY2llczoge1xuICAgIHNjaGVtYTogWyd2YWxpZGF0ZSddLFxuICAgICRkYXRhOiBbJ3ZhbGlkYXRlJ10sXG4gICAgc3RhdGVtZW50czogWydpbmxpbmUnXSxcbiAgICB2YWxpZDoge25vdDoge3JlcXVpcmVkOiBbJ21hY3JvJ119fVxuICB9LFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgdHlwZTogbWV0YVNjaGVtYS5wcm9wZXJ0aWVzLnR5cGUsXG4gICAgc2NoZW1hOiB7dHlwZTogJ2Jvb2xlYW4nfSxcbiAgICBzdGF0ZW1lbnRzOiB7dHlwZTogJ2Jvb2xlYW4nfSxcbiAgICBkZXBlbmRlbmNpZXM6IHtcbiAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICBpdGVtczoge3R5cGU6ICdzdHJpbmcnfVxuICAgIH0sXG4gICAgbWV0YVNjaGVtYToge3R5cGU6ICdvYmplY3QnfSxcbiAgICBtb2RpZnlpbmc6IHt0eXBlOiAnYm9vbGVhbid9LFxuICAgIHZhbGlkOiB7dHlwZTogJ2Jvb2xlYW4nfSxcbiAgICAkZGF0YToge3R5cGU6ICdib29sZWFuJ30sXG4gICAgYXN5bmM6IHt0eXBlOiAnYm9vbGVhbid9LFxuICAgIGVycm9yczoge1xuICAgICAgYW55T2Y6IFtcbiAgICAgICAge3R5cGU6ICdib29sZWFuJ30sXG4gICAgICAgIHtjb25zdDogJ2Z1bGwnfVxuICAgICAgXVxuICAgIH1cbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfX2xpbWl0KGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZXJyb3JLZXl3b3JkO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgdmFyICRpc01heCA9ICRrZXl3b3JkID09ICdtYXhpbXVtJyxcbiAgICAkZXhjbHVzaXZlS2V5d29yZCA9ICRpc01heCA/ICdleGNsdXNpdmVNYXhpbXVtJyA6ICdleGNsdXNpdmVNaW5pbXVtJyxcbiAgICAkc2NoZW1hRXhjbCA9IGl0LnNjaGVtYVskZXhjbHVzaXZlS2V5d29yZF0sXG4gICAgJGlzRGF0YUV4Y2wgPSBpdC5vcHRzLiRkYXRhICYmICRzY2hlbWFFeGNsICYmICRzY2hlbWFFeGNsLiRkYXRhLFxuICAgICRvcCA9ICRpc01heCA/ICc8JyA6ICc+JyxcbiAgICAkbm90T3AgPSAkaXNNYXggPyAnPicgOiAnPCcsXG4gICAgJGVycm9yS2V5d29yZCA9IHVuZGVmaW5lZDtcbiAgaWYgKCEoJGlzRGF0YSB8fCB0eXBlb2YgJHNjaGVtYSA9PSAnbnVtYmVyJyB8fCAkc2NoZW1hID09PSB1bmRlZmluZWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCRrZXl3b3JkICsgJyBtdXN0IGJlIG51bWJlcicpO1xuICB9XG4gIGlmICghKCRpc0RhdGFFeGNsIHx8ICRzY2hlbWFFeGNsID09PSB1bmRlZmluZWQgfHwgdHlwZW9mICRzY2hlbWFFeGNsID09ICdudW1iZXInIHx8IHR5cGVvZiAkc2NoZW1hRXhjbCA9PSAnYm9vbGVhbicpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCRleGNsdXNpdmVLZXl3b3JkICsgJyBtdXN0IGJlIG51bWJlciBvciBib29sZWFuJyk7XG4gIH1cbiAgaWYgKCRpc0RhdGFFeGNsKSB7XG4gICAgdmFyICRzY2hlbWFWYWx1ZUV4Y2wgPSBpdC51dGlsLmdldERhdGEoJHNjaGVtYUV4Y2wuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFyciksXG4gICAgICAkZXhjbHVzaXZlID0gJ2V4Y2x1c2l2ZScgKyAkbHZsLFxuICAgICAgJGV4Y2xUeXBlID0gJ2V4Y2xUeXBlJyArICRsdmwsXG4gICAgICAkZXhjbElzTnVtYmVyID0gJ2V4Y2xJc051bWJlcicgKyAkbHZsLFxuICAgICAgJG9wRXhwciA9ICdvcCcgKyAkbHZsLFxuICAgICAgJG9wU3RyID0gJ1xcJyArICcgKyAkb3BFeHByICsgJyArIFxcJyc7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYUV4Y2wnICsgKCRsdmwpICsgJyA9ICcgKyAoJHNjaGVtYVZhbHVlRXhjbCkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZUV4Y2wgPSAnc2NoZW1hRXhjbCcgKyAkbHZsO1xuICAgIG91dCArPSAnIHZhciAnICsgKCRleGNsdXNpdmUpICsgJzsgdmFyICcgKyAoJGV4Y2xUeXBlKSArICcgPSB0eXBlb2YgJyArICgkc2NoZW1hVmFsdWVFeGNsKSArICc7IGlmICgnICsgKCRleGNsVHlwZSkgKyAnICE9IFxcJ2Jvb2xlYW5cXCcgJiYgJyArICgkZXhjbFR5cGUpICsgJyAhPSBcXCd1bmRlZmluZWRcXCcgJiYgJyArICgkZXhjbFR5cGUpICsgJyAhPSBcXCdudW1iZXJcXCcpIHsgJztcbiAgICB2YXIgJGVycm9yS2V5d29yZCA9ICRleGNsdXNpdmVLZXl3b3JkO1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ19leGNsdXNpdmVMaW1pdCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHt9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnICsgKCRleGNsdXNpdmVLZXl3b3JkKSArICcgc2hvdWxkIGJlIGJvb2xlYW5cXCcgJztcbiAgICAgIH1cbiAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgdmFyIF9fZXJyID0gb3V0O1xuICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9IGVsc2UgaWYgKCAnO1xuICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgJyArICgkZXhjbFR5cGUpICsgJyA9PSBcXCdudW1iZXJcXCcgPyAoICgnICsgKCRleGNsdXNpdmUpICsgJyA9ICcgKyAoJHNjaGVtYVZhbHVlKSArICcgPT09IHVuZGVmaW5lZCB8fCAnICsgKCRzY2hlbWFWYWx1ZUV4Y2wpICsgJyAnICsgKCRvcCkgKyAnPSAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnKSA/ICcgKyAoJGRhdGEpICsgJyAnICsgKCRub3RPcCkgKyAnPSAnICsgKCRzY2hlbWFWYWx1ZUV4Y2wpICsgJyA6ICcgKyAoJGRhdGEpICsgJyAnICsgKCRub3RPcCkgKyAnICcgKyAoJHNjaGVtYVZhbHVlKSArICcgKSA6ICggKCcgKyAoJGV4Y2x1c2l2ZSkgKyAnID0gJyArICgkc2NoZW1hVmFsdWVFeGNsKSArICcgPT09IHRydWUpID8gJyArICgkZGF0YSkgKyAnICcgKyAoJG5vdE9wKSArICc9ICcgKyAoJHNjaGVtYVZhbHVlKSArICcgOiAnICsgKCRkYXRhKSArICcgJyArICgkbm90T3ApICsgJyAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICkgfHwgJyArICgkZGF0YSkgKyAnICE9PSAnICsgKCRkYXRhKSArICcpIHsgdmFyIG9wJyArICgkbHZsKSArICcgPSAnICsgKCRleGNsdXNpdmUpICsgJyA/IFxcJycgKyAoJG9wKSArICdcXCcgOiBcXCcnICsgKCRvcCkgKyAnPVxcJzsgJztcbiAgICBpZiAoJHNjaGVtYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAkZXJyb3JLZXl3b3JkID0gJGV4Y2x1c2l2ZUtleXdvcmQ7XG4gICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAkZXhjbHVzaXZlS2V5d29yZDtcbiAgICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWFWYWx1ZUV4Y2w7XG4gICAgICAkaXNEYXRhID0gJGlzRGF0YUV4Y2w7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciAkZXhjbElzTnVtYmVyID0gdHlwZW9mICRzY2hlbWFFeGNsID09ICdudW1iZXInLFxuICAgICAgJG9wU3RyID0gJG9wO1xuICAgIGlmICgkZXhjbElzTnVtYmVyICYmICRpc0RhdGEpIHtcbiAgICAgIHZhciAkb3BFeHByID0gJ1xcJycgKyAkb3BTdHIgKyAnXFwnJztcbiAgICAgIG91dCArPSAnIGlmICggJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAnICgnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mICcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT0gXFwnbnVtYmVyXFwnKSB8fCAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgKCAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnID09PSB1bmRlZmluZWQgfHwgJyArICgkc2NoZW1hRXhjbCkgKyAnICcgKyAoJG9wKSArICc9ICcgKyAoJHNjaGVtYVZhbHVlKSArICcgPyAnICsgKCRkYXRhKSArICcgJyArICgkbm90T3ApICsgJz0gJyArICgkc2NoZW1hRXhjbCkgKyAnIDogJyArICgkZGF0YSkgKyAnICcgKyAoJG5vdE9wKSArICcgJyArICgkc2NoZW1hVmFsdWUpICsgJyApIHx8ICcgKyAoJGRhdGEpICsgJyAhPT0gJyArICgkZGF0YSkgKyAnKSB7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICgkZXhjbElzTnVtYmVyICYmICRzY2hlbWEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAkZXhjbHVzaXZlID0gdHJ1ZTtcbiAgICAgICAgJGVycm9yS2V5d29yZCA9ICRleGNsdXNpdmVLZXl3b3JkO1xuICAgICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAkZXhjbHVzaXZlS2V5d29yZDtcbiAgICAgICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYUV4Y2w7XG4gICAgICAgICRub3RPcCArPSAnPSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoJGV4Y2xJc051bWJlcikgJHNjaGVtYVZhbHVlID0gTWF0aFskaXNNYXggPyAnbWluJyA6ICdtYXgnXSgkc2NoZW1hRXhjbCwgJHNjaGVtYSk7XG4gICAgICAgIGlmICgkc2NoZW1hRXhjbCA9PT0gKCRleGNsSXNOdW1iZXIgPyAkc2NoZW1hVmFsdWUgOiB0cnVlKSkge1xuICAgICAgICAgICRleGNsdXNpdmUgPSB0cnVlO1xuICAgICAgICAgICRlcnJvcktleXdvcmQgPSAkZXhjbHVzaXZlS2V5d29yZDtcbiAgICAgICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAkZXhjbHVzaXZlS2V5d29yZDtcbiAgICAgICAgICAkbm90T3AgKz0gJz0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRleGNsdXNpdmUgPSBmYWxzZTtcbiAgICAgICAgICAkb3BTdHIgKz0gJz0nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgJG9wRXhwciA9ICdcXCcnICsgJG9wU3RyICsgJ1xcJyc7XG4gICAgICBvdXQgKz0gJyBpZiAoICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnICcgKyAoJGRhdGEpICsgJyAnICsgKCRub3RPcCkgKyAnICcgKyAoJHNjaGVtYVZhbHVlKSArICcgfHwgJyArICgkZGF0YSkgKyAnICE9PSAnICsgKCRkYXRhKSArICcpIHsgJztcbiAgICB9XG4gIH1cbiAgJGVycm9yS2V5d29yZCA9ICRlcnJvcktleXdvcmQgfHwgJGtleXdvcmQ7XG4gIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgkZXJyb3JLZXl3b3JkIHx8ICdfbGltaXQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGNvbXBhcmlzb246ICcgKyAoJG9wRXhwcikgKyAnLCBsaW1pdDogJyArICgkc2NoZW1hVmFsdWUpICsgJywgZXhjbHVzaXZlOiAnICsgKCRleGNsdXNpdmUpICsgJyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBiZSAnICsgKCRvcFN0cikgKyAnICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ1xcJyArICcgKyAoJHNjaGVtYVZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hVmFsdWUpICsgJ1xcJyc7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAndmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnIH0gJztcbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9fbGltaXRJdGVtcyhpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGVycm9yS2V5d29yZDtcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLiRkYXRhICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIGlmICghKCRpc0RhdGEgfHwgdHlwZW9mICRzY2hlbWEgPT0gJ251bWJlcicpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCRrZXl3b3JkICsgJyBtdXN0IGJlIG51bWJlcicpO1xuICB9XG4gIHZhciAkb3AgPSAka2V5d29yZCA9PSAnbWF4SXRlbXMnID8gJz4nIDogJzwnO1xuICBvdXQgKz0gJ2lmICggJztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgfVxuICBvdXQgKz0gJyAnICsgKCRkYXRhKSArICcubGVuZ3RoICcgKyAoJG9wKSArICcgJyArICgkc2NoZW1hVmFsdWUpICsgJykgeyAnO1xuICB2YXIgJGVycm9yS2V5d29yZCA9ICRrZXl3b3JkO1xuICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJGVycm9yS2V5d29yZCB8fCAnX2xpbWl0SXRlbXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGxpbWl0OiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIE5PVCBoYXZlICc7XG4gICAgICBpZiAoJGtleXdvcmQgPT0gJ21heEl0ZW1zJykge1xuICAgICAgICBvdXQgKz0gJ21vcmUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICdmZXdlcic7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB0aGFuICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ1xcJyArICcgKyAoJHNjaGVtYVZhbHVlKSArICcgKyBcXCcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWEpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgaXRlbXNcXCcgJztcbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6ICAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICd2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnICAgICAgICAgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICd9ICc7XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfX2xpbWl0TGVuZ3RoKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZXJyb3JLZXl3b3JkO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgaWYgKCEoJGlzRGF0YSB8fCB0eXBlb2YgJHNjaGVtYSA9PSAnbnVtYmVyJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJGtleXdvcmQgKyAnIG11c3QgYmUgbnVtYmVyJyk7XG4gIH1cbiAgdmFyICRvcCA9ICRrZXl3b3JkID09ICdtYXhMZW5ndGgnID8gJz4nIDogJzwnO1xuICBvdXQgKz0gJ2lmICggJztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgfVxuICBpZiAoaXQub3B0cy51bmljb2RlID09PSBmYWxzZSkge1xuICAgIG91dCArPSAnICcgKyAoJGRhdGEpICsgJy5sZW5ndGggJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB1Y3MybGVuZ3RoKCcgKyAoJGRhdGEpICsgJykgJztcbiAgfVxuICBvdXQgKz0gJyAnICsgKCRvcCkgKyAnICcgKyAoJHNjaGVtYVZhbHVlKSArICcpIHsgJztcbiAgdmFyICRlcnJvcktleXdvcmQgPSAka2V5d29yZDtcbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ19saW1pdExlbmd0aCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgbGltaXQ6ICcgKyAoJHNjaGVtYVZhbHVlKSArICcgfSAnO1xuICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgTk9UIGJlICc7XG4gICAgICBpZiAoJGtleXdvcmQgPT0gJ21heExlbmd0aCcpIHtcbiAgICAgICAgb3V0ICs9ICdsb25nZXInO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICdzaG9ydGVyJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIHRoYW4gJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAnXFwnICsgJyArICgkc2NoZW1hVmFsdWUpICsgJyArIFxcJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyBjaGFyYWN0ZXJzXFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAndmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnfSAnO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX19saW1pdFByb3BlcnRpZXMoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRlcnJvcktleXdvcmQ7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy4kZGF0YSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICBpZiAoISgkaXNEYXRhIHx8IHR5cGVvZiAkc2NoZW1hID09ICdudW1iZXInKSkge1xuICAgIHRocm93IG5ldyBFcnJvcigka2V5d29yZCArICcgbXVzdCBiZSBudW1iZXInKTtcbiAgfVxuICB2YXIgJG9wID0gJGtleXdvcmQgPT0gJ21heFByb3BlcnRpZXMnID8gJz4nIDogJzwnO1xuICBvdXQgKz0gJ2lmICggJztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgfVxuICBvdXQgKz0gJyBPYmplY3Qua2V5cygnICsgKCRkYXRhKSArICcpLmxlbmd0aCAnICsgKCRvcCkgKyAnICcgKyAoJHNjaGVtYVZhbHVlKSArICcpIHsgJztcbiAgdmFyICRlcnJvcktleXdvcmQgPSAka2V5d29yZDtcbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ19saW1pdFByb3BlcnRpZXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGxpbWl0OiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIE5PVCBoYXZlICc7XG4gICAgICBpZiAoJGtleXdvcmQgPT0gJ21heFByb3BlcnRpZXMnKSB7XG4gICAgICAgIG91dCArPSAnbW9yZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJ2Zld2VyJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIHRoYW4gJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAnXFwnICsgJyArICgkc2NoZW1hVmFsdWUpICsgJyArIFxcJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyBwcm9wZXJ0aWVzXFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAndmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnfSAnO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2FsbE9mKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgdmFyICRjbG9zaW5nQnJhY2VzID0gJyc7XG4gICRpdC5sZXZlbCsrO1xuICB2YXIgJG5leHRWYWxpZCA9ICd2YWxpZCcgKyAkaXQubGV2ZWw7XG4gIHZhciAkY3VycmVudEJhc2VJZCA9ICRpdC5iYXNlSWQsXG4gICAgJGFsbFNjaGVtYXNFbXB0eSA9IHRydWU7XG4gIHZhciBhcnIxID0gJHNjaGVtYTtcbiAgaWYgKGFycjEpIHtcbiAgICB2YXIgJHNjaCwgJGkgPSAtMSxcbiAgICAgIGwxID0gYXJyMS5sZW5ndGggLSAxO1xuICAgIHdoaWxlICgkaSA8IGwxKSB7XG4gICAgICAkc2NoID0gYXJyMVskaSArPSAxXTtcbiAgICAgIGlmICgoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/ICh0eXBlb2YgJHNjaCA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoKS5sZW5ndGggPiAwKSB8fCAkc2NoID09PSBmYWxzZSA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAgICAgJGFsbFNjaGVtYXNFbXB0eSA9IGZhbHNlO1xuICAgICAgICAkaXQuc2NoZW1hID0gJHNjaDtcbiAgICAgICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aCArICdbJyArICRpICsgJ10nO1xuICAgICAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoICsgJy8nICsgJGk7XG4gICAgICAgIG91dCArPSAnICAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgaWYgKCRhbGxTY2hlbWFzRW1wdHkpIHtcbiAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnICcgKyAoJGNsb3NpbmdCcmFjZXMuc2xpY2UoMCwgLTEpKSArICcgJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfYW55T2YoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGVycnMgPSAnZXJyc19fJyArICRsdmw7XG4gIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICB2YXIgJGNsb3NpbmdCcmFjZXMgPSAnJztcbiAgJGl0LmxldmVsKys7XG4gIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgdmFyICRub0VtcHR5U2NoZW1hID0gJHNjaGVtYS5ldmVyeShmdW5jdGlvbigkc2NoKSB7XG4gICAgcmV0dXJuIChpdC5vcHRzLnN0cmljdEtleXdvcmRzID8gKHR5cGVvZiAkc2NoID09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKCRzY2gpLmxlbmd0aCA+IDApIHx8ICRzY2ggPT09IGZhbHNlIDogaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkc2NoLCBpdC5SVUxFUy5hbGwpKTtcbiAgfSk7XG4gIGlmICgkbm9FbXB0eVNjaGVtYSkge1xuICAgIHZhciAkY3VycmVudEJhc2VJZCA9ICRpdC5iYXNlSWQ7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJGVycnMpICsgJyA9IGVycm9yczsgdmFyICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgICc7XG4gICAgdmFyICR3YXNDb21wb3NpdGUgPSBpdC5jb21wb3NpdGVSdWxlO1xuICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9IHRydWU7XG4gICAgdmFyIGFycjEgPSAkc2NoZW1hO1xuICAgIGlmIChhcnIxKSB7XG4gICAgICB2YXIgJHNjaCwgJGkgPSAtMSxcbiAgICAgICAgbDEgPSBhcnIxLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoJGkgPCBsMSkge1xuICAgICAgICAkc2NoID0gYXJyMVskaSArPSAxXTtcbiAgICAgICAgJGl0LnNjaGVtYSA9ICRzY2g7XG4gICAgICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGggKyAnWycgKyAkaSArICddJztcbiAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aCArICcvJyArICRpO1xuICAgICAgICBvdXQgKz0gJyAgJyArIChpdC52YWxpZGF0ZSgkaXQpKSArICcgJztcbiAgICAgICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkdmFsaWQpICsgJyB8fCAnICsgKCRuZXh0VmFsaWQpICsgJzsgaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICAgIH1cbiAgICB9XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gJHdhc0NvbXBvc2l0ZTtcbiAgICBvdXQgKz0gJyAnICsgKCRjbG9zaW5nQnJhY2VzKSArICcgaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdhbnlPZicpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHt9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgbWF0Y2ggc29tZSBzY2hlbWEgaW4gYW55T2ZcXCcgJztcbiAgICAgIH1cbiAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgb3V0ICs9ICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcih2RXJyb3JzKTsgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IHZFcnJvcnM7IHJldHVybiBmYWxzZTsgJztcbiAgICAgIH1cbiAgICB9XG4gICAgb3V0ICs9ICcgfSBlbHNlIHsgIGVycm9ycyA9ICcgKyAoJGVycnMpICsgJzsgaWYgKHZFcnJvcnMgIT09IG51bGwpIHsgaWYgKCcgKyAoJGVycnMpICsgJykgdkVycm9ycy5sZW5ndGggPSAnICsgKCRlcnJzKSArICc7IGVsc2UgdkVycm9ycyA9IG51bGw7IH0gJztcbiAgICBpZiAoaXQub3B0cy5hbGxFcnJvcnMpIHtcbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2NvbW1lbnQoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGNvbW1lbnQgPSBpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRzY2hlbWEpO1xuICBpZiAoaXQub3B0cy4kY29tbWVudCA9PT0gdHJ1ZSkge1xuICAgIG91dCArPSAnIGNvbnNvbGUubG9nKCcgKyAoJGNvbW1lbnQpICsgJyk7JztcbiAgfSBlbHNlIGlmICh0eXBlb2YgaXQub3B0cy4kY29tbWVudCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgb3V0ICs9ICcgc2VsZi5fb3B0cy4kY29tbWVudCgnICsgKCRjb21tZW50KSArICcsICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJywgdmFsaWRhdGUucm9vdC5zY2hlbWEpOyc7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfY29uc3QoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgaWYgKCEkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnOyc7XG4gIH1cbiAgb3V0ICs9ICd2YXIgJyArICgkdmFsaWQpICsgJyA9IGVxdWFsKCcgKyAoJGRhdGEpICsgJywgc2NoZW1hJyArICgkbHZsKSArICcpOyBpZiAoIScgKyAoJHZhbGlkKSArICcpIHsgICAnO1xuICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ2NvbnN0JykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBhbGxvd2VkVmFsdWU6IHNjaGVtYScgKyAoJGx2bCkgKyAnIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIGJlIGVxdWFsIHRvIGNvbnN0YW50XFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICcgfSc7XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfY29udGFpbnMoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGVycnMgPSAnZXJyc19fJyArICRsdmw7XG4gIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICB2YXIgJGNsb3NpbmdCcmFjZXMgPSAnJztcbiAgJGl0LmxldmVsKys7XG4gIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgdmFyICRpZHggPSAnaScgKyAkbHZsLFxuICAgICRkYXRhTnh0ID0gJGl0LmRhdGFMZXZlbCA9IGl0LmRhdGFMZXZlbCArIDEsXG4gICAgJG5leHREYXRhID0gJ2RhdGEnICsgJGRhdGFOeHQsXG4gICAgJGN1cnJlbnRCYXNlSWQgPSBpdC5iYXNlSWQsXG4gICAgJG5vbkVtcHR5U2NoZW1hID0gKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyAodHlwZW9mICRzY2hlbWEgPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHNjaGVtYSkubGVuZ3RoID4gMCkgfHwgJHNjaGVtYSA9PT0gZmFsc2UgOiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRzY2hlbWEsIGl0LlJVTEVTLmFsbCkpO1xuICBvdXQgKz0gJ3ZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7dmFyICcgKyAoJHZhbGlkKSArICc7JztcbiAgaWYgKCRub25FbXB0eVNjaGVtYSkge1xuICAgIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSB0cnVlO1xuICAgICRpdC5zY2hlbWEgPSAkc2NoZW1hO1xuICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGg7XG4gICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aDtcbiAgICBvdXQgKz0gJyB2YXIgJyArICgkbmV4dFZhbGlkKSArICcgPSBmYWxzZTsgZm9yICh2YXIgJyArICgkaWR4KSArICcgPSAwOyAnICsgKCRpZHgpICsgJyA8ICcgKyAoJGRhdGEpICsgJy5sZW5ndGg7ICcgKyAoJGlkeCkgKyAnKyspIHsgJztcbiAgICAkaXQuZXJyb3JQYXRoID0gaXQudXRpbC5nZXRQYXRoRXhwcihpdC5lcnJvclBhdGgsICRpZHgsIGl0Lm9wdHMuanNvblBvaW50ZXJzLCB0cnVlKTtcbiAgICB2YXIgJHBhc3NEYXRhID0gJGRhdGEgKyAnWycgKyAkaWR4ICsgJ10nO1xuICAgICRpdC5kYXRhUGF0aEFyclskZGF0YU54dF0gPSAkaWR4O1xuICAgIHZhciAkY29kZSA9IGl0LnZhbGlkYXRlKCRpdCk7XG4gICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgIGlmIChpdC51dGlsLnZhck9jY3VyZW5jZXMoJGNvZGUsICRuZXh0RGF0YSkgPCAyKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKGl0LnV0aWwudmFyUmVwbGFjZSgkY29kZSwgJG5leHREYXRhLCAkcGFzc0RhdGEpKSArICcgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHREYXRhKSArICcgPSAnICsgKCRwYXNzRGF0YSkgKyAnOyAnICsgKCRjb2RlKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSBicmVhazsgfSAgJztcbiAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSAkd2FzQ29tcG9zaXRlO1xuICAgIG91dCArPSAnICcgKyAoJGNsb3NpbmdCcmFjZXMpICsgJyBpZiAoIScgKyAoJG5leHRWYWxpZCkgKyAnKSB7JztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyBpZiAoJyArICgkZGF0YSkgKyAnLmxlbmd0aCA9PSAwKSB7JztcbiAgfVxuICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ2NvbnRhaW5zJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczoge30gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIGNvbnRhaW4gYSB2YWxpZCBpdGVtXFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICcgfSBlbHNlIHsgJztcbiAgaWYgKCRub25FbXB0eVNjaGVtYSkge1xuICAgIG91dCArPSAnICBlcnJvcnMgPSAnICsgKCRlcnJzKSArICc7IGlmICh2RXJyb3JzICE9PSBudWxsKSB7IGlmICgnICsgKCRlcnJzKSArICcpIHZFcnJvcnMubGVuZ3RoID0gJyArICgkZXJycykgKyAnOyBlbHNlIHZFcnJvcnMgPSBudWxsOyB9ICc7XG4gIH1cbiAgaWYgKGl0Lm9wdHMuYWxsRXJyb3JzKSB7XG4gICAgb3V0ICs9ICcgfSAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2N1c3RvbShpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGVycm9yS2V5d29yZDtcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGVycnMgPSAnZXJyc19fJyArICRsdmw7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy4kZGF0YSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICB2YXIgJHJ1bGUgPSB0aGlzLFxuICAgICRkZWZpbml0aW9uID0gJ2RlZmluaXRpb24nICsgJGx2bCxcbiAgICAkckRlZiA9ICRydWxlLmRlZmluaXRpb24sXG4gICAgJGNsb3NpbmdCcmFjZXMgPSAnJztcbiAgdmFyICRjb21waWxlLCAkaW5saW5lLCAkbWFjcm8sICRydWxlVmFsaWRhdGUsICR2YWxpZGF0ZUNvZGU7XG4gIGlmICgkaXNEYXRhICYmICRyRGVmLiRkYXRhKSB7XG4gICAgJHZhbGlkYXRlQ29kZSA9ICdrZXl3b3JkVmFsaWRhdGUnICsgJGx2bDtcbiAgICB2YXIgJHZhbGlkYXRlU2NoZW1hID0gJHJEZWYudmFsaWRhdGVTY2hlbWE7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJGRlZmluaXRpb24pICsgJyA9IFJVTEVTLmN1c3RvbVtcXCcnICsgKCRrZXl3b3JkKSArICdcXCddLmRlZmluaXRpb247IHZhciAnICsgKCR2YWxpZGF0ZUNvZGUpICsgJyA9ICcgKyAoJGRlZmluaXRpb24pICsgJy52YWxpZGF0ZTsnO1xuICB9IGVsc2Uge1xuICAgICRydWxlVmFsaWRhdGUgPSBpdC51c2VDdXN0b21SdWxlKCRydWxlLCAkc2NoZW1hLCBpdC5zY2hlbWEsIGl0KTtcbiAgICBpZiAoISRydWxlVmFsaWRhdGUpIHJldHVybjtcbiAgICAkc2NoZW1hVmFsdWUgPSAndmFsaWRhdGUuc2NoZW1hJyArICRzY2hlbWFQYXRoO1xuICAgICR2YWxpZGF0ZUNvZGUgPSAkcnVsZVZhbGlkYXRlLmNvZGU7XG4gICAgJGNvbXBpbGUgPSAkckRlZi5jb21waWxlO1xuICAgICRpbmxpbmUgPSAkckRlZi5pbmxpbmU7XG4gICAgJG1hY3JvID0gJHJEZWYubWFjcm87XG4gIH1cbiAgdmFyICRydWxlRXJycyA9ICR2YWxpZGF0ZUNvZGUgKyAnLmVycm9ycycsXG4gICAgJGkgPSAnaScgKyAkbHZsLFxuICAgICRydWxlRXJyID0gJ3J1bGVFcnInICsgJGx2bCxcbiAgICAkYXN5bmNLZXl3b3JkID0gJHJEZWYuYXN5bmM7XG4gIGlmICgkYXN5bmNLZXl3b3JkICYmICFpdC5hc3luYykgdGhyb3cgbmV3IEVycm9yKCdhc3luYyBrZXl3b3JkIGluIHN5bmMgc2NoZW1hJyk7XG4gIGlmICghKCRpbmxpbmUgfHwgJG1hY3JvKSkge1xuICAgIG91dCArPSAnJyArICgkcnVsZUVycnMpICsgJyA9IG51bGw7JztcbiAgfVxuICBvdXQgKz0gJ3ZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7dmFyICcgKyAoJHZhbGlkKSArICc7JztcbiAgaWYgKCRpc0RhdGEgJiYgJHJEZWYuJGRhdGEpIHtcbiAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgb3V0ICs9ICcgaWYgKCcgKyAoJHNjaGVtYVZhbHVlKSArICcgPT09IHVuZGVmaW5lZCkgeyAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgfSBlbHNlIHsgJztcbiAgICBpZiAoJHZhbGlkYXRlU2NoZW1hKSB7XG4gICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkZGVmaW5pdGlvbikgKyAnLnZhbGlkYXRlU2NoZW1hKCcgKyAoJHNjaGVtYVZhbHVlKSArICcpOyBpZiAoJyArICgkdmFsaWQpICsgJykgeyAnO1xuICAgIH1cbiAgfVxuICBpZiAoJGlubGluZSkge1xuICAgIGlmICgkckRlZi5zdGF0ZW1lbnRzKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCRydWxlVmFsaWRhdGUudmFsaWRhdGUpICsgJyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkcnVsZVZhbGlkYXRlLnZhbGlkYXRlKSArICc7ICc7XG4gICAgfVxuICB9IGVsc2UgaWYgKCRtYWNybykge1xuICAgIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICAgIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAgICRpdC5sZXZlbCsrO1xuICAgIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgICAkaXQuc2NoZW1hID0gJHJ1bGVWYWxpZGF0ZS52YWxpZGF0ZTtcbiAgICAkaXQuc2NoZW1hUGF0aCA9ICcnO1xuICAgIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSB0cnVlO1xuICAgIHZhciAkY29kZSA9IGl0LnZhbGlkYXRlKCRpdCkucmVwbGFjZSgvdmFsaWRhdGVcXC5zY2hlbWEvZywgJHZhbGlkYXRlQ29kZSk7XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gJHdhc0NvbXBvc2l0ZTtcbiAgICBvdXQgKz0gJyAnICsgKCRjb2RlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgb3V0ID0gJyc7XG4gICAgb3V0ICs9ICcgICcgKyAoJHZhbGlkYXRlQ29kZSkgKyAnLmNhbGwoICc7XG4gICAgaWYgKGl0Lm9wdHMucGFzc0NvbnRleHQpIHtcbiAgICAgIG91dCArPSAndGhpcyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnc2VsZic7XG4gICAgfVxuICAgIGlmICgkY29tcGlsZSB8fCAkckRlZi5zY2hlbWEgPT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyAsICcgKyAoJHNjaGVtYVZhbHVlKSArICcgLCAnICsgKCRkYXRhKSArICcgLCB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyAsIChkYXRhUGF0aCB8fCBcXCdcXCcpJztcbiAgICBpZiAoaXQuZXJyb3JQYXRoICE9ICdcIlwiJykge1xuICAgICAgb3V0ICs9ICcgKyAnICsgKGl0LmVycm9yUGF0aCk7XG4gICAgfVxuICAgIHZhciAkcGFyZW50RGF0YSA9ICRkYXRhTHZsID8gJ2RhdGEnICsgKCgkZGF0YUx2bCAtIDEpIHx8ICcnKSA6ICdwYXJlbnREYXRhJyxcbiAgICAgICRwYXJlbnREYXRhUHJvcGVydHkgPSAkZGF0YUx2bCA/IGl0LmRhdGFQYXRoQXJyWyRkYXRhTHZsXSA6ICdwYXJlbnREYXRhUHJvcGVydHknO1xuICAgIG91dCArPSAnICwgJyArICgkcGFyZW50RGF0YSkgKyAnICwgJyArICgkcGFyZW50RGF0YVByb3BlcnR5KSArICcgLCByb290RGF0YSApICAnO1xuICAgIHZhciBkZWZfY2FsbFJ1bGVWYWxpZGF0ZSA9IG91dDtcbiAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgIGlmICgkckRlZi5lcnJvcnMgPT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gJztcbiAgICAgIGlmICgkYXN5bmNLZXl3b3JkKSB7XG4gICAgICAgIG91dCArPSAnYXdhaXQgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnJyArIChkZWZfY2FsbFJ1bGVWYWxpZGF0ZSkgKyAnOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoJGFzeW5jS2V5d29yZCkge1xuICAgICAgICAkcnVsZUVycnMgPSAnY3VzdG9tRXJyb3JzJyArICRsdmw7XG4gICAgICAgIG91dCArPSAnIHZhciAnICsgKCRydWxlRXJycykgKyAnID0gbnVsbDsgdHJ5IHsgJyArICgkdmFsaWQpICsgJyA9IGF3YWl0ICcgKyAoZGVmX2NhbGxSdWxlVmFsaWRhdGUpICsgJzsgfSBjYXRjaCAoZSkgeyAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7IGlmIChlIGluc3RhbmNlb2YgVmFsaWRhdGlvbkVycm9yKSAnICsgKCRydWxlRXJycykgKyAnID0gZS5lcnJvcnM7IGVsc2UgdGhyb3cgZTsgfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgJyArICgkcnVsZUVycnMpICsgJyA9IG51bGw7ICcgKyAoJHZhbGlkKSArICcgPSAnICsgKGRlZl9jYWxsUnVsZVZhbGlkYXRlKSArICc7ICc7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkckRlZi5tb2RpZnlpbmcpIHtcbiAgICBvdXQgKz0gJyBpZiAoJyArICgkcGFyZW50RGF0YSkgKyAnKSAnICsgKCRkYXRhKSArICcgPSAnICsgKCRwYXJlbnREYXRhKSArICdbJyArICgkcGFyZW50RGF0YVByb3BlcnR5KSArICddOyc7XG4gIH1cbiAgb3V0ICs9ICcnICsgKCRjbG9zaW5nQnJhY2VzKTtcbiAgaWYgKCRyRGVmLnZhbGlkKSB7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIGlmICggJztcbiAgICBpZiAoJHJEZWYudmFsaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3V0ICs9ICcgISc7XG4gICAgICBpZiAoJG1hY3JvKSB7XG4gICAgICAgIG91dCArPSAnJyArICgkbmV4dFZhbGlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkdmFsaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCEkckRlZi52YWxpZCkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnKSB7ICc7XG4gICAgJGVycm9yS2V5d29yZCA9ICRydWxlLmtleXdvcmQ7XG4gICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgIG91dCA9ICcnO1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ2N1c3RvbScpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsga2V5d29yZDogXFwnJyArICgkcnVsZS5rZXl3b3JkKSArICdcXCcgfSAnO1xuICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIHBhc3MgXCInICsgKCRydWxlLmtleXdvcmQpICsgJ1wiIGtleXdvcmQgdmFsaWRhdGlvblxcJyAnO1xuICAgICAgfVxuICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB7fSAnO1xuICAgIH1cbiAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgfVxuICAgIHZhciBkZWZfY3VzdG9tRXJyb3IgPSBvdXQ7XG4gICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICBpZiAoJGlubGluZSkge1xuICAgICAgaWYgKCRyRGVmLmVycm9ycykge1xuICAgICAgICBpZiAoJHJEZWYuZXJyb3JzICE9ICdmdWxsJykge1xuICAgICAgICAgIG91dCArPSAnICBmb3IgKHZhciAnICsgKCRpKSArICc9JyArICgkZXJycykgKyAnOyAnICsgKCRpKSArICc8ZXJyb3JzOyAnICsgKCRpKSArICcrKykgeyB2YXIgJyArICgkcnVsZUVycikgKyAnID0gdkVycm9yc1snICsgKCRpKSArICddOyBpZiAoJyArICgkcnVsZUVycikgKyAnLmRhdGFQYXRoID09PSB1bmRlZmluZWQpICcgKyAoJHJ1bGVFcnIpICsgJy5kYXRhUGF0aCA9IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJzsgaWYgKCcgKyAoJHJ1bGVFcnIpICsgJy5zY2hlbWFQYXRoID09PSB1bmRlZmluZWQpIHsgJyArICgkcnVsZUVycikgKyAnLnNjaGVtYVBhdGggPSBcIicgKyAoJGVyclNjaGVtYVBhdGgpICsgJ1wiOyB9ICc7XG4gICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArICgkcnVsZUVycikgKyAnLnNjaGVtYSA9ICcgKyAoJHNjaGVtYVZhbHVlKSArICc7ICcgKyAoJHJ1bGVFcnIpICsgJy5kYXRhID0gJyArICgkZGF0YSkgKyAnOyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICgkckRlZi5lcnJvcnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgJyArIChkZWZfY3VzdG9tRXJyb3IpICsgJyAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRlcnJzKSArICcgPT0gZXJyb3JzKSB7ICcgKyAoZGVmX2N1c3RvbUVycm9yKSArICcgfSBlbHNlIHsgIGZvciAodmFyICcgKyAoJGkpICsgJz0nICsgKCRlcnJzKSArICc7ICcgKyAoJGkpICsgJzxlcnJvcnM7ICcgKyAoJGkpICsgJysrKSB7IHZhciAnICsgKCRydWxlRXJyKSArICcgPSB2RXJyb3JzWycgKyAoJGkpICsgJ107IGlmICgnICsgKCRydWxlRXJyKSArICcuZGF0YVBhdGggPT09IHVuZGVmaW5lZCkgJyArICgkcnVsZUVycikgKyAnLmRhdGFQYXRoID0gKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnOyBpZiAoJyArICgkcnVsZUVycikgKyAnLnNjaGVtYVBhdGggPT09IHVuZGVmaW5lZCkgeyAnICsgKCRydWxlRXJyKSArICcuc2NoZW1hUGF0aCA9IFwiJyArICgkZXJyU2NoZW1hUGF0aCkgKyAnXCI7IH0gJztcbiAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAnICsgKCRydWxlRXJyKSArICcuc2NoZW1hID0gJyArICgkc2NoZW1hVmFsdWUpICsgJzsgJyArICgkcnVsZUVycikgKyAnLmRhdGEgPSAnICsgKCRkYXRhKSArICc7ICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIH0gfSAnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgkbWFjcm8pIHtcbiAgICAgIG91dCArPSAnICAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgkZXJyb3JLZXl3b3JkIHx8ICdjdXN0b20nKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGtleXdvcmQ6IFxcJycgKyAoJHJ1bGUua2V5d29yZCkgKyAnXFwnIH0gJztcbiAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgcGFzcyBcIicgKyAoJHJ1bGUua2V5d29yZCkgKyAnXCIga2V5d29yZCB2YWxpZGF0aW9uXFwnICc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcih2RXJyb3JzKTsgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSB2RXJyb3JzOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCRyRGVmLmVycm9ycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgJyArIChkZWZfY3VzdG9tRXJyb3IpICsgJyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKEFycmF5LmlzQXJyYXkoJyArICgkcnVsZUVycnMpICsgJykpIHsgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSAnICsgKCRydWxlRXJycykgKyAnOyBlbHNlIHZFcnJvcnMgPSB2RXJyb3JzLmNvbmNhdCgnICsgKCRydWxlRXJycykgKyAnKTsgZXJyb3JzID0gdkVycm9ycy5sZW5ndGg7ICBmb3IgKHZhciAnICsgKCRpKSArICc9JyArICgkZXJycykgKyAnOyAnICsgKCRpKSArICc8ZXJyb3JzOyAnICsgKCRpKSArICcrKykgeyB2YXIgJyArICgkcnVsZUVycikgKyAnID0gdkVycm9yc1snICsgKCRpKSArICddOyBpZiAoJyArICgkcnVsZUVycikgKyAnLmRhdGFQYXRoID09PSB1bmRlZmluZWQpICcgKyAoJHJ1bGVFcnIpICsgJy5kYXRhUGF0aCA9IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJzsgICcgKyAoJHJ1bGVFcnIpICsgJy5zY2hlbWFQYXRoID0gXCInICsgKCRlcnJTY2hlbWFQYXRoKSArICdcIjsgICc7XG4gICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyAnICsgKCRydWxlRXJyKSArICcuc2NoZW1hID0gJyArICgkc2NoZW1hVmFsdWUpICsgJzsgJyArICgkcnVsZUVycikgKyAnLmRhdGEgPSAnICsgKCRkYXRhKSArICc7ICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgfSB9IGVsc2UgeyAnICsgKGRlZl9jdXN0b21FcnJvcikgKyAnIH0gJztcbiAgICAgIH1cbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfZGVwZW5kZW5jaWVzKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICB2YXIgJHNjaGVtYURlcHMgPSB7fSxcbiAgICAkcHJvcGVydHlEZXBzID0ge30sXG4gICAgJG93blByb3BlcnRpZXMgPSBpdC5vcHRzLm93blByb3BlcnRpZXM7XG4gIGZvciAoJHByb3BlcnR5IGluICRzY2hlbWEpIHtcbiAgICBpZiAoJHByb3BlcnR5ID09ICdfX3Byb3RvX18nKSBjb250aW51ZTtcbiAgICB2YXIgJHNjaCA9ICRzY2hlbWFbJHByb3BlcnR5XTtcbiAgICB2YXIgJGRlcHMgPSBBcnJheS5pc0FycmF5KCRzY2gpID8gJHByb3BlcnR5RGVwcyA6ICRzY2hlbWFEZXBzO1xuICAgICRkZXBzWyRwcm9wZXJ0eV0gPSAkc2NoO1xuICB9XG4gIG91dCArPSAndmFyICcgKyAoJGVycnMpICsgJyA9IGVycm9yczsnO1xuICB2YXIgJGN1cnJlbnRFcnJvclBhdGggPSBpdC5lcnJvclBhdGg7XG4gIG91dCArPSAndmFyIG1pc3NpbmcnICsgKCRsdmwpICsgJzsnO1xuICBmb3IgKHZhciAkcHJvcGVydHkgaW4gJHByb3BlcnR5RGVwcykge1xuICAgICRkZXBzID0gJHByb3BlcnR5RGVwc1skcHJvcGVydHldO1xuICAgIGlmICgkZGVwcy5sZW5ndGgpIHtcbiAgICAgIG91dCArPSAnIGlmICggJyArICgkZGF0YSkgKyAoaXQudXRpbC5nZXRQcm9wZXJ0eSgkcHJvcGVydHkpKSArICcgIT09IHVuZGVmaW5lZCAnO1xuICAgICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgIG91dCArPSAnICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgnICsgKCRkYXRhKSArICcsIFxcJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5KSkgKyAnXFwnKSAnO1xuICAgICAgfVxuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgb3V0ICs9ICcgJiYgKCAnO1xuICAgICAgICB2YXIgYXJyMSA9ICRkZXBzO1xuICAgICAgICBpZiAoYXJyMSkge1xuICAgICAgICAgIHZhciAkcHJvcGVydHlLZXksICRpID0gLTEsXG4gICAgICAgICAgICBsMSA9IGFycjEubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoJGkgPCBsMSkge1xuICAgICAgICAgICAgJHByb3BlcnR5S2V5ID0gYXJyMVskaSArPSAxXTtcbiAgICAgICAgICAgIGlmICgkaSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB8fCAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyICRwcm9wID0gaXQudXRpbC5nZXRQcm9wZXJ0eSgkcHJvcGVydHlLZXkpLFxuICAgICAgICAgICAgICAkdXNlRGF0YSA9ICRkYXRhICsgJHByb3A7XG4gICAgICAgICAgICBvdXQgKz0gJyAoICggJyArICgkdXNlRGF0YSkgKyAnID09PSB1bmRlZmluZWQgJztcbiAgICAgICAgICAgIGlmICgkb3duUHJvcGVydGllcykge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB8fCAhIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgnICsgKCRkYXRhKSArICcsIFxcJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5S2V5KSkgKyAnXFwnKSAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICcpICYmIChtaXNzaW5nJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoaXQub3B0cy5qc29uUG9pbnRlcnMgPyAkcHJvcGVydHlLZXkgOiAkcHJvcCkpICsgJykgKSAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJykpIHsgICc7XG4gICAgICAgIHZhciAkcHJvcGVydHlQYXRoID0gJ21pc3NpbmcnICsgJGx2bCxcbiAgICAgICAgICAkbWlzc2luZ1Byb3BlcnR5ID0gJ1xcJyArICcgKyAkcHJvcGVydHlQYXRoICsgJyArIFxcJyc7XG4gICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICBpdC5lcnJvclBhdGggPSBpdC5vcHRzLmpzb25Qb2ludGVycyA/IGl0LnV0aWwuZ2V0UGF0aEV4cHIoJGN1cnJlbnRFcnJvclBhdGgsICRwcm9wZXJ0eVBhdGgsIHRydWUpIDogJGN1cnJlbnRFcnJvclBhdGggKyAnICsgJyArICRwcm9wZXJ0eVBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdkZXBlbmRlbmNpZXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IHByb3BlcnR5OiBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eSkpICsgJ1xcJywgbWlzc2luZ1Byb3BlcnR5OiBcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcJywgZGVwc0NvdW50OiAnICsgKCRkZXBzLmxlbmd0aCkgKyAnLCBkZXBzOiBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRkZXBzLmxlbmd0aCA9PSAxID8gJGRlcHNbMF0gOiAkZGVwcy5qb2luKFwiLCBcIikpKSArICdcXCcgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgaGF2ZSAnO1xuICAgICAgICAgICAgaWYgKCRkZXBzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICAgIG91dCArPSAncHJvcGVydHkgJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkZGVwc1swXSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICdwcm9wZXJ0aWVzICcgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJGRlcHMuam9pbihcIiwgXCIpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJyB3aGVuIHByb3BlcnR5ICcgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5KSkgKyAnIGlzIHByZXNlbnRcXCcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgKSB7ICc7XG4gICAgICAgIHZhciBhcnIyID0gJGRlcHM7XG4gICAgICAgIGlmIChhcnIyKSB7XG4gICAgICAgICAgdmFyICRwcm9wZXJ0eUtleSwgaTIgPSAtMSxcbiAgICAgICAgICAgIGwyID0gYXJyMi5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChpMiA8IGwyKSB7XG4gICAgICAgICAgICAkcHJvcGVydHlLZXkgPSBhcnIyW2kyICs9IDFdO1xuICAgICAgICAgICAgdmFyICRwcm9wID0gaXQudXRpbC5nZXRQcm9wZXJ0eSgkcHJvcGVydHlLZXkpLFxuICAgICAgICAgICAgICAkbWlzc2luZ1Byb3BlcnR5ID0gaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5S2V5KSxcbiAgICAgICAgICAgICAgJHVzZURhdGEgPSAkZGF0YSArICRwcm9wO1xuICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICBpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGgoJGN1cnJlbnRFcnJvclBhdGgsICRwcm9wZXJ0eUtleSwgaXQub3B0cy5qc29uUG9pbnRlcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCAnICsgKCR1c2VEYXRhKSArICcgPT09IHVuZGVmaW5lZCAnO1xuICAgICAgICAgICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHx8ICEgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCcgKyAoJGRhdGEpICsgJywgXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHlLZXkpKSArICdcXCcpICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJykgeyAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnZGVwZW5kZW5jaWVzJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBwcm9wZXJ0eTogXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHkpKSArICdcXCcsIG1pc3NpbmdQcm9wZXJ0eTogXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXCcsIGRlcHNDb3VudDogJyArICgkZGVwcy5sZW5ndGgpICsgJywgZGVwczogXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkZGVwcy5sZW5ndGggPT0gMSA/ICRkZXBzWzBdIDogJGRlcHMuam9pbihcIiwgXCIpKSkgKyAnXFwnIH0gJztcbiAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgaGF2ZSAnO1xuICAgICAgICAgICAgICAgIGlmICgkZGVwcy5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICdwcm9wZXJ0eSAnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRkZXBzWzBdKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAncHJvcGVydGllcyAnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRkZXBzLmpvaW4oXCIsIFwiKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB3aGVuIHByb3BlcnR5ICcgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5KSkgKyAnIGlzIHByZXNlbnRcXCcgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgfSAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAgICc7XG4gICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpdC5lcnJvclBhdGggPSAkY3VycmVudEVycm9yUGF0aDtcbiAgdmFyICRjdXJyZW50QmFzZUlkID0gJGl0LmJhc2VJZDtcbiAgZm9yICh2YXIgJHByb3BlcnR5IGluICRzY2hlbWFEZXBzKSB7XG4gICAgdmFyICRzY2ggPSAkc2NoZW1hRGVwc1skcHJvcGVydHldO1xuICAgIGlmICgoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/ICh0eXBlb2YgJHNjaCA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoKS5sZW5ndGggPiAwKSB8fCAkc2NoID09PSBmYWxzZSA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAgIG91dCArPSAnICcgKyAoJG5leHRWYWxpZCkgKyAnID0gdHJ1ZTsgaWYgKCAnICsgKCRkYXRhKSArIChpdC51dGlsLmdldFByb3BlcnR5KCRwcm9wZXJ0eSkpICsgJyAhPT0gdW5kZWZpbmVkICc7XG4gICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgb3V0ICs9ICcgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCcgKyAoJGRhdGEpICsgJywgXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHkpKSArICdcXCcpICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJykgeyAnO1xuICAgICAgJGl0LnNjaGVtYSA9ICRzY2g7XG4gICAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgkcHJvcGVydHkpO1xuICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aCArICcvJyArIGl0LnV0aWwuZXNjYXBlRnJhZ21lbnQoJHByb3BlcnR5KTtcbiAgICAgIG91dCArPSAnICAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICAgb3V0ICs9ICcgfSAgJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJykgeyAnO1xuICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgICAnICsgKCRjbG9zaW5nQnJhY2VzKSArICcgaWYgKCcgKyAoJGVycnMpICsgJyA9PSBlcnJvcnMpIHsnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2VudW0oaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgdmFyICRpID0gJ2knICsgJGx2bCxcbiAgICAkdlNjaGVtYSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgaWYgKCEkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJHZTY2hlbWEpICsgJyA9IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJzsnO1xuICB9XG4gIG91dCArPSAndmFyICcgKyAoJHZhbGlkKSArICc7JztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyBpZiAoc2NoZW1hJyArICgkbHZsKSArICcgPT09IHVuZGVmaW5lZCkgJyArICgkdmFsaWQpICsgJyA9IHRydWU7IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYScgKyAoJGx2bCkgKyAnKSkgJyArICgkdmFsaWQpICsgJyA9IGZhbHNlOyBlbHNlIHsnO1xuICB9XG4gIG91dCArPSAnJyArICgkdmFsaWQpICsgJyA9IGZhbHNlO2ZvciAodmFyICcgKyAoJGkpICsgJz0wOyAnICsgKCRpKSArICc8JyArICgkdlNjaGVtYSkgKyAnLmxlbmd0aDsgJyArICgkaSkgKyAnKyspIGlmIChlcXVhbCgnICsgKCRkYXRhKSArICcsICcgKyAoJHZTY2hlbWEpICsgJ1snICsgKCRpKSArICddKSkgeyAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgYnJlYWs7IH0nO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnICB9ICAnO1xuICB9XG4gIG91dCArPSAnIGlmICghJyArICgkdmFsaWQpICsgJykgeyAgICc7XG4gIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnZW51bScpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgYWxsb3dlZFZhbHVlczogc2NoZW1hJyArICgkbHZsKSArICcgfSAnO1xuICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgYmUgZXF1YWwgdG8gb25lIG9mIHRoZSBhbGxvd2VkIHZhbHVlc1xcJyAnO1xuICAgIH1cbiAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnIH0nO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2Zvcm1hdChpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICBpZiAoaXQub3B0cy5mb3JtYXQgPT09IGZhbHNlKSB7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLiRkYXRhICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIHZhciAkdW5rbm93bkZvcm1hdHMgPSBpdC5vcHRzLnVua25vd25Gb3JtYXRzLFxuICAgICRhbGxvd1Vua25vd24gPSBBcnJheS5pc0FycmF5KCR1bmtub3duRm9ybWF0cyk7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgdmFyICRmb3JtYXQgPSAnZm9ybWF0JyArICRsdmwsXG4gICAgICAkaXNPYmplY3QgPSAnaXNPYmplY3QnICsgJGx2bCxcbiAgICAgICRmb3JtYXRUeXBlID0gJ2Zvcm1hdFR5cGUnICsgJGx2bDtcbiAgICBvdXQgKz0gJyB2YXIgJyArICgkZm9ybWF0KSArICcgPSBmb3JtYXRzWycgKyAoJHNjaGVtYVZhbHVlKSArICddOyB2YXIgJyArICgkaXNPYmplY3QpICsgJyA9IHR5cGVvZiAnICsgKCRmb3JtYXQpICsgJyA9PSBcXCdvYmplY3RcXCcgJiYgISgnICsgKCRmb3JtYXQpICsgJyBpbnN0YW5jZW9mIFJlZ0V4cCkgJiYgJyArICgkZm9ybWF0KSArICcudmFsaWRhdGU7IHZhciAnICsgKCRmb3JtYXRUeXBlKSArICcgPSAnICsgKCRpc09iamVjdCkgKyAnICYmICcgKyAoJGZvcm1hdCkgKyAnLnR5cGUgfHwgXFwnc3RyaW5nXFwnOyBpZiAoJyArICgkaXNPYmplY3QpICsgJykgeyAnO1xuICAgIGlmIChpdC5hc3luYykge1xuICAgICAgb3V0ICs9ICcgdmFyIGFzeW5jJyArICgkbHZsKSArICcgPSAnICsgKCRmb3JtYXQpICsgJy5hc3luYzsgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgJyArICgkZm9ybWF0KSArICcgPSAnICsgKCRmb3JtYXQpICsgJy52YWxpZGF0ZTsgfSBpZiAoICAnO1xuICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ3N0cmluZ1xcJykgfHwgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgKCc7XG4gICAgaWYgKCR1bmtub3duRm9ybWF0cyAhPSAnaWdub3JlJykge1xuICAgICAgb3V0ICs9ICcgKCcgKyAoJHNjaGVtYVZhbHVlKSArICcgJiYgIScgKyAoJGZvcm1hdCkgKyAnICc7XG4gICAgICBpZiAoJGFsbG93VW5rbm93bikge1xuICAgICAgICBvdXQgKz0gJyAmJiBzZWxmLl9vcHRzLnVua25vd25Gb3JtYXRzLmluZGV4T2YoJyArICgkc2NoZW1hVmFsdWUpICsgJykgPT0gLTEgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnKSB8fCAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyAoJyArICgkZm9ybWF0KSArICcgJiYgJyArICgkZm9ybWF0VHlwZSkgKyAnID09IFxcJycgKyAoJHJ1bGVUeXBlKSArICdcXCcgJiYgISh0eXBlb2YgJyArICgkZm9ybWF0KSArICcgPT0gXFwnZnVuY3Rpb25cXCcgPyAnO1xuICAgIGlmIChpdC5hc3luYykge1xuICAgICAgb3V0ICs9ICcgKGFzeW5jJyArICgkbHZsKSArICcgPyBhd2FpdCAnICsgKCRmb3JtYXQpICsgJygnICsgKCRkYXRhKSArICcpIDogJyArICgkZm9ybWF0KSArICcoJyArICgkZGF0YSkgKyAnKSkgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgJyArICgkZm9ybWF0KSArICcoJyArICgkZGF0YSkgKyAnKSAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyA6ICcgKyAoJGZvcm1hdCkgKyAnLnRlc3QoJyArICgkZGF0YSkgKyAnKSkpKSkgeyc7XG4gIH0gZWxzZSB7XG4gICAgdmFyICRmb3JtYXQgPSBpdC5mb3JtYXRzWyRzY2hlbWFdO1xuICAgIGlmICghJGZvcm1hdCkge1xuICAgICAgaWYgKCR1bmtub3duRm9ybWF0cyA9PSAnaWdub3JlJykge1xuICAgICAgICBpdC5sb2dnZXIud2FybigndW5rbm93biBmb3JtYXQgXCInICsgJHNjaGVtYSArICdcIiBpZ25vcmVkIGluIHNjaGVtYSBhdCBwYXRoIFwiJyArIGl0LmVyclNjaGVtYVBhdGggKyAnXCInKTtcbiAgICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICBvdXQgKz0gJyBpZiAodHJ1ZSkgeyAnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgICB9IGVsc2UgaWYgKCRhbGxvd1Vua25vd24gJiYgJHVua25vd25Gb3JtYXRzLmluZGV4T2YoJHNjaGVtYSkgPj0gMCkge1xuICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBmb3JtYXQgXCInICsgJHNjaGVtYSArICdcIiBpcyB1c2VkIGluIHNjaGVtYSBhdCBwYXRoIFwiJyArIGl0LmVyclNjaGVtYVBhdGggKyAnXCInKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyICRpc09iamVjdCA9IHR5cGVvZiAkZm9ybWF0ID09ICdvYmplY3QnICYmICEoJGZvcm1hdCBpbnN0YW5jZW9mIFJlZ0V4cCkgJiYgJGZvcm1hdC52YWxpZGF0ZTtcbiAgICB2YXIgJGZvcm1hdFR5cGUgPSAkaXNPYmplY3QgJiYgJGZvcm1hdC50eXBlIHx8ICdzdHJpbmcnO1xuICAgIGlmICgkaXNPYmplY3QpIHtcbiAgICAgIHZhciAkYXN5bmMgPSAkZm9ybWF0LmFzeW5jID09PSB0cnVlO1xuICAgICAgJGZvcm1hdCA9ICRmb3JtYXQudmFsaWRhdGU7XG4gICAgfVxuICAgIGlmICgkZm9ybWF0VHlwZSAhPSAkcnVsZVR5cGUpIHtcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICBpZiAoJGFzeW5jKSB7XG4gICAgICBpZiAoIWl0LmFzeW5jKSB0aHJvdyBuZXcgRXJyb3IoJ2FzeW5jIGZvcm1hdCBpbiBzeW5jIHNjaGVtYScpO1xuICAgICAgdmFyICRmb3JtYXRSZWYgPSAnZm9ybWF0cycgKyBpdC51dGlsLmdldFByb3BlcnR5KCRzY2hlbWEpICsgJy52YWxpZGF0ZSc7XG4gICAgICBvdXQgKz0gJyBpZiAoIShhd2FpdCAnICsgKCRmb3JtYXRSZWYpICsgJygnICsgKCRkYXRhKSArICcpKSkgeyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyBpZiAoISAnO1xuICAgICAgdmFyICRmb3JtYXRSZWYgPSAnZm9ybWF0cycgKyBpdC51dGlsLmdldFByb3BlcnR5KCRzY2hlbWEpO1xuICAgICAgaWYgKCRpc09iamVjdCkgJGZvcm1hdFJlZiArPSAnLnZhbGlkYXRlJztcbiAgICAgIGlmICh0eXBlb2YgJGZvcm1hdCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG91dCArPSAnICcgKyAoJGZvcm1hdFJlZikgKyAnKCcgKyAoJGRhdGEpICsgJykgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnICcgKyAoJGZvcm1hdFJlZikgKyAnLnRlc3QoJyArICgkZGF0YSkgKyAnKSAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcpIHsgJztcbiAgICB9XG4gIH1cbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdmb3JtYXQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGZvcm1hdDogICc7XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnJyArICgkc2NoZW1hVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJycgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkc2NoZW1hKSk7XG4gICAgfVxuICAgIG91dCArPSAnICB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBtYXRjaCBmb3JtYXQgXCInO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICdcXCcgKyAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICsgXFwnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArIChpdC51dGlsLmVzY2FwZVF1b3Rlcygkc2NoZW1hKSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJ1wiXFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAndmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkc2NoZW1hKSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnIH0gJztcbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9pZihpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gICRpdC5sZXZlbCsrO1xuICB2YXIgJG5leHRWYWxpZCA9ICd2YWxpZCcgKyAkaXQubGV2ZWw7XG4gIHZhciAkdGhlblNjaCA9IGl0LnNjaGVtYVsndGhlbiddLFxuICAgICRlbHNlU2NoID0gaXQuc2NoZW1hWydlbHNlJ10sXG4gICAgJHRoZW5QcmVzZW50ID0gJHRoZW5TY2ggIT09IHVuZGVmaW5lZCAmJiAoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/ICh0eXBlb2YgJHRoZW5TY2ggPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHRoZW5TY2gpLmxlbmd0aCA+IDApIHx8ICR0aGVuU2NoID09PSBmYWxzZSA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHRoZW5TY2gsIGl0LlJVTEVTLmFsbCkpLFxuICAgICRlbHNlUHJlc2VudCA9ICRlbHNlU2NoICE9PSB1bmRlZmluZWQgJiYgKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyAodHlwZW9mICRlbHNlU2NoID09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKCRlbHNlU2NoKS5sZW5ndGggPiAwKSB8fCAkZWxzZVNjaCA9PT0gZmFsc2UgOiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRlbHNlU2NoLCBpdC5SVUxFUy5hbGwpKSxcbiAgICAkY3VycmVudEJhc2VJZCA9ICRpdC5iYXNlSWQ7XG4gIGlmICgkdGhlblByZXNlbnQgfHwgJGVsc2VQcmVzZW50KSB7XG4gICAgdmFyICRpZkNsYXVzZTtcbiAgICAkaXQuY3JlYXRlRXJyb3JzID0gZmFsc2U7XG4gICAgJGl0LnNjaGVtYSA9ICRzY2hlbWE7XG4gICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aDtcbiAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoO1xuICAgIG91dCArPSAnIHZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7IHZhciAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgICc7XG4gICAgdmFyICR3YXNDb21wb3NpdGUgPSBpdC5jb21wb3NpdGVSdWxlO1xuICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9IHRydWU7XG4gICAgb3V0ICs9ICcgICcgKyAoaXQudmFsaWRhdGUoJGl0KSkgKyAnICc7XG4gICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICRpdC5jcmVhdGVFcnJvcnMgPSB0cnVlO1xuICAgIG91dCArPSAnICBlcnJvcnMgPSAnICsgKCRlcnJzKSArICc7IGlmICh2RXJyb3JzICE9PSBudWxsKSB7IGlmICgnICsgKCRlcnJzKSArICcpIHZFcnJvcnMubGVuZ3RoID0gJyArICgkZXJycykgKyAnOyBlbHNlIHZFcnJvcnMgPSBudWxsOyB9ICAnO1xuICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9ICR3YXNDb21wb3NpdGU7XG4gICAgaWYgKCR0aGVuUHJlc2VudCkge1xuICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICAnO1xuICAgICAgJGl0LnNjaGVtYSA9IGl0LnNjaGVtYVsndGhlbiddO1xuICAgICAgJGl0LnNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy50aGVuJztcbiAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvdGhlbic7XG4gICAgICBvdXQgKz0gJyAgJyArIChpdC52YWxpZGF0ZSgkaXQpKSArICcgJztcbiAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgIG91dCArPSAnICcgKyAoJHZhbGlkKSArICcgPSAnICsgKCRuZXh0VmFsaWQpICsgJzsgJztcbiAgICAgIGlmICgkdGhlblByZXNlbnQgJiYgJGVsc2VQcmVzZW50KSB7XG4gICAgICAgICRpZkNsYXVzZSA9ICdpZkNsYXVzZScgKyAkbHZsO1xuICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkaWZDbGF1c2UpICsgJyA9IFxcJ3RoZW5cXCc7ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkaWZDbGF1c2UgPSAnXFwndGhlblxcJyc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICBpZiAoJGVsc2VQcmVzZW50KSB7XG4gICAgICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgfVxuICAgIGlmICgkZWxzZVByZXNlbnQpIHtcbiAgICAgICRpdC5zY2hlbWEgPSBpdC5zY2hlbWFbJ2Vsc2UnXTtcbiAgICAgICRpdC5zY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArICcuZWxzZSc7XG4gICAgICAkaXQuZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnL2Vsc2UnO1xuICAgICAgb3V0ICs9ICcgICcgKyAoaXQudmFsaWRhdGUoJGl0KSkgKyAnICc7XG4gICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkbmV4dFZhbGlkKSArICc7ICc7XG4gICAgICBpZiAoJHRoZW5QcmVzZW50ICYmICRlbHNlUHJlc2VudCkge1xuICAgICAgICAkaWZDbGF1c2UgPSAnaWZDbGF1c2UnICsgJGx2bDtcbiAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJGlmQ2xhdXNlKSArICcgPSBcXCdlbHNlXFwnOyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJGlmQ2xhdXNlID0gJ1xcJ2Vsc2VcXCcnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyBpZiAoIScgKyAoJHZhbGlkKSArICcpIHsgICB2YXIgZXJyID0gICAnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ2lmJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBmYWlsaW5nS2V5d29yZDogJyArICgkaWZDbGF1c2UpICsgJyB9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgbWF0Y2ggXCJcXCcgKyAnICsgKCRpZkNsYXVzZSkgKyAnICsgXFwnXCIgc2NoZW1hXFwnICc7XG4gICAgICB9XG4gICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgfVxuICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IodkVycm9ycyk7ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSB2RXJyb3JzOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICB9XG4gICAgfVxuICAgIG91dCArPSAnIH0gICAnO1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vYWxsIHJlcXVpcmVzIG11c3QgYmUgZXhwbGljaXQgYmVjYXVzZSBicm93c2VyaWZ5IHdvbid0IHdvcmsgd2l0aCBkeW5hbWljIHJlcXVpcmVzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgJyRyZWYnOiByZXF1aXJlKCcuL3JlZicpLFxuICBhbGxPZjogcmVxdWlyZSgnLi9hbGxPZicpLFxuICBhbnlPZjogcmVxdWlyZSgnLi9hbnlPZicpLFxuICAnJGNvbW1lbnQnOiByZXF1aXJlKCcuL2NvbW1lbnQnKSxcbiAgY29uc3Q6IHJlcXVpcmUoJy4vY29uc3QnKSxcbiAgY29udGFpbnM6IHJlcXVpcmUoJy4vY29udGFpbnMnKSxcbiAgZGVwZW5kZW5jaWVzOiByZXF1aXJlKCcuL2RlcGVuZGVuY2llcycpLFxuICAnZW51bSc6IHJlcXVpcmUoJy4vZW51bScpLFxuICBmb3JtYXQ6IHJlcXVpcmUoJy4vZm9ybWF0JyksXG4gICdpZic6IHJlcXVpcmUoJy4vaWYnKSxcbiAgaXRlbXM6IHJlcXVpcmUoJy4vaXRlbXMnKSxcbiAgbWF4aW11bTogcmVxdWlyZSgnLi9fbGltaXQnKSxcbiAgbWluaW11bTogcmVxdWlyZSgnLi9fbGltaXQnKSxcbiAgbWF4SXRlbXM6IHJlcXVpcmUoJy4vX2xpbWl0SXRlbXMnKSxcbiAgbWluSXRlbXM6IHJlcXVpcmUoJy4vX2xpbWl0SXRlbXMnKSxcbiAgbWF4TGVuZ3RoOiByZXF1aXJlKCcuL19saW1pdExlbmd0aCcpLFxuICBtaW5MZW5ndGg6IHJlcXVpcmUoJy4vX2xpbWl0TGVuZ3RoJyksXG4gIG1heFByb3BlcnRpZXM6IHJlcXVpcmUoJy4vX2xpbWl0UHJvcGVydGllcycpLFxuICBtaW5Qcm9wZXJ0aWVzOiByZXF1aXJlKCcuL19saW1pdFByb3BlcnRpZXMnKSxcbiAgbXVsdGlwbGVPZjogcmVxdWlyZSgnLi9tdWx0aXBsZU9mJyksXG4gIG5vdDogcmVxdWlyZSgnLi9ub3QnKSxcbiAgb25lT2Y6IHJlcXVpcmUoJy4vb25lT2YnKSxcbiAgcGF0dGVybjogcmVxdWlyZSgnLi9wYXR0ZXJuJyksXG4gIHByb3BlcnRpZXM6IHJlcXVpcmUoJy4vcHJvcGVydGllcycpLFxuICBwcm9wZXJ0eU5hbWVzOiByZXF1aXJlKCcuL3Byb3BlcnR5TmFtZXMnKSxcbiAgcmVxdWlyZWQ6IHJlcXVpcmUoJy4vcmVxdWlyZWQnKSxcbiAgdW5pcXVlSXRlbXM6IHJlcXVpcmUoJy4vdW5pcXVlSXRlbXMnKSxcbiAgdmFsaWRhdGU6IHJlcXVpcmUoJy4vdmFsaWRhdGUnKVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfaXRlbXMoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGVycnMgPSAnZXJyc19fJyArICRsdmw7XG4gIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICB2YXIgJGNsb3NpbmdCcmFjZXMgPSAnJztcbiAgJGl0LmxldmVsKys7XG4gIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgdmFyICRpZHggPSAnaScgKyAkbHZsLFxuICAgICRkYXRhTnh0ID0gJGl0LmRhdGFMZXZlbCA9IGl0LmRhdGFMZXZlbCArIDEsXG4gICAgJG5leHREYXRhID0gJ2RhdGEnICsgJGRhdGFOeHQsXG4gICAgJGN1cnJlbnRCYXNlSWQgPSBpdC5iYXNlSWQ7XG4gIG91dCArPSAndmFyICcgKyAoJGVycnMpICsgJyA9IGVycm9yczt2YXIgJyArICgkdmFsaWQpICsgJzsnO1xuICBpZiAoQXJyYXkuaXNBcnJheSgkc2NoZW1hKSkge1xuICAgIHZhciAkYWRkaXRpb25hbEl0ZW1zID0gaXQuc2NoZW1hLmFkZGl0aW9uYWxJdGVtcztcbiAgICBpZiAoJGFkZGl0aW9uYWxJdGVtcyA9PT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICcgKyAoJHZhbGlkKSArICcgPSAnICsgKCRkYXRhKSArICcubGVuZ3RoIDw9ICcgKyAoJHNjaGVtYS5sZW5ndGgpICsgJzsgJztcbiAgICAgIHZhciAkY3VyckVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aDtcbiAgICAgICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvYWRkaXRpb25hbEl0ZW1zJztcbiAgICAgIG91dCArPSAnICBpZiAoIScgKyAoJHZhbGlkKSArICcpIHsgICAnO1xuICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnYWRkaXRpb25hbEl0ZW1zJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBsaW1pdDogJyArICgkc2NoZW1hLmxlbmd0aCkgKyAnIH0gJztcbiAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgTk9UIGhhdmUgbW9yZSB0aGFuICcgKyAoJHNjaGVtYS5sZW5ndGgpICsgJyBpdGVtc1xcJyAnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogZmFsc2UgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgIH1cbiAgICAgIHZhciBfX2VyciA9IG91dDtcbiAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgJGVyclNjaGVtYVBhdGggPSAkY3VyckVyclNjaGVtYVBhdGg7XG4gICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgYXJyMSA9ICRzY2hlbWE7XG4gICAgaWYgKGFycjEpIHtcbiAgICAgIHZhciAkc2NoLCAkaSA9IC0xLFxuICAgICAgICBsMSA9IGFycjEubGVuZ3RoIC0gMTtcbiAgICAgIHdoaWxlICgkaSA8IGwxKSB7XG4gICAgICAgICRzY2ggPSBhcnIxWyRpICs9IDFdO1xuICAgICAgICBpZiAoKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyAodHlwZW9mICRzY2ggPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHNjaCkubGVuZ3RoID4gMCkgfHwgJHNjaCA9PT0gZmFsc2UgOiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRzY2gsIGl0LlJVTEVTLmFsbCkpKSB7XG4gICAgICAgICAgb3V0ICs9ICcgJyArICgkbmV4dFZhbGlkKSArICcgPSB0cnVlOyBpZiAoJyArICgkZGF0YSkgKyAnLmxlbmd0aCA+ICcgKyAoJGkpICsgJykgeyAnO1xuICAgICAgICAgIHZhciAkcGFzc0RhdGEgPSAkZGF0YSArICdbJyArICRpICsgJ10nO1xuICAgICAgICAgICRpdC5zY2hlbWEgPSAkc2NoO1xuICAgICAgICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGggKyAnWycgKyAkaSArICddJztcbiAgICAgICAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoICsgJy8nICsgJGk7XG4gICAgICAgICAgJGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAkaSwgaXQub3B0cy5qc29uUG9pbnRlcnMsIHRydWUpO1xuICAgICAgICAgICRpdC5kYXRhUGF0aEFyclskZGF0YU54dF0gPSAkaTtcbiAgICAgICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArIChpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKSkgKyAnICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJyArICgkY29kZSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIH0gICc7XG4gICAgICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJykgeyAnO1xuICAgICAgICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mICRhZGRpdGlvbmFsSXRlbXMgPT0gJ29iamVjdCcgJiYgKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyAodHlwZW9mICRhZGRpdGlvbmFsSXRlbXMgPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJGFkZGl0aW9uYWxJdGVtcykubGVuZ3RoID4gMCkgfHwgJGFkZGl0aW9uYWxJdGVtcyA9PT0gZmFsc2UgOiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRhZGRpdGlvbmFsSXRlbXMsIGl0LlJVTEVTLmFsbCkpKSB7XG4gICAgICAkaXQuc2NoZW1hID0gJGFkZGl0aW9uYWxJdGVtcztcbiAgICAgICRpdC5zY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArICcuYWRkaXRpb25hbEl0ZW1zJztcbiAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvYWRkaXRpb25hbEl0ZW1zJztcbiAgICAgIG91dCArPSAnICcgKyAoJG5leHRWYWxpZCkgKyAnID0gdHJ1ZTsgaWYgKCcgKyAoJGRhdGEpICsgJy5sZW5ndGggPiAnICsgKCRzY2hlbWEubGVuZ3RoKSArICcpIHsgIGZvciAodmFyICcgKyAoJGlkeCkgKyAnID0gJyArICgkc2NoZW1hLmxlbmd0aCkgKyAnOyAnICsgKCRpZHgpICsgJyA8ICcgKyAoJGRhdGEpICsgJy5sZW5ndGg7ICcgKyAoJGlkeCkgKyAnKyspIHsgJztcbiAgICAgICRpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGhFeHByKGl0LmVycm9yUGF0aCwgJGlkeCwgaXQub3B0cy5qc29uUG9pbnRlcnMsIHRydWUpO1xuICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGlkeCArICddJztcbiAgICAgICRpdC5kYXRhUGF0aEFyclskZGF0YU54dF0gPSAkaWR4O1xuICAgICAgdmFyICRjb2RlID0gaXQudmFsaWRhdGUoJGl0KTtcbiAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgIGlmIChpdC51dGlsLnZhck9jY3VyZW5jZXMoJGNvZGUsICRuZXh0RGF0YSkgPCAyKSB7XG4gICAgICAgIG91dCArPSAnICcgKyAoaXQudXRpbC52YXJSZXBsYWNlKCRjb2RlLCAkbmV4dERhdGEsICRwYXNzRGF0YSkpICsgJyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHREYXRhKSArICcgPSAnICsgKCRwYXNzRGF0YSkgKyAnOyAnICsgKCRjb2RlKSArICcgJztcbiAgICAgIH1cbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnIGlmICghJyArICgkbmV4dFZhbGlkKSArICcpIGJyZWFrOyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSB9ICAnO1xuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyAodHlwZW9mICRzY2hlbWEgPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHNjaGVtYSkubGVuZ3RoID4gMCkgfHwgJHNjaGVtYSA9PT0gZmFsc2UgOiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRzY2hlbWEsIGl0LlJVTEVTLmFsbCkpKSB7XG4gICAgJGl0LnNjaGVtYSA9ICRzY2hlbWE7XG4gICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aDtcbiAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoO1xuICAgIG91dCArPSAnICBmb3IgKHZhciAnICsgKCRpZHgpICsgJyA9ICcgKyAoMCkgKyAnOyAnICsgKCRpZHgpICsgJyA8ICcgKyAoJGRhdGEpICsgJy5sZW5ndGg7ICcgKyAoJGlkeCkgKyAnKyspIHsgJztcbiAgICAkaXQuZXJyb3JQYXRoID0gaXQudXRpbC5nZXRQYXRoRXhwcihpdC5lcnJvclBhdGgsICRpZHgsIGl0Lm9wdHMuanNvblBvaW50ZXJzLCB0cnVlKTtcbiAgICB2YXIgJHBhc3NEYXRhID0gJGRhdGEgKyAnWycgKyAkaWR4ICsgJ10nO1xuICAgICRpdC5kYXRhUGF0aEFyclskZGF0YU54dF0gPSAkaWR4O1xuICAgIHZhciAkY29kZSA9IGl0LnZhbGlkYXRlKCRpdCk7XG4gICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgIGlmIChpdC51dGlsLnZhck9jY3VyZW5jZXMoJGNvZGUsICRuZXh0RGF0YSkgPCAyKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKGl0LnV0aWwudmFyUmVwbGFjZSgkY29kZSwgJG5leHREYXRhLCAkcGFzc0RhdGEpKSArICcgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHREYXRhKSArICcgPSAnICsgKCRwYXNzRGF0YSkgKyAnOyAnICsgKCRjb2RlKSArICcgJztcbiAgICB9XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmICghJyArICgkbmV4dFZhbGlkKSArICcpIGJyZWFrOyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9JztcbiAgfVxuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnICcgKyAoJGNsb3NpbmdCcmFjZXMpICsgJyBpZiAoJyArICgkZXJycykgKyAnID09IGVycm9ycykgeyc7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfbXVsdGlwbGVPZihpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgaWYgKCEoJGlzRGF0YSB8fCB0eXBlb2YgJHNjaGVtYSA9PSAnbnVtYmVyJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJGtleXdvcmQgKyAnIG11c3QgYmUgbnVtYmVyJyk7XG4gIH1cbiAgb3V0ICs9ICd2YXIgZGl2aXNpb24nICsgKCRsdmwpICsgJztpZiAoJztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9PSB1bmRlZmluZWQgJiYgKCB0eXBlb2YgJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPSBcXCdudW1iZXJcXCcgfHwgJztcbiAgfVxuICBvdXQgKz0gJyAoZGl2aXNpb24nICsgKCRsdmwpICsgJyA9ICcgKyAoJGRhdGEpICsgJyAvICcgKyAoJHNjaGVtYVZhbHVlKSArICcsICc7XG4gIGlmIChpdC5vcHRzLm11bHRpcGxlT2ZQcmVjaXNpb24pIHtcbiAgICBvdXQgKz0gJyBNYXRoLmFicyhNYXRoLnJvdW5kKGRpdmlzaW9uJyArICgkbHZsKSArICcpIC0gZGl2aXNpb24nICsgKCRsdmwpICsgJykgPiAxZS0nICsgKGl0Lm9wdHMubXVsdGlwbGVPZlByZWNpc2lvbikgKyAnICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgZGl2aXNpb24nICsgKCRsdmwpICsgJyAhPT0gcGFyc2VJbnQoZGl2aXNpb24nICsgKCRsdmwpICsgJykgJztcbiAgfVxuICBvdXQgKz0gJyApICc7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgICkgICc7XG4gIH1cbiAgb3V0ICs9ICcgKSB7ICAgJztcbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdtdWx0aXBsZU9mJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBtdWx0aXBsZU9mOiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIGJlIG11bHRpcGxlIG9mICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ1xcJyArICcgKyAoJHNjaGVtYVZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hVmFsdWUpICsgJ1xcJyc7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAndmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnfSAnO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX25vdChpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJGVycnMgPSAnZXJyc19fJyArICRsdmw7XG4gIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICBpZiAoKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyAodHlwZW9mICRzY2hlbWEgPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHNjaGVtYSkubGVuZ3RoID4gMCkgfHwgJHNjaGVtYSA9PT0gZmFsc2UgOiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRzY2hlbWEsIGl0LlJVTEVTLmFsbCkpKSB7XG4gICAgJGl0LnNjaGVtYSA9ICRzY2hlbWE7XG4gICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aDtcbiAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoO1xuICAgIG91dCArPSAnIHZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7ICAnO1xuICAgIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSB0cnVlO1xuICAgICRpdC5jcmVhdGVFcnJvcnMgPSBmYWxzZTtcbiAgICB2YXIgJGFsbEVycm9yc09wdGlvbjtcbiAgICBpZiAoJGl0Lm9wdHMuYWxsRXJyb3JzKSB7XG4gICAgICAkYWxsRXJyb3JzT3B0aW9uID0gJGl0Lm9wdHMuYWxsRXJyb3JzO1xuICAgICAgJGl0Lm9wdHMuYWxsRXJyb3JzID0gZmFsc2U7XG4gICAgfVxuICAgIG91dCArPSAnICcgKyAoaXQudmFsaWRhdGUoJGl0KSkgKyAnICc7XG4gICAgJGl0LmNyZWF0ZUVycm9ycyA9IHRydWU7XG4gICAgaWYgKCRhbGxFcnJvcnNPcHRpb24pICRpdC5vcHRzLmFsbEVycm9ycyA9ICRhbGxFcnJvcnNPcHRpb247XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gJHdhc0NvbXBvc2l0ZTtcbiAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcpIHsgICAnO1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdub3QnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7fSAnO1xuICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIE5PVCBiZSB2YWxpZFxcJyAnO1xuICAgICAgfVxuICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB7fSAnO1xuICAgIH1cbiAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gZWxzZSB7ICBlcnJvcnMgPSAnICsgKCRlcnJzKSArICc7IGlmICh2RXJyb3JzICE9PSBudWxsKSB7IGlmICgnICsgKCRlcnJzKSArICcpIHZFcnJvcnMubGVuZ3RoID0gJyArICgkZXJycykgKyAnOyBlbHNlIHZFcnJvcnMgPSBudWxsOyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMuYWxsRXJyb3JzKSB7XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dCArPSAnICB2YXIgZXJyID0gICAnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ25vdCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHt9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgTk9UIGJlIHZhbGlkXFwnICc7XG4gICAgICB9XG4gICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgfVxuICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmIChmYWxzZSkgeyAnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9vbmVPZihpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICB2YXIgJGN1cnJlbnRCYXNlSWQgPSAkaXQuYmFzZUlkLFxuICAgICRwcmV2VmFsaWQgPSAncHJldlZhbGlkJyArICRsdmwsXG4gICAgJHBhc3NpbmdTY2hlbWFzID0gJ3Bhc3NpbmdTY2hlbWFzJyArICRsdmw7XG4gIG91dCArPSAndmFyICcgKyAoJGVycnMpICsgJyA9IGVycm9ycyAsICcgKyAoJHByZXZWYWxpZCkgKyAnID0gZmFsc2UgLCAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2UgLCAnICsgKCRwYXNzaW5nU2NoZW1hcykgKyAnID0gbnVsbDsgJztcbiAgdmFyICR3YXNDb21wb3NpdGUgPSBpdC5jb21wb3NpdGVSdWxlO1xuICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSB0cnVlO1xuICB2YXIgYXJyMSA9ICRzY2hlbWE7XG4gIGlmIChhcnIxKSB7XG4gICAgdmFyICRzY2gsICRpID0gLTEsXG4gICAgICBsMSA9IGFycjEubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoJGkgPCBsMSkge1xuICAgICAgJHNjaCA9IGFycjFbJGkgKz0gMV07XG4gICAgICBpZiAoKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyAodHlwZW9mICRzY2ggPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHNjaCkubGVuZ3RoID4gMCkgfHwgJHNjaCA9PT0gZmFsc2UgOiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRzY2gsIGl0LlJVTEVTLmFsbCkpKSB7XG4gICAgICAgICRpdC5zY2hlbWEgPSAkc2NoO1xuICAgICAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoICsgJ1snICsgJGkgKyAnXSc7XG4gICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGggKyAnLycgKyAkaTtcbiAgICAgICAgb3V0ICs9ICcgICcgKyAoaXQudmFsaWRhdGUoJGl0KSkgKyAnICc7XG4gICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0VmFsaWQpICsgJyA9IHRydWU7ICc7XG4gICAgICB9XG4gICAgICBpZiAoJGkpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnICYmICcgKyAoJHByZXZWYWxpZCkgKyAnKSB7ICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgJyArICgkcGFzc2luZ1NjaGVtYXMpICsgJyA9IFsnICsgKCRwYXNzaW5nU2NoZW1hcykgKyAnLCAnICsgKCRpKSArICddOyB9IGVsc2UgeyAnO1xuICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcpIHsgJyArICgkdmFsaWQpICsgJyA9ICcgKyAoJHByZXZWYWxpZCkgKyAnID0gdHJ1ZTsgJyArICgkcGFzc2luZ1NjaGVtYXMpICsgJyA9ICcgKyAoJGkpICsgJzsgfSc7XG4gICAgfVxuICB9XG4gIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9ICR3YXNDb21wb3NpdGU7XG4gIG91dCArPSAnJyArICgkY2xvc2luZ0JyYWNlcykgKyAnaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ29uZU9mJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBwYXNzaW5nU2NoZW1hczogJyArICgkcGFzc2luZ1NjaGVtYXMpICsgJyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBtYXRjaCBleGFjdGx5IG9uZSBzY2hlbWEgaW4gb25lT2ZcXCcgJztcbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHt9ICc7XG4gIH1cbiAgb3V0ICs9ICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IodkVycm9ycyk7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IHZFcnJvcnM7IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH1cbiAgb3V0ICs9ICd9IGVsc2UgeyAgZXJyb3JzID0gJyArICgkZXJycykgKyAnOyBpZiAodkVycm9ycyAhPT0gbnVsbCkgeyBpZiAoJyArICgkZXJycykgKyAnKSB2RXJyb3JzLmxlbmd0aCA9ICcgKyAoJGVycnMpICsgJzsgZWxzZSB2RXJyb3JzID0gbnVsbDsgfSc7XG4gIGlmIChpdC5vcHRzLmFsbEVycm9ycykge1xuICAgIG91dCArPSAnIH0gJztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9wYXR0ZXJuKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy4kZGF0YSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICB2YXIgJHJlZ2V4cCA9ICRpc0RhdGEgPyAnKG5ldyBSZWdFeHAoJyArICRzY2hlbWFWYWx1ZSArICcpKScgOiBpdC51c2VQYXR0ZXJuKCRzY2hlbWEpO1xuICBvdXQgKz0gJ2lmICggJztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ3N0cmluZ1xcJykgfHwgJztcbiAgfVxuICBvdXQgKz0gJyAhJyArICgkcmVnZXhwKSArICcudGVzdCgnICsgKCRkYXRhKSArICcpICkgeyAgICc7XG4gIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgncGF0dGVybicpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgcGF0dGVybjogICc7XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnJyArICgkc2NoZW1hVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJycgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkc2NoZW1hKSk7XG4gICAgfVxuICAgIG91dCArPSAnICB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBtYXRjaCBwYXR0ZXJuIFwiJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAnXFwnICsgJyArICgkc2NoZW1hVmFsdWUpICsgJyArIFxcJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHNjaGVtYSkpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICdcIlxcJyAnO1xuICAgIH1cbiAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICBvdXQgKz0gJyAsIHNjaGVtYTogICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ3ZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJHNjaGVtYSkpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgICAgICAgICAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHt9ICc7XG4gIH1cbiAgdmFyIF9fZXJyID0gb3V0O1xuICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpdC5hc3luYykge1xuICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgfVxuICBvdXQgKz0gJ30gJztcbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9wcm9wZXJ0aWVzKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICB2YXIgJGtleSA9ICdrZXknICsgJGx2bCxcbiAgICAkaWR4ID0gJ2lkeCcgKyAkbHZsLFxuICAgICRkYXRhTnh0ID0gJGl0LmRhdGFMZXZlbCA9IGl0LmRhdGFMZXZlbCArIDEsXG4gICAgJG5leHREYXRhID0gJ2RhdGEnICsgJGRhdGFOeHQsXG4gICAgJGRhdGFQcm9wZXJ0aWVzID0gJ2RhdGFQcm9wZXJ0aWVzJyArICRsdmw7XG4gIHZhciAkc2NoZW1hS2V5cyA9IE9iamVjdC5rZXlzKCRzY2hlbWEgfHwge30pLmZpbHRlcihub3RQcm90byksXG4gICAgJHBQcm9wZXJ0aWVzID0gaXQuc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzIHx8IHt9LFxuICAgICRwUHJvcGVydHlLZXlzID0gT2JqZWN0LmtleXMoJHBQcm9wZXJ0aWVzKS5maWx0ZXIobm90UHJvdG8pLFxuICAgICRhUHJvcGVydGllcyA9IGl0LnNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyxcbiAgICAkc29tZVByb3BlcnRpZXMgPSAkc2NoZW1hS2V5cy5sZW5ndGggfHwgJHBQcm9wZXJ0eUtleXMubGVuZ3RoLFxuICAgICRub0FkZGl0aW9uYWwgPSAkYVByb3BlcnRpZXMgPT09IGZhbHNlLFxuICAgICRhZGRpdGlvbmFsSXNTY2hlbWEgPSB0eXBlb2YgJGFQcm9wZXJ0aWVzID09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKCRhUHJvcGVydGllcykubGVuZ3RoLFxuICAgICRyZW1vdmVBZGRpdGlvbmFsID0gaXQub3B0cy5yZW1vdmVBZGRpdGlvbmFsLFxuICAgICRjaGVja0FkZGl0aW9uYWwgPSAkbm9BZGRpdGlvbmFsIHx8ICRhZGRpdGlvbmFsSXNTY2hlbWEgfHwgJHJlbW92ZUFkZGl0aW9uYWwsXG4gICAgJG93blByb3BlcnRpZXMgPSBpdC5vcHRzLm93blByb3BlcnRpZXMsXG4gICAgJGN1cnJlbnRCYXNlSWQgPSBpdC5iYXNlSWQ7XG4gIHZhciAkcmVxdWlyZWQgPSBpdC5zY2hlbWEucmVxdWlyZWQ7XG4gIGlmICgkcmVxdWlyZWQgJiYgIShpdC5vcHRzLiRkYXRhICYmICRyZXF1aXJlZC4kZGF0YSkgJiYgJHJlcXVpcmVkLmxlbmd0aCA8IGl0Lm9wdHMubG9vcFJlcXVpcmVkKSB7XG4gICAgdmFyICRyZXF1aXJlZEhhc2ggPSBpdC51dGlsLnRvSGFzaCgkcmVxdWlyZWQpO1xuICB9XG5cbiAgZnVuY3Rpb24gbm90UHJvdG8ocCkge1xuICAgIHJldHVybiBwICE9PSAnX19wcm90b19fJztcbiAgfVxuICBvdXQgKz0gJ3ZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7dmFyICcgKyAoJG5leHRWYWxpZCkgKyAnID0gdHJ1ZTsnO1xuICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICBvdXQgKz0gJyB2YXIgJyArICgkZGF0YVByb3BlcnRpZXMpICsgJyA9IHVuZGVmaW5lZDsnO1xuICB9XG4gIGlmICgkY2hlY2tBZGRpdGlvbmFsKSB7XG4gICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnID0gJyArICgkZGF0YVByb3BlcnRpZXMpICsgJyB8fCBPYmplY3Qua2V5cygnICsgKCRkYXRhKSArICcpOyBmb3IgKHZhciAnICsgKCRpZHgpICsgJz0wOyAnICsgKCRpZHgpICsgJzwnICsgKCRkYXRhUHJvcGVydGllcykgKyAnLmxlbmd0aDsgJyArICgkaWR4KSArICcrKykgeyB2YXIgJyArICgka2V5KSArICcgPSAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnWycgKyAoJGlkeCkgKyAnXTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgZm9yICh2YXIgJyArICgka2V5KSArICcgaW4gJyArICgkZGF0YSkgKyAnKSB7ICc7XG4gICAgfVxuICAgIGlmICgkc29tZVByb3BlcnRpZXMpIHtcbiAgICAgIG91dCArPSAnIHZhciBpc0FkZGl0aW9uYWwnICsgKCRsdmwpICsgJyA9ICEoZmFsc2UgJztcbiAgICAgIGlmICgkc2NoZW1hS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKCRzY2hlbWFLZXlzLmxlbmd0aCA+IDgpIHtcbiAgICAgICAgICBvdXQgKz0gJyB8fCB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcuaGFzT3duUHJvcGVydHkoJyArICgka2V5KSArICcpICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGFycjEgPSAkc2NoZW1hS2V5cztcbiAgICAgICAgICBpZiAoYXJyMSkge1xuICAgICAgICAgICAgdmFyICRwcm9wZXJ0eUtleSwgaTEgPSAtMSxcbiAgICAgICAgICAgICAgbDEgPSBhcnIxLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoaTEgPCBsMSkge1xuICAgICAgICAgICAgICAkcHJvcGVydHlLZXkgPSBhcnIxW2kxICs9IDFdO1xuICAgICAgICAgICAgICBvdXQgKz0gJyB8fCAnICsgKCRrZXkpICsgJyA9PSAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJHByb3BlcnR5S2V5KSkgKyAnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoJHBQcm9wZXJ0eUtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBhcnIyID0gJHBQcm9wZXJ0eUtleXM7XG4gICAgICAgIGlmIChhcnIyKSB7XG4gICAgICAgICAgdmFyICRwUHJvcGVydHksICRpID0gLTEsXG4gICAgICAgICAgICBsMiA9IGFycjIubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoJGkgPCBsMikge1xuICAgICAgICAgICAgJHBQcm9wZXJ0eSA9IGFycjJbJGkgKz0gMV07XG4gICAgICAgICAgICBvdXQgKz0gJyB8fCAnICsgKGl0LnVzZVBhdHRlcm4oJHBQcm9wZXJ0eSkpICsgJy50ZXN0KCcgKyAoJGtleSkgKyAnKSAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb3V0ICs9ICcgKTsgaWYgKGlzQWRkaXRpb25hbCcgKyAoJGx2bCkgKyAnKSB7ICc7XG4gICAgfVxuICAgIGlmICgkcmVtb3ZlQWRkaXRpb25hbCA9PSAnYWxsJykge1xuICAgICAgb3V0ICs9ICcgZGVsZXRlICcgKyAoJGRhdGEpICsgJ1snICsgKCRrZXkpICsgJ107ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciAkY3VycmVudEVycm9yUGF0aCA9IGl0LmVycm9yUGF0aDtcbiAgICAgIHZhciAkYWRkaXRpb25hbFByb3BlcnR5ID0gJ1xcJyArICcgKyAka2V5ICsgJyArIFxcJyc7XG4gICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgIGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAka2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICB9XG4gICAgICBpZiAoJG5vQWRkaXRpb25hbCkge1xuICAgICAgICBpZiAoJHJlbW92ZUFkZGl0aW9uYWwpIHtcbiAgICAgICAgICBvdXQgKz0gJyBkZWxldGUgJyArICgkZGF0YSkgKyAnWycgKyAoJGtleSkgKyAnXTsgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyAnICsgKCRuZXh0VmFsaWQpICsgJyA9IGZhbHNlOyAnO1xuICAgICAgICAgIHZhciAkY3VyckVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aDtcbiAgICAgICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnL2FkZGl0aW9uYWxQcm9wZXJ0aWVzJztcbiAgICAgICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnYWRkaXRpb25hbFByb3BlcnRpZXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGFkZGl0aW9uYWxQcm9wZXJ0eTogXFwnJyArICgkYWRkaXRpb25hbFByb3BlcnR5KSArICdcXCcgfSAnO1xuICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnJztcbiAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIG91dCArPSAnaXMgYW4gaW52YWxpZCBhZGRpdGlvbmFsIHByb3BlcnR5JztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJ3Nob3VsZCBOT1QgaGF2ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG91dCArPSAnXFwnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiBmYWxzZSAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICAkZXJyU2NoZW1hUGF0aCA9ICRjdXJyRXJyU2NoZW1hUGF0aDtcbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgYnJlYWs7ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCRhZGRpdGlvbmFsSXNTY2hlbWEpIHtcbiAgICAgICAgaWYgKCRyZW1vdmVBZGRpdGlvbmFsID09ICdmYWlsaW5nJykge1xuICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7ICAnO1xuICAgICAgICAgIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgICAgICAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSB0cnVlO1xuICAgICAgICAgICRpdC5zY2hlbWEgPSAkYVByb3BlcnRpZXM7XG4gICAgICAgICAgJGl0LnNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy5hZGRpdGlvbmFsUHJvcGVydGllcyc7XG4gICAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9hZGRpdGlvbmFsUHJvcGVydGllcyc7XG4gICAgICAgICAgJGl0LmVycm9yUGF0aCA9IGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSA/IGl0LmVycm9yUGF0aCA6IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAka2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGtleSArICddJztcbiAgICAgICAgICAkaXQuZGF0YVBhdGhBcnJbJGRhdGFOeHRdID0gJGtleTtcbiAgICAgICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArIChpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKSkgKyAnICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJyArICgkY29kZSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIGlmICghJyArICgkbmV4dFZhbGlkKSArICcpIHsgZXJyb3JzID0gJyArICgkZXJycykgKyAnOyBpZiAodmFsaWRhdGUuZXJyb3JzICE9PSBudWxsKSB7IGlmIChlcnJvcnMpIHZhbGlkYXRlLmVycm9ycy5sZW5ndGggPSBlcnJvcnM7IGVsc2UgdmFsaWRhdGUuZXJyb3JzID0gbnVsbDsgfSBkZWxldGUgJyArICgkZGF0YSkgKyAnWycgKyAoJGtleSkgKyAnXTsgfSAgJztcbiAgICAgICAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSAkd2FzQ29tcG9zaXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRpdC5zY2hlbWEgPSAkYVByb3BlcnRpZXM7XG4gICAgICAgICAgJGl0LnNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy5hZGRpdGlvbmFsUHJvcGVydGllcyc7XG4gICAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9hZGRpdGlvbmFsUHJvcGVydGllcyc7XG4gICAgICAgICAgJGl0LmVycm9yUGF0aCA9IGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSA/IGl0LmVycm9yUGF0aCA6IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAka2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGtleSArICddJztcbiAgICAgICAgICAkaXQuZGF0YVBhdGhBcnJbJGRhdGFOeHRdID0gJGtleTtcbiAgICAgICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArIChpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKSkgKyAnICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJyArICgkY29kZSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG5leHRWYWxpZCkgKyAnKSBicmVhazsgJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGl0LmVycm9yUGF0aCA9ICRjdXJyZW50RXJyb3JQYXRoO1xuICAgIH1cbiAgICBpZiAoJHNvbWVQcm9wZXJ0aWVzKSB7XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gICc7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJykgeyAnO1xuICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgIH1cbiAgfVxuICB2YXIgJHVzZURlZmF1bHRzID0gaXQub3B0cy51c2VEZWZhdWx0cyAmJiAhaXQuY29tcG9zaXRlUnVsZTtcbiAgaWYgKCRzY2hlbWFLZXlzLmxlbmd0aCkge1xuICAgIHZhciBhcnIzID0gJHNjaGVtYUtleXM7XG4gICAgaWYgKGFycjMpIHtcbiAgICAgIHZhciAkcHJvcGVydHlLZXksIGkzID0gLTEsXG4gICAgICAgIGwzID0gYXJyMy5sZW5ndGggLSAxO1xuICAgICAgd2hpbGUgKGkzIDwgbDMpIHtcbiAgICAgICAgJHByb3BlcnR5S2V5ID0gYXJyM1tpMyArPSAxXTtcbiAgICAgICAgdmFyICRzY2ggPSAkc2NoZW1hWyRwcm9wZXJ0eUtleV07XG4gICAgICAgIGlmICgoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/ICh0eXBlb2YgJHNjaCA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoKS5sZW5ndGggPiAwKSB8fCAkc2NoID09PSBmYWxzZSA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAgICAgICB2YXIgJHByb3AgPSBpdC51dGlsLmdldFByb3BlcnR5KCRwcm9wZXJ0eUtleSksXG4gICAgICAgICAgICAkcGFzc0RhdGEgPSAkZGF0YSArICRwcm9wLFxuICAgICAgICAgICAgJGhhc0RlZmF1bHQgPSAkdXNlRGVmYXVsdHMgJiYgJHNjaC5kZWZhdWx0ICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgJGl0LnNjaGVtYSA9ICRzY2g7XG4gICAgICAgICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aCArICRwcm9wO1xuICAgICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGggKyAnLycgKyBpdC51dGlsLmVzY2FwZUZyYWdtZW50KCRwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgJGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aChpdC5lcnJvclBhdGgsICRwcm9wZXJ0eUtleSwgaXQub3B0cy5qc29uUG9pbnRlcnMpO1xuICAgICAgICAgICRpdC5kYXRhUGF0aEFyclskZGF0YU54dF0gPSBpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgdmFyICRjb2RlID0gaXQudmFsaWRhdGUoJGl0KTtcbiAgICAgICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICAgICAgaWYgKGl0LnV0aWwudmFyT2NjdXJlbmNlcygkY29kZSwgJG5leHREYXRhKSA8IDIpIHtcbiAgICAgICAgICAgICRjb2RlID0gaXQudXRpbC52YXJSZXBsYWNlKCRjb2RlLCAkbmV4dERhdGEsICRwYXNzRGF0YSk7XG4gICAgICAgICAgICB2YXIgJHVzZURhdGEgPSAkcGFzc0RhdGE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciAkdXNlRGF0YSA9ICRuZXh0RGF0YTtcbiAgICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCRoYXNEZWZhdWx0KSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAnICsgKCRjb2RlKSArICcgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCRyZXF1aXJlZEhhc2ggJiYgJHJlcXVpcmVkSGFzaFskcHJvcGVydHlLZXldKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIGlmICggJyArICgkdXNlRGF0YSkgKyAnID09PSB1bmRlZmluZWQgJztcbiAgICAgICAgICAgICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgfHwgISBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoJyArICgkZGF0YSkgKyAnLCBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eUtleSkpICsgJ1xcJykgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdXQgKz0gJykgeyAnICsgKCRuZXh0VmFsaWQpICsgJyA9IGZhbHNlOyAnO1xuICAgICAgICAgICAgICB2YXIgJGN1cnJlbnRFcnJvclBhdGggPSBpdC5lcnJvclBhdGgsXG4gICAgICAgICAgICAgICAgJGN1cnJFcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGgsXG4gICAgICAgICAgICAgICAgJG1pc3NpbmdQcm9wZXJ0eSA9IGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICBpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGgoJGN1cnJlbnRFcnJvclBhdGgsICRwcm9wZXJ0eUtleSwgaXQub3B0cy5qc29uUG9pbnRlcnMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvcmVxdWlyZWQnO1xuICAgICAgICAgICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAgICAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgICAgICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ3JlcXVpcmVkJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBtaXNzaW5nUHJvcGVydHk6IFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFwnIH0gJztcbiAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnJztcbiAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICdpcyBhIHJlcXVpcmVkIHByb3BlcnR5JztcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSAnc2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgXFxcXFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFxcXFxcJyc7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICRlcnJTY2hlbWFQYXRoID0gJGN1cnJFcnJTY2hlbWFQYXRoO1xuICAgICAgICAgICAgICBpdC5lcnJvclBhdGggPSAkY3VycmVudEVycm9yUGF0aDtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgfSBlbHNlIHsgJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCAnICsgKCR1c2VEYXRhKSArICcgPT09IHVuZGVmaW5lZCAnO1xuICAgICAgICAgICAgICAgIGlmICgkb3duUHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgfHwgISBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoJyArICgkZGF0YSkgKyAnLCBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eUtleSkpICsgJ1xcJykgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcpIHsgJyArICgkbmV4dFZhbGlkKSArICcgPSB0cnVlOyB9IGVsc2UgeyAnO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCR1c2VEYXRhKSArICcgIT09IHVuZGVmaW5lZCAnO1xuICAgICAgICAgICAgICAgIGlmICgkb3duUHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgJiYgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoJyArICgkZGF0YSkgKyAnLCBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eUtleSkpICsgJ1xcJykgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgKSB7ICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnICcgKyAoJGNvZGUpICsgJyB9ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkcFByb3BlcnR5S2V5cy5sZW5ndGgpIHtcbiAgICB2YXIgYXJyNCA9ICRwUHJvcGVydHlLZXlzO1xuICAgIGlmIChhcnI0KSB7XG4gICAgICB2YXIgJHBQcm9wZXJ0eSwgaTQgPSAtMSxcbiAgICAgICAgbDQgPSBhcnI0Lmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoaTQgPCBsNCkge1xuICAgICAgICAkcFByb3BlcnR5ID0gYXJyNFtpNCArPSAxXTtcbiAgICAgICAgdmFyICRzY2ggPSAkcFByb3BlcnRpZXNbJHBQcm9wZXJ0eV07XG4gICAgICAgIGlmICgoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/ICh0eXBlb2YgJHNjaCA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoKS5sZW5ndGggPiAwKSB8fCAkc2NoID09PSBmYWxzZSA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAgICAgICAkaXQuc2NoZW1hID0gJHNjaDtcbiAgICAgICAgICAkaXQuc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyAnLnBhdHRlcm5Qcm9wZXJ0aWVzJyArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJHBQcm9wZXJ0eSk7XG4gICAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9wYXR0ZXJuUHJvcGVydGllcy8nICsgaXQudXRpbC5lc2NhcGVGcmFnbWVudCgkcFByb3BlcnR5KTtcbiAgICAgICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIG91dCArPSAnICcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICcgPSAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnIHx8IE9iamVjdC5rZXlzKCcgKyAoJGRhdGEpICsgJyk7IGZvciAodmFyICcgKyAoJGlkeCkgKyAnPTA7ICcgKyAoJGlkeCkgKyAnPCcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICcubGVuZ3RoOyAnICsgKCRpZHgpICsgJysrKSB7IHZhciAnICsgKCRrZXkpICsgJyA9ICcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICdbJyArICgkaWR4KSArICddOyAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBmb3IgKHZhciAnICsgKCRrZXkpICsgJyBpbiAnICsgKCRkYXRhKSArICcpIHsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoaXQudXNlUGF0dGVybigkcFByb3BlcnR5KSkgKyAnLnRlc3QoJyArICgka2V5KSArICcpKSB7ICc7XG4gICAgICAgICAgJGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAka2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGtleSArICddJztcbiAgICAgICAgICAkaXQuZGF0YVBhdGhBcnJbJGRhdGFOeHRdID0gJGtleTtcbiAgICAgICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArIChpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKSkgKyAnICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJyArICgkY29kZSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG5leHRWYWxpZCkgKyAnKSBicmVhazsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBlbHNlICcgKyAoJG5leHRWYWxpZCkgKyAnID0gdHJ1ZTsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAgJztcbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgJyArICgkY2xvc2luZ0JyYWNlcykgKyAnIGlmICgnICsgKCRlcnJzKSArICcgPT0gZXJyb3JzKSB7JztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9wcm9wZXJ0eU5hbWVzKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICBvdXQgKz0gJ3ZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7JztcbiAgaWYgKChpdC5vcHRzLnN0cmljdEtleXdvcmRzID8gKHR5cGVvZiAkc2NoZW1hID09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKCRzY2hlbWEpLmxlbmd0aCA+IDApIHx8ICRzY2hlbWEgPT09IGZhbHNlIDogaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkc2NoZW1hLCBpdC5SVUxFUy5hbGwpKSkge1xuICAgICRpdC5zY2hlbWEgPSAkc2NoZW1hO1xuICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGg7XG4gICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aDtcbiAgICB2YXIgJGtleSA9ICdrZXknICsgJGx2bCxcbiAgICAgICRpZHggPSAnaWR4JyArICRsdmwsXG4gICAgICAkaSA9ICdpJyArICRsdmwsXG4gICAgICAkaW52YWxpZE5hbWUgPSAnXFwnICsgJyArICRrZXkgKyAnICsgXFwnJyxcbiAgICAgICRkYXRhTnh0ID0gJGl0LmRhdGFMZXZlbCA9IGl0LmRhdGFMZXZlbCArIDEsXG4gICAgICAkbmV4dERhdGEgPSAnZGF0YScgKyAkZGF0YU54dCxcbiAgICAgICRkYXRhUHJvcGVydGllcyA9ICdkYXRhUHJvcGVydGllcycgKyAkbHZsLFxuICAgICAgJG93blByb3BlcnRpZXMgPSBpdC5vcHRzLm93blByb3BlcnRpZXMsXG4gICAgICAkY3VycmVudEJhc2VJZCA9IGl0LmJhc2VJZDtcbiAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgIG91dCArPSAnIHZhciAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnID0gdW5kZWZpbmVkOyAnO1xuICAgIH1cbiAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgIG91dCArPSAnICcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICcgPSAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnIHx8IE9iamVjdC5rZXlzKCcgKyAoJGRhdGEpICsgJyk7IGZvciAodmFyICcgKyAoJGlkeCkgKyAnPTA7ICcgKyAoJGlkeCkgKyAnPCcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICcubGVuZ3RoOyAnICsgKCRpZHgpICsgJysrKSB7IHZhciAnICsgKCRrZXkpICsgJyA9ICcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICdbJyArICgkaWR4KSArICddOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyBmb3IgKHZhciAnICsgKCRrZXkpICsgJyBpbiAnICsgKCRkYXRhKSArICcpIHsgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgdmFyIHN0YXJ0RXJycycgKyAoJGx2bCkgKyAnID0gZXJyb3JzOyAnO1xuICAgIHZhciAkcGFzc0RhdGEgPSAka2V5O1xuICAgIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSB0cnVlO1xuICAgIHZhciAkY29kZSA9IGl0LnZhbGlkYXRlKCRpdCk7XG4gICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgIGlmIChpdC51dGlsLnZhck9jY3VyZW5jZXMoJGNvZGUsICRuZXh0RGF0YSkgPCAyKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKGl0LnV0aWwudmFyUmVwbGFjZSgkY29kZSwgJG5leHREYXRhLCAkcGFzc0RhdGEpKSArICcgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHREYXRhKSArICcgPSAnICsgKCRwYXNzRGF0YSkgKyAnOyAnICsgKCRjb2RlKSArICcgJztcbiAgICB9XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gJHdhc0NvbXBvc2l0ZTtcbiAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG5leHRWYWxpZCkgKyAnKSB7IGZvciAodmFyICcgKyAoJGkpICsgJz1zdGFydEVycnMnICsgKCRsdmwpICsgJzsgJyArICgkaSkgKyAnPGVycm9yczsgJyArICgkaSkgKyAnKyspIHsgdkVycm9yc1snICsgKCRpKSArICddLnByb3BlcnR5TmFtZSA9ICcgKyAoJGtleSkgKyAnOyB9ICAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdwcm9wZXJ0eU5hbWVzJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBwcm9wZXJ0eU5hbWU6IFxcJycgKyAoJGludmFsaWROYW1lKSArICdcXCcgfSAnO1xuICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwncHJvcGVydHkgbmFtZSBcXFxcXFwnJyArICgkaW52YWxpZE5hbWUpICsgJ1xcXFxcXCcgaXMgaW52YWxpZFxcJyAnO1xuICAgICAgfVxuICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB7fSAnO1xuICAgIH1cbiAgICBvdXQgKz0gJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKHZFcnJvcnMpOyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gdkVycm9yczsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgYnJlYWs7ICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gfSc7XG4gIH1cbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyAnICsgKCRjbG9zaW5nQnJhY2VzKSArICcgaWYgKCcgKyAoJGVycnMpICsgJyA9PSBlcnJvcnMpIHsnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX3JlZihpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGFzeW5jLCAkcmVmQ29kZTtcbiAgaWYgKCRzY2hlbWEgPT0gJyMnIHx8ICRzY2hlbWEgPT0gJyMvJykge1xuICAgIGlmIChpdC5pc1Jvb3QpIHtcbiAgICAgICRhc3luYyA9IGl0LmFzeW5jO1xuICAgICAgJHJlZkNvZGUgPSAndmFsaWRhdGUnO1xuICAgIH0gZWxzZSB7XG4gICAgICAkYXN5bmMgPSBpdC5yb290LnNjaGVtYS4kYXN5bmMgPT09IHRydWU7XG4gICAgICAkcmVmQ29kZSA9ICdyb290LnJlZlZhbFswXSc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciAkcmVmVmFsID0gaXQucmVzb2x2ZVJlZihpdC5iYXNlSWQsICRzY2hlbWEsIGl0LmlzUm9vdCk7XG4gICAgaWYgKCRyZWZWYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyICRtZXNzYWdlID0gaXQuTWlzc2luZ1JlZkVycm9yLm1lc3NhZ2UoaXQuYmFzZUlkLCAkc2NoZW1hKTtcbiAgICAgIGlmIChpdC5vcHRzLm1pc3NpbmdSZWZzID09ICdmYWlsJykge1xuICAgICAgICBpdC5sb2dnZXIuZXJyb3IoJG1lc3NhZ2UpO1xuICAgICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJyRyZWYnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IHJlZjogXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3Rlcygkc2NoZW1hKSkgKyAnXFwnIH0gJztcbiAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnY2FuXFxcXFxcJ3QgcmVzb2x2ZSByZWZlcmVuY2UgJyArIChpdC51dGlsLmVzY2FwZVF1b3Rlcygkc2NoZW1hKSkgKyAnXFwnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJHNjaGVtYSkpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIG91dCArPSAnIGlmIChmYWxzZSkgeyAnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGl0Lm9wdHMubWlzc2luZ1JlZnMgPT0gJ2lnbm9yZScpIHtcbiAgICAgICAgaXQubG9nZ2VyLndhcm4oJG1lc3NhZ2UpO1xuICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBpdC5NaXNzaW5nUmVmRXJyb3IoaXQuYmFzZUlkLCAkc2NoZW1hLCAkbWVzc2FnZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgkcmVmVmFsLmlubGluZSkge1xuICAgICAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gICAgICAkaXQubGV2ZWwrKztcbiAgICAgIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgICAgICRpdC5zY2hlbWEgPSAkcmVmVmFsLnNjaGVtYTtcbiAgICAgICRpdC5zY2hlbWFQYXRoID0gJyc7XG4gICAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRzY2hlbWE7XG4gICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpLnJlcGxhY2UoL3ZhbGlkYXRlXFwuc2NoZW1hL2csICRyZWZWYWwuY29kZSk7XG4gICAgICBvdXQgKz0gJyAnICsgKCRjb2RlKSArICcgJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJykgeyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAkYXN5bmMgPSAkcmVmVmFsLiRhc3luYyA9PT0gdHJ1ZSB8fCAoaXQuYXN5bmMgJiYgJHJlZlZhbC4kYXN5bmMgIT09IGZhbHNlKTtcbiAgICAgICRyZWZDb2RlID0gJHJlZlZhbC5jb2RlO1xuICAgIH1cbiAgfVxuICBpZiAoJHJlZkNvZGUpIHtcbiAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgb3V0ID0gJyc7XG4gICAgaWYgKGl0Lm9wdHMucGFzc0NvbnRleHQpIHtcbiAgICAgIG91dCArPSAnICcgKyAoJHJlZkNvZGUpICsgJy5jYWxsKHRoaXMsICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnICcgKyAoJHJlZkNvZGUpICsgJyggJztcbiAgICB9XG4gICAgb3V0ICs9ICcgJyArICgkZGF0YSkgKyAnLCAoZGF0YVBhdGggfHwgXFwnXFwnKSc7XG4gICAgaWYgKGl0LmVycm9yUGF0aCAhPSAnXCJcIicpIHtcbiAgICAgIG91dCArPSAnICsgJyArIChpdC5lcnJvclBhdGgpO1xuICAgIH1cbiAgICB2YXIgJHBhcmVudERhdGEgPSAkZGF0YUx2bCA/ICdkYXRhJyArICgoJGRhdGFMdmwgLSAxKSB8fCAnJykgOiAncGFyZW50RGF0YScsXG4gICAgICAkcGFyZW50RGF0YVByb3BlcnR5ID0gJGRhdGFMdmwgPyBpdC5kYXRhUGF0aEFyclskZGF0YUx2bF0gOiAncGFyZW50RGF0YVByb3BlcnR5JztcbiAgICBvdXQgKz0gJyAsICcgKyAoJHBhcmVudERhdGEpICsgJyAsICcgKyAoJHBhcmVudERhdGFQcm9wZXJ0eSkgKyAnLCByb290RGF0YSkgICc7XG4gICAgdmFyIF9fY2FsbFZhbGlkYXRlID0gb3V0O1xuICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgaWYgKCRhc3luYykge1xuICAgICAgaWYgKCFpdC5hc3luYykgdGhyb3cgbmV3IEVycm9yKCdhc3luYyBzY2hlbWEgcmVmZXJlbmNlZCBieSBzeW5jIHNjaGVtYScpO1xuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJHZhbGlkKSArICc7ICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB0cnkgeyBhd2FpdCAnICsgKF9fY2FsbFZhbGlkYXRlKSArICc7ICc7XG4gICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gY2F0Y2ggKGUpIHsgaWYgKCEoZSBpbnN0YW5jZW9mIFZhbGlkYXRpb25FcnJvcikpIHRocm93IGU7IGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gZS5lcnJvcnM7IGVsc2UgdkVycm9ycyA9IHZFcnJvcnMuY29uY2F0KGUuZXJyb3JzKTsgZXJyb3JzID0gdkVycm9ycy5sZW5ndGg7ICc7XG4gICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7ICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkdmFsaWQpICsgJykgeyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyBpZiAoIScgKyAoX19jYWxsVmFsaWRhdGUpICsgJykgeyBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9ICcgKyAoJHJlZkNvZGUpICsgJy5lcnJvcnM7IGVsc2UgdkVycm9ycyA9IHZFcnJvcnMuY29uY2F0KCcgKyAoJHJlZkNvZGUpICsgJy5lcnJvcnMpOyBlcnJvcnMgPSB2RXJyb3JzLmxlbmd0aDsgfSAnO1xuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX3JlcXVpcmVkKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLiRkYXRhICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIHZhciAkdlNjaGVtYSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgaWYgKCEkaXNEYXRhKSB7XG4gICAgaWYgKCRzY2hlbWEubGVuZ3RoIDwgaXQub3B0cy5sb29wUmVxdWlyZWQgJiYgaXQuc2NoZW1hLnByb3BlcnRpZXMgJiYgT2JqZWN0LmtleXMoaXQuc2NoZW1hLnByb3BlcnRpZXMpLmxlbmd0aCkge1xuICAgICAgdmFyICRyZXF1aXJlZCA9IFtdO1xuICAgICAgdmFyIGFycjEgPSAkc2NoZW1hO1xuICAgICAgaWYgKGFycjEpIHtcbiAgICAgICAgdmFyICRwcm9wZXJ0eSwgaTEgPSAtMSxcbiAgICAgICAgICBsMSA9IGFycjEubGVuZ3RoIC0gMTtcbiAgICAgICAgd2hpbGUgKGkxIDwgbDEpIHtcbiAgICAgICAgICAkcHJvcGVydHkgPSBhcnIxW2kxICs9IDFdO1xuICAgICAgICAgIHZhciAkcHJvcGVydHlTY2ggPSBpdC5zY2hlbWEucHJvcGVydGllc1skcHJvcGVydHldO1xuICAgICAgICAgIGlmICghKCRwcm9wZXJ0eVNjaCAmJiAoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/ICh0eXBlb2YgJHByb3BlcnR5U2NoID09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKCRwcm9wZXJ0eVNjaCkubGVuZ3RoID4gMCkgfHwgJHByb3BlcnR5U2NoID09PSBmYWxzZSA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHByb3BlcnR5U2NoLCBpdC5SVUxFUy5hbGwpKSkpIHtcbiAgICAgICAgICAgICRyZXF1aXJlZFskcmVxdWlyZWQubGVuZ3RoXSA9ICRwcm9wZXJ0eTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyICRyZXF1aXJlZCA9ICRzY2hlbWE7XG4gICAgfVxuICB9XG4gIGlmICgkaXNEYXRhIHx8ICRyZXF1aXJlZC5sZW5ndGgpIHtcbiAgICB2YXIgJGN1cnJlbnRFcnJvclBhdGggPSBpdC5lcnJvclBhdGgsXG4gICAgICAkbG9vcFJlcXVpcmVkID0gJGlzRGF0YSB8fCAkcmVxdWlyZWQubGVuZ3RoID49IGl0Lm9wdHMubG9vcFJlcXVpcmVkLFxuICAgICAgJG93blByb3BlcnRpZXMgPSBpdC5vcHRzLm93blByb3BlcnRpZXM7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIHZhciBtaXNzaW5nJyArICgkbHZsKSArICc7ICc7XG4gICAgICBpZiAoJGxvb3BSZXF1aXJlZCkge1xuICAgICAgICBpZiAoISRpc0RhdGEpIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkdlNjaGVtYSkgKyAnID0gdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnOyAnO1xuICAgICAgICB9XG4gICAgICAgIHZhciAkaSA9ICdpJyArICRsdmwsXG4gICAgICAgICAgJHByb3BlcnR5UGF0aCA9ICdzY2hlbWEnICsgJGx2bCArICdbJyArICRpICsgJ10nLFxuICAgICAgICAgICRtaXNzaW5nUHJvcGVydHkgPSAnXFwnICsgJyArICRwcm9wZXJ0eVBhdGggKyAnICsgXFwnJztcbiAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgIGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoJGN1cnJlbnRFcnJvclBhdGgsICRwcm9wZXJ0eVBhdGgsIGl0Lm9wdHMuanNvblBvaW50ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkdmFsaWQpICsgJyA9IHRydWU7ICc7XG4gICAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKHNjaGVtYScgKyAoJGx2bCkgKyAnID09PSB1bmRlZmluZWQpICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyBlbHNlIGlmICghQXJyYXkuaXNBcnJheShzY2hlbWEnICsgKCRsdmwpICsgJykpICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgZWxzZSB7JztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyBmb3IgKHZhciAnICsgKCRpKSArICcgPSAwOyAnICsgKCRpKSArICcgPCAnICsgKCR2U2NoZW1hKSArICcubGVuZ3RoOyAnICsgKCRpKSArICcrKykgeyAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkZGF0YSkgKyAnWycgKyAoJHZTY2hlbWEpICsgJ1snICsgKCRpKSArICddXSAhPT0gdW5kZWZpbmVkICc7XG4gICAgICAgIGlmICgkb3duUHJvcGVydGllcykge1xuICAgICAgICAgIG91dCArPSAnICYmICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCcgKyAoJGRhdGEpICsgJywgJyArICgkdlNjaGVtYSkgKyAnWycgKyAoJGkpICsgJ10pICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICc7IGlmICghJyArICgkdmFsaWQpICsgJykgYnJlYWs7IH0gJztcbiAgICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgICBvdXQgKz0gJyAgfSAgJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyAgaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICAgJztcbiAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdyZXF1aXJlZCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgbWlzc2luZ1Byb3BlcnR5OiBcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcJyB9ICc7XG4gICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJyc7XG4gICAgICAgICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIG91dCArPSAnaXMgYSByZXF1aXJlZCBwcm9wZXJ0eSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJ3Nob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5IFxcXFxcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcXFxcXCcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICdcXCcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyB9IGVsc2UgeyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKCAnO1xuICAgICAgICB2YXIgYXJyMiA9ICRyZXF1aXJlZDtcbiAgICAgICAgaWYgKGFycjIpIHtcbiAgICAgICAgICB2YXIgJHByb3BlcnR5S2V5LCAkaSA9IC0xLFxuICAgICAgICAgICAgbDIgPSBhcnIyLmxlbmd0aCAtIDE7XG4gICAgICAgICAgd2hpbGUgKCRpIDwgbDIpIHtcbiAgICAgICAgICAgICRwcm9wZXJ0eUtleSA9IGFycjJbJGkgKz0gMV07XG4gICAgICAgICAgICBpZiAoJGkpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgfHwgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciAkcHJvcCA9IGl0LnV0aWwuZ2V0UHJvcGVydHkoJHByb3BlcnR5S2V5KSxcbiAgICAgICAgICAgICAgJHVzZURhdGEgPSAkZGF0YSArICRwcm9wO1xuICAgICAgICAgICAgb3V0ICs9ICcgKCAoICcgKyAoJHVzZURhdGEpICsgJyA9PT0gdW5kZWZpbmVkICc7XG4gICAgICAgICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgfHwgISBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoJyArICgkZGF0YSkgKyAnLCBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eUtleSkpICsgJ1xcJykgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnKSAmJiAobWlzc2luZycgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKGl0Lm9wdHMuanNvblBvaW50ZXJzID8gJHByb3BlcnR5S2V5IDogJHByb3ApKSArICcpICkgJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcpIHsgICc7XG4gICAgICAgIHZhciAkcHJvcGVydHlQYXRoID0gJ21pc3NpbmcnICsgJGx2bCxcbiAgICAgICAgICAkbWlzc2luZ1Byb3BlcnR5ID0gJ1xcJyArICcgKyAkcHJvcGVydHlQYXRoICsgJyArIFxcJyc7XG4gICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICBpdC5lcnJvclBhdGggPSBpdC5vcHRzLmpzb25Qb2ludGVycyA/IGl0LnV0aWwuZ2V0UGF0aEV4cHIoJGN1cnJlbnRFcnJvclBhdGgsICRwcm9wZXJ0eVBhdGgsIHRydWUpIDogJGN1cnJlbnRFcnJvclBhdGggKyAnICsgJyArICRwcm9wZXJ0eVBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdyZXF1aXJlZCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgbWlzc2luZ1Byb3BlcnR5OiBcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcJyB9ICc7XG4gICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJyc7XG4gICAgICAgICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIG91dCArPSAnaXMgYSByZXF1aXJlZCBwcm9wZXJ0eSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJ3Nob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5IFxcXFxcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcXFxcXCcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICdcXCcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyB9IGVsc2UgeyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoJGxvb3BSZXF1aXJlZCkge1xuICAgICAgICBpZiAoISRpc0RhdGEpIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkdlNjaGVtYSkgKyAnID0gdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnOyAnO1xuICAgICAgICB9XG4gICAgICAgIHZhciAkaSA9ICdpJyArICRsdmwsXG4gICAgICAgICAgJHByb3BlcnR5UGF0aCA9ICdzY2hlbWEnICsgJGx2bCArICdbJyArICRpICsgJ10nLFxuICAgICAgICAgICRtaXNzaW5nUHJvcGVydHkgPSAnXFwnICsgJyArICRwcm9wZXJ0eVBhdGggKyAnICsgXFwnJztcbiAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgIGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoJGN1cnJlbnRFcnJvclBhdGgsICRwcm9wZXJ0eVBhdGgsIGl0Lm9wdHMuanNvblBvaW50ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCR2U2NoZW1hKSArICcgJiYgIUFycmF5LmlzQXJyYXkoJyArICgkdlNjaGVtYSkgKyAnKSkgeyAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdyZXF1aXJlZCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgbWlzc2luZ1Byb3BlcnR5OiBcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcJyB9ICc7XG4gICAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnO1xuICAgICAgICAgICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICdpcyBhIHJlcXVpcmVkIHByb3BlcnR5JztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJ3Nob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5IFxcXFxcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcXFxcXCcnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG91dCArPSAnXFwnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7IH0gZWxzZSBpZiAoJyArICgkdlNjaGVtYSkgKyAnICE9PSB1bmRlZmluZWQpIHsgJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyBmb3IgKHZhciAnICsgKCRpKSArICcgPSAwOyAnICsgKCRpKSArICcgPCAnICsgKCR2U2NoZW1hKSArICcubGVuZ3RoOyAnICsgKCRpKSArICcrKykgeyBpZiAoJyArICgkZGF0YSkgKyAnWycgKyAoJHZTY2hlbWEpICsgJ1snICsgKCRpKSArICddXSA9PT0gdW5kZWZpbmVkICc7XG4gICAgICAgIGlmICgkb3duUHJvcGVydGllcykge1xuICAgICAgICAgIG91dCArPSAnIHx8ICEgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCcgKyAoJGRhdGEpICsgJywgJyArICgkdlNjaGVtYSkgKyAnWycgKyAoJGkpICsgJ10pICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcpIHsgIHZhciBlcnIgPSAgICc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdyZXF1aXJlZCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgbWlzc2luZ1Byb3BlcnR5OiBcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcJyB9ICc7XG4gICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJyc7XG4gICAgICAgICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIG91dCArPSAnaXMgYSByZXF1aXJlZCBwcm9wZXJ0eSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJ3Nob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5IFxcXFxcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcXFxcXCcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICdcXCcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgfSB9ICc7XG4gICAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgICAgb3V0ICs9ICcgIH0gICc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBhcnIzID0gJHJlcXVpcmVkO1xuICAgICAgICBpZiAoYXJyMykge1xuICAgICAgICAgIHZhciAkcHJvcGVydHlLZXksIGkzID0gLTEsXG4gICAgICAgICAgICBsMyA9IGFycjMubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoaTMgPCBsMykge1xuICAgICAgICAgICAgJHByb3BlcnR5S2V5ID0gYXJyM1tpMyArPSAxXTtcbiAgICAgICAgICAgIHZhciAkcHJvcCA9IGl0LnV0aWwuZ2V0UHJvcGVydHkoJHByb3BlcnR5S2V5KSxcbiAgICAgICAgICAgICAgJG1pc3NpbmdQcm9wZXJ0eSA9IGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eUtleSksXG4gICAgICAgICAgICAgICR1c2VEYXRhID0gJGRhdGEgKyAkcHJvcDtcbiAgICAgICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgaXQuZXJyb3JQYXRoID0gaXQudXRpbC5nZXRQYXRoKCRjdXJyZW50RXJyb3JQYXRoLCAkcHJvcGVydHlLZXksIGl0Lm9wdHMuanNvblBvaW50ZXJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnIGlmICggJyArICgkdXNlRGF0YSkgKyAnID09PSB1bmRlZmluZWQgJztcbiAgICAgICAgICAgIGlmICgkb3duUHJvcGVydGllcykge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB8fCAhIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgnICsgKCRkYXRhKSArICcsIFxcJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5S2V5KSkgKyAnXFwnKSAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICcpIHsgIHZhciBlcnIgPSAgICc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ3JlcXVpcmVkJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBtaXNzaW5nUHJvcGVydHk6IFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFwnIH0gJztcbiAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnO1xuICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnaXMgYSByZXF1aXJlZCBwcm9wZXJ0eSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnc2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgXFxcXFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFxcXFxcJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG91dCArPSAnXFwnICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7IH0gJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaXQuZXJyb3JQYXRoID0gJGN1cnJlbnRFcnJvclBhdGg7XG4gIH0gZWxzZSBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGlmICh0cnVlKSB7JztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV91bmlxdWVJdGVtcyhpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy4kZGF0YSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICBpZiAoKCRzY2hlbWEgfHwgJGlzRGF0YSkgJiYgaXQub3B0cy51bmlxdWVJdGVtcyAhPT0gZmFsc2UpIHtcbiAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJHZhbGlkKSArICc7IGlmICgnICsgKCRzY2hlbWFWYWx1ZSkgKyAnID09PSBmYWxzZSB8fCAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnID09PSB1bmRlZmluZWQpICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyBlbHNlIGlmICh0eXBlb2YgJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPSBcXCdib29sZWFuXFwnKSAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7IGVsc2UgeyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB2YXIgaSA9ICcgKyAoJGRhdGEpICsgJy5sZW5ndGggLCAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZSAsIGo7IGlmIChpID4gMSkgeyAnO1xuICAgIHZhciAkaXRlbVR5cGUgPSBpdC5zY2hlbWEuaXRlbXMgJiYgaXQuc2NoZW1hLml0ZW1zLnR5cGUsXG4gICAgICAkdHlwZUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KCRpdGVtVHlwZSk7XG4gICAgaWYgKCEkaXRlbVR5cGUgfHwgJGl0ZW1UeXBlID09ICdvYmplY3QnIHx8ICRpdGVtVHlwZSA9PSAnYXJyYXknIHx8ICgkdHlwZUlzQXJyYXkgJiYgKCRpdGVtVHlwZS5pbmRleE9mKCdvYmplY3QnKSA+PSAwIHx8ICRpdGVtVHlwZS5pbmRleE9mKCdhcnJheScpID49IDApKSkge1xuICAgICAgb3V0ICs9ICcgb3V0ZXI6IGZvciAoO2ktLTspIHsgZm9yIChqID0gaTsgai0tOykgeyBpZiAoZXF1YWwoJyArICgkZGF0YSkgKyAnW2ldLCAnICsgKCRkYXRhKSArICdbal0pKSB7ICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgYnJlYWsgb3V0ZXI7IH0gfSB9ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhciBpdGVtSW5kaWNlcyA9IHt9LCBpdGVtOyBmb3IgKDtpLS07KSB7IHZhciBpdGVtID0gJyArICgkZGF0YSkgKyAnW2ldOyAnO1xuICAgICAgdmFyICRtZXRob2QgPSAnY2hlY2tEYXRhVHlwZScgKyAoJHR5cGVJc0FycmF5ID8gJ3MnIDogJycpO1xuICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoaXQudXRpbFskbWV0aG9kXSgkaXRlbVR5cGUsICdpdGVtJywgaXQub3B0cy5zdHJpY3ROdW1iZXJzLCB0cnVlKSkgKyAnKSBjb250aW51ZTsgJztcbiAgICAgIGlmICgkdHlwZUlzQXJyYXkpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKHR5cGVvZiBpdGVtID09IFxcJ3N0cmluZ1xcJykgaXRlbSA9IFxcJ1wiXFwnICsgaXRlbTsgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIGlmICh0eXBlb2YgaXRlbUluZGljZXNbaXRlbV0gPT0gXFwnbnVtYmVyXFwnKSB7ICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgaiA9IGl0ZW1JbmRpY2VzW2l0ZW1dOyBicmVhazsgfSBpdGVtSW5kaWNlc1tpdGVtXSA9IGk7IH0gJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICBvdXQgKz0gJyAgfSAgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICAgJztcbiAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgndW5pcXVlSXRlbXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGk6IGksIGo6IGogfSAnO1xuICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIE5PVCBoYXZlIGR1cGxpY2F0ZSBpdGVtcyAoaXRlbXMgIyMgXFwnICsgaiArIFxcJyBhbmQgXFwnICsgaSArIFxcJyBhcmUgaWRlbnRpY2FsKVxcJyAnO1xuICAgICAgfVxuICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogICc7XG4gICAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgICAgb3V0ICs9ICd2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgICAgICAgICAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgdmFyIF9fZXJyID0gb3V0O1xuICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgaWYgKHRydWUpIHsgJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfdmFsaWRhdGUoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcnO1xuICB2YXIgJGFzeW5jID0gaXQuc2NoZW1hLiRhc3luYyA9PT0gdHJ1ZSxcbiAgICAkcmVmS2V5d29yZHMgPSBpdC51dGlsLnNjaGVtYUhhc1J1bGVzRXhjZXB0KGl0LnNjaGVtYSwgaXQuUlVMRVMuYWxsLCAnJHJlZicpLFxuICAgICRpZCA9IGl0LnNlbGYuX2dldElkKGl0LnNjaGVtYSk7XG4gIGlmIChpdC5vcHRzLnN0cmljdEtleXdvcmRzKSB7XG4gICAgdmFyICR1bmtub3duS3dkID0gaXQudXRpbC5zY2hlbWFVbmtub3duUnVsZXMoaXQuc2NoZW1hLCBpdC5SVUxFUy5rZXl3b3Jkcyk7XG4gICAgaWYgKCR1bmtub3duS3dkKSB7XG4gICAgICB2YXIgJGtleXdvcmRzTXNnID0gJ3Vua25vd24ga2V5d29yZDogJyArICR1bmtub3duS3dkO1xuICAgICAgaWYgKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPT09ICdsb2cnKSBpdC5sb2dnZXIud2Fybigka2V5d29yZHNNc2cpO1xuICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoJGtleXdvcmRzTXNnKTtcbiAgICB9XG4gIH1cbiAgaWYgKGl0LmlzVG9wKSB7XG4gICAgb3V0ICs9ICcgdmFyIHZhbGlkYXRlID0gJztcbiAgICBpZiAoJGFzeW5jKSB7XG4gICAgICBpdC5hc3luYyA9IHRydWU7XG4gICAgICBvdXQgKz0gJ2FzeW5jICc7XG4gICAgfVxuICAgIG91dCArPSAnZnVuY3Rpb24oZGF0YSwgZGF0YVBhdGgsIHBhcmVudERhdGEsIHBhcmVudERhdGFQcm9wZXJ0eSwgcm9vdERhdGEpIHsgXFwndXNlIHN0cmljdFxcJzsgJztcbiAgICBpZiAoJGlkICYmIChpdC5vcHRzLnNvdXJjZUNvZGUgfHwgaXQub3B0cy5wcm9jZXNzQ29kZSkpIHtcbiAgICAgIG91dCArPSAnICcgKyAoJy9cXCojIHNvdXJjZVVSTD0nICsgJGlkICsgJyAqLycpICsgJyAnO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIGl0LnNjaGVtYSA9PSAnYm9vbGVhbicgfHwgISgkcmVmS2V5d29yZHMgfHwgaXQuc2NoZW1hLiRyZWYpKSB7XG4gICAgdmFyICRrZXl3b3JkID0gJ2ZhbHNlIHNjaGVtYSc7XG4gICAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gICAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICAgIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gICAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gICAgdmFyICRlcnJvcktleXdvcmQ7XG4gICAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gICAgaWYgKGl0LnNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgIGlmIChpdC5pc1RvcCkge1xuICAgICAgICAkYnJlYWtPbkVycm9yID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhciAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7ICc7XG4gICAgICB9XG4gICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ2ZhbHNlIHNjaGVtYScpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHt9ICc7XG4gICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnYm9vbGVhbiBzY2hlbWEgaXMgZmFsc2VcXCcgJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IGZhbHNlICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICB9XG4gICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGl0LmlzVG9wKSB7XG4gICAgICAgIGlmICgkYXN5bmMpIHtcbiAgICAgICAgICBvdXQgKz0gJyByZXR1cm4gZGF0YTsgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBudWxsOyByZXR1cm4gdHJ1ZTsgJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyAnO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXQuaXNUb3ApIHtcbiAgICAgIG91dCArPSAnIH07IHJldHVybiB2YWxpZGF0ZTsgJztcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuICBpZiAoaXQuaXNUb3ApIHtcbiAgICB2YXIgJHRvcCA9IGl0LmlzVG9wLFxuICAgICAgJGx2bCA9IGl0LmxldmVsID0gMCxcbiAgICAgICRkYXRhTHZsID0gaXQuZGF0YUxldmVsID0gMCxcbiAgICAgICRkYXRhID0gJ2RhdGEnO1xuICAgIGl0LnJvb3RJZCA9IGl0LnJlc29sdmUuZnVsbFBhdGgoaXQuc2VsZi5fZ2V0SWQoaXQucm9vdC5zY2hlbWEpKTtcbiAgICBpdC5iYXNlSWQgPSBpdC5iYXNlSWQgfHwgaXQucm9vdElkO1xuICAgIGRlbGV0ZSBpdC5pc1RvcDtcbiAgICBpdC5kYXRhUGF0aEFyciA9IFtcIlwiXTtcbiAgICBpZiAoaXQuc2NoZW1hLmRlZmF1bHQgIT09IHVuZGVmaW5lZCAmJiBpdC5vcHRzLnVzZURlZmF1bHRzICYmIGl0Lm9wdHMuc3RyaWN0RGVmYXVsdHMpIHtcbiAgICAgIHZhciAkZGVmYXVsdE1zZyA9ICdkZWZhdWx0IGlzIGlnbm9yZWQgaW4gdGhlIHNjaGVtYSByb290JztcbiAgICAgIGlmIChpdC5vcHRzLnN0cmljdERlZmF1bHRzID09PSAnbG9nJykgaXQubG9nZ2VyLndhcm4oJGRlZmF1bHRNc2cpO1xuICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoJGRlZmF1bHRNc2cpO1xuICAgIH1cbiAgICBvdXQgKz0gJyB2YXIgdkVycm9ycyA9IG51bGw7ICc7XG4gICAgb3V0ICs9ICcgdmFyIGVycm9ycyA9IDA7ICAgICAnO1xuICAgIG91dCArPSAnIGlmIChyb290RGF0YSA9PT0gdW5kZWZpbmVkKSByb290RGF0YSA9IGRhdGE7ICc7XG4gIH0gZWxzZSB7XG4gICAgdmFyICRsdmwgPSBpdC5sZXZlbCxcbiAgICAgICRkYXRhTHZsID0gaXQuZGF0YUxldmVsLFxuICAgICAgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICAgIGlmICgkaWQpIGl0LmJhc2VJZCA9IGl0LnJlc29sdmUudXJsKGl0LmJhc2VJZCwgJGlkKTtcbiAgICBpZiAoJGFzeW5jICYmICFpdC5hc3luYykgdGhyb3cgbmV3IEVycm9yKCdhc3luYyBzY2hlbWEgaW4gc3luYyBzY2hlbWEnKTtcbiAgICBvdXQgKz0gJyB2YXIgZXJyc18nICsgKCRsdmwpICsgJyA9IGVycm9yczsnO1xuICB9XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bCxcbiAgICAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzLFxuICAgICRjbG9zaW5nQnJhY2VzMSA9ICcnLFxuICAgICRjbG9zaW5nQnJhY2VzMiA9ICcnO1xuICB2YXIgJGVycm9yS2V5d29yZDtcbiAgdmFyICR0eXBlU2NoZW1hID0gaXQuc2NoZW1hLnR5cGUsXG4gICAgJHR5cGVJc0FycmF5ID0gQXJyYXkuaXNBcnJheSgkdHlwZVNjaGVtYSk7XG4gIGlmICgkdHlwZVNjaGVtYSAmJiBpdC5vcHRzLm51bGxhYmxlICYmIGl0LnNjaGVtYS5udWxsYWJsZSA9PT0gdHJ1ZSkge1xuICAgIGlmICgkdHlwZUlzQXJyYXkpIHtcbiAgICAgIGlmICgkdHlwZVNjaGVtYS5pbmRleE9mKCdudWxsJykgPT0gLTEpICR0eXBlU2NoZW1hID0gJHR5cGVTY2hlbWEuY29uY2F0KCdudWxsJyk7XG4gICAgfSBlbHNlIGlmICgkdHlwZVNjaGVtYSAhPSAnbnVsbCcpIHtcbiAgICAgICR0eXBlU2NoZW1hID0gWyR0eXBlU2NoZW1hLCAnbnVsbCddO1xuICAgICAgJHR5cGVJc0FycmF5ID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKCR0eXBlSXNBcnJheSAmJiAkdHlwZVNjaGVtYS5sZW5ndGggPT0gMSkge1xuICAgICR0eXBlU2NoZW1hID0gJHR5cGVTY2hlbWFbMF07XG4gICAgJHR5cGVJc0FycmF5ID0gZmFsc2U7XG4gIH1cbiAgaWYgKGl0LnNjaGVtYS4kcmVmICYmICRyZWZLZXl3b3Jkcykge1xuICAgIGlmIChpdC5vcHRzLmV4dGVuZFJlZnMgPT0gJ2ZhaWwnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJyRyZWY6IHZhbGlkYXRpb24ga2V5d29yZHMgdXNlZCBpbiBzY2hlbWEgYXQgcGF0aCBcIicgKyBpdC5lcnJTY2hlbWFQYXRoICsgJ1wiIChzZWUgb3B0aW9uIGV4dGVuZFJlZnMpJyk7XG4gICAgfSBlbHNlIGlmIChpdC5vcHRzLmV4dGVuZFJlZnMgIT09IHRydWUpIHtcbiAgICAgICRyZWZLZXl3b3JkcyA9IGZhbHNlO1xuICAgICAgaXQubG9nZ2VyLndhcm4oJyRyZWY6IGtleXdvcmRzIGlnbm9yZWQgaW4gc2NoZW1hIGF0IHBhdGggXCInICsgaXQuZXJyU2NoZW1hUGF0aCArICdcIicpO1xuICAgIH1cbiAgfVxuICBpZiAoaXQuc2NoZW1hLiRjb21tZW50ICYmIGl0Lm9wdHMuJGNvbW1lbnQpIHtcbiAgICBvdXQgKz0gJyAnICsgKGl0LlJVTEVTLmFsbC4kY29tbWVudC5jb2RlKGl0LCAnJGNvbW1lbnQnKSk7XG4gIH1cbiAgaWYgKCR0eXBlU2NoZW1hKSB7XG4gICAgaWYgKGl0Lm9wdHMuY29lcmNlVHlwZXMpIHtcbiAgICAgIHZhciAkY29lcmNlVG9UeXBlcyA9IGl0LnV0aWwuY29lcmNlVG9UeXBlcyhpdC5vcHRzLmNvZXJjZVR5cGVzLCAkdHlwZVNjaGVtYSk7XG4gICAgfVxuICAgIHZhciAkcnVsZXNHcm91cCA9IGl0LlJVTEVTLnR5cGVzWyR0eXBlU2NoZW1hXTtcbiAgICBpZiAoJGNvZXJjZVRvVHlwZXMgfHwgJHR5cGVJc0FycmF5IHx8ICRydWxlc0dyb3VwID09PSB0cnVlIHx8ICgkcnVsZXNHcm91cCAmJiAhJHNob3VsZFVzZUdyb3VwKCRydWxlc0dyb3VwKSkpIHtcbiAgICAgIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyAnLnR5cGUnLFxuICAgICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnL3R5cGUnO1xuICAgICAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArICcudHlwZScsXG4gICAgICAgICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvdHlwZScsXG4gICAgICAgICRtZXRob2QgPSAkdHlwZUlzQXJyYXkgPyAnY2hlY2tEYXRhVHlwZXMnIDogJ2NoZWNrRGF0YVR5cGUnO1xuICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoaXQudXRpbFskbWV0aG9kXSgkdHlwZVNjaGVtYSwgJGRhdGEsIGl0Lm9wdHMuc3RyaWN0TnVtYmVycywgdHJ1ZSkpICsgJykgeyAnO1xuICAgICAgaWYgKCRjb2VyY2VUb1R5cGVzKSB7XG4gICAgICAgIHZhciAkZGF0YVR5cGUgPSAnZGF0YVR5cGUnICsgJGx2bCxcbiAgICAgICAgICAkY29lcmNlZCA9ICdjb2VyY2VkJyArICRsdmw7XG4gICAgICAgIG91dCArPSAnIHZhciAnICsgKCRkYXRhVHlwZSkgKyAnID0gdHlwZW9mICcgKyAoJGRhdGEpICsgJzsgdmFyICcgKyAoJGNvZXJjZWQpICsgJyA9IHVuZGVmaW5lZDsgJztcbiAgICAgICAgaWYgKGl0Lm9wdHMuY29lcmNlVHlwZXMgPT0gJ2FycmF5Jykge1xuICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRkYXRhVHlwZSkgKyAnID09IFxcJ29iamVjdFxcJyAmJiBBcnJheS5pc0FycmF5KCcgKyAoJGRhdGEpICsgJykgJiYgJyArICgkZGF0YSkgKyAnLmxlbmd0aCA9PSAxKSB7ICcgKyAoJGRhdGEpICsgJyA9ICcgKyAoJGRhdGEpICsgJ1swXTsgJyArICgkZGF0YVR5cGUpICsgJyA9IHR5cGVvZiAnICsgKCRkYXRhKSArICc7IGlmICgnICsgKGl0LnV0aWwuY2hlY2tEYXRhVHlwZShpdC5zY2hlbWEudHlwZSwgJGRhdGEsIGl0Lm9wdHMuc3RyaWN0TnVtYmVycykpICsgJykgJyArICgkY29lcmNlZCkgKyAnID0gJyArICgkZGF0YSkgKyAnOyB9ICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJGNvZXJjZWQpICsgJyAhPT0gdW5kZWZpbmVkKSA7ICc7XG4gICAgICAgIHZhciBhcnIxID0gJGNvZXJjZVRvVHlwZXM7XG4gICAgICAgIGlmIChhcnIxKSB7XG4gICAgICAgICAgdmFyICR0eXBlLCAkaSA9IC0xLFxuICAgICAgICAgICAgbDEgPSBhcnIxLmxlbmd0aCAtIDE7XG4gICAgICAgICAgd2hpbGUgKCRpIDwgbDEpIHtcbiAgICAgICAgICAgICR0eXBlID0gYXJyMVskaSArPSAxXTtcbiAgICAgICAgICAgIGlmICgkdHlwZSA9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICBvdXQgKz0gJyBlbHNlIGlmICgnICsgKCRkYXRhVHlwZSkgKyAnID09IFxcJ251bWJlclxcJyB8fCAnICsgKCRkYXRhVHlwZSkgKyAnID09IFxcJ2Jvb2xlYW5cXCcpICcgKyAoJGNvZXJjZWQpICsgJyA9IFxcJ1xcJyArICcgKyAoJGRhdGEpICsgJzsgZWxzZSBpZiAoJyArICgkZGF0YSkgKyAnID09PSBudWxsKSAnICsgKCRjb2VyY2VkKSArICcgPSBcXCdcXCc7ICc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCR0eXBlID09ICdudW1iZXInIHx8ICR0eXBlID09ICdpbnRlZ2VyJykge1xuICAgICAgICAgICAgICBvdXQgKz0gJyBlbHNlIGlmICgnICsgKCRkYXRhVHlwZSkgKyAnID09IFxcJ2Jvb2xlYW5cXCcgfHwgJyArICgkZGF0YSkgKyAnID09PSBudWxsIHx8ICgnICsgKCRkYXRhVHlwZSkgKyAnID09IFxcJ3N0cmluZ1xcJyAmJiAnICsgKCRkYXRhKSArICcgJiYgJyArICgkZGF0YSkgKyAnID09ICsnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICAgICAgaWYgKCR0eXBlID09ICdpbnRlZ2VyJykge1xuICAgICAgICAgICAgICAgIG91dCArPSAnICYmICEoJyArICgkZGF0YSkgKyAnICUgMSknO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG91dCArPSAnKSkgJyArICgkY29lcmNlZCkgKyAnID0gKycgKyAoJGRhdGEpICsgJzsgJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJHR5cGUgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIGVsc2UgaWYgKCcgKyAoJGRhdGEpICsgJyA9PT0gXFwnZmFsc2VcXCcgfHwgJyArICgkZGF0YSkgKyAnID09PSAwIHx8ICcgKyAoJGRhdGEpICsgJyA9PT0gbnVsbCkgJyArICgkY29lcmNlZCkgKyAnID0gZmFsc2U7IGVsc2UgaWYgKCcgKyAoJGRhdGEpICsgJyA9PT0gXFwndHJ1ZVxcJyB8fCAnICsgKCRkYXRhKSArICcgPT09IDEpICcgKyAoJGNvZXJjZWQpICsgJyA9IHRydWU7ICc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCR0eXBlID09ICdudWxsJykge1xuICAgICAgICAgICAgICBvdXQgKz0gJyBlbHNlIGlmICgnICsgKCRkYXRhKSArICcgPT09IFxcJ1xcJyB8fCAnICsgKCRkYXRhKSArICcgPT09IDAgfHwgJyArICgkZGF0YSkgKyAnID09PSBmYWxzZSkgJyArICgkY29lcmNlZCkgKyAnID0gbnVsbDsgJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXQub3B0cy5jb2VyY2VUeXBlcyA9PSAnYXJyYXknICYmICR0eXBlID09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgZWxzZSBpZiAoJyArICgkZGF0YVR5cGUpICsgJyA9PSBcXCdzdHJpbmdcXCcgfHwgJyArICgkZGF0YVR5cGUpICsgJyA9PSBcXCdudW1iZXJcXCcgfHwgJyArICgkZGF0YVR5cGUpICsgJyA9PSBcXCdib29sZWFuXFwnIHx8ICcgKyAoJGRhdGEpICsgJyA9PSBudWxsKSAnICsgKCRjb2VyY2VkKSArICcgPSBbJyArICgkZGF0YSkgKyAnXTsgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgZWxzZSB7ICAgJztcbiAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ3R5cGUnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IHR5cGU6IFxcJyc7XG4gICAgICAgICAgaWYgKCR0eXBlSXNBcnJheSkge1xuICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICdcXCcgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgYmUgJztcbiAgICAgICAgICAgIGlmICgkdHlwZUlzQXJyYXkpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIH0gaWYgKCcgKyAoJGNvZXJjZWQpICsgJyAhPT0gdW5kZWZpbmVkKSB7ICAnO1xuICAgICAgICB2YXIgJHBhcmVudERhdGEgPSAkZGF0YUx2bCA/ICdkYXRhJyArICgoJGRhdGFMdmwgLSAxKSB8fCAnJykgOiAncGFyZW50RGF0YScsXG4gICAgICAgICAgJHBhcmVudERhdGFQcm9wZXJ0eSA9ICRkYXRhTHZsID8gaXQuZGF0YVBhdGhBcnJbJGRhdGFMdmxdIDogJ3BhcmVudERhdGFQcm9wZXJ0eSc7XG4gICAgICAgIG91dCArPSAnICcgKyAoJGRhdGEpICsgJyA9ICcgKyAoJGNvZXJjZWQpICsgJzsgJztcbiAgICAgICAgaWYgKCEkZGF0YUx2bCkge1xuICAgICAgICAgIG91dCArPSAnaWYgKCcgKyAoJHBhcmVudERhdGEpICsgJyAhPT0gdW5kZWZpbmVkKSc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgJyArICgkcGFyZW50RGF0YSkgKyAnWycgKyAoJHBhcmVudERhdGFQcm9wZXJ0eSkgKyAnXSA9ICcgKyAoJGNvZXJjZWQpICsgJzsgfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ3R5cGUnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IHR5cGU6IFxcJyc7XG4gICAgICAgICAgaWYgKCR0eXBlSXNBcnJheSkge1xuICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICdcXCcgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgYmUgJztcbiAgICAgICAgICAgIGlmICgkdHlwZUlzQXJyYXkpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfVxuICB9XG4gIGlmIChpdC5zY2hlbWEuJHJlZiAmJiAhJHJlZktleXdvcmRzKSB7XG4gICAgb3V0ICs9ICcgJyArIChpdC5SVUxFUy5hbGwuJHJlZi5jb2RlKGl0LCAnJHJlZicpKSArICcgJztcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgfSBpZiAoZXJyb3JzID09PSAnO1xuICAgICAgaWYgKCR0b3ApIHtcbiAgICAgICAgb3V0ICs9ICcwJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnZXJyc18nICsgKCRsdmwpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcpIHsgJztcbiAgICAgICRjbG9zaW5nQnJhY2VzMiArPSAnfSc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBhcnIyID0gaXQuUlVMRVM7XG4gICAgaWYgKGFycjIpIHtcbiAgICAgIHZhciAkcnVsZXNHcm91cCwgaTIgPSAtMSxcbiAgICAgICAgbDIgPSBhcnIyLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoaTIgPCBsMikge1xuICAgICAgICAkcnVsZXNHcm91cCA9IGFycjJbaTIgKz0gMV07XG4gICAgICAgIGlmICgkc2hvdWxkVXNlR3JvdXAoJHJ1bGVzR3JvdXApKSB7XG4gICAgICAgICAgaWYgKCRydWxlc0dyb3VwLnR5cGUpIHtcbiAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKGl0LnV0aWwuY2hlY2tEYXRhVHlwZSgkcnVsZXNHcm91cC50eXBlLCAkZGF0YSwgaXQub3B0cy5zdHJpY3ROdW1iZXJzKSkgKyAnKSB7ICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpdC5vcHRzLnVzZURlZmF1bHRzKSB7XG4gICAgICAgICAgICBpZiAoJHJ1bGVzR3JvdXAudHlwZSA9PSAnb2JqZWN0JyAmJiBpdC5zY2hlbWEucHJvcGVydGllcykge1xuICAgICAgICAgICAgICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgICRzY2hlbWFLZXlzID0gT2JqZWN0LmtleXMoJHNjaGVtYSk7XG4gICAgICAgICAgICAgIHZhciBhcnIzID0gJHNjaGVtYUtleXM7XG4gICAgICAgICAgICAgIGlmIChhcnIzKSB7XG4gICAgICAgICAgICAgICAgdmFyICRwcm9wZXJ0eUtleSwgaTMgPSAtMSxcbiAgICAgICAgICAgICAgICAgIGwzID0gYXJyMy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIHdoaWxlIChpMyA8IGwzKSB7XG4gICAgICAgICAgICAgICAgICAkcHJvcGVydHlLZXkgPSBhcnIzW2kzICs9IDFdO1xuICAgICAgICAgICAgICAgICAgdmFyICRzY2ggPSAkc2NoZW1hWyRwcm9wZXJ0eUtleV07XG4gICAgICAgICAgICAgICAgICBpZiAoJHNjaC5kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgkcHJvcGVydHlLZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXQuY29tcG9zaXRlUnVsZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnN0cmljdERlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGRlZmF1bHRNc2cgPSAnZGVmYXVsdCBpcyBpZ25vcmVkIGZvcjogJyArICRwYXNzRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnN0cmljdERlZmF1bHRzID09PSAnbG9nJykgaXQubG9nZ2VyLndhcm4oJGRlZmF1bHRNc2cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoJGRlZmF1bHRNc2cpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkcGFzc0RhdGEpICsgJyA9PT0gdW5kZWZpbmVkICc7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMudXNlRGVmYXVsdHMgPT0gJ2VtcHR5Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgfHwgJyArICgkcGFzc0RhdGEpICsgJyA9PT0gbnVsbCB8fCAnICsgKCRwYXNzRGF0YSkgKyAnID09PSBcXCdcXCcgJztcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgKSAnICsgKCRwYXNzRGF0YSkgKyAnID0gJztcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy51c2VEZWZhdWx0cyA9PSAnc2hhcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgJyArIChpdC51c2VEZWZhdWx0KCRzY2guZGVmYXVsdCkpICsgJyAnO1xuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJyAnICsgKEpTT04uc3RyaW5naWZ5KCRzY2guZGVmYXVsdCkpICsgJyAnO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJzsgJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICgkcnVsZXNHcm91cC50eXBlID09ICdhcnJheScgJiYgQXJyYXkuaXNBcnJheShpdC5zY2hlbWEuaXRlbXMpKSB7XG4gICAgICAgICAgICAgIHZhciBhcnI0ID0gaXQuc2NoZW1hLml0ZW1zO1xuICAgICAgICAgICAgICBpZiAoYXJyNCkge1xuICAgICAgICAgICAgICAgIHZhciAkc2NoLCAkaSA9IC0xLFxuICAgICAgICAgICAgICAgICAgbDQgPSBhcnI0Lmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgd2hpbGUgKCRpIDwgbDQpIHtcbiAgICAgICAgICAgICAgICAgICRzY2ggPSBhcnI0WyRpICs9IDFdO1xuICAgICAgICAgICAgICAgICAgaWYgKCRzY2guZGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkcGFzc0RhdGEgPSAkZGF0YSArICdbJyArICRpICsgJ10nO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXQuY29tcG9zaXRlUnVsZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnN0cmljdERlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGRlZmF1bHRNc2cgPSAnZGVmYXVsdCBpcyBpZ25vcmVkIGZvcjogJyArICRwYXNzRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnN0cmljdERlZmF1bHRzID09PSAnbG9nJykgaXQubG9nZ2VyLndhcm4oJGRlZmF1bHRNc2cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoJGRlZmF1bHRNc2cpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkcGFzc0RhdGEpICsgJyA9PT0gdW5kZWZpbmVkICc7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMudXNlRGVmYXVsdHMgPT0gJ2VtcHR5Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgfHwgJyArICgkcGFzc0RhdGEpICsgJyA9PT0gbnVsbCB8fCAnICsgKCRwYXNzRGF0YSkgKyAnID09PSBcXCdcXCcgJztcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgKSAnICsgKCRwYXNzRGF0YSkgKyAnID0gJztcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy51c2VEZWZhdWx0cyA9PSAnc2hhcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgJyArIChpdC51c2VEZWZhdWx0KCRzY2guZGVmYXVsdCkpICsgJyAnO1xuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJyAnICsgKEpTT04uc3RyaW5naWZ5KCRzY2guZGVmYXVsdCkpICsgJyAnO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJzsgJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgYXJyNSA9ICRydWxlc0dyb3VwLnJ1bGVzO1xuICAgICAgICAgIGlmIChhcnI1KSB7XG4gICAgICAgICAgICB2YXIgJHJ1bGUsIGk1ID0gLTEsXG4gICAgICAgICAgICAgIGw1ID0gYXJyNS5sZW5ndGggLSAxO1xuICAgICAgICAgICAgd2hpbGUgKGk1IDwgbDUpIHtcbiAgICAgICAgICAgICAgJHJ1bGUgPSBhcnI1W2k1ICs9IDFdO1xuICAgICAgICAgICAgICBpZiAoJHNob3VsZFVzZVJ1bGUoJHJ1bGUpKSB7XG4gICAgICAgICAgICAgICAgdmFyICRjb2RlID0gJHJ1bGUuY29kZShpdCwgJHJ1bGUua2V5d29yZCwgJHJ1bGVzR3JvdXAudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCRjb2RlKSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyAnICsgKCRjb2RlKSArICcgJztcbiAgICAgICAgICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICRjbG9zaW5nQnJhY2VzMSArPSAnfSc7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAnICsgKCRjbG9zaW5nQnJhY2VzMSkgKyAnICc7XG4gICAgICAgICAgICAkY2xvc2luZ0JyYWNlczEgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCRydWxlc0dyb3VwLnR5cGUpIHtcbiAgICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICAgIGlmICgkdHlwZVNjaGVtYSAmJiAkdHlwZVNjaGVtYSA9PT0gJHJ1bGVzR3JvdXAudHlwZSAmJiAhJGNvZXJjZVRvVHlwZXMpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gICAgICAgICAgICAgIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyAnLnR5cGUnLFxuICAgICAgICAgICAgICAgICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvdHlwZSc7XG4gICAgICAgICAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgICAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgkZXJyb3JLZXl3b3JkIHx8ICd0eXBlJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyB0eXBlOiBcXCcnO1xuICAgICAgICAgICAgICAgIGlmICgkdHlwZUlzQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYS5qb2luKFwiLFwiKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG91dCArPSAnXFwnIH0gJztcbiAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIGJlICc7XG4gICAgICAgICAgICAgICAgICBpZiAoJHR5cGVJc0FycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYS5qb2luKFwiLFwiKSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJycgKyAoJHR5cGVTY2hlbWEpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgb3V0ICs9ICdcXCcgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoZXJyb3JzID09PSAnO1xuICAgICAgICAgICAgaWYgKCR0b3ApIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcwJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnZXJyc18nICsgKCRsdmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICcpIHsgJztcbiAgICAgICAgICAgICRjbG9zaW5nQnJhY2VzMiArPSAnfSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgJyArICgkY2xvc2luZ0JyYWNlczIpICsgJyAnO1xuICB9XG4gIGlmICgkdG9wKSB7XG4gICAgaWYgKCRhc3luYykge1xuICAgICAgb3V0ICs9ICcgaWYgKGVycm9ycyA9PT0gMCkgcmV0dXJuIGRhdGE7ICAgICAgICAgICAnO1xuICAgICAgb3V0ICs9ICcgZWxzZSB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKHZFcnJvcnMpOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSB2RXJyb3JzOyAnO1xuICAgICAgb3V0ICs9ICcgcmV0dXJuIGVycm9ycyA9PT0gMDsgICAgICAgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfTsgcmV0dXJuIHZhbGlkYXRlOyc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJHZhbGlkKSArICcgPSBlcnJvcnMgPT09IGVycnNfJyArICgkbHZsKSArICc7JztcbiAgfVxuXG4gIGZ1bmN0aW9uICRzaG91bGRVc2VHcm91cCgkcnVsZXNHcm91cCkge1xuICAgIHZhciBydWxlcyA9ICRydWxlc0dyb3VwLnJ1bGVzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspXG4gICAgICBpZiAoJHNob3VsZFVzZVJ1bGUocnVsZXNbaV0pKSByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uICRzaG91bGRVc2VSdWxlKCRydWxlKSB7XG4gICAgcmV0dXJuIGl0LnNjaGVtYVskcnVsZS5rZXl3b3JkXSAhPT0gdW5kZWZpbmVkIHx8ICgkcnVsZS5pbXBsZW1lbnRzICYmICRydWxlSW1wbGVtZW50c1NvbWVLZXl3b3JkKCRydWxlKSk7XG4gIH1cblxuICBmdW5jdGlvbiAkcnVsZUltcGxlbWVudHNTb21lS2V5d29yZCgkcnVsZSkge1xuICAgIHZhciBpbXBsID0gJHJ1bGUuaW1wbGVtZW50cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGltcGwubGVuZ3RoOyBpKyspXG4gICAgICBpZiAoaXQuc2NoZW1hW2ltcGxbaV1dICE9PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBJREVOVElGSUVSID0gL15bYS16XyRdW2EtejAtOV8kLV0qJC9pO1xudmFyIGN1c3RvbVJ1bGVDb2RlID0gcmVxdWlyZSgnLi9kb3Rqcy9jdXN0b20nKTtcbnZhciBkZWZpbml0aW9uU2NoZW1hID0gcmVxdWlyZSgnLi9kZWZpbml0aW9uX3NjaGVtYScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWRkOiBhZGRLZXl3b3JkLFxuICBnZXQ6IGdldEtleXdvcmQsXG4gIHJlbW92ZTogcmVtb3ZlS2V5d29yZCxcbiAgdmFsaWRhdGU6IHZhbGlkYXRlS2V5d29yZFxufTtcblxuXG4vKipcbiAqIERlZmluZSBjdXN0b20ga2V5d29yZFxuICogQHRoaXMgIEFqdlxuICogQHBhcmFtIHtTdHJpbmd9IGtleXdvcmQgY3VzdG9tIGtleXdvcmQsIHNob3VsZCBiZSB1bmlxdWUgKGluY2x1ZGluZyBkaWZmZXJlbnQgZnJvbSBhbGwgc3RhbmRhcmQsIGN1c3RvbSBhbmQgbWFjcm8ga2V5d29yZHMpLlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmluaXRpb24ga2V5d29yZCBkZWZpbml0aW9uIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgYHR5cGVgICh0eXBlKHMpIHdoaWNoIHRoZSBrZXl3b3JkIGFwcGxpZXMgdG8pLCBgdmFsaWRhdGVgIG9yIGBjb21waWxlYC5cbiAqIEByZXR1cm4ge0Fqdn0gdGhpcyBmb3IgbWV0aG9kIGNoYWluaW5nXG4gKi9cbmZ1bmN0aW9uIGFkZEtleXdvcmQoa2V5d29yZCwgZGVmaW5pdGlvbikge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIC8qIGVzbGludCBuby1zaGFkb3c6IDAgKi9cbiAgdmFyIFJVTEVTID0gdGhpcy5SVUxFUztcbiAgaWYgKFJVTEVTLmtleXdvcmRzW2tleXdvcmRdKVxuICAgIHRocm93IG5ldyBFcnJvcignS2V5d29yZCAnICsga2V5d29yZCArICcgaXMgYWxyZWFkeSBkZWZpbmVkJyk7XG5cbiAgaWYgKCFJREVOVElGSUVSLnRlc3Qoa2V5d29yZCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdLZXl3b3JkICcgKyBrZXl3b3JkICsgJyBpcyBub3QgYSB2YWxpZCBpZGVudGlmaWVyJyk7XG5cbiAgaWYgKGRlZmluaXRpb24pIHtcbiAgICB0aGlzLnZhbGlkYXRlS2V5d29yZChkZWZpbml0aW9uLCB0cnVlKTtcblxuICAgIHZhciBkYXRhVHlwZSA9IGRlZmluaXRpb24udHlwZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhVHlwZSkpIHtcbiAgICAgIGZvciAodmFyIGk9MDsgaTxkYXRhVHlwZS5sZW5ndGg7IGkrKylcbiAgICAgICAgX2FkZFJ1bGUoa2V5d29yZCwgZGF0YVR5cGVbaV0sIGRlZmluaXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBfYWRkUnVsZShrZXl3b3JkLCBkYXRhVHlwZSwgZGVmaW5pdGlvbik7XG4gICAgfVxuXG4gICAgdmFyIG1ldGFTY2hlbWEgPSBkZWZpbml0aW9uLm1ldGFTY2hlbWE7XG4gICAgaWYgKG1ldGFTY2hlbWEpIHtcbiAgICAgIGlmIChkZWZpbml0aW9uLiRkYXRhICYmIHRoaXMuX29wdHMuJGRhdGEpIHtcbiAgICAgICAgbWV0YVNjaGVtYSA9IHtcbiAgICAgICAgICBhbnlPZjogW1xuICAgICAgICAgICAgbWV0YVNjaGVtYSxcbiAgICAgICAgICAgIHsgJyRyZWYnOiAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Fqdi12YWxpZGF0b3IvYWp2L21hc3Rlci9saWIvcmVmcy9kYXRhLmpzb24jJyB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZGVmaW5pdGlvbi52YWxpZGF0ZVNjaGVtYSA9IHRoaXMuY29tcGlsZShtZXRhU2NoZW1hLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBSVUxFUy5rZXl3b3Jkc1trZXl3b3JkXSA9IFJVTEVTLmFsbFtrZXl3b3JkXSA9IHRydWU7XG5cblxuICBmdW5jdGlvbiBfYWRkUnVsZShrZXl3b3JkLCBkYXRhVHlwZSwgZGVmaW5pdGlvbikge1xuICAgIHZhciBydWxlR3JvdXA7XG4gICAgZm9yICh2YXIgaT0wOyBpPFJVTEVTLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcmcgPSBSVUxFU1tpXTtcbiAgICAgIGlmIChyZy50eXBlID09IGRhdGFUeXBlKSB7XG4gICAgICAgIHJ1bGVHcm91cCA9IHJnO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXJ1bGVHcm91cCkge1xuICAgICAgcnVsZUdyb3VwID0geyB0eXBlOiBkYXRhVHlwZSwgcnVsZXM6IFtdIH07XG4gICAgICBSVUxFUy5wdXNoKHJ1bGVHcm91cCk7XG4gICAgfVxuXG4gICAgdmFyIHJ1bGUgPSB7XG4gICAgICBrZXl3b3JkOiBrZXl3b3JkLFxuICAgICAgZGVmaW5pdGlvbjogZGVmaW5pdGlvbixcbiAgICAgIGN1c3RvbTogdHJ1ZSxcbiAgICAgIGNvZGU6IGN1c3RvbVJ1bGVDb2RlLFxuICAgICAgaW1wbGVtZW50czogZGVmaW5pdGlvbi5pbXBsZW1lbnRzXG4gICAgfTtcbiAgICBydWxlR3JvdXAucnVsZXMucHVzaChydWxlKTtcbiAgICBSVUxFUy5jdXN0b21ba2V5d29yZF0gPSBydWxlO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cblxuLyoqXG4gKiBHZXQga2V5d29yZFxuICogQHRoaXMgIEFqdlxuICogQHBhcmFtIHtTdHJpbmd9IGtleXdvcmQgcHJlLWRlZmluZWQgb3IgY3VzdG9tIGtleXdvcmQuXG4gKiBAcmV0dXJuIHtPYmplY3R8Qm9vbGVhbn0gY3VzdG9tIGtleXdvcmQgZGVmaW5pdGlvbiwgYHRydWVgIGlmIGl0IGlzIGEgcHJlZGVmaW5lZCBrZXl3b3JkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gZ2V0S2V5d29yZChrZXl3b3JkKSB7XG4gIC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cbiAgdmFyIHJ1bGUgPSB0aGlzLlJVTEVTLmN1c3RvbVtrZXl3b3JkXTtcbiAgcmV0dXJuIHJ1bGUgPyBydWxlLmRlZmluaXRpb24gOiB0aGlzLlJVTEVTLmtleXdvcmRzW2tleXdvcmRdIHx8IGZhbHNlO1xufVxuXG5cbi8qKlxuICogUmVtb3ZlIGtleXdvcmRcbiAqIEB0aGlzICBBanZcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXl3b3JkIHByZS1kZWZpbmVkIG9yIGN1c3RvbSBrZXl3b3JkLlxuICogQHJldHVybiB7QWp2fSB0aGlzIGZvciBtZXRob2QgY2hhaW5pbmdcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlS2V5d29yZChrZXl3b3JkKSB7XG4gIC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cbiAgdmFyIFJVTEVTID0gdGhpcy5SVUxFUztcbiAgZGVsZXRlIFJVTEVTLmtleXdvcmRzW2tleXdvcmRdO1xuICBkZWxldGUgUlVMRVMuYWxsW2tleXdvcmRdO1xuICBkZWxldGUgUlVMRVMuY3VzdG9tW2tleXdvcmRdO1xuICBmb3IgKHZhciBpPTA7IGk8UlVMRVMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcnVsZXMgPSBSVUxFU1tpXS5ydWxlcztcbiAgICBmb3IgKHZhciBqPTA7IGo8cnVsZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmIChydWxlc1tqXS5rZXl3b3JkID09IGtleXdvcmQpIHtcbiAgICAgICAgcnVsZXMuc3BsaWNlKGosIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cblxuLyoqXG4gKiBWYWxpZGF0ZSBrZXl3b3JkIGRlZmluaXRpb25cbiAqIEB0aGlzICBBanZcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZpbml0aW9uIGtleXdvcmQgZGVmaW5pdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHRocm93RXJyb3IgdHJ1ZSB0byB0aHJvdyBleGNlcHRpb24gaWYgZGVmaW5pdGlvbiBpcyBpbnZhbGlkXG4gKiBAcmV0dXJuIHtib29sZWFufSB2YWxpZGF0aW9uIHJlc3VsdFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUtleXdvcmQoZGVmaW5pdGlvbiwgdGhyb3dFcnJvcikge1xuICB2YWxpZGF0ZUtleXdvcmQuZXJyb3JzID0gbnVsbDtcbiAgdmFyIHYgPSB0aGlzLl92YWxpZGF0ZUtleXdvcmQgPSB0aGlzLl92YWxpZGF0ZUtleXdvcmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLmNvbXBpbGUoZGVmaW5pdGlvblNjaGVtYSwgdHJ1ZSk7XG5cbiAgaWYgKHYoZGVmaW5pdGlvbikpIHJldHVybiB0cnVlO1xuICB2YWxpZGF0ZUtleXdvcmQuZXJyb3JzID0gdi5lcnJvcnM7XG4gIGlmICh0aHJvd0Vycm9yKVxuICAgIHRocm93IG5ldyBFcnJvcignY3VzdG9tIGtleXdvcmQgZGVmaW5pdGlvbiBpcyBpbnZhbGlkOiAnICArIHRoaXMuZXJyb3JzVGV4dCh2LmVycm9ycykpO1xuICBlbHNlXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBiYWxhbmNlZDtcbmZ1bmN0aW9uIGJhbGFuY2VkKGEsIGIsIHN0cikge1xuICBpZiAoYSBpbnN0YW5jZW9mIFJlZ0V4cCkgYSA9IG1heWJlTWF0Y2goYSwgc3RyKTtcbiAgaWYgKGIgaW5zdGFuY2VvZiBSZWdFeHApIGIgPSBtYXliZU1hdGNoKGIsIHN0cik7XG5cbiAgdmFyIHIgPSByYW5nZShhLCBiLCBzdHIpO1xuXG4gIHJldHVybiByICYmIHtcbiAgICBzdGFydDogclswXSxcbiAgICBlbmQ6IHJbMV0sXG4gICAgcHJlOiBzdHIuc2xpY2UoMCwgclswXSksXG4gICAgYm9keTogc3RyLnNsaWNlKHJbMF0gKyBhLmxlbmd0aCwgclsxXSksXG4gICAgcG9zdDogc3RyLnNsaWNlKHJbMV0gKyBiLmxlbmd0aClcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWF5YmVNYXRjaChyZWcsIHN0cikge1xuICB2YXIgbSA9IHN0ci5tYXRjaChyZWcpO1xuICByZXR1cm4gbSA/IG1bMF0gOiBudWxsO1xufVxuXG5iYWxhbmNlZC5yYW5nZSA9IHJhbmdlO1xuZnVuY3Rpb24gcmFuZ2UoYSwgYiwgc3RyKSB7XG4gIHZhciBiZWdzLCBiZWcsIGxlZnQsIHJpZ2h0LCByZXN1bHQ7XG4gIHZhciBhaSA9IHN0ci5pbmRleE9mKGEpO1xuICB2YXIgYmkgPSBzdHIuaW5kZXhPZihiLCBhaSArIDEpO1xuICB2YXIgaSA9IGFpO1xuXG4gIGlmIChhaSA+PSAwICYmIGJpID4gMCkge1xuICAgIGlmKGE9PT1iKSB7XG4gICAgICByZXR1cm4gW2FpLCBiaV07XG4gICAgfVxuICAgIGJlZ3MgPSBbXTtcbiAgICBsZWZ0ID0gc3RyLmxlbmd0aDtcblxuICAgIHdoaWxlIChpID49IDAgJiYgIXJlc3VsdCkge1xuICAgICAgaWYgKGkgPT0gYWkpIHtcbiAgICAgICAgYmVncy5wdXNoKGkpO1xuICAgICAgICBhaSA9IHN0ci5pbmRleE9mKGEsIGkgKyAxKTtcbiAgICAgIH0gZWxzZSBpZiAoYmVncy5sZW5ndGggPT0gMSkge1xuICAgICAgICByZXN1bHQgPSBbIGJlZ3MucG9wKCksIGJpIF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZWcgPSBiZWdzLnBvcCgpO1xuICAgICAgICBpZiAoYmVnIDwgbGVmdCkge1xuICAgICAgICAgIGxlZnQgPSBiZWc7XG4gICAgICAgICAgcmlnaHQgPSBiaTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJpID0gc3RyLmluZGV4T2YoYiwgaSArIDEpO1xuICAgICAgfVxuXG4gICAgICBpID0gYWkgPCBiaSAmJiBhaSA+PSAwID8gYWkgOiBiaTtcbiAgICB9XG5cbiAgICBpZiAoYmVncy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdCA9IFsgbGVmdCwgcmlnaHQgXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/IFVpbnQ4QXJyYXkgOiBBcnJheVxuXG52YXIgY29kZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgbG9va3VwW2ldID0gY29kZVtpXVxuICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGlcbn1cblxuLy8gU3VwcG9ydCBkZWNvZGluZyBVUkwtc2FmZSBiYXNlNjQgc3RyaW5ncywgYXMgTm9kZS5qcyBkb2VzLlxuLy8gU2VlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjQjVVJMX2FwcGxpY2F0aW9uc1xucmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyXG5yZXZMb29rdXBbJ18nLmNoYXJDb2RlQXQoMCldID0gNjNcblxuZnVuY3Rpb24gZ2V0TGVucyAoYjY0KSB7XG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG5cbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIFRyaW0gb2ZmIGV4dHJhIGJ5dGVzIGFmdGVyIHBsYWNlaG9sZGVyIGJ5dGVzIGFyZSBmb3VuZFxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZWF0Z2FtbWl0L2Jhc2U2NC1qcy9pc3N1ZXMvNDJcbiAgdmFyIHZhbGlkTGVuID0gYjY0LmluZGV4T2YoJz0nKVxuICBpZiAodmFsaWRMZW4gPT09IC0xKSB2YWxpZExlbiA9IGxlblxuXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSB2YWxpZExlbiA9PT0gbGVuXG4gICAgPyAwXG4gICAgOiA0IC0gKHZhbGlkTGVuICUgNClcblxuICByZXR1cm4gW3ZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW5dXG59XG5cbi8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoYjY0KSB7XG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIF9ieXRlTGVuZ3RoIChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pIHtcbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIHRvQnl0ZUFycmF5IChiNjQpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG5cbiAgdmFyIGFyciA9IG5ldyBBcnIoX2J5dGVMZW5ndGgoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSlcblxuICB2YXIgY3VyQnl0ZSA9IDBcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIHZhciBsZW4gPSBwbGFjZUhvbGRlcnNMZW4gPiAwXG4gICAgPyB2YWxpZExlbiAtIDRcbiAgICA6IHZhbGlkTGVuXG5cbiAgdmFyIGlcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8XG4gICAgICByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMikge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPj4gNClcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDEpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMilcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG4gIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gJiAweDNGXVxufVxuXG5mdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRtcFxuICB2YXIgb3V0cHV0ID0gW11cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHtcbiAgICB0bXAgPVxuICAgICAgKCh1aW50OFtpXSA8PCAxNikgJiAweEZGMDAwMCkgK1xuICAgICAgKCh1aW50OFtpICsgMV0gPDwgOCkgJiAweEZGMDApICtcbiAgICAgICh1aW50OFtpICsgMl0gJiAweEZGKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKHVpbnQ4LCBpLCAoaSArIG1heENodW5rTGVuZ3RoKSA+IGxlbjIgPyBsZW4yIDogKGkgKyBtYXhDaHVua0xlbmd0aCkpKVxuICB9XG5cbiAgLy8gcGFkIHRoZSBlbmQgd2l0aCB6ZXJvcywgYnV0IG1ha2Ugc3VyZSB0byBub3QgZm9yZ2V0IHRoZSBleHRyYSBieXRlc1xuICBpZiAoZXh0cmFCeXRlcyA9PT0gMSkge1xuICAgIHRtcCA9IHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgNCkgJiAweDNGXSArXG4gICAgICAnPT0nXG4gICAgKVxuICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICB0bXAgPSAodWludDhbbGVuIC0gMl0gPDwgOCkgKyB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDEwXSArXG4gICAgICBsb29rdXBbKHRtcCA+PiA0KSAmIDB4M0ZdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDIpICYgMHgzRl0gK1xuICAgICAgJz0nXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpXG59XG4iLCJ2YXIgY29uY2F0TWFwID0gcmVxdWlyZSgnY29uY2F0LW1hcCcpO1xudmFyIGJhbGFuY2VkID0gcmVxdWlyZSgnYmFsYW5jZWQtbWF0Y2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBhbmRUb3A7XG5cbnZhciBlc2NTbGFzaCA9ICdcXDBTTEFTSCcrTWF0aC5yYW5kb20oKSsnXFwwJztcbnZhciBlc2NPcGVuID0gJ1xcME9QRU4nK01hdGgucmFuZG9tKCkrJ1xcMCc7XG52YXIgZXNjQ2xvc2UgPSAnXFwwQ0xPU0UnK01hdGgucmFuZG9tKCkrJ1xcMCc7XG52YXIgZXNjQ29tbWEgPSAnXFwwQ09NTUEnK01hdGgucmFuZG9tKCkrJ1xcMCc7XG52YXIgZXNjUGVyaW9kID0gJ1xcMFBFUklPRCcrTWF0aC5yYW5kb20oKSsnXFwwJztcblxuZnVuY3Rpb24gbnVtZXJpYyhzdHIpIHtcbiAgcmV0dXJuIHBhcnNlSW50KHN0ciwgMTApID09IHN0clxuICAgID8gcGFyc2VJbnQoc3RyLCAxMClcbiAgICA6IHN0ci5jaGFyQ29kZUF0KDApO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVCcmFjZXMoc3RyKSB7XG4gIHJldHVybiBzdHIuc3BsaXQoJ1xcXFxcXFxcJykuam9pbihlc2NTbGFzaClcbiAgICAgICAgICAgIC5zcGxpdCgnXFxcXHsnKS5qb2luKGVzY09wZW4pXG4gICAgICAgICAgICAuc3BsaXQoJ1xcXFx9Jykuam9pbihlc2NDbG9zZSlcbiAgICAgICAgICAgIC5zcGxpdCgnXFxcXCwnKS5qb2luKGVzY0NvbW1hKVxuICAgICAgICAgICAgLnNwbGl0KCdcXFxcLicpLmpvaW4oZXNjUGVyaW9kKTtcbn1cblxuZnVuY3Rpb24gdW5lc2NhcGVCcmFjZXMoc3RyKSB7XG4gIHJldHVybiBzdHIuc3BsaXQoZXNjU2xhc2gpLmpvaW4oJ1xcXFwnKVxuICAgICAgICAgICAgLnNwbGl0KGVzY09wZW4pLmpvaW4oJ3snKVxuICAgICAgICAgICAgLnNwbGl0KGVzY0Nsb3NlKS5qb2luKCd9JylcbiAgICAgICAgICAgIC5zcGxpdChlc2NDb21tYSkuam9pbignLCcpXG4gICAgICAgICAgICAuc3BsaXQoZXNjUGVyaW9kKS5qb2luKCcuJyk7XG59XG5cblxuLy8gQmFzaWNhbGx5IGp1c3Qgc3RyLnNwbGl0KFwiLFwiKSwgYnV0IGhhbmRsaW5nIGNhc2VzXG4vLyB3aGVyZSB3ZSBoYXZlIG5lc3RlZCBicmFjZWQgc2VjdGlvbnMsIHdoaWNoIHNob3VsZCBiZVxuLy8gdHJlYXRlZCBhcyBpbmRpdmlkdWFsIG1lbWJlcnMsIGxpa2Uge2Ese2IsY30sZH1cbmZ1bmN0aW9uIHBhcnNlQ29tbWFQYXJ0cyhzdHIpIHtcbiAgaWYgKCFzdHIpXG4gICAgcmV0dXJuIFsnJ107XG5cbiAgdmFyIHBhcnRzID0gW107XG4gIHZhciBtID0gYmFsYW5jZWQoJ3snLCAnfScsIHN0cik7XG5cbiAgaWYgKCFtKVxuICAgIHJldHVybiBzdHIuc3BsaXQoJywnKTtcblxuICB2YXIgcHJlID0gbS5wcmU7XG4gIHZhciBib2R5ID0gbS5ib2R5O1xuICB2YXIgcG9zdCA9IG0ucG9zdDtcbiAgdmFyIHAgPSBwcmUuc3BsaXQoJywnKTtcblxuICBwW3AubGVuZ3RoLTFdICs9ICd7JyArIGJvZHkgKyAnfSc7XG4gIHZhciBwb3N0UGFydHMgPSBwYXJzZUNvbW1hUGFydHMocG9zdCk7XG4gIGlmIChwb3N0Lmxlbmd0aCkge1xuICAgIHBbcC5sZW5ndGgtMV0gKz0gcG9zdFBhcnRzLnNoaWZ0KCk7XG4gICAgcC5wdXNoLmFwcGx5KHAsIHBvc3RQYXJ0cyk7XG4gIH1cblxuICBwYXJ0cy5wdXNoLmFwcGx5KHBhcnRzLCBwKTtcblxuICByZXR1cm4gcGFydHM7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZFRvcChzdHIpIHtcbiAgaWYgKCFzdHIpXG4gICAgcmV0dXJuIFtdO1xuXG4gIC8vIEkgZG9uJ3Qga25vdyB3aHkgQmFzaCA0LjMgZG9lcyB0aGlzLCBidXQgaXQgZG9lcy5cbiAgLy8gQW55dGhpbmcgc3RhcnRpbmcgd2l0aCB7fSB3aWxsIGhhdmUgdGhlIGZpcnN0IHR3byBieXRlcyBwcmVzZXJ2ZWRcbiAgLy8gYnV0ICpvbmx5KiBhdCB0aGUgdG9wIGxldmVsLCBzbyB7fSxhfWIgd2lsbCBub3QgZXhwYW5kIHRvIGFueXRoaW5nLFxuICAvLyBidXQgYXt9LGJ9YyB3aWxsIGJlIGV4cGFuZGVkIHRvIFthfWMsYWJjXS5cbiAgLy8gT25lIGNvdWxkIGFyZ3VlIHRoYXQgdGhpcyBpcyBhIGJ1ZyBpbiBCYXNoLCBidXQgc2luY2UgdGhlIGdvYWwgb2ZcbiAgLy8gdGhpcyBtb2R1bGUgaXMgdG8gbWF0Y2ggQmFzaCdzIHJ1bGVzLCB3ZSBlc2NhcGUgYSBsZWFkaW5nIHt9XG4gIGlmIChzdHIuc3Vic3RyKDAsIDIpID09PSAne30nKSB7XG4gICAgc3RyID0gJ1xcXFx7XFxcXH0nICsgc3RyLnN1YnN0cigyKTtcbiAgfVxuXG4gIHJldHVybiBleHBhbmQoZXNjYXBlQnJhY2VzKHN0ciksIHRydWUpLm1hcCh1bmVzY2FwZUJyYWNlcyk7XG59XG5cbmZ1bmN0aW9uIGlkZW50aXR5KGUpIHtcbiAgcmV0dXJuIGU7XG59XG5cbmZ1bmN0aW9uIGVtYnJhY2Uoc3RyKSB7XG4gIHJldHVybiAneycgKyBzdHIgKyAnfSc7XG59XG5mdW5jdGlvbiBpc1BhZGRlZChlbCkge1xuICByZXR1cm4gL14tPzBcXGQvLnRlc3QoZWwpO1xufVxuXG5mdW5jdGlvbiBsdGUoaSwgeSkge1xuICByZXR1cm4gaSA8PSB5O1xufVxuZnVuY3Rpb24gZ3RlKGksIHkpIHtcbiAgcmV0dXJuIGkgPj0geTtcbn1cblxuZnVuY3Rpb24gZXhwYW5kKHN0ciwgaXNUb3ApIHtcbiAgdmFyIGV4cGFuc2lvbnMgPSBbXTtcblxuICB2YXIgbSA9IGJhbGFuY2VkKCd7JywgJ30nLCBzdHIpO1xuICBpZiAoIW0gfHwgL1xcJCQvLnRlc3QobS5wcmUpKSByZXR1cm4gW3N0cl07XG5cbiAgdmFyIGlzTnVtZXJpY1NlcXVlbmNlID0gL14tP1xcZCtcXC5cXC4tP1xcZCsoPzpcXC5cXC4tP1xcZCspPyQvLnRlc3QobS5ib2R5KTtcbiAgdmFyIGlzQWxwaGFTZXF1ZW5jZSA9IC9eW2EtekEtWl1cXC5cXC5bYS16QS1aXSg/OlxcLlxcLi0/XFxkKyk/JC8udGVzdChtLmJvZHkpO1xuICB2YXIgaXNTZXF1ZW5jZSA9IGlzTnVtZXJpY1NlcXVlbmNlIHx8IGlzQWxwaGFTZXF1ZW5jZTtcbiAgdmFyIGlzT3B0aW9ucyA9IG0uYm9keS5pbmRleE9mKCcsJykgPj0gMDtcbiAgaWYgKCFpc1NlcXVlbmNlICYmICFpc09wdGlvbnMpIHtcbiAgICAvLyB7YX0sYn1cbiAgICBpZiAobS5wb3N0Lm1hdGNoKC8sLipcXH0vKSkge1xuICAgICAgc3RyID0gbS5wcmUgKyAneycgKyBtLmJvZHkgKyBlc2NDbG9zZSArIG0ucG9zdDtcbiAgICAgIHJldHVybiBleHBhbmQoc3RyKTtcbiAgICB9XG4gICAgcmV0dXJuIFtzdHJdO1xuICB9XG5cbiAgdmFyIG47XG4gIGlmIChpc1NlcXVlbmNlKSB7XG4gICAgbiA9IG0uYm9keS5zcGxpdCgvXFwuXFwuLyk7XG4gIH0gZWxzZSB7XG4gICAgbiA9IHBhcnNlQ29tbWFQYXJ0cyhtLmJvZHkpO1xuICAgIGlmIChuLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8geHt7YSxifX15ID09PiB4e2F9eSB4e2J9eVxuICAgICAgbiA9IGV4cGFuZChuWzBdLCBmYWxzZSkubWFwKGVtYnJhY2UpO1xuICAgICAgaWYgKG4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHZhciBwb3N0ID0gbS5wb3N0Lmxlbmd0aFxuICAgICAgICAgID8gZXhwYW5kKG0ucG9zdCwgZmFsc2UpXG4gICAgICAgICAgOiBbJyddO1xuICAgICAgICByZXR1cm4gcG9zdC5tYXAoZnVuY3Rpb24ocCkge1xuICAgICAgICAgIHJldHVybiBtLnByZSArIG5bMF0gKyBwO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBhdCB0aGlzIHBvaW50LCBuIGlzIHRoZSBwYXJ0cywgYW5kIHdlIGtub3cgaXQncyBub3QgYSBjb21tYSBzZXRcbiAgLy8gd2l0aCBhIHNpbmdsZSBlbnRyeS5cblxuICAvLyBubyBuZWVkIHRvIGV4cGFuZCBwcmUsIHNpbmNlIGl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgZnJlZSBvZiBicmFjZS1zZXRzXG4gIHZhciBwcmUgPSBtLnByZTtcbiAgdmFyIHBvc3QgPSBtLnBvc3QubGVuZ3RoXG4gICAgPyBleHBhbmQobS5wb3N0LCBmYWxzZSlcbiAgICA6IFsnJ107XG5cbiAgdmFyIE47XG5cbiAgaWYgKGlzU2VxdWVuY2UpIHtcbiAgICB2YXIgeCA9IG51bWVyaWMoblswXSk7XG4gICAgdmFyIHkgPSBudW1lcmljKG5bMV0pO1xuICAgIHZhciB3aWR0aCA9IE1hdGgubWF4KG5bMF0ubGVuZ3RoLCBuWzFdLmxlbmd0aClcbiAgICB2YXIgaW5jciA9IG4ubGVuZ3RoID09IDNcbiAgICAgID8gTWF0aC5hYnMobnVtZXJpYyhuWzJdKSlcbiAgICAgIDogMTtcbiAgICB2YXIgdGVzdCA9IGx0ZTtcbiAgICB2YXIgcmV2ZXJzZSA9IHkgPCB4O1xuICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICBpbmNyICo9IC0xO1xuICAgICAgdGVzdCA9IGd0ZTtcbiAgICB9XG4gICAgdmFyIHBhZCA9IG4uc29tZShpc1BhZGRlZCk7XG5cbiAgICBOID0gW107XG5cbiAgICBmb3IgKHZhciBpID0geDsgdGVzdChpLCB5KTsgaSArPSBpbmNyKSB7XG4gICAgICB2YXIgYztcbiAgICAgIGlmIChpc0FscGhhU2VxdWVuY2UpIHtcbiAgICAgICAgYyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSk7XG4gICAgICAgIGlmIChjID09PSAnXFxcXCcpXG4gICAgICAgICAgYyA9ICcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYyA9IFN0cmluZyhpKTtcbiAgICAgICAgaWYgKHBhZCkge1xuICAgICAgICAgIHZhciBuZWVkID0gd2lkdGggLSBjLmxlbmd0aDtcbiAgICAgICAgICBpZiAobmVlZCA+IDApIHtcbiAgICAgICAgICAgIHZhciB6ID0gbmV3IEFycmF5KG5lZWQgKyAxKS5qb2luKCcwJyk7XG4gICAgICAgICAgICBpZiAoaSA8IDApXG4gICAgICAgICAgICAgIGMgPSAnLScgKyB6ICsgYy5zbGljZSgxKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgYyA9IHogKyBjO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgTi5wdXNoKGMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBOID0gY29uY2F0TWFwKG4sIGZ1bmN0aW9uKGVsKSB7IHJldHVybiBleHBhbmQoZWwsIGZhbHNlKSB9KTtcbiAgfVxuXG4gIGZvciAodmFyIGogPSAwOyBqIDwgTi5sZW5ndGg7IGorKykge1xuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcG9zdC5sZW5ndGg7IGsrKykge1xuICAgICAgdmFyIGV4cGFuc2lvbiA9IHByZSArIE5bal0gKyBwb3N0W2tdO1xuICAgICAgaWYgKCFpc1RvcCB8fCBpc1NlcXVlbmNlIHx8IGV4cGFuc2lvbilcbiAgICAgICAgZXhwYW5zaW9ucy5wdXNoKGV4cGFuc2lvbik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4cGFuc2lvbnM7XG59XG5cbiIsImFjZS5kZWZpbmUoXCJhY2UvdGhlbWUvbW9ub2thaVwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpYi9kb21cIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblxuZXhwb3J0cy5pc0RhcmsgPSB0cnVlO1xuZXhwb3J0cy5jc3NDbGFzcyA9IFwiYWNlLW1vbm9rYWlcIjtcbmV4cG9ydHMuY3NzVGV4dCA9IFwiLmFjZS1tb25va2FpIC5hY2VfZ3V0dGVyIHtcXFxuYmFja2dyb3VuZDogIzJGMzEyOTtcXFxuY29sb3I6ICM4RjkwOEFcXFxufVxcXG4uYWNlLW1vbm9rYWkgLmFjZV9wcmludC1tYXJnaW4ge1xcXG53aWR0aDogMXB4O1xcXG5iYWNrZ3JvdW5kOiAjNTU1NjUxXFxcbn1cXFxuLmFjZS1tb25va2FpIHtcXFxuYmFja2dyb3VuZC1jb2xvcjogIzI3MjgyMjtcXFxuY29sb3I6ICNGOEY4RjJcXFxufVxcXG4uYWNlLW1vbm9rYWkgLmFjZV9jdXJzb3Ige1xcXG5jb2xvcjogI0Y4RjhGMFxcXG59XFxcbi5hY2UtbW9ub2thaSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7XFxcbmJhY2tncm91bmQ6ICM0OTQ4M0VcXFxufVxcXG4uYWNlLW1vbm9rYWkuYWNlX211bHRpc2VsZWN0IC5hY2Vfc2VsZWN0aW9uLmFjZV9zdGFydCB7XFxcbmJveC1zaGFkb3c6IDAgMCAzcHggMHB4ICMyNzI4MjI7XFxcbn1cXFxuLmFjZS1tb25va2FpIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RlcCB7XFxcbmJhY2tncm91bmQ6IHJnYigxMDIsIDgyLCAwKVxcXG59XFxcbi5hY2UtbW9ub2thaSAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQge1xcXG5tYXJnaW46IC0xcHggMCAwIC0xcHg7XFxcbmJvcmRlcjogMXB4IHNvbGlkICM0OTQ4M0VcXFxufVxcXG4uYWNlLW1vbm9rYWkgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmUtbGluZSB7XFxcbmJhY2tncm91bmQ6ICMyMDIwMjBcXFxufVxcXG4uYWNlLW1vbm9rYWkgLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge1xcXG5iYWNrZ3JvdW5kLWNvbG9yOiAjMjcyNzI3XFxcbn1cXFxuLmFjZS1tb25va2FpIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWQtd29yZCB7XFxcbmJvcmRlcjogMXB4IHNvbGlkICM0OTQ4M0VcXFxufVxcXG4uYWNlLW1vbm9rYWkgLmFjZV9pbnZpc2libGUge1xcXG5jb2xvcjogIzUyNTI0ZFxcXG59XFxcbi5hY2UtbW9ub2thaSAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfdGFnLFxcXG4uYWNlLW1vbm9rYWkgLmFjZV9rZXl3b3JkLFxcXG4uYWNlLW1vbm9rYWkgLmFjZV9tZXRhLmFjZV90YWcsXFxcbi5hY2UtbW9ub2thaSAuYWNlX3N0b3JhZ2Uge1xcXG5jb2xvcjogI0Y5MjY3MlxcXG59XFxcbi5hY2UtbW9ub2thaSAuYWNlX3B1bmN0dWF0aW9uLFxcXG4uYWNlLW1vbm9rYWkgLmFjZV9wdW5jdHVhdGlvbi5hY2VfdGFnIHtcXFxuY29sb3I6ICNmZmZcXFxufVxcXG4uYWNlLW1vbm9rYWkgLmFjZV9jb25zdGFudC5hY2VfY2hhcmFjdGVyLFxcXG4uYWNlLW1vbm9rYWkgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2UsXFxcbi5hY2UtbW9ub2thaSAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljLFxcXG4uYWNlLW1vbm9rYWkgLmFjZV9jb25zdGFudC5hY2Vfb3RoZXIge1xcXG5jb2xvcjogI0FFODFGRlxcXG59XFxcbi5hY2UtbW9ub2thaSAuYWNlX2ludmFsaWQge1xcXG5jb2xvcjogI0Y4RjhGMDtcXFxuYmFja2dyb3VuZC1jb2xvcjogI0Y5MjY3MlxcXG59XFxcbi5hY2UtbW9ub2thaSAuYWNlX2ludmFsaWQuYWNlX2RlcHJlY2F0ZWQge1xcXG5jb2xvcjogI0Y4RjhGMDtcXFxuYmFja2dyb3VuZC1jb2xvcjogI0FFODFGRlxcXG59XFxcbi5hY2UtbW9ub2thaSAuYWNlX3N1cHBvcnQuYWNlX2NvbnN0YW50LFxcXG4uYWNlLW1vbm9rYWkgLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7XFxcbmNvbG9yOiAjNjZEOUVGXFxcbn1cXFxuLmFjZS1tb25va2FpIC5hY2VfZm9sZCB7XFxcbmJhY2tncm91bmQtY29sb3I6ICNBNkUyMkU7XFxcbmJvcmRlci1jb2xvcjogI0Y4RjhGMlxcXG59XFxcbi5hY2UtbW9ub2thaSAuYWNlX3N0b3JhZ2UuYWNlX3R5cGUsXFxcbi5hY2UtbW9ub2thaSAuYWNlX3N1cHBvcnQuYWNlX2NsYXNzLFxcXG4uYWNlLW1vbm9rYWkgLmFjZV9zdXBwb3J0LmFjZV90eXBlIHtcXFxuZm9udC1zdHlsZTogaXRhbGljO1xcXG5jb2xvcjogIzY2RDlFRlxcXG59XFxcbi5hY2UtbW9ub2thaSAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfZnVuY3Rpb24sXFxcbi5hY2UtbW9ub2thaSAuYWNlX2VudGl0eS5hY2Vfb3RoZXIsXFxcbi5hY2UtbW9ub2thaSAuYWNlX2VudGl0eS5hY2Vfb3RoZXIuYWNlX2F0dHJpYnV0ZS1uYW1lLFxcXG4uYWNlLW1vbm9rYWkgLmFjZV92YXJpYWJsZSB7XFxcbmNvbG9yOiAjQTZFMjJFXFxcbn1cXFxuLmFjZS1tb25va2FpIC5hY2VfdmFyaWFibGUuYWNlX3BhcmFtZXRlciB7XFxcbmZvbnQtc3R5bGU6IGl0YWxpYztcXFxuY29sb3I6ICNGRDk3MUZcXFxufVxcXG4uYWNlLW1vbm9rYWkgLmFjZV9zdHJpbmcge1xcXG5jb2xvcjogI0U2REI3NFxcXG59XFxcbi5hY2UtbW9ub2thaSAuYWNlX2NvbW1lbnQge1xcXG5jb2xvcjogIzc1NzE1RVxcXG59XFxcbi5hY2UtbW9ub2thaSAuYWNlX2luZGVudC1ndWlkZSB7XFxcbmJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUNDQVlBQUFDWmdiWW5BQUFBRWtsRVFWUUltV1BRMEZEMFpYQnpkL3dQQUFqVkFveGVTZ05lQUFBQUFFbEZUa1N1UW1DQykgcmlnaHQgcmVwZWF0LXlcXFxufVwiO1xuXG52YXIgZG9tID0gYWNlcXVpcmUoXCIuLi9saWIvZG9tXCIpO1xuZG9tLmltcG9ydENzc1N0cmluZyhleHBvcnRzLmNzc1RleHQsIGV4cG9ydHMuY3NzQ2xhc3MpO1xufSk7XG4iLCIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBiYXNlNjQgPSByZXF1aXJlKCdiYXNlNjQtanMnKVxuY29uc3QgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxuY29uc3QgY3VzdG9tSW5zcGVjdFN5bWJvbCA9XG4gICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2xbJ2ZvciddID09PSAnZnVuY3Rpb24nKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxuICAgID8gU3ltYm9sWydmb3InXSgnbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxuICAgIDogbnVsbFxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5cbmNvbnN0IEtfTUFYX0xFTkdUSCA9IDB4N2ZmZmZmZmZcbmV4cG9ydHMua01heExlbmd0aCA9IEtfTUFYX0xFTkdUSFxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBQcmludCB3YXJuaW5nIGFuZCByZWNvbW1lbmQgdXNpbmcgYGJ1ZmZlcmAgdjQueCB3aGljaCBoYXMgYW4gT2JqZWN0XG4gKiAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBXZSByZXBvcnQgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBpZiB0aGUgYXJlIG5vdCBzdWJjbGFzc2FibGVcbiAqIHVzaW5nIF9fcHJvdG9fXy4gRmlyZWZveCA0LTI5IGxhY2tzIHN1cHBvcnQgZm9yIGFkZGluZyBuZXcgcHJvcGVydGllcyB0byBgVWludDhBcnJheWBcbiAqIChTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOCkuIElFIDEwIGxhY2tzIHN1cHBvcnRcbiAqIGZvciBfX3Byb3RvX18gYW5kIGhhcyBhIGJ1Z2d5IHR5cGVkIGFycmF5IGltcGxlbWVudGF0aW9uLlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICBjb25zb2xlLmVycm9yKFxuICAgICdUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgJyArXG4gICAgJ2BidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuJ1xuICApXG59XG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgLy8gQ2FuIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkP1xuICB0cnkge1xuICAgIGNvbnN0IGFyciA9IG5ldyBVaW50OEFycmF5KDEpXG4gICAgY29uc3QgcHJvdG8gPSB7IGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfSB9XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByb3RvLCBVaW50OEFycmF5LnByb3RvdHlwZSlcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYXJyLCBwcm90bylcbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MlxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlci5wcm90b3R5cGUsICdwYXJlbnQnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKHRoaXMpKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCAnb2Zmc2V0Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHJldHVybiB0aGlzLmJ5dGVPZmZzZXRcbiAgfVxufSlcblxuZnVuY3Rpb24gY3JlYXRlQnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKGxlbmd0aCA+IEtfTUFYX0xFTkdUSCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInICsgbGVuZ3RoICsgJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpXG4gIH1cbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgY29uc3QgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVmLCBCdWZmZXIucHJvdG90eXBlKVxuICByZXR1cm4gYnVmXG59XG5cbi8qKlxuICogVGhlIEJ1ZmZlciBjb25zdHJ1Y3RvciByZXR1cm5zIGluc3RhbmNlcyBvZiBgVWludDhBcnJheWAgdGhhdCBoYXZlIHRoZWlyXG4gKiBwcm90b3R5cGUgY2hhbmdlZCB0byBgQnVmZmVyLnByb3RvdHlwZWAuIEZ1cnRoZXJtb3JlLCBgQnVmZmVyYCBpcyBhIHN1YmNsYXNzIG9mXG4gKiBgVWludDhBcnJheWAsIHNvIHRoZSByZXR1cm5lZCBpbnN0YW5jZXMgd2lsbCBoYXZlIGFsbCB0aGUgbm9kZSBgQnVmZmVyYCBtZXRob2RzXG4gKiBhbmQgdGhlIGBVaW50OEFycmF5YCBtZXRob2RzLiBTcXVhcmUgYnJhY2tldCBub3RhdGlvbiB3b3JrcyBhcyBleHBlY3RlZCAtLSBpdFxuICogcmV0dXJucyBhIHNpbmdsZSBvY3RldC5cbiAqXG4gKiBUaGUgYFVpbnQ4QXJyYXlgIHByb3RvdHlwZSByZW1haW5zIHVubW9kaWZpZWQuXG4gKi9cblxuZnVuY3Rpb24gQnVmZmVyIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ1RoZSBcInN0cmluZ1wiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYWxsb2NVbnNhZmUoYXJnKVxuICB9XG4gIHJldHVybiBmcm9tKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyIC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxuZnVuY3Rpb24gZnJvbSAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KVxuICB9XG5cbiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5Vmlldyh2YWx1ZSlcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCAnICtcbiAgICAgICdvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB2YWx1ZSlcbiAgICApXG4gIH1cblxuICBpZiAoaXNJbnN0YW5jZSh2YWx1ZSwgQXJyYXlCdWZmZXIpIHx8XG4gICAgICAodmFsdWUgJiYgaXNJbnN0YW5jZSh2YWx1ZS5idWZmZXIsIEFycmF5QnVmZmVyKSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgKGlzSW5zdGFuY2UodmFsdWUsIFNoYXJlZEFycmF5QnVmZmVyKSB8fFxuICAgICAgKHZhbHVlICYmIGlzSW5zdGFuY2UodmFsdWUuYnVmZmVyLCBTaGFyZWRBcnJheUJ1ZmZlcikpKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcidcbiAgICApXG4gIH1cblxuICBjb25zdCB2YWx1ZU9mID0gdmFsdWUudmFsdWVPZiAmJiB2YWx1ZS52YWx1ZU9mKClcbiAgaWYgKHZhbHVlT2YgIT0gbnVsbCAmJiB2YWx1ZU9mICE9PSB2YWx1ZSkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZU9mLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBjb25zdCBiID0gZnJvbU9iamVjdCh2YWx1ZSlcbiAgaWYgKGIpIHJldHVybiBiXG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1ByaW1pdGl2ZSAhPSBudWxsICYmXG4gICAgICB0eXBlb2YgdmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdKCdzdHJpbmcnKSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAnVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgJyArXG4gICAgJ29yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHZhbHVlKVxuICApXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gTm90ZTogQ2hhbmdlIHByb3RvdHlwZSAqYWZ0ZXIqIEJ1ZmZlci5mcm9tIGlzIGRlZmluZWQgdG8gd29ya2Fyb3VuZCBDaHJvbWUgYnVnOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC8xNDhcbk9iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIucHJvdG90eXBlLCBVaW50OEFycmF5LnByb3RvdHlwZSlcbk9iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIsIFVpbnQ4QXJyYXkpXG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyBzaXplICsgJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWxsb2MgKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSlcbiAgfVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT25seSBwYXkgYXR0ZW50aW9uIHRvIGVuY29kaW5nIGlmIGl0J3MgYSBzdHJpbmcuIFRoaXNcbiAgICAvLyBwcmV2ZW50cyBhY2NpZGVudGFsbHkgc2VuZGluZyBpbiBhIG51bWJlciB0aGF0IHdvdWxkXG4gICAgLy8gYmUgaW50ZXJwcmV0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlIChzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIEJ1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIFNsb3dCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgfVxuXG4gIGNvbnN0IGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIGxldCBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuXG4gIGNvbnN0IGFjdHVhbCA9IGJ1Zi53cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuXG4gIGlmIChhY3R1YWwgIT09IGxlbmd0aCkge1xuICAgIC8vIFdyaXRpbmcgYSBoZXggc3RyaW5nLCBmb3IgZXhhbXBsZSwgdGhhdCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMgd2lsbFxuICAgIC8vIGNhdXNlIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IGludmFsaWQgY2hhcmFjdGVyIHRvIGJlIGlnbm9yZWQuIChlLmcuXG4gICAgLy8gJ2FieHhjZCcgd2lsbCBiZSB0cmVhdGVkIGFzICdhYicpXG4gICAgYnVmID0gYnVmLnNsaWNlKDAsIGFjdHVhbClcbiAgfVxuXG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZSAoYXJyYXkpIHtcbiAgY29uc3QgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIGNvbnN0IGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW5ndGgpXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICBidWZbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5VmlldyAoYXJyYXlWaWV3KSB7XG4gIGlmIChpc0luc3RhbmNlKGFycmF5VmlldywgVWludDhBcnJheSkpIHtcbiAgICBjb25zdCBjb3B5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlWaWV3KVxuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIoY29weS5idWZmZXIsIGNvcHkuYnl0ZU9mZnNldCwgY29weS5ieXRlTGVuZ3RoKVxuICB9XG4gIHJldHVybiBmcm9tQXJyYXlMaWtlKGFycmF5Vmlldylcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyIChhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcIm9mZnNldFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wibGVuZ3RoXCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGxldCBidWZcbiAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5KVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQpXG4gIH0gZWxzZSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihidWYsIEJ1ZmZlci5wcm90b3R5cGUpXG5cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0IChvYmopIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7XG4gICAgY29uc3QgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDBcbiAgICBjb25zdCBidWYgPSBjcmVhdGVCdWZmZXIobGVuKVxuXG4gICAgaWYgKGJ1Zi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBidWZcbiAgICB9XG5cbiAgICBvYmouY29weShidWYsIDAsIDAsIGxlbilcbiAgICByZXR1cm4gYnVmXG4gIH1cblxuICBpZiAob2JqLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBudW1iZXJJc05hTihvYmoubGVuZ3RoKSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcigwKVxuICAgIH1cbiAgICByZXR1cm4gZnJvbUFycmF5TGlrZShvYmopXG4gIH1cblxuICBpZiAob2JqLnR5cGUgPT09ICdCdWZmZXInICYmIEFycmF5LmlzQXJyYXkob2JqLmRhdGEpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqLmRhdGEpXG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tlZCAobGVuZ3RoKSB7XG4gIC8vIE5vdGU6IGNhbm5vdCB1c2UgYGxlbmd0aCA8IEtfTUFYX0xFTkdUSGAgaGVyZSBiZWNhdXNlIHRoYXQgZmFpbHMgd2hlblxuICAvLyBsZW5ndGggaXMgTmFOICh3aGljaCBpcyBvdGhlcndpc2UgY29lcmNlZCB0byB6ZXJvLilcbiAgaWYgKGxlbmd0aCA+PSBLX01BWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMHgnICsgS19NQVhfTEVOR1RILnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKVxuICB9XG4gIHJldHVybiBsZW5ndGggfCAwXG59XG5cbmZ1bmN0aW9uIFNsb3dCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICBsZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYygrbGVuZ3RoKVxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikge1xuICByZXR1cm4gYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyID09PSB0cnVlICYmXG4gICAgYiAhPT0gQnVmZmVyLnByb3RvdHlwZSAvLyBzbyBCdWZmZXIuaXNCdWZmZXIoQnVmZmVyLnByb3RvdHlwZSkgd2lsbCBiZSBmYWxzZVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKGlzSW5zdGFuY2UoYSwgVWludDhBcnJheSkpIGEgPSBCdWZmZXIuZnJvbShhLCBhLm9mZnNldCwgYS5ieXRlTGVuZ3RoKVxuICBpZiAoaXNJbnN0YW5jZShiLCBVaW50OEFycmF5KSkgYiA9IEJ1ZmZlci5mcm9tKGIsIGIub2Zmc2V0LCBiLmJ5dGVMZW5ndGgpXG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcImJ1ZjFcIiwgXCJidWYyXCIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknXG4gICAgKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgbGV0IHggPSBhLmxlbmd0aFxuICBsZXQgeSA9IGIubGVuZ3RoXG5cbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICBsZXQgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShsZW5ndGgpXG4gIGxldCBwb3MgPSAwXG4gIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgbGV0IGJ1ZiA9IGxpc3RbaV1cbiAgICBpZiAoaXNJbnN0YW5jZShidWYsIFVpbnQ4QXJyYXkpKSB7XG4gICAgICBpZiAocG9zICsgYnVmLmxlbmd0aCA+IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkgYnVmID0gQnVmZmVyLmZyb20oYnVmKVxuICAgICAgICBidWYuY29weShidWZmZXIsIHBvcylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgICAgIGJ1ZmZlcixcbiAgICAgICAgICBidWYsXG4gICAgICAgICAgcG9zXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgfVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcubGVuZ3RoXG4gIH1cbiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IGlzSW5zdGFuY2Uoc3RyaW5nLCBBcnJheUJ1ZmZlcikpIHtcbiAgICByZXR1cm4gc3RyaW5nLmJ5dGVMZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInN0cmluZ1wiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiAnICtcbiAgICAgICdSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2Ygc3RyaW5nXG4gICAgKVxuICB9XG5cbiAgY29uc3QgbGVuID0gc3RyaW5nLmxlbmd0aFxuICBjb25zdCBtdXN0TWF0Y2ggPSAoYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdID09PSB0cnVlKVxuICBpZiAoIW11c3RNYXRjaCAmJiBsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIGxldCBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHtcbiAgICAgICAgICByZXR1cm4gbXVzdE1hdGNoID8gLTEgOiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICB9XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICBsZXQgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcmNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIChhbmQgdGhlIGBpcy1idWZmZXJgIG5wbSBwYWNrYWdlKVxuLy8gdG8gZGV0ZWN0IGEgQnVmZmVyIGluc3RhbmNlLiBJdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgYGluc3RhbmNlb2YgQnVmZmVyYFxuLy8gcmVsaWFibHkgaW4gYSBicm93c2VyaWZ5IGNvbnRleHQgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBkaWZmZXJlbnRcbi8vIGNvcGllcyBvZiB0aGUgJ2J1ZmZlcicgcGFja2FnZSBpbiB1c2UuIFRoaXMgbWV0aG9kIHdvcmtzIGV2ZW4gZm9yIEJ1ZmZlclxuLy8gaW5zdGFuY2VzIHRoYXQgd2VyZSBjcmVhdGVkIGZyb20gYW5vdGhlciBjb3B5IG9mIHRoZSBgYnVmZmVyYCBwYWNrYWdlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMTU0XG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICBjb25zdCBpID0gYltuXVxuICBiW25dID0gYlttXVxuICBiW21dID0gaVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAxNiA9IGZ1bmN0aW9uIHN3YXAxNiAoKSB7XG4gIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzJylcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMiAoKSB7XG4gIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA4ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzJylcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSA4KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgNylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgNilcbiAgICBzd2FwKHRoaXMsIGkgKyAyLCBpICsgNSlcbiAgICBzd2FwKHRoaXMsIGkgKyAzLCBpICsgNClcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICBjb25zdCBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKVxuICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZyA9IEJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmdcblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICBsZXQgc3RyID0gJydcbiAgY29uc3QgbWF4ID0gZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFU1xuICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLnJlcGxhY2UoLyguezJ9KS9nLCAnJDEgJykudHJpbSgpXG4gIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgcmV0dXJuICc8QnVmZmVyICcgKyBzdHIgKyAnPidcbn1cbmlmIChjdXN0b21JbnNwZWN0U3ltYm9sKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGVbY3VzdG9tSW5zcGVjdFN5bWJvbF0gPSBCdWZmZXIucHJvdG90eXBlLmluc3BlY3Rcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAodGFyZ2V0LCBzdGFydCwgZW5kLCB0aGlzU3RhcnQsIHRoaXNFbmQpIHtcbiAgaWYgKGlzSW5zdGFuY2UodGFyZ2V0LCBVaW50OEFycmF5KSkge1xuICAgIHRhcmdldCA9IEJ1ZmZlci5mcm9tKHRhcmdldCwgdGFyZ2V0Lm9mZnNldCwgdGFyZ2V0LmJ5dGVMZW5ndGgpXG4gIH1cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwidGFyZ2V0XCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gJyArXG4gICAgICAnUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB0YXJnZXQpXG4gICAgKVxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSB0YXJnZXQgPyB0YXJnZXQubGVuZ3RoIDogMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNTdGFydCA9IDBcbiAgfVxuICBpZiAodGhpc0VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc0VuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRhcmdldC5sZW5ndGggfHwgdGhpc1N0YXJ0IDwgMCB8fCB0aGlzRW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCkge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmIChzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMVxuICB9XG5cbiAgc3RhcnQgPj4+PSAwXG4gIGVuZCA+Pj49IDBcbiAgdGhpc1N0YXJ0ID4+Pj0gMFxuICB0aGlzRW5kID4+Pj0gMFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQpIHJldHVybiAwXG5cbiAgbGV0IHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0XG4gIGxldCB5ID0gZW5kIC0gc3RhcnRcbiAgY29uc3QgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICBjb25zdCB0aGlzQ29weSA9IHRoaXMuc2xpY2UodGhpc1N0YXJ0LCB0aGlzRW5kKVxuICBjb25zdCB0YXJnZXRDb3B5ID0gdGFyZ2V0LnNsaWNlKHN0YXJ0LCBlbmQpXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzQ29weVtpXSAhPT0gdGFyZ2V0Q29weVtpXSkge1xuICAgICAgeCA9IHRoaXNDb3B5W2ldXG4gICAgICB5ID0gdGFyZ2V0Q29weVtpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbi8vIEZpbmRzIGVpdGhlciB0aGUgZmlyc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0ID49IGBieXRlT2Zmc2V0YCxcbi8vIE9SIHRoZSBsYXN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA8PSBgYnl0ZU9mZnNldGAuXG4vL1xuLy8gQXJndW1lbnRzOlxuLy8gLSBidWZmZXIgLSBhIEJ1ZmZlciB0byBzZWFyY2hcbi8vIC0gdmFsIC0gYSBzdHJpbmcsIEJ1ZmZlciwgb3IgbnVtYmVyXG4vLyAtIGJ5dGVPZmZzZXQgLSBhbiBpbmRleCBpbnRvIGBidWZmZXJgOyB3aWxsIGJlIGNsYW1wZWQgdG8gYW4gaW50MzJcbi8vIC0gZW5jb2RpbmcgLSBhbiBvcHRpb25hbCBlbmNvZGluZywgcmVsZXZhbnQgaXMgdmFsIGlzIGEgc3RyaW5nXG4vLyAtIGRpciAtIHRydWUgZm9yIGluZGV4T2YsIGZhbHNlIGZvciBsYXN0SW5kZXhPZlxuZnVuY3Rpb24gYmlkaXJlY3Rpb25hbEluZGV4T2YgKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIC8vIEVtcHR5IGJ1ZmZlciBtZWFucyBubyBtYXRjaFxuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXRcbiAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gYnl0ZU9mZnNldFxuICAgIGJ5dGVPZmZzZXQgPSAwXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA+IDB4N2ZmZmZmZmYpIHtcbiAgICBieXRlT2Zmc2V0ID0gMHg3ZmZmZmZmZlxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAtMHg4MDAwMDAwMCkge1xuICAgIGJ5dGVPZmZzZXQgPSAtMHg4MDAwMDAwMFxuICB9XG4gIGJ5dGVPZmZzZXQgPSArYnl0ZU9mZnNldCAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAobnVtYmVySXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmICh0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbdmFsXSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlcicpXG59XG5cbmZ1bmN0aW9uIGFycmF5SW5kZXhPZiAoYXJyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgbGV0IGluZGV4U2l6ZSA9IDFcbiAgbGV0IGFyckxlbmd0aCA9IGFyci5sZW5ndGhcbiAgbGV0IHZhbExlbmd0aCA9IHZhbC5sZW5ndGhcblxuICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGVuY29kaW5nID09PSAndWNzMicgfHwgZW5jb2RpbmcgPT09ICd1Y3MtMicgfHxcbiAgICAgICAgZW5jb2RpbmcgPT09ICd1dGYxNmxlJyB8fCBlbmNvZGluZyA9PT0gJ3V0Zi0xNmxlJykge1xuICAgICAgaWYgKGFyci5sZW5ndGggPCAyIHx8IHZhbC5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiAtMVxuICAgICAgfVxuICAgICAgaW5kZXhTaXplID0gMlxuICAgICAgYXJyTGVuZ3RoIC89IDJcbiAgICAgIHZhbExlbmd0aCAvPSAyXG4gICAgICBieXRlT2Zmc2V0IC89IDJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkIChidWYsIGkpIHtcbiAgICBpZiAoaW5kZXhTaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gYnVmW2ldXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidWYucmVhZFVJbnQxNkJFKGkgKiBpbmRleFNpemUpXG4gICAgfVxuICB9XG5cbiAgbGV0IGlcbiAgaWYgKGRpcikge1xuICAgIGxldCBmb3VuZEluZGV4ID0gLTFcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpIDwgYXJyTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWFkKGFyciwgaSkgPT09IHJlYWQodmFsLCBmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleCkpIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKSBmb3VuZEluZGV4ID0gaVxuICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWxMZW5ndGgpIHJldHVybiBmb3VuZEluZGV4ICogaW5kZXhTaXplXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpIGkgLT0gaSAtIGZvdW5kSW5kZXhcbiAgICAgICAgZm91bmRJbmRleCA9IC0xXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChieXRlT2Zmc2V0ICsgdmFsTGVuZ3RoID4gYXJyTGVuZ3RoKSBieXRlT2Zmc2V0ID0gYXJyTGVuZ3RoIC0gdmFsTGVuZ3RoXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCBmb3VuZCA9IHRydWVcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdmFsTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHJlYWQoYXJyLCBpICsgaikgIT09IHJlYWQodmFsLCBqKSkge1xuICAgICAgICAgIGZvdW5kID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlKVxufVxuXG5mdW5jdGlvbiBoZXhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgY29uc3QgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuXG4gIGlmIChsZW5ndGggPiBzdHJMZW4gLyAyKSB7XG4gICAgbGVuZ3RoID0gc3RyTGVuIC8gMlxuICB9XG4gIGxldCBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAobnVtYmVySXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGJhc2U2NFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYmFzZTY0VG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiB1Y3MyV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGYxNmxlVG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUgKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcpXG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBvZmZzZXRcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgb2Zmc2V0WywgbGVuZ3RoXVssIGVuY29kaW5nXSlcbiAgfSBlbHNlIGlmIChpc0Zpbml0ZShvZmZzZXQpKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCA+Pj4gMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0J1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkJ1xuICAgIClcbiAgfVxuXG4gIGNvbnN0IHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgbGV0IGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGFzY2lpV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICBjb25zdCByZXMgPSBbXVxuXG4gIGxldCBpID0gc3RhcnRcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICBjb25zdCBmaXJzdEJ5dGUgPSBidWZbaV1cbiAgICBsZXQgY29kZVBvaW50ID0gbnVsbFxuICAgIGxldCBieXRlc1BlclNlcXVlbmNlID0gKGZpcnN0Qnl0ZSA+IDB4RUYpXG4gICAgICA/IDRcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4REYpXG4gICAgICAgICAgPyAzXG4gICAgICAgICAgOiAoZmlyc3RCeXRlID4gMHhCRilcbiAgICAgICAgICAgICAgPyAyXG4gICAgICAgICAgICAgIDogMVxuXG4gICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkge1xuICAgICAgbGV0IHNlY29uZEJ5dGUsIHRoaXJkQnl0ZSwgZm91cnRoQnl0ZSwgdGVtcENvZGVQb2ludFxuXG4gICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAweDgwKSB7XG4gICAgICAgICAgICBjb2RlUG9pbnQgPSBmaXJzdEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHgxRikgPDwgMHg2IHwgKHNlY29uZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4QyB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKHRoaXJkQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0ZGICYmICh0ZW1wQ29kZVBvaW50IDwgMHhEODAwIHx8IHRlbXBDb2RlUG9pbnQgPiAweERGRkYpKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwICYmIChmb3VydGhCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweDEyIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweEMgfCAodGhpcmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKGZvdXJ0aEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweEZGRkYgJiYgdGVtcENvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgLy8gd2UgZGlkIG5vdCBnZW5lcmF0ZSBhIHZhbGlkIGNvZGVQb2ludCBzbyBpbnNlcnQgYVxuICAgICAgLy8gcmVwbGFjZW1lbnQgY2hhciAoVStGRkZEKSBhbmQgYWR2YW5jZSBvbmx5IDEgYnl0ZVxuICAgICAgY29kZVBvaW50ID0gMHhGRkZEXG4gICAgICBieXRlc1BlclNlcXVlbmNlID0gMVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG4gICAgICAvLyBlbmNvZGUgdG8gdXRmMTYgKHN1cnJvZ2F0ZSBwYWlyIGRhbmNlKVxuICAgICAgY29kZVBvaW50IC09IDB4MTAwMDBcbiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMClcbiAgICAgIGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGXG4gICAgfVxuXG4gICAgcmVzLnB1c2goY29kZVBvaW50KVxuICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShyZXMpXG59XG5cbi8vIEJhc2VkIG9uIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyNzQ3MjcyLzY4MDc0MiwgdGhlIGJyb3dzZXIgd2l0aFxuLy8gdGhlIGxvd2VzdCBsaW1pdCBpcyBDaHJvbWUsIHdpdGggMHgxMDAwMCBhcmdzLlxuLy8gV2UgZ28gMSBtYWduaXR1ZGUgbGVzcywgZm9yIHNhZmV0eVxuY29uc3QgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIGNvbnN0IGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpIC8vIGF2b2lkIGV4dHJhIHNsaWNlKClcbiAgfVxuXG4gIC8vIERlY29kZSBpbiBjaHVua3MgdG8gYXZvaWQgXCJjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIi5cbiAgbGV0IHJlcyA9ICcnXG4gIGxldCBpID0gMFxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxuICAgICAgU3RyaW5nLFxuICAgICAgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKVxuICAgIClcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBsZXQgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3RilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGxhdGluMVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgbGV0IHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgY29uc3QgbGVuID0gYnVmLmxlbmd0aFxuXG4gIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlblxuXG4gIGxldCBvdXQgPSAnJ1xuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIG91dCArPSBoZXhTbGljZUxvb2t1cFRhYmxlW2J1ZltpXV1cbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGNvbnN0IGJ5dGVzID0gYnVmLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIGxldCByZXMgPSAnJ1xuICAvLyBJZiBieXRlcy5sZW5ndGggaXMgb2RkLCB0aGUgbGFzdCA4IGJpdHMgbXVzdCBiZSBpZ25vcmVkIChzYW1lIGFzIG5vZGUuanMpXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoIC0gMTsgaSArPSAyKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0gKyAoYnl0ZXNbaSArIDFdICogMjU2KSlcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIGNvbnN0IG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG5ld0J1ZiwgQnVmZmVyLnByb3RvdHlwZSlcblxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50TEUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICBsZXQgdmFsID0gdGhpc1tvZmZzZXRdXG4gIGxldCBtdWwgPSAxXG4gIGxldCBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnRCRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcbiAgfVxuXG4gIGxldCB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF1cbiAgbGV0IG11bCA9IDFcbiAgd2hpbGUgKGJ5dGVMZW5ndGggPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50OCA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MTZMRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQxNkJFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCA4KSB8IHRoaXNbb2Zmc2V0ICsgMV1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDMyTEUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICgodGhpc1tvZmZzZXRdKSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikpICtcbiAgICAgICh0aGlzW29mZnNldCArIDNdICogMHgxMDAwMDAwKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MzJCRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRCaWdVSW50NjRMRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnVUludDY0TEUgKG9mZnNldCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAnb2Zmc2V0JylcbiAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF1cbiAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN11cbiAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgbGFzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpXG4gIH1cblxuICBjb25zdCBsbyA9IGZpcnN0ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMjRcblxuICBjb25zdCBoaSA9IHRoaXNbKytvZmZzZXRdICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICBsYXN0ICogMiAqKiAyNFxuXG4gIHJldHVybiBCaWdJbnQobG8pICsgKEJpZ0ludChoaSkgPDwgQmlnSW50KDMyKSlcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NEJFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHJlYWRCaWdVSW50NjRCRSAob2Zmc2V0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICdvZmZzZXQnKVxuICBjb25zdCBmaXJzdCA9IHRoaXNbb2Zmc2V0XVxuICBjb25zdCBsYXN0ID0gdGhpc1tvZmZzZXQgKyA3XVxuICBpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCB8fCBsYXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOClcbiAgfVxuXG4gIGNvbnN0IGhpID0gZmlyc3QgKiAyICoqIDI0ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICtcbiAgICB0aGlzWysrb2Zmc2V0XVxuXG4gIGNvbnN0IGxvID0gdGhpc1srK29mZnNldF0gKiAyICoqIDI0ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICtcbiAgICBsYXN0XG5cbiAgcmV0dXJuIChCaWdJbnQoaGkpIDw8IEJpZ0ludCgzMikpICsgQmlnSW50KGxvKVxufSlcblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0XVxuICBsZXQgbXVsID0gMVxuICBsZXQgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIGxldCBpID0gYnl0ZUxlbmd0aFxuICBsZXQgbXVsID0gMVxuICBsZXQgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgY29uc3QgdmFsID0gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIGNvbnN0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdKSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10gPDwgMjQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiByZWFkSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRCaWdJbnQ2NExFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHJlYWRCaWdJbnQ2NExFIChvZmZzZXQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgJ29mZnNldCcpXG4gIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdXG4gIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddXG4gIGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkIHx8IGxhc3QgPT09IHVuZGVmaW5lZCkge1xuICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSA4KVxuICB9XG5cbiAgY29uc3QgdmFsID0gdGhpc1tvZmZzZXQgKyA0XSArXG4gICAgdGhpc1tvZmZzZXQgKyA1XSAqIDIgKiogOCArXG4gICAgdGhpc1tvZmZzZXQgKyA2XSAqIDIgKiogMTYgK1xuICAgIChsYXN0IDw8IDI0KSAvLyBPdmVyZmxvd1xuXG4gIHJldHVybiAoQmlnSW50KHZhbCkgPDwgQmlnSW50KDMyKSkgK1xuICAgIEJpZ0ludChmaXJzdCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDI0KVxufSlcblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkQmlnSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnSW50NjRCRSAob2Zmc2V0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICdvZmZzZXQnKVxuICBjb25zdCBmaXJzdCA9IHRoaXNbb2Zmc2V0XVxuICBjb25zdCBsYXN0ID0gdGhpc1tvZmZzZXQgKyA3XVxuICBpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCB8fCBsYXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOClcbiAgfVxuXG4gIGNvbnN0IHZhbCA9IChmaXJzdCA8PCAyNCkgKyAvLyBPdmVyZmxvd1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgIHRoaXNbKytvZmZzZXRdXG5cbiAgcmV0dXJuIChCaWdJbnQodmFsKSA8PCBCaWdJbnQoMzIpKSArXG4gICAgQmlnSW50KHRoaXNbKytvZmZzZXRdICogMiAqKiAyNCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgbGFzdClcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludExFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjb25zdCBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIGxldCBtdWwgPSAxXG4gIGxldCBpID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50QkUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNvbnN0IG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgbGV0IGkgPSBieXRlTGVuZ3RoIC0gMVxuICBsZXQgbXVsID0gMVxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQ4ID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50OCA9IGZ1bmN0aW9uIHdyaXRlVUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDE2TEUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQxNkJFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MzJMRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDMyQkUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gd3J0QmlnVUludDY0TEUgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbWluLCBtYXgpIHtcbiAgY2hlY2tJbnRCSSh2YWx1ZSwgbWluLCBtYXgsIGJ1Ziwgb2Zmc2V0LCA3KVxuXG4gIGxldCBsbyA9IE51bWJlcih2YWx1ZSAmIEJpZ0ludCgweGZmZmZmZmZmKSlcbiAgYnVmW29mZnNldCsrXSA9IGxvXG4gIGxvID0gbG8gPj4gOFxuICBidWZbb2Zmc2V0KytdID0gbG9cbiAgbG8gPSBsbyA+PiA4XG4gIGJ1ZltvZmZzZXQrK10gPSBsb1xuICBsbyA9IGxvID4+IDhcbiAgYnVmW29mZnNldCsrXSA9IGxvXG4gIGxldCBoaSA9IE51bWJlcih2YWx1ZSA+PiBCaWdJbnQoMzIpICYgQmlnSW50KDB4ZmZmZmZmZmYpKVxuICBidWZbb2Zmc2V0KytdID0gaGlcbiAgaGkgPSBoaSA+PiA4XG4gIGJ1ZltvZmZzZXQrK10gPSBoaVxuICBoaSA9IGhpID4+IDhcbiAgYnVmW29mZnNldCsrXSA9IGhpXG4gIGhpID0gaGkgPj4gOFxuICBidWZbb2Zmc2V0KytdID0gaGlcbiAgcmV0dXJuIG9mZnNldFxufVxuXG5mdW5jdGlvbiB3cnRCaWdVSW50NjRCRSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBtaW4sIG1heCkge1xuICBjaGVja0ludEJJKHZhbHVlLCBtaW4sIG1heCwgYnVmLCBvZmZzZXQsIDcpXG5cbiAgbGV0IGxvID0gTnVtYmVyKHZhbHVlICYgQmlnSW50KDB4ZmZmZmZmZmYpKVxuICBidWZbb2Zmc2V0ICsgN10gPSBsb1xuICBsbyA9IGxvID4+IDhcbiAgYnVmW29mZnNldCArIDZdID0gbG9cbiAgbG8gPSBsbyA+PiA4XG4gIGJ1ZltvZmZzZXQgKyA1XSA9IGxvXG4gIGxvID0gbG8gPj4gOFxuICBidWZbb2Zmc2V0ICsgNF0gPSBsb1xuICBsZXQgaGkgPSBOdW1iZXIodmFsdWUgPj4gQmlnSW50KDMyKSAmIEJpZ0ludCgweGZmZmZmZmZmKSlcbiAgYnVmW29mZnNldCArIDNdID0gaGlcbiAgaGkgPSBoaSA+PiA4XG4gIGJ1ZltvZmZzZXQgKyAyXSA9IGhpXG4gIGhpID0gaGkgPj4gOFxuICBidWZbb2Zmc2V0ICsgMV0gPSBoaVxuICBoaSA9IGhpID4+IDhcbiAgYnVmW29mZnNldF0gPSBoaVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlQmlnVUludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdVSW50NjRMRSAodmFsdWUsIG9mZnNldCA9IDApIHtcbiAgcmV0dXJuIHdydEJpZ1VJbnQ2NExFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIEJpZ0ludCgwKSwgQmlnSW50KCcweGZmZmZmZmZmZmZmZmZmZmYnKSlcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiB3cml0ZUJpZ1VJbnQ2NEJFICh2YWx1ZSwgb2Zmc2V0ID0gMCkge1xuICByZXR1cm4gd3J0QmlnVUludDY0QkUodGhpcywgdmFsdWUsIG9mZnNldCwgQmlnSW50KDApLCBCaWdJbnQoJzB4ZmZmZmZmZmZmZmZmZmZmZicpKVxufSlcblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjb25zdCBsaW1pdCA9IE1hdGgucG93KDIsICg4ICogYnl0ZUxlbmd0aCkgLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICBsZXQgaSA9IDBcbiAgbGV0IG11bCA9IDFcbiAgbGV0IHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjb25zdCBsaW1pdCA9IE1hdGgucG93KDIsICg4ICogYnl0ZUxlbmd0aCkgLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICBsZXQgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIGxldCBtdWwgPSAxXG4gIGxldCBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpICsgMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweDdmLCAtMHg4MClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlQmlnSW50NjRMRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiB3cml0ZUJpZ0ludDY0TEUgKHZhbHVlLCBvZmZzZXQgPSAwKSB7XG4gIHJldHVybiB3cnRCaWdVSW50NjRMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtQmlnSW50KCcweDgwMDAwMDAwMDAwMDAwMDAnKSwgQmlnSW50KCcweDdmZmZmZmZmZmZmZmZmZmYnKSlcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NEJFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHdyaXRlQmlnSW50NjRCRSAodmFsdWUsIG9mZnNldCA9IDApIHtcbiAgcmV0dXJuIHdydEJpZ1VJbnQ2NEJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIC1CaWdJbnQoJzB4ODAwMDAwMDAwMDAwMDAwMCcpLCBCaWdJbnQoJzB4N2ZmZmZmZmZmZmZmZmZmZicpKVxufSlcblxuZnVuY3Rpb24gY2hlY2tJRUVFNzU0IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAob2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvYXQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyJylcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIGNvbnN0IGxlbiA9IGVuZCAtIHN0YXJ0XG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCAmJiB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFVzZSBidWlsdC1pbiB3aGVuIGF2YWlsYWJsZSwgbWlzc2luZyBmcm9tIElFMTFcbiAgICB0aGlzLmNvcHlXaXRoaW4odGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpXG4gIH0gZWxzZSB7XG4gICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoXG4gICAgICB0YXJnZXQsXG4gICAgICB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgY29kZSA9IHZhbC5jaGFyQ29kZUF0KDApXG4gICAgICBpZiAoKGVuY29kaW5nID09PSAndXRmOCcgJiYgY29kZSA8IDEyOCkgfHxcbiAgICAgICAgICBlbmNvZGluZyA9PT0gJ2xhdGluMScpIHtcbiAgICAgICAgLy8gRmFzdCBwYXRoOiBJZiBgdmFsYCBmaXRzIGludG8gYSBzaW5nbGUgYnl0ZSwgdXNlIHRoYXQgbnVtZXJpYyB2YWx1ZS5cbiAgICAgICAgdmFsID0gY29kZVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDI1NVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdib29sZWFuJykge1xuICAgIHZhbCA9IE51bWJlcih2YWwpXG4gIH1cblxuICAvLyBJbnZhbGlkIHJhbmdlcyBhcmUgbm90IHNldCB0byBhIGRlZmF1bHQsIHNvIGNhbiByYW5nZSBjaGVjayBlYXJseS5cbiAgaWYgKHN0YXJ0IDwgMCB8fCB0aGlzLmxlbmd0aCA8IHN0YXJ0IHx8IHRoaXMubGVuZ3RoIDwgZW5kKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ091dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXJ0ID0gc3RhcnQgPj4+IDBcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyB0aGlzLmxlbmd0aCA6IGVuZCA+Pj4gMFxuXG4gIGlmICghdmFsKSB2YWwgPSAwXG5cbiAgbGV0IGlcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgICAgdGhpc1tpXSA9IHZhbFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICAgIGNvbnN0IGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGlmIChsZW4gPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyB2YWwgK1xuICAgICAgICAnXCIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgXCJ2YWx1ZVwiJylcbiAgICB9XG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gQ1VTVE9NIEVSUk9SU1xuLy8gPT09PT09PT09PT09PVxuXG4vLyBTaW1wbGlmaWVkIHZlcnNpb25zIGZyb20gTm9kZSwgY2hhbmdlZCBmb3IgQnVmZmVyLW9ubHkgdXNhZ2VcbmNvbnN0IGVycm9ycyA9IHt9XG5mdW5jdGlvbiBFIChzeW0sIGdldE1lc3NhZ2UsIEJhc2UpIHtcbiAgZXJyb3JzW3N5bV0gPSBjbGFzcyBOb2RlRXJyb3IgZXh0ZW5kcyBCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICBzdXBlcigpXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnbWVzc2FnZScsIHtcbiAgICAgICAgdmFsdWU6IGdldE1lc3NhZ2UuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfSlcblxuICAgICAgLy8gQWRkIHRoZSBlcnJvciBjb2RlIHRvIHRoZSBuYW1lIHRvIGluY2x1ZGUgaXQgaW4gdGhlIHN0YWNrIHRyYWNlLlxuICAgICAgdGhpcy5uYW1lID0gYCR7dGhpcy5uYW1lfSBbJHtzeW19XWBcbiAgICAgIC8vIEFjY2VzcyB0aGUgc3RhY2sgdG8gZ2VuZXJhdGUgdGhlIGVycm9yIG1lc3NhZ2UgaW5jbHVkaW5nIHRoZSBlcnJvciBjb2RlXG4gICAgICAvLyBmcm9tIHRoZSBuYW1lLlxuICAgICAgdGhpcy5zdGFjayAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuICAgICAgLy8gUmVzZXQgdGhlIG5hbWUgdG8gdGhlIGFjdHVhbCBuYW1lLlxuICAgICAgZGVsZXRlIHRoaXMubmFtZVxuICAgIH1cblxuICAgIGdldCBjb2RlICgpIHtcbiAgICAgIHJldHVybiBzeW1cbiAgICB9XG5cbiAgICBzZXQgY29kZSAodmFsdWUpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnY29kZScsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdG9TdHJpbmcgKCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMubmFtZX0gWyR7c3ltfV06ICR7dGhpcy5tZXNzYWdlfWBcbiAgICB9XG4gIH1cbn1cblxuRSgnRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTJyxcbiAgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBpZiAobmFtZSkge1xuICAgICAgcmV0dXJuIGAke25hbWV9IGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kc2BcbiAgICB9XG5cbiAgICByZXR1cm4gJ0F0dGVtcHQgdG8gYWNjZXNzIG1lbW9yeSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnXG4gIH0sIFJhbmdlRXJyb3IpXG5FKCdFUlJfSU5WQUxJRF9BUkdfVFlQRScsXG4gIGZ1bmN0aW9uIChuYW1lLCBhY3R1YWwpIHtcbiAgICByZXR1cm4gYFRoZSBcIiR7bmFtZX1cIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIGFjdHVhbH1gXG4gIH0sIFR5cGVFcnJvcilcbkUoJ0VSUl9PVVRfT0ZfUkFOR0UnLFxuICBmdW5jdGlvbiAoc3RyLCByYW5nZSwgaW5wdXQpIHtcbiAgICBsZXQgbXNnID0gYFRoZSB2YWx1ZSBvZiBcIiR7c3RyfVwiIGlzIG91dCBvZiByYW5nZS5gXG4gICAgbGV0IHJlY2VpdmVkID0gaW5wdXRcbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihpbnB1dCkgJiYgTWF0aC5hYnMoaW5wdXQpID4gMiAqKiAzMikge1xuICAgICAgcmVjZWl2ZWQgPSBhZGROdW1lcmljYWxTZXBhcmF0b3IoU3RyaW5nKGlucHV0KSlcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgIHJlY2VpdmVkID0gU3RyaW5nKGlucHV0KVxuICAgICAgaWYgKGlucHV0ID4gQmlnSW50KDIpICoqIEJpZ0ludCgzMikgfHwgaW5wdXQgPCAtKEJpZ0ludCgyKSAqKiBCaWdJbnQoMzIpKSkge1xuICAgICAgICByZWNlaXZlZCA9IGFkZE51bWVyaWNhbFNlcGFyYXRvcihyZWNlaXZlZClcbiAgICAgIH1cbiAgICAgIHJlY2VpdmVkICs9ICduJ1xuICAgIH1cbiAgICBtc2cgKz0gYCBJdCBtdXN0IGJlICR7cmFuZ2V9LiBSZWNlaXZlZCAke3JlY2VpdmVkfWBcbiAgICByZXR1cm4gbXNnXG4gIH0sIFJhbmdlRXJyb3IpXG5cbmZ1bmN0aW9uIGFkZE51bWVyaWNhbFNlcGFyYXRvciAodmFsKSB7XG4gIGxldCByZXMgPSAnJ1xuICBsZXQgaSA9IHZhbC5sZW5ndGhcbiAgY29uc3Qgc3RhcnQgPSB2YWxbMF0gPT09ICctJyA/IDEgOiAwXG4gIGZvciAoOyBpID49IHN0YXJ0ICsgNDsgaSAtPSAzKSB7XG4gICAgcmVzID0gYF8ke3ZhbC5zbGljZShpIC0gMywgaSl9JHtyZXN9YFxuICB9XG4gIHJldHVybiBgJHt2YWwuc2xpY2UoMCwgaSl9JHtyZXN9YFxufVxuXG4vLyBDSEVDSyBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PVxuXG5mdW5jdGlvbiBjaGVja0JvdW5kcyAoYnVmLCBvZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAnb2Zmc2V0JylcbiAgaWYgKGJ1ZltvZmZzZXRdID09PSB1bmRlZmluZWQgfHwgYnVmW29mZnNldCArIGJ5dGVMZW5ndGhdID09PSB1bmRlZmluZWQpIHtcbiAgICBib3VuZHNFcnJvcihvZmZzZXQsIGJ1Zi5sZW5ndGggLSAoYnl0ZUxlbmd0aCArIDEpKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrSW50QkkgKHZhbHVlLCBtaW4sIG1heCwgYnVmLCBvZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB7XG4gICAgY29uc3QgbiA9IHR5cGVvZiBtaW4gPT09ICdiaWdpbnQnID8gJ24nIDogJydcbiAgICBsZXQgcmFuZ2VcbiAgICBpZiAoYnl0ZUxlbmd0aCA+IDMpIHtcbiAgICAgIGlmIChtaW4gPT09IDAgfHwgbWluID09PSBCaWdJbnQoMCkpIHtcbiAgICAgICAgcmFuZ2UgPSBgPj0gMCR7bn0gYW5kIDwgMiR7bn0gKiogJHsoYnl0ZUxlbmd0aCArIDEpICogOH0ke259YFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmFuZ2UgPSBgPj0gLSgyJHtufSAqKiAkeyhieXRlTGVuZ3RoICsgMSkgKiA4IC0gMX0ke259KSBhbmQgPCAyICoqIGAgK1xuICAgICAgICAgICAgICAgIGAkeyhieXRlTGVuZ3RoICsgMSkgKiA4IC0gMX0ke259YFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByYW5nZSA9IGA+PSAke21pbn0ke259IGFuZCA8PSAke21heH0ke259YFxuICAgIH1cbiAgICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9PVVRfT0ZfUkFOR0UoJ3ZhbHVlJywgcmFuZ2UsIHZhbHVlKVxuICB9XG4gIGNoZWNrQm91bmRzKGJ1Ziwgb2Zmc2V0LCBieXRlTGVuZ3RoKVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZU51bWJlciAodmFsdWUsIG5hbWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdudW1iZXInLCB2YWx1ZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBib3VuZHNFcnJvciAodmFsdWUsIGxlbmd0aCwgdHlwZSkge1xuICBpZiAoTWF0aC5mbG9vcih2YWx1ZSkgIT09IHZhbHVlKSB7XG4gICAgdmFsaWRhdGVOdW1iZXIodmFsdWUsIHR5cGUpXG4gICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfT1VUX09GX1JBTkdFKHR5cGUgfHwgJ29mZnNldCcsICdhbiBpbnRlZ2VyJywgdmFsdWUpXG4gIH1cblxuICBpZiAobGVuZ3RoIDwgMCkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTKClcbiAgfVxuXG4gIHRocm93IG5ldyBlcnJvcnMuRVJSX09VVF9PRl9SQU5HRSh0eXBlIHx8ICdvZmZzZXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYD49ICR7dHlwZSA/IDEgOiAwfSBhbmQgPD0gJHtsZW5ndGh9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlKVxufVxuXG4vLyBIRUxQRVIgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09XG5cbmNvbnN0IElOVkFMSURfQkFTRTY0X1JFID0gL1teKy8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgdGFrZXMgZXF1YWwgc2lnbnMgYXMgZW5kIG9mIHRoZSBCYXNlNjQgZW5jb2RpbmdcbiAgc3RyID0gc3RyLnNwbGl0KCc9JylbMF1cbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0ci50cmltKCkucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICBsZXQgY29kZVBvaW50XG4gIGNvbnN0IGxlbmd0aCA9IHN0cmluZy5sZW5ndGhcbiAgbGV0IGxlYWRTdXJyb2dhdGUgPSBudWxsXG4gIGNvbnN0IGJ5dGVzID0gW11cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIC8vIGlzIHN1cnJvZ2F0ZSBjb21wb25lbnRcbiAgICBpZiAoY29kZVBvaW50ID4gMHhEN0ZGICYmIGNvZGVQb2ludCA8IDB4RTAwMCkge1xuICAgICAgLy8gbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICAvLyBubyBsZWFkIHlldFxuICAgICAgICBpZiAoY29kZVBvaW50ID4gMHhEQkZGKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB0cmFpbFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkge1xuICAgICAgICAgIC8vIHVucGFpcmVkIGxlYWRcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWQgbGVhZFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMiBsZWFkcyBpbiBhIHJvd1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDB4REMwMCkge1xuICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyB2YWxpZCBzdXJyb2dhdGUgcGFpclxuICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSAweEQ4MDAgPDwgMTAgfCBjb2RlUG9pbnQgLSAweERDMDApICsgMHgxMDAwMFxuICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgLy8gdmFsaWQgYm1wIGNoYXIsIGJ1dCBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgfVxuXG4gICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcblxuICAgIC8vIGVuY29kZSB1dGY4XG4gICAgaWYgKGNvZGVQb2ludCA8IDB4ODApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDgwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2IHwgMHhDMCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyB8IDB4RTAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDEyIHwgMHhGMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2RlIHBvaW50JylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlUb0J5dGVzIChzdHIpIHtcbiAgY29uc3QgYnl0ZUFycmF5ID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICBsZXQgYywgaGksIGxvXG4gIGNvbnN0IGJ5dGVBcnJheSA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG5cbiAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoaSA9IGMgPj4gOFxuICAgIGxvID0gYyAlIDI1NlxuICAgIGJ5dGVBcnJheS5wdXNoKGxvKVxuICAgIGJ5dGVBcnJheS5wdXNoKGhpKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0J5dGVzIChzdHIpIHtcbiAgcmV0dXJuIGJhc2U2NC50b0J5dGVBcnJheShiYXNlNjRjbGVhbihzdHIpKVxufVxuXG5mdW5jdGlvbiBibGl0QnVmZmVyIChzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgbGV0IGlcbiAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKSBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG5cbi8vIEFycmF5QnVmZmVyIG9yIFVpbnQ4QXJyYXkgb2JqZWN0cyBmcm9tIG90aGVyIGNvbnRleHRzIChpLmUuIGlmcmFtZXMpIGRvIG5vdCBwYXNzXG4vLyB0aGUgYGluc3RhbmNlb2ZgIGNoZWNrIGJ1dCB0aGV5IHNob3VsZCBiZSB0cmVhdGVkIGFzIG9mIHRoYXQgdHlwZS5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzE2NlxuZnVuY3Rpb24gaXNJbnN0YW5jZSAob2JqLCB0eXBlKSB7XG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiB0eXBlIHx8XG4gICAgKG9iaiAhPSBudWxsICYmIG9iai5jb25zdHJ1Y3RvciAhPSBudWxsICYmIG9iai5jb25zdHJ1Y3Rvci5uYW1lICE9IG51bGwgJiZcbiAgICAgIG9iai5jb25zdHJ1Y3Rvci5uYW1lID09PSB0eXBlLm5hbWUpXG59XG5mdW5jdGlvbiBudW1iZXJJc05hTiAob2JqKSB7XG4gIC8vIEZvciBJRTExIHN1cHBvcnRcbiAgcmV0dXJuIG9iaiAhPT0gb2JqIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG59XG5cbi8vIENyZWF0ZSBsb29rdXAgdGFibGUgZm9yIGB0b1N0cmluZygnaGV4JylgXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8yMTlcbmNvbnN0IGhleFNsaWNlTG9va3VwVGFibGUgPSAoZnVuY3Rpb24gKCkge1xuICBjb25zdCBhbHBoYWJldCA9ICcwMTIzNDU2Nzg5YWJjZGVmJ1xuICBjb25zdCB0YWJsZSA9IG5ldyBBcnJheSgyNTYpXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgIGNvbnN0IGkxNiA9IGkgKiAxNlxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgdGFibGVbaTE2ICsgal0gPSBhbHBoYWJldFtpXSArIGFscGhhYmV0W2pdXG4gICAgfVxuICB9XG4gIHJldHVybiB0YWJsZVxufSkoKVxuXG4vLyBSZXR1cm4gbm90IGZ1bmN0aW9uIHdpdGggRXJyb3IgaWYgQmlnSW50IG5vdCBzdXBwb3J0ZWRcbmZ1bmN0aW9uIGRlZmluZUJpZ0ludE1ldGhvZCAoZm4pIHtcbiAgcmV0dXJuIHR5cGVvZiBCaWdJbnQgPT09ICd1bmRlZmluZWQnID8gQnVmZmVyQmlnSW50Tm90RGVmaW5lZCA6IGZuXG59XG5cbmZ1bmN0aW9uIEJ1ZmZlckJpZ0ludE5vdERlZmluZWQgKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ0JpZ0ludCBub3Qgc3VwcG9ydGVkJylcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHhzLCBmbikge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB4ID0gZm4oeHNbaV0sIGkpO1xuICAgICAgICBpZiAoaXNBcnJheSh4KSkgcmVzLnB1c2guYXBwbHkocmVzLCB4KTtcbiAgICAgICAgZWxzZSByZXMucHVzaCh4KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHhzKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTtcblxuICAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICAgIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2YgaXRlbVs1XSAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIik7XG4gICAgICB9XG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGNvbnRlbnQgKz0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgfTtcblxuICAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuICBsaXN0LmkgPSBmdW5jdGlvbiBpKG1vZHVsZXMsIG1lZGlhLCBkZWR1cGUsIHN1cHBvcnRzLCBsYXllcikge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgdW5kZWZpbmVkXV07XG4gICAgfVxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHZhciBpZCA9IHRoaXNba11bMF07XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBtb2R1bGVzLmxlbmd0aDsgX2srKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfa10pO1xuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBsYXllciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1bNV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChtZWRpYSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3VwcG9ydHMpIHtcbiAgICAgICAgaWYgKCFpdGVtWzRdKSB7XG4gICAgICAgICAgaXRlbVs0XSA9IFwiXCIuY29uY2F0KHN1cHBvcnRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNF0gPSBzdXBwb3J0cztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGxpc3Q7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gIHZhciBjb250ZW50ID0gaXRlbVsxXTtcbiAgdmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgcmV0dXJuIFtjb250ZW50XS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHJldHVybiBbY29udGVudF0uam9pbihcIlxcblwiKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksZXhwb3J0cy5wcm9taXNpZnk9cHJvbWlzaWZ5O3ZhciBjdXN0b21Bcmd1bWVudHNUb2tlbj1cIl9fRVM2LVBST01JU0lGWS0tQ1VTVE9NLUFSR1VNRU5UU19fXCI7ZnVuY3Rpb24gcHJvbWlzaWZ5KGEpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IHRvIHByb21pc2lmeSBtdXN0IGJlIGEgZnVuY3Rpb25cIik7dmFyIGI9YVtjdXN0b21Bcmd1bWVudHNUb2tlbl0sYz1wcm9taXNpZnkuUHJvbWlzZXx8UHJvbWlzZTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBjKXRocm93IG5ldyBFcnJvcihcIk5vIFByb21pc2UgaW1wbGVtZW50YXRpb24gZm91bmQ7IGRvIHlvdSBuZWVkIGEgcG9seWZpbGw/XCIpO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZD10aGlzLGU9YXJndW1lbnRzLmxlbmd0aCxmPUFycmF5KGUpLGc9MDtnPGU7ZysrKWZbZ109YXJndW1lbnRzW2ddO3JldHVybiBuZXcgYyhmdW5jdGlvbihjLGUpe2YucHVzaChmdW5jdGlvbihhKXtpZihhKXJldHVybiBlKGEpO2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGY9QXJyYXkoMTxkP2QtMTowKSxnPTE7ZzxkO2crKylmW2ctMV09YXJndW1lbnRzW2ddO2lmKDE9PT1mLmxlbmd0aHx8IWIpcmV0dXJuIGMoZlswXSk7dmFyIGg9e307Zi5mb3JFYWNoKGZ1bmN0aW9uKGEsYyl7dmFyIGQ9YltjXTtkJiYoaFtkXT1hKX0pLGMoaCl9KSxhLmFwcGx5KGQsZil9KX19cHJvbWlzaWZ5LmFyZ3VtZW50TmFtZXM9XCJfX0VTNi1QUk9NSVNJRlktLUNVU1RPTS1BUkdVTUVOVFNfX1wiLHByb21pc2lmeS5Qcm9taXNlPXZvaWQgMDtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gZG8gbm90IGVkaXQgLmpzIGZpbGVzIGRpcmVjdGx5IC0gZWRpdCBzcmMvaW5kZXguanN0XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGVxdWFsKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuXG4gIGlmIChhICYmIGIgJiYgdHlwZW9mIGEgPT0gJ29iamVjdCcgJiYgdHlwZW9mIGIgPT0gJ29iamVjdCcpIHtcbiAgICBpZiAoYS5jb25zdHJ1Y3RvciAhPT0gYi5jb25zdHJ1Y3RvcikgcmV0dXJuIGZhbHNlO1xuXG4gICAgdmFyIGxlbmd0aCwgaSwga2V5cztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSAhPT0gMDspXG4gICAgICAgIGlmICghZXF1YWwoYVtpXSwgYltpXSkpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuXG5cbiAgICBpZiAoYS5jb25zdHJ1Y3RvciA9PT0gUmVnRXhwKSByZXR1cm4gYS5zb3VyY2UgPT09IGIuc291cmNlICYmIGEuZmxhZ3MgPT09IGIuZmxhZ3M7XG4gICAgaWYgKGEudmFsdWVPZiAhPT0gT2JqZWN0LnByb3RvdHlwZS52YWx1ZU9mKSByZXR1cm4gYS52YWx1ZU9mKCkgPT09IGIudmFsdWVPZigpO1xuICAgIGlmIChhLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKSByZXR1cm4gYS50b1N0cmluZygpID09PSBiLnRvU3RyaW5nKCk7XG5cbiAgICBrZXlzID0gT2JqZWN0LmtleXMoYSk7XG4gICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgaWYgKGxlbmd0aCAhPT0gT2JqZWN0LmtleXMoYikubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSAhPT0gMDspXG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBrZXlzW2ldKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKCFlcXVhbChhW2tleV0sIGJba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIHRydWUgaWYgYm90aCBOYU4sIGZhbHNlIG90aGVyd2lzZVxuICByZXR1cm4gYSE9PWEgJiYgYiE9PWI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkYXRhLCBvcHRzKSB7XG4gICAgaWYgKCFvcHRzKSBvcHRzID0ge307XG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSBvcHRzID0geyBjbXA6IG9wdHMgfTtcbiAgICB2YXIgY3ljbGVzID0gKHR5cGVvZiBvcHRzLmN5Y2xlcyA9PT0gJ2Jvb2xlYW4nKSA/IG9wdHMuY3ljbGVzIDogZmFsc2U7XG5cbiAgICB2YXIgY21wID0gb3B0cy5jbXAgJiYgKGZ1bmN0aW9uIChmKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFvYmogPSB7IGtleTogYSwgdmFsdWU6IG5vZGVbYV0gfTtcbiAgICAgICAgICAgICAgICB2YXIgYm9iaiA9IHsga2V5OiBiLCB2YWx1ZTogbm9kZVtiXSB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBmKGFvYmosIGJvYmopO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9KShvcHRzLmNtcCk7XG5cbiAgICB2YXIgc2VlbiA9IFtdO1xuICAgIHJldHVybiAoZnVuY3Rpb24gc3RyaW5naWZ5IChub2RlKSB7XG4gICAgICAgIGlmIChub2RlICYmIG5vZGUudG9KU09OICYmIHR5cGVvZiBub2RlLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUudG9KU09OKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZSA9PSAnbnVtYmVyJykgcmV0dXJuIGlzRmluaXRlKG5vZGUpID8gJycgKyBub2RlIDogJ251bGwnO1xuICAgICAgICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSByZXR1cm4gSlNPTi5zdHJpbmdpZnkobm9kZSk7XG5cbiAgICAgICAgdmFyIGksIG91dDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICAgICAgICAgIG91dCA9ICdbJztcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkpIG91dCArPSAnLCc7XG4gICAgICAgICAgICAgICAgb3V0ICs9IHN0cmluZ2lmeShub2RlW2ldKSB8fCAnbnVsbCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0ICsgJ10nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGUgPT09IG51bGwpIHJldHVybiAnbnVsbCc7XG5cbiAgICAgICAgaWYgKHNlZW4uaW5kZXhPZihub2RlKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIGlmIChjeWNsZXMpIHJldHVybiBKU09OLnN0cmluZ2lmeSgnX19jeWNsZV9fJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDb252ZXJ0aW5nIGNpcmN1bGFyIHN0cnVjdHVyZSB0byBKU09OJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2VlbkluZGV4ID0gc2Vlbi5wdXNoKG5vZGUpIC0gMTtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhub2RlKS5zb3J0KGNtcCAmJiBjbXAobm9kZSkpO1xuICAgICAgICBvdXQgPSAnJztcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gc3RyaW5naWZ5KG5vZGVba2V5XSk7XG5cbiAgICAgICAgICAgIGlmICghdmFsdWUpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKG91dCkgb3V0ICs9ICcsJztcbiAgICAgICAgICAgIG91dCArPSBKU09OLnN0cmluZ2lmeShrZXkpICsgJzonICsgdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgc2Vlbi5zcGxpY2Uoc2VlbkluZGV4LCAxKTtcbiAgICAgICAgcmV0dXJuICd7JyArIG91dCArICd9JztcbiAgICB9KShkYXRhKTtcbn07XG4iLCIvKmdsb2JhbCBzZXRJbW1lZGlhdGU6IGZhbHNlLCBzZXRUaW1lb3V0OiBmYWxzZSwgY29uc29sZTogZmFsc2UgKi9cblxuLyoqXG4gKiBhc3luYy5qcyBzaGltLCBiYXNlZCBvbiBodHRwczovL3Jhdy5naXRodWIuY29tL2Nhb2xhbi9hc3luYy9tYXN0ZXIvbGliL2FzeW5jLmpzIEZlYiAxOCwgMjAxNFxuICogVXNlZCB1bmRlciBNSVQgLSBodHRwczovL2dpdGh1Yi5jb20vY2FvbGFuL2FzeW5jL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGFzeW5jID0ge307XG5cbiAgICAvLyBhc3luYy5qcyBmdW5jdGlvbnMgdXNlZCBpbiBGaWxlclxuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhKHByb2Nlc3MubmV4dFRpY2spKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3luYy5uZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gYXN5bmMubmV4dFRpY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLmVhY2hTZXJpZXMgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgdmFyIGl0ZXJhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbY29tcGxldGVkXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgaXRlcmF0ZSgpO1xuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaFNlcmllcyA9IGFzeW5jLmVhY2hTZXJpZXM7XG5cbiAgICAvLyBBTUQgLyBSZXF1aXJlSlNcbiAgICBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIE5vZGUuanNcbiAgICBlbHNlIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuICAgIH1cbiAgICAvLyBpbmNsdWRlZCBkaXJlY3RseSB2aWEgPHNjcmlwdD4gdGFnXG4gICAgZWxzZSB7XG4gICAgICAgIHJvb3QuYXN5bmMgPSBhc3luYztcbiAgICB9XG5cbn0oKSk7XG4iLCIvLyBCYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vZGl5L2ludGVyY29tLmpzL2Jsb2IvbWFzdGVyL2xpYi9ldmVudHMuanNcbi8vIENvcHlyaWdodCAyMDEyIERJWSBDbyBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjBcbi8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5mdW5jdGlvbiByZW1vdmVJdGVtKGl0ZW0sIGFycmF5KSB7XG4gIGZvciAodmFyIGkgPSBhcnJheS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChhcnJheVtpXSA9PT0gaXRlbSkge1xuICAgICAgYXJyYXkuc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbnZhciBFdmVudEVtaXR0ZXIgPSBmdW5jdGlvbigpIHt9O1xuXG5FdmVudEVtaXR0ZXIuY3JlYXRlSW50ZXJmYWNlID0gZnVuY3Rpb24oc3BhY2UpIHtcbiAgdmFyIG1ldGhvZHMgPSB7fTtcblxuICBtZXRob2RzLm9uID0gZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodHlwZW9mIHRoaXNbc3BhY2VdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpc1tzcGFjZV0gPSB7fTtcbiAgICB9XG4gICAgaWYgKCF0aGlzW3NwYWNlXS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgdGhpc1tzcGFjZV1bbmFtZV0gPSBbXTtcbiAgICB9XG4gICAgdGhpc1tzcGFjZV1bbmFtZV0ucHVzaChmbik7XG4gIH07XG5cbiAgbWV0aG9kcy5vZmYgPSBmdW5jdGlvbihuYW1lLCBmbikge1xuICAgIGlmICh0eXBlb2YgdGhpc1tzcGFjZV0gPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgaWYgKHRoaXNbc3BhY2VdLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICByZW1vdmVJdGVtKGZuLCB0aGlzW3NwYWNlXVtuYW1lXSk7XG4gICAgfVxuICB9O1xuXG4gIG1ldGhvZHMudHJpZ2dlciA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBpZiAodHlwZW9mIHRoaXNbc3BhY2VdICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzW3NwYWNlXS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzW3NwYWNlXVtuYW1lXS5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzW3NwYWNlXVtuYW1lXVtpXS5hcHBseSh0aGlzW3NwYWNlXVtuYW1lXVtpXSwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIG1ldGhvZHMucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24obmFtZSkge1xuICAgIGlmICh0eXBlb2YgdGhpc1tzcGFjZV0gPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHNlbGZbc3BhY2VdW25hbWVdLmZvckVhY2goZnVuY3Rpb24oZm4pIHtcbiAgICAgIHNlbGYub2ZmKG5hbWUsIGZuKTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gbWV0aG9kcztcbn07XG5cbnZhciBwdnQgPSBFdmVudEVtaXR0ZXIuY3JlYXRlSW50ZXJmYWNlKCdfaGFuZGxlcnMnKTtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX29uID0gcHZ0Lm9uO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fb2ZmID0gcHZ0Lm9mZjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX3RyaWdnZXIgPSBwdnQudHJpZ2dlcjtcblxudmFyIHB1YiA9IEV2ZW50RW1pdHRlci5jcmVhdGVJbnRlcmZhY2UoJ2hhbmRsZXJzJyk7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24oKSB7XG4gIHB1Yi5vbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICBBcnJheS5wcm90b3R5cGUudW5zaGlmdC5jYWxsKGFyZ3VtZW50cywgJ29uJyk7XG4gIHRoaXMuX3RyaWdnZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IHB1Yi5vZmY7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnRyaWdnZXIgPSBwdWIudHJpZ2dlcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gcHViLnJlbW92ZUFsbExpc3RlbmVycztcblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG4iLCIvLyBCYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vZGl5L2ludGVyY29tLmpzL2Jsb2IvbWFzdGVyL2xpYi9pbnRlcmNvbS5qc1xuLy8gQ29weXJpZ2h0IDIwMTIgRElZIENvIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMFxuLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCcuL2V2ZW50ZW1pdHRlci5qcycpO1xudmFyIGd1aWQgPSByZXF1aXJlKCcuLi9zcmMvc2hhcmVkLmpzJykuZ3VpZDtcblxuZnVuY3Rpb24gdGhyb3R0bGUoZGVsYXksIGZuKSB7XG4gIHZhciBsYXN0ID0gMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmIChub3cgLSBsYXN0ID4gZGVsYXkpIHtcbiAgICAgIGxhc3QgPSBub3c7XG4gICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZXh0ZW5kKGEsIGIpIHtcbiAgaWYgKHR5cGVvZiBhID09PSAndW5kZWZpbmVkJyB8fCAhYSkgeyBhID0ge307IH1cbiAgaWYgKHR5cGVvZiBiID09PSAnb2JqZWN0Jykge1xuICAgIGZvciAodmFyIGtleSBpbiBiKSB7XG4gICAgICBpZiAoYi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGFba2V5XSA9IGJba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbnZhciBsb2NhbFN0b3JhZ2UgPSAoZnVuY3Rpb24od2luZG93KSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fFxuICAgICAgdHlwZW9mIHdpbmRvdy5sb2NhbFN0b3JhZ2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdldEl0ZW0gOiBmdW5jdGlvbigpIHt9LFxuICAgICAgc2V0SXRlbSA6IGZ1bmN0aW9uKCkge30sXG4gICAgICByZW1vdmVJdGVtIDogZnVuY3Rpb24oKSB7fVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2U7XG59KGdsb2JhbCkpO1xuXG5mdW5jdGlvbiBJbnRlcmNvbSgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcblxuICB0aGlzLm9yaWdpbiAgICAgICAgID0gZ3VpZCgpO1xuICB0aGlzLmxhc3RNZXNzYWdlICAgID0gbm93O1xuICB0aGlzLnJlY2VpdmVkSURzICAgID0ge307XG4gIHRoaXMucHJldmlvdXNWYWx1ZXMgPSB7fTtcblxuICB2YXIgc3RvcmFnZUhhbmRsZXIgPSBmdW5jdGlvbigpIHtcbiAgICBzZWxmLl9vblN0b3JhZ2VFdmVudC5hcHBseShzZWxmLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIC8vIElmIHdlJ3JlIGluIG5vZGUuanMsIHNraXAgZXZlbnQgcmVnaXN0cmF0aW9uXG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGRvY3VtZW50LmF0dGFjaEV2ZW50KSB7XG4gICAgZG9jdW1lbnQuYXR0YWNoRXZlbnQoJ29uc3RvcmFnZScsIHN0b3JhZ2VIYW5kbGVyKTtcbiAgfSBlbHNlIHtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignc3RvcmFnZScsIHN0b3JhZ2VIYW5kbGVyLCBmYWxzZSk7XG4gIH1cbn1cblxuSW50ZXJjb20ucHJvdG90eXBlLl90cmFuc2FjdGlvbiA9IGZ1bmN0aW9uKGZuKSB7XG4gIHZhciBUSU1FT1VUICAgPSAxMDAwO1xuICB2YXIgV0FJVCAgICAgID0gMjA7XG4gIHZhciBzZWxmICAgICAgPSB0aGlzO1xuICB2YXIgZXhlY3V0ZWQgID0gZmFsc2U7XG4gIHZhciBsaXN0ZW5pbmcgPSBmYWxzZTtcbiAgdmFyIHdhaXRUaW1lciA9IG51bGw7XG5cbiAgZnVuY3Rpb24gbG9jaygpIHtcbiAgICBpZiAoZXhlY3V0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcbiAgICB2YXIgYWN0aXZlTG9jayA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKElOREVYX0xPQ0spfDA7XG4gICAgaWYgKGFjdGl2ZUxvY2sgJiYgbm93IC0gYWN0aXZlTG9jayA8IFRJTUVPVVQpIHtcbiAgICAgIGlmICghbGlzdGVuaW5nKSB7XG4gICAgICAgIHNlbGYuX29uKCdzdG9yYWdlJywgbG9jayk7XG4gICAgICAgIGxpc3RlbmluZyA9IHRydWU7XG4gICAgICB9XG4gICAgICB3YWl0VGltZXIgPSBzZXRUaW1lb3V0KGxvY2ssIFdBSVQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBleGVjdXRlZCA9IHRydWU7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oSU5ERVhfTE9DSywgbm93KTtcblxuICAgIGZuKCk7XG4gICAgdW5sb2NrKCk7XG4gIH1cblxuICBmdW5jdGlvbiB1bmxvY2soKSB7XG4gICAgaWYgKGxpc3RlbmluZykge1xuICAgICAgc2VsZi5fb2ZmKCdzdG9yYWdlJywgbG9jayk7XG4gICAgfVxuICAgIGlmICh3YWl0VGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh3YWl0VGltZXIpO1xuICAgIH1cbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShJTkRFWF9MT0NLKTtcbiAgfVxuXG4gIGxvY2soKTtcbn07XG5cbkludGVyY29tLnByb3RvdHlwZS5fY2xlYW51cF9lbWl0ID0gdGhyb3R0bGUoMTAwLCBmdW5jdGlvbigpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHNlbGYuX3RyYW5zYWN0aW9uKGZ1bmN0aW9uKCkge1xuICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgIHZhciB0aHJlc2hvbGQgPSBub3cgLSBUSFJFU0hPTERfVFRMX0VNSVQ7XG4gICAgdmFyIGNoYW5nZWQgPSAwO1xuICAgIHZhciBtZXNzYWdlcztcblxuICAgIHRyeSB7XG4gICAgICBtZXNzYWdlcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oSU5ERVhfRU1JVCkgfHwgJ1tdJyk7XG4gICAgfSBjYXRjaChlKSB7XG4gICAgICBtZXNzYWdlcyA9IFtdO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gbWVzc2FnZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChtZXNzYWdlc1tpXS50aW1lc3RhbXAgPCB0aHJlc2hvbGQpIHtcbiAgICAgICAgbWVzc2FnZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICBjaGFuZ2VkKys7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VkID4gMCkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oSU5ERVhfRU1JVCwgSlNPTi5zdHJpbmdpZnkobWVzc2FnZXMpKTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbkludGVyY29tLnByb3RvdHlwZS5fY2xlYW51cF9vbmNlID0gdGhyb3R0bGUoMTAwLCBmdW5jdGlvbigpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHNlbGYuX3RyYW5zYWN0aW9uKGZ1bmN0aW9uKCkge1xuICAgIHZhciB0aW1lc3RhbXAsIHR0bCwga2V5O1xuICAgIHZhciB0YWJsZTtcbiAgICB2YXIgbm93ICA9IERhdGUubm93KCk7XG4gICAgdmFyIGNoYW5nZWQgPSAwO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRhYmxlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShJTkRFWF9PTkNFKSB8fCAne30nKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIHRhYmxlID0ge307XG4gICAgfVxuICAgIGZvciAoa2V5IGluIHRhYmxlKSB7XG4gICAgICBpZiAoc2VsZi5fb25jZV9leHBpcmVkKGtleSwgdGFibGUpKSB7XG4gICAgICAgIGRlbGV0ZSB0YWJsZVtrZXldO1xuICAgICAgICBjaGFuZ2VkKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZWQgPiAwKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShJTkRFWF9PTkNFLCBKU09OLnN0cmluZ2lmeSh0YWJsZSkpO1xuICAgIH1cbiAgfSk7XG59KTtcblxuSW50ZXJjb20ucHJvdG90eXBlLl9vbmNlX2V4cGlyZWQgPSBmdW5jdGlvbihrZXksIHRhYmxlKSB7XG4gIGlmICghdGFibGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoIXRhYmxlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodHlwZW9mIHRhYmxlW2tleV0gIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgdHRsID0gdGFibGVba2V5XS50dGwgfHwgVEhSRVNIT0xEX1RUTF9PTkNFO1xuICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcbiAgdmFyIHRpbWVzdGFtcCA9IHRhYmxlW2tleV0udGltZXN0YW1wO1xuICByZXR1cm4gdGltZXN0YW1wIDwgbm93IC0gdHRsO1xufTtcblxuSW50ZXJjb20ucHJvdG90eXBlLl9sb2NhbFN0b3JhZ2VDaGFuZ2VkID0gZnVuY3Rpb24oZXZlbnQsIGZpZWxkKSB7XG4gIGlmIChldmVudCAmJiBldmVudC5rZXkpIHtcbiAgICByZXR1cm4gZXZlbnQua2V5ID09PSBmaWVsZDtcbiAgfVxuXG4gIHZhciBjdXJyZW50VmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShmaWVsZCk7XG4gIGlmIChjdXJyZW50VmFsdWUgPT09IHRoaXMucHJldmlvdXNWYWx1ZXNbZmllbGRdKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRoaXMucHJldmlvdXNWYWx1ZXNbZmllbGRdID0gY3VycmVudFZhbHVlO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkludGVyY29tLnByb3RvdHlwZS5fb25TdG9yYWdlRXZlbnQgPSBmdW5jdGlvbihldmVudCkge1xuICBldmVudCA9IGV2ZW50IHx8IGdsb2JhbC5ldmVudDtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGlmICh0aGlzLl9sb2NhbFN0b3JhZ2VDaGFuZ2VkKGV2ZW50LCBJTkRFWF9FTUlUKSkge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7XG4gICAgICB2YXIgZGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKElOREVYX0VNSVQpO1xuICAgICAgdmFyIG1lc3NhZ2VzO1xuXG4gICAgICB0cnkge1xuICAgICAgICBtZXNzYWdlcyA9IEpTT04ucGFyc2UoZGF0YSB8fCAnW10nKTtcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICBtZXNzYWdlcyA9IFtdO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAobWVzc2FnZXNbaV0ub3JpZ2luID09PSBzZWxmLm9yaWdpbikgY29udGludWU7XG4gICAgICAgIGlmIChtZXNzYWdlc1tpXS50aW1lc3RhbXAgPCBzZWxmLmxhc3RNZXNzYWdlKSBjb250aW51ZTtcbiAgICAgICAgaWYgKG1lc3NhZ2VzW2ldLmlkKSB7XG4gICAgICAgICAgaWYgKHNlbGYucmVjZWl2ZWRJRHMuaGFzT3duUHJvcGVydHkobWVzc2FnZXNbaV0uaWQpKSBjb250aW51ZTtcbiAgICAgICAgICBzZWxmLnJlY2VpdmVkSURzW21lc3NhZ2VzW2ldLmlkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi50cmlnZ2VyKG1lc3NhZ2VzW2ldLm5hbWUsIG1lc3NhZ2VzW2ldLnBheWxvYWQpO1xuICAgICAgfVxuICAgICAgc2VsZi5sYXN0TWVzc2FnZSA9IG5vdztcbiAgICB9KTtcbiAgfVxuXG4gIHRoaXMuX3RyaWdnZXIoJ3N0b3JhZ2UnLCBldmVudCk7XG59O1xuXG5JbnRlcmNvbS5wcm90b3R5cGUuX2VtaXQgPSBmdW5jdGlvbihuYW1lLCBtZXNzYWdlLCBpZCkge1xuICBpZCA9ICh0eXBlb2YgaWQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBpZCA9PT0gJ251bWJlcicpID8gU3RyaW5nKGlkKSA6IG51bGw7XG4gIGlmIChpZCAmJiBpZC5sZW5ndGgpIHtcbiAgICBpZiAodGhpcy5yZWNlaXZlZElEcy5oYXNPd25Qcm9wZXJ0eShpZCkpIHJldHVybjtcbiAgICB0aGlzLnJlY2VpdmVkSURzW2lkXSA9IHRydWU7XG4gIH1cblxuICB2YXIgcGFja2V0ID0ge1xuICAgIGlkICAgICAgICA6IGlkLFxuICAgIG5hbWUgICAgICA6IG5hbWUsXG4gICAgb3JpZ2luICAgIDogdGhpcy5vcmlnaW4sXG4gICAgdGltZXN0YW1wIDogRGF0ZS5ub3coKSxcbiAgICBwYXlsb2FkICAgOiBtZXNzYWdlXG4gIH07XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLl90cmFuc2FjdGlvbihmdW5jdGlvbigpIHtcbiAgICB2YXIgZGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKElOREVYX0VNSVQpIHx8ICdbXSc7XG4gICAgdmFyIGRlbGltaXRlciA9IChkYXRhID09PSAnW10nKSA/ICcnIDogJywnO1xuICAgIGRhdGEgPSBbZGF0YS5zdWJzdHJpbmcoMCwgZGF0YS5sZW5ndGggLSAxKSwgZGVsaW1pdGVyLCBKU09OLnN0cmluZ2lmeShwYWNrZXQpLCAnXSddLmpvaW4oJycpO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKElOREVYX0VNSVQsIGRhdGEpO1xuICAgIHNlbGYudHJpZ2dlcihuYW1lLCBtZXNzYWdlKTtcblxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLl9jbGVhbnVwX2VtaXQoKTtcbiAgICB9LCA1MCk7XG4gIH0pO1xufTtcblxuSW50ZXJjb20ucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbihuYW1lLCBtZXNzYWdlKSB7XG4gIHRoaXMuX2VtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgdGhpcy5fdHJpZ2dlcignZW1pdCcsIG5hbWUsIG1lc3NhZ2UpO1xufTtcblxuSW50ZXJjb20ucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbihrZXksIGZuLCB0dGwpIHtcbiAgaWYgKCFJbnRlcmNvbS5zdXBwb3J0ZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMuX3RyYW5zYWN0aW9uKGZ1bmN0aW9uKCkge1xuICAgIHZhciBkYXRhO1xuICAgIHRyeSB7XG4gICAgICBkYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShJTkRFWF9PTkNFKSB8fCAne30nKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIGRhdGEgPSB7fTtcbiAgICB9XG4gICAgaWYgKCFzZWxmLl9vbmNlX2V4cGlyZWQoa2V5LCBkYXRhKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRhdGFba2V5XSA9IHt9O1xuICAgIGRhdGFba2V5XS50aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgIGlmICh0eXBlb2YgdHRsID09PSAnbnVtYmVyJykge1xuICAgICAgZGF0YVtrZXldLnR0bCA9IHR0bCAqIDEwMDA7XG4gICAgfVxuXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oSU5ERVhfT05DRSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgIGZuKCk7XG5cbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5fY2xlYW51cF9vbmNlKCk7XG4gICAgfSwgNTApO1xuICB9KTtcbn07XG5cbmV4dGVuZChJbnRlcmNvbS5wcm90b3R5cGUsIEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuXG5JbnRlcmNvbS5zdXBwb3J0ZWQgPSAodHlwZW9mIGxvY2FsU3RvcmFnZSAhPT0gJ3VuZGVmaW5lZCcpO1xuXG52YXIgSU5ERVhfRU1JVCA9ICdpbnRlcmNvbSc7XG52YXIgSU5ERVhfT05DRSA9ICdpbnRlcmNvbV9vbmNlJztcbnZhciBJTkRFWF9MT0NLID0gJ2ludGVyY29tX2xvY2snO1xuXG52YXIgVEhSRVNIT0xEX1RUTF9FTUlUID0gNTAwMDA7XG52YXIgVEhSRVNIT0xEX1RUTF9PTkNFID0gMTAwMCAqIDM2MDA7XG5cbkludGVyY29tLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcbiAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oSU5ERVhfTE9DSyk7XG4gIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKElOREVYX0VNSVQpO1xuICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShJTkRFWF9PTkNFKTtcbn07XG5cbkludGVyY29tLmdldEluc3RhbmNlID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgaW50ZXJjb207XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpZiAoIWludGVyY29tKSB7XG4gICAgICBpbnRlcmNvbSA9IG5ldyBJbnRlcmNvbSgpO1xuICAgIH1cbiAgICByZXR1cm4gaW50ZXJjb207XG4gIH07XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEludGVyY29tO1xuIiwiY29uc3QgeyBGaWxlU3lzdGVtIH0gPSByZXF1aXJlKCcuLi9zcmMvaW5kZXgnKTtcblxubGV0IFByb3ZpZGVyO1xudHJ5IHtcbiAgUHJvdmlkZXIgPSByZXF1aXJlKCdmc1Byb3ZpZGVyJyk7XG59XG5jYXRjaCAoZXJyKSB7XG4gIFByb3ZpZGVyID0gcmVxdWlyZSgnLi9wcm92aWRlcnMvZGVmYXVsdCcpO1xufVxuXG5jb25zdCBwcm92aWRlciA9IG5ldyBQcm92aWRlcigpO1xuXG5sZXQgb25Gc1JlYWR5O1xubGV0IG9uRnNFcnJvcjtcblxubGV0IGZzUmVhZHkgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gIG9uRnNSZWFkeSA9IHJlc29sdmU7XG4gIG9uRnNFcnJvciA9IHJlamVjdDtcbn0pO1xuXG52YXIgZnNJbnN0YW5jZSA9IG5ldyBGaWxlU3lzdGVtKHsgcHJvdmlkZXIgfSwgKGVycikgPT4ge1xuICBpZiAoZXJyKSB7XG4gICAgb25Gc0Vycm9yKGVycik7XG4gIH0gZWxzZSB7XG4gICAgb25Gc1JlYWR5KHRydWUpO1xuICB9XG59KTtcblxuZnVuY3Rpb24gcHJveHlIYXNQcm9wKHRhcmdldCwgcHJvcCkge1xuICByZXR1cm4gcHJvcCBpbiB0YXJnZXQ7XG59XG5cbmNvbnN0IGZzUHJvbWlzZXMgPSBuZXcgUHJveHkoZnNJbnN0YW5jZS5wcm9taXNlcywge1xuICBnZXQodGFyZ2V0LCBwcm9wKSB7XG4gICAgaWYgKCFwcm94eUhhc1Byb3AodGFyZ2V0LCBwcm9wKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBhc3luYyAoLi4uYXJncykgPT4ge1xuICAgICAgYXdhaXQgZnNSZWFkeTtcbiAgICAgIHJldHVybiBhd2FpdCB0YXJnZXRbcHJvcF0oLi4uYXJncyk7XG4gICAgfTtcbiAgfSxcbn0pO1xuXG5jb25zdCBmcyA9IG5ldyBQcm94eShmc0luc3RhbmNlLCB7XG4gIGdldCh0YXJnZXQsIHByb3ApIHtcbiAgICBpZiAoIXByb3h5SGFzUHJvcCh0YXJnZXQsIHByb3ApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3AgPT09ICdwcm9taXNlcycpIHtcbiAgICAgIHJldHVybiBmc1Byb21pc2VzO1xuICAgIH1cblxuICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgZnNSZWFkeTtcbiAgICAgICAgdGFyZ2V0W3Byb3BdKC4uLmFyZ3MpO1xuICAgICAgfSkoKTtcbiAgICB9O1xuICB9LFxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnM7XG4iLCJjb25zdCB7IHBhdGggfSA9IHJlcXVpcmUoJy4uL3NyYy9pbmRleCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGg7XG4iLCJjb25zdCB7IERlZmF1bHQgfSA9IHJlcXVpcmUoJy4uLy4uL3NyYy9wcm92aWRlcnMvaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gRGVmYXVsdDsiLCJ2YXIgT19SRUFEID0gJ1JFQUQnO1xudmFyIE9fV1JJVEUgPSAnV1JJVEUnO1xudmFyIE9fQ1JFQVRFID0gJ0NSRUFURSc7XG52YXIgT19FWENMVVNJVkUgPSAnRVhDTFVTSVZFJztcbnZhciBPX1RSVU5DQVRFID0gJ1RSVU5DQVRFJztcbnZhciBPX0FQUEVORCA9ICdBUFBFTkQnO1xudmFyIFhBVFRSX0NSRUFURSA9ICdDUkVBVEUnO1xudmFyIFhBVFRSX1JFUExBQ0UgPSAnUkVQTEFDRSc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBGSUxFX1NZU1RFTV9OQU1FOiAnbG9jYWwnLFxuXG4gIEZJTEVfU1RPUkVfTkFNRTogJ2ZpbGVzJyxcblxuICBJREJfUk86ICdyZWFkb25seScsXG4gIElEQl9SVzogJ3JlYWR3cml0ZScsXG5cbiAgV1NRTF9WRVJTSU9OOiAnMScsXG4gIFdTUUxfU0laRTogNSAqIDEwMjQgKiAxMDI0LFxuICBXU1FMX0RFU0M6ICdGaWxlU3lzdGVtIFN0b3JhZ2UnLFxuXG4gIE5PREVfVFlQRV9GSUxFOiAnRklMRScsXG4gIE5PREVfVFlQRV9ESVJFQ1RPUlk6ICdESVJFQ1RPUlknLFxuICBOT0RFX1RZUEVfU1lNQk9MSUNfTElOSzogJ1NZTUxJTksnLFxuICBOT0RFX1RZUEVfTUVUQTogJ01FVEEnLFxuXG5cbiAgREVGQVVMVF9ESVJfUEVSTUlTU0lPTlM6IDB4MUVELCAvLyA3NTVcbiAgREVGQVVMVF9GSUxFX1BFUk1JU1NJT05TOiAweDFBNCwgLy8gNjQ0XG4gIEZVTExfUkVBRF9XUklURV9FWEVDX1BFUk1JU1NJT05TOiAweDFGRiwgLy8gNzc3XG4gIFJFQURfV1JJVEVfUEVSTUlTU0lPTlM6IDB4MUI2LCAvLy8gNjY2XG4gIFxuICBTWU1MT09QX01BWDogMTAsXG5cbiAgQklOQVJZX01JTUVfVFlQRTogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsXG4gIEpTT05fTUlNRV9UWVBFOiAnYXBwbGljYXRpb24vanNvbicsXG5cbiAgUk9PVF9ESVJFQ1RPUllfTkFNRTogJy8nLCAvLyBiYXNlbmFtZShub3JtYWxpemUocGF0aCkpXG5cbiAgLy8gRlMgTW91bnQgRmxhZ3NcbiAgRlNfRk9STUFUOiAnRk9STUFUJyxcbiAgRlNfTk9DVElNRTogJ05PQ1RJTUUnLFxuICBGU19OT01USU1FOiAnTk9NVElNRScsXG4gIEZTX05PRFVQRUlEQ0hFQ0s6ICdGU19OT0RVUEVJRENIRUNLJyxcblxuICAvLyBGUyBGaWxlIE9wZW4gRmxhZ3NcbiAgT19SRUFEOiBPX1JFQUQsXG4gIE9fV1JJVEU6IE9fV1JJVEUsXG4gIE9fQ1JFQVRFOiBPX0NSRUFURSxcbiAgT19FWENMVVNJVkU6IE9fRVhDTFVTSVZFLFxuICBPX1RSVU5DQVRFOiBPX1RSVU5DQVRFLFxuICBPX0FQUEVORDogT19BUFBFTkQsXG5cbiAgT19GTEFHUzoge1xuICAgICdyJzogW09fUkVBRF0sXG4gICAgJ3IrJzogW09fUkVBRCwgT19XUklURV0sXG4gICAgJ3cnOiBbT19XUklURSwgT19DUkVBVEUsIE9fVFJVTkNBVEVdLFxuICAgICd3Kyc6IFtPX1dSSVRFLCBPX1JFQUQsIE9fQ1JFQVRFLCBPX1RSVU5DQVRFXSxcbiAgICAnd3gnOiBbT19XUklURSwgT19DUkVBVEUsIE9fRVhDTFVTSVZFLCBPX1RSVU5DQVRFXSxcbiAgICAnd3grJzogW09fV1JJVEUsIE9fUkVBRCwgT19DUkVBVEUsIE9fRVhDTFVTSVZFLCBPX1RSVU5DQVRFXSxcbiAgICAnYSc6IFtPX1dSSVRFLCBPX0NSRUFURSwgT19BUFBFTkRdLFxuICAgICdhKyc6IFtPX1dSSVRFLCBPX1JFQUQsIE9fQ1JFQVRFLCBPX0FQUEVORF0sXG4gICAgJ2F4JzogW09fV1JJVEUsIE9fQ1JFQVRFLCBPX0VYQ0xVU0lWRSwgT19BUFBFTkRdLFxuICAgICdheCsnOiBbT19XUklURSwgT19SRUFELCBPX0NSRUFURSwgT19FWENMVVNJVkUsIE9fQVBQRU5EXVxuICB9LFxuXG4gIFhBVFRSX0NSRUFURTogWEFUVFJfQ1JFQVRFLFxuICBYQVRUUl9SRVBMQUNFOiBYQVRUUl9SRVBMQUNFLFxuXG4gIEZTX1JFQURZOiAnUkVBRFknLFxuICBGU19QRU5ESU5HOiAnUEVORElORycsXG4gIEZTX0VSUk9SOiAnRVJST1InLFxuXG4gIFNVUEVSX05PREVfSUQ6ICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnLFxuXG4gIC8vIFJlc2VydmVkIEZpbGUgRGVzY3JpcHRvcnMgZm9yIHN0cmVhbXNcbiAgU1RESU46IDAsXG4gIFNURE9VVDogMSxcbiAgU1RERVJSOiAyLFxuICBGSVJTVF9ERVNDUklQVE9SOiAzLFxuXG4gIEVOVklST05NRU5UOiB7XG4gICAgVE1QOiAnL3RtcCcsXG4gICAgUEFUSDogJydcbiAgfSxcblxuICAvLyBEdXBsaWNhdGUgTm9kZSdzIGZzLmNvbnN0YW50c1xuICBmc0NvbnN0YW50czoge1xuICAgIE9fUkRPTkxZOiAwLFxuICAgIE9fV1JPTkxZOiAxLFxuICAgIE9fUkRXUjogMixcbiAgICBTX0lGTVQ6IDYxNDQwLFxuICAgIFNfSUZSRUc6IDMyNzY4LFxuICAgIFNfSUZESVI6IDE2Mzg0LFxuICAgIFNfSUZDSFI6IDgxOTIsXG4gICAgU19JRkJMSzogMjQ1NzYsXG4gICAgU19JRklGTzogNDA5NixcbiAgICBTX0lGTE5LOiA0MDk2MCxcbiAgICBTX0lGU09DSzogNDkxNTIsXG4gICAgT19DUkVBVDogNTEyLFxuICAgIE9fRVhDTDogMjA0OCxcbiAgICBPX05PQ1RUWTogMTMxMDcyLFxuICAgIE9fVFJVTkM6IDEwMjQsXG4gICAgT19BUFBFTkQ6IDgsXG4gICAgT19ESVJFQ1RPUlk6IDEwNDg1NzYsXG4gICAgT19OT0ZPTExPVzogMjU2LFxuICAgIE9fU1lOQzogMTI4LFxuICAgIE9fRFNZTkM6IDQxOTQzMDQsXG4gICAgT19TWU1MSU5LOiAyMDk3MTUyLFxuICAgIE9fTk9OQkxPQ0s6IDQsXG4gICAgU19JUldYVTogNDQ4LFxuICAgIFNfSVJVU1I6IDI1NixcbiAgICBTX0lXVVNSOiAxMjgsXG4gICAgU19JWFVTUjogNjQsXG4gICAgU19JUldYRzogNTYsXG4gICAgU19JUkdSUDogMzIsXG4gICAgU19JV0dSUDogMTYsXG4gICAgU19JWEdSUDogOCxcbiAgICBTX0lSV1hPOiA3LFxuICAgIFNfSVJPVEg6IDQsXG4gICAgU19JV09USDogMixcbiAgICBTX0lYT1RIOiAxLFxuICAgIEZfT0s6IDAsXG4gICAgUl9PSzogNCxcbiAgICBXX09LOiAyLFxuICAgIFhfT0s6IDEsXG4gICAgVVZfRlNfQ09QWUZJTEVfRVhDTDogMSxcbiAgICBDT1BZRklMRV9FWENMOiAxXG4gIH1cbn07XG4iLCJ2YXIgTk9ERV9UWVBFX0ZJTEUgPSByZXF1aXJlKCcuL2NvbnN0YW50cy5qcycpLk5PREVfVFlQRV9GSUxFO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIERpcmVjdG9yeUVudHJ5KGlkLCB0eXBlKSB7XG4gIHRoaXMuaWQgPSBpZDtcbiAgdGhpcy50eXBlID0gdHlwZSB8fCBOT0RFX1RZUEVfRklMRTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IFN0YXRzID0gcmVxdWlyZSgnLi9zdGF0cy5qcycpO1xuXG5mdW5jdGlvbiBEaXJlbnQocGF0aCwgZmlsZU5vZGUsIGRldk5hbWUpIHtcbiAgdGhpcy5jb25zdHJ1Y3RvciA9IERpcmVudDtcbiAgU3RhdHMuY2FsbCh0aGlzLCBwYXRoLCBmaWxlTm9kZSwgZGV2TmFtZSk7XG59XG5cbkRpcmVudC5wcm90b3R5cGUgPSBTdGF0cy5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gRGlyZW50O1xuIiwidmFyIGVycm9ycyA9IHt9O1xuW1xuICAvKipcbiAgICogbm9kZS5qcyBlcnJvcnMgLSB3ZSBvbmx5IHVzZSBzb21lIG9mIHRoZXNlLCBhZGQgYXMgbmVlZGVkLlxuICAgKi9cbiAgLy8nLTE6VU5LTk9XTjp1bmtub3duIGVycm9yJyxcbiAgLy8nMDpPSzpzdWNjZXNzJyxcbiAgLy8nMTpFT0Y6ZW5kIG9mIGZpbGUnLFxuICAvLycyOkVBRERSSU5GTzpnZXRhZGRyaW5mbyBlcnJvcicsXG4gICczOkVBQ0NFUzpwZXJtaXNzaW9uIGRlbmllZCcsXG4gIC8vJzQ6RUFHQUlOOnJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlJyxcbiAgLy8nNTpFQUREUklOVVNFOmFkZHJlc3MgYWxyZWFkeSBpbiB1c2UnLFxuICAvLyc2OkVBRERSTk9UQVZBSUw6YWRkcmVzcyBub3QgYXZhaWxhYmxlJyxcbiAgLy8nNzpFQUZOT1NVUFBPUlQ6YWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCcsXG4gIC8vJzg6RUFMUkVBRFk6Y29ubmVjdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzJyxcbiAgJzk6RUJBREY6YmFkIGZpbGUgZGVzY3JpcHRvcicsXG4gICcxMDpFQlVTWTpyZXNvdXJjZSBidXN5IG9yIGxvY2tlZCcsXG4gIC8vJzExOkVDT05OQUJPUlRFRDpzb2Z0d2FyZSBjYXVzZWQgY29ubmVjdGlvbiBhYm9ydCcsXG4gIC8vJzEyOkVDT05OUkVGVVNFRDpjb25uZWN0aW9uIHJlZnVzZWQnLFxuICAvLycxMzpFQ09OTlJFU0VUOmNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlcicsXG4gIC8vJzE0OkVERVNUQUREUlJFUTpkZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkJyxcbiAgLy8nMTU6RUZBVUxUOmJhZCBhZGRyZXNzIGluIHN5c3RlbSBjYWxsIGFyZ3VtZW50JyxcbiAgLy8nMTY6RUhPU1RVTlJFQUNIOmhvc3QgaXMgdW5yZWFjaGFibGUnLFxuICAvLycxNzpFSU5UUjppbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbCcsXG4gICcxODpFSU5WQUw6aW52YWxpZCBhcmd1bWVudCcsXG4gIC8vJzE5OkVJU0NPTk46c29ja2V0IGlzIGFscmVhZHkgY29ubmVjdGVkJyxcbiAgLy8nMjA6RU1GSUxFOnRvbyBtYW55IG9wZW4gZmlsZXMnLFxuICAvLycyMTpFTVNHU0laRTptZXNzYWdlIHRvbyBsb25nJyxcbiAgLy8nMjI6RU5FVERPV046bmV0d29yayBpcyBkb3duJyxcbiAgLy8nMjM6RU5FVFVOUkVBQ0g6bmV0d29yayBpcyB1bnJlYWNoYWJsZScsXG4gIC8vJzI0OkVORklMRTpmaWxlIHRhYmxlIG92ZXJmbG93JyxcbiAgLy8nMjU6RU5PQlVGUzpubyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlJyxcbiAgLy8nMjY6RU5PTUVNOm5vdCBlbm91Z2ggbWVtb3J5JyxcbiAgJzI3OkVOT1RESVI6bm90IGEgZGlyZWN0b3J5JyxcbiAgJzI4OkVJU0RJUjppbGxlZ2FsIG9wZXJhdGlvbiBvbiBhIGRpcmVjdG9yeScsXG4gIC8vJzI5OkVOT05FVDptYWNoaW5lIGlzIG5vdCBvbiB0aGUgbmV0d29yaycsXG4gIC8vIGVycm5vIDMwIHNraXBwZWQsIGFzIHBlciBodHRwczovL2dpdGh1Yi5jb20vcnZhZ2cvbm9kZS1lcnJuby9ibG9iL21hc3Rlci9lcnJuby5qc1xuICAvLyczMTpFTk9UQ09OTjpzb2NrZXQgaXMgbm90IGNvbm5lY3RlZCcsXG4gIC8vJzMyOkVOT1RTT0NLOnNvY2tldCBvcGVyYXRpb24gb24gbm9uLXNvY2tldCcsXG4gIC8vJzMzOkVOT1RTVVA6b3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgb24gc29ja2V0JyxcbiAgJzM0OkVOT0VOVDpubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JyxcbiAgLy8nMzU6RU5PU1lTOmZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZCcsXG4gIC8vJzM2OkVQSVBFOmJyb2tlbiBwaXBlJyxcbiAgLy8nMzc6RVBST1RPOnByb3RvY29sIGVycm9yJyxcbiAgLy8nMzg6RVBST1RPTk9TVVBQT1JUOnByb3RvY29sIG5vdCBzdXBwb3J0ZWQnLFxuICAvLyczOTpFUFJPVE9UWVBFOnByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldCcsXG4gIC8vJzQwOkVUSU1FRE9VVDpjb25uZWN0aW9uIHRpbWVkIG91dCcsXG4gIC8vJzQxOkVDSEFSU0VUOmludmFsaWQgVW5pY29kZSBjaGFyYWN0ZXInLFxuICAvLyc0MjpFQUlGQU1OT1NVUFBPUlQ6YWRkcmVzcyBmYW1pbHkgZm9yIGhvc3RuYW1lIG5vdCBzdXBwb3J0ZWQnLFxuICAvLyBlcnJubyA0MyBza2lwcGVkLCBhcyBwZXIgaHR0cHM6Ly9naXRodWIuY29tL3J2YWdnL25vZGUtZXJybm8vYmxvYi9tYXN0ZXIvZXJybm8uanNcbiAgLy8nNDQ6RUFJU0VSVklDRTpzZXJ2bmFtZSBub3Qgc3VwcG9ydGVkIGZvciBhaV9zb2NrdHlwZScsXG4gIC8vJzQ1OkVBSVNPQ0tUWVBFOmFpX3NvY2t0eXBlIG5vdCBzdXBwb3J0ZWQnLFxuICAvLyc0NjpFU0hVVERPV046Y2Fubm90IHNlbmQgYWZ0ZXIgdHJhbnNwb3J0IGVuZHBvaW50IHNodXRkb3duJyxcbiAgJzQ3OkVFWElTVDpmaWxlIGFscmVhZHkgZXhpc3RzJyxcbiAgLy8nNDg6RVNSQ0g6bm8gc3VjaCBwcm9jZXNzJyxcbiAgLy8nNDk6RU5BTUVUT09MT05HOm5hbWUgdG9vIGxvbmcnLFxuICAnNTA6RVBFUk06b3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQnLFxuICAnNTE6RUxPT1A6dG9vIG1hbnkgc3ltYm9saWMgbGlua3MgZW5jb3VudGVyZWQnLFxuICAvLyc1MjpFWERFVjpjcm9zcy1kZXZpY2UgbGluayBub3QgcGVybWl0dGVkJyxcbiAgJzUzOkVOT1RFTVBUWTpkaXJlY3Rvcnkgbm90IGVtcHR5JyxcbiAgLy8nNTQ6RU5PU1BDOm5vIHNwYWNlIGxlZnQgb24gZGV2aWNlJyxcbiAgJzU1OkVJTzppL28gZXJyb3InLFxuICAvLyc1NjpFUk9GUzpyZWFkLW9ubHkgZmlsZSBzeXN0ZW0nLFxuICAvLyc1NzpFTk9ERVY6bm8gc3VjaCBkZXZpY2UnLFxuICAvLyc1ODpFU1BJUEU6aW52YWxpZCBzZWVrJyxcbiAgLy8nNTk6RUNBTkNFTEVEOm9wZXJhdGlvbiBjYW5jZWxlZCcsXG5cbiAgLyoqXG4gICAqIEZpbGVyIHNwZWNpZmljIGVycm9yc1xuICAgKi9cbiAgJzEwMDA6RU5PVE1PVU5URUQ6bm90IG1vdW50ZWQnLFxuICAnMTAwMTpFRklMRVNZU1RFTUVSUk9SOm1pc3Npbmcgc3VwZXIgbm9kZSwgdXNlIFxcJ0ZPUk1BVFxcJyBmbGFnIHRvIGZvcm1hdCBmaWxlc3lzdGVtLicsXG4gICcxMDAyOkVOT0FUVFI6YXR0cmlidXRlIGRvZXMgbm90IGV4aXN0J1xuXG5dLmZvckVhY2goZnVuY3Rpb24oZSkge1xuICBlID0gZS5zcGxpdCgnOicpO1xuICB2YXIgZXJybm8gPSArZVswXTtcbiAgdmFyIGVyck5hbWUgPSBlWzFdO1xuICB2YXIgZGVmYXVsdE1lc3NhZ2UgPSBlWzJdO1xuXG4gIGZ1bmN0aW9uIEZpbGVyRXJyb3IobXNnLCBwYXRoKSB7XG4gICAgRXJyb3IuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMubmFtZSA9IGVyck5hbWU7XG4gICAgdGhpcy5jb2RlID0gZXJyTmFtZTtcbiAgICB0aGlzLmVycm5vID0gZXJybm87XG4gICAgdGhpcy5tZXNzYWdlID0gbXNnIHx8IGRlZmF1bHRNZXNzYWdlO1xuICAgIGlmKHBhdGgpIHtcbiAgICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgfVxuICAgIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKHRoaXMubWVzc2FnZSkpLnN0YWNrO1xuICB9XG4gIEZpbGVyRXJyb3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICBGaWxlckVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbGVyRXJyb3I7XG4gIEZpbGVyRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHBhdGhJbmZvID0gdGhpcy5wYXRoID8gKCcsIFxcJycgKyB0aGlzLnBhdGggKyAnXFwnJykgOiAnJztcbiAgICByZXR1cm4gdGhpcy5uYW1lICsgJzogJyArIHRoaXMubWVzc2FnZSArIHBhdGhJbmZvO1xuICB9O1xuXG4gIC8vIFdlIGV4cG9zZSB0aGUgZXJyb3IgYXMgYm90aCBFcnJvcnMuRUlOVkFMIGFuZCBFcnJvcnNbMThdXG4gIGVycm9yc1tlcnJOYW1lXSA9IGVycm9yc1tlcnJub10gPSBGaWxlckVycm9yO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZXJyb3JzO1xuIiwidmFyIFBhdGggPSByZXF1aXJlKCcuLi9wYXRoLmpzJyk7XG52YXIgbm9ybWFsaXplID0gUGF0aC5ub3JtYWxpemU7XG52YXIgZGlybmFtZSA9IFBhdGguZGlybmFtZTtcbnZhciBiYXNlbmFtZSA9IFBhdGguYmFzZW5hbWU7XG52YXIgaXNBYnNvbHV0ZVBhdGggPSBQYXRoLmlzQWJzb2x1dGU7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vc2hhcmVkLmpzJyk7XG52YXIgYXN5bmMgPSByZXF1aXJlKCcuLi8uLi9saWIvYXN5bmMuanMnKTtcblxudmFyIENvbnN0YW50cyA9IHJlcXVpcmUoJy4uL2NvbnN0YW50cy5qcycpO1xudmFyIE5PREVfVFlQRV9GSUxFID0gQ29uc3RhbnRzLk5PREVfVFlQRV9GSUxFO1xudmFyIE5PREVfVFlQRV9ESVJFQ1RPUlkgPSBDb25zdGFudHMuTk9ERV9UWVBFX0RJUkVDVE9SWTtcbnZhciBOT0RFX1RZUEVfU1lNQk9MSUNfTElOSyA9IENvbnN0YW50cy5OT0RFX1RZUEVfU1lNQk9MSUNfTElOSztcbnZhciBOT0RFX1RZUEVfTUVUQSA9IENvbnN0YW50cy5OT0RFX1RZUEVfTUVUQTtcblxudmFyIEZVTExfUkVBRF9XUklURV9FWEVDX1BFUk1JU1NJT05TID0gQ29uc3RhbnRzLkZVTExfUkVBRF9XUklURV9FWEVDX1BFUk1JU1NJT05TO1xuXG52YXIgUk9PVF9ESVJFQ1RPUllfTkFNRSA9IENvbnN0YW50cy5ST09UX0RJUkVDVE9SWV9OQU1FO1xudmFyIFNVUEVSX05PREVfSUQgPSBDb25zdGFudHMuU1VQRVJfTk9ERV9JRDtcbnZhciBTWU1MT09QX01BWCA9IENvbnN0YW50cy5TWU1MT09QX01BWDtcblxudmFyIE9fUkVBRCA9IENvbnN0YW50cy5PX1JFQUQ7XG52YXIgT19XUklURSA9IENvbnN0YW50cy5PX1dSSVRFO1xudmFyIE9fQ1JFQVRFID0gQ29uc3RhbnRzLk9fQ1JFQVRFO1xudmFyIE9fRVhDTFVTSVZFID0gQ29uc3RhbnRzLk9fRVhDTFVTSVZFO1xudmFyIE9fQVBQRU5EID0gQ29uc3RhbnRzLk9fQVBQRU5EO1xudmFyIE9fRkxBR1MgPSBDb25zdGFudHMuT19GTEFHUztcblxudmFyIFhBVFRSX0NSRUFURSA9IENvbnN0YW50cy5YQVRUUl9DUkVBVEU7XG52YXIgWEFUVFJfUkVQTEFDRSA9IENvbnN0YW50cy5YQVRUUl9SRVBMQUNFO1xudmFyIEZTX05PTVRJTUUgPSBDb25zdGFudHMuRlNfTk9NVElNRTtcbnZhciBGU19OT0NUSU1FID0gQ29uc3RhbnRzLkZTX05PQ1RJTUU7XG5cbnZhciBFcnJvcnMgPSByZXF1aXJlKCcuLi9lcnJvcnMuanMnKTtcbnZhciBEaXJlY3RvcnlFbnRyeSA9IHJlcXVpcmUoJy4uL2RpcmVjdG9yeS1lbnRyeS5qcycpO1xudmFyIG9wZW5GaWxlcyA9IHJlcXVpcmUoJy4uL29wZW4tZmlsZXMuanMnKTtcbnZhciBPcGVuRmlsZURlc2NyaXB0aW9uID0gcmVxdWlyZSgnLi4vb3Blbi1maWxlLWRlc2NyaXB0aW9uLmpzJyk7XG52YXIgU3VwZXJOb2RlID0gcmVxdWlyZSgnLi4vc3VwZXItbm9kZS5qcycpO1xudmFyIE5vZGUgPSByZXF1aXJlKCcuLi9ub2RlLmpzJyk7XG52YXIgRGlyZW50ID0gcmVxdWlyZSgnLi4vZGlyZW50LmpzJyk7XG52YXIgU3RhdHMgPSByZXF1aXJlKCcuLi9zdGF0cy5qcycpO1xuXG4vKipcbiAqIFVwZGF0ZSBub2RlIHRpbWVzLiBPbmx5IHBhc3NlZCB0aW1lcyBhcmUgbW9kaWZpZWQgKHVuZGVmaW5lZCB0aW1lcyBhcmUgaWdub3JlZClcbiAqIGFuZCBmaWxlc3lzdGVtIGZsYWdzIGFyZSBleGFtaW5lZCBpbiBvcmRlciB0byBvdmVycmlkZSB1cGRhdGUgbG9naWMuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZV9ub2RlX3RpbWVzKGNvbnRleHQsIHBhdGgsIG5vZGUsIHRpbWVzLCBjYWxsYmFjaykge1xuICAvLyBIb25vdXIgbW91bnQgZmxhZ3MgZm9yIGhvdyB3ZSB1cGRhdGUgdGltZXNcbiAgdmFyIGZsYWdzID0gY29udGV4dC5mbGFncztcbiAgaWYoZmxhZ3MuaW5jbHVkZXMoRlNfTk9DVElNRSkpIHtcbiAgICBkZWxldGUgdGltZXMuY3RpbWU7XG4gIH1cbiAgaWYoZmxhZ3MuaW5jbHVkZXMoRlNfTk9NVElNRSkpIHtcbiAgICBkZWxldGUgdGltZXMubXRpbWU7XG4gIH1cblxuICAvLyBPbmx5IGRvIHRoZSB1cGRhdGUgaWYgcmVxdWlyZWQgKGkuZS4sIHRpbWVzIGFyZSBzdGlsbCBwcmVzZW50KVxuICB2YXIgdXBkYXRlID0gZmFsc2U7XG4gIGlmKHRpbWVzLmN0aW1lKSB7XG4gICAgbm9kZS5jdGltZSA9IHRpbWVzLmN0aW1lO1xuICAgIC8vIFdlIGRvbid0IGRvIGF0aW1lIHRyYWNraW5nIGZvciBwZXJmIHJlYXNvbnMsIGJ1dCBkbyBtaXJyb3IgY3RpbWVcbiAgICBub2RlLmF0aW1lID0gdGltZXMuY3RpbWU7XG4gICAgdXBkYXRlID0gdHJ1ZTtcbiAgfVxuICBpZih0aW1lcy5hdGltZSkge1xuICAgIC8vIFRoZSBvbmx5IHRpbWUgd2UgZXhwbGljaXRseSBwYXNzIGF0aW1lIGlzIHdoZW4gdXRpbWVzKCksIGZ1dGltZXMoKSBpcyBjYWxsZWQuXG4gICAgLy8gT3ZlcnJpZGUgY3RpbWUgbWlycm9yIGhlcmUgaWYgc29cbiAgICBub2RlLmF0aW1lID0gdGltZXMuYXRpbWU7XG4gICAgdXBkYXRlID0gdHJ1ZTtcbiAgfVxuICBpZih0aW1lcy5tdGltZSkge1xuICAgIG5vZGUubXRpbWUgPSB0aW1lcy5tdGltZTtcbiAgICB1cGRhdGUgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcGxldGUoZXJyb3IpIHtcbiAgICAvLyBRdWV1ZSB0aGlzIGNoYW5nZSBzbyB3ZSBjYW4gc2VuZCB3YXRjaCBldmVudHMuXG4gICAgLy8gVW5saWtlIG5vZGUuanMsIHdlIHNlbmQgdGhlIGZ1bGwgcGF0aCB2cy4gYmFzZW5hbWUvZGlybmFtZSBvbmx5LlxuICAgIGNvbnRleHQuY2hhbmdlcy5wdXNoKHsgZXZlbnQ6ICdjaGFuZ2UnLCBwYXRoOiBwYXRoIH0pO1xuICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgfVxuXG4gIGlmKHVwZGF0ZSkge1xuICAgIGNvbnRleHQucHV0T2JqZWN0KG5vZGUuaWQsIG5vZGUsIGNvbXBsZXRlKTtcbiAgfSBlbHNlIHtcbiAgICBjb21wbGV0ZSgpO1xuICB9XG59XG5cbi8qKlxuICogbWFrZV9ub2RlKClcbiAqL1xuLy8gaW46IGZpbGUgb3IgZGlyZWN0b3J5IHBhdGhcbi8vIG91dDogbmV3IG5vZGUgcmVwcmVzZW50aW5nIGZpbGUvZGlyZWN0b3J5XG5mdW5jdGlvbiBtYWtlX25vZGUoY29udGV4dCwgcGF0aCwgdHlwZSwgY2FsbGJhY2spIHtcbiAgaWYodHlwZSAhPT0gTk9ERV9UWVBFX0RJUkVDVE9SWSAmJiB0eXBlICE9PSBOT0RFX1RZUEVfRklMRSkge1xuICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgndHlwZSBtdXN0IGJlIGEgZGlyZWN0b3J5IG9yIGZpbGUnLCBwYXRoKSk7XG4gIH1cblxuICBwYXRoID0gbm9ybWFsaXplKHBhdGgpO1xuXG4gIHZhciBuYW1lID0gYmFzZW5hbWUocGF0aCk7XG4gIHZhciBwYXJlbnRQYXRoID0gZGlybmFtZShwYXRoKTtcbiAgdmFyIHBhcmVudE5vZGU7XG4gIHZhciBwYXJlbnROb2RlRGF0YTtcbiAgdmFyIG5vZGU7XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHBhcmVudCBub2RlIGV4aXN0c1xuICBmdW5jdGlvbiBjcmVhdGVfbm9kZV9pbl9wYXJlbnQoZXJyb3IsIHBhcmVudERpcmVjdG9yeU5vZGUpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSBpZihwYXJlbnREaXJlY3RvcnlOb2RlLnR5cGUgIT09IE5PREVfVFlQRV9ESVJFQ1RPUlkpIHtcbiAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRU5PVERJUignYSBjb21wb25lbnQgb2YgdGhlIHBhdGggcHJlZml4IGlzIG5vdCBhIGRpcmVjdG9yeScsIHBhdGgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50Tm9kZSA9IHBhcmVudERpcmVjdG9yeU5vZGU7XG4gICAgICBmaW5kX25vZGUoY29udGV4dCwgcGF0aCwgY2hlY2tfaWZfbm9kZV9leGlzdHMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBub2RlIHRvIGJlIGNyZWF0ZWQgYWxyZWFkeSBleGlzdHNcbiAgZnVuY3Rpb24gY2hlY2tfaWZfbm9kZV9leGlzdHMoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKCFlcnJvciAmJiByZXN1bHQpIHtcbiAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUVYSVNUKCdwYXRoIG5hbWUgYWxyZWFkeSBleGlzdHMnLCBwYXRoKSk7XG4gICAgfSBlbHNlIGlmKGVycm9yICYmICEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcnMuRU5PRU5UKSkge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmdldE9iamVjdChwYXJlbnROb2RlLmRhdGEsIGNyZWF0ZV9ub2RlKTtcbiAgICB9XG4gIH1cblxuICAvLyBDcmVhdGUgdGhlIG5ldyBub2RlXG4gIGZ1bmN0aW9uIGNyZWF0ZV9ub2RlKGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJlbnROb2RlRGF0YSA9IHJlc3VsdDtcbiAgICAgIE5vZGUuY3JlYXRlKHtcbiAgICAgICAgZ3VpZDogY29udGV4dC5ndWlkLFxuICAgICAgICB0eXBlOiB0eXBlXG4gICAgICB9LCBmdW5jdGlvbihlcnJvciwgcmVzdWx0KSB7XG4gICAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gcmVzdWx0O1xuICAgICAgICBub2RlLm5saW5rcyArPSAxO1xuICAgICAgICBjb250ZXh0LnB1dE9iamVjdChub2RlLmlkLCBub2RlLCB1cGRhdGVfcGFyZW50X25vZGVfZGF0YSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBVcGRhdGUgcGFyZW50IG5vZGUgdGltZVxuICBmdW5jdGlvbiB1cGRhdGVfdGltZShlcnJvcikge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgdXBkYXRlX25vZGVfdGltZXMoY29udGV4dCwgcGFyZW50UGF0aCwgbm9kZSwgeyBtdGltZTogbm93LCBjdGltZTogbm93IH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cblxuICAvLyBVcGRhdGUgdGhlIHBhcmVudCBub2RlcyBkYXRhXG4gIGZ1bmN0aW9uIHVwZGF0ZV9wYXJlbnRfbm9kZV9kYXRhKGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50Tm9kZURhdGFbbmFtZV0gPSBuZXcgRGlyZWN0b3J5RW50cnkobm9kZS5pZCwgdHlwZSk7XG4gICAgICBjb250ZXh0LnB1dE9iamVjdChwYXJlbnROb2RlLmRhdGEsIHBhcmVudE5vZGVEYXRhLCB1cGRhdGVfdGltZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gRmluZCB0aGUgcGFyZW50IG5vZGVcbiAgZmluZF9ub2RlKGNvbnRleHQsIHBhcmVudFBhdGgsIGNyZWF0ZV9ub2RlX2luX3BhcmVudCk7XG59XG5cbi8qKlxuICogZmluZF9ub2RlXG4gKi9cbi8vIGluOiBmaWxlIG9yIGRpcmVjdG9yeSBwYXRoXG4vLyBvdXQ6IG5vZGUgc3RydWN0dXJlLCBvciBlcnJvclxuZnVuY3Rpb24gZmluZF9ub2RlKGNvbnRleHQsIHBhdGgsIGNhbGxiYWNrKSB7XG4gIHBhdGggPSBub3JtYWxpemUocGF0aCk7XG4gIGlmKCFwYXRoKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcnMuRU5PRU5UKCdwYXRoIGlzIGFuIGVtcHR5IHN0cmluZycpKTtcbiAgfVxuICB2YXIgbmFtZSA9IGJhc2VuYW1lKHBhdGgpO1xuICB2YXIgcGFyZW50UGF0aCA9IGRpcm5hbWUocGF0aCk7XG4gIHZhciBmb2xsb3dlZENvdW50ID0gMDtcblxuICBmdW5jdGlvbiByZWFkX3Jvb3RfZGlyZWN0b3J5X25vZGUoZXJyb3IsIG5vZGVEYXRhKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnJvcik7XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgZXhpc3Rpbmcgbm9kZSBhcyBTdXBlck5vZGVcbiAgICBjb25zdCBzdXBlck5vZGUgPSBuZXcgU3VwZXJOb2RlKG5vZGVEYXRhKTtcblxuICAgIGlmKCFzdXBlck5vZGUgfHwgc3VwZXJOb2RlLnR5cGUgIT09IE5PREVfVFlQRV9NRVRBIHx8ICFzdXBlck5vZGUucm5vZGUpIHtcbiAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUZJTEVTWVNURU1FUlJPUigpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5nZXRPYmplY3Qoc3VwZXJOb2RlLnJub2RlLCBjaGVja19yb290X2RpcmVjdG9yeV9ub2RlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja19yb290X2RpcmVjdG9yeV9ub2RlKGVycm9yLCByb290RGlyZWN0b3J5Tm9kZSkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIGlmKCFyb290RGlyZWN0b3J5Tm9kZSkge1xuICAgICAgY2FsbGJhY2sobmV3IEVycm9ycy5FTk9FTlQoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE5vZGUuY3JlYXRlKHJvb3REaXJlY3RvcnlOb2RlLCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgLy8gaW46IHBhcmVudCBkaXJlY3Rvcnkgbm9kZVxuICAvLyBvdXQ6IHBhcmVudCBkaXJlY3RvcnkgZGF0YVxuICBmdW5jdGlvbiByZWFkX3BhcmVudF9kaXJlY3RvcnlfZGF0YShlcnJvciwgcGFyZW50RGlyZWN0b3J5Tm9kZSkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIGlmKHBhcmVudERpcmVjdG9yeU5vZGUudHlwZSAhPT0gTk9ERV9UWVBFX0RJUkVDVE9SWSB8fCAhcGFyZW50RGlyZWN0b3J5Tm9kZS5kYXRhKSB7XG4gICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVOT1RESVIoJ2EgY29tcG9uZW50IG9mIHRoZSBwYXRoIHByZWZpeCBpcyBub3QgYSBkaXJlY3RvcnknLCBwYXRoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZ2V0T2JqZWN0KHBhcmVudERpcmVjdG9yeU5vZGUuZGF0YSwgZ2V0X25vZGVfZnJvbV9wYXJlbnRfZGlyZWN0b3J5X2RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGluOiBwYXJlbnQgZGlyZWN0b3J5IGRhdGFcbiAgLy8gb3V0OiBzZWFyY2hlZCBub2RlXG4gIGZ1bmN0aW9uIGdldF9ub2RlX2Zyb21fcGFyZW50X2RpcmVjdG9yeV9kYXRhKGVycm9yLCBwYXJlbnREaXJlY3RvcnlEYXRhKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnREaXJlY3RvcnlEYXRhLCBuYW1lKSkge1xuICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVOT0VOVChudWxsLCBwYXRoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgbm9kZUlkID0gcGFyZW50RGlyZWN0b3J5RGF0YVtuYW1lXS5pZDtcbiAgICAgICAgY29udGV4dC5nZXRPYmplY3Qobm9kZUlkLCBjcmVhdGVfbm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlX25vZGUoZXJyb3IsIGRhdGEpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9XG4gICAgTm9kZS5jcmVhdGUoZGF0YSwgaXNfc3ltYm9saWNfbGluayk7XG4gIH1cblxuICBmdW5jdGlvbiBpc19zeW1ib2xpY19saW5rKGVycm9yLCBub2RlKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYobm9kZS50eXBlID09PSBOT0RFX1RZUEVfU1lNQk9MSUNfTElOSykge1xuICAgICAgICBmb2xsb3dlZENvdW50Kys7XG4gICAgICAgIGlmKGZvbGxvd2VkQ291bnQgPiBTWU1MT09QX01BWCl7XG4gICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9ycy5FTE9PUChudWxsLCBwYXRoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9sbG93X3N5bWJvbGljX2xpbmsobm9kZS5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgbm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZm9sbG93X3N5bWJvbGljX2xpbmsoZGF0YSkge1xuICAgIGRhdGEgPSBub3JtYWxpemUoZGF0YSk7XG4gICAgcGFyZW50UGF0aCA9IGRpcm5hbWUoZGF0YSk7XG4gICAgbmFtZSA9IGJhc2VuYW1lKGRhdGEpO1xuICAgIGlmKFJPT1RfRElSRUNUT1JZX05BTUUgPT09IG5hbWUpIHtcbiAgICAgIGNvbnRleHQuZ2V0T2JqZWN0KFNVUEVSX05PREVfSUQsIHJlYWRfcm9vdF9kaXJlY3Rvcnlfbm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbmRfbm9kZShjb250ZXh0LCBwYXJlbnRQYXRoLCByZWFkX3BhcmVudF9kaXJlY3RvcnlfZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgaWYoUk9PVF9ESVJFQ1RPUllfTkFNRSA9PT0gbmFtZSkge1xuICAgIGNvbnRleHQuZ2V0T2JqZWN0KFNVUEVSX05PREVfSUQsIHJlYWRfcm9vdF9kaXJlY3Rvcnlfbm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgZmluZF9ub2RlKGNvbnRleHQsIHBhcmVudFBhdGgsIHJlYWRfcGFyZW50X2RpcmVjdG9yeV9kYXRhKTtcbiAgfVxufVxuXG5cbi8qKlxuICogc2V0IGV4dGVuZGVkIGF0dHJpYnV0ZSAocmVmYWN0b3IpXG4gKi9cbmZ1bmN0aW9uIHNldF9leHRlbmRlZF9hdHRyaWJ1dGUgKGNvbnRleHQsIHBhdGgsIG5vZGUsIG5hbWUsIHZhbHVlLCBmbGFnLCBjYWxsYmFjaykge1xuICBmdW5jdGlvbiB1cGRhdGVfdGltZShlcnJvcikge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVwZGF0ZV9ub2RlX3RpbWVzKGNvbnRleHQsIHBhdGgsIG5vZGUsIHsgY3RpbWU6IERhdGUubm93KCkgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxuXG4gIHZhciB4YXR0cnMgPSBub2RlLnhhdHRycztcblxuICBpZiAoZmxhZyA9PT0gWEFUVFJfQ1JFQVRFICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4YXR0cnMsIG5hbWUpKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FRVhJU1QoJ2F0dHJpYnV0ZSBhbHJlYWR5IGV4aXN0cycsIHBhdGgpKTtcbiAgfVxuICBlbHNlIGlmIChmbGFnID09PSBYQVRUUl9SRVBMQUNFICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeGF0dHJzLCBuYW1lKSkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRU5PQVRUUihudWxsLCBwYXRoKSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgeGF0dHJzW25hbWVdID0gdmFsdWU7XG4gICAgY29udGV4dC5wdXRPYmplY3Qobm9kZS5pZCwgbm9kZSwgdXBkYXRlX3RpbWUpO1xuICB9XG59XG5cbi8qKlxuICogZW5zdXJlX3Jvb3RfZGlyZWN0b3J5LiBDcmVhdGVzIGEgcm9vdCBub2RlIGlmIG5lY2Vzc2FyeS5cbiAqXG4gKiBOb3RlOiB0aGlzIHNob3VsZCBvbmx5IGJlIGludm9rZWQgd2hlbiBmb3JtYXR0aW5nIGEgbmV3IGZpbGUgc3lzdGVtLlxuICogTXVsdGlwbGUgaW52b2NhdGlvbnMgb2YgdGhpcyBieSBzZXBhcmF0ZSBpbnN0YW5jZXMgd2lsbCBzdGlsbCByZXN1bHRcbiAqIGluIG9ubHkgYSBzaW5nbGUgc3VwZXIgbm9kZS5cbiAqL1xuZnVuY3Rpb24gZW5zdXJlX3Jvb3RfZGlyZWN0b3J5KGNvbnRleHQsIGNhbGxiYWNrKSB7XG4gIHZhciBzdXBlck5vZGU7XG4gIHZhciBkaXJlY3RvcnlOb2RlO1xuICB2YXIgZGlyZWN0b3J5RGF0YTtcblxuICBmdW5jdGlvbiBlbnN1cmVfc3VwZXJfbm9kZShlcnJvciwgZXhpc3RpbmdOb2RlKSB7XG4gICAgaWYoIWVycm9yICYmIGV4aXN0aW5nTm9kZSkge1xuICAgICAgLy8gQW5vdGhlciBpbnN0YW5jZSBoYXMgYmVhdCB1cyBhbmQgYWxyZWFkeSBjcmVhdGVkIHRoZSBzdXBlciBub2RlLlxuICAgICAgY2FsbGJhY2soKTtcbiAgICB9IGVsc2UgaWYoZXJyb3IgJiYgIShlcnJvciBpbnN0YW5jZW9mIEVycm9ycy5FTk9FTlQpKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIFN1cGVyTm9kZS5jcmVhdGUoe2d1aWQ6IGNvbnRleHQuZ3VpZH0sIGZ1bmN0aW9uKGVycm9yLCByZXN1bHQpIHtcbiAgICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyTm9kZSA9IHJlc3VsdDtcbiAgICAgICAgY29udGV4dC5wdXRPYmplY3Qoc3VwZXJOb2RlLmlkLCBzdXBlck5vZGUsIHdyaXRlX2RpcmVjdG9yeV9ub2RlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHdyaXRlX2RpcmVjdG9yeV9ub2RlKGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgTm9kZS5jcmVhdGUoe1xuICAgICAgICBndWlkOiBjb250ZXh0Lmd1aWQsXG4gICAgICAgIGlkOiBzdXBlck5vZGUucm5vZGUsXG4gICAgICAgIHR5cGU6IE5PREVfVFlQRV9ESVJFQ1RPUllcbiAgICAgIH0sIGZ1bmN0aW9uKGVycm9yLCByZXN1bHQpIHtcbiAgICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRpcmVjdG9yeU5vZGUgPSByZXN1bHQ7XG4gICAgICAgIGRpcmVjdG9yeU5vZGUubmxpbmtzICs9IDE7XG4gICAgICAgIGNvbnRleHQucHV0T2JqZWN0KGRpcmVjdG9yeU5vZGUuaWQsIGRpcmVjdG9yeU5vZGUsIHdyaXRlX2RpcmVjdG9yeV9kYXRhKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHdyaXRlX2RpcmVjdG9yeV9kYXRhKGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlyZWN0b3J5RGF0YSA9IHt9O1xuICAgICAgY29udGV4dC5wdXRPYmplY3QoZGlyZWN0b3J5Tm9kZS5kYXRhLCBkaXJlY3RvcnlEYXRhLCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgY29udGV4dC5nZXRPYmplY3QoU1VQRVJfTk9ERV9JRCwgZW5zdXJlX3N1cGVyX25vZGUpO1xufVxuXG4vKipcbiAqIG1ha2VfZGlyZWN0b3J5XG4gKi9cbmZ1bmN0aW9uIG1ha2VfZGlyZWN0b3J5KGNvbnRleHQsIHBhdGgsIGNhbGxiYWNrKSB7XG4gIHBhdGggPSBub3JtYWxpemUocGF0aCk7XG4gIHZhciBuYW1lID0gYmFzZW5hbWUocGF0aCk7XG4gIHZhciBwYXJlbnRQYXRoID0gZGlybmFtZShwYXRoKTtcblxuICB2YXIgZGlyZWN0b3J5Tm9kZTtcbiAgdmFyIGRpcmVjdG9yeURhdGE7XG4gIHZhciBwYXJlbnREaXJlY3RvcnlOb2RlO1xuICB2YXIgcGFyZW50RGlyZWN0b3J5RGF0YTtcblxuICBmdW5jdGlvbiBjaGVja19pZl9kaXJlY3RvcnlfZXhpc3RzKGVycm9yLCByZXN1bHQpIHtcbiAgICBpZighZXJyb3IgJiYgcmVzdWx0KSB7XG4gICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVFWElTVChudWxsLCBwYXRoKSk7XG4gICAgfSBlbHNlIGlmKGVycm9yICYmICEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcnMuRU5PRU5UKSkge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaW5kX25vZGUoY29udGV4dCwgcGFyZW50UGF0aCwgcmVhZF9wYXJlbnRfZGlyZWN0b3J5X2RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRfcGFyZW50X2RpcmVjdG9yeV9kYXRhKGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJlbnREaXJlY3RvcnlOb2RlID0gcmVzdWx0O1xuICAgICAgY29udGV4dC5nZXRPYmplY3QocGFyZW50RGlyZWN0b3J5Tm9kZS5kYXRhLCB3cml0ZV9kaXJlY3Rvcnlfbm9kZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gd3JpdGVfZGlyZWN0b3J5X25vZGUoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmVudERpcmVjdG9yeURhdGEgPSByZXN1bHQ7XG4gICAgICBOb2RlLmNyZWF0ZSh7XG4gICAgICAgIGd1aWQ6IGNvbnRleHQuZ3VpZCxcbiAgICAgICAgdHlwZTogTk9ERV9UWVBFX0RJUkVDVE9SWVxuICAgICAgfSwgZnVuY3Rpb24oZXJyb3IsIHJlc3VsdCkge1xuICAgICAgICBpZihlcnJvcikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGlyZWN0b3J5Tm9kZSA9IHJlc3VsdDtcbiAgICAgICAgZGlyZWN0b3J5Tm9kZS5ubGlua3MgKz0gMTtcbiAgICAgICAgY29udGV4dC5wdXRPYmplY3QoZGlyZWN0b3J5Tm9kZS5pZCwgZGlyZWN0b3J5Tm9kZSwgd3JpdGVfZGlyZWN0b3J5X2RhdGEpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gd3JpdGVfZGlyZWN0b3J5X2RhdGEoZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXJlY3RvcnlEYXRhID0ge307XG4gICAgICBjb250ZXh0LnB1dE9iamVjdChkaXJlY3RvcnlOb2RlLmRhdGEsIGRpcmVjdG9yeURhdGEsIHVwZGF0ZV9wYXJlbnRfZGlyZWN0b3J5X2RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZV90aW1lKGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7XG4gICAgICB1cGRhdGVfbm9kZV90aW1lcyhjb250ZXh0LCBwYXJlbnRQYXRoLCBwYXJlbnREaXJlY3RvcnlOb2RlLCB7IG10aW1lOiBub3csIGN0aW1lOiBub3cgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZV9wYXJlbnRfZGlyZWN0b3J5X2RhdGEoZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJlbnREaXJlY3RvcnlEYXRhW25hbWVdID0gbmV3IERpcmVjdG9yeUVudHJ5KGRpcmVjdG9yeU5vZGUuaWQsIE5PREVfVFlQRV9ESVJFQ1RPUlkpO1xuICAgICAgY29udGV4dC5wdXRPYmplY3QocGFyZW50RGlyZWN0b3J5Tm9kZS5kYXRhLCBwYXJlbnREaXJlY3RvcnlEYXRhLCB1cGRhdGVfdGltZSk7XG4gICAgfVxuICB9XG5cbiAgZmluZF9ub2RlKGNvbnRleHQsIHBhdGgsIGNoZWNrX2lmX2RpcmVjdG9yeV9leGlzdHMpO1xufVxuXG5mdW5jdGlvbiBhY2Nlc3NfZmlsZShjb250ZXh0LCBwYXRoLCBtb2RlLCBjYWxsYmFjaykge1xuICBjb25zdCB7IEZfT0ssIFJfT0ssIFdfT0ssIFhfT0ssIFNfSVhVU1IsIFNfSVhHUlAsIFNfSVhPVEggfSA9IENvbnN0YW50cy5mc0NvbnN0YW50cztcblxuICBwYXRoID0gbm9ybWFsaXplKHBhdGgpO1xuICBmaW5kX25vZGUoY29udGV4dCwgcGF0aCwgZnVuY3Rpb24gKGVyciwgbm9kZSkge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgIH1cblxuICAgIC8vIElmIHdlIGhhdmUgYSBub2RlLCBGX09LIGlzIHRydWUuXG4gICAgaWYobW9kZSA9PT0gRl9PSykge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgIH1cblxuICAgIHZhciBzdF9tb2RlID0gdmFsaWRhdGVBbmRNYXNrTW9kZShub2RlLm1vZGUsIGNhbGxiYWNrKTtcbiAgICBpZighc3RfbW9kZSkgcmV0dXJuO1xuXG4gICAgLy8gRm9yIGFueSBvdGhlciBjb21ibyBvZiBGX09LLCBSX09LLCBXX09LLCBhbHdheXMgYWxsb3cuIEZpbGVyIHVzZXIgaXMgYSByb290IHVzZXIsXG4gICAgLy8gc28gZXhpc3RpbmcgZmlsZXMgYXJlIGFsd2F5cyBPSywgcmVhZGFibGUsIGFuZCB3cml0YWJsZVxuICAgIGlmKG1vZGUgJiAoUl9PSyB8IFdfT0spKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgfVxuXG4gICAgLy8gRm9yIHRoZSBjYXNlIG9mIFhfT0ssIGFjdHVhbGx5IGNoZWNrIGlmIHRoaXMgZmlsZSBpcyBleGVjdXRhYmxlXG4gICAgaWYgKChtb2RlICYgWF9PSykgJiYgKHN0X21vZGUgJiAoU19JWFVTUiB8IFNfSVhHUlAgfCBTX0lYT1RIKSkpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICB9XG5cbiAgICAvLyBJbiBhbnkgb3RoZXIgY2FzZSwgdGhlIGZpbGUgaXNuJ3QgYWNjZXNzaWJsZVxuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUFDQ0VTKCdwZXJtaXNzaW9uIGRlbmllZCcscGF0aCkpIDtcbiAgfSk7XG59XG5cbi8qKlxuICogcmVtb3ZlX2RpcmVjdG9yeVxuICovXG5mdW5jdGlvbiByZW1vdmVfZGlyZWN0b3J5KGNvbnRleHQsIHBhdGgsIGNhbGxiYWNrKSB7XG4gIHBhdGggPSBub3JtYWxpemUocGF0aCk7XG4gIHZhciBuYW1lID0gYmFzZW5hbWUocGF0aCk7XG4gIHZhciBwYXJlbnRQYXRoID0gZGlybmFtZShwYXRoKTtcblxuICB2YXIgZGlyZWN0b3J5Tm9kZTtcbiAgdmFyIGRpcmVjdG9yeURhdGE7XG4gIHZhciBwYXJlbnREaXJlY3RvcnlOb2RlO1xuICB2YXIgcGFyZW50RGlyZWN0b3J5RGF0YTtcblxuICBmdW5jdGlvbiByZWFkX3BhcmVudF9kaXJlY3RvcnlfZGF0YShlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50RGlyZWN0b3J5Tm9kZSA9IHJlc3VsdDtcbiAgICAgIGNvbnRleHQuZ2V0T2JqZWN0KHBhcmVudERpcmVjdG9yeU5vZGUuZGF0YSwgY2hlY2tfaWZfbm9kZV9leGlzdHMpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrX2lmX25vZGVfZXhpc3RzKGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSBpZihST09UX0RJUkVDVE9SWV9OQU1FID09PSBuYW1lKSB7XG4gICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVCVVNZKG51bGwsIHBhdGgpKTtcbiAgICB9IGVsc2UgaWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXN1bHQsIG5hbWUpKSB7XG4gICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVOT0VOVChudWxsLCBwYXRoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmVudERpcmVjdG9yeURhdGEgPSByZXN1bHQ7XG4gICAgICBkaXJlY3RvcnlOb2RlID0gcGFyZW50RGlyZWN0b3J5RGF0YVtuYW1lXS5pZDtcbiAgICAgIGNvbnRleHQuZ2V0T2JqZWN0KGRpcmVjdG9yeU5vZGUsIGNoZWNrX2lmX25vZGVfaXNfZGlyZWN0b3J5KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja19pZl9ub2RlX2lzX2RpcmVjdG9yeShlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2UgaWYocmVzdWx0LnR5cGUgIT09IE5PREVfVFlQRV9ESVJFQ1RPUlkpIHtcbiAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRU5PVERJUihudWxsLCBwYXRoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpcmVjdG9yeU5vZGUgPSByZXN1bHQ7XG4gICAgICBjb250ZXh0LmdldE9iamVjdChkaXJlY3RvcnlOb2RlLmRhdGEsIGNoZWNrX2lmX2RpcmVjdG9yeV9pc19lbXB0eSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tfaWZfZGlyZWN0b3J5X2lzX2VtcHR5KGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXJlY3RvcnlEYXRhID0gcmVzdWx0O1xuICAgICAgaWYoT2JqZWN0LmtleXMoZGlyZWN0b3J5RGF0YSkubGVuZ3RoID4gMCkge1xuICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVOT1RFTVBUWShudWxsLCBwYXRoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdmVfZGlyZWN0b3J5X2VudHJ5X2Zyb21fcGFyZW50X2RpcmVjdG9yeV9ub2RlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlX3RpbWUoZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIHVwZGF0ZV9ub2RlX3RpbWVzKGNvbnRleHQsIHBhcmVudFBhdGgsIHBhcmVudERpcmVjdG9yeU5vZGUsIHsgbXRpbWU6IG5vdywgY3RpbWU6IG5vdyB9LCByZW1vdmVfZGlyZWN0b3J5X25vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZV9kaXJlY3RvcnlfZW50cnlfZnJvbV9wYXJlbnRfZGlyZWN0b3J5X25vZGUoKSB7XG4gICAgZGVsZXRlIHBhcmVudERpcmVjdG9yeURhdGFbbmFtZV07XG4gICAgY29udGV4dC5wdXRPYmplY3QocGFyZW50RGlyZWN0b3J5Tm9kZS5kYXRhLCBwYXJlbnREaXJlY3RvcnlEYXRhLCB1cGRhdGVfdGltZSk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVfZGlyZWN0b3J5X25vZGUoZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlbGV0ZShkaXJlY3RvcnlOb2RlLmlkLCByZW1vdmVfZGlyZWN0b3J5X2RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZV9kaXJlY3RvcnlfZGF0YShlcnJvcikge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVsZXRlKGRpcmVjdG9yeU5vZGUuZGF0YSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxuXG4gIGZpbmRfbm9kZShjb250ZXh0LCBwYXJlbnRQYXRoLCByZWFkX3BhcmVudF9kaXJlY3RvcnlfZGF0YSk7XG59XG5cbmZ1bmN0aW9uIG9wZW5fZmlsZShjb250ZXh0LCBwYXRoLCBmbGFncywgbW9kZSwgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBtb2RlID09PSAnZnVuY3Rpb24nKXtcbiAgICBjYWxsYmFjayA9IG1vZGU7XG4gICAgbW9kZSA9IG51bGw7XG4gIH1cbiAgcGF0aCA9IG5vcm1hbGl6ZShwYXRoKTtcbiAgdmFyIG5hbWUgPSBiYXNlbmFtZShwYXRoKTtcbiAgdmFyIHBhcmVudFBhdGggPSBkaXJuYW1lKHBhdGgpO1xuXG4gIHZhciBkaXJlY3RvcnlOb2RlO1xuICB2YXIgZGlyZWN0b3J5RGF0YTtcbiAgdmFyIGRpcmVjdG9yeUVudHJ5O1xuICB2YXIgZmlsZU5vZGU7XG4gIHZhciBmaWxlRGF0YTtcblxuICB2YXIgZm9sbG93ZWRDb3VudCA9IDA7XG5cbiAgaWYoUk9PVF9ESVJFQ1RPUllfTkFNRSA9PT0gbmFtZSkge1xuICAgIGlmKGZsYWdzLmluY2x1ZGVzKE9fV1JJVEUpKSB7XG4gICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJU0RJUigndGhlIG5hbWVkIGZpbGUgaXMgYSBkaXJlY3RvcnkgYW5kIE9fV1JJVEUgaXMgc2V0JywgcGF0aCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaW5kX25vZGUoY29udGV4dCwgcGF0aCwgc2V0X2ZpbGVfbm9kZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZpbmRfbm9kZShjb250ZXh0LCBwYXJlbnRQYXRoLCByZWFkX2RpcmVjdG9yeV9kYXRhKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRfZGlyZWN0b3J5X2RhdGEoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIGlmKHJlc3VsdC50eXBlICE9PSBOT0RFX1RZUEVfRElSRUNUT1JZKSB7XG4gICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVOT0VOVChudWxsLCBwYXRoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpcmVjdG9yeU5vZGUgPSByZXN1bHQ7XG4gICAgICBjb250ZXh0LmdldE9iamVjdChkaXJlY3RvcnlOb2RlLmRhdGEsIGNoZWNrX2lmX2ZpbGVfZXhpc3RzKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja19pZl9maWxlX2V4aXN0cyhlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlyZWN0b3J5RGF0YSA9IHJlc3VsdDtcbiAgICAgIGlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkaXJlY3RvcnlEYXRhLCBuYW1lKSkge1xuICAgICAgICBpZihmbGFncy5pbmNsdWRlcyhPX0VYQ0xVU0lWRSkpIHtcbiAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVFWElTVCgnT19DUkVBVEUgYW5kIE9fRVhDTFVTSVZFIGFyZSBzZXQsIGFuZCB0aGUgbmFtZWQgZmlsZSBleGlzdHMnLCBwYXRoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGlyZWN0b3J5RW50cnkgPSBkaXJlY3RvcnlEYXRhW25hbWVdO1xuICAgICAgICAgIGlmKGRpcmVjdG9yeUVudHJ5LnR5cGUgPT09IE5PREVfVFlQRV9ESVJFQ1RPUlkgJiYgZmxhZ3MuaW5jbHVkZXMoT19XUklURSkpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlTRElSKCd0aGUgbmFtZWQgZmlsZSBpcyBhIGRpcmVjdG9yeSBhbmQgT19XUklURSBpcyBzZXQnLCBwYXRoKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRleHQuZ2V0T2JqZWN0KGRpcmVjdG9yeUVudHJ5LmlkLCBjaGVja19pZl9zeW1ib2xpY19saW5rKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmKCFmbGFncy5pbmNsdWRlcyhPX0NSRUFURSkpIHtcbiAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVOT0VOVCgnT19DUkVBVEUgaXMgbm90IHNldCBhbmQgdGhlIG5hbWVkIGZpbGUgZG9lcyBub3QgZXhpc3QnLCBwYXRoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd3JpdGVfZmlsZV9ub2RlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja19pZl9zeW1ib2xpY19saW5rKGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbm9kZSA9IHJlc3VsdDtcbiAgICAgIGlmKG5vZGUudHlwZSA9PT0gTk9ERV9UWVBFX1NZTUJPTElDX0xJTkspIHtcbiAgICAgICAgZm9sbG93ZWRDb3VudCsrO1xuICAgICAgICBpZihmb2xsb3dlZENvdW50ID4gU1lNTE9PUF9NQVgpe1xuICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUxPT1AobnVsbCwgcGF0aCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvbGxvd19zeW1ib2xpY19saW5rKG5vZGUuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldF9maWxlX25vZGUodW5kZWZpbmVkLCBub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmb2xsb3dfc3ltYm9saWNfbGluayhkYXRhKSB7XG4gICAgZGF0YSA9IG5vcm1hbGl6ZShkYXRhKTtcbiAgICBwYXJlbnRQYXRoID0gZGlybmFtZShkYXRhKTtcbiAgICBuYW1lID0gYmFzZW5hbWUoZGF0YSk7XG4gICAgaWYoUk9PVF9ESVJFQ1RPUllfTkFNRSA9PT0gbmFtZSkge1xuICAgICAgaWYoZmxhZ3MuaW5jbHVkZXMoT19XUklURSkpIHtcbiAgICAgICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSVNESVIoJ3RoZSBuYW1lZCBmaWxlIGlzIGEgZGlyZWN0b3J5IGFuZCBPX1dSSVRFIGlzIHNldCcsIHBhdGgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbmRfbm9kZShjb250ZXh0LCBwYXRoLCBzZXRfZmlsZV9ub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZmluZF9ub2RlKGNvbnRleHQsIHBhcmVudFBhdGgsIHJlYWRfZGlyZWN0b3J5X2RhdGEpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0X2ZpbGVfbm9kZShlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsZU5vZGUgPSByZXN1bHQ7XG4gICAgICBjYWxsYmFjayhudWxsLCBmaWxlTm9kZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gd3JpdGVfZmlsZV9ub2RlKCkge1xuICAgIE5vZGUuY3JlYXRlKHtcbiAgICAgIGd1aWQ6IGNvbnRleHQuZ3VpZCxcbiAgICAgIHR5cGU6IE5PREVfVFlQRV9GSUxFXG4gICAgfSwgZnVuY3Rpb24oZXJyb3IsIHJlc3VsdCkge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmaWxlTm9kZSA9IHJlc3VsdDtcbiAgICAgIGZpbGVOb2RlLm5saW5rcyArPSAxO1xuICAgICAgaWYobW9kZSl7XG4gICAgICAgIGZpbGVOb2RlLm1vZGUgPSBtb2RlO1xuICAgICAgfVxuICAgICAgY29udGV4dC5wdXRPYmplY3QoZmlsZU5vZGUuaWQsIGZpbGVOb2RlLCB3cml0ZV9maWxlX2RhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gd3JpdGVfZmlsZV9kYXRhKGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsZURhdGEgPSBCdWZmZXIuYWxsb2MoMCk7XG4gICAgICBjb250ZXh0LnB1dEJ1ZmZlcihmaWxlTm9kZS5kYXRhLCBmaWxlRGF0YSwgdXBkYXRlX2RpcmVjdG9yeV9kYXRhKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVfdGltZShlcnJvcikge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgdXBkYXRlX25vZGVfdGltZXMoY29udGV4dCwgcGFyZW50UGF0aCwgZGlyZWN0b3J5Tm9kZSwgeyBtdGltZTogbm93LCBjdGltZTogbm93IH0sIGhhbmRsZV91cGRhdGVfcmVzdWx0KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVfZGlyZWN0b3J5X2RhdGEoZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXJlY3RvcnlEYXRhW25hbWVdID0gbmV3IERpcmVjdG9yeUVudHJ5KGZpbGVOb2RlLmlkLCBOT0RFX1RZUEVfRklMRSk7XG4gICAgICBjb250ZXh0LnB1dE9iamVjdChkaXJlY3RvcnlOb2RlLmRhdGEsIGRpcmVjdG9yeURhdGEsIHVwZGF0ZV90aW1lKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVfdXBkYXRlX3Jlc3VsdChlcnJvcikge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKG51bGwsIGZpbGVOb2RlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGFjZV9kYXRhKGNvbnRleHQsIG9mZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgY2FsbGJhY2spIHtcbiAgdmFyIGZpbGVOb2RlO1xuXG4gIGZ1bmN0aW9uIHJldHVybl9uYnl0ZXMoZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhudWxsLCBsZW5ndGgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZV90aW1lKGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7XG4gICAgICB1cGRhdGVfbm9kZV90aW1lcyhjb250ZXh0LCBvZmQucGF0aCwgZmlsZU5vZGUsIHsgbXRpbWU6IG5vdywgY3RpbWU6IG5vdyB9LCByZXR1cm5fbmJ5dGVzKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVfZmlsZV9ub2RlKGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5wdXRPYmplY3QoZmlsZU5vZGUuaWQsIGZpbGVOb2RlLCB1cGRhdGVfdGltZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gd3JpdGVfZmlsZV9kYXRhKGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWxlTm9kZSA9IHJlc3VsdDtcblxuICAgICAgdmFyIG5ld0RhdGEgPSBCdWZmZXIuYWxsb2MobGVuZ3RoKTtcbiAgICAgIGJ1ZmZlci5jb3B5KG5ld0RhdGEsIDAsIG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKTtcbiAgICAgIG9mZC5wb3NpdGlvbiA9IGxlbmd0aDtcblxuICAgICAgZmlsZU5vZGUuc2l6ZSA9IGxlbmd0aDtcbiAgICAgIGZpbGVOb2RlLnZlcnNpb24gKz0gMTtcblxuICAgICAgY29udGV4dC5wdXRCdWZmZXIoZmlsZU5vZGUuZGF0YSwgbmV3RGF0YSwgdXBkYXRlX2ZpbGVfbm9kZSk7XG4gICAgfVxuICB9XG5cbiAgY29udGV4dC5nZXRPYmplY3Qob2ZkLmlkLCB3cml0ZV9maWxlX2RhdGEpO1xufVxuXG5mdW5jdGlvbiB3cml0ZV9kYXRhKGNvbnRleHQsIG9mZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKSB7XG4gIHZhciBmaWxlTm9kZTtcbiAgdmFyIGZpbGVEYXRhO1xuXG4gIGZ1bmN0aW9uIHJldHVybl9uYnl0ZXMoZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhudWxsLCBsZW5ndGgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZV90aW1lKGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7XG4gICAgICB1cGRhdGVfbm9kZV90aW1lcyhjb250ZXh0LCBvZmQucGF0aCwgZmlsZU5vZGUsIHsgbXRpbWU6IG5vdywgY3RpbWU6IG5vdyB9LCByZXR1cm5fbmJ5dGVzKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVfZmlsZV9ub2RlKGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5wdXRPYmplY3QoZmlsZU5vZGUuaWQsIGZpbGVOb2RlLCB1cGRhdGVfdGltZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlX2ZpbGVfZGF0YShlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsZURhdGEgPSByZXN1bHQ7XG4gICAgICBpZighZmlsZURhdGEpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlPKCdFeHBlY3RlZCBCdWZmZXInKSk7XG4gICAgICB9XG4gICAgICB2YXIgX3Bvc2l0aW9uID0gKCEodW5kZWZpbmVkID09PSBwb3NpdGlvbiB8fCBudWxsID09PSBwb3NpdGlvbikpID8gcG9zaXRpb24gOiBvZmQucG9zaXRpb247XG4gICAgICB2YXIgbmV3U2l6ZSA9IE1hdGgubWF4KGZpbGVEYXRhLmxlbmd0aCwgX3Bvc2l0aW9uICsgbGVuZ3RoKTtcbiAgICAgIHZhciBuZXdEYXRhID0gQnVmZmVyLmFsbG9jKG5ld1NpemUpO1xuICAgICAgaWYoZmlsZURhdGEpIHtcbiAgICAgICAgZmlsZURhdGEuY29weShuZXdEYXRhKTtcbiAgICAgIH1cbiAgICAgIGJ1ZmZlci5jb3B5KG5ld0RhdGEsIF9wb3NpdGlvbiwgb2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpO1xuICAgICAgaWYodW5kZWZpbmVkID09PSBwb3NpdGlvbikge1xuICAgICAgICBvZmQucG9zaXRpb24gKz0gbGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBmaWxlTm9kZS5zaXplID0gbmV3U2l6ZTtcbiAgICAgIGZpbGVOb2RlLnZlcnNpb24gKz0gMTtcblxuICAgICAgY29udGV4dC5wdXRCdWZmZXIoZmlsZU5vZGUuZGF0YSwgbmV3RGF0YSwgdXBkYXRlX2ZpbGVfbm9kZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZF9maWxlX2RhdGEoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbGVOb2RlID0gcmVzdWx0O1xuICAgICAgY29udGV4dC5nZXRCdWZmZXIoZmlsZU5vZGUuZGF0YSwgdXBkYXRlX2ZpbGVfZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgY29udGV4dC5nZXRPYmplY3Qob2ZkLmlkLCByZWFkX2ZpbGVfZGF0YSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRfZGF0YShjb250ZXh0LCBvZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFjaykge1xuICB2YXIgZmlsZU5vZGU7XG4gIHZhciBmaWxlRGF0YTtcblxuICBmdW5jdGlvbiBoYW5kbGVfZmlsZV9kYXRhKGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWxlRGF0YSA9IHJlc3VsdDtcbiAgICAgIGlmKCFmaWxlRGF0YSkge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9ycy5FSU8oJ0V4cGVjdGVkIEJ1ZmZlcicpKTtcbiAgICAgIH1cbiAgICAgIHZhciBfcG9zaXRpb24gPSAoISh1bmRlZmluZWQgPT09IHBvc2l0aW9uIHx8IG51bGwgPT09IHBvc2l0aW9uKSkgPyBwb3NpdGlvbiA6IG9mZC5wb3NpdGlvbjtcbiAgICAgIGxlbmd0aCA9IChfcG9zaXRpb24gKyBsZW5ndGggPiBidWZmZXIubGVuZ3RoKSA/IGxlbmd0aCAtIF9wb3NpdGlvbiA6IGxlbmd0aDtcbiAgICAgIGZpbGVEYXRhLmNvcHkoYnVmZmVyLCBvZmZzZXQsIF9wb3NpdGlvbiwgX3Bvc2l0aW9uICsgbGVuZ3RoKTtcbiAgICAgIGlmKHVuZGVmaW5lZCA9PT0gcG9zaXRpb24pIHtcbiAgICAgICAgb2ZkLnBvc2l0aW9uICs9IGxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKG51bGwsIGxlbmd0aCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZF9maWxlX2RhdGEoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIGlmKHJlc3VsdC50eXBlID09PSBOT0RFX1RZUEVfRElSRUNUT1JZKSB7XG4gICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJU0RJUigndGhlIG5hbWVkIGZpbGUgaXMgYSBkaXJlY3RvcnknLCBvZmQucGF0aCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWxlTm9kZSA9IHJlc3VsdDtcbiAgICAgIGNvbnRleHQuZ2V0QnVmZmVyKGZpbGVOb2RlLmRhdGEsIGhhbmRsZV9maWxlX2RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnRleHQuZ2V0T2JqZWN0KG9mZC5pZCwgcmVhZF9maWxlX2RhdGEpO1xufVxuXG5mdW5jdGlvbiBzdGF0X2ZpbGUoY29udGV4dCwgcGF0aCwgY2FsbGJhY2spIHtcbiAgcGF0aCA9IG5vcm1hbGl6ZShwYXRoKTtcbiAgZmluZF9ub2RlKGNvbnRleHQsIHBhdGgsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gZnN0YXRfZmlsZShjb250ZXh0LCBvZmQsIGNhbGxiYWNrKSB7XG4gIG9mZC5nZXROb2RlKGNvbnRleHQsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gbHN0YXRfZmlsZShjb250ZXh0LCBwYXRoLCBjYWxsYmFjaykge1xuICBwYXRoID0gbm9ybWFsaXplKHBhdGgpO1xuICB2YXIgbmFtZSA9IGJhc2VuYW1lKHBhdGgpO1xuICB2YXIgcGFyZW50UGF0aCA9IGRpcm5hbWUocGF0aCk7XG5cbiAgdmFyIGRpcmVjdG9yeU5vZGU7XG4gIHZhciBkaXJlY3RvcnlEYXRhO1xuXG4gIGlmKFJPT1RfRElSRUNUT1JZX05BTUUgPT09IG5hbWUpIHtcbiAgICBmaW5kX25vZGUoY29udGV4dCwgcGF0aCwgY2FsbGJhY2spO1xuICB9IGVsc2Uge1xuICAgIGZpbmRfbm9kZShjb250ZXh0LCBwYXJlbnRQYXRoLCByZWFkX2RpcmVjdG9yeV9kYXRhKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRfZGlyZWN0b3J5X2RhdGEoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpcmVjdG9yeU5vZGUgPSByZXN1bHQ7XG4gICAgICBjb250ZXh0LmdldE9iamVjdChkaXJlY3RvcnlOb2RlLmRhdGEsIGNoZWNrX2lmX2ZpbGVfZXhpc3RzKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVfbm9kZShlcnJvciwgZGF0YSkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZXJyb3IpO1xuICAgIH1cbiAgICBOb2RlLmNyZWF0ZShkYXRhLCBjYWxsYmFjayk7XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja19pZl9maWxlX2V4aXN0cyhlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlyZWN0b3J5RGF0YSA9IHJlc3VsdDtcbiAgICAgIGlmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGlyZWN0b3J5RGF0YSwgbmFtZSkpIHtcbiAgICAgICAgY2FsbGJhY2sobmV3IEVycm9ycy5FTk9FTlQoJ2EgY29tcG9uZW50IG9mIHRoZSBwYXRoIGRvZXMgbm90IG5hbWUgYW4gZXhpc3RpbmcgZmlsZScsIHBhdGgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuZ2V0T2JqZWN0KGRpcmVjdG9yeURhdGFbbmFtZV0uaWQsIGNyZWF0ZV9ub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbGlua19ub2RlKGNvbnRleHQsIG9sZHBhdGgsIG5ld3BhdGgsIGNhbGxiYWNrKSB7XG4gIG9sZHBhdGggPSBub3JtYWxpemUob2xkcGF0aCk7XG4gIHZhciBvbGRuYW1lID0gYmFzZW5hbWUob2xkcGF0aCk7XG4gIHZhciBvbGRQYXJlbnRQYXRoID0gZGlybmFtZShvbGRwYXRoKTtcblxuICBuZXdwYXRoID0gbm9ybWFsaXplKG5ld3BhdGgpO1xuICB2YXIgbmV3bmFtZSA9IGJhc2VuYW1lKG5ld3BhdGgpO1xuICB2YXIgbmV3UGFyZW50UGF0aCA9IGRpcm5hbWUobmV3cGF0aCk7XG4gIHZhciBjdGltZSA9IERhdGUubm93KCk7XG5cbiAgdmFyIG9sZERpcmVjdG9yeU5vZGU7XG4gIHZhciBvbGREaXJlY3RvcnlEYXRhO1xuICB2YXIgbmV3RGlyZWN0b3J5Tm9kZTtcbiAgdmFyIG5ld0RpcmVjdG9yeURhdGE7XG4gIHZhciBmaWxlTm9kZUlEO1xuICB2YXIgZmlsZU5vZGU7XG5cbiAgZnVuY3Rpb24gdXBkYXRlX3RpbWUoZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1cGRhdGVfbm9kZV90aW1lcyhjb250ZXh0LCBuZXdwYXRoLCBmaWxlTm9kZSwgeyBjdGltZTogY3RpbWUgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZV9maWxlX25vZGUoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbGVOb2RlID0gcmVzdWx0O1xuICAgICAgZmlsZU5vZGUubmxpbmtzICs9IDE7XG4gICAgICBjb250ZXh0LnB1dE9iamVjdChmaWxlTm9kZS5pZCwgZmlsZU5vZGUsIHVwZGF0ZV90aW1lKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkX2ZpbGVfbm9kZShlcnJvcikge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZ2V0T2JqZWN0KGZpbGVOb2RlSUQsIHVwZGF0ZV9maWxlX25vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrX2lmX25ld19maWxlX2V4aXN0cyhlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3RGlyZWN0b3J5RGF0YSA9IHJlc3VsdDtcbiAgICAgIGlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuZXdEaXJlY3RvcnlEYXRhLCBuZXduYW1lKSkge1xuICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVFWElTVCgnbmV3cGF0aCByZXNvbHZlcyB0byBhbiBleGlzdGluZyBmaWxlJywgbmV3bmFtZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3RGlyZWN0b3J5RGF0YVtuZXduYW1lXSA9IG9sZERpcmVjdG9yeURhdGFbb2xkbmFtZV07XG4gICAgICAgIGZpbGVOb2RlSUQgPSBuZXdEaXJlY3RvcnlEYXRhW25ld25hbWVdLmlkO1xuICAgICAgICBjb250ZXh0LnB1dE9iamVjdChuZXdEaXJlY3RvcnlOb2RlLmRhdGEsIG5ld0RpcmVjdG9yeURhdGEsIHJlYWRfZmlsZV9ub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkX25ld19kaXJlY3RvcnlfZGF0YShlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3RGlyZWN0b3J5Tm9kZSA9IHJlc3VsdDtcbiAgICAgIGNvbnRleHQuZ2V0T2JqZWN0KG5ld0RpcmVjdG9yeU5vZGUuZGF0YSwgY2hlY2tfaWZfbmV3X2ZpbGVfZXhpc3RzKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja19pZl9vbGRfZmlsZV9leGlzdHMoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sZERpcmVjdG9yeURhdGEgPSByZXN1bHQ7XG4gICAgICBpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9sZERpcmVjdG9yeURhdGEsIG9sZG5hbWUpKSB7XG4gICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRU5PRU5UKCdhIGNvbXBvbmVudCBvZiBlaXRoZXIgcGF0aCBwcmVmaXggZG9lcyBub3QgZXhpc3QnLCBvbGRuYW1lKSk7XG4gICAgICB9IGVsc2UgaWYob2xkRGlyZWN0b3J5RGF0YVtvbGRuYW1lXS50eXBlID09PSBOT0RFX1RZUEVfRElSRUNUT1JZKSB7XG4gICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRVBFUk0oJ29sZHBhdGggcmVmZXJzIHRvIGEgZGlyZWN0b3J5JykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmluZF9ub2RlKGNvbnRleHQsIG5ld1BhcmVudFBhdGgsIHJlYWRfbmV3X2RpcmVjdG9yeV9kYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkX29sZF9kaXJlY3RvcnlfZGF0YShlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2xkRGlyZWN0b3J5Tm9kZSA9IHJlc3VsdDtcbiAgICAgIGNvbnRleHQuZ2V0T2JqZWN0KG9sZERpcmVjdG9yeU5vZGUuZGF0YSwgY2hlY2tfaWZfb2xkX2ZpbGVfZXhpc3RzKTtcbiAgICB9XG4gIH1cblxuICBmaW5kX25vZGUoY29udGV4dCwgb2xkUGFyZW50UGF0aCwgcmVhZF9vbGRfZGlyZWN0b3J5X2RhdGEpO1xufVxuXG5mdW5jdGlvbiB1bmxpbmtfbm9kZShjb250ZXh0LCBwYXRoLCBjYWxsYmFjaykge1xuICBwYXRoID0gbm9ybWFsaXplKHBhdGgpO1xuICB2YXIgbmFtZSA9IGJhc2VuYW1lKHBhdGgpO1xuICB2YXIgcGFyZW50UGF0aCA9IGRpcm5hbWUocGF0aCk7XG5cbiAgdmFyIGRpcmVjdG9yeU5vZGU7XG4gIHZhciBkaXJlY3RvcnlEYXRhO1xuICB2YXIgZmlsZU5vZGU7XG5cbiAgZnVuY3Rpb24gdXBkYXRlX2RpcmVjdG9yeV9kYXRhKGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIGRpcmVjdG9yeURhdGFbbmFtZV07XG4gICAgICBjb250ZXh0LnB1dE9iamVjdChkaXJlY3RvcnlOb2RlLmRhdGEsIGRpcmVjdG9yeURhdGEsIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIHVwZGF0ZV9ub2RlX3RpbWVzKGNvbnRleHQsIHBhcmVudFBhdGgsIGRpcmVjdG9yeU5vZGUsIHsgbXRpbWU6IG5vdywgY3RpbWU6IG5vdyB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlbGV0ZV9maWxlX2RhdGEoZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlbGV0ZShmaWxlTm9kZS5kYXRhLCB1cGRhdGVfZGlyZWN0b3J5X2RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZV9maWxlX25vZGUoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbGVOb2RlID0gcmVzdWx0O1xuICAgICAgZmlsZU5vZGUubmxpbmtzIC09IDE7XG4gICAgICBpZihmaWxlTm9kZS5ubGlua3MgPCAxKSB7XG4gICAgICAgIGNvbnRleHQuZGVsZXRlKGZpbGVOb2RlLmlkLCBkZWxldGVfZmlsZV9kYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQucHV0T2JqZWN0KGZpbGVOb2RlLmlkLCBmaWxlTm9kZSwgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgICBpZihlcnJvcikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cGRhdGVfbm9kZV90aW1lcyhjb250ZXh0LCBwYXRoLCBmaWxlTm9kZSwgeyBjdGltZTogRGF0ZS5ub3coKSB9LCB1cGRhdGVfZGlyZWN0b3J5X2RhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tfaWZfbm9kZV9pc19kaXJlY3RvcnkoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIGlmKHJlc3VsdC50eXBlID09PSBOT0RFX1RZUEVfRElSRUNUT1JZKSB7XG4gICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVQRVJNKCd1bmxpbmsgbm90IHBlcm1pdHRlZCBvbiBkaXJlY3RvcmllcycsIG5hbWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlX2ZpbGVfbm9kZShudWxsLCByZXN1bHQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrX2lmX2ZpbGVfZXhpc3RzKGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXJlY3RvcnlEYXRhID0gcmVzdWx0O1xuICAgICAgaWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkaXJlY3RvcnlEYXRhLCBuYW1lKSkge1xuICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVOT0VOVCgnYSBjb21wb25lbnQgb2YgdGhlIHBhdGggZG9lcyBub3QgbmFtZSBhbiBleGlzdGluZyBmaWxlJywgbmFtZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dC5nZXRPYmplY3QoZGlyZWN0b3J5RGF0YVtuYW1lXS5pZCwgY2hlY2tfaWZfbm9kZV9pc19kaXJlY3RvcnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRfZGlyZWN0b3J5X2RhdGEoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpcmVjdG9yeU5vZGUgPSByZXN1bHQ7XG4gICAgICBjb250ZXh0LmdldE9iamVjdChkaXJlY3RvcnlOb2RlLmRhdGEsIGNoZWNrX2lmX2ZpbGVfZXhpc3RzKTtcbiAgICB9XG4gIH1cblxuICBmaW5kX25vZGUoY29udGV4dCwgcGFyZW50UGF0aCwgcmVhZF9kaXJlY3RvcnlfZGF0YSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRfZGlyZWN0b3J5KGNvbnRleHQsIHBhdGgsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIHBhdGggPSBub3JtYWxpemUocGF0aCk7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBvcHRpb25zID0gdmFsaWRhdGVfZGlyZWN0b3J5X29wdGlvbnMob3B0aW9ucyk7XG5cbiAgdmFyIGRpcmVjdG9yeU5vZGU7XG4gIHZhciBkaXJlY3RvcnlEYXRhO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZV9kaXJlY3RvcnlfZGF0YShlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpcmVjdG9yeURhdGEgPSByZXN1bHQ7XG4gICAgICB2YXIgZmlsZXMgPSBPYmplY3Qua2V5cyhkaXJlY3RvcnlEYXRhKTtcblxuICAgICAgaWYgKG9wdGlvbnMuZW5jb2RpbmcpIHtcbiAgICAgICAgdmFyIGZpbGVCdWZmZXJzID0gZmlsZXMubWFwKGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGZpbGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAob3B0aW9ucy5lbmNvZGluZyA9PT0gJ2J1ZmZlcicpIHtcbiAgICAgICAgICBmaWxlcyA9IGZpbGVCdWZmZXJzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGZpbGVzID0gZmlsZUJ1ZmZlcnMubWFwKGZ1bmN0aW9uIChmaWxlQnVmZmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsZUJ1ZmZlci50b1N0cmluZyhvcHRpb25zLmVuY29kaW5nKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy53aXRoRmlsZVR5cGVzKSB7XG4gICAgICAgIHZhciBkaXJFbnRzID0gW107XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWlubmVyLWRlY2xhcmF0aW9uc1xuICAgICAgICBmdW5jdGlvbiB0b19kaXJfZW50cnkoZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICBjb25zdCBmaWxlbmFtZSA9IEJ1ZmZlci5mcm9tKGZpbGUsIG9wdGlvbnMuZW5jb2RpbmcpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgY29uc3QgZmlsZXBhdGggPSBQYXRoLmpvaW4ocGF0aCwgZmlsZW5hbWUpO1xuICAgICAgICAgIGdldF9kaXJfZW50cnkoY29udGV4dCwgZmlsZXBhdGgsIGZ1bmN0aW9uKGVycm9yLCBkaXJFbnQpIHtcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkaXJFbnQubmFtZSA9IGZpbGU7XG4gICAgICAgICAgICBkaXJFbnRzLnB1c2goZGlyRW50KTtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYy5lYWNoU2VyaWVzKGZpbGVzLCB0b19kaXJfZW50cnksIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycm9yLCBkaXJFbnRzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGVsc2Uge1xuICAgICAgICBjYWxsYmFjayhudWxsLCBmaWxlcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZF9kaXJlY3RvcnlfZGF0YShlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIGlmIChyZXN1bHQudHlwZSAhPT0gTk9ERV9UWVBFX0RJUkVDVE9SWSkge1xuICAgICAgY2FsbGJhY2sobmV3IEVycm9ycy5FTk9URElSKG51bGwsIHBhdGgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlyZWN0b3J5Tm9kZSA9IHJlc3VsdDtcbiAgICAgIGNvbnRleHQuZ2V0T2JqZWN0KGRpcmVjdG9yeU5vZGUuZGF0YSwgaGFuZGxlX2RpcmVjdG9yeV9kYXRhKTtcbiAgICB9XG4gIH1cblxuICBmaW5kX25vZGUoY29udGV4dCwgcGF0aCwgcmVhZF9kaXJlY3RvcnlfZGF0YSk7XG59XG5cbmZ1bmN0aW9uIGdldF9kaXJfZW50cnkoY29udGV4dCwgcGF0aCwgY2FsbGJhY2spIHtcbiAgZnVuY3Rpb24gY2hlY2tfcmVzdWx0KGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RhdHMgPSBuZXcgRGlyZW50KHBhdGgsIHJlc3VsdCwgY29udGV4dC5uYW1lKTtcbiAgICAgIGNhbGxiYWNrKG51bGwsIHN0YXRzKTtcbiAgICB9XG4gIH1cblxuICBsc3RhdF9maWxlKGNvbnRleHQsIHBhdGgsIGNoZWNrX3Jlc3VsdCk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlX2RpcmVjdG9yeV9vcHRpb25zKG9wdGlvbnMsIGVuYykge1xuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0geyBlbmNvZGluZzogZW5jIH07XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRpb25zID0geyBlbmNvZGluZzogZW5jIH07XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMgfTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuZnVuY3Rpb24gbWFrZV9zeW1ib2xpY19saW5rKGNvbnRleHQsIHNyY3BhdGgsIGRzdHBhdGgsIGNhbGxiYWNrKSB7XG4gIGRzdHBhdGggPSBub3JtYWxpemUoZHN0cGF0aCk7XG4gIHZhciBuYW1lID0gYmFzZW5hbWUoZHN0cGF0aCk7XG4gIHZhciBwYXJlbnRQYXRoID0gZGlybmFtZShkc3RwYXRoKTtcblxuICB2YXIgZGlyZWN0b3J5Tm9kZTtcbiAgdmFyIGRpcmVjdG9yeURhdGE7XG4gIHZhciBmaWxlTm9kZTtcblxuICBpZihST09UX0RJUkVDVE9SWV9OQU1FID09PSBuYW1lKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FRVhJU1QobnVsbCwgbmFtZSkpO1xuICB9IGVsc2Uge1xuICAgIGZpbmRfbm9kZShjb250ZXh0LCBwYXJlbnRQYXRoLCByZWFkX2RpcmVjdG9yeV9kYXRhKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRfZGlyZWN0b3J5X2RhdGEoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpcmVjdG9yeU5vZGUgPSByZXN1bHQ7XG4gICAgICBjb250ZXh0LmdldE9iamVjdChkaXJlY3RvcnlOb2RlLmRhdGEsIGNoZWNrX2lmX2ZpbGVfZXhpc3RzKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja19pZl9maWxlX2V4aXN0cyhlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlyZWN0b3J5RGF0YSA9IHJlc3VsdDtcbiAgICAgIGlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkaXJlY3RvcnlEYXRhLCBuYW1lKSkge1xuICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVFWElTVChudWxsLCBuYW1lKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3cml0ZV9maWxlX25vZGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB3cml0ZV9maWxlX25vZGUoKSB7XG4gICAgTm9kZS5jcmVhdGUoe1xuICAgICAgZ3VpZDogY29udGV4dC5ndWlkLFxuICAgICAgdHlwZTogTk9ERV9UWVBFX1NZTUJPTElDX0xJTktcbiAgICB9LCBmdW5jdGlvbihlcnJvciwgcmVzdWx0KSB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZpbGVOb2RlID0gcmVzdWx0O1xuICAgICAgZmlsZU5vZGUubmxpbmtzICs9IDE7XG5cbiAgICAgIC8vIElmIHRoZSBzcmNwYXRoIGlzbid0IGFic29sdXRlLCByZXNvbHZlIGl0IHJlbGF0aXZlIHRvIHRoZSBkc3RwYXRoXG4gICAgICAvLyBidXQgc3RvcmUgYm90aCB2ZXJzaW9ucywgc2luY2Ugd2UnbGwgdXNlIHRoZSByZWxhdGl2ZSBvbmUgaW4gcmVhZGxpbmsoKS5cbiAgICAgIGlmKCFpc0Fic29sdXRlUGF0aChzcmNwYXRoKSkge1xuICAgICAgICBmaWxlTm9kZS5zeW1saW5rX3JlbHBhdGggPSBzcmNwYXRoO1xuICAgICAgICBzcmNwYXRoID0gUGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIHNyY3BhdGgpO1xuICAgICAgfVxuXG4gICAgICBmaWxlTm9kZS5zaXplID0gc3JjcGF0aC5sZW5ndGg7XG4gICAgICBmaWxlTm9kZS5kYXRhID0gc3JjcGF0aDtcblxuICAgICAgY29udGV4dC5wdXRPYmplY3QoZmlsZU5vZGUuaWQsIGZpbGVOb2RlLCB1cGRhdGVfZGlyZWN0b3J5X2RhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlX3RpbWUoZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIHVwZGF0ZV9ub2RlX3RpbWVzKGNvbnRleHQsIHBhcmVudFBhdGgsIGRpcmVjdG9yeU5vZGUsIHsgbXRpbWU6IG5vdywgY3RpbWU6IG5vdyB9LCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlX2RpcmVjdG9yeV9kYXRhKGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlyZWN0b3J5RGF0YVtuYW1lXSA9IG5ldyBEaXJlY3RvcnlFbnRyeShmaWxlTm9kZS5pZCwgTk9ERV9UWVBFX1NZTUJPTElDX0xJTkspO1xuICAgICAgY29udGV4dC5wdXRPYmplY3QoZGlyZWN0b3J5Tm9kZS5kYXRhLCBkaXJlY3RvcnlEYXRhLCB1cGRhdGVfdGltZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRfbGluayhjb250ZXh0LCBwYXRoLCBjYWxsYmFjaykge1xuICBwYXRoID0gbm9ybWFsaXplKHBhdGgpO1xuICB2YXIgbmFtZSA9IGJhc2VuYW1lKHBhdGgpO1xuICB2YXIgcGFyZW50UGF0aCA9IGRpcm5hbWUocGF0aCk7XG5cbiAgdmFyIGRpcmVjdG9yeU5vZGU7XG4gIHZhciBkaXJlY3RvcnlEYXRhO1xuXG4gIGZpbmRfbm9kZShjb250ZXh0LCBwYXJlbnRQYXRoLCByZWFkX2RpcmVjdG9yeV9kYXRhKTtcblxuICBmdW5jdGlvbiByZWFkX2RpcmVjdG9yeV9kYXRhKGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXJlY3RvcnlOb2RlID0gcmVzdWx0O1xuICAgICAgY29udGV4dC5nZXRPYmplY3QoZGlyZWN0b3J5Tm9kZS5kYXRhLCBjaGVja19pZl9maWxlX2V4aXN0cyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tfaWZfZmlsZV9leGlzdHMoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpcmVjdG9yeURhdGEgPSByZXN1bHQ7XG4gICAgICBpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRpcmVjdG9yeURhdGEsIG5hbWUpKSB7XG4gICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRU5PRU5UKCdhIGNvbXBvbmVudCBvZiB0aGUgcGF0aCBkb2VzIG5vdCBuYW1lIGFuIGV4aXN0aW5nIGZpbGUnLCBuYW1lKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0LmdldE9iamVjdChkaXJlY3RvcnlEYXRhW25hbWVdLmlkLCBjaGVja19pZl9zeW1ib2xpYyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tfaWZfc3ltYm9saWMoZXJyb3IsIGZpbGVOb2RlKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYoZmlsZU5vZGUudHlwZSAhPT0gTk9ERV9UWVBFX1NZTUJPTElDX0xJTkspIHtcbiAgICAgICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSU5WQUwoJ3BhdGggbm90IGEgc3ltYm9saWMgbGluaycsIHBhdGgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIHdlIHdlcmUgb3JpZ2luYWxseSBnaXZlbiBhIHJlbGF0aXZlIHBhdGgsIHJldHVybiB0aGF0IG5vdyB2cy4gdGhlXG4gICAgICAgIC8vIGFic29sdXRlIHBhdGggd2UndmUgZ2VuZXJhdGVkIGFuZCB1c2UgZWxzZXdoZXJlIGludGVybmFsbHkuXG4gICAgICAgIHZhciB0YXJnZXQgPSBmaWxlTm9kZS5zeW1saW5rX3JlbHBhdGggPyBmaWxlTm9kZS5zeW1saW5rX3JlbHBhdGggOiBmaWxlTm9kZS5kYXRhO1xuICAgICAgICBjYWxsYmFjayhudWxsLCB0YXJnZXQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0cnVuY2F0ZV9maWxlKGNvbnRleHQsIHBhdGgsIGxlbmd0aCwgY2FsbGJhY2spIHtcbiAgcGF0aCA9IG5vcm1hbGl6ZShwYXRoKTtcblxuICB2YXIgZmlsZU5vZGU7XG5cbiAgZnVuY3Rpb24gcmVhZF9maWxlX2RhdGEgKGVycm9yLCBub2RlKSB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIGlmKG5vZGUudHlwZSA9PT0gTk9ERV9UWVBFX0RJUkVDVE9SWSApIHtcbiAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlTRElSKG51bGwsIHBhdGgpKTtcbiAgICB9IGVsc2V7XG4gICAgICBmaWxlTm9kZSA9IG5vZGU7XG4gICAgICBjb250ZXh0LmdldEJ1ZmZlcihmaWxlTm9kZS5kYXRhLCB0cnVuY2F0ZV9maWxlX2RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRydW5jYXRlX2ZpbGVfZGF0YShlcnJvciwgZmlsZURhdGEpIHtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYoIWZpbGVEYXRhKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTygnRXhwZWN0ZWQgQnVmZmVyJykpO1xuICAgICAgfVxuICAgICAgdmFyIGRhdGEgPSBCdWZmZXIuYWxsb2MobGVuZ3RoKTtcbiAgICAgIGlmKGZpbGVEYXRhKSB7XG4gICAgICAgIGZpbGVEYXRhLmNvcHkoZGF0YSk7XG4gICAgICB9XG4gICAgICBjb250ZXh0LnB1dEJ1ZmZlcihmaWxlTm9kZS5kYXRhLCBkYXRhLCB1cGRhdGVfZmlsZV9ub2RlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVfdGltZShlcnJvcikge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgdXBkYXRlX25vZGVfdGltZXMoY29udGV4dCwgcGF0aCwgZmlsZU5vZGUsIHsgbXRpbWU6IG5vdywgY3RpbWU6IG5vdyB9LCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlX2ZpbGVfbm9kZSAoZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWxlTm9kZS5zaXplID0gbGVuZ3RoO1xuICAgICAgZmlsZU5vZGUudmVyc2lvbiArPSAxO1xuICAgICAgY29udGV4dC5wdXRPYmplY3QoZmlsZU5vZGUuaWQsIGZpbGVOb2RlLCB1cGRhdGVfdGltZSk7XG4gICAgfVxuICB9XG5cbiAgaWYobGVuZ3RoIDwgMCkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdsZW5ndGggY2Fubm90IGJlIG5lZ2F0aXZlJykpO1xuICB9IGVsc2Uge1xuICAgIGZpbmRfbm9kZShjb250ZXh0LCBwYXRoLCByZWFkX2ZpbGVfZGF0YSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZnRydW5jYXRlX2ZpbGUoY29udGV4dCwgb2ZkLCBsZW5ndGgsIGNhbGxiYWNrKSB7XG4gIHZhciBmaWxlTm9kZTtcblxuICBmdW5jdGlvbiByZWFkX2ZpbGVfZGF0YSAoZXJyb3IsIG5vZGUpIHtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2UgaWYobm9kZS50eXBlID09PSBOT0RFX1RZUEVfRElSRUNUT1JZICkge1xuICAgICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSVNESVIoKSk7XG4gICAgfSBlbHNle1xuICAgICAgZmlsZU5vZGUgPSBub2RlO1xuICAgICAgY29udGV4dC5nZXRCdWZmZXIoZmlsZU5vZGUuZGF0YSwgdHJ1bmNhdGVfZmlsZV9kYXRhKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0cnVuY2F0ZV9maWxlX2RhdGEoZXJyb3IsIGZpbGVEYXRhKSB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBkYXRhO1xuICAgICAgaWYoIWZpbGVEYXRhKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTygnRXhwZWN0ZWQgQnVmZmVyJykpO1xuICAgICAgfVxuICAgICAgaWYoZmlsZURhdGEpIHtcbiAgICAgICAgZGF0YSA9IGZpbGVEYXRhLnNsaWNlKDAsIGxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhID0gQnVmZmVyLmFsbG9jKGxlbmd0aCk7XG4gICAgICB9XG4gICAgICBjb250ZXh0LnB1dEJ1ZmZlcihmaWxlTm9kZS5kYXRhLCBkYXRhLCB1cGRhdGVfZmlsZV9ub2RlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVfdGltZShlcnJvcikge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgdXBkYXRlX25vZGVfdGltZXMoY29udGV4dCwgb2ZkLnBhdGgsIGZpbGVOb2RlLCB7IG10aW1lOiBub3csIGN0aW1lOiBub3cgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZV9maWxlX25vZGUgKGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsZU5vZGUuc2l6ZSA9IGxlbmd0aDtcbiAgICAgIGZpbGVOb2RlLnZlcnNpb24gKz0gMTtcbiAgICAgIGNvbnRleHQucHV0T2JqZWN0KGZpbGVOb2RlLmlkLCBmaWxlTm9kZSwgdXBkYXRlX3RpbWUpO1xuICAgIH1cbiAgfVxuXG4gIGlmKGxlbmd0aCA8IDApIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnbGVuZ3RoIGNhbm5vdCBiZSBuZWdhdGl2ZScpKTtcbiAgfSBlbHNlIHtcbiAgICBvZmQuZ2V0Tm9kZShjb250ZXh0LCByZWFkX2ZpbGVfZGF0YSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXRpbWVzX2ZpbGUoY29udGV4dCwgcGF0aCwgYXRpbWUsIG10aW1lLCBjYWxsYmFjaykge1xuICBwYXRoID0gbm9ybWFsaXplKHBhdGgpO1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZV90aW1lcyhlcnJvciwgbm9kZSkge1xuICAgIGlmIChlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1cGRhdGVfbm9kZV90aW1lcyhjb250ZXh0LCBwYXRoLCBub2RlLCB7IGF0aW1lOiBhdGltZSwgY3RpbWU6IG10aW1lLCBtdGltZTogbXRpbWUgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgYXRpbWUgIT09ICdudW1iZXInIHx8IHR5cGVvZiBtdGltZSAhPT0gJ251bWJlcicpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnYXRpbWUgYW5kIG10aW1lIG11c3QgYmUgbnVtYmVyJywgcGF0aCkpO1xuICB9XG4gIGVsc2UgaWYgKGF0aW1lIDwgMCB8fCBtdGltZSA8IDApIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnYXRpbWUgYW5kIG10aW1lIG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnLCBwYXRoKSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgZmluZF9ub2RlKGNvbnRleHQsIHBhdGgsIHVwZGF0ZV90aW1lcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZnV0aW1lc19maWxlKGNvbnRleHQsIG9mZCwgYXRpbWUsIG10aW1lLCBjYWxsYmFjaykge1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZV90aW1lcyAoZXJyb3IsIG5vZGUpIHtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlX25vZGVfdGltZXMoY29udGV4dCwgb2ZkLnBhdGgsIG5vZGUsIHsgYXRpbWU6IGF0aW1lLCBjdGltZTogbXRpbWUsIG10aW1lOiBtdGltZSB9LCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBhdGltZSAhPT0gJ251bWJlcicgfHwgdHlwZW9mIG10aW1lICE9PSAnbnVtYmVyJykge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdhdGltZSBhbmQgbXRpbWUgbXVzdCBiZSBhIG51bWJlcicpKTtcbiAgfVxuICBlbHNlIGlmIChhdGltZSA8IDAgfHwgbXRpbWUgPCAwKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSU5WQUwoJ2F0aW1lIGFuZCBtdGltZSBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzJykpO1xuICB9XG4gIGVsc2Uge1xuICAgIG9mZC5nZXROb2RlKGNvbnRleHQsIHVwZGF0ZV90aW1lcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0eGF0dHJfZmlsZShjb250ZXh0LCBwYXRoLCBuYW1lLCB2YWx1ZSwgZmxhZywgY2FsbGJhY2spIHtcbiAgcGF0aCA9IG5vcm1hbGl6ZShwYXRoKTtcblxuICBmdW5jdGlvbiBzZXR4YXR0cihlcnJvciwgbm9kZSkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZXJyb3IpO1xuICAgIH1cbiAgICBzZXRfZXh0ZW5kZWRfYXR0cmlidXRlKGNvbnRleHQsIHBhdGgsIG5vZGUsIG5hbWUsIHZhbHVlLCBmbGFnLCBjYWxsYmFjayk7XG4gIH1cblxuICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSU5WQUwoJ2F0dHJpYnV0ZSBuYW1lIG11c3QgYmUgYSBzdHJpbmcnLCBwYXRoKSk7XG4gIH1cbiAgZWxzZSBpZiAoIW5hbWUpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnYXR0cmlidXRlIG5hbWUgY2Fubm90IGJlIGFuIGVtcHR5IHN0cmluZycsIHBhdGgpKTtcbiAgfVxuICBlbHNlIGlmIChmbGFnICE9PSBudWxsICYmXG4gICAgICAgICAgIGZsYWcgIT09IFhBVFRSX0NSRUFURSAmJiBmbGFnICE9PSBYQVRUUl9SRVBMQUNFKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSU5WQUwoJ2ludmFsaWQgZmxhZywgbXVzdCBiZSBudWxsLCBYQVRUUl9DUkVBVEUgb3IgWEFUVFJfUkVQTEFDRScsIHBhdGgpKTtcbiAgfVxuICBlbHNlIHtcbiAgICBmaW5kX25vZGUoY29udGV4dCwgcGF0aCwgc2V0eGF0dHIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZzZXR4YXR0cl9maWxlIChjb250ZXh0LCBvZmQsIG5hbWUsIHZhbHVlLCBmbGFnLCBjYWxsYmFjaykge1xuICBmdW5jdGlvbiBzZXR4YXR0cihlcnJvciwgbm9kZSkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZXJyb3IpO1xuICAgIH1cbiAgICBzZXRfZXh0ZW5kZWRfYXR0cmlidXRlKGNvbnRleHQsIG9mZC5wYXRoLCBub2RlLCBuYW1lLCB2YWx1ZSwgZmxhZywgY2FsbGJhY2spO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdhdHRyaWJ1dGUgbmFtZSBtdXN0IGJlIGEgc3RyaW5nJykpO1xuICB9XG4gIGVsc2UgaWYgKCFuYW1lKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSU5WQUwoJ2F0dHJpYnV0ZSBuYW1lIGNhbm5vdCBiZSBhbiBlbXB0eSBzdHJpbmcnKSk7XG4gIH1cbiAgZWxzZSBpZiAoZmxhZyAhPT0gbnVsbCAmJlxuICAgICAgICAgICBmbGFnICE9PSBYQVRUUl9DUkVBVEUgJiYgZmxhZyAhPT0gWEFUVFJfUkVQTEFDRSkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdpbnZhbGlkIGZsYWcsIG11c3QgYmUgbnVsbCwgWEFUVFJfQ1JFQVRFIG9yIFhBVFRSX1JFUExBQ0UnKSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgb2ZkLmdldE5vZGUoY29udGV4dCwgc2V0eGF0dHIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldHhhdHRyX2ZpbGUgKGNvbnRleHQsIHBhdGgsIG5hbWUsIGNhbGxiYWNrKSB7XG4gIHBhdGggPSBub3JtYWxpemUocGF0aCk7XG5cbiAgZnVuY3Rpb24gZ2V0X3hhdHRyKGVycm9yLCBub2RlKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnJvcik7XG4gICAgfVxuXG4gICAgdmFyIHhhdHRycyA9IG5vZGUueGF0dHJzO1xuXG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeGF0dHJzLCBuYW1lKSkge1xuICAgICAgY2FsbGJhY2sobmV3IEVycm9ycy5FTk9BVFRSKG51bGwsIHBhdGgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYWxsYmFjayhudWxsLCB4YXR0cnNbbmFtZV0pO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnYXR0cmlidXRlIG5hbWUgbXVzdCBiZSBhIHN0cmluZycsIHBhdGgpKTtcbiAgfVxuICBlbHNlIGlmICghbmFtZSkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdhdHRyaWJ1dGUgbmFtZSBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nJywgcGF0aCkpO1xuICB9XG4gIGVsc2Uge1xuICAgIGZpbmRfbm9kZShjb250ZXh0LCBwYXRoLCBnZXRfeGF0dHIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZnZXR4YXR0cl9maWxlIChjb250ZXh0LCBvZmQsIG5hbWUsIGNhbGxiYWNrKSB7XG5cbiAgZnVuY3Rpb24gZ2V0X3hhdHRyIChlcnJvciwgbm9kZSkge1xuICAgIGlmIChlcnJvcikge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9XG5cbiAgICB2YXIgeGF0dHJzID0gbm9kZS54YXR0cnM7XG5cbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4YXR0cnMsIG5hbWUpKSB7XG4gICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVOT0FUVFIoKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FsbGJhY2sobnVsbCwgeGF0dHJzW25hbWVdKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSU5WQUwoKSk7XG4gIH1cbiAgZWxzZSBpZiAoIW5hbWUpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnYXR0cmlidXRlIG5hbWUgY2Fubm90IGJlIGFuIGVtcHR5IHN0cmluZycpKTtcbiAgfVxuICBlbHNlIHtcbiAgICBvZmQuZ2V0Tm9kZShjb250ZXh0LCBnZXRfeGF0dHIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZXhhdHRyX2ZpbGUgKGNvbnRleHQsIHBhdGgsIG5hbWUsIGNhbGxiYWNrKSB7XG4gIHBhdGggPSBub3JtYWxpemUocGF0aCk7XG5cbiAgZnVuY3Rpb24gcmVtb3ZlX3hhdHRyIChlcnJvciwgbm9kZSkge1xuICAgIGlmIChlcnJvcikge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVfdGltZShlcnJvcikge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXBkYXRlX25vZGVfdGltZXMoY29udGV4dCwgcGF0aCwgbm9kZSwgeyBjdGltZTogRGF0ZS5ub3coKSB9LCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHhhdHRycyA9IG5vZGUueGF0dHJzO1xuXG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeGF0dHJzLCBuYW1lKSkge1xuICAgICAgY2FsbGJhY2sobmV3IEVycm9ycy5FTk9BVFRSKG51bGwsIHBhdGgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBkZWxldGUgeGF0dHJzW25hbWVdO1xuICAgICAgY29udGV4dC5wdXRPYmplY3Qobm9kZS5pZCwgbm9kZSwgdXBkYXRlX3RpbWUpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnYXR0cmlidXRlIG5hbWUgbXVzdCBiZSBhIHN0cmluZycsIHBhdGgpKTtcbiAgfVxuICBlbHNlIGlmICghbmFtZSkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdhdHRyaWJ1dGUgbmFtZSBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nJywgcGF0aCkpO1xuICB9XG4gIGVsc2Uge1xuICAgIGZpbmRfbm9kZShjb250ZXh0LCBwYXRoLCByZW1vdmVfeGF0dHIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZyZW1vdmV4YXR0cl9maWxlIChjb250ZXh0LCBvZmQsIG5hbWUsIGNhbGxiYWNrKSB7XG5cbiAgZnVuY3Rpb24gcmVtb3ZlX3hhdHRyIChlcnJvciwgbm9kZSkge1xuICAgIGlmIChlcnJvcikge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVfdGltZShlcnJvcikge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXBkYXRlX25vZGVfdGltZXMoY29udGV4dCwgb2ZkLnBhdGgsIG5vZGUsIHsgY3RpbWU6IERhdGUubm93KCkgfSwgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB4YXR0cnMgPSBub2RlLnhhdHRycztcblxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHhhdHRycywgbmFtZSkpIHtcbiAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRU5PQVRUUigpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBkZWxldGUgeGF0dHJzW25hbWVdO1xuICAgICAgY29udGV4dC5wdXRPYmplY3Qobm9kZS5pZCwgbm9kZSwgdXBkYXRlX3RpbWUpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnYXR0cmlidXRlIG5hbWUgbXVzdCBiZSBhIHN0cmluZycpKTtcbiAgfVxuICBlbHNlIGlmICghbmFtZSkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdhdHRyaWJ1dGUgbmFtZSBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nJykpO1xuICB9XG4gIGVsc2Uge1xuICAgIG9mZC5nZXROb2RlKGNvbnRleHQsIHJlbW92ZV94YXR0cik7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPX0ZMQUdTLCBmbGFncykgPyBPX0ZMQUdTW2ZsYWdzXSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlX2ZpbGVfb3B0aW9ucyhvcHRpb25zLCBlbmMsIGZpbGVNb2RlKXtcbiAgaWYoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0geyBlbmNvZGluZzogZW5jLCBmbGFnOiBmaWxlTW9kZSB9O1xuICB9IGVsc2UgaWYodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRpb25zID0geyBlbmNvZGluZzogZW5jLCBmbGFnOiBmaWxlTW9kZSB9O1xuICB9IGVsc2UgaWYodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMsIGZsYWc6IGZpbGVNb2RlIH07XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbmZ1bmN0aW9uIG9wZW4oY29udGV4dCwgcGF0aCwgZmxhZ3MsIG1vZGUsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgNSApe1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBtb2RlID0gMG82NDQ7XG4gIH1cbiAgZWxzZSB7XG4gICAgbW9kZSA9IHZhbGlkYXRlQW5kTWFza01vZGUobW9kZSwgRlVMTF9SRUFEX1dSSVRFX0VYRUNfUEVSTUlTU0lPTlMsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrX3Jlc3VsdChlcnJvciwgZmlsZU5vZGUpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcG9zaXRpb247XG4gICAgICBpZihmbGFncy5pbmNsdWRlcyhPX0FQUEVORCkpIHtcbiAgICAgICAgcG9zaXRpb24gPSBmaWxlTm9kZS5zaXplO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcG9zaXRpb24gPSAwO1xuICAgICAgfVxuICAgICAgdmFyIG9wZW5GaWxlRGVzY3JpcHRpb24gPSBuZXcgT3BlbkZpbGVEZXNjcmlwdGlvbihwYXRoLCBmaWxlTm9kZS5pZCwgZmxhZ3MsIHBvc2l0aW9uKTtcbiAgICAgIHZhciBmZCA9IG9wZW5GaWxlcy5hbGxvY0Rlc2NyaXB0b3Iob3BlbkZpbGVEZXNjcmlwdGlvbik7XG4gICAgICBjYWxsYmFjayhudWxsLCBmZCk7XG4gICAgfVxuICB9XG5cbiAgZmxhZ3MgPSB2YWxpZGF0ZV9mbGFncyhmbGFncyk7XG4gIGlmKCFmbGFncykge1xuICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnZmxhZ3MgaXMgbm90IHZhbGlkJyksIHBhdGgpO1xuICB9XG5cbiAgb3Blbl9maWxlKGNvbnRleHQsIHBhdGgsIGZsYWdzLCBtb2RlLCBjaGVja19yZXN1bHQpO1xufVxuXG5mdW5jdGlvbiBjbG9zZShjb250ZXh0LCBmZCwgY2FsbGJhY2spIHtcbiAgaWYoIW9wZW5GaWxlcy5nZXRPcGVuRmlsZURlc2NyaXB0aW9uKGZkKSkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUJBREYoKSk7XG4gIH0gZWxzZSB7XG4gICAgb3BlbkZpbGVzLnJlbGVhc2VEZXNjcmlwdG9yKGZkKTtcbiAgICBjYWxsYmFjayhudWxsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBta25vZChjb250ZXh0LCBwYXRoLCB0eXBlLCBjYWxsYmFjaykge1xuICBtYWtlX25vZGUoY29udGV4dCwgcGF0aCwgdHlwZSwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBta2Rpcihjb250ZXh0LCBwYXRoLCBtb2RlLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDQpIHtcbiAgICBjYWxsYmFjayA9IG1vZGU7XG4gICAgbW9kZSA9IEZVTExfUkVBRF9XUklURV9FWEVDX1BFUk1JU1NJT05TO1xuICB9IGVsc2Uge1xuICAgIG1vZGUgPSB2YWxpZGF0ZUFuZE1hc2tNb2RlKG1vZGUsIEZVTExfUkVBRF9XUklURV9FWEVDX1BFUk1JU1NJT05TLCBjYWxsYmFjayk7XG4gICAgaWYoIW1vZGUpIHJldHVybjtcbiAgfVxuXG4gIG1ha2VfZGlyZWN0b3J5KGNvbnRleHQsIHBhdGgsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gYWNjZXNzKGNvbnRleHQsIHBhdGgsIG1vZGUsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgbW9kZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gbW9kZTtcbiAgICBtb2RlID0gQ29uc3RhbnRzLmZzQ29uc3RhbnRzLkZfT0s7XG4gIH1cblxuICBtb2RlID0gbW9kZSB8IENvbnN0YW50cy5mc0NvbnN0YW50cy5GX09LO1xuICBhY2Nlc3NfZmlsZShjb250ZXh0LCBwYXRoLCBtb2RlLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIG1rZHRlbXAoY29udGV4dCwgcHJlZml4LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gIGlmKCFwcmVmaXgpIHtcbiAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKCdmaWxlbmFtZSBwcmVmaXggaXMgcmVxdWlyZWQnKSk7XG4gIH1cblxuICBsZXQgcmFuZG9tID0gc2hhcmVkLnJhbmRvbUNoYXJzKDYpO1xuICB2YXIgcGF0aCA9IHByZWZpeCArICctJyArIHJhbmRvbTtcblxuICBtYWtlX2RpcmVjdG9yeShjb250ZXh0LCBwYXRoLCBmdW5jdGlvbihlcnJvcikge1xuICAgIGNhbGxiYWNrKGVycm9yLCBwYXRoKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJtZGlyKGNvbnRleHQsIHBhdGgsIGNhbGxiYWNrKSB7XG4gIHJlbW92ZV9kaXJlY3RvcnkoY29udGV4dCwgcGF0aCwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBzdGF0KGNvbnRleHQsIHBhdGgsIGNhbGxiYWNrKSB7XG4gIGZ1bmN0aW9uIGNoZWNrX3Jlc3VsdChlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHN0YXRzID0gbmV3IFN0YXRzKHBhdGgsIHJlc3VsdCwgY29udGV4dC5uYW1lKTtcbiAgICAgIGNhbGxiYWNrKG51bGwsIHN0YXRzKTtcbiAgICB9XG4gIH1cblxuICBzdGF0X2ZpbGUoY29udGV4dCwgcGF0aCwgY2hlY2tfcmVzdWx0KTtcbn1cblxuZnVuY3Rpb24gZnN0YXQoY29udGV4dCwgZmQsIGNhbGxiYWNrKSB7XG4gIGZ1bmN0aW9uIGNoZWNrX3Jlc3VsdChlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHN0YXRzID0gbmV3IFN0YXRzKG9mZC5wYXRoLCByZXN1bHQsIGNvbnRleHQubmFtZSk7XG4gICAgICBjYWxsYmFjayhudWxsLCBzdGF0cyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIG9mZCA9IG9wZW5GaWxlcy5nZXRPcGVuRmlsZURlc2NyaXB0aW9uKGZkKTtcbiAgaWYoIW9mZCkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUJBREYoKSk7XG4gIH0gZWxzZSB7XG4gICAgZnN0YXRfZmlsZShjb250ZXh0LCBvZmQsIGNoZWNrX3Jlc3VsdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGluayhjb250ZXh0LCBvbGRwYXRoLCBuZXdwYXRoLCBjYWxsYmFjaykge1xuICBsaW5rX25vZGUoY29udGV4dCwgb2xkcGF0aCwgbmV3cGF0aCwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiB1bmxpbmsoY29udGV4dCwgcGF0aCwgY2FsbGJhY2spIHtcbiAgdW5saW5rX25vZGUoY29udGV4dCwgcGF0aCwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiByZWFkKGNvbnRleHQsIGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spIHtcbiAgLy8gRm9sbG93IGhvdyBub2RlLmpzIGRvZXMgdGhpc1xuICBmdW5jdGlvbiB3cmFwcGVkX2NiKGVyciwgYnl0ZXNSZWFkKSB7XG4gICAgLy8gUmV0YWluIGEgcmVmZXJlbmNlIHRvIGJ1ZmZlciBzbyB0aGF0IGl0IGNhbid0IGJlIEdDJ2VkIHRvbyBzb29uLlxuICAgIGNhbGxiYWNrKGVyciwgYnl0ZXNSZWFkIHx8IDAsIGJ1ZmZlcik7XG4gIH1cblxuICBvZmZzZXQgPSAodW5kZWZpbmVkID09PSBvZmZzZXQpID8gMCA6IG9mZnNldDtcbiAgbGVuZ3RoID0gKHVuZGVmaW5lZCA9PT0gbGVuZ3RoKSA/IGJ1ZmZlci5sZW5ndGggLSBvZmZzZXQgOiBsZW5ndGg7XG4gIGNhbGxiYWNrID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcblxuICB2YXIgb2ZkID0gb3BlbkZpbGVzLmdldE9wZW5GaWxlRGVzY3JpcHRpb24oZmQpO1xuICBpZighb2ZkKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FQkFERigpKTtcbiAgfSBlbHNlIGlmKCFvZmQuZmxhZ3MuaW5jbHVkZXMoT19SRUFEKSkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUJBREYoJ2Rlc2NyaXB0b3IgZG9lcyBub3QgcGVybWl0IHJlYWRpbmcnKSk7XG4gIH0gZWxzZSB7XG4gICAgcmVhZF9kYXRhKGNvbnRleHQsIG9mZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIHdyYXBwZWRfY2IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZzeW5jKGNvbnRleHQsIGZkLCBjYWxsYmFjaykge1xuICBpZih2YWxpZGF0ZUludGVnZXIoZmQsIGNhbGxiYWNrKSAhPT0gZmQpIHJldHVybjtcbiAgdmFyIG9mZCA9IG9wZW5GaWxlcy5nZXRPcGVuRmlsZURlc2NyaXB0aW9uKGZkKTtcbiAgaWYoIW9mZCkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUJBREYoKSk7XG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkRmlsZShjb250ZXh0LCBwYXRoLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gIG9wdGlvbnMgPSB2YWxpZGF0ZV9maWxlX29wdGlvbnMob3B0aW9ucywgbnVsbCwgJ3InKTtcblxuICB2YXIgZmxhZ3MgPSB2YWxpZGF0ZV9mbGFncyhvcHRpb25zLmZsYWcgfHwgJ3InKTtcbiAgaWYoIWZsYWdzKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdmbGFncyBpcyBub3QgdmFsaWQnLCBwYXRoKSk7XG4gIH1cblxuICBvcGVuX2ZpbGUoY29udGV4dCwgcGF0aCwgZmxhZ3MsIGZ1bmN0aW9uKGVyciwgZmlsZU5vZGUpIHtcbiAgICBpZihlcnIpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgIH1cbiAgICB2YXIgb2ZkID0gbmV3IE9wZW5GaWxlRGVzY3JpcHRpb24ocGF0aCwgZmlsZU5vZGUuaWQsIGZsYWdzLCAwKTtcbiAgICB2YXIgZmQgPSBvcGVuRmlsZXMuYWxsb2NEZXNjcmlwdG9yKG9mZCk7XG5cbiAgICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgICAgb3BlbkZpbGVzLnJlbGVhc2VEZXNjcmlwdG9yKGZkKTtcbiAgICB9XG5cbiAgICBmc3RhdF9maWxlKGNvbnRleHQsIG9mZCwgZnVuY3Rpb24oZXJyLCBmc3RhdFJlc3VsdCkge1xuICAgICAgaWYoZXJyKSB7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGF0cyA9IG5ldyBTdGF0cyhvZmQucGF0aCwgZnN0YXRSZXN1bHQsIGNvbnRleHQubmFtZSk7XG5cbiAgICAgIGlmKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9ycy5FSVNESVIoJ2lsbGVnYWwgb3BlcmF0aW9uIG9uIGRpcmVjdG9yeScsIHBhdGgpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNpemUgPSBzdGF0cy5zaXplO1xuICAgICAgdmFyIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyhzaXplKTtcblxuICAgICAgcmVhZF9kYXRhKGNvbnRleHQsIG9mZCwgYnVmZmVyLCAwLCBzaXplLCAwLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgY2xlYW51cCgpO1xuXG4gICAgICAgIGlmKGVycikge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRhdGE7XG4gICAgICAgIGlmKG9wdGlvbnMuZW5jb2RpbmcgPT09ICd1dGY4Jykge1xuICAgICAgICAgIGRhdGEgPSBidWZmZXIudG9TdHJpbmcoJ3V0ZjgnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkYXRhID0gYnVmZmVyO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIGRhdGEpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB3cml0ZShjb250ZXh0LCBmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgb2Zmc2V0ID0gKHVuZGVmaW5lZCA9PT0gb2Zmc2V0KSA/IDAgOiBvZmZzZXQ7XG4gIGxlbmd0aCA9ICh1bmRlZmluZWQgPT09IGxlbmd0aCkgPyBidWZmZXIubGVuZ3RoIC0gb2Zmc2V0IDogbGVuZ3RoO1xuXG4gIHZhciBvZmQgPSBvcGVuRmlsZXMuZ2V0T3BlbkZpbGVEZXNjcmlwdGlvbihmZCk7XG4gIGlmKCFvZmQpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVCQURGKCkpO1xuICB9IGVsc2UgaWYoIW9mZC5mbGFncy5pbmNsdWRlcyhPX1dSSVRFKSkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUJBREYoJ2Rlc2NyaXB0b3IgZG9lcyBub3QgcGVybWl0IHdyaXRpbmcnKSk7XG4gIH0gZWxzZSBpZihidWZmZXIubGVuZ3RoIC0gb2Zmc2V0IDwgbGVuZ3RoKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSU8oJ2lucHV0IGJ1ZmZlciBpcyB0b28gc21hbGwnKSk7XG4gIH0gZWxzZSB7XG4gICAgd3JpdGVfZGF0YShjb250ZXh0LCBvZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFjayk7XG4gIH1cbn1cblxuZnVuY3Rpb24gd3JpdGVGaWxlKGNvbnRleHQsIHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgb3B0aW9ucyA9IHZhbGlkYXRlX2ZpbGVfb3B0aW9ucyhvcHRpb25zLCAndXRmOCcsICd3Jyk7XG5cbiAgdmFyIGZsYWdzID0gdmFsaWRhdGVfZmxhZ3Mob3B0aW9ucy5mbGFnIHx8ICd3Jyk7XG4gIGlmKCFmbGFncykge1xuICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnZmxhZ3MgaXMgbm90IHZhbGlkJywgcGF0aCkpO1xuICB9XG5cbiAgaWYoIUJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgIGlmKHR5cGVvZiBkYXRhID09PSAnbnVtYmVyJykge1xuICAgICAgZGF0YSA9ICcnICsgZGF0YTtcbiAgICB9XG4gICAgZGF0YSA9IGRhdGEgfHwgJyc7XG4gICAgaWYodHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YS50b1N0cmluZygpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSB8fCAnJywgb3B0aW9ucy5lbmNvZGluZyB8fCAndXRmOCcpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5fZmlsZShjb250ZXh0LCBwYXRoLCBmbGFncywgZnVuY3Rpb24oZXJyLCBmaWxlTm9kZSkge1xuICAgIGlmKGVycikge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgfVxuICAgIHZhciBvZmQgPSBuZXcgT3BlbkZpbGVEZXNjcmlwdGlvbihwYXRoLCBmaWxlTm9kZS5pZCwgZmxhZ3MsIDApO1xuICAgIHZhciBmZCA9IG9wZW5GaWxlcy5hbGxvY0Rlc2NyaXB0b3Iob2ZkKTtcblxuICAgIHJlcGxhY2VfZGF0YShjb250ZXh0LCBvZmQsIGRhdGEsIDAsIGRhdGEubGVuZ3RoLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgIG9wZW5GaWxlcy5yZWxlYXNlRGVzY3JpcHRvcihmZCk7XG5cbiAgICAgIGlmKGVycikge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kRmlsZShjb250ZXh0LCBwYXRoLCBkYXRhLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gIG9wdGlvbnMgPSB2YWxpZGF0ZV9maWxlX29wdGlvbnMob3B0aW9ucywgJ3V0ZjgnLCAnYScpO1xuXG4gIHZhciBmbGFncyA9IHZhbGlkYXRlX2ZsYWdzKG9wdGlvbnMuZmxhZyB8fCAnYScpO1xuICBpZighZmxhZ3MpIHtcbiAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9ycy5FSU5WQUwoJ2ZsYWdzIGlzIG5vdCB2YWxpZCcsIHBhdGgpKTtcbiAgfVxuXG4gIGRhdGEgPSBkYXRhIHx8ICcnO1xuICBpZih0eXBlb2YgZGF0YSA9PT0gJ251bWJlcicpIHtcbiAgICBkYXRhID0gJycgKyBkYXRhO1xuICB9XG4gIGlmKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyAmJiBvcHRpb25zLmVuY29kaW5nID09PSAndXRmOCcpIHtcbiAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSk7XG4gIH1cblxuICBvcGVuX2ZpbGUoY29udGV4dCwgcGF0aCwgZmxhZ3MsIGZ1bmN0aW9uKGVyciwgZmlsZU5vZGUpIHtcbiAgICBpZihlcnIpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgIH1cbiAgICB2YXIgb2ZkID0gbmV3IE9wZW5GaWxlRGVzY3JpcHRpb24ocGF0aCwgZmlsZU5vZGUuaWQsIGZsYWdzLCBmaWxlTm9kZS5zaXplKTtcbiAgICB2YXIgZmQgPSBvcGVuRmlsZXMuYWxsb2NEZXNjcmlwdG9yKG9mZCk7XG5cbiAgICB3cml0ZV9kYXRhKGNvbnRleHQsIG9mZCwgZGF0YSwgMCwgZGF0YS5sZW5ndGgsIG9mZC5wb3NpdGlvbiwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICBvcGVuRmlsZXMucmVsZWFzZURlc2NyaXB0b3IoZmQpO1xuXG4gICAgICBpZihlcnIpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICB9XG4gICAgICBjYWxsYmFjayhudWxsKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGV4aXN0cyhjb250ZXh0LCBwYXRoLCBjYWxsYmFjaykge1xuICBmdW5jdGlvbiBjYihlcnIpIHtcbiAgICBjYWxsYmFjayhlcnIgPyBmYWxzZSA6IHRydWUpO1xuICB9XG4gIHN0YXQoY29udGV4dCwgcGF0aCwgY2IpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUludGVnZXIodmFsdWUsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSU5WQUwoJ0V4cGVjdGVkIGludGVnZXInLCB2YWx1ZSkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvYzcwMGNjNDJkYTljZjczYWY5ZmVjMjA5ODUyMGE2YzBhNjMxZDkwMS9saWIvaW50ZXJuYWwvdmFsaWRhdG9ycy5qcyNMMjFcbnZhciBvY3RhbFJlZyA9IC9eWzAtN10rJC87XG5mdW5jdGlvbiBpc1VpbnQzMih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09ICh2YWx1ZSA+Pj4gMCk7XG59XG4vLyBWYWxpZGF0b3IgZm9yIG1vZGVfdCAodGhlIFNfKiBjb25zdGFudHMpLiBWYWxpZCBudW1iZXJzIG9yIG9jdGFsIHN0cmluZ3Ncbi8vIHdpbGwgYmUgbWFza2VkIHdpdGggMG83NzcgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBiZWhhdmlvciBpbiBQT1NJWCBBUElzLlxuZnVuY3Rpb24gdmFsaWRhdGVBbmRNYXNrTW9kZSh2YWx1ZSwgZGVmLCBjYWxsYmFjaykge1xuICBpZih0eXBlb2YgZGVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBkZWY7XG4gICAgZGVmID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKGlzVWludDMyKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZSAmIEZVTExfUkVBRF9XUklURV9FWEVDX1BFUk1JU1NJT05TO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XG4gICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnbW9kZSBub3QgYSB2YWxpZCBhbiBpbnRlZ2VyIHZhbHVlJywgdmFsdWUpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMiAqKiAzMiA9PT0gNDI5NDk2NzI5NlxuICAgICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSU5WQUwoJ21vZGUgbm90IGEgdmFsaWQgYW4gaW50ZWdlciB2YWx1ZScsIHZhbHVlKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoIW9jdGFsUmVnLnRlc3QodmFsdWUpKSB7XG4gICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnbW9kZSBub3QgYSB2YWxpZCBvY3RhbCBzdHJpbmcnLCB2YWx1ZSkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgcGFyc2VkID0gcGFyc2VJbnQodmFsdWUsIDgpO1xuICAgIHJldHVybiBwYXJzZWQgJiBGVUxMX1JFQURfV1JJVEVfRVhFQ19QRVJNSVNTSU9OUztcbiAgfVxuXG4gIC8vIFRPRE8oQnJpZGdlQVIpOiBPbmx5IHJldHVybiBgZGVmYCBpbiBjYXNlIGB2YWx1ZSA9PT0gbnVsbGBcbiAgaWYgKGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGRlZjtcbiAgfVxuXG4gIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdtb2RlIG5vdCB2YWxpZCcsIHZhbHVlKSk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY2htb2RfZmlsZShjb250ZXh0LCBwYXRoLCBtb2RlLCBjYWxsYmFjaykge1xuICBwYXRoID0gbm9ybWFsaXplKHBhdGgpO1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZV9tb2RlKGVycm9yLCBub2RlKSB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUubW9kZSA9IG1vZGU7XG4gICAgICB1cGRhdGVfbm9kZV90aW1lcyhjb250ZXh0LCBwYXRoLCBub2RlLCB7IG10aW1lOiBEYXRlLm5vdygpIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIG1vZGUgIT09ICdudW1iZXInKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSU5WQUwoJ21vZGUgbXVzdCBiZSBudW1iZXInLCBwYXRoKSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgZmluZF9ub2RlKGNvbnRleHQsIHBhdGgsIHVwZGF0ZV9tb2RlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmY2htb2RfZmlsZShjb250ZXh0LCBvZmQsIG1vZGUsIGNhbGxiYWNrKSB7XG4gIGZ1bmN0aW9uIHVwZGF0ZV9tb2RlKGVycm9yLCBub2RlKSB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUubW9kZSA9IG1vZGU7XG4gICAgICB1cGRhdGVfbm9kZV90aW1lcyhjb250ZXh0LCBvZmQucGF0aCwgbm9kZSwgeyBtdGltZTogRGF0ZS5ub3coKSB9LCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBtb2RlICE9PSAnbnVtYmVyJykge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdtb2RlIG11c3QgYmUgYSBudW1iZXInKSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgb2ZkLmdldE5vZGUoY29udGV4dCwgdXBkYXRlX21vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNob3duX2ZpbGUoY29udGV4dCwgcGF0aCwgdWlkLCBnaWQsIGNhbGxiYWNrKSB7XG4gIHBhdGggPSBub3JtYWxpemUocGF0aCk7XG5cbiAgZnVuY3Rpb24gdXBkYXRlX293bmVyKGVycm9yLCBub2RlKSB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUudWlkID0gdWlkO1xuICAgICAgbm9kZS5naWQgPSBnaWQ7XG4gICAgICB1cGRhdGVfbm9kZV90aW1lcyhjb250ZXh0LCBwYXRoLCBub2RlLCB7IG10aW1lOiBEYXRlLm5vdygpIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cblxuICBmaW5kX25vZGUoY29udGV4dCwgcGF0aCwgdXBkYXRlX293bmVyKTtcbn1cblxuZnVuY3Rpb24gZmNob3duX2ZpbGUoY29udGV4dCwgb2ZkLCB1aWQsIGdpZCwgY2FsbGJhY2spIHtcbiAgZnVuY3Rpb24gdXBkYXRlX293bmVyKGVycm9yLCBub2RlKSB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUudWlkID0gdWlkO1xuICAgICAgbm9kZS5naWQgPSBnaWQ7XG4gICAgICB1cGRhdGVfbm9kZV90aW1lcyhjb250ZXh0LCBvZmQucGF0aCwgbm9kZSwgeyBtdGltZTogRGF0ZS5ub3coKSB9LCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgb2ZkLmdldE5vZGUoY29udGV4dCwgdXBkYXRlX293bmVyKTtcbn1cblxuZnVuY3Rpb24gZ2V0eGF0dHIoY29udGV4dCwgcGF0aCwgbmFtZSwgY2FsbGJhY2spIHtcbiAgZ2V0eGF0dHJfZmlsZShjb250ZXh0LCBwYXRoLCBuYW1lLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIGZnZXR4YXR0cihjb250ZXh0LCBmZCwgbmFtZSwgY2FsbGJhY2spIHtcbiAgdmFyIG9mZCA9IG9wZW5GaWxlcy5nZXRPcGVuRmlsZURlc2NyaXB0aW9uKGZkKTtcbiAgaWYgKCFvZmQpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVCQURGKCkpO1xuICB9XG4gIGVsc2Uge1xuICAgIGZnZXR4YXR0cl9maWxlKGNvbnRleHQsIG9mZCwgbmFtZSwgY2FsbGJhY2spO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldHhhdHRyKGNvbnRleHQsIHBhdGgsIG5hbWUsIHZhbHVlLCBmbGFnLCBjYWxsYmFjaykge1xuICBpZih0eXBlb2YgZmxhZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gZmxhZztcbiAgICBmbGFnID0gbnVsbDtcbiAgfVxuXG4gIHNldHhhdHRyX2ZpbGUoY29udGV4dCwgcGF0aCwgbmFtZSwgdmFsdWUsIGZsYWcsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gZnNldHhhdHRyKGNvbnRleHQsIGZkLCBuYW1lLCB2YWx1ZSwgZmxhZywgY2FsbGJhY2spIHtcbiAgaWYodHlwZW9mIGZsYWcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IGZsYWc7XG4gICAgZmxhZyA9IG51bGw7XG4gIH1cblxuICB2YXIgb2ZkID0gb3BlbkZpbGVzLmdldE9wZW5GaWxlRGVzY3JpcHRpb24oZmQpO1xuICBpZiAoIW9mZCkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUJBREYoKSk7XG4gIH1cbiAgZWxzZSBpZiAoIW9mZC5mbGFncy5pbmNsdWRlcyhPX1dSSVRFKSkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUJBREYoJ2Rlc2NyaXB0b3IgZG9lcyBub3QgcGVybWl0IHdyaXRpbmcnKSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgZnNldHhhdHRyX2ZpbGUoY29udGV4dCwgb2ZkLCBuYW1lLCB2YWx1ZSwgZmxhZywgY2FsbGJhY2spO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZXhhdHRyKGNvbnRleHQsIHBhdGgsIG5hbWUsIGNhbGxiYWNrKSB7XG4gIHJlbW92ZXhhdHRyX2ZpbGUoY29udGV4dCwgcGF0aCwgbmFtZSwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBmcmVtb3ZleGF0dHIoY29udGV4dCwgZmQsIG5hbWUsIGNhbGxiYWNrKSB7XG4gIHZhciBvZmQgPSBvcGVuRmlsZXMuZ2V0T3BlbkZpbGVEZXNjcmlwdGlvbihmZCk7XG4gIGlmICghb2ZkKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FQkFERigpKTtcbiAgfVxuICBlbHNlIGlmICghb2ZkLmZsYWdzLmluY2x1ZGVzKE9fV1JJVEUpKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FQkFERignZGVzY3JpcHRvciBkb2VzIG5vdCBwZXJtaXQgd3JpdGluZycpKTtcbiAgfVxuICBlbHNlIHtcbiAgICBmcmVtb3ZleGF0dHJfZmlsZShjb250ZXh0LCBvZmQsIG5hbWUsIGNhbGxiYWNrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsc2Vlayhjb250ZXh0LCBmZCwgb2Zmc2V0LCB3aGVuY2UsIGNhbGxiYWNrKSB7XG4gIGZ1bmN0aW9uIHVwZGF0ZV9kZXNjcmlwdG9yX3Bvc2l0aW9uKGVycm9yLCBzdGF0cykge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKHN0YXRzLnNpemUgKyBvZmZzZXQgPCAwKSB7XG4gICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdyZXN1bHRpbmcgZmlsZSBvZmZzZXQgd291bGQgYmUgbmVnYXRpdmUnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvZmQucG9zaXRpb24gPSBzdGF0cy5zaXplICsgb2Zmc2V0O1xuICAgICAgICBjYWxsYmFjayhudWxsLCBvZmQucG9zaXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBvZmQgPSBvcGVuRmlsZXMuZ2V0T3BlbkZpbGVEZXNjcmlwdGlvbihmZCk7XG4gIGlmKCFvZmQpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVCQURGKCkpO1xuICB9XG5cbiAgaWYoJ1NFVCcgPT09IHdoZW5jZSkge1xuICAgIGlmKG9mZnNldCA8IDApIHtcbiAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdyZXN1bHRpbmcgZmlsZSBvZmZzZXQgd291bGQgYmUgbmVnYXRpdmUnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZC5wb3NpdGlvbiA9IG9mZnNldDtcbiAgICAgIGNhbGxiYWNrKG51bGwsIG9mZC5wb3NpdGlvbik7XG4gICAgfVxuICB9IGVsc2UgaWYoJ0NVUicgPT09IHdoZW5jZSkge1xuICAgIGlmKG9mZC5wb3NpdGlvbiArIG9mZnNldCA8IDApIHtcbiAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdyZXN1bHRpbmcgZmlsZSBvZmZzZXQgd291bGQgYmUgbmVnYXRpdmUnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZC5wb3NpdGlvbiArPSBvZmZzZXQ7XG4gICAgICBjYWxsYmFjayhudWxsLCBvZmQucG9zaXRpb24pO1xuICAgIH1cbiAgfSBlbHNlIGlmKCdFTkQnID09PSB3aGVuY2UpIHtcbiAgICBmc3RhdF9maWxlKGNvbnRleHQsIG9mZCwgdXBkYXRlX2Rlc2NyaXB0b3JfcG9zaXRpb24pO1xuICB9IGVsc2Uge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCd3aGVuY2UgYXJndW1lbnQgaXMgbm90IGEgcHJvcGVyIHZhbHVlJykpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRkaXIoY29udGV4dCwgcGF0aCwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgcmVhZF9kaXJlY3RvcnkoY29udGV4dCwgcGF0aCwgb3B0aW9ucywgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiB0b1VuaXhUaW1lc3RhbXAodGltZSkge1xuICBpZiAodHlwZW9mIHRpbWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHRpbWU7XG4gIH1cbiAgaWYgKHR5cGVvZiB0aW1lID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdGltZS5nZXRUaW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRpbWUuZ2V0VGltZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHV0aW1lcyhjb250ZXh0LCBwYXRoLCBhdGltZSwgbXRpbWUsIGNhbGxiYWNrKSB7XG4gIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCk7XG4gIGF0aW1lID0gKGF0aW1lKSA/IHRvVW5peFRpbWVzdGFtcChhdGltZSkgOiB0b1VuaXhUaW1lc3RhbXAoY3VycmVudFRpbWUpO1xuICBtdGltZSA9IChtdGltZSkgPyB0b1VuaXhUaW1lc3RhbXAobXRpbWUpIDogdG9Vbml4VGltZXN0YW1wKGN1cnJlbnRUaW1lKTtcblxuICB1dGltZXNfZmlsZShjb250ZXh0LCBwYXRoLCBhdGltZSwgbXRpbWUsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gZnV0aW1lcyhjb250ZXh0LCBmZCwgYXRpbWUsIG10aW1lLCBjYWxsYmFjaykge1xuICB2YXIgY3VycmVudFRpbWUgPSBEYXRlLm5vdygpO1xuICBhdGltZSA9IChhdGltZSkgPyB0b1VuaXhUaW1lc3RhbXAoYXRpbWUpIDogdG9Vbml4VGltZXN0YW1wKGN1cnJlbnRUaW1lKTtcbiAgbXRpbWUgPSAobXRpbWUpID8gdG9Vbml4VGltZXN0YW1wKG10aW1lKSA6IHRvVW5peFRpbWVzdGFtcChjdXJyZW50VGltZSk7XG5cbiAgdmFyIG9mZCA9IG9wZW5GaWxlcy5nZXRPcGVuRmlsZURlc2NyaXB0aW9uKGZkKTtcbiAgaWYoIW9mZCkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUJBREYoKSk7XG4gIH0gZWxzZSBpZighb2ZkLmZsYWdzLmluY2x1ZGVzKE9fV1JJVEUpKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FQkFERignZGVzY3JpcHRvciBkb2VzIG5vdCBwZXJtaXQgd3JpdGluZycpKTtcbiAgfSBlbHNlIHtcbiAgICBmdXRpbWVzX2ZpbGUoY29udGV4dCwgb2ZkLCBhdGltZSwgbXRpbWUsIGNhbGxiYWNrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjaG1vZChjb250ZXh0LCBwYXRoLCBtb2RlLCBjYWxsYmFjaykge1xuICBtb2RlID0gdmFsaWRhdGVBbmRNYXNrTW9kZShtb2RlLCBjYWxsYmFjayk7XG4gIGlmKCFtb2RlKSByZXR1cm47XG5cbiAgY2htb2RfZmlsZShjb250ZXh0LCBwYXRoLCBtb2RlLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIGZjaG1vZChjb250ZXh0LCBmZCwgbW9kZSwgY2FsbGJhY2spIHtcbiAgbW9kZSA9IHZhbGlkYXRlQW5kTWFza01vZGUobW9kZSwgY2FsbGJhY2spO1xuICBpZighbW9kZSkgcmV0dXJuO1xuXG4gIHZhciBvZmQgPSBvcGVuRmlsZXMuZ2V0T3BlbkZpbGVEZXNjcmlwdGlvbihmZCk7XG4gIGlmKCFvZmQpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVCQURGKCkpO1xuICB9IGVsc2UgaWYoIW9mZC5mbGFncy5pbmNsdWRlcyhPX1dSSVRFKSkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUJBREYoJ2Rlc2NyaXB0b3IgZG9lcyBub3QgcGVybWl0IHdyaXRpbmcnKSk7XG4gIH0gZWxzZSB7XG4gICAgZmNobW9kX2ZpbGUoY29udGV4dCwgb2ZkLCBtb2RlLCBjYWxsYmFjayk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hvd24oY29udGV4dCwgcGF0aCwgdWlkLCBnaWQsIGNhbGxiYWNrKSB7XG4gIGlmKCFpc1VpbnQzMih1aWQpKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCd1aWQgbXVzdCBiZSBhIHZhbGlkIGludGVnZXInLCB1aWQpKTtcbiAgfVxuICBpZighaXNVaW50MzIoZ2lkKSkge1xuICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnZ2lkIG11c3QgYmUgYSB2YWxpZCBpbnRlZ2VyJywgZ2lkKSk7XG4gIH1cblxuICBjaG93bl9maWxlKGNvbnRleHQsIHBhdGgsIHVpZCwgZ2lkLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIGZjaG93bihjb250ZXh0LCBmZCwgdWlkLCBnaWQsIGNhbGxiYWNrKSB7XG4gIGlmKCFpc1VpbnQzMih1aWQpKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCd1aWQgbXVzdCBiZSBhIHZhbGlkIGludGVnZXInLCB1aWQpKTtcbiAgfVxuICBpZighaXNVaW50MzIoZ2lkKSkge1xuICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnZ2lkIG11c3QgYmUgYSB2YWxpZCBpbnRlZ2VyJywgZ2lkKSk7XG4gIH1cblxuICB2YXIgb2ZkID0gb3BlbkZpbGVzLmdldE9wZW5GaWxlRGVzY3JpcHRpb24oZmQpO1xuICBpZighb2ZkKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FQkFERigpKTtcbiAgfSBlbHNlIGlmKCFvZmQuZmxhZ3MuaW5jbHVkZXMoT19XUklURSkpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVCQURGKCdkZXNjcmlwdG9yIGRvZXMgbm90IHBlcm1pdCB3cml0aW5nJykpO1xuICB9IGVsc2Uge1xuICAgIGZjaG93bl9maWxlKGNvbnRleHQsIG9mZCwgdWlkLCBnaWQsIGNhbGxiYWNrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW5hbWUoY29udGV4dCwgb2xkcGF0aCwgbmV3cGF0aCwgY2FsbGJhY2spIHtcbiAgb2xkcGF0aCA9IG5vcm1hbGl6ZShvbGRwYXRoKTtcbiAgbmV3cGF0aCA9IG5vcm1hbGl6ZShuZXdwYXRoKTtcblxuICB2YXIgb2xkUGFyZW50UGF0aCA9IFBhdGguZGlybmFtZShvbGRwYXRoKTtcbiAgdmFyIG5ld1BhcmVudFBhdGggPSBQYXRoLmRpcm5hbWUobmV3cGF0aCk7XG4gIHZhciBvbGROYW1lID0gUGF0aC5iYXNlbmFtZShvbGRwYXRoKTtcbiAgdmFyIG5ld05hbWUgPSBQYXRoLmJhc2VuYW1lKG5ld3BhdGgpO1xuICB2YXIgb2xkUGFyZW50RGlyZWN0b3J5LCBvbGRQYXJlbnREYXRhO1xuICB2YXIgbmV3UGFyZW50RGlyZWN0b3J5LCBuZXdQYXJlbnREYXRhO1xuICB2YXIgY3RpbWUgPSBEYXRlLm5vdygpO1xuICB2YXIgZmlsZU5vZGU7XG5cbiAgZnVuY3Rpb24gdXBkYXRlX3RpbWVzKGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWxlTm9kZSA9IHJlc3VsdDtcbiAgICAgIHVwZGF0ZV9ub2RlX3RpbWVzKGNvbnRleHQsIG5ld3BhdGgsIGZpbGVOb2RlLCB7IGN0aW1lOiBjdGltZSB9LCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZF9uZXdfZGlyZWN0b3J5KGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5nZXRPYmplY3QobmV3UGFyZW50RGF0YVtuZXdOYW1lXS5pZCwgdXBkYXRlX3RpbWVzKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVfb2xkX3BhcmVudF9kaXJlY3RvcnlfZGF0YShlcnJvcikge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKG9sZFBhcmVudERpcmVjdG9yeS5pZCA9PT0gbmV3UGFyZW50RGlyZWN0b3J5LmlkKSB7XG4gICAgICAgIG9sZFBhcmVudERhdGEgPSBuZXdQYXJlbnREYXRhO1xuICAgICAgfVxuICAgICAgZGVsZXRlIG9sZFBhcmVudERhdGFbb2xkTmFtZV07XG4gICAgICBjb250ZXh0LnB1dE9iamVjdChvbGRQYXJlbnREaXJlY3RvcnkuZGF0YSwgb2xkUGFyZW50RGF0YSwgcmVhZF9uZXdfZGlyZWN0b3J5KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVfbmV3X3BhcmVudF9kaXJlY3RvcnlfZGF0YShlcnJvcikge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1BhcmVudERhdGFbbmV3TmFtZV0gPSBvbGRQYXJlbnREYXRhW29sZE5hbWVdO1xuICAgICAgY29udGV4dC5wdXRPYmplY3QobmV3UGFyZW50RGlyZWN0b3J5LmRhdGEsIG5ld1BhcmVudERhdGEsIHVwZGF0ZV9vbGRfcGFyZW50X2RpcmVjdG9yeV9kYXRhKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja19pZl9uZXdfZGlyZWN0b3J5X2V4aXN0cyhlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3UGFyZW50RGF0YSA9IHJlc3VsdDtcbiAgICAgIGlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuZXdQYXJlbnREYXRhLCBuZXdOYW1lKSkge1xuICAgICAgICByZW1vdmVfZGlyZWN0b3J5KGNvbnRleHQsIG5ld3BhdGgsIHVwZGF0ZV9uZXdfcGFyZW50X2RpcmVjdG9yeV9kYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVwZGF0ZV9uZXdfcGFyZW50X2RpcmVjdG9yeV9kYXRhKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZF9uZXdfcGFyZW50X2RpcmVjdG9yeV9kYXRhKGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdQYXJlbnREaXJlY3RvcnkgPSByZXN1bHQ7XG4gICAgICBjb250ZXh0LmdldE9iamVjdChuZXdQYXJlbnREaXJlY3RvcnkuZGF0YSwgY2hlY2tfaWZfbmV3X2RpcmVjdG9yeV9leGlzdHMpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldF9uZXdfcGFyZW50X2RpcmVjdG9yeShlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2xkUGFyZW50RGF0YSA9IHJlc3VsdDtcbiAgICAgIGZpbmRfbm9kZShjb250ZXh0LCBuZXdQYXJlbnRQYXRoLCByZWFkX25ld19wYXJlbnRfZGlyZWN0b3J5X2RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRfcGFyZW50X2RpcmVjdG9yeV9kYXRhKGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbGRQYXJlbnREaXJlY3RvcnkgPSByZXN1bHQ7XG4gICAgICBjb250ZXh0LmdldE9iamVjdChyZXN1bHQuZGF0YSwgZ2V0X25ld19wYXJlbnRfZGlyZWN0b3J5KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1bmxpbmtfb2xkX2ZpbGUoZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bmxpbmtfbm9kZShjb250ZXh0LCBvbGRwYXRoLCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tfbm9kZV90eXBlKGVycm9yLCBub2RlKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2UgaWYobm9kZS50eXBlID09PSBOT0RFX1RZUEVfRElSRUNUT1JZKSB7XG4gICAgICBmaW5kX25vZGUoY29udGV4dCwgb2xkUGFyZW50UGF0aCwgcmVhZF9wYXJlbnRfZGlyZWN0b3J5X2RhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaW5rX25vZGUoY29udGV4dCwgb2xkcGF0aCwgbmV3cGF0aCwgdW5saW5rX29sZF9maWxlKTtcbiAgICB9XG4gIH1cblxuICBmaW5kX25vZGUoY29udGV4dCwgb2xkcGF0aCwgY2hlY2tfbm9kZV90eXBlKTtcbn1cblxuZnVuY3Rpb24gc3ltbGluayhjb250ZXh0LCBzcmNwYXRoLCBkc3RwYXRoLCB0eXBlLCBjYWxsYmFjaykge1xuICAvLyBOT1RFOiB3ZSBzdXBwb3J0IHBhc3NpbmcgdGhlIGB0eXBlYCBhcmcsIGJ1dCBpZ25vcmUgaXQuXG4gIGNhbGxiYWNrID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgbWFrZV9zeW1ib2xpY19saW5rKGNvbnRleHQsIHNyY3BhdGgsIGRzdHBhdGgsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gcmVhZGxpbmsoY29udGV4dCwgcGF0aCwgY2FsbGJhY2spIHtcbiAgcmVhZF9saW5rKGNvbnRleHQsIHBhdGgsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gbHN0YXQoY29udGV4dCwgcGF0aCwgY2FsbGJhY2spIHtcbiAgZnVuY3Rpb24gY2hlY2tfcmVzdWx0KGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RhdHMgPSBuZXcgU3RhdHMocGF0aCwgcmVzdWx0LCBjb250ZXh0Lm5hbWUpO1xuICAgICAgY2FsbGJhY2sobnVsbCwgc3RhdHMpO1xuICAgIH1cbiAgfVxuXG4gIGxzdGF0X2ZpbGUoY29udGV4dCwgcGF0aCwgY2hlY2tfcmVzdWx0KTtcbn1cblxuZnVuY3Rpb24gdHJ1bmNhdGUoY29udGV4dCwgcGF0aCwgbGVuZ3RoLCBjYWxsYmFjaykge1xuICAvLyBOT1RFOiBsZW5ndGggaXMgb3B0aW9uYWxcbiAgY2FsbGJhY2sgPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdO1xuICBsZW5ndGggPSBsZW5ndGggfHwgMDtcblxuICBpZih2YWxpZGF0ZUludGVnZXIobGVuZ3RoLCBjYWxsYmFjaykgIT09IGxlbmd0aCkgcmV0dXJuO1xuXG4gIHRydW5jYXRlX2ZpbGUoY29udGV4dCwgcGF0aCwgbGVuZ3RoLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIGZ0cnVuY2F0ZShjb250ZXh0LCBmZCwgbGVuZ3RoLCBjYWxsYmFjaykge1xuICAvLyBOT1RFOiBsZW5ndGggaXMgb3B0aW9uYWxcbiAgY2FsbGJhY2sgPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdO1xuICBsZW5ndGggPSBsZW5ndGggfHwgMDtcblxuICB2YXIgb2ZkID0gb3BlbkZpbGVzLmdldE9wZW5GaWxlRGVzY3JpcHRpb24oZmQpO1xuICBpZighb2ZkKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FQkFERigpKTtcbiAgfSBlbHNlIGlmKCFvZmQuZmxhZ3MuaW5jbHVkZXMoT19XUklURSkpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVCQURGKCdkZXNjcmlwdG9yIGRvZXMgbm90IHBlcm1pdCB3cml0aW5nJykpO1xuICB9IGVsc2Uge1xuICAgIGlmKHZhbGlkYXRlSW50ZWdlcihsZW5ndGgsIGNhbGxiYWNrKSAhPT0gbGVuZ3RoKSByZXR1cm47XG4gICAgZnRydW5jYXRlX2ZpbGUoY29udGV4dCwgb2ZkLCBsZW5ndGgsIGNhbGxiYWNrKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYXBwZW5kRmlsZSxcbiAgYWNjZXNzLFxuICBjaG93bixcbiAgY2htb2QsXG4gIGNsb3NlLFxuICAvLyBjb3B5RmlsZSAtIGh0dHBzOi8vZ2l0aHViLmNvbS9maWxlcmpzL2ZpbGVyL2lzc3Vlcy80MzZcbiAgZW5zdXJlUm9vdERpcmVjdG9yeTogZW5zdXJlX3Jvb3RfZGlyZWN0b3J5LFxuICBleGlzdHMsXG4gIGZjaG93bixcbiAgZmNobW9kLFxuICAvLyBmZGF0YXN5bmMgLSBodHRwczovL2dpdGh1Yi5jb20vZmlsZXJqcy9maWxlci9pc3N1ZXMvNjUzXG4gIGZnZXR4YXR0cixcbiAgZnJlbW92ZXhhdHRyLFxuICBmc2V0eGF0dHIsXG4gIGZzdGF0LFxuICBmc3luYyxcbiAgZnRydW5jYXRlLFxuICBmdXRpbWVzLFxuICBnZXR4YXR0cixcbiAgLy8gbGNob3duIC0gaHR0cHM6Ly9naXRodWIuY29tL2ZpbGVyanMvZmlsZXIvaXNzdWVzLzYyMFxuICAvLyBsY2htb2QgLSBodHRwczovL2dpdGh1Yi5jb20vZmlsZXJqcy9maWxlci9pc3N1ZXMvNjE5XG4gIGxpbmssXG4gIGxzZWVrLFxuICBsc3RhdCxcbiAgbWtkaXIsXG4gIG1rZHRlbXAsXG4gIG1rbm9kLFxuICBvcGVuLFxuICByZWFkZGlyLFxuICByZWFkLFxuICByZWFkRmlsZSxcbiAgcmVhZGxpbmssXG4gIC8vIHJlYWxwYXRoIC0gaHR0cHM6Ly9naXRodWIuY29tL2ZpbGVyanMvZmlsZXIvaXNzdWVzLzg1XG4gIHJlbW92ZXhhdHRyLFxuICByZW5hbWUsXG4gIHJtZGlyLFxuICBzZXR4YXR0cixcbiAgc3RhdCxcbiAgc3ltbGluayxcbiAgdHJ1bmNhdGUsXG4gIC8vIHVud2F0Y2hGaWxlIC0gaW1wbGVtZW50ZWQgaW4gaW50ZXJmYWNlLmpzXG4gIHVubGluayxcbiAgdXRpbWVzLFxuICAvLyB3YXRjaCAtIGltcGxlbWVudGVkIGluIGludGVyZmFjZS5qc1xuICAvLyB3YXRjaEZpbGUgLSBpbXBsZW1lbnRlZCBpbiBpbnRlcmZhY2UuanNcbiAgd3JpdGVGaWxlLFxuICB3cml0ZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgeyBwcm9taXNpZnkgfSA9IHJlcXVpcmUoJ2VzNi1wcm9taXNpZnknKTtcblxuY29uc3QgUGF0aCA9IHJlcXVpcmUoJy4uL3BhdGguanMnKTtcblxuY29uc3QgcHJvdmlkZXJzID0gcmVxdWlyZSgnLi4vcHJvdmlkZXJzL2luZGV4LmpzJyk7XG5cbmNvbnN0IFNoZWxsID0gcmVxdWlyZSgnLi4vc2hlbGwvc2hlbGwuanMnKTtcbmNvbnN0IEludGVyY29tID0gcmVxdWlyZSgnLi4vLi4vbGliL2ludGVyY29tLmpzJyk7XG5jb25zdCBGU1dhdGNoZXIgPSByZXF1aXJlKCcuLi9mcy13YXRjaGVyLmpzJyk7XG5jb25zdCBFcnJvcnMgPSByZXF1aXJlKCcuLi9lcnJvcnMuanMnKTtcbmNvbnN0IHtcbiAgbm9wLFxuICBndWlkOiBkZWZhdWx0R3VpZEZuXG59ID0gcmVxdWlyZSgnLi4vc2hhcmVkLmpzJyk7XG5cbmNvbnN0IHtcbiAgZnNDb25zdGFudHMsXG4gIEZJTEVfU1lTVEVNX05BTUUsXG4gIEZTX0ZPUk1BVCxcbiAgRlNfUkVBRFksXG4gIEZTX1BFTkRJTkcsXG4gIEZTX0VSUk9SLFxuICBGU19OT0RVUEVJRENIRUNLLFxuICBTVERJTixcbiAgU1RET1VULFxuICBTVERFUlJcbn0gPSByZXF1aXJlKCcuLi9jb25zdGFudHMuanMnKTtcblxuLy8gVGhlIGNvcmUgZnMgb3BlcmF0aW9ucyBsaXZlIG9uIGltcGxcbmNvbnN0IGltcGwgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uLmpzJyk7XG5cbi8vIG5vZGUuanMgc3VwcG9ydHMgYSBjYWxsaW5nIHBhdHRlcm4gdGhhdCBsZWF2ZXMgb2ZmIGEgY2FsbGJhY2suXG5mdW5jdGlvbiBtYXliZUNhbGxiYWNrKGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gY2FsbGJhY2s7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9O1xufVxuXG4vLyBEZWZhdWx0IGNhbGxiYWNrIHRoYXQgbG9ncyBhbiBlcnJvciBpZiBwYXNzZWQgaW5cbmZ1bmN0aW9uIGRlZmF1bHRDYWxsYmFjayhlcnIpIHtcbiAgaWYgKGVycikge1xuICAgIC8qIGVzbGludCBuby1jb25zb2xlOiAwICovXG4gICAgY29uc29sZS5lcnJvcignRmlsZXIgZXJyb3I6ICcsIGVycik7XG4gIH1cbn1cbi8vIEdldCBhIHBhdGggKFN0cmluZykgZnJvbSBhIGZpbGU6Ly8gVVJMLiBTdXBwb3J0IFVSTCgpIGxpa2Ugb2JqZWN0c1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvOTY4ZTkwMWFmZjM4YTM0M2IxZGU0YWRkZWJmNzlmZDhmYTk5MWM1OS9saWIvaW50ZXJuYWwvdXJsLmpzI0wxMzgxXG5mdW5jdGlvbiB0b1BhdGhJZkZpbGVVUkwoZmlsZVVSTE9yUGF0aCkge1xuICBpZiAoIShmaWxlVVJMT3JQYXRoICYmXG4gICAgZmlsZVVSTE9yUGF0aC5wcm90b2NvbCAmJlxuICAgIGZpbGVVUkxPclBhdGgucGF0aG5hbWUpKSB7XG4gICAgcmV0dXJuIGZpbGVVUkxPclBhdGg7XG4gIH1cblxuICBpZiAoZmlsZVVSTE9yUGF0aC5wcm90b2NvbCAhPT0gJ2ZpbGU6Jykge1xuICAgIHRocm93IG5ldyBFcnJvcnMuRUlOVkFMKCdvbmx5IGZpbGU6IFVSTHMgYXJlIHN1cHBvcnRlZCBmb3IgcGF0aHMnLCBmaWxlVVJMT3JQYXRoKTtcbiAgfVxuXG4gIGNvbnN0IHBhdGhuYW1lID0gZmlsZVVSTE9yUGF0aC5wYXRobmFtZTtcbiAgZm9yIChsZXQgbiA9IDA7IG4gPCBwYXRobmFtZS5sZW5ndGg7IG4rKykge1xuICAgIGlmIChwYXRobmFtZVtuXSA9PT0gJyUnKSB7XG4gICAgICBjb25zdCB0aGlyZCA9IHBhdGhuYW1lLmNvZGVQb2ludEF0KG4gKyAyKSB8IDB4MjA7XG4gICAgICBpZiAocGF0aG5hbWVbbiArIDFdID09PSAnMicgJiYgdGhpcmQgPT09IDEwMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3JzLkVJTlZBTCgnZmlsZTogVVJMcyBtdXN0IG5vdCBpbmNsdWRlIGVuY29kZWQgLyBjaGFyYWN0ZXJzJywgZmlsZVVSTE9yUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChwYXRobmFtZSk7XG59XG5cbi8vIEFsbG93IEJ1ZmZlcnMgZm9yIHBhdGhzLiBBc3N1bWVzIHdlIHdhbnQgVVRGOC5cbmZ1bmN0aW9uIHRvUGF0aElmQnVmZmVyKGJ1ZmZlck9yUGF0aCkge1xuICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGJ1ZmZlck9yUGF0aCkgPyBidWZmZXJPclBhdGgudG9TdHJpbmcoKSA6IGJ1ZmZlck9yUGF0aDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVQYXRoKHBhdGgsIGFsbG93UmVsYXRpdmUpIHtcbiAgaWYgKCFwYXRoKSB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcnMuRUlOVkFMKCdQYXRoIG11c3QgYmUgYSBzdHJpbmcnLCBwYXRoKTtcbiAgfSBlbHNlIGlmIChQYXRoLmlzTnVsbChwYXRoKSkge1xuICAgIHJldHVybiBuZXcgRXJyb3JzLkVJTlZBTCgnUGF0aCBtdXN0IGJlIGEgc3RyaW5nIHdpdGhvdXQgbnVsbCBieXRlcy4nLCBwYXRoKTtcbiAgfSBlbHNlIGlmICghYWxsb3dSZWxhdGl2ZSAmJiAhUGF0aC5pc0Fic29sdXRlKHBhdGgpKSB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcnMuRUlOVkFMKCdQYXRoIG11c3QgYmUgYWJzb2x1dGUuJywgcGF0aCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1BhdGhBcmcoYXJncywgaWR4LCBhbGxvd1JlbGF0aXZlKSB7XG4gIGxldCBwYXRoID0gYXJnc1tpZHhdO1xuICBwYXRoID0gdG9QYXRoSWZGaWxlVVJMKHBhdGgpO1xuICBwYXRoID0gdG9QYXRoSWZCdWZmZXIocGF0aCk7XG5cbiAgLy8gU29tZSBtZXRob2RzIHNwZWNpZmljYWxseSBhbGxvdyBmb3IgcmVsIHBhdGhzIChlZyBzeW1saW5rIHdpdGggc3JjUGF0aClcbiAgbGV0IGVyciA9IHZhbGlkYXRlUGF0aChwYXRoLCBhbGxvd1JlbGF0aXZlKTtcbiAgaWYgKGVycikge1xuICAgIHRocm93IGVycjtcbiAgfVxuXG4gIC8vIE92ZXJ3cml0ZSBwYXRoIGFyZyB3aXRoIGNvbnZlcnRlZCBhbmQgdmFsaWRhdGVkIHBhdGhcbiAgYXJnc1tpZHhdID0gcGF0aDtcbn1cblxuLyoqXG4gKiBGaWxlU3lzdGVtXG4gKlxuICogQSBGaWxlU3lzdGVtIHRha2VzIGFuIGBvcHRpb25zYCBvYmplY3QsIHdoaWNoIGNhbiBzcGVjaWZ5IGEgbnVtYmVyIG9mLFxuICogb3B0aW9ucy4gIEFsbCBvcHRpb25zIGFyZSBvcHRpb25hbCwgYW5kIGluY2x1ZGU6XG4gKlxuICogbmFtZTogdGhlIG5hbWUgb2YgdGhlIGZpbGUgc3lzdGVtLCBkZWZhdWx0cyB0byBcImxvY2FsXCJcbiAqXG4gKiBmbGFnczogb25lIG9yIG1vcmUgZmxhZ3MgdG8gdXNlIHdoZW4gY3JlYXRpbmcvb3BlbmluZyB0aGUgZmlsZSBzeXN0ZW0uXG4gKiAgICAgICAgRm9yIGV4YW1wbGU6IFwiRk9STUFUXCIgd2lsbCBjYXVzZSB0aGUgZmlsZSBzeXN0ZW0gdG8gYmUgZm9ybWF0dGVkLlxuICogICAgICAgIE5vIGV4cGxpY2l0IGZsYWdzIGFyZSBzZXQgYnkgZGVmYXVsdC5cbiAqXG4gKiBwcm92aWRlcjogYW4gZXhwbGljaXQgc3RvcmFnZSBwcm92aWRlciB0byB1c2UgZm9yIHRoZSBmaWxlXG4gKiAgICAgICAgICAgc3lzdGVtJ3MgZGF0YWJhc2UgY29udGV4dCBwcm92aWRlci4gIEEgbnVtYmVyIG9mIGNvbnRleHRcbiAqICAgICAgICAgICBwcm92aWRlcnMgYXJlIGluY2x1ZGVkIChzZWUgL3NyYy9wcm92aWRlcnMpLCBhbmQgdXNlcnNcbiAqICAgICAgICAgICBjYW4gd3JpdGUgb25lIG9mIHRoZWlyIG93biBhbmQgcGFzcyBpdCBpbiB0byBiZSB1c2VkLlxuICogICAgICAgICAgIEJ5IGRlZmF1bHQgYW4gSW5kZXhlZERCIHByb3ZpZGVyIGlzIHVzZWQuXG4gKlxuICogZ3VpZDogYSBmdW5jdGlvbiBmb3IgZ2VuZXJhdGluZyB1bmlxdWUgSURzIGZvciBub2RlcyBpbiB0aGUgZmlsZXN5c3RlbS5cbiAqICAgICAgIFVzZSB0aGlzIHRvIG92ZXJyaWRlIHRoZSBidWlsdC1pbiBVVUlEIGdlbmVyYXRpb24uIChVc2VkIG1haW5seSBmb3IgdGVzdHMpLlxuICpcbiAqIGNhbGxiYWNrOiBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGZpbGUgc3lzdGVtIGJlY29tZXNcbiAqICAgICAgICAgICByZWFkeSBmb3IgdXNlLiBEZXBlbmRpbmcgb24gdGhlIGNvbnRleHQgcHJvdmlkZXIgdXNlZCwgdGhpcyBtaWdodFxuICogICAgICAgICAgIGJlIHJpZ2h0IGF3YXksIG9yIGNvdWxkIHRha2Ugc29tZSB0aW1lLiBUaGUgY2FsbGJhY2sgc2hvdWxkIGV4cGVjdFxuICogICAgICAgICAgIGFuIGBlcnJvcmAgYXJndW1lbnQsIHdoaWNoIHdpbGwgYmUgbnVsbCBpZiBldmVyeXRoaW5nIHdvcmtlZC4gIEFsc29cbiAqICAgICAgICAgICB1c2VycyBzaG91bGQgY2hlY2sgdGhlIGZpbGUgc3lzdGVtJ3MgYHJlYWR5U3RhdGVgIGFuZCBgZXJyb3JgXG4gKiAgICAgICAgICAgcHJvcGVydGllcyB0byBtYWtlIHN1cmUgaXQgaXMgdXNhYmxlLlxuICovXG5mdW5jdGlvbiBGaWxlU3lzdGVtKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGRlZmF1bHRDYWxsYmFjaztcblxuICBjb25zdCBmbGFncyA9IG9wdGlvbnMuZmxhZ3MgfHwgW107XG4gIGNvbnN0IGd1aWQgPSBvcHRpb25zLmd1aWQgPyBvcHRpb25zLmd1aWQgOiBkZWZhdWx0R3VpZEZuO1xuICBjb25zdCBwcm92aWRlciA9IG9wdGlvbnMucHJvdmlkZXIgfHwgbmV3IHByb3ZpZGVycy5EZWZhdWx0KG9wdGlvbnMubmFtZSB8fCBGSUxFX1NZU1RFTV9OQU1FKTtcbiAgLy8gSWYgd2UncmUgZ2l2ZW4gYSBwcm92aWRlciwgbWF0Y2ggaXRzIG5hbWUgdW5sZXNzIHdlIGdldCBhbiBleHBsaWNpdCBuYW1lXG4gIGNvbnN0IG5hbWUgPSBvcHRpb25zLm5hbWUgfHwgcHJvdmlkZXIubmFtZTtcbiAgY29uc3QgZm9yY2VGb3JtYXR0aW5nID0gZmxhZ3MuaW5jbHVkZXMoRlNfRk9STUFUKTtcblxuICBjb25zdCBmcyA9IHRoaXM7XG4gIGZzLnJlYWR5U3RhdGUgPSBGU19QRU5ESU5HO1xuICBmcy5uYW1lID0gbmFtZTtcbiAgZnMuZXJyb3IgPSBudWxsO1xuXG4gIGZzLnN0ZGluID0gU1RESU47XG4gIGZzLnN0ZG91dCA9IFNURE9VVDtcbiAgZnMuc3RkZXJyID0gU1RERVJSO1xuXG4gIC8vIEV4cG9zZSBOb2RlJ3MgZnMuY29uc3RhbnRzIHRvIHVzZXJzXG4gIGZzLmNvbnN0YW50cyA9IGZzQ29uc3RhbnRzO1xuICAvLyBOb2RlIGFsc28gZm9yd2FyZHMgdGhlIGFjY2VzcyBtb2RlIGZsYWdzIG9udG8gZnNcbiAgZnMuRl9PSyA9IGZzQ29uc3RhbnRzLkZfT0s7XG4gIGZzLlJfT0sgPSBmc0NvbnN0YW50cy5SX09LO1xuICBmcy5XX09LID0gZnNDb25zdGFudHMuV19PSztcbiAgZnMuWF9PSyA9IGZzQ29uc3RhbnRzLlhfT0s7XG5cbiAgLy8gRXhwb3NlIFNoZWxsIGNvbnN0cnVjdG9yXG4gIHRoaXMuU2hlbGwgPSBTaGVsbC5iaW5kKHVuZGVmaW5lZCwgdGhpcyk7XG5cbiAgLy8gU2FmZWx5IGV4cG9zZSB0aGUgb3BlcmF0aW9uIHF1ZXVlXG4gIGxldCBxdWV1ZSA9IFtdO1xuICB0aGlzLnF1ZXVlT3JSdW4gPSBmdW5jdGlvbiAob3BlcmF0aW9uKSB7XG4gICAgbGV0IGVycm9yO1xuXG4gICAgaWYgKEZTX1JFQURZID09PSBmcy5yZWFkeVN0YXRlKSB7XG4gICAgICBvcGVyYXRpb24uY2FsbChmcyk7XG4gICAgfSBlbHNlIGlmIChGU19FUlJPUiA9PT0gZnMucmVhZHlTdGF0ZSkge1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3JzLkVGSUxFU1lTVEVNRVJST1IoJ3Vua25vd24gZXJyb3InKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcXVldWUucHVzaChvcGVyYXRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJvcjtcbiAgfTtcbiAgZnVuY3Rpb24gcnVuUXVldWVkKCkge1xuICAgIHF1ZXVlLmZvckVhY2goZnVuY3Rpb24gKG9wZXJhdGlvbikge1xuICAgICAgb3BlcmF0aW9uLmNhbGwodGhpcyk7XG4gICAgfS5iaW5kKGZzKSk7XG4gICAgcXVldWUgPSBudWxsO1xuICB9XG5cbiAgLy8gV2Ugc3VwcG9ydCB0aGUgb3B0aW9uYWwgYG9wdGlvbnNgIGFyZyBmcm9tIG5vZGUsIGJ1dCBpZ25vcmUgaXRcbiAgdGhpcy53YXRjaCA9IGZ1bmN0aW9uIChmaWxlbmFtZSwgb3B0aW9ucywgbGlzdGVuZXIpIHtcbiAgICBpZiAoUGF0aC5pc051bGwoZmlsZW5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhdGggbXVzdCBiZSBhIHN0cmluZyB3aXRob3V0IG51bGwgYnl0ZXMuJyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbGlzdGVuZXIgPSBvcHRpb25zO1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBsaXN0ZW5lciA9IGxpc3RlbmVyIHx8IG5vcDtcblxuICAgIGNvbnN0IHdhdGNoZXIgPSBuZXcgRlNXYXRjaGVyKCk7XG4gICAgd2F0Y2hlci5zdGFydChmaWxlbmFtZSwgZmFsc2UsIG9wdGlvbnMucmVjdXJzaXZlKTtcbiAgICB3YXRjaGVyLm9uKCdjaGFuZ2UnLCBsaXN0ZW5lcik7XG5cbiAgICByZXR1cm4gd2F0Y2hlcjtcbiAgfTtcblxuICAvLyBEZWFsIHdpdGggdmFyaW91cyBhcHByb2FjaGVzIHRvIG5vZGUgSUQgY3JlYXRpb25cbiAgZnVuY3Rpb24gd3JhcHBlZEd1aWRGbihjb250ZXh0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgLy8gU2tpcCB0aGUgZHVwbGljYXRlIElEIGNoZWNrIGlmIGFza2VkIHRvXG4gICAgICBpZiAoZmxhZ3MuaW5jbHVkZXMoRlNfTk9EVVBFSURDSEVDSykpIHtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgZ3VpZCgpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBPdGhlcndpc2UgKGRlZmF1bHQpIG1ha2Ugc3VyZSB0aGlzIGlkIGlzIHVudXNlZCBmaXJzdFxuICAgICAgZnVuY3Rpb24gZ3VpZFdpdGhDaGVjayhjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBpZCA9IGd1aWQoKTtcbiAgICAgICAgY29udGV4dC5nZXRPYmplY3QoaWQsIGZ1bmN0aW9uIChlcnIsIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBJZiB0aGlzIGlkIGlzIHVudXNlZCwgdXNlIGl0LCBvdGhlcndpc2UgZmluZCBhbm90aGVyXG4gICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgaWQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBndWlkV2l0aENoZWNrKGNhbGxiYWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZ3VpZFdpdGhDaGVjayhjYWxsYmFjayk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIExldCBvdGhlciBpbnN0YW5jZXMgKGluIHRoaXMgb3Igb3RoZXIgd2luZG93cykga25vdyBhYm91dFxuICAvLyBhbnkgY2hhbmdlcyB0byB0aGlzIGZzIGluc3RhbmNlLlxuICBmdW5jdGlvbiBicm9hZGNhc3RDaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICBpZiAoIWNoYW5nZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGludGVyY29tID0gSW50ZXJjb20uZ2V0SW5zdGFuY2UoKTtcbiAgICBjaGFuZ2VzLmZvckVhY2goZnVuY3Rpb24gKGNoYW5nZSkge1xuICAgICAgaW50ZXJjb20uZW1pdChjaGFuZ2UuZXZlbnQsIGNoYW5nZS5wYXRoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE9wZW4gZmlsZSBzeXN0ZW0gc3RvcmFnZSBwcm92aWRlclxuICBwcm92aWRlci5vcGVuKGZ1bmN0aW9uIChlcnIpIHtcbiAgICBmdW5jdGlvbiBjb21wbGV0ZShlcnJvcikge1xuICAgICAgZnVuY3Rpb24gd3JhcHBlZENvbnRleHQobWV0aG9kTmFtZSkge1xuICAgICAgICBsZXQgY29udGV4dCA9IHByb3ZpZGVyW21ldGhvZE5hbWVdKCk7XG4gICAgICAgIGNvbnRleHQubmFtZSA9IG5hbWU7XG4gICAgICAgIGNvbnRleHQuZmxhZ3MgPSBmbGFncztcbiAgICAgICAgY29udGV4dC5jaGFuZ2VzID0gW107XG4gICAgICAgIGNvbnRleHQuZ3VpZCA9IHdyYXBwZWRHdWlkRm4oY29udGV4dCk7XG5cbiAgICAgICAgLy8gV2hlbiB0aGUgY29udGV4dCBpcyBmaW5pc2hlZCwgbGV0IHRoZSBmcyBkZWFsIHdpdGggYW55IGNoYW5nZSBldmVudHNcbiAgICAgICAgY29udGV4dC5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBsZXQgY2hhbmdlcyA9IGNvbnRleHQuY2hhbmdlcztcbiAgICAgICAgICBicm9hZGNhc3RDaGFuZ2VzKGNoYW5nZXMpO1xuICAgICAgICAgIGNoYW5nZXMubGVuZ3RoID0gMDtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgIH1cblxuICAgICAgLy8gV3JhcCB0aGUgcHJvdmlkZXIgc28gd2UgY2FuIGV4dGVuZCB0aGUgY29udGV4dCB3aXRoIGZzIGZsYWdzIGFuZFxuICAgICAgLy8gYW4gYXJyYXkgb2YgY2hhbmdlcyAoZS5nLiwgd2F0Y2ggZXZlbnQgJ2NoYW5nZScgYW5kICdyZW5hbWUnIGV2ZW50c1xuICAgICAgLy8gZm9yIHBhdGhzIHVwZGF0ZWQgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGUgY29udGV4dCkuIEZyb20gdGhpc1xuICAgICAgLy8gcG9pbnQgZm9yd2FyZCB3ZSB3b24ndCBjYWxsIG9wZW4gYWdhaW4sIHNvIGl0J3Mgc2FmZSB0byBkcm9wIGl0LlxuICAgICAgZnMucHJvdmlkZXIgPSB7XG4gICAgICAgIG9wZW5SZWFkV3JpdGVDb250ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHdyYXBwZWRDb250ZXh0KCdnZXRSZWFkV3JpdGVDb250ZXh0Jyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9wZW5SZWFkT25seUNvbnRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gd3JhcHBlZENvbnRleHQoJ2dldFJlYWRPbmx5Q29udGV4dCcpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgZnMucmVhZHlTdGF0ZSA9IEZTX0VSUk9SO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnMucmVhZHlTdGF0ZSA9IEZTX1JFQURZO1xuICAgICAgfVxuICAgICAgcnVuUXVldWVkKCk7XG4gICAgICBjYWxsYmFjayhlcnJvciwgZnMpO1xuICAgIH1cblxuICAgIGlmIChlcnIpIHtcbiAgICAgIHJldHVybiBjb21wbGV0ZShlcnIpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQgPSBwcm92aWRlci5nZXRSZWFkV3JpdGVDb250ZXh0KCk7XG4gICAgY29udGV4dC5ndWlkID0gd3JhcHBlZEd1aWRGbihjb250ZXh0KTtcblxuICAgIC8vIE1vdW50IHRoZSBmaWxlc3lzdGVtLCBmb3JtYXR0aW5nIGlmIG5lY2Vzc2FyeVxuICAgIGlmIChmb3JjZUZvcm1hdHRpbmcpIHtcbiAgICAgIC8vIFdpcGUgdGhlIHN0b3JhZ2UgcHJvdmlkZXIsIHRoZW4gd3JpdGUgcm9vdCBibG9ja1xuICAgICAgY29udGV4dC5jbGVhcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gY29tcGxldGUoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpbXBsLmVuc3VyZVJvb3REaXJlY3RvcnkoY29udGV4dCwgY29tcGxldGUpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVzZSBleGlzdGluZyAob3IgY3JlYXRlIG5ldykgcm9vdCBhbmQgbW91bnRcbiAgICAgIGltcGwuZW5zdXJlUm9vdERpcmVjdG9yeShjb250ZXh0LCBjb21wbGV0ZSk7XG4gICAgfVxuICB9KTtcbiAgRmlsZVN5c3RlbS5wcm90b3R5cGUucHJvbWlzZXMgPSB7fTtcblxuICAvKipcbiAgICogUHVibGljIEFQSSBmb3IgRmlsZVN5c3RlbS4gQWxsIG5vZGUuanMgbWV0aG9kcyB0aGF0IGFyZSBleHBvc2VkIG9uIGZzLnByb21pc2VzXG4gICAqIGluY2x1ZGUgYHByb21pc2U6IHRydWVgLiAgV2UgYWxzbyBpbmNsdWRlIG91ciBvd24gZXh0cmEgbWV0aG9kcywgYnV0IHNraXAgdGhlXG4gICAqIGZkIHZlcnNpb25zIHRvIG1hdGNoIG5vZGUuanMsIHdoaWNoIHB1dHMgdGhlc2Ugb24gYSBgRmlsZUhhbmRsZWAgb2JqZWN0LlxuICAgKiBBbnkgbWV0aG9kIHRoYXQgZGVhbHMgd2l0aCBwYXRoIGFyZ3VtZW50KHMpIGFsc28gaW5jbHVkZXMgdGhlIHBvc2l0aW9uIG9mXG4gICAqIHRob3NlIGFyZ3MgaW4gb25lIG9mIGBhYnNQYXRoQXJnczogWy4uLl1gIG9yIGByZWxQYXRoQXJnczogWy4uLl1gLCBzbyB0aGV5XG4gICAqIGNhbiBiZSBwcm9jZXNzZWQgYW5kIHZhbGlkYXRlZCBiZWZvcmUgYmVpbmcgcGFzc2VkIG9uIHRvIHRoZSBtZXRob2QuXG4gICAqL1xuICBbXG4gICAgeyBuYW1lOiAnYXBwZW5kRmlsZScsIHByb21pc2VzOiB0cnVlLCBhYnNQYXRoQXJnczogWzBdIH0sXG4gICAgeyBuYW1lOiAnYWNjZXNzJywgcHJvbWlzZXM6IHRydWUsIGFic1BhdGhBcmdzOiBbMF0gfSxcbiAgICB7IG5hbWU6ICdjaG93bicsIHByb21pc2VzOiB0cnVlLCBhYnNQYXRoQXJnczogWzBdIH0sXG4gICAgeyBuYW1lOiAnY2htb2QnLCBwcm9taXNlczogdHJ1ZSwgYWJzUGF0aEFyZ3M6IFswXSB9LFxuICAgIHsgbmFtZTogJ2Nsb3NlJyB9LFxuICAgIC8vIGNvcHlGaWxlIC0gaHR0cHM6Ly9naXRodWIuY29tL2ZpbGVyanMvZmlsZXIvaXNzdWVzLzQzNlxuICAgIHsgbmFtZTogJ2V4aXN0cycsIGFic1BhdGhBcmdzOiBbMF0gfSxcbiAgICB7IG5hbWU6ICdmY2hvd24nIH0sXG4gICAgeyBuYW1lOiAnZmNobW9kJyB9LFxuICAgIC8vIGZkYXRhc3luYyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9maWxlcmpzL2ZpbGVyL2lzc3Vlcy82NTNcbiAgICB7IG5hbWU6ICdmZ2V0eGF0dHInIH0sXG4gICAgeyBuYW1lOiAnZnJlbW92ZXhhdHRyJyB9LFxuICAgIHsgbmFtZTogJ2ZzZXR4YXR0cicgfSxcbiAgICB7IG5hbWU6ICdmc3RhdCcgfSxcbiAgICB7IG5hbWU6ICdmc3luYycgfSxcbiAgICB7IG5hbWU6ICdmdHJ1bmNhdGUnIH0sXG4gICAgeyBuYW1lOiAnZnV0aW1lcycgfSxcbiAgICB7IG5hbWU6ICdnZXR4YXR0cicsIHByb21pc2VzOiB0cnVlLCBhYnNQYXRoQXJnczogWzBdIH0sXG4gICAgLy8gbGNob3duIC0gaHR0cHM6Ly9naXRodWIuY29tL2ZpbGVyanMvZmlsZXIvaXNzdWVzLzYyMFxuICAgIC8vIGxjaG1vZCAtIGh0dHBzOi8vZ2l0aHViLmNvbS9maWxlcmpzL2ZpbGVyL2lzc3Vlcy82MTlcbiAgICB7IG5hbWU6ICdsaW5rJywgcHJvbWlzZXM6IHRydWUsIGFic1BhdGhBcmdzOiBbMCwgMV0gfSxcbiAgICB7IG5hbWU6ICdsc2VlaycgfSxcbiAgICB7IG5hbWU6ICdsc3RhdCcsIHByb21pc2VzOiB0cnVlIH0sXG4gICAgeyBuYW1lOiAnbWtkaXInLCBwcm9taXNlczogdHJ1ZSwgYWJzUGF0aEFyZ3M6IFswXSB9LFxuICAgIHsgbmFtZTogJ21rZHRlbXAnLCBwcm9taXNlczogdHJ1ZSB9LFxuICAgIHsgbmFtZTogJ21rbm9kJywgcHJvbWlzZXM6IHRydWUsIGFic1BhdGhBcmdzOiBbMF0gfSxcbiAgICB7IG5hbWU6ICdvcGVuJywgcHJvbWlzZXM6IHRydWUsIGFic1BhdGhBcmdzOiBbMF0gfSxcbiAgICB7IG5hbWU6ICdyZWFkZGlyJywgcHJvbWlzZXM6IHRydWUsIGFic1BhdGhBcmdzOiBbMF0gfSxcbiAgICB7IG5hbWU6ICdyZWFkJyB9LFxuICAgIHsgbmFtZTogJ3JlYWRGaWxlJywgcHJvbWlzZXM6IHRydWUsIGFic1BhdGhBcmdzOiBbMF0gfSxcbiAgICB7IG5hbWU6ICdyZWFkbGluaycsIHByb21pc2VzOiB0cnVlLCBhYnNQYXRoQXJnczogWzBdIH0sXG4gICAgLy8gcmVhbHBhdGggLSBodHRwczovL2dpdGh1Yi5jb20vZmlsZXJqcy9maWxlci9pc3N1ZXMvODVcbiAgICB7IG5hbWU6ICdyZW1vdmV4YXR0cicsIHByb21pc2VzOiB0cnVlLCBhYnNQYXRoQXJnczogWzBdIH0sXG4gICAgeyBuYW1lOiAncmVuYW1lJywgcHJvbWlzZXM6IHRydWUsIGFic1BhdGhBcmdzOiBbMCwgMV0gfSxcbiAgICB7IG5hbWU6ICdybWRpcicsIHByb21pc2VzOiB0cnVlLCBhYnNQYXRoQXJnczogWzBdIH0sXG4gICAgeyBuYW1lOiAnc2V0eGF0dHInLCBwcm9taXNlczogdHJ1ZSwgYWJzUGF0aEFyZ3M6IFswXSB9LFxuICAgIHsgbmFtZTogJ3N0YXQnLCBwcm9taXNlczogdHJ1ZSwgYWJzUGF0aEFyZ3M6IFswXSB9LFxuICAgIHsgbmFtZTogJ3N5bWxpbmsnLCBwcm9taXNlczogdHJ1ZSwgcmVsUGF0aEFyZ3M6IFswXSwgYWJzUGF0aEFyZ3M6IFsxXSB9LFxuICAgIHsgbmFtZTogJ3RydW5jYXRlJywgcHJvbWlzZXM6IHRydWUsIGFic1BhdGhBcmdzOiBbMF0gfSxcbiAgICAvLyB1bndhdGNoRmlsZSAtIGh0dHBzOi8vZ2l0aHViLmNvbS9maWxlcmpzL2ZpbGVyL3B1bGwvNTUzXG4gICAgeyBuYW1lOiAndW5saW5rJywgcHJvbWlzZXM6IHRydWUsIGFic1BhdGhBcmdzOiBbMF0gfSxcbiAgICB7IG5hbWU6ICd1dGltZXMnLCBwcm9taXNlczogdHJ1ZSwgYWJzUGF0aEFyZ3M6IFswXSB9LFxuICAgIC8vIHdhdGNoIC0gaW1wbGVtZW50ZWQgYWJvdmUgaW4gYHRoaXMud2F0Y2hgXG4gICAgLy8gd2F0Y2hGaWxlIC0gaHR0cHM6Ly9naXRodWIuY29tL2ZpbGVyanMvZmlsZXIvaXNzdWVzLzY1NFxuICAgIHsgbmFtZTogJ3dyaXRlRmlsZScsIHByb21pc2VzOiB0cnVlLCBhYnNQYXRoQXJnczogWzBdIH0sXG4gICAgeyBuYW1lOiAnd3JpdGUnIH1cbiAgXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gbWV0aG9kLm5hbWU7XG4gICAgY29uc3Qgc2hvdWxkUHJvbWlzaWZ5ID0gbWV0aG9kLnByb21pc2VzID09PSB0cnVlO1xuXG4gICAgRmlsZVN5c3RlbS5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBmcyA9IHRoaXM7XG4gICAgICBjb25zdCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgICAgIGNvbnN0IGxhc3RBcmdJbmRleCA9IGFyZ3MubGVuZ3RoIC0gMTtcblxuICAgICAgLy8gV2UgbWF5IG9yIG1heSBub3QgZ2V0IGEgY2FsbGJhY2ssIGFuZCBzaW5jZSBub2RlLmpzIHN1cHBvcnRzXG4gICAgICAvLyBmaXJlLWFuZC1mb3JnZXQgc3R5bGUgZnMgb3BlcmF0aW9ucywgd2UgaGF2ZSB0byBkYW5jZSBhIGJpdCBoZXJlLlxuICAgICAgY29uc3QgbWlzc2luZ0NhbGxiYWNrID0gdHlwZW9mIGFyZ3NbbGFzdEFyZ0luZGV4XSAhPT0gJ2Z1bmN0aW9uJztcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gbWF5YmVDYWxsYmFjayhhcmdzW2xhc3RBcmdJbmRleF0pO1xuXG4gICAgICAvLyBEZWFsIHdpdGggcGF0aCBhcmd1bWVudHMsIHZhbGlkYXRpbmcgYW5kIG5vcm1hbGl6aW5nIEJ1ZmZlciBhbmQgZmlsZTovLyBVUkxzXG4gICAgICBpZiAobWV0aG9kLmFic1BhdGhBcmdzKSB7XG4gICAgICAgIG1ldGhvZC5hYnNQYXRoQXJncy5mb3JFYWNoKHBhdGhBcmcgPT4gcHJvY2Vzc1BhdGhBcmcoYXJncywgcGF0aEFyZywgZmFsc2UpKTtcbiAgICAgIH1cbiAgICAgIGlmIChtZXRob2QucmVsUGF0aEFyZ3MpIHtcbiAgICAgICAgbWV0aG9kLnJlbFBhdGhBcmdzLmZvckVhY2gocGF0aEFyZyA9PiBwcm9jZXNzUGF0aEFyZyhhcmdzLCBwYXRoQXJnLCB0cnVlKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVycm9yID0gZnMucXVldWVPclJ1bihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBmcy5wcm92aWRlci5vcGVuUmVhZFdyaXRlQ29udGV4dCgpO1xuXG4gICAgICAgIC8vIEZhaWwgZWFybHkgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgaW4gYW4gZXJyb3Igc3RhdGUgKGUuZy4sXG4gICAgICAgIC8vIHByb3ZpZGVyIGZhaWxlZCB0byBvcGVuLlxuICAgICAgICBpZiAoRlNfRVJST1IgPT09IGZzLnJlYWR5U3RhdGUpIHtcbiAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3JzLkVGSUxFU1lTVEVNRVJST1IoJ2ZpbGVzeXN0ZW0gdW5hdmFpbGFibGUsIG9wZXJhdGlvbiBjYW5jZWxlZCcpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKGZzLCBlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV3JhcCB0aGUgY2FsbGJhY2sgc28gd2UgY2FuIGV4cGxpY2l0bHkgY2xvc2UgdGhlIGNvbnRleHRcbiAgICAgICAgZnVuY3Rpb24gY29tcGxldGUoKSB7XG4gICAgICAgICAgY29udGV4dC5jbG9zZSgpO1xuICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KGZzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRWl0aGVyIGFkZCBvciByZXBsYWNlIHRoZSBjYWxsYmFjayB3aXRoIG91ciB3cmFwcGVyIGNvbXBsZXRlKClcbiAgICAgICAgaWYgKG1pc3NpbmdDYWxsYmFjaykge1xuICAgICAgICAgIGFyZ3MucHVzaChjb21wbGV0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXJnc1tsYXN0QXJnSW5kZXhdID0gY29tcGxldGU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGb3J3YXJkIHRoaXMgY2FsbCB0byB0aGUgaW1wbCdzIHZlcnNpb24sIHVzaW5nIHRoZSBmb2xsb3dpbmdcbiAgICAgICAgLy8gY2FsbCBzaWduYXR1cmUsIHdpdGggY29tcGxldGUoKSBhcyB0aGUgY2FsbGJhY2svbGFzdC1hcmcgbm93OlxuICAgICAgICAvLyBmbihmcywgY29udGV4dCwgYXJnMCwgYXJnMSwgLi4uICwgY29tcGxldGUpO1xuICAgICAgICBjb25zdCBmbkFyZ3MgPSBbY29udGV4dF0uY29uY2F0KGFyZ3MpO1xuICAgICAgICBpbXBsW21ldGhvZE5hbWVdLmFwcGx5KG51bGwsIGZuQXJncyk7XG4gICAgICB9KTtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIEFkZCB0byBmcy5wcm9taXNlcyBpZiBhcHByb3ByaWF0ZVxuICAgIGlmIChzaG91bGRQcm9taXNpZnkpIHtcbiAgICAgIEZpbGVTeXN0ZW0ucHJvdG90eXBlLnByb21pc2VzW21ldGhvZE5hbWVdID0gcHJvbWlzaWZ5KEZpbGVTeXN0ZW0ucHJvdG90eXBlW21ldGhvZE5hbWVdLmJpbmQoZnMpKTtcbiAgICB9XG4gIH0pO1xuXG59XG5cbi8vIEV4cG9zZSBzdG9yYWdlIHByb3ZpZGVycyBvbiBGaWxlU3lzdGVtIGNvbnN0cnVjdG9yXG5GaWxlU3lzdGVtLnByb3ZpZGVycyA9IHByb3ZpZGVycztcblxubW9kdWxlLmV4cG9ydHMgPSBGaWxlU3lzdGVtO1xuIiwiJ3VzaW5nIHN0cmljdCc7XG5cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJy4uL2xpYi9ldmVudGVtaXR0ZXIuanMnKTtcbmNvbnN0IFBhdGggPSByZXF1aXJlKCcuL3BhdGguanMnKTtcbmNvbnN0IEludGVyY29tID0gcmVxdWlyZSgnLi4vbGliL2ludGVyY29tLmpzJyk7XG5cbi8qKlxuICogRlNXYXRjaGVyIGJhc2VkIG9uIG5vZGUuanMnIEZTV2F0Y2hlclxuICogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9ibG9iL21hc3Rlci9saWIvZnMuanNcbiAqL1xuZnVuY3Rpb24gRlNXYXRjaGVyKCkge1xuICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIGxldCByZWN1cnNpdmUgPSBmYWxzZTtcbiAgbGV0IHJlY3Vyc2l2ZVBhdGhQcmVmaXg7XG4gIGxldCBmaWxlbmFtZTtcblxuICBmdW5jdGlvbiBvbmNoYW5nZShwYXRoKSB7XG4gICAgLy8gV2F0Y2ggZm9yIGV4YWN0IGZpbGVuYW1lLCBvciBwYXJlbnQgcGF0aCB3aGVuIHJlY3Vyc2l2ZSBpcyB0cnVlLlxuICAgIGlmKGZpbGVuYW1lID09PSBwYXRoIHx8IChyZWN1cnNpdmUgJiYgcGF0aC5pbmRleE9mKHJlY3Vyc2l2ZVBhdGhQcmVmaXgpID09PSAwKSkge1xuICAgICAgc2VsZi50cmlnZ2VyKCdjaGFuZ2UnLCAnY2hhbmdlJywgcGF0aCk7XG4gICAgfVxuICB9XG5cbiAgLy8gV2Ugc3VwcG9ydCwgYnV0IGlnbm9yZSB0aGUgc2Vjb25kIGFyZywgd2hpY2ggbm9kZS5qcyB1c2VzLlxuICBzZWxmLnN0YXJ0ID0gZnVuY3Rpb24oZmlsZW5hbWVfLCBwZXJzaXN0ZW50XywgcmVjdXJzaXZlXykge1xuICAgIC8vIEJhaWwgaWYgd2UndmUgYWxyZWFkeSBzdGFydGVkIChhbmQgdGhlcmVmb3JlIGhhdmUgYSBmaWxlbmFtZSk7XG4gICAgaWYoZmlsZW5hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZihQYXRoLmlzTnVsbChmaWxlbmFtZV8pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhdGggbXVzdCBiZSBhIHN0cmluZyB3aXRob3V0IG51bGwgYnl0ZXMuJyk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogZ2V0IHJlYWxwYXRoIGZvciBzeW1saW5rcyBvbiBmaWxlbmFtZS4uLlxuXG4gICAgLy8gRmlsZXIncyBQYXRoLm5vcm1hbGl6ZSBzdHJpcHMgdHJhaWxpbmcgc2xhc2hlcywgd2hpY2ggd2UgdXNlIGhlcmUuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcy1wbGF0Zm9ybS9maWxlci9pc3N1ZXMvMTA1XG4gICAgZmlsZW5hbWUgPSBQYXRoLm5vcm1hbGl6ZShmaWxlbmFtZV8pO1xuXG4gICAgLy8gV2hldGhlciB0byB3YXRjaCBiZW5lYXRoIHRoaXMgcGF0aCBvciBub3RcbiAgICByZWN1cnNpdmUgPSByZWN1cnNpdmVfID09PSB0cnVlO1xuICAgIC8vIElmIHJlY3Vyc2l2ZSwgY29uc3RydWN0IGEgcGF0aCBwcmVmaXggcG9ydGlvbiBmb3IgY29tcGFyaXNvbnMgbGF0ZXJcbiAgICAvLyAoaS5lLiwgJy9wYXRoJyBiZWNvbWVzICcvcGF0aC8nIHNvIHdlIGNhbiBzZWFyY2ggd2l0aGluIGEgZmlsZW5hbWUgZm9yIHRoZVxuICAgIC8vIHByZWZpeCkuIFdlIGFsc28gdGFrZSBjYXJlIHRvIGFsbG93IGZvciAnLycgb24gaXRzIG93bi5cbiAgICBpZihyZWN1cnNpdmUpIHtcbiAgICAgIHJlY3Vyc2l2ZVBhdGhQcmVmaXggPSBmaWxlbmFtZSA9PT0gJy8nID8gJy8nIDogZmlsZW5hbWUgKyAnLyc7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJjb20gPSBJbnRlcmNvbS5nZXRJbnN0YW5jZSgpO1xuICAgIGludGVyY29tLm9uKCdjaGFuZ2UnLCBvbmNoYW5nZSk7XG4gIH07XG5cbiAgc2VsZi5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGludGVyY29tID0gSW50ZXJjb20uZ2V0SW5zdGFuY2UoKTtcbiAgICBpbnRlcmNvbS5vZmYoJ2NoYW5nZScsIG9uY2hhbmdlKTtcbiAgICBzZWxmLnJlbW92ZUFsbExpc3RlbmVycygnY2hhbmdlJyk7XG4gIH07XG59XG5GU1dhdGNoZXIucHJvdG90eXBlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuRlNXYXRjaGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZTV2F0Y2hlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBGU1dhdGNoZXI7XG4iLCJsZXQgZnMgPSBudWxsO1xubGV0IEZpbGVyID0gbnVsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBGaWxlciA9IHtcbiAgRmlsZVN5c3RlbTogcmVxdWlyZSgnLi9maWxlc3lzdGVtL2ludGVyZmFjZS5qcycpLFxuICBCdWZmZXI6IEJ1ZmZlcixcbiAgLy8gV2UgcHJldmlvdXNseSBjYWxsZWQgdGhpcyBQYXRoLCBidXQgbm9kZSBjYWxscyBpdCBwYXRoLiBEbyBib3RoXG4gIFBhdGg6IHJlcXVpcmUoJy4vcGF0aC5qcycpLFxuICBwYXRoOiByZXF1aXJlKCcuL3BhdGguanMnKSxcbiAgRXJyb3JzOiByZXF1aXJlKCcuL2Vycm9ycy5qcycpLFxuICBTaGVsbDogcmVxdWlyZSgnLi9zaGVsbC9zaGVsbC5qcycpLFxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgSW1wb3J0aW5nIGZpbGVyIGZyb20geW91ciB3ZWJwYWNrIGNvbmZpZyBpcyBub3QgcmVjb21tZW5kZWQuXG4gICAqIFxuICAgKiBUaGUgZmlsZXIgYEZpbGVyV2VicGFja1BsdWdpbmAgY2xhc3MgaXMgZXhwb3NlZCBkaXJlY3RseS4gXG4gICAqIFxuICAgKiBgYGBcbiAgICogY29uc3QgeyBGaWxlcldlYnBhY2tQbHVnaW4gfSA9IHJlcXVpcmUoJ2ZpbGVyL3dlYnBhY2snKTtcbiAgICogYGBgXG4gICAqL1xuICBGaWxlcldlYnBhY2tQbHVnaW46IHJlcXVpcmUoJy4vd2VicGFjay1wbHVnaW4nKSxcbn07XG5cbi8vIEFkZCBhIGdldHRlciBmb3IgdGhlIGBmc2AgaW5zdGFuY2UsIHdoaWNoIHJldHVybnNcbi8vIGEgRmlsZXIgRmlsZVN5c3RlbSBpbnN0YW5jZSwgdXNpbmcgdGhlIGRlZmF1bHQgcHJvdmlkZXIvZmxhZ3MuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRmlsZXIsICdmcycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0KCkge1xuICAgIGlmKCFmcykge1xuICAgICAgZnMgPSBuZXcgRmlsZXIuRmlsZVN5c3RlbSgpO1xuICAgIH1cbiAgICByZXR1cm4gZnM7XG4gIH1cbn0pO1xuIiwiY29uc3Qge1xuICBOT0RFX1RZUEVfRklMRSxcbiAgTk9ERV9UWVBFX0RJUkVDVE9SWSxcbiAgTk9ERV9UWVBFX1NZTUJPTElDX0xJTkssXG4gIERFRkFVTFRfRklMRV9QRVJNSVNTSU9OUyxcbiAgREVGQVVMVF9ESVJfUEVSTUlTU0lPTlNcbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpO1xuY29uc3Qge1xuICBTX0lGUkVHLFxuICBTX0lGRElSLFxuICBTX0lGTE5LXG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKS5mc0NvbnN0YW50cztcblxuLyoqXG4gKiBNYWtlIHN1cmUgdGhlIG9wdGlvbnMgb2JqZWN0IGhhcyBhbiBpZCBvbiBwcm9wZXJ0eSxcbiAqIGVpdGhlciBmcm9tIGNhbGxlciBvciBvbmUgd2UgZ2VuZXJhdGUgdXNpbmcgc3VwcGxpZWQgZ3VpZCBmbi5cbiAqL1xuZnVuY3Rpb24gZW5zdXJlSUQob3B0aW9ucywgcHJvcCwgY2FsbGJhY2spIHtcbiAgaWYob3B0aW9uc1twcm9wXSkge1xuICAgIHJldHVybiBjYWxsYmFjaygpO1xuICB9XG5cbiAgb3B0aW9ucy5ndWlkKGZ1bmN0aW9uKGVyciwgaWQpIHtcbiAgICBpZihlcnIpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgIH1cbiAgICBvcHRpb25zW3Byb3BdID0gaWQ7XG4gICAgY2FsbGJhY2soKTtcbiAgfSk7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBQT1NJWCBtb2RlIChpbnRlZ2VyKSBmb3IgdGhlIG5vZGUgdHlwZSBhbmQgcGVybWlzc2lvbnMuXG4gKiBVc2UgZGVmYXVsdCBwZXJtaXNzaW9ucyBpZiB3ZSBhcmVuJ3QgcGFzc2VkIGFueS5cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVNb2RlKG5vZGVUeXBlLCBtb2RlUGVybWlzc2lvbnMpIHtcbiAgc3dpdGNoKG5vZGVUeXBlKSB7XG4gIGNhc2UgTk9ERV9UWVBFX0RJUkVDVE9SWTpcbiAgICByZXR1cm4gKG1vZGVQZXJtaXNzaW9ucyB8fCBERUZBVUxUX0RJUl9QRVJNSVNTSU9OUykgfCBTX0lGRElSO1xuICBjYXNlIE5PREVfVFlQRV9TWU1CT0xJQ19MSU5LOlxuICAgIHJldHVybiAobW9kZVBlcm1pc3Npb25zIHx8IERFRkFVTFRfRklMRV9QRVJNSVNTSU9OUykgfCBTX0lGTE5LO1xuICBjYXNlIE5PREVfVFlQRV9GSUxFOlxuICAgIC8vIGZhbGxzIHRocm91Z2hcbiAgZGVmYXVsdDpcbiAgICByZXR1cm4gKG1vZGVQZXJtaXNzaW9ucyB8fCBERUZBVUxUX0ZJTEVfUEVSTUlTU0lPTlMpIHwgU19JRlJFRztcbiAgfVxufVxuXG4vKipcbiAqIENvbW1vbiBwcm9wZXJ0aWVzIGZvciB0aGUgbGF5b3V0IG9mIGEgTm9kZVxuICovXG5jbGFzcyBOb2RlIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5pZCA9IG9wdGlvbnMuaWQ7XG4gICAgdGhpcy5kYXRhID0gb3B0aW9ucy5kYXRhOyAvLyBpZCBmb3IgZGF0YSBvYmplY3RcbiAgICB0aGlzLnNpemUgPSBvcHRpb25zLnNpemUgfHwgMDsgLy8gc2l6ZSAoYnl0ZXMgZm9yIGZpbGVzLCBlbnRyaWVzIGZvciBkaXJlY3RvcmllcylcbiAgICB0aGlzLmF0aW1lID0gb3B0aW9ucy5hdGltZSB8fCBub3c7IC8vIGFjY2VzcyB0aW1lICh3aWxsIG1pcnJvciBjdGltZSBhZnRlciBjcmVhdGlvbilcbiAgICB0aGlzLmN0aW1lID0gb3B0aW9ucy5jdGltZSB8fCBub3c7IC8vIGNyZWF0aW9uL2NoYW5nZSB0aW1lXG4gICAgdGhpcy5tdGltZSA9IG9wdGlvbnMubXRpbWUgfHwgbm93OyAvLyBtb2RpZmllZCB0aW1lXG4gICAgdGhpcy5mbGFncyA9IG9wdGlvbnMuZmxhZ3MgfHwgW107IC8vIGZpbGUgZmxhZ3NcbiAgICB0aGlzLnhhdHRycyA9IG9wdGlvbnMueGF0dHJzIHx8IHt9OyAvLyBleHRlbmRlZCBhdHRyaWJ1dGVzXG4gICAgdGhpcy5ubGlua3MgPSBvcHRpb25zLm5saW5rcyB8fCAwOyAvLyBsaW5rcyBjb3VudFxuXG4gICAgLy8gSGlzdG9yaWNhbGx5LCBGaWxlcidzIG5vZGUgbGF5b3V0IGhhcyByZWZlcnJlZCB0byB0aGVcbiAgICAvLyBub2RlIHR5cGUgYXMgYG1vZGVgLCBhbmQgZG9uZSBzbyB1c2luZyBhIFN0cmluZy4gIEluXG4gICAgLy8gYSBQT1NJWCBmaWxlc3lzdGVtLCB0aGUgbW9kZSBpcyBhIG51bWJlciB0aGF0IGNvbWJpbmVzXG4gICAgLy8gYm90aCBub2RlIHR5cGUgYW5kIHBlcm1pc3Npb24gYml0cy4gSW50ZXJuYWwgd2UgdXNlIGB0eXBlYCxcbiAgICAvLyBidXQgc3RvcmUgaXQgaW4gdGhlIGRhdGFiYXNlIGFzIGBtb2RlYCBmb3IgYmFja3dhcmRcbiAgICAvLyBjb21wYXRpYmlsaXR5LlxuICAgIGlmKHR5cGVvZiBvcHRpb25zLnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG4gICAgfSBlbHNlIGlmKHR5cGVvZiBvcHRpb25zLm1vZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLm1vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHlwZSA9IE5PREVfVFlQRV9GSUxFO1xuICAgIH1cblxuICAgIC8vIEV4dHJhIG1vZGUgcGVybWlzc2lvbnMgYW5kIG93bmVyc2hpcCBpbmZvXG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IG9wdGlvbnMucGVybWlzc2lvbnMgfHwgZ2VuZXJhdGVNb2RlKHRoaXMudHlwZSk7XG4gICAgdGhpcy51aWQgPSBvcHRpb25zLnVpZCB8fCAweDA7IC8vIG93bmVyIG5hbWVcbiAgICB0aGlzLmdpZCA9IG9wdGlvbnMuZ2lkIHx8IDB4MDsgLy8gZ3JvdXAgbmFtZVxuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBhIE5vZGUgdG8gSlNPTi4gIEV2ZXJ5dGhpbmcgaXMgYXMgZXhwZWN0ZWQgZXhjZXB0XG4gICAqIHRoYXQgd2UgdXNlIGBtb2RlYCBmb3IgYHR5cGVgIHRvIG1haW50YWluIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgICAgc2l6ZTogdGhpcy5zaXplLFxuICAgICAgYXRpbWU6IHRoaXMuYXRpbWUsXG4gICAgICBjdGltZTogdGhpcy5jdGltZSxcbiAgICAgIG10aW1lOiB0aGlzLmN0aW1lLFxuICAgICAgZmxhZ3M6IHRoaXMuZmxhZ3MsXG4gICAgICB4YXR0cnM6IHRoaXMueGF0dHJzLFxuICAgICAgbmxpbmtzOiB0aGlzLm5saW5rcyxcbiAgICAgIC8vIFVzZSBgbW9kZWAgZm9yIGB0eXBlYCB0byBrZWVwIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAgIG1vZGU6IHRoaXMudHlwZSxcbiAgICAgIHBlcm1pc3Npb25zOiB0aGlzLnBlcm1pc3Npb25zLFxuICAgICAgdWlkOiB0aGlzLnVpZCxcbiAgICAgIGdpZDogdGhpcy5naWRcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJuIGNvbXBsZXRlIFBPU0lYIGBtb2RlYCBmb3Igbm9kZSB0eXBlICsgcGVybWlzc2lvbnMuIFNlZTpcbiAgLy8gaHR0cDovL21hbjcub3JnL2xpbnV4L21hbi1wYWdlcy9tYW4yL2NobW9kLjIuaHRtbFxuICBnZXQgbW9kZSgpIHtcbiAgICByZXR1cm4gZ2VuZXJhdGVNb2RlKHRoaXMudHlwZSwgdGhpcy5wZXJtaXNzaW9ucyk7XG4gIH1cbiAgLy8gV2hlbiBzZXR0aW5nIHRoZSBgbW9kZWAgd2UgYXNzdW1lIHBlcm1pc3Npb25zIGJpdHMgb25seSAobm90IGNoYW5naW5nIHR5cGUpXG4gIHNldCBtb2RlKHZhbHVlKSB7XG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IHZhbHVlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShvcHRpb25zLCBjYWxsYmFjaykge1xuICAvLyBXZSBleHBlY3QgYm90aCBvcHRpb25zLmlkIGFuZCBvcHRpb25zLmRhdGEgdG8gYmUgcHJvdmlkZWQvZ2VuZXJhdGVkLlxuICBlbnN1cmVJRChvcHRpb25zLCAnaWQnLCBmdW5jdGlvbihlcnIpIHtcbiAgICBpZihlcnIpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgIH1cblxuICAgIGVuc3VyZUlEKG9wdGlvbnMsICdkYXRhJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgICBpZihlcnIpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICB9XG5cbiAgICAgIGNhbGxiYWNrKG51bGwsIG5ldyBOb2RlKG9wdGlvbnMpKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuIiwiY29uc3QgRXJyb3JzID0gcmVxdWlyZSgnLi9lcnJvcnMuanMnKTtcbmNvbnN0IE5vZGUgPSByZXF1aXJlKCcuL25vZGUnKTtcblxuZnVuY3Rpb24gT3BlbkZpbGVEZXNjcmlwdGlvbihwYXRoLCBpZCwgZmxhZ3MsIHBvc2l0aW9uKSB7XG4gIHRoaXMucGF0aCA9IHBhdGg7XG4gIHRoaXMuaWQgPSBpZDtcbiAgdGhpcy5mbGFncyA9IGZsYWdzO1xuICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247XG59XG5cbi8vIFRyaWVzIHRvIGZpbmQgdGhlIG5vZGUgYXNzb2NpYXRlZCB3aXRoIGFuIG9mZCdzIGBpZGAuXG4vLyBJZiBub3QgZm91bmQsIGFuIGVycm9yIGlzIHJldHVybmVkIG9uIHRoZSBjYWxsYmFjay5cbk9wZW5GaWxlRGVzY3JpcHRpb24ucHJvdG90eXBlLmdldE5vZGUgPSBmdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykge1xuICB2YXIgaWQgPSB0aGlzLmlkO1xuICB2YXIgcGF0aCA9IHRoaXMucGF0aDtcblxuICBmdW5jdGlvbiBjaGVja19pZl9ub2RlX2V4aXN0cyhlcnJvciwgbm9kZSkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZXJyb3IpO1xuICAgIH1cblxuICAgIGlmKCFub2RlKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9ycy5FQkFERignZmlsZSBkZXNjcmlwdG9yIHJlZmVycyB0byB1bmtub3duIG5vZGUnLCBwYXRoKSk7XG4gICAgfVxuXG4gICAgTm9kZS5jcmVhdGUobm9kZSwgY2FsbGJhY2spO1xuICB9XG5cbiAgY29udGV4dC5nZXRPYmplY3QoaWQsIGNoZWNrX2lmX25vZGVfZXhpc3RzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT3BlbkZpbGVEZXNjcmlwdGlvbjtcbiIsImNvbnN0IHsgRklSU1RfREVTQ1JJUFRPUiB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKTtcbmNvbnN0IG9wZW5GaWxlcyA9IHt9O1xuXG4vKipcbiAqIFN0YXJ0IGF0IEZJUlNUX0RFU0NSSVBUT1IgYW5kIGdvIHVudGlsIHdlIGZpbmRcbiAqIGFuIGVtcHR5IGZpbGUgZGVzY3JpcHRvciwgdGhlbiByZXR1cm4gaXQuXG4gKi9cbmNvbnN0IGdldEVtcHR5RGVzY3JpcHRvciA9ICgpID0+IHtcbiAgbGV0IGZkID0gRklSU1RfREVTQ1JJUFRPUjtcblxuICB3aGlsZShnZXRPcGVuRmlsZURlc2NyaXB0aW9uKGZkKSkge1xuICAgIGZkKys7XG4gIH1cblxuICByZXR1cm4gZmQ7XG59O1xuXG4vKipcbiAqIExvb2sgdXAgdGhlIG9wZW4gZmlsZSBkZXNjcmlwdGlvbiBvYmplY3QgZm9yIGEgZ2l2ZW5cbiAqIGZpbGUgZGVzY3JpcHRvci5cbiAqL1xuY29uc3QgZ2V0T3BlbkZpbGVEZXNjcmlwdGlvbiA9IG9mZCA9PiBvcGVuRmlsZXNbb2ZkXTtcblxuLyoqXG4gKiBBbGxvY2F0ZSBhIG5ldyBmaWxlIGRlc2NyaXB0b3IgZm9yIHRoZSBnaXZlblxuICogb3BlbiBmaWxlIGRlc2NyaXB0aW9uLiBcbiAqL1xuY29uc3QgYWxsb2NEZXNjcmlwdG9yID0gb3BlbkZpbGVEZXNjcmlwdGlvbiA9PiB7XG4gIGNvbnN0IG9mZCA9IGdldEVtcHR5RGVzY3JpcHRvcigpO1xuICBvcGVuRmlsZXNbb2ZkXSA9IG9wZW5GaWxlRGVzY3JpcHRpb247XG4gIHJldHVybiBvZmQ7XG59O1xuXG4vKipcbiAqIFJlbGVhc2UgdGhlIGdpdmVuIGV4aXN0aW5nIGZpbGUgZGVzY3JpcHRvciBjcmVhdGVkXG4gKiB3aXRoIGFsbG9jRGVzY3JpcHRvcigpLiBcbiAqL1xuY29uc3QgcmVsZWFzZURlc2NyaXB0b3IgPSBvZmQgPT4gZGVsZXRlIG9wZW5GaWxlc1tvZmRdO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWxsb2NEZXNjcmlwdG9yLFxuICByZWxlYXNlRGVzY3JpcHRvcixcbiAgZ2V0T3BlbkZpbGVEZXNjcmlwdGlvblxufTtcbiIsIi8qKlxuICogUGF0Y2ggcHJvY2VzcyB0byBhZGQgcHJvY2Vzcy5jd2QoKSwgYWx3YXlzIGdpdmluZyB0aGUgcm9vdCBkaXIuXG4gKiBOT1RFOiB0aGlzIGxpbmUgbmVlZHMgdG8gaGFwcGVuICpiZWZvcmUqIHdlIHJlcXVpcmUgaW4gYHBhdGhgLlxuICovXG5wcm9jZXNzLmN3ZCA9ICgpID0+ICcvJztcblxuLyoqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYnJvd3NlcmlmeS9wYXRoLWJyb3dzZXJpZnkgdmlhIFBhcmNlbC5cbiAqIFdlIHVzZSBpcyBhcyBhIGJhc2UgZm9yIG91ciBvd24gRmlsZXIuUGF0aCwgYW5kIHBhdGNoL2FkZFxuICogYSBmZXcgdGhpbmdzIHdlIG5lZWQgZm9yIHRoZSBicm93c2VyIGVudmlyb25tZW50LlxuICovXG5jb25zdCBub2RlUGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IGZpbGVyUGF0aCA9IE9iamVjdC5hc3NpZ24oe30sIG5vZGVQYXRoKTtcblxuLyoqXG4gKiBQYXRjaCBwYXRoLmJhc2VuYW1lKCkgdG8gcmV0dXJuIC8gdnMuICcnXG4gKi9cbmZpbGVyUGF0aC5iYXNlbmFtZSA9IChwYXRoLCBleHQpID0+IHtcbiAgY29uc3QgYmFzZW5hbWUgPSBub2RlUGF0aC5iYXNlbmFtZShwYXRoLCBleHQpO1xuICByZXR1cm4gYmFzZW5hbWUgPT09ICcnID8gJy8nIDogYmFzZW5hbWU7XG59O1xuXG4vKipcbiAqIFBhdGNoIHBhdGgubm9ybWFsaXplKCkgdG8gbm90IGFkZCBhIHRyYWlsaW5nIC9cbiAqL1xuZmlsZXJQYXRoLm5vcm1hbGl6ZSA9IChwYXRoKSA9PiB7XG4gIHBhdGggPSBub2RlUGF0aC5ub3JtYWxpemUocGF0aCk7XG4gIHJldHVybiBwYXRoID09PSAnLycgPyBwYXRoIDogZmlsZXJQYXRoLnJlbW92ZVRyYWlsaW5nKHBhdGgpO1xufTtcblxuLyoqXG4gKiBBZGQgbmV3IHV0aWxpdHkgbWV0aG9kIGlzTnVsbCgpIHRvIHBhdGg6IGNoZWNrIGZvciBudWxsIHBhdGhzLlxuICovXG5maWxlclBhdGguaXNOdWxsID0gcGF0aCA9PiAoJycgKyBwYXRoKS5pbmRleE9mKCdcXHUwMDAwJykgIT09IC0xO1xuXG4vKipcbiAqIEFkZCBuZXcgdXRpbGl0eSBtZXRob2QgYWRkVHJhaWxpbmcoKSB0byBhZGQgdHJhaWxpbmcgLyB3aXRob3V0IGRvdWJsaW5nIHRvIC8vLlxuICovXG5maWxlclBhdGguYWRkVHJhaWxpbmcgPSBwYXRoID0+IHBhdGgucmVwbGFjZSgvXFwvKiQvLCAnLycpO1xuXG4vKipcbiAqIEFkZCBuZXcgdXRpbGl0eSBtZXRob2QgcmVtb3ZlVHJhaWxpbmcoKSB0byByZW1vdmUgdHJhaWxpbmcgLywgZGVhbGluZyB3aXRoIG11bHRpcGxlXG4gKi9cbmZpbGVyUGF0aC5yZW1vdmVUcmFpbGluZyA9IHBhdGggPT4ge1xuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXC8qJC8sICcnKTtcbiAgcmV0dXJuIHBhdGggPT09ICcnID8gJy8nIDogcGF0aDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZmlsZXJQYXRoO1xuIiwiY29uc3QgSW5kZXhlZERCID0gcmVxdWlyZSgnLi9pbmRleGVkZGIuanMnKTtcbmNvbnN0IE1lbW9yeSA9IHJlcXVpcmUoJy4vbWVtb3J5LmpzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBJbmRleGVkREI6IEluZGV4ZWREQixcbiAgRGVmYXVsdDogSW5kZXhlZERCLFxuICBNZW1vcnk6IE1lbW9yeVxufTtcbiIsInZhciBGSUxFX1NZU1RFTV9OQU1FID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzLmpzJykuRklMRV9TWVNURU1fTkFNRTtcbnZhciBGSUxFX1NUT1JFX05BTUUgPSByZXF1aXJlKCcuLi9jb25zdGFudHMuanMnKS5GSUxFX1NUT1JFX05BTUU7XG52YXIgSURCX1JXID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzLmpzJykuSURCX1JXO1xudmFyIElEQl9STyA9IHJlcXVpcmUoJy4uL2NvbnN0YW50cy5qcycpLklEQl9STztcblxuZnVuY3Rpb24gSW5kZXhlZERCQ29udGV4dChkYiwgbW9kZSkge1xuICB0aGlzLmRiID0gZGI7XG4gIHRoaXMubW9kZSA9IG1vZGU7XG59XG5cbkluZGV4ZWREQkNvbnRleHQucHJvdG90eXBlLl9nZXRPYmplY3RTdG9yZSA9IGZ1bmN0aW9uKCkge1xuICBpZih0aGlzLm9iamVjdFN0b3JlKSB7XG4gICAgcmV0dXJuIHRoaXMub2JqZWN0U3RvcmU7XG4gIH1cblxuICB2YXIgdHJhbnNhY3Rpb24gPSB0aGlzLmRiLnRyYW5zYWN0aW9uKEZJTEVfU1RPUkVfTkFNRSwgdGhpcy5tb2RlKTtcbiAgdGhpcy5vYmplY3RTdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKEZJTEVfU1RPUkVfTkFNRSk7XG4gIHJldHVybiB0aGlzLm9iamVjdFN0b3JlO1xufTtcblxuSW5kZXhlZERCQ29udGV4dC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbihjYWxsYmFjaykge1xuICB0cnkge1xuICAgIHZhciBvYmplY3RTdG9yZSA9IHRoaXMuX2dldE9iamVjdFN0b3JlKCk7XG4gICAgdmFyIHJlcXVlc3QgPSBvYmplY3RTdG9yZS5jbGVhcigpO1xuICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH07XG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjYWxsYmFjayhldmVudC5lcnJvcik7XG4gICAgfTtcbiAgfSBjYXRjaChlcnIpIHtcbiAgICBjYWxsYmFjayhlcnIpO1xuICB9XG59O1xuXG5JbmRleGVkREJDb250ZXh0LnByb3RvdHlwZS5fZ2V0ID0gZnVuY3Rpb24oa2V5LCBjYWxsYmFjaykge1xuICB0cnkge1xuICAgIHZhciBvYmplY3RTdG9yZSA9IHRoaXMuX2dldE9iamVjdFN0b3JlKCk7XG4gICAgdmFyIHJlcXVlc3QgPSBvYmplY3RTdG9yZS5nZXQoa2V5KTtcbiAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uIG9uc3VjY2VzcyhldmVudCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7XG4gICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xuICAgIH07XG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjYWxsYmFjayhldmVudC5lcnJvcik7XG4gICAgfTtcbiAgfSBjYXRjaChlcnIpIHtcbiAgICBjYWxsYmFjayhlcnIpO1xuICB9XG59O1xuSW5kZXhlZERCQ29udGV4dC5wcm90b3R5cGUuZ2V0T2JqZWN0ID0gZnVuY3Rpb24oa2V5LCBjYWxsYmFjaykge1xuICB0aGlzLl9nZXQoa2V5LCBjYWxsYmFjayk7XG59O1xuSW5kZXhlZERCQ29udGV4dC5wcm90b3R5cGUuZ2V0QnVmZmVyID0gZnVuY3Rpb24oa2V5LCBjYWxsYmFjaykge1xuICB0aGlzLl9nZXQoa2V5LCBmdW5jdGlvbihlcnIsIGFycmF5QnVmZmVyKSB7XG4gICAgaWYoZXJyKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICB9XG4gICAgY2FsbGJhY2sobnVsbCwgQnVmZmVyLmZyb20oYXJyYXlCdWZmZXIpKTtcbiAgfSk7XG59O1xuXG5JbmRleGVkREJDb250ZXh0LnByb3RvdHlwZS5fcHV0ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgY2FsbGJhY2spIHtcbiAgdHJ5IHtcbiAgICB2YXIgb2JqZWN0U3RvcmUgPSB0aGlzLl9nZXRPYmplY3RTdG9yZSgpO1xuICAgIHZhciByZXF1ZXN0ID0gb2JqZWN0U3RvcmUucHV0KHZhbHVlLCBrZXkpO1xuICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24gb25zdWNjZXNzKGV2ZW50KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcbiAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgfTtcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNhbGxiYWNrKGV2ZW50LmVycm9yKTtcbiAgICB9O1xuICB9IGNhdGNoKGVycikge1xuICAgIGNhbGxiYWNrKGVycik7XG4gIH1cbn07XG5JbmRleGVkREJDb250ZXh0LnByb3RvdHlwZS5wdXRPYmplY3QgPSBmdW5jdGlvbihrZXksIHZhbHVlLCBjYWxsYmFjaykge1xuICB0aGlzLl9wdXQoa2V5LCB2YWx1ZSwgY2FsbGJhY2spO1xufTtcbkluZGV4ZWREQkNvbnRleHQucHJvdG90eXBlLnB1dEJ1ZmZlciA9IGZ1bmN0aW9uKGtleSwgdWludDhCYWNrZWRCdWZmZXIsIGNhbGxiYWNrKSB7XG4gIHZhciBidWYgPSB1aW50OEJhY2tlZEJ1ZmZlci5idWZmZXI7XG4gIHRoaXMuX3B1dChrZXksIGJ1ZiwgY2FsbGJhY2spO1xufTtcblxuSW5kZXhlZERCQ29udGV4dC5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24oa2V5LCBjYWxsYmFjaykge1xuICB0cnkge1xuICAgIHZhciBvYmplY3RTdG9yZSA9IHRoaXMuX2dldE9iamVjdFN0b3JlKCk7XG4gICAgdmFyIHJlcXVlc3QgPSBvYmplY3RTdG9yZS5kZWxldGUoa2V5KTtcbiAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uIG9uc3VjY2VzcyhldmVudCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7XG4gICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xuICAgIH07XG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjYWxsYmFjayhldmVudC5lcnJvcik7XG4gICAgfTtcbiAgfSBjYXRjaChlcnIpIHtcbiAgICBjYWxsYmFjayhlcnIpO1xuICB9XG59O1xuXG5cbmZ1bmN0aW9uIEluZGV4ZWREQihuYW1lKSB7XG4gIHRoaXMubmFtZSA9IG5hbWUgfHwgRklMRV9TWVNURU1fTkFNRTtcbiAgdGhpcy5kYiA9IG51bGw7XG59XG5JbmRleGVkREIuaXNTdXBwb3J0ZWQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGluZGV4ZWREQiA9IGdsb2JhbC5pbmRleGVkREIgICAgICAgfHxcbiAgICAgICAgICAgICAgICAgIGdsb2JhbC5tb3pJbmRleGVkREIgICAgfHxcbiAgICAgICAgICAgICAgICAgIGdsb2JhbC53ZWJraXRJbmRleGVkREIgfHxcbiAgICAgICAgICAgICAgICAgIGdsb2JhbC5tc0luZGV4ZWREQjtcbiAgcmV0dXJuICEhaW5kZXhlZERCO1xufTtcblxuSW5kZXhlZERCLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gIC8vIEJhaWwgaWYgd2UgYWxyZWFkeSBoYXZlIGEgZGIgb3BlblxuICBpZih0aGF0LmRiKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gIH1cblxuICB0cnkge1xuICAgIHZhciBpbmRleGVkREIgPSBnbG9iYWwuaW5kZXhlZERCICAgICAgIHx8XG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbC5tb3pJbmRleGVkREIgICAgfHxcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsLndlYmtpdEluZGV4ZWREQiB8fFxuICAgICAgICAgICAgICAgICAgICBnbG9iYWwubXNJbmRleGVkREI7XG5cbiAgICAvLyBOT1RFOiB3ZSdyZSBub3QgdXNpbmcgdmVyc2lvbmVkIGRhdGFiYXNlcy5cbiAgICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3Blbih0aGF0Lm5hbWUpO1xuXG4gICAgLy8gSWYgdGhlIGRiIGRvZXNuJ3QgZXhpc3QsIHdlJ2xsIGNyZWF0ZSBpdFxuICAgIG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uIG9udXBncmFkZW5lZWRlZChldmVudCkge1xuICAgICAgdmFyIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcblxuICAgICAgaWYoZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhGSUxFX1NUT1JFX05BTUUpKSB7XG4gICAgICAgIGRiLmRlbGV0ZU9iamVjdFN0b3JlKEZJTEVfU1RPUkVfTkFNRSk7XG4gICAgICB9XG4gICAgICBkYi5jcmVhdGVPYmplY3RTdG9yZShGSUxFX1NUT1JFX05BTUUpO1xuICAgIH07XG5cbiAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiBvbnN1Y2Nlc3MoZXZlbnQpIHtcbiAgICAgIHRoYXQuZGIgPSBldmVudC50YXJnZXQucmVzdWx0O1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuICAgIG9wZW5SZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBvbmVycm9yKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY2FsbGJhY2soZXZlbnQuZXJyb3IpO1xuICAgIH07XG4gIH0gY2F0Y2goZXJyKSB7XG4gICAgY2FsbGJhY2soZXJyKTtcbiAgfVxufTtcblxuSW5kZXhlZERCLnByb3RvdHlwZS5nZXRSZWFkT25seUNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBJbmRleGVkREJDb250ZXh0KHRoaXMuZGIsIElEQl9STyk7XG59O1xuSW5kZXhlZERCLnByb3RvdHlwZS5nZXRSZWFkV3JpdGVDb250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgSW5kZXhlZERCQ29udGV4dCh0aGlzLmRiLCBJREJfUlcpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbmRleGVkREI7XG4iLCJ2YXIgRklMRV9TWVNURU1fTkFNRSA9IHJlcXVpcmUoJy4uL2NvbnN0YW50cy5qcycpLkZJTEVfU1lTVEVNX05BTUU7XG4vLyBOT1RFOiBwcmVmZXIgc2V0SW1tZWRpYXRlIHRvIG5leHRUaWNrIGZvciBwcm9wZXIgcmVjdXJzaW9uIHlpZWxkaW5nLlxuLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcy1wbGF0Zm9ybS9maWxlci9wdWxsLzI0XG52YXIgYXN5bmNDYWxsYmFjayA9IHJlcXVpcmUoJy4uLy4uL2xpYi9hc3luYy5qcycpLnNldEltbWVkaWF0ZTtcblxuLyoqXG4gKiBNYWtlIHNoYXJlZCBpbi1tZW1vcnkgREJzIHBvc3NpYmxlIHdoZW4gdXNpbmcgdGhlIHNhbWUgbmFtZS5cbiAqL1xudmFyIGNyZWF0ZURCID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgcG9vbCA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0T3JDcmVhdGUobmFtZSkge1xuICAgIGlmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocG9vbCwgbmFtZSkpIHtcbiAgICAgIHBvb2xbbmFtZV0gPSB7fTtcbiAgICB9XG4gICAgcmV0dXJuIHBvb2xbbmFtZV07XG4gIH07XG59KCkpO1xuXG5mdW5jdGlvbiBNZW1vcnlDb250ZXh0KGRiLCByZWFkT25seSkge1xuICB0aGlzLnJlYWRPbmx5ID0gcmVhZE9ubHk7XG4gIHRoaXMub2JqZWN0U3RvcmUgPSBkYjtcbn1cblxuTWVtb3J5Q29udGV4dC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbihjYWxsYmFjaykge1xuICBpZih0aGlzLnJlYWRPbmx5KSB7XG4gICAgYXN5bmNDYWxsYmFjayhmdW5jdGlvbigpIHtcbiAgICAgIGNhbGxiYWNrKCdbTWVtb3J5Q29udGV4dF0gRXJyb3I6IHdyaXRlIG9wZXJhdGlvbiBvbiByZWFkIG9ubHkgY29udGV4dCcpO1xuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgb2JqZWN0U3RvcmUgPSB0aGlzLm9iamVjdFN0b3JlO1xuICBPYmplY3Qua2V5cyhvYmplY3RTdG9yZSkuZm9yRWFjaChmdW5jdGlvbihrZXkpe1xuICAgIGRlbGV0ZSBvYmplY3RTdG9yZVtrZXldO1xuICB9KTtcbiAgYXN5bmNDYWxsYmFjayhjYWxsYmFjayk7XG59O1xuXG4vLyBNZW1vcnkgY29udGV4dCBkb2Vzbid0IGNhcmUgYWJvdXQgZGlmZmVyZW5jZXMgYmV0d2VlbiBPYmplY3QgYW5kIEJ1ZmZlclxuTWVtb3J5Q29udGV4dC5wcm90b3R5cGUuZ2V0T2JqZWN0ID1cbk1lbW9yeUNvbnRleHQucHJvdG90eXBlLmdldEJ1ZmZlciA9XG5mdW5jdGlvbihrZXksIGNhbGxiYWNrKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgYXN5bmNDYWxsYmFjayhmdW5jdGlvbigpIHtcbiAgICBjYWxsYmFjayhudWxsLCB0aGF0Lm9iamVjdFN0b3JlW2tleV0pO1xuICB9KTtcbn07XG5NZW1vcnlDb250ZXh0LnByb3RvdHlwZS5wdXRPYmplY3QgPVxuTWVtb3J5Q29udGV4dC5wcm90b3R5cGUucHV0QnVmZmVyID1cbmZ1bmN0aW9uKGtleSwgdmFsdWUsIGNhbGxiYWNrKSB7XG4gIGlmKHRoaXMucmVhZE9ubHkpIHtcbiAgICBhc3luY0NhbGxiYWNrKGZ1bmN0aW9uKCkge1xuICAgICAgY2FsbGJhY2soJ1tNZW1vcnlDb250ZXh0XSBFcnJvcjogd3JpdGUgb3BlcmF0aW9uIG9uIHJlYWQgb25seSBjb250ZXh0Jyk7XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRoaXMub2JqZWN0U3RvcmVba2V5XSA9IHZhbHVlO1xuICBhc3luY0NhbGxiYWNrKGNhbGxiYWNrKTtcbn07XG5cbk1lbW9yeUNvbnRleHQucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uKGtleSwgY2FsbGJhY2spIHtcbiAgaWYodGhpcy5yZWFkT25seSkge1xuICAgIGFzeW5jQ2FsbGJhY2soZnVuY3Rpb24oKSB7XG4gICAgICBjYWxsYmFjaygnW01lbW9yeUNvbnRleHRdIEVycm9yOiB3cml0ZSBvcGVyYXRpb24gb24gcmVhZCBvbmx5IGNvbnRleHQnKTtcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgZGVsZXRlIHRoaXMub2JqZWN0U3RvcmVba2V5XTtcbiAgYXN5bmNDYWxsYmFjayhjYWxsYmFjayk7XG59O1xuXG5cbmZ1bmN0aW9uIE1lbW9yeShuYW1lKSB7XG4gIHRoaXMubmFtZSA9IG5hbWUgfHwgRklMRV9TWVNURU1fTkFNRTtcbn1cbk1lbW9yeS5pc1N1cHBvcnRlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbk1lbW9yeS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHRoaXMuZGIgPSBjcmVhdGVEQih0aGlzLm5hbWUpO1xuICBhc3luY0NhbGxiYWNrKGNhbGxiYWNrKTtcbn07XG5NZW1vcnkucHJvdG90eXBlLmdldFJlYWRPbmx5Q29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IE1lbW9yeUNvbnRleHQodGhpcy5kYiwgdHJ1ZSk7XG59O1xuTWVtb3J5LnByb3RvdHlwZS5nZXRSZWFkV3JpdGVDb250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgTWVtb3J5Q29udGV4dCh0aGlzLmRiLCBmYWxzZSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1lbW9yeTtcbiIsImZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tKHRlbXBsYXRlKSB7XG4gIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uKGMpIHtcbiAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkqMTZ8MCwgdiA9IGMgPT09ICd4JyA/IHIgOiAociYweDN8MHg4KTtcbiAgICByZXR1cm4gdi50b1N0cmluZygxNik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBndWlkKCkge1xuICByZXR1cm4gZ2VuZXJhdGVSYW5kb20oJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcpLnRvVXBwZXJDYXNlKCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBzdHJpbmcgb2YgbiByYW5kb20gY2hhcmFjdGVycy4gIERlZmF1bHRzIHRvIG49Ni5cbiAqLyBcbmZ1bmN0aW9uIHJhbmRvbUNoYXJzKG4pIHtcbiAgbiA9IG4gfHwgNjtcbiAgdmFyIHRlbXBsYXRlID0gJ3gnLnJlcGVhdChuKTtcbiAgcmV0dXJuIGdlbmVyYXRlUmFuZG9tKHRlbXBsYXRlKTtcbn1cblxuZnVuY3Rpb24gbm9wKCkge31cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGd1aWQ6IGd1aWQsXG4gIG5vcDogbm9wLFxuICByYW5kb21DaGFyczogcmFuZG9tQ2hhcnNcbn07XG4iLCIndXNlIHN0cmljdCc7IFxuY29uc3QgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9jb25zdGFudHMuanMnKS5FTlZJUk9OTUVOVDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBFbnZpcm9ubWVudChlbnYpIHtcbiAgZW52ID0gZW52IHx8IHt9O1xuICBlbnYuVE1QID0gZW52LlRNUCB8fCBkZWZhdWx0cy5UTVA7XG4gIGVudi5QQVRIID0gZW52LlBBVEggfHwgZGVmYXVsdHMuUEFUSDtcblxuICB0aGlzLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gZW52W25hbWVdO1xuICB9O1xuXG4gIHRoaXMuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICBlbnZbbmFtZV0gPSB2YWx1ZTtcbiAgfTtcbn07XG4iLCJ2YXIge3Byb21pc2lmeX0gPSByZXF1aXJlKCdlczYtcHJvbWlzaWZ5Jyk7XG52YXIgUGF0aCA9IHJlcXVpcmUoJy4uL3BhdGguanMnKTtcbnZhciBFcnJvcnMgPSByZXF1aXJlKCcuLi9lcnJvcnMuanMnKTtcbnZhciBFbnZpcm9ubWVudCA9IHJlcXVpcmUoJy4vZW52aXJvbm1lbnQuanMnKTtcbnZhciBhc3luYyA9IHJlcXVpcmUoJy4uLy4uL2xpYi9hc3luYy5qcycpO1xudmFyIG1pbmltYXRjaCA9IHJlcXVpcmUoJ21pbmltYXRjaCcpO1xuXG5mdW5jdGlvbiBTaGVsbChmcywgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICB2YXIgZW52ID0gbmV3IEVudmlyb25tZW50KG9wdGlvbnMuZW52KTtcbiAgdmFyIGN3ZCA9ICcvJztcblxuICAvKipcbiAgICogVGhlIGJvdW5kIEZpbGVTeXN0ZW0gKGNhbm5vdCBiZSBjaGFuZ2VkKVxuICAgKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdmcycsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZnM7IH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZVxuICB9KTtcblxuICAvKipcbiAgICogVGhlIHNoZWxsJ3MgZW52aXJvbm1lbnQgKGUuZy4sIGZvciB0aGluZ3MgbGlrZVxuICAgKiBwYXRoLCB0bXAsIGFuZCBvdGhlciBlbnYgdmFycykuIFVzZSBlbnYuZ2V0KClcbiAgICogYW5kIGVudi5zZXQoKSB0byB3b3JrIHdpdGggdmFyaWFibGVzLlxuICAgKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdlbnYnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIGVudjsgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBDaGFuZ2UgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIFdlXG4gICAqIGluY2x1ZGUgYGNkYCBvbiB0aGUgYHRoaXNgIHZzLiBwcm90byBzbyB0aGF0XG4gICAqIHdlIGNhbiBhY2Nlc3MgY3dkIHdpdGhvdXQgZXhwb3NpbmcgaXQgZXh0ZXJuYWxseS5cbiAgICovXG4gIHRoaXMuY2QgPSBmdW5jdGlvbihwYXRoLCBjYWxsYmFjaykge1xuICAgIHBhdGggPSBQYXRoLnJlc29sdmUoY3dkLCBwYXRoKTtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIHBhdGggYWN0dWFsbHkgZXhpc3RzLCBhbmQgaXMgYSBkaXJcbiAgICBmcy5zdGF0KHBhdGgsIGZ1bmN0aW9uKGVyciwgc3RhdHMpIHtcbiAgICAgIGlmKGVycikge1xuICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVOT1RESVIobnVsbCwgcGF0aCkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZihzdGF0cy50eXBlID09PSAnRElSRUNUT1JZJykge1xuICAgICAgICBjd2QgPSBwYXRoO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sobmV3IEVycm9ycy5FTk9URElSKG51bGwsIHBhdGgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IChjaGFuZ2VkIHdpdGggYGNkKClgKVxuICAgKi9cbiAgdGhpcy5wd2QgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY3dkO1xuICB9O1xuXG4gIHRoaXMucHJvbWlzZXMgPSB7fTtcbiAgLyoqXG4gICogUHVibGljIEFQSSBmb3IgU2hlbGwgY29udmVydGVkIHRvIFByb21pc2UgYmFzZWRcbiAgKi9cbiAgW1xuICAgICdjZCcsXG4gICAgJ2V4ZWMnLFxuICAgICd0b3VjaCcsXG4gICAgJ2NhdCcsXG4gICAgJ2xzJyxcbiAgICAncm0nLFxuICAgICd0ZW1wRGlyJyxcbiAgICAnbWtkaXJwJyxcbiAgICAnZmluZCdcbiAgXS5mb3JFYWNoKChtZXRob2ROYW1lKT0+e1xuICAgIHRoaXMucHJvbWlzZXNbbWV0aG9kTmFtZV0gPSBwcm9taXNpZnkodGhpc1ttZXRob2ROYW1lXS5iaW5kKHRoaXMpKTtcbiAgfSk7XG59XG5cbi8qKlxuICogRXhlY3V0ZSB0aGUgLmpzIGNvbW1hbmQgbG9jYXRlZCBhdCBgcGF0aGAuIFN1Y2ggY29tbWFuZHNcbiAqIHNob3VsZCBhc3N1bWUgdGhlIGV4aXN0ZW5jZSBvZiAzIGFyZ3VtZW50cywgd2hpY2ggd2lsbCBiZVxuICogZGVmaW5lZCBhdCBydW50aW1lOlxuICpcbiAqICAgKiBmcyAtIHRoZSBjdXJyZW50IHNoZWxsJ3MgYm91bmQgZmlsZXN5c3RlbSBvYmplY3RcbiAqICAgKiBhcmdzIC0gYSBsaXN0IG9mIGFyZ3VtZW50cyBmb3IgdGhlIGNvbW1hbmQsIG9yIGFuIGVtcHR5IGxpc3QgaWYgbm9uZVxuICogICAqIGNhbGxiYWNrIC0gYSBjYWxsYmFjayBmdW5jdGlvbihlcnJvciwgcmVzdWx0KSB0byBjYWxsIHdoZW4gZG9uZS5cbiAqXG4gKiBUaGUgLmpzIGNvbW1hbmQncyBjb250ZW50cyBzaG91bGQgYmUgdGhlIGJvZHkgb2YgYSBmdW5jdGlvblxuICogdGhhdCBsb29rcyBsaWtlIHRoaXM6XG4gKlxuICogZnVuY3Rpb24oZnMsIGFyZ3MsIGNhbGxiYWNrKSB7XG4gKiAgIC8vIC5qcyBjb2RlIGhlcmVcbiAqIH1cbiAqL1xuU2hlbGwucHJvdG90eXBlLmV4ZWMgPSBmdW5jdGlvbihwYXRoLCBhcmdzLCBjYWxsYmFjaykge1xuICAvKiBqc2hpbnQgZXZpbDp0cnVlICovXG4gIHZhciBzaCA9IHRoaXM7XG4gIHZhciBmcyA9IHNoLmZzO1xuICBpZih0eXBlb2YgYXJncyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gYXJncztcbiAgICBhcmdzID0gW107XG4gIH1cbiAgYXJncyA9IGFyZ3MgfHwgW107XG4gIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKXt9O1xuICBwYXRoID0gUGF0aC5yZXNvbHZlKHNoLnB3ZCgpLCBwYXRoKTtcblxuICBmcy5yZWFkRmlsZShwYXRoLCAndXRmOCcsIGZ1bmN0aW9uKGVycm9yLCBkYXRhKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHZhciBjbWQgPSBuZXcgRnVuY3Rpb24oJ2ZzJywgJ2FyZ3MnLCAnY2FsbGJhY2snLCBkYXRhKTtcbiAgICAgIGNtZChmcywgYXJncywgY2FsbGJhY2spO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgY2FsbGJhY2soZSk7XG4gICAgfVxuICB9KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgZmlsZSBpZiBpdCBkb2VzIG5vdCBleGlzdCwgb3IgdXBkYXRlIGFjY2VzcyBhbmRcbiAqIG1vZGlmaWVkIHRpbWVzIGlmIGl0IGRvZXMuIFZhbGlkIG9wdGlvbnMgaW5jbHVkZTpcbiAqXG4gKiAgKiB1cGRhdGVPbmx5IC0gd2hldGhlciB0byBjcmVhdGUgdGhlIGZpbGUgaWYgbWlzc2luZyAoZGVmYXVsdHMgdG8gZmFsc2UpXG4gKiAgKiBkYXRlIC0gdXNlIHRoZSBwcm92aWRlZCBEYXRlIHZhbHVlIGluc3RlYWQgb2YgY3VycmVudCBkYXRlL3RpbWVcbiAqL1xuU2hlbGwucHJvdG90eXBlLnRvdWNoID0gZnVuY3Rpb24ocGF0aCwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgdmFyIHNoID0gdGhpcztcbiAgdmFyIGZzID0gc2guZnM7XG4gIGlmKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpe307XG4gIHBhdGggPSBQYXRoLnJlc29sdmUoc2gucHdkKCksIHBhdGgpO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUZpbGUocGF0aCkge1xuICAgIGZzLndyaXRlRmlsZShwYXRoLCAnJywgY2FsbGJhY2spO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlVGltZXMocGF0aCkge1xuICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgIHZhciBhdGltZSA9IG9wdGlvbnMuZGF0ZSB8fCBub3c7XG4gICAgdmFyIG10aW1lID0gb3B0aW9ucy5kYXRlIHx8IG5vdztcblxuICAgIGZzLnV0aW1lcyhwYXRoLCBhdGltZSwgbXRpbWUsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGZzLnN0YXQocGF0aCwgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgaWYob3B0aW9ucy51cGRhdGVPbmx5ID09PSB0cnVlKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjcmVhdGVGaWxlKHBhdGgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB1cGRhdGVUaW1lcyhwYXRoKTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBDb25jYXRlbmF0ZSBtdWx0aXBsZSBmaWxlcyBpbnRvIGEgc2luZ2xlIFN0cmluZywgd2l0aCBlYWNoXG4gKiBmaWxlIHNlcGFyYXRlZCBieSBhIG5ld2xpbmUuIFRoZSBgZmlsZXNgIGFyZ3VtZW50IHNob3VsZFxuICogYmUgYSBTdHJpbmcgKHBhdGggdG8gc2luZ2xlIGZpbGUpIG9yIGFuIEFycmF5IG9mIFN0cmluZ3NcbiAqIChtdWx0aXBsZSBmaWxlIHBhdGhzKS5cbiAqL1xuU2hlbGwucHJvdG90eXBlLmNhdCA9IGZ1bmN0aW9uKGZpbGVzLCBjYWxsYmFjaykge1xuICB2YXIgc2ggPSB0aGlzO1xuICB2YXIgZnMgPSBzaC5mcztcbiAgdmFyIGFsbCA9ICcnO1xuICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCl7fTtcblxuICBpZighZmlsZXMpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnTWlzc2luZyBmaWxlcyBhcmd1bWVudCcpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmaWxlcyA9IHR5cGVvZiBmaWxlcyA9PT0gJ3N0cmluZycgPyBbIGZpbGVzIF0gOiBmaWxlcztcblxuICBmdW5jdGlvbiBhcHBlbmQoaXRlbSwgY2FsbGJhY2spIHtcbiAgICB2YXIgZmlsZW5hbWUgPSBQYXRoLnJlc29sdmUoc2gucHdkKCksIGl0ZW0pO1xuICAgIGZzLnJlYWRGaWxlKGZpbGVuYW1lLCAndXRmOCcsIGZ1bmN0aW9uKGVycm9yLCBkYXRhKSB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGFsbCArPSBkYXRhICsgJ1xcbic7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMuZWFjaFNlcmllcyhmaWxlcywgYXBwZW5kLCBmdW5jdGlvbihlcnJvcikge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKG51bGwsIGFsbC5yZXBsYWNlKC9cXG4kLywgJycpKTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIGxpc3Rpbmcgb2YgYSBkaXJlY3RvcnksIHJldHVybmluZyBhbiBhcnJheSBvZlxuICogZmlsZSBlbnRyaWVzIGluIHRoZSBmb2xsb3dpbmcgZm9ybTpcbiAqXG4gKiB7XG4gKiAgIHBhdGg6IDxTdHJpbmc+IHRoZSBiYXNlbmFtZSBvZiB0aGUgZGlyZWN0b3J5IGVudHJ5XG4gKiAgIGxpbmtzOiA8TnVtYmVyPiB0aGUgbnVtYmVyIG9mIGxpbmtzIHRvIHRoZSBlbnRyeVxuICogICBzaXplOiA8TnVtYmVyPiB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgZW50cnlcbiAqICAgbW9kaWZpZWQ6IDxOdW1iZXI+IHRoZSBsYXN0IG1vZGlmaWVkIGRhdGUvdGltZVxuICogICB0eXBlOiA8U3RyaW5nPiB0aGUgdHlwZSBvZiB0aGUgZW50cnlcbiAqICAgY29udGVudHM6IDxBcnJheT4gYW4gb3B0aW9uYWwgYXJyYXkgb2YgY2hpbGQgZW50cmllc1xuICogfVxuICpcbiAqIEJ5IGRlZmF1bHQgbHMoKSBnaXZlcyBhIHNoYWxsb3cgbGlzdGluZy4gSWYgeW91IHdhbnRcbiAqIHRvIGZvbGxvdyBkaXJlY3RvcmllcyBhcyB0aGV5IGFyZSBlbmNvdW50ZXJlZCwgdXNlXG4gKiB0aGUgYHJlY3Vyc2l2ZT10cnVlYCBvcHRpb24uXG4gKi9cblNoZWxsLnByb3RvdHlwZS5scyA9IGZ1bmN0aW9uKGRpciwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgdmFyIHNoID0gdGhpcztcbiAgdmFyIGZzID0gc2guZnM7XG4gIGlmKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpe307XG5cbiAgaWYoIWRpcikge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdNaXNzaW5nIGRpciBhcmd1bWVudCcpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmdW5jdGlvbiBsaXN0KHBhdGgsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHBhdGhuYW1lID0gUGF0aC5yZXNvbHZlKHNoLnB3ZCgpLCBwYXRoKTtcbiAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICBmcy5yZWFkZGlyKHBhdGhuYW1lLCBmdW5jdGlvbihlcnJvciwgZW50cmllcykge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGdldERpckVudHJ5KG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIG5hbWUgPSBQYXRoLmpvaW4ocGF0aG5hbWUsIG5hbWUpO1xuICAgICAgICBmcy5zdGF0KG5hbWUsIGZ1bmN0aW9uKGVycm9yLCBzdGF0cykge1xuICAgICAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBlbnRyeSA9IHN0YXRzO1xuXG4gICAgICAgICAgaWYob3B0aW9ucy5yZWN1cnNpdmUgJiYgc3RhdHMudHlwZSA9PT0gJ0RJUkVDVE9SWScpIHtcbiAgICAgICAgICAgIGxpc3QoUGF0aC5qb2luKHBhdGhuYW1lLCBlbnRyeS5uYW1lKSwgZnVuY3Rpb24oZXJyb3IsIGl0ZW1zKSB7XG4gICAgICAgICAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbnRyeS5jb250ZW50cyA9IGl0ZW1zO1xuICAgICAgICAgICAgICByZXN1bHQucHVzaChlbnRyeSk7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goZW50cnkpO1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBhc3luYy5lYWNoU2VyaWVzKGVudHJpZXMsIGdldERpckVudHJ5LCBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICBjYWxsYmFjayhlcnJvciwgcmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbGlzdChkaXIsIGNhbGxiYWNrKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgZmlsZSBvciBkaXJlY3RvcnkgYXQgYHBhdGhgLiBJZiBgcGF0aGAgaXMgYSBmaWxlXG4gKiBpdCB3aWxsIGJlIHJlbW92ZWQuIElmIGBwYXRoYCBpcyBhIGRpcmVjdG9yeSwgaXQgd2lsbCBiZVxuICogcmVtb3ZlZCBpZiBpdCBpcyBlbXB0eSwgb3RoZXJ3aXNlIHRoZSBjYWxsYmFjayB3aWxsIHJlY2VpdmVcbiAqIGFuIGVycm9yLiBJbiBvcmRlciB0byByZW1vdmUgbm9uLWVtcHR5IGRpcmVjdG9yaWVzLCB1c2UgdGhlXG4gKiBgcmVjdXJzaXZlPXRydWVgIG9wdGlvbi5cbiAqL1xuU2hlbGwucHJvdG90eXBlLnJtID0gZnVuY3Rpb24ocGF0aCwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgdmFyIHNoID0gdGhpcztcbiAgdmFyIGZzID0gc2guZnM7XG4gIGlmKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpe307XG5cbiAgaWYoIXBhdGgpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnTWlzc2luZyBwYXRoIGFyZ3VtZW50JykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZShwYXRobmFtZSwgY2FsbGJhY2spIHtcbiAgICBwYXRobmFtZSA9IFBhdGgucmVzb2x2ZShzaC5wd2QoKSwgcGF0aG5hbWUpO1xuICAgIGZzLnN0YXQocGF0aG5hbWUsIGZ1bmN0aW9uKGVycm9yLCBzdGF0cykge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoaXMgaXMgYSBmaWxlLCBkZWxldGUgaXQgYW5kIHdlJ3JlIGRvbmVcbiAgICAgIGlmKHN0YXRzLnR5cGUgPT09ICdGSUxFJykge1xuICAgICAgICBmcy51bmxpbmsocGF0aG5hbWUsIGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBpdCdzIGEgZGlyLCBjaGVjayBpZiBpdCdzIGVtcHR5XG4gICAgICBmcy5yZWFkZGlyKHBhdGhuYW1lLCBmdW5jdGlvbihlcnJvciwgZW50cmllcykge1xuICAgICAgICBpZihlcnJvcikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBkaXIgaXMgZW1wdHksIGRlbGV0ZSBpdCBhbmQgd2UncmUgZG9uZVxuICAgICAgICBpZihlbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGZzLnJtZGlyKHBhdGhuYW1lLCBjYWxsYmFjayk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgbm90LCBzZWUgaWYgd2UncmUgYWxsb3dlZCB0byBkZWxldGUgcmVjdXJzaXZlbHlcbiAgICAgICAgaWYoIW9wdGlvbnMucmVjdXJzaXZlKSB7XG4gICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9ycy5FTk9URU1QVFkobnVsbCwgcGF0aG5hbWUpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZW1vdmUgZWFjaCBkaXIgZW50cnkgcmVjdXJzaXZlbHksIHRoZW4gZGVsZXRlIHRoZSBkaXIuXG4gICAgICAgIGVudHJpZXMgPSBlbnRyaWVzLm1hcChmdW5jdGlvbihmaWxlbmFtZSkge1xuICAgICAgICAgIC8vIFJvb3QgZGlyIGVudHJpZXMgYWJzb2x1dGVseVxuICAgICAgICAgIHJldHVybiBQYXRoLmpvaW4ocGF0aG5hbWUsIGZpbGVuYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoZW50cmllcywgcmVtb3ZlLCBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGZzLnJtZGlyKHBhdGhuYW1lLCBjYWxsYmFjayk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZW1vdmUocGF0aCwgY2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBwYXRoIHRvIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5LCBjcmVhdGluZyBpdCBpZiBub3RcbiAqIHByZXNlbnQuIFRoZSBkaXJlY3RvcnkgdXNlZCBpcyB0aGUgb25lIHNwZWNpZmllZCBpblxuICogZW52LlRNUC4gVGhlIGNhbGxiYWNrIHJlY2VpdmVzIChlcnJvciwgdGVtcERpck5hbWUpLlxuICovXG5TaGVsbC5wcm90b3R5cGUudGVtcERpciA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHZhciBzaCA9IHRoaXM7XG4gIHZhciBmcyA9IHNoLmZzO1xuICB2YXIgdG1wID0gc2guZW52LmdldCgnVE1QJyk7XG4gIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKXt9O1xuXG4gIC8vIFRyeSBhbmQgY3JlYXRlIGl0LCBhbmQgaXQgd2lsbCBlaXRoZXIgd29yayBvciBmYWlsXG4gIC8vIGJ1dCBlaXRoZXIgd2F5IGl0J3Mgbm93IHRoZXJlLlxuICBmcy5ta2Rpcih0bXAsIGZ1bmN0aW9uKCkge1xuICAgIGNhbGxiYWNrKG51bGwsIHRtcCk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZWN1cnNpdmVseSBjcmVhdGVzIHRoZSBkaXJlY3RvcnkgYXQgYHBhdGhgLiBJZiB0aGUgcGFyZW50XG4gKiBvZiBgcGF0aGAgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC5cbiAqIEJhc2VkIG9mZiBFbnN1cmVEaXIgYnkgU2FtIFguIFh1XG4gKiBodHRwczovL3d3dy5ucG1qcy5vcmcvcGFja2FnZS9lbnN1cmVEaXJcbiAqIE1JVCBMaWNlbnNlXG4gKi9cblNoZWxsLnByb3RvdHlwZS5ta2RpcnAgPSBmdW5jdGlvbihwYXRoLCBjYWxsYmFjaykge1xuICB2YXIgc2ggPSB0aGlzO1xuICB2YXIgZnMgPSBzaC5mcztcbiAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpe307XG5cbiAgaWYoIXBhdGgpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnTWlzc2luZyBwYXRoIGFyZ3VtZW50JykpO1xuICAgIHJldHVybjtcbiAgfVxuICBwYXRoID0gUGF0aC5yZXNvbHZlKHNoLnB3ZCgpLCBwYXRoKTtcbiAgaWYgKHBhdGggPT09ICcvJykge1xuICAgIGNhbGxiYWNrKCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZ1bmN0aW9uIF9ta2RpcnAocGF0aCwgY2FsbGJhY2spIHtcbiAgICBmcy5zdGF0KHBhdGgsIGZ1bmN0aW9uIChlcnIsIHN0YXQpIHtcbiAgICAgIGlmKHN0YXQpIHtcbiAgICAgICAgaWYoc3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RhdC5pc0ZpbGUoKSkge1xuICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRU5PVERJUihudWxsLCBwYXRoKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChlcnIgJiYgZXJyLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgcGFyZW50ID0gUGF0aC5kaXJuYW1lKHBhdGgpO1xuICAgICAgICBpZihwYXJlbnQgPT09ICcvJykge1xuICAgICAgICAgIGZzLm1rZGlyKHBhdGgsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIgJiYgZXJyLmNvZGUgIT09ICdFRVhJU1QnKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgX21rZGlycChwYXJlbnQsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgZnMubWtkaXIocGF0aCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICBpZiAoZXJyICYmIGVyci5jb2RlICE9PSAnRUVYSVNUJykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBfbWtkaXJwKHBhdGgsIGNhbGxiYWNrKTtcbn07XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgd2FsayBhIGRpcmVjdG9yeSB0cmVlLCByZXBvcnRpbmcgYmFjayBhbGwgcGF0aHNcbiAqIHRoYXQgd2VyZSBmb3VuZCBhbG9uZyB0aGUgd2F5LiBUaGUgYHBhdGhgIG11c3QgYmUgYSBkaXIuXG4gKiBWYWxpZCBvcHRpb25zIGluY2x1ZGUgYSBgcmVnZXhgIGZvciBwYXR0ZXJuIG1hdGNoaW5nIHBhdGhzXG4gKiBhbmQgYW4gYGV4ZWNgIGZ1bmN0aW9uIG9mIHRoZSBmb3JtIGBmdW5jdGlvbihwYXRoLCBuZXh0KWAgd2hlcmVcbiAqIGBwYXRoYCBpcyB0aGUgY3VycmVudCBwYXRoIHRoYXQgd2FzIGZvdW5kIChkaXIgcGF0aHMgaGF2ZSBhbiAnLydcbiAqIGFwcGVuZGVkKSBhbmQgYG5leHRgIGlzIGEgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIGRvbmUgcHJvY2Vzc2luZ1xuICogdGhlIGN1cnJlbnQgcGF0aCwgcGFzc2luZyBhbnkgZXJyb3Igb2JqZWN0IGJhY2sgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxuICogYGZpbmRgIHJldHVybnMgYSBmbGF0IGFycmF5IG9mIGFic29sdXRlIHBhdGhzIGZvciBhbGwgbWF0Y2hpbmcvZm91bmRcbiAqIHBhdGhzIGFzIHRoZSBmaW5hbCBhcmd1bWVudCB0byB0aGUgY2FsbGJhY2suXG4gKi9cblNoZWxsLnByb3RvdHlwZS5maW5kID0gZnVuY3Rpb24ocGF0aCwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgdmFyIHNoID0gdGhpcztcbiAgdmFyIGZzID0gc2guZnM7XG4gIGlmKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpe307XG5cbiAgdmFyIGV4ZWMgPSBvcHRpb25zLmV4ZWMgfHwgZnVuY3Rpb24ocGF0aCwgbmV4dCkgeyBuZXh0KCk7IH07XG4gIHZhciBmb3VuZCA9IFtdO1xuXG4gIGlmKCFwYXRoKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSU5WQUwoJ01pc3NpbmcgcGF0aCBhcmd1bWVudCcpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzUGF0aChwYXRoLCBjYWxsYmFjaykge1xuICAgIGV4ZWMocGF0aCwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICBpZihlcnIpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmb3VuZC5wdXNoKHBhdGgpO1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1heWJlUHJvY2Vzc1BhdGgocGF0aCwgY2FsbGJhY2spIHtcbiAgICAvLyBUZXN0IHRoZSBwYXRoIGFnYWluc3QgdGhlIHVzZXIncyByZWdleCwgbmFtZSwgcGF0aCBwcmltYXJpZXMgKGlmIGFueSlcbiAgICAvLyBhbmQgcmVtb3ZlIGFueSB0cmFpbGluZyBzbGFzaGVzIGFkZGVkIHByZXZpb3VzbHkuXG4gICAgdmFyIHJhd1BhdGggPSBQYXRoLnJlbW92ZVRyYWlsaW5nKHBhdGgpO1xuXG4gICAgLy8gQ2hlY2sgZW50aXJlIHBhdGggYWdhaW5zdCBwcm92aWRlZCByZWdleCwgaWYgYW55XG4gICAgaWYob3B0aW9ucy5yZWdleCAmJiAhb3B0aW9ucy5yZWdleC50ZXN0KHJhd1BhdGgpKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGJhc2VuYW1lIGZvciBtYXRjaGVzIGFnYWluc3QgbmFtZSBwcmltYXJ5LCBpZiBhbnlcbiAgICBpZihvcHRpb25zLm5hbWUgJiYgIW1pbmltYXRjaChQYXRoLmJhc2VuYW1lKHJhd1BhdGgpLCBvcHRpb25zLm5hbWUpKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGRpcm5hbWUgZm9yIG1hdGNoZXMgYWdhaW5zdCBwYXRoIHByaW1hcnksIGlmIGFueVxuICAgIGlmKG9wdGlvbnMucGF0aCAmJiAhbWluaW1hdGNoKFBhdGguZGlybmFtZShyYXdQYXRoKSwgb3B0aW9ucy5wYXRoKSkge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcm9jZXNzUGF0aChwYXRoLCBjYWxsYmFjayk7XG4gIH1cblxuICBmdW5jdGlvbiB3YWxrKHBhdGgsIGNhbGxiYWNrKSB7XG4gICAgcGF0aCA9IFBhdGgucmVzb2x2ZShzaC5wd2QoKSwgcGF0aCk7XG5cbiAgICAvLyBUaGUgcGF0aCBpcyBlaXRoZXIgYSBmaWxlIG9yIGRpciwgYW5kIGluc3RlYWQgb2YgZG9pbmdcbiAgICAvLyBhIHN0YXQoKSB0byBkZXRlcm1pbmUgaXQgZmlyc3QsIHdlIGp1c3QgdHJ5IHRvIHJlYWRkaXIoKVxuICAgIC8vIGFuZCBpdCB3aWxsIGVpdGhlciB3b3JrIG9yIG5vdCwgYW5kIHdlIGhhbmRsZSB0aGUgbm9uLWRpciBlcnJvci5cbiAgICBmcy5yZWFkZGlyKHBhdGgsIGZ1bmN0aW9uKGVyciwgZW50cmllcykge1xuICAgICAgaWYoZXJyKSB7XG4gICAgICAgIGlmKGVyci5jb2RlID09PSAnRU5PVERJUicgLyogZmlsZSBjYXNlLCBpZ25vcmUgZXJyb3IgKi8pIHtcbiAgICAgICAgICBtYXliZVByb2Nlc3NQYXRoKHBhdGgsIGNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gUGF0aCBpcyByZWFsbHkgYSBkaXIsIGFkZCBhIHRyYWlsaW5nIC8gYW5kIHJlcG9ydCBpdCBmb3VuZFxuICAgICAgbWF5YmVQcm9jZXNzUGF0aChQYXRoLmFkZFRyYWlsaW5nKHBhdGgpLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgaWYoZXJyKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBlbnRyaWVzID0gZW50cmllcy5tYXAoZnVuY3Rpb24oZW50cnkpIHtcbiAgICAgICAgICByZXR1cm4gUGF0aC5qb2luKHBhdGgsIGVudHJ5KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhlbnRyaWVzLCB3YWxrLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIGZvdW5kKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBhcmUgc3RhcnRpbmcgd2l0aCBhIGRpciBwYXRoXG4gIGZzLnN0YXQocGF0aCwgZnVuY3Rpb24oZXJyLCBzdGF0cykge1xuICAgIGlmKGVycikge1xuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRU5PVERJUihudWxsLCBwYXRoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FsayhwYXRoLCBjYWxsYmFjayk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTaGVsbDtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgQ29uc3RhbnRzID0gcmVxdWlyZSgnLi9jb25zdGFudHMuanMnKTtcbmNvbnN0IFBhdGggPSByZXF1aXJlKCcuL3BhdGguanMnKTtcblxuZnVuY3Rpb24gZGF0ZUZyb21Ncyhtcykge1xuICByZXR1cm4gbmV3IERhdGUoTnVtYmVyKG1zKSk7XG59XG5cbmZ1bmN0aW9uIFN0YXRzKHBhdGgsIGZpbGVOb2RlLCBkZXZOYW1lKSB7XG4gIHRoaXMuZGV2ID0gZGV2TmFtZTtcbiAgdGhpcy5ub2RlID0gZmlsZU5vZGUuaWQ7XG4gIHRoaXMudHlwZSA9IGZpbGVOb2RlLnR5cGU7XG4gIHRoaXMuc2l6ZSA9IGZpbGVOb2RlLnNpemU7XG4gIHRoaXMubmxpbmtzID0gZmlsZU5vZGUubmxpbmtzO1xuICAvLyBEYXRlIG9iamVjdHNcbiAgdGhpcy5hdGltZSA9IGRhdGVGcm9tTXMoZmlsZU5vZGUuYXRpbWUpO1xuICB0aGlzLm10aW1lID0gZGF0ZUZyb21NcyhmaWxlTm9kZS5tdGltZSk7XG4gIHRoaXMuY3RpbWUgPSBkYXRlRnJvbU1zKGZpbGVOb2RlLmN0aW1lKTtcbiAgLy8gVW5peCB0aW1lc3RhbXAgTVMgTnVtYmVyc1xuICB0aGlzLmF0aW1lTXMgPSBmaWxlTm9kZS5hdGltZTtcbiAgdGhpcy5tdGltZU1zID0gZmlsZU5vZGUubXRpbWU7XG4gIHRoaXMuY3RpbWVNcyA9IGZpbGVOb2RlLmN0aW1lO1xuICB0aGlzLnZlcnNpb24gPSBmaWxlTm9kZS52ZXJzaW9uO1xuICB0aGlzLm1vZGUgPSBmaWxlTm9kZS5tb2RlO1xuICB0aGlzLnVpZCA9IGZpbGVOb2RlLnVpZDtcbiAgdGhpcy5naWQgPSBmaWxlTm9kZS5naWQ7XG4gIHRoaXMubmFtZSA9IFBhdGguYmFzZW5hbWUocGF0aCk7XG59XG5cblN0YXRzLnByb3RvdHlwZS5pc0ZpbGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMudHlwZSA9PT0gQ29uc3RhbnRzLk5PREVfVFlQRV9GSUxFO1xufTtcblxuU3RhdHMucHJvdG90eXBlLmlzRGlyZWN0b3J5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnR5cGUgPT09IENvbnN0YW50cy5OT0RFX1RZUEVfRElSRUNUT1JZO1xufTtcblxuU3RhdHMucHJvdG90eXBlLmlzU3ltYm9saWNMaW5rID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnR5cGUgPT09IENvbnN0YW50cy5OT0RFX1RZUEVfU1lNQk9MSUNfTElOSztcbn07XG5cbi8vIFRoZXNlIHdpbGwgYWx3YXlzIGJlIGZhbHNlIGluIEZpbGVyLlxuU3RhdHMucHJvdG90eXBlLmlzU29ja2V0ICAgICAgICAgID1cblN0YXRzLnByb3RvdHlwZS5pc0ZJRk8gICAgICAgICAgICA9XG5TdGF0cy5wcm90b3R5cGUuaXNDaGFyYWN0ZXJEZXZpY2UgPVxuU3RhdHMucHJvdG90eXBlLmlzQmxvY2tEZXZpY2UgICAgID1cbmZ1bmN0aW9uKCkge1xuICByZXR1cm4gZmFsc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRzO1xuIiwidmFyIENvbnN0YW50cyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzLmpzJyk7XG5cbmZ1bmN0aW9uIFN1cGVyTm9kZShvcHRpb25zKSB7XG4gIHZhciBub3cgPSBEYXRlLm5vdygpO1xuXG4gIHRoaXMuaWQgPSBDb25zdGFudHMuU1VQRVJfTk9ERV9JRDtcbiAgdGhpcy50eXBlID0gQ29uc3RhbnRzLk5PREVfVFlQRV9NRVRBO1xuICB0aGlzLmF0aW1lID0gb3B0aW9ucy5hdGltZSB8fCBub3c7XG4gIHRoaXMuY3RpbWUgPSBvcHRpb25zLmN0aW1lIHx8IG5vdztcbiAgdGhpcy5tdGltZSA9IG9wdGlvbnMubXRpbWUgfHwgbm93O1xuICAvLyByb290IG5vZGUgaWQgKHJhbmRvbWx5IGdlbmVyYXRlZClcbiAgdGhpcy5ybm9kZSA9IG9wdGlvbnMucm5vZGU7XG59XG5cblN1cGVyTm9kZS5jcmVhdGUgPSBmdW5jdGlvbihvcHRpb25zLCBjYWxsYmFjaykge1xuICBvcHRpb25zLmd1aWQoZnVuY3Rpb24oZXJyLCBybm9kZSkge1xuICAgIGlmKGVycikge1xuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgb3B0aW9ucy5ybm9kZSA9IG9wdGlvbnMucm5vZGUgfHwgcm5vZGU7XG4gICAgY2FsbGJhY2sobnVsbCwgbmV3IFN1cGVyTm9kZShvcHRpb25zKSk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdXBlck5vZGU7XG4iLCJ2YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxuY29uc3QgUExVR0lOX05BTUUgPSAnZmlsZXItd2VicGFjay1wbHVnaW4nO1xuXG5jb25zdCBPUFRJT05TX1NDSEVNQSA9IHJlcXVpcmUoJy4vc2NoZW1hJyk7XG5jb25zdCBPUFRJT05TX1BST0NFU1NPUlMgPSByZXF1aXJlKCcuL3Byb2Nlc3NvcnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBGaWxlcldlYnBhY2tQbHVnaW4ge1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIHV0aWxzLnZhbGlkYXRlT3B0aW9ucyhvcHRpb25zLCBPUFRJT05TX1NDSEVNQSk7XG4gICAgdGhpcy5vcHRpb25zID0gdXRpbHMucHJvY2Vzc09wdGlvbnMob3B0aW9ucywgT1BUSU9OU19QUk9DRVNTT1JTKTtcbiAgfVxuXG4gIGFwcGx5KGNvbXBpbGVyKSB7XG4gICAgY29tcGlsZXIuaG9va3Mubm9ybWFsTW9kdWxlRmFjdG9yeS50YXAoXG4gICAgICBQTFVHSU5fTkFNRSxcbiAgICAgIChmYWN0b3J5KSA9PiB7XG4gICAgICAgIGZhY3RvcnkuaG9va3MucmVzb2x2ZS50YXAoXG4gICAgICAgICAgUExVR0lOX05BTUUsXG4gICAgICAgICAgKHJlc29sdmVEYXRhKSA9PiB7XG4gICAgICAgICAgICAvLyBSZXNvbHZlIGZzUHJvdmlkZXIgaWYgcmVxdWlyZWRcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcmVzb2x2ZURhdGEucmVxdWVzdCA9PT0gJ2ZzUHJvdmlkZXInXG4gICAgICAgICAgICAgICYmIHJlc29sdmVEYXRhLmNvbnRleHQgPT09IHRoaXMub3B0aW9ucy5zaGltc0RpclxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVGc1Byb3ZpZGVyKHJlc29sdmVEYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWdub3JlIGZpbGVyIGZpbGVzICh0aGVzZSBzaG91bGQgcmVzb2x2ZSBtb2R1bGVzIG5vcm1hbGx5KVxuICAgICAgICAgICAgaWYgKHJlc29sdmVEYXRhLmNvbnRleHQuc3RhcnRzV2l0aCh0aGlzLm9wdGlvbnMuZmlsZXJEaXIpKSByZXR1cm47XG5cbiAgICAgICAgICAgIC8vIEFwcGx5IGZzLCBwYXRoIGFuZCBidWZmZXIgc2hpbXMgaWYgcmVxdWlyZWRcbiAgICAgICAgICAgIHN3aXRjaCAocmVzb2x2ZURhdGEucmVxdWVzdCkge1xuICAgICAgICAgICAgY2FzZSAnZnMnOlxuICAgICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5zaGltRnMpIHJldHVybjtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlGc1NoaW0ocmVzb2x2ZURhdGEpO1xuICAgICAgICAgICAgY2FzZSAncGF0aCc6XG4gICAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLnNoaW1QYXRoKSByZXR1cm47XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGx5UGF0aFNoaW0ocmVzb2x2ZURhdGEpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHJlc29sdmVGc1Byb3ZpZGVyKHJlc29sdmVEYXRhKSB7XG4gICAgc3dpdGNoICh0aGlzLm9wdGlvbnMuZnNQcm92aWRlcikge1xuICAgIGNhc2UgJ2RlZmF1bHQnOlxuICAgICAgcmVzb2x2ZURhdGEucmVxdWVzdCA9IHBhdGguam9pbih0aGlzLm9wdGlvbnMuZnNQcm92aWRlckRpciwgJ2RlZmF1bHQuanMnKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2luZGV4ZWRkYic6XG4gICAgICByZXNvbHZlRGF0YS5yZXF1ZXN0ID0gcGF0aC5qb2luKHRoaXMub3B0aW9ucy5mc1Byb3ZpZGVyRGlyLCAnaW5kZXhlZGRiLmpzJyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdtZW1vcnknOlxuICAgICAgcmVzb2x2ZURhdGEucmVxdWVzdCA9IHBhdGguam9pbih0aGlzLm9wdGlvbnMuZnNQcm92aWRlckRpciwgJ21lbW9yeS5qcycpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY3VzdG9tJzpcbiAgICAgIHJlc29sdmVEYXRhLnJlcXVlc3QgPSBwYXRoLmpvaW4odGhpcy5vcHRpb25zLmZzUHJvdmlkZXJEaXIsICdjdXN0b20uanMnKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoW1xuICAgICAgICAnSW52YWxpZCBvcHRpb24gZm9yIGZzUHJvdmlkZXIuJyxcbiAgICAgICAgJ2ZzUHJvdmlkZXIgbXVzdCBiZSBvbmUgb2YgXFwnZGVmYXVsdFxcJywgXFwnaW5kZXhlZGRiXFwnLCBcXCdtZW1vcnlcXCcgb3IgXFwnY3VzdG9tXFwnLicsXG4gICAgICAgICdJZiB1c2luZyBhIGN1c3RvbSBmc1Byb3ZpZGVyLCB5b3UgbXVzdCBhbHNvIHByb3ZpZGUgdGhlIGZzUHJvdmlkZXJEaXIgb3B0aW9uLidcbiAgICAgIF0uam9pbignICcpKTtcbiAgICB9XG4gIH1cblxuICBhcHBseUZzU2hpbShyZXNvbHZlRGF0YSkge1xuICAgIHJlc29sdmVEYXRhLnJlcXVlc3QgPSBwYXRoLmpvaW4odGhpcy5vcHRpb25zLnNoaW1zRGlyLCAnZnMuanMnKTtcbiAgfVxuICAgIFxuICBhcHBseVBhdGhTaGltKHJlc29sdmVEYXRhKSB7XG4gICAgcmVzb2x2ZURhdGEucmVxdWVzdCA9IHBhdGguam9pbih0aGlzLm9wdGlvbnMuc2hpbXNEaXIsICdwYXRoLmpzJyk7XG4gIH1cbn07XG4iLCJ2YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblxuY29uc3QgUk9PVF9ESVJfVEFHID0gJzxyb290RGlyPic7XG5jb25zdCBDV0QgPSBwcm9jZXNzLmN3ZCgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmlsZXJEaXI6IHtcbiAgICBwcm9jZXNzOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gcGF0aC5qb2luKENXRCwgJ25vZGVfbW9kdWxlcycsICdmaWxlcicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhdGgucmVzb2x2ZSh2YWx1ZS5yZXBsYWNlKFJPT1RfRElSX1RBRywgQ1dEKSk7XG4gICAgfSxcbiAgfSxcbiAgc2hpbXNEaXI6IHtcbiAgICBwcm9jZXNzOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gcGF0aC5qb2luKENXRCwgJ25vZGVfbW9kdWxlcycsICdmaWxlcicsICdzaGltcycpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhdGgucmVzb2x2ZSh2YWx1ZS5yZXBsYWNlKFJPT1RfRElSX1RBRywgQ1dEKSk7XG4gICAgfVxuICB9LFxuICBmc1Byb3ZpZGVyRGlyOiB7XG4gICAgcHJvY2VzczogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHBhdGguam9pbihDV0QsICdub2RlX21vZHVsZXMnLCAnZmlsZXInLCAnc2hpbXMnLCAncHJvdmlkZXJzJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGF0aC5yZXNvbHZlKHZhbHVlLnJlcGxhY2UoUk9PVF9ESVJfVEFHLCBDV0QpKTtcbiAgICB9LFxuICB9LFxuICBzaGltRnM6IHsgZGVmYXVsdDogdHJ1ZSB9LFxuICBzaGltUGF0aDogeyBkZWZhdWx0OiB0cnVlfSxcbiAgZnNQcm92aWRlcjogeyBkZWZhdWx0OiAnZGVmYXVsdCd9LFxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICB0eXBlOiAnb2JqZWN0JyxcbiAgcHJvcGVydGllczoge1xuICAgIGZpbGVyRGlyOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICB9LFxuICAgIHNoaW1zRGlyOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICB9LFxuICAgIHNoaW1Gczoge1xuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIH0sXG4gICAgc2hpbVBhdGg6IHtcbiAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICB9LFxuICAgIGZzUHJvdmlkZXI6IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIH0sXG4gICAgZnNQcm92aWRlckRpcjoge1xuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgfSxcbiAgfVxufTtcbiIsInZhciB7IHZhbGlkYXRlIH0gPSByZXF1aXJlKCdzY2hlbWEtdXRpbHMnKTtcblxuZnVuY3Rpb24gdmFsaWRhdGVPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSkge1xuICB2YWxpZGF0ZShzY2hlbWEsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzT3B0aW9ucyhvcHRpb25zLCBwcm9jZXNzb3JzKSB7XG4gIGNvbnN0IHByb2Nlc3NlZE9wdGlvbnMgPSB7fTtcbiAgICBcbiAgZm9yIChjb25zdCBbcHJvcGVydHksIHByb2Nlc3Nvcl0gb2YgT2JqZWN0LmVudHJpZXMocHJvY2Vzc29ycykpIHtcbiAgICBwcm9jZXNzZWRPcHRpb25zW3Byb3BlcnR5XSA9IG9wdGlvbnNbcHJvcGVydHldO1xuICAgIGlmIChwcm9jZXNzZWRPcHRpb25zW3Byb3BlcnR5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcm9jZXNzZWRPcHRpb25zW3Byb3BlcnR5XSA9IHByb2Nlc3Nvci5kZWZhdWx0O1xuICAgIH1cbiAgICBpZiAocHJvY2Vzc29yLnByb2Nlc3MpIHtcbiAgICAgIHByb2Nlc3NlZE9wdGlvbnNbcHJvcGVydHldID0gcHJvY2Vzc29yLnByb2Nlc3MocHJvY2Vzc2VkT3B0aW9uc1twcm9wZXJ0eV0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzZWRPcHRpb25zO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdmFsaWRhdGVPcHRpb25zLFxuICBwcm9jZXNzT3B0aW9ucyxcbn07XG4iLCIvKiEgaWVlZTc1NC4gQlNELTMtQ2xhdXNlIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqL1xuZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSAoZSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSAobSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICgodmFsdWUgKiBjKSAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdHJhdmVyc2UgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzY2hlbWEsIG9wdHMsIGNiKSB7XG4gIC8vIExlZ2FjeSBzdXBwb3J0IGZvciB2MC4zLjEgYW5kIGVhcmxpZXIuXG4gIGlmICh0eXBlb2Ygb3B0cyA9PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBvcHRzO1xuICAgIG9wdHMgPSB7fTtcbiAgfVxuXG4gIGNiID0gb3B0cy5jYiB8fCBjYjtcbiAgdmFyIHByZSA9ICh0eXBlb2YgY2IgPT0gJ2Z1bmN0aW9uJykgPyBjYiA6IGNiLnByZSB8fCBmdW5jdGlvbigpIHt9O1xuICB2YXIgcG9zdCA9IGNiLnBvc3QgfHwgZnVuY3Rpb24oKSB7fTtcblxuICBfdHJhdmVyc2Uob3B0cywgcHJlLCBwb3N0LCBzY2hlbWEsICcnLCBzY2hlbWEpO1xufTtcblxuXG50cmF2ZXJzZS5rZXl3b3JkcyA9IHtcbiAgYWRkaXRpb25hbEl0ZW1zOiB0cnVlLFxuICBpdGVtczogdHJ1ZSxcbiAgY29udGFpbnM6IHRydWUsXG4gIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlLFxuICBwcm9wZXJ0eU5hbWVzOiB0cnVlLFxuICBub3Q6IHRydWVcbn07XG5cbnRyYXZlcnNlLmFycmF5S2V5d29yZHMgPSB7XG4gIGl0ZW1zOiB0cnVlLFxuICBhbGxPZjogdHJ1ZSxcbiAgYW55T2Y6IHRydWUsXG4gIG9uZU9mOiB0cnVlXG59O1xuXG50cmF2ZXJzZS5wcm9wc0tleXdvcmRzID0ge1xuICBkZWZpbml0aW9uczogdHJ1ZSxcbiAgcHJvcGVydGllczogdHJ1ZSxcbiAgcGF0dGVyblByb3BlcnRpZXM6IHRydWUsXG4gIGRlcGVuZGVuY2llczogdHJ1ZVxufTtcblxudHJhdmVyc2Uuc2tpcEtleXdvcmRzID0ge1xuICBkZWZhdWx0OiB0cnVlLFxuICBlbnVtOiB0cnVlLFxuICBjb25zdDogdHJ1ZSxcbiAgcmVxdWlyZWQ6IHRydWUsXG4gIG1heGltdW06IHRydWUsXG4gIG1pbmltdW06IHRydWUsXG4gIGV4Y2x1c2l2ZU1heGltdW06IHRydWUsXG4gIGV4Y2x1c2l2ZU1pbmltdW06IHRydWUsXG4gIG11bHRpcGxlT2Y6IHRydWUsXG4gIG1heExlbmd0aDogdHJ1ZSxcbiAgbWluTGVuZ3RoOiB0cnVlLFxuICBwYXR0ZXJuOiB0cnVlLFxuICBmb3JtYXQ6IHRydWUsXG4gIG1heEl0ZW1zOiB0cnVlLFxuICBtaW5JdGVtczogdHJ1ZSxcbiAgdW5pcXVlSXRlbXM6IHRydWUsXG4gIG1heFByb3BlcnRpZXM6IHRydWUsXG4gIG1pblByb3BlcnRpZXM6IHRydWVcbn07XG5cblxuZnVuY3Rpb24gX3RyYXZlcnNlKG9wdHMsIHByZSwgcG9zdCwgc2NoZW1hLCBqc29uUHRyLCByb290U2NoZW1hLCBwYXJlbnRKc29uUHRyLCBwYXJlbnRLZXl3b3JkLCBwYXJlbnRTY2hlbWEsIGtleUluZGV4KSB7XG4gIGlmIChzY2hlbWEgJiYgdHlwZW9mIHNjaGVtYSA9PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShzY2hlbWEpKSB7XG4gICAgcHJlKHNjaGVtYSwganNvblB0ciwgcm9vdFNjaGVtYSwgcGFyZW50SnNvblB0ciwgcGFyZW50S2V5d29yZCwgcGFyZW50U2NoZW1hLCBrZXlJbmRleCk7XG4gICAgZm9yICh2YXIga2V5IGluIHNjaGVtYSkge1xuICAgICAgdmFyIHNjaCA9IHNjaGVtYVtrZXldO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoKSkge1xuICAgICAgICBpZiAoa2V5IGluIHRyYXZlcnNlLmFycmF5S2V5d29yZHMpIHtcbiAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8c2NoLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgX3RyYXZlcnNlKG9wdHMsIHByZSwgcG9zdCwgc2NoW2ldLCBqc29uUHRyICsgJy8nICsga2V5ICsgJy8nICsgaSwgcm9vdFNjaGVtYSwganNvblB0ciwga2V5LCBzY2hlbWEsIGkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGtleSBpbiB0cmF2ZXJzZS5wcm9wc0tleXdvcmRzKSB7XG4gICAgICAgIGlmIChzY2ggJiYgdHlwZW9mIHNjaCA9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gc2NoKVxuICAgICAgICAgICAgX3RyYXZlcnNlKG9wdHMsIHByZSwgcG9zdCwgc2NoW3Byb3BdLCBqc29uUHRyICsgJy8nICsga2V5ICsgJy8nICsgZXNjYXBlSnNvblB0cihwcm9wKSwgcm9vdFNjaGVtYSwganNvblB0ciwga2V5LCBzY2hlbWEsIHByb3ApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGtleSBpbiB0cmF2ZXJzZS5rZXl3b3JkcyB8fCAob3B0cy5hbGxLZXlzICYmICEoa2V5IGluIHRyYXZlcnNlLnNraXBLZXl3b3JkcykpKSB7XG4gICAgICAgIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaCwganNvblB0ciArICcvJyArIGtleSwgcm9vdFNjaGVtYSwganNvblB0ciwga2V5LCBzY2hlbWEpO1xuICAgICAgfVxuICAgIH1cbiAgICBwb3N0KHNjaGVtYSwganNvblB0ciwgcm9vdFNjaGVtYSwgcGFyZW50SnNvblB0ciwgcGFyZW50S2V5d29yZCwgcGFyZW50U2NoZW1hLCBrZXlJbmRleCk7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBlc2NhcGVKc29uUHRyKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL34vZywgJ34wJykucmVwbGFjZSgvXFwvL2csICd+MScpO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBtaW5pbWF0Y2hcbm1pbmltYXRjaC5NaW5pbWF0Y2ggPSBNaW5pbWF0Y2hcblxudmFyIHBhdGggPSAoZnVuY3Rpb24gKCkgeyB0cnkgeyByZXR1cm4gcmVxdWlyZSgncGF0aCcpIH0gY2F0Y2ggKGUpIHt9fSgpKSB8fCB7XG4gIHNlcDogJy8nXG59XG5taW5pbWF0Y2guc2VwID0gcGF0aC5zZXBcblxudmFyIEdMT0JTVEFSID0gbWluaW1hdGNoLkdMT0JTVEFSID0gTWluaW1hdGNoLkdMT0JTVEFSID0ge31cbnZhciBleHBhbmQgPSByZXF1aXJlKCdicmFjZS1leHBhbnNpb24nKVxuXG52YXIgcGxUeXBlcyA9IHtcbiAgJyEnOiB7IG9wZW46ICcoPzooPyEoPzonLCBjbG9zZTogJykpW14vXSo/KSd9LFxuICAnPyc6IHsgb3BlbjogJyg/OicsIGNsb3NlOiAnKT8nIH0sXG4gICcrJzogeyBvcGVuOiAnKD86JywgY2xvc2U6ICcpKycgfSxcbiAgJyonOiB7IG9wZW46ICcoPzonLCBjbG9zZTogJykqJyB9LFxuICAnQCc6IHsgb3BlbjogJyg/OicsIGNsb3NlOiAnKScgfVxufVxuXG4vLyBhbnkgc2luZ2xlIHRoaW5nIG90aGVyIHRoYW4gL1xuLy8gZG9uJ3QgbmVlZCB0byBlc2NhcGUgLyB3aGVuIHVzaW5nIG5ldyBSZWdFeHAoKVxudmFyIHFtYXJrID0gJ1teL10nXG5cbi8vICogPT4gYW55IG51bWJlciBvZiBjaGFyYWN0ZXJzXG52YXIgc3RhciA9IHFtYXJrICsgJyo/J1xuXG4vLyAqKiB3aGVuIGRvdHMgYXJlIGFsbG93ZWQuICBBbnl0aGluZyBnb2VzLCBleGNlcHQgLi4gYW5kIC5cbi8vIG5vdCAoXiBvciAvIGZvbGxvd2VkIGJ5IG9uZSBvciB0d28gZG90cyBmb2xsb3dlZCBieSAkIG9yIC8pLFxuLy8gZm9sbG93ZWQgYnkgYW55dGhpbmcsIGFueSBudW1iZXIgb2YgdGltZXMuXG52YXIgdHdvU3RhckRvdCA9ICcoPzooPyEoPzpcXFxcXFwvfF4pKD86XFxcXC57MSwyfSkoJHxcXFxcXFwvKSkuKSo/J1xuXG4vLyBub3QgYSBeIG9yIC8gZm9sbG93ZWQgYnkgYSBkb3QsXG4vLyBmb2xsb3dlZCBieSBhbnl0aGluZywgYW55IG51bWJlciBvZiB0aW1lcy5cbnZhciB0d29TdGFyTm9Eb3QgPSAnKD86KD8hKD86XFxcXFxcL3xeKVxcXFwuKS4pKj8nXG5cbi8vIGNoYXJhY3RlcnMgdGhhdCBuZWVkIHRvIGJlIGVzY2FwZWQgaW4gUmVnRXhwLlxudmFyIHJlU3BlY2lhbHMgPSBjaGFyU2V0KCcoKS4qe30rP1tdXiRcXFxcIScpXG5cbi8vIFwiYWJjXCIgLT4geyBhOnRydWUsIGI6dHJ1ZSwgYzp0cnVlIH1cbmZ1bmN0aW9uIGNoYXJTZXQgKHMpIHtcbiAgcmV0dXJuIHMuc3BsaXQoJycpLnJlZHVjZShmdW5jdGlvbiAoc2V0LCBjKSB7XG4gICAgc2V0W2NdID0gdHJ1ZVxuICAgIHJldHVybiBzZXRcbiAgfSwge30pXG59XG5cbi8vIG5vcm1hbGl6ZXMgc2xhc2hlcy5cbnZhciBzbGFzaFNwbGl0ID0gL1xcLysvXG5cbm1pbmltYXRjaC5maWx0ZXIgPSBmaWx0ZXJcbmZ1bmN0aW9uIGZpbHRlciAocGF0dGVybiwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICByZXR1cm4gZnVuY3Rpb24gKHAsIGksIGxpc3QpIHtcbiAgICByZXR1cm4gbWluaW1hdGNoKHAsIHBhdHRlcm4sIG9wdGlvbnMpXG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0IChhLCBiKSB7XG4gIGIgPSBiIHx8IHt9XG4gIHZhciB0ID0ge31cbiAgT2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgIHRba10gPSBhW2tdXG4gIH0pXG4gIE9iamVjdC5rZXlzKGIpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICB0W2tdID0gYltrXVxuICB9KVxuICByZXR1cm4gdFxufVxuXG5taW5pbWF0Y2guZGVmYXVsdHMgPSBmdW5jdGlvbiAoZGVmKSB7XG4gIGlmICghZGVmIHx8IHR5cGVvZiBkZWYgIT09ICdvYmplY3QnIHx8ICFPYmplY3Qua2V5cyhkZWYpLmxlbmd0aCkge1xuICAgIHJldHVybiBtaW5pbWF0Y2hcbiAgfVxuXG4gIHZhciBvcmlnID0gbWluaW1hdGNoXG5cbiAgdmFyIG0gPSBmdW5jdGlvbiBtaW5pbWF0Y2ggKHAsIHBhdHRlcm4sIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3JpZyhwLCBwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSlcbiAgfVxuXG4gIG0uTWluaW1hdGNoID0gZnVuY3Rpb24gTWluaW1hdGNoIChwYXR0ZXJuLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBvcmlnLk1pbmltYXRjaChwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSlcbiAgfVxuICBtLk1pbmltYXRjaC5kZWZhdWx0cyA9IGZ1bmN0aW9uIGRlZmF1bHRzIChvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9yaWcuZGVmYXVsdHMoZXh0KGRlZiwgb3B0aW9ucykpLk1pbmltYXRjaFxuICB9XG5cbiAgbS5maWx0ZXIgPSBmdW5jdGlvbiBmaWx0ZXIgKHBhdHRlcm4sIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3JpZy5maWx0ZXIocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpXG4gIH1cblxuICBtLmRlZmF1bHRzID0gZnVuY3Rpb24gZGVmYXVsdHMgKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3JpZy5kZWZhdWx0cyhleHQoZGVmLCBvcHRpb25zKSlcbiAgfVxuXG4gIG0ubWFrZVJlID0gZnVuY3Rpb24gbWFrZVJlIChwYXR0ZXJuLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9yaWcubWFrZVJlKHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKVxuICB9XG5cbiAgbS5icmFjZUV4cGFuZCA9IGZ1bmN0aW9uIGJyYWNlRXhwYW5kIChwYXR0ZXJuLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9yaWcuYnJhY2VFeHBhbmQocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpXG4gIH1cblxuICBtLm1hdGNoID0gZnVuY3Rpb24gKGxpc3QsIHBhdHRlcm4sIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3JpZy5tYXRjaChsaXN0LCBwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSlcbiAgfVxuXG4gIHJldHVybiBtXG59XG5cbk1pbmltYXRjaC5kZWZhdWx0cyA9IGZ1bmN0aW9uIChkZWYpIHtcbiAgcmV0dXJuIG1pbmltYXRjaC5kZWZhdWx0cyhkZWYpLk1pbmltYXRjaFxufVxuXG5mdW5jdGlvbiBtaW5pbWF0Y2ggKHAsIHBhdHRlcm4sIG9wdGlvbnMpIHtcbiAgYXNzZXJ0VmFsaWRQYXR0ZXJuKHBhdHRlcm4pXG5cbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge31cblxuICAvLyBzaG9ydGN1dDogY29tbWVudHMgbWF0Y2ggbm90aGluZy5cbiAgaWYgKCFvcHRpb25zLm5vY29tbWVudCAmJiBwYXR0ZXJuLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gbmV3IE1pbmltYXRjaChwYXR0ZXJuLCBvcHRpb25zKS5tYXRjaChwKVxufVxuXG5mdW5jdGlvbiBNaW5pbWF0Y2ggKHBhdHRlcm4sIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE1pbmltYXRjaCkpIHtcbiAgICByZXR1cm4gbmV3IE1pbmltYXRjaChwYXR0ZXJuLCBvcHRpb25zKVxuICB9XG5cbiAgYXNzZXJ0VmFsaWRQYXR0ZXJuKHBhdHRlcm4pXG5cbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge31cblxuICBwYXR0ZXJuID0gcGF0dGVybi50cmltKClcblxuICAvLyB3aW5kb3dzIHN1cHBvcnQ6IG5lZWQgdG8gdXNlIC8sIG5vdCBcXFxuICBpZiAoIW9wdGlvbnMuYWxsb3dXaW5kb3dzRXNjYXBlICYmIHBhdGguc2VwICE9PSAnLycpIHtcbiAgICBwYXR0ZXJuID0gcGF0dGVybi5zcGxpdChwYXRoLnNlcCkuam9pbignLycpXG4gIH1cblxuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG4gIHRoaXMuc2V0ID0gW11cbiAgdGhpcy5wYXR0ZXJuID0gcGF0dGVyblxuICB0aGlzLnJlZ2V4cCA9IG51bGxcbiAgdGhpcy5uZWdhdGUgPSBmYWxzZVxuICB0aGlzLmNvbW1lbnQgPSBmYWxzZVxuICB0aGlzLmVtcHR5ID0gZmFsc2VcbiAgdGhpcy5wYXJ0aWFsID0gISFvcHRpb25zLnBhcnRpYWxcblxuICAvLyBtYWtlIHRoZSBzZXQgb2YgcmVnZXhwcyBldGMuXG4gIHRoaXMubWFrZSgpXG59XG5cbk1pbmltYXRjaC5wcm90b3R5cGUuZGVidWcgPSBmdW5jdGlvbiAoKSB7fVxuXG5NaW5pbWF0Y2gucHJvdG90eXBlLm1ha2UgPSBtYWtlXG5mdW5jdGlvbiBtYWtlICgpIHtcbiAgdmFyIHBhdHRlcm4gPSB0aGlzLnBhdHRlcm5cbiAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnNcblxuICAvLyBlbXB0eSBwYXR0ZXJucyBhbmQgY29tbWVudHMgbWF0Y2ggbm90aGluZy5cbiAgaWYgKCFvcHRpb25zLm5vY29tbWVudCAmJiBwYXR0ZXJuLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgdGhpcy5jb21tZW50ID0gdHJ1ZVxuICAgIHJldHVyblxuICB9XG4gIGlmICghcGF0dGVybikge1xuICAgIHRoaXMuZW1wdHkgPSB0cnVlXG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBzdGVwIDE6IGZpZ3VyZSBvdXQgbmVnYXRpb24sIGV0Yy5cbiAgdGhpcy5wYXJzZU5lZ2F0ZSgpXG5cbiAgLy8gc3RlcCAyOiBleHBhbmQgYnJhY2VzXG4gIHZhciBzZXQgPSB0aGlzLmdsb2JTZXQgPSB0aGlzLmJyYWNlRXhwYW5kKClcblxuICBpZiAob3B0aW9ucy5kZWJ1ZykgdGhpcy5kZWJ1ZyA9IGZ1bmN0aW9uIGRlYnVnKCkgeyBjb25zb2xlLmVycm9yLmFwcGx5KGNvbnNvbGUsIGFyZ3VtZW50cykgfVxuXG4gIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCBzZXQpXG5cbiAgLy8gc3RlcCAzOiBub3cgd2UgaGF2ZSBhIHNldCwgc28gdHVybiBlYWNoIG9uZSBpbnRvIGEgc2VyaWVzIG9mIHBhdGgtcG9ydGlvblxuICAvLyBtYXRjaGluZyBwYXR0ZXJucy5cbiAgLy8gVGhlc2Ugd2lsbCBiZSByZWdleHBzLCBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgXCIqKlwiLCB3aGljaCBpc1xuICAvLyBzZXQgdG8gdGhlIEdMT0JTVEFSIG9iamVjdCBmb3IgZ2xvYnN0YXIgYmVoYXZpb3IsXG4gIC8vIGFuZCB3aWxsIG5vdCBjb250YWluIGFueSAvIGNoYXJhY3RlcnNcbiAgc2V0ID0gdGhpcy5nbG9iUGFydHMgPSBzZXQubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgcmV0dXJuIHMuc3BsaXQoc2xhc2hTcGxpdClcbiAgfSlcblxuICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgc2V0KVxuXG4gIC8vIGdsb2IgLS0+IHJlZ2V4cHNcbiAgc2V0ID0gc2V0Lm1hcChmdW5jdGlvbiAocywgc2ksIHNldCkge1xuICAgIHJldHVybiBzLm1hcCh0aGlzLnBhcnNlLCB0aGlzKVxuICB9LCB0aGlzKVxuXG4gIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCBzZXQpXG5cbiAgLy8gZmlsdGVyIG91dCBldmVyeXRoaW5nIHRoYXQgZGlkbid0IGNvbXBpbGUgcHJvcGVybHkuXG4gIHNldCA9IHNldC5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcbiAgICByZXR1cm4gcy5pbmRleE9mKGZhbHNlKSA9PT0gLTFcbiAgfSlcblxuICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgc2V0KVxuXG4gIHRoaXMuc2V0ID0gc2V0XG59XG5cbk1pbmltYXRjaC5wcm90b3R5cGUucGFyc2VOZWdhdGUgPSBwYXJzZU5lZ2F0ZVxuZnVuY3Rpb24gcGFyc2VOZWdhdGUgKCkge1xuICB2YXIgcGF0dGVybiA9IHRoaXMucGF0dGVyblxuICB2YXIgbmVnYXRlID0gZmFsc2VcbiAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnNcbiAgdmFyIG5lZ2F0ZU9mZnNldCA9IDBcblxuICBpZiAob3B0aW9ucy5ub25lZ2F0ZSkgcmV0dXJuXG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXR0ZXJuLmxlbmd0aFxuICAgIDsgaSA8IGwgJiYgcGF0dGVybi5jaGFyQXQoaSkgPT09ICchJ1xuICAgIDsgaSsrKSB7XG4gICAgbmVnYXRlID0gIW5lZ2F0ZVxuICAgIG5lZ2F0ZU9mZnNldCsrXG4gIH1cblxuICBpZiAobmVnYXRlT2Zmc2V0KSB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuLnN1YnN0cihuZWdhdGVPZmZzZXQpXG4gIHRoaXMubmVnYXRlID0gbmVnYXRlXG59XG5cbi8vIEJyYWNlIGV4cGFuc2lvbjpcbi8vIGF7YixjfWQgLT4gYWJkIGFjZFxuLy8gYXtiLH1jIC0+IGFiYyBhY1xuLy8gYXswLi4zfWQgLT4gYTBkIGExZCBhMmQgYTNkXG4vLyBhe2IsY3tkLGV9Zn1nIC0+IGFiZyBhY2RmZyBhY2VmZ1xuLy8gYXtiLGN9ZHtlLGZ9ZyAtPiBhYmRlZyBhY2RlZyBhYmRlZyBhYmRmZ1xuLy9cbi8vIEludmFsaWQgc2V0cyBhcmUgbm90IGV4cGFuZGVkLlxuLy8gYXsyLi59YiAtPiBhezIuLn1iXG4vLyBhe2J9YyAtPiBhe2J9Y1xubWluaW1hdGNoLmJyYWNlRXhwYW5kID0gZnVuY3Rpb24gKHBhdHRlcm4sIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGJyYWNlRXhwYW5kKHBhdHRlcm4sIG9wdGlvbnMpXG59XG5cbk1pbmltYXRjaC5wcm90b3R5cGUuYnJhY2VFeHBhbmQgPSBicmFjZUV4cGFuZFxuXG5mdW5jdGlvbiBicmFjZUV4cGFuZCAocGF0dGVybiwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIE1pbmltYXRjaCkge1xuICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9uc1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zID0ge31cbiAgICB9XG4gIH1cblxuICBwYXR0ZXJuID0gdHlwZW9mIHBhdHRlcm4gPT09ICd1bmRlZmluZWQnXG4gICAgPyB0aGlzLnBhdHRlcm4gOiBwYXR0ZXJuXG5cbiAgYXNzZXJ0VmFsaWRQYXR0ZXJuKHBhdHRlcm4pXG5cbiAgLy8gVGhhbmtzIHRvIFlldGluZyBMaSA8aHR0cHM6Ly9naXRodWIuY29tL3lldGluZ2xpPiBmb3JcbiAgLy8gaW1wcm92aW5nIHRoaXMgcmVnZXhwIHRvIGF2b2lkIGEgUmVET1MgdnVsbmVyYWJpbGl0eS5cbiAgaWYgKG9wdGlvbnMubm9icmFjZSB8fCAhL1xceyg/Oig/IVxceykuKSpcXH0vLnRlc3QocGF0dGVybikpIHtcbiAgICAvLyBzaG9ydGN1dC4gbm8gbmVlZCB0byBleHBhbmQuXG4gICAgcmV0dXJuIFtwYXR0ZXJuXVxuICB9XG5cbiAgcmV0dXJuIGV4cGFuZChwYXR0ZXJuKVxufVxuXG52YXIgTUFYX1BBVFRFUk5fTEVOR1RIID0gMTAyNCAqIDY0XG52YXIgYXNzZXJ0VmFsaWRQYXR0ZXJuID0gZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgaWYgKHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgcGF0dGVybicpXG4gIH1cblxuICBpZiAocGF0dGVybi5sZW5ndGggPiBNQVhfUEFUVEVSTl9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXR0ZXJuIGlzIHRvbyBsb25nJylcbiAgfVxufVxuXG4vLyBwYXJzZSBhIGNvbXBvbmVudCBvZiB0aGUgZXhwYW5kZWQgc2V0LlxuLy8gQXQgdGhpcyBwb2ludCwgbm8gcGF0dGVybiBtYXkgY29udGFpbiBcIi9cIiBpbiBpdFxuLy8gc28gd2UncmUgZ29pbmcgdG8gcmV0dXJuIGEgMmQgYXJyYXksIHdoZXJlIGVhY2ggZW50cnkgaXMgdGhlIGZ1bGxcbi8vIHBhdHRlcm4sIHNwbGl0IG9uICcvJywgYW5kIHRoZW4gdHVybmVkIGludG8gYSByZWd1bGFyIGV4cHJlc3Npb24uXG4vLyBBIHJlZ2V4cCBpcyBtYWRlIGF0IHRoZSBlbmQgd2hpY2ggam9pbnMgZWFjaCBhcnJheSB3aXRoIGFuXG4vLyBlc2NhcGVkIC8sIGFuZCBhbm90aGVyIGZ1bGwgb25lIHdoaWNoIGpvaW5zIGVhY2ggcmVnZXhwIHdpdGggfC5cbi8vXG4vLyBGb2xsb3dpbmcgdGhlIGxlYWQgb2YgQmFzaCA0LjEsIG5vdGUgdGhhdCBcIioqXCIgb25seSBoYXMgc3BlY2lhbCBtZWFuaW5nXG4vLyB3aGVuIGl0IGlzIHRoZSAqb25seSogdGhpbmcgaW4gYSBwYXRoIHBvcnRpb24uICBPdGhlcndpc2UsIGFueSBzZXJpZXNcbi8vIG9mICogaXMgZXF1aXZhbGVudCB0byBhIHNpbmdsZSAqLiAgR2xvYnN0YXIgYmVoYXZpb3IgaXMgZW5hYmxlZCBieVxuLy8gZGVmYXVsdCwgYW5kIGNhbiBiZSBkaXNhYmxlZCBieSBzZXR0aW5nIG9wdGlvbnMubm9nbG9ic3Rhci5cbk1pbmltYXRjaC5wcm90b3R5cGUucGFyc2UgPSBwYXJzZVxudmFyIFNVQlBBUlNFID0ge31cbmZ1bmN0aW9uIHBhcnNlIChwYXR0ZXJuLCBpc1N1Yikge1xuICBhc3NlcnRWYWxpZFBhdHRlcm4ocGF0dGVybilcblxuICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9uc1xuXG4gIC8vIHNob3J0Y3V0c1xuICBpZiAocGF0dGVybiA9PT0gJyoqJykge1xuICAgIGlmICghb3B0aW9ucy5ub2dsb2JzdGFyKVxuICAgICAgcmV0dXJuIEdMT0JTVEFSXG4gICAgZWxzZVxuICAgICAgcGF0dGVybiA9ICcqJ1xuICB9XG4gIGlmIChwYXR0ZXJuID09PSAnJykgcmV0dXJuICcnXG5cbiAgdmFyIHJlID0gJydcbiAgdmFyIGhhc01hZ2ljID0gISFvcHRpb25zLm5vY2FzZVxuICB2YXIgZXNjYXBpbmcgPSBmYWxzZVxuICAvLyA/ID0+IG9uZSBzaW5nbGUgY2hhcmFjdGVyXG4gIHZhciBwYXR0ZXJuTGlzdFN0YWNrID0gW11cbiAgdmFyIG5lZ2F0aXZlTGlzdHMgPSBbXVxuICB2YXIgc3RhdGVDaGFyXG4gIHZhciBpbkNsYXNzID0gZmFsc2VcbiAgdmFyIHJlQ2xhc3NTdGFydCA9IC0xXG4gIHZhciBjbGFzc1N0YXJ0ID0gLTFcbiAgLy8gLiBhbmQgLi4gbmV2ZXIgbWF0Y2ggYW55dGhpbmcgdGhhdCBkb2Vzbid0IHN0YXJ0IHdpdGggLixcbiAgLy8gZXZlbiB3aGVuIG9wdGlvbnMuZG90IGlzIHNldC5cbiAgdmFyIHBhdHRlcm5TdGFydCA9IHBhdHRlcm4uY2hhckF0KDApID09PSAnLicgPyAnJyAvLyBhbnl0aGluZ1xuICAvLyBub3QgKHN0YXJ0IG9yIC8gZm9sbG93ZWQgYnkgLiBvciAuLiBmb2xsb3dlZCBieSAvIG9yIGVuZClcbiAgOiBvcHRpb25zLmRvdCA/ICcoPyEoPzpefFxcXFxcXC8pXFxcXC57MSwyfSg/OiR8XFxcXFxcLykpJ1xuICA6ICcoPyFcXFxcLiknXG4gIHZhciBzZWxmID0gdGhpc1xuXG4gIGZ1bmN0aW9uIGNsZWFyU3RhdGVDaGFyICgpIHtcbiAgICBpZiAoc3RhdGVDaGFyKSB7XG4gICAgICAvLyB3ZSBoYWQgc29tZSBzdGF0ZS10cmFja2luZyBjaGFyYWN0ZXJcbiAgICAgIC8vIHRoYXQgd2Fzbid0IGNvbnN1bWVkIGJ5IHRoaXMgcGFzcy5cbiAgICAgIHN3aXRjaCAoc3RhdGVDaGFyKSB7XG4gICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgIHJlICs9IHN0YXJcbiAgICAgICAgICBoYXNNYWdpYyA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnPyc6XG4gICAgICAgICAgcmUgKz0gcW1hcmtcbiAgICAgICAgICBoYXNNYWdpYyA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZSArPSAnXFxcXCcgKyBzdGF0ZUNoYXJcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHNlbGYuZGVidWcoJ2NsZWFyU3RhdGVDaGFyICVqICVqJywgc3RhdGVDaGFyLCByZSlcbiAgICAgIHN0YXRlQ2hhciA9IGZhbHNlXG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHBhdHRlcm4ubGVuZ3RoLCBjXG4gICAgOyAoaSA8IGxlbikgJiYgKGMgPSBwYXR0ZXJuLmNoYXJBdChpKSlcbiAgICA7IGkrKykge1xuICAgIHRoaXMuZGVidWcoJyVzXFx0JXMgJXMgJWonLCBwYXR0ZXJuLCBpLCByZSwgYylcblxuICAgIC8vIHNraXAgb3ZlciBhbnkgdGhhdCBhcmUgZXNjYXBlZC5cbiAgICBpZiAoZXNjYXBpbmcgJiYgcmVTcGVjaWFsc1tjXSkge1xuICAgICAgcmUgKz0gJ1xcXFwnICsgY1xuICAgICAgZXNjYXBpbmcgPSBmYWxzZVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGMpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBjYXNlICcvJzoge1xuICAgICAgICAvLyBjb21wbGV0ZWx5IG5vdCBhbGxvd2VkLCBldmVuIGVzY2FwZWQuXG4gICAgICAgIC8vIFNob3VsZCBhbHJlYWR5IGJlIHBhdGgtc3BsaXQgYnkgbm93LlxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgIGNsZWFyU3RhdGVDaGFyKClcbiAgICAgICAgZXNjYXBpbmcgPSB0cnVlXG4gICAgICBjb250aW51ZVxuXG4gICAgICAvLyB0aGUgdmFyaW91cyBzdGF0ZUNoYXIgdmFsdWVzXG4gICAgICAvLyBmb3IgdGhlIFwiZXh0Z2xvYlwiIHN0dWZmLlxuICAgICAgY2FzZSAnPyc6XG4gICAgICBjYXNlICcqJzpcbiAgICAgIGNhc2UgJysnOlxuICAgICAgY2FzZSAnQCc6XG4gICAgICBjYXNlICchJzpcbiAgICAgICAgdGhpcy5kZWJ1ZygnJXNcXHQlcyAlcyAlaiA8LS0gc3RhdGVDaGFyJywgcGF0dGVybiwgaSwgcmUsIGMpXG5cbiAgICAgICAgLy8gYWxsIG9mIHRob3NlIGFyZSBsaXRlcmFscyBpbnNpZGUgYSBjbGFzcywgZXhjZXB0IHRoYXRcbiAgICAgICAgLy8gdGhlIGdsb2IgWyFhXSBtZWFucyBbXmFdIGluIHJlZ2V4cFxuICAgICAgICBpZiAoaW5DbGFzcykge1xuICAgICAgICAgIHRoaXMuZGVidWcoJyAgaW4gY2xhc3MnKVxuICAgICAgICAgIGlmIChjID09PSAnIScgJiYgaSA9PT0gY2xhc3NTdGFydCArIDEpIGMgPSAnXidcbiAgICAgICAgICByZSArPSBjXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHN0YXRlQ2hhciwgdGhlbiBpdCBtZWFuc1xuICAgICAgICAvLyB0aGF0IHRoZXJlIHdhcyBzb21ldGhpbmcgbGlrZSAqKiBvciArPyBpbiB0aGVyZS5cbiAgICAgICAgLy8gSGFuZGxlIHRoZSBzdGF0ZUNoYXIsIHRoZW4gcHJvY2VlZCB3aXRoIHRoaXMgb25lLlxuICAgICAgICBzZWxmLmRlYnVnKCdjYWxsIGNsZWFyU3RhdGVDaGFyICVqJywgc3RhdGVDaGFyKVxuICAgICAgICBjbGVhclN0YXRlQ2hhcigpXG4gICAgICAgIHN0YXRlQ2hhciA9IGNcbiAgICAgICAgLy8gaWYgZXh0Z2xvYiBpcyBkaXNhYmxlZCwgdGhlbiArKGFzZGZ8Zm9vKSBpc24ndCBhIHRoaW5nLlxuICAgICAgICAvLyBqdXN0IGNsZWFyIHRoZSBzdGF0ZWNoYXIgKm5vdyosIHJhdGhlciB0aGFuIGV2ZW4gZGl2aW5nIGludG9cbiAgICAgICAgLy8gdGhlIHBhdHRlcm5MaXN0IHN0dWZmLlxuICAgICAgICBpZiAob3B0aW9ucy5ub2V4dCkgY2xlYXJTdGF0ZUNoYXIoKVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSAnKCc6XG4gICAgICAgIGlmIChpbkNsYXNzKSB7XG4gICAgICAgICAgcmUgKz0gJygnXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3RhdGVDaGFyKSB7XG4gICAgICAgICAgcmUgKz0gJ1xcXFwoJ1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBwYXR0ZXJuTGlzdFN0YWNrLnB1c2goe1xuICAgICAgICAgIHR5cGU6IHN0YXRlQ2hhcixcbiAgICAgICAgICBzdGFydDogaSAtIDEsXG4gICAgICAgICAgcmVTdGFydDogcmUubGVuZ3RoLFxuICAgICAgICAgIG9wZW46IHBsVHlwZXNbc3RhdGVDaGFyXS5vcGVuLFxuICAgICAgICAgIGNsb3NlOiBwbFR5cGVzW3N0YXRlQ2hhcl0uY2xvc2VcbiAgICAgICAgfSlcbiAgICAgICAgLy8gbmVnYXRpb24gaXMgKD86KD8hanMpW14vXSopXG4gICAgICAgIHJlICs9IHN0YXRlQ2hhciA9PT0gJyEnID8gJyg/Oig/ISg/OicgOiAnKD86J1xuICAgICAgICB0aGlzLmRlYnVnKCdwbFR5cGUgJWogJWonLCBzdGF0ZUNoYXIsIHJlKVxuICAgICAgICBzdGF0ZUNoYXIgPSBmYWxzZVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSAnKSc6XG4gICAgICAgIGlmIChpbkNsYXNzIHx8ICFwYXR0ZXJuTGlzdFN0YWNrLmxlbmd0aCkge1xuICAgICAgICAgIHJlICs9ICdcXFxcKSdcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgY2xlYXJTdGF0ZUNoYXIoKVxuICAgICAgICBoYXNNYWdpYyA9IHRydWVcbiAgICAgICAgdmFyIHBsID0gcGF0dGVybkxpc3RTdGFjay5wb3AoKVxuICAgICAgICAvLyBuZWdhdGlvbiBpcyAoPzooPyFqcylbXi9dKilcbiAgICAgICAgLy8gVGhlIG90aGVycyBhcmUgKD86PHBhdHRlcm4+KTx0eXBlPlxuICAgICAgICByZSArPSBwbC5jbG9zZVxuICAgICAgICBpZiAocGwudHlwZSA9PT0gJyEnKSB7XG4gICAgICAgICAgbmVnYXRpdmVMaXN0cy5wdXNoKHBsKVxuICAgICAgICB9XG4gICAgICAgIHBsLnJlRW5kID0gcmUubGVuZ3RoXG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlICd8JzpcbiAgICAgICAgaWYgKGluQ2xhc3MgfHwgIXBhdHRlcm5MaXN0U3RhY2subGVuZ3RoIHx8IGVzY2FwaW5nKSB7XG4gICAgICAgICAgcmUgKz0gJ1xcXFx8J1xuICAgICAgICAgIGVzY2FwaW5nID0gZmFsc2VcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgY2xlYXJTdGF0ZUNoYXIoKVxuICAgICAgICByZSArPSAnfCdcbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIC8vIHRoZXNlIGFyZSBtb3N0bHkgdGhlIHNhbWUgaW4gcmVnZXhwIGFuZCBnbG9iXG4gICAgICBjYXNlICdbJzpcbiAgICAgICAgLy8gc3dhbGxvdyBhbnkgc3RhdGUtdHJhY2tpbmcgY2hhciBiZWZvcmUgdGhlIFtcbiAgICAgICAgY2xlYXJTdGF0ZUNoYXIoKVxuXG4gICAgICAgIGlmIChpbkNsYXNzKSB7XG4gICAgICAgICAgcmUgKz0gJ1xcXFwnICsgY1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBpbkNsYXNzID0gdHJ1ZVxuICAgICAgICBjbGFzc1N0YXJ0ID0gaVxuICAgICAgICByZUNsYXNzU3RhcnQgPSByZS5sZW5ndGhcbiAgICAgICAgcmUgKz0gY1xuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSAnXSc6XG4gICAgICAgIC8vICBhIHJpZ2h0IGJyYWNrZXQgc2hhbGwgbG9zZSBpdHMgc3BlY2lhbFxuICAgICAgICAvLyAgbWVhbmluZyBhbmQgcmVwcmVzZW50IGl0c2VsZiBpblxuICAgICAgICAvLyAgYSBicmFja2V0IGV4cHJlc3Npb24gaWYgaXQgb2NjdXJzXG4gICAgICAgIC8vICBmaXJzdCBpbiB0aGUgbGlzdC4gIC0tIFBPU0lYLjIgMi44LjMuMlxuICAgICAgICBpZiAoaSA9PT0gY2xhc3NTdGFydCArIDEgfHwgIWluQ2xhc3MpIHtcbiAgICAgICAgICByZSArPSAnXFxcXCcgKyBjXG4gICAgICAgICAgZXNjYXBpbmcgPSBmYWxzZVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgbGVmdCBhIGNsYXNzIG9wZW4uXG4gICAgICAgIC8vIFwiW3otYV1cIiBpcyB2YWxpZCwgZXF1aXZhbGVudCB0byBcIlxcW3otYVxcXVwiXG4gICAgICAgIC8vIHNwbGl0IHdoZXJlIHRoZSBsYXN0IFsgd2FzLCBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZVxuICAgICAgICAvLyBhbiBpbnZhbGlkIHJlLiBpZiBzbywgcmUtd2FsayB0aGUgY29udGVudHMgb2YgdGhlXG4gICAgICAgIC8vIHdvdWxkLWJlIGNsYXNzIHRvIHJlLXRyYW5zbGF0ZSBhbnkgY2hhcmFjdGVycyB0aGF0XG4gICAgICAgIC8vIHdlcmUgcGFzc2VkIHRocm91Z2ggYXMtaXNcbiAgICAgICAgLy8gVE9ETzogSXQgd291bGQgcHJvYmFibHkgYmUgZmFzdGVyIHRvIGRldGVybWluZSB0aGlzXG4gICAgICAgIC8vIHdpdGhvdXQgYSB0cnkvY2F0Y2ggYW5kIGEgbmV3IFJlZ0V4cCwgYnV0IGl0J3MgdHJpY2t5XG4gICAgICAgIC8vIHRvIGRvIHNhZmVseS4gIEZvciBub3csIHRoaXMgaXMgc2FmZSBhbmQgd29ya3MuXG4gICAgICAgIHZhciBjcyA9IHBhdHRlcm4uc3Vic3RyaW5nKGNsYXNzU3RhcnQgKyAxLCBpKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIFJlZ0V4cCgnWycgKyBjcyArICddJylcbiAgICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgICAvLyBub3QgYSB2YWxpZCBjbGFzcyFcbiAgICAgICAgICB2YXIgc3AgPSB0aGlzLnBhcnNlKGNzLCBTVUJQQVJTRSlcbiAgICAgICAgICByZSA9IHJlLnN1YnN0cigwLCByZUNsYXNzU3RhcnQpICsgJ1xcXFxbJyArIHNwWzBdICsgJ1xcXFxdJ1xuICAgICAgICAgIGhhc01hZ2ljID0gaGFzTWFnaWMgfHwgc3BbMV1cbiAgICAgICAgICBpbkNsYXNzID0gZmFsc2VcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gZmluaXNoIHVwIHRoZSBjbGFzcy5cbiAgICAgICAgaGFzTWFnaWMgPSB0cnVlXG4gICAgICAgIGluQ2xhc3MgPSBmYWxzZVxuICAgICAgICByZSArPSBjXG4gICAgICBjb250aW51ZVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBzd2FsbG93IGFueSBzdGF0ZSBjaGFyIHRoYXQgd2Fzbid0IGNvbnN1bWVkXG4gICAgICAgIGNsZWFyU3RhdGVDaGFyKClcblxuICAgICAgICBpZiAoZXNjYXBpbmcpIHtcbiAgICAgICAgICAvLyBubyBuZWVkXG4gICAgICAgICAgZXNjYXBpbmcgPSBmYWxzZVxuICAgICAgICB9IGVsc2UgaWYgKHJlU3BlY2lhbHNbY11cbiAgICAgICAgICAmJiAhKGMgPT09ICdeJyAmJiBpbkNsYXNzKSkge1xuICAgICAgICAgIHJlICs9ICdcXFxcJ1xuICAgICAgICB9XG5cbiAgICAgICAgcmUgKz0gY1xuXG4gICAgfSAvLyBzd2l0Y2hcbiAgfSAvLyBmb3JcblxuICAvLyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgbGVmdCBhIGNsYXNzIG9wZW4uXG4gIC8vIFwiW2FiY1wiIGlzIHZhbGlkLCBlcXVpdmFsZW50IHRvIFwiXFxbYWJjXCJcbiAgaWYgKGluQ2xhc3MpIHtcbiAgICAvLyBzcGxpdCB3aGVyZSB0aGUgbGFzdCBbIHdhcywgYW5kIGVzY2FwZSBpdFxuICAgIC8vIHRoaXMgaXMgYSBodWdlIHBpdGEuICBXZSBub3cgaGF2ZSB0byByZS13YWxrXG4gICAgLy8gdGhlIGNvbnRlbnRzIG9mIHRoZSB3b3VsZC1iZSBjbGFzcyB0byByZS10cmFuc2xhdGVcbiAgICAvLyBhbnkgY2hhcmFjdGVycyB0aGF0IHdlcmUgcGFzc2VkIHRocm91Z2ggYXMtaXNcbiAgICBjcyA9IHBhdHRlcm4uc3Vic3RyKGNsYXNzU3RhcnQgKyAxKVxuICAgIHNwID0gdGhpcy5wYXJzZShjcywgU1VCUEFSU0UpXG4gICAgcmUgPSByZS5zdWJzdHIoMCwgcmVDbGFzc1N0YXJ0KSArICdcXFxcWycgKyBzcFswXVxuICAgIGhhc01hZ2ljID0gaGFzTWFnaWMgfHwgc3BbMV1cbiAgfVxuXG4gIC8vIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBoYWQgYSArKCB0aGluZyBhdCB0aGUgKmVuZCpcbiAgLy8gb2YgdGhlIHBhdHRlcm4uXG4gIC8vIGVhY2ggcGF0dGVybiBsaXN0IHN0YWNrIGFkZHMgMyBjaGFycywgYW5kIHdlIG5lZWQgdG8gZ28gdGhyb3VnaFxuICAvLyBhbmQgZXNjYXBlIGFueSB8IGNoYXJzIHRoYXQgd2VyZSBwYXNzZWQgdGhyb3VnaCBhcy1pcyBmb3IgdGhlIHJlZ2V4cC5cbiAgLy8gR28gdGhyb3VnaCBhbmQgZXNjYXBlIHRoZW0sIHRha2luZyBjYXJlIG5vdCB0byBkb3VibGUtZXNjYXBlIGFueVxuICAvLyB8IGNoYXJzIHRoYXQgd2VyZSBhbHJlYWR5IGVzY2FwZWQuXG4gIGZvciAocGwgPSBwYXR0ZXJuTGlzdFN0YWNrLnBvcCgpOyBwbDsgcGwgPSBwYXR0ZXJuTGlzdFN0YWNrLnBvcCgpKSB7XG4gICAgdmFyIHRhaWwgPSByZS5zbGljZShwbC5yZVN0YXJ0ICsgcGwub3Blbi5sZW5ndGgpXG4gICAgdGhpcy5kZWJ1Zygnc2V0dGluZyB0YWlsJywgcmUsIHBsKVxuICAgIC8vIG1heWJlIHNvbWUgZXZlbiBudW1iZXIgb2YgXFwsIHRoZW4gbWF5YmUgMSBcXCwgZm9sbG93ZWQgYnkgYSB8XG4gICAgdGFpbCA9IHRhaWwucmVwbGFjZSgvKCg/OlxcXFx7Mn0pezAsNjR9KShcXFxcPylcXHwvZywgZnVuY3Rpb24gKF8sICQxLCAkMikge1xuICAgICAgaWYgKCEkMikge1xuICAgICAgICAvLyB0aGUgfCBpc24ndCBhbHJlYWR5IGVzY2FwZWQsIHNvIGVzY2FwZSBpdC5cbiAgICAgICAgJDIgPSAnXFxcXCdcbiAgICAgIH1cblxuICAgICAgLy8gbmVlZCB0byBlc2NhcGUgYWxsIHRob3NlIHNsYXNoZXMgKmFnYWluKiwgd2l0aG91dCBlc2NhcGluZyB0aGVcbiAgICAgIC8vIG9uZSB0aGF0IHdlIG5lZWQgZm9yIGVzY2FwaW5nIHRoZSB8IGNoYXJhY3Rlci4gIEFzIGl0IHdvcmtzIG91dCxcbiAgICAgIC8vIGVzY2FwaW5nIGFuIGV2ZW4gbnVtYmVyIG9mIHNsYXNoZXMgY2FuIGJlIGRvbmUgYnkgc2ltcGx5IHJlcGVhdGluZ1xuICAgICAgLy8gaXQgZXhhY3RseSBhZnRlciBpdHNlbGYuICBUaGF0J3Mgd2h5IHRoaXMgdHJpY2sgd29ya3MuXG4gICAgICAvL1xuICAgICAgLy8gSSBhbSBzb3JyeSB0aGF0IHlvdSBoYXZlIHRvIHNlZSB0aGlzLlxuICAgICAgcmV0dXJuICQxICsgJDEgKyAkMiArICd8J1xuICAgIH0pXG5cbiAgICB0aGlzLmRlYnVnKCd0YWlsPSVqXFxuICAgJXMnLCB0YWlsLCB0YWlsLCBwbCwgcmUpXG4gICAgdmFyIHQgPSBwbC50eXBlID09PSAnKicgPyBzdGFyXG4gICAgICA6IHBsLnR5cGUgPT09ICc/JyA/IHFtYXJrXG4gICAgICA6ICdcXFxcJyArIHBsLnR5cGVcblxuICAgIGhhc01hZ2ljID0gdHJ1ZVxuICAgIHJlID0gcmUuc2xpY2UoMCwgcGwucmVTdGFydCkgKyB0ICsgJ1xcXFwoJyArIHRhaWxcbiAgfVxuXG4gIC8vIGhhbmRsZSB0cmFpbGluZyB0aGluZ3MgdGhhdCBvbmx5IG1hdHRlciBhdCB0aGUgdmVyeSBlbmQuXG4gIGNsZWFyU3RhdGVDaGFyKClcbiAgaWYgKGVzY2FwaW5nKSB7XG4gICAgLy8gdHJhaWxpbmcgXFxcXFxuICAgIHJlICs9ICdcXFxcXFxcXCdcbiAgfVxuXG4gIC8vIG9ubHkgbmVlZCB0byBhcHBseSB0aGUgbm9kb3Qgc3RhcnQgaWYgdGhlIHJlIHN0YXJ0cyB3aXRoXG4gIC8vIHNvbWV0aGluZyB0aGF0IGNvdWxkIGNvbmNlaXZhYmx5IGNhcHR1cmUgYSBkb3RcbiAgdmFyIGFkZFBhdHRlcm5TdGFydCA9IGZhbHNlXG4gIHN3aXRjaCAocmUuY2hhckF0KDApKSB7XG4gICAgY2FzZSAnWyc6IGNhc2UgJy4nOiBjYXNlICcoJzogYWRkUGF0dGVyblN0YXJ0ID0gdHJ1ZVxuICB9XG5cbiAgLy8gSGFjayB0byB3b3JrIGFyb3VuZCBsYWNrIG9mIG5lZ2F0aXZlIGxvb2tiZWhpbmQgaW4gSlNcbiAgLy8gQSBwYXR0ZXJuIGxpa2U6ICouISh4KS4hKHl8eikgbmVlZHMgdG8gZW5zdXJlIHRoYXQgYSBuYW1lXG4gIC8vIGxpa2UgJ2EueHl6Lnl6JyBkb2Vzbid0IG1hdGNoLiAgU28sIHRoZSBmaXJzdCBuZWdhdGl2ZVxuICAvLyBsb29rYWhlYWQsIGhhcyB0byBsb29rIEFMTCB0aGUgd2F5IGFoZWFkLCB0byB0aGUgZW5kIG9mXG4gIC8vIHRoZSBwYXR0ZXJuLlxuICBmb3IgKHZhciBuID0gbmVnYXRpdmVMaXN0cy5sZW5ndGggLSAxOyBuID4gLTE7IG4tLSkge1xuICAgIHZhciBubCA9IG5lZ2F0aXZlTGlzdHNbbl1cblxuICAgIHZhciBubEJlZm9yZSA9IHJlLnNsaWNlKDAsIG5sLnJlU3RhcnQpXG4gICAgdmFyIG5sRmlyc3QgPSByZS5zbGljZShubC5yZVN0YXJ0LCBubC5yZUVuZCAtIDgpXG4gICAgdmFyIG5sTGFzdCA9IHJlLnNsaWNlKG5sLnJlRW5kIC0gOCwgbmwucmVFbmQpXG4gICAgdmFyIG5sQWZ0ZXIgPSByZS5zbGljZShubC5yZUVuZClcblxuICAgIG5sTGFzdCArPSBubEFmdGVyXG5cbiAgICAvLyBIYW5kbGUgbmVzdGVkIHN0dWZmIGxpa2UgKigqLmpzfCEoKi5qc29uKSksIHdoZXJlIG9wZW4gcGFyZW5zXG4gICAgLy8gbWVhbiB0aGF0IHdlIHNob3VsZCAqbm90KiBpbmNsdWRlIHRoZSApIGluIHRoZSBiaXQgdGhhdCBpcyBjb25zaWRlcmVkXG4gICAgLy8gXCJhZnRlclwiIHRoZSBuZWdhdGVkIHNlY3Rpb24uXG4gICAgdmFyIG9wZW5QYXJlbnNCZWZvcmUgPSBubEJlZm9yZS5zcGxpdCgnKCcpLmxlbmd0aCAtIDFcbiAgICB2YXIgY2xlYW5BZnRlciA9IG5sQWZ0ZXJcbiAgICBmb3IgKGkgPSAwOyBpIDwgb3BlblBhcmVuc0JlZm9yZTsgaSsrKSB7XG4gICAgICBjbGVhbkFmdGVyID0gY2xlYW5BZnRlci5yZXBsYWNlKC9cXClbKyo/XT8vLCAnJylcbiAgICB9XG4gICAgbmxBZnRlciA9IGNsZWFuQWZ0ZXJcblxuICAgIHZhciBkb2xsYXIgPSAnJ1xuICAgIGlmIChubEFmdGVyID09PSAnJyAmJiBpc1N1YiAhPT0gU1VCUEFSU0UpIHtcbiAgICAgIGRvbGxhciA9ICckJ1xuICAgIH1cbiAgICB2YXIgbmV3UmUgPSBubEJlZm9yZSArIG5sRmlyc3QgKyBubEFmdGVyICsgZG9sbGFyICsgbmxMYXN0XG4gICAgcmUgPSBuZXdSZVxuICB9XG5cbiAgLy8gaWYgdGhlIHJlIGlzIG5vdCBcIlwiIGF0IHRoaXMgcG9pbnQsIHRoZW4gd2UgbmVlZCB0byBtYWtlIHN1cmVcbiAgLy8gaXQgZG9lc24ndCBtYXRjaCBhZ2FpbnN0IGFuIGVtcHR5IHBhdGggcGFydC5cbiAgLy8gT3RoZXJ3aXNlIGEvKiB3aWxsIG1hdGNoIGEvLCB3aGljaCBpdCBzaG91bGQgbm90LlxuICBpZiAocmUgIT09ICcnICYmIGhhc01hZ2ljKSB7XG4gICAgcmUgPSAnKD89LiknICsgcmVcbiAgfVxuXG4gIGlmIChhZGRQYXR0ZXJuU3RhcnQpIHtcbiAgICByZSA9IHBhdHRlcm5TdGFydCArIHJlXG4gIH1cblxuICAvLyBwYXJzaW5nIGp1c3QgYSBwaWVjZSBvZiBhIGxhcmdlciBwYXR0ZXJuLlxuICBpZiAoaXNTdWIgPT09IFNVQlBBUlNFKSB7XG4gICAgcmV0dXJuIFtyZSwgaGFzTWFnaWNdXG4gIH1cblxuICAvLyBza2lwIHRoZSByZWdleHAgZm9yIG5vbi1tYWdpY2FsIHBhdHRlcm5zXG4gIC8vIHVuZXNjYXBlIGFueXRoaW5nIGluIGl0LCB0aG91Z2gsIHNvIHRoYXQgaXQnbGwgYmVcbiAgLy8gYW4gZXhhY3QgbWF0Y2ggYWdhaW5zdCBhIGZpbGUgZXRjLlxuICBpZiAoIWhhc01hZ2ljKSB7XG4gICAgcmV0dXJuIGdsb2JVbmVzY2FwZShwYXR0ZXJuKVxuICB9XG5cbiAgdmFyIGZsYWdzID0gb3B0aW9ucy5ub2Nhc2UgPyAnaScgOiAnJ1xuICB0cnkge1xuICAgIHZhciByZWdFeHAgPSBuZXcgUmVnRXhwKCdeJyArIHJlICsgJyQnLCBmbGFncylcbiAgfSBjYXRjaCAoZXIpIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gc2hvdWxkIGJlIGltcG9zc2libGUgKi8ge1xuICAgIC8vIElmIGl0IHdhcyBhbiBpbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiwgdGhlbiBpdCBjYW4ndCBtYXRjaFxuICAgIC8vIGFueXRoaW5nLiAgVGhpcyB0cmljayBsb29rcyBmb3IgYSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGVuZCBvZlxuICAgIC8vIHRoZSBzdHJpbmcsIHdoaWNoIGlzIG9mIGNvdXJzZSBpbXBvc3NpYmxlLCBleGNlcHQgaW4gbXVsdGktbGluZVxuICAgIC8vIG1vZGUsIGJ1dCBpdCdzIG5vdCBhIC9tIHJlZ2V4LlxuICAgIHJldHVybiBuZXcgUmVnRXhwKCckLicpXG4gIH1cblxuICByZWdFeHAuX2dsb2IgPSBwYXR0ZXJuXG4gIHJlZ0V4cC5fc3JjID0gcmVcblxuICByZXR1cm4gcmVnRXhwXG59XG5cbm1pbmltYXRjaC5tYWtlUmUgPSBmdW5jdGlvbiAocGF0dGVybiwgb3B0aW9ucykge1xuICByZXR1cm4gbmV3IE1pbmltYXRjaChwYXR0ZXJuLCBvcHRpb25zIHx8IHt9KS5tYWtlUmUoKVxufVxuXG5NaW5pbWF0Y2gucHJvdG90eXBlLm1ha2VSZSA9IG1ha2VSZVxuZnVuY3Rpb24gbWFrZVJlICgpIHtcbiAgaWYgKHRoaXMucmVnZXhwIHx8IHRoaXMucmVnZXhwID09PSBmYWxzZSkgcmV0dXJuIHRoaXMucmVnZXhwXG5cbiAgLy8gYXQgdGhpcyBwb2ludCwgdGhpcy5zZXQgaXMgYSAyZCBhcnJheSBvZiBwYXJ0aWFsXG4gIC8vIHBhdHRlcm4gc3RyaW5ncywgb3IgXCIqKlwiLlxuICAvL1xuICAvLyBJdCdzIGJldHRlciB0byB1c2UgLm1hdGNoKCkuICBUaGlzIGZ1bmN0aW9uIHNob3VsZG4ndFxuICAvLyBiZSB1c2VkLCByZWFsbHksIGJ1dCBpdCdzIHByZXR0eSBjb252ZW5pZW50IHNvbWV0aW1lcyxcbiAgLy8gd2hlbiB5b3UganVzdCB3YW50IHRvIHdvcmsgd2l0aCBhIHJlZ2V4LlxuICB2YXIgc2V0ID0gdGhpcy5zZXRcblxuICBpZiAoIXNldC5sZW5ndGgpIHtcbiAgICB0aGlzLnJlZ2V4cCA9IGZhbHNlXG4gICAgcmV0dXJuIHRoaXMucmVnZXhwXG4gIH1cbiAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnNcblxuICB2YXIgdHdvU3RhciA9IG9wdGlvbnMubm9nbG9ic3RhciA/IHN0YXJcbiAgICA6IG9wdGlvbnMuZG90ID8gdHdvU3RhckRvdFxuICAgIDogdHdvU3Rhck5vRG90XG4gIHZhciBmbGFncyA9IG9wdGlvbnMubm9jYXNlID8gJ2knIDogJydcblxuICB2YXIgcmUgPSBzZXQubWFwKGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4ubWFwKGZ1bmN0aW9uIChwKSB7XG4gICAgICByZXR1cm4gKHAgPT09IEdMT0JTVEFSKSA/IHR3b1N0YXJcbiAgICAgIDogKHR5cGVvZiBwID09PSAnc3RyaW5nJykgPyByZWdFeHBFc2NhcGUocClcbiAgICAgIDogcC5fc3JjXG4gICAgfSkuam9pbignXFxcXFxcLycpXG4gIH0pLmpvaW4oJ3wnKVxuXG4gIC8vIG11c3QgbWF0Y2ggZW50aXJlIHBhdHRlcm5cbiAgLy8gZW5kaW5nIGluIGEgKiBvciAqKiB3aWxsIG1ha2UgaXQgbGVzcyBzdHJpY3QuXG4gIHJlID0gJ14oPzonICsgcmUgKyAnKSQnXG5cbiAgLy8gY2FuIG1hdGNoIGFueXRoaW5nLCBhcyBsb25nIGFzIGl0J3Mgbm90IHRoaXMuXG4gIGlmICh0aGlzLm5lZ2F0ZSkgcmUgPSAnXig/IScgKyByZSArICcpLiokJ1xuXG4gIHRyeSB7XG4gICAgdGhpcy5yZWdleHAgPSBuZXcgUmVnRXhwKHJlLCBmbGFncylcbiAgfSBjYXRjaCAoZXgpIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gc2hvdWxkIGJlIGltcG9zc2libGUgKi8ge1xuICAgIHRoaXMucmVnZXhwID0gZmFsc2VcbiAgfVxuICByZXR1cm4gdGhpcy5yZWdleHBcbn1cblxubWluaW1hdGNoLm1hdGNoID0gZnVuY3Rpb24gKGxpc3QsIHBhdHRlcm4sIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgdmFyIG1tID0gbmV3IE1pbmltYXRjaChwYXR0ZXJuLCBvcHRpb25zKVxuICBsaXN0ID0gbGlzdC5maWx0ZXIoZnVuY3Rpb24gKGYpIHtcbiAgICByZXR1cm4gbW0ubWF0Y2goZilcbiAgfSlcbiAgaWYgKG1tLm9wdGlvbnMubm9udWxsICYmICFsaXN0Lmxlbmd0aCkge1xuICAgIGxpc3QucHVzaChwYXR0ZXJuKVxuICB9XG4gIHJldHVybiBsaXN0XG59XG5cbk1pbmltYXRjaC5wcm90b3R5cGUubWF0Y2ggPSBmdW5jdGlvbiBtYXRjaCAoZiwgcGFydGlhbCkge1xuICBpZiAodHlwZW9mIHBhcnRpYWwgPT09ICd1bmRlZmluZWQnKSBwYXJ0aWFsID0gdGhpcy5wYXJ0aWFsXG4gIHRoaXMuZGVidWcoJ21hdGNoJywgZiwgdGhpcy5wYXR0ZXJuKVxuICAvLyBzaG9ydC1jaXJjdWl0IGluIHRoZSBjYXNlIG9mIGJ1c3RlZCB0aGluZ3MuXG4gIC8vIGNvbW1lbnRzLCBldGMuXG4gIGlmICh0aGlzLmNvbW1lbnQpIHJldHVybiBmYWxzZVxuICBpZiAodGhpcy5lbXB0eSkgcmV0dXJuIGYgPT09ICcnXG5cbiAgaWYgKGYgPT09ICcvJyAmJiBwYXJ0aWFsKSByZXR1cm4gdHJ1ZVxuXG4gIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zXG5cbiAgLy8gd2luZG93czogbmVlZCB0byB1c2UgLywgbm90IFxcXG4gIGlmIChwYXRoLnNlcCAhPT0gJy8nKSB7XG4gICAgZiA9IGYuc3BsaXQocGF0aC5zZXApLmpvaW4oJy8nKVxuICB9XG5cbiAgLy8gdHJlYXQgdGhlIHRlc3QgcGF0aCBhcyBhIHNldCBvZiBwYXRocGFydHMuXG4gIGYgPSBmLnNwbGl0KHNsYXNoU3BsaXQpXG4gIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCAnc3BsaXQnLCBmKVxuXG4gIC8vIGp1c3QgT05FIG9mIHRoZSBwYXR0ZXJuIHNldHMgaW4gdGhpcy5zZXQgbmVlZHMgdG8gbWF0Y2hcbiAgLy8gaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHZhbGlkLiAgSWYgbmVnYXRpbmcsIHRoZW4ganVzdCBvbmVcbiAgLy8gbWF0Y2ggbWVhbnMgdGhhdCB3ZSBoYXZlIGZhaWxlZC5cbiAgLy8gRWl0aGVyIHdheSwgcmV0dXJuIG9uIHRoZSBmaXJzdCBoaXQuXG5cbiAgdmFyIHNldCA9IHRoaXMuc2V0XG4gIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCAnc2V0Jywgc2V0KVxuXG4gIC8vIEZpbmQgdGhlIGJhc2VuYW1lIG9mIHRoZSBwYXRoIGJ5IGxvb2tpbmcgZm9yIHRoZSBsYXN0IG5vbi1lbXB0eSBzZWdtZW50XG4gIHZhciBmaWxlbmFtZVxuICB2YXIgaVxuICBmb3IgKGkgPSBmLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgZmlsZW5hbWUgPSBmW2ldXG4gICAgaWYgKGZpbGVuYW1lKSBicmVha1xuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IHNldC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwYXR0ZXJuID0gc2V0W2ldXG4gICAgdmFyIGZpbGUgPSBmXG4gICAgaWYgKG9wdGlvbnMubWF0Y2hCYXNlICYmIHBhdHRlcm4ubGVuZ3RoID09PSAxKSB7XG4gICAgICBmaWxlID0gW2ZpbGVuYW1lXVxuICAgIH1cbiAgICB2YXIgaGl0ID0gdGhpcy5tYXRjaE9uZShmaWxlLCBwYXR0ZXJuLCBwYXJ0aWFsKVxuICAgIGlmIChoaXQpIHtcbiAgICAgIGlmIChvcHRpb25zLmZsaXBOZWdhdGUpIHJldHVybiB0cnVlXG4gICAgICByZXR1cm4gIXRoaXMubmVnYXRlXG4gICAgfVxuICB9XG5cbiAgLy8gZGlkbid0IGdldCBhbnkgaGl0cy4gIHRoaXMgaXMgc3VjY2VzcyBpZiBpdCdzIGEgbmVnYXRpdmVcbiAgLy8gcGF0dGVybiwgZmFpbHVyZSBvdGhlcndpc2UuXG4gIGlmIChvcHRpb25zLmZsaXBOZWdhdGUpIHJldHVybiBmYWxzZVxuICByZXR1cm4gdGhpcy5uZWdhdGVcbn1cblxuLy8gc2V0IHBhcnRpYWwgdG8gdHJ1ZSB0byB0ZXN0IGlmLCBmb3IgZXhhbXBsZSxcbi8vIFwiL2EvYlwiIG1hdGNoZXMgdGhlIHN0YXJ0IG9mIFwiLyovYi8qL2RcIlxuLy8gUGFydGlhbCBtZWFucywgaWYgeW91IHJ1biBvdXQgb2YgZmlsZSBiZWZvcmUgeW91IHJ1blxuLy8gb3V0IG9mIHBhdHRlcm4sIHRoZW4gdGhhdCdzIGZpbmUsIGFzIGxvbmcgYXMgYWxsXG4vLyB0aGUgcGFydHMgbWF0Y2guXG5NaW5pbWF0Y2gucHJvdG90eXBlLm1hdGNoT25lID0gZnVuY3Rpb24gKGZpbGUsIHBhdHRlcm4sIHBhcnRpYWwpIHtcbiAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnNcblxuICB0aGlzLmRlYnVnKCdtYXRjaE9uZScsXG4gICAgeyAndGhpcyc6IHRoaXMsIGZpbGU6IGZpbGUsIHBhdHRlcm46IHBhdHRlcm4gfSlcblxuICB0aGlzLmRlYnVnKCdtYXRjaE9uZScsIGZpbGUubGVuZ3RoLCBwYXR0ZXJuLmxlbmd0aClcblxuICBmb3IgKHZhciBmaSA9IDAsXG4gICAgICBwaSA9IDAsXG4gICAgICBmbCA9IGZpbGUubGVuZ3RoLFxuICAgICAgcGwgPSBwYXR0ZXJuLmxlbmd0aFxuICAgICAgOyAoZmkgPCBmbCkgJiYgKHBpIDwgcGwpXG4gICAgICA7IGZpKyssIHBpKyspIHtcbiAgICB0aGlzLmRlYnVnKCdtYXRjaE9uZSBsb29wJylcbiAgICB2YXIgcCA9IHBhdHRlcm5bcGldXG4gICAgdmFyIGYgPSBmaWxlW2ZpXVxuXG4gICAgdGhpcy5kZWJ1ZyhwYXR0ZXJuLCBwLCBmKVxuXG4gICAgLy8gc2hvdWxkIGJlIGltcG9zc2libGUuXG4gICAgLy8gc29tZSBpbnZhbGlkIHJlZ2V4cCBzdHVmZiBpbiB0aGUgc2V0LlxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChwID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlXG5cbiAgICBpZiAocCA9PT0gR0xPQlNUQVIpIHtcbiAgICAgIHRoaXMuZGVidWcoJ0dMT0JTVEFSJywgW3BhdHRlcm4sIHAsIGZdKVxuXG4gICAgICAvLyBcIioqXCJcbiAgICAgIC8vIGEvKiovYi8qKi9jIHdvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmc6XG4gICAgICAvLyBhL2IveC95L3ovY1xuICAgICAgLy8gYS94L3kvei9iL2NcbiAgICAgIC8vIGEvYi94L2IveC9jXG4gICAgICAvLyBhL2IvY1xuICAgICAgLy8gVG8gZG8gdGhpcywgdGFrZSB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiBhZnRlclxuICAgICAgLy8gdGhlICoqLCBhbmQgc2VlIGlmIGl0IHdvdWxkIG1hdGNoIHRoZSBmaWxlIHJlbWFpbmRlci5cbiAgICAgIC8vIElmIHNvLCByZXR1cm4gc3VjY2Vzcy5cbiAgICAgIC8vIElmIG5vdCwgdGhlICoqIFwic3dhbGxvd3NcIiBhIHNlZ21lbnQsIGFuZCB0cnkgYWdhaW4uXG4gICAgICAvLyBUaGlzIGlzIHJlY3Vyc2l2ZWx5IGF3ZnVsLlxuICAgICAgLy9cbiAgICAgIC8vIGEvKiovYi8qKi9jIG1hdGNoaW5nIGEvYi94L3kvei9jXG4gICAgICAvLyAtIGEgbWF0Y2hlcyBhXG4gICAgICAvLyAtIGRvdWJsZXN0YXJcbiAgICAgIC8vICAgLSBtYXRjaE9uZShiL3gveS96L2MsIGIvKiovYylcbiAgICAgIC8vICAgICAtIGIgbWF0Y2hlcyBiXG4gICAgICAvLyAgICAgLSBkb3VibGVzdGFyXG4gICAgICAvLyAgICAgICAtIG1hdGNoT25lKHgveS96L2MsIGMpIC0+IG5vXG4gICAgICAvLyAgICAgICAtIG1hdGNoT25lKHkvei9jLCBjKSAtPiBub1xuICAgICAgLy8gICAgICAgLSBtYXRjaE9uZSh6L2MsIGMpIC0+IG5vXG4gICAgICAvLyAgICAgICAtIG1hdGNoT25lKGMsIGMpIHllcywgaGl0XG4gICAgICB2YXIgZnIgPSBmaVxuICAgICAgdmFyIHByID0gcGkgKyAxXG4gICAgICBpZiAocHIgPT09IHBsKSB7XG4gICAgICAgIHRoaXMuZGVidWcoJyoqIGF0IHRoZSBlbmQnKVxuICAgICAgICAvLyBhICoqIGF0IHRoZSBlbmQgd2lsbCBqdXN0IHN3YWxsb3cgdGhlIHJlc3QuXG4gICAgICAgIC8vIFdlIGhhdmUgZm91bmQgYSBtYXRjaC5cbiAgICAgICAgLy8gaG93ZXZlciwgaXQgd2lsbCBub3Qgc3dhbGxvdyAvLngsIHVubGVzc1xuICAgICAgICAvLyBvcHRpb25zLmRvdCBpcyBzZXQuXG4gICAgICAgIC8vIC4gYW5kIC4uIGFyZSAqbmV2ZXIqIG1hdGNoZWQgYnkgKiosIGZvciBleHBsb3NpdmVseVxuICAgICAgICAvLyBleHBvbmVudGlhbCByZWFzb25zLlxuICAgICAgICBmb3IgKDsgZmkgPCBmbDsgZmkrKykge1xuICAgICAgICAgIGlmIChmaWxlW2ZpXSA9PT0gJy4nIHx8IGZpbGVbZmldID09PSAnLi4nIHx8XG4gICAgICAgICAgICAoIW9wdGlvbnMuZG90ICYmIGZpbGVbZmldLmNoYXJBdCgwKSA9PT0gJy4nKSkgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cblxuICAgICAgLy8gb2ssIGxldCdzIHNlZSBpZiB3ZSBjYW4gc3dhbGxvdyB3aGF0ZXZlciB3ZSBjYW4uXG4gICAgICB3aGlsZSAoZnIgPCBmbCkge1xuICAgICAgICB2YXIgc3dhbGxvd2VlID0gZmlsZVtmcl1cblxuICAgICAgICB0aGlzLmRlYnVnKCdcXG5nbG9ic3RhciB3aGlsZScsIGZpbGUsIGZyLCBwYXR0ZXJuLCBwciwgc3dhbGxvd2VlKVxuXG4gICAgICAgIC8vIFhYWCByZW1vdmUgdGhpcyBzbGljZS4gIEp1c3QgcGFzcyB0aGUgc3RhcnQgaW5kZXguXG4gICAgICAgIGlmICh0aGlzLm1hdGNoT25lKGZpbGUuc2xpY2UoZnIpLCBwYXR0ZXJuLnNsaWNlKHByKSwgcGFydGlhbCkpIHtcbiAgICAgICAgICB0aGlzLmRlYnVnKCdnbG9ic3RhciBmb3VuZCBtYXRjaCEnLCBmciwgZmwsIHN3YWxsb3dlZSlcbiAgICAgICAgICAvLyBmb3VuZCBhIG1hdGNoLlxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gY2FuJ3Qgc3dhbGxvdyBcIi5cIiBvciBcIi4uXCIgZXZlci5cbiAgICAgICAgICAvLyBjYW4gb25seSBzd2FsbG93IFwiLmZvb1wiIHdoZW4gZXhwbGljaXRseSBhc2tlZC5cbiAgICAgICAgICBpZiAoc3dhbGxvd2VlID09PSAnLicgfHwgc3dhbGxvd2VlID09PSAnLi4nIHx8XG4gICAgICAgICAgICAoIW9wdGlvbnMuZG90ICYmIHN3YWxsb3dlZS5jaGFyQXQoMCkgPT09ICcuJykpIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoJ2RvdCBkZXRlY3RlZCEnLCBmaWxlLCBmciwgcGF0dGVybiwgcHIpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vICoqIHN3YWxsb3dzIGEgc2VnbWVudCwgYW5kIGNvbnRpbnVlLlxuICAgICAgICAgIHRoaXMuZGVidWcoJ2dsb2JzdGFyIHN3YWxsb3cgYSBzZWdtZW50LCBhbmQgY29udGludWUnKVxuICAgICAgICAgIGZyKytcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBubyBtYXRjaCB3YXMgZm91bmQuXG4gICAgICAvLyBIb3dldmVyLCBpbiBwYXJ0aWFsIG1vZGUsIHdlIGNhbid0IHNheSB0aGlzIGlzIG5lY2Vzc2FyaWx5IG92ZXIuXG4gICAgICAvLyBJZiB0aGVyZSdzIG1vcmUgKnBhdHRlcm4qIGxlZnQsIHRoZW5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKHBhcnRpYWwpIHtcbiAgICAgICAgLy8gcmFuIG91dCBvZiBmaWxlXG4gICAgICAgIHRoaXMuZGVidWcoJ1xcbj4+PiBubyBtYXRjaCwgcGFydGlhbD8nLCBmaWxlLCBmciwgcGF0dGVybiwgcHIpXG4gICAgICAgIGlmIChmciA9PT0gZmwpIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBzb21ldGhpbmcgb3RoZXIgdGhhbiAqKlxuICAgIC8vIG5vbi1tYWdpYyBwYXR0ZXJucyBqdXN0IGhhdmUgdG8gbWF0Y2ggZXhhY3RseVxuICAgIC8vIHBhdHRlcm5zIHdpdGggbWFnaWMgaGF2ZSBiZWVuIHR1cm5lZCBpbnRvIHJlZ2V4cHMuXG4gICAgdmFyIGhpdFxuICAgIGlmICh0eXBlb2YgcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGhpdCA9IGYgPT09IHBcbiAgICAgIHRoaXMuZGVidWcoJ3N0cmluZyBtYXRjaCcsIHAsIGYsIGhpdClcbiAgICB9IGVsc2Uge1xuICAgICAgaGl0ID0gZi5tYXRjaChwKVxuICAgICAgdGhpcy5kZWJ1ZygncGF0dGVybiBtYXRjaCcsIHAsIGYsIGhpdClcbiAgICB9XG5cbiAgICBpZiAoIWhpdCkgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBOb3RlOiBlbmRpbmcgaW4gLyBtZWFucyB0aGF0IHdlJ2xsIGdldCBhIGZpbmFsIFwiXCJcbiAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgcGF0dGVybi4gIFRoaXMgY2FuIG9ubHkgbWF0Y2ggYVxuICAvLyBjb3JyZXNwb25kaW5nIFwiXCIgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS5cbiAgLy8gSWYgdGhlIGZpbGUgZW5kcyBpbiAvLCB0aGVuIGl0IGNhbiBvbmx5IG1hdGNoIGFcbiAgLy8gYSBwYXR0ZXJuIHRoYXQgZW5kcyBpbiAvLCB1bmxlc3MgdGhlIHBhdHRlcm4ganVzdFxuICAvLyBkb2Vzbid0IGhhdmUgYW55IG1vcmUgZm9yIGl0LiBCdXQsIGEvYi8gc2hvdWxkICpub3QqXG4gIC8vIG1hdGNoIFwiYS9iLypcIiwgZXZlbiB0aG91Z2ggXCJcIiBtYXRjaGVzIGFnYWluc3QgdGhlXG4gIC8vIFteL10qPyBwYXR0ZXJuLCBleGNlcHQgaW4gcGFydGlhbCBtb2RlLCB3aGVyZSBpdCBtaWdodFxuICAvLyBzaW1wbHkgbm90IGJlIHJlYWNoZWQgeWV0LlxuICAvLyBIb3dldmVyLCBhL2IvIHNob3VsZCBzdGlsbCBzYXRpc2Z5IGEvKlxuXG4gIC8vIG5vdyBlaXRoZXIgd2UgZmVsbCBvZmYgdGhlIGVuZCBvZiB0aGUgcGF0dGVybiwgb3Igd2UncmUgZG9uZS5cbiAgaWYgKGZpID09PSBmbCAmJiBwaSA9PT0gcGwpIHtcbiAgICAvLyByYW4gb3V0IG9mIHBhdHRlcm4gYW5kIGZpbGVuYW1lIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgLy8gYW4gZXhhY3QgaGl0IVxuICAgIHJldHVybiB0cnVlXG4gIH0gZWxzZSBpZiAoZmkgPT09IGZsKSB7XG4gICAgLy8gcmFuIG91dCBvZiBmaWxlLCBidXQgc3RpbGwgaGFkIHBhdHRlcm4gbGVmdC5cbiAgICAvLyB0aGlzIGlzIG9rIGlmIHdlJ3JlIGRvaW5nIHRoZSBtYXRjaCBhcyBwYXJ0IG9mXG4gICAgLy8gYSBnbG9iIGZzIHRyYXZlcnNhbC5cbiAgICByZXR1cm4gcGFydGlhbFxuICB9IGVsc2UgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi8gaWYgKHBpID09PSBwbCkge1xuICAgIC8vIHJhbiBvdXQgb2YgcGF0dGVybiwgc3RpbGwgaGF2ZSBmaWxlIGxlZnQuXG4gICAgLy8gdGhpcyBpcyBvbmx5IGFjY2VwdGFibGUgaWYgd2UncmUgb24gdGhlIHZlcnkgbGFzdFxuICAgIC8vIGVtcHR5IHNlZ21lbnQgb2YgYSBmaWxlIHdpdGggYSB0cmFpbGluZyBzbGFzaC5cbiAgICAvLyBhLyogc2hvdWxkIG1hdGNoIGEvYi9cbiAgICByZXR1cm4gKGZpID09PSBmbCAtIDEpICYmIChmaWxlW2ZpXSA9PT0gJycpXG4gIH1cblxuICAvLyBzaG91bGQgYmUgdW5yZWFjaGFibGUuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHRocm93IG5ldyBFcnJvcignd3RmPycpXG59XG5cbi8vIHJlcGxhY2Ugc3R1ZmYgbGlrZSBcXCogd2l0aCAqXG5mdW5jdGlvbiBnbG9iVW5lc2NhcGUgKHMpIHtcbiAgcmV0dXJuIHMucmVwbGFjZSgvXFxcXCguKS9nLCAnJDEnKVxufVxuXG5mdW5jdGlvbiByZWdFeHBFc2NhcGUgKHMpIHtcbiAgcmV0dXJuIHMucmVwbGFjZSgvWy1bXFxde30oKSorPy4sXFxcXF4kfCNcXHNdL2csICdcXFxcJCYnKVxufVxuIiwiLy8gJ3BhdGgnIG1vZHVsZSBleHRyYWN0ZWQgZnJvbSBOb2RlLmpzIHY4LjExLjEgKG9ubHkgdGhlIHBvc2l4IHBhcnQpXG4vLyB0cmFuc3BsaXRlZCB3aXRoIEJhYmVsXG5cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGFzc2VydFBhdGgocGF0aCkge1xuICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGF0aCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAnICsgSlNPTi5zdHJpbmdpZnkocGF0aCkpO1xuICB9XG59XG5cbi8vIFJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCB3aXRoIGRpcmVjdG9yeSBuYW1lc1xuZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5nUG9zaXgocGF0aCwgYWxsb3dBYm92ZVJvb3QpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICB2YXIgbGFzdFNlZ21lbnRMZW5ndGggPSAwO1xuICB2YXIgbGFzdFNsYXNoID0gLTE7XG4gIHZhciBkb3RzID0gMDtcbiAgdmFyIGNvZGU7XG4gIGZvciAodmFyIGkgPSAwOyBpIDw9IHBhdGgubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoaSA8IHBhdGgubGVuZ3RoKVxuICAgICAgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICBlbHNlIGlmIChjb2RlID09PSA0NyAvKi8qLylcbiAgICAgIGJyZWFrO1xuICAgIGVsc2VcbiAgICAgIGNvZGUgPSA0NyAvKi8qLztcbiAgICBpZiAoY29kZSA9PT0gNDcgLyovKi8pIHtcbiAgICAgIGlmIChsYXN0U2xhc2ggPT09IGkgLSAxIHx8IGRvdHMgPT09IDEpIHtcbiAgICAgICAgLy8gTk9PUFxuICAgICAgfSBlbHNlIGlmIChsYXN0U2xhc2ggIT09IGkgLSAxICYmIGRvdHMgPT09IDIpIHtcbiAgICAgICAgaWYgKHJlcy5sZW5ndGggPCAyIHx8IGxhc3RTZWdtZW50TGVuZ3RoICE9PSAyIHx8IHJlcy5jaGFyQ29kZUF0KHJlcy5sZW5ndGggLSAxKSAhPT0gNDYgLyouKi8gfHwgcmVzLmNoYXJDb2RlQXQocmVzLmxlbmd0aCAtIDIpICE9PSA0NiAvKi4qLykge1xuICAgICAgICAgIGlmIChyZXMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFyIGxhc3RTbGFzaEluZGV4ID0gcmVzLmxhc3RJbmRleE9mKCcvJyk7XG4gICAgICAgICAgICBpZiAobGFzdFNsYXNoSW5kZXggIT09IHJlcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgIGlmIChsYXN0U2xhc2hJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZXMgPSAnJztcbiAgICAgICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzID0gcmVzLnNsaWNlKDAsIGxhc3RTbGFzaEluZGV4KTtcbiAgICAgICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IHJlcy5sZW5ndGggLSAxIC0gcmVzLmxhc3RJbmRleE9mKCcvJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbGFzdFNsYXNoID0gaTtcbiAgICAgICAgICAgICAgZG90cyA9IDA7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAocmVzLmxlbmd0aCA9PT0gMiB8fCByZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXMgPSAnJztcbiAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMDtcbiAgICAgICAgICAgIGxhc3RTbGFzaCA9IGk7XG4gICAgICAgICAgICBkb3RzID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxsb3dBYm92ZVJvb3QpIHtcbiAgICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDApXG4gICAgICAgICAgICByZXMgKz0gJy8uLic7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmVzID0gJy4uJztcbiAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChyZXMubGVuZ3RoID4gMClcbiAgICAgICAgICByZXMgKz0gJy8nICsgcGF0aC5zbGljZShsYXN0U2xhc2ggKyAxLCBpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHJlcyA9IHBhdGguc2xpY2UobGFzdFNsYXNoICsgMSwgaSk7XG4gICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gaSAtIGxhc3RTbGFzaCAtIDE7XG4gICAgICB9XG4gICAgICBsYXN0U2xhc2ggPSBpO1xuICAgICAgZG90cyA9IDA7XG4gICAgfSBlbHNlIGlmIChjb2RlID09PSA0NiAvKi4qLyAmJiBkb3RzICE9PSAtMSkge1xuICAgICAgKytkb3RzO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb3RzID0gLTE7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIF9mb3JtYXQoc2VwLCBwYXRoT2JqZWN0KSB7XG4gIHZhciBkaXIgPSBwYXRoT2JqZWN0LmRpciB8fCBwYXRoT2JqZWN0LnJvb3Q7XG4gIHZhciBiYXNlID0gcGF0aE9iamVjdC5iYXNlIHx8IChwYXRoT2JqZWN0Lm5hbWUgfHwgJycpICsgKHBhdGhPYmplY3QuZXh0IHx8ICcnKTtcbiAgaWYgKCFkaXIpIHtcbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuICBpZiAoZGlyID09PSBwYXRoT2JqZWN0LnJvb3QpIHtcbiAgICByZXR1cm4gZGlyICsgYmFzZTtcbiAgfVxuICByZXR1cm4gZGlyICsgc2VwICsgYmFzZTtcbn1cblxudmFyIHBvc2l4ID0ge1xuICAvLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoKSB7XG4gICAgdmFyIHJlc29sdmVkUGF0aCA9ICcnO1xuICAgIHZhciByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG4gICAgdmFyIGN3ZDtcblxuICAgIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgICB2YXIgcGF0aDtcbiAgICAgIGlmIChpID49IDApXG4gICAgICAgIHBhdGggPSBhcmd1bWVudHNbaV07XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKGN3ZCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgIGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG4gICAgICAgIHBhdGggPSBjd2Q7XG4gICAgICB9XG5cbiAgICAgIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgICAgIC8vIFNraXAgZW1wdHkgZW50cmllc1xuICAgICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICByZXNvbHZlZFBhdGggPSBwYXRoICsgJy8nICsgcmVzb2x2ZWRQYXRoO1xuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckNvZGVBdCgwKSA9PT0gNDcgLyovKi87XG4gICAgfVxuXG4gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgcGF0aCBzaG91bGQgYmUgcmVzb2x2ZWQgdG8gYSBmdWxsIGFic29sdXRlIHBhdGgsIGJ1dFxuICAgIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gICAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gICAgcmVzb2x2ZWRQYXRoID0gbm9ybWFsaXplU3RyaW5nUG9zaXgocmVzb2x2ZWRQYXRoLCAhcmVzb2x2ZWRBYnNvbHV0ZSk7XG5cbiAgICBpZiAocmVzb2x2ZWRBYnNvbHV0ZSkge1xuICAgICAgaWYgKHJlc29sdmVkUGF0aC5sZW5ndGggPiAwKVxuICAgICAgICByZXR1cm4gJy8nICsgcmVzb2x2ZWRQYXRoO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gJy8nO1xuICAgIH0gZWxzZSBpZiAocmVzb2x2ZWRQYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiByZXNvbHZlZFBhdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnLic7XG4gICAgfVxuICB9LFxuXG4gIG5vcm1hbGl6ZTogZnVuY3Rpb24gbm9ybWFsaXplKHBhdGgpIHtcbiAgICBhc3NlcnRQYXRoKHBhdGgpO1xuXG4gICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSByZXR1cm4gJy4nO1xuXG4gICAgdmFyIGlzQWJzb2x1dGUgPSBwYXRoLmNoYXJDb2RlQXQoMCkgPT09IDQ3IC8qLyovO1xuICAgIHZhciB0cmFpbGluZ1NlcGFyYXRvciA9IHBhdGguY2hhckNvZGVBdChwYXRoLmxlbmd0aCAtIDEpID09PSA0NyAvKi8qLztcblxuICAgIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICAgIHBhdGggPSBub3JtYWxpemVTdHJpbmdQb3NpeChwYXRoLCAhaXNBYnNvbHV0ZSk7XG5cbiAgICBpZiAocGF0aC5sZW5ndGggPT09IDAgJiYgIWlzQWJzb2x1dGUpIHBhdGggPSAnLic7XG4gICAgaWYgKHBhdGgubGVuZ3RoID4gMCAmJiB0cmFpbGluZ1NlcGFyYXRvcikgcGF0aCArPSAnLyc7XG5cbiAgICBpZiAoaXNBYnNvbHV0ZSkgcmV0dXJuICcvJyArIHBhdGg7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH0sXG5cbiAgaXNBYnNvbHV0ZTogZnVuY3Rpb24gaXNBYnNvbHV0ZShwYXRoKSB7XG4gICAgYXNzZXJ0UGF0aChwYXRoKTtcbiAgICByZXR1cm4gcGF0aC5sZW5ndGggPiAwICYmIHBhdGguY2hhckNvZGVBdCgwKSA9PT0gNDcgLyovKi87XG4gIH0sXG5cbiAgam9pbjogZnVuY3Rpb24gam9pbigpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiAnLic7XG4gICAgdmFyIGpvaW5lZDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGFzc2VydFBhdGgoYXJnKTtcbiAgICAgIGlmIChhcmcubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoam9pbmVkID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgam9pbmVkID0gYXJnO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgam9pbmVkICs9ICcvJyArIGFyZztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGpvaW5lZCA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuICcuJztcbiAgICByZXR1cm4gcG9zaXgubm9ybWFsaXplKGpvaW5lZCk7XG4gIH0sXG5cbiAgcmVsYXRpdmU6IGZ1bmN0aW9uIHJlbGF0aXZlKGZyb20sIHRvKSB7XG4gICAgYXNzZXJ0UGF0aChmcm9tKTtcbiAgICBhc3NlcnRQYXRoKHRvKTtcblxuICAgIGlmIChmcm9tID09PSB0bykgcmV0dXJuICcnO1xuXG4gICAgZnJvbSA9IHBvc2l4LnJlc29sdmUoZnJvbSk7XG4gICAgdG8gPSBwb3NpeC5yZXNvbHZlKHRvKTtcblxuICAgIGlmIChmcm9tID09PSB0bykgcmV0dXJuICcnO1xuXG4gICAgLy8gVHJpbSBhbnkgbGVhZGluZyBiYWNrc2xhc2hlc1xuICAgIHZhciBmcm9tU3RhcnQgPSAxO1xuICAgIGZvciAoOyBmcm9tU3RhcnQgPCBmcm9tLmxlbmd0aDsgKytmcm9tU3RhcnQpIHtcbiAgICAgIGlmIChmcm9tLmNoYXJDb2RlQXQoZnJvbVN0YXJ0KSAhPT0gNDcgLyovKi8pXG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZnJvbUVuZCA9IGZyb20ubGVuZ3RoO1xuICAgIHZhciBmcm9tTGVuID0gZnJvbUVuZCAtIGZyb21TdGFydDtcblxuICAgIC8vIFRyaW0gYW55IGxlYWRpbmcgYmFja3NsYXNoZXNcbiAgICB2YXIgdG9TdGFydCA9IDE7XG4gICAgZm9yICg7IHRvU3RhcnQgPCB0by5sZW5ndGg7ICsrdG9TdGFydCkge1xuICAgICAgaWYgKHRvLmNoYXJDb2RlQXQodG9TdGFydCkgIT09IDQ3IC8qLyovKVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIHRvRW5kID0gdG8ubGVuZ3RoO1xuICAgIHZhciB0b0xlbiA9IHRvRW5kIC0gdG9TdGFydDtcblxuICAgIC8vIENvbXBhcmUgcGF0aHMgdG8gZmluZCB0aGUgbG9uZ2VzdCBjb21tb24gcGF0aCBmcm9tIHJvb3RcbiAgICB2YXIgbGVuZ3RoID0gZnJvbUxlbiA8IHRvTGVuID8gZnJvbUxlbiA6IHRvTGVuO1xuICAgIHZhciBsYXN0Q29tbW9uU2VwID0gLTE7XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDw9IGxlbmd0aDsgKytpKSB7XG4gICAgICBpZiAoaSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgIGlmICh0b0xlbiA+IGxlbmd0aCkge1xuICAgICAgICAgIGlmICh0by5jaGFyQ29kZUF0KHRvU3RhcnQgKyBpKSA9PT0gNDcgLyovKi8pIHtcbiAgICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGBmcm9tYCBpcyB0aGUgZXhhY3QgYmFzZSBwYXRoIGZvciBgdG9gLlxuICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGU6IGZyb209Jy9mb28vYmFyJzsgdG89Jy9mb28vYmFyL2JheidcbiAgICAgICAgICAgIHJldHVybiB0by5zbGljZSh0b1N0YXJ0ICsgaSArIDEpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgYGZyb21gIGlzIHRoZSByb290XG4gICAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nLyc7IHRvPScvZm9vJ1xuICAgICAgICAgICAgcmV0dXJuIHRvLnNsaWNlKHRvU3RhcnQgKyBpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZnJvbUxlbiA+IGxlbmd0aCkge1xuICAgICAgICAgIGlmIChmcm9tLmNoYXJDb2RlQXQoZnJvbVN0YXJ0ICsgaSkgPT09IDQ3IC8qLyovKSB7XG4gICAgICAgICAgICAvLyBXZSBnZXQgaGVyZSBpZiBgdG9gIGlzIHRoZSBleGFjdCBiYXNlIHBhdGggZm9yIGBmcm9tYC5cbiAgICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBmcm9tPScvZm9vL2Jhci9iYXonOyB0bz0nL2Zvby9iYXInXG4gICAgICAgICAgICBsYXN0Q29tbW9uU2VwID0gaTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGB0b2AgaXMgdGhlIHJvb3QuXG4gICAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nL2Zvbyc7IHRvPScvJ1xuICAgICAgICAgICAgbGFzdENvbW1vblNlcCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdmFyIGZyb21Db2RlID0gZnJvbS5jaGFyQ29kZUF0KGZyb21TdGFydCArIGkpO1xuICAgICAgdmFyIHRvQ29kZSA9IHRvLmNoYXJDb2RlQXQodG9TdGFydCArIGkpO1xuICAgICAgaWYgKGZyb21Db2RlICE9PSB0b0NvZGUpXG4gICAgICAgIGJyZWFrO1xuICAgICAgZWxzZSBpZiAoZnJvbUNvZGUgPT09IDQ3IC8qLyovKVxuICAgICAgICBsYXN0Q29tbW9uU2VwID0gaTtcbiAgICB9XG5cbiAgICB2YXIgb3V0ID0gJyc7XG4gICAgLy8gR2VuZXJhdGUgdGhlIHJlbGF0aXZlIHBhdGggYmFzZWQgb24gdGhlIHBhdGggZGlmZmVyZW5jZSBiZXR3ZWVuIGB0b2BcbiAgICAvLyBhbmQgYGZyb21gXG4gICAgZm9yIChpID0gZnJvbVN0YXJ0ICsgbGFzdENvbW1vblNlcCArIDE7IGkgPD0gZnJvbUVuZDsgKytpKSB7XG4gICAgICBpZiAoaSA9PT0gZnJvbUVuZCB8fCBmcm9tLmNoYXJDb2RlQXQoaSkgPT09IDQ3IC8qLyovKSB7XG4gICAgICAgIGlmIChvdXQubGVuZ3RoID09PSAwKVxuICAgICAgICAgIG91dCArPSAnLi4nO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgb3V0ICs9ICcvLi4nO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIExhc3RseSwgYXBwZW5kIHRoZSByZXN0IG9mIHRoZSBkZXN0aW5hdGlvbiAoYHRvYCkgcGF0aCB0aGF0IGNvbWVzIGFmdGVyXG4gICAgLy8gdGhlIGNvbW1vbiBwYXRoIHBhcnRzXG4gICAgaWYgKG91dC5sZW5ndGggPiAwKVxuICAgICAgcmV0dXJuIG91dCArIHRvLnNsaWNlKHRvU3RhcnQgKyBsYXN0Q29tbW9uU2VwKTtcbiAgICBlbHNlIHtcbiAgICAgIHRvU3RhcnQgKz0gbGFzdENvbW1vblNlcDtcbiAgICAgIGlmICh0by5jaGFyQ29kZUF0KHRvU3RhcnQpID09PSA0NyAvKi8qLylcbiAgICAgICAgKyt0b1N0YXJ0O1xuICAgICAgcmV0dXJuIHRvLnNsaWNlKHRvU3RhcnQpO1xuICAgIH1cbiAgfSxcblxuICBfbWFrZUxvbmc6IGZ1bmN0aW9uIF9tYWtlTG9uZyhwYXRoKSB7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH0sXG5cbiAgZGlybmFtZTogZnVuY3Rpb24gZGlybmFtZShwYXRoKSB7XG4gICAgYXNzZXJ0UGF0aChwYXRoKTtcbiAgICBpZiAocGF0aC5sZW5ndGggPT09IDApIHJldHVybiAnLic7XG4gICAgdmFyIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIGhhc1Jvb3QgPSBjb2RlID09PSA0NyAvKi8qLztcbiAgICB2YXIgZW5kID0gLTE7XG4gICAgdmFyIG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gICAgZm9yICh2YXIgaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAxOyAtLWkpIHtcbiAgICAgIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaSk7XG4gICAgICBpZiAoY29kZSA9PT0gNDcgLyovKi8pIHtcbiAgICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICAgICAgZW5kID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3JcbiAgICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVuZCA9PT0gLTEpIHJldHVybiBoYXNSb290ID8gJy8nIDogJy4nO1xuICAgIGlmIChoYXNSb290ICYmIGVuZCA9PT0gMSkgcmV0dXJuICcvLyc7XG4gICAgcmV0dXJuIHBhdGguc2xpY2UoMCwgZW5kKTtcbiAgfSxcblxuICBiYXNlbmFtZTogZnVuY3Rpb24gYmFzZW5hbWUocGF0aCwgZXh0KSB7XG4gICAgaWYgKGV4dCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBleHQgIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImV4dFwiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICBhc3NlcnRQYXRoKHBhdGgpO1xuXG4gICAgdmFyIHN0YXJ0ID0gMDtcbiAgICB2YXIgZW5kID0gLTE7XG4gICAgdmFyIG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gICAgdmFyIGk7XG5cbiAgICBpZiAoZXh0ICE9PSB1bmRlZmluZWQgJiYgZXh0Lmxlbmd0aCA+IDAgJiYgZXh0Lmxlbmd0aCA8PSBwYXRoLmxlbmd0aCkge1xuICAgICAgaWYgKGV4dC5sZW5ndGggPT09IHBhdGgubGVuZ3RoICYmIGV4dCA9PT0gcGF0aCkgcmV0dXJuICcnO1xuICAgICAgdmFyIGV4dElkeCA9IGV4dC5sZW5ndGggLSAxO1xuICAgICAgdmFyIGZpcnN0Tm9uU2xhc2hFbmQgPSAtMTtcbiAgICAgIGZvciAoaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjb2RlID09PSA0NyAvKi8qLykge1xuICAgICAgICAgICAgLy8gSWYgd2UgcmVhY2hlZCBhIHBhdGggc2VwYXJhdG9yIHRoYXQgd2FzIG5vdCBwYXJ0IG9mIGEgc2V0IG9mIHBhdGhcbiAgICAgICAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vd1xuICAgICAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgICAgICAgc3RhcnQgPSBpICsgMTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZmlyc3ROb25TbGFzaEVuZCA9PT0gLTEpIHtcbiAgICAgICAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCByZW1lbWJlciB0aGlzIGluZGV4IGluIGNhc2VcbiAgICAgICAgICAgIC8vIHdlIG5lZWQgaXQgaWYgdGhlIGV4dGVuc2lvbiBlbmRzIHVwIG5vdCBtYXRjaGluZ1xuICAgICAgICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICAgICAgICBmaXJzdE5vblNsYXNoRW5kID0gaSArIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChleHRJZHggPj0gMCkge1xuICAgICAgICAgICAgLy8gVHJ5IHRvIG1hdGNoIHRoZSBleHBsaWNpdCBleHRlbnNpb25cbiAgICAgICAgICAgIGlmIChjb2RlID09PSBleHQuY2hhckNvZGVBdChleHRJZHgpKSB7XG4gICAgICAgICAgICAgIGlmICgtLWV4dElkeCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSBtYXRjaGVkIHRoZSBleHRlbnNpb24sIHNvIG1hcmsgdGhpcyBhcyB0aGUgZW5kIG9mIG91ciBwYXRoXG4gICAgICAgICAgICAgICAgLy8gY29tcG9uZW50XG4gICAgICAgICAgICAgICAgZW5kID0gaTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gRXh0ZW5zaW9uIGRvZXMgbm90IG1hdGNoLCBzbyBvdXIgcmVzdWx0IGlzIHRoZSBlbnRpcmUgcGF0aFxuICAgICAgICAgICAgICAvLyBjb21wb25lbnRcbiAgICAgICAgICAgICAgZXh0SWR4ID0gLTE7XG4gICAgICAgICAgICAgIGVuZCA9IGZpcnN0Tm9uU2xhc2hFbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGFydCA9PT0gZW5kKSBlbmQgPSBmaXJzdE5vblNsYXNoRW5kO2Vsc2UgaWYgKGVuZCA9PT0gLTEpIGVuZCA9IHBhdGgubGVuZ3RoO1xuICAgICAgcmV0dXJuIHBhdGguc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgaWYgKHBhdGguY2hhckNvZGVBdChpKSA9PT0gNDcgLyovKi8pIHtcbiAgICAgICAgICAgIC8vIElmIHdlIHJlYWNoZWQgYSBwYXRoIHNlcGFyYXRvciB0aGF0IHdhcyBub3QgcGFydCBvZiBhIHNldCBvZiBwYXRoXG4gICAgICAgICAgICAvLyBzZXBhcmF0b3JzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgc3RvcCBub3dcbiAgICAgICAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7XG4gICAgICAgICAgICAgIHN0YXJ0ID0gaSArIDE7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoZW5kID09PSAtMSkge1xuICAgICAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXJcbiAgICAgICAgICAvLyBwYXRoIGNvbXBvbmVudFxuICAgICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgICAgICAgIGVuZCA9IGkgKyAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChlbmQgPT09IC0xKSByZXR1cm4gJyc7XG4gICAgICByZXR1cm4gcGF0aC5zbGljZShzdGFydCwgZW5kKTtcbiAgICB9XG4gIH0sXG5cbiAgZXh0bmFtZTogZnVuY3Rpb24gZXh0bmFtZShwYXRoKSB7XG4gICAgYXNzZXJ0UGF0aChwYXRoKTtcbiAgICB2YXIgc3RhcnREb3QgPSAtMTtcbiAgICB2YXIgc3RhcnRQYXJ0ID0gMDtcbiAgICB2YXIgZW5kID0gLTE7XG4gICAgdmFyIG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gICAgLy8gVHJhY2sgdGhlIHN0YXRlIG9mIGNoYXJhY3RlcnMgKGlmIGFueSkgd2Ugc2VlIGJlZm9yZSBvdXIgZmlyc3QgZG90IGFuZFxuICAgIC8vIGFmdGVyIGFueSBwYXRoIHNlcGFyYXRvciB3ZSBmaW5kXG4gICAgdmFyIHByZURvdFN0YXRlID0gMDtcbiAgICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdmFyIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaSk7XG4gICAgICBpZiAoY29kZSA9PT0gNDcgLyovKi8pIHtcbiAgICAgICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vd1xuICAgICAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7XG4gICAgICAgICAgICBzdGFydFBhcnQgPSBpICsgMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgaWYgKGVuZCA9PT0gLTEpIHtcbiAgICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3IsIG1hcmsgdGhpcyBhcyB0aGUgZW5kIG9mIG91clxuICAgICAgICAvLyBleHRlbnNpb25cbiAgICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICAgIGVuZCA9IGkgKyAxO1xuICAgICAgfVxuICAgICAgaWYgKGNvZGUgPT09IDQ2IC8qLiovKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBpcyBvdXIgZmlyc3QgZG90LCBtYXJrIGl0IGFzIHRoZSBzdGFydCBvZiBvdXIgZXh0ZW5zaW9uXG4gICAgICAgICAgaWYgKHN0YXJ0RG90ID09PSAtMSlcbiAgICAgICAgICAgIHN0YXJ0RG90ID0gaTtcbiAgICAgICAgICBlbHNlIGlmIChwcmVEb3RTdGF0ZSAhPT0gMSlcbiAgICAgICAgICAgIHByZURvdFN0YXRlID0gMTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhcnREb3QgIT09IC0xKSB7XG4gICAgICAgIC8vIFdlIHNhdyBhIG5vbi1kb3QgYW5kIG5vbi1wYXRoIHNlcGFyYXRvciBiZWZvcmUgb3VyIGRvdCwgc28gd2Ugc2hvdWxkXG4gICAgICAgIC8vIGhhdmUgYSBnb29kIGNoYW5jZSBhdCBoYXZpbmcgYSBub24tZW1wdHkgZXh0ZW5zaW9uXG4gICAgICAgIHByZURvdFN0YXRlID0gLTE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0RG90ID09PSAtMSB8fCBlbmQgPT09IC0xIHx8XG4gICAgICAgIC8vIFdlIHNhdyBhIG5vbi1kb3QgY2hhcmFjdGVyIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZG90XG4gICAgICAgIHByZURvdFN0YXRlID09PSAwIHx8XG4gICAgICAgIC8vIFRoZSAocmlnaHQtbW9zdCkgdHJpbW1lZCBwYXRoIGNvbXBvbmVudCBpcyBleGFjdGx5ICcuLidcbiAgICAgICAgcHJlRG90U3RhdGUgPT09IDEgJiYgc3RhcnREb3QgPT09IGVuZCAtIDEgJiYgc3RhcnREb3QgPT09IHN0YXJ0UGFydCArIDEpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHBhdGguc2xpY2Uoc3RhcnREb3QsIGVuZCk7XG4gIH0sXG5cbiAgZm9ybWF0OiBmdW5jdGlvbiBmb3JtYXQocGF0aE9iamVjdCkge1xuICAgIGlmIChwYXRoT2JqZWN0ID09PSBudWxsIHx8IHR5cGVvZiBwYXRoT2JqZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwicGF0aE9iamVjdFwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBwYXRoT2JqZWN0KTtcbiAgICB9XG4gICAgcmV0dXJuIF9mb3JtYXQoJy8nLCBwYXRoT2JqZWN0KTtcbiAgfSxcblxuICBwYXJzZTogZnVuY3Rpb24gcGFyc2UocGF0aCkge1xuICAgIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgICB2YXIgcmV0ID0geyByb290OiAnJywgZGlyOiAnJywgYmFzZTogJycsIGV4dDogJycsIG5hbWU6ICcnIH07XG4gICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSByZXR1cm4gcmV0O1xuICAgIHZhciBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KDApO1xuICAgIHZhciBpc0Fic29sdXRlID0gY29kZSA9PT0gNDcgLyovKi87XG4gICAgdmFyIHN0YXJ0O1xuICAgIGlmIChpc0Fic29sdXRlKSB7XG4gICAgICByZXQucm9vdCA9ICcvJztcbiAgICAgIHN0YXJ0ID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQgPSAwO1xuICAgIH1cbiAgICB2YXIgc3RhcnREb3QgPSAtMTtcbiAgICB2YXIgc3RhcnRQYXJ0ID0gMDtcbiAgICB2YXIgZW5kID0gLTE7XG4gICAgdmFyIG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gICAgdmFyIGkgPSBwYXRoLmxlbmd0aCAtIDE7XG5cbiAgICAvLyBUcmFjayB0aGUgc3RhdGUgb2YgY2hhcmFjdGVycyAoaWYgYW55KSB3ZSBzZWUgYmVmb3JlIG91ciBmaXJzdCBkb3QgYW5kXG4gICAgLy8gYWZ0ZXIgYW55IHBhdGggc2VwYXJhdG9yIHdlIGZpbmRcbiAgICB2YXIgcHJlRG90U3RhdGUgPSAwO1xuXG4gICAgLy8gR2V0IG5vbi1kaXIgaW5mb1xuICAgIGZvciAoOyBpID49IHN0YXJ0OyAtLWkpIHtcbiAgICAgIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaSk7XG4gICAgICBpZiAoY29kZSA9PT0gNDcgLyovKi8pIHtcbiAgICAgICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vd1xuICAgICAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7XG4gICAgICAgICAgICBzdGFydFBhcnQgPSBpICsgMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgaWYgKGVuZCA9PT0gLTEpIHtcbiAgICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3IsIG1hcmsgdGhpcyBhcyB0aGUgZW5kIG9mIG91clxuICAgICAgICAvLyBleHRlbnNpb25cbiAgICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICAgIGVuZCA9IGkgKyAxO1xuICAgICAgfVxuICAgICAgaWYgKGNvZGUgPT09IDQ2IC8qLiovKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBpcyBvdXIgZmlyc3QgZG90LCBtYXJrIGl0IGFzIHRoZSBzdGFydCBvZiBvdXIgZXh0ZW5zaW9uXG4gICAgICAgICAgaWYgKHN0YXJ0RG90ID09PSAtMSkgc3RhcnREb3QgPSBpO2Vsc2UgaWYgKHByZURvdFN0YXRlICE9PSAxKSBwcmVEb3RTdGF0ZSA9IDE7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhcnREb3QgIT09IC0xKSB7XG4gICAgICAgIC8vIFdlIHNhdyBhIG5vbi1kb3QgYW5kIG5vbi1wYXRoIHNlcGFyYXRvciBiZWZvcmUgb3VyIGRvdCwgc28gd2Ugc2hvdWxkXG4gICAgICAgIC8vIGhhdmUgYSBnb29kIGNoYW5jZSBhdCBoYXZpbmcgYSBub24tZW1wdHkgZXh0ZW5zaW9uXG4gICAgICAgIHByZURvdFN0YXRlID0gLTE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0RG90ID09PSAtMSB8fCBlbmQgPT09IC0xIHx8XG4gICAgLy8gV2Ugc2F3IGEgbm9uLWRvdCBjaGFyYWN0ZXIgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBkb3RcbiAgICBwcmVEb3RTdGF0ZSA9PT0gMCB8fFxuICAgIC8vIFRoZSAocmlnaHQtbW9zdCkgdHJpbW1lZCBwYXRoIGNvbXBvbmVudCBpcyBleGFjdGx5ICcuLidcbiAgICBwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kIC0gMSAmJiBzdGFydERvdCA9PT0gc3RhcnRQYXJ0ICsgMSkge1xuICAgICAgaWYgKGVuZCAhPT0gLTEpIHtcbiAgICAgICAgaWYgKHN0YXJ0UGFydCA9PT0gMCAmJiBpc0Fic29sdXRlKSByZXQuYmFzZSA9IHJldC5uYW1lID0gcGF0aC5zbGljZSgxLCBlbmQpO2Vsc2UgcmV0LmJhc2UgPSByZXQubmFtZSA9IHBhdGguc2xpY2Uoc3RhcnRQYXJ0LCBlbmQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3RhcnRQYXJ0ID09PSAwICYmIGlzQWJzb2x1dGUpIHtcbiAgICAgICAgcmV0Lm5hbWUgPSBwYXRoLnNsaWNlKDEsIHN0YXJ0RG90KTtcbiAgICAgICAgcmV0LmJhc2UgPSBwYXRoLnNsaWNlKDEsIGVuZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQubmFtZSA9IHBhdGguc2xpY2Uoc3RhcnRQYXJ0LCBzdGFydERvdCk7XG4gICAgICAgIHJldC5iYXNlID0gcGF0aC5zbGljZShzdGFydFBhcnQsIGVuZCk7XG4gICAgICB9XG4gICAgICByZXQuZXh0ID0gcGF0aC5zbGljZShzdGFydERvdCwgZW5kKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhcnRQYXJ0ID4gMCkgcmV0LmRpciA9IHBhdGguc2xpY2UoMCwgc3RhcnRQYXJ0IC0gMSk7ZWxzZSBpZiAoaXNBYnNvbHV0ZSkgcmV0LmRpciA9ICcvJztcblxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgc2VwOiAnLycsXG4gIGRlbGltaXRlcjogJzonLFxuICB3aW4zMjogbnVsbCxcbiAgcG9zaXg6IG51bGxcbn07XG5cbnBvc2l4LnBvc2l4ID0gcG9zaXg7XG5cbm1vZHVsZS5leHBvcnRzID0gcG9zaXg7XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbmNvbnN0IHtcbiAgc3RyaW5nSGludHMsXG4gIG51bWJlckhpbnRzXG59ID0gcmVxdWlyZShcIi4vdXRpbC9oaW50c1wiKTtcbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwianNvbi1zY2hlbWFcIikuSlNPTlNjaGVtYTZ9IEpTT05TY2hlbWE2ICovXG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwianNvbi1zY2hlbWFcIikuSlNPTlNjaGVtYTd9IEpTT05TY2hlbWE3ICovXG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi92YWxpZGF0ZVwiKS5TY2hlbWF9IFNjaGVtYSAqL1xuXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4vdmFsaWRhdGVcIikuVmFsaWRhdGlvbkVycm9yQ29uZmlndXJhdGlvbn0gVmFsaWRhdGlvbkVycm9yQ29uZmlndXJhdGlvbiAqL1xuXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4vdmFsaWRhdGVcIikuUG9zdEZvcm1hdHRlcn0gUG9zdEZvcm1hdHRlciAqL1xuXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4vdmFsaWRhdGVcIikuU2NoZW1hVXRpbEVycm9yT2JqZWN0fSBTY2hlbWFVdGlsRXJyb3JPYmplY3QgKi9cblxuLyoqIEBlbnVtIHtudW1iZXJ9ICovXG5cblxuY29uc3QgU1BFQ0lGSUNJVFkgPSB7XG4gIHR5cGU6IDEsXG4gIG5vdDogMSxcbiAgb25lT2Y6IDEsXG4gIGFueU9mOiAxLFxuICBpZjogMSxcbiAgZW51bTogMSxcbiAgY29uc3Q6IDEsXG4gIGluc3RhbmNlb2Y6IDEsXG4gIHJlcXVpcmVkOiAyLFxuICBwYXR0ZXJuOiAyLFxuICBwYXR0ZXJuUmVxdWlyZWQ6IDIsXG4gIGZvcm1hdDogMixcbiAgZm9ybWF0TWluaW11bTogMixcbiAgZm9ybWF0TWF4aW11bTogMixcbiAgbWluaW11bTogMixcbiAgZXhjbHVzaXZlTWluaW11bTogMixcbiAgbWF4aW11bTogMixcbiAgZXhjbHVzaXZlTWF4aW11bTogMixcbiAgbXVsdGlwbGVPZjogMixcbiAgdW5pcXVlSXRlbXM6IDIsXG4gIGNvbnRhaW5zOiAyLFxuICBtaW5MZW5ndGg6IDIsXG4gIG1heExlbmd0aDogMixcbiAgbWluSXRlbXM6IDIsXG4gIG1heEl0ZW1zOiAyLFxuICBtaW5Qcm9wZXJ0aWVzOiAyLFxuICBtYXhQcm9wZXJ0aWVzOiAyLFxuICBkZXBlbmRlbmNpZXM6IDIsXG4gIHByb3BlcnR5TmFtZXM6IDIsXG4gIGFkZGl0aW9uYWxJdGVtczogMixcbiAgYWRkaXRpb25hbFByb3BlcnRpZXM6IDIsXG4gIGFic29sdXRlUGF0aDogMlxufTtcbi8qKlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8U2NoZW1hVXRpbEVycm9yT2JqZWN0Pn0gYXJyYXlcbiAqIEBwYXJhbSB7KGl0ZW06IFNjaGVtYVV0aWxFcnJvck9iamVjdCkgPT4gbnVtYmVyfSBmblxuICogQHJldHVybnMge0FycmF5PFNjaGVtYVV0aWxFcnJvck9iamVjdD59XG4gKi9cblxuZnVuY3Rpb24gZmlsdGVyTWF4KGFycmF5LCBmbikge1xuICBjb25zdCBldmFsdWF0ZWRNYXggPSBhcnJheS5yZWR1Y2UoKG1heCwgaXRlbSkgPT4gTWF0aC5tYXgobWF4LCBmbihpdGVtKSksIDApO1xuICByZXR1cm4gYXJyYXkuZmlsdGVyKGl0ZW0gPT4gZm4oaXRlbSkgPT09IGV2YWx1YXRlZE1heCk7XG59XG4vKipcbiAqXG4gKiBAcGFyYW0ge0FycmF5PFNjaGVtYVV0aWxFcnJvck9iamVjdD59IGNoaWxkcmVuXG4gKiBAcmV0dXJucyB7QXJyYXk8U2NoZW1hVXRpbEVycm9yT2JqZWN0Pn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGZpbHRlckNoaWxkcmVuKGNoaWxkcmVuKSB7XG4gIGxldCBuZXdDaGlsZHJlbiA9IGNoaWxkcmVuO1xuICBuZXdDaGlsZHJlbiA9IGZpbHRlck1heChuZXdDaGlsZHJlbixcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7U2NoZW1hVXRpbEVycm9yT2JqZWN0fSBlcnJvclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZXJyb3IgPT4gZXJyb3IuZGF0YVBhdGggPyBlcnJvci5kYXRhUGF0aC5sZW5ndGggOiAwKTtcbiAgbmV3Q2hpbGRyZW4gPSBmaWx0ZXJNYXgobmV3Q2hpbGRyZW4sXG4gIC8qKlxuICAgKiBAcGFyYW0ge1NjaGVtYVV0aWxFcnJvck9iamVjdH0gZXJyb3JcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGVycm9yID0+IFNQRUNJRklDSVRZW1xuICAvKiogQHR5cGUge2tleW9mIHR5cGVvZiBTUEVDSUZJQ0lUWX0gKi9cbiAgZXJyb3Iua2V5d29yZF0gfHwgMik7XG4gIHJldHVybiBuZXdDaGlsZHJlbjtcbn1cbi8qKlxuICogRmluZCBhbGwgY2hpbGRyZW4gZXJyb3JzXG4gKiBAcGFyYW0ge0FycmF5PFNjaGVtYVV0aWxFcnJvck9iamVjdD59IGNoaWxkcmVuXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHNjaGVtYVBhdGhzXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHJldHVybnMgaW5kZXggb2YgZmlyc3QgY2hpbGRcbiAqL1xuXG5cbmZ1bmN0aW9uIGZpbmRBbGxDaGlsZHJlbihjaGlsZHJlbiwgc2NoZW1hUGF0aHMpIHtcbiAgbGV0IGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxO1xuXG4gIGNvbnN0IHByZWRpY2F0ZSA9XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NoZW1hUGF0aFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHNjaGVtYVBhdGggPT4gY2hpbGRyZW5baV0uc2NoZW1hUGF0aC5pbmRleE9mKHNjaGVtYVBhdGgpICE9PSAwO1xuXG4gIHdoaWxlIChpID4gLTEgJiYgIXNjaGVtYVBhdGhzLmV2ZXJ5KHByZWRpY2F0ZSkpIHtcbiAgICBpZiAoY2hpbGRyZW5baV0ua2V5d29yZCA9PT0gXCJhbnlPZlwiIHx8IGNoaWxkcmVuW2ldLmtleXdvcmQgPT09IFwib25lT2ZcIikge1xuICAgICAgY29uc3QgcmVmcyA9IGV4dHJhY3RSZWZzKGNoaWxkcmVuW2ldKTtcbiAgICAgIGNvbnN0IGNoaWxkcmVuU3RhcnQgPSBmaW5kQWxsQ2hpbGRyZW4oY2hpbGRyZW4uc2xpY2UoMCwgaSksIHJlZnMuY29uY2F0KGNoaWxkcmVuW2ldLnNjaGVtYVBhdGgpKTtcbiAgICAgIGkgPSBjaGlsZHJlblN0YXJ0IC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgaSAtPSAxO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpICsgMTtcbn1cbi8qKlxuICogRXh0cmFjdHMgYWxsIHJlZnMgZnJvbSBzY2hlbWFcbiAqIEBwYXJhbSB7U2NoZW1hVXRpbEVycm9yT2JqZWN0fSBlcnJvclxuICogQHJldHVybiB7QXJyYXk8c3RyaW5nPn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RSZWZzKGVycm9yKSB7XG4gIGNvbnN0IHtcbiAgICBzY2hlbWFcbiAgfSA9IGVycm9yO1xuXG4gIGlmICghQXJyYXkuaXNBcnJheShzY2hlbWEpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIHNjaGVtYS5tYXAoKHtcbiAgICAkcmVmXG4gIH0pID0+ICRyZWYpLmZpbHRlcihzID0+IHMpO1xufVxuLyoqXG4gKiBHcm91cHMgY2hpbGRyZW4gYnkgdGhlaXIgZmlyc3QgbGV2ZWwgcGFyZW50IChhc3N1bWluZyB0aGF0IGVycm9yIGlzIHJvb3QpXG4gKiBAcGFyYW0ge0FycmF5PFNjaGVtYVV0aWxFcnJvck9iamVjdD59IGNoaWxkcmVuXG4gKiBAcmV0dXJuIHtBcnJheTxTY2hlbWFVdGlsRXJyb3JPYmplY3Q+fVxuICovXG5cblxuZnVuY3Rpb24gZ3JvdXBDaGlsZHJlbkJ5Rmlyc3RDaGlsZChjaGlsZHJlbikge1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgbGV0IGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxO1xuXG4gIHdoaWxlIChpID4gMCkge1xuICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV07XG5cbiAgICBpZiAoY2hpbGQua2V5d29yZCA9PT0gXCJhbnlPZlwiIHx8IGNoaWxkLmtleXdvcmQgPT09IFwib25lT2ZcIikge1xuICAgICAgY29uc3QgcmVmcyA9IGV4dHJhY3RSZWZzKGNoaWxkKTtcbiAgICAgIGNvbnN0IGNoaWxkcmVuU3RhcnQgPSBmaW5kQWxsQ2hpbGRyZW4oY2hpbGRyZW4uc2xpY2UoMCwgaSksIHJlZnMuY29uY2F0KGNoaWxkLnNjaGVtYVBhdGgpKTtcblxuICAgICAgaWYgKGNoaWxkcmVuU3RhcnQgIT09IGkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goT2JqZWN0LmFzc2lnbih7fSwgY2hpbGQsIHtcbiAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW4uc2xpY2UoY2hpbGRyZW5TdGFydCwgaSlcbiAgICAgICAgfSkpO1xuICAgICAgICBpID0gY2hpbGRyZW5TdGFydDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGNoaWxkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2goY2hpbGQpO1xuICAgIH1cblxuICAgIGkgLT0gMTtcbiAgfVxuXG4gIGlmIChpID09PSAwKSB7XG4gICAgcmVzdWx0LnB1c2goY2hpbGRyZW5baV0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdC5yZXZlcnNlKCk7XG59XG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiBpbmRlbnQoc3RyLCBwcmVmaXgpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXG4oPyEkKS9nLCBgXFxuJHtwcmVmaXh9YCk7XG59XG4vKipcbiAqIEBwYXJhbSB7U2NoZW1hfSBzY2hlbWFcbiAqIEByZXR1cm5zIHtzY2hlbWEgaXMgKFNjaGVtYSAmIHtub3Q6IFNjaGVtYX0pfVxuICovXG5cblxuZnVuY3Rpb24gaGFzTm90SW5TY2hlbWEoc2NoZW1hKSB7XG4gIHJldHVybiAhIXNjaGVtYS5ub3Q7XG59XG4vKipcbiAqIEBwYXJhbSB7U2NoZW1hfSBzY2hlbWFcbiAqIEByZXR1cm4ge1NjaGVtYX1cbiAqL1xuXG5cbmZ1bmN0aW9uIGZpbmRGaXJzdFR5cGVkU2NoZW1hKHNjaGVtYSkge1xuICBpZiAoaGFzTm90SW5TY2hlbWEoc2NoZW1hKSkge1xuICAgIHJldHVybiBmaW5kRmlyc3RUeXBlZFNjaGVtYShzY2hlbWEubm90KTtcbiAgfVxuXG4gIHJldHVybiBzY2hlbWE7XG59XG4vKipcbiAqIEBwYXJhbSB7U2NoZW1hfSBzY2hlbWFcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBjYW5BcHBseU5vdChzY2hlbWEpIHtcbiAgY29uc3QgdHlwZWRTY2hlbWEgPSBmaW5kRmlyc3RUeXBlZFNjaGVtYShzY2hlbWEpO1xuICByZXR1cm4gbGlrZU51bWJlcih0eXBlZFNjaGVtYSkgfHwgbGlrZUludGVnZXIodHlwZWRTY2hlbWEpIHx8IGxpa2VTdHJpbmcodHlwZWRTY2hlbWEpIHx8IGxpa2VOdWxsKHR5cGVkU2NoZW1hKSB8fCBsaWtlQm9vbGVhbih0eXBlZFNjaGVtYSk7XG59XG4vKipcbiAqIEBwYXJhbSB7YW55fSBtYXliZU9ialxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBpc09iamVjdChtYXliZU9iaikge1xuICByZXR1cm4gdHlwZW9mIG1heWJlT2JqID09PSBcIm9iamVjdFwiICYmIG1heWJlT2JqICE9PSBudWxsO1xufVxuLyoqXG4gKiBAcGFyYW0ge1NjaGVtYX0gc2NoZW1hXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGxpa2VOdW1iZXIoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWEudHlwZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2Ygc2NoZW1hLm1pbmltdW0gIT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIHNjaGVtYS5leGNsdXNpdmVNaW5pbXVtICE9PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiBzY2hlbWEubWF4aW11bSAhPT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2Ygc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0gIT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIHNjaGVtYS5tdWx0aXBsZU9mICE9PSBcInVuZGVmaW5lZFwiO1xufVxuLyoqXG4gKiBAcGFyYW0ge1NjaGVtYX0gc2NoZW1hXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGxpa2VJbnRlZ2VyKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hLnR5cGUgPT09IFwiaW50ZWdlclwiIHx8IHR5cGVvZiBzY2hlbWEubWluaW11bSAhPT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2Ygc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0gIT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIHNjaGVtYS5tYXhpbXVtICE9PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiBzY2hlbWEuZXhjbHVzaXZlTWF4aW11bSAhPT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2Ygc2NoZW1hLm11bHRpcGxlT2YgIT09IFwidW5kZWZpbmVkXCI7XG59XG4vKipcbiAqIEBwYXJhbSB7U2NoZW1hfSBzY2hlbWFcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5cblxuZnVuY3Rpb24gbGlrZVN0cmluZyhzY2hlbWEpIHtcbiAgcmV0dXJuIHNjaGVtYS50eXBlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBzY2hlbWEubWluTGVuZ3RoICE9PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiBzY2hlbWEubWF4TGVuZ3RoICE9PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiBzY2hlbWEucGF0dGVybiAhPT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2Ygc2NoZW1hLmZvcm1hdCAhPT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2Ygc2NoZW1hLmZvcm1hdE1pbmltdW0gIT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIHNjaGVtYS5mb3JtYXRNYXhpbXVtICE9PSBcInVuZGVmaW5lZFwiO1xufVxuLyoqXG4gKiBAcGFyYW0ge1NjaGVtYX0gc2NoZW1hXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGxpa2VCb29sZWFuKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hLnR5cGUgPT09IFwiYm9vbGVhblwiO1xufVxuLyoqXG4gKiBAcGFyYW0ge1NjaGVtYX0gc2NoZW1hXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGxpa2VBcnJheShzY2hlbWEpIHtcbiAgcmV0dXJuIHNjaGVtYS50eXBlID09PSBcImFycmF5XCIgfHwgdHlwZW9mIHNjaGVtYS5taW5JdGVtcyA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2Ygc2NoZW1hLm1heEl0ZW1zID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiBzY2hlbWEudW5pcXVlSXRlbXMgIT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIHNjaGVtYS5pdGVtcyAhPT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2Ygc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyAhPT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2Ygc2NoZW1hLmNvbnRhaW5zICE9PSBcInVuZGVmaW5lZFwiO1xufVxuLyoqXG4gKiBAcGFyYW0ge1NjaGVtYSAmIHtwYXR0ZXJuUmVxdWlyZWQ/OiBBcnJheTxzdHJpbmc+fX0gc2NoZW1hXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGxpa2VPYmplY3Qoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWEudHlwZSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2Ygc2NoZW1hLm1pblByb3BlcnRpZXMgIT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIHNjaGVtYS5tYXhQcm9wZXJ0aWVzICE9PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiBzY2hlbWEucmVxdWlyZWQgIT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIHNjaGVtYS5wcm9wZXJ0aWVzICE9PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiBzY2hlbWEucGF0dGVyblByb3BlcnRpZXMgIT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyAhPT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2Ygc2NoZW1hLmRlcGVuZGVuY2llcyAhPT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2Ygc2NoZW1hLnByb3BlcnR5TmFtZXMgIT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIHNjaGVtYS5wYXR0ZXJuUmVxdWlyZWQgIT09IFwidW5kZWZpbmVkXCI7XG59XG4vKipcbiAqIEBwYXJhbSB7U2NoZW1hfSBzY2hlbWFcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5cblxuZnVuY3Rpb24gbGlrZU51bGwoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWEudHlwZSA9PT0gXCJudWxsXCI7XG59XG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0QXJ0aWNsZSh0eXBlKSB7XG4gIGlmICgvXlthZWlvdV0vaS50ZXN0KHR5cGUpKSB7XG4gICAgcmV0dXJuIFwiYW5cIjtcbiAgfVxuXG4gIHJldHVybiBcImFcIjtcbn1cbi8qKlxuICogQHBhcmFtIHtTY2hlbWE9fSBzY2hlbWFcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXRTY2hlbWFOb25UeXBlcyhzY2hlbWEpIHtcbiAgaWYgKCFzY2hlbWEpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGlmICghc2NoZW1hLnR5cGUpIHtcbiAgICBpZiAobGlrZU51bWJlcihzY2hlbWEpIHx8IGxpa2VJbnRlZ2VyKHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiBcIiB8IHNob3VsZCBiZSBhbnkgbm9uLW51bWJlclwiO1xuICAgIH1cblxuICAgIGlmIChsaWtlU3RyaW5nKHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiBcIiB8IHNob3VsZCBiZSBhbnkgbm9uLXN0cmluZ1wiO1xuICAgIH1cblxuICAgIGlmIChsaWtlQXJyYXkoc2NoZW1hKSkge1xuICAgICAgcmV0dXJuIFwiIHwgc2hvdWxkIGJlIGFueSBub24tYXJyYXlcIjtcbiAgICB9XG5cbiAgICBpZiAobGlrZU9iamVjdChzY2hlbWEpKSB7XG4gICAgICByZXR1cm4gXCIgfCBzaG91bGQgYmUgYW55IG5vbi1vYmplY3RcIjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gXCJcIjtcbn1cbi8qKlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBoaW50c1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuXG5cbmZ1bmN0aW9uIGZvcm1hdEhpbnRzKGhpbnRzKSB7XG4gIHJldHVybiBoaW50cy5sZW5ndGggPiAwID8gYCgke2hpbnRzLmpvaW4oXCIsIFwiKX0pYCA6IFwiXCI7XG59XG4vKipcbiAqIEBwYXJhbSB7U2NoZW1hfSBzY2hlbWFcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gbG9naWNcbiAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEhpbnRzKHNjaGVtYSwgbG9naWMpIHtcbiAgaWYgKGxpa2VOdW1iZXIoc2NoZW1hKSB8fCBsaWtlSW50ZWdlcihzY2hlbWEpKSB7XG4gICAgcmV0dXJuIG51bWJlckhpbnRzKHNjaGVtYSwgbG9naWMpO1xuICB9IGVsc2UgaWYgKGxpa2VTdHJpbmcoc2NoZW1hKSkge1xuICAgIHJldHVybiBzdHJpbmdIaW50cyhzY2hlbWEsIGxvZ2ljKTtcbiAgfVxuXG4gIHJldHVybiBbXTtcbn1cblxuY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtBcnJheTxTY2hlbWFVdGlsRXJyb3JPYmplY3Q+fSBlcnJvcnNcbiAgICogQHBhcmFtIHtTY2hlbWF9IHNjaGVtYVxuICAgKiBAcGFyYW0ge1ZhbGlkYXRpb25FcnJvckNvbmZpZ3VyYXRpb259IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVycm9ycywgc2NoZW1hLCBjb25maWd1cmF0aW9uID0ge30pIHtcbiAgICBzdXBlcigpO1xuICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqL1xuXG4gICAgdGhpcy5uYW1lID0gXCJWYWxpZGF0aW9uRXJyb3JcIjtcbiAgICAvKiogQHR5cGUge0FycmF5PFNjaGVtYVV0aWxFcnJvck9iamVjdD59ICovXG5cbiAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICAvKiogQHR5cGUge1NjaGVtYX0gKi9cblxuICAgIHRoaXMuc2NoZW1hID0gc2NoZW1hO1xuICAgIGxldCBoZWFkZXJOYW1lRnJvbVNjaGVtYTtcbiAgICBsZXQgYmFzZURhdGFQYXRoRnJvbVNjaGVtYTtcblxuICAgIGlmIChzY2hlbWEudGl0bGUgJiYgKCFjb25maWd1cmF0aW9uLm5hbWUgfHwgIWNvbmZpZ3VyYXRpb24uYmFzZURhdGFQYXRoKSkge1xuICAgICAgY29uc3Qgc3BsaXR0ZWRUaXRsZUZyb21TY2hlbWEgPSBzY2hlbWEudGl0bGUubWF0Y2goL14oLispICguKykkLyk7XG5cbiAgICAgIGlmIChzcGxpdHRlZFRpdGxlRnJvbVNjaGVtYSkge1xuICAgICAgICBpZiAoIWNvbmZpZ3VyYXRpb24ubmFtZSkge1xuICAgICAgICAgIFssIGhlYWRlck5hbWVGcm9tU2NoZW1hXSA9IHNwbGl0dGVkVGl0bGVGcm9tU2NoZW1hO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb25maWd1cmF0aW9uLmJhc2VEYXRhUGF0aCkge1xuICAgICAgICAgIFssLCBiYXNlRGF0YVBhdGhGcm9tU2NoZW1hXSA9IHNwbGl0dGVkVGl0bGVGcm9tU2NoZW1hO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqL1xuXG5cbiAgICB0aGlzLmhlYWRlck5hbWUgPSBjb25maWd1cmF0aW9uLm5hbWUgfHwgaGVhZGVyTmFtZUZyb21TY2hlbWEgfHwgXCJPYmplY3RcIjtcbiAgICAvKiogQHR5cGUge3N0cmluZ30gKi9cblxuICAgIHRoaXMuYmFzZURhdGFQYXRoID0gY29uZmlndXJhdGlvbi5iYXNlRGF0YVBhdGggfHwgYmFzZURhdGFQYXRoRnJvbVNjaGVtYSB8fCBcImNvbmZpZ3VyYXRpb25cIjtcbiAgICAvKiogQHR5cGUge1Bvc3RGb3JtYXR0ZXIgfCBudWxsfSAqL1xuXG4gICAgdGhpcy5wb3N0Rm9ybWF0dGVyID0gY29uZmlndXJhdGlvbi5wb3N0Rm9ybWF0dGVyIHx8IG51bGw7XG4gICAgY29uc3QgaGVhZGVyID0gYEludmFsaWQgJHt0aGlzLmJhc2VEYXRhUGF0aH0gb2JqZWN0LiAke3RoaXMuaGVhZGVyTmFtZX0gaGFzIGJlZW4gaW5pdGlhbGl6ZWQgdXNpbmcgJHtnZXRBcnRpY2xlKHRoaXMuYmFzZURhdGFQYXRoKX0gJHt0aGlzLmJhc2VEYXRhUGF0aH0gb2JqZWN0IHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlIEFQSSBzY2hlbWEuXFxuYDtcbiAgICAvKiogQHR5cGUge3N0cmluZ30gKi9cblxuICAgIHRoaXMubWVzc2FnZSA9IGAke2hlYWRlcn0ke3RoaXMuZm9ybWF0VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMpfWA7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqIEByZXR1cm5zIHtTY2hlbWF9XG4gICAqL1xuXG5cbiAgZ2V0U2NoZW1hUGFydChwYXRoKSB7XG4gICAgY29uc3QgbmV3UGF0aCA9IHBhdGguc3BsaXQoXCIvXCIpO1xuICAgIGxldCBzY2hlbWFQYXJ0ID0gdGhpcy5zY2hlbWE7XG5cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IG5ld1BhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGlubmVyID0gc2NoZW1hUGFydFtcbiAgICAgIC8qKiBAdHlwZSB7a2V5b2YgU2NoZW1hfSAqL1xuICAgICAgbmV3UGF0aFtpXV07XG5cbiAgICAgIGlmICghaW5uZXIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHNjaGVtYVBhcnQgPSBpbm5lcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2NoZW1hUGFydDtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtTY2hlbWF9IHNjaGVtYVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGxvZ2ljXG4gICAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gcHJldlNjaGVtYXNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cblxuICBmb3JtYXRTY2hlbWEoc2NoZW1hLCBsb2dpYyA9IHRydWUsIHByZXZTY2hlbWFzID0gW10pIHtcbiAgICBsZXQgbmV3TG9naWMgPSBsb2dpYztcblxuICAgIGNvbnN0IGZvcm1hdElubmVyU2NoZW1hID1cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpbm5lclNjaGVtYVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGFkZFNlbGZcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIChpbm5lclNjaGVtYSwgYWRkU2VsZikgPT4ge1xuICAgICAgaWYgKCFhZGRTZWxmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdFNjaGVtYShpbm5lclNjaGVtYSwgbmV3TG9naWMsIHByZXZTY2hlbWFzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByZXZTY2hlbWFzLmluY2x1ZGVzKGlubmVyU2NoZW1hKSkge1xuICAgICAgICByZXR1cm4gXCIocmVjdXJzaXZlKVwiO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRTY2hlbWEoaW5uZXJTY2hlbWEsIG5ld0xvZ2ljLCBwcmV2U2NoZW1hcy5jb25jYXQoc2NoZW1hKSk7XG4gICAgfTtcblxuICAgIGlmIChoYXNOb3RJblNjaGVtYShzY2hlbWEpICYmICFsaWtlT2JqZWN0KHNjaGVtYSkpIHtcbiAgICAgIGlmIChjYW5BcHBseU5vdChzY2hlbWEubm90KSkge1xuICAgICAgICBuZXdMb2dpYyA9ICFsb2dpYztcbiAgICAgICAgcmV0dXJuIGZvcm1hdElubmVyU2NoZW1hKHNjaGVtYS5ub3QpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZWVkQXBwbHlMb2dpY0hlcmUgPSAhc2NoZW1hLm5vdC5ub3Q7XG4gICAgICBjb25zdCBwcmVmaXggPSBsb2dpYyA/IFwiXCIgOiBcIm5vbiBcIjtcbiAgICAgIG5ld0xvZ2ljID0gIWxvZ2ljO1xuICAgICAgcmV0dXJuIG5lZWRBcHBseUxvZ2ljSGVyZSA/IHByZWZpeCArIGZvcm1hdElubmVyU2NoZW1hKHNjaGVtYS5ub3QpIDogZm9ybWF0SW5uZXJTY2hlbWEoc2NoZW1hLm5vdCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgIC8qKiBAdHlwZSB7U2NoZW1hICYge2luc3RhbmNlb2Y6IHN0cmluZyB8IEFycmF5PHN0cmluZz59fSAqL1xuICAgIHNjaGVtYS5pbnN0YW5jZW9mKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGluc3RhbmNlb2Y6IHZhbHVlXG4gICAgICB9ID1cbiAgICAgIC8qKiBAdHlwZSB7U2NoZW1hICYge2luc3RhbmNlb2Y6IHN0cmluZyB8IEFycmF5PHN0cmluZz59fSAqL1xuICAgICAgc2NoZW1hO1xuICAgICAgY29uc3QgdmFsdWVzID0gIUFycmF5LmlzQXJyYXkodmFsdWUpID8gW3ZhbHVlXSA6IHZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoXG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpdGVtXG4gICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAgICovXG4gICAgICBpdGVtID0+IGl0ZW0gPT09IFwiRnVuY3Rpb25cIiA/IFwiZnVuY3Rpb25cIiA6IGl0ZW0pLmpvaW4oXCIgfCBcIik7XG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5lbnVtKSB7XG4gICAgICBjb25zdCBlbnVtVmFsdWVzID1cbiAgICAgIC8qKiBAdHlwZSB7QXJyYXk8YW55Pn0gKi9cbiAgICAgIHNjaGVtYS5lbnVtLm1hcChpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0gPT09IG51bGwgJiYgc2NoZW1hLnVuZGVmaW5lZEFzTnVsbCkge1xuICAgICAgICAgIHJldHVybiBgJHtKU09OLnN0cmluZ2lmeShpdGVtKX0gfCB1bmRlZmluZWRgO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGl0ZW0pO1xuICAgICAgfSkuam9pbihcIiB8IFwiKTtcbiAgICAgIHJldHVybiBgJHtlbnVtVmFsdWVzfWA7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzY2hlbWEuY29uc3QgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShzY2hlbWEuY29uc3QpO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWEub25lT2YpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8qKiBAdHlwZSB7QXJyYXk8U2NoZW1hPn0gKi9cbiAgICAgICAgc2NoZW1hLm9uZU9mLm1hcChpdGVtID0+IGZvcm1hdElubmVyU2NoZW1hKGl0ZW0sIHRydWUpKS5qb2luKFwiIHwgXCIpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWEuYW55T2YpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8qKiBAdHlwZSB7QXJyYXk8U2NoZW1hPn0gKi9cbiAgICAgICAgc2NoZW1hLmFueU9mLm1hcChpdGVtID0+IGZvcm1hdElubmVyU2NoZW1hKGl0ZW0sIHRydWUpKS5qb2luKFwiIHwgXCIpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWEuYWxsT2YpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8qKiBAdHlwZSB7QXJyYXk8U2NoZW1hPn0gKi9cbiAgICAgICAgc2NoZW1hLmFsbE9mLm1hcChpdGVtID0+IGZvcm1hdElubmVyU2NoZW1hKGl0ZW0sIHRydWUpKS5qb2luKFwiICYgXCIpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAvKiogQHR5cGUge0pTT05TY2hlbWE3fSAqL1xuICAgIHNjaGVtYS5pZikge1xuICAgICAgY29uc3Qge1xuICAgICAgICBpZjogaWZWYWx1ZSxcbiAgICAgICAgdGhlbjogdGhlblZhbHVlLFxuICAgICAgICBlbHNlOiBlbHNlVmFsdWVcbiAgICAgIH0gPVxuICAgICAgLyoqIEB0eXBlIHtKU09OU2NoZW1hN30gKi9cbiAgICAgIHNjaGVtYTtcbiAgICAgIHJldHVybiBgJHtpZlZhbHVlID8gYGlmICR7Zm9ybWF0SW5uZXJTY2hlbWEoaWZWYWx1ZSl9YCA6IFwiXCJ9JHt0aGVuVmFsdWUgPyBgIHRoZW4gJHtmb3JtYXRJbm5lclNjaGVtYSh0aGVuVmFsdWUpfWAgOiBcIlwifSR7ZWxzZVZhbHVlID8gYCBlbHNlICR7Zm9ybWF0SW5uZXJTY2hlbWEoZWxzZVZhbHVlKX1gIDogXCJcIn1gO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWEuJHJlZikge1xuICAgICAgcmV0dXJuIGZvcm1hdElubmVyU2NoZW1hKHRoaXMuZ2V0U2NoZW1hUGFydChzY2hlbWEuJHJlZiksIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChsaWtlTnVtYmVyKHNjaGVtYSkgfHwgbGlrZUludGVnZXIoc2NoZW1hKSkge1xuICAgICAgY29uc3QgW3R5cGUsIC4uLmhpbnRzXSA9IGdldEhpbnRzKHNjaGVtYSwgbG9naWMpO1xuICAgICAgY29uc3Qgc3RyID0gYCR7dHlwZX0ke2hpbnRzLmxlbmd0aCA+IDAgPyBgICR7Zm9ybWF0SGludHMoaGludHMpfWAgOiBcIlwifWA7XG4gICAgICByZXR1cm4gbG9naWMgPyBzdHIgOiBoaW50cy5sZW5ndGggPiAwID8gYG5vbi0ke3R5cGV9IHwgJHtzdHJ9YCA6IGBub24tJHt0eXBlfWA7XG4gICAgfVxuXG4gICAgaWYgKGxpa2VTdHJpbmcoc2NoZW1hKSkge1xuICAgICAgY29uc3QgW3R5cGUsIC4uLmhpbnRzXSA9IGdldEhpbnRzKHNjaGVtYSwgbG9naWMpO1xuICAgICAgY29uc3Qgc3RyID0gYCR7dHlwZX0ke2hpbnRzLmxlbmd0aCA+IDAgPyBgICR7Zm9ybWF0SGludHMoaGludHMpfWAgOiBcIlwifWA7XG4gICAgICByZXR1cm4gbG9naWMgPyBzdHIgOiBzdHIgPT09IFwic3RyaW5nXCIgPyBcIm5vbi1zdHJpbmdcIiA6IGBub24tc3RyaW5nIHwgJHtzdHJ9YDtcbiAgICB9XG5cbiAgICBpZiAobGlrZUJvb2xlYW4oc2NoZW1hKSkge1xuICAgICAgcmV0dXJuIGAke2xvZ2ljID8gXCJcIiA6IFwibm9uLVwifWJvb2xlYW5gO1xuICAgIH1cblxuICAgIGlmIChsaWtlQXJyYXkoc2NoZW1hKSkge1xuICAgICAgLy8gbm90IGxvZ2ljIGFscmVhZHkgYXBwbGllZCBpbiBmb3JtYXRWYWxpZGF0aW9uRXJyb3JcbiAgICAgIG5ld0xvZ2ljID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGhpbnRzID0gW107XG5cbiAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm1pbkl0ZW1zID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGhpbnRzLnB1c2goYHNob3VsZCBub3QgaGF2ZSBmZXdlciB0aGFuICR7c2NoZW1hLm1pbkl0ZW1zfSBpdGVtJHtzY2hlbWEubWluSXRlbXMgPiAxID8gXCJzXCIgOiBcIlwifWApO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHNjaGVtYS5tYXhJdGVtcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBoaW50cy5wdXNoKGBzaG91bGQgbm90IGhhdmUgbW9yZSB0aGFuICR7c2NoZW1hLm1heEl0ZW1zfSBpdGVtJHtzY2hlbWEubWF4SXRlbXMgPiAxID8gXCJzXCIgOiBcIlwifWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2NoZW1hLnVuaXF1ZUl0ZW1zKSB7XG4gICAgICAgIGhpbnRzLnB1c2goXCJzaG91bGQgbm90IGhhdmUgZHVwbGljYXRlIGl0ZW1zXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBoYXNBZGRpdGlvbmFsSXRlbXMgPSB0eXBlb2Ygc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyA9PT0gXCJ1bmRlZmluZWRcIiB8fCBCb29sZWFuKHNjaGVtYS5hZGRpdGlvbmFsSXRlbXMpO1xuICAgICAgbGV0IGl0ZW1zID0gXCJcIjtcblxuICAgICAgaWYgKHNjaGVtYS5pdGVtcykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEuaXRlbXMpICYmIHNjaGVtYS5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaXRlbXMgPSBgJHtcbiAgICAgICAgICAvKiogQHR5cGUge0FycmF5PFNjaGVtYT59ICovXG4gICAgICAgICAgc2NoZW1hLml0ZW1zLm1hcChpdGVtID0+IGZvcm1hdElubmVyU2NoZW1hKGl0ZW0pKS5qb2luKFwiLCBcIil9YDtcblxuICAgICAgICAgIGlmIChoYXNBZGRpdGlvbmFsSXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEuYWRkaXRpb25hbEl0ZW1zICYmIGlzT2JqZWN0KHNjaGVtYS5hZGRpdGlvbmFsSXRlbXMpICYmIE9iamVjdC5rZXlzKHNjaGVtYS5hZGRpdGlvbmFsSXRlbXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgaGludHMucHVzaChgYWRkaXRpb25hbCBpdGVtcyBzaG91bGQgYmUgJHtmb3JtYXRJbm5lclNjaGVtYShzY2hlbWEuYWRkaXRpb25hbEl0ZW1zKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLml0ZW1zICYmIE9iamVjdC5rZXlzKHNjaGVtYS5pdGVtcykubGVuZ3RoID4gMCkge1xuICAgICAgICAgIC8vIFwiYWRkaXRpb25hbEl0ZW1zXCIgaXMgaWdub3JlZFxuICAgICAgICAgIGl0ZW1zID0gYCR7Zm9ybWF0SW5uZXJTY2hlbWEoc2NoZW1hLml0ZW1zKX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZhbGxiYWNrIGZvciBlbXB0eSBgaXRlbXNgIHZhbHVlXG4gICAgICAgICAgaXRlbXMgPSBcImFueVwiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBcImFkZGl0aW9uYWxJdGVtc1wiIGlzIGlnbm9yZWRcbiAgICAgICAgaXRlbXMgPSBcImFueVwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2NoZW1hLmNvbnRhaW5zICYmIE9iamVjdC5rZXlzKHNjaGVtYS5jb250YWlucykubGVuZ3RoID4gMCkge1xuICAgICAgICBoaW50cy5wdXNoKGBzaG91bGQgY29udGFpbnMgYXQgbGVhc3Qgb25lICR7dGhpcy5mb3JtYXRTY2hlbWEoc2NoZW1hLmNvbnRhaW5zKX0gaXRlbWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYFske2l0ZW1zfSR7aGFzQWRkaXRpb25hbEl0ZW1zID8gXCIsIC4uLlwiIDogXCJcIn1dJHtoaW50cy5sZW5ndGggPiAwID8gYCAoJHtoaW50cy5qb2luKFwiLCBcIil9KWAgOiBcIlwifWA7XG4gICAgfVxuXG4gICAgaWYgKGxpa2VPYmplY3Qoc2NoZW1hKSkge1xuICAgICAgLy8gbm90IGxvZ2ljIGFscmVhZHkgYXBwbGllZCBpbiBmb3JtYXRWYWxpZGF0aW9uRXJyb3JcbiAgICAgIG5ld0xvZ2ljID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGhpbnRzID0gW107XG5cbiAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm1pblByb3BlcnRpZXMgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgaGludHMucHVzaChgc2hvdWxkIG5vdCBoYXZlIGZld2VyIHRoYW4gJHtzY2hlbWEubWluUHJvcGVydGllc30gJHtzY2hlbWEubWluUHJvcGVydGllcyA+IDEgPyBcInByb3BlcnRpZXNcIiA6IFwicHJvcGVydHlcIn1gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBzY2hlbWEubWF4UHJvcGVydGllcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBoaW50cy5wdXNoKGBzaG91bGQgbm90IGhhdmUgbW9yZSB0aGFuICR7c2NoZW1hLm1heFByb3BlcnRpZXN9ICR7c2NoZW1hLm1pblByb3BlcnRpZXMgJiYgc2NoZW1hLm1pblByb3BlcnRpZXMgPiAxID8gXCJwcm9wZXJ0aWVzXCIgOiBcInByb3BlcnR5XCJ9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzY2hlbWEucGF0dGVyblByb3BlcnRpZXMgJiYgT2JqZWN0LmtleXMoc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5Qcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKTtcbiAgICAgICAgaGludHMucHVzaChgYWRkaXRpb25hbCBwcm9wZXJ0eSBuYW1lcyBzaG91bGQgbWF0Y2ggcGF0dGVybiR7cGF0dGVyblByb3BlcnRpZXMubGVuZ3RoID4gMSA/IFwic1wiIDogXCJcIn0gJHtwYXR0ZXJuUHJvcGVydGllcy5tYXAocGF0dGVybiA9PiBKU09OLnN0cmluZ2lmeShwYXR0ZXJuKSkuam9pbihcIiB8IFwiKX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHNjaGVtYS5wcm9wZXJ0aWVzID8gT2JqZWN0LmtleXMoc2NoZW1hLnByb3BlcnRpZXMpIDogW107XG4gICAgICBjb25zdCByZXF1aXJlZCA9IHNjaGVtYS5yZXF1aXJlZCA/IHNjaGVtYS5yZXF1aXJlZCA6IFtdO1xuICAgICAgY29uc3QgYWxsUHJvcGVydGllcyA9IFsuLi5uZXcgU2V0KFxuICAgICAgLyoqIEB0eXBlIHtBcnJheTxzdHJpbmc+fSAqL1xuICAgICAgW10uY29uY2F0KHJlcXVpcmVkKS5jb25jYXQocHJvcGVydGllcykpXTtcbiAgICAgIGNvbnN0IG9iamVjdFN0cnVjdHVyZSA9IGFsbFByb3BlcnRpZXMubWFwKHByb3BlcnR5ID0+IHtcbiAgICAgICAgY29uc3QgaXNSZXF1aXJlZCA9IHJlcXVpcmVkLmluY2x1ZGVzKHByb3BlcnR5KTsgLy8gU29tZSBwcm9wZXJ0aWVzIG5lZWQgcXVvdGVzLCBtYXliZSB3ZSBzaG91bGQgYWRkIGNoZWNrXG4gICAgICAgIC8vIE1heWJlIHdlIHNob3VsZCBvdXRwdXQgdHlwZSBvZiBwcm9wZXJ0eSAoYGZvbzogc3RyaW5nYCksIGJ1dCBpdCBpcyBsb29rcyB2ZXJ5IHVucmVhZGFibGVcblxuICAgICAgICByZXR1cm4gYCR7cHJvcGVydHl9JHtpc1JlcXVpcmVkID8gXCJcIiA6IFwiP1wifWA7XG4gICAgICB9KS5jb25jYXQodHlwZW9mIHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gXCJ1bmRlZmluZWRcIiB8fCBCb29sZWFuKHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcykgPyBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgJiYgaXNPYmplY3Qoc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKSA/IFtgPGtleT46ICR7Zm9ybWF0SW5uZXJTY2hlbWEoc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKX1gXSA6IFtcIuKAplwiXSA6IFtdKS5qb2luKFwiLCBcIik7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGRlcGVuZGVuY2llcyxcbiAgICAgICAgcHJvcGVydHlOYW1lcyxcbiAgICAgICAgcGF0dGVyblJlcXVpcmVkXG4gICAgICB9ID1cbiAgICAgIC8qKiBAdHlwZSB7U2NoZW1hICYge3BhdHRlcm5SZXF1aXJlZD86IEFycmF5PHN0cmluZz47fX0gKi9cbiAgICAgIHNjaGVtYTtcblxuICAgICAgaWYgKGRlcGVuZGVuY2llcykge1xuICAgICAgICBPYmplY3Qua2V5cyhkZXBlbmRlbmNpZXMpLmZvckVhY2goZGVwZW5kZW5jeU5hbWUgPT4ge1xuICAgICAgICAgIGNvbnN0IGRlcGVuZGVuY3kgPSBkZXBlbmRlbmNpZXNbZGVwZW5kZW5jeU5hbWVdO1xuXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGVwZW5kZW5jeSkpIHtcbiAgICAgICAgICAgIGhpbnRzLnB1c2goYHNob3VsZCBoYXZlICR7ZGVwZW5kZW5jeS5sZW5ndGggPiAxID8gXCJwcm9wZXJ0aWVzXCIgOiBcInByb3BlcnR5XCJ9ICR7ZGVwZW5kZW5jeS5tYXAoZGVwID0+IGAnJHtkZXB9J2ApLmpvaW4oXCIsIFwiKX0gd2hlbiBwcm9wZXJ0eSAnJHtkZXBlbmRlbmN5TmFtZX0nIGlzIHByZXNlbnRgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGludHMucHVzaChgc2hvdWxkIGJlIHZhbGlkIGFjY29yZGluZyB0byB0aGUgc2NoZW1hICR7Zm9ybWF0SW5uZXJTY2hlbWEoZGVwZW5kZW5jeSl9IHdoZW4gcHJvcGVydHkgJyR7ZGVwZW5kZW5jeU5hbWV9JyBpcyBwcmVzZW50YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BlcnR5TmFtZXMgJiYgT2JqZWN0LmtleXMocHJvcGVydHlOYW1lcykubGVuZ3RoID4gMCkge1xuICAgICAgICBoaW50cy5wdXNoKGBlYWNoIHByb3BlcnR5IG5hbWUgc2hvdWxkIG1hdGNoIGZvcm1hdCAke0pTT04uc3RyaW5naWZ5KHNjaGVtYS5wcm9wZXJ0eU5hbWVzLmZvcm1hdCl9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXR0ZXJuUmVxdWlyZWQgJiYgcGF0dGVyblJlcXVpcmVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaGludHMucHVzaChgc2hvdWxkIGhhdmUgcHJvcGVydHkgbWF0Y2hpbmcgcGF0dGVybiAke3BhdHRlcm5SZXF1aXJlZC5tYXAoXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaXRlbVxuICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAgICAgKi9cbiAgICAgICAgaXRlbSA9PiBKU09OLnN0cmluZ2lmeShpdGVtKSl9YCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBgb2JqZWN0IHske29iamVjdFN0cnVjdHVyZSA/IGAgJHtvYmplY3RTdHJ1Y3R1cmV9IGAgOiBcIlwifX0ke2hpbnRzLmxlbmd0aCA+IDAgPyBgICgke2hpbnRzLmpvaW4oXCIsIFwiKX0pYCA6IFwiXCJ9YDtcbiAgICB9XG5cbiAgICBpZiAobGlrZU51bGwoc2NoZW1hKSkge1xuICAgICAgcmV0dXJuIGAke2xvZ2ljID8gXCJcIiA6IFwibm9uLVwifW51bGxgO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS50eXBlKSkge1xuICAgICAgLy8gbm90IGxvZ2ljIGFscmVhZHkgYXBwbGllZCBpbiBmb3JtYXRWYWxpZGF0aW9uRXJyb3JcbiAgICAgIHJldHVybiBgJHtzY2hlbWEudHlwZS5qb2luKFwiIHwgXCIpfWA7XG4gICAgfSAvLyBGYWxsYmFjayBmb3IgdW5rbm93biBrZXl3b3Jkc1xuICAgIC8vIG5vdCBsb2dpYyBhbHJlYWR5IGFwcGxpZWQgaW4gZm9ybWF0VmFsaWRhdGlvbkVycm9yXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG5cbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc2NoZW1hLCBudWxsLCAyKTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtTY2hlbWE9fSBzY2hlbWFQYXJ0XG4gICAqIEBwYXJhbSB7KGJvb2xlYW4gfCBBcnJheTxzdHJpbmc+KT19IGFkZGl0aW9uYWxQYXRoXG4gICAqIEBwYXJhbSB7Ym9vbGVhbj19IG5lZWREb3RcbiAgICogQHBhcmFtIHtib29sZWFuPX0gbG9naWNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cblxuICBnZXRTY2hlbWFQYXJ0VGV4dChzY2hlbWFQYXJ0LCBhZGRpdGlvbmFsUGF0aCwgbmVlZERvdCA9IGZhbHNlLCBsb2dpYyA9IHRydWUpIHtcbiAgICBpZiAoIXNjaGVtYVBhcnQpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGFkZGl0aW9uYWxQYXRoKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhZGRpdGlvbmFsUGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgICAvKiogQHR5cGUge1NjaGVtYSB8IHVuZGVmaW5lZH0gKi9cbiAgICAgICAgY29uc3QgaW5uZXIgPSBzY2hlbWFQYXJ0W1xuICAgICAgICAvKiogQHR5cGUge2tleW9mIFNjaGVtYX0gKi9cbiAgICAgICAgYWRkaXRpb25hbFBhdGhbaV1dO1xuXG4gICAgICAgIGlmIChpbm5lcikge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgIHNjaGVtYVBhcnQgPSBpbm5lcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHdoaWxlIChzY2hlbWFQYXJ0LiRyZWYpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgc2NoZW1hUGFydCA9IHRoaXMuZ2V0U2NoZW1hUGFydChzY2hlbWFQYXJ0LiRyZWYpO1xuICAgIH1cblxuICAgIGxldCBzY2hlbWFUZXh0ID0gYCR7dGhpcy5mb3JtYXRTY2hlbWEoc2NoZW1hUGFydCwgbG9naWMpfSR7bmVlZERvdCA/IFwiLlwiIDogXCJcIn1gO1xuXG4gICAgaWYgKHNjaGVtYVBhcnQuZGVzY3JpcHRpb24pIHtcbiAgICAgIHNjaGVtYVRleHQgKz0gYFxcbi0+ICR7c2NoZW1hUGFydC5kZXNjcmlwdGlvbn1gO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWFQYXJ0LmxpbmspIHtcbiAgICAgIHNjaGVtYVRleHQgKz0gYFxcbi0+IFJlYWQgbW9yZSBhdCAke3NjaGVtYVBhcnQubGlua31gO1xuICAgIH1cblxuICAgIHJldHVybiBzY2hlbWFUZXh0O1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge1NjaGVtYT19IHNjaGVtYVBhcnRcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cblxuICBnZXRTY2hlbWFQYXJ0RGVzY3JpcHRpb24oc2NoZW1hUGFydCkge1xuICAgIGlmICghc2NoZW1hUGFydCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgd2hpbGUgKHNjaGVtYVBhcnQuJHJlZikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBzY2hlbWFQYXJ0ID0gdGhpcy5nZXRTY2hlbWFQYXJ0KHNjaGVtYVBhcnQuJHJlZik7XG4gICAgfVxuXG4gICAgbGV0IHNjaGVtYVRleHQgPSBcIlwiO1xuXG4gICAgaWYgKHNjaGVtYVBhcnQuZGVzY3JpcHRpb24pIHtcbiAgICAgIHNjaGVtYVRleHQgKz0gYFxcbi0+ICR7c2NoZW1hUGFydC5kZXNjcmlwdGlvbn1gO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWFQYXJ0LmxpbmspIHtcbiAgICAgIHNjaGVtYVRleHQgKz0gYFxcbi0+IFJlYWQgbW9yZSBhdCAke3NjaGVtYVBhcnQubGlua31gO1xuICAgIH1cblxuICAgIHJldHVybiBzY2hlbWFUZXh0O1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge1NjaGVtYVV0aWxFcnJvck9iamVjdH0gZXJyb3JcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cblxuICBmb3JtYXRWYWxpZGF0aW9uRXJyb3IoZXJyb3IpIHtcbiAgICBjb25zdCB7XG4gICAgICBrZXl3b3JkLFxuICAgICAgZGF0YVBhdGg6IGVycm9yRGF0YVBhdGhcbiAgICB9ID0gZXJyb3I7XG4gICAgY29uc3QgZGF0YVBhdGggPSBgJHt0aGlzLmJhc2VEYXRhUGF0aH0ke2Vycm9yRGF0YVBhdGh9YDtcblxuICAgIHN3aXRjaCAoa2V5d29yZCkge1xuICAgICAgY2FzZSBcInR5cGVcIjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmVudFNjaGVtYSxcbiAgICAgICAgICAgIHBhcmFtc1xuICAgICAgICAgIH0gPSBlcnJvcjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlZmF1bHQtY2FzZVxuXG4gICAgICAgICAgc3dpdGNoIChcbiAgICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcImFqdlwiKS5UeXBlUGFyYW1zfSAqL1xuICAgICAgICAgIHBhcmFtcy50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgIHJldHVybiBgJHtkYXRhUGF0aH0gc2hvdWxkIGJlIGEgJHt0aGlzLmdldFNjaGVtYVBhcnRUZXh0KHBhcmVudFNjaGVtYSwgZmFsc2UsIHRydWUpfWA7XG5cbiAgICAgICAgICAgIGNhc2UgXCJpbnRlZ2VyXCI6XG4gICAgICAgICAgICAgIHJldHVybiBgJHtkYXRhUGF0aH0gc2hvdWxkIGJlIGFuICR7dGhpcy5nZXRTY2hlbWFQYXJ0VGV4dChwYXJlbnRTY2hlbWEsIGZhbHNlLCB0cnVlKX1gO1xuXG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgIHJldHVybiBgJHtkYXRhUGF0aH0gc2hvdWxkIGJlIGEgJHt0aGlzLmdldFNjaGVtYVBhcnRUZXh0KHBhcmVudFNjaGVtYSwgZmFsc2UsIHRydWUpfWA7XG5cbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgIHJldHVybiBgJHtkYXRhUGF0aH0gc2hvdWxkIGJlIGEgJHt0aGlzLmdldFNjaGVtYVBhcnRUZXh0KHBhcmVudFNjaGVtYSwgZmFsc2UsIHRydWUpfWA7XG5cbiAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgICByZXR1cm4gYCR7ZGF0YVBhdGh9IHNob3VsZCBiZSBhbiBhcnJheTpcXG4ke3RoaXMuZ2V0U2NoZW1hUGFydFRleHQocGFyZW50U2NoZW1hKX1gO1xuXG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICAgIHJldHVybiBgJHtkYXRhUGF0aH0gc2hvdWxkIGJlIGFuIG9iamVjdDpcXG4ke3RoaXMuZ2V0U2NoZW1hUGFydFRleHQocGFyZW50U2NoZW1hKX1gO1xuXG4gICAgICAgICAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgICAgICAgICByZXR1cm4gYCR7ZGF0YVBhdGh9IHNob3VsZCBiZSBhICR7dGhpcy5nZXRTY2hlbWFQYXJ0VGV4dChwYXJlbnRTY2hlbWEsIGZhbHNlLCB0cnVlKX1gO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gYCR7ZGF0YVBhdGh9IHNob3VsZCBiZTpcXG4ke3RoaXMuZ2V0U2NoZW1hUGFydFRleHQocGFyZW50U2NoZW1hKX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwiaW5zdGFuY2VvZlwiOlxuICAgICAgICB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcGFyZW50U2NoZW1hXG4gICAgICAgICAgfSA9IGVycm9yO1xuICAgICAgICAgIHJldHVybiBgJHtkYXRhUGF0aH0gc2hvdWxkIGJlIGFuIGluc3RhbmNlIG9mICR7dGhpcy5nZXRTY2hlbWFQYXJ0VGV4dChwYXJlbnRTY2hlbWEsIGZhbHNlLCB0cnVlKX1gO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJwYXR0ZXJuXCI6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICBwYXJlbnRTY2hlbWFcbiAgICAgICAgICB9ID0gZXJyb3I7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcGF0dGVyblxuICAgICAgICAgIH0gPVxuICAgICAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiYWp2XCIpLlBhdHRlcm5QYXJhbXN9ICovXG4gICAgICAgICAgcGFyYW1zO1xuICAgICAgICAgIHJldHVybiBgJHtkYXRhUGF0aH0gc2hvdWxkIG1hdGNoIHBhdHRlcm4gJHtKU09OLnN0cmluZ2lmeShwYXR0ZXJuKX0ke2dldFNjaGVtYU5vblR5cGVzKHBhcmVudFNjaGVtYSl9LiR7dGhpcy5nZXRTY2hlbWFQYXJ0RGVzY3JpcHRpb24ocGFyZW50U2NoZW1hKX1gO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJmb3JtYXRcIjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgIHBhcmVudFNjaGVtYVxuICAgICAgICAgIH0gPSBlcnJvcjtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBmb3JtYXRcbiAgICAgICAgICB9ID1cbiAgICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcImFqdlwiKS5Gb3JtYXRQYXJhbXN9ICovXG4gICAgICAgICAgcGFyYW1zO1xuICAgICAgICAgIHJldHVybiBgJHtkYXRhUGF0aH0gc2hvdWxkIG1hdGNoIGZvcm1hdCAke0pTT04uc3RyaW5naWZ5KGZvcm1hdCl9JHtnZXRTY2hlbWFOb25UeXBlcyhwYXJlbnRTY2hlbWEpfS4ke3RoaXMuZ2V0U2NoZW1hUGFydERlc2NyaXB0aW9uKHBhcmVudFNjaGVtYSl9YDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwiZm9ybWF0TWluaW11bVwiOlxuICAgICAgY2FzZSBcImZvcm1hdE1heGltdW1cIjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgIHBhcmVudFNjaGVtYVxuICAgICAgICAgIH0gPSBlcnJvcjtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBjb21wYXJpc29uLFxuICAgICAgICAgICAgbGltaXRcbiAgICAgICAgICB9ID1cbiAgICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcImFqdlwiKS5Db21wYXJpc29uUGFyYW1zfSAqL1xuICAgICAgICAgIHBhcmFtcztcbiAgICAgICAgICByZXR1cm4gYCR7ZGF0YVBhdGh9IHNob3VsZCBiZSAke2NvbXBhcmlzb259ICR7SlNPTi5zdHJpbmdpZnkobGltaXQpfSR7Z2V0U2NoZW1hTm9uVHlwZXMocGFyZW50U2NoZW1hKX0uJHt0aGlzLmdldFNjaGVtYVBhcnREZXNjcmlwdGlvbihwYXJlbnRTY2hlbWEpfWA7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBcIm1pbmltdW1cIjpcbiAgICAgIGNhc2UgXCJtYXhpbXVtXCI6XG4gICAgICBjYXNlIFwiZXhjbHVzaXZlTWluaW11bVwiOlxuICAgICAgY2FzZSBcImV4Y2x1c2l2ZU1heGltdW1cIjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmVudFNjaGVtYSxcbiAgICAgICAgICAgIHBhcmFtc1xuICAgICAgICAgIH0gPSBlcnJvcjtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBjb21wYXJpc29uLFxuICAgICAgICAgICAgbGltaXRcbiAgICAgICAgICB9ID1cbiAgICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcImFqdlwiKS5Db21wYXJpc29uUGFyYW1zfSAqL1xuICAgICAgICAgIHBhcmFtcztcbiAgICAgICAgICBjb25zdCBbLCAuLi5oaW50c10gPSBnZXRIaW50cyhcbiAgICAgICAgICAvKiogQHR5cGUge1NjaGVtYX0gKi9cbiAgICAgICAgICBwYXJlbnRTY2hlbWEsIHRydWUpO1xuXG4gICAgICAgICAgaWYgKGhpbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgaGludHMucHVzaChgc2hvdWxkIGJlICR7Y29tcGFyaXNvbn0gJHtsaW1pdH1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYCR7ZGF0YVBhdGh9ICR7aGludHMuam9pbihcIiBcIil9JHtnZXRTY2hlbWFOb25UeXBlcyhwYXJlbnRTY2hlbWEpfS4ke3RoaXMuZ2V0U2NoZW1hUGFydERlc2NyaXB0aW9uKHBhcmVudFNjaGVtYSl9YDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwibXVsdGlwbGVPZlwiOlxuICAgICAgICB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgcGFyZW50U2NoZW1hXG4gICAgICAgICAgfSA9IGVycm9yO1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIG11bHRpcGxlT2ZcbiAgICAgICAgICB9ID1cbiAgICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcImFqdlwiKS5NdWx0aXBsZU9mUGFyYW1zfSAqL1xuICAgICAgICAgIHBhcmFtcztcbiAgICAgICAgICByZXR1cm4gYCR7ZGF0YVBhdGh9IHNob3VsZCBiZSBtdWx0aXBsZSBvZiAke211bHRpcGxlT2Z9JHtnZXRTY2hlbWFOb25UeXBlcyhwYXJlbnRTY2hlbWEpfS4ke3RoaXMuZ2V0U2NoZW1hUGFydERlc2NyaXB0aW9uKHBhcmVudFNjaGVtYSl9YDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwicGF0dGVyblJlcXVpcmVkXCI6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICBwYXJlbnRTY2hlbWFcbiAgICAgICAgICB9ID0gZXJyb3I7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgbWlzc2luZ1BhdHRlcm5cbiAgICAgICAgICB9ID1cbiAgICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcImFqdlwiKS5QYXR0ZXJuUmVxdWlyZWRQYXJhbXN9ICovXG4gICAgICAgICAgcGFyYW1zO1xuICAgICAgICAgIHJldHVybiBgJHtkYXRhUGF0aH0gc2hvdWxkIGhhdmUgcHJvcGVydHkgbWF0Y2hpbmcgcGF0dGVybiAke0pTT04uc3RyaW5naWZ5KG1pc3NpbmdQYXR0ZXJuKX0ke2dldFNjaGVtYU5vblR5cGVzKHBhcmVudFNjaGVtYSl9LiR7dGhpcy5nZXRTY2hlbWFQYXJ0RGVzY3JpcHRpb24ocGFyZW50U2NoZW1hKX1gO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJtaW5MZW5ndGhcIjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgIHBhcmVudFNjaGVtYVxuICAgICAgICAgIH0gPSBlcnJvcjtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBsaW1pdFxuICAgICAgICAgIH0gPVxuICAgICAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiYWp2XCIpLkxpbWl0UGFyYW1zfSAqL1xuICAgICAgICAgIHBhcmFtcztcblxuICAgICAgICAgIGlmIChsaW1pdCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgYmUgYSBub24tZW1wdHkgc3RyaW5nJHtnZXRTY2hlbWFOb25UeXBlcyhwYXJlbnRTY2hlbWEpfS4ke3RoaXMuZ2V0U2NoZW1hUGFydERlc2NyaXB0aW9uKHBhcmVudFNjaGVtYSl9YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBsZW5ndGggPSBsaW1pdCAtIDE7XG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgYmUgbG9uZ2VyIHRoYW4gJHtsZW5ndGh9IGNoYXJhY3RlciR7bGVuZ3RoID4gMSA/IFwic1wiIDogXCJcIn0ke2dldFNjaGVtYU5vblR5cGVzKHBhcmVudFNjaGVtYSl9LiR7dGhpcy5nZXRTY2hlbWFQYXJ0RGVzY3JpcHRpb24ocGFyZW50U2NoZW1hKX1gO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJtaW5JdGVtc1wiOlxuICAgICAgICB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgcGFyZW50U2NoZW1hXG4gICAgICAgICAgfSA9IGVycm9yO1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGxpbWl0XG4gICAgICAgICAgfSA9XG4gICAgICAgICAgLyoqIEB0eXBlIHtpbXBvcnQoXCJhanZcIikuTGltaXRQYXJhbXN9ICovXG4gICAgICAgICAgcGFyYW1zO1xuXG4gICAgICAgICAgaWYgKGxpbWl0ID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7ZGF0YVBhdGh9IHNob3VsZCBiZSBhIG5vbi1lbXB0eSBhcnJheSR7Z2V0U2NoZW1hTm9uVHlwZXMocGFyZW50U2NoZW1hKX0uJHt0aGlzLmdldFNjaGVtYVBhcnREZXNjcmlwdGlvbihwYXJlbnRTY2hlbWEpfWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgbm90IGhhdmUgZmV3ZXIgdGhhbiAke2xpbWl0fSBpdGVtcyR7Z2V0U2NoZW1hTm9uVHlwZXMocGFyZW50U2NoZW1hKX0uJHt0aGlzLmdldFNjaGVtYVBhcnREZXNjcmlwdGlvbihwYXJlbnRTY2hlbWEpfWA7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBcIm1pblByb3BlcnRpZXNcIjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgIHBhcmVudFNjaGVtYVxuICAgICAgICAgIH0gPSBlcnJvcjtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBsaW1pdFxuICAgICAgICAgIH0gPVxuICAgICAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiYWp2XCIpLkxpbWl0UGFyYW1zfSAqL1xuICAgICAgICAgIHBhcmFtcztcblxuICAgICAgICAgIGlmIChsaW1pdCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgYmUgYSBub24tZW1wdHkgb2JqZWN0JHtnZXRTY2hlbWFOb25UeXBlcyhwYXJlbnRTY2hlbWEpfS4ke3RoaXMuZ2V0U2NoZW1hUGFydERlc2NyaXB0aW9uKHBhcmVudFNjaGVtYSl9YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYCR7ZGF0YVBhdGh9IHNob3VsZCBub3QgaGF2ZSBmZXdlciB0aGFuICR7bGltaXR9IHByb3BlcnRpZXMke2dldFNjaGVtYU5vblR5cGVzKHBhcmVudFNjaGVtYSl9LiR7dGhpcy5nZXRTY2hlbWFQYXJ0RGVzY3JpcHRpb24ocGFyZW50U2NoZW1hKX1gO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJtYXhMZW5ndGhcIjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgIHBhcmVudFNjaGVtYVxuICAgICAgICAgIH0gPSBlcnJvcjtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBsaW1pdFxuICAgICAgICAgIH0gPVxuICAgICAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiYWp2XCIpLkxpbWl0UGFyYW1zfSAqL1xuICAgICAgICAgIHBhcmFtcztcbiAgICAgICAgICBjb25zdCBtYXggPSBsaW1pdCArIDE7XG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgYmUgc2hvcnRlciB0aGFuICR7bWF4fSBjaGFyYWN0ZXIke21heCA+IDEgPyBcInNcIiA6IFwiXCJ9JHtnZXRTY2hlbWFOb25UeXBlcyhwYXJlbnRTY2hlbWEpfS4ke3RoaXMuZ2V0U2NoZW1hUGFydERlc2NyaXB0aW9uKHBhcmVudFNjaGVtYSl9YDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwibWF4SXRlbXNcIjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgIHBhcmVudFNjaGVtYVxuICAgICAgICAgIH0gPSBlcnJvcjtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBsaW1pdFxuICAgICAgICAgIH0gPVxuICAgICAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiYWp2XCIpLkxpbWl0UGFyYW1zfSAqL1xuICAgICAgICAgIHBhcmFtcztcbiAgICAgICAgICByZXR1cm4gYCR7ZGF0YVBhdGh9IHNob3VsZCBub3QgaGF2ZSBtb3JlIHRoYW4gJHtsaW1pdH0gaXRlbXMke2dldFNjaGVtYU5vblR5cGVzKHBhcmVudFNjaGVtYSl9LiR7dGhpcy5nZXRTY2hlbWFQYXJ0RGVzY3JpcHRpb24ocGFyZW50U2NoZW1hKX1gO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJtYXhQcm9wZXJ0aWVzXCI6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICBwYXJlbnRTY2hlbWFcbiAgICAgICAgICB9ID0gZXJyb3I7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgbGltaXRcbiAgICAgICAgICB9ID1cbiAgICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcImFqdlwiKS5MaW1pdFBhcmFtc30gKi9cbiAgICAgICAgICBwYXJhbXM7XG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgbm90IGhhdmUgbW9yZSB0aGFuICR7bGltaXR9IHByb3BlcnRpZXMke2dldFNjaGVtYU5vblR5cGVzKHBhcmVudFNjaGVtYSl9LiR7dGhpcy5nZXRTY2hlbWFQYXJ0RGVzY3JpcHRpb24ocGFyZW50U2NoZW1hKX1gO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJ1bmlxdWVJdGVtc1wiOlxuICAgICAgICB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgcGFyZW50U2NoZW1hXG4gICAgICAgICAgfSA9IGVycm9yO1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGlcbiAgICAgICAgICB9ID1cbiAgICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcImFqdlwiKS5VbmlxdWVJdGVtc1BhcmFtc30gKi9cbiAgICAgICAgICBwYXJhbXM7XG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgbm90IGNvbnRhaW4gdGhlIGl0ZW0gJyR7ZXJyb3IuZGF0YVtpXX0nIHR3aWNlJHtnZXRTY2hlbWFOb25UeXBlcyhwYXJlbnRTY2hlbWEpfS4ke3RoaXMuZ2V0U2NoZW1hUGFydERlc2NyaXB0aW9uKHBhcmVudFNjaGVtYSl9YDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwiYWRkaXRpb25hbEl0ZW1zXCI6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICBwYXJlbnRTY2hlbWFcbiAgICAgICAgICB9ID0gZXJyb3I7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgbGltaXRcbiAgICAgICAgICB9ID1cbiAgICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcImFqdlwiKS5MaW1pdFBhcmFtc30gKi9cbiAgICAgICAgICBwYXJhbXM7XG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgbm90IGhhdmUgbW9yZSB0aGFuICR7bGltaXR9IGl0ZW1zJHtnZXRTY2hlbWFOb25UeXBlcyhwYXJlbnRTY2hlbWEpfS4gVGhlc2UgaXRlbXMgYXJlIHZhbGlkOlxcbiR7dGhpcy5nZXRTY2hlbWFQYXJ0VGV4dChwYXJlbnRTY2hlbWEpfWA7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBcImNvbnRhaW5zXCI6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwYXJlbnRTY2hlbWFcbiAgICAgICAgICB9ID0gZXJyb3I7XG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgY29udGFpbnMgYXQgbGVhc3Qgb25lICR7dGhpcy5nZXRTY2hlbWFQYXJ0VGV4dChwYXJlbnRTY2hlbWEsIFtcImNvbnRhaW5zXCJdKX0gaXRlbSR7Z2V0U2NoZW1hTm9uVHlwZXMocGFyZW50U2NoZW1hKX0uYDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwicmVxdWlyZWRcIjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmVudFNjaGVtYSxcbiAgICAgICAgICAgIHBhcmFtc1xuICAgICAgICAgIH0gPSBlcnJvcjtcbiAgICAgICAgICBjb25zdCBtaXNzaW5nUHJvcGVydHkgPVxuICAgICAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiYWp2XCIpLkRlcGVuZGVuY2llc1BhcmFtc30gKi9cbiAgICAgICAgICBwYXJhbXMubWlzc2luZ1Byb3BlcnR5LnJlcGxhY2UoL15cXC4vLCBcIlwiKTtcbiAgICAgICAgICBjb25zdCBoYXNQcm9wZXJ0eSA9IHBhcmVudFNjaGVtYSAmJiBCb29sZWFuKFxuICAgICAgICAgIC8qKiBAdHlwZSB7U2NoZW1hfSAqL1xuICAgICAgICAgIHBhcmVudFNjaGVtYS5wcm9wZXJ0aWVzICYmXG4gICAgICAgICAgLyoqIEB0eXBlIHtTY2hlbWF9ICovXG4gICAgICAgICAgcGFyZW50U2NoZW1hLnByb3BlcnRpZXNbbWlzc2luZ1Byb3BlcnR5XSk7XG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBtaXNzZXMgdGhlIHByb3BlcnR5ICcke21pc3NpbmdQcm9wZXJ0eX0nJHtnZXRTY2hlbWFOb25UeXBlcyhwYXJlbnRTY2hlbWEpfS4ke2hhc1Byb3BlcnR5ID8gYCBTaG91bGQgYmU6XFxuJHt0aGlzLmdldFNjaGVtYVBhcnRUZXh0KHBhcmVudFNjaGVtYSwgW1wicHJvcGVydGllc1wiLCBtaXNzaW5nUHJvcGVydHldKX1gIDogdGhpcy5nZXRTY2hlbWFQYXJ0RGVzY3JpcHRpb24ocGFyZW50U2NoZW1hKX1gO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOlxuICAgICAgICB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgcGFyZW50U2NoZW1hXG4gICAgICAgICAgfSA9IGVycm9yO1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0eVxuICAgICAgICAgIH0gPVxuICAgICAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiYWp2XCIpLkFkZGl0aW9uYWxQcm9wZXJ0aWVzUGFyYW1zfSAqL1xuICAgICAgICAgIHBhcmFtcztcbiAgICAgICAgICByZXR1cm4gYCR7ZGF0YVBhdGh9IGhhcyBhbiB1bmtub3duIHByb3BlcnR5ICcke2FkZGl0aW9uYWxQcm9wZXJ0eX0nJHtnZXRTY2hlbWFOb25UeXBlcyhwYXJlbnRTY2hlbWEpfS4gVGhlc2UgcHJvcGVydGllcyBhcmUgdmFsaWQ6XFxuJHt0aGlzLmdldFNjaGVtYVBhcnRUZXh0KHBhcmVudFNjaGVtYSl9YDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwiZGVwZW5kZW5jaWVzXCI6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICBwYXJlbnRTY2hlbWFcbiAgICAgICAgICB9ID0gZXJyb3I7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICBkZXBzXG4gICAgICAgICAgfSA9XG4gICAgICAgICAgLyoqIEB0eXBlIHtpbXBvcnQoXCJhanZcIikuRGVwZW5kZW5jaWVzUGFyYW1zfSAqL1xuICAgICAgICAgIHBhcmFtcztcbiAgICAgICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBkZXBzLnNwbGl0KFwiLFwiKS5tYXAoXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGRlcFxuICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICAgICAgICovXG4gICAgICAgICAgZGVwID0+IGAnJHtkZXAudHJpbSgpfSdgKS5qb2luKFwiLCBcIik7XG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgaGF2ZSBwcm9wZXJ0aWVzICR7ZGVwZW5kZW5jaWVzfSB3aGVuIHByb3BlcnR5ICcke3Byb3BlcnR5fScgaXMgcHJlc2VudCR7Z2V0U2NoZW1hTm9uVHlwZXMocGFyZW50U2NoZW1hKX0uJHt0aGlzLmdldFNjaGVtYVBhcnREZXNjcmlwdGlvbihwYXJlbnRTY2hlbWEpfWA7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBcInByb3BlcnR5TmFtZXNcIjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgIHBhcmVudFNjaGVtYSxcbiAgICAgICAgICAgIHNjaGVtYVxuICAgICAgICAgIH0gPSBlcnJvcjtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWVcbiAgICAgICAgICB9ID1cbiAgICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcImFqdlwiKS5Qcm9wZXJ0eU5hbWVzUGFyYW1zfSAqL1xuICAgICAgICAgIHBhcmFtcztcbiAgICAgICAgICByZXR1cm4gYCR7ZGF0YVBhdGh9IHByb3BlcnR5IG5hbWUgJyR7cHJvcGVydHlOYW1lfScgaXMgaW52YWxpZCR7Z2V0U2NoZW1hTm9uVHlwZXMocGFyZW50U2NoZW1hKX0uIFByb3BlcnR5IG5hbWVzIHNob3VsZCBiZSBtYXRjaCBmb3JtYXQgJHtKU09OLnN0cmluZ2lmeShzY2hlbWEuZm9ybWF0KX0uJHt0aGlzLmdldFNjaGVtYVBhcnREZXNjcmlwdGlvbihwYXJlbnRTY2hlbWEpfWA7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmVudFNjaGVtYVxuICAgICAgICAgIH0gPSBlcnJvcjtcblxuICAgICAgICAgIGlmIChwYXJlbnRTY2hlbWEgJiZcbiAgICAgICAgICAvKiogQHR5cGUge1NjaGVtYX0gKi9cbiAgICAgICAgICBwYXJlbnRTY2hlbWEuZW51bSAmJlxuICAgICAgICAgIC8qKiBAdHlwZSB7U2NoZW1hfSAqL1xuICAgICAgICAgIHBhcmVudFNjaGVtYS5lbnVtLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgYmUgJHt0aGlzLmdldFNjaGVtYVBhcnRUZXh0KHBhcmVudFNjaGVtYSwgZmFsc2UsIHRydWUpfWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgYmUgb25lIG9mIHRoZXNlOlxcbiR7dGhpcy5nZXRTY2hlbWFQYXJ0VGV4dChwYXJlbnRTY2hlbWEpfWA7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBcImNvbnN0XCI6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwYXJlbnRTY2hlbWFcbiAgICAgICAgICB9ID0gZXJyb3I7XG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgYmUgZXF1YWwgdG8gY29uc3RhbnQgJHt0aGlzLmdldFNjaGVtYVBhcnRUZXh0KHBhcmVudFNjaGVtYSwgZmFsc2UsIHRydWUpfWA7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBcIm5vdFwiOlxuICAgICAgICB7XG4gICAgICAgICAgY29uc3QgcG9zdGZpeCA9IGxpa2VPYmplY3QoXG4gICAgICAgICAgLyoqIEB0eXBlIHtTY2hlbWF9ICovXG4gICAgICAgICAgZXJyb3IucGFyZW50U2NoZW1hKSA/IGBcXG4ke3RoaXMuZ2V0U2NoZW1hUGFydFRleHQoZXJyb3IucGFyZW50U2NoZW1hKX1gIDogXCJcIjtcbiAgICAgICAgICBjb25zdCBzY2hlbWFPdXRwdXQgPSB0aGlzLmdldFNjaGVtYVBhcnRUZXh0KGVycm9yLnNjaGVtYSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAgICAgICBpZiAoY2FuQXBwbHlOb3QoZXJyb3Iuc2NoZW1hKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgYmUgYW55ICR7c2NoZW1hT3V0cHV0fSR7cG9zdGZpeH0uYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICBwYXJlbnRTY2hlbWFcbiAgICAgICAgICB9ID0gZXJyb3I7XG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgbm90IGJlICR7dGhpcy5nZXRTY2hlbWFQYXJ0VGV4dChzY2hlbWEsIGZhbHNlLCB0cnVlKX0ke3BhcmVudFNjaGVtYSAmJiBsaWtlT2JqZWN0KHBhcmVudFNjaGVtYSkgPyBgXFxuJHt0aGlzLmdldFNjaGVtYVBhcnRUZXh0KHBhcmVudFNjaGVtYSl9YCA6IFwiXCJ9YDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwib25lT2ZcIjpcbiAgICAgIGNhc2UgXCJhbnlPZlwiOlxuICAgICAgICB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcGFyZW50U2NoZW1hLFxuICAgICAgICAgICAgY2hpbGRyZW5cbiAgICAgICAgICB9ID0gZXJyb3I7XG5cbiAgICAgICAgICBpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKGVycm9yLnNjaGVtYS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgY29uc3QgbGFzdENoaWxkID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ0NoaWxkcmVuID0gY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdFZhbGlkYXRpb25FcnJvcihPYmplY3QuYXNzaWduKHt9LCBsYXN0Q2hpbGQsIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogcmVtYWluaW5nQ2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgcGFyZW50U2NoZW1hOiBPYmplY3QuYXNzaWduKHt9LCBwYXJlbnRTY2hlbWEsIGxhc3RDaGlsZC5wYXJlbnRTY2hlbWEpXG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGZpbHRlcmVkQ2hpbGRyZW4gPSBmaWx0ZXJDaGlsZHJlbihjaGlsZHJlbik7XG5cbiAgICAgICAgICAgIGlmIChmaWx0ZXJlZENoaWxkcmVuLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRWYWxpZGF0aW9uRXJyb3IoZmlsdGVyZWRDaGlsZHJlblswXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlcmVkQ2hpbGRyZW4gPSBncm91cENoaWxkcmVuQnlGaXJzdENoaWxkKGZpbHRlcmVkQ2hpbGRyZW4pO1xuICAgICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgYmUgb25lIG9mIHRoZXNlOlxcbiR7dGhpcy5nZXRTY2hlbWFQYXJ0VGV4dChwYXJlbnRTY2hlbWEpfVxcbkRldGFpbHM6XFxuJHtmaWx0ZXJlZENoaWxkcmVuLm1hcChcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQHBhcmFtIHtTY2hlbWFVdGlsRXJyb3JPYmplY3R9IG5lc3RlZEVycm9yXG4gICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBuZXN0ZWRFcnJvciA9PiBgICogJHtpbmRlbnQodGhpcy5mb3JtYXRWYWxpZGF0aW9uRXJyb3IobmVzdGVkRXJyb3IpLCBcIiAgIFwiKX1gKS5qb2luKFwiXFxuXCIpfWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgYmUgb25lIG9mIHRoZXNlOlxcbiR7dGhpcy5nZXRTY2hlbWFQYXJ0VGV4dChwYXJlbnRTY2hlbWEpfWA7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBcImlmXCI6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICBwYXJlbnRTY2hlbWFcbiAgICAgICAgICB9ID0gZXJyb3I7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgZmFpbGluZ0tleXdvcmRcbiAgICAgICAgICB9ID1cbiAgICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcImFqdlwiKS5JZlBhcmFtc30gKi9cbiAgICAgICAgICBwYXJhbXM7XG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgbWF0Y2ggXCIke2ZhaWxpbmdLZXl3b3JkfVwiIHNjaGVtYTpcXG4ke3RoaXMuZ2V0U2NoZW1hUGFydFRleHQocGFyZW50U2NoZW1hLCBbZmFpbGluZ0tleXdvcmRdKX1gO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJhYnNvbHV0ZVBhdGhcIjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICBwYXJlbnRTY2hlbWFcbiAgICAgICAgICB9ID0gZXJyb3I7XG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofTogJHttZXNzYWdlfSR7dGhpcy5nZXRTY2hlbWFQYXJ0RGVzY3JpcHRpb24ocGFyZW50U2NoZW1hKX1gO1xuICAgICAgICB9XG5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgcGFyZW50U2NoZW1hXG4gICAgICAgICAgfSA9IGVycm9yO1xuICAgICAgICAgIGNvbnN0IEVycm9ySW5KU09OID0gSlNPTi5zdHJpbmdpZnkoZXJyb3IsIG51bGwsIDIpOyAvLyBGb3IgYGN1c3RvbWAsIGBmYWxzZSBzY2hlbWFgLCBgJHJlZmAga2V5d29yZHNcbiAgICAgICAgICAvLyBGYWxsYmFjayBmb3IgdW5rbm93biBrZXl3b3Jkc1xuXG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSAke21lc3NhZ2V9ICgke0Vycm9ySW5KU09OfSkuXFxuJHt0aGlzLmdldFNjaGVtYVBhcnRUZXh0KHBhcmVudFNjaGVtYSwgZmFsc2UpfWA7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJyYXk8U2NoZW1hVXRpbEVycm9yT2JqZWN0Pn0gZXJyb3JzXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgZm9ybWF0VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMpIHtcbiAgICByZXR1cm4gZXJyb3JzLm1hcChlcnJvciA9PiB7XG4gICAgICBsZXQgZm9ybWF0dGVkRXJyb3IgPSB0aGlzLmZvcm1hdFZhbGlkYXRpb25FcnJvcihlcnJvcik7XG5cbiAgICAgIGlmICh0aGlzLnBvc3RGb3JtYXR0ZXIpIHtcbiAgICAgICAgZm9ybWF0dGVkRXJyb3IgPSB0aGlzLnBvc3RGb3JtYXR0ZXIoZm9ybWF0dGVkRXJyb3IsIGVycm9yKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGAgLSAke2luZGVudChmb3JtYXR0ZWRFcnJvciwgXCIgICBcIil9YDtcbiAgICB9KS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbn1cblxudmFyIF9kZWZhdWx0ID0gVmFsaWRhdGlvbkVycm9yO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IHtcbiAgdmFsaWRhdGUsXG4gIFZhbGlkYXRpb25FcnJvcixcbiAgZW5hYmxlVmFsaWRhdGlvbixcbiAgZGlzYWJsZVZhbGlkYXRpb24sXG4gIG5lZWRWYWxpZGF0ZVxufSA9IHJlcXVpcmUoXCIuL3ZhbGlkYXRlXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdmFsaWRhdGUsXG4gIFZhbGlkYXRpb25FcnJvcixcbiAgZW5hYmxlVmFsaWRhdGlvbixcbiAgZGlzYWJsZVZhbGlkYXRpb24sXG4gIG5lZWRWYWxpZGF0ZVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxuLyoqIEB0eXBlZGVmIHtpbXBvcnQoXCJhanZcIikuQWp2fSBBanYgKi9cblxuLyoqIEB0eXBlZGVmIHtpbXBvcnQoXCJhanZcIikuVmFsaWRhdGVGdW5jdGlvbn0gVmFsaWRhdGVGdW5jdGlvbiAqL1xuXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4uL3ZhbGlkYXRlXCIpLlNjaGVtYVV0aWxFcnJvck9iamVjdH0gU2NoZW1hVXRpbEVycm9yT2JqZWN0ICovXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWFcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhXG4gKiBAcmV0dXJucyB7U2NoZW1hVXRpbEVycm9yT2JqZWN0fVxuICovXG5mdW5jdGlvbiBlcnJvck1lc3NhZ2UobWVzc2FnZSwgc2NoZW1hLCBkYXRhKSB7XG4gIHJldHVybiB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZmluZWRcbiAgICBkYXRhUGF0aDogdW5kZWZpbmVkLFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZpbmVkXG4gICAgc2NoZW1hUGF0aDogdW5kZWZpbmVkLFxuICAgIGtleXdvcmQ6IFwiYWJzb2x1dGVQYXRoXCIsXG4gICAgcGFyYW1zOiB7XG4gICAgICBhYnNvbHV0ZVBhdGg6IGRhdGFcbiAgICB9LFxuICAgIG1lc3NhZ2UsXG4gICAgcGFyZW50U2NoZW1hOiBzY2hlbWFcbiAgfTtcbn1cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSBzaG91bGRCZUFic29sdXRlXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0YVxuICogQHJldHVybnMge1NjaGVtYVV0aWxFcnJvck9iamVjdH1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEVycm9yRm9yKHNob3VsZEJlQWJzb2x1dGUsIHNjaGVtYSwgZGF0YSkge1xuICBjb25zdCBtZXNzYWdlID0gc2hvdWxkQmVBYnNvbHV0ZSA/IGBUaGUgcHJvdmlkZWQgdmFsdWUgJHtKU09OLnN0cmluZ2lmeShkYXRhKX0gaXMgbm90IGFuIGFic29sdXRlIHBhdGghYCA6IGBBIHJlbGF0aXZlIHBhdGggaXMgZXhwZWN0ZWQuIEhvd2V2ZXIsIHRoZSBwcm92aWRlZCB2YWx1ZSAke0pTT04uc3RyaW5naWZ5KGRhdGEpfSBpcyBhbiBhYnNvbHV0ZSBwYXRoIWA7XG4gIHJldHVybiBlcnJvck1lc3NhZ2UobWVzc2FnZSwgc2NoZW1hLCBkYXRhKTtcbn1cbi8qKlxuICpcbiAqIEBwYXJhbSB7QWp2fSBhanZcbiAqIEByZXR1cm5zIHtBanZ9XG4gKi9cblxuXG5mdW5jdGlvbiBhZGRBYnNvbHV0ZVBhdGhLZXl3b3JkKGFqdikge1xuICBhanYuYWRkS2V5d29yZChcImFic29sdXRlUGF0aFwiLCB7XG4gICAgZXJyb3JzOiB0cnVlLFxuICAgIHR5cGU6IFwic3RyaW5nXCIsXG5cbiAgICBjb21waWxlKHNjaGVtYSwgcGFyZW50U2NoZW1hKSB7XG4gICAgICAvKiogQHR5cGUge1ZhbGlkYXRlRnVuY3Rpb259ICovXG4gICAgICBjb25zdCBjYWxsYmFjayA9IGRhdGEgPT4ge1xuICAgICAgICBsZXQgcGFzc2VzID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgaXNFeGNsYW1hdGlvbk1hcmtQcmVzZW50ID0gZGF0YS5pbmNsdWRlcyhcIiFcIik7XG5cbiAgICAgICAgaWYgKGlzRXhjbGFtYXRpb25NYXJrUHJlc2VudCkge1xuICAgICAgICAgIGNhbGxiYWNrLmVycm9ycyA9IFtlcnJvck1lc3NhZ2UoYFRoZSBwcm92aWRlZCB2YWx1ZSAke0pTT04uc3RyaW5naWZ5KGRhdGEpfSBjb250YWlucyBleGNsYW1hdGlvbiBtYXJrICghKSB3aGljaCBpcyBub3QgYWxsb3dlZCBiZWNhdXNlIGl0J3MgcmVzZXJ2ZWQgZm9yIGxvYWRlciBzeW50YXguYCwgcGFyZW50U2NoZW1hLCBkYXRhKV07XG4gICAgICAgICAgcGFzc2VzID0gZmFsc2U7XG4gICAgICAgIH0gLy8gPzpbQS1aYS16XTpcXFxcIC0gV2luZG93cyBhYnNvbHV0ZSBwYXRoXG4gICAgICAgIC8vIFxcXFxcXFxcIC0gV2luZG93cyBuZXR3b3JrIGFic29sdXRlIHBhdGhcbiAgICAgICAgLy8gXFwvIC0gVW5peC1saWtlIE9TIGFic29sdXRlIHBhdGhcblxuXG4gICAgICAgIGNvbnN0IGlzQ29ycmVjdEFic29sdXRlUGF0aCA9IHNjaGVtYSA9PT0gL14oPzpbQS1aYS16XTooXFxcXHxcXC8pfFxcXFxcXFxcfFxcLykvLnRlc3QoZGF0YSk7XG5cbiAgICAgICAgaWYgKCFpc0NvcnJlY3RBYnNvbHV0ZVBhdGgpIHtcbiAgICAgICAgICBjYWxsYmFjay5lcnJvcnMgPSBbZ2V0RXJyb3JGb3Ioc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGRhdGEpXTtcbiAgICAgICAgICBwYXNzZXMgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXNzZXM7XG4gICAgICB9O1xuXG4gICAgICBjYWxsYmFjay5lcnJvcnMgPSBbXTtcbiAgICAgIHJldHVybiBjYWxsYmFjaztcbiAgICB9XG5cbiAgfSk7XG4gIHJldHVybiBhanY7XG59XG5cbnZhciBfZGVmYXVsdCA9IGFkZEFic29sdXRlUGF0aEtleXdvcmQ7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxuLyoqIEB0eXBlZGVmIHtpbXBvcnQoXCJhanZcIikuQWp2fSBBanYgKi9cblxuLyoqXG4gKlxuICogQHBhcmFtIHtBanZ9IGFqdlxuICogQHBhcmFtIHtzdHJpbmd9IGtleXdvcmRcbiAqIEBwYXJhbSB7YW55fSBkZWZpbml0aW9uXG4gKi9cbmZ1bmN0aW9uIGFkZEtleXdvcmQoYWp2LCBrZXl3b3JkLCBkZWZpbml0aW9uKSB7XG4gIGxldCBjdXN0b21SdWxlQ29kZTtcblxuICB0cnkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbiAgICBjdXN0b21SdWxlQ29kZSA9IHJlcXVpcmUoXCJhanYvbGliL2RvdGpzL2N1c3RvbVwiKTsgLy8gQHRzLWlnbm9yZVxuXG4gICAgY29uc3Qge1xuICAgICAgUlVMRVNcbiAgICB9ID0gYWp2O1xuICAgIGxldCBydWxlR3JvdXA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IFJVTEVTLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZyA9IFJVTEVTW2ldO1xuXG4gICAgICBpZiAodHlwZW9mIHJnLnR5cGUgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcnVsZUdyb3VwID0gcmc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJ1bGUgPSB7XG4gICAgICBrZXl3b3JkLFxuICAgICAgZGVmaW5pdGlvbixcbiAgICAgIGN1c3RvbTogdHJ1ZSxcbiAgICAgIGNvZGU6IGN1c3RvbVJ1bGVDb2RlLFxuICAgICAgaW1wbGVtZW50czogZGVmaW5pdGlvbi5pbXBsZW1lbnRzXG4gICAgfTtcbiAgICBydWxlR3JvdXAucnVsZXMudW5zaGlmdChydWxlKTtcbiAgICBSVUxFUy5jdXN0b21ba2V5d29yZF0gPSBydWxlO1xuICAgIFJVTEVTLmtleXdvcmRzW2tleXdvcmRdID0gdHJ1ZTtcbiAgICBSVUxFUy5hbGxba2V5d29yZF0gPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7Ly8gTm90aGluZywgZmFsbGJhY2tcbiAgfVxufVxuLyoqXG4gKlxuICogQHBhcmFtIHtBanZ9IGFqdlxuICogQHJldHVybnMge0Fqdn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGFkZFVuZGVmaW5lZEFzTnVsbEtleXdvcmQoYWp2KSB7XG4gIC8vIFRoZXJlIGlzIHdvcmthcm91bmQgZm9yIG9sZCB2ZXJzaW9ucyBvZiBhanYsIHdoZXJlIGBiZWZvcmVgIGlzIG5vdCBpbXBsZW1lbnRlZFxuICBhZGRLZXl3b3JkKGFqdiwgXCJ1bmRlZmluZWRBc051bGxcIiwge1xuICAgIG1vZGlmeWluZzogdHJ1ZSxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0ga3dWYWxcbiAgICAgKiBAcGFyYW0ge3Vua25vd259IGRhdGFcbiAgICAgKiBAcGFyYW0ge2FueX0gcGFyZW50U2NoZW1hXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGFQYXRoXG4gICAgICogQHBhcmFtIHt1bmtub3dufSBwYXJlbnREYXRhXG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IHBhcmVudERhdGFQcm9wZXJ0eVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgdmFsaWRhdGUoa3dWYWwsIGRhdGEsIHBhcmVudFNjaGVtYSwgZGF0YVBhdGgsIHBhcmVudERhdGEsIHBhcmVudERhdGFQcm9wZXJ0eSkge1xuICAgICAgaWYgKGt3VmFsICYmIHBhcmVudFNjaGVtYSAmJiB0eXBlb2YgcGFyZW50U2NoZW1hLmVudW0gIT09IFwidW5kZWZpbmVkXCIgJiYgcGFyZW50RGF0YSAmJiB0eXBlb2YgcGFyZW50RGF0YVByb3BlcnR5ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGNvbnN0IGlkeCA9XG4gICAgICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgICAgICBwYXJlbnREYXRhUHJvcGVydHk7XG4gICAgICAgIGNvbnN0IHBhcmVudERhdGFSZWYgPVxuICAgICAgICAvKiogQHR5cGUge2FueVtdfSAqL1xuICAgICAgICBwYXJlbnREYXRhO1xuXG4gICAgICAgIGlmICh0eXBlb2YgcGFyZW50RGF0YVJlZltpZHhdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgcGFyZW50RGF0YVJlZltpZHhdID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgfSk7XG4gIHJldHVybiBhanY7XG59XG5cbnZhciBfZGVmYXVsdCA9IGFkZFVuZGVmaW5lZEFzTnVsbEtleXdvcmQ7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBAdHlwZWRlZiB7W251bWJlciwgYm9vbGVhbl19IFJhbmdlVmFsdWVcbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBSYW5nZVZhbHVlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7UmFuZ2VWYWx1ZX0gcmFuZ2VWYWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNsYXNzIFJhbmdlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7XCJsZWZ0XCIgfCBcInJpZ2h0XCJ9IHNpZGVcbiAgICogQHBhcmFtIHtib29sZWFufSBleGNsdXNpdmVcbiAgICogQHJldHVybnMge1wiPlwiIHwgXCI+PVwiIHwgXCI8XCIgfCBcIjw9XCJ9XG4gICAqL1xuICBzdGF0aWMgZ2V0T3BlcmF0b3Ioc2lkZSwgZXhjbHVzaXZlKSB7XG4gICAgaWYgKHNpZGUgPT09IFwibGVmdFwiKSB7XG4gICAgICByZXR1cm4gZXhjbHVzaXZlID8gXCI+XCIgOiBcIj49XCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4Y2x1c2l2ZSA/IFwiPFwiIDogXCI8PVwiO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtib29sZWFufSBsb2dpYyBpcyBub3QgbG9naWMgYXBwbGllZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV4Y2x1c2l2ZSBpcyByYW5nZSBleGNsdXNpdmVcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cblxuICBzdGF0aWMgZm9ybWF0UmlnaHQodmFsdWUsIGxvZ2ljLCBleGNsdXNpdmUpIHtcbiAgICBpZiAobG9naWMgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gUmFuZ2UuZm9ybWF0TGVmdCh2YWx1ZSwgIWxvZ2ljLCAhZXhjbHVzaXZlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYHNob3VsZCBiZSAke1JhbmdlLmdldE9wZXJhdG9yKFwicmlnaHRcIiwgZXhjbHVzaXZlKX0gJHt2YWx1ZX1gO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtib29sZWFufSBsb2dpYyBpcyBub3QgbG9naWMgYXBwbGllZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV4Y2x1c2l2ZSBpcyByYW5nZSBleGNsdXNpdmVcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cblxuICBzdGF0aWMgZm9ybWF0TGVmdCh2YWx1ZSwgbG9naWMsIGV4Y2x1c2l2ZSkge1xuICAgIGlmIChsb2dpYyA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBSYW5nZS5mb3JtYXRSaWdodCh2YWx1ZSwgIWxvZ2ljLCAhZXhjbHVzaXZlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYHNob3VsZCBiZSAke1JhbmdlLmdldE9wZXJhdG9yKFwibGVmdFwiLCBleGNsdXNpdmUpfSAke3ZhbHVlfWA7XG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBsZWZ0IHNpZGUgdmFsdWVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCByaWdodCBzaWRlIHZhbHVlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc3RhcnRFeGNsdXNpdmUgaXMgcmFuZ2UgZXhjbHVzaXZlIGZyb20gbGVmdCBzaWRlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5kRXhjbHVzaXZlIGlzIHJhbmdlIGV4Y2x1c2l2ZSBmcm9tIHJpZ2h0IHNpZGVcbiAgICogQHBhcmFtIHtib29sZWFufSBsb2dpYyBpcyBub3QgbG9naWMgYXBwbGllZFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuXG4gIHN0YXRpYyBmb3JtYXRSYW5nZShzdGFydCwgZW5kLCBzdGFydEV4Y2x1c2l2ZSwgZW5kRXhjbHVzaXZlLCBsb2dpYykge1xuICAgIGxldCByZXN1bHQgPSBcInNob3VsZCBiZVwiO1xuICAgIHJlc3VsdCArPSBgICR7UmFuZ2UuZ2V0T3BlcmF0b3IobG9naWMgPyBcImxlZnRcIiA6IFwicmlnaHRcIiwgbG9naWMgPyBzdGFydEV4Y2x1c2l2ZSA6ICFzdGFydEV4Y2x1c2l2ZSl9ICR7c3RhcnR9IGA7XG4gICAgcmVzdWx0ICs9IGxvZ2ljID8gXCJhbmRcIiA6IFwib3JcIjtcbiAgICByZXN1bHQgKz0gYCAke1JhbmdlLmdldE9wZXJhdG9yKGxvZ2ljID8gXCJyaWdodFwiIDogXCJsZWZ0XCIsIGxvZ2ljID8gZW5kRXhjbHVzaXZlIDogIWVuZEV4Y2x1c2l2ZSl9ICR7ZW5kfWA7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtBcnJheTxSYW5nZVZhbHVlPn0gdmFsdWVzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbG9naWMgaXMgbm90IGxvZ2ljIGFwcGxpZWRcbiAgICogQHJldHVybiB7UmFuZ2VWYWx1ZX0gY29tcHV0ZWQgdmFsdWUgYW5kIGl0J3MgZXhjbHVzaXZlIGZsYWdcbiAgICovXG5cblxuICBzdGF0aWMgZ2V0UmFuZ2VWYWx1ZSh2YWx1ZXMsIGxvZ2ljKSB7XG4gICAgbGV0IG1pbk1heCA9IGxvZ2ljID8gSW5maW5pdHkgOiAtSW5maW5pdHk7XG4gICAgbGV0IGogPSAtMTtcbiAgICBjb25zdCBwcmVkaWNhdGUgPSBsb2dpYyA/XG4gICAgLyoqIEB0eXBlIHtSYW5nZVZhbHVlQ2FsbGJhY2t9ICovXG4gICAgKFt2YWx1ZV0pID0+IHZhbHVlIDw9IG1pbk1heCA6XG4gICAgLyoqIEB0eXBlIHtSYW5nZVZhbHVlQ2FsbGJhY2t9ICovXG4gICAgKFt2YWx1ZV0pID0+IHZhbHVlID49IG1pbk1heDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocHJlZGljYXRlKHZhbHVlc1tpXSkpIHtcbiAgICAgICAgW21pbk1heF0gPSB2YWx1ZXNbaV07XG4gICAgICAgIGogPSBpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChqID4gLTEpIHtcbiAgICAgIHJldHVybiB2YWx1ZXNbal07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtJbmZpbml0eSwgdHJ1ZV07XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKiogQHR5cGUge0FycmF5PFJhbmdlVmFsdWU+fSAqL1xuICAgIHRoaXMuX2xlZnQgPSBbXTtcbiAgICAvKiogQHR5cGUge0FycmF5PFJhbmdlVmFsdWU+fSAqL1xuXG4gICAgdGhpcy5fcmlnaHQgPSBbXTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbj19IGV4Y2x1c2l2ZVxuICAgKi9cblxuXG4gIGxlZnQodmFsdWUsIGV4Y2x1c2l2ZSA9IGZhbHNlKSB7XG4gICAgdGhpcy5fbGVmdC5wdXNoKFt2YWx1ZSwgZXhjbHVzaXZlXSk7XG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBleGNsdXNpdmVcbiAgICovXG5cblxuICByaWdodCh2YWx1ZSwgZXhjbHVzaXZlID0gZmFsc2UpIHtcbiAgICB0aGlzLl9yaWdodC5wdXNoKFt2YWx1ZSwgZXhjbHVzaXZlXSk7XG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbG9naWMgaXMgbm90IGxvZ2ljIGFwcGxpZWRcbiAgICogQHJldHVybiB7c3RyaW5nfSBcInNtYXJ0XCIgcmFuZ2Ugc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqL1xuXG5cbiAgZm9ybWF0KGxvZ2ljID0gdHJ1ZSkge1xuICAgIGNvbnN0IFtzdGFydCwgbGVmdEV4Y2x1c2l2ZV0gPSBSYW5nZS5nZXRSYW5nZVZhbHVlKHRoaXMuX2xlZnQsIGxvZ2ljKTtcbiAgICBjb25zdCBbZW5kLCByaWdodEV4Y2x1c2l2ZV0gPSBSYW5nZS5nZXRSYW5nZVZhbHVlKHRoaXMuX3JpZ2h0LCAhbG9naWMpO1xuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoc3RhcnQpICYmICFOdW1iZXIuaXNGaW5pdGUoZW5kKSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgY29uc3QgcmVhbFN0YXJ0ID0gbGVmdEV4Y2x1c2l2ZSA/IHN0YXJ0ICsgMSA6IHN0YXJ0O1xuICAgIGNvbnN0IHJlYWxFbmQgPSByaWdodEV4Y2x1c2l2ZSA/IGVuZCAtIDEgOiBlbmQ7IC8vIGUuZy4gNSA8IHggPCA3LCA1IDwgeCA8PSA2LCA2IDw9IHggPD0gNlxuXG4gICAgaWYgKHJlYWxTdGFydCA9PT0gcmVhbEVuZCkge1xuICAgICAgcmV0dXJuIGBzaG91bGQgYmUgJHtsb2dpYyA/IFwiXCIgOiBcIiFcIn09ICR7cmVhbFN0YXJ0fWA7XG4gICAgfSAvLyBlLmcuIDQgPCB4IDwg4oieXG5cblxuICAgIGlmIChOdW1iZXIuaXNGaW5pdGUoc3RhcnQpICYmICFOdW1iZXIuaXNGaW5pdGUoZW5kKSkge1xuICAgICAgcmV0dXJuIFJhbmdlLmZvcm1hdExlZnQoc3RhcnQsIGxvZ2ljLCBsZWZ0RXhjbHVzaXZlKTtcbiAgICB9IC8vIGUuZy4g4oieIDwgeCA8IDRcblxuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoc3RhcnQpICYmIE51bWJlci5pc0Zpbml0ZShlbmQpKSB7XG4gICAgICByZXR1cm4gUmFuZ2UuZm9ybWF0UmlnaHQoZW5kLCBsb2dpYywgcmlnaHRFeGNsdXNpdmUpO1xuICAgIH1cblxuICAgIHJldHVybiBSYW5nZS5mb3JtYXRSYW5nZShzdGFydCwgZW5kLCBsZWZ0RXhjbHVzaXZlLCByaWdodEV4Y2x1c2l2ZSwgbG9naWMpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSYW5nZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKFwiLi9SYW5nZVwiKTtcbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi4vdmFsaWRhdGVcIikuU2NoZW1hfSBTY2hlbWEgKi9cblxuLyoqXG4gKiBAcGFyYW0ge1NjaGVtYX0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGxvZ2ljXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuXG5cbm1vZHVsZS5leHBvcnRzLnN0cmluZ0hpbnRzID0gZnVuY3Rpb24gc3RyaW5nSGludHMoc2NoZW1hLCBsb2dpYykge1xuICBjb25zdCBoaW50cyA9IFtdO1xuICBsZXQgdHlwZSA9IFwic3RyaW5nXCI7XG4gIGNvbnN0IGN1cnJlbnRTY2hlbWEgPSB7IC4uLnNjaGVtYVxuICB9O1xuXG4gIGlmICghbG9naWMpIHtcbiAgICBjb25zdCB0bXBMZW5ndGggPSBjdXJyZW50U2NoZW1hLm1pbkxlbmd0aDtcbiAgICBjb25zdCB0bXBGb3JtYXQgPSBjdXJyZW50U2NoZW1hLmZvcm1hdE1pbmltdW07XG4gICAgY29uc3QgdG1wRXhjbHVzaXZlID0gY3VycmVudFNjaGVtYS5mb3JtYXRFeGNsdXNpdmVNYXhpbXVtO1xuICAgIGN1cnJlbnRTY2hlbWEubWluTGVuZ3RoID0gY3VycmVudFNjaGVtYS5tYXhMZW5ndGg7XG4gICAgY3VycmVudFNjaGVtYS5tYXhMZW5ndGggPSB0bXBMZW5ndGg7XG4gICAgY3VycmVudFNjaGVtYS5mb3JtYXRNaW5pbXVtID0gY3VycmVudFNjaGVtYS5mb3JtYXRNYXhpbXVtO1xuICAgIGN1cnJlbnRTY2hlbWEuZm9ybWF0TWF4aW11bSA9IHRtcEZvcm1hdDtcbiAgICBjdXJyZW50U2NoZW1hLmZvcm1hdEV4Y2x1c2l2ZU1heGltdW0gPSAhY3VycmVudFNjaGVtYS5mb3JtYXRFeGNsdXNpdmVNaW5pbXVtO1xuICAgIGN1cnJlbnRTY2hlbWEuZm9ybWF0RXhjbHVzaXZlTWluaW11bSA9ICF0bXBFeGNsdXNpdmU7XG4gIH1cblxuICBpZiAodHlwZW9mIGN1cnJlbnRTY2hlbWEubWluTGVuZ3RoID09PSBcIm51bWJlclwiKSB7XG4gICAgaWYgKGN1cnJlbnRTY2hlbWEubWluTGVuZ3RoID09PSAxKSB7XG4gICAgICB0eXBlID0gXCJub24tZW1wdHkgc3RyaW5nXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KGN1cnJlbnRTY2hlbWEubWluTGVuZ3RoIC0gMSwgMCk7XG4gICAgICBoaW50cy5wdXNoKGBzaG91bGQgYmUgbG9uZ2VyIHRoYW4gJHtsZW5ndGh9IGNoYXJhY3RlciR7bGVuZ3RoID4gMSA/IFwic1wiIDogXCJcIn1gKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGN1cnJlbnRTY2hlbWEubWF4TGVuZ3RoID09PSBcIm51bWJlclwiKSB7XG4gICAgaWYgKGN1cnJlbnRTY2hlbWEubWF4TGVuZ3RoID09PSAwKSB7XG4gICAgICB0eXBlID0gXCJlbXB0eSBzdHJpbmdcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbGVuZ3RoID0gY3VycmVudFNjaGVtYS5tYXhMZW5ndGggKyAxO1xuICAgICAgaGludHMucHVzaChgc2hvdWxkIGJlIHNob3J0ZXIgdGhhbiAke2xlbmd0aH0gY2hhcmFjdGVyJHtsZW5ndGggPiAxID8gXCJzXCIgOiBcIlwifWApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjdXJyZW50U2NoZW1hLnBhdHRlcm4pIHtcbiAgICBoaW50cy5wdXNoKGBzaG91bGQke2xvZ2ljID8gXCJcIiA6IFwiIG5vdFwifSBtYXRjaCBwYXR0ZXJuICR7SlNPTi5zdHJpbmdpZnkoY3VycmVudFNjaGVtYS5wYXR0ZXJuKX1gKTtcbiAgfVxuXG4gIGlmIChjdXJyZW50U2NoZW1hLmZvcm1hdCkge1xuICAgIGhpbnRzLnB1c2goYHNob3VsZCR7bG9naWMgPyBcIlwiIDogXCIgbm90XCJ9IG1hdGNoIGZvcm1hdCAke0pTT04uc3RyaW5naWZ5KGN1cnJlbnRTY2hlbWEuZm9ybWF0KX1gKTtcbiAgfVxuXG4gIGlmIChjdXJyZW50U2NoZW1hLmZvcm1hdE1pbmltdW0pIHtcbiAgICBoaW50cy5wdXNoKGBzaG91bGQgYmUgJHtjdXJyZW50U2NoZW1hLmZvcm1hdEV4Y2x1c2l2ZU1pbmltdW0gPyBcIj5cIiA6IFwiPj1cIn0gJHtKU09OLnN0cmluZ2lmeShjdXJyZW50U2NoZW1hLmZvcm1hdE1pbmltdW0pfWApO1xuICB9XG5cbiAgaWYgKGN1cnJlbnRTY2hlbWEuZm9ybWF0TWF4aW11bSkge1xuICAgIGhpbnRzLnB1c2goYHNob3VsZCBiZSAke2N1cnJlbnRTY2hlbWEuZm9ybWF0RXhjbHVzaXZlTWF4aW11bSA/IFwiPFwiIDogXCI8PVwifSAke0pTT04uc3RyaW5naWZ5KGN1cnJlbnRTY2hlbWEuZm9ybWF0TWF4aW11bSl9YCk7XG4gIH1cblxuICByZXR1cm4gW3R5cGVdLmNvbmNhdChoaW50cyk7XG59O1xuLyoqXG4gKiBAcGFyYW0ge1NjaGVtYX0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGxvZ2ljXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuXG5cbm1vZHVsZS5leHBvcnRzLm51bWJlckhpbnRzID0gZnVuY3Rpb24gbnVtYmVySGludHMoc2NoZW1hLCBsb2dpYykge1xuICBjb25zdCBoaW50cyA9IFtzY2hlbWEudHlwZSA9PT0gXCJpbnRlZ2VyXCIgPyBcImludGVnZXJcIiA6IFwibnVtYmVyXCJdO1xuICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuXG4gIGlmICh0eXBlb2Ygc2NoZW1hLm1pbmltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICByYW5nZS5sZWZ0KHNjaGVtYS5taW5pbXVtKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICByYW5nZS5sZWZ0KHNjaGVtYS5leGNsdXNpdmVNaW5pbXVtLCB0cnVlKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2NoZW1hLm1heGltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICByYW5nZS5yaWdodChzY2hlbWEubWF4aW11bSk7XG4gIH1cblxuICBpZiAodHlwZW9mIHNjaGVtYS5leGNsdXNpdmVNYXhpbXVtID09PSBcIm51bWJlclwiKSB7XG4gICAgcmFuZ2UucmlnaHQoc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0sIHRydWUpO1xuICB9XG5cbiAgY29uc3QgcmFuZ2VGb3JtYXQgPSByYW5nZS5mb3JtYXQobG9naWMpO1xuXG4gIGlmIChyYW5nZUZvcm1hdCkge1xuICAgIGhpbnRzLnB1c2gocmFuZ2VGb3JtYXQpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzY2hlbWEubXVsdGlwbGVPZiA9PT0gXCJudW1iZXJcIikge1xuICAgIGhpbnRzLnB1c2goYHNob3VsZCR7bG9naWMgPyBcIlwiIDogXCIgbm90XCJ9IGJlIG11bHRpcGxlIG9mICR7c2NoZW1hLm11bHRpcGxlT2Z9YCk7XG4gIH1cblxuICByZXR1cm4gaGludHM7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy52YWxpZGF0ZSA9IHZhbGlkYXRlO1xuZXhwb3J0cy5lbmFibGVWYWxpZGF0aW9uID0gZW5hYmxlVmFsaWRhdGlvbjtcbmV4cG9ydHMuZGlzYWJsZVZhbGlkYXRpb24gPSBkaXNhYmxlVmFsaWRhdGlvbjtcbmV4cG9ydHMubmVlZFZhbGlkYXRlID0gbmVlZFZhbGlkYXRlO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVmFsaWRhdGlvbkVycm9yXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9WYWxpZGF0aW9uRXJyb3IuZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfYWJzb2x1dGVQYXRoID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9rZXl3b3Jkcy9hYnNvbHV0ZVBhdGhcIikpO1xuXG52YXIgX3VuZGVmaW5lZEFzTnVsbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4va2V5d29yZHMvdW5kZWZpbmVkQXNOdWxsXCIpKTtcblxudmFyIF9WYWxpZGF0aW9uRXJyb3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL1ZhbGlkYXRpb25FcnJvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSBmbiB7KGZ1bmN0aW9uKCk6IGFueSkgfCB1bmRlZmluZWR9XG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oKTogVH1cbiAqL1xuY29uc3QgbWVtb2l6ZSA9IGZuID0+IHtcbiAgbGV0IGNhY2hlID0gZmFsc2U7XG4gIC8qKiBAdHlwZSB7VH0gKi9cblxuICBsZXQgcmVzdWx0O1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGlmIChjYWNoZSkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQgPVxuICAgIC8qKiBAdHlwZSB7ZnVuY3Rpb24oKTogYW55fSAqL1xuICAgIGZuKCk7XG4gICAgY2FjaGUgPSB0cnVlOyAvLyBBbGxvdyB0byBjbGVhbiB1cCBtZW1vcnkgZm9yIGZuXG4gICAgLy8gYW5kIGFsbCBkZXBlbmRlbnQgcmVzb3VyY2VzXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmaW5lZCwgbm8tcGFyYW0tcmVhc3NpZ25cblxuICAgIGZuID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuXG5jb25zdCBnZXRBanYgPSBtZW1vaXplKCgpID0+IHtcbiAgLy8gVXNlIENvbW1vbkpTIHJlcXVpcmUgZm9yIGFqdiBsaWJzIHNvIFR5cGVTY3JpcHQgY29uc3VtZXJzIGFyZW4ndCBsb2NrZWQgaW50byBlc01vZHVsZUludGVyb3AgKHNlZSAjMTEwKS5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG4gIGNvbnN0IEFqdiA9IHJlcXVpcmUoXCJhanZcIik7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxuXG5cbiAgY29uc3QgYWp2S2V5d29yZHMgPSByZXF1aXJlKFwiYWp2LWtleXdvcmRzXCIpO1xuXG4gIGNvbnN0IGFqdiA9IG5ldyBBanYoe1xuICAgIGFsbEVycm9yczogdHJ1ZSxcbiAgICB2ZXJib3NlOiB0cnVlLFxuICAgICRkYXRhOiB0cnVlXG4gIH0pO1xuICBhanZLZXl3b3JkcyhhanYsIFtcImluc3RhbmNlb2ZcIiwgXCJmb3JtYXRNaW5pbXVtXCIsIFwiZm9ybWF0TWF4aW11bVwiLCBcInBhdHRlcm5SZXF1aXJlZFwiXSk7IC8vIEN1c3RvbSBrZXl3b3Jkc1xuXG4gICgwLCBfYWJzb2x1dGVQYXRoLmRlZmF1bHQpKGFqdik7XG4gICgwLCBfdW5kZWZpbmVkQXNOdWxsLmRlZmF1bHQpKGFqdik7XG4gIHJldHVybiBhanY7XG59KTtcbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwianNvbi1zY2hlbWFcIikuSlNPTlNjaGVtYTR9IEpTT05TY2hlbWE0ICovXG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwianNvbi1zY2hlbWFcIikuSlNPTlNjaGVtYTZ9IEpTT05TY2hlbWE2ICovXG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwianNvbi1zY2hlbWFcIikuSlNPTlNjaGVtYTd9IEpTT05TY2hlbWE3ICovXG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiYWp2XCIpLkVycm9yT2JqZWN0fSBFcnJvck9iamVjdCAqL1xuXG4vKiogQHR5cGVkZWYge2ltcG9ydChcImFqdlwiKS5WYWxpZGF0ZUZ1bmN0aW9ufSBWYWxpZGF0ZUZ1bmN0aW9uICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRXh0ZW5kXG4gKiBAcHJvcGVydHkge251bWJlcj19IGZvcm1hdE1pbmltdW1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyPX0gZm9ybWF0TWF4aW11bVxuICogQHByb3BlcnR5IHtib29sZWFuPX0gZm9ybWF0RXhjbHVzaXZlTWluaW11bVxuICogQHByb3BlcnR5IHtib29sZWFuPX0gZm9ybWF0RXhjbHVzaXZlTWF4aW11bVxuICogQHByb3BlcnR5IHtzdHJpbmc9fSBsaW5rXG4gKiBAcHJvcGVydHkge2Jvb2xlYW49fSB1bmRlZmluZWRBc051bGxcbiAqL1xuXG4vKiogQHR5cGVkZWYgeyhKU09OU2NoZW1hNCB8IEpTT05TY2hlbWE2IHwgSlNPTlNjaGVtYTcpICYgRXh0ZW5kfSBTY2hlbWEgKi9cblxuLyoqIEB0eXBlZGVmIHtFcnJvck9iamVjdCAmIHsgY2hpbGRyZW4/OiBBcnJheTxFcnJvck9iamVjdD59fSBTY2hlbWFVdGlsRXJyb3JPYmplY3QgKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgUG9zdEZvcm1hdHRlclxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdHRlZEVycm9yXG4gKiBAcGFyYW0ge1NjaGVtYVV0aWxFcnJvck9iamVjdH0gZXJyb3JcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBWYWxpZGF0aW9uRXJyb3JDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZz19IG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nPX0gYmFzZURhdGFQYXRoXG4gKiBAcHJvcGVydHkge1Bvc3RGb3JtYXR0ZXI9fSBwb3N0Rm9ybWF0dGVyXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge1NjaGVtYVV0aWxFcnJvck9iamVjdH0gZXJyb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcbiAqIEByZXR1cm5zIHtTY2hlbWFVdGlsRXJyb3JPYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gYXBwbHlQcmVmaXgoZXJyb3IsIGlkeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZXJyb3IuZGF0YVBhdGggPSBgWyR7aWR4fV0ke2Vycm9yLmRhdGFQYXRofWA7XG5cbiAgaWYgKGVycm9yLmNoaWxkcmVuKSB7XG4gICAgZXJyb3IuY2hpbGRyZW4uZm9yRWFjaChlcnIgPT4gYXBwbHlQcmVmaXgoZXJyLCBpZHgpKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcjtcbn1cblxubGV0IHNraXBWYWxpZGF0aW9uID0gZmFsc2U7IC8vIFdlIHVzZSBgcHJvY2Vzcy5lbnYuU0tJUF9WQUxJREFUSU9OYCBiZWNhdXNlIHlvdSBjYW4gaGF2ZSBtdWx0aXBsZSBgc2NoZW1hLXV0aWxzYCB3aXRoIGRpZmZlcmVudCB2ZXJzaW9uLFxuLy8gc28gd2Ugd2FudCB0byBkaXNhYmxlIGl0IGdsb2JhbGx5LCBgcHJvY2Vzcy5lbnZgIGRvZXNuJ3Qgc3VwcG9ydGVkIGJ5IGJyb3dzZXJzLCBzbyB3ZSBoYXZlIHRoZSBsb2NhbCBgc2tpcFZhbGlkYXRpb25gIHZhcmlhYmxlc1xuLy8gRW5hYmxlIHZhbGlkYXRpb25cblxuZnVuY3Rpb24gZW5hYmxlVmFsaWRhdGlvbigpIHtcbiAgc2tpcFZhbGlkYXRpb24gPSBmYWxzZTsgLy8gRGlzYWJsZSB2YWxpZGF0aW9uIGZvciBhbnkgdmVyc2lvbnNcblxuICBpZiAocHJvY2VzcyAmJiBwcm9jZXNzLmVudikge1xuICAgIHByb2Nlc3MuZW52LlNLSVBfVkFMSURBVElPTiA9IFwiblwiO1xuICB9XG59IC8vIERpc2FibGUgdmFsaWRhdGlvblxuXG5cbmZ1bmN0aW9uIGRpc2FibGVWYWxpZGF0aW9uKCkge1xuICBza2lwVmFsaWRhdGlvbiA9IHRydWU7XG5cbiAgaWYgKHByb2Nlc3MgJiYgcHJvY2Vzcy5lbnYpIHtcbiAgICBwcm9jZXNzLmVudi5TS0lQX1ZBTElEQVRJT04gPSBcInlcIjtcbiAgfVxufSAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGNvbmZpcm1cblxuXG5mdW5jdGlvbiBuZWVkVmFsaWRhdGUoKSB7XG4gIGlmIChza2lwVmFsaWRhdGlvbikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52LlNLSVBfVkFMSURBVElPTikge1xuICAgIGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnYuU0tJUF9WQUxJREFUSU9OLnRyaW0oKTtcblxuICAgIGlmICgvXig/Onl8eWVzfHRydWV8MXxvbikkL2kudGVzdCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoL14oPzpufG5vfGZhbHNlfDB8b2ZmKSQvaS50ZXN0KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG4vKipcbiAqIEBwYXJhbSB7U2NoZW1hfSBzY2hlbWFcbiAqIEBwYXJhbSB7QXJyYXk8b2JqZWN0PiB8IG9iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtWYWxpZGF0aW9uRXJyb3JDb25maWd1cmF0aW9uPX0gY29uZmlndXJhdGlvblxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZShzY2hlbWEsIG9wdGlvbnMsIGNvbmZpZ3VyYXRpb24pIHtcbiAgaWYgKCFuZWVkVmFsaWRhdGUoKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBlcnJvcnMgPSBbXTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IG9wdGlvbnMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZU9iamVjdChzY2hlbWEsIG9wdGlvbnNbaV0pLm1hcChlcnIgPT4gYXBwbHlQcmVmaXgoZXJyLCBpKSkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBlcnJvcnMgPSB2YWxpZGF0ZU9iamVjdChzY2hlbWEsIG9wdGlvbnMpO1xuICB9XG5cbiAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IF9WYWxpZGF0aW9uRXJyb3IuZGVmYXVsdChlcnJvcnMsIHNjaGVtYSwgY29uZmlndXJhdGlvbik7XG4gIH1cbn1cbi8qKiBAdHlwZWRlZiB7V2Vha01hcDxTY2hlbWEsIFZhbGlkYXRlRnVuY3Rpb24+fSAqL1xuXG5cbmNvbnN0IHNjaGVtYUNhY2hlID0gbmV3IFdlYWtNYXAoKTtcbi8qKlxuICogQHBhcmFtIHtTY2hlbWF9IHNjaGVtYVxuICogQHBhcmFtIHtBcnJheTxvYmplY3Q+IHwgb2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJucyB7QXJyYXk8U2NoZW1hVXRpbEVycm9yT2JqZWN0Pn1cbiAqL1xuXG5mdW5jdGlvbiB2YWxpZGF0ZU9iamVjdChzY2hlbWEsIG9wdGlvbnMpIHtcbiAgbGV0IGNvbXBpbGVkU2NoZW1hID0gc2NoZW1hQ2FjaGUuZ2V0KHNjaGVtYSk7XG5cbiAgaWYgKCFjb21waWxlZFNjaGVtYSkge1xuICAgIGNvbXBpbGVkU2NoZW1hID0gZ2V0QWp2KCkuY29tcGlsZShzY2hlbWEpO1xuICAgIHNjaGVtYUNhY2hlLnNldChzY2hlbWEsIGNvbXBpbGVkU2NoZW1hKTtcbiAgfVxuXG4gIGNvbnN0IHZhbGlkID0gY29tcGlsZWRTY2hlbWEob3B0aW9ucyk7XG4gIGlmICh2YWxpZCkgcmV0dXJuIFtdO1xuICByZXR1cm4gY29tcGlsZWRTY2hlbWEuZXJyb3JzID8gZmlsdGVyRXJyb3JzKGNvbXBpbGVkU2NoZW1hLmVycm9ycykgOiBbXTtcbn1cbi8qKlxuICogQHBhcmFtIHtBcnJheTxFcnJvck9iamVjdD59IGVycm9yc1xuICogQHJldHVybnMge0FycmF5PFNjaGVtYVV0aWxFcnJvck9iamVjdD59XG4gKi9cblxuXG5mdW5jdGlvbiBmaWx0ZXJFcnJvcnMoZXJyb3JzKSB7XG4gIC8qKiBAdHlwZSB7QXJyYXk8U2NoZW1hVXRpbEVycm9yT2JqZWN0Pn0gKi9cbiAgbGV0IG5ld0Vycm9ycyA9IFtdO1xuXG4gIGZvciAoY29uc3QgZXJyb3Igb2ZcbiAgLyoqIEB0eXBlIHtBcnJheTxTY2hlbWFVdGlsRXJyb3JPYmplY3Q+fSAqL1xuICBlcnJvcnMpIHtcbiAgICBjb25zdCB7XG4gICAgICBkYXRhUGF0aFxuICAgIH0gPSBlcnJvcjtcbiAgICAvKiogQHR5cGUge0FycmF5PFNjaGVtYVV0aWxFcnJvck9iamVjdD59ICovXG5cbiAgICBsZXQgY2hpbGRyZW4gPSBbXTtcbiAgICBuZXdFcnJvcnMgPSBuZXdFcnJvcnMuZmlsdGVyKG9sZEVycm9yID0+IHtcbiAgICAgIGlmIChvbGRFcnJvci5kYXRhUGF0aC5pbmNsdWRlcyhkYXRhUGF0aCkpIHtcbiAgICAgICAgaWYgKG9sZEVycm9yLmNoaWxkcmVuKSB7XG4gICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5jb25jYXQob2xkRXJyb3IuY2hpbGRyZW4uc2xpY2UoMCkpO1xuICAgICAgICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZmluZWQsIG5vLXBhcmFtLXJlYXNzaWduXG5cblxuICAgICAgICBvbGRFcnJvci5jaGlsZHJlbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChvbGRFcnJvcik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBlcnJvci5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIH1cblxuICAgIG5ld0Vycm9ycy5wdXNoKGVycm9yKTtcbiAgfVxuXG4gIHJldHVybiBuZXdFcnJvcnM7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBzdHlsZXNJbkRPTSA9IFtdO1xuZnVuY3Rpb24gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICB2YXIgcmVzdWx0ID0gLTE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5ET00ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5ET01baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpIHtcbiAgdmFyIGlkQ291bnRNYXAgPSB7fTtcbiAgdmFyIGlkZW50aWZpZXJzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleEJ5SWRlbnRpZmllciA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXSxcbiAgICAgIHN1cHBvcnRzOiBpdGVtWzRdLFxuICAgICAgbGF5ZXI6IGl0ZW1bNV1cbiAgICB9O1xuICAgIGlmIChpbmRleEJ5SWRlbnRpZmllciAhPT0gLTEpIHtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS5yZWZlcmVuY2VzKys7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0udXBkYXRlcihvYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdXBkYXRlciA9IGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5ieUluZGV4ID0gaTtcbiAgICAgIHN0eWxlc0luRE9NLnNwbGljZShpLCAwLCB7XG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgIHVwZGF0ZXI6IHVwZGF0ZXIsXG4gICAgICAgIHJlZmVyZW5jZXM6IDFcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG4gIHJldHVybiBpZGVudGlmaWVycztcbn1cbmZ1bmN0aW9uIGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpIHtcbiAgdmFyIGFwaSA9IG9wdGlvbnMuZG9tQVBJKG9wdGlvbnMpO1xuICBhcGkudXBkYXRlKG9iaik7XG4gIHZhciB1cGRhdGVyID0gZnVuY3Rpb24gdXBkYXRlcihuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwICYmIG5ld09iai5zdXBwb3J0cyA9PT0gb2JqLnN1cHBvcnRzICYmIG5ld09iai5sYXllciA9PT0gb2JqLmxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGFwaS51cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbW92ZSgpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHVwZGF0ZXI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cbiAgICB2YXIgbmV3TGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKG5ld0xpc3QsIG9wdGlvbnMpO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcbiAgICAgIGlmIChzdHlsZXNJbkRPTVtfaW5kZXhdLnJlZmVyZW5jZXMgPT09IDApIHtcbiAgICAgICAgc3R5bGVzSW5ET01bX2luZGV4XS51cGRhdGVyKCk7XG4gICAgICAgIHN0eWxlc0luRE9NLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgbWVtbyA9IHt9O1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGdldFRhcmdldCh0YXJnZXQpIHtcbiAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YXIgc3R5bGVUYXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7XG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuICAgIGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgIC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gc3R5bGVUYXJnZXQuY29udGVudERvY3VtZW50LmhlYWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gIH1cbiAgcmV0dXJuIG1lbW9bdGFyZ2V0XTtcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRCeVNlbGVjdG9yKGluc2VydCwgc3R5bGUpIHtcbiAgdmFyIHRhcmdldCA9IGdldFRhcmdldChpbnNlcnQpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gIH1cbiAgdGFyZ2V0LmFwcGVuZENoaWxkKHN0eWxlKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0QnlTZWxlY3RvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgb3B0aW9ucy5zZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMuYXR0cmlidXRlcyk7XG4gIG9wdGlvbnMuaW5zZXJ0KGVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG4gIHJldHVybiBlbGVtZW50O1xufVxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzKHN0eWxlRWxlbWVudCkge1xuICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09IFwidW5kZWZpbmVkXCIgPyBfX3dlYnBhY2tfbm9uY2VfXyA6IG51bGw7XG4gIGlmIChub25jZSkge1xuICAgIHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLCBub25jZSk7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKSB7XG4gIHZhciBjc3MgPSBcIlwiO1xuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQob2JqLnN1cHBvcnRzLCBcIikge1wiKTtcbiAgfVxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwiQG1lZGlhIFwiLmNvbmNhdChvYmoubWVkaWEsIFwiIHtcIik7XG4gIH1cbiAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBvYmoubGF5ZXIgIT09IFwidW5kZWZpbmVkXCI7XG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJAbGF5ZXJcIi5jb25jYXQob2JqLmxheWVyLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQob2JqLmxheWVyKSA6IFwiXCIsIFwiIHtcIik7XG4gIH1cbiAgY3NzICs9IG9iai5jc3M7XG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuICBpZiAoc291cmNlTWFwICYmIHR5cGVvZiBidG9hICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgY3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSwgXCIgKi9cIik7XG4gIH1cblxuICAvLyBGb3Igb2xkIElFXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cbiAgb3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpIHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmIChzdHlsZUVsZW1lbnQucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdHlsZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQpO1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGRvbUFQSShvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7fSxcbiAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge31cbiAgICB9O1xuICB9XG4gIHZhciBzdHlsZUVsZW1lbnQgPSBvcHRpb25zLmluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKTtcbiAgcmV0dXJuIHtcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShvYmopIHtcbiAgICAgIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCk7XG4gICAgfVxuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBkb21BUEk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQpIHtcbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBzdHlsZVRhZ1RyYW5zZm9ybTsiLCJleHBvcnQgZnVuY3Rpb24gbWVyZ2UoLi4uc2V0czpBcnJheTxzdHJpbmc+KTpzdHJpbmcge1xuXHRpZiAoc2V0cy5sZW5ndGggPiAxKSB7XG5cdFx0c2V0c1swXSA9IHNldHNbMF0uc2xpY2UoMCwgLTEpO1xuXHRcdGNvbnN0IHhsID0gc2V0cy5sZW5ndGggLSAxO1xuXHRcdGZvciAobGV0IHggPSAxOyB4IDwgeGw7ICsreCkge1xuXHRcdFx0c2V0c1t4XSA9IHNldHNbeF0uc2xpY2UoMSwgLTEpO1xuXHRcdH1cblx0XHRzZXRzW3hsXSA9IHNldHNbeGxdLnNsaWNlKDEpO1xuXHRcdHJldHVybiBzZXRzLmpvaW4oJycpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBzZXRzWzBdO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJleHAoc3RyOnN0cmluZyk6c3RyaW5nIHtcblx0cmV0dXJuIFwiKD86XCIgKyBzdHIgKyBcIilcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVPZihvOmFueSk6c3RyaW5nIHtcblx0cmV0dXJuIG8gPT09IHVuZGVmaW5lZCA/IFwidW5kZWZpbmVkXCIgOiAobyA9PT0gbnVsbCA/IFwibnVsbFwiIDogT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNwbGl0KFwiIFwiKS5wb3AoKS5zcGxpdChcIl1cIikuc2hpZnQoKS50b0xvd2VyQ2FzZSgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvVXBwZXJDYXNlKHN0cjpzdHJpbmcpOnN0cmluZyB7XG5cdHJldHVybiBzdHIudG9VcHBlckNhc2UoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQXJyYXkob2JqOmFueSk6QXJyYXk8YW55PiB7XG5cdHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwgPyAob2JqIGluc3RhbmNlb2YgQXJyYXkgPyBvYmogOiAodHlwZW9mIG9iai5sZW5ndGggIT09IFwibnVtYmVyXCIgfHwgb2JqLnNwbGl0IHx8IG9iai5zZXRJbnRlcnZhbCB8fCBvYmouY2FsbCA/IFtvYmpdIDogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwob2JqKSkpIDogW107XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQ6IG9iamVjdCwgc291cmNlOiBhbnkpOiBhbnkge1xuXHRjb25zdCBvYmogPSB0YXJnZXQgYXMgYW55O1xuXHRpZiAoc291cmNlKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gc291cmNlKSB7XG5cdFx0XHRvYmpba2V5XSA9IHNvdXJjZVtrZXldO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb2JqO1xufSIsImltcG9ydCB7IFVSSVJlZ0V4cHMgfSBmcm9tIFwiLi91cmlcIjtcbmltcG9ydCB7IG1lcmdlLCBzdWJleHAgfSBmcm9tIFwiLi91dGlsXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEV4cHMoaXNJUkk6Ym9vbGVhbik6VVJJUmVnRXhwcyB7XG5cdGNvbnN0XG5cdFx0QUxQSEEkJCA9IFwiW0EtWmEtel1cIixcblx0XHRDUiQgPSBcIltcXFxceDBEXVwiLFxuXHRcdERJR0lUJCQgPSBcIlswLTldXCIsXG5cdFx0RFFVT1RFJCQgPSBcIltcXFxceDIyXVwiLFxuXHRcdEhFWERJRyQkID0gbWVyZ2UoRElHSVQkJCwgXCJbQS1GYS1mXVwiKSwgIC8vY2FzZS1pbnNlbnNpdGl2ZVxuXHRcdExGJCQgPSBcIltcXFxceDBBXVwiLFxuXHRcdFNQJCQgPSBcIltcXFxceDIwXVwiLFxuXHRcdFBDVF9FTkNPREVEJCA9IHN1YmV4cChzdWJleHAoXCIlW0VGZWZdXCIgKyBIRVhESUckJCArIFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCArIFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCkgKyBcInxcIiArIHN1YmV4cChcIiVbODlBLUZhLWZdXCIgKyBIRVhESUckJCArIFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCkgKyBcInxcIiArIHN1YmV4cChcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQpKSwgIC8vZXhwYW5kZWRcblx0XHRHRU5fREVMSU1TJCQgPSBcIltcXFxcOlxcXFwvXFxcXD9cXFxcI1xcXFxbXFxcXF1cXFxcQF1cIixcblx0XHRTVUJfREVMSU1TJCQgPSBcIltcXFxcIVxcXFwkXFxcXCZcXFxcJ1xcXFwoXFxcXClcXFxcKlxcXFwrXFxcXCxcXFxcO1xcXFw9XVwiLFxuXHRcdFJFU0VSVkVEJCQgPSBtZXJnZShHRU5fREVMSU1TJCQsIFNVQl9ERUxJTVMkJCksXG5cdFx0VUNTQ0hBUiQkID0gaXNJUkkgPyBcIltcXFxceEEwLVxcXFx1MjAwRFxcXFx1MjAxMC1cXFxcdTIwMjlcXFxcdTIwMkYtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRUZdXCIgOiBcIltdXCIsICAvL3N1YnNldCwgZXhjbHVkZXMgYmlkaSBjb250cm9sIGNoYXJhY3RlcnNcblx0XHRJUFJJVkFURSQkID0gaXNJUkkgPyBcIltcXFxcdUUwMDAtXFxcXHVGOEZGXVwiIDogXCJbXVwiLCAgLy9zdWJzZXRcblx0XHRVTlJFU0VSVkVEJCQgPSBtZXJnZShBTFBIQSQkLCBESUdJVCQkLCBcIltcXFxcLVxcXFwuXFxcXF9cXFxcfl1cIiwgVUNTQ0hBUiQkKSxcblx0XHRTQ0hFTUUkID0gc3ViZXhwKEFMUEhBJCQgKyBtZXJnZShBTFBIQSQkLCBESUdJVCQkLCBcIltcXFxcK1xcXFwtXFxcXC5dXCIpICsgXCIqXCIpLFxuXHRcdFVTRVJJTkZPJCA9IHN1YmV4cChzdWJleHAoUENUX0VOQ09ERUQkICsgXCJ8XCIgKyBtZXJnZShVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXDpdXCIpKSArIFwiKlwiKSxcblx0XHRERUNfT0NURVQkID0gc3ViZXhwKHN1YmV4cChcIjI1WzAtNV1cIikgKyBcInxcIiArIHN1YmV4cChcIjJbMC00XVwiICsgRElHSVQkJCkgKyBcInxcIiArIHN1YmV4cChcIjFcIiArIERJR0lUJCQgKyBESUdJVCQkKSArIFwifFwiICsgc3ViZXhwKFwiWzEtOV1cIiArIERJR0lUJCQpICsgXCJ8XCIgKyBESUdJVCQkKSxcblx0XHRERUNfT0NURVRfUkVMQVhFRCQgPSBzdWJleHAoc3ViZXhwKFwiMjVbMC01XVwiKSArIFwifFwiICsgc3ViZXhwKFwiMlswLTRdXCIgKyBESUdJVCQkKSArIFwifFwiICsgc3ViZXhwKFwiMVwiICsgRElHSVQkJCArIERJR0lUJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIwP1sxLTldXCIgKyBESUdJVCQkKSArIFwifDA/MD9cIiArIERJR0lUJCQpLCAgLy9yZWxheGVkIHBhcnNpbmcgcnVsZXNcblx0XHRJUFY0QUREUkVTUyQgPSBzdWJleHAoREVDX09DVEVUX1JFTEFYRUQkICsgXCJcXFxcLlwiICsgREVDX09DVEVUX1JFTEFYRUQkICsgXCJcXFxcLlwiICsgREVDX09DVEVUX1JFTEFYRUQkICsgXCJcXFxcLlwiICsgREVDX09DVEVUX1JFTEFYRUQkKSxcblx0XHRIMTYkID0gc3ViZXhwKEhFWERJRyQkICsgXCJ7MSw0fVwiKSxcblx0XHRMUzMyJCA9IHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIiArIEgxNiQpICsgXCJ8XCIgKyBJUFY0QUREUkVTUyQpLFxuXHRcdElQVjZBRERSRVNTMSQgPSBzdWJleHAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7Nn1cIiArIExTMzIkKSwgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICA2KCBoMTYgXCI6XCIgKSBsczMyXG5cdFx0SVBWNkFERFJFU1MyJCA9IHN1YmV4cCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXFxcOlxcXFw6XCIgKyBzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcIns1fVwiICsgTFMzMiQpLCAvLyAgICAgICAgICAgICAgICAgICAgICBcIjo6XCIgNSggaDE2IFwiOlwiICkgbHMzMlxuXHRcdElQVjZBRERSRVNTMyQgPSBzdWJleHAoc3ViZXhwKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEgxNiQpICsgXCI/XFxcXDpcXFxcOlwiICsgc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7NH1cIiArIExTMzIkKSwgLy9bICAgICAgICAgICAgICAgaDE2IF0gXCI6OlwiIDQoIGgxNiBcIjpcIiApIGxzMzJcblx0XHRJUFY2QUREUkVTUzQkID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDF9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiArIHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezN9XCIgKyBMUzMyJCksIC8vWyAqMSggaDE2IFwiOlwiICkgaDE2IF0gXCI6OlwiIDMoIGgxNiBcIjpcIiApIGxzMzJcblx0XHRJUFY2QUREUkVTUzUkID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDJ9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiArIHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezJ9XCIgKyBMUzMyJCksIC8vWyAqMiggaDE2IFwiOlwiICkgaDE2IF0gXCI6OlwiIDIoIGgxNiBcIjpcIiApIGxzMzJcblx0XHRJUFY2QUREUkVTUzYkID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDN9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiArICAgICAgICBIMTYkICsgXCJcXFxcOlwiICAgICAgICAgICsgTFMzMiQpLCAvL1sgKjMoIGgxNiBcIjpcIiApIGgxNiBdIFwiOjpcIiAgICBoMTYgXCI6XCIgICBsczMyXG5cdFx0SVBWNkFERFJFU1M3JCA9IHN1YmV4cChzdWJleHAoc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7MCw0fVwiICsgSDE2JCkgKyBcIj9cXFxcOlxcXFw6XCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgTFMzMiQpLCAvL1sgKjQoIGgxNiBcIjpcIiApIGgxNiBdIFwiOjpcIiAgICAgICAgICAgICAgbHMzMlxuXHRcdElQVjZBRERSRVNTOCQgPSBzdWJleHAoc3ViZXhwKHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezAsNX1cIiArIEgxNiQpICsgXCI/XFxcXDpcXFxcOlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEgxNiQgKSwgLy9bICo1KCBoMTYgXCI6XCIgKSBoMTYgXSBcIjo6XCIgICAgICAgICAgICAgIGgxNlxuXHRcdElQVjZBRERSRVNTOSQgPSBzdWJleHAoc3ViZXhwKHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezAsNn1cIiArIEgxNiQpICsgXCI/XFxcXDpcXFxcOlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwgLy9bICo2KCBoMTYgXCI6XCIgKSBoMTYgXSBcIjo6XCJcblx0XHRJUFY2QUREUkVTUyQgPSBzdWJleHAoW0lQVjZBRERSRVNTMSQsIElQVjZBRERSRVNTMiQsIElQVjZBRERSRVNTMyQsIElQVjZBRERSRVNTNCQsIElQVjZBRERSRVNTNSQsIElQVjZBRERSRVNTNiQsIElQVjZBRERSRVNTNyQsIElQVjZBRERSRVNTOCQsIElQVjZBRERSRVNTOSRdLmpvaW4oXCJ8XCIpKSxcblx0XHRaT05FSUQkID0gc3ViZXhwKHN1YmV4cChVTlJFU0VSVkVEJCQgKyBcInxcIiArIFBDVF9FTkNPREVEJCkgKyBcIitcIiksICAvL1JGQyA2ODc0XG5cdFx0SVBWNkFERFJaJCA9IHN1YmV4cChJUFY2QUREUkVTUyQgKyBcIlxcXFwlMjVcIiArIFpPTkVJRCQpLCAgLy9SRkMgNjg3NFxuXHRcdElQVjZBRERSWl9SRUxBWEVEJCA9IHN1YmV4cChJUFY2QUREUkVTUyQgKyBzdWJleHAoXCJcXFxcJTI1fFxcXFwlKD8hXCIgKyBIRVhESUckJCArIFwiezJ9KVwiKSArIFpPTkVJRCQpLCAgLy9SRkMgNjg3NCwgd2l0aCByZWxheGVkIHBhcnNpbmcgcnVsZXNcblx0XHRJUFZGVVRVUkUkID0gc3ViZXhwKFwiW3ZWXVwiICsgSEVYRElHJCQgKyBcIitcXFxcLlwiICsgbWVyZ2UoVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFw6XVwiKSArIFwiK1wiKSxcblx0XHRJUF9MSVRFUkFMJCA9IHN1YmV4cChcIlxcXFxbXCIgKyBzdWJleHAoSVBWNkFERFJaX1JFTEFYRUQkICsgXCJ8XCIgKyBJUFY2QUREUkVTUyQgKyBcInxcIiArIElQVkZVVFVSRSQpICsgXCJcXFxcXVwiKSwgIC8vUkZDIDY4NzRcblx0XHRSRUdfTkFNRSQgPSBzdWJleHAoc3ViZXhwKFBDVF9FTkNPREVEJCArIFwifFwiICsgbWVyZ2UoVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQpKSArIFwiKlwiKSxcblx0XHRIT1NUJCA9IHN1YmV4cChJUF9MSVRFUkFMJCArIFwifFwiICsgSVBWNEFERFJFU1MkICsgXCIoPyFcIiArIFJFR19OQU1FJCArIFwiKVwiICsgXCJ8XCIgKyBSRUdfTkFNRSQpLFxuXHRcdFBPUlQkID0gc3ViZXhwKERJR0lUJCQgKyBcIipcIiksXG5cdFx0QVVUSE9SSVRZJCA9IHN1YmV4cChzdWJleHAoVVNFUklORk8kICsgXCJAXCIpICsgXCI/XCIgKyBIT1NUJCArIHN1YmV4cChcIlxcXFw6XCIgKyBQT1JUJCkgKyBcIj9cIiksXG5cdFx0UENIQVIkID0gc3ViZXhwKFBDVF9FTkNPREVEJCArIFwifFwiICsgbWVyZ2UoVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFw6XFxcXEBdXCIpKSxcblx0XHRTRUdNRU5UJCA9IHN1YmV4cChQQ0hBUiQgKyBcIipcIiksXG5cdFx0U0VHTUVOVF9OWiQgPSBzdWJleHAoUENIQVIkICsgXCIrXCIpLFxuXHRcdFNFR01FTlRfTlpfTkMkID0gc3ViZXhwKHN1YmV4cChQQ1RfRU5DT0RFRCQgKyBcInxcIiArIG1lcmdlKFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkLCBcIltcXFxcQF1cIikpICsgXCIrXCIpLFxuXHRcdFBBVEhfQUJFTVBUWSQgPSBzdWJleHAoc3ViZXhwKFwiXFxcXC9cIiArIFNFR01FTlQkKSArIFwiKlwiKSxcblx0XHRQQVRIX0FCU09MVVRFJCA9IHN1YmV4cChcIlxcXFwvXCIgKyBzdWJleHAoU0VHTUVOVF9OWiQgKyBQQVRIX0FCRU1QVFkkKSArIFwiP1wiKSwgIC8vc2ltcGxpZmllZFxuXHRcdFBBVEhfTk9TQ0hFTUUkID0gc3ViZXhwKFNFR01FTlRfTlpfTkMkICsgUEFUSF9BQkVNUFRZJCksICAvL3NpbXBsaWZpZWRcblx0XHRQQVRIX1JPT1RMRVNTJCA9IHN1YmV4cChTRUdNRU5UX05aJCArIFBBVEhfQUJFTVBUWSQpLCAgLy9zaW1wbGlmaWVkXG5cdFx0UEFUSF9FTVBUWSQgPSBcIig/IVwiICsgUENIQVIkICsgXCIpXCIsXG5cdFx0UEFUSCQgPSBzdWJleHAoUEFUSF9BQkVNUFRZJCArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfTk9TQ0hFTUUkICsgXCJ8XCIgKyBQQVRIX1JPT1RMRVNTJCArIFwifFwiICsgUEFUSF9FTVBUWSQpLFxuXHRcdFFVRVJZJCA9IHN1YmV4cChzdWJleHAoUENIQVIkICsgXCJ8XCIgKyBtZXJnZShcIltcXFxcL1xcXFw/XVwiLCBJUFJJVkFURSQkKSkgKyBcIipcIiksXG5cdFx0RlJBR01FTlQkID0gc3ViZXhwKHN1YmV4cChQQ0hBUiQgKyBcInxbXFxcXC9cXFxcP11cIikgKyBcIipcIiksXG5cdFx0SElFUl9QQVJUJCA9IHN1YmV4cChzdWJleHAoXCJcXFxcL1xcXFwvXCIgKyBBVVRIT1JJVFkkICsgUEFUSF9BQkVNUFRZJCkgKyBcInxcIiArIFBBVEhfQUJTT0xVVEUkICsgXCJ8XCIgKyBQQVRIX1JPT1RMRVNTJCArIFwifFwiICsgUEFUSF9FTVBUWSQpLFxuXHRcdFVSSSQgPSBzdWJleHAoU0NIRU1FJCArIFwiXFxcXDpcIiArIEhJRVJfUEFSVCQgKyBzdWJleHAoXCJcXFxcP1wiICsgUVVFUlkkKSArIFwiP1wiICsgc3ViZXhwKFwiXFxcXCNcIiArIEZSQUdNRU5UJCkgKyBcIj9cIiksXG5cdFx0UkVMQVRJVkVfUEFSVCQgPSBzdWJleHAoc3ViZXhwKFwiXFxcXC9cXFxcL1wiICsgQVVUSE9SSVRZJCArIFBBVEhfQUJFTVBUWSQpICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9OT1NDSEVNRSQgKyBcInxcIiArIFBBVEhfRU1QVFkkKSxcblx0XHRSRUxBVElWRSQgPSBzdWJleHAoUkVMQVRJVkVfUEFSVCQgKyBzdWJleHAoXCJcXFxcP1wiICsgUVVFUlkkKSArIFwiP1wiICsgc3ViZXhwKFwiXFxcXCNcIiArIEZSQUdNRU5UJCkgKyBcIj9cIiksXG5cdFx0VVJJX1JFRkVSRU5DRSQgPSBzdWJleHAoVVJJJCArIFwifFwiICsgUkVMQVRJVkUkKSxcblx0XHRBQlNPTFVURV9VUkkkID0gc3ViZXhwKFNDSEVNRSQgKyBcIlxcXFw6XCIgKyBISUVSX1BBUlQkICsgc3ViZXhwKFwiXFxcXD9cIiArIFFVRVJZJCkgKyBcIj9cIiksXG5cblx0XHRHRU5FUklDX1JFRiQgPSBcIl4oXCIgKyBTQ0hFTUUkICsgXCIpXFxcXDpcIiArIHN1YmV4cChzdWJleHAoXCJcXFxcL1xcXFwvKFwiICsgc3ViZXhwKFwiKFwiICsgVVNFUklORk8kICsgXCIpQFwiKSArIFwiPyhcIiArIEhPU1QkICsgXCIpXCIgKyBzdWJleHAoXCJcXFxcOihcIiArIFBPUlQkICsgXCIpXCIpICsgXCI/KVwiKSArIFwiPyhcIiArIFBBVEhfQUJFTVBUWSQgKyBcInxcIiArIFBBVEhfQUJTT0xVVEUkICsgXCJ8XCIgKyBQQVRIX1JPT1RMRVNTJCArIFwifFwiICsgUEFUSF9FTVBUWSQgKyBcIilcIikgKyBzdWJleHAoXCJcXFxcPyhcIiArIFFVRVJZJCArIFwiKVwiKSArIFwiP1wiICsgc3ViZXhwKFwiXFxcXCMoXCIgKyBGUkFHTUVOVCQgKyBcIilcIikgKyBcIj8kXCIsXG5cdFx0UkVMQVRJVkVfUkVGJCA9IFwiXigpezB9XCIgKyBzdWJleHAoc3ViZXhwKFwiXFxcXC9cXFxcLyhcIiArIHN1YmV4cChcIihcIiArIFVTRVJJTkZPJCArIFwiKUBcIikgKyBcIj8oXCIgKyBIT1NUJCArIFwiKVwiICsgc3ViZXhwKFwiXFxcXDooXCIgKyBQT1JUJCArIFwiKVwiKSArIFwiPylcIikgKyBcIj8oXCIgKyBQQVRIX0FCRU1QVFkkICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9OT1NDSEVNRSQgKyBcInxcIiArIFBBVEhfRU1QVFkkICsgXCIpXCIpICsgc3ViZXhwKFwiXFxcXD8oXCIgKyBRVUVSWSQgKyBcIilcIikgKyBcIj9cIiArIHN1YmV4cChcIlxcXFwjKFwiICsgRlJBR01FTlQkICsgXCIpXCIpICsgXCI/JFwiLFxuXHRcdEFCU09MVVRFX1JFRiQgPSBcIl4oXCIgKyBTQ0hFTUUkICsgXCIpXFxcXDpcIiArIHN1YmV4cChzdWJleHAoXCJcXFxcL1xcXFwvKFwiICsgc3ViZXhwKFwiKFwiICsgVVNFUklORk8kICsgXCIpQFwiKSArIFwiPyhcIiArIEhPU1QkICsgXCIpXCIgKyBzdWJleHAoXCJcXFxcOihcIiArIFBPUlQkICsgXCIpXCIpICsgXCI/KVwiKSArIFwiPyhcIiArIFBBVEhfQUJFTVBUWSQgKyBcInxcIiArIFBBVEhfQUJTT0xVVEUkICsgXCJ8XCIgKyBQQVRIX1JPT1RMRVNTJCArIFwifFwiICsgUEFUSF9FTVBUWSQgKyBcIilcIikgKyBzdWJleHAoXCJcXFxcPyhcIiArIFFVRVJZJCArIFwiKVwiKSArIFwiPyRcIixcblx0XHRTQU1FRE9DX1JFRiQgPSBcIl5cIiArIHN1YmV4cChcIlxcXFwjKFwiICsgRlJBR01FTlQkICsgXCIpXCIpICsgXCI/JFwiLFxuXHRcdEFVVEhPUklUWV9SRUYkID0gXCJeXCIgKyBzdWJleHAoXCIoXCIgKyBVU0VSSU5GTyQgKyBcIilAXCIpICsgXCI/KFwiICsgSE9TVCQgKyBcIilcIiArIHN1YmV4cChcIlxcXFw6KFwiICsgUE9SVCQgKyBcIilcIikgKyBcIj8kXCJcblx0O1xuXG5cdHJldHVybiB7XG5cdFx0Tk9UX1NDSEVNRSA6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXl1cIiwgQUxQSEEkJCwgRElHSVQkJCwgXCJbXFxcXCtcXFxcLVxcXFwuXVwiKSwgXCJnXCIpLFxuXHRcdE5PVF9VU0VSSU5GTyA6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXFxcXDpdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxuXHRcdE5PVF9IT1NUIDogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVcXFxcW1xcXFxdXFxcXDpdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxuXHRcdE5PVF9QQVRIIDogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVcXFxcL1xcXFw6XFxcXEBdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxuXHRcdE5PVF9QQVRIX05PU0NIRU1FIDogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVcXFxcL1xcXFxAXVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCksIFwiZ1wiKSxcblx0XHROT1RfUVVFUlkgOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJV1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFw6XFxcXEBcXFxcL1xcXFw/XVwiLCBJUFJJVkFURSQkKSwgXCJnXCIpLFxuXHRcdE5PVF9GUkFHTUVOVCA6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXDpcXFxcQFxcXFwvXFxcXD9dXCIpLCBcImdcIiksXG5cdFx0RVNDQVBFIDogbmV3IFJlZ0V4cChtZXJnZShcIlteXVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCksIFwiZ1wiKSxcblx0XHRVTlJFU0VSVkVEIDogbmV3IFJlZ0V4cChVTlJFU0VSVkVEJCQsIFwiZ1wiKSxcblx0XHRPVEhFUl9DSEFSUyA6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXVwiLCBVTlJFU0VSVkVEJCQsIFJFU0VSVkVEJCQpLCBcImdcIiksXG5cdFx0UENUX0VOQ09ERUQgOiBuZXcgUmVnRXhwKFBDVF9FTkNPREVEJCwgXCJnXCIpLFxuXHRcdElQVjRBRERSRVNTIDogbmV3IFJlZ0V4cChcIl4oXCIgKyBJUFY0QUREUkVTUyQgKyBcIikkXCIpLFxuXHRcdElQVjZBRERSRVNTIDogbmV3IFJlZ0V4cChcIl5cXFxcWz8oXCIgKyBJUFY2QUREUkVTUyQgKyBcIilcIiArIHN1YmV4cChzdWJleHAoXCJcXFxcJTI1fFxcXFwlKD8hXCIgKyBIRVhESUckJCArIFwiezJ9KVwiKSArIFwiKFwiICsgWk9ORUlEJCArIFwiKVwiKSArIFwiP1xcXFxdPyRcIikgIC8vUkZDIDY4NzQsIHdpdGggcmVsYXhlZCBwYXJzaW5nIHJ1bGVzXG5cdH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkRXhwcyhmYWxzZSk7XG4iLCJpbXBvcnQgeyBVUklSZWdFeHBzIH0gZnJvbSBcIi4vdXJpXCI7XG5pbXBvcnQgeyBidWlsZEV4cHMgfSBmcm9tIFwiLi9yZWdleHBzLXVyaVwiO1xuXG5leHBvcnQgZGVmYXVsdCBidWlsZEV4cHModHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cbmNvbnN0IG1heEludCA9IDIxNDc0ODM2NDc7IC8vIGFrYS4gMHg3RkZGRkZGRiBvciAyXjMxLTFcblxuLyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuY29uc3QgYmFzZSA9IDM2O1xuY29uc3QgdE1pbiA9IDE7XG5jb25zdCB0TWF4ID0gMjY7XG5jb25zdCBza2V3ID0gMzg7XG5jb25zdCBkYW1wID0gNzAwO1xuY29uc3QgaW5pdGlhbEJpYXMgPSA3MjtcbmNvbnN0IGluaXRpYWxOID0gMTI4OyAvLyAweDgwXG5jb25zdCBkZWxpbWl0ZXIgPSAnLSc7IC8vICdcXHgyRCdcblxuLyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cbmNvbnN0IHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vO1xuY29uc3QgcmVnZXhOb25BU0NJSSA9IC9bXlxcMC1cXHg3RV0vOyAvLyBub24tQVNDSUkgY2hhcnNcbmNvbnN0IHJlZ2V4U2VwYXJhdG9ycyA9IC9bXFx4MkVcXHUzMDAyXFx1RkYwRVxcdUZGNjFdL2c7IC8vIFJGQyAzNDkwIHNlcGFyYXRvcnNcblxuLyoqIEVycm9yIG1lc3NhZ2VzICovXG5jb25zdCBlcnJvcnMgPSB7XG5cdCdvdmVyZmxvdyc6ICdPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcycsXG5cdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG59O1xuXG4vKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5jb25zdCBiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW47XG5jb25zdCBmbG9vciA9IE1hdGguZmxvb3I7XG5jb25zdCBzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqXG4gKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgZXJyb3IgdHlwZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gZXJyb3IodHlwZSkge1xuXHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xufVxuXG4vKipcbiAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcbiAqIGl0ZW0uXG4gKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IGFycmF5IG9mIHZhbHVlcyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0Y29uc3QgcmVzdWx0ID0gW107XG5cdGxldCBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcbiAqIGFkZHJlc3Nlcy5cbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG4gKiBjaGFyYWN0ZXIuXG4gKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuICogZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdGNvbnN0IHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdGxldCByZXN1bHQgPSAnJztcblx0aWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRyZXN1bHQgPSBwYXJ0c1swXSArICdAJztcblx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0fVxuXHQvLyBBdm9pZCBgc3BsaXQocmVnZXgpYCBmb3IgSUU4IGNvbXBhdGliaWxpdHkuIFNlZSAjMTcuXG5cdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdGNvbnN0IGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRjb25zdCBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuICogY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcuIFdoaWxlIEphdmFTY3JpcHQgdXNlcyBVQ1MtMiBpbnRlcm5hbGx5LFxuICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcbiAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuICogbWF0Y2hpbmcgVVRGLTE2LlxuICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG4gKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cbiAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG4gKiBAbmFtZSBkZWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFRoZSBuZXcgYXJyYXkgb2YgY29kZSBwb2ludHMuXG4gKi9cbmZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdGNvbnN0IG91dHB1dCA9IFtdO1xuXHRsZXQgY291bnRlciA9IDA7XG5cdGNvbnN0IGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG5cdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBzdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO1xuXHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdC8vIEl0J3MgYSBoaWdoIHN1cnJvZ2F0ZSwgYW5kIHRoZXJlIGlzIGEgbmV4dCBjaGFyYWN0ZXIuXG5cdFx0XHRjb25zdCBleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAoKGV4dHJhICYgMHhGQzAwKSA9PSAweERDMDApIHsgLy8gTG93IHN1cnJvZ2F0ZS5cblx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEl0J3MgYW4gdW5tYXRjaGVkIHN1cnJvZ2F0ZTsgb25seSBhcHBlbmQgdGhpcyBjb2RlIHVuaXQsIGluIGNhc2UgdGhlXG5cdFx0XHRcdC8vIG5leHQgY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyLlxuXHRcdFx0XHRvdXRwdXQucHVzaCh2YWx1ZSk7XG5cdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb3V0cHV0O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cbiAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcbiAqIEBuYW1lIGVuY29kZVxuICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBuZXcgVW5pY29kZSBzdHJpbmcgKFVDUy0yKS5cbiAqL1xuY29uc3QgdWNzMmVuY29kZSA9IGFycmF5ID0+IFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLmFycmF5KTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG4gKiBAc2VlIGBkaWdpdFRvQmFzaWMoKWBcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQgKGZvciB1c2UgaW5cbiAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcbiAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuICovXG5jb25zdCBiYXNpY1RvRGlnaXQgPSBmdW5jdGlvbihjb2RlUG9pbnQpIHtcblx0aWYgKGNvZGVQb2ludCAtIDB4MzAgPCAweDBBKSB7XG5cdFx0cmV0dXJuIGNvZGVQb2ludCAtIDB4MTY7XG5cdH1cblx0aWYgKGNvZGVQb2ludCAtIDB4NDEgPCAweDFBKSB7XG5cdFx0cmV0dXJuIGNvZGVQb2ludCAtIDB4NDE7XG5cdH1cblx0aWYgKGNvZGVQb2ludCAtIDB4NjEgPCAweDFBKSB7XG5cdFx0cmV0dXJuIGNvZGVQb2ludCAtIDB4NjE7XG5cdH1cblx0cmV0dXJuIGJhc2U7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cbiAqIEBzZWUgYGJhc2ljVG9EaWdpdCgpYFxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgYmFzaWMgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSAod2hlbiB1c2VkIGZvclxuICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2VcbiAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuICogdXNlZDsgZWxzZSwgdGhlIGxvd2VyY2FzZSBmb3JtIGlzIHVzZWQuIFRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWRcbiAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG4gKi9cbmNvbnN0IGRpZ2l0VG9CYXNpYyA9IGZ1bmN0aW9uKGRpZ2l0LCBmbGFnKSB7XG5cdC8vICAwLi4yNSBtYXAgdG8gQVNDSUkgYS4ueiBvciBBLi5aXG5cdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xufTtcblxuLyoqXG4gKiBCaWFzIGFkYXB0YXRpb24gZnVuY3Rpb24gYXMgcGVyIHNlY3Rpb24gMy40IG9mIFJGQyAzNDkyLlxuICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IGFkYXB0ID0gZnVuY3Rpb24oZGVsdGEsIG51bVBvaW50cywgZmlyc3RUaW1lKSB7XG5cdGxldCBrID0gMDtcblx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0ZGVsdGEgKz0gZmxvb3IoZGVsdGEgLyBudW1Qb2ludHMpO1xuXHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0fVxuXHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcbiAqIHN5bWJvbHMuXG4gKiBAbWVtYmVyT2YgcHVueWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cbiAqL1xuY29uc3QgZGVjb2RlID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0Ly8gRG9uJ3QgdXNlIFVDUy0yLlxuXHRjb25zdCBvdXRwdXQgPSBbXTtcblx0Y29uc3QgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cdGxldCBpID0gMDtcblx0bGV0IG4gPSBpbml0aWFsTjtcblx0bGV0IGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0Ly8gdGhlIGZpcnN0IGJhc2ljIGNvZGUgcG9pbnRzIHRvIHRoZSBvdXRwdXQuXG5cblx0bGV0IGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0aWYgKGJhc2ljIDwgMCkge1xuXHRcdGJhc2ljID0gMDtcblx0fVxuXG5cdGZvciAobGV0IGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdGlmIChpbnB1dC5jaGFyQ29kZUF0KGopID49IDB4ODApIHtcblx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHR9XG5cdFx0b3V0cHV0LnB1c2goaW5wdXQuY2hhckNvZGVBdChqKSk7XG5cdH1cblxuXHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdC8vIHBvaW50cyB3ZXJlIGNvcGllZDsgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvdGhlcndpc2UuXG5cblx0Zm9yIChsZXQgaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHQvLyBgaW5kZXhgIGlzIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gYmUgY29uc3VtZWQuXG5cdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0Ly8gaWYgd2UgaW5jcmVhc2UgYGlgIGFzIHdlIGdvLCB0aGVuIHN1YnRyYWN0IG9mZiBpdHMgc3RhcnRpbmdcblx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdGxldCBvbGRpID0gaTtcblx0XHRmb3IgKGxldCB3ID0gMSwgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XG5cblx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRjb25zdCB0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcblxuXHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgYmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3Qgb3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHQvLyBgaWAgd2FzIHN1cHBvc2VkIHRvIHdyYXAgYXJvdW5kIGZyb20gYG91dGAgdG8gYDBgLFxuXHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0fVxuXG5cdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRpICU9IG91dDtcblxuXHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXQuXG5cdFx0b3V0cHV0LnNwbGljZShpKyssIDAsIG4pO1xuXG5cdH1cblxuXHRyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4ub3V0cHV0KTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcbiAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG4gKiBAbWVtYmVyT2YgcHVueWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cbiAqL1xuY29uc3QgZW5jb2RlID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0Y29uc3Qgb3V0cHV0ID0gW107XG5cblx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gYW4gYXJyYXkgb2YgVW5pY29kZSBjb2RlIHBvaW50cy5cblx0aW5wdXQgPSB1Y3MyZGVjb2RlKGlucHV0KTtcblxuXHQvLyBDYWNoZSB0aGUgbGVuZ3RoLlxuXHRsZXQgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGUuXG5cdGxldCBuID0gaW5pdGlhbE47XG5cdGxldCBkZWx0YSA9IDA7XG5cdGxldCBiaWFzID0gaW5pdGlhbEJpYXM7XG5cblx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50cy5cblx0Zm9yIChjb25zdCBjdXJyZW50VmFsdWUgb2YgaW5wdXQpIHtcblx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGN1cnJlbnRWYWx1ZSkpO1xuXHRcdH1cblx0fVxuXG5cdGxldCBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cdGxldCBoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoO1xuXG5cdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0Ly8gRmluaXNoIHRoZSBiYXNpYyBzdHJpbmcgd2l0aCBhIGRlbGltaXRlciB1bmxlc3MgaXQncyBlbXB0eS5cblx0aWYgKGJhc2ljTGVuZ3RoKSB7XG5cdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0fVxuXG5cdC8vIE1haW4gZW5jb2RpbmcgbG9vcDpcblx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHQvLyBsYXJnZXIgb25lOlxuXHRcdGxldCBtID0gbWF4SW50O1xuXHRcdGZvciAoY29uc3QgY3VycmVudFZhbHVlIG9mIGlucHV0KSB7XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHQvLyBidXQgZ3VhcmQgYWdhaW5zdCBvdmVyZmxvdy5cblx0XHRjb25zdCBoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0aWYgKG0gLSBuID4gZmxvb3IoKG1heEludCAtIGRlbHRhKSAvIGhhbmRsZWRDUENvdW50UGx1c09uZSkpIHtcblx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdH1cblxuXHRcdGRlbHRhICs9IChtIC0gbikgKiBoYW5kbGVkQ1BDb3VudFBsdXNPbmU7XG5cdFx0biA9IG07XG5cblx0XHRmb3IgKGNvbnN0IGN1cnJlbnRWYWx1ZSBvZiBpbnB1dCkge1xuXHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA8IG4gJiYgKytkZWx0YSA+IG1heEludCkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlci5cblx0XHRcdFx0bGV0IHEgPSBkZWx0YTtcblx0XHRcdFx0Zm9yIChsZXQgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XG5cdFx0XHRcdFx0Y29uc3QgdCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgcU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdGNvbnN0IGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHEsIDApKSk7XG5cdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0KytoYW5kbGVkQ1BDb3VudDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQrK2RlbHRhO1xuXHRcdCsrbjtcblxuXHR9XG5cdHJldHVybiBvdXRwdXQuam9pbignJyk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3NcbiAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cbiAqIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IG9uIGEgc3RyaW5nIHRoYXQgaGFzIGFscmVhZHkgYmVlblxuICogY29udmVydGVkIHRvIFVuaWNvZGUuXG4gKiBAbWVtYmVyT2YgcHVueWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGVkIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG9cbiAqIGNvbnZlcnQgdG8gVW5pY29kZS5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuICogc3RyaW5nLlxuICovXG5jb25zdCB0b1VuaWNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xuXHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRyZXR1cm4gcmVnZXhQdW55Y29kZS50ZXN0KHN0cmluZylcblx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0OiBzdHJpbmc7XG5cdH0pO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cbiAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuICogaS5lLiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCB3aXRoIGEgZG9tYWluIHRoYXQncyBhbHJlYWR5IGluXG4gKiBBU0NJSS5cbiAqIEBtZW1iZXJPZiBwdW55Y29kZVxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvIGNvbnZlcnQsIGFzIGFcbiAqIFVuaWNvZGUgc3RyaW5nLlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuICogZW1haWwgYWRkcmVzcy5cbiAqL1xuY29uc3QgdG9BU0NJSSA9IGZ1bmN0aW9uKGlucHV0KSB7XG5cdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdHJldHVybiByZWdleE5vbkFTQ0lJLnRlc3Qoc3RyaW5nKVxuXHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0OiBzdHJpbmc7XG5cdH0pO1xufTtcblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cbmNvbnN0IHB1bnljb2RlID0ge1xuXHQvKipcblx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHR5cGUgU3RyaW5nXG5cdCAqL1xuXHQndmVyc2lvbic6ICcyLjEuMCcsXG5cdC8qKlxuXHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0J3VjczInOiB7XG5cdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0J2VuY29kZSc6IHVjczJlbmNvZGVcblx0fSxcblx0J2RlY29kZSc6IGRlY29kZSxcblx0J2VuY29kZSc6IGVuY29kZSxcblx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBwdW55Y29kZTtcbiIsIi8qKlxuICogVVJJLmpzXG4gKlxuICogQGZpbGVvdmVydmlldyBBbiBSRkMgMzk4NiBjb21wbGlhbnQsIHNjaGVtZSBleHRlbmRhYmxlIFVSSSBwYXJzaW5nL3ZhbGlkYXRpbmcvcmVzb2x2aW5nIGxpYnJhcnkgZm9yIEphdmFTY3JpcHQuXG4gKiBAYXV0aG9yIDxhIGhyZWY9XCJtYWlsdG86Z2FyeS5jb3VydEBnbWFpbC5jb21cIj5HYXJ5IENvdXJ0PC9hPlxuICogQHNlZSBodHRwOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvdXJpLWpzXG4gKi9cblxuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMSBHYXJ5IENvdXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZVxuICogcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2ZcbiAqICAgICAgIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqXG4gKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdFxuICogICAgICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHNcbiAqICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdBUlkgQ09VUlQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEXG4gKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgR0FSWSBDT1VSVCBPUlxuICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1JcbiAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1JcbiAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbiAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkdcbiAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRlxuICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKlxuICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGFyZSB0aG9zZSBvZiB0aGVcbiAqIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkXG4gKiBvciBpbXBsaWVkLCBvZiBHYXJ5IENvdXJ0LlxuICovXG5cbmltcG9ydCBVUklfUFJPVE9DT0wgZnJvbSBcIi4vcmVnZXhwcy11cmlcIjtcbmltcG9ydCBJUklfUFJPVE9DT0wgZnJvbSBcIi4vcmVnZXhwcy1pcmlcIjtcbmltcG9ydCBwdW55Y29kZSBmcm9tIFwicHVueWNvZGVcIjtcbmltcG9ydCB7IHRvVXBwZXJDYXNlLCB0eXBlT2YsIGFzc2lnbiB9IGZyb20gXCIuL3V0aWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBVUklDb21wb25lbnRzIHtcblx0c2NoZW1lPzpzdHJpbmc7XG5cdHVzZXJpbmZvPzpzdHJpbmc7XG5cdGhvc3Q/OnN0cmluZztcblx0cG9ydD86bnVtYmVyfHN0cmluZztcblx0cGF0aD86c3RyaW5nO1xuXHRxdWVyeT86c3RyaW5nO1xuXHRmcmFnbWVudD86c3RyaW5nO1xuXHRyZWZlcmVuY2U/OnN0cmluZztcblx0ZXJyb3I/OnN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVUklPcHRpb25zIHtcblx0c2NoZW1lPzpzdHJpbmc7XG5cdHJlZmVyZW5jZT86c3RyaW5nO1xuXHR0b2xlcmFudD86Ym9vbGVhbjtcblx0YWJzb2x1dGVQYXRoPzpib29sZWFuO1xuXHRpcmk/OmJvb2xlYW47XG5cdHVuaWNvZGVTdXBwb3J0Pzpib29sZWFuO1xuXHRkb21haW5Ib3N0Pzpib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVSSVNjaGVtZUhhbmRsZXI8Q29tcG9uZW50cyBleHRlbmRzIFVSSUNvbXBvbmVudHMgPSBVUklDb21wb25lbnRzLCBPcHRpb25zIGV4dGVuZHMgVVJJT3B0aW9ucyA9IFVSSU9wdGlvbnMsIFBhcmVudENvbXBvbmVudHMgZXh0ZW5kcyBVUklDb21wb25lbnRzID0gVVJJQ29tcG9uZW50cz4ge1xuXHRzY2hlbWU6c3RyaW5nO1xuXHRwYXJzZShjb21wb25lbnRzOlBhcmVudENvbXBvbmVudHMsIG9wdGlvbnM6T3B0aW9ucyk6Q29tcG9uZW50cztcblx0c2VyaWFsaXplKGNvbXBvbmVudHM6Q29tcG9uZW50cywgb3B0aW9uczpPcHRpb25zKTpQYXJlbnRDb21wb25lbnRzO1xuXHR1bmljb2RlU3VwcG9ydD86Ym9vbGVhbjtcblx0ZG9tYWluSG9zdD86Ym9vbGVhbjtcblx0YWJzb2x1dGVQYXRoPzpib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVSSVJlZ0V4cHMge1xuXHROT1RfU0NIRU1FIDogUmVnRXhwLFxuXHROT1RfVVNFUklORk8gOiBSZWdFeHAsXG5cdE5PVF9IT1NUIDogUmVnRXhwLFxuXHROT1RfUEFUSCA6IFJlZ0V4cCxcblx0Tk9UX1BBVEhfTk9TQ0hFTUUgOiBSZWdFeHAsXG5cdE5PVF9RVUVSWSA6IFJlZ0V4cCxcblx0Tk9UX0ZSQUdNRU5UIDogUmVnRXhwLFxuXHRFU0NBUEUgOiBSZWdFeHAsXG5cdFVOUkVTRVJWRUQgOiBSZWdFeHAsXG5cdE9USEVSX0NIQVJTIDogUmVnRXhwLFxuXHRQQ1RfRU5DT0RFRCA6IFJlZ0V4cCxcblx0SVBWNEFERFJFU1MgOiBSZWdFeHAsXG5cdElQVjZBRERSRVNTIDogUmVnRXhwLFxufVxuXG5leHBvcnQgY29uc3QgU0NIRU1FUzp7W3NjaGVtZTpzdHJpbmddOlVSSVNjaGVtZUhhbmRsZXJ9ID0ge307XG5cbmV4cG9ydCBmdW5jdGlvbiBwY3RFbmNDaGFyKGNocjpzdHJpbmcpOnN0cmluZyB7XG5cdGNvbnN0IGMgPSBjaHIuY2hhckNvZGVBdCgwKTtcblx0bGV0IGU6c3RyaW5nO1xuXG5cdGlmIChjIDwgMTYpIGUgPSBcIiUwXCIgKyBjLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHRlbHNlIGlmIChjIDwgMTI4KSBlID0gXCIlXCIgKyBjLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHRlbHNlIGlmIChjIDwgMjA0OCkgZSA9IFwiJVwiICsgKChjID4+IDYpIHwgMTkyKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArIFwiJVwiICsgKChjICYgNjMpIHwgMTI4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblx0ZWxzZSBlID0gXCIlXCIgKyAoKGMgPj4gMTIpIHwgMjI0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArIFwiJVwiICsgKCgoYyA+PiA2KSAmIDYzKSB8IDEyOCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkgKyBcIiVcIiArICgoYyAmIDYzKSB8IDEyOCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cblx0cmV0dXJuIGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwY3REZWNDaGFycyhzdHI6c3RyaW5nKTpzdHJpbmcge1xuXHRsZXQgbmV3U3RyID0gXCJcIjtcblx0bGV0IGkgPSAwO1xuXHRjb25zdCBpbCA9IHN0ci5sZW5ndGg7XG5cblx0d2hpbGUgKGkgPCBpbCkge1xuXHRcdGNvbnN0IGMgPSBwYXJzZUludChzdHIuc3Vic3RyKGkgKyAxLCAyKSwgMTYpO1xuXG5cdFx0aWYgKGMgPCAxMjgpIHtcblx0XHRcdG5ld1N0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuXHRcdFx0aSArPSAzO1xuXHRcdH1cblx0XHRlbHNlIGlmIChjID49IDE5NCAmJiBjIDwgMjI0KSB7XG5cdFx0XHRpZiAoKGlsIC0gaSkgPj0gNikge1xuXHRcdFx0XHRjb25zdCBjMiA9IHBhcnNlSW50KHN0ci5zdWJzdHIoaSArIDQsIDIpLCAxNik7XG5cdFx0XHRcdG5ld1N0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgoYyAmIDMxKSA8PCA2KSB8IChjMiAmIDYzKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuZXdTdHIgKz0gc3RyLnN1YnN0cihpLCA2KTtcblx0XHRcdH1cblx0XHRcdGkgKz0gNjtcblx0XHR9XG5cdFx0ZWxzZSBpZiAoYyA+PSAyMjQpIHtcblx0XHRcdGlmICgoaWwgLSBpKSA+PSA5KSB7XG5cdFx0XHRcdGNvbnN0IGMyID0gcGFyc2VJbnQoc3RyLnN1YnN0cihpICsgNCwgMiksIDE2KTtcblx0XHRcdFx0Y29uc3QgYzMgPSBwYXJzZUludChzdHIuc3Vic3RyKGkgKyA3LCAyKSwgMTYpO1xuXHRcdFx0XHRuZXdTdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGMgJiAxNSkgPDwgMTIpIHwgKChjMiAmIDYzKSA8PCA2KSB8IChjMyAmIDYzKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuZXdTdHIgKz0gc3RyLnN1YnN0cihpLCA5KTtcblx0XHRcdH1cblx0XHRcdGkgKz0gOTtcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHRuZXdTdHIgKz0gc3RyLnN1YnN0cihpLCAzKTtcblx0XHRcdGkgKz0gMztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3U3RyO1xufVxuXG5mdW5jdGlvbiBfbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcoY29tcG9uZW50czpVUklDb21wb25lbnRzLCBwcm90b2NvbDpVUklSZWdFeHBzKSB7XG5cdGZ1bmN0aW9uIGRlY29kZVVucmVzZXJ2ZWQoc3RyOnN0cmluZyk6c3RyaW5nIHtcblx0XHRjb25zdCBkZWNTdHIgPSBwY3REZWNDaGFycyhzdHIpO1xuXHRcdHJldHVybiAoIWRlY1N0ci5tYXRjaChwcm90b2NvbC5VTlJFU0VSVkVEKSA/IHN0ciA6IGRlY1N0cik7XG5cdH1cblxuXHRpZiAoY29tcG9uZW50cy5zY2hlbWUpIGNvbXBvbmVudHMuc2NoZW1lID0gU3RyaW5nKGNvbXBvbmVudHMuc2NoZW1lKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UocHJvdG9jb2wuTk9UX1NDSEVNRSwgXCJcIik7XG5cdGlmIChjb21wb25lbnRzLnVzZXJpbmZvICE9PSB1bmRlZmluZWQpIGNvbXBvbmVudHMudXNlcmluZm8gPSBTdHJpbmcoY29tcG9uZW50cy51c2VyaW5mbykucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShwcm90b2NvbC5OT1RfVVNFUklORk8sIHBjdEVuY0NoYXIpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKTtcblx0aWYgKGNvbXBvbmVudHMuaG9zdCAhPT0gdW5kZWZpbmVkKSBjb21wb25lbnRzLmhvc3QgPSBTdHJpbmcoY29tcG9uZW50cy5ob3N0KS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UocHJvdG9jb2wuTk9UX0hPU1QsIHBjdEVuY0NoYXIpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKTtcblx0aWYgKGNvbXBvbmVudHMucGF0aCAhPT0gdW5kZWZpbmVkKSBjb21wb25lbnRzLnBhdGggPSBTdHJpbmcoY29tcG9uZW50cy5wYXRoKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKChjb21wb25lbnRzLnNjaGVtZSA/IHByb3RvY29sLk5PVF9QQVRIIDogcHJvdG9jb2wuTk9UX1BBVEhfTk9TQ0hFTUUpLCBwY3RFbmNDaGFyKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSk7XG5cdGlmIChjb21wb25lbnRzLnF1ZXJ5ICE9PSB1bmRlZmluZWQpIGNvbXBvbmVudHMucXVlcnkgPSBTdHJpbmcoY29tcG9uZW50cy5xdWVyeSkucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShwcm90b2NvbC5OT1RfUVVFUlksIHBjdEVuY0NoYXIpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKTtcblx0aWYgKGNvbXBvbmVudHMuZnJhZ21lbnQgIT09IHVuZGVmaW5lZCkgY29tcG9uZW50cy5mcmFnbWVudCA9IFN0cmluZyhjb21wb25lbnRzLmZyYWdtZW50KS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKHByb3RvY29sLk5PVF9GUkFHTUVOVCwgcGN0RW5jQ2hhcikucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpO1xuXG5cdHJldHVybiBjb21wb25lbnRzO1xufTtcblxuZnVuY3Rpb24gX3N0cmlwTGVhZGluZ1plcm9zKHN0cjpzdHJpbmcpOnN0cmluZyB7XG5cdHJldHVybiBzdHIucmVwbGFjZSgvXjAqKC4qKS8sIFwiJDFcIikgfHwgXCIwXCI7XG59XG5cbmZ1bmN0aW9uIF9ub3JtYWxpemVJUHY0KGhvc3Q6c3RyaW5nLCBwcm90b2NvbDpVUklSZWdFeHBzKTpzdHJpbmcge1xuXHRjb25zdCBtYXRjaGVzID0gaG9zdC5tYXRjaChwcm90b2NvbC5JUFY0QUREUkVTUykgfHwgW107XG5cdGNvbnN0IFssIGFkZHJlc3NdID0gbWF0Y2hlcztcblx0XG5cdGlmIChhZGRyZXNzKSB7XG5cdFx0cmV0dXJuIGFkZHJlc3Muc3BsaXQoXCIuXCIpLm1hcChfc3RyaXBMZWFkaW5nWmVyb3MpLmpvaW4oXCIuXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBob3N0O1xuXHR9XG59XG5cbmZ1bmN0aW9uIF9ub3JtYWxpemVJUHY2KGhvc3Q6c3RyaW5nLCBwcm90b2NvbDpVUklSZWdFeHBzKTpzdHJpbmcge1xuXHRjb25zdCBtYXRjaGVzID0gaG9zdC5tYXRjaChwcm90b2NvbC5JUFY2QUREUkVTUykgfHwgW107XG5cdGNvbnN0IFssIGFkZHJlc3MsIHpvbmVdID0gbWF0Y2hlcztcblxuXHRpZiAoYWRkcmVzcykge1xuXHRcdGNvbnN0IFtsYXN0LCBmaXJzdF0gPSBhZGRyZXNzLnRvTG93ZXJDYXNlKCkuc3BsaXQoJzo6JykucmV2ZXJzZSgpO1xuXHRcdGNvbnN0IGZpcnN0RmllbGRzID0gZmlyc3QgPyBmaXJzdC5zcGxpdChcIjpcIikubWFwKF9zdHJpcExlYWRpbmdaZXJvcykgOiBbXTtcblx0XHRjb25zdCBsYXN0RmllbGRzID0gbGFzdC5zcGxpdChcIjpcIikubWFwKF9zdHJpcExlYWRpbmdaZXJvcyk7XG5cdFx0Y29uc3QgaXNMYXN0RmllbGRJUHY0QWRkcmVzcyA9IHByb3RvY29sLklQVjRBRERSRVNTLnRlc3QobGFzdEZpZWxkc1tsYXN0RmllbGRzLmxlbmd0aCAtIDFdKTtcblx0XHRjb25zdCBmaWVsZENvdW50ID0gaXNMYXN0RmllbGRJUHY0QWRkcmVzcyA/IDcgOiA4O1xuXHRcdGNvbnN0IGxhc3RGaWVsZHNTdGFydCA9IGxhc3RGaWVsZHMubGVuZ3RoIC0gZmllbGRDb3VudDtcblx0XHRjb25zdCBmaWVsZHMgPSBBcnJheTxzdHJpbmc+KGZpZWxkQ291bnQpO1xuXG5cdFx0Zm9yIChsZXQgeCA9IDA7IHggPCBmaWVsZENvdW50OyArK3gpIHtcblx0XHRcdGZpZWxkc1t4XSA9IGZpcnN0RmllbGRzW3hdIHx8IGxhc3RGaWVsZHNbbGFzdEZpZWxkc1N0YXJ0ICsgeF0gfHwgJyc7XG5cdFx0fVxuXG5cdFx0aWYgKGlzTGFzdEZpZWxkSVB2NEFkZHJlc3MpIHtcblx0XHRcdGZpZWxkc1tmaWVsZENvdW50IC0gMV0gPSBfbm9ybWFsaXplSVB2NChmaWVsZHNbZmllbGRDb3VudCAtIDFdLCBwcm90b2NvbCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYWxsWmVyb0ZpZWxkcyA9IGZpZWxkcy5yZWR1Y2U8QXJyYXk8e2luZGV4Om51bWJlcixsZW5ndGg6bnVtYmVyfT4+KChhY2MsIGZpZWxkLCBpbmRleCkgPT4ge1xuXHRcdFx0aWYgKCFmaWVsZCB8fCBmaWVsZCA9PT0gXCIwXCIpIHtcblx0XHRcdFx0Y29uc3QgbGFzdExvbmdlc3QgPSBhY2NbYWNjLmxlbmd0aCAtIDFdO1xuXHRcdFx0XHRpZiAobGFzdExvbmdlc3QgJiYgbGFzdExvbmdlc3QuaW5kZXggKyBsYXN0TG9uZ2VzdC5sZW5ndGggPT09IGluZGV4KSB7XG5cdFx0XHRcdFx0bGFzdExvbmdlc3QubGVuZ3RoKys7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YWNjLnB1c2goeyBpbmRleCwgbGVuZ3RoIDogMSB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFjYztcblx0XHR9LCBbXSk7XG5cblx0XHRjb25zdCBsb25nZXN0WmVyb0ZpZWxkcyA9IGFsbFplcm9GaWVsZHMuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aClbMF07XG5cblx0XHRsZXQgbmV3SG9zdDpzdHJpbmc7XG5cdFx0aWYgKGxvbmdlc3RaZXJvRmllbGRzICYmIGxvbmdlc3RaZXJvRmllbGRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGNvbnN0IG5ld0ZpcnN0ID0gZmllbGRzLnNsaWNlKDAsIGxvbmdlc3RaZXJvRmllbGRzLmluZGV4KSA7XG5cdFx0XHRjb25zdCBuZXdMYXN0ID0gZmllbGRzLnNsaWNlKGxvbmdlc3RaZXJvRmllbGRzLmluZGV4ICsgbG9uZ2VzdFplcm9GaWVsZHMubGVuZ3RoKTtcblx0XHRcdG5ld0hvc3QgPSBuZXdGaXJzdC5qb2luKFwiOlwiKSArIFwiOjpcIiArIG5ld0xhc3Quam9pbihcIjpcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5ld0hvc3QgPSBmaWVsZHMuam9pbihcIjpcIik7XG5cdFx0fVxuXG5cdFx0aWYgKHpvbmUpIHtcblx0XHRcdG5ld0hvc3QgKz0gXCIlXCIgKyB6b25lO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXdIb3N0O1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBob3N0O1xuXHR9XG59XG5cbmNvbnN0IFVSSV9QQVJTRSA9IC9eKD86KFteOlxcLz8jXSspOik/KD86XFwvXFwvKCg/OihbXlxcLz8jQF0qKUApPyhcXFtbXlxcLz8jXFxdXStcXF18W15cXC8/IzpdKikoPzpcXDooXFxkKikpPykpPyhbXj8jXSopKD86XFw/KFteI10qKSk/KD86IygoPzoufFxcbnxcXHIpKikpPy9pO1xuY29uc3QgTk9fTUFUQ0hfSVNfVU5ERUZJTkVEID0gKDxSZWdFeHBNYXRjaEFycmF5PihcIlwiKS5tYXRjaCgvKCl7MH0vKSlbMV0gPT09IHVuZGVmaW5lZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHVyaVN0cmluZzpzdHJpbmcsIG9wdGlvbnM6VVJJT3B0aW9ucyA9IHt9KTpVUklDb21wb25lbnRzIHtcblx0Y29uc3QgY29tcG9uZW50czpVUklDb21wb25lbnRzID0ge307XG5cdGNvbnN0IHByb3RvY29sID0gKG9wdGlvbnMuaXJpICE9PSBmYWxzZSA/IElSSV9QUk9UT0NPTCA6IFVSSV9QUk9UT0NPTCk7XG5cblx0aWYgKG9wdGlvbnMucmVmZXJlbmNlID09PSBcInN1ZmZpeFwiKSB1cmlTdHJpbmcgPSAob3B0aW9ucy5zY2hlbWUgPyBvcHRpb25zLnNjaGVtZSArIFwiOlwiIDogXCJcIikgKyBcIi8vXCIgKyB1cmlTdHJpbmc7XG5cblx0Y29uc3QgbWF0Y2hlcyA9IHVyaVN0cmluZy5tYXRjaChVUklfUEFSU0UpO1xuXG5cdGlmIChtYXRjaGVzKSB7XG5cdFx0aWYgKE5PX01BVENIX0lTX1VOREVGSU5FRCkge1xuXHRcdFx0Ly9zdG9yZSBlYWNoIGNvbXBvbmVudFxuXHRcdFx0Y29tcG9uZW50cy5zY2hlbWUgPSBtYXRjaGVzWzFdO1xuXHRcdFx0Y29tcG9uZW50cy51c2VyaW5mbyA9IG1hdGNoZXNbM107XG5cdFx0XHRjb21wb25lbnRzLmhvc3QgPSBtYXRjaGVzWzRdO1xuXHRcdFx0Y29tcG9uZW50cy5wb3J0ID0gcGFyc2VJbnQobWF0Y2hlc1s1XSwgMTApO1xuXHRcdFx0Y29tcG9uZW50cy5wYXRoID0gbWF0Y2hlc1s2XSB8fCBcIlwiO1xuXHRcdFx0Y29tcG9uZW50cy5xdWVyeSA9IG1hdGNoZXNbN107XG5cdFx0XHRjb21wb25lbnRzLmZyYWdtZW50ID0gbWF0Y2hlc1s4XTtcblxuXHRcdFx0Ly9maXggcG9ydCBudW1iZXJcblx0XHRcdGlmIChpc05hTihjb21wb25lbnRzLnBvcnQpKSB7XG5cdFx0XHRcdGNvbXBvbmVudHMucG9ydCA9IG1hdGNoZXNbNV07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHsgIC8vSUUgRklYIGZvciBpbXByb3BlciBSZWdFeHAgbWF0Y2hpbmdcblx0XHRcdC8vc3RvcmUgZWFjaCBjb21wb25lbnRcblx0XHRcdGNvbXBvbmVudHMuc2NoZW1lID0gbWF0Y2hlc1sxXSB8fCB1bmRlZmluZWQ7XG5cdFx0XHRjb21wb25lbnRzLnVzZXJpbmZvID0gKHVyaVN0cmluZy5pbmRleE9mKFwiQFwiKSAhPT0gLTEgPyBtYXRjaGVzWzNdIDogdW5kZWZpbmVkKTtcblx0XHRcdGNvbXBvbmVudHMuaG9zdCA9ICh1cmlTdHJpbmcuaW5kZXhPZihcIi8vXCIpICE9PSAtMSA/IG1hdGNoZXNbNF0gOiB1bmRlZmluZWQpO1xuXHRcdFx0Y29tcG9uZW50cy5wb3J0ID0gcGFyc2VJbnQobWF0Y2hlc1s1XSwgMTApO1xuXHRcdFx0Y29tcG9uZW50cy5wYXRoID0gbWF0Y2hlc1s2XSB8fCBcIlwiO1xuXHRcdFx0Y29tcG9uZW50cy5xdWVyeSA9ICh1cmlTdHJpbmcuaW5kZXhPZihcIj9cIikgIT09IC0xID8gbWF0Y2hlc1s3XSA6IHVuZGVmaW5lZCk7XG5cdFx0XHRjb21wb25lbnRzLmZyYWdtZW50ID0gKHVyaVN0cmluZy5pbmRleE9mKFwiI1wiKSAhPT0gLTEgPyBtYXRjaGVzWzhdIDogdW5kZWZpbmVkKTtcblxuXHRcdFx0Ly9maXggcG9ydCBudW1iZXJcblx0XHRcdGlmIChpc05hTihjb21wb25lbnRzLnBvcnQpKSB7XG5cdFx0XHRcdGNvbXBvbmVudHMucG9ydCA9ICh1cmlTdHJpbmcubWF0Y2goL1xcL1xcLyg/Oi58XFxuKSpcXDooPzpcXC98XFw/fFxcI3wkKS8pID8gbWF0Y2hlc1s0XSA6IHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGNvbXBvbmVudHMuaG9zdCkge1xuXHRcdFx0Ly9ub3JtYWxpemUgSVAgaG9zdHNcblx0XHRcdGNvbXBvbmVudHMuaG9zdCA9IF9ub3JtYWxpemVJUHY2KF9ub3JtYWxpemVJUHY0KGNvbXBvbmVudHMuaG9zdCwgcHJvdG9jb2wpLCBwcm90b2NvbCk7XG5cdFx0fVxuXG5cdFx0Ly9kZXRlcm1pbmUgcmVmZXJlbmNlIHR5cGVcblx0XHRpZiAoY29tcG9uZW50cy5zY2hlbWUgPT09IHVuZGVmaW5lZCAmJiBjb21wb25lbnRzLnVzZXJpbmZvID09PSB1bmRlZmluZWQgJiYgY29tcG9uZW50cy5ob3N0ID09PSB1bmRlZmluZWQgJiYgY29tcG9uZW50cy5wb3J0ID09PSB1bmRlZmluZWQgJiYgIWNvbXBvbmVudHMucGF0aCAmJiBjb21wb25lbnRzLnF1ZXJ5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbXBvbmVudHMucmVmZXJlbmNlID0gXCJzYW1lLWRvY3VtZW50XCI7XG5cdFx0fSBlbHNlIGlmIChjb21wb25lbnRzLnNjaGVtZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb21wb25lbnRzLnJlZmVyZW5jZSA9IFwicmVsYXRpdmVcIjtcblx0XHR9IGVsc2UgaWYgKGNvbXBvbmVudHMuZnJhZ21lbnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29tcG9uZW50cy5yZWZlcmVuY2UgPSBcImFic29sdXRlXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbXBvbmVudHMucmVmZXJlbmNlID0gXCJ1cmlcIjtcblx0XHR9XG5cblx0XHQvL2NoZWNrIGZvciByZWZlcmVuY2UgZXJyb3JzXG5cdFx0aWYgKG9wdGlvbnMucmVmZXJlbmNlICYmIG9wdGlvbnMucmVmZXJlbmNlICE9PSBcInN1ZmZpeFwiICYmIG9wdGlvbnMucmVmZXJlbmNlICE9PSBjb21wb25lbnRzLnJlZmVyZW5jZSkge1xuXHRcdFx0Y29tcG9uZW50cy5lcnJvciA9IGNvbXBvbmVudHMuZXJyb3IgfHwgXCJVUkkgaXMgbm90IGEgXCIgKyBvcHRpb25zLnJlZmVyZW5jZSArIFwiIHJlZmVyZW5jZS5cIjtcblx0XHR9XG5cblx0XHQvL2ZpbmQgc2NoZW1lIGhhbmRsZXJcblx0XHRjb25zdCBzY2hlbWVIYW5kbGVyID0gU0NIRU1FU1sob3B0aW9ucy5zY2hlbWUgfHwgY29tcG9uZW50cy5zY2hlbWUgfHwgXCJcIikudG9Mb3dlckNhc2UoKV07XG5cblx0XHQvL2NoZWNrIGlmIHNjaGVtZSBjYW4ndCBoYW5kbGUgSVJJc1xuXHRcdGlmICghb3B0aW9ucy51bmljb2RlU3VwcG9ydCAmJiAoIXNjaGVtZUhhbmRsZXIgfHwgIXNjaGVtZUhhbmRsZXIudW5pY29kZVN1cHBvcnQpKSB7XG5cdFx0XHQvL2lmIGhvc3QgY29tcG9uZW50IGlzIGEgZG9tYWluIG5hbWVcblx0XHRcdGlmIChjb21wb25lbnRzLmhvc3QgJiYgKG9wdGlvbnMuZG9tYWluSG9zdCB8fCAoc2NoZW1lSGFuZGxlciAmJiBzY2hlbWVIYW5kbGVyLmRvbWFpbkhvc3QpKSkge1xuXHRcdFx0XHQvL2NvbnZlcnQgVW5pY29kZSBJRE4gLT4gQVNDSUkgSUROXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29tcG9uZW50cy5ob3N0ID0gcHVueWNvZGUudG9BU0NJSShjb21wb25lbnRzLmhvc3QucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgcGN0RGVjQ2hhcnMpLnRvTG93ZXJDYXNlKCkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0Y29tcG9uZW50cy5lcnJvciA9IGNvbXBvbmVudHMuZXJyb3IgfHwgXCJIb3N0J3MgZG9tYWluIG5hbWUgY2FuIG5vdCBiZSBjb252ZXJ0ZWQgdG8gQVNDSUkgdmlhIHB1bnljb2RlOiBcIiArIGU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vY29udmVydCBJUkkgLT4gVVJJXG5cdFx0XHRfbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcoY29tcG9uZW50cywgVVJJX1BST1RPQ09MKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9ub3JtYWxpemUgZW5jb2RpbmdzXG5cdFx0XHRfbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcoY29tcG9uZW50cywgcHJvdG9jb2wpO1xuXHRcdH1cblxuXHRcdC8vcGVyZm9ybSBzY2hlbWUgc3BlY2lmaWMgcGFyc2luZ1xuXHRcdGlmIChzY2hlbWVIYW5kbGVyICYmIHNjaGVtZUhhbmRsZXIucGFyc2UpIHtcblx0XHRcdHNjaGVtZUhhbmRsZXIucGFyc2UoY29tcG9uZW50cywgb3B0aW9ucyk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiVVJJIGNhbiBub3QgYmUgcGFyc2VkLlwiO1xuXHR9XG5cblx0cmV0dXJuIGNvbXBvbmVudHM7XG59O1xuXG5mdW5jdGlvbiBfcmVjb21wb3NlQXV0aG9yaXR5KGNvbXBvbmVudHM6VVJJQ29tcG9uZW50cywgb3B0aW9uczpVUklPcHRpb25zKTpzdHJpbmd8dW5kZWZpbmVkIHtcblx0Y29uc3QgcHJvdG9jb2wgPSAob3B0aW9ucy5pcmkgIT09IGZhbHNlID8gSVJJX1BST1RPQ09MIDogVVJJX1BST1RPQ09MKTtcblx0Y29uc3QgdXJpVG9rZW5zOkFycmF5PHN0cmluZz4gPSBbXTtcblxuXHRpZiAoY29tcG9uZW50cy51c2VyaW5mbyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dXJpVG9rZW5zLnB1c2goY29tcG9uZW50cy51c2VyaW5mbyk7XG5cdFx0dXJpVG9rZW5zLnB1c2goXCJAXCIpO1xuXHR9XG5cblx0aWYgKGNvbXBvbmVudHMuaG9zdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly9ub3JtYWxpemUgSVAgaG9zdHMsIGFkZCBicmFja2V0cyBhbmQgZXNjYXBlIHpvbmUgc2VwYXJhdG9yIGZvciBJUHY2XG5cdFx0dXJpVG9rZW5zLnB1c2goX25vcm1hbGl6ZUlQdjYoX25vcm1hbGl6ZUlQdjQoU3RyaW5nKGNvbXBvbmVudHMuaG9zdCksIHByb3RvY29sKSwgcHJvdG9jb2wpLnJlcGxhY2UocHJvdG9jb2wuSVBWNkFERFJFU1MsIChfLCAkMSwgJDIpID0+IFwiW1wiICsgJDEgKyAoJDIgPyBcIiUyNVwiICsgJDIgOiBcIlwiKSArIFwiXVwiKSk7XG5cdH1cblxuXHRpZiAodHlwZW9mIGNvbXBvbmVudHMucG9ydCA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgY29tcG9uZW50cy5wb3J0ID09PSBcInN0cmluZ1wiKSB7XG5cdFx0dXJpVG9rZW5zLnB1c2goXCI6XCIpO1xuXHRcdHVyaVRva2Vucy5wdXNoKFN0cmluZyhjb21wb25lbnRzLnBvcnQpKTtcblx0fVxuXG5cdHJldHVybiB1cmlUb2tlbnMubGVuZ3RoID8gdXJpVG9rZW5zLmpvaW4oXCJcIikgOiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBSRFMxID0gL15cXC5cXC4/XFwvLztcbmNvbnN0IFJEUzIgPSAvXlxcL1xcLihcXC98JCkvO1xuY29uc3QgUkRTMyA9IC9eXFwvXFwuXFwuKFxcL3wkKS87XG5jb25zdCBSRFM0ID0gL15cXC5cXC4/JC87XG5jb25zdCBSRFM1ID0gL15cXC8/KD86LnxcXG4pKj8oPz1cXC98JCkvO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRG90U2VnbWVudHMoaW5wdXQ6c3RyaW5nKTpzdHJpbmcge1xuXHRjb25zdCBvdXRwdXQ6QXJyYXk8c3RyaW5nPiA9IFtdO1xuXG5cdHdoaWxlIChpbnB1dC5sZW5ndGgpIHtcblx0XHRpZiAoaW5wdXQubWF0Y2goUkRTMSkpIHtcblx0XHRcdGlucHV0ID0gaW5wdXQucmVwbGFjZShSRFMxLCBcIlwiKTtcblx0XHR9IGVsc2UgaWYgKGlucHV0Lm1hdGNoKFJEUzIpKSB7XG5cdFx0XHRpbnB1dCA9IGlucHV0LnJlcGxhY2UoUkRTMiwgXCIvXCIpO1xuXHRcdH0gZWxzZSBpZiAoaW5wdXQubWF0Y2goUkRTMykpIHtcblx0XHRcdGlucHV0ID0gaW5wdXQucmVwbGFjZShSRFMzLCBcIi9cIik7XG5cdFx0XHRvdXRwdXQucG9wKCk7XG5cdFx0fSBlbHNlIGlmIChpbnB1dCA9PT0gXCIuXCIgfHwgaW5wdXQgPT09IFwiLi5cIikge1xuXHRcdFx0aW5wdXQgPSBcIlwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBpbSA9IGlucHV0Lm1hdGNoKFJEUzUpO1xuXHRcdFx0aWYgKGltKSB7XG5cdFx0XHRcdGNvbnN0IHMgPSBpbVswXTtcblx0XHRcdFx0aW5wdXQgPSBpbnB1dC5zbGljZShzLmxlbmd0aCk7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBkb3Qgc2VnbWVudCBjb25kaXRpb25cIik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG91dHB1dC5qb2luKFwiXCIpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZShjb21wb25lbnRzOlVSSUNvbXBvbmVudHMsIG9wdGlvbnM6VVJJT3B0aW9ucyA9IHt9KTpzdHJpbmcge1xuXHRjb25zdCBwcm90b2NvbCA9IChvcHRpb25zLmlyaSA/IElSSV9QUk9UT0NPTCA6IFVSSV9QUk9UT0NPTCk7XG5cdGNvbnN0IHVyaVRva2VuczpBcnJheTxzdHJpbmc+ID0gW107XG5cblx0Ly9maW5kIHNjaGVtZSBoYW5kbGVyXG5cdGNvbnN0IHNjaGVtZUhhbmRsZXIgPSBTQ0hFTUVTWyhvcHRpb25zLnNjaGVtZSB8fCBjb21wb25lbnRzLnNjaGVtZSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpXTtcblxuXHQvL3BlcmZvcm0gc2NoZW1lIHNwZWNpZmljIHNlcmlhbGl6YXRpb25cblx0aWYgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5zZXJpYWxpemUpIHNjaGVtZUhhbmRsZXIuc2VyaWFsaXplKGNvbXBvbmVudHMsIG9wdGlvbnMpO1xuXG5cdGlmIChjb21wb25lbnRzLmhvc3QpIHtcblx0XHQvL2lmIGhvc3QgY29tcG9uZW50IGlzIGFuIElQdjYgYWRkcmVzc1xuXHRcdGlmIChwcm90b2NvbC5JUFY2QUREUkVTUy50ZXN0KGNvbXBvbmVudHMuaG9zdCkpIHtcblx0XHRcdC8vVE9ETzogbm9ybWFsaXplIElQdjYgYWRkcmVzcyBhcyBwZXIgUkZDIDU5NTJcblx0XHR9XG5cblx0XHQvL2lmIGhvc3QgY29tcG9uZW50IGlzIGEgZG9tYWluIG5hbWVcblx0XHRlbHNlIGlmIChvcHRpb25zLmRvbWFpbkhvc3QgfHwgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5kb21haW5Ib3N0KSkge1xuXHRcdFx0Ly9jb252ZXJ0IElETiB2aWEgcHVueWNvZGVcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbXBvbmVudHMuaG9zdCA9ICghb3B0aW9ucy5pcmkgPyBwdW55Y29kZS50b0FTQ0lJKGNvbXBvbmVudHMuaG9zdC5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBwY3REZWNDaGFycykudG9Mb3dlckNhc2UoKSkgOiBwdW55Y29kZS50b1VuaWNvZGUoY29tcG9uZW50cy5ob3N0KSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiSG9zdCdzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvIFwiICsgKCFvcHRpb25zLmlyaSA/IFwiQVNDSUlcIiA6IFwiVW5pY29kZVwiKSArIFwiIHZpYSBwdW55Y29kZTogXCIgKyBlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vbm9ybWFsaXplIGVuY29kaW5nXG5cdF9ub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyhjb21wb25lbnRzLCBwcm90b2NvbCk7XG5cblx0aWYgKG9wdGlvbnMucmVmZXJlbmNlICE9PSBcInN1ZmZpeFwiICYmIGNvbXBvbmVudHMuc2NoZW1lKSB7XG5cdFx0dXJpVG9rZW5zLnB1c2goY29tcG9uZW50cy5zY2hlbWUpO1xuXHRcdHVyaVRva2Vucy5wdXNoKFwiOlwiKTtcblx0fVxuXG5cdGNvbnN0IGF1dGhvcml0eSA9IF9yZWNvbXBvc2VBdXRob3JpdHkoY29tcG9uZW50cywgb3B0aW9ucyk7XG5cdGlmIChhdXRob3JpdHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChvcHRpb25zLnJlZmVyZW5jZSAhPT0gXCJzdWZmaXhcIikge1xuXHRcdFx0dXJpVG9rZW5zLnB1c2goXCIvL1wiKTtcblx0XHR9XG5cblx0XHR1cmlUb2tlbnMucHVzaChhdXRob3JpdHkpO1xuXG5cdFx0aWYgKGNvbXBvbmVudHMucGF0aCAmJiBjb21wb25lbnRzLnBhdGguY2hhckF0KDApICE9PSBcIi9cIikge1xuXHRcdFx0dXJpVG9rZW5zLnB1c2goXCIvXCIpO1xuXHRcdH1cblx0fVxuXG5cdGlmIChjb21wb25lbnRzLnBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdGxldCBzID0gY29tcG9uZW50cy5wYXRoO1xuXG5cdFx0aWYgKCFvcHRpb25zLmFic29sdXRlUGF0aCAmJiAoIXNjaGVtZUhhbmRsZXIgfHwgIXNjaGVtZUhhbmRsZXIuYWJzb2x1dGVQYXRoKSkge1xuXHRcdFx0cyA9IHJlbW92ZURvdFNlZ21lbnRzKHMpO1xuXHRcdH1cblxuXHRcdGlmIChhdXRob3JpdHkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cyA9IHMucmVwbGFjZSgvXlxcL1xcLy8sIFwiLyUyRlwiKTsgIC8vZG9uJ3QgYWxsb3cgdGhlIHBhdGggdG8gc3RhcnQgd2l0aCBcIi8vXCJcblx0XHR9XG5cblx0XHR1cmlUb2tlbnMucHVzaChzKTtcblx0fVxuXG5cdGlmIChjb21wb25lbnRzLnF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcblx0XHR1cmlUb2tlbnMucHVzaChcIj9cIik7XG5cdFx0dXJpVG9rZW5zLnB1c2goY29tcG9uZW50cy5xdWVyeSk7XG5cdH1cblxuXHRpZiAoY29tcG9uZW50cy5mcmFnbWVudCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dXJpVG9rZW5zLnB1c2goXCIjXCIpO1xuXHRcdHVyaVRva2Vucy5wdXNoKGNvbXBvbmVudHMuZnJhZ21lbnQpO1xuXHR9XG5cblx0cmV0dXJuIHVyaVRva2Vucy5qb2luKFwiXCIpOyAgLy9tZXJnZSB0b2tlbnMgaW50byBhIHN0cmluZ1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVDb21wb25lbnRzKGJhc2U6VVJJQ29tcG9uZW50cywgcmVsYXRpdmU6VVJJQ29tcG9uZW50cywgb3B0aW9uczpVUklPcHRpb25zID0ge30sIHNraXBOb3JtYWxpemF0aW9uPzpib29sZWFuKTpVUklDb21wb25lbnRzIHtcblx0Y29uc3QgdGFyZ2V0OlVSSUNvbXBvbmVudHMgPSB7fTtcblxuXHRpZiAoIXNraXBOb3JtYWxpemF0aW9uKSB7XG5cdFx0YmFzZSA9IHBhcnNlKHNlcmlhbGl6ZShiYXNlLCBvcHRpb25zKSwgb3B0aW9ucyk7ICAvL25vcm1hbGl6ZSBiYXNlIGNvbXBvbmVudHNcblx0XHRyZWxhdGl2ZSA9IHBhcnNlKHNlcmlhbGl6ZShyZWxhdGl2ZSwgb3B0aW9ucyksIG9wdGlvbnMpOyAgLy9ub3JtYWxpemUgcmVsYXRpdmUgY29tcG9uZW50c1xuXHR9XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdGlmICghb3B0aW9ucy50b2xlcmFudCAmJiByZWxhdGl2ZS5zY2hlbWUpIHtcblx0XHR0YXJnZXQuc2NoZW1lID0gcmVsYXRpdmUuc2NoZW1lO1xuXHRcdC8vdGFyZ2V0LmF1dGhvcml0eSA9IHJlbGF0aXZlLmF1dGhvcml0eTtcblx0XHR0YXJnZXQudXNlcmluZm8gPSByZWxhdGl2ZS51c2VyaW5mbztcblx0XHR0YXJnZXQuaG9zdCA9IHJlbGF0aXZlLmhvc3Q7XG5cdFx0dGFyZ2V0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuXHRcdHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCB8fCBcIlwiKTtcblx0XHR0YXJnZXQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcblx0fSBlbHNlIHtcblx0XHRpZiAocmVsYXRpdmUudXNlcmluZm8gIT09IHVuZGVmaW5lZCB8fCByZWxhdGl2ZS5ob3N0ICE9PSB1bmRlZmluZWQgfHwgcmVsYXRpdmUucG9ydCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvL3RhcmdldC5hdXRob3JpdHkgPSByZWxhdGl2ZS5hdXRob3JpdHk7XG5cdFx0XHR0YXJnZXQudXNlcmluZm8gPSByZWxhdGl2ZS51c2VyaW5mbztcblx0XHRcdHRhcmdldC5ob3N0ID0gcmVsYXRpdmUuaG9zdDtcblx0XHRcdHRhcmdldC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcblx0XHRcdHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCB8fCBcIlwiKTtcblx0XHRcdHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIXJlbGF0aXZlLnBhdGgpIHtcblx0XHRcdFx0dGFyZ2V0LnBhdGggPSBiYXNlLnBhdGg7XG5cdFx0XHRcdGlmIChyZWxhdGl2ZS5xdWVyeSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGFyZ2V0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGFyZ2V0LnF1ZXJ5ID0gYmFzZS5xdWVyeTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKHJlbGF0aXZlLnBhdGguY2hhckF0KDApID09PSBcIi9cIikge1xuXHRcdFx0XHRcdHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKChiYXNlLnVzZXJpbmZvICE9PSB1bmRlZmluZWQgfHwgYmFzZS5ob3N0ICE9PSB1bmRlZmluZWQgfHwgYmFzZS5wb3J0ICE9PSB1bmRlZmluZWQpICYmICFiYXNlLnBhdGgpIHtcblx0XHRcdFx0XHRcdHRhcmdldC5wYXRoID0gXCIvXCIgKyByZWxhdGl2ZS5wYXRoO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoIWJhc2UucGF0aCkge1xuXHRcdFx0XHRcdFx0dGFyZ2V0LnBhdGggPSByZWxhdGl2ZS5wYXRoO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0YXJnZXQucGF0aCA9IGJhc2UucGF0aC5zbGljZSgwLCBiYXNlLnBhdGgubGFzdEluZGV4T2YoXCIvXCIpICsgMSkgKyByZWxhdGl2ZS5wYXRoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0YXJnZXQucGF0aCA9IHJlbW92ZURvdFNlZ21lbnRzKHRhcmdldC5wYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0YXJnZXQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcblx0XHRcdH1cblx0XHRcdC8vdGFyZ2V0LmF1dGhvcml0eSA9IGJhc2UuYXV0aG9yaXR5O1xuXHRcdFx0dGFyZ2V0LnVzZXJpbmZvID0gYmFzZS51c2VyaW5mbztcblx0XHRcdHRhcmdldC5ob3N0ID0gYmFzZS5ob3N0O1xuXHRcdFx0dGFyZ2V0LnBvcnQgPSBiYXNlLnBvcnQ7XG5cdFx0fVxuXHRcdHRhcmdldC5zY2hlbWUgPSBiYXNlLnNjaGVtZTtcblx0fVxuXG5cdHRhcmdldC5mcmFnbWVudCA9IHJlbGF0aXZlLmZyYWdtZW50O1xuXG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZShiYXNlVVJJOnN0cmluZywgcmVsYXRpdmVVUkk6c3RyaW5nLCBvcHRpb25zPzpVUklPcHRpb25zKTpzdHJpbmcge1xuXHRjb25zdCBzY2hlbWVsZXNzT3B0aW9ucyA9IGFzc2lnbih7IHNjaGVtZSA6ICdudWxsJyB9LCBvcHRpb25zKTtcblx0cmV0dXJuIHNlcmlhbGl6ZShyZXNvbHZlQ29tcG9uZW50cyhwYXJzZShiYXNlVVJJLCBzY2hlbWVsZXNzT3B0aW9ucyksIHBhcnNlKHJlbGF0aXZlVVJJLCBzY2hlbWVsZXNzT3B0aW9ucyksIHNjaGVtZWxlc3NPcHRpb25zLCB0cnVlKSwgc2NoZW1lbGVzc09wdGlvbnMpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZSh1cmk6c3RyaW5nLCBvcHRpb25zPzpVUklPcHRpb25zKTpzdHJpbmc7XG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKHVyaTpVUklDb21wb25lbnRzLCBvcHRpb25zPzpVUklPcHRpb25zKTpVUklDb21wb25lbnRzO1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZSh1cmk6YW55LCBvcHRpb25zPzpVUklPcHRpb25zKTphbnkge1xuXHRpZiAodHlwZW9mIHVyaSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHVyaSA9IHNlcmlhbGl6ZShwYXJzZSh1cmksIG9wdGlvbnMpLCBvcHRpb25zKTtcblx0fSBlbHNlIGlmICh0eXBlT2YodXJpKSA9PT0gXCJvYmplY3RcIikge1xuXHRcdHVyaSA9IHBhcnNlKHNlcmlhbGl6ZSg8VVJJQ29tcG9uZW50cz51cmksIG9wdGlvbnMpLCBvcHRpb25zKTtcblx0fVxuXG5cdHJldHVybiB1cmk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWwodXJpQTpzdHJpbmcsIHVyaUI6c3RyaW5nLCBvcHRpb25zPzogVVJJT3B0aW9ucyk6Ym9vbGVhbjtcbmV4cG9ydCBmdW5jdGlvbiBlcXVhbCh1cmlBOlVSSUNvbXBvbmVudHMsIHVyaUI6VVJJQ29tcG9uZW50cywgb3B0aW9ucz86VVJJT3B0aW9ucyk6Ym9vbGVhbjtcbmV4cG9ydCBmdW5jdGlvbiBlcXVhbCh1cmlBOmFueSwgdXJpQjphbnksIG9wdGlvbnM/OlVSSU9wdGlvbnMpOmJvb2xlYW4ge1xuXHRpZiAodHlwZW9mIHVyaUEgPT09IFwic3RyaW5nXCIpIHtcblx0XHR1cmlBID0gc2VyaWFsaXplKHBhcnNlKHVyaUEsIG9wdGlvbnMpLCBvcHRpb25zKTtcblx0fSBlbHNlIGlmICh0eXBlT2YodXJpQSkgPT09IFwib2JqZWN0XCIpIHtcblx0XHR1cmlBID0gc2VyaWFsaXplKDxVUklDb21wb25lbnRzPnVyaUEsIG9wdGlvbnMpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiB1cmlCID09PSBcInN0cmluZ1wiKSB7XG5cdFx0dXJpQiA9IHNlcmlhbGl6ZShwYXJzZSh1cmlCLCBvcHRpb25zKSwgb3B0aW9ucyk7XG5cdH0gZWxzZSBpZiAodHlwZU9mKHVyaUIpID09PSBcIm9iamVjdFwiKSB7XG5cdFx0dXJpQiA9IHNlcmlhbGl6ZSg8VVJJQ29tcG9uZW50cz51cmlCLCBvcHRpb25zKTtcblx0fVxuXG5cdHJldHVybiB1cmlBID09PSB1cmlCO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUNvbXBvbmVudChzdHI6c3RyaW5nLCBvcHRpb25zPzpVUklPcHRpb25zKTpzdHJpbmcge1xuXHRyZXR1cm4gc3RyICYmIHN0ci50b1N0cmluZygpLnJlcGxhY2UoKCFvcHRpb25zIHx8ICFvcHRpb25zLmlyaSA/IFVSSV9QUk9UT0NPTC5FU0NBUEUgOiBJUklfUFJPVE9DT0wuRVNDQVBFKSwgcGN0RW5jQ2hhcik7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdW5lc2NhcGVDb21wb25lbnQoc3RyOnN0cmluZywgb3B0aW9ucz86VVJJT3B0aW9ucyk6c3RyaW5nIHtcblx0cmV0dXJuIHN0ciAmJiBzdHIudG9TdHJpbmcoKS5yZXBsYWNlKCghb3B0aW9ucyB8fCAhb3B0aW9ucy5pcmkgPyBVUklfUFJPVE9DT0wuUENUX0VOQ09ERUQgOiBJUklfUFJPVE9DT0wuUENUX0VOQ09ERUQpLCBwY3REZWNDaGFycyk7XG59O1xuIiwiaW1wb3J0IHsgVVJJU2NoZW1lSGFuZGxlciwgVVJJQ29tcG9uZW50cywgVVJJT3B0aW9ucyB9IGZyb20gXCIuLi91cmlcIjtcblxuY29uc3QgaGFuZGxlcjpVUklTY2hlbWVIYW5kbGVyID0ge1xuXHRzY2hlbWUgOiBcImh0dHBcIixcblxuXHRkb21haW5Ib3N0IDogdHJ1ZSxcblxuXHRwYXJzZSA6IGZ1bmN0aW9uIChjb21wb25lbnRzOlVSSUNvbXBvbmVudHMsIG9wdGlvbnM6VVJJT3B0aW9ucyk6VVJJQ29tcG9uZW50cyB7XG5cdFx0Ly9yZXBvcnQgbWlzc2luZyBob3N0XG5cdFx0aWYgKCFjb21wb25lbnRzLmhvc3QpIHtcblx0XHRcdGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiSFRUUCBVUklzIG11c3QgaGF2ZSBhIGhvc3QuXCI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbXBvbmVudHM7XG5cdH0sXG5cblx0c2VyaWFsaXplIDogZnVuY3Rpb24gKGNvbXBvbmVudHM6VVJJQ29tcG9uZW50cywgb3B0aW9uczpVUklPcHRpb25zKTpVUklDb21wb25lbnRzIHtcblx0XHRjb25zdCBzZWN1cmUgPSBTdHJpbmcoY29tcG9uZW50cy5zY2hlbWUpLnRvTG93ZXJDYXNlKCkgPT09IFwiaHR0cHNcIjtcblxuXHRcdC8vbm9ybWFsaXplIHRoZSBkZWZhdWx0IHBvcnRcblx0XHRpZiAoY29tcG9uZW50cy5wb3J0ID09PSAoc2VjdXJlID8gNDQzIDogODApIHx8IGNvbXBvbmVudHMucG9ydCA9PT0gXCJcIikge1xuXHRcdFx0Y29tcG9uZW50cy5wb3J0ID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRcblx0XHQvL25vcm1hbGl6ZSB0aGUgZW1wdHkgcGF0aFxuXHRcdGlmICghY29tcG9uZW50cy5wYXRoKSB7XG5cdFx0XHRjb21wb25lbnRzLnBhdGggPSBcIi9cIjtcblx0XHR9XG5cblx0XHQvL05PVEU6IFdlIGRvIG5vdCBwYXJzZSBxdWVyeSBzdHJpbmdzIGZvciBIVFRQIFVSSXNcblx0XHQvL2FzIFdXVyBGb3JtIFVybCBFbmNvZGVkIHF1ZXJ5IHN0cmluZ3MgYXJlIHBhcnQgb2YgdGhlIEhUTUw0KyBzcGVjLFxuXHRcdC8vYW5kIG5vdCB0aGUgSFRUUCBzcGVjLlxuXG5cdFx0cmV0dXJuIGNvbXBvbmVudHM7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhhbmRsZXI7IiwiaW1wb3J0IHsgVVJJU2NoZW1lSGFuZGxlciwgVVJJQ29tcG9uZW50cywgVVJJT3B0aW9ucyB9IGZyb20gXCIuLi91cmlcIjtcbmltcG9ydCBodHRwIGZyb20gXCIuL2h0dHBcIjtcblxuY29uc3QgaGFuZGxlcjpVUklTY2hlbWVIYW5kbGVyID0ge1xuXHRzY2hlbWUgOiBcImh0dHBzXCIsXG5cdGRvbWFpbkhvc3QgOiBodHRwLmRvbWFpbkhvc3QsXG5cdHBhcnNlIDogaHR0cC5wYXJzZSxcblx0c2VyaWFsaXplIDogaHR0cC5zZXJpYWxpemVcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFuZGxlcjsiLCJpbXBvcnQgeyBVUklTY2hlbWVIYW5kbGVyLCBVUklDb21wb25lbnRzLCBVUklPcHRpb25zIH0gZnJvbSBcIi4uL3VyaVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdTQ29tcG9uZW50cyBleHRlbmRzIFVSSUNvbXBvbmVudHMge1xuXHRyZXNvdXJjZU5hbWU/OiBzdHJpbmc7XG5cdHNlY3VyZT86IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGlzU2VjdXJlKHdzQ29tcG9uZW50czpXU0NvbXBvbmVudHMpOmJvb2xlYW4ge1xuXHRyZXR1cm4gdHlwZW9mIHdzQ29tcG9uZW50cy5zZWN1cmUgPT09ICdib29sZWFuJyA/IHdzQ29tcG9uZW50cy5zZWN1cmUgOiBTdHJpbmcod3NDb21wb25lbnRzLnNjaGVtZSkudG9Mb3dlckNhc2UoKSA9PT0gXCJ3c3NcIjtcbn1cblxuLy9SRkMgNjQ1NVxuY29uc3QgaGFuZGxlcjpVUklTY2hlbWVIYW5kbGVyID0ge1xuXHRzY2hlbWUgOiBcIndzXCIsXG5cblx0ZG9tYWluSG9zdCA6IHRydWUsXG5cblx0cGFyc2UgOiBmdW5jdGlvbiAoY29tcG9uZW50czpVUklDb21wb25lbnRzLCBvcHRpb25zOlVSSU9wdGlvbnMpOldTQ29tcG9uZW50cyB7XG5cdFx0Y29uc3Qgd3NDb21wb25lbnRzID0gY29tcG9uZW50cyBhcyBXU0NvbXBvbmVudHM7XG5cblx0XHQvL2luZGljYXRlIGlmIHRoZSBzZWN1cmUgZmxhZyBpcyBzZXRcblx0XHR3c0NvbXBvbmVudHMuc2VjdXJlID0gaXNTZWN1cmUod3NDb21wb25lbnRzKTtcblxuXHRcdC8vY29uc3RydWN0IHJlc291Y2UgbmFtZVxuXHRcdHdzQ29tcG9uZW50cy5yZXNvdXJjZU5hbWUgPSAod3NDb21wb25lbnRzLnBhdGggfHwgJy8nKSArICh3c0NvbXBvbmVudHMucXVlcnkgPyAnPycgKyB3c0NvbXBvbmVudHMucXVlcnkgOiAnJyk7XG5cdFx0d3NDb21wb25lbnRzLnBhdGggPSB1bmRlZmluZWQ7XG5cdFx0d3NDb21wb25lbnRzLnF1ZXJ5ID0gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIHdzQ29tcG9uZW50cztcblx0fSxcblxuXHRzZXJpYWxpemUgOiBmdW5jdGlvbiAod3NDb21wb25lbnRzOldTQ29tcG9uZW50cywgb3B0aW9uczpVUklPcHRpb25zKTpVUklDb21wb25lbnRzIHtcblx0XHQvL25vcm1hbGl6ZSB0aGUgZGVmYXVsdCBwb3J0XG5cdFx0aWYgKHdzQ29tcG9uZW50cy5wb3J0ID09PSAoaXNTZWN1cmUod3NDb21wb25lbnRzKSA/IDQ0MyA6IDgwKSB8fCB3c0NvbXBvbmVudHMucG9ydCA9PT0gXCJcIikge1xuXHRcdFx0d3NDb21wb25lbnRzLnBvcnQgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly9lbnN1cmUgc2NoZW1lIG1hdGNoZXMgc2VjdXJlIGZsYWdcblx0XHRpZiAodHlwZW9mIHdzQ29tcG9uZW50cy5zZWN1cmUgPT09ICdib29sZWFuJykge1xuXHRcdFx0d3NDb21wb25lbnRzLnNjaGVtZSA9ICh3c0NvbXBvbmVudHMuc2VjdXJlID8gJ3dzcycgOiAnd3MnKTtcblx0XHRcdHdzQ29tcG9uZW50cy5zZWN1cmUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly9yZWNvbnN0cnVjdCBwYXRoIGZyb20gcmVzb3VyY2UgbmFtZVxuXHRcdGlmICh3c0NvbXBvbmVudHMucmVzb3VyY2VOYW1lKSB7XG5cdFx0XHRjb25zdCBbcGF0aCwgcXVlcnldID0gd3NDb21wb25lbnRzLnJlc291cmNlTmFtZS5zcGxpdCgnPycpO1xuXHRcdFx0d3NDb21wb25lbnRzLnBhdGggPSAocGF0aCAmJiBwYXRoICE9PSAnLycgPyBwYXRoIDogdW5kZWZpbmVkKTtcblx0XHRcdHdzQ29tcG9uZW50cy5xdWVyeSA9IHF1ZXJ5O1xuXHRcdFx0d3NDb21wb25lbnRzLnJlc291cmNlTmFtZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvL2ZvcmJpZCBmcmFnbWVudCBjb21wb25lbnRcblx0XHR3c0NvbXBvbmVudHMuZnJhZ21lbnQgPSB1bmRlZmluZWQ7XG5cblx0XHRyZXR1cm4gd3NDb21wb25lbnRzO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBoYW5kbGVyOyIsImltcG9ydCB7IFVSSVNjaGVtZUhhbmRsZXIsIFVSSUNvbXBvbmVudHMsIFVSSU9wdGlvbnMgfSBmcm9tIFwiLi4vdXJpXCI7XG5pbXBvcnQgd3MgZnJvbSBcIi4vd3NcIjtcblxuY29uc3QgaGFuZGxlcjpVUklTY2hlbWVIYW5kbGVyID0ge1xuXHRzY2hlbWUgOiBcIndzc1wiLFxuXHRkb21haW5Ib3N0IDogd3MuZG9tYWluSG9zdCxcblx0cGFyc2UgOiB3cy5wYXJzZSxcblx0c2VyaWFsaXplIDogd3Muc2VyaWFsaXplXG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhbmRsZXI7IiwiaW1wb3J0IHsgVVJJU2NoZW1lSGFuZGxlciwgVVJJQ29tcG9uZW50cywgVVJJT3B0aW9ucyB9IGZyb20gXCIuLi91cmlcIjtcbmltcG9ydCB7IHBjdEVuY0NoYXIsIHBjdERlY0NoYXJzLCB1bmVzY2FwZUNvbXBvbmVudCB9IGZyb20gXCIuLi91cmlcIjtcbmltcG9ydCBwdW55Y29kZSBmcm9tIFwicHVueWNvZGVcIjtcbmltcG9ydCB7IG1lcmdlLCBzdWJleHAsIHRvVXBwZXJDYXNlLCB0b0FycmF5IH0gZnJvbSBcIi4uL3V0aWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBNYWlsdG9IZWFkZXJzIHtcblx0W2hmbmFtZTpzdHJpbmddOnN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1haWx0b0NvbXBvbmVudHMgZXh0ZW5kcyBVUklDb21wb25lbnRzIHtcblx0dG86QXJyYXk8c3RyaW5nPixcblx0aGVhZGVycz86TWFpbHRvSGVhZGVycyxcblx0c3ViamVjdD86c3RyaW5nLFxuXHRib2R5PzpzdHJpbmdcbn1cblxuY29uc3QgTzpNYWlsdG9IZWFkZXJzID0ge307XG5jb25zdCBpc0lSSSA9IHRydWU7XG5cbi8vUkZDIDM5ODZcbmNvbnN0IFVOUkVTRVJWRUQkJCA9IFwiW0EtWmEtejAtOVxcXFwtXFxcXC5cXFxcX1xcXFx+XCIgKyAoaXNJUkkgPyBcIlxcXFx4QTAtXFxcXHUyMDBEXFxcXHUyMDEwLVxcXFx1MjAyOVxcXFx1MjAyRi1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZFRlwiIDogXCJcIikgKyBcIl1cIjtcbmNvbnN0IEhFWERJRyQkID0gXCJbMC05QS1GYS1mXVwiOyAgLy9jYXNlLWluc2Vuc2l0aXZlXG5jb25zdCBQQ1RfRU5DT0RFRCQgPSBzdWJleHAoc3ViZXhwKFwiJVtFRmVmXVwiICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIlWzg5QS1GYS1mXVwiICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSk7ICAvL2V4cGFuZGVkXG5cbi8vUkZDIDUzMjIsIGV4Y2VwdCB0aGVzZSBzeW1ib2xzIGFzIHBlciBSRkMgNjA2ODogQCA6IC8gPyAjIFsgXSAmIDsgPVxuLy9jb25zdCBBVEVYVCQkID0gXCJbQS1aYS16MC05XFxcXCFcXFxcI1xcXFwkXFxcXCVcXFxcJlxcXFwnXFxcXCpcXFxcK1xcXFwtXFxcXC9cXFxcPVxcXFw/XFxcXF5cXFxcX1xcXFxgXFxcXHtcXFxcfFxcXFx9XFxcXH5dXCI7XG4vL2NvbnN0IFdTUCQkID0gXCJbXFxcXHgyMFxcXFx4MDldXCI7XG4vL2NvbnN0IE9CU19RVEVYVCQkID0gXCJbXFxcXHgwMS1cXFxceDA4XFxcXHgwQlxcXFx4MENcXFxceDBFLVxcXFx4MUZcXFxceDdGXVwiOyAgLy8oJWQxLTggLyAlZDExLTEyIC8gJWQxNC0zMSAvICVkMTI3KVxuLy9jb25zdCBRVEVYVCQkID0gbWVyZ2UoXCJbXFxcXHgyMVxcXFx4MjMtXFxcXHg1QlxcXFx4NUQtXFxcXHg3RV1cIiwgT0JTX1FURVhUJCQpOyAgLy8lZDMzIC8gJWQzNS05MSAvICVkOTMtMTI2IC8gb2JzLXF0ZXh0XG4vL2NvbnN0IFZDSEFSJCQgPSBcIltcXFxceDIxLVxcXFx4N0VdXCI7XG4vL2NvbnN0IFdTUCQkID0gXCJbXFxcXHgyMFxcXFx4MDldXCI7XG4vL2NvbnN0IE9CU19RUCQgPSBzdWJleHAoXCJcXFxcXFxcXFwiICsgbWVyZ2UoXCJbXFxcXHgwMFxcXFx4MERcXFxceDBBXVwiLCBPQlNfUVRFWFQkJCkpOyAgLy8lZDAgLyBDUiAvIExGIC8gb2JzLXF0ZXh0XG4vL2NvbnN0IEZXUyQgPSBzdWJleHAoc3ViZXhwKFdTUCQkICsgXCIqXCIgKyBcIlxcXFx4MERcXFxceDBBXCIpICsgXCI/XCIgKyBXU1AkJCArIFwiK1wiKTtcbi8vY29uc3QgUVVPVEVEX1BBSVIkID0gc3ViZXhwKHN1YmV4cChcIlxcXFxcXFxcXCIgKyBzdWJleHAoVkNIQVIkJCArIFwifFwiICsgV1NQJCQpKSArIFwifFwiICsgT0JTX1FQJCk7XG4vL2NvbnN0IFFVT1RFRF9TVFJJTkckID0gc3ViZXhwKCdcXFxcXCInICsgc3ViZXhwKEZXUyQgKyBcIj9cIiArIFFDT05URU5UJCkgKyBcIipcIiArIEZXUyQgKyBcIj9cIiArICdcXFxcXCInKTtcbmNvbnN0IEFURVhUJCQgPSBcIltBLVphLXowLTlcXFxcIVxcXFwkXFxcXCVcXFxcJ1xcXFwqXFxcXCtcXFxcLVxcXFxeXFxcXF9cXFxcYFxcXFx7XFxcXHxcXFxcfVxcXFx+XVwiO1xuY29uc3QgUVRFWFQkJCA9IFwiW1xcXFwhXFxcXCRcXFxcJVxcXFwnXFxcXChcXFxcKVxcXFwqXFxcXCtcXFxcLFxcXFwtXFxcXC4wLTlcXFxcPFxcXFw+QS1aXFxcXHg1RS1cXFxceDdFXVwiO1xuY29uc3QgVkNIQVIkJCA9IG1lcmdlKFFURVhUJCQsIFwiW1xcXFxcXFwiXFxcXFxcXFxdXCIpO1xuY29uc3QgRE9UX0FUT01fVEVYVCQgPSBzdWJleHAoQVRFWFQkJCArIFwiK1wiICsgc3ViZXhwKFwiXFxcXC5cIiArIEFURVhUJCQgKyBcIitcIikgKyBcIipcIik7XG5jb25zdCBRVU9URURfUEFJUiQgPSBzdWJleHAoXCJcXFxcXFxcXFwiICsgVkNIQVIkJCk7XG5jb25zdCBRQ09OVEVOVCQgPSBzdWJleHAoUVRFWFQkJCArIFwifFwiICsgUVVPVEVEX1BBSVIkKTtcbmNvbnN0IFFVT1RFRF9TVFJJTkckID0gc3ViZXhwKCdcXFxcXCInICsgUUNPTlRFTlQkICsgXCIqXCIgKyAnXFxcXFwiJyk7XG5cbi8vUkZDIDYwNjhcbmNvbnN0IERURVhUX05PX09CUyQkID0gXCJbXFxcXHgyMS1cXFxceDVBXFxcXHg1RS1cXFxceDdFXVwiOyAgLy8lZDMzLTkwIC8gJWQ5NC0xMjZcbmNvbnN0IFNPTUVfREVMSU1TJCQgPSBcIltcXFxcIVxcXFwkXFxcXCdcXFxcKFxcXFwpXFxcXCpcXFxcK1xcXFwsXFxcXDtcXFxcOlxcXFxAXVwiO1xuY29uc3QgUUNIQVIkID0gc3ViZXhwKFVOUkVTRVJWRUQkJCArIFwifFwiICsgUENUX0VOQ09ERUQkICsgXCJ8XCIgKyBTT01FX0RFTElNUyQkKTtcbmNvbnN0IERPTUFJTiQgPSBzdWJleHAoRE9UX0FUT01fVEVYVCQgKyBcInxcIiArIFwiXFxcXFtcIiArIERURVhUX05PX09CUyQkICsgXCIqXCIgKyBcIlxcXFxdXCIpO1xuY29uc3QgTE9DQUxfUEFSVCQgPSBzdWJleHAoRE9UX0FUT01fVEVYVCQgKyBcInxcIiArIFFVT1RFRF9TVFJJTkckKTtcbmNvbnN0IEFERFJfU1BFQyQgPSBzdWJleHAoTE9DQUxfUEFSVCQgKyBcIlxcXFxAXCIgKyBET01BSU4kKTtcbmNvbnN0IFRPJCA9IHN1YmV4cChBRERSX1NQRUMkICsgc3ViZXhwKFwiXFxcXCxcIiArIEFERFJfU1BFQyQpICsgXCIqXCIpO1xuY29uc3QgSEZOQU1FJCA9IHN1YmV4cChRQ0hBUiQgKyBcIipcIik7XG5jb25zdCBIRlZBTFVFJCA9IEhGTkFNRSQ7XG5jb25zdCBIRklFTEQkID0gc3ViZXhwKEhGTkFNRSQgKyBcIlxcXFw9XCIgKyBIRlZBTFVFJCk7XG5jb25zdCBIRklFTERTMiQgPSBzdWJleHAoSEZJRUxEJCArIHN1YmV4cChcIlxcXFwmXCIgKyBIRklFTEQkKSArIFwiKlwiKTtcbmNvbnN0IEhGSUVMRFMkID0gc3ViZXhwKFwiXFxcXD9cIiArIEhGSUVMRFMyJCk7XG5jb25zdCBNQUlMVE9fVVJJID0gbmV3IFJlZ0V4cChcIl5tYWlsdG9cXFxcOlwiICsgVE8kICsgXCI/XCIgKyBIRklFTERTJCArIFwiPyRcIik7XG5cbmNvbnN0IFVOUkVTRVJWRUQgPSBuZXcgUmVnRXhwKFVOUkVTRVJWRUQkJCwgXCJnXCIpO1xuY29uc3QgUENUX0VOQ09ERUQgPSBuZXcgUmVnRXhwKFBDVF9FTkNPREVEJCwgXCJnXCIpO1xuY29uc3QgTk9UX0xPQ0FMX1BBUlQgPSBuZXcgUmVnRXhwKG1lcmdlKFwiW15dXCIsIEFURVhUJCQsIFwiW1xcXFwuXVwiLCAnW1xcXFxcIl0nLCBWQ0hBUiQkKSwgXCJnXCIpO1xuY29uc3QgTk9UX0RPTUFJTiA9IG5ldyBSZWdFeHAobWVyZ2UoXCJbXl1cIiwgQVRFWFQkJCwgXCJbXFxcXC5dXCIsIFwiW1xcXFxbXVwiLCBEVEVYVF9OT19PQlMkJCwgXCJbXFxcXF1dXCIpLCBcImdcIik7XG5jb25zdCBOT1RfSEZOQU1FID0gbmV3IFJlZ0V4cChtZXJnZShcIlteXVwiLCBVTlJFU0VSVkVEJCQsIFNPTUVfREVMSU1TJCQpLCBcImdcIik7XG5jb25zdCBOT1RfSEZWQUxVRSA9IE5PVF9IRk5BTUU7XG5jb25zdCBUTyA9IG5ldyBSZWdFeHAoXCJeXCIgKyBUTyQgKyBcIiRcIik7XG5jb25zdCBIRklFTERTID0gbmV3IFJlZ0V4cChcIl5cIiArIEhGSUVMRFMyJCArIFwiJFwiKTtcblxuZnVuY3Rpb24gZGVjb2RlVW5yZXNlcnZlZChzdHI6c3RyaW5nKTpzdHJpbmcge1xuXHRjb25zdCBkZWNTdHIgPSBwY3REZWNDaGFycyhzdHIpO1xuXHRyZXR1cm4gKCFkZWNTdHIubWF0Y2goVU5SRVNFUlZFRCkgPyBzdHIgOiBkZWNTdHIpO1xufVxuXG5jb25zdCBoYW5kbGVyOlVSSVNjaGVtZUhhbmRsZXI8TWFpbHRvQ29tcG9uZW50cz4gPSAge1xuXHRzY2hlbWUgOiBcIm1haWx0b1wiLFxuXG5cdHBhcnNlIDogZnVuY3Rpb24gKGNvbXBvbmVudHM6VVJJQ29tcG9uZW50cywgb3B0aW9uczpVUklPcHRpb25zKTpNYWlsdG9Db21wb25lbnRzIHtcblx0XHRjb25zdCBtYWlsdG9Db21wb25lbnRzID0gY29tcG9uZW50cyBhcyBNYWlsdG9Db21wb25lbnRzO1xuXHRcdGNvbnN0IHRvID0gbWFpbHRvQ29tcG9uZW50cy50byA9IChtYWlsdG9Db21wb25lbnRzLnBhdGggPyBtYWlsdG9Db21wb25lbnRzLnBhdGguc3BsaXQoXCIsXCIpIDogW10pO1xuXHRcdG1haWx0b0NvbXBvbmVudHMucGF0aCA9IHVuZGVmaW5lZDtcblxuXHRcdGlmIChtYWlsdG9Db21wb25lbnRzLnF1ZXJ5KSB7XG5cdFx0XHRsZXQgdW5rbm93bkhlYWRlcnMgPSBmYWxzZVxuXHRcdFx0Y29uc3QgaGVhZGVyczpNYWlsdG9IZWFkZXJzID0ge307XG5cdFx0XHRjb25zdCBoZmllbGRzID0gbWFpbHRvQ29tcG9uZW50cy5xdWVyeS5zcGxpdChcIiZcIik7XG5cblx0XHRcdGZvciAobGV0IHggPSAwLCB4bCA9IGhmaWVsZHMubGVuZ3RoOyB4IDwgeGw7ICsreCkge1xuXHRcdFx0XHRjb25zdCBoZmllbGQgPSBoZmllbGRzW3hdLnNwbGl0KFwiPVwiKTtcblxuXHRcdFx0XHRzd2l0Y2ggKGhmaWVsZFswXSkge1xuXHRcdFx0XHRcdGNhc2UgXCJ0b1wiOlxuXHRcdFx0XHRcdFx0Y29uc3QgdG9BZGRycyA9IGhmaWVsZFsxXS5zcGxpdChcIixcIik7XG5cdFx0XHRcdFx0XHRmb3IgKGxldCB4ID0gMCwgeGwgPSB0b0FkZHJzLmxlbmd0aDsgeCA8IHhsOyArK3gpIHtcblx0XHRcdFx0XHRcdFx0dG8ucHVzaCh0b0FkZHJzW3hdKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJzdWJqZWN0XCI6XG5cdFx0XHRcdFx0XHRtYWlsdG9Db21wb25lbnRzLnN1YmplY3QgPSB1bmVzY2FwZUNvbXBvbmVudChoZmllbGRbMV0sIG9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcImJvZHlcIjpcblx0XHRcdFx0XHRcdG1haWx0b0NvbXBvbmVudHMuYm9keSA9IHVuZXNjYXBlQ29tcG9uZW50KGhmaWVsZFsxXSwgb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0dW5rbm93bkhlYWRlcnMgPSB0cnVlO1xuXHRcdFx0XHRcdFx0aGVhZGVyc1t1bmVzY2FwZUNvbXBvbmVudChoZmllbGRbMF0sIG9wdGlvbnMpXSA9IHVuZXNjYXBlQ29tcG9uZW50KGhmaWVsZFsxXSwgb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodW5rbm93bkhlYWRlcnMpIG1haWx0b0NvbXBvbmVudHMuaGVhZGVycyA9IGhlYWRlcnM7XG5cdFx0fVxuXG5cdFx0bWFpbHRvQ29tcG9uZW50cy5xdWVyeSA9IHVuZGVmaW5lZDtcblxuXHRcdGZvciAobGV0IHggPSAwLCB4bCA9IHRvLmxlbmd0aDsgeCA8IHhsOyArK3gpIHtcblx0XHRcdGNvbnN0IGFkZHIgPSB0b1t4XS5zcGxpdChcIkBcIik7XG5cblx0XHRcdGFkZHJbMF0gPSB1bmVzY2FwZUNvbXBvbmVudChhZGRyWzBdKTtcblxuXHRcdFx0aWYgKCFvcHRpb25zLnVuaWNvZGVTdXBwb3J0KSB7XG5cdFx0XHRcdC8vY29udmVydCBVbmljb2RlIElETiAtPiBBU0NJSSBJRE5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhZGRyWzFdID0gcHVueWNvZGUudG9BU0NJSSh1bmVzY2FwZUNvbXBvbmVudChhZGRyWzFdLCBvcHRpb25zKS50b0xvd2VyQ2FzZSgpKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdG1haWx0b0NvbXBvbmVudHMuZXJyb3IgPSBtYWlsdG9Db21wb25lbnRzLmVycm9yIHx8IFwiRW1haWwgYWRkcmVzcydzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvIEFTQ0lJIHZpYSBwdW55Y29kZTogXCIgKyBlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhZGRyWzFdID0gdW5lc2NhcGVDb21wb25lbnQoYWRkclsxXSwgb3B0aW9ucykudG9Mb3dlckNhc2UoKTtcblx0XHRcdH1cblxuXHRcdFx0dG9beF0gPSBhZGRyLmpvaW4oXCJAXCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiBtYWlsdG9Db21wb25lbnRzO1xuXHR9LFxuXG5cdHNlcmlhbGl6ZSA6IGZ1bmN0aW9uIChtYWlsdG9Db21wb25lbnRzOk1haWx0b0NvbXBvbmVudHMsIG9wdGlvbnM6VVJJT3B0aW9ucyk6VVJJQ29tcG9uZW50cyB7XG5cdFx0Y29uc3QgY29tcG9uZW50cyA9IG1haWx0b0NvbXBvbmVudHMgYXMgVVJJQ29tcG9uZW50cztcblx0XHRjb25zdCB0byA9IHRvQXJyYXkobWFpbHRvQ29tcG9uZW50cy50byk7XG5cdFx0aWYgKHRvKSB7XG5cdFx0XHRmb3IgKGxldCB4ID0gMCwgeGwgPSB0by5sZW5ndGg7IHggPCB4bDsgKyt4KSB7XG5cdFx0XHRcdGNvbnN0IHRvQWRkciA9IFN0cmluZyh0b1t4XSk7XG5cdFx0XHRcdGNvbnN0IGF0SWR4ID0gdG9BZGRyLmxhc3RJbmRleE9mKFwiQFwiKTtcblx0XHRcdFx0Y29uc3QgbG9jYWxQYXJ0ID0gKHRvQWRkci5zbGljZSgwLCBhdElkeCkpLnJlcGxhY2UoUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UoUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKS5yZXBsYWNlKE5PVF9MT0NBTF9QQVJULCBwY3RFbmNDaGFyKTtcblx0XHRcdFx0bGV0IGRvbWFpbiA9IHRvQWRkci5zbGljZShhdElkeCArIDEpO1xuXG5cdFx0XHRcdC8vY29udmVydCBJRE4gdmlhIHB1bnljb2RlXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0ZG9tYWluID0gKCFvcHRpb25zLmlyaSA/IHB1bnljb2RlLnRvQVNDSUkodW5lc2NhcGVDb21wb25lbnQoZG9tYWluLCBvcHRpb25zKS50b0xvd2VyQ2FzZSgpKSA6IHB1bnljb2RlLnRvVW5pY29kZShkb21haW4pKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiRW1haWwgYWRkcmVzcydzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvIFwiICsgKCFvcHRpb25zLmlyaSA/IFwiQVNDSUlcIiA6IFwiVW5pY29kZVwiKSArIFwiIHZpYSBwdW55Y29kZTogXCIgKyBlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dG9beF0gPSBsb2NhbFBhcnQgKyBcIkBcIiArIGRvbWFpbjtcblx0XHRcdH1cblxuXHRcdFx0Y29tcG9uZW50cy5wYXRoID0gdG8uam9pbihcIixcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaGVhZGVycyA9IG1haWx0b0NvbXBvbmVudHMuaGVhZGVycyA9IG1haWx0b0NvbXBvbmVudHMuaGVhZGVycyB8fCB7fTtcblxuXHRcdGlmIChtYWlsdG9Db21wb25lbnRzLnN1YmplY3QpIGhlYWRlcnNbXCJzdWJqZWN0XCJdID0gbWFpbHRvQ29tcG9uZW50cy5zdWJqZWN0O1xuXHRcdGlmIChtYWlsdG9Db21wb25lbnRzLmJvZHkpIGhlYWRlcnNbXCJib2R5XCJdID0gbWFpbHRvQ29tcG9uZW50cy5ib2R5O1xuXG5cdFx0Y29uc3QgZmllbGRzID0gW107XG5cdFx0Zm9yIChjb25zdCBuYW1lIGluIGhlYWRlcnMpIHtcblx0XHRcdGlmIChoZWFkZXJzW25hbWVdICE9PSBPW25hbWVdKSB7XG5cdFx0XHRcdGZpZWxkcy5wdXNoKFxuXHRcdFx0XHRcdG5hbWUucmVwbGFjZShQQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShQQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpLnJlcGxhY2UoTk9UX0hGTkFNRSwgcGN0RW5jQ2hhcikgK1xuXHRcdFx0XHRcdFwiPVwiICtcblx0XHRcdFx0XHRoZWFkZXJzW25hbWVdLnJlcGxhY2UoUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UoUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKS5yZXBsYWNlKE5PVF9IRlZBTFVFLCBwY3RFbmNDaGFyKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoZmllbGRzLmxlbmd0aCkge1xuXHRcdFx0Y29tcG9uZW50cy5xdWVyeSA9IGZpZWxkcy5qb2luKFwiJlwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcG9uZW50cztcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBoYW5kbGVyOyIsImltcG9ydCB7IFVSSVNjaGVtZUhhbmRsZXIsIFVSSUNvbXBvbmVudHMsIFVSSU9wdGlvbnMgfSBmcm9tIFwiLi4vdXJpXCI7XG5pbXBvcnQgeyBwY3RFbmNDaGFyLCBTQ0hFTUVTIH0gZnJvbSBcIi4uL3VyaVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVSTkNvbXBvbmVudHMgZXh0ZW5kcyBVUklDb21wb25lbnRzIHtcblx0bmlkPzpzdHJpbmc7XG5cdG5zcz86c3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVSTk9wdGlvbnMgZXh0ZW5kcyBVUklPcHRpb25zIHtcblx0bmlkPzpzdHJpbmc7XG59XG5cbmNvbnN0IE5JRCQgPSBcIig/OlswLTlBLVphLXpdWzAtOUEtWmEtelxcXFwtXXsxLDMxfSlcIjtcbmNvbnN0IFBDVF9FTkNPREVEJCA9IFwiKD86XFxcXCVbMC05QS1GYS1mXXsyfSlcIjtcbmNvbnN0IFRSQU5TJCQgPSBcIlswLTlBLVphLXpcXFxcKFxcXFwpXFxcXCtcXFxcLFxcXFwtXFxcXC5cXFxcOlxcXFw9XFxcXEBcXFxcO1xcXFwkXFxcXF9cXFxcIVxcXFwqXFxcXCdcXFxcL1xcXFw/XFxcXCNdXCI7XG5jb25zdCBOU1MkID0gXCIoPzooPzpcIiArIFBDVF9FTkNPREVEJCArIFwifFwiICsgVFJBTlMkJCArIFwiKSspXCI7XG5jb25zdCBVUk5fU0NIRU1FID0gbmV3IFJlZ0V4cChcIl51cm5cXFxcOihcIiArIE5JRCQgKyBcIikkXCIpO1xuY29uc3QgVVJOX1BBVEggPSBuZXcgUmVnRXhwKFwiXihcIiArIE5JRCQgKyBcIilcXFxcOihcIiArIE5TUyQgKyBcIikkXCIpO1xuY29uc3QgVVJOX1BBUlNFID0gL14oW15cXDpdKylcXDooLiopLztcbmNvbnN0IFVSTl9FWENMVURFRCA9IC9bXFx4MDAtXFx4MjBcXFxcXFxcIlxcJlxcPFxcPlxcW1xcXVxcXlxcYFxce1xcfFxcfVxcflxceDdGLVxceEZGXS9nO1xuXG4vL1JGQyAyMTQxXG5jb25zdCBoYW5kbGVyOlVSSVNjaGVtZUhhbmRsZXI8VVJOQ29tcG9uZW50cyxVUk5PcHRpb25zPiA9IHtcblx0c2NoZW1lIDogXCJ1cm5cIixcblxuXHRwYXJzZSA6IGZ1bmN0aW9uIChjb21wb25lbnRzOlVSSUNvbXBvbmVudHMsIG9wdGlvbnM6VVJOT3B0aW9ucyk6VVJOQ29tcG9uZW50cyB7XG5cdFx0Y29uc3QgbWF0Y2hlcyA9IGNvbXBvbmVudHMucGF0aCAmJiBjb21wb25lbnRzLnBhdGgubWF0Y2goVVJOX1BBUlNFKTtcblx0XHRsZXQgdXJuQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgYXMgVVJOQ29tcG9uZW50cztcblxuXHRcdGlmIChtYXRjaGVzKSB7XG5cdFx0XHRjb25zdCBzY2hlbWUgPSBvcHRpb25zLnNjaGVtZSB8fCB1cm5Db21wb25lbnRzLnNjaGVtZSB8fCBcInVyblwiO1xuXHRcdFx0Y29uc3QgbmlkID0gbWF0Y2hlc1sxXS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0Y29uc3QgbnNzID0gbWF0Y2hlc1syXTtcblx0XHRcdGNvbnN0IHVyblNjaGVtZSA9IGAke3NjaGVtZX06JHtvcHRpb25zLm5pZCB8fCBuaWR9YDtcblx0XHRcdGNvbnN0IHNjaGVtZUhhbmRsZXIgPSBTQ0hFTUVTW3VyblNjaGVtZV07XG5cblx0XHRcdHVybkNvbXBvbmVudHMubmlkID0gbmlkO1xuXHRcdFx0dXJuQ29tcG9uZW50cy5uc3MgPSBuc3M7XG5cdFx0XHR1cm5Db21wb25lbnRzLnBhdGggPSB1bmRlZmluZWQ7XG5cblx0XHRcdGlmIChzY2hlbWVIYW5kbGVyKSB7XG5cdFx0XHRcdHVybkNvbXBvbmVudHMgPSBzY2hlbWVIYW5kbGVyLnBhcnNlKHVybkNvbXBvbmVudHMsIG9wdGlvbnMpIGFzIFVSTkNvbXBvbmVudHM7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHVybkNvbXBvbmVudHMuZXJyb3IgPSB1cm5Db21wb25lbnRzLmVycm9yIHx8IFwiVVJOIGNhbiBub3QgYmUgcGFyc2VkLlwiO1xuXHRcdH1cblxuXHRcdHJldHVybiB1cm5Db21wb25lbnRzO1xuXHR9LFxuXG5cdHNlcmlhbGl6ZSA6IGZ1bmN0aW9uICh1cm5Db21wb25lbnRzOlVSTkNvbXBvbmVudHMsIG9wdGlvbnM6VVJOT3B0aW9ucyk6VVJJQ29tcG9uZW50cyB7XG5cdFx0Y29uc3Qgc2NoZW1lID0gb3B0aW9ucy5zY2hlbWUgfHwgdXJuQ29tcG9uZW50cy5zY2hlbWUgfHwgXCJ1cm5cIjtcblx0XHRjb25zdCBuaWQgPSB1cm5Db21wb25lbnRzLm5pZDtcblx0XHRjb25zdCB1cm5TY2hlbWUgPSBgJHtzY2hlbWV9OiR7b3B0aW9ucy5uaWQgfHwgbmlkfWA7XG5cdFx0Y29uc3Qgc2NoZW1lSGFuZGxlciA9IFNDSEVNRVNbdXJuU2NoZW1lXTtcblxuXHRcdGlmIChzY2hlbWVIYW5kbGVyKSB7XG5cdFx0XHR1cm5Db21wb25lbnRzID0gc2NoZW1lSGFuZGxlci5zZXJpYWxpemUodXJuQ29tcG9uZW50cywgb3B0aW9ucykgYXMgVVJOQ29tcG9uZW50cztcblx0XHR9XG5cblx0XHRjb25zdCB1cmlDb21wb25lbnRzID0gdXJuQ29tcG9uZW50cyBhcyBVUklDb21wb25lbnRzO1xuXHRcdGNvbnN0IG5zcyA9IHVybkNvbXBvbmVudHMubnNzO1xuXHRcdHVyaUNvbXBvbmVudHMucGF0aCA9IGAke25pZCB8fCBvcHRpb25zLm5pZH06JHtuc3N9YDtcblxuXHRcdHJldHVybiB1cmlDb21wb25lbnRzO1xuXHR9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgaGFuZGxlcjsiLCJpbXBvcnQgeyBVUklTY2hlbWVIYW5kbGVyLCBVUklDb21wb25lbnRzLCBVUklPcHRpb25zIH0gZnJvbSBcIi4uL3VyaVwiO1xuaW1wb3J0IHsgVVJOQ29tcG9uZW50cyB9IGZyb20gXCIuL3VyblwiO1xuaW1wb3J0IHsgU0NIRU1FUyB9IGZyb20gXCIuLi91cmlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBVVUlEQ29tcG9uZW50cyBleHRlbmRzIFVSTkNvbXBvbmVudHMge1xuXHR1dWlkPzogc3RyaW5nO1xufVxuXG5jb25zdCBVVUlEID0gL15bMC05QS1GYS1mXXs4fSg/OlxcLVswLTlBLUZhLWZdezR9KXszfVxcLVswLTlBLUZhLWZdezEyfSQvO1xuY29uc3QgVVVJRF9QQVJTRSA9IC9eWzAtOUEtRmEtZlxcLV17MzZ9LztcblxuLy9SRkMgNDEyMlxuY29uc3QgaGFuZGxlcjpVUklTY2hlbWVIYW5kbGVyPFVVSURDb21wb25lbnRzLCBVUklPcHRpb25zLCBVUk5Db21wb25lbnRzPiA9IHtcblx0c2NoZW1lIDogXCJ1cm46dXVpZFwiLFxuXG5cdHBhcnNlIDogZnVuY3Rpb24gKHVybkNvbXBvbmVudHM6VVJOQ29tcG9uZW50cywgb3B0aW9uczpVUklPcHRpb25zKTpVVUlEQ29tcG9uZW50cyB7XG5cdFx0Y29uc3QgdXVpZENvbXBvbmVudHMgPSB1cm5Db21wb25lbnRzIGFzIFVVSURDb21wb25lbnRzO1xuXHRcdHV1aWRDb21wb25lbnRzLnV1aWQgPSB1dWlkQ29tcG9uZW50cy5uc3M7XG5cdFx0dXVpZENvbXBvbmVudHMubnNzID0gdW5kZWZpbmVkO1xuXG5cdFx0aWYgKCFvcHRpb25zLnRvbGVyYW50ICYmICghdXVpZENvbXBvbmVudHMudXVpZCB8fCAhdXVpZENvbXBvbmVudHMudXVpZC5tYXRjaChVVUlEKSkpIHtcblx0XHRcdHV1aWRDb21wb25lbnRzLmVycm9yID0gdXVpZENvbXBvbmVudHMuZXJyb3IgfHwgXCJVVUlEIGlzIG5vdCB2YWxpZC5cIjtcblx0XHR9XG5cblx0XHRyZXR1cm4gdXVpZENvbXBvbmVudHM7XG5cdH0sXG5cblx0c2VyaWFsaXplIDogZnVuY3Rpb24gKHV1aWRDb21wb25lbnRzOlVVSURDb21wb25lbnRzLCBvcHRpb25zOlVSSU9wdGlvbnMpOlVSTkNvbXBvbmVudHMge1xuXHRcdGNvbnN0IHVybkNvbXBvbmVudHMgPSB1dWlkQ29tcG9uZW50cyBhcyBVUk5Db21wb25lbnRzO1xuXHRcdC8vbm9ybWFsaXplIFVVSURcblx0XHR1cm5Db21wb25lbnRzLm5zcyA9ICh1dWlkQ29tcG9uZW50cy51dWlkIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuIHVybkNvbXBvbmVudHM7XG5cdH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBoYW5kbGVyOyIsImltcG9ydCB7IFNDSEVNRVMgfSBmcm9tIFwiLi91cmlcIjtcblxuaW1wb3J0IGh0dHAgZnJvbSBcIi4vc2NoZW1lcy9odHRwXCI7XG5TQ0hFTUVTW2h0dHAuc2NoZW1lXSA9IGh0dHA7XG5cbmltcG9ydCBodHRwcyBmcm9tIFwiLi9zY2hlbWVzL2h0dHBzXCI7XG5TQ0hFTUVTW2h0dHBzLnNjaGVtZV0gPSBodHRwcztcblxuaW1wb3J0IHdzIGZyb20gXCIuL3NjaGVtZXMvd3NcIjtcblNDSEVNRVNbd3Muc2NoZW1lXSA9IHdzO1xuXG5pbXBvcnQgd3NzIGZyb20gXCIuL3NjaGVtZXMvd3NzXCI7XG5TQ0hFTUVTW3dzcy5zY2hlbWVdID0gd3NzO1xuXG5pbXBvcnQgbWFpbHRvIGZyb20gXCIuL3NjaGVtZXMvbWFpbHRvXCI7XG5TQ0hFTUVTW21haWx0by5zY2hlbWVdID0gbWFpbHRvO1xuXG5pbXBvcnQgdXJuIGZyb20gXCIuL3NjaGVtZXMvdXJuXCI7XG5TQ0hFTUVTW3Vybi5zY2hlbWVdID0gdXJuO1xuXG5pbXBvcnQgdXVpZCBmcm9tIFwiLi9zY2hlbWVzL3Vybi11dWlkXCI7XG5TQ0hFTUVTW3V1aWQuc2NoZW1lXSA9IHV1aWQ7XG5cbmV4cG9ydCAqIGZyb20gXCIuL3VyaVwiO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmFtZEQgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyBFcnJvcignZGVmaW5lIGNhbm5vdCBiZSB1c2VkIGluZGlyZWN0Jyk7XG59OyIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5mID0ge307XG4vLyBUaGlzIGZpbGUgY29udGFpbnMgb25seSB0aGUgZW50cnkgY2h1bmsuXG4vLyBUaGUgY2h1bmsgbG9hZGluZyBmdW5jdGlvbiBmb3IgYWRkaXRpb25hbCBjaHVua3Ncbl9fd2VicGFja19yZXF1aXJlX18uZSA9IChjaHVua0lkKSA9PiB7XG5cdHJldHVybiBQcm9taXNlLmFsbChPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLmYpLnJlZHVjZSgocHJvbWlzZXMsIGtleSkgPT4ge1xuXHRcdF9fd2VicGFja19yZXF1aXJlX18uZltrZXldKGNodW5rSWQsIHByb21pc2VzKTtcblx0XHRyZXR1cm4gcHJvbWlzZXM7XG5cdH0sIFtdKSk7XG59OyIsIi8vIFRoaXMgZnVuY3Rpb24gYWxsb3cgdG8gcmVmZXJlbmNlIGFzeW5jIGNodW5rc1xuX193ZWJwYWNrX3JlcXVpcmVfXy51ID0gKGNodW5rSWQpID0+IHtcblx0Ly8gcmV0dXJuIHVybCBmb3IgZmlsZW5hbWVzIGJhc2VkIG9uIHRlbXBsYXRlXG5cdHJldHVybiBcIlwiICsgY2h1bmtJZCArIFwiLmJ1bmRsZS5qc1wiO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJ2YXIgc2NyaXB0VXJsO1xuaWYgKF9fd2VicGFja19yZXF1aXJlX18uZy5pbXBvcnRTY3JpcHRzKSBzY3JpcHRVcmwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24gKyBcIlwiO1xudmFyIGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmRvY3VtZW50O1xuaWYgKCFzY3JpcHRVcmwgJiYgZG9jdW1lbnQpIHtcblx0aWYgKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpXG5cdFx0c2NyaXB0VXJsID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XG5cdGlmICghc2NyaXB0VXJsKSB7XG5cdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtcblx0XHRpZihzY3JpcHRzLmxlbmd0aCkge1xuXHRcdFx0dmFyIGkgPSBzY3JpcHRzLmxlbmd0aCAtIDE7XG5cdFx0XHR3aGlsZSAoaSA+IC0xICYmICFzY3JpcHRVcmwpIHNjcmlwdFVybCA9IHNjcmlwdHNbaS0tXS5zcmM7XG5cdFx0fVxuXHR9XG59XG4vLyBXaGVuIHN1cHBvcnRpbmcgYnJvd3NlcnMgd2hlcmUgYW4gYXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCB5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dC5wdWJsaWNQYXRoIG1hbnVhbGx5IHZpYSBjb25maWd1cmF0aW9uXG4vLyBvciBwYXNzIGFuIGVtcHR5IHN0cmluZyAoXCJcIikgYW5kIHNldCB0aGUgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gdmFyaWFibGUgZnJvbSB5b3VyIGNvZGUgdG8gdXNlIHlvdXIgb3duIGxvZ2ljLlxuaWYgKCFzY3JpcHRVcmwpIHRocm93IG5ldyBFcnJvcihcIkF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpO1xuc2NyaXB0VXJsID0gc2NyaXB0VXJsLnJlcGxhY2UoLyMuKiQvLCBcIlwiKS5yZXBsYWNlKC9cXD8uKiQvLCBcIlwiKS5yZXBsYWNlKC9cXC9bXlxcL10rJC8sIFwiL1wiKTtcbl9fd2VicGFja19yZXF1aXJlX18ucCA9IHNjcmlwdFVybDsiLCIvLyBubyBiYXNlVVJJXG5cbi8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgYW5kIGxvYWRpbmcgY2h1bmtzXG4vLyB1bmRlZmluZWQgPSBjaHVuayBub3QgbG9hZGVkLCBudWxsID0gY2h1bmsgcHJlbG9hZGVkL3ByZWZldGNoZWRcbi8vIFtyZXNvbHZlLCByZWplY3QsIFByb21pc2VdID0gY2h1bmsgbG9hZGluZywgMCA9IGNodW5rIGxvYWRlZFxudmFyIGluc3RhbGxlZENodW5rcyA9IHtcblx0MjM5OiAwXG59O1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmYuaiA9IChjaHVua0lkLCBwcm9taXNlcykgPT4ge1xuXHRcdC8vIEpTT05QIGNodW5rIGxvYWRpbmcgZm9yIGphdmFzY3JpcHRcblx0XHR2YXIgaW5zdGFsbGVkQ2h1bmtEYXRhID0gX193ZWJwYWNrX3JlcXVpcmVfXy5vKGluc3RhbGxlZENodW5rcywgY2h1bmtJZCkgPyBpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0gOiB1bmRlZmluZWQ7XG5cdFx0aWYoaW5zdGFsbGVkQ2h1bmtEYXRhICE9PSAwKSB7IC8vIDAgbWVhbnMgXCJhbHJlYWR5IGluc3RhbGxlZFwiLlxuXG5cdFx0XHQvLyBhIFByb21pc2UgbWVhbnMgXCJjdXJyZW50bHkgbG9hZGluZ1wiLlxuXHRcdFx0aWYoaW5zdGFsbGVkQ2h1bmtEYXRhKSB7XG5cdFx0XHRcdHByb21pc2VzLnB1c2goaW5zdGFsbGVkQ2h1bmtEYXRhWzJdKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmKHRydWUpIHsgLy8gYWxsIGNodW5rcyBoYXZlIEpTXG5cdFx0XHRcdFx0Ly8gc2V0dXAgUHJvbWlzZSBpbiBjaHVuayBjYWNoZVxuXHRcdFx0XHRcdHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gKGluc3RhbGxlZENodW5rRGF0YSA9IGluc3RhbGxlZENodW5rc1tjaHVua0lkXSA9IFtyZXNvbHZlLCByZWplY3RdKSk7XG5cdFx0XHRcdFx0cHJvbWlzZXMucHVzaChpbnN0YWxsZWRDaHVua0RhdGFbMl0gPSBwcm9taXNlKTtcblxuXHRcdFx0XHRcdC8vIHN0YXJ0IGNodW5rIGxvYWRpbmdcblx0XHRcdFx0XHR2YXIgdXJsID0gX193ZWJwYWNrX3JlcXVpcmVfXy5wICsgX193ZWJwYWNrX3JlcXVpcmVfXy51KGNodW5rSWQpO1xuXHRcdFx0XHRcdC8vIGNyZWF0ZSBlcnJvciBiZWZvcmUgc3RhY2sgdW53b3VuZCB0byBnZXQgdXNlZnVsIHN0YWNrdHJhY2UgbGF0ZXJcblx0XHRcdFx0XHR2YXIgZXJyb3IgPSBuZXcgRXJyb3IoKTtcblx0XHRcdFx0XHR2YXIgbG9hZGluZ0VuZGVkID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oaW5zdGFsbGVkQ2h1bmtzLCBjaHVua0lkKSkge1xuXHRcdFx0XHRcdFx0XHRpbnN0YWxsZWRDaHVua0RhdGEgPSBpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF07XG5cdFx0XHRcdFx0XHRcdGlmKGluc3RhbGxlZENodW5rRGF0YSAhPT0gMCkgaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRpZihpbnN0YWxsZWRDaHVua0RhdGEpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JUeXBlID0gZXZlbnQgJiYgKGV2ZW50LnR5cGUgPT09ICdsb2FkJyA/ICdtaXNzaW5nJyA6IGV2ZW50LnR5cGUpO1xuXHRcdFx0XHRcdFx0XHRcdHZhciByZWFsU3JjID0gZXZlbnQgJiYgZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC5zcmM7XG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3IubWVzc2FnZSA9ICdMb2FkaW5nIGNodW5rICcgKyBjaHVua0lkICsgJyBmYWlsZWQuXFxuKCcgKyBlcnJvclR5cGUgKyAnOiAnICsgcmVhbFNyYyArICcpJztcblx0XHRcdFx0XHRcdFx0XHRlcnJvci5uYW1lID0gJ0NodW5rTG9hZEVycm9yJztcblx0XHRcdFx0XHRcdFx0XHRlcnJvci50eXBlID0gZXJyb3JUeXBlO1xuXHRcdFx0XHRcdFx0XHRcdGVycm9yLnJlcXVlc3QgPSByZWFsU3JjO1xuXHRcdFx0XHRcdFx0XHRcdGluc3RhbGxlZENodW5rRGF0YVsxXShlcnJvcik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18ubCh1cmwsIGxvYWRpbmdFbmRlZCwgXCJjaHVuay1cIiArIGNodW5rSWQsIGNodW5rSWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxufTtcblxuLy8gbm8gcHJlZmV0Y2hpbmdcblxuLy8gbm8gcHJlbG9hZGVkXG5cbi8vIG5vIEhNUlxuXG4vLyBubyBITVIgbWFuaWZlc3RcblxuLy8gbm8gb24gY2h1bmtzIGxvYWRlZFxuXG4vLyBpbnN0YWxsIGEgSlNPTlAgY2FsbGJhY2sgZm9yIGNodW5rIGxvYWRpbmdcbnZhciB3ZWJwYWNrSnNvbnBDYWxsYmFjayA9IChwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbiwgZGF0YSkgPT4ge1xuXHR2YXIgW2NodW5rSWRzLCBtb3JlTW9kdWxlcywgcnVudGltZV0gPSBkYXRhO1xuXHQvLyBhZGQgXCJtb3JlTW9kdWxlc1wiIHRvIHRoZSBtb2R1bGVzIG9iamVjdCxcblx0Ly8gdGhlbiBmbGFnIGFsbCBcImNodW5rSWRzXCIgYXMgbG9hZGVkIGFuZCBmaXJlIGNhbGxiYWNrXG5cdHZhciBtb2R1bGVJZCwgY2h1bmtJZCwgaSA9IDA7XG5cdGlmKGNodW5rSWRzLnNvbWUoKGlkKSA9PiAoaW5zdGFsbGVkQ2h1bmtzW2lkXSAhPT0gMCkpKSB7XG5cdFx0Zm9yKG1vZHVsZUlkIGluIG1vcmVNb2R1bGVzKSB7XG5cdFx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8obW9yZU1vZHVsZXMsIG1vZHVsZUlkKSkge1xuXHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm1bbW9kdWxlSWRdID0gbW9yZU1vZHVsZXNbbW9kdWxlSWRdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZihydW50aW1lKSB2YXIgcmVzdWx0ID0gcnVudGltZShfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblx0fVxuXHRpZihwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbikgcGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24oZGF0YSk7XG5cdGZvcig7aSA8IGNodW5rSWRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y2h1bmtJZCA9IGNodW5rSWRzW2ldO1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhpbnN0YWxsZWRDaHVua3MsIGNodW5rSWQpICYmIGluc3RhbGxlZENodW5rc1tjaHVua0lkXSkge1xuXHRcdFx0aW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdWzBdKCk7XG5cdFx0fVxuXHRcdGluc3RhbGxlZENodW5rc1tjaHVua0lkXSA9IDA7XG5cdH1cblxufVxuXG52YXIgY2h1bmtMb2FkaW5nR2xvYmFsID0gc2VsZltcIndlYnBhY2tDaHVua2Zsb3dfb3NcIl0gPSBzZWxmW1wid2VicGFja0NodW5rZmxvd19vc1wiXSB8fCBbXTtcbmNodW5rTG9hZGluZ0dsb2JhbC5mb3JFYWNoKHdlYnBhY2tKc29ucENhbGxiYWNrLmJpbmQobnVsbCwgMCkpO1xuY2h1bmtMb2FkaW5nR2xvYmFsLnB1c2ggPSB3ZWJwYWNrSnNvbnBDYWxsYmFjay5iaW5kKG51bGwsIGNodW5rTG9hZGluZ0dsb2JhbC5wdXNoLmJpbmQoY2h1bmtMb2FkaW5nR2xvYmFsKSk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5uYyA9IHVuZGVmaW5lZDsiLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uL25vZGVfbW9kdWxlcy9sZXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLmxlc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcblxuICAgICAgb3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbiAgICBcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi9ub2RlX21vZHVsZXMvbGVzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5sZXNzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwiZXhwb3J0IGNvbnN0IG1ldGEgPSB7XHJcbiAgbmFtZTogJ0Nsb2NrJyxcclxuICBkZXNjcmlwdGlvbjogJ0Rpc3BsYXlzIHRoZSBkYXRlICYgdGltZS4nLFxyXG4gIGlkOiAnY2xvY2snXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBydW4gPSAoZWxlbWVudDogSFRNTERpdkVsZW1lbnQpID0+IHtcclxuICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XHJcbiAgZWxlbWVudC5zdHlsZS5hbGlnbkl0ZW1zID0gJ2NlbnRlcic7XHJcbiAgZWxlbWVudC5pbm5lclRleHQgPSAnOTo0MSBBTVxcbjEwLzE0LzIwMjMnO1xyXG59IiwiZXhwb3J0IGNvbnN0IG1ldGEgPSB7XHJcbiAgbmFtZTogJ0Rlc2t0b3AgU3dpdGNoZXInLFxyXG4gIGRlc2NyaXB0aW9uOiAnQWxsb3dzIHlvdSB0byBzd2l0Y2ggYmV0d2VlbiBkZXNrdG9wcy4nLFxyXG4gIGlkOiAnc3dpdGNoZXInXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBydW4gPSAoZWxlbWVudDogSFRNTERpdkVsZW1lbnQpID0+IHtcclxuICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XHJcbiAgZWxlbWVudC5zdHlsZS5nYXAgPSAnMTBweCc7XHJcbiAgZWxlbWVudC5zdHlsZS5hbGlnbkl0ZW1zID0gJ2NlbnRlcic7XHJcbiAgZWxlbWVudC5zdHlsZS5wYWRkaW5nTGVmdCA9ICcxNXB4JztcclxuICBlbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9ICcxNXB4JztcclxuICBlbGVtZW50LmlubmVySFRNTCA9IGA8aSBjbGFzcz0nYnggYnhzLWRpY2UtMSc+PC9pPjxpIGNsYXNzPSdieCBieC1kaWNlLTInPjwvaT48aSBjbGFzcz0nYnggYngtZGljZS0zJz48L2k+YDtcclxufSIsImV4cG9ydCBjb25zdCBtZXRhID0ge1xyXG4gIG5hbWU6ICdBcHAgVmlldycsXHJcbiAgZGVzY3JpcHRpb246ICdPcGVucyB0aGUgYXBwIHZpZXcuJyxcclxuICBpZDogJ2FwcHZpZXcnXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBydW4gPSAoZWxlbWVudDogSFRNTERpdkVsZW1lbnQpID0+IHtcclxuICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XHJcbiAgZWxlbWVudC5zdHlsZS5hbGlnbkl0ZW1zID0gJ2NlbnRlcic7XHJcbiAgZWxlbWVudC5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xyXG4gIGVsZW1lbnQuc3R5bGUuYXNwZWN0UmF0aW8gPSAnMSAvIDEnO1xyXG4gIGVsZW1lbnQuaW5uZXJIVE1MID0gYDxpIGNsYXNzPSdieCBieC1yb2NrZXQnPjwvaT5gO1xyXG5cclxuICBlbGVtZW50Lm9uY2xpY2sgPSAoKSA9PiB7XHJcbiAgICB3aW5kb3cud20udG9nZ2xlTGF1bmNoZXIoKTtcclxuICB9XHJcbn0iLCJpbXBvcnQgZmxvdyBmcm9tICcuLi9mbG93LnRzJztcclxuXHJcbmV4cG9ydCBjb25zdCBtZXRhID0ge1xyXG4gIG5hbWU6ICdBcHBzJyxcclxuICBkZXNjcmlwdGlvbjogJ0Rpc3BsYXlzIHRoZSBjdXJyZW50IGFwcHMgb3Blbi4nLFxyXG4gIGlkOiAnYXBwcydcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHJ1biA9IChlbGVtZW50OiBIVE1MRGl2RWxlbWVudCkgPT4ge1xyXG4gIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcclxuICBlbGVtZW50LnN0eWxlLmFsaWduSXRlbXMgPSAnY2VudGVyJztcclxuICBlbGVtZW50LnN0eWxlLmdhcCA9ICcxMHB4JztcclxuICBlbGVtZW50LnN0eWxlLnBhZGRpbmdMZWZ0ID0gJzE1cHgnO1xyXG4gIGVsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gJzE1cHgnO1xyXG5cclxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYXBwX29wZW5lZCcsIChlOiBDdXN0b21FdmVudCkgPT4ge1xyXG4gICAgY29uc3QgYXBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXBwJyk7XHJcbiAgICBhcHAuaW5uZXJIVE1MID0gYDxpbWcgc3JjPVwiJHtlLmRldGFpbC5hcHAuaWNvbn1cIi8+YDtcclxuICAgIGFwcC5vbmNsaWNrID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICBjb25zdCB3aW4gPSBhd2FpdCBlLmRldGFpbC53aW47XHJcbiAgICAgIGF3YWl0IHdpbi5mb2N1cygpO1xyXG4gICAgfVxyXG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZChhcHApO1xyXG4gIH0pXHJcbn0iLCJpbXBvcnQgKiBhcyBjbG9jayBmcm9tICcuL21vZHVsZXMvY2xvY2sudHMnO1xyXG5pbXBvcnQgKiBhcyBzd2l0Y2hlciBmcm9tICcuL21vZHVsZXMvc3dpdGNoZXIudHMnO1xyXG5pbXBvcnQgKiBhcyBhcHBWaWV3IGZyb20gJy4vbW9kdWxlcy9hcHBWaWV3LnRzJztcclxuaW1wb3J0ICogYXMgYXBwcyBmcm9tICcuL21vZHVsZXMvYXBwcy50cyc7XHJcblxyXG5pbXBvcnQgeyBTdGF0dXNJdGVtIH0gZnJvbSAnLi90eXBlcyc7XHJcblxyXG5jbGFzcyBTdGF0dXNCYXIge1xyXG4gIGl0ZW1zOiBTdGF0dXNJdGVtW10gPSBbXTtcclxuICBlbGVtZW50OiBIVE1MRWxlbWVudDtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0b29sYmFyJyk7XHJcblxyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpO1xyXG5cclxuICAgIHRoaXMuYWRkKGFwcFZpZXcpO1xyXG4gICAgdGhpcy5hZGQoYXBwcyk7XHJcbiAgICB0aGlzLmFkZChjbG9jayk7XHJcbiAgICB0aGlzLmFkZChzd2l0Y2hlcik7XHJcbiAgfVxyXG5cclxuICBhZGQoaXRlbTogU3RhdHVzSXRlbSkge1xyXG4gICAgaWYgKHRoaXMuaXRlbXMuc29tZSh4ID0+IHgubWV0YS5pZCA9PT0gaXRlbS5tZXRhLmlkKSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBVbmFibGUgdG8gcmVnaXN0ZXIgdG9vbDsgJHtpdGVtLm1ldGEuaWR9IGlzIGFscmVhZHkgcmVnaXN0ZXJlZC5gKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtdG9vbGJhci1pZCcsIGl0ZW0ubWV0YS5pZCk7XHJcbiAgXHJcbiAgICAgIHRoaXMuaXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xyXG4gIFxyXG4gICAgICBpdGVtLnJ1bihlbGVtZW50KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFN0YXR1c0JhcjsiLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiaW1hZ2VzL2RiZDE3MjNhMmZjZjkyZTNiMDNhNzYwYTEyNTkyODJjLnBuZ1wiOyIsImltcG9ydCBpY29uIGZyb20gJy4uL2Fzc2V0cy9pY29ucy9zZXR0aW5ncy5wbmcnO1xyXG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vdHlwZXMudHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNldHRpbmdzQXBwIGltcGxlbWVudHMgQXBwIHtcclxuICBuYW1lICAgICA9ICdTZXR0aW5ncyc7XHJcbiAgcGtnICAgICAgPSAnZmxvdy5zZXR0aW5ncyc7XHJcbiAgaWNvbiAgICAgPSBpY29uO1xyXG4gIHZlcnNpb24gID0gJzEuMC4wJztcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBhc3luYyBvcGVuKCkge1xyXG4gICAgY29uc3Qgd2luID0gd2luZG93LndtLmNyZWF0ZVdpbmRvdyh7XHJcbiAgICAgIHRpdGxlOiB0aGlzLm5hbWUsXHJcbiAgICAgIGljb246IGljb24sXHJcbiAgICAgIHdpZHRoOiA3MDAsXHJcbiAgICAgIGhlaWdodDogMzAwXHJcbiAgICB9KTtcclxuXHJcbiAgICB3aW4uY29udGVudC5zdHlsZS5wYWRkaW5nID0gJzEwcHgnO1xyXG4gICAgd2luLmNvbnRlbnQuaW5uZXJIVE1MID0gYFxyXG4gICAgICA8aDE+U2V0dGluZ3M8L2gxPlxyXG4gICAgICA8cD5vd28yPC9wPlxyXG4gICAgYDtcclxuXHJcbiAgICByZXR1cm4gd2luO1xyXG4gIH1cclxufSIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJpbWFnZXMvZDcxMDcyYWFkMzZhNzU0YjEwMzhjNDI0NWVhOTg2ZGYucG5nXCI7IiwiaW1wb3J0IGljb24gZnJvbSAnLi4vYXNzZXRzL2ljb25zL2ZpbGVzLnBuZyc7XHJcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi90eXBlcy50c1wiO1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xyXG5pbXBvcnQgZmxvdyBmcm9tICcuLi9mbG93LnRzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZpbGVzQXBwIGltcGxlbWVudHMgQXBwIHtcclxuICBuYW1lICAgICA9ICdGaWxlcyc7XHJcbiAgcGtnICAgICAgPSAnZmxvdy5maWxlcyc7XHJcbiAgaWNvbiAgICAgPSBpY29uO1xyXG4gIHZlcnNpb24gID0gJzEuMC4wJztcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBhc3luYyBvcGVuKCkge1xyXG4gICAgY29uc3Qgd2luID0gd2luZG93LndtLmNyZWF0ZVdpbmRvdyh7XHJcbiAgICAgIHRpdGxlOiB0aGlzLm5hbWUsXHJcbiAgICAgIGljb246IGljb24sXHJcbiAgICAgIHdpZHRoOiA1MDAsXHJcbiAgICAgIGhlaWdodDogNDAwXHJcbiAgICB9KTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCBmcy5ta2RpcignL2hvbWUnLCAoKSA9PiB7fSk7XHJcbiAgICAgIGF3YWl0IGZzLm1rZGlyKCcvaG9tZS9tZW93JywgKCkgPT4ge30pO1xyXG4gICAgfSBjYXRjaCAoZSkge31cclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZSgnL2hvbWUvb3dvMS50eHQnLCAnc3Vzc3knLCAoKSA9PiB7fSk7XHJcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZSgnL2hvbWUvb3dvMi5odG1sJywgJzxib2R5PjwvYm9keT4nLCAoKSA9PiB7fSk7XHJcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZSgnL2hvbWUvb3dvLmpzJywgJ2FsZXJ0KGBoaWApJywgKCkgPT4ge30pO1xyXG4gICAgfSBjYXRjaCAoZSkge31cclxuXHJcblxyXG4gICAgd2luLmNvbnRlbnQuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcclxuICAgIHdpbi5jb250ZW50LnN0eWxlLmZsZXhEaXJlY3Rpb24gPSAnY29sdW1uJztcclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBzZXREaXIoZGlyOiBzdHJpbmcpIHtcclxuICAgICAgYXdhaXQgZnMucmVhZGRpcihkaXIsIChlLCBmaWxlcykgPT4ge1xyXG4gICAgICAgIGNvbnN0IGJhY2sgPSBkaXIgPT09ICcvJyA/IGA8aSBjbGFzcz0nYnggYngtYXJyb3ctdG8tbGVmdCc+PC9pPmAgOiBgPGkgY2xhc3M9J2JhY2sgYnggYngtbGVmdC1hcnJvdy1hbHQnPjwvaT5gO1xyXG4gIFxyXG4gICAgICAgIHdpbi5jb250ZW50LmlubmVySFRNTCA9IGBcclxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOiA1cHg7ZGlzcGxheTogZmxleDthbGlnbi1pdGVtczogY2VudGVyO1wiPiR7YmFja30ke2Rpcn08L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlc1wiIHN0eWxlPVwiYmFja2dyb3VuZDogdmFyKC0tYmFzZSk7ZmxleDogMTtib3JkZXItcmFkaXVzOiAxMHB4O2Rpc3BsYXk6IGZsZXg7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIj48L2Rpdj5cclxuICAgICAgICBgO1xyXG4gIFxyXG4gICAgICAgIGlmIChiYWNrICE9PSBgPGkgY2xhc3M9J2J4IGJ4LWFycm93LXRvLWxlZnQnPjwvaT5gKSB7XHJcbiAgICAgICAgICAod2luLmNvbnRlbnQucXVlcnlTZWxlY3RvcignLmJhY2snKSBhcyBIVE1MRWxlbWVudCkub25jbGljayA9ICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGRpci5zcGxpdCgnLycpWzFdID09PSBkaXIucmVwbGFjZSgnLycsICcnKSkge1xyXG4gICAgICAgICAgICAgIHNldERpcignLycgKyBkaXIuc3BsaXQoJy8nKVswXSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBzZXREaXIoJy8nICsgZGlyLnNwbGl0KCcvJylbMV0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgZm9yIChjb25zdCBmaWxlIGluIGZpbGVzKSB7XHJcbiAgICAgICAgICBjb25zdCBzZXBhcmF0b3IgPSBkaXIgPT09ICcvJyA/ICcnIDogJy8nO1xyXG4gICAgICAgICAgZnMuc3RhdChkaXIgKyBzZXBhcmF0b3IgKyBmaWxlc1tmaWxlXSwgKGUsIGZpbGVTdGF0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ3BhZGRpbmc6IDVweDtib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tdGV4dCk7Jyk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJUZXh0ICs9IGAke2ZpbGVzW2ZpbGVdfWA7XHJcbiAgICAgICAgICAgIGVsZW1lbnQub25jbGljayA9ICgpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZmlsZVN0YXQuaXNEaXJlY3RvcnkoKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgc2V0RGlyKGRpciArIHNlcGFyYXRvciArIGZpbGVzW2ZpbGVdKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZmxvdy5vcGVuQXBwKCdmbG93LmVkaXRvcicsIHsgcGF0aDogZGlyICsgc2VwYXJhdG9yICsgZmlsZXNbZmlsZV0gfSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICBcclxuICAgICAgICAgICAgd2luLmNvbnRlbnQucXVlcnlTZWxlY3RvcignLmZpbGVzJykuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldERpcignLycpXHJcblxyXG4gICAgcmV0dXJuIHdpbjtcclxuICB9XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiaW1hZ2VzLzY3MDMxYzE1ZDkwYTNkODU4NTRmYjA4NTdjMDBkZmIzLnBuZ1wiOyIsImltcG9ydCBpY29uIGZyb20gJy4uL2Fzc2V0cy9pY29ucy9tdXNpYy5wbmcnO1xyXG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vdHlwZXMudHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE11c2ljQXBwIGltcGxlbWVudHMgQXBwIHtcclxuICBuYW1lICAgICA9ICdNdXNpYyc7XHJcbiAgcGtnICAgICAgPSAnZmxvdy5tdXNpYyc7XHJcbiAgaWNvbiAgICAgPSBpY29uO1xyXG4gIHZlcnNpb24gID0gJzEuMC4wJztcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBhc3luYyBvcGVuKCkge1xyXG4gICAgY29uc3Qgd2luID0gd2luZG93LndtLmNyZWF0ZVdpbmRvdyh7XHJcbiAgICAgIHRpdGxlOiB0aGlzLm5hbWUsXHJcbiAgICAgIGljb246IGljb25cclxuICAgIH0pO1xyXG5cclxuICAgIHdpbi5jb250ZW50LmlubmVySFRNTCA9ICdoaSc7XHJcbiAgICBcclxuICAgIHJldHVybiB3aW47XHJcbiAgfVxyXG59IiwiZXhwb3J0IGRlZmF1bHQgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcImltYWdlcy8yODkzNjc0ZGE5OGNiNzdhNzA4MWFiNjk4NzkxZTI2ZS5wbmdcIjsiLCJpbXBvcnQgaWNvbiBmcm9tICcuLi9hc3NldHMvaWNvbnMvZWRpdG9yLnBuZyc7XHJcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi90eXBlcy50c1wiO1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRpdG9yQXBwIGltcGxlbWVudHMgQXBwIHtcclxuICBuYW1lICAgICA9ICdFZGl0b3InO1xyXG4gIHBrZyAgICAgID0gJ2Zsb3cuZWRpdG9yJztcclxuICBpY29uICAgICA9IGljb247XHJcbiAgdmVyc2lvbiAgPSAnMS4wLjAnO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIGFzeW5jIG9wZW4oZGF0YTogYW55KSB7XHJcbiAgICBjb25zdCB3aW4gPSB3aW5kb3cud20uY3JlYXRlV2luZG93KHtcclxuICAgICAgdGl0bGU6IHRoaXMubmFtZSxcclxuICAgICAgaWNvbjogaWNvbixcclxuICAgICAgd2lkdGg6IDUwMCxcclxuICAgICAgaGVpZ2h0OiA0MDBcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChkYXRhLnBhdGgpIHtcclxuICAgICAgd2luLnNldFRpdGxlKCdFZGl0b3IgLSAnICsgZGF0YS5wYXRoKTtcclxuXHJcbiAgICAgIHZhciB7IGRlZmF1bHQ6IGFjZSB9ID0gYXdhaXQgaW1wb3J0KCdicmFjZScpO1xyXG4gICAgICB2YXIgZWRpdG9yID0gYWNlLmVkaXQod2luLmNvbnRlbnQpO1xyXG5cclxuICAgICAgaWYgKGRhdGEucGF0aC5zcGxpdCgnLicpLmF0KC0xKS5tYXRjaCgvKG18Y3wpKGpzKS8pKSB7XHJcbiAgICAgICAgLy9yZXF1aXJlKCdicmFjZS9tb2RlL2phdmFzY3JpcHQnKTtcclxuICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldE1vZGUoJ2FjZS9tb2RlL2phdmFzY3JpcHQnKTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhLnBhdGguc3BsaXQoJy4nKS5hdCgtMSkubWF0Y2goL2pzb24vKSkge1xyXG4gICAgICAgIC8vcmVxdWlyZSgnYnJhY2UvbW9kZS9qc29uJyk7XHJcbiAgICAgICAgZWRpdG9yLmdldFNlc3Npb24oKS5zZXRNb2RlKCdhY2UvbW9kZS9qc29uJyk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5wYXRoLnNwbGl0KCcuJykuYXQoLTEpLm1hdGNoKC8oaHRtKShsfCkvKSkge1xyXG4gICAgICAgIC8vcmVxdWlyZSgnYnJhY2UvbW9kZS9odG1sJyk7XHJcbiAgICAgICAgZWRpdG9yLmdldFNlc3Npb24oKS5zZXRNb2RlKCdhY2UvbW9kZS9odG1sJyk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5wYXRoLnNwbGl0KCcuJykuYXQoLTEpLm1hdGNoKC9jc3MvKSkge1xyXG4gICAgICAgIC8vcmVxdWlyZSgnYnJhY2UvbW9kZS9jc3MnKTtcclxuICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldE1vZGUoJ2FjZS9tb2RlL2NzcycpO1xyXG4gICAgICB9XHJcbiAgICAgIHJlcXVpcmUoJ2JyYWNlL3RoZW1lL21vbm9rYWknKTtcclxuICAgICAgZWRpdG9yLnNldFRoZW1lKCdhY2UvdGhlbWUvbW9ub2thaScpO1xyXG4gICAgICBcclxuICAgICAgZWRpdG9yLnNldFZhbHVlKChhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShkYXRhLnBhdGgpKS50b1N0cmluZygpKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcmV0dXJuIHdpbjtcclxuICB9XHJcbn0iLCJpbXBvcnQgeyBBcHAgfSBmcm9tICcuL3R5cGVzLnRzJztcclxuXHJcbmltcG9ydCBTZXR0aW5nc0FwcCBmcm9tICcuL2FwcHMvc2V0dGluZ3MudHMnO1xyXG5pbXBvcnQgRmlsZXNBcHAgZnJvbSAnLi9hcHBzL2ZpbGVzLnRzJztcclxuaW1wb3J0IE11c2ljQXBwIGZyb20gJy4vYXBwcy9tdXNpYy50cyc7XHJcbmltcG9ydCBFZGl0b3JBcHAgZnJvbSAnLi9hcHBzL2VkaXRvci50cyc7XHJcblxyXG5pbnRlcmZhY2UgRmxvdyB7XHJcbiAgYXBwczoge1xyXG4gICAgW2tleTogc3RyaW5nXTogQXBwXHJcbiAgfSxcclxuICBvcGVuQXBwOiBGdW5jdGlvbjtcclxufVxyXG5cclxuY29uc3QgZmxvdzogRmxvdyA9IHtcclxuICBhcHBzOiB7XHJcbiAgICBcImZsb3cuc2V0dGluZ3NcIjogbmV3IFNldHRpbmdzQXBwKCksXHJcbiAgICBcImZsb3cubXVzaWNcIjogbmV3IE11c2ljQXBwKCksXHJcbiAgICBcImZsb3cuZmlsZXNcIjogbmV3IEZpbGVzQXBwKCksXHJcbiAgICBcImZsb3cuZWRpdG9yXCI6IG5ldyBFZGl0b3JBcHAoKSxcclxuICB9LFxyXG4gIG9wZW5BcHAocGtnOiBzdHJpbmcsIGRhdGE6IGFueSkge1xyXG4gICAgY29uc3Qgd2luID0gdGhpcy5hcHBzW3BrZ10ub3BlbihkYXRhKTtcclxuICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdhcHBfb3BlbmVkJywgeyBkZXRhaWw6IHsgYXBwOiB0aGlzLmFwcHNbcGtnXSwgd2luIH0gfSk7XHJcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmbG93OyIsImltcG9ydCBmbG93IGZyb20gXCIuL2Zsb3cudHNcIjtcclxuXHJcbmludGVyZmFjZSBGbG93V2luZG93Q29uZmlnIHtcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIGljb246IHN0cmluZztcclxuXHJcbiAgd2lkdGg/OiBudW1iZXI7XHJcbiAgaGVpZ2h0PzogbnVtYmVyO1xyXG5cclxuICBtaW5XaWR0aD86IG51bWJlcjtcclxuICBtaW5IZWlnaHQ/OiBudW1iZXI7XHJcbn1cclxuXHJcbmxldCBmb2N1cyA9IHRydWU7XHJcblxyXG53aW5kb3cub25mb2N1cyA9ICgpID0+IGZvY3VzID0gdHJ1ZTtcclxud2luZG93Lm9uYmx1ciA9ICgpID0+IGZvY3VzID0gZmFsc2U7XHJcblxyXG5mdW5jdGlvbiBkcmFnRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCwgY29udGFpbmVyOiBIVE1MRWxlbWVudCkge1xyXG4gIHZhciBwb3NYID0gMCwgcG9zWSA9IDA7XHJcblxyXG4gIGVsZW1lbnQucXVlcnlTZWxlY3Rvcignd2luZG93LWhlYWRlcicpLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGRyYWdNb3VzZURvd24pO1xyXG5cclxuICBmdW5jdGlvbiBkcmFnTW91c2VEb3duKGU6IE1vdXNlRXZlbnQpIHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIGNsb3NlQWxsKCk7XHJcblxyXG4gICAgcG9zWCA9IGUuY2xpZW50WDtcclxuICAgIHBvc1kgPSBlLmNsaWVudFk7XHJcblxyXG4gICAgZG9jdW1lbnQub25tb3VzZXVwID0gY2xvc2VEcmFnRWxlbWVudDtcclxuICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZWxlbWVudERyYWc7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBlbGVtZW50RHJhZyhlOiBNb3VzZUV2ZW50KSB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgXHJcbiAgICAvLyBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIHRoZSBtb3VzZSBoYXMgbW92ZWRcclxuICAgIGNvbnN0IGR4ID0gZS5jbGllbnRYIC0gcG9zWDtcclxuICAgIGNvbnN0IGR5ID0gZS5jbGllbnRZIC0gcG9zWTtcclxuICBcclxuICAgIC8vIENhbGN1bGF0ZSB0aGUgbmV3IHBvc2l0aW9uIGZvciB0aGUgZWxlbWVudFxyXG4gICAgY29uc3QgbmV3VG9wID0gZWxlbWVudC5vZmZzZXRUb3AgKyBkeTtcclxuICAgIGNvbnN0IG5ld0xlZnQgPSBlbGVtZW50Lm9mZnNldExlZnQgKyBkeDtcclxuICBcclxuICAgIC8vIEdldCB0aGUgY29udGFpbmVyJ3MgZGltZW5zaW9uc1xyXG4gICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBjb250YWluZXIub2Zmc2V0V2lkdGg7XHJcbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSBjb250YWluZXIub2Zmc2V0SGVpZ2h0O1xyXG4gIFxyXG4gICAgLy8gRW5zdXJlIHRoZSBlbGVtZW50IHN0YXlzIHdpdGhpbiB0aGUgY29udGFpbmVyIGJvdW5kYXJpZXNcclxuICAgIGlmIChuZXdUb3AgPj0gMCAmJiBuZXdUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCA8PSBjb250YWluZXJIZWlnaHQpIHtcclxuICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBuZXdUb3AgKyBcInB4XCI7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBpZiAobmV3TGVmdCA+PSAwICYmIG5ld0xlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIDw9IGNvbnRhaW5lcldpZHRoKSB7XHJcbiAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IG5ld0xlZnQgKyBcInB4XCI7XHJcbiAgICB9XHJcbiAgXHJcbiAgICAvLyBVcGRhdGUgdGhlIGxhc3QgbW91c2UgcG9zaXRpb25cclxuICAgIHBvc1ggPSBlLmNsaWVudFg7XHJcbiAgICBwb3NZID0gZS5jbGllbnRZO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY2xvc2VEcmFnRWxlbWVudCgpIHtcclxuICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9IG51bGw7XHJcbiAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IG51bGw7XHJcbiAgICBjb250YWluZXIub25tb3VzZWxlYXZlID0gbnVsbDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNsb3NlQWxsICgpIHtcclxuICAgIGNsb3NlRHJhZ0VsZW1lbnQoKTtcclxuICAgIGNvbnRhaW5lci5vbm1vdXNlZW50ZXIgPSBudWxsO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEZsb3dXaW5kb3cge1xyXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xyXG5cclxuICBwcml2YXRlIGhlYWRlcjogSFRNTEVsZW1lbnQ7XHJcbiAgY29udGVudDogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIG1heGltaXplZDogYm9vbGVhbjtcclxuICBtaW5pbWl6ZWQ6IGJvb2xlYW47XHJcblxyXG4gIHdpZHRoOiBudW1iZXI7XHJcbiAgaGVpZ2h0OiBudW1iZXI7XHJcblxyXG4gIHdtOiBXTTtcclxuXHJcbiAgY29uZmlnOiBGbG93V2luZG93Q29uZmlnO1xyXG5cclxuICBjb25zdHJ1Y3Rvcih3bTogV00sIGNvbmZpZzogRmxvd1dpbmRvd0NvbmZpZykge1xyXG4gICAgdGhpcy53bSA9IHdtO1xyXG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XHJcblxyXG4gICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnd2luZG93Jyk7XHJcblxyXG4gICAgdGhpcy5lbGVtZW50LnN0eWxlLnpJbmRleCA9ICh3bS5nZXRIaWdoZXN0WkluZGV4KCkgKyAxKS50b1N0cmluZygpO1xyXG4gICAgdGhpcy5lbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuICAgIHRoaXMuZm9jdXMoKTtcclxuXHJcbiAgICB0aGlzLmVsZW1lbnQub25tb3VzZWRvd24gPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuZm9jdXMoKVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtjb25maWcud2lkdGggfHwgMzAwfXB4YDtcclxuICAgIHRoaXMuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtjb25maWcuaGVpZ2h0IHx8IDIwMH1weGA7XHJcblxyXG4gICAgdGhpcy5oZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd3aW5kb3ctaGVhZGVyJyk7XHJcbiAgICB0aGlzLmhlYWRlci5pbm5lckhUTUwgPSBgPGltZyBzcmM9XCIke2NvbmZpZy5pY29ufVwiPjwvaW1nPiA8ZGl2IGNsYXNzPVwidGl0bGVcIj4ke2NvbmZpZy50aXRsZX08L2Rpdj5gXHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnd2luZG93LWNvbnRlbnQnKTtcclxuICAgIFxyXG4gICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuaGVhZGVyKTtcclxuICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGRyYWdFbGVtZW50KHRoaXMuZWxlbWVudCwgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignd2luZG93LWFyZWEnKSk7XHJcbiAgfVxyXG5cclxuICBmb2N1cygpIHtcclxuICAgIGlmICh0aGlzLmVsZW1lbnQuc3R5bGUuekluZGV4ICE9PSB0aGlzLndtLmdldEhpZ2hlc3RaSW5kZXgoKS50b1N0cmluZygpKSB7XHJcbiAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS56SW5kZXggPSAodGhpcy53bS5nZXRIaWdoZXN0WkluZGV4KCkgKyAxKS50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGl0bGUodGl0bGU6IHN0cmluZykge1xyXG4gICAgKHRoaXMuaGVhZGVyLnF1ZXJ5U2VsZWN0b3IoJy50aXRsZScpIGFzIEhUTUxFbGVtZW50KS5pbm5lclRleHQgPSB0aXRsZTtcclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIFdNIHtcclxuICBsYXVuY2hlck9wZW4gPSBmYWxzZTtcclxuICBhcmVhOiBIVE1MRWxlbWVudDtcclxuICBsYXVuY2hlcjogSFRNTEVsZW1lbnQ7XHJcbiAgd2luZG93czogRmxvd1dpbmRvd1tdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5hcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnd2luZG93LWFyZWEnKTtcclxuICAgIHRoaXMubGF1bmNoZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYXVuY2hlcicpO1xyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SGlnaGVzdFpJbmRleCgpIHtcclxuICAgIGNvbnN0IGluZGV4ZXMgPSB0aGlzLndpbmRvd3MubWFwKCh3aW46IEZsb3dXaW5kb3cpID0+IHtcclxuICAgICAgaWYgKHdpbi5lbGVtZW50LnN0eWxlLnpJbmRleCA9PT0gJycpIHJldHVybjtcclxuICAgICAgcmV0dXJuIHBhcnNlSW50KHdpbi5lbGVtZW50LnN0eWxlLnpJbmRleCk7XHJcbiAgICB9KS5maWx0ZXIoeCA9PiB4ICE9PSB1bmRlZmluZWQpO1xyXG5cclxuICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KC4uLmluZGV4ZXMpO1xyXG5cclxuICAgIGlmIChtYXggPT09IC1JbmZpbml0eSkge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBtYXg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVXaW5kb3coY29uZmlnOiBGbG93V2luZG93Q29uZmlnKTogRmxvd1dpbmRvdyB7XHJcbiAgICBjb25zdCB3aW4gPSBuZXcgRmxvd1dpbmRvdyh0aGlzLCBjb25maWcpO1xyXG4gICAgdGhpcy53aW5kb3dzLnB1c2god2luKTtcclxuICAgIHRoaXMuYXJlYS5hcHBlbmRDaGlsZCh3aW4uZWxlbWVudCk7XHJcbiAgICByZXR1cm4gd2luO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlTGF1bmNoZXIoKSB7XHJcbiAgICBpZiAodGhpcy5sYXVuY2hlck9wZW4gPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5sYXVuY2hlci5zdHlsZS5vcGFjaXR5ID0gJzAnO1xyXG4gICAgICB0aGlzLmxhdW5jaGVyLnN0eWxlLmJhY2tkcm9wRmlsdGVyID0gJ2JsdXIoMHB4KSc7XHJcbiAgICAgIHRoaXMubGF1bmNoZXIuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubGF1bmNoZXIuc3R5bGUub3BhY2l0eSA9ICcxJztcclxuICAgICAgdGhpcy5sYXVuY2hlci5zdHlsZS5iYWNrZHJvcEZpbHRlciA9ICdibHVyKDIwcHgpJztcclxuICAgICAgdGhpcy5sYXVuY2hlci5zdHlsZS5wb2ludGVyRXZlbnRzID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxhdW5jaGVyT3BlbiA9ICF0aGlzLmxhdW5jaGVyT3BlbjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgaW5pdCgpIHtcclxuICAgIHRoaXMubGF1bmNoZXIuaW5uZXJIVE1MID0gYFxyXG4gICAgICA8aW5wdXQgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIi8+XHJcbiAgICAgIDxhcHBzPjwvYXBwcz5cclxuICAgIGA7XHJcblxyXG4gICAgdGhpcy5sYXVuY2hlci5vbmNsaWNrID0gKGUpID0+IHtcclxuICAgICAgaWYoZS50YXJnZXQgIT09IGUuY3VycmVudFRhcmdldCkgcmV0dXJuO1xyXG4gICAgICB0aGlzLnRvZ2dsZUxhdW5jaGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgKHRoaXMubGF1bmNoZXIucXVlcnlTZWxlY3RvcignYXBwcycpIGFzIEhUTUxFbGVtZW50KS5vbmNsaWNrID0gKGUpID0+IHtcclxuICAgICAgaWYoZS50YXJnZXQgIT09IGUuY3VycmVudFRhcmdldCkgcmV0dXJuO1xyXG4gICAgICB0aGlzLnRvZ2dsZUxhdW5jaGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5sYXVuY2hlci5zdHlsZS5vcGFjaXR5ID0gJzAnO1xyXG4gICAgdGhpcy5sYXVuY2hlci5zdHlsZS5maWx0ZXIgPSAnYmx1cigwcHgpJztcclxuICAgIHRoaXMubGF1bmNoZXIuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuXHJcbiAgICBmb3IgKGNvbnN0IHBrZyBpbiBmbG93LmFwcHMpIHtcclxuICAgICAgY29uc3QgYXBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXBwJyk7XHJcbiAgICAgIGFwcC5vbmNsaWNrID0gKCkgPT4ge1xyXG4gICAgICAgIGZsb3cub3BlbkFwcChwa2cpO1xyXG4gICAgICAgIHRoaXMudG9nZ2xlTGF1bmNoZXIoKTtcclxuICAgICAgfVxyXG4gICAgICBhcHAuaW5uZXJIVE1MID0gYDxpbWcgc3JjPVwiJHtmbG93LmFwcHNbcGtnXS5pY29ufVwiPjxkaXY+JHtmbG93LmFwcHNbcGtnXS5uYW1lfTwvZGl2PmBcclxuICAgICAgdGhpcy5sYXVuY2hlci5xdWVyeVNlbGVjdG9yKCdhcHBzJykuYXBwZW5kQ2hpbGQoYXBwKTtcclxuICAgIH1cclxuXHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuYXJlYSk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMubGF1bmNoZXIpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgV007IiwiaW1wb3J0ICcuL3N0eWxlLmxlc3MnO1xyXG5cclxuaW1wb3J0IFN0YXR1c0JhciBmcm9tICcuL3N0YXR1c2Jhci50cyc7XHJcbmltcG9ydCBXTSBmcm9tICcuL3dtLnRzJztcclxuXHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICB2YXIgd206IFdNO1xyXG4gIHZhciBzdGF0dXNCYXI6IFN0YXR1c0JhcjtcclxufVxyXG5cclxud2luZG93LnN0YXR1c0JhciA9IG5ldyBTdGF0dXNCYXIoKTtcclxud2luZG93LndtID0gbmV3IFdNKCk7Il0sIm5hbWVzIjpbImxlYWZQcm90b3R5cGVzIiwiZ2V0UHJvdG8iLCJpblByb2dyZXNzIiwiZGF0YVdlYnBhY2tQcmVmaXgiLCJfX19DU1NfTE9BREVSX0VYUE9SVF9fXyIsInB1c2giLCJtb2R1bGUiLCJpZCIsIktFWVdPUkRTIiwiZGVmaW5lS2V5d29yZHMiLCJhanYiLCJrZXl3b3JkIiwiQXJyYXkiLCJpc0FycmF5IiwiaSIsImxlbmd0aCIsImdldCIsImRlZkZ1bmMiLCJFcnJvciIsImV4cG9ydHMiLCJUSU1FIiwiREFURV9USU1FX1NFUEFSQVRPUiIsIkNPTVBBUkVfRk9STUFUUyIsImRhdGUiLCJjb21wYXJlRGF0ZSIsInRpbWUiLCJjb21wYXJlVGltZSIsImR0MSIsImR0MiIsInNwbGl0IiwicmVzIiwidW5kZWZpbmVkIiwiJGRhdGFNZXRhU2NoZW1hIiwidHlwZSIsInJlcXVpcmVkIiwicHJvcGVydGllcyIsIiRkYXRhIiwiYW55T2YiLCJmb3JtYXQiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsImQxIiwiZDIiLCJ0MSIsInQyIiwibWF0Y2giLCJtaW5NYXgiLCJkZWZpbml0aW9uIiwiaW5saW5lIiwic3RhdGVtZW50cyIsImVycm9ycyIsImRlcGVuZGVuY2llcyIsIm1ldGFTY2hlbWEiLCJhZGRLZXl3b3JkIiwiZm9ybWF0cyIsIl9mb3JtYXRzIiwibmFtZSIsIlJlZ0V4cCIsInZhbGlkYXRlIiwiY29tcGFyZSIsImV4dGVuZEZvcm1hdHMiLCJtZXRhU2NoZW1hUmVmIiwiZGVmYXVsdE1ldGEiLCJfb3B0cyIsIiRyZWYiLCJnZXRTY2hlbWEiLCJNRVRBX1NDSEVNQV9JRCIsImNvbnNvbGUiLCJ3YXJuIiwibWFjcm8iLCJzY2hlbWEiLCJwYXJlbnRTY2hlbWEiLCJPYmplY3QiLCJrZXlzIiwibWFwIiwicHJvcCIsIml0ZW1zIiwidXRpbCIsImpzb25Qb2ludGVyIiwic2VnbWVudHMiLCJyb290U2NoZW1hIiwicG9pbnRlclNjaGVtYSIsInNlZ21lbnQiLCJpc0xhc3QiLCJyZXBsYWNlIiwidGVzdCIsImNvdW50Iiwic2NoZW1hcyIsInBvaW50ZXIiLCJwcm9wZXJ0eU5hbWVzIiwiZ2V0RGF0YSIsImx2bCIsImRhdGEiLCJrZXkiLCJleHByIiwiSU5URUdFUiIsIklERU5USUZJRVIiLCJTSU5HTEVfUVVPVEUiLCJpdCIsImRhdGFMZXZlbCIsIiRrZXl3b3JkIiwiJHJ1bGVUeXBlIiwib3V0IiwiJGx2bCIsImxldmVsIiwiJGRhdGFMdmwiLCIkc2NoZW1hIiwiJHNjaGVtYVBhdGgiLCJzY2hlbWFQYXRoIiwiZ2V0UHJvcGVydHkiLCIkZXJyU2NoZW1hUGF0aCIsImVyclNjaGVtYVBhdGgiLCIkYnJlYWtPbkVycm9yIiwib3B0cyIsImFsbEVycm9ycyIsIiR2YWxpZCIsIiRzY2hlbWFGb3JtYXQiLCIkaXNEYXRhRm9ybWF0IiwiJGNsb3NpbmdCcmFjZXMiLCIkZm9ybWF0IiwiZGF0YVBhdGhBcnIiLCIkY29tcGFyZSIsIiRzY2hlbWFWYWx1ZSIsIiQkb3V0U3RhY2siLCIkaXNNYXgiLCIkZXhjbHVzaXZlS2V5d29yZCIsIiRzY2hlbWFFeGNsIiwiJGlzRGF0YUV4Y2wiLCIkb3AiLCIkcmVzdWx0IiwiJGlzRGF0YSIsIiRzY2hlbWFWYWx1ZUV4Y2wiLCIkZXhjbHVzaXZlIiwiJG9wU3RyIiwiJG9wRXhwciIsIiRlcnJvcktleXdvcmQiLCJjcmVhdGVFcnJvcnMiLCJ0b1F1b3RlZFN0cmluZyIsIm1lc3NhZ2VzIiwidmVyYm9zZSIsIl9fZXJyIiwicG9wIiwiY29tcG9zaXRlUnVsZSIsImFzeW5jIiwiZXNjYXBlUXVvdGVzIiwiJGtleSIsIiRpZHgiLCIkbWF0Y2hlZCIsIiRkYXRhUHJvcGVydGllcyIsIiRvd25Qcm9wZXJ0aWVzIiwib3duUHJvcGVydGllcyIsImFycjEiLCIkcFByb3BlcnR5IiwiaTEiLCJsMSIsInVzZVBhdHRlcm4iLCIkbWlzc2luZ1BhdHRlcm4iLCIkZXJycyIsIiRpdCIsImNvcHkiLCIkc2hvdWxkQ29udGludWUiLCIkbmV4dFZhbGlkIiwiJGlmUGFzc2VkIiwiJGN1cnJlbnRCYXNlSWQiLCJiYXNlSWQiLCIkc2NoIiwiJGNhc2VJbmRleCIsImlmIiwic3RyaWN0S2V5d29yZHMiLCJzY2hlbWFIYXNSdWxlcyIsIlJVTEVTIiwiYWxsIiwiJHdhc0NvbXBvc2l0ZSIsInRoZW4iLCJjb250aW51ZSIsInNlcXVlbmNlcyIsIkRFRkFVTFRTIiwidGltZXN0YW1wIiwiRGF0ZSIsIm5vdyIsImRhdGV0aW1lIiwidG9JU09TdHJpbmciLCJzbGljZSIsInJhbmRvbSIsIk1hdGgiLCJyYW5kb21pbnQiLCJhcmdzIiwibGltaXQiLCJtYXgiLCJmbG9vciIsInNlcSIsImNvbXBpbGUiLCJmdW5jcyIsImQiLCJmdW5jIiwiZ2V0RGVmYXVsdCIsInVzZURlZmF1bHRzIiwiZGVmIiwicmFuZ2UiLCJyZWdleHAiLCJkeW5hbWljRGVmYXVsdHMiLCJhbGxSZXF1aXJlZCIsImFueVJlcXVpcmVkIiwib25lUmVxdWlyZWQiLCJwcm9oaWJpdGVkIiwidW5pcXVlSXRlbVByb3BlcnRpZXMiLCJkZWVwUHJvcGVydGllcyIsImRlZXBSZXF1aXJlZCIsImZvcm1hdE1pbmltdW0iLCJmb3JtYXRNYXhpbXVtIiwicGF0dGVyblJlcXVpcmVkIiwic2VsZWN0IiwidHJhbnNmb3JtIiwiQ09OU1RSVUNUT1JTIiwiRnVuY3Rpb24iLCJOdW1iZXIiLCJTdHJpbmciLCJCdWZmZXIiLCJQcm9taXNlIiwiQ29uc3RydWN0b3IiLCJnZXRDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9ycyIsImMiLCJvbmVPZiIsInVuaXF1ZUl0ZW1zIiwibm90IiwibWluIiwiZXhjbHVzaXZlIiwiZXhjbHVzaXZlUmFuZ2UiLCJ2YWxpZGF0ZVJhbmdlU2NoZW1hIiwiZXhjbHVzaXZlTWluaW11bSIsImV4Y2x1c2l2ZU1heGltdW0iLCJtaW5pbXVtIiwibWF4aW11bSIsIm1pbkl0ZW1zIiwibWF4SXRlbXMiLCJwYXR0ZXJuIiwiZmxhZ3MiLCJyeCIsImUiLCJlcnJvciIsImdldFJlZ0V4cCIsImNvbXBpbGVkQ2FzZVNjaGVtYXMiLCJ2Iiwic2VsZWN0Q2FzZXMiLCJjb21waWxlZCIsImdldENvbXBpbGVkU2NoZW1hcyIsImNhc2VzIiwiZGVmYXVsdCIsInZhbGlkIiwidmFsdWUiLCJjb21waWxlT3JCb29sZWFuIiwiY3JlYXRlIiwic29tZSIsImtleXdvcmRzIiwic3dpdGNoIiwidHJpbUxlZnQiLCJ0cmltUmlnaHQiLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJ0b1VwcGVyQ2FzZSIsInRvRW51bUNhc2UiLCJjZmciLCJoYXNoIiwibWFrZUhhc2hUYWJsZUtleSIsIm1vZGlmeWluZyIsImluZGV4T2YiLCJlbnVtIiwiayIsImRhdGFQYXRoIiwib2JqZWN0IiwiaiIsImwiLCJLTk9XTl9UWVBFUyIsIlNDQUxBUl9UWVBFUyIsImVxdWFsIiwic2NhbGFyIiwicHJvcFR5cGUiLCJnZXRTY2FsYXJLZXlzIiwiY29tcGlsZVNjaGVtYSIsInJlc29sdmUiLCJDYWNoZSIsIlNjaGVtYU9iamVjdCIsInN0YWJsZVN0cmluZ2lmeSIsInJ1bGVzIiwiQWp2IiwicHJvdG90eXBlIiwic2NoZW1hS2V5UmVmIiwidGhpcyIsInNjaGVtYU9iaiIsIl9hZGRTY2hlbWEiLCJfY29tcGlsZSIsIiRhc3luYyIsIl9tZXRhIiwiYWRkU2NoZW1hIiwiX3NraXBWYWxpZGF0aW9uIiwiX2dldElkIiwiY2hlY2tVbmlxdWUiLCJub3JtYWxpemVJZCIsIl9zY2hlbWFzIiwiYWRkTWV0YVNjaGVtYSIsInNraXBWYWxpZGF0aW9uIiwidmFsaWRhdGVTY2hlbWEiLCJ0aHJvd09yTG9nRXJyb3IiLCJzZWxmIiwibWV0YSIsImxvZ2dlciIsIm1lc3NhZ2UiLCJlcnJvcnNUZXh0Iiwia2V5UmVmIiwiX2dldFNjaGVtYU9iaiIsInJlZiIsImNhbGwiLCJyb290IiwiX2ZyYWdtZW50cyIsImZyYWdtZW50IiwiX2dldFNjaGVtYUZyYWdtZW50IiwicmVtb3ZlU2NoZW1hIiwiX3JlbW92ZUFsbFNjaGVtYXMiLCJfcmVmcyIsIl9jYWNoZSIsImNsZWFyIiwiZGVsIiwiY2FjaGVLZXkiLCJzZXJpYWxpemUiLCJhZGRGb3JtYXQiLCJvcHRpb25zIiwic2VwYXJhdG9yIiwiZGF0YVZhciIsInRleHQiLCJzaG91bGRBZGRTY2hlbWEiLCJjYWNoZWQiLCJhZGRVc2VkU2NoZW1hIiwicmVjdXJzaXZlTWV0YSIsIndpbGxWYWxpZGF0ZSIsImxvY2FsUmVmcyIsImlkcyIsInB1dCIsImNvbXBpbGluZyIsImNhbGxWYWxpZGF0ZSIsImN1cnJlbnRPcHRzIiwiX21ldGFPcHRzIiwicmVmcyIsInJlZlZhbCIsIl92YWxpZGF0ZSIsInJlc3VsdCIsImFwcGx5IiwiYXJndW1lbnRzIiwiY29tcGlsZUFzeW5jIiwiY3VzdG9tS2V5d29yZCIsImFkZCIsImdldEtleXdvcmQiLCJyZW1vdmVLZXl3b3JkIiwicmVtb3ZlIiwidmFsaWRhdGVLZXl3b3JkIiwiZXJyb3JDbGFzc2VzIiwiVmFsaWRhdGlvbkVycm9yIiwiVmFsaWRhdGlvbiIsIk1pc3NpbmdSZWZFcnJvciIsIk1pc3NpbmdSZWYiLCJNRVRBX0lHTk9SRV9PUFRJT05TIiwiTUVUQV9TVVBQT1JUX0RBVEEiLCJsb2ciLCJub29wIiwic2V0TG9nZ2VyIiwiY2FjaGUiLCJfbG9hZGluZ1NjaGVtYXMiLCJfY29tcGlsYXRpb25zIiwic2NoZW1hSWQiLCJfZ2V0JElkT3JJZCIsIl9nZXQkSWQiLCJjaG9vc2VHZXRJZCIsImxvb3BSZXF1aXJlZCIsIkluZmluaXR5IiwiZXJyb3JEYXRhUGF0aCIsIl9lcnJvckRhdGFQYXRoUHJvcGVydHkiLCJtZXRhT3B0cyIsImdldE1ldGFTY2hlbWFPcHRpb25zIiwiYWRkSW5pdGlhbEZvcm1hdHMiLCJhZGRJbml0aWFsS2V5d29yZHMiLCIkZGF0YVNjaGVtYSIsIiRpZCIsImFkZERlZmF1bHRNZXRhU2NoZW1hIiwibnVsbGFibGUiLCJvcHRzU2NoZW1hcyIsImFkZEluaXRpYWxTY2hlbWFzIiwicmVnZXgiLCJjYWxsYmFjayIsImxvYWRTY2hlbWEiLCJwIiwibG9hZE1ldGFTY2hlbWFPZiIsIl9jb21waWxlQXN5bmMiLCJzY2giLCJtaXNzaW5nU2NoZW1hIiwiYWRkZWQiLCJtaXNzaW5nUmVmIiwic2NoZW1hUHJvbWlzZSIsInJlbW92ZVByb21pc2UiLCJsb2FkTWlzc2luZ1NjaGVtYSIsInVybCIsImZ1bGxQYXRoIiwiZXJyb3JTdWJjbGFzcyIsIlN1YmNsYXNzIiwiY29uc3RydWN0b3IiLCJ2YWxpZGF0aW9uIiwiREFURSIsIkRBWVMiLCJIT1NUTkFNRSIsIlVSSSIsIlVSSVRFTVBMQVRFIiwiVVJMIiwiVVVJRCIsIkpTT05fUE9JTlRFUiIsIkpTT05fUE9JTlRFUl9VUklfRlJBR01FTlQiLCJSRUxBVElWRV9KU09OX1BPSU5URVIiLCJtb2RlIiwic3RyIiwibWF0Y2hlcyIsInllYXIiLCJtb250aCIsImRheSIsImlzTGVhcFllYXIiLCJmdWxsIiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsInRpbWVab25lIiwiZmFzdCIsInVyaSIsImVtYWlsIiwiaG9zdG5hbWUiLCJpcHY0IiwiaXB2NiIsInV1aWQiLCJkYXRlVGltZSIsIk5PVF9VUklfRlJBR01FTlQiLCJaX0FOQ0hPUiIsInZhbGlkYXRlR2VuZXJhdG9yIiwidWNzMmxlbmd0aCIsImNoZWNrQ29tcGlsaW5nIiwiaW5kZXgiLCJjb21wSW5kZXgiLCJlbmRDb21waWxpbmciLCJzcGxpY2UiLCJwYXR0ZXJuQ29kZSIsInBhdHRlcm5zIiwiZGVmYXVsdENvZGUiLCJyZWZWYWxDb2RlIiwiY3VzdG9tUnVsZUNvZGUiLCJ2YXJzIiwiYXJyIiwic3RhdGVtZW50IiwiY29kZSIsInBhdHRlcm5zSGFzaCIsImRlZmF1bHRzIiwiZGVmYXVsdHNIYXNoIiwiY3VzdG9tUnVsZXMiLCJjb21waWxhdGlvbiIsImxvY2FsQ29tcGlsZSIsImN2Iiwic291cmNlQ29kZSIsInNvdXJjZSIsIl9zY2hlbWEiLCJfcm9vdCIsImlzUm9vdCIsImlzVG9wIiwiZXJyb3JQYXRoIiwicmVzb2x2ZVJlZiIsInVzZURlZmF1bHQiLCJ1c2VDdXN0b21SdWxlIiwicHJvY2Vzc0NvZGUiLCJtYWtlVmFsaWRhdGUiLCJfcmVmVmFsIiwicmVmQ29kZSIsInJlZkluZGV4IiwicmVzb2x2ZWRSZWYiLCJyb290UmVmSWQiLCJhZGRMb2NhbFJlZiIsImxvY2FsU2NoZW1hIiwiaW5saW5lUmVmIiwiaW5saW5lUmVmcyIsInJlZklkIiwicmVwbGFjZUxvY2FsUmVmIiwicmVtb3ZlTG9jYWxSZWYiLCJyZWdleFN0ciIsInZhbHVlU3RyIiwicnVsZSIsImRlcHMiLCJldmVyeSIsImhhc093blByb3BlcnR5Iiwiam9pbiIsInRyYXZlcnNlIiwicmVzb2x2ZVNjaGVtYSIsInBhcnNlIiwicmVmUGF0aCIsIl9nZXRGdWxsUGF0aCIsImdldEZ1bGxQYXRoIiwicmVzb2x2ZVJlY3Vyc2l2ZSIsImdldEpzb25Qb2ludGVyIiwicGFyc2VkUmVmIiwicmVzb2x2ZVVybCIsImJhc2VJZHMiLCJmdWxsUGF0aHMiLCJhbGxLZXlzIiwianNvblB0ciIsInBhcmVudEpzb25QdHIiLCJwYXJlbnRLZXl3b3JkIiwia2V5SW5kZXgiLCJlc2NhcGVGcmFnbWVudCIsIlBSRVZFTlRfU0NPUEVfQ0hBTkdFIiwidG9IYXNoIiwicGFydHMiLCJwYXJ0IiwidW5lc2NhcGVGcmFnbWVudCIsIlNJTVBMRV9JTkxJTkVEIiwiY2hlY2tOb1JlZiIsImNvdW50S2V5cyIsIml0ZW0iLCJub3JtYWxpemUiLCJUUkFJTElOR19TTEFTSF9IQVNIIiwicnVsZU1vZHVsZXMiLCJBTEwiLCJ0eXBlcyIsImZvckVhY2giLCJncm91cCIsImltcGxLZXl3b3JkcyIsImltcGxlbWVudHMiLCIkY29tbWVudCIsImNvbmNhdCIsImN1c3RvbSIsIm9iaiIsImxlbiIsInBvcyIsImNoYXJDb2RlQXQiLCJjaGVja0RhdGFUeXBlIiwiZGF0YVR5cGUiLCJzdHJpY3ROdW1iZXJzIiwibmVnYXRlIiwiRVFVQUwiLCJBTkQiLCJPSyIsIk5PVCIsIm8iLCJ0byIsImNoZWNrRGF0YVR5cGVzIiwiZGF0YVR5cGVzIiwidCIsImFycmF5IiwibnVsbCIsIm51bWJlciIsImludGVnZXIiLCJjb2VyY2VUb1R5cGVzIiwib3B0aW9uQ29lcmNlVHlwZXMiLCJDT0VSQ0VfVE9fVFlQRVMiLCJ2YXJPY2N1cmVuY2VzIiwidmFyUmVwbGFjZSIsInNjaGVtYUhhc1J1bGVzRXhjZXB0IiwiZXhjZXB0S2V5d29yZCIsInNjaGVtYVVua25vd25SdWxlcyIsImdldFBhdGhFeHByIiwiY3VycmVudFBhdGgiLCJqc29uUG9pbnRlcnMiLCJpc051bWJlciIsImpvaW5QYXRocyIsImdldFBhdGgiLCJlc2NhcGVKc29uUG9pbnRlciIsInBhdGhzIiwidXAiLCJ1bmVzY2FwZUpzb25Qb2ludGVyIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiYSIsImIiLCJrZXl3b3Jkc0pzb25Qb2ludGVycyIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWZpbml0aW9ucyIsInNpbXBsZVR5cGVzIiwiY29uc3QiLCIkbm90T3AiLCIkZXhjbFR5cGUiLCIkZXhjbElzTnVtYmVyIiwidW5pY29kZSIsIiRhbGxTY2hlbWFzRW1wdHkiLCIkaSIsIiRub0VtcHR5U2NoZW1hIiwiJGRhdGFOeHQiLCIkbmV4dERhdGEiLCIkbm9uRW1wdHlTY2hlbWEiLCIkcGFzc0RhdGEiLCIkY29kZSIsIiRjb21waWxlIiwiJGlubGluZSIsIiRtYWNybyIsIiRydWxlVmFsaWRhdGUiLCIkdmFsaWRhdGVDb2RlIiwiJHJ1bGUiLCIkZGVmaW5pdGlvbiIsIiRyRGVmIiwiJHZhbGlkYXRlU2NoZW1hIiwiJHJ1bGVFcnJzIiwiJHJ1bGVFcnIiLCIkYXN5bmNLZXl3b3JkIiwicGFzc0NvbnRleHQiLCIkcGFyZW50RGF0YSIsIiRwYXJlbnREYXRhUHJvcGVydHkiLCJkZWZfY2FsbFJ1bGVWYWxpZGF0ZSIsImRlZl9jdXN0b21FcnJvciIsIiRzY2hlbWFEZXBzIiwiJHByb3BlcnR5RGVwcyIsIiRwcm9wZXJ0eSIsIiRkZXBzIiwiJGN1cnJlbnRFcnJvclBhdGgiLCIkcHJvcGVydHlLZXkiLCIkdXNlRGF0YSIsIiRwcm9wIiwiJHByb3BlcnR5UGF0aCIsIiRtaXNzaW5nUHJvcGVydHkiLCJhcnIyIiwiaTIiLCJsMiIsIiR2U2NoZW1hIiwiJHVua25vd25Gb3JtYXRzIiwidW5rbm93bkZvcm1hdHMiLCIkYWxsb3dVbmtub3duIiwiJGlzT2JqZWN0IiwiJGZvcm1hdFR5cGUiLCIkZm9ybWF0UmVmIiwiJHRoZW5TY2giLCIkZWxzZVNjaCIsIiR0aGVuUHJlc2VudCIsIiRlbHNlUHJlc2VudCIsIiRpZkNsYXVzZSIsImFsbE9mIiwiY29udGFpbnMiLCJtYXhMZW5ndGgiLCJtaW5MZW5ndGgiLCJtYXhQcm9wZXJ0aWVzIiwibWluUHJvcGVydGllcyIsIm11bHRpcGxlT2YiLCIkYWRkaXRpb25hbEl0ZW1zIiwiYWRkaXRpb25hbEl0ZW1zIiwiJGN1cnJFcnJTY2hlbWFQYXRoIiwibXVsdGlwbGVPZlByZWNpc2lvbiIsIiRhbGxFcnJvcnNPcHRpb24iLCIkcHJldlZhbGlkIiwiJHBhc3NpbmdTY2hlbWFzIiwiJHNjaGVtYUtleXMiLCJmaWx0ZXIiLCJub3RQcm90byIsIiRwUHJvcGVydGllcyIsInBhdHRlcm5Qcm9wZXJ0aWVzIiwiJHBQcm9wZXJ0eUtleXMiLCIkYVByb3BlcnRpZXMiLCIkc29tZVByb3BlcnRpZXMiLCIkbm9BZGRpdGlvbmFsIiwiJGFkZGl0aW9uYWxJc1NjaGVtYSIsIiRyZW1vdmVBZGRpdGlvbmFsIiwicmVtb3ZlQWRkaXRpb25hbCIsIiRjaGVja0FkZGl0aW9uYWwiLCIkcmVxdWlyZWQiLCIkcmVxdWlyZWRIYXNoIiwiJGFkZGl0aW9uYWxQcm9wZXJ0eSIsIiR1c2VEZWZhdWx0cyIsImFycjMiLCJpMyIsImwzIiwiJGhhc0RlZmF1bHQiLCJhcnI0IiwiaTQiLCJsNCIsIiRpbnZhbGlkTmFtZSIsIiRyZWZDb2RlIiwiJHJlZlZhbCIsIiRtZXNzYWdlIiwibWlzc2luZ1JlZnMiLCJfX2NhbGxWYWxpZGF0ZSIsIiRwcm9wZXJ0eVNjaCIsIiRsb29wUmVxdWlyZWQiLCIkaXRlbVR5cGUiLCIkdHlwZUlzQXJyYXkiLCIkbWV0aG9kIiwiJHJlZktleXdvcmRzIiwiJHVua25vd25Ld2QiLCIka2V5d29yZHNNc2ciLCIkdG9wIiwicm9vdElkIiwic3RyaWN0RGVmYXVsdHMiLCIkZGVmYXVsdE1zZyIsIiRjbG9zaW5nQnJhY2VzMSIsIiRjbG9zaW5nQnJhY2VzMiIsIiR0eXBlU2NoZW1hIiwiZXh0ZW5kUmVmcyIsImNvZXJjZVR5cGVzIiwiJGNvZXJjZVRvVHlwZXMiLCIkcnVsZXNHcm91cCIsIiRzaG91bGRVc2VHcm91cCIsIiRkYXRhVHlwZSIsIiRjb2VyY2VkIiwiJHR5cGUiLCJhcnI1IiwiaTUiLCJsNSIsIiRzaG91bGRVc2VSdWxlIiwiaW1wbCIsIiRydWxlSW1wbGVtZW50c1NvbWVLZXl3b3JkIiwiZGVmaW5pdGlvblNjaGVtYSIsIl9hZGRSdWxlIiwicnVsZUdyb3VwIiwicmciLCJ0aHJvd0Vycm9yIiwiX3ZhbGlkYXRlS2V5d29yZCIsImJhbGFuY2VkIiwibWF5YmVNYXRjaCIsInIiLCJzdGFydCIsImVuZCIsInByZSIsImJvZHkiLCJwb3N0IiwicmVnIiwibSIsImJlZ3MiLCJiZWciLCJsZWZ0IiwicmlnaHQiLCJhaSIsImJpIiwiYnl0ZUxlbmd0aCIsImI2NCIsImxlbnMiLCJnZXRMZW5zIiwidmFsaWRMZW4iLCJwbGFjZUhvbGRlcnNMZW4iLCJ0b0J5dGVBcnJheSIsInRtcCIsIkFyciIsIl9ieXRlTGVuZ3RoIiwiY3VyQnl0ZSIsInJldkxvb2t1cCIsImZyb21CeXRlQXJyYXkiLCJ1aW50OCIsImV4dHJhQnl0ZXMiLCJtYXhDaHVua0xlbmd0aCIsImxlbjIiLCJlbmNvZGVDaHVuayIsImxvb2t1cCIsIlVpbnQ4QXJyYXkiLCJudW0iLCJvdXRwdXQiLCJjb25jYXRNYXAiLCJzdWJzdHIiLCJleHBhbmQiLCJlc2NTbGFzaCIsImVzY09wZW4iLCJlc2NDbG9zZSIsImVzY0NvbW1hIiwiZXNjUGVyaW9kIiwiZXNjYXBlQnJhY2VzIiwidW5lc2NhcGVCcmFjZXMiLCJudW1lcmljIiwicGFyc2VJbnQiLCJwYXJzZUNvbW1hUGFydHMiLCJwb3N0UGFydHMiLCJzaGlmdCIsImVtYnJhY2UiLCJpc1BhZGRlZCIsImVsIiwibHRlIiwieSIsImd0ZSIsImV4cGFuc2lvbnMiLCJuIiwiaXNOdW1lcmljU2VxdWVuY2UiLCJpc0FscGhhU2VxdWVuY2UiLCJpc1NlcXVlbmNlIiwiaXNPcHRpb25zIiwiTiIsIngiLCJ3aWR0aCIsImluY3IiLCJhYnMiLCJwYWQiLCJmcm9tQ2hhckNvZGUiLCJuZWVkIiwieiIsImV4cGFuc2lvbiIsImFjZSIsImRlZmluZSIsImFjZXF1aXJlIiwiaXNEYXJrIiwiY3NzQ2xhc3MiLCJjc3NUZXh0IiwiaW1wb3J0Q3NzU3RyaW5nIiwiYmFzZTY0IiwiaWVlZTc1NCIsImN1c3RvbUluc3BlY3RTeW1ib2wiLCJTeW1ib2wiLCJLX01BWF9MRU5HVEgiLCJjcmVhdGVCdWZmZXIiLCJSYW5nZUVycm9yIiwiYnVmIiwic2V0UHJvdG90eXBlT2YiLCJhcmciLCJlbmNvZGluZ09yT2Zmc2V0IiwiVHlwZUVycm9yIiwiYWxsb2NVbnNhZmUiLCJmcm9tIiwic3RyaW5nIiwiZW5jb2RpbmciLCJpc0VuY29kaW5nIiwiYWN0dWFsIiwid3JpdGUiLCJmcm9tU3RyaW5nIiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJhcnJheVZpZXciLCJpc0luc3RhbmNlIiwiZnJvbUFycmF5QnVmZmVyIiwiYnVmZmVyIiwiYnl0ZU9mZnNldCIsImZyb21BcnJheUxpa2UiLCJmcm9tQXJyYXlWaWV3IiwiU2hhcmVkQXJyYXlCdWZmZXIiLCJ2YWx1ZU9mIiwiaXNCdWZmZXIiLCJjaGVja2VkIiwibnVtYmVySXNOYU4iLCJmcm9tT2JqZWN0IiwidG9QcmltaXRpdmUiLCJhc3NlcnRTaXplIiwic2l6ZSIsInRvU3RyaW5nIiwibXVzdE1hdGNoIiwibG93ZXJlZENhc2UiLCJ1dGY4VG9CeXRlcyIsImJhc2U2NFRvQnl0ZXMiLCJzbG93VG9TdHJpbmciLCJoZXhTbGljZSIsInV0ZjhTbGljZSIsImFzY2lpU2xpY2UiLCJsYXRpbjFTbGljZSIsImJhc2U2NFNsaWNlIiwidXRmMTZsZVNsaWNlIiwic3dhcCIsImJpZGlyZWN0aW9uYWxJbmRleE9mIiwidmFsIiwiZGlyIiwiYXJyYXlJbmRleE9mIiwibGFzdEluZGV4T2YiLCJpbmRleFNpemUiLCJhcnJMZW5ndGgiLCJ2YWxMZW5ndGgiLCJyZWFkIiwicmVhZFVJbnQxNkJFIiwiZm91bmRJbmRleCIsImZvdW5kIiwiaGV4V3JpdGUiLCJvZmZzZXQiLCJyZW1haW5pbmciLCJzdHJMZW4iLCJwYXJzZWQiLCJ1dGY4V3JpdGUiLCJibGl0QnVmZmVyIiwiYXNjaWlXcml0ZSIsImJ5dGVBcnJheSIsImFzY2lpVG9CeXRlcyIsImJhc2U2NFdyaXRlIiwidWNzMldyaXRlIiwidW5pdHMiLCJoaSIsImxvIiwidXRmMTZsZVRvQnl0ZXMiLCJmaXJzdEJ5dGUiLCJjb2RlUG9pbnQiLCJieXRlc1BlclNlcXVlbmNlIiwic2Vjb25kQnl0ZSIsInRoaXJkQnl0ZSIsImZvdXJ0aEJ5dGUiLCJ0ZW1wQ29kZVBvaW50IiwiY29kZVBvaW50cyIsIk1BWF9BUkdVTUVOVFNfTEVOR1RIIiwiZGVjb2RlQ29kZVBvaW50c0FycmF5IiwiVFlQRURfQVJSQVlfU1VQUE9SVCIsInByb3RvIiwiZm9vIiwidHlwZWRBcnJheVN1cHBvcnQiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJwb29sU2l6ZSIsImFsbG9jIiwiZmlsbCIsImFsbG9jVW5zYWZlU2xvdyIsIl9pc0J1ZmZlciIsImxpc3QiLCJzZXQiLCJzd2FwMTYiLCJzd2FwMzIiLCJzd2FwNjQiLCJ0b0xvY2FsZVN0cmluZyIsImVxdWFscyIsImluc3BlY3QiLCJ0YXJnZXQiLCJ0aGlzU3RhcnQiLCJ0aGlzRW5kIiwidGhpc0NvcHkiLCJ0YXJnZXRDb3B5IiwiaW5jbHVkZXMiLCJpc0Zpbml0ZSIsInRvSlNPTiIsIl9hcnIiLCJyZXQiLCJoZXhTbGljZUxvb2t1cFRhYmxlIiwiYnl0ZXMiLCJjaGVja09mZnNldCIsImV4dCIsImNoZWNrSW50Iiwid3J0QmlnVUludDY0TEUiLCJjaGVja0ludEJJIiwiQmlnSW50Iiwid3J0QmlnVUludDY0QkUiLCJjaGVja0lFRUU3NTQiLCJ3cml0ZUZsb2F0IiwibGl0dGxlRW5kaWFuIiwibm9Bc3NlcnQiLCJ3cml0ZURvdWJsZSIsIm5ld0J1ZiIsInN1YmFycmF5IiwicmVhZFVpbnRMRSIsInJlYWRVSW50TEUiLCJtdWwiLCJyZWFkVWludEJFIiwicmVhZFVJbnRCRSIsInJlYWRVaW50OCIsInJlYWRVSW50OCIsInJlYWRVaW50MTZMRSIsInJlYWRVSW50MTZMRSIsInJlYWRVaW50MTZCRSIsInJlYWRVaW50MzJMRSIsInJlYWRVSW50MzJMRSIsInJlYWRVaW50MzJCRSIsInJlYWRVSW50MzJCRSIsInJlYWRCaWdVSW50NjRMRSIsImRlZmluZUJpZ0ludE1ldGhvZCIsInZhbGlkYXRlTnVtYmVyIiwiZmlyc3QiLCJsYXN0IiwiYm91bmRzRXJyb3IiLCJyZWFkQmlnVUludDY0QkUiLCJyZWFkSW50TEUiLCJwb3ciLCJyZWFkSW50QkUiLCJyZWFkSW50OCIsInJlYWRJbnQxNkxFIiwicmVhZEludDE2QkUiLCJyZWFkSW50MzJMRSIsInJlYWRJbnQzMkJFIiwicmVhZEJpZ0ludDY0TEUiLCJyZWFkQmlnSW50NjRCRSIsInJlYWRGbG9hdExFIiwicmVhZEZsb2F0QkUiLCJyZWFkRG91YmxlTEUiLCJyZWFkRG91YmxlQkUiLCJ3cml0ZVVpbnRMRSIsIndyaXRlVUludExFIiwid3JpdGVVaW50QkUiLCJ3cml0ZVVJbnRCRSIsIndyaXRlVWludDgiLCJ3cml0ZVVJbnQ4Iiwid3JpdGVVaW50MTZMRSIsIndyaXRlVUludDE2TEUiLCJ3cml0ZVVpbnQxNkJFIiwid3JpdGVVSW50MTZCRSIsIndyaXRlVWludDMyTEUiLCJ3cml0ZVVJbnQzMkxFIiwid3JpdGVVaW50MzJCRSIsIndyaXRlVUludDMyQkUiLCJ3cml0ZUJpZ1VJbnQ2NExFIiwid3JpdGVCaWdVSW50NjRCRSIsIndyaXRlSW50TEUiLCJzdWIiLCJ3cml0ZUludEJFIiwid3JpdGVJbnQ4Iiwid3JpdGVJbnQxNkxFIiwid3JpdGVJbnQxNkJFIiwid3JpdGVJbnQzMkxFIiwid3JpdGVJbnQzMkJFIiwid3JpdGVCaWdJbnQ2NExFIiwid3JpdGVCaWdJbnQ2NEJFIiwid3JpdGVGbG9hdExFIiwid3JpdGVGbG9hdEJFIiwid3JpdGVEb3VibGVMRSIsIndyaXRlRG91YmxlQkUiLCJ0YXJnZXRTdGFydCIsImNvcHlXaXRoaW4iLCJFIiwic3ltIiwiZ2V0TWVzc2FnZSIsIkJhc2UiLCJzdXBlciIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwic3RhY2siLCJhZGROdW1lcmljYWxTZXBhcmF0b3IiLCJFUlJfT1VUX09GX1JBTkdFIiwiY2hlY2tCb3VuZHMiLCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsIkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUyIsImlucHV0IiwibXNnIiwicmVjZWl2ZWQiLCJpc0ludGVnZXIiLCJJTlZBTElEX0JBU0U2NF9SRSIsImxlYWRTdXJyb2dhdGUiLCJiYXNlNjRjbGVhbiIsInNyYyIsImRzdCIsImFscGhhYmV0IiwidGFibGUiLCJpMTYiLCJmbiIsIkJ1ZmZlckJpZ0ludE5vdERlZmluZWQiLCJ4cyIsImNzc1dpdGhNYXBwaW5nVG9TdHJpbmciLCJjb250ZW50IiwibmVlZExheWVyIiwibW9kdWxlcyIsIm1lZGlhIiwiZGVkdXBlIiwic3VwcG9ydHMiLCJsYXllciIsImFscmVhZHlJbXBvcnRlZE1vZHVsZXMiLCJfayIsImNzc01hcHBpbmciLCJidG9hIiwidW5lc2NhcGUiLCJzb3VyY2VNYXBwaW5nIiwicHJvbWlzaWZ5IiwiY3VzdG9tQXJndW1lbnRzVG9rZW4iLCJmIiwiZyIsImgiLCJhcmd1bWVudE5hbWVzIiwiY21wIiwiY3ljbGVzIiwibm9kZSIsImFvYmoiLCJib2JqIiwic2VlbiIsInNlZW5JbmRleCIsInNvcnQiLCJwcm9jZXNzIiwibmV4dFRpY2siLCJzZXRJbW1lZGlhdGUiLCJzZXRUaW1lb3V0IiwiZWFjaFNlcmllcyIsIml0ZXJhdG9yIiwiY29tcGxldGVkIiwiaXRlcmF0ZSIsImVyciIsImZvckVhY2hTZXJpZXMiLCJFdmVudEVtaXR0ZXIiLCJjcmVhdGVJbnRlcmZhY2UiLCJzcGFjZSIsIm1ldGhvZHMiLCJyZW1vdmVJdGVtIiwib2ZmIiwicHZ0IiwiX29uIiwib24iLCJfb2ZmIiwiX3RyaWdnZXIiLCJ0cmlnZ2VyIiwicHViIiwidW5zaGlmdCIsInJlbW92ZUFsbExpc3RlbmVycyIsImd1aWQiLCJ0aHJvdHRsZSIsImRlbGF5IiwibG9jYWxTdG9yYWdlIiwid2luZG93IiwiZ2V0SXRlbSIsInNldEl0ZW0iLCJJbnRlcmNvbSIsIm9yaWdpbiIsImxhc3RNZXNzYWdlIiwicmVjZWl2ZWRJRHMiLCJwcmV2aW91c1ZhbHVlcyIsInN0b3JhZ2VIYW5kbGVyIiwiX29uU3RvcmFnZUV2ZW50IiwiZG9jdW1lbnQiLCJhdHRhY2hFdmVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJfdHJhbnNhY3Rpb24iLCJleGVjdXRlZCIsImxpc3RlbmluZyIsIndhaXRUaW1lciIsImxvY2siLCJhY3RpdmVMb2NrIiwiSU5ERVhfTE9DSyIsImNsZWFyVGltZW91dCIsIl9jbGVhbnVwX2VtaXQiLCJ0aHJlc2hvbGQiLCJUSFJFU0hPTERfVFRMX0VNSVQiLCJjaGFuZ2VkIiwiSU5ERVhfRU1JVCIsIl9jbGVhbnVwX29uY2UiLCJJTkRFWF9PTkNFIiwiX29uY2VfZXhwaXJlZCIsInR0bCIsIlRIUkVTSE9MRF9UVExfT05DRSIsIl9sb2NhbFN0b3JhZ2VDaGFuZ2VkIiwiZXZlbnQiLCJmaWVsZCIsImN1cnJlbnRWYWx1ZSIsInBheWxvYWQiLCJfZW1pdCIsInBhY2tldCIsImRlbGltaXRlciIsInN1YnN0cmluZyIsImVtaXQiLCJvbmNlIiwic3VwcG9ydGVkIiwiZXh0ZW5kIiwiaW50ZXJjb20iLCJkZXN0cm95IiwiZ2V0SW5zdGFuY2UiLCJGaWxlU3lzdGVtIiwiUHJvdmlkZXIiLCJwcm92aWRlciIsIm9uRnNSZWFkeSIsIm9uRnNFcnJvciIsImZzUmVhZHkiLCJyZWplY3QiLCJmc0luc3RhbmNlIiwicHJveHlIYXNQcm9wIiwiZnNQcm9taXNlcyIsIlByb3h5IiwicHJvbWlzZXMiLCJmcyIsInBhdGgiLCJEZWZhdWx0IiwiT19SRUFEIiwiT19XUklURSIsIk9fQ1JFQVRFIiwiT19FWENMVVNJVkUiLCJPX1RSVU5DQVRFIiwiT19BUFBFTkQiLCJGSUxFX1NZU1RFTV9OQU1FIiwiRklMRV9TVE9SRV9OQU1FIiwiSURCX1JPIiwiSURCX1JXIiwiV1NRTF9WRVJTSU9OIiwiV1NRTF9TSVpFIiwiV1NRTF9ERVNDIiwiTk9ERV9UWVBFX0ZJTEUiLCJOT0RFX1RZUEVfRElSRUNUT1JZIiwiTk9ERV9UWVBFX1NZTUJPTElDX0xJTksiLCJOT0RFX1RZUEVfTUVUQSIsIkRFRkFVTFRfRElSX1BFUk1JU1NJT05TIiwiREVGQVVMVF9GSUxFX1BFUk1JU1NJT05TIiwiRlVMTF9SRUFEX1dSSVRFX0VYRUNfUEVSTUlTU0lPTlMiLCJSRUFEX1dSSVRFX1BFUk1JU1NJT05TIiwiU1lNTE9PUF9NQVgiLCJCSU5BUllfTUlNRV9UWVBFIiwiSlNPTl9NSU1FX1RZUEUiLCJST09UX0RJUkVDVE9SWV9OQU1FIiwiRlNfRk9STUFUIiwiRlNfTk9DVElNRSIsIkZTX05PTVRJTUUiLCJGU19OT0RVUEVJRENIRUNLIiwiT19GTEFHUyIsIlhBVFRSX0NSRUFURSIsIlhBVFRSX1JFUExBQ0UiLCJGU19SRUFEWSIsIkZTX1BFTkRJTkciLCJGU19FUlJPUiIsIlNVUEVSX05PREVfSUQiLCJTVERJTiIsIlNURE9VVCIsIlNUREVSUiIsIkZJUlNUX0RFU0NSSVBUT1IiLCJFTlZJUk9OTUVOVCIsIlRNUCIsIlBBVEgiLCJmc0NvbnN0YW50cyIsIk9fUkRPTkxZIiwiT19XUk9OTFkiLCJPX1JEV1IiLCJTX0lGTVQiLCJTX0lGUkVHIiwiU19JRkRJUiIsIlNfSUZDSFIiLCJTX0lGQkxLIiwiU19JRklGTyIsIlNfSUZMTksiLCJTX0lGU09DSyIsIk9fQ1JFQVQiLCJPX0VYQ0wiLCJPX05PQ1RUWSIsIk9fVFJVTkMiLCJPX0RJUkVDVE9SWSIsIk9fTk9GT0xMT1ciLCJPX1NZTkMiLCJPX0RTWU5DIiwiT19TWU1MSU5LIiwiT19OT05CTE9DSyIsIlNfSVJXWFUiLCJTX0lSVVNSIiwiU19JV1VTUiIsIlNfSVhVU1IiLCJTX0lSV1hHIiwiU19JUkdSUCIsIlNfSVdHUlAiLCJTX0lYR1JQIiwiU19JUldYTyIsIlNfSVJPVEgiLCJTX0lXT1RIIiwiU19JWE9USCIsIkZfT0siLCJSX09LIiwiV19PSyIsIlhfT0siLCJVVl9GU19DT1BZRklMRV9FWENMIiwiQ09QWUZJTEVfRVhDTCIsIlN0YXRzIiwiRGlyZW50IiwiZmlsZU5vZGUiLCJkZXZOYW1lIiwiZXJybm8iLCJlcnJOYW1lIiwiZGVmYXVsdE1lc3NhZ2UiLCJGaWxlckVycm9yIiwicGF0aEluZm8iLCJQYXRoIiwiZGlybmFtZSIsImJhc2VuYW1lIiwiaXNBYnNvbHV0ZVBhdGgiLCJpc0Fic29sdXRlIiwic2hhcmVkIiwiQ29uc3RhbnRzIiwiRXJyb3JzIiwiRGlyZWN0b3J5RW50cnkiLCJvcGVuRmlsZXMiLCJPcGVuRmlsZURlc2NyaXB0aW9uIiwiU3VwZXJOb2RlIiwiTm9kZSIsInVwZGF0ZV9ub2RlX3RpbWVzIiwiY29udGV4dCIsInRpbWVzIiwiY3RpbWUiLCJtdGltZSIsInVwZGF0ZSIsImNvbXBsZXRlIiwiY2hhbmdlcyIsImF0aW1lIiwicHV0T2JqZWN0IiwiZmluZF9ub2RlIiwiRU5PRU5UIiwicGFyZW50UGF0aCIsImZvbGxvd2VkQ291bnQiLCJyZWFkX3Jvb3RfZGlyZWN0b3J5X25vZGUiLCJub2RlRGF0YSIsInN1cGVyTm9kZSIsInJub2RlIiwiZ2V0T2JqZWN0IiwiY2hlY2tfcm9vdF9kaXJlY3Rvcnlfbm9kZSIsIkVGSUxFU1lTVEVNRVJST1IiLCJyb290RGlyZWN0b3J5Tm9kZSIsInJlYWRfcGFyZW50X2RpcmVjdG9yeV9kYXRhIiwicGFyZW50RGlyZWN0b3J5Tm9kZSIsImdldF9ub2RlX2Zyb21fcGFyZW50X2RpcmVjdG9yeV9kYXRhIiwiRU5PVERJUiIsInBhcmVudERpcmVjdG9yeURhdGEiLCJub2RlSWQiLCJjcmVhdGVfbm9kZSIsImlzX3N5bWJvbGljX2xpbmsiLCJFTE9PUCIsInNldF9leHRlbmRlZF9hdHRyaWJ1dGUiLCJmbGFnIiwieGF0dHJzIiwiRUVYSVNUIiwiRU5PQVRUUiIsIm1ha2VfZGlyZWN0b3J5IiwiZGlyZWN0b3J5Tm9kZSIsImRpcmVjdG9yeURhdGEiLCJ3cml0ZV9kaXJlY3Rvcnlfbm9kZSIsIm5saW5rcyIsIndyaXRlX2RpcmVjdG9yeV9kYXRhIiwidXBkYXRlX3BhcmVudF9kaXJlY3RvcnlfZGF0YSIsInVwZGF0ZV90aW1lIiwicmVtb3ZlX2RpcmVjdG9yeSIsImNoZWNrX2lmX25vZGVfZXhpc3RzIiwiRUJVU1kiLCJjaGVja19pZl9ub2RlX2lzX2RpcmVjdG9yeSIsImNoZWNrX2lmX2RpcmVjdG9yeV9pc19lbXB0eSIsIkVOT1RFTVBUWSIsInJlbW92ZV9kaXJlY3Rvcnlfbm9kZSIsImRlbGV0ZSIsInJlbW92ZV9kaXJlY3RvcnlfZGF0YSIsIm9wZW5fZmlsZSIsImRpcmVjdG9yeUVudHJ5IiwiZmlsZURhdGEiLCJyZWFkX2RpcmVjdG9yeV9kYXRhIiwiY2hlY2tfaWZfZmlsZV9leGlzdHMiLCJFSVNESVIiLCJjaGVja19pZl9zeW1ib2xpY19saW5rIiwid3JpdGVfZmlsZV9kYXRhIiwic2V0X2ZpbGVfbm9kZSIsInB1dEJ1ZmZlciIsInVwZGF0ZV9kaXJlY3RvcnlfZGF0YSIsImhhbmRsZV91cGRhdGVfcmVzdWx0Iiwid3JpdGVfZGF0YSIsIm9mZCIsInBvc2l0aW9uIiwicmV0dXJuX25ieXRlcyIsInVwZGF0ZV9maWxlX25vZGUiLCJ1cGRhdGVfZmlsZV9kYXRhIiwiRUlPIiwiX3Bvc2l0aW9uIiwibmV3U2l6ZSIsIm5ld0RhdGEiLCJ2ZXJzaW9uIiwiZ2V0QnVmZmVyIiwicmVhZF9kYXRhIiwiaGFuZGxlX2ZpbGVfZGF0YSIsImZzdGF0X2ZpbGUiLCJnZXROb2RlIiwibHN0YXRfZmlsZSIsImxpbmtfbm9kZSIsIm9sZHBhdGgiLCJuZXdwYXRoIiwib2xkbmFtZSIsIm9sZFBhcmVudFBhdGgiLCJvbGREaXJlY3RvcnlOb2RlIiwib2xkRGlyZWN0b3J5RGF0YSIsIm5ld0RpcmVjdG9yeU5vZGUiLCJuZXdEaXJlY3RvcnlEYXRhIiwiZmlsZU5vZGVJRCIsIm5ld25hbWUiLCJuZXdQYXJlbnRQYXRoIiwicmVhZF9maWxlX25vZGUiLCJjaGVja19pZl9uZXdfZmlsZV9leGlzdHMiLCJyZWFkX25ld19kaXJlY3RvcnlfZGF0YSIsImNoZWNrX2lmX29sZF9maWxlX2V4aXN0cyIsIkVQRVJNIiwidW5saW5rX25vZGUiLCJkZWxldGVfZmlsZV9kYXRhIiwidmFsaWRhdGVfZmxhZ3MiLCJ2YWxpZGF0ZV9maWxlX29wdGlvbnMiLCJlbmMiLCJmaWxlTW9kZSIsInN0YXQiLCJzdGF0X2ZpbGUiLCJzdGF0cyIsInZhbGlkYXRlSW50ZWdlciIsIkVJTlZBTCIsIm9jdGFsUmVnIiwiaXNVaW50MzIiLCJ2YWxpZGF0ZUFuZE1hc2tNb2RlIiwidG9Vbml4VGltZXN0YW1wIiwiZ2V0VGltZSIsImFwcGVuZEZpbGUiLCJmZCIsImFsbG9jRGVzY3JpcHRvciIsInJlbGVhc2VEZXNjcmlwdG9yIiwiYWNjZXNzIiwic3RfbW9kZSIsIkVBQ0NFUyIsImFjY2Vzc19maWxlIiwiY2hvd24iLCJ1aWQiLCJnaWQiLCJjaG93bl9maWxlIiwiY2htb2QiLCJjaG1vZF9maWxlIiwiY2xvc2UiLCJnZXRPcGVuRmlsZURlc2NyaXB0aW9uIiwiRUJBREYiLCJlbnN1cmVSb290RGlyZWN0b3J5IiwiZXhpc3RpbmdOb2RlIiwiZXhpc3RzIiwiZmNob3duIiwiZmNob3duX2ZpbGUiLCJmY2htb2QiLCJmY2htb2RfZmlsZSIsImZnZXR4YXR0ciIsImZnZXR4YXR0cl9maWxlIiwiZnJlbW92ZXhhdHRyIiwiZnJlbW92ZXhhdHRyX2ZpbGUiLCJmc2V0eGF0dHIiLCJmc2V0eGF0dHJfZmlsZSIsImZzdGF0IiwiZnN5bmMiLCJmdHJ1bmNhdGUiLCJ0cnVuY2F0ZV9maWxlX2RhdGEiLCJmdHJ1bmNhdGVfZmlsZSIsImZ1dGltZXMiLCJjdXJyZW50VGltZSIsImZ1dGltZXNfZmlsZSIsImdldHhhdHRyIiwiZ2V0eGF0dHJfZmlsZSIsImxpbmsiLCJsc2VlayIsIndoZW5jZSIsImxzdGF0IiwibWtkaXIiLCJta2R0ZW1wIiwicHJlZml4IiwicmFuZG9tQ2hhcnMiLCJta25vZCIsInBhcmVudE5vZGUiLCJwYXJlbnROb2RlRGF0YSIsInVwZGF0ZV9wYXJlbnRfbm9kZV9kYXRhIiwibWFrZV9ub2RlIiwib3BlbiIsIm9wZW5GaWxlRGVzY3JpcHRpb24iLCJyZWFkZGlyIiwiaGFuZGxlX2RpcmVjdG9yeV9kYXRhIiwiZmlsZXMiLCJmaWxlQnVmZmVycyIsImZpbGUiLCJmaWxlQnVmZmVyIiwid2l0aEZpbGVUeXBlcyIsImRpckVudHMiLCJmaWxlbmFtZSIsImZpbGVwYXRoIiwiZ2V0X2Rpcl9lbnRyeSIsImRpckVudCIsInZhbGlkYXRlX2RpcmVjdG9yeV9vcHRpb25zIiwicmVhZF9kaXJlY3RvcnkiLCJieXRlc1JlYWQiLCJyZWFkRmlsZSIsImNsZWFudXAiLCJmc3RhdFJlc3VsdCIsImlzRGlyZWN0b3J5IiwicmVhZGxpbmsiLCJjaGVja19pZl9zeW1ib2xpYyIsInN5bWxpbmtfcmVscGF0aCIsInJlYWRfbGluayIsInJlbW92ZXhhdHRyIiwicmVtb3ZleGF0dHJfZmlsZSIsInJlbmFtZSIsIm9sZFBhcmVudERpcmVjdG9yeSIsIm9sZFBhcmVudERhdGEiLCJuZXdQYXJlbnREaXJlY3RvcnkiLCJuZXdQYXJlbnREYXRhIiwib2xkTmFtZSIsIm5ld05hbWUiLCJ1cGRhdGVfdGltZXMiLCJyZWFkX25ld19kaXJlY3RvcnkiLCJ1cGRhdGVfb2xkX3BhcmVudF9kaXJlY3RvcnlfZGF0YSIsInVwZGF0ZV9uZXdfcGFyZW50X2RpcmVjdG9yeV9kYXRhIiwiY2hlY2tfaWZfbmV3X2RpcmVjdG9yeV9leGlzdHMiLCJyZWFkX25ld19wYXJlbnRfZGlyZWN0b3J5X2RhdGEiLCJnZXRfbmV3X3BhcmVudF9kaXJlY3RvcnkiLCJ1bmxpbmtfb2xkX2ZpbGUiLCJybWRpciIsInNldHhhdHRyIiwic2V0eGF0dHJfZmlsZSIsInN5bWxpbmsiLCJzcmNwYXRoIiwiZHN0cGF0aCIsIm1ha2Vfc3ltYm9saWNfbGluayIsInRydW5jYXRlIiwidHJ1bmNhdGVfZmlsZSIsInVubGluayIsInV0aW1lcyIsInV0aW1lc19maWxlIiwid3JpdGVGaWxlIiwicmVwbGFjZV9kYXRhIiwicHJvdmlkZXJzIiwiU2hlbGwiLCJGU1dhdGNoZXIiLCJub3AiLCJkZWZhdWx0R3VpZEZuIiwiZGVmYXVsdENhbGxiYWNrIiwicHJvY2Vzc1BhdGhBcmciLCJpZHgiLCJhbGxvd1JlbGF0aXZlIiwiYnVmZmVyT3JQYXRoIiwiZmlsZVVSTE9yUGF0aCIsInByb3RvY29sIiwicGF0aG5hbWUiLCJ0aGlyZCIsImNvZGVQb2ludEF0IiwidG9QYXRoSWZGaWxlVVJMIiwiaXNOdWxsIiwidmFsaWRhdGVQYXRoIiwiZm9yY2VGb3JtYXR0aW5nIiwicmVhZHlTdGF0ZSIsInN0ZGluIiwic3Rkb3V0Iiwic3RkZXJyIiwiY29uc3RhbnRzIiwiYmluZCIsInF1ZXVlIiwid3JhcHBlZEd1aWRGbiIsImd1aWRXaXRoQ2hlY2siLCJxdWV1ZU9yUnVuIiwib3BlcmF0aW9uIiwid2F0Y2giLCJsaXN0ZW5lciIsIndhdGNoZXIiLCJyZWN1cnNpdmUiLCJ3cmFwcGVkQ29udGV4dCIsIm1ldGhvZE5hbWUiLCJjaGFuZ2UiLCJicm9hZGNhc3RDaGFuZ2VzIiwib3BlblJlYWRXcml0ZUNvbnRleHQiLCJvcGVuUmVhZE9ubHlDb250ZXh0IiwiZ2V0UmVhZFdyaXRlQ29udGV4dCIsImFic1BhdGhBcmdzIiwicmVsUGF0aEFyZ3MiLCJtZXRob2QiLCJzaG91bGRQcm9taXNpZnkiLCJsYXN0QXJnSW5kZXgiLCJtaXNzaW5nQ2FsbGJhY2siLCJtYXliZUNhbGxiYWNrIiwicGF0aEFyZyIsImZuQXJncyIsInJlY3Vyc2l2ZVBhdGhQcmVmaXgiLCJvbmNoYW5nZSIsImZpbGVuYW1lXyIsInBlcnNpc3RlbnRfIiwicmVjdXJzaXZlXyIsIkZpbGVyIiwiRmlsZXJXZWJwYWNrUGx1Z2luIiwiZW5zdXJlSUQiLCJnZW5lcmF0ZU1vZGUiLCJub2RlVHlwZSIsIm1vZGVQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiZ2V0RW1wdHlEZXNjcmlwdG9yIiwiY3dkIiwibm9kZVBhdGgiLCJmaWxlclBhdGgiLCJhc3NpZ24iLCJyZW1vdmVUcmFpbGluZyIsImFkZFRyYWlsaW5nIiwiSW5kZXhlZERCIiwiTWVtb3J5IiwiSW5kZXhlZERCQ29udGV4dCIsImRiIiwiX2dldE9iamVjdFN0b3JlIiwib2JqZWN0U3RvcmUiLCJ0cmFuc2FjdGlvbiIsInJlcXVlc3QiLCJvbnN1Y2Nlc3MiLCJvbmVycm9yIiwicHJldmVudERlZmF1bHQiLCJfZ2V0IiwiYXJyYXlCdWZmZXIiLCJfcHV0IiwidWludDhCYWNrZWRCdWZmZXIiLCJpc1N1cHBvcnRlZCIsImluZGV4ZWREQiIsIm1vekluZGV4ZWREQiIsIndlYmtpdEluZGV4ZWREQiIsIm1zSW5kZXhlZERCIiwidGhhdCIsIm9wZW5SZXF1ZXN0Iiwib251cGdyYWRlbmVlZGVkIiwib2JqZWN0U3RvcmVOYW1lcyIsImRlbGV0ZU9iamVjdFN0b3JlIiwiY3JlYXRlT2JqZWN0U3RvcmUiLCJnZXRSZWFkT25seUNvbnRleHQiLCJwb29sIiwiYXN5bmNDYWxsYmFjayIsImNyZWF0ZURCIiwiTWVtb3J5Q29udGV4dCIsInJlYWRPbmx5IiwiZ2VuZXJhdGVSYW5kb20iLCJ0ZW1wbGF0ZSIsInJlcGVhdCIsImVudiIsIkVudmlyb25tZW50IiwibWluaW1hdGNoIiwiY2QiLCJwd2QiLCJleGVjIiwiY21kIiwidG91Y2giLCJ1cGRhdGVPbmx5IiwiY3JlYXRlRmlsZSIsInVwZGF0ZVRpbWVzIiwiY2F0Iiwic2giLCJscyIsImVudHJpZXMiLCJlbnRyeSIsImNvbnRlbnRzIiwicm0iLCJ0ZW1wRGlyIiwibWtkaXJwIiwiX21rZGlycCIsImlzRmlsZSIsInBhcmVudCIsImZpbmQiLCJuZXh0IiwibWF5YmVQcm9jZXNzUGF0aCIsInJhd1BhdGgiLCJwcm9jZXNzUGF0aCIsIndhbGsiLCJkYXRlRnJvbU1zIiwibXMiLCJkZXYiLCJhdGltZU1zIiwibXRpbWVNcyIsImN0aW1lTXMiLCJpc1N5bWJvbGljTGluayIsImlzU29ja2V0IiwiaXNGSUZPIiwiaXNDaGFyYWN0ZXJEZXZpY2UiLCJpc0Jsb2NrRGV2aWNlIiwidXRpbHMiLCJQTFVHSU5fTkFNRSIsIk9QVElPTlNfU0NIRU1BIiwiT1BUSU9OU19QUk9DRVNTT1JTIiwidmFsaWRhdGVPcHRpb25zIiwicHJvY2Vzc09wdGlvbnMiLCJjb21waWxlciIsImhvb2tzIiwibm9ybWFsTW9kdWxlRmFjdG9yeSIsInRhcCIsImZhY3RvcnkiLCJyZXNvbHZlRGF0YSIsInNoaW1zRGlyIiwicmVzb2x2ZUZzUHJvdmlkZXIiLCJzdGFydHNXaXRoIiwiZmlsZXJEaXIiLCJzaGltRnMiLCJhcHBseUZzU2hpbSIsInNoaW1QYXRoIiwiYXBwbHlQYXRoU2hpbSIsImZzUHJvdmlkZXIiLCJmc1Byb3ZpZGVyRGlyIiwiUk9PVF9ESVJfVEFHIiwiQ1dEIiwicHJvY2Vzc29ycyIsInByb2Nlc3NlZE9wdGlvbnMiLCJwcm9wZXJ0eSIsInByb2Nlc3NvciIsImlzTEUiLCJtTGVuIiwibkJ5dGVzIiwiZUxlbiIsImVNYXgiLCJlQmlhcyIsIm5CaXRzIiwicyIsIk5hTiIsInJ0IiwiaXNOYU4iLCJMTjIiLCJjYiIsIl90cmF2ZXJzZSIsImFycmF5S2V5d29yZHMiLCJwcm9wc0tleXdvcmRzIiwic2tpcEtleXdvcmRzIiwiTWluaW1hdGNoIiwic2VwIiwiR0xPQlNUQVIiLCJwbFR5cGVzIiwicW1hcmsiLCJzdGFyIiwicmVTcGVjaWFscyIsInJlZHVjZSIsInNsYXNoU3BsaXQiLCJhc3NlcnRWYWxpZFBhdHRlcm4iLCJub2NvbW1lbnQiLCJjaGFyQXQiLCJhbGxvd1dpbmRvd3NFc2NhcGUiLCJjb21tZW50IiwiZW1wdHkiLCJwYXJ0aWFsIiwibWFrZSIsImJyYWNlRXhwYW5kIiwibm9icmFjZSIsIm9yaWciLCJtYWtlUmUiLCJkZWJ1ZyIsInBhcnNlTmVnYXRlIiwiZ2xvYlNldCIsImdsb2JQYXJ0cyIsInNpIiwibmVnYXRlT2Zmc2V0Iiwibm9uZWdhdGUiLCJpc1N1YiIsIm5vZ2xvYnN0YXIiLCJzdGF0ZUNoYXIiLCJyZSIsImhhc01hZ2ljIiwibm9jYXNlIiwiZXNjYXBpbmciLCJwYXR0ZXJuTGlzdFN0YWNrIiwibmVnYXRpdmVMaXN0cyIsImluQ2xhc3MiLCJyZUNsYXNzU3RhcnQiLCJjbGFzc1N0YXJ0IiwicGF0dGVyblN0YXJ0IiwiZG90IiwiY2xlYXJTdGF0ZUNoYXIiLCJub2V4dCIsInJlU3RhcnQiLCJwbCIsInJlRW5kIiwiY3MiLCJlciIsInNwIiwiU1VCUEFSU0UiLCJ0YWlsIiwiXyIsIiQxIiwiJDIiLCJhZGRQYXR0ZXJuU3RhcnQiLCJubCIsIm5sQmVmb3JlIiwibmxGaXJzdCIsIm5sTGFzdCIsIm5sQWZ0ZXIiLCJvcGVuUGFyZW5zQmVmb3JlIiwiY2xlYW5BZnRlciIsImRvbGxhciIsInJlZ0V4cCIsIl9nbG9iIiwiX3NyYyIsInR3b1N0YXIiLCJleCIsIm1tIiwibm9udWxsIiwibWF0Y2hCYXNlIiwibWF0Y2hPbmUiLCJmbGlwTmVnYXRlIiwiZmkiLCJwaSIsImZsIiwiaGl0IiwiZnIiLCJwciIsInN3YWxsb3dlZSIsImFzc2VydFBhdGgiLCJub3JtYWxpemVTdHJpbmdQb3NpeCIsImFsbG93QWJvdmVSb290IiwibGFzdFNlZ21lbnRMZW5ndGgiLCJsYXN0U2xhc2giLCJkb3RzIiwibGFzdFNsYXNoSW5kZXgiLCJwb3NpeCIsInJlc29sdmVkUGF0aCIsInJlc29sdmVkQWJzb2x1dGUiLCJ0cmFpbGluZ1NlcGFyYXRvciIsImpvaW5lZCIsInJlbGF0aXZlIiwiZnJvbVN0YXJ0IiwiZnJvbUVuZCIsImZyb21MZW4iLCJ0b1N0YXJ0IiwidG9MZW4iLCJsYXN0Q29tbW9uU2VwIiwiZnJvbUNvZGUiLCJfbWFrZUxvbmciLCJoYXNSb290IiwibWF0Y2hlZFNsYXNoIiwiZXh0SWR4IiwiZmlyc3ROb25TbGFzaEVuZCIsImV4dG5hbWUiLCJzdGFydERvdCIsInN0YXJ0UGFydCIsInByZURvdFN0YXRlIiwicGF0aE9iamVjdCIsImJhc2UiLCJfZm9ybWF0Iiwid2luMzIiLCJjYWNoZWRTZXRUaW1lb3V0IiwiY2FjaGVkQ2xlYXJUaW1lb3V0IiwiZGVmYXVsdFNldFRpbW91dCIsImRlZmF1bHRDbGVhclRpbWVvdXQiLCJydW5UaW1lb3V0IiwiZnVuIiwiY3VycmVudFF1ZXVlIiwiZHJhaW5pbmciLCJxdWV1ZUluZGV4IiwiY2xlYW5VcE5leHRUaWNrIiwiZHJhaW5RdWV1ZSIsInRpbWVvdXQiLCJydW4iLCJtYXJrZXIiLCJydW5DbGVhclRpbWVvdXQiLCJJdGVtIiwidGl0bGUiLCJicm93c2VyIiwiYXJndiIsInZlcnNpb25zIiwiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJsaXN0ZW5lcnMiLCJiaW5kaW5nIiwiY2hkaXIiLCJ1bWFzayIsInN0cmluZ0hpbnRzIiwibnVtYmVySGludHMiLCJTUEVDSUZJQ0lUWSIsImluc3RhbmNlb2YiLCJhYnNvbHV0ZVBhdGgiLCJmaWx0ZXJNYXgiLCJldmFsdWF0ZWRNYXgiLCJmaW5kQWxsQ2hpbGRyZW4iLCJjaGlsZHJlbiIsInNjaGVtYVBhdGhzIiwicHJlZGljYXRlIiwiZXh0cmFjdFJlZnMiLCJjaGlsZHJlblN0YXJ0IiwiaW5kZW50IiwiaGFzTm90SW5TY2hlbWEiLCJmaW5kRmlyc3RUeXBlZFNjaGVtYSIsImNhbkFwcGx5Tm90IiwidHlwZWRTY2hlbWEiLCJsaWtlTnVtYmVyIiwibGlrZUludGVnZXIiLCJsaWtlU3RyaW5nIiwibGlrZU51bGwiLCJsaWtlQm9vbGVhbiIsImlzT2JqZWN0IiwibWF5YmVPYmoiLCJsaWtlQXJyYXkiLCJsaWtlT2JqZWN0IiwiZ2V0U2NoZW1hTm9uVHlwZXMiLCJmb3JtYXRIaW50cyIsImhpbnRzIiwiZ2V0SGludHMiLCJsb2dpYyIsImNvbmZpZ3VyYXRpb24iLCJoZWFkZXJOYW1lRnJvbVNjaGVtYSIsImJhc2VEYXRhUGF0aEZyb21TY2hlbWEiLCJiYXNlRGF0YVBhdGgiLCJzcGxpdHRlZFRpdGxlRnJvbVNjaGVtYSIsImhlYWRlck5hbWUiLCJwb3N0Rm9ybWF0dGVyIiwiaGVhZGVyIiwiZm9ybWF0VmFsaWRhdGlvbkVycm9ycyIsImNhcHR1cmVTdGFja1RyYWNlIiwiZ2V0U2NoZW1hUGFydCIsIm5ld1BhdGgiLCJzY2hlbWFQYXJ0IiwiaW5uZXIiLCJmb3JtYXRTY2hlbWEiLCJwcmV2U2NoZW1hcyIsIm5ld0xvZ2ljIiwiZm9ybWF0SW5uZXJTY2hlbWEiLCJpbm5lclNjaGVtYSIsImFkZFNlbGYiLCJuZWVkQXBwbHlMb2dpY0hlcmUiLCJ1bmRlZmluZWRBc051bGwiLCJpZlZhbHVlIiwidGhlblZhbHVlIiwiZWxzZSIsImVsc2VWYWx1ZSIsImhhc0FkZGl0aW9uYWxJdGVtcyIsIkJvb2xlYW4iLCJvYmplY3RTdHJ1Y3R1cmUiLCJTZXQiLCJkZXBlbmRlbmN5TmFtZSIsImRlcGVuZGVuY3kiLCJkZXAiLCJnZXRTY2hlbWFQYXJ0VGV4dCIsImFkZGl0aW9uYWxQYXRoIiwibmVlZERvdCIsInNjaGVtYVRleHQiLCJkZXNjcmlwdGlvbiIsImdldFNjaGVtYVBhcnREZXNjcmlwdGlvbiIsImZvcm1hdFZhbGlkYXRpb25FcnJvciIsInBhcmFtcyIsImNvbXBhcmlzb24iLCJtaXNzaW5nUGF0dGVybiIsIm1pc3NpbmdQcm9wZXJ0eSIsImhhc1Byb3BlcnR5IiwiYWRkaXRpb25hbFByb3BlcnR5IiwicHJvcGVydHlOYW1lIiwicG9zdGZpeCIsInNjaGVtYU91dHB1dCIsImxhc3RDaGlsZCIsInJlbWFpbmluZ0NoaWxkcmVuIiwiZmlsdGVyZWRDaGlsZHJlbiIsIm5ld0NoaWxkcmVuIiwiZmlsdGVyQ2hpbGRyZW4iLCJjaGlsZCIsInJldmVyc2UiLCJncm91cENoaWxkcmVuQnlGaXJzdENoaWxkIiwibmVzdGVkRXJyb3IiLCJmYWlsaW5nS2V5d29yZCIsImZvcm1hdHRlZEVycm9yIiwiX2RlZmF1bHQiLCJlbmFibGVWYWxpZGF0aW9uIiwiZGlzYWJsZVZhbGlkYXRpb24iLCJuZWVkVmFsaWRhdGUiLCJlcnJvck1lc3NhZ2UiLCJnZXRFcnJvckZvciIsInNob3VsZEJlQWJzb2x1dGUiLCJwYXNzZXMiLCJrd1ZhbCIsInBhcmVudERhdGEiLCJwYXJlbnREYXRhUHJvcGVydHkiLCJwYXJlbnREYXRhUmVmIiwiUmFuZ2UiLCJnZXRPcGVyYXRvciIsInNpZGUiLCJmb3JtYXRSaWdodCIsImZvcm1hdExlZnQiLCJmb3JtYXRSYW5nZSIsInN0YXJ0RXhjbHVzaXZlIiwiZW5kRXhjbHVzaXZlIiwiZ2V0UmFuZ2VWYWx1ZSIsInZhbHVlcyIsIl9sZWZ0IiwiX3JpZ2h0IiwibGVmdEV4Y2x1c2l2ZSIsInJpZ2h0RXhjbHVzaXZlIiwicmVhbFN0YXJ0IiwiY3VycmVudFNjaGVtYSIsInRtcExlbmd0aCIsInRtcEZvcm1hdCIsInRtcEV4Y2x1c2l2ZSIsImZvcm1hdEV4Y2x1c2l2ZU1heGltdW0iLCJmb3JtYXRFeGNsdXNpdmVNaW5pbXVtIiwicmFuZ2VGb3JtYXQiLCJ2YWxpZGF0ZU9iamVjdCIsImFwcGx5UHJlZml4IiwiX1ZhbGlkYXRpb25FcnJvciIsIlNLSVBfVkFMSURBVElPTiIsIl9hYnNvbHV0ZVBhdGgiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3VuZGVmaW5lZEFzTnVsbCIsIl9fZXNNb2R1bGUiLCJnZXRBanYiLCJtZW1vaXplIiwiYWp2S2V5d29yZHMiLCJzY2hlbWFDYWNoZSIsIldlYWtNYXAiLCJjb21waWxlZFNjaGVtYSIsIm5ld0Vycm9ycyIsIm9sZEVycm9yIiwiZmlsdGVyRXJyb3JzIiwic3R5bGVzSW5ET00iLCJnZXRJbmRleEJ5SWRlbnRpZmllciIsImlkZW50aWZpZXIiLCJtb2R1bGVzVG9Eb20iLCJpZENvdW50TWFwIiwiaWRlbnRpZmllcnMiLCJpbmRleEJ5SWRlbnRpZmllciIsImNzcyIsInNvdXJjZU1hcCIsInJlZmVyZW5jZXMiLCJ1cGRhdGVyIiwiYWRkRWxlbWVudFN0eWxlIiwiYnlJbmRleCIsImFwaSIsImRvbUFQSSIsIm5ld09iaiIsImxhc3RJZGVudGlmaWVycyIsIm5ld0xpc3QiLCJuZXdMYXN0SWRlbnRpZmllcnMiLCJfaSIsIl9pbmRleCIsIm1lbW8iLCJpbnNlcnQiLCJzdHlsZSIsInN0eWxlVGFyZ2V0IiwicXVlcnlTZWxlY3RvciIsIkhUTUxJRnJhbWVFbGVtZW50IiwiY29udGVudERvY3VtZW50IiwiaGVhZCIsImdldFRhcmdldCIsImFwcGVuZENoaWxkIiwiZWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGVzIiwiYXR0cmlidXRlcyIsInN0eWxlRWxlbWVudCIsIm5vbmNlIiwic2V0QXR0cmlidXRlIiwiaW5zZXJ0U3R5bGVFbGVtZW50Iiwic3R5bGVUYWdUcmFuc2Zvcm0iLCJyZW1vdmVDaGlsZCIsInJlbW92ZVN0eWxlRWxlbWVudCIsInN0eWxlU2hlZXQiLCJmaXJzdENoaWxkIiwiY3JlYXRlVGV4dE5vZGUiLCJtZXJnZSIsInNldHMiLCJ4bCIsInN1YmV4cCIsInR5cGVPZiIsImJ1aWxkRXhwcyIsImlzSVJJIiwiQUxQSEEkJCIsIkRJR0lUJCQiLCJIRVhESUckJCIsIlBDVF9FTkNPREVEJCIsIlNVQl9ERUxJTVMkJCIsIlJFU0VSVkVEJCQiLCJTQ0hFTUUkIiwiVVNFUklORk8kIiwiVU5SRVNFUlZFRCQkIiwiREVDX09DVEVUX1JFTEFYRUQkIiwiSDE2JCIsIkxTMzIkIiwiSVBWNEFERFJFU1MkIiwiSVBWNkFERFJFU1MxJCIsIklQVjZBRERSRVNTMiQiLCJJUFY2QUREUkVTUzMkIiwiSVBWNkFERFJFU1M0JCIsIklQVjZBRERSRVNTNSQiLCJJUFY2QUREUkVTUzYkIiwiSVBWNkFERFJFU1M3JCIsIklQVjZBRERSRVNTOCQiLCJJUFY2QUREUkVTUzkkIiwiWk9ORUlEJCIsIklQVjZBRERSRVNTJCIsIklQX0xJVEVSQUwkIiwiSVBWNkFERFJaX1JFTEFYRUQkIiwiSVBWRlVUVVJFJCIsIkhPU1QkIiwiUkVHX05BTUUkIiwiUE9SVCQiLCJBVVRIT1JJVFkkIiwiUENIQVIkIiwiU0VHTUVOVCQiLCJTRUdNRU5UX05aJCIsIlNFR01FTlRfTlpfTkMkIiwiUEFUSF9BQkVNUFRZJCIsIlBBVEhfQUJTT0xVVEUkIiwiUVVFUlkkIiwiUEFUSF9OT1NDSEVNRSQiLCJQQVRIX1JPT1RMRVNTJCIsIlBBVEhfRU1QVFkkIiwiSVBSSVZBVEUkJCIsIkZSQUdNRU5UJCIsIkhJRVJfUEFSVCQiLCJVUkkkIiwiUkVMQVRJVkVfUEFSVCQiLCJSRUxBVElWRSQiLCJtYXhJbnQiLCJyZWdleFB1bnljb2RlIiwicmVnZXhOb25BU0NJSSIsInJlZ2V4U2VwYXJhdG9ycyIsInN0cmluZ0Zyb21DaGFyQ29kZSIsIm1hcERvbWFpbiIsInVjczJkZWNvZGUiLCJjb3VudGVyIiwiZXh0cmEiLCJkaWdpdFRvQmFzaWMiLCJkaWdpdCIsImFkYXB0IiwiZGVsdGEiLCJudW1Qb2ludHMiLCJmaXJzdFRpbWUiLCJiYXNlTWludXNUTWluIiwiZGVjb2RlIiwiaW5wdXRMZW5ndGgiLCJiaWFzIiwiYmFzaWMiLCJvbGRpIiwidyIsImJhc2VNaW51c1QiLCJmcm9tQ29kZVBvaW50IiwiZW5jb2RlIiwiYmFzaWNMZW5ndGgiLCJoYW5kbGVkQ1BDb3VudCIsImhhbmRsZWRDUENvdW50UGx1c09uZSIsInEiLCJxTWludXNUIiwicHVueWNvZGUiLCJTQ0hFTUVTIiwicGN0RW5jQ2hhciIsImNociIsInBjdERlY0NoYXJzIiwibmV3U3RyIiwiaWwiLCJjMiIsImMzIiwiX25vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nIiwiY29tcG9uZW50cyIsImRlY29kZVVucmVzZXJ2ZWQiLCJkZWNTdHIiLCJVTlJFU0VSVkVEIiwic2NoZW1lIiwiUENUX0VOQ09ERUQiLCJOT1RfU0NIRU1FIiwidXNlcmluZm8iLCJOT1RfVVNFUklORk8iLCJob3N0IiwiTk9UX0hPU1QiLCJOT1RfUEFUSCIsIk5PVF9QQVRIX05PU0NIRU1FIiwicXVlcnkiLCJOT1RfUVVFUlkiLCJOT1RfRlJBR01FTlQiLCJfc3RyaXBMZWFkaW5nWmVyb3MiLCJfbm9ybWFsaXplSVB2NCIsIklQVjRBRERSRVNTIiwiYWRkcmVzcyIsIl9ub3JtYWxpemVJUHY2IiwiSVBWNkFERFJFU1MiLCJ6b25lIiwiZmlyc3RGaWVsZHMiLCJsYXN0RmllbGRzIiwiaXNMYXN0RmllbGRJUHY0QWRkcmVzcyIsImZpZWxkQ291bnQiLCJsYXN0RmllbGRzU3RhcnQiLCJmaWVsZHMiLCJsb25nZXN0WmVyb0ZpZWxkcyIsImFjYyIsImxhc3RMb25nZXN0IiwibmV3SG9zdCIsIm5ld0ZpcnN0IiwibmV3TGFzdCIsIlVSSV9QQVJTRSIsIk5PX01BVENIX0lTX1VOREVGSU5FRCIsInVyaVN0cmluZyIsImlyaSIsIklSSV9QUk9UT0NPTCIsIlVSSV9QUk9UT0NPTCIsInJlZmVyZW5jZSIsInBvcnQiLCJzY2hlbWVIYW5kbGVyIiwidW5pY29kZVN1cHBvcnQiLCJkb21haW5Ib3N0IiwidG9BU0NJSSIsIlJEUzEiLCJSRFMyIiwiUkRTMyIsIlJEUzUiLCJyZW1vdmVEb3RTZWdtZW50cyIsImltIiwidXJpVG9rZW5zIiwidG9Vbmljb2RlIiwiYXV0aG9yaXR5IiwiX3JlY29tcG9zZUF1dGhvcml0eSIsInJlc29sdmVDb21wb25lbnRzIiwidG9sZXJhbnQiLCJ1bmVzY2FwZUNvbXBvbmVudCIsImhhbmRsZXIiLCJzZWN1cmUiLCJodHRwIiwiaXNTZWN1cmUiLCJ3c0NvbXBvbmVudHMiLCJyZXNvdXJjZU5hbWUiLCJ3cyIsIk8iLCJWQ0hBUiQkIiwiTk9UX0xPQ0FMX1BBUlQiLCJOT1RfSEZOQU1FIiwiTk9UX0hGVkFMVUUiLCJtYWlsdG9Db21wb25lbnRzIiwidW5rbm93bkhlYWRlcnMiLCJoZWFkZXJzIiwiaGZpZWxkcyIsImhmaWVsZCIsInRvQWRkcnMiLCJzdWJqZWN0IiwiYWRkciIsInNldEludGVydmFsIiwidG9BZGRyIiwiYXRJZHgiLCJsb2NhbFBhcnQiLCJkb21haW4iLCJVUk5fUEFSU0UiLCJ1cm5Db21wb25lbnRzIiwibmlkIiwibnNzIiwidXJuU2NoZW1lIiwidXJpQ29tcG9uZW50cyIsInV1aWRDb21wb25lbnRzIiwiaHR0cHMiLCJ3c3MiLCJtYWlsdG8iLCJ1cm4iLCJiYXNlVVJJIiwicmVsYXRpdmVVUkkiLCJzY2hlbWVsZXNzT3B0aW9ucyIsInVyaUEiLCJ1cmlCIiwiRVNDQVBFIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImFtZEQiLCJnZXR0ZXIiLCJnZXRQcm90b3R5cGVPZiIsIm5zIiwiY3VycmVudCIsImdldE93blByb3BlcnR5TmFtZXMiLCJjaHVua0lkIiwidSIsImdsb2JhbFRoaXMiLCJkb25lIiwic2NyaXB0IiwibmVlZEF0dGFjaCIsInNjcmlwdHMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImdldEF0dHJpYnV0ZSIsImNoYXJzZXQiLCJuYyIsIm9uU2NyaXB0Q29tcGxldGUiLCJwcmV2Iiwib25sb2FkIiwiZG9uZUZucyIsInRvU3RyaW5nVGFnIiwic2NyaXB0VXJsIiwiaW1wb3J0U2NyaXB0cyIsImxvY2F0aW9uIiwiY3VycmVudFNjcmlwdCIsImluc3RhbGxlZENodW5rcyIsImluc3RhbGxlZENodW5rRGF0YSIsInByb21pc2UiLCJlcnJvclR5cGUiLCJyZWFsU3JjIiwid2VicGFja0pzb25wQ2FsbGJhY2siLCJwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbiIsImNodW5rSWRzIiwibW9yZU1vZHVsZXMiLCJydW50aW1lIiwiY2h1bmtMb2FkaW5nR2xvYmFsIiwibG9jYWxzIiwiZGlzcGxheSIsImFsaWduSXRlbXMiLCJpbm5lclRleHQiLCJnYXAiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCIsImlubmVySFRNTCIsImp1c3RpZnlDb250ZW50IiwiYXNwZWN0UmF0aW8iLCJvbmNsaWNrIiwid20iLCJ0b2dnbGVMYXVuY2hlciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJhc3luY0l0ZXJhdG9yIiwid3JhcCIsIkdlbmVyYXRvciIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiX2ludm9rZSIsIkFzeW5jSXRlcmF0b3IiLCJpbnZva2UiLCJfdHlwZW9mIiwiX19hd2FpdCIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJyZXN1bHROYW1lIiwibmV4dExvYyIsInB1c2hUcnlFbnRyeSIsInRyeUxvYyIsImNhdGNoTG9jIiwiZmluYWxseUxvYyIsImFmdGVyTG9jIiwidHJ5RW50cmllcyIsInJlc2V0VHJ5RW50cnkiLCJjb21wbGV0aW9uIiwicmVzZXQiLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJtYXJrIiwiX19wcm90b19fIiwiYXdyYXAiLCJzdG9wIiwicnZhbCIsImhhbmRsZSIsImZpbmlzaCIsImRlbGVnYXRlWWllbGQiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJnZW4iLCJfbmV4dCIsIl90aHJvdyIsImluZm8iLCJfYXN5bmNUb0dlbmVyYXRvciIsImFwcCIsImRldGFpbCIsImljb24iLCJfY2FsbGVlIiwid2luIiwiX2NvbnRleHQiLCJmb2N1cyIsIlN0YXR1c0JhciIsIl9jbGFzc0NhbGxDaGVjayIsImFwcFZpZXciLCJhcHBzIiwiY2xvY2siLCJzd2l0Y2hlciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwicHJvcHMiLCJkZXNjcmlwdG9yIiwiX3RvUHJvcGVydHlLZXkiLCJfZGVmaW5lUHJvcGVydHkiLCJoaW50IiwicHJpbSIsIl90b1ByaW1pdGl2ZSIsIlNldHRpbmdzQXBwIiwiaW5zdGFuY2UiLCJwcm90b1Byb3BzIiwiX29wZW4iLCJjcmVhdGVXaW5kb3ciLCJoZWlnaHQiLCJwYWRkaW5nIiwiRmlsZXNBcHAiLCJfY2FsbGVlMiIsInNldERpciIsIl9zZXREaXIiLCJfY29udGV4dDIiLCJiYWNrIiwiX2xvb3AiLCJmaWxlU3RhdCIsImZsb3ciLCJvcGVuQXBwIiwiX3giLCJ0MCIsImZsZXhEaXJlY3Rpb24iLCJNdXNpY0FwcCIsIkVkaXRvckFwcCIsIl95aWVsZCRpbXBvcnQiLCJlZGl0b3IiLCJzZXRUaXRsZSIsImVkaXQiLCJhdCIsImdldFNlc3Npb24iLCJzZXRNb2RlIiwicmVxdWlyZSIsInNldFRoZW1lIiwic2V0VmFsdWUiLCJwa2ciLCJDdXN0b21FdmVudCIsImRpc3BhdGNoRXZlbnQiLCJfYXJyYXlMaWtlVG9BcnJheSIsIl9jcmVhdGVDbGFzcyIsInN0YXRpY1Byb3BzIiwib25mb2N1cyIsIm9uYmx1ciIsIkZsb3dXaW5kb3ciLCJjb25maWciLCJfdGhpcyIsInpJbmRleCIsImdldEhpZ2hlc3RaSW5kZXgiLCJvbm1vdXNlZG93biIsImNvbnRhaW5lciIsInBvc1giLCJwb3NZIiwiZWxlbWVudERyYWciLCJkeCIsImNsaWVudFgiLCJkeSIsImNsaWVudFkiLCJuZXdUb3AiLCJvZmZzZXRUb3AiLCJuZXdMZWZ0Iiwib2Zmc2V0TGVmdCIsImNvbnRhaW5lcldpZHRoIiwib2Zmc2V0V2lkdGgiLCJjb250YWluZXJIZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJ0b3AiLCJjbG9zZURyYWdFbGVtZW50Iiwib25tb3VzZXVwIiwib25tb3VzZW1vdmUiLCJvbm1vdXNlbGVhdmUiLCJvbm1vdXNlZW50ZXIiLCJkcmFnRWxlbWVudCIsIldNIiwiYXJlYSIsImxhdW5jaGVyIiwiaW5pdCIsIl9pbml0IiwiaW5kZXhlcyIsIndpbmRvd3MiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJpdGVyIiwiX2l0ZXJhYmxlVG9BcnJheSIsIm1pbkxlbiIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsImxhdW5jaGVyT3BlbiIsIm9wYWNpdHkiLCJiYWNrZHJvcEZpbHRlciIsInBvaW50ZXJFdmVudHMiLCJfdGhpczIiLCJjdXJyZW50VGFyZ2V0Iiwic3RhdHVzQmFyIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/dist/flow.bundle.js.LICENSE.txt b/dist/flow.bundle.js.LICENSE.txt deleted file mode 100644 index 40867cd..0000000 --- a/dist/flow.bundle.js.LICENSE.txt +++ /dev/null @@ -1,12 +0,0 @@ -/*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - */ - -/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ - -/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ - -/** @license URI.js v4.4.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */ diff --git a/dist/images/2893674da98cb77a7081ab698791e26e.png b/dist/images/2893674da98cb77a7081ab698791e26e.png deleted file mode 100644 index ef7780ff57710914834972885d0bf6efc101b18e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44495 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

0t9^l7U8+(3 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 U7y2)T+oDbDwprd-<9h5r0DJyC%m4rY diff --git a/dist/images/67031c15d90a3d85854fb0857c00dfb3.png b/dist/images/67031c15d90a3d85854fb0857c00dfb3.png deleted file mode 100644 index 34b5bb2a636ba785f31e834ff670ff21a6fa4d99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58902 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%0Ae1al*BTcgz|f$3wocCn<7E_BR00s_R} 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 Vhm$kLN8dvvqU<}c_l_Gq<)3j+o~8f* diff --git a/dist/images/dbd1723a2fcf92e3b03a760a1259282c.png b/dist/images/dbd1723a2fcf92e3b03a760a1259282c.png deleted file mode 100644 index 5be6a26fb7acacfa11eafa39fc5d53777eae758a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53298 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 App \ No newline at end of file