>p,d=a>>p;i(u.mipmask&1<1&&n===r&&('"'===n||"'"===n))return['"'+F(t.substr(1,t.length-2))+'"'];var i=/\[(false|true|null|\d+|'[^']*'|"[^"]*")\]/.exec(t);if(i)return e(t.substr(0,i.index)).concat(e(i[1])).concat(e(t.substr(i.index+i[0].length)));var o=t.split(".");if(1===o.length)return['"'+F(t)+'"'];for(var a=[],s=0;se(t,n+"["+r+"]"))):t instanceof B?t:void O(!1,"invalid option type in uniform "+n)},accessor:z},N={next:"function"==typeof requestAnimationFrame?function(e){return requestAnimationFrame(e)}:function(e){return setTimeout(e,16)},cancel:"function"==typeof cancelAnimationFrame?function(e){return cancelAnimationFrame(e)}:clearTimeout},q="undefined"!=typeof performance&&performance.now?function(){return performance.now()}:function(){return+new Date};function H(e){return"string"==typeof e?e.split():(O(Array.isArray(e),"invalid extension array"),e)}function K(e){return"string"==typeof e?(O("undefined"!=typeof document,"not supported outside of DOM"),document.querySelector(e)):e}function G(e){var n,r,i,o,a,s=e||{},l={},u=[],c=[],p="undefined"==typeof window?1:window.devicePixelRatio,h=!1,f=function(e){e&&O.raise(e)},d=function(){};if("string"==typeof s?(O("undefined"!=typeof document,"selector queries only supported in DOM enviroments"),n=document.querySelector(s),O(n,"invalid query string for element")):"object"==typeof s?"string"==typeof(a=s).nodeName&&"function"==typeof a.appendChild&&"function"==typeof a.getBoundingClientRect?n=s:!function(e){return"function"==typeof e.drawArrays||"function"==typeof e.drawElements}(s)?(O.constructor(s),"gl"in s?o=s.gl:"canvas"in s?i=K(s.canvas):"container"in s&&(r=K(s.container)),"attributes"in s&&O.type(l=s.attributes,"object","invalid context attributes"),"extensions"in s&&(u=H(s.extensions)),"optionalExtensions"in s&&(c=H(s.optionalExtensions)),"onDone"in s&&(O.type(s.onDone,"function","invalid or missing onDone callback"),f=s.onDone),"profile"in s&&(h=!!s.profile),"pixelRatio"in s&&O((p=+s.pixelRatio)>0,"invalid pixel ratio")):i=(o=s).canvas:O.raise("invalid arguments to regl"),n&&("canvas"===n.nodeName.toLowerCase()?i=n:r=n),!o){if(!i){O("undefined"!=typeof document,"must manually specify webgl context outside of DOM environments");var m=function(e,n,r){var i,o=document.createElement("canvas");function a(){var n=window.innerWidth,i=window.innerHeight;if(e!==document.body){var a=e.getBoundingClientRect();n=a.right-a.left,i=a.bottom-a.top}o.width=r*n,o.height=r*i,t(o.style,{width:n+"px",height:i+"px"})}return t(o.style,{border:0,margin:0,padding:0,top:0,left:0}),e.appendChild(o),e===document.body&&(o.style.position="absolute",t(e.style,{margin:0,padding:0})),e!==document.body&&"function"==typeof ResizeObserver?(i=new ResizeObserver(function(){setTimeout(a)})).observe(e):window.addEventListener("resize",a,!1),a(),{canvas:o,onDestroy:function(){i?i.disconnect():window.removeEventListener("resize",a),e.removeChild(o)}}}(r||document.body,0,p);if(!m)return null;i=m.canvas,d=m.onDestroy}void 0===l.premultipliedAlpha&&(l.premultipliedAlpha=!0),o=function(e,t){function n(n){try{return e.getContext(n,t)}catch(e){return null}}return n("webgl")||n("experimental-webgl")||n("webgl-experimental")}(i,l)}return o?{gl:o,canvas:i,container:r,extensions:u,optionalExtensions:c,pixelRatio:p,profile:h,onDone:f,onDestroy:d}:(d(),f("webgl not supported, try upgrading your browser or graphics drivers http://get.webgl.org"),null)}function W(e,t){for(var n=Array(e),r=0;r65535)<<4,t|=n=((e>>>=t)>255)<<3,t|=n=((e>>>=n)>15)<<2,(t|=n=((e>>>=n)>3)<<1)|(e>>>=n)>>1}function ne(){var e=W(8,function(){return[]});function t(t){var n=function(e){for(var t=16;t<=1<<28;t*=16)if(e<=t)return t;return 0}(t),r=e[te(n)>>2];return r.length>0?r.pop():new ArrayBuffer(n)}function n(t){e[te(t.byteLength)>>2].push(t)}return{alloc:t,free:n,allocType:function(e,n){var r=null;switch(e){case $:r=new Int8Array(t(n),0,n);break;case Y:r=new Uint8Array(t(n),0,n);break;case Q:r=new Int16Array(t(2*n),0,n);break;case X:r=new Uint16Array(t(2*n),0,n);break;case J:r=new Int32Array(t(4*n),0,n);break;case Z:r=new Uint32Array(t(4*n),0,n);break;case ee:r=new Float32Array(t(4*n),0,n);break;default:return null}return r.length!==n?r.subarray(0,n):r},freeType:function(e){n(e.buffer)}}}var re=ne();re.zero=ne();var ie=function(e,t){var n=1;t.ext_texture_filter_anisotropic&&(n=e.getParameter(34047));var r=1,i=1;t.webgl_draw_buffers&&(r=e.getParameter(34852),i=e.getParameter(36063));var o=!!t.oes_texture_float;if(o){var a=e.createTexture();e.bindTexture(3553,a),e.texImage2D(3553,0,6408,1,1,0,6408,5126,null);var s=e.createFramebuffer();if(e.bindFramebuffer(36160,s),e.framebufferTexture2D(36160,36064,3553,a,0),e.bindTexture(3553,null),36053!==e.checkFramebufferStatus(36160))o=!1;else{e.viewport(0,0,1,1),e.clearColor(1,0,0,1),e.clear(16384);var l=re.allocType(5126,4);e.readPixels(0,0,1,1,6408,5126,l),e.getError()?o=!1:(e.deleteFramebuffer(s),e.deleteTexture(a),o=1===l[0]),re.freeType(l)}}var u=!0;if(!("undefined"!=typeof navigator&&(/MSIE/.test(navigator.userAgent)||/Trident\//.test(navigator.appVersion)||/Edge/.test(navigator.userAgent)))){var c=e.createTexture(),p=re.allocType(5121,36);e.activeTexture(33984),e.bindTexture(34067,c),e.texImage2D(34069,0,6408,3,3,0,6408,5121,p),re.freeType(p),e.bindTexture(34067,null),e.deleteTexture(c),u=!e.getError()}return{colorBits:[e.getParameter(3410),e.getParameter(3411),e.getParameter(3412),e.getParameter(3413)],depthBits:e.getParameter(3414),stencilBits:e.getParameter(3415),subpixelBits:e.getParameter(3408),extensions:Object.keys(t).filter(function(e){return!!t[e]}),maxAnisotropic:n,maxDrawbuffers:r,maxColorAttachments:i,pointSizeDims:e.getParameter(33901),lineWidthDims:e.getParameter(33902),maxViewportDims:e.getParameter(3386),maxCombinedTextureUnits:e.getParameter(35661),maxCubeMapSize:e.getParameter(34076),maxRenderbufferSize:e.getParameter(34024),maxTextureUnits:e.getParameter(34930),maxTextureSize:e.getParameter(3379),maxAttributes:e.getParameter(34921),maxVertexUniforms:e.getParameter(36347),maxVertexTextureUnits:e.getParameter(35660),maxVaryingVectors:e.getParameter(36348),maxFragmentUniforms:e.getParameter(36349),glsl:e.getParameter(35724),renderer:e.getParameter(7937),vendor:e.getParameter(7936),version:e.getParameter(7938),readFloat:o,npotTextureCube:u}};function oe(t){return!!t&&"object"==typeof t&&Array.isArray(t.shape)&&Array.isArray(t.stride)&&"number"==typeof t.offset&&t.shape.length===t.stride.length&&(Array.isArray(t.data)||e(t.data))}var ae=function(e){return Object.keys(e).map(function(t){return e[t]})},se={shape:function(e){for(var t=[],n=e;n.length;n=n[0])t.push(n.length);return t},flatten:function(e,t,n,r){var i=1;if(t.length)for(var o=0;o>>31<<15,o=(r<<1>>>24)-127,a=r>>13&1023;if(o<-24)t[n]=i;else if(o<-14){t[n]=i+(a+1024>>-14-o)}else t[n]=o>15?i+31744:i+(o+15<<10)+a}return t}function Fe(t){return Array.isArray(t)||e(t)}var ze=function(e){return!(e&e-1||!e)},Ue=34467,Ne=3553,qe=34067,He=34069,Ke=6408,Ge=6406,We=6407,$e=6409,Ye=6410,Qe=32854,Xe=32855,Je=36194,Ze=32819,et=32820,tt=33635,nt=34042,rt=6402,it=34041,ot=35904,at=35906,st=36193,lt=33776,ut=33777,ct=33778,pt=33779,ht=35986,ft=35987,dt=34798,mt=35840,vt=35841,bt=35842,gt=35843,yt=36196,wt=5121,_t=5123,xt=5125,kt=5126,Ct=10242,Et=10243,At=10497,Pt=33071,Mt=33648,St=10240,Tt=10241,Vt=9728,jt=9729,Ot=9984,Dt=9985,Lt=9986,Rt=9987,It=33170,Bt=4352,Ft=4353,zt=4354,Ut=34046,Nt=3317,qt=37440,Ht=37441,Kt=37443,Gt=37444,Wt=33984,$t=[Ot,Lt,Dt,Rt],Yt=[0,$e,Ye,We,Ke],Qt={};function Xt(e){return"[object "+e+"]"}Qt[$e]=Qt[Ge]=Qt[rt]=1,Qt[it]=Qt[Ye]=2,Qt[We]=Qt[ot]=3,Qt[Ke]=Qt[at]=4;var Jt=Xt("HTMLCanvasElement"),Zt=Xt("OffscreenCanvas"),en=Xt("CanvasRenderingContext2D"),tn=Xt("ImageBitmap"),nn=Xt("HTMLImageElement"),rn=Xt("HTMLVideoElement"),on=Object.keys(ue).concat([Jt,Zt,en,tn,nn,rn]),an=[];an[wt]=1,an[kt]=4,an[st]=2,an[_t]=2,an[xt]=4;var sn=[];function ln(e){return Array.isArray(e)&&(0===e.length||"number"==typeof e[0])}function un(e){return!!Array.isArray(e)&&!(0===e.length||!Fe(e[0]))}function cn(e){return Object.prototype.toString.call(e)}function pn(e){return cn(e)===Jt}function hn(e){return cn(e)===Zt}function fn(e){if(!e)return!1;var t=cn(e);return on.indexOf(t)>=0||(ln(e)||un(e)||oe(e))}function dn(e){return 0|ue[Object.prototype.toString.call(e)]}function mn(e,t){return re.allocType(e.type===st?kt:e.type,t)}function vn(e,t){e.type===st?(e.data=Be(t),re.freeType(t)):e.data=t}function bn(e,t,n,r,i,o){var a;if(a=void 0!==sn[e]?sn[e]:Qt[e]*an[t],o&&(a*=6),i){for(var s=0,l=n;l>=1;)s+=a*l*l,l/=2;return s}return a*n*r}function gn(n,r,i,o,a,s,l){var u={"don't care":Bt,"dont care":Bt,nice:zt,fast:Ft},c={repeat:At,clamp:Pt,mirror:Mt},p={nearest:Vt,linear:jt},h=t({mipmap:Rt,"nearest mipmap nearest":Ot,"linear mipmap nearest":Dt,"nearest mipmap linear":Lt,"linear mipmap linear":Rt},p),f={none:0,browser:Gt},d={uint8:wt,rgba4:Ze,rgb565:tt,"rgb5 a1":et},m={alpha:Ge,luminance:$e,"luminance alpha":Ye,rgb:We,rgba:Ke,rgba4:Qe,"rgb5 a1":Xe,rgb565:Je},v={};r.ext_srgb&&(m.srgb=ot,m.srgba=at),r.oes_texture_float&&(d.float32=d.float=kt),r.oes_texture_half_float&&(d.float16=d["half float"]=st),r.webgl_depth_texture&&(t(m,{depth:rt,"depth stencil":it}),t(d,{uint16:_t,uint32:xt,"depth stencil":nt})),r.webgl_compressed_texture_s3tc&&t(v,{"rgb s3tc dxt1":lt,"rgba s3tc dxt1":ut,"rgba s3tc dxt3":ct,"rgba s3tc dxt5":pt}),r.webgl_compressed_texture_atc&&t(v,{"rgb atc":ht,"rgba atc explicit alpha":ft,"rgba atc interpolated alpha":dt}),r.webgl_compressed_texture_pvrtc&&t(v,{"rgb pvrtc 4bppv1":mt,"rgb pvrtc 2bppv1":vt,"rgba pvrtc 4bppv1":bt,"rgba pvrtc 2bppv1":gt}),r.webgl_compressed_texture_etc1&&(v["rgb etc1"]=yt);var b=Array.prototype.slice.call(n.getParameter(Ue));Object.keys(v).forEach(function(e){var t=v[e];b.indexOf(t)>=0&&(m[e]=t)});var g=Object.keys(m);i.textureFormats=g;var y=[];Object.keys(m).forEach(function(e){y[m[e]]=e});var w=[];Object.keys(d).forEach(function(e){w[d[e]]=e});var _=[];Object.keys(p).forEach(function(e){_[p[e]]=e});var x=[];Object.keys(h).forEach(function(e){x[h[e]]=e});var k=[];Object.keys(c).forEach(function(e){k[c[e]]=e});var C=g.reduce(function(e,t){var n=m[t];return e[n]=n===$e||n===Ge||n===$e||n===Ye||n===rt||n===it||r.ext_srgb&&(n===ot||n===at)?n:n===Xe||t.indexOf("rgba")>=0?Ke:We,e},{});function E(){this.internalformat=Ke,this.format=Ke,this.type=wt,this.compressed=!1,this.premultiplyAlpha=!1,this.flipY=!1,this.unpackAlignment=1,this.colorSpace=Gt,this.width=0,this.height=0,this.channels=0}function A(e,t){e.internalformat=t.internalformat,e.format=t.format,e.type=t.type,e.compressed=t.compressed,e.premultiplyAlpha=t.premultiplyAlpha,e.flipY=t.flipY,e.unpackAlignment=t.unpackAlignment,e.colorSpace=t.colorSpace,e.width=t.width,e.height=t.height,e.channels=t.channels}function P(e,t){if("object"==typeof t&&t){if("premultiplyAlpha"in t&&(O.type(t.premultiplyAlpha,"boolean","invalid premultiplyAlpha"),e.premultiplyAlpha=t.premultiplyAlpha),"flipY"in t&&(O.type(t.flipY,"boolean","invalid texture flip"),e.flipY=t.flipY),"alignment"in t&&(O.oneOf(t.alignment,[1,2,4,8],"invalid texture unpack alignment"),e.unpackAlignment=t.alignment),"colorSpace"in t&&(O.parameter(t.colorSpace,f,"invalid colorSpace"),e.colorSpace=f[t.colorSpace]),"type"in t){var n=t.type;O(r.oes_texture_float||!("float"===n||"float32"===n),"you must enable the OES_texture_float extension in order to use floating point textures."),O(r.oes_texture_half_float||!("half float"===n||"float16"===n),"you must enable the OES_texture_half_float extension in order to use 16-bit floating point textures."),O(r.webgl_depth_texture||!("uint16"===n||"uint32"===n||"depth stencil"===n),"you must enable the WEBGL_depth_texture extension in order to use depth/stencil textures."),O.parameter(n,d,"invalid texture type"),e.type=d[n]}var o=e.width,a=e.height,s=e.channels,l=!1;"shape"in t?(O(Array.isArray(t.shape)&&t.shape.length>=2,"shape must be an array"),o=t.shape[0],a=t.shape[1],3===t.shape.length&&(O((s=t.shape[2])>0&&s<=4,"invalid number of channels"),l=!0),O(o>=0&&o<=i.maxTextureSize,"invalid width"),O(a>=0&&a<=i.maxTextureSize,"invalid height")):("radius"in t&&(o=a=t.radius,O(o>=0&&o<=i.maxTextureSize,"invalid radius")),"width"in t&&O((o=t.width)>=0&&o<=i.maxTextureSize,"invalid width"),"height"in t&&O((a=t.height)>=0&&a<=i.maxTextureSize,"invalid height"),"channels"in t&&(O((s=t.channels)>0&&s<=4,"invalid number of channels"),l=!0)),e.width=0|o,e.height=0|a,e.channels=0|s;var u=!1;if("format"in t){var c=t.format;O(r.webgl_depth_texture||!("depth"===c||"depth stencil"===c),"you must enable the WEBGL_depth_texture extension in order to use depth/stencil textures."),O.parameter(c,m,"invalid texture format");var p=e.internalformat=m[c];e.format=C[p],c in d&&("type"in t||(e.type=d[c])),c in v&&(e.compressed=!0),u=!0}!l&&u?e.channels=Qt[e.format]:l&&!u?e.channels!==Yt[e.format]&&(e.format=e.internalformat=Yt[e.channels]):u&&l&&O(e.channels===Qt[e.format],"number of channels inconsistent with specified format")}}function M(e){n.pixelStorei(qt,e.flipY),n.pixelStorei(Ht,e.premultiplyAlpha),n.pixelStorei(Kt,e.colorSpace),n.pixelStorei(Nt,e.unpackAlignment)}function S(){E.call(this),this.xOffset=0,this.yOffset=0,this.data=null,this.needsFree=!1,this.element=null,this.needsCopy=!1}function T(t,n){var r=null;if(fn(n)?r=n:n&&(O.type(n,"object","invalid pixel data type"),P(t,n),"x"in n&&(t.xOffset=0|n.x),"y"in n&&(t.yOffset=0|n.y),fn(n.data)&&(r=n.data)),O(!t.compressed||r instanceof Uint8Array,"compressed texture data must be stored in a uint8array"),n.copy){O(!r,"can not specify copy and data field for the same texture");var o=a.viewportWidth,s=a.viewportHeight;t.width=t.width||o-t.xOffset,t.height=t.height||s-t.yOffset,t.needsCopy=!0,O(t.xOffset>=0&&t.xOffset=0&&t.yOffset0&&t.width<=o&&t.height>0&&t.height<=s,"copy texture read out of bounds")}else if(r){if(e(r))t.channels=t.channels||4,t.data=r,"type"in n||t.type!==wt||(t.type=dn(r));else if(ln(r))t.channels=t.channels||4,function(e,t){var n=t.length;switch(e.type){case wt:case _t:case xt:case kt:var r=re.allocType(e.type,n);r.set(t),e.data=r;break;case st:e.data=Be(t);break;default:O.raise("unsupported texture type, must specify a typed array")}}(t,r),t.alignment=1,t.needsFree=!0;else if(oe(r)){var l=r.data;Array.isArray(l)||t.type!==wt||(t.type=dn(l));var u,c,p,h,f,d,m=r.shape,v=r.stride;3===m.length?(p=m[2],d=v[2]):(O(2===m.length,"invalid ndarray pixel data, must be 2 or 3D"),p=1,d=1),u=m[0],c=m[1],h=v[0],f=v[1],t.alignment=1,t.width=u,t.height=c,t.channels=p,t.format=t.internalformat=Yt[p],t.needsFree=!0,function(e,t,n,r,i,o){for(var a=e.width,s=e.height,l=e.channels,u=mn(e,a*s*l),c=0,p=0;p=0,"oes_texture_float extension not enabled"):t.type===st&&O(i.extensions.indexOf("oes_texture_half_float")>=0,"oes_texture_half_float extension not enabled")}function V(e,t,r){var i=e.element,a=e.data,s=e.internalformat,l=e.format,u=e.type,c=e.width,p=e.height;M(e),i?n.texImage2D(t,r,l,l,u,i):e.compressed?n.compressedTexImage2D(t,r,s,c,p,0,a):e.needsCopy?(o(),n.copyTexImage2D(t,r,l,e.xOffset,e.yOffset,c,p,0)):n.texImage2D(t,r,l,c,p,0,l,u,a||null)}function j(e,t,r,i,a){var s=e.element,l=e.data,u=e.internalformat,c=e.format,p=e.type,h=e.width,f=e.height;M(e),s?n.texSubImage2D(t,a,r,i,c,p,s):e.compressed?n.compressedTexSubImage2D(t,a,r,i,u,h,f,l):e.needsCopy?(o(),n.copyTexSubImage2D(t,a,r,i,e.xOffset,e.yOffset,h,f)):n.texSubImage2D(t,a,r,i,h,f,c,p,l)}var D=[];function L(){return D.pop()||new S}function R(e){e.needsFree&&re.freeType(e.data),S.call(e),D.push(e)}function I(){E.call(this),this.genMipmaps=!1,this.mipmapHint=Bt,this.mipmask=0,this.images=Array(16)}function B(e,t,n){var r=e.images[0]=L();e.mipmask=1,r.width=e.width=t,r.height=e.height=n,r.channels=e.channels=4}function F(e,t){var n=null;if(fn(t))A(n=e.images[0]=L(),e),T(n,t),e.mipmask=1;else if(P(e,t),Array.isArray(t.mipmap))for(var r=t.mipmap,i=0;i>=i,n.height>>=i,T(n,r[i]),e.mipmask|=1<=0&&!("faces"in t)&&(e.genMipmaps=!0)}if("mag"in t){var r=t.mag;O.parameter(r,p),e.magFilter=p[r]}var o=e.wrapS,a=e.wrapT;if("wrap"in t){var s=t.wrap;"string"==typeof s?(O.parameter(s,c),o=a=c[s]):Array.isArray(s)&&(O.parameter(s[0],c),O.parameter(s[1],c),o=c[s[0]],a=c[s[1]])}else{if("wrapS"in t){var l=t.wrapS;O.parameter(l,c),o=c[l]}if("wrapT"in t){var f=t.wrapT;O.parameter(f,c),a=c[f]}}if(e.wrapS=o,e.wrapT=a,"anisotropic"in t){var d=t.anisotropic;O("number"==typeof d&&d>=1&&d<=i.maxAnisotropic,"aniso samples must be between 1 and "),e.anisotropic=t.anisotropic}if("mipmap"in t){var m=!1;switch(typeof t.mipmap){case"string":O.parameter(t.mipmap,u,"invalid mipmap hint"),e.mipmapHint=u[t.mipmap],e.genMipmaps=!0,m=!0;break;case"boolean":m=e.genMipmaps=t.mipmap;break;case"object":O(Array.isArray(t.mipmap),"invalid mipmap type"),e.genMipmaps=!1,m=!0;break;default:O.raise("invalid mipmap type")}!m||"min"in t||(e.minFilter=Ot)}}function G(e,t){n.texParameteri(t,Tt,e.minFilter),n.texParameteri(t,St,e.magFilter),n.texParameteri(t,Ct,e.wrapS),n.texParameteri(t,Et,e.wrapT),r.ext_texture_filter_anisotropic&&n.texParameteri(t,Ut,e.anisotropic),e.genMipmaps&&(n.hint(It,e.mipmapHint),n.generateMipmap(t))}var W=0,$={},Y=i.maxTextureUnits,Q=Array(Y).map(function(){return null});function X(e){E.call(this),this.mipmask=0,this.internalformat=Ke,this.id=W++,this.refCount=1,this.target=e,this.texture=n.createTexture(),this.unit=-1,this.bindCount=0,this.texInfo=new H,l.profile&&(this.stats={size:0})}function J(e){n.activeTexture(Wt),n.bindTexture(e.target,e.texture)}function Z(){var e=Q[0];e?n.bindTexture(e.target,e.texture):n.bindTexture(Ne,null)}function ee(e){var t=e.texture;O(t,"must not double destroy texture");var r=e.unit,i=e.target;r>=0&&(n.activeTexture(Wt+r),n.bindTexture(i,null),Q[r]=null),n.deleteTexture(t),e.texture=null,e.params=null,e.pixels=null,e.refCount=0,delete $[e.id],s.textureCount--}return t(X.prototype,{bind:function(){this.bindCount+=1;var e=this.unit;if(e<0){for(var t=0;t0)continue;r.unit=-1}Q[t]=this,e=t;break}e>=Y&&O.raise("insufficient number of texture units"),l.profile&&s.maxTextureUnits>l)-a,u.height=u.height||(r.height>>l)-s,O(r.type===u.type&&r.format===u.format&&r.internalformat===u.internalformat,"incompatible format for texture.subimage"),O(a>=0&&s>=0&&a+u.width<=r.width&&s+u.height<=r.height,"texture.subimage write out of bounds"),O(r.mipmask&1<>s;++s){var u=i>>s,c=a>>s;if(!u||!c)break;n.texImage2D(Ne,s,r.format,u,c,0,r.format,r.type,null)}return Z(),l.profile&&(r.stats.size=bn(r.internalformat,r.type,i,a,!1,!1)),o},o._reglType="texture2d",o._texture=r,l.profile&&(o.stats=r.stats),o.destroy=function(){r.decRef()},o},createCube:function(e,t,r,o,a,u){var c=new X(qe);$[c.id]=c,s.cubeCount++;var p=new Array(6);function h(e,t,n,r,o,a){var s,u=c.texInfo;for(H.call(u),s=0;s<6;++s)p[s]=N();if("number"!=typeof e&&e)if("object"==typeof e)if(t)F(p[0],e),F(p[1],t),F(p[2],n),F(p[3],r),F(p[4],o),F(p[5],a);else if(K(u,e),P(c,e),"faces"in e){var f=e.faces;for(O(Array.isArray(f)&&6===f.length,"cube faces must be a length 6 array"),s=0;s<6;++s)O("object"==typeof f[s]&&!!f[s],"invalid input for cube map face"),A(p[s],c),F(p[s],f[s])}else for(s=0;s<6;++s)F(p[s],e);else O.raise("invalid arguments to cube map");else{var d=0|e||1;for(s=0;s<6;++s)B(p[s],d,d)}for(A(c,p[0]),i.npotTextureCube||O(ze(c.width)&&ze(c.height),"your browser does not support non power or two texture dimensions"),c.mipmask=u.genMipmaps?(p[0].width<<1)-1:p[0].mipmask,O.textureCube(c,u,p,i),c.internalformat=p[0].internalformat,h.width=p[0].width,h.height=p[0].height,J(c),s=0;s<6;++s)z(p[s],He+s);for(G(u,qe),Z(),l.profile&&(c.stats.size=bn(c.internalformat,c.type,h.width,h.height,u.genMipmaps,!0)),h.format=y[c.internalformat],h.type=w[c.type],h.mag=_[u.magFilter],h.min=x[u.minFilter],h.wrapS=k[u.wrapS],h.wrapT=k[u.wrapT],s=0;s<6;++s)q(p[s]);return h}return h(e,t,r,o,a,u),h.subimage=function(e,t,n,r,i){O(!!t,"must specify image data"),O("number"==typeof e&&e===(0|e)&&e>=0&&e<6,"invalid face");var o=0|n,a=0|r,s=0|i,l=L();return A(l,c),l.width=0,l.height=0,T(l,t),l.width=l.width||(c.width>>s)-o,l.height=l.height||(c.height>>s)-a,O(c.type===l.type&&c.format===l.format&&c.internalformat===l.internalformat,"incompatible format for texture.subimage"),O(o>=0&&a>=0&&o+l.width<=c.width&&a+l.height<=c.height,"texture.subimage write out of bounds"),O(c.mipmask&1<>i;++i)n.texImage2D(He+r,i,c.format,t>>i,t>>i,0,c.format,c.type,null);return Z(),l.profile&&(c.stats.size=bn(c.internalformat,c.type,h.width,h.height,!1,!0)),h}},h._reglType="textureCube",h._texture=c,l.profile&&(h.stats=c.stats),h.destroy=function(){c.decRef()},h},clear:function(){for(var e=0;e>t,e.height>>t,0,e.internalformat,e.type,null);else for(var r=0;r<6;++r)n.texImage2D(He+r,t,e.internalformat,e.width>>t,e.height>>t,0,e.internalformat,e.type,null);G(e.texInfo,e.target)})},refresh:function(){for(var e=0;e=2,"invalid renderbuffer shape"),s=0|f[0],l=0|f[1]}else"radius"in h&&(s=l=0|h.radius),"width"in h&&(s=0|h.width),"height"in h&&(l=0|h.height);"format"in h&&(O.parameter(h.format,o,"invalid renderbuffer format"),u=o[h.format])}else"number"==typeof t?(s=0|t,l="number"==typeof r?0|r:s):t?O.raise("invalid arguments to renderbuffer constructor"):s=l=1;if(O(s>0&&l>0&&s<=n.maxRenderbufferSize&&l<=n.maxRenderbufferSize,"invalid renderbuffer size"),s!==c.width||l!==c.height||u!==c.format)return p.width=c.width=s,p.height=c.height=l,c.format=u,e.bindRenderbuffer(yn,c.renderbuffer),e.renderbufferStorage(yn,u,s,l),O(0===e.getError(),"invalid render buffer format"),i.profile&&(c.stats.size=xn(c.format,c.width,c.height)),p.format=a[c.format],p}return l[c.id]=c,r.renderbufferCount++,p(t,s),p.resize=function(t,r){var o=0|t,a=0|r||o;return o===c.width&&a===c.height?p:(O(o>0&&a>0&&o<=n.maxRenderbufferSize&&a<=n.maxRenderbufferSize,"invalid renderbuffer size"),p.width=c.width=o,p.height=c.height=a,e.bindRenderbuffer(yn,c.renderbuffer),e.renderbufferStorage(yn,c.format,o,a),O(0===e.getError(),"invalid render buffer format"),i.profile&&(c.stats.size=xn(c.format,c.width,c.height)),p)},p._reglType="renderbuffer",p._renderbuffer=c,i.profile&&(p.stats=c.stats),p.destroy=function(){c.decRef()},p},clear:function(){ae(l).forEach(c)},restore:function(){ae(l).forEach(function(t){t.renderbuffer=e.createRenderbuffer(),e.bindRenderbuffer(yn,t.renderbuffer),e.renderbufferStorage(yn,t.format,t.width,t.height)}),e.bindRenderbuffer(yn,null)}}},Cn=36160,En=36161,An=3553,Pn=34069,Mn=36064,Sn=36096,Tn=36128,Vn=33306,jn=36053,On=6402,Dn=[6407,6408],Ln=[];Ln[6408]=4,Ln[6407]=3;var Rn=[];Rn[5121]=1,Rn[5126]=4,Rn[36193]=2;var In=33189,Bn=36168,Fn=34041,zn=[32854,32855,36194,35907,34842,34843,34836],Un={};Un[jn]="complete",Un[36054]="incomplete attachment",Un[36057]="incomplete dimensions",Un[36055]="incomplete, missing attachment",Un[36061]="unsupported";var Nn=5126,qn=34962;function Hn(){this.state=0,this.x=0,this.y=0,this.z=0,this.w=0,this.buffer=null,this.size=0,this.normalized=!1,this.type=Nn,this.offset=0,this.stride=0,this.divisor=0}var Kn=35632,Gn=35633,Wn=35718,$n=35721,Yn=6408,Qn=5121,Xn=3333,Jn=5126;function Zn(t,n,r,i,o,a,s){function l(l){var u;null===n.next?(O(o.preserveDrawingBuffer,'you must create a webgl context with "preserveDrawingBuffer":true in order to read pixels from the drawing buffer'),u=Qn):(O(null!==n.next.colorAttachments[0].texture,"You cannot read from a renderbuffer"),u=n.next.colorAttachments[0].texture._texture.type,a.oes_texture_float?(O(u===Qn||u===Jn,"Reading from a framebuffer is only allowed for the types 'uint8' and 'float'"),u===Jn&&O(s.readFloat,"Reading 'float' values is not permitted in your browser. For a fallback, please see: https://www.npmjs.com/package/glsl-read-float")):O(u===Qn,"Reading from a framebuffer is only allowed for the type 'uint8'"));var c=0,p=0,h=i.framebufferWidth,f=i.framebufferHeight,d=null;e(l)?d=l:l&&(O.type(l,"object","invalid arguments to regl.read()"),p=0|l.y,O((c=0|l.x)>=0&&c=0&&p0&&h+c<=i.framebufferWidth,"invalid width for read pixels"),O(f>0&&f+p<=i.framebufferHeight,"invalid height for read pixels"),r();var m=h*f*4;return d||(u===Qn?d=new Uint8Array(m):u===Jn&&(d=d||new Float32Array(m))),O.isTypedArray(d,"data buffer for regl.read() must be a typedarray"),O(d.byteLength>=m,"data buffer for regl.read() too small"),t.pixelStorei(Xn,4),t.readPixels(c,p,h,f,Yn,u,d),d}return function(e){return e&&"framebuffer"in e?function(e){var t;return n.setFBO({framebuffer:e.framebuffer},function(){t=l(e)}),t}(e):l(e)}}function er(e){return Array.prototype.slice.call(e)}function tr(e){return er(e).join("")}var nr="xyzw".split(""),rr=5121,ir=1,or=2,ar=0,sr=1,lr=2,ur=3,cr=4,pr=5,hr=6,fr="dither",dr="blend.enable",mr="blend.color",vr="blend.equation",br="blend.func",gr="depth.enable",yr="depth.func",wr="depth.range",_r="depth.mask",xr="colorMask",kr="cull.enable",Cr="cull.face",Er="frontFace",Ar="lineWidth",Pr="polygonOffset.enable",Mr="polygonOffset.offset",Sr="sample.alpha",Tr="sample.enable",Vr="sample.coverage",jr="stencil.enable",Or="stencil.mask",Dr="stencil.func",Lr="stencil.opFront",Rr="stencil.opBack",Ir="scissor.enable",Br="scissor.box",Fr="viewport",zr="profile",Ur="framebuffer",Nr="vert",qr="frag",Hr="elements",Kr="primitive",Gr="count",Wr="offset",$r="instances",Yr="vao",Qr=Ur+"Width",Xr=Ur+"Height",Jr=Fr+"Width",Zr=Fr+"Height",ei="drawingBufferWidth",ti="drawingBufferHeight",ni=[br,vr,Dr,Lr,Rr,Vr,Fr,Br,Mr],ri=34962,ii=34963,oi=3553,ai=34067,si=2884,li=3042,ui=3024,ci=2960,pi=2929,hi=3089,fi=32823,di=32926,mi=32928,vi=5126,bi=35664,gi=35665,yi=35666,wi=5124,_i=35667,xi=35668,ki=35669,Ci=35670,Ei=35671,Ai=35672,Pi=35673,Mi=35674,Si=35675,Ti=35676,Vi=35678,ji=35680,Oi=4,Di=1028,Li=1029,Ri=2304,Ii=2305,Bi=32775,Fi=32776,zi=519,Ui=7680,Ni=0,qi=1,Hi=32774,Ki=513,Gi=36160,Wi=36064,$i={0:0,1:1,zero:0,one:1,"src color":768,"one minus src color":769,"src alpha":770,"one minus src alpha":771,"dst color":774,"one minus dst color":775,"dst alpha":772,"one minus dst alpha":773,"constant color":32769,"one minus constant color":32770,"constant alpha":32771,"one minus constant alpha":32772,"src alpha saturate":776},Yi=["constant color, constant alpha","one minus constant color, constant alpha","constant color, one minus constant alpha","one minus constant color, one minus constant alpha","constant alpha, constant color","constant alpha, one minus constant color","one minus constant alpha, constant color","one minus constant alpha, one minus constant color"],Qi={never:512,less:513,"<":513,equal:514,"=":514,"==":514,"===":514,lequal:515,"<=":515,greater:516,">":516,notequal:517,"!=":517,"!==":517,gequal:518,">=":518,always:519},Xi={0:0,zero:0,keep:7680,replace:7681,increment:7682,decrement:7683,"increment wrap":34055,"decrement wrap":34056,invert:5386},Ji={frag:35632,vert:35633},Zi={cw:Ri,ccw:Ii};function eo(t){return Array.isArray(t)||e(t)||oe(t)}function to(e){return e.sort(function(e,t){return e===Fr?-1:t===Fr?1:e=1,r>=2,t)}if(n===cr){var i=e.data;return new no(i.thisDep,i.contextDep,i.propDep,t)}if(n===pr)return new no(!1,!1,!1,t);if(n===hr){for(var o=!1,a=!1,s=!1,l=0;l=1&&(a=!0),c>=2&&(s=!0)}else u.type===cr&&(o=o||u.data.thisDep,a=a||u.data.contextDep,s=s||u.data.propDep)}return new no(o,a,s,t)}return new no(n===ur,n===lr,n===sr,t)}var ao=new no(!1,!1,!1,function(){});function so(e,n,r,i,o,a,s,l,u,c,p,h,f,d,m){var v=c.Record,b={add:32774,subtract:32778,"reverse subtract":32779};r.ext_blend_minmax&&(b.min=Bi,b.max=Fi);var g=r.angle_instanced_arrays,y=r.webgl_draw_buffers,w={dirty:!0,profile:m.profile},_={},x=[],k={},C={};function E(e){return e.replace(".","_")}function A(e,t,n){var r=E(e);x.push(e),_[r]=w[r]=!!n,k[r]=t}function P(e,t,n){var r=E(e);x.push(e),Array.isArray(n)?(w[r]=n.slice(),_[r]=n.slice()):w[r]=_[r]=n,C[r]=t}A(fr,ui),A(dr,li),P(mr,"blendColor",[0,0,0,0]),P(vr,"blendEquationSeparate",[Hi,Hi]),P(br,"blendFuncSeparate",[qi,Ni,qi,Ni]),A(gr,pi,!0),P(yr,"depthFunc",Ki),P(wr,"depthRange",[0,1]),P(_r,"depthMask",!0),P(xr,xr,[!0,!0,!0,!0]),A(kr,si),P(Cr,"cullFace",Li),P(Er,Er,Ii),P(Ar,Ar,1),A(Pr,fi),P(Mr,"polygonOffset",[0,0]),A(Sr,di),A(Tr,mi),P(Vr,"sampleCoverage",[1,!1]),A(jr,ci),P(Or,"stencilMask",-1),P(Dr,"stencilFunc",[zi,0,-1]),P(Lr,"stencilOpSeparate",[Di,Ui,Ui,Ui]),P(Rr,"stencilOpSeparate",[Li,Ui,Ui,Ui]),A(Ir,hi),P(Br,"scissor",[0,0,e.drawingBufferWidth,e.drawingBufferHeight]),P(Fr,Fr,[0,0,e.drawingBufferWidth,e.drawingBufferHeight]);var M={gl:e,context:f,strings:n,next:_,current:w,draw:h,elements:a,buffer:o,shader:p,attributes:c.state,vao:c,uniforms:u,framebuffer:l,extensions:r,timer:d,isBufferArgs:eo},S={primTypes:xe,compareFuncs:Qi,blendFuncs:$i,blendEquations:b,stencilOps:Xi,glTypes:ce,orientationType:Zi};O.optional(function(){M.isArrayLike=Fe}),y&&(S.backBuffer=[Li],S.drawBuffer=W(i.maxDrawbuffers,function(e){return 0===e?[0]:W(e,function(e){return Wi+e})}));var T=0;function V(){var e=function(){var e=0,n=[],r=[];function i(){var n=[],r=[];return t(function(){n.push.apply(n,er(arguments))},{def:function(){var t="v"+e++;return r.push(t),arguments.length>0&&(n.push(t,"="),n.push.apply(n,er(arguments)),n.push(";")),t},toString:function(){return tr([r.length>0?"var "+r.join(",")+";":"",tr(n)])}})}function o(){var e=i(),n=i(),r=e.toString,o=n.toString;function a(t,r){n(t,r,"=",e.def(t,r),";")}return t(function(){e.apply(e,er(arguments))},{def:e.def,entry:e,exit:n,save:a,set:function(t,n,r){a(t,n),e(t,n,"=",r,";")},toString:function(){return r()+o()}})}var a=i(),s={};return{global:a,link:function(t){for(var i=0;i=0,'unknown parameter "'+t+'"',h.commandStr)})}t(f),t(d)});var m=function(e,t){var n=e.static;if("string"==typeof n[qr]&&"string"==typeof n[Nr]){if(Object.keys(t.dynamic).length>0)return null;var r=t.static,i=Object.keys(r);if(i.length>0&&"number"==typeof r[i[0]]){for(var o=[],a=0;a=0,"invalid "+e,n.commandStr):l=!1,"height"in o?O.command((s=0|o.height)>=0,"invalid "+e,n.commandStr):l=!1,new no(!l&&t&&t.thisDep,!l&&t&&t.contextDep,!l&&t&&t.propDep,function(e,t){var n=e.shared.context,r=a;"width"in o||(r=t.def(n,".",Qr,"-",u));var i=s;return"height"in o||(i=t.def(n,".",Xr,"-",c)),[u,c,r,i]})}if(e in i){var p=i[e],h=oo(p,function(t,n){var r=t.invoke(n,p);O.optional(function(){t.assert(n,r+"&&typeof "+r+'==="object"',"invalid "+e)});var i=t.shared.context,o=n.def(r,".x|0"),a=n.def(r,".y|0"),s=n.def('"width" in ',r,"?",r,".width|0:","(",i,".",Qr,"-",o,")"),l=n.def('"height" in ',r,"?",r,".height|0:","(",i,".",Xr,"-",a,")");return O.optional(function(){t.assert(n,s+">=0&&"+l+">=0","invalid "+e)}),[o,a,s,l]});return t&&(h.thisDep=h.thisDep||t.thisDep,h.contextDep=h.contextDep||t.contextDep,h.propDep=h.propDep||t.propDep),h}return t?new no(t.thisDep,t.contextDep,t.propDep,function(e,t){var n=e.shared.context;return[0,0,t.def(n,".",Qr),t.def(n,".",Xr)]}):null}var a=o(Fr);if(a){var s=a;a=new no(a.thisDep,a.contextDep,a.propDep,function(e,t){var n=s.append(e,t),r=e.shared.context;return t.set(r,"."+Jr,n[2]),t.set(r,"."+Zr,n[3]),n})}return{viewport:a,scissor_box:o(Br)}}(e,y,h),_=function(e,t){var n=e.static,r=e.dynamic,i=function(){if(Hr in n){var e=n[Hr];eo(e)?e=a.getElements(a.create(e,!0)):e&&(e=a.getElements(e),O.command(e,"invalid elements",t.commandStr));var i=io(function(t,n){if(e){var r=t.link(e);return t.ELEMENTS=r,r}return t.ELEMENTS=null,null});return i.value=e,i}if(Hr in r){var o=r[Hr];return oo(o,function(e,t){var n=e.shared,r=n.isBufferArgs,i=n.elements,a=e.invoke(t,o),s=t.def("null"),l=t.def(r,"(",a,")"),u=e.cond(l).then(s,"=",i,".createStream(",a,");").else(s,"=",i,".getElements(",a,");");return O.optional(function(){e.assert(u.else,"!"+a+"||"+s,"invalid elements")}),t.entry(u),t.exit(e.cond(l).then(i,".destroyStream(",s,");")),e.ELEMENTS=s,s})}return null}();function o(e,o){if(e in n){var a=0|n[e];return O.command(!o||a>=0,"invalid "+e,t.commandStr),io(function(e,t){return o&&(e.OFFSET=a),a})}if(e in r){var s=r[e];return oo(s,function(t,n){var r=t.invoke(n,s);return o&&(t.OFFSET=r,O.optional(function(){t.assert(n,r+">=0","invalid "+e)})),r})}return o&&i?io(function(e,t){return e.OFFSET="0",0}):null}var s=o(Wr,!0);return{elements:i,primitive:function(){if(Kr in n){var e=n[Kr];return O.commandParameter(e,xe,"invalid primitve",t.commandStr),io(function(t,n){return xe[e]})}if(Kr in r){var o=r[Kr];return oo(o,function(e,t){var n=e.constants.primTypes,r=e.invoke(t,o);return O.optional(function(){e.assert(t,r+" in "+n,"invalid primitive, must be one of "+Object.keys(xe))}),t.def(n,"[",r,"]")})}return i?ro(i)?io(i.value?function(e,t){return t.def(e.ELEMENTS,".primType")}:function(){return Oi}):new no(i.thisDep,i.contextDep,i.propDep,function(e,t){var n=e.ELEMENTS;return t.def(n,"?",n,".primType:",Oi)}):null}(),count:function(){if(Gr in n){var e=0|n[Gr];return O.command("number"==typeof e&&e>=0,"invalid vertex count",t.commandStr),io(function(){return e})}if(Gr in r){var o=r[Gr];return oo(o,function(e,t){var n=e.invoke(t,o);return O.optional(function(){e.assert(t,"typeof "+n+'==="number"&&'+n+">=0&&"+n+"===("+n+"|0)","invalid vertex count")}),n})}if(i){if(ro(i)){if(i)return s?new no(s.thisDep,s.contextDep,s.propDep,function(e,t){var n=t.def(e.ELEMENTS,".vertCount-",e.OFFSET);return O.optional(function(){e.assert(t,n+">=0","invalid vertex offset/element buffer too small")}),n}):io(function(e,t){return t.def(e.ELEMENTS,".vertCount")});var a=io(function(){return-1});return O.optional(function(){a.MISSING=!0}),a}var l=new no(i.thisDep||s.thisDep,i.contextDep||s.contextDep,i.propDep||s.propDep,function(e,t){var n=e.ELEMENTS;return e.OFFSET?t.def(n,"?",n,".vertCount-",e.OFFSET,":-1"):t.def(n,"?",n,".vertCount:-1")});return O.optional(function(){l.DYNAMIC=!0}),l}return null}(),instances:o($r,!1),offset:s}}(e,h),k=function(e,t){var n=e.static,r=e.dynamic,o={};return x.forEach(function(e){var a=E(e);function s(t,i){if(e in n){var s=t(n[e]);o[a]=io(function(){return s})}else if(e in r){var l=r[e];o[a]=oo(l,function(e,t){return i(e,t,e.invoke(t,l))})}}switch(e){case kr:case dr:case fr:case jr:case gr:case Ir:case Pr:case Sr:case Tr:case _r:return s(function(n){return O.commandType(n,"boolean",e,t.commandStr),n},function(t,n,r){return O.optional(function(){t.assert(n,"typeof "+r+'==="boolean"',"invalid flag "+e,t.commandStr)}),r});case yr:return s(function(n){return O.commandParameter(n,Qi,"invalid "+e,t.commandStr),Qi[n]},function(t,n,r){var i=t.constants.compareFuncs;return O.optional(function(){t.assert(n,r+" in "+i,"invalid "+e+", must be one of "+Object.keys(Qi))}),n.def(i,"[",r,"]")});case wr:return s(function(e){return O.command(Fe(e)&&2===e.length&&"number"==typeof e[0]&&"number"==typeof e[1]&&e[0]<=e[1],"depth range is 2d array",t.commandStr),e},function(e,t,n){return O.optional(function(){e.assert(t,e.shared.isArrayLike+"("+n+")&&"+n+".length===2&&typeof "+n+'[0]==="number"&&typeof '+n+'[1]==="number"&&'+n+"[0]<="+n+"[1]","depth range must be a 2d array")}),[t.def("+",n,"[0]"),t.def("+",n,"[1]")]});case br:return s(function(e){O.commandType(e,"object","blend.func",t.commandStr);var n="srcRGB"in e?e.srcRGB:e.src,r="srcAlpha"in e?e.srcAlpha:e.src,i="dstRGB"in e?e.dstRGB:e.dst,o="dstAlpha"in e?e.dstAlpha:e.dst;return O.commandParameter(n,$i,a+".srcRGB",t.commandStr),O.commandParameter(r,$i,a+".srcAlpha",t.commandStr),O.commandParameter(i,$i,a+".dstRGB",t.commandStr),O.commandParameter(o,$i,a+".dstAlpha",t.commandStr),O.command(-1===Yi.indexOf(n+", "+i),"unallowed blending combination (srcRGB, dstRGB) = ("+n+", "+i+")",t.commandStr),[$i[n],$i[i],$i[r],$i[o]]},function(t,n,r){var i=t.constants.blendFuncs;function o(o,a){var s=n.def('"',o,a,'" in ',r,"?",r,".",o,a,":",r,".",o);return O.optional(function(){t.assert(n,s+" in "+i,"invalid "+e+"."+o+a+", must be one of "+Object.keys($i))}),s}O.optional(function(){t.assert(n,r+"&&typeof "+r+'==="object"',"invalid blend func, must be an object")});var a=o("src","RGB"),s=o("dst","RGB");O.optional(function(){t.assert(n,t.constants.invalidBlendCombinations+".indexOf("+a+'+", "+'+s+") === -1 ","unallowed blending combination for (srcRGB, dstRGB)")});var l=n.def(i,"[",a,"]"),u=n.def(i,"[",o("src","Alpha"),"]");return[l,n.def(i,"[",s,"]"),u,n.def(i,"[",o("dst","Alpha"),"]")]});case vr:return s(function(n){return"string"==typeof n?(O.commandParameter(n,b,"invalid "+e,t.commandStr),[b[n],b[n]]):"object"==typeof n?(O.commandParameter(n.rgb,b,e+".rgb",t.commandStr),O.commandParameter(n.alpha,b,e+".alpha",t.commandStr),[b[n.rgb],b[n.alpha]]):void O.commandRaise("invalid blend.equation",t.commandStr)},function(t,n,r){var i=t.constants.blendEquations,o=n.def(),a=n.def(),s=t.cond("typeof ",r,'==="string"');return O.optional(function(){function n(e,n,r){t.assert(e,r+" in "+i,"invalid "+n+", must be one of "+Object.keys(b))}n(s.then,e,r),t.assert(s.else,r+"&&typeof "+r+'==="object"',"invalid "+e),n(s.else,e+".rgb",r+".rgb"),n(s.else,e+".alpha",r+".alpha")}),s.then(o,"=",a,"=",i,"[",r,"];"),s.else(o,"=",i,"[",r,".rgb];",a,"=",i,"[",r,".alpha];"),n(s),[o,a]});case mr:return s(function(e){return O.command(Fe(e)&&4===e.length,"blend.color must be a 4d array",t.commandStr),W(4,function(t){return+e[t]})},function(e,t,n){return O.optional(function(){e.assert(t,e.shared.isArrayLike+"("+n+")&&"+n+".length===4","blend.color must be a 4d array")}),W(4,function(e){return t.def("+",n,"[",e,"]")})});case Or:return s(function(e){return O.commandType(e,"number",a,t.commandStr),0|e},function(e,t,n){return O.optional(function(){e.assert(t,"typeof "+n+'==="number"',"invalid stencil.mask")}),t.def(n,"|0")});case Dr:return s(function(n){O.commandType(n,"object",a,t.commandStr);var r=n.cmp||"keep",i=n.ref||0,o="mask"in n?n.mask:-1;return O.commandParameter(r,Qi,e+".cmp",t.commandStr),O.commandType(i,"number",e+".ref",t.commandStr),O.commandType(o,"number",e+".mask",t.commandStr),[Qi[r],i,o]},function(e,t,n){var r=e.constants.compareFuncs;return O.optional(function(){function i(){e.assert(t,Array.prototype.join.call(arguments,""),"invalid stencil.func")}i(n+"&&typeof ",n,'==="object"'),i('!("cmp" in ',n,")||(",n,".cmp in ",r,")")}),[t.def('"cmp" in ',n,"?",r,"[",n,".cmp]",":",Ui),t.def(n,".ref|0"),t.def('"mask" in ',n,"?",n,".mask|0:-1")]});case Lr:case Rr:return s(function(n){O.commandType(n,"object",a,t.commandStr);var r=n.fail||"keep",i=n.zfail||"keep",o=n.zpass||"keep";return O.commandParameter(r,Xi,e+".fail",t.commandStr),O.commandParameter(i,Xi,e+".zfail",t.commandStr),O.commandParameter(o,Xi,e+".zpass",t.commandStr),[e===Rr?Li:Di,Xi[r],Xi[i],Xi[o]]},function(t,n,r){var i=t.constants.stencilOps;function o(o){return O.optional(function(){t.assert(n,'!("'+o+'" in '+r+")||("+r+"."+o+" in "+i+")","invalid "+e+"."+o+", must be one of "+Object.keys(Xi))}),n.def('"',o,'" in ',r,"?",i,"[",r,".",o,"]:",Ui)}return O.optional(function(){t.assert(n,r+"&&typeof "+r+'==="object"',"invalid "+e)}),[e===Rr?Li:Di,o("fail"),o("zfail"),o("zpass")]});case Mr:return s(function(e){O.commandType(e,"object",a,t.commandStr);var n=0|e.factor,r=0|e.units;return O.commandType(n,"number",a+".factor",t.commandStr),O.commandType(r,"number",a+".units",t.commandStr),[n,r]},function(t,n,r){return O.optional(function(){t.assert(n,r+"&&typeof "+r+'==="object"',"invalid "+e)}),[n.def(r,".factor|0"),n.def(r,".units|0")]});case Cr:return s(function(e){var n=0;return"front"===e?n=Di:"back"===e&&(n=Li),O.command(!!n,a,t.commandStr),n},function(e,t,n){return O.optional(function(){e.assert(t,n+'==="front"||'+n+'==="back"',"invalid cull.face")}),t.def(n,'==="front"?',Di,":",Li)});case Ar:return s(function(e){return O.command("number"==typeof e&&e>=i.lineWidthDims[0]&&e<=i.lineWidthDims[1],"invalid line width, must be a positive number between "+i.lineWidthDims[0]+" and "+i.lineWidthDims[1],t.commandStr),e},function(e,t,n){return O.optional(function(){e.assert(t,"typeof "+n+'==="number"&&'+n+">="+i.lineWidthDims[0]+"&&"+n+"<="+i.lineWidthDims[1],"invalid line width")}),n});case Er:return s(function(e){return O.commandParameter(e,Zi,a,t.commandStr),Zi[e]},function(e,t,n){return O.optional(function(){e.assert(t,n+'==="cw"||'+n+'==="ccw"',"invalid frontFace, must be one of cw,ccw")}),t.def(n+'==="cw"?'+Ri+":"+Ii)});case xr:return s(function(e){return O.command(Fe(e)&&4===e.length,"color.mask must be length 4 array",t.commandStr),e.map(function(e){return!!e})},function(e,t,n){return O.optional(function(){e.assert(t,e.shared.isArrayLike+"("+n+")&&"+n+".length===4","invalid color.mask")}),W(4,function(e){return"!!"+n+"["+e+"]"})});case Vr:return s(function(e){O.command("object"==typeof e&&e,a,t.commandStr);var n="value"in e?e.value:1,r=!!e.invert;return O.command("number"==typeof n&&n>=0&&n<=1,"sample.coverage.value must be a number between 0 and 1",t.commandStr),[n,r]},function(e,t,n){return O.optional(function(){e.assert(t,n+"&&typeof "+n+'==="object"',"invalid sample.coverage")}),[t.def('"value" in ',n,"?+",n,".value:1"),t.def("!!",n,".invert")]})}}),o}(e,h),C=function(e,t,r){var i=e.static,o=e.dynamic;function a(e){if(e in i){var t=n.id(i[e]);O.optional(function(){p.shader(Ji[e],t,O.guessCommand())});var r=io(function(){return t});return r.id=t,r}if(e in o){var a=o[e];return oo(a,function(t,n){var r=t.invoke(n,a),i=n.def(t.shared.strings,".id(",r,")");return O.optional(function(){n(t.shared.shader,".shader(",Ji[e],",",i,",",t.command,");")}),i})}return null}var s,l=a(qr),u=a(Nr),c=null;return ro(l)&&ro(u)?(c=p.program(u.id,l.id,null,r),s=io(function(e,t){return e.link(c)})):s=new no(l&&l.thisDep||u&&u.thisDep,l&&l.contextDep||u&&u.contextDep,l&&l.propDep||u&&u.propDep,function(e,t){var n,r=e.shared.shader;n=l?l.append(e,t):t.def(r,".",qr);var i=r+".program("+(u?u.append(e,t):t.def(r,".",Nr))+","+n;return O.optional(function(){i+=","+e.command}),t.def(i+")")}),{frag:l,vert:u,progVar:s,program:c}}(e,0,m);function A(e){var t=w[e];t&&(k[e]=t)}A(Fr),A(E(Br));var P=Object.keys(k).length>0,M={framebuffer:y,draw:_,shader:C,state:k,dirty:P,scopeVAO:null,drawVAO:null,useVAO:!1,attributes:{}};if(M.profile=function(e){var t,n=e.static,r=e.dynamic;if(zr in n){var i=!!n[zr];(t=io(function(e,t){return i})).enable=i}else if(zr in r){var o=r[zr];t=oo(o,function(e,t){return e.invoke(t,o)})}return t}(e),M.uniforms=function(e,t){var n=e.static,r=e.dynamic,i={};return Object.keys(n).forEach(function(e){var r,o=n[e];if("number"==typeof o||"boolean"==typeof o)r=io(function(){return o});else if("function"==typeof o){var a=o._reglType;"texture2d"===a||"textureCube"===a?r=io(function(e){return e.link(o)}):"framebuffer"===a||"framebufferCube"===a?(O.command(o.color.length>0,'missing color attachment for framebuffer sent to uniform "'+e+'"',t.commandStr),r=io(function(e){return e.link(o.color[0])})):O.commandRaise('invalid data for uniform "'+e+'"',t.commandStr)}else Fe(o)?r=io(function(t){return t.global.def("[",W(o.length,function(n){return O.command("number"==typeof o[n]||"boolean"==typeof o[n],"invalid uniform "+e,t.commandStr),o[n]}),"]")}):O.commandRaise('invalid or missing data for uniform "'+e+'"',t.commandStr);r.value=o,i[e]=r}),Object.keys(r).forEach(function(e){var t=r[e];i[e]=oo(t,function(e,n){return e.invoke(n,t)})}),i}(s,h),M.drawVAO=M.scopeVAO=function(e,t){var n=e.static,r=e.dynamic;if(Yr in n){var i=n[Yr];return null!==i&&null===c.getVAO(i)&&(i=c.createVAO(i)),io(function(e){return e.link(c.getVAO(i))})}if(Yr in r){var o=r[Yr];return oo(o,function(e,t){var n=e.invoke(t,o);return t.def(e.shared.vao+".getVAO("+n+")")})}return null}(e),!M.drawVAO&&C.program&&!m&&r.angle_instanced_arrays){var S=!0,T=C.program.attributes.map(function(e){var n=t.static[e];return S=S&&!!n,n});if(S&&T.length>0){var V=c.getVAO(c.createVAO(T));M.drawVAO=new no(null,null,null,function(e,t){return e.link(V)}),M.useVAO=!0}}return m?M.useVAO=!0:M.attributes=function(e,t){var r=e.static,i=e.dynamic,a={};return Object.keys(r).forEach(function(e){var i=r[e],s=n.id(e),l=new v;if(eo(i))l.state=ir,l.buffer=o.getBuffer(o.create(i,ri,!1,!0)),l.type=0;else{var u=o.getBuffer(i);if(u)l.state=ir,l.buffer=u,l.type=0;else if(O.command("object"==typeof i&&i,"invalid data for attribute "+e,t.commandStr),"constant"in i){var c=i.constant;l.buffer="null",l.state=or,"number"==typeof c?l.x=c:(O.command(Fe(c)&&c.length>0&&c.length<=4,"invalid constant for attribute "+e,t.commandStr),nr.forEach(function(e,t){t=0,'invalid offset for attribute "'+e+'"',t.commandStr);var h=0|i.stride;O.command(h>=0&&h<256,'invalid stride for attribute "'+e+'", must be integer betweeen [0, 255]',t.commandStr);var f=0|i.size;O.command(!("size"in i)||f>0&&f<=4,'invalid size for attribute "'+e+'", must be 1,2,3,4',t.commandStr);var d=!!i.normalized,m=0;"type"in i&&(O.commandParameter(i.type,ce,"invalid type for attribute "+e,t.commandStr),m=ce[i.type]);var b=0|i.divisor;"divisor"in i&&(O.command(0===b||g,'cannot specify divisor for attribute "'+e+'", instancing not supported',t.commandStr),O.command(b>=0,'invalid divisor for attribute "'+e+'"',t.commandStr)),O.optional(function(){var n=t.commandStr,r=["buffer","offset","divisor","normalized","type","size","stride"];Object.keys(i).forEach(function(t){O.command(r.indexOf(t)>=0,'unknown parameter "'+t+'" for attribute pointer "'+e+'" (valid parameters are '+r+")",n)})}),l.buffer=u,l.state=ir,l.size=f,l.normalized=d,l.type=m||u.dtype,l.offset=p,l.stride=h,l.divisor=b}}a[e]=io(function(e,t){var n=e.attribCache;if(s in n)return n[s];var r={isStream:!1};return Object.keys(l).forEach(function(e){r[e]=l[e]}),l.buffer&&(r.buffer=e.link(l.buffer),r.type=r.type||r.buffer+".dtype"),n[s]=r,r})}),Object.keys(i).forEach(function(e){var t=i[e];a[e]=oo(t,function(n,r){var i=n.invoke(r,t),o=n.shared,a=n.constants,s=o.isBufferArgs,l=o.buffer;O.optional(function(){n.assert(r,i+"&&(typeof "+i+'==="object"||typeof '+i+'==="function")&&('+s+"("+i+")||"+l+".getBuffer("+i+")||"+l+".getBuffer("+i+".buffer)||"+s+"("+i+'.buffer)||("constant" in '+i+"&&(typeof "+i+'.constant==="number"||'+o.isArrayLike+"("+i+".constant))))",'invalid dynamic attribute "'+e+'"')});var u={isStream:r.def(!1)},c=new v;c.state=ir,Object.keys(c).forEach(function(e){u[e]=r.def(""+c[e])});var p=u.buffer,h=u.type;function f(e){r(u[e],"=",i,".",e,"|0;")}return r("if(",s,"(",i,")){",u.isStream,"=true;",p,"=",l,".createStream(",ri,",",i,");",h,"=",p,".dtype;","}else{",p,"=",l,".getBuffer(",i,");","if(",p,"){",h,"=",p,".dtype;",'}else if("constant" in ',i,"){",u.state,"=",or,";","if(typeof "+i+'.constant === "number"){',u[nr[0]],"=",i,".constant;",nr.slice(1).map(function(e){return u[e]}).join("="),"=0;","}else{",nr.map(function(e,t){return u[e]+"="+i+".constant.length>"+t+"?"+i+".constant["+t+"]:0;"}).join(""),"}}else{","if(",s,"(",i,".buffer)){",p,"=",l,".createStream(",ri,",",i,".buffer);","}else{",p,"=",l,".getBuffer(",i,".buffer);","}",h,'="type" in ',i,"?",a.glTypes,"[",i,".type]:",p,".dtype;",u.normalized,"=!!",i,".normalized;"),f("size"),f("offset"),f("stride"),f("divisor"),r("}}"),r.exit("if(",u.isStream,"){",l,".destroyStream(",p,");","}"),u})}),a}(t,h),M.context=function(e){var t=e.static,n=e.dynamic,r={};return Object.keys(t).forEach(function(e){var n=t[e];r[e]=io(function(e,t){return"number"==typeof n||"boolean"==typeof n?""+n:e.link(n)})}),Object.keys(n).forEach(function(e){var t=n[e];r[e]=oo(t,function(e,n){return e.invoke(n,t)})}),r}(u),M}function D(e,t,n){var r=e.shared.context,i=e.scope();Object.keys(n).forEach(function(o){t.save(r,"."+o);var a=n[o].append(e,t);Array.isArray(a)?i(r,".",o,"=[",a.join(),"];"):i(r,".",o,"=",a,";")}),t(i)}function L(e,t,n,r){var i,o=e.shared,a=o.gl,s=o.framebuffer;y&&(i=t.def(o.extensions,".webgl_draw_buffers"));var l,u=e.constants,c=u.drawBuffer,p=u.backBuffer;l=n?n.append(e,t):t.def(s,".next"),r||t("if(",l,"!==",s,".cur){"),t("if(",l,"){",a,".bindFramebuffer(",Gi,",",l,".framebuffer);"),y&&t(i,".drawBuffersWEBGL(",c,"[",l,".colorAttachments.length]);"),t("}else{",a,".bindFramebuffer(",Gi,",null);"),y&&t(i,".drawBuffersWEBGL(",p,");"),t("}",s,".cur=",l,";"),r||t("}")}function R(e,t,n){var r=e.shared,i=r.gl,o=e.current,a=e.next,s=r.current,l=r.next,u=e.cond(s,".dirty");x.forEach(function(t){var r,c,p=E(t);if(!(p in n.state))if(p in a){r=a[p],c=o[p];var h=W(w[p].length,function(e){return u.def(r,"[",e,"]")});u(e.cond(h.map(function(e,t){return e+"!=="+c+"["+t+"]"}).join("||")).then(i,".",C[p],"(",h,");",h.map(function(e,t){return c+"["+t+"]="+e}).join(";"),";"))}else{r=u.def(l,".",p);var f=e.cond(r,"!==",s,".",p);u(f),p in k?f(e.cond(r).then(i,".enable(",k[p],");").else(i,".disable(",k[p],");"),s,".",p,"=",r,";"):f(i,".",C[p],"(",r,");",s,".",p,"=",r,";")}}),0===Object.keys(n.state).length&&u(s,".dirty=false;"),t(u)}function I(e,t,n,r){var i=e.shared,o=e.current,a=i.current,s=i.gl;to(Object.keys(n)).forEach(function(i){var l=n[i];if(!r||r(l)){var u=l.append(e,t);if(k[i]){var c=k[i];ro(l)?t(s,u?".enable(":".disable(",c,");"):t(e.cond(u).then(s,".enable(",c,");").else(s,".disable(",c,");")),t(a,".",i,"=",u,";")}else if(Fe(u)){var p=o[i];t(s,".",C[i],"(",u,");",u.map(function(e,t){return p+"["+t+"]="+e}).join(";"),";")}else t(s,".",C[i],"(",u,");",a,".",i,"=",u,";")}})}function B(e,t){g&&(e.instancing=t.def(e.shared.extensions,".angle_instanced_arrays"))}function F(e,t,n,r,i){var o,a,s,l=e.shared,u=e.stats,c=l.current,p=l.timer,h=n.profile;function f(){return"undefined"==typeof performance?"Date.now()":"performance.now()"}function m(e){e(o=t.def(),"=",f(),";"),"string"==typeof i?e(u,".count+=",i,";"):e(u,".count++;"),d&&(r?e(a=t.def(),"=",p,".getNumPendingQueries();"):e(p,".beginQuery(",u,");"))}function v(e){e(u,".cpuTime+=",f(),"-",o,";"),d&&(r?e(p,".pushScopeStats(",a,",",p,".getNumPendingQueries(),",u,");"):e(p,".endQuery();"))}function b(e){var n=t.def(c,".profile");t(c,".profile=",e,";"),t.exit(c,".profile=",n,";")}if(h){if(ro(h))return void(h.enable?(m(t),v(t.exit),b("true")):b("false"));b(s=h.append(e,t))}else s=t.def(c,".profile");var g=e.block();m(g),t("if(",s,"){",g,"}");var y=e.block();v(y),t.exit("if(",s,"){",y,"}")}function z(e,t,n,r,i){var o=e.shared;r.forEach(function(r){var a,s=r.name,l=n.attributes[s];if(l){if(!i(l))return;a=l.append(e,t)}else{if(!i(ao))return;var u=e.scopeAttrib(s);O.optional(function(){e.assert(t,u+".state","missing attribute "+s)}),a={},Object.keys(new v).forEach(function(e){a[e]=t.def(u,".",e)})}!function(n,r,i){var a=o.gl,s=t.def(n,".location"),l=t.def(o.attributes,"[",s,"]"),u=i.state,c=i.buffer,p=[i.x,i.y,i.z,i.w],h=["buffer","normalized","offset","stride"];function f(){t("if(!",l,".buffer){",a,".enableVertexAttribArray(",s,");}");var n,o=i.type;if(n=i.size?t.def(i.size,"||",r):r,t("if(",l,".type!==",o,"||",l,".size!==",n,"||",h.map(function(e){return l+"."+e+"!=="+i[e]}).join("||"),"){",a,".bindBuffer(",ri,",",c,".buffer);",a,".vertexAttribPointer(",[s,n,o,i.normalized,i.stride,i.offset],");",l,".type=",o,";",l,".size=",n,";",h.map(function(e){return l+"."+e+"="+i[e]+";"}).join(""),"}"),g){var u=i.divisor;t("if(",l,".divisor!==",u,"){",e.instancing,".vertexAttribDivisorANGLE(",[s,u],");",l,".divisor=",u,";}")}}function d(){t("if(",l,".buffer){",a,".disableVertexAttribArray(",s,");",l,".buffer=null;","}if(",nr.map(function(e,t){return l+"."+e+"!=="+p[t]}).join("||"),"){",a,".vertexAttrib4f(",s,",",p,");",nr.map(function(e,t){return l+"."+e+"="+p[t]+";"}).join(""),"}")}u===ir?f():u===or?d():(t("if(",u,"===",ir,"){"),f(),t("}else{"),d(),t("}"))}(e.link(r),function(e){switch(e){case bi:case _i:case Ei:return 2;case gi:case xi:case Ai:return 3;case yi:case ki:case Pi:return 4;default:return 1}}(r.info.type),a)})}function N(e,t,r,i,o){for(var a,s=e.shared,l=s.gl,u=0;u1?t(W(w,function(e){return Array.isArray(c)?c[e]:c+"["+e+"]"})):(O(!Array.isArray(c),"uniform value must not be an array"),t(c));t(");")}}function q(e,t,n,r){var i=e.shared,o=i.gl,a=i.draw,s=r.draw;var l=function(){var i,l=s.elements,u=t;return l?((l.contextDep&&r.contextDynamic||l.propDep)&&(u=n),i=l.append(e,u)):i=u.def(a,".",Hr),i&&u("if("+i+")"+o+".bindBuffer("+ii+","+i+".buffer.buffer);"),i}();function u(i){var o=s[i];return o?o.append(e,o.contextDep&&r.contextDynamic||o.propDep?n:t):t.def(a,".",i)}var c,p,h=u(Kr),f=u(Wr),d=function(){var i,o=s.count,l=t;return o?((o.contextDep&&r.contextDynamic||o.propDep)&&(l=n),i=o.append(e,l),O.optional(function(){o.MISSING&&e.assert(t,"false","missing vertex count"),o.DYNAMIC&&e.assert(l,i+">=0","missing vertex count")})):(i=l.def(a,".",Gr),O.optional(function(){e.assert(l,i+">=0","missing vertex count")})),i}();if("number"==typeof d){if(0===d)return}else n("if(",d,"){"),n.exit("}");g&&(c=u($r),p=e.instancing);var m=l+".type",v=s.elements&&ro(s.elements);function b(){function e(){n(p,".drawElementsInstancedANGLE(",[h,d,m,f+"<<(("+m+"-"+rr+")>>1)",c],");")}function t(){n(p,".drawArraysInstancedANGLE(",[h,f,d,c],");")}l?v?e():(n("if(",l,"){"),e(),n("}else{"),t(),n("}")):t()}function y(){function e(){n(o+".drawElements("+[h,d,m,f+"<<(("+m+"-"+rr+")>>1)"]+");")}function t(){n(o+".drawArrays("+[h,f,d]+");")}l?v?e():(n("if(",l,"){"),e(),n("}else{"),t(),n("}")):t()}g&&("number"!=typeof c||c>=0)?"string"==typeof c?(n("if(",c,">0){"),b(),n("}else if(",c,"<0){"),y(),n("}")):b():y()}function H(e,t,n,r,i){var o=V(),a=o.proc("body",i);return O.optional(function(){o.commandStr=t.commandStr,o.command=o.link(t.commandStr)}),g&&(o.instancing=a.def(o.shared.extensions,".angle_instanced_arrays")),e(o,a,n,r),o.compile().body}function K(e,t,n,r){B(e,t),n.useVAO?n.drawVAO?t(e.shared.vao,".setVAO(",n.drawVAO.append(e,t),");"):t(e.shared.vao,".setVAO(",e.shared.vao,".targetVAO);"):(t(e.shared.vao,".setVAO(null);"),z(e,t,n,r.attributes,function(){return!0})),N(e,t,n,r.uniforms,function(){return!0}),q(e,t,t,n)}function G(e,t,n,r){function i(){return!0}e.batchId="a1",B(e,t),z(e,t,n,r.attributes,i),N(e,t,n,r.uniforms,i),q(e,t,t,n)}function $(e,t,n,r){B(e,t);var i=n.contextDep,o=t.def(),a=t.def();e.shared.props=a,e.batchId=o;var s=e.scope(),l=e.scope();function u(e){return e.contextDep&&i||e.propDep}function c(e){return!u(e)}if(t(s.entry,"for(",o,"=0;",o,"<","a1",";++",o,"){",a,"=","a0","[",o,"];",l,"}",s.exit),n.needsContext&&D(e,l,n.context),n.needsFramebuffer&&L(e,l,n.framebuffer),I(e,l,n.state,u),n.profile&&u(n.profile)&&F(e,l,n,!1,!0),r)n.useVAO?n.drawVAO?u(n.drawVAO)?l(e.shared.vao,".setVAO(",n.drawVAO.append(e,l),");"):s(e.shared.vao,".setVAO(",n.drawVAO.append(e,s),");"):s(e.shared.vao,".setVAO(",e.shared.vao,".targetVAO);"):(s(e.shared.vao,".setVAO(null);"),z(e,s,n,r.attributes,c),z(e,l,n,r.attributes,u)),N(e,s,n,r.uniforms,c),N(e,l,n,r.uniforms,u),q(e,s,l,n);else{var p=e.global.def("{}"),h=n.shader.progVar.append(e,l),f=l.def(h,".id"),d=l.def(p,"[",f,"]");l(e.shared.gl,".useProgram(",h,".program);","if(!",d,"){",d,"=",p,"[",f,"]=",e.link(function(t){return H(G,e,n,t,2)}),"(",h,");}",d,".call(this,a0[",o,"],",o,");")}}function Y(e,t,n){var r=t.static[n];if(r&&function(e){if("object"==typeof e&&!Fe(e)){for(var t=Object.keys(e),n=0;n0&&n(e.shared.current,".dirty=true;")}(s,l),function(e,t){var r=e.proc("scope",3);e.batchId="a2";var i=e.shared,o=i.current;function a(n){var o=t.shader[n];o&&r.set(i.shader,"."+n,o.append(e,r))}D(e,r,t.context),t.framebuffer&&t.framebuffer.append(e,r),to(Object.keys(t.state)).forEach(function(n){var o=t.state[n].append(e,r);Fe(o)?o.forEach(function(t,i){r.set(e.next[n],"["+i+"]",t)}):r.set(i.next,"."+n,o)}),F(e,r,t,!0,!0),[Hr,Wr,Gr,$r,Kr].forEach(function(n){var o=t.draw[n];o&&r.set(i.draw,"."+n,""+o.append(e,r))}),Object.keys(t.uniforms).forEach(function(o){var a=t.uniforms[o].append(e,r);Array.isArray(a)&&(a="["+a.join()+"]"),r.set(i.uniforms,"["+n.id(o)+"]",a)}),Object.keys(t.attributes).forEach(function(n){var i=t.attributes[n].append(e,r),o=e.scopeAttrib(n);Object.keys(new v).forEach(function(e){r.set(o,"."+e,i[e])})}),t.scopeVAO&&r.set(i.vao,".targetVAO",t.scopeVAO.append(e,r)),a(Nr),a(qr),Object.keys(t.state).length>0&&(r(o,".dirty=true;"),r.exit(o,".dirty=true;")),r("a1(",e.shared.context,",a0,",e.batchId,");")}(s,l),function(e,t){var n=e.proc("batch",2);e.batchId="0",B(e,n);var r=!1,i=!0;Object.keys(t.context).forEach(function(e){r=r||t.context[e].propDep}),r||(D(e,n,t.context),i=!1);var o=t.framebuffer,a=!1;function s(e){return e.contextDep&&r||e.propDep}o?(o.propDep?r=a=!0:o.contextDep&&r&&(a=!0),a||L(e,n,o)):L(e,n,null),t.state.viewport&&t.state.viewport.propDep&&(r=!0),R(e,n,t),I(e,n,t.state,function(e){return!s(e)}),t.profile&&s(t.profile)||F(e,n,t,!1,"a1"),t.contextDep=r,t.needsContext=i,t.needsFramebuffer=a;var l=t.shader.progVar;if(l.contextDep&&r||l.propDep)$(e,n,t,null);else{var u=l.append(e,n);if(n(e.shared.gl,".useProgram(",u,".program);"),t.shader.program)$(e,n,t,t.shader.program);else{n(e.shared.vao,".setVAO(null);");var c=e.global.def("{}"),p=n.def(u,".id"),h=n.def(c,"[",p,"]");n(e.cond(h).then(h,".call(this,a0,a1);").else(h,"=",c,"[",p,"]=",e.link(function(n){return H($,e,t,n,2)}),"(",u,");",h,".call(this,a0,a1);"))}}Object.keys(t.state).length>0&&n(e.shared.current,".dirty=true;")}(s,l),t(s.compile(),{destroy:function(){l.shader.program.destroy()}})}}}var lo=34918,uo=34919,co=35007,po=function(e,t){if(!t.ext_disjoint_timer_query)return null;var n=[];function r(e){n.push(e)}var i=[];function o(){this.startQueryIndex=-1,this.endQueryIndex=-1,this.sum=0,this.stats=null}var a=[];function s(e){a.push(e)}var l=[];function u(e,t,n){var r=a.pop()||new o;r.startQueryIndex=e,r.endQueryIndex=t,r.sum=0,r.stats=n,l.push(r)}var c=[],p=[];return{beginQuery:function(e){var r=n.pop()||t.ext_disjoint_timer_query.createQueryEXT();t.ext_disjoint_timer_query.beginQueryEXT(co,r),i.push(r),u(i.length-1,i.length,e)},endQuery:function(){t.ext_disjoint_timer_query.endQueryEXT(co)},pushScopeStats:u,update:function(){var e,n,o=i.length;if(0!==o){p.length=Math.max(p.length,o+1),c.length=Math.max(c.length,o+1),c[0]=0,p[0]=0;var a=0;for(e=0,n=0;n0)if(Array.isArray(n[0])){s=fe(n);for(var c=1,p=1;p0)if("number"==typeof t[0]){var o=re.allocType(h.dtype,t.length);we(o,t),d(o,i),re.freeType(o)}else if(Array.isArray(t[0])||e(t[0])){r=fe(t);var a=he(t,r,h.dtype);d(a,i),re.freeType(a)}else O.raise("invalid buffer data")}else if(oe(t)){var s=t.stride,l=0,u=0,c=0,p=0;1===(r=t.shape).length?(l=r[0],u=1,c=s[0],p=0):2===r.length?(l=r[0],u=r[1],c=s[0],p=s[1]):O.raise("invalid shape");var m=Array.isArray(t.data)?h.dtype:ye(t.data),v=re.allocType(m,l*u);_e(v,t.data,l,u,c,p,t.offset),d(v,i),re.freeType(v)}else O.raise("invalid data for buffer subdata");return f},r.profile&&(f.stats=h.stats),f.destroy=function(){p(h)},f},createStream:function(e,t){var n=l.pop();return n||(n=new s(e)),n.bind(),c(n,t,me,0,1,!1),n},destroyStream:function(e){l.push(e)},clear:function(){ae(a).forEach(p),l.forEach(p)},getBuffer:function(e){return e&&e._buffer instanceof s?e._buffer:null},restore:function(){ae(a).forEach(function(e){e.buffer=t.createBuffer(),t.bindBuffer(e.type,e.buffer),t.bufferData(e.type,e.persistentData||e.byteLength,e.usage)})},_initBuffer:c}}(i,p,r,function(e){return w.destroyBuffer(e)}),w=function(t,n,r,i,o){for(var a=r.maxAttributes,s=new Array(a),l=0;l0,"must specify at least one attribute");var i={},l=r.attributes;l.length=t.length;for(var u=0;u=f.byteLength?c.subdata(f):(c.destroy(),r.buffers[u]=null)),r.buffers[u]||(c=r.buffers[u]=o.create(p,qn,!1,!0)),h.buffer=o.getBuffer(c),h.size=0|h.buffer.dimension,h.normalized=!1,h.type=h.buffer.dtype,h.offset=0,h.stride=0,h.divisor=0,h.state=1,i[u]=1):o.getBuffer(p)?(h.buffer=o.getBuffer(p),h.size=0|h.buffer.dimension,h.normalized=!1,h.type=h.buffer.dtype,h.offset=0,h.stride=0,h.divisor=0,h.state=1):o.getBuffer(p.buffer)?(h.buffer=o.getBuffer(p.buffer),h.size=0|(+p.size||h.buffer.dimension),h.normalized=!!p.normalized||!1,"type"in p?(O.parameter(p.type,ce,"invalid buffer type"),h.type=ce[p.type]):h.type=h.buffer.dtype,h.offset=0|(p.offset||0),h.stride=0|(p.stride||0),h.divisor=0|(p.divisor||0),h.state=1,O(h.size>=1&&h.size<=4,"size must be between 1 and 4"),O(h.offset>=0,"invalid offset"),O(h.stride>=0&&h.stride<=255,"stride must be between 0 and 255"),O(h.divisor>=0,"divisor must be positive"),O(!h.divisor||!!n.angle_instanced_arrays,"ANGLE_instanced_arrays must be enabled to use divisor")):"x"in p?(O(u>0,"first attribute must not be a constant"),h.x=+p.x||0,h.y=+p.y||0,h.z=+p.z||0,h.w=+p.w||0,h.state=2):O(!1,"invalid attribute spec for location "+u)}for(var d=0;d>=1:p===Ve&&(f>>=2)),i.vertCount=f;var d=s;if(s<0){d=Ee;var m=i.buffer.dimension;1===m&&(d=ke),2===m&&(d=Ce),3===m&&(d=Ee)}i.primType=d}function p(e){i.elementsCount--,O(null!==e.buffer,"must not double destroy elements"),delete o[e.id],e.buffer.destroy(),e.buffer=null}return{create:function(t,n){var o=r.create(null,je,!0),a=new l(o._buffer);function u(t){if(t)if("number"==typeof t)o(t),a.primType=Ee,a.vertCount=0|t,a.type=Pe;else{var n=null,r=De,i=-1,l=-1,p=0,h=0;Array.isArray(t)||e(t)||oe(t)?n=t:(O.type(t,"object","invalid arguments for elements"),"data"in t&&(n=t.data,O(Array.isArray(n)||e(n)||oe(n),"invalid data for element buffer")),"usage"in t&&(O.parameter(t.usage,pe,"invalid element buffer usage"),r=pe[t.usage]),"primitive"in t&&(O.parameter(t.primitive,xe,"invalid element buffer primitive"),i=xe[t.primitive]),"count"in t&&(O("number"==typeof t.count&&t.count>=0,"invalid vertex count for elements"),l=0|t.count),"type"in t&&(O.parameter(t.type,s,"invalid buffer type"),h=s[t.type]),"length"in t?p=0|t.length:(p=l,h===Se||h===Me?p*=2:h!==Ve&&h!==Te||(p*=4))),c(a,n,r,i,l,p,h)}else o(),a.primType=Ee,a.vertCount=0,a.type=Pe;return u}return i.elementsCount++,u(t),u._reglType="elements",u._elements=a,u.subdata=function(e,t){return o.subdata(e,t),u},u.destroy=function(){p(a)},u},createStream:function(e){var t=u.pop();return t||(t=new l(r.create(null,je,!0,!1)._buffer)),c(t,e,Oe,-1,-1,0,0),t},destroyStream:function(e){u.push(e)},getElements:function(e){return"function"==typeof e&&e._elements instanceof l?e._elements:null},clear:function(){ae(o).forEach(p)}}}(i,h,y,p),x=function(e,n,r,i){var o={},a={};function s(e,t,n,r){this.name=e,this.id=t,this.location=n,this.info=r}function l(e,t){for(var n=0;n1)for(var b=0;be&&(e=t.stats.uniformsCount)}),e},r.getMaxAttributesCount=function(){var e=0;return p.forEach(function(t){t.stats.attributesCount>e&&(e=t.stats.attributesCount)}),e}),{clear:function(){var t=e.deleteShader.bind(e);ae(o).forEach(t),o={},ae(a).forEach(t),a={},p.forEach(function(t){e.deleteProgram(t.program)}),p.length=0,c={},r.shaderCount=0},program:function(n,i,s,l){O.command(n>=0,"missing vertex shader",s),O.command(i>=0,"missing fragment shader",s);var u=c[i];u||(u=c[i]={});var h=u[n];if(h&&(h.refCount++,!l))return h;var m=new f(i,n);return r.shaderCount++,d(m,s,l),h||(u[n]=m),p.push(m),t(m,{destroy:function(){if(m.refCount--,m.refCount<=0){e.deleteProgram(m.program);var t=p.indexOf(m);p.splice(t,1),r.shaderCount--}u[m.vertId].refCount<=0&&(e.deleteShader(a[m.vertId]),delete a[m.vertId],delete c[m.fragId][m.vertId]),Object.keys(c[m.fragId]).length||(e.deleteShader(o[m.fragId]),delete o[m.fragId],delete c[m.fragId])}})},restore:function(){o={},a={};for(var e=0;e=Pn&&t=2,"invalid shape for framebuffer"),a=V[0],h=V[1]}else"radius"in T&&(a=h=T.radius),"width"in T&&(a=T.width),"height"in T&&(h=T.height);("color"in T||"colors"in T)&&(y=T.color||T.colors,Array.isArray(y)&&O(1===y.length||n.webgl_draw_buffers,"multiple render targets not supported")),y||("colorCount"in T&&O((E=0|T.colorCount)>0,"invalid color buffer count"),"colorTexture"in T&&(w=!!T.colorTexture,_="rgba4"),"colorType"in T&&(k=T.colorType,w?(O(n.oes_texture_float||!("float"===k||"float32"===k),"you must enable OES_texture_float in order to use floating point framebuffer objects"),O(n.oes_texture_half_float||!("half float"===k||"float16"===k),"you must enable OES_texture_half_float in order to use 16-bit floating point framebuffer objects")):"half float"===k||"float16"===k?(O(n.ext_color_buffer_half_float,"you must enable EXT_color_buffer_half_float to use 16-bit render buffers"),_="rgba16f"):"float"!==k&&"float32"!==k||(O(n.webgl_color_buffer_float,"you must enable WEBGL_color_buffer_float in order to use 32-bit floating point renderbuffers"),_="rgba32f"),O.oneOf(k,c,"invalid color type")),"colorFormat"in T&&(l.indexOf(_=T.colorFormat)>=0?w=!0:u.indexOf(_)>=0?w=!1:w?O.oneOf(T.colorFormat,l,"invalid color format for texture"):O.oneOf(T.colorFormat,u,"invalid color format for renderbuffer"))),("depthTexture"in T||"depthStencilTexture"in T)&&O(!(S=!(!T.depthTexture&&!T.depthStencilTexture))||n.webgl_depth_texture,"webgl_depth_texture extension not supported"),"depth"in T&&("boolean"==typeof T.depth?d=T.depth:(A=T.depth,g=!1)),"stencil"in T&&("boolean"==typeof T.stencil?g=T.stencil:(P=T.stencil,d=!1)),"depthStencil"in T&&("boolean"==typeof T.depthStencil?d=g=T.depthStencil:(M=T.depthStencil,d=!1,g=!1))}else a=h=1;var j=null,D=null,L=null,R=null;if(Array.isArray(y))j=y.map(m);else if(y)j=[m(y)];else for(j=new Array(E),i=0;i=0||j[i].renderbuffer&&zn.indexOf(j[i].renderbuffer._renderbuffer.format)>=0,"framebuffer color attachment "+i+" is invalid"),j[i]&&j[i].texture){var B=Ln[j[i].texture._texture.format]*Rn[j[i].texture._texture.type];null===I?I=B:O(I===B,"all color attachments much have the same number of bits per pixel.")}return f(D,a,h),O(!D||D.texture&&D.texture._texture.format===On||D.renderbuffer&&D.renderbuffer._renderbuffer.format===In,"invalid depth attachment for framebuffer object"),f(L,a,h),O(!L||L.renderbuffer&&L.renderbuffer._renderbuffer.format===Bn,"invalid stencil attachment for framebuffer object"),f(R,a,h),O(!R||R.texture&&R.texture._texture.format===Fn||R.renderbuffer&&R.renderbuffer._renderbuffer.format===Fn,"invalid depth-stencil attachment for framebuffer object"),x(o),o.width=a,o.height=h,o.colorAttachments=j,o.depthAttachment=D,o.stencilAttachment=L,o.depthStencilAttachment=R,p.color=j.map(b),p.depth=b(D),p.stencil=b(L),p.depthStencil=b(R),p.width=o.width,p.height=o.height,C(o),p}return a.framebufferCount++,p(e,i),t(p,{resize:function(e,t){O(s.next!==o,"can not resize a framebuffer which is currently in use");var n=Math.max(0|e,1),r=Math.max(0|t||n,1);if(n===o.width&&r===o.height)return p;for(var i=o.colorAttachments,a=0;a=2,"invalid shape for framebuffer"),O(g[0]===g[1],"cube framebuffer must be square"),h=g[0]}else"radius"in b&&(h=0|b.radius),"width"in b?(h=0|b.width,"height"in b&&O(b.height===h,"must be square")):"height"in b&&(h=0|b.height);("color"in b||"colors"in b)&&(f=b.color||b.colors,Array.isArray(f)&&O(1===f.length||n.webgl_draw_buffers,"multiple render targets not supported")),f||("colorCount"in b&&O((v=0|b.colorCount)>0,"invalid color buffer count"),"colorType"in b&&(O.oneOf(b.colorType,c,"invalid color type"),m=b.colorType),"colorFormat"in b&&(d=b.colorFormat,O.oneOf(b.colorFormat,l,"invalid color format for texture"))),"depth"in b&&(p.depth=b.depth),"stencil"in b&&(p.stencil=b.stencil),"depthStencil"in b&&(p.depthStencil=b.depthStencil)}else h=1;if(f)if(Array.isArray(f))for(u=[],r=0;r0&&(p.depth=o[0].depth,p.stencil=o[0].stencil,p.depthStencil=o[0].depthStencil),o[r]?o[r](p):o[r]=E(p)}return t(a,{width:h,height:h,color:u})}return a(e),t(a,{faces:o,resize:function(e){var t,n=0|e;if(O(n>0&&n<=r.maxCubeMapSize,"invalid radius for cube fbo"),n===a.width)return a;var i=a.color;for(t=0;t=0;--e){var t=T[e];t&&t(b,null,0)}i.flush(),f&&f.update()}function I(){!L&&T.length>0&&(L=N.next(R))}function B(){L&&(N.cancel(R),L=null)}function F(e){e.preventDefault(),a=!0,B(),V.forEach(function(e){e()})}function z(e){i.getError(),a=!1,s.restore(),x.restore(),y.restore(),k.restore(),C.restore(),E.restore(),w.restore(),f&&f.restore(),A.procs.refresh(),I(),j.forEach(function(e){e()})}function H(e){function n(e,t){var n={},r={};return Object.keys(e).forEach(function(i){var o=e[i];if(U.isDynamic(o))r[i]=U.unbox(o,i);else{if(t&&Array.isArray(o))for(var a=0;a0)return p.call(this,function(e){for(;f.length=0,"cannot cancel a frame twice"),T[t]=function e(){var t=xo(T,e);T[t]=T[T.length-1],T.length-=1,T.length<=0&&B()}}}}function Y(){var e=M.viewport,t=M.scissor_box;e[0]=e[1]=t[0]=t[1]=0,b.viewportWidth=b.framebufferWidth=b.drawingBufferWidth=e[2]=t[2]=i.drawingBufferWidth,b.viewportHeight=b.framebufferHeight=b.drawingBufferHeight=e[3]=t[3]=i.drawingBufferHeight}function Q(){b.tick+=1,b.time=J(),Y(),A.procs.poll()}function X(){k.refresh(),Y(),A.procs.refresh(),f&&f.update()}function J(){return(q()-d)/1e3}X();var Z=t(H,{clear:function(e){if(O("object"==typeof e&&e,"regl.clear() takes an object as input"),"framebuffer"in e)if(e.framebuffer&&"framebufferCube"===e.framebuffer_reglType)for(var n=0;n<6;++n)K(t({framebuffer:e.framebuffer.faces[n]},e),W);else K(e,W);else W(0,e)},prop:U.define.bind(null,yo),context:U.define.bind(null,wo),this:U.define.bind(null,_o),draw:H({}),buffer:function(e){return y.create(e,vo,!1,!1)},elements:function(e){return _.create(e,!1)},texture:k.create2D,cube:k.createCube,renderbuffer:C.create,framebuffer:E.create,framebufferCube:E.createCube,vao:w.createVAO,attributes:o,frame:$,on:function(e,t){var n;switch(O.type(t,"function","listener callback must be a function"),e){case"frame":return $(t);case"lost":n=V;break;case"restore":n=j;break;case"destroy":n=D;break;default:O.raise("invalid event, must be one of frame,lost,restore,destroy")}return n.push(t),{cancel:function(){for(var e=0;e=0},read:P,destroy:function(){T.length=0,B(),S&&(S.removeEventListener(bo,F),S.removeEventListener(go,z)),x.clear(),E.clear(),C.clear(),k.clear(),_.clear(),y.clear(),w.clear(),f&&f.clear(),D.forEach(function(e){e()})},_gl:i,_refresh:X,poll:function(){Q(),f&&f.update()},now:J,stats:p});return r.onDone(null,Z),Z}},"object"==typeof n&&void 0!==t?t.exports=i():"function"==typeof define&&define.amd?define(i):r.createREGL=i()},{}],45:[function(e,t,n){(function(e){(function(){"use strict";var n=256,r=[],i=void 0===e?window:e,o=Math.pow(n,6),a=Math.pow(2,52),s=2*a,l=n-1,u=Math.random;function c(e){var t,r=e.length,i=this,o=0,a=i.i=i.j=0,s=i.S=[];for(r||(e=[r++]);o=s;)e/=2,t/=2,r>>>=1;return(e+r)/t}},t.exports.resetGlobal=function(){Math.random=u},p(Math.random(),r)}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],46:[function(e,t,n){!function(){"use strict";var e=.5*(Math.sqrt(3)-1),r=(3-Math.sqrt(3))/6,i=1/6,o=(Math.sqrt(5)-1)/4,a=(5-Math.sqrt(5))/20;function s(e){var t;t="function"==typeof e?e:e?function(){var e=0,t=0,n=0,r=1,i=(o=4022871197,function(e){e=e.toString();for(var t=0;t>>0,o=(n*=o)>>>0,o+=4294967296*(n-=o)}return 2.3283064365386963e-10*(o>>>0)});var o;e=i(" "),t=i(" "),n=i(" ");for(var a=0;ab?(i=1,o=0):(i=0,o=1);var g=v-i+r,y=b-o+r,w=v-1+2*r,_=b-1+2*r,x=255&f,k=255&d,C=.5-v*v-b*b;if(C>=0){var E=3*a[x+s[k]];u=(C*=C)*C*(l[E]*v+l[E+1]*b)}var A=.5-g*g-y*y;if(A>=0){var P=3*a[x+i+s[k+o]];c=(A*=A)*A*(l[P]*g+l[P+1]*y)}var M=.5-w*w-_*_;if(M>=0){var S=3*a[x+1+s[k+1]];p=(M*=M)*M*(l[S]*w+l[S+1]*_)}return 70*(u+c+p)},noise3D:function(e,t,n){var r,o,a,s,l,u,c,p,h,f,d=this.permMod12,m=this.perm,v=this.grad3,b=(e+t+n)*(1/3),g=Math.floor(e+b),y=Math.floor(t+b),w=Math.floor(n+b),_=(g+y+w)*i,x=e-(g-_),k=t-(y-_),C=n-(w-_);x>=k?k>=C?(l=1,u=0,c=0,p=1,h=1,f=0):x>=C?(l=1,u=0,c=0,p=1,h=0,f=1):(l=0,u=0,c=1,p=1,h=0,f=1):kj?L++:R++,V>O?L++:I++,V>D?L++:B++,j>O?R++:I++,j>D?R++:B++,O>D?I++:B++;var F=V-(p=L>=3?1:0)+a,z=j-(h=R>=3?1:0)+a,U=O-(f=I>=3?1:0)+a,N=D-(d=B>=3?1:0)+a,q=V-(m=L>=2?1:0)+2*a,H=j-(v=R>=2?1:0)+2*a,K=O-(b=I>=2?1:0)+2*a,G=D-(g=B>=2?1:0)+2*a,W=V-(y=L>=1?1:0)+3*a,$=j-(w=R>=1?1:0)+3*a,Y=O-(_=I>=1?1:0)+3*a,Q=D-(x=B>=1?1:0)+3*a,X=V-1+4*a,J=j-1+4*a,Z=O-1+4*a,ee=D-1+4*a,te=255&A,ne=255&P,re=255&M,ie=255&S,oe=.6-V*V-j*j-O*O-D*D;if(oe<0)i=0;else{var ae=k[te+k[ne+k[re+k[ie]]]]%32*4;i=(oe*=oe)*oe*(C[ae]*V+C[ae+1]*j+C[ae+2]*O+C[ae+3]*D)}var se=.6-F*F-z*z-U*U-N*N;if(se<0)s=0;else{var le=k[te+p+k[ne+h+k[re+f+k[ie+d]]]]%32*4;s=(se*=se)*se*(C[le]*F+C[le+1]*z+C[le+2]*U+C[le+3]*N)}var ue=.6-q*q-H*H-K*K-G*G;if(ue<0)l=0;else{var ce=k[te+m+k[ne+v+k[re+b+k[ie+g]]]]%32*4;l=(ue*=ue)*ue*(C[ce]*q+C[ce+1]*H+C[ce+2]*K+C[ce+3]*G)}var pe=.6-W*W-$*$-Y*Y-Q*Q;if(pe<0)u=0;else{var he=k[te+y+k[ne+w+k[re+_+k[ie+x]]]]%32*4;u=(pe*=pe)*pe*(C[he]*W+C[he+1]*$+C[he+2]*Y+C[he+3]*Q)}var fe=.6-X*X-J*J-Z*Z-ee*ee;if(fe<0)c=0;else{var de=k[te+1+k[ne+1+k[re+1+k[ie+1]]]]%32*4;c=(fe*=fe)*fe*(C[de]*X+C[de+1]*J+C[de+2]*Z+C[de+3]*ee)}return 27*(i+s+l+u+c)}},s._buildPermutationTable=l,"undefined"!=typeof define&&define.amd&&define(function(){return s}),void 0!==n?n.SimplexNoise=s:"undefined"!=typeof window&&(window.SimplexNoise=s),void 0!==t&&(t.exports=s)}()},{}],47:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&s.return&&s.return()}finally{if(i)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),i=2*Math.PI,o=function(e,t,n,r,i,o,a){var s=e.x,l=e.y;return{x:r*(s*=t)-i*(l*=n)+o,y:i*s+r*l+a}},a=function(e,t){var n=1.5707963267948966===t?.551915024494:-1.5707963267948966===t?-.551915024494:4/3*Math.tan(t/4),r=Math.cos(e),i=Math.sin(e),o=Math.cos(e+t),a=Math.sin(e+t);return[{x:r-i*n,y:i+r*n},{x:o+a*n,y:a-o*n},{x:o,y:a}]},s=function(e,t,n,r){var i=e*n+t*r;return i>1&&(i=1),i<-1&&(i=-1),(e*r-t*n<0?-1:1)*Math.acos(i)};n.default=function(e){var t=e.px,n=e.py,l=e.cx,u=e.cy,c=e.rx,p=e.ry,h=e.xAxisRotation,f=void 0===h?0:h,d=e.largeArcFlag,m=void 0===d?0:d,v=e.sweepFlag,b=void 0===v?0:v,g=[];if(0===c||0===p)return[];var y=Math.sin(f*i/360),w=Math.cos(f*i/360),_=w*(t-l)/2+y*(n-u)/2,x=-y*(t-l)/2+w*(n-u)/2;if(0===_&&0===x)return[];c=Math.abs(c),p=Math.abs(p);var k=Math.pow(_,2)/Math.pow(c,2)+Math.pow(x,2)/Math.pow(p,2);k>1&&(c*=Math.sqrt(k),p*=Math.sqrt(k));var C=function(e,t,n,r,o,a,l,u,c,p,h,f){var d=Math.pow(o,2),m=Math.pow(a,2),v=Math.pow(h,2),b=Math.pow(f,2),g=d*m-d*b-m*v;g<0&&(g=0),g/=d*b+m*v;var y=(g=Math.sqrt(g)*(l===u?-1:1))*o/a*f,w=g*-a/o*h,_=p*y-c*w+(e+n)/2,x=c*y+p*w+(t+r)/2,k=(h-y)/o,C=(f-w)/a,E=(-h-y)/o,A=(-f-w)/a,P=s(1,0,k,C),M=s(k,C,E,A);return 0===u&&M>0&&(M-=i),1===u&&M<0&&(M+=i),[_,x,P,M]}(t,n,l,u,c,p,m,b,y,w,_,x),E=r(C,4),A=E[0],P=E[1],M=E[2],S=E[3],T=Math.abs(S)/(i/4);Math.abs(1-T)<1e-7&&(T=1);var V=Math.max(Math.ceil(T),1);S/=V;for(var j=0;j0&&(n.push(p),p=[]);else{if("C"!==e[0])throw new Error("illegal type in SVG: "+e[0]);!function(e,t,n,i){r(n,s(l,i[1],i[2]),s(u,i[3],i[4]),s(c,i[5],i[6]),t,e)}(p,t,h,e),s(h,e[5],e[6])}}),p.length>0&&n.push(p),n}},{"abs-svg-path":5,"adaptive-bezier-curve":7,"normalize-svg-path":49,"vec2-copy":50}],49:[function(e,t,n){var r=Math.PI,i=u(120);function o(e,t,n,r){return["C",e,t,n,r,n,r]}function a(e,t,n,r,i,o){return["C",e/3+2/3*n,t/3+2/3*r,i/3+2/3*n,o/3+2/3*r,i,o]}function s(e,t,n,o,a,u,c,p,h,f){if(f)k=f[0],C=f[1],_=f[2],x=f[3];else{var d=l(e,t,-a);t=d.y;var m=((e=d.x)-(p=(d=l(p,h,-a)).x))/2,v=(t-(h=d.y))/2,b=m*m/(n*n)+v*v/(o*o);b>1&&(n*=b=Math.sqrt(b),o*=b);var g=n*n,y=o*o,w=(u==c?-1:1)*Math.sqrt(Math.abs((g*y-g*v*v-y*m*m)/(g*v*v+y*m*m)));Infinity==w&&(w=1);var _=w*n*v/o+(e+p)/2,x=w*-o*m/n+(t+h)/2,k=Math.asin(((t-x)/o).toFixed(9)),C=Math.asin(((h-x)/o).toFixed(9));(k=e<_?r-k:k)<0&&(k=2*r+k),(C=p<_?r-C:C)<0&&(C=2*r+C),c&&k>C&&(k-=2*r),!c&&C>k&&(C-=2*r)}if(Math.abs(C-k)>i){var E=C,A=p,P=h;C=k+i*(c&&C>k?1:-1);var M=s(p=_+n*Math.cos(C),h=x+o*Math.sin(C),n,o,a,0,c,A,P,[C,E,_,x])}var S=Math.tan((C-k)/4),T=4/3*n*S,V=4/3*o*S,j=[2*e-(e+T*Math.sin(k)),2*t-(t-V*Math.cos(k)),p+T*Math.sin(C),h-V*Math.cos(C),p,h];if(f)return j;M&&(j=j.concat(M));for(var O=0;O7&&(n.push(b.splice(0,7)),b.unshift("C"));break;case"S":var y=f,w=d;"C"!=t&&"S"!=t||(y+=y-r,w+=w-i),b=["C",y,w,b[1],b[2],b[3],b[4]];break;case"T":"Q"==t||"T"==t?(p=2*f-p,h=2*d-h):(p=f,h=d),b=a(f,d,p,h,b[1],b[2]);break;case"Q":p=b[1],h=b[2],b=a(f,d,b[1],b[2],b[3],b[4]);break;case"L":b=o(f,d,b[1],b[2]);break;case"H":b=o(f,d,b[1],d);break;case"V":b=o(f,d,f,b[1]);break;case"Z":b=o(f,d,l,c)}t=g,f=b[b.length-2],d=b[b.length-1],b.length>4?(r=b[b.length-4],i=b[b.length-3]):(r=f,i=d),n.push(b)}return n}},{}],50:[function(e,t,n){t.exports=function(e,t){return e[0]=t[0],e[1]=t[1],e}},{}],51:[function(e,t,n){const r=e("canvas-sketch"),{random:i,math:o}=e("canvas-sketch-util"),a=e("tweakpane"),s={default:{color:"green",endColor:"red",radius:1,slice:1,endAngle:360,shape:"circle"},happyBeans:{color:"green",endColor:"#d1c8b9",radius:27.9,slice:4.23,endAngle:-.3,shape:"circle"},halfWatermelon:{color:"green",endColor:"red",radius:54.8,slice:17.14,endAngle:-5.142,shape:"circle"}},l={cols:6,rows:6,backgroundColor:"white",scaleMin:1,scaleMax:31,freq:.001,amp:.2,animate:!0,frame:0,lineCap:"round",animateThickness:!1,manualThickness:10,shape:s.halfWatermelon.shape,color:s.halfWatermelon.color||s.default.color,endColor:s.halfWatermelon.endColor||s.default.endColor,radius:s.halfWatermelon.radius||s.default.radius,slice:s.halfWatermelon.slice||s.default.slice,endAngle:s.halfWatermelon.endAngle||s.default.endAngle};(()=>{const e=new a.Pane;let t;(t=e.addFolder({title:"Grid"})).addInput(l,"lineCap",{options:{butt:"butt",round:"round",square:"square"}}),t.addInput(l,"cols",{min:2,max:50,step:1}),t.addInput(l,"rows",{min:2,max:50,step:1}),t.addInput(l,"scaleMin",{min:1,max:100}),t.addInput(l,"scaleMax",{min:1,max:100}),t.addInput(l,"animateThickness"),t.addInput(l,"manualThickness",{min:1,max:30}),t.addInput(l,"shape",{options:{line:"line",circle:"circle",triangle:"triangle"}}),t.addInput(l,"color"),t.addInput(l,"endColor"),t.addInput(l,"radius",{min:1,max:100}),t.addInput(l,"slice",{min:1,max:100}),(t=e.addFolder({title:"Noise"})).addInput(l,"freq",{min:-.01,max:.01}),t.addInput(l,"amp",{min:0,max:1}),t.addInput(l,"animate"),t.addInput(l,"frame",{min:0,max:9999})})(),r(()=>({context:e,width:t,height:n,frame:r})=>{e.fillStyle=l.backgroundColor,e.fillRect(0,0,t,n);const a=l.cols,s=l.rows,p=a*s,h=.8*t,f=.8*n,d=h/a,m=f/s,v=.5*(t-h),b=.5*(n-f);for(let t=0;t{const n=e.createRadialGradient(0,0,1*t.radius,1*t.slice,4*t.slice,1*t.radius);return n.addColorStop("0",t.color),n.addColorStop("1.0",t.endColor),n},c=(e,t)=>{const n=e.createLinearGradient(0,0,500,0);return n.addColorStop("0",t.color),n.addColorStop("1.0",t.endColor),n}},{"canvas-sketch":30,"canvas-sketch-util":14,tweakpane:4}],52:[function(e,t,n){(function(e){(function(){e.CANVAS_SKETCH_DEFAULT_STORAGE_KEY=window.location.href}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[51,52]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy5udm0vdmVyc2lvbnMvbm9kZS92MTYuMTMuMC9saWIvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtY2xpL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi8uLi8ubnZtL3ZlcnNpb25zL25vZGUvdjE2LjEzLjAvbGliL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLWNsaS9ub2RlX21vZHVsZXMvYmFzZTY0LWpzL2luZGV4LmpzIiwiLi4vLi4vLm52bS92ZXJzaW9ucy9ub2RlL3YxNi4xMy4wL2xpYi9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC1jbGkvbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIi4uLy4uLy5udm0vdmVyc2lvbnMvbm9kZS92MTYuMTMuMC9saWIvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtY2xpL25vZGVfbW9kdWxlcy9pZWVlNzU0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3R3ZWFrcGFuZS9kaXN0L3R3ZWFrcGFuZS5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9hYnMtc3ZnLXBhdGgvaW5kZXguanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvYWRhcHRpdmUtYmV6aWVyLWN1cnZlL2Z1bmN0aW9uLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2FkYXB0aXZlLWJlemllci1jdXJ2ZS9pbmRleC5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9hbG1vc3QtZXF1YWwvYWxtb3N0X2VxdWFsLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2FuLWFycmF5L2luZGV4LmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2FycmF5LWFsbW9zdC1lcXVhbC9pbmRleC5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9hcnJheS1hbG1vc3QtZXF1YWwvbm9kZV9tb2R1bGVzL2FsbW9zdC1lcXVhbC9hbG1vc3RfZXF1YWwuanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2NvbG9yLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9nZW9tZXRyeS5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvaW5kZXguanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi9jbGlwL2NsaXAtbGluZS10by1jaXJjbGUuanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi9jbGlwL2NsaXAtc2VnbWVudC10by1jaXJjbGUuanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi9jc3MtY29sb3ItbmFtZXMuanNvbiIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL2Nzcy1jb2xvci5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL2hleC10by1yZ2JhLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9saWIvaHNsLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9saWIvb3B0aW1pemUtcGVucGxvdC1wYXRocy5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL3JlbGF0aXZlLWx1bWluYW5jZS5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL3JnYmEtdG8taGV4LmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9saWIvdmVjMi5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL3dyYXAuanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL21hdGguanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL3BlbnBsb3QuanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL3JhbmRvbS5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvc2hhZGVyLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9za2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvc2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL3JpZ2h0LW5vdy9icm93c2VyLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9za2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvaXMtcHJvbWlzZS9pbmRleC5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvc2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2lzLWRvbS9pbmRleC5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvc2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL3V0aWwuanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L3NrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9yZXBlYXQtc3RyaW5nL2luZGV4LmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9za2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZGVlcC1lcXVhbC9saWIva2V5cy5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvc2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2RlZXAtZXF1YWwvbGliL2lzX2FyZ3VtZW50cy5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvc2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2RlZXAtZXF1YWwvaW5kZXguanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L3NrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9kYXRlZm9ybWF0L2xpYi9kYXRlZm9ybWF0LmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9za2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvcGFkLWxlZnQvaW5kZXguanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L3NrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9zYXZlLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9za2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvYWNjZXNzaWJpbGl0eS5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvc2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL3BhcGVyLXNpemVzLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9za2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZGVmaW5lZC9pbmRleC5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvc2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2NvbnZlcnQtbGVuZ3RoL2NvbnZlcnQtbGVuZ3RoLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9za2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvZGlzdGFuY2VzLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9za2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvY29yZS9yZXNpemVDYW52YXMuanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L3NrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9nZXQtY2FudmFzLWNvbnRleHQvaW5kZXguanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L3NrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jb3JlL2NyZWF0ZUNhbnZhcy5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvc2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2NvcmUvU2tldGNoTWFuYWdlci5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvc2tldGNoZXMvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2NvcmUva2V5Ym9hcmRTaG9ydGN1dHMuanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L3NrZXRjaGVzL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jYW52YXMtc2tldGNoLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2Nsb25lL2Nsb25lLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvY29udmVyc2lvbnMuanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvY29sb3ItY29udmVydC9pbmRleC5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9jb252ZXJ0LWxlbmd0aC9jb252ZXJ0LWxlbmd0aC5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9kMy1wYXRoL2Rpc3QvZDMtcGF0aC5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9kZWZpbmVkL2luZGV4LmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL2Zsb2F0LWhzbDJyZ2IvaW5kZXguanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvZmxvYXQtcmdiMmhzbC9pbmRleC5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9saW5lY2xpcC9pbmRleC5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9ub3JtYWxpemUtc3ZnLXBhdGgvaW5kZXguanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvcGFyc2UtY29sb3IvaW5kZXguanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvcGFyc2Utc3ZnLXBhdGgvaW5kZXguanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvcHJpbWl0aXZlLXF1YWQvaW5kZXguanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvcmVnbC9kaXN0L3JlZ2wuanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvc2VlZC1yYW5kb20vaW5kZXguanMiLCJza2V0Y2hlcy9ub2RlX21vZHVsZXMvc2ltcGxleC1ub2lzZS9zaW1wbGV4LW5vaXNlLmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL3N2Zy1hcmMtdG8tY3ViaWMtYmV6aWVyL2Nqcy9pbmRleC5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9zdmctcGF0aC1jb250b3Vycy9pbmRleC5qcyIsInNrZXRjaGVzL25vZGVfbW9kdWxlcy9zdmctcGF0aC1jb250b3Vycy9ub2RlX21vZHVsZXMvbm9ybWFsaXplLXN2Zy1wYXRoL2luZGV4LmpzIiwic2tldGNoZXMvbm9kZV9tb2R1bGVzL3ZlYzItY29weS9pbmRleC5qcyIsInNrZXRjaGVzL3NrZXRjaC0wNy50cyIsImNhbnZhcy1za2V0Y2gtY2xpL2luamVjdGVkL3N0b3JhZ2Uta2V5LmpzIl0sIm5hbWVzIjpbInIiLCJlIiwibiIsInQiLCJvIiwiaSIsImYiLCJjIiwicmVxdWlyZSIsInUiLCJhIiwiRXJyb3IiLCJjb2RlIiwicCIsImV4cG9ydHMiLCJjYWxsIiwibGVuZ3RoIiwiMSIsIm1vZHVsZSIsImJ5dGVMZW5ndGgiLCJiNjQiLCJsZW5zIiwiZ2V0TGVucyIsInBsYWNlSG9sZGVyc0xlbiIsInRvQnl0ZUFycmF5IiwidG1wIiwidmFsaWRMZW4iLCJhcnIiLCJBcnIiLCJfYnl0ZUxlbmd0aCIsImN1ckJ5dGUiLCJsZW4iLCJyZXZMb29rdXAiLCJjaGFyQ29kZUF0IiwiZnJvbUJ5dGVBcnJheSIsInVpbnQ4IiwiZXh0cmFCeXRlcyIsInBhcnRzIiwibGVuMiIsInB1c2giLCJlbmNvZGVDaHVuayIsImxvb2t1cCIsImpvaW4iLCJVaW50OEFycmF5IiwiQXJyYXkiLCJpbmRleE9mIiwic3RhcnQiLCJlbmQiLCJudW0iLCJvdXRwdXQiLCJiYXNlNjQiLCJpZWVlNzU0IiwiQnVmZmVyIiwiU2xvd0J1ZmZlciIsImFsbG9jIiwiSU5TUEVDVF9NQVhfQllURVMiLCJLX01BWF9MRU5HVEgiLCJjcmVhdGVCdWZmZXIiLCJSYW5nZUVycm9yIiwiYnVmIiwiX19wcm90b19fIiwicHJvdG90eXBlIiwiYXJnIiwiZW5jb2RpbmdPck9mZnNldCIsIlR5cGVFcnJvciIsImFsbG9jVW5zYWZlIiwiZnJvbSIsInZhbHVlIiwic3RyaW5nIiwiZW5jb2RpbmciLCJpc0VuY29kaW5nIiwiYWN0dWFsIiwid3JpdGUiLCJzbGljZSIsImZyb21TdHJpbmciLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsImZyb21BcnJheUxpa2UiLCJpc0luc3RhbmNlIiwiYnVmZmVyIiwiYXJyYXkiLCJieXRlT2Zmc2V0IiwidW5kZWZpbmVkIiwiZnJvbUFycmF5QnVmZmVyIiwidmFsdWVPZiIsImIiLCJvYmoiLCJpc0J1ZmZlciIsImNoZWNrZWQiLCJjb3B5IiwibnVtYmVySXNOYU4iLCJ0eXBlIiwiaXNBcnJheSIsImRhdGEiLCJmcm9tT2JqZWN0IiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJhc3NlcnRTaXplIiwic2l6ZSIsInRvU3RyaW5nIiwibXVzdE1hdGNoIiwiYXJndW1lbnRzIiwibG93ZXJlZENhc2UiLCJ1dGY4VG9CeXRlcyIsImJhc2U2NFRvQnl0ZXMiLCJ0b0xvd2VyQ2FzZSIsInN3YXAiLCJtIiwiYmlkaXJlY3Rpb25hbEluZGV4T2YiLCJ2YWwiLCJkaXIiLCJhcnJheUluZGV4T2YiLCJsYXN0SW5kZXhPZiIsImluZGV4U2l6ZSIsImFyckxlbmd0aCIsInZhbExlbmd0aCIsIlN0cmluZyIsInJlYWQiLCJyZWFkVUludDE2QkUiLCJmb3VuZEluZGV4IiwiZm91bmQiLCJqIiwiaGV4V3JpdGUiLCJvZmZzZXQiLCJOdW1iZXIiLCJyZW1haW5pbmciLCJzdHJMZW4iLCJwYXJzZWQiLCJwYXJzZUludCIsInN1YnN0ciIsInV0ZjhXcml0ZSIsImJsaXRCdWZmZXIiLCJhc2NpaVdyaXRlIiwic3RyIiwiYnl0ZUFycmF5IiwiYXNjaWlUb0J5dGVzIiwibGF0aW4xV3JpdGUiLCJiYXNlNjRXcml0ZSIsInVjczJXcml0ZSIsInVuaXRzIiwiaGkiLCJ1dGYxNmxlVG9CeXRlcyIsImJhc2U2NFNsaWNlIiwidXRmOFNsaWNlIiwiTWF0aCIsIm1pbiIsInJlcyIsInNlY29uZEJ5dGUiLCJ0aGlyZEJ5dGUiLCJmb3VydGhCeXRlIiwidGVtcENvZGVQb2ludCIsImZpcnN0Qnl0ZSIsImNvZGVQb2ludCIsImJ5dGVzUGVyU2VxdWVuY2UiLCJjb2RlUG9pbnRzIiwiTUFYX0FSR1VNRU5UU19MRU5HVEgiLCJmcm9tQ2hhckNvZGUiLCJhcHBseSIsImRlY29kZUNvZGVQb2ludHNBcnJheSIsImtNYXhMZW5ndGgiLCJUWVBFRF9BUlJBWV9TVVBQT1JUIiwiZm9vIiwidHlwZWRBcnJheVN1cHBvcnQiLCJjb25zb2xlIiwiZXJyb3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJ0aGlzIiwic3BlY2llcyIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwicG9vbFNpemUiLCJmaWxsIiwiYWxsb2NVbnNhZmVTbG93IiwiX2lzQnVmZmVyIiwiY29tcGFyZSIsIngiLCJ5IiwiY29uY2F0IiwibGlzdCIsInBvcyIsInN3YXAxNiIsInN3YXAzMiIsInN3YXA2NCIsInRvTG9jYWxlU3RyaW5nIiwiaGV4U2xpY2UiLCJhc2NpaVNsaWNlIiwibGF0aW4xU2xpY2UiLCJ1dGYxNmxlU2xpY2UiLCJlcXVhbHMiLCJpbnNwZWN0IiwibWF4IiwicmVwbGFjZSIsInRyaW0iLCJ0YXJnZXQiLCJ0aGlzU3RhcnQiLCJ0aGlzRW5kIiwidGhpc0NvcHkiLCJ0YXJnZXRDb3B5IiwiaW5jbHVkZXMiLCJpc0Zpbml0ZSIsInRvSlNPTiIsIl9hcnIiLCJyZXQiLCJvdXQiLCJ0b0hleCIsImJ5dGVzIiwiY2hlY2tPZmZzZXQiLCJleHQiLCJjaGVja0ludCIsImNoZWNrSUVFRTc1NCIsIndyaXRlRmxvYXQiLCJsaXR0bGVFbmRpYW4iLCJub0Fzc2VydCIsIndyaXRlRG91YmxlIiwibmV3QnVmIiwic3ViYXJyYXkiLCJyZWFkVUludExFIiwibXVsIiwicmVhZFVJbnRCRSIsInJlYWRVSW50OCIsInJlYWRVSW50MTZMRSIsInJlYWRVSW50MzJMRSIsInJlYWRVSW50MzJCRSIsInJlYWRJbnRMRSIsInBvdyIsInJlYWRJbnRCRSIsInJlYWRJbnQ4IiwicmVhZEludDE2TEUiLCJyZWFkSW50MTZCRSIsInJlYWRJbnQzMkxFIiwicmVhZEludDMyQkUiLCJyZWFkRmxvYXRMRSIsInJlYWRGbG9hdEJFIiwicmVhZERvdWJsZUxFIiwicmVhZERvdWJsZUJFIiwid3JpdGVVSW50TEUiLCJ3cml0ZVVJbnRCRSIsIndyaXRlVUludDgiLCJ3cml0ZVVJbnQxNkxFIiwid3JpdGVVSW50MTZCRSIsIndyaXRlVUludDMyTEUiLCJ3cml0ZVVJbnQzMkJFIiwid3JpdGVJbnRMRSIsImxpbWl0Iiwic3ViIiwid3JpdGVJbnRCRSIsIndyaXRlSW50OCIsIndyaXRlSW50MTZMRSIsIndyaXRlSW50MTZCRSIsIndyaXRlSW50MzJMRSIsIndyaXRlSW50MzJCRSIsIndyaXRlRmxvYXRMRSIsIndyaXRlRmxvYXRCRSIsIndyaXRlRG91YmxlTEUiLCJ3cml0ZURvdWJsZUJFIiwidGFyZ2V0U3RhcnQiLCJjb3B5V2l0aGluIiwic2V0IiwiSU5WQUxJRF9CQVNFNjRfUkUiLCJJbmZpbml0eSIsImxlYWRTdXJyb2dhdGUiLCJzcGxpdCIsImJhc2U2NGNsZWFuIiwic3JjIiwiZHN0IiwiY29uc3RydWN0b3IiLCJuYW1lIiwiaXNMRSIsIm1MZW4iLCJuQnl0ZXMiLCJlTGVuIiwiZU1heCIsImVCaWFzIiwibkJpdHMiLCJkIiwicyIsIk5hTiIsInJ0IiwiYWJzIiwiaXNOYU4iLCJmbG9vciIsImxvZyIsIkxOMiIsImdsb2JhbCIsImZhY3RvcnkiLCJCbGFkZUFwaSIsIltvYmplY3QgT2JqZWN0XSIsImNvbnRyb2xsZXIiLCJjb250cm9sbGVyXyIsImRpc2FibGVkIiwidmlld1Byb3BzIiwiaGlkZGVuIiwiVHBFdmVudCIsIlRwQ2hhbmdlRXZlbnQiLCJwcmVzZXRLZXkiLCJsYXN0Iiwic3VwZXIiLCJUcFVwZGF0ZUV2ZW50IiwiVHBGb2xkRXZlbnQiLCJleHBhbmRlZCIsImZvcmNlQ2FzdCIsInYiLCJpc0VtcHR5IiwiZGVlcEVxdWFsc0FycmF5IiwiYTEiLCJhMiIsIkNSRUFURV9NRVNTQUdFX01BUCIsImFscmVhZHlkaXNwb3NlZCIsImludmFsaWRwYXJhbXMiLCJjb250ZXh0Iiwibm9tYXRjaGluZ2NvbnRyb2xsZXIiLCJrZXkiLCJub21hdGNoaW5ndmlldyIsIkpTT04iLCJzdHJpbmdpZnkiLCJwYXJhbXMiLCJub3RiaW5kYWJsZSIsInByb3BlcnR5bm90Zm91bmQiLCJzaG91bGRuZXZlcmhhcHBlbiIsIlRwRXJyb3IiLCJjb25maWciLCJfYSIsIm1lc3NhZ2UiLCJzdGFjayIsIkJpbmRpbmdUYXJnZXQiLCJvcHRfaWQiLCJvYmpfIiwia2V5XyIsInByZXNldEtleV8iLCJ2YWx1ZU9iaiIsImlzQmluZGFibGUiLCJub3RCaW5kYWJsZSIsInByb3BlcnR5Tm90Rm91bmQiLCJCdXR0b25BcGkiLCJsYWJlbCIsInByb3BzIiwidGl0bGUiLCJ2YWx1ZUNvbnRyb2xsZXIiLCJldmVudE5hbWUiLCJoYW5kbGVyIiwiYmgiLCJiaW5kIiwiZW1pdHRlciIsIm9uIiwiRW1pdHRlciIsIm9ic2VydmVyc18iLCJvYnNlcnZlcnMiLCJmaWx0ZXIiLCJvYnNlcnZlciIsImV2ZW50IiwiZm9yRWFjaCIsIlBSRUZJWCIsIkNsYXNzTmFtZSIsInZpZXdOYW1lIiwib3B0X2VsZW1lbnROYW1lIiwib3B0X21vZGlmaWVyIiwiZXh0cmFjdFZhbHVlIiwiZXYiLCJyYXdWYWx1ZSIsImJpbmRWYWx1ZSIsImFwcGx5VmFsdWUiLCJoMSIsImgyIiwiaW5wdXQiLCJiaW5kVmFsdWVNYXAiLCJ2YWx1ZU1hcCIsInZhbHVlVG9DbGFzc05hbWUiLCJlbGVtIiwiY2xhc3NOYW1lIiwiYWN0aXZlIiwiY2xhc3NMaXN0IiwiYWRkIiwicmVtb3ZlIiwiYXBwbHlDbGFzcyIsImJpbmRWYWx1ZVRvVGV4dENvbnRlbnQiLCJ0ZXh0IiwidGV4dENvbnRlbnQiLCJjbGFzc05hbWUkcSIsIkJ1dHRvblZpZXciLCJkb2MiLCJlbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImJpbmRDbGFzc01vZGlmaWVycyIsImJ1dHRvbkVsZW0iLCJiaW5kRGlzYWJsZWQiLCJhcHBlbmRDaGlsZCIsImJ1dHRvbkVsZW1lbnQiLCJ0aXRsZUVsZW0iLCJCdXR0b25Db250cm9sbGVyIiwib25DbGlja18iLCJ2aWV3IiwiYWRkRXZlbnRMaXN0ZW5lciIsImVtaXQiLCJzZW5kZXIiLCJCb3VuZFZhbHVlIiwiaW5pdGlhbFZhbHVlIiwiY29uc3RyYWludF8iLCJjb25zdHJhaW50IiwiZXF1YWxzXyIsInYxIiwidjIiLCJyYXdWYWx1ZV8iLCJzZXRSYXdWYWx1ZSIsImZvcmNlRW1pdCIsIm9wdGlvbnMiLCJvcHRzIiwiY29uc3RyYWluZWRWYWx1ZSIsImNvbnN0cmFpbiIsIlByaW1pdGl2ZVZhbHVlIiwidmFsdWVfIiwiY3JlYXRlVmFsdWUiLCJWYWx1ZU1hcCIsInZhbE1hcF8iLCJrZXlzIiwicmVkdWNlIiwiYXNzaWduIiwiY29yZSIsImNyZWF0ZUNvcmUiLCJjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyIiwicGFyc2UiLCJvcHRpb25hbCIsInN1Y2NlZWRlZCIsInJlc3VsdCIsImNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXJzIiwiY3VzdG9tIiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwiY29uc3RhbnQiLCJyYXciLCJvYmplY3QiLCJrZXlUb1BhcnNlck1hcCIsImlzT2JqZWN0IiwicGFyc2VyIiwicGFyc2VPYmplY3QiLCJpdGVtUGFyc2VyIiwicGFyc2VJdGVtIiwiaXRlbSIsInBhcnNlQXJyYXkiLCJQYXJhbXNQYXJzZXJzIiwicmVxdWlyZWQiLCJwYXJzZVBhcmFtcyIsImNsYXNzTmFtZSRwIiwiUE9TX1RPX0NMQVNTX05BTUVfTUFQIiwidmVyeWZpcnN0IiwiZmlyc3QiLCJ2ZXJ5bGFzdCIsIkJsYWRlQ29udHJvbGxlciIsInBhcmVudF8iLCJibGFkZSIsImhhbmRsZURpc3Bvc2UiLCJwYXJlbnRFbGVtZW50IiwicmVtb3ZlQ2hpbGQiLCJkaXNwb3NlRWxlbWVudCIsInBhcmVudCIsIlNWR19OUyIsInN1cHBvcnRzVG91Y2giLCJvbnRvdWNoc3RhcnQiLCJnZXRXaW5kb3dEb2N1bWVudCIsIkZ1bmN0aW9uIiwiZG9jdW1lbnQiLCJJQ09OX0lEX1RPX0lOTkVSX0hUTUxfTUFQIiwiY2hlY2siLCJkcm9wZG93biIsInAyZHBhZCIsImNyZWF0ZVN2Z0ljb25FbGVtZW50IiwiaWNvbklkIiwiY3JlYXRlRWxlbWVudE5TIiwiaW5uZXJIVE1MIiwiaW5zZXJ0RWxlbWVudEF0IiwiaW5kZXgiLCJpbnNlcnRCZWZvcmUiLCJjaGlsZHJlbiIsInJlbW92ZUVsZW1lbnQiLCJyZW1vdmVDaGlsZEVsZW1lbnRzIiwiZmluZE5leHRUYXJnZXQiLCJyZWxhdGVkVGFyZ2V0IiwiZXhwbGljaXRPcmlnaW5hbFRhcmdldCIsImNsYXNzTmFtZSRvIiwiTGFiZWxWaWV3IiwibGFiZWxFbGVtIiwiY2hpbGROb2RlcyIsInJlbW92ZUNoaWxkTm9kZXMiLCJmcmFnIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsIm1hcCIsImxpbmUiLCJjcmVhdGVUZXh0Tm9kZSIsImxpbmVOb2RlIiwiY3JlYXRlTGFiZWxOb2RlIiwibGFiZWxFbGVtZW50IiwidmFsdWVFbGVtIiwidmFsdWVFbGVtZW50IiwiTGFiZWxDb250cm9sbGVyIiwiQnV0dG9uQmxhZGVQbHVnaW4iLCJpZCIsImFyZ3MiLCJhcGkiLCJWYWx1ZUJsYWRlQ29udHJvbGxlciIsImNyZWF0ZUJsYWRlIiwicG9zaXRpb25zIiwiRm9sZGFibGUiLCJjb21wbGV0ZWQiLCJleHBhbmRlZEhlaWdodCIsInNob3VsZEZpeEhlaWdodCIsInRlbXBvcmFyeUV4cGFuZGVkIiwic3R5bGVFeHBhbmRlZCIsInN0eWxlSGVpZ2h0IiwiZXhIZWlnaHQiLCJleHBhbmRlZENsYXNzTmFtZSIsIm9uRXhwYW5kIiwiYXBwbHlIZWlnaHQiLCJmb2xkYWJsZSIsInN0eWxlIiwiaGVpZ2h0IiwiYmluZEZvbGRhYmxlIiwiZm9sZGVyIiwiY29udGFpbmVyRWxlbWVudCIsImNhbGxiYWNrIiwidHJhbnNpdGlvbiIsImRpc2FibGVUcmFuc2l0aW9uVGVtcG9yYXJpbHkiLCJjbGllbnRIZWlnaHQiLCJjb21wdXRlRXhwYW5kZWRGb2xkZXJIZWlnaHQiLCJwcm9wZXJ0eU5hbWUiLCJjbGVhblVwVHJhbnNpdGlvbiIsIlJhY2tMaWtlQXBpIiwicmFja0FwaSIsInJhY2tBcGlfIiwiTmVzdGVkT3JkZXJlZFNldCIsImV4dHJhY3QiLCJpdGVtc18iLCJjYWNoZV8iLCJTZXQiLCJvblN1Ykxpc3RBZGRfIiwib25TdWJMaXN0UmVtb3ZlXyIsImV4dHJhY3RfIiwiaXRlbXMiLCJhbGxJdGVtcyIsImhhcyIsIm9wdF9pbmRleCIsInNob3VsZE5ldmVySGFwcGVuIiwic3BsaWNlIiwic3ViTGlzdCIsInJvb3QiLCJkZWxldGUiLCJvZmYiLCJJbnB1dEJpbmRpbmdBcGkiLCJvbkJpbmRpbmdDaGFuZ2VfIiwiZW1pdHRlcl8iLCJiaW5kaW5nIiwiSW5wdXRCaW5kaW5nQ29udHJvbGxlciIsIk1vbml0b3JCaW5kaW5nQXBpIiwib25CaW5kaW5nVXBkYXRlXyIsIk1vbml0b3JCaW5kaW5nQ29udHJvbGxlciIsInRpY2tlciIsImRpc3Bvc2UiLCJmaW5kU3ViQmxhZGVBcGlTZXQiLCJSYWNrQXBpIiwiZ2V0QXBpQnlDb250cm9sbGVyIiwiYXBpU2V0IiwiZmluZCIsImNyZWF0ZUJpbmRpbmdUYXJnZXQiLCJwb29sIiwib25SYWNrQWRkXyIsIm9uUmFja1JlbW92ZV8iLCJvblJhY2tJbnB1dENoYW5nZV8iLCJvblJhY2tNb25pdG9yVXBkYXRlXyIsImFwaVNldF8iLCJwb29sXyIsInJhY2siLCJiYyIsInNldFVwQXBpXyIsIm9wdF9wYXJhbXMiLCJjcmVhdGVJbnB1dCIsIm93bmVyRG9jdW1lbnQiLCJjcmVhdGVNb25pdG9yIiwiYWRkQmxhZGUiLCJhZGRGb2xkZXJBc0JsYWRlIiwiYWRkQnV0dG9uQXNCbGFkZSIsImFkZFNlcGFyYXRvckFzQmxhZGUiLCJhZGRUYWJBc0JsYWRlIiwiZ2FwaSIsImNyZWF0ZUJsYWRlQXBpIiwiYmxhZGVDb250cm9sbGVyIiwiaXNSb290IiwiRm9sZGVyQXBpIiwicmFja0NvbnRyb2xsZXIiLCJhZGRJbnB1dCIsImFkZE1vbml0b3IiLCJhZGRGb2xkZXIiLCJhZGRCdXR0b24iLCJhZGRTZXBhcmF0b3IiLCJhZGRUYWIiLCJSYWNrTGlrZUNvbnRyb2xsZXIiLCJQbGFpblZpZXciLCJmaW5kU3ViUmFjayIsIlJhY2tDb250cm9sbGVyIiwiZmluZFN1YkJsYWRlQ29udHJvbGxlclNldCIsIkJsYWRlUmFjayIsIm9uQmxhZGVQb3NpdGlvbnNDaGFuZ2VfIiwib25TZXRBZGRfIiwib25TZXRSZW1vdmVfIiwib25DaGlsZERpc3Bvc2VfIiwib25DaGlsZFBvc2l0aW9uc0NoYW5nZV8iLCJvbkNoaWxkSW5wdXRDaGFuZ2VfIiwib25DaGlsZE1vbml0b3JVcGRhdGVfIiwib25DaGlsZFZhbHVlQ2hhbmdlXyIsIm9uQ2hpbGRWaWV3UHJvcHNDaGFuZ2VfIiwib25EZXNjZW5kYW50TGF5b3V0XyIsIm9uRGVzY2VuZGFudElucHV0Q2hhbmdlXyIsIm9uRGVzY2VuZGFudE1vbml0b3JVcGRhdGVfIiwiYmxhZGVfIiwiYmNTZXRfIiwiY29udHJvbGxlckNsYXNzIiwidXBkYXRlUG9zaXRpb25zXyIsInZpc2libGVJdGVtcyIsImZpcnN0VmlzaWJsZUl0ZW0iLCJsYXN0VmlzaWJsZUl0ZW0iLCJwcyIsIl9ldiIsImJjcyIsImZpbmRJbnB1dEJpbmRpbmdDb250cm9sbGVyIiwiZmluZE1vbml0b3JCaW5kaW5nQ29udHJvbGxlciIsImZpbmRWYWx1ZUJsYWRlQ29udHJvbGxlciIsIl8iLCJibGFkZUNvbnRhaW5lckNsYXNzTmFtZSIsIkZvbGRlclZpZXciLCJjbGFzc05hbWVfIiwiZm9sZGFibGVfIiwiYmluZEV4cGFuZGVkQ2xhc3MiLCJ0aXRsZUVsZW1lbnQiLCJtYXJrRWxlbSIsImNvbnRhaW5lckVsZW0iLCJGb2xkZXJDb250cm9sbGVyIiwiY3JlYXRlIiwicmMiLCJvblRpdGxlQ2xpY2tfIiwiRm9sZGVyQmxhZGVQbHVnaW4iLCJMYWJlbGVkVmFsdWVDb250cm9sbGVyIiwiU2VwYXJhdG9yQXBpIiwiY2xhc3NOYW1lJG4iLCJTZXBhcmF0b3JWaWV3IiwiaHJFbGVtIiwiU2VwYXJhdG9yQ29udHJvbGxlciIsIlNlcGFyYXRvckJsYWRlUGx1Z2luIiwiY2xhc3NOYW1lJG0iLCJ2YWx1ZVRvTW9kaWZpZXIiLCJtb2RpZmllciIsIlZpZXdQcm9wcyIsIm9wdF9pbml0aWFsVmFsdWUiLCJfYiIsImNvcmVPYmoiLCJkaXNwb3NlZCIsInRhYkluZGV4IiwiY2xhc3NOYW1lJGwiLCJUYWJJdGVtVmlldyIsInNlbGVjdGVkIiwiVGFiSXRlbUNvbnRyb2xsZXIiLCJUYWJQYWdlQ29udHJvbGxlciIsIm9uSXRlbUNsaWNrXyIsImljXyIsIml0ZW1Qcm9wcyIsImNjXyIsIml0ZW1Db250cm9sbGVyIiwiY29udGVudENvbnRyb2xsZXIiLCJUYWJQYWdlQXBpIiwiY29udGVudFJhY2tBcGkiLCJUYWJBcGkiLCJvblBhZ2VBZGRfIiwib25QYWdlUmVtb3ZlXyIsInBhZ2VBcGlNYXBfIiwiTWFwIiwicGFnZVNldCIsInBjIiwic2V0VXBQYWdlQXBpXyIsInBhZ2VzIiwiY2xhc3NOYW1lJGsiLCJUYWJWaWV3IiwiZW1wdHkiLCJpdGVtc0VsZW0iLCJpdGVtc0VsZW1lbnQiLCJjb250ZW50c0VsZW0iLCJjb250ZW50c0VsZW1lbnQiLCJUYWJDb250cm9sbGVyIiwiY3IiLCJvblBhZ2VTZWxlY3RlZENoYW5nZV8iLCJwYWdlU2V0XyIsImVtcHR5XyIsImFwcGx5UGFnZXNfIiwia2VlcFNlbGVjdGlvbl8iLCJmaXJzdFNlbEluZGV4IiwiZmluZEluZGV4IiwiVGFiQmxhZGVQbHVnaW4iLCJNYW51YWxUaWNrZXIiLCJJbnRlcnZhbFRpY2tlciIsImludGVydmFsIiwiZGlzYWJsZWRfIiwidGltZXJJZF8iLCJvblRpY2tfIiwiZG9jXyIsImludGVydmFsXyIsInNldFRpbWVyXyIsImluYWN0aXZlIiwiY2xlYXJUaW1lcl8iLCJ3aW4iLCJkZWZhdWx0VmlldyIsImNsZWFySW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsIkNvbXBvc2l0ZUNvbnN0cmFpbnQiLCJjb25zdHJhaW50cyIsImZpbmRDb25zdHJhaW50IiwiY29uc3RyYWludENsYXNzIiwidG1wUmVzdWx0Iiwic2MiLCJMaXN0Q29uc3RyYWludCIsIlJhbmdlQ29uc3RyYWludCIsIm1heFZhbHVlIiwibWluVmFsdWUiLCJTdGVwQ29uc3RyYWludCIsInN0ZXAiLCJyb3VuZCIsImNsYXNzTmFtZSRqIiwiTGlzdFZpZXciLCJvblZhbHVlQ2hhbmdlXyIsInByb3BzXyIsInNlbGVjdEVsZW0iLCJvcHRpb25FbGVtIiwiZGF0YXNldCIsInNlbGVjdEVsZW1lbnQiLCJ1cGRhdGVfIiwiTGlzdENvbnRyb2xsZXIiLCJvblNlbGVjdENoYW5nZV8iLCJvcHRFbGVtIiwiY3VycmVudFRhcmdldCIsInNlbGVjdGVkT3B0aW9ucyIsIml0ZW1JbmRleCIsImNsYXNzTmFtZSRpIiwiUG9wdXBWaWV3Iiwic2hvd3MiLCJQb3B1cENvbnRyb2xsZXIiLCJjbGFzc05hbWUkaCIsIlRleHRWaWV3Iiwib25DaGFuZ2VfIiwiaW5wdXRFbGVtIiwiaW5wdXRFbGVtZW50IiwicmVmcmVzaCIsImZvcm1hdHRlciIsIlRleHRDb250cm9sbGVyIiwib25JbnB1dENoYW5nZV8iLCJwYXJzZXJfIiwicGFyc2VkVmFsdWUiLCJib29sRnJvbVVua25vd24iLCJCb29sZWFuRm9ybWF0dGVyIiwiYm9vbFRvU3RyaW5nIiwiTnVtYmVyTGl0ZXJhbE5vZGUiLCJCSU5BUllfT1BFUkFUSU9OX01BUCIsIioqIiwiKiIsIi8iLCIlIiwiKyIsIi0iLCI8PCIsIj4+IiwiPj4+IiwiJiIsIl4iLCJ8IiwiQmluYXJ5T3BlcmF0aW9uTm9kZSIsIm9wZXJhdG9yIiwibGVmdCIsInJpZ2h0Iiwib3AiLCJldmFsdWF0ZSIsIlVOQVJZX09QRVJBVElPTl9NQVAiLCJ+IiwiVW5hcnlPcGVyYXRpb25Ob2RlIiwiZXhwciIsImV4cHJlc3Npb24iLCJjb21iaW5lUmVhZGVyIiwicGFyc2VycyIsImN1cnNvciIsInJlYWRXaGl0ZXNwYWNlIiwibWF0Y2giLCJyZWFkRGVjaW1hbERpZ2l0cyIsInJlYWRFeHBvbmVudFBhcnQiLCJzaSIsImRzIiwic2lnbiIsInNkcyIsInJlYWRTaWduZWRJbnRlZ2VyIiwicmVhZERlY2ltYWxJbnRlZ2VyTGl0ZXJhbCIsImNoIiwibnpkIiwicmVhZE5vblplcm9EaWdpdCIsInJlYWREZWNpbWFsTGl0ZXJhbCIsImRpbCIsImRvdCIsImRkcyIsInJlYWROb25EZWNpbWFsSW50ZWdlckxpdGVyYWwiLCJwcmVmaXgiLCJiZHMiLCJwYXJzZUJpbmFyeURpZ2l0cyIsIm9kcyIsInJlYWRPY3RhbERpZ2l0cyIsImhkcyIsInJlYWRIZXhEaWdpdHMiLCJyZWFkTnVtZXJpY0xpdGVyYWwiLCJwYXJzZVByaW1hcnlFeHByZXNzaW9uIiwiZXZhbHVhYmxlIiwicGFyc2VMaXRlcmFsIiwicGFyc2VFeHByZXNzaW9uIiwiY2wiLCJwYXJzZVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uIiwicmVhZEJpbmFyeU9wZXJhdG9yIiwib3BzIiwic3RhcnRzV2l0aCIsInBhcnNlQmluYXJ5T3BlcmF0aW9uRXhwcmVzc2lvbiIsImV4cHJQYXJzZXIiLCJmaXJzdEV4cHIiLCJuZXh0RXhwciIsImNyZWF0ZUJpbmFyeU9wZXJhdGlvbkV4cHJlc3Npb25QYXJzZXIiLCJwYXJzZVVuYXJ5RXhwcmVzc2lvbiIsInBhcnNlTnVtYmVyIiwicGFyc2VFY21hTnVtYmVyRXhwcmVzc2lvbiIsIm51bWJlckZyb21Vbmtub3duIiwicHYiLCJudW1iZXJUb1N0cmluZyIsImNyZWF0ZU51bWJlckZvcm1hdHRlciIsImRpZ2l0cyIsInRvRml4ZWQiLCJpbm5lckZvcm1hdHRlciIsImZvcm1hdFBlcmNlbnRhZ2UiLCJzdHJpbmdGcm9tVW5rbm93biIsImZvcm1hdFN0cmluZyIsImZpbGxCdWZmZXIiLCJidWZmZXJTaXplIiwiaW5pdGlhbGl6ZUJ1ZmZlciIsImNyZWF0ZVRyaW1tZWRCdWZmZXIiLCJjb25uZWN0VmFsdWVzIiwicHJpbWFyeSIsInNlY29uZGFyeSIsImZvcndhcmQiLCJiYWNrd2FyZCIsImNoYW5naW5nIiwicHJldmVudEZlZWRiYWNrIiwiZ2V0U3RlcEZvcktleSIsImJhc2VTdGVwIiwiYWx0S2V5Iiwic2hpZnRLZXkiLCJ1cEtleSIsImRvd25LZXkiLCJnZXRWZXJ0aWNhbFN0ZXBLZXlzIiwiZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzIiwiaXNBcnJvd0tleSIsImlzVmVydGljYWxBcnJvd0tleSIsImNvbXB1dGVPZmZzZXQkMSIsInJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJwYWdlWCIsInNjcm9sbFgiLCJwYWdlWSIsInNjcm9sbFkiLCJ0b3AiLCJQb2ludGVySGFuZGxlciIsImxhc3RUb3VjaF8iLCJvbkRvY3VtZW50TW91c2VNb3ZlXyIsIm9uRG9jdW1lbnRNb3VzZVVwXyIsIm9uTW91c2VEb3duXyIsIm9uVG91Y2hFbmRfIiwib25Ub3VjaE1vdmVfIiwib25Ub3VjaFN0YXJ0XyIsImVsZW1fIiwicGFzc2l2ZSIsImJvdW5kcyIsIndpZHRoIiwicG9pbnQiLCJwcmV2ZW50RGVmYXVsdCIsImZvY3VzIiwiY29tcHV0ZVBvc2l0aW9uXyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ0b3VjaCIsInRhcmdldFRvdWNoZXMiLCJjbGllbnRYIiwiY2xpZW50WSIsIm1hcFJhbmdlIiwic3RhcnQxIiwiZW5kMSIsInN0YXJ0MiIsImVuZDIiLCJnZXREZWNpbWFsRGlnaXRzIiwiY29uc3RyYWluUmFuZ2UiLCJsb29wUmFuZ2UiLCJjbGFzc05hbWUkZyIsIk51bWJlclRleHRWaWV3IiwiYXJyYXlQb3NpdGlvbiIsIm9uRHJhZ2dpbmdDaGFuZ2VfIiwiZHJhZ2dpbmdfIiwiZHJhZ2dpbmciLCJrbm9iRWxlbSIsImtub2JFbGVtZW50IiwiZ3VpZGVFbGVtIiwiYm9keUVsZW0iLCJndWlkZUJvZHlFbGVtXyIsImhlYWRFbGVtIiwiZ3VpZGVIZWFkRWxlbV8iLCJ0b29sdGlwRWxlbSIsInRvb2x0aXBFbGVtXyIsImFveCIsImFkeCIsInNldEF0dHJpYnV0ZU5TIiwiTnVtYmVyVGV4dENvbnRyb2xsZXIiLCJvcmlnaW5SYXdWYWx1ZV8iLCJvbklucHV0S2V5RG93bl8iLCJvbklucHV0S2V5VXBfIiwib25Qb2ludGVyRG93bl8iLCJvblBvaW50ZXJNb3ZlXyIsIm9uUG9pbnRlclVwXyIsImJhc2VTdGVwXyIsInBoIiwiY29tcHV0ZURyYWdnaW5nVmFsdWVfIiwiY2xhc3NOYW1lJGYiLCJTbGlkZXJWaWV3IiwidHJhY2tFbGVtIiwiYmluZFRhYkluZGV4IiwidHJhY2tFbGVtZW50IiwiU2xpZGVyQ29udHJvbGxlciIsIm9uS2V5RG93bl8iLCJvbktleVVwXyIsIm9uUG9pbnRlckRvd25Pck1vdmVfIiwicHRIYW5kbGVyXyIsImhhbmRsZVBvaW50ZXJFdmVudF8iLCJjbGFzc05hbWUkZSIsIlNsaWRlclRleHRWaWV3Iiwic2xpZGVyRWxlbSIsInNsaWRlclZpZXdfIiwic2xpZGVyVmlldyIsInRleHRFbGVtIiwidGV4dFZpZXdfIiwidGV4dFZpZXciLCJTbGlkZXJUZXh0Q29udHJvbGxlciIsInNsaWRlckNfIiwic2xpZGVyUHJvcHMiLCJ0ZXh0Q18iLCJ0ZXh0UHJvcHMiLCJzbGlkZXJDb250cm9sbGVyIiwidGV4dENvbnRyb2xsZXIiLCJ3cml0ZVByaW1pdGl2ZSIsInBhcnNlTGlzdE9wdGlvbnMiLCJwYXJzZVBpY2tlckxheW91dCIsInBhcnNlUG9pbnREaW1lbnNpb25QYXJhbXMiLCJub3JtYWxpemVMaXN0T3B0aW9ucyIsImNyZWF0ZUxpc3RDb25zdHJhaW50IiwiZmluZExpc3RJdGVtcyIsImdldFN1aXRhYmxlRGVjaW1hbERpZ2l0cyIsImdldEJhc2VTdGVwIiwiZmluZFN0ZXAiLCJnZXRTdWl0YWJsZURyYWdnaW5nU2NhbGUiLCJiYXNlIiwibG9nMTAiLCJjbGFzc05hbWUkZCIsIkNoZWNrYm94VmlldyIsIndyYXBwZXJFbGVtIiwiQ2hlY2tib3hDb250cm9sbGVyIiwiQm9vbGVhbklucHV0UGx1Z2luIiwiYWNjZXB0IiwicmVhZGVyIiwiX2FyZ3MiLCJsYyIsImNyZWF0ZUNvbnN0cmFpbnQkNSIsIndyaXRlciIsImNsYXNzTmFtZSRjIiwiQ29sb3JWaWV3Iiwic3dhdGNoRWxlbSIsInN3YXRjaEVsZW1lbnQiLCJ0ZXh0RWxlbWVudCIsInBpY2tlckxheW91dCIsInBpY2tlckVsZW0iLCJwaWNrZXJFbGVtZW50IiwiaHN2VG9SZ2IiLCJoIiwiaHAiLCJzcCIsInZwIiwicnAiLCJncCIsImJwIiwicmVtb3ZlQWxwaGFDb21wb25lbnQiLCJjb21wcyIsImFwcGVuZEFscGhhQ29tcG9uZW50IiwiYWxwaGEiLCJNT0RFX0NPTlZFUlRFUl9NQVAiLCJoc2wiLCJsIiwiaHN2Iiwic2QiLCJyZ2IiLCJscCIsImciLCJjbWF4IiwiY21pbiIsIkNPTlNUUkFJTlRfTUFQIiwiaXNSZ2JDb2xvckNvbXBvbmVudCIsIkNvbG9yIiwibW9kZSIsIm1vZGVfIiwiY29tcHNfIiwiY29sb3IiLCJ0b1JnYmFPYmplY3QiLCJpc1JnYkNvbG9yT2JqZWN0IiwiY29tcHMxIiwiY29tcHMyIiwib3B0X21vZGUiLCJjb21wb25lbnRzIiwicmdiQ29tcHMiLCJnZXRDb21wb25lbnRzIiwiY2xhc3NOYW1lJGIiLCJDb2xvclBpY2tlclZpZXciLCJhbHBoYVZpZXdzXyIsImhzdkVsZW0iLCJzdkVsZW0iLCJzdlBhbGV0dGVWaWV3XyIsInN2UGFsZXR0ZVZpZXciLCJoRWxlbSIsImhQYWxldHRlVmlld18iLCJoUGFsZXR0ZVZpZXciLCJyZ2JFbGVtIiwiYWxwaGFWaWV3cyIsInBhbGV0dGUiLCJhRWxlbSIsImFwRWxlbSIsImF0RWxlbSIsImFsbEZvY3VzYWJsZUVsZW1lbnRzIiwiZWxlbXMiLCJtb2RlU2VsZWN0RWxlbWVudCIsInRleHRWaWV3cyIsInBhcnNlQ29sb3JJbnB1dFBhcmFtcyIsInBpY2tlciIsImdldEJhc2VTdGVwRm9yQ29sb3IiLCJmb3JBbHBoYSIsInBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlIiwicGFyc2VGbG9hdCIsIkFOR0xFX1RPX0RFR19NQVAiLCJkZWciLCJhbmdsZSIsImdyYWQiLCJyYWQiLCJQSSIsInR1cm4iLCJwYXJzZUNzc051bWJlck9yQW5nbGUiLCJOT1RBVElPTl9UT19QQVJTRVJfTUFQIiwiZnVuYy5yZ2IiLCJmdW5jLnJnYmEiLCJmdW5jLmhzbCIsImZ1bmMuaHNsYSIsImhleC5yZ2IiLCJtUmdiIiwibVJyZ2diYiIsImhleC5yZ2JhIiwiZ2V0Q29sb3JOb3RhdGlvbiIsIm5vdGF0aW9uIiwic3VicGFyc2VyIiwiQ29tcG9zaXRlQ29sb3JQYXJzZXIiLCJoYXNBbHBoYUNvbXBvbmVudCIsInplcm9maWxsIiwiY29tcCIsImhleCIsImNvbG9yVG9IZXhSZ2JTdHJpbmciLCJjb2xvclRvSGV4UmdiYVN0cmluZyIsInJnYmFDb21wcyIsImNvbG9yVG9GdW5jdGlvbmFsUmdiU3RyaW5nIiwiY29sb3JUb0Z1bmN0aW9uYWxSZ2JhU3RyaW5nIiwiYUZvcm1hdHRlciIsInJnYkZvcm1hdHRlciIsIk5PVEFUSU9OX1RPX1NUUklOR0lGSUVSX01BUCIsImZvcm1hdHRlcnMiLCJnZXRDb2xvclN0cmluZ2lmaWVyIiwiY2xhc3NOYW1lJGEiLCJBUGFsZXR0ZVZpZXciLCJiYXJFbGVtIiwiY29sb3JFbGVtIiwiY29sb3JFbGVtXyIsIm1hcmtlckVsZW0iLCJtYXJrZXJFbGVtXyIsInByZXZpZXdFbGVtIiwicHJldmlld0VsZW1fIiwibGVmdENvbG9yIiwicmlnaHRDb2xvciIsImdyYWRpZW50Q29tcHMiLCJiYWNrZ3JvdW5kIiwiYmFja2dyb3VuZENvbG9yIiwiQVBhbGV0dGVDb250cm9sbGVyIiwiY2xhc3NOYW1lJDkiLCJDb2xvclRleHRWaWV3IiwibW9kZUVsZW0iLCJtb2RlRWxlbV8iLCJjcmVhdGVNb2RlU2VsZWN0RWxlbWVudCIsIm1vZGVNYXJrZXJFbGVtIiwidGV4dHNFbGVtIiwidGV4dHNFbGVtXyIsInRleHRWaWV3c18iLCJhcHBseVRleHRWaWV3c18iLCJjb2xvck1vZGUiLCJjb21wRWxlbSIsIkZPUk1BVFRFUiIsIk1PREVfVE9fQ09OU1RSQUlOVF9NQVAiLCJjcmVhdGVDb21wb25lbnRDb250cm9sbGVyIiwiZHJhZ2dpbmdTY2FsZSIsIkNvbG9yVGV4dENvbnRyb2xsZXIiLCJvbk1vZGVTZWxlY3RDaGFuZ2VfIiwiY2NzXyIsImNyZWF0ZUNvbXBvbmVudENvbnRyb2xsZXJzXyIsImNjIiwiY2NzIiwiY3MiLCJwaWNrZWRNb2RlIiwiY2xhc3NOYW1lJDgiLCJIUGFsZXR0ZVZpZXciLCJIUGFsZXR0ZUNvbnRyb2xsZXIiLCJodWUiLCJjbGFzc05hbWUkNyIsIkNBTlZBU19SRVNPTCIsIlN2UGFsZXR0ZVZpZXciLCJjYW52YXNFbGVtIiwiY2FudmFzRWxlbWVudCIsImN0eCIsImdldENvbnRleHQiLCJnZXRDYW52YXNDb250ZXh0IiwiaHN2Q29tcHMiLCJpbWdEYXRhIiwiZ2V0SW1hZ2VEYXRhIiwiaXkiLCJpeCIsInB1dEltYWdlRGF0YSIsIlN2UGFsZXR0ZUNvbnRyb2xsZXIiLCJzYXR1cmF0aW9uIiwiZHYiLCJDb2xvclBpY2tlckNvbnRyb2xsZXIiLCJoUGFsZXR0ZUNfIiwic3ZQYWxldHRlQ18iLCJhbHBoYUljc18iLCJzdXBwb3J0c0FscGhhIiwiY2xhc3NOYW1lJDYiLCJDb2xvclN3YXRjaFZpZXciLCJzd2F0Y2hFbGVtXyIsIkNvbG9yU3dhdGNoQ29udHJvbGxlciIsIkNvbG9yQ29udHJvbGxlciIsIm9uQnV0dG9uQmx1cl8iLCJvbkJ1dHRvbkNsaWNrXyIsIm9uUG9wdXBDaGlsZEJsdXJfIiwib25Qb3B1cENoaWxkS2V5ZG93bl8iLCJzd2F0Y2hDXyIsInBvcENfIiwicGlja2VyQyIsInBpY2tlckNfIiwibmV4dFRhcmdldCIsImNvbnRhaW5zIiwiY29sb3JUb1JnYk51bWJlciIsImNvbG9yVG9SZ2JhTnVtYmVyIiwiY29sb3JGcm9tUmdiTnVtYmVyIiwiYmxhY2siLCJjb2xvckZyb21SZ2JhTnVtYmVyIiwid3JpdGVSZ2JhQ29sb3JPYmplY3QiLCJ3cml0ZVByb3BlcnR5Iiwid3JpdGVSZ2JDb2xvck9iamVjdCIsInNob3VsZFN1cHBvcnRBbHBoYSQxIiwiaW5wdXRQYXJhbXMiLCJjcmVhdGVGb3JtYXR0ZXIkMSIsIk51bWJlckNvbG9ySW5wdXRQbHVnaW4iLCJjb2xvclRvTnVtYmVyIiwiY3JlYXRlQ29sb3JOdW1iZXJXcml0ZXIiLCJPYmplY3RDb2xvcklucHV0UGx1Z2luIiwiaXNDb2xvck9iamVjdCIsImNyZWF0ZUNvbG9yT2JqZWN0V3JpdGVyIiwiaXNSZ2JhQ29sb3JPYmplY3QiLCJzaG91bGRTdXBwb3J0QWxwaGEiLCJTdHJpbmdDb2xvcklucHV0UGx1Z2luIiwiY3YiLCJjcmVhdGVDb2xvclN0cmluZ1dyaXRlciIsInN0cmluZ2lmaWVyIiwiUG9pbnROZENvbnN0cmFpbnQiLCJhc21fIiwiYXNzZW1ibHkiLCJ0b0NvbXBvbmVudHMiLCJmcm9tQ29tcG9uZW50cyIsImNsYXNzTmFtZSQ1IiwiUG9pbnROZFRleHRWaWV3IiwiYXhpc0VsZW0iLCJQb2ludE5kVGV4dENvbnRyb2xsZXIiLCJhY3NfIiwiYXhlcyIsImNyZWF0ZUF4aXNDb250cm9sbGVyIiwiYWMiLCJjcmVhdGVDb25zdHJhaW50JDQiLCJjcmVhdGVTdGVwQ29uc3RyYWludCIsImNyZWF0ZVJhbmdlQ29uc3RyYWludCIsImVzdGltYXRlU3VpdGFibGVSYW5nZSIsImZpbmRSYW5nZSIsIk51bWJlcklucHV0UGx1Z2luIiwiZm9ybWF0IiwiUG9pbnQyZCIsIlBvaW50MmRBc3NlbWJseSIsImNsYXNzTmFtZSQ0IiwiUG9pbnQyZFZpZXciLCJjbGFzc05hbWUkMyIsIlBvaW50MmRQaWNrZXJWaWV3Iiwib25Gb2xkYWJsZUNoYW5nZV8iLCJpbnZlcnRzWV8iLCJpbnZlcnRzWSIsIm1heFZhbHVlXyIsImxheW91dCIsInBhZEVsZW0iLCJwYWRFbGVtZW50Iiwic3ZnRWxlbSIsInN2Z0VsZW1fIiwieEF4aXNFbGVtIiwieUF4aXNFbGVtIiwibGluZUVsZW0iLCJsaW5lRWxlbV8iLCJweCIsInB5IiwiaXB5IiwiY29tcHV0ZU9mZnNldCIsImJhc2VTdGVwcyIsIlBvaW50MmRQaWNrZXJDb250cm9sbGVyIiwib25QYWRLZXlEb3duXyIsIm9uUGFkS2V5VXBfIiwiYmFzZVN0ZXBzXyIsImR4IiwiZHkiLCJQb2ludDJkQ29udHJvbGxlciIsIm9uUGFkQnV0dG9uQmx1cl8iLCJvblBhZEJ1dHRvbkNsaWNrXyIsInBhZEMiLCJjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50JDIiLCJnZXRTdWl0YWJsZU1heERpbWVuc2lvblZhbHVlIiwiZ2V0U3VpdGFibGVNYXhWYWx1ZSIsInljIiwieHIiLCJ5ciIsImNyZWF0ZUF4aXMkMiIsInNob3VsZEludmVydFkiLCJ5UGFyYW1zIiwiaW52ZXJ0ZWQiLCJQb2ludDJkSW5wdXRQbHVnaW4iLCJjcmVhdGVDb25zdHJhaW50JDMiLCJQb2ludDNkIiwieiIsIlBvaW50M2RBc3NlbWJseSIsImNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQkMSIsImNyZWF0ZUF4aXMkMSIsIlBvaW50M2RJbnB1dFBsdWdpbiIsImNyZWF0ZUNvbnN0cmFpbnQkMiIsIlBvaW50NGQiLCJ3IiwiUG9pbnQ0ZEFzc2VtYmx5IiwiY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCIsIlBvaW50NGRJbnB1dFBsdWdpbiIsImNyZWF0ZUNvbnN0cmFpbnQkMSIsImNyZWF0ZUF4aXMiLCJTdHJpbmdJbnB1dFBsdWdpbiIsImNyZWF0ZUNvbnN0cmFpbnQiLCJDb25zdGFudHMiLCJtb25pdG9yIiwiZGVmYXVsdEludGVydmFsIiwiZGVmYXVsdExpbmVDb3VudCIsImNsYXNzTmFtZSQyIiwiTXVsdGlMb2dWaWV3Iiwib25WYWx1ZVVwZGF0ZV8iLCJmb3JtYXR0ZXJfIiwidGV4dGFyZWFFbGVtIiwibGluZUNvdW50IiwicmVhZE9ubHkiLCJ0ZXh0YXJlYUVsZW1fIiwic2hvdWxkU2Nyb2xsIiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwibGluZXMiLCJNdWx0aUxvZ0NvbnRyb2xsZXIiLCJjbGFzc05hbWUkMSIsIlNpbmdsZUxvZ1ZpZXciLCJ2YWx1ZXMiLCJsYXN0VmFsdWUiLCJTaW5nbGVMb2dDb250cm9sbGVyIiwiQm9vbGVhbk1vbml0b3JQbHVnaW4iLCJHcmFwaEN1cnNvciIsImluZGV4XyIsIkdyYXBoTG9nVmlldyIsIm9uQ3Vyc29yQ2hhbmdlXyIsIm1pblZhbHVlXyIsImN1cnNvcl8iLCJncmFwaEVsZW1lbnQiLCJtYXhJbmRleCIsInBvaW50cyIsInR4IiwidHkiLCJHcmFwaExvZ0NvbnRyb2xsZXIiLCJvbkdyYXBoTW91c2VNb3ZlXyIsIm9uR3JhcGhNb3VzZUxlYXZlXyIsIm9uR3JhcGhQb2ludGVyRG93bl8iLCJvbkdyYXBoUG9pbnRlck1vdmVfIiwib25HcmFwaFBvaW50ZXJVcF8iLCJvZmZzZXRYIiwiY3JlYXRlRm9ybWF0dGVyIiwic2hvdWxkU2hvd0dyYXBoIiwiTnVtYmVyTW9uaXRvclBsdWdpbiIsImRlZmF1bHRCdWZmZXJTaXplIiwiX2MiLCJjcmVhdGVHcmFwaE1vbml0b3IiLCJjcmVhdGVUZXh0TW9uaXRvciIsIlN0cmluZ01vbml0b3JQbHVnaW4iLCJtdWx0aWxpbmUiLCJJbnB1dEJpbmRpbmciLCJ0YXJnZXRWYWx1ZSIsIndyaXRlXyIsIk1vbml0b3JCaW5kaW5nIiwicmVhZGVyXyIsIm5ld1ZhbHVlIiwibmV3QnVmZmVyIiwiY3JlYXRlUHVzaGVkQnVmZmVyIiwiY3JlYXRlVGlja2VyIiwiUGx1Z2luUG9vbCIsInBsdWdpbnNNYXBfIiwiYmxhZGVzIiwiaW5wdXRzIiwibW9uaXRvcnMiLCJ1bnNoaWZ0IiwicGx1Z2luIiwidmFsdWVBcmdzIiwiY3JlYXRlSW5wdXRCaW5kaW5nQ29udHJvbGxlciIsIlAiLCJjcmVhdGVNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIiLCJjcmVhdGVCbGFkZUNvbnRyb2xsZXIiLCJMaXN0QXBpIiwiU2xpZGVyQXBpIiwiVGV4dEFwaSIsIkxpc3RCbGFkZVBsdWdpbiIsImljIiwiUm9vdEFwaSIsInByZXNldCIsInRhcmdldHMiLCJpbXBvcnRQcmVzZXRKc29uIiwiaWJjIiwiZXhwb3J0UHJlc2V0SnNvbiIsIm1iYyIsIlJvb3RDb250cm9sbGVyIiwiU2xpZGVyQmxhZGVQbHVnaW4iLCJ2YyIsIlRleHRCbGFkZVBsdWdpbiIsImVtYmVkU3R5bGUiLCJjc3MiLCJxdWVyeVNlbGVjdG9yIiwic3R5bGVFbGVtIiwidHBTdHlsZSIsImhlYWQiLCJWRVJTSU9OIiwicHJlcmVsZWFzZSIsImNvcmVDb21wcyIsIm1ham9yIiwibWlub3IiLCJwYXRjaCIsIlBhbmUiLCJvcHRfY29uZmlnIiwicmVnaXN0ZXIiLCJjcmVhdGVEZWZhdWx0UGx1Z2luUG9vbCIsImNvbnRhaW5lckVsZW1fIiwiY29udGFpbmVyIiwiYm9keSIsImNyZWF0ZURlZmF1bHRXcmFwcGVyRWxlbWVudCIsInVzZXNEZWZhdWx0V3JhcHBlcl8iLCJzZXRVcERlZmF1bHRQbHVnaW5zXyIsImFscmVhZHlEaXNwb3NlZCIsInBhcmVudEVsZW0iLCJidW5kbGUiLCJwbHVnaW5zIiwiZW1iZWRQbHVnaW5TdHlsZV8iLCJnZXRBbGwiLCJyZWdpc3RlclBsdWdpbiIsImRlZmluZSIsImFtZCIsImdsb2JhbFRoaXMiLCJzZWxmIiwiVHdlYWtwYW5lIiwicGF0aCIsInN0YXJ0WCIsInN0YXJ0WSIsInNlZyIsImNvbW1hbmQiLCJ0b1VwcGVyQ2FzZSIsImNsb25lIiwidmVjMiIsIm9wdCIsIlJFQ1VSU0lPTl9MSU1JVCIsInJlY3Vyc2lvbiIsIkZMVF9FUFNJTE9OIiwiZXBzaWxvbiIsIlBBVEhfRElTVEFOQ0VfRVBTSUxPTiIsInBhdGhFcHNpbG9uIiwiY3VydmVfYW5nbGVfdG9sZXJhbmNlX2Vwc2lsb24iLCJhbmdsZUVwc2lsb24iLCJtX2FuZ2xlX3RvbGVyYW5jZSIsImFuZ2xlVG9sZXJhbmNlIiwibV9jdXNwX2xpbWl0IiwiY3VzcExpbWl0IiwiYzEiLCJjMiIsInNjYWxlIiwiZGlzdGFuY2VUb2xlcmFuY2UiLCJyZWN1cnNpdmUiLCJ4MSIsInkxIiwieDIiLCJ5MiIsIngzIiwieTMiLCJ4NCIsInk0IiwibGV2ZWwiLCJwaSIsIngxMiIsInkxMiIsIngyMyIsInkyMyIsIngzNCIsInkzNCIsIngxMjMiLCJ5MTIzIiwieDIzNCIsInkyMzQiLCJ4MTIzNCIsInkxMjM0IiwiZGExIiwiZGEyIiwiZDIiLCJkMyIsImEyMyIsImF0YW4yIiwiYmVnaW4iLCJhbG1vc3RFcXVhbCIsImFic29sdXRlRXJyb3IiLCJyZWxhdGl2ZUVycm9yIiwiREJMX0VQU0lMT04iLCJCWVRFU19QRVJfRUxFTUVOVCIsImFsbW9zdCIsImFic29sdXRlVG9sZXJhbmNlIiwicmVsYXRpdmVUb2xlcmFuY2UiLCJldmVyeSIsImEwIiwiYjAiLCJjc3NDb2xvciIsIm5hbWVzIiwicmdiTHVtaW5hbmNlIiwiSFNMVXRpbCIsImhleFRvUkdCQSIsIlJHQkFUb0hleCIsInJlbGF0aXZlTHVtaW5hbmNlIiwiY29udHJhc3RSYXRpbyIsImNvbG9yQSIsImNvbG9yQiIsIm9mZnNldEhTTCIsImhzbGEiLCJibGVuZCIsImZvcmVncm91bmQiLCJvcGFjaXR5IiwiYmciLCJmZyIsImMwIiwicmdiYSIsIlJHQkFUb0hTTEEiLCJIU0xBVG9SR0JBIiwibGluZWNsaXAiLCJhcnJheUFsbW9zdEVxdWFsIiwic3F1YXJlZERpc3RhbmNlIiwiYXJlUG9pbnRzQ29sbGluZWFyIiwicG9pbnQwIiwicG9pbnQxIiwicG9pbnQyIiwieDAiLCJ5MCIsInJlbW92ZUR1cGxpY2F0ZVBvaW50cyIsImxhc3RQb2ludCIsIm5ld1BhdGgiLCJjdXJQb2ludCIsInJlbW92ZUNvbGxpbmVhclBvaW50cyIsInJlbWFpbmluZ1BvaW50cyIsInAwIiwicDEiLCJwMiIsImNvbGxpbmVhciIsInNoaWZ0IiwiY2xpcFNlZ21lbnRUb0NpcmNsZSIsImNsaXBMaW5lVG9DaXJjbGUiLCJjbGlwUG9seWxpbmVzVG9Cb3giLCJwb2x5bGluZXMiLCJiYm94IiwiYm9yZGVyIiwiY2xvc2VMaW5lcyIsIkJvb2xlYW4iLCJwb2x5Z29uIiwicG9seWxpbmUiLCJjcmVhdGVIYXRjaExpbmVzIiwic3BhY2luZyIsInhtaW4iLCJ5bWluIiwieG1heCIsInltYXgiLCJzcXJ0Iiwicm90QW5nbGUiLCJjYSIsImNvcyIsInNhIiwic2luIiwiY3giLCJjeSIsImdldEJvdW5kcyIsImxvIiwicmFuZG9tIiwibWF0aCIsInBlbnBsb3QiLCJnZW9tZXRyeSIsInNoYWRlciIsInNxciIsImNpcmNsZSIsImNpcmNsZVJhZGl1cyIsImhpdHMiLCJkZWx0YSIsImRldCIsInNxcnREZXQiLCJwb2ludEluQ2lyY2xlIiwicmFkaXVzIiwiZGlzdGFuY2UiLCJwcm9qZWN0UG9pbnQiLCJzcmN4Iiwic3JjeSIsImRlc3R4IiwiZGVzdHkiLCJkaXN0IiwiY2xvc2VzdFBvaW50IiwicDFJbkNpcmNsZSIsInAySW5DaXJjbGUiLCJ2eCIsInZ5IiwicmF0aW8iLCJjbG9zZXN0UG9pbnRPbkxpbmVGcm9tUG9pbnQiLCJoaXRBIiwiaGl0QiIsImNsb3Nlc3RQb2ludE9uU2VnbWVudEZyb21Qb2ludCIsImludGVyc2VjdCIsImFsaWNlYmx1ZSIsImFudGlxdWV3aGl0ZSIsImFxdWEiLCJhcXVhbWFyaW5lIiwiYXp1cmUiLCJiZWlnZSIsImJpc3F1ZSIsImJsYW5jaGVkYWxtb25kIiwiYmx1ZSIsImJsdWV2aW9sZXQiLCJicm93biIsImJ1cmx5d29vZCIsImNhZGV0Ymx1ZSIsImNoYXJ0cmV1c2UiLCJjaG9jb2xhdGUiLCJjb3JhbCIsImNvcm5mbG93ZXJibHVlIiwiY29ybnNpbGsiLCJjcmltc29uIiwiY3lhbiIsImRhcmtibHVlIiwiZGFya2N5YW4iLCJkYXJrZ29sZGVucm9kIiwiZGFya2dyYXkiLCJkYXJrZ3JlZW4iLCJkYXJrZ3JleSIsImRhcmtraGFraSIsImRhcmttYWdlbnRhIiwiZGFya29saXZlZ3JlZW4iLCJkYXJrb3JhbmdlIiwiZGFya29yY2hpZCIsImRhcmtyZWQiLCJkYXJrc2FsbW9uIiwiZGFya3NlYWdyZWVuIiwiZGFya3NsYXRlYmx1ZSIsImRhcmtzbGF0ZWdyYXkiLCJkYXJrc2xhdGVncmV5IiwiZGFya3R1cnF1b2lzZSIsImRhcmt2aW9sZXQiLCJkZWVwcGluayIsImRlZXBza3libHVlIiwiZGltZ3JheSIsImRpbWdyZXkiLCJkb2RnZXJibHVlIiwiZmlyZWJyaWNrIiwiZmxvcmFsd2hpdGUiLCJmb3Jlc3RncmVlbiIsImZ1Y2hzaWEiLCJnYWluc2Jvcm8iLCJnaG9zdHdoaXRlIiwiZ29sZCIsImdvbGRlbnJvZCIsImdyYXkiLCJncmVlbiIsImdyZWVueWVsbG93IiwiZ3JleSIsImhvbmV5ZGV3IiwiaG90cGluayIsImluZGlhbnJlZCIsImluZGlnbyIsIml2b3J5Iiwia2hha2kiLCJsYXZlbmRlciIsImxhdmVuZGVyYmx1c2giLCJsYXduZ3JlZW4iLCJsZW1vbmNoaWZmb24iLCJsaWdodGJsdWUiLCJsaWdodGNvcmFsIiwibGlnaHRjeWFuIiwibGlnaHRnb2xkZW5yb2R5ZWxsb3ciLCJsaWdodGdyYXkiLCJsaWdodGdyZWVuIiwibGlnaHRncmV5IiwibGlnaHRwaW5rIiwibGlnaHRzYWxtb24iLCJsaWdodHNlYWdyZWVuIiwibGlnaHRza3libHVlIiwibGlnaHRzbGF0ZWdyYXkiLCJsaWdodHNsYXRlZ3JleSIsImxpZ2h0c3RlZWxibHVlIiwibGlnaHR5ZWxsb3ciLCJsaW1lIiwibGltZWdyZWVuIiwibGluZW4iLCJtYWdlbnRhIiwibWFyb29uIiwibWVkaXVtYXF1YW1hcmluZSIsIm1lZGl1bWJsdWUiLCJtZWRpdW1vcmNoaWQiLCJtZWRpdW1wdXJwbGUiLCJtZWRpdW1zZWFncmVlbiIsIm1lZGl1bXNsYXRlYmx1ZSIsIm1lZGl1bXNwcmluZ2dyZWVuIiwibWVkaXVtdHVycXVvaXNlIiwibWVkaXVtdmlvbGV0cmVkIiwibWlkbmlnaHRibHVlIiwibWludGNyZWFtIiwibWlzdHlyb3NlIiwibW9jY2FzaW4iLCJuYXZham93aGl0ZSIsIm5hdnkiLCJvbGRsYWNlIiwib2xpdmUiLCJvbGl2ZWRyYWIiLCJvcmFuZ2UiLCJvcmFuZ2VyZWQiLCJvcmNoaWQiLCJwYWxlZ29sZGVucm9kIiwicGFsZWdyZWVuIiwicGFsZXR1cnF1b2lzZSIsInBhbGV2aW9sZXRyZWQiLCJwYXBheWF3aGlwIiwicGVhY2hwdWZmIiwicGVydSIsInBpbmsiLCJwbHVtIiwicG93ZGVyYmx1ZSIsInB1cnBsZSIsInJlYmVjY2FwdXJwbGUiLCJyZWQiLCJyb3N5YnJvd24iLCJyb3lhbGJsdWUiLCJzYWRkbGVicm93biIsInNhbG1vbiIsInNhbmR5YnJvd24iLCJzZWFncmVlbiIsInNlYXNoZWxsIiwic2llbm5hIiwic2lsdmVyIiwic2t5Ymx1ZSIsInNsYXRlYmx1ZSIsInNsYXRlZ3JheSIsInNsYXRlZ3JleSIsInNub3ciLCJzcHJpbmdncmVlbiIsInN0ZWVsYmx1ZSIsInRhbiIsInRlYWwiLCJ0aGlzdGxlIiwidG9tYXRvIiwidHVycXVvaXNlIiwidmlvbGV0Iiwid2hlYXQiLCJ3aGl0ZSIsIndoaXRlc21va2UiLCJ5ZWxsb3ciLCJ5ZWxsb3dncmVlbiIsIndyYXAiLCJwYXJzZVN0eWxlIiwidGVzdCIsImV4ZWMiLCJyZ2JTdHlsZSIsImhzbFN0eWxlIiwicmdiU3RyIiwicmVwZWF0IiwiZmxvYXRIU0wyUkdCIiwiZmxvYXRSR0IySFNMIiwiZmxvYXRIU0wiLCJmbG9hdFJHQiIsIm1lcmdlUGF0aHMiLCJwYXRocyIsInBhdGgxSWR4IiwicGF0aDJJZHgiLCJtaW5JZHgiLCJtYXhJZHgiLCJtZXJnZWRQYXRoIiwic29ydCIsIm5ld1BhdGhzIiwibGFzdFBhdGgiLCJjdXJQdCIsImNsb3Nlc3QiLCJsYXN0UHQiLCJkaXN0YW5jZVRvRmlyc3QiLCJkaXN0YW5jZVRvTGFzdCIsImlkeCIsInJldmVyc2UiLCJjbG9zZXN0UGF0aCIsIm1lcmdlIiwibWVyZ2VUaHJlaHNvbGQiLCJtZXJnZVRocmVoc29sZFNxIiwiZ2MiLCJsb3djIiwiYWRqdXN0R2FtbWEiLCJyc3JnYiIsImdzcmdiIiwiYnNyZ2IiLCJhbHBoYVBhcmFtIiwicHQxIiwicHQyIiwidG8iLCJjeWNsZSIsImRlZmluZWQiLCJFUFNJTE9OIiwiY2xhbXAiLCJsZXJwIiwiaW52ZXJzZUxlcnAiLCJ0b0Zpbml0ZSIsImRlZmF1bHRWYWx1ZSIsImV4cGFuZFZlY3RvciIsImRpbXMiLCJzY2FsYXIiLCJsZXJwQXJyYXkiLCJuZXdBcnJheSIsIm1vZCIsImRhbXAiLCJsYW1iZGEiLCJkdCIsImV4cCIsImZyYWN0IiwiZGVnVG9SYWQiLCJyYWRUb0RlZyIsInBpbmdQb25nIiwibGluc3BhY2UiLCJlbmRwb2ludCIsImxlcnBGcmFtZXMiLCJ3aG9sZSIsImZyYW1lIiwibmV4dEZyYW1lIiwiY2xhbXAwMSIsInNtb290aHN0ZXAiLCJkYW1wQXJyYXkiLCJpbnB1dE1pbiIsImlucHV0TWF4Iiwib3V0cHV0TWluIiwib3V0cHV0TWF4Iiwib3V0VmFsIiwiZXhwYW5kMkQiLCJleHBhbmQzRCIsImV4cGFuZDREIiwiY29udmVydCIsInN2Z1BhdGhDb250b3VycyIsInN2Z1BhdGhQYXJzZSIsInN2Z1BhdGhBYnMiLCJzdmdQYXRoQXJjcyIsIm9wdGltaXplciIsIkRFRkFVTFRfUEVOX1RISUNLTkVTUyIsIkRFRkFVTFRfUEVOX1RISUNLTkVTU19VTklUIiwiREVGQVVMVF9QSVhFTFNfUEVSX0lOQ0giLCJwYXRoc1RvU1ZHUGF0aHMiLCJzdmdQYXRoIiwiY29udmVydFRvU1ZHUGF0aCIsInBhdGhzVG9Qb2x5bGluZXMiLCJjdXJ2ZVJlc29sdXRpb24iLCJjb250b3VycyIsImVhY2hQYXRoIiwiZmVhdHVyZSIsImNvbW1hbmRzIiwic3ViQ29udG91ciIsInBhdGhzVG9TVkciLCJjb252ZXJ0T3B0aW9ucyIsInZpZXdVbml0cyIsInJvdW5kUGl4ZWwiLCJwcmVjaXNpb24iLCJwaXhlbHNQZXJJbmNoIiwib3B0aW1pemUiLCJvcHRpbWl6ZU9wdHMiLCJyZW1vdmVEdXBsaWNhdGVzIiwicmVtb3ZlQ29sbGluZWFyIiwic2hvdWxkU29ydCIsInNob3VsZE1lcmdlIiwic2hvdWxkUmVtb3ZlQ29sbGluZWFyIiwibWVyZ2VUaHJlc2hvbGQiLCJzdmdQYXRocyIsInZpZXdXaWR0aCIsInZpZXdIZWlnaHQiLCJmaWxsU3R5bGUiLCJzdHJva2VTdHlsZSIsImxpbmVXaWR0aCIsImxpbmVKb2luIiwibGluZUNhcCIsInBhdGhFbGVtZW50cyIsInRvQXR0ckxpc3QiLCJhdHRyIiwicmVuZGVyUGF0aHMiLCJjbGVhclJlY3QiLCJmaWxsUmVjdCIsImJlZ2luUGF0aCIsImRyYXdTVkdQYXRoIiwibGluZVRvIiwic3Ryb2tlIiwiY2FudmFzIiwiZXh0ZW5zaW9uIiwiaXNQYXRoIiwiaXNQb2x5bGluZSIsInBvbHlsaW5lVG9TVkdQYXRoIiwiY2IiLCJtb3ZlVG8iLCJiZXppZXJDdXJ2ZVRvIiwiY3JlYXRlUGF0aCIsImZuIiwicXVhZHJhdGljQ3VydmVUbyIsIl94MSIsIl95MSIsInBvbHlsaW5lc1RvU1ZHIiwid2FybiIsInJlbmRlclBvbHlsaW5lcyIsInNlZWRSYW5kb20iLCJTaW1wbGV4Tm9pc2UiLCJjcmVhdGVSYW5kb20iLCJkZWZhdWx0U2VlZCIsImN1cnJlbnRTZWVkIiwiY3VycmVudFJhbmRvbSIsIm5vaXNlR2VuZXJhdG9yIiwiZGVmYXVsdFJhbmRvbSIsIl9uZXh0R2F1c3NpYW4iLCJfaGFzTmV4dEdhdXNzaWFuIiwic2V0U2VlZCIsImdldFNlZWQiLCJnZXRSYW5kb21TZWVkIiwidmFsdWVOb25aZXJvIiwicGVybXV0ZU5vaXNlIiwiY3JlYXRlTm9pc2UiLCJub2lzZTFEIiwiZnJlcXVlbmN5IiwiYW1wbGl0dWRlIiwibm9pc2UyRCIsIm5vaXNlM0QiLCJub2lzZTREIiwiY2hhbmNlIiwicmFuZ2UiLCJyYW5nZUZsb29yIiwicGljayIsInNodWZmbGUiLCJyYW5kIiwib25DaXJjbGUiLCJpbnNpZGVDaXJjbGUiLCJvblNwaGVyZSIsInBoaSIsInRoZXRhIiwiYWNvcyIsImluc2lkZVNwaGVyZSIsImsiLCJjYnJ0IiwicXVhdGVybmlvbiIsInUxIiwidTIiLCJ1MyIsInNxMSIsInNxMiIsInRoZXRhMSIsInRoZXRhMiIsIndlaWdodGVkIiwid2VpZ2h0ZWRTZXQiLCJ3ZWlnaHRlZFNldEluZGV4IiwiZ2F1c3NpYW4iLCJtZWFuIiwic3RhbmRhcmREZXJpdmF0aW9uIiwibXVsdGlwbGllciIsInNlZWQiLCJ3ZWlnaHQiLCJ3ZWlnaHRzIiwidG90YWxXZWlnaHQiLCJjcmVhdGVSZWdsIiwiY3JlYXRlUXVhZCIsInBhcnNlQ29sb3IiLCJpc1RleHR1cmVMaWtlIiwiZ2wiLCJyZWdsT3B0cyIsImV4dGVuc2lvbnMiLCJvcHRpb25hbEV4dGVuc2lvbnMiLCJwcm9maWxlIiwib25Eb25lIiwiZHJhd1F1YWRDb21tYW5kIiwicmVnbCIsInF1YWQiLCJ0ZXh0dXJlTWFwIiwidW5pZm9ybXNNYXAiLCJ1bmlmb3JtcyIsInN0YXRlIiwiYmF0Y2hJRCIsInByZXZUZXgiLCJ0ZXh0dXJlIiwic2Npc3NvciIsImVuYWJsZSIsImJveCIsInByb3AiLCJ2ZXJ0IiwiZnVuYyIsInNyY1JHQiIsInNyY0FscGhhIiwiZHN0UkdCIiwiZHN0QWxwaGEiLCJhdHRyaWJ1dGVzIiwicG9zaXRpb24iLCJlbGVtZW50cyIsImNlbGxzIiwiZXJyIiwiaGFuZGxlRXJyb3IiLCJjbGVhckNvbG9yIiwiY2xlYXJBbHBoYSIsImNsZWFyIiwicmVuZGVyIiwicG9sbCIsImRlcHRoIiwic3RlbmNpbCIsImRyYXdRdWFkIiwiZmx1c2giLCJ1bmxvYWQiLCJkZXN0cm95IiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiaGFzT3duUHJvcGVydHkiLCJwcm9wSXNFbnVtZXJhYmxlIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJvYmplY3RBc3NpZ24iLCJ0ZXN0MSIsImdldE93blByb3BlcnR5TmFtZXMiLCJ0ZXN0MiIsInRlc3QzIiwibGV0dGVyIiwic2hvdWxkVXNlTmF0aXZlIiwic291cmNlIiwic3ltYm9scyIsInRvT2JqZWN0IiwiYnJvd3NlciIsImNvbW1vbmpzR2xvYmFsIiwicGVyZm9ybWFuY2UiLCJub3ciLCJEYXRlIiwiaXNQcm9taXNlXzEiLCJ0aGVuIiwiaXNEb20iLCJ3aW5kb3ciLCJOb2RlIiwibm9kZVR5cGUiLCJub2RlTmFtZSIsImdldENsaWVudEFQSSIsImFyZ3VtZW50cyQxIiwiaXNCcm93c2VyIiwiY2FjaGUiLCJzaGltIiwic3VwcG9ydHNBcmd1bWVudHNDbGFzcyIsInN1cHBvcnRlZCIsInVuc3VwcG9ydGVkIiwicFNsaWNlIiwiZGVlcEVxdWFsIiwiZXhwZWN0ZWQiLCJnZXRUaW1lIiwic3RyaWN0IiwiaXNVbmRlZmluZWRPck51bGwiLCJpc19hcmd1bWVudHMiLCJrYSIsImtiIiwib2JqRXF1aXYiLCJ0b2tlbiIsInRpbWV6b25lIiwidGltZXpvbmVDbGlwIiwiZGF0ZUZvcm1hdCIsImRhdGUiLCJtYXNrIiwidXRjIiwiZ210IiwibWFza1NsaWNlIiwibWFza3MiLCJEIiwiSCIsIk0iLCJMIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJXIiwidGFyZ2V0VGh1cnNkYXkiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsInNldERhdGUiLCJnZXREYXkiLCJmaXJzdFRodXJzZGF5Iiwic2V0SG91cnMiLCJnZXRIb3VycyIsImdldFdlZWsiLCJOIiwiZG93IiwiZ2V0RGF5T2ZXZWVrIiwiZmxhZ3MiLCJkZCIsInBhZCIsImRkZCIsImkxOG4iLCJkYXlOYW1lcyIsImRkZGQiLCJtbSIsIm1tbSIsIm1vbnRoTmFtZXMiLCJtbW1tIiwieXkiLCJ5eXl5IiwiaGgiLCJISCIsIk1NIiwic3MiLCJ0aW1lTmFtZXMiLCJ0dCIsIlQiLCJUVCIsIloiLCJwb3AiLCJTIiwiZGVmYXVsdCIsInNob3J0RGF0ZSIsIm1lZGl1bURhdGUiLCJsb25nRGF0ZSIsImZ1bGxEYXRlIiwic2hvcnRUaW1lIiwibWVkaXVtVGltZSIsImxvbmdUaW1lIiwiaXNvRGF0ZSIsImlzb1RpbWUiLCJpc29EYXRlVGltZSIsImlzb1V0Y0RhdGVUaW1lIiwiZXhwaXJlc0hlYWRlckZvcm1hdCIsInJlcGVhdFN0cmluZyIsImxpbmsiLCJwYWRMZWZ0Iiwibm9vcCIsImRlZmF1bHRFeHRzIiwic3VmZml4Iiwic3VwcG9ydGVkRW5jb2RpbmdzIiwic3RyZWFtIiwiaXNTdGFydCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmlsZW5hbWUiLCJyZXNvbHZlRmlsZW5hbWUiLCJjbGllbnQiLCJzYXZlRGF0YVVSTCIsImRhdGFVUkwiLCJzcGxpdEluZGV4IiwiYnl0ZVN0cmluZyIsImF0b2IiLCJtaW1lTWF0Y2giLCJtaW1lIiwiYWIiLCJpYSIsIkJsb2IiLCJjcmVhdGVCbG9iRnJvbURhdGFVUkwiLCJibG9iIiwic2F2ZUJsb2IiLCJ2aXNpYmlsaXR5IiwiZG93bmxvYWQiLCJocmVmIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwib25jbGljayIsInNldFRpbWVvdXQiLCJyZXZva2VPYmplY3RVUkwiLCJyZW1vdmVBdHRyaWJ1dGUiLCJjbGljayIsImZpbGUiLCJ0b3RhbEZyYW1lcyIsImxheWVyU3RyIiwidG90YWxMYXllcnMiLCJsYXllciIsInRpbWVTdGFtcCIsImhhc2giLCJjb21tb25UeXBvcyIsImRpbWVuc2lvbiIsImFuaW1hdGVkIiwiYW5pbWF0aW5nIiwidW5pdCIsIlA1IiwicGl4ZWxsYXRlZCIsImxvb3BpbmciLCJwaXhlbFBlckluY2giLCJhbGxLZXlzIiwiY2hlY2tTZXR0aW5ncyIsInNldHRpbmdzIiwicGFwZXJTaXplcyIsImRpY3QiLCJkaW1lbnNpb25zIiwiZGVmaW5lZCQxIiwiY29udmVyc2lvbnMiLCJzeXN0ZW0iLCJmYWN0b3IiLCJjbSIsInB0IiwiaW4iLCJmdCIsImFuY2hvcnMiLCJtZXRyaWMiLCJpbXBlcmlhbCIsImNvbnZlcnRMZW5ndGgiLCJmcm9tVW5pdCIsInRvVW5pdCIsInRvRmFjdG9yIiwiZnJvbUZhY3RvciIsImlzVG9QaXhlbCIsImZyb21Vbml0RGF0YSIsInRvVW5pdERhdGEiLCJhbmNob3IiLCJkZWNpbWFscyIsImNvbnZlcnREaXN0YW5jZSQxIiwidW5pdHNGcm9tIiwidW5pdHNUbyIsInJlc2l6ZUNhbnZhcyIsInN0eWxlV2lkdGgiLCJjYW52YXNXaWR0aCIsImNhbnZhc0hlaWdodCIsImhhc0RpbWVuc2lvbnMiLCJjaGVja0lmSGFzRGltZW5zaW9ucyIsImV4cG9ydGluZyIsInNjYWxlVG9GaXQiLCJzY2FsZVRvVmlldyIsInBpeGVsUmF0aW8iLCJleHBvcnRQaXhlbFJhdGlvIiwiYmxlZWQiLCJkZXZpY2VQaXhlbFJhdGlvIiwiYmFzZVBpeGVsUmF0aW8iLCJtYXhQaXhlbFJhdGlvIiwidHJpbVdpZHRoIiwidHJpbUhlaWdodCIsInJlZiIsImlubmVyV2lkdGgiLCJpbm5lckhlaWdodCIsImdldFBhcmVudFNpemUiLCJwYXJlbnRXaWR0aCIsInBhcmVudEhlaWdodCIsImdldERpbWVuc2lvbnNGcm9tUHJlc2V0IiwiaGlnaGVzdCIsImxvd2VzdCIsIm9yaWVudGF0aW9uIiwibGFuZHNjYXBlIiwicmVhbFdpZHRoIiwicmVhbEhlaWdodCIsImFzcGVjdCIsIndpbmRvd0FzcGVjdCIsInNjYWxlVG9GaXRQYWRkaW5nIiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJnZXRDYW52YXNDb250ZXh0XzEiLCJhdHRyaWJzIiwiY3JlYXRlQ2FudmFzIiwib3duc0NhbnZhcyIsIm5ld0NhbnZhcyIsImNyZWF0ZUNhbnZhc0VsZW1lbnQiLCJwaXhlbGF0ZWQiLCJpbWFnZVNtb290aGluZ0VuYWJsZWQiLCJtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQiLCJvSW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwid2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwibXNJbWFnZVNtb290aGluZ0VuYWJsZWQiLCJTa2V0Y2hNYW5hZ2VyIiwiX3NldHRpbmdzIiwiX3Byb3BzIiwiX3NrZXRjaCIsIl9yYWYiLCJfcmVjb3JkVGltZW91dCIsIl9sYXN0UmVkcmF3UmVzdWx0IiwiX2lzUDVSZXNpemluZyIsIl9rZXlib2FyZFNob3J0Y3V0cyIsImVuYWJsZWQiLCJrZXlDb2RlIiwibWV0YUtleSIsImN0cmxLZXkiLCJ0b2dnbGVQbGF5IiwiY29tbWl0Iiwic2F2ZSIsImtleWJvYXJkU2hvcnRjdXRzIiwidGhpcyQxIiwiaG90a2V5cyIsInJlY29yZGluZyIsImVuZFJlY29yZCIsInJ1biIsInJlY29yZCIsImV4cG9ydEZyYW1lIiwicGxheWluZyIsInBhdXNlIiwicGxheSIsIl9hbmltYXRlSGFuZGxlciIsImFuaW1hdGUiLCJfcmVzaXplSGFuZGxlciIsInJlc2l6ZSIsInNrZXRjaCIsIl9jb21wdXRlUGxheWhlYWQiLCJjdXJyZW50VGltZSIsImR1cmF0aW9uIiwiX2NvbXB1dGVGcmFtZSIsInBsYXloZWFkIiwidGltZSIsImZwcyIsIl9jb21wdXRlQ3VycmVudEZyYW1lIiwiX2dldFNpemVQcm9wcyIsInZpZXdwb3J0V2lkdGgiLCJ2aWV3cG9ydEhlaWdodCIsInN0YXJ0ZWQiLCJfc2lnbmFsQmVnaW4iLCJ0aWNrIiwiX2NhbmNlbFRpbWVvdXRzIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJfbGFzdFRpbWUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJzdG9wIiwiZGVsdGFUaW1lIiwiZXhwb3J0T3B0cyIsIl9jcmVhdGVFeHBvcnRPcHRpb25zIiwiZnJhbWVJbnRlcnZhbCIsIl9zaWduYWxFbmQiLCJiZWdpblJlY29yZCIsIl93cmFwQ29udGV4dFNjYWxlIiwiY2F0Y2giLCJyZXNwb25zZSIsIndhc1JlY29yZGluZyIsInNlcXVlbmNlIiwiZW5jb2RpbmdRdWFsaXR5IiwiZGF0ZWZvcm1hdCIsImFsbCIsInByZUV4cG9ydCIsImNvbW1pdE9wdHMiLCJfZG9FeHBvcnRGcmFtZSIsImRyYXdSZXN1bHQiLCJoYXNEYXRhT2JqZWN0IiwidG9EYXRhVVJMIiwiZXhwb3J0Q2FudmFzIiwibGF5ZXJMaXN0IiwiY3VyT3B0Iiwic2F2ZVBhcmFtIiwic2F2ZVByb21pc2UiLCJzYXZlRmlsZSIsInNhdmVSZXN1bHQiLCJzYXZlZEV2ZW50cyIsImV2ZW50V2l0aE91dHB1dCIsIm91dHB1dE5hbWUiLCJpc0NsaWVudCIsInNvbWUiLCJpc1N0cmVhbWluZyIsIm9mU2VxIiwicG9zdEV4cG9ydCIsIl9wcmVSZW5kZXIiLCJfcG9zdFJlbmRlciIsInA1Iiwic2NhbGVYIiwic2NhbGVZIiwic2NhbGVDb250ZXh0IiwicmVzdG9yZSIsInJlZHJhdyIsInN1Ym1pdERyYXdDYWxsIiwidXBkYXRlIiwibm90WWV0U3VwcG9ydGVkIiwib2xkQ2FudmFzIiwib2xkQ29udGV4dCIsInRpbWVPcHRzIiwidGltZVByb3BzIiwiZ2V0VGltZVByb3BzIiwiX3NldHVwR0xLZXkiLCJfYXBwZW5kQ2FudmFzSWZOZWVkZWQiLCJkcmF3Iiwib2xkU2l6ZXMiLCJuZXdQcm9wcyIsInBpeGVsRGVuc2l0eSIsInN0eWxlQ2FudmFzIiwibmV3U2l6ZXMiLCJjaGFuZ2VkIiwiZGVlcEVxdWFsXzEiLCJfc2l6ZUNoYW5nZWQiLCJmcmFtZUludGVydmFsTVMiLCJkZWx0YVRpbWVNUyIsImhhc0R1cmF0aW9uIiwiaXNOZXdGcmFtZSIsInBsYXliYWNrUmF0ZSIsIm5ld1RpbWUiLCJ0aW1lU2NhbGUiLCJpc0ZpbmlzaGVkIiwiaXNMb29wU3RhcnQiLCJsb29wIiwibGFzdEZyYW1lIiwiZGlzcGF0Y2giLCJtb3VudCIsInVubW91bnQiLCJkZXRhY2giLCJidWZmZXJEYXRhIiwiaGFzVG90YWxGcmFtZXMiLCJ0b3RhbEZyYW1lc0Zyb21EdXJhdGlvbiIsImR1cmF0aW9uRnJvbVRvdGFsRnJhbWVzIiwic3RhcnRUaW1lIiwic3RhcnRGcmFtZSIsImhhc1N0YXJ0VGltZSIsImhhc1N0YXJ0RnJhbWUiLCJzZXR1cCIsImxvYWRBbmRSdW4iLCJjYW52YXNTa2V0Y2giLCJuZXdTZXR0aW5ncyIsImxvYWQiLCJjcmVhdGVTa2V0Y2giLCJwcmVsb2FkIiwiUDVDb25zdHJ1Y3RvciIsInA1U2tldGNoIiwiaXNHTCIsInJlbmRlcmVyIiwiV0VCR0wiLCJQMkQiLCJub0xvb3AiLCJzZXRBdHRyaWJ1dGVzIiwiX3JlbmRlcmVyIiwiZHJhd2luZ0NvbnRleHQiLCJsb2FkZXIiLCJhdHRhY2giLCJDQUNIRSIsInJ1bnRpbWVDb2xsaXNpb25zIiwiaG90SUQiLCJpc0hvdCIsImhvdCIsImlzSW5qZWN0aW5nIiwicHJldmlvdXNEYXRhIiwiY2FjaGVHZXQiLCJuZXh0Iiwib2xkTWFuYWdlciIsIm1hbmFnZXIiLCJQYXBlclNpemVzIiwiX2luc3RhbmNlb2YiLCJuYXRpdmVNYXAiLCJuYXRpdmVTZXQiLCJuYXRpdmVQcm9taXNlIiwiY2lyY3VsYXIiLCJpbmNsdWRlTm9uRW51bWVyYWJsZSIsImFsbFBhcmVudHMiLCJhbGxDaGlsZHJlbiIsInVzZUJ1ZmZlciIsIl9jbG9uZSIsImNoaWxkIiwicHJvdG8iLCJfX2lzQXJyYXkiLCJfX2lzUmVnRXhwIiwiUmVnRXhwIiwiX19nZXRSZWdFeHBGbGFncyIsImxhc3RJbmRleCIsIl9faXNEYXRlIiwiZ2V0UHJvdG90eXBlT2YiLCJrZXlDaGlsZCIsInZhbHVlQ2hpbGQiLCJlbnRyeUNoaWxkIiwiYXR0cnMiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJzeW1ib2wiLCJkZXNjcmlwdG9yIiwiYWxsUHJvcGVydHlOYW1lcyIsIl9fb2JqVG9TdHIiLCJyZSIsImlnbm9yZUNhc2UiLCJjbG9uZVByb3RvdHlwZSIsInJnYjJoc2wiLCJyZ2IyaHN2IiwicmdiMmh3YiIsInJnYjJjbXlrIiwicmdiMmtleXdvcmQiLCJyZXZlcnNlS2V5d29yZHMiLCJyZ2IyeHl6IiwicmdiMmxhYiIsInh5eiIsImhzbDJyZ2IiLCJ0MSIsInQyIiwidDMiLCJoc3YycmdiIiwicSIsImh3YjJyZ2IiLCJod2IiLCJ3aCIsImJsIiwiY215azJyZ2IiLCJjbXlrIiwieHl6MnJnYiIsInh5ejJsYWIiLCJsYWIyeHl6IiwibGFiIiwibGFiMmxjaCIsImxhYjJyZ2IiLCJsY2gybGFiIiwibGNoIiwiaHIiLCJrZXl3b3JkMnJnYiIsImtleXdvcmQiLCJjc3NLZXl3b3JkcyIsInJnYjJsY2giLCJoc2wyaHN2IiwiaHNsMmh3YiIsImhzbDJjbXlrIiwiaHNsMmtleXdvcmQiLCJoc3YyaHNsIiwic2wiLCJoc3YyaHdiIiwiaHN2MmNteWsiLCJoc3Yya2V5d29yZCIsImh3YjJoc2wiLCJod2IyaHN2IiwiaHdiMmNteWsiLCJod2Iya2V5d29yZCIsImNteWsyaHNsIiwiY215azJoc3YiLCJjbXlrMmh3YiIsImNteWsya2V5d29yZCIsImtleXdvcmQyaHNsIiwia2V5d29yZDJoc3YiLCJrZXl3b3JkMmh3YiIsImtleXdvcmQyY215ayIsImtleXdvcmQybGFiIiwia2V5d29yZDJ4eXoiLCJ4eXoybGNoIiwibGNoMnh5eiIsImxjaDJyZ2IiLCJDb252ZXJ0ZXIiLCJwYWlyIiwiY29udnMiLCJyb3V0ZVNwYWNlIiwic3BhY2UiLCJnZXRWYWx1ZXMiLCJzZXRWYWx1ZXMiLCJ2YWxzIiwiZnNwYWNlIiwidGF1IiwidGF1RXBzaWxvbiIsIlBhdGgiLCJfeDAiLCJfeTAiLCJjbG9zZVBhdGgiLCJhcmNUbyIsIngyMSIsInkyMSIsIngwMSIsInkwMSIsImwwMV8yIiwieDIwIiwieTIwIiwibDIxXzIiLCJsMjBfMiIsImwyMSIsImwwMSIsInQwMSIsInQyMSIsImFyYyIsImNjdyIsImN3IiwiZGEiLCJjb2RlQiIsImxhc3RDb2RlIiwiY29kZUEiLCJiaXRDb2RlIiwicGFydCIsImVkZ2UiLCJwcmV2IiwicHJldkluc2lkZSIsImluc2lkZSIsImJlemllclgiLCJiZXppZXJZIiwicXVhZFgiLCJxdWFkWSIsImN1cnZlcyIsImFyY1RvQ3VydmUiLCJyeCIsInJ5IiwieEF4aXNSb3RhdGlvbiIsImxhcmdlQXJjRmxhZyIsInN3ZWVwRmxhZyIsInF1YWRyYXRpYyIsImNzdHIiLCJjb252IiwiaHN2YSIsImNteWthIiwic2VnbWVudCIsIm51bWJlcnMiLCJwYXJzZVZhbHVlcyIsIm5vcm1hbHMiLCJ1dnMiLCJpc1R5cGVkQXJyYXkiLCJVaW50MTZBcnJheSIsIlVpbnQzMkFycmF5IiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIkludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJVaW50OENsYW1wZWRBcnJheSIsImV4dGVuZCIsImVuZGwiLCJyYWlzZSIsInByZWQiLCJlbmNvbG9uIiwic3RhbmRhcmRUeXBlRWgiLCJjaGVja09uZU9mIiwiY29uc3RydWN0b3JLZXlzIiwibGVmdFBhZCIsIlNoYWRlckZpbGUiLCJoYXNFcnJvcnMiLCJTaGFkZXJMaW5lIiwiZXJyb3JzIiwiU2hhZGVyRXJyb3IiLCJmaWxlTnVtYmVyIiwibGluZU51bWJlciIsImd1ZXNzQ29tbWFuZCIsInBhdCIsInBhdDIiLCJndWVzc0NhbGxTaXRlIiwicGFyc2VTb3VyY2UiLCJmaWxlcyIsInVua25vd24iLCIwIiwibGluZU51bWJlckluZm8iLCJuYW1lSW5mbyIsInNhdmVDb21tYW5kUmVmIiwiX2NvbW1hbmRSZWYiLCJjb21tYW5kUmFpc2UiLCJjYWxsU2l0ZSIsImNoZWNrQ29tbWFuZFR5cGUiLCJHTF9DTEFNUF9UT19FREdFIiwiR0xfTkVBUkVTVCIsIkdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QiLCJHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1QiLCJHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVIiLCJHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUiIsIkdMX0ZMT0FUIiwiR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCIsIkdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEiLCJHTF9VTlNJR05FRF9TSE9SVF81XzZfNSIsIkdMX1VOU0lHTkVEX0lOVF8yNF84X1dFQkdMIiwiVFlQRV9TSVpFIiwicGl4ZWxTaXplIiwiY2hhbm5lbHMiLCJpc1BvdzIiLCJjaGVjayQxIiwiYmxvY2siLCJwYXJhbWV0ZXIiLCJwYXJhbSIsInBvc3NpYmlsaXRpZXMiLCJjb21tYW5kUGFyYW1ldGVyIiwiY29tbWFuZFR5cGUiLCJubmkiLCJvbmVPZiIsInNoYWRlckVycm9yIiwiZ2V0U2hhZGVyUGFyYW1ldGVyIiwiQ09NUElMRV9TVEFUVVMiLCJlcnJMb2ciLCJnZXRTaGFkZXJJbmZvTG9nIiwidHlwZU5hbWUiLCJGUkFHTUVOVF9TSEFERVIiLCJlcnJNc2ciLCJwYXJzZUVycm9yTG9nIiwiYW5ub3RhdGVGaWxlcyIsInN0cmluZ3MiLCJzdHlsZXMiLCJ0b2tlblBhdCIsImNocm9tZSIsImxpbmtFcnJvciIsInByb2dyYW0iLCJmcmFnU2hhZGVyIiwidmVydFNoYWRlciIsImdldFByb2dyYW1QYXJhbWV0ZXIiLCJMSU5LX1NUQVRVUyIsImdldFByb2dyYW1JbmZvTG9nIiwiZnJhZ1BhcnNlIiwiaGVhZGVyIiwic2F2ZURyYXdJbmZvIiwic3RyaW5nU3RvcmUiLCJhZGRQcm9wcyIsIl9mcmFnSWQiLCJzdGF0aWMiLCJfdmVydElkIiwidW5pZm9ybVNldCIsIl91bmlmb3JtU2V0IiwiZHluYW1pYyIsImF0dHJpYnV0ZVNldCIsIl9hdHRyaWJ1dGVTZXQiLCJfaGFzQ291bnQiLCJmcmFtZWJ1ZmZlckZvcm1hdCIsImF0dGFjaG1lbnQiLCJ0ZXhGb3JtYXRzIiwicmJGb3JtYXRzIiwiX3RleHR1cmUiLCJpbnRlcm5hbGZvcm1hdCIsInJlbmRlcmJ1ZmZlciIsIl9yZW5kZXJidWZmZXIiLCJ0ZXh0dXJlMkQiLCJpbmZvIiwibWlwRGF0YSIsImxpbWl0cyIsIm1heFRleHR1cmVTaXplIiwid3JhcFMiLCJ3cmFwVCIsIm1pcG1hc2siLCJtaW5GaWx0ZXIiLCJtYWdGaWx0ZXIiLCJnZW5NaXBtYXBzIiwibWlwaW1hZ2VzIiwiaW1hZ2VzIiwibXciLCJtaCIsImltZyIsImNvbXByZXNzZWQiLCJyb3dTaXplIiwiY2VpbCIsInVucGFja0FsaWdubWVudCIsInRleHR1cmVDdWJlIiwiZmFjZXMiLCJmYWNlIiwibWlwbWFwcyIsIlZBUklBQkxFX0NPVU5URVIiLCJEWU5fRlVOQyIsIkRZTl9DT05TVEFOVCIsIkRZTl9BUlJBWSIsIkR5bmFtaWNWYXJpYWJsZSIsImVzY2FwZVN0ciIsInRvQWNjZXNzb3JTdHJpbmciLCJzcGxpdFBhcnRzIiwiZmlyc3RDaGFyIiwiY2hhckF0IiwibGFzdENoYXIiLCJzdWJwYXJ0cyIsImlzRHluYW1pYyIsIl9yZWdsVHlwZSIsInVuYm94IiwiYWNjZXNzb3IiLCJyYWYiLCJjYW5jZWwiLCJjbGVhclRpbWVvdXQiLCJjbG9jayIsInBhcnNlRXh0ZW5zaW9ucyIsImdldEVsZW1lbnQiLCJkZXNjIiwicGFyc2VBcmdzIiwiYXJnc18iLCJjb250ZXh0QXR0cmlidXRlcyIsIm9uRGVzdHJveSIsImRyYXdBcnJheXMiLCJkcmF3RWxlbWVudHMiLCJpc1dlYkdMQ29udGV4dCIsInJlc2l6ZU9ic2VydmVyIiwiYm90dG9tIiwibWFyZ2luIiwicGFkZGluZyIsIlJlc2l6ZU9ic2VydmVyIiwib2JzZXJ2ZSIsImRpc2Nvbm5lY3QiLCJwcmVtdWx0aXBsaWVkQWxwaGEiLCJjcmVhdGVDb250ZXh0IiwiR0xfQllURSQxIiwiR0xfVU5TSUdORURfQllURSQyIiwiR0xfU0hPUlQkMSIsIkdMX1VOU0lHTkVEX1NIT1JUJDEiLCJHTF9JTlQkMSIsIkdMX1VOU0lHTkVEX0lOVCQxIiwiR0xfRkxPQVQkMiIsImxvZzIiLCJjcmVhdGVQb29sIiwiYnVmZmVyUG9vbCIsInN6IiwibmV4dFBvdzE2IiwiYmluIiwiZnJlZSIsImFsbG9jVHlwZSIsImZyZWVUeXBlIiwiemVybyIsIndyYXBMaW1pdHMiLCJtYXhBbmlzb3Ryb3BpYyIsImV4dF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIsImdldFBhcmFtZXRlciIsIm1heERyYXdidWZmZXJzIiwibWF4Q29sb3JBdHRhY2htZW50cyIsIndlYmdsX2RyYXdfYnVmZmVycyIsInJlYWRGbG9hdCIsIm9lc190ZXh0dXJlX2Zsb2F0IiwicmVhZEZsb2F0VGV4dHVyZSIsImNyZWF0ZVRleHR1cmUiLCJiaW5kVGV4dHVyZSIsInRleEltYWdlMkQiLCJmYm8iLCJjcmVhdGVGcmFtZWJ1ZmZlciIsImJpbmRGcmFtZWJ1ZmZlciIsImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwiY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyIsInZpZXdwb3J0IiwicGl4ZWxzIiwicmVhZFBpeGVscyIsImdldEVycm9yIiwiZGVsZXRlRnJhbWVidWZmZXIiLCJkZWxldGVUZXh0dXJlIiwibnBvdFRleHR1cmVDdWJlIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYXBwVmVyc2lvbiIsImN1YmVUZXh0dXJlIiwiYWN0aXZlVGV4dHVyZSIsImNvbG9yQml0cyIsImRlcHRoQml0cyIsInN0ZW5jaWxCaXRzIiwic3VicGl4ZWxCaXRzIiwicG9pbnRTaXplRGltcyIsImxpbmVXaWR0aERpbXMiLCJtYXhWaWV3cG9ydERpbXMiLCJtYXhDb21iaW5lZFRleHR1cmVVbml0cyIsIm1heEN1YmVNYXBTaXplIiwibWF4UmVuZGVyYnVmZmVyU2l6ZSIsIm1heFRleHR1cmVVbml0cyIsIm1heEF0dHJpYnV0ZXMiLCJtYXhWZXJ0ZXhVbmlmb3JtcyIsIm1heFZlcnRleFRleHR1cmVVbml0cyIsIm1heFZhcnlpbmdWZWN0b3JzIiwibWF4RnJhZ21lbnRVbmlmb3JtcyIsImdsc2wiLCJ2ZW5kb3IiLCJ2ZXJzaW9uIiwiaXNOREFycmF5TGlrZSIsInNoYXBlIiwic3RyaWRlIiwiZmxhdHRlblV0aWxzIiwiYXJyYXlfIiwiZmxhdHRlbiIsIm91dF8iLCJueCIsImZsYXR0ZW4xRCIsIm55IiwicHRyIiwicm93IiwiZmxhdHRlbjJEIiwiZmxhdHRlbjNEIiwiZmxhdHRlblJlYyIsIm56IiwicHRyXyIsImNvbCIsImFycmF5VHlwZXMiLCJbb2JqZWN0IEludDhBcnJheV0iLCJbb2JqZWN0IEludDE2QXJyYXldIiwiW29iamVjdCBJbnQzMkFycmF5XSIsIltvYmplY3QgVWludDhBcnJheV0iLCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsIltvYmplY3QgVWludDE2QXJyYXldIiwiW29iamVjdCBVaW50MzJBcnJheV0iLCJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLCJbb2JqZWN0IEZsb2F0NjRBcnJheV0iLCJbb2JqZWN0IEFycmF5QnVmZmVyXSIsImdsVHlwZXMiLCJpbnQ4IiwiaW50MTYiLCJpbnQzMiIsInVpbnQxNiIsInVpbnQzMiIsImZsb2F0IiwiZmxvYXQzMiIsInVzYWdlVHlwZXMiLCJhcnJheUZsYXR0ZW4iLCJhcnJheVNoYXBlIiwiR0xfU1RBVElDX0RSQVciLCJHTF9TVFJFQU1fRFJBVyIsIkdMX1VOU0lHTkVEX0JZVEUkMyIsIkdMX0ZMT0FUJDMiLCJEVFlQRVNfU0laRVMiLCJ0eXBlZEFycmF5Q29kZSIsImNvcHlBcnJheSIsImlucCIsInRyYW5zcG9zZSIsInNoYXBlWCIsInNoYXBlWSIsInN0cmlkZVgiLCJzdHJpZGVZIiwicHJpbVR5cGVzIiwidHJpYW5nbGVzIiwidHJpYW5nbGUiLCJsaW5lIGxvb3AiLCJsaW5lIHN0cmlwIiwidHJpYW5nbGUgc3RyaXAiLCJ0cmlhbmdsZSBmYW4iLCJHTF9QT0lOVFMiLCJHTF9MSU5FUyIsIkdMX1RSSUFOR0xFUyIsIkdMX0JZVEUkMiIsIkdMX1VOU0lHTkVEX0JZVEUkNCIsIkdMX1NIT1JUJDIiLCJHTF9VTlNJR05FRF9TSE9SVCQyIiwiR0xfSU5UJDIiLCJHTF9VTlNJR05FRF9JTlQkMiIsIkdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSIiwiR0xfU1RSRUFNX0RSQVckMSIsIkdMX1NUQVRJQ19EUkFXJDEiLCJGTE9BVCIsIklOVCIsIkdMX1VOU0lHTkVEX1NIT1JUJDQiLCJjb252ZXJ0VG9IYWxmRmxvYXQiLCJ1c2hvcnRzIiwic2duIiwiZnJhYyIsImlzQXJyYXlMaWtlIiwiaXNQb3cyJDEiLCJHTF9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyIsIkdMX1RFWFRVUkVfMkQkMSIsIkdMX1RFWFRVUkVfQ1VCRV9NQVAkMSIsIkdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCQxIiwiR0xfUkdCQSQxIiwiR0xfQUxQSEEiLCJHTF9SR0IiLCJHTF9MVU1JTkFOQ0UiLCJHTF9MVU1JTkFOQ0VfQUxQSEEiLCJHTF9SR0JBNCIsIkdMX1JHQjVfQTEiLCJHTF9SR0I1NjUiLCJHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80JDEiLCJHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xJDEiLCJHTF9VTlNJR05FRF9TSE9SVF81XzZfNSQxIiwiR0xfVU5TSUdORURfSU5UXzI0XzhfV0VCR0wkMSIsIkdMX0RFUFRIX0NPTVBPTkVOVCIsIkdMX0RFUFRIX1NURU5DSUwiLCJHTF9TUkdCX0VYVCIsIkdMX1NSR0JfQUxQSEFfRVhUIiwiR0xfSEFMRl9GTE9BVF9PRVMkMSIsIkdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQiLCJHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCIsIkdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUIiwiR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQiLCJHTF9DT01QUkVTU0VEX1JHQl9BVENfV0VCR0wiLCJHTF9DT01QUkVTU0VEX1JHQkFfQVRDX0VYUExJQ0lUX0FMUEhBX1dFQkdMIiwiR0xfQ09NUFJFU1NFRF9SR0JBX0FUQ19JTlRFUlBPTEFURURfQUxQSEFfV0VCR0wiLCJHTF9DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HIiwiR0xfQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRyIsIkdMX0NPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HIiwiR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUciLCJHTF9DT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMIiwiR0xfVU5TSUdORURfQllURSQ1IiwiR0xfVU5TSUdORURfU0hPUlQkMyIsIkdMX1VOU0lHTkVEX0lOVCQzIiwiR0xfRkxPQVQkNCIsIkdMX1RFWFRVUkVfV1JBUF9TIiwiR0xfVEVYVFVSRV9XUkFQX1QiLCJHTF9SRVBFQVQiLCJHTF9DTEFNUF9UT19FREdFJDEiLCJHTF9NSVJST1JFRF9SRVBFQVQiLCJHTF9URVhUVVJFX01BR19GSUxURVIiLCJHTF9URVhUVVJFX01JTl9GSUxURVIiLCJHTF9ORUFSRVNUJDEiLCJHTF9MSU5FQVIiLCJHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUJDEiLCJHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1QkMSIsIkdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUiQxIiwiR0xfTElORUFSX01JUE1BUF9MSU5FQVIkMSIsIkdMX0dFTkVSQVRFX01JUE1BUF9ISU5UIiwiR0xfRE9OVF9DQVJFIiwiR0xfRkFTVEVTVCIsIkdMX05JQ0VTVCIsIkdMX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUIiwiR0xfVU5QQUNLX0FMSUdOTUVOVCIsIkdMX1VOUEFDS19GTElQX1lfV0VCR0wiLCJHTF9VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wiLCJHTF9VTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMIiwiR0xfQlJPV1NFUl9ERUZBVUxUX1dFQkdMIiwiR0xfVEVYVFVSRTAkMSIsIk1JUE1BUF9GSUxURVJTIiwiQ0hBTk5FTFNfRk9STUFUIiwiRk9STUFUX0NIQU5ORUxTIiwib2JqZWN0TmFtZSIsIkNBTlZBU19DTEFTUyIsIk9GRlNDUkVFTkNBTlZBU19DTEFTUyIsIkNPTlRFWFQyRF9DTEFTUyIsIkJJVE1BUF9DTEFTUyIsIklNQUdFX0NMQVNTIiwiVklERU9fQ0xBU1MiLCJQSVhFTF9DTEFTU0VTIiwiVFlQRV9TSVpFUyIsIkZPUk1BVF9TSVpFU19TUEVDSUFMIiwiaXNOdW1lcmljQXJyYXkiLCJpc1JlY3RBcnJheSIsImNsYXNzU3RyaW5nIiwiaXNDYW52YXNFbGVtZW50IiwiaXNPZmZzY3JlZW5DYW52YXMiLCJpc1BpeGVsRGF0YSIsInR5cGVkQXJyYXlDb2RlJDEiLCJwcmVDb252ZXJ0IiwiaW1hZ2UiLCJwb3N0Q29udmVydCIsImdldFRleHR1cmVTaXplIiwiaXNNaXBtYXAiLCJpc0N1YmUiLCJ0b3RhbCIsImNyZWF0ZVRleHR1cmVTZXQiLCJyZWdsUG9sbCIsImNvbnRleHRTdGF0ZSIsInN0YXRzIiwibWlwbWFwSGludCIsImRvbid0IGNhcmUiLCJkb250IGNhcmUiLCJuaWNlIiwiZmFzdCIsIndyYXBNb2RlcyIsIm1pcnJvciIsIm1hZ0ZpbHRlcnMiLCJuZWFyZXN0IiwibGluZWFyIiwibWluRmlsdGVycyIsIm1pcG1hcCIsIm5lYXJlc3QgbWlwbWFwIG5lYXJlc3QiLCJsaW5lYXIgbWlwbWFwIG5lYXJlc3QiLCJuZWFyZXN0IG1pcG1hcCBsaW5lYXIiLCJsaW5lYXIgbWlwbWFwIGxpbmVhciIsImNvbG9yU3BhY2UiLCJub25lIiwidGV4dHVyZVR5cGVzIiwicmdiYTQiLCJyZ2I1NjUiLCJyZ2I1IGExIiwidGV4dHVyZUZvcm1hdHMiLCJsdW1pbmFuY2UiLCJsdW1pbmFuY2UgYWxwaGEiLCJjb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMiLCJleHRfc3JnYiIsInNyZ2IiLCJzcmdiYSIsIm9lc190ZXh0dXJlX2hhbGZfZmxvYXQiLCJ3ZWJnbF9kZXB0aF90ZXh0dXJlIiwiZGVwdGggc3RlbmNpbCIsIndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIiwicmdiIHMzdGMgZHh0MSIsInJnYmEgczN0YyBkeHQxIiwicmdiYSBzM3RjIGR4dDMiLCJyZ2JhIHMzdGMgZHh0NSIsIndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9hdGMiLCJyZ2IgYXRjIiwicmdiYSBhdGMgZXhwbGljaXQgYWxwaGEiLCJyZ2JhIGF0YyBpbnRlcnBvbGF0ZWQgYWxwaGEiLCJ3ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiLCJyZ2IgcHZydGMgNGJwcHYxIiwicmdiIHB2cnRjIDJicHB2MSIsInJnYmEgcHZydGMgNGJwcHYxIiwicmdiYSBwdnJ0YyAyYnBwdjEiLCJ3ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMSIsInN1cHBvcnRlZENvbXByZXNzZWRGb3JtYXRzIiwic3VwcG9ydGVkRm9ybWF0cyIsInRleHR1cmVGb3JtYXRzSW52ZXJ0IiwidGV4dHVyZVR5cGVzSW52ZXJ0IiwibWFnRmlsdGVyc0ludmVydCIsIm1pbkZpbHRlcnNJbnZlcnQiLCJ3cmFwTW9kZXNJbnZlcnQiLCJjb2xvckZvcm1hdHMiLCJnbGVudW0iLCJUZXhGbGFncyIsInByZW11bHRpcGx5QWxwaGEiLCJmbGlwWSIsImNvcHlGbGFncyIsIm90aGVyIiwicGFyc2VGbGFncyIsImFsaWdubWVudCIsImhhc0NoYW5uZWxzIiwiaGFzRm9ybWF0IiwiZm9ybWF0U3RyIiwic2V0RmxhZ3MiLCJwaXhlbFN0b3JlaSIsIlRleEltYWdlIiwieE9mZnNldCIsInlPZmZzZXQiLCJuZWVkc0ZyZWUiLCJuZWVkc0NvcHkiLCJwYXJzZUltYWdlIiwidmlld1ciLCJ2aWV3SCIsImNvbnZlcnRlZCIsImNvbnZlcnREYXRhIiwic2hhcGVDIiwic3RyaWRlQyIsInRyYW5zcG9zZURhdGEiLCJpc0JpdG1hcCIsImlzSW1hZ2VFbGVtZW50IiwibmF0dXJhbFdpZHRoIiwibmF0dXJhbEhlaWdodCIsImlzVmlkZW9FbGVtZW50IiwidmlkZW9XaWR0aCIsInZpZGVvSGVpZ2h0IiwiYWxsb2NEYXRhIiwic2V0SW1hZ2UiLCJtaXBsZXZlbCIsImNvbXByZXNzZWRUZXhJbWFnZTJEIiwiY29weVRleEltYWdlMkQiLCJzZXRTdWJJbWFnZSIsInRleFN1YkltYWdlMkQiLCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsImNvcHlUZXhTdWJJbWFnZTJEIiwiaW1hZ2VQb29sIiwiYWxsb2NJbWFnZSIsImZyZWVJbWFnZSIsIk1pcE1hcCIsInBhcnNlTWlwTWFwRnJvbVNoYXBlIiwicGFyc2VNaXBNYXBGcm9tT2JqZWN0Iiwic2V0TWlwTWFwIiwibWlwUG9vbCIsImFsbG9jTWlwTWFwIiwiZnJlZU1pcE1hcCIsIlRleEluZm8iLCJhbmlzb3Ryb3BpYyIsInBhcnNlVGV4SW5mbyIsIm1hZyIsIm9wdFdyYXBTIiwib3B0V3JhcFQiLCJoYXNNaXBNYXAiLCJzZXRUZXhJbmZvIiwidGV4UGFyYW1ldGVyaSIsImhpbnQiLCJnZW5lcmF0ZU1pcG1hcCIsInRleHR1cmVDb3VudCIsInRleHR1cmVTZXQiLCJudW1UZXhVbml0cyIsInRleHR1cmVVbml0cyIsIlJFR0xUZXh0dXJlIiwicmVmQ291bnQiLCJiaW5kQ291bnQiLCJ0ZXhJbmZvIiwidGVtcEJpbmQiLCJ0ZW1wUmVzdG9yZSIsImhhbmRsZSIsInVuYmluZCIsImRlY1JlZiIsImdldFRvdGFsVGV4dHVyZVNpemUiLCJjcmVhdGUyRCIsInJlZ2xUZXh0dXJlMkQiLCJzdWJpbWFnZSIsInhfIiwieV8iLCJsZXZlbF8iLCJpbWFnZURhdGEiLCJ3XyIsImhfIiwiX3ciLCJfaCIsImNyZWF0ZUN1YmUiLCJhMyIsImE0IiwiYTUiLCJjdWJlQ291bnQiLCJyZWdsVGV4dHVyZUN1YmUiLCJmYWNlSW5wdXQiLCJyYWRpdXNfIiwiZ2V0VGV4dHVyZSIsIndyYXBwZXIiLCJ0ZXgiLCJHTF9SRU5ERVJCVUZGRVIiLCJHTF9SR0JBNCQxIiwiRk9STUFUX1NJWkVTIiwiZ2V0UmVuZGVyYnVmZmVyU2l6ZSIsIndyYXBSZW5kZXJidWZmZXJzIiwiZm9ybWF0VHlwZXMiLCJleHRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiLCJ3ZWJnbF9jb2xvcl9idWZmZXJfZmxvYXQiLCJmb3JtYXRUeXBlc0ludmVydCIsInJlbmRlcmJ1ZmZlckNvdW50IiwicmVuZGVyYnVmZmVyU2V0IiwiUkVHTFJlbmRlcmJ1ZmZlciIsInJiIiwiYmluZFJlbmRlcmJ1ZmZlciIsImRlbGV0ZVJlbmRlcmJ1ZmZlciIsImdldFRvdGFsUmVuZGVyYnVmZmVyU2l6ZSIsImNyZWF0ZVJlbmRlcmJ1ZmZlciIsInJlZ2xSZW5kZXJidWZmZXIiLCJyZW5kZXJidWZmZXJTdG9yYWdlIiwiR0xfRlJBTUVCVUZGRVIkMSIsIkdMX1JFTkRFUkJVRkZFUiQxIiwiR0xfVEVYVFVSRV8yRCQyIiwiR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YJDIiLCJHTF9DT0xPUl9BVFRBQ0hNRU5UMCQxIiwiR0xfREVQVEhfQVRUQUNITUVOVCIsIkdMX1NURU5DSUxfQVRUQUNITUVOVCIsIkdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVCIsIkdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFJDEiLCJHTF9ERVBUSF9DT01QT05FTlQkMSIsImNvbG9yVGV4dHVyZUZvcm1hdEVudW1zIiwidGV4dHVyZUZvcm1hdENoYW5uZWxzIiwidGV4dHVyZVR5cGVTaXplcyIsIkdMX0RFUFRIX0NPTVBPTkVOVDE2JDEiLCJHTF9TVEVOQ0lMX0lOREVYOCQxIiwiR0xfREVQVEhfU1RFTkNJTCQyIiwiY29sb3JSZW5kZXJidWZmZXJGb3JtYXRFbnVtcyIsInN0YXR1c0NvZGUiLCJHTF9GTE9BVCQ2IiwiR0xfQVJSQVlfQlVGRkVSJDEiLCJBdHRyaWJ1dGVSZWNvcmQiLCJub3JtYWxpemVkIiwiZGl2aXNvciIsIkdMX0ZSQUdNRU5UX1NIQURFUiIsIkdMX1ZFUlRFWF9TSEFERVIiLCJHTF9BQ1RJVkVfVU5JRk9STVMiLCJHTF9BQ1RJVkVfQVRUUklCVVRFUyIsIkdMX1JHQkEkMyIsIkdMX1VOU0lHTkVEX0JZVEUkNyIsIkdMX1BBQ0tfQUxJR05NRU5UIiwiR0xfRkxPQVQkNyIsIndyYXBSZWFkUGl4ZWxzIiwiZnJhbWVidWZmZXJTdGF0ZSIsImdsQXR0cmlidXRlcyIsInJlYWRQaXhlbHNJbXBsIiwicHJlc2VydmVEcmF3aW5nQnVmZmVyIiwiY29sb3JBdHRhY2htZW50cyIsImZyYW1lYnVmZmVyV2lkdGgiLCJmcmFtZWJ1ZmZlckhlaWdodCIsInNldEZCTyIsImZyYW1lYnVmZmVyIiwicmVhZFBpeGVsc0ZCTyIsIkNVVEVfQ09NUE9ORU5UUyIsIkdMX1VOU0lHTkVEX0JZVEUkOCIsIkFUVFJJQl9TVEFURV9QT0lOVEVSIiwiQVRUUklCX1NUQVRFX0NPTlNUQU5UIiwiRFlOX0ZVTkMkMSIsIkRZTl9QUk9QJDEiLCJEWU5fQ09OVEVYVCQxIiwiRFlOX1NUQVRFJDEiLCJEWU5fVEhVTksiLCJEWU5fQ09OU1RBTlQkMSIsIkRZTl9BUlJBWSQxIiwiU19ESVRIRVIiLCJTX0JMRU5EX0VOQUJMRSIsIlNfQkxFTkRfQ09MT1IiLCJTX0JMRU5EX0VRVUFUSU9OIiwiU19CTEVORF9GVU5DIiwiU19ERVBUSF9FTkFCTEUiLCJTX0RFUFRIX0ZVTkMiLCJTX0RFUFRIX1JBTkdFIiwiU19ERVBUSF9NQVNLIiwiU19DT0xPUl9NQVNLIiwiU19DVUxMX0VOQUJMRSIsIlNfQ1VMTF9GQUNFIiwiU19GUk9OVF9GQUNFIiwiU19MSU5FX1dJRFRIIiwiU19QT0xZR09OX09GRlNFVF9FTkFCTEUiLCJTX1BPTFlHT05fT0ZGU0VUX09GRlNFVCIsIlNfU0FNUExFX0FMUEhBIiwiU19TQU1QTEVfRU5BQkxFIiwiU19TQU1QTEVfQ09WRVJBR0UiLCJTX1NURU5DSUxfRU5BQkxFIiwiU19TVEVOQ0lMX01BU0siLCJTX1NURU5DSUxfRlVOQyIsIlNfU1RFTkNJTF9PUEZST05UIiwiU19TVEVOQ0lMX09QQkFDSyIsIlNfU0NJU1NPUl9FTkFCTEUiLCJTX1NDSVNTT1JfQk9YIiwiU19WSUVXUE9SVCIsIlNfUFJPRklMRSIsIlNfRlJBTUVCVUZGRVIiLCJTX1ZFUlQiLCJTX0ZSQUciLCJTX0VMRU1FTlRTIiwiU19QUklNSVRJVkUiLCJTX0NPVU5UIiwiU19PRkZTRVQiLCJTX0lOU1RBTkNFUyIsIlNfVkFPIiwiU19GUkFNRUJVRkZFUl9XSURUSCIsIlNfRlJBTUVCVUZGRVJfSEVJR0hUIiwiU19WSUVXUE9SVF9XSURUSCIsIlNfVklFV1BPUlRfSEVJR0hUIiwiU19EUkFXSU5HQlVGRkVSX1dJRFRIIiwiU19EUkFXSU5HQlVGRkVSIiwiU19EUkFXSU5HQlVGRkVSX0hFSUdIVCIsIk5FU1RFRF9PUFRJT05TIiwiR0xfQVJSQVlfQlVGRkVSJDIiLCJHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiQxIiwiR0xfVEVYVFVSRV8yRCQzIiwiR0xfVEVYVFVSRV9DVUJFX01BUCQyIiwiR0xfQ1VMTF9GQUNFIiwiR0xfQkxFTkQiLCJHTF9ESVRIRVIiLCJHTF9TVEVOQ0lMX1RFU1QiLCJHTF9ERVBUSF9URVNUIiwiR0xfU0NJU1NPUl9URVNUIiwiR0xfUE9MWUdPTl9PRkZTRVRfRklMTCIsIkdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSIsIkdMX1NBTVBMRV9DT1ZFUkFHRSIsIkdMX0ZMT0FUJDgiLCJHTF9GTE9BVF9WRUMyIiwiR0xfRkxPQVRfVkVDMyIsIkdMX0ZMT0FUX1ZFQzQiLCJHTF9JTlQkMyIsIkdMX0lOVF9WRUMyIiwiR0xfSU5UX1ZFQzMiLCJHTF9JTlRfVkVDNCIsIkdMX0JPT0wiLCJHTF9CT09MX1ZFQzIiLCJHTF9CT09MX1ZFQzMiLCJHTF9CT09MX1ZFQzQiLCJHTF9GTE9BVF9NQVQyIiwiR0xfRkxPQVRfTUFUMyIsIkdMX0ZMT0FUX01BVDQiLCJHTF9TQU1QTEVSXzJEIiwiR0xfU0FNUExFUl9DVUJFIiwiR0xfVFJJQU5HTEVTJDEiLCJHTF9GUk9OVCIsIkdMX0JBQ0siLCJHTF9DVyIsIkdMX0NDVyIsIkdMX01JTl9FWFQiLCJHTF9NQVhfRVhUIiwiR0xfQUxXQVlTIiwiR0xfS0VFUCIsIkdMX1pFUk8iLCJHTF9PTkUiLCJHTF9GVU5DX0FERCIsIkdMX0xFU1MiLCJHTF9GUkFNRUJVRkZFUiQyIiwiR0xfQ09MT1JfQVRUQUNITUVOVDAkMiIsImJsZW5kRnVuY3MiLCJvbmUiLCJzcmMgY29sb3IiLCJvbmUgbWludXMgc3JjIGNvbG9yIiwic3JjIGFscGhhIiwib25lIG1pbnVzIHNyYyBhbHBoYSIsImRzdCBjb2xvciIsIm9uZSBtaW51cyBkc3QgY29sb3IiLCJkc3QgYWxwaGEiLCJvbmUgbWludXMgZHN0IGFscGhhIiwiY29uc3RhbnQgY29sb3IiLCJvbmUgbWludXMgY29uc3RhbnQgY29sb3IiLCJjb25zdGFudCBhbHBoYSIsIm9uZSBtaW51cyBjb25zdGFudCBhbHBoYSIsInNyYyBhbHBoYSBzYXR1cmF0ZSIsImludmFsaWRCbGVuZENvbWJpbmF0aW9ucyIsImNvbXBhcmVGdW5jcyIsIm5ldmVyIiwibGVzcyIsIjwiLCJlcXVhbCIsIj0iLCI9PSIsIj09PSIsImxlcXVhbCIsIjw9IiwiZ3JlYXRlciIsIj4iLCJub3RlcXVhbCIsIiE9IiwiIT09IiwiZ2VxdWFsIiwiPj0iLCJhbHdheXMiLCJzdGVuY2lsT3BzIiwia2VlcCIsImluY3JlbWVudCIsImRlY3JlbWVudCIsImluY3JlbWVudCB3cmFwIiwiZGVjcmVtZW50IHdyYXAiLCJpbnZlcnQiLCJzaGFkZXJUeXBlIiwib3JpZW50YXRpb25UeXBlIiwiaXNCdWZmZXJBcmdzIiwic29ydFN0YXRlIiwiRGVjbGFyYXRpb24iLCJ0aGlzRGVwIiwiY29udGV4dERlcCIsInByb3BEZXAiLCJhcHBlbmQiLCJpc1N0YXRpYyIsImRlY2wiLCJjcmVhdGVTdGF0aWNEZWNsIiwiY3JlYXRlRHluYW1pY0RlY2wiLCJkeW4iLCJudW1BcmdzIiwic3ViRHluIiwic3ViQXJncyIsIlNDT1BFX0RFQ0wiLCJyZWdsQ29yZSIsImJ1ZmZlclN0YXRlIiwiZWxlbWVudFN0YXRlIiwidGV4dHVyZVN0YXRlIiwidW5pZm9ybVN0YXRlIiwiYXR0cmlidXRlU3RhdGUiLCJzaGFkZXJTdGF0ZSIsImRyYXdTdGF0ZSIsInRpbWVyIiwiUmVjb3JkIiwiYmxlbmRFcXVhdGlvbnMiLCJzdWJ0cmFjdCIsInJldmVyc2Ugc3VidHJhY3QiLCJleHRfYmxlbmRfbWlubWF4IiwiZXh0SW5zdGFuY2luZyIsImFuZ2xlX2luc3RhbmNlZF9hcnJheXMiLCJleHREcmF3QnVmZmVycyIsImN1cnJlbnRTdGF0ZSIsImRpcnR5IiwibmV4dFN0YXRlIiwiR0xfU1RBVEVfTkFNRVMiLCJHTF9GTEFHUyIsIkdMX1ZBUklBQkxFUyIsInByb3BOYW1lIiwic3RhdGVGbGFnIiwic25hbWUiLCJjYXAiLCJpbml0Iiwic3RhdGVWYXJpYWJsZSIsImRyYXdpbmdCdWZmZXJXaWR0aCIsImRyYXdpbmdCdWZmZXJIZWlnaHQiLCJzaGFyZWRTdGF0ZSIsImN1cnJlbnQiLCJ2YW8iLCJzaGFyZWRDb25zdGFudHMiLCJiYWNrQnVmZmVyIiwiZHJhd0J1ZmZlciIsImRyYXdDYWxsQ291bnRlciIsImNyZWF0ZVJFR0xFbnZpcm9ubWVudCIsImVudiIsInZhckNvdW50ZXIiLCJsaW5rZWROYW1lcyIsImxpbmtlZFZhbHVlcyIsInZhcnMiLCJkZWYiLCJzY29wZSIsImVudHJ5IiwiZXhpdCIsImVudHJ5VG9TdHJpbmciLCJleGl0VG9TdHJpbmciLCJnbG9iYWxCbG9jayIsInByb2NlZHVyZXMiLCJwcm9jIiwiY291bnQiLCJib2R5VG9TdHJpbmciLCJjb25kIiwidGhlbkJsb2NrIiwiZWxzZUJsb2NrIiwidGhlblRvU3RyaW5nIiwiZWxzZVRvU3RyaW5nIiwiZWxzZSIsImVsc2VDbGF1c2UiLCJjb21waWxlIiwiY3JlYXRlRW52aXJvbm1lbnQiLCJiYXRjaElkIiwiU0hBUkVEIiwic2hhcmVkIiwiQ0hFQ0siLCJjb21tYW5kU3RyIiwiYXNzZXJ0IiwibmV4dFZhcnMiLCJjdXJyZW50VmFycyIsInZhcmlhYmxlIiwiY29uc3RhbnRzIiwiaW52b2tlIiwiYXJnTGlzdCIsImF0dHJpYkNhY2hlIiwic2NvcGVBdHRyaWJzIiwic2NvcGVBdHRyaWIiLCJwYXJzZUFyZ3VtZW50cyIsInN0YXRpY09wdGlvbnMiLCJkeW5hbWljT3B0aW9ucyIsIktFWV9OQU1FUyIsImNoZWNrS2V5cyIsImF0dHJpYkxvY2F0aW9ucyIsInN0YXRpY0F0dHJpYnV0ZXMiLCJzQXR0cmlidXRlcyIsImJpbmRpbmdzIiwicGFyc2VBdHRyaWJMb2NhdGlvbnMiLCJnZXRGcmFtZWJ1ZmZlciIsIkZSQU1FQlVGRkVSIiwiQ09OVEVYVCIsIkZSQU1FQlVGRkVSX0ZVTkMiLCJGUkFNRUJVRkZFUl9TVEFURSIsInBhcnNlRnJhbWVidWZmZXIiLCJ2aWV3cG9ydEFuZFNjaXNzb3IiLCJwYXJzZUJveCIsIkJPWF9XIiwiQk9YX0giLCJkeW5Cb3giLCJCT1giLCJCT1hfWCIsIkJPWF9ZIiwicHJldlZpZXdwb3J0IiwiVklFV1BPUlQiLCJzY2lzc29yX2JveCIsInBhcnNlVmlld3BvcnRTY2lzc29yIiwiZ2V0RWxlbWVudHMiLCJFTEVNRU5UUyIsIklTX0JVRkZFUl9BUkdTIiwiRUxFTUVOVF9TVEFURSIsImVsZW1lbnREZWZuIiwiZWxlbWVudFN0cmVhbSIsImlmdGUiLCJwYXJzZUVsZW1lbnRzIiwicGFyc2VQYXJhbSIsImlzT2Zmc2V0IiwiT0ZGU0VUIiwiZHluVmFsdWUiLCJwcmltaXRpdmUiLCJkeW5QcmltaXRpdmUiLCJQUklNX1RZUEVTIiwicHJpbSIsInBhcnNlUHJpbWl0aXZlIiwiZHluQ291bnQiLCJNSVNTSU5HIiwiRFlOQU1JQyIsInBhcnNlVmVydENvdW50IiwiaW5zdGFuY2VzIiwicGFyc2VEcmF3IiwiU1RBVEUiLCJwYXJzZVN0YXRpYyIsInBhcnNlRHluYW1pYyIsIkNPTVBBUkVfRlVOQ1MiLCJCTEVORF9GVU5DUyIsIlNSQ19SR0IiLCJTUkNfQUxQSEEiLCJCTEVORF9FUVVBVElPTlMiLCJSR0IiLCJBTFBIQSIsImNoZWNrUHJvcCIsImNtcCIsImZhaWwiLCJ6ZmFpbCIsInpwYXNzIiwiU1RFTkNJTF9PUFMiLCJzYW1wbGVWYWx1ZSIsInNhbXBsZUludmVydCIsInBhcnNlR0xTdGF0ZSIsInBhcnNlU2hhZGVyIiwicHJvZ1ZhciIsImZyYWdJZCIsIlNIQURFUl9TVEFURSIsInByb2dEZWYiLCJwYXJzZVByb2dyYW0iLCJjb3B5Qm94IiwiZGVmbiIsInNjb3BlVkFPIiwiZHJhd1ZBTyIsInVzZVZBTyIsInByb2ZpbGVFbmFibGUiLCJwYXJzZVByb2ZpbGUiLCJzdGF0aWNVbmlmb3JtcyIsImR5bmFtaWNVbmlmb3JtcyIsIlVOSUZPUk1TIiwicmVnbFR5cGUiLCJwYXJzZVVuaWZvcm1zIiwiZ2V0VkFPIiwiY3JlYXRlVkFPIiwidmFvUmVmIiwicGFyc2VWQU8iLCJzdGF0aWNCaW5kaW5ncyIsImR5bmFtaWNBdHRyaWJ1dGVzIiwiYXR0cmlidXRlRGVmcyIsImF0dHJpYnV0ZSIsImdldEJ1ZmZlciIsIlZBTElEX0tFWVMiLCJkdHlwZSIsImlzU3RyZWFtIiwiVkFMVUUiLCJCVUZGRVJfU1RBVEUiLCJkZWZhdWx0UmVjb3JkIiwiQlVGRkVSIiwiVFlQRSIsImVtaXRSZWFkUmVjb3JkIiwicGFyc2VBdHRyaWJ1dGVzIiwic3RhdGljQ29udGV4dCIsImR5bmFtaWNDb250ZXh0IiwicGFyc2VDb250ZXh0IiwiZW1pdENvbnRleHQiLCJjb250ZXh0RW50ZXIiLCJlbWl0UG9sbEZyYW1lYnVmZmVyIiwic2tpcENoZWNrIiwiRVhUX0RSQVdfQlVGRkVSUyIsIkdMIiwiTkVYVCIsIkRSQVdfQlVGRkVSUyIsIkJBQ0tfQlVGRkVSIiwiZW1pdFBvbGxTdGF0ZSIsIkNVUlJFTlRfVkFSUyIsIk5FWFRfVkFSUyIsIkNVUlJFTlRfU1RBVEUiLCJORVhUX1NUQVRFIiwiQ1VSUkVOVCIsImVtaXRTZXRPcHRpb25zIiwiZmxhZyIsImluamVjdEV4dGVuc2lvbnMiLCJpbnN0YW5jaW5nIiwiZW1pdFByb2ZpbGUiLCJ1c2VTY29wZSIsImluY3JlbWVudENvdW50ZXIiLCJDUFVfU1RBUlQiLCJRVUVSWV9DT1VOVEVSIiwiVVNFX1BST0ZJTEUiLCJTVEFUUyIsIlRJTUVSIiwicHJvZmlsZUFyZyIsInBlcmZDb3VudGVyIiwiZW1pdFByb2ZpbGVTdGFydCIsImVtaXRQcm9maWxlRW5kIiwic2NvcGVQcm9maWxlIiwiZW1pdEF0dHJpYnV0ZXMiLCJBVFRSSUJVVEUiLCJMT0NBVElPTiIsIkJJTkRJTkciLCJDT05TVF9DT01QT05FTlRTIiwiQ09NTU9OX0tFWVMiLCJlbWl0QnVmZmVyIiwiU0laRSIsIkRJVklTT1IiLCJlbWl0Q29uc3RhbnQiLCJlbWl0QmluZEF0dHJpYnV0ZSIsInR5cGVMZW5ndGgiLCJlbWl0VW5pZm9ybXMiLCJpbmZpeCIsInVuaWZvcm0iLCJURVhfVkFMVUUiLCJNQVRfVkFMVUUiLCJkaW0iLCJlbWl0Q2hlY2siLCJjaGVja1R5cGUiLCJjaGVja1ZlY3RvciIsImNoZWNrVGV4dHVyZSIsInVucm9sbCIsIlRFWCIsIm1hdFNpemUiLCJTVE9SQUdFIiwiZW1pdERyYXciLCJvdXRlciIsImlubmVyIiwiRFJBV19TVEFURSIsImRyYXdPcHRpb25zIiwiY29udGV4dER5bmFtaWMiLCJlbWl0RWxlbWVudHMiLCJlbWl0VmFsdWUiLCJJTlNUQU5DRVMiLCJFWFRfSU5TVEFOQ0lORyIsIlBSSU1JVElWRSIsIkNPVU5UIiwiZW1pdENvdW50IiwiRUxFTUVOVF9UWVBFIiwiZWxlbWVudHNTdGF0aWMiLCJlbWl0SW5zdGFuY2luZyIsImVtaXRSZWd1bGFyIiwiY3JlYXRlQm9keSIsImVtaXRCb2R5IiwicGFyZW50RW52IiwiZW1pdERyYXdCb2R5IiwiZW1pdEJhdGNoRHluYW1pY1NoYWRlckJvZHkiLCJlbWl0QmF0Y2hCb2R5IiwiQkFUQ0hfSUQiLCJQUk9QUyIsImlzSW5uZXJEZWZuIiwiaXNPdXRlckRlZm4iLCJuZWVkc0NvbnRleHQiLCJuZWVkc0ZyYW1lYnVmZmVyIiwicHJvZ0NhY2hlIiwiUFJPR1JBTSIsIlBST0dfSUQiLCJDQUNIRURfUFJPQyIsInNwbGF0T2JqZWN0IiwiaXNEeW5hbWljT2JqZWN0IiwiZ2xvYmFscyIsIm9iamVjdFJlZiIsImRlcHMiLCJwcm9jcyIsImNvbW1vbiIsIklOU1RBTkNJTkciLCJvZXNfdmVydGV4X2FycmF5X29iamVjdCIsImRyYXdDYWNoZSIsImVtaXREcmF3UHJvYyIsInNhdmVTaGFkZXIiLCJlbWl0U2NvcGVQcm9jIiwiYmF0Y2giLCJwcm9nRGVmbiIsImJhdGNoQ2FjaGUiLCJlbWl0QmF0Y2hQcm9jIiwiR0xfUVVFUllfUkVTVUxUX0VYVCIsIkdMX1FVRVJZX1JFU1VMVF9BVkFJTEFCTEVfRVhUIiwiR0xfVElNRV9FTEFQU0VEX0VYVCIsImNyZWF0ZVRpbWVyIiwiZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5IiwicXVlcnlQb29sIiwiZnJlZVF1ZXJ5IiwicXVlcnkiLCJwZW5kaW5nUXVlcmllcyIsIlBlbmRpbmdTdGF0cyIsInN0YXJ0UXVlcnlJbmRleCIsImVuZFF1ZXJ5SW5kZXgiLCJzdW0iLCJwZW5kaW5nU3RhdHNQb29sIiwiZnJlZVBlbmRpbmdTdGF0cyIsInBlbmRpbmdTdGF0cyIsInB1c2hTY29wZVN0YXRzIiwidGltZVN1bSIsInF1ZXJ5UHRyIiwiYmVnaW5RdWVyeSIsImNyZWF0ZVF1ZXJ5RVhUIiwiYmVnaW5RdWVyeUVYVCIsImVuZFF1ZXJ5IiwiZW5kUXVlcnlFWFQiLCJxdWVyeVRpbWUiLCJnZXRRdWVyeU9iamVjdEVYVCIsInN0YXJ0UHRyIiwiZW5kUHRyIiwiZ3B1VGltZSIsImdldE51bVBlbmRpbmdRdWVyaWVzIiwiZGVsZXRlUXVlcnlFWFQiLCJHTF9DT0xPUl9CVUZGRVJfQklUIiwiR0xfREVQVEhfQlVGRkVSX0JJVCIsIkdMX1NURU5DSUxfQlVGRkVSX0JJVCIsIkdMX0FSUkFZX0JVRkZFUiIsIkNPTlRFWFRfTE9TVF9FVkVOVCIsIkNPTlRFWFRfUkVTVE9SRURfRVZFTlQiLCJEWU5fUFJPUCIsIkRZTl9DT05URVhUIiwiRFlOX1NUQVRFIiwiaGF5c3RhY2siLCJuZWVkbGUiLCJnZXRDb250ZXh0QXR0cmlidXRlcyIsImNvbnRleHRMb3N0IiwiaXNDb250ZXh0TG9zdCIsImV4dGVuc2lvblN0YXRlIiwidHJ5TG9hZEV4dGVuc2lvbiIsIm5hbWVfIiwiZ2V0RXh0ZW5zaW9uIiwiY3JlYXRlRXh0ZW5zaW9uQ2FjaGUiLCJzdHJpbmdJZHMiLCJzdHJpbmdWYWx1ZXMiLCIiLCJzdGF0cyQkMSIsInZhb0NvdW50IiwiYnVmZmVyQ291bnQiLCJlbGVtZW50c0NvdW50IiwiZnJhbWVidWZmZXJDb3VudCIsInNoYWRlckNvdW50IiwiU1RBUlRfVElNRSIsIldJRFRIIiwiSEVJR0hUIiwiZGVzdHJveUJ1ZmZlciIsImJ1ZmZlclNldCIsIlJFR0xCdWZmZXIiLCJ1c2FnZSIsInBlcnNpc3RlbnREYXRhIiwiYmluZEJ1ZmZlciIsInN0cmVhbVBvb2wiLCJpbml0QnVmZmVyRnJvbVR5cGVkQXJyYXkiLCJpbml0QnVmZmVyRnJvbURhdGEiLCJwZXJzaXN0IiwiZmxhdERhdGEiLCJ0eXBlZERhdGEiLCJkZWxldGVCdWZmZXIiLCJnZXRUb3RhbEJ1ZmZlclNpemUiLCJkZWZlckluaXQiLCJwZXJzaXN0ZW50IiwicmVnbEJ1ZmZlciIsInNldFN1YkRhdGEiLCJidWZmZXJTdWJEYXRhIiwiX2J1ZmZlciIsInN1YmRhdGEiLCJvZmZzZXRfIiwiY3JlYXRlU3RyZWFtIiwiZGVzdHJveVN0cmVhbSIsInN0cmVhbSQkMSIsIl9pbml0QnVmZmVyIiwid3JhcEJ1ZmZlclN0YXRlIiwiTlVNX0FUVFJJQlVURVMiLCJhdHRyaWJ1dGVCaW5kaW5ncyIsInZhb1NldCIsImN1cnJlbnRWQU8iLCJ0YXJnZXRWQU8iLCJleHRWQU8iLCJfYXR0ciIsIlJFR0xWQU8iLCJ1cGRhdGVWQU8iLCJidWZVcGRhdGVkIiwibmF0dHJpYnV0ZXMiLCJzcGVjIiwicmVjIiwiYnVmZmVycyIsIl92YW8iLCJkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkiLCJzZXRWQU8iLCJiaW5kVmVydGV4QXJyYXlPRVMiLCJiaW5kQXR0cnMiLCJleHRpIiwiZXh0SW5zdGFuY2VkIiwiZW5hYmxlVmVydGV4QXR0cmliQXJyYXkiLCJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwib2ZmZnNldCIsInZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSIsInZlcnRleEF0dHJpYjRmIiwiY3JlYXRlVmVydGV4QXJyYXlPRVMiLCJkZWxldGVWZXJ0ZXhBcnJheU9FUyIsIndyYXBBdHRyaWJ1dGVTdGF0ZSIsImVsZW1lbnRTZXQiLCJlbGVtZW50Q291bnQiLCJlbGVtZW50VHlwZXMiLCJSRUdMRWxlbWVudEJ1ZmZlciIsInByaW1UeXBlIiwidmVydENvdW50Iiwib2VzX2VsZW1lbnRfaW5kZXhfdWludCIsImluaXRFbGVtZW50cyIsInByZWRpY3RlZFR5cGUiLCJkZXN0cm95RWxlbWVudHMiLCJyZWdsRWxlbWVudHMiLCJfZWxlbWVudHMiLCJ3cmFwRWxlbWVudHNTdGF0ZSIsImZyYWdTaGFkZXJzIiwidmVydFNoYWRlcnMiLCJBY3RpdmVJbmZvIiwibG9jYXRpb24iLCJpbnNlcnRBY3RpdmVJbmZvIiwiZ2V0U2hhZGVyIiwiY3JlYXRlU2hhZGVyIiwic2hhZGVyU291cmNlIiwiY29tcGlsZVNoYWRlciIsInByb2dyYW1DYWNoZSIsInByb2dyYW1MaXN0IiwiUFJPR1JBTV9DT1VOVEVSIiwiUkVHTFByb2dyYW0iLCJ2ZXJ0SWQiLCJ1bmlmb3Jtc0NvdW50IiwiYXR0cmlidXRlc0NvdW50IiwibGlua1Byb2dyYW0iLCJhdHRyaWJ1dGVMb2NhdGlvbnMiLCJjcmVhdGVQcm9ncmFtIiwiYXR0YWNoU2hhZGVyIiwiYmluZEF0dHJpYkxvY2F0aW9uIiwibnVtVW5pZm9ybXMiLCJnZXRBY3RpdmVVbmlmb3JtIiwiZ2V0VW5pZm9ybUxvY2F0aW9uIiwibnVtQXR0cmlidXRlcyIsImdldEFjdGl2ZUF0dHJpYiIsImdldEF0dHJpYkxvY2F0aW9uIiwiZ2V0TWF4VW5pZm9ybXNDb3VudCIsImdldE1heEF0dHJpYnV0ZXNDb3VudCIsImRlbGV0ZVNoYWRlciIsImRlbGV0ZVByb2dyYW0iLCJwcmV2UHJvZ3JhbSIsIndyYXBTaGFkZXJTdGF0ZSIsInJlbmRlcmJ1ZmZlclN0YXRlIiwiY3VyIiwiY29sb3JUZXh0dXJlRm9ybWF0cyIsImNvbG9yUmVuZGVyYnVmZmVyRm9ybWF0cyIsImNvbG9yVHlwZXMiLCJGcmFtZWJ1ZmZlckF0dGFjaG1lbnQiLCJpbmNSZWZBbmRDaGVja1NoYXBlIiwidHciLCJ0aCIsImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwicGFyc2VBdHRhY2htZW50IiwiYWxsb2NBdHRhY2htZW50IiwiaXNUZXh0dXJlIiwidW53cmFwQXR0YWNobWVudCIsInJlc2l6ZUF0dGFjaG1lbnQiLCJmcmFtZWJ1ZmZlclNldCIsIlJFR0xGcmFtZWJ1ZmZlciIsImRlcHRoQXR0YWNobWVudCIsInN0ZW5jaWxBdHRhY2htZW50IiwiZGVwdGhTdGVuY2lsQXR0YWNobWVudCIsImRlY0ZCT1JlZnMiLCJ1cGRhdGVGcmFtZWJ1ZmZlciIsInN0YXR1cyIsImNyZWF0ZUZCTyIsInJlZ2xGcmFtZWJ1ZmZlciIsIm5lZWRzRGVwdGgiLCJuZWVkc1N0ZW5jaWwiLCJjb2xvckJ1ZmZlciIsImNvbG9yVGV4dHVyZSIsImNvbG9yRm9ybWF0IiwiY29sb3JUeXBlIiwiY29sb3JDb3VudCIsImRlcHRoQnVmZmVyIiwic3RlbmNpbEJ1ZmZlciIsImRlcHRoU3RlbmNpbEJ1ZmZlciIsImRlcHRoU3RlbmNpbFRleHR1cmUiLCJjb2xvcnMiLCJkZXB0aFRleHR1cmUiLCJkZXB0aFN0ZW5jaWwiLCJjb21tb25Db2xvckF0dGFjaG1lbnRTaXplIiwiY29sb3JBdHRhY2htZW50U2l6ZSIsIl9mcmFtZWJ1ZmZlciIsInVzZSIsInJlZ2xGcmFtZWJ1ZmZlckN1YmUiLCJjb2xvckN1YmVzIiwiY3ViZU1hcFBhcmFtcyIsImN1YmUiLCJmYiIsIndyYXBGQk9TdGF0ZSIsInJhZkNhbGxiYWNrcyIsImxvc3NDYWxsYmFja3MiLCJyZXN0b3JlQ2FsbGJhY2tzIiwiZGVzdHJveUNhbGxiYWNrcyIsImFjdGl2ZVJBRiIsImhhbmRsZVJBRiIsInN0YXJ0UkFGIiwic3RvcFJBRiIsImhhbmRsZUNvbnRleHRMb3NzIiwiaGFuZGxlQ29udGV4dFJlc3RvcmVkIiwiY29tcGlsZVByb2NlZHVyZSIsInNlcGFyYXRlRHluYW1pYyIsInVzZUFycmF5cyIsInN0YXRpY0l0ZW1zIiwiZHluYW1pY0l0ZW1zIiwib3B0aW9uIiwib3BCYWNrIiwib3BGcm9udCIsImZsYXR0ZW5OZXN0ZWRPcHRpb25zIiwiY3B1VGltZSIsImNvbXBpbGVkIiwiRU1QVFlfQVJSQVkiLCJyZXNlcnZlIiwiY2xlYXJJbXBsIiwiY2xlYXJGbGFncyIsImNsZWFyRGVwdGgiLCJjbGVhclN0ZW5jaWwiLCJwZW5kaW5nQ2FuY2VsIiwicG9sbFZpZXdwb3J0Iiwic2Npc3NvckJveCIsImZyYW1lYnVmZmVyX3JlZ2xUeXBlIiwiZnJhbWVidWZmZXJDdWJlIiwiY2FsbGJhY2tzIiwiaGFzRXh0ZW5zaW9uIiwiX2dsIiwiX3JlZnJlc2giLCJjcmVhdGVSRUdMIiwiR0xPQkFMIiwic3RhcnRkZW5vbSIsInNpZ25pZmljYW5jZSIsIm92ZXJmbG93Iiwib2xkUmFuZG9tIiwiQVJDNCIsImtleWxlbiIsIm1lIiwibWl4a2V5Iiwic21lYXIiLCJzdHJpbmdzZWVkIiwidG9zdHJpbmciLCJhcmM0IiwidHlwIiwiZW50cm9weSIsImNyeXB0byIsImdldFJhbmRvbVZhbHVlcyIsInNjcmVlbiIsImF1dG9zZWVkIiwicmVzZXRHbG9iYWwiLCJGMiIsIkcyIiwiRzMiLCJGNCIsIkc0IiwicmFuZG9tT3JTZWVkIiwiczAiLCJzMSIsInMyIiwibWFzaCIsImFsZWEiLCJidWlsZFBlcm11dGF0aW9uVGFibGUiLCJwZXJtIiwicGVybU1vZDEyIiwiYXV4IiwiZ3JhZDMiLCJncmFkNCIsInhpbiIsInlpbiIsImkxIiwiajEiLCJuMCIsIm4xIiwibjIiLCJpaSIsImpqIiwidDAiLCJnaTAiLCJnaTEiLCJnaTIiLCJ6aW4iLCJuMyIsImsxIiwiaTIiLCJqMiIsImsyIiwiejAiLCJ6MSIsInoyIiwiejMiLCJrayIsImdpMyIsIm40IiwibDEiLCJsMiIsImkzIiwiajMiLCJrMyIsImwzIiwidzAiLCJyYW5reCIsInJhbmt5IiwicmFua3oiLCJyYW5rdyIsIncxIiwidzIiLCJ3MyIsIno0IiwidzQiLCJsbCIsInQ0IiwiZ2k0IiwiX2J1aWxkUGVybXV0YXRpb25UYWJsZSIsIl9zbGljZWRUb0FycmF5IiwiaXRlcmF0b3IiLCJfbiIsIl9kIiwiX2UiLCJfcyIsIl9pIiwiZG9uZSIsInNsaWNlSXRlcmF0b3IiLCJUQVUiLCJtYXBUb0VsbGlwc2UiLCJfcmVmIiwiY29zcGhpIiwic2lucGhpIiwiY2VudGVyeCIsImNlbnRlcnkiLCJhcHByb3hVbml0QXJjIiwiYW5nMSIsImFuZzIiLCJ2ZWN0b3JBbmdsZSIsInV4IiwidXkiLCJfcmVmMiIsIl9yZWYyJHhBeGlzUm90YXRpb24iLCJfcmVmMiRsYXJnZUFyY0ZsYWciLCJfcmVmMiRzd2VlcEZsYWciLCJweHAiLCJweXAiLCJfZ2V0QXJjQ2VudGVyIiwicnhzcSIsInJ5c3EiLCJweHBzcSIsInB5cHNxIiwicmFkaWNhbnQiLCJjZW50ZXJ4cCIsImNlbnRlcnlwIiwidngxIiwidnkxIiwidngyIiwidnkyIiwiZ2V0QXJjQ2VudGVyIiwiX2dldEFyY0NlbnRlcjIiLCJzZWdtZW50cyIsImN1cnZlIiwiX21hcFRvRWxsaXBzZSIsIl9tYXBUb0VsbGlwc2UyIiwiX21hcFRvRWxsaXBzZTMiLCJiZXppZXIiLCJub3JtIiwidG1wMSIsInRtcDIiLCJ0bXAzIiwic3ZnIiwicGVuIiwiYmV6aWVyVG8iLCLPgCIsIl8xMjAiLCJyYWRpYW5zIiwibGFyZ2VfYXJjX2ZsYWciLCJzd2VlcF9mbGFnIiwiZjEiLCJmMiIsInh5Iiwicm90YXRlIiwicngyIiwicnkyIiwiYXNpbiIsImYyb2xkIiwieDJvbGQiLCJ5Mm9sZCIsImh4IiwiaHkiLCJyb3QiLCJkZWdyZXNzIiwicmVjaXBlcyIsImVuZENvbG9yIiwiZW5kQW5nbGUiLCJoYXBweUJlYW5zIiwiaGFsZldhdGVybWVsb24iLCJjb2xzIiwicm93cyIsInNjYWxlTWluIiwic2NhbGVNYXgiLCJmcmVxIiwiYW1wIiwiYW5pbWF0ZVRoaWNrbmVzcyIsIm1hbnVhbFRoaWNrbmVzcyIsInBhbmUiLCJidXR0Iiwic3F1YXJlIiwiY3JlYXRlUGFuZSIsIm51bUNlbGxzIiwiZ3JpZHciLCJncmlkaCIsImNlbGx3IiwiY2VsbGgiLCJtYXJneCIsIm1hcmd5IiwidGhpY2tuZXNzIiwidHJhbnNsYXRlIiwiZ2V0R3JhZGllbnQiLCJnZXRSYWRpYWxHcmFkaWVudCIsImdyYWRpZW50IiwiY3JlYXRlUmFkaWFsR3JhZGllbnQiLCJhZGRDb2xvclN0b3AiLCJjcmVhdGVMaW5lYXJHcmFkaWVudCIsIkNBTlZBU19TS0VUQ0hfREVGQVVMVF9TVE9SQUdFX0tFWSJdLCJtYXBwaW5ncyI6IkNBQUEsV0FBQSxPQUFBLFNBQUFBLEVBQUFDLEVBQUFDLEVBQUFDLEdBQUEsU0FBQUMsRUFBQUMsRUFBQUMsR0FBQSxJQUFBSixFQUFBRyxHQUFBLENBQUEsSUFBQUosRUFBQUksR0FBQSxDQUFBLElBQUFFLEVBQUEsbUJBQUFDLFNBQUFBLFFBQUEsSUFBQUYsR0FBQUMsRUFBQSxPQUFBQSxFQUFBRixHQUFBLEdBQUEsR0FBQUksRUFBQSxPQUFBQSxFQUFBSixHQUFBLEdBQUEsSUFBQUssRUFBQSxJQUFBQyxNQUFBLHVCQUFBTixFQUFBLEtBQUEsTUFBQUssRUFBQUUsS0FBQSxtQkFBQUYsRUFBQSxJQUFBRyxFQUFBWCxFQUFBRyxHQUFBLENBQUFTLFFBQUEsSUFBQWIsRUFBQUksR0FBQSxHQUFBVSxLQUFBRixFQUFBQyxRQUFBLFNBQUFkLEdBQUEsT0FBQUksRUFBQUgsRUFBQUksR0FBQSxHQUFBTCxJQUFBQSxJQUFBYSxFQUFBQSxFQUFBQyxRQUFBZCxFQUFBQyxFQUFBQyxFQUFBQyxHQUFBLE9BQUFELEVBQUFHLEdBQUFTLFFBQUEsSUFBQSxJQUFBTCxFQUFBLG1CQUFBRCxTQUFBQSxRQUFBSCxFQUFBLEVBQUFBLEVBQUFGLEVBQUFhLE9BQUFYLElBQUFELEVBQUFELEVBQUFFLElBQUEsT0FBQUQsR0FBQSxFQUFBLENB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QyxNQUFBLFVBQ0FDLGVBQUEsVUFDQUMsU0FBQSxVQUNBQyxRQUFBLFVBQ0FDLEtBQUEsVUFDQUMsU0FBQSxVQUNBQyxTQUFBLFVBQ0FDLGNBQUEsVUFDQUMsU0FBQSxVQUNBQyxVQUFBLFVBQ0FDLFNBQUEsVUFDQUMsVUFBQSxVQUNBQyxZQUFBLFVBQ0FDLGVBQUEsVUFDQUMsV0FBQSxVQUNBQyxXQUFBLFVBQ0FDLFFBQUEsVUFDQUMsV0FBQSxVQUNBQyxhQUFBLFVBQ0FDLGNBQUEsVUFDQUMsY0FBQSxVQUNBQyxjQUFBLFVBQ0FDLGNBQUEsVUFDQUMsV0FBQSxVQUNBQyxTQUFBLFVBQ0FDLFlBQUEsVUFDQUMsUUFBQSxVQUNBQyxRQUFBLFVBQ0FDLFdBQUEsVUFDQUMsVUFBQSxVQUNBQyxZQUFBLFVBQ0FDLFlBQUEsVUFDQUMsUUFBQSxVQUNBQyxVQUFBLFVBQ0FDLFdBQUEsVUFDQUMsS0FBQSxVQUNBQyxVQUFBLFVBQ0FDLEtBQUEsVUFDQUMsTUFBQSxVQUNBQyxZQUFBLFVBQ0FDLEtBQUEsVUFDQUMsU0FBQSxVQUNBQyxRQUFBLFVBQ0FDLFVBQUEsVUFDQUMsT0FBQSxVQUNBQyxNQUFBLFVBQ0FDLE1BQUEsVUFDQUMsU0FBQSxVQUNBQyxjQUFBLFVBQ0FDLFVBQUEsVUFDQUMsYUFBQSxVQUNBQyxVQUFBLFVBQ0FDLFdBQUEsVUFDQUMsVUFBQSxVQUNBQyxxQkFBQSxVQUNBQyxVQUFBLFVBQ0FDLFdBQUEsVUFDQUMsVUFBQSxVQUNBQyxVQUFBLFVBQ0FDLFlBQUEsVUFDQUMsY0FBQSxVQUNBQyxhQUFBLFVBQ0FDLGVBQUEsVUFDQUMsZUFBQSxVQUNBQyxlQUFBLFVBQ0FDLFlBQUEsVUFDQUMsS0FBQSxVQUNBQyxVQUFBLFVBQ0FDLE1BQUEsVUFDQUMsUUFBQSxVQUNBQyxPQUFBLFVBQ0FDLGlCQUFBLFVBQ0FDLFdBQUEsVUFDQUMsYUFBQSxVQUNBQyxhQUFBLFVBQ0FDLGVBQUEsVUFDQUMsZ0JBQUEsVUFDQUMsa0JBQUEsVUFDQUMsZ0JBQUEsVUFDQUMsZ0JBQUEsVUFDQUMsYUFBQSxVQUNBQyxV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QixJQUFLLEtBQ3ZCLENBQUUsZ0JBQWlCLEtBQU0sTUFHekIsQ0FBRSxLQUFNLEdBQUksSUFDWixDQUFFLEtBQU0sR0FBSSxLQUNaLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxNQUFPLElBQUssS0FDZCxDQUFFLE1BQU8sSUFBSyxLQUNkLENBQUUsTUFBTyxJQUFLLEtBR2QsQ0FBRSxLQUFNLElBQUssTUFDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sR0FBSSxLQUNaLENBQUUsS0FBTSxHQUFJLElBQ1osQ0FBRSxLQUFNLEdBQUksSUFDWixDQUFFLE1BQU8sR0FBSSxJQUNiLENBQUUsTUFBTyxLQUFNLE1BQ2YsQ0FBRSxNQUFPLEtBQU0sTUFDZixDQUFFLEtBQU0sSUFBTSxNQUNkLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxNQUFPLElBQUssTUFDZCxDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsTUFBTyxJQUFLLEtBQ2QsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sR0FBSSxLQUNaLENBQUUsS0FBTSxHQUFJLElBQ1osQ0FBRSxLQUFNLEdBQUksSUFDWixDQUFFLE1BQU8sR0FBSSxJQUNiLENBQUUsTUFBTyxHQUFJLElBQ2IsQ0FBRSxNQUFPLEdBQUksSUFDYixDQUFFLEtBQU0sSUFBSyxNQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFF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UUFBQUEsRUFDQUcsUUFBQUEsRUFDQUQsUUFBQUEsRUFFQUUsUUFBQUEsRUFDQStCLFFBc2NBLFNBQUE1NUQsR0FDQSxPQUFBeTNELEVBQUFJLEVBQUE3M0QsS0F0Y0E2NUQsUUF5Y0EsU0FBQTc1RCxHQUNBLE9BQUE0M0QsRUFBQUMsRUFBQTczRCxNQStCQSxJQUFBazRELEVBQUEsQ0FDQXQyQixVQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLGFBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsS0FBQSxDQUFBLEVBQUEsSUFBQSxLQUNBQyxXQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLE1BQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsTUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxPQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0ExWSxNQUFBLENBQUEsRUFBQSxFQUFBLEdBQ0EyWSxlQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLEtBQUEsQ0FBQSxFQUFBLEVBQUEsS0FDQUMsV0FBQSxDQUFBLElBQUEsR0FBQSxLQUNBQyxNQUFBLENBQUEsSUFBQSxHQUFBLElBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLEdBQUEsSUFBQSxLQUNBQyxXQUFBLENBQUEsSUFBQSxJQUFBLEdBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsSUFDQUMsTUFBQSxDQUFBLElBQUEsSUFBQSxJQUNBQyxlQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFNBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsUUFBQSxDQUFBLElBQUEsR0FBQSxJQUNBQyxLQUFBLENBQUEsRUFBQSxJQUFBLEtBQ0FDLFNBQUEsQ0FBQSxFQUFBLEVBQUEsS0FDQUMsU0FBQSxDQUFBLEVBQUEsSUFBQSxLQUNBQyxjQUFBLENBQUEsSUFBQSxJQUFBLElBQ0FDLFNBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLEVBQUEsSUFBQSxHQUNBQyxTQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsWUFBQSxDQUFBLElBQUEsRUFBQSxLQUNBQyxlQUFBLENBQUEsR0FBQSxJQUFBLElBQ0FDLFdBQUEsQ0FBQSxJQUFBLElBQUEsR0FDQUMsV0FBQSxDQUFBLElBQUEsR0FBQSxLQUNBQyxRQUFBLENBQUEsSUFBQSxFQUFBLEdBQ0FDLFdBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsYUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxjQUFBLENBQUEsR0FBQSxHQUFBLEtBQ0FDLGNBQUEsQ0FBQSxHQUFBLEdBQUEsSUFDQUMsY0FBQSxDQUFBLEdBQUEsR0FBQSxJQUNBQyxjQUFBLENBQUEsRUFBQSxJQUFBLEtBQ0FDLFdBQUEsQ0FBQSxJQUFBLEVBQUEsS0FDQUMsU0FBQSxDQUFBLElBQUEsR0FBQSxLQUNBQyxZQUFBLENBQUEsRUFBQSxJQUFBLEtBQ0FDLFFBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsUUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxXQUFBLENBQUEsR0FBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLEdBQUEsSUFDQUMsWUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxZQUFBLENBQUEsR0FBQSxJQUFBLElBQ0FDLFFBQUEsQ0FBQSxJQUFBLEVBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxXQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLEtBQUEsQ0FBQSxJQUFBLElBQUEsR0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxJQUNBQyxLQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLE1BQUEsQ0FBQSxFQUFBLElBQUEsR0FDQUMsWUFBQSxDQUFBLElBQUEsSUFBQSxJQUNBQyxLQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFNBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsUUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsSUFBQSxHQUFBLElBQ0FDLE9BQUEsQ0FBQSxHQUFBLEVBQUEsS0FDQUMsTUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxNQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFNBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsY0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsSUFBQSxJQUFBLEdBQ0FDLGFBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxXQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMscUJBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxXQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxZQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLGNBQUEsQ0FBQSxHQUFBLElBQUEsS0FDQUMsYUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxlQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLGVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsZUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxZQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLEtBQUEsQ0FBQSxFQUFBLElBQUEsR0FDQUMsVUFBQSxDQUFBLEdBQUEsSUFBQSxJQUNBQyxNQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFFBQUEsQ0FBQSxJQUFBLEVBQUEsS0FDQUMsT0FBQSxDQUFBLElBQUEsRUFBQSxHQUNBQyxpQkFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxXQUFBLENBQUEsRUFBQSxFQUFBLEtBQ0FDLGFBQUEsQ0FBQSxJQUFBLEdBQUEsS0FDQUMsYUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxlQUFBLENBQUEsR0FBQSxJQUFBLEtBQ0FDLGdCQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLGtCQUFBLENBQUEsRUFBQSxJQUFBLEtBQ0FDLGdCQUFBLENBQUEsR0FBQSxJQUFBLEtBQ0FDLGdCQUFBLENBQUEsSUFBQSxHQUFBLEtBQ0FDLGFBQUEsQ0FBQSxHQUFBLEdBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFNBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsWUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxLQUFBLENBQUEsRUFBQSxFQUFBLEtBQ0FDLFFBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsTUFBQSxDQUFBLElBQUEsSUFBQSxHQUNBQyxVQUFBLENBQUEsSUFBQSxJQUFBLElBQ0FDLE9BQUEsQ0FBQSxJQUFBLElBQUEsR0FDQUMsVUFBQSxDQUFBLElBQUEsR0FBQSxHQUNBQyxPQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLGNBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxjQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLGNBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsV0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLEtBQUEsQ0FBQSxJQUFBLElBQUEsSUFDQUMsS0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxLQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFdBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsT0FBQSxDQUFBLElBQUEsRUFBQSxLQUNBQyxjQUFBLENBQUEsSUFBQSxHQUFBLEtBQ0FDLElBQUEsQ0FBQSxJQUFBLEVBQUEsR0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsR0FBQSxJQUFBLEtBQ0FDLFlBQUEsQ0FBQSxJQUFBLEdBQUEsSUFDQUMsT0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxXQUFBLENBQUEsSUFBQSxJQUFBLElBQ0FDLFNBQUEsQ0FBQSxHQUFBLElBQUEsSUFDQUMsU0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxPQUFBLENBQUEsSUFBQSxHQUFBLElBQ0FDLE9BQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsUUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsSUFBQSxHQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxLQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFlBQUEsQ0FBQSxFQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLEdBQUEsSUFBQSxLQUNBQyxJQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLEtBQUEsQ0FBQSxFQUFBLElBQUEsS0FDQUMsUUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxPQUFBLENBQUEsSUFBQSxHQUFBLElBQ0FDLFVBQUEsQ0FBQSxHQUFBLElBQUEsS0FDQUMsT0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxNQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLE1BQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsV0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxPQUFBLENBQUEsSUFBQSxJQUFBLEdBQ0FDLFlBQUEsQ0FBQSxJQUFBLElBQUEsS0FHQXlyQixFQUFBLEdBQ0EsSUFBQSxJQUFBaGlFLEtBQUEyakUsRUFDQTNCLEVBQUE5aEUsS0FBQUMsVUFBQXdqRSxFQUFBM2pFLEtBQUFBLDJCQ3hyQkEsSUFBQSt3RCxFQUFBamtFLEVBQUEsaUJBRUE0dUQsRUFBQSxXQUNBLE9BQUEsSUFBQTZwQixHQUdBLElBQUEsSUFBQXpnQixLQUFBaU0sRUFBQSxDQUVBclYsRUFBQW9KLEVBQUEsT0FBQSxTQUFBQSxHQUVBLE9BQUEsU0FBQTEwRCxHQUdBLE1BRkEsaUJBQUFBLElBQ0FBLEVBQUFsQixNQUFBaUIsVUFBQVksTUFBQTFELEtBQUFzRixZQUNBbytELEVBQUFqTSxHQUFBMTBELElBTEEsQ0FPQTAwRCxHQUVBLElBQUEwZ0IsRUFBQSxjQUFBN3VCLEtBQUFtTyxHQUNBdDBELEVBQUFnMUUsRUFBQSxHQUNBdHNCLEVBQUFzc0IsRUFBQSxJQUdBOXBCLEVBQUFsckQsR0FBQWtyRCxFQUFBbHJELElBQUEsSUFFQTBvRCxHQUFBd0MsRUFBQW9KLEdBQUEsU0FBQUEsR0FDQSxPQUFBLFNBQUExMEQsR0FDQSxpQkFBQUEsSUFDQUEsRUFBQWxCLE1BQUFpQixVQUFBWSxNQUFBMUQsS0FBQXNGLFlBRUEsSUFBQVEsRUFBQTQ5RCxFQUFBak0sR0FBQTEwRCxHQUNBLEdBQUEsaUJBQUErQyxRQUFBM0IsSUFBQTJCLEVBQ0EsT0FBQUEsRUFFQSxJQUFBLElBQUF4RyxFQUFBLEVBQUFBLEVBQUF3RyxFQUFBN0YsT0FBQVgsSUFDQXdHLEVBQUF4RyxHQUFBMkksS0FBQW1rQixNQUFBdG1CLEVBQUF4RyxJQUNBLE9BQUF3RyxHQVhBLENBYUEyeEQsR0FLQSxJQUFBeWdCLEVBQUEsV0FDQXh1RSxLQUFBMHVFLE1BQUEsSUFLQUYsRUFBQXAxRSxVQUFBdTFFLFdBQUEsU0FBQUMsRUFBQWw2RCxHQUNBLElBQUFpeEIsRUFBQWp4QixFQUFBLEdBQ0EsWUFBQWphLElBQUFrckMsRUFFQTNsQyxLQUFBNnVFLFVBQUFELElBR0EsaUJBQUFqcEMsSUFDQUEsRUFBQXh0QyxNQUFBaUIsVUFBQVksTUFBQTFELEtBQUFvZSxJQUdBMVUsS0FBQTh1RSxVQUFBRixFQUFBanBDLEtBSUE2b0MsRUFBQXAxRSxVQUFBMDFFLFVBQUEsU0FBQUYsRUFBQWpwQyxHQUlBLE9BSEEzbEMsS0FBQTR1RSxNQUFBQSxFQUNBNXVFLEtBQUEwdUUsTUFBQSxHQUNBMXVFLEtBQUEwdUUsTUFBQUUsR0FBQWpwQyxFQUNBM2xDLE1BTUF3dUUsRUFBQXAxRSxVQUFBeTFFLFVBQUEsU0FBQUQsR0FDQSxJQUFBRyxFQUFBL3VFLEtBQUEwdUUsTUFBQUUsR0FDQSxJQUFBRyxFQUFBLENBQ0EsSUFBQUMsRUFBQWh2RSxLQUFBNHVFLE1BRUFHLEVBQUFwcUIsRUFBQXFxQixHQUFBSixHQURBNXVFLEtBQUEwdUUsTUFBQU0sSUFHQWh2RSxLQUFBMHVFLE1BQUFFLEdBQUFHLEVBRUEsT0FBQUEsR0FHQSxDQUFBLE1BQUEsTUFBQSxNQUFBLE9BQUEsV0FBQXZqRSxRQUFBLFNBQUFvakUsR0FDQUosRUFBQXAxRSxVQUFBdzFFLEdBQUEsU0FBQUcsR0FDQSxPQUFBL3VFLEtBQUEydUUsV0FBQUMsRUFBQWh6RSxjQUlBbkYsRUFBQUosUUFBQXN1RCw2Q0MzRkEsSUFBQXRDLEVBQUF0c0QsRUFBQSxXQUNBbUksRUFBQSxDQUFBLEtBQUEsS0FBQSxJQUFBLEtBQUEsS0FBQSxLQUFBLEtBQUEsTUFFQTg3RCxFQUFBLENBRUE5OUQsRUFBQSxDQUNBKzlELE9BQUEsU0FDQUMsT0FBQSxHQUVBQyxHQUFBLENBQ0FGLE9BQUEsU0FDQUMsT0FBQSxLQUVBN0YsR0FBQSxDQUNBNEYsT0FBQSxTQUNBQyxPQUFBLE1BR0FFLEdBQUEsQ0FDQUgsT0FBQSxXQUNBQyxPQUFBLEVBQUEsSUFFQXY2QyxHQUFBLENBQ0FzNkMsT0FBQSxXQUNBQyxPQUFBLEVBQUEsR0FFQUcsR0FBQSxDQUNBSixPQUFBLFdBQ0FDLE9BQUEsR0FFQUksR0FBQSxDQUNBTCxPQUFBLFdBQ0FDLE9BQUEsS0FJQSxNQUFBSyxFQUFBLENBQ0FDLE9BQUEsQ0FDQXBCLEtBQUEsSUFDQXBqQixNQUFBLEVBQUEsT0FFQXlrQixTQUFBLENBQ0FyQixLQUFBLEtBQ0FwakIsTUFBQSxRQStEQXYvQyxFQUFBSixRQXZEQSxTQUFBcUQsRUFBQWloRSxFQUFBQyxFQUFBN3JELEdBQ0EsR0FBQSxpQkFBQXJWLElBQUF1SSxTQUFBdkksR0FBQSxNQUFBLElBQUF4RCxNQUFBLGlDQUNBLElBQUF5a0UsSUFBQUMsRUFBQSxNQUFBLElBQUExa0UsTUFBQSxrQ0FHQSxJQUFBaXdELEVBQUE5RCxHQURBdHpDLEVBQUFBLEdBQUEsSUFDQW8zQyxjQUFBLElBQ0FELEVBQUFuM0MsRUFBQW0zQyxVQUNBRCxHQUFBLElBQUFsM0MsRUFBQWszQyxXQUtBLEdBSEEwVSxFQUFBQSxFQUFBMytELGNBQ0E0K0QsRUFBQUEsRUFBQTUrRCxlQUVBLElBQUFrQyxFQUFBOUYsUUFBQXVpRSxHQUFBLE1BQUEsSUFBQXprRSxNQUFBLHNCQUFBeWtFLEVBQUEsc0JBQUF6OEQsRUFBQWpHLEtBQUEsT0FDQSxJQUFBLElBQUFpRyxFQUFBOUYsUUFBQXdpRSxHQUFBLE1BQUEsSUFBQTFrRSxNQUFBLHNCQUFBMGtFLEVBQUEsc0JBQUExOEQsRUFBQWpHLEtBQUEsT0FFQSxHQUFBMGlFLElBQUFDLEVBRUEsT0FBQWxoRSxFQUdBLElBQUFtaEUsRUFBQSxFQUNBQyxFQUFBLEVBQ0FDLEdBQUEsRUFFQSxPQUFBSixJQUNBRyxFQUFBLEVBQUEzVSxFQUNBd1UsRUFBQSxNQUVBLE9BQUFDLElBQ0FHLEdBQUEsRUFDQUYsRUFBQTFVLEVBQ0F5VSxFQUFBLE1BR0EsSUFBQUksRUFBQWhCLEVBQUFXLEdBQ0FNLEVBQUFqQixFQUFBWSxHQUdBTSxFQUFBeGhFLEVBQUFzaEUsRUFBQWQsT0FBQVksRUFHQUUsRUFBQWYsU0FBQWdCLEVBQUFoQixTQUVBaUIsR0FBQVgsRUFBQVMsRUFBQWYsUUFBQWprQixPQUdBLElBQUFobUMsRUFBQWtyRCxFQUFBRCxFQUFBZixPQUFBVyxFQU1BLE9BTEFFLEdBQUE5VSxFQUNBajJDLEVBQUF6UixLQUFBbWtCLE1BQUExUyxHQUNBLGlCQUFBazJDLEdBQUFqa0QsU0FBQWlrRCxLQUNBbDJDLEVBdERBLFNBQUF0VyxFQUFBeWhFLEdBQ0EsT0FBQWgrRCxPQUFBb0IsS0FBQW1rQixNQUFBaHBCLEVBQUEsSUFBQXloRSxHQUFBLEtBQUFBLEdBcURBejRDLENBQUExUyxFQUFBazJDLElBRUFsMkMsR0FJQXZaLEVBQUFKLFFBQUE2SCxNQUFBQSxxQ0MxR0EsSUFBQW1KLEVBQUFDLEVBQUFELEVBSUFySCxLQUpBc0gsRUFJQSxTQUFBalIsR0FBQSxhQUVBLElBQUErM0MsRUFBQTd2QyxLQUFBMDRCLEdBQ0FnNEMsRUFBQSxFQUFBN2dDLEVBRUE4Z0MsRUFBQUQsRUFEQSxLQUdBLFNBQUFFLElBQ0FudkUsS0FBQW92RSxJQUFBcHZFLEtBQUFxdkUsSUFDQXJ2RSxLQUFBeW9ELElBQUF6b0QsS0FBQTBvRCxJQUFBLEtBQ0Exb0QsS0FBQTBjLEVBQUEsR0FHQSxTQUFBdXZCLElBQ0EsT0FBQSxJQUFBa2pDLEVBR0FBLEVBQUEvMUUsVUFBQTZ5QyxFQUFBN3lDLFVBQUEsQ0FDQStNLFlBQUFncEUsRUFDQS9tQixPQUFBLFNBQUEzbkQsRUFBQUMsR0FDQVYsS0FBQTBjLEdBQUEsS0FBQTFjLEtBQUFvdkUsSUFBQXB2RSxLQUFBeW9ELEtBQUFob0QsR0FBQSxLQUFBVCxLQUFBcXZFLElBQUFydkUsS0FBQTBvRCxLQUFBaG9ELElBRUE0dUUsVUFBQSxXQUNBLE9BQUF0dkUsS0FBQXlvRCxNQUNBem9ELEtBQUF5b0QsSUFBQXpvRCxLQUFBb3ZFLElBQUFwdkUsS0FBQTBvRCxJQUFBMW9ELEtBQUFxdkUsSUFDQXJ2RSxLQUFBMGMsR0FBQSxNQUdBa3JDLE9BQUEsU0FBQW5uRCxFQUFBQyxHQUNBVixLQUFBMGMsR0FBQSxLQUFBMWMsS0FBQXlvRCxLQUFBaG9ELEdBQUEsS0FBQVQsS0FBQTBvRCxLQUFBaG9ELElBRUE4bkQsaUJBQUEsU0FBQTdhLEVBQUFDLEVBQUFudEMsRUFBQUMsR0FDQVYsS0FBQTBjLEdBQUEsTUFBQWl4QixFQUFBLE1BQUFDLEVBQUEsS0FBQTV0QyxLQUFBeW9ELEtBQUFob0QsR0FBQSxLQUFBVCxLQUFBMG9ELEtBQUFob0QsSUFFQTJuRCxjQUFBLFNBQUExYSxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBcnRDLEVBQUFDLEdBQ0FWLEtBQUEwYyxHQUFBLE1BQUFpeEIsRUFBQSxNQUFBQyxFQUFBLE1BQUFDLEVBQUEsTUFBQUMsRUFBQSxLQUFBOXRDLEtBQUF5b0QsS0FBQWhvRCxHQUFBLEtBQUFULEtBQUEwb0QsS0FBQWhvRCxJQUVBNnVFLE1BQUEsU0FBQTVoQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBdjRDLEdBRUEsSUFBQXc4QyxFQUFBL3hDLEtBQUF5b0QsSUFDQXpXLEVBQUFoeUMsS0FBQTBvRCxJQUNBOG1CLEdBSEEzaEMsR0FBQUEsSUFBQUYsR0FBQUEsR0FJQThoQyxHQUpBM2hDLEdBQUFBLElBQUFGLEdBQUFBLEdBS0E4aEMsRUFBQTM5QixFQUFBcEUsRUFDQWdpQyxFQUFBMzlCLEVBQUFwRSxFQUNBZ2lDLEVBQUFGLEVBQUFBLEVBQUFDLEVBQUFBLEVBR0EsSUFWQXA2RSxHQUFBQSxHQVVBLEVBQUEsTUFBQSxJQUFBVyxNQUFBLG9CQUFBWCxHQUdBLEdBQUEsT0FBQXlLLEtBQUF5b0QsSUFDQXpvRCxLQUFBMGMsR0FBQSxLQUFBMWMsS0FBQXlvRCxJQUFBOWEsR0FBQSxLQUFBM3RDLEtBQUEwb0QsSUFBQTlhLFFBSUEsR0FBQWdpQyxFQXBEQSxLQXlEQSxHQUFBcnhFLEtBQUF5SSxJQUFBMm9FLEVBQUFILEVBQUFDLEVBQUFDLEdBekRBLE1BeURBbjZFLEVBS0EsQ0FDQSxJQUFBczZFLEVBQUFoaUMsRUFBQWtFLEVBQ0ErOUIsRUFBQWhpQyxFQUFBa0UsRUFDQSs5QixFQUFBUCxFQUFBQSxFQUFBQyxFQUFBQSxFQUNBTyxFQUFBSCxFQUFBQSxFQUFBQyxFQUFBQSxFQUNBRyxFQUFBMXhFLEtBQUFxMUMsS0FBQW04QixHQUNBRyxFQUFBM3hFLEtBQUFxMUMsS0FBQWc4QixHQUNBajhDLEVBQUFwK0IsRUFBQWdKLEtBQUF1Z0QsS0FBQTFRLEVBQUE3dkMsS0FBQXdzRCxNQUFBZ2xCLEVBQUFILEVBQUFJLElBQUEsRUFBQUMsRUFBQUMsS0FBQSxHQUNBQyxFQUFBeDhDLEVBQUF1OEMsRUFDQUUsRUFBQXo4QyxFQUFBczhDLEVBR0ExeEUsS0FBQXlJLElBQUFtcEUsRUFBQSxHQTFFQSxPQTJFQW53RSxLQUFBMGMsR0FBQSxLQUFBaXhCLEVBQUF3aUMsRUFBQVQsR0FBQSxLQUFBOWhDLEVBQUF1aUMsRUFBQVIsSUFHQTN2RSxLQUFBMGMsR0FBQSxJQUFBbm5CLEVBQUEsSUFBQUEsRUFBQSxXQUFBbzZFLEVBQUFFLEVBQUFILEVBQUFJLEdBQUEsS0FBQTl2RSxLQUFBeW9ELElBQUE5YSxFQUFBeWlDLEVBQUFaLEdBQUEsS0FBQXh2RSxLQUFBMG9ELElBQUE5YSxFQUFBd2lDLEVBQUFYLFFBcEJBenZFLEtBQUEwYyxHQUFBLEtBQUExYyxLQUFBeW9ELElBQUE5YSxHQUFBLEtBQUEzdEMsS0FBQTBvRCxJQUFBOWEsVUF1QkF5aUMsSUFBQSxTQUFBNXZFLEVBQUFDLEVBQUFuTCxFQUFBMDZDLEVBQUF2bkMsRUFBQTRuRSxHQUNBN3ZFLEdBQUFBLEVBQUFDLEdBQUFBLEVBQUE0dkUsSUFBQUEsRUFDQSxJQUFBaHVDLEdBREEvc0MsR0FBQUEsR0FDQWdKLEtBQUF3MUMsSUFBQTlELEdBQ0ExTixFQUFBaHRDLEVBQUFnSixLQUFBMDFDLElBQUFoRSxHQUNBOEIsRUFBQXR4QyxFQUFBNmhDLEVBQ0EwUCxFQUFBdHhDLEVBQUE2aEMsRUFDQWd1QyxFQUFBLEVBQUFELEVBQ0FFLEVBQUFGLEVBQUFyZ0MsRUFBQXZuQyxFQUFBQSxFQUFBdW5DLEVBR0EsR0FBQTE2QyxFQUFBLEVBQUEsTUFBQSxJQUFBVyxNQUFBLG9CQUFBWCxHQUdBLE9BQUF5SyxLQUFBeW9ELElBQ0F6b0QsS0FBQTBjLEdBQUEsSUFBQXExQixFQUFBLElBQUFDLEdBSUF6ekMsS0FBQXlJLElBQUFoSCxLQUFBeW9ELElBQUExVyxHQW5HQSxNQW1HQXh6QyxLQUFBeUksSUFBQWhILEtBQUEwb0QsSUFBQTFXLEdBbkdBLFFBb0dBaHlDLEtBQUEwYyxHQUFBLElBQUFxMUIsRUFBQSxJQUFBQyxHQUlBejhDLElBR0FpN0UsRUFBQSxJQUFBQSxFQUFBQSxFQUFBdkIsRUFBQUEsR0FHQXVCLEVBQUF0QixFQUNBbHZFLEtBQUEwYyxHQUFBLElBQUFubkIsRUFBQSxJQUFBQSxFQUFBLFFBQUFnN0UsRUFBQSxLQUFBOXZFLEVBQUE2aEMsR0FBQSxLQUFBNWhDLEVBQUE2aEMsR0FBQSxJQUFBaHRDLEVBQUEsSUFBQUEsRUFBQSxRQUFBZzdFLEVBQUEsS0FBQXZ3RSxLQUFBeW9ELElBQUExVyxHQUFBLEtBQUEveEMsS0FBQTBvRCxJQUFBMVcsR0FJQXcrQixFQW5IQSxPQW9IQXh3RSxLQUFBMGMsR0FBQSxJQUFBbm5CLEVBQUEsSUFBQUEsRUFBQSxTQUFBaTdFLEdBQUFwaUMsR0FBQSxJQUFBbWlDLEVBQUEsS0FBQXZ3RSxLQUFBeW9ELElBQUFob0QsRUFBQWxMLEVBQUFnSixLQUFBdzFDLElBQUFyckMsSUFBQSxLQUFBMUksS0FBQTBvRCxJQUFBaG9ELEVBQUFuTCxFQUFBZ0osS0FBQTAxQyxJQUFBdnJDLE9BR0F5aUIsS0FBQSxTQUFBMXFCLEVBQUFDLEVBQUFzakMsRUFBQWxSLEdBQ0E5eUIsS0FBQTBjLEdBQUEsS0FBQTFjLEtBQUFvdkUsSUFBQXB2RSxLQUFBeW9ELEtBQUFob0QsR0FBQSxLQUFBVCxLQUFBcXZFLElBQUFydkUsS0FBQTBvRCxLQUFBaG9ELEdBQUEsTUFBQXNqQyxFQUFBLE1BQUFsUixFQUFBLEtBQUFrUixFQUFBLEtBRUF0b0MsU0FBQSxXQUNBLE9BQUFzRSxLQUFBMGMsSUFJQXJtQixFQUFBNDFDLEtBQUFBLEVBRUFyc0MsT0FBQUMsZUFBQXhKLEVBQUEsYUFBQSxDQUFBcUQsT0FBQSxLQXhJQSxpQkFBQXJELFFBQUEsSUFBQUksRUFBQTZRLEVBQUFqUixHQUNBLG1CQUFBdTFDLFFBQUFBLE9BQUFDLElBQUFELE9BQUEsQ0FBQSxXQUFBdGtDLEdBQ0FBLEdBQUFELEVBQUFBLEdBQUEwa0MsTUFBQXFELEdBQUEvbkMsRUFBQStuQyxJQUFBLDZCQ0pBMzRDLEVBQUFKLFFBQUEsV0FDQSxJQUFBLElBQUFULEVBQUEsRUFBQUEsRUFBQWdHLFVBQUFyRixPQUFBWCxJQUNBLFFBQUE2RSxJQUFBbUIsVUFBQWhHLEdBQUEsT0FBQWdHLFVBQUFoRyw2QkNGQWEsRUFBQUosUUFDQSxTQUFBcTlCLEdBQ0EsSUFHQTQzQyxFQUFBQyxFQUFBQyxFQUFBMTNDLEVBQUExM0IsRUFIQTAyQixFQUFBWSxFQUFBLEdBQ0E3c0IsRUFBQTZzQixFQUFBLEdBQ0FDLEVBQUFELEVBQUEsR0FHQSxHQUFBLElBQUE3c0IsRUFFQSxNQUFBLENBREF6SyxFQUFBdTNCLEVBQ0F2M0IsRUFBQUEsR0FJQW12RSxFQURBNTNDLEVBQUEsR0FDQUEsR0FBQSxFQUFBOXNCLEdBRUE4c0IsRUFBQTlzQixFQUFBOHNCLEVBQUE5c0IsRUFFQXlrRSxFQUFBLEVBQUEzM0MsRUFBQTQzQyxFQUVBejNDLEVBQUEsQ0FBQSxFQUFBLEVBQUEsR0FDQSxJQUFBLElBQUFsK0IsRUFBQSxFQUFBQSxFQUFBLEVBQUFBLEtBQ0E0MUUsRUFBQTE0QyxFQUFBLEVBQUEsSUFBQWw5QixFQUFBLElBQ0EsR0FDQTQxRSxJQUVBQSxFQUFBLEdBQ0FBLElBYUExM0MsRUFBQWwrQixHQVRBd0csRUFEQSxFQUFBb3ZFLEVBQUEsRUFDQUYsRUFBQSxHQUFBQyxFQUFBRCxHQUFBRSxFQUNBLEVBQUFBLEVBQUEsRUFDQUQsRUFDQSxFQUFBQyxFQUFBLEVBQ0FGLEdBQUFDLEVBQUFELElBQUEsRUFBQSxFQUFBRSxHQUFBLEVBRUFGLEVBTUEsT0FBQXgzQyw0QkMxQ0FyOUIsRUFBQUosUUFDQSxTQUFBeTlCLEdBQ0EsSUFNQWhCLEVBQUFqc0IsRUFBQThzQixFQU5BcCtCLEVBQUF1K0IsRUFBQSxHQUNBRSxFQUFBRixFQUFBLEdBQ0FsNUIsRUFBQWs1QixFQUFBLEdBQ0F0MUIsRUFBQUQsS0FBQUMsSUFBQWpKLEVBQUF5K0IsRUFBQXA1QixHQUNBNEcsRUFBQWpELEtBQUFpRCxJQUFBak0sRUFBQXkrQixFQUFBcDVCLEdBQ0FtNkMsRUFBQXZ6QyxFQUFBaEQsRUFHQWdELElBQUFoRCxFQUNBczBCLEVBQUEsRUFDQXY5QixJQUFBaU0sRUFDQXN4QixHQUFBa0IsRUFBQXA1QixHQUFBbTZDLEVBQ0EvZ0IsSUFBQXh5QixFQUNBc3hCLEVBQUEsR0FBQWw0QixFQUFBckYsR0FBQXcvQyxFQUNBbjZDLElBQUE0RyxJQUNBc3hCLEVBQUEsR0FBQXY5QixFQUFBeStCLEdBQUErZ0IsSUFHQWppQixFQUFBdjBCLEtBQUFDLElBQUEsR0FBQXMwQixFQUFBLE1BRUEsSUFDQUEsR0FBQSxLQUdBYSxHQUFBbjFCLEVBQUFnRCxHQUFBLEVBR0FxRixFQURBckYsSUFBQWhELEVBQ0EsRUFDQW0xQixHQUFBLEdBQ0FvaEIsR0FBQXZ6QyxFQUFBaEQsR0FFQXUyQyxHQUFBLEVBQUF2ekMsRUFBQWhELEdBR0EsTUFBQSxDQUFBczBCLEVBQUEsSUFBQWpzQixFQUFBOHNCLDZCQ3BDQSxhQVdBLFNBQUE2ZCxFQUFBakwsRUFBQXlNLEVBQUFoakMsR0FFQSxJQUdBcGEsRUFBQUssRUFBQTJFLEVBQUE2MUUsRUFBQUMsRUFIQXA1RSxFQUFBaXZDLEVBQUFod0MsT0FDQW82RSxFQUFBQyxFQUFBcnFDLEVBQUEsR0FBQXlNLEdBQ0E2OUIsRUFBQSxHQUtBLElBRkE3Z0UsSUFBQUEsRUFBQSxJQUVBcGEsRUFBQSxFQUFBQSxFQUFBMEIsRUFBQTFCLElBQUEsQ0FLQSxJQUpBSyxFQUFBc3dDLEVBQUEzd0MsRUFBQSxHQUVBNjZFLEVBQUFDLEVBQUFFLEVBREFoMkUsRUFBQTJyQyxFQUFBM3dDLEdBQ0FvOUMsS0FFQSxDQUVBLEtBQUEyOUIsRUFBQUYsR0FBQSxDQUNBSSxFQUFBLzRFLEtBQUE3QixHQUVBdzZFLElBQUFDLEdBQ0FHLEVBQUEvNEUsS0FBQThDLEdBRUFoRixFQUFBMEIsRUFBQSxJQUNBMFksRUFBQWxZLEtBQUErNEUsR0FDQUEsRUFBQSxLQUVBajdFLElBQUEwQixFQUFBLEdBQ0F1NUUsRUFBQS80RSxLQUFBOEMsR0FFQSxNQUVBLEdBQUErMUUsRUFBQUYsRUFDQSxNQUVBRSxFQUVBQSxFQUFBQyxFQURBMzZFLEVBQUFvZ0QsRUFBQXBnRCxFQUFBMkUsRUFBQSsxRSxFQUFBMzlCLEdBQ0FBLEdBSUF5OUIsRUFBQUcsRUFEQWgyRSxFQUFBeTdDLEVBQUFwZ0QsRUFBQTJFLEVBQUE2MUUsRUFBQXo5QixHQUNBQSxHQUlBMjlCLEVBQUFELEVBS0EsT0FGQUcsRUFBQXQ2RSxRQUFBeVosRUFBQWxZLEtBQUErNEUsR0FFQTdnRSxFQXNDQSxTQUFBcW1DLEVBQUFwZ0QsRUFBQTJFLEVBQUFrMkUsRUFBQTk5QixHQUNBLE9BQUEsRUFBQTg5QixFQUFBLENBQUE3NkUsRUFBQSxJQUFBMkUsRUFBQSxHQUFBM0UsRUFBQSxLQUFBKzhDLEVBQUEsR0FBQS84QyxFQUFBLEtBQUEyRSxFQUFBLEdBQUEzRSxFQUFBLElBQUErOEMsRUFBQSxJQUNBLEVBQUE4OUIsRUFBQSxDQUFBNzZFLEVBQUEsSUFBQTJFLEVBQUEsR0FBQTNFLEVBQUEsS0FBQSs4QyxFQUFBLEdBQUEvOEMsRUFBQSxLQUFBMkUsRUFBQSxHQUFBM0UsRUFBQSxJQUFBKzhDLEVBQUEsSUFDQSxFQUFBODlCLEVBQUEsQ0FBQTk5QixFQUFBLEdBQUEvOEMsRUFBQSxJQUFBMkUsRUFBQSxHQUFBM0UsRUFBQSxLQUFBKzhDLEVBQUEsR0FBQS84QyxFQUFBLEtBQUEyRSxFQUFBLEdBQUEzRSxFQUFBLEtBQ0EsRUFBQTY2RSxFQUFBLENBQUE5OUIsRUFBQSxHQUFBLzhDLEVBQUEsSUFBQTJFLEVBQUEsR0FBQTNFLEVBQUEsS0FBQSs4QyxFQUFBLEdBQUEvOEMsRUFBQSxLQUFBMkUsRUFBQSxHQUFBM0UsRUFBQSxLQUNBLEtBVUEsU0FBQTI2RSxFQUFBeDZFLEVBQUE0OEMsR0FDQSxJQUFBNzhDLEVBQUEsRUFRQSxPQU5BQyxFQUFBLEdBQUE0OEMsRUFBQSxHQUFBNzhDLEdBQUEsRUFDQUMsRUFBQSxHQUFBNDhDLEVBQUEsS0FBQTc4QyxHQUFBLEdBRUFDLEVBQUEsR0FBQTQ4QyxFQUFBLEdBQUE3OEMsR0FBQSxFQUNBQyxFQUFBLEdBQUE0OEMsRUFBQSxLQUFBNzhDLEdBQUEsR0FFQUEsRUF4SEFNLEVBQUFKLFFBQUFtN0MsRUFFQUEsRUFBQTZCLFNBQUE3QixFQUNBQSxFQUFBNEIsUUE0REEsU0FBQTdNLEVBQUF5TSxHQUVBLElBQUFoakMsRUFBQThnRSxFQUFBQyxFQUFBQyxFQUFBcDdFLEVBQUFRLEVBQUE2NkUsRUFHQSxJQUFBSCxFQUFBLEVBQUFBLEdBQUEsRUFBQUEsR0FBQSxFQUFBLENBS0EsSUFKQTlnRSxFQUFBLEdBRUFnaEUsSUFBQUosRUFEQUcsRUFBQXhxQyxFQUFBQSxFQUFBaHdDLE9BQUEsR0FDQXk4QyxHQUFBODlCLEdBRUFsN0UsRUFBQSxFQUFBQSxFQUFBMndDLEVBQUFod0MsT0FBQVgsS0FFQXE3RSxJQUFBTCxFQURBeDZFLEVBQUFtd0MsRUFBQTN3QyxHQUNBbzlDLEdBQUE4OUIsTUFHQUUsR0FBQWhoRSxFQUFBbFksS0FBQXUrQyxFQUFBMDZCLEVBQUEzNkUsRUFBQTA2RSxFQUFBOTlCLElBRUFpK0IsR0FBQWpoRSxFQUFBbFksS0FBQTFCLEdBRUEyNkUsRUFBQTM2RSxFQUNBNDZFLEVBQUFDLEVBS0EsS0FGQTFxQyxFQUFBdjJCLEdBRUF6WixPQUFBLE1BR0EsT0FBQXlaLDRCQzdGQSxhQUVBdlosRUFBQUosUUFJQSxTQUFBNDFDLEdBYUEsSUFYQSxJQUFBOGtDLEVBQ0EvZ0UsRUFBQSxHQUNBa2hFLEVBQUEsRUFDQUMsRUFBQSxFQUNBamxDLEVBQUEsRUFDQUMsRUFBQSxFQUNBaWxDLEVBQUEsS0FDQUMsRUFBQSxLQUNBNXdFLEVBQUEsRUFDQUMsRUFBQSxFQUVBOUssRUFBQSxFQUFBMEIsRUFBQTIwQyxFQUFBMTFDLE9BQUFYLEVBQUEwQixFQUFBMUIsSUFBQSxDQUNBLElBQUF3MkMsRUFBQUgsRUFBQXIyQyxHQUNBeTJDLEVBQUFELEVBQUEsR0FFQSxPQUFBQyxHQUNBLElBQUEsSUFDQUgsRUFBQUUsRUFBQSxHQUNBRCxFQUFBQyxFQUFBLEdBQ0EsTUFDQSxJQUFBLElBQ0EsSUFBQWtsQyxFQUFBQyxFQUFBLENBQ0ExdkMsR0FBQXBoQyxFQUNBcWhDLEdBQUFwaEMsRUFDQXd6QyxHQUFBOUgsRUFBQSxHQUNBK0gsR0FBQS9ILEVBQUEsR0FDQW9sQyxHQUFBcGxDLEVBQUEsR0FDQXFsQyxHQUFBcmxDLEVBQUEsR0FDQXNsQyxjQUFBdGxDLEVBQUEsR0FDQXVsQyxhQUFBdmxDLEVBQUEsR0FDQXdsQyxVQUFBeGxDLEVBQUEsS0FJQSxJQUFBa2xDLEVBQUEvNkUsT0FBQSxTQUVBLElBQUEsSUFBQVQsRUFBQWtILEVBQUEsRUFBQUEsRUFBQXMwRSxFQUFBLzZFLE9BQUF5RyxJQUVBb3ZDLEVBQUEsQ0FBQSxLQURBdDJDLEVBQUF3N0UsRUFBQXQwRSxJQUNBMndDLEdBQUE3M0MsRUFBQTgzQyxHQUFBOTNDLEVBQUErM0MsR0FBQS8zQyxFQUFBZzRDLEdBQUFoNEMsRUFBQTJLLEVBQUEzSyxFQUFBNEssR0FDQTFELEVBQUFzMEUsRUFBQS82RSxPQUFBLEdBQUF5WixFQUFBbFksS0FBQXMwQyxHQUdBLE1BQ0EsSUFBQSxJQUVBLElBQUE4SCxFQUFBenpDLEVBQ0EwekMsRUFBQXp6QyxFQUNBLEtBQUFxd0UsR0FBQSxLQUFBQSxJQUNBNzhCLEdBQUFBLEVBQUFnOUIsRUFDQS84QixHQUFBQSxFQUFBZzlCLEdBRUEva0MsRUFBQSxDQUFBLElBQUE4SCxFQUFBQyxFQUFBL0gsRUFBQSxHQUFBQSxFQUFBLEdBQUFBLEVBQUEsR0FBQUEsRUFBQSxJQUNBLE1BQ0EsSUFBQSxJQUNBLEtBQUEya0MsR0FBQSxLQUFBQSxHQUNBSyxFQUFBLEVBQUEzd0UsRUFBQTJ3RSxFQUNBQyxFQUFBLEVBQUEzd0UsRUFBQTJ3RSxJQUVBRCxFQUFBM3dFLEVBQ0E0d0UsRUFBQTN3RSxHQUVBMHJDLEVBQUF5bEMsRUFBQXB4RSxFQUFBQyxFQUFBMHdFLEVBQUFDLEVBQUFqbEMsRUFBQSxHQUFBQSxFQUFBLElBQ0EsTUFDQSxJQUFBLElBQ0FnbEMsRUFBQWhsQyxFQUFBLEdBQ0FpbEMsRUFBQWpsQyxFQUFBLEdBQ0FBLEVBQUF5bEMsRUFBQXB4RSxFQUFBQyxFQUFBMHJDLEVBQUEsR0FBQUEsRUFBQSxHQUFBQSxFQUFBLEdBQUFBLEVBQUEsSUFDQSxNQUNBLElBQUEsSUFDQUEsRUFBQXA0QixFQUFBdlQsRUFBQUMsRUFBQTByQyxFQUFBLEdBQUFBLEVBQUEsSUFDQSxNQUNBLElBQUEsSUFDQUEsRUFBQXA0QixFQUFBdlQsRUFBQUMsRUFBQTByQyxFQUFBLEdBQUExckMsR0FDQSxNQUNBLElBQUEsSUFDQTByQyxFQUFBcDRCLEVBQUF2VCxFQUFBQyxFQUFBRCxFQUFBMnJDLEVBQUEsSUFDQSxNQUNBLElBQUEsSUFDQUEsRUFBQXA0QixFQUFBdlQsRUFBQUMsRUFBQXdyQyxFQUFBQyxHQUtBNGtDLEVBQUExa0MsRUFDQTVyQyxFQUFBMnJDLEVBQUFBLEVBQUE3MUMsT0FBQSxHQUNBbUssRUFBQTByQyxFQUFBQSxFQUFBNzFDLE9BQUEsR0FDQTYxQyxFQUFBNzFDLE9BQUEsR0FDQTI2RSxFQUFBOWtDLEVBQUFBLEVBQUE3MUMsT0FBQSxHQUNBNDZFLEVBQUEva0MsRUFBQUEsRUFBQTcxQyxPQUFBLEtBRUEyNkUsRUFBQXp3RSxFQUNBMHdFLEVBQUF6d0UsR0FFQXNQLEVBQUFsWSxLQUFBczBDLEdBR0EsT0FBQXA4QixHQXBHQSxJQUFBdWhFLEVBQUF4N0UsRUFBQSwyQkF1R0EsU0FBQWllLEVBQUEyNUIsRUFBQUMsRUFBQUMsRUFBQUMsR0FDQSxNQUFBLENBQUEsSUFBQUgsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUQsRUFBQUMsR0FHQSxTQUFBK2pDLEVBQUFsa0MsRUFBQUMsRUFBQXNHLEVBQUFDLEVBQUF0RyxFQUFBQyxHQUNBLE1BQUEsQ0FDQSxJQUNBSCxFQUFBLEVBQUEsRUFBQSxFQUFBdUcsRUFDQXRHLEVBQUEsRUFBQSxFQUFBLEVBQUF1RyxFQUNBdEcsRUFBQSxFQUFBLEVBQUEsRUFBQXFHLEVBQ0FwRyxFQUFBLEVBQUEsRUFBQSxFQUFBcUcsRUFDQXRHLEVBQ0FDLHlEQ3ZIQSxJQUFBNlcsRUFBQTV1RCxFQUFBLGlCQUVBVSxFQUFBSixRQUFBLFNBQUF5N0UsR0FDQSxJQUFBNTFFLEVBQUE2MUUsRUFBQW42RSxFQUFBNDdCLEVBQ0EsR0FBQXQzQixFQUFBLGtEQUFBMGpELEtBQUFreUIsR0FBQSxDQUNBLElBQUExckUsRUFBQWxLLEVBQUEsR0FFQVQsRUFBQSxVQURBKzFCLEVBQUFwckIsRUFBQTNFLFFBQUEsS0FBQSxLQUNBLEVBQUEsRUFDQXN3RSxFQUFBcHRCLEVBQUFuekIsR0FFQTU1QixFQUFBc0UsRUFBQSxHQUFBdUYsUUFBQSxhQUFBLElBQ0FzRSxNQUFBLFdBQ0FnTyxJQUFBLFNBQUF0VCxFQUFBN0ssR0FDQSxNQUFBLEtBQUErcEQsS0FBQWwvQyxJQUFBN0ssSUFBQTZGLEVBQ0FrN0IsV0FBQWwyQixHQUFBLEtBRUEsS0FBQWsvQyxLQUFBbC9DLEdBQ0FrMkIsV0FBQWwyQixNQUtBMkYsSUFBQW9yQixHQUFBNTVCLEVBQUFFLEtBQUEsR0FDQTA3QixPQUFBLzRCLElBQUE3QyxFQUFBNkQsR0FBQSxFQUFBN0QsRUFBQTZELEdBQ0E3RCxFQUFBQSxFQUFBb0MsTUFBQSxFQUFBeUIsR0FFQXMyRSxFQUFBdmdELEdBQUEsV0FBQSxPQUFBNTVCLFFBRUEsR0FBQSxrQkFBQStuRCxLQUFBbXlCLEdBQUEsQ0FDQSxJQUFBdGdELEVBQUFzZ0QsRUFBQXJ3RSxRQUFBLEtBQUEsSUFFQXN3RSxFQUFBcHRCLEVBQUE3d0IsSUFFQWw4QixHQURBQSxFQUFBNDVCLEVBQUF6ckIsTUFBQSxLQUZBdEssRUFBQSsxQixFQUFBajdCLFFBRUEsTUFBQSxTQUNBOFUsT0FBQThuQyxTQUNBcC9CLElBQUEsU0FBQXRULEdBQ0EsT0FBQSxJQUFBaEYsRUFDQThCLFNBQUFrRCxFQUFBQSxFQUFBLElBR0FsRCxTQUFBa0QsRUFBQSxNQUlBK3lCLEVBQUEsRUFDQXUrQyxFQUFBaitDLElBQUEsV0FBQSxPQUFBbDhCLEdBQ0FBLEVBQUEsS0FBQUEsRUFBQSxHQUFBLEdBQ0FBLEVBQUEsS0FBQUEsRUFBQSxHQUFBLEdBQ0FBLEVBQUEsS0FBQUEsRUFBQSxHQUFBLFFBR0FtNkUsRUFBQXB0QixFQUFBZ29CLFNBQ0FBLFFBQUEsV0FBQSxPQUFBbUYsR0FDQWw2RSxFQUFBazZFLEVBQ0F0K0MsRUFBQSxFQUdBLElBQUEvMEIsRUFBQSxDQUNBcTFCLFNBQUFyNUIsRUFDQWk1QixTQUFBajVCLEVBQ0FtNUIsU0FBQW41QixFQUNBdXhFLFVBQUF2eEUsRUFDQWt5RSxhQUFBbHlFLEVBQ0EyOUIsU0FBQTM5QixHQUVBLElBQUFnRSxFQUFBcTFCLElBQUFpK0MsRUFBQWorQyxJQUFBbDhCLEdBQUEsTUFBQXBDLElBQ0EsSUFBQWlKLEVBQUFpMUIsSUFBQXErQyxFQUFBcitDLElBQUE5N0IsR0FBQSxNQUFBcEMsSUFDQSxJQUFBaUosRUFBQW0xQixJQUFBbStDLEVBQUFuK0MsSUFBQWg4QixHQUFBLE1BQUFwQyxJQUNBLElBQUFpSixFQUFBdXRFLEtBQUErRixFQUFBL0YsS0FBQXAwRSxHQUFBLE1BQUFwQyxJQUNBLElBQUFpSixFQUFBa3VFLFFBQUFvRixFQUFBcEYsUUFBQS8wRSxHQUFBLE1BQUFwQyxJQWFBLE9BWEFpSixFQUFBcTFCLE1BQUFyMUIsRUFBQTI1QixJQUFBLElBQUEzNUIsRUFBQXExQixJQUFBL2YsSUFBQSxTQUFBdFQsR0FDQSxJQUFBb0csRUFBQXBHLEVBQUEvRSxTQUFBLElBQ0EsT0FBQSxJQUFBbUwsRUFBQXRRLE9BQUEsSUFBQXNRLEVBQ0FBLElBQ0E1TyxLQUFBLEtBRUF3RyxFQUFBcTFCLE1BQUFyMUIsRUFBQTR5QyxLQUFBNXlDLEVBQUFxMUIsSUFBQW56QixPQUFBNnlCLElBQ0EvMEIsRUFBQWkxQixNQUFBajFCLEVBQUFxeUMsS0FBQXJ5QyxFQUFBaTFCLElBQUEveUIsT0FBQTZ5QixJQUNBLzBCLEVBQUFtMUIsTUFBQW4xQixFQUFBdXpFLEtBQUF2ekUsRUFBQW0xQixJQUFBanpCLE9BQUE2eUIsSUFDQS8wQixFQUFBdXRFLE9BQUF2dEUsRUFBQXd6RSxNQUFBeHpFLEVBQUF1dEUsS0FBQXJyRSxPQUFBNnlCLElBRUEvMEIsOENDaEZBaEksRUFBQUosUUF5QkEsU0FBQTQxQyxHQUNBLElBQUE3d0MsRUFBQSxHQXFCQSxPQXBCQTZ3QyxFQUFBeHFDLFFBQUF5d0UsRUFBQSxTQUFBeDFELEVBQUEydkIsRUFBQTMzQixHQUNBLElBQUF4WixFQUFBbXhDLEVBQUFyd0MsY0FVQSxJQVRBMFksRUF1QkEsU0FBQUEsR0FDQSxJQUFBeTlELEVBQUF6OUQsRUFBQStSLE1BQUFyVyxHQUNBLE9BQUEraEUsRUFBQUEsRUFBQXArRCxJQUFBNVcsUUFBQSxHQXpCQWkxRSxDQUFBMTlELEdBR0EsS0FBQXhaLEdBQUF3WixFQUFBbmUsT0FBQSxJQUNBNkUsRUFBQXRELEtBQUEsQ0FBQXUwQyxHQUFBMXJDLE9BQUErVCxFQUFBNkMsT0FBQSxFQUFBLEtBQ0FyYyxFQUFBLElBQ0FteEMsRUFBQSxLQUFBQSxFQUFBLElBQUEsT0FHQSxDQUNBLEdBQUEzM0IsRUFBQW5lLFFBQUFBLEVBQUEyRSxHQUVBLE9BREF3WixFQUFBOHpCLFFBQUE2RCxHQUNBanhDLEVBQUF0RCxLQUFBNGMsR0FFQSxHQUFBQSxFQUFBbmUsT0FBQUEsRUFBQTJFLEdBQUEsTUFBQSxJQUFBaEYsTUFBQSx1QkFDQWtGLEVBQUF0RCxLQUFBLENBQUF1MEMsR0FBQTFyQyxPQUFBK1QsRUFBQTZDLE9BQUEsRUFBQWhoQixFQUFBMkUsU0FHQUUsR0F4Q0EsSUFBQTdFLEVBQUEsQ0FBQU4sRUFBQSxFQUFBSCxFQUFBLEVBQUFnOUIsRUFBQSxFQUFBYSxFQUFBLEVBQUF6M0IsRUFBQSxFQUFBd3ZFLEVBQUEsRUFBQTdrRSxFQUFBLEVBQUFuUixFQUFBLEVBQUE2UyxFQUFBLEVBQUFrN0IsRUFBQSxHQU9BeXVDLEVBQUEsbUNBb0NBLElBQUE5aEUsRUFBQSw2RENuREEzWixFQUFBSixRQUVBLFNBQUFtM0MsR0FDQUEsT0FBQSxJQUFBQSxFQUFBQSxFQUFBLEVBQ0FyMUMsTUFBQWdELFFBQUFxeUMsS0FDQUEsRUFBQSxDQUFBQSxFQUFBQSxJQUdBLElBQUExNEIsRUFBQSxDQUNBLEVBQUEwNEIsRUFBQSxJQUFBQSxFQUFBLEdBQUEsR0FDQSxDQUFBQSxFQUFBLElBQUFBLEVBQUEsR0FBQSxHQUNBLENBQUFBLEVBQUEsR0FBQUEsRUFBQSxHQUFBLEdBQ0EsRUFBQUEsRUFBQSxHQUFBQSxFQUFBLEdBQUEsSUFPQS8zQyxFQUFBLENBQUEsRUFBQSxHQUFBLEdBQ0E0OEUsRUFBQSxDQUFBNThFLEVBQUF1RSxRQUFBdkUsRUFBQXVFLFFBQUF2RSxFQUFBdUUsUUFBQXZFLEVBQUF1RSxTQUNBLE1BQUEsQ0FDQThhLFVBQUFBLEVBQ0F5NUMsTUFUQSxDQUNBLENBQUEsRUFBQSxFQUFBLEdBQ0EsQ0FBQSxFQUFBLEVBQUEsSUFRQStqQixJQU5BLENBQUEsQ0FBQSxFQUFBLEdBQUEsQ0FBQSxFQUFBLEdBQUEsQ0FBQSxFQUFBLEdBQUEsQ0FBQSxFQUFBLElBT0FELFFBQUFBLDZCQ3pCQSxJQUFBaHJFLEVBQUFDLEVBQUFELEVBSUFySCxLQUpBc0gsRUFJQSxXQUFBLGFBRUEsSUFBQWlyRSxFQUFBLFNBQUE5eEUsR0FDQSxPQUNBQSxhQUFBdkksWUFDQXVJLGFBQUEreEUsYUFDQS94RSxhQUFBZ3lFLGFBQ0FoeUUsYUFBQWl5RSxXQUNBanlFLGFBQUFreUUsWUFDQWx5RSxhQUFBbXlFLFlBQ0FueUUsYUFBQW95RSxjQUNBcHlFLGFBQUFxeUUsY0FDQXJ5RSxhQUFBc3lFLG1CQUlBQyxFQUFBLFNBQUF4aEQsRUFBQXppQixHQUVBLElBREEsSUFBQVEsRUFBQTNQLE9BQUEyUCxLQUFBUixHQUNBblosRUFBQSxFQUFBQSxFQUFBMlosRUFBQWhaLFNBQUFYLEVBQ0E0N0IsRUFBQWppQixFQUFBM1osSUFBQW1aLEVBQUFRLEVBQUEzWixJQUVBLE9BQUE0N0IsR0FTQXloRCxFQUFBLEtBV0EsU0FBQUMsRUFBQXRwRSxHQUNBLElBQUFqSyxFQUFBLElBQUF6SixNQUFBLFVBQUEwVCxHQUVBLE1BREFsSyxRQUFBQyxNQUFBQSxHQUNBQSxFQUdBLFNBQUE2UyxFQUFBMmdFLEVBQUF2cEUsR0FDQXVwRSxHQUNBRCxFQUFBdHBFLEdBSUEsU0FBQXdwRSxFQUFBeHBFLEdBQ0EsT0FBQUEsRUFDQSxLQUFBQSxFQUVBLEdBa0JBLFNBQUF5cEUsRUFBQTM1RSxFQUFBd0IsR0FDQSxPQUFBQSxHQUNBLElBQUEsU0FBQSxNQUFBLGlCQUFBeEIsRUFDQSxJQUFBLFNBQUEsTUFBQSxpQkFBQUEsRUFDQSxJQUFBLFNBQUEsTUFBQSxpQkFBQUEsRUFDQSxJQUFBLFVBQUEsTUFBQSxrQkFBQUEsRUFDQSxJQUFBLFdBQUEsTUFBQSxtQkFBQUEsRUFDQSxJQUFBLFlBQUEsWUFBQSxJQUFBQSxFQUNBLElBQUEsU0FBQSxNQUFBLGlCQUFBQSxHQW9CQSxTQUFBNDVFLEVBQUE1NUUsRUFBQWtILEVBQUFnSixHQUNBaEosRUFBQXhJLFFBQUFzQixHQUFBLEdBQ0F3NUUsRUFBQSxnQkFBQUUsRUFBQXhwRSxHQUFBLHFCQUFBaEosR0FJQSxJQUFBMnlFLEVBQUEsQ0FDQSxLQUNBLFNBQ0EsWUFDQSxhQUNBLGFBQ0EsYUFDQSxxQkFDQSxVQUNBLFVBV0EsU0FBQUMsRUFBQTUxRSxFQUFBbkksR0FFQSxJQURBbUksR0FBQSxHQUNBQSxFQUFBckgsT0FBQWQsR0FDQW1JLEVBQUEsSUFBQUEsRUFFQSxPQUFBQSxFQUdBLFNBQUE2MUUsSUFDQXp6RSxLQUFBb0csS0FBQSxVQUNBcEcsS0FBQXVsQyxNQUFBLEdBQ0F2bEMsS0FBQWdULE1BQUEsR0FDQWhULEtBQUEwekUsV0FBQSxFQUdBLFNBQUFDLEVBQUF2akUsRUFBQTRELEdBQ0FoVSxLQUFBb1EsT0FBQUEsRUFDQXBRLEtBQUFnVSxLQUFBQSxFQUNBaFUsS0FBQTR6RSxPQUFBLEdBR0EsU0FBQUMsRUFBQUMsRUFBQUMsRUFBQW5xRSxHQUNBNUosS0FBQXk0RCxLQUFBcWIsRUFDQTl6RSxLQUFBZ1UsS0FBQSsvRCxFQUNBL3pFLEtBQUE0SixRQUFBQSxFQUdBLFNBQUFvcUUsSUFDQSxJQUFBcjBFLEVBQUEsSUFBQXpKLE1BQ0EyVCxHQUFBbEssRUFBQWtLLE9BQUFsSyxHQUFBakUsV0FDQXU0RSxFQUFBLHNDQUFBcjBCLEtBQUEvMUMsR0FDQSxHQUFBb3FFLEVBQ0EsT0FBQUEsRUFBQSxHQUVBLElBQUFDLEVBQUEseUNBQUF0MEIsS0FBQS8xQyxHQUNBLE9BQUFxcUUsRUFDQUEsRUFBQSxHQUVBLFVBR0EsU0FBQUMsSUFDQSxJQUFBeDBFLEVBQUEsSUFBQXpKLE1BQ0EyVCxHQUFBbEssRUFBQWtLLE9BQUFsSyxHQUFBakUsV0FDQXU0RSxFQUFBLG9DQUFBcjBCLEtBQUEvMUMsR0FDQSxHQUFBb3FFLEVBQ0EsT0FBQUEsRUFBQSxHQUVBLElBQUFDLEVBQUEsbUNBQUF0MEIsS0FBQS8xQyxHQUNBLE9BQUFxcUUsRUFDQUEsRUFBQSxHQUVBLFVBR0EsU0FBQUUsRUFBQXBrQixFQUFBM2pCLEdBQ0EsSUF2SkF6dUMsRUF1SkEybkMsRUFBQXlxQixFQUFBanFELE1BQUEsTUFDQWd1RSxFQUFBLEVBQ0FELEVBQUEsRUFDQU8sRUFBQSxDQUNBQyxRQUFBLElBQUFiLEVBQ0FjLEVBQUEsSUFBQWQsR0FFQVksRUFBQUMsUUFBQWx1RSxLQUFBaXVFLEVBQUEsR0FBQWp1RSxLQUFBaW1DLEdBQUEybkMsSUFDQUssRUFBQUMsUUFBQS91QyxNQUFBenRDLEtBQUEsSUFBQTY3RSxFQUFBLEVBQUEsS0FDQSxJQUFBLElBQUEvOUUsRUFBQSxFQUFBQSxFQUFBMnZDLEVBQUFodkMsU0FBQVgsRUFBQSxDQUNBLElBQUFvZSxFQUFBdXhCLEVBQUEzdkMsR0FDQWdDLEVBQUEsMkJBQUFnb0QsS0FBQTVyQyxHQUNBLEdBQUFwYyxFQUNBLE9BQUFBLEVBQUEsSUFDQSxJQUFBLE9BQ0EsSUFBQTQ4RSxFQUFBLGlCQUFBNTBCLEtBQUFob0QsRUFBQSxJQUNBNDhFLElBQ0FULEVBQUEsRUFBQVMsRUFBQSxHQUNBQSxFQUFBLE1BQ0FWLEVBQUEsRUFBQVUsRUFBQSxNQUNBSCxJQUNBQSxFQUFBUCxHQUFBLElBQUFMLEtBSUEsTUFDQSxJQUFBLFNBQ0EsSUFBQWdCLEVBQUEsNkJBQUE3MEIsS0FBQWhvRCxFQUFBLElBQ0E2OEUsSUFDQUosRUFBQVAsR0FBQTF0RSxLQUFBcXVFLEVBQUEsSUFwTEE3MkUsRUFxTEE2MkUsRUFBQSxHQXBMQSxvQkFBQW5kLEtBQ0FBLEtBQUExNUQsR0FFQSxVQUFBQSxHQWtMQTYyRSxFQUFBLElBS0FKLEVBQUFQLEdBQUF2dUMsTUFBQXp0QyxLQUFBLElBQUE2N0UsRUFBQUksSUFBQS8vRCxJQVFBLE9BTkFwVSxPQUFBMlAsS0FBQThrRSxHQUFBN29FLFFBQUEsU0FBQXNvRSxHQUNBLElBQUFyYixFQUFBNGIsRUFBQVAsR0FDQXJiLEVBQUFsekIsTUFBQS81QixRQUFBLFNBQUF3SSxHQUNBeWtELEVBQUF6bEQsTUFBQWdCLEVBQUE1RCxRQUFBNEQsTUFHQXFnRSxFQWlJQSxTQUFBSyxFQUFBbGtFLEdBQ0FBLEVBQUFta0UsWUFBQVgsSUFvQ0EsU0FBQVksRUFBQWhyRSxFQUFBeWlDLEdBQ0EsSUFBQXdvQyxFQUFBVixJQUNBakIsRUFBQXRwRSxFQUNBLGdCQUFBeWlDLEdBQUEybkMsTUFDQSxZQUFBYSxFQUFBLEdBQUEsZ0JBQUFBLElBa0JBLFNBQUFDLEVBQUFwN0UsRUFBQXdCLEVBQUEwTyxFQUFBeWlDLEdBQ0FnbkMsRUFBQTM1RSxFQUFBd0IsSUFDQTA1RSxFQUNBLHlCQUFBeEIsRUFBQXhwRSxHQUNBLGNBQUExTyxFQUFBLGdCQUFBeEIsRUFDQTJ5QyxHQUFBMm5DLEtBc0JBLElBQUFlLEVBQUEsTUFFQUMsRUFBQSxLQUNBQyxFQUFBLEtBQ0FDLEVBQUEsS0FDQUMsRUFBQSxLQUNBQyxFQUFBLEtBUUFDLEVBQUEsS0FFQUMsRUFBQSxNQUNBQyxFQUFBLE1BQ0FDLEVBQUEsTUFDQUMsRUFBQSxNQUlBQyxFQUFBLEdBaUJBLFNBQUFDLEVBQUF6NkUsRUFBQTA2RSxHQUNBLE9BQUExNkUsSUFBQXE2RSxHQUNBcjZFLElBQUFvNkUsR0FDQXA2RSxJQUFBczZFLEVBQ0EsRUFDQXQ2RSxJQUFBdTZFLEVBQ0EsRUFFQUMsRUFBQXg2RSxHQUFBMDZFLEVBSUEsU0FBQUMsRUFBQXR0RSxHQUNBLFFBQUFBLEVBQUFBLEVBQUEsSUFBQUEsR0E1QkFtdEUsRUFqQkEsTUFrQkFBLEVBakJBLE1BaUJBLEVBRUFBLEVBbEJBLE1BbUJBQSxFQWxCQSxNQW1CQUEsRUFUQSxPQVVBQSxFQUFBRixHQUNBRSxFQUFBSixHQUNBSSxFQUFBSCxHQUFBLEVBRUFHLEVBdkJBLE1Bd0JBQSxFQXZCQSxNQXdCQUEsRUFBQUwsR0FDQUssRUFBQUQsR0FBQSxFQTBLQSxJQUFBSyxFQUFBOUMsRUFBQXhnRSxFQUFBLENBQ0ExQyxTQW5PQSxTQUFBaW1FLEdBQ0FBLEtBbU9BN0MsTUFBQUEsRUFDQTBCLGFBQUFBLEVBQ0F2b0MsUUE5UEEsU0FBQThtQyxFQUFBdnBFLEVBQUF5aUMsR0FDQThtQyxHQUNBeUIsRUFBQWhyRSxFQUFBeWlDLEdBQUEybkMsTUE2UEFnQyxVQXJsQkEsU0FBQUMsRUFBQUMsRUFBQXRzRSxHQUNBcXNFLEtBQUFDLEdBQ0FoRCxFQUFBLHNCQUFBK0MsRUFBQSxJQUFBN0MsRUFBQXhwRSxHQUNBLHNCQUFBaEssT0FBQTJQLEtBQUEybUUsR0FBQWorRSxTQW1sQkFrK0UsaUJBMVBBLFNBQUFGLEVBQUFDLEVBQUF0c0UsRUFBQXlpQyxHQUNBNHBDLEtBQUFDLEdBQ0F0QixFQUNBLHNCQUFBcUIsRUFBQSxJQUFBN0MsRUFBQXhwRSxHQUNBLHNCQUFBaEssT0FBQTJQLEtBQUEybUUsR0FBQWorRSxPQUNBbzBDLEdBQUEybkMsTUFzUEE3dEUsWUExaEJBLFNBQUF0TCxHQUNBK0UsT0FBQTJQLEtBQUExVSxHQUFBMlEsUUFBQSxTQUFBdkMsR0FDQXNxRSxFQUFBbjdFLFFBQUE2USxHQUFBLEdBQ0FpcUUsRUFBQSxzQ0FBQWpxRSxFQUFBLHFCQUFBc3FFLE1Bd2hCQXI0RSxLQTdqQkEsU0FBQXhCLEVBQUF3QixFQUFBME8sR0FDQXlwRSxFQUFBMzVFLEVBQUF3QixJQUNBZzRFLEVBQ0EseUJBQUFFLEVBQUF4cEUsR0FDQSxjQUFBMU8sRUFBQSxnQkFBQXhCLElBMGpCQTA4RSxZQUFBdEIsRUFDQXZDLGFBbmxCQSxTQUFBbjNFLEVBQUF3TyxHQUNBMm9FLEVBQUFuM0UsSUFDQTgzRSxFQUNBLHlCQUFBRSxFQUFBeHBFLEdBQ0EsNEJBZ2xCQXlzRSxJQXhqQkEsU0FBQTM4RSxFQUFBa1EsR0FDQWxRLEdBQUEsSUFDQSxFQUFBQSxLQUFBQSxHQUNBdzVFLEVBQUEsNEJBQUF4NUUsRUFBQSxJQUFBMDVFLEVBQUF4cEUsR0FDQSxvQ0FxakJBMHNFLE1BQUFoRCxFQUNBaUQsWUE5WUEsU0FBQTdwQixFQUFBaFksRUFBQXNiLEVBQUE5MEQsRUFBQW14QyxHQUNBLElBQUFxZ0IsRUFBQThwQixtQkFBQTloQyxFQUFBZ1ksRUFBQStwQixnQkFBQSxDQUNBLElBQUFDLEVBQUFocUIsRUFBQWlxQixpQkFBQWppQyxHQUNBa2lDLEVBQUExN0UsSUFBQXd4RCxFQUFBbXFCLGdCQUFBLFdBQUEsU0FDQS9CLEVBQUE5a0IsRUFBQSxTQUFBNG1CLEVBQUEsa0NBQUF2cUMsR0FDQSxJQUFBZ29DLEVBQUFELEVBQUFwa0IsRUFBQTNqQixHQUNBdW5DLEVBekNBLFNBQUE4QyxHQUNBLElBQUExbUUsRUFBQSxHQWVBLE9BZEEwbUUsRUFBQTN3RSxNQUFBLE1BQUF5RixRQUFBLFNBQUFzckUsR0FDQSxLQUFBQSxFQUFBdmdGLE9BQUEsR0FBQSxDQUdBLElBQUFxQixFQUFBLGlDQUFBZ29ELEtBQUFrM0IsR0FDQWwvRSxFQUNBb1ksRUFBQWxZLEtBQUEsSUFBQSs3RSxFQUNBLEVBQUFqOEUsRUFBQSxHQUNBLEVBQUFBLEVBQUEsR0FDQUEsRUFBQSxHQUFBOEosU0FDQW8xRSxFQUFBdmdGLE9BQUEsR0FDQXlaLEVBQUFsWSxLQUFBLElBQUErN0UsRUFBQSxVQUFBLEVBQUFpRCxPQUdBOW1FLEVBeUJBK21FLENBQUFMLElBdEJBLFNBQUFyQyxFQUFBVCxHQUNBQSxFQUFBcG9FLFFBQUEsU0FBQTdMLEdBQ0EsSUFBQTg0RCxFQUFBNGIsRUFBQTEwRSxFQUFBODRELE1BQ0EsR0FBQUEsRUFBQSxDQUNBLElBQUF6a0QsRUFBQXlrRCxFQUFBemxELE1BQUFyVCxFQUFBcVUsTUFDQSxHQUFBQSxFQUdBLE9BRkFBLEVBQUE0L0QsT0FBQTk3RSxLQUFBNkgsUUFDQTg0RCxFQUFBaWIsV0FBQSxHQUlBVyxFQUFBQyxRQUFBWixXQUFBLEVBQ0FXLEVBQUFDLFFBQUEvdUMsTUFBQSxHQUFBcXVDLE9BQUE5N0UsS0FBQTZILEtBV0FxM0UsQ0FBQTNDLEVBQUFULEdBRUFoMEUsT0FBQTJQLEtBQUE4a0UsR0FBQTdvRSxRQUFBLFNBQUFzb0UsR0FDQSxJQUFBcmIsRUFBQTRiLEVBQUFQLEdBQ0EsR0FBQXJiLEVBQUFpYixVQUFBLENBSUEsSUFBQXVELEVBQUEsQ0FBQSxJQUNBQyxFQUFBLENBQUEsSUFPQXAvRSxFQUFBLGVBQUFnOEUsRUFBQSxLQUFBcmIsRUFBQXJ5RCxLQUFBLEtBQUEsd0RBRUFxeUQsRUFBQWx6QixNQUFBLzVCLFFBQUEsU0FBQXdJLEdBQ0EsR0FBQUEsRUFBQTQvRCxPQUFBcjlFLE9BQUEsRUFBQSxDQUNBdUIsRUFBQTA3RSxFQUFBeC9ELEVBQUE1RCxPQUFBLEdBQUEsTUFBQSw2Q0FDQXRZLEVBQUFrYyxFQUFBQSxLQUFBaS9ELEVBQUEsd0RBR0EsSUFBQS8xRSxFQUFBLEVBQ0E4VyxFQUFBNC9ELE9BQUFwb0UsUUFBQSxTQUFBN0wsR0FDQSxJQUFBaUssRUFBQWpLLEVBQUFpSyxRQUNBcW9ELEVBQUEseUJBQUFyUyxLQUFBaDJDLEdBQ0EsR0FBQXFvRCxFQUFBLENBQ0EsSUFBQWtsQixFQUFBbGxCLEVBQUEsR0FFQSxPQURBcm9ELEVBQUFxb0QsRUFBQSxHQUNBa2xCLEdBQ0EsSUFBQSxTQUNBQSxFQUFBLElBR0FqNkUsRUFBQXFCLEtBQUFpRCxJQUFBd1MsRUFBQUEsS0FBQTViLFFBQUErK0UsRUFBQWo2RSxHQUFBLFFBRUFBLEVBQUEsRUFHQXBGLEVBQUEwN0UsRUFBQSxLQUFBLElBQ0ExN0UsRUFBQTA3RSxFQUFBLE1BQUF0MkUsRUFBQSxHQUFBKzFFLEVBQUEsb0JBQ0FuN0UsRUFBQTA3RSxFQUFBLEtBQUEsSUFDQTE3RSxFQUFBOFIsRUFBQXFwRSxFQUFBLHNCQUVBbjdFLEVBQUEwN0UsRUFBQSxLQUFBLEdBQUFQLFFBRUFuN0UsRUFBQTA3RSxFQUFBeC9ELEVBQUE1RCxPQUFBLEdBQUEsT0FDQXRZLEVBQUFrYyxFQUFBQSxLQUFBaS9ELEVBQUEsZUFHQSxvQkFBQTNnRSxVQUFBcStDLE9BQUF5bUIsT0FJQTEzRSxRQUFBeUgsSUFBQTh2RSxFQUFBaC9FLEtBQUEsTUFIQWkvRSxFQUFBLEdBQUFELEVBQUFoL0UsS0FBQSxNQUNBeUgsUUFBQXlILElBQUEvSCxNQUFBTSxRQUFBdzNFLElBM0NBLFNBQUFwL0UsRUFBQThGLEVBQUErWCxHQUNBc2hFLEVBQUFuL0UsS0FBQThGLEdBQ0FzNUUsRUFBQXAvRSxLQUFBNmQsR0FBQSxPQStDQW5ELEVBQUEwZ0UsTUFBQSxtQkFBQTBELEVBQUEsWUFBQXZDLEVBQUEsR0FBQWp1RSxRQTRVQWl4RSxVQXhVQSxTQUFBM3FCLEVBQUE0cUIsRUFBQUMsRUFBQUMsRUFBQW5yQyxHQUNBLElBQUFxZ0IsRUFBQStxQixvQkFBQUgsRUFBQTVxQixFQUFBZ3JCLGFBQUEsQ0FDQSxJQUFBaEIsRUFBQWhxQixFQUFBaXJCLGtCQUFBTCxHQUNBTSxFQUFBeEQsRUFBQW1ELEVBQUFsckMsR0FHQXdyQyxFQUFBLDhDQUZBekQsRUFBQW9ELEVBQUFuckMsR0FHQSxHQUFBam1DLEtBQUEsMkJBQUF3eEUsRUFBQSxHQUFBeHhFLEtBQUEsSUFFQSxvQkFBQWtNLFNBQ0E1UyxRQUFBeUgsSUFBQSxLQUFBMHdFLEVBQUE1RSxFQUFBLEtBQUF5RCxFQUNBLHVEQUNBLGFBRUFoM0UsUUFBQXlILElBQUEwd0UsRUFBQTVFLEVBQUF5RCxHQUVBbGtFLEVBQUEwZ0UsTUFBQTJFLEtBeVRBaEQsU0FBQVYsRUFDQU8sZUFBQUEsRUFDQW9ELGFBblRBLFNBQUEvb0UsRUFBQXMrQyxFQUFBZSxFQUFBMnBCLEdBR0EsU0FBQXRqRSxFQUFBN1csR0FDQSxPQUFBQSxFQUNBbTZFLEVBQUF0akUsR0FBQTdXLEdBRUEsRUFLQSxTQUFBbzZFLEVBQUFuZSxFQUFBbDBELEdBQ0EvRixPQUFBMlAsS0FBQTVKLEdBQUE2RixRQUFBLFNBQUF4VixHQUNBNmpFLEVBQUFrZSxFQUFBdGpFLEdBQUF6ZSxLQUFBLElBYkEwK0UsRUFBQTNsRSxHQVFBQSxFQUFBa3BFLFFBQUF4akUsRUFBQTFGLEVBQUFtcEUsT0FBQXJrRSxNQUNBOUUsRUFBQW9wRSxRQUFBMWpFLEVBQUExRixFQUFBbXBFLE9BQUFwcUIsTUFRQSxJQUFBc3FCLEVBQUFycEUsRUFBQXNwRSxZQUFBLEdBQ0FMLEVBQUFJLEVBQUEvcUIsRUFBQTZxQixRQUNBRixFQUFBSSxFQUFBL3FCLEVBQUFpckIsU0FFQSxJQUFBQyxFQUFBeHBFLEVBQUF5cEUsY0FBQSxHQUNBUixFQUFBTyxFQUFBbnFCLEVBQUE4cEIsUUFDQUYsRUFBQU8sRUFBQW5xQixFQUFBa3FCLFNBRUF2cEUsRUFBQTBwRSxVQUNBLFVBQUExcEUsRUFBQW1wRSxRQUNBLFVBQUFucEUsRUFBQXVwRSxTQUNBLGFBQUF2cEUsRUFBQW1wRSxRQUNBLGFBQUFucEUsRUFBQXVwRSxTQXNSQUksa0JBaFBBLFNBQUFDLEVBQUFDLEVBQUFDLEdBQ0FGLEVBQUFsckIsUUFDQTZsQixFQUNBcUYsRUFBQWxyQixRQUFBcXJCLFNBQUFDLGVBQ0FILEVBQ0EsNkNBRUF0RixFQUNBcUYsRUFBQUssYUFBQUMsY0FBQXg0QyxPQUNBbzRDLEVBQ0EsbURBdU9BN0UsYUFBQUEsRUFDQWtGLFVBNUtBLFNBQUFDLEVBQUFDLEVBQUFDLEdBQ0EsSUFBQXpqRixFQUNBb3VDLEVBQUFvMUMsRUFBQS9zRCxNQUNBeUcsRUFBQXNtRCxFQUFBeGpFLE9BQ0E5ZixFQUFBc2pGLEVBQUF4RCxTQUdBcGpFLEVBQUF3eEIsRUFBQSxHQUFBQSxHQUFBcTFDLEVBQUFDLGdCQUNBeG1ELEVBQUEsR0FBQUEsR0FBQXVtRCxFQUFBQyxlQUNBLHlCQUdBSCxFQUFBSSxRQUFBeEUsR0FBQW9FLEVBQUFLLFFBQUF6RSxHQUNBdmlFLEVBQUFxakUsRUFBQTd4QyxJQUFBNnhDLEVBQUEvaUQsR0FDQSxnRkFHQSxJQUFBc21ELEVBQUFLLFFBQ0EsSUFBQXoxQyxHQUFBLElBQUFsUixHQUNBdGdCLEVBQ0EybUUsRUFBQU8sWUFBQXpFLEdBQ0FrRSxFQUFBTyxZQUFBdkUsR0FDQWdFLEVBQUFPLFlBQUF4RSxHQUNBaUUsRUFBQU8sWUFBQXRFLEVBQ0EsK0JBSUE1aUUsRUFBQXFqRSxFQUFBN3hDLElBQUE2eEMsRUFBQS9pRCxHQUNBLDZEQUNBdGdCLEVBQUE0bUUsRUFBQUssV0FBQXoxQyxHQUFBLEdBQUEsRUFDQSxzQ0FHQW8xQyxFQUFBbCtFLE9BQUFtNkUsSUFDQWdFLEVBQUF6c0IsV0FBQXgwRCxRQUFBLDRCQUFBLEdBQ0FvYSxFQUFBMm1FLEVBQUFPLFlBQUExRSxHQUFBbUUsRUFBQVEsWUFBQTNFLEVBQ0EsOERBRUF4aUUsR0FBQTJtRSxFQUFBUyxXQUNBLHdEQUlBLElBQUFDLEVBQUFULEVBQUFVLE9BQ0EsSUFBQWxrRixFQUFBLEVBQUFBLEVBQUEsS0FBQUEsRUFDQSxHQUFBaWtGLEVBQUFqa0YsR0FBQSxDQUNBLElBQUFta0YsRUFBQS8xQyxHQUFBcHVDLEVBQ0Fva0YsRUFBQWxuRCxHQUFBbDlCLEVBQ0E0YyxFQUFBNG1FLEVBQUFLLFFBQUEsR0FBQTdqRixFQUFBLHVCQUVBLElBQUFxa0YsRUFBQUosRUFBQWprRixHQWFBLEdBWEE0YyxFQUNBeW5FLEVBQUE1dEQsUUFBQTB0RCxHQUNBRSxFQUFBcmtFLFNBQUFva0UsRUFDQSxnQ0FFQXhuRSxFQUNBeW5FLEVBQUF4NUMsU0FBQTI0QyxFQUFBMzRDLFFBQ0F3NUMsRUFBQWxCLGlCQUFBSyxFQUFBTCxnQkFDQWtCLEVBQUEvK0UsT0FBQWsrRSxFQUFBbCtFLEtBQ0EsbUNBRUErK0UsRUFBQUMsaUJBRUEsR0FBQUQsRUFBQTcrRSxLQUFBLENBR0EsSUFBQSsrRSxFQUFBNTdFLEtBQUE2N0UsS0FBQXpFLEVBQUFzRSxFQUFBLytFLEtBQUFwRixHQUFBaWtGLEVBQUFFLEVBQUFJLGlCQUFBSixFQUFBSSxnQkFDQTduRSxFQUFBeW5FLEVBQUE3K0UsS0FBQTFFLGFBQUF5akYsRUFBQUgsRUFDQSwrRUFNQWIsRUFBQVMsWUFDQXBuRSxFQUFBLElBQUE0bUUsRUFBQUssUUFBQSxHQUFBN2pGLEdBQUEscUJBSUF3akYsRUFBQWMsWUFDQTFuRSxHQUFBMm1FLEVBQUFTLFdBQ0EsMERBeUZBVSxZQXJGQSxTQUFBN3NCLEVBQUEwckIsRUFBQW9CLEVBQUFsQixHQUNBLElBQUFyMUMsRUFBQXlwQixFQUFBcGhDLE1BQ0F5RyxFQUFBMjZCLEVBQUE3M0MsT0FDQTlmLEVBQUEyM0QsRUFBQW1vQixTQUdBcGpFLEVBQ0F3eEIsRUFBQSxHQUFBQSxHQUFBcTFDLEVBQUFDLGdCQUFBeG1ELEVBQUEsR0FBQUEsR0FBQXVtRCxFQUFBQyxlQUNBLHlCQUNBOW1FLEVBQ0F3eEIsSUFBQWxSLEVBQ0EsMkJBQ0F0Z0IsRUFDQTJtRSxFQUFBSSxRQUFBeEUsR0FBQW9FLEVBQUFLLFFBQUF6RSxFQUNBLHVDQUVBLElBQUEsSUFBQW4vRSxFQUFBLEVBQUFBLEVBQUEya0YsRUFBQWhrRixTQUFBWCxFQUFBLENBQ0EsSUFBQTRrRixFQUFBRCxFQUFBM2tGLEdBQ0E0YyxFQUNBZ29FLEVBQUFudUQsUUFBQTJYLEdBQUF3MkMsRUFBQTVrRSxTQUFBa2QsRUFDQSxvQ0FFQXFtRCxFQUFBUyxhQUNBcG5FLEdBQUFnb0UsRUFBQU4sV0FDQSxtREFDQTFuRSxFQUFBLElBQUFnb0UsRUFBQWYsUUFDQSxpREFNQSxJQURBLElBQUFnQixFQUFBRCxFQUFBVixPQUNBOThFLEVBQUEsRUFBQUEsRUFBQSxLQUFBQSxFQUFBLENBQ0EsSUFBQWk5RSxFQUFBUSxFQUFBejlFLEdBQ0EsR0FBQWk5RSxFQUFBLENBQ0EsSUFBQUYsRUFBQS8xQyxHQUFBaG5DLEVBQ0FnOUUsRUFBQWxuRCxHQUFBOTFCLEVBQ0F3VixFQUFBZ29FLEVBQUFmLFFBQUEsR0FBQXo4RSxFQUFBLHVCQUNBd1YsRUFDQXluRSxFQUFBNXRELFFBQUEwdEQsR0FDQUUsRUFBQXJrRSxTQUFBb2tFLEVBQ0EsZ0NBQ0F4bkUsRUFDQXluRSxFQUFBeDVDLFNBQUFndEIsRUFBQWh0QixRQUNBdzVDLEVBQUFsQixpQkFBQXRyQixFQUFBc3JCLGdCQUNBa0IsRUFBQS8rRSxPQUFBdXlELEVBQUF2eUQsS0FDQSxtQ0FFQSsrRSxFQUFBQyxZQUVBRCxFQUFBNytFLE1BQ0FvWCxFQUFBeW5FLEVBQUE3K0UsS0FBQTFFLGFBQUFxakYsRUFBQUMsRUFDQXo3RSxLQUFBaUQsSUFBQW0wRSxFQUFBc0UsRUFBQS8rRSxLQUFBcEYsR0FBQW1rRixFQUFBSSxpQkFDQSwrRUFtQ0FLLEVBQUEsRUFFQUMsRUFBQSxFQUNBQyxFQUFBLEVBQ0FDLEVBQUEsRUFFQSxTQUFBQyxFQUFBNS9FLEVBQUFFLEdBQ0E0RSxLQUFBeVUsR0FBQWltRSxJQUNBMTZFLEtBQUE5RSxLQUFBQSxFQUNBOEUsS0FBQTVFLEtBQUFBLEVBR0EsU0FBQTIvRSxFQUFBbjlFLEdBQ0EsT0FBQUEsRUFBQTZELFFBQUEsTUFBQSxRQUFBQSxRQUFBLEtBQUEsT0FzQ0EsU0FBQXU1RSxFQUFBcDlFLEdBQ0EsTUFBQSxJQXBDQSxTQUFBcTlFLEVBQUFyOUUsR0FDQSxHQUFBLElBQUFBLEVBQUFySCxPQUNBLE1BQUEsR0FHQSxJQUFBMmtGLEVBQUF0OUUsRUFBQXU5RSxPQUFBLEdBQ0FDLEVBQUF4OUUsRUFBQXU5RSxPQUFBdjlFLEVBQUFySCxPQUFBLEdBRUEsR0FBQXFILEVBQUFySCxPQUFBLEdBQ0Eya0YsSUFBQUUsSUFDQSxNQUFBRixHQUFBLE1BQUFBLEdBQ0EsTUFBQSxDQUFBLElBQUFILEVBQUFuOUUsRUFBQUosT0FBQSxFQUFBSSxFQUFBckgsT0FBQSxJQUFBLEtBR0EsSUFBQXFCLEVBQUEsNENBQUFnb0QsS0FBQWhpRCxHQUNBLEdBQUFoRyxFQUNBLE9BQ0FxakYsRUFBQXI5RSxFQUFBSixPQUFBLEVBQUE1RixFQUFBb2IsUUFDQXJTLE9BQUFzNkUsRUFBQXJqRixFQUFBLEtBQ0ErSSxPQUFBczZFLEVBQUFyOUUsRUFBQUosT0FBQTVGLEVBQUFvYixNQUFBcGIsRUFBQSxHQUFBckIsVUFJQSxJQUFBOGtGLEVBQUF6OUUsRUFBQW1JLE1BQUEsS0FDQSxHQUFBLElBQUFzMUUsRUFBQTlrRixPQUNBLE1BQUEsQ0FBQSxJQUFBd2tGLEVBQUFuOUUsR0FBQSxLQUlBLElBREEsSUFBQW9TLEVBQUEsR0FDQXBhLEVBQUEsRUFBQUEsRUFBQXlsRixFQUFBOWtGLFNBQUFYLEVBQ0FvYSxFQUFBQSxFQUFBclAsT0FBQXM2RSxFQUFBSSxFQUFBemxGLEtBRUEsT0FBQW9hLEVBSUFpckUsQ0FBQXI5RSxHQUFBM0YsS0FBQSxNQUFBLElBd0JBLElBQUFxZ0YsRUFBQSxDQUNBd0MsZ0JBQUFBLEVBQ0FsdkMsT0F2QkEsU0FBQTF3QyxFQUFBRSxHQUNBLE9BQUEsSUFBQTAvRSxFQUFBNS9FLEVBQUE4L0UsRUFBQTUvRSxFQUFBLE1BdUJBa2dGLFVBcEJBLFNBQUE3NkUsR0FDQSxNQUFBLG1CQUFBQSxJQUFBQSxFQUFBODZFLFdBQUE5NkUsYUFBQXE2RSxHQW9CQVUsTUFqQkEsU0FBQUEsRUFBQS82RSxFQUFBd3JDLEdBQ0EsTUFBQSxtQkFBQXhyQyxFQUNBLElBQUFxNkUsRUFBQUgsRUFBQWw2RSxHQUNBLGlCQUFBQSxHQUFBLGtCQUFBQSxFQUNBLElBQUFxNkUsRUFBQUYsRUFBQW42RSxHQUNBdEksTUFBQWdELFFBQUFzRixHQUNBLElBQUFxNkUsRUFBQUQsRUFBQXA2RSxFQUFBc1QsSUFBQSxDQUFBclQsRUFBQTlLLElBQUE0bEYsRUFBQTk2RSxFQUFBdXJDLEVBQUEsSUFBQXIyQyxFQUFBLE9BQ0E2SyxhQUFBcTZFLEVBQ0FyNkUsT0FFQXExRSxHQUFBLEVBQUEsa0NBQUE3cEMsSUFRQXd2QyxTQUFBVCxHQUlBVSxFQUFBLENBQ0FqVCxLQUFBLG1CQUFBbEgsc0JBQ0EsU0FBQXBaLEdBQUEsT0FBQW9aLHNCQUFBcFosSUFDQSxTQUFBQSxHQUFBLE9BQUFrUSxXQUFBbFEsRUFBQSxLQUNBd3pCLE9BQUEsbUJBQUF0YSxxQkFDQSxTQUFBcWEsR0FBQSxPQUFBcmEscUJBQUFxYSxJQUNBRSxjQUlBQyxFQUFBLG9CQUFBeHJCLGFBQUFBLFlBQUFDLElBQ0EsV0FBQSxPQUFBRCxZQUFBQyxPQUNBLFdBQUEsT0FBQSxJQUFBQyxNQXNIQSxTQUFBdXJCLEVBQUF6dkUsR0FDQSxNQUFBLGlCQUFBQSxFQUNBQSxFQUFBdEcsU0FFQSt2RSxFQUFBMzlFLE1BQUFnRCxRQUFBa1IsR0FBQSwyQkFDQUEsR0FHQSxTQUFBMHZFLEVBQUFDLEdBQ0EsTUFBQSxpQkFBQUEsR0FDQWxHLEVBQUEsb0JBQUF4akUsU0FBQSxnQ0FDQUEsU0FBQTIzQixjQUFBK3hDLElBRUFBLEVBR0EsU0FBQUMsRUFBQUMsR0FDQSxJQUNBNXVFLEVBQUEwOUIsRUFBQThjLEVBQUE0RSxFQWpDQTd4RCxFQWdDQTZaLEVBQUF3bkUsR0FBQSxHQUVBQyxFQUFBLEdBQ0F2dkIsRUFBQSxHQUNBQyxFQUFBLEdBQ0FtUCxFQUFBLG9CQUFBckwsT0FBQSxFQUFBQSxPQUFBd0wsaUJBQ0FyUCxHQUFBLEVBQ0FDLEVBQUEsU0FBQXlCLEdBQ0FBLEdBQ0FzbkIsRUFBQTVDLE1BQUExa0IsSUFHQTR0QixFQUFBLGFBMERBLEdBekRBLGlCQUFBMW5FLEdBQ0FvaEUsRUFDQSxvQkFBQXhqRSxTQUNBLHNEQUNBaEYsRUFBQWdGLFNBQUEyM0IsY0FBQXYxQixHQUNBb2hFLEVBQUF4b0UsRUFBQSxxQ0FDQSxpQkFBQW9ILEVBakRBLGlCQUZBN1osRUFvREE2WixHQWxEQW84QyxVQUNBLG1CQUFBajJELEVBQUE4UyxhQUNBLG1CQUFBOVMsRUFBQXV3QixzQkFpREE5ZCxFQUFBb0gsR0E3Q0EsU0FBQTdaLEdBQ0EsTUFDQSxtQkFBQUEsRUFBQXdoRixZQUNBLG1CQUFBeGhGLEVBQUF5aEYsYUEyQ0FDLENBQUE3bkUsSUFJQW9oRSxFQUFBM3ZFLFlBQUF1TyxHQUNBLE9BQUFBLEVBQ0FnNEMsRUFBQWg0QyxFQUFBZzRDLEdBQ0EsV0FBQWg0QyxFQUNBb3pDLEVBQUFpMEIsRUFBQXJuRSxFQUFBb3pDLFFBQ0EsY0FBQXB6QyxJQUNBczJCLEVBQUErd0MsRUFBQXJuRSxFQUFBczJCLFlBRUEsZUFBQXQyQixHQUVBb2hFLEVBQUE1NkUsS0FEQWloRixFQUFBem5FLEVBQUEwNUMsV0FDQSxTQUFBLDhCQUVBLGVBQUExNUMsSUFDQWs0QyxFQUFBa3ZCLEVBQUFwbkUsRUFBQWs0QyxhQUVBLHVCQUFBbDRDLElBQ0FtNEMsRUFBQWl2QixFQUFBcG5FLEVBQUFtNEMscUJBRUEsV0FBQW40QyxJQUNBb2hFLEVBQUE1NkUsS0FDQXdaLEVBQUFxNEMsT0FBQSxXQUNBLHNDQUNBQSxFQUFBcjRDLEVBQUFxNEMsUUFFQSxZQUFBcjRDLElBQ0FvNEMsSUFBQXA0QyxFQUFBbzRDLFNBRUEsZUFBQXA0QyxHQUVBb2hFLEdBREE5WixHQUFBdG5ELEVBQUFzbkQsWUFDQSxFQUFBLHdCQS9CQWxVLEdBREE0RSxFQUFBaDRDLEdBQ0FvekMsT0FtQ0FndUIsRUFBQTVDLE1BQUEsNkJBR0E1bEUsSUFDQSxXQUFBQSxFQUFBd2pELFNBQUE5MEQsY0FDQThyRCxFQUFBeDZDLEVBRUEwOUIsRUFBQTE5QixJQUlBby9DLEVBQUEsQ0FDQSxJQUFBNUUsRUFBQSxDQUNBZ3VCLEVBQ0Esb0JBQUF4akUsU0FDQSxtRUFDQSxJQUFBdEMsRUEzTEEsU0FBQTFDLEVBQUF5L0MsRUFBQWlQLEdBQ0EsSUFrQ0F3Z0IsRUFsQ0ExMEIsRUFBQXgxQyxTQUFBL0UsY0FBQSxVQWtCQSxTQUFBNnlELElBQ0EsSUFBQXA4QixFQUFBMnNCLE9BQUE4TCxXQUNBM3BDLEVBQUE2OUIsT0FBQStMLFlBQ0EsR0FBQXB2RCxJQUFBZ0YsU0FBQTI0QixLQUFBLENBQ0EsSUFBQTdlLEVBQUE5ZSxFQUFBOGQsd0JBQ0E0WSxFQUFBNVgsRUFBQXZHLE1BQUF1RyxFQUFBeEcsS0FDQWtOLEVBQUExRyxFQUFBcXdELE9BQUFyd0QsRUFBQVgsSUFFQXE4QixFQUFBejdCLE1BQUEydkMsRUFBQWg0QixFQUNBOGpCLEVBQUFseUMsT0FBQW9tRCxFQUFBbHBDLEVBQ0FrZ0QsRUFBQWxyQixFQUFBbnlDLE1BQUEsQ0FDQTBXLE1BQUEyWCxFQUFBLEtBQ0FwdUIsT0FBQWtkLEVBQUEsT0E0QkEsT0F6REFrZ0QsRUFBQWxyQixFQUFBbnlDLE1BQUEsQ0FDQXM5QixPQUFBLEVBQ0F5cEMsT0FBQSxFQUNBQyxRQUFBLEVBQ0FseEQsSUFBQSxFQUNBN0YsS0FBQSxJQUVBdFksRUFBQUssWUFBQW02QyxHQUVBeDZDLElBQUFnRixTQUFBMjRCLE9BQ0E2YyxFQUFBbnlDLE1BQUEwNEMsU0FBQSxXQUNBMmtCLEVBQUExbEUsRUFBQXFJLE1BQUEsQ0FDQSttRSxPQUFBLEVBQ0FDLFFBQUEsS0FxQkFydkUsSUFBQWdGLFNBQUEyNEIsTUFBQSxtQkFBQTJ4QyxnQkFHQUosRUFBQSxJQUFBSSxlQUFBLFdBRUF2a0IsV0FBQStILE1BRUF5YyxRQUFBdnZFLEdBRUFxakQsT0FBQTFpRCxpQkFBQSxTQUFBbXlELEdBQUEsR0FZQUEsSUFFQSxDQUNBdFksT0FBQUEsRUFDQXMwQixVQWJBLFdBQ0FJLEVBQ0FBLEVBQUFNLGFBRUFuc0IsT0FBQWprQyxvQkFBQSxTQUFBMHpDLEdBRUE5eUQsRUFBQXdFLFlBQUFnMkMsS0FxSUE4VixDQUFBNXlCLEdBQUExNEIsU0FBQTI0QixLQUFBOGhCLEVBQUFpUCxHQUNBLElBQUFoc0QsRUFDQSxPQUFBLEtBRUE4M0MsRUFBQTkzQyxFQUFBODNDLE9BQ0FzMEIsRUFBQXBzRSxFQUFBb3NFLGVBR0EzaEYsSUFBQTBoRixFQUFBWSxxQkFBQVosRUFBQVksb0JBQUEsR0FDQXJ3QixFQW5JQSxTQUFBNUUsRUFBQXEwQixHQUNBLFNBQUFwOEUsRUFBQXFHLEdBQ0EsSUFDQSxPQUFBMGhELEVBQUE5ckIsV0FBQTUxQixFQUFBKzFFLEdBQ0EsTUFBQTNtRixHQUNBLE9BQUEsTUFHQSxPQUNBdUssRUFBQSxVQUNBQSxFQUFBLHVCQUNBQSxFQUFBLHNCQXdIQWk5RSxDQUFBbDFCLEVBQUFxMEIsR0FHQSxPQUFBenZCLEVBTUEsQ0FDQUEsR0FBQUEsRUFDQTVFLE9BQUFBLEVBQ0E5YyxVQUFBQSxFQUNBNGhCLFdBQUFBLEVBQ0FDLG1CQUFBQSxFQUNBbVAsV0FBQUEsRUFDQWxQLFFBQUFBLEVBQ0FDLE9BQUFBLEVBQ0FxdkIsVUFBQUEsSUFkQUEsSUFDQXJ2QixFQUFBLDRGQUNBLE1Bb0RBLFNBQUFpWixFQUFBdndFLEVBQUFJLEdBRUEsSUFEQSxJQUFBbWEsRUFBQTdYLE1BQUExQyxHQUNBRyxFQUFBLEVBQUFBLEVBQUFILElBQUFHLEVBQ0FvYSxFQUFBcGEsR0FBQUMsRUFBQUQsR0FFQSxPQUFBb2EsRUFHQSxJQUFBaXRFLEVBQUEsS0FDQUMsRUFBQSxLQUNBQyxFQUFBLEtBQ0FDLEVBQUEsS0FDQUMsRUFBQSxLQUNBQyxFQUFBLEtBQ0FDLEdBQUEsS0FXQSxTQUFBQyxHQUFBajFFLEdBQ0EsSUFBQWhULEVBQUFvOUMsRUFTQSxPQVJBcDlDLEdBQUFnVCxFQUFBLFFBQUEsRUFHQWhULEdBREFvOUMsSUFEQXBxQyxLQUFBaFQsR0FDQSxNQUFBLEVBR0FBLEdBREFvOUMsSUFEQXBxQyxLQUFBb3FDLEdBQ0EsS0FBQSxHQUdBcDlDLEdBREFvOUMsSUFEQXBxQyxLQUFBb3FDLEdBQ0EsSUFBQSxJQUNBcHFDLEtBQUFvcUMsSUFDQSxFQUdBLFNBQUE4cUMsS0FDQSxJQUFBQyxFQUFBMVgsRUFBQSxFQUFBLFdBQ0EsTUFBQSxLQUdBLFNBQUFudEUsRUFBQXBELEdBQ0EsSUFBQWtvRixFQTVCQSxTQUFBcDFFLEdBQ0EsSUFBQSxJQUFBM1MsRUFBQSxHQUFBQSxHQUFBLEdBQUEsR0FBQUEsR0FBQSxHQUNBLEdBQUEyUyxHQUFBM1MsRUFDQSxPQUFBQSxFQUdBLE9BQUEsRUFzQkFnb0YsQ0FBQW5vRixHQUNBb29GLEVBQUFILEVBQUFGLEdBQUFHLElBQUEsR0FDQSxPQUFBRSxFQUFBdG5GLE9BQUEsRUFDQXNuRixFQUFBem9CLE1BRUEsSUFBQWw3RCxZQUFBeWpGLEdBR0EsU0FBQUcsRUFBQTVrRixHQUNBd2tGLEVBQUFGLEdBQUF0a0YsRUFBQXhDLGFBQUEsR0FBQW9CLEtBQUFvQixHQXdDQSxNQUFBLENBQ0FMLE1BQUFBLEVBQ0FpbEYsS0FBQUEsRUFDQUMsVUF4Q0EsU0FBQTdpRixFQUFBekYsR0FDQSxJQUFBdWEsRUFBQSxLQUNBLE9BQUE5VSxHQUNBLEtBQUEraEYsRUFDQWp0RSxFQUFBLElBQUEwaUUsVUFBQTc1RSxFQUFBcEQsR0FBQSxFQUFBQSxHQUNBLE1BQ0EsS0FBQXluRixFQUNBbHRFLEVBQUEsSUFBQTlYLFdBQUFXLEVBQUFwRCxHQUFBLEVBQUFBLEdBQ0EsTUFDQSxLQUFBMG5GLEVBQ0FudEUsRUFBQSxJQUFBMmlFLFdBQUE5NUUsRUFBQSxFQUFBcEQsR0FBQSxFQUFBQSxHQUNBLE1BQ0EsS0FBQTJuRixFQUNBcHRFLEVBQUEsSUFBQXdpRSxZQUFBMzVFLEVBQUEsRUFBQXBELEdBQUEsRUFBQUEsR0FDQSxNQUNBLEtBQUE0bkYsRUFDQXJ0RSxFQUFBLElBQUE0aUUsV0FBQS81RSxFQUFBLEVBQUFwRCxHQUFBLEVBQUFBLEdBQ0EsTUFDQSxLQUFBNm5GLEVBQ0F0dEUsRUFBQSxJQUFBeWlFLFlBQUE1NUUsRUFBQSxFQUFBcEQsR0FBQSxFQUFBQSxHQUNBLE1BQ0EsS0FBQThuRixHQUNBdnRFLEVBQUEsSUFBQTZpRSxhQUFBaDZFLEVBQUEsRUFBQXBELEdBQUEsRUFBQUEsR0FDQSxNQUNBLFFBQ0EsT0FBQSxLQUVBLE9BQUF1YSxFQUFBelosU0FBQWQsRUFDQXVhLEVBQUEvTSxTQUFBLEVBQUF4TixHQUVBdWEsR0FXQWd1RSxTQVJBLFNBQUF6akYsR0FDQXVqRixFQUFBdmpGLEVBQUFELFVBV0EsSUFBQXNlLEdBQUE2a0UsS0FHQTdrRSxHQUFBcWxFLEtBQUFSLEtBRUEsSUE2Q0FTLEdBQUEsU0FBQXh4QixFQUFBRSxHQUNBLElBQUF1eEIsRUFBQSxFQUNBdnhCLEVBQUF3eEIsaUNBQ0FELEVBQUF6eEIsRUFBQTJ4QixhQXBCQSxRQXVCQSxJQUFBQyxFQUFBLEVBQ0FDLEVBQUEsRUFDQTN4QixFQUFBNHhCLHFCQUNBRixFQUFBNXhCLEVBQUEyeEIsYUF2QkEsT0F3QkFFLEVBQUE3eEIsRUFBQTJ4QixhQXpCQSxRQTZCQSxJQUFBSSxJQUFBN3hCLEVBQUE4eEIsa0JBQ0EsR0FBQUQsRUFBQSxDQUNBLElBQUFFLEVBQUFqeUIsRUFBQWt5QixnQkFDQWx5QixFQUFBbXlCLFlBN0JBLEtBNkJBRixHQUNBanlCLEVBQUFveUIsV0E5QkEsS0E4QkEsRUExQkEsS0EwQkEsRUFBQSxFQUFBLEVBMUJBLEtBQ0EsS0F5QkEsTUFFQSxJQUFBQyxFQUFBcnlCLEVBQUFzeUIsb0JBS0EsR0FKQXR5QixFQUFBdXlCLGdCQTFCQSxNQTBCQUYsR0FDQXJ5QixFQUFBd3lCLHFCQTNCQSxNQUVBLE1BVEEsS0FrQ0FQLEVBQUEsR0FDQWp5QixFQUFBbXlCLFlBbkNBLEtBbUNBLE1BM0JBLFFBNkJBbnlCLEVBQUF5eUIsdUJBOUJBLE9BOEJBVixHQUFBLE1BRUEsQ0FDQS94QixFQUFBMHlCLFNBQUEsRUFBQSxFQUFBLEVBQUEsR0FDQTF5QixFQUFBZ0MsV0FBQSxFQUFBLEVBQUEsRUFBQSxHQUNBaEMsRUFBQWtDLE1BaENBLE9BaUNBLElBQUF5d0IsRUFBQXptRSxHQUFBbWxFLFVBdENBLEtBc0NBLEdBQ0FyeEIsRUFBQTR5QixXQUFBLEVBQUEsRUFBQSxFQUFBLEVBeENBLEtBQ0EsS0F1Q0FELEdBRUEzeUIsRUFBQTZ5QixXQUFBZCxHQUFBLEdBRUEveEIsRUFBQTh5QixrQkFBQVQsR0FDQXJ5QixFQUFBK3lCLGNBQUFkLEdBRUFGLEVBQUEsSUFBQVksRUFBQSxJQUdBem1FLEdBQUFvbEUsU0FBQXFCLElBS0EsSUFFQUssR0FBQSxFQUVBLEtBSkEsb0JBQUFDLFlBQUEsT0FBQWhnQyxLQUFBZ2dDLFVBQUFDLFlBQUEsWUFBQWpnQyxLQUFBZ2dDLFVBQUFFLGFBQUEsT0FBQWxnQyxLQUFBZ2dDLFVBQUFDLGFBSUEsQ0FDQSxJQUFBRSxFQUFBcHpCLEVBQUFreUIsZ0JBQ0F4akYsRUFBQXdkLEdBQUFtbEUsVUEzREEsS0EyREEsSUFDQXJ4QixFQUFBcXpCLGNBL0RBLE9BZ0VBcnpCLEVBQUFteUIsWUFsRUEsTUFrRUFpQixHQUNBcHpCLEVBQUFveUIsV0FsRUEsTUFrRUEsRUFoRUEsS0FnRUEsRUFBQSxFQUFBLEVBaEVBLEtBRUEsS0E4REExakYsR0FDQXdkLEdBQUFvbEUsU0FBQTVpRixHQUNBc3hELEVBQUFteUIsWUFyRUEsTUFxRUEsTUFDQW55QixFQUFBK3lCLGNBQUFLLEdBQ0FKLEdBQUFoekIsRUFBQTZ5QixXQUdBLE1BQUEsQ0FFQVMsVUFBQSxDQUNBdHpCLEVBQUEyeEIsYUE5R0EsTUErR0EzeEIsRUFBQTJ4QixhQTlHQSxNQStHQTN4QixFQUFBMnhCLGFBOUdBLE1BK0dBM3hCLEVBQUEyeEIsYUE5R0EsT0FnSEE0QixVQUFBdnpCLEVBQUEyeEIsYUEvR0EsTUFnSEE2QixZQUFBeHpCLEVBQUEyeEIsYUEvR0EsTUFnSEE4QixhQUFBenpCLEVBQUEyeEIsYUF0SEEsTUF5SEF6eEIsV0FBQWh0RCxPQUFBMlAsS0FBQXE5QyxHQUFBdmhELE9BQUEsU0FBQTVJLEdBQ0EsUUFBQW1xRCxFQUFBbnFELEtBSUEwN0UsZUFBQUEsRUFHQUcsZUFBQUEsRUFDQUMsb0JBQUFBLEVBR0E2QixjQUFBMXpCLEVBQUEyeEIsYUE3SEEsT0E4SEFnQyxjQUFBM3pCLEVBQUEyeEIsYUE3SEEsT0E4SEFpQyxnQkFBQTV6QixFQUFBMnhCLGFBM0hBLE1BNEhBa0Msd0JBQUE3ekIsRUFBQTJ4QixhQXhIQSxPQXlIQW1DLGVBQUE5ekIsRUFBQTJ4QixhQXJIQSxPQXNIQW9DLG9CQUFBL3pCLEVBQUEyeEIsYUFySEEsT0FzSEFxQyxnQkFBQWgwQixFQUFBMnhCLGFBekhBLE9BMEhBL0UsZUFBQTVzQixFQUFBMnhCLGFBaklBLE1Ba0lBc0MsY0FBQWowQixFQUFBMnhCLGFBaElBLE9BaUlBdUMsa0JBQUFsMEIsRUFBQTJ4QixhQWhJQSxPQWlJQXdDLHNCQUFBbjBCLEVBQUEyeEIsYUE5SEEsT0ErSEF5QyxrQkFBQXAwQixFQUFBMnhCLGFBaklBLE9Ba0lBMEMsb0JBQUFyMEIsRUFBQTJ4QixhQTlIQSxPQWlJQTJDLEtBQUF0MEIsRUFBQTJ4QixhQTFIQSxPQTJIQTdXLFNBQUE5YSxFQUFBMnhCLGFBN0hBLE1BOEhBNEMsT0FBQXYwQixFQUFBMnhCLGFBL0hBLE1BZ0lBNkMsUUFBQXgwQixFQUFBMnhCLGFBOUhBLE1BaUlBSSxVQUFBQSxFQUNBaUIsZ0JBQUFBLElBSUEsU0FBQXlCLEdBQUF0bUYsR0FDQSxRQUNBQSxHQUNBLGlCQUFBQSxHQUNBMUMsTUFBQWdELFFBQUFOLEVBQUF1bUYsUUFDQWpwRixNQUFBZ0QsUUFBQU4sRUFBQXdtRixTQUNBLGlCQUFBeG1GLEVBQUFxQyxRQUNBckMsRUFBQXVtRixNQUFBN3FGLFNBQUFzRSxFQUFBd21GLE9BQUE5cUYsU0FDQTRCLE1BQUFnRCxRQUFBTixFQUFBTyxPQUNBbTNFLEVBQUExM0UsRUFBQU8sT0FHQSxJQUFBdXFDLEdBQUEsU0FBQTlxQyxHQUNBLE9BQUErRSxPQUFBMlAsS0FBQTFVLEdBQUFrWixJQUFBLFNBQUE5SyxHQUFBLE9BQUFwTyxFQUFBb08sTUFHQXE0RSxHQUFBLENBQ0FGLE1BbUZBLFNBQUFHLEdBRUEsSUFEQSxJQUFBSCxFQUFBLEdBQ0E3bUYsRUFBQWduRixFQUFBaG5GLEVBQUFoRSxPQUFBZ0UsRUFBQUEsRUFBQSxHQUNBNm1GLEVBQUF0cEYsS0FBQXlDLEVBQUFoRSxRQUVBLE9BQUE2cUYsR0F2RkFJLFFBc0RBLFNBQUFqbkYsRUFBQTZtRixFQUFBbG1GLEVBQUF1bUYsR0FDQSxJQUFBOUQsRUFBQSxFQUNBLEdBQUF5RCxFQUFBN3FGLE9BQ0EsSUFBQSxJQUFBWCxFQUFBLEVBQUFBLEVBQUF3ckYsRUFBQTdxRixTQUFBWCxFQUNBK25GLEdBQUF5RCxFQUFBeHJGLFFBR0ErbkYsRUFBQSxFQUVBLElBQUF0N0UsRUFBQW8vRSxHQUFBN29FLEdBQUFtbEUsVUFBQTdpRixFQUFBeWlGLEdBQ0EsT0FBQXlELEVBQUE3cUYsUUFDQSxLQUFBLEVBQ0EsTUFDQSxLQUFBLEdBaEVBLFNBQUFnRSxFQUFBbW5GLEVBQUFyL0UsR0FDQSxJQUFBLElBQUF6TSxFQUFBLEVBQUFBLEVBQUE4ckYsSUFBQTlyRixFQUNBeU0sRUFBQXpNLEdBQUEyRSxFQUFBM0UsR0ErREErckYsQ0FBQXBuRixFQUFBNm1GLEVBQUEsR0FBQS8rRSxHQUNBLE1BQ0EsS0FBQSxHQTdEQSxTQUFBOUgsRUFBQW1uRixFQUFBRSxFQUFBdi9FLEdBRUEsSUFEQSxJQUFBdy9FLEVBQUEsRUFDQWpzRixFQUFBLEVBQUFBLEVBQUE4ckYsSUFBQTlyRixFQUVBLElBREEsSUFBQWtzRixFQUFBdm5GLEVBQUEzRSxHQUNBb0gsRUFBQSxFQUFBQSxFQUFBNGtGLElBQUE1a0YsRUFDQXFGLEVBQUF3L0UsS0FBQUMsRUFBQTlrRixHQXlEQStrRixDQUFBeG5GLEVBQUE2bUYsRUFBQSxHQUFBQSxFQUFBLEdBQUEvK0UsR0FDQSxNQUNBLEtBQUEsRUFDQTIvRSxHQUFBem5GLEVBQUE2bUYsRUFBQSxHQUFBQSxFQUFBLEdBQUFBLEVBQUEsR0FBQS8rRSxFQUFBLEdBQ0EsTUFDQSxTQTVDQSxTQUFBNC9FLEVBQUExbkYsRUFBQTZtRixFQUFBanpDLEVBQUE5ckMsRUFBQXcvRSxHQUNBLElBQUFSLEVBQUEsRUFDQSxJQUFBLElBQUF6ckYsRUFBQXU0QyxFQUFBLEVBQUF2NEMsRUFBQXdyRixFQUFBN3FGLFNBQUFYLEVBQ0F5ckYsR0FBQUQsRUFBQXhyRixHQUVBLElBQUFILEVBQUEyckYsRUFBQWp6QyxHQUNBLEdBQUFpekMsRUFBQTdxRixPQUFBNDNDLEdBQUEsRUFBQSxDQUNBLElBQUF1ekMsRUFBQU4sRUFBQWp6QyxFQUFBLEdBQ0F5ekMsRUFBQVIsRUFBQWp6QyxFQUFBLEdBQ0ErekMsRUFBQWQsRUFBQWp6QyxFQUFBLEdBQ0EsSUFBQXY0QyxFQUFBLEVBQUFBLEVBQUFILElBQUFHLEVBQ0Fvc0YsR0FBQXpuRixFQUFBM0UsR0FBQThyRixFQUFBRSxFQUFBTSxFQUFBNy9FLEVBQUF3L0UsR0FDQUEsR0FBQVIsT0FHQSxJQUFBenJGLEVBQUEsRUFBQUEsRUFBQUgsSUFBQUcsRUFDQXFzRixFQUFBMW5GLEVBQUEzRSxHQUFBd3JGLEVBQUFqekMsRUFBQSxFQUFBOXJDLEVBQUF3L0UsR0FDQUEsR0FBQVIsRUE0QkFZLENBQUExbkYsRUFBQTZtRixFQUFBLEVBQUEvK0UsRUFBQSxHQUVBLE9BQUFBLElBNURBLFNBQUEyL0UsR0FBQXpuRixFQUFBbW5GLEVBQUFFLEVBQUFNLEVBQUE3L0UsRUFBQTgvRSxHQUVBLElBREEsSUFBQU4sRUFBQU0sRUFDQXZzRixFQUFBLEVBQUFBLEVBQUE4ckYsSUFBQTlyRixFQUVBLElBREEsSUFBQWtzRixFQUFBdm5GLEVBQUEzRSxHQUNBb0gsRUFBQSxFQUFBQSxFQUFBNGtGLElBQUE1a0YsRUFFQSxJQURBLElBQUFvbEYsRUFBQU4sRUFBQTlrRixHQUNBaXVELEVBQUEsRUFBQUEsRUFBQWkzQixJQUFBajNCLEVBQ0E1b0QsRUFBQXcvRSxLQUFBTyxFQUFBbjNCLEdBZ0VBLElBQUFvM0IsR0FBQSxDQUNBQyxxQkFBQSxLQUNBQyxzQkFBQSxLQUNBQyxzQkFBQSxLQUNBQyxzQkFBQSxLQUNBQyw2QkFBQSxLQUNBQyx1QkFBQSxLQUNBQyx1QkFBQSxLQUNBQyx3QkFBQSxLQUNBQyx3QkFBQSxLQUNBQyx1QkFBQSxNQVdBQyxHQUFBLENBQ0FDLEtBVEEsS0FVQUMsTUFUQSxLQVVBQyxNQVRBLEtBVUF6ckYsTUFUQSxLQVVBMHJGLE9BVEEsS0FVQUMsT0FUQSxLQVVBQyxNQVRBLEtBVUFDLFFBVEEsTUFjQUMsR0FBQSxDQUNBbEwsUUFIQSxNQUlBNWhCLE9BSEEsTUFJQXdoQixPQUFBLE9BR0F1TCxHQUFBbkMsR0FBQUUsUUFDQWtDLEdBQUFwQyxHQUFBRixNQUVBdUMsR0FBQSxNQUNBQyxHQUFBLE1BRUFDLEdBQUEsS0FDQUMsR0FBQSxLQUVBQyxHQUFBLEdBU0EsU0FBQUMsR0FBQTVvRixHQUNBLE9BQUEsRUFBQWluRixHQUFBemlGLE9BQUF4RyxVQUFBc0MsU0FBQXBGLEtBQUE4RSxJQUdBLFNBQUE2b0YsR0FBQTVoRixFQUFBNmhGLEdBQ0EsSUFBQSxJQUFBdHVGLEVBQUEsRUFBQUEsRUFBQXN1RixFQUFBM3RGLFNBQUFYLEVBQ0F5TSxFQUFBek0sR0FBQXN1RixFQUFBdHVGLEdBSUEsU0FBQXV1RixHQUNBbjBFLEVBQUE1VSxFQUFBZ3BGLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFybkYsR0FFQSxJQURBLElBQUEya0YsRUFBQSxFQUNBanNGLEVBQUEsRUFBQUEsRUFBQXd1RixJQUFBeHVGLEVBQ0EsSUFBQSxJQUFBb0gsRUFBQSxFQUFBQSxFQUFBcW5GLElBQUFybkYsRUFDQWdULEVBQUE2eEUsS0FBQXptRixFQUFBa3BGLEVBQUExdUYsRUFBQTJ1RixFQUFBdm5GLEVBQUFFLEdBdkJBNm1GLEdBQUEsTUFBQSxFQUNBQSxHQUFBLE1BQUEsRUFDQUEsR0FBQSxNQUFBLEVBQ0FBLEdBQUEsTUFBQSxFQUNBQSxHQUFBLE1BQUEsRUFDQUEsR0FBQSxNQUFBLEVBQ0FBLEdBQUEsTUFBQSxFQXNZQSxJQU1BUyxHQUFBLENBQ0FqK0MsT0FQQSxFQVFBamEsTUFQQSxFQVFBaVosTUFQQSxFQVFBdnhCLEtBUEEsRUFRQXl3RSxVQVBBLEVBUUFDLFNBUEEsRUFRQUMsWUFBQSxFQUNBQyxhQUFBLEVBQ0FDLGlCQUFBLEVBQ0FDLGVBQUEsR0FHQUMsR0FBQSxFQUNBQyxHQUFBLEVBQ0FDLEdBQUEsRUFFQUMsR0FBQSxLQUNBQyxHQUFBLEtBQ0FDLEdBQUEsS0FDQUMsR0FBQSxLQUNBQyxHQUFBLEtBQ0FDLEdBQUEsS0FFQUMsR0FBQSxNQUVBQyxHQUFBLE1BQ0FDLEdBQUEsTUF3UUFDLEdBQUEsSUFBQTlTLGFBQUEsR0FDQStTLEdBQUEsSUFBQW5ULFlBQUFrVCxHQUFBcnJGLFFBRUF1ckYsR0FBQSxLQUVBLFNBQUFDLEdBQUF2ckYsR0FHQSxJQUZBLElBQUF3ckYsRUFBQW50RSxHQUFBbWxFLFVBQUE4SCxHQUFBdHJGLEVBQUFoRSxRQUVBWCxFQUFBLEVBQUFBLEVBQUEyRSxFQUFBaEUsU0FBQVgsRUFDQSxHQUFBcVIsTUFBQTFNLEVBQUEzRSxJQUNBbXdGLEVBQUFud0YsR0FBQSxXQUNBLEdBQUFpUSxXQUFBdEwsRUFBQTNFLEdBQ0Ftd0YsRUFBQW53RixHQUFBLFdBQ0EsSUFBQWlRLFdBQUF0TCxFQUFBM0UsR0FDQW13RixFQUFBbndGLEdBQUEsVUFDQSxDQUNBK3ZGLEdBQUEsR0FBQXByRixFQUFBM0UsR0FDQSxJQUFBNkssRUFBQW1sRixHQUFBLEdBRUFJLEVBQUF2bEYsSUFBQSxJQUFBLEdBQ0E0aUQsR0FBQTVpRCxHQUFBLElBQUEsSUFBQSxJQUNBd2xGLEVBQUF4bEYsR0FBQSxHQUFBLEtBRUEsR0FBQTRpRCxHQUFBLEdBRUEwaUMsRUFBQW53RixHQUFBb3dGLE9BQ0EsR0FBQTNpQyxHQUFBLEdBQUEsQ0FHQTBpQyxFQUFBbndGLEdBQUFvd0YsR0FBQUMsRUFBQSxPQURBLEdBQUE1aUMsUUFJQTBpQyxFQUFBbndGLEdBRkF5dEQsRUFBQSxHQUVBMmlDLEVBQUEsTUFHQUEsR0FBQTNpQyxFQUFBLElBQUEsSUFBQTRpQyxFQUtBLE9BQUFGLEVBR0EsU0FBQUcsR0FBQXIvRSxHQUNBLE9BQUExTyxNQUFBZ0QsUUFBQTBMLElBQUEwckUsRUFBQTFyRSxHQUdBLElBQUFzL0UsR0FBQSxTQUFBNTlFLEdBQ0EsUUFBQUEsRUFBQUEsRUFBQSxJQUFBQSxJQUdBNjlFLEdBQUEsTUFFQUMsR0FBQSxLQUNBQyxHQUFBLE1BQ0FDLEdBQUEsTUFFQUMsR0FBQSxLQUNBQyxHQUFBLEtBQ0FDLEdBQUEsS0FDQUMsR0FBQSxLQUNBQyxHQUFBLEtBRUFDLEdBQUEsTUFDQUMsR0FBQSxNQUNBQyxHQUFBLE1BRUFDLEdBQUEsTUFDQUMsR0FBQSxNQUNBQyxHQUFBLE1BQ0FDLEdBQUEsTUFFQUMsR0FBQSxLQUNBQyxHQUFBLE1BRUFDLEdBQUEsTUFDQUMsR0FBQSxNQUVBQyxHQUFBLE1BRUFDLEdBQUEsTUFDQUMsR0FBQSxNQUNBQyxHQUFBLE1BQ0FDLEdBQUEsTUFFQUMsR0FBQSxNQUNBQyxHQUFBLE1BQ0FDLEdBQUEsTUFFQUMsR0FBQSxNQUNBQyxHQUFBLE1BQ0FDLEdBQUEsTUFDQUMsR0FBQSxNQUVBQyxHQUFBLE1BRUFDLEdBQUEsS0FDQUMsR0FBQSxLQUNBQyxHQUFBLEtBQ0FDLEdBQUEsS0FFQUMsR0FBQSxNQUNBQyxHQUFBLE1BRUFDLEdBQUEsTUFDQUMsR0FBQSxNQUNBQyxHQUFBLE1BRUFDLEdBQUEsTUFDQUMsR0FBQSxNQUVBQyxHQUFBLEtBQ0FDLEdBQUEsS0FDQUMsR0FBQSxLQUNBQyxHQUFBLEtBQ0FDLEdBQUEsS0FDQUMsR0FBQSxLQUVBQyxHQUFBLE1BQ0FDLEdBQUEsS0FDQUMsR0FBQSxLQUNBQyxHQUFBLEtBRUFDLEdBQUEsTUFFQUMsR0FBQSxLQUNBQyxHQUFBLE1BQ0FDLEdBQUEsTUFDQUMsR0FBQSxNQUVBQyxHQUFBLE1BRUFDLEdBQUEsTUFFQUMsR0FBQSxDQUNBZixHQUNBRSxHQUNBRCxHQUNBRSxJQUdBYSxHQUFBLENBQ0EsRUFDQXZELEdBQ0FDLEdBQ0FGLEdBQ0FGLElBR0EyRCxHQUFBLEdBV0EsU0FBQUMsR0FBQXhzRixHQUNBLE1BQUEsV0FBQUEsRUFBQSxJ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QUNBLEVBQUEsRUFBQSxFQUNBLEdBQUEsRUFBQSxHQUVBLEdBQUEsRUFBQSxFQUNBLEVBQUEsRUFBQSxHQUNBLEVBQUEsRUFBQSxFQUVBLEVBQUEsR0FBQSxHQUNBLEVBQUEsR0FBQSxFQUNBLEVBQUEsRUFBQSxFQUVBLEdBQUEsRUFBQSxFQUNBLEVBQUEsR0FBQSxFQUNBLEdBQUEsR0FBQSxJQUNBaTFDLE1BQUEsSUFBQWoxQyxhQUFBLENBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsR0FBQSxFQUFBLEVBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxHQUFBLEdBQUEsRUFDQSxHQUFBLEVBQUEsRUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxHQUFBLEVBQUEsRUFBQSxHQUFBLEdBQUEsR0FBQSxFQUNBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEdBQUEsRUFBQSxFQUFBLEdBQUEsRUFBQSxFQUFBLEVBQUEsR0FBQSxHQUFBLEdBQ0EsRUFBQSxFQUFBLEVBQUEsR0FBQSxFQUFBLEVBQUEsR0FBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEdBQUEsRUFDQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxHQUNBLEVBQUEsRUFBQSxFQUFBLEdBQUEsRUFBQSxFQUFBLEdBQUEsR0FBQSxHQUFBLEVBQUEsRUFBQSxHQUFBLEdBQUEsRUFBQSxHQUFBLEVBQ0EsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEdBQUEsRUFBQSxFQUFBLEdBQUEsRUFBQSxFQUFBLEVBQUEsR0FBQSxHQUFBLEVBQUEsR0FDQSxFQUFBLEVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsR0FBQSxFQUFBLEVBQUEsR0FBQSxHQUFBLEdBQUEsRUFBQSxJQUNBNW9CLFFBQUEsU0FBQTg5RCxFQUFBQyxHQUNBLElBaUJBQyxFQUFBQyxFQWpCQVAsRUFBQTNuSCxLQUFBMm5ILFVB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LFVBRUEyQixHQUdBRixFQUFBLENBQUFsb0gsRUFBQU0sS0FDQSxNQUFBOG5ILEVBQUFwb0gsRUFBQXVvSCxxQkFBQSxFQUFBLEVBQUEsSUFBQSxHQUlBLE9BSEFILEVBQUFFLGFBQUEsSUFBQWhvSCxFQUFBb3JCLE9BQ0EwOEYsRUFBQUUsYUFBQSxNQUFBaG9ILEVBQUFtbUgsVUFFQTJCLDJHQzdNQTlwSCxFQUFBa3FILGtDQUFBNWdFLE9BQUEydEQsU0FBQXJtRCIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuZXhwb3J0cy50b0J5dGVBcnJheSA9IHRvQnl0ZUFycmF5XG5leHBvcnRzLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5XG5cbnZhciBsb29rdXAgPSBbXVxudmFyIHJldkxvb2t1cCA9IFtdXG52YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnID8gVWludDhBcnJheSA6IEFycmF5XG5cbnZhciBjb2RlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5mb3IgKHZhciBpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICBsb29rdXBbaV0gPSBjb2RlW2ldXG4gIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG4vLyBTdXBwb3J0IGRlY29kaW5nIFVSTC1zYWZlIGJhc2U2NCBzdHJpbmdzLCBhcyBOb2RlLmpzIGRvZXMuXG4vLyBTZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jhc2U2NCNVUkxfYXBwbGljYXRpb25zXG5yZXZMb29rdXBbJy0nLmNoYXJDb2RlQXQoMCldID0gNjJcbnJldkxvb2t1cFsnXycuY2hhckNvZGVBdCgwKV0gPSA2M1xuXG5mdW5jdGlvbiBnZXRMZW5zIChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcblxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gVHJpbSBvZmYgZXh0cmEgYnl0ZXMgYWZ0ZXIgcGxhY2Vob2xkZXIgYnl0ZXMgYXJlIGZvdW5kXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JlYXRnYW1taXQvYmFzZTY0LWpzL2lzc3Vlcy80MlxuICB2YXIgdmFsaWRMZW4gPSBiNjQuaW5kZXhPZignPScpXG4gIGlmICh2YWxpZExlbiA9PT0gLTEpIHZhbGlkTGVuID0gbGVuXG5cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IHZhbGlkTGVuID09PSBsZW5cbiAgICA/IDBcbiAgICA6IDQgLSAodmFsaWRMZW4gJSA0KVxuXG4gIHJldHVybiBbdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbl1cbn1cblxuLy8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChiNjQpIHtcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gX2J5dGVMZW5ndGggKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikge1xuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cblxuICB2YXIgYXJyID0gbmV3IEFycihfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pKVxuXG4gIHZhciBjdXJCeXRlID0gMFxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgdmFyIGxlbiA9IHBsYWNlSG9sZGVyc0xlbiA+IDBcbiAgICA/IHZhbGlkTGVuIC0gNFxuICAgIDogdmFsaWRMZW5cblxuICB2YXIgaVxuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTgpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCAxMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildIDw8IDYpIHxcbiAgICAgIHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMyldXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDE2KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAyKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA+PiA0KVxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMSkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxMCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDQpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA+PiAyKVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiAxMiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDYgJiAweDNGXSArXG4gICAgbG9va3VwW251bSAmIDB4M0ZdXG59XG5cbmZ1bmN0aW9uIGVuY29kZUNodW5rICh1aW50OCwgc3RhcnQsIGVuZCkge1xuICB2YXIgdG1wXG4gIHZhciBvdXRwdXQgPSBbXVxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gMykge1xuICAgIHRtcCA9XG4gICAgICAoKHVpbnQ4W2ldIDw8IDE2KSAmIDB4RkYwMDAwKSArXG4gICAgICAoKHVpbnQ4W2kgKyAxXSA8PCA4KSAmIDB4RkYwMCkgK1xuICAgICAgKHVpbnQ4W2kgKyAyXSAmIDB4RkYpXG4gICAgb3V0cHV0LnB1c2godHJpcGxldFRvQmFzZTY0KHRtcCkpXG4gIH1cbiAgcmV0dXJuIG91dHB1dC5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBmcm9tQnl0ZUFycmF5ICh1aW50OCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW4gPSB1aW50OC5sZW5ndGhcbiAgdmFyIGV4dHJhQnl0ZXMgPSBsZW4gJSAzIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG4gIHZhciBwYXJ0cyA9IFtdXG4gIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzIC8vIG11c3QgYmUgbXVsdGlwbGUgb2YgM1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcbiAgZm9yICh2YXIgaSA9IDAsIGxlbjIgPSBsZW4gLSBleHRyYUJ5dGVzOyBpIDwgbGVuMjsgaSArPSBtYXhDaHVua0xlbmd0aCkge1xuICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsodWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKSkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAyXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdICtcbiAgICAgICc9PSdcbiAgICApXG4gIH0gZWxzZSBpZiAoZXh0cmFCeXRlcyA9PT0gMikge1xuICAgIHRtcCA9ICh1aW50OFtsZW4gLSAyXSA8PCA4KSArIHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMTBdICtcbiAgICAgIGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXSArXG4gICAgICAnPSdcbiAgICApXG4gIH1cblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cbiIsIi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCdiYXNlNjQtanMnKVxudmFyIGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0JylcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG52YXIgS19NQVhfTEVOR1RIID0gMHg3ZmZmZmZmZlxuZXhwb3J0cy5rTWF4TGVuZ3RoID0gS19NQVhfTEVOR1RIXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFByaW50IHdhcm5pbmcgYW5kIHJlY29tbWVuZCB1c2luZyBgYnVmZmVyYCB2NC54IHdoaWNoIGhhcyBhbiBPYmplY3RcbiAqICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIFdlIHJlcG9ydCB0aGF0IHRoZSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGlmIHRoZSBhcmUgbm90IHN1YmNsYXNzYWJsZVxuICogdXNpbmcgX19wcm90b19fLiBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YFxuICogKFNlZTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NDM4KS4gSUUgMTAgbGFja3Mgc3VwcG9ydFxuICogZm9yIF9fcHJvdG9fXyBhbmQgaGFzIGEgYnVnZ3kgdHlwZWQgYXJyYXkgaW1wbGVtZW50YXRpb24uXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gdHlwZWRBcnJheVN1cHBvcnQoKVxuXG5pZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gIGNvbnNvbGUuZXJyb3IoXG4gICAgJ1RoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSAnICtcbiAgICAnYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4nXG4gIClcbn1cblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICAvLyBDYW4gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBhdWdtZW50ZWQ/XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KDEpXG4gICAgYXJyLl9fcHJvdG9fXyA9IHsgX19wcm90b19fOiBVaW50OEFycmF5LnByb3RvdHlwZSwgZm9vOiBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9IH1cbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MlxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlci5wcm90b3R5cGUsICdwYXJlbnQnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKHRoaXMpKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCAnb2Zmc2V0Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHJldHVybiB0aGlzLmJ5dGVPZmZzZXRcbiAgfVxufSlcblxuZnVuY3Rpb24gY3JlYXRlQnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKGxlbmd0aCA+IEtfTUFYX0xFTkdUSCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInICsgbGVuZ3RoICsgJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpXG4gIH1cbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcbiAgYnVmLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIGJ1ZlxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcidcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGFsbG9jVW5zYWZlKGFyZylcbiAgfVxuICByZXR1cm4gZnJvbShhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gRml4IHN1YmFycmF5KCkgaW4gRVMyMDE2LiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvOTdcbmlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuc3BlY2llcyAhPSBudWxsICYmXG4gICAgQnVmZmVyW1N5bWJvbC5zcGVjaWVzXSA9PT0gQnVmZmVyKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIsIFN5bWJvbC5zcGVjaWVzLCB7XG4gICAgdmFsdWU6IG51bGwsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KVxufVxuXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyIC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxuZnVuY3Rpb24gZnJvbSAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KVxuICB9XG5cbiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh2YWx1ZSlcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksICcgK1xuICAgICAgJ29yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHZhbHVlKVxuICAgIClcbiAgfVxuXG4gIGlmIChpc0luc3RhbmNlKHZhbHVlLCBBcnJheUJ1ZmZlcikgfHxcbiAgICAgICh2YWx1ZSAmJiBpc0luc3RhbmNlKHZhbHVlLmJ1ZmZlciwgQXJyYXlCdWZmZXIpKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcidcbiAgICApXG4gIH1cblxuICB2YXIgdmFsdWVPZiA9IHZhbHVlLnZhbHVlT2YgJiYgdmFsdWUudmFsdWVPZigpXG4gIGlmICh2YWx1ZU9mICE9IG51bGwgJiYgdmFsdWVPZiAhPT0gdmFsdWUpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWVPZiwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgdmFyIGIgPSBmcm9tT2JqZWN0KHZhbHVlKVxuICBpZiAoYikgcmV0dXJuIGJcblxuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvUHJpbWl0aXZlICE9IG51bGwgJiZcbiAgICAgIHR5cGVvZiB2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFxuICAgICAgdmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSgnc3RyaW5nJyksIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aFxuICAgIClcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksICcgK1xuICAgICdvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB2YWx1ZSlcbiAgKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIE5vdGU6IENoYW5nZSBwcm90b3R5cGUgKmFmdGVyKiBCdWZmZXIuZnJvbSBpcyBkZWZpbmVkIHRvIHdvcmthcm91bmQgQ2hyb21lIGJ1Zzpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvMTQ4XG5CdWZmZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXkucHJvdG90eXBlXG5CdWZmZXIuX19wcm90b19fID0gVWludDhBcnJheVxuXG5mdW5jdGlvbiBhc3NlcnRTaXplIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJylcbiAgfSBlbHNlIGlmIChzaXplIDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInICsgc2l6ZSArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldHRlZCBhcyBhIHN0YXJ0IG9mZnNldC5cbiAgICByZXR1cm4gdHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJ1xuICAgICAgPyBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICAgIDogY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbClcbiAgfVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUpXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmaWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogYWxsb2Moc2l6ZVssIGZpbGxbLCBlbmNvZGluZ11dKVxuICoqL1xuQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIHJldHVybiBhbGxvYyhzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHNpemUpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKVxufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gQnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpXG59XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gU2xvd0J1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICovXG5CdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpXG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycgfHwgZW5jb2RpbmcgPT09ICcnKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICB9XG5cbiAgdmFyIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuXG4gIHZhciBhY3R1YWwgPSBidWYud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIGJ1ZiA9IGJ1Zi5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdmFyIGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICBidWZbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyIChhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcIm9mZnNldFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wibGVuZ3RoXCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIHZhciBidWZcbiAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5KVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQpXG4gIH0gZWxzZSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIGJ1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAob2JqKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqKSkge1xuICAgIHZhciBsZW4gPSBjaGVja2VkKG9iai5sZW5ndGgpIHwgMFxuICAgIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuKVxuXG4gICAgaWYgKGJ1Zi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBidWZcbiAgICB9XG5cbiAgICBvYmouY29weShidWYsIDAsIDAsIGxlbilcbiAgICByZXR1cm4gYnVmXG4gIH1cblxuICBpZiAob2JqLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBudW1iZXJJc05hTihvYmoubGVuZ3RoKSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcigwKVxuICAgIH1cbiAgICByZXR1cm4gZnJvbUFycmF5TGlrZShvYmopXG4gIH1cblxuICBpZiAob2JqLnR5cGUgPT09ICdCdWZmZXInICYmIEFycmF5LmlzQXJyYXkob2JqLmRhdGEpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqLmRhdGEpXG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tlZCAobGVuZ3RoKSB7XG4gIC8vIE5vdGU6IGNhbm5vdCB1c2UgYGxlbmd0aCA8IEtfTUFYX0xFTkdUSGAgaGVyZSBiZWNhdXNlIHRoYXQgZmFpbHMgd2hlblxuICAvLyBsZW5ndGggaXMgTmFOICh3aGljaCBpcyBvdGhlcndpc2UgY29lcmNlZCB0byB6ZXJvLilcbiAgaWYgKGxlbmd0aCA+PSBLX01BWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMHgnICsgS19NQVhfTEVOR1RILnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKVxuICB9XG4gIHJldHVybiBsZW5ndGggfCAwXG59XG5cbmZ1bmN0aW9uIFNsb3dCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICBsZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYygrbGVuZ3RoKVxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikge1xuICByZXR1cm4gYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyID09PSB0cnVlICYmXG4gICAgYiAhPT0gQnVmZmVyLnByb3RvdHlwZSAvLyBzbyBCdWZmZXIuaXNCdWZmZXIoQnVmZmVyLnByb3RvdHlwZSkgd2lsbCBiZSBmYWxzZVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKGlzSW5zdGFuY2UoYSwgVWludDhBcnJheSkpIGEgPSBCdWZmZXIuZnJvbShhLCBhLm9mZnNldCwgYS5ieXRlTGVuZ3RoKVxuICBpZiAoaXNJbnN0YW5jZShiLCBVaW50OEFycmF5KSkgYiA9IEJ1ZmZlci5mcm9tKGIsIGIub2Zmc2V0LCBiLmJ5dGVMZW5ndGgpXG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcImJ1ZjFcIiwgXCJidWYyXCIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknXG4gICAgKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICB2YXIgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIHZhciBidWYgPSBsaXN0W2ldXG4gICAgaWYgKGlzSW5zdGFuY2UoYnVmLCBVaW50OEFycmF5KSkge1xuICAgICAgYnVmID0gQnVmZmVyLmZyb20oYnVmKVxuICAgIH1cbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICAgIH1cbiAgICBidWYuY29weShidWZmZXIsIHBvcylcbiAgICBwb3MgKz0gYnVmLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aFxuICB9XG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBpc0luc3RhbmNlKHN0cmluZywgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gJyArXG4gICAgICAnUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHN0cmluZ1xuICAgIClcbiAgfVxuXG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBtdXN0TWF0Y2ggPSAoYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdID09PSB0cnVlKVxuICBpZiAoIW11c3RNYXRjaCAmJiBsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHtcbiAgICAgICAgICByZXR1cm4gbXVzdE1hdGNoID8gLTEgOiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICB9XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcnNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIChhbmQgdGhlIGBpcy1idWZmZXJgIG5wbSBwYWNrYWdlKVxuLy8gdG8gZGV0ZWN0IGEgQnVmZmVyIGluc3RhbmNlLiBJdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgYGluc3RhbmNlb2YgQnVmZmVyYFxuLy8gcmVsaWFibHkgaW4gYSBicm93c2VyaWZ5IGNvbnRleHQgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBkaWZmZXJlbnRcbi8vIGNvcGllcyBvZiB0aGUgJ2J1ZmZlcicgcGFja2FnZSBpbiB1c2UuIFRoaXMgbWV0aG9kIHdvcmtzIGV2ZW4gZm9yIEJ1ZmZlclxuLy8gaW5zdGFuY2VzIHRoYXQgd2VyZSBjcmVhdGVkIGZyb20gYW5vdGhlciBjb3B5IG9mIHRoZSBgYnVmZmVyYCBwYWNrYWdlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMTU0XG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICB2YXIgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAxKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW5ndGggPT09IDApIHJldHVybiAnJ1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCAwLCBsZW5ndGgpXG4gIHJldHVybiBzbG93VG9TdHJpbmcuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nID0gQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZ1xuXG5CdWZmZXIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIGlmICh0aGlzID09PSBiKSByZXR1cm4gdHJ1ZVxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYikgPT09IDBcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gIHZhciBzdHIgPSAnJ1xuICB2YXIgbWF4ID0gZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFU1xuICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLnJlcGxhY2UoLyguezJ9KS9nLCAnJDEgJykudHJpbSgpXG4gIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgcmV0dXJuICc8QnVmZmVyICcgKyBzdHIgKyAnPidcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAodGFyZ2V0LCBzdGFydCwgZW5kLCB0aGlzU3RhcnQsIHRoaXNFbmQpIHtcbiAgaWYgKGlzSW5zdGFuY2UodGFyZ2V0LCBVaW50OEFycmF5KSkge1xuICAgIHRhcmdldCA9IEJ1ZmZlci5mcm9tKHRhcmdldCwgdGFyZ2V0Lm9mZnNldCwgdGFyZ2V0LmJ5dGVMZW5ndGgpXG4gIH1cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwidGFyZ2V0XCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gJyArXG4gICAgICAnUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB0YXJnZXQpXG4gICAgKVxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSB0YXJnZXQgPyB0YXJnZXQubGVuZ3RoIDogMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNTdGFydCA9IDBcbiAgfVxuICBpZiAodGhpc0VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc0VuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRhcmdldC5sZW5ndGggfHwgdGhpc1N0YXJ0IDwgMCB8fCB0aGlzRW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCkge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmIChzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMVxuICB9XG5cbiAgc3RhcnQgPj4+PSAwXG4gIGVuZCA+Pj49IDBcbiAgdGhpc1N0YXJ0ID4+Pj0gMFxuICB0aGlzRW5kID4+Pj0gMFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQpIHJldHVybiAwXG5cbiAgdmFyIHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0XG4gIHZhciB5ID0gZW5kIC0gc3RhcnRcbiAgdmFyIGxlbiA9IE1hdGgubWluKHgsIHkpXG5cbiAgdmFyIHRoaXNDb3B5ID0gdGhpcy5zbGljZSh0aGlzU3RhcnQsIHRoaXNFbmQpXG4gIHZhciB0YXJnZXRDb3B5ID0gdGFyZ2V0LnNsaWNlKHN0YXJ0LCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzQ29weVtpXSAhPT0gdGFyZ2V0Q29weVtpXSkge1xuICAgICAgeCA9IHRoaXNDb3B5W2ldXG4gICAgICB5ID0gdGFyZ2V0Q29weVtpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbi8vIEZpbmRzIGVpdGhlciB0aGUgZmlyc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0ID49IGBieXRlT2Zmc2V0YCxcbi8vIE9SIHRoZSBsYXN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA8PSBgYnl0ZU9mZnNldGAuXG4vL1xuLy8gQXJndW1lbnRzOlxuLy8gLSBidWZmZXIgLSBhIEJ1ZmZlciB0byBzZWFyY2hcbi8vIC0gdmFsIC0gYSBzdHJpbmcsIEJ1ZmZlciwgb3IgbnVtYmVyXG4vLyAtIGJ5dGVPZmZzZXQgLSBhbiBpbmRleCBpbnRvIGBidWZmZXJgOyB3aWxsIGJlIGNsYW1wZWQgdG8gYW4gaW50MzJcbi8vIC0gZW5jb2RpbmcgLSBhbiBvcHRpb25hbCBlbmNvZGluZywgcmVsZXZhbnQgaXMgdmFsIGlzIGEgc3RyaW5nXG4vLyAtIGRpciAtIHRydWUgZm9yIGluZGV4T2YsIGZhbHNlIGZvciBsYXN0SW5kZXhPZlxuZnVuY3Rpb24gYmlkaXJlY3Rpb25hbEluZGV4T2YgKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIC8vIEVtcHR5IGJ1ZmZlciBtZWFucyBubyBtYXRjaFxuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXRcbiAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gYnl0ZU9mZnNldFxuICAgIGJ5dGVPZmZzZXQgPSAwXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA+IDB4N2ZmZmZmZmYpIHtcbiAgICBieXRlT2Zmc2V0ID0gMHg3ZmZmZmZmZlxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAtMHg4MDAwMDAwMCkge1xuICAgIGJ5dGVPZmZzZXQgPSAtMHg4MDAwMDAwMFxuICB9XG4gIGJ5dGVPZmZzZXQgPSArYnl0ZU9mZnNldCAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAobnVtYmVySXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmICh0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbIHZhbCBdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuZnVuY3Rpb24gYXJyYXlJbmRleE9mIChhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICB2YXIgaW5kZXhTaXplID0gMVxuICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aFxuICB2YXIgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aFxuXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoZW5jb2RpbmcgPT09ICd1Y3MyJyB8fCBlbmNvZGluZyA9PT0gJ3Vjcy0yJyB8fFxuICAgICAgICBlbmNvZGluZyA9PT0gJ3V0ZjE2bGUnIHx8IGVuY29kaW5nID09PSAndXRmLTE2bGUnKSB7XG4gICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9XG4gICAgICBpbmRleFNpemUgPSAyXG4gICAgICBhcnJMZW5ndGggLz0gMlxuICAgICAgdmFsTGVuZ3RoIC89IDJcbiAgICAgIGJ5dGVPZmZzZXQgLz0gMlxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQgKGJ1ZiwgaSkge1xuICAgIGlmIChpbmRleFNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBidWZbaV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaSAqIGluZGV4U2l6ZSlcbiAgICB9XG4gIH1cblxuICB2YXIgaVxuICBpZiAoZGlyKSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGhcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGZvdW5kID0gdHJ1ZVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICB2YXIgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAobnVtYmVySXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGxhdGluMVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggPj4+IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCdcbiAgICApXG4gIH1cblxuICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGxlbmd0aCA+IHJlbWFpbmluZykgbGVuZ3RoID0gcmVtYWluaW5nXG5cbiAgaWYgKChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICAvLyBXYXJuaW5nOiBtYXhMZW5ndGggbm90IHRha2VuIGludG8gYWNjb3VudCBpbiBiYXNlNjRXcml0ZVxuICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gYnVmLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGY4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG4gIHZhciByZXMgPSBbXVxuXG4gIHZhciBpID0gc3RhcnRcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICB2YXIgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgdmFyIGNvZGVQb2ludCA9IG51bGxcbiAgICB2YXIgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKSA/IDRcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4REYpID8gM1xuICAgICAgICA6IChmaXJzdEJ5dGUgPiAweEJGKSA/IDJcbiAgICAgICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIHZhciBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbnZhciBNQVhfQVJHVU1FTlRTX0xFTkdUSCA9IDB4MTAwMFxuXG5mdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkgKGNvZGVQb2ludHMpIHtcbiAgdmFyIGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpIC8vIGF2b2lkIGV4dHJhIHNsaWNlKClcbiAgfVxuXG4gIC8vIERlY29kZSBpbiBjaHVua3MgdG8gYXZvaWQgXCJjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIi5cbiAgdmFyIHJlcyA9ICcnXG4gIHZhciBpID0gMFxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxuICAgICAgU3RyaW5nLFxuICAgICAgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKVxuICAgIClcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3RilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGxhdGluMVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICB2YXIgb3V0ID0gJydcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICBvdXQgKz0gdG9IZXgoYnVmW2ldKVxuICB9XG4gIHJldHVybiBvdXRcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGJ5dGVzID0gYnVmLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHZhciByZXMgPSAnJ1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0gKyAoYnl0ZXNbaSArIDFdICogMjU2KSlcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICB2YXIgbmV3QnVmID0gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKVxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICBuZXdCdWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIHZhciBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDI0KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50OCA9IGZ1bmN0aW9uIHdyaXRlVUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50TEUgPSBmdW5jdGlvbiB3cml0ZUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsICg4ICogYnl0ZUxlbmd0aCkgLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gY2hlY2tJRUVFNzU0IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAob2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvYXQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyJylcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBVc2UgYnVpbHQtaW4gd2hlbiBhdmFpbGFibGUsIG1pc3NpbmcgZnJvbSBJRTExXG4gICAgdGhpcy5jb3B5V2l0aGluKHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKVxuICB9IGVsc2UgaWYgKHRoaXMgPT09IHRhcmdldCAmJiBzdGFydCA8IHRhcmdldFN0YXJ0ICYmIHRhcmdldFN0YXJ0IDwgZW5kKSB7XG4gICAgLy8gZGVzY2VuZGluZyBjb3B5IGZyb20gZW5kXG4gICAgZm9yICh2YXIgaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgIHRhcmdldCxcbiAgICAgIHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZCksXG4gICAgICB0YXJnZXRTdGFydFxuICAgIClcbiAgfVxuXG4gIHJldHVybiBsZW5cbn1cblxuLy8gVXNhZ2U6XG4vLyAgICBidWZmZXIuZmlsbChudW1iZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKGJ1ZmZlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoc3RyaW5nWywgb2Zmc2V0WywgZW5kXV1bLCBlbmNvZGluZ10pXG5CdWZmZXIucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiBmaWxsICh2YWwsIHN0YXJ0LCBlbmQsIGVuY29kaW5nKSB7XG4gIC8vIEhhbmRsZSBzdHJpbmcgY2FzZXM6XG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIGlmICh0eXBlb2Ygc3RhcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IHN0YXJ0XG4gICAgICBzdGFydCA9IDBcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZW5kID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBlbmRcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfVxuICAgIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VuY29kaW5nIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJyAmJiAhQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgfVxuICAgIGlmICh2YWwubGVuZ3RoID09PSAxKSB7XG4gICAgICB2YXIgY29kZSA9IHZhbC5jaGFyQ29kZUF0KDApXG4gICAgICBpZiAoKGVuY29kaW5nID09PSAndXRmOCcgJiYgY29kZSA8IDEyOCkgfHxcbiAgICAgICAgICBlbmNvZGluZyA9PT0gJ2xhdGluMScpIHtcbiAgICAgICAgLy8gRmFzdCBwYXRoOiBJZiBgdmFsYCBmaXRzIGludG8gYSBzaW5nbGUgYnl0ZSwgdXNlIHRoYXQgbnVtZXJpYyB2YWx1ZS5cbiAgICAgICAgdmFsID0gY29kZVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDI1NVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHZhbClcbiAgICAgID8gdmFsXG4gICAgICA6IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGlmIChsZW4gPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyB2YWwgK1xuICAgICAgICAnXCIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgXCJ2YWx1ZVwiJylcbiAgICB9XG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG52YXIgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rLzAtOUEtWmEtei1fXS9nXG5cbmZ1bmN0aW9uIGJhc2U2NGNsZWFuIChzdHIpIHtcbiAgLy8gTm9kZSB0YWtlcyBlcXVhbCBzaWducyBhcyBlbmQgb2YgdGhlIEJhc2U2NCBlbmNvZGluZ1xuICBzdHIgPSBzdHIuc3BsaXQoJz0nKVswXVxuICAvLyBOb2RlIHN0cmlwcyBvdXQgaW52YWxpZCBjaGFyYWN0ZXJzIGxpa2UgXFxuIGFuZCBcXHQgZnJvbSB0aGUgc3RyaW5nLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgc3RyID0gc3RyLnRyaW0oKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAnJylcbiAgLy8gTm9kZSBjb252ZXJ0cyBzdHJpbmdzIHdpdGggbGVuZ3RoIDwgMiB0byAnJ1xuICBpZiAoc3RyLmxlbmd0aCA8IDIpIHJldHVybiAnJ1xuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgc3RyID0gc3RyICsgJz0nXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiB0b0hleCAobikge1xuICBpZiAobiA8IDE2KSByZXR1cm4gJzAnICsgbi50b1N0cmluZygxNilcbiAgcmV0dXJuIG4udG9TdHJpbmcoMTYpXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgdmFyIGNvZGVQb2ludFxuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aFxuICB2YXIgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcbiAgdmFyIGJ5dGVzID0gW11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIC8vIGlzIHN1cnJvZ2F0ZSBjb21wb25lbnRcbiAgICBpZiAoY29kZVBvaW50ID4gMHhEN0ZGICYmIGNvZGVQb2ludCA8IDB4RTAwMCkge1xuICAgICAgLy8gbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICAvLyBubyBsZWFkIHlldFxuICAgICAgICBpZiAoY29kZVBvaW50ID4gMHhEQkZGKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB0cmFpbFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkge1xuICAgICAgICAgIC8vIHVucGFpcmVkIGxlYWRcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWQgbGVhZFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMiBsZWFkcyBpbiBhIHJvd1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDB4REMwMCkge1xuICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyB2YWxpZCBzdXJyb2dhdGUgcGFpclxuICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSAweEQ4MDAgPDwgMTAgfCBjb2RlUG9pbnQgLSAweERDMDApICsgMHgxMDAwMFxuICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgLy8gdmFsaWQgYm1wIGNoYXIsIGJ1dCBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgfVxuXG4gICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcblxuICAgIC8vIGVuY29kZSB1dGY4XG4gICAgaWYgKGNvZGVQb2ludCA8IDB4ODApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDgwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2IHwgMHhDMCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyB8IDB4RTAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDEyIHwgMHhGMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2RlIHBvaW50JylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlUb0J5dGVzIChzdHIpIHtcbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgdmFyIGMsIGhpLCBsb1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcblxuICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKVxuICAgIGhpID0gYyA+PiA4XG4gICAgbG8gPSBjICUgMjU2XG4gICAgYnl0ZUFycmF5LnB1c2gobG8pXG4gICAgYnl0ZUFycmF5LnB1c2goaGkpXG4gIH1cblxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMgKHN0cikge1xuICByZXR1cm4gYmFzZTY0LnRvQnl0ZUFycmF5KGJhc2U2NGNsZWFuKHN0cikpXG59XG5cbmZ1bmN0aW9uIGJsaXRCdWZmZXIgKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKSBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG5cbi8vIEFycmF5QnVmZmVyIG9yIFVpbnQ4QXJyYXkgb2JqZWN0cyBmcm9tIG90aGVyIGNvbnRleHRzIChpLmUuIGlmcmFtZXMpIGRvIG5vdCBwYXNzXG4vLyB0aGUgYGluc3RhbmNlb2ZgIGNoZWNrIGJ1dCB0aGV5IHNob3VsZCBiZSB0cmVhdGVkIGFzIG9mIHRoYXQgdHlwZS5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzE2NlxuZnVuY3Rpb24gaXNJbnN0YW5jZSAob2JqLCB0eXBlKSB7XG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiB0eXBlIHx8XG4gICAgKG9iaiAhPSBudWxsICYmIG9iai5jb25zdHJ1Y3RvciAhPSBudWxsICYmIG9iai5jb25zdHJ1Y3Rvci5uYW1lICE9IG51bGwgJiZcbiAgICAgIG9iai5jb25zdHJ1Y3Rvci5uYW1lID09PSB0eXBlLm5hbWUpXG59XG5mdW5jdGlvbiBudW1iZXJJc05hTiAob2JqKSB7XG4gIC8vIEZvciBJRTExIHN1cHBvcnRcbiAgcmV0dXJuIG9iaiAhPT0gb2JqIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG59XG4iLCIvKiEgaWVlZTc1NC4gQlNELTMtQ2xhdXNlIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqL1xuZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSAoZSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSAobSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICgodmFsdWUgKiBjKSAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwiLyohIFR3ZWFrcGFuZSAzLjAuOCAoYykgMjAxNiBjb2NvcG9uLCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cykgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAgIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGZhY3RvcnkoZ2xvYmFsLlR3ZWFrcGFuZSA9IHt9KSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqKlxuICAgICAqIEEgc2ltcGxlIHNlbWFudGljIHZlcnNpb25pbmcgcGVyc2VyLlxuICAgICAqL1xuICAgIGNsYXNzIFNlbXZlciB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdHJ1Y3Rvcih0ZXh0KSB7XG4gICAgICAgICAgICBjb25zdCBbY29yZSwgcHJlcmVsZWFzZV0gPSB0ZXh0LnNwbGl0KCctJyk7XG4gICAgICAgICAgICBjb25zdCBjb3JlQ29tcHMgPSBjb3JlLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICB0aGlzLm1ham9yID0gcGFyc2VJbnQoY29yZUNvbXBzWzBdLCAxMCk7XG4gICAgICAgICAgICB0aGlzLm1pbm9yID0gcGFyc2VJbnQoY29yZUNvbXBzWzFdLCAxMCk7XG4gICAgICAgICAgICB0aGlzLnBhdGNoID0gcGFyc2VJbnQoY29yZUNvbXBzWzJdLCAxMCk7XG4gICAgICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBwcmVyZWxlYXNlICE9PSBudWxsICYmIHByZXJlbGVhc2UgIT09IHZvaWQgMCA/IHByZXJlbGVhc2UgOiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgY29uc3QgY29yZSA9IFt0aGlzLm1ham9yLCB0aGlzLm1pbm9yLCB0aGlzLnBhdGNoXS5qb2luKCcuJyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcmVyZWxlYXNlICE9PSBudWxsID8gW2NvcmUsIHRoaXMucHJlcmVsZWFzZV0uam9pbignLScpIDogY29yZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIEJsYWRlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlcikge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGRpc2FibGVkKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmlld1Byb3BzLmdldCgnZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgZGlzYWJsZWQoZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmlld1Byb3BzLnNldCgnZGlzYWJsZWQnLCBkaXNhYmxlZCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGhpZGRlbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZpZXdQcm9wcy5nZXQoJ2hpZGRlbicpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBoaWRkZW4oaGlkZGVuKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZpZXdQcm9wcy5zZXQoJ2hpZGRlbicsIGhpZGRlbik7XG4gICAgICAgIH1cbiAgICAgICAgZGlzcG9zZSgpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmlld1Byb3BzLnNldCgnZGlzcG9zZWQnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFRwRXZlbnQge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0YXJnZXQpIHtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsYXNzIFRwQ2hhbmdlRXZlbnQgZXh0ZW5kcyBUcEV2ZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodGFyZ2V0LCB2YWx1ZSwgcHJlc2V0S2V5LCBsYXN0KSB7XG4gICAgICAgICAgICBzdXBlcih0YXJnZXQpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5wcmVzZXRLZXkgPSBwcmVzZXRLZXk7XG4gICAgICAgICAgICB0aGlzLmxhc3QgPSBsYXN0ICE9PSBudWxsICYmIGxhc3QgIT09IHZvaWQgMCA/IGxhc3QgOiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsYXNzIFRwVXBkYXRlRXZlbnQgZXh0ZW5kcyBUcEV2ZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodGFyZ2V0LCB2YWx1ZSwgcHJlc2V0S2V5KSB7XG4gICAgICAgICAgICBzdXBlcih0YXJnZXQpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5wcmVzZXRLZXkgPSBwcmVzZXRLZXk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xhc3MgVHBGb2xkRXZlbnQgZXh0ZW5kcyBUcEV2ZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodGFyZ2V0LCBleHBhbmRlZCkge1xuICAgICAgICAgICAgc3VwZXIodGFyZ2V0KTtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kZWQgPSBleHBhbmRlZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZvcmNlQ2FzdCh2KSB7XG4gICAgICAgIHJldHVybiB2O1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWVwRXF1YWxzQXJyYXkoYTEsIGEyKSB7XG4gICAgICAgIGlmIChhMS5sZW5ndGggIT09IGEyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYTEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhMVtpXSAhPT0gYTJbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgQ1JFQVRFX01FU1NBR0VfTUFQID0ge1xuICAgICAgICBhbHJlYWR5ZGlzcG9zZWQ6ICgpID0+ICdWaWV3IGhhcyBiZWVuIGFscmVhZHkgZGlzcG9zZWQnLFxuICAgICAgICBpbnZhbGlkcGFyYW1zOiAoY29udGV4dCkgPT4gYEludmFsaWQgcGFyYW1ldGVycyBmb3IgJyR7Y29udGV4dC5uYW1lfSdgLFxuICAgICAgICBub21hdGNoaW5nY29udHJvbGxlcjogKGNvbnRleHQpID0+IGBObyBtYXRjaGluZyBjb250cm9sbGVyIGZvciAnJHtjb250ZXh0LmtleX0nYCxcbiAgICAgICAgbm9tYXRjaGluZ3ZpZXc6IChjb250ZXh0KSA9PiBgTm8gbWF0Y2hpbmcgdmlldyBmb3IgJyR7SlNPTi5zdHJpbmdpZnkoY29udGV4dC5wYXJhbXMpfSdgLFxuICAgICAgICBub3RiaW5kYWJsZTogKCkgPT4gYFZhbHVlIGlzIG5vdCBiaW5kYWJsZWAsXG4gICAgICAgIHByb3BlcnR5bm90Zm91bmQ6IChjb250ZXh0KSA9PiBgUHJvcGVydHkgJyR7Y29udGV4dC5uYW1lfScgbm90IGZvdW5kYCxcbiAgICAgICAgc2hvdWxkbmV2ZXJoYXBwZW46ICgpID0+ICdUaGlzIGVycm9yIHNob3VsZCBuZXZlciBoYXBwZW4nLFxuICAgIH07XG4gICAgY2xhc3MgVHBFcnJvciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlID1cbiAgICAgICAgICAgICAgICAoX2EgPSBDUkVBVEVfTUVTU0FHRV9NQVBbY29uZmlnLnR5cGVdKGZvcmNlQ2FzdChjb25maWcuY29udGV4dCkpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnVW5leHBlY3RlZCBlcnJvcic7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgICAgICB0aGlzLnN0YWNrID0gbmV3IEVycm9yKHRoaXMubWVzc2FnZSkuc3RhY2s7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBjb25maWcudHlwZTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgYWxyZWFkeURpc3Bvc2VkKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUcEVycm9yKHsgdHlwZTogJ2FscmVhZHlkaXNwb3NlZCcgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIG5vdEJpbmRhYmxlKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUcEVycm9yKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbm90YmluZGFibGUnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIHByb3BlcnR5Tm90Rm91bmQobmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUcEVycm9yKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAncHJvcGVydHlub3Rmb3VuZCcsXG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgc2hvdWxkTmV2ZXJIYXBwZW4oKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFRwRXJyb3IoeyB0eXBlOiAnc2hvdWxkbmV2ZXJoYXBwZW4nIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQmluZGluZ1RhcmdldCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKG9iaiwga2V5LCBvcHRfaWQpIHtcbiAgICAgICAgICAgIHRoaXMub2JqXyA9IG9iajtcbiAgICAgICAgICAgIHRoaXMua2V5XyA9IGtleTtcbiAgICAgICAgICAgIHRoaXMucHJlc2V0S2V5XyA9IG9wdF9pZCAhPT0gbnVsbCAmJiBvcHRfaWQgIT09IHZvaWQgMCA/IG9wdF9pZCA6IGtleTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgaXNCaW5kYWJsZShvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmogPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBnZXQga2V5KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMua2V5XztcbiAgICAgICAgfVxuICAgICAgICBnZXQgcHJlc2V0S2V5KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJlc2V0S2V5XztcbiAgICAgICAgfVxuICAgICAgICByZWFkKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub2JqX1t0aGlzLmtleV9dO1xuICAgICAgICB9XG4gICAgICAgIHdyaXRlKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLm9ial9bdGhpcy5rZXlfXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHdyaXRlUHJvcGVydHkobmFtZSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlT2JqID0gdGhpcy5yZWFkKCk7XG4gICAgICAgICAgICBpZiAoIUJpbmRpbmdUYXJnZXQuaXNCaW5kYWJsZSh2YWx1ZU9iaikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLm5vdEJpbmRhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIShuYW1lIGluIHZhbHVlT2JqKSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3IucHJvcGVydHlOb3RGb3VuZChuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbHVlT2JqW25hbWVdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBCdXR0b25BcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgICAgIGdldCBsYWJlbCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLmdldCgnbGFiZWwnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgbGFiZWwobGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuc2V0KCdsYWJlbCcsIGxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdGl0bGUoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIucHJvcHMuZ2V0KCd0aXRsZScpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgICAgfVxuICAgICAgICBzZXQgdGl0bGUodGl0bGUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnByb3BzLnNldCgndGl0bGUnLCB0aXRsZSk7XG4gICAgICAgIH1cbiAgICAgICAgb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaCA9IGhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IGVtaXR0ZXIgPSB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5lbWl0dGVyO1xuICAgICAgICAgICAgZW1pdHRlci5vbihldmVudE5hbWUsICgpID0+IHtcbiAgICAgICAgICAgICAgICBiaChuZXcgVHBFdmVudCh0aGlzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgRW1pdHRlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgdGhpcy5vYnNlcnZlcnNfID0ge307XG4gICAgICAgIH1cbiAgICAgICAgb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBsZXQgb2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnNfW2V2ZW50TmFtZV07XG4gICAgICAgICAgICBpZiAoIW9ic2VydmVycykge1xuICAgICAgICAgICAgICAgIG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzX1tldmVudE5hbWVdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvYnNlcnZlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxlcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgb2ZmKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnNfW2V2ZW50TmFtZV07XG4gICAgICAgICAgICBpZiAob2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vYnNlcnZlcnNfW2V2ZW50TmFtZV0gPSBvYnNlcnZlcnMuZmlsdGVyKChvYnNlcnZlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXIuaGFuZGxlciAhPT0gaGFuZGxlcjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGVtaXQoZXZlbnROYW1lLCBldmVudCkge1xuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnNfW2V2ZW50TmFtZV07XG4gICAgICAgICAgICBpZiAoIW9ic2VydmVycykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9ic2VydmVycy5mb3JFYWNoKChvYnNlcnZlcikgPT4ge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmhhbmRsZXIoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBQUkVGSVggPSAndHAnO1xuICAgIGZ1bmN0aW9uIENsYXNzTmFtZSh2aWV3TmFtZSkge1xuICAgICAgICBjb25zdCBmbiA9IChvcHRfZWxlbWVudE5hbWUsIG9wdF9tb2RpZmllcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBQUkVGSVgsXG4gICAgICAgICAgICAgICAgJy0nLFxuICAgICAgICAgICAgICAgIHZpZXdOYW1lLFxuICAgICAgICAgICAgICAgICd2JyxcbiAgICAgICAgICAgICAgICBvcHRfZWxlbWVudE5hbWUgPyBgXyR7b3B0X2VsZW1lbnROYW1lfWAgOiAnJyxcbiAgICAgICAgICAgICAgICBvcHRfbW9kaWZpZXIgPyBgLSR7b3B0X21vZGlmaWVyfWAgOiAnJyxcbiAgICAgICAgICAgIF0uam9pbignJyk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBmbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wb3NlKGgxLCBoMikge1xuICAgICAgICByZXR1cm4gKGlucHV0KSA9PiBoMihoMShpbnB1dCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBleHRyYWN0VmFsdWUoZXYpIHtcbiAgICAgICAgcmV0dXJuIGV2LnJhd1ZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBiaW5kVmFsdWUodmFsdWUsIGFwcGx5VmFsdWUpIHtcbiAgICAgICAgdmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgY29tcG9zZShleHRyYWN0VmFsdWUsIGFwcGx5VmFsdWUpKTtcbiAgICAgICAgYXBwbHlWYWx1ZSh2YWx1ZS5yYXdWYWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJpbmRWYWx1ZU1hcCh2YWx1ZU1hcCwga2V5LCBhcHBseVZhbHVlKSB7XG4gICAgICAgIGJpbmRWYWx1ZSh2YWx1ZU1hcC52YWx1ZShrZXkpLCBhcHBseVZhbHVlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcHBseUNsYXNzKGVsZW0sIGNsYXNzTmFtZSwgYWN0aXZlKSB7XG4gICAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsdWVUb0NsYXNzTmFtZShlbGVtLCBjbGFzc05hbWUpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgYXBwbHlDbGFzcyhlbGVtLCBjbGFzc05hbWUsIHZhbHVlKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYmluZFZhbHVlVG9UZXh0Q29udGVudCh2YWx1ZSwgZWxlbSkge1xuICAgICAgICBiaW5kVmFsdWUodmFsdWUsICh0ZXh0KSA9PiB7XG4gICAgICAgICAgICBlbGVtLnRleHRDb250ZW50ID0gdGV4dCAhPT0gbnVsbCAmJiB0ZXh0ICE9PSB2b2lkIDAgPyB0ZXh0IDogJyc7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRxID0gQ2xhc3NOYW1lKCdidG4nKTtcbiAgICBjbGFzcyBCdXR0b25WaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRxKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgICAgICBidXR0b25FbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJHEoJ2InKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmREaXNhYmxlZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudCA9IGJ1dHRvbkVsZW07XG4gICAgICAgICAgICBjb25zdCB0aXRsZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aXRsZUVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkcSgndCcpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZVRvVGV4dENvbnRlbnQoY29uZmlnLnByb3BzLnZhbHVlKCd0aXRsZScpLCB0aXRsZUVsZW0pO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50LmFwcGVuZENoaWxkKHRpdGxlRWxlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBCdXR0b25Db250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLm9uQ2xpY2tfID0gdGhpcy5vbkNsaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBCdXR0b25WaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy5idXR0b25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsaWNrXyk7XG4gICAgICAgIH1cbiAgICAgICAgb25DbGlja18oKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnY2xpY2snLCB7XG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBCb3VuZFZhbHVlIHtcbiAgICAgICAgY29uc3RydWN0b3IoaW5pdGlhbFZhbHVlLCBjb25maWcpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHRoaXMuY29uc3RyYWludF8gPSBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcuY29uc3RyYWludDtcbiAgICAgICAgICAgIHRoaXMuZXF1YWxzXyA9IChfYSA9IGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5lcXVhbHMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICgodjEsIHYyKSA9PiB2MSA9PT0gdjIpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMucmF3VmFsdWVfID0gaW5pdGlhbFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGdldCBjb25zdHJhaW50KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RyYWludF87XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHJhd1ZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmF3VmFsdWVfO1xuICAgICAgICB9XG4gICAgICAgIHNldCByYXdWYWx1ZShyYXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRSYXdWYWx1ZShyYXdWYWx1ZSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNldFJhd1ZhbHVlKHJhd1ZhbHVlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRzID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDoge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBjb25zdHJhaW5lZFZhbHVlID0gdGhpcy5jb25zdHJhaW50X1xuICAgICAgICAgICAgICAgID8gdGhpcy5jb25zdHJhaW50Xy5jb25zdHJhaW4ocmF3VmFsdWUpXG4gICAgICAgICAgICAgICAgOiByYXdWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZWQgPSAhdGhpcy5lcXVhbHNfKHRoaXMucmF3VmFsdWVfLCBjb25zdHJhaW5lZFZhbHVlKTtcbiAgICAgICAgICAgIGlmICghY2hhbmdlZCAmJiAhb3B0cy5mb3JjZUVtaXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnYmVmb3JlY2hhbmdlJywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yYXdWYWx1ZV8gPSBjb25zdHJhaW5lZFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBvcHRzLFxuICAgICAgICAgICAgICAgIHJhd1ZhbHVlOiBjb25zdHJhaW5lZFZhbHVlLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgUHJpbWl0aXZlVmFsdWUge1xuICAgICAgICBjb25zdHJ1Y3Rvcihpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlXyA9IGluaXRpYWxWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgcmF3VmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZV87XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHJhd1ZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFJhd1ZhbHVlKHZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0UmF3VmFsdWUodmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdHMgPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlXyA9PT0gdmFsdWUgJiYgIW9wdHMuZm9yY2VFbWl0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2JlZm9yZWNoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVfID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgIG9wdGlvbnM6IG9wdHMsXG4gICAgICAgICAgICAgICAgcmF3VmFsdWU6IHRoaXMudmFsdWVfLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVmFsdWUoaW5pdGlhbFZhbHVlLCBjb25maWcpIHtcbiAgICAgICAgY29uc3QgY29uc3RyYWludCA9IGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5jb25zdHJhaW50O1xuICAgICAgICBjb25zdCBlcXVhbHMgPSBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcuZXF1YWxzO1xuICAgICAgICBpZiAoIWNvbnN0cmFpbnQgJiYgIWVxdWFscykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcmltaXRpdmVWYWx1ZShpbml0aWFsVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQm91bmRWYWx1ZShpbml0aWFsVmFsdWUsIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgY2xhc3MgVmFsdWVNYXAge1xuICAgICAgICBjb25zdHJ1Y3Rvcih2YWx1ZU1hcCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMudmFsTWFwXyA9IHZhbHVlTWFwO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy52YWxNYXBfKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMudmFsTWFwX1trZXldO1xuICAgICAgICAgICAgICAgIHYuZW1pdHRlci5vbignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBjcmVhdGVDb3JlKGluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGluaXRpYWxWYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4ga2V5cy5yZWR1Y2UoKG8sIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG8sIHtcbiAgICAgICAgICAgICAgICAgICAgW2tleV06IGNyZWF0ZVZhbHVlKGluaXRpYWxWYWx1ZVtrZXldKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZnJvbU9iamVjdChpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvcmUgPSB0aGlzLmNyZWF0ZUNvcmUoaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmFsdWVNYXAoY29yZSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0KGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsTWFwX1trZXldLnJhd1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbE1hcF9ba2V5XS5yYXdWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlKGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsTWFwX1trZXldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VPYmplY3QodmFsdWUsIGtleVRvUGFyc2VyTWFwKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhrZXlUb1BhcnNlck1hcCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGtleXMucmVkdWNlKCh0bXAsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRtcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhcnNlciA9IGtleVRvUGFyc2VyTWFwW2tleV07XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZXIodmFsdWVba2V5XSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnN1Y2NlZWRlZFxuICAgICAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0bXApLCB7IFtrZXldOiByZXN1bHQudmFsdWUgfSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgICAgcmV0dXJuIGZvcmNlQ2FzdChyZXN1bHQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZUFycmF5KHZhbHVlLCBwYXJzZUl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlZHVjZSgodG1wLCBpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAodG1wID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VJdGVtKGl0ZW0pO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQuc3VjY2VlZGVkIHx8IHJlc3VsdC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbLi4udG1wLCByZXN1bHQudmFsdWVdO1xuICAgICAgICB9LCBbXSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKHBhcnNlKSB7XG4gICAgICAgIHJldHVybiAob3B0aW9uYWwpID0+ICh2KSA9PiB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbmFsICYmIHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHN1Y2NlZWRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25hbCAmJiB2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZWVkZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlKHYpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIHN1Y2NlZWRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgIHN1Y2NlZWRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcnMob3B0aW9uYWwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGN1c3RvbTogKHBhcnNlKSA9PiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKHBhcnNlKShvcHRpb25hbCksXG4gICAgICAgICAgICBib29sZWFuOiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKCh2KSA9PiB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nID8gdiA6IHVuZGVmaW5lZCkob3B0aW9uYWwpLFxuICAgICAgICAgICAgbnVtYmVyOiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKCh2KSA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicgPyB2IDogdW5kZWZpbmVkKShvcHRpb25hbCksXG4gICAgICAgICAgICBzdHJpbmc6IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIoKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IHYgOiB1bmRlZmluZWQpKG9wdGlvbmFsKSxcbiAgICAgICAgICAgIGZ1bmN0aW9uOiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKCh2KSA9PlxuICAgICAgICAgICAgdHlwZW9mIHYgPT09ICdmdW5jdGlvbicgPyB2IDogdW5kZWZpbmVkKShvcHRpb25hbCksXG4gICAgICAgICAgICBjb25zdGFudDogKHZhbHVlKSA9PiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKCh2KSA9PiAodiA9PT0gdmFsdWUgPyB2YWx1ZSA6IHVuZGVmaW5lZCkpKG9wdGlvbmFsKSxcbiAgICAgICAgICAgIHJhdzogY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcigodikgPT4gdikob3B0aW9uYWwpLFxuICAgICAgICAgICAgb2JqZWN0OiAoa2V5VG9QYXJzZXJNYXApID0+IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIoKHYpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KHYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZU9iamVjdCh2LCBrZXlUb1BhcnNlck1hcCk7XG4gICAgICAgICAgICB9KShvcHRpb25hbCksXG4gICAgICAgICAgICBhcnJheTogKGl0ZW1QYXJzZXIpID0+IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIoKHYpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlQXJyYXkodiwgaXRlbVBhcnNlcik7XG4gICAgICAgICAgICB9KShvcHRpb25hbCksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IFBhcmFtc1BhcnNlcnMgPSB7XG4gICAgICAgIG9wdGlvbmFsOiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVycyh0cnVlKSxcbiAgICAgICAgcmVxdWlyZWQ6IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXJzKGZhbHNlKSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHBhcnNlUGFyYW1zKHZhbHVlLCBrZXlUb1BhcnNlck1hcCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBQYXJhbXNQYXJzZXJzLnJlcXVpcmVkLm9iamVjdChrZXlUb1BhcnNlck1hcCkodmFsdWUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0LnN1Y2NlZWRlZCA/IHJlc3VsdC52YWx1ZSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkaXNwb3NlRWxlbWVudChlbGVtKSB7XG4gICAgICAgIGlmIChlbGVtICYmIGVsZW0ucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgZWxlbS5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGVsZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEFsbEJsYWRlUG9zaXRpb25zKCkge1xuICAgICAgICByZXR1cm4gWyd2ZXJ5Zmlyc3QnLCAnZmlyc3QnLCAnbGFzdCcsICd2ZXJ5bGFzdCddO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRwID0gQ2xhc3NOYW1lKCcnKTtcbiAgICBjb25zdCBQT1NfVE9fQ0xBU1NfTkFNRV9NQVAgPSB7XG4gICAgICAgIHZlcnlmaXJzdDogJ3Zmc3QnLFxuICAgICAgICBmaXJzdDogJ2ZzdCcsXG4gICAgICAgIGxhc3Q6ICdsc3QnLFxuICAgICAgICB2ZXJ5bGFzdDogJ3Zsc3QnLFxuICAgIH07XG4gICAgY2xhc3MgQmxhZGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudF8gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5ibGFkZSA9IGNvbmZpZy5ibGFkZTtcbiAgICAgICAgICAgIHRoaXMudmlldyA9IGNvbmZpZy52aWV3O1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgY29uc3QgZWxlbSA9IHRoaXMudmlldy5lbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5ibGFkZS52YWx1ZSgncG9zaXRpb25zJykuZW1pdHRlci5vbignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGdldEFsbEJsYWRlUG9zaXRpb25zKCkuZm9yRWFjaCgocG9zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUkcCh1bmRlZmluZWQsIFBPU19UT19DTEFTU19OQU1FX01BUFtwb3NdKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ibGFkZS5nZXQoJ3Bvc2l0aW9ucycpLmZvckVhY2goKHBvcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJHAodW5kZWZpbmVkLCBQT1NfVE9fQ0xBU1NfTkFNRV9NQVBbcG9zXSkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcy5oYW5kbGVEaXNwb3NlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkaXNwb3NlRWxlbWVudChlbGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBwYXJlbnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRfO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgU1ZHX05TID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcbiAgICBmdW5jdGlvbiBmb3JjZVJlZmxvdyhlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNhYmxlVHJhbnNpdGlvblRlbXBvcmFyaWx5KGVsZW1lbnQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IHQgPSBlbGVtZW50LnN0eWxlLnRyYW5zaXRpb247XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudHJhbnNpdGlvbiA9ICdub25lJztcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50cmFuc2l0aW9uID0gdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3VwcG9ydHNUb3VjaChkb2MpIHtcbiAgICAgICAgcmV0dXJuIGRvYy5vbnRvdWNoc3RhcnQgIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0R2xvYmFsT2JqZWN0KCkge1xuICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFdpbmRvd0RvY3VtZW50KCkge1xuICAgICAgICBjb25zdCBnbG9iYWxPYmogPSBmb3JjZUNhc3QoZ2V0R2xvYmFsT2JqZWN0KCkpO1xuICAgICAgICByZXR1cm4gZ2xvYmFsT2JqLmRvY3VtZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDYW52YXNDb250ZXh0KGNhbnZhc0VsZW1lbnQpIHtcbiAgICAgICAgY29uc3Qgd2luID0gY2FudmFzRWxlbWVudC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuICAgICAgICBpZiAoIXdpbikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNCcm93c2VyID0gJ2RvY3VtZW50JyBpbiB3aW47XG4gICAgICAgIHJldHVybiBpc0Jyb3dzZXIgPyBjYW52YXNFbGVtZW50LmdldENvbnRleHQoJzJkJykgOiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBJQ09OX0lEX1RPX0lOTkVSX0hUTUxfTUFQID0ge1xuICAgICAgICBjaGVjazogJzxwYXRoIGQ9XCJNMiA4bDQgNGw4IC04XCIvPicsXG4gICAgICAgIGRyb3Bkb3duOiAnPHBhdGggZD1cIk01IDdoNmwtMyAzIHpcIi8+JyxcbiAgICAgICAgcDJkcGFkOiAnPHBhdGggZD1cIk04IDR2OFwiLz48cGF0aCBkPVwiTTQgOGg4XCIvPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMS4yXCIvPicsXG4gICAgfTtcbiAgICBmdW5jdGlvbiBjcmVhdGVTdmdJY29uRWxlbWVudChkb2N1bWVudCwgaWNvbklkKSB7XG4gICAgICAgIGNvbnN0IGVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAnc3ZnJyk7XG4gICAgICAgIGVsZW0uaW5uZXJIVE1MID0gSUNPTl9JRF9UT19JTk5FUl9IVE1MX01BUFtpY29uSWRdO1xuICAgICAgICByZXR1cm4gZWxlbTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5zZXJ0RWxlbWVudEF0KHBhcmVudEVsZW1lbnQsIGVsZW1lbnQsIGluZGV4KSB7XG4gICAgICAgIHBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGVsZW1lbnQsIHBhcmVudEVsZW1lbnQuY2hpbGRyZW5baW5kZXhdKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVtb3ZlRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGlmIChlbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZW1vdmVDaGlsZEVsZW1lbnRzKGVsZW1lbnQpIHtcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVDaGlsZChlbGVtZW50LmNoaWxkcmVuWzBdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZW1vdmVDaGlsZE5vZGVzKGVsZW1lbnQpIHtcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQuY2hpbGROb2Rlc1swXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZE5leHRUYXJnZXQoZXYpIHtcbiAgICAgICAgaWYgKGV2LnJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JjZUNhc3QoZXYucmVsYXRlZFRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCdleHBsaWNpdE9yaWdpbmFsVGFyZ2V0JyBpbiBldikge1xuICAgICAgICAgICAgcmV0dXJuIGV2LmV4cGxpY2l0T3JpZ2luYWxUYXJnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJG8gPSBDbGFzc05hbWUoJ2xibCcpO1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUxhYmVsTm9kZShkb2MsIGxhYmVsKSB7XG4gICAgICAgIGNvbnN0IGZyYWcgPSBkb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICBjb25zdCBsaW5lTm9kZXMgPSBsYWJlbC5zcGxpdCgnXFxuJykubWFwKChsaW5lKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZG9jLmNyZWF0ZVRleHROb2RlKGxpbmUpO1xuICAgICAgICB9KTtcbiAgICAgICAgbGluZU5vZGVzLmZvckVhY2goKGxpbmVOb2RlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZUVsZW1lbnQoJ2JyJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChsaW5lTm9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZnJhZztcbiAgICB9XG4gICAgY2xhc3MgTGFiZWxWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRvKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGxhYmVsRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRvKCdsJykpO1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKGNvbmZpZy5wcm9wcywgJ2xhYmVsJywgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzRW1wdHkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRvKHVuZGVmaW5lZCwgJ25vbCcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSRvKHVuZGVmaW5lZCwgJ25vbCcpKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGROb2RlcyhsYWJlbEVsZW0pO1xuICAgICAgICAgICAgICAgICAgICBsYWJlbEVsZW0uYXBwZW5kQ2hpbGQoY3JlYXRlTGFiZWxOb2RlKGRvYywgdmFsdWUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChsYWJlbEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5sYWJlbEVsZW1lbnQgPSBsYWJlbEVsZW07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB2YWx1ZUVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbygndicpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh2YWx1ZUVsZW0pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUVsZW1lbnQgPSB2YWx1ZUVsZW07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBMYWJlbENvbnRyb2xsZXIgZXh0ZW5kcyBCbGFkZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgY29uc3Qgdmlld1Byb3BzID0gY29uZmlnLnZhbHVlQ29udHJvbGxlci52aWV3UHJvcHM7XG4gICAgICAgICAgICBzdXBlcihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZyksIHsgdmlldzogbmV3IExhYmVsVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy5wcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiB2aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSksIHZpZXdQcm9wczogdmlld1Byb3BzIH0pKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ29udHJvbGxlciA9IGNvbmZpZy52YWx1ZUNvbnRyb2xsZXI7XG4gICAgICAgICAgICB0aGlzLnZpZXcudmFsdWVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMudmFsdWVDb250cm9sbGVyLnZpZXcuZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBCdXR0b25CbGFkZVBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdidXR0b24nLFxuICAgICAgICB0eXBlOiAnYmxhZGUnLFxuICAgICAgICBhY2NlcHQocGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBwLnJlcXVpcmVkLnN0cmluZyxcbiAgICAgICAgICAgICAgICB2aWV3OiBwLnJlcXVpcmVkLmNvbnN0YW50KCdidXR0b24nKSxcbiAgICAgICAgICAgICAgICBsYWJlbDogcC5vcHRpb25hbC5zdHJpbmcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyB7IHBhcmFtczogcmVzdWx0IH0gOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyKGFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTGFiZWxDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBibGFkZTogYXJncy5ibGFkZSxcbiAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBhcmdzLnBhcmFtcy5sYWJlbCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB2YWx1ZUNvbnRyb2xsZXI6IG5ldyBCdXR0b25Db250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGFyZ3MucGFyYW1zLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBhcGkoYXJncykge1xuICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyIGluc3RhbmNlb2YgTGFiZWxDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyLnZhbHVlQ29udHJvbGxlciBpbnN0YW5jZW9mIEJ1dHRvbkNvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJ1dHRvbkFwaShhcmdzLmNvbnRyb2xsZXIpO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjbGFzcyBWYWx1ZUJsYWRlQ29udHJvbGxlciBleHRlbmRzIEJsYWRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICAgICAgc3VwZXIoY29uZmlnKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVCbGFkZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWYWx1ZU1hcCh7XG4gICAgICAgICAgICBwb3NpdGlvbnM6IGNyZWF0ZVZhbHVlKFtdLCB7XG4gICAgICAgICAgICAgICAgZXF1YWxzOiBkZWVwRXF1YWxzQXJyYXksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xhc3MgRm9sZGFibGUgZXh0ZW5kcyBWYWx1ZU1hcCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHZhbHVlTWFwKSB7XG4gICAgICAgICAgICBzdXBlcih2YWx1ZU1hcCk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGNyZWF0ZShleHBhbmRlZCkge1xuICAgICAgICAgICAgY29uc3QgY29yZU9iaiA9IHtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGV4cGFuZGVkLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVkSGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgIHNob3VsZEZpeEhlaWdodDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGVtcG9yYXJ5RXhwYW5kZWQ6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgY29yZSA9IFZhbHVlTWFwLmNyZWF0ZUNvcmUoY29yZU9iaik7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZvbGRhYmxlKGNvcmUpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBzdHlsZUV4cGFuZGVkKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuZ2V0KCd0ZW1wb3JhcnlFeHBhbmRlZCcpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLmdldCgnZXhwYW5kZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgc3R5bGVIZWlnaHQoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc3R5bGVFeHBhbmRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnMCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBleEhlaWdodCA9IHRoaXMuZ2V0KCdleHBhbmRlZEhlaWdodCcpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0KCdzaG91bGRGaXhIZWlnaHQnKSAmJiAhaXNFbXB0eShleEhlaWdodCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7ZXhIZWlnaHR9cHhgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICdhdXRvJztcbiAgICAgICAgfVxuICAgICAgICBiaW5kRXhwYW5kZWRDbGFzcyhlbGVtLCBleHBhbmRlZENsYXNzTmFtZSkge1xuICAgICAgICAgICAgY29uc3Qgb25FeHBhbmQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwYW5kZWQgPSB0aGlzLnN0eWxlRXhwYW5kZWQ7XG4gICAgICAgICAgICAgICAgaWYgKGV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LmFkZChleHBhbmRlZENsYXNzTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5yZW1vdmUoZXhwYW5kZWRDbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAodGhpcywgJ2V4cGFuZGVkJywgb25FeHBhbmQpO1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKHRoaXMsICd0ZW1wb3JhcnlFeHBhbmRlZCcsIG9uRXhwYW5kKTtcbiAgICAgICAgfVxuICAgICAgICBjbGVhblVwVHJhbnNpdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KCdzaG91bGRGaXhIZWlnaHQnLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnNldCgnZXhwYW5kZWRIZWlnaHQnLCBudWxsKTtcbiAgICAgICAgICAgIHRoaXMuc2V0KCdjb21wbGV0ZWQnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjb21wdXRlRXhwYW5kZWRGb2xkZXJIZWlnaHQoZm9sZGVyLCBjb250YWluZXJFbGVtZW50KSB7XG4gICAgICAgIGxldCBoZWlnaHQgPSAwO1xuICAgICAgICBkaXNhYmxlVHJhbnNpdGlvblRlbXBvcmFyaWx5KGNvbnRhaW5lckVsZW1lbnQsICgpID0+IHtcbiAgICAgICAgICAgIGZvbGRlci5zZXQoJ2V4cGFuZGVkSGVpZ2h0JywgbnVsbCk7XG4gICAgICAgICAgICBmb2xkZXIuc2V0KCd0ZW1wb3JhcnlFeHBhbmRlZCcsIHRydWUpO1xuICAgICAgICAgICAgZm9yY2VSZWZsb3coY29udGFpbmVyRWxlbWVudCk7XG4gICAgICAgICAgICBoZWlnaHQgPSBjb250YWluZXJFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgICAgIGZvbGRlci5zZXQoJ3RlbXBvcmFyeUV4cGFuZGVkJywgbnVsbCk7XG4gICAgICAgICAgICBmb3JjZVJlZmxvdyhjb250YWluZXJFbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBoZWlnaHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFwcGx5SGVpZ2h0KGZvbGRhYmxlLCBlbGVtKSB7XG4gICAgICAgIGVsZW0uc3R5bGUuaGVpZ2h0ID0gZm9sZGFibGUuc3R5bGVIZWlnaHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJpbmRGb2xkYWJsZShmb2xkYWJsZSwgZWxlbSkge1xuICAgICAgICBmb2xkYWJsZS52YWx1ZSgnZXhwYW5kZWQnKS5lbWl0dGVyLm9uKCdiZWZvcmVjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICBmb2xkYWJsZS5zZXQoJ2NvbXBsZXRlZCcsIGZhbHNlKTtcbiAgICAgICAgICAgIGlmIChpc0VtcHR5KGZvbGRhYmxlLmdldCgnZXhwYW5kZWRIZWlnaHQnKSkpIHtcbiAgICAgICAgICAgICAgICBmb2xkYWJsZS5zZXQoJ2V4cGFuZGVkSGVpZ2h0JywgY29tcHV0ZUV4cGFuZGVkRm9sZGVySGVpZ2h0KGZvbGRhYmxlLCBlbGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb2xkYWJsZS5zZXQoJ3Nob3VsZEZpeEhlaWdodCcsIHRydWUpO1xuICAgICAgICAgICAgZm9yY2VSZWZsb3coZWxlbSk7XG4gICAgICAgIH0pO1xuICAgICAgICBmb2xkYWJsZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICBhcHBseUhlaWdodChmb2xkYWJsZSwgZWxlbSk7XG4gICAgICAgIH0pO1xuICAgICAgICBhcHBseUhlaWdodChmb2xkYWJsZSwgZWxlbSk7XG4gICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIChldikgPT4ge1xuICAgICAgICAgICAgaWYgKGV2LnByb3BlcnR5TmFtZSAhPT0gJ2hlaWdodCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb2xkYWJsZS5jbGVhblVwVHJhbnNpdGlvbigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbGFzcyBSYWNrTGlrZUFwaSBleHRlbmRzIEJsYWRlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlciwgcmFja0FwaSkge1xuICAgICAgICAgICAgc3VwZXIoY29udHJvbGxlcik7XG4gICAgICAgICAgICB0aGlzLnJhY2tBcGlfID0gcmFja0FwaTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZEJ1dHRvbkFzQmxhZGUoYXBpLCBwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIGFwaS5hZGRCbGFkZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBhcmFtcyksIHsgdmlldzogJ2J1dHRvbicgfSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRGb2xkZXJBc0JsYWRlKGFwaSwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBhcGkuYWRkQmxhZGUoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMpLCB7IHZpZXc6ICdmb2xkZXInIH0pKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkU2VwYXJhdG9yQXNCbGFkZShhcGksIG9wdF9wYXJhbXMpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gb3B0X3BhcmFtcyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIGFwaS5hZGRCbGFkZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBhcmFtcyksIHsgdmlldzogJ3NlcGFyYXRvcicgfSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRUYWJBc0JsYWRlKGFwaSwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBhcGkuYWRkQmxhZGUoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMpLCB7IHZpZXc6ICd0YWInIH0pKTtcbiAgICB9XG5cbiAgICBjbGFzcyBOZXN0ZWRPcmRlcmVkU2V0IHtcbiAgICAgICAgY29uc3RydWN0b3IoZXh0cmFjdCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuaXRlbXNfID0gW107XG4gICAgICAgICAgICB0aGlzLmNhY2hlXyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIHRoaXMub25TdWJMaXN0QWRkXyA9IHRoaXMub25TdWJMaXN0QWRkXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblN1Ykxpc3RSZW1vdmVfID0gdGhpcy5vblN1Ykxpc3RSZW1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmV4dHJhY3RfID0gZXh0cmFjdDtcbiAgICAgICAgfVxuICAgICAgICBnZXQgaXRlbXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtc187XG4gICAgICAgIH1cbiAgICAgICAgYWxsSXRlbXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNhY2hlXyk7XG4gICAgICAgIH1cbiAgICAgICAgZmluZChjYWxsYmFjaykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuYWxsSXRlbXMoKSkge1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhpdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpbmNsdWRlcyhpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZV8uaGFzKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGFkZChpdGVtLCBvcHRfaW5kZXgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmluY2x1ZGVzKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBvcHRfaW5kZXggIT09IHVuZGVmaW5lZCA/IG9wdF9pbmRleCA6IHRoaXMuaXRlbXNfLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuaXRlbXNfLnNwbGljZShpbmRleCwgMCwgaXRlbSk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlXy5hZGQoaXRlbSk7XG4gICAgICAgICAgICBjb25zdCBzdWJMaXN0ID0gdGhpcy5leHRyYWN0XyhpdGVtKTtcbiAgICAgICAgICAgIGlmIChzdWJMaXN0KSB7XG4gICAgICAgICAgICAgICAgc3ViTGlzdC5lbWl0dGVyLm9uKCdhZGQnLCB0aGlzLm9uU3ViTGlzdEFkZF8pO1xuICAgICAgICAgICAgICAgIHN1Ykxpc3QuZW1pdHRlci5vbigncmVtb3ZlJywgdGhpcy5vblN1Ykxpc3RSZW1vdmVfKTtcbiAgICAgICAgICAgICAgICBzdWJMaXN0LmFsbEl0ZW1zKCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlXy5hZGQoaXRlbSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnYWRkJywge1xuICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICAgIHJvb3Q6IHRoaXMsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlKGl0ZW0pIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pdGVtc18uaW5kZXhPZihpdGVtKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLml0ZW1zXy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5jYWNoZV8uZGVsZXRlKGl0ZW0pO1xuICAgICAgICAgICAgY29uc3Qgc3ViTGlzdCA9IHRoaXMuZXh0cmFjdF8oaXRlbSk7XG4gICAgICAgICAgICBpZiAoc3ViTGlzdCkge1xuICAgICAgICAgICAgICAgIHN1Ykxpc3QuZW1pdHRlci5vZmYoJ2FkZCcsIHRoaXMub25TdWJMaXN0QWRkXyk7XG4gICAgICAgICAgICAgICAgc3ViTGlzdC5lbWl0dGVyLm9mZigncmVtb3ZlJywgdGhpcy5vblN1Ykxpc3RSZW1vdmVfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdyZW1vdmUnLCB7XG4gICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgcm9vdDogdGhpcyxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblN1Ykxpc3RBZGRfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlXy5hZGQoZXYuaXRlbSk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnYWRkJywge1xuICAgICAgICAgICAgICAgIGluZGV4OiBldi5pbmRleCxcbiAgICAgICAgICAgICAgICBpdGVtOiBldi5pdGVtLFxuICAgICAgICAgICAgICAgIHJvb3Q6IHRoaXMsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBldi50YXJnZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblN1Ykxpc3RSZW1vdmVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlXy5kZWxldGUoZXYuaXRlbSk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgncmVtb3ZlJywge1xuICAgICAgICAgICAgICAgIGluZGV4OiBldi5pbmRleCxcbiAgICAgICAgICAgICAgICBpdGVtOiBldi5pdGVtLFxuICAgICAgICAgICAgICAgIHJvb3Q6IHRoaXMsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBldi50YXJnZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIElucHV0QmluZGluZ0FwaSBleHRlbmRzIEJsYWRlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlcikge1xuICAgICAgICAgICAgc3VwZXIoY29udHJvbGxlcik7XG4gICAgICAgICAgICB0aGlzLm9uQmluZGluZ0NoYW5nZV8gPSB0aGlzLm9uQmluZGluZ0NoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8gPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5iaW5kaW5nLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25CaW5kaW5nQ2hhbmdlXyk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGxhYmVsKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuZ2V0KCdsYWJlbCcpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBsYWJlbChsYWJlbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wcm9wcy5zZXQoJ2xhYmVsJywgbGFiZWwpO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLm9uKGV2ZW50TmFtZSwgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgYmgoZXYuZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICByZWZyZXNoKCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5iaW5kaW5nLnJlYWQoKTtcbiAgICAgICAgfVxuICAgICAgICBvbkJpbmRpbmdDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGV2LnNlbmRlci50YXJnZXQucmVhZCgpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgZXZlbnQ6IG5ldyBUcENoYW5nZUV2ZW50KHRoaXMsIGZvcmNlQ2FzdCh2YWx1ZSksIHRoaXMuY29udHJvbGxlcl8uYmluZGluZy50YXJnZXQucHJlc2V0S2V5LCBldi5vcHRpb25zLmxhc3QpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBJbnB1dEJpbmRpbmdDb250cm9sbGVyIGV4dGVuZHMgTGFiZWxDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHN1cGVyKGRvYywgY29uZmlnKTtcbiAgICAgICAgICAgIHRoaXMuYmluZGluZyA9IGNvbmZpZy5iaW5kaW5nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgTW9uaXRvckJpbmRpbmdBcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgdGhpcy5vbkJpbmRpbmdVcGRhdGVfID0gdGhpcy5vbkJpbmRpbmdVcGRhdGVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8uYmluZGluZy5lbWl0dGVyLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmluZGluZ1VwZGF0ZV8pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBsYWJlbCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLmdldCgnbGFiZWwnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgbGFiZWwobGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuc2V0KCdsYWJlbCcsIGxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgICBvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJoID0gaGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5vbihldmVudE5hbWUsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIGJoKGV2LmV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgcmVmcmVzaCgpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8uYmluZGluZy5yZWFkKCk7XG4gICAgICAgIH1cbiAgICAgICAgb25CaW5kaW5nVXBkYXRlXyhldikge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBldi5zZW5kZXIudGFyZ2V0LnJlYWQoKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgndXBkYXRlJywge1xuICAgICAgICAgICAgICAgIGV2ZW50OiBuZXcgVHBVcGRhdGVFdmVudCh0aGlzLCBmb3JjZUNhc3QodmFsdWUpLCB0aGlzLmNvbnRyb2xsZXJfLmJpbmRpbmcudGFyZ2V0LnByZXNldEtleSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIE1vbml0b3JCaW5kaW5nQ29udHJvbGxlciBleHRlbmRzIExhYmVsQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBzdXBlcihkb2MsIGNvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLmJpbmRpbmcgPSBjb25maWcuYmluZGluZztcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzLmJpbmREaXNhYmxlZCh0aGlzLmJpbmRpbmcudGlja2VyKTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzLmhhbmRsZURpc3Bvc2UoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYmluZGluZy5kaXNwb3NlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbmRTdWJCbGFkZUFwaVNldChhcGkpIHtcbiAgICAgICAgaWYgKGFwaSBpbnN0YW5jZW9mIFJhY2tBcGkpIHtcbiAgICAgICAgICAgIHJldHVybiBhcGlbJ2FwaVNldF8nXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXBpIGluc3RhbmNlb2YgUmFja0xpa2VBcGkpIHtcbiAgICAgICAgICAgIHJldHVybiBhcGlbJ3JhY2tBcGlfJ11bJ2FwaVNldF8nXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0QXBpQnlDb250cm9sbGVyKGFwaVNldCwgY29udHJvbGxlcikge1xuICAgICAgICBjb25zdCBhcGkgPSBhcGlTZXQuZmluZCgoYXBpKSA9PiBhcGkuY29udHJvbGxlcl8gPT09IGNvbnRyb2xsZXIpO1xuICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcGk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUJpbmRpbmdUYXJnZXQob2JqLCBrZXksIG9wdF9pZCkge1xuICAgICAgICBpZiAoIUJpbmRpbmdUYXJnZXQuaXNCaW5kYWJsZShvYmopKSB7XG4gICAgICAgICAgICB0aHJvdyBUcEVycm9yLm5vdEJpbmRhYmxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBCaW5kaW5nVGFyZ2V0KG9iaiwga2V5LCBvcHRfaWQpO1xuICAgIH1cbiAgICBjbGFzcyBSYWNrQXBpIGV4dGVuZHMgQmxhZGVBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyLCBwb29sKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyKTtcbiAgICAgICAgICAgIHRoaXMub25SYWNrQWRkXyA9IHRoaXMub25SYWNrQWRkXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblJhY2tSZW1vdmVfID0gdGhpcy5vblJhY2tSZW1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUmFja0lucHV0Q2hhbmdlXyA9IHRoaXMub25SYWNrSW5wdXRDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUmFja01vbml0b3JVcGRhdGVfID0gdGhpcy5vblJhY2tNb25pdG9yVXBkYXRlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXyA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLmFwaVNldF8gPSBuZXcgTmVzdGVkT3JkZXJlZFNldChmaW5kU3ViQmxhZGVBcGlTZXQpO1xuICAgICAgICAgICAgdGhpcy5wb29sXyA9IHBvb2w7XG4gICAgICAgICAgICBjb25zdCByYWNrID0gdGhpcy5jb250cm9sbGVyXy5yYWNrO1xuICAgICAgICAgICAgcmFjay5lbWl0dGVyLm9uKCdhZGQnLCB0aGlzLm9uUmFja0FkZF8pO1xuICAgICAgICAgICAgcmFjay5lbWl0dGVyLm9uKCdyZW1vdmUnLCB0aGlzLm9uUmFja1JlbW92ZV8pO1xuICAgICAgICAgICAgcmFjay5lbWl0dGVyLm9uKCdpbnB1dGNoYW5nZScsIHRoaXMub25SYWNrSW5wdXRDaGFuZ2VfKTtcbiAgICAgICAgICAgIHJhY2suZW1pdHRlci5vbignbW9uaXRvcnVwZGF0ZScsIHRoaXMub25SYWNrTW9uaXRvclVwZGF0ZV8pO1xuICAgICAgICAgICAgcmFjay5jaGlsZHJlbi5mb3JFYWNoKChiYykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VXBBcGlfKGJjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBjaGlsZHJlbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnJhY2suY2hpbGRyZW4ubWFwKChiYykgPT4gZ2V0QXBpQnlDb250cm9sbGVyKHRoaXMuYXBpU2V0XywgYmMpKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRJbnB1dChvYmplY3QsIGtleSwgb3B0X3BhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gb3B0X3BhcmFtcyB8fCB7fTtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuY29udHJvbGxlcl8udmlldy5lbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBiYyA9IHRoaXMucG9vbF8uY3JlYXRlSW5wdXQoZG9jLCBjcmVhdGVCaW5kaW5nVGFyZ2V0KG9iamVjdCwga2V5LCBwYXJhbXMucHJlc2V0S2V5KSwgcGFyYW1zKTtcbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IG5ldyBJbnB1dEJpbmRpbmdBcGkoYmMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKGFwaSwgcGFyYW1zLmluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBhZGRNb25pdG9yKG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBvcHRfcGFyYW1zIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5jb250cm9sbGVyXy52aWV3LmVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gdGhpcy5wb29sXy5jcmVhdGVNb25pdG9yKGRvYywgY3JlYXRlQmluZGluZ1RhcmdldChvYmplY3QsIGtleSksIHBhcmFtcyk7XG4gICAgICAgICAgICBjb25zdCBhcGkgPSBuZXcgTW9uaXRvckJpbmRpbmdBcGkoYmMpO1xuICAgICAgICAgICAgcmV0dXJuIGZvcmNlQ2FzdCh0aGlzLmFkZChhcGksIHBhcmFtcy5pbmRleCkpO1xuICAgICAgICB9XG4gICAgICAgIGFkZEZvbGRlcihwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhZGRGb2xkZXJBc0JsYWRlKHRoaXMsIHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkQnV0dG9uKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIGFkZEJ1dHRvbkFzQmxhZGUodGhpcywgcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRTZXBhcmF0b3Iob3B0X3BhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIGFkZFNlcGFyYXRvckFzQmxhZGUodGhpcywgb3B0X3BhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkVGFiKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIGFkZFRhYkFzQmxhZGUodGhpcywgcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGQoYXBpLCBvcHRfaW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucmFjay5hZGQoYXBpLmNvbnRyb2xsZXJfLCBvcHRfaW5kZXgpO1xuICAgICAgICAgICAgY29uc3QgZ2FwaSA9IHRoaXMuYXBpU2V0Xy5maW5kKChhKSA9PiBhLmNvbnRyb2xsZXJfID09PSBhcGkuY29udHJvbGxlcl8pO1xuICAgICAgICAgICAgaWYgKGdhcGkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwaVNldF8ucmVtb3ZlKGdhcGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hcGlTZXRfLmFkZChhcGkpO1xuICAgICAgICAgICAgcmV0dXJuIGFwaTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmUoYXBpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnJhY2sucmVtb3ZlKGFwaS5jb250cm9sbGVyXyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkQmxhZGUocGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSB0aGlzLmNvbnRyb2xsZXJfLnZpZXcuZWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgYmMgPSB0aGlzLnBvb2xfLmNyZWF0ZUJsYWRlKGRvYywgcGFyYW1zKTtcbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IHRoaXMucG9vbF8uY3JlYXRlQmxhZGVBcGkoYmMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKGFwaSwgcGFyYW1zLmluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJoID0gaGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5vbihldmVudE5hbWUsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIGJoKGV2LmV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VXBBcGlfKGJjKSB7XG4gICAgICAgICAgICBjb25zdCBhcGkgPSB0aGlzLmFwaVNldF8uZmluZCgoYXBpKSA9PiBhcGkuY29udHJvbGxlcl8gPT09IGJjKTtcbiAgICAgICAgICAgIGlmICghYXBpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcGlTZXRfLmFkZCh0aGlzLnBvb2xfLmNyZWF0ZUJsYWRlQXBpKGJjKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25SYWNrQWRkXyhldikge1xuICAgICAgICAgICAgdGhpcy5zZXRVcEFwaV8oZXYuYmxhZGVDb250cm9sbGVyKTtcbiAgICAgICAgfVxuICAgICAgICBvblJhY2tSZW1vdmVfKGV2KSB7XG4gICAgICAgICAgICBpZiAoZXYuaXNSb290KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXBpID0gZ2V0QXBpQnlDb250cm9sbGVyKHRoaXMuYXBpU2V0XywgZXYuYmxhZGVDb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwaVNldF8ucmVtb3ZlKGFwaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25SYWNrSW5wdXRDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IGV2LmJsYWRlQ29udHJvbGxlcjtcbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIElucHV0QmluZGluZ0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcGkgPSBnZXRBcGlCeUNvbnRyb2xsZXIodGhpcy5hcGlTZXRfLCBiYyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYmluZGluZyA9IGJjLmJpbmRpbmc7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBuZXcgVHBDaGFuZ2VFdmVudChhcGksIGZvcmNlQ2FzdChiaW5kaW5nLnRhcmdldC5yZWFkKCkpLCBiaW5kaW5nLnRhcmdldC5wcmVzZXRLZXksIGV2Lm9wdGlvbnMubGFzdCksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChiYyBpbnN0YW5jZW9mIFZhbHVlQmxhZGVDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXBpID0gZ2V0QXBpQnlDb250cm9sbGVyKHRoaXMuYXBpU2V0XywgYmMpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwQ2hhbmdlRXZlbnQoYXBpLCBiYy52YWx1ZS5yYXdWYWx1ZSwgdW5kZWZpbmVkLCBldi5vcHRpb25zLmxhc3QpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uUmFja01vbml0b3JVcGRhdGVfKGV2KSB7XG4gICAgICAgICAgICBpZiAoIShldi5ibGFkZUNvbnRyb2xsZXIgaW5zdGFuY2VvZiBNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXBpID0gZ2V0QXBpQnlDb250cm9sbGVyKHRoaXMuYXBpU2V0XywgZXYuYmxhZGVDb250cm9sbGVyKTtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRpbmcgPSBldi5ibGFkZUNvbnRyb2xsZXIuYmluZGluZztcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgndXBkYXRlJywge1xuICAgICAgICAgICAgICAgIGV2ZW50OiBuZXcgVHBVcGRhdGVFdmVudChhcGksIGZvcmNlQ2FzdChiaW5kaW5nLnRhcmdldC5yZWFkKCkpLCBiaW5kaW5nLnRhcmdldC5wcmVzZXRLZXkpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBGb2xkZXJBcGkgZXh0ZW5kcyBSYWNrTGlrZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIsIHBvb2wpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIsIG5ldyBSYWNrQXBpKGNvbnRyb2xsZXIucmFja0NvbnRyb2xsZXIsIHBvb2wpKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8gPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5mb2xkYWJsZVxuICAgICAgICAgICAgICAgIC52YWx1ZSgnZXhwYW5kZWQnKVxuICAgICAgICAgICAgICAgIC5lbWl0dGVyLm9uKCdjaGFuZ2UnLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ2ZvbGQnLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBuZXcgVHBGb2xkRXZlbnQodGhpcywgZXYuc2VuZGVyLnJhd1ZhbHVlKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yYWNrQXBpXy5vbignY2hhbmdlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBldixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yYWNrQXBpXy5vbigndXBkYXRlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCd1cGRhdGUnLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBldixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBleHBhbmRlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLmZvbGRhYmxlLmdldCgnZXhwYW5kZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgZXhwYW5kZWQoZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8uZm9sZGFibGUuc2V0KCdleHBhbmRlZCcsIGV4cGFuZGVkKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdGl0bGUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5wcm9wcy5nZXQoJ3RpdGxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHRpdGxlKHRpdGxlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLnNldCgndGl0bGUnLCB0aXRsZSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGNoaWxkcmVuKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uY2hpbGRyZW47XG4gICAgICAgIH1cbiAgICAgICAgYWRkSW5wdXQob2JqZWN0LCBrZXksIG9wdF9wYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZElucHV0KG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRNb25pdG9yKG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRNb25pdG9yKG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRGb2xkZXIocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRGb2xkZXIocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRCdXR0b24ocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRCdXR0b24ocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRTZXBhcmF0b3Iob3B0X3BhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkU2VwYXJhdG9yKG9wdF9wYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFRhYihwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZFRhYihwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZChhcGksIG9wdF9pbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkKGFwaSwgb3B0X2luZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmUoYXBpKSB7XG4gICAgICAgICAgICB0aGlzLnJhY2tBcGlfLnJlbW92ZShhcGkpO1xuICAgICAgICB9XG4gICAgICAgIGFkZEJsYWRlKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkQmxhZGUocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJoID0gaGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5vbihldmVudE5hbWUsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIGJoKGV2LmV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBSYWNrTGlrZUNvbnRyb2xsZXIgZXh0ZW5kcyBCbGFkZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgICAgICBibGFkZTogY29uZmlnLmJsYWRlLFxuICAgICAgICAgICAgICAgIHZpZXc6IGNvbmZpZy52aWV3LFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnJhY2tDb250cm9sbGVyLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yYWNrQ29udHJvbGxlciA9IGNvbmZpZy5yYWNrQ29udHJvbGxlcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFBsYWluVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBDbGFzc05hbWUoY29uZmlnLnZpZXdOYW1lKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaW5kSW5wdXRCaW5kaW5nQ29udHJvbGxlcihiY3MsIGIpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiY3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gYmNzW2ldO1xuICAgICAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgSW5wdXRCaW5kaW5nQ29udHJvbGxlciAmJiBiYy5iaW5kaW5nID09PSBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJjO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKGJjcywgYikge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJjcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYmMgPSBiY3NbaV07XG4gICAgICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIgJiYgYmMuYmluZGluZyA9PT0gYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZFZhbHVlQmxhZGVDb250cm9sbGVyKGJjcywgdikge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJjcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYmMgPSBiY3NbaV07XG4gICAgICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBWYWx1ZUJsYWRlQ29udHJvbGxlciAmJiBiYy52YWx1ZSA9PT0gdikge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZFN1YlJhY2soYmMpIHtcbiAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgUmFja0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBiYy5yYWNrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIFJhY2tMaWtlQ29udHJvbGxlcikge1xuICAgICAgICAgICAgcmV0dXJuIGJjLnJhY2tDb250cm9sbGVyLnJhY2s7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRTdWJCbGFkZUNvbnRyb2xsZXJTZXQoYmMpIHtcbiAgICAgICAgY29uc3QgcmFjayA9IGZpbmRTdWJSYWNrKGJjKTtcbiAgICAgICAgcmV0dXJuIHJhY2sgPyByYWNrWydiY1NldF8nXSA6IG51bGw7XG4gICAgfVxuICAgIGNsYXNzIEJsYWRlUmFjayB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGJsYWRlKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB0aGlzLm9uQmxhZGVQb3NpdGlvbnNDaGFuZ2VfID0gdGhpcy5vbkJsYWRlUG9zaXRpb25zQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblNldEFkZF8gPSB0aGlzLm9uU2V0QWRkXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblNldFJlbW92ZV8gPSB0aGlzLm9uU2V0UmVtb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkNoaWxkRGlzcG9zZV8gPSB0aGlzLm9uQ2hpbGREaXNwb3NlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkNoaWxkUG9zaXRpb25zQ2hhbmdlXyA9IHRoaXMub25DaGlsZFBvc2l0aW9uc0NoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGlsZElucHV0Q2hhbmdlXyA9IHRoaXMub25DaGlsZElucHV0Q2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkNoaWxkTW9uaXRvclVwZGF0ZV8gPSB0aGlzLm9uQ2hpbGRNb25pdG9yVXBkYXRlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkNoaWxkVmFsdWVDaGFuZ2VfID0gdGhpcy5vbkNoaWxkVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hpbGRWaWV3UHJvcHNDaGFuZ2VfID0gdGhpcy5vbkNoaWxkVmlld1Byb3BzQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkRlc2NlbmRhbnRMYXlvdXRfID0gdGhpcy5vbkRlc2NlbmRhbnRMYXlvdXRfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uRGVzY2VuZGFudElucHV0Q2hhbmdlXyA9IHRoaXMub25EZXNjZW5kYW50SW5wdXRDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uRGVzY2VuZGFudE1vbml0b3JVcGRhdGVfID1cbiAgICAgICAgICAgICAgICB0aGlzLm9uRGVzY2VuZGFudE1vbml0b3JVcGRhdGVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5ibGFkZV8gPSBibGFkZSAhPT0gbnVsbCAmJiBibGFkZSAhPT0gdm9pZCAwID8gYmxhZGUgOiBudWxsO1xuICAgICAgICAgICAgKF9hID0gdGhpcy5ibGFkZV8pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSgncG9zaXRpb25zJykuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkJsYWRlUG9zaXRpb25zQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLmJjU2V0XyA9IG5ldyBOZXN0ZWRPcmRlcmVkU2V0KGZpbmRTdWJCbGFkZUNvbnRyb2xsZXJTZXQpO1xuICAgICAgICAgICAgdGhpcy5iY1NldF8uZW1pdHRlci5vbignYWRkJywgdGhpcy5vblNldEFkZF8pO1xuICAgICAgICAgICAgdGhpcy5iY1NldF8uZW1pdHRlci5vbigncmVtb3ZlJywgdGhpcy5vblNldFJlbW92ZV8pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBjaGlsZHJlbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJjU2V0Xy5pdGVtcztcbiAgICAgICAgfVxuICAgICAgICBhZGQoYmMsIG9wdF9pbmRleCkge1xuICAgICAgICAgICAgaWYgKGJjLnBhcmVudCkge1xuICAgICAgICAgICAgICAgIGJjLnBhcmVudC5yZW1vdmUoYmMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYmNbJ3BhcmVudF8nXSA9IHRoaXM7XG4gICAgICAgICAgICB0aGlzLmJjU2V0Xy5hZGQoYmMsIG9wdF9pbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlKGJjKSB7XG4gICAgICAgICAgICBiY1sncGFyZW50XyddID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuYmNTZXRfLnJlbW92ZShiYyk7XG4gICAgICAgIH1cbiAgICAgICAgZmluZChjb250cm9sbGVyQ2xhc3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JjZUNhc3QodGhpcy5iY1NldF8uYWxsSXRlbXMoKS5maWx0ZXIoKGJjKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJjIGluc3RhbmNlb2YgY29udHJvbGxlckNsYXNzO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIG9uU2V0QWRkXyhldikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnNfKCk7XG4gICAgICAgICAgICBjb25zdCBpc1Jvb3QgPSBldi50YXJnZXQgPT09IGV2LnJvb3Q7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnYWRkJywge1xuICAgICAgICAgICAgICAgIGJsYWRlQ29udHJvbGxlcjogZXYuaXRlbSxcbiAgICAgICAgICAgICAgICBpbmRleDogZXYuaW5kZXgsXG4gICAgICAgICAgICAgICAgaXNSb290OiBpc1Jvb3QsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWlzUm9vdCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJjID0gZXYuaXRlbTtcbiAgICAgICAgICAgIGJjLnZpZXdQcm9wcy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hpbGRWaWV3UHJvcHNDaGFuZ2VfKTtcbiAgICAgICAgICAgIGJjLmJsYWRlXG4gICAgICAgICAgICAgICAgLnZhbHVlKCdwb3NpdGlvbnMnKVxuICAgICAgICAgICAgICAgIC5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hpbGRQb3NpdGlvbnNDaGFuZ2VfKTtcbiAgICAgICAgICAgIGJjLnZpZXdQcm9wcy5oYW5kbGVEaXNwb3NlKHRoaXMub25DaGlsZERpc3Bvc2VfKTtcbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIElucHV0QmluZGluZ0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBiYy5iaW5kaW5nLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25DaGlsZElucHV0Q2hhbmdlXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChiYyBpbnN0YW5jZW9mIE1vbml0b3JCaW5kaW5nQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIGJjLmJpbmRpbmcuZW1pdHRlci5vbigndXBkYXRlJywgdGhpcy5vbkNoaWxkTW9uaXRvclVwZGF0ZV8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYmMgaW5zdGFuY2VvZiBWYWx1ZUJsYWRlQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIGJjLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25DaGlsZFZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYWNrID0gZmluZFN1YlJhY2soYmMpO1xuICAgICAgICAgICAgICAgIGlmIChyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtaXR0ZXIgPSByYWNrLmVtaXR0ZXI7XG4gICAgICAgICAgICAgICAgICAgIGVtaXR0ZXIub24oJ2xheW91dCcsIHRoaXMub25EZXNjZW5kYW50TGF5b3V0Xyk7XG4gICAgICAgICAgICAgICAgICAgIGVtaXR0ZXIub24oJ2lucHV0Y2hhbmdlJywgdGhpcy5vbkRlc2NlbmRhbnRJbnB1dENoYW5nZV8pO1xuICAgICAgICAgICAgICAgICAgICBlbWl0dGVyLm9uKCdtb25pdG9ydXBkYXRlJywgdGhpcy5vbkRlc2NlbmRhbnRNb25pdG9yVXBkYXRlXyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uU2V0UmVtb3ZlXyhldikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnNfKCk7XG4gICAgICAgICAgICBjb25zdCBpc1Jvb3QgPSBldi50YXJnZXQgPT09IGV2LnJvb3Q7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgncmVtb3ZlJywge1xuICAgICAgICAgICAgICAgIGJsYWRlQ29udHJvbGxlcjogZXYuaXRlbSxcbiAgICAgICAgICAgICAgICBpc1Jvb3Q6IGlzUm9vdCxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghaXNSb290KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYmMgPSBldi5pdGVtO1xuICAgICAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgSW5wdXRCaW5kaW5nQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIGJjLmJpbmRpbmcuZW1pdHRlci5vZmYoJ2NoYW5nZScsIHRoaXMub25DaGlsZElucHV0Q2hhbmdlXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChiYyBpbnN0YW5jZW9mIE1vbml0b3JCaW5kaW5nQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIGJjLmJpbmRpbmcuZW1pdHRlci5vZmYoJ3VwZGF0ZScsIHRoaXMub25DaGlsZE1vbml0b3JVcGRhdGVfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGJjIGluc3RhbmNlb2YgVmFsdWVCbGFkZUNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBiYy52YWx1ZS5lbWl0dGVyLm9mZignY2hhbmdlJywgdGhpcy5vbkNoaWxkVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhY2sgPSBmaW5kU3ViUmFjayhiYyk7XG4gICAgICAgICAgICAgICAgaWYgKHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1pdHRlciA9IHJhY2suZW1pdHRlcjtcbiAgICAgICAgICAgICAgICAgICAgZW1pdHRlci5vZmYoJ2xheW91dCcsIHRoaXMub25EZXNjZW5kYW50TGF5b3V0Xyk7XG4gICAgICAgICAgICAgICAgICAgIGVtaXR0ZXIub2ZmKCdpbnB1dGNoYW5nZScsIHRoaXMub25EZXNjZW5kYW50SW5wdXRDaGFuZ2VfKTtcbiAgICAgICAgICAgICAgICAgICAgZW1pdHRlci5vZmYoJ21vbml0b3J1cGRhdGUnLCB0aGlzLm9uRGVzY2VuZGFudE1vbml0b3JVcGRhdGVfKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlUG9zaXRpb25zXygpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpc2libGVJdGVtcyA9IHRoaXMuYmNTZXRfLml0ZW1zLmZpbHRlcigoYmMpID0+ICFiYy52aWV3UHJvcHMuZ2V0KCdoaWRkZW4nKSk7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFZpc2libGVJdGVtID0gdmlzaWJsZUl0ZW1zWzBdO1xuICAgICAgICAgICAgY29uc3QgbGFzdFZpc2libGVJdGVtID0gdmlzaWJsZUl0ZW1zW3Zpc2libGVJdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIHRoaXMuYmNTZXRfLml0ZW1zLmZvckVhY2goKGJjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHMgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAoYmMgPT09IGZpcnN0VmlzaWJsZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcHMucHVzaCgnZmlyc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmJsYWRlXyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ibGFkZV8uZ2V0KCdwb3NpdGlvbnMnKS5pbmNsdWRlcygndmVyeWZpcnN0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBzLnB1c2goJ3ZlcnlmaXJzdCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChiYyA9PT0gbGFzdFZpc2libGVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHBzLnB1c2goJ2xhc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmJsYWRlXyB8fCB0aGlzLmJsYWRlXy5nZXQoJ3Bvc2l0aW9ucycpLmluY2x1ZGVzKCd2ZXJ5bGFzdCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcy5wdXNoKCd2ZXJ5bGFzdCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJjLmJsYWRlLnNldCgncG9zaXRpb25zJywgcHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGlsZFBvc2l0aW9uc0NoYW5nZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uc18oKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdsYXlvdXQnLCB7XG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGlsZFZpZXdQcm9wc0NoYW5nZV8oX2V2KSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uc18oKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdsYXlvdXQnLCB7XG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGlsZERpc3Bvc2VfKCkge1xuICAgICAgICAgICAgY29uc3QgZGlzcG9zZWRVY3MgPSB0aGlzLmJjU2V0Xy5pdGVtcy5maWx0ZXIoKGJjKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJjLnZpZXdQcm9wcy5nZXQoJ2Rpc3Bvc2VkJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRpc3Bvc2VkVWNzLmZvckVhY2goKGJjKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5iY1NldF8ucmVtb3ZlKGJjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2hpbGRJbnB1dENoYW5nZV8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gZmluZElucHV0QmluZGluZ0NvbnRyb2xsZXIodGhpcy5maW5kKElucHV0QmluZGluZ0NvbnRyb2xsZXIpLCBldi5zZW5kZXIpO1xuICAgICAgICAgICAgaWYgKCFiYykge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdpbnB1dGNoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBibGFkZUNvbnRyb2xsZXI6IGJjLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV2Lm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGlsZE1vbml0b3JVcGRhdGVfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IGZpbmRNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIodGhpcy5maW5kKE1vbml0b3JCaW5kaW5nQ29udHJvbGxlciksIGV2LnNlbmRlcik7XG4gICAgICAgICAgICBpZiAoIWJjKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ21vbml0b3J1cGRhdGUnLCB7XG4gICAgICAgICAgICAgICAgYmxhZGVDb250cm9sbGVyOiBiYyxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkNoaWxkVmFsdWVDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IGZpbmRWYWx1ZUJsYWRlQ29udHJvbGxlcih0aGlzLmZpbmQoVmFsdWVCbGFkZUNvbnRyb2xsZXIpLCBldi5zZW5kZXIpO1xuICAgICAgICAgICAgaWYgKCFiYykge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdpbnB1dGNoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBibGFkZUNvbnRyb2xsZXI6IGJjLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV2Lm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25EZXNjZW5kYW50TGF5b3V0XyhfKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uc18oKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdsYXlvdXQnLCB7XG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25EZXNjZW5kYW50SW5wdXRDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnaW5wdXRjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgYmxhZGVDb250cm9sbGVyOiBldi5ibGFkZUNvbnRyb2xsZXIsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogZXYub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkRlc2NlbmRhbnRNb25pdG9yVXBkYXRlXyhldikge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ21vbml0b3J1cGRhdGUnLCB7XG4gICAgICAgICAgICAgICAgYmxhZGVDb250cm9sbGVyOiBldi5ibGFkZUNvbnRyb2xsZXIsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25CbGFkZVBvc2l0aW9uc0NoYW5nZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uc18oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFJhY2tDb250cm9sbGVyIGV4dGVuZHMgQmxhZGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHN1cGVyKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnKSwgeyB2aWV3OiBuZXcgUGxhaW5WaWV3KGRvYywge1xuICAgICAgICAgICAgICAgICAgICB2aWV3TmFtZTogJ2JyaycsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KSB9KSk7XG4gICAgICAgICAgICB0aGlzLm9uUmFja0FkZF8gPSB0aGlzLm9uUmFja0FkZF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25SYWNrUmVtb3ZlXyA9IHRoaXMub25SYWNrUmVtb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgcmFjayA9IG5ldyBCbGFkZVJhY2soY29uZmlnLnJvb3QgPyB1bmRlZmluZWQgOiBjb25maWcuYmxhZGUpO1xuICAgICAgICAgICAgcmFjay5lbWl0dGVyLm9uKCdhZGQnLCB0aGlzLm9uUmFja0FkZF8pO1xuICAgICAgICAgICAgcmFjay5lbWl0dGVyLm9uKCdyZW1vdmUnLCB0aGlzLm9uUmFja1JlbW92ZV8pO1xuICAgICAgICAgICAgdGhpcy5yYWNrID0gcmFjaztcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzLmhhbmRsZURpc3Bvc2UoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnJhY2suY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmMgPSB0aGlzLnJhY2suY2hpbGRyZW5baV07XG4gICAgICAgICAgICAgICAgICAgIGJjLnZpZXdQcm9wcy5zZXQoJ2Rpc3Bvc2VkJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25SYWNrQWRkXyhldikge1xuICAgICAgICAgICAgaWYgKCFldi5pc1Jvb3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbnNlcnRFbGVtZW50QXQodGhpcy52aWV3LmVsZW1lbnQsIGV2LmJsYWRlQ29udHJvbGxlci52aWV3LmVsZW1lbnQsIGV2LmluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBvblJhY2tSZW1vdmVfKGV2KSB7XG4gICAgICAgICAgICBpZiAoIWV2LmlzUm9vdCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlbW92ZUVsZW1lbnQoZXYuYmxhZGVDb250cm9sbGVyLnZpZXcuZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBibGFkZUNvbnRhaW5lckNsYXNzTmFtZSA9IENsYXNzTmFtZSgnY250Jyk7XG5cbiAgICBjbGFzcyBGb2xkZXJWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuY2xhc3NOYW1lXyA9IENsYXNzTmFtZShjb25maWcudmlld05hbWUgfHwgJ2ZsZCcpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc05hbWVfKCksIGJsYWRlQ29udGFpbmVyQ2xhc3NOYW1lKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuZm9sZGFibGVfID0gY29uZmlnLmZvbGRhYmxlO1xuICAgICAgICAgICAgdGhpcy5mb2xkYWJsZV8uYmluZEV4cGFuZGVkQ2xhc3ModGhpcy5lbGVtZW50LCB0aGlzLmNsYXNzTmFtZV8odW5kZWZpbmVkLCAnZXhwYW5kZWQnKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAodGhpcy5mb2xkYWJsZV8sICdjb21wbGV0ZWQnLCB2YWx1ZVRvQ2xhc3NOYW1lKHRoaXMuZWxlbWVudCwgdGhpcy5jbGFzc05hbWVfKHVuZGVmaW5lZCwgJ2NwbCcpKSk7XG4gICAgICAgICAgICBjb25zdCBidXR0b25FbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICAgICAgYnV0dG9uRWxlbS5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NOYW1lXygnYicpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcChjb25maWcucHJvcHMsICd0aXRsZScsICh0aXRsZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5KHRpdGxlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzTmFtZV8odW5kZWZpbmVkLCAnbm90JykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5jbGFzc05hbWVfKHVuZGVmaW5lZCwgJ25vdCcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKGJ1dHRvbkVsZW0pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGJ1dHRvbkVsZW0pO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50ID0gYnV0dG9uRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRpdGxlRWxlbS5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NOYW1lXygndCcpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZVRvVGV4dENvbnRlbnQoY29uZmlnLnByb3BzLnZhbHVlKCd0aXRsZScpLCB0aXRsZUVsZW0pO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50LmFwcGVuZENoaWxkKHRpdGxlRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnRpdGxlRWxlbWVudCA9IHRpdGxlRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgbWFya0VsZW0uY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzTmFtZV8oJ20nKSk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQuYXBwZW5kQ2hpbGQobWFya0VsZW0pO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyRWxlbSA9IGNvbmZpZy5jb250YWluZXJFbGVtZW50O1xuICAgICAgICAgICAgY29udGFpbmVyRWxlbS5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NOYW1lXygnYycpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChjb250YWluZXJFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyRWxlbWVudCA9IGNvbnRhaW5lckVsZW07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBGb2xkZXJDb250cm9sbGVyIGV4dGVuZHMgUmFja0xpa2VDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IGZvbGRhYmxlID0gRm9sZGFibGUuY3JlYXRlKChfYSA9IGNvbmZpZy5leHBhbmRlZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCByYyA9IG5ldyBSYWNrQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBibGFkZTogY29uZmlnLmJsYWRlLFxuICAgICAgICAgICAgICAgIHJvb3Q6IGNvbmZpZy5yb290LFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc3VwZXIoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjb25maWcpLCB7IHJhY2tDb250cm9sbGVyOiByYywgdmlldzogbmV3IEZvbGRlclZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckVsZW1lbnQ6IHJjLnZpZXcuZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgZm9sZGFibGU6IGZvbGRhYmxlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogY29uZmlnLnByb3BzLFxuICAgICAgICAgICAgICAgICAgICB2aWV3TmFtZTogY29uZmlnLnJvb3QgPyAncm90JyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pIH0pKTtcbiAgICAgICAgICAgIHRoaXMub25UaXRsZUNsaWNrXyA9IHRoaXMub25UaXRsZUNsaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMuZm9sZGFibGUgPSBmb2xkYWJsZTtcbiAgICAgICAgICAgIGJpbmRGb2xkYWJsZSh0aGlzLmZvbGRhYmxlLCB0aGlzLnZpZXcuY29udGFpbmVyRWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnJhY2tDb250cm9sbGVyLnJhY2suZW1pdHRlci5vbignYWRkJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9sZGFibGUuY2xlYW5VcFRyYW5zaXRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yYWNrQ29udHJvbGxlci5yYWNrLmVtaXR0ZXIub24oJ3JlbW92ZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvbGRhYmxlLmNsZWFuVXBUcmFuc2l0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy5idXR0b25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vblRpdGxlQ2xpY2tfKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZG9jdW1lbnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52aWV3LmVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICAgICAgfVxuICAgICAgICBvblRpdGxlQ2xpY2tfKCkge1xuICAgICAgICAgICAgdGhpcy5mb2xkYWJsZS5zZXQoJ2V4cGFuZGVkJywgIXRoaXMuZm9sZGFibGUuZ2V0KCdleHBhbmRlZCcpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IEZvbGRlckJsYWRlUGx1Z2luID0ge1xuICAgICAgICBpZDogJ2ZvbGRlcicsXG4gICAgICAgIHR5cGU6ICdibGFkZScsXG4gICAgICAgIGFjY2VwdChwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IHAucmVxdWlyZWQuc3RyaW5nLFxuICAgICAgICAgICAgICAgIHZpZXc6IHAucmVxdWlyZWQuY29uc3RhbnQoJ2ZvbGRlcicpLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBwLm9wdGlvbmFsLmJvb2xlYW4sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyB7IHBhcmFtczogcmVzdWx0IH0gOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyKGFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRm9sZGVyQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGFyZ3MuYmxhZGUsXG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGFyZ3MucGFyYW1zLmV4cGFuZGVkLFxuICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGFyZ3MucGFyYW1zLnRpdGxlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgYXBpKGFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlciBpbnN0YW5jZW9mIEZvbGRlckNvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZvbGRlckFwaShhcmdzLmNvbnRyb2xsZXIsIGFyZ3MucG9vbCk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNsYXNzIExhYmVsZWRWYWx1ZUNvbnRyb2xsZXIgZXh0ZW5kcyBWYWx1ZUJsYWRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3UHJvcHMgPSBjb25maWcudmFsdWVDb250cm9sbGVyLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHN1cGVyKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnKSwgeyB2YWx1ZTogY29uZmlnLnZhbHVlQ29udHJvbGxlci52YWx1ZSwgdmlldzogbmV3IExhYmVsVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy5wcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiB2aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSksIHZpZXdQcm9wczogdmlld1Byb3BzIH0pKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ29udHJvbGxlciA9IGNvbmZpZy52YWx1ZUNvbnRyb2xsZXI7XG4gICAgICAgICAgICB0aGlzLnZpZXcudmFsdWVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMudmFsdWVDb250cm9sbGVyLnZpZXcuZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBTZXBhcmF0b3JBcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJG4gPSBDbGFzc05hbWUoJ3NwcicpO1xuICAgIGNsYXNzIFNlcGFyYXRvclZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJG4oKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgaHJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2hyJyk7XG4gICAgICAgICAgICBockVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbigncicpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChockVsZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgU2VwYXJhdG9yQ29udHJvbGxlciBleHRlbmRzIEJsYWRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBzdXBlcihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZyksIHsgdmlldzogbmV3IFNlcGFyYXRvclZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KSB9KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBTZXBhcmF0b3JCbGFkZVBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdzZXBhcmF0b3InLFxuICAgICAgICB0eXBlOiAnYmxhZGUnLFxuICAgICAgICBhY2NlcHQocGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIHZpZXc6IHAucmVxdWlyZWQuY29uc3RhbnQoJ3NlcGFyYXRvcicpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ID8geyBwYXJhbXM6IHJlc3VsdCB9IDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcihhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNlcGFyYXRvckNvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGJsYWRlOiBhcmdzLmJsYWRlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgYXBpKGFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlciBpbnN0YW5jZW9mIFNlcGFyYXRvckNvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNlcGFyYXRvckFwaShhcmdzLmNvbnRyb2xsZXIpO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBjbGFzc05hbWUkbSA9IENsYXNzTmFtZSgnJyk7XG4gICAgZnVuY3Rpb24gdmFsdWVUb01vZGlmaWVyKGVsZW0sIG1vZGlmaWVyKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZVRvQ2xhc3NOYW1lKGVsZW0sIGNsYXNzTmFtZSRtKHVuZGVmaW5lZCwgbW9kaWZpZXIpKTtcbiAgICB9XG4gICAgY2xhc3MgVmlld1Byb3BzIGV4dGVuZHMgVmFsdWVNYXAge1xuICAgICAgICBjb25zdHJ1Y3Rvcih2YWx1ZU1hcCkge1xuICAgICAgICAgICAgc3VwZXIodmFsdWVNYXApO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBjcmVhdGUob3B0X2luaXRpYWxWYWx1ZSkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9IG9wdF9pbml0aWFsVmFsdWUgIT09IG51bGwgJiYgb3B0X2luaXRpYWxWYWx1ZSAhPT0gdm9pZCAwID8gb3B0X2luaXRpYWxWYWx1ZSA6IHt9O1xuICAgICAgICAgICAgY29uc3QgY29yZU9iaiA9IHtcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogKF9hID0gaW5pdGlhbFZhbHVlLmRpc2FibGVkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBkaXNwb3NlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiAoX2IgPSBpbml0aWFsVmFsdWUuaGlkZGVuKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBmYWxzZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBjb3JlID0gVmFsdWVNYXAuY3JlYXRlQ29yZShjb3JlT2JqKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmlld1Byb3BzKGNvcmUpO1xuICAgICAgICB9XG4gICAgICAgIGJpbmRDbGFzc01vZGlmaWVycyhlbGVtKSB7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAodGhpcywgJ2Rpc2FibGVkJywgdmFsdWVUb01vZGlmaWVyKGVsZW0sICdkaXNhYmxlZCcpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcCh0aGlzLCAnaGlkZGVuJywgdmFsdWVUb01vZGlmaWVyKGVsZW0sICdoaWRkZW4nKSk7XG4gICAgICAgIH1cbiAgICAgICAgYmluZERpc2FibGVkKHRhcmdldCkge1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKHRoaXMsICdkaXNhYmxlZCcsIChkaXNhYmxlZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRhcmdldC5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYmluZFRhYkluZGV4KGVsZW0pIHtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcCh0aGlzLCAnZGlzYWJsZWQnLCAoZGlzYWJsZWQpID0+IHtcbiAgICAgICAgICAgICAgICBlbGVtLnRhYkluZGV4ID0gZGlzYWJsZWQgPyAtMSA6IDA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVEaXNwb3NlKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlKCdkaXNwb3NlZCcpLmVtaXR0ZXIub24oJ2NoYW5nZScsIChkaXNwb3NlZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkaXNwb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJGwgPSBDbGFzc05hbWUoJ3RiaScpO1xuICAgIGNsYXNzIFRhYkl0ZW1WaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRsKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcChjb25maWcucHJvcHMsICdzZWxlY3RlZCcsIChzZWxlY3RlZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbCh1bmRlZmluZWQsICdzZWwnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUkbCh1bmRlZmluZWQsICdzZWwnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBidXR0b25FbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICAgICAgYnV0dG9uRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRsKCdiJykpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQoYnV0dG9uRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoYnV0dG9uRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQgPSBidXR0b25FbGVtO1xuICAgICAgICAgICAgY29uc3QgdGl0bGVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGl0bGVFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGwoJ3QnKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVUb1RleHRDb250ZW50KGNvbmZpZy5wcm9wcy52YWx1ZSgndGl0bGUnKSwgdGl0bGVFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudC5hcHBlbmRDaGlsZCh0aXRsZUVsZW0pO1xuICAgICAgICAgICAgdGhpcy50aXRsZUVsZW1lbnQgPSB0aXRsZUVsZW07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBUYWJJdGVtQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5vbkNsaWNrXyA9IHRoaXMub25DbGlja18uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgVGFiSXRlbVZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy5wcm9wcyxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy5idXR0b25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsaWNrXyk7XG4gICAgICAgIH1cbiAgICAgICAgb25DbGlja18oKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnY2xpY2snLCB7XG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBUYWJQYWdlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uSXRlbUNsaWNrXyA9IHRoaXMub25JdGVtQ2xpY2tfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmljXyA9IG5ldyBUYWJJdGVtQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBwcm9wczogY29uZmlnLml0ZW1Qcm9wcyxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IFZpZXdQcm9wcy5jcmVhdGUoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5pY18uZW1pdHRlci5vbignY2xpY2snLCB0aGlzLm9uSXRlbUNsaWNrXyk7XG4gICAgICAgICAgICB0aGlzLmNjXyA9IG5ldyBSYWNrQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBibGFkZTogY3JlYXRlQmxhZGUoKSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IFZpZXdQcm9wcy5jcmVhdGUoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcCh0aGlzLnByb3BzLCAnc2VsZWN0ZWQnLCAoc2VsZWN0ZWQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1Db250cm9sbGVyLnByb3BzLnNldCgnc2VsZWN0ZWQnLCBzZWxlY3RlZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZW50Q29udHJvbGxlci52aWV3UHJvcHMuc2V0KCdoaWRkZW4nLCAhc2VsZWN0ZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGl0ZW1Db250cm9sbGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWNfO1xuICAgICAgICB9XG4gICAgICAgIGdldCBjb250ZW50Q29udHJvbGxlcigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNjXztcbiAgICAgICAgfVxuICAgICAgICBvbkl0ZW1DbGlja18oKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLnNldCgnc2VsZWN0ZWQnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFRhYlBhZ2VBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyLCBjb250ZW50UmFja0FwaSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7XG4gICAgICAgICAgICB0aGlzLnJhY2tBcGlfID0gY29udGVudFJhY2tBcGk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHRpdGxlKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuY29udHJvbGxlcl8uaXRlbUNvbnRyb2xsZXIucHJvcHMuZ2V0KCd0aXRsZScpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgICAgfVxuICAgICAgICBzZXQgdGl0bGUodGl0bGUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8uaXRlbUNvbnRyb2xsZXIucHJvcHMuc2V0KCd0aXRsZScsIHRpdGxlKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5wcm9wcy5nZXQoJ3NlbGVjdGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHNlbGVjdGVkKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLnNldCgnc2VsZWN0ZWQnLCBzZWxlY3RlZCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGNoaWxkcmVuKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uY2hpbGRyZW47XG4gICAgICAgIH1cbiAgICAgICAgYWRkQnV0dG9uKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkQnV0dG9uKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkRm9sZGVyKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkRm9sZGVyKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkU2VwYXJhdG9yKG9wdF9wYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZFNlcGFyYXRvcihvcHRfcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRUYWIocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRUYWIocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGQoYXBpLCBvcHRfaW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMucmFja0FwaV8uYWRkKGFwaSwgb3B0X2luZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmUoYXBpKSB7XG4gICAgICAgICAgICB0aGlzLnJhY2tBcGlfLnJlbW92ZShhcGkpO1xuICAgICAgICB9XG4gICAgICAgIGFkZElucHV0KG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRJbnB1dChvYmplY3QsIGtleSwgb3B0X3BhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkTW9uaXRvcihvYmplY3QsIGtleSwgb3B0X3BhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkTW9uaXRvcihvYmplY3QsIGtleSwgb3B0X3BhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkQmxhZGUocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRCbGFkZShwYXJhbXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgVGFiQXBpIGV4dGVuZHMgUmFja0xpa2VBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyLCBwb29sKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyLCBuZXcgUmFja0FwaShjb250cm9sbGVyLnJhY2tDb250cm9sbGVyLCBwb29sKSk7XG4gICAgICAgICAgICB0aGlzLm9uUGFnZUFkZF8gPSB0aGlzLm9uUGFnZUFkZF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25QYWdlUmVtb3ZlXyA9IHRoaXMub25QYWdlUmVtb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXyA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLnBhZ2VBcGlNYXBfID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgdGhpcy5yYWNrQXBpXy5vbignY2hhbmdlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBldixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yYWNrQXBpXy5vbigndXBkYXRlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCd1cGRhdGUnLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBldixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wYWdlU2V0LmVtaXR0ZXIub24oJ2FkZCcsIHRoaXMub25QYWdlQWRkXyk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnBhZ2VTZXQuZW1pdHRlci5vbigncmVtb3ZlJywgdGhpcy5vblBhZ2VSZW1vdmVfKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucGFnZVNldC5pdGVtcy5mb3JFYWNoKChwYykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VXBQYWdlQXBpXyhwYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgcGFnZXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5wYWdlU2V0Lml0ZW1zLm1hcCgocGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcGkgPSB0aGlzLnBhZ2VBcGlNYXBfLmdldChwYyk7XG4gICAgICAgICAgICAgICAgaWYgKCFhcGkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYXBpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkUGFnZShwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuY29udHJvbGxlcl8udmlldy5lbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBwYyA9IG5ldyBUYWJQYWdlQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBpdGVtUHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwYXJhbXMudGl0bGUsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8uYWRkKHBjLCBwYXJhbXMuaW5kZXgpO1xuICAgICAgICAgICAgY29uc3QgYXBpID0gdGhpcy5wYWdlQXBpTWFwXy5nZXQocGMpO1xuICAgICAgICAgICAgaWYgKCFhcGkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXBpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZVBhZ2UoaW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucmVtb3ZlKGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJoID0gaGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5vbihldmVudE5hbWUsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIGJoKGV2LmV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VXBQYWdlQXBpXyhwYykge1xuICAgICAgICAgICAgY29uc3QgcmFja0FwaSA9IHRoaXMucmFja0FwaV9bJ2FwaVNldF8nXS5maW5kKChhcGkpID0+IGFwaS5jb250cm9sbGVyXyA9PT0gcGMuY29udGVudENvbnRyb2xsZXIpO1xuICAgICAgICAgICAgaWYgKCFyYWNrQXBpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXBpID0gbmV3IFRhYlBhZ2VBcGkocGMsIHJhY2tBcGkpO1xuICAgICAgICAgICAgdGhpcy5wYWdlQXBpTWFwXy5zZXQocGMsIGFwaSk7XG4gICAgICAgIH1cbiAgICAgICAgb25QYWdlQWRkXyhldikge1xuICAgICAgICAgICAgdGhpcy5zZXRVcFBhZ2VBcGlfKGV2Lml0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUGFnZVJlbW92ZV8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IHRoaXMucGFnZUFwaU1hcF8uZ2V0KGV2Lml0ZW0pO1xuICAgICAgICAgICAgaWYgKCFhcGkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhZ2VBcGlNYXBfLmRlbGV0ZShldi5pdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRrID0gQ2xhc3NOYW1lKCd0YWInKTtcbiAgICBjbGFzcyBUYWJWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRrKCksIGJsYWRlQ29udGFpbmVyQ2xhc3NOYW1lKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZShjb25maWcuZW1wdHksIHZhbHVlVG9DbGFzc05hbWUodGhpcy5lbGVtZW50LCBjbGFzc05hbWUkayh1bmRlZmluZWQsICdub3AnKSkpO1xuICAgICAgICAgICAgY29uc3QgaXRlbXNFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgaXRlbXNFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGsoJ2knKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaXRlbXNFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuaXRlbXNFbGVtZW50ID0gaXRlbXNFbGVtO1xuICAgICAgICAgICAgY29uc3QgY29udGVudHNFbGVtID0gY29uZmlnLmNvbnRlbnRzRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnRlbnRzRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRrKCdjJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGNvbnRlbnRzRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRzRWxlbWVudCA9IGNvbnRlbnRzRWxlbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFRhYkNvbnRyb2xsZXIgZXh0ZW5kcyBSYWNrTGlrZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgY29uc3QgY3IgPSBuZXcgUmFja0NvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGNvbmZpZy5ibGFkZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGVtcHR5ID0gY3JlYXRlVmFsdWUodHJ1ZSk7XG4gICAgICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGNvbmZpZy5ibGFkZSxcbiAgICAgICAgICAgICAgICByYWNrQ29udHJvbGxlcjogY3IsXG4gICAgICAgICAgICAgICAgdmlldzogbmV3IFRhYlZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzRWxlbWVudDogY3Iudmlldy5lbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICBlbXB0eTogZW1wdHksXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5vblBhZ2VBZGRfID0gdGhpcy5vblBhZ2VBZGRfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUGFnZVJlbW92ZV8gPSB0aGlzLm9uUGFnZVJlbW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25QYWdlU2VsZWN0ZWRDaGFuZ2VfID0gdGhpcy5vblBhZ2VTZWxlY3RlZENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucGFnZVNldF8gPSBuZXcgTmVzdGVkT3JkZXJlZFNldCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgIHRoaXMucGFnZVNldF8uZW1pdHRlci5vbignYWRkJywgdGhpcy5vblBhZ2VBZGRfKTtcbiAgICAgICAgICAgIHRoaXMucGFnZVNldF8uZW1pdHRlci5vbigncmVtb3ZlJywgdGhpcy5vblBhZ2VSZW1vdmVfKTtcbiAgICAgICAgICAgIHRoaXMuZW1wdHlfID0gZW1wdHk7XG4gICAgICAgICAgICB0aGlzLmFwcGx5UGFnZXNfKCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHBhZ2VTZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYWdlU2V0XztcbiAgICAgICAgfVxuICAgICAgICBhZGQocGMsIG9wdF9pbmRleCkge1xuICAgICAgICAgICAgdGhpcy5wYWdlU2V0Xy5hZGQocGMsIG9wdF9pbmRleCAhPT0gbnVsbCAmJiBvcHRfaW5kZXggIT09IHZvaWQgMCA/IG9wdF9pbmRleCA6IHRoaXMucGFnZVNldF8uaXRlbXMubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmUoaW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZVNldF8ucmVtb3ZlKHRoaXMucGFnZVNldF8uaXRlbXNbaW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgICBhcHBseVBhZ2VzXygpIHtcbiAgICAgICAgICAgIHRoaXMua2VlcFNlbGVjdGlvbl8oKTtcbiAgICAgICAgICAgIHRoaXMuZW1wdHlfLnJhd1ZhbHVlID0gdGhpcy5wYWdlU2V0Xy5pdGVtcy5sZW5ndGggPT09IDA7XG4gICAgICAgIH1cbiAgICAgICAgb25QYWdlQWRkXyhldikge1xuICAgICAgICAgICAgY29uc3QgcGMgPSBldi5pdGVtO1xuICAgICAgICAgICAgaW5zZXJ0RWxlbWVudEF0KHRoaXMudmlldy5pdGVtc0VsZW1lbnQsIHBjLml0ZW1Db250cm9sbGVyLnZpZXcuZWxlbWVudCwgZXYuaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5yYWNrQ29udHJvbGxlci5yYWNrLmFkZChwYy5jb250ZW50Q29udHJvbGxlciwgZXYuaW5kZXgpO1xuICAgICAgICAgICAgcGMucHJvcHMudmFsdWUoJ3NlbGVjdGVkJykuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblBhZ2VTZWxlY3RlZENoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy5hcHBseVBhZ2VzXygpO1xuICAgICAgICB9XG4gICAgICAgIG9uUGFnZVJlbW92ZV8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHBjID0gZXYuaXRlbTtcbiAgICAgICAgICAgIHJlbW92ZUVsZW1lbnQocGMuaXRlbUNvbnRyb2xsZXIudmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMucmFja0NvbnRyb2xsZXIucmFjay5yZW1vdmUocGMuY29udGVudENvbnRyb2xsZXIpO1xuICAgICAgICAgICAgcGMucHJvcHNcbiAgICAgICAgICAgICAgICAudmFsdWUoJ3NlbGVjdGVkJylcbiAgICAgICAgICAgICAgICAuZW1pdHRlci5vZmYoJ2NoYW5nZScsIHRoaXMub25QYWdlU2VsZWN0ZWRDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlQYWdlc18oKTtcbiAgICAgICAgfVxuICAgICAgICBrZWVwU2VsZWN0aW9uXygpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2VTZXRfLml0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0U2VsSW5kZXggPSB0aGlzLnBhZ2VTZXRfLml0ZW1zLmZpbmRJbmRleCgocGMpID0+IHBjLnByb3BzLmdldCgnc2VsZWN0ZWQnKSk7XG4gICAgICAgICAgICBpZiAoZmlyc3RTZWxJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VTZXRfLml0ZW1zLmZvckVhY2goKHBjLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBjLnByb3BzLnNldCgnc2VsZWN0ZWQnLCBpID09PSAwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZVNldF8uaXRlbXMuZm9yRWFjaCgocGMsIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGMucHJvcHMuc2V0KCdzZWxlY3RlZCcsIGkgPT09IGZpcnN0U2VsSW5kZXgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uUGFnZVNlbGVjdGVkQ2hhbmdlXyhldikge1xuICAgICAgICAgICAgaWYgKGV2LnJhd1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBhZ2VTZXRfLml0ZW1zLmZpbmRJbmRleCgocGMpID0+IHBjLnByb3BzLnZhbHVlKCdzZWxlY3RlZCcpID09PSBldi5zZW5kZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZVNldF8uaXRlbXMuZm9yRWFjaCgocGMsIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGMucHJvcHMuc2V0KCdzZWxlY3RlZCcsIGkgPT09IGluZGV4KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMua2VlcFNlbGVjdGlvbl8oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IFRhYkJsYWRlUGx1Z2luID0ge1xuICAgICAgICBpZDogJ3RhYicsXG4gICAgICAgIHR5cGU6ICdibGFkZScsXG4gICAgICAgIGFjY2VwdChwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgcGFnZXM6IHAucmVxdWlyZWQuYXJyYXkocC5yZXF1aXJlZC5vYmplY3QoeyB0aXRsZTogcC5yZXF1aXJlZC5zdHJpbmcgfSkpLFxuICAgICAgICAgICAgICAgIHZpZXc6IHAucmVxdWlyZWQuY29uc3RhbnQoJ3RhYicpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQucGFnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBwYXJhbXM6IHJlc3VsdCB9O1xuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyKGFyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBuZXcgVGFiQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGFyZ3MuYmxhZGUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXJncy5wYXJhbXMucGFnZXMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBjID0gbmV3IFRhYlBhZ2VDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbVByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjLmFkZChwYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICB9LFxuICAgICAgICBhcGkoYXJncykge1xuICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyIGluc3RhbmNlb2YgVGFiQ29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgVGFiQXBpKGFyZ3MuY29udHJvbGxlciwgYXJncy5wb29sKTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlQmxhZGVDb250cm9sbGVyKHBsdWdpbiwgYXJncykge1xuICAgICAgICBjb25zdCBhYyA9IHBsdWdpbi5hY2NlcHQoYXJncy5wYXJhbXMpO1xuICAgICAgICBpZiAoIWFjKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXNhYmxlZCA9IFBhcmFtc1BhcnNlcnMub3B0aW9uYWwuYm9vbGVhbihhcmdzLnBhcmFtc1snZGlzYWJsZWQnXSkudmFsdWU7XG4gICAgICAgIGNvbnN0IGhpZGRlbiA9IFBhcmFtc1BhcnNlcnMub3B0aW9uYWwuYm9vbGVhbihhcmdzLnBhcmFtc1snaGlkZGVuJ10pLnZhbHVlO1xuICAgICAgICByZXR1cm4gcGx1Z2luLmNvbnRyb2xsZXIoe1xuICAgICAgICAgICAgYmxhZGU6IGNyZWF0ZUJsYWRlKCksXG4gICAgICAgICAgICBkb2N1bWVudDogYXJncy5kb2N1bWVudCxcbiAgICAgICAgICAgIHBhcmFtczogZm9yY2VDYXN0KE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYWMucGFyYW1zKSwgeyBkaXNhYmxlZDogZGlzYWJsZWQsIGhpZGRlbjogaGlkZGVuIH0pKSxcbiAgICAgICAgICAgIHZpZXdQcm9wczogVmlld1Byb3BzLmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICAgICAgICAgIGhpZGRlbjogaGlkZGVuLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsYXNzIE1hbnVhbFRpY2tlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBkaXNwb3NlKCkgeyB9XG4gICAgICAgIHRpY2soKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCd0aWNrJywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgSW50ZXJ2YWxUaWNrZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGludGVydmFsKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkXyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50aW1lcklkXyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLm9uVGlja18gPSB0aGlzLm9uVGlja18uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZG9jXyA9IGRvYztcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLmludGVydmFsXyA9IGludGVydmFsO1xuICAgICAgICAgICAgdGhpcy5zZXRUaW1lcl8oKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZF87XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGRpc2FibGVkKGluYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkXyA9IGluYWN0aXZlO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWRfKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhclRpbWVyXygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUaW1lcl8oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkaXNwb3NlKCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhclRpbWVyXygpO1xuICAgICAgICB9XG4gICAgICAgIGNsZWFyVGltZXJfKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGltZXJJZF8gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB3aW4gPSB0aGlzLmRvY18uZGVmYXVsdFZpZXc7XG4gICAgICAgICAgICBpZiAod2luKSB7XG4gICAgICAgICAgICAgICAgd2luLmNsZWFySW50ZXJ2YWwodGhpcy50aW1lcklkXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRpbWVySWRfID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBzZXRUaW1lcl8oKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyVGltZXJfKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnRlcnZhbF8gPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHdpbiA9IHRoaXMuZG9jXy5kZWZhdWx0VmlldztcbiAgICAgICAgICAgIGlmICh3aW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWVySWRfID0gd2luLnNldEludGVydmFsKHRoaXMub25UaWNrXywgdGhpcy5pbnRlcnZhbF8pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uVGlja18oKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZF8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgndGljaycsIHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIENvbXBvc2l0ZUNvbnN0cmFpbnQge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25zdHJhaW50cykge1xuICAgICAgICAgICAgdGhpcy5jb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cmFpbih2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RyYWludHMucmVkdWNlKChyZXN1bHQsIGMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYy5jb25zdHJhaW4ocmVzdWx0KTtcbiAgICAgICAgICAgIH0sIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kQ29uc3RyYWludChjLCBjb25zdHJhaW50Q2xhc3MpIHtcbiAgICAgICAgaWYgKGMgaW5zdGFuY2VvZiBjb25zdHJhaW50Q2xhc3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjIGluc3RhbmNlb2YgQ29tcG9zaXRlQ29uc3RyYWludCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYy5jb25zdHJhaW50cy5yZWR1Y2UoKHRtcFJlc3VsdCwgc2MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodG1wUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0bXBSZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzYyBpbnN0YW5jZW9mIGNvbnN0cmFpbnRDbGFzcyA/IHNjIDogbnVsbDtcbiAgICAgICAgICAgIH0sIG51bGwpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY2xhc3MgTGlzdENvbnN0cmFpbnQge1xuICAgICAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cmFpbih2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgICAgIGlmIChvcHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSBvcHRzLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLnZhbHVlID09PSB2YWx1ZTtcbiAgICAgICAgICAgIH0pLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlZCA/IHZhbHVlIDogb3B0c1swXS52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFJhbmdlQ29uc3RyYWludCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5tYXhWYWx1ZSA9IGNvbmZpZy5tYXg7XG4gICAgICAgICAgICB0aGlzLm1pblZhbHVlID0gY29uZmlnLm1pbjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdHJhaW4odmFsdWUpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmICghaXNFbXB0eSh0aGlzLm1pblZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IE1hdGgubWF4KHJlc3VsdCwgdGhpcy5taW5WYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkodGhpcy5tYXhWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBNYXRoLm1pbihyZXN1bHQsIHRoaXMubWF4VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFN0ZXBDb25zdHJhaW50IHtcbiAgICAgICAgY29uc3RydWN0b3Ioc3RlcCkge1xuICAgICAgICAgICAgdGhpcy5zdGVwID0gc3RlcDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdHJhaW4odmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHIgPSB2YWx1ZSA8IDBcbiAgICAgICAgICAgICAgICA/IC1NYXRoLnJvdW5kKC12YWx1ZSAvIHRoaXMuc3RlcClcbiAgICAgICAgICAgICAgICA6IE1hdGgucm91bmQodmFsdWUgLyB0aGlzLnN0ZXApO1xuICAgICAgICAgICAgcmV0dXJuIHIgKiB0aGlzLnN0ZXA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkaiA9IENsYXNzTmFtZSgnbHN0Jyk7XG4gICAgY2xhc3MgTGlzdFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlXyA9IHRoaXMub25WYWx1ZUNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHNfID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGooKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTtcbiAgICAgICAgICAgIHNlbGVjdEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkaigncycpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcCh0aGlzLnByb3BzXywgJ29wdGlvbnMnLCAob3B0cykgPT4ge1xuICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkRWxlbWVudHMoc2VsZWN0RWxlbSk7XG4gICAgICAgICAgICAgICAgb3B0cy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25FbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25FbGVtLmRhdGFzZXQuaW5kZXggPSBTdHJpbmcoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25FbGVtLnRleHRDb250ZW50ID0gaXRlbS50ZXh0O1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25FbGVtLnZhbHVlID0gU3RyaW5nKGl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtLmFwcGVuZENoaWxkKG9wdGlvbkVsZW0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmREaXNhYmxlZChzZWxlY3RFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChzZWxlY3RFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RWxlbWVudCA9IHNlbGVjdEVsZW07XG4gICAgICAgICAgICBjb25zdCBtYXJrRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIG1hcmtFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGooJ20nKSk7XG4gICAgICAgICAgICBtYXJrRWxlbS5hcHBlbmRDaGlsZChjcmVhdGVTdmdJY29uRWxlbWVudChkb2MsICdkcm9wZG93bicpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChtYXJrRWxlbSk7XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlXyA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEVsZW1lbnQudmFsdWUgPSBTdHJpbmcodGhpcy52YWx1ZV8ucmF3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBMaXN0Q29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0Q2hhbmdlXyA9IHRoaXMub25TZWxlY3RDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnByb3BzID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBMaXN0Vmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBwcm9wczogdGhpcy5wcm9wcyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuc2VsZWN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLm9uU2VsZWN0Q2hhbmdlXyk7XG4gICAgICAgIH1cbiAgICAgICAgb25TZWxlY3RDaGFuZ2VfKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdEVsZW0gPSBmb3JjZUNhc3QoZS5jdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgICAgIGNvbnN0IG9wdEVsZW0gPSBzZWxlY3RFbGVtLnNlbGVjdGVkT3B0aW9ucy5pdGVtKDApO1xuICAgICAgICAgICAgaWYgKCFvcHRFbGVtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gTnVtYmVyKG9wdEVsZW0uZGF0YXNldC5pbmRleCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlID0gdGhpcy5wcm9wcy5nZXQoJ29wdGlvbnMnKVtpdGVtSW5kZXhdLnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJGkgPSBDbGFzc05hbWUoJ3BvcCcpO1xuICAgIGNsYXNzIFBvcHVwVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkaSgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBiaW5kVmFsdWUoY29uZmlnLnNob3dzLCB2YWx1ZVRvQ2xhc3NOYW1lKHRoaXMuZWxlbWVudCwgY2xhc3NOYW1lJGkodW5kZWZpbmVkLCAndicpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBQb3B1cENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5zaG93cyA9IGNyZWF0ZVZhbHVlKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBQb3B1cFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgc2hvd3M6IHRoaXMuc2hvd3MsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJGggPSBDbGFzc05hbWUoJ3R4dCcpO1xuICAgIGNsYXNzIFRleHRWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VfID0gdGhpcy5vbkNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRoKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMucHJvcHNfID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy5wcm9wc18uZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoYW5nZV8pO1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICBpbnB1dEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkaCgnaScpKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS50eXBlID0gJ3RleHQnO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQoaW5wdXRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChpbnB1dEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQgPSBpbnB1dEVsZW07XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZV8gPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICByZWZyZXNoKCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gdGhpcy5wcm9wc18uZ2V0KCdmb3JtYXR0ZXInKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlID0gZm9ybWF0dGVyKHRoaXMudmFsdWVfLnJhd1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBvbkNoYW5nZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFRleHRDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25JbnB1dENoYW5nZV8gPSB0aGlzLm9uSW5wdXRDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnBhcnNlcl8gPSBjb25maWcucGFyc2VyO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgVGV4dFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy5wcm9wcyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMub25JbnB1dENoYW5nZV8pO1xuICAgICAgICB9XG4gICAgICAgIG9uSW5wdXRDaGFuZ2VfKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0RWxlbSA9IGZvcmNlQ2FzdChlLmN1cnJlbnRUYXJnZXQpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dEVsZW0udmFsdWU7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHRoaXMucGFyc2VyXyh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkocGFyc2VkVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZSA9IHBhcnNlZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52aWV3LnJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJvb2xUb1N0cmluZyh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYm9vbEZyb21Vbmtub3duKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhIXZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBCb29sZWFuRm9ybWF0dGVyKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBib29sVG9TdHJpbmcodmFsdWUpO1xuICAgIH1cblxuICAgIGNsYXNzIE51bWJlckxpdGVyYWxOb2RlIHtcbiAgICAgICAgY29uc3RydWN0b3IodGV4dCkge1xuICAgICAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICAgICAgfVxuICAgICAgICBldmFsdWF0ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGhpcy50ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICB0b1N0cmluZygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgQklOQVJZX09QRVJBVElPTl9NQVAgPSB7XG4gICAgICAgICcqKic6ICh2MSwgdjIpID0+IE1hdGgucG93KHYxLCB2MiksXG4gICAgICAgICcqJzogKHYxLCB2MikgPT4gdjEgKiB2MixcbiAgICAgICAgJy8nOiAodjEsIHYyKSA9PiB2MSAvIHYyLFxuICAgICAgICAnJSc6ICh2MSwgdjIpID0+IHYxICUgdjIsXG4gICAgICAgICcrJzogKHYxLCB2MikgPT4gdjEgKyB2MixcbiAgICAgICAgJy0nOiAodjEsIHYyKSA9PiB2MSAtIHYyLFxuICAgICAgICAnPDwnOiAodjEsIHYyKSA9PiB2MSA8PCB2MixcbiAgICAgICAgJz4+JzogKHYxLCB2MikgPT4gdjEgPj4gdjIsXG4gICAgICAgICc+Pj4nOiAodjEsIHYyKSA9PiB2MSA+Pj4gdjIsXG4gICAgICAgICcmJzogKHYxLCB2MikgPT4gdjEgJiB2MixcbiAgICAgICAgJ14nOiAodjEsIHYyKSA9PiB2MSBeIHYyLFxuICAgICAgICAnfCc6ICh2MSwgdjIpID0+IHYxIHwgdjIsXG4gICAgfTtcbiAgICBjbGFzcyBCaW5hcnlPcGVyYXRpb25Ob2RlIHtcbiAgICAgICAgY29uc3RydWN0b3Iob3BlcmF0b3IsIGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICAgICAgICAgICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICAgICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGV2YWx1YXRlKCkge1xuICAgICAgICAgICAgY29uc3Qgb3AgPSBCSU5BUllfT1BFUkFUSU9OX01BUFt0aGlzLm9wZXJhdG9yXTtcbiAgICAgICAgICAgIGlmICghb3ApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgYmluYXJ5IG9wZXJhdG9yOiAnJHt0aGlzLm9wZXJhdG9yfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9wKHRoaXMubGVmdC5ldmFsdWF0ZSgpLCB0aGlzLnJpZ2h0LmV2YWx1YXRlKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAnYignLFxuICAgICAgICAgICAgICAgIHRoaXMubGVmdC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHRoaXMub3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICcpJyxcbiAgICAgICAgICAgIF0uam9pbignICcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IFVOQVJZX09QRVJBVElPTl9NQVAgPSB7XG4gICAgICAgICcrJzogKHYpID0+IHYsXG4gICAgICAgICctJzogKHYpID0+IC12LFxuICAgICAgICAnfic6ICh2KSA9PiB+dixcbiAgICB9O1xuICAgIGNsYXNzIFVuYXJ5T3BlcmF0aW9uTm9kZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKG9wZXJhdG9yLCBleHByKSB7XG4gICAgICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByO1xuICAgICAgICB9XG4gICAgICAgIGV2YWx1YXRlKCkge1xuICAgICAgICAgICAgY29uc3Qgb3AgPSBVTkFSWV9PUEVSQVRJT05fTUFQW3RoaXMub3BlcmF0b3JdO1xuICAgICAgICAgICAgaWYgKCFvcCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCB1bmFyeSBvcGVyYXRvcjogJyR7dGhpcy5vcGVyYXRvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvcCh0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICByZXR1cm4gWyd1KCcsIHRoaXMub3BlcmF0b3IsIHRoaXMuZXhwcmVzc2lvbi50b1N0cmluZygpLCAnKSddLmpvaW4oJyAnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbWJpbmVSZWFkZXIocGFyc2Vycykge1xuICAgICAgICByZXR1cm4gKHRleHQsIGN1cnNvcikgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJzZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2Vyc1tpXSh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkV2hpdGVzcGFjZSh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBtID0gdGV4dC5zdWJzdHIoY3Vyc29yKS5tYXRjaCgvXlxccysvKTtcbiAgICAgICAgcmV0dXJuIChfYSA9IChtICYmIG1bMF0pKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZE5vblplcm9EaWdpdCh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgY2ggPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDEpO1xuICAgICAgICByZXR1cm4gY2gubWF0Y2goL15bMS05XSQvKSA/IGNoIDogJyc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWREZWNpbWFsRGlnaXRzKHRleHQsIGN1cnNvcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IG0gPSB0ZXh0LnN1YnN0cihjdXJzb3IpLm1hdGNoKC9eWzAtOV0rLyk7XG4gICAgICAgIHJldHVybiAoX2EgPSAobSAmJiBtWzBdKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRTaWduZWRJbnRlZ2VyKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBkcyA9IHJlYWREZWNpbWFsRGlnaXRzKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmIChkcyAhPT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBkcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaWduID0gdGV4dC5zdWJzdHIoY3Vyc29yLCAxKTtcbiAgICAgICAgY3Vyc29yICs9IDE7XG4gICAgICAgIGlmIChzaWduICE9PSAnLScgJiYgc2lnbiAhPT0gJysnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2RzID0gcmVhZERlY2ltYWxEaWdpdHModGV4dCwgY3Vyc29yKTtcbiAgICAgICAgaWYgKHNkcyA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2lnbiArIHNkcztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZEV4cG9uZW50UGFydCh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgZSA9IHRleHQuc3Vic3RyKGN1cnNvciwgMSk7XG4gICAgICAgIGN1cnNvciArPSAxO1xuICAgICAgICBpZiAoZS50b0xvd2VyQ2FzZSgpICE9PSAnZScpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaSA9IHJlYWRTaWduZWRJbnRlZ2VyKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmIChzaSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZSArIHNpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkRGVjaW1hbEludGVnZXJMaXRlcmFsKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBjaCA9IHRleHQuc3Vic3RyKGN1cnNvciwgMSk7XG4gICAgICAgIGlmIChjaCA9PT0gJzAnKSB7XG4gICAgICAgICAgICByZXR1cm4gY2g7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbnpkID0gcmVhZE5vblplcm9EaWdpdCh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBjdXJzb3IgKz0gbnpkLmxlbmd0aDtcbiAgICAgICAgaWYgKG56ZCA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnpkICsgcmVhZERlY2ltYWxEaWdpdHModGV4dCwgY3Vyc29yKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZERlY2ltYWxMaXRlcmFsMSh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgZGlsID0gcmVhZERlY2ltYWxJbnRlZ2VyTGl0ZXJhbCh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBjdXJzb3IgKz0gZGlsLmxlbmd0aDtcbiAgICAgICAgaWYgKGRpbCA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb3QgPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDEpO1xuICAgICAgICBjdXJzb3IgKz0gZG90Lmxlbmd0aDtcbiAgICAgICAgaWYgKGRvdCAhPT0gJy4nKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGRzID0gcmVhZERlY2ltYWxEaWdpdHModGV4dCwgY3Vyc29yKTtcbiAgICAgICAgY3Vyc29yICs9IGRkcy5sZW5ndGg7XG4gICAgICAgIHJldHVybiBkaWwgKyBkb3QgKyBkZHMgKyByZWFkRXhwb25lbnRQYXJ0KHRleHQsIGN1cnNvcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWREZWNpbWFsTGl0ZXJhbDIodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IGRvdCA9IHRleHQuc3Vic3RyKGN1cnNvciwgMSk7XG4gICAgICAgIGN1cnNvciArPSBkb3QubGVuZ3RoO1xuICAgICAgICBpZiAoZG90ICE9PSAnLicpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZHMgPSByZWFkRGVjaW1hbERpZ2l0cyh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBjdXJzb3IgKz0gZGRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGRkcyA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG90ICsgZGRzICsgcmVhZEV4cG9uZW50UGFydCh0ZXh0LCBjdXJzb3IpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkRGVjaW1hbExpdGVyYWwzKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBkaWwgPSByZWFkRGVjaW1hbEludGVnZXJMaXRlcmFsKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGN1cnNvciArPSBkaWwubGVuZ3RoO1xuICAgICAgICBpZiAoZGlsID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaWwgKyByZWFkRXhwb25lbnRQYXJ0KHRleHQsIGN1cnNvcik7XG4gICAgfVxuICAgIGNvbnN0IHJlYWREZWNpbWFsTGl0ZXJhbCA9IGNvbWJpbmVSZWFkZXIoW1xuICAgICAgICByZWFkRGVjaW1hbExpdGVyYWwxLFxuICAgICAgICByZWFkRGVjaW1hbExpdGVyYWwyLFxuICAgICAgICByZWFkRGVjaW1hbExpdGVyYWwzLFxuICAgIF0pO1xuICAgIGZ1bmN0aW9uIHBhcnNlQmluYXJ5RGlnaXRzKHRleHQsIGN1cnNvcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IG0gPSB0ZXh0LnN1YnN0cihjdXJzb3IpLm1hdGNoKC9eWzAxXSsvKTtcbiAgICAgICAgcmV0dXJuIChfYSA9IChtICYmIG1bMF0pKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZEJpbmFyeUludGVnZXJMaXRlcmFsKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBwcmVmaXggPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDIpO1xuICAgICAgICBjdXJzb3IgKz0gcHJlZml4Lmxlbmd0aDtcbiAgICAgICAgaWYgKHByZWZpeC50b0xvd2VyQ2FzZSgpICE9PSAnMGInKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmRzID0gcGFyc2VCaW5hcnlEaWdpdHModGV4dCwgY3Vyc29yKTtcbiAgICAgICAgaWYgKGJkcyA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJlZml4ICsgYmRzO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkT2N0YWxEaWdpdHModGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgbSA9IHRleHQuc3Vic3RyKGN1cnNvcikubWF0Y2goL15bMC03XSsvKTtcbiAgICAgICAgcmV0dXJuIChfYSA9IChtICYmIG1bMF0pKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZE9jdGFsSW50ZWdlckxpdGVyYWwodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IHRleHQuc3Vic3RyKGN1cnNvciwgMik7XG4gICAgICAgIGN1cnNvciArPSBwcmVmaXgubGVuZ3RoO1xuICAgICAgICBpZiAocHJlZml4LnRvTG93ZXJDYXNlKCkgIT09ICcwbycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvZHMgPSByZWFkT2N0YWxEaWdpdHModGV4dCwgY3Vyc29yKTtcbiAgICAgICAgaWYgKG9kcyA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJlZml4ICsgb2RzO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkSGV4RGlnaXRzKHRleHQsIGN1cnNvcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IG0gPSB0ZXh0LnN1YnN0cihjdXJzb3IpLm1hdGNoKC9eWzAtOWEtZl0rL2kpO1xuICAgICAgICByZXR1cm4gKF9hID0gKG0gJiYgbVswXSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkSGV4SW50ZWdlckxpdGVyYWwodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IHRleHQuc3Vic3RyKGN1cnNvciwgMik7XG4gICAgICAgIGN1cnNvciArPSBwcmVmaXgubGVuZ3RoO1xuICAgICAgICBpZiAocHJlZml4LnRvTG93ZXJDYXNlKCkgIT09ICcweCcpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoZHMgPSByZWFkSGV4RGlnaXRzKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmIChoZHMgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZWZpeCArIGhkcztcbiAgICB9XG4gICAgY29uc3QgcmVhZE5vbkRlY2ltYWxJbnRlZ2VyTGl0ZXJhbCA9IGNvbWJpbmVSZWFkZXIoW1xuICAgICAgICByZWFkQmluYXJ5SW50ZWdlckxpdGVyYWwsXG4gICAgICAgIHJlYWRPY3RhbEludGVnZXJMaXRlcmFsLFxuICAgICAgICByZWFkSGV4SW50ZWdlckxpdGVyYWwsXG4gICAgXSk7XG4gICAgY29uc3QgcmVhZE51bWVyaWNMaXRlcmFsID0gY29tYmluZVJlYWRlcihbXG4gICAgICAgIHJlYWROb25EZWNpbWFsSW50ZWdlckxpdGVyYWwsXG4gICAgICAgIHJlYWREZWNpbWFsTGl0ZXJhbCxcbiAgICBdKTtcblxuICAgIGZ1bmN0aW9uIHBhcnNlTGl0ZXJhbCh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgbnVtID0gcmVhZE51bWVyaWNMaXRlcmFsKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGN1cnNvciArPSBudW0ubGVuZ3RoO1xuICAgICAgICBpZiAobnVtID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV2YWx1YWJsZTogbmV3IE51bWJlckxpdGVyYWxOb2RlKG51bSksXG4gICAgICAgICAgICBjdXJzb3I6IGN1cnNvcixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VQYXJlbnRoZXNpemVkRXhwcmVzc2lvbih0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3Qgb3AgPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDEpO1xuICAgICAgICBjdXJzb3IgKz0gb3AubGVuZ3RoO1xuICAgICAgICBpZiAob3AgIT09ICcoJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXhwciA9IHBhcnNlRXhwcmVzc2lvbih0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBpZiAoIWV4cHIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGN1cnNvciA9IGV4cHIuY3Vyc29yO1xuICAgICAgICBjdXJzb3IgKz0gcmVhZFdoaXRlc3BhY2UodGV4dCwgY3Vyc29yKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGNsID0gdGV4dC5zdWJzdHIoY3Vyc29yLCAxKTtcbiAgICAgICAgY3Vyc29yICs9IGNsLmxlbmd0aDtcbiAgICAgICAgaWYgKGNsICE9PSAnKScpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBldmFsdWFibGU6IGV4cHIuZXZhbHVhYmxlLFxuICAgICAgICAgICAgY3Vyc29yOiBjdXJzb3IsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlUHJpbWFyeUV4cHJlc3Npb24odGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIHJldHVybiAocGFyc2VMaXRlcmFsKHRleHQsIGN1cnNvcikgfHwgcGFyc2VQYXJlbnRoZXNpemVkRXhwcmVzc2lvbih0ZXh0LCBjdXJzb3IpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VVbmFyeUV4cHJlc3Npb24odGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IGV4cHIgPSBwYXJzZVByaW1hcnlFeHByZXNzaW9uKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmIChleHByKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcCA9IHRleHQuc3Vic3RyKGN1cnNvciwgMSk7XG4gICAgICAgIGN1cnNvciArPSBvcC5sZW5ndGg7XG4gICAgICAgIGlmIChvcCAhPT0gJysnICYmIG9wICE9PSAnLScgJiYgb3AgIT09ICd+Jykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbnVtID0gcGFyc2VVbmFyeUV4cHJlc3Npb24odGV4dCwgY3Vyc29yKTtcbiAgICAgICAgaWYgKCFudW0pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGN1cnNvciA9IG51bS5jdXJzb3I7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjdXJzb3I6IGN1cnNvcixcbiAgICAgICAgICAgIGV2YWx1YWJsZTogbmV3IFVuYXJ5T3BlcmF0aW9uTm9kZShvcCwgbnVtLmV2YWx1YWJsZSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRCaW5hcnlPcGVyYXRvcihvcHMsIHRleHQsIGN1cnNvcikge1xuICAgICAgICBjdXJzb3IgKz0gcmVhZFdoaXRlc3BhY2UodGV4dCwgY3Vyc29yKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IG9wID0gb3BzLmZpbHRlcigob3ApID0+IHRleHQuc3RhcnRzV2l0aChvcCwgY3Vyc29yKSlbMF07XG4gICAgICAgIGlmICghb3ApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGN1cnNvciArPSBvcC5sZW5ndGg7XG4gICAgICAgIGN1cnNvciArPSByZWFkV2hpdGVzcGFjZSh0ZXh0LCBjdXJzb3IpLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGN1cnNvcjogY3Vyc29yLFxuICAgICAgICAgICAgb3BlcmF0b3I6IG9wLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVCaW5hcnlPcGVyYXRpb25FeHByZXNzaW9uUGFyc2VyKGV4cHJQYXJzZXIsIG9wcykge1xuICAgICAgICByZXR1cm4gKHRleHQsIGN1cnNvcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RFeHByID0gZXhwclBhcnNlcih0ZXh0LCBjdXJzb3IpO1xuICAgICAgICAgICAgaWYgKCFmaXJzdEV4cHIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnNvciA9IGZpcnN0RXhwci5jdXJzb3I7XG4gICAgICAgICAgICBsZXQgZXhwciA9IGZpcnN0RXhwci5ldmFsdWFibGU7XG4gICAgICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3AgPSByZWFkQmluYXJ5T3BlcmF0b3Iob3BzLCB0ZXh0LCBjdXJzb3IpO1xuICAgICAgICAgICAgICAgIGlmICghb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnNvciA9IG9wLmN1cnNvcjtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0RXhwciA9IGV4cHJQYXJzZXIodGV4dCwgY3Vyc29yKTtcbiAgICAgICAgICAgICAgICBpZiAoIW5leHRFeHByKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJzb3IgPSBuZXh0RXhwci5jdXJzb3I7XG4gICAgICAgICAgICAgICAgZXhwciA9IG5ldyBCaW5hcnlPcGVyYXRpb25Ob2RlKG9wLm9wZXJhdG9yLCBleHByLCBuZXh0RXhwci5ldmFsdWFibGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGV4cHJcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBjdXJzb3IsXG4gICAgICAgICAgICAgICAgICAgIGV2YWx1YWJsZTogZXhwcixcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBwYXJzZUJpbmFyeU9wZXJhdGlvbkV4cHJlc3Npb24gPSBbXG4gICAgICAgIFsnKionXSxcbiAgICAgICAgWycqJywgJy8nLCAnJSddLFxuICAgICAgICBbJysnLCAnLSddLFxuICAgICAgICBbJzw8JywgJz4+PicsICc+PiddLFxuICAgICAgICBbJyYnXSxcbiAgICAgICAgWydeJ10sXG4gICAgICAgIFsnfCddLFxuICAgIF0ucmVkdWNlKChwYXJzZXIsIG9wcykgPT4ge1xuICAgICAgICByZXR1cm4gY3JlYXRlQmluYXJ5T3BlcmF0aW9uRXhwcmVzc2lvblBhcnNlcihwYXJzZXIsIG9wcyk7XG4gICAgfSwgcGFyc2VVbmFyeUV4cHJlc3Npb24pO1xuICAgIGZ1bmN0aW9uIHBhcnNlRXhwcmVzc2lvbih0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY3Vyc29yICs9IHJlYWRXaGl0ZXNwYWNlKHRleHQsIGN1cnNvcikubGVuZ3RoO1xuICAgICAgICByZXR1cm4gcGFyc2VCaW5hcnlPcGVyYXRpb25FeHByZXNzaW9uKHRleHQsIGN1cnNvcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlRWNtYU51bWJlckV4cHJlc3Npb24odGV4dCkge1xuICAgICAgICBjb25zdCBleHByID0gcGFyc2VFeHByZXNzaW9uKHRleHQsIDApO1xuICAgICAgICBpZiAoIWV4cHIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnNvciA9IGV4cHIuY3Vyc29yICsgcmVhZFdoaXRlc3BhY2UodGV4dCwgZXhwci5jdXJzb3IpLmxlbmd0aDtcbiAgICAgICAgaWYgKGN1cnNvciAhPT0gdGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBleHByLmV2YWx1YWJsZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU51bWJlcih0ZXh0KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgciA9IHBhcnNlRWNtYU51bWJlckV4cHJlc3Npb24odGV4dCk7XG4gICAgICAgIHJldHVybiAoX2EgPSByID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIuZXZhbHVhdGUoKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbnVtYmVyRnJvbVVua25vd24odmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3QgcHYgPSBwYXJzZU51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkocHYpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHB2O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBudW1iZXJUb1N0cmluZyh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlTnVtYmVyRm9ybWF0dGVyKGRpZ2l0cykge1xuICAgICAgICByZXR1cm4gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudG9GaXhlZChNYXRoLm1heChNYXRoLm1pbihkaWdpdHMsIDIwKSwgMCkpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGlubmVyRm9ybWF0dGVyID0gY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDApO1xuICAgIGZ1bmN0aW9uIGZvcm1hdFBlcmNlbnRhZ2UodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGlubmVyRm9ybWF0dGVyKHZhbHVlKSArICclJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHJpbmdGcm9tVW5rbm93bih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZm9ybWF0U3RyaW5nKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaWxsQnVmZmVyKGJ1ZmZlciwgYnVmZmVyU2l6ZSkge1xuICAgICAgICB3aGlsZSAoYnVmZmVyLmxlbmd0aCA8IGJ1ZmZlclNpemUpIHtcbiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaW5pdGlhbGl6ZUJ1ZmZlcihidWZmZXJTaXplKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IFtdO1xuICAgICAgICBmaWxsQnVmZmVyKGJ1ZmZlciwgYnVmZmVyU2l6ZSk7XG4gICAgICAgIHJldHVybiBjcmVhdGVWYWx1ZShidWZmZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVUcmltbWVkQnVmZmVyKGJ1ZmZlcikge1xuICAgICAgICBjb25zdCBpbmRleCA9IGJ1ZmZlci5pbmRleE9mKHVuZGVmaW5lZCk7XG4gICAgICAgIHJldHVybiBmb3JjZUNhc3QoaW5kZXggPCAwID8gYnVmZmVyIDogYnVmZmVyLnNsaWNlKDAsIGluZGV4KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVB1c2hlZEJ1ZmZlcihidWZmZXIsIG5ld1ZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5ld0J1ZmZlciA9IFsuLi5jcmVhdGVUcmltbWVkQnVmZmVyKGJ1ZmZlciksIG5ld1ZhbHVlXTtcbiAgICAgICAgaWYgKG5ld0J1ZmZlci5sZW5ndGggPiBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICBuZXdCdWZmZXIuc3BsaWNlKDAsIG5ld0J1ZmZlci5sZW5ndGggLSBidWZmZXIubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZpbGxCdWZmZXIobmV3QnVmZmVyLCBidWZmZXIubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3QnVmZmVyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbm5lY3RWYWx1ZXMoeyBwcmltYXJ5LCBzZWNvbmRhcnksIGZvcndhcmQsIGJhY2t3YXJkLCB9KSB7XG4gICAgICAgIGxldCBjaGFuZ2luZyA9IGZhbHNlO1xuICAgICAgICBmdW5jdGlvbiBwcmV2ZW50RmVlZGJhY2soY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2luZykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNoYW5naW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICBjaGFuZ2luZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHByaW1hcnkuZW1pdHRlci5vbignY2hhbmdlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICBwcmV2ZW50RmVlZGJhY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNlY29uZGFyeS5zZXRSYXdWYWx1ZShmb3J3YXJkKHByaW1hcnksIHNlY29uZGFyeSksIGV2Lm9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBzZWNvbmRhcnkuZW1pdHRlci5vbignY2hhbmdlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICBwcmV2ZW50RmVlZGJhY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIHByaW1hcnkuc2V0UmF3VmFsdWUoYmFja3dhcmQocHJpbWFyeSwgc2Vjb25kYXJ5KSwgZXYub3B0aW9ucyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHByZXZlbnRGZWVkYmFjaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2Vjb25kYXJ5LnNldFJhd1ZhbHVlKGZvcndhcmQocHJpbWFyeSwgc2Vjb25kYXJ5KSwgZXYub3B0aW9ucyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHByZXZlbnRGZWVkYmFjaygoKSA9PiB7XG4gICAgICAgICAgICBzZWNvbmRhcnkuc2V0UmF3VmFsdWUoZm9yd2FyZChwcmltYXJ5LCBzZWNvbmRhcnkpLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFN0ZXBGb3JLZXkoYmFzZVN0ZXAsIGtleXMpIHtcbiAgICAgICAgY29uc3Qgc3RlcCA9IGJhc2VTdGVwICogKGtleXMuYWx0S2V5ID8gMC4xIDogMSkgKiAoa2V5cy5zaGlmdEtleSA/IDEwIDogMSk7XG4gICAgICAgIGlmIChrZXlzLnVwS2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gK3N0ZXA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoa2V5cy5kb3duS2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gLXN0ZXA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFZlcnRpY2FsU3RlcEtleXMoZXYpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFsdEtleTogZXYuYWx0S2V5LFxuICAgICAgICAgICAgZG93bktleTogZXYua2V5ID09PSAnQXJyb3dEb3duJyxcbiAgICAgICAgICAgIHNoaWZ0S2V5OiBldi5zaGlmdEtleSxcbiAgICAgICAgICAgIHVwS2V5OiBldi5rZXkgPT09ICdBcnJvd1VwJyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzKGV2KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhbHRLZXk6IGV2LmFsdEtleSxcbiAgICAgICAgICAgIGRvd25LZXk6IGV2LmtleSA9PT0gJ0Fycm93TGVmdCcsXG4gICAgICAgICAgICBzaGlmdEtleTogZXYuc2hpZnRLZXksXG4gICAgICAgICAgICB1cEtleTogZXYua2V5ID09PSAnQXJyb3dSaWdodCcsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzVmVydGljYWxBcnJvd0tleShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSA9PT0gJ0Fycm93VXAnIHx8IGtleSA9PT0gJ0Fycm93RG93bic7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzQXJyb3dLZXkoa2V5KSB7XG4gICAgICAgIHJldHVybiBpc1ZlcnRpY2FsQXJyb3dLZXkoa2V5KSB8fCBrZXkgPT09ICdBcnJvd0xlZnQnIHx8IGtleSA9PT0gJ0Fycm93UmlnaHQnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVPZmZzZXQkMShldiwgZWxlbSkge1xuICAgICAgICBjb25zdCB3aW4gPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogZXYucGFnZVggLSAoKCh3aW4gJiYgd2luLnNjcm9sbFgpIHx8IDApICsgcmVjdC5sZWZ0KSxcbiAgICAgICAgICAgIHk6IGV2LnBhZ2VZIC0gKCgod2luICYmIHdpbi5zY3JvbGxZKSB8fCAwKSArIHJlY3QudG9wKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2xhc3MgUG9pbnRlckhhbmRsZXIge1xuICAgICAgICBjb25zdHJ1Y3RvcihlbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RUb3VjaF8gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5vbkRvY3VtZW50TW91c2VNb3ZlXyA9IHRoaXMub25Eb2N1bWVudE1vdXNlTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Eb2N1bWVudE1vdXNlVXBfID0gdGhpcy5vbkRvY3VtZW50TW91c2VVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Nb3VzZURvd25fID0gdGhpcy5vbk1vdXNlRG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaEVuZF8gPSB0aGlzLm9uVG91Y2hFbmRfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hNb3ZlXyA9IHRoaXMub25Ub3VjaE1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hTdGFydF8gPSB0aGlzLm9uVG91Y2hTdGFydF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbV8gPSBlbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0Xywge1xuICAgICAgICAgICAgICAgIHBhc3NpdmU6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmVfLCB7XG4gICAgICAgICAgICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMub25Ub3VjaEVuZF8pO1xuICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duXyk7XG4gICAgICAgIH1cbiAgICAgICAgY29tcHV0ZVBvc2l0aW9uXyhvZmZzZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmVsZW1fLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBib3VuZHM6IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwb2ludDogb2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogb2Zmc2V0LngsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBvZmZzZXQueSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIG9uTW91c2VEb3duXyhldikge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIChfYSA9IGV2LmN1cnJlbnRUYXJnZXQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb2N1cygpO1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5lbGVtXy5vd25lckRvY3VtZW50O1xuICAgICAgICAgICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Eb2N1bWVudE1vdXNlTW92ZV8pO1xuICAgICAgICAgICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uRG9jdW1lbnRNb3VzZVVwXyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnZG93bicsIHtcbiAgICAgICAgICAgICAgICBhbHRLZXk6IGV2LmFsdEtleSxcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLmNvbXB1dGVQb3NpdGlvbl8oY29tcHV0ZU9mZnNldCQxKGV2LCB0aGlzLmVsZW1fKSksXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiBldi5zaGlmdEtleSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uRG9jdW1lbnRNb3VzZU1vdmVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnbW92ZScsIHtcbiAgICAgICAgICAgICAgICBhbHRLZXk6IGV2LmFsdEtleSxcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLmNvbXB1dGVQb3NpdGlvbl8oY29tcHV0ZU9mZnNldCQxKGV2LCB0aGlzLmVsZW1fKSksXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiBldi5zaGlmdEtleSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uRG9jdW1lbnRNb3VzZVVwXyhldikge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5lbGVtXy5vd25lckRvY3VtZW50O1xuICAgICAgICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Eb2N1bWVudE1vdXNlTW92ZV8pO1xuICAgICAgICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uRG9jdW1lbnRNb3VzZVVwXyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgndXAnLCB7XG4gICAgICAgICAgICAgICAgYWx0S2V5OiBldi5hbHRLZXksXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5jb21wdXRlUG9zaXRpb25fKGNvbXB1dGVPZmZzZXQkMShldiwgdGhpcy5lbGVtXykpLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogZXYuc2hpZnRLZXksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblRvdWNoU3RhcnRfKGV2KSB7XG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3QgdG91Y2ggPSBldi50YXJnZXRUb3VjaGVzLml0ZW0oMCk7XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5lbGVtXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdkb3duJywge1xuICAgICAgICAgICAgICAgIGFsdEtleTogZXYuYWx0S2V5LFxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuY29tcHV0ZVBvc2l0aW9uXyh0b3VjaFxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHRvdWNoLmNsaWVudFggLSByZWN0LmxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB0b3VjaC5jbGllbnRZIC0gcmVjdC50b3AsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogZXYuc2hpZnRLZXksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubGFzdFRvdWNoXyA9IHRvdWNoO1xuICAgICAgICB9XG4gICAgICAgIG9uVG91Y2hNb3ZlXyhldikge1xuICAgICAgICAgICAgY29uc3QgdG91Y2ggPSBldi50YXJnZXRUb3VjaGVzLml0ZW0oMCk7XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5lbGVtXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdtb3ZlJywge1xuICAgICAgICAgICAgICAgIGFsdEtleTogZXYuYWx0S2V5LFxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuY29tcHV0ZVBvc2l0aW9uXyh0b3VjaFxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHRvdWNoLmNsaWVudFggLSByZWN0LmxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB0b3VjaC5jbGllbnRZIC0gcmVjdC50b3AsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogZXYuc2hpZnRLZXksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubGFzdFRvdWNoXyA9IHRvdWNoO1xuICAgICAgICB9XG4gICAgICAgIG9uVG91Y2hFbmRfKGV2KSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCB0b3VjaCA9IChfYSA9IGV2LnRhcmdldFRvdWNoZXMuaXRlbSgwKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5sYXN0VG91Y2hfO1xuICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuZWxlbV8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgndXAnLCB7XG4gICAgICAgICAgICAgICAgYWx0S2V5OiBldi5hbHRLZXksXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5jb21wdXRlUG9zaXRpb25fKHRvdWNoXG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogdG91Y2guY2xpZW50WCAtIHJlY3QubGVmdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHRvdWNoLmNsaWVudFkgLSByZWN0LnRvcCxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiBldi5zaGlmdEtleSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFwUmFuZ2UodmFsdWUsIHN0YXJ0MSwgZW5kMSwgc3RhcnQyLCBlbmQyKSB7XG4gICAgICAgIGNvbnN0IHAgPSAodmFsdWUgLSBzdGFydDEpIC8gKGVuZDEgLSBzdGFydDEpO1xuICAgICAgICByZXR1cm4gc3RhcnQyICsgcCAqIChlbmQyIC0gc3RhcnQyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RGVjaW1hbERpZ2l0cyh2YWx1ZSkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gU3RyaW5nKHZhbHVlLnRvRml4ZWQoMTApKTtcbiAgICAgICAgY29uc3QgZnJhYyA9IHRleHQuc3BsaXQoJy4nKVsxXTtcbiAgICAgICAgcmV0dXJuIGZyYWMucmVwbGFjZSgvMCskLywgJycpLmxlbmd0aDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29uc3RyYWluUmFuZ2UodmFsdWUsIG1pbiwgbWF4KSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCh2YWx1ZSwgbWluKSwgbWF4KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbG9vcFJhbmdlKHZhbHVlLCBtYXgpIHtcbiAgICAgICAgcmV0dXJuICgodmFsdWUgJSBtYXgpICsgbWF4KSAlIG1heDtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkZyA9IENsYXNzTmFtZSgndHh0Jyk7XG4gICAgY2xhc3MgTnVtYmVyVGV4dFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZV8gPSB0aGlzLm9uQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9wc18gPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnByb3BzXy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygpLCBjbGFzc05hbWUkZyh1bmRlZmluZWQsICdudW0nKSk7XG4gICAgICAgICAgICBpZiAoY29uZmlnLmFycmF5UG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZyh1bmRlZmluZWQsIGNvbmZpZy5hcnJheVBvc2l0aW9uKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICBpbnB1dEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygnaScpKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS50eXBlID0gJ3RleHQnO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQoaW5wdXRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChpbnB1dEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQgPSBpbnB1dEVsZW07XG4gICAgICAgICAgICB0aGlzLm9uRHJhZ2dpbmdDaGFuZ2VfID0gdGhpcy5vbkRyYWdnaW5nQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2luZ18gPSBjb25maWcuZHJhZ2dpbmc7XG4gICAgICAgICAgICB0aGlzLmRyYWdnaW5nXy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uRHJhZ2dpbmdDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRnKCkpO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygnaScpKTtcbiAgICAgICAgICAgIGNvbnN0IGtub2JFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAga25vYkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygnaycpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChrbm9iRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmtub2JFbGVtZW50ID0ga25vYkVsZW07XG4gICAgICAgICAgICBjb25zdCBndWlkZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ3N2ZycpO1xuICAgICAgICAgICAgZ3VpZGVFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGcoJ2cnKSk7XG4gICAgICAgICAgICB0aGlzLmtub2JFbGVtZW50LmFwcGVuZENoaWxkKGd1aWRlRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBib2R5RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAncGF0aCcpO1xuICAgICAgICAgICAgYm9keUVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygnZ2InKSk7XG4gICAgICAgICAgICBndWlkZUVsZW0uYXBwZW5kQ2hpbGQoYm9keUVsZW0pO1xuICAgICAgICAgICAgdGhpcy5ndWlkZUJvZHlFbGVtXyA9IGJvZHlFbGVtO1xuICAgICAgICAgICAgY29uc3QgaGVhZEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ3BhdGgnKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGcoJ2doJykpO1xuICAgICAgICAgICAgZ3VpZGVFbGVtLmFwcGVuZENoaWxkKGhlYWRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZ3VpZGVIZWFkRWxlbV8gPSBoZWFkRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHRvb2x0aXBFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdG9vbHRpcEVsZW0uY2xhc3NMaXN0LmFkZChDbGFzc05hbWUoJ3R0JykoKSk7XG4gICAgICAgICAgICB0aGlzLmtub2JFbGVtZW50LmFwcGVuZENoaWxkKHRvb2x0aXBFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcEVsZW1fID0gdG9vbHRpcEVsZW07XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIG9uRHJhZ2dpbmdDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBpZiAoZXYucmF3VmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUkZyh1bmRlZmluZWQsICdkcmcnKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGcodW5kZWZpbmVkLCAnZHJnJykpO1xuICAgICAgICAgICAgY29uc3QgeCA9IGV2LnJhd1ZhbHVlIC8gdGhpcy5wcm9wc18uZ2V0KCdkcmFnZ2luZ1NjYWxlJyk7XG4gICAgICAgICAgICBjb25zdCBhb3ggPSB4ICsgKHggPiAwID8gLTEgOiB4IDwgMCA/ICsxIDogMCk7XG4gICAgICAgICAgICBjb25zdCBhZHggPSBjb25zdHJhaW5SYW5nZSgtYW94LCAtNCwgKzQpO1xuICAgICAgICAgICAgdGhpcy5ndWlkZUhlYWRFbGVtXy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZCcsIFtgTSAke2FveCArIGFkeH0sMCBMJHthb3h9LDQgTCR7YW94ICsgYWR4fSw4YCwgYE0gJHt4fSwtMSBMJHt4fSw5YF0uam9pbignICcpKTtcbiAgICAgICAgICAgIHRoaXMuZ3VpZGVCb2R5RWxlbV8uc2V0QXR0cmlidXRlTlMobnVsbCwgJ2QnLCBgTSAwLDQgTCR7eH0sNGApO1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gdGhpcy5wcm9wc18uZ2V0KCdmb3JtYXR0ZXInKTtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcEVsZW1fLnRleHRDb250ZW50ID0gZm9ybWF0dGVyKHRoaXMudmFsdWUucmF3VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy50b29sdGlwRWxlbV8uc3R5bGUubGVmdCA9IGAke3h9cHhgO1xuICAgICAgICB9XG4gICAgICAgIHJlZnJlc2goKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSB0aGlzLnByb3BzXy5nZXQoJ2Zvcm1hdHRlcicpO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUgPSBmb3JtYXR0ZXIodGhpcy52YWx1ZS5yYXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBOdW1iZXJUZXh0Q29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9yaWdpblJhd1ZhbHVlXyA9IDA7XG4gICAgICAgICAgICB0aGlzLm9uSW5wdXRDaGFuZ2VfID0gdGhpcy5vbklucHV0Q2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbklucHV0S2V5RG93bl8gPSB0aGlzLm9uSW5wdXRLZXlEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbklucHV0S2V5VXBfID0gdGhpcy5vbklucHV0S2V5VXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlckRvd25fID0gdGhpcy5vblBvaW50ZXJEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJNb3ZlXyA9IHRoaXMub25Qb2ludGVyTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyVXBfID0gdGhpcy5vblBvaW50ZXJVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuYmFzZVN0ZXBfID0gY29uZmlnLmJhc2VTdGVwO1xuICAgICAgICAgICAgdGhpcy5wYXJzZXJfID0gY29uZmlnLnBhcnNlcjtcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2luZ18gPSBjcmVhdGVWYWx1ZShudWxsKTtcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBOdW1iZXJUZXh0Vmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBhcnJheVBvc2l0aW9uOiBjb25maWcuYXJyYXlQb3NpdGlvbixcbiAgICAgICAgICAgICAgICBkcmFnZ2luZzogdGhpcy5kcmFnZ2luZ18sXG4gICAgICAgICAgICAgICAgcHJvcHM6IHRoaXMucHJvcHMsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLm9uSW5wdXRDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25JbnB1dEtleURvd25fKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLm9uSW5wdXRLZXlVcF8pO1xuICAgICAgICAgICAgY29uc3QgcGggPSBuZXcgUG9pbnRlckhhbmRsZXIodGhpcy52aWV3Lmtub2JFbGVtZW50KTtcbiAgICAgICAgICAgIHBoLmVtaXR0ZXIub24oJ2Rvd24nLCB0aGlzLm9uUG9pbnRlckRvd25fKTtcbiAgICAgICAgICAgIHBoLmVtaXR0ZXIub24oJ21vdmUnLCB0aGlzLm9uUG9pbnRlck1vdmVfKTtcbiAgICAgICAgICAgIHBoLmVtaXR0ZXIub24oJ3VwJywgdGhpcy5vblBvaW50ZXJVcF8pO1xuICAgICAgICB9XG4gICAgICAgIG9uSW5wdXRDaGFuZ2VfKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0RWxlbSA9IGZvcmNlQ2FzdChlLmN1cnJlbnRUYXJnZXQpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dEVsZW0udmFsdWU7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHRoaXMucGFyc2VyXyh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkocGFyc2VkVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZSA9IHBhcnNlZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52aWV3LnJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICBvbklucHV0S2V5RG93bl8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRTdGVwRm9yS2V5KHRoaXMuYmFzZVN0ZXBfLCBnZXRWZXJ0aWNhbFN0ZXBLZXlzKGV2KSk7XG4gICAgICAgICAgICBpZiAoc3RlcCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUodGhpcy52YWx1ZS5yYXdWYWx1ZSArIHN0ZXAsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25JbnB1dEtleVVwXyhldikge1xuICAgICAgICAgICAgY29uc3Qgc3RlcCA9IGdldFN0ZXBGb3JLZXkodGhpcy5iYXNlU3RlcF8sIGdldFZlcnRpY2FsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlLnJhd1ZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duXygpIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luUmF3VmFsdWVfID0gdGhpcy52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dpbmdfLnJhd1ZhbHVlID0gMDtcbiAgICAgICAgfVxuICAgICAgICBjb21wdXRlRHJhZ2dpbmdWYWx1ZV8oZGF0YSkge1xuICAgICAgICAgICAgaWYgKCFkYXRhLnBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkeCA9IGRhdGEucG9pbnQueCAtIGRhdGEuYm91bmRzLndpZHRoIC8gMjtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9yaWdpblJhd1ZhbHVlXyArIGR4ICogdGhpcy5wcm9wcy5nZXQoJ2RyYWdnaW5nU2NhbGUnKTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJNb3ZlXyhldikge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuY29tcHV0ZURyYWdnaW5nVmFsdWVfKGV2LmRhdGEpO1xuICAgICAgICAgICAgaWYgKHYgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKHYsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmRyYWdnaW5nXy5yYXdWYWx1ZSA9IHRoaXMudmFsdWUucmF3VmFsdWUgLSB0aGlzLm9yaWdpblJhd1ZhbHVlXztcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJVcF8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSB0aGlzLmNvbXB1dGVEcmFnZ2luZ1ZhbHVlXyhldi5kYXRhKTtcbiAgICAgICAgICAgIGlmICh2ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh2LCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dpbmdfLnJhd1ZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRmID0gQ2xhc3NOYW1lKCdzbGQnKTtcbiAgICBjbGFzcyBTbGlkZXJWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VfID0gdGhpcy5vbkNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHNfID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy5wcm9wc18uZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGYoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgdHJhY2tFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdHJhY2tFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGYoJ3QnKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRUYWJJbmRleCh0cmFja0VsZW0pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRyYWNrRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnRyYWNrRWxlbWVudCA9IHRyYWNrRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IGtub2JFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAga25vYkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZignaycpKTtcbiAgICAgICAgICAgIHRoaXMudHJhY2tFbGVtZW50LmFwcGVuZENoaWxkKGtub2JFbGVtKTtcbiAgICAgICAgICAgIHRoaXMua25vYkVsZW1lbnQgPSBrbm9iRWxlbTtcbiAgICAgICAgICAgIGNvbmZpZy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBjb25zdHJhaW5SYW5nZShtYXBSYW5nZSh0aGlzLnZhbHVlLnJhd1ZhbHVlLCB0aGlzLnByb3BzXy5nZXQoJ21pblZhbHVlJyksIHRoaXMucHJvcHNfLmdldCgnbWF4VmFsdWUnKSwgMCwgMTAwKSwgMCwgMTAwKTtcbiAgICAgICAgICAgIHRoaXMua25vYkVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtwfSVgO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgU2xpZGVyQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uS2V5RG93bl8gPSB0aGlzLm9uS2V5RG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25LZXlVcF8gPSB0aGlzLm9uS2V5VXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlckRvd25Pck1vdmVfID0gdGhpcy5vblBvaW50ZXJEb3duT3JNb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJVcF8gPSB0aGlzLm9uUG9pbnRlclVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5iYXNlU3RlcF8gPSBjb25maWcuYmFzZVN0ZXA7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBTbGlkZXJWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXyA9IG5ldyBQb2ludGVySGFuZGxlcih0aGlzLnZpZXcudHJhY2tFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdkb3duJywgdGhpcy5vblBvaW50ZXJEb3duT3JNb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbignbW92ZScsIHRoaXMub25Qb2ludGVyRG93bk9yTW92ZV8pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ3VwJywgdGhpcy5vblBvaW50ZXJVcF8pO1xuICAgICAgICAgICAgdGhpcy52aWV3LnRyYWNrRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbktleURvd25fKTtcbiAgICAgICAgICAgIHRoaXMudmlldy50cmFja0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLm9uS2V5VXBfKTtcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVQb2ludGVyRXZlbnRfKGQsIG9wdHMpIHtcbiAgICAgICAgICAgIGlmICghZC5wb2ludCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUobWFwUmFuZ2UoY29uc3RyYWluUmFuZ2UoZC5wb2ludC54LCAwLCBkLmJvdW5kcy53aWR0aCksIDAsIGQuYm91bmRzLndpZHRoLCB0aGlzLnByb3BzLmdldCgnbWluVmFsdWUnKSwgdGhpcy5wcm9wcy5nZXQoJ21heFZhbHVlJykpLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duT3JNb3ZlXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyVXBfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25LZXlEb3duXyhldikge1xuICAgICAgICAgICAgY29uc3Qgc3RlcCA9IGdldFN0ZXBGb3JLZXkodGhpcy5iYXNlU3RlcF8sIGdldEhvcml6b250YWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgaWYgKHN0ZXAgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKHRoaXMudmFsdWUucmF3VmFsdWUgKyBzdGVwLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5VXBfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBzdGVwID0gZ2V0U3RlcEZvcktleSh0aGlzLmJhc2VTdGVwXywgZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzKGV2KSk7XG4gICAgICAgICAgICBpZiAoc3RlcCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUodGhpcy52YWx1ZS5yYXdWYWx1ZSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkZSA9IENsYXNzTmFtZSgnc2xkdHh0Jyk7XG4gICAgY2xhc3MgU2xpZGVyVGV4dFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGUoKSk7XG4gICAgICAgICAgICBjb25zdCBzbGlkZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgc2xpZGVyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRlKCdzJykpO1xuICAgICAgICAgICAgdGhpcy5zbGlkZXJWaWV3XyA9IGNvbmZpZy5zbGlkZXJWaWV3O1xuICAgICAgICAgICAgc2xpZGVyRWxlbS5hcHBlbmRDaGlsZCh0aGlzLnNsaWRlclZpZXdfLmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHNsaWRlckVsZW0pO1xuICAgICAgICAgICAgY29uc3QgdGV4dEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0ZXh0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRlKCd0JykpO1xuICAgICAgICAgICAgdGhpcy50ZXh0Vmlld18gPSBjb25maWcudGV4dFZpZXc7XG4gICAgICAgICAgICB0ZXh0RWxlbS5hcHBlbmRDaGlsZCh0aGlzLnRleHRWaWV3Xy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0RWxlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBTbGlkZXJUZXh0Q29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5zbGlkZXJDXyA9IG5ldyBTbGlkZXJDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGJhc2VTdGVwOiBjb25maWcuYmFzZVN0ZXAsXG4gICAgICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy5zbGlkZXJQcm9wcyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogY29uZmlnLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudGV4dENfID0gbmV3IE51bWJlclRleHRDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGJhc2VTdGVwOiBjb25maWcuYmFzZVN0ZXAsXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBjb25maWcucGFyc2VyLFxuICAgICAgICAgICAgICAgIHByb3BzOiBjb25maWcudGV4dFByb3BzLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBjb25maWcudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgU2xpZGVyVGV4dFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgc2xpZGVyVmlldzogdGhpcy5zbGlkZXJDXy52aWV3LFxuICAgICAgICAgICAgICAgIHRleHRWaWV3OiB0aGlzLnRleHRDXy52aWV3LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHNsaWRlckNvbnRyb2xsZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zbGlkZXJDXztcbiAgICAgICAgfVxuICAgICAgICBnZXQgdGV4dENvbnRyb2xsZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0Q187XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3cml0ZVByaW1pdGl2ZSh0YXJnZXQsIHZhbHVlKSB7XG4gICAgICAgIHRhcmdldC53cml0ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VMaXN0T3B0aW9ucyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gcC5yZXF1aXJlZC5hcnJheShwLnJlcXVpcmVkLm9iamVjdCh7XG4gICAgICAgICAgICAgICAgdGV4dDogcC5yZXF1aXJlZC5zdHJpbmcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHAucmVxdWlyZWQucmF3LFxuICAgICAgICAgICAgfSkpKHZhbHVlKS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHAucmVxdWlyZWQucmF3KHZhbHVlKVxuICAgICAgICAgICAgICAgIC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZVBpY2tlckxheW91dCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT09ICdpbmxpbmUnIHx8IHZhbHVlID09PSAncG9wdXAnKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgcmV0dXJuIHAucmVxdWlyZWQub2JqZWN0KHtcbiAgICAgICAgICAgIG1heDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICBtaW46IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgc3RlcDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgIH0pKHZhbHVlKS52YWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm9ybWFsaXplTGlzdE9wdGlvbnMob3B0aW9ucykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgICAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaCgodGV4dCkgPT4ge1xuICAgICAgICAgICAgaXRlbXMucHVzaCh7IHRleHQ6IHRleHQsIHZhbHVlOiBvcHRpb25zW3RleHRdIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVMaXN0Q29uc3RyYWludChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiAhaXNFbXB0eShvcHRpb25zKVxuICAgICAgICAgICAgPyBuZXcgTGlzdENvbnN0cmFpbnQobm9ybWFsaXplTGlzdE9wdGlvbnMoZm9yY2VDYXN0KG9wdGlvbnMpKSlcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZExpc3RJdGVtcyhjb25zdHJhaW50KSB7XG4gICAgICAgIGNvbnN0IGMgPSBjb25zdHJhaW50XG4gICAgICAgICAgICA/IGZpbmRDb25zdHJhaW50KGNvbnN0cmFpbnQsIExpc3RDb25zdHJhaW50KVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBpZiAoIWMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjLm9wdGlvbnM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRTdGVwKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgY29uc3QgYyA9IGNvbnN0cmFpbnQgPyBmaW5kQ29uc3RyYWludChjb25zdHJhaW50LCBTdGVwQ29uc3RyYWludCkgOiBudWxsO1xuICAgICAgICBpZiAoIWMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjLnN0ZXA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN1aXRhYmxlRGVjaW1hbERpZ2l0cyhjb25zdHJhaW50LCByYXdWYWx1ZSkge1xuICAgICAgICBjb25zdCBzYyA9IGNvbnN0cmFpbnQgJiYgZmluZENvbnN0cmFpbnQoY29uc3RyYWludCwgU3RlcENvbnN0cmFpbnQpO1xuICAgICAgICBpZiAoc2MpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXREZWNpbWFsRGlnaXRzKHNjLnN0ZXApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBNYXRoLm1heChnZXREZWNpbWFsRGlnaXRzKHJhd1ZhbHVlKSwgMik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEJhc2VTdGVwKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgY29uc3Qgc3RlcCA9IGZpbmRTdGVwKGNvbnN0cmFpbnQpO1xuICAgICAgICByZXR1cm4gc3RlcCAhPT0gbnVsbCAmJiBzdGVwICE9PSB2b2lkIDAgPyBzdGVwIDogMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U3VpdGFibGVEcmFnZ2luZ1NjYWxlKGNvbnN0cmFpbnQsIHJhd1ZhbHVlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3Qgc2MgPSBjb25zdHJhaW50ICYmIGZpbmRDb25zdHJhaW50KGNvbnN0cmFpbnQsIFN0ZXBDb25zdHJhaW50KTtcbiAgICAgICAgY29uc3QgYmFzZSA9IE1hdGguYWJzKChfYSA9IHNjID09PSBudWxsIHx8IHNjID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzYy5zdGVwKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiByYXdWYWx1ZSk7XG4gICAgICAgIHJldHVybiBiYXNlID09PSAwID8gMC4xIDogTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2cxMChiYXNlKSkgLSAxKTtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkZCA9IENsYXNzTmFtZSgnY2tiJyk7XG4gICAgY2xhc3MgQ2hlY2tib3hWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZCgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBsYWJlbEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcbiAgICAgICAgICAgIGxhYmVsRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRkKCdsJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGxhYmVsRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBpbnB1dEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRkKCdpJykpO1xuICAgICAgICAgICAgaW5wdXRFbGVtLnR5cGUgPSAnY2hlY2tib3gnO1xuICAgICAgICAgICAgbGFiZWxFbGVtLmFwcGVuZENoaWxkKGlucHV0RWxlbSk7XG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudCA9IGlucHV0RWxlbTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKHRoaXMuaW5wdXRFbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgd3JhcHBlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZCgndycpKTtcbiAgICAgICAgICAgIGxhYmVsRWxlbS5hcHBlbmRDaGlsZCh3cmFwcGVyRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBtYXJrRWxlbSA9IGNyZWF0ZVN2Z0ljb25FbGVtZW50KGRvYywgJ2NoZWNrJyk7XG4gICAgICAgICAgICB3cmFwcGVyRWxlbS5hcHBlbmRDaGlsZChtYXJrRWxlbSk7XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LmNoZWNrZWQgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBDaGVja2JveENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbklucHV0Q2hhbmdlXyA9IHRoaXMub25JbnB1dENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgQ2hlY2tib3hWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy5pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5vbklucHV0Q2hhbmdlXyk7XG4gICAgICAgIH1cbiAgICAgICAgb25JbnB1dENoYW5nZV8oZSkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtID0gZm9yY2VDYXN0KGUuY3VycmVudFRhcmdldCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlID0gaW5wdXRFbGVtLmNoZWNrZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50JDUocGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gW107XG4gICAgICAgIGNvbnN0IGxjID0gY3JlYXRlTGlzdENvbnN0cmFpbnQocGFyYW1zLm9wdGlvbnMpO1xuICAgICAgICBpZiAobGMpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2gobGMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ29tcG9zaXRlQ29uc3RyYWludChjb25zdHJhaW50cyk7XG4gICAgfVxuICAgIGNvbnN0IEJvb2xlYW5JbnB1dFBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdpbnB1dC1ib29sJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlTGlzdE9wdGlvbnMpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIHJlYWRlcjogKF9hcmdzKSA9PiBib29sRnJvbVVua25vd24sXG4gICAgICAgICAgICBjb25zdHJhaW50OiAoYXJncykgPT4gY3JlYXRlQ29uc3RyYWludCQ1KGFyZ3MucGFyYW1zKSxcbiAgICAgICAgICAgIHdyaXRlcjogKF9hcmdzKSA9PiB3cml0ZVByaW1pdGl2ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IGFyZ3MuZG9jdW1lbnQ7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFyZ3MudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBjID0gYXJncy5jb25zdHJhaW50O1xuICAgICAgICAgICAgaWYgKGMgJiYgZmluZENvbnN0cmFpbnQoYywgTGlzdENvbnN0cmFpbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMaXN0Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogKF9hID0gZmluZExpc3RJdGVtcyhjKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10sXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IENoZWNrYm94Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBjbGFzc05hbWUkYyA9IENsYXNzTmFtZSgnY29sJyk7XG4gICAgY2xhc3MgQ29sb3JWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRjKCkpO1xuICAgICAgICAgICAgY29uZmlnLmZvbGRhYmxlLmJpbmRFeHBhbmRlZENsYXNzKHRoaXMuZWxlbWVudCwgY2xhc3NOYW1lJGModW5kZWZpbmVkLCAnZXhwYW5kZWQnKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAoY29uZmlnLmZvbGRhYmxlLCAnY29tcGxldGVkJywgdmFsdWVUb0NsYXNzTmFtZSh0aGlzLmVsZW1lbnQsIGNsYXNzTmFtZSRjKHVuZGVmaW5lZCwgJ2NwbCcpKSk7XG4gICAgICAgICAgICBjb25zdCBoZWFkRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGMoJ2gnKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaGVhZEVsZW0pO1xuICAgICAgICAgICAgY29uc3Qgc3dhdGNoRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHN3YXRjaEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYygncycpKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmFwcGVuZENoaWxkKHN3YXRjaEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5zd2F0Y2hFbGVtZW50ID0gc3dhdGNoRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGV4dEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYygndCcpKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmFwcGVuZENoaWxkKHRleHRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudGV4dEVsZW1lbnQgPSB0ZXh0RWxlbTtcbiAgICAgICAgICAgIGlmIChjb25maWcucGlja2VyTGF5b3V0ID09PSAnaW5saW5lJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpY2tlckVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgcGlja2VyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRjKCdwJykpO1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChwaWNrZXJFbGVtKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlckVsZW1lbnQgPSBwaWNrZXJFbGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJnYlRvSHNsKHIsIGcsIGIpIHtcbiAgICAgICAgY29uc3QgcnAgPSBjb25zdHJhaW5SYW5nZShyIC8gMjU1LCAwLCAxKTtcbiAgICAgICAgY29uc3QgZ3AgPSBjb25zdHJhaW5SYW5nZShnIC8gMjU1LCAwLCAxKTtcbiAgICAgICAgY29uc3QgYnAgPSBjb25zdHJhaW5SYW5nZShiIC8gMjU1LCAwLCAxKTtcbiAgICAgICAgY29uc3QgY21heCA9IE1hdGgubWF4KHJwLCBncCwgYnApO1xuICAgICAgICBjb25zdCBjbWluID0gTWF0aC5taW4ocnAsIGdwLCBicCk7XG4gICAgICAgIGNvbnN0IGMgPSBjbWF4IC0gY21pbjtcbiAgICAgICAgbGV0IGggPSAwO1xuICAgICAgICBsZXQgcyA9IDA7XG4gICAgICAgIGNvbnN0IGwgPSAoY21pbiArIGNtYXgpIC8gMjtcbiAgICAgICAgaWYgKGMgIT09IDApIHtcbiAgICAgICAgICAgIHMgPSBjIC8gKDEgLSBNYXRoLmFicyhjbWF4ICsgY21pbiAtIDEpKTtcbiAgICAgICAgICAgIGlmIChycCA9PT0gY21heCkge1xuICAgICAgICAgICAgICAgIGggPSAoZ3AgLSBicCkgLyBjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZ3AgPT09IGNtYXgpIHtcbiAgICAgICAgICAgICAgICBoID0gMiArIChicCAtIHJwKSAvIGM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBoID0gNCArIChycCAtIGdwKSAvIGM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoID0gaCAvIDYgKyAoaCA8IDAgPyAxIDogMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtoICogMzYwLCBzICogMTAwLCBsICogMTAwXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaHNsVG9SZ2IoaCwgcywgbCkge1xuICAgICAgICBjb25zdCBocCA9ICgoaCAlIDM2MCkgKyAzNjApICUgMzYwO1xuICAgICAgICBjb25zdCBzcCA9IGNvbnN0cmFpblJhbmdlKHMgLyAxMDAsIDAsIDEpO1xuICAgICAgICBjb25zdCBscCA9IGNvbnN0cmFpblJhbmdlKGwgLyAxMDAsIDAsIDEpO1xuICAgICAgICBjb25zdCBjID0gKDEgLSBNYXRoLmFicygyICogbHAgLSAxKSkgKiBzcDtcbiAgICAgICAgY29uc3QgeCA9IGMgKiAoMSAtIE1hdGguYWJzKCgoaHAgLyA2MCkgJSAyKSAtIDEpKTtcbiAgICAgICAgY29uc3QgbSA9IGxwIC0gYyAvIDI7XG4gICAgICAgIGxldCBycCwgZ3AsIGJwO1xuICAgICAgICBpZiAoaHAgPj0gMCAmJiBocCA8IDYwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbYywgeCwgMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gNjAgJiYgaHAgPCAxMjApIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFt4LCBjLCAwXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChocCA+PSAxMjAgJiYgaHAgPCAxODApIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFswLCBjLCB4XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChocCA+PSAxODAgJiYgaHAgPCAyNDApIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFswLCB4LCBjXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChocCA+PSAyNDAgJiYgaHAgPCAzMDApIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFt4LCAwLCBjXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFtjLCAwLCB4XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWyhycCArIG0pICogMjU1LCAoZ3AgKyBtKSAqIDI1NSwgKGJwICsgbSkgKiAyNTVdO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZ2JUb0hzdihyLCBnLCBiKSB7XG4gICAgICAgIGNvbnN0IHJwID0gY29uc3RyYWluUmFuZ2UociAvIDI1NSwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGdwID0gY29uc3RyYWluUmFuZ2UoZyAvIDI1NSwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGJwID0gY29uc3RyYWluUmFuZ2UoYiAvIDI1NSwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGNtYXggPSBNYXRoLm1heChycCwgZ3AsIGJwKTtcbiAgICAgICAgY29uc3QgY21pbiA9IE1hdGgubWluKHJwLCBncCwgYnApO1xuICAgICAgICBjb25zdCBkID0gY21heCAtIGNtaW47XG4gICAgICAgIGxldCBoO1xuICAgICAgICBpZiAoZCA9PT0gMCkge1xuICAgICAgICAgICAgaCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY21heCA9PT0gcnApIHtcbiAgICAgICAgICAgIGggPSA2MCAqICgoKCgoZ3AgLSBicCkgLyBkKSAlIDYpICsgNikgJSA2KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjbWF4ID09PSBncCkge1xuICAgICAgICAgICAgaCA9IDYwICogKChicCAtIHJwKSAvIGQgKyAyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGggPSA2MCAqICgocnAgLSBncCkgLyBkICsgNCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcyA9IGNtYXggPT09IDAgPyAwIDogZCAvIGNtYXg7XG4gICAgICAgIGNvbnN0IHYgPSBjbWF4O1xuICAgICAgICByZXR1cm4gW2gsIHMgKiAxMDAsIHYgKiAxMDBdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoc3ZUb1JnYihoLCBzLCB2KSB7XG4gICAgICAgIGNvbnN0IGhwID0gbG9vcFJhbmdlKGgsIDM2MCk7XG4gICAgICAgIGNvbnN0IHNwID0gY29uc3RyYWluUmFuZ2UocyAvIDEwMCwgMCwgMSk7XG4gICAgICAgIGNvbnN0IHZwID0gY29uc3RyYWluUmFuZ2UodiAvIDEwMCwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGMgPSB2cCAqIHNwO1xuICAgICAgICBjb25zdCB4ID0gYyAqICgxIC0gTWF0aC5hYnMoKChocCAvIDYwKSAlIDIpIC0gMSkpO1xuICAgICAgICBjb25zdCBtID0gdnAgLSBjO1xuICAgICAgICBsZXQgcnAsIGdwLCBicDtcbiAgICAgICAgaWYgKGhwID49IDAgJiYgaHAgPCA2MCkge1xuICAgICAgICAgICAgW3JwLCBncCwgYnBdID0gW2MsIHgsIDBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhwID49IDYwICYmIGhwIDwgMTIwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbeCwgYywgMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gMTIwICYmIGhwIDwgMTgwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbMCwgYywgeF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gMTgwICYmIGhwIDwgMjQwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbMCwgeCwgY107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gMjQwICYmIGhwIDwgMzAwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbeCwgMCwgY107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbYywgMCwgeF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsocnAgKyBtKSAqIDI1NSwgKGdwICsgbSkgKiAyNTUsIChicCArIG0pICogMjU1XTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaHNsVG9Ic3YoaCwgcywgbCkge1xuICAgICAgICBjb25zdCBzZCA9IGwgKyAocyAqICgxMDAgLSBNYXRoLmFicygyICogbCAtIDEwMCkpKSAvICgyICogMTAwKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGgsXG4gICAgICAgICAgICBzZCAhPT0gMCA/IChzICogKDEwMCAtIE1hdGguYWJzKDIgKiBsIC0gMTAwKSkpIC8gc2QgOiAwLFxuICAgICAgICAgICAgbCArIChzICogKDEwMCAtIE1hdGguYWJzKDIgKiBsIC0gMTAwKSkpIC8gKDIgKiAxMDApLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoc3ZUb0hzbChoLCBzLCB2KSB7XG4gICAgICAgIGNvbnN0IHNkID0gMTAwIC0gTWF0aC5hYnMoKHYgKiAoMjAwIC0gcykpIC8gMTAwIC0gMTAwKTtcbiAgICAgICAgcmV0dXJuIFtoLCBzZCAhPT0gMCA/IChzICogdikgLyBzZCA6IDAsICh2ICogKDIwMCAtIHMpKSAvICgyICogMTAwKV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFscGhhQ29tcG9uZW50KGNvbXBzKSB7XG4gICAgICAgIHJldHVybiBbY29tcHNbMF0sIGNvbXBzWzFdLCBjb21wc1syXV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFwcGVuZEFscGhhQ29tcG9uZW50KGNvbXBzLCBhbHBoYSkge1xuICAgICAgICByZXR1cm4gW2NvbXBzWzBdLCBjb21wc1sxXSwgY29tcHNbMl0sIGFscGhhXTtcbiAgICB9XG4gICAgY29uc3QgTU9ERV9DT05WRVJURVJfTUFQID0ge1xuICAgICAgICBoc2w6IHtcbiAgICAgICAgICAgIGhzbDogKGgsIHMsIGwpID0+IFtoLCBzLCBsXSxcbiAgICAgICAgICAgIGhzdjogaHNsVG9Ic3YsXG4gICAgICAgICAgICByZ2I6IGhzbFRvUmdiLFxuICAgICAgICB9LFxuICAgICAgICBoc3Y6IHtcbiAgICAgICAgICAgIGhzbDogaHN2VG9Ic2wsXG4gICAgICAgICAgICBoc3Y6IChoLCBzLCB2KSA9PiBbaCwgcywgdl0sXG4gICAgICAgICAgICByZ2I6IGhzdlRvUmdiLFxuICAgICAgICB9LFxuICAgICAgICByZ2I6IHtcbiAgICAgICAgICAgIGhzbDogcmdiVG9Ic2wsXG4gICAgICAgICAgICBoc3Y6IHJnYlRvSHN2LFxuICAgICAgICAgICAgcmdiOiAociwgZywgYikgPT4gW3IsIGcsIGJdLFxuICAgICAgICB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gY29udmVydENvbG9yTW9kZShjb21wb25lbnRzLCBmcm9tTW9kZSwgdG9Nb2RlKSB7XG4gICAgICAgIHJldHVybiBNT0RFX0NPTlZFUlRFUl9NQVBbZnJvbU1vZGVdW3RvTW9kZV0oLi4uY29tcG9uZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgQ09OU1RSQUlOVF9NQVAgPSB7XG4gICAgICAgIGhzbDogKGNvbXBzKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIGxvb3BSYW5nZShjb21wc1swXSwgMzYwKSxcbiAgICAgICAgICAgICAgICBjb25zdHJhaW5SYW5nZShjb21wc1sxXSwgMCwgMTAwKSxcbiAgICAgICAgICAgICAgICBjb25zdHJhaW5SYW5nZShjb21wc1syXSwgMCwgMTAwKSxcbiAgICAgICAgICAgICAgICBjb25zdHJhaW5SYW5nZSgoX2EgPSBjb21wc1szXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMSwgMCwgMSksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9LFxuICAgICAgICBoc3Y6IChjb21wcykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBsb29wUmFuZ2UoY29tcHNbMF0sIDM2MCksXG4gICAgICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoY29tcHNbMV0sIDAsIDEwMCksXG4gICAgICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoY29tcHNbMl0sIDAsIDEwMCksXG4gICAgICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoKF9hID0gY29tcHNbM10pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDEsIDAsIDEpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSxcbiAgICAgICAgcmdiOiAoY29tcHMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoY29tcHNbMF0sIDAsIDI1NSksXG4gICAgICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoY29tcHNbMV0sIDAsIDI1NSksXG4gICAgICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoY29tcHNbMl0sIDAsIDI1NSksXG4gICAgICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoKF9hID0gY29tcHNbM10pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDEsIDAsIDEpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGlzUmdiQ29sb3JDb21wb25lbnQob2JqLCBrZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IGlzRW1wdHkob2JqKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXkgaW4gb2JqICYmIHR5cGVvZiBvYmpba2V5XSA9PT0gJ251bWJlcic7XG4gICAgfVxuICAgIGNsYXNzIENvbG9yIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29tcHMsIG1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZV8gPSBtb2RlO1xuICAgICAgICAgICAgdGhpcy5jb21wc18gPSBDT05TVFJBSU5UX01BUFttb2RlXShjb21wcyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGJsYWNrKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbMCwgMCwgMF0sICdyZ2InKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZnJvbU9iamVjdChvYmopIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBzID0gJ2EnIGluIG9iaiA/IFtvYmouciwgb2JqLmcsIG9iai5iLCBvYmouYV0gOiBbb2JqLnIsIG9iai5nLCBvYmouYl07XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKGNvbXBzLCAncmdiJyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIHRvUmdiYU9iamVjdChjb2xvcikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbG9yLnRvUmdiYU9iamVjdCgpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBpc1JnYkNvbG9yT2JqZWN0KG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIChpc1JnYkNvbG9yQ29tcG9uZW50KG9iaiwgJ3InKSAmJlxuICAgICAgICAgICAgICAgIGlzUmdiQ29sb3JDb21wb25lbnQob2JqLCAnZycpICYmXG4gICAgICAgICAgICAgICAgaXNSZ2JDb2xvckNvbXBvbmVudChvYmosICdiJykpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBpc1JnYmFDb2xvck9iamVjdChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzUmdiQ29sb3JPYmplY3Qob2JqKSAmJiBpc1JnYkNvbG9yQ29tcG9uZW50KG9iaiwgJ2EnKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgaXNDb2xvck9iamVjdChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzUmdiQ29sb3JPYmplY3Qob2JqKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZXF1YWxzKHYxLCB2Mikge1xuICAgICAgICAgICAgaWYgKHYxLm1vZGVfICE9PSB2Mi5tb2RlXykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBzMSA9IHYxLmNvbXBzXztcbiAgICAgICAgICAgIGNvbnN0IGNvbXBzMiA9IHYyLmNvbXBzXztcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcHMxLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBzMVtpXSAhPT0gY29tcHMyW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbW9kZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGVfO1xuICAgICAgICB9XG4gICAgICAgIGdldENvbXBvbmVudHMob3B0X21vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHBlbmRBbHBoYUNvbXBvbmVudChjb252ZXJ0Q29sb3JNb2RlKHJlbW92ZUFscGhhQ29tcG9uZW50KHRoaXMuY29tcHNfKSwgdGhpcy5tb2RlXywgb3B0X21vZGUgfHwgdGhpcy5tb2RlXyksIHRoaXMuY29tcHNfWzNdKTtcbiAgICAgICAgfVxuICAgICAgICB0b1JnYmFPYmplY3QoKSB7XG4gICAgICAgICAgICBjb25zdCByZ2JDb21wcyA9IHRoaXMuZ2V0Q29tcG9uZW50cygncmdiJyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHI6IHJnYkNvbXBzWzBdLFxuICAgICAgICAgICAgICAgIGc6IHJnYkNvbXBzWzFdLFxuICAgICAgICAgICAgICAgIGI6IHJnYkNvbXBzWzJdLFxuICAgICAgICAgICAgICAgIGE6IHJnYkNvbXBzWzNdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRiID0gQ2xhc3NOYW1lKCdjb2xwJyk7XG4gICAgY2xhc3MgQ29sb3JQaWNrZXJWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuYWxwaGFWaWV3c18gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGIoKSk7XG4gICAgICAgICAgICBjb25zdCBoc3ZFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgaHN2RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRiKCdoc3YnKSk7XG4gICAgICAgICAgICBjb25zdCBzdkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBzdkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYignc3YnKSk7XG4gICAgICAgICAgICB0aGlzLnN2UGFsZXR0ZVZpZXdfID0gY29uZmlnLnN2UGFsZXR0ZVZpZXc7XG4gICAgICAgICAgICBzdkVsZW0uYXBwZW5kQ2hpbGQodGhpcy5zdlBhbGV0dGVWaWV3Xy5lbGVtZW50KTtcbiAgICAgICAgICAgIGhzdkVsZW0uYXBwZW5kQ2hpbGQoc3ZFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGhFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgaEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYignaCcpKTtcbiAgICAgICAgICAgIHRoaXMuaFBhbGV0dGVWaWV3XyA9IGNvbmZpZy5oUGFsZXR0ZVZpZXc7XG4gICAgICAgICAgICBoRWxlbS5hcHBlbmRDaGlsZCh0aGlzLmhQYWxldHRlVmlld18uZWxlbWVudCk7XG4gICAgICAgICAgICBoc3ZFbGVtLmFwcGVuZENoaWxkKGhFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChoc3ZFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IHJnYkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICByZ2JFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGIoJ3JnYicpKTtcbiAgICAgICAgICAgIHRoaXMudGV4dFZpZXdfID0gY29uZmlnLnRleHRWaWV3O1xuICAgICAgICAgICAgcmdiRWxlbS5hcHBlbmRDaGlsZCh0aGlzLnRleHRWaWV3Xy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChyZ2JFbGVtKTtcbiAgICAgICAgICAgIGlmIChjb25maWcuYWxwaGFWaWV3cykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWxwaGFWaWV3c18gPSB7XG4gICAgICAgICAgICAgICAgICAgIHBhbGV0dGU6IGNvbmZpZy5hbHBoYVZpZXdzLnBhbGV0dGUsXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGNvbmZpZy5hbHBoYVZpZXdzLnRleHQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBhRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBhRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRiKCdhJykpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFwRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBhcEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYignYXAnKSk7XG4gICAgICAgICAgICAgICAgYXBFbGVtLmFwcGVuZENoaWxkKHRoaXMuYWxwaGFWaWV3c18ucGFsZXR0ZS5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBhRWxlbS5hcHBlbmRDaGlsZChhcEVsZW0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBhdEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYignYXQnKSk7XG4gICAgICAgICAgICAgICAgYXRFbGVtLmFwcGVuZENoaWxkKHRoaXMuYWxwaGFWaWV3c18udGV4dC5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBhRWxlbS5hcHBlbmRDaGlsZChhdEVsZW0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChhRWxlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGFsbEZvY3VzYWJsZUVsZW1lbnRzKCkge1xuICAgICAgICAgICAgY29uc3QgZWxlbXMgPSBbXG4gICAgICAgICAgICAgICAgdGhpcy5zdlBhbGV0dGVWaWV3Xy5lbGVtZW50LFxuICAgICAgICAgICAgICAgIHRoaXMuaFBhbGV0dGVWaWV3Xy5lbGVtZW50LFxuICAgICAgICAgICAgICAgIHRoaXMudGV4dFZpZXdfLm1vZGVTZWxlY3RFbGVtZW50LFxuICAgICAgICAgICAgICAgIC4uLnRoaXMudGV4dFZpZXdfLnRleHRWaWV3cy5tYXAoKHYpID0+IHYuaW5wdXRFbGVtZW50KSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAodGhpcy5hbHBoYVZpZXdzXykge1xuICAgICAgICAgICAgICAgIGVsZW1zLnB1c2godGhpcy5hbHBoYVZpZXdzXy5wYWxldHRlLmVsZW1lbnQsIHRoaXMuYWxwaGFWaWV3c18udGV4dC5pbnB1dEVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVsZW1zO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VDb2xvcklucHV0UGFyYW1zKHBhcmFtcykge1xuICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgcmV0dXJuIHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgYWxwaGE6IHAub3B0aW9uYWwuYm9vbGVhbixcbiAgICAgICAgICAgIGV4cGFuZGVkOiBwLm9wdGlvbmFsLmJvb2xlYW4sXG4gICAgICAgICAgICBwaWNrZXI6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlUGlja2VyTGF5b3V0KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEJhc2VTdGVwRm9yQ29sb3IoZm9yQWxwaGEpIHtcbiAgICAgICAgcmV0dXJuIGZvckFscGhhID8gMC4xIDogMTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZSh0ZXh0LCBtYXhWYWx1ZSkge1xuICAgICAgICBjb25zdCBtID0gdGV4dC5tYXRjaCgvXiguKyklJC8pO1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbihwYXJzZUZsb2F0KHRleHQpLCBtYXhWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE1hdGgubWluKHBhcnNlRmxvYXQobVsxXSkgKiAwLjAxICogbWF4VmFsdWUsIG1heFZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgQU5HTEVfVE9fREVHX01BUCA9IHtcbiAgICAgICAgZGVnOiAoYW5nbGUpID0+IGFuZ2xlLFxuICAgICAgICBncmFkOiAoYW5nbGUpID0+IChhbmdsZSAqIDM2MCkgLyA0MDAsXG4gICAgICAgIHJhZDogKGFuZ2xlKSA9PiAoYW5nbGUgKiAzNjApIC8gKDIgKiBNYXRoLlBJKSxcbiAgICAgICAgdHVybjogKGFuZ2xlKSA9PiBhbmdsZSAqIDM2MCxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHBhcnNlQ3NzTnVtYmVyT3JBbmdsZSh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IG0gPSB0ZXh0Lm1hdGNoKC9eKFswLTkuXSs/KShkZWd8Z3JhZHxyYWR8dHVybikkLyk7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW5nbGUgPSBwYXJzZUZsb2F0KG1bMV0pO1xuICAgICAgICBjb25zdCB1bml0ID0gbVsyXTtcbiAgICAgICAgcmV0dXJuIEFOR0xFX1RPX0RFR19NQVBbdW5pdF0oYW5nbGUpO1xuICAgIH1cbiAgICBjb25zdCBOT1RBVElPTl9UT19QQVJTRVJfTUFQID0ge1xuICAgICAgICAnZnVuYy5yZ2InOiAodGV4dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbSA9IHRleHQubWF0Y2goL15yZ2JcXChcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKlxcKSQvKTtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcHMgPSBbXG4gICAgICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVsxXSwgMjU1KSxcbiAgICAgICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzJdLCAyNTUpLFxuICAgICAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bM10sIDI1NSksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgaWYgKGlzTmFOKGNvbXBzWzBdKSB8fCBpc05hTihjb21wc1sxXSkgfHwgaXNOYU4oY29tcHNbMl0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKGNvbXBzLCAncmdiJyk7XG4gICAgICAgIH0sXG4gICAgICAgICdmdW5jLnJnYmEnOiAodGV4dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbSA9IHRleHQubWF0Y2goL15yZ2JhXFwoXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKlxcKSQvKTtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcHMgPSBbXG4gICAgICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVsxXSwgMjU1KSxcbiAgICAgICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzJdLCAyNTUpLFxuICAgICAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bM10sIDI1NSksXG4gICAgICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVs0XSwgMSksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgaWYgKGlzTmFOKGNvbXBzWzBdKSB8fFxuICAgICAgICAgICAgICAgIGlzTmFOKGNvbXBzWzFdKSB8fFxuICAgICAgICAgICAgICAgIGlzTmFOKGNvbXBzWzJdKSB8fFxuICAgICAgICAgICAgICAgIGlzTmFOKGNvbXBzWzNdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihjb21wcywgJ3JnYicpO1xuICAgICAgICB9LFxuICAgICAgICAnZnVuYy5oc2wnOiAodGV4dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbSA9IHRleHQubWF0Y2goL15oc2xcXChcXHMqKFswLTlBLUZhLWYuXSsoPzpkZWd8Z3JhZHxyYWR8dHVybik/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqXFwpJC8pO1xuICAgICAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb21wcyA9IFtcbiAgICAgICAgICAgICAgICBwYXJzZUNzc051bWJlck9yQW5nbGUobVsxXSksXG4gICAgICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVsyXSwgMTAwKSxcbiAgICAgICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzNdLCAxMDApLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChpc05hTihjb21wc1swXSkgfHwgaXNOYU4oY29tcHNbMV0pIHx8IGlzTmFOKGNvbXBzWzJdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihjb21wcywgJ2hzbCcpO1xuICAgICAgICB9LFxuICAgICAgICAnZnVuYy5oc2xhJzogKHRleHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSB0ZXh0Lm1hdGNoKC9eaHNsYVxcKFxccyooWzAtOUEtRmEtZi5dKyg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKlxcKSQvKTtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcHMgPSBbXG4gICAgICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPckFuZ2xlKG1bMV0pLFxuICAgICAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bMl0sIDEwMCksXG4gICAgICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVszXSwgMTAwKSxcbiAgICAgICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzRdLCAxKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAoaXNOYU4oY29tcHNbMF0pIHx8XG4gICAgICAgICAgICAgICAgaXNOYU4oY29tcHNbMV0pIHx8XG4gICAgICAgICAgICAgICAgaXNOYU4oY29tcHNbMl0pIHx8XG4gICAgICAgICAgICAgICAgaXNOYU4oY29tcHNbM10pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKGNvbXBzLCAnaHNsJyk7XG4gICAgICAgIH0sXG4gICAgICAgICdoZXgucmdiJzogKHRleHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1SZ2IgPSB0ZXh0Lm1hdGNoKC9eIyhbMC05QS1GYS1mXSkoWzAtOUEtRmEtZl0pKFswLTlBLUZhLWZdKSQvKTtcbiAgICAgICAgICAgIGlmIChtUmdiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbMV0gKyBtUmdiWzFdLCAxNiksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbMl0gKyBtUmdiWzJdLCAxNiksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbM10gKyBtUmdiWzNdLCAxNiksXG4gICAgICAgICAgICAgICAgXSwgJ3JnYicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbVJyZ2diYiA9IHRleHQubWF0Y2goL14oPzojfDB4KShbMC05QS1GYS1mXXsyfSkoWzAtOUEtRmEtZl17Mn0pKFswLTlBLUZhLWZdezJ9KSQvKTtcbiAgICAgICAgICAgIGlmIChtUnJnZ2JiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1ScmdnYmJbMV0sIDE2KSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQobVJyZ2diYlsyXSwgMTYpLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChtUnJnZ2JiWzNdLCAxNiksXG4gICAgICAgICAgICAgICAgXSwgJ3JnYicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgICdoZXgucmdiYSc6ICh0ZXh0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtUmdiID0gdGV4dC5tYXRjaCgvXiM/KFswLTlBLUZhLWZdKShbMC05QS1GYS1mXSkoWzAtOUEtRmEtZl0pKFswLTlBLUZhLWZdKSQvKTtcbiAgICAgICAgICAgIGlmIChtUmdiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbMV0gKyBtUmdiWzFdLCAxNiksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbMl0gKyBtUmdiWzJdLCAxNiksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbM10gKyBtUmdiWzNdLCAxNiksXG4gICAgICAgICAgICAgICAgICAgIG1hcFJhbmdlKHBhcnNlSW50KG1SZ2JbNF0gKyBtUmdiWzRdLCAxNiksIDAsIDI1NSwgMCwgMSksXG4gICAgICAgICAgICAgICAgXSwgJ3JnYicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbVJyZ2diYiA9IHRleHQubWF0Y2goL14oPzojfDB4KT8oWzAtOUEtRmEtZl17Mn0pKFswLTlBLUZhLWZdezJ9KShbMC05QS1GYS1mXXsyfSkoWzAtOUEtRmEtZl17Mn0pJC8pO1xuICAgICAgICAgICAgaWYgKG1ScmdnYmIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKFtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQobVJyZ2diYlsxXSwgMTYpLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChtUnJnZ2JiWzJdLCAxNiksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1ScmdnYmJbM10sIDE2KSxcbiAgICAgICAgICAgICAgICAgICAgbWFwUmFuZ2UocGFyc2VJbnQobVJyZ2diYls0XSwgMTYpLCAwLCAyNTUsIDAsIDEpLFxuICAgICAgICAgICAgICAgIF0sICdyZ2InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0Q29sb3JOb3RhdGlvbih0ZXh0KSB7XG4gICAgICAgIGNvbnN0IG5vdGF0aW9ucyA9IE9iamVjdC5rZXlzKE5PVEFUSU9OX1RPX1BBUlNFUl9NQVApO1xuICAgICAgICByZXR1cm4gbm90YXRpb25zLnJlZHVjZSgocmVzdWx0LCBub3RhdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdWJwYXJzZXIgPSBOT1RBVElPTl9UT19QQVJTRVJfTUFQW25vdGF0aW9uXTtcbiAgICAgICAgICAgIHJldHVybiBzdWJwYXJzZXIodGV4dCkgPyBub3RhdGlvbiA6IG51bGw7XG4gICAgICAgIH0sIG51bGwpO1xuICAgIH1cbiAgICBjb25zdCBDb21wb3NpdGVDb2xvclBhcnNlciA9ICh0ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IG5vdGF0aW9uID0gZ2V0Q29sb3JOb3RhdGlvbih0ZXh0KTtcbiAgICAgICAgcmV0dXJuIG5vdGF0aW9uID8gTk9UQVRJT05fVE9fUEFSU0VSX01BUFtub3RhdGlvbl0odGV4dCkgOiBudWxsO1xuICAgIH07XG4gICAgZnVuY3Rpb24gaGFzQWxwaGFDb21wb25lbnQobm90YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIChub3RhdGlvbiA9PT0gJ2Z1bmMuaHNsYScgfHxcbiAgICAgICAgICAgIG5vdGF0aW9uID09PSAnZnVuYy5yZ2JhJyB8fFxuICAgICAgICAgICAgbm90YXRpb24gPT09ICdoZXgucmdiYScpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2xvckZyb21TdHJpbmcodmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IGN2ID0gQ29tcG9zaXRlQ29sb3JQYXJzZXIodmFsdWUpO1xuICAgICAgICAgICAgaWYgKGN2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN2O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBDb2xvci5ibGFjaygpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB6ZXJvZmlsbChjb21wKSB7XG4gICAgICAgIGNvbnN0IGhleCA9IGNvbnN0cmFpblJhbmdlKE1hdGguZmxvb3IoY29tcCksIDAsIDI1NSkudG9TdHJpbmcoMTYpO1xuICAgICAgICByZXR1cm4gaGV4Lmxlbmd0aCA9PT0gMSA/IGAwJHtoZXh9YCA6IGhleDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JUb0hleFJnYlN0cmluZyh2YWx1ZSwgcHJlZml4ID0gJyMnKSB7XG4gICAgICAgIGNvbnN0IGhleGVzID0gcmVtb3ZlQWxwaGFDb21wb25lbnQodmFsdWUuZ2V0Q29tcG9uZW50cygncmdiJykpXG4gICAgICAgICAgICAubWFwKHplcm9maWxsKVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICByZXR1cm4gYCR7cHJlZml4fSR7aGV4ZXN9YDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JUb0hleFJnYmFTdHJpbmcodmFsdWUsIHByZWZpeCA9ICcjJykge1xuICAgICAgICBjb25zdCByZ2JhQ29tcHMgPSB2YWx1ZS5nZXRDb21wb25lbnRzKCdyZ2InKTtcbiAgICAgICAgY29uc3QgaGV4ZXMgPSBbcmdiYUNvbXBzWzBdLCByZ2JhQ29tcHNbMV0sIHJnYmFDb21wc1syXSwgcmdiYUNvbXBzWzNdICogMjU1XVxuICAgICAgICAgICAgLm1hcCh6ZXJvZmlsbClcbiAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgcmV0dXJuIGAke3ByZWZpeH0ke2hleGVzfWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9GdW5jdGlvbmFsUmdiU3RyaW5nKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGNyZWF0ZU51bWJlckZvcm1hdHRlcigwKTtcbiAgICAgICAgY29uc3QgY29tcHMgPSByZW1vdmVBbHBoYUNvbXBvbmVudCh2YWx1ZS5nZXRDb21wb25lbnRzKCdyZ2InKSkubWFwKChjb21wKSA9PiBmb3JtYXR0ZXIoY29tcCkpO1xuICAgICAgICByZXR1cm4gYHJnYigke2NvbXBzLmpvaW4oJywgJyl9KWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9GdW5jdGlvbmFsUmdiYVN0cmluZyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBhRm9ybWF0dGVyID0gY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDIpO1xuICAgICAgICBjb25zdCByZ2JGb3JtYXR0ZXIgPSBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoMCk7XG4gICAgICAgIGNvbnN0IGNvbXBzID0gdmFsdWUuZ2V0Q29tcG9uZW50cygncmdiJykubWFwKChjb21wLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gaW5kZXggPT09IDMgPyBhRm9ybWF0dGVyIDogcmdiRm9ybWF0dGVyO1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlcihjb21wKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBgcmdiYSgke2NvbXBzLmpvaW4oJywgJyl9KWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9GdW5jdGlvbmFsSHNsU3RyaW5nKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlcnMgPSBbXG4gICAgICAgICAgICBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoMCksXG4gICAgICAgICAgICBmb3JtYXRQZXJjZW50YWdlLFxuICAgICAgICAgICAgZm9ybWF0UGVyY2VudGFnZSxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgY29tcHMgPSByZW1vdmVBbHBoYUNvbXBvbmVudCh2YWx1ZS5nZXRDb21wb25lbnRzKCdoc2wnKSkubWFwKChjb21wLCBpbmRleCkgPT4gZm9ybWF0dGVyc1tpbmRleF0oY29tcCkpO1xuICAgICAgICByZXR1cm4gYGhzbCgke2NvbXBzLmpvaW4oJywgJyl9KWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9GdW5jdGlvbmFsSHNsYVN0cmluZyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZXJzID0gW1xuICAgICAgICAgICAgY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDApLFxuICAgICAgICAgICAgZm9ybWF0UGVyY2VudGFnZSxcbiAgICAgICAgICAgIGZvcm1hdFBlcmNlbnRhZ2UsXG4gICAgICAgICAgICBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoMiksXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGNvbXBzID0gdmFsdWVcbiAgICAgICAgICAgIC5nZXRDb21wb25lbnRzKCdoc2wnKVxuICAgICAgICAgICAgLm1hcCgoY29tcCwgaW5kZXgpID0+IGZvcm1hdHRlcnNbaW5kZXhdKGNvbXApKTtcbiAgICAgICAgcmV0dXJuIGBoc2xhKCR7Y29tcHMuam9pbignLCAnKX0pYDtcbiAgICB9XG4gICAgY29uc3QgTk9UQVRJT05fVE9fU1RSSU5HSUZJRVJfTUFQID0ge1xuICAgICAgICAnZnVuYy5oc2wnOiBjb2xvclRvRnVuY3Rpb25hbEhzbFN0cmluZyxcbiAgICAgICAgJ2Z1bmMuaHNsYSc6IGNvbG9yVG9GdW5jdGlvbmFsSHNsYVN0cmluZyxcbiAgICAgICAgJ2Z1bmMucmdiJzogY29sb3JUb0Z1bmN0aW9uYWxSZ2JTdHJpbmcsXG4gICAgICAgICdmdW5jLnJnYmEnOiBjb2xvclRvRnVuY3Rpb25hbFJnYmFTdHJpbmcsXG4gICAgICAgICdoZXgucmdiJzogY29sb3JUb0hleFJnYlN0cmluZyxcbiAgICAgICAgJ2hleC5yZ2JhJzogY29sb3JUb0hleFJnYmFTdHJpbmcsXG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRDb2xvclN0cmluZ2lmaWVyKG5vdGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBOT1RBVElPTl9UT19TVFJJTkdJRklFUl9NQVBbbm90YXRpb25dO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRhID0gQ2xhc3NOYW1lKCdhcGwnKTtcbiAgICBjbGFzcyBBUGFsZXR0ZVZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlXyA9IHRoaXMub25WYWx1ZUNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZUNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGEoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRUYWJJbmRleCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgYmFyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGJhckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYSgnYicpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChiYXJFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbG9yRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRhKCdjJykpO1xuICAgICAgICAgICAgYmFyRWxlbS5hcHBlbmRDaGlsZChjb2xvckVsZW0pO1xuICAgICAgICAgICAgdGhpcy5jb2xvckVsZW1fID0gY29sb3JFbGVtO1xuICAgICAgICAgICAgY29uc3QgbWFya2VyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIG1hcmtlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYSgnbScpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChtYXJrZXJFbGVtKTtcbiAgICAgICAgICAgIHRoaXMubWFya2VyRWxlbV8gPSBtYXJrZXJFbGVtO1xuICAgICAgICAgICAgY29uc3QgcHJldmlld0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBwcmV2aWV3RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRhKCdwJykpO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5hcHBlbmRDaGlsZChwcmV2aWV3RWxlbSk7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdFbGVtXyA9IHByZXZpZXdFbGVtO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgY29uc3QgcmdiYUNvbXBzID0gYy5nZXRDb21wb25lbnRzKCdyZ2InKTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnRDb2xvciA9IG5ldyBDb2xvcihbcmdiYUNvbXBzWzBdLCByZ2JhQ29tcHNbMV0sIHJnYmFDb21wc1syXSwgMF0sICdyZ2InKTtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0Q29sb3IgPSBuZXcgQ29sb3IoW3JnYmFDb21wc1swXSwgcmdiYUNvbXBzWzFdLCByZ2JhQ29tcHNbMl0sIDI1NV0sICdyZ2InKTtcbiAgICAgICAgICAgIGNvbnN0IGdyYWRpZW50Q29tcHMgPSBbXG4gICAgICAgICAgICAgICAgJ3RvIHJpZ2h0JyxcbiAgICAgICAgICAgICAgICBjb2xvclRvRnVuY3Rpb25hbFJnYmFTdHJpbmcobGVmdENvbG9yKSxcbiAgICAgICAgICAgICAgICBjb2xvclRvRnVuY3Rpb25hbFJnYmFTdHJpbmcocmlnaHRDb2xvciksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgdGhpcy5jb2xvckVsZW1fLnN0eWxlLmJhY2tncm91bmQgPSBgbGluZWFyLWdyYWRpZW50KCR7Z3JhZGllbnRDb21wcy5qb2luKCcsJyl9KWA7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdFbGVtXy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvclRvRnVuY3Rpb25hbFJnYmFTdHJpbmcoYyk7XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gbWFwUmFuZ2UocmdiYUNvbXBzWzNdLCAwLCAxLCAwLCAxMDApO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5zdHlsZS5sZWZ0ID0gYCR7bGVmdH0lYDtcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQVBhbGV0dGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25LZXlEb3duXyA9IHRoaXMub25LZXlEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbktleVVwXyA9IHRoaXMub25LZXlVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyRG93bl8gPSB0aGlzLm9uUG9pbnRlckRvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlck1vdmVfID0gdGhpcy5vblBvaW50ZXJNb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJVcF8gPSB0aGlzLm9uUG9pbnRlclVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBBUGFsZXR0ZVZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfID0gbmV3IFBvaW50ZXJIYW5kbGVyKHRoaXMudmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdkb3duJywgdGhpcy5vblBvaW50ZXJEb3duXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbignbW92ZScsIHRoaXMub25Qb2ludGVyTW92ZV8pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ3VwJywgdGhpcy5vblBvaW50ZXJVcF8pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25LZXlEb3duXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25LZXlVcF8pO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZVBvaW50ZXJFdmVudF8oZCwgb3B0cykge1xuICAgICAgICAgICAgaWYgKCFkLnBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWxwaGEgPSBkLnBvaW50LnggLyBkLmJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgY29uc3QgW2gsIHMsIHZdID0gYy5nZXRDb21wb25lbnRzKCdoc3YnKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUobmV3IENvbG9yKFtoLCBzLCB2LCBhbHBoYV0sICdoc3YnKSwgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyRG93bl8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlck1vdmVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJVcF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbktleURvd25fKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBzdGVwID0gZ2V0U3RlcEZvcktleShnZXRCYXNlU3RlcEZvckNvbG9yKHRydWUpLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBbaCwgcywgdiwgYV0gPSBjLmdldENvbXBvbmVudHMoJ2hzdicpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZShuZXcgQ29sb3IoW2gsIHMsIHYsIGEgKyBzdGVwXSwgJ2hzdicpLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5VXBfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBzdGVwID0gZ2V0U3RlcEZvcktleShnZXRCYXNlU3RlcEZvckNvbG9yKHRydWUpLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlLnJhd1ZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSQ5ID0gQ2xhc3NOYW1lKCdjb2x0eHQnKTtcbiAgICBmdW5jdGlvbiBjcmVhdGVNb2RlU2VsZWN0RWxlbWVudChkb2MpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBbXG4gICAgICAgICAgICB7IHRleHQ6ICdSR0InLCB2YWx1ZTogJ3JnYicgfSxcbiAgICAgICAgICAgIHsgdGV4dDogJ0hTTCcsIHZhbHVlOiAnaHNsJyB9LFxuICAgICAgICAgICAgeyB0ZXh0OiAnSFNWJywgdmFsdWU6ICdoc3YnIH0sXG4gICAgICAgIF07XG4gICAgICAgIHNlbGVjdEVsZW0uYXBwZW5kQ2hpbGQoaXRlbXMucmVkdWNlKChmcmFnLCBpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcHRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuICAgICAgICAgICAgb3B0RWxlbS50ZXh0Q29udGVudCA9IGl0ZW0udGV4dDtcbiAgICAgICAgICAgIG9wdEVsZW0udmFsdWUgPSBpdGVtLnZhbHVlO1xuICAgICAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChvcHRFbGVtKTtcbiAgICAgICAgICAgIHJldHVybiBmcmFnO1xuICAgICAgICB9LCBkb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKSk7XG4gICAgICAgIHJldHVybiBzZWxlY3RFbGVtO1xuICAgIH1cbiAgICBjbGFzcyBDb2xvclRleHRWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ5KCkpO1xuICAgICAgICAgICAgY29uc3QgbW9kZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBtb2RlRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ5KCdtJykpO1xuICAgICAgICAgICAgdGhpcy5tb2RlRWxlbV8gPSBjcmVhdGVNb2RlU2VsZWN0RWxlbWVudChkb2MpO1xuICAgICAgICAgICAgdGhpcy5tb2RlRWxlbV8uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkOSgnbXMnKSk7XG4gICAgICAgICAgICBtb2RlRWxlbS5hcHBlbmRDaGlsZCh0aGlzLm1vZGVTZWxlY3RFbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IG1vZGVNYXJrZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgbW9kZU1hcmtlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkOSgnbW0nKSk7XG4gICAgICAgICAgICBtb2RlTWFya2VyRWxlbS5hcHBlbmRDaGlsZChjcmVhdGVTdmdJY29uRWxlbWVudChkb2MsICdkcm9wZG93bicpKTtcbiAgICAgICAgICAgIG1vZGVFbGVtLmFwcGVuZENoaWxkKG1vZGVNYXJrZXJFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChtb2RlRWxlbSk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0c0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0ZXh0c0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkOSgndycpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0c0VsZW0pO1xuICAgICAgICAgICAgdGhpcy50ZXh0c0VsZW1fID0gdGV4dHNFbGVtO1xuICAgICAgICAgICAgdGhpcy50ZXh0Vmlld3NfID0gY29uZmlnLnRleHRWaWV3cztcbiAgICAgICAgICAgIHRoaXMuYXBwbHlUZXh0Vmlld3NfKCk7XG4gICAgICAgICAgICBiaW5kVmFsdWUoY29uZmlnLmNvbG9yTW9kZSwgKG1vZGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVFbGVtXy52YWx1ZSA9IG1vZGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbW9kZVNlbGVjdEVsZW1lbnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlRWxlbV87XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHRleHRWaWV3cygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHRWaWV3c187XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHRleHRWaWV3cyh0ZXh0Vmlld3MpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dFZpZXdzXyA9IHRleHRWaWV3cztcbiAgICAgICAgICAgIHRoaXMuYXBwbHlUZXh0Vmlld3NfKCk7XG4gICAgICAgIH1cbiAgICAgICAgYXBwbHlUZXh0Vmlld3NfKCkge1xuICAgICAgICAgICAgcmVtb3ZlQ2hpbGRFbGVtZW50cyh0aGlzLnRleHRzRWxlbV8pO1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgICAgICB0aGlzLnRleHRWaWV3c18uZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGNvbXBFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDkoJ2MnKSk7XG4gICAgICAgICAgICAgICAgY29tcEVsZW0uYXBwZW5kQ2hpbGQodi5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRzRWxlbV8uYXBwZW5kQ2hpbGQoY29tcEVsZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBGT1JNQVRURVIgPSBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoMCk7XG4gICAgY29uc3QgTU9ERV9UT19DT05TVFJBSU5UX01BUCA9IHtcbiAgICAgICAgcmdiOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlQ29uc3RyYWludCh7IG1pbjogMCwgbWF4OiAyNTUgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGhzbDogKGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaW5kZXggPT09IDBcbiAgICAgICAgICAgICAgICA/IG5ldyBSYW5nZUNvbnN0cmFpbnQoeyBtaW46IDAsIG1heDogMzYwIH0pXG4gICAgICAgICAgICAgICAgOiBuZXcgUmFuZ2VDb25zdHJhaW50KHsgbWluOiAwLCBtYXg6IDEwMCB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgaHN2OiAoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpbmRleCA9PT0gMFxuICAgICAgICAgICAgICAgID8gbmV3IFJhbmdlQ29uc3RyYWludCh7IG1pbjogMCwgbWF4OiAzNjAgfSlcbiAgICAgICAgICAgICAgICA6IG5ldyBSYW5nZUNvbnN0cmFpbnQoeyBtaW46IDAsIG1heDogMTAwIH0pO1xuICAgICAgICB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcihkb2MsIGNvbmZpZywgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOdW1iZXJUZXh0Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgIGFycmF5UG9zaXRpb246IGluZGV4ID09PSAwID8gJ2ZzdCcgOiBpbmRleCA9PT0gMyAtIDEgPyAnbHN0JyA6ICdtaWQnLFxuICAgICAgICAgICAgYmFzZVN0ZXA6IGdldEJhc2VTdGVwRm9yQ29sb3IoZmFsc2UpLFxuICAgICAgICAgICAgcGFyc2VyOiBjb25maWcucGFyc2VyLFxuICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgIGRyYWdnaW5nU2NhbGU6IDEsXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBGT1JNQVRURVIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHZhbHVlOiBjcmVhdGVWYWx1ZSgwLCB7XG4gICAgICAgICAgICAgICAgY29uc3RyYWludDogTU9ERV9UT19DT05TVFJBSU5UX01BUFtjb25maWcuY29sb3JNb2RlXShpbmRleCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsYXNzIENvbG9yVGV4dENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbk1vZGVTZWxlY3RDaGFuZ2VfID0gdGhpcy5vbk1vZGVTZWxlY3RDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnBhcnNlcl8gPSBjb25maWcucGFyc2VyO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMuY29sb3JNb2RlID0gY3JlYXRlVmFsdWUodGhpcy52YWx1ZS5yYXdWYWx1ZS5tb2RlKTtcbiAgICAgICAgICAgIHRoaXMuY2NzXyA9IHRoaXMuY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcnNfKGRvYyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgQ29sb3JUZXh0Vmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBjb2xvck1vZGU6IHRoaXMuY29sb3JNb2RlLFxuICAgICAgICAgICAgICAgIHRleHRWaWV3czogW3RoaXMuY2NzX1swXS52aWV3LCB0aGlzLmNjc19bMV0udmlldywgdGhpcy5jY3NfWzJdLnZpZXddLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcubW9kZVNlbGVjdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5vbk1vZGVTZWxlY3RDaGFuZ2VfKTtcbiAgICAgICAgfVxuICAgICAgICBjcmVhdGVDb21wb25lbnRDb250cm9sbGVyc18oZG9jKSB7XG4gICAgICAgICAgICBjb25zdCBjYyA9IHtcbiAgICAgICAgICAgICAgICBjb2xvck1vZGU6IHRoaXMuY29sb3JNb2RlLnJhd1ZhbHVlLFxuICAgICAgICAgICAgICAgIHBhcnNlcjogdGhpcy5wYXJzZXJfLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgY2NzID0gW1xuICAgICAgICAgICAgICAgIGNyZWF0ZUNvbXBvbmVudENvbnRyb2xsZXIoZG9jLCBjYywgMCksXG4gICAgICAgICAgICAgICAgY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcihkb2MsIGNjLCAxKSxcbiAgICAgICAgICAgICAgICBjcmVhdGVDb21wb25lbnRDb250cm9sbGVyKGRvYywgY2MsIDIpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGNjcy5mb3JFYWNoKChjcywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25uZWN0VmFsdWVzKHtcbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5OiBjcy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZm9yd2FyZDogKHApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwLnJhd1ZhbHVlLmdldENvbXBvbmVudHModGhpcy5jb2xvck1vZGUucmF3VmFsdWUpW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYmFja3dhcmQ6IChwLCBzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwaWNrZWRNb2RlID0gdGhpcy5jb2xvck1vZGUucmF3VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wcyA9IHAucmF3VmFsdWUuZ2V0Q29tcG9uZW50cyhwaWNrZWRNb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBzW2luZGV4XSA9IHMucmF3VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKGFwcGVuZEFscGhhQ29tcG9uZW50KHJlbW92ZUFscGhhQ29tcG9uZW50KGNvbXBzKSwgY29tcHNbM10pLCBwaWNrZWRNb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGNjcztcbiAgICAgICAgfVxuICAgICAgICBvbk1vZGVTZWxlY3RDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RFbGVtID0gZXYuY3VycmVudFRhcmdldDtcbiAgICAgICAgICAgIHRoaXMuY29sb3JNb2RlLnJhd1ZhbHVlID0gc2VsZWN0RWxlbS52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2NzXyA9IHRoaXMuY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcnNfKHRoaXMudmlldy5lbGVtZW50Lm93bmVyRG9jdW1lbnQpO1xuICAgICAgICAgICAgdGhpcy52aWV3LnRleHRWaWV3cyA9IFtcbiAgICAgICAgICAgICAgICB0aGlzLmNjc19bMF0udmlldyxcbiAgICAgICAgICAgICAgICB0aGlzLmNjc19bMV0udmlldyxcbiAgICAgICAgICAgICAgICB0aGlzLmNjc19bMl0udmlldyxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkOCA9IENsYXNzTmFtZSgnaHBsJyk7XG4gICAgY2xhc3MgSFBhbGV0dGVWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ4KCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kVGFiSW5kZXgodGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbG9yRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ4KCdjJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGNvbG9yRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBtYXJrZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgbWFya2VyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ4KCdtJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKG1hcmtlckVsZW0pO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXyA9IG1hcmtlckVsZW07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfKCkge1xuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBbaF0gPSBjLmdldENvbXBvbmVudHMoJ2hzdicpO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvclRvRnVuY3Rpb25hbFJnYlN0cmluZyhuZXcgQ29sb3IoW2gsIDEwMCwgMTAwXSwgJ2hzdicpKTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBtYXBSYW5nZShoLCAwLCAzNjAsIDAsIDEwMCk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fSVgO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBIUGFsZXR0ZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbktleURvd25fID0gdGhpcy5vbktleURvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uS2V5VXBfID0gdGhpcy5vbktleVVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJEb3duXyA9IHRoaXMub25Qb2ludGVyRG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyTW92ZV8gPSB0aGlzLm9uUG9pbnRlck1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlclVwXyA9IHRoaXMub25Qb2ludGVyVXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IEhQYWxldHRlVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8gPSBuZXcgUG9pbnRlckhhbmRsZXIodGhpcy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ2Rvd24nLCB0aGlzLm9uUG9pbnRlckRvd25fKTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdtb3ZlJywgdGhpcy5vblBvaW50ZXJNb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbigndXAnLCB0aGlzLm9uUG9pbnRlclVwXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbktleURvd25fKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5vbktleVVwXyk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlUG9pbnRlckV2ZW50XyhkLCBvcHRzKSB7XG4gICAgICAgICAgICBpZiAoIWQucG9pbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBodWUgPSBtYXBSYW5nZShjb25zdHJhaW5SYW5nZShkLnBvaW50LngsIDAsIGQuYm91bmRzLndpZHRoKSwgMCwgZC5ib3VuZHMud2lkdGgsIDAsIDM1OSk7XG4gICAgICAgICAgICBjb25zdCBjID0gdGhpcy52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IFssIHMsIHYsIGFdID0gYy5nZXRDb21wb25lbnRzKCdoc3YnKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUobmV3IENvbG9yKFtodWUsIHMsIHYsIGFdLCAnaHN2JyksIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlckRvd25fKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJNb3ZlXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyVXBfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25LZXlEb3duXyhldikge1xuICAgICAgICAgICAgY29uc3Qgc3RlcCA9IGdldFN0ZXBGb3JLZXkoZ2V0QmFzZVN0ZXBGb3JDb2xvcihmYWxzZSksIGdldEhvcml6b250YWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgaWYgKHN0ZXAgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjID0gdGhpcy52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IFtoLCBzLCB2LCBhXSA9IGMuZ2V0Q29tcG9uZW50cygnaHN2Jyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKG5ldyBDb2xvcihbaCArIHN0ZXAsIHMsIHYsIGFdLCAnaHN2JyksIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25LZXlVcF8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRTdGVwRm9yS2V5KGdldEJhc2VTdGVwRm9yQ29sb3IoZmFsc2UpLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlLnJhd1ZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSQ3ID0gQ2xhc3NOYW1lKCdzdnAnKTtcbiAgICBjb25zdCBDQU5WQVNfUkVTT0wgPSA2NDtcbiAgICBjbGFzcyBTdlBhbGV0dGVWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ3KCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kVGFiSW5kZXgodGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGNhbnZhc0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgICAgICBjYW52YXNFbGVtLmhlaWdodCA9IENBTlZBU19SRVNPTDtcbiAgICAgICAgICAgIGNhbnZhc0VsZW0ud2lkdGggPSBDQU5WQVNfUkVTT0w7XG4gICAgICAgICAgICBjYW52YXNFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDcoJ2MnKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoY2FudmFzRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmNhbnZhc0VsZW1lbnQgPSBjYW52YXNFbGVtO1xuICAgICAgICAgICAgY29uc3QgbWFya2VyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIG1hcmtlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNygnbScpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChtYXJrZXJFbGVtKTtcbiAgICAgICAgICAgIHRoaXMubWFya2VyRWxlbV8gPSBtYXJrZXJFbGVtO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IGdldENhbnZhc0NvbnRleHQodGhpcy5jYW52YXNFbGVtZW50KTtcbiAgICAgICAgICAgIGlmICghY3R4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBoc3ZDb21wcyA9IGMuZ2V0Q29tcG9uZW50cygnaHN2Jyk7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuY2FudmFzRWxlbWVudC53aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuY2FudmFzRWxlbWVudC5oZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCBpbWdEYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBpbWdEYXRhLmRhdGE7XG4gICAgICAgICAgICBmb3IgKGxldCBpeSA9IDA7IGl5IDwgaGVpZ2h0OyBpeSsrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXggPSAwOyBpeCA8IHdpZHRoOyBpeCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSBtYXBSYW5nZShpeCwgMCwgd2lkdGgsIDAsIDEwMCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBtYXBSYW5nZShpeSwgMCwgaGVpZ2h0LCAxMDAsIDApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZ2JDb21wcyA9IGhzdlRvUmdiKGhzdkNvbXBzWzBdLCBzLCB2KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaSA9IChpeSAqIHdpZHRoICsgaXgpICogNDtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHJnYkNvbXBzWzBdO1xuICAgICAgICAgICAgICAgICAgICBkYXRhW2kgKyAxXSA9IHJnYkNvbXBzWzFdO1xuICAgICAgICAgICAgICAgICAgICBkYXRhW2kgKyAyXSA9IHJnYkNvbXBzWzJdO1xuICAgICAgICAgICAgICAgICAgICBkYXRhW2kgKyAzXSA9IDI1NTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdHgucHV0SW1hZ2VEYXRhKGltZ0RhdGEsIDAsIDApO1xuICAgICAgICAgICAgY29uc3QgbGVmdCA9IG1hcFJhbmdlKGhzdkNvbXBzWzFdLCAwLCAxMDAsIDAsIDEwMCk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fSVgO1xuICAgICAgICAgICAgY29uc3QgdG9wID0gbWFwUmFuZ2UoaHN2Q29tcHNbMl0sIDAsIDEwMCwgMTAwLCAwKTtcbiAgICAgICAgICAgIHRoaXMubWFya2VyRWxlbV8uc3R5bGUudG9wID0gYCR7dG9wfSVgO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBTdlBhbGV0dGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25LZXlEb3duXyA9IHRoaXMub25LZXlEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbktleVVwXyA9IHRoaXMub25LZXlVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyRG93bl8gPSB0aGlzLm9uUG9pbnRlckRvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlck1vdmVfID0gdGhpcy5vblBvaW50ZXJNb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJVcF8gPSB0aGlzLm9uUG9pbnRlclVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBTdlBhbGV0dGVWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXyA9IG5ldyBQb2ludGVySGFuZGxlcih0aGlzLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbignZG93bicsIHRoaXMub25Qb2ludGVyRG93bl8pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ21vdmUnLCB0aGlzLm9uUG9pbnRlck1vdmVfKTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCd1cCcsIHRoaXMub25Qb2ludGVyVXBfKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uS2V5RG93bl8pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLm9uS2V5VXBfKTtcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVQb2ludGVyRXZlbnRfKGQsIG9wdHMpIHtcbiAgICAgICAgICAgIGlmICghZC5wb2ludCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNhdHVyYXRpb24gPSBtYXBSYW5nZShkLnBvaW50LngsIDAsIGQuYm91bmRzLndpZHRoLCAwLCAxMDApO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtYXBSYW5nZShkLnBvaW50LnksIDAsIGQuYm91bmRzLmhlaWdodCwgMTAwLCAwKTtcbiAgICAgICAgICAgIGNvbnN0IFtoLCAsICwgYV0gPSB0aGlzLnZhbHVlLnJhd1ZhbHVlLmdldENvbXBvbmVudHMoJ2hzdicpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZShuZXcgQ29sb3IoW2gsIHNhdHVyYXRpb24sIHZhbHVlLCBhXSwgJ2hzdicpLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyTW92ZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlclVwXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5RG93bl8oZXYpIHtcbiAgICAgICAgICAgIGlmIChpc0Fycm93S2V5KGV2LmtleSkpIHtcbiAgICAgICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgW2gsIHMsIHYsIGFdID0gdGhpcy52YWx1ZS5yYXdWYWx1ZS5nZXRDb21wb25lbnRzKCdoc3YnKTtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VTdGVwID0gZ2V0QmFzZVN0ZXBGb3JDb2xvcihmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCBkcyA9IGdldFN0ZXBGb3JLZXkoYmFzZVN0ZXAsIGdldEhvcml6b250YWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgY29uc3QgZHYgPSBnZXRTdGVwRm9yS2V5KGJhc2VTdGVwLCBnZXRWZXJ0aWNhbFN0ZXBLZXlzKGV2KSk7XG4gICAgICAgICAgICBpZiAoZHMgPT09IDAgJiYgZHYgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKG5ldyBDb2xvcihbaCwgcyArIGRzLCB2ICsgZHYsIGFdLCAnaHN2JyksIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25LZXlVcF8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VTdGVwID0gZ2V0QmFzZVN0ZXBGb3JDb2xvcihmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCBkcyA9IGdldFN0ZXBGb3JLZXkoYmFzZVN0ZXAsIGdldEhvcml6b250YWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgY29uc3QgZHYgPSBnZXRTdGVwRm9yS2V5KGJhc2VTdGVwLCBnZXRWZXJ0aWNhbFN0ZXBLZXlzKGV2KSk7XG4gICAgICAgICAgICBpZiAoZHMgPT09IDAgJiYgZHYgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKHRoaXMudmFsdWUucmF3VmFsdWUsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQ29sb3JQaWNrZXJDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLmhQYWxldHRlQ18gPSBuZXcgSFBhbGV0dGVDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc3ZQYWxldHRlQ18gPSBuZXcgU3ZQYWxldHRlQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmFscGhhSWNzXyA9IGNvbmZpZy5zdXBwb3J0c0FscGhhXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIHBhbGV0dGU6IG5ldyBBUGFsZXR0ZUNvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBuZXcgTnVtYmVyVGV4dENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXI6IHBhcnNlTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVN0ZXA6IDAuMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmFnZ2luZ1NjYWxlOiAwLjAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY3JlYXRlVmFsdWUoMCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQ6IG5ldyBSYW5nZUNvbnN0cmFpbnQoeyBtaW46IDAsIG1heDogMSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGlmICh0aGlzLmFscGhhSWNzXykge1xuICAgICAgICAgICAgICAgIGNvbm5lY3RWYWx1ZXMoe1xuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5OiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnk6IHRoaXMuYWxwaGFJY3NfLnRleHQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGZvcndhcmQ6IChwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcC5yYXdWYWx1ZS5nZXRDb21wb25lbnRzKClbM107XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGJhY2t3YXJkOiAocCwgcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcHMgPSBwLnJhd1ZhbHVlLmdldENvbXBvbmVudHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBzWzNdID0gcy5yYXdWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IoY29tcHMsIHAucmF3VmFsdWUubW9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRleHRDXyA9IG5ldyBDb2xvclRleHRDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIHBhcnNlcjogcGFyc2VOdW1iZXIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IENvbG9yUGlja2VyVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBhbHBoYVZpZXdzOiB0aGlzLmFscGhhSWNzX1xuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhbGV0dGU6IHRoaXMuYWxwaGFJY3NfLnBhbGV0dGUudmlldyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMuYWxwaGFJY3NfLnRleHQudmlldyxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgaFBhbGV0dGVWaWV3OiB0aGlzLmhQYWxldHRlQ18udmlldyxcbiAgICAgICAgICAgICAgICBzdXBwb3J0c0FscGhhOiBjb25maWcuc3VwcG9ydHNBbHBoYSxcbiAgICAgICAgICAgICAgICBzdlBhbGV0dGVWaWV3OiB0aGlzLnN2UGFsZXR0ZUNfLnZpZXcsXG4gICAgICAgICAgICAgICAgdGV4dFZpZXc6IHRoaXMudGV4dENfLnZpZXcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdGV4dENvbnRyb2xsZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0Q187XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkNiA9IENsYXNzTmFtZSgnY29sc3cnKTtcbiAgICBjbGFzcyBDb2xvclN3YXRjaFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlXyA9IHRoaXMub25WYWx1ZUNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGNvbmZpZy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNigpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBzd2F0Y2hFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgc3dhdGNoRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ2KCdzdycpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChzd2F0Y2hFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuc3dhdGNoRWxlbV8gPSBzd2F0Y2hFbGVtO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgICAgIGJ1dHRvbkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNignYicpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKGJ1dHRvbkVsZW0pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGJ1dHRvbkVsZW0pO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50ID0gYnV0dG9uRWxlbTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICB0aGlzLnN3YXRjaEVsZW1fLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yVG9IZXhSZ2JhU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQ29sb3JTd2F0Y2hDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgQ29sb3JTd2F0Y2hWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIENvbG9yQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uQnV0dG9uQmx1cl8gPSB0aGlzLm9uQnV0dG9uQmx1cl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25CdXR0b25DbGlja18gPSB0aGlzLm9uQnV0dG9uQ2xpY2tfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9wdXBDaGlsZEJsdXJfID0gdGhpcy5vblBvcHVwQ2hpbGRCbHVyXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvcHVwQ2hpbGRLZXlkb3duXyA9IHRoaXMub25Qb3B1cENoaWxkS2V5ZG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLmZvbGRhYmxlXyA9IEZvbGRhYmxlLmNyZWF0ZShjb25maWcuZXhwYW5kZWQpO1xuICAgICAgICAgICAgdGhpcy5zd2F0Y2hDXyA9IG5ldyBDb2xvclN3YXRjaENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uRWxlbSA9IHRoaXMuc3dhdGNoQ18udmlldy5idXR0b25FbGVtZW50O1xuICAgICAgICAgICAgYnV0dG9uRWxlbS5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5vbkJ1dHRvbkJsdXJfKTtcbiAgICAgICAgICAgIGJ1dHRvbkVsZW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uQnV0dG9uQ2xpY2tfKTtcbiAgICAgICAgICAgIHRoaXMudGV4dENfID0gbmV3IFRleHRDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIHBhcnNlcjogY29uZmlnLnBhcnNlcixcbiAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY29uZmlnLmZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgQ29sb3JWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIGZvbGRhYmxlOiB0aGlzLmZvbGRhYmxlXyxcbiAgICAgICAgICAgICAgICBwaWNrZXJMYXlvdXQ6IGNvbmZpZy5waWNrZXJMYXlvdXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy5zd2F0Y2hFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuc3dhdGNoQ18udmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMudmlldy50ZXh0RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnRleHRDXy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5wb3BDXyA9XG4gICAgICAgICAgICAgICAgY29uZmlnLnBpY2tlckxheW91dCA9PT0gJ3BvcHVwJ1xuICAgICAgICAgICAgICAgICAgICA/IG5ldyBQb3B1cENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBwaWNrZXJDID0gbmV3IENvbG9yUGlja2VyQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBzdXBwb3J0c0FscGhhOiBjb25maWcuc3VwcG9ydHNBbHBoYSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwaWNrZXJDLnZpZXcuYWxsRm9jdXNhYmxlRWxlbWVudHMuZm9yRWFjaCgoZWxlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMub25Qb3B1cENoaWxkQmx1cl8pO1xuICAgICAgICAgICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25Qb3B1cENoaWxkS2V5ZG93bl8pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnBpY2tlckNfID0gcGlja2VyQztcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcENfKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3LmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5wb3BDXy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMucG9wQ18udmlldy5lbGVtZW50LmFwcGVuZENoaWxkKHBpY2tlckMudmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb25uZWN0VmFsdWVzKHtcbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeTogdGhpcy5mb2xkYWJsZV8udmFsdWUoJ2V4cGFuZGVkJyksXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZGFyeTogdGhpcy5wb3BDXy5zaG93cyxcbiAgICAgICAgICAgICAgICAgICAgZm9yd2FyZDogKHApID0+IHAucmF3VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGJhY2t3YXJkOiAoXywgcykgPT4gcy5yYXdWYWx1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudmlldy5waWNrZXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3LnBpY2tlckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5waWNrZXJDXy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGJpbmRGb2xkYWJsZSh0aGlzLmZvbGRhYmxlXywgdGhpcy52aWV3LnBpY2tlckVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdldCB0ZXh0Q29udHJvbGxlcigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHRDXztcbiAgICAgICAgfVxuICAgICAgICBvbkJ1dHRvbkJsdXJfKGUpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5wb3BDXykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLnZpZXcuZWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IG5leHRUYXJnZXQgPSBmb3JjZUNhc3QoZS5yZWxhdGVkVGFyZ2V0KTtcbiAgICAgICAgICAgIGlmICghbmV4dFRhcmdldCB8fCAhZWxlbS5jb250YWlucyhuZXh0VGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wQ18uc2hvd3MucmF3VmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvbkJ1dHRvbkNsaWNrXygpIHtcbiAgICAgICAgICAgIHRoaXMuZm9sZGFibGVfLnNldCgnZXhwYW5kZWQnLCAhdGhpcy5mb2xkYWJsZV8uZ2V0KCdleHBhbmRlZCcpKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvbGRhYmxlXy5nZXQoJ2V4cGFuZGVkJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlckNfLnZpZXcuYWxsRm9jdXNhYmxlRWxlbWVudHNbMF0uZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblBvcHVwQ2hpbGRCbHVyXyhldikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBvcENfKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZWxlbSA9IHRoaXMucG9wQ18udmlldy5lbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgbmV4dFRhcmdldCA9IGZpbmROZXh0VGFyZ2V0KGV2KTtcbiAgICAgICAgICAgIGlmIChuZXh0VGFyZ2V0ICYmIGVsZW0uY29udGFpbnMobmV4dFRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV4dFRhcmdldCAmJlxuICAgICAgICAgICAgICAgIG5leHRUYXJnZXQgPT09IHRoaXMuc3dhdGNoQ18udmlldy5idXR0b25FbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgIXN1cHBvcnRzVG91Y2goZWxlbS5vd25lckRvY3VtZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucG9wQ18uc2hvd3MucmF3VmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBvblBvcHVwQ2hpbGRLZXlkb3duXyhldikge1xuICAgICAgICAgICAgaWYgKHRoaXMucG9wQ18pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXYua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcENfLnNob3dzLnJhd1ZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy52aWV3LnBpY2tlckVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXYua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN3YXRjaENfLnZpZXcuYnV0dG9uRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbG9yRnJvbU9iamVjdCh2YWx1ZSkge1xuICAgICAgICBpZiAoQ29sb3IuaXNDb2xvck9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBDb2xvci5mcm9tT2JqZWN0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQ29sb3IuYmxhY2soKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JUb1JnYk51bWJlcih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gcmVtb3ZlQWxwaGFDb21wb25lbnQodmFsdWUuZ2V0Q29tcG9uZW50cygncmdiJykpLnJlZHVjZSgocmVzdWx0LCBjb21wKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKHJlc3VsdCA8PCA4KSB8IChNYXRoLmZsb29yKGNvbXApICYgMHhmZik7XG4gICAgICAgIH0sIDApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2xvclRvUmdiYU51bWJlcih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gKHZhbHVlLmdldENvbXBvbmVudHMoJ3JnYicpLnJlZHVjZSgocmVzdWx0LCBjb21wLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaGV4ID0gTWF0aC5mbG9vcihpbmRleCA9PT0gMyA/IGNvbXAgKiAyNTUgOiBjb21wKSAmIDB4ZmY7XG4gICAgICAgICAgICByZXR1cm4gKHJlc3VsdCA8PCA4KSB8IGhleDtcbiAgICAgICAgfSwgMCkgPj4+IDApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBudW1iZXJUb1JnYkNvbG9yKG51bSkge1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yKFsobnVtID4+IDE2KSAmIDB4ZmYsIChudW0gPj4gOCkgJiAweGZmLCBudW0gJiAweGZmXSwgJ3JnYicpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBudW1iZXJUb1JnYmFDb2xvcihudW0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbXG4gICAgICAgICAgICAobnVtID4+IDI0KSAmIDB4ZmYsXG4gICAgICAgICAgICAobnVtID4+IDE2KSAmIDB4ZmYsXG4gICAgICAgICAgICAobnVtID4+IDgpICYgMHhmZixcbiAgICAgICAgICAgIG1hcFJhbmdlKG51bSAmIDB4ZmYsIDAsIDI1NSwgMCwgMSksXG4gICAgICAgIF0sICdyZ2InKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JGcm9tUmdiTnVtYmVyKHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gQ29sb3IuYmxhY2soKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVtYmVyVG9SZ2JDb2xvcih2YWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yRnJvbVJnYmFOdW1iZXIodmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBDb2xvci5ibGFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudW1iZXJUb1JnYmFDb2xvcih2YWx1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQ29sb3JTdHJpbmdXcml0ZXIobm90YXRpb24pIHtcbiAgICAgICAgY29uc3Qgc3RyaW5naWZ5ID0gZ2V0Q29sb3JTdHJpbmdpZmllcihub3RhdGlvbik7XG4gICAgICAgIHJldHVybiAodGFyZ2V0LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgd3JpdGVQcmltaXRpdmUodGFyZ2V0LCBzdHJpbmdpZnkodmFsdWUpKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ29sb3JOdW1iZXJXcml0ZXIoc3VwcG9ydHNBbHBoYSkge1xuICAgICAgICBjb25zdCBjb2xvclRvTnVtYmVyID0gc3VwcG9ydHNBbHBoYSA/IGNvbG9yVG9SZ2JhTnVtYmVyIDogY29sb3JUb1JnYk51bWJlcjtcbiAgICAgICAgcmV0dXJuICh0YXJnZXQsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB3cml0ZVByaW1pdGl2ZSh0YXJnZXQsIGNvbG9yVG9OdW1iZXIodmFsdWUpKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd3JpdGVSZ2JhQ29sb3JPYmplY3QodGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBvYmogPSB2YWx1ZS50b1JnYmFPYmplY3QoKTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3InLCBvYmoucik7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCdnJywgb2JqLmcpO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgnYicsIG9iai5iKTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ2EnLCBvYmouYSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdyaXRlUmdiQ29sb3JPYmplY3QodGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBvYmogPSB2YWx1ZS50b1JnYmFPYmplY3QoKTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3InLCBvYmoucik7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCdnJywgb2JqLmcpO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgnYicsIG9iai5iKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ29sb3JPYmplY3RXcml0ZXIoc3VwcG9ydHNBbHBoYSkge1xuICAgICAgICByZXR1cm4gc3VwcG9ydHNBbHBoYSA/IHdyaXRlUmdiYUNvbG9yT2JqZWN0IDogd3JpdGVSZ2JDb2xvck9iamVjdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzaG91bGRTdXBwb3J0QWxwaGEkMShpbnB1dFBhcmFtcykge1xuICAgICAgICByZXR1cm4gJ2FscGhhJyBpbiBpbnB1dFBhcmFtcyAmJiBpbnB1dFBhcmFtcy5hbHBoYSA9PT0gdHJ1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRm9ybWF0dGVyJDEoc3VwcG9ydHNBbHBoYSkge1xuICAgICAgICByZXR1cm4gc3VwcG9ydHNBbHBoYVxuICAgICAgICAgICAgPyAodikgPT4gY29sb3JUb0hleFJnYmFTdHJpbmcodiwgJzB4JylcbiAgICAgICAgICAgIDogKHYpID0+IGNvbG9yVG9IZXhSZ2JTdHJpbmcodiwgJzB4Jyk7XG4gICAgfVxuICAgIGNvbnN0IE51bWJlckNvbG9ySW5wdXRQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnaW5wdXQtY29sb3ItbnVtYmVyJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghKCd2aWV3JyBpbiBwYXJhbXMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyYW1zLnZpZXcgIT09ICdjb2xvcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQ29sb3JJbnB1dFBhcmFtcyhwYXJhbXMpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICByZWFkZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNob3VsZFN1cHBvcnRBbHBoYSQxKGFyZ3MucGFyYW1zKVxuICAgICAgICAgICAgICAgICAgICA/IGNvbG9yRnJvbVJnYmFOdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgOiBjb2xvckZyb21SZ2JOdW1iZXI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXF1YWxzOiBDb2xvci5lcXVhbHMsXG4gICAgICAgICAgICB3cml0ZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbG9yTnVtYmVyV3JpdGVyKHNob3VsZFN1cHBvcnRBbHBoYSQxKGFyZ3MucGFyYW1zKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3VwcG9ydHNBbHBoYSA9IHNob3VsZFN1cHBvcnRBbHBoYSQxKGFyZ3MucGFyYW1zKTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gJ2V4cGFuZGVkJyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLmV4cGFuZGVkIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgcGlja2VyID0gJ3BpY2tlcicgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5waWNrZXIgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGV4cGFuZGVkICE9PSBudWxsICYmIGV4cGFuZGVkICE9PSB2b2lkIDAgPyBleHBhbmRlZCA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY3JlYXRlRm9ybWF0dGVyJDEoc3VwcG9ydHNBbHBoYSksXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBDb21wb3NpdGVDb2xvclBhcnNlcixcbiAgICAgICAgICAgICAgICBwaWNrZXJMYXlvdXQ6IHBpY2tlciAhPT0gbnVsbCAmJiBwaWNrZXIgIT09IHZvaWQgMCA/IHBpY2tlciA6ICdwb3B1cCcsXG4gICAgICAgICAgICAgICAgc3VwcG9ydHNBbHBoYTogc3VwcG9ydHNBbHBoYSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogYXJncy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHNob3VsZFN1cHBvcnRBbHBoYShpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIENvbG9yLmlzUmdiYUNvbG9yT2JqZWN0KGluaXRpYWxWYWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IE9iamVjdENvbG9ySW5wdXRQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnaW5wdXQtY29sb3Itb2JqZWN0JyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKCFDb2xvci5pc0NvbG9yT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VDb2xvcklucHV0UGFyYW1zKHBhcmFtcyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIHJlYWRlcjogKF9hcmdzKSA9PiBjb2xvckZyb21PYmplY3QsXG4gICAgICAgICAgICBlcXVhbHM6IENvbG9yLmVxdWFscyxcbiAgICAgICAgICAgIHdyaXRlcjogKGFyZ3MpID0+IGNyZWF0ZUNvbG9yT2JqZWN0V3JpdGVyKHNob3VsZFN1cHBvcnRBbHBoYShhcmdzLmluaXRpYWxWYWx1ZSkpLFxuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3VwcG9ydHNBbHBoYSA9IENvbG9yLmlzUmdiYUNvbG9yT2JqZWN0KGFyZ3MuaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gJ2V4cGFuZGVkJyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLmV4cGFuZGVkIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgcGlja2VyID0gJ3BpY2tlcicgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5waWNrZXIgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBzdXBwb3J0c0FscGhhXG4gICAgICAgICAgICAgICAgPyBjb2xvclRvSGV4UmdiYVN0cmluZ1xuICAgICAgICAgICAgICAgIDogY29sb3JUb0hleFJnYlN0cmluZztcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3JDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogZXhwYW5kZWQgIT09IG51bGwgJiYgZXhwYW5kZWQgIT09IHZvaWQgMCA/IGV4cGFuZGVkIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBDb21wb3NpdGVDb2xvclBhcnNlcixcbiAgICAgICAgICAgICAgICBwaWNrZXJMYXlvdXQ6IHBpY2tlciAhPT0gbnVsbCAmJiBwaWNrZXIgIT09IHZvaWQgMCA/IHBpY2tlciA6ICdwb3B1cCcsXG4gICAgICAgICAgICAgICAgc3VwcG9ydHNBbHBoYTogc3VwcG9ydHNBbHBoYSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogYXJncy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IFN0cmluZ0NvbG9ySW5wdXRQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnaW5wdXQtY29sb3Itc3RyaW5nJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgndmlldycgaW4gcGFyYW1zICYmIHBhcmFtcy52aWV3ID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5vdGF0aW9uID0gZ2V0Q29sb3JOb3RhdGlvbih2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIW5vdGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUNvbG9ySW5wdXRQYXJhbXMocGFyYW1zKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IGNvbG9yRnJvbVN0cmluZyxcbiAgICAgICAgICAgIGVxdWFsczogQ29sb3IuZXF1YWxzLFxuICAgICAgICAgICAgd3JpdGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vdGF0aW9uID0gZ2V0Q29sb3JOb3RhdGlvbihhcmdzLmluaXRpYWxWYWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFub3RhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVDb2xvclN0cmluZ1dyaXRlcihub3RhdGlvbik7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm90YXRpb24gPSBnZXRDb2xvck5vdGF0aW9uKGFyZ3MuaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgICAgIGlmICghbm90YXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdHJpbmdpZmllciA9IGdldENvbG9yU3RyaW5naWZpZXIobm90YXRpb24pO1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWQgPSAnZXhwYW5kZWQnIGluIGFyZ3MucGFyYW1zID8gYXJncy5wYXJhbXMuZXhwYW5kZWQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBwaWNrZXIgPSAncGlja2VyJyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLnBpY2tlciA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3JDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogZXhwYW5kZWQgIT09IG51bGwgJiYgZXhwYW5kZWQgIT09IHZvaWQgMCA/IGV4cGFuZGVkIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBzdHJpbmdpZmllcixcbiAgICAgICAgICAgICAgICBwYXJzZXI6IENvbXBvc2l0ZUNvbG9yUGFyc2VyLFxuICAgICAgICAgICAgICAgIHBpY2tlckxheW91dDogcGlja2VyICE9PSBudWxsICYmIHBpY2tlciAhPT0gdm9pZCAwID8gcGlja2VyIDogJ3BvcHVwJyxcbiAgICAgICAgICAgICAgICBzdXBwb3J0c0FscGhhOiBoYXNBbHBoYUNvbXBvbmVudChub3RhdGlvbiksXG4gICAgICAgICAgICAgICAgdmFsdWU6IGFyZ3MudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjbGFzcyBQb2ludE5kQ29uc3RyYWludCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRzID0gY29uZmlnLmNvbXBvbmVudHM7XG4gICAgICAgICAgICB0aGlzLmFzbV8gPSBjb25maWcuYXNzZW1ibHk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RyYWluKHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wcyA9IHRoaXMuYXNtX1xuICAgICAgICAgICAgICAgIC50b0NvbXBvbmVudHModmFsdWUpXG4gICAgICAgICAgICAgICAgLm1hcCgoY29tcCwgaW5kZXgpID0+IHsgdmFyIF9hLCBfYjsgcmV0dXJuIChfYiA9IChfYSA9IHRoaXMuY29tcG9uZW50c1tpbmRleF0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb25zdHJhaW4oY29tcCkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGNvbXA7IH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNtXy5mcm9tQ29tcG9uZW50cyhjb21wcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkNSA9IENsYXNzTmFtZSgncG5kdHh0Jyk7XG4gICAgY2xhc3MgUG9pbnROZFRleHRWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dFZpZXdzID0gY29uZmlnLnRleHRWaWV3cztcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ1KCkpO1xuICAgICAgICAgICAgdGhpcy50ZXh0Vmlld3MuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF4aXNFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGF4aXNFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDUoJ2EnKSk7XG4gICAgICAgICAgICAgICAgYXhpc0VsZW0uYXBwZW5kQ2hpbGQodi5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoYXhpc0VsZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVBeGlzQ29udHJvbGxlcihkb2MsIGNvbmZpZywgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOdW1iZXJUZXh0Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgIGFycmF5UG9zaXRpb246IGluZGV4ID09PSAwID8gJ2ZzdCcgOiBpbmRleCA9PT0gY29uZmlnLmF4ZXMubGVuZ3RoIC0gMSA/ICdsc3QnIDogJ21pZCcsXG4gICAgICAgICAgICBiYXNlU3RlcDogY29uZmlnLmF4ZXNbaW5kZXhdLmJhc2VTdGVwLFxuICAgICAgICAgICAgcGFyc2VyOiBjb25maWcucGFyc2VyLFxuICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy5heGVzW2luZGV4XS50ZXh0UHJvcHMsXG4gICAgICAgICAgICB2YWx1ZTogY3JlYXRlVmFsdWUoMCwge1xuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQ6IGNvbmZpZy5heGVzW2luZGV4XS5jb25zdHJhaW50LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy52aWV3UHJvcHMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjbGFzcyBQb2ludE5kVGV4dENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMuYWNzXyA9IGNvbmZpZy5heGVzLm1hcCgoXywgaW5kZXgpID0+IGNyZWF0ZUF4aXNDb250cm9sbGVyKGRvYywgY29uZmlnLCBpbmRleCkpO1xuICAgICAgICAgICAgdGhpcy5hY3NfLmZvckVhY2goKGMsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29ubmVjdFZhbHVlcyh7XG4gICAgICAgICAgICAgICAgICAgIHByaW1hcnk6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZGFyeTogYy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZm9yd2FyZDogKHApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25maWcuYXNzZW1ibHkudG9Db21wb25lbnRzKHAucmF3VmFsdWUpW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYmFja3dhcmQ6IChwLCBzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wcyA9IGNvbmZpZy5hc3NlbWJseS50b0NvbXBvbmVudHMocC5yYXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wc1tpbmRleF0gPSBzLnJhd1ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5hc3NlbWJseS5mcm9tQ29tcG9uZW50cyhjb21wcyk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBQb2ludE5kVGV4dFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgdGV4dFZpZXdzOiB0aGlzLmFjc18ubWFwKChhYykgPT4gYWMudmlldyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVN0ZXBDb25zdHJhaW50KHBhcmFtcykge1xuICAgICAgICBpZiAoJ3N0ZXAnIGluIHBhcmFtcyAmJiAhaXNFbXB0eShwYXJhbXMuc3RlcCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU3RlcENvbnN0cmFpbnQocGFyYW1zLnN0ZXApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVSYW5nZUNvbnN0cmFpbnQocGFyYW1zKSB7XG4gICAgICAgIGlmICgoJ21heCcgaW4gcGFyYW1zICYmICFpc0VtcHR5KHBhcmFtcy5tYXgpKSB8fFxuICAgICAgICAgICAgKCdtaW4nIGluIHBhcmFtcyAmJiAhaXNFbXB0eShwYXJhbXMubWluKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2VDb25zdHJhaW50KHtcbiAgICAgICAgICAgICAgICBtYXg6IHBhcmFtcy5tYXgsXG4gICAgICAgICAgICAgICAgbWluOiBwYXJhbXMubWluLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbnN0cmFpbnQkNChwYXJhbXMpIHtcbiAgICAgICAgY29uc3QgY29uc3RyYWludHMgPSBbXTtcbiAgICAgICAgY29uc3Qgc2MgPSBjcmVhdGVTdGVwQ29uc3RyYWludChwYXJhbXMpO1xuICAgICAgICBpZiAoc2MpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2goc2MpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJjID0gY3JlYXRlUmFuZ2VDb25zdHJhaW50KHBhcmFtcyk7XG4gICAgICAgIGlmIChyYykge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChyYyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGMgPSBjcmVhdGVMaXN0Q29uc3RyYWludChwYXJhbXMub3B0aW9ucyk7XG4gICAgICAgIGlmIChsYykge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChsYyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDb21wb3NpdGVDb25zdHJhaW50KGNvbnN0cmFpbnRzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZFJhbmdlKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgY29uc3QgYyA9IGNvbnN0cmFpbnQgPyBmaW5kQ29uc3RyYWludChjb25zdHJhaW50LCBSYW5nZUNvbnN0cmFpbnQpIDogbnVsbDtcbiAgICAgICAgaWYgKCFjKSB7XG4gICAgICAgICAgICByZXR1cm4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2MubWluVmFsdWUsIGMubWF4VmFsdWVdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlc3RpbWF0ZVN1aXRhYmxlUmFuZ2UoY29uc3RyYWludCkge1xuICAgICAgICBjb25zdCBbbWluLCBtYXhdID0gZmluZFJhbmdlKGNvbnN0cmFpbnQpO1xuICAgICAgICByZXR1cm4gW21pbiAhPT0gbnVsbCAmJiBtaW4gIT09IHZvaWQgMCA/IG1pbiA6IDAsIG1heCAhPT0gbnVsbCAmJiBtYXggIT09IHZvaWQgMCA/IG1heCA6IDEwMF07XG4gICAgfVxuICAgIGNvbnN0IE51bWJlcklucHV0UGx1Z2luID0ge1xuICAgICAgICBpZDogJ2lucHV0LW51bWJlcicsXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogcC5vcHRpb25hbC5mdW5jdGlvbixcbiAgICAgICAgICAgICAgICBtYXg6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgICAgIG1pbjogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VMaXN0T3B0aW9ucyksXG4gICAgICAgICAgICAgICAgc3RlcDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IG51bWJlckZyb21Vbmtub3duLFxuICAgICAgICAgICAgY29uc3RyYWludDogKGFyZ3MpID0+IGNyZWF0ZUNvbnN0cmFpbnQkNChhcmdzLnBhcmFtcyksXG4gICAgICAgICAgICB3cml0ZXI6IChfYXJncykgPT4gd3JpdGVQcmltaXRpdmUsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhcmdzLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgYyA9IGFyZ3MuY29uc3RyYWludDtcbiAgICAgICAgICAgIGlmIChjICYmIGZpbmRDb25zdHJhaW50KGMsIExpc3RDb25zdHJhaW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGlzdENvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiAoX2EgPSBmaW5kTGlzdEl0ZW1zKGMpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IChfYiA9ICgnZm9ybWF0JyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLmZvcm1hdCA6IHVuZGVmaW5lZCkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGNyZWF0ZU51bWJlckZvcm1hdHRlcihnZXRTdWl0YWJsZURlY2ltYWxEaWdpdHMoYywgdmFsdWUucmF3VmFsdWUpKTtcbiAgICAgICAgICAgIGlmIChjICYmIGZpbmRDb25zdHJhaW50KGMsIFJhbmdlQ29uc3RyYWludCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbbWluLCBtYXhdID0gZXN0aW1hdGVTdWl0YWJsZVJhbmdlKGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2xpZGVyVGV4dENvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICBiYXNlU3RlcDogZ2V0QmFzZVN0ZXAoYyksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlcjogcGFyc2VOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlclByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFZhbHVlOiBtYXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5WYWx1ZTogbWluLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dFByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdnaW5nU2NhbGU6IGdldFN1aXRhYmxlRHJhZ2dpbmdTY2FsZShjLCB2YWx1ZS5yYXdWYWx1ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgTnVtYmVyVGV4dENvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGJhc2VTdGVwOiBnZXRCYXNlU3RlcChjKSxcbiAgICAgICAgICAgICAgICBwYXJzZXI6IHBhcnNlTnVtYmVyLFxuICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dpbmdTY2FsZTogZ2V0U3VpdGFibGVEcmFnZ2luZ1NjYWxlKGMsIHZhbHVlLnJhd1ZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY2xhc3MgUG9pbnQyZCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHggPSAwLCB5ID0gMCkge1xuICAgICAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0Q29tcG9uZW50cygpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy54LCB0aGlzLnldO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBpc09iamVjdChvYmopIHtcbiAgICAgICAgICAgIGlmIChpc0VtcHR5KG9iaikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB4ID0gb2JqLng7XG4gICAgICAgICAgICBjb25zdCB5ID0gb2JqLnk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHggIT09ICdudW1iZXInIHx8IHR5cGVvZiB5ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBlcXVhbHModjEsIHYyKSB7XG4gICAgICAgICAgICByZXR1cm4gdjEueCA9PT0gdjIueCAmJiB2MS55ID09PSB2Mi55O1xuICAgICAgICB9XG4gICAgICAgIHRvT2JqZWN0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB4OiB0aGlzLngsXG4gICAgICAgICAgICAgICAgeTogdGhpcy55LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBQb2ludDJkQXNzZW1ibHkgPSB7XG4gICAgICAgIHRvQ29tcG9uZW50czogKHApID0+IHAuZ2V0Q29tcG9uZW50cygpLFxuICAgICAgICBmcm9tQ29tcG9uZW50czogKGNvbXBzKSA9PiBuZXcgUG9pbnQyZCguLi5jb21wcyksXG4gICAgfTtcblxuICAgIGNvbnN0IGNsYXNzTmFtZSQ0ID0gQ2xhc3NOYW1lKCdwMmQnKTtcbiAgICBjbGFzcyBQb2ludDJkVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNCgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBiaW5kVmFsdWUoY29uZmlnLmV4cGFuZGVkLCB2YWx1ZVRvQ2xhc3NOYW1lKHRoaXMuZWxlbWVudCwgY2xhc3NOYW1lJDQodW5kZWZpbmVkLCAnZXhwYW5kZWQnKSkpO1xuICAgICAgICAgICAgY29uc3QgaGVhZEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBoZWFkRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ0KCdoJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGhlYWRFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgICAgICBidXR0b25FbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDQoJ2InKSk7XG4gICAgICAgICAgICBidXR0b25FbGVtLmFwcGVuZENoaWxkKGNyZWF0ZVN2Z0ljb25FbGVtZW50KGRvYywgJ3AyZHBhZCcpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKGJ1dHRvbkVsZW0pO1xuICAgICAgICAgICAgaGVhZEVsZW0uYXBwZW5kQ2hpbGQoYnV0dG9uRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQgPSBidXR0b25FbGVtO1xuICAgICAgICAgICAgY29uc3QgdGV4dEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0ZXh0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ0KCd0JykpO1xuICAgICAgICAgICAgaGVhZEVsZW0uYXBwZW5kQ2hpbGQodGV4dEVsZW0pO1xuICAgICAgICAgICAgdGhpcy50ZXh0RWxlbWVudCA9IHRleHRFbGVtO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5waWNrZXJMYXlvdXQgPT09ICdpbmxpbmUnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGlja2VyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBwaWNrZXJFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDQoJ3AnKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHBpY2tlckVsZW0pO1xuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyRWxlbWVudCA9IHBpY2tlckVsZW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlckVsZW1lbnQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJDMgPSBDbGFzc05hbWUoJ3AyZHAnKTtcbiAgICBjbGFzcyBQb2ludDJkUGlja2VyVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uRm9sZGFibGVDaGFuZ2VfID0gdGhpcy5vbkZvbGRhYmxlQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlXyA9IHRoaXMub25WYWx1ZUNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuaW52ZXJ0c1lfID0gY29uZmlnLmludmVydHNZO1xuICAgICAgICAgICAgdGhpcy5tYXhWYWx1ZV8gPSBjb25maWcubWF4VmFsdWU7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMygpKTtcbiAgICAgICAgICAgIGlmIChjb25maWcubGF5b3V0ID09PSAncG9wdXAnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDModW5kZWZpbmVkLCAncCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhZEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBwYWRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDMoJ3AnKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRUYWJJbmRleChwYWRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChwYWRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMucGFkRWxlbWVudCA9IHBhZEVsZW07XG4gICAgICAgICAgICBjb25zdCBzdmdFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdzdmcnKTtcbiAgICAgICAgICAgIHN2Z0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMygnZycpKTtcbiAgICAgICAgICAgIHRoaXMucGFkRWxlbWVudC5hcHBlbmRDaGlsZChzdmdFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuc3ZnRWxlbV8gPSBzdmdFbGVtO1xuICAgICAgICAgICAgY29uc3QgeEF4aXNFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdsaW5lJyk7XG4gICAgICAgICAgICB4QXhpc0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMygnYXgnKSk7XG4gICAgICAgICAgICB4QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3gxJywgJzAnKTtcbiAgICAgICAgICAgIHhBeGlzRWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneTEnLCAnNTAlJyk7XG4gICAgICAgICAgICB4QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3gyJywgJzEwMCUnKTtcbiAgICAgICAgICAgIHhBeGlzRWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneTInLCAnNTAlJyk7XG4gICAgICAgICAgICB0aGlzLnN2Z0VsZW1fLmFwcGVuZENoaWxkKHhBeGlzRWxlbSk7XG4gICAgICAgICAgICBjb25zdCB5QXhpc0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ2xpbmUnKTtcbiAgICAgICAgICAgIHlBeGlzRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQzKCdheCcpKTtcbiAgICAgICAgICAgIHlBeGlzRWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneDEnLCAnNTAlJyk7XG4gICAgICAgICAgICB5QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3kxJywgJzAnKTtcbiAgICAgICAgICAgIHlBeGlzRWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneDInLCAnNTAlJyk7XG4gICAgICAgICAgICB5QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3kyJywgJzEwMCUnKTtcbiAgICAgICAgICAgIHRoaXMuc3ZnRWxlbV8uYXBwZW5kQ2hpbGQoeUF4aXNFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdsaW5lJyk7XG4gICAgICAgICAgICBsaW5lRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQzKCdsJykpO1xuICAgICAgICAgICAgbGluZUVsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3gxJywgJzUwJScpO1xuICAgICAgICAgICAgbGluZUVsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3kxJywgJzUwJScpO1xuICAgICAgICAgICAgdGhpcy5zdmdFbGVtXy5hcHBlbmRDaGlsZChsaW5lRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmxpbmVFbGVtXyA9IGxpbmVFbGVtO1xuICAgICAgICAgICAgY29uc3QgbWFya2VyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIG1hcmtlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMygnbScpKTtcbiAgICAgICAgICAgIHRoaXMucGFkRWxlbWVudC5hcHBlbmRDaGlsZChtYXJrZXJFbGVtKTtcbiAgICAgICAgICAgIHRoaXMubWFya2VyRWxlbV8gPSBtYXJrZXJFbGVtO1xuICAgICAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZUNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBhbGxGb2N1c2FibGVFbGVtZW50cygpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy5wYWRFbGVtZW50XTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfKCkge1xuICAgICAgICAgICAgY29uc3QgW3gsIHldID0gdGhpcy52YWx1ZS5yYXdWYWx1ZS5nZXRDb21wb25lbnRzKCk7XG4gICAgICAgICAgICBjb25zdCBtYXggPSB0aGlzLm1heFZhbHVlXztcbiAgICAgICAgICAgIGNvbnN0IHB4ID0gbWFwUmFuZ2UoeCwgLW1heCwgK21heCwgMCwgMTAwKTtcbiAgICAgICAgICAgIGNvbnN0IHB5ID0gbWFwUmFuZ2UoeSwgLW1heCwgK21heCwgMCwgMTAwKTtcbiAgICAgICAgICAgIGNvbnN0IGlweSA9IHRoaXMuaW52ZXJ0c1lfID8gMTAwIC0gcHkgOiBweTtcbiAgICAgICAgICAgIHRoaXMubGluZUVsZW1fLnNldEF0dHJpYnV0ZU5TKG51bGwsICd4MicsIGAke3B4fSVgKTtcbiAgICAgICAgICAgIHRoaXMubGluZUVsZW1fLnNldEF0dHJpYnV0ZU5TKG51bGwsICd5MicsIGAke2lweX0lYCk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fLnN0eWxlLmxlZnQgPSBgJHtweH0lYDtcbiAgICAgICAgICAgIHRoaXMubWFya2VyRWxlbV8uc3R5bGUudG9wID0gYCR7aXB5fSVgO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgb25Gb2xkYWJsZUNoYW5nZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVPZmZzZXQoZXYsIGJhc2VTdGVwcywgaW52ZXJ0c1kpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGdldFN0ZXBGb3JLZXkoYmFzZVN0ZXBzWzBdLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKSxcbiAgICAgICAgICAgIGdldFN0ZXBGb3JLZXkoYmFzZVN0ZXBzWzFdLCBnZXRWZXJ0aWNhbFN0ZXBLZXlzKGV2KSkgKiAoaW52ZXJ0c1kgPyAxIDogLTEpLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBjbGFzcyBQb2ludDJkUGlja2VyQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uUGFkS2V5RG93bl8gPSB0aGlzLm9uUGFkS2V5RG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25QYWRLZXlVcF8gPSB0aGlzLm9uUGFkS2V5VXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlckRvd25fID0gdGhpcy5vblBvaW50ZXJEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJNb3ZlXyA9IHRoaXMub25Qb2ludGVyTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyVXBfID0gdGhpcy5vblBvaW50ZXJVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLmJhc2VTdGVwc18gPSBjb25maWcuYmFzZVN0ZXBzO1xuICAgICAgICAgICAgdGhpcy5tYXhWYWx1ZV8gPSBjb25maWcubWF4VmFsdWU7XG4gICAgICAgICAgICB0aGlzLmludmVydHNZXyA9IGNvbmZpZy5pbnZlcnRzWTtcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBQb2ludDJkUGlja2VyVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBpbnZlcnRzWTogdGhpcy5pbnZlcnRzWV8sXG4gICAgICAgICAgICAgICAgbGF5b3V0OiBjb25maWcubGF5b3V0LFxuICAgICAgICAgICAgICAgIG1heFZhbHVlOiB0aGlzLm1heFZhbHVlXyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8gPSBuZXcgUG9pbnRlckhhbmRsZXIodGhpcy52aWV3LnBhZEVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ2Rvd24nLCB0aGlzLm9uUG9pbnRlckRvd25fKTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdtb3ZlJywgdGhpcy5vblBvaW50ZXJNb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbigndXAnLCB0aGlzLm9uUG9pbnRlclVwXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcucGFkRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vblBhZEtleURvd25fKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5wYWRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5vblBhZEtleVVwXyk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlUG9pbnRlckV2ZW50XyhkLCBvcHRzKSB7XG4gICAgICAgICAgICBpZiAoIWQucG9pbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBtYXggPSB0aGlzLm1heFZhbHVlXztcbiAgICAgICAgICAgIGNvbnN0IHB4ID0gbWFwUmFuZ2UoZC5wb2ludC54LCAwLCBkLmJvdW5kcy53aWR0aCwgLW1heCwgK21heCk7XG4gICAgICAgICAgICBjb25zdCBweSA9IG1hcFJhbmdlKHRoaXMuaW52ZXJ0c1lfID8gZC5ib3VuZHMuaGVpZ2h0IC0gZC5wb2ludC55IDogZC5wb2ludC55LCAwLCBkLmJvdW5kcy5oZWlnaHQsIC1tYXgsICttYXgpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZShuZXcgUG9pbnQyZChweCwgcHkpLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyTW92ZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlclVwXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUGFkS2V5RG93bl8oZXYpIHtcbiAgICAgICAgICAgIGlmIChpc0Fycm93S2V5KGV2LmtleSkpIHtcbiAgICAgICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgW2R4LCBkeV0gPSBjb21wdXRlT2Zmc2V0KGV2LCB0aGlzLmJhc2VTdGVwc18sIHRoaXMuaW52ZXJ0c1lfKTtcbiAgICAgICAgICAgIGlmIChkeCA9PT0gMCAmJiBkeSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUobmV3IFBvaW50MmQodGhpcy52YWx1ZS5yYXdWYWx1ZS54ICsgZHgsIHRoaXMudmFsdWUucmF3VmFsdWUueSArIGR5KSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBhZEtleVVwXyhldikge1xuICAgICAgICAgICAgY29uc3QgW2R4LCBkeV0gPSBjb21wdXRlT2Zmc2V0KGV2LCB0aGlzLmJhc2VTdGVwc18sIHRoaXMuaW52ZXJ0c1lfKTtcbiAgICAgICAgICAgIGlmIChkeCA9PT0gMCAmJiBkeSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUodGhpcy52YWx1ZS5yYXdWYWx1ZSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBQb2ludDJkQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgdGhpcy5vblBvcHVwQ2hpbGRCbHVyXyA9IHRoaXMub25Qb3B1cENoaWxkQmx1cl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb3B1cENoaWxkS2V5ZG93bl8gPSB0aGlzLm9uUG9wdXBDaGlsZEtleWRvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUGFkQnV0dG9uQmx1cl8gPSB0aGlzLm9uUGFkQnV0dG9uQmx1cl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25QYWRCdXR0b25DbGlja18gPSB0aGlzLm9uUGFkQnV0dG9uQ2xpY2tfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5mb2xkYWJsZV8gPSBGb2xkYWJsZS5jcmVhdGUoY29uZmlnLmV4cGFuZGVkKTtcbiAgICAgICAgICAgIHRoaXMucG9wQ18gPVxuICAgICAgICAgICAgICAgIGNvbmZpZy5waWNrZXJMYXlvdXQgPT09ICdwb3B1cCdcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgUG9wdXBDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgY29uc3QgcGFkQyA9IG5ldyBQb2ludDJkUGlja2VyQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBiYXNlU3RlcHM6IFtjb25maWcuYXhlc1swXS5iYXNlU3RlcCwgY29uZmlnLmF4ZXNbMV0uYmFzZVN0ZXBdLFxuICAgICAgICAgICAgICAgIGludmVydHNZOiBjb25maWcuaW52ZXJ0c1ksXG4gICAgICAgICAgICAgICAgbGF5b3V0OiBjb25maWcucGlja2VyTGF5b3V0LFxuICAgICAgICAgICAgICAgIG1heFZhbHVlOiBjb25maWcubWF4VmFsdWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGFkQy52aWV3LmFsbEZvY3VzYWJsZUVsZW1lbnRzLmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAgICAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLm9uUG9wdXBDaGlsZEJsdXJfKTtcbiAgICAgICAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uUG9wdXBDaGlsZEtleWRvd25fKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5waWNrZXJDXyA9IHBhZEM7XG4gICAgICAgICAgICB0aGlzLnRleHRDXyA9IG5ldyBQb2ludE5kVGV4dENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgYXNzZW1ibHk6IFBvaW50MmRBc3NlbWJseSxcbiAgICAgICAgICAgICAgICBheGVzOiBjb25maWcuYXhlcyxcbiAgICAgICAgICAgICAgICBwYXJzZXI6IGNvbmZpZy5wYXJzZXIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IFBvaW50MmRWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiB0aGlzLmZvbGRhYmxlXy52YWx1ZSgnZXhwYW5kZWQnKSxcbiAgICAgICAgICAgICAgICBwaWNrZXJMYXlvdXQ6IGNvbmZpZy5waWNrZXJMYXlvdXQsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3LnRleHRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMudGV4dENfLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICAoX2EgPSB0aGlzLnZpZXcuYnV0dG9uRWxlbWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLm9uUGFkQnV0dG9uQmx1cl8pO1xuICAgICAgICAgICAgKF9iID0gdGhpcy52aWV3LmJ1dHRvbkVsZW1lbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25QYWRCdXR0b25DbGlja18pO1xuICAgICAgICAgICAgaWYgKHRoaXMucG9wQ18pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnBvcENfLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BDXy52aWV3LmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5waWNrZXJDXy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGNvbm5lY3RWYWx1ZXMoe1xuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5OiB0aGlzLmZvbGRhYmxlXy52YWx1ZSgnZXhwYW5kZWQnKSxcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5OiB0aGlzLnBvcENfLnNob3dzLFxuICAgICAgICAgICAgICAgICAgICBmb3J3YXJkOiAocCkgPT4gcC5yYXdWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgYmFja3dhcmQ6IChfLCBzKSA9PiBzLnJhd1ZhbHVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy52aWV3LnBpY2tlckVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXcucGlja2VyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnBpY2tlckNfLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgYmluZEZvbGRhYmxlKHRoaXMuZm9sZGFibGVfLCB0aGlzLnZpZXcucGlja2VyRWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25QYWRCdXR0b25CbHVyXyhlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucG9wQ18pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbGVtID0gdGhpcy52aWV3LmVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBuZXh0VGFyZ2V0ID0gZm9yY2VDYXN0KGUucmVsYXRlZFRhcmdldCk7XG4gICAgICAgICAgICBpZiAoIW5leHRUYXJnZXQgfHwgIWVsZW0uY29udGFpbnMobmV4dFRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcENfLnNob3dzLnJhd1ZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25QYWRCdXR0b25DbGlja18oKSB7XG4gICAgICAgICAgICB0aGlzLmZvbGRhYmxlXy5zZXQoJ2V4cGFuZGVkJywgIXRoaXMuZm9sZGFibGVfLmdldCgnZXhwYW5kZWQnKSk7XG4gICAgICAgICAgICBpZiAodGhpcy5mb2xkYWJsZV8uZ2V0KCdleHBhbmRlZCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJDXy52aWV3LmFsbEZvY3VzYWJsZUVsZW1lbnRzWzBdLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25Qb3B1cENoaWxkQmx1cl8oZXYpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5wb3BDXykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLnBvcENfLnZpZXcuZWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IG5leHRUYXJnZXQgPSBmaW5kTmV4dFRhcmdldChldik7XG4gICAgICAgICAgICBpZiAobmV4dFRhcmdldCAmJiBlbGVtLmNvbnRhaW5zKG5leHRUYXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5leHRUYXJnZXQgJiZcbiAgICAgICAgICAgICAgICBuZXh0VGFyZ2V0ID09PSB0aGlzLnZpZXcuYnV0dG9uRWxlbWVudCAmJlxuICAgICAgICAgICAgICAgICFzdXBwb3J0c1RvdWNoKGVsZW0ub3duZXJEb2N1bWVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBvcENfLnNob3dzLnJhd1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb3B1cENoaWxkS2V5ZG93bl8oZXYpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcENfKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BDXy5zaG93cy5yYXdWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudmlldy5waWNrZXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3LmJ1dHRvbkVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb2ludDJkRnJvbVVua25vd24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFBvaW50MmQuaXNPYmplY3QodmFsdWUpXG4gICAgICAgICAgICA/IG5ldyBQb2ludDJkKHZhbHVlLngsIHZhbHVlLnkpXG4gICAgICAgICAgICA6IG5ldyBQb2ludDJkKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdyaXRlUG9pbnQyZCh0YXJnZXQsIHZhbHVlKSB7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCd4JywgdmFsdWUueCk7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCd5JywgdmFsdWUueSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCQyKHBhcmFtcykge1xuICAgICAgICBpZiAoIXBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb25zdHJhaW50cyA9IFtdO1xuICAgICAgICBpZiAoIWlzRW1wdHkocGFyYW1zLnN0ZXApKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKG5ldyBTdGVwQ29uc3RyYWludChwYXJhbXMuc3RlcCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFbXB0eShwYXJhbXMubWF4KSB8fCAhaXNFbXB0eShwYXJhbXMubWluKSkge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChuZXcgUmFuZ2VDb25zdHJhaW50KHtcbiAgICAgICAgICAgICAgICBtYXg6IHBhcmFtcy5tYXgsXG4gICAgICAgICAgICAgICAgbWluOiBwYXJhbXMubWluLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ29tcG9zaXRlQ29uc3RyYWludChjb25zdHJhaW50cyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbnN0cmFpbnQkMyhwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludE5kQ29uc3RyYWludCh7XG4gICAgICAgICAgICBhc3NlbWJseTogUG9pbnQyZEFzc2VtYmx5LFxuICAgICAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgICAgICAgIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQkMigneCcgaW4gcGFyYW1zID8gcGFyYW1zLnggOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQkMigneScgaW4gcGFyYW1zID8gcGFyYW1zLnkgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN1aXRhYmxlTWF4RGltZW5zaW9uVmFsdWUoY29uc3RyYWludCwgcmF3VmFsdWUpIHtcbiAgICAgICAgY29uc3QgcmMgPSBjb25zdHJhaW50ICYmIGZpbmRDb25zdHJhaW50KGNvbnN0cmFpbnQsIFJhbmdlQ29uc3RyYWludCk7XG4gICAgICAgIGlmIChyYykge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHJjLm1pblZhbHVlIHx8IDApLCBNYXRoLmFicyhyYy5tYXhWYWx1ZSB8fCAwKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RlcCA9IGdldEJhc2VTdGVwKGNvbnN0cmFpbnQpO1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMoc3RlcCkgKiAxMCwgTWF0aC5hYnMocmF3VmFsdWUpICogMTApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRTdWl0YWJsZU1heFZhbHVlKGluaXRpYWxWYWx1ZSwgY29uc3RyYWludCkge1xuICAgICAgICBjb25zdCB4YyA9IGNvbnN0cmFpbnQgaW5zdGFuY2VvZiBQb2ludE5kQ29uc3RyYWludFxuICAgICAgICAgICAgPyBjb25zdHJhaW50LmNvbXBvbmVudHNbMF1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB5YyA9IGNvbnN0cmFpbnQgaW5zdGFuY2VvZiBQb2ludE5kQ29uc3RyYWludFxuICAgICAgICAgICAgPyBjb25zdHJhaW50LmNvbXBvbmVudHNbMV1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB4ciA9IGdldFN1aXRhYmxlTWF4RGltZW5zaW9uVmFsdWUoeGMsIGluaXRpYWxWYWx1ZS54KTtcbiAgICAgICAgY29uc3QgeXIgPSBnZXRTdWl0YWJsZU1heERpbWVuc2lvblZhbHVlKHljLCBpbml0aWFsVmFsdWUueSk7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCh4ciwgeXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVBeGlzJDIoaW5pdGlhbFZhbHVlLCBjb25zdHJhaW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBiYXNlU3RlcDogZ2V0QmFzZVN0ZXAoY29uc3RyYWludCksXG4gICAgICAgICAgICBjb25zdHJhaW50OiBjb25zdHJhaW50LFxuICAgICAgICAgICAgdGV4dFByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICBkcmFnZ2luZ1NjYWxlOiBnZXRTdWl0YWJsZURyYWdnaW5nU2NhbGUoY29uc3RyYWludCwgaW5pdGlhbFZhbHVlKSxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNyZWF0ZU51bWJlckZvcm1hdHRlcihnZXRTdWl0YWJsZURlY2ltYWxEaWdpdHMoY29uc3RyYWludCwgaW5pdGlhbFZhbHVlKSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2hvdWxkSW52ZXJ0WShwYXJhbXMpIHtcbiAgICAgICAgaWYgKCEoJ3knIGluIHBhcmFtcykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB5UGFyYW1zID0gcGFyYW1zLnk7XG4gICAgICAgIGlmICgheVBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnaW52ZXJ0ZWQnIGluIHlQYXJhbXMgPyAhIXlQYXJhbXMuaW52ZXJ0ZWQgOiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgUG9pbnQyZElucHV0UGx1Z2luID0ge1xuICAgICAgICBpZDogJ2lucHV0LXBvaW50MmQnLFxuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBhY2NlcHQ6ICh2YWx1ZSwgcGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAoIVBvaW50MmQuaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBwLm9wdGlvbmFsLmJvb2xlYW4sXG4gICAgICAgICAgICAgICAgcGlja2VyOiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBpY2tlckxheW91dCksXG4gICAgICAgICAgICAgICAgeDogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyksXG4gICAgICAgICAgICAgICAgeTogcC5vcHRpb25hbC5vYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBpbnZlcnRlZDogcC5vcHRpb25hbC5ib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICBtYXg6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBtaW46IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBzdGVwOiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICByZWFkZXI6IChfYXJncykgPT4gcG9pbnQyZEZyb21Vbmtub3duLFxuICAgICAgICAgICAgY29uc3RyYWludDogKGFyZ3MpID0+IGNyZWF0ZUNvbnN0cmFpbnQkMyhhcmdzLnBhcmFtcyksXG4gICAgICAgICAgICBlcXVhbHM6IFBvaW50MmQuZXF1YWxzLFxuICAgICAgICAgICAgd3JpdGVyOiAoX2FyZ3MpID0+IHdyaXRlUG9pbnQyZCxcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IGFyZ3MuZG9jdW1lbnQ7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFyZ3MudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBjID0gYXJncy5jb25zdHJhaW50O1xuICAgICAgICAgICAgaWYgKCEoYyBpbnN0YW5jZW9mIFBvaW50TmRDb25zdHJhaW50KSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gJ2V4cGFuZGVkJyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLmV4cGFuZGVkIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgcGlja2VyID0gJ3BpY2tlcicgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5waWNrZXIgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvaW50MmRDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGF4ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlQXhpcyQyKHZhbHVlLnJhd1ZhbHVlLngsIGMuY29tcG9uZW50c1swXSksXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUF4aXMkMih2YWx1ZS5yYXdWYWx1ZS55LCBjLmNvbXBvbmVudHNbMV0pLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGV4cGFuZGVkICE9PSBudWxsICYmIGV4cGFuZGVkICE9PSB2b2lkIDAgPyBleHBhbmRlZCA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGludmVydHNZOiBzaG91bGRJbnZlcnRZKGFyZ3MucGFyYW1zKSxcbiAgICAgICAgICAgICAgICBtYXhWYWx1ZTogZ2V0U3VpdGFibGVNYXhWYWx1ZSh2YWx1ZS5yYXdWYWx1ZSwgYyksXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBwYXJzZU51bWJlcixcbiAgICAgICAgICAgICAgICBwaWNrZXJMYXlvdXQ6IHBpY2tlciAhPT0gbnVsbCAmJiBwaWNrZXIgIT09IHZvaWQgMCA/IHBpY2tlciA6ICdwb3B1cCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY2xhc3MgUG9pbnQzZCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHggPSAwLCB5ID0gMCwgeiA9IDApIHtcbiAgICAgICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICAgICAgdGhpcy56ID0gejtcbiAgICAgICAgfVxuICAgICAgICBnZXRDb21wb25lbnRzKCkge1xuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLngsIHRoaXMueSwgdGhpcy56XTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgaXNPYmplY3Qob2JqKSB7XG4gICAgICAgICAgICBpZiAoaXNFbXB0eShvYmopKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeCA9IG9iai54O1xuICAgICAgICAgICAgY29uc3QgeSA9IG9iai55O1xuICAgICAgICAgICAgY29uc3QgeiA9IG9iai56O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB4ICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB5ICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB6ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBlcXVhbHModjEsIHYyKSB7XG4gICAgICAgICAgICByZXR1cm4gdjEueCA9PT0gdjIueCAmJiB2MS55ID09PSB2Mi55ICYmIHYxLnogPT09IHYyLno7XG4gICAgICAgIH1cbiAgICAgICAgdG9PYmplY3QoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHg6IHRoaXMueCxcbiAgICAgICAgICAgICAgICB5OiB0aGlzLnksXG4gICAgICAgICAgICAgICAgejogdGhpcy56LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBQb2ludDNkQXNzZW1ibHkgPSB7XG4gICAgICAgIHRvQ29tcG9uZW50czogKHApID0+IHAuZ2V0Q29tcG9uZW50cygpLFxuICAgICAgICBmcm9tQ29tcG9uZW50czogKGNvbXBzKSA9PiBuZXcgUG9pbnQzZCguLi5jb21wcyksXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHBvaW50M2RGcm9tVW5rbm93bih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gUG9pbnQzZC5pc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICAgID8gbmV3IFBvaW50M2QodmFsdWUueCwgdmFsdWUueSwgdmFsdWUueilcbiAgICAgICAgICAgIDogbmV3IFBvaW50M2QoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd3JpdGVQb2ludDNkKHRhcmdldCwgdmFsdWUpIHtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3gnLCB2YWx1ZS54KTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3knLCB2YWx1ZS55KTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3onLCB2YWx1ZS56KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50JDEocGFyYW1zKSB7XG4gICAgICAgIGlmICghcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gW107XG4gICAgICAgIGlmICghaXNFbXB0eShwYXJhbXMuc3RlcCkpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2gobmV3IFN0ZXBDb25zdHJhaW50KHBhcmFtcy5zdGVwKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VtcHR5KHBhcmFtcy5tYXgpIHx8ICFpc0VtcHR5KHBhcmFtcy5taW4pKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKG5ldyBSYW5nZUNvbnN0cmFpbnQoe1xuICAgICAgICAgICAgICAgIG1heDogcGFyYW1zLm1heCxcbiAgICAgICAgICAgICAgICBtaW46IHBhcmFtcy5taW4sXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDb21wb3NpdGVDb25zdHJhaW50KGNvbnN0cmFpbnRzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ29uc3RyYWludCQyKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gbmV3IFBvaW50TmRDb25zdHJhaW50KHtcbiAgICAgICAgICAgIGFzc2VtYmx5OiBQb2ludDNkQXNzZW1ibHksXG4gICAgICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgICAgICAgY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCQxKCd4JyBpbiBwYXJhbXMgPyBwYXJhbXMueCA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCQxKCd5JyBpbiBwYXJhbXMgPyBwYXJhbXMueSA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCQxKCd6JyBpbiBwYXJhbXMgPyBwYXJhbXMueiA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQXhpcyQxKGluaXRpYWxWYWx1ZSwgY29uc3RyYWludCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYmFzZVN0ZXA6IGdldEJhc2VTdGVwKGNvbnN0cmFpbnQpLFxuICAgICAgICAgICAgY29uc3RyYWludDogY29uc3RyYWludCxcbiAgICAgICAgICAgIHRleHRQcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgZHJhZ2dpbmdTY2FsZTogZ2V0U3VpdGFibGVEcmFnZ2luZ1NjYWxlKGNvbnN0cmFpbnQsIGluaXRpYWxWYWx1ZSksXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoZ2V0U3VpdGFibGVEZWNpbWFsRGlnaXRzKGNvbnN0cmFpbnQsIGluaXRpYWxWYWx1ZSkpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IFBvaW50M2RJbnB1dFBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdpbnB1dC1wb2ludDNkJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKCFQb2ludDNkLmlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICB4OiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBvaW50RGltZW5zaW9uUGFyYW1zKSxcbiAgICAgICAgICAgICAgICB5OiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBvaW50RGltZW5zaW9uUGFyYW1zKSxcbiAgICAgICAgICAgICAgICB6OiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBvaW50RGltZW5zaW9uUGFyYW1zKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICByZWFkZXI6IChfYXJncykgPT4gcG9pbnQzZEZyb21Vbmtub3duLFxuICAgICAgICAgICAgY29uc3RyYWludDogKGFyZ3MpID0+IGNyZWF0ZUNvbnN0cmFpbnQkMihhcmdzLnBhcmFtcyksXG4gICAgICAgICAgICBlcXVhbHM6IFBvaW50M2QuZXF1YWxzLFxuICAgICAgICAgICAgd3JpdGVyOiAoX2FyZ3MpID0+IHdyaXRlUG9pbnQzZCxcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJncy52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBhcmdzLmNvbnN0cmFpbnQ7XG4gICAgICAgICAgICBpZiAoIShjIGluc3RhbmNlb2YgUG9pbnROZENvbnN0cmFpbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb2ludE5kVGV4dENvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGFzc2VtYmx5OiBQb2ludDNkQXNzZW1ibHksXG4gICAgICAgICAgICAgICAgYXhlczogW1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVBeGlzJDEodmFsdWUucmF3VmFsdWUueCwgYy5jb21wb25lbnRzWzBdKSxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlQXhpcyQxKHZhbHVlLnJhd1ZhbHVlLnksIGMuY29tcG9uZW50c1sxXSksXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUF4aXMkMSh2YWx1ZS5yYXdWYWx1ZS56LCBjLmNvbXBvbmVudHNbMl0pLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBwYXJzZU51bWJlcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjbGFzcyBQb2ludDRkIHtcbiAgICAgICAgY29uc3RydWN0b3IoeCA9IDAsIHkgPSAwLCB6ID0gMCwgdyA9IDApIHtcbiAgICAgICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICAgICAgdGhpcy56ID0gejtcbiAgICAgICAgICAgIHRoaXMudyA9IHc7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0Q29tcG9uZW50cygpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy54LCB0aGlzLnksIHRoaXMueiwgdGhpcy53XTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgaXNPYmplY3Qob2JqKSB7XG4gICAgICAgICAgICBpZiAoaXNFbXB0eShvYmopKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeCA9IG9iai54O1xuICAgICAgICAgICAgY29uc3QgeSA9IG9iai55O1xuICAgICAgICAgICAgY29uc3QgeiA9IG9iai56O1xuICAgICAgICAgICAgY29uc3QgdyA9IG9iai53O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB4ICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB5ICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB6ICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB3ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBlcXVhbHModjEsIHYyKSB7XG4gICAgICAgICAgICByZXR1cm4gdjEueCA9PT0gdjIueCAmJiB2MS55ID09PSB2Mi55ICYmIHYxLnogPT09IHYyLnogJiYgdjEudyA9PT0gdjIudztcbiAgICAgICAgfVxuICAgICAgICB0b09iamVjdCgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgeDogdGhpcy54LFxuICAgICAgICAgICAgICAgIHk6IHRoaXMueSxcbiAgICAgICAgICAgICAgICB6OiB0aGlzLnosXG4gICAgICAgICAgICAgICAgdzogdGhpcy53LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBQb2ludDRkQXNzZW1ibHkgPSB7XG4gICAgICAgIHRvQ29tcG9uZW50czogKHApID0+IHAuZ2V0Q29tcG9uZW50cygpLFxuICAgICAgICBmcm9tQ29tcG9uZW50czogKGNvbXBzKSA9PiBuZXcgUG9pbnQ0ZCguLi5jb21wcyksXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHBvaW50NGRGcm9tVW5rbm93bih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gUG9pbnQ0ZC5pc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICAgID8gbmV3IFBvaW50NGQodmFsdWUueCwgdmFsdWUueSwgdmFsdWUueiwgdmFsdWUudylcbiAgICAgICAgICAgIDogbmV3IFBvaW50NGQoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd3JpdGVQb2ludDRkKHRhcmdldCwgdmFsdWUpIHtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3gnLCB2YWx1ZS54KTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3knLCB2YWx1ZS55KTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3onLCB2YWx1ZS56KTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3cnLCB2YWx1ZS53KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50KHBhcmFtcykge1xuICAgICAgICBpZiAoIXBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb25zdHJhaW50cyA9IFtdO1xuICAgICAgICBpZiAoIWlzRW1wdHkocGFyYW1zLnN0ZXApKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKG5ldyBTdGVwQ29uc3RyYWludChwYXJhbXMuc3RlcCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFbXB0eShwYXJhbXMubWF4KSB8fCAhaXNFbXB0eShwYXJhbXMubWluKSkge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChuZXcgUmFuZ2VDb25zdHJhaW50KHtcbiAgICAgICAgICAgICAgICBtYXg6IHBhcmFtcy5tYXgsXG4gICAgICAgICAgICAgICAgbWluOiBwYXJhbXMubWluLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ29tcG9zaXRlQ29uc3RyYWludChjb25zdHJhaW50cyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbnN0cmFpbnQkMShwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludE5kQ29uc3RyYWludCh7XG4gICAgICAgICAgICBhc3NlbWJseTogUG9pbnQ0ZEFzc2VtYmx5LFxuICAgICAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgICAgICAgIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQoJ3gnIGluIHBhcmFtcyA/IHBhcmFtcy54IDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50KCd5JyBpbiBwYXJhbXMgPyBwYXJhbXMueSA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCgneicgaW4gcGFyYW1zID8gcGFyYW1zLnogOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQoJ3cnIGluIHBhcmFtcyA/IHBhcmFtcy53IDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVBeGlzKGluaXRpYWxWYWx1ZSwgY29uc3RyYWludCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYmFzZVN0ZXA6IGdldEJhc2VTdGVwKGNvbnN0cmFpbnQpLFxuICAgICAgICAgICAgY29uc3RyYWludDogY29uc3RyYWludCxcbiAgICAgICAgICAgIHRleHRQcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgZHJhZ2dpbmdTY2FsZTogZ2V0U3VpdGFibGVEcmFnZ2luZ1NjYWxlKGNvbnN0cmFpbnQsIGluaXRpYWxWYWx1ZSksXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoZ2V0U3VpdGFibGVEZWNpbWFsRGlnaXRzKGNvbnN0cmFpbnQsIGluaXRpYWxWYWx1ZSkpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IFBvaW50NGRJbnB1dFBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdpbnB1dC1wb2ludDRkJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKCFQb2ludDRkLmlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICB4OiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBvaW50RGltZW5zaW9uUGFyYW1zKSxcbiAgICAgICAgICAgICAgICB5OiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBvaW50RGltZW5zaW9uUGFyYW1zKSxcbiAgICAgICAgICAgICAgICB6OiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBvaW50RGltZW5zaW9uUGFyYW1zKSxcbiAgICAgICAgICAgICAgICB3OiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBvaW50RGltZW5zaW9uUGFyYW1zKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICByZWFkZXI6IChfYXJncykgPT4gcG9pbnQ0ZEZyb21Vbmtub3duLFxuICAgICAgICAgICAgY29uc3RyYWludDogKGFyZ3MpID0+IGNyZWF0ZUNvbnN0cmFpbnQkMShhcmdzLnBhcmFtcyksXG4gICAgICAgICAgICBlcXVhbHM6IFBvaW50NGQuZXF1YWxzLFxuICAgICAgICAgICAgd3JpdGVyOiAoX2FyZ3MpID0+IHdyaXRlUG9pbnQ0ZCxcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJncy52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBhcmdzLmNvbnN0cmFpbnQ7XG4gICAgICAgICAgICBpZiAoIShjIGluc3RhbmNlb2YgUG9pbnROZENvbnN0cmFpbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb2ludE5kVGV4dENvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGFzc2VtYmx5OiBQb2ludDRkQXNzZW1ibHksXG4gICAgICAgICAgICAgICAgYXhlczogdmFsdWUucmF3VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgLmdldENvbXBvbmVudHMoKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChjb21wLCBpbmRleCkgPT4gY3JlYXRlQXhpcyhjb21wLCBjLmNvbXBvbmVudHNbaW5kZXhdKSksXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBwYXJzZU51bWJlcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50KHBhcmFtcykge1xuICAgICAgICBjb25zdCBjb25zdHJhaW50cyA9IFtdO1xuICAgICAgICBjb25zdCBsYyA9IGNyZWF0ZUxpc3RDb25zdHJhaW50KHBhcmFtcy5vcHRpb25zKTtcbiAgICAgICAgaWYgKGxjKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKGxjKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENvbXBvc2l0ZUNvbnN0cmFpbnQoY29uc3RyYWludHMpO1xuICAgIH1cbiAgICBjb25zdCBTdHJpbmdJbnB1dFBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdpbnB1dC1zdHJpbmcnLFxuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBhY2NlcHQ6ICh2YWx1ZSwgcGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZUxpc3RPcHRpb25zKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICByZWFkZXI6IChfYXJncykgPT4gc3RyaW5nRnJvbVVua25vd24sXG4gICAgICAgICAgICBjb25zdHJhaW50OiAoYXJncykgPT4gY3JlYXRlQ29uc3RyYWludChhcmdzLnBhcmFtcyksXG4gICAgICAgICAgICB3cml0ZXI6IChfYXJncykgPT4gd3JpdGVQcmltaXRpdmUsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBhcmdzLmRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhcmdzLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgYyA9IGFyZ3MuY29uc3RyYWludDtcbiAgICAgICAgICAgIGlmIChjICYmIGZpbmRDb25zdHJhaW50KGMsIExpc3RDb25zdHJhaW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGlzdENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IChfYSA9IGZpbmRMaXN0SXRlbXMoYykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBUZXh0Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBwYXJzZXI6ICh2KSA9PiB2LFxuICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXRTdHJpbmcsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgQ29uc3RhbnRzID0ge1xuICAgICAgICBtb25pdG9yOiB7XG4gICAgICAgICAgICBkZWZhdWx0SW50ZXJ2YWw6IDIwMCxcbiAgICAgICAgICAgIGRlZmF1bHRMaW5lQ291bnQ6IDMsXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGNsYXNzTmFtZSQyID0gQ2xhc3NOYW1lKCdtbGwnKTtcbiAgICBjbGFzcyBNdWx0aUxvZ1ZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlVXBkYXRlXyA9IHRoaXMub25WYWx1ZVVwZGF0ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVyXyA9IGNvbmZpZy5mb3JtYXR0ZXI7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMigpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0YXJlYUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICAgICAgICAgIHRleHRhcmVhRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQyKCdpJykpO1xuICAgICAgICAgICAgdGV4dGFyZWFFbGVtLnN0eWxlLmhlaWdodCA9IGBjYWxjKHZhcigtLWJsZC11cykgKiAke2NvbmZpZy5saW5lQ291bnR9KWA7XG4gICAgICAgICAgICB0ZXh0YXJlYUVsZW0ucmVhZE9ubHkgPSB0cnVlO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQodGV4dGFyZWFFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0YXJlYUVsZW0pO1xuICAgICAgICAgICAgdGhpcy50ZXh0YXJlYUVsZW1fID0gdGV4dGFyZWFFbGVtO1xuICAgICAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZVVwZGF0ZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtID0gdGhpcy50ZXh0YXJlYUVsZW1fO1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkU2Nyb2xsID0gZWxlbS5zY3JvbGxUb3AgPT09IGVsZW0uc2Nyb2xsSGVpZ2h0IC0gZWxlbS5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZS5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVzLnB1c2godGhpcy5mb3JtYXR0ZXJfKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlbGVtLnRleHRDb250ZW50ID0gbGluZXMuam9pbignXFxuJyk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgZWxlbS5zY3JvbGxUb3AgPSBlbGVtLnNjcm9sbEhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlVXBkYXRlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgTXVsdGlMb2dDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgTXVsdGlMb2dWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY29uZmlnLmZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICBsaW5lQ291bnQ6IGNvbmZpZy5saW5lQ291bnQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJDEgPSBDbGFzc05hbWUoJ3NnbCcpO1xuICAgIGNsYXNzIFNpbmdsZUxvZ1ZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlVXBkYXRlXyA9IHRoaXMub25WYWx1ZVVwZGF0ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVyXyA9IGNvbmZpZy5mb3JtYXR0ZXI7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMSgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBpbnB1dEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQxKCdpJykpO1xuICAgICAgICAgICAgaW5wdXRFbGVtLnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlucHV0RWxlbS50eXBlID0gJ3RleHQnO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQoaW5wdXRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChpbnB1dEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQgPSBpbnB1dEVsZW07XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlVXBkYXRlXyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBsYXN0VmFsdWUgPSB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUgPVxuICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5mb3JtYXR0ZXJfKGxhc3RWYWx1ZSkgOiAnJztcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlVXBkYXRlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgU2luZ2xlTG9nQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IFNpbmdsZUxvZ1ZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBjb25maWcuZm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IEJvb2xlYW5Nb25pdG9yUGx1Z2luID0ge1xuICAgICAgICBpZDogJ21vbml0b3ItYm9vbCcsXG4gICAgICAgIHR5cGU6ICdtb25pdG9yJyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIGxpbmVDb3VudDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IGJvb2xGcm9tVW5rbm93bixcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmIChhcmdzLnZhbHVlLnJhd1ZhbHVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2luZ2xlTG9nQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogQm9vbGVhbkZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFyZ3MudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IE11bHRpTG9nQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBCb29sZWFuRm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgIGxpbmVDb3VudDogKF9hID0gYXJncy5wYXJhbXMubGluZUNvdW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBDb25zdGFudHMubW9uaXRvci5kZWZhdWx0TGluZUNvdW50LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY2xhc3MgR3JhcGhDdXJzb3Ige1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLmluZGV4XyA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIGdldCBpbmRleCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluZGV4XztcbiAgICAgICAgfVxuICAgICAgICBzZXQgaW5kZXgoaW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLmluZGV4XyAhPT0gaW5kZXg7XG4gICAgICAgICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhfID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUgPSBDbGFzc05hbWUoJ2dybCcpO1xuICAgIGNsYXNzIEdyYXBoTG9nVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ3Vyc29yQ2hhbmdlXyA9IHRoaXMub25DdXJzb3JDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVVcGRhdGVfID0gdGhpcy5vblZhbHVlVXBkYXRlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVyXyA9IGNvbmZpZy5mb3JtYXR0ZXI7XG4gICAgICAgICAgICB0aGlzLm1pblZhbHVlXyA9IGNvbmZpZy5taW5WYWx1ZTtcbiAgICAgICAgICAgIHRoaXMubWF4VmFsdWVfID0gY29uZmlnLm1heFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3JfID0gY29uZmlnLmN1cnNvcjtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yXy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ3Vyc29yQ2hhbmdlXyk7XG4gICAgICAgICAgICBjb25zdCBzdmdFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdzdmcnKTtcbiAgICAgICAgICAgIHN2Z0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ2cnKSk7XG4gICAgICAgICAgICBzdmdFbGVtLnN0eWxlLmhlaWdodCA9IGBjYWxjKHZhcigtLWJsZC11cykgKiAke2NvbmZpZy5saW5lQ291bnR9KWA7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoc3ZnRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnN2Z0VsZW1fID0gc3ZnRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdwb2x5bGluZScpO1xuICAgICAgICAgICAgdGhpcy5zdmdFbGVtXy5hcHBlbmRDaGlsZChsaW5lRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmxpbmVFbGVtXyA9IGxpbmVFbGVtO1xuICAgICAgICAgICAgY29uc3QgdG9vbHRpcEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0b29sdGlwRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgndCcpLCBDbGFzc05hbWUoJ3R0JykoKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodG9vbHRpcEVsZW0pO1xuICAgICAgICAgICAgdGhpcy50b29sdGlwRWxlbV8gPSB0b29sdGlwRWxlbTtcbiAgICAgICAgICAgIGNvbmZpZy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVVcGRhdGVfKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZ3JhcGhFbGVtZW50KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3ZnRWxlbV87XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuc3ZnRWxlbV8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICBjb25zdCBtYXhJbmRleCA9IHRoaXMudmFsdWUucmF3VmFsdWUubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGNvbnN0IG1pbiA9IHRoaXMubWluVmFsdWVfO1xuICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXhWYWx1ZV87XG4gICAgICAgICAgICBjb25zdCBwb2ludHMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUucmF3VmFsdWUuZm9yRWFjaCgodiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeCA9IG1hcFJhbmdlKGluZGV4LCAwLCBtYXhJbmRleCwgMCwgYm91bmRzLndpZHRoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB5ID0gbWFwUmFuZ2UodiwgbWluLCBtYXgsIGJvdW5kcy5oZWlnaHQsIDApO1xuICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKFt4LCB5XS5qb2luKCcsJykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmxpbmVFbGVtXy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAncG9pbnRzJywgcG9pbnRzLmpvaW4oJyAnKSk7XG4gICAgICAgICAgICBjb25zdCB0b29sdGlwRWxlbSA9IHRoaXMudG9vbHRpcEVsZW1fO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlW3RoaXMuY3Vyc29yXy5pbmRleF07XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRvb2x0aXBFbGVtLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKCd0JywgJ2EnKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdHggPSBtYXBSYW5nZSh0aGlzLmN1cnNvcl8uaW5kZXgsIDAsIG1heEluZGV4LCAwLCBib3VuZHMud2lkdGgpO1xuICAgICAgICAgICAgY29uc3QgdHkgPSBtYXBSYW5nZSh2YWx1ZSwgbWluLCBtYXgsIGJvdW5kcy5oZWlnaHQsIDApO1xuICAgICAgICAgICAgdG9vbHRpcEVsZW0uc3R5bGUubGVmdCA9IGAke3R4fXB4YDtcbiAgICAgICAgICAgIHRvb2x0aXBFbGVtLnN0eWxlLnRvcCA9IGAke3R5fXB4YDtcbiAgICAgICAgICAgIHRvb2x0aXBFbGVtLnRleHRDb250ZW50ID0gYCR7dGhpcy5mb3JtYXR0ZXJfKHZhbHVlKX1gO1xuICAgICAgICAgICAgaWYgKCF0b29sdGlwRWxlbS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKCd0JywgJ2EnKSkpIHtcbiAgICAgICAgICAgICAgICB0b29sdGlwRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgndCcsICdhJyksIGNsYXNzTmFtZSgndCcsICdpbicpKTtcbiAgICAgICAgICAgICAgICBmb3JjZVJlZmxvdyh0b29sdGlwRWxlbSk7XG4gICAgICAgICAgICAgICAgdG9vbHRpcEVsZW0uY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUoJ3QnLCAnaW4nKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25WYWx1ZVVwZGF0ZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICBvbkN1cnNvckNoYW5nZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIEdyYXBoTG9nQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uR3JhcGhNb3VzZU1vdmVfID0gdGhpcy5vbkdyYXBoTW91c2VNb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkdyYXBoTW91c2VMZWF2ZV8gPSB0aGlzLm9uR3JhcGhNb3VzZUxlYXZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkdyYXBoUG9pbnRlckRvd25fID0gdGhpcy5vbkdyYXBoUG9pbnRlckRvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uR3JhcGhQb2ludGVyTW92ZV8gPSB0aGlzLm9uR3JhcGhQb2ludGVyTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25HcmFwaFBvaW50ZXJVcF8gPSB0aGlzLm9uR3JhcGhQb2ludGVyVXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3JfID0gbmV3IEdyYXBoQ3Vyc29yKCk7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgR3JhcGhMb2dWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIGN1cnNvcjogdGhpcy5jdXJzb3JfLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY29uZmlnLmZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICBsaW5lQ291bnQ6IGNvbmZpZy5saW5lQ291bnQsXG4gICAgICAgICAgICAgICAgbWF4VmFsdWU6IGNvbmZpZy5tYXhWYWx1ZSxcbiAgICAgICAgICAgICAgICBtaW5WYWx1ZTogY29uZmlnLm1pblZhbHVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghc3VwcG9ydHNUb3VjaChkb2MpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbkdyYXBoTW91c2VNb3ZlXyk7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIHRoaXMub25HcmFwaE1vdXNlTGVhdmVfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBoID0gbmV3IFBvaW50ZXJIYW5kbGVyKHRoaXMudmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBwaC5lbWl0dGVyLm9uKCdkb3duJywgdGhpcy5vbkdyYXBoUG9pbnRlckRvd25fKTtcbiAgICAgICAgICAgICAgICBwaC5lbWl0dGVyLm9uKCdtb3ZlJywgdGhpcy5vbkdyYXBoUG9pbnRlck1vdmVfKTtcbiAgICAgICAgICAgICAgICBwaC5lbWl0dGVyLm9uKCd1cCcsIHRoaXMub25HcmFwaFBvaW50ZXJVcF8pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uR3JhcGhNb3VzZUxlYXZlXygpIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yXy5pbmRleCA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIG9uR3JhcGhNb3VzZU1vdmVfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBib3VuZHMgPSB0aGlzLnZpZXcuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yXy5pbmRleCA9IE1hdGguZmxvb3IobWFwUmFuZ2UoZXYub2Zmc2V0WCwgMCwgYm91bmRzLndpZHRoLCAwLCB0aGlzLnZhbHVlLnJhd1ZhbHVlLmxlbmd0aCkpO1xuICAgICAgICB9XG4gICAgICAgIG9uR3JhcGhQb2ludGVyRG93bl8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMub25HcmFwaFBvaW50ZXJNb3ZlXyhldik7XG4gICAgICAgIH1cbiAgICAgICAgb25HcmFwaFBvaW50ZXJNb3ZlXyhldikge1xuICAgICAgICAgICAgaWYgKCFldi5kYXRhLnBvaW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJzb3JfLmluZGV4ID0gLTE7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jdXJzb3JfLmluZGV4ID0gTWF0aC5mbG9vcihtYXBSYW5nZShldi5kYXRhLnBvaW50LngsIDAsIGV2LmRhdGEuYm91bmRzLndpZHRoLCAwLCB0aGlzLnZhbHVlLnJhd1ZhbHVlLmxlbmd0aCkpO1xuICAgICAgICB9XG4gICAgICAgIG9uR3JhcGhQb2ludGVyVXBfKCkge1xuICAgICAgICAgICAgdGhpcy5jdXJzb3JfLmluZGV4ID0gLTE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGb3JtYXR0ZXIocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiAnZm9ybWF0JyBpbiBwYXJhbXMgJiYgIWlzRW1wdHkocGFyYW1zLmZvcm1hdClcbiAgICAgICAgICAgID8gcGFyYW1zLmZvcm1hdFxuICAgICAgICAgICAgOiBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoMik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVRleHRNb25pdG9yKGFyZ3MpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoYXJncy52YWx1ZS5yYXdWYWx1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2luZ2xlTG9nQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBjcmVhdGVGb3JtYXR0ZXIoYXJncy5wYXJhbXMpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IE11bHRpTG9nQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICBmb3JtYXR0ZXI6IGNyZWF0ZUZvcm1hdHRlcihhcmdzLnBhcmFtcyksXG4gICAgICAgICAgICBsaW5lQ291bnQ6IChfYSA9IGFyZ3MucGFyYW1zLmxpbmVDb3VudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogQ29uc3RhbnRzLm1vbml0b3IuZGVmYXVsdExpbmVDb3VudCxcbiAgICAgICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlLFxuICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUdyYXBoTW9uaXRvcihhcmdzKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICByZXR1cm4gbmV3IEdyYXBoTG9nQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICBmb3JtYXR0ZXI6IGNyZWF0ZUZvcm1hdHRlcihhcmdzLnBhcmFtcyksXG4gICAgICAgICAgICBsaW5lQ291bnQ6IChfYSA9IGFyZ3MucGFyYW1zLmxpbmVDb3VudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogQ29uc3RhbnRzLm1vbml0b3IuZGVmYXVsdExpbmVDb3VudCxcbiAgICAgICAgICAgIG1heFZhbHVlOiAoX2IgPSAoJ21heCcgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5tYXggOiBudWxsKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogMTAwLFxuICAgICAgICAgICAgbWluVmFsdWU6IChfYyA9ICgnbWluJyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLm1pbiA6IG51bGwpKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAwLFxuICAgICAgICAgICAgdmFsdWU6IGFyZ3MudmFsdWUsXG4gICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2hvdWxkU2hvd0dyYXBoKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gJ3ZpZXcnIGluIHBhcmFtcyAmJiBwYXJhbXMudmlldyA9PT0gJ2dyYXBoJztcbiAgICB9XG4gICAgY29uc3QgTnVtYmVyTW9uaXRvclBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdtb25pdG9yLW51bWJlcicsXG4gICAgICAgIHR5cGU6ICdtb25pdG9yJyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBwLm9wdGlvbmFsLmZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgIGxpbmVDb3VudDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICAgICAgbWF4OiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgICAgICBtaW46IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgICAgIHZpZXc6IHAub3B0aW9uYWwuc3RyaW5nLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIGRlZmF1bHRCdWZmZXJTaXplOiAocGFyYW1zKSA9PiAoc2hvdWxkU2hvd0dyYXBoKHBhcmFtcykgPyA2NCA6IDEpLFxuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IG51bWJlckZyb21Vbmtub3duLFxuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgaWYgKHNob3VsZFNob3dHcmFwaChhcmdzLnBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlR3JhcGhNb25pdG9yKGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVRleHRNb25pdG9yKGFyZ3MpO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBTdHJpbmdNb25pdG9yUGx1Z2luID0ge1xuICAgICAgICBpZDogJ21vbml0b3Itc3RyaW5nJyxcbiAgICAgICAgdHlwZTogJ21vbml0b3InLFxuICAgICAgICBhY2NlcHQ6ICh2YWx1ZSwgcGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBsaW5lQ291bnQ6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgICAgIG11bHRpbGluZTogcC5vcHRpb25hbC5ib29sZWFuLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIHJlYWRlcjogKF9hcmdzKSA9PiBzdHJpbmdGcm9tVW5rbm93bixcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJncy52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IG11bHRpbGluZSA9IHZhbHVlLnJhd1ZhbHVlLmxlbmd0aCA+IDEgfHxcbiAgICAgICAgICAgICAgICAoJ211bHRpbGluZScgaW4gYXJncy5wYXJhbXMgJiYgYXJncy5wYXJhbXMubXVsdGlsaW5lKTtcbiAgICAgICAgICAgIGlmIChtdWx0aWxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE11bHRpTG9nQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogZm9ybWF0U3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICBsaW5lQ291bnQ6IChfYSA9IGFyZ3MucGFyYW1zLmxpbmVDb3VudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogQ29uc3RhbnRzLm1vbml0b3IuZGVmYXVsdExpbmVDb3VudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBTaW5nbGVMb2dDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGZvcm1hdFN0cmluZyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjbGFzcyBJbnB1dEJpbmRpbmcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnJlYWRlciA9IGNvbmZpZy5yZWFkZXI7XG4gICAgICAgICAgICB0aGlzLndyaXRlciA9IGNvbmZpZy53cml0ZXI7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLnRhcmdldCA9IGNvbmZpZy50YXJnZXQ7XG4gICAgICAgICAgICB0aGlzLnJlYWQoKTtcbiAgICAgICAgfVxuICAgICAgICByZWFkKCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0VmFsdWUgPSB0aGlzLnRhcmdldC5yZWFkKCk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUucmF3VmFsdWUgPSB0aGlzLnJlYWRlcih0YXJnZXRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgd3JpdGVfKHJhd1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlcih0aGlzLnRhcmdldCwgcmF3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlXyhldi5yYXdWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV2Lm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgcmF3VmFsdWU6IGV2LnJhd1ZhbHVlLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW5wdXRCaW5kaW5nQ29udHJvbGxlcihwbHVnaW4sIGFyZ3MpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGx1Z2luLmFjY2VwdChhcmdzLnRhcmdldC5yZWFkKCksIGFyZ3MucGFyYW1zKTtcbiAgICAgICAgaWYgKGlzRW1wdHkocmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgIGNvbnN0IHZhbHVlQXJncyA9IHtcbiAgICAgICAgICAgIHRhcmdldDogYXJncy50YXJnZXQsXG4gICAgICAgICAgICBpbml0aWFsVmFsdWU6IHJlc3VsdC5pbml0aWFsVmFsdWUsXG4gICAgICAgICAgICBwYXJhbXM6IHJlc3VsdC5wYXJhbXMsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IHBsdWdpbi5iaW5kaW5nLnJlYWRlcih2YWx1ZUFyZ3MpO1xuICAgICAgICBjb25zdCBjb25zdHJhaW50ID0gcGx1Z2luLmJpbmRpbmcuY29uc3RyYWludFxuICAgICAgICAgICAgPyBwbHVnaW4uYmluZGluZy5jb25zdHJhaW50KHZhbHVlQXJncylcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNyZWF0ZVZhbHVlKHJlYWRlcihyZXN1bHQuaW5pdGlhbFZhbHVlKSwge1xuICAgICAgICAgICAgY29uc3RyYWludDogY29uc3RyYWludCxcbiAgICAgICAgICAgIGVxdWFsczogcGx1Z2luLmJpbmRpbmcuZXF1YWxzLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYmluZGluZyA9IG5ldyBJbnB1dEJpbmRpbmcoe1xuICAgICAgICAgICAgcmVhZGVyOiByZWFkZXIsXG4gICAgICAgICAgICB0YXJnZXQ6IGFyZ3MudGFyZ2V0LFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgd3JpdGVyOiBwbHVnaW4uYmluZGluZy53cml0ZXIodmFsdWVBcmdzKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRpc2FibGVkID0gcC5vcHRpb25hbC5ib29sZWFuKGFyZ3MucGFyYW1zLmRpc2FibGVkKS52YWx1ZTtcbiAgICAgICAgY29uc3QgaGlkZGVuID0gcC5vcHRpb25hbC5ib29sZWFuKGFyZ3MucGFyYW1zLmhpZGRlbikudmFsdWU7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBwbHVnaW4uY29udHJvbGxlcih7XG4gICAgICAgICAgICBjb25zdHJhaW50OiBjb25zdHJhaW50LFxuICAgICAgICAgICAgZG9jdW1lbnQ6IGFyZ3MuZG9jdW1lbnQsXG4gICAgICAgICAgICBpbml0aWFsVmFsdWU6IHJlc3VsdC5pbml0aWFsVmFsdWUsXG4gICAgICAgICAgICBwYXJhbXM6IHJlc3VsdC5wYXJhbXMsXG4gICAgICAgICAgICB2YWx1ZTogYmluZGluZy52YWx1ZSxcbiAgICAgICAgICAgIHZpZXdQcm9wczogVmlld1Byb3BzLmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICAgICAgICAgIGhpZGRlbjogaGlkZGVuLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHAub3B0aW9uYWwuc3RyaW5nKGFyZ3MucGFyYW1zLmxhYmVsKS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnB1dEJpbmRpbmdDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgIGJpbmRpbmc6IGJpbmRpbmcsXG4gICAgICAgICAgICBibGFkZTogY3JlYXRlQmxhZGUoKSxcbiAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWwgfHwgYXJncy50YXJnZXQua2V5LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB2YWx1ZUNvbnRyb2xsZXI6IGNvbnRyb2xsZXIsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsYXNzIE1vbml0b3JCaW5kaW5nIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uVGlja18gPSB0aGlzLm9uVGlja18uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucmVhZGVyXyA9IGNvbmZpZy5yZWFkZXI7XG4gICAgICAgICAgICB0aGlzLnRhcmdldCA9IGNvbmZpZy50YXJnZXQ7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudGlja2VyID0gY29uZmlnLnRpY2tlcjtcbiAgICAgICAgICAgIHRoaXMudGlja2VyLmVtaXR0ZXIub24oJ3RpY2snLCB0aGlzLm9uVGlja18pO1xuICAgICAgICAgICAgdGhpcy5yZWFkKCk7XG4gICAgICAgIH1cbiAgICAgICAgZGlzcG9zZSgpIHtcbiAgICAgICAgICAgIHRoaXMudGlja2VyLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZWFkKCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0VmFsdWUgPSB0aGlzLnRhcmdldC5yZWFkKCk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMucmVhZGVyXyh0YXJnZXRWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlID0gY3JlYXRlUHVzaGVkQnVmZmVyKGJ1ZmZlciwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ3VwZGF0ZScsIHtcbiAgICAgICAgICAgICAgICByYXdWYWx1ZTogbmV3VmFsdWUsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25UaWNrXyhfKSB7XG4gICAgICAgICAgICB0aGlzLnJlYWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVRpY2tlcihkb2N1bWVudCwgaW50ZXJ2YWwpIHtcbiAgICAgICAgcmV0dXJuIGludGVydmFsID09PSAwXG4gICAgICAgICAgICA/IG5ldyBNYW51YWxUaWNrZXIoKVxuICAgICAgICAgICAgOiBuZXcgSW50ZXJ2YWxUaWNrZXIoZG9jdW1lbnQsIGludGVydmFsICE9PSBudWxsICYmIGludGVydmFsICE9PSB2b2lkIDAgPyBpbnRlcnZhbCA6IENvbnN0YW50cy5tb25pdG9yLmRlZmF1bHRJbnRlcnZhbCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZU1vbml0b3JCaW5kaW5nQ29udHJvbGxlcihwbHVnaW4sIGFyZ3MpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIGNvbnN0IFAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwbHVnaW4uYWNjZXB0KGFyZ3MudGFyZ2V0LnJlYWQoKSwgYXJncy5wYXJhbXMpO1xuICAgICAgICBpZiAoaXNFbXB0eShyZXN1bHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiaW5kaW5nQXJncyA9IHtcbiAgICAgICAgICAgIHRhcmdldDogYXJncy50YXJnZXQsXG4gICAgICAgICAgICBpbml0aWFsVmFsdWU6IHJlc3VsdC5pbml0aWFsVmFsdWUsXG4gICAgICAgICAgICBwYXJhbXM6IHJlc3VsdC5wYXJhbXMsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IHBsdWdpbi5iaW5kaW5nLnJlYWRlcihiaW5kaW5nQXJncyk7XG4gICAgICAgIGNvbnN0IGJ1ZmZlclNpemUgPSAoX2IgPSAoX2EgPSBQLm9wdGlvbmFsLm51bWJlcihhcmdzLnBhcmFtcy5idWZmZXJTaXplKS52YWx1ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKHBsdWdpbi5iaW5kaW5nLmRlZmF1bHRCdWZmZXJTaXplICYmXG4gICAgICAgICAgICBwbHVnaW4uYmluZGluZy5kZWZhdWx0QnVmZmVyU2l6ZShyZXN1bHQucGFyYW1zKSkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDE7XG4gICAgICAgIGNvbnN0IGludGVydmFsID0gUC5vcHRpb25hbC5udW1iZXIoYXJncy5wYXJhbXMuaW50ZXJ2YWwpLnZhbHVlO1xuICAgICAgICBjb25zdCBiaW5kaW5nID0gbmV3IE1vbml0b3JCaW5kaW5nKHtcbiAgICAgICAgICAgIHJlYWRlcjogcmVhZGVyLFxuICAgICAgICAgICAgdGFyZ2V0OiBhcmdzLnRhcmdldCxcbiAgICAgICAgICAgIHRpY2tlcjogY3JlYXRlVGlja2VyKGFyZ3MuZG9jdW1lbnQsIGludGVydmFsKSxcbiAgICAgICAgICAgIHZhbHVlOiBpbml0aWFsaXplQnVmZmVyKGJ1ZmZlclNpemUpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGlzYWJsZWQgPSBQLm9wdGlvbmFsLmJvb2xlYW4oYXJncy5wYXJhbXMuZGlzYWJsZWQpLnZhbHVlO1xuICAgICAgICBjb25zdCBoaWRkZW4gPSBQLm9wdGlvbmFsLmJvb2xlYW4oYXJncy5wYXJhbXMuaGlkZGVuKS52YWx1ZTtcbiAgICAgICAgY29uc3QgY29udHJvbGxlciA9IHBsdWdpbi5jb250cm9sbGVyKHtcbiAgICAgICAgICAgIGRvY3VtZW50OiBhcmdzLmRvY3VtZW50LFxuICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQucGFyYW1zLFxuICAgICAgICAgICAgdmFsdWU6IGJpbmRpbmcudmFsdWUsXG4gICAgICAgICAgICB2aWV3UHJvcHM6IFZpZXdQcm9wcy5jcmVhdGUoe1xuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICAgICAgICBoaWRkZW46IGhpZGRlbixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbGFiZWwgPSAoX2MgPSBQLm9wdGlvbmFsLnN0cmluZyhhcmdzLnBhcmFtcy5sYWJlbCkudmFsdWUpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IGFyZ3MudGFyZ2V0LmtleTtcbiAgICAgICAgcmV0dXJuIG5ldyBNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgYmluZGluZzogYmluZGluZyxcbiAgICAgICAgICAgIGJsYWRlOiBjcmVhdGVCbGFkZSgpLFxuICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdmFsdWVDb250cm9sbGVyOiBjb250cm9sbGVyLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbGFzcyBQbHVnaW5Qb29sIHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNNYXBfID0ge1xuICAgICAgICAgICAgICAgIGJsYWRlczogW10sXG4gICAgICAgICAgICAgICAgaW5wdXRzOiBbXSxcbiAgICAgICAgICAgICAgICBtb25pdG9yczogW10sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGdldEFsbCgpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5wbHVnaW5zTWFwXy5ibGFkZXMsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5wbHVnaW5zTWFwXy5pbnB1dHMsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5wbHVnaW5zTWFwXy5tb25pdG9ycyxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmVnaXN0ZXIocikge1xuICAgICAgICAgICAgaWYgKHIudHlwZSA9PT0gJ2JsYWRlJykge1xuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luc01hcF8uYmxhZGVzLnVuc2hpZnQocik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyLnR5cGUgPT09ICdpbnB1dCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnNNYXBfLmlucHV0cy51bnNoaWZ0KHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoci50eXBlID09PSAnbW9uaXRvcicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnNNYXBfLm1vbml0b3JzLnVuc2hpZnQocik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlSW5wdXQoZG9jdW1lbnQsIHRhcmdldCwgcGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBpbml0aWFsVmFsdWUgPSB0YXJnZXQucmVhZCgpO1xuICAgICAgICAgICAgaWYgKGlzRW1wdHkoaW5pdGlhbFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUcEVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB0YXJnZXQua2V5LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbm9tYXRjaGluZ2NvbnRyb2xsZXInLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYmMgPSB0aGlzLnBsdWdpbnNNYXBfLmlucHV0cy5yZWR1Y2UoKHJlc3VsdCwgcGx1Z2luKSA9PiByZXN1bHQgfHxcbiAgICAgICAgICAgICAgICBjcmVhdGVJbnB1dEJpbmRpbmdDb250cm9sbGVyKHBsdWdpbiwge1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudDogZG9jdW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgICAgICB9KSwgbnVsbCk7XG4gICAgICAgICAgICBpZiAoYmMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHBFcnJvcih7XG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IHRhcmdldC5rZXksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnbm9tYXRjaGluZ2NvbnRyb2xsZXInLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlTW9uaXRvcihkb2N1bWVudCwgdGFyZ2V0LCBwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gdGhpcy5wbHVnaW5zTWFwXy5tb25pdG9ycy5yZWR1Y2UoKHJlc3VsdCwgcGx1Z2luKSA9PiByZXN1bHQgfHxcbiAgICAgICAgICAgICAgICBjcmVhdGVNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIocGx1Z2luLCB7XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50OiBkb2N1bWVudCxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgICAgIH0pLCBudWxsKTtcbiAgICAgICAgICAgIGlmIChiYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBUcEVycm9yKHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogdGFyZ2V0LmtleSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHR5cGU6ICdub21hdGNoaW5nY29udHJvbGxlcicsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjcmVhdGVCbGFkZShkb2N1bWVudCwgcGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IHRoaXMucGx1Z2luc01hcF8uYmxhZGVzLnJlZHVjZSgocmVzdWx0LCBwbHVnaW4pID0+IHJlc3VsdCB8fFxuICAgICAgICAgICAgICAgIGNyZWF0ZUJsYWRlQ29udHJvbGxlcihwbHVnaW4sIHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQ6IGRvY3VtZW50LFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgICAgICB9KSwgbnVsbCk7XG4gICAgICAgICAgICBpZiAoIWJjKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFRwRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbm9tYXRjaGluZ3ZpZXcnLFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBiYztcbiAgICAgICAgfVxuICAgICAgICBjcmVhdGVCbGFkZUFwaShiYykge1xuICAgICAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgSW5wdXRCaW5kaW5nQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSW5wdXRCaW5kaW5nQXBpKGJjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIE1vbml0b3JCaW5kaW5nQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTW9uaXRvckJpbmRpbmdBcGkoYmMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgUmFja0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJhY2tBcGkoYmMsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXBpID0gdGhpcy5wbHVnaW5zTWFwXy5ibGFkZXMucmVkdWNlKChyZXN1bHQsIHBsdWdpbikgPT4gcmVzdWx0IHx8XG4gICAgICAgICAgICAgICAgcGx1Z2luLmFwaSh7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IGJjLFxuICAgICAgICAgICAgICAgICAgICBwb29sOiB0aGlzLFxuICAgICAgICAgICAgICAgIH0pLCBudWxsKTtcbiAgICAgICAgICAgIGlmICghYXBpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFwaTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRQbHVnaW5Qb29sKCkge1xuICAgICAgICBjb25zdCBwb29sID0gbmV3IFBsdWdpblBvb2woKTtcbiAgICAgICAgW1xuICAgICAgICAgICAgUG9pbnQyZElucHV0UGx1Z2luLFxuICAgICAgICAgICAgUG9pbnQzZElucHV0UGx1Z2luLFxuICAgICAgICAgICAgUG9pbnQ0ZElucHV0UGx1Z2luLFxuICAgICAgICAgICAgU3RyaW5nSW5wdXRQbHVnaW4sXG4gICAgICAgICAgICBOdW1iZXJJbnB1dFBsdWdpbixcbiAgICAgICAgICAgIFN0cmluZ0NvbG9ySW5wdXRQbHVnaW4sXG4gICAgICAgICAgICBPYmplY3RDb2xvcklucHV0UGx1Z2luLFxuICAgICAgICAgICAgTnVtYmVyQ29sb3JJbnB1dFBsdWdpbixcbiAgICAgICAgICAgIEJvb2xlYW5JbnB1dFBsdWdpbixcbiAgICAgICAgICAgIEJvb2xlYW5Nb25pdG9yUGx1Z2luLFxuICAgICAgICAgICAgU3RyaW5nTW9uaXRvclBsdWdpbixcbiAgICAgICAgICAgIE51bWJlck1vbml0b3JQbHVnaW4sXG4gICAgICAgICAgICBCdXR0b25CbGFkZVBsdWdpbixcbiAgICAgICAgICAgIEZvbGRlckJsYWRlUGx1Z2luLFxuICAgICAgICAgICAgU2VwYXJhdG9yQmxhZGVQbHVnaW4sXG4gICAgICAgICAgICBUYWJCbGFkZVBsdWdpbixcbiAgICAgICAgXS5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICBwb29sLnJlZ2lzdGVyKHApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBvb2w7XG4gICAgfVxuXG4gICAgY2xhc3MgTGlzdEFwaSBleHRlbmRzIEJsYWRlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlcikge1xuICAgICAgICAgICAgc3VwZXIoY29udHJvbGxlcik7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwQ2hhbmdlRXZlbnQodGhpcywgZXYucmF3VmFsdWUpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGxhYmVsKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuZ2V0KCdsYWJlbCcpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBsYWJlbChsYWJlbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wcm9wcy5zZXQoJ2xhYmVsJywgbGFiZWwpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBvcHRpb25zKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnByb3BzLmdldCgnb3B0aW9ucycpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBvcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnByb3BzLnNldCgnb3B0aW9ucycsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnZhbHVlLnJhd1ZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaCA9IGhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8ub24oZXZlbnROYW1lLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICBiaChldi5ldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgU2xpZGVyQXBpIGV4dGVuZHMgQmxhZGVBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8gPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBuZXcgVHBDaGFuZ2VFdmVudCh0aGlzLCBldi5yYXdWYWx1ZSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbGFiZWwoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5wcm9wcy5nZXQoJ2xhYmVsJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGxhYmVsKGxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLnNldCgnbGFiZWwnLCBsYWJlbCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IG1heFZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnNsaWRlckNvbnRyb2xsZXIucHJvcHMuZ2V0KCdtYXhWYWx1ZScpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBtYXhWYWx1ZShtYXhWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIuc2xpZGVyQ29udHJvbGxlci5wcm9wcy5zZXQoJ21heFZhbHVlJywgbWF4VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBtaW5WYWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5zbGlkZXJDb250cm9sbGVyLnByb3BzLmdldCgnbWluVmFsdWUnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgbWluVmFsdWUobWluVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnNsaWRlckNvbnRyb2xsZXIucHJvcHMuc2V0KCdtaW5WYWx1ZScsIG1pblZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUucmF3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci52YWx1ZS5yYXdWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLm9uKGV2ZW50TmFtZSwgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgYmgoZXYuZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFRleHRBcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXyA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IG5ldyBUcENoYW5nZUV2ZW50KHRoaXMsIGV2LnJhd1ZhbHVlKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBsYWJlbCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLmdldCgnbGFiZWwnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgbGFiZWwobGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuc2V0KCdsYWJlbCcsIGxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZm9ybWF0dGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnByb3BzLmdldCgnZm9ybWF0dGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGZvcm1hdHRlcihmb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnByb3BzLnNldCgnZm9ybWF0dGVyJywgZm9ybWF0dGVyKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUucmF3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci52YWx1ZS5yYXdWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLm9uKGV2ZW50TmFtZSwgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgYmgoZXYuZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IExpc3RCbGFkZVBsdWdpbiA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogJ2xpc3QnLFxuICAgICAgICAgICAgdHlwZTogJ2JsYWRlJyxcbiAgICAgICAgICAgIGFjY2VwdChwYXJhbXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogcC5yZXF1aXJlZC5jdXN0b20ocGFyc2VMaXN0T3B0aW9ucyksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwLnJlcXVpcmVkLnJhdyxcbiAgICAgICAgICAgICAgICAgICAgdmlldzogcC5yZXF1aXJlZC5jb25zdGFudCgnbGlzdCcpLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogcC5vcHRpb25hbC5zdHJpbmcsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA/IHsgcGFyYW1zOiByZXN1bHQgfSA6IG51bGw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udHJvbGxlcihhcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWMgPSBuZXcgTGlzdENvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBub3JtYWxpemVMaXN0T3B0aW9ucyhhcmdzLnBhcmFtcy5vcHRpb25zKSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjcmVhdGVWYWx1ZShhcmdzLnBhcmFtcy52YWx1ZSksXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMYWJlbGVkVmFsdWVDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgYmxhZGU6IGFyZ3MuYmxhZGUsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBhcmdzLnBhcmFtcy5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlQ29udHJvbGxlcjogaWMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXBpKGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShhcmdzLmNvbnRyb2xsZXIgaW5zdGFuY2VvZiBMYWJlbGVkVmFsdWVDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyLnZhbHVlQ29udHJvbGxlciBpbnN0YW5jZW9mIExpc3RDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMaXN0QXBpKGFyZ3MuY29udHJvbGxlcik7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH0pKCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXhwb3J0UHJlc2V0SnNvbih0YXJnZXRzKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXRzLnJlZHVjZSgocmVzdWx0LCB0YXJnZXQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHJlc3VsdCwge1xuICAgICAgICAgICAgICAgIFt0YXJnZXQucHJlc2V0S2V5XTogdGFyZ2V0LnJlYWQoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbXBvcnRQcmVzZXRKc29uKHRhcmdldHMsIHByZXNldCkge1xuICAgICAgICB0YXJnZXRzLmZvckVhY2goKHRhcmdldCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwcmVzZXRbdGFyZ2V0LnByZXNldEtleV07XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRhcmdldC53cml0ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsYXNzIFJvb3RBcGkgZXh0ZW5kcyBGb2xkZXJBcGkge1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlciwgcG9vbCkge1xuICAgICAgICAgICAgc3VwZXIoY29udHJvbGxlciwgcG9vbCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGVsZW1lbnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy52aWV3LmVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEltcG9ydHMgYSBwcmVzZXQgb2YgYWxsIGlucHV0cy5cbiAgICAgICAgICogQHBhcmFtIHByZXNldCBUaGUgcHJlc2V0IG9iamVjdCB0byBpbXBvcnQuXG4gICAgICAgICAqL1xuICAgICAgICBpbXBvcnRQcmVzZXQocHJlc2V0KSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRzID0gdGhpcy5jb250cm9sbGVyXy5yYWNrQ29udHJvbGxlci5yYWNrXG4gICAgICAgICAgICAgICAgLmZpbmQoSW5wdXRCaW5kaW5nQ29udHJvbGxlcilcbiAgICAgICAgICAgICAgICAubWFwKChpYmMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWJjLmJpbmRpbmcudGFyZ2V0O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpbXBvcnRQcmVzZXRKc29uKHRhcmdldHMsIHByZXNldCk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogRXhwb3J0cyBhIHByZXNldCBvZiBhbGwgaW5wdXRzLlxuICAgICAgICAgKiBAcmV0dXJuIEFuIGV4cG9ydGVkIHByZXNldCBvYmplY3QuXG4gICAgICAgICAqL1xuICAgICAgICBleHBvcnRQcmVzZXQoKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRzID0gdGhpcy5jb250cm9sbGVyXy5yYWNrQ29udHJvbGxlci5yYWNrXG4gICAgICAgICAgICAgICAgLmZpbmQoSW5wdXRCaW5kaW5nQ29udHJvbGxlcilcbiAgICAgICAgICAgICAgICAubWFwKChpYmMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWJjLmJpbmRpbmcudGFyZ2V0O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gZXhwb3J0UHJlc2V0SnNvbih0YXJnZXRzKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogUmVmcmVzaGVzIGFsbCBiaW5kaW5ncyBvZiB0aGUgcGFuZS5cbiAgICAgICAgICovXG4gICAgICAgIHJlZnJlc2goKSB7XG4gICAgICAgICAgICAvLyBGb3JjZS1yZWFkIGFsbCBpbnB1dCBiaW5kaW5nc1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5yYWNrQ29udHJvbGxlci5yYWNrXG4gICAgICAgICAgICAgICAgLmZpbmQoSW5wdXRCaW5kaW5nQ29udHJvbGxlcilcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgoaWJjKSA9PiB7XG4gICAgICAgICAgICAgICAgaWJjLmJpbmRpbmcucmVhZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBGb3JjZS1yZWFkIGFsbCBtb25pdG9yIGJpbmRpbmdzXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnJhY2tDb250cm9sbGVyLnJhY2tcbiAgICAgICAgICAgICAgICAuZmluZChNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKG1iYykgPT4ge1xuICAgICAgICAgICAgICAgIG1iYy5iaW5kaW5nLnJlYWQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgUm9vdENvbnRyb2xsZXIgZXh0ZW5kcyBGb2xkZXJDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHN1cGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBjb25maWcuZXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgYmxhZGU6IGNvbmZpZy5ibGFkZSxcbiAgICAgICAgICAgICAgICBwcm9wczogY29uZmlnLnByb3BzLFxuICAgICAgICAgICAgICAgIHJvb3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBTbGlkZXJCbGFkZVBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdzbGlkZXInLFxuICAgICAgICB0eXBlOiAnYmxhZGUnLFxuICAgICAgICBhY2NlcHQocGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIG1heDogcC5yZXF1aXJlZC5udW1iZXIsXG4gICAgICAgICAgICAgICAgbWluOiBwLnJlcXVpcmVkLm51bWJlcixcbiAgICAgICAgICAgICAgICB2aWV3OiBwLnJlcXVpcmVkLmNvbnN0YW50KCdzbGlkZXInKSxcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IHAub3B0aW9uYWwuZnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgbGFiZWw6IHAub3B0aW9uYWwuc3RyaW5nLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA/IHsgcGFyYW1zOiByZXN1bHQgfSA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXIoYXJncykge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIGNvbnN0IHYgPSAoX2EgPSBhcmdzLnBhcmFtcy52YWx1ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcbiAgICAgICAgICAgIGNvbnN0IHZjID0gbmV3IFNsaWRlclRleHRDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBiYXNlU3RlcDogMSxcbiAgICAgICAgICAgICAgICBwYXJzZXI6IHBhcnNlTnVtYmVyLFxuICAgICAgICAgICAgICAgIHNsaWRlclByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgbWF4VmFsdWU6IGFyZ3MucGFyYW1zLm1heCxcbiAgICAgICAgICAgICAgICAgICAgbWluVmFsdWU6IGFyZ3MucGFyYW1zLm1pbixcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0ZXh0UHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBkcmFnZ2luZ1NjYWxlOiBnZXRTdWl0YWJsZURyYWdnaW5nU2NhbGUodW5kZWZpbmVkLCB2KSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyOiAoX2IgPSBhcmdzLnBhcmFtcy5mb3JtYXQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG51bWJlclRvU3RyaW5nLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBjcmVhdGVWYWx1ZSh2KSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IExhYmVsZWRWYWx1ZUNvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGJsYWRlOiBhcmdzLmJsYWRlLFxuICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGFyZ3MucGFyYW1zLmxhYmVsLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHZhbHVlQ29udHJvbGxlcjogdmMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgYXBpKGFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlciBpbnN0YW5jZW9mIExhYmVsZWRWYWx1ZUNvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIShhcmdzLmNvbnRyb2xsZXIudmFsdWVDb250cm9sbGVyIGluc3RhbmNlb2YgU2xpZGVyVGV4dENvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNsaWRlckFwaShhcmdzLmNvbnRyb2xsZXIpO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBUZXh0QmxhZGVQbHVnaW4gPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6ICd0ZXh0JyxcbiAgICAgICAgICAgIHR5cGU6ICdibGFkZScsXG4gICAgICAgICAgICBhY2NlcHQocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlOiBwLnJlcXVpcmVkLmZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcC5yZXF1aXJlZC5yYXcsXG4gICAgICAgICAgICAgICAgICAgIHZpZXc6IHAucmVxdWlyZWQuY29uc3RhbnQoJ3RleHQnKSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBwLm9wdGlvbmFsLmZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogcC5vcHRpb25hbC5zdHJpbmcsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA/IHsgcGFyYW1zOiByZXN1bHQgfSA6IG51bGw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udHJvbGxlcihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGNvbnN0IGljID0gbmV3IFRleHRDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VyOiBhcmdzLnBhcmFtcy5wYXJzZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyOiAoX2EgPSBhcmdzLnBhcmFtcy5mb3JtYXQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICgodikgPT4gU3RyaW5nKHYpKSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjcmVhdGVWYWx1ZShhcmdzLnBhcmFtcy52YWx1ZSksXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMYWJlbGVkVmFsdWVDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgYmxhZGU6IGFyZ3MuYmxhZGUsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBhcmdzLnBhcmFtcy5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlQ29udHJvbGxlcjogaWMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXBpKGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShhcmdzLmNvbnRyb2xsZXIgaW5zdGFuY2VvZiBMYWJlbGVkVmFsdWVDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyLnZhbHVlQ29udHJvbGxlciBpbnN0YW5jZW9mIFRleHRDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUZXh0QXBpKGFyZ3MuY29udHJvbGxlcik7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH0pKCk7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0V3JhcHBlckVsZW1lbnQoZG9jKSB7XG4gICAgICAgIGNvbnN0IGVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGVsZW0uY2xhc3NMaXN0LmFkZChDbGFzc05hbWUoJ2RmdycpKCkpO1xuICAgICAgICBpZiAoZG9jLmJvZHkpIHtcbiAgICAgICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGVsZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbGVtO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbWJlZFN0eWxlKGRvYywgaWQsIGNzcykge1xuICAgICAgICBpZiAoZG9jLnF1ZXJ5U2VsZWN0b3IoYHN0eWxlW2RhdGEtdHAtc3R5bGU9JHtpZH1dYCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdHlsZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgc3R5bGVFbGVtLmRhdGFzZXQudHBTdHlsZSA9IGlkO1xuICAgICAgICBzdHlsZUVsZW0udGV4dENvbnRlbnQgPSBjc3M7XG4gICAgICAgIGRvYy5oZWFkLmFwcGVuZENoaWxkKHN0eWxlRWxlbSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSByb290IHBhbmUgb2YgVHdlYWtwYW5lLlxuICAgICAqL1xuICAgIGNsYXNzIFBhbmUgZXh0ZW5kcyBSb290QXBpIHtcbiAgICAgICAgY29uc3RydWN0b3Iob3B0X2NvbmZpZykge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gb3B0X2NvbmZpZyB8fCB7fTtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IChfYSA9IGNvbmZpZy5kb2N1bWVudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZ2V0V2luZG93RG9jdW1lbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IHBvb2wgPSBjcmVhdGVEZWZhdWx0UGx1Z2luUG9vbCgpO1xuICAgICAgICAgICAgY29uc3Qgcm9vdENvbnRyb2xsZXIgPSBuZXcgUm9vdENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGNvbmZpZy5leHBhbmRlZCxcbiAgICAgICAgICAgICAgICBibGFkZTogY3JlYXRlQmxhZGUoKSxcbiAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBjb25maWcudGl0bGUsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBWaWV3UHJvcHMuY3JlYXRlKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHN1cGVyKHJvb3RDb250cm9sbGVyLCBwb29sKTtcbiAgICAgICAgICAgIHRoaXMucG9vbF8gPSBwb29sO1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXJFbGVtXyA9IGNvbmZpZy5jb250YWluZXIgfHwgY3JlYXRlRGVmYXVsdFdyYXBwZXJFbGVtZW50KGRvYyk7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lckVsZW1fLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmRvY18gPSBkb2M7XG4gICAgICAgICAgICB0aGlzLnVzZXNEZWZhdWx0V3JhcHBlcl8gPSAhY29uZmlnLmNvbnRhaW5lcjtcbiAgICAgICAgICAgIHRoaXMuc2V0VXBEZWZhdWx0UGx1Z2luc18oKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZG9jdW1lbnQoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZG9jXykge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3IuYWxyZWFkeURpc3Bvc2VkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2NfO1xuICAgICAgICB9XG4gICAgICAgIGRpc3Bvc2UoKSB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJFbGVtID0gdGhpcy5jb250YWluZXJFbGVtXztcbiAgICAgICAgICAgIGlmICghY29udGFpbmVyRWxlbSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3IuYWxyZWFkeURpc3Bvc2VkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy51c2VzRGVmYXVsdFdyYXBwZXJfKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50RWxlbSA9IGNvbnRhaW5lckVsZW0ucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50RWxlbSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtLnJlbW92ZUNoaWxkKGNvbnRhaW5lckVsZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyRWxlbV8gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5kb2NfID0gbnVsbDtcbiAgICAgICAgICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZWdpc3RlclBsdWdpbihidW5kbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbnMgPSAncGx1Z2luJyBpbiBidW5kbGVcbiAgICAgICAgICAgICAgICA/IFtidW5kbGUucGx1Z2luXVxuICAgICAgICAgICAgICAgIDogJ3BsdWdpbnMnIGluIGJ1bmRsZVxuICAgICAgICAgICAgICAgICAgICA/IGJ1bmRsZS5wbHVnaW5zXG4gICAgICAgICAgICAgICAgICAgIDogW107XG4gICAgICAgICAgICBwbHVnaW5zLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvb2xfLnJlZ2lzdGVyKHApO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1iZWRQbHVnaW5TdHlsZV8ocCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbWJlZFBsdWdpblN0eWxlXyhwbHVnaW4pIHtcbiAgICAgICAgICAgIGlmIChwbHVnaW4uY3NzKSB7XG4gICAgICAgICAgICAgICAgZW1iZWRTdHlsZSh0aGlzLmRvY3VtZW50LCBgcGx1Z2luLSR7cGx1Z2luLmlkfWAsIHBsdWdpbi5jc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldFVwRGVmYXVsdFBsdWdpbnNfKCkge1xuICAgICAgICAgICAgLy8gTk9URTogVGhpcyBzdHJpbmcgbGl0ZXJhbCB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIGRlZmF1bHQgQ1NTIGJ5IFJvbGx1cCBhdCB0aGUgY29tcGlsYXRpb24gdGltZVxuICAgICAgICAgICAgZW1iZWRTdHlsZSh0aGlzLmRvY3VtZW50LCAnZGVmYXVsdCcsICcudHAtdGJpdl9iLC50cC1jb2x0eHR2X21zLC50cC1ja2J2X2ksLnRwLXJvdHZfYiwudHAtZmxkdl9iLC50cC1tbGx2X2ksLnRwLXNnbHZfaSwudHAtZ3Jsdl9nLC50cC10eHR2X2ksLnRwLXAyZHB2X3AsLnRwLWNvbHN3dl9zdywudHAtcDJkdl9iLC50cC1idG52X2IsLnRwLWxzdHZfc3std2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItd2lkdGg6MDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXQ7bWFyZ2luOjA7b3V0bGluZTpub25lO3BhZGRpbmc6MH0udHAtcDJkdl9iLC50cC1idG52X2IsLnRwLWxzdHZfc3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2NvbG9yOnZhcigtLWJ0bi1mZyk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpibG9jaztmb250LXdlaWdodDpib2xkO2hlaWdodDp2YXIoLS1ibGQtdXMpO2xpbmUtaGVpZ2h0OnZhcigtLWJsZC11cyk7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS50cC1wMmR2X2I6aG92ZXIsLnRwLWJ0bnZfYjpob3ZlciwudHAtbHN0dl9zOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnRuLWJnLWgpfS50cC1wMmR2X2I6Zm9jdXMsLnRwLWJ0bnZfYjpmb2N1cywudHAtbHN0dl9zOmZvY3Vze2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnRuLWJnLWYpfS50cC1wMmR2X2I6YWN0aXZlLC50cC1idG52X2I6YWN0aXZlLC50cC1sc3R2X3M6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnRuLWJnLWEpfS50cC1wMmR2X2I6ZGlzYWJsZWQsLnRwLWJ0bnZfYjpkaXNhYmxlZCwudHAtbHN0dl9zOmRpc2FibGVke29wYWNpdHk6LjV9LnRwLXR4dHZfaSwudHAtcDJkcHZfcCwudHAtY29sc3d2X3N3e2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmcpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0taW4tZmcpO2ZvbnQtZmFtaWx5OmluaGVyaXQ7aGVpZ2h0OnZhcigtLWJsZC11cyk7bGluZS1oZWlnaHQ6dmFyKC0tYmxkLXVzKTttaW4td2lkdGg6MDt3aWR0aDoxMDAlfS50cC10eHR2X2k6aG92ZXIsLnRwLXAyZHB2X3A6aG92ZXIsLnRwLWNvbHN3dl9zdzpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWgpfS50cC10eHR2X2k6Zm9jdXMsLnRwLXAyZHB2X3A6Zm9jdXMsLnRwLWNvbHN3dl9zdzpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWYpfS50cC10eHR2X2k6YWN0aXZlLC50cC1wMmRwdl9wOmFjdGl2ZSwudHAtY29sc3d2X3N3OmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWEpfS50cC10eHR2X2k6ZGlzYWJsZWQsLnRwLXAyZHB2X3A6ZGlzYWJsZWQsLnRwLWNvbHN3dl9zdzpkaXNhYmxlZHtvcGFjaXR5Oi41fS50cC1tbGx2X2ksLnRwLXNnbHZfaSwudHAtZ3Jsdl9ne2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW8tYmcpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW8tZmcpO2hlaWdodDp2YXIoLS1ibGQtdXMpO3Njcm9sbGJhci1jb2xvcjpjdXJyZW50Q29sb3IgdHJhbnNwYXJlbnQ7c2Nyb2xsYmFyLXdpZHRoOnRoaW47d2lkdGg6MTAwJX0udHAtbWxsdl9pOjotd2Via2l0LXNjcm9sbGJhciwudHAtc2dsdl9pOjotd2Via2l0LXNjcm9sbGJhciwudHAtZ3Jsdl9nOjotd2Via2l0LXNjcm9sbGJhcntoZWlnaHQ6OHB4O3dpZHRoOjhweH0udHAtbWxsdl9pOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIsLnRwLXNnbHZfaTo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyLC50cC1ncmx2X2c6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lcntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS50cC1tbGx2X2k6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLC50cC1zZ2x2X2k6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLC50cC1ncmx2X2c6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcjtib3JkZXI6dHJhbnNwYXJlbnQgc29saWQgMnB4O2JvcmRlci1yYWRpdXM6NHB4fS50cC1yb3R2ey0tZm9udC1mYW1pbHk6IHZhcigtLXRwLWZvbnQtZmFtaWx5LCBSb2JvdG8gTW9ubywgU291cmNlIENvZGUgUHJvLCBNZW5sbywgQ291cmllciwgbW9ub3NwYWNlKTstLWJzLWJyOiB2YXIoLS10cC1iYXNlLWJvcmRlci1yYWRpdXMsIDZweCk7LS1jbnQtaC1wOiB2YXIoLS10cC1jb250YWluZXItaG9yaXpvbnRhbC1wYWRkaW5nLCA0cHgpOy0tY250LXYtcDogdmFyKC0tdHAtY29udGFpbmVyLXZlcnRpY2FsLXBhZGRpbmcsIDRweCk7LS1lbG0tYnI6IHZhcigtLXRwLWVsZW1lbnQtYm9yZGVyLXJhZGl1cywgMnB4KTstLWJsZC1zOiB2YXIoLS10cC1ibGFkZS1zcGFjaW5nLCA0cHgpOy0tYmxkLXVzOiB2YXIoLS10cC1ibGFkZS11bml0LXNpemUsIDIwcHgpOy0tYnMtYmc6IHZhcigtLXRwLWJhc2UtYmFja2dyb3VuZC1jb2xvciwgIzI4MjkyZSk7LS1icy1zaDogdmFyKC0tdHAtYmFzZS1zaGFkb3ctY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4yKSk7LS1idG4tYmc6IHZhcigtLXRwLWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yLCAjYWRhZmI4KTstLWJ0bi1iZy1hOiB2YXIoLS10cC1idXR0b24tYmFja2dyb3VuZC1jb2xvci1hY3RpdmUsICNkNmQ3ZGIpOy0tYnRuLWJnLWY6IHZhcigtLXRwLWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yLWZvY3VzLCAjYzhjYWQwKTstLWJ0bi1iZy1oOiB2YXIoLS10cC1idXR0b24tYmFja2dyb3VuZC1jb2xvci1ob3ZlciwgI2JiYmNjNCk7LS1idG4tZmc6IHZhcigtLXRwLWJ1dHRvbi1mb3JlZ3JvdW5kLWNvbG9yLCAjMjgyOTJlKTstLWNudC1iZzogdmFyKC0tdHAtY29udGFpbmVyLWJhY2tncm91bmQtY29sb3IsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC4xKSk7LS1jbnQtYmctYTogdmFyKC0tdHAtY29udGFpbmVyLWJhY2tncm91bmQtY29sb3ItYWN0aXZlLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuMjUpKTstLWNudC1iZy1mOiB2YXIoLS10cC1jb250YWluZXItYmFja2dyb3VuZC1jb2xvci1mb2N1cywgcmdiYSgxODcsIDE4OCwgMTk2LCAwLjIpKTstLWNudC1iZy1oOiB2YXIoLS10cC1jb250YWluZXItYmFja2dyb3VuZC1jb2xvci1ob3ZlciwgcmdiYSgxODcsIDE4OCwgMTk2LCAwLjE1KSk7LS1jbnQtZmc6IHZhcigtLXRwLWNvbnRhaW5lci1mb3JlZ3JvdW5kLWNvbG9yLCAjYmJiY2M0KTstLWluLWJnOiB2YXIoLS10cC1pbnB1dC1iYWNrZ3JvdW5kLWNvbG9yLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuMSkpOy0taW4tYmctYTogdmFyKC0tdHAtaW5wdXQtYmFja2dyb3VuZC1jb2xvci1hY3RpdmUsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC4yNSkpOy0taW4tYmctZjogdmFyKC0tdHAtaW5wdXQtYmFja2dyb3VuZC1jb2xvci1mb2N1cywgcmdiYSgxODcsIDE4OCwgMTk2LCAwLjIpKTstLWluLWJnLWg6IHZhcigtLXRwLWlucHV0LWJhY2tncm91bmQtY29sb3ItaG92ZXIsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC4xNSkpOy0taW4tZmc6IHZhcigtLXRwLWlucHV0LWZvcmVncm91bmQtY29sb3IsICNiYmJjYzQpOy0tbGJsLWZnOiB2YXIoLS10cC1sYWJlbC1mb3JlZ3JvdW5kLWNvbG9yLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuNykpOy0tbW8tYmc6IHZhcigtLXRwLW1vbml0b3ItYmFja2dyb3VuZC1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjIpKTstLW1vLWZnOiB2YXIoLS10cC1tb25pdG9yLWZvcmVncm91bmQtY29sb3IsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC43KSk7LS1ncnYtZmc6IHZhcigtLXRwLWdyb292ZS1mb3JlZ3JvdW5kLWNvbG9yLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuMSkpfS50cC1yb3R2X2M+LnRwLWNudHYudHAtdi1sc3QsLnRwLXRhYnZfYyAudHAtYnJrdj4udHAtY250di50cC12LWxzdCwudHAtZmxkdl9jPi50cC1jbnR2LnRwLXYtbHN0e21hcmdpbi1ib3R0b206Y2FsYygtMSp2YXIoLS1jbnQtdi1wKSl9LnRwLXJvdHZfYz4udHAtZmxkdi50cC12LWxzdCAudHAtZmxkdl9jLC50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWZsZHYudHAtdi1sc3QgLnRwLWZsZHZfYywudHAtZmxkdl9jPi50cC1mbGR2LnRwLXYtbHN0IC50cC1mbGR2X2N7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1sc3QgLnRwLWZsZHZfYiwudHAtdGFidl9jIC50cC1icmt2Pi50cC1mbGR2LnRwLXYtbHN0IC50cC1mbGR2X2IsLnRwLWZsZHZfYz4udHAtZmxkdi50cC12LWxzdCAudHAtZmxkdl9ie2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0udHAtcm90dl9jPio6bm90KC50cC12LWZzdCksLnRwLXRhYnZfYyAudHAtYnJrdj4qOm5vdCgudHAtdi1mc3QpLC50cC1mbGR2X2M+Kjpub3QoLnRwLXYtZnN0KXttYXJnaW4tdG9wOnZhcigtLWJsZC1zKX0udHAtcm90dl9jPi50cC1zcHJ2Om5vdCgudHAtdi1mc3QpLC50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLXNwcnY6bm90KC50cC12LWZzdCksLnRwLWZsZHZfYz4udHAtc3Bydjpub3QoLnRwLXYtZnN0KSwudHAtcm90dl9jPi50cC1jbnR2Om5vdCgudHAtdi1mc3QpLC50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWNudHY6bm90KC50cC12LWZzdCksLnRwLWZsZHZfYz4udHAtY250djpub3QoLnRwLXYtZnN0KXttYXJnaW4tdG9wOnZhcigtLWNudC12LXApfS50cC1yb3R2X2M+LnRwLXNwcnYrKjpub3QoLnRwLXYtaGlkZGVuKSwudHAtdGFidl9jIC50cC1icmt2Pi50cC1zcHJ2Kyo6bm90KC50cC12LWhpZGRlbiksLnRwLWZsZHZfYz4udHAtc3BydisqOm5vdCgudHAtdi1oaWRkZW4pLC50cC1yb3R2X2M+LnRwLWNudHYrKjpub3QoLnRwLXYtaGlkZGVuKSwudHAtdGFidl9jIC50cC1icmt2Pi50cC1jbnR2Kyo6bm90KC50cC12LWhpZGRlbiksLnRwLWZsZHZfYz4udHAtY250disqOm5vdCgudHAtdi1oaWRkZW4pe21hcmdpbi10b3A6dmFyKC0tY250LXYtcCl9LnRwLXJvdHZfYz4udHAtc3Bydjpub3QoLnRwLXYtaGlkZGVuKSsudHAtc3BydiwudHAtdGFidl9jIC50cC1icmt2Pi50cC1zcHJ2Om5vdCgudHAtdi1oaWRkZW4pKy50cC1zcHJ2LC50cC1mbGR2X2M+LnRwLXNwcnY6bm90KC50cC12LWhpZGRlbikrLnRwLXNwcnYsLnRwLXJvdHZfYz4udHAtY250djpub3QoLnRwLXYtaGlkZGVuKSsudHAtY250diwudHAtdGFidl9jIC50cC1icmt2Pi50cC1jbnR2Om5vdCgudHAtdi1oaWRkZW4pKy50cC1jbnR2LC50cC1mbGR2X2M+LnRwLWNudHY6bm90KC50cC12LWhpZGRlbikrLnRwLWNudHZ7bWFyZ2luLXRvcDowfS50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWNudHYsLnRwLWZsZHZfYz4udHAtY250dnttYXJnaW4tbGVmdDo0cHh9LnRwLXRhYnZfYyAudHAtYnJrdj4udHAtZmxkdj4udHAtZmxkdl9iLC50cC1mbGR2X2M+LnRwLWZsZHY+LnRwLWZsZHZfYntib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWVsbS1icik7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1lbG0tYnIpfS50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWZsZHYudHAtZmxkdi1leHBhbmRlZD4udHAtZmxkdl9iLC50cC1mbGR2X2M+LnRwLWZsZHYudHAtZmxkdi1leHBhbmRlZD4udHAtZmxkdl9ie2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0udHAtdGFidl9jIC50cC1icmt2IC50cC1mbGR2Pi50cC1mbGR2X2MsLnRwLWZsZHZfYyAudHAtZmxkdj4udHAtZmxkdl9je2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tZWxtLWJyKX0udHAtdGFidl9jIC50cC1icmt2Pi50cC10YWJ2Pi50cC10YWJ2X2ksLnRwLWZsZHZfYz4udHAtdGFidj4udHAtdGFidl9pe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0tZWxtLWJyKX0udHAtdGFidl9jIC50cC1icmt2IC50cC10YWJ2Pi50cC10YWJ2X2MsLnRwLWZsZHZfYyAudHAtdGFidj4udHAtdGFidl9je2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tZWxtLWJyKX0udHAtcm90dl9iLC50cC1mbGR2X2J7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmcpO2NvbG9yOnZhcigtLWNudC1mZyk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpibG9jaztoZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpICsgNHB4KTtsaW5lLWhlaWdodDpjYWxjKHZhcigtLWJsZC11cykgKyA0cHgpO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWxlZnQ6dmFyKC0tY250LWgtcCk7cGFkZGluZy1yaWdodDpjYWxjKDRweCArIHZhcigtLWJsZC11cykgKyB2YXIoLS1jbnQtaC1wKSk7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpsZWZ0O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjEwMCU7dHJhbnNpdGlvbjpib3JkZXItcmFkaXVzIC4ycyBlYXNlLWluLW91dCAuMnN9LnRwLXJvdHZfYjpob3ZlciwudHAtZmxkdl9iOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnLWgpfS50cC1yb3R2X2I6Zm9jdXMsLnRwLWZsZHZfYjpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNudC1iZy1mKX0udHAtcm90dl9iOmFjdGl2ZSwudHAtZmxkdl9iOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNudC1iZy1hKX0udHAtcm90dl9iOmRpc2FibGVkLC50cC1mbGR2X2I6ZGlzYWJsZWR7b3BhY2l0eTouNX0udHAtcm90dl9tLC50cC1mbGR2X217YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgdmFyKC0tY250LWZnKSwgdmFyKC0tY250LWZnKSAycHgsIHRyYW5zcGFyZW50IDJweCwgdHJhbnNwYXJlbnQgNHB4LCB2YXIoLS1jbnQtZmcpIDRweCk7Ym9yZGVyLXJhZGl1czoycHg7Ym90dG9tOjA7Y29udGVudDpcIlwiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjZweDtyaWdodDpjYWxjKHZhcigtLWNudC1oLXApICsgKHZhcigtLWJsZC11cykgKyA0cHggLSA2cHgpLzIgLSAycHgpO21hcmdpbjphdXRvO29wYWNpdHk6LjU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0O3dpZHRoOjZweH0udHAtcm90di50cC1yb3R2LWV4cGFuZGVkIC50cC1yb3R2X20sLnRwLWZsZHYudHAtZmxkdi1leHBhbmRlZD4udHAtZmxkdl9iPi50cC1mbGR2X217dHJhbnNmb3JtOm5vbmV9LnRwLXJvdHZfYywudHAtZmxkdl9je2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MDtvcGFjaXR5OjA7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmctYm90dG9tOjA7cGFkZGluZy10b3A6MDtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOmhlaWdodCAuMnMgZWFzZS1pbi1vdXQsb3BhY2l0eSAuMnMgbGluZWFyLHBhZGRpbmcgLjJzIGVhc2UtaW4tb3V0fS50cC1yb3R2LnRwLXJvdHYtY3BsOm5vdCgudHAtcm90di1leHBhbmRlZCkgLnRwLXJvdHZfYywudHAtZmxkdi50cC1mbGR2LWNwbDpub3QoLnRwLWZsZHYtZXhwYW5kZWQpPi50cC1mbGR2X2N7ZGlzcGxheTpub25lfS50cC1yb3R2LnRwLXJvdHYtZXhwYW5kZWQgLnRwLXJvdHZfYywudHAtZmxkdi50cC1mbGR2LWV4cGFuZGVkPi50cC1mbGR2X2N7b3BhY2l0eToxO3BhZGRpbmctYm90dG9tOnZhcigtLWNudC12LXApO3BhZGRpbmctdG9wOnZhcigtLWNudC12LXApO3RyYW5zZm9ybTpub25lO292ZXJmbG93OnZpc2libGU7dHJhbnNpdGlvbjpoZWlnaHQgLjJzIGVhc2UtaW4tb3V0LG9wYWNpdHkgLjJzIGxpbmVhciAuMnMscGFkZGluZyAuMnMgZWFzZS1pbi1vdXR9LnRwLWxzdHYsLnRwLWNvbHR4dHZfbXtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtbHN0dl9ze3BhZGRpbmc6MCAyMHB4IDAgNHB4O3dpZHRoOjEwMCV9LnRwLWxzdHZfbSwudHAtY29sdHh0dl9tbXtib3R0b206MDttYXJnaW46YXV0bztwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjJweDt0b3A6MH0udHAtbHN0dl9tIHN2ZywudHAtY29sdHh0dl9tbSBzdmd7Ym90dG9tOjA7aGVpZ2h0OjE2cHg7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt3aWR0aDoxNnB4fS50cC1sc3R2X20gc3ZnIHBhdGgsLnRwLWNvbHR4dHZfbW0gc3ZnIHBhdGh7ZmlsbDpjdXJyZW50Q29sb3J9LnRwLXBuZHR4dHYsLnRwLWNvbHR4dHZfd3tkaXNwbGF5OmZsZXh9LnRwLXBuZHR4dHZfYSwudHAtY29sdHh0dl9je3dpZHRoOjEwMCV9LnRwLXBuZHR4dHZfYSsudHAtcG5kdHh0dl9hLC50cC1jb2x0eHR2X2MrLnRwLXBuZHR4dHZfYSwudHAtcG5kdHh0dl9hKy50cC1jb2x0eHR2X2MsLnRwLWNvbHR4dHZfYysudHAtY29sdHh0dl9je21hcmdpbi1sZWZ0OjJweH0udHAtYnRudl9ie3dpZHRoOjEwMCV9LnRwLWJ0bnZfdHt0ZXh0LWFsaWduOmNlbnRlcn0udHAtY2tidl9se2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmV9LnRwLWNrYnZfaXtsZWZ0OjA7b3BhY2l0eTowO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowfS50cC1ja2J2X3d7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OnZhcigtLWJsZC11cyk7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6dmFyKC0tYmxkLXVzKX0udHAtY2tidl93IHN2Z3tib3R0b206MDtkaXNwbGF5OmJsb2NrO2hlaWdodDoxNnB4O2xlZnQ6MDttYXJnaW46YXV0bztvcGFjaXR5OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt3aWR0aDoxNnB4fS50cC1ja2J2X3cgc3ZnIHBhdGh7ZmlsbDpub25lO3N0cm9rZTp2YXIoLS1pbi1mZyk7c3Ryb2tlLXdpZHRoOjJ9LnRwLWNrYnZfaTpob3ZlcisudHAtY2tidl93e2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctaCl9LnRwLWNrYnZfaTpmb2N1cysudHAtY2tidl93e2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctZil9LnRwLWNrYnZfaTphY3RpdmUrLnRwLWNrYnZfd3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWEpfS50cC1ja2J2X2k6Y2hlY2tlZCsudHAtY2tidl93IHN2Z3tvcGFjaXR5OjF9LnRwLWNrYnYudHAtdi1kaXNhYmxlZCAudHAtY2tidl93e29wYWNpdHk6LjV9LnRwLWNvbHZ7cG9zaXRpb246cmVsYXRpdmV9LnRwLWNvbHZfaHtkaXNwbGF5OmZsZXh9LnRwLWNvbHZfc3tmbGV4LWdyb3c6MDtmbGV4LXNocmluazowO3dpZHRoOnZhcigtLWJsZC11cyl9LnRwLWNvbHZfdHtmbGV4OjE7bWFyZ2luLWxlZnQ6NHB4fS50cC1jb2x2X3B7aGVpZ2h0OjA7bWFyZ2luLXRvcDowO29wYWNpdHk6MDtvdmVyZmxvdzpoaWRkZW47dHJhbnNpdGlvbjpoZWlnaHQgLjJzIGVhc2UtaW4tb3V0LG9wYWNpdHkgLjJzIGxpbmVhcixtYXJnaW4gLjJzIGVhc2UtaW4tb3V0fS50cC1jb2x2LnRwLWNvbHYtY3BsIC50cC1jb2x2X3B7b3ZlcmZsb3c6dmlzaWJsZX0udHAtY29sdi50cC1jb2x2LWV4cGFuZGVkIC50cC1jb2x2X3B7bWFyZ2luLXRvcDp2YXIoLS1ibGQtcyk7b3BhY2l0eToxfS50cC1jb2x2IC50cC1wb3B2e2xlZnQ6Y2FsYygtMSp2YXIoLS1jbnQtaC1wKSk7cmlnaHQ6Y2FsYygtMSp2YXIoLS1jbnQtaC1wKSk7dG9wOnZhcigtLWJsZC11cyl9LnRwLWNvbHB2X2gsLnRwLWNvbHB2X2Fwe21hcmdpbi1sZWZ0OjZweDttYXJnaW4tcmlnaHQ6NnB4fS50cC1jb2xwdl9oe21hcmdpbi10b3A6dmFyKC0tYmxkLXMpfS50cC1jb2xwdl9yZ2J7ZGlzcGxheTpmbGV4O21hcmdpbi10b3A6dmFyKC0tYmxkLXMpO3dpZHRoOjEwMCV9LnRwLWNvbHB2X2F7ZGlzcGxheTpmbGV4O21hcmdpbi10b3A6dmFyKC0tY250LXYtcCk7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1jbnQtdi1wKSArIDJweCk7cG9zaXRpb246cmVsYXRpdmV9LnRwLWNvbHB2X2E6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tZ3J2LWZnKTtjb250ZW50OlwiXCI7aGVpZ2h0OjJweDtsZWZ0OmNhbGMoLTEqdmFyKC0tY250LWgtcCkpO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY250LWgtcCkpO3RvcDowfS50cC1jb2xwdl9hcHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXg6M30udHAtY29scHZfYXR7ZmxleDoxO21hcmdpbi1sZWZ0OjRweH0udHAtc3Zwdntib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtc3Zwdl9je2N1cnNvcjpjcm9zc2hhaXI7ZGlzcGxheTpibG9jaztoZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpKjQpO3dpZHRoOjEwMCV9LnRwLXN2cHZfbXtib3JkZXItcmFkaXVzOjEwMCU7Ym9yZGVyOnJnYmEoMjU1LDI1NSwyNTUsLjc1KSBzb2xpZCAycHg7Ym94LXNpemluZzpib3JkZXItYm94O2ZpbHRlcjpkcm9wLXNoYWRvdygwIDAgMXB4IHJnYmEoMCwgMCwgMCwgMC4zKSk7aGVpZ2h0OjEycHg7bWFyZ2luLWxlZnQ6LTZweDttYXJnaW4tdG9wOi02cHg7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMnB4fS50cC1zdnB2OmZvY3VzIC50cC1zdnB2X217Ym9yZGVyLWNvbG9yOiNmZmZ9LnRwLWhwbHZ7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OnZhcigtLWJsZC11cyk7b3V0bGluZTpub25lO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1ocGx2X2N7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFFQUFBQUFCQ0FZQUFBQnViYWdYQUFBQVEwbEVRVlFvVTJQOHo4RHduMEdDZ1FFRGkyT0svUkJnWUhqQmdJcGZvdkZoOGo4WUJJZ3pGR1F4dXFFZ1BoYURPVDVnT2hQa2RDeE9aZUJnK0lERlpaaUdBZ0NhU1NNWXRjUkhMZ0FBQUFCSlJVNUVya0pnZ2c9PSk7YmFja2dyb3VuZC1wb3NpdGlvbjpsZWZ0IHRvcDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJTtib3JkZXItcmFkaXVzOjJweDtkaXNwbGF5OmJsb2NrO2hlaWdodDo0cHg7bGVmdDowO21hcmdpbi10b3A6LTJweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOjEwMCV9LnRwLWhwbHZfbXtib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Ym9yZGVyOnJnYmEoMjU1LDI1NSwyNTUsLjc1KSBzb2xpZCAycHg7Ym94LXNoYWRvdzowIDAgMnB4IHJnYmEoMCwwLDAsLjEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MTJweDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotNnB4O21hcmdpbi10b3A6LTZweDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7d2lkdGg6MTJweH0udHAtaHBsdjpmb2N1cyAudHAtaHBsdl9te2JvcmRlci1jb2xvcjojZmZmfS50cC1hcGx2e2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1ibGQtdXMpO291dGxpbmU6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlfS50cC1hcGx2X2J7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHRvcCByaWdodCwgI2RkZCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCAjZGRkIDc1JSksbGluZWFyLWdyYWRpZW50KHRvIHRvcCByaWdodCwgI2RkZCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCAjZGRkIDc1JSk7YmFja2dyb3VuZC1zaXplOjRweCA0cHg7YmFja2dyb3VuZC1wb3NpdGlvbjowIDAsMnB4IDJweDtib3JkZXItcmFkaXVzOjJweDtkaXNwbGF5OmJsb2NrO2hlaWdodDo0cHg7bGVmdDowO21hcmdpbi10b3A6LTJweDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt3aWR0aDoxMDAlfS50cC1hcGx2X2N7Ym90dG9tOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjB9LnRwLWFwbHZfbXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gdG9wIHJpZ2h0LCAjZGRkIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA3NSUsICNkZGQgNzUlKSxsaW5lYXItZ3JhZGllbnQodG8gdG9wIHJpZ2h0LCAjZGRkIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA3NSUsICNkZGQgNzUlKTtiYWNrZ3JvdW5kLXNpemU6MTJweCAxMnB4O2JhY2tncm91bmQtcG9zaXRpb246MCAwLDZweCA2cHg7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2JveC1zaGFkb3c6MCAwIDJweCByZ2JhKDAsMCwwLC4xKTtoZWlnaHQ6MTJweDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotNnB4O21hcmdpbi10b3A6LTZweDtvdmVyZmxvdzpoaWRkZW47cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOjEycHh9LnRwLWFwbHZfcHtib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Ym9yZGVyOnJnYmEoMjU1LDI1NSwyNTUsLjc1KSBzb2xpZCAycHg7Ym94LXNpemluZzpib3JkZXItYm94O2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowfS50cC1hcGx2OmZvY3VzIC50cC1hcGx2X3B7Ym9yZGVyLWNvbG9yOiNmZmZ9LnRwLWNvbHN3dntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gdG9wIHJpZ2h0LCAjZGRkIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA3NSUsICNkZGQgNzUlKSxsaW5lYXItZ3JhZGllbnQodG8gdG9wIHJpZ2h0LCAjZGRkIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA3NSUsICNkZGQgNzUlKTtiYWNrZ3JvdW5kLXNpemU6MTBweCAxMHB4O2JhY2tncm91bmQtcG9zaXRpb246MCAwLDVweCA1cHg7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO292ZXJmbG93OmhpZGRlbn0udHAtY29sc3d2LnRwLXYtZGlzYWJsZWR7b3BhY2l0eTouNX0udHAtY29sc3d2X3N3e2JvcmRlci1yYWRpdXM6MH0udHAtY29sc3d2X2J7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXdpZHRoOjA7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpibG9jaztoZWlnaHQ6dmFyKC0tYmxkLXVzKTtsZWZ0OjA7bWFyZ2luOjA7b3V0bGluZTpub25lO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDp2YXIoLS1ibGQtdXMpfS50cC1jb2xzd3ZfYjpmb2N1czo6YWZ0ZXJ7Ym9yZGVyOnJnYmEoMjU1LDI1NSwyNTUsLjc1KSBzb2xpZCAycHg7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2JvdHRvbTowO2NvbnRlbnQ6XCJcIjtkaXNwbGF5OmJsb2NrO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowfS50cC1jb2x0eHR2e2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlfS50cC1jb2x0eHR2X217bWFyZ2luLXJpZ2h0OjRweH0udHAtY29sdHh0dl9tc3tib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Y29sb3I6dmFyKC0tbGJsLWZnKTtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6dmFyKC0tYmxkLXVzKTtsaW5lLWhlaWdodDp2YXIoLS1ibGQtdXMpO3BhZGRpbmc6MCAxOHB4IDAgNHB4fS50cC1jb2x0eHR2X21zOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctaCl9LnRwLWNvbHR4dHZfbXM6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZy1mKX0udHAtY29sdHh0dl9tczphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZy1hKX0udHAtY29sdHh0dl9tbXtjb2xvcjp2YXIoLS1sYmwtZmcpfS50cC1jb2x0eHR2X3d7ZmxleDoxfS50cC1kZnd2e3Bvc2l0aW9uOmFic29sdXRlO3RvcDo4cHg7cmlnaHQ6OHB4O3dpZHRoOjI1NnB4fS50cC1mbGR2LnRwLWZsZHYtbm90IC50cC1mbGR2X2J7ZGlzcGxheTpub25lfS50cC1mbGR2X3R7cGFkZGluZy1sZWZ0OjRweH0udHAtZmxkdl9je2JvcmRlci1sZWZ0OnZhcigtLWNudC1iZykgc29saWQgNHB4fS50cC1mbGR2X2I6aG92ZXIrLnRwLWZsZHZfY3tib3JkZXItbGVmdC1jb2xvcjp2YXIoLS1jbnQtYmctaCl9LnRwLWZsZHZfYjpmb2N1cysudHAtZmxkdl9je2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWNudC1iZy1mKX0udHAtZmxkdl9iOmFjdGl2ZSsudHAtZmxkdl9je2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWNudC1iZy1hKX0udHAtZ3Jsdntwb3NpdGlvbjpyZWxhdGl2ZX0udHAtZ3Jsdl9ne2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSozKX0udHAtZ3Jsdl9nIHBvbHlsaW5le2ZpbGw6bm9uZTtzdHJva2U6dmFyKC0tbW8tZmcpO3N0cm9rZS1saW5lam9pbjpyb3VuZH0udHAtZ3Jsdl90e21hcmdpbi10b3A6LTRweDt0cmFuc2l0aW9uOmxlZnQgLjA1cyx0b3AgLjA1czt2aXNpYmlsaXR5OmhpZGRlbn0udHAtZ3Jsdl90LnRwLWdybHZfdC1he3Zpc2liaWxpdHk6dmlzaWJsZX0udHAtZ3Jsdl90LnRwLWdybHZfdC1pbnt0cmFuc2l0aW9uOm5vbmV9LnRwLWdybHYudHAtdi1kaXNhYmxlZCAudHAtZ3Jsdl9ne29wYWNpdHk6LjV9LnRwLWdybHYgLnRwLXR0dntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vLWZnKX0udHAtZ3JsdiAudHAtdHR2OjpiZWZvcmV7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1tby1mZyl9LnRwLWxibHZ7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtsaW5lLWhlaWdodDoxLjM7cGFkZGluZy1sZWZ0OnZhcigtLWNudC1oLXApO3BhZGRpbmctcmlnaHQ6dmFyKC0tY250LWgtcCl9LnRwLWxibHYudHAtbGJsdi1ub2x7ZGlzcGxheTpibG9ja30udHAtbGJsdl9se2NvbG9yOnZhcigtLWxibC1mZyk7ZmxleDoxOy13ZWJraXQtaHlwaGVuczphdXRvOy1tcy1oeXBoZW5zOmF1dG87aHlwaGVuczphdXRvO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWxlZnQ6NHB4O3BhZGRpbmctcmlnaHQ6MTZweH0udHAtbGJsdi50cC12LWRpc2FibGVkIC50cC1sYmx2X2x7b3BhY2l0eTouNX0udHAtbGJsdi50cC1sYmx2LW5vbCAudHAtbGJsdl9se2Rpc3BsYXk6bm9uZX0udHAtbGJsdl92e2FsaWduLXNlbGY6ZmxleC1zdGFydDtmbGV4LWdyb3c6MDtmbGV4LXNocmluazowO3dpZHRoOjE2MHB4fS50cC1sYmx2LnRwLWxibHYtbm9sIC50cC1sYmx2X3Z7d2lkdGg6MTAwJX0udHAtbHN0dl9ze3BhZGRpbmc6MCAyMHB4IDAgNHB4O3dpZHRoOjEwMCV9LnRwLWxzdHZfbXtjb2xvcjp2YXIoLS1idG4tZmcpfS50cC1zZ2x2X2l7cGFkZGluZzowIDRweH0udHAtc2dsdi50cC12LWRpc2FibGVkIC50cC1zZ2x2X2l7b3BhY2l0eTouNX0udHAtbWxsdl9pe2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSozKTtsaW5lLWhlaWdodDp2YXIoLS1ibGQtdXMpO3BhZGRpbmc6MCA0cHg7cmVzaXplOm5vbmU7d2hpdGUtc3BhY2U6cHJlfS50cC1tbGx2LnRwLXYtZGlzYWJsZWQgLnRwLW1sbHZfaXtvcGFjaXR5Oi41fS50cC1wMmR2e3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1wMmR2X2h7ZGlzcGxheTpmbGV4fS50cC1wMmR2X2J7aGVpZ2h0OnZhcigtLWJsZC11cyk7bWFyZ2luLXJpZ2h0OjRweDtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDp2YXIoLS1ibGQtdXMpfS50cC1wMmR2X2Igc3Zne2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjE2cHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LThweDttYXJnaW4tdG9wOi04cHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt3aWR0aDoxNnB4fS50cC1wMmR2X2Igc3ZnIHBhdGh7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2Utd2lkdGg6Mn0udHAtcDJkdl9iIHN2ZyBjaXJjbGV7ZmlsbDpjdXJyZW50Q29sb3J9LnRwLXAyZHZfdHtmbGV4OjF9LnRwLXAyZHZfcHtoZWlnaHQ6MDttYXJnaW4tdG9wOjA7b3BhY2l0eTowO292ZXJmbG93OmhpZGRlbjt0cmFuc2l0aW9uOmhlaWdodCAuMnMgZWFzZS1pbi1vdXQsb3BhY2l0eSAuMnMgbGluZWFyLG1hcmdpbiAuMnMgZWFzZS1pbi1vdXR9LnRwLXAyZHYudHAtcDJkdi1leHBhbmRlZCAudHAtcDJkdl9we21hcmdpbi10b3A6dmFyKC0tYmxkLXMpO29wYWNpdHk6MX0udHAtcDJkdiAudHAtcG9wdntsZWZ0OmNhbGMoLTEqdmFyKC0tY250LWgtcCkpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY250LWgtcCkpO3RvcDp2YXIoLS1ibGQtdXMpfS50cC1wMmRwdntwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1ibGQtdXMpICsgNHB4KX0udHAtcDJkcHZfcHtjdXJzb3I6Y3Jvc3NoYWlyO2hlaWdodDowO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWJvdHRvbToxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1wMmRwdl9ne2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTAwJX0udHAtcDJkcHZfYXh7b3BhY2l0eTouMTtzdHJva2U6dmFyKC0taW4tZmcpO3N0cm9rZS1kYXNoYXJyYXk6MX0udHAtcDJkcHZfbHtvcGFjaXR5Oi41O3N0cm9rZTp2YXIoLS1pbi1mZyk7c3Ryb2tlLWRhc2hhcnJheToxfS50cC1wMmRwdl9te2JvcmRlcjp2YXIoLS1pbi1mZykgc29saWQgMXB4O2JvcmRlci1yYWRpdXM6NTAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6NHB4O21hcmdpbi1sZWZ0Oi0ycHg7bWFyZ2luLXRvcDotMnB4O3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjRweH0udHAtcDJkcHZfcDpmb2N1cyAudHAtcDJkcHZfbXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWZnKTtib3JkZXItd2lkdGg6MH0udHAtcG9wdntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJzLWJnKTtib3JkZXItcmFkaXVzOjZweDtib3gtc2hhZG93OjAgMnB4IDRweCB2YXIoLS1icy1zaCk7ZGlzcGxheTpub25lO21heC13aWR0aDoxNjhweDtwYWRkaW5nOnZhcigtLWNudC12LXApIHZhcigtLWNudC1oLXApO3Bvc2l0aW9uOmFic29sdXRlO3Zpc2liaWxpdHk6aGlkZGVuO3otaW5kZXg6MTAwMH0udHAtcG9wdi50cC1wb3B2LXZ7ZGlzcGxheTpibG9jazt2aXNpYmlsaXR5OnZpc2libGV9LnRwLXNwcnZfcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWdydi1mZyk7Ym9yZGVyLXdpZHRoOjA7ZGlzcGxheTpibG9jaztoZWlnaHQ6MnB4O21hcmdpbjowO3dpZHRoOjEwMCV9LnRwLXNsZHYudHAtdi1kaXNhYmxlZHtvcGFjaXR5Oi41fS50cC1zbGR2X3R7Ym94LXNpemluZzpib3JkZXItYm94O2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1ibGQtdXMpO21hcmdpbjowIDZweDtvdXRsaW5lOm5vbmU7cG9zaXRpb246cmVsYXRpdmV9LnRwLXNsZHZfdDo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmcpO2JvcmRlci1yYWRpdXM6MXB4O2JvdHRvbTowO2NvbnRlbnQ6XCJcIjtkaXNwbGF5OmJsb2NrO2hlaWdodDoycHg7bGVmdDowO21hcmdpbjphdXRvO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjB9LnRwLXNsZHZfa3toZWlnaHQ6MTAwJTtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjB9LnRwLXNsZHZfazo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tZmcpO2JvcmRlci1yYWRpdXM6MXB4O2JvdHRvbTowO2NvbnRlbnQ6XCJcIjtkaXNwbGF5OmJsb2NrO2hlaWdodDoycHg7bGVmdDowO21hcmdpbi1ib3R0b206YXV0bzttYXJnaW4tdG9wOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0udHAtc2xkdl9rOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2JvdHRvbTowO2NvbnRlbnQ6XCJcIjtkaXNwbGF5OmJsb2NrO2hlaWdodDoxMnB4O21hcmdpbi1ib3R0b206YXV0bzttYXJnaW4tdG9wOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTZweDt0b3A6MDt3aWR0aDoxMnB4fS50cC1zbGR2X3Q6aG92ZXIgLnRwLXNsZHZfazo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1idG4tYmctaCl9LnRwLXNsZHZfdDpmb2N1cyAudHAtc2xkdl9rOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZy1mKX0udHAtc2xkdl90OmFjdGl2ZSAudHAtc2xkdl9rOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZy1hKX0udHAtc2xkdHh0dntkaXNwbGF5OmZsZXh9LnRwLXNsZHR4dHZfc3tmbGV4OjJ9LnRwLXNsZHR4dHZfdHtmbGV4OjE7bWFyZ2luLWxlZnQ6NHB4fS50cC10YWJ2LnRwLXYtZGlzYWJsZWR7b3BhY2l0eTouNX0udHAtdGFidl9pe2FsaWduLWl0ZW1zOmZsZXgtZW5kO2Rpc3BsYXk6ZmxleDtvdmVyZmxvdzpoaWRkZW59LnRwLXRhYnYudHAtdGFidi1ub3AgLnRwLXRhYnZfaXtoZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpICsgNHB4KTtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtdGFidi50cC10YWJ2LW5vcCAudHAtdGFidl9pOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmcpO2JvdHRvbTowO2NvbnRlbnQ6XCJcIjtoZWlnaHQ6MnB4O2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowfS50cC10YWJ2X2N7Ym9yZGVyLWxlZnQ6dmFyKC0tY250LWJnKSBzb2xpZCA0cHg7cGFkZGluZy1ib3R0b206dmFyKC0tY250LXYtcCk7cGFkZGluZy10b3A6dmFyKC0tY250LXYtcCl9LnRwLXRiaXZ7ZmxleDoxO21pbi13aWR0aDowO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC10Yml2Ky50cC10Yml2e21hcmdpbi1sZWZ0OjJweH0udHAtdGJpdisudHAtdGJpdjo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnKTtib3R0b206MDtjb250ZW50OlwiXCI7aGVpZ2h0OjJweDtsZWZ0Oi0ycHg7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MnB4fS50cC10Yml2X2J7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmcpO2Rpc3BsYXk6YmxvY2s7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tY250LWgtcCkgKyA0cHgpO3BhZGRpbmctcmlnaHQ6Y2FsYyh2YXIoLS1jbnQtaC1wKSArIDRweCk7d2lkdGg6MTAwJX0udHAtdGJpdl9iOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnLWgpfS50cC10Yml2X2I6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmctZil9LnRwLXRiaXZfYjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmctYSl9LnRwLXRiaXZfYjpkaXNhYmxlZHtvcGFjaXR5Oi41fS50cC10Yml2X3R7Y29sb3I6dmFyKC0tY250LWZnKTtoZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpICsgNHB4KTtsaW5lLWhlaWdodDpjYWxjKHZhcigtLWJsZC11cykgKyA0cHgpO29wYWNpdHk6LjU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LnRwLXRiaXYudHAtdGJpdi1zZWwgLnRwLXRiaXZfdHtvcGFjaXR5OjF9LnRwLXR4dHZ7cG9zaXRpb246cmVsYXRpdmV9LnRwLXR4dHZfaXtwYWRkaW5nOjAgNHB4fS50cC10eHR2LnRwLXR4dHYtZnN0IC50cC10eHR2X2l7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowfS50cC10eHR2LnRwLXR4dHYtbWlkIC50cC10eHR2X2l7Ym9yZGVyLXJhZGl1czowfS50cC10eHR2LnRwLXR4dHYtbHN0IC50cC10eHR2X2l7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MH0udHAtdHh0di50cC10eHR2LW51bSAudHAtdHh0dl9pe3RleHQtYWxpZ246cmlnaHR9LnRwLXR4dHYudHAtdHh0di1kcmcgLnRwLXR4dHZfaXtvcGFjaXR5Oi4zfS50cC10eHR2X2t7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OjEwMCU7bGVmdDotM3B4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjEycHh9LnRwLXR4dHZfazo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tZmcpO2JvcmRlci1yYWRpdXM6MXB4O2JvdHRvbTowO2NvbnRlbnQ6XCJcIjtoZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpIC0gNHB4KTtsZWZ0OjUwJTttYXJnaW4tYm90dG9tOmF1dG87bWFyZ2luLWxlZnQ6LTFweDttYXJnaW4tdG9wOmF1dG87b3BhY2l0eTouMTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt0cmFuc2l0aW9uOmJvcmRlci1yYWRpdXMgLjFzLGhlaWdodCAuMXMsdHJhbnNmb3JtIC4xcyx3aWR0aCAuMXM7d2lkdGg6MnB4fS50cC10eHR2X2s6aG92ZXI6OmJlZm9yZSwudHAtdHh0di50cC10eHR2LWRyZyAudHAtdHh0dl9rOjpiZWZvcmV7b3BhY2l0eToxfS50cC10eHR2LnRwLXR4dHYtZHJnIC50cC10eHR2X2s6OmJlZm9yZXtib3JkZXItcmFkaXVzOjUwJTtoZWlnaHQ6NHB4O3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xcHgpO3dpZHRoOjRweH0udHAtdHh0dl9ne2JvdHRvbTowO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjhweDtsZWZ0OjUwJTttYXJnaW46YXV0bztvdmVyZmxvdzp2aXNpYmxlO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7dmlzaWJpbGl0eTpoaWRkZW47d2lkdGg6MTAwJX0udHAtdHh0di50cC10eHR2LWRyZyAudHAtdHh0dl9ne3Zpc2liaWxpdHk6dmlzaWJsZX0udHAtdHh0dl9nYntmaWxsOm5vbmU7c3Ryb2tlOnZhcigtLWluLWZnKTtzdHJva2UtZGFzaGFycmF5OjF9LnRwLXR4dHZfZ2h7ZmlsbDpub25lO3N0cm9rZTp2YXIoLS1pbi1mZyl9LnRwLXR4dHYgLnRwLXR0dnttYXJnaW4tbGVmdDo2cHg7dmlzaWJpbGl0eTpoaWRkZW59LnRwLXR4dHYudHAtdHh0di1kcmcgLnRwLXR0dnt2aXNpYmlsaXR5OnZpc2libGV9LnRwLXR0dntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWZnKTtib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Y29sb3I6dmFyKC0tYnMtYmcpO3BhZGRpbmc6MnB4IDRweDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTEwMCUpfS50cC10dHY6OmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0taW4tZmcpIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb250ZW50OlwiXCI7Zm9udC1zaXplOi45ZW07aGVpZ2h0OjRweDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotMnB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO3dpZHRoOjRweH0udHAtcm90dntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJzLWJnKTtib3JkZXItcmFkaXVzOnZhcigtLWJzLWJyKTtib3gtc2hhZG93OjAgMnB4IDRweCB2YXIoLS1icy1zaCk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246bGVmdH0udHAtcm90dl9ie2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tYnMtYnIpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWJzLWJyKTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWJzLWJyKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1icik7cGFkZGluZy1sZWZ0OmNhbGMoNHB4ICsgdmFyKC0tYmxkLXVzKSArIHZhcigtLWNudC1oLXApKTt0ZXh0LWFsaWduOmNlbnRlcn0udHAtcm90di50cC1yb3R2LWV4cGFuZGVkIC50cC1yb3R2X2J7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LnRwLXJvdHYudHAtcm90di1ub3QgLnRwLXJvdHZfYntkaXNwbGF5Om5vbmV9LnRwLXJvdHZfYz4udHAtZmxkdi50cC12LWxzdD4udHAtZmxkdl9jLC50cC1yb3R2X2M+LnRwLXRhYnYudHAtdi1sc3Q+LnRwLXRhYnZfY3tib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWJzLWJyKTtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1icil9LnRwLXJvdHZfYz4udHAtZmxkdi50cC12LWxzdDpub3QoLnRwLWZsZHYtZXhwYW5kZWQpPi50cC1mbGR2X2J7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1icy1icik7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYnIpfS50cC1yb3R2X2MgLnRwLWZsZHYudHAtdi12bHN0Om5vdCgudHAtZmxkdi1leHBhbmRlZCk+LnRwLWZsZHZfYntib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1icil9LnRwLXJvdHYudHAtcm90di1ub3QgLnRwLXJvdHZfYz4udHAtZmxkdi50cC12LWZzdHttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY250LXYtcCkpfS50cC1yb3R2LnRwLXJvdHYtbm90IC50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1mc3Q+LnRwLWZsZHZfYntib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWJzLWJyKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1icil9LnRwLXJvdHYudHAtcm90di1ub3QgLnRwLXJvdHZfYz4udHAtdGFidi50cC12LWZzdHttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY250LXYtcCkpfS50cC1yb3R2LnRwLXJvdHYtbm90IC50cC1yb3R2X2M+LnRwLXRhYnYudHAtdi1mc3Q+LnRwLXRhYnZfaXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWJzLWJyKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1icil9LnRwLXJvdHYudHAtdi1kaXNhYmxlZCwudHAtcm90diAudHAtdi1kaXNhYmxlZHtwb2ludGVyLWV2ZW50czpub25lfS50cC1yb3R2LnRwLXYtaGlkZGVuLC50cC1yb3R2IC50cC12LWhpZGRlbntkaXNwbGF5Om5vbmV9Jyk7XG4gICAgICAgICAgICB0aGlzLnBvb2xfLmdldEFsbCgpLmZvckVhY2goKHBsdWdpbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1iZWRQbHVnaW5TdHlsZV8ocGx1Z2luKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlclBsdWdpbih7XG4gICAgICAgICAgICAgICAgcGx1Z2luczogW1xuICAgICAgICAgICAgICAgICAgICBTbGlkZXJCbGFkZVBsdWdpbixcbiAgICAgICAgICAgICAgICAgICAgTGlzdEJsYWRlUGx1Z2luLFxuICAgICAgICAgICAgICAgICAgICBUYWJCbGFkZVBsdWdpbixcbiAgICAgICAgICAgICAgICAgICAgVGV4dEJsYWRlUGx1Z2luLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IFZFUlNJT04gPSBuZXcgU2VtdmVyKCczLjAuOCcpO1xuXG4gICAgZXhwb3J0cy5CbGFkZUFwaSA9IEJsYWRlQXBpO1xuICAgIGV4cG9ydHMuQnV0dG9uQXBpID0gQnV0dG9uQXBpO1xuICAgIGV4cG9ydHMuRm9sZGVyQXBpID0gRm9sZGVyQXBpO1xuICAgIGV4cG9ydHMuSW5wdXRCaW5kaW5nQXBpID0gSW5wdXRCaW5kaW5nQXBpO1xuICAgIGV4cG9ydHMuTGlzdEFwaSA9IExpc3RBcGk7XG4gICAgZXhwb3J0cy5Nb25pdG9yQmluZGluZ0FwaSA9IE1vbml0b3JCaW5kaW5nQXBpO1xuICAgIGV4cG9ydHMuUGFuZSA9IFBhbmU7XG4gICAgZXhwb3J0cy5TZXBhcmF0b3JBcGkgPSBTZXBhcmF0b3JBcGk7XG4gICAgZXhwb3J0cy5TbGlkZXJBcGkgPSBTbGlkZXJBcGk7XG4gICAgZXhwb3J0cy5UYWJBcGkgPSBUYWJBcGk7XG4gICAgZXhwb3J0cy5UYWJQYWdlQXBpID0gVGFiUGFnZUFwaTtcbiAgICBleHBvcnRzLlRleHRBcGkgPSBUZXh0QXBpO1xuICAgIGV4cG9ydHMuVHBDaGFuZ2VFdmVudCA9IFRwQ2hhbmdlRXZlbnQ7XG4gICAgZXhwb3J0cy5WRVJTSU9OID0gVkVSU0lPTjtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKTtcbiIsIlxubW9kdWxlLmV4cG9ydHMgPSBhYnNvbHV0aXplXG5cbi8qKlxuICogcmVkZWZpbmUgYHBhdGhgIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXNcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBwYXRoXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuXG5mdW5jdGlvbiBhYnNvbHV0aXplKHBhdGgpe1xuXHR2YXIgc3RhcnRYID0gMFxuXHR2YXIgc3RhcnRZID0gMFxuXHR2YXIgeCA9IDBcblx0dmFyIHkgPSAwXG5cblx0cmV0dXJuIHBhdGgubWFwKGZ1bmN0aW9uKHNlZyl7XG5cdFx0c2VnID0gc2VnLnNsaWNlKClcblx0XHR2YXIgdHlwZSA9IHNlZ1swXVxuXHRcdHZhciBjb21tYW5kID0gdHlwZS50b1VwcGVyQ2FzZSgpXG5cblx0XHQvLyBpcyByZWxhdGl2ZVxuXHRcdGlmICh0eXBlICE9IGNvbW1hbmQpIHtcblx0XHRcdHNlZ1swXSA9IGNvbW1hbmRcblx0XHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0XHRjYXNlICdhJzpcblx0XHRcdFx0XHRzZWdbNl0gKz0geFxuXHRcdFx0XHRcdHNlZ1s3XSArPSB5XG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0Y2FzZSAndic6XG5cdFx0XHRcdFx0c2VnWzFdICs9IHlcblx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRjYXNlICdoJzpcblx0XHRcdFx0XHRzZWdbMV0gKz0geFxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDE7IGkgPCBzZWcubGVuZ3RoOykge1xuXHRcdFx0XHRcdFx0c2VnW2krK10gKz0geFxuXHRcdFx0XHRcdFx0c2VnW2krK10gKz0geVxuXHRcdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyB1cGRhdGUgY3Vyc29yIHN0YXRlXG5cdFx0c3dpdGNoIChjb21tYW5kKSB7XG5cdFx0XHRjYXNlICdaJzpcblx0XHRcdFx0eCA9IHN0YXJ0WFxuXHRcdFx0XHR5ID0gc3RhcnRZXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlICdIJzpcblx0XHRcdFx0eCA9IHNlZ1sxXVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAnVic6XG5cdFx0XHRcdHkgPSBzZWdbMV1cblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ00nOlxuXHRcdFx0XHR4ID0gc3RhcnRYID0gc2VnWzFdXG5cdFx0XHRcdHkgPSBzdGFydFkgPSBzZWdbMl1cblx0XHRcdFx0YnJlYWtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHggPSBzZWdbc2VnLmxlbmd0aCAtIDJdXG5cdFx0XHRcdHkgPSBzZWdbc2VnLmxlbmd0aCAtIDFdXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNlZ1xuXHR9KVxufVxuIiwiZnVuY3Rpb24gY2xvbmUocG9pbnQpIHsgLy9UT0RPOiB1c2UgZ2wtdmVjMiBmb3IgdGhpc1xuICAgIHJldHVybiBbcG9pbnRbMF0sIHBvaW50WzFdXVxufVxuXG5mdW5jdGlvbiB2ZWMyKHgsIHkpIHtcbiAgICByZXR1cm4gW3gsIHldXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlQmV6aWVyQnVpbGRlcihvcHQpIHtcbiAgICBvcHQgPSBvcHR8fHt9XG5cbiAgICB2YXIgUkVDVVJTSU9OX0xJTUlUID0gdHlwZW9mIG9wdC5yZWN1cnNpb24gPT09ICdudW1iZXInID8gb3B0LnJlY3Vyc2lvbiA6IDhcbiAgICB2YXIgRkxUX0VQU0lMT04gPSB0eXBlb2Ygb3B0LmVwc2lsb24gPT09ICdudW1iZXInID8gb3B0LmVwc2lsb24gOiAxLjE5MjA5MjkwZS03XG4gICAgdmFyIFBBVEhfRElTVEFOQ0VfRVBTSUxPTiA9IHR5cGVvZiBvcHQucGF0aEVwc2lsb24gPT09ICdudW1iZXInID8gb3B0LnBhdGhFcHNpbG9uIDogMS4wXG5cbiAgICB2YXIgY3VydmVfYW5nbGVfdG9sZXJhbmNlX2Vwc2lsb24gPSB0eXBlb2Ygb3B0LmFuZ2xlRXBzaWxvbiA9PT0gJ251bWJlcicgPyBvcHQuYW5nbGVFcHNpbG9uIDogMC4wMVxuICAgIHZhciBtX2FuZ2xlX3RvbGVyYW5jZSA9IG9wdC5hbmdsZVRvbGVyYW5jZSB8fCAwXG4gICAgdmFyIG1fY3VzcF9saW1pdCA9IG9wdC5jdXNwTGltaXQgfHwgMFxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGJlemllckN1cnZlKHN0YXJ0LCBjMSwgYzIsIGVuZCwgc2NhbGUsIHBvaW50cykge1xuICAgICAgICBpZiAoIXBvaW50cylcbiAgICAgICAgICAgIHBvaW50cyA9IFtdXG5cbiAgICAgICAgc2NhbGUgPSB0eXBlb2Ygc2NhbGUgPT09ICdudW1iZXInID8gc2NhbGUgOiAxLjBcbiAgICAgICAgdmFyIGRpc3RhbmNlVG9sZXJhbmNlID0gUEFUSF9ESVNUQU5DRV9FUFNJTE9OIC8gc2NhbGVcbiAgICAgICAgZGlzdGFuY2VUb2xlcmFuY2UgKj0gZGlzdGFuY2VUb2xlcmFuY2VcbiAgICAgICAgYmVnaW4oc3RhcnQsIGMxLCBjMiwgZW5kLCBwb2ludHMsIGRpc3RhbmNlVG9sZXJhbmNlKVxuICAgICAgICByZXR1cm4gcG9pbnRzXG4gICAgfVxuXG5cbiAgICAvLy8vLy8gQmFzZWQgb246XG4gICAgLy8vLy8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wZWxzb24vYW50aWdyYWluL2Jsb2IvbWFzdGVyL2FnZy0yLjQvc3JjL2FnZ19jdXJ2ZXMuY3BwXG5cbiAgICBmdW5jdGlvbiBiZWdpbihzdGFydCwgYzEsIGMyLCBlbmQsIHBvaW50cywgZGlzdGFuY2VUb2xlcmFuY2UpIHtcbiAgICAgICAgcG9pbnRzLnB1c2goY2xvbmUoc3RhcnQpKVxuICAgICAgICB2YXIgeDEgPSBzdGFydFswXSxcbiAgICAgICAgICAgIHkxID0gc3RhcnRbMV0sXG4gICAgICAgICAgICB4MiA9IGMxWzBdLFxuICAgICAgICAgICAgeTIgPSBjMVsxXSxcbiAgICAgICAgICAgIHgzID0gYzJbMF0sXG4gICAgICAgICAgICB5MyA9IGMyWzFdLFxuICAgICAgICAgICAgeDQgPSBlbmRbMF0sXG4gICAgICAgICAgICB5NCA9IGVuZFsxXVxuICAgICAgICByZWN1cnNpdmUoeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgeDQsIHk0LCBwb2ludHMsIGRpc3RhbmNlVG9sZXJhbmNlLCAwKVxuICAgICAgICBwb2ludHMucHVzaChjbG9uZShlbmQpKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZSh4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCB4NCwgeTQsIHBvaW50cywgZGlzdGFuY2VUb2xlcmFuY2UsIGxldmVsKSB7XG4gICAgICAgIGlmKGxldmVsID4gUkVDVVJTSU9OX0xJTUlUKSBcbiAgICAgICAgICAgIHJldHVyblxuXG4gICAgICAgIHZhciBwaSA9IE1hdGguUElcblxuICAgICAgICAvLyBDYWxjdWxhdGUgYWxsIHRoZSBtaWQtcG9pbnRzIG9mIHRoZSBsaW5lIHNlZ21lbnRzXG4gICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICB2YXIgeDEyICAgPSAoeDEgKyB4MikgLyAyXG4gICAgICAgIHZhciB5MTIgICA9ICh5MSArIHkyKSAvIDJcbiAgICAgICAgdmFyIHgyMyAgID0gKHgyICsgeDMpIC8gMlxuICAgICAgICB2YXIgeTIzICAgPSAoeTIgKyB5MykgLyAyXG4gICAgICAgIHZhciB4MzQgICA9ICh4MyArIHg0KSAvIDJcbiAgICAgICAgdmFyIHkzNCAgID0gKHkzICsgeTQpIC8gMlxuICAgICAgICB2YXIgeDEyMyAgPSAoeDEyICsgeDIzKSAvIDJcbiAgICAgICAgdmFyIHkxMjMgID0gKHkxMiArIHkyMykgLyAyXG4gICAgICAgIHZhciB4MjM0ICA9ICh4MjMgKyB4MzQpIC8gMlxuICAgICAgICB2YXIgeTIzNCAgPSAoeTIzICsgeTM0KSAvIDJcbiAgICAgICAgdmFyIHgxMjM0ID0gKHgxMjMgKyB4MjM0KSAvIDJcbiAgICAgICAgdmFyIHkxMjM0ID0gKHkxMjMgKyB5MjM0KSAvIDJcblxuICAgICAgICBpZihsZXZlbCA+IDApIHsgLy8gRW5mb3JjZSBzdWJkaXZpc2lvbiBmaXJzdCB0aW1lXG4gICAgICAgICAgICAvLyBUcnkgdG8gYXBwcm94aW1hdGUgdGhlIGZ1bGwgY3ViaWMgY3VydmUgYnkgYSBzaW5nbGUgc3RyYWlnaHQgbGluZVxuICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgIHZhciBkeCA9IHg0LXgxXG4gICAgICAgICAgICB2YXIgZHkgPSB5NC15MVxuXG4gICAgICAgICAgICB2YXIgZDIgPSBNYXRoLmFicygoeDIgLSB4NCkgKiBkeSAtICh5MiAtIHk0KSAqIGR4KVxuICAgICAgICAgICAgdmFyIGQzID0gTWF0aC5hYnMoKHgzIC0geDQpICogZHkgLSAoeTMgLSB5NCkgKiBkeClcblxuICAgICAgICAgICAgdmFyIGRhMSwgZGEyXG5cbiAgICAgICAgICAgIGlmKGQyID4gRkxUX0VQU0lMT04gJiYgZDMgPiBGTFRfRVBTSUxPTikge1xuICAgICAgICAgICAgICAgIC8vIFJlZ3VsYXIgY2FyZVxuICAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAgICBpZigoZDIgKyBkMykqKGQyICsgZDMpIDw9IGRpc3RhbmNlVG9sZXJhbmNlICogKGR4KmR4ICsgZHkqZHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjdXJ2YXR1cmUgZG9lc24ndCBleGNlZWQgdGhlIGRpc3RhbmNlVG9sZXJhbmNlIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIHRlbmQgdG8gZmluaXNoIHN1YmRpdmlzaW9ucy5cbiAgICAgICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICAgICAgICAgIGlmKG1fYW5nbGVfdG9sZXJhbmNlIDwgY3VydmVfYW5nbGVfdG9sZXJhbmNlX2Vwc2lsb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHZlYzIoeDEyMzQsIHkxMjM0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQW5nbGUgJiBDdXNwIENvbmRpdGlvblxuICAgICAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAgICAgICAgdmFyIGEyMyA9IE1hdGguYXRhbjIoeTMgLSB5MiwgeDMgLSB4MilcbiAgICAgICAgICAgICAgICAgICAgZGExID0gTWF0aC5hYnMoYTIzIC0gTWF0aC5hdGFuMih5MiAtIHkxLCB4MiAtIHgxKSlcbiAgICAgICAgICAgICAgICAgICAgZGEyID0gTWF0aC5hYnMoTWF0aC5hdGFuMih5NCAtIHkzLCB4NCAtIHgzKSAtIGEyMylcbiAgICAgICAgICAgICAgICAgICAgaWYoZGExID49IHBpKSBkYTEgPSAyKnBpIC0gZGExXG4gICAgICAgICAgICAgICAgICAgIGlmKGRhMiA+PSBwaSkgZGEyID0gMipwaSAtIGRhMlxuXG4gICAgICAgICAgICAgICAgICAgIGlmKGRhMSArIGRhMiA8IG1fYW5nbGVfdG9sZXJhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBGaW5hbGx5IHdlIGNhbiBzdG9wIHRoZSByZWN1cnNpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2godmVjMih4MTIzNCwgeTEyMzQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZihtX2N1c3BfbGltaXQgIT09IDAuMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGExID4gbV9jdXNwX2xpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2godmVjMih4MiwgeTIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihkYTIgPiBtX2N1c3BfbGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh2ZWMyKHgzLCB5MykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZihkMiA+IEZMVF9FUFNJTE9OKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHAxLHAzLHA0IGFyZSBjb2xsaW5lYXIsIHAyIGlzIGNvbnNpZGVyYWJsZVxuICAgICAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAgICAgICAgaWYoZDIgKiBkMiA8PSBkaXN0YW5jZVRvbGVyYW5jZSAqIChkeCpkeCArIGR5KmR5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYobV9hbmdsZV90b2xlcmFuY2UgPCBjdXJ2ZV9hbmdsZV90b2xlcmFuY2VfZXBzaWxvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHZlYzIoeDEyMzQsIHkxMjM0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW5nbGUgQ29uZGl0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhMSA9IE1hdGguYWJzKE1hdGguYXRhbjIoeTMgLSB5MiwgeDMgLSB4MikgLSBNYXRoLmF0YW4yKHkyIC0geTEsIHgyIC0geDEpKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGExID49IHBpKSBkYTEgPSAyKnBpIC0gZGExXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhMSA8IG1fYW5nbGVfdG9sZXJhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2godmVjMih4MiwgeTIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHZlYzIoeDMsIHkzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYobV9jdXNwX2xpbWl0ICE9PSAwLjApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihkYTEgPiBtX2N1c3BfbGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2godmVjMih4MiwgeTIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZihkMyA+IEZMVF9FUFNJTE9OKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHAxLHAyLHA0IGFyZSBjb2xsaW5lYXIsIHAzIGlzIGNvbnNpZGVyYWJsZVxuICAgICAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAgICAgICAgaWYoZDMgKiBkMyA8PSBkaXN0YW5jZVRvbGVyYW5jZSAqIChkeCpkeCArIGR5KmR5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYobV9hbmdsZV90b2xlcmFuY2UgPCBjdXJ2ZV9hbmdsZV90b2xlcmFuY2VfZXBzaWxvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHZlYzIoeDEyMzQsIHkxMjM0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW5nbGUgQ29uZGl0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhMSA9IE1hdGguYWJzKE1hdGguYXRhbjIoeTQgLSB5MywgeDQgLSB4MykgLSBNYXRoLmF0YW4yKHkzIC0geTIsIHgzIC0geDIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGExID49IHBpKSBkYTEgPSAyKnBpIC0gZGExXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhMSA8IG1fYW5nbGVfdG9sZXJhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2godmVjMih4MiwgeTIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHZlYzIoeDMsIHkzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYobV9jdXNwX2xpbWl0ICE9PSAwLjApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihkYTEgPiBtX2N1c3BfbGltaXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh2ZWMyKHgzLCB5MykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29sbGluZWFyIGNhc2VcbiAgICAgICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICAgICAgICBkeCA9IHgxMjM0IC0gKHgxICsgeDQpIC8gMlxuICAgICAgICAgICAgICAgICAgICBkeSA9IHkxMjM0IC0gKHkxICsgeTQpIC8gMlxuICAgICAgICAgICAgICAgICAgICBpZihkeCpkeCArIGR5KmR5IDw9IGRpc3RhbmNlVG9sZXJhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh2ZWMyKHgxMjM0LCB5MTIzNCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnRpbnVlIHN1YmRpdmlzaW9uXG4gICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICByZWN1cnNpdmUoeDEsIHkxLCB4MTIsIHkxMiwgeDEyMywgeTEyMywgeDEyMzQsIHkxMjM0LCBwb2ludHMsIGRpc3RhbmNlVG9sZXJhbmNlLCBsZXZlbCArIDEpIFxuICAgICAgICByZWN1cnNpdmUoeDEyMzQsIHkxMjM0LCB4MjM0LCB5MjM0LCB4MzQsIHkzNCwgeDQsIHk0LCBwb2ludHMsIGRpc3RhbmNlVG9sZXJhbmNlLCBsZXZlbCArIDEpIFxuICAgIH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mdW5jdGlvbicpKCkiLCJcInVzZSBzdHJpY3RcIlxyXG5cclxudmFyIGFicyA9IE1hdGguYWJzXHJcbiAgLCBtaW4gPSBNYXRoLm1pblxyXG5cclxuZnVuY3Rpb24gYWxtb3N0RXF1YWwoYSwgYiwgYWJzb2x1dGVFcnJvciwgcmVsYXRpdmVFcnJvcikge1xyXG4gIHZhciBkID0gYWJzKGEgLSBiKVxyXG4gIFxyXG4gIGlmIChhYnNvbHV0ZUVycm9yID09IG51bGwpIGFic29sdXRlRXJyb3IgPSBhbG1vc3RFcXVhbC5EQkxfRVBTSUxPTjtcclxuICBpZiAocmVsYXRpdmVFcnJvciA9PSBudWxsKSByZWxhdGl2ZUVycm9yID0gYWJzb2x1dGVFcnJvcjtcclxuICBcclxuICBpZihkIDw9IGFic29sdXRlRXJyb3IpIHtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG4gIGlmKGQgPD0gcmVsYXRpdmVFcnJvciAqIG1pbihhYnMoYSksIGFicyhiKSkpIHtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG4gIHJldHVybiBhID09PSBiXHJcbn1cclxuXHJcbmFsbW9zdEVxdWFsLkZMVF9FUFNJTE9OID0gMS4xOTIwOTI5MGUtN1xyXG5hbG1vc3RFcXVhbC5EQkxfRVBTSUxPTiA9IDIuMjIwNDQ2MDQ5MjUwMzEzMWUtMTZcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gYWxtb3N0RXF1YWxcclxuIiwidmFyIHN0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdcblxubW9kdWxlLmV4cG9ydHMgPSBhbkFycmF5XG5cbmZ1bmN0aW9uIGFuQXJyYXkoYXJyKSB7XG4gIHJldHVybiAoXG4gICAgICAgYXJyLkJZVEVTX1BFUl9FTEVNRU5UXG4gICAgJiYgc3RyLmNhbGwoYXJyLmJ1ZmZlcikgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXSdcbiAgICB8fCBBcnJheS5pc0FycmF5KGFycilcbiAgKVxufVxuIiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKCdhbi1hcnJheScpXG52YXIgYWxtb3N0ID0gcmVxdWlyZSgnYWxtb3N0LWVxdWFsJylcblxuLy9kZXRlcm1pbmVzIHdoZXRoZXIgdHdvIGFycmF5cyBhcmUgYWxtb3N0IGVxdWFsXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGEsIGIsIGFic29sdXRlVG9sZXJhbmNlLCByZWxhdGl2ZVRvbGVyYW5jZSkge1xuICAgIC8vd2lsbCBhY2NlcHQgdHlwZWQgYXJyYXlzXG4gICAgaWYgKCFhIHx8ICFiIHx8ICFpc0FycmF5KGEpIHx8ICFpc0FycmF5KGIpKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICBpZiAodHlwZW9mIGFic29sdXRlVG9sZXJhbmNlICE9PSAnbnVtYmVyJylcbiAgICAgICAgYWJzb2x1dGVUb2xlcmFuY2UgPSBhbG1vc3QuRkxUX0VQU0lMT05cbiAgICBpZiAodHlwZW9mIHJlbGF0aXZlVG9sZXJhbmNlICE9PSAnbnVtYmVyJylcbiAgICAgICAgcmVsYXRpdmVUb2xlcmFuY2UgPSBhYnNvbHV0ZVRvbGVyYW5jZVxuXG4gICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGEpLmV2ZXJ5KGZ1bmN0aW9uKGEwLCBpKSB7XG4gICAgICAgIHZhciBiMCA9IGJbaV1cbiAgICAgICAgcmV0dXJuIGEwID09PSBiMCB8fCBhbG1vc3QoYTAsIGIwLCBhYnNvbHV0ZVRvbGVyYW5jZSwgcmVsYXRpdmVUb2xlcmFuY2UpXG4gICAgfSlcbn0iLCJcInVzZSBzdHJpY3RcIlxuXG52YXIgYWJzID0gTWF0aC5hYnNcbiAgLCBtaW4gPSBNYXRoLm1pblxuXG5mdW5jdGlvbiBhbG1vc3RFcXVhbChhLCBiLCBhYnNvbHV0ZUVycm9yLCByZWxhdGl2ZUVycm9yKSB7XG4gIHZhciBkID0gYWJzKGEgLSBiKVxuICBpZihkIDw9IGFic29sdXRlRXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmKGQgPD0gcmVsYXRpdmVFcnJvciAqIG1pbihhYnMoYSksIGFicyhiKSkpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBhID09PSBiXG59XG5cbmFsbW9zdEVxdWFsLkZMVF9FUFNJTE9OID0gMS4xOTIwOTI5MGUtN1xuYWxtb3N0RXF1YWwuREJMX0VQU0lMT04gPSAyLjIyMDQ0NjA0OTI1MDMxMzFlLTE2XG5cbm1vZHVsZS5leHBvcnRzID0gYWxtb3N0RXF1YWxcbiIsInZhciBjc3NDb2xvciA9IHJlcXVpcmUoJy4vbGliL2Nzcy1jb2xvcicpO1xudmFyIG5hbWVzID0gcmVxdWlyZSgnLi9saWIvY3NzLWNvbG9yLW5hbWVzLmpzb24nKTtcbnZhciByZ2JMdW1pbmFuY2UgPSByZXF1aXJlKCcuL2xpYi9yZWxhdGl2ZS1sdW1pbmFuY2UnKTtcbnZhciBIU0xVdGlsID0gcmVxdWlyZSgnLi9saWIvaHNsJyk7XG52YXIgaGV4VG9SR0JBID0gcmVxdWlyZSgnLi9saWIvaGV4LXRvLXJnYmEnKTtcbnZhciBSR0JBVG9IZXggPSByZXF1aXJlKCcuL2xpYi9yZ2JhLXRvLWhleCcpO1xuXG5tb2R1bGUuZXhwb3J0cy5wYXJzZSA9IGNzc0NvbG9yLnBhcnNlO1xubW9kdWxlLmV4cG9ydHMuc3R5bGUgPSBjc3NDb2xvci5zdHlsZTtcbm1vZHVsZS5leHBvcnRzLm5hbWVzID0gbmFtZXM7XG5cbm1vZHVsZS5leHBvcnRzLnJlbGF0aXZlTHVtaW5hbmNlID0gZnVuY3Rpb24gcmVsYXRpdmVMdW1pbmFuY2UgKGNvbG9yKSB7XG4gIHZhciByZXN1bHQgPSBtb2R1bGUuZXhwb3J0cy5wYXJzZShjb2xvcik7XG4gIGlmICghcmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHJnYkx1bWluYW5jZShyZXN1bHQucmdiKTtcbn07XG5cbi8vIEV4dHJhY3RlZCBmcm9tIEB0bWN3IC8gd2NhZy1jb250cmFzdFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RtY3cvd2NhZy1jb250cmFzdFxubW9kdWxlLmV4cG9ydHMuY29udHJhc3RSYXRpbyA9IGZ1bmN0aW9uIGNvbnRyYXN0UmF0aW8gKGNvbG9yQSwgY29sb3JCKSB7XG4gIHZhciBhID0gbW9kdWxlLmV4cG9ydHMucmVsYXRpdmVMdW1pbmFuY2UoY29sb3JBKTtcbiAgdmFyIGIgPSBtb2R1bGUuZXhwb3J0cy5yZWxhdGl2ZUx1bWluYW5jZShjb2xvckIpO1xuICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gIHZhciBsMSA9IE1hdGgubWF4KGEsIGIpO1xuICB2YXIgbDIgPSBNYXRoLm1pbihhLCBiKTtcbiAgcmV0dXJuIChsMSArIDAuMDUpIC8gKGwyICsgMC4wNSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5vZmZzZXRIU0wgPSBmdW5jdGlvbiAoY29sb3IsIGgsIHMsIGwpIHtcbiAgdmFyIHJlc3VsdCA9IG1vZHVsZS5leHBvcnRzLnBhcnNlKGNvbG9yKTtcbiAgaWYgKCFyZXN1bHQpIHJldHVybiBudWxsO1xuICByZXN1bHQuaHNsYVswXSArPSBoIHx8IDA7XG4gIHJlc3VsdC5oc2xhWzFdID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCByZXN1bHQuaHNsYVsxXSArIChzIHx8IDApKSk7XG4gIHJlc3VsdC5oc2xhWzJdID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCByZXN1bHQuaHNsYVsyXSArIChsIHx8IDApKSk7XG4gIHJldHVybiBtb2R1bGUuZXhwb3J0cy5wYXJzZSh7IGhzbGE6IHJlc3VsdC5oc2xhIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMuYmxlbmQgPSBmdW5jdGlvbiAoYmFja2dyb3VuZCwgZm9yZWdyb3VuZCwgb3BhY2l0eSkge1xuICB2YXIgYmcgPSBtb2R1bGUuZXhwb3J0cy5wYXJzZShiYWNrZ3JvdW5kKTtcbiAgdmFyIGZnID0gbW9kdWxlLmV4cG9ydHMucGFyc2UoZm9yZWdyb3VuZCk7XG4gIGlmIChiZyA9PSBudWxsIHx8IGZnID09IG51bGwpIHJldHVybiBudWxsO1xuXG4gIHZhciBjMCA9IGJnLnJnYmE7XG4gIHZhciBjMSA9IGZnLnJnYmE7XG4gIG9wYWNpdHkgPSB0eXBlb2Ygb3BhY2l0eSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUob3BhY2l0eSkgPyBvcGFjaXR5IDogMS4wO1xuICB2YXIgYWxwaGEgPSBvcGFjaXR5ICogYzFbM107XG4gIGlmIChhbHBoYSA+PSAxKSB7XG4gICAgLy8gZm9yZWdyb3VuZCBpcyBvcGFxdWUgc28gbm8gYmxlbmQgcmVxdWlyZWRcbiAgICByZXR1cm4gZmc7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICBjMVtpXSA9IGMxW2ldICogYWxwaGEgKyBjMFtpXSAqIChjMFszXSAqICgxIC0gYWxwaGEpKTtcbiAgfVxuICBjMVszXSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGFscGhhICsgYzBbM10gKiAoMSAtIGFscGhhKSkpO1xuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMucGFyc2UoYzEpOyAvLyByZS1wYXJzZSB0byBnZXQgbmV3IG1ldGFkYXRhXG59O1xuXG4vLyBFeHBvc2VkIGJ1dCBub3QgeWV0IGRvY3VtZW50ZWRcbm1vZHVsZS5leHBvcnRzLmhleFRvUkdCQSA9IGhleFRvUkdCQTtcbm1vZHVsZS5leHBvcnRzLlJHQkFUb0hleCA9IFJHQkFUb0hleDtcbm1vZHVsZS5leHBvcnRzLlJHQkFUb0hTTEEgPSBIU0xVdGlsLlJHQkFUb0hTTEE7XG5tb2R1bGUuZXhwb3J0cy5IU0xBVG9SR0JBID0gSFNMVXRpbC5IU0xBVG9SR0JBO1xuIiwidmFyIGxpbmVjbGlwID0gcmVxdWlyZSgnbGluZWNsaXAnKTtcbnZhciBhbG1vc3RFcXVhbCA9IHJlcXVpcmUoJ2FsbW9zdC1lcXVhbCcpO1xudmFyIGFycmF5QWxtb3N0RXF1YWwgPSByZXF1aXJlKCdhcnJheS1hbG1vc3QtZXF1YWwnKTtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJ2Nsb25lJyk7XG52YXIgc3F1YXJlZERpc3RhbmNlID0gcmVxdWlyZSgnLi9saWIvdmVjMicpLnNxdWFyZWREaXN0YW5jZTtcblxubW9kdWxlLmV4cG9ydHMuYXJlUG9pbnRzQ29sbGluZWFyID0gZnVuY3Rpb24gKHBvaW50MCwgcG9pbnQxLCBwb2ludDIpIHtcbiAgdmFyIHgwID0gcG9pbnQwWzBdO1xuICB2YXIgeTAgPSBwb2ludDBbMV07XG4gIHZhciB4MSA9IHBvaW50MVswXTtcbiAgdmFyIHkxID0gcG9pbnQxWzFdO1xuICB2YXIgeDIgPSBwb2ludDJbMF07XG4gIHZhciB5MiA9IHBvaW50MlsxXTtcbiAgcmV0dXJuIGFsbW9zdEVxdWFsKCh5MCAtIHkxKSAqICh4MCAtIHgyKSwgKHkwIC0geTIpICogKHgwIC0geDEpKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLnJlbW92ZUR1cGxpY2F0ZVBvaW50cyA9IGZ1bmN0aW9uIChwYXRoKSB7XG4gIHZhciBuZXdQYXRoID0gW107XG4gIHZhciBsYXN0UG9pbnQ7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjdXJQb2ludCA9IHBhdGhbaV07XG4gICAgaWYgKCFsYXN0UG9pbnQgfHwgIWFycmF5QWxtb3N0RXF1YWwobGFzdFBvaW50LCBjdXJQb2ludCkpIHtcbiAgICAgIG5ld1BhdGgucHVzaChjdXJQb2ludCk7XG4gICAgICBsYXN0UG9pbnQgPSBjdXJQb2ludDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNsb25lKG5ld1BhdGgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMucmVtb3ZlQ29sbGluZWFyUG9pbnRzID0gZnVuY3Rpb24gKHBhdGgpIHtcbiAgdmFyIG5ld1BhdGggPSBbXTtcbiAgdmFyIHJlbWFpbmluZ1BvaW50cyA9IGNsb25lKHBhdGgpO1xuICB3aGlsZSAocmVtYWluaW5nUG9pbnRzLmxlbmd0aCA+PSAzKSB7XG4gICAgdmFyIHAwID0gcmVtYWluaW5nUG9pbnRzWzBdO1xuICAgIHZhciBwMSA9IHJlbWFpbmluZ1BvaW50c1sxXTtcbiAgICB2YXIgcDIgPSByZW1haW5pbmdQb2ludHNbMl07XG4gICAgdmFyIGNvbGxpbmVhciA9IG1vZHVsZS5leHBvcnRzLmFyZVBvaW50c0NvbGxpbmVhcihwMCwgcDEsIHAyKTtcbiAgICAvLyBvbmUgbW9yZSBjaGVjayBpcyB0byBlbnN1cmUgdGhhdCBwb2ludHMgYXJlIGluIGEgbGluZTpcbiAgICAvLyBBLT5CLT5DXG4gICAgLy8gbm90IEEtPkMtPkIgb3Igc29tZSB2YXJpYW50XG4gICAgaWYgKGNvbGxpbmVhcikge1xuICAgICAgdmFyIGRpc3RBQiA9IHNxdWFyZWREaXN0YW5jZShwMCwgcDEpO1xuICAgICAgdmFyIGRpc3RBQyA9IHNxdWFyZWREaXN0YW5jZShwMCwgcDIpO1xuICAgICAgaWYgKGRpc3RBQiA+IGRpc3RBQykgY29sbGluZWFyID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChjb2xsaW5lYXIpIHtcbiAgICAgIC8vIHRoZSBmaXJzdCAzIHBvaW50cyBhcmUgY29sbGluZWFyXG4gICAgICAvLyByZW1vdmUgdGhlIHNlY29uZCBwb2ludCBhcyBpdCBpc24ndCBuZWVkZWRcbiAgICAgIHJlbWFpbmluZ1BvaW50cy5zcGxpY2UoMSwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoZSAzIHBvaW50cyBhcmUgbm90IGNvbGxpbmVhclxuICAgICAgLy8gYWRkIHRoZSBmaXJzdCBvbmUgYXMgdGhlIG90aGVycyBtYXkgc3RpbGwgYmUgY29sbGluZWFyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE7IGkrKykge1xuICAgICAgICBuZXdQYXRoLnB1c2gocmVtYWluaW5nUG9pbnRzLnNoaWZ0KCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBhZGQgYW55IHJlbWFpbmluZyBwb2ludHNcbiAgd2hpbGUgKHJlbWFpbmluZ1BvaW50cy5sZW5ndGgpIHtcbiAgICBuZXdQYXRoLnB1c2gocmVtYWluaW5nUG9pbnRzLnNoaWZ0KCkpO1xuICB9XG4gIHJldHVybiBuZXdQYXRoO1xufTtcblxubW9kdWxlLmV4cG9ydHMuY2xpcFNlZ21lbnRUb0NpcmNsZSA9IHJlcXVpcmUoJy4vbGliL2NsaXAvY2xpcC1zZWdtZW50LXRvLWNpcmNsZScpO1xubW9kdWxlLmV4cG9ydHMuY2xpcExpbmVUb0NpcmNsZSA9IHJlcXVpcmUoJy4vbGliL2NsaXAvY2xpcC1saW5lLXRvLWNpcmNsZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5jbGlwUG9seWxpbmVzVG9Cb3ggPSBmdW5jdGlvbiAocG9seWxpbmVzLCBiYm94LCBib3JkZXIsIGNsb3NlTGluZXMpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGJib3gpIHx8IChiYm94Lmxlbmd0aCAhPT0gMiAmJiBiYm94Lmxlbmd0aCAhPT0gNCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGJveCB0byBlaXRoZXIgYmUgZm9ybWF0IFsgbWluUG9pbnQsIG1heFBvaW50IF0gb3IgWyBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZIF0nKTtcbiAgfVxuICAvLyBFeHBhbmQgbmVzdGVkIGZvcm1hdCB0byBmbGF0IGJvdW5kc1xuICBpZiAoYmJveC5sZW5ndGggPT09IDIpIHtcbiAgICB2YXIgbWluID0gYmJveFswXTtcbiAgICB2YXIgbWF4ID0gYmJveFsxXTtcbiAgICBiYm94ID0gWyBtaW5bMF0sIG1pblsxXSwgbWF4WzBdLCBtYXhbMV0gXTtcbiAgfVxuICBjbG9zZUxpbmVzID0gY2xvc2VMaW5lcyAhPT0gZmFsc2U7XG4gIGJvcmRlciA9IEJvb2xlYW4oYm9yZGVyKTtcblxuICBpZiAoYm9yZGVyKSB7XG4gICAgcmV0dXJuIHBvbHlsaW5lcy5tYXAoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIHZhciByZXN1bHQgPSBsaW5lY2xpcC5wb2x5Z29uKGxpbmUsIGJib3gpO1xuICAgICAgaWYgKGNsb3NlTGluZXMgJiYgcmVzdWx0Lmxlbmd0aCA+IDIpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gocmVzdWx0WzBdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSkuZmlsdGVyKGZ1bmN0aW9uIChsaW5lcykge1xuICAgICAgcmV0dXJuIGxpbmVzLmxlbmd0aCA+IDA7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBvbHlsaW5lcy5tYXAoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIHJldHVybiBsaW5lY2xpcC5wb2x5bGluZShsaW5lLCBiYm94KTtcbiAgICB9KS5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBhLmNvbmNhdChiKTtcbiAgICB9LCBbXSk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLmNyZWF0ZUhhdGNoTGluZXMgPSBjcmVhdGVIYXRjaExpbmVzO1xuZnVuY3Rpb24gY3JlYXRlSGF0Y2hMaW5lcyAoYm91bmRzLCBhbmdsZSwgc3BhY2luZywgb3V0KSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShib3VuZHMpIHx8IChib3VuZHMubGVuZ3RoICE9PSAyICYmIGJvdW5kcy5sZW5ndGggIT09IDQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBib3ggdG8gZWl0aGVyIGJlIGZvcm1hdCBbIG1pblBvaW50LCBtYXhQb2ludCBdIG9yIFsgbWluWCwgbWluWSwgbWF4WCwgbWF4WSBdJyk7XG4gIH1cbiAgLy8gRXhwYW5kIG5lc3RlZCBmb3JtYXQgdG8gZmxhdCBib3VuZHNcbiAgaWYgKGJvdW5kcy5sZW5ndGggPT09IDIpIHtcbiAgICB2YXIgbWluID0gYm91bmRzWzBdO1xuICAgIHZhciBtYXggPSBib3VuZHNbMV07XG4gICAgYm91bmRzID0gWyBtaW5bMF0sIG1pblsxXSwgbWF4WzBdLCBtYXhbMV0gXTtcbiAgfVxuXG4gIGlmIChhbmdsZSA9PSBudWxsKSBhbmdsZSA9IC1NYXRoLlBJIC8gNDtcbiAgaWYgKHNwYWNpbmcgPT0gbnVsbCkgc3BhY2luZyA9IDAuNTtcbiAgaWYgKG91dCA9PSBudWxsKSBvdXQgPSBbXTtcblxuICAvLyBSZWZlcmVuY2U6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmlsLW1hZC9FZ2dCb3QvYmxvYi9tYXN0ZXIvaW5rc2NhcGVfZHJpdmVyL2VnZ2JvdF9oYXRjaC5weVxuICBzcGFjaW5nID0gTWF0aC5hYnMoc3BhY2luZyk7XG4gIGlmIChzcGFjaW5nID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCB1c2UgYSBzcGFjaW5nIG9mIHplcm8gYXMgaXQgd2lsbCBydW4gYW4gaW5maW5pdGUgbG9vcCEnKTtcblxuICB2YXIgeG1pbiA9IGJvdW5kc1swXTtcbiAgdmFyIHltaW4gPSBib3VuZHNbMV07XG4gIHZhciB4bWF4ID0gYm91bmRzWzJdO1xuICB2YXIgeW1heCA9IGJvdW5kc1szXTtcblxuICB2YXIgdyA9IHhtYXggLSB4bWluO1xuICB2YXIgaCA9IHltYXggLSB5bWluO1xuICBpZiAodyA9PT0gMCB8fCBoID09PSAwKSByZXR1cm4gb3V0O1xuICB2YXIgciA9IE1hdGguc3FydCh3ICogdyArIGggKiBoKSAvIDI7XG4gIHZhciByb3RBbmdsZSA9IE1hdGguUEkgLyAyIC0gYW5nbGU7XG4gIHZhciBjYSA9IE1hdGguY29zKHJvdEFuZ2xlKTtcbiAgdmFyIHNhID0gTWF0aC5zaW4ocm90QW5nbGUpO1xuICB2YXIgY3ggPSB4bWluICsgKHcgLyAyKTtcbiAgdmFyIGN5ID0geW1pbiArIChoIC8gMik7XG4gIHZhciBpID0gLXI7XG4gIHdoaWxlIChpIDw9IHIpIHtcbiAgICAvLyBMaW5lIHN0YXJ0cyBhdCAoaSwgLXIpIGFuZCBnb2VzIHRvIChpLCArcilcbiAgICB2YXIgeDEgPSBjeCArIChpICogY2EpICsgKHIgKiBzYSk7IC8vICBpICogY2EgLSAoLXIpICogc2FcbiAgICB2YXIgeTEgPSBjeSArIChpICogc2EpIC0gKHIgKiBjYSk7IC8vICBpICogc2EgKyAoLXIpICogY2FcbiAgICB2YXIgeDIgPSBjeCArIChpICogY2EpIC0gKHIgKiBzYSk7IC8vICBpICogY2EgLSAoK3IpICogc2FcbiAgICB2YXIgeTIgPSBjeSArIChpICogc2EpICsgKHIgKiBjYSk7IC8vICBpICogc2EgKyAoK3IpICogY2FcbiAgICBpICs9IHNwYWNpbmc7XG4gICAgLy8gUmVtb3ZlIGFueSBwb3RlbnRpYWwgaGF0Y2ggbGluZXMgd2hpY2ggYXJlIGVudGlyZWx5XG4gICAgLy8gb3V0c2lkZSBvZiB0aGUgYm91bmRpbmcgYm94XG4gICAgaWYgKCh4MSA8IHhtaW4gJiYgeDIgPCB4bWluKSB8fCAoeDEgPiB4bWF4ICYmIHgyID4geG1heCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoKHkxIDwgeW1pbiAmJiB5MiA8IHltaW4pIHx8ICh5MSA+IHltYXggJiYgeTIgPiB5bWF4KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIG91dC5wdXNoKFsgWyB4MSwgeTEgXSwgWyB4MiwgeTIgXSBdKTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5tb2R1bGUuZXhwb3J0cy5nZXRCb3VuZHMgPSBmdW5jdGlvbiBnZXRCb3VuZHMgKHBvaW50cykge1xuICB2YXIgbiA9IHBvaW50cy5sZW5ndGg7XG4gIGlmIChuID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBwb2ludHMgdG8gYmUgYSBub24tZW1wdHkgYXJyYXknKTtcbiAgfVxuICB2YXIgZCA9IHBvaW50c1swXS5sZW5ndGg7XG4gIHZhciBsbyA9IHBvaW50c1swXS5zbGljZSgpO1xuICB2YXIgaGkgPSBwb2ludHNbMF0uc2xpY2UoKTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBuOyArK2kpIHtcbiAgICB2YXIgcCA9IHBvaW50c1tpXTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGQ7ICsraikge1xuICAgICAgdmFyIHggPSBwW2pdO1xuICAgICAgbG9bal0gPSBNYXRoLm1pbihsb1tqXSwgeCk7XG4gICAgICBoaVtqXSA9IE1hdGgubWF4KGhpW2pdLCB4KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFsgbG8sIGhpIF07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJhbmRvbTogcmVxdWlyZSgnLi9yYW5kb20nKSxcbiAgbWF0aDogcmVxdWlyZSgnLi9tYXRoJyksXG4gIHBlbnBsb3Q6IHJlcXVpcmUoJy4vcGVucGxvdC5qcycpLFxuICBnZW9tZXRyeTogcmVxdWlyZSgnLi9nZW9tZXRyeS5qcycpLFxuICBzaGFkZXI6IHJlcXVpcmUoJy4vc2hhZGVyLmpzJyksXG4gIGNvbG9yOiByZXF1aXJlKCcuL2NvbG9yLmpzJylcbn07XG4iLCJ2YXIgYWxtb3N0RXF1YWwgPSByZXF1aXJlKCdhbG1vc3QtZXF1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnRlcnNlY3RMaW5lQ2lyY2xlO1xuZnVuY3Rpb24gaW50ZXJzZWN0TGluZUNpcmNsZSAocDAsIHAxLCBjaXJjbGUsIGNpcmNsZVJhZGl1cywgaGl0cykge1xuICBpZiAoaGl0cyA9PSBudWxsKSBoaXRzID0gW107XG4gIHZhciBhID0gc3FyKHAxWzBdIC0gcDBbMF0pICsgc3FyKHAxWzFdIC0gcDBbMV0pO1xuICB2YXIgYiA9IDIuMCAqIChcbiAgICAocDFbMF0gLSBwMFswXSkgKiAocDBbMF0gLSBjaXJjbGVbMF0pICtcbiAgICAocDFbMV0gLSBwMFsxXSkgKiAocDBbMV0gLSBjaXJjbGVbMV0pXG4gICk7XG5cbiAgdmFyIGMgPSBzcXIoY2lyY2xlWzBdKSArIHNxcihjaXJjbGVbMV0pICsgc3FyKHAwWzBdKSArXG4gICAgc3FyKHAwWzFdKSAtIDIgKiAoY2lyY2xlWzBdICogcDBbMF0gKyBjaXJjbGVbMV0gKiBwMFsxXSkgLVxuICAgIHNxcihjaXJjbGVSYWRpdXMpO1xuXG4gIHZhciBkZXQgPSBiICogYiAtIDQuMCAqIGEgKiBjO1xuICB2YXIgZGVsdGE7XG4gIGlmIChkZXQgPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKGFsbW9zdEVxdWFsKGRldCwgMC4wKSkge1xuICAgIGRlbHRhID0gLWIgLyAoMi4wICogYSk7XG4gICAgaGl0cy5wdXNoKFtcbiAgICAgIHAwWzBdICsgZGVsdGEgKiAocDFbMF0gLSBwMFswXSksXG4gICAgICBwMFsxXSArIGRlbHRhICogKHAxWzFdIC0gcDBbMV0pXG4gICAgXSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoZGV0ID4gMC4wKSB7XG4gICAgdmFyIHNxcnREZXQgPSBNYXRoLnNxcnQoZGV0KTtcbiAgICBkZWx0YSA9ICgtYiArIHNxcnREZXQpIC8gKDIuMCAqIGEpO1xuXG4gICAgaGl0cy5wdXNoKFtcbiAgICAgIHAwWzBdICsgZGVsdGEgKiAocDFbMF0gLSBwMFswXSksXG4gICAgICBwMFsxXSArIGRlbHRhICogKHAxWzFdIC0gcDBbMV0pXG4gICAgXSk7XG5cbiAgICBkZWx0YSA9ICgtYiAtIHNxcnREZXQpIC8gKDIuMCAqIGEpO1xuICAgIGhpdHMucHVzaChbXG4gICAgICBwMFswXSArIGRlbHRhICogKHAxWzBdIC0gcDBbMF0pLFxuICAgICAgcDBbMV0gKyBkZWx0YSAqIChwMVsxXSAtIHAwWzFdKVxuICAgIF0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBzcXIgKGEpIHtcbiAgcmV0dXJuIGEgKiBhO1xufVxuIiwidmFyIGFsbW9zdEVxdWFsID0gcmVxdWlyZSgnYWxtb3N0LWVxdWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gaW50ZXJzZWN0U2VnbWVudENpcmNsZTtcbmZ1bmN0aW9uIGludGVyc2VjdFNlZ21lbnRDaXJjbGUgKHAwLCBwMSwgY2lyY2xlLCBjaXJjbGVSYWRpdXMsIGhpdHMpIHtcbiAgcmV0dXJuIGludGVyc2VjdChwMFswXSwgcDBbMV0sIHAxWzBdLCBwMVsxXSwgY2lyY2xlWzBdLCBjaXJjbGVbMV0sIGNpcmNsZVJhZGl1cywgaGl0cyk7XG59XG5cbmZ1bmN0aW9uIGludGVyc2VjdCAoeDEsIHkxLCB4MiwgeTIsIGN4LCBjeSwgcmFkaXVzLCBoaXRzKSB7XG4gIGlmIChoaXRzID09IG51bGwpIGhpdHMgPSBbXTtcbiAgdmFyIHAxSW5DaXJjbGUgPSBwb2ludEluQ2lyY2xlKHgxLCB5MSwgY3gsIGN5LCByYWRpdXMpO1xuICB2YXIgcDJJbkNpcmNsZSA9IHBvaW50SW5DaXJjbGUoeDIsIHkyLCBjeCwgY3ksIHJhZGl1cyk7XG5cbiAgaWYgKHAxSW5DaXJjbGUgJiYgcDJJbkNpcmNsZSkge1xuICAgIGhpdHMucHVzaChbIHgxLCB5MSBdKTtcbiAgICBoaXRzLnB1c2goWyB4MiwgeTIgXSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgaCwgYSwgY2xvc2VzdFBvaW50LCBweCwgcHk7XG4gIGlmIChwMUluQ2lyY2xlIHx8IHAySW5DaXJjbGUpIHtcbiAgICBjbG9zZXN0UG9pbnQgPSBjbG9zZXN0UG9pbnRPbkxpbmVGcm9tUG9pbnQoeDEsIHkxLCB4MiwgeTIsIGN4LCBjeSk7XG4gICAgcHggPSBjbG9zZXN0UG9pbnRbMF07XG4gICAgcHkgPSBjbG9zZXN0UG9pbnRbMV07XG4gICAgaCA9IGRpc3RhbmNlKHB4LCBweSwgY3gsIGN5KTtcbiAgICBhID0gTWF0aC5zcXJ0KChyYWRpdXMgKiByYWRpdXMpIC0gKGggKiBoKSk7XG4gICAgdmFyIGhpdEEgPSBwMUluQ2lyY2xlID8gWyB4MSwgeTEgXSA6IFsgeDIsIHkyIF07XG4gICAgdmFyIGhpdEIgPSBwMUluQ2lyY2xlID8gcHJvamVjdFBvaW50KHB4LCBweSwgeDIsIHkyLCBhKSA6IHByb2plY3RQb2ludChweCwgcHksIHgxLCB5MSwgYSk7XG4gICAgaWYgKGFsbW9zdEVxdWFsKGhpdEFbMF0sIGhpdEJbMF0pICYmIGFsbW9zdEVxdWFsKGhpdEFbMV0sIGhpdEJbMV0pKSB7XG4gICAgICAvLyBPbmUgcG9pbnQgaW4gdGhlIHNlZ21lbnQgbGllcyBvbiB0aGUgY2lyY2xlLCB0aGUgb3RoZXIgaXMgb3V0c2lkZVxuICAgICAgaGl0cy5wdXNoKGhpdEEpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGhpdHMucHVzaChoaXRBKTtcbiAgICBoaXRzLnB1c2goaGl0Qik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjbG9zZXN0UG9pbnQgPSBjbG9zZXN0UG9pbnRPblNlZ21lbnRGcm9tUG9pbnQoeDEsIHkxLCB4MiwgeTIsIGN4LCBjeSk7XG4gIHB4ID0gY2xvc2VzdFBvaW50WzBdO1xuICBweSA9IGNsb3Nlc3RQb2ludFsxXTtcblxuICBpZiAoKGFsbW9zdEVxdWFsKHgxLCBweCkgJiYgYWxtb3N0RXF1YWwoeTEsIHB5KSkgfHxcbiAgICAgIChhbG1vc3RFcXVhbCh4MiwgcHgpICYmIGFsbW9zdEVxdWFsKHkyLCBweSkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIGggPSBkaXN0YW5jZShweCwgcHksIGN4LCBjeSk7XG4gICAgaWYgKGggPiByYWRpdXMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKGFsbW9zdEVxdWFsKGgsIHJhZGl1cykpIHtcbiAgICAgIGhpdHMucHVzaChbIHB4LCBweSBdKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoYWxtb3N0RXF1YWwoaCwgMC4wKSkge1xuICAgICAgaGl0cy5wdXNoKHByb2plY3RQb2ludChjeCwgY3ksIHgxLCB5MSwgcmFkaXVzKSk7XG4gICAgICBoaXRzLnB1c2gocHJvamVjdFBvaW50KGN4LCBjeSwgeDIsIHkyLCByYWRpdXMpKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBhID0gTWF0aC5zcXJ0KChyYWRpdXMgKiByYWRpdXMpIC0gKGggKiBoKSk7XG4gICAgICBoaXRzLnB1c2gocHJvamVjdFBvaW50KHB4LCBweSwgeDEsIHkxLCBhKSk7XG4gICAgICBoaXRzLnB1c2gocHJvamVjdFBvaW50KHB4LCBweSwgeDIsIHkyLCBhKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbGF5RGlzdGFuY2UgKHgxLCB5MSwgeDIsIHkyKSB7XG4gIHZhciBkeCA9ICh4MiAtIHgxKTtcbiAgdmFyIGR5ID0gKHkyIC0geTEpO1xuICByZXR1cm4gZHggKiBkeCArIGR5ICogZHk7XG59XG5cbmZ1bmN0aW9uIHBvaW50SW5DaXJjbGUgKHB4LCBweSwgY3gsIGN5LCByYWRpdXMpIHtcbiAgcmV0dXJuIGxheURpc3RhbmNlKHB4LCBweSwgY3gsIGN5KSA8PSAocmFkaXVzICogcmFkaXVzKTtcbn1cblxuZnVuY3Rpb24gZGlzdGFuY2UgKHgxLCB5MSwgeDIsIHkyKSB7XG4gIHZhciBkeCA9ICh4MSAtIHgyKTtcbiAgdmFyIGR5ID0gKHkxIC0geTIpO1xuICByZXR1cm4gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbn1cblxuZnVuY3Rpb24gcHJvamVjdFBvaW50IChzcmN4LCBzcmN5LCBkZXN0eCwgZGVzdHksIGRpc3QpIHtcbiAgdmFyIHQgPSBkaXN0IC8gZGlzdGFuY2Uoc3JjeCwgc3JjeSwgZGVzdHgsIGRlc3R5KTtcbiAgcmV0dXJuIFtcbiAgICBzcmN4ICsgdCAqIChkZXN0eCAtIHNyY3gpLFxuICAgIHNyY3kgKyB0ICogKGRlc3R5IC0gc3JjeSlcbiAgXTtcbn1cblxuZnVuY3Rpb24gY2xvc2VzdFBvaW50T25MaW5lRnJvbVBvaW50ICh4MSwgeTEsIHgyLCB5MiwgcHgsIHB5KSB7XG4gIHZhciB2eCA9IHgyIC0geDE7XG4gIHZhciB2eSA9IHkyIC0geTE7XG4gIHZhciB3eCA9IHB4IC0geDE7XG4gIHZhciB3eSA9IHB5IC0geTE7XG4gIHZhciBjMSA9IHZ4ICogd3ggKyB2eSAqIHd5O1xuICB2YXIgYzIgPSB2eCAqIHZ4ICsgdnkgKiB2eTtcbiAgdmFyIHJhdGlvID0gYzEgLyBjMjtcbiAgcmV0dXJuIFtcbiAgICB4MSArIHJhdGlvICogdngsXG4gICAgeTEgKyByYXRpbyAqIHZ5XG4gIF07XG59XG5cbmZ1bmN0aW9uIGNsb3Nlc3RQb2ludE9uU2VnbWVudEZyb21Qb2ludCAoeDEsIHkxLCB4MiwgeTIsIHB4LCBweSkge1xuICB2YXIgdnggPSB4MiAtIHgxO1xuICB2YXIgdnkgPSB5MiAtIHkxO1xuICB2YXIgd3ggPSBweCAtIHgxO1xuICB2YXIgd3kgPSBweSAtIHkxO1xuXG4gIHZhciBjMSA9IHZ4ICogd3ggKyB2eSAqIHd5O1xuXG4gIGlmIChjMSA8PSAwLjApIHtcbiAgICByZXR1cm4gWyB4MSwgeTEgXTtcbiAgfVxuXG4gIHZhciBjMiA9IHZ4ICogdnggKyB2eSAqIHZ5O1xuICBpZiAoYzIgPD0gYzEpIHtcbiAgICByZXR1cm4gWyB4MiwgeTIgXTtcbiAgfVxuXG4gIHZhciByYXRpbyA9IGMxIC8gYzI7XG4gIHJldHVybiBbXG4gICAgeDEgKyByYXRpbyAqIHZ4LFxuICAgIHkxICsgcmF0aW8gKiB2eVxuICBdO1xufVxuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcImFsaWNlYmx1ZVwiOiBcIiNmMGY4ZmZcIixcbiAgXCJhbnRpcXVld2hpdGVcIjogXCIjZmFlYmQ3XCIsXG4gIFwiYXF1YVwiOiBcIiMwMGZmZmZcIixcbiAgXCJhcXVhbWFyaW5lXCI6IFwiIzdmZmZkNFwiLFxuICBcImF6dXJlXCI6IFwiI2YwZmZmZlwiLFxuICBcImJlaWdlXCI6IFwiI2Y1ZjVkY1wiLFxuICBcImJpc3F1ZVwiOiBcIiNmZmU0YzRcIixcbiAgXCJibGFja1wiOiBcIiMwMDAwMDBcIixcbiAgXCJibGFuY2hlZGFsbW9uZFwiOiBcIiNmZmViY2RcIixcbiAgXCJibHVlXCI6IFwiIzAwMDBmZlwiLFxuICBcImJsdWV2aW9sZXRcIjogXCIjOGEyYmUyXCIsXG4gIFwiYnJvd25cIjogXCIjYTUyYTJhXCIsXG4gIFwiYnVybHl3b29kXCI6IFwiI2RlYjg4N1wiLFxuICBcImNhZGV0Ymx1ZVwiOiBcIiM1ZjllYTBcIixcbiAgXCJjaGFydHJldXNlXCI6IFwiIzdmZmYwMFwiLFxuICBcImNob2NvbGF0ZVwiOiBcIiNkMjY5MWVcIixcbiAgXCJjb3JhbFwiOiBcIiNmZjdmNTBcIixcbiAgXCJjb3JuZmxvd2VyYmx1ZVwiOiBcIiM2NDk1ZWRcIixcbiAgXCJjb3Juc2lsa1wiOiBcIiNmZmY4ZGNcIixcbiAgXCJjcmltc29uXCI6IFwiI2RjMTQzY1wiLFxuICBcImN5YW5cIjogXCIjMDBmZmZmXCIsXG4gIFwiZGFya2JsdWVcIjogXCIjMDAwMDhiXCIsXG4gIFwiZGFya2N5YW5cIjogXCIjMDA4YjhiXCIsXG4gIFwiZGFya2dvbGRlbnJvZFwiOiBcIiNiODg2MGJcIixcbiAgXCJkYXJrZ3JheVwiOiBcIiNhOWE5YTlcIixcbiAgXCJkYXJrZ3JlZW5cIjogXCIjMDA2NDAwXCIsXG4gIFwiZGFya2dyZXlcIjogXCIjYTlhOWE5XCIsXG4gIFwiZGFya2toYWtpXCI6IFwiI2JkYjc2YlwiLFxuICBcImRhcmttYWdlbnRhXCI6IFwiIzhiMDA4YlwiLFxuICBcImRhcmtvbGl2ZWdyZWVuXCI6IFwiIzU1NmIyZlwiLFxuICBcImRhcmtvcmFuZ2VcIjogXCIjZmY4YzAwXCIsXG4gIFwiZGFya29yY2hpZFwiOiBcIiM5OTMyY2NcIixcbiAgXCJkYXJrcmVkXCI6IFwiIzhiMDAwMFwiLFxuICBcImRhcmtzYWxtb25cIjogXCIjZTk5NjdhXCIsXG4gIFwiZGFya3NlYWdyZWVuXCI6IFwiIzhmYmM4ZlwiLFxuICBcImRhcmtzbGF0ZWJsdWVcIjogXCIjNDgzZDhiXCIsXG4gIFwiZGFya3NsYXRlZ3JheVwiOiBcIiMyZjRmNGZcIixcbiAgXCJkYXJrc2xhdGVncmV5XCI6IFwiIzJmNGY0ZlwiLFxuICBcImRhcmt0dXJxdW9pc2VcIjogXCIjMDBjZWQxXCIsXG4gIFwiZGFya3Zpb2xldFwiOiBcIiM5NDAwZDNcIixcbiAgXCJkZWVwcGlua1wiOiBcIiNmZjE0OTNcIixcbiAgXCJkZWVwc2t5Ymx1ZVwiOiBcIiMwMGJmZmZcIixcbiAgXCJkaW1ncmF5XCI6IFwiIzY5Njk2OVwiLFxuICBcImRpbWdyZXlcIjogXCIjNjk2OTY5XCIsXG4gIFwiZG9kZ2VyYmx1ZVwiOiBcIiMxZTkwZmZcIixcbiAgXCJmaXJlYnJpY2tcIjogXCIjYjIyMjIyXCIsXG4gIFwiZmxvcmFsd2hpdGVcIjogXCIjZmZmYWYwXCIsXG4gIFwiZm9yZXN0Z3JlZW5cIjogXCIjMjI4YjIyXCIsXG4gIFwiZnVjaHNpYVwiOiBcIiNmZjAwZmZcIixcbiAgXCJnYWluc2Jvcm9cIjogXCIjZGNkY2RjXCIsXG4gIFwiZ2hvc3R3aGl0ZVwiOiBcIiNmOGY4ZmZcIixcbiAgXCJnb2xkXCI6IFwiI2ZmZDcwMFwiLFxuICBcImdvbGRlbnJvZFwiOiBcIiNkYWE1MjBcIixcbiAgXCJncmF5XCI6IFwiIzgwODA4MFwiLFxuICBcImdyZWVuXCI6IFwiIzAwODAwMFwiLFxuICBcImdyZWVueWVsbG93XCI6IFwiI2FkZmYyZlwiLFxuICBcImdyZXlcIjogXCIjODA4MDgwXCIsXG4gIFwiaG9uZXlkZXdcIjogXCIjZjBmZmYwXCIsXG4gIFwiaG90cGlua1wiOiBcIiNmZjY5YjRcIixcbiAgXCJpbmRpYW5yZWRcIjogXCIjY2Q1YzVjXCIsXG4gIFwiaW5kaWdvXCI6IFwiIzRiMDA4MlwiLFxuICBcIml2b3J5XCI6IFwiI2ZmZmZmMFwiLFxuICBcImtoYWtpXCI6IFwiI2YwZTY4Y1wiLFxuICBcImxhdmVuZGVyXCI6IFwiI2U2ZTZmYVwiLFxuICBcImxhdmVuZGVyYmx1c2hcIjogXCIjZmZmMGY1XCIsXG4gIFwibGF3bmdyZWVuXCI6IFwiIzdjZmMwMFwiLFxuICBcImxlbW9uY2hpZmZvblwiOiBcIiNmZmZhY2RcIixcbiAgXCJsaWdodGJsdWVcIjogXCIjYWRkOGU2XCIsXG4gIFwibGlnaHRjb3JhbFwiOiBcIiNmMDgwODBcIixcbiAgXCJsaWdodGN5YW5cIjogXCIjZTBmZmZmXCIsXG4gIFwibGlnaHRnb2xkZW5yb2R5ZWxsb3dcIjogXCIjZmFmYWQyXCIsXG4gIFwibGlnaHRncmF5XCI6IFwiI2QzZDNkM1wiLFxuICBcImxpZ2h0Z3JlZW5cIjogXCIjOTBlZTkwXCIsXG4gIFwibGlnaHRncmV5XCI6IFwiI2QzZDNkM1wiLFxuICBcImxpZ2h0cGlua1wiOiBcIiNmZmI2YzFcIixcbiAgXCJsaWdodHNhbG1vblwiOiBcIiNmZmEwN2FcIixcbiAgXCJsaWdodHNlYWdyZWVuXCI6IFwiIzIwYjJhYVwiLFxuICBcImxpZ2h0c2t5Ymx1ZVwiOiBcIiM4N2NlZmFcIixcbiAgXCJsaWdodHNsYXRlZ3JheVwiOiBcIiM3Nzg4OTlcIixcbiAgXCJsaWdodHNsYXRlZ3JleVwiOiBcIiM3Nzg4OTlcIixcbiAgXCJsaWdodHN0ZWVsYmx1ZVwiOiBcIiNiMGM0ZGVcIixcbiAgXCJsaWdodHllbGxvd1wiOiBcIiNmZmZmZTBcIixcbiAgXCJsaW1lXCI6IFwiIzAwZmYwMFwiLFxuICBcImxpbWVncmVlblwiOiBcIiMzMmNkMzJcIixcbiAgXCJsaW5lblwiOiBcIiNmYWYwZTZcIixcbiAgXCJtYWdlbnRhXCI6IFwiI2ZmMDBmZlwiLFxuICBcIm1hcm9vblwiOiBcIiM4MDAwMDBcIixcbiAgXCJtZWRpdW1hcXVhbWFyaW5lXCI6IFwiIzY2Y2RhYVwiLFxuICBcIm1lZGl1bWJsdWVcIjogXCIjMDAwMGNkXCIsXG4gIFwibWVkaXVtb3JjaGlkXCI6IFwiI2JhNTVkM1wiLFxuICBcIm1lZGl1bXB1cnBsZVwiOiBcIiM5MzcwZGJcIixcbiAgXCJtZWRpdW1zZWFncmVlblwiOiBcIiMzY2IzNzFcIixcbiAgXCJtZWRpdW1zbGF0ZWJsdWVcIjogXCIjN2I2OGVlXCIsXG4gIFwibWVkaXVtc3ByaW5nZ3JlZW5cIjogXCIjMDBmYTlhXCIsXG4gIFwibWVkaXVtdHVycXVvaXNlXCI6IFwiIzQ4ZDFjY1wiLFxuICBcIm1lZGl1bXZpb2xldHJlZFwiOiBcIiNjNzE1ODVcIixcbiAgXCJtaWRuaWdodGJsdWVcIjogXCIjMTkxOTcwXCIsXG4gIFwibWludGNyZWFtXCI6IFwiI2Y1ZmZmYVwiLFxuICBcIm1pc3R5cm9zZVwiOiBcIiNmZmU0ZTFcIixcbiAgXCJtb2NjYXNpblwiOiBcIiNmZmU0YjVcIixcbiAgXCJuYXZham93aGl0ZVwiOiBcIiNmZmRlYWRcIixcbiAgXCJuYXZ5XCI6IFwiIzAwMDA4MFwiLFxuICBcIm9sZGxhY2VcIjogXCIjZmRmNWU2XCIsXG4gIFwib2xpdmVcIjogXCIjODA4MDAwXCIsXG4gIFwib2xpdmVkcmFiXCI6IFwiIzZiOGUyM1wiLFxuICBcIm9yYW5nZVwiOiBcIiNmZmE1MDBcIixcbiAgXCJvcmFuZ2VyZWRcIjogXCIjZmY0NTAwXCIsXG4gIFwib3JjaGlkXCI6IFwiI2RhNzBkNlwiLFxuICBcInBhbGVnb2xkZW5yb2RcIjogXCIjZWVlOGFhXCIsXG4gIFwicGFsZWdyZWVuXCI6IFwiIzk4ZmI5OFwiLFxuICBcInBhbGV0dXJxdW9pc2VcIjogXCIjYWZlZWVlXCIsXG4gIFwicGFsZXZpb2xldHJlZFwiOiBcIiNkYjcwOTNcIixcbiAgXCJwYXBheWF3aGlwXCI6IFwiI2ZmZWZkNVwiLFxuICBcInBlYWNocHVmZlwiOiBcIiNmZmRhYjlcIixcbiAgXCJwZXJ1XCI6IFwiI2NkODUzZlwiLFxuICBcInBpbmtcIjogXCIjZmZjMGNiXCIsXG4gIFwicGx1bVwiOiBcIiNkZGEwZGRcIixcbiAgXCJwb3dkZXJibHVlXCI6IFwiI2IwZTBlNlwiLFxuICBcInB1cnBsZVwiOiBcIiM4MDAwODBcIixcbiAgXCJyZWJlY2NhcHVycGxlXCI6IFwiIzY2MzM5OVwiLFxuICBcInJlZFwiOiBcIiNmZjAwMDBcIixcbiAgXCJyb3N5YnJvd25cIjogXCIjYmM4ZjhmXCIsXG4gIFwicm95YWxibHVlXCI6IFwiIzQxNjllMVwiLFxuICBcInNhZGRsZWJyb3duXCI6IFwiIzhiNDUxM1wiLFxuICBcInNhbG1vblwiOiBcIiNmYTgwNzJcIixcbiAgXCJzYW5keWJyb3duXCI6IFwiI2Y0YTQ2MFwiLFxuICBcInNlYWdyZWVuXCI6IFwiIzJlOGI1N1wiLFxuICBcInNlYXNoZWxsXCI6IFwiI2ZmZjVlZVwiLFxuICBcInNpZW5uYVwiOiBcIiNhMDUyMmRcIixcbiAgXCJzaWx2ZXJcIjogXCIjYzBjMGMwXCIsXG4gIFwic2t5Ymx1ZVwiOiBcIiM4N2NlZWJcIixcbiAgXCJzbGF0ZWJsdWVcIjogXCIjNmE1YWNkXCIsXG4gIFwic2xhdGVncmF5XCI6IFwiIzcwODA5MFwiLFxuICBcInNsYXRlZ3JleVwiOiBcIiM3MDgwOTBcIixcbiAgXCJzbm93XCI6IFwiI2ZmZmFmYVwiLFxuICBcInNwcmluZ2dyZWVuXCI6IFwiIzAwZmY3ZlwiLFxuICBcInN0ZWVsYmx1ZVwiOiBcIiM0NjgyYjRcIixcbiAgXCJ0YW5cIjogXCIjZDJiNDhjXCIsXG4gIFwidGVhbFwiOiBcIiMwMDgwODBcIixcbiAgXCJ0aGlzdGxlXCI6IFwiI2Q4YmZkOFwiLFxuICBcInRvbWF0b1wiOiBcIiNmZjYzNDdcIixcbiAgXCJ0dXJxdW9pc2VcIjogXCIjNDBlMGQwXCIsXG4gIFwidmlvbGV0XCI6IFwiI2VlODJlZVwiLFxuICBcIndoZWF0XCI6IFwiI2Y1ZGViM1wiLFxuICBcIndoaXRlXCI6IFwiI2ZmZmZmZlwiLFxuICBcIndoaXRlc21va2VcIjogXCIjZjVmNWY1XCIsXG4gIFwieWVsbG93XCI6IFwiI2ZmZmYwMFwiLFxuICBcInllbGxvd2dyZWVuXCI6IFwiIzlhY2QzMlwiXG59IiwiXG52YXIgbmFtZXMgPSByZXF1aXJlKCcuL2Nzcy1jb2xvci1uYW1lcy5qc29uJyk7XG52YXIgSFNMVXRpbCA9IHJlcXVpcmUoJy4vaHNsJyk7XG52YXIgaGV4VG9SR0JBID0gcmVxdWlyZSgnLi9oZXgtdG8tcmdiYScpO1xudmFyIFJHQkFUb0hleCA9IHJlcXVpcmUoJy4vcmdiYS10by1oZXgnKTtcbnZhciB3cmFwID0gcmVxdWlyZSgnLi93cmFwJyk7XG5cbmZ1bmN0aW9uIHBhcnNlU3R5bGUgKHN0cikge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDb2xvciBwYXJzaW5nIG11c3QgYmUgcGVyZm9ybWVkIG9uIGEgc3RyaW5nIHBhcmFtZXRlcicpO1xuICB9XG5cbiAgc3RyID0gc3RyLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKHN0ciBpbiBuYW1lcykge1xuICAgIHN0ciA9IG5hbWVzW3N0cl07XG4gIH0gZWxzZSBpZiAoc3RyID09PSAndHJhbnNwYXJlbnQnKSB7XG4gICAgc3RyID0gJyMwMDAwMDAwMCc7XG4gIH1cblxuICB2YXIgcmdiYSwgaHNsYSwgaGV4O1xuICBpZiAoL14jW2EtZjAtOV0rJC8udGVzdChzdHIpKSB7XG4gICAgcmdiYSA9IGhleFRvUkdCQShzdHIpO1xuICAgIGhleCA9IFJHQkFUb0hleChyZ2JhKTtcbiAgICBoc2xhID0gSFNMVXRpbC5SR0JBVG9IU0xBKHJnYmEpO1xuICB9IGVsc2Uge1xuICAgIHZhciBtYXRjaCA9IC9eKCg/OnJnYnxoc2wpYT8pXFxzKlxcKChbXildKilcXCkvLmV4ZWMoc3RyKTtcbiAgICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdHlwZSA9IG1hdGNoWzFdLnJlcGxhY2UoL2EkLywgJycpO1xuICAgIHZhciBwYXJ0cyA9IG1hdGNoWzJdLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKS5zcGxpdCgvXFxzKixcXHMqLykubWFwKGZ1bmN0aW9uIChuLCBpKSB7XG4gICAgICAvLyBvcGFxdWUgcGFydFxuICAgICAgaWYgKGkgPD0gMikgcmV0dXJuIE1hdGgucm91bmQocGFyc2VGbG9hdChuKSB8fCAwKTtcbiAgICAgIC8vIGFscGhhIHBhcnRcbiAgICAgIGVsc2Uge1xuICAgICAgICBuID0gcGFyc2VGbG9hdChuKTtcbiAgICAgICAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCAhaXNGaW5pdGUobikpIG4gPSAxO1xuICAgICAgICByZXR1cm4gbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBmaWxsIGluIGFscGhhIHdpdGggMS4wIGJ5IGRlZmF1bHRcbiAgICBpZiAodHlwZW9mIHBhcnRzWzNdID09PSAndW5kZWZpbmVkJyB8fCAhaXNGaW5pdGUocGFydHNbM10pKSB7XG4gICAgICBwYXJ0c1szXSA9IDE7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAncmdiJykge1xuICAgICAgaHNsYSA9IEhTTFV0aWwuUkdCQVRvSFNMQShwYXJ0cyk7XG4gICAgICByZ2JhID0gcGFydHM7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnaHNsJykge1xuICAgICAgcmdiYSA9IEhTTFV0aWwuSFNMQVRvUkdCQShwYXJ0cyk7XG4gICAgICBwYXJ0c1swXSA9IHdyYXAocGFydHNbMF0sIDAsIDM2MCk7XG4gICAgICBoc2xhID0gcGFydHM7XG4gICAgfVxuICAgIGhleCA9IFJHQkFUb0hleChyZ2JhKTtcbiAgfVxuXG4gIGlmICghcmdiYSAmJiAhaGV4ICYmICFoc2xhKSByZXR1cm4gbnVsbDtcblxuICB2YXIgcmV0ID0ge1xuICAgIGhleDogaGV4LFxuICAgIGFscGhhOiByZ2JhWzNdLFxuICAgIHJnYjogcmdiYS5zbGljZSgwLCAzKSxcbiAgICByZ2JhOiByZ2JhLFxuICAgIGhzbDogaHNsYS5zbGljZSgwLCAzKSxcbiAgICBoc2xhOiBoc2xhXG4gIH07XG5cbiAgcmV0dXJuIHJldDtcbn1cblxubW9kdWxlLmV4cG9ydHMucGFyc2UgPSBwYXJzZUNvbG9yO1xuZnVuY3Rpb24gcGFyc2VDb2xvciAoY29sb3IpIHtcbiAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcGFyc2VTdHlsZShjb2xvcik7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjb2xvcikgJiYgY29sb3IubGVuZ3RoID49IDMpIHtcbiAgICB2YXIgcmdiU3RyID0gcmdiU3R5bGUoY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSwgY29sb3JbM10pO1xuICAgIHJldHVybiBwYXJzZVN0eWxlKHJnYlN0cik7XG4gIH0gZWxzZSBpZiAoY29sb3IgJiYgdHlwZW9mIGNvbG9yID09PSAnb2JqZWN0Jykge1xuICAgIHZhciBzdHI7XG4gICAgaWYgKGNvbG9yLmhleCkgc3RyID0gY29sb3IuaGV4O1xuICAgIGVsc2UgaWYgKGNvbG9yLnJnYmEpIHN0ciA9IHJnYlN0eWxlKGNvbG9yLnJnYmFbMF0sIGNvbG9yLnJnYmFbMV0sIGNvbG9yLnJnYmFbMl0sIGNvbG9yLnJnYmFbM10pO1xuICAgIGVsc2UgaWYgKGNvbG9yLmhzbGEpIHN0ciA9IGhzbFN0eWxlKGNvbG9yLmhzbGFbMF0sIGNvbG9yLmhzbGFbMV0sIGNvbG9yLmhzbGFbMl0sIGNvbG9yLmhzbGFbM10pO1xuICAgIGVsc2UgaWYgKGNvbG9yLnJnYikgc3RyID0gcmdiU3R5bGUoY29sb3IucmdiWzBdLCBjb2xvci5yZ2JbMV0sIGNvbG9yLnJnYlsyXSk7XG4gICAgZWxzZSBpZiAoY29sb3IuaHNsKSBzdHIgPSBoc2xTdHlsZShjb2xvci5oc2xbMF0sIGNvbG9yLmhzbFsxXSwgY29sb3IuaHNsWzJdKTtcbiAgICBpZiAoc3RyKSByZXR1cm4gcGFyc2VTdHlsZShzdHIpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5zdHlsZSA9IHN0eWxlO1xuZnVuY3Rpb24gc3R5bGUgKGNvbG9yKSB7XG4gIHZhciByZXN1bHQgPSBtb2R1bGUuZXhwb3J0cy5wYXJzZShjb2xvcik7XG4gIGlmIChyZXN1bHQpIHtcbiAgICB2YXIgcmdiYSA9IHJlc3VsdC5yZ2JhO1xuICAgIHJldHVybiByZ2JTdHlsZShyZ2JhWzBdLCByZ2JhWzFdLCByZ2JhWzJdLCByZ2JhWzNdKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gcmdiU3R5bGUgKHIsIGcsIGIsIGEpIHtcbiAgciA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZChyKSkpO1xuICBnID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKGcpKSk7XG4gIGIgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQoYikpKTtcbiAgaWYgKGEgPT09IDEgfHwgIWlzRmluaXRlKGEpIHx8IHR5cGVvZiBhID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiAncmdiKCcgKyBbIHIsIGcsIGIgXS5qb2luKCcsICcpICsgJyknO1xuICB9IGVsc2Uge1xuICAgIGEgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBhKSk7XG4gICAgcmV0dXJuICdyZ2JhKCcgKyBbIHIsIGcsIGIsIGEgXS5qb2luKCcsICcpICsgJyknO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhzbFN0eWxlIChoLCBzLCBsLCBhKSB7XG4gIGggPSB3cmFwKGgsIDAsIDM2MCk7XG4gIGggPSBNYXRoLm1heCgwLCBNYXRoLm1pbigzNjAsIE1hdGgucm91bmQoaCkpKTtcbiAgcyA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZChzKSkpO1xuICBsID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKGwpKSk7XG4gIGlmIChhID09PSAxIHx8ICFpc0Zpbml0ZShhKSB8fCB0eXBlb2YgYSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gJ2hzbCgnICsgWyBoLCBzLCBsIF0uam9pbignLCAnKSArICcpJztcbiAgfSBlbHNlIHtcbiAgICBhID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgYSkpO1xuICAgIHJldHVybiAnaHNsYSgnICsgWyBoLCBzLCBsLCBhIF0uam9pbignLCAnKSArICcpJztcbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBoZXhUb1JHQkE7XG5mdW5jdGlvbiBoZXhUb1JHQkEgKHN0cikge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdIZXggY29kZSBwYXJzaW5nIG11c3QgYmUgcGVyZm9ybWVkIG9uIGEgc3RyaW5nIHBhcmFtZXRlcicpO1xuICB9XG5cbiAgc3RyID0gc3RyLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKCEvXiNbYS1mMC05XSskLy50ZXN0KHN0cikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBoZXggPSBzdHIucmVwbGFjZSgvXiMvLCAnJyk7XG4gIHZhciBhbHBoYSA9IDE7XG5cbiAgaWYgKGhleC5sZW5ndGggPT09IDgpIHtcbiAgICBhbHBoYSA9IHBhcnNlSW50KGhleC5zbGljZSg2LCA4KSwgMTYpIC8gMjU1O1xuICAgIGhleCA9IGhleC5zbGljZSgwLCA2KTtcbiAgfVxuXG4gIGlmIChoZXgubGVuZ3RoID09PSA0KSB7XG4gICAgYWxwaGEgPSBwYXJzZUludChoZXguc2xpY2UoMywgNCkucmVwZWF0KDIpLCAxNikgLyAyNTU7XG4gICAgaGV4ID0gaGV4LnNsaWNlKDAsIDMpO1xuICB9XG5cbiAgaWYgKGhleC5sZW5ndGggPT09IDMpIHtcbiAgICBoZXggPSBoZXhbMF0gKyBoZXhbMF0gKyBoZXhbMV0gKyBoZXhbMV0gKyBoZXhbMl0gKyBoZXhbMl07XG4gIH1cblxuICB2YXIgbnVtID0gcGFyc2VJbnQoaGV4LCAxNik7XG4gIHZhciByZWQgPSBudW0gPj4gMTY7XG4gIHZhciBncmVlbiA9IChudW0gPj4gOCkgJiAyNTU7XG4gIHZhciBibHVlID0gbnVtICYgMjU1O1xuXG4gIHJldHVybiBbIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhIF07XG59XG4iLCJ2YXIgZmxvYXRIU0wyUkdCID0gcmVxdWlyZSgnZmxvYXQtaHNsMnJnYicpO1xudmFyIGZsb2F0UkdCMkhTTCA9IHJlcXVpcmUoJ2Zsb2F0LXJnYjJoc2wnKTtcbnZhciB3cmFwID0gcmVxdWlyZSgnLi93cmFwJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJHQkFUb0hTTEEgPSBSR0JBVG9IU0xBO1xuZnVuY3Rpb24gUkdCQVRvSFNMQSAocmdiYSkge1xuICB2YXIgZmxvYXRIU0wgPSBmbG9hdFJHQjJIU0woWyByZ2JhWzBdIC8gMjU1LCByZ2JhWzFdIC8gMjU1LCByZ2JhWzJdIC8gMjU1IF0pO1xuICByZXR1cm4gW1xuICAgIE1hdGgubWF4KDAsIE1hdGgubWluKDM2MCwgTWF0aC5yb3VuZChmbG9hdEhTTFswXSAqIDM2MCkpKSxcbiAgICBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQoZmxvYXRIU0xbMV0gKiAxMDApKSksXG4gICAgTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKGZsb2F0SFNMWzJdICogMTAwKSkpLFxuICAgIHJnYmFbM11cbiAgXTtcbn1cblxubW9kdWxlLmV4cG9ydHMuSFNMQVRvUkdCQSA9IEhTTEFUb1JHQkE7XG5mdW5jdGlvbiBIU0xBVG9SR0JBIChoc2xhKSB7XG4gIHZhciBodWUgPSB3cmFwKGhzbGFbMF0sIDAsIDM2MCk7XG4gIHZhciBmbG9hdFJHQiA9IGZsb2F0SFNMMlJHQihbIGh1ZSAvIDM2MCwgaHNsYVsxXSAvIDEwMCwgaHNsYVsyXSAvIDEwMCBdKTtcbiAgcmV0dXJuIFtcbiAgICBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQoZmxvYXRSR0JbMF0gKiAyNTUpKSksXG4gICAgTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKGZsb2F0UkdCWzFdICogMjU1KSkpLFxuICAgIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZChmbG9hdFJHQlsyXSAqIDI1NSkpKSxcbiAgICBoc2xhWzNdXG4gIF07XG59XG4iLCIvLyBJIGJlbGlldmUgdGhpcyB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IFRheWxvciBCYWxkd2luIChAdGF5bG9yYmFsZHdpbiAvIEByb2x5YXRtYXgpXG4vLyBJZiB0aGF0IGlzIG1pc2NyZWRpdGVkIHBsZWFzZSBvcGVuIGFuIGlzc3VlLlxuXG52YXIgY2xvbmUgPSByZXF1aXJlKCdjbG9uZScpO1xudmFyIHNxdWFyZWREaXN0YW5jZSA9IHJlcXVpcmUoJy4vdmVjMicpLnNxdWFyZWREaXN0YW5jZTtcblxubW9kdWxlLmV4cG9ydHMuc29ydCA9IGZ1bmN0aW9uIHNvcnQgKHBhdGhzKSB7XG4gIHBhdGhzID0gY2xvbmUocGF0aHMpO1xuXG4gIGlmICghcGF0aHMubGVuZ3RoKSByZXR1cm4gcGF0aHM7XG5cbiAgdmFyIG5ld1BhdGhzID0gW107XG4gIG5ld1BhdGhzLnB1c2gocGF0aHNbMF0pO1xuXG4gIHBhdGhzID0gcGF0aHMuc2xpY2UoMSk7XG5cbiAgd2hpbGUgKHBhdGhzLmxlbmd0aCkge1xuICAgIHZhciBsYXN0UGF0aCA9IG5ld1BhdGhzW25ld1BhdGhzLmxlbmd0aCAtIDFdO1xuICAgIHZhciBjdXJQdCA9IGxhc3RQYXRoW2xhc3RQYXRoLmxlbmd0aCAtIDFdO1xuICAgIHZhciByZXN1bHQgPSBwYXRocy5yZWR1Y2UoZnVuY3Rpb24gKGNsb3Nlc3QsIHBhdGgsIGkpIHtcbiAgICAgIHZhciBmaXJzdFB0ID0gcGF0aFswXTtcbiAgICAgIHZhciBsYXN0UHQgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gICAgICB2YXIgZGlzdGFuY2VUb0ZpcnN0ID0gc3F1YXJlZERpc3RhbmNlKGN1clB0LCBmaXJzdFB0KTtcbiAgICAgIHZhciBkaXN0YW5jZVRvTGFzdCA9IHNxdWFyZWREaXN0YW5jZShjdXJQdCwgbGFzdFB0KTtcbiAgICAgIGlmICghY2xvc2VzdCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlkeDogaSxcbiAgICAgICAgICBkaXN0YW5jZTogTWF0aC5taW4oZGlzdGFuY2VUb0ZpcnN0LCBkaXN0YW5jZVRvTGFzdCksXG4gICAgICAgICAgcmV2ZXJzZTogZGlzdGFuY2VUb0xhc3QgPCBkaXN0YW5jZVRvRmlyc3RcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChkaXN0YW5jZVRvRmlyc3QgPCBjbG9zZXN0LmRpc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaWR4OiBpLFxuICAgICAgICAgIGRpc3RhbmNlOiBkaXN0YW5jZVRvRmlyc3QsXG4gICAgICAgICAgcmV2ZXJzZTogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChkaXN0YW5jZVRvTGFzdCA8IGNsb3Nlc3QuZGlzdGFuY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpZHg6IGksXG4gICAgICAgICAgZGlzdGFuY2U6IGRpc3RhbmNlVG9MYXN0LFxuICAgICAgICAgIHJldmVyc2U6IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbG9zZXN0O1xuICAgIH0sIG51bGwpO1xuICAgIHZhciBpZHggPSByZXN1bHQuaWR4O1xuICAgIHZhciByZXZlcnNlID0gcmVzdWx0LnJldmVyc2U7XG4gICAgdmFyIGNsb3Nlc3RQYXRoID0gcGF0aHMuc3BsaWNlKGlkeCwgMSlbMF0uc2xpY2UoKTtcbiAgICBpZiAocmV2ZXJzZSkge1xuICAgICAgY2xvc2VzdFBhdGgucmV2ZXJzZSgpO1xuICAgIH1cbiAgICBuZXdQYXRocy5wdXNoKGNsb3Nlc3RQYXRoKTtcbiAgfVxuICByZXR1cm4gbmV3UGF0aHM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5tZXJnZSA9IGZ1bmN0aW9uIG1lcmdlIChwYXRocywgbWVyZ2VUaHJlaHNvbGQpIHtcbiAgbWVyZ2VUaHJlaHNvbGQgPSBtZXJnZVRocmVoc29sZCAhPSBudWxsID8gbWVyZ2VUaHJlaHNvbGQgOiAwLjA1O1xuXG4gIHZhciBtZXJnZVRocmVoc29sZFNxID0gbWVyZ2VUaHJlaHNvbGQgKiBtZXJnZVRocmVoc29sZDtcbiAgcGF0aHMgPSBjbG9uZShwYXRocyk7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgcGF0aHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbGFzdFBhdGggPSBwYXRoc1tpIC0gMV07XG4gICAgdmFyIGN1clBhdGggPSBwYXRoc1tpXTtcbiAgICBpZiAoc3F1YXJlZERpc3RhbmNlKGN1clBhdGhbMF0sIGxhc3RQYXRoW2xhc3RQYXRoLmxlbmd0aCAtIDFdKSA8IG1lcmdlVGhyZWhzb2xkU3EpIHtcbiAgICAgIHBhdGhzID0gbWVyZ2VQYXRocyhwYXRocywgaSAtIDEsIGkpO1xuICAgICAgaSAtPSAxOyAvLyBub3cgdGhhdCB3ZSd2ZSBtZXJnZWQsIHZhcidzIGNvcnJlY3QgaSBmb3IgdGhlIG5leHQgcm91bmRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhdGhzO1xufTtcblxuZnVuY3Rpb24gbWVyZ2VQYXRocyAocGF0aHMsIHBhdGgxSWR4LCBwYXRoMklkeCkge1xuICAvLyB0aGlzIHdpbGwgaGVscCB1cyBrZWVwIHRoaW5ncyBpbiBvcmRlciB3aGVuIHdlIGRvIHRoZSBzcGxpY2luZ1xuICB2YXIgbWluSWR4ID0gTWF0aC5taW4ocGF0aDFJZHgsIHBhdGgySWR4KTtcbiAgdmFyIG1heElkeCA9IE1hdGgubWF4KHBhdGgxSWR4LCBwYXRoMklkeCk7XG4gIHBhdGhzID0gcGF0aHMuc2xpY2UoKTtcbiAgdmFyIHBhdGgxID0gcGF0aHNbbWluSWR4XTtcbiAgdmFyIHBhdGgyID0gcGF0aHNbbWF4SWR4XTtcbiAgdmFyIG1lcmdlZFBhdGggPSBwYXRoMS5jb25jYXQocGF0aDIuc2xpY2UoMSkpO1xuICBwYXRocy5zcGxpY2UobWF4SWR4LCAxKTtcbiAgcGF0aHMuc3BsaWNlKG1pbklkeCwgMSwgbWVyZ2VkUGF0aCk7XG4gIHJldHVybiBwYXRocztcbn1cblxuLy8gdGhpcyBpcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiBwYXRocyAtIGZyb20gdGhlIGVuZCBvZiBwYXRoIDEgdG8gdGhlIHN0YXJ0IG9mIHBhdGggMlxuLy8gZnVuY3Rpb24gZ2V0VHJhdmVsaW5nRGlzdGFuY2UgKHBhdGhzKSB7XG4vLyAgIHZhciB0b3RhbCA9IDA7XG4vLyAgIHZhciBsYXN0UHQgPSBwYXRoc1swXVtwYXRoc1swXS5sZW5ndGggLSAxXTtcbi8vICAgZm9yICh2YXIgcGF0aCBvZiBwYXRocy5zbGljZSgxKSkge1xuLy8gICAgIHZhciBzcXVhcmVkRGlzdCA9IHNxdWFyZWREaXN0YW5jZShsYXN0UHQsIHBhdGhbMF0pO1xuLy8gICAgIHRvdGFsICs9IE1hdGguc3FydChzcXVhcmVkRGlzdCk7XG4vLyAgICAgbGFzdFB0ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuLy8gICB9XG4vLyAgIHJldHVybiB0b3RhbDtcbi8vIH1cbiIsIi8vIEV4dHJhY3RlZCBmcm9tIEB0bWN3IC8gd2NhZy1jb250cmFzdFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RtY3cvcmVsYXRpdmUtbHVtaW5hbmNlL2Jsb2IvbWFzdGVyL2luZGV4LmpzXG5cbi8vICMgUmVsYXRpdmUgbHVtaW5hbmNlXG4vLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI3JlbGF0aXZlbHVtaW5hbmNlZGVmXG4vLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MdW1pbmFuY2VfKHJlbGF0aXZlKVxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTHVtaW5vc2l0eV9mdW5jdGlvblxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUmVjLl83MDkjTHVtYV9jb2VmZmljaWVudHNcblxuLy8gcmVkLCBncmVlbiwgYW5kIGJsdWUgY29lZmZpY2llbnRzXG52YXIgcmMgPSAwLjIxMjY7XG52YXIgZ2MgPSAwLjcxNTI7XG52YXIgYmMgPSAwLjA3MjI7XG4vLyBsb3ctZ2FtbWEgYWRqdXN0IGNvZWZmaWNpZW50XG52YXIgbG93YyA9IDEgLyAxMi45MjtcblxuZnVuY3Rpb24gYWRqdXN0R2FtbWEgKGEpIHtcbiAgcmV0dXJuIE1hdGgucG93KChhICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVsYXRpdmVMdW1pbmFuY2U7XG5mdW5jdGlvbiByZWxhdGl2ZUx1bWluYW5jZSAocmdiKSB7XG4gIHZhciByc3JnYiA9IHJnYlswXSAvIDI1NTtcbiAgdmFyIGdzcmdiID0gcmdiWzFdIC8gMjU1O1xuICB2YXIgYnNyZ2IgPSByZ2JbMl0gLyAyNTU7XG4gIHZhciByID0gcnNyZ2IgPD0gMC4wMzkyOCA/IHJzcmdiICogbG93YyA6IGFkanVzdEdhbW1hKHJzcmdiKTtcbiAgdmFyIGcgPSBnc3JnYiA8PSAwLjAzOTI4ID8gZ3NyZ2IgKiBsb3djIDogYWRqdXN0R2FtbWEoZ3NyZ2IpO1xuICB2YXIgYiA9IGJzcmdiIDw9IDAuMDM5MjggPyBic3JnYiAqIGxvd2MgOiBhZGp1c3RHYW1tYShic3JnYik7XG4gIHJldHVybiByICogcmMgKyBnICogZ2MgKyBiICogYmM7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJnYmFUb0hleDtcbmZ1bmN0aW9uIHJnYmFUb0hleCAocmdiYSkge1xuICBpZiAoIXJnYmEgfHwgIUFycmF5LmlzQXJyYXkocmdiYSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdNdXN0IHNwZWNpZnkgYW4gYXJyYXkgdG8gY29udmVydCBpbnRvIGEgaGV4IGNvZGUnKTtcbiAgfVxuXG4gIHZhciByID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHJnYmFbMF0gfHwgMCkpKTtcbiAgdmFyIGcgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQocmdiYVsxXSB8fCAwKSkpO1xuICB2YXIgYiA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZChyZ2JhWzJdIHx8IDApKSk7XG5cbiAgdmFyIGFscGhhID0gcmdiYVszXTtcbiAgaWYgKHR5cGVvZiBhbHBoYSA9PT0gJ3VuZGVmaW5lZCcgfHwgIWlzRmluaXRlKGFscGhhKSkge1xuICAgIGFscGhhID0gMTtcbiAgfVxuICB2YXIgYSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZChhbHBoYSAqIDI1NSkpKTtcbiAgdmFyIGFscGhhUGFyYW0gPSBhID09PSAyNTUgPyAnJyA6IChhIHwgMSA8PCA4KS50b1N0cmluZygxNikuc2xpY2UoMSk7XG4gIHZhciByZXN1bHQgPSAoKGIgfCBnIDw8IDggfCByIDw8IDE2KSB8IDEgPDwgMjQpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSArIGFscGhhUGFyYW07XG4gIHJldHVybiAnIycgKyByZXN1bHQ7XG59XG4iLCJtb2R1bGUuZXhwb3J0cy5zcXVhcmVkRGlzdGFuY2UgPSBzcXVhcmVkRGlzdGFuY2U7XG5mdW5jdGlvbiBzcXVhcmVkRGlzdGFuY2UgKHB0MSwgcHQyKSB7XG4gIHZhciBkeCA9IHB0MlswXSAtIHB0MVswXTtcbiAgdmFyIGR5ID0gcHQyWzFdIC0gcHQxWzFdO1xuICByZXR1cm4gZHggKiBkeCArIGR5ICogZHk7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHdyYXA7XG5mdW5jdGlvbiB3cmFwICh2YWx1ZSwgZnJvbSwgdG8pIHtcbiAgaWYgKHR5cGVvZiBmcm9tICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgdG8gIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTXVzdCBzcGVjaWZ5IFwidG9cIiBhbmQgXCJmcm9tXCIgYXJndW1lbnRzIGFzIG51bWJlcnMnKTtcbiAgfVxuICAvLyBhbGdvcml0aG0gZnJvbSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81ODUyNjI4LzU5OTg4NFxuICBpZiAoZnJvbSA+IHRvKSB7XG4gICAgdmFyIHQgPSBmcm9tO1xuICAgIGZyb20gPSB0bztcbiAgICB0byA9IHQ7XG4gIH1cbiAgdmFyIGN5Y2xlID0gdG8gLSBmcm9tO1xuICBpZiAoY3ljbGUgPT09IDApIHtcbiAgICByZXR1cm4gdG87XG4gIH1cbiAgcmV0dXJuIHZhbHVlIC0gY3ljbGUgKiBNYXRoLmZsb29yKCh2YWx1ZSAtIGZyb20pIC8gY3ljbGUpO1xufVxuIiwidmFyIGRlZmluZWQgPSByZXF1aXJlKCdkZWZpbmVkJyk7XG52YXIgd3JhcCA9IHJlcXVpcmUoJy4vbGliL3dyYXAnKTtcbnZhciBFUFNJTE9OID0gTnVtYmVyLkVQU0lMT047XG5cbmZ1bmN0aW9uIGNsYW1wICh2YWx1ZSwgbWluLCBtYXgpIHtcbiAgcmV0dXJuIG1pbiA8IG1heFxuICAgID8gKHZhbHVlIDwgbWluID8gbWluIDogdmFsdWUgPiBtYXggPyBtYXggOiB2YWx1ZSlcbiAgICA6ICh2YWx1ZSA8IG1heCA/IG1heCA6IHZhbHVlID4gbWluID8gbWluIDogdmFsdWUpO1xufVxuXG5mdW5jdGlvbiBjbGFtcDAxICh2KSB7XG4gIHJldHVybiBjbGFtcCh2LCAwLCAxKTtcbn1cblxuZnVuY3Rpb24gbGVycCAobWluLCBtYXgsIHQpIHtcbiAgcmV0dXJuIG1pbiAqICgxIC0gdCkgKyBtYXggKiB0O1xufVxuXG5mdW5jdGlvbiBpbnZlcnNlTGVycCAobWluLCBtYXgsIHQpIHtcbiAgaWYgKE1hdGguYWJzKG1pbiAtIG1heCkgPCBFUFNJTE9OKSByZXR1cm4gMDtcbiAgZWxzZSByZXR1cm4gKHQgLSBtaW4pIC8gKG1heCAtIG1pbik7XG59XG5cbmZ1bmN0aW9uIHNtb290aHN0ZXAgKG1pbiwgbWF4LCB0KSB7XG4gIHZhciB4ID0gY2xhbXAoaW52ZXJzZUxlcnAobWluLCBtYXgsIHQpLCAwLCAxKTtcbiAgcmV0dXJuIHggKiB4ICogKDMgLSAyICogeCk7XG59XG5cbmZ1bmN0aW9uIHRvRmluaXRlIChuLCBkZWZhdWx0VmFsdWUpIHtcbiAgZGVmYXVsdFZhbHVlID0gZGVmaW5lZChkZWZhdWx0VmFsdWUsIDApO1xuICByZXR1cm4gdHlwZW9mIG4gPT09ICdudW1iZXInICYmIGlzRmluaXRlKG4pID8gbiA6IGRlZmF1bHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gZXhwYW5kVmVjdG9yIChkaW1zKSB7XG4gIGlmICh0eXBlb2YgZGltcyAhPT0gJ251bWJlcicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGRpbXMgYXJndW1lbnQnKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChwLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBkZWZhdWx0VmFsdWUgPSBkZWZpbmVkKGRlZmF1bHRWYWx1ZSwgMCk7XG4gICAgdmFyIHNjYWxhcjtcbiAgICBpZiAocCA9PSBudWxsKSB7XG4gICAgICAvLyBObyB2ZWN0b3IsIGNyZWF0ZSBhIGRlZmF1bHQgb25lXG4gICAgICBzY2FsYXIgPSBkZWZhdWx0VmFsdWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcCA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUocCkpIHtcbiAgICAgIC8vIEV4cGFuZCBzaW5nbGUgY2hhbm5lbCB0byBtdWx0aXBsZSB2ZWN0b3JcbiAgICAgIHNjYWxhciA9IHA7XG4gICAgfVxuXG4gICAgdmFyIG91dCA9IFtdO1xuICAgIHZhciBpO1xuICAgIGlmIChzY2FsYXIgPT0gbnVsbCkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IGRpbXM7IGkrKykge1xuICAgICAgICBvdXRbaV0gPSB0b0Zpbml0ZShwW2ldLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZGltczsgaSsrKSB7XG4gICAgICAgIG91dFtpXSA9IHNjYWxhcjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbGVycEFycmF5IChtaW4sIG1heCwgdCwgb3V0KSB7XG4gIG91dCA9IG91dCB8fCBbXTtcbiAgaWYgKG1pbi5sZW5ndGggIT09IG1heC5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtaW4gYW5kIG1heCBhcnJheSBhcmUgZXhwZWN0ZWQgdG8gaGF2ZSB0aGUgc2FtZSBsZW5ndGgnKTtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IG1pbi5sZW5ndGg7IGkrKykge1xuICAgIG91dFtpXSA9IGxlcnAobWluW2ldLCBtYXhbaV0sIHQpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIG5ld0FycmF5IChuLCBpbml0aWFsVmFsdWUpIHtcbiAgbiA9IGRlZmluZWQobiwgMCk7XG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIG4gYXJndW1lbnQgdG8gYmUgYSBudW1iZXInKTtcbiAgdmFyIG91dCA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgb3V0LnB1c2goaW5pdGlhbFZhbHVlKTtcbiAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gbGluc3BhY2UgKG4sIG9wdHMpIHtcbiAgbiA9IGRlZmluZWQobiwgMCk7XG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIG4gYXJndW1lbnQgdG8gYmUgYSBudW1iZXInKTtcbiAgb3B0cyA9IG9wdHMgfHwge307XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgb3B0cyA9IHsgZW5kcG9pbnQ6IHRydWUgfTtcbiAgfVxuICB2YXIgb2Zmc2V0ID0gZGVmaW5lZChvcHRzLm9mZnNldCwgMCk7XG4gIGlmIChvcHRzLmVuZHBvaW50KSB7XG4gICAgcmV0dXJuIG5ld0FycmF5KG4pLm1hcChmdW5jdGlvbiAoXywgaSkge1xuICAgICAgcmV0dXJuIG4gPD0gMSA/IDAgOiAoKGkgKyBvZmZzZXQpIC8gKG4gLSAxKSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ld0FycmF5KG4pLm1hcChmdW5jdGlvbiAoXywgaSkge1xuICAgICAgcmV0dXJuIChpICsgb2Zmc2V0KSAvIG47XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGVycEZyYW1lcyAodmFsdWVzLCB0LCBvdXQpIHtcbiAgdCA9IGNsYW1wKHQsIDAsIDEpO1xuXG4gIHZhciBsZW4gPSB2YWx1ZXMubGVuZ3RoIC0gMTtcbiAgdmFyIHdob2xlID0gdCAqIGxlbjtcbiAgdmFyIGZyYW1lID0gTWF0aC5mbG9vcih3aG9sZSk7XG4gIHZhciBmcmFjdCA9IHdob2xlIC0gZnJhbWU7XG5cbiAgdmFyIG5leHRGcmFtZSA9IE1hdGgubWluKGZyYW1lICsgMSwgbGVuKTtcbiAgdmFyIGEgPSB2YWx1ZXNbZnJhbWUgJSB2YWx1ZXMubGVuZ3RoXTtcbiAgdmFyIGIgPSB2YWx1ZXNbbmV4dEZyYW1lICUgdmFsdWVzLmxlbmd0aF07XG4gIGlmICh0eXBlb2YgYSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGIgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGxlcnAoYSwgYiwgZnJhY3QpO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYSkgJiYgQXJyYXkuaXNBcnJheShiKSkge1xuICAgIHJldHVybiBsZXJwQXJyYXkoYSwgYiwgZnJhY3QsIG91dCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTWlzbWF0Y2ggaW4gdmFsdWUgdHlwZSBvZiB0d28gYXJyYXkgZWxlbWVudHM6ICcgKyBmcmFtZSArICcgYW5kICcgKyBuZXh0RnJhbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1vZCAoYSwgYikge1xuICByZXR1cm4gKChhICUgYikgKyBiKSAlIGI7XG59XG5cbmZ1bmN0aW9uIGRlZ1RvUmFkIChuKSB7XG4gIHJldHVybiBuICogTWF0aC5QSSAvIDE4MDtcbn1cblxuZnVuY3Rpb24gcmFkVG9EZWcgKG4pIHtcbiAgcmV0dXJuIG4gKiAxODAgLyBNYXRoLlBJO1xufVxuXG5mdW5jdGlvbiBmcmFjdCAobikge1xuICByZXR1cm4gbiAtIE1hdGguZmxvb3Iobik7XG59XG5cbmZ1bmN0aW9uIHNpZ24gKG4pIHtcbiAgaWYgKG4gPiAwKSByZXR1cm4gMTtcbiAgZWxzZSBpZiAobiA8IDApIHJldHVybiAtMTtcbiAgZWxzZSByZXR1cm4gMDtcbn1cblxuLy8gU3BlY2lmaWMgZnVuY3Rpb24gZnJvbSBVbml0eSAvIG9mTWF0aCwgbm90IHN1cmUgaXRzIG5lZWRlZD9cbi8vIGZ1bmN0aW9uIGxlcnBXcmFwIChhLCBiLCB0LCBtaW4sIG1heCkge1xuLy8gICByZXR1cm4gd3JhcChhICsgd3JhcChiIC0gYSwgbWluLCBtYXgpICogdCwgbWluLCBtYXgpXG4vLyB9XG5cbmZ1bmN0aW9uIHBpbmdQb25nICh0LCBsZW5ndGgpIHtcbiAgdCA9IG1vZCh0LCBsZW5ndGggKiAyKTtcbiAgcmV0dXJuIGxlbmd0aCAtIE1hdGguYWJzKHQgLSBsZW5ndGgpO1xufVxuXG5mdW5jdGlvbiBkYW1wIChhLCBiLCBsYW1iZGEsIGR0KSB7XG4gIHJldHVybiBsZXJwKGEsIGIsIDEgLSBNYXRoLmV4cCgtbGFtYmRhICogZHQpKTtcbn1cblxuZnVuY3Rpb24gZGFtcEFycmF5IChhLCBiLCBsYW1iZGEsIGR0LCBvdXQpIHtcbiAgb3V0ID0gb3V0IHx8IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICBvdXRbaV0gPSBkYW1wKGFbaV0sIGJbaV0sIGxhbWJkYSwgZHQpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIG1hcFJhbmdlICh2YWx1ZSwgaW5wdXRNaW4sIGlucHV0TWF4LCBvdXRwdXRNaW4sIG91dHB1dE1heCwgY2xhbXApIHtcbiAgLy8gUmVmZXJlbmNlOlxuICAvLyBodHRwczovL29wZW5mcmFtZXdvcmtzLmNjL2RvY3VtZW50YXRpb24vbWF0aC9vZk1hdGgvXG4gIGlmIChNYXRoLmFicyhpbnB1dE1pbiAtIGlucHV0TWF4KSA8IEVQU0lMT04pIHtcbiAgICByZXR1cm4gb3V0cHV0TWluO1xuICB9IGVsc2Uge1xuICAgIHZhciBvdXRWYWwgPSAoKHZhbHVlIC0gaW5wdXRNaW4pIC8gKGlucHV0TWF4IC0gaW5wdXRNaW4pICogKG91dHB1dE1heCAtIG91dHB1dE1pbikgKyBvdXRwdXRNaW4pO1xuICAgIGlmIChjbGFtcCkge1xuICAgICAgaWYgKG91dHB1dE1heCA8IG91dHB1dE1pbikge1xuICAgICAgICBpZiAob3V0VmFsIDwgb3V0cHV0TWF4KSBvdXRWYWwgPSBvdXRwdXRNYXg7XG4gICAgICAgIGVsc2UgaWYgKG91dFZhbCA+IG91dHB1dE1pbikgb3V0VmFsID0gb3V0cHV0TWluO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG91dFZhbCA+IG91dHB1dE1heCkgb3V0VmFsID0gb3V0cHV0TWF4O1xuICAgICAgICBlbHNlIGlmIChvdXRWYWwgPCBvdXRwdXRNaW4pIG91dFZhbCA9IG91dHB1dE1pbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dFZhbDtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbW9kOiBtb2QsXG4gIGZyYWN0OiBmcmFjdCxcbiAgc2lnbjogc2lnbixcbiAgZGVnVG9SYWQ6IGRlZ1RvUmFkLFxuICByYWRUb0RlZzogcmFkVG9EZWcsXG4gIHdyYXA6IHdyYXAsXG4gIHBpbmdQb25nOiBwaW5nUG9uZyxcbiAgbGluc3BhY2U6IGxpbnNwYWNlLFxuICBsZXJwOiBsZXJwLFxuICBsZXJwQXJyYXk6IGxlcnBBcnJheSxcbiAgaW52ZXJzZUxlcnA6IGludmVyc2VMZXJwLFxuICBsZXJwRnJhbWVzOiBsZXJwRnJhbWVzLFxuICBjbGFtcDogY2xhbXAsXG4gIGNsYW1wMDE6IGNsYW1wMDEsXG4gIHNtb290aHN0ZXA6IHNtb290aHN0ZXAsXG4gIGRhbXA6IGRhbXAsXG4gIGRhbXBBcnJheTogZGFtcEFycmF5LFxuICBtYXBSYW5nZTogbWFwUmFuZ2UsXG4gIGV4cGFuZDJEOiBleHBhbmRWZWN0b3IoMiksXG4gIGV4cGFuZDNEOiBleHBhbmRWZWN0b3IoMyksXG4gIGV4cGFuZDREOiBleHBhbmRWZWN0b3IoNClcbn07XG4iLCJ2YXIgZGVmaW5lZCA9IHJlcXVpcmUoJ2RlZmluZWQnKTtcbnZhciBjb252ZXJ0ID0gcmVxdWlyZSgnY29udmVydC1sZW5ndGgnKTtcbnZhciBkMyA9IHJlcXVpcmUoJ2QzLXBhdGgnKTtcbnZhciBzdmdQYXRoQ29udG91cnMgPSByZXF1aXJlKCdzdmctcGF0aC1jb250b3VycycpO1xudmFyIHN2Z1BhdGhQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlLXN2Zy1wYXRoJyk7XG52YXIgc3ZnUGF0aEFicyA9IHJlcXVpcmUoJ2Ficy1zdmctcGF0aCcpO1xudmFyIHN2Z1BhdGhBcmNzID0gcmVxdWlyZSgnbm9ybWFsaXplLXN2Zy1wYXRoJyk7XG52YXIgb3B0aW1pemVyID0gcmVxdWlyZSgnLi9saWIvb3B0aW1pemUtcGVucGxvdC1wYXRocycpO1xudmFyIGdlb21ldHJ5ID0gcmVxdWlyZSgnLi9nZW9tZXRyeScpO1xuXG52YXIgREVGQVVMVF9QRU5fVEhJQ0tORVNTID0gMC4wMztcbnZhciBERUZBVUxUX1BFTl9USElDS05FU1NfVU5JVCA9ICdjbSc7XG52YXIgREVGQVVMVF9QSVhFTFNfUEVSX0lOQ0ggPSA5MDtcblxuLy8gQSBQYXRoIGhlbHBlciBmb3IgYXJjcywgY3VydmVzIGFuZCBsaW5lVG8gY29tbWFuZHNcbm1vZHVsZS5leHBvcnRzLmNyZWF0ZVBhdGggPSBjcmVhdGVQYXRoO1xuZnVuY3Rpb24gY3JlYXRlUGF0aCAoZm4pIHtcbiAgdmFyIHBhdGggPSBkMy5wYXRoKCk7XG4gIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIGZuKHBhdGgpO1xuICBwYXRoLmxpbmVUbyA9IHdyYXAocGF0aC5saW5lVG8pO1xuICBwYXRoLnF1YWRyYXRpY0N1cnZlVG8gPSB3cmFwKHBhdGgucXVhZHJhdGljQ3VydmVUbyk7XG4gIHBhdGguYmV6aWVyQ3VydmVUbyA9IHdyYXAocGF0aC5iZXppZXJDdXJ2ZVRvKTtcbiAgcmV0dXJuIHBhdGg7XG5cbiAgLy8gUGF0Y2ggYSBidWcgaW4gZDMtcGF0aCB0aGF0IGRvZXNuJ3QgaGFuZGxlXG4gIC8vIGxpbmVUbyBhbmQgc28gb24gd2l0aG91dCBhbiBpbml0aWFsIG1vdmVUb1xuICBmdW5jdGlvbiB3cmFwIChmbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICBpZiAocGF0aC5feDEgPT0gbnVsbCAmJiBwYXRoLl95MSA9PSBudWxsKSB7XG4gICAgICAgIHBhdGgubW92ZVRvKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZuLmFwcGx5KHBhdGgsIGFyZ3MpO1xuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMucGF0aHNUb1NWR1BhdGhzID0gcGF0aHNUb1NWR1BhdGhzO1xuZnVuY3Rpb24gcGF0aHNUb1NWR1BhdGhzIChpbnB1dHMsIG9wdCkge1xuICBvcHQgPSBvcHQgfHwge307XG5cbiAgdmFyIHN2Z1BhdGggPSBjb252ZXJ0VG9TVkdQYXRoKGlucHV0cywgb3B0KTtcbiAgdmFyIHN2Z1BhdGhzID0gQXJyYXkuaXNBcnJheShzdmdQYXRoKSA/IHN2Z1BhdGggOiBbIHN2Z1BhdGggXTtcbiAgcmV0dXJuIHN2Z1BhdGhzLmZpbHRlcihCb29sZWFuKTtcbn1cblxubW9kdWxlLmV4cG9ydHMucGF0aHNUb1BvbHlsaW5lcyA9IHBhdGhzVG9Qb2x5bGluZXM7XG5mdW5jdGlvbiBwYXRoc1RvUG9seWxpbmVzIChpbnB1dHMsIG9wdCkge1xuICBvcHQgPSBvcHQgfHwge307XG5cbiAgdmFyIHNjYWxlO1xuICBpZiAob3B0LmN1cnZlUmVzb2x1dGlvbiAhPSBudWxsICYmIGlzRmluaXRlKG9wdC5jdXJ2ZVJlc29sdXRpb24pICYmIHR5cGVvZiBvcHQuY3VydmVSZXNvbHV0aW9uID09PSAnbnVtYmVyJykge1xuICAgIHNjYWxlID0gb3B0LmN1cnZlUmVzb2x1dGlvbjtcbiAgfSBlbHNlIHtcbiAgICB2YXIgdW5pdHMgPSBvcHQudW5pdHMgfHwgJ3B4JztcbiAgICBzY2FsZSA9IE1hdGgubWF4KDEsIGNvbnZlcnQoNCwgdW5pdHMsICdweCcpKTtcbiAgfVxuXG4gIHZhciBjb250b3VycyA9IFtdO1xuICBlYWNoUGF0aChpbnB1dHMsIGZ1bmN0aW9uIChmZWF0dXJlKSB7XG4gICAgaWYgKHR5cGVvZiBmZWF0dXJlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFyIGNvbW1hbmRzID0gc3ZnUGF0aFBhcnNlKGZlYXR1cmUpO1xuICAgICAgdmFyIHN1YkNvbnRvdXJzID0gc3ZnUGF0aENvbnRvdXJzKGNvbW1hbmRzLCBzY2FsZSk7XG4gICAgICBzdWJDb250b3Vycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJDb250b3VyKSB7XG4gICAgICAgIGNvbnRvdXJzLnB1c2goc3ViQ29udG91cik7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gb3V0cHV0IG9ubHkgMkQgcG9seWxpbmVzXG4gICAgICB2YXIgcG9seWxpbmUgPSBmZWF0dXJlLm1hcChmdW5jdGlvbiAocG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIFsgcG9pbnRbMF0gfHwgMCwgcG9pbnRbMV0gfHwgMCBdO1xuICAgICAgfSk7XG4gICAgICBjb250b3Vycy5wdXNoKHBvbHlsaW5lKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY29udG91cnM7XG59XG5cbm1vZHVsZS5leHBvcnRzLnBhdGhzVG9TVkcgPSBwYXRoc1RvU1ZHO1xuZnVuY3Rpb24gcGF0aHNUb1NWRyAoaW5wdXRzLCBvcHQpIHtcbiAgb3B0ID0gb3B0IHx8IHt9O1xuXG4gIHZhciB3aWR0aCA9IG9wdC53aWR0aDtcbiAgdmFyIGhlaWdodCA9IG9wdC5oZWlnaHQ7XG5cbiAgdmFyIGNvbXB1dGVCb3VuZHMgPSB0eXBlb2Ygd2lkdGggPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBoZWlnaHQgPT09ICd1bmRlZmluZWQnO1xuICBpZiAoY29tcHV0ZUJvdW5kcykge1xuICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBzcGVjaWZ5IFwid2lkdGhcIiBhbmQgXCJoZWlnaHRcIiBvcHRpb25zJyk7XG4gIH1cblxuICB2YXIgdmlld1VuaXRzID0gJ3B4JztcbiAgdmFyIHVuaXRzID0gb3B0LnVuaXRzIHx8IHZpZXdVbml0cztcblxuICB2YXIgY29udmVydE9wdGlvbnMgPSB7XG4gICAgdW5pdHM6IHVuaXRzLFxuICAgIHZpZXdVbml0czogJ3B4JyxcbiAgICByb3VuZFBpeGVsOiBmYWxzZSxcbiAgICBwcmVjaXNpb246IGRlZmluZWQob3B0LnByZWNpc2lvbiwgNSksXG4gICAgcGl4ZWxzUGVySW5jaDogREVGQVVMVF9QSVhFTFNfUEVSX0lOQ0hcbiAgfTtcblxuICAvLyBDb252ZXJ0IGFsbCBTVkdQYXRocy9wYXRocy9ldGMgdG8gcG9seWxpbmVzXG4gIC8vIFRoaXMgd29uJ3QgY2hhbmdlIHRoZWlyIHVuaXRzIHNvIHRoZXkgYXJlIHN0aWxsIGluIHVzZXIgc3BhY2VcbiAgaW5wdXRzID0gcGF0aHNUb1BvbHlsaW5lcyhpbnB1dHMsIE9iamVjdC5hc3NpZ24oe30sIGNvbnZlcnRPcHRpb25zLCB7XG4gICAgY3VydmVSZXNvbHV0aW9uOiBvcHQuY3VydmVSZXNvbHV0aW9uIHx8IHVuZGVmaW5lZFxuICB9KSk7XG5cbiAgLy8gVE9ETzogYWxsb3cgZm9yICdyZXBlYXQnIG9wdGlvblxuICBpZiAob3B0Lm9wdGltaXplKSB7XG4gICAgdmFyIG9wdGltaXplT3B0cyA9IHR5cGVvZiBvcHQub3B0aW1pemUgPT09ICdvYmplY3QnID8gb3B0Lm9wdGltaXplIDoge1xuICAgICAgc29ydDogdHJ1ZSxcbiAgICAgIG1lcmdlOiB0cnVlLFxuICAgICAgcmVtb3ZlRHVwbGljYXRlczogdHJ1ZSxcbiAgICAgIHJlbW92ZUNvbGxpbmVhcjogdHJ1ZVxuICAgIH07XG4gICAgdmFyIHNob3VsZFNvcnQgPSBvcHRpbWl6ZU9wdHMuc29ydCAhPT0gZmFsc2U7XG4gICAgdmFyIHNob3VsZE1lcmdlID0gb3B0aW1pemVPcHRzLm1lcmdlICE9PSBmYWxzZTtcbiAgICB2YXIgc2hvdWxkUmVtb3ZlRHVwbGljYXRlID0gb3B0aW1pemVPcHRzLnJlbW92ZUR1cGxpY2F0ZXMgIT09IGZhbHNlO1xuICAgIHZhciBzaG91bGRSZW1vdmVDb2xsaW5lYXIgPSBvcHRpbWl6ZU9wdHMucmVtb3ZlQ29sbGluZWFyICE9PSBmYWxzZTtcbiAgICBpZiAoc2hvdWxkUmVtb3ZlRHVwbGljYXRlKSB7XG4gICAgICBpbnB1dHMgPSBpbnB1dHMubWFwKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIHJldHVybiBnZW9tZXRyeS5yZW1vdmVEdXBsaWNhdGVQb2ludHMobGluZSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHNob3VsZFJlbW92ZUNvbGxpbmVhcikge1xuICAgICAgaW5wdXRzID0gaW5wdXRzLm1hcChmdW5jdGlvbiAobGluZSkge1xuICAgICAgICByZXR1cm4gZ2VvbWV0cnkucmVtb3ZlQ29sbGluZWFyUG9pbnRzKGxpbmUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIG5vdyBkbyBzb3J0aW5nICYgbWVyZ2luZ1xuICAgIGlmIChzaG91bGRTb3J0KSBpbnB1dHMgPSBvcHRpbWl6ZXIuc29ydChpbnB1dHMpO1xuICAgIGlmIChzaG91bGRNZXJnZSkge1xuICAgICAgdmFyIG1lcmdlVGhyZXNob2xkID0gb3B0aW1pemVPcHRzLm1lcmdlVGhyZXNob2xkICE9IG51bGxcbiAgICAgICAgPyBvcHRpbWl6ZU9wdHMubWVyZ2VUaHJlc2hvbGRcbiAgICAgICAgOiBjb252ZXJ0KDAuMjUsICdtbScsIHVuaXRzLCB7XG4gICAgICAgICAgcGl4ZWxzUGVySW5jaDogREVGQVVMVF9QSVhFTFNfUEVSX0lOQ0hcbiAgICAgICAgfSk7XG4gICAgICBpbnB1dHMgPSBvcHRpbWl6ZXIubWVyZ2UoaW5wdXRzLCBtZXJnZVRocmVzaG9sZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gbm93IHdlIGNvbnZlcnQgYWxsIHBvbHlsaW5lcyBpbiB1c2VyIHNwYWNlIHVuaXRzIGludG8gdmlldyB1bml0c1xuICB2YXIgc3ZnUGF0aHMgPSBwYXRoc1RvU1ZHUGF0aHMoaW5wdXRzLCBjb252ZXJ0T3B0aW9ucyk7XG5cbiAgdmFyIHZpZXdXaWR0aCA9IGNvbnZlcnQod2lkdGgsIHVuaXRzLCB2aWV3VW5pdHMsIGNvbnZlcnRPcHRpb25zKS50b1N0cmluZygpO1xuICB2YXIgdmlld0hlaWdodCA9IGNvbnZlcnQoaGVpZ2h0LCB1bml0cywgdmlld1VuaXRzLCBjb252ZXJ0T3B0aW9ucykudG9TdHJpbmcoKTtcbiAgdmFyIGZpbGxTdHlsZSA9IG9wdC5maWxsU3R5bGUgfHwgJ25vbmUnO1xuICB2YXIgc3Ryb2tlU3R5bGUgPSBvcHQuc3Ryb2tlU3R5bGUgfHwgJ2JsYWNrJztcbiAgdmFyIGxpbmVXaWR0aCA9IG9wdC5saW5lV2lkdGg7XG4gIHZhciBsaW5lSm9pbiA9IG9wdC5saW5lSm9pbjtcbiAgdmFyIGxpbmVDYXAgPSBvcHQubGluZUNhcDtcblxuICAvLyBDaG9vc2UgYSBkZWZhdWx0IGxpbmUgd2lkdGggYmFzZWQgb24gYSByZWxhdGl2ZWx5IGZpbmUtdGlwIHBlblxuICBpZiAodHlwZW9mIGxpbmVXaWR0aCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBDb252ZXJ0IHRvIHVzZXIgdW5pdHNcbiAgICBsaW5lV2lkdGggPSBjb252ZXJ0KERFRkFVTFRfUEVOX1RISUNLTkVTUywgREVGQVVMVF9QRU5fVEhJQ0tORVNTX1VOSVQsIHVuaXRzLCBjb252ZXJ0T3B0aW9ucykudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHZhciBwYXRoRWxlbWVudHMgPSBzdmdQYXRocy5tYXAoZnVuY3Rpb24gKGQpIHtcbiAgICB2YXIgYXR0cnMgPSB0b0F0dHJMaXN0KFtcbiAgICAgIFsgJ2QnLCBkIF1cbiAgICBdKTtcbiAgICByZXR1cm4gJyAgICA8cGF0aCAnICsgYXR0cnMgKyAnIC8+JztcbiAgfSkuam9pbignXFxuJyk7XG5cbiAgdmFyIGdyb3VwQXR0cnMgPSB0b0F0dHJMaXN0KFtcbiAgICBbICdmaWxsJywgZmlsbFN0eWxlIF0sXG4gICAgWyAnc3Ryb2tlJywgc3Ryb2tlU3R5bGUgXSxcbiAgICBbICdzdHJva2Utd2lkdGgnLCBsaW5lV2lkdGggKyAnJyArIHVuaXRzIF0sXG4gICAgbGluZUpvaW4gPyBbICdzdHJva2UtbGluZWpvaW4nLCBsaW5lSm9pbiBdIDogZmFsc2UsXG4gICAgbGluZUNhcCA/IFsgJ3N0cm9rZS1saW5lY2FwJywgbGluZUNhcCBdIDogZmFsc2VcbiAgXSk7XG5cbiAgcmV0dXJuIFtcbiAgICAnPD94bWwgdmVyc2lvbj1cIjEuMFwiIHN0YW5kYWxvbmU9XCJub1wiPz4nLFxuICAgICc8IURPQ1RZUEUgc3ZnIFBVQkxJQyBcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXCIgJyxcbiAgICAnICAgIFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXCI+JyxcbiAgICAnPHN2ZyB3aWR0aD1cIicgKyB3aWR0aCArIHVuaXRzICsgJ1wiIGhlaWdodD1cIicgKyBoZWlnaHQgKyB1bml0cyArICdcIicsXG4gICAgJyAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmVyc2lvbj1cIjEuMVwiIHZpZXdCb3g9XCIwIDAgJyArIHZpZXdXaWR0aCArICcgJyArIHZpZXdIZWlnaHQgKyAnXCI+JyxcbiAgICAnICA8ZyAnICsgZ3JvdXBBdHRycyArICc+JyxcbiAgICBwYXRoRWxlbWVudHMsXG4gICAgJyAgPC9nPicsXG4gICAgJzwvc3ZnPidcbiAgXS5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gdG9BdHRyTGlzdCAoYXJncykge1xuICByZXR1cm4gYXJncy5maWx0ZXIoQm9vbGVhbikubWFwKGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgcmV0dXJuIGF0dHJbMF0gKyAnPVwiJyArIGF0dHJbMV0gKyAnXCInO1xuICB9KS5qb2luKCcgJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzLnJlbmRlclBhdGhzID0gcmVuZGVyUGF0aHM7XG5mdW5jdGlvbiByZW5kZXJQYXRocyAoaW5wdXRzLCBvcHQpIHtcbiAgb3B0ID0gb3B0IHx8IHt9O1xuXG4gIHZhciBjb250ZXh0ID0gb3B0LmNvbnRleHQ7XG4gIGlmICghY29udGV4dCkgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHNwZWNpZnkgXCJjb250ZXh0XCIgb3B0aW9ucycpO1xuXG4gIHZhciB1bml0cyA9IG9wdC51bml0cyB8fCAncHgnO1xuXG4gIHZhciB3aWR0aCA9IG9wdC53aWR0aDtcbiAgdmFyIGhlaWdodCA9IG9wdC5oZWlnaHQ7XG4gIGlmICh0eXBlb2Ygd2lkdGggPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBoZWlnaHQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHNwZWNpZnkgXCJ3aWR0aFwiIGFuZCBcImhlaWdodFwiIG9wdGlvbnMnKTtcbiAgfVxuXG4gIC8vIENob29zZSBhIGRlZmF1bHQgbGluZSB3aWR0aCBiYXNlZCBvbiBhIHJlbGF0aXZlbHkgZmluZS10aXAgcGVuXG4gIHZhciBsaW5lV2lkdGggPSBvcHQubGluZVdpZHRoO1xuICBpZiAodHlwZW9mIGxpbmVXaWR0aCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBDb252ZXJ0IHRvIHVzZXIgdW5pdHNcbiAgICBsaW5lV2lkdGggPSBjb252ZXJ0KERFRkFVTFRfUEVOX1RISUNLTkVTUywgREVGQVVMVF9QRU5fVEhJQ0tORVNTX1VOSVQsIHVuaXRzLCB7XG4gICAgICByb3VuZFBpeGVsOiBmYWxzZSxcbiAgICAgIHBpeGVsc1BlckluY2g6IERFRkFVTFRfUElYRUxTX1BFUl9JTkNIXG4gICAgfSk7XG4gIH1cblxuICAvLyBDbGVhciBjYW52YXNcbiAgY29udGV4dC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgLy8gRmlsbCB3aXRoIHdoaXRlXG4gIGNvbnRleHQuZmlsbFN0eWxlID0gb3B0LmJhY2tncm91bmQgfHwgJ3doaXRlJztcbiAgY29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICBjb250ZXh0LnN0cm9rZVN0eWxlID0gb3B0LmZvcmVncm91bmQgfHwgb3B0LnN0cm9rZVN0eWxlIHx8ICdibGFjayc7XG4gIGNvbnRleHQubGluZVdpZHRoID0gbGluZVdpZHRoO1xuICBjb250ZXh0LmxpbmVKb2luID0gb3B0LmxpbmVKb2luIHx8ICdtaXRlcic7XG4gIGNvbnRleHQubGluZUNhcCA9IG9wdC5saW5lQ2FwIHx8ICdidXR0JztcblxuICAvLyBEcmF3IGxpbmVzXG4gIGVhY2hQYXRoKGlucHV0cywgZnVuY3Rpb24gKGZlYXR1cmUpIHtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgaWYgKHR5cGVvZiBmZWF0dXJlID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gU1ZHIHN0cmluZyA9IGRyYXdTVkdQYXRoO1xuICAgICAgZHJhd1NWR1BhdGgoY29udGV4dCwgZmVhdHVyZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGxpc3Qgb2YgcG9pbnRzXG4gICAgICBmZWF0dXJlLmZvckVhY2goZnVuY3Rpb24gKHApIHtcbiAgICAgICAgY29udGV4dC5saW5lVG8ocFswXSwgcFsxXSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb250ZXh0LnN0cm9rZSgpO1xuICB9KTtcblxuICAvLyBTYXZlIGxheWVyc1xuICByZXR1cm4gW1xuICAgIC8vIEV4cG9ydCBQTkcgYXMgZmlyc3QgbGF5ZXJcbiAgICBjb250ZXh0LmNhbnZhcyxcbiAgICAvLyBFeHBvcnQgU1ZHIGZvciBwZW4gcGxvdHRlciBhcyBzZWNvbmQgbGF5ZXJcbiAgICB7XG4gICAgICBkYXRhOiBwYXRoc1RvU1ZHKGlucHV0cywgb3B0KSxcbiAgICAgIGV4dGVuc2lvbjogJy5zdmcnXG4gICAgfVxuICBdO1xufVxuXG4vLyBOb3QgZG9jdW1lbnRlZC4uLlxubW9kdWxlLmV4cG9ydHMuY29udmVydFRvU1ZHUGF0aCA9IGNvbnZlcnRUb1NWR1BhdGg7XG5mdW5jdGlvbiBjb252ZXJ0VG9TVkdQYXRoIChpbnB1dCwgb3B0KSB7XG4gIC8vIElucHV0IGNhbiBiZSBhIHNpbmdsZSAncGF0aCcgKHN0cmluZywgb2JqZWN0IG9yIHBvbHlsaW5lKSxcbiAgLy8gb3IgbmVzdGVkICdwYXRoJyBlbGVtZW50c1xuXG4gIC8vIG5vbi1wYXRoXG4gIGlmIChpc0VtcHR5KGlucHV0KSkgcmV0dXJuICcnO1xuXG4gIC8vIHN0cmluZ3MgYXJlIGp1c3QgcmV0dXJuZWQgYXMtaXNcbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHJldHVybiBpbnB1dDtcblxuICAvLyBhc3N1bWUgYSBwYXRoIGluc3RhbmNlXG4gIGlmIChpc1BhdGgoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGlucHV0LnRvU3RyaW5nKCk7XG4gIH1cblxuICBpZiAoaXNQb2x5bGluZShpbnB1dCkpIHtcbiAgICByZXR1cm4gcG9seWxpbmVUb1NWR1BhdGgoaW5wdXQsIG9wdCk7XG4gIH1cblxuICAvLyBhc3N1bWUgYSBsaXN0IG9mICdwYXRoJyBmZWF0dXJlcyBvciBhIGxpc3Qgb2YgcG9seWxpbmVzXG4gIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgIHJldHVybiBpbnB1dC5tYXAoZnVuY3Rpb24gKGZlYXR1cmUpIHtcbiAgICAgIHJldHVybiBjb252ZXJ0VG9TVkdQYXRoKGZlYXR1cmUsIG9wdCk7XG4gICAgfSkucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYS5jb25jYXQoYik7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgLy8gV2Fzbid0IGNsZWFyLi4uIGxldCdzIHJldHVybiBhbiBlbXB0eSBwYXRoXG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMuZWFjaFBhdGggPSBlYWNoUGF0aDtcbmZ1bmN0aW9uIGVhY2hQYXRoIChpbnB1dCwgY2IpIHtcbiAgaWYgKGlzRW1wdHkoaW5wdXQpKSB7XG4gICAgLy8gcGFzcy10aHJvdWdoXG4gIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyB8fCAoaXNQYXRoKGlucHV0KSkpIHtcbiAgICBjYihpbnB1dC50b1N0cmluZygpKTtcbiAgfSBlbHNlIGlmIChpc1BvbHlsaW5lKGlucHV0KSkge1xuICAgIGNiKGlucHV0KTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgIGlucHV0LmZvckVhY2goZnVuY3Rpb24gKGZlYXR1cmUpIHtcbiAgICAgIHJldHVybiBlYWNoUGF0aChmZWF0dXJlLCBjYik7XG4gICAgfSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMuZHJhd1NWR1BhdGggPSBkcmF3U1ZHUGF0aDtcbmZ1bmN0aW9uIGRyYXdTVkdQYXRoIChjb250ZXh0LCBzdmdQYXRoKSB7XG4gIHZhciBjb21tYW5kcyA9IHN2Z1BhdGhBcmNzKHN2Z1BhdGhBYnMoc3ZnUGF0aFBhcnNlKHN2Z1BhdGgpKSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY29tbWFuZHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYyA9IGNvbW1hbmRzW2ldO1xuICAgIHZhciB0eXBlID0gY1swXTtcbiAgICBpZiAodHlwZSA9PT0gJ00nKSB7XG4gICAgICBjb250ZXh0Lm1vdmVUbyhjWzFdLCBjWzJdKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdDJykge1xuICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKGNbMV0sIGNbMl0sIGNbM10sIGNbNF0sIGNbNV0sIGNbNl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgdHlwZSBcIicgKyB0eXBlICsgJ1wiIGluIFNWRyBjb21tYW5kcycpO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cy5wb2x5bGluZVRvU1ZHUGF0aCA9IHBvbHlsaW5lVG9TVkdQYXRoO1xuZnVuY3Rpb24gcG9seWxpbmVUb1NWR1BhdGggKHBvbHlsaW5lLCBvcHQpIHtcbiAgb3B0ID0gb3B0IHx8IHt9O1xuICB2YXIgdW5pdHMgPSBvcHQudW5pdHMgfHwgJ3B4JztcbiAgdmFyIHZpZXdVbml0cyA9IG9wdC52aWV3VW5pdHMgfHwgdW5pdHM7XG4gIHZhciBjb21tYW5kcyA9IFtdO1xuICB2YXIgY29udmVydE9wdGlvbnMgPSB7XG4gICAgcm91bmRQaXhlbDogZmFsc2UsXG4gICAgcHJlY2lzaW9uOiBkZWZpbmVkKG9wdC5wcmVjaXNpb24sIDUpLFxuICAgIHBpeGVsc1BlckluY2g6IERFRkFVTFRfUElYRUxTX1BFUl9JTkNIXG4gIH07XG4gIHBvbHlsaW5lLmZvckVhY2goZnVuY3Rpb24gKHBvaW50LCBqKSB7XG4gICAgdmFyIHR5cGUgPSAoaiA9PT0gMCkgPyAnTScgOiAnTCc7XG4gICAgdmFyIHggPSBjb252ZXJ0KHBvaW50WzBdLCB1bml0cywgdmlld1VuaXRzLCBjb252ZXJ0T3B0aW9ucykudG9TdHJpbmcoKTtcbiAgICB2YXIgeSA9IGNvbnZlcnQocG9pbnRbMV0sIHVuaXRzLCB2aWV3VW5pdHMsIGNvbnZlcnRPcHRpb25zKS50b1N0cmluZygpO1xuICAgIGNvbW1hbmRzLnB1c2godHlwZSArIHggKyAnICcgKyB5KTtcbiAgfSk7XG4gIHJldHVybiBjb21tYW5kcy5qb2luKCcgJyk7XG59XG5cbmZ1bmN0aW9uIGlzRW1wdHkgKGlucHV0KSB7XG4gIHJldHVybiAhaW5wdXQgfHwgKEFycmF5LmlzQXJyYXkoaW5wdXQpICYmIGlucHV0Lmxlbmd0aCA9PT0gMCk7XG59XG5cbmZ1bmN0aW9uIGlzUGF0aCAoaW5wdXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgaW5wdXQgJiYgIUFycmF5LmlzQXJyYXkoaW5wdXQpO1xufVxuXG5mdW5jdGlvbiBpc1BvbHlsaW5lIChpbnB1dCkge1xuICAvLyBlbXB0eSBhcnJheSBvciBub3QgYW4gYXJyYXlcbiAgaWYgKCFpbnB1dCB8fCAhQXJyYXkuaXNBcnJheShpbnB1dCkgfHwgaW5wdXQubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gIC8vIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgaW5wdXRzIGlzIGEgcG9pbnQsIGFzc3VtZSB0aGV5IGFsbCBhcmVcbiAgcmV0dXJuIGlzUG9pbnQoaW5wdXRbMF0pO1xufVxuXG5mdW5jdGlvbiBpc1BvaW50IChwb2ludCkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShwb2ludCkgJiYgcG9pbnQubGVuZ3RoID49IDIgJiYgcG9pbnQuZXZlcnkoZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gdHlwZW9mIHAgPT09ICdudW1iZXInO1xuICB9KTtcbn1cblxuLy8gQGRlcHJlY2F0ZWRcbm1vZHVsZS5leHBvcnRzLnBvbHlsaW5lc1RvU1ZHID0gZnVuY3Rpb24gcG9seWxpbmVzVG9TVkcgKHBvbHlsaW5lcywgb3B0KSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShwb2x5bGluZXMpKSB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGFycmF5IG9mIGFycmF5cyBmb3IgcG9seWxpbmVzJyk7XG4gIGNvbnNvbGUud2FybigncG9seWxpbmVzVG9TVkcgaXMgZGVwcmVjYXRlZCwgdXNlIHBhdGhzVG9TVkcgaW5zdGVhZCB3aGljaCBoYXMgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eScpO1xuICAvLyBDcmVhdGUgYSBzaW5nbGUgc3RyaW5nIGZyb20gcG9seWxpbmVzXG4gIHJldHVybiBwYXRoc1RvU1ZHKHBvbHlsaW5lcywgb3B0KTtcbn07XG5cbi8vIEBkZXByZWNhdGVkXG5tb2R1bGUuZXhwb3J0cy5yZW5kZXJQb2x5bGluZXMgPSBmdW5jdGlvbiByZW5kZXJQb2x5bGluZXMgKHBvbHlsaW5lcywgb3B0KSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShwb2x5bGluZXMpKSB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGFycmF5IG9mIGFycmF5cyBmb3IgcG9seWxpbmVzJyk7XG4gIGNvbnNvbGUud2FybigncmVuZGVyUG9seWxpbmVzIGlzIGRlcHJlY2F0ZWQsIHVzZSByZW5kZXJQYXRocyBpbnN0ZWFkIHdoaWNoIGhhcyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5Jyk7XG4gIC8vIENyZWF0ZSBhIHNpbmdsZSBzdHJpbmcgZnJvbSBwb2x5bGluZXNcbiAgcmV0dXJuIHJlbmRlclBhdGhzKHBvbHlsaW5lcywgb3B0KTtcbn07XG4iLCJ2YXIgc2VlZFJhbmRvbSA9IHJlcXVpcmUoJ3NlZWQtcmFuZG9tJyk7XG52YXIgU2ltcGxleE5vaXNlID0gcmVxdWlyZSgnc2ltcGxleC1ub2lzZScpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCdkZWZpbmVkJyk7XG5cbmZ1bmN0aW9uIGNyZWF0ZVJhbmRvbSAoZGVmYXVsdFNlZWQpIHtcbiAgZGVmYXVsdFNlZWQgPSBkZWZpbmVkKGRlZmF1bHRTZWVkLCBudWxsKTtcbiAgdmFyIGRlZmF1bHRSYW5kb20gPSBNYXRoLnJhbmRvbTtcbiAgdmFyIGN1cnJlbnRTZWVkO1xuICB2YXIgY3VycmVudFJhbmRvbTtcbiAgdmFyIG5vaXNlR2VuZXJhdG9yO1xuICB2YXIgX25leHRHYXVzc2lhbiA9IG51bGw7XG4gIHZhciBfaGFzTmV4dEdhdXNzaWFuID0gZmFsc2U7XG5cbiAgc2V0U2VlZChkZWZhdWx0U2VlZCk7XG5cbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgY3JlYXRlUmFuZG9tOiBmdW5jdGlvbiAoZGVmYXVsdFNlZWQpIHtcbiAgICAgIHJldHVybiBjcmVhdGVSYW5kb20oZGVmYXVsdFNlZWQpO1xuICAgIH0sXG4gICAgc2V0U2VlZDogc2V0U2VlZCxcbiAgICBnZXRTZWVkOiBnZXRTZWVkLFxuICAgIGdldFJhbmRvbVNlZWQ6IGdldFJhbmRvbVNlZWQsXG4gICAgdmFsdWVOb25aZXJvOiB2YWx1ZU5vblplcm8sXG4gICAgcGVybXV0ZU5vaXNlOiBwZXJtdXRlTm9pc2UsXG4gICAgbm9pc2UxRDogbm9pc2UxRCxcbiAgICBub2lzZTJEOiBub2lzZTJELFxuICAgIG5vaXNlM0Q6IG5vaXNlM0QsXG4gICAgbm9pc2U0RDogbm9pc2U0RCxcbiAgICBzaWduOiBzaWduLFxuICAgIGJvb2xlYW46IGJvb2xlYW4sXG4gICAgY2hhbmNlOiBjaGFuY2UsXG4gICAgcmFuZ2U6IHJhbmdlLFxuICAgIHJhbmdlRmxvb3I6IHJhbmdlRmxvb3IsXG4gICAgcGljazogcGljayxcbiAgICBzaHVmZmxlOiBzaHVmZmxlLFxuICAgIG9uQ2lyY2xlOiBvbkNpcmNsZSxcbiAgICBpbnNpZGVDaXJjbGU6IGluc2lkZUNpcmNsZSxcbiAgICBvblNwaGVyZTogb25TcGhlcmUsXG4gICAgaW5zaWRlU3BoZXJlOiBpbnNpZGVTcGhlcmUsXG4gICAgcXVhdGVybmlvbjogcXVhdGVybmlvbixcbiAgICB3ZWlnaHRlZDogd2VpZ2h0ZWQsXG4gICAgd2VpZ2h0ZWRTZXQ6IHdlaWdodGVkU2V0LFxuICAgIHdlaWdodGVkU2V0SW5kZXg6IHdlaWdodGVkU2V0SW5kZXgsXG4gICAgZ2F1c3NpYW46IGdhdXNzaWFuXG4gIH07XG5cbiAgZnVuY3Rpb24gc2V0U2VlZCAoc2VlZCwgb3B0KSB7XG4gICAgaWYgKHR5cGVvZiBzZWVkID09PSAnbnVtYmVyJyB8fCB0eXBlb2Ygc2VlZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGN1cnJlbnRTZWVkID0gc2VlZDtcbiAgICAgIGN1cnJlbnRSYW5kb20gPSBzZWVkUmFuZG9tKGN1cnJlbnRTZWVkLCBvcHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50U2VlZCA9IHVuZGVmaW5lZDtcbiAgICAgIGN1cnJlbnRSYW5kb20gPSBkZWZhdWx0UmFuZG9tO1xuICAgIH1cbiAgICBub2lzZUdlbmVyYXRvciA9IGNyZWF0ZU5vaXNlKCk7XG4gICAgX25leHRHYXVzc2lhbiA9IG51bGw7XG4gICAgX2hhc05leHRHYXVzc2lhbiA9IGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gdmFsdWUgKCkge1xuICAgIHJldHVybiBjdXJyZW50UmFuZG9tKCk7XG4gIH1cblxuICBmdW5jdGlvbiB2YWx1ZU5vblplcm8gKCkge1xuICAgIHZhciB1ID0gMDtcbiAgICB3aGlsZSAodSA9PT0gMCkgdSA9IHZhbHVlKCk7XG4gICAgcmV0dXJuIHU7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTZWVkICgpIHtcbiAgICByZXR1cm4gY3VycmVudFNlZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRSYW5kb21TZWVkICgpIHtcbiAgICB2YXIgc2VlZCA9IFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwKSk7XG4gICAgcmV0dXJuIHNlZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVOb2lzZSAoKSB7XG4gICAgcmV0dXJuIG5ldyBTaW1wbGV4Tm9pc2UoY3VycmVudFJhbmRvbSk7XG4gIH1cblxuICBmdW5jdGlvbiBwZXJtdXRlTm9pc2UgKCkge1xuICAgIG5vaXNlR2VuZXJhdG9yID0gY3JlYXRlTm9pc2UoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vaXNlMUQgKHgsIGZyZXF1ZW5jeSwgYW1wbGl0dWRlKSB7XG4gICAgaWYgKCFpc0Zpbml0ZSh4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneCBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBmcmVxdWVuY3kgPSBkZWZpbmVkKGZyZXF1ZW5jeSwgMSk7XG4gICAgYW1wbGl0dWRlID0gZGVmaW5lZChhbXBsaXR1ZGUsIDEpO1xuICAgIHJldHVybiBhbXBsaXR1ZGUgKiBub2lzZUdlbmVyYXRvci5ub2lzZTJEKHggKiBmcmVxdWVuY3ksIDApO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9pc2UyRCAoeCwgeSwgZnJlcXVlbmN5LCBhbXBsaXR1ZGUpIHtcbiAgICBpZiAoIWlzRmluaXRlKHgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd4IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUoeSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3kgY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgZnJlcXVlbmN5ID0gZGVmaW5lZChmcmVxdWVuY3ksIDEpO1xuICAgIGFtcGxpdHVkZSA9IGRlZmluZWQoYW1wbGl0dWRlLCAxKTtcbiAgICByZXR1cm4gYW1wbGl0dWRlICogbm9pc2VHZW5lcmF0b3Iubm9pc2UyRCh4ICogZnJlcXVlbmN5LCB5ICogZnJlcXVlbmN5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vaXNlM0QgKHgsIHksIHosIGZyZXF1ZW5jeSwgYW1wbGl0dWRlKSB7XG4gICAgaWYgKCFpc0Zpbml0ZSh4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneCBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBpZiAoIWlzRmluaXRlKHkpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd5IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUoeikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ogY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgZnJlcXVlbmN5ID0gZGVmaW5lZChmcmVxdWVuY3ksIDEpO1xuICAgIGFtcGxpdHVkZSA9IGRlZmluZWQoYW1wbGl0dWRlLCAxKTtcbiAgICByZXR1cm4gYW1wbGl0dWRlICogbm9pc2VHZW5lcmF0b3Iubm9pc2UzRChcbiAgICAgIHggKiBmcmVxdWVuY3ksXG4gICAgICB5ICogZnJlcXVlbmN5LFxuICAgICAgeiAqIGZyZXF1ZW5jeVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBub2lzZTREICh4LCB5LCB6LCB3LCBmcmVxdWVuY3ksIGFtcGxpdHVkZSkge1xuICAgIGlmICghaXNGaW5pdGUoeCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ggY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh5KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneSBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBpZiAoIWlzRmluaXRlKHopKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd6IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUodykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3cgY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgZnJlcXVlbmN5ID0gZGVmaW5lZChmcmVxdWVuY3ksIDEpO1xuICAgIGFtcGxpdHVkZSA9IGRlZmluZWQoYW1wbGl0dWRlLCAxKTtcbiAgICByZXR1cm4gYW1wbGl0dWRlICogbm9pc2VHZW5lcmF0b3Iubm9pc2U0RChcbiAgICAgIHggKiBmcmVxdWVuY3ksXG4gICAgICB5ICogZnJlcXVlbmN5LFxuICAgICAgeiAqIGZyZXF1ZW5jeSxcbiAgICAgIHcgKiBmcmVxdWVuY3lcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gc2lnbiAoKSB7XG4gICAgcmV0dXJuIGJvb2xlYW4oKSA/IDEgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJvb2xlYW4gKCkge1xuICAgIHJldHVybiB2YWx1ZSgpID4gMC41O1xuICB9XG5cbiAgZnVuY3Rpb24gY2hhbmNlIChuKSB7XG4gICAgbiA9IGRlZmluZWQobiwgMC41KTtcbiAgICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdleHBlY3RlZCBuIHRvIGJlIGEgbnVtYmVyJyk7XG4gICAgcmV0dXJuIHZhbHVlKCkgPCBuO1xuICB9XG5cbiAgZnVuY3Rpb24gcmFuZ2UgKG1pbiwgbWF4KSB7XG4gICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBtYXggPSBtaW47XG4gICAgICBtaW4gPSAwO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbWluICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgbWF4ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYWxsIGFyZ3VtZW50cyB0byBiZSBudW1iZXJzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlKCkgKiAobWF4IC0gbWluKSArIG1pbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJhbmdlRmxvb3IgKG1pbiwgbWF4KSB7XG4gICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBtYXggPSBtaW47XG4gICAgICBtaW4gPSAwO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbWluICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgbWF4ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYWxsIGFyZ3VtZW50cyB0byBiZSBudW1iZXJzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE1hdGguZmxvb3IocmFuZ2UobWluLCBtYXgpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBpY2sgKGFycmF5KSB7XG4gICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gYXJyYXlbcmFuZ2VGbG9vcigwLCBhcnJheS5sZW5ndGgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNodWZmbGUgKGFycikge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBBcnJheSwgZ290ICcgKyB0eXBlb2YgYXJyKTtcbiAgICB9XG5cbiAgICB2YXIgcmFuZDtcbiAgICB2YXIgdG1wO1xuICAgIHZhciBsZW4gPSBhcnIubGVuZ3RoO1xuICAgIHZhciByZXQgPSBhcnIuc2xpY2UoKTtcbiAgICB3aGlsZSAobGVuKSB7XG4gICAgICByYW5kID0gTWF0aC5mbG9vcih2YWx1ZSgpICogbGVuLS0pO1xuICAgICAgdG1wID0gcmV0W2xlbl07XG4gICAgICByZXRbbGVuXSA9IHJldFtyYW5kXTtcbiAgICAgIHJldFtyYW5kXSA9IHRtcDtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ2lyY2xlIChyYWRpdXMsIG91dCkge1xuICAgIHJhZGl1cyA9IGRlZmluZWQocmFkaXVzLCAxKTtcbiAgICBvdXQgPSBvdXQgfHwgW107XG4gICAgdmFyIHRoZXRhID0gdmFsdWUoKSAqIDIuMCAqIE1hdGguUEk7XG4gICAgb3V0WzBdID0gcmFkaXVzICogTWF0aC5jb3ModGhldGEpO1xuICAgIG91dFsxXSA9IHJhZGl1cyAqIE1hdGguc2luKHRoZXRhKTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zaWRlQ2lyY2xlIChyYWRpdXMsIG91dCkge1xuICAgIHJhZGl1cyA9IGRlZmluZWQocmFkaXVzLCAxKTtcbiAgICBvdXQgPSBvdXQgfHwgW107XG4gICAgb25DaXJjbGUoMSwgb3V0KTtcbiAgICB2YXIgciA9IHJhZGl1cyAqIE1hdGguc3FydCh2YWx1ZSgpKTtcbiAgICBvdXRbMF0gKj0gcjtcbiAgICBvdXRbMV0gKj0gcjtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgZnVuY3Rpb24gb25TcGhlcmUgKHJhZGl1cywgb3V0KSB7XG4gICAgcmFkaXVzID0gZGVmaW5lZChyYWRpdXMsIDEpO1xuICAgIG91dCA9IG91dCB8fCBbXTtcbiAgICB2YXIgdSA9IHZhbHVlKCkgKiBNYXRoLlBJICogMjtcbiAgICB2YXIgdiA9IHZhbHVlKCkgKiAyIC0gMTtcbiAgICB2YXIgcGhpID0gdTtcbiAgICB2YXIgdGhldGEgPSBNYXRoLmFjb3Modik7XG4gICAgb3V0WzBdID0gcmFkaXVzICogTWF0aC5zaW4odGhldGEpICogTWF0aC5jb3MocGhpKTtcbiAgICBvdXRbMV0gPSByYWRpdXMgKiBNYXRoLnNpbih0aGV0YSkgKiBNYXRoLnNpbihwaGkpO1xuICAgIG91dFsyXSA9IHJhZGl1cyAqIE1hdGguY29zKHRoZXRhKTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zaWRlU3BoZXJlIChyYWRpdXMsIG91dCkge1xuICAgIHJhZGl1cyA9IGRlZmluZWQocmFkaXVzLCAxKTtcbiAgICBvdXQgPSBvdXQgfHwgW107XG4gICAgdmFyIHUgPSB2YWx1ZSgpICogTWF0aC5QSSAqIDI7XG4gICAgdmFyIHYgPSB2YWx1ZSgpICogMiAtIDE7XG4gICAgdmFyIGsgPSB2YWx1ZSgpO1xuXG4gICAgdmFyIHBoaSA9IHU7XG4gICAgdmFyIHRoZXRhID0gTWF0aC5hY29zKHYpO1xuICAgIHZhciByID0gcmFkaXVzICogTWF0aC5jYnJ0KGspO1xuICAgIG91dFswXSA9IHIgKiBNYXRoLnNpbih0aGV0YSkgKiBNYXRoLmNvcyhwaGkpO1xuICAgIG91dFsxXSA9IHIgKiBNYXRoLnNpbih0aGV0YSkgKiBNYXRoLnNpbihwaGkpO1xuICAgIG91dFsyXSA9IHIgKiBNYXRoLmNvcyh0aGV0YSk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHF1YXRlcm5pb24gKG91dCkge1xuICAgIG91dCA9IG91dCB8fCBbXTtcbiAgICB2YXIgdTEgPSB2YWx1ZSgpO1xuICAgIHZhciB1MiA9IHZhbHVlKCk7XG4gICAgdmFyIHUzID0gdmFsdWUoKTtcblxuICAgIHZhciBzcTEgPSBNYXRoLnNxcnQoMSAtIHUxKTtcbiAgICB2YXIgc3EyID0gTWF0aC5zcXJ0KHUxKTtcblxuICAgIHZhciB0aGV0YTEgPSBNYXRoLlBJICogMiAqIHUyO1xuICAgIHZhciB0aGV0YTIgPSBNYXRoLlBJICogMiAqIHUzO1xuXG4gICAgdmFyIHggPSBNYXRoLnNpbih0aGV0YTEpICogc3ExO1xuICAgIHZhciB5ID0gTWF0aC5jb3ModGhldGExKSAqIHNxMTtcbiAgICB2YXIgeiA9IE1hdGguc2luKHRoZXRhMikgKiBzcTI7XG4gICAgdmFyIHcgPSBNYXRoLmNvcyh0aGV0YTIpICogc3EyO1xuICAgIG91dFswXSA9IHg7XG4gICAgb3V0WzFdID0geTtcbiAgICBvdXRbMl0gPSB6O1xuICAgIG91dFszXSA9IHc7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdlaWdodGVkU2V0IChzZXQpIHtcbiAgICBzZXQgPSBzZXQgfHwgW107XG4gICAgaWYgKHNldC5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICAgIHJldHVybiBzZXRbd2VpZ2h0ZWRTZXRJbmRleChzZXQpXS52YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdlaWdodGVkU2V0SW5kZXggKHNldCkge1xuICAgIHNldCA9IHNldCB8fCBbXTtcbiAgICBpZiAoc2V0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xO1xuICAgIHJldHVybiB3ZWlnaHRlZChzZXQubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gcy53ZWlnaHQ7XG4gICAgfSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gd2VpZ2h0ZWQgKHdlaWdodHMpIHtcbiAgICB3ZWlnaHRzID0gd2VpZ2h0cyB8fCBbXTtcbiAgICBpZiAod2VpZ2h0cy5sZW5ndGggPT09IDApIHJldHVybiAtMTtcbiAgICB2YXIgdG90YWxXZWlnaHQgPSAwO1xuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHdlaWdodHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRvdGFsV2VpZ2h0ICs9IHdlaWdodHNbaV07XG4gICAgfVxuXG4gICAgaWYgKHRvdGFsV2VpZ2h0IDw9IDApIHRocm93IG5ldyBFcnJvcignV2VpZ2h0cyBtdXN0IHN1bSB0byA+IDAnKTtcblxuICAgIHZhciByYW5kb20gPSB2YWx1ZSgpICogdG90YWxXZWlnaHQ7XG4gICAgZm9yIChpID0gMDsgaSA8IHdlaWdodHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyYW5kb20gPCB3ZWlnaHRzW2ldKSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuICAgICAgcmFuZG9tIC09IHdlaWdodHNbaV07XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2F1c3NpYW4gKG1lYW4sIHN0YW5kYXJkRGVyaXZhdGlvbikge1xuICAgIG1lYW4gPSBkZWZpbmVkKG1lYW4sIDApO1xuICAgIHN0YW5kYXJkRGVyaXZhdGlvbiA9IGRlZmluZWQoc3RhbmRhcmREZXJpdmF0aW9uLCAxKTtcblxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuamRrLW1pcnJvci9qZGs3dS1qZGsvYmxvYi9mNGQ4MDk1N2U4OWExOWEyOWJiOWY5ODA3ZDJhMjgzNTFlZDdmN2RmL3NyYy9zaGFyZS9jbGFzc2VzL2phdmEvdXRpbC9SYW5kb20uamF2YSNMNDk2XG4gICAgaWYgKF9oYXNOZXh0R2F1c3NpYW4pIHtcbiAgICAgIF9oYXNOZXh0R2F1c3NpYW4gPSBmYWxzZTtcbiAgICAgIHZhciByZXN1bHQgPSBfbmV4dEdhdXNzaWFuO1xuICAgICAgX25leHRHYXVzc2lhbiA9IG51bGw7XG4gICAgICByZXR1cm4gbWVhbiArIHN0YW5kYXJkRGVyaXZhdGlvbiAqIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHYxID0gMDtcbiAgICAgIHZhciB2MiA9IDA7XG4gICAgICB2YXIgcyA9IDA7XG4gICAgICBkbyB7XG4gICAgICAgIHYxID0gdmFsdWUoKSAqIDIgLSAxOyAvLyBiZXR3ZWVuIC0xIGFuZCAxXG4gICAgICAgIHYyID0gdmFsdWUoKSAqIDIgLSAxOyAvLyBiZXR3ZWVuIC0xIGFuZCAxXG4gICAgICAgIHMgPSB2MSAqIHYxICsgdjIgKiB2MjtcbiAgICAgIH0gd2hpbGUgKHMgPj0gMSB8fCBzID09PSAwKTtcbiAgICAgIHZhciBtdWx0aXBsaWVyID0gTWF0aC5zcXJ0KC0yICogTWF0aC5sb2cocykgLyBzKTtcbiAgICAgIF9uZXh0R2F1c3NpYW4gPSAodjIgKiBtdWx0aXBsaWVyKTtcbiAgICAgIF9oYXNOZXh0R2F1c3NpYW4gPSB0cnVlO1xuICAgICAgcmV0dXJuIG1lYW4gKyBzdGFuZGFyZERlcml2YXRpb24gKiAodjEgKiBtdWx0aXBsaWVyKTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVSYW5kb20oKTtcbiIsInZhciBjcmVhdGVSZWdsID0gcmVxdWlyZSgncmVnbCcpO1xudmFyIGNyZWF0ZVF1YWQgPSByZXF1aXJlKCdwcmltaXRpdmUtcXVhZCcpO1xudmFyIHBhcnNlQ29sb3IgPSByZXF1aXJlKCdwYXJzZS1jb2xvcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCdkZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlU2hhZGVyO1xuXG5mdW5jdGlvbiBjcmVhdGVTaGFkZXIgKG9wdCkge1xuICBvcHQgPSBvcHQgfHwge307XG4gIGlmICghb3B0LmdsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHNwZWNpZnkgeyBjb250ZXh0OiBcIndlYmdsXCIgfSBpbiBza2V0Y2ggc2V0dGluZ3MsIG9yIGEgV2ViR0wtZW5hYmxlZCBjYW52YXMnKTtcbiAgfVxuXG4gIHZhciBnbCA9IG9wdC5nbDtcbiAgdmFyIHJlZ2xPcHRzID0geyBnbDogZ2wgfTtcblxuICAvLyByZWdsIGlzIHN0cmljdCBvbiB3aGF0IG9wdGlvbnMgeW91IHBhc3MgaW5cbiAgaWYgKHR5cGVvZiBvcHQuZXh0ZW5zaW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHJlZ2xPcHRzLmV4dGVuc2lvbnMgPSBvcHQuZXh0ZW5zaW9ucztcbiAgaWYgKHR5cGVvZiBvcHQub3B0aW9uYWxFeHRlbnNpb25zICE9PSAndW5kZWZpbmVkJykgcmVnbE9wdHMub3B0aW9uYWxFeHRlbnNpb25zID0gb3B0Lm9wdGlvbmFsRXh0ZW5zaW9ucztcbiAgaWYgKHR5cGVvZiBvcHQucHJvZmlsZSAhPT0gJ3VuZGVmaW5lZCcpIHJlZ2xPcHRzLnByb2ZpbGUgPSBvcHQucHJvZmlsZTtcbiAgaWYgKHR5cGVvZiBvcHQub25Eb25lICE9PSAndW5kZWZpbmVkJykgcmVnbE9wdHMub25Eb25lID0gb3B0Lm9uRG9uZTtcblxuICAvLyBDcmVhdGUgcmVnbCBmb3IgaGFuZGxpbmcgR0wgc3R1ZmZcbiAgdmFyIHJlZ2wgPSBjcmVhdGVSZWdsKHJlZ2xPcHRzKTtcblxuICAvLyBBIG1lc2ggZm9yIGEgZmxhdCBwbGFuZVxuICB2YXIgcXVhZCA9IGNyZWF0ZVF1YWQoKTtcblxuICB2YXIgdGV4dHVyZU1hcCA9IG5ldyBNYXAoKTtcblxuICAvLyBXaXJlIHVwIHVzZXIgdW5pZm9ybXMgbmljZWx5XG4gIHZhciB1bmlmb3Jtc01hcCA9IG9wdC51bmlmb3JtcyB8fCB7fTtcbiAgdmFyIHVuaWZvcm1zID0gT2JqZWN0LmFzc2lnbih7fSwgdW5pZm9ybXNNYXApO1xuICBPYmplY3Qua2V5cyh1bmlmb3Jtc01hcCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHZhbHVlID0gdW5pZm9ybXNNYXBba2V5XTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB1bmlmb3Jtc1trZXldID0gZnVuY3Rpb24gKHN0YXRlLCBwcm9wcywgYmF0Y2hJRCkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gdmFsdWUuY2FsbCh1bmlmb3Jtc01hcCwgcHJvcHMsIGJhdGNoSUQpO1xuICAgICAgICAvLyBJZiB1c2VyIGlzIHVzaW5nIGEgZnVuY3Rpb24gdG8gd3JhcCBhbiBpbWFnZSxcbiAgICAgICAgLy8gdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSByZS11cGxvYWQgdG8gc2FtZSBHTCB0ZXh0dXJlXG4gICAgICAgIGlmIChpc1RleHR1cmVMaWtlKHJlc3VsdCkpIHtcbiAgICAgICAgICBpZiAodGV4dHVyZU1hcC5oYXModmFsdWUpKSB7XG4gICAgICAgICAgICAvLyBUZXh0dXJlIGlzIGFscmVhZHkgY3JlYXRlZCwgcmUtdXBsb2FkXG4gICAgICAgICAgICB2YXIgcHJldlRleCA9IHRleHR1cmVNYXAuZ2V0KHZhbHVlKTtcbiAgICAgICAgICAgIHByZXZUZXgocmVzdWx0KTtcblxuICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICByZXN1bHQgPSBwcmV2VGV4O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDcmVhdGluZyB0aGUgdGV4dHVyZSBmb3IgdGhlIGZpcnN0IHRpbWVcbiAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gcmVnbC50ZXh0dXJlKHJlc3VsdCk7XG4gICAgICAgICAgICB0ZXh0dXJlTWFwLnNldCh2YWx1ZSwgdGV4dHVyZSk7XG5cbiAgICAgICAgICAgIC8vIFJldHVybiB0aGUgdGV4dHVyZSwgbm90IHRoZSBpbWFnZVxuICAgICAgICAgICAgcmVzdWx0ID0gdGV4dHVyZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChpc1RleHR1cmVMaWtlKHZhbHVlKSkge1xuICAgICAgdW5pZm9ybXNba2V5XSA9IHJlZ2wudGV4dHVyZSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuaWZvcm1zW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIEdldCB0aGUgZHJhd2luZyBjb21tYW5kXG4gIHZhciBkcmF3UXVhZENvbW1hbmQ7XG4gIHRyeSB7XG4gICAgZHJhd1F1YWRDb21tYW5kID0gY3JlYXRlRHJhd1F1YWQoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaGFuZGxlRXJyb3IoZXJyKTtcbiAgfVxuXG4gIC8vIE5pY2VseSBnZXQgYSBjbGVhciBjb2xvciBmb3IgdGhlIGNhbnZhc1xuICB2YXIgY2xlYXJDb2xvciA9IGRlZmluZWQob3B0LmNsZWFyQ29sb3IsICdibGFjaycpO1xuICBpZiAodHlwZW9mIGNsZWFyQ29sb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlQ29sb3IoY2xlYXJDb2xvcik7XG4gICAgaWYgKCFwYXJzZWQucmdiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIHBhcnNpbmcgeyBjbGVhckNvbG9yIH0gY29sb3Igc3RyaW5nIFwiJyArIGNsZWFyQ29sb3IgKyAnXCInKTtcbiAgICB9XG4gICAgY2xlYXJDb2xvciA9IHBhcnNlZC5yZ2Iuc2xpY2UoMCwgMykubWFwKGZ1bmN0aW9uIChuKSB7XG4gICAgICByZXR1cm4gbiAvIDI1NTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChjbGVhckNvbG9yICYmICghQXJyYXkuaXNBcnJheShjbGVhckNvbG9yKSB8fCBjbGVhckNvbG9yLmxlbmd0aCA8IDMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciB3aXRoIHsgY2xlYXJDb2xvciB9IG9wdGlvbiwgbXVzdCBiZSBhIHN0cmluZyBvciBbIHIsIGcsIGIgXSBmbG9hdCBhcnJheScpO1xuICB9XG5cbiAgdmFyIGNsZWFyQWxwaGEgPSBkZWZpbmVkKG9wdC5jbGVhckFscGhhLCAxKTtcbiAgdmFyIGNsZWFyID0gY2xlYXJDb2xvciA/IGNsZWFyQ29sb3IuY29uY2F0KFsgY2xlYXJBbHBoYSB8fCAwIF0pIDogZmFsc2U7XG5cbiAgLy8gUmV0dXJuIGEgcmVuZGVyZXIgb2JqZWN0XG4gIHJldHVybiB7XG4gICAgcmVuZGVyOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgIC8vIE9uIGVhY2ggdGljaywgdXBkYXRlIHJlZ2wgdGltZXJzIGFuZCBzaXplc1xuICAgICAgcmVnbC5wb2xsKCk7XG5cbiAgICAgIC8vIENsZWFyIGJhY2tidWZmZXIgd2l0aCBjb2xvclxuICAgICAgaWYgKGNsZWFyKSB7XG4gICAgICAgIHJlZ2wuY2xlYXIoe1xuICAgICAgICAgIGNvbG9yOiBjbGVhcixcbiAgICAgICAgICBkZXB0aDogMSxcbiAgICAgICAgICBzdGVuY2lsOiAwXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBTdWJtaXQgZHJhdyBjb21tYW5kXG4gICAgICBkcmF3UXVhZChwcm9wcyk7XG5cbiAgICAgIC8vIEZsdXNoIHBlbmRpbmcgR0wgY2FsbHMgZm9yIHRoaXMgZnJhbWVcbiAgICAgIGdsLmZsdXNoKCk7XG4gICAgfSxcbiAgICByZWdsOiByZWdsLFxuICAgIGRyYXdRdWFkOiBkcmF3UXVhZCxcbiAgICB1bmxvYWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFJlbW92ZSBHTCB0ZXh0dXJlIG1hcHBpbmdzXG4gICAgICB0ZXh0dXJlTWFwLmNsZWFyKCk7XG4gICAgICAvLyBVbmxvYWQgdGhlIGN1cnJlbnQgcmVnbCBpbnN0YW5jZVxuICAgICAgLy8gVE9ETzogV2Ugc2hvdWxkIHByb2JhYmx5IGFsc28gZGVzdHJveSB0ZXh0dXJlcyBjcmVhdGVkIGZyb20gdGhpcyBtb2R1bGUhXG4gICAgICByZWdsLmRlc3Ryb3koKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gQSB1c2VyLWZyaWVuZGx5IGRyYXcgY29tbWFuZCB0aGF0IHNwaXRzIG91dCBlcnJvcnNcbiAgZnVuY3Rpb24gZHJhd1F1YWQgKHByb3BzKSB7XG4gICAgcHJvcHMgPSBwcm9wcyB8fCB7fTtcbiAgICAvLyBEcmF3IGdlbmVyYXRpdmUgLyBzaGFkZXIgYXJ0XG4gICAgaWYgKGRyYXdRdWFkQ29tbWFuZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZHJhd1F1YWRDb21tYW5kKHByb3BzKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoaGFuZGxlRXJyb3IoZXJyKSkge1xuICAgICAgICAgIGlmIChwcm9wcyA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1dhcm5pbmc6IHNoYWRlci5yZW5kZXIoKSBpcyBub3QgY2FsbGVkIHdpdGggYW55IFwicHJvcHNcIiBwYXJhbWV0ZXInKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBEcmF3IGNvbW1hbmRcbiAgZnVuY3Rpb24gY3JlYXRlRHJhd1F1YWQgKCkge1xuICAgIHJldHVybiByZWdsKHtcbiAgICAgIHNjaXNzb3I6IG9wdC5zY2lzc29yID8ge1xuICAgICAgICBlbmFibGU6IHRydWUsXG4gICAgICAgIGJveDoge1xuICAgICAgICAgIHg6IHJlZ2wucHJvcCgnc2Npc3NvclgnKSxcbiAgICAgICAgICB5OiByZWdsLnByb3AoJ3NjaXNzb3JZJyksXG4gICAgICAgICAgd2lkdGg6IHJlZ2wucHJvcCgnc2Npc3NvcldpZHRoJyksXG4gICAgICAgICAgaGVpZ2h0OiByZWdsLnByb3AoJ3NjaXNzb3JIZWlnaHQnKVxuICAgICAgICB9XG4gICAgICB9IDogZmFsc2UsXG4gICAgICAvLyBQYXNzIGRvd24gcHJvcHMgZnJvbSBqYXZhc2NyaXB0XG4gICAgICB1bmlmb3JtczogdW5pZm9ybXMsXG4gICAgICAvLyBGYWxsIGJhY2sgdG8gYSBzaW1wbGUgZnJhZ21lbnQgc2hhZGVyXG4gICAgICBmcmFnOiBvcHQuZnJhZyB8fCBbXG4gICAgICAgICdwcmVjaXNpb24gaGlnaHAgZmxvYXQ7JyxcbiAgICAgICAgJycsXG4gICAgICAgICd2b2lkIG1haW4gKCkgeycsXG4gICAgICAgICcgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAvLyBGYWxsIGJhY2sgdG8gYSBzaW1wbGUgdmVydGV4IHNoYWRlclxuICAgICAgdmVydDogb3B0LnZlcnQgfHwgW1xuICAgICAgICAncHJlY2lzaW9uIGhpZ2hwIGZsb2F0OycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsnLFxuICAgICAgICAndmFyeWluZyB2ZWMyIHZVdjsnLFxuICAgICAgICAnJyxcbiAgICAgICAgJ3ZvaWQgbWFpbiAoKSB7JyxcbiAgICAgICAgJyAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLnh5eiwgMS4wKTsnLFxuICAgICAgICAnICB2VXYgPSBnbF9Qb3NpdGlvbi54eSAqIDAuNSArIDAuNTsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAvLyBTZXR1cCB0cmFuc3BhcmVuY3kgYmxlbmRpbmdcbiAgICAgIGJsZW5kOiBvcHQuYmxlbmQgIT09IGZhbHNlID8ge1xuICAgICAgICBlbmFibGU6IHRydWUsXG4gICAgICAgIGZ1bmM6IHtcbiAgICAgICAgICBzcmNSR0I6ICdzcmMgYWxwaGEnLFxuICAgICAgICAgIHNyY0FscGhhOiAxLFxuICAgICAgICAgIGRzdFJHQjogJ29uZSBtaW51cyBzcmMgYWxwaGEnLFxuICAgICAgICAgIGRzdEFscGhhOiAxXG4gICAgICAgIH1cbiAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICAvLyBTZW5kIG1lc2ggdmVydGV4IGF0dHJpYnV0ZXMgdG8gc2hhZGVyXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIHBvc2l0aW9uOiBxdWFkLnBvc2l0aW9uc1xuICAgICAgfSxcbiAgICAgIC8vIFRoZSBpbmRpY2VzIGZvciB0aGUgcXVhZCBtZXNoXG4gICAgICBlbGVtZW50czogcXVhZC5jZWxsc1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlRXJyb3IgKGVycikge1xuICAgIGlmICgvXlxcKHJlZ2xcXCkvLnRlc3QoZXJyLm1lc3NhZ2UpKSB7XG4gICAgICAvLyBSZWdsIGFscmVhZHkgbG9ncyBhIG1lc3NhZ2UgdG8gdGhlIGNvbnNvbGUgOlxcXG4gICAgICAvLyBzbyBsZXQncyBqdXN0IGF2b2lkIHJlLXByaW50aW5nIHRoZSBzYW1lIHRoaW5nXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1RleHR1cmVMaWtlIChkYXRhKSB7XG4gIHJldHVybiBkYXRhICYmICFBcnJheS5pc0FycmF5KGRhdGEpICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jztcbn1cbiIsIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9XG4gIGdsb2JhbC5wZXJmb3JtYW5jZSAmJlxuICBnbG9iYWwucGVyZm9ybWFuY2Uubm93ID8gZnVuY3Rpb24gbm93KCkge1xuICAgIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKVxuICB9IDogRGF0ZS5ub3cgfHwgZnVuY3Rpb24gbm93KCkge1xuICAgIHJldHVybiArbmV3IERhdGVcbiAgfVxuIiwibW9kdWxlLmV4cG9ydHMgPSBpc1Byb21pc2U7XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZShvYmopIHtcbiAgcmV0dXJuICEhb2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbic7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGlzTm9kZVxuXG5mdW5jdGlvbiBpc05vZGUgKHZhbCkge1xuICByZXR1cm4gKCF2YWwgfHwgdHlwZW9mIHZhbCAhPT0gJ29iamVjdCcpXG4gICAgPyBmYWxzZVxuICAgIDogKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnICYmIHR5cGVvZiB3aW5kb3cuTm9kZSA9PT0gJ29iamVjdCcpXG4gICAgICA/ICh2YWwgaW5zdGFuY2VvZiB3aW5kb3cuTm9kZSlcbiAgICAgIDogKHR5cGVvZiB2YWwubm9kZVR5cGUgPT09ICdudW1iZXInKSAmJlxuICAgICAgICAodHlwZW9mIHZhbC5ub2RlTmFtZSA9PT0gJ3N0cmluZycpXG59XG4iLCIvLyBUT0RPOiBXZSBjYW4gcmVtb3ZlIGEgaHVnZSBjaHVuayBvZiBidW5kbGUgc2l6ZSBieSB1c2luZyBhIHNtYWxsZXJcbi8vIHV0aWxpdHkgbW9kdWxlIGZvciBjb252ZXJ0aW5nIHVuaXRzLlxuaW1wb3J0IGlzRE9NIGZyb20gJ2lzLWRvbSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnRBUEkgKCkge1xuICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93WydjYW52YXMtc2tldGNoLWNsaSddO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZCAoKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFyZ3VtZW50c1tpXSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCcm93c2VyICgpIHtcbiAgcmV0dXJuIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dlYkdMQ29udGV4dCAoY3R4KSB7XG4gIHJldHVybiB0eXBlb2YgY3R4LmNsZWFyID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjdHguY2xlYXJDb2xvciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY3R4LmJ1ZmZlckRhdGEgPT09ICdmdW5jdGlvbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NhbnZhcyAoZWxlbWVudCkge1xuICByZXR1cm4gaXNET00oZWxlbWVudCkgJiYgL2NhbnZhcy9pLnRlc3QoZWxlbWVudC5ub2RlTmFtZSkgJiYgdHlwZW9mIGVsZW1lbnQuZ2V0Q29udGV4dCA9PT0gJ2Z1bmN0aW9uJztcbn1cbiIsIi8qIVxuICogcmVwZWF0LXN0cmluZyA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvcmVwZWF0LXN0cmluZz5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgSm9uIFNjaGxpbmtlcnQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFJlc3VsdHMgY2FjaGVcbiAqL1xuXG52YXIgcmVzID0gJyc7XG52YXIgY2FjaGU7XG5cbi8qKlxuICogRXhwb3NlIGByZXBlYXRgXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSByZXBlYXQ7XG5cbi8qKlxuICogUmVwZWF0IHRoZSBnaXZlbiBgc3RyaW5nYCB0aGUgc3BlY2lmaWVkIGBudW1iZXJgXG4gKiBvZiB0aW1lcy5cbiAqXG4gKiAqKkV4YW1wbGU6KipcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlcGVhdCA9IHJlcXVpcmUoJ3JlcGVhdC1zdHJpbmcnKTtcbiAqIHJlcGVhdCgnQScsIDUpO1xuICogLy89PiBBQUFBQVxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGBzdHJpbmdgIFRoZSBzdHJpbmcgdG8gcmVwZWF0XG4gKiBAcGFyYW0ge051bWJlcn0gYG51bWJlcmAgVGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHN0cmluZ1xuICogQHJldHVybiB7U3RyaW5nfSBSZXBlYXRlZCBzdHJpbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gcmVwZWF0KHN0ciwgbnVtKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4cGVjdGVkIGEgc3RyaW5nJyk7XG4gIH1cblxuICAvLyBjb3ZlciBjb21tb24sIHF1aWNrIHVzZSBjYXNlc1xuICBpZiAobnVtID09PSAxKSByZXR1cm4gc3RyO1xuICBpZiAobnVtID09PSAyKSByZXR1cm4gc3RyICsgc3RyO1xuXG4gIHZhciBtYXggPSBzdHIubGVuZ3RoICogbnVtO1xuICBpZiAoY2FjaGUgIT09IHN0ciB8fCB0eXBlb2YgY2FjaGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgY2FjaGUgPSBzdHI7XG4gICAgcmVzID0gJyc7XG4gIH0gZWxzZSBpZiAocmVzLmxlbmd0aCA+PSBtYXgpIHtcbiAgICByZXR1cm4gcmVzLnN1YnN0cigwLCBtYXgpO1xuICB9XG5cbiAgd2hpbGUgKG1heCA+IHJlcy5sZW5ndGggJiYgbnVtID4gMSkge1xuICAgIGlmIChudW0gJiAxKSB7XG4gICAgICByZXMgKz0gc3RyO1xuICAgIH1cblxuICAgIG51bSA+Pj0gMTtcbiAgICBzdHIgKz0gc3RyO1xuICB9XG5cbiAgcmVzICs9IHN0cjtcbiAgcmVzID0gcmVzLnN1YnN0cigwLCBtYXgpO1xuICByZXR1cm4gcmVzO1xufVxuIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIE9iamVjdC5rZXlzID09PSAnZnVuY3Rpb24nXG4gID8gT2JqZWN0LmtleXMgOiBzaGltO1xuXG5leHBvcnRzLnNoaW0gPSBzaGltO1xuZnVuY3Rpb24gc2hpbSAob2JqKSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIGtleXMucHVzaChrZXkpO1xuICByZXR1cm4ga2V5cztcbn1cbiIsInZhciBzdXBwb3J0c0FyZ3VtZW50c0NsYXNzID0gKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnRzKVxufSkoKSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gc3VwcG9ydHNBcmd1bWVudHNDbGFzcyA/IHN1cHBvcnRlZCA6IHVuc3VwcG9ydGVkO1xuXG5leHBvcnRzLnN1cHBvcnRlZCA9IHN1cHBvcnRlZDtcbmZ1bmN0aW9uIHN1cHBvcnRlZChvYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xufTtcblxuZXhwb3J0cy51bnN1cHBvcnRlZCA9IHVuc3VwcG9ydGVkO1xuZnVuY3Rpb24gdW5zdXBwb3J0ZWQob2JqZWN0KXtcbiAgcmV0dXJuIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2Ygb2JqZWN0Lmxlbmd0aCA9PSAnbnVtYmVyJyAmJlxuICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdjYWxsZWUnKSAmJlxuICAgICFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCAnY2FsbGVlJykgfHxcbiAgICBmYWxzZTtcbn07XG4iLCJ2YXIgcFNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuL2xpYi9rZXlzLmpzJyk7XG52YXIgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2xpYi9pc19hcmd1bWVudHMuanMnKTtcblxudmFyIGRlZXBFcXVhbCA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFjdHVhbCwgZXhwZWN0ZWQsIG9wdHMpIHtcbiAgaWYgKCFvcHRzKSBvcHRzID0ge307XG4gIC8vIDcuMS4gQWxsIGlkZW50aWNhbCB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGFzIGRldGVybWluZWQgYnkgPT09LlxuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIHJldHVybiB0cnVlO1xuXG4gIH0gZWxzZSBpZiAoYWN0dWFsIGluc3RhbmNlb2YgRGF0ZSAmJiBleHBlY3RlZCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gYWN0dWFsLmdldFRpbWUoKSA9PT0gZXhwZWN0ZWQuZ2V0VGltZSgpO1xuXG4gIC8vIDcuMy4gT3RoZXIgcGFpcnMgdGhhdCBkbyBub3QgYm90aCBwYXNzIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JyxcbiAgLy8gZXF1aXZhbGVuY2UgaXMgZGV0ZXJtaW5lZCBieSA9PS5cbiAgfSBlbHNlIGlmICghYWN0dWFsIHx8ICFleHBlY3RlZCB8fCB0eXBlb2YgYWN0dWFsICE9ICdvYmplY3QnICYmIHR5cGVvZiBleHBlY3RlZCAhPSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBvcHRzLnN0cmljdCA/IGFjdHVhbCA9PT0gZXhwZWN0ZWQgOiBhY3R1YWwgPT0gZXhwZWN0ZWQ7XG5cbiAgLy8gNy40LiBGb3IgYWxsIG90aGVyIE9iamVjdCBwYWlycywgaW5jbHVkaW5nIEFycmF5IG9iamVjdHMsIGVxdWl2YWxlbmNlIGlzXG4gIC8vIGRldGVybWluZWQgYnkgaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChhcyB2ZXJpZmllZFxuICAvLyB3aXRoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCksIHRoZSBzYW1lIHNldCBvZiBrZXlzXG4gIC8vIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLCBlcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnlcbiAgLy8gY29ycmVzcG9uZGluZyBrZXksIGFuZCBhbiBpZGVudGljYWwgJ3Byb3RvdHlwZScgcHJvcGVydHkuIE5vdGU6IHRoaXNcbiAgLy8gYWNjb3VudHMgZm9yIGJvdGggbmFtZWQgYW5kIGluZGV4ZWQgcHJvcGVydGllcyBvbiBBcnJheXMuXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9iakVxdWl2KGFjdHVhbCwgZXhwZWN0ZWQsIG9wdHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkT3JOdWxsKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc0J1ZmZlciAoeCkge1xuICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnIHx8IHR5cGVvZiB4Lmxlbmd0aCAhPT0gJ251bWJlcicpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiB4LmNvcHkgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHguc2xpY2UgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHgubGVuZ3RoID4gMCAmJiB0eXBlb2YgeFswXSAhPT0gJ251bWJlcicpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG9iakVxdWl2KGEsIGIsIG9wdHMpIHtcbiAgdmFyIGksIGtleTtcbiAgaWYgKGlzVW5kZWZpbmVkT3JOdWxsKGEpIHx8IGlzVW5kZWZpbmVkT3JOdWxsKGIpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy8gYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LlxuICBpZiAoYS5wcm90b3R5cGUgIT09IGIucHJvdG90eXBlKSByZXR1cm4gZmFsc2U7XG4gIC8vfn5+SSd2ZSBtYW5hZ2VkIHRvIGJyZWFrIE9iamVjdC5rZXlzIHRocm91Z2ggc2NyZXd5IGFyZ3VtZW50cyBwYXNzaW5nLlxuICAvLyAgIENvbnZlcnRpbmcgdG8gYXJyYXkgc29sdmVzIHRoZSBwcm9ibGVtLlxuICBpZiAoaXNBcmd1bWVudHMoYSkpIHtcbiAgICBpZiAoIWlzQXJndW1lbnRzKGIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGEgPSBwU2xpY2UuY2FsbChhKTtcbiAgICBiID0gcFNsaWNlLmNhbGwoYik7XG4gICAgcmV0dXJuIGRlZXBFcXVhbChhLCBiLCBvcHRzKTtcbiAgfVxuICBpZiAoaXNCdWZmZXIoYSkpIHtcbiAgICBpZiAoIWlzQnVmZmVyKGIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdHJ5IHtcbiAgICB2YXIga2EgPSBvYmplY3RLZXlzKGEpLFxuICAgICAgICBrYiA9IG9iamVjdEtleXMoYik7XG4gIH0gY2F0Y2ggKGUpIHsvL2hhcHBlbnMgd2hlbiBvbmUgaXMgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgdGhlIG90aGVyIGlzbid0XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoa2V5cyBpbmNvcnBvcmF0ZXNcbiAgLy8gaGFzT3duUHJvcGVydHkpXG4gIGlmIChrYS5sZW5ndGggIT0ga2IubGVuZ3RoKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy90aGUgc2FtZSBzZXQgb2Yga2V5cyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSxcbiAga2Euc29ydCgpO1xuICBrYi5zb3J0KCk7XG4gIC8vfn5+Y2hlYXAga2V5IHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoa2FbaV0gIT0ga2JbaV0pXG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy9lcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnkgY29ycmVzcG9uZGluZyBrZXksIGFuZFxuICAvL35+fnBvc3NpYmx5IGV4cGVuc2l2ZSBkZWVwIHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBrZXkgPSBrYVtpXTtcbiAgICBpZiAoIWRlZXBFcXVhbChhW2tleV0sIGJba2V5XSwgb3B0cykpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIGEgPT09IHR5cGVvZiBiO1xufVxuIiwiLypcbiAqIERhdGUgRm9ybWF0IDEuMi4zXG4gKiAoYykgMjAwNy0yMDA5IFN0ZXZlbiBMZXZpdGhhbiA8c3RldmVubGV2aXRoYW4uY29tPlxuICogTUlUIGxpY2Vuc2VcbiAqXG4gKiBJbmNsdWRlcyBlbmhhbmNlbWVudHMgYnkgU2NvdHQgVHJlbmRhIDxzY290dC50cmVuZGEubmV0PlxuICogYW5kIEtyaXMgS293YWwgPGNpeGFyLmNvbS9+a3Jpcy5rb3dhbC8+XG4gKlxuICogQWNjZXB0cyBhIGRhdGUsIGEgbWFzaywgb3IgYSBkYXRlIGFuZCBhIG1hc2suXG4gKiBSZXR1cm5zIGEgZm9ybWF0dGVkIHZlcnNpb24gb2YgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgZGF0ZSBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBkYXRlL3RpbWUuXG4gKiBUaGUgbWFzayBkZWZhdWx0cyB0byBkYXRlRm9ybWF0Lm1hc2tzLmRlZmF1bHQuXG4gKi9cblxuKGZ1bmN0aW9uKGdsb2JhbCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIGRhdGVGb3JtYXQgPSAoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdG9rZW4gPSAvZHsxLDR9fG17MSw0fXx5eSg/Onl5KT98KFtIaE1zVHRdKVxcMT98W0xsb1NaV05dfFwiW15cIl0qXCJ8J1teJ10qJy9nO1xuICAgICAgdmFyIHRpbWV6b25lID0gL1xcYig/OltQTUNFQV1bU0RQXVR8KD86UGFjaWZpY3xNb3VudGFpbnxDZW50cmFsfEVhc3Rlcm58QXRsYW50aWMpICg/OlN0YW5kYXJkfERheWxpZ2h0fFByZXZhaWxpbmcpIFRpbWV8KD86R01UfFVUQykoPzpbLStdXFxkezR9KT8pXFxiL2c7XG4gICAgICB2YXIgdGltZXpvbmVDbGlwID0gL1teLStcXGRBLVpdL2c7XG4gIFxuICAgICAgLy8gUmVnZXhlcyBhbmQgc3VwcG9ydGluZyBmdW5jdGlvbnMgYXJlIGNhY2hlZCB0aHJvdWdoIGNsb3N1cmVcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZGF0ZSwgbWFzaywgdXRjLCBnbXQpIHtcbiAgXG4gICAgICAgIC8vIFlvdSBjYW4ndCBwcm92aWRlIHV0YyBpZiB5b3Ugc2tpcCBvdGhlciBhcmdzICh1c2UgdGhlICdVVEM6JyBtYXNrIHByZWZpeClcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYga2luZE9mKGRhdGUpID09PSAnc3RyaW5nJyAmJiAhL1xcZC8udGVzdChkYXRlKSkge1xuICAgICAgICAgIG1hc2sgPSBkYXRlO1xuICAgICAgICAgIGRhdGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgXG4gICAgICAgIGRhdGUgPSBkYXRlIHx8IG5ldyBEYXRlO1xuICBcbiAgICAgICAgaWYoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgICBkYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICAgIH1cbiAgXG4gICAgICAgIGlmIChpc05hTihkYXRlKSkge1xuICAgICAgICAgIHRocm93IFR5cGVFcnJvcignSW52YWxpZCBkYXRlJyk7XG4gICAgICAgIH1cbiAgXG4gICAgICAgIG1hc2sgPSBTdHJpbmcoZGF0ZUZvcm1hdC5tYXNrc1ttYXNrXSB8fCBtYXNrIHx8IGRhdGVGb3JtYXQubWFza3NbJ2RlZmF1bHQnXSk7XG4gIFxuICAgICAgICAvLyBBbGxvdyBzZXR0aW5nIHRoZSB1dGMvZ210IGFyZ3VtZW50IHZpYSB0aGUgbWFza1xuICAgICAgICB2YXIgbWFza1NsaWNlID0gbWFzay5zbGljZSgwLCA0KTtcbiAgICAgICAgaWYgKG1hc2tTbGljZSA9PT0gJ1VUQzonIHx8IG1hc2tTbGljZSA9PT0gJ0dNVDonKSB7XG4gICAgICAgICAgbWFzayA9IG1hc2suc2xpY2UoNCk7XG4gICAgICAgICAgdXRjID0gdHJ1ZTtcbiAgICAgICAgICBpZiAobWFza1NsaWNlID09PSAnR01UOicpIHtcbiAgICAgICAgICAgIGdtdCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gIFxuICAgICAgICB2YXIgXyA9IHV0YyA/ICdnZXRVVEMnIDogJ2dldCc7XG4gICAgICAgIHZhciBkID0gZGF0ZVtfICsgJ0RhdGUnXSgpO1xuICAgICAgICB2YXIgRCA9IGRhdGVbXyArICdEYXknXSgpO1xuICAgICAgICB2YXIgbSA9IGRhdGVbXyArICdNb250aCddKCk7XG4gICAgICAgIHZhciB5ID0gZGF0ZVtfICsgJ0Z1bGxZZWFyJ10oKTtcbiAgICAgICAgdmFyIEggPSBkYXRlW18gKyAnSG91cnMnXSgpO1xuICAgICAgICB2YXIgTSA9IGRhdGVbXyArICdNaW51dGVzJ10oKTtcbiAgICAgICAgdmFyIHMgPSBkYXRlW18gKyAnU2Vjb25kcyddKCk7XG4gICAgICAgIHZhciBMID0gZGF0ZVtfICsgJ01pbGxpc2Vjb25kcyddKCk7XG4gICAgICAgIHZhciBvID0gdXRjID8gMCA6IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICAgICAgdmFyIFcgPSBnZXRXZWVrKGRhdGUpO1xuICAgICAgICB2YXIgTiA9IGdldERheU9mV2VlayhkYXRlKTtcbiAgICAgICAgdmFyIGZsYWdzID0ge1xuICAgICAgICAgIGQ6ICAgIGQsXG4gICAgICAgICAgZGQ6ICAgcGFkKGQpLFxuICAgICAgICAgIGRkZDogIGRhdGVGb3JtYXQuaTE4bi5kYXlOYW1lc1tEXSxcbiAgICAgICAgICBkZGRkOiBkYXRlRm9ybWF0LmkxOG4uZGF5TmFtZXNbRCArIDddLFxuICAgICAgICAgIG06ICAgIG0gKyAxLFxuICAgICAgICAgIG1tOiAgIHBhZChtICsgMSksXG4gICAgICAgICAgbW1tOiAgZGF0ZUZvcm1hdC5pMThuLm1vbnRoTmFtZXNbbV0sXG4gICAgICAgICAgbW1tbTogZGF0ZUZvcm1hdC5pMThuLm1vbnRoTmFtZXNbbSArIDEyXSxcbiAgICAgICAgICB5eTogICBTdHJpbmcoeSkuc2xpY2UoMiksXG4gICAgICAgICAgeXl5eTogeSxcbiAgICAgICAgICBoOiAgICBIICUgMTIgfHwgMTIsXG4gICAgICAgICAgaGg6ICAgcGFkKEggJSAxMiB8fCAxMiksXG4gICAgICAgICAgSDogICAgSCxcbiAgICAgICAgICBISDogICBwYWQoSCksXG4gICAgICAgICAgTTogICAgTSxcbiAgICAgICAgICBNTTogICBwYWQoTSksXG4gICAgICAgICAgczogICAgcyxcbiAgICAgICAgICBzczogICBwYWQocyksXG4gICAgICAgICAgbDogICAgcGFkKEwsIDMpLFxuICAgICAgICAgIEw6ICAgIHBhZChNYXRoLnJvdW5kKEwgLyAxMCkpLFxuICAgICAgICAgIHQ6ICAgIEggPCAxMiA/IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbMF0gOiBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzFdLFxuICAgICAgICAgIHR0OiAgIEggPCAxMiA/IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbMl0gOiBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzNdLFxuICAgICAgICAgIFQ6ICAgIEggPCAxMiA/IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbNF0gOiBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzVdLFxuICAgICAgICAgIFRUOiAgIEggPCAxMiA/IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbNl0gOiBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzddLFxuICAgICAgICAgIFo6ICAgIGdtdCA/ICdHTVQnIDogdXRjID8gJ1VUQycgOiAoU3RyaW5nKGRhdGUpLm1hdGNoKHRpbWV6b25lKSB8fCBbJyddKS5wb3AoKS5yZXBsYWNlKHRpbWV6b25lQ2xpcCwgJycpLFxuICAgICAgICAgIG86ICAgIChvID4gMCA/ICctJyA6ICcrJykgKyBwYWQoTWF0aC5mbG9vcihNYXRoLmFicyhvKSAvIDYwKSAqIDEwMCArIE1hdGguYWJzKG8pICUgNjAsIDQpLFxuICAgICAgICAgIFM6ICAgIFsndGgnLCAnc3QnLCAnbmQnLCAncmQnXVtkICUgMTAgPiAzID8gMCA6IChkICUgMTAwIC0gZCAlIDEwICE9IDEwKSAqIGQgJSAxMF0sXG4gICAgICAgICAgVzogICAgVyxcbiAgICAgICAgICBOOiAgICBOXG4gICAgICAgIH07XG4gIFxuICAgICAgICByZXR1cm4gbWFzay5yZXBsYWNlKHRva2VuLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICBpZiAobWF0Y2ggaW4gZmxhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbGFnc1ttYXRjaF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBtYXRjaC5zbGljZSgxLCBtYXRjaC5sZW5ndGggLSAxKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0pKCk7XG5cbiAgZGF0ZUZvcm1hdC5tYXNrcyA9IHtcbiAgICAnZGVmYXVsdCc6ICAgICAgICAgICAgICAgJ2RkZCBtbW0gZGQgeXl5eSBISDpNTTpzcycsXG4gICAgJ3Nob3J0RGF0ZSc6ICAgICAgICAgICAgICdtL2QveXknLFxuICAgICdtZWRpdW1EYXRlJzogICAgICAgICAgICAnbW1tIGQsIHl5eXknLFxuICAgICdsb25nRGF0ZSc6ICAgICAgICAgICAgICAnbW1tbSBkLCB5eXl5JyxcbiAgICAnZnVsbERhdGUnOiAgICAgICAgICAgICAgJ2RkZGQsIG1tbW0gZCwgeXl5eScsXG4gICAgJ3Nob3J0VGltZSc6ICAgICAgICAgICAgICdoOk1NIFRUJyxcbiAgICAnbWVkaXVtVGltZSc6ICAgICAgICAgICAgJ2g6TU06c3MgVFQnLFxuICAgICdsb25nVGltZSc6ICAgICAgICAgICAgICAnaDpNTTpzcyBUVCBaJyxcbiAgICAnaXNvRGF0ZSc6ICAgICAgICAgICAgICAgJ3l5eXktbW0tZGQnLFxuICAgICdpc29UaW1lJzogICAgICAgICAgICAgICAnSEg6TU06c3MnLFxuICAgICdpc29EYXRlVGltZSc6ICAgICAgICAgICAneXl5eS1tbS1kZFxcJ1RcXCdISDpNTTpzc28nLFxuICAgICdpc29VdGNEYXRlVGltZSc6ICAgICAgICAnVVRDOnl5eXktbW0tZGRcXCdUXFwnSEg6TU06c3NcXCdaXFwnJyxcbiAgICAnZXhwaXJlc0hlYWRlckZvcm1hdCc6ICAgJ2RkZCwgZGQgbW1tIHl5eXkgSEg6TU06c3MgWidcbiAgfTtcblxuICAvLyBJbnRlcm5hdGlvbmFsaXphdGlvbiBzdHJpbmdzXG4gIGRhdGVGb3JtYXQuaTE4biA9IHtcbiAgICBkYXlOYW1lczogW1xuICAgICAgJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCcsXG4gICAgICAnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXG4gICAgXSxcbiAgICBtb250aE5hbWVzOiBbXG4gICAgICAnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnLFxuICAgICAgJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXG4gICAgXSxcbiAgICB0aW1lTmFtZXM6IFtcbiAgICAgICdhJywgJ3AnLCAnYW0nLCAncG0nLCAnQScsICdQJywgJ0FNJywgJ1BNJ1xuICAgIF1cbiAgfTtcblxuZnVuY3Rpb24gcGFkKHZhbCwgbGVuKSB7XG4gIHZhbCA9IFN0cmluZyh2YWwpO1xuICBsZW4gPSBsZW4gfHwgMjtcbiAgd2hpbGUgKHZhbC5sZW5ndGggPCBsZW4pIHtcbiAgICB2YWwgPSAnMCcgKyB2YWw7XG4gIH1cbiAgcmV0dXJuIHZhbDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIElTTyA4NjAxIHdlZWsgbnVtYmVyXG4gKiBCYXNlZCBvbiBjb21tZW50cyBmcm9tXG4gKiBodHRwOi8vdGVjaGJsb2cucHJvY3VyaW9zLm5sL2svbjYxOC9uZXdzL3ZpZXcvMzM3OTYvMTQ4NjMvQ2FsY3VsYXRlLUlTTy04NjAxLXdlZWstYW5kLXllYXItaW4tamF2YXNjcmlwdC5odG1sXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBgZGF0ZWBcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0V2VlayhkYXRlKSB7XG4gIC8vIFJlbW92ZSB0aW1lIGNvbXBvbmVudHMgb2YgZGF0ZVxuICB2YXIgdGFyZ2V0VGh1cnNkYXkgPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpO1xuXG4gIC8vIENoYW5nZSBkYXRlIHRvIFRodXJzZGF5IHNhbWUgd2Vla1xuICB0YXJnZXRUaHVyc2RheS5zZXREYXRlKHRhcmdldFRodXJzZGF5LmdldERhdGUoKSAtICgodGFyZ2V0VGh1cnNkYXkuZ2V0RGF5KCkgKyA2KSAlIDcpICsgMyk7XG5cbiAgLy8gVGFrZSBKYW51YXJ5IDR0aCBhcyBpdCBpcyBhbHdheXMgaW4gd2VlayAxIChzZWUgSVNPIDg2MDEpXG4gIHZhciBmaXJzdFRodXJzZGF5ID0gbmV3IERhdGUodGFyZ2V0VGh1cnNkYXkuZ2V0RnVsbFllYXIoKSwgMCwgNCk7XG5cbiAgLy8gQ2hhbmdlIGRhdGUgdG8gVGh1cnNkYXkgc2FtZSB3ZWVrXG4gIGZpcnN0VGh1cnNkYXkuc2V0RGF0ZShmaXJzdFRodXJzZGF5LmdldERhdGUoKSAtICgoZmlyc3RUaHVyc2RheS5nZXREYXkoKSArIDYpICUgNykgKyAzKTtcblxuICAvLyBDaGVjayBpZiBkYXlsaWdodC1zYXZpbmctdGltZS1zd2l0Y2ggb2NjdXJyZWQgYW5kIGNvcnJlY3QgZm9yIGl0XG4gIHZhciBkcyA9IHRhcmdldFRodXJzZGF5LmdldFRpbWV6b25lT2Zmc2V0KCkgLSBmaXJzdFRodXJzZGF5LmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIHRhcmdldFRodXJzZGF5LnNldEhvdXJzKHRhcmdldFRodXJzZGF5LmdldEhvdXJzKCkgLSBkcyk7XG5cbiAgLy8gTnVtYmVyIG9mIHdlZWtzIGJldHdlZW4gdGFyZ2V0IFRodXJzZGF5IGFuZCBmaXJzdCBUaHVyc2RheVxuICB2YXIgd2Vla0RpZmYgPSAodGFyZ2V0VGh1cnNkYXkgLSBmaXJzdFRodXJzZGF5KSAvICg4NjQwMDAwMCo3KTtcbiAgcmV0dXJuIDEgKyBNYXRoLmZsb29yKHdlZWtEaWZmKTtcbn1cblxuLyoqXG4gKiBHZXQgSVNPLTg2MDEgbnVtZXJpYyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF5IG9mIHRoZSB3ZWVrXG4gKiAxIChmb3IgTW9uZGF5KSB0aHJvdWdoIDcgKGZvciBTdW5kYXkpXG4gKiBcbiAqIEBwYXJhbSAge09iamVjdH0gYGRhdGVgXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldERheU9mV2VlayhkYXRlKSB7XG4gIHZhciBkb3cgPSBkYXRlLmdldERheSgpO1xuICBpZihkb3cgPT09IDApIHtcbiAgICBkb3cgPSA3O1xuICB9XG4gIHJldHVybiBkb3c7XG59XG5cbi8qKlxuICoga2luZC1vZiBzaG9ydGN1dFxuICogQHBhcmFtICB7Kn0gdmFsXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGtpbmRPZih2YWwpIHtcbiAgaWYgKHZhbCA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnbnVsbCc7XG4gIH1cblxuICBpZiAodmFsID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbCAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbDtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICByZXR1cm4gJ2FycmF5JztcbiAgfVxuXG4gIHJldHVybiB7fS50b1N0cmluZy5jYWxsKHZhbClcbiAgICAuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG5cblxuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBkYXRlRm9ybWF0O1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZGF0ZUZvcm1hdDtcbiAgfSBlbHNlIHtcbiAgICBnbG9iYWwuZGF0ZUZvcm1hdCA9IGRhdGVGb3JtYXQ7XG4gIH1cbn0pKHRoaXMpO1xuIiwiLyohXG4gKiBwYWQtbGVmdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvcGFkLWxlZnQ+XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEpvbiBTY2hsaW5rZXJ0LlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHJlcGVhdCA9IHJlcXVpcmUoJ3JlcGVhdC1zdHJpbmcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYWRMZWZ0KHN0ciwgbnVtLCBjaCkge1xuICBzdHIgPSBzdHIudG9TdHJpbmcoKTtcblxuICBpZiAodHlwZW9mIG51bSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgaWYgKGNoID09PSAwKSB7XG4gICAgY2ggPSAnMCc7XG4gIH0gZWxzZSBpZiAoY2gpIHtcbiAgICBjaCA9IGNoLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgY2ggPSAnICc7XG4gIH1cblxuICByZXR1cm4gcmVwZWF0KGNoLCBudW0gLSBzdHIubGVuZ3RoKSArIHN0cjtcbn07XG4iLCJpbXBvcnQgZGF0ZWZvcm1hdCBmcm9tICdkYXRlZm9ybWF0JztcbmltcG9ydCBhc3NpZ24gZnJvbSAnb2JqZWN0LWFzc2lnbic7XG5pbXBvcnQgcGFkTGVmdCBmcm9tICdwYWQtbGVmdCc7XG5pbXBvcnQgeyBnZXRDbGllbnRBUEkgfSBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5sZXQgbGluaztcbmxldCBkZWZhdWx0RXh0cyA9IHsgZXh0ZW5zaW9uOiAnJywgcHJlZml4OiAnJywgc3VmZml4OiAnJyB9O1xuXG4vLyBBbHRlcm5hdGl2ZSBzb2x1dGlvbiBmb3Igc2F2aW5nIGZpbGVzLFxuLy8gYSBiaXQgc2xvd2VyIGFuZCBkb2VzIG5vdCB3b3JrIGluIFNhZmFyaVxuLy8gZnVuY3Rpb24gZmV0Y2hCbG9iRnJvbURhdGFVUkwgKGRhdGFVUkwpIHtcbi8vICAgcmV0dXJuIHdpbmRvdy5mZXRjaChkYXRhVVJMKS50aGVuKHJlcyA9PiByZXMuYmxvYigpKTtcbi8vIH1cblxuY29uc3Qgc3VwcG9ydGVkRW5jb2RpbmdzID0gW1xuICAnaW1hZ2UvcG5nJyxcbiAgJ2ltYWdlL2pwZWcnLFxuICAnaW1hZ2Uvd2VicCdcbl07XG5cbmZ1bmN0aW9uIHN0cmVhbSAoaXNTdGFydCwgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgb3B0cyA9IGFzc2lnbih7fSwgZGVmYXVsdEV4dHMsIG9wdHMpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gcmVzb2x2ZUZpbGVuYW1lKE9iamVjdC5hc3NpZ24oe30sIG9wdHMsIHtcbiAgICAgIGV4dGVuc2lvbjogJycsXG4gICAgICBmcmFtZTogdW5kZWZpbmVkXG4gICAgfSkpO1xuICAgIGNvbnN0IGZ1bmMgPSBpc1N0YXJ0ID8gJ3N0cmVhbVN0YXJ0JyA6ICdzdHJlYW1FbmQnO1xuICAgIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICAgIGlmIChjbGllbnQgJiYgY2xpZW50Lm91dHB1dCAmJiB0eXBlb2YgY2xpZW50W2Z1bmNdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gY2xpZW50W2Z1bmNdKGFzc2lnbih7fSwgb3B0cywgeyBmaWxlbmFtZSB9KSlcbiAgICAgICAgLnRoZW4oZXYgPT4gcmVzb2x2ZShldikpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZSh7IGZpbGVuYW1lLCBjbGllbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJlYW1TdGFydCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBzdHJlYW0odHJ1ZSwgb3B0cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJlYW1FbmQgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gc3RyZWFtKGZhbHNlLCBvcHRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydENhbnZhcyAoY2FudmFzLCBvcHQgPSB7fSkge1xuICBjb25zdCBlbmNvZGluZyA9IG9wdC5lbmNvZGluZyB8fCAnaW1hZ2UvcG5nJztcbiAgaWYgKCFzdXBwb3J0ZWRFbmNvZGluZ3MuaW5jbHVkZXMoZW5jb2RpbmcpKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY2FudmFzIGVuY29kaW5nICR7ZW5jb2Rpbmd9YCk7XG4gIGxldCBleHRlbnNpb24gPSAoZW5jb2Rpbmcuc3BsaXQoJy8nKVsxXSB8fCAnJykucmVwbGFjZSgvanBlZy9pLCAnanBnJyk7XG4gIGlmIChleHRlbnNpb24pIGV4dGVuc2lvbiA9IGAuJHtleHRlbnNpb259YC50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4ge1xuICAgIGV4dGVuc2lvbixcbiAgICB0eXBlOiBlbmNvZGluZyxcbiAgICBkYXRhVVJMOiBjYW52YXMudG9EYXRhVVJMKGVuY29kaW5nLCBvcHQuZW5jb2RpbmdRdWFsaXR5KVxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVCbG9iRnJvbURhdGFVUkwgKGRhdGFVUkwpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3Qgc3BsaXRJbmRleCA9IGRhdGFVUkwuaW5kZXhPZignLCcpO1xuICAgIGlmIChzcGxpdEluZGV4ID09PSAtMSkge1xuICAgICAgcmVzb2x2ZShuZXcgd2luZG93LkJsb2IoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJhc2U2NCA9IGRhdGFVUkwuc2xpY2Uoc3BsaXRJbmRleCArIDEpO1xuICAgIGNvbnN0IGJ5dGVTdHJpbmcgPSB3aW5kb3cuYXRvYihiYXNlNjQpO1xuICAgIGNvbnN0IHR5cGUgPSBkYXRhVVJMLnNsaWNlKDAsIHNwbGl0SW5kZXgpO1xuICAgIGNvbnN0IG1pbWVNYXRjaCA9IC9kYXRhOihbXjtdKykvLmV4ZWModHlwZSk7XG4gICAgY29uc3QgbWltZSA9IChtaW1lTWF0Y2ggPyBtaW1lTWF0Y2hbMV0gOiAnJykgfHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFiID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVTdHJpbmcubGVuZ3RoKTtcbiAgICBjb25zdCBpYSA9IG5ldyBVaW50OEFycmF5KGFiKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVTdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlhW2ldID0gYnl0ZVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgICByZXNvbHZlKG5ldyB3aW5kb3cuQmxvYihbIGFiIF0sIHsgdHlwZTogbWltZSB9KSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F2ZURhdGFVUkwgKGRhdGFVUkwsIG9wdHMgPSB7fSkge1xuICByZXR1cm4gY3JlYXRlQmxvYkZyb21EYXRhVVJMKGRhdGFVUkwpXG4gICAgLnRoZW4oYmxvYiA9PiBzYXZlQmxvYihibG9iLCBvcHRzKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXZlQmxvYiAoYmxvYiwgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBvcHRzID0gYXNzaWduKHt9LCBkZWZhdWx0RXh0cywgb3B0cyk7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBvcHRzLmZpbGVuYW1lO1xuXG4gICAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gICAgaWYgKGNsaWVudCAmJiB0eXBlb2YgY2xpZW50LnNhdmVCbG9iID09PSAnZnVuY3Rpb24nICYmIGNsaWVudC5vdXRwdXQpIHtcbiAgICAgIC8vIG5hdGl2ZSBzYXZpbmcgdXNpbmcgYSBDTEkgdG9vbFxuICAgICAgcmV0dXJuIGNsaWVudC5zYXZlQmxvYihibG9iLCBhc3NpZ24oe30sIG9wdHMsIHsgZmlsZW5hbWUgfSkpXG4gICAgICAgIC50aGVuKGV2ID0+IHJlc29sdmUoZXYpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZm9yY2UgZG93bmxvYWRcbiAgICAgIGlmICghbGluaykge1xuICAgICAgICBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBsaW5rLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgbGluay50YXJnZXQgPSAnX2JsYW5rJztcbiAgICAgIH1cbiAgICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICAgIGxpbmsuaHJlZiA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgIGxpbmsub25jbGljayA9ICgpID0+IHtcbiAgICAgICAgbGluay5vbmNsaWNrID0gbm9vcDtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwoYmxvYik7XG4gICAgICAgICAgaWYgKGxpbmsucGFyZW50RWxlbWVudCkgbGluay5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGxpbmspO1xuICAgICAgICAgIGxpbmsucmVtb3ZlQXR0cmlidXRlKCdocmVmJyk7XG4gICAgICAgICAgcmVzb2x2ZSh7IGZpbGVuYW1lLCBjbGllbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBsaW5rLmNsaWNrKCk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdmVGaWxlIChkYXRhLCBvcHRzID0ge30pIHtcbiAgY29uc3QgcGFydHMgPSBBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSA6IFsgZGF0YSBdO1xuICBjb25zdCBibG9iID0gbmV3IHdpbmRvdy5CbG9iKHBhcnRzLCB7IHR5cGU6IG9wdHMudHlwZSB8fCAnJyB9KTtcbiAgcmV0dXJuIHNhdmVCbG9iKGJsb2IsIG9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZVN0YW1wICgpIHtcbiAgY29uc3QgZGF0ZUZvcm1hdFN0ciA9IGB5eXl5Lm1tLmRkLUhILk1NLnNzYDtcbiAgcmV0dXJuIGRhdGVmb3JtYXQobmV3IERhdGUoKSwgZGF0ZUZvcm1hdFN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0RmlsZSAocHJlZml4ID0gJycsIHN1ZmZpeCA9ICcnLCBleHQpIHtcbiAgLy8gY29uc3QgZGF0ZUZvcm1hdFN0ciA9IGB5eXl5Lm1tLmRkLUhILk1NLnNzYDtcbiAgY29uc3QgZGF0ZUZvcm1hdFN0ciA9IGB5eXl5LW1tLWRkICdhdCcgaC5NTS5zcyBUVGA7XG4gIHJldHVybiBgJHtwcmVmaXh9JHtkYXRlZm9ybWF0KG5ldyBEYXRlKCksIGRhdGVGb3JtYXRTdHIpfSR7c3VmZml4fSR7ZXh0fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRmlsZW5hbWUgKG9wdCA9IHt9KSB7XG4gIG9wdCA9IGFzc2lnbih7fSwgb3B0KTtcblxuICAvLyBDdXN0b20gZmlsZW5hbWUgZnVuY3Rpb25cbiAgaWYgKHR5cGVvZiBvcHQuZmlsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBvcHQuZmlsZShvcHQpO1xuICB9IGVsc2UgaWYgKG9wdC5maWxlKSB7XG4gICAgcmV0dXJuIG9wdC5maWxlO1xuICB9XG5cbiAgbGV0IGZyYW1lID0gbnVsbDtcbiAgbGV0IGV4dGVuc2lvbiA9ICcnO1xuICBpZiAodHlwZW9mIG9wdC5leHRlbnNpb24gPT09ICdzdHJpbmcnKSBleHRlbnNpb24gPSBvcHQuZXh0ZW5zaW9uO1xuXG4gIGlmICh0eXBlb2Ygb3B0LmZyYW1lID09PSAnbnVtYmVyJykge1xuICAgIGxldCB0b3RhbEZyYW1lcztcbiAgICBpZiAodHlwZW9mIG9wdC50b3RhbEZyYW1lcyA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRvdGFsRnJhbWVzID0gb3B0LnRvdGFsRnJhbWVzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b3RhbEZyYW1lcyA9IE1hdGgubWF4KDEwMDAwLCBvcHQuZnJhbWUpO1xuICAgIH1cbiAgICBmcmFtZSA9IHBhZExlZnQoU3RyaW5nKG9wdC5mcmFtZSksIFN0cmluZyh0b3RhbEZyYW1lcykubGVuZ3RoLCAnMCcpO1xuICB9XG5cbiAgY29uc3QgbGF5ZXJTdHIgPSBpc0Zpbml0ZShvcHQudG90YWxMYXllcnMpICYmIGlzRmluaXRlKG9wdC5sYXllcikgJiYgb3B0LnRvdGFsTGF5ZXJzID4gMSA/IGAke29wdC5sYXllcn1gIDogJyc7XG4gIGlmIChmcmFtZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIFsgbGF5ZXJTdHIsIGZyYW1lIF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy0nKSArIGV4dGVuc2lvbjtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkZWZhdWx0RmlsZU5hbWUgPSBvcHQudGltZVN0YW1wO1xuICAgIHJldHVybiBbIG9wdC5wcmVmaXgsIG9wdC5uYW1lIHx8IGRlZmF1bHRGaWxlTmFtZSwgbGF5ZXJTdHIsIG9wdC5oYXNoLCBvcHQuc3VmZml4IF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy0nKSArIGV4dGVuc2lvbjtcbiAgfVxufVxuIiwiLy8gSGFuZGxlIHNvbWUgY29tbW9uIHR5cG9zXG5jb25zdCBjb21tb25UeXBvcyA9IHtcbiAgZGltZW5zaW9uOiAnZGltZW5zaW9ucycsXG4gIGFuaW1hdGVkOiAnYW5pbWF0ZScsXG4gIGFuaW1hdGluZzogJ2FuaW1hdGUnLFxuICB1bml0OiAndW5pdHMnLFxuICBQNTogJ3A1JyxcbiAgcGl4ZWxsYXRlZDogJ3BpeGVsYXRlZCcsXG4gIGxvb3Bpbmc6ICdsb29wJyxcbiAgcGl4ZWxQZXJJbmNoOiAncGl4ZWxzJ1xufTtcblxuLy8gSGFuZGxlIGFsbCBvdGhlciB0eXBvc1xuY29uc3QgYWxsS2V5cyA9IFtcbiAgJ2RpbWVuc2lvbnMnLCAndW5pdHMnLCAncGl4ZWxzUGVySW5jaCcsICdvcmllbnRhdGlvbicsXG4gICdzY2FsZVRvRml0JywgJ3NjYWxlVG9WaWV3JywgJ2JsZWVkJywgJ3BpeGVsUmF0aW8nLFxuICAnZXhwb3J0UGl4ZWxSYXRpbycsICdtYXhQaXhlbFJhdGlvJywgJ3NjYWxlQ29udGV4dCcsXG4gICdyZXNpemVDYW52YXMnLCAnc3R5bGVDYW52YXMnLCAnY2FudmFzJywgJ2NvbnRleHQnLCAnYXR0cmlidXRlcycsXG4gICdwYXJlbnQnLCAnZmlsZScsICduYW1lJywgJ3ByZWZpeCcsICdzdWZmaXgnLCAnYW5pbWF0ZScsICdwbGF5aW5nJyxcbiAgJ2xvb3AnLCAnZHVyYXRpb24nLCAndG90YWxGcmFtZXMnLCAnZnBzJywgJ3BsYXliYWNrUmF0ZScsICd0aW1lU2NhbGUnLFxuICAnZnJhbWUnLCAndGltZScsICdmbHVzaCcsICdwaXhlbGF0ZWQnLCAnaG90a2V5cycsICdwNScsICdpZCcsXG4gICdzY2FsZVRvRml0UGFkZGluZycsICdkYXRhJywgJ3BhcmFtcycsICdlbmNvZGluZycsICdlbmNvZGluZ1F1YWxpdHknXG5dO1xuXG4vLyBUaGlzIGlzIGZhaXJseSBvcGluaW9uYXRlZCBhbmQgZm9yY2VzIHVzZXJzIHRvIHVzZSB0aGUgJ2RhdGEnIHBhcmFtZXRlclxuLy8gaWYgdGhleSB3YW50IHRvIHBhc3MgYWxvbmcgbm9uLXNldHRpbmcgb2JqZWN0cy4uLlxuZXhwb3J0IGNvbnN0IGNoZWNrU2V0dGluZ3MgPSAoc2V0dGluZ3MpID0+IHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHNldHRpbmdzKTtcbiAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgaWYgKGtleSBpbiBjb21tb25UeXBvcykge1xuICAgICAgY29uc3QgYWN0dWFsID0gY29tbW9uVHlwb3Nba2V5XTtcbiAgICAgIGNvbnNvbGUud2FybihgW2NhbnZhcy1za2V0Y2hdIENvdWxkIG5vdCByZWNvZ25pemUgdGhlIHNldHRpbmcgXCIke2tleX1cIiwgZGlkIHlvdSBtZWFuIFwiJHthY3R1YWx9XCI/YCk7XG4gICAgfSBlbHNlIGlmICghYWxsS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFtjYW52YXMtc2tldGNoXSBDb3VsZCBub3QgcmVjb2duaXplIHRoZSBzZXR0aW5nIFwiJHtrZXl9XCJgKTtcbiAgICB9XG4gIH0pO1xufTtcbiIsImNvbnN0IGRlZmF1bHRVbml0cyA9ICdtbSc7XG5cbmNvbnN0IGRhdGEgPSBbXG4gIC8vIENvbW1vbiBQYXBlciBTaXplc1xuICAvLyAoTW9zdGx5IE5vcnRoLUFtZXJpY2FuIGJhc2VkKVxuICBbICdwb3N0Y2FyZCcsIDEwMS42LCAxNTIuNCBdLFxuICBbICdwb3N0ZXItc21hbGwnLCAyODAsIDQzMCBdLFxuICBbICdwb3N0ZXInLCA0NjAsIDYxMCBdLFxuICBbICdwb3N0ZXItbGFyZ2UnLCA2MTAsIDkxMCBdLFxuICBbICdidXNpbmVzcy1jYXJkJywgNTAuOCwgODguOSBdLFxuXG4gIC8vIFBob3RvZ3JhcGhpYyBQcmludCBQYXBlciBTaXplc1xuICBbICcycicsIDY0LCA4OSBdLFxuICBbICczcicsIDg5LCAxMjcgXSxcbiAgWyAnNHInLCAxMDIsIDE1MiBdLFxuICBbICc1cicsIDEyNywgMTc4IF0sIC8vIDXigLN4N+KAs1xuICBbICc2cicsIDE1MiwgMjAzIF0sIC8vIDbigLN4OOKAs1xuICBbICc4cicsIDIwMywgMjU0IF0sIC8vIDjigLN4MTDigLNcbiAgWyAnMTByJywgMjU0LCAzMDUgXSwgLy8gMTDigLN4MTLigLNcbiAgWyAnMTFyJywgMjc5LCAzNTYgXSwgLy8gMTHigLN4MTTigLNcbiAgWyAnMTJyJywgMzA1LCAzODEgXSxcblxuICAvLyBTdGFuZGFyZCBQYXBlciBTaXplc1xuICBbICdhMCcsIDg0MSwgMTE4OSBdLFxuICBbICdhMScsIDU5NCwgODQxIF0sXG4gIFsgJ2EyJywgNDIwLCA1OTQgXSxcbiAgWyAnYTMnLCAyOTcsIDQyMCBdLFxuICBbICdhNCcsIDIxMCwgMjk3IF0sXG4gIFsgJ2E1JywgMTQ4LCAyMTAgXSxcbiAgWyAnYTYnLCAxMDUsIDE0OCBdLFxuICBbICdhNycsIDc0LCAxMDUgXSxcbiAgWyAnYTgnLCA1MiwgNzQgXSxcbiAgWyAnYTknLCAzNywgNTIgXSxcbiAgWyAnYTEwJywgMjYsIDM3IF0sXG4gIFsgJzJhMCcsIDExODksIDE2ODIgXSxcbiAgWyAnNGEwJywgMTY4MiwgMjM3OCBdLFxuICBbICdiMCcsIDEwMDAsIDE0MTQgXSxcbiAgWyAnYjEnLCA3MDcsIDEwMDAgXSxcbiAgWyAnYjErJywgNzIwLCAxMDIwIF0sXG4gIFsgJ2IyJywgNTAwLCA3MDcgXSxcbiAgWyAnYjIrJywgNTIwLCA3MjAgXSxcbiAgWyAnYjMnLCAzNTMsIDUwMCBdLFxuICBbICdiNCcsIDI1MCwgMzUzIF0sXG4gIFsgJ2I1JywgMTc2LCAyNTAgXSxcbiAgWyAnYjYnLCAxMjUsIDE3NiBdLFxuICBbICdiNycsIDg4LCAxMjUgXSxcbiAgWyAnYjgnLCA2MiwgODggXSxcbiAgWyAnYjknLCA0NCwgNjIgXSxcbiAgWyAnYjEwJywgMzEsIDQ0IF0sXG4gIFsgJ2IxMScsIDIyLCAzMiBdLFxuICBbICdiMTInLCAxNiwgMjIgXSxcbiAgWyAnYzAnLCA5MTcsIDEyOTcgXSxcbiAgWyAnYzEnLCA2NDgsIDkxNyBdLFxuICBbICdjMicsIDQ1OCwgNjQ4IF0sXG4gIFsgJ2MzJywgMzI0LCA0NTggXSxcbiAgWyAnYzQnLCAyMjksIDMyNCBdLFxuICBbICdjNScsIDE2MiwgMjI5IF0sXG4gIFsgJ2M2JywgMTE0LCAxNjIgXSxcbiAgWyAnYzcnLCA4MSwgMTE0IF0sXG4gIFsgJ2M4JywgNTcsIDgxIF0sXG4gIFsgJ2M5JywgNDAsIDU3IF0sXG4gIFsgJ2MxMCcsIDI4LCA0MCBdLFxuICBbICdjMTEnLCAyMiwgMzIgXSxcbiAgWyAnYzEyJywgMTYsIDIyIF0sXG5cbiAgLy8gVXNlIGluY2hlcyBmb3IgTm9ydGggQW1lcmljYW4gc2l6ZXMsXG4gIC8vIGFzIGl0IHByb2R1Y2VzIGxlc3MgZmxvYXQgcHJlY2lzaW9uIGVycm9yc1xuICBbICdoYWxmLWxldHRlcicsIDUuNSwgOC41LCAnaW4nIF0sXG4gIFsgJ2xldHRlcicsIDguNSwgMTEsICdpbicgXSxcbiAgWyAnbGVnYWwnLCA4LjUsIDE0LCAnaW4nIF0sXG4gIFsgJ2p1bmlvci1sZWdhbCcsIDUsIDgsICdpbicgXSxcbiAgWyAnbGVkZ2VyJywgMTEsIDE3LCAnaW4nIF0sXG4gIFsgJ3RhYmxvaWQnLCAxMSwgMTcsICdpbicgXSxcbiAgWyAnYW5zaS1hJywgOC41LCAxMS4wLCAnaW4nIF0sXG4gIFsgJ2Fuc2ktYicsIDExLjAsIDE3LjAsICdpbicgXSxcbiAgWyAnYW5zaS1jJywgMTcuMCwgMjIuMCwgJ2luJyBdLFxuICBbICdhbnNpLWQnLCAyMi4wLCAzNC4wLCAnaW4nIF0sXG4gIFsgJ2Fuc2ktZScsIDM0LjAsIDQ0LjAsICdpbicgXSxcbiAgWyAnYXJjaC1hJywgOSwgMTIsICdpbicgXSxcbiAgWyAnYXJjaC1iJywgMTIsIDE4LCAnaW4nIF0sXG4gIFsgJ2FyY2gtYycsIDE4LCAyNCwgJ2luJyBdLFxuICBbICdhcmNoLWQnLCAyNCwgMzYsICdpbicgXSxcbiAgWyAnYXJjaC1lJywgMzYsIDQ4LCAnaW4nIF0sXG4gIFsgJ2FyY2gtZTEnLCAzMCwgNDIsICdpbicgXSxcbiAgWyAnYXJjaC1lMicsIDI2LCAzOCwgJ2luJyBdLFxuICBbICdhcmNoLWUzJywgMjcsIDM5LCAnaW4nIF1cbl07XG5cbmV4cG9ydCBkZWZhdWx0IGRhdGEucmVkdWNlKChkaWN0LCBwcmVzZXQpID0+IHtcbiAgY29uc3QgaXRlbSA9IHtcbiAgICB1bml0czogcHJlc2V0WzNdIHx8IGRlZmF1bHRVbml0cyxcbiAgICBkaW1lbnNpb25zOiBbIHByZXNldFsxXSwgcHJlc2V0WzJdIF1cbiAgfTtcbiAgZGljdFtwcmVzZXRbMF1dID0gaXRlbTtcbiAgZGljdFtwcmVzZXRbMF0ucmVwbGFjZSgvLS9nLCAnICcpXSA9IGl0ZW07XG4gIHJldHVybiBkaWN0O1xufSwge30pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gYXJndW1lbnRzW2ldO1xuICAgIH1cbn07XG4iLCJ2YXIgZGVmaW5lZCA9IHJlcXVpcmUoJ2RlZmluZWQnKTtcbnZhciB1bml0cyA9IFsgJ21tJywgJ2NtJywgJ20nLCAncGMnLCAncHQnLCAnaW4nLCAnZnQnLCAncHgnIF07XG5cbnZhciBjb252ZXJzaW9ucyA9IHtcbiAgLy8gbWV0cmljXG4gIG06IHtcbiAgICBzeXN0ZW06ICdtZXRyaWMnLFxuICAgIGZhY3RvcjogMVxuICB9LFxuICBjbToge1xuICAgIHN5c3RlbTogJ21ldHJpYycsXG4gICAgZmFjdG9yOiAxIC8gMTAwXG4gIH0sXG4gIG1tOiB7XG4gICAgc3lzdGVtOiAnbWV0cmljJyxcbiAgICBmYWN0b3I6IDEgLyAxMDAwXG4gIH0sXG4gIC8vIGltcGVyaWFsXG4gIHB0OiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMSAvIDcyXG4gIH0sXG4gIHBjOiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMSAvIDZcbiAgfSxcbiAgaW46IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxXG4gIH0sXG4gIGZ0OiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMTJcbiAgfVxufTtcblxuY29uc3QgYW5jaG9ycyA9IHtcbiAgbWV0cmljOiB7XG4gICAgdW5pdDogJ20nLFxuICAgIHJhdGlvOiAxIC8gMC4wMjU0XG4gIH0sXG4gIGltcGVyaWFsOiB7XG4gICAgdW5pdDogJ2luJyxcbiAgICByYXRpbzogMC4wMjU0XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJvdW5kICh2YWx1ZSwgZGVjaW1hbHMpIHtcbiAgcmV0dXJuIE51bWJlcihNYXRoLnJvdW5kKHZhbHVlICsgJ2UnICsgZGVjaW1hbHMpICsgJ2UtJyArIGRlY2ltYWxzKTtcbn1cblxuZnVuY3Rpb24gY29udmVydERpc3RhbmNlICh2YWx1ZSwgZnJvbVVuaXQsIHRvVW5pdCwgb3B0cykge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCAhaXNGaW5pdGUodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIG11c3QgYmUgYSBmaW5pdGUgbnVtYmVyJyk7XG4gIGlmICghZnJvbVVuaXQgfHwgIXRvVW5pdCkgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHNwZWNpZnkgZnJvbSBhbmQgdG8gdW5pdHMnKTtcblxuICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgdmFyIHBpeGVsc1BlckluY2ggPSBkZWZpbmVkKG9wdHMucGl4ZWxzUGVySW5jaCwgOTYpO1xuICB2YXIgcHJlY2lzaW9uID0gb3B0cy5wcmVjaXNpb247XG4gIHZhciByb3VuZFBpeGVsID0gb3B0cy5yb3VuZFBpeGVsICE9PSBmYWxzZTtcblxuICBmcm9tVW5pdCA9IGZyb21Vbml0LnRvTG93ZXJDYXNlKCk7XG4gIHRvVW5pdCA9IHRvVW5pdC50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmICh1bml0cy5pbmRleE9mKGZyb21Vbml0KSA9PT0gLTEpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmcm9tIHVuaXQgXCInICsgZnJvbVVuaXQgKyAnXCIsIG11c3QgYmUgb25lIG9mOiAnICsgdW5pdHMuam9pbignLCAnKSk7XG4gIGlmICh1bml0cy5pbmRleE9mKHRvVW5pdCkgPT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZnJvbSB1bml0IFwiJyArIHRvVW5pdCArICdcIiwgbXVzdCBiZSBvbmUgb2Y6ICcgKyB1bml0cy5qb2luKCcsICcpKTtcblxuICBpZiAoZnJvbVVuaXQgPT09IHRvVW5pdCkge1xuICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gY29udmVydCBmcm9tIEEgdG8gQiBzaW5jZSB0aGV5IGFyZSB0aGUgc2FtZSBhbHJlYWR5XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgdmFyIHRvRmFjdG9yID0gMTtcbiAgdmFyIGZyb21GYWN0b3IgPSAxO1xuICB2YXIgaXNUb1BpeGVsID0gZmFsc2U7XG5cbiAgaWYgKGZyb21Vbml0ID09PSAncHgnKSB7XG4gICAgZnJvbUZhY3RvciA9IDEgLyBwaXhlbHNQZXJJbmNoO1xuICAgIGZyb21Vbml0ID0gJ2luJztcbiAgfVxuICBpZiAodG9Vbml0ID09PSAncHgnKSB7XG4gICAgaXNUb1BpeGVsID0gdHJ1ZTtcbiAgICB0b0ZhY3RvciA9IHBpeGVsc1BlckluY2g7XG4gICAgdG9Vbml0ID0gJ2luJztcbiAgfVxuXG4gIHZhciBmcm9tVW5pdERhdGEgPSBjb252ZXJzaW9uc1tmcm9tVW5pdF07XG4gIHZhciB0b1VuaXREYXRhID0gY29udmVyc2lvbnNbdG9Vbml0XTtcblxuICAvLyBzb3VyY2UgdG8gYW5jaG9yIGluc2lkZSBzb3VyY2UncyBzeXN0ZW1cbiAgdmFyIGFuY2hvciA9IHZhbHVlICogZnJvbVVuaXREYXRhLmZhY3RvciAqIGZyb21GYWN0b3I7XG5cbiAgLy8gaWYgc3lzdGVtcyBkaWZmZXIsIGNvbnZlcnQgb25lIHRvIGFub3RoZXJcbiAgaWYgKGZyb21Vbml0RGF0YS5zeXN0ZW0gIT09IHRvVW5pdERhdGEuc3lzdGVtKSB7XG4gICAgLy8gcmVndWxhciAnbScgdG8gJ2luJyBhbmQgc28gZm9ydGhcbiAgICBhbmNob3IgKj0gYW5jaG9yc1tmcm9tVW5pdERhdGEuc3lzdGVtXS5yYXRpbztcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBhbmNob3IgLyB0b1VuaXREYXRhLmZhY3RvciAqIHRvRmFjdG9yO1xuICBpZiAoaXNUb1BpeGVsICYmIHJvdW5kUGl4ZWwpIHtcbiAgICByZXN1bHQgPSBNYXRoLnJvdW5kKHJlc3VsdCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHByZWNpc2lvbiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUocHJlY2lzaW9uKSkge1xuICAgIHJlc3VsdCA9IHJvdW5kKHJlc3VsdCwgcHJlY2lzaW9uKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnREaXN0YW5jZTtcbm1vZHVsZS5leHBvcnRzLnVuaXRzID0gdW5pdHM7XG4iLCJpbXBvcnQgcGFwZXJTaXplcyBmcm9tICcuL3BhcGVyLXNpemVzJztcbmltcG9ydCBjb252ZXJ0TGVuZ3RoIGZyb20gJ2NvbnZlcnQtbGVuZ3RoJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERpbWVuc2lvbnNGcm9tUHJlc2V0IChkaW1lbnNpb25zLCB1bml0c1RvID0gJ3B4JywgcGl4ZWxzUGVySW5jaCA9IDcyKSB7XG4gIGlmICh0eXBlb2YgZGltZW5zaW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBrZXkgPSBkaW1lbnNpb25zLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCEoa2V5IGluIHBhcGVyU2l6ZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBkaW1lbnNpb24gcHJlc2V0IFwiJHtkaW1lbnNpb25zfVwiIGlzIG5vdCBzdXBwb3J0ZWQgb3IgY291bGQgbm90IGJlIGZvdW5kOyB0cnkgdXNpbmcgYTQsIGEzLCBwb3N0Y2FyZCwgbGV0dGVyLCBldGMuYClcbiAgICB9XG4gICAgY29uc3QgcHJlc2V0ID0gcGFwZXJTaXplc1trZXldO1xuICAgIHJldHVybiBwcmVzZXQuZGltZW5zaW9ucy5tYXAoZCA9PiB7XG4gICAgICByZXR1cm4gY29udmVydERpc3RhbmNlKGQsIHByZXNldC51bml0cywgdW5pdHNUbywgcGl4ZWxzUGVySW5jaCk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRpbWVuc2lvbnM7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnREaXN0YW5jZSAoZGltZW5zaW9uLCB1bml0c0Zyb20gPSAncHgnLCB1bml0c1RvID0gJ3B4JywgcGl4ZWxzUGVySW5jaCA9IDcyKSB7XG4gIHJldHVybiBjb252ZXJ0TGVuZ3RoKGRpbWVuc2lvbiwgdW5pdHNGcm9tLCB1bml0c1RvLCB7XG4gICAgcGl4ZWxzUGVySW5jaCxcbiAgICBwcmVjaXNpb246IDQsXG4gICAgcm91bmRQaXhlbDogdHJ1ZVxuICB9KTtcbn1cbiIsImltcG9ydCB7IGdldERpbWVuc2lvbnNGcm9tUHJlc2V0LCBjb252ZXJ0RGlzdGFuY2UgfSBmcm9tICcuLi9kaXN0YW5jZXMnO1xuaW1wb3J0IHsgaXNCcm93c2VyLCBkZWZpbmVkIH0gZnJvbSAnLi4vdXRpbCc7XG5cbmZ1bmN0aW9uIGNoZWNrSWZIYXNEaW1lbnNpb25zIChzZXR0aW5ncykge1xuICBpZiAoIXNldHRpbmdzLmRpbWVuc2lvbnMpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBzZXR0aW5ncy5kaW1lbnNpb25zID09PSAnc3RyaW5nJykgcmV0dXJuIHRydWU7XG4gIGlmIChBcnJheS5pc0FycmF5KHNldHRpbmdzLmRpbWVuc2lvbnMpICYmIHNldHRpbmdzLmRpbWVuc2lvbnMubGVuZ3RoID49IDIpIHJldHVybiB0cnVlO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmVudFNpemUgKHByb3BzLCBzZXR0aW5ncykge1xuICAvLyBXaGVuIG5vIHsgZGltZW5zaW9uIH0gaXMgcGFzc2VkIGluIG5vZGUsIHdlIGRlZmF1bHQgdG8gSFRNTCBjYW52YXMgc2l6ZVxuICBpZiAoIWlzQnJvd3NlcigpKSB7XG4gICAgcmV0dXJuIFsgMzAwLCAxNTAgXTtcbiAgfVxuXG4gIGxldCBlbGVtZW50ID0gc2V0dGluZ3MucGFyZW50IHx8IHdpbmRvdztcblxuICBpZiAoZWxlbWVudCA9PT0gd2luZG93IHx8XG4gICAgICBlbGVtZW50ID09PSBkb2N1bWVudCB8fFxuICAgICAgZWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSkge1xuICAgIHJldHVybiBbIHdpbmRvdy5pbm5lcldpZHRoLCB3aW5kb3cuaW5uZXJIZWlnaHQgXTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIFsgd2lkdGgsIGhlaWdodCBdO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlc2l6ZUNhbnZhcyAocHJvcHMsIHNldHRpbmdzKSB7XG4gIGxldCB3aWR0aCwgaGVpZ2h0O1xuICBsZXQgc3R5bGVXaWR0aCwgc3R5bGVIZWlnaHQ7XG4gIGxldCBjYW52YXNXaWR0aCwgY2FudmFzSGVpZ2h0O1xuXG4gIGNvbnN0IGJyb3dzZXIgPSBpc0Jyb3dzZXIoKTtcbiAgY29uc3QgZGltZW5zaW9ucyA9IHNldHRpbmdzLmRpbWVuc2lvbnM7XG4gIGNvbnN0IGhhc0RpbWVuc2lvbnMgPSBjaGVja0lmSGFzRGltZW5zaW9ucyhzZXR0aW5ncyk7XG4gIGNvbnN0IGV4cG9ydGluZyA9IHByb3BzLmV4cG9ydGluZztcbiAgbGV0IHNjYWxlVG9GaXQgPSBoYXNEaW1lbnNpb25zID8gc2V0dGluZ3Muc2NhbGVUb0ZpdCAhPT0gZmFsc2UgOiBmYWxzZTtcbiAgbGV0IHNjYWxlVG9WaWV3ID0gKCFleHBvcnRpbmcgJiYgaGFzRGltZW5zaW9ucykgPyBzZXR0aW5ncy5zY2FsZVRvVmlldyA6IHRydWU7XG4gIC8vIGluIG5vZGUsIGNhbmNlbCBib3RoIG9mIHRoZXNlIG9wdGlvbnNcbiAgaWYgKCFicm93c2VyKSBzY2FsZVRvRml0ID0gc2NhbGVUb1ZpZXcgPSBmYWxzZTtcbiAgY29uc3QgdW5pdHMgPSBzZXR0aW5ncy51bml0cztcbiAgY29uc3QgcGl4ZWxzUGVySW5jaCA9ICh0eXBlb2Ygc2V0dGluZ3MucGl4ZWxzUGVySW5jaCA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoc2V0dGluZ3MucGl4ZWxzUGVySW5jaCkpID8gc2V0dGluZ3MucGl4ZWxzUGVySW5jaCA6IDcyO1xuICBjb25zdCBibGVlZCA9IGRlZmluZWQoc2V0dGluZ3MuYmxlZWQsIDApO1xuXG4gIGNvbnN0IGRldmljZVBpeGVsUmF0aW8gPSBicm93c2VyID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxO1xuICBjb25zdCBiYXNlUGl4ZWxSYXRpbyA9IHNjYWxlVG9WaWV3ID8gZGV2aWNlUGl4ZWxSYXRpbyA6IDE7XG5cbiAgbGV0IHBpeGVsUmF0aW8sIGV4cG9ydFBpeGVsUmF0aW87XG5cbiAgLy8gSWYgYSBwaXhlbCByYXRpbyBpcyBzcGVjaWZpZWQsIHdlIHdpbGwgdXNlIGl0LlxuICAvLyBPdGhlcndpc2U6XG4gIC8vICAtPiBJZiBkaW1lbnNpb24gaXMgc3BlY2lmaWVkLCB1c2UgYmFzZSByYXRpbyAoaS5lLiBzaXplIGZvciBleHBvcnQpXG4gIC8vICAtPiBJZiBubyBkaW1lbnNpb24gaXMgc3BlY2lmaWVkLCB1c2UgZGV2aWNlIHJhdGlvIChpLmUuIHNpemUgZm9yIHNjcmVlbilcbiAgaWYgKHR5cGVvZiBzZXR0aW5ncy5waXhlbFJhdGlvID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShzZXR0aW5ncy5waXhlbFJhdGlvKSkge1xuICAgIC8vIFdoZW4geyBwaXhlbFJhdGlvIH0gaXMgc3BlY2lmaWVkLCBpdCdzIGFsc28gdXNlZCBhcyBkZWZhdWx0IGV4cG9ydFBpeGVsUmF0aW8uXG4gICAgcGl4ZWxSYXRpbyA9IHNldHRpbmdzLnBpeGVsUmF0aW87XG4gICAgZXhwb3J0UGl4ZWxSYXRpbyA9IGRlZmluZWQoc2V0dGluZ3MuZXhwb3J0UGl4ZWxSYXRpbywgcGl4ZWxSYXRpbyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGhhc0RpbWVuc2lvbnMpIHtcbiAgICAgIC8vIFdoZW4gYSBkaW1lbnNpb24gaXMgc3BlY2lmaWVkLCB1c2UgdGhlIGJhc2UgcmF0aW8gcmF0aGVyIHRoYW4gc2NyZWVuIHJhdGlvXG4gICAgICBwaXhlbFJhdGlvID0gYmFzZVBpeGVsUmF0aW87XG4gICAgICAvLyBEZWZhdWx0IHRvIGEgcGl4ZWwgcmF0aW8gb2YgMSBzbyB0aGF0IHlvdSBlbmQgdXAgd2l0aCB0aGUgc2FtZSBkaW1lbnNpb25cbiAgICAgIC8vIHlvdSBzcGVjaWZpZWQsIGkuZS4gWyA1MDAsIDUwMCBdIGlzIGV4cG9ydGVkIGFzIDUwMHg1MDAgcHhcbiAgICAgIGV4cG9ydFBpeGVsUmF0aW8gPSBkZWZpbmVkKHNldHRpbmdzLmV4cG9ydFBpeGVsUmF0aW8sIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBkaW1lbnNpb24gaXMgc3BlY2lmaWVkLCBhc3N1bWUgZnVsbC1zY3JlZW4gcmV0aW5hIHNpemluZ1xuICAgICAgcGl4ZWxSYXRpbyA9IGRldmljZVBpeGVsUmF0aW87XG4gICAgICAvLyBEZWZhdWx0IHRvIHNjcmVlbiBwaXhlbCByYXRpbywgc28gdGhhdCBpdCdzIGxpa2UgdGFraW5nIGEgZGV2aWNlIHNjcmVlbnNob3RcbiAgICAgIGV4cG9ydFBpeGVsUmF0aW8gPSBkZWZpbmVkKHNldHRpbmdzLmV4cG9ydFBpeGVsUmF0aW8sIHBpeGVsUmF0aW8pO1xuICAgIH1cbiAgfVxuXG4gIC8vIENsYW1wIHBpeGVsIHJhdGlvXG4gIGlmICh0eXBlb2Ygc2V0dGluZ3MubWF4UGl4ZWxSYXRpbyA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoc2V0dGluZ3MubWF4UGl4ZWxSYXRpbykpIHtcbiAgICBwaXhlbFJhdGlvID0gTWF0aC5taW4oc2V0dGluZ3MubWF4UGl4ZWxSYXRpbywgcGl4ZWxSYXRpbyk7XG4gIH1cblxuICAvLyBIYW5kbGUgZXhwb3J0IHBpeGVsIHJhdGlvXG4gIGlmIChleHBvcnRpbmcpIHtcbiAgICBwaXhlbFJhdGlvID0gZXhwb3J0UGl4ZWxSYXRpbztcbiAgfVxuXG4gIC8vIHBhcmVudFdpZHRoID0gdHlwZW9mIHBhcmVudFdpZHRoID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHROb2RlU2l6ZVswXSA6IHBhcmVudFdpZHRoO1xuICAvLyBwYXJlbnRIZWlnaHQgPSB0eXBlb2YgcGFyZW50SGVpZ2h0ID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHROb2RlU2l6ZVsxXSA6IHBhcmVudEhlaWdodDtcblxuICBsZXQgWyBwYXJlbnRXaWR0aCwgcGFyZW50SGVpZ2h0IF0gPSBnZXRQYXJlbnRTaXplKHByb3BzLCBzZXR0aW5ncyk7XG4gIGxldCB0cmltV2lkdGgsIHRyaW1IZWlnaHQ7XG5cbiAgLy8gWW91IGNhbiBzcGVjaWZ5IGEgZGltZW5zaW9ucyBpbiBwaXhlbHMgb3IgY20vbS9pbi9ldGNcbiAgaWYgKGhhc0RpbWVuc2lvbnMpIHtcbiAgICBjb25zdCByZXN1bHQgPSBnZXREaW1lbnNpb25zRnJvbVByZXNldChkaW1lbnNpb25zLCB1bml0cywgcGl4ZWxzUGVySW5jaCk7XG4gICAgY29uc3QgaGlnaGVzdCA9IE1hdGgubWF4KHJlc3VsdFswXSwgcmVzdWx0WzFdKTtcbiAgICBjb25zdCBsb3dlc3QgPSBNYXRoLm1pbihyZXN1bHRbMF0sIHJlc3VsdFsxXSk7XG4gICAgaWYgKHNldHRpbmdzLm9yaWVudGF0aW9uKSB7XG4gICAgICBjb25zdCBsYW5kc2NhcGUgPSBzZXR0aW5ncy5vcmllbnRhdGlvbiA9PT0gJ2xhbmRzY2FwZSc7XG4gICAgICB3aWR0aCA9IGxhbmRzY2FwZSA/IGhpZ2hlc3QgOiBsb3dlc3Q7XG4gICAgICBoZWlnaHQgPSBsYW5kc2NhcGUgPyBsb3dlc3QgOiBoaWdoZXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICB3aWR0aCA9IHJlc3VsdFswXTtcbiAgICAgIGhlaWdodCA9IHJlc3VsdFsxXTtcbiAgICB9XG5cbiAgICB0cmltV2lkdGggPSB3aWR0aDtcbiAgICB0cmltSGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgLy8gQXBwbHkgYmxlZWQgd2hpY2ggaXMgYXNzdW1lZCB0byBiZSBpbiB0aGUgc2FtZSB1bml0c1xuICAgIHdpZHRoICs9IGJsZWVkICogMjtcbiAgICBoZWlnaHQgKz0gYmxlZWQgKiAyO1xuICB9IGVsc2Uge1xuICAgIHdpZHRoID0gcGFyZW50V2lkdGg7XG4gICAgaGVpZ2h0ID0gcGFyZW50SGVpZ2h0O1xuICAgIHRyaW1XaWR0aCA9IHdpZHRoO1xuICAgIHRyaW1IZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICAvLyBSZWFsIHNpemUgaW4gcGl4ZWxzIGFmdGVyIFBQSSBpcyB0YWtlbiBpbnRvIGFjY291bnRcbiAgbGV0IHJlYWxXaWR0aCA9IHdpZHRoO1xuICBsZXQgcmVhbEhlaWdodCA9IGhlaWdodDtcbiAgaWYgKGhhc0RpbWVuc2lvbnMgJiYgdW5pdHMpIHtcbiAgICAvLyBDb252ZXJ0IHRvIGRpZ2l0YWwvcGl4ZWwgdW5pdHMgaWYgbmVjZXNzYXJ5XG4gICAgcmVhbFdpZHRoID0gY29udmVydERpc3RhbmNlKHdpZHRoLCB1bml0cywgJ3B4JywgcGl4ZWxzUGVySW5jaCk7XG4gICAgcmVhbEhlaWdodCA9IGNvbnZlcnREaXN0YW5jZShoZWlnaHQsIHVuaXRzLCAncHgnLCBwaXhlbHNQZXJJbmNoKTtcbiAgfVxuXG4gIC8vIEhvdyBiaWcgdG8gc2V0IHRoZSAndmlldycgb2YgdGhlIGNhbnZhcyBpbiB0aGUgYnJvd3NlciAoaS5lLiBzdHlsZSlcbiAgc3R5bGVXaWR0aCA9IE1hdGgucm91bmQocmVhbFdpZHRoKTtcbiAgc3R5bGVIZWlnaHQgPSBNYXRoLnJvdW5kKHJlYWxIZWlnaHQpO1xuXG4gIC8vIElmIHdlIHdpc2ggdG8gc2NhbGUgdGhlIHZpZXcgdG8gdGhlIGJyb3dzZXIgd2luZG93XG4gIGlmIChzY2FsZVRvRml0ICYmICFleHBvcnRpbmcgJiYgaGFzRGltZW5zaW9ucykge1xuICAgIGNvbnN0IGFzcGVjdCA9IHdpZHRoIC8gaGVpZ2h0O1xuICAgIGNvbnN0IHdpbmRvd0FzcGVjdCA9IHBhcmVudFdpZHRoIC8gcGFyZW50SGVpZ2h0O1xuICAgIGNvbnN0IHNjYWxlVG9GaXRQYWRkaW5nID0gZGVmaW5lZChzZXR0aW5ncy5zY2FsZVRvRml0UGFkZGluZywgNDApO1xuICAgIGNvbnN0IG1heFdpZHRoID0gTWF0aC5yb3VuZChwYXJlbnRXaWR0aCAtIHNjYWxlVG9GaXRQYWRkaW5nICogMik7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gTWF0aC5yb3VuZChwYXJlbnRIZWlnaHQgLSBzY2FsZVRvRml0UGFkZGluZyAqIDIpO1xuICAgIGlmIChzdHlsZVdpZHRoID4gbWF4V2lkdGggfHwgc3R5bGVIZWlnaHQgPiBtYXhIZWlnaHQpIHtcbiAgICAgIGlmICh3aW5kb3dBc3BlY3QgPiBhc3BlY3QpIHtcbiAgICAgICAgc3R5bGVIZWlnaHQgPSBtYXhIZWlnaHQ7XG4gICAgICAgIHN0eWxlV2lkdGggPSBNYXRoLnJvdW5kKHN0eWxlSGVpZ2h0ICogYXNwZWN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlV2lkdGggPSBtYXhXaWR0aDtcbiAgICAgICAgc3R5bGVIZWlnaHQgPSBNYXRoLnJvdW5kKHN0eWxlV2lkdGggLyBhc3BlY3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNhbnZhc1dpZHRoID0gc2NhbGVUb1ZpZXcgPyBNYXRoLnJvdW5kKHBpeGVsUmF0aW8gKiBzdHlsZVdpZHRoKSA6IE1hdGgucm91bmQocGl4ZWxSYXRpbyAqIHJlYWxXaWR0aCk7XG4gIGNhbnZhc0hlaWdodCA9IHNjYWxlVG9WaWV3ID8gTWF0aC5yb3VuZChwaXhlbFJhdGlvICogc3R5bGVIZWlnaHQpIDogTWF0aC5yb3VuZChwaXhlbFJhdGlvICogcmVhbEhlaWdodCk7XG5cbiAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IHNjYWxlVG9WaWV3ID8gTWF0aC5yb3VuZChzdHlsZVdpZHRoKSA6IE1hdGgucm91bmQocmVhbFdpZHRoKTtcbiAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSBzY2FsZVRvVmlldyA/IE1hdGgucm91bmQoc3R5bGVIZWlnaHQpIDogTWF0aC5yb3VuZChyZWFsSGVpZ2h0KTtcblxuICBjb25zdCBzY2FsZVggPSBjYW52YXNXaWR0aCAvIHdpZHRoO1xuICBjb25zdCBzY2FsZVkgPSBjYW52YXNIZWlnaHQgLyBoZWlnaHQ7XG5cbiAgLy8gQXNzaWduIHRvIGN1cnJlbnQgcHJvcHNcbiAgcmV0dXJuIHtcbiAgICBibGVlZCxcbiAgICBwaXhlbFJhdGlvLFxuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBkaW1lbnNpb25zOiBbIHdpZHRoLCBoZWlnaHQgXSxcbiAgICB1bml0czogdW5pdHMgfHwgJ3B4JyxcbiAgICBzY2FsZVgsXG4gICAgc2NhbGVZLFxuICAgIHBpeGVsc1BlckluY2gsXG4gICAgdmlld3BvcnRXaWR0aCxcbiAgICB2aWV3cG9ydEhlaWdodCxcbiAgICBjYW52YXNXaWR0aCxcbiAgICBjYW52YXNIZWlnaHQsXG4gICAgdHJpbVdpZHRoLFxuICAgIHRyaW1IZWlnaHQsXG4gICAgc3R5bGVXaWR0aCxcbiAgICBzdHlsZUhlaWdodFxuICB9O1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBnZXRDYW52YXNDb250ZXh0XG5mdW5jdGlvbiBnZXRDYW52YXNDb250ZXh0ICh0eXBlLCBvcHRzKSB7XG4gIGlmICh0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtdXN0IHNwZWNpZnkgdHlwZSBzdHJpbmcnKVxuICB9XG5cbiAgb3B0cyA9IG9wdHMgfHwge31cblxuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJyAmJiAhb3B0cy5jYW52YXMpIHtcbiAgICByZXR1cm4gbnVsbCAvLyBjaGVjayBmb3IgTm9kZVxuICB9XG5cbiAgdmFyIGNhbnZhcyA9IG9wdHMuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXG4gIGlmICh0eXBlb2Ygb3B0cy53aWR0aCA9PT0gJ251bWJlcicpIHtcbiAgICBjYW52YXMud2lkdGggPSBvcHRzLndpZHRoXG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRzLmhlaWdodCA9PT0gJ251bWJlcicpIHtcbiAgICBjYW52YXMuaGVpZ2h0ID0gb3B0cy5oZWlnaHRcbiAgfVxuXG4gIHZhciBhdHRyaWJzID0gb3B0c1xuICB2YXIgZ2xcbiAgdHJ5IHtcbiAgICB2YXIgbmFtZXMgPSBbIHR5cGUgXVxuICAgIC8vIHByZWZpeCBHTCBjb250ZXh0c1xuICAgIGlmICh0eXBlLmluZGV4T2YoJ3dlYmdsJykgPT09IDApIHtcbiAgICAgIG5hbWVzLnB1c2goJ2V4cGVyaW1lbnRhbC0nICsgdHlwZSlcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KG5hbWVzW2ldLCBhdHRyaWJzKVxuICAgICAgaWYgKGdsKSByZXR1cm4gZ2xcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBnbCA9IG51bGxcbiAgfVxuICByZXR1cm4gKGdsIHx8IG51bGwpIC8vIGVuc3VyZSBudWxsIG9uIGZhaWxcbn1cbiIsImltcG9ydCBhc3NpZ24gZnJvbSAnb2JqZWN0LWFzc2lnbic7XG5pbXBvcnQgZ2V0Q2FudmFzQ29udGV4dCBmcm9tICdnZXQtY2FudmFzLWNvbnRleHQnO1xuaW1wb3J0IHsgaXNCcm93c2VyIH0gZnJvbSAnLi4vdXRpbCc7XG5cbmZ1bmN0aW9uIGNyZWF0ZUNhbnZhc0VsZW1lbnQgKCkge1xuICBpZiAoIWlzQnJvd3NlcigpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJdCBhcHBlYXJzIHlvdSBhcmUgcnVuaW5nIGZyb20gTm9kZS5qcyBvciBhIG5vbi1icm93c2VyIGVudmlyb25tZW50LiBUcnkgcGFzc2luZyBpbiBhbiBleGlzdGluZyB7IGNhbnZhcyB9IGludGVyZmFjZSBpbnN0ZWFkLicpO1xuICB9XG4gIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQ2FudmFzIChzZXR0aW5ncyA9IHt9KSB7XG4gIGxldCBjb250ZXh0LCBjYW52YXM7XG4gIGxldCBvd25zQ2FudmFzID0gZmFsc2U7XG4gIGlmIChzZXR0aW5ncy5jYW52YXMgIT09IGZhbHNlKSB7XG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBjYW52YXMgYW5kIGNvbnRleHQgdG8gY3JlYXRlXG4gICAgY29udGV4dCA9IHNldHRpbmdzLmNvbnRleHQ7XG4gICAgaWYgKCFjb250ZXh0IHx8IHR5cGVvZiBjb250ZXh0ID09PSAnc3RyaW5nJykge1xuICAgICAgbGV0IG5ld0NhbnZhcyA9IHNldHRpbmdzLmNhbnZhcztcbiAgICAgIGlmICghbmV3Q2FudmFzKSB7XG4gICAgICAgIG5ld0NhbnZhcyA9IGNyZWF0ZUNhbnZhc0VsZW1lbnQoKTtcbiAgICAgICAgb3duc0NhbnZhcyA9IHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCB0eXBlID0gY29udGV4dCB8fCAnMmQnO1xuICAgICAgaWYgKHR5cGVvZiBuZXdDYW52YXMuZ2V0Q29udGV4dCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzcGVjaWZpZWQgeyBjYW52YXMgfSBlbGVtZW50IGRvZXMgbm90IGhhdmUgYSBnZXRDb250ZXh0KCkgZnVuY3Rpb24sIG1heWJlIGl0IGlzIG5vdCBhIDxjYW52YXM+IHRhZz9gKTtcbiAgICAgIH1cbiAgICAgIGNvbnRleHQgPSBnZXRDYW52YXNDb250ZXh0KHR5cGUsIGFzc2lnbih7fSwgc2V0dGluZ3MuYXR0cmlidXRlcywgeyBjYW52YXM6IG5ld0NhbnZhcyB9KSk7XG4gICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgYXQgY2FudmFzLmdldENvbnRleHQoJyR7dHlwZX0nKSAtIHRoZSBicm93c2VyIG1heSBub3Qgc3VwcG9ydCB0aGlzIGNvbnRleHQsIG9yIGEgZGlmZmVyZW50IGNvbnRleHQgbWF5IGFscmVhZHkgYmUgaW4gdXNlIHdpdGggdGhpcyBjYW52YXMuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FudmFzID0gY29udGV4dC5jYW52YXM7XG4gICAgLy8gRW5zdXJlIGNvbnRleHQgbWF0Y2hlcyB1c2VyJ3MgY2FudmFzIGV4cGVjdGF0aW9uc1xuICAgIGlmIChzZXR0aW5ncy5jYW52YXMgJiYgY2FudmFzICE9PSBzZXR0aW5ncy5jYW52YXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHsgY2FudmFzIH0gYW5kIHsgY29udGV4dCB9IHNldHRpbmdzIG11c3QgcG9pbnQgdG8gdGhlIHNhbWUgdW5kZXJseWluZyBjYW52YXMgZWxlbWVudCcpO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IHBpeGVsYXRpb24gdG8gY2FudmFzIGlmIG5lY2Vzc2FyeSwgdGhpcyBpcyBtb3N0bHkgYSBjb252ZW5pZW5jZSB1dGlsaXR5XG4gICAgaWYgKHNldHRpbmdzLnBpeGVsYXRlZCkge1xuICAgICAgY29udGV4dC5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICBjb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICBjb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICBjYW52YXMuc3R5bGVbJ2ltYWdlLXJlbmRlcmluZyddID0gJ3BpeGVsYXRlZCc7XG4gICAgfVxuICB9XG4gIHJldHVybiB7IGNhbnZhcywgY29udGV4dCwgb3duc0NhbnZhcyB9O1xufVxuIiwiaW1wb3J0IGFzc2lnbiBmcm9tICdvYmplY3QtYXNzaWduJztcbmltcG9ydCByaWdodE5vdyBmcm9tICdyaWdodC1ub3cnO1xuaW1wb3J0IGlzUHJvbWlzZSBmcm9tICdpcy1wcm9taXNlJztcbmltcG9ydCB7IGlzQnJvd3NlciwgZGVmaW5lZCwgaXNXZWJHTENvbnRleHQsIGlzQ2FudmFzLCBnZXRDbGllbnRBUEkgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCBkZWVwRXF1YWwgZnJvbSAnZGVlcC1lcXVhbCc7XG5pbXBvcnQge1xuICByZXNvbHZlRmlsZW5hbWUsXG4gIHNhdmVGaWxlLFxuICBzYXZlRGF0YVVSTCxcbiAgZ2V0VGltZVN0YW1wLFxuICBleHBvcnRDYW52YXMsXG4gIHN0cmVhbVN0YXJ0LFxuICBzdHJlYW1FbmRcbn0gZnJvbSAnLi4vc2F2ZSc7XG5pbXBvcnQgeyBjaGVja1NldHRpbmdzIH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5cbmltcG9ydCBrZXlib2FyZFNob3J0Y3V0cyBmcm9tICcuL2tleWJvYXJkU2hvcnRjdXRzJztcbmltcG9ydCByZXNpemVDYW52YXMgZnJvbSAnLi9yZXNpemVDYW52YXMnO1xuaW1wb3J0IGNyZWF0ZUNhbnZhcyBmcm9tICcuL2NyZWF0ZUNhbnZhcyc7XG5cbmNsYXNzIFNrZXRjaE1hbmFnZXIge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5fc2V0dGluZ3MgPSB7fTtcbiAgICB0aGlzLl9wcm9wcyA9IHt9O1xuICAgIHRoaXMuX3NrZXRjaCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9yYWYgPSBudWxsO1xuICAgIHRoaXMuX3JlY29yZFRpbWVvdXQgPSBudWxsO1xuXG4gICAgLy8gU29tZSBoYWNreSB0aGluZ3MgcmVxdWlyZWQgdG8gZ2V0IGFyb3VuZCBwNS5qcyBzdHJ1Y3R1cmVcbiAgICB0aGlzLl9sYXN0UmVkcmF3UmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2lzUDVSZXNpemluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fa2V5Ym9hcmRTaG9ydGN1dHMgPSBrZXlib2FyZFNob3J0Y3V0cyh7XG4gICAgICBlbmFibGVkOiAoKSA9PiB0aGlzLnNldHRpbmdzLmhvdGtleXMgIT09IGZhbHNlLFxuICAgICAgc2F2ZTogKGV2KSA9PiB7XG4gICAgICAgIGlmIChldi5zaGlmdEtleSkge1xuICAgICAgICAgIGlmICh0aGlzLnByb3BzLnJlY29yZGluZykge1xuICAgICAgICAgICAgdGhpcy5lbmRSZWNvcmQoKTtcbiAgICAgICAgICAgIHRoaXMucnVuKCk7XG4gICAgICAgICAgfSBlbHNlIHRoaXMucmVjb3JkKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMucHJvcHMucmVjb3JkaW5nKSB7XG4gICAgICAgICAgdGhpcy5leHBvcnRGcmFtZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdG9nZ2xlUGxheTogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5wbGF5aW5nKSB0aGlzLnBhdXNlKCk7XG4gICAgICAgIGVsc2UgdGhpcy5wbGF5KCk7XG4gICAgICB9LFxuICAgICAgY29tbWl0OiAoZXYpID0+IHtcbiAgICAgICAgdGhpcy5leHBvcnRGcmFtZSh7IGNvbW1pdDogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX2FuaW1hdGVIYW5kbGVyID0gKCkgPT4gdGhpcy5hbmltYXRlKCk7XG5cbiAgICB0aGlzLl9yZXNpemVIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2hhbmdlZCA9IHRoaXMucmVzaXplKCk7XG4gICAgICAvLyBPbmx5IHJlLXJlbmRlciB3aGVuIHNpemUgYWN0dWFsbHkgY2hhbmdlc1xuICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZ2V0IHNrZXRjaCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NrZXRjaDtcbiAgfVxuXG4gIGdldCBzZXR0aW5ncyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzO1xuICB9XG5cbiAgZ2V0IHByb3BzICgpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvcHM7XG4gIH1cblxuICBfY29tcHV0ZVBsYXloZWFkIChjdXJyZW50VGltZSwgZHVyYXRpb24pIHtcbiAgICBjb25zdCBoYXNEdXJhdGlvbiA9IHR5cGVvZiBkdXJhdGlvbiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoZHVyYXRpb24pO1xuICAgIHJldHVybiBoYXNEdXJhdGlvbiA/IGN1cnJlbnRUaW1lIC8gZHVyYXRpb24gOiAwO1xuICB9XG5cbiAgX2NvbXB1dGVGcmFtZSAocGxheWhlYWQsIHRpbWUsIHRvdGFsRnJhbWVzLCBmcHMpIHtcbiAgICByZXR1cm4gKGlzRmluaXRlKHRvdGFsRnJhbWVzKSAmJiB0b3RhbEZyYW1lcyA+IDEpXG4gICAgICA/IE1hdGguZmxvb3IocGxheWhlYWQgKiAodG90YWxGcmFtZXMgLSAxKSlcbiAgICAgIDogTWF0aC5mbG9vcihmcHMgKiB0aW1lKTtcbiAgfVxuXG4gIF9jb21wdXRlQ3VycmVudEZyYW1lICgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29tcHV0ZUZyYW1lKFxuICAgICAgdGhpcy5wcm9wcy5wbGF5aGVhZCwgdGhpcy5wcm9wcy50aW1lLFxuICAgICAgdGhpcy5wcm9wcy50b3RhbEZyYW1lcywgdGhpcy5wcm9wcy5mcHNcbiAgICApO1xuICB9XG5cbiAgX2dldFNpemVQcm9wcyAoKSB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogcHJvcHMud2lkdGgsXG4gICAgICBoZWlnaHQ6IHByb3BzLmhlaWdodCxcbiAgICAgIHBpeGVsUmF0aW86IHByb3BzLnBpeGVsUmF0aW8sXG4gICAgICBjYW52YXNXaWR0aDogcHJvcHMuY2FudmFzV2lkdGgsXG4gICAgICBjYW52YXNIZWlnaHQ6IHByb3BzLmNhbnZhc0hlaWdodCxcbiAgICAgIHZpZXdwb3J0V2lkdGg6IHByb3BzLnZpZXdwb3J0V2lkdGgsXG4gICAgICB2aWV3cG9ydEhlaWdodDogcHJvcHMudmlld3BvcnRIZWlnaHRcbiAgICB9O1xuICB9XG5cbiAgcnVuICgpIHtcbiAgICBpZiAoIXRoaXMuc2tldGNoKSB0aHJvdyBuZXcgRXJyb3IoJ3Nob3VsZCB3YWl0IHVudGlsIHNrZXRjaCBpcyBsb2FkZWQgYmVmb3JlIHRyeWluZyB0byBwbGF5KCknKTtcblxuICAgIC8vIFN0YXJ0IGFuIGFuaW1hdGlvbiBmcmFtZSBsb29wIGlmIG5lY2Vzc2FyeVxuICAgIGlmICh0aGlzLnNldHRpbmdzLnBsYXlpbmcgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnBsYXkoKTtcbiAgICB9XG5cbiAgICAvLyBMZXQncyBsZXQgdGhpcyB3YXJuaW5nIGhhbmcgYXJvdW5kIGZvciBhIGZldyB2ZXJzaW9ucy4uLlxuICAgIGlmICh0eXBlb2YgdGhpcy5za2V0Y2guZGlzcG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKCdJbiBjYW52YXMtc2tldGNoQDAuMC4yMyB0aGUgZGlzcG9zZSgpIGV2ZW50IGhhcyBiZWVuIHJlbmFtZWQgdG8gdW5sb2FkKCknKTtcbiAgICB9XG5cbiAgICAvLyBJbiBjYXNlIHdlIGFyZW4ndCBwbGF5aW5nIG9yIGFuaW1hdGVkLCBtYWtlIHN1cmUgd2Ugc3RpbGwgdHJpZ2dlciBiZWdpbiBtZXNzYWdlLi4uXG4gICAgaWYgKCF0aGlzLnByb3BzLnN0YXJ0ZWQpIHtcbiAgICAgIHRoaXMuX3NpZ25hbEJlZ2luKCk7XG4gICAgICB0aGlzLnByb3BzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIFJlbmRlciBhbiBpbml0aWFsIGZyYW1lXG4gICAgdGhpcy50aWNrKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIF9jYW5jZWxUaW1lb3V0cyAoKSB7XG4gICAgaWYgKHRoaXMuX3JhZiAhPSBudWxsICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yYWYpO1xuICAgICAgdGhpcy5fcmFmID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3JlY29yZFRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3JlY29yZFRpbWVvdXQpO1xuICAgICAgdGhpcy5fcmVjb3JkVGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcGxheSAoKSB7XG4gICAgbGV0IGFuaW1hdGUgPSB0aGlzLnNldHRpbmdzLmFuaW1hdGU7XG4gICAgaWYgKCdhbmltYXRpb24nIGluIHRoaXMuc2V0dGluZ3MpIHtcbiAgICAgIGFuaW1hdGUgPSB0cnVlO1xuICAgICAgY29uc29sZS53YXJuKCdbY2FudmFzLXNrZXRjaF0geyBhbmltYXRpb24gfSBoYXMgYmVlbiByZW5hbWVkIHRvIHsgYW5pbWF0ZSB9Jyk7XG4gICAgfVxuICAgIGlmICghYW5pbWF0ZSkgcmV0dXJuO1xuICAgIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tjYW52YXMtc2tldGNoXSBXQVJOOiBVc2luZyB7IGFuaW1hdGUgfSBpbiBOb2RlLmpzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLnBsYXlpbmcpIHJldHVybjtcbiAgICBpZiAoIXRoaXMucHJvcHMuc3RhcnRlZCkge1xuICAgICAgdGhpcy5fc2lnbmFsQmVnaW4oKTtcbiAgICAgIHRoaXMucHJvcHMuc3RhcnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gY29uc29sZS5sb2coJ3BsYXknLCB0aGlzLnByb3BzLnRpbWUpXG5cbiAgICAvLyBTdGFydCBhIHJlbmRlciBsb29wXG4gICAgdGhpcy5wcm9wcy5wbGF5aW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9jYW5jZWxUaW1lb3V0cygpO1xuICAgIHRoaXMuX2xhc3RUaW1lID0gcmlnaHROb3coKTtcbiAgICB0aGlzLl9yYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2FuaW1hdGVIYW5kbGVyKTtcbiAgfVxuXG4gIHBhdXNlICgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5yZWNvcmRpbmcpIHRoaXMuZW5kUmVjb3JkKCk7XG4gICAgdGhpcy5wcm9wcy5wbGF5aW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9jYW5jZWxUaW1lb3V0cygpO1xuICB9XG5cbiAgdG9nZ2xlUGxheSAoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucGxheWluZykgdGhpcy5wYXVzZSgpO1xuICAgIGVsc2UgdGhpcy5wbGF5KCk7XG4gIH1cblxuICAvLyBTdG9wIGFuZCByZXNldCB0byBmcmFtZSB6ZXJvXG4gIHN0b3AgKCkge1xuICAgIHRoaXMucGF1c2UoKTtcbiAgICB0aGlzLnByb3BzLmZyYW1lID0gMDtcbiAgICB0aGlzLnByb3BzLnBsYXloZWFkID0gMDtcbiAgICB0aGlzLnByb3BzLnRpbWUgPSAwO1xuICAgIHRoaXMucHJvcHMuZGVsdGFUaW1lID0gMDtcbiAgICB0aGlzLnByb3BzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVjb3JkICgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5yZWNvcmRpbmcpIHJldHVybjtcbiAgICBpZiAoIWlzQnJvd3NlcigpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbY2FudmFzLXNrZXRjaF0gV0FSTjogUmVjb3JkaW5nIGZyb20gTm9kZS5qcyBpcyBub3QgeWV0IHN1cHBvcnRlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3RvcCgpO1xuICAgIHRoaXMucHJvcHMucGxheWluZyA9IHRydWU7XG4gICAgdGhpcy5wcm9wcy5yZWNvcmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgZXhwb3J0T3B0cyA9IHRoaXMuX2NyZWF0ZUV4cG9ydE9wdGlvbnMoeyBzZXF1ZW5jZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxIC8gdGhpcy5wcm9wcy5mcHM7XG4gICAgLy8gUmVuZGVyIGVhY2ggZnJhbWUgaW4gdGhlIHNlcXVlbmNlXG4gICAgdGhpcy5fY2FuY2VsVGltZW91dHMoKTtcbiAgICBjb25zdCB0aWNrID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnByb3BzLnJlY29yZGluZykgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSBmcmFtZUludGVydmFsO1xuICAgICAgdGhpcy50aWNrKCk7XG4gICAgICByZXR1cm4gdGhpcy5leHBvcnRGcmFtZShleHBvcnRPcHRzKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLnByb3BzLnJlY29yZGluZykgcmV0dXJuOyAvLyB3YXMgY2FuY2VsbGVkIGJlZm9yZVxuICAgICAgICAgIHRoaXMucHJvcHMuZGVsdGFUaW1lID0gMDtcbiAgICAgICAgICB0aGlzLnByb3BzLmZyYW1lKys7XG4gICAgICAgICAgaWYgKHRoaXMucHJvcHMuZnJhbWUgPCB0aGlzLnByb3BzLnRvdGFsRnJhbWVzKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLnRpbWUgKz0gZnJhbWVJbnRlcnZhbDtcbiAgICAgICAgICAgIHRoaXMucHJvcHMucGxheWhlYWQgPSB0aGlzLl9jb21wdXRlUGxheWhlYWQodGhpcy5wcm9wcy50aW1lLCB0aGlzLnByb3BzLmR1cmF0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuX3JlY29yZFRpbWVvdXQgPSBzZXRUaW1lb3V0KHRpY2ssIDApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRmluaXNoZWQgcmVjb3JkaW5nJyk7XG4gICAgICAgICAgICB0aGlzLl9zaWduYWxFbmQoKTtcbiAgICAgICAgICAgIHRoaXMuZW5kUmVjb3JkKCk7XG4gICAgICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgICAgIHRoaXMucnVuKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgLy8gVHJpZ2dlciBhIHN0YXJ0IGV2ZW50IGJlZm9yZSB3ZSBiZWdpbiByZWNvcmRpbmdcbiAgICBpZiAoIXRoaXMucHJvcHMuc3RhcnRlZCkge1xuICAgICAgdGhpcy5fc2lnbmFsQmVnaW4oKTtcbiAgICAgIHRoaXMucHJvcHMuc3RhcnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlciAnYmVnaW4gcmVjb3JkJyBldmVudFxuICAgIGlmICh0aGlzLnNrZXRjaCAmJiB0eXBlb2YgdGhpcy5za2V0Y2guYmVnaW5SZWNvcmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuX3dyYXBDb250ZXh0U2NhbGUocHJvcHMgPT4gdGhpcy5za2V0Y2guYmVnaW5SZWNvcmQocHJvcHMpKTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWF0ZSBhIHN0cmVhbWluZyBzdGFydCBpZiBuZWNlc3NhcnlcbiAgICBzdHJlYW1TdGFydChleHBvcnRPcHRzKVxuICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIH0pXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIHRoaXMuX3JhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgICB9KTtcbiAgfVxuXG4gIF9zaWduYWxCZWdpbiAoKSB7XG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC5iZWdpbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fd3JhcENvbnRleHRTY2FsZShwcm9wcyA9PiB0aGlzLnNrZXRjaC5iZWdpbihwcm9wcykpO1xuICAgIH1cbiAgfVxuXG4gIF9zaWduYWxFbmQgKCkge1xuICAgIGlmICh0aGlzLnNrZXRjaCAmJiB0eXBlb2YgdGhpcy5za2V0Y2guZW5kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl93cmFwQ29udGV4dFNjYWxlKHByb3BzID0+IHRoaXMuc2tldGNoLmVuZChwcm9wcykpO1xuICAgIH1cbiAgfVxuXG4gIGVuZFJlY29yZCAoKSB7XG4gICAgY29uc3Qgd2FzUmVjb3JkaW5nID0gdGhpcy5wcm9wcy5yZWNvcmRpbmc7XG5cbiAgICB0aGlzLl9jYW5jZWxUaW1lb3V0cygpO1xuICAgIHRoaXMucHJvcHMucmVjb3JkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSAwO1xuICAgIHRoaXMucHJvcHMucGxheWluZyA9IGZhbHNlO1xuXG4gICAgLy8gdGVsbCBDTEkgdGhhdCBzdHJlYW0gaGFzIGZpbmlzaGVkXG4gICAgcmV0dXJuIHN0cmVhbUVuZCgpXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgLy8gVHJpZ2dlciAnZW5kIHJlY29yZCcgZXZlbnRcbiAgICAgICAgaWYgKHdhc1JlY29yZGluZyAmJiB0aGlzLnNrZXRjaCAmJiB0eXBlb2YgdGhpcy5za2V0Y2guZW5kUmVjb3JkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhpcy5fd3JhcENvbnRleHRTY2FsZShwcm9wcyA9PiB0aGlzLnNrZXRjaC5lbmRSZWNvcmQocHJvcHMpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBfY3JlYXRlRXhwb3J0T3B0aW9ucyAob3B0ID0ge30pIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VxdWVuY2U6IG9wdC5zZXF1ZW5jZSxcbiAgICAgIHNhdmU6IG9wdC5zYXZlLFxuICAgICAgZnBzOiB0aGlzLnByb3BzLmZwcyxcbiAgICAgIGZyYW1lOiBvcHQuc2VxdWVuY2UgPyB0aGlzLnByb3BzLmZyYW1lIDogdW5kZWZpbmVkLFxuICAgICAgZmlsZTogdGhpcy5zZXR0aW5ncy5maWxlLFxuICAgICAgbmFtZTogdGhpcy5zZXR0aW5ncy5uYW1lLFxuICAgICAgcHJlZml4OiB0aGlzLnNldHRpbmdzLnByZWZpeCxcbiAgICAgIHN1ZmZpeDogdGhpcy5zZXR0aW5ncy5zdWZmaXgsXG4gICAgICBlbmNvZGluZzogdGhpcy5zZXR0aW5ncy5lbmNvZGluZyxcbiAgICAgIGVuY29kaW5nUXVhbGl0eTogdGhpcy5zZXR0aW5ncy5lbmNvZGluZ1F1YWxpdHksXG4gICAgICB0aW1lU3RhbXA6IG9wdC50aW1lU3RhbXAgfHwgZ2V0VGltZVN0YW1wKCksXG4gICAgICB0b3RhbEZyYW1lczogaXNGaW5pdGUodGhpcy5wcm9wcy50b3RhbEZyYW1lcykgPyBNYXRoLm1heCgwLCB0aGlzLnByb3BzLnRvdGFsRnJhbWVzKSA6IDEwMDBcbiAgICB9O1xuICB9XG5cbiAgZXhwb3J0RnJhbWUgKG9wdCA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLnNrZXRjaCkgcmV0dXJuIFByb21pc2UuYWxsKFtdKTtcbiAgICBpZiAodHlwZW9mIHRoaXMuc2tldGNoLnByZUV4cG9ydCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5za2V0Y2gucHJlRXhwb3J0KCk7XG4gICAgfVxuXG4gICAgLy8gT3B0aW9ucyBmb3IgZXhwb3J0IGZ1bmN0aW9uXG4gICAgbGV0IGV4cG9ydE9wdHMgPSB0aGlzLl9jcmVhdGVFeHBvcnRPcHRpb25zKG9wdCk7XG5cbiAgICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgICBsZXQgcCA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIGlmIChjbGllbnQgJiYgb3B0LmNvbW1pdCAmJiB0eXBlb2YgY2xpZW50LmNvbW1pdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgY29tbWl0T3B0cyA9IGFzc2lnbih7fSwgZXhwb3J0T3B0cyk7XG4gICAgICBjb25zdCBoYXNoID0gY2xpZW50LmNvbW1pdChjb21taXRPcHRzKTtcbiAgICAgIGlmIChpc1Byb21pc2UoaGFzaCkpIHAgPSBoYXNoO1xuICAgICAgZWxzZSBwID0gUHJvbWlzZS5yZXNvbHZlKGhhc2gpO1xuICAgIH1cblxuICAgIHJldHVybiBwLnRoZW4oaGFzaCA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5fZG9FeHBvcnRGcmFtZShhc3NpZ24oe30sIGV4cG9ydE9wdHMsIHsgaGFzaDogaGFzaCB8fCAnJyB9KSk7XG4gICAgfSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgLy8gTW9zdCBjb21tb24gdXNlY2FzZSBpcyB0byBleHBvcnQgYSBzaW5nbGUgbGF5ZXIsXG4gICAgICAvLyBzbyBsZXQncyBvcHRpbWl6ZSB0aGUgdXNlciBleHBlcmllbmNlIGZvciB0aGF0LlxuICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDEpIHJldHVybiByZXN1bHRbMF07XG4gICAgICBlbHNlIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gIH1cblxuICBfZG9FeHBvcnRGcmFtZSAoZXhwb3J0T3B0cyA9IHt9KSB7XG4gICAgdGhpcy5fcHJvcHMuZXhwb3J0aW5nID0gdHJ1ZTtcblxuICAgIC8vIFJlc2l6ZSB0byBvdXRwdXQgcmVzb2x1dGlvblxuICAgIHRoaXMucmVzaXplKCk7XG5cbiAgICAvLyBEcmF3IGF0IHRoaXMgb3V0cHV0IHJlc29sdXRpb25cbiAgICBsZXQgZHJhd1Jlc3VsdCA9IHRoaXMucmVuZGVyKCk7XG5cbiAgICAvLyBUaGUgc2VsZiBvd25lZCBjYW52YXMgKG1heSBiZSB1bmRlZmluZWQuLi4hKVxuICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMucHJvcHMuY2FudmFzO1xuXG4gICAgLy8gR2V0IGxpc3Qgb2YgcmVzdWx0cyBmcm9tIHJlbmRlclxuICAgIGlmICh0eXBlb2YgZHJhd1Jlc3VsdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRyYXdSZXN1bHQgPSBbIGNhbnZhcyBdO1xuICAgIH1cbiAgICBkcmF3UmVzdWx0ID0gW10uY29uY2F0KGRyYXdSZXN1bHQpLmZpbHRlcihCb29sZWFuKTtcblxuICAgIC8vIFRyYW5zZm9ybSB0aGUgY2FudmFzL2ZpbGUgZGVzY3JpcHRvcnMgaW50byBhIGNvbnNpc3RlbnQgZm9ybWF0LFxuICAgIC8vIGFuZCBwdWxsIG91dCBhbnkgZGF0YSBVUkxzIGZyb20gY2FudmFzIGVsZW1lbnRzXG4gICAgZHJhd1Jlc3VsdCA9IGRyYXdSZXN1bHQubWFwKHJlc3VsdCA9PiB7XG4gICAgICBjb25zdCBoYXNEYXRhT2JqZWN0ID0gdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgcmVzdWx0ICYmICgnZGF0YScgaW4gcmVzdWx0IHx8ICdkYXRhVVJMJyBpbiByZXN1bHQpO1xuICAgICAgY29uc3QgZGF0YSA9IGhhc0RhdGFPYmplY3QgPyByZXN1bHQuZGF0YSA6IHJlc3VsdDtcbiAgICAgIGNvbnN0IG9wdHMgPSBoYXNEYXRhT2JqZWN0ID8gYXNzaWduKHt9LCByZXN1bHQsIHsgZGF0YSB9KSA6IHsgZGF0YSB9O1xuICAgICAgaWYgKGlzQ2FudmFzKGRhdGEpKSB7XG4gICAgICAgIGNvbnN0IGVuY29kaW5nID0gb3B0cy5lbmNvZGluZyB8fCBleHBvcnRPcHRzLmVuY29kaW5nO1xuICAgICAgICBjb25zdCBlbmNvZGluZ1F1YWxpdHkgPSBkZWZpbmVkKG9wdHMuZW5jb2RpbmdRdWFsaXR5LCBleHBvcnRPcHRzLmVuY29kaW5nUXVhbGl0eSwgMC45NSk7XG4gICAgICAgIGNvbnN0IHsgZGF0YVVSTCwgZXh0ZW5zaW9uLCB0eXBlIH0gPSBleHBvcnRDYW52YXMoZGF0YSwgeyBlbmNvZGluZywgZW5jb2RpbmdRdWFsaXR5IH0pO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihvcHRzLCB7IGRhdGFVUkwsIGV4dGVuc2lvbiwgdHlwZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvcHRzO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTm93IHJldHVybiB0byByZWd1bGFyIHJlbmRlcmluZyBtb2RlXG4gICAgdGhpcy5fcHJvcHMuZXhwb3J0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5yZXNpemUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuXG4gICAgLy8gQW5kIG5vdyB3ZSBjYW4gc2F2ZSBlYWNoIHJlc3VsdFxuICAgIHJldHVybiBQcm9taXNlLmFsbChkcmF3UmVzdWx0Lm1hcCgocmVzdWx0LCBpLCBsYXllckxpc3QpID0+IHtcbiAgICAgIC8vIEJ5IGRlZmF1bHQsIGlmIHJlbmRlcmluZyBtdWx0aXBsZSBsYXllcnMgd2Ugd2lsbCBnaXZlIHRoZW0gaW5kaWNlc1xuICAgICAgY29uc3QgY3VyT3B0ID0gYXNzaWduKHtcbiAgICAgICAgZXh0ZW5zaW9uOiAnJyxcbiAgICAgICAgcHJlZml4OiAnJyxcbiAgICAgICAgc3VmZml4OiAnJ1xuICAgICAgfSwgZXhwb3J0T3B0cywgcmVzdWx0LCB7XG4gICAgICAgIGxheWVyOiBpLFxuICAgICAgICB0b3RhbExheWVyczogbGF5ZXJMaXN0Lmxlbmd0aFxuICAgICAgfSk7XG5cbiAgICAgIC8vIElmIGV4cG9ydCBpcyBleHBsaWNpdGx5IG5vdCBzYXZpbmcsIG1ha2Ugc3VyZSBub3RoaW5nIHNhdmVzXG4gICAgICAvLyBPdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgbGF5ZXIgc2F2ZSBvcHRpb24sIG9yIGZhbGxiYWNrIHRvIHRydWVcbiAgICAgIGNvbnN0IHNhdmVQYXJhbSA9IGV4cG9ydE9wdHMuc2F2ZSA9PT0gZmFsc2UgPyBmYWxzZSA6IHJlc3VsdC5zYXZlO1xuICAgICAgY3VyT3B0LnNhdmUgPSBzYXZlUGFyYW0gIT09IGZhbHNlO1xuXG4gICAgICAvLyBSZXNvbHZlIGEgZnVsbCBmaWxlbmFtZSBmcm9tIGFsbCB0aGUgb3B0aW9uc1xuICAgICAgY3VyT3B0LmZpbGVuYW1lID0gcmVzb2x2ZUZpbGVuYW1lKGN1ck9wdCk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHNvbWUgcGFyYW1ldGVycyB0aGF0IG1heSBiZSBhbWJpZ3VvdXMgdG8gdGhlIHVzZXJcbiAgICAgIGRlbGV0ZSBjdXJPcHQuZW5jb2Rpbmc7XG4gICAgICBkZWxldGUgY3VyT3B0LmVuY29kaW5nUXVhbGl0eTtcblxuICAgICAgLy8gQ2xlYW4gaXQgdXAgZnVydGhlciBieSBqdXN0IHJlbW92aW5nIHVuZGVmaW5lZCB2YWx1ZXNcbiAgICAgIGZvciAobGV0IGsgaW4gY3VyT3B0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgY3VyT3B0W2tdID09PSAndW5kZWZpbmVkJykgZGVsZXRlIGN1ck9wdFtrXTtcbiAgICAgIH1cblxuICAgICAgbGV0IHNhdmVQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgIGlmIChjdXJPcHQuc2F2ZSkge1xuICAgICAgICAvLyBXaGV0aGVyIHRvIGFjdHVhbGx5IHNhdmUgKGRvd25sb2FkKSB0aGlzIGZyYWdtZW50XG4gICAgICAgIGNvbnN0IGRhdGEgPSBjdXJPcHQuZGF0YTtcbiAgICAgICAgaWYgKGN1ck9wdC5kYXRhVVJMKSB7XG4gICAgICAgICAgY29uc3QgZGF0YVVSTCA9IGN1ck9wdC5kYXRhVVJMO1xuICAgICAgICAgIHNhdmVQcm9taXNlID0gc2F2ZURhdGFVUkwoZGF0YVVSTCwgY3VyT3B0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzYXZlUHJvbWlzZSA9IHNhdmVGaWxlKGRhdGEsIGN1ck9wdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzYXZlUHJvbWlzZS50aGVuKHNhdmVSZXN1bHQgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY3VyT3B0LCBzYXZlUmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH0pKS50aGVuKGV2ID0+IHtcbiAgICAgIGNvbnN0IHNhdmVkRXZlbnRzID0gZXYuZmlsdGVyKGUgPT4gZS5zYXZlKTtcbiAgICAgIGlmIChzYXZlZEV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIExvZyB0aGUgc2F2ZWQgZXhwb3J0c1xuICAgICAgICBjb25zdCBldmVudFdpdGhPdXRwdXQgPSBzYXZlZEV2ZW50cy5maW5kKGUgPT4gZS5vdXRwdXROYW1lKTtcbiAgICAgICAgY29uc3QgaXNDbGllbnQgPSBzYXZlZEV2ZW50cy5zb21lKGUgPT4gZS5jbGllbnQpO1xuICAgICAgICBjb25zdCBpc1N0cmVhbWluZyA9IHNhdmVkRXZlbnRzLnNvbWUoZSA9PiBlLnN0cmVhbSk7XG4gICAgICAgIGxldCBpdGVtO1xuICAgICAgICAvLyBtYW55IGZpbGVzLCBqdXN0IGxvZyBob3cgbWFueSB3ZXJlIGV4cG9ydGVkXG4gICAgICAgIGlmIChzYXZlZEV2ZW50cy5sZW5ndGggPiAxKSBpdGVtID0gc2F2ZWRFdmVudHMubGVuZ3RoO1xuICAgICAgICAvLyBpbiBDTEksIHdlIGtub3cgZXhhY3QgcGF0aCBkaXJuYW1lXG4gICAgICAgIGVsc2UgaWYgKGV2ZW50V2l0aE91dHB1dCkgaXRlbSA9IGAke2V2ZW50V2l0aE91dHB1dC5vdXRwdXROYW1lfS8ke3NhdmVkRXZlbnRzWzBdLmZpbGVuYW1lfWA7XG4gICAgICAgIC8vIGluIGJyb3dzZXIsIHdlIGNhbiBvbmx5IGtub3cgaXQgd2VudCB0byBcImJyb3dzZXIgZG93bmxvYWQgZm9sZGVyXCJcbiAgICAgICAgZWxzZSBpdGVtID0gYCR7c2F2ZWRFdmVudHNbMF0uZmlsZW5hbWV9YDtcbiAgICAgICAgbGV0IG9mU2VxID0gJyc7XG4gICAgICAgIGlmIChleHBvcnRPcHRzLnNlcXVlbmNlKSB7XG4gICAgICAgICAgY29uc3QgaGFzVG90YWxGcmFtZXMgPSBpc0Zpbml0ZSh0aGlzLnByb3BzLnRvdGFsRnJhbWVzKTtcbiAgICAgICAgICBvZlNlcSA9IGhhc1RvdGFsRnJhbWVzID8gYCAoZnJhbWUgJHtleHBvcnRPcHRzLmZyYW1lICsgMX0gLyAke3RoaXMucHJvcHMudG90YWxGcmFtZXN9KWAgOiBgIChmcmFtZSAke2V4cG9ydE9wdHMuZnJhbWV9KWA7XG4gICAgICAgIH0gZWxzZSBpZiAoc2F2ZWRFdmVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIG9mU2VxID0gYCBmaWxlc2A7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xpZW50ID0gaXNDbGllbnQgPyAnY2FudmFzLXNrZXRjaC1jbGknIDogJ2NhbnZhcy1za2V0Y2gnO1xuICAgICAgICBjb25zdCBhY3Rpb24gPSBpc1N0cmVhbWluZyA/ICdTdHJlYW1pbmcgaW50bycgOiAnRXhwb3J0ZWQnO1xuICAgICAgICBjb25zb2xlLmxvZyhgJWNbJHtjbGllbnR9XSVjICR7YWN0aW9ufSAlYyR7aXRlbX0lYyR7b2ZTZXF9YCwgJ2NvbG9yOiAjOGU4ZThlOycsICdjb2xvcjogaW5pdGlhbDsnLCAnZm9udC13ZWlnaHQ6IGJvbGQ7JywgJ2ZvbnQtd2VpZ2h0OiBpbml0aWFsOycpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnNrZXRjaC5wb3N0RXhwb3J0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuc2tldGNoLnBvc3RFeHBvcnQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBldjtcbiAgICB9KTtcbiAgfVxuXG4gIF93cmFwQ29udGV4dFNjYWxlIChjYikge1xuICAgIHRoaXMuX3ByZVJlbmRlcigpO1xuICAgIGNiKHRoaXMucHJvcHMpO1xuICAgIHRoaXMuX3Bvc3RSZW5kZXIoKTtcbiAgfVxuXG4gIF9wcmVSZW5kZXIgKCkge1xuICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcztcblxuICAgIC8vIFNjYWxlIGNvbnRleHQgZm9yIHVuaXQgc2l6aW5nXG4gICAgaWYgKCF0aGlzLnByb3BzLmdsICYmIHByb3BzLmNvbnRleHQgJiYgIXByb3BzLnA1KSB7XG4gICAgICBwcm9wcy5jb250ZXh0LnNhdmUoKTtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLnNjYWxlQ29udGV4dCAhPT0gZmFsc2UpIHtcbiAgICAgICAgcHJvcHMuY29udGV4dC5zY2FsZShwcm9wcy5zY2FsZVgsIHByb3BzLnNjYWxlWSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wcy5wNSkge1xuICAgICAgcHJvcHMucDUuc2NhbGUocHJvcHMuc2NhbGVYIC8gcHJvcHMucGl4ZWxSYXRpbywgcHJvcHMuc2NhbGVZIC8gcHJvcHMucGl4ZWxSYXRpbyk7XG4gICAgfVxuICB9XG5cbiAgX3Bvc3RSZW5kZXIgKCkge1xuICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcztcblxuICAgIGlmICghdGhpcy5wcm9wcy5nbCAmJiBwcm9wcy5jb250ZXh0ICYmICFwcm9wcy5wNSkge1xuICAgICAgcHJvcHMuY29udGV4dC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgLy8gRmx1c2ggYnkgZGVmYXVsdCwgdGhpcyBtYXkgYmUgcmV2aXNpdGVkIGF0IGEgbGF0ZXIgcG9pbnQuXG4gICAgLy8gV2UgZG8gdGhpcyB0byBlbnN1cmUgdG9EYXRhVVJMIGNhbiBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIuXG4gICAgLy8gTW9zdCBsaWtlbHkgYnJvd3NlcnMgYWxyZWFkeSBoYW5kbGUgdGhpcywgc28gd2UgbWF5IHJldmlzaXQgdGhpcyBhbmRcbiAgICAvLyByZW1vdmUgaXQgaWYgaXQgaW1wcm92ZXMgcGVyZm9ybWFuY2Ugd2l0aG91dCBhbnkgdXNhYmlsaXR5IGlzc3Vlcy5cbiAgICBpZiAocHJvcHMuZ2wgJiYgdGhpcy5zZXR0aW5ncy5mbHVzaCAhPT0gZmFsc2UgJiYgIXByb3BzLnA1KSB7XG4gICAgICBwcm9wcy5nbC5mbHVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIHRpY2sgKCkge1xuICAgIGlmICh0aGlzLnNrZXRjaCAmJiB0eXBlb2YgdGhpcy5za2V0Y2gudGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fcHJlUmVuZGVyKCk7XG4gICAgICB0aGlzLnNrZXRjaC50aWNrKHRoaXMucHJvcHMpO1xuICAgICAgdGhpcy5fcG9zdFJlbmRlcigpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlciAoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucDUpIHtcbiAgICAgIHRoaXMuX2xhc3RSZWRyYXdSZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnByb3BzLnA1LnJlZHJhdygpO1xuICAgICAgcmV0dXJuIHRoaXMuX2xhc3RSZWRyYXdSZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnN1Ym1pdERyYXdDYWxsKCk7XG4gICAgfVxuICB9XG5cbiAgc3VibWl0RHJhd0NhbGwgKCkge1xuICAgIGlmICghdGhpcy5za2V0Y2gpIHJldHVybjtcblxuICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcztcbiAgICB0aGlzLl9wcmVSZW5kZXIoKTtcblxuICAgIGxldCBkcmF3UmVzdWx0O1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLnNrZXRjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZHJhd1Jlc3VsdCA9IHRoaXMuc2tldGNoKHByb3BzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnNrZXRjaC5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGRyYXdSZXN1bHQgPSB0aGlzLnNrZXRjaC5yZW5kZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHRoaXMuX3Bvc3RSZW5kZXIoKTtcblxuICAgIHJldHVybiBkcmF3UmVzdWx0O1xuICB9XG5cbiAgdXBkYXRlIChvcHQgPSB7fSkge1xuICAgIC8vIEN1cnJlbnRseSB1cGRhdGUoKSBpcyBvbmx5IGZvY3VzZWQgb24gcmVzaXppbmcsXG4gICAgLy8gYnV0IGxhdGVyIHdlIHdpbGwgc3VwcG9ydCBvdGhlciBvcHRpb25zIGxpa2Ugc3dpdGNoaW5nXG4gICAgLy8gZnJhbWVzIGFuZCBzdWNoLlxuICAgIGNvbnN0IG5vdFlldFN1cHBvcnRlZCA9IFtcbiAgICAgICdhbmltYXRlJ1xuICAgIF07XG5cbiAgICBPYmplY3Qua2V5cyhvcHQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChub3RZZXRTdXBwb3J0ZWQuaW5kZXhPZihrZXkpID49IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTb3JyeSwgdGhlIHsgJHtrZXl9IH0gb3B0aW9uIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggdXBkYXRlKCkuYCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBvbGRDYW52YXMgPSB0aGlzLl9zZXR0aW5ncy5jYW52YXM7XG4gICAgY29uc3Qgb2xkQ29udGV4dCA9IHRoaXMuX3NldHRpbmdzLmNvbnRleHQ7XG5cbiAgICAvLyBNZXJnZSBuZXcgb3B0aW9ucyBpbnRvIHNldHRpbmdzXG4gICAgZm9yIChsZXQga2V5IGluIG9wdCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7IC8vIGlnbm9yZSB1bmRlZmluZWRcbiAgICAgICAgdGhpcy5fc2V0dGluZ3Nba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1lcmdlIGluIHRpbWUgcHJvcHNcbiAgICBjb25zdCB0aW1lT3B0cyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3NldHRpbmdzLCBvcHQpO1xuICAgIGlmICgndGltZScgaW4gb3B0ICYmICdmcmFtZScgaW4gb3B0KSB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBzaG91bGQgc3BlY2lmeSB7IHRpbWUgfSBvciB7IGZyYW1lIH0gYnV0IG5vdCBib3RoJyk7XG4gICAgZWxzZSBpZiAoJ3RpbWUnIGluIG9wdCkgZGVsZXRlIHRpbWVPcHRzLmZyYW1lO1xuICAgIGVsc2UgaWYgKCdmcmFtZScgaW4gb3B0KSBkZWxldGUgdGltZU9wdHMudGltZTtcbiAgICBpZiAoJ2R1cmF0aW9uJyBpbiBvcHQgJiYgJ3RvdGFsRnJhbWVzJyBpbiBvcHQpIHRocm93IG5ldyBFcnJvcignWW91IHNob3VsZCBzcGVjaWZ5IHsgZHVyYXRpb24gfSBvciB7IHRvdGFsRnJhbWVzIH0gYnV0IG5vdCBib3RoJyk7XG4gICAgZWxzZSBpZiAoJ2R1cmF0aW9uJyBpbiBvcHQpIGRlbGV0ZSB0aW1lT3B0cy50b3RhbEZyYW1lcztcbiAgICBlbHNlIGlmICgndG90YWxGcmFtZXMnIGluIG9wdCkgZGVsZXRlIHRpbWVPcHRzLmR1cmF0aW9uO1xuXG4gICAgLy8gTWVyZ2UgaW4gdXNlciBkYXRhIHdpdGhvdXQgY29weWluZ1xuICAgIGlmICgnZGF0YScgaW4gb3B0KSB0aGlzLl9wcm9wcy5kYXRhID0gb3B0LmRhdGE7XG5cbiAgICBjb25zdCB0aW1lUHJvcHMgPSB0aGlzLmdldFRpbWVQcm9wcyh0aW1lT3B0cyk7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9wcm9wcywgdGltZVByb3BzKTtcblxuICAgIC8vIElmIGVpdGhlciBjYW52YXMgb3IgY29udGV4dCBpcyBjaGFuZ2VkLCB3ZSBzaG91bGQgcmUtdXBkYXRlXG4gICAgaWYgKG9sZENhbnZhcyAhPT0gdGhpcy5fc2V0dGluZ3MuY2FudmFzIHx8IG9sZENvbnRleHQgIT09IHRoaXMuX3NldHRpbmdzLmNvbnRleHQpIHtcbiAgICAgIGNvbnN0IHsgY2FudmFzLCBjb250ZXh0IH0gPSBjcmVhdGVDYW52YXModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgICB0aGlzLnByb3BzLmNhbnZhcyA9IGNhbnZhcztcbiAgICAgIHRoaXMucHJvcHMuY29udGV4dCA9IGNvbnRleHQ7XG5cbiAgICAgIC8vIERlbGV0ZSBvciBhZGQgYSAnZ2wnIHByb3AgZm9yIGNvbnZlbmllbmNlXG4gICAgICB0aGlzLl9zZXR1cEdMS2V5KCk7XG5cbiAgICAgIC8vIFJlLW1vdW50IHRoZSBuZXcgY2FudmFzIGlmIGl0IGhhcyBubyBwYXJlbnRcbiAgICAgIHRoaXMuX2FwcGVuZENhbnZhc0lmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBjYXNlIHRvIHN1cHBvcnQgUDUuanNcbiAgICBpZiAob3B0LnA1ICYmIHR5cGVvZiBvcHQucDUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMucHJvcHMucDUgPSBvcHQucDU7XG4gICAgICB0aGlzLnByb3BzLnA1LmRyYXcgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9pc1A1UmVzaXppbmcpIHJldHVybjtcbiAgICAgICAgdGhpcy5fbGFzdFJlZHJhd1Jlc3VsdCA9IHRoaXMuc3VibWl0RHJhd0NhbGwoKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHBsYXlpbmcgc3RhdGUgaWYgbmVjZXNzYXJ5XG4gICAgaWYgKCdwbGF5aW5nJyBpbiBvcHQpIHtcbiAgICAgIGlmIChvcHQucGxheWluZykgdGhpcy5wbGF5KCk7XG4gICAgICBlbHNlIHRoaXMucGF1c2UoKTtcbiAgICB9XG5cbiAgICBjaGVja1NldHRpbmdzKHRoaXMuX3NldHRpbmdzKTtcblxuICAgIC8vIERyYXcgbmV3IGZyYW1lXG4gICAgdGhpcy5yZXNpemUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHJldHVybiB0aGlzLnByb3BzO1xuICB9XG5cbiAgcmVzaXplICgpIHtcbiAgICBjb25zdCBvbGRTaXplcyA9IHRoaXMuX2dldFNpemVQcm9wcygpO1xuXG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzO1xuICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcztcblxuICAgIC8vIFJlY29tcHV0ZSBuZXcgcHJvcGVydGllcyBiYXNlZCBvbiBjdXJyZW50IHNldHVwXG4gICAgY29uc3QgbmV3UHJvcHMgPSByZXNpemVDYW52YXMocHJvcHMsIHNldHRpbmdzKTtcblxuICAgIC8vIEFzc2lnbiB0byBjdXJyZW50IHByb3BzXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9wcm9wcywgbmV3UHJvcHMpO1xuXG4gICAgLy8gTm93IHdlIGFjdHVhbGx5IHVwZGF0ZSB0aGUgY2FudmFzIHdpZHRoL2hlaWdodCBhbmQgc3R5bGUgcHJvcHNcbiAgICBjb25zdCB7XG4gICAgICBwaXhlbFJhdGlvLFxuICAgICAgY2FudmFzV2lkdGgsXG4gICAgICBjYW52YXNIZWlnaHQsXG4gICAgICBzdHlsZVdpZHRoLFxuICAgICAgc3R5bGVIZWlnaHRcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIC8vIFVwZGF0ZSBjYW52YXMgc2V0dGluZ3NcbiAgICBjb25zdCBjYW52YXMgPSB0aGlzLnByb3BzLmNhbnZhcztcbiAgICBpZiAoY2FudmFzICYmIHNldHRpbmdzLnJlc2l6ZUNhbnZhcyAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChwcm9wcy5wNSkge1xuICAgICAgICAvLyBQNS5qcyBzcGVjaWZpYyBlZGdlIGNhc2VcbiAgICAgICAgaWYgKGNhbnZhcy53aWR0aCAhPT0gY2FudmFzV2lkdGggfHwgY2FudmFzLmhlaWdodCAhPT0gY2FudmFzSGVpZ2h0KSB7XG4gICAgICAgICAgdGhpcy5faXNQNVJlc2l6aW5nID0gdHJ1ZTtcbiAgICAgICAgICAvLyBUaGlzIGNhdXNlcyBhIHJlLWRyYXcgOlxcIHNvIHdlIGlnbm9yZSBkcmF3cyBpbiB0aGUgbWVhbiB0aW1lLi4uIHNvcnRhIGhhY2t5XG4gICAgICAgICAgcHJvcHMucDUucGl4ZWxEZW5zaXR5KHBpeGVsUmF0aW8pO1xuICAgICAgICAgIHByb3BzLnA1LnJlc2l6ZUNhbnZhcyhjYW52YXNXaWR0aCAvIHBpeGVsUmF0aW8sIGNhbnZhc0hlaWdodCAvIHBpeGVsUmF0aW8sIGZhbHNlKTtcbiAgICAgICAgICB0aGlzLl9pc1A1UmVzaXppbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yY2UgY2FudmFzIHNpemVcbiAgICAgICAgaWYgKGNhbnZhcy53aWR0aCAhPT0gY2FudmFzV2lkdGgpIGNhbnZhcy53aWR0aCA9IGNhbnZhc1dpZHRoO1xuICAgICAgICBpZiAoY2FudmFzLmhlaWdodCAhPT0gY2FudmFzSGVpZ2h0KSBjYW52YXMuaGVpZ2h0ID0gY2FudmFzSGVpZ2h0O1xuICAgICAgfVxuICAgICAgLy8gVXBkYXRlIGNhbnZhcyBzdHlsZVxuICAgICAgaWYgKGlzQnJvd3NlcigpICYmIHNldHRpbmdzLnN0eWxlQ2FudmFzICE9PSBmYWxzZSkge1xuICAgICAgICBjYW52YXMuc3R5bGUud2lkdGggPSBgJHtzdHlsZVdpZHRofXB4YDtcbiAgICAgICAgY2FudmFzLnN0eWxlLmhlaWdodCA9IGAke3N0eWxlSGVpZ2h0fXB4YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBuZXdTaXplcyA9IHRoaXMuX2dldFNpemVQcm9wcygpO1xuICAgIGxldCBjaGFuZ2VkID0gIWRlZXBFcXVhbChvbGRTaXplcywgbmV3U2l6ZXMpO1xuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLl9zaXplQ2hhbmdlZCgpO1xuICAgIH1cbiAgICByZXR1cm4gY2hhbmdlZDtcbiAgfVxuXG4gIF9zaXplQ2hhbmdlZCAoKSB7XG4gICAgLy8gU2VuZCByZXNpemUgZXZlbnQgdG8gc2tldGNoXG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC5yZXNpemUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuc2tldGNoLnJlc2l6ZSh0aGlzLnByb3BzKTtcbiAgICB9XG4gIH1cblxuICBhbmltYXRlICgpIHtcbiAgICBpZiAoIXRoaXMucHJvcHMucGxheWluZykgcmV0dXJuO1xuICAgIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tjYW52YXMtc2tldGNoXSBXQVJOOiBBbmltYXRpb24gaW4gTm9kZS5qcyBpcyBub3QgeWV0IHN1cHBvcnRlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9yYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2FuaW1hdGVIYW5kbGVyKTtcblxuICAgIGxldCBub3cgPSByaWdodE5vdygpO1xuXG4gICAgY29uc3QgZnBzID0gdGhpcy5wcm9wcy5mcHM7XG4gICAgY29uc3QgZnJhbWVJbnRlcnZhbE1TID0gMTAwMCAvIGZwcztcbiAgICBsZXQgZGVsdGFUaW1lTVMgPSBub3cgLSB0aGlzLl9sYXN0VGltZTtcblxuICAgIGNvbnN0IGR1cmF0aW9uID0gdGhpcy5wcm9wcy5kdXJhdGlvbjtcbiAgICBjb25zdCBoYXNEdXJhdGlvbiA9IHR5cGVvZiBkdXJhdGlvbiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoZHVyYXRpb24pO1xuXG4gICAgbGV0IGlzTmV3RnJhbWUgPSB0cnVlO1xuICAgIGNvbnN0IHBsYXliYWNrUmF0ZSA9IHRoaXMuc2V0dGluZ3MucGxheWJhY2tSYXRlO1xuICAgIGlmIChwbGF5YmFja1JhdGUgPT09ICdmaXhlZCcpIHtcbiAgICAgIGRlbHRhVGltZU1TID0gZnJhbWVJbnRlcnZhbE1TO1xuICAgIH0gZWxzZSBpZiAocGxheWJhY2tSYXRlID09PSAndGhyb3R0bGUnKSB7XG4gICAgICBpZiAoZGVsdGFUaW1lTVMgPiBmcmFtZUludGVydmFsTVMpIHtcbiAgICAgICAgbm93ID0gbm93IC0gKGRlbHRhVGltZU1TICUgZnJhbWVJbnRlcnZhbE1TKTtcbiAgICAgICAgdGhpcy5fbGFzdFRpbWUgPSBub3c7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc05ld0ZyYW1lID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xhc3RUaW1lID0gbm93O1xuICAgIH1cblxuICAgIGNvbnN0IGRlbHRhVGltZSA9IGRlbHRhVGltZU1TIC8gMTAwMDtcbiAgICBsZXQgbmV3VGltZSA9IHRoaXMucHJvcHMudGltZSArIGRlbHRhVGltZSAqIHRoaXMucHJvcHMudGltZVNjYWxlO1xuXG4gICAgLy8gSGFuZGxlIHJldmVyc2UgdGltZSBzY2FsZVxuICAgIGlmIChuZXdUaW1lIDwgMCAmJiBoYXNEdXJhdGlvbikge1xuICAgICAgbmV3VGltZSA9IGR1cmF0aW9uICsgbmV3VGltZTtcbiAgICB9XG5cbiAgICAvLyBSZS1zdGFydCBhbmltYXRpb25cbiAgICBsZXQgaXNGaW5pc2hlZCA9IGZhbHNlO1xuICAgIGxldCBpc0xvb3BTdGFydCA9IGZhbHNlO1xuXG4gICAgY29uc3QgbG9vcGluZyA9IHRoaXMuc2V0dGluZ3MubG9vcCAhPT0gZmFsc2U7XG5cbiAgICBpZiAoaGFzRHVyYXRpb24gJiYgbmV3VGltZSA+PSBkdXJhdGlvbikge1xuICAgICAgLy8gUmUtc3RhcnQgYW5pbWF0aW9uXG4gICAgICBpZiAobG9vcGluZykge1xuICAgICAgICBpc05ld0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgbmV3VGltZSA9IG5ld1RpbWUgJSBkdXJhdGlvbjtcbiAgICAgICAgaXNMb29wU3RhcnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNOZXdGcmFtZSA9IGZhbHNlO1xuICAgICAgICBuZXdUaW1lID0gZHVyYXRpb247XG4gICAgICAgIGlzRmluaXNoZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zaWduYWxFbmQoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOZXdGcmFtZSkge1xuICAgICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSBkZWx0YVRpbWU7XG4gICAgICB0aGlzLnByb3BzLnRpbWUgPSBuZXdUaW1lO1xuICAgICAgdGhpcy5wcm9wcy5wbGF5aGVhZCA9IHRoaXMuX2NvbXB1dGVQbGF5aGVhZChuZXdUaW1lLCBkdXJhdGlvbik7XG4gICAgICBjb25zdCBsYXN0RnJhbWUgPSB0aGlzLnByb3BzLmZyYW1lO1xuICAgICAgdGhpcy5wcm9wcy5mcmFtZSA9IHRoaXMuX2NvbXB1dGVDdXJyZW50RnJhbWUoKTtcbiAgICAgIGlmIChpc0xvb3BTdGFydCkgdGhpcy5fc2lnbmFsQmVnaW4oKTtcbiAgICAgIGlmIChsYXN0RnJhbWUgIT09IHRoaXMucHJvcHMuZnJhbWUpIHRoaXMudGljaygpO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHRoaXMucHJvcHMuZGVsdGFUaW1lID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaXNGaW5pc2hlZCkge1xuICAgICAgdGhpcy5wYXVzZSgpO1xuICAgIH1cbiAgfVxuXG4gIGRpc3BhdGNoIChjYikge1xuICAgIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBFcnJvcignbXVzdCBwYXNzIGZ1bmN0aW9uIGludG8gZGlzcGF0Y2goKScpO1xuICAgIGNiKHRoaXMucHJvcHMpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBtb3VudCAoKSB7XG4gICAgdGhpcy5fYXBwZW5kQ2FudmFzSWZOZWVkZWQoKTtcbiAgfVxuXG4gIHVubW91bnQgKCkge1xuICAgIGlmIChpc0Jyb3dzZXIoKSkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3Jlc2l6ZUhhbmRsZXIpO1xuICAgICAgdGhpcy5fa2V5Ym9hcmRTaG9ydGN1dHMuZGV0YWNoKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLmNhbnZhcy5wYXJlbnRFbGVtZW50KSB7XG4gICAgICB0aGlzLnByb3BzLmNhbnZhcy5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMucHJvcHMuY2FudmFzKTtcbiAgICB9XG4gIH1cblxuICBfYXBwZW5kQ2FudmFzSWZOZWVkZWQgKCkge1xuICAgIGlmICghaXNCcm93c2VyKCkpIHJldHVybjtcbiAgICBpZiAodGhpcy5zZXR0aW5ncy5wYXJlbnQgIT09IGZhbHNlICYmICh0aGlzLnByb3BzLmNhbnZhcyAmJiAhdGhpcy5wcm9wcy5jYW52YXMucGFyZW50RWxlbWVudCkpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRQYXJlbnQgPSB0aGlzLnNldHRpbmdzLnBhcmVudCB8fCBkb2N1bWVudC5ib2R5O1xuICAgICAgZGVmYXVsdFBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLnByb3BzLmNhbnZhcyk7XG4gICAgfVxuICB9XG5cbiAgX3NldHVwR0xLZXkgKCkge1xuICAgIGlmICh0aGlzLnByb3BzLmNvbnRleHQpIHtcbiAgICAgIGlmIChpc1dlYkdMQ29udGV4dCh0aGlzLnByb3BzLmNvbnRleHQpKSB7XG4gICAgICAgIHRoaXMuX3Byb3BzLmdsID0gdGhpcy5wcm9wcy5jb250ZXh0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3Byb3BzLmdsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldFRpbWVQcm9wcyAoc2V0dGluZ3MgPSB7fSkge1xuICAgIC8vIEdldCB0aW1pbmcgZGF0YVxuICAgIGxldCBkdXJhdGlvbiA9IHNldHRpbmdzLmR1cmF0aW9uO1xuICAgIGxldCB0b3RhbEZyYW1lcyA9IHNldHRpbmdzLnRvdGFsRnJhbWVzO1xuICAgIGNvbnN0IHRpbWVTY2FsZSA9IGRlZmluZWQoc2V0dGluZ3MudGltZVNjYWxlLCAxKTtcbiAgICBjb25zdCBmcHMgPSBkZWZpbmVkKHNldHRpbmdzLmZwcywgMjQpO1xuICAgIGNvbnN0IGhhc0R1cmF0aW9uID0gdHlwZW9mIGR1cmF0aW9uID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShkdXJhdGlvbik7XG4gICAgY29uc3QgaGFzVG90YWxGcmFtZXMgPSB0eXBlb2YgdG90YWxGcmFtZXMgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHRvdGFsRnJhbWVzKTtcblxuICAgIGNvbnN0IHRvdGFsRnJhbWVzRnJvbUR1cmF0aW9uID0gaGFzRHVyYXRpb24gPyBNYXRoLmZsb29yKGZwcyAqIGR1cmF0aW9uKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBkdXJhdGlvbkZyb21Ub3RhbEZyYW1lcyA9IGhhc1RvdGFsRnJhbWVzID8gKHRvdGFsRnJhbWVzIC8gZnBzKSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoaGFzRHVyYXRpb24gJiYgaGFzVG90YWxGcmFtZXMgJiYgdG90YWxGcmFtZXNGcm9tRHVyYXRpb24gIT09IHRvdGFsRnJhbWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBzaG91bGQgc3BlY2lmeSBlaXRoZXIgZHVyYXRpb24gb3IgdG90YWxGcmFtZXMsIGJ1dCBub3QgYm90aC4gT3IsIHRoZXkgbXVzdCBtYXRjaCBleGFjdGx5LicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc2V0dGluZ3MuZGltZW5zaW9ucyA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHNldHRpbmdzLnVuaXRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS53YXJuKGBZb3UndmUgc3BlY2lmaWVkIGEgeyB1bml0cyB9IHNldHRpbmcgYnV0IG5vIHsgZGltZW5zaW9uIH0sIHNvIHRoZSB1bml0cyB3aWxsIGJlIGlnbm9yZWQuYCk7XG4gICAgfVxuXG4gICAgdG90YWxGcmFtZXMgPSBkZWZpbmVkKHRvdGFsRnJhbWVzLCB0b3RhbEZyYW1lc0Zyb21EdXJhdGlvbiwgSW5maW5pdHkpO1xuICAgIGR1cmF0aW9uID0gZGVmaW5lZChkdXJhdGlvbiwgZHVyYXRpb25Gcm9tVG90YWxGcmFtZXMsIEluZmluaXR5KTtcblxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IHNldHRpbmdzLnRpbWU7XG4gICAgY29uc3Qgc3RhcnRGcmFtZSA9IHNldHRpbmdzLmZyYW1lO1xuICAgIGNvbnN0IGhhc1N0YXJ0VGltZSA9IHR5cGVvZiBzdGFydFRpbWUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHN0YXJ0VGltZSk7XG4gICAgY29uc3QgaGFzU3RhcnRGcmFtZSA9IHR5cGVvZiBzdGFydEZyYW1lID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShzdGFydEZyYW1lKTtcblxuICAgIC8vIHN0YXJ0IGF0IHplcm8gdW5sZXNzIHVzZXIgc3BlY2lmaWVzIGZyYW1lIG9yIHRpbWUgKGJ1dCBub3QgYm90aCBtaXNtYXRjaGVkKVxuICAgIGxldCB0aW1lID0gMDtcbiAgICBsZXQgZnJhbWUgPSAwO1xuICAgIGxldCBwbGF5aGVhZCA9IDA7XG4gICAgaWYgKGhhc1N0YXJ0VGltZSAmJiBoYXNTdGFydEZyYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBzaG91bGQgc3BlY2lmeSBlaXRoZXIgc3RhcnQgZnJhbWUgb3IgdGltZSwgYnV0IG5vdCBib3RoLicpO1xuICAgIH0gZWxzZSBpZiAoaGFzU3RhcnRUaW1lKSB7XG4gICAgICAvLyBVc2VyIHNwZWNpZmllcyB0aW1lLCB3ZSBpbmZlciBmcmFtZXMgZnJvbSBGUFNcbiAgICAgIHRpbWUgPSBzdGFydFRpbWU7XG4gICAgICBwbGF5aGVhZCA9IHRoaXMuX2NvbXB1dGVQbGF5aGVhZCh0aW1lLCBkdXJhdGlvbik7XG4gICAgICBmcmFtZSA9IHRoaXMuX2NvbXB1dGVGcmFtZShcbiAgICAgICAgcGxheWhlYWQsIHRpbWUsXG4gICAgICAgIHRvdGFsRnJhbWVzLCBmcHNcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChoYXNTdGFydEZyYW1lKSB7XG4gICAgICAvLyBVc2VyIHNwZWNpZmllcyBmcmFtZSBudW1iZXIsIHdlIGluZmVyIHRpbWUgZnJvbSBGUFNcbiAgICAgIGZyYW1lID0gc3RhcnRGcmFtZTtcbiAgICAgIHRpbWUgPSBmcmFtZSAvIGZwcztcbiAgICAgIHBsYXloZWFkID0gdGhpcy5fY29tcHV0ZVBsYXloZWFkKHRpbWUsIGR1cmF0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGxheWhlYWQsXG4gICAgICB0aW1lLFxuICAgICAgZnJhbWUsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIHRvdGFsRnJhbWVzLFxuICAgICAgZnBzLFxuICAgICAgdGltZVNjYWxlXG4gICAgfTtcbiAgfVxuXG4gIHNldHVwIChzZXR0aW5ncyA9IHt9KSB7XG4gICAgaWYgKHRoaXMuc2tldGNoKSB0aHJvdyBuZXcgRXJyb3IoJ011bHRpcGxlIHNldHVwKCkgY2FsbHMgbm90IHlldCBzdXBwb3J0ZWQuJyk7XG5cbiAgICB0aGlzLl9zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHNldHRpbmdzLCB0aGlzLl9zZXR0aW5ncyk7XG5cbiAgICBjaGVja1NldHRpbmdzKHRoaXMuX3NldHRpbmdzKTtcblxuICAgIC8vIEdldCBpbml0aWFsIGNhbnZhcyAmIGNvbnRleHRcbiAgICBjb25zdCB7IGNvbnRleHQsIGNhbnZhcyB9ID0gY3JlYXRlQ2FudmFzKHRoaXMuX3NldHRpbmdzKTtcblxuICAgIGNvbnN0IHRpbWVQcm9wcyA9IHRoaXMuZ2V0VGltZVByb3BzKHRoaXMuX3NldHRpbmdzKTtcblxuICAgIC8vIEluaXRpYWwgcmVuZGVyIHN0YXRlIGZlYXR1cmVzXG4gICAgdGhpcy5fcHJvcHMgPSB7XG4gICAgICAuLi50aW1lUHJvcHMsXG4gICAgICBjYW52YXMsXG4gICAgICBjb250ZXh0LFxuICAgICAgZGVsdGFUaW1lOiAwLFxuICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICBleHBvcnRpbmc6IGZhbHNlLFxuICAgICAgcGxheWluZzogZmFsc2UsXG4gICAgICByZWNvcmRpbmc6IGZhbHNlLFxuICAgICAgc2V0dGluZ3M6IHRoaXMuc2V0dGluZ3MsXG4gICAgICBkYXRhOiB0aGlzLnNldHRpbmdzLmRhdGEsXG5cbiAgICAgIC8vIEV4cG9ydCBzb21lIHNwZWNpZmljIGFjdGlvbnMgdG8gdGhlIHNrZXRjaFxuICAgICAgcmVuZGVyOiAoKSA9PiB0aGlzLnJlbmRlcigpLFxuICAgICAgdG9nZ2xlUGxheTogKCkgPT4gdGhpcy50b2dnbGVQbGF5KCksXG4gICAgICBkaXNwYXRjaDogKGNiKSA9PiB0aGlzLmRpc3BhdGNoKGNiKSxcbiAgICAgIHRpY2s6ICgpID0+IHRoaXMudGljaygpLFxuICAgICAgcmVzaXplOiAoKSA9PiB0aGlzLnJlc2l6ZSgpLFxuICAgICAgdXBkYXRlOiAob3B0KSA9PiB0aGlzLnVwZGF0ZShvcHQpLFxuICAgICAgZXhwb3J0RnJhbWU6IG9wdCA9PiB0aGlzLmV4cG9ydEZyYW1lKG9wdCksXG4gICAgICByZWNvcmQ6ICgpID0+IHRoaXMucmVjb3JkKCksXG4gICAgICBwbGF5OiAoKSA9PiB0aGlzLnBsYXkoKSxcbiAgICAgIHBhdXNlOiAoKSA9PiB0aGlzLnBhdXNlKCksXG4gICAgICBzdG9wOiAoKSA9PiB0aGlzLnN0b3AoKVxuICAgIH07XG5cbiAgICAvLyBGb3IgV2ViR0wgc2tldGNoZXMsIGEgZ2wgdmFyaWFibGUgcmVhZHMgYSBiaXQgYmV0dGVyXG4gICAgdGhpcy5fc2V0dXBHTEtleSgpO1xuXG4gICAgLy8gVHJpZ2dlciBpbml0aWFsIHJlc2l6ZSBub3cgc28gdGhhdCBjYW52YXMgaXMgYWxyZWFkeSBzaXplZFxuICAgIC8vIGJ5IHRoZSB0aW1lIHdlIGxvYWQgdGhlIHNrZXRjaFxuICAgIHRoaXMucmVzaXplKCk7XG4gIH1cblxuICBsb2FkQW5kUnVuIChjYW52YXNTa2V0Y2gsIG5ld1NldHRpbmdzKSB7XG4gICAgcmV0dXJuIHRoaXMubG9hZChjYW52YXNTa2V0Y2gsIG5ld1NldHRpbmdzKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMucnVuKCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9KTtcbiAgfVxuXG4gIHVubG9hZCAoKSB7XG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIGlmICghdGhpcy5za2V0Y2gpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIHRoaXMuc2tldGNoLnVubG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fd3JhcENvbnRleHRTY2FsZShwcm9wcyA9PiB0aGlzLnNrZXRjaC51bmxvYWQocHJvcHMpKTtcbiAgICB9XG4gICAgdGhpcy5fc2tldGNoID0gbnVsbDtcbiAgfVxuXG4gIGRlc3Ryb3kgKCkge1xuICAgIHRoaXMudW5sb2FkKCk7XG4gICAgdGhpcy51bm1vdW50KCk7XG4gIH1cblxuICBsb2FkIChjcmVhdGVTa2V0Y2gsIG5ld1NldHRpbmdzKSB7XG4gICAgLy8gVXNlciBkaWRuJ3Qgc3BlY2lmeSBhIGZ1bmN0aW9uXG4gICAgaWYgKHR5cGVvZiBjcmVhdGVTa2V0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZ1bmN0aW9uIG11c3QgdGFrZSBpbiBhIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIuIEV4YW1wbGU6XFxuICBjYW52YXNTa2V0Y2hlcigoKSA9PiB7IC4uLiB9LCBzZXR0aW5ncyknKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5za2V0Y2gpIHtcbiAgICAgIHRoaXMudW5sb2FkKCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdTZXR0aW5ncyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMudXBkYXRlKG5ld1NldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGEgYml0IG9mIGEgdHJpY2t5IGNhc2U7IHdlIHNldCB1cCB0aGUgYXV0by1zY2FsaW5nIGhlcmVcbiAgICAvLyBpbiBjYXNlIHRoZSB1c2VyIGRlY2lkZXMgdG8gcmVuZGVyIGFueXRoaW5nIHRvIHRoZSBjb250ZXh0ICpiZWZvcmUqIHRoZVxuICAgIC8vIHJlbmRlcigpIGZ1bmN0aW9uLi4uIEhvd2V2ZXIsIHVzZXJzIHNob3VsZCBpbnN0ZWFkIHVzZSBiZWdpbigpIGZ1bmN0aW9uIGZvciB0aGF0LlxuICAgIHRoaXMuX3ByZVJlbmRlcigpO1xuXG4gICAgbGV0IHByZWxvYWQgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgIC8vIEJlY2F1c2Ugb2YgUDUuanMncyB1bnVzdWFsIHN0cnVjdHVyZSwgd2UgaGF2ZSB0byBkbyBhIGJpdCBvZlxuICAgIC8vIGxpYnJhcnktc3BlY2lmaWMgY2hhbmdlcyB0byBzdXBwb3J0IGl0IHByb3Blcmx5LlxuICAgIGlmICh0aGlzLnNldHRpbmdzLnA1KSB7XG4gICAgICBpZiAoIWlzQnJvd3NlcigpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignW2NhbnZhcy1za2V0Y2hdIEVSUk9SOiBVc2luZyBwNS5qcyBpbiBOb2RlLmpzIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgIH1cbiAgICAgIHByZWxvYWQgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgbGV0IFA1Q29uc3RydWN0b3IgPSB0aGlzLnNldHRpbmdzLnA1O1xuICAgICAgICBsZXQgcHJlbG9hZDtcbiAgICAgICAgaWYgKFA1Q29uc3RydWN0b3IucDUpIHtcbiAgICAgICAgICBwcmVsb2FkID0gUDVDb25zdHJ1Y3Rvci5wcmVsb2FkO1xuICAgICAgICAgIFA1Q29uc3RydWN0b3IgPSBQNUNvbnN0cnVjdG9yLnA1O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHNrZXRjaCBzZXR1cDsgZGlzYWJsZSBsb29wLCBzZXQgc2l6aW5nLCBldGMuXG4gICAgICAgIGNvbnN0IHA1U2tldGNoID0gcDUgPT4ge1xuICAgICAgICAgIC8vIEhvb2sgaW4gcHJlbG9hZCBpZiBuZWNlc3NhcnlcbiAgICAgICAgICBpZiAocHJlbG9hZCkgcDUucHJlbG9hZCA9ICgpID0+IHByZWxvYWQocDUpO1xuICAgICAgICAgIHA1LnNldHVwID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuICAgICAgICAgICAgY29uc3QgaXNHTCA9IHRoaXMuc2V0dGluZ3MuY29udGV4dCA9PT0gJ3dlYmdsJztcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcmVyID0gaXNHTCA/IHA1LldFQkdMIDogcDUuUDJEO1xuICAgICAgICAgICAgcDUubm9Mb29wKCk7XG4gICAgICAgICAgICBwNS5waXhlbERlbnNpdHkocHJvcHMucGl4ZWxSYXRpbyk7XG4gICAgICAgICAgICBwNS5jcmVhdGVDYW52YXMocHJvcHMudmlld3BvcnRXaWR0aCwgcHJvcHMudmlld3BvcnRIZWlnaHQsIHJlbmRlcmVyKTtcbiAgICAgICAgICAgIGlmIChpc0dMICYmIHRoaXMuc2V0dGluZ3MuYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICBwNS5zZXRBdHRyaWJ1dGVzKHRoaXMuc2V0dGluZ3MuYXR0cmlidXRlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlKHsgcDUsIGNhbnZhczogcDUuY2FudmFzLCBjb250ZXh0OiBwNS5fcmVuZGVyZXIuZHJhd2luZ0NvbnRleHQgfSk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBTdXBwb3J0IGdsb2JhbCBhbmQgaW5zdGFuY2UgUDUuanMgbW9kZXNcbiAgICAgICAgaWYgKHR5cGVvZiBQNUNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgbmV3IFA1Q29uc3RydWN0b3IocDVTa2V0Y2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LmNyZWF0ZUNhbnZhcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwieyBwNSB9IHNldHRpbmcgaXMgcGFzc2VkIGJ1dCBjYW4ndCBmaW5kIHA1LmpzIGluIGdsb2JhbCAod2luZG93KSBzY29wZS4gTWF5YmUgeW91IGRpZCBub3QgY3JlYXRlIGl0IGdsb2JhbGx5P1xcbm5ldyBwNSgpOyAvLyA8LS0gYXR0YWNoZXMgdG8gZ2xvYmFsIHNjb3BlXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwNVNrZXRjaCh3aW5kb3cpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJlbG9hZC50aGVuKCgpID0+IHtcbiAgICAgIC8vIExvYWQgdGhlIHVzZXIncyBza2V0Y2hcbiAgICAgIGxldCBsb2FkZXIgPSBjcmVhdGVTa2V0Y2godGhpcy5wcm9wcyk7XG4gICAgICBpZiAoIWlzUHJvbWlzZShsb2FkZXIpKSB7XG4gICAgICAgIGxvYWRlciA9IFByb21pc2UucmVzb2x2ZShsb2FkZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxvYWRlcjtcbiAgICB9KS50aGVuKHNrZXRjaCA9PiB7XG4gICAgICBpZiAoIXNrZXRjaCkgc2tldGNoID0ge307XG4gICAgICB0aGlzLl9za2V0Y2ggPSBza2V0Y2g7XG5cbiAgICAgIC8vIE9uY2UgdGhlIHNrZXRjaCBpcyBsb2FkZWQgd2UgY2FuIGFkZCB0aGUgZXZlbnRzXG4gICAgICBpZiAoaXNCcm93c2VyKCkpIHtcbiAgICAgICAgdGhpcy5fa2V5Ym9hcmRTaG9ydGN1dHMuYXR0YWNoKCk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl9yZXNpemVIYW5kbGVyKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcG9zdFJlbmRlcigpO1xuXG4gICAgICAvLyBUaGUgaW5pdGlhbCByZXNpemUoKSBpbiB0aGUgY29uc3RydWN0b3Igd2lsbCBub3QgaGF2ZVxuICAgICAgLy8gdHJpZ2dlcmVkIGEgcmVzaXplKCkgZXZlbnQgb24gdGhlIHNrZXRjaCwgc2luY2UgaXQgd2FzIGJlZm9yZVxuICAgICAgLy8gdGhlIHNrZXRjaCB3YXMgbG9hZGVkLiBTbyB3ZSBzZW5kIHRoZSBzaWduYWwgaGVyZSwgYWxsb3dpbmdcbiAgICAgIC8vIHVzZXJzIHRvIHJlYWN0IHRvIHRoZSBpbml0aWFsIHNpemUgYmVmb3JlIGZpcnN0IHJlbmRlci5cbiAgICAgIHRoaXMuX3NpemVDaGFuZ2VkKCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgY29uc29sZS53YXJuKCdDb3VsZCBub3Qgc3RhcnQgc2tldGNoLCB0aGUgYXN5bmMgbG9hZGluZyBmdW5jdGlvbiByZWplY3RlZCB3aXRoIGFuIGVycm9yOlxcbiAgICBFcnJvcjogJyArIGVyci5tZXNzYWdlKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTa2V0Y2hNYW5hZ2VyO1xuIiwiaW1wb3J0IHsgZ2V0Q2xpZW50QVBJIH0gZnJvbSAnLi4vdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChvcHQgPSB7fSkge1xuICBjb25zdCBoYW5kbGVyID0gZXYgPT4ge1xuICAgIGlmICghb3B0LmVuYWJsZWQoKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gICAgaWYgKGV2LmtleUNvZGUgPT09IDgzICYmICFldi5hbHRLZXkgJiYgKGV2Lm1ldGFLZXkgfHwgZXYuY3RybEtleSkpIHtcbiAgICAgIC8vIENtZCArIFNcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBvcHQuc2F2ZShldik7XG4gICAgfSBlbHNlIGlmIChldi5rZXlDb2RlID09PSAzMikge1xuICAgICAgLy8gU3BhY2VcbiAgICAgIC8vIFRPRE86IHdoYXQgdG8gZG8gd2l0aCB0aGlzPyBrZWVwIGl0LCBvciByZW1vdmUgaXQ/XG4gICAgICBvcHQudG9nZ2xlUGxheShldik7XG4gICAgfSBlbHNlIGlmIChjbGllbnQgJiYgIWV2LmFsdEtleSAmJiBldi5rZXlDb2RlID09PSA3NSAmJiAoZXYubWV0YUtleSB8fCBldi5jdHJsS2V5KSkge1xuICAgICAgLy8gQ21kICsgSywgb25seSB3aGVuIGNhbnZhcy1za2V0Y2gtY2xpIGlzIHVzZWRcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBvcHQuY29tbWl0KGV2KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgYXR0YWNoID0gKCkgPT4ge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlcik7XG4gIH07XG5cbiAgY29uc3QgZGV0YWNoID0gKCkgPT4ge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlcik7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhdHRhY2gsXG4gICAgZGV0YWNoXG4gIH07XG59XG4iLCJpbXBvcnQgU2tldGNoTWFuYWdlciBmcm9tICcuL2NvcmUvU2tldGNoTWFuYWdlcic7XG5pbXBvcnQgUGFwZXJTaXplcyBmcm9tICcuL3BhcGVyLXNpemVzJztcbmltcG9ydCB7IGdldENsaWVudEFQSSwgZGVmaW5lZCB9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IENBQ0hFID0gJ2hvdC1pZC1jYWNoZSc7XG5jb25zdCBydW50aW1lQ29sbGlzaW9ucyA9IFtdO1xuXG5mdW5jdGlvbiBpc0hvdFJlbG9hZCAoKSB7XG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICByZXR1cm4gY2xpZW50ICYmIGNsaWVudC5ob3Q7XG59XG5cbmZ1bmN0aW9uIGNhY2hlR2V0IChpZCkge1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgaWYgKCFjbGllbnQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNsaWVudFtDQUNIRV0gPSBjbGllbnRbQ0FDSEVdIHx8IHt9O1xuICByZXR1cm4gY2xpZW50W0NBQ0hFXVtpZF07XG59XG5cbmZ1bmN0aW9uIGNhY2hlUHV0IChpZCwgZGF0YSkge1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgaWYgKCFjbGllbnQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNsaWVudFtDQUNIRV0gPSBjbGllbnRbQ0FDSEVdIHx8IHt9O1xuICBjbGllbnRbQ0FDSEVdW2lkXSA9IGRhdGE7XG59XG5cbmZ1bmN0aW9uIGdldFRpbWVQcm9wIChvbGRNYW5hZ2VyLCBuZXdTZXR0aW5ncykge1xuICAvLyBTdGF0aWMgc2tldGNoZXMgaWdub3JlIHRoZSB0aW1lIHBlcnNpc3RlbmN5XG4gIHJldHVybiBuZXdTZXR0aW5ncy5hbmltYXRlID8geyB0aW1lOiBvbGRNYW5hZ2VyLnByb3BzLnRpbWUgfSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY2FudmFzU2tldGNoIChza2V0Y2gsIHNldHRpbmdzID0ge30pIHtcbiAgaWYgKHNldHRpbmdzLnA1KSB7XG4gICAgaWYgKHNldHRpbmdzLmNhbnZhcyB8fCAoc2V0dGluZ3MuY29udGV4dCAmJiB0eXBlb2Ygc2V0dGluZ3MuY29udGV4dCAhPT0gJ3N0cmluZycpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEluIHsgcDUgfSBtb2RlLCB5b3UgY2FuJ3QgcGFzcyB5b3VyIG93biBjYW52YXMgb3IgY29udGV4dCwgdW5sZXNzIHRoZSBjb250ZXh0IGlzIGEgXCJ3ZWJnbFwiIG9yIFwiMmRcIiBzdHJpbmdgKTtcbiAgICB9XG5cbiAgICAvLyBEbyBub3QgY3JlYXRlIGEgY2FudmFzIG9uIHN0YXJ0dXAsIHNpbmNlIFA1LmpzIGRvZXMgdGhhdCBmb3IgdXNcbiAgICBjb25zdCBjb250ZXh0ID0gdHlwZW9mIHNldHRpbmdzLmNvbnRleHQgPT09ICdzdHJpbmcnID8gc2V0dGluZ3MuY29udGV4dCA6IGZhbHNlO1xuICAgIHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgc2V0dGluZ3MsIHsgY2FudmFzOiBmYWxzZSwgY29udGV4dCB9KTtcbiAgfVxuXG4gIGNvbnN0IGlzSG90ID0gaXNIb3RSZWxvYWQoKTtcbiAgbGV0IGhvdElEO1xuICBpZiAoaXNIb3QpIHtcbiAgICAvLyBVc2UgYSBtYWdpYyBuYW1lIGJ5IGRlZmF1bHQsIGZvcmNlIHVzZXIgdG8gZGVmaW5lIGVhY2ggc2tldGNoIGlmIHRoZXlcbiAgICAvLyByZXF1aXJlIG1vcmUgdGhhbiBvbmUgaW4gYW4gYXBwbGljYXRpb24uIE9wZW4gdG8gb3RoZXIgaWRlYXMgb24gaG93IHRvIHRhY2tsZVxuICAgIC8vIHRoaXMgYXMgd2VsbC4uLlxuICAgIGhvdElEID0gZGVmaW5lZChzZXR0aW5ncy5pZCwgJyRfX0RFRkFVTFRfQ0FOVkFTX1NLRVRDSF9JRF9fJCcpO1xuICB9XG4gIGxldCBpc0luamVjdGluZyA9IGlzSG90ICYmIHR5cGVvZiBob3RJRCA9PT0gJ3N0cmluZyc7XG5cbiAgaWYgKGlzSW5qZWN0aW5nICYmIHJ1bnRpbWVDb2xsaXNpb25zLmluY2x1ZGVzKGhvdElEKSkge1xuICAgIGNvbnNvbGUud2FybihgV2FybmluZzogWW91IGhhdmUgbXVsdGlwbGUgY2FsbHMgdG8gY2FudmFzU2tldGNoKCkgaW4gLS1ob3QgbW9kZS4gWW91IG11c3QgcGFzcyB1bmlxdWUgeyBpZCB9IHN0cmluZ3MgaW4gc2V0dGluZ3MgdG8gZW5hYmxlIGhvdCByZWxvYWQgYWNyb3NzIG11bHRpcGxlIHNrZXRjaGVzLiBgLCBob3RJRCk7XG4gICAgaXNJbmplY3RpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGxldCBwcmVsb2FkID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgaWYgKGlzSW5qZWN0aW5nKSB7XG4gICAgLy8gTWFyayB0aGlzIGFzIGFscmVhZHkgc3BvdHRlZCBpbiB0aGlzIHJ1bnRpbWUgaW5zdGFuY2VcbiAgICBydW50aW1lQ29sbGlzaW9ucy5wdXNoKGhvdElEKTtcblxuICAgIGNvbnN0IHByZXZpb3VzRGF0YSA9IGNhY2hlR2V0KGhvdElEKTtcbiAgICBpZiAocHJldmlvdXNEYXRhKSB7XG4gICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAvLyBHcmFiIG5ldyBwcm9wcyBmcm9tIG9sZCBza2V0Y2ggaW5zdGFuY2VcbiAgICAgICAgY29uc3QgbmV3UHJvcHMgPSBnZXRUaW1lUHJvcChwcmV2aW91c0RhdGEubWFuYWdlciwgc2V0dGluZ3MpO1xuICAgICAgICAvLyBEZXN0cm95IHRoZSBvbGQgaW5zdGFuY2VcbiAgICAgICAgcHJldmlvdXNEYXRhLm1hbmFnZXIuZGVzdHJveSgpO1xuICAgICAgICAvLyBQYXNzIGFsb25nIG5ldyBwcm9wc1xuICAgICAgICByZXR1cm4gbmV3UHJvcHM7XG4gICAgICB9O1xuXG4gICAgICAvLyBNb3ZlIGFsb25nIHRoZSBuZXh0IGRhdGEuLi5cbiAgICAgIHByZWxvYWQgPSBwcmV2aW91c0RhdGEubG9hZC50aGVuKG5leHQpLmNhdGNoKG5leHQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcmVsb2FkLnRoZW4obmV3UHJvcHMgPT4ge1xuICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgU2tldGNoTWFuYWdlcigpO1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKHNrZXRjaCkge1xuICAgICAgLy8gTWVyZ2Ugd2l0aCBpbmNvbWluZyBkYXRhXG4gICAgICBzZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHNldHRpbmdzLCBuZXdQcm9wcyk7XG5cbiAgICAgIC8vIEFwcGx5IHNldHRpbmdzIGFuZCBjcmVhdGUgYSBjYW52YXNcbiAgICAgIG1hbmFnZXIuc2V0dXAoc2V0dGluZ3MpO1xuXG4gICAgICAvLyBNb3VudCB0byBET01cbiAgICAgIG1hbmFnZXIubW91bnQoKTtcblxuICAgICAgLy8gbG9hZCB0aGUgc2tldGNoIGZpcnN0XG4gICAgICByZXN1bHQgPSBtYW5hZ2VyLmxvYWRBbmRSdW4oc2tldGNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gUHJvbWlzZS5yZXNvbHZlKG1hbmFnZXIpO1xuICAgIH1cbiAgICBpZiAoaXNJbmplY3RpbmcpIHtcbiAgICAgIGNhY2hlUHV0KGhvdElELCB7IGxvYWQ6IHJlc3VsdCwgbWFuYWdlciB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG59XG5cbi8vIFRPRE86IEZpZ3VyZSBvdXQgYSBuaWNlIHdheSB0byBleHBvcnQgdGhpbmdzLlxuY2FudmFzU2tldGNoLmNhbnZhc1NrZXRjaCA9IGNhbnZhc1NrZXRjaDtcbmNhbnZhc1NrZXRjaC5QYXBlclNpemVzID0gUGFwZXJTaXplcztcblxuZXhwb3J0IGRlZmF1bHQgY2FudmFzU2tldGNoO1xuIiwidmFyIGNsb25lID0gKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBfaW5zdGFuY2VvZihvYmosIHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUgIT0gbnVsbCAmJiBvYmogaW5zdGFuY2VvZiB0eXBlO1xufVxuXG52YXIgbmF0aXZlTWFwO1xudHJ5IHtcbiAgbmF0aXZlTWFwID0gTWFwO1xufSBjYXRjaChfKSB7XG4gIC8vIG1heWJlIGEgcmVmZXJlbmNlIGVycm9yIGJlY2F1c2Ugbm8gYE1hcGAuIEdpdmUgaXQgYSBkdW1teSB2YWx1ZSB0aGF0IG5vXG4gIC8vIHZhbHVlIHdpbGwgZXZlciBiZSBhbiBpbnN0YW5jZW9mLlxuICBuYXRpdmVNYXAgPSBmdW5jdGlvbigpIHt9O1xufVxuXG52YXIgbmF0aXZlU2V0O1xudHJ5IHtcbiAgbmF0aXZlU2V0ID0gU2V0O1xufSBjYXRjaChfKSB7XG4gIG5hdGl2ZVNldCA9IGZ1bmN0aW9uKCkge307XG59XG5cbnZhciBuYXRpdmVQcm9taXNlO1xudHJ5IHtcbiAgbmF0aXZlUHJvbWlzZSA9IFByb21pc2U7XG59IGNhdGNoKF8pIHtcbiAgbmF0aXZlUHJvbWlzZSA9IGZ1bmN0aW9uKCkge307XG59XG5cbi8qKlxuICogQ2xvbmVzIChjb3BpZXMpIGFuIE9iamVjdCB1c2luZyBkZWVwIGNvcHlpbmcuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyBjaXJjdWxhciByZWZlcmVuY2VzIGJ5IGRlZmF1bHQsIGJ1dCBpZiB5b3UgYXJlIGNlcnRhaW5cbiAqIHRoZXJlIGFyZSBubyBjaXJjdWxhciByZWZlcmVuY2VzIGluIHlvdXIgb2JqZWN0LCB5b3UgY2FuIHNhdmUgc29tZSBDUFUgdGltZVxuICogYnkgY2FsbGluZyBjbG9uZShvYmosIGZhbHNlKS5cbiAqXG4gKiBDYXV0aW9uOiBpZiBgY2lyY3VsYXJgIGlzIGZhbHNlIGFuZCBgcGFyZW50YCBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2VzLFxuICogeW91ciBwcm9ncmFtIG1heSBlbnRlciBhbiBpbmZpbml0ZSBsb29wIGFuZCBjcmFzaC5cbiAqXG4gKiBAcGFyYW0gYHBhcmVudGAgLSB0aGUgb2JqZWN0IHRvIGJlIGNsb25lZFxuICogQHBhcmFtIGBjaXJjdWxhcmAgLSBzZXQgdG8gdHJ1ZSBpZiB0aGUgb2JqZWN0IHRvIGJlIGNsb25lZCBtYXkgY29udGFpblxuICogICAgY2lyY3VsYXIgcmVmZXJlbmNlcy4gKG9wdGlvbmFsIC0gdHJ1ZSBieSBkZWZhdWx0KVxuICogQHBhcmFtIGBkZXB0aGAgLSBzZXQgdG8gYSBudW1iZXIgaWYgdGhlIG9iamVjdCBpcyBvbmx5IHRvIGJlIGNsb25lZCB0b1xuICogICAgYSBwYXJ0aWN1bGFyIGRlcHRoLiAob3B0aW9uYWwgLSBkZWZhdWx0cyB0byBJbmZpbml0eSlcbiAqIEBwYXJhbSBgcHJvdG90eXBlYCAtIHNldHMgdGhlIHByb3RvdHlwZSB0byBiZSB1c2VkIHdoZW4gY2xvbmluZyBhbiBvYmplY3QuXG4gKiAgICAob3B0aW9uYWwgLSBkZWZhdWx0cyB0byBwYXJlbnQgcHJvdG90eXBlKS5cbiAqIEBwYXJhbSBgaW5jbHVkZU5vbkVudW1lcmFibGVgIC0gc2V0IHRvIHRydWUgaWYgdGhlIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXNcbiAqICAgIHNob3VsZCBiZSBjbG9uZWQgYXMgd2VsbC4gTm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBvbiB0aGUgcHJvdG90eXBlXG4gKiAgICBjaGFpbiB3aWxsIGJlIGlnbm9yZWQuIChvcHRpb25hbCAtIGZhbHNlIGJ5IGRlZmF1bHQpXG4qL1xuZnVuY3Rpb24gY2xvbmUocGFyZW50LCBjaXJjdWxhciwgZGVwdGgsIHByb3RvdHlwZSwgaW5jbHVkZU5vbkVudW1lcmFibGUpIHtcbiAgaWYgKHR5cGVvZiBjaXJjdWxhciA9PT0gJ29iamVjdCcpIHtcbiAgICBkZXB0aCA9IGNpcmN1bGFyLmRlcHRoO1xuICAgIHByb3RvdHlwZSA9IGNpcmN1bGFyLnByb3RvdHlwZTtcbiAgICBpbmNsdWRlTm9uRW51bWVyYWJsZSA9IGNpcmN1bGFyLmluY2x1ZGVOb25FbnVtZXJhYmxlO1xuICAgIGNpcmN1bGFyID0gY2lyY3VsYXIuY2lyY3VsYXI7XG4gIH1cbiAgLy8gbWFpbnRhaW4gdHdvIGFycmF5cyBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcywgd2hlcmUgY29ycmVzcG9uZGluZyBwYXJlbnRzXG4gIC8vIGFuZCBjaGlsZHJlbiBoYXZlIHRoZSBzYW1lIGluZGV4XG4gIHZhciBhbGxQYXJlbnRzID0gW107XG4gIHZhciBhbGxDaGlsZHJlbiA9IFtdO1xuXG4gIHZhciB1c2VCdWZmZXIgPSB0eXBlb2YgQnVmZmVyICE9ICd1bmRlZmluZWQnO1xuXG4gIGlmICh0eXBlb2YgY2lyY3VsYXIgPT0gJ3VuZGVmaW5lZCcpXG4gICAgY2lyY3VsYXIgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZGVwdGggPT0gJ3VuZGVmaW5lZCcpXG4gICAgZGVwdGggPSBJbmZpbml0eTtcblxuICAvLyByZWN1cnNlIHRoaXMgZnVuY3Rpb24gc28gd2UgZG9uJ3QgcmVzZXQgYWxsUGFyZW50cyBhbmQgYWxsQ2hpbGRyZW5cbiAgZnVuY3Rpb24gX2Nsb25lKHBhcmVudCwgZGVwdGgpIHtcbiAgICAvLyBjbG9uaW5nIG51bGwgYWx3YXlzIHJldHVybnMgbnVsbFxuICAgIGlmIChwYXJlbnQgPT09IG51bGwpXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGlmIChkZXB0aCA9PT0gMClcbiAgICAgIHJldHVybiBwYXJlbnQ7XG5cbiAgICB2YXIgY2hpbGQ7XG4gICAgdmFyIHByb3RvO1xuICAgIGlmICh0eXBlb2YgcGFyZW50ICE9ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gcGFyZW50O1xuICAgIH1cblxuICAgIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIG5hdGl2ZU1hcCkpIHtcbiAgICAgIGNoaWxkID0gbmV3IG5hdGl2ZU1hcCgpO1xuICAgIH0gZWxzZSBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBuYXRpdmVTZXQpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBuYXRpdmVTZXQoKTtcbiAgICB9IGVsc2UgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlUHJvbWlzZSkpIHtcbiAgICAgIGNoaWxkID0gbmV3IG5hdGl2ZVByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBwYXJlbnQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgIHJlc29sdmUoX2Nsb25lKHZhbHVlLCBkZXB0aCAtIDEpKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KF9jbG9uZShlcnIsIGRlcHRoIC0gMSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoY2xvbmUuX19pc0FycmF5KHBhcmVudCkpIHtcbiAgICAgIGNoaWxkID0gW107XG4gICAgfSBlbHNlIGlmIChjbG9uZS5fX2lzUmVnRXhwKHBhcmVudCkpIHtcbiAgICAgIGNoaWxkID0gbmV3IFJlZ0V4cChwYXJlbnQuc291cmNlLCBfX2dldFJlZ0V4cEZsYWdzKHBhcmVudCkpO1xuICAgICAgaWYgKHBhcmVudC5sYXN0SW5kZXgpIGNoaWxkLmxhc3RJbmRleCA9IHBhcmVudC5sYXN0SW5kZXg7XG4gICAgfSBlbHNlIGlmIChjbG9uZS5fX2lzRGF0ZShwYXJlbnQpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBEYXRlKHBhcmVudC5nZXRUaW1lKCkpO1xuICAgIH0gZWxzZSBpZiAodXNlQnVmZmVyICYmIEJ1ZmZlci5pc0J1ZmZlcihwYXJlbnQpKSB7XG4gICAgICBpZiAoQnVmZmVyLmFsbG9jVW5zYWZlKSB7XG4gICAgICAgIC8vIE5vZGUuanMgPj0gNC41LjBcbiAgICAgICAgY2hpbGQgPSBCdWZmZXIuYWxsb2NVbnNhZmUocGFyZW50Lmxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPbGRlciBOb2RlLmpzIHZlcnNpb25zXG4gICAgICAgIGNoaWxkID0gbmV3IEJ1ZmZlcihwYXJlbnQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIHBhcmVudC5jb3B5KGNoaWxkKTtcbiAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9IGVsc2UgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgRXJyb3IpKSB7XG4gICAgICBjaGlsZCA9IE9iamVjdC5jcmVhdGUocGFyZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBwcm90b3R5cGUgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocGFyZW50KTtcbiAgICAgICAgY2hpbGQgPSBPYmplY3QuY3JlYXRlKHByb3RvKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjaGlsZCA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlKTtcbiAgICAgICAgcHJvdG8gPSBwcm90b3R5cGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNpcmN1bGFyKSB7XG4gICAgICB2YXIgaW5kZXggPSBhbGxQYXJlbnRzLmluZGV4T2YocGFyZW50KTtcblxuICAgICAgaWYgKGluZGV4ICE9IC0xKSB7XG4gICAgICAgIHJldHVybiBhbGxDaGlsZHJlbltpbmRleF07XG4gICAgICB9XG4gICAgICBhbGxQYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICAgIGFsbENoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIH1cblxuICAgIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIG5hdGl2ZU1hcCkpIHtcbiAgICAgIHBhcmVudC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgdmFyIGtleUNoaWxkID0gX2Nsb25lKGtleSwgZGVwdGggLSAxKTtcbiAgICAgICAgdmFyIHZhbHVlQ2hpbGQgPSBfY2xvbmUodmFsdWUsIGRlcHRoIC0gMSk7XG4gICAgICAgIGNoaWxkLnNldChrZXlDaGlsZCwgdmFsdWVDaGlsZCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlU2V0KSkge1xuICAgICAgcGFyZW50LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdmFyIGVudHJ5Q2hpbGQgPSBfY2xvbmUodmFsdWUsIGRlcHRoIC0gMSk7XG4gICAgICAgIGNoaWxkLmFkZChlbnRyeUNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgaW4gcGFyZW50KSB7XG4gICAgICB2YXIgYXR0cnM7XG4gICAgICBpZiAocHJvdG8pIHtcbiAgICAgICAgYXR0cnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGF0dHJzICYmIGF0dHJzLnNldCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY2hpbGRbaV0gPSBfY2xvbmUocGFyZW50W2ldLCBkZXB0aCAtIDEpO1xuICAgIH1cblxuICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocGFyZW50KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBEb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGNsb25pbmcgYSBzeW1ib2wgYmVjYXVzZSBpdCBpcyBhIHByaW1pdGl2ZSxcbiAgICAgICAgLy8gbGlrZSBhIG51bWJlciBvciBzdHJpbmcuXG4gICAgICAgIHZhciBzeW1ib2wgPSBzeW1ib2xzW2ldO1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocGFyZW50LCBzeW1ib2wpO1xuICAgICAgICBpZiAoZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci5lbnVtZXJhYmxlICYmICFpbmNsdWRlTm9uRW51bWVyYWJsZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkW3N5bWJvbF0gPSBfY2xvbmUocGFyZW50W3N5bWJvbF0sIGRlcHRoIC0gMSk7XG4gICAgICAgIGlmICghZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNoaWxkLCBzeW1ib2wsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5jbHVkZU5vbkVudW1lcmFibGUpIHtcbiAgICAgIHZhciBhbGxQcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocGFyZW50KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsUHJvcGVydHlOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcHJvcGVydHlOYW1lID0gYWxsUHJvcGVydHlOYW1lc1tpXTtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHBhcmVudCwgcHJvcGVydHlOYW1lKTtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRbcHJvcGVydHlOYW1lXSA9IF9jbG9uZShwYXJlbnRbcHJvcGVydHlOYW1lXSwgZGVwdGggLSAxKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNoaWxkLCBwcm9wZXJ0eU5hbWUsIHtcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cblxuICByZXR1cm4gX2Nsb25lKHBhcmVudCwgZGVwdGgpO1xufVxuXG4vKipcbiAqIFNpbXBsZSBmbGF0IGNsb25lIHVzaW5nIHByb3RvdHlwZSwgYWNjZXB0cyBvbmx5IG9iamVjdHMsIHVzZWZ1bGwgZm9yIHByb3BlcnR5XG4gKiBvdmVycmlkZSBvbiBGTEFUIGNvbmZpZ3VyYXRpb24gb2JqZWN0IChubyBuZXN0ZWQgcHJvcHMpLlxuICpcbiAqIFVTRSBXSVRIIENBVVRJT04hIFRoaXMgbWF5IG5vdCBiZWhhdmUgYXMgeW91IHdpc2ggaWYgeW91IGRvIG5vdCBrbm93IGhvdyB0aGlzXG4gKiB3b3Jrcy5cbiAqL1xuY2xvbmUuY2xvbmVQcm90b3R5cGUgPSBmdW5jdGlvbiBjbG9uZVByb3RvdHlwZShwYXJlbnQpIHtcbiAgaWYgKHBhcmVudCA9PT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcblxuICB2YXIgYyA9IGZ1bmN0aW9uICgpIHt9O1xuICBjLnByb3RvdHlwZSA9IHBhcmVudDtcbiAgcmV0dXJuIG5ldyBjKCk7XG59O1xuXG4vLyBwcml2YXRlIHV0aWxpdHkgZnVuY3Rpb25zXG5cbmZ1bmN0aW9uIF9fb2JqVG9TdHIobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufVxuY2xvbmUuX19vYmpUb1N0ciA9IF9fb2JqVG9TdHI7XG5cbmZ1bmN0aW9uIF9faXNEYXRlKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJiBfX29ialRvU3RyKG8pID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5jbG9uZS5fX2lzRGF0ZSA9IF9faXNEYXRlO1xuXG5mdW5jdGlvbiBfX2lzQXJyYXkobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF9fb2JqVG9TdHIobykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5jbG9uZS5fX2lzQXJyYXkgPSBfX2lzQXJyYXk7XG5cbmZ1bmN0aW9uIF9faXNSZWdFeHAobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF9fb2JqVG9TdHIobykgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuY2xvbmUuX19pc1JlZ0V4cCA9IF9faXNSZWdFeHA7XG5cbmZ1bmN0aW9uIF9fZ2V0UmVnRXhwRmxhZ3MocmUpIHtcbiAgdmFyIGZsYWdzID0gJyc7XG4gIGlmIChyZS5nbG9iYWwpIGZsYWdzICs9ICdnJztcbiAgaWYgKHJlLmlnbm9yZUNhc2UpIGZsYWdzICs9ICdpJztcbiAgaWYgKHJlLm11bHRpbGluZSkgZmxhZ3MgKz0gJ20nO1xuICByZXR1cm4gZmxhZ3M7XG59XG5jbG9uZS5fX2dldFJlZ0V4cEZsYWdzID0gX19nZXRSZWdFeHBGbGFncztcblxucmV0dXJuIGNsb25lO1xufSkoKTtcblxuaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gY2xvbmU7XG59XG4iLCIvKiBNSVQgbGljZW5zZSAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcmdiMmhzbDogcmdiMmhzbCxcbiAgcmdiMmhzdjogcmdiMmhzdixcbiAgcmdiMmh3YjogcmdiMmh3YixcbiAgcmdiMmNteWs6IHJnYjJjbXlrLFxuICByZ2Iya2V5d29yZDogcmdiMmtleXdvcmQsXG4gIHJnYjJ4eXo6IHJnYjJ4eXosXG4gIHJnYjJsYWI6IHJnYjJsYWIsXG4gIHJnYjJsY2g6IHJnYjJsY2gsXG5cbiAgaHNsMnJnYjogaHNsMnJnYixcbiAgaHNsMmhzdjogaHNsMmhzdixcbiAgaHNsMmh3YjogaHNsMmh3YixcbiAgaHNsMmNteWs6IGhzbDJjbXlrLFxuICBoc2wya2V5d29yZDogaHNsMmtleXdvcmQsXG5cbiAgaHN2MnJnYjogaHN2MnJnYixcbiAgaHN2MmhzbDogaHN2MmhzbCxcbiAgaHN2Mmh3YjogaHN2Mmh3YixcbiAgaHN2MmNteWs6IGhzdjJjbXlrLFxuICBoc3Yya2V5d29yZDogaHN2MmtleXdvcmQsXG5cbiAgaHdiMnJnYjogaHdiMnJnYixcbiAgaHdiMmhzbDogaHdiMmhzbCxcbiAgaHdiMmhzdjogaHdiMmhzdixcbiAgaHdiMmNteWs6IGh3YjJjbXlrLFxuICBod2Iya2V5d29yZDogaHdiMmtleXdvcmQsXG5cbiAgY215azJyZ2I6IGNteWsycmdiLFxuICBjbXlrMmhzbDogY215azJoc2wsXG4gIGNteWsyaHN2OiBjbXlrMmhzdixcbiAgY215azJod2I6IGNteWsyaHdiLFxuICBjbXlrMmtleXdvcmQ6IGNteWsya2V5d29yZCxcblxuICBrZXl3b3JkMnJnYjoga2V5d29yZDJyZ2IsXG4gIGtleXdvcmQyaHNsOiBrZXl3b3JkMmhzbCxcbiAga2V5d29yZDJoc3Y6IGtleXdvcmQyaHN2LFxuICBrZXl3b3JkMmh3Yjoga2V5d29yZDJod2IsXG4gIGtleXdvcmQyY215azoga2V5d29yZDJjbXlrLFxuICBrZXl3b3JkMmxhYjoga2V5d29yZDJsYWIsXG4gIGtleXdvcmQyeHl6OiBrZXl3b3JkMnh5eixcblxuICB4eXoycmdiOiB4eXoycmdiLFxuICB4eXoybGFiOiB4eXoybGFiLFxuICB4eXoybGNoOiB4eXoybGNoLFxuXG4gIGxhYjJ4eXo6IGxhYjJ4eXosXG4gIGxhYjJyZ2I6IGxhYjJyZ2IsXG4gIGxhYjJsY2g6IGxhYjJsY2gsXG5cbiAgbGNoMmxhYjogbGNoMmxhYixcbiAgbGNoMnh5ejogbGNoMnh5eixcbiAgbGNoMnJnYjogbGNoMnJnYlxufVxuXG5cbmZ1bmN0aW9uIHJnYjJoc2wocmdiKSB7XG4gIHZhciByID0gcmdiWzBdLzI1NSxcbiAgICAgIGcgPSByZ2JbMV0vMjU1LFxuICAgICAgYiA9IHJnYlsyXS8yNTUsXG4gICAgICBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSxcbiAgICAgIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLFxuICAgICAgZGVsdGEgPSBtYXggLSBtaW4sXG4gICAgICBoLCBzLCBsO1xuXG4gIGlmIChtYXggPT0gbWluKVxuICAgIGggPSAwO1xuICBlbHNlIGlmIChyID09IG1heClcbiAgICBoID0gKGcgLSBiKSAvIGRlbHRhO1xuICBlbHNlIGlmIChnID09IG1heClcbiAgICBoID0gMiArIChiIC0gcikgLyBkZWx0YTtcbiAgZWxzZSBpZiAoYiA9PSBtYXgpXG4gICAgaCA9IDQgKyAociAtIGcpLyBkZWx0YTtcblxuICBoID0gTWF0aC5taW4oaCAqIDYwLCAzNjApO1xuXG4gIGlmIChoIDwgMClcbiAgICBoICs9IDM2MDtcblxuICBsID0gKG1pbiArIG1heCkgLyAyO1xuXG4gIGlmIChtYXggPT0gbWluKVxuICAgIHMgPSAwO1xuICBlbHNlIGlmIChsIDw9IDAuNSlcbiAgICBzID0gZGVsdGEgLyAobWF4ICsgbWluKTtcbiAgZWxzZVxuICAgIHMgPSBkZWx0YSAvICgyIC0gbWF4IC0gbWluKTtcblxuICByZXR1cm4gW2gsIHMgKiAxMDAsIGwgKiAxMDBdO1xufVxuXG5mdW5jdGlvbiByZ2IyaHN2KHJnYikge1xuICB2YXIgciA9IHJnYlswXSxcbiAgICAgIGcgPSByZ2JbMV0sXG4gICAgICBiID0gcmdiWzJdLFxuICAgICAgbWluID0gTWF0aC5taW4ociwgZywgYiksXG4gICAgICBtYXggPSBNYXRoLm1heChyLCBnLCBiKSxcbiAgICAgIGRlbHRhID0gbWF4IC0gbWluLFxuICAgICAgaCwgcywgdjtcblxuICBpZiAobWF4ID09IDApXG4gICAgcyA9IDA7XG4gIGVsc2VcbiAgICBzID0gKGRlbHRhL21heCAqIDEwMDApLzEwO1xuXG4gIGlmIChtYXggPT0gbWluKVxuICAgIGggPSAwO1xuICBlbHNlIGlmIChyID09IG1heClcbiAgICBoID0gKGcgLSBiKSAvIGRlbHRhO1xuICBlbHNlIGlmIChnID09IG1heClcbiAgICBoID0gMiArIChiIC0gcikgLyBkZWx0YTtcbiAgZWxzZSBpZiAoYiA9PSBtYXgpXG4gICAgaCA9IDQgKyAociAtIGcpIC8gZGVsdGE7XG5cbiAgaCA9IE1hdGgubWluKGggKiA2MCwgMzYwKTtcblxuICBpZiAoaCA8IDApXG4gICAgaCArPSAzNjA7XG5cbiAgdiA9ICgobWF4IC8gMjU1KSAqIDEwMDApIC8gMTA7XG5cbiAgcmV0dXJuIFtoLCBzLCB2XTtcbn1cblxuZnVuY3Rpb24gcmdiMmh3YihyZ2IpIHtcbiAgdmFyIHIgPSByZ2JbMF0sXG4gICAgICBnID0gcmdiWzFdLFxuICAgICAgYiA9IHJnYlsyXSxcbiAgICAgIGggPSByZ2IyaHNsKHJnYilbMF0sXG4gICAgICB3ID0gMS8yNTUgKiBNYXRoLm1pbihyLCBNYXRoLm1pbihnLCBiKSksXG4gICAgICBiID0gMSAtIDEvMjU1ICogTWF0aC5tYXgociwgTWF0aC5tYXgoZywgYikpO1xuXG4gIHJldHVybiBbaCwgdyAqIDEwMCwgYiAqIDEwMF07XG59XG5cbmZ1bmN0aW9uIHJnYjJjbXlrKHJnYikge1xuICB2YXIgciA9IHJnYlswXSAvIDI1NSxcbiAgICAgIGcgPSByZ2JbMV0gLyAyNTUsXG4gICAgICBiID0gcmdiWzJdIC8gMjU1LFxuICAgICAgYywgbSwgeSwgaztcblxuICBrID0gTWF0aC5taW4oMSAtIHIsIDEgLSBnLCAxIC0gYik7XG4gIGMgPSAoMSAtIHIgLSBrKSAvICgxIC0gaykgfHwgMDtcbiAgbSA9ICgxIC0gZyAtIGspIC8gKDEgLSBrKSB8fCAwO1xuICB5ID0gKDEgLSBiIC0gaykgLyAoMSAtIGspIHx8IDA7XG4gIHJldHVybiBbYyAqIDEwMCwgbSAqIDEwMCwgeSAqIDEwMCwgayAqIDEwMF07XG59XG5cbmZ1bmN0aW9uIHJnYjJrZXl3b3JkKHJnYikge1xuICByZXR1cm4gcmV2ZXJzZUtleXdvcmRzW0pTT04uc3RyaW5naWZ5KHJnYildO1xufVxuXG5mdW5jdGlvbiByZ2IyeHl6KHJnYikge1xuICB2YXIgciA9IHJnYlswXSAvIDI1NSxcbiAgICAgIGcgPSByZ2JbMV0gLyAyNTUsXG4gICAgICBiID0gcmdiWzJdIC8gMjU1O1xuXG4gIC8vIGFzc3VtZSBzUkdCXG4gIHIgPSByID4gMC4wNDA0NSA/IE1hdGgucG93KCgociArIDAuMDU1KSAvIDEuMDU1KSwgMi40KSA6IChyIC8gMTIuOTIpO1xuICBnID0gZyA+IDAuMDQwNDUgPyBNYXRoLnBvdygoKGcgKyAwLjA1NSkgLyAxLjA1NSksIDIuNCkgOiAoZyAvIDEyLjkyKTtcbiAgYiA9IGIgPiAwLjA0MDQ1ID8gTWF0aC5wb3coKChiICsgMC4wNTUpIC8gMS4wNTUpLCAyLjQpIDogKGIgLyAxMi45Mik7XG5cbiAgdmFyIHggPSAociAqIDAuNDEyNCkgKyAoZyAqIDAuMzU3NikgKyAoYiAqIDAuMTgwNSk7XG4gIHZhciB5ID0gKHIgKiAwLjIxMjYpICsgKGcgKiAwLjcxNTIpICsgKGIgKiAwLjA3MjIpO1xuICB2YXIgeiA9IChyICogMC4wMTkzKSArIChnICogMC4xMTkyKSArIChiICogMC45NTA1KTtcblxuICByZXR1cm4gW3ggKiAxMDAsIHkgKjEwMCwgeiAqIDEwMF07XG59XG5cbmZ1bmN0aW9uIHJnYjJsYWIocmdiKSB7XG4gIHZhciB4eXogPSByZ2IyeHl6KHJnYiksXG4gICAgICAgIHggPSB4eXpbMF0sXG4gICAgICAgIHkgPSB4eXpbMV0sXG4gICAgICAgIHogPSB4eXpbMl0sXG4gICAgICAgIGwsIGEsIGI7XG5cbiAgeCAvPSA5NS4wNDc7XG4gIHkgLz0gMTAwO1xuICB6IC89IDEwOC44ODM7XG5cbiAgeCA9IHggPiAwLjAwODg1NiA/IE1hdGgucG93KHgsIDEvMykgOiAoNy43ODcgKiB4KSArICgxNiAvIDExNik7XG4gIHkgPSB5ID4gMC4wMDg4NTYgPyBNYXRoLnBvdyh5LCAxLzMpIDogKDcuNzg3ICogeSkgKyAoMTYgLyAxMTYpO1xuICB6ID0geiA+IDAuMDA4ODU2ID8gTWF0aC5wb3coeiwgMS8zKSA6ICg3Ljc4NyAqIHopICsgKDE2IC8gMTE2KTtcblxuICBsID0gKDExNiAqIHkpIC0gMTY7XG4gIGEgPSA1MDAgKiAoeCAtIHkpO1xuICBiID0gMjAwICogKHkgLSB6KTtcblxuICByZXR1cm4gW2wsIGEsIGJdO1xufVxuXG5mdW5jdGlvbiByZ2IybGNoKGFyZ3MpIHtcbiAgcmV0dXJuIGxhYjJsY2gocmdiMmxhYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGhzbDJyZ2IoaHNsKSB7XG4gIHZhciBoID0gaHNsWzBdIC8gMzYwLFxuICAgICAgcyA9IGhzbFsxXSAvIDEwMCxcbiAgICAgIGwgPSBoc2xbMl0gLyAxMDAsXG4gICAgICB0MSwgdDIsIHQzLCByZ2IsIHZhbDtcblxuICBpZiAocyA9PSAwKSB7XG4gICAgdmFsID0gbCAqIDI1NTtcbiAgICByZXR1cm4gW3ZhbCwgdmFsLCB2YWxdO1xuICB9XG5cbiAgaWYgKGwgPCAwLjUpXG4gICAgdDIgPSBsICogKDEgKyBzKTtcbiAgZWxzZVxuICAgIHQyID0gbCArIHMgLSBsICogcztcbiAgdDEgPSAyICogbCAtIHQyO1xuXG4gIHJnYiA9IFswLCAwLCAwXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICB0MyA9IGggKyAxIC8gMyAqIC0gKGkgLSAxKTtcbiAgICB0MyA8IDAgJiYgdDMrKztcbiAgICB0MyA+IDEgJiYgdDMtLTtcblxuICAgIGlmICg2ICogdDMgPCAxKVxuICAgICAgdmFsID0gdDEgKyAodDIgLSB0MSkgKiA2ICogdDM7XG4gICAgZWxzZSBpZiAoMiAqIHQzIDwgMSlcbiAgICAgIHZhbCA9IHQyO1xuICAgIGVsc2UgaWYgKDMgKiB0MyA8IDIpXG4gICAgICB2YWwgPSB0MSArICh0MiAtIHQxKSAqICgyIC8gMyAtIHQzKSAqIDY7XG4gICAgZWxzZVxuICAgICAgdmFsID0gdDE7XG5cbiAgICByZ2JbaV0gPSB2YWwgKiAyNTU7XG4gIH1cblxuICByZXR1cm4gcmdiO1xufVxuXG5mdW5jdGlvbiBoc2wyaHN2KGhzbCkge1xuICB2YXIgaCA9IGhzbFswXSxcbiAgICAgIHMgPSBoc2xbMV0gLyAxMDAsXG4gICAgICBsID0gaHNsWzJdIC8gMTAwLFxuICAgICAgc3YsIHY7XG5cbiAgaWYobCA9PT0gMCkge1xuICAgICAgLy8gbm8gbmVlZCB0byBkbyBjYWxjIG9uIGJsYWNrXG4gICAgICAvLyBhbHNvIGF2b2lkcyBkaXZpZGUgYnkgMCBlcnJvclxuICAgICAgcmV0dXJuIFswLCAwLCAwXTtcbiAgfVxuXG4gIGwgKj0gMjtcbiAgcyAqPSAobCA8PSAxKSA/IGwgOiAyIC0gbDtcbiAgdiA9IChsICsgcykgLyAyO1xuICBzdiA9ICgyICogcykgLyAobCArIHMpO1xuICByZXR1cm4gW2gsIHN2ICogMTAwLCB2ICogMTAwXTtcbn1cblxuZnVuY3Rpb24gaHNsMmh3YihhcmdzKSB7XG4gIHJldHVybiByZ2IyaHdiKGhzbDJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBoc2wyY215ayhhcmdzKSB7XG4gIHJldHVybiByZ2IyY215ayhoc2wycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gaHNsMmtleXdvcmQoYXJncykge1xuICByZXR1cm4gcmdiMmtleXdvcmQoaHNsMnJnYihhcmdzKSk7XG59XG5cblxuZnVuY3Rpb24gaHN2MnJnYihoc3YpIHtcbiAgdmFyIGggPSBoc3ZbMF0gLyA2MCxcbiAgICAgIHMgPSBoc3ZbMV0gLyAxMDAsXG4gICAgICB2ID0gaHN2WzJdIC8gMTAwLFxuICAgICAgaGkgPSBNYXRoLmZsb29yKGgpICUgNjtcblxuICB2YXIgZiA9IGggLSBNYXRoLmZsb29yKGgpLFxuICAgICAgcCA9IDI1NSAqIHYgKiAoMSAtIHMpLFxuICAgICAgcSA9IDI1NSAqIHYgKiAoMSAtIChzICogZikpLFxuICAgICAgdCA9IDI1NSAqIHYgKiAoMSAtIChzICogKDEgLSBmKSkpLFxuICAgICAgdiA9IDI1NSAqIHY7XG5cbiAgc3dpdGNoKGhpKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIFt2LCB0LCBwXTtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gW3EsIHYsIHBdO1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiBbcCwgdiwgdF07XG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIFtwLCBxLCB2XTtcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gW3QsIHAsIHZdO1xuICAgIGNhc2UgNTpcbiAgICAgIHJldHVybiBbdiwgcCwgcV07XG4gIH1cbn1cblxuZnVuY3Rpb24gaHN2MmhzbChoc3YpIHtcbiAgdmFyIGggPSBoc3ZbMF0sXG4gICAgICBzID0gaHN2WzFdIC8gMTAwLFxuICAgICAgdiA9IGhzdlsyXSAvIDEwMCxcbiAgICAgIHNsLCBsO1xuXG4gIGwgPSAoMiAtIHMpICogdjtcbiAgc2wgPSBzICogdjtcbiAgc2wgLz0gKGwgPD0gMSkgPyBsIDogMiAtIGw7XG4gIHNsID0gc2wgfHwgMDtcbiAgbCAvPSAyO1xuICByZXR1cm4gW2gsIHNsICogMTAwLCBsICogMTAwXTtcbn1cblxuZnVuY3Rpb24gaHN2Mmh3YihhcmdzKSB7XG4gIHJldHVybiByZ2IyaHdiKGhzdjJyZ2IoYXJncykpXG59XG5cbmZ1bmN0aW9uIGhzdjJjbXlrKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJjbXlrKGhzdjJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBoc3Yya2V5d29yZChhcmdzKSB7XG4gIHJldHVybiByZ2Iya2V5d29yZChoc3YycmdiKGFyZ3MpKTtcbn1cblxuLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzLWNvbG9yLyNod2ItdG8tcmdiXG5mdW5jdGlvbiBod2IycmdiKGh3Yikge1xuICB2YXIgaCA9IGh3YlswXSAvIDM2MCxcbiAgICAgIHdoID0gaHdiWzFdIC8gMTAwLFxuICAgICAgYmwgPSBod2JbMl0gLyAxMDAsXG4gICAgICByYXRpbyA9IHdoICsgYmwsXG4gICAgICBpLCB2LCBmLCBuO1xuXG4gIC8vIHdoICsgYmwgY2FudCBiZSA+IDFcbiAgaWYgKHJhdGlvID4gMSkge1xuICAgIHdoIC89IHJhdGlvO1xuICAgIGJsIC89IHJhdGlvO1xuICB9XG5cbiAgaSA9IE1hdGguZmxvb3IoNiAqIGgpO1xuICB2ID0gMSAtIGJsO1xuICBmID0gNiAqIGggLSBpO1xuICBpZiAoKGkgJiAweDAxKSAhPSAwKSB7XG4gICAgZiA9IDEgLSBmO1xuICB9XG4gIG4gPSB3aCArIGYgKiAodiAtIHdoKTsgIC8vIGxpbmVhciBpbnRlcnBvbGF0aW9uXG5cbiAgc3dpdGNoIChpKSB7XG4gICAgZGVmYXVsdDpcbiAgICBjYXNlIDY6XG4gICAgY2FzZSAwOiByID0gdjsgZyA9IG47IGIgPSB3aDsgYnJlYWs7XG4gICAgY2FzZSAxOiByID0gbjsgZyA9IHY7IGIgPSB3aDsgYnJlYWs7XG4gICAgY2FzZSAyOiByID0gd2g7IGcgPSB2OyBiID0gbjsgYnJlYWs7XG4gICAgY2FzZSAzOiByID0gd2g7IGcgPSBuOyBiID0gdjsgYnJlYWs7XG4gICAgY2FzZSA0OiByID0gbjsgZyA9IHdoOyBiID0gdjsgYnJlYWs7XG4gICAgY2FzZSA1OiByID0gdjsgZyA9IHdoOyBiID0gbjsgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTVdO1xufVxuXG5mdW5jdGlvbiBod2IyaHNsKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJoc2woaHdiMnJnYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGh3YjJoc3YoYXJncykge1xuICByZXR1cm4gcmdiMmhzdihod2IycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gaHdiMmNteWsoYXJncykge1xuICByZXR1cm4gcmdiMmNteWsoaHdiMnJnYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGh3YjJrZXl3b3JkKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJrZXl3b3JkKGh3YjJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBjbXlrMnJnYihjbXlrKSB7XG4gIHZhciBjID0gY215a1swXSAvIDEwMCxcbiAgICAgIG0gPSBjbXlrWzFdIC8gMTAwLFxuICAgICAgeSA9IGNteWtbMl0gLyAxMDAsXG4gICAgICBrID0gY215a1szXSAvIDEwMCxcbiAgICAgIHIsIGcsIGI7XG5cbiAgciA9IDEgLSBNYXRoLm1pbigxLCBjICogKDEgLSBrKSArIGspO1xuICBnID0gMSAtIE1hdGgubWluKDEsIG0gKiAoMSAtIGspICsgayk7XG4gIGIgPSAxIC0gTWF0aC5taW4oMSwgeSAqICgxIC0gaykgKyBrKTtcbiAgcmV0dXJuIFtyICogMjU1LCBnICogMjU1LCBiICogMjU1XTtcbn1cblxuZnVuY3Rpb24gY215azJoc2woYXJncykge1xuICByZXR1cm4gcmdiMmhzbChjbXlrMnJnYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGNteWsyaHN2KGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJoc3YoY215azJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBjbXlrMmh3YihhcmdzKSB7XG4gIHJldHVybiByZ2IyaHdiKGNteWsycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gY215azJrZXl3b3JkKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJrZXl3b3JkKGNteWsycmdiKGFyZ3MpKTtcbn1cblxuXG5mdW5jdGlvbiB4eXoycmdiKHh5eikge1xuICB2YXIgeCA9IHh5elswXSAvIDEwMCxcbiAgICAgIHkgPSB4eXpbMV0gLyAxMDAsXG4gICAgICB6ID0geHl6WzJdIC8gMTAwLFxuICAgICAgciwgZywgYjtcblxuICByID0gKHggKiAzLjI0MDYpICsgKHkgKiAtMS41MzcyKSArICh6ICogLTAuNDk4Nik7XG4gIGcgPSAoeCAqIC0wLjk2ODkpICsgKHkgKiAxLjg3NTgpICsgKHogKiAwLjA0MTUpO1xuICBiID0gKHggKiAwLjA1NTcpICsgKHkgKiAtMC4yMDQwKSArICh6ICogMS4wNTcwKTtcblxuICAvLyBhc3N1bWUgc1JHQlxuICByID0gciA+IDAuMDAzMTMwOCA/ICgoMS4wNTUgKiBNYXRoLnBvdyhyLCAxLjAgLyAyLjQpKSAtIDAuMDU1KVxuICAgIDogciA9IChyICogMTIuOTIpO1xuXG4gIGcgPSBnID4gMC4wMDMxMzA4ID8gKCgxLjA1NSAqIE1hdGgucG93KGcsIDEuMCAvIDIuNCkpIC0gMC4wNTUpXG4gICAgOiBnID0gKGcgKiAxMi45Mik7XG5cbiAgYiA9IGIgPiAwLjAwMzEzMDggPyAoKDEuMDU1ICogTWF0aC5wb3coYiwgMS4wIC8gMi40KSkgLSAwLjA1NSlcbiAgICA6IGIgPSAoYiAqIDEyLjkyKTtcblxuICByID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgciksIDEpO1xuICBnID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZyksIDEpO1xuICBiID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgYiksIDEpO1xuXG4gIHJldHVybiBbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NV07XG59XG5cbmZ1bmN0aW9uIHh5ejJsYWIoeHl6KSB7XG4gIHZhciB4ID0geHl6WzBdLFxuICAgICAgeSA9IHh5elsxXSxcbiAgICAgIHogPSB4eXpbMl0sXG4gICAgICBsLCBhLCBiO1xuXG4gIHggLz0gOTUuMDQ3O1xuICB5IC89IDEwMDtcbiAgeiAvPSAxMDguODgzO1xuXG4gIHggPSB4ID4gMC4wMDg4NTYgPyBNYXRoLnBvdyh4LCAxLzMpIDogKDcuNzg3ICogeCkgKyAoMTYgLyAxMTYpO1xuICB5ID0geSA+IDAuMDA4ODU2ID8gTWF0aC5wb3coeSwgMS8zKSA6ICg3Ljc4NyAqIHkpICsgKDE2IC8gMTE2KTtcbiAgeiA9IHogPiAwLjAwODg1NiA/IE1hdGgucG93KHosIDEvMykgOiAoNy43ODcgKiB6KSArICgxNiAvIDExNik7XG5cbiAgbCA9ICgxMTYgKiB5KSAtIDE2O1xuICBhID0gNTAwICogKHggLSB5KTtcbiAgYiA9IDIwMCAqICh5IC0geik7XG5cbiAgcmV0dXJuIFtsLCBhLCBiXTtcbn1cblxuZnVuY3Rpb24geHl6MmxjaChhcmdzKSB7XG4gIHJldHVybiBsYWIybGNoKHh5ejJsYWIoYXJncykpO1xufVxuXG5mdW5jdGlvbiBsYWIyeHl6KGxhYikge1xuICB2YXIgbCA9IGxhYlswXSxcbiAgICAgIGEgPSBsYWJbMV0sXG4gICAgICBiID0gbGFiWzJdLFxuICAgICAgeCwgeSwgeiwgeTI7XG5cbiAgaWYgKGwgPD0gOCkge1xuICAgIHkgPSAobCAqIDEwMCkgLyA5MDMuMztcbiAgICB5MiA9ICg3Ljc4NyAqICh5IC8gMTAwKSkgKyAoMTYgLyAxMTYpO1xuICB9IGVsc2Uge1xuICAgIHkgPSAxMDAgKiBNYXRoLnBvdygobCArIDE2KSAvIDExNiwgMyk7XG4gICAgeTIgPSBNYXRoLnBvdyh5IC8gMTAwLCAxLzMpO1xuICB9XG5cbiAgeCA9IHggLyA5NS4wNDcgPD0gMC4wMDg4NTYgPyB4ID0gKDk1LjA0NyAqICgoYSAvIDUwMCkgKyB5MiAtICgxNiAvIDExNikpKSAvIDcuNzg3IDogOTUuMDQ3ICogTWF0aC5wb3coKGEgLyA1MDApICsgeTIsIDMpO1xuXG4gIHogPSB6IC8gMTA4Ljg4MyA8PSAwLjAwODg1OSA/IHogPSAoMTA4Ljg4MyAqICh5MiAtIChiIC8gMjAwKSAtICgxNiAvIDExNikpKSAvIDcuNzg3IDogMTA4Ljg4MyAqIE1hdGgucG93KHkyIC0gKGIgLyAyMDApLCAzKTtcblxuICByZXR1cm4gW3gsIHksIHpdO1xufVxuXG5mdW5jdGlvbiBsYWIybGNoKGxhYikge1xuICB2YXIgbCA9IGxhYlswXSxcbiAgICAgIGEgPSBsYWJbMV0sXG4gICAgICBiID0gbGFiWzJdLFxuICAgICAgaHIsIGgsIGM7XG5cbiAgaHIgPSBNYXRoLmF0YW4yKGIsIGEpO1xuICBoID0gaHIgKiAzNjAgLyAyIC8gTWF0aC5QSTtcbiAgaWYgKGggPCAwKSB7XG4gICAgaCArPSAzNjA7XG4gIH1cbiAgYyA9IE1hdGguc3FydChhICogYSArIGIgKiBiKTtcbiAgcmV0dXJuIFtsLCBjLCBoXTtcbn1cblxuZnVuY3Rpb24gbGFiMnJnYihhcmdzKSB7XG4gIHJldHVybiB4eXoycmdiKGxhYjJ4eXooYXJncykpO1xufVxuXG5mdW5jdGlvbiBsY2gybGFiKGxjaCkge1xuICB2YXIgbCA9IGxjaFswXSxcbiAgICAgIGMgPSBsY2hbMV0sXG4gICAgICBoID0gbGNoWzJdLFxuICAgICAgYSwgYiwgaHI7XG5cbiAgaHIgPSBoIC8gMzYwICogMiAqIE1hdGguUEk7XG4gIGEgPSBjICogTWF0aC5jb3MoaHIpO1xuICBiID0gYyAqIE1hdGguc2luKGhyKTtcbiAgcmV0dXJuIFtsLCBhLCBiXTtcbn1cblxuZnVuY3Rpb24gbGNoMnh5eihhcmdzKSB7XG4gIHJldHVybiBsYWIyeHl6KGxjaDJsYWIoYXJncykpO1xufVxuXG5mdW5jdGlvbiBsY2gycmdiKGFyZ3MpIHtcbiAgcmV0dXJuIGxhYjJyZ2IobGNoMmxhYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGtleXdvcmQycmdiKGtleXdvcmQpIHtcbiAgcmV0dXJuIGNzc0tleXdvcmRzW2tleXdvcmRdO1xufVxuXG5mdW5jdGlvbiBrZXl3b3JkMmhzbChhcmdzKSB7XG4gIHJldHVybiByZ2IyaHNsKGtleXdvcmQycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24ga2V5d29yZDJoc3YoYXJncykge1xuICByZXR1cm4gcmdiMmhzdihrZXl3b3JkMnJnYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGtleXdvcmQyaHdiKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJod2Ioa2V5d29yZDJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBrZXl3b3JkMmNteWsoYXJncykge1xuICByZXR1cm4gcmdiMmNteWsoa2V5d29yZDJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBrZXl3b3JkMmxhYihhcmdzKSB7XG4gIHJldHVybiByZ2IybGFiKGtleXdvcmQycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24ga2V5d29yZDJ4eXooYXJncykge1xuICByZXR1cm4gcmdiMnh5eihrZXl3b3JkMnJnYihhcmdzKSk7XG59XG5cbnZhciBjc3NLZXl3b3JkcyA9IHtcbiAgYWxpY2VibHVlOiAgWzI0MCwyNDgsMjU1XSxcbiAgYW50aXF1ZXdoaXRlOiBbMjUwLDIzNSwyMTVdLFxuICBhcXVhOiBbMCwyNTUsMjU1XSxcbiAgYXF1YW1hcmluZTogWzEyNywyNTUsMjEyXSxcbiAgYXp1cmU6ICBbMjQwLDI1NSwyNTVdLFxuICBiZWlnZTogIFsyNDUsMjQ1LDIyMF0sXG4gIGJpc3F1ZTogWzI1NSwyMjgsMTk2XSxcbiAgYmxhY2s6ICBbMCwwLDBdLFxuICBibGFuY2hlZGFsbW9uZDogWzI1NSwyMzUsMjA1XSxcbiAgYmx1ZTogWzAsMCwyNTVdLFxuICBibHVldmlvbGV0OiBbMTM4LDQzLDIyNl0sXG4gIGJyb3duOiAgWzE2NSw0Miw0Ml0sXG4gIGJ1cmx5d29vZDogIFsyMjIsMTg0LDEzNV0sXG4gIGNhZGV0Ymx1ZTogIFs5NSwxNTgsMTYwXSxcbiAgY2hhcnRyZXVzZTogWzEyNywyNTUsMF0sXG4gIGNob2NvbGF0ZTogIFsyMTAsMTA1LDMwXSxcbiAgY29yYWw6ICBbMjU1LDEyNyw4MF0sXG4gIGNvcm5mbG93ZXJibHVlOiBbMTAwLDE0OSwyMzddLFxuICBjb3Juc2lsazogWzI1NSwyNDgsMjIwXSxcbiAgY3JpbXNvbjogIFsyMjAsMjAsNjBdLFxuICBjeWFuOiBbMCwyNTUsMjU1XSxcbiAgZGFya2JsdWU6IFswLDAsMTM5XSxcbiAgZGFya2N5YW46IFswLDEzOSwxMzldLFxuICBkYXJrZ29sZGVucm9kOiAgWzE4NCwxMzQsMTFdLFxuICBkYXJrZ3JheTogWzE2OSwxNjksMTY5XSxcbiAgZGFya2dyZWVuOiAgWzAsMTAwLDBdLFxuICBkYXJrZ3JleTogWzE2OSwxNjksMTY5XSxcbiAgZGFya2toYWtpOiAgWzE4OSwxODMsMTA3XSxcbiAgZGFya21hZ2VudGE6ICBbMTM5LDAsMTM5XSxcbiAgZGFya29saXZlZ3JlZW46IFs4NSwxMDcsNDddLFxuICBkYXJrb3JhbmdlOiBbMjU1LDE0MCwwXSxcbiAgZGFya29yY2hpZDogWzE1Myw1MCwyMDRdLFxuICBkYXJrcmVkOiAgWzEzOSwwLDBdLFxuICBkYXJrc2FsbW9uOiBbMjMzLDE1MCwxMjJdLFxuICBkYXJrc2VhZ3JlZW46IFsxNDMsMTg4LDE0M10sXG4gIGRhcmtzbGF0ZWJsdWU6ICBbNzIsNjEsMTM5XSxcbiAgZGFya3NsYXRlZ3JheTogIFs0Nyw3OSw3OV0sXG4gIGRhcmtzbGF0ZWdyZXk6ICBbNDcsNzksNzldLFxuICBkYXJrdHVycXVvaXNlOiAgWzAsMjA2LDIwOV0sXG4gIGRhcmt2aW9sZXQ6IFsxNDgsMCwyMTFdLFxuICBkZWVwcGluazogWzI1NSwyMCwxNDddLFxuICBkZWVwc2t5Ymx1ZTogIFswLDE5MSwyNTVdLFxuICBkaW1ncmF5OiAgWzEwNSwxMDUsMTA1XSxcbiAgZGltZ3JleTogIFsxMDUsMTA1LDEwNV0sXG4gIGRvZGdlcmJsdWU6IFszMCwxNDQsMjU1XSxcbiAgZmlyZWJyaWNrOiAgWzE3OCwzNCwzNF0sXG4gIGZsb3JhbHdoaXRlOiAgWzI1NSwyNTAsMjQwXSxcbiAgZm9yZXN0Z3JlZW46ICBbMzQsMTM5LDM0XSxcbiAgZnVjaHNpYTogIFsyNTUsMCwyNTVdLFxuICBnYWluc2Jvcm86ICBbMjIwLDIyMCwyMjBdLFxuICBnaG9zdHdoaXRlOiBbMjQ4LDI0OCwyNTVdLFxuICBnb2xkOiBbMjU1LDIxNSwwXSxcbiAgZ29sZGVucm9kOiAgWzIxOCwxNjUsMzJdLFxuICBncmF5OiBbMTI4LDEyOCwxMjhdLFxuICBncmVlbjogIFswLDEyOCwwXSxcbiAgZ3JlZW55ZWxsb3c6ICBbMTczLDI1NSw0N10sXG4gIGdyZXk6IFsxMjgsMTI4LDEyOF0sXG4gIGhvbmV5ZGV3OiBbMjQwLDI1NSwyNDBdLFxuICBob3RwaW5rOiAgWzI1NSwxMDUsMTgwXSxcbiAgaW5kaWFucmVkOiAgWzIwNSw5Miw5Ml0sXG4gIGluZGlnbzogWzc1LDAsMTMwXSxcbiAgaXZvcnk6ICBbMjU1LDI1NSwyNDBdLFxuICBraGFraTogIFsyNDAsMjMwLDE0MF0sXG4gIGxhdmVuZGVyOiBbMjMwLDIzMCwyNTBdLFxuICBsYXZlbmRlcmJsdXNoOiAgWzI1NSwyNDAsMjQ1XSxcbiAgbGF3bmdyZWVuOiAgWzEyNCwyNTIsMF0sXG4gIGxlbW9uY2hpZmZvbjogWzI1NSwyNTAsMjA1XSxcbiAgbGlnaHRibHVlOiAgWzE3MywyMTYsMjMwXSxcbiAgbGlnaHRjb3JhbDogWzI0MCwxMjgsMTI4XSxcbiAgbGlnaHRjeWFuOiAgWzIyNCwyNTUsMjU1XSxcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IFsyNTAsMjUwLDIxMF0sXG4gIGxpZ2h0Z3JheTogIFsyMTEsMjExLDIxMV0sXG4gIGxpZ2h0Z3JlZW46IFsxNDQsMjM4LDE0NF0sXG4gIGxpZ2h0Z3JleTogIFsyMTEsMjExLDIxMV0sXG4gIGxpZ2h0cGluazogIFsyNTUsMTgyLDE5M10sXG4gIGxpZ2h0c2FsbW9uOiAgWzI1NSwxNjAsMTIyXSxcbiAgbGlnaHRzZWFncmVlbjogIFszMiwxNzgsMTcwXSxcbiAgbGlnaHRza3libHVlOiBbMTM1LDIwNiwyNTBdLFxuICBsaWdodHNsYXRlZ3JheTogWzExOSwxMzYsMTUzXSxcbiAgbGlnaHRzbGF0ZWdyZXk6IFsxMTksMTM2LDE1M10sXG4gIGxpZ2h0c3RlZWxibHVlOiBbMTc2LDE5NiwyMjJdLFxuICBsaWdodHllbGxvdzogIFsyNTUsMjU1LDIyNF0sXG4gIGxpbWU6IFswLDI1NSwwXSxcbiAgbGltZWdyZWVuOiAgWzUwLDIwNSw1MF0sXG4gIGxpbmVuOiAgWzI1MCwyNDAsMjMwXSxcbiAgbWFnZW50YTogIFsyNTUsMCwyNTVdLFxuICBtYXJvb246IFsxMjgsMCwwXSxcbiAgbWVkaXVtYXF1YW1hcmluZTogWzEwMiwyMDUsMTcwXSxcbiAgbWVkaXVtYmx1ZTogWzAsMCwyMDVdLFxuICBtZWRpdW1vcmNoaWQ6IFsxODYsODUsMjExXSxcbiAgbWVkaXVtcHVycGxlOiBbMTQ3LDExMiwyMTldLFxuICBtZWRpdW1zZWFncmVlbjogWzYwLDE3OSwxMTNdLFxuICBtZWRpdW1zbGF0ZWJsdWU6ICBbMTIzLDEwNCwyMzhdLFxuICBtZWRpdW1zcHJpbmdncmVlbjogIFswLDI1MCwxNTRdLFxuICBtZWRpdW10dXJxdW9pc2U6ICBbNzIsMjA5LDIwNF0sXG4gIG1lZGl1bXZpb2xldHJlZDogIFsxOTksMjEsMTMzXSxcbiAgbWlkbmlnaHRibHVlOiBbMjUsMjUsMTEyXSxcbiAgbWludGNyZWFtOiAgWzI0NSwyNTUsMjUwXSxcbiAgbWlzdHlyb3NlOiAgWzI1NSwyMjgsMjI1XSxcbiAgbW9jY2FzaW46IFsyNTUsMjI4LDE4MV0sXG4gIG5hdmFqb3doaXRlOiAgWzI1NSwyMjIsMTczXSxcbiAgbmF2eTogWzAsMCwxMjhdLFxuICBvbGRsYWNlOiAgWzI1MywyNDUsMjMwXSxcbiAgb2xpdmU6ICBbMTI4LDEyOCwwXSxcbiAgb2xpdmVkcmFiOiAgWzEwNywxNDIsMzVdLFxuICBvcmFuZ2U6IFsyNTUsMTY1LDBdLFxuICBvcmFuZ2VyZWQ6ICBbMjU1LDY5LDBdLFxuICBvcmNoaWQ6IFsyMTgsMTEyLDIxNF0sXG4gIHBhbGVnb2xkZW5yb2Q6ICBbMjM4LDIzMiwxNzBdLFxuICBwYWxlZ3JlZW46ICBbMTUyLDI1MSwxNTJdLFxuICBwYWxldHVycXVvaXNlOiAgWzE3NSwyMzgsMjM4XSxcbiAgcGFsZXZpb2xldHJlZDogIFsyMTksMTEyLDE0N10sXG4gIHBhcGF5YXdoaXA6IFsyNTUsMjM5LDIxM10sXG4gIHBlYWNocHVmZjogIFsyNTUsMjE4LDE4NV0sXG4gIHBlcnU6IFsyMDUsMTMzLDYzXSxcbiAgcGluazogWzI1NSwxOTIsMjAzXSxcbiAgcGx1bTogWzIyMSwxNjAsMjIxXSxcbiAgcG93ZGVyYmx1ZTogWzE3NiwyMjQsMjMwXSxcbiAgcHVycGxlOiBbMTI4LDAsMTI4XSxcbiAgcmViZWNjYXB1cnBsZTogWzEwMiwgNTEsIDE1M10sXG4gIHJlZDogIFsyNTUsMCwwXSxcbiAgcm9zeWJyb3duOiAgWzE4OCwxNDMsMTQzXSxcbiAgcm95YWxibHVlOiAgWzY1LDEwNSwyMjVdLFxuICBzYWRkbGVicm93bjogIFsxMzksNjksMTldLFxuICBzYWxtb246IFsyNTAsMTI4LDExNF0sXG4gIHNhbmR5YnJvd246IFsyNDQsMTY0LDk2XSxcbiAgc2VhZ3JlZW46IFs0NiwxMzksODddLFxuICBzZWFzaGVsbDogWzI1NSwyNDUsMjM4XSxcbiAgc2llbm5hOiBbMTYwLDgyLDQ1XSxcbiAgc2lsdmVyOiBbMTkyLDE5MiwxOTJdLFxuICBza3libHVlOiAgWzEzNSwyMDYsMjM1XSxcbiAgc2xhdGVibHVlOiAgWzEwNiw5MCwyMDVdLFxuICBzbGF0ZWdyYXk6ICBbMTEyLDEyOCwxNDRdLFxuICBzbGF0ZWdyZXk6ICBbMTEyLDEyOCwxNDRdLFxuICBzbm93OiBbMjU1LDI1MCwyNTBdLFxuICBzcHJpbmdncmVlbjogIFswLDI1NSwxMjddLFxuICBzdGVlbGJsdWU6ICBbNzAsMTMwLDE4MF0sXG4gIHRhbjogIFsyMTAsMTgwLDE0MF0sXG4gIHRlYWw6IFswLDEyOCwxMjhdLFxuICB0aGlzdGxlOiAgWzIxNiwxOTEsMjE2XSxcbiAgdG9tYXRvOiBbMjU1LDk5LDcxXSxcbiAgdHVycXVvaXNlOiAgWzY0LDIyNCwyMDhdLFxuICB2aW9sZXQ6IFsyMzgsMTMwLDIzOF0sXG4gIHdoZWF0OiAgWzI0NSwyMjIsMTc5XSxcbiAgd2hpdGU6ICBbMjU1LDI1NSwyNTVdLFxuICB3aGl0ZXNtb2tlOiBbMjQ1LDI0NSwyNDVdLFxuICB5ZWxsb3c6IFsyNTUsMjU1LDBdLFxuICB5ZWxsb3dncmVlbjogIFsxNTQsMjA1LDUwXVxufTtcblxudmFyIHJldmVyc2VLZXl3b3JkcyA9IHt9O1xuZm9yICh2YXIga2V5IGluIGNzc0tleXdvcmRzKSB7XG4gIHJldmVyc2VLZXl3b3Jkc1tKU09OLnN0cmluZ2lmeShjc3NLZXl3b3Jkc1trZXldKV0gPSBrZXk7XG59XG4iLCJ2YXIgY29udmVyc2lvbnMgPSByZXF1aXJlKFwiLi9jb252ZXJzaW9uc1wiKTtcblxudmFyIGNvbnZlcnQgPSBmdW5jdGlvbigpIHtcbiAgIHJldHVybiBuZXcgQ29udmVydGVyKCk7XG59XG5cbmZvciAodmFyIGZ1bmMgaW4gY29udmVyc2lvbnMpIHtcbiAgLy8gZXhwb3J0IFJhdyB2ZXJzaW9uc1xuICBjb252ZXJ0W2Z1bmMgKyBcIlJhd1wiXSA9ICAoZnVuY3Rpb24oZnVuYykge1xuICAgIC8vIGFjY2VwdCBhcnJheSBvciBwbGFpbiBhcmdzXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgICAgaWYgKHR5cGVvZiBhcmcgPT0gXCJudW1iZXJcIilcbiAgICAgICAgYXJnID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgIHJldHVybiBjb252ZXJzaW9uc1tmdW5jXShhcmcpO1xuICAgIH1cbiAgfSkoZnVuYyk7XG5cbiAgdmFyIHBhaXIgPSAvKFxcdyspMihcXHcrKS8uZXhlYyhmdW5jKSxcbiAgICAgIGZyb20gPSBwYWlyWzFdLFxuICAgICAgdG8gPSBwYWlyWzJdO1xuXG4gIC8vIGV4cG9ydCByZ2IyaHNsIGFuZCBbXCJyZ2JcIl1bXCJoc2xcIl1cbiAgY29udmVydFtmcm9tXSA9IGNvbnZlcnRbZnJvbV0gfHwge307XG5cbiAgY29udmVydFtmcm9tXVt0b10gPSBjb252ZXJ0W2Z1bmNdID0gKGZ1bmN0aW9uKGZ1bmMpIHsgXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgICAgaWYgKHR5cGVvZiBhcmcgPT0gXCJudW1iZXJcIilcbiAgICAgICAgYXJnID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgIFxuICAgICAgdmFyIHZhbCA9IGNvbnZlcnNpb25zW2Z1bmNdKGFyZyk7XG4gICAgICBpZiAodHlwZW9mIHZhbCA9PSBcInN0cmluZ1wiIHx8IHZhbCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdmFsOyAvLyBrZXl3b3JkXG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKVxuICAgICAgICB2YWxbaV0gPSBNYXRoLnJvdW5kKHZhbFtpXSk7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgfSkoZnVuYyk7XG59XG5cblxuLyogQ29udmVydGVyIGRvZXMgbGF6eSBjb252ZXJzaW9uIGFuZCBjYWNoaW5nICovXG52YXIgQ29udmVydGVyID0gZnVuY3Rpb24oKSB7XG4gICB0aGlzLmNvbnZzID0ge307XG59O1xuXG4vKiBFaXRoZXIgZ2V0IHRoZSB2YWx1ZXMgZm9yIGEgc3BhY2Ugb3JcbiAgc2V0IHRoZSB2YWx1ZXMgZm9yIGEgc3BhY2UsIGRlcGVuZGluZyBvbiBhcmdzICovXG5Db252ZXJ0ZXIucHJvdG90eXBlLnJvdXRlU3BhY2UgPSBmdW5jdGlvbihzcGFjZSwgYXJncykge1xuICAgdmFyIHZhbHVlcyA9IGFyZ3NbMF07XG4gICBpZiAodmFsdWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGNvbG9yLnJnYigpXG4gICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZXMoc3BhY2UpO1xuICAgfVxuICAgLy8gY29sb3IucmdiKDEwLCAxMCwgMTApXG4gICBpZiAodHlwZW9mIHZhbHVlcyA9PSBcIm51bWJlclwiKSB7XG4gICAgICB2YWx1ZXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKTsgICAgICAgIFxuICAgfVxuXG4gICByZXR1cm4gdGhpcy5zZXRWYWx1ZXMoc3BhY2UsIHZhbHVlcyk7XG59O1xuICBcbi8qIFNldCB0aGUgdmFsdWVzIGZvciBhIHNwYWNlLCBpbnZhbGlkYXRpbmcgY2FjaGUgKi9cbkNvbnZlcnRlci5wcm90b3R5cGUuc2V0VmFsdWVzID0gZnVuY3Rpb24oc3BhY2UsIHZhbHVlcykge1xuICAgdGhpcy5zcGFjZSA9IHNwYWNlO1xuICAgdGhpcy5jb252cyA9IHt9O1xuICAgdGhpcy5jb252c1tzcGFjZV0gPSB2YWx1ZXM7XG4gICByZXR1cm4gdGhpcztcbn07XG5cbi8qIEdldCB0aGUgdmFsdWVzIGZvciBhIHNwYWNlLiBJZiB0aGVyZSdzIGFscmVhZHlcbiAgYSBjb252ZXJzaW9uIGZvciB0aGUgc3BhY2UsIGZldGNoIGl0LCBvdGhlcndpc2VcbiAgY29tcHV0ZSBpdCAqL1xuQ29udmVydGVyLnByb3RvdHlwZS5nZXRWYWx1ZXMgPSBmdW5jdGlvbihzcGFjZSkge1xuICAgdmFyIHZhbHMgPSB0aGlzLmNvbnZzW3NwYWNlXTtcbiAgIGlmICghdmFscykge1xuICAgICAgdmFyIGZzcGFjZSA9IHRoaXMuc3BhY2UsXG4gICAgICAgICAgZnJvbSA9IHRoaXMuY29udnNbZnNwYWNlXTtcbiAgICAgIHZhbHMgPSBjb252ZXJ0W2ZzcGFjZV1bc3BhY2VdKGZyb20pO1xuXG4gICAgICB0aGlzLmNvbnZzW3NwYWNlXSA9IHZhbHM7XG4gICB9XG4gIHJldHVybiB2YWxzO1xufTtcblxuW1wicmdiXCIsIFwiaHNsXCIsIFwiaHN2XCIsIFwiY215a1wiLCBcImtleXdvcmRcIl0uZm9yRWFjaChmdW5jdGlvbihzcGFjZSkge1xuICAgQ29udmVydGVyLnByb3RvdHlwZVtzcGFjZV0gPSBmdW5jdGlvbih2YWxzKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVNwYWNlKHNwYWNlLCBhcmd1bWVudHMpO1xuICAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gY29udmVydDsiLCJ2YXIgZGVmaW5lZCA9IHJlcXVpcmUoJ2RlZmluZWQnKTtcbnZhciB1bml0cyA9IFsgJ21tJywgJ2NtJywgJ20nLCAncGMnLCAncHQnLCAnaW4nLCAnZnQnLCAncHgnIF07XG5cbnZhciBjb252ZXJzaW9ucyA9IHtcbiAgLy8gbWV0cmljXG4gIG06IHtcbiAgICBzeXN0ZW06ICdtZXRyaWMnLFxuICAgIGZhY3RvcjogMVxuICB9LFxuICBjbToge1xuICAgIHN5c3RlbTogJ21ldHJpYycsXG4gICAgZmFjdG9yOiAxIC8gMTAwXG4gIH0sXG4gIG1tOiB7XG4gICAgc3lzdGVtOiAnbWV0cmljJyxcbiAgICBmYWN0b3I6IDEgLyAxMDAwXG4gIH0sXG4gIC8vIGltcGVyaWFsXG4gIHB0OiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMSAvIDcyXG4gIH0sXG4gIHBjOiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMSAvIDZcbiAgfSxcbiAgaW46IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxXG4gIH0sXG4gIGZ0OiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMTJcbiAgfVxufTtcblxuY29uc3QgYW5jaG9ycyA9IHtcbiAgbWV0cmljOiB7XG4gICAgdW5pdDogJ20nLFxuICAgIHJhdGlvOiAxIC8gMC4wMjU0XG4gIH0sXG4gIGltcGVyaWFsOiB7XG4gICAgdW5pdDogJ2luJyxcbiAgICByYXRpbzogMC4wMjU0XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJvdW5kICh2YWx1ZSwgZGVjaW1hbHMpIHtcbiAgcmV0dXJuIE51bWJlcihNYXRoLnJvdW5kKHZhbHVlICsgJ2UnICsgZGVjaW1hbHMpICsgJ2UtJyArIGRlY2ltYWxzKTtcbn1cblxuZnVuY3Rpb24gY29udmVydERpc3RhbmNlICh2YWx1ZSwgZnJvbVVuaXQsIHRvVW5pdCwgb3B0cykge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCAhaXNGaW5pdGUodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIG11c3QgYmUgYSBmaW5pdGUgbnVtYmVyJyk7XG4gIGlmICghZnJvbVVuaXQgfHwgIXRvVW5pdCkgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHNwZWNpZnkgZnJvbSBhbmQgdG8gdW5pdHMnKTtcblxuICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgdmFyIHBpeGVsc1BlckluY2ggPSBkZWZpbmVkKG9wdHMucGl4ZWxzUGVySW5jaCwgOTYpO1xuICB2YXIgcHJlY2lzaW9uID0gb3B0cy5wcmVjaXNpb247XG4gIHZhciByb3VuZFBpeGVsID0gb3B0cy5yb3VuZFBpeGVsICE9PSBmYWxzZTtcblxuICBmcm9tVW5pdCA9IGZyb21Vbml0LnRvTG93ZXJDYXNlKCk7XG4gIHRvVW5pdCA9IHRvVW5pdC50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmICh1bml0cy5pbmRleE9mKGZyb21Vbml0KSA9PT0gLTEpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmcm9tIHVuaXQgXCInICsgZnJvbVVuaXQgKyAnXCIsIG11c3QgYmUgb25lIG9mOiAnICsgdW5pdHMuam9pbignLCAnKSk7XG4gIGlmICh1bml0cy5pbmRleE9mKHRvVW5pdCkgPT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZnJvbSB1bml0IFwiJyArIHRvVW5pdCArICdcIiwgbXVzdCBiZSBvbmUgb2Y6ICcgKyB1bml0cy5qb2luKCcsICcpKTtcblxuICBpZiAoZnJvbVVuaXQgPT09IHRvVW5pdCkge1xuICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gY29udmVydCBmcm9tIEEgdG8gQiBzaW5jZSB0aGV5IGFyZSB0aGUgc2FtZSBhbHJlYWR5XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgdmFyIHRvRmFjdG9yID0gMTtcbiAgdmFyIGZyb21GYWN0b3IgPSAxO1xuICB2YXIgaXNUb1BpeGVsID0gZmFsc2U7XG5cbiAgaWYgKGZyb21Vbml0ID09PSAncHgnKSB7XG4gICAgZnJvbUZhY3RvciA9IDEgLyBwaXhlbHNQZXJJbmNoO1xuICAgIGZyb21Vbml0ID0gJ2luJztcbiAgfVxuICBpZiAodG9Vbml0ID09PSAncHgnKSB7XG4gICAgaXNUb1BpeGVsID0gdHJ1ZTtcbiAgICB0b0ZhY3RvciA9IHBpeGVsc1BlckluY2g7XG4gICAgdG9Vbml0ID0gJ2luJztcbiAgfVxuXG4gIHZhciBmcm9tVW5pdERhdGEgPSBjb252ZXJzaW9uc1tmcm9tVW5pdF07XG4gIHZhciB0b1VuaXREYXRhID0gY29udmVyc2lvbnNbdG9Vbml0XTtcblxuICAvLyBzb3VyY2UgdG8gYW5jaG9yIGluc2lkZSBzb3VyY2UncyBzeXN0ZW1cbiAgdmFyIGFuY2hvciA9IHZhbHVlICogZnJvbVVuaXREYXRhLmZhY3RvciAqIGZyb21GYWN0b3I7XG5cbiAgLy8gaWYgc3lzdGVtcyBkaWZmZXIsIGNvbnZlcnQgb25lIHRvIGFub3RoZXJcbiAgaWYgKGZyb21Vbml0RGF0YS5zeXN0ZW0gIT09IHRvVW5pdERhdGEuc3lzdGVtKSB7XG4gICAgLy8gcmVndWxhciAnbScgdG8gJ2luJyBhbmQgc28gZm9ydGhcbiAgICBhbmNob3IgKj0gYW5jaG9yc1tmcm9tVW5pdERhdGEuc3lzdGVtXS5yYXRpbztcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBhbmNob3IgLyB0b1VuaXREYXRhLmZhY3RvciAqIHRvRmFjdG9yO1xuICBpZiAoaXNUb1BpeGVsICYmIHJvdW5kUGl4ZWwpIHtcbiAgICByZXN1bHQgPSBNYXRoLnJvdW5kKHJlc3VsdCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHByZWNpc2lvbiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUocHJlY2lzaW9uKSkge1xuICAgIHJlc3VsdCA9IHJvdW5kKHJlc3VsdCwgcHJlY2lzaW9uKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnREaXN0YW5jZTtcbm1vZHVsZS5leHBvcnRzLnVuaXRzID0gdW5pdHM7XG4iLCIvLyBodHRwczovL2QzanMub3JnL2QzLXBhdGgvIHYxLjAuOSBDb3B5cmlnaHQgMjAxOSBNaWtlIEJvc3RvY2tcbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG50eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcbnR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuKGdsb2JhbCA9IGdsb2JhbCB8fCBzZWxmLCBmYWN0b3J5KGdsb2JhbC5kMyA9IGdsb2JhbC5kMyB8fCB7fSkpO1xufSh0aGlzLCBmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7XG5cbnZhciBwaSA9IE1hdGguUEksXG4gICAgdGF1ID0gMiAqIHBpLFxuICAgIGVwc2lsb24gPSAxZS02LFxuICAgIHRhdUVwc2lsb24gPSB0YXUgLSBlcHNpbG9uO1xuXG5mdW5jdGlvbiBQYXRoKCkge1xuICB0aGlzLl94MCA9IHRoaXMuX3kwID0gLy8gc3RhcnQgb2YgY3VycmVudCBzdWJwYXRoXG4gIHRoaXMuX3gxID0gdGhpcy5feTEgPSBudWxsOyAvLyBlbmQgb2YgY3VycmVudCBzdWJwYXRoXG4gIHRoaXMuXyA9IFwiXCI7XG59XG5cbmZ1bmN0aW9uIHBhdGgoKSB7XG4gIHJldHVybiBuZXcgUGF0aDtcbn1cblxuUGF0aC5wcm90b3R5cGUgPSBwYXRoLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFBhdGgsXG4gIG1vdmVUbzogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIk1cIiArICh0aGlzLl94MCA9IHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTAgPSB0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgY2xvc2VQYXRoOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5feDEgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3gxID0gdGhpcy5feDAsIHRoaXMuX3kxID0gdGhpcy5feTA7XG4gICAgICB0aGlzLl8gKz0gXCJaXCI7XG4gICAgfVxuICB9LFxuICBsaW5lVG86IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJMXCIgKyAodGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgcXVhZHJhdGljQ3VydmVUbzogZnVuY3Rpb24oeDEsIHkxLCB4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiUVwiICsgKCt4MSkgKyBcIixcIiArICgreTEpICsgXCIsXCIgKyAodGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgYmV6aWVyQ3VydmVUbzogZnVuY3Rpb24oeDEsIHkxLCB4MiwgeTIsIHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJDXCIgKyAoK3gxKSArIFwiLFwiICsgKCt5MSkgKyBcIixcIiArICgreDIpICsgXCIsXCIgKyAoK3kyKSArIFwiLFwiICsgKHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTEgPSAreSk7XG4gIH0sXG4gIGFyY1RvOiBmdW5jdGlvbih4MSwgeTEsIHgyLCB5Miwgcikge1xuICAgIHgxID0gK3gxLCB5MSA9ICt5MSwgeDIgPSAreDIsIHkyID0gK3kyLCByID0gK3I7XG4gICAgdmFyIHgwID0gdGhpcy5feDEsXG4gICAgICAgIHkwID0gdGhpcy5feTEsXG4gICAgICAgIHgyMSA9IHgyIC0geDEsXG4gICAgICAgIHkyMSA9IHkyIC0geTEsXG4gICAgICAgIHgwMSA9IHgwIC0geDEsXG4gICAgICAgIHkwMSA9IHkwIC0geTEsXG4gICAgICAgIGwwMV8yID0geDAxICogeDAxICsgeTAxICogeTAxO1xuXG4gICAgLy8gSXMgdGhlIHJhZGl1cyBuZWdhdGl2ZT8gRXJyb3IuXG4gICAgaWYgKHIgPCAwKSB0aHJvdyBuZXcgRXJyb3IoXCJuZWdhdGl2ZSByYWRpdXM6IFwiICsgcik7XG5cbiAgICAvLyBJcyB0aGlzIHBhdGggZW1wdHk/IE1vdmUgdG8gKHgxLHkxKS5cbiAgICBpZiAodGhpcy5feDEgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuXyArPSBcIk1cIiArICh0aGlzLl94MSA9IHgxKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTEpO1xuICAgIH1cblxuICAgIC8vIE9yLCBpcyAoeDEseTEpIGNvaW5jaWRlbnQgd2l0aCAoeDAseTApPyBEbyBub3RoaW5nLlxuICAgIGVsc2UgaWYgKCEobDAxXzIgPiBlcHNpbG9uKSk7XG5cbiAgICAvLyBPciwgYXJlICh4MCx5MCksICh4MSx5MSkgYW5kICh4Mix5MikgY29sbGluZWFyP1xuICAgIC8vIEVxdWl2YWxlbnRseSwgaXMgKHgxLHkxKSBjb2luY2lkZW50IHdpdGggKHgyLHkyKT9cbiAgICAvLyBPciwgaXMgdGhlIHJhZGl1cyB6ZXJvPyBMaW5lIHRvICh4MSx5MSkuXG4gICAgZWxzZSBpZiAoIShNYXRoLmFicyh5MDEgKiB4MjEgLSB5MjEgKiB4MDEpID4gZXBzaWxvbikgfHwgIXIpIHtcbiAgICAgIHRoaXMuXyArPSBcIkxcIiArICh0aGlzLl94MSA9IHgxKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTEpO1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSwgZHJhdyBhbiBhcmMhXG4gICAgZWxzZSB7XG4gICAgICB2YXIgeDIwID0geDIgLSB4MCxcbiAgICAgICAgICB5MjAgPSB5MiAtIHkwLFxuICAgICAgICAgIGwyMV8yID0geDIxICogeDIxICsgeTIxICogeTIxLFxuICAgICAgICAgIGwyMF8yID0geDIwICogeDIwICsgeTIwICogeTIwLFxuICAgICAgICAgIGwyMSA9IE1hdGguc3FydChsMjFfMiksXG4gICAgICAgICAgbDAxID0gTWF0aC5zcXJ0KGwwMV8yKSxcbiAgICAgICAgICBsID0gciAqIE1hdGgudGFuKChwaSAtIE1hdGguYWNvcygobDIxXzIgKyBsMDFfMiAtIGwyMF8yKSAvICgyICogbDIxICogbDAxKSkpIC8gMiksXG4gICAgICAgICAgdDAxID0gbCAvIGwwMSxcbiAgICAgICAgICB0MjEgPSBsIC8gbDIxO1xuXG4gICAgICAvLyBJZiB0aGUgc3RhcnQgdGFuZ2VudCBpcyBub3QgY29pbmNpZGVudCB3aXRoICh4MCx5MCksIGxpbmUgdG8uXG4gICAgICBpZiAoTWF0aC5hYnModDAxIC0gMSkgPiBlcHNpbG9uKSB7XG4gICAgICAgIHRoaXMuXyArPSBcIkxcIiArICh4MSArIHQwMSAqIHgwMSkgKyBcIixcIiArICh5MSArIHQwMSAqIHkwMSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuXyArPSBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLDAsXCIgKyAoKyh5MDEgKiB4MjAgPiB4MDEgKiB5MjApKSArIFwiLFwiICsgKHRoaXMuX3gxID0geDEgKyB0MjEgKiB4MjEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSArIHQyMSAqIHkyMSk7XG4gICAgfVxuICB9LFxuICBhcmM6IGZ1bmN0aW9uKHgsIHksIHIsIGEwLCBhMSwgY2N3KSB7XG4gICAgeCA9ICt4LCB5ID0gK3ksIHIgPSArciwgY2N3ID0gISFjY3c7XG4gICAgdmFyIGR4ID0gciAqIE1hdGguY29zKGEwKSxcbiAgICAgICAgZHkgPSByICogTWF0aC5zaW4oYTApLFxuICAgICAgICB4MCA9IHggKyBkeCxcbiAgICAgICAgeTAgPSB5ICsgZHksXG4gICAgICAgIGN3ID0gMSBeIGNjdyxcbiAgICAgICAgZGEgPSBjY3cgPyBhMCAtIGExIDogYTEgLSBhMDtcblxuICAgIC8vIElzIHRoZSByYWRpdXMgbmVnYXRpdmU/IEVycm9yLlxuICAgIGlmIChyIDwgMCkgdGhyb3cgbmV3IEVycm9yKFwibmVnYXRpdmUgcmFkaXVzOiBcIiArIHIpO1xuXG4gICAgLy8gSXMgdGhpcyBwYXRoIGVtcHR5PyBNb3ZlIHRvICh4MCx5MCkuXG4gICAgaWYgKHRoaXMuX3gxID09PSBudWxsKSB7XG4gICAgICB0aGlzLl8gKz0gXCJNXCIgKyB4MCArIFwiLFwiICsgeTA7XG4gICAgfVxuXG4gICAgLy8gT3IsIGlzICh4MCx5MCkgbm90IGNvaW5jaWRlbnQgd2l0aCB0aGUgcHJldmlvdXMgcG9pbnQ/IExpbmUgdG8gKHgwLHkwKS5cbiAgICBlbHNlIGlmIChNYXRoLmFicyh0aGlzLl94MSAtIHgwKSA+IGVwc2lsb24gfHwgTWF0aC5hYnModGhpcy5feTEgLSB5MCkgPiBlcHNpbG9uKSB7XG4gICAgICB0aGlzLl8gKz0gXCJMXCIgKyB4MCArIFwiLFwiICsgeTA7XG4gICAgfVxuXG4gICAgLy8gSXMgdGhpcyBhcmMgZW1wdHk/IFdl4oCZcmUgZG9uZS5cbiAgICBpZiAoIXIpIHJldHVybjtcblxuICAgIC8vIERvZXMgdGhlIGFuZ2xlIGdvIHRoZSB3cm9uZyB3YXk/IEZsaXAgdGhlIGRpcmVjdGlvbi5cbiAgICBpZiAoZGEgPCAwKSBkYSA9IGRhICUgdGF1ICsgdGF1O1xuXG4gICAgLy8gSXMgdGhpcyBhIGNvbXBsZXRlIGNpcmNsZT8gRHJhdyB0d28gYXJjcyB0byBjb21wbGV0ZSB0aGUgY2lyY2xlLlxuICAgIGlmIChkYSA+IHRhdUVwc2lsb24pIHtcbiAgICAgIHRoaXMuXyArPSBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLDEsXCIgKyBjdyArIFwiLFwiICsgKHggLSBkeCkgKyBcIixcIiArICh5IC0gZHkpICsgXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCwxLFwiICsgY3cgKyBcIixcIiArICh0aGlzLl94MSA9IHgwKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTApO1xuICAgIH1cblxuICAgIC8vIElzIHRoaXMgYXJjIG5vbi1lbXB0eT8gRHJhdyBhbiBhcmMhXG4gICAgZWxzZSBpZiAoZGEgPiBlcHNpbG9uKSB7XG4gICAgICB0aGlzLl8gKz0gXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCxcIiArICgrKGRhID49IHBpKSkgKyBcIixcIiArIGN3ICsgXCIsXCIgKyAodGhpcy5feDEgPSB4ICsgciAqIE1hdGguY29zKGExKSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkgKyByICogTWF0aC5zaW4oYTEpKTtcbiAgICB9XG4gIH0sXG4gIHJlY3Q6IGZ1bmN0aW9uKHgsIHksIHcsIGgpIHtcbiAgICB0aGlzLl8gKz0gXCJNXCIgKyAodGhpcy5feDAgPSB0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kwID0gdGhpcy5feTEgPSAreSkgKyBcImhcIiArICgrdykgKyBcInZcIiArICgraCkgKyBcImhcIiArICgtdykgKyBcIlpcIjtcbiAgfSxcbiAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl87XG4gIH1cbn07XG5cbmV4cG9ydHMucGF0aCA9IHBhdGg7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHNbaV0gIT09IHVuZGVmaW5lZCkgcmV0dXJuIGFyZ3VtZW50c1tpXTtcbiAgICB9XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBoc2wycmdiXG5mdW5jdGlvbiBoc2wycmdiIChoc2wpIHtcbiAgdmFyIGggPSBoc2xbMF0sXG4gICAgcyA9IGhzbFsxXSxcbiAgICBsID0gaHNsWzJdLFxuICAgIHQxLCB0MiwgdDMsIHJnYiwgdmFsXG5cbiAgaWYgKHMgPT09IDApIHtcbiAgICB2YWwgPSBsXG4gICAgcmV0dXJuIFt2YWwsIHZhbCwgdmFsXVxuICB9XG5cbiAgaWYgKGwgPCAwLjUpIHtcbiAgICB0MiA9IGwgKiAoMSArIHMpXG4gIH0gZWxzZSB7XG4gICAgdDIgPSBsICsgcyAtIGwgKiBzXG4gIH1cbiAgdDEgPSAyICogbCAtIHQyXG5cbiAgcmdiID0gWzAsIDAsIDBdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgdDMgPSBoICsgMSAvIDMgKiAtKGkgLSAxKVxuICAgIGlmICh0MyA8IDApIHtcbiAgICAgIHQzKytcbiAgICB9XG4gICAgaWYgKHQzID4gMSkge1xuICAgICAgdDMtLVxuICAgIH1cblxuICAgIGlmICg2ICogdDMgPCAxKSB7XG4gICAgICB2YWwgPSB0MSArICh0MiAtIHQxKSAqIDYgKiB0M1xuICAgIH0gZWxzZSBpZiAoMiAqIHQzIDwgMSkge1xuICAgICAgdmFsID0gdDJcbiAgICB9IGVsc2UgaWYgKDMgKiB0MyA8IDIpIHtcbiAgICAgIHZhbCA9IHQxICsgKHQyIC0gdDEpICogKDIgLyAzIC0gdDMpICogNlxuICAgIH0gZWxzZSB7XG4gICAgICB2YWwgPSB0MVxuICAgIH1cblxuICAgIHJnYltpXSA9IHZhbFxuICB9XG5cbiAgcmV0dXJuIHJnYlxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZ2IyaHNsXG5mdW5jdGlvbiByZ2IyaHNsIChyZ2IpIHtcbiAgdmFyIHIgPSByZ2JbMF0sXG4gICAgZyA9IHJnYlsxXSxcbiAgICBiID0gcmdiWzJdLFxuICAgIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpLFxuICAgIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLFxuICAgIGRlbHRhID0gbWF4IC0gbWluLFxuICAgIGgsIHMsIGxcblxuICBpZiAobWF4ID09PSBtaW4pIHtcbiAgICBoID0gMFxuICB9IGVsc2UgaWYgKHIgPT09IG1heCkge1xuICAgIGggPSAoZyAtIGIpIC8gZGVsdGFcbiAgfSBlbHNlIGlmIChnID09PSBtYXgpIHtcbiAgICBoID0gMiArIChiIC0gcikgLyBkZWx0YVxuICB9IGVsc2UgaWYgKGIgPT09IG1heCkge1xuICAgIGggPSA0ICsgKHIgLSBnKSAvIGRlbHRhXG4gIH1cblxuICBoID0gTWF0aC5taW4oaCAqIDYwLCAzNjApXG5cbiAgaWYgKGggPCAwKSB7XG4gICAgaCArPSAzNjBcbiAgfVxuXG4gIGwgPSAobWluICsgbWF4KSAvIDJcblxuICBpZiAobWF4ID09PSBtaW4pIHtcbiAgICBzID0gMFxuICB9IGVsc2UgaWYgKGwgPD0gMC41KSB7XG4gICAgcyA9IGRlbHRhIC8gKG1heCArIG1pbilcbiAgfSBlbHNlIHtcbiAgICBzID0gZGVsdGEgLyAoMiAtIG1heCAtIG1pbilcbiAgfVxuXG4gIHJldHVybiBbaCAvIDM2MCwgcywgbF1cbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBsaW5lY2xpcDtcblxubGluZWNsaXAucG9seWxpbmUgPSBsaW5lY2xpcDtcbmxpbmVjbGlwLnBvbHlnb24gPSBwb2x5Z29uY2xpcDtcblxuXG4vLyBDb2hlbi1TdXRoZXJsYW5kIGxpbmUgY2xpcHBpZ24gYWxnb3JpdGhtLCBhZGFwdGVkIHRvIGVmZmljaWVudGx5XG4vLyBoYW5kbGUgcG9seWxpbmVzIHJhdGhlciB0aGFuIGp1c3Qgc2VnbWVudHNcblxuZnVuY3Rpb24gbGluZWNsaXAocG9pbnRzLCBiYm94LCByZXN1bHQpIHtcblxuICAgIHZhciBsZW4gPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBjb2RlQSA9IGJpdENvZGUocG9pbnRzWzBdLCBiYm94KSxcbiAgICAgICAgcGFydCA9IFtdLFxuICAgICAgICBpLCBhLCBiLCBjb2RlQiwgbGFzdENvZGU7XG5cbiAgICBpZiAoIXJlc3VsdCkgcmVzdWx0ID0gW107XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgYSA9IHBvaW50c1tpIC0gMV07XG4gICAgICAgIGIgPSBwb2ludHNbaV07XG4gICAgICAgIGNvZGVCID0gbGFzdENvZGUgPSBiaXRDb2RlKGIsIGJib3gpO1xuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG5cbiAgICAgICAgICAgIGlmICghKGNvZGVBIHwgY29kZUIpKSB7IC8vIGFjY2VwdFxuICAgICAgICAgICAgICAgIHBhcnQucHVzaChhKTtcblxuICAgICAgICAgICAgICAgIGlmIChjb2RlQiAhPT0gbGFzdENvZGUpIHsgLy8gc2VnbWVudCB3ZW50IG91dHNpZGVcbiAgICAgICAgICAgICAgICAgICAgcGFydC5wdXNoKGIpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgbGVuIC0gMSkgeyAvLyBzdGFydCBhIG5ldyBsaW5lXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwYXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gbGVuIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0LnB1c2goYik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGVBICYgY29kZUIpIHsgLy8gdHJpdmlhbCByZWplY3RcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlQSkgeyAvLyBhIG91dHNpZGUsIGludGVyc2VjdCB3aXRoIGNsaXAgZWRnZVxuICAgICAgICAgICAgICAgIGEgPSBpbnRlcnNlY3QoYSwgYiwgY29kZUEsIGJib3gpO1xuICAgICAgICAgICAgICAgIGNvZGVBID0gYml0Q29kZShhLCBiYm94KTtcblxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gYiBvdXRzaWRlXG4gICAgICAgICAgICAgICAgYiA9IGludGVyc2VjdChhLCBiLCBjb2RlQiwgYmJveCk7XG4gICAgICAgICAgICAgICAgY29kZUIgPSBiaXRDb2RlKGIsIGJib3gpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29kZUEgPSBsYXN0Q29kZTtcbiAgICB9XG5cbiAgICBpZiAocGFydC5sZW5ndGgpIHJlc3VsdC5wdXNoKHBhcnQpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gU3V0aGVybGFuZC1Ib2RnZW1hbiBwb2x5Z29uIGNsaXBwaW5nIGFsZ29yaXRobVxuXG5mdW5jdGlvbiBwb2x5Z29uY2xpcChwb2ludHMsIGJib3gpIHtcblxuICAgIHZhciByZXN1bHQsIGVkZ2UsIHByZXYsIHByZXZJbnNpZGUsIGksIHAsIGluc2lkZTtcblxuICAgIC8vIGNsaXAgYWdhaW5zdCBlYWNoIHNpZGUgb2YgdGhlIGNsaXAgcmVjdGFuZ2xlXG4gICAgZm9yIChlZGdlID0gMTsgZWRnZSA8PSA4OyBlZGdlICo9IDIpIHtcbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgIHByZXYgPSBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBwcmV2SW5zaWRlID0gIShiaXRDb2RlKHByZXYsIGJib3gpICYgZWRnZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcCA9IHBvaW50c1tpXTtcbiAgICAgICAgICAgIGluc2lkZSA9ICEoYml0Q29kZShwLCBiYm94KSAmIGVkZ2UpO1xuXG4gICAgICAgICAgICAvLyBpZiBzZWdtZW50IGdvZXMgdGhyb3VnaCB0aGUgY2xpcCB3aW5kb3csIGFkZCBhbiBpbnRlcnNlY3Rpb25cbiAgICAgICAgICAgIGlmIChpbnNpZGUgIT09IHByZXZJbnNpZGUpIHJlc3VsdC5wdXNoKGludGVyc2VjdChwcmV2LCBwLCBlZGdlLCBiYm94KSk7XG5cbiAgICAgICAgICAgIGlmIChpbnNpZGUpIHJlc3VsdC5wdXNoKHApOyAvLyBhZGQgYSBwb2ludCBpZiBpdCdzIGluc2lkZVxuXG4gICAgICAgICAgICBwcmV2ID0gcDtcbiAgICAgICAgICAgIHByZXZJbnNpZGUgPSBpbnNpZGU7XG4gICAgICAgIH1cblxuICAgICAgICBwb2ludHMgPSByZXN1bHQ7XG5cbiAgICAgICAgaWYgKCFwb2ludHMubGVuZ3RoKSBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBpbnRlcnNlY3QgYSBzZWdtZW50IGFnYWluc3Qgb25lIG9mIHRoZSA0IGxpbmVzIHRoYXQgbWFrZSB1cCB0aGUgYmJveFxuXG5mdW5jdGlvbiBpbnRlcnNlY3QoYSwgYiwgZWRnZSwgYmJveCkge1xuICAgIHJldHVybiBlZGdlICYgOCA/IFthWzBdICsgKGJbMF0gLSBhWzBdKSAqIChiYm94WzNdIC0gYVsxXSkgLyAoYlsxXSAtIGFbMV0pLCBiYm94WzNdXSA6IC8vIHRvcFxuICAgICAgICAgICBlZGdlICYgNCA/IFthWzBdICsgKGJbMF0gLSBhWzBdKSAqIChiYm94WzFdIC0gYVsxXSkgLyAoYlsxXSAtIGFbMV0pLCBiYm94WzFdXSA6IC8vIGJvdHRvbVxuICAgICAgICAgICBlZGdlICYgMiA/IFtiYm94WzJdLCBhWzFdICsgKGJbMV0gLSBhWzFdKSAqIChiYm94WzJdIC0gYVswXSkgLyAoYlswXSAtIGFbMF0pXSA6IC8vIHJpZ2h0XG4gICAgICAgICAgIGVkZ2UgJiAxID8gW2Jib3hbMF0sIGFbMV0gKyAoYlsxXSAtIGFbMV0pICogKGJib3hbMF0gLSBhWzBdKSAvIChiWzBdIC0gYVswXSldIDogLy8gbGVmdFxuICAgICAgICAgICBudWxsO1xufVxuXG4vLyBiaXQgY29kZSByZWZsZWN0cyB0aGUgcG9pbnQgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIGJib3g6XG5cbi8vICAgICAgICAgbGVmdCAgbWlkICByaWdodFxuLy8gICAgdG9wICAxMDAxICAxMDAwICAxMDEwXG4vLyAgICBtaWQgIDAwMDEgIDAwMDAgIDAwMTBcbi8vIGJvdHRvbSAgMDEwMSAgMDEwMCAgMDExMFxuXG5mdW5jdGlvbiBiaXRDb2RlKHAsIGJib3gpIHtcbiAgICB2YXIgY29kZSA9IDA7XG5cbiAgICBpZiAocFswXSA8IGJib3hbMF0pIGNvZGUgfD0gMTsgLy8gbGVmdFxuICAgIGVsc2UgaWYgKHBbMF0gPiBiYm94WzJdKSBjb2RlIHw9IDI7IC8vIHJpZ2h0XG5cbiAgICBpZiAocFsxXSA8IGJib3hbMV0pIGNvZGUgfD0gNDsgLy8gYm90dG9tXG4gICAgZWxzZSBpZiAocFsxXSA+IGJib3hbM10pIGNvZGUgfD0gODsgLy8gdG9wXG5cbiAgICByZXR1cm4gY29kZTtcbn1cbiIsIid1c2Ugc3RyaWN0J1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBub3JtYWxpemVcclxuXHJcbnZhciBhcmNUb0N1cnZlID0gcmVxdWlyZSgnc3ZnLWFyYy10by1jdWJpYy1iZXppZXInKVxyXG5cclxuZnVuY3Rpb24gbm9ybWFsaXplKHBhdGgpe1xyXG4gIC8vIGluaXQgc3RhdGVcclxuICB2YXIgcHJldlxyXG4gIHZhciByZXN1bHQgPSBbXVxyXG4gIHZhciBiZXppZXJYID0gMFxyXG4gIHZhciBiZXppZXJZID0gMFxyXG4gIHZhciBzdGFydFggPSAwXHJcbiAgdmFyIHN0YXJ0WSA9IDBcclxuICB2YXIgcXVhZFggPSBudWxsXHJcbiAgdmFyIHF1YWRZID0gbnVsbFxyXG4gIHZhciB4ID0gMFxyXG4gIHZhciB5ID0gMFxyXG5cclxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gcGF0aC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgdmFyIHNlZyA9IHBhdGhbaV1cclxuICAgIHZhciBjb21tYW5kID0gc2VnWzBdXHJcblxyXG4gICAgc3dpdGNoIChjb21tYW5kKSB7XHJcbiAgICAgIGNhc2UgJ00nOlxyXG4gICAgICAgIHN0YXJ0WCA9IHNlZ1sxXVxyXG4gICAgICAgIHN0YXJ0WSA9IHNlZ1syXVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ0EnOlxyXG4gICAgICAgIHZhciBjdXJ2ZXMgPSBhcmNUb0N1cnZlKHtcclxuICAgICAgICAgIHB4OiB4LFxyXG4gICAgICAgICAgcHk6IHksXHJcbiAgICAgICAgICBjeDogc2VnWzZdLFxyXG4gICAgICAgICAgY3k6ICBzZWdbN10sXHJcbiAgICAgICAgICByeDogc2VnWzFdLFxyXG4gICAgICAgICAgcnk6IHNlZ1syXSxcclxuICAgICAgICAgIHhBeGlzUm90YXRpb246IHNlZ1szXSxcclxuICAgICAgICAgIGxhcmdlQXJjRmxhZzogc2VnWzRdLFxyXG4gICAgICAgICAgc3dlZXBGbGFnOiBzZWdbNV1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICAvLyBudWxsLWN1cnZlc1xyXG4gICAgICAgIGlmICghY3VydmVzLmxlbmd0aCkgY29udGludWVcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaiA9IDAsIGM7IGogPCBjdXJ2ZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGMgPSBjdXJ2ZXNbal1cclxuICAgICAgICAgIHNlZyA9IFsnQycsIGMueDEsIGMueTEsIGMueDIsIGMueTIsIGMueCwgYy55XVxyXG4gICAgICAgICAgaWYgKGogPCBjdXJ2ZXMubGVuZ3RoIC0gMSkgcmVzdWx0LnB1c2goc2VnKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnUyc6XHJcbiAgICAgICAgLy8gZGVmYXVsdCBjb250cm9sIHBvaW50XHJcbiAgICAgICAgdmFyIGN4ID0geFxyXG4gICAgICAgIHZhciBjeSA9IHlcclxuICAgICAgICBpZiAocHJldiA9PSAnQycgfHwgcHJldiA9PSAnUycpIHtcclxuICAgICAgICAgIGN4ICs9IGN4IC0gYmV6aWVyWCAvLyByZWZsZWN0IHRoZSBwcmV2aW91cyBjb21tYW5kJ3MgY29udHJvbFxyXG4gICAgICAgICAgY3kgKz0gY3kgLSBiZXppZXJZIC8vIHBvaW50IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBvaW50XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlZyA9IFsnQycsIGN4LCBjeSwgc2VnWzFdLCBzZWdbMl0sIHNlZ1szXSwgc2VnWzRdXVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ1QnOlxyXG4gICAgICAgIGlmIChwcmV2ID09ICdRJyB8fCBwcmV2ID09ICdUJykge1xyXG4gICAgICAgICAgcXVhZFggPSB4ICogMiAtIHF1YWRYIC8vIGFzIHdpdGggJ1MnIHJlZmxlY3QgcHJldmlvdXMgY29udHJvbCBwb2ludFxyXG4gICAgICAgICAgcXVhZFkgPSB5ICogMiAtIHF1YWRZXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHF1YWRYID0geFxyXG4gICAgICAgICAgcXVhZFkgPSB5XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlZyA9IHF1YWRyYXRpYyh4LCB5LCBxdWFkWCwgcXVhZFksIHNlZ1sxXSwgc2VnWzJdKVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ1EnOlxyXG4gICAgICAgIHF1YWRYID0gc2VnWzFdXHJcbiAgICAgICAgcXVhZFkgPSBzZWdbMl1cclxuICAgICAgICBzZWcgPSBxdWFkcmF0aWMoeCwgeSwgc2VnWzFdLCBzZWdbMl0sIHNlZ1szXSwgc2VnWzRdKVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ0wnOlxyXG4gICAgICAgIHNlZyA9IGxpbmUoeCwgeSwgc2VnWzFdLCBzZWdbMl0pXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnSCc6XHJcbiAgICAgICAgc2VnID0gbGluZSh4LCB5LCBzZWdbMV0sIHkpXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnVic6XHJcbiAgICAgICAgc2VnID0gbGluZSh4LCB5LCB4LCBzZWdbMV0pXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnWic6XHJcbiAgICAgICAgc2VnID0gbGluZSh4LCB5LCBzdGFydFgsIHN0YXJ0WSlcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHVwZGF0ZSBzdGF0ZVxyXG4gICAgcHJldiA9IGNvbW1hbmRcclxuICAgIHggPSBzZWdbc2VnLmxlbmd0aCAtIDJdXHJcbiAgICB5ID0gc2VnW3NlZy5sZW5ndGggLSAxXVxyXG4gICAgaWYgKHNlZy5sZW5ndGggPiA0KSB7XHJcbiAgICAgIGJlemllclggPSBzZWdbc2VnLmxlbmd0aCAtIDRdXHJcbiAgICAgIGJlemllclkgPSBzZWdbc2VnLmxlbmd0aCAtIDNdXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBiZXppZXJYID0geFxyXG4gICAgICBiZXppZXJZID0geVxyXG4gICAgfVxyXG4gICAgcmVzdWx0LnB1c2goc2VnKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc3VsdFxyXG59XHJcblxyXG5mdW5jdGlvbiBsaW5lKHgxLCB5MSwgeDIsIHkyKXtcclxuICByZXR1cm4gWydDJywgeDEsIHkxLCB4MiwgeTIsIHgyLCB5Ml1cclxufVxyXG5cclxuZnVuY3Rpb24gcXVhZHJhdGljKHgxLCB5MSwgY3gsIGN5LCB4MiwgeTIpe1xyXG4gIHJldHVybiBbXHJcbiAgICAnQycsXHJcbiAgICB4MS8zICsgKDIvMykgKiBjeCxcclxuICAgIHkxLzMgKyAoMi8zKSAqIGN5LFxyXG4gICAgeDIvMyArICgyLzMpICogY3gsXHJcbiAgICB5Mi8zICsgKDIvMykgKiBjeSxcclxuICAgIHgyLFxyXG4gICAgeTJcclxuICBdXHJcbn1cclxuIiwidmFyIGNvbnZlcnQgPSByZXF1aXJlKCdjb2xvci1jb252ZXJ0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzdHIpIHtcbiAgICB2YXIgbSwgY29udiwgcGFydHMsIGFscGhhO1xuICAgIGlmIChtID0gL14oKD86cmdifGhzW2x2XXxjbXlrfHh5enxsYWIpYT8pXFxzKlxcKChbXlxcKV0qKVxcKS8uZXhlYyhjc3RyKSkge1xuICAgICAgICB2YXIgbmFtZSA9IG1bMV07XG4gICAgICAgIHZhciBiYXNlID0gbmFtZS5yZXBsYWNlKC9hJC8sICcnKTtcbiAgICAgICAgdmFyIHNpemUgPSBiYXNlID09PSAnY215aycgPyA0IDogMztcbiAgICAgICAgY29udiA9IGNvbnZlcnRbYmFzZV07XG4gICAgICAgIFxuICAgICAgICBwYXJ0cyA9IG1bMl0ucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpXG4gICAgICAgICAgICAuc3BsaXQoL1xccyosXFxzKi8pXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICAgICAgaWYgKC8lJC8udGVzdCh4KSAmJiBpID09PSBzaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHgpIC8gMTAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICgvJSQvLnRlc3QoeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoeCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgO1xuICAgICAgICBpZiAobmFtZSA9PT0gYmFzZSkgcGFydHMucHVzaCgxKTtcbiAgICAgICAgYWxwaGEgPSBwYXJ0c1tzaXplXSA9PT0gdW5kZWZpbmVkID8gMSA6IHBhcnRzW3NpemVdO1xuICAgICAgICBwYXJ0cyA9IHBhcnRzLnNsaWNlKDAsIHNpemUpO1xuICAgICAgICBcbiAgICAgICAgY29udltiYXNlXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBhcnRzIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKC9eI1tBLUZhLWYwLTldKyQvLnRlc3QoY3N0cikpIHtcbiAgICAgICAgdmFyIGJhc2UgPSBjc3RyLnJlcGxhY2UoL14jLywnJyk7XG4gICAgICAgIHZhciBzaXplID0gYmFzZS5sZW5ndGg7XG4gICAgICAgIGNvbnYgPSBjb252ZXJ0LnJnYjtcbiAgICAgICAgcGFydHMgPSBiYXNlLnNwbGl0KHNpemUgPT09IDMgPyAvKC4pLyA6IC8oLi4pLyk7XG4gICAgICAgIHBhcnRzID0gcGFydHMuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgaWYgKHNpemUgPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHggKyB4LCAxNik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoeCwgMTYpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgO1xuICAgICAgICBhbHBoYSA9IDE7XG4gICAgICAgIGNvbnYucmdiID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcGFydHMgfTtcbiAgICAgICAgaWYgKCFwYXJ0c1swXSkgcGFydHNbMF0gPSAwO1xuICAgICAgICBpZiAoIXBhcnRzWzFdKSBwYXJ0c1sxXSA9IDA7XG4gICAgICAgIGlmICghcGFydHNbMl0pIHBhcnRzWzJdID0gMDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnYgPSBjb252ZXJ0LmtleXdvcmQ7XG4gICAgICAgIGNvbnYua2V5d29yZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNzdHIgfTtcbiAgICAgICAgcGFydHMgPSBjc3RyO1xuICAgICAgICBhbHBoYSA9IDE7XG4gICAgfVxuICAgIFxuICAgIHZhciByZXMgPSB7XG4gICAgICAgIHJnYjogdW5kZWZpbmVkLFxuICAgICAgICBoc2w6IHVuZGVmaW5lZCxcbiAgICAgICAgaHN2OiB1bmRlZmluZWQsXG4gICAgICAgIGNteWs6IHVuZGVmaW5lZCxcbiAgICAgICAga2V5d29yZDogdW5kZWZpbmVkLFxuICAgICAgICBoZXg6IHVuZGVmaW5lZFxuICAgIH07XG4gICAgdHJ5IHsgcmVzLnJnYiA9IGNvbnYucmdiKHBhcnRzKSB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7IHJlcy5oc2wgPSBjb252LmhzbChwYXJ0cykgfSBjYXRjaCAoZSkge31cbiAgICB0cnkgeyByZXMuaHN2ID0gY29udi5oc3YocGFydHMpIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHsgcmVzLmNteWsgPSBjb252LmNteWsocGFydHMpIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHsgcmVzLmtleXdvcmQgPSBjb252LmtleXdvcmQocGFydHMpIH0gY2F0Y2ggKGUpIHt9XG4gICAgXG4gICAgaWYgKHJlcy5yZ2IpIHJlcy5oZXggPSAnIycgKyByZXMucmdiLm1hcChmdW5jdGlvbiAoeCkge1xuICAgICAgICB2YXIgcyA9IHgudG9TdHJpbmcoMTYpO1xuICAgICAgICBpZiAocy5sZW5ndGggPT09IDEpIHJldHVybiAnMCcgKyBzO1xuICAgICAgICByZXR1cm4gcztcbiAgICB9KS5qb2luKCcnKTtcbiAgICBcbiAgICBpZiAocmVzLnJnYikgcmVzLnJnYmEgPSByZXMucmdiLmNvbmNhdChhbHBoYSk7XG4gICAgaWYgKHJlcy5oc2wpIHJlcy5oc2xhID0gcmVzLmhzbC5jb25jYXQoYWxwaGEpO1xuICAgIGlmIChyZXMuaHN2KSByZXMuaHN2YSA9IHJlcy5oc3YuY29uY2F0KGFscGhhKTtcbiAgICBpZiAocmVzLmNteWspIHJlcy5jbXlrYSA9IHJlcy5jbXlrLmNvbmNhdChhbHBoYSk7XG4gICAgXG4gICAgcmV0dXJuIHJlcztcbn07XG4iLCJcbm1vZHVsZS5leHBvcnRzID0gcGFyc2VcblxuLyoqXG4gKiBleHBlY3RlZCBhcmd1bWVudCBsZW5ndGhzXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5cbnZhciBsZW5ndGggPSB7YTogNywgYzogNiwgaDogMSwgbDogMiwgbTogMiwgcTogNCwgczogNCwgdDogMiwgdjogMSwgejogMH1cblxuLyoqXG4gKiBzZWdtZW50IHBhdHRlcm5cbiAqIEB0eXBlIHtSZWdFeHB9XG4gKi9cblxudmFyIHNlZ21lbnQgPSAvKFthc3R2enFtaGxjXSkoW15hc3R2enFtaGxjXSopL2lnXG5cbi8qKlxuICogcGFyc2UgYW4gc3ZnIHBhdGggZGF0YSBzdHJpbmcuIEdlbmVyYXRlcyBhbiBBcnJheVxuICogb2YgY29tbWFuZHMgd2hlcmUgZWFjaCBjb21tYW5kIGlzIGFuIEFycmF5IG9mIHRoZVxuICogZm9ybSBgW2NvbW1hbmQsIGFyZzEsIGFyZzIsIC4uLl1gXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKHBhdGgpIHtcblx0dmFyIGRhdGEgPSBbXVxuXHRwYXRoLnJlcGxhY2Uoc2VnbWVudCwgZnVuY3Rpb24oXywgY29tbWFuZCwgYXJncyl7XG5cdFx0dmFyIHR5cGUgPSBjb21tYW5kLnRvTG93ZXJDYXNlKClcblx0XHRhcmdzID0gcGFyc2VWYWx1ZXMoYXJncylcblxuXHRcdC8vIG92ZXJsb2FkZWQgbW92ZVRvXG5cdFx0aWYgKHR5cGUgPT0gJ20nICYmIGFyZ3MubGVuZ3RoID4gMikge1xuXHRcdFx0ZGF0YS5wdXNoKFtjb21tYW5kXS5jb25jYXQoYXJncy5zcGxpY2UoMCwgMikpKVxuXHRcdFx0dHlwZSA9ICdsJ1xuXHRcdFx0Y29tbWFuZCA9IGNvbW1hbmQgPT0gJ20nID8gJ2wnIDogJ0wnXG5cdFx0fVxuXG5cdFx0d2hpbGUgKHRydWUpIHtcblx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PSBsZW5ndGhbdHlwZV0pIHtcblx0XHRcdFx0YXJncy51bnNoaWZ0KGNvbW1hbmQpXG5cdFx0XHRcdHJldHVybiBkYXRhLnB1c2goYXJncylcblx0XHRcdH1cblx0XHRcdGlmIChhcmdzLmxlbmd0aCA8IGxlbmd0aFt0eXBlXSkgdGhyb3cgbmV3IEVycm9yKCdtYWxmb3JtZWQgcGF0aCBkYXRhJylcblx0XHRcdGRhdGEucHVzaChbY29tbWFuZF0uY29uY2F0KGFyZ3Muc3BsaWNlKDAsIGxlbmd0aFt0eXBlXSkpKVxuXHRcdH1cblx0fSlcblx0cmV0dXJuIGRhdGFcbn1cblxudmFyIG51bWJlciA9IC8tP1swLTldKlxcLj9bMC05XSsoPzplWy0rXT9cXGQrKT8vaWdcblxuZnVuY3Rpb24gcGFyc2VWYWx1ZXMoYXJncykge1xuXHR2YXIgbnVtYmVycyA9IGFyZ3MubWF0Y2gobnVtYmVyKVxuXHRyZXR1cm4gbnVtYmVycyA/IG51bWJlcnMubWFwKE51bWJlcikgOiBbXVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBwcmltaXRpdmVRdWFkXG5cbmZ1bmN0aW9uIHByaW1pdGl2ZVF1YWQgKHNjYWxlKSB7XG4gIHNjYWxlID0gdHlwZW9mIHNjYWxlICE9PSAndW5kZWZpbmVkJyA/IHNjYWxlIDogMVxuICBpZiAoIUFycmF5LmlzQXJyYXkoc2NhbGUpKSB7XG4gICAgc2NhbGUgPSBbc2NhbGUsIHNjYWxlXVxuICB9XG5cbiAgdmFyIHBvc2l0aW9ucyA9IFtcbiAgICBbLXNjYWxlWzBdLCAtc2NhbGVbMV0sIDBdLFxuICAgIFtzY2FsZVswXSwgLXNjYWxlWzFdLCAwXSxcbiAgICBbc2NhbGVbMF0sIHNjYWxlWzFdLCAwXSxcbiAgICBbLXNjYWxlWzBdLCBzY2FsZVsxXSwgMF1cbiAgXVxuICB2YXIgY2VsbHMgPSBbXG4gICAgWzAsIDEsIDJdLFxuICAgIFsyLCAzLCAwXVxuICBdXG4gIHZhciB1dnMgPSBbWzAsIDBdLCBbMSwgMF0sIFsxLCAxXSwgWzAsIDFdXVxuICB2YXIgbiA9IFswLCAwLCAtMV1cbiAgdmFyIG5vcm1hbHMgPSBbIG4uc2xpY2UoKSwgbi5zbGljZSgpLCBuLnNsaWNlKCksIG4uc2xpY2UoKSBdXG4gIHJldHVybiB7XG4gICAgcG9zaXRpb25zOiBwb3NpdGlvbnMsXG4gICAgY2VsbHM6IGNlbGxzLFxuICAgIHV2czogdXZzLFxuICAgIG5vcm1hbHM6IG5vcm1hbHNcbiAgfVxufVxuIiwiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsLmNyZWF0ZVJFR0wgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbnZhciBpc1R5cGVkQXJyYXkgPSBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gKFxuICAgIHggaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8XG4gICAgeCBpbnN0YW5jZW9mIFVpbnQxNkFycmF5IHx8XG4gICAgeCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5IHx8XG4gICAgeCBpbnN0YW5jZW9mIEludDhBcnJheSB8fFxuICAgIHggaW5zdGFuY2VvZiBJbnQxNkFycmF5IHx8XG4gICAgeCBpbnN0YW5jZW9mIEludDMyQXJyYXkgfHxcbiAgICB4IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5IHx8XG4gICAgeCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSB8fFxuICAgIHggaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheVxuICApXG59XG5cbnZhciBleHRlbmQgPSBmdW5jdGlvbiAoYmFzZSwgb3B0cykge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdHMpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgIGJhc2Vba2V5c1tpXV0gPSBvcHRzW2tleXNbaV1dXG4gIH1cbiAgcmV0dXJuIGJhc2Vcbn1cblxuLy8gRXJyb3IgY2hlY2tpbmcgYW5kIHBhcmFtZXRlciB2YWxpZGF0aW9uLlxuLy9cbi8vIFN0YXRlbWVudHMgZm9yIHRoZSBmb3JtIGBjaGVjay5zb21lUHJvY2VkdXJlKC4uLilgIGdldCByZW1vdmVkIGJ5XG4vLyBhIGJyb3dzZXJpZnkgdHJhbnNmb3JtIGZvciBvcHRpbWl6ZWQvbWluaWZpZWQgYnVuZGxlcy5cbi8vXG4vKiBnbG9iYWxzIGF0b2IgKi9cbnZhciBlbmRsID0gJ1xcbidcblxuLy8gb25seSB1c2VkIGZvciBleHRyYWN0aW5nIHNoYWRlciBuYW1lcy4gIGlmIGF0b2Igbm90IHByZXNlbnQsIHRoZW4gZXJyb3JzXG4vLyB3aWxsIGJlIHNsaWdodGx5IGNyYXBwaWVyXG5mdW5jdGlvbiBkZWNvZGVCNjQgKHN0cikge1xuICBpZiAodHlwZW9mIGF0b2IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGF0b2Ioc3RyKVxuICB9XG4gIHJldHVybiAnYmFzZTY0OicgKyBzdHJcbn1cblxuZnVuY3Rpb24gcmFpc2UgKG1lc3NhZ2UpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKCcocmVnbCkgJyArIG1lc3NhZ2UpXG4gIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gIHRocm93IGVycm9yXG59XG5cbmZ1bmN0aW9uIGNoZWNrIChwcmVkLCBtZXNzYWdlKSB7XG4gIGlmICghcHJlZCkge1xuICAgIHJhaXNlKG1lc3NhZ2UpXG4gIH1cbn1cblxuZnVuY3Rpb24gZW5jb2xvbiAobWVzc2FnZSkge1xuICBpZiAobWVzc2FnZSkge1xuICAgIHJldHVybiAnOiAnICsgbWVzc2FnZVxuICB9XG4gIHJldHVybiAnJ1xufVxuXG5mdW5jdGlvbiBjaGVja1BhcmFtZXRlciAocGFyYW0sIHBvc3NpYmlsaXRpZXMsIG1lc3NhZ2UpIHtcbiAgaWYgKCEocGFyYW0gaW4gcG9zc2liaWxpdGllcykpIHtcbiAgICByYWlzZSgndW5rbm93biBwYXJhbWV0ZXIgKCcgKyBwYXJhbSArICcpJyArIGVuY29sb24obWVzc2FnZSkgK1xuICAgICAgICAgICcuIHBvc3NpYmxlIHZhbHVlczogJyArIE9iamVjdC5rZXlzKHBvc3NpYmlsaXRpZXMpLmpvaW4oKSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0lzVHlwZWRBcnJheSAoZGF0YSwgbWVzc2FnZSkge1xuICBpZiAoIWlzVHlwZWRBcnJheShkYXRhKSkge1xuICAgIHJhaXNlKFxuICAgICAgJ2ludmFsaWQgcGFyYW1ldGVyIHR5cGUnICsgZW5jb2xvbihtZXNzYWdlKSArXG4gICAgICAnLiBtdXN0IGJlIGEgdHlwZWQgYXJyYXknKVxuICB9XG59XG5cbmZ1bmN0aW9uIHN0YW5kYXJkVHlwZUVoICh2YWx1ZSwgdHlwZSkge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdudW1iZXInOiByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJ1xuICAgIGNhc2UgJ29iamVjdCc6IHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnXG4gICAgY2FzZSAnc3RyaW5nJzogcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcbiAgICBjYXNlICdib29sZWFuJzogcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nXG4gICAgY2FzZSAnZnVuY3Rpb24nOiByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nXG4gICAgY2FzZSAndW5kZWZpbmVkJzogcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCdcbiAgICBjYXNlICdzeW1ib2wnOiByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJ1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrVHlwZU9mICh2YWx1ZSwgdHlwZSwgbWVzc2FnZSkge1xuICBpZiAoIXN0YW5kYXJkVHlwZUVoKHZhbHVlLCB0eXBlKSkge1xuICAgIHJhaXNlKFxuICAgICAgJ2ludmFsaWQgcGFyYW1ldGVyIHR5cGUnICsgZW5jb2xvbihtZXNzYWdlKSArXG4gICAgICAnLiBleHBlY3RlZCAnICsgdHlwZSArICcsIGdvdCAnICsgKHR5cGVvZiB2YWx1ZSkpXG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tOb25OZWdhdGl2ZUludCAodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCEoKHZhbHVlID49IDApICYmXG4gICAgICAgICgodmFsdWUgfCAwKSA9PT0gdmFsdWUpKSkge1xuICAgIHJhaXNlKCdpbnZhbGlkIHBhcmFtZXRlciB0eXBlLCAoJyArIHZhbHVlICsgJyknICsgZW5jb2xvbihtZXNzYWdlKSArXG4gICAgICAgICAgJy4gbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXInKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrT25lT2YgKHZhbHVlLCBsaXN0LCBtZXNzYWdlKSB7XG4gIGlmIChsaXN0LmluZGV4T2YodmFsdWUpIDwgMCkge1xuICAgIHJhaXNlKCdpbnZhbGlkIHZhbHVlJyArIGVuY29sb24obWVzc2FnZSkgKyAnLiBtdXN0IGJlIG9uZSBvZjogJyArIGxpc3QpXG4gIH1cbn1cblxudmFyIGNvbnN0cnVjdG9yS2V5cyA9IFtcbiAgJ2dsJyxcbiAgJ2NhbnZhcycsXG4gICdjb250YWluZXInLFxuICAnYXR0cmlidXRlcycsXG4gICdwaXhlbFJhdGlvJyxcbiAgJ2V4dGVuc2lvbnMnLFxuICAnb3B0aW9uYWxFeHRlbnNpb25zJyxcbiAgJ3Byb2ZpbGUnLFxuICAnb25Eb25lJ1xuXVxuXG5mdW5jdGlvbiBjaGVja0NvbnN0cnVjdG9yIChvYmopIHtcbiAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoY29uc3RydWN0b3JLZXlzLmluZGV4T2Yoa2V5KSA8IDApIHtcbiAgICAgIHJhaXNlKCdpbnZhbGlkIHJlZ2wgY29uc3RydWN0b3IgYXJndW1lbnQgXCInICsga2V5ICsgJ1wiLiBtdXN0IGJlIG9uZSBvZiAnICsgY29uc3RydWN0b3JLZXlzKVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gbGVmdFBhZCAoc3RyLCBuKSB7XG4gIHN0ciA9IHN0ciArICcnXG4gIHdoaWxlIChzdHIubGVuZ3RoIDwgbikge1xuICAgIHN0ciA9ICcgJyArIHN0clxuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gU2hhZGVyRmlsZSAoKSB7XG4gIHRoaXMubmFtZSA9ICd1bmtub3duJ1xuICB0aGlzLmxpbmVzID0gW11cbiAgdGhpcy5pbmRleCA9IHt9XG4gIHRoaXMuaGFzRXJyb3JzID0gZmFsc2Vcbn1cblxuZnVuY3Rpb24gU2hhZGVyTGluZSAobnVtYmVyLCBsaW5lKSB7XG4gIHRoaXMubnVtYmVyID0gbnVtYmVyXG4gIHRoaXMubGluZSA9IGxpbmVcbiAgdGhpcy5lcnJvcnMgPSBbXVxufVxuXG5mdW5jdGlvbiBTaGFkZXJFcnJvciAoZmlsZU51bWJlciwgbGluZU51bWJlciwgbWVzc2FnZSkge1xuICB0aGlzLmZpbGUgPSBmaWxlTnVtYmVyXG4gIHRoaXMubGluZSA9IGxpbmVOdW1iZXJcbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZVxufVxuXG5mdW5jdGlvbiBndWVzc0NvbW1hbmQgKCkge1xuICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoKVxuICB2YXIgc3RhY2sgPSAoZXJyb3Iuc3RhY2sgfHwgZXJyb3IpLnRvU3RyaW5nKClcbiAgdmFyIHBhdCA9IC9jb21waWxlUHJvY2VkdXJlLipcXG5cXHMqYXQuKlxcKCguKilcXCkvLmV4ZWMoc3RhY2spXG4gIGlmIChwYXQpIHtcbiAgICByZXR1cm4gcGF0WzFdXG4gIH1cbiAgdmFyIHBhdDIgPSAvY29tcGlsZVByb2NlZHVyZS4qXFxuXFxzKmF0XFxzKyguKikoXFxufCQpLy5leGVjKHN0YWNrKVxuICBpZiAocGF0Mikge1xuICAgIHJldHVybiBwYXQyWzFdXG4gIH1cbiAgcmV0dXJuICd1bmtub3duJ1xufVxuXG5mdW5jdGlvbiBndWVzc0NhbGxTaXRlICgpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKClcbiAgdmFyIHN0YWNrID0gKGVycm9yLnN0YWNrIHx8IGVycm9yKS50b1N0cmluZygpXG4gIHZhciBwYXQgPSAvYXQgUkVHTENvbW1hbmQuKlxcblxccythdC4qXFwoKC4qKVxcKS8uZXhlYyhzdGFjaylcbiAgaWYgKHBhdCkge1xuICAgIHJldHVybiBwYXRbMV1cbiAgfVxuICB2YXIgcGF0MiA9IC9hdCBSRUdMQ29tbWFuZC4qXFxuXFxzK2F0XFxzKyguKilcXG4vLmV4ZWMoc3RhY2spXG4gIGlmIChwYXQyKSB7XG4gICAgcmV0dXJuIHBhdDJbMV1cbiAgfVxuICByZXR1cm4gJ3Vua25vd24nXG59XG5cbmZ1bmN0aW9uIHBhcnNlU291cmNlIChzb3VyY2UsIGNvbW1hbmQpIHtcbiAgdmFyIGxpbmVzID0gc291cmNlLnNwbGl0KCdcXG4nKVxuICB2YXIgbGluZU51bWJlciA9IDFcbiAgdmFyIGZpbGVOdW1iZXIgPSAwXG4gIHZhciBmaWxlcyA9IHtcbiAgICB1bmtub3duOiBuZXcgU2hhZGVyRmlsZSgpLFxuICAgIDA6IG5ldyBTaGFkZXJGaWxlKClcbiAgfVxuICBmaWxlcy51bmtub3duLm5hbWUgPSBmaWxlc1swXS5uYW1lID0gY29tbWFuZCB8fCBndWVzc0NvbW1hbmQoKVxuICBmaWxlcy51bmtub3duLmxpbmVzLnB1c2gobmV3IFNoYWRlckxpbmUoMCwgJycpKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGxpbmUgPSBsaW5lc1tpXVxuICAgIHZhciBwYXJ0cyA9IC9eXFxzKiNcXHMqKFxcdyspXFxzKyguKylcXHMqJC8uZXhlYyhsaW5lKVxuICAgIGlmIChwYXJ0cykge1xuICAgICAgc3dpdGNoIChwYXJ0c1sxXSkge1xuICAgICAgICBjYXNlICdsaW5lJzpcbiAgICAgICAgICB2YXIgbGluZU51bWJlckluZm8gPSAvKFxcZCspKFxccytcXGQrKT8vLmV4ZWMocGFydHNbMl0pXG4gICAgICAgICAgaWYgKGxpbmVOdW1iZXJJbmZvKSB7XG4gICAgICAgICAgICBsaW5lTnVtYmVyID0gbGluZU51bWJlckluZm9bMV0gfCAwXG4gICAgICAgICAgICBpZiAobGluZU51bWJlckluZm9bMl0pIHtcbiAgICAgICAgICAgICAgZmlsZU51bWJlciA9IGxpbmVOdW1iZXJJbmZvWzJdIHwgMFxuICAgICAgICAgICAgICBpZiAoIShmaWxlTnVtYmVyIGluIGZpbGVzKSkge1xuICAgICAgICAgICAgICAgIGZpbGVzW2ZpbGVOdW1iZXJdID0gbmV3IFNoYWRlckZpbGUoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2RlZmluZSc6XG4gICAgICAgICAgdmFyIG5hbWVJbmZvID0gL1NIQURFUl9OQU1FKF9CNjQpP1xccysoLiopJC8uZXhlYyhwYXJ0c1syXSlcbiAgICAgICAgICBpZiAobmFtZUluZm8pIHtcbiAgICAgICAgICAgIGZpbGVzW2ZpbGVOdW1iZXJdLm5hbWUgPSAobmFtZUluZm9bMV1cbiAgICAgICAgICAgICAgPyBkZWNvZGVCNjQobmFtZUluZm9bMl0pXG4gICAgICAgICAgICAgIDogbmFtZUluZm9bMl0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIGZpbGVzW2ZpbGVOdW1iZXJdLmxpbmVzLnB1c2gobmV3IFNoYWRlckxpbmUobGluZU51bWJlcisrLCBsaW5lKSlcbiAgfVxuICBPYmplY3Qua2V5cyhmaWxlcykuZm9yRWFjaChmdW5jdGlvbiAoZmlsZU51bWJlcikge1xuICAgIHZhciBmaWxlID0gZmlsZXNbZmlsZU51bWJlcl1cbiAgICBmaWxlLmxpbmVzLmZvckVhY2goZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIGZpbGUuaW5kZXhbbGluZS5udW1iZXJdID0gbGluZVxuICAgIH0pXG4gIH0pXG4gIHJldHVybiBmaWxlc1xufVxuXG5mdW5jdGlvbiBwYXJzZUVycm9yTG9nIChlcnJMb2cpIHtcbiAgdmFyIHJlc3VsdCA9IFtdXG4gIGVyckxvZy5zcGxpdCgnXFxuJykuZm9yRWFjaChmdW5jdGlvbiAoZXJyTXNnKSB7XG4gICAgaWYgKGVyck1zZy5sZW5ndGggPCA1KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdmFyIHBhcnRzID0gL15FUlJPUjpcXHMrKFxcZCspOihcXGQrKTpcXHMqKC4qKSQvLmV4ZWMoZXJyTXNnKVxuICAgIGlmIChwYXJ0cykge1xuICAgICAgcmVzdWx0LnB1c2gobmV3IFNoYWRlckVycm9yKFxuICAgICAgICBwYXJ0c1sxXSB8IDAsXG4gICAgICAgIHBhcnRzWzJdIHwgMCxcbiAgICAgICAgcGFydHNbM10udHJpbSgpKSlcbiAgICB9IGVsc2UgaWYgKGVyck1zZy5sZW5ndGggPiAwKSB7XG4gICAgICByZXN1bHQucHVzaChuZXcgU2hhZGVyRXJyb3IoJ3Vua25vd24nLCAwLCBlcnJNc2cpKVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBhbm5vdGF0ZUZpbGVzIChmaWxlcywgZXJyb3JzKSB7XG4gIGVycm9ycy5mb3JFYWNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgIHZhciBmaWxlID0gZmlsZXNbZXJyb3IuZmlsZV1cbiAgICBpZiAoZmlsZSkge1xuICAgICAgdmFyIGxpbmUgPSBmaWxlLmluZGV4W2Vycm9yLmxpbmVdXG4gICAgICBpZiAobGluZSkge1xuICAgICAgICBsaW5lLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgICBmaWxlLmhhc0Vycm9ycyA9IHRydWVcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICAgIGZpbGVzLnVua25vd24uaGFzRXJyb3JzID0gdHJ1ZVxuICAgIGZpbGVzLnVua25vd24ubGluZXNbMF0uZXJyb3JzLnB1c2goZXJyb3IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNoZWNrU2hhZGVyRXJyb3IgKGdsLCBzaGFkZXIsIHNvdXJjZSwgdHlwZSwgY29tbWFuZCkge1xuICBpZiAoIWdsLmdldFNoYWRlclBhcmFtZXRlcihzaGFkZXIsIGdsLkNPTVBJTEVfU1RBVFVTKSkge1xuICAgIHZhciBlcnJMb2cgPSBnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcilcbiAgICB2YXIgdHlwZU5hbWUgPSB0eXBlID09PSBnbC5GUkFHTUVOVF9TSEFERVIgPyAnZnJhZ21lbnQnIDogJ3ZlcnRleCdcbiAgICBjaGVja0NvbW1hbmRUeXBlKHNvdXJjZSwgJ3N0cmluZycsIHR5cGVOYW1lICsgJyBzaGFkZXIgc291cmNlIG11c3QgYmUgYSBzdHJpbmcnLCBjb21tYW5kKVxuICAgIHZhciBmaWxlcyA9IHBhcnNlU291cmNlKHNvdXJjZSwgY29tbWFuZClcbiAgICB2YXIgZXJyb3JzID0gcGFyc2VFcnJvckxvZyhlcnJMb2cpXG4gICAgYW5ub3RhdGVGaWxlcyhmaWxlcywgZXJyb3JzKVxuXG4gICAgT2JqZWN0LmtleXMoZmlsZXMpLmZvckVhY2goZnVuY3Rpb24gKGZpbGVOdW1iZXIpIHtcbiAgICAgIHZhciBmaWxlID0gZmlsZXNbZmlsZU51bWJlcl1cbiAgICAgIGlmICghZmlsZS5oYXNFcnJvcnMpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHZhciBzdHJpbmdzID0gWycnXVxuICAgICAgdmFyIHN0eWxlcyA9IFsnJ11cblxuICAgICAgZnVuY3Rpb24gcHVzaCAoc3RyLCBzdHlsZSkge1xuICAgICAgICBzdHJpbmdzLnB1c2goc3RyKVxuICAgICAgICBzdHlsZXMucHVzaChzdHlsZSB8fCAnJylcbiAgICAgIH1cblxuICAgICAgcHVzaCgnZmlsZSBudW1iZXIgJyArIGZpbGVOdW1iZXIgKyAnOiAnICsgZmlsZS5uYW1lICsgJ1xcbicsICdjb2xvcjpyZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtmb250LXdlaWdodDpib2xkJylcblxuICAgICAgZmlsZS5saW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIGlmIChsaW5lLmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcHVzaChsZWZ0UGFkKGxpbmUubnVtYmVyLCA0KSArICd8ICAnLCAnYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3c7IGZvbnQtd2VpZ2h0OmJvbGQnKVxuICAgICAgICAgIHB1c2gobGluZS5saW5lICsgZW5kbCwgJ2NvbG9yOnJlZDsgYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3c7IGZvbnQtd2VpZ2h0OmJvbGQnKVxuXG4gICAgICAgICAgLy8gdHJ5IHRvIGd1ZXNzIHRva2VuXG4gICAgICAgICAgdmFyIG9mZnNldCA9IDBcbiAgICAgICAgICBsaW5lLmVycm9ycy5mb3JFYWNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlXG4gICAgICAgICAgICB2YXIgdG9rZW4gPSAvXlxccyonKC4qKSdcXHMqOlxccyooLiopJC8uZXhlYyhtZXNzYWdlKVxuICAgICAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICAgIHZhciB0b2tlblBhdCA9IHRva2VuWzFdXG4gICAgICAgICAgICAgIG1lc3NhZ2UgPSB0b2tlblsyXVxuICAgICAgICAgICAgICBzd2l0Y2ggKHRva2VuUGF0KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnYXNzaWduJzpcbiAgICAgICAgICAgICAgICAgIHRva2VuUGF0ID0gJz0nXG4gICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9mZnNldCA9IE1hdGgubWF4KGxpbmUubGluZS5pbmRleE9mKHRva2VuUGF0LCBvZmZzZXQpLCAwKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb2Zmc2V0ID0gMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwdXNoKGxlZnRQYWQoJ3wgJywgNikpXG4gICAgICAgICAgICBwdXNoKGxlZnRQYWQoJ15eXicsIG9mZnNldCArIDMpICsgZW5kbCwgJ2ZvbnQtd2VpZ2h0OmJvbGQnKVxuICAgICAgICAgICAgcHVzaChsZWZ0UGFkKCd8ICcsIDYpKVxuICAgICAgICAgICAgcHVzaChtZXNzYWdlICsgZW5kbCwgJ2ZvbnQtd2VpZ2h0OmJvbGQnKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcHVzaChsZWZ0UGFkKCd8ICcsIDYpICsgZW5kbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwdXNoKGxlZnRQYWQobGluZS5udW1iZXIsIDQpICsgJ3wgICcpXG4gICAgICAgICAgcHVzaChsaW5lLmxpbmUgKyBlbmRsLCAnY29sb3I6cmVkJylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmICF3aW5kb3cuY2hyb21lKSB7XG4gICAgICAgIHN0eWxlc1swXSA9IHN0cmluZ3Muam9pbignJWMnKVxuICAgICAgICBjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBzdHlsZXMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhzdHJpbmdzLmpvaW4oJycpKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjaGVjay5yYWlzZSgnRXJyb3IgY29tcGlsaW5nICcgKyB0eXBlTmFtZSArICcgc2hhZGVyLCAnICsgZmlsZXNbMF0ubmFtZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0xpbmtFcnJvciAoZ2wsIHByb2dyYW0sIGZyYWdTaGFkZXIsIHZlcnRTaGFkZXIsIGNvbW1hbmQpIHtcbiAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSkge1xuICAgIHZhciBlcnJMb2cgPSBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKVxuICAgIHZhciBmcmFnUGFyc2UgPSBwYXJzZVNvdXJjZShmcmFnU2hhZGVyLCBjb21tYW5kKVxuICAgIHZhciB2ZXJ0UGFyc2UgPSBwYXJzZVNvdXJjZSh2ZXJ0U2hhZGVyLCBjb21tYW5kKVxuXG4gICAgdmFyIGhlYWRlciA9ICdFcnJvciBsaW5raW5nIHByb2dyYW0gd2l0aCB2ZXJ0ZXggc2hhZGVyLCBcIicgK1xuICAgICAgdmVydFBhcnNlWzBdLm5hbWUgKyAnXCIsIGFuZCBmcmFnbWVudCBzaGFkZXIgXCInICsgZnJhZ1BhcnNlWzBdLm5hbWUgKyAnXCInXG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5sb2coJyVjJyArIGhlYWRlciArIGVuZGwgKyAnJWMnICsgZXJyTG9nLFxuICAgICAgICAnY29sb3I6cmVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Zm9udC13ZWlnaHQ6Ym9sZCcsXG4gICAgICAgICdjb2xvcjpyZWQnKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhoZWFkZXIgKyBlbmRsICsgZXJyTG9nKVxuICAgIH1cbiAgICBjaGVjay5yYWlzZShoZWFkZXIpXG4gIH1cbn1cblxuZnVuY3Rpb24gc2F2ZUNvbW1hbmRSZWYgKG9iamVjdCkge1xuICBvYmplY3QuX2NvbW1hbmRSZWYgPSBndWVzc0NvbW1hbmQoKVxufVxuXG5mdW5jdGlvbiBzYXZlRHJhd0NvbW1hbmRJbmZvIChvcHRzLCB1bmlmb3JtcywgYXR0cmlidXRlcywgc3RyaW5nU3RvcmUpIHtcbiAgc2F2ZUNvbW1hbmRSZWYob3B0cylcblxuICBmdW5jdGlvbiBpZCAoc3RyKSB7XG4gICAgaWYgKHN0cikge1xuICAgICAgcmV0dXJuIHN0cmluZ1N0b3JlLmlkKHN0cilcbiAgICB9XG4gICAgcmV0dXJuIDBcbiAgfVxuICBvcHRzLl9mcmFnSWQgPSBpZChvcHRzLnN0YXRpYy5mcmFnKVxuICBvcHRzLl92ZXJ0SWQgPSBpZChvcHRzLnN0YXRpYy52ZXJ0KVxuXG4gIGZ1bmN0aW9uIGFkZFByb3BzIChkaWN0LCBzZXQpIHtcbiAgICBPYmplY3Qua2V5cyhzZXQpLmZvckVhY2goZnVuY3Rpb24gKHUpIHtcbiAgICAgIGRpY3Rbc3RyaW5nU3RvcmUuaWQodSldID0gdHJ1ZVxuICAgIH0pXG4gIH1cblxuICB2YXIgdW5pZm9ybVNldCA9IG9wdHMuX3VuaWZvcm1TZXQgPSB7fVxuICBhZGRQcm9wcyh1bmlmb3JtU2V0LCB1bmlmb3Jtcy5zdGF0aWMpXG4gIGFkZFByb3BzKHVuaWZvcm1TZXQsIHVuaWZvcm1zLmR5bmFtaWMpXG5cbiAgdmFyIGF0dHJpYnV0ZVNldCA9IG9wdHMuX2F0dHJpYnV0ZVNldCA9IHt9XG4gIGFkZFByb3BzKGF0dHJpYnV0ZVNldCwgYXR0cmlidXRlcy5zdGF0aWMpXG4gIGFkZFByb3BzKGF0dHJpYnV0ZVNldCwgYXR0cmlidXRlcy5keW5hbWljKVxuXG4gIG9wdHMuX2hhc0NvdW50ID0gKFxuICAgICdjb3VudCcgaW4gb3B0cy5zdGF0aWMgfHxcbiAgICAnY291bnQnIGluIG9wdHMuZHluYW1pYyB8fFxuICAgICdlbGVtZW50cycgaW4gb3B0cy5zdGF0aWMgfHxcbiAgICAnZWxlbWVudHMnIGluIG9wdHMuZHluYW1pYylcbn1cblxuZnVuY3Rpb24gY29tbWFuZFJhaXNlIChtZXNzYWdlLCBjb21tYW5kKSB7XG4gIHZhciBjYWxsU2l0ZSA9IGd1ZXNzQ2FsbFNpdGUoKVxuICByYWlzZShtZXNzYWdlICtcbiAgICAnIGluIGNvbW1hbmQgJyArIChjb21tYW5kIHx8IGd1ZXNzQ29tbWFuZCgpKSArXG4gICAgKGNhbGxTaXRlID09PSAndW5rbm93bicgPyAnJyA6ICcgY2FsbGVkIGZyb20gJyArIGNhbGxTaXRlKSlcbn1cblxuZnVuY3Rpb24gY2hlY2tDb21tYW5kIChwcmVkLCBtZXNzYWdlLCBjb21tYW5kKSB7XG4gIGlmICghcHJlZCkge1xuICAgIGNvbW1hbmRSYWlzZShtZXNzYWdlLCBjb21tYW5kIHx8IGd1ZXNzQ29tbWFuZCgpKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrUGFyYW1ldGVyQ29tbWFuZCAocGFyYW0sIHBvc3NpYmlsaXRpZXMsIG1lc3NhZ2UsIGNvbW1hbmQpIHtcbiAgaWYgKCEocGFyYW0gaW4gcG9zc2liaWxpdGllcykpIHtcbiAgICBjb21tYW5kUmFpc2UoXG4gICAgICAndW5rbm93biBwYXJhbWV0ZXIgKCcgKyBwYXJhbSArICcpJyArIGVuY29sb24obWVzc2FnZSkgK1xuICAgICAgJy4gcG9zc2libGUgdmFsdWVzOiAnICsgT2JqZWN0LmtleXMocG9zc2liaWxpdGllcykuam9pbigpLFxuICAgICAgY29tbWFuZCB8fCBndWVzc0NvbW1hbmQoKSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0NvbW1hbmRUeXBlICh2YWx1ZSwgdHlwZSwgbWVzc2FnZSwgY29tbWFuZCkge1xuICBpZiAoIXN0YW5kYXJkVHlwZUVoKHZhbHVlLCB0eXBlKSkge1xuICAgIGNvbW1hbmRSYWlzZShcbiAgICAgICdpbnZhbGlkIHBhcmFtZXRlciB0eXBlJyArIGVuY29sb24obWVzc2FnZSkgK1xuICAgICAgJy4gZXhwZWN0ZWQgJyArIHR5cGUgKyAnLCBnb3QgJyArICh0eXBlb2YgdmFsdWUpLFxuICAgICAgY29tbWFuZCB8fCBndWVzc0NvbW1hbmQoKSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja09wdGlvbmFsIChibG9jaykge1xuICBibG9jaygpXG59XG5cbmZ1bmN0aW9uIGNoZWNrRnJhbWVidWZmZXJGb3JtYXQgKGF0dGFjaG1lbnQsIHRleEZvcm1hdHMsIHJiRm9ybWF0cykge1xuICBpZiAoYXR0YWNobWVudC50ZXh0dXJlKSB7XG4gICAgY2hlY2tPbmVPZihcbiAgICAgIGF0dGFjaG1lbnQudGV4dHVyZS5fdGV4dHVyZS5pbnRlcm5hbGZvcm1hdCxcbiAgICAgIHRleEZvcm1hdHMsXG4gICAgICAndW5zdXBwb3J0ZWQgdGV4dHVyZSBmb3JtYXQgZm9yIGF0dGFjaG1lbnQnKVxuICB9IGVsc2Uge1xuICAgIGNoZWNrT25lT2YoXG4gICAgICBhdHRhY2htZW50LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmZvcm1hdCxcbiAgICAgIHJiRm9ybWF0cyxcbiAgICAgICd1bnN1cHBvcnRlZCByZW5kZXJidWZmZXIgZm9ybWF0IGZvciBhdHRhY2htZW50JylcbiAgfVxufVxuXG52YXIgR0xfQ0xBTVBfVE9fRURHRSA9IDB4ODEyRlxuXG52YXIgR0xfTkVBUkVTVCA9IDB4MjYwMFxudmFyIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QgPSAweDI3MDBcbnZhciBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1QgPSAweDI3MDFcbnZhciBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVIgPSAweDI3MDJcbnZhciBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUiA9IDB4MjcwM1xuXG52YXIgR0xfQllURSA9IDUxMjBcbnZhciBHTF9VTlNJR05FRF9CWVRFID0gNTEyMVxudmFyIEdMX1NIT1JUID0gNTEyMlxudmFyIEdMX1VOU0lHTkVEX1NIT1JUID0gNTEyM1xudmFyIEdMX0lOVCA9IDUxMjRcbnZhciBHTF9VTlNJR05FRF9JTlQgPSA1MTI1XG52YXIgR0xfRkxPQVQgPSA1MTI2XG5cbnZhciBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80ID0gMHg4MDMzXG52YXIgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSA9IDB4ODAzNFxudmFyIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81ID0gMHg4MzYzXG52YXIgR0xfVU5TSUdORURfSU5UXzI0XzhfV0VCR0wgPSAweDg0RkFcblxudmFyIEdMX0hBTEZfRkxPQVRfT0VTID0gMHg4RDYxXG5cbnZhciBUWVBFX1NJWkUgPSB7fVxuXG5UWVBFX1NJWkVbR0xfQllURV0gPVxuVFlQRV9TSVpFW0dMX1VOU0lHTkVEX0JZVEVdID0gMVxuXG5UWVBFX1NJWkVbR0xfU0hPUlRdID1cblRZUEVfU0laRVtHTF9VTlNJR05FRF9TSE9SVF0gPVxuVFlQRV9TSVpFW0dMX0hBTEZfRkxPQVRfT0VTXSA9XG5UWVBFX1NJWkVbR0xfVU5TSUdORURfU0hPUlRfNV82XzVdID1cblRZUEVfU0laRVtHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80XSA9XG5UWVBFX1NJWkVbR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMV0gPSAyXG5cblRZUEVfU0laRVtHTF9JTlRdID1cblRZUEVfU0laRVtHTF9VTlNJR05FRF9JTlRdID1cblRZUEVfU0laRVtHTF9GTE9BVF0gPVxuVFlQRV9TSVpFW0dMX1VOU0lHTkVEX0lOVF8yNF84X1dFQkdMXSA9IDRcblxuZnVuY3Rpb24gcGl4ZWxTaXplICh0eXBlLCBjaGFubmVscykge1xuICBpZiAodHlwZSA9PT0gR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSB8fFxuICAgICAgdHlwZSA9PT0gR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCB8fFxuICAgICAgdHlwZSA9PT0gR0xfVU5TSUdORURfU0hPUlRfNV82XzUpIHtcbiAgICByZXR1cm4gMlxuICB9IGVsc2UgaWYgKHR5cGUgPT09IEdMX1VOU0lHTkVEX0lOVF8yNF84X1dFQkdMKSB7XG4gICAgcmV0dXJuIDRcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gVFlQRV9TSVpFW3R5cGVdICogY2hhbm5lbHNcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1BvdzIgKHYpIHtcbiAgcmV0dXJuICEodiAmICh2IC0gMSkpICYmICghIXYpXG59XG5cbmZ1bmN0aW9uIGNoZWNrVGV4dHVyZTJEIChpbmZvLCBtaXBEYXRhLCBsaW1pdHMpIHtcbiAgdmFyIGlcbiAgdmFyIHcgPSBtaXBEYXRhLndpZHRoXG4gIHZhciBoID0gbWlwRGF0YS5oZWlnaHRcbiAgdmFyIGMgPSBtaXBEYXRhLmNoYW5uZWxzXG5cbiAgLy8gQ2hlY2sgdGV4dHVyZSBzaGFwZVxuICBjaGVjayh3ID4gMCAmJiB3IDw9IGxpbWl0cy5tYXhUZXh0dXJlU2l6ZSAmJlxuICAgICAgICBoID4gMCAmJiBoIDw9IGxpbWl0cy5tYXhUZXh0dXJlU2l6ZSxcbiAgJ2ludmFsaWQgdGV4dHVyZSBzaGFwZScpXG5cbiAgLy8gY2hlY2sgd3JhcCBtb2RlXG4gIGlmIChpbmZvLndyYXBTICE9PSBHTF9DTEFNUF9UT19FREdFIHx8IGluZm8ud3JhcFQgIT09IEdMX0NMQU1QX1RPX0VER0UpIHtcbiAgICBjaGVjayhpc1BvdzIodykgJiYgaXNQb3cyKGgpLFxuICAgICAgJ2luY29tcGF0aWJsZSB3cmFwIG1vZGUgZm9yIHRleHR1cmUsIGJvdGggd2lkdGggYW5kIGhlaWdodCBtdXN0IGJlIHBvd2VyIG9mIDInKVxuICB9XG5cbiAgaWYgKG1pcERhdGEubWlwbWFzayA9PT0gMSkge1xuICAgIGlmICh3ICE9PSAxICYmIGggIT09IDEpIHtcbiAgICAgIGNoZWNrKFxuICAgICAgICBpbmZvLm1pbkZpbHRlciAhPT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCAmJlxuICAgICAgICBpbmZvLm1pbkZpbHRlciAhPT0gR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSICYmXG4gICAgICAgIGluZm8ubWluRmlsdGVyICE9PSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1QgJiZcbiAgICAgICAgaW5mby5taW5GaWx0ZXIgIT09IEdMX0xJTkVBUl9NSVBNQVBfTElORUFSLFxuICAgICAgICAnbWluIGZpbHRlciByZXF1aXJlcyBtaXBtYXAnKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyB0ZXh0dXJlIG11c3QgYmUgcG93ZXIgb2YgMlxuICAgIGNoZWNrKGlzUG93Mih3KSAmJiBpc1BvdzIoaCksXG4gICAgICAndGV4dHVyZSBtdXN0IGJlIGEgc3F1YXJlIHBvd2VyIG9mIDIgdG8gc3VwcG9ydCBtaXBtYXBwaW5nJylcbiAgICBjaGVjayhtaXBEYXRhLm1pcG1hc2sgPT09ICh3IDw8IDEpIC0gMSxcbiAgICAgICdtaXNzaW5nIG9yIGluY29tcGxldGUgbWlwbWFwIGRhdGEnKVxuICB9XG5cbiAgaWYgKG1pcERhdGEudHlwZSA9PT0gR0xfRkxPQVQpIHtcbiAgICBpZiAobGltaXRzLmV4dGVuc2lvbnMuaW5kZXhPZignb2VzX3RleHR1cmVfZmxvYXRfbGluZWFyJykgPCAwKSB7XG4gICAgICBjaGVjayhpbmZvLm1pbkZpbHRlciA9PT0gR0xfTkVBUkVTVCAmJiBpbmZvLm1hZ0ZpbHRlciA9PT0gR0xfTkVBUkVTVCxcbiAgICAgICAgJ2ZpbHRlciBub3Qgc3VwcG9ydGVkLCBtdXN0IGVuYWJsZSBvZXNfdGV4dHVyZV9mbG9hdF9saW5lYXInKVxuICAgIH1cbiAgICBjaGVjayghaW5mby5nZW5NaXBtYXBzLFxuICAgICAgJ21pcG1hcCBnZW5lcmF0aW9uIG5vdCBzdXBwb3J0ZWQgd2l0aCBmbG9hdCB0ZXh0dXJlcycpXG4gIH1cblxuICAvLyBjaGVjayBpbWFnZSBjb21wbGV0ZVxuICB2YXIgbWlwaW1hZ2VzID0gbWlwRGF0YS5pbWFnZXNcbiAgZm9yIChpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICBpZiAobWlwaW1hZ2VzW2ldKSB7XG4gICAgICB2YXIgbXcgPSB3ID4+IGlcbiAgICAgIHZhciBtaCA9IGggPj4gaVxuICAgICAgY2hlY2sobWlwRGF0YS5taXBtYXNrICYgKDEgPDwgaSksICdtaXNzaW5nIG1pcG1hcCBkYXRhJylcblxuICAgICAgdmFyIGltZyA9IG1pcGltYWdlc1tpXVxuXG4gICAgICBjaGVjayhcbiAgICAgICAgaW1nLndpZHRoID09PSBtdyAmJlxuICAgICAgICBpbWcuaGVpZ2h0ID09PSBtaCxcbiAgICAgICAgJ2ludmFsaWQgc2hhcGUgZm9yIG1pcCBpbWFnZXMnKVxuXG4gICAgICBjaGVjayhcbiAgICAgICAgaW1nLmZvcm1hdCA9PT0gbWlwRGF0YS5mb3JtYXQgJiZcbiAgICAgICAgaW1nLmludGVybmFsZm9ybWF0ID09PSBtaXBEYXRhLmludGVybmFsZm9ybWF0ICYmXG4gICAgICAgIGltZy50eXBlID09PSBtaXBEYXRhLnR5cGUsXG4gICAgICAgICdpbmNvbXBhdGlibGUgdHlwZSBmb3IgbWlwIGltYWdlJylcblxuICAgICAgaWYgKGltZy5jb21wcmVzc2VkKSB7XG4gICAgICAgIC8vIFRPRE86IGNoZWNrIHNpemUgZm9yIGNvbXByZXNzZWQgaW1hZ2VzXG4gICAgICB9IGVsc2UgaWYgKGltZy5kYXRhKSB7XG4gICAgICAgIC8vIGNoZWNrKGltZy5kYXRhLmJ5dGVMZW5ndGggPT09IG13ICogbWggKlxuICAgICAgICAvLyBNYXRoLm1heChwaXhlbFNpemUoaW1nLnR5cGUsIGMpLCBpbWcudW5wYWNrQWxpZ25tZW50KSxcbiAgICAgICAgdmFyIHJvd1NpemUgPSBNYXRoLmNlaWwocGl4ZWxTaXplKGltZy50eXBlLCBjKSAqIG13IC8gaW1nLnVucGFja0FsaWdubWVudCkgKiBpbWcudW5wYWNrQWxpZ25tZW50XG4gICAgICAgIGNoZWNrKGltZy5kYXRhLmJ5dGVMZW5ndGggPT09IHJvd1NpemUgKiBtaCxcbiAgICAgICAgICAnaW52YWxpZCBkYXRhIGZvciBpbWFnZSwgYnVmZmVyIHNpemUgaXMgaW5jb25zaXN0ZW50IHdpdGggaW1hZ2UgZm9ybWF0JylcbiAgICAgIH0gZWxzZSBpZiAoaW1nLmVsZW1lbnQpIHtcbiAgICAgICAgLy8gVE9ETzogY2hlY2sgZWxlbWVudCBjYW4gYmUgbG9hZGVkXG4gICAgICB9IGVsc2UgaWYgKGltZy5jb3B5KSB7XG4gICAgICAgIC8vIFRPRE86IGNoZWNrIGNvbXBhdGlibGUgZm9ybWF0IGFuZCB0eXBlXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaW5mby5nZW5NaXBtYXBzKSB7XG4gICAgICBjaGVjaygobWlwRGF0YS5taXBtYXNrICYgKDEgPDwgaSkpID09PSAwLCAnZXh0cmEgbWlwbWFwIGRhdGEnKVxuICAgIH1cbiAgfVxuXG4gIGlmIChtaXBEYXRhLmNvbXByZXNzZWQpIHtcbiAgICBjaGVjayghaW5mby5nZW5NaXBtYXBzLFxuICAgICAgJ21pcG1hcCBnZW5lcmF0aW9uIGZvciBjb21wcmVzc2VkIGltYWdlcyBub3Qgc3VwcG9ydGVkJylcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1RleHR1cmVDdWJlICh0ZXh0dXJlLCBpbmZvLCBmYWNlcywgbGltaXRzKSB7XG4gIHZhciB3ID0gdGV4dHVyZS53aWR0aFxuICB2YXIgaCA9IHRleHR1cmUuaGVpZ2h0XG4gIHZhciBjID0gdGV4dHVyZS5jaGFubmVsc1xuXG4gIC8vIENoZWNrIHRleHR1cmUgc2hhcGVcbiAgY2hlY2soXG4gICAgdyA+IDAgJiYgdyA8PSBsaW1pdHMubWF4VGV4dHVyZVNpemUgJiYgaCA+IDAgJiYgaCA8PSBsaW1pdHMubWF4VGV4dHVyZVNpemUsXG4gICAgJ2ludmFsaWQgdGV4dHVyZSBzaGFwZScpXG4gIGNoZWNrKFxuICAgIHcgPT09IGgsXG4gICAgJ2N1YmUgbWFwIG11c3QgYmUgc3F1YXJlJylcbiAgY2hlY2soXG4gICAgaW5mby53cmFwUyA9PT0gR0xfQ0xBTVBfVE9fRURHRSAmJiBpbmZvLndyYXBUID09PSBHTF9DTEFNUF9UT19FREdFLFxuICAgICd3cmFwIG1vZGUgbm90IHN1cHBvcnRlZCBieSBjdWJlIG1hcCcpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmYWNlcy5sZW5ndGg7ICsraSkge1xuICAgIHZhciBmYWNlID0gZmFjZXNbaV1cbiAgICBjaGVjayhcbiAgICAgIGZhY2Uud2lkdGggPT09IHcgJiYgZmFjZS5oZWlnaHQgPT09IGgsXG4gICAgICAnaW5jb25zaXN0ZW50IGN1YmUgbWFwIGZhY2Ugc2hhcGUnKVxuXG4gICAgaWYgKGluZm8uZ2VuTWlwbWFwcykge1xuICAgICAgY2hlY2soIWZhY2UuY29tcHJlc3NlZCxcbiAgICAgICAgJ2NhbiBub3QgZ2VuZXJhdGUgbWlwbWFwIGZvciBjb21wcmVzc2VkIHRleHR1cmVzJylcbiAgICAgIGNoZWNrKGZhY2UubWlwbWFzayA9PT0gMSxcbiAgICAgICAgJ2NhbiBub3Qgc3BlY2lmeSBtaXBtYXBzIGFuZCBnZW5lcmF0ZSBtaXBtYXBzJylcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVE9ETzogY2hlY2sgbWlwIGFuZCBmaWx0ZXIgbW9kZVxuICAgIH1cblxuICAgIHZhciBtaXBtYXBzID0gZmFjZS5pbWFnZXNcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgIHZhciBpbWcgPSBtaXBtYXBzW2pdXG4gICAgICBpZiAoaW1nKSB7XG4gICAgICAgIHZhciBtdyA9IHcgPj4galxuICAgICAgICB2YXIgbWggPSBoID4+IGpcbiAgICAgICAgY2hlY2soZmFjZS5taXBtYXNrICYgKDEgPDwgaiksICdtaXNzaW5nIG1pcG1hcCBkYXRhJylcbiAgICAgICAgY2hlY2soXG4gICAgICAgICAgaW1nLndpZHRoID09PSBtdyAmJlxuICAgICAgICAgIGltZy5oZWlnaHQgPT09IG1oLFxuICAgICAgICAgICdpbnZhbGlkIHNoYXBlIGZvciBtaXAgaW1hZ2VzJylcbiAgICAgICAgY2hlY2soXG4gICAgICAgICAgaW1nLmZvcm1hdCA9PT0gdGV4dHVyZS5mb3JtYXQgJiZcbiAgICAgICAgICBpbWcuaW50ZXJuYWxmb3JtYXQgPT09IHRleHR1cmUuaW50ZXJuYWxmb3JtYXQgJiZcbiAgICAgICAgICBpbWcudHlwZSA9PT0gdGV4dHVyZS50eXBlLFxuICAgICAgICAgICdpbmNvbXBhdGlibGUgdHlwZSBmb3IgbWlwIGltYWdlJylcblxuICAgICAgICBpZiAoaW1nLmNvbXByZXNzZWQpIHtcbiAgICAgICAgICAvLyBUT0RPOiBjaGVjayBzaXplIGZvciBjb21wcmVzc2VkIGltYWdlc1xuICAgICAgICB9IGVsc2UgaWYgKGltZy5kYXRhKSB7XG4gICAgICAgICAgY2hlY2soaW1nLmRhdGEuYnl0ZUxlbmd0aCA9PT0gbXcgKiBtaCAqXG4gICAgICAgICAgICBNYXRoLm1heChwaXhlbFNpemUoaW1nLnR5cGUsIGMpLCBpbWcudW5wYWNrQWxpZ25tZW50KSxcbiAgICAgICAgICAnaW52YWxpZCBkYXRhIGZvciBpbWFnZSwgYnVmZmVyIHNpemUgaXMgaW5jb25zaXN0ZW50IHdpdGggaW1hZ2UgZm9ybWF0JylcbiAgICAgICAgfSBlbHNlIGlmIChpbWcuZWxlbWVudCkge1xuICAgICAgICAgIC8vIFRPRE86IGNoZWNrIGVsZW1lbnQgY2FuIGJlIGxvYWRlZFxuICAgICAgICB9IGVsc2UgaWYgKGltZy5jb3B5KSB7XG4gICAgICAgICAgLy8gVE9ETzogY2hlY2sgY29tcGF0aWJsZSBmb3JtYXQgYW5kIHR5cGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgY2hlY2skMSA9IGV4dGVuZChjaGVjaywge1xuICBvcHRpb25hbDogY2hlY2tPcHRpb25hbCxcbiAgcmFpc2U6IHJhaXNlLFxuICBjb21tYW5kUmFpc2U6IGNvbW1hbmRSYWlzZSxcbiAgY29tbWFuZDogY2hlY2tDb21tYW5kLFxuICBwYXJhbWV0ZXI6IGNoZWNrUGFyYW1ldGVyLFxuICBjb21tYW5kUGFyYW1ldGVyOiBjaGVja1BhcmFtZXRlckNvbW1hbmQsXG4gIGNvbnN0cnVjdG9yOiBjaGVja0NvbnN0cnVjdG9yLFxuICB0eXBlOiBjaGVja1R5cGVPZixcbiAgY29tbWFuZFR5cGU6IGNoZWNrQ29tbWFuZFR5cGUsXG4gIGlzVHlwZWRBcnJheTogY2hlY2tJc1R5cGVkQXJyYXksXG4gIG5uaTogY2hlY2tOb25OZWdhdGl2ZUludCxcbiAgb25lT2Y6IGNoZWNrT25lT2YsXG4gIHNoYWRlckVycm9yOiBjaGVja1NoYWRlckVycm9yLFxuICBsaW5rRXJyb3I6IGNoZWNrTGlua0Vycm9yLFxuICBjYWxsU2l0ZTogZ3Vlc3NDYWxsU2l0ZSxcbiAgc2F2ZUNvbW1hbmRSZWY6IHNhdmVDb21tYW5kUmVmLFxuICBzYXZlRHJhd0luZm86IHNhdmVEcmF3Q29tbWFuZEluZm8sXG4gIGZyYW1lYnVmZmVyRm9ybWF0OiBjaGVja0ZyYW1lYnVmZmVyRm9ybWF0LFxuICBndWVzc0NvbW1hbmQ6IGd1ZXNzQ29tbWFuZCxcbiAgdGV4dHVyZTJEOiBjaGVja1RleHR1cmUyRCxcbiAgdGV4dHVyZUN1YmU6IGNoZWNrVGV4dHVyZUN1YmVcbn0pO1xuXG52YXIgVkFSSUFCTEVfQ09VTlRFUiA9IDBcblxudmFyIERZTl9GVU5DID0gMFxudmFyIERZTl9DT05TVEFOVCA9IDVcbnZhciBEWU5fQVJSQVkgPSA2XG5cbmZ1bmN0aW9uIER5bmFtaWNWYXJpYWJsZSAodHlwZSwgZGF0YSkge1xuICB0aGlzLmlkID0gKFZBUklBQkxFX0NPVU5URVIrKylcbiAgdGhpcy50eXBlID0gdHlwZVxuICB0aGlzLmRhdGEgPSBkYXRhXG59XG5cbmZ1bmN0aW9uIGVzY2FwZVN0ciAoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXFxcXC9nLCAnXFxcXFxcXFwnKS5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJylcbn1cblxuZnVuY3Rpb24gc3BsaXRQYXJ0cyAoc3RyKSB7XG4gIGlmIChzdHIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICB2YXIgZmlyc3RDaGFyID0gc3RyLmNoYXJBdCgwKVxuICB2YXIgbGFzdENoYXIgPSBzdHIuY2hhckF0KHN0ci5sZW5ndGggLSAxKVxuXG4gIGlmIChzdHIubGVuZ3RoID4gMSAmJlxuICAgICAgZmlyc3RDaGFyID09PSBsYXN0Q2hhciAmJlxuICAgICAgKGZpcnN0Q2hhciA9PT0gJ1wiJyB8fCBmaXJzdENoYXIgPT09IFwiJ1wiKSkge1xuICAgIHJldHVybiBbJ1wiJyArIGVzY2FwZVN0cihzdHIuc3Vic3RyKDEsIHN0ci5sZW5ndGggLSAyKSkgKyAnXCInXVxuICB9XG5cbiAgdmFyIHBhcnRzID0gL1xcWyhmYWxzZXx0cnVlfG51bGx8XFxkK3wnW14nXSonfFwiW15cIl0qXCIpXFxdLy5leGVjKHN0cilcbiAgaWYgKHBhcnRzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHNwbGl0UGFydHMoc3RyLnN1YnN0cigwLCBwYXJ0cy5pbmRleCkpXG4gICAgICAgIC5jb25jYXQoc3BsaXRQYXJ0cyhwYXJ0c1sxXSkpXG4gICAgICAgIC5jb25jYXQoc3BsaXRQYXJ0cyhzdHIuc3Vic3RyKHBhcnRzLmluZGV4ICsgcGFydHNbMF0ubGVuZ3RoKSkpXG4gICAgKVxuICB9XG5cbiAgdmFyIHN1YnBhcnRzID0gc3RyLnNwbGl0KCcuJylcbiAgaWYgKHN1YnBhcnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBbJ1wiJyArIGVzY2FwZVN0cihzdHIpICsgJ1wiJ11cbiAgfVxuXG4gIHZhciByZXN1bHQgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnBhcnRzLmxlbmd0aDsgKytpKSB7XG4gICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChzcGxpdFBhcnRzKHN1YnBhcnRzW2ldKSlcbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIHRvQWNjZXNzb3JTdHJpbmcgKHN0cikge1xuICByZXR1cm4gJ1snICsgc3BsaXRQYXJ0cyhzdHIpLmpvaW4oJ11bJykgKyAnXSdcbn1cblxuZnVuY3Rpb24gZGVmaW5lRHluYW1pYyAodHlwZSwgZGF0YSkge1xuICByZXR1cm4gbmV3IER5bmFtaWNWYXJpYWJsZSh0eXBlLCB0b0FjY2Vzc29yU3RyaW5nKGRhdGEgKyAnJykpXG59XG5cbmZ1bmN0aW9uIGlzRHluYW1pYyAoeCkge1xuICByZXR1cm4gKHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nICYmICF4Ll9yZWdsVHlwZSkgfHwgKHggaW5zdGFuY2VvZiBEeW5hbWljVmFyaWFibGUpXG59XG5cbmZ1bmN0aW9uIHVuYm94ICh4LCBwYXRoKSB7XG4gIGlmICh0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBuZXcgRHluYW1pY1ZhcmlhYmxlKERZTl9GVU5DLCB4KVxuICB9IGVsc2UgaWYgKHR5cGVvZiB4ID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgeCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIG5ldyBEeW5hbWljVmFyaWFibGUoRFlOX0NPTlNUQU5ULCB4KVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICByZXR1cm4gbmV3IER5bmFtaWNWYXJpYWJsZShEWU5fQVJSQVksIHgubWFwKCh5LCBpKSA9PiB1bmJveCh5LCBwYXRoICsgJ1snICsgaSArICddJykpKVxuICB9IGVsc2UgaWYgKHggaW5zdGFuY2VvZiBEeW5hbWljVmFyaWFibGUpIHtcbiAgICByZXR1cm4geFxuICB9XG4gIGNoZWNrJDEoZmFsc2UsICdpbnZhbGlkIG9wdGlvbiB0eXBlIGluIHVuaWZvcm0gJyArIHBhdGgpXG59XG5cbnZhciBkeW5hbWljID0ge1xuICBEeW5hbWljVmFyaWFibGU6IER5bmFtaWNWYXJpYWJsZSxcbiAgZGVmaW5lOiBkZWZpbmVEeW5hbWljLFxuICBpc0R5bmFtaWM6IGlzRHluYW1pYyxcbiAgdW5ib3g6IHVuYm94LFxuICBhY2Nlc3NvcjogdG9BY2Nlc3NvclN0cmluZ1xufTtcblxuLyogZ2xvYmFscyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIGNhbmNlbEFuaW1hdGlvbkZyYW1lICovXG52YXIgcmFmID0ge1xuICBuZXh0OiB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSAnZnVuY3Rpb24nXG4gICAgPyBmdW5jdGlvbiAoY2IpIHsgcmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShjYikgfVxuICAgIDogZnVuY3Rpb24gKGNiKSB7IHJldHVybiBzZXRUaW1lb3V0KGNiLCAxNikgfSxcbiAgY2FuY2VsOiB0eXBlb2YgY2FuY2VsQW5pbWF0aW9uRnJhbWUgPT09ICdmdW5jdGlvbidcbiAgICA/IGZ1bmN0aW9uIChyYWYpIHsgcmV0dXJuIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZikgfVxuICAgIDogY2xlYXJUaW1lb3V0XG59O1xuXG4vKiBnbG9iYWxzIHBlcmZvcm1hbmNlICovXG52YXIgY2xvY2sgPSAodHlwZW9mIHBlcmZvcm1hbmNlICE9PSAndW5kZWZpbmVkJyAmJiBwZXJmb3JtYW5jZS5ub3cpXG4gICAgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBwZXJmb3JtYW5jZS5ub3coKSB9XG4gICAgOiBmdW5jdGlvbiAoKSB7IHJldHVybiArKG5ldyBEYXRlKCkpIH07XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0cmluZ1N0b3JlICgpIHtcbiAgdmFyIHN0cmluZ0lkcyA9IHsgJyc6IDAgfVxuICB2YXIgc3RyaW5nVmFsdWVzID0gWycnXVxuICByZXR1cm4ge1xuICAgIGlkOiBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gc3RyaW5nSWRzW3N0cl1cbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfVxuICAgICAgcmVzdWx0ID0gc3RyaW5nSWRzW3N0cl0gPSBzdHJpbmdWYWx1ZXMubGVuZ3RoXG4gICAgICBzdHJpbmdWYWx1ZXMucHVzaChzdHIpXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfSxcblxuICAgIHN0cjogZnVuY3Rpb24gKGlkKSB7XG4gICAgICByZXR1cm4gc3RyaW5nVmFsdWVzW2lkXVxuICAgIH1cbiAgfVxufVxuXG4vLyBDb250ZXh0IGFuZCBjYW52YXMgY3JlYXRpb24gaGVscGVyIGZ1bmN0aW9uc1xuZnVuY3Rpb24gY3JlYXRlQ2FudmFzIChlbGVtZW50LCBvbkRvbmUsIHBpeGVsUmF0aW8pIHtcbiAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXG4gIGV4dGVuZChjYW52YXMuc3R5bGUsIHtcbiAgICBib3JkZXI6IDAsXG4gICAgbWFyZ2luOiAwLFxuICAgIHBhZGRpbmc6IDAsXG4gICAgdG9wOiAwLFxuICAgIGxlZnQ6IDBcbiAgfSlcbiAgZWxlbWVudC5hcHBlbmRDaGlsZChjYW52YXMpXG5cbiAgaWYgKGVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICBjYW52YXMuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnXG4gICAgZXh0ZW5kKGVsZW1lbnQuc3R5bGUsIHtcbiAgICAgIG1hcmdpbjogMCxcbiAgICAgIHBhZGRpbmc6IDBcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzaXplICgpIHtcbiAgICB2YXIgdyA9IHdpbmRvdy5pbm5lcldpZHRoXG4gICAgdmFyIGggPSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICBpZiAoZWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgdmFyIGJvdW5kcyA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIHcgPSBib3VuZHMucmlnaHQgLSBib3VuZHMubGVmdFxuICAgICAgaCA9IGJvdW5kcy5ib3R0b20gLSBib3VuZHMudG9wXG4gICAgfVxuICAgIGNhbnZhcy53aWR0aCA9IHBpeGVsUmF0aW8gKiB3XG4gICAgY2FudmFzLmhlaWdodCA9IHBpeGVsUmF0aW8gKiBoXG4gICAgZXh0ZW5kKGNhbnZhcy5zdHlsZSwge1xuICAgICAgd2lkdGg6IHcgKyAncHgnLFxuICAgICAgaGVpZ2h0OiBoICsgJ3B4J1xuICAgIH0pXG4gIH1cblxuICB2YXIgcmVzaXplT2JzZXJ2ZXJcbiAgaWYgKGVsZW1lbnQgIT09IGRvY3VtZW50LmJvZHkgJiYgdHlwZW9mIFJlc2l6ZU9ic2VydmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gaWdub3JlICdSZXNpemVPYnNlcnZlcicgaXMgbm90IGRlZmluZWRcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzZXRUaW1lb3V0IHRvIGF2b2lkIGZsaWNrZXJcbiAgICAgIHNldFRpbWVvdXQocmVzaXplKVxuICAgIH0pXG4gICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50KVxuICB9IGVsc2Uge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCByZXNpemUsIGZhbHNlKVxuICB9XG5cbiAgZnVuY3Rpb24gb25EZXN0cm95ICgpIHtcbiAgICBpZiAocmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKVxuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgcmVzaXplKVxuICAgIH1cbiAgICBlbGVtZW50LnJlbW92ZUNoaWxkKGNhbnZhcylcbiAgfVxuXG4gIHJlc2l6ZSgpXG5cbiAgcmV0dXJuIHtcbiAgICBjYW52YXM6IGNhbnZhcyxcbiAgICBvbkRlc3Ryb3k6IG9uRGVzdHJveVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQgKGNhbnZhcywgY29udGV4dEF0dHJpYnV0ZXMpIHtcbiAgZnVuY3Rpb24gZ2V0IChuYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjYW52YXMuZ2V0Q29udGV4dChuYW1lLCBjb250ZXh0QXR0cmlidXRlcylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuICByZXR1cm4gKFxuICAgIGdldCgnd2ViZ2wnKSB8fFxuICAgIGdldCgnZXhwZXJpbWVudGFsLXdlYmdsJykgfHxcbiAgICBnZXQoJ3dlYmdsLWV4cGVyaW1lbnRhbCcpXG4gIClcbn1cblxuZnVuY3Rpb24gaXNIVE1MRWxlbWVudCAob2JqKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG9iai5ub2RlTmFtZSA9PT0gJ3N0cmluZycgJiZcbiAgICB0eXBlb2Ygb2JqLmFwcGVuZENoaWxkID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iai5nZXRCb3VuZGluZ0NsaWVudFJlY3QgPT09ICdmdW5jdGlvbidcbiAgKVxufVxuXG5mdW5jdGlvbiBpc1dlYkdMQ29udGV4dCAob2JqKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG9iai5kcmF3QXJyYXlzID09PSAnZnVuY3Rpb24nIHx8XG4gICAgdHlwZW9mIG9iai5kcmF3RWxlbWVudHMgPT09ICdmdW5jdGlvbidcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZUV4dGVuc2lvbnMgKGlucHV0KSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGlucHV0LnNwbGl0KClcbiAgfVxuICBjaGVjayQxKEFycmF5LmlzQXJyYXkoaW5wdXQpLCAnaW52YWxpZCBleHRlbnNpb24gYXJyYXknKVxuICByZXR1cm4gaW5wdXRcbn1cblxuZnVuY3Rpb24gZ2V0RWxlbWVudCAoZGVzYykge1xuICBpZiAodHlwZW9mIGRlc2MgPT09ICdzdHJpbmcnKSB7XG4gICAgY2hlY2skMSh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnLCAnbm90IHN1cHBvcnRlZCBvdXRzaWRlIG9mIERPTScpXG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZGVzYylcbiAgfVxuICByZXR1cm4gZGVzY1xufVxuXG5mdW5jdGlvbiBwYXJzZUFyZ3MgKGFyZ3NfKSB7XG4gIHZhciBhcmdzID0gYXJnc18gfHwge31cbiAgdmFyIGVsZW1lbnQsIGNvbnRhaW5lciwgY2FudmFzLCBnbFxuICB2YXIgY29udGV4dEF0dHJpYnV0ZXMgPSB7fVxuICB2YXIgZXh0ZW5zaW9ucyA9IFtdXG4gIHZhciBvcHRpb25hbEV4dGVuc2lvbnMgPSBbXVxuICB2YXIgcGl4ZWxSYXRpbyA9ICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/IDEgOiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbylcbiAgdmFyIHByb2ZpbGUgPSBmYWxzZVxuICB2YXIgb25Eb25lID0gZnVuY3Rpb24gKGVycikge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNoZWNrJDEucmFpc2UoZXJyKVxuICAgIH1cbiAgfVxuICB2YXIgb25EZXN0cm95ID0gZnVuY3Rpb24gKCkge31cbiAgaWYgKHR5cGVvZiBhcmdzID09PSAnc3RyaW5nJykge1xuICAgIGNoZWNrJDEoXG4gICAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnLFxuICAgICAgJ3NlbGVjdG9yIHF1ZXJpZXMgb25seSBzdXBwb3J0ZWQgaW4gRE9NIGVudmlyb21lbnRzJylcbiAgICBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihhcmdzKVxuICAgIGNoZWNrJDEoZWxlbWVudCwgJ2ludmFsaWQgcXVlcnkgc3RyaW5nIGZvciBlbGVtZW50JylcbiAgfSBlbHNlIGlmICh0eXBlb2YgYXJncyA9PT0gJ29iamVjdCcpIHtcbiAgICBpZiAoaXNIVE1MRWxlbWVudChhcmdzKSkge1xuICAgICAgZWxlbWVudCA9IGFyZ3NcbiAgICB9IGVsc2UgaWYgKGlzV2ViR0xDb250ZXh0KGFyZ3MpKSB7XG4gICAgICBnbCA9IGFyZ3NcbiAgICAgIGNhbnZhcyA9IGdsLmNhbnZhc1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGVjayQxLmNvbnN0cnVjdG9yKGFyZ3MpXG4gICAgICBpZiAoJ2dsJyBpbiBhcmdzKSB7XG4gICAgICAgIGdsID0gYXJncy5nbFxuICAgICAgfSBlbHNlIGlmICgnY2FudmFzJyBpbiBhcmdzKSB7XG4gICAgICAgIGNhbnZhcyA9IGdldEVsZW1lbnQoYXJncy5jYW52YXMpXG4gICAgICB9IGVsc2UgaWYgKCdjb250YWluZXInIGluIGFyZ3MpIHtcbiAgICAgICAgY29udGFpbmVyID0gZ2V0RWxlbWVudChhcmdzLmNvbnRhaW5lcilcbiAgICAgIH1cbiAgICAgIGlmICgnYXR0cmlidXRlcycgaW4gYXJncykge1xuICAgICAgICBjb250ZXh0QXR0cmlidXRlcyA9IGFyZ3MuYXR0cmlidXRlc1xuICAgICAgICBjaGVjayQxLnR5cGUoY29udGV4dEF0dHJpYnV0ZXMsICdvYmplY3QnLCAnaW52YWxpZCBjb250ZXh0IGF0dHJpYnV0ZXMnKVxuICAgICAgfVxuICAgICAgaWYgKCdleHRlbnNpb25zJyBpbiBhcmdzKSB7XG4gICAgICAgIGV4dGVuc2lvbnMgPSBwYXJzZUV4dGVuc2lvbnMoYXJncy5leHRlbnNpb25zKVxuICAgICAgfVxuICAgICAgaWYgKCdvcHRpb25hbEV4dGVuc2lvbnMnIGluIGFyZ3MpIHtcbiAgICAgICAgb3B0aW9uYWxFeHRlbnNpb25zID0gcGFyc2VFeHRlbnNpb25zKGFyZ3Mub3B0aW9uYWxFeHRlbnNpb25zKVxuICAgICAgfVxuICAgICAgaWYgKCdvbkRvbmUnIGluIGFyZ3MpIHtcbiAgICAgICAgY2hlY2skMS50eXBlKFxuICAgICAgICAgIGFyZ3Mub25Eb25lLCAnZnVuY3Rpb24nLFxuICAgICAgICAgICdpbnZhbGlkIG9yIG1pc3Npbmcgb25Eb25lIGNhbGxiYWNrJylcbiAgICAgICAgb25Eb25lID0gYXJncy5vbkRvbmVcbiAgICAgIH1cbiAgICAgIGlmICgncHJvZmlsZScgaW4gYXJncykge1xuICAgICAgICBwcm9maWxlID0gISFhcmdzLnByb2ZpbGVcbiAgICAgIH1cbiAgICAgIGlmICgncGl4ZWxSYXRpbycgaW4gYXJncykge1xuICAgICAgICBwaXhlbFJhdGlvID0gK2FyZ3MucGl4ZWxSYXRpb1xuICAgICAgICBjaGVjayQxKHBpeGVsUmF0aW8gPiAwLCAnaW52YWxpZCBwaXhlbCByYXRpbycpXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNoZWNrJDEucmFpc2UoJ2ludmFsaWQgYXJndW1lbnRzIHRvIHJlZ2wnKVxuICB9XG5cbiAgaWYgKGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnY2FudmFzJykge1xuICAgICAgY2FudmFzID0gZWxlbWVudFxuICAgIH0gZWxzZSB7XG4gICAgICBjb250YWluZXIgPSBlbGVtZW50XG4gICAgfVxuICB9XG5cbiAgaWYgKCFnbCkge1xuICAgIGlmICghY2FudmFzKSB7XG4gICAgICBjaGVjayQxKFxuICAgICAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnLFxuICAgICAgICAnbXVzdCBtYW51YWxseSBzcGVjaWZ5IHdlYmdsIGNvbnRleHQgb3V0c2lkZSBvZiBET00gZW52aXJvbm1lbnRzJylcbiAgICAgIHZhciByZXN1bHQgPSBjcmVhdGVDYW52YXMoY29udGFpbmVyIHx8IGRvY3VtZW50LmJvZHksIG9uRG9uZSwgcGl4ZWxSYXRpbylcbiAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICBjYW52YXMgPSByZXN1bHQuY2FudmFzXG4gICAgICBvbkRlc3Ryb3kgPSByZXN1bHQub25EZXN0cm95XG4gICAgfVxuICAgIC8vIHdvcmthcm91bmQgZm9yIGNocm9taXVtIGJ1ZywgcHJlbXVsdGlwbGllZCBhbHBoYSB2YWx1ZSBpcyBwbGF0Zm9ybSBkZXBlbmRlbnRcbiAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFscGhhID09PSB1bmRlZmluZWQpIGNvbnRleHRBdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRydWVcbiAgICBnbCA9IGNyZWF0ZUNvbnRleHQoY2FudmFzLCBjb250ZXh0QXR0cmlidXRlcylcbiAgfVxuXG4gIGlmICghZ2wpIHtcbiAgICBvbkRlc3Ryb3koKVxuICAgIG9uRG9uZSgnd2ViZ2wgbm90IHN1cHBvcnRlZCwgdHJ5IHVwZ3JhZGluZyB5b3VyIGJyb3dzZXIgb3IgZ3JhcGhpY3MgZHJpdmVycyBodHRwOi8vZ2V0LndlYmdsLm9yZycpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZ2w6IGdsLFxuICAgIGNhbnZhczogY2FudmFzLFxuICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgIGV4dGVuc2lvbnM6IGV4dGVuc2lvbnMsXG4gICAgb3B0aW9uYWxFeHRlbnNpb25zOiBvcHRpb25hbEV4dGVuc2lvbnMsXG4gICAgcGl4ZWxSYXRpbzogcGl4ZWxSYXRpbyxcbiAgICBwcm9maWxlOiBwcm9maWxlLFxuICAgIG9uRG9uZTogb25Eb25lLFxuICAgIG9uRGVzdHJveTogb25EZXN0cm95XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRXh0ZW5zaW9uQ2FjaGUgKGdsLCBjb25maWcpIHtcbiAgdmFyIGV4dGVuc2lvbnMgPSB7fVxuXG4gIGZ1bmN0aW9uIHRyeUxvYWRFeHRlbnNpb24gKG5hbWVfKSB7XG4gICAgY2hlY2skMS50eXBlKG5hbWVfLCAnc3RyaW5nJywgJ2V4dGVuc2lvbiBuYW1lIG11c3QgYmUgc3RyaW5nJylcbiAgICB2YXIgbmFtZSA9IG5hbWVfLnRvTG93ZXJDYXNlKClcbiAgICB2YXIgZXh0XG4gICAgdHJ5IHtcbiAgICAgIGV4dCA9IGV4dGVuc2lvbnNbbmFtZV0gPSBnbC5nZXRFeHRlbnNpb24obmFtZSlcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiAhIWV4dFxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb25maWcuZXh0ZW5zaW9ucy5sZW5ndGg7ICsraSkge1xuICAgIHZhciBuYW1lID0gY29uZmlnLmV4dGVuc2lvbnNbaV1cbiAgICBpZiAoIXRyeUxvYWRFeHRlbnNpb24obmFtZSkpIHtcbiAgICAgIGNvbmZpZy5vbkRlc3Ryb3koKVxuICAgICAgY29uZmlnLm9uRG9uZSgnXCInICsgbmFtZSArICdcIiBleHRlbnNpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBXZWJHTCBjb250ZXh0LCB0cnkgdXBncmFkaW5nIHlvdXIgc3lzdGVtIG9yIGEgZGlmZmVyZW50IGJyb3dzZXInKVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cblxuICBjb25maWcub3B0aW9uYWxFeHRlbnNpb25zLmZvckVhY2godHJ5TG9hZEV4dGVuc2lvbilcblxuICByZXR1cm4ge1xuICAgIGV4dGVuc2lvbnM6IGV4dGVuc2lvbnMsXG4gICAgcmVzdG9yZTogZnVuY3Rpb24gKCkge1xuICAgICAgT2JqZWN0LmtleXMoZXh0ZW5zaW9ucykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBpZiAoZXh0ZW5zaW9uc1tuYW1lXSAmJiAhdHJ5TG9hZEV4dGVuc2lvbihuYW1lKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignKHJlZ2wpOiBlcnJvciByZXN0b3JpbmcgZXh0ZW5zaW9uICcgKyBuYW1lKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBsb29wIChuLCBmKSB7XG4gIHZhciByZXN1bHQgPSBBcnJheShuKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkge1xuICAgIHJlc3VsdFtpXSA9IGYoaSlcbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG5cbnZhciBHTF9CWVRFJDEgPSA1MTIwXG52YXIgR0xfVU5TSUdORURfQllURSQyID0gNTEyMVxudmFyIEdMX1NIT1JUJDEgPSA1MTIyXG52YXIgR0xfVU5TSUdORURfU0hPUlQkMSA9IDUxMjNcbnZhciBHTF9JTlQkMSA9IDUxMjRcbnZhciBHTF9VTlNJR05FRF9JTlQkMSA9IDUxMjVcbnZhciBHTF9GTE9BVCQyID0gNTEyNlxuXG5mdW5jdGlvbiBuZXh0UG93MTYgKHYpIHtcbiAgZm9yICh2YXIgaSA9IDE2OyBpIDw9ICgxIDw8IDI4KTsgaSAqPSAxNikge1xuICAgIGlmICh2IDw9IGkpIHtcbiAgICAgIHJldHVybiBpXG4gICAgfVxuICB9XG4gIHJldHVybiAwXG59XG5cbmZ1bmN0aW9uIGxvZzIgKHYpIHtcbiAgdmFyIHIsIHNoaWZ0XG4gIHIgPSAodiA+IDB4RkZGRikgPDwgNFxuICB2ID4+Pj0gclxuICBzaGlmdCA9ICh2ID4gMHhGRikgPDwgM1xuICB2ID4+Pj0gc2hpZnQ7IHIgfD0gc2hpZnRcbiAgc2hpZnQgPSAodiA+IDB4RikgPDwgMlxuICB2ID4+Pj0gc2hpZnQ7IHIgfD0gc2hpZnRcbiAgc2hpZnQgPSAodiA+IDB4MykgPDwgMVxuICB2ID4+Pj0gc2hpZnQ7IHIgfD0gc2hpZnRcbiAgcmV0dXJuIHIgfCAodiA+PiAxKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVQb29sICgpIHtcbiAgdmFyIGJ1ZmZlclBvb2wgPSBsb29wKDgsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gW11cbiAgfSlcblxuICBmdW5jdGlvbiBhbGxvYyAobikge1xuICAgIHZhciBzeiA9IG5leHRQb3cxNihuKVxuICAgIHZhciBiaW4gPSBidWZmZXJQb29sW2xvZzIoc3opID4+IDJdXG4gICAgaWYgKGJpbi5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gYmluLnBvcCgpXG4gICAgfVxuICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIoc3opXG4gIH1cblxuICBmdW5jdGlvbiBmcmVlIChidWYpIHtcbiAgICBidWZmZXJQb29sW2xvZzIoYnVmLmJ5dGVMZW5ndGgpID4+IDJdLnB1c2goYnVmKVxuICB9XG5cbiAgZnVuY3Rpb24gYWxsb2NUeXBlICh0eXBlLCBuKSB7XG4gICAgdmFyIHJlc3VsdCA9IG51bGxcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgR0xfQllURSQxOlxuICAgICAgICByZXN1bHQgPSBuZXcgSW50OEFycmF5KGFsbG9jKG4pLCAwLCBuKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFJDI6XG4gICAgICAgIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGFsbG9jKG4pLCAwLCBuKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBHTF9TSE9SVCQxOlxuICAgICAgICByZXN1bHQgPSBuZXcgSW50MTZBcnJheShhbGxvYygyICogbiksIDAsIG4pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUJDE6XG4gICAgICAgIHJlc3VsdCA9IG5ldyBVaW50MTZBcnJheShhbGxvYygyICogbiksIDAsIG4pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIEdMX0lOVCQxOlxuICAgICAgICByZXN1bHQgPSBuZXcgSW50MzJBcnJheShhbGxvYyg0ICogbiksIDAsIG4pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVCQxOlxuICAgICAgICByZXN1bHQgPSBuZXcgVWludDMyQXJyYXkoYWxsb2MoNCAqIG4pLCAwLCBuKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBHTF9GTE9BVCQyOlxuICAgICAgICByZXN1bHQgPSBuZXcgRmxvYXQzMkFycmF5KGFsbG9jKDQgKiBuKSwgMCwgbilcbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIGlmIChyZXN1bHQubGVuZ3RoICE9PSBuKSB7XG4gICAgICByZXR1cm4gcmVzdWx0LnN1YmFycmF5KDAsIG4pXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGZ1bmN0aW9uIGZyZWVUeXBlIChhcnJheSkge1xuICAgIGZyZWUoYXJyYXkuYnVmZmVyKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhbGxvYzogYWxsb2MsXG4gICAgZnJlZTogZnJlZSxcbiAgICBhbGxvY1R5cGU6IGFsbG9jVHlwZSxcbiAgICBmcmVlVHlwZTogZnJlZVR5cGVcbiAgfVxufVxuXG52YXIgcG9vbCA9IGNyZWF0ZVBvb2woKVxuXG4vLyB6ZXJvIHBvb2wgZm9yIGluaXRpYWwgemVybyBkYXRhXG5wb29sLnplcm8gPSBjcmVhdGVQb29sKClcblxudmFyIEdMX1NVQlBJWEVMX0JJVFMgPSAweDBENTBcbnZhciBHTF9SRURfQklUUyA9IDB4MEQ1MlxudmFyIEdMX0dSRUVOX0JJVFMgPSAweDBENTNcbnZhciBHTF9CTFVFX0JJVFMgPSAweDBENTRcbnZhciBHTF9BTFBIQV9CSVRTID0gMHgwRDU1XG52YXIgR0xfREVQVEhfQklUUyA9IDB4MEQ1NlxudmFyIEdMX1NURU5DSUxfQklUUyA9IDB4MEQ1N1xuXG52YXIgR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFID0gMHg4NDZEXG52YXIgR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFID0gMHg4NDZFXG5cbnZhciBHTF9NQVhfVEVYVFVSRV9TSVpFID0gMHgwRDMzXG52YXIgR0xfTUFYX1ZJRVdQT1JUX0RJTVMgPSAweDBEM0FcbnZhciBHTF9NQVhfVkVSVEVYX0FUVFJJQlMgPSAweDg4NjlcbnZhciBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyA9IDB4OERGQlxudmFyIEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlMgPSAweDhERkNcbnZhciBHTF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDB4OEI0RFxudmFyIEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDB4OEI0Q1xudmFyIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMHg4ODcyXG52YXIgR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyA9IDB4OERGRFxudmFyIEdMX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPSAweDg1MUNcbnZhciBHTF9NQVhfUkVOREVSQlVGRkVSX1NJWkUgPSAweDg0RThcblxudmFyIEdMX1ZFTkRPUiA9IDB4MUYwMFxudmFyIEdMX1JFTkRFUkVSID0gMHgxRjAxXG52YXIgR0xfVkVSU0lPTiA9IDB4MUYwMlxudmFyIEdMX1NIQURJTkdfTEFOR1VBR0VfVkVSU0lPTiA9IDB4OEI4Q1xuXG52YXIgR0xfTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUID0gMHg4NEZGXG5cbnZhciBHTF9NQVhfQ09MT1JfQVRUQUNITUVOVFNfV0VCR0wgPSAweDhDREZcbnZhciBHTF9NQVhfRFJBV19CVUZGRVJTX1dFQkdMID0gMHg4ODI0XG5cbnZhciBHTF9URVhUVVJFXzJEID0gMHgwREUxXG52YXIgR0xfVEVYVFVSRV9DVUJFX01BUCA9IDB4ODUxM1xudmFyIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9IDB4ODUxNVxudmFyIEdMX1RFWFRVUkUwID0gMHg4NEMwXG52YXIgR0xfUkdCQSA9IDB4MTkwOFxudmFyIEdMX0ZMT0FUJDEgPSAweDE0MDZcbnZhciBHTF9VTlNJR05FRF9CWVRFJDEgPSAweDE0MDFcbnZhciBHTF9GUkFNRUJVRkZFUiA9IDB4OEQ0MFxudmFyIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFID0gMHg4Q0Q1XG52YXIgR0xfQ09MT1JfQVRUQUNITUVOVDAgPSAweDhDRTBcbnZhciBHTF9DT0xPUl9CVUZGRVJfQklUJDEgPSAweDQwMDBcblxudmFyIHdyYXBMaW1pdHMgPSBmdW5jdGlvbiAoZ2wsIGV4dGVuc2lvbnMpIHtcbiAgdmFyIG1heEFuaXNvdHJvcGljID0gMVxuICBpZiAoZXh0ZW5zaW9ucy5leHRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMpIHtcbiAgICBtYXhBbmlzb3Ryb3BpYyA9IGdsLmdldFBhcmFtZXRlcihHTF9NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpXG4gIH1cblxuICB2YXIgbWF4RHJhd2J1ZmZlcnMgPSAxXG4gIHZhciBtYXhDb2xvckF0dGFjaG1lbnRzID0gMVxuICBpZiAoZXh0ZW5zaW9ucy53ZWJnbF9kcmF3X2J1ZmZlcnMpIHtcbiAgICBtYXhEcmF3YnVmZmVycyA9IGdsLmdldFBhcmFtZXRlcihHTF9NQVhfRFJBV19CVUZGRVJTX1dFQkdMKVxuICAgIG1heENvbG9yQXR0YWNobWVudHMgPSBnbC5nZXRQYXJhbWV0ZXIoR0xfTUFYX0NPTE9SX0FUVEFDSE1FTlRTX1dFQkdMKVxuICB9XG5cbiAgLy8gZGV0ZWN0IGlmIHJlYWRpbmcgZmxvYXQgdGV4dHVyZXMgaXMgYXZhaWxhYmxlIChTYWZhcmkgZG9lc24ndCBzdXBwb3J0KVxuICB2YXIgcmVhZEZsb2F0ID0gISFleHRlbnNpb25zLm9lc190ZXh0dXJlX2Zsb2F0XG4gIGlmIChyZWFkRmxvYXQpIHtcbiAgICB2YXIgcmVhZEZsb2F0VGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKVxuICAgIGdsLmJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHJlYWRGbG9hdFRleHR1cmUpXG4gICAgZ2wudGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCAxLCAxLCAwLCBHTF9SR0JBLCBHTF9GTE9BVCQxLCBudWxsKVxuXG4gICAgdmFyIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKClcbiAgICBnbC5iaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGZibylcbiAgICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIHJlYWRGbG9hdFRleHR1cmUsIDApXG4gICAgZ2wuYmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbnVsbClcblxuICAgIGlmIChnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSKSAhPT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpIHJlYWRGbG9hdCA9IGZhbHNlXG5cbiAgICBlbHNlIHtcbiAgICAgIGdsLnZpZXdwb3J0KDAsIDAsIDEsIDEpXG4gICAgICBnbC5jbGVhckNvbG9yKDEuMCwgMC4wLCAwLjAsIDEuMClcbiAgICAgIGdsLmNsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQkMSlcbiAgICAgIHZhciBwaXhlbHMgPSBwb29sLmFsbG9jVHlwZShHTF9GTE9BVCQxLCA0KVxuICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCAxLCAxLCBHTF9SR0JBLCBHTF9GTE9BVCQxLCBwaXhlbHMpXG5cbiAgICAgIGlmIChnbC5nZXRFcnJvcigpKSByZWFkRmxvYXQgPSBmYWxzZVxuICAgICAgZWxzZSB7XG4gICAgICAgIGdsLmRlbGV0ZUZyYW1lYnVmZmVyKGZibylcbiAgICAgICAgZ2wuZGVsZXRlVGV4dHVyZShyZWFkRmxvYXRUZXh0dXJlKVxuXG4gICAgICAgIHJlYWRGbG9hdCA9IHBpeGVsc1swXSA9PT0gMS4wXG4gICAgICB9XG5cbiAgICAgIHBvb2wuZnJlZVR5cGUocGl4ZWxzKVxuICAgIH1cbiAgfVxuXG4gIC8vIGRldGVjdCBub24gcG93ZXIgb2YgdHdvIGN1YmUgdGV4dHVyZXMgc3VwcG9ydCAoSUUgZG9lc24ndCBzdXBwb3J0KVxuICB2YXIgaXNJRSA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmICgvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSB8fCAvVHJpZGVudFxcLy8udGVzdChuYXZpZ2F0b3IuYXBwVmVyc2lvbikgfHwgL0VkZ2UvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpXG5cbiAgdmFyIG5wb3RUZXh0dXJlQ3ViZSA9IHRydWVcblxuICBpZiAoIWlzSUUpIHtcbiAgICB2YXIgY3ViZVRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKClcbiAgICB2YXIgZGF0YSA9IHBvb2wuYWxsb2NUeXBlKEdMX1VOU0lHTkVEX0JZVEUkMSwgMzYpXG4gICAgZ2wuYWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMClcbiAgICBnbC5iaW5kVGV4dHVyZShHTF9URVhUVVJFX0NVQkVfTUFQLCBjdWJlVGV4dHVyZSlcbiAgICBnbC50ZXhJbWFnZTJEKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCwgR0xfUkdCQSwgMywgMywgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSQxLCBkYXRhKVxuICAgIHBvb2wuZnJlZVR5cGUoZGF0YSlcbiAgICBnbC5iaW5kVGV4dHVyZShHTF9URVhUVVJFX0NVQkVfTUFQLCBudWxsKVxuICAgIGdsLmRlbGV0ZVRleHR1cmUoY3ViZVRleHR1cmUpXG4gICAgbnBvdFRleHR1cmVDdWJlID0gIWdsLmdldEVycm9yKClcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLy8gZHJhd2luZyBidWZmZXIgYml0IGRlcHRoXG4gICAgY29sb3JCaXRzOiBbXG4gICAgICBnbC5nZXRQYXJhbWV0ZXIoR0xfUkVEX0JJVFMpLFxuICAgICAgZ2wuZ2V0UGFyYW1ldGVyKEdMX0dSRUVOX0JJVFMpLFxuICAgICAgZ2wuZ2V0UGFyYW1ldGVyKEdMX0JMVUVfQklUUyksXG4gICAgICBnbC5nZXRQYXJhbWV0ZXIoR0xfQUxQSEFfQklUUylcbiAgICBdLFxuICAgIGRlcHRoQml0czogZ2wuZ2V0UGFyYW1ldGVyKEdMX0RFUFRIX0JJVFMpLFxuICAgIHN0ZW5jaWxCaXRzOiBnbC5nZXRQYXJhbWV0ZXIoR0xfU1RFTkNJTF9CSVRTKSxcbiAgICBzdWJwaXhlbEJpdHM6IGdsLmdldFBhcmFtZXRlcihHTF9TVUJQSVhFTF9CSVRTKSxcblxuICAgIC8vIHN1cHBvcnRlZCBleHRlbnNpb25zXG4gICAgZXh0ZW5zaW9uczogT2JqZWN0LmtleXMoZXh0ZW5zaW9ucykuZmlsdGVyKGZ1bmN0aW9uIChleHQpIHtcbiAgICAgIHJldHVybiAhIWV4dGVuc2lvbnNbZXh0XVxuICAgIH0pLFxuXG4gICAgLy8gbWF4IGFuaXNvIHNhbXBsZXNcbiAgICBtYXhBbmlzb3Ryb3BpYzogbWF4QW5pc290cm9waWMsXG5cbiAgICAvLyBtYXggZHJhdyBidWZmZXJzXG4gICAgbWF4RHJhd2J1ZmZlcnM6IG1heERyYXdidWZmZXJzLFxuICAgIG1heENvbG9yQXR0YWNobWVudHM6IG1heENvbG9yQXR0YWNobWVudHMsXG5cbiAgICAvLyBwb2ludCBhbmQgbGluZSBzaXplIHJhbmdlc1xuICAgIHBvaW50U2l6ZURpbXM6IGdsLmdldFBhcmFtZXRlcihHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0UpLFxuICAgIGxpbmVXaWR0aERpbXM6IGdsLmdldFBhcmFtZXRlcihHTF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0UpLFxuICAgIG1heFZpZXdwb3J0RGltczogZ2wuZ2V0UGFyYW1ldGVyKEdMX01BWF9WSUVXUE9SVF9ESU1TKSxcbiAgICBtYXhDb21iaW5lZFRleHR1cmVVbml0czogZ2wuZ2V0UGFyYW1ldGVyKEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTKSxcbiAgICBtYXhDdWJlTWFwU2l6ZTogZ2wuZ2V0UGFyYW1ldGVyKEdMX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUpLFxuICAgIG1heFJlbmRlcmJ1ZmZlclNpemU6IGdsLmdldFBhcmFtZXRlcihHTF9NQVhfUkVOREVSQlVGRkVSX1NJWkUpLFxuICAgIG1heFRleHR1cmVVbml0czogZ2wuZ2V0UGFyYW1ldGVyKEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTKSxcbiAgICBtYXhUZXh0dXJlU2l6ZTogZ2wuZ2V0UGFyYW1ldGVyKEdMX01BWF9URVhUVVJFX1NJWkUpLFxuICAgIG1heEF0dHJpYnV0ZXM6IGdsLmdldFBhcmFtZXRlcihHTF9NQVhfVkVSVEVYX0FUVFJJQlMpLFxuICAgIG1heFZlcnRleFVuaWZvcm1zOiBnbC5nZXRQYXJhbWV0ZXIoR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMpLFxuICAgIG1heFZlcnRleFRleHR1cmVVbml0czogZ2wuZ2V0UGFyYW1ldGVyKEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyksXG4gICAgbWF4VmFyeWluZ1ZlY3RvcnM6IGdsLmdldFBhcmFtZXRlcihHTF9NQVhfVkFSWUlOR19WRUNUT1JTKSxcbiAgICBtYXhGcmFnbWVudFVuaWZvcm1zOiBnbC5nZXRQYXJhbWV0ZXIoR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyksXG5cbiAgICAvLyB2ZW5kb3IgaW5mb1xuICAgIGdsc2w6IGdsLmdldFBhcmFtZXRlcihHTF9TSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04pLFxuICAgIHJlbmRlcmVyOiBnbC5nZXRQYXJhbWV0ZXIoR0xfUkVOREVSRVIpLFxuICAgIHZlbmRvcjogZ2wuZ2V0UGFyYW1ldGVyKEdMX1ZFTkRPUiksXG4gICAgdmVyc2lvbjogZ2wuZ2V0UGFyYW1ldGVyKEdMX1ZFUlNJT04pLFxuXG4gICAgLy8gcXVpcmtzXG4gICAgcmVhZEZsb2F0OiByZWFkRmxvYXQsXG4gICAgbnBvdFRleHR1cmVDdWJlOiBucG90VGV4dHVyZUN1YmVcbiAgfVxufVxuXG5mdW5jdGlvbiBpc05EQXJyYXlMaWtlIChvYmopIHtcbiAgcmV0dXJuIChcbiAgICAhIW9iaiAmJlxuICAgIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmXG4gICAgQXJyYXkuaXNBcnJheShvYmouc2hhcGUpICYmXG4gICAgQXJyYXkuaXNBcnJheShvYmouc3RyaWRlKSAmJlxuICAgIHR5cGVvZiBvYmoub2Zmc2V0ID09PSAnbnVtYmVyJyAmJlxuICAgIG9iai5zaGFwZS5sZW5ndGggPT09IG9iai5zdHJpZGUubGVuZ3RoICYmXG4gICAgKEFycmF5LmlzQXJyYXkob2JqLmRhdGEpIHx8XG4gICAgICBpc1R5cGVkQXJyYXkob2JqLmRhdGEpKSlcbn1cblxudmFyIHZhbHVlcyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIG9ialtrZXldIH0pXG59XG5cbnZhciBmbGF0dGVuVXRpbHMgPSB7XG4gIHNoYXBlOiBhcnJheVNoYXBlJDEsXG4gIGZsYXR0ZW46IGZsYXR0ZW5BcnJheVxufTtcblxuZnVuY3Rpb24gZmxhdHRlbjFEIChhcnJheSwgbngsIG91dCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG54OyArK2kpIHtcbiAgICBvdXRbaV0gPSBhcnJheVtpXVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsYXR0ZW4yRCAoYXJyYXksIG54LCBueSwgb3V0KSB7XG4gIHZhciBwdHIgPSAwXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbng7ICsraSkge1xuICAgIHZhciByb3cgPSBhcnJheVtpXVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbnk7ICsraikge1xuICAgICAgb3V0W3B0cisrXSA9IHJvd1tqXVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbGF0dGVuM0QgKGFycmF5LCBueCwgbnksIG56LCBvdXQsIHB0cl8pIHtcbiAgdmFyIHB0ciA9IHB0cl9cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBueDsgKytpKSB7XG4gICAgdmFyIHJvdyA9IGFycmF5W2ldXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBueTsgKytqKSB7XG4gICAgICB2YXIgY29sID0gcm93W2pdXG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IG56OyArK2spIHtcbiAgICAgICAgb3V0W3B0cisrXSA9IGNvbFtrXVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbGF0dGVuUmVjIChhcnJheSwgc2hhcGUsIGxldmVsLCBvdXQsIHB0cikge1xuICB2YXIgc3RyaWRlID0gMVxuICBmb3IgKHZhciBpID0gbGV2ZWwgKyAxOyBpIDwgc2hhcGUubGVuZ3RoOyArK2kpIHtcbiAgICBzdHJpZGUgKj0gc2hhcGVbaV1cbiAgfVxuICB2YXIgbiA9IHNoYXBlW2xldmVsXVxuICBpZiAoc2hhcGUubGVuZ3RoIC0gbGV2ZWwgPT09IDQpIHtcbiAgICB2YXIgbnggPSBzaGFwZVtsZXZlbCArIDFdXG4gICAgdmFyIG55ID0gc2hhcGVbbGV2ZWwgKyAyXVxuICAgIHZhciBueiA9IHNoYXBlW2xldmVsICsgM11cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBmbGF0dGVuM0QoYXJyYXlbaV0sIG54LCBueSwgbnosIG91dCwgcHRyKVxuICAgICAgcHRyICs9IHN0cmlkZVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBmbGF0dGVuUmVjKGFycmF5W2ldLCBzaGFwZSwgbGV2ZWwgKyAxLCBvdXQsIHB0cilcbiAgICAgIHB0ciArPSBzdHJpZGVcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxhdHRlbkFycmF5IChhcnJheSwgc2hhcGUsIHR5cGUsIG91dF8pIHtcbiAgdmFyIHN6ID0gMVxuICBpZiAoc2hhcGUubGVuZ3RoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaGFwZS5sZW5ndGg7ICsraSkge1xuICAgICAgc3ogKj0gc2hhcGVbaV1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3ogPSAwXG4gIH1cbiAgdmFyIG91dCA9IG91dF8gfHwgcG9vbC5hbGxvY1R5cGUodHlwZSwgc3opXG4gIHN3aXRjaCAoc2hhcGUubGVuZ3RoKSB7XG4gICAgY2FzZSAwOlxuICAgICAgYnJlYWtcbiAgICBjYXNlIDE6XG4gICAgICBmbGF0dGVuMUQoYXJyYXksIHNoYXBlWzBdLCBvdXQpXG4gICAgICBicmVha1xuICAgIGNhc2UgMjpcbiAgICAgIGZsYXR0ZW4yRChhcnJheSwgc2hhcGVbMF0sIHNoYXBlWzFdLCBvdXQpXG4gICAgICBicmVha1xuICAgIGNhc2UgMzpcbiAgICAgIGZsYXR0ZW4zRChhcnJheSwgc2hhcGVbMF0sIHNoYXBlWzFdLCBzaGFwZVsyXSwgb3V0LCAwKVxuICAgICAgYnJlYWtcbiAgICBkZWZhdWx0OlxuICAgICAgZmxhdHRlblJlYyhhcnJheSwgc2hhcGUsIDAsIG91dCwgMClcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIGFycmF5U2hhcGUkMSAoYXJyYXlfKSB7XG4gIHZhciBzaGFwZSA9IFtdXG4gIGZvciAodmFyIGFycmF5ID0gYXJyYXlfOyBhcnJheS5sZW5ndGg7IGFycmF5ID0gYXJyYXlbMF0pIHtcbiAgICBzaGFwZS5wdXNoKGFycmF5Lmxlbmd0aClcbiAgfVxuICByZXR1cm4gc2hhcGVcbn1cblxudmFyIGFycmF5VHlwZXMgPSAge1xuXHRcIltvYmplY3QgSW50OEFycmF5XVwiOiA1MTIwLFxuXHRcIltvYmplY3QgSW50MTZBcnJheV1cIjogNTEyMixcblx0XCJbb2JqZWN0IEludDMyQXJyYXldXCI6IDUxMjQsXG5cdFwiW29iamVjdCBVaW50OEFycmF5XVwiOiA1MTIxLFxuXHRcIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldXCI6IDUxMjEsXG5cdFwiW29iamVjdCBVaW50MTZBcnJheV1cIjogNTEyMyxcblx0XCJbb2JqZWN0IFVpbnQzMkFycmF5XVwiOiA1MTI1LFxuXHRcIltvYmplY3QgRmxvYXQzMkFycmF5XVwiOiA1MTI2LFxuXHRcIltvYmplY3QgRmxvYXQ2NEFycmF5XVwiOiA1MTIxLFxuXHRcIltvYmplY3QgQXJyYXlCdWZmZXJdXCI6IDUxMjFcbn07XG5cbnZhciBpbnQ4ID0gNTEyMDtcbnZhciBpbnQxNiA9IDUxMjI7XG52YXIgaW50MzIgPSA1MTI0O1xudmFyIHVpbnQ4ID0gNTEyMTtcbnZhciB1aW50MTYgPSA1MTIzO1xudmFyIHVpbnQzMiA9IDUxMjU7XG52YXIgZmxvYXQgPSA1MTI2O1xudmFyIGZsb2F0MzIgPSA1MTI2O1xudmFyIGdsVHlwZXMgPSB7XG5cdGludDg6IGludDgsXG5cdGludDE2OiBpbnQxNixcblx0aW50MzI6IGludDMyLFxuXHR1aW50ODogdWludDgsXG5cdHVpbnQxNjogdWludDE2LFxuXHR1aW50MzI6IHVpbnQzMixcblx0ZmxvYXQ6IGZsb2F0LFxuXHRmbG9hdDMyOiBmbG9hdDMyXG59O1xuXG52YXIgZHluYW1pYyQxID0gMzUwNDg7XG52YXIgc3RyZWFtID0gMzUwNDA7XG52YXIgdXNhZ2VUeXBlcyA9IHtcblx0ZHluYW1pYzogZHluYW1pYyQxLFxuXHRzdHJlYW06IHN0cmVhbSxcblx0XCJzdGF0aWNcIjogMzUwNDRcbn07XG5cbnZhciBhcnJheUZsYXR0ZW4gPSBmbGF0dGVuVXRpbHMuZmxhdHRlblxudmFyIGFycmF5U2hhcGUgPSBmbGF0dGVuVXRpbHMuc2hhcGVcblxudmFyIEdMX1NUQVRJQ19EUkFXID0gMHg4OEU0XG52YXIgR0xfU1RSRUFNX0RSQVcgPSAweDg4RTBcblxudmFyIEdMX1VOU0lHTkVEX0JZVEUkMyA9IDUxMjFcbnZhciBHTF9GTE9BVCQzID0gNTEyNlxuXG52YXIgRFRZUEVTX1NJWkVTID0gW11cbkRUWVBFU19TSVpFU1s1MTIwXSA9IDEgLy8gaW50OFxuRFRZUEVTX1NJWkVTWzUxMjJdID0gMiAvLyBpbnQxNlxuRFRZUEVTX1NJWkVTWzUxMjRdID0gNCAvLyBpbnQzMlxuRFRZUEVTX1NJWkVTWzUxMjFdID0gMSAvLyB1aW50OFxuRFRZUEVTX1NJWkVTWzUxMjNdID0gMiAvLyB1aW50MTZcbkRUWVBFU19TSVpFU1s1MTI1XSA9IDQgLy8gdWludDMyXG5EVFlQRVNfU0laRVNbNTEyNl0gPSA0IC8vIGZsb2F0MzJcblxuZnVuY3Rpb24gdHlwZWRBcnJheUNvZGUgKGRhdGEpIHtcbiAgcmV0dXJuIGFycmF5VHlwZXNbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGEpXSB8IDBcbn1cblxuZnVuY3Rpb24gY29weUFycmF5IChvdXQsIGlucCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGlucC5sZW5ndGg7ICsraSkge1xuICAgIG91dFtpXSA9IGlucFtpXVxuICB9XG59XG5cbmZ1bmN0aW9uIHRyYW5zcG9zZSAoXG4gIHJlc3VsdCwgZGF0YSwgc2hhcGVYLCBzaGFwZVksIHN0cmlkZVgsIHN0cmlkZVksIG9mZnNldCkge1xuICB2YXIgcHRyID0gMFxuICBmb3IgKHZhciBpID0gMDsgaSA8IHNoYXBlWDsgKytpKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBzaGFwZVk7ICsraikge1xuICAgICAgcmVzdWx0W3B0cisrXSA9IGRhdGFbc3RyaWRlWCAqIGkgKyBzdHJpZGVZICogaiArIG9mZnNldF1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd3JhcEJ1ZmZlclN0YXRlIChnbCwgc3RhdHMsIGNvbmZpZywgZGVzdHJveUJ1ZmZlcikge1xuICB2YXIgYnVmZmVyQ291bnQgPSAwXG4gIHZhciBidWZmZXJTZXQgPSB7fVxuXG4gIGZ1bmN0aW9uIFJFR0xCdWZmZXIgKHR5cGUpIHtcbiAgICB0aGlzLmlkID0gYnVmZmVyQ291bnQrK1xuICAgIHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKClcbiAgICB0aGlzLnR5cGUgPSB0eXBlXG4gICAgdGhpcy51c2FnZSA9IEdMX1NUQVRJQ19EUkFXXG4gICAgdGhpcy5ieXRlTGVuZ3RoID0gMFxuICAgIHRoaXMuZGltZW5zaW9uID0gMVxuICAgIHRoaXMuZHR5cGUgPSBHTF9VTlNJR05FRF9CWVRFJDNcblxuICAgIHRoaXMucGVyc2lzdGVudERhdGEgPSBudWxsXG5cbiAgICBpZiAoY29uZmlnLnByb2ZpbGUpIHtcbiAgICAgIHRoaXMuc3RhdHMgPSB7IHNpemU6IDAgfVxuICAgIH1cbiAgfVxuXG4gIFJFR0xCdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgZ2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKVxuICB9XG5cbiAgUkVHTEJ1ZmZlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBkZXN0cm95KHRoaXMpXG4gIH1cblxuICB2YXIgc3RyZWFtUG9vbCA9IFtdXG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RyZWFtICh0eXBlLCBkYXRhKSB7XG4gICAgdmFyIGJ1ZmZlciA9IHN0cmVhbVBvb2wucG9wKClcbiAgICBpZiAoIWJ1ZmZlcikge1xuICAgICAgYnVmZmVyID0gbmV3IFJFR0xCdWZmZXIodHlwZSlcbiAgICB9XG4gICAgYnVmZmVyLmJpbmQoKVxuICAgIGluaXRCdWZmZXJGcm9tRGF0YShidWZmZXIsIGRhdGEsIEdMX1NUUkVBTV9EUkFXLCAwLCAxLCBmYWxzZSlcbiAgICByZXR1cm4gYnVmZmVyXG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95U3RyZWFtIChzdHJlYW0kJDEpIHtcbiAgICBzdHJlYW1Qb29sLnB1c2goc3RyZWFtJCQxKVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdEJ1ZmZlckZyb21UeXBlZEFycmF5IChidWZmZXIsIGRhdGEsIHVzYWdlKSB7XG4gICAgYnVmZmVyLmJ5dGVMZW5ndGggPSBkYXRhLmJ5dGVMZW5ndGhcbiAgICBnbC5idWZmZXJEYXRhKGJ1ZmZlci50eXBlLCBkYXRhLCB1c2FnZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRCdWZmZXJGcm9tRGF0YSAoYnVmZmVyLCBkYXRhLCB1c2FnZSwgZHR5cGUsIGRpbWVuc2lvbiwgcGVyc2lzdCkge1xuICAgIHZhciBzaGFwZVxuICAgIGJ1ZmZlci51c2FnZSA9IHVzYWdlXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIGJ1ZmZlci5kdHlwZSA9IGR0eXBlIHx8IEdMX0ZMT0FUJDNcbiAgICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIGZsYXREYXRhXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGFbMF0pKSB7XG4gICAgICAgICAgc2hhcGUgPSBhcnJheVNoYXBlKGRhdGEpXG4gICAgICAgICAgdmFyIGRpbSA9IDFcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHNoYXBlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBkaW0gKj0gc2hhcGVbaV1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnVmZmVyLmRpbWVuc2lvbiA9IGRpbVxuICAgICAgICAgIGZsYXREYXRhID0gYXJyYXlGbGF0dGVuKGRhdGEsIHNoYXBlLCBidWZmZXIuZHR5cGUpXG4gICAgICAgICAgaW5pdEJ1ZmZlckZyb21UeXBlZEFycmF5KGJ1ZmZlciwgZmxhdERhdGEsIHVzYWdlKVxuICAgICAgICAgIGlmIChwZXJzaXN0KSB7XG4gICAgICAgICAgICBidWZmZXIucGVyc2lzdGVudERhdGEgPSBmbGF0RGF0YVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb29sLmZyZWVUeXBlKGZsYXREYXRhKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YVswXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBidWZmZXIuZGltZW5zaW9uID0gZGltZW5zaW9uXG4gICAgICAgICAgdmFyIHR5cGVkRGF0YSA9IHBvb2wuYWxsb2NUeXBlKGJ1ZmZlci5kdHlwZSwgZGF0YS5sZW5ndGgpXG4gICAgICAgICAgY29weUFycmF5KHR5cGVkRGF0YSwgZGF0YSlcbiAgICAgICAgICBpbml0QnVmZmVyRnJvbVR5cGVkQXJyYXkoYnVmZmVyLCB0eXBlZERhdGEsIHVzYWdlKVxuICAgICAgICAgIGlmIChwZXJzaXN0KSB7XG4gICAgICAgICAgICBidWZmZXIucGVyc2lzdGVudERhdGEgPSB0eXBlZERhdGFcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9vbC5mcmVlVHlwZSh0eXBlZERhdGEpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzVHlwZWRBcnJheShkYXRhWzBdKSkge1xuICAgICAgICAgIGJ1ZmZlci5kaW1lbnNpb24gPSBkYXRhWzBdLmxlbmd0aFxuICAgICAgICAgIGJ1ZmZlci5kdHlwZSA9IGR0eXBlIHx8IHR5cGVkQXJyYXlDb2RlKGRhdGFbMF0pIHx8IEdMX0ZMT0FUJDNcbiAgICAgICAgICBmbGF0RGF0YSA9IGFycmF5RmxhdHRlbihcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBbZGF0YS5sZW5ndGgsIGRhdGFbMF0ubGVuZ3RoXSxcbiAgICAgICAgICAgIGJ1ZmZlci5kdHlwZSlcbiAgICAgICAgICBpbml0QnVmZmVyRnJvbVR5cGVkQXJyYXkoYnVmZmVyLCBmbGF0RGF0YSwgdXNhZ2UpXG4gICAgICAgICAgaWYgKHBlcnNpc3QpIHtcbiAgICAgICAgICAgIGJ1ZmZlci5wZXJzaXN0ZW50RGF0YSA9IGZsYXREYXRhXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvb2wuZnJlZVR5cGUoZmxhdERhdGEpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoZWNrJDEucmFpc2UoJ2ludmFsaWQgYnVmZmVyIGRhdGEnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1R5cGVkQXJyYXkoZGF0YSkpIHtcbiAgICAgIGJ1ZmZlci5kdHlwZSA9IGR0eXBlIHx8IHR5cGVkQXJyYXlDb2RlKGRhdGEpXG4gICAgICBidWZmZXIuZGltZW5zaW9uID0gZGltZW5zaW9uXG4gICAgICBpbml0QnVmZmVyRnJvbVR5cGVkQXJyYXkoYnVmZmVyLCBkYXRhLCB1c2FnZSlcbiAgICAgIGlmIChwZXJzaXN0KSB7XG4gICAgICAgIGJ1ZmZlci5wZXJzaXN0ZW50RGF0YSA9IG5ldyBVaW50OEFycmF5KG5ldyBVaW50OEFycmF5KGRhdGEuYnVmZmVyKSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzTkRBcnJheUxpa2UoZGF0YSkpIHtcbiAgICAgIHNoYXBlID0gZGF0YS5zaGFwZVxuICAgICAgdmFyIHN0cmlkZSA9IGRhdGEuc3RyaWRlXG4gICAgICB2YXIgb2Zmc2V0ID0gZGF0YS5vZmZzZXRcblxuICAgICAgdmFyIHNoYXBlWCA9IDBcbiAgICAgIHZhciBzaGFwZVkgPSAwXG4gICAgICB2YXIgc3RyaWRlWCA9IDBcbiAgICAgIHZhciBzdHJpZGVZID0gMFxuICAgICAgaWYgKHNoYXBlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBzaGFwZVggPSBzaGFwZVswXVxuICAgICAgICBzaGFwZVkgPSAxXG4gICAgICAgIHN0cmlkZVggPSBzdHJpZGVbMF1cbiAgICAgICAgc3RyaWRlWSA9IDBcbiAgICAgIH0gZWxzZSBpZiAoc2hhcGUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIHNoYXBlWCA9IHNoYXBlWzBdXG4gICAgICAgIHNoYXBlWSA9IHNoYXBlWzFdXG4gICAgICAgIHN0cmlkZVggPSBzdHJpZGVbMF1cbiAgICAgICAgc3RyaWRlWSA9IHN0cmlkZVsxXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hlY2skMS5yYWlzZSgnaW52YWxpZCBzaGFwZScpXG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlci5kdHlwZSA9IGR0eXBlIHx8IHR5cGVkQXJyYXlDb2RlKGRhdGEuZGF0YSkgfHwgR0xfRkxPQVQkM1xuICAgICAgYnVmZmVyLmRpbWVuc2lvbiA9IHNoYXBlWVxuXG4gICAgICB2YXIgdHJhbnNwb3NlRGF0YSA9IHBvb2wuYWxsb2NUeXBlKGJ1ZmZlci5kdHlwZSwgc2hhcGVYICogc2hhcGVZKVxuICAgICAgdHJhbnNwb3NlKHRyYW5zcG9zZURhdGEsXG4gICAgICAgIGRhdGEuZGF0YSxcbiAgICAgICAgc2hhcGVYLCBzaGFwZVksXG4gICAgICAgIHN0cmlkZVgsIHN0cmlkZVksXG4gICAgICAgIG9mZnNldClcbiAgICAgIGluaXRCdWZmZXJGcm9tVHlwZWRBcnJheShidWZmZXIsIHRyYW5zcG9zZURhdGEsIHVzYWdlKVxuICAgICAgaWYgKHBlcnNpc3QpIHtcbiAgICAgICAgYnVmZmVyLnBlcnNpc3RlbnREYXRhID0gdHJhbnNwb3NlRGF0YVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcG9vbC5mcmVlVHlwZSh0cmFuc3Bvc2VEYXRhKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICBidWZmZXIuZHR5cGUgPSBHTF9VTlNJR05FRF9CWVRFJDNcbiAgICAgIGJ1ZmZlci5kaW1lbnNpb24gPSBkaW1lbnNpb25cbiAgICAgIGluaXRCdWZmZXJGcm9tVHlwZWRBcnJheShidWZmZXIsIGRhdGEsIHVzYWdlKVxuICAgICAgaWYgKHBlcnNpc3QpIHtcbiAgICAgICAgYnVmZmVyLnBlcnNpc3RlbnREYXRhID0gbmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQ4QXJyYXkoZGF0YSkpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoZWNrJDEucmFpc2UoJ2ludmFsaWQgYnVmZmVyIGRhdGEnKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3kgKGJ1ZmZlcikge1xuICAgIHN0YXRzLmJ1ZmZlckNvdW50LS1cblxuICAgIC8vIHJlbW92ZSBhdHRyaWJ1dGUgbGlua1xuICAgIGRlc3Ryb3lCdWZmZXIoYnVmZmVyKVxuXG4gICAgdmFyIGhhbmRsZSA9IGJ1ZmZlci5idWZmZXJcbiAgICBjaGVjayQxKGhhbmRsZSwgJ2J1ZmZlciBtdXN0IG5vdCBiZSBkZWxldGVkIGFscmVhZHknKVxuICAgIGdsLmRlbGV0ZUJ1ZmZlcihoYW5kbGUpXG4gICAgYnVmZmVyLmJ1ZmZlciA9IG51bGxcbiAgICBkZWxldGUgYnVmZmVyU2V0W2J1ZmZlci5pZF1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAob3B0aW9ucywgdHlwZSwgZGVmZXJJbml0LCBwZXJzaXN0ZW50KSB7XG4gICAgc3RhdHMuYnVmZmVyQ291bnQrK1xuXG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBSRUdMQnVmZmVyKHR5cGUpXG4gICAgYnVmZmVyU2V0W2J1ZmZlci5pZF0gPSBidWZmZXJcblxuICAgIGZ1bmN0aW9uIHJlZ2xCdWZmZXIgKG9wdGlvbnMpIHtcbiAgICAgIHZhciB1c2FnZSA9IEdMX1NUQVRJQ19EUkFXXG4gICAgICB2YXIgZGF0YSA9IG51bGxcbiAgICAgIHZhciBieXRlTGVuZ3RoID0gMFxuICAgICAgdmFyIGR0eXBlID0gMFxuICAgICAgdmFyIGRpbWVuc2lvbiA9IDFcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpIHx8XG4gICAgICAgICAgaXNUeXBlZEFycmF5KG9wdGlvbnMpIHx8XG4gICAgICAgICAgaXNOREFycmF5TGlrZShvcHRpb25zKSB8fFxuICAgICAgICAgIG9wdGlvbnMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICBkYXRhID0gb3B0aW9uc1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgYnl0ZUxlbmd0aCA9IG9wdGlvbnMgfCAwXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgY2hlY2skMS50eXBlKFxuICAgICAgICAgIG9wdGlvbnMsICdvYmplY3QnLFxuICAgICAgICAgICdidWZmZXIgYXJndW1lbnRzIG11c3QgYmUgYW4gb2JqZWN0LCBhIG51bWJlciBvciBhbiBhcnJheScpXG5cbiAgICAgICAgaWYgKCdkYXRhJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgY2hlY2skMShcbiAgICAgICAgICAgIGRhdGEgPT09IG51bGwgfHxcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoZGF0YSkgfHxcbiAgICAgICAgICAgIGlzVHlwZWRBcnJheShkYXRhKSB8fFxuICAgICAgICAgICAgaXNOREFycmF5TGlrZShkYXRhKSxcbiAgICAgICAgICAgICdpbnZhbGlkIGRhdGEgZm9yIGJ1ZmZlcicpXG4gICAgICAgICAgZGF0YSA9IG9wdGlvbnMuZGF0YVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCd1c2FnZScgaW4gb3B0aW9ucykge1xuICAgICAgICAgIGNoZWNrJDEucGFyYW1ldGVyKG9wdGlvbnMudXNhZ2UsIHVzYWdlVHlwZXMsICdpbnZhbGlkIGJ1ZmZlciB1c2FnZScpXG4gICAgICAgICAgdXNhZ2UgPSB1c2FnZVR5cGVzW29wdGlvbnMudXNhZ2VdXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3R5cGUnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBjaGVjayQxLnBhcmFtZXRlcihvcHRpb25zLnR5cGUsIGdsVHlwZXMsICdpbnZhbGlkIGJ1ZmZlciB0eXBlJylcbiAgICAgICAgICBkdHlwZSA9IGdsVHlwZXNbb3B0aW9ucy50eXBlXVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdkaW1lbnNpb24nIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBjaGVjayQxLnR5cGUob3B0aW9ucy5kaW1lbnNpb24sICdudW1iZXInLCAnaW52YWxpZCBkaW1lbnNpb24nKVxuICAgICAgICAgIGRpbWVuc2lvbiA9IG9wdGlvbnMuZGltZW5zaW9uIHwgMFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdsZW5ndGgnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBjaGVjayQxLm5uaShieXRlTGVuZ3RoLCAnYnVmZmVyIGxlbmd0aCBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlcicpXG4gICAgICAgICAgYnl0ZUxlbmd0aCA9IG9wdGlvbnMubGVuZ3RoIHwgMFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlci5iaW5kKClcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAvLyAjNDc1XG4gICAgICAgIGlmIChieXRlTGVuZ3RoKSBnbC5idWZmZXJEYXRhKGJ1ZmZlci50eXBlLCBieXRlTGVuZ3RoLCB1c2FnZSlcbiAgICAgICAgYnVmZmVyLmR0eXBlID0gZHR5cGUgfHwgR0xfVU5TSUdORURfQllURSQzXG4gICAgICAgIGJ1ZmZlci51c2FnZSA9IHVzYWdlXG4gICAgICAgIGJ1ZmZlci5kaW1lbnNpb24gPSBkaW1lbnNpb25cbiAgICAgICAgYnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0QnVmZmVyRnJvbURhdGEoYnVmZmVyLCBkYXRhLCB1c2FnZSwgZHR5cGUsIGRpbWVuc2lvbiwgcGVyc2lzdGVudClcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICAgIGJ1ZmZlci5zdGF0cy5zaXplID0gYnVmZmVyLmJ5dGVMZW5ndGggKiBEVFlQRVNfU0laRVNbYnVmZmVyLmR0eXBlXVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVnbEJ1ZmZlclxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldFN1YkRhdGEgKGRhdGEsIG9mZnNldCkge1xuICAgICAgY2hlY2skMShvZmZzZXQgKyBkYXRhLmJ5dGVMZW5ndGggPD0gYnVmZmVyLmJ5dGVMZW5ndGgsXG4gICAgICAgICdpbnZhbGlkIGJ1ZmZlciBzdWJkYXRhIGNhbGwsIGJ1ZmZlciBpcyB0b28gc21hbGwuICcgKyAnIENhblxcJ3Qgd3JpdGUgZGF0YSBvZiBzaXplICcgKyBkYXRhLmJ5dGVMZW5ndGggKyAnIHN0YXJ0aW5nIGZyb20gb2Zmc2V0ICcgKyBvZmZzZXQgKyAnIHRvIGEgYnVmZmVyIG9mIHNpemUgJyArIGJ1ZmZlci5ieXRlTGVuZ3RoKVxuXG4gICAgICBnbC5idWZmZXJTdWJEYXRhKGJ1ZmZlci50eXBlLCBvZmZzZXQsIGRhdGEpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3ViZGF0YSAoZGF0YSwgb2Zmc2V0Xykge1xuICAgICAgdmFyIG9mZnNldCA9IChvZmZzZXRfIHx8IDApIHwgMFxuICAgICAgdmFyIHNoYXBlXG4gICAgICBidWZmZXIuYmluZCgpXG4gICAgICBpZiAoaXNUeXBlZEFycmF5KGRhdGEpIHx8IGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICBzZXRTdWJEYXRhKGRhdGEsIG9mZnNldClcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBkYXRhWzBdID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdmFyIGNvbnZlcnRlZCA9IHBvb2wuYWxsb2NUeXBlKGJ1ZmZlci5kdHlwZSwgZGF0YS5sZW5ndGgpXG4gICAgICAgICAgICBjb3B5QXJyYXkoY29udmVydGVkLCBkYXRhKVxuICAgICAgICAgICAgc2V0U3ViRGF0YShjb252ZXJ0ZWQsIG9mZnNldClcbiAgICAgICAgICAgIHBvb2wuZnJlZVR5cGUoY29udmVydGVkKVxuICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkYXRhWzBdKSB8fCBpc1R5cGVkQXJyYXkoZGF0YVswXSkpIHtcbiAgICAgICAgICAgIHNoYXBlID0gYXJyYXlTaGFwZShkYXRhKVxuICAgICAgICAgICAgdmFyIGZsYXREYXRhID0gYXJyYXlGbGF0dGVuKGRhdGEsIHNoYXBlLCBidWZmZXIuZHR5cGUpXG4gICAgICAgICAgICBzZXRTdWJEYXRhKGZsYXREYXRhLCBvZmZzZXQpXG4gICAgICAgICAgICBwb29sLmZyZWVUeXBlKGZsYXREYXRhKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGVjayQxLnJhaXNlKCdpbnZhbGlkIGJ1ZmZlciBkYXRhJylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNOREFycmF5TGlrZShkYXRhKSkge1xuICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGVcbiAgICAgICAgdmFyIHN0cmlkZSA9IGRhdGEuc3RyaWRlXG5cbiAgICAgICAgdmFyIHNoYXBlWCA9IDBcbiAgICAgICAgdmFyIHNoYXBlWSA9IDBcbiAgICAgICAgdmFyIHN0cmlkZVggPSAwXG4gICAgICAgIHZhciBzdHJpZGVZID0gMFxuICAgICAgICBpZiAoc2hhcGUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgc2hhcGVYID0gc2hhcGVbMF1cbiAgICAgICAgICBzaGFwZVkgPSAxXG4gICAgICAgICAgc3RyaWRlWCA9IHN0cmlkZVswXVxuICAgICAgICAgIHN0cmlkZVkgPSAwXG4gICAgICAgIH0gZWxzZSBpZiAoc2hhcGUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgc2hhcGVYID0gc2hhcGVbMF1cbiAgICAgICAgICBzaGFwZVkgPSBzaGFwZVsxXVxuICAgICAgICAgIHN0cmlkZVggPSBzdHJpZGVbMF1cbiAgICAgICAgICBzdHJpZGVZID0gc3RyaWRlWzFdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2hlY2skMS5yYWlzZSgnaW52YWxpZCBzaGFwZScpXG4gICAgICAgIH1cbiAgICAgICAgdmFyIGR0eXBlID0gQXJyYXkuaXNBcnJheShkYXRhLmRhdGEpXG4gICAgICAgICAgPyBidWZmZXIuZHR5cGVcbiAgICAgICAgICA6IHR5cGVkQXJyYXlDb2RlKGRhdGEuZGF0YSlcblxuICAgICAgICB2YXIgdHJhbnNwb3NlRGF0YSA9IHBvb2wuYWxsb2NUeXBlKGR0eXBlLCBzaGFwZVggKiBzaGFwZVkpXG4gICAgICAgIHRyYW5zcG9zZSh0cmFuc3Bvc2VEYXRhLFxuICAgICAgICAgIGRhdGEuZGF0YSxcbiAgICAgICAgICBzaGFwZVgsIHNoYXBlWSxcbiAgICAgICAgICBzdHJpZGVYLCBzdHJpZGVZLFxuICAgICAgICAgIGRhdGEub2Zmc2V0KVxuICAgICAgICBzZXRTdWJEYXRhKHRyYW5zcG9zZURhdGEsIG9mZnNldClcbiAgICAgICAgcG9vbC5mcmVlVHlwZSh0cmFuc3Bvc2VEYXRhKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hlY2skMS5yYWlzZSgnaW52YWxpZCBkYXRhIGZvciBidWZmZXIgc3ViZGF0YScpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVnbEJ1ZmZlclxuICAgIH1cblxuICAgIGlmICghZGVmZXJJbml0KSB7XG4gICAgICByZWdsQnVmZmVyKG9wdGlvbnMpXG4gICAgfVxuXG4gICAgcmVnbEJ1ZmZlci5fcmVnbFR5cGUgPSAnYnVmZmVyJ1xuICAgIHJlZ2xCdWZmZXIuX2J1ZmZlciA9IGJ1ZmZlclxuICAgIHJlZ2xCdWZmZXIuc3ViZGF0YSA9IHN1YmRhdGFcbiAgICBpZiAoY29uZmlnLnByb2ZpbGUpIHtcbiAgICAgIHJlZ2xCdWZmZXIuc3RhdHMgPSBidWZmZXIuc3RhdHNcbiAgICB9XG4gICAgcmVnbEJ1ZmZlci5kZXN0cm95ID0gZnVuY3Rpb24gKCkgeyBkZXN0cm95KGJ1ZmZlcikgfVxuXG4gICAgcmV0dXJuIHJlZ2xCdWZmZXJcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3RvcmVCdWZmZXJzICgpIHtcbiAgICB2YWx1ZXMoYnVmZmVyU2V0KS5mb3JFYWNoKGZ1bmN0aW9uIChidWZmZXIpIHtcbiAgICAgIGJ1ZmZlci5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKVxuICAgICAgZ2wuYmluZEJ1ZmZlcihidWZmZXIudHlwZSwgYnVmZmVyLmJ1ZmZlcilcbiAgICAgIGdsLmJ1ZmZlckRhdGEoXG4gICAgICAgIGJ1ZmZlci50eXBlLCBidWZmZXIucGVyc2lzdGVudERhdGEgfHwgYnVmZmVyLmJ5dGVMZW5ndGgsIGJ1ZmZlci51c2FnZSlcbiAgICB9KVxuICB9XG5cbiAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgc3RhdHMuZ2V0VG90YWxCdWZmZXJTaXplID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRvdGFsID0gMFxuICAgICAgLy8gVE9ETzogUmlnaHQgbm93LCB0aGUgc3RyZWFtcyBhcmUgbm90IHBhcnQgb2YgdGhlIHRvdGFsIGNvdW50LlxuICAgICAgT2JqZWN0LmtleXMoYnVmZmVyU2V0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdG90YWwgKz0gYnVmZmVyU2V0W2tleV0uc3RhdHMuc2l6ZVxuICAgICAgfSlcbiAgICAgIHJldHVybiB0b3RhbFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY3JlYXRlOiBjcmVhdGVCdWZmZXIsXG5cbiAgICBjcmVhdGVTdHJlYW06IGNyZWF0ZVN0cmVhbSxcbiAgICBkZXN0cm95U3RyZWFtOiBkZXN0cm95U3RyZWFtLFxuXG4gICAgY2xlYXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhbHVlcyhidWZmZXJTZXQpLmZvckVhY2goZGVzdHJveSlcbiAgICAgIHN0cmVhbVBvb2wuZm9yRWFjaChkZXN0cm95KVxuICAgIH0sXG5cbiAgICBnZXRCdWZmZXI6IGZ1bmN0aW9uICh3cmFwcGVyKSB7XG4gICAgICBpZiAod3JhcHBlciAmJiB3cmFwcGVyLl9idWZmZXIgaW5zdGFuY2VvZiBSRUdMQnVmZmVyKSB7XG4gICAgICAgIHJldHVybiB3cmFwcGVyLl9idWZmZXJcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIHJlc3RvcmU6IHJlc3RvcmVCdWZmZXJzLFxuXG4gICAgX2luaXRCdWZmZXI6IGluaXRCdWZmZXJGcm9tRGF0YVxuICB9XG59XG5cbnZhciBwb2ludHMgPSAwO1xudmFyIHBvaW50ID0gMDtcbnZhciBsaW5lcyA9IDE7XG52YXIgbGluZSA9IDE7XG52YXIgdHJpYW5nbGVzID0gNDtcbnZhciB0cmlhbmdsZSA9IDQ7XG52YXIgcHJpbVR5cGVzID0ge1xuXHRwb2ludHM6IHBvaW50cyxcblx0cG9pbnQ6IHBvaW50LFxuXHRsaW5lczogbGluZXMsXG5cdGxpbmU6IGxpbmUsXG5cdHRyaWFuZ2xlczogdHJpYW5nbGVzLFxuXHR0cmlhbmdsZTogdHJpYW5nbGUsXG5cdFwibGluZSBsb29wXCI6IDIsXG5cdFwibGluZSBzdHJpcFwiOiAzLFxuXHRcInRyaWFuZ2xlIHN0cmlwXCI6IDUsXG5cdFwidHJpYW5nbGUgZmFuXCI6IDZcbn07XG5cbnZhciBHTF9QT0lOVFMgPSAwXG52YXIgR0xfTElORVMgPSAxXG52YXIgR0xfVFJJQU5HTEVTID0gNFxuXG52YXIgR0xfQllURSQyID0gNTEyMFxudmFyIEdMX1VOU0lHTkVEX0JZVEUkNCA9IDUxMjFcbnZhciBHTF9TSE9SVCQyID0gNTEyMlxudmFyIEdMX1VOU0lHTkVEX1NIT1JUJDIgPSA1MTIzXG52YXIgR0xfSU5UJDIgPSA1MTI0XG52YXIgR0xfVU5TSUdORURfSU5UJDIgPSA1MTI1XG5cbnZhciBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiA9IDM0OTYzXG5cbnZhciBHTF9TVFJFQU1fRFJBVyQxID0gMHg4OEUwXG52YXIgR0xfU1RBVElDX0RSQVckMSA9IDB4ODhFNFxuXG5mdW5jdGlvbiB3cmFwRWxlbWVudHNTdGF0ZSAoZ2wsIGV4dGVuc2lvbnMsIGJ1ZmZlclN0YXRlLCBzdGF0cykge1xuICB2YXIgZWxlbWVudFNldCA9IHt9XG4gIHZhciBlbGVtZW50Q291bnQgPSAwXG5cbiAgdmFyIGVsZW1lbnRUeXBlcyA9IHtcbiAgICAndWludDgnOiBHTF9VTlNJR05FRF9CWVRFJDQsXG4gICAgJ3VpbnQxNic6IEdMX1VOU0lHTkVEX1NIT1JUJDJcbiAgfVxuXG4gIGlmIChleHRlbnNpb25zLm9lc19lbGVtZW50X2luZGV4X3VpbnQpIHtcbiAgICBlbGVtZW50VHlwZXMudWludDMyID0gR0xfVU5TSUdORURfSU5UJDJcbiAgfVxuXG4gIGZ1bmN0aW9uIFJFR0xFbGVtZW50QnVmZmVyIChidWZmZXIpIHtcbiAgICB0aGlzLmlkID0gZWxlbWVudENvdW50KytcbiAgICBlbGVtZW50U2V0W3RoaXMuaWRdID0gdGhpc1xuICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyXG4gICAgdGhpcy5wcmltVHlwZSA9IEdMX1RSSUFOR0xFU1xuICAgIHRoaXMudmVydENvdW50ID0gMFxuICAgIHRoaXMudHlwZSA9IDBcbiAgfVxuXG4gIFJFR0xFbGVtZW50QnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuYnVmZmVyLmJpbmQoKVxuICB9XG5cbiAgdmFyIGJ1ZmZlclBvb2wgPSBbXVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRTdHJlYW0gKGRhdGEpIHtcbiAgICB2YXIgcmVzdWx0ID0gYnVmZmVyUG9vbC5wb3AoKVxuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICByZXN1bHQgPSBuZXcgUkVHTEVsZW1lbnRCdWZmZXIoYnVmZmVyU3RhdGUuY3JlYXRlKFxuICAgICAgICBudWxsLFxuICAgICAgICBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUixcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgZmFsc2UpLl9idWZmZXIpXG4gICAgfVxuICAgIGluaXRFbGVtZW50cyhyZXN1bHQsIGRhdGEsIEdMX1NUUkVBTV9EUkFXJDEsIC0xLCAtMSwgMCwgMClcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95RWxlbWVudFN0cmVhbSAoZWxlbWVudHMpIHtcbiAgICBidWZmZXJQb29sLnB1c2goZWxlbWVudHMpXG4gIH1cblxuICBmdW5jdGlvbiBpbml0RWxlbWVudHMgKFxuICAgIGVsZW1lbnRzLFxuICAgIGRhdGEsXG4gICAgdXNhZ2UsXG4gICAgcHJpbSxcbiAgICBjb3VudCxcbiAgICBieXRlTGVuZ3RoLFxuICAgIHR5cGUpIHtcbiAgICBlbGVtZW50cy5idWZmZXIuYmluZCgpXG4gICAgdmFyIGR0eXBlXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHZhciBwcmVkaWN0ZWRUeXBlID0gdHlwZVxuICAgICAgaWYgKCF0eXBlICYmIChcbiAgICAgICAgIWlzVHlwZWRBcnJheShkYXRhKSB8fFxuICAgICAgICAgKGlzTkRBcnJheUxpa2UoZGF0YSkgJiYgIWlzVHlwZWRBcnJheShkYXRhLmRhdGEpKSkpIHtcbiAgICAgICAgcHJlZGljdGVkVHlwZSA9IGV4dGVuc2lvbnMub2VzX2VsZW1lbnRfaW5kZXhfdWludFxuICAgICAgICAgID8gR0xfVU5TSUdORURfSU5UJDJcbiAgICAgICAgICA6IEdMX1VOU0lHTkVEX1NIT1JUJDJcbiAgICAgIH1cbiAgICAgIGJ1ZmZlclN0YXRlLl9pbml0QnVmZmVyKFxuICAgICAgICBlbGVtZW50cy5idWZmZXIsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHVzYWdlLFxuICAgICAgICBwcmVkaWN0ZWRUeXBlLFxuICAgICAgICAzKVxuICAgIH0gZWxzZSB7XG4gICAgICBnbC5idWZmZXJEYXRhKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSLCBieXRlTGVuZ3RoLCB1c2FnZSlcbiAgICAgIGVsZW1lbnRzLmJ1ZmZlci5kdHlwZSA9IGR0eXBlIHx8IEdMX1VOU0lHTkVEX0JZVEUkNFxuICAgICAgZWxlbWVudHMuYnVmZmVyLnVzYWdlID0gdXNhZ2VcbiAgICAgIGVsZW1lbnRzLmJ1ZmZlci5kaW1lbnNpb24gPSAzXG4gICAgICBlbGVtZW50cy5idWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbiAgICB9XG5cbiAgICBkdHlwZSA9IHR5cGVcbiAgICBpZiAoIXR5cGUpIHtcbiAgICAgIHN3aXRjaCAoZWxlbWVudHMuYnVmZmVyLmR0eXBlKSB7XG4gICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURSQ0OlxuICAgICAgICBjYXNlIEdMX0JZVEUkMjpcbiAgICAgICAgICBkdHlwZSA9IEdMX1VOU0lHTkVEX0JZVEUkNFxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVCQyOlxuICAgICAgICBjYXNlIEdMX1NIT1JUJDI6XG4gICAgICAgICAgZHR5cGUgPSBHTF9VTlNJR05FRF9TSE9SVCQyXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVCQyOlxuICAgICAgICBjYXNlIEdMX0lOVCQyOlxuICAgICAgICAgIGR0eXBlID0gR0xfVU5TSUdORURfSU5UJDJcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY2hlY2skMS5yYWlzZSgndW5zdXBwb3J0ZWQgdHlwZSBmb3IgZWxlbWVudCBhcnJheScpXG4gICAgICB9XG4gICAgICBlbGVtZW50cy5idWZmZXIuZHR5cGUgPSBkdHlwZVxuICAgIH1cbiAgICBlbGVtZW50cy50eXBlID0gZHR5cGVcblxuICAgIC8vIENoZWNrIG9lc19lbGVtZW50X2luZGV4X3VpbnQgZXh0ZW5zaW9uXG4gICAgY2hlY2skMShcbiAgICAgIGR0eXBlICE9PSBHTF9VTlNJR05FRF9JTlQkMiB8fFxuICAgICAgISFleHRlbnNpb25zLm9lc19lbGVtZW50X2luZGV4X3VpbnQsXG4gICAgICAnMzIgYml0IGVsZW1lbnQgYnVmZmVycyBub3Qgc3VwcG9ydGVkLCBlbmFibGUgb2VzX2VsZW1lbnRfaW5kZXhfdWludCBmaXJzdCcpXG5cbiAgICAvLyB0cnkgdG8gZ3Vlc3MgZGVmYXVsdCBwcmltaXRpdmUgdHlwZSBhbmQgYXJndW1lbnRzXG4gICAgdmFyIHZlcnRDb3VudCA9IGNvdW50XG4gICAgaWYgKHZlcnRDb3VudCA8IDApIHtcbiAgICAgIHZlcnRDb3VudCA9IGVsZW1lbnRzLmJ1ZmZlci5ieXRlTGVuZ3RoXG4gICAgICBpZiAoZHR5cGUgPT09IEdMX1VOU0lHTkVEX1NIT1JUJDIpIHtcbiAgICAgICAgdmVydENvdW50ID4+PSAxXG4gICAgICB9IGVsc2UgaWYgKGR0eXBlID09PSBHTF9VTlNJR05FRF9JTlQkMikge1xuICAgICAgICB2ZXJ0Q291bnQgPj49IDJcbiAgICAgIH1cbiAgICB9XG4gICAgZWxlbWVudHMudmVydENvdW50ID0gdmVydENvdW50XG5cbiAgICAvLyB0cnkgdG8gZ3Vlc3MgcHJpbWl0aXZlIHR5cGUgZnJvbSBjZWxsIGRpbWVuc2lvblxuICAgIHZhciBwcmltVHlwZSA9IHByaW1cbiAgICBpZiAocHJpbSA8IDApIHtcbiAgICAgIHByaW1UeXBlID0gR0xfVFJJQU5HTEVTXG4gICAgICB2YXIgZGltZW5zaW9uID0gZWxlbWVudHMuYnVmZmVyLmRpbWVuc2lvblxuICAgICAgaWYgKGRpbWVuc2lvbiA9PT0gMSkgcHJpbVR5cGUgPSBHTF9QT0lOVFNcbiAgICAgIGlmIChkaW1lbnNpb24gPT09IDIpIHByaW1UeXBlID0gR0xfTElORVNcbiAgICAgIGlmIChkaW1lbnNpb24gPT09IDMpIHByaW1UeXBlID0gR0xfVFJJQU5HTEVTXG4gICAgfVxuICAgIGVsZW1lbnRzLnByaW1UeXBlID0gcHJpbVR5cGVcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3lFbGVtZW50cyAoZWxlbWVudHMpIHtcbiAgICBzdGF0cy5lbGVtZW50c0NvdW50LS1cblxuICAgIGNoZWNrJDEoZWxlbWVudHMuYnVmZmVyICE9PSBudWxsLCAnbXVzdCBub3QgZG91YmxlIGRlc3Ryb3kgZWxlbWVudHMnKVxuICAgIGRlbGV0ZSBlbGVtZW50U2V0W2VsZW1lbnRzLmlkXVxuICAgIGVsZW1lbnRzLmJ1ZmZlci5kZXN0cm95KClcbiAgICBlbGVtZW50cy5idWZmZXIgPSBudWxsXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50cyAob3B0aW9ucywgcGVyc2lzdGVudCkge1xuICAgIHZhciBidWZmZXIgPSBidWZmZXJTdGF0ZS5jcmVhdGUobnVsbCwgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRydWUpXG4gICAgdmFyIGVsZW1lbnRzID0gbmV3IFJFR0xFbGVtZW50QnVmZmVyKGJ1ZmZlci5fYnVmZmVyKVxuICAgIHN0YXRzLmVsZW1lbnRzQ291bnQrK1xuXG4gICAgZnVuY3Rpb24gcmVnbEVsZW1lbnRzIChvcHRpb25zKSB7XG4gICAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgYnVmZmVyKClcbiAgICAgICAgZWxlbWVudHMucHJpbVR5cGUgPSBHTF9UUklBTkdMRVNcbiAgICAgICAgZWxlbWVudHMudmVydENvdW50ID0gMFxuICAgICAgICBlbGVtZW50cy50eXBlID0gR0xfVU5TSUdORURfQllURSQ0XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnbnVtYmVyJykge1xuICAgICAgICBidWZmZXIob3B0aW9ucylcbiAgICAgICAgZWxlbWVudHMucHJpbVR5cGUgPSBHTF9UUklBTkdMRVNcbiAgICAgICAgZWxlbWVudHMudmVydENvdW50ID0gb3B0aW9ucyB8IDBcbiAgICAgICAgZWxlbWVudHMudHlwZSA9IEdMX1VOU0lHTkVEX0JZVEUkNFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGRhdGEgPSBudWxsXG4gICAgICAgIHZhciB1c2FnZSA9IEdMX1NUQVRJQ19EUkFXJDFcbiAgICAgICAgdmFyIHByaW1UeXBlID0gLTFcbiAgICAgICAgdmFyIHZlcnRDb3VudCA9IC0xXG4gICAgICAgIHZhciBieXRlTGVuZ3RoID0gMFxuICAgICAgICB2YXIgZHR5cGUgPSAwXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpIHx8XG4gICAgICAgICAgICBpc1R5cGVkQXJyYXkob3B0aW9ucykgfHxcbiAgICAgICAgICAgIGlzTkRBcnJheUxpa2Uob3B0aW9ucykpIHtcbiAgICAgICAgICBkYXRhID0gb3B0aW9uc1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoZWNrJDEudHlwZShvcHRpb25zLCAnb2JqZWN0JywgJ2ludmFsaWQgYXJndW1lbnRzIGZvciBlbGVtZW50cycpXG4gICAgICAgICAgaWYgKCdkYXRhJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBkYXRhID0gb3B0aW9ucy5kYXRhXG4gICAgICAgICAgICBjaGVjayQxKFxuICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGRhdGEpIHx8XG4gICAgICAgICAgICAgICAgaXNUeXBlZEFycmF5KGRhdGEpIHx8XG4gICAgICAgICAgICAgICAgaXNOREFycmF5TGlrZShkYXRhKSxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgZGF0YSBmb3IgZWxlbWVudCBidWZmZXInKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJ3VzYWdlJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjaGVjayQxLnBhcmFtZXRlcihcbiAgICAgICAgICAgICAgb3B0aW9ucy51c2FnZSxcbiAgICAgICAgICAgICAgdXNhZ2VUeXBlcyxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgZWxlbWVudCBidWZmZXIgdXNhZ2UnKVxuICAgICAgICAgICAgdXNhZ2UgPSB1c2FnZVR5cGVzW29wdGlvbnMudXNhZ2VdXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgncHJpbWl0aXZlJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjaGVjayQxLnBhcmFtZXRlcihcbiAgICAgICAgICAgICAgb3B0aW9ucy5wcmltaXRpdmUsXG4gICAgICAgICAgICAgIHByaW1UeXBlcyxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgZWxlbWVudCBidWZmZXIgcHJpbWl0aXZlJylcbiAgICAgICAgICAgIHByaW1UeXBlID0gcHJpbVR5cGVzW29wdGlvbnMucHJpbWl0aXZlXVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJ2NvdW50JyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjaGVjayQxKFxuICAgICAgICAgICAgICB0eXBlb2Ygb3B0aW9ucy5jb3VudCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5jb3VudCA+PSAwLFxuICAgICAgICAgICAgICAnaW52YWxpZCB2ZXJ0ZXggY291bnQgZm9yIGVsZW1lbnRzJylcbiAgICAgICAgICAgIHZlcnRDb3VudCA9IG9wdGlvbnMuY291bnQgfCAwXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgndHlwZScgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgY2hlY2skMS5wYXJhbWV0ZXIoXG4gICAgICAgICAgICAgIG9wdGlvbnMudHlwZSxcbiAgICAgICAgICAgICAgZWxlbWVudFR5cGVzLFxuICAgICAgICAgICAgICAnaW52YWxpZCBidWZmZXIgdHlwZScpXG4gICAgICAgICAgICBkdHlwZSA9IGVsZW1lbnRUeXBlc1tvcHRpb25zLnR5cGVdXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgnbGVuZ3RoJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gb3B0aW9ucy5sZW5ndGggfCAwXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ5dGVMZW5ndGggPSB2ZXJ0Q291bnRcbiAgICAgICAgICAgIGlmIChkdHlwZSA9PT0gR0xfVU5TSUdORURfU0hPUlQkMiB8fCBkdHlwZSA9PT0gR0xfU0hPUlQkMikge1xuICAgICAgICAgICAgICBieXRlTGVuZ3RoICo9IDJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZHR5cGUgPT09IEdMX1VOU0lHTkVEX0lOVCQyIHx8IGR0eXBlID09PSBHTF9JTlQkMikge1xuICAgICAgICAgICAgICBieXRlTGVuZ3RoICo9IDRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW5pdEVsZW1lbnRzKFxuICAgICAgICAgIGVsZW1lbnRzLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgdXNhZ2UsXG4gICAgICAgICAgcHJpbVR5cGUsXG4gICAgICAgICAgdmVydENvdW50LFxuICAgICAgICAgIGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZHR5cGUpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWdsRWxlbWVudHNcbiAgICB9XG5cbiAgICByZWdsRWxlbWVudHMob3B0aW9ucylcblxuICAgIHJlZ2xFbGVtZW50cy5fcmVnbFR5cGUgPSAnZWxlbWVudHMnXG4gICAgcmVnbEVsZW1lbnRzLl9lbGVtZW50cyA9IGVsZW1lbnRzXG4gICAgcmVnbEVsZW1lbnRzLnN1YmRhdGEgPSBmdW5jdGlvbiAoZGF0YSwgb2Zmc2V0KSB7XG4gICAgICBidWZmZXIuc3ViZGF0YShkYXRhLCBvZmZzZXQpXG4gICAgICByZXR1cm4gcmVnbEVsZW1lbnRzXG4gICAgfVxuICAgIHJlZ2xFbGVtZW50cy5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZGVzdHJveUVsZW1lbnRzKGVsZW1lbnRzKVxuICAgIH1cblxuICAgIHJldHVybiByZWdsRWxlbWVudHNcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY3JlYXRlOiBjcmVhdGVFbGVtZW50cyxcbiAgICBjcmVhdGVTdHJlYW06IGNyZWF0ZUVsZW1lbnRTdHJlYW0sXG4gICAgZGVzdHJveVN0cmVhbTogZGVzdHJveUVsZW1lbnRTdHJlYW0sXG4gICAgZ2V0RWxlbWVudHM6IGZ1bmN0aW9uIChlbGVtZW50cykge1xuICAgICAgaWYgKHR5cGVvZiBlbGVtZW50cyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgIGVsZW1lbnRzLl9lbGVtZW50cyBpbnN0YW5jZW9mIFJFR0xFbGVtZW50QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50cy5fZWxlbWVudHNcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xuICAgICAgdmFsdWVzKGVsZW1lbnRTZXQpLmZvckVhY2goZGVzdHJveUVsZW1lbnRzKVxuICAgIH1cbiAgfVxufVxuXG52YXIgRkxPQVQgPSBuZXcgRmxvYXQzMkFycmF5KDEpXG52YXIgSU5UID0gbmV3IFVpbnQzMkFycmF5KEZMT0FULmJ1ZmZlcilcblxudmFyIEdMX1VOU0lHTkVEX1NIT1JUJDQgPSA1MTIzXG5cbmZ1bmN0aW9uIGNvbnZlcnRUb0hhbGZGbG9hdCAoYXJyYXkpIHtcbiAgdmFyIHVzaG9ydHMgPSBwb29sLmFsbG9jVHlwZShHTF9VTlNJR05FRF9TSE9SVCQ0LCBhcnJheS5sZW5ndGgpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkge1xuICAgIGlmIChpc05hTihhcnJheVtpXSkpIHtcbiAgICAgIHVzaG9ydHNbaV0gPSAweGZmZmZcbiAgICB9IGVsc2UgaWYgKGFycmF5W2ldID09PSBJbmZpbml0eSkge1xuICAgICAgdXNob3J0c1tpXSA9IDB4N2MwMFxuICAgIH0gZWxzZSBpZiAoYXJyYXlbaV0gPT09IC1JbmZpbml0eSkge1xuICAgICAgdXNob3J0c1tpXSA9IDB4ZmMwMFxuICAgIH0gZWxzZSB7XG4gICAgICBGTE9BVFswXSA9IGFycmF5W2ldXG4gICAgICB2YXIgeCA9IElOVFswXVxuXG4gICAgICB2YXIgc2duID0gKHggPj4+IDMxKSA8PCAxNVxuICAgICAgdmFyIGV4cCA9ICgoeCA8PCAxKSA+Pj4gMjQpIC0gMTI3XG4gICAgICB2YXIgZnJhYyA9ICh4ID4+IDEzKSAmICgoMSA8PCAxMCkgLSAxKVxuXG4gICAgICBpZiAoZXhwIDwgLTI0KSB7XG4gICAgICAgIC8vIHJvdW5kIG5vbi1yZXByZXNlbnRhYmxlIGRlbm9ybWFscyB0byAwXG4gICAgICAgIHVzaG9ydHNbaV0gPSBzZ25cbiAgICAgIH0gZWxzZSBpZiAoZXhwIDwgLTE0KSB7XG4gICAgICAgIC8vIGhhbmRsZSBkZW5vcm1hbHNcbiAgICAgICAgdmFyIHMgPSAtMTQgLSBleHBcbiAgICAgICAgdXNob3J0c1tpXSA9IHNnbiArICgoZnJhYyArICgxIDw8IDEwKSkgPj4gcylcbiAgICAgIH0gZWxzZSBpZiAoZXhwID4gMTUpIHtcbiAgICAgICAgLy8gcm91bmQgb3ZlcmZsb3cgdG8gKy8tIEluZmluaXR5XG4gICAgICAgIHVzaG9ydHNbaV0gPSBzZ24gKyAweDdjMDBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG90aGVyd2lzZSBjb252ZXJ0IGRpcmVjdGx5XG4gICAgICAgIHVzaG9ydHNbaV0gPSBzZ24gKyAoKGV4cCArIDE1KSA8PCAxMCkgKyBmcmFjXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVzaG9ydHNcbn1cblxuZnVuY3Rpb24gaXNBcnJheUxpa2UgKHMpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocykgfHwgaXNUeXBlZEFycmF5KHMpXG59XG5cbnZhciBpc1BvdzIkMSA9IGZ1bmN0aW9uICh2KSB7XG4gIHJldHVybiAhKHYgJiAodiAtIDEpKSAmJiAoISF2KVxufVxuXG52YXIgR0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMgPSAweDg2QTNcblxudmFyIEdMX1RFWFRVUkVfMkQkMSA9IDB4MERFMVxudmFyIEdMX1RFWFRVUkVfQ1VCRV9NQVAkMSA9IDB4ODUxM1xudmFyIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCQxID0gMHg4NTE1XG5cbnZhciBHTF9SR0JBJDEgPSAweDE5MDhcbnZhciBHTF9BTFBIQSA9IDB4MTkwNlxudmFyIEdMX1JHQiA9IDB4MTkwN1xudmFyIEdMX0xVTUlOQU5DRSA9IDB4MTkwOVxudmFyIEdMX0xVTUlOQU5DRV9BTFBIQSA9IDB4MTkwQVxuXG52YXIgR0xfUkdCQTQgPSAweDgwNTZcbnZhciBHTF9SR0I1X0ExID0gMHg4MDU3XG52YXIgR0xfUkdCNTY1ID0gMHg4RDYyXG5cbnZhciBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80JDEgPSAweDgwMzNcbnZhciBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xJDEgPSAweDgwMzRcbnZhciBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSQxID0gMHg4MzYzXG52YXIgR0xfVU5TSUdORURfSU5UXzI0XzhfV0VCR0wkMSA9IDB4ODRGQVxuXG52YXIgR0xfREVQVEhfQ09NUE9ORU5UID0gMHgxOTAyXG52YXIgR0xfREVQVEhfU1RFTkNJTCA9IDB4ODRGOVxuXG52YXIgR0xfU1JHQl9FWFQgPSAweDhDNDBcbnZhciBHTF9TUkdCX0FMUEhBX0VYVCA9IDB4OEM0MlxuXG52YXIgR0xfSEFMRl9GTE9BVF9PRVMkMSA9IDB4OEQ2MVxuXG52YXIgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCA9IDB4ODNGMFxudmFyIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUID0gMHg4M0YxXG52YXIgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQgPSAweDgzRjJcbnZhciBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVCA9IDB4ODNGM1xuXG52YXIgR0xfQ09NUFJFU1NFRF9SR0JfQVRDX1dFQkdMID0gMHg4QzkyXG52YXIgR0xfQ09NUFJFU1NFRF9SR0JBX0FUQ19FWFBMSUNJVF9BTFBIQV9XRUJHTCA9IDB4OEM5M1xudmFyIEdMX0NPTVBSRVNTRURfUkdCQV9BVENfSU5URVJQT0xBVEVEX0FMUEhBX1dFQkdMID0gMHg4N0VFXG5cbnZhciBHTF9DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HID0gMHg4QzAwXG52YXIgR0xfQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRyA9IDB4OEMwMVxudmFyIEdMX0NPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HID0gMHg4QzAyXG52YXIgR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUcgPSAweDhDMDNcblxudmFyIEdMX0NPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0wgPSAweDhENjRcblxudmFyIEdMX1VOU0lHTkVEX0JZVEUkNSA9IDB4MTQwMVxudmFyIEdMX1VOU0lHTkVEX1NIT1JUJDMgPSAweDE0MDNcbnZhciBHTF9VTlNJR05FRF9JTlQkMyA9IDB4MTQwNVxudmFyIEdMX0ZMT0FUJDQgPSAweDE0MDZcblxudmFyIEdMX1RFWFRVUkVfV1JBUF9TID0gMHgyODAyXG52YXIgR0xfVEVYVFVSRV9XUkFQX1QgPSAweDI4MDNcblxudmFyIEdMX1JFUEVBVCA9IDB4MjkwMVxudmFyIEdMX0NMQU1QX1RPX0VER0UkMSA9IDB4ODEyRlxudmFyIEdMX01JUlJPUkVEX1JFUEVBVCA9IDB4ODM3MFxuXG52YXIgR0xfVEVYVFVSRV9NQUdfRklMVEVSID0gMHgyODAwXG52YXIgR0xfVEVYVFVSRV9NSU5fRklMVEVSID0gMHgyODAxXG5cbnZhciBHTF9ORUFSRVNUJDEgPSAweDI2MDBcbnZhciBHTF9MSU5FQVIgPSAweDI2MDFcbnZhciBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUJDEgPSAweDI3MDBcbnZhciBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1QkMSA9IDB4MjcwMVxudmFyIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUiQxID0gMHgyNzAyXG52YXIgR0xfTElORUFSX01JUE1BUF9MSU5FQVIkMSA9IDB4MjcwM1xuXG52YXIgR0xfR0VORVJBVEVfTUlQTUFQX0hJTlQgPSAweDgxOTJcbnZhciBHTF9ET05UX0NBUkUgPSAweDExMDBcbnZhciBHTF9GQVNURVNUID0gMHgxMTAxXG52YXIgR0xfTklDRVNUID0gMHgxMTAyXG5cbnZhciBHTF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCA9IDB4ODRGRVxuXG52YXIgR0xfVU5QQUNLX0FMSUdOTUVOVCA9IDB4MENGNVxudmFyIEdMX1VOUEFDS19GTElQX1lfV0VCR0wgPSAweDkyNDBcbnZhciBHTF9VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgPSAweDkyNDFcbnZhciBHTF9VTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMID0gMHg5MjQzXG5cbnZhciBHTF9CUk9XU0VSX0RFRkFVTFRfV0VCR0wgPSAweDkyNDRcblxudmFyIEdMX1RFWFRVUkUwJDEgPSAweDg0QzBcblxudmFyIE1JUE1BUF9GSUxURVJTID0gW1xuICBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUJDEsXG4gIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUiQxLFxuICBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1QkMSxcbiAgR0xfTElORUFSX01JUE1BUF9MSU5FQVIkMVxuXVxuXG52YXIgQ0hBTk5FTFNfRk9STUFUID0gW1xuICAwLFxuICBHTF9MVU1JTkFOQ0UsXG4gIEdMX0xVTUlOQU5DRV9BTFBIQSxcbiAgR0xfUkdCLFxuICBHTF9SR0JBJDFcbl1cblxudmFyIEZPUk1BVF9DSEFOTkVMUyA9IHt9XG5GT1JNQVRfQ0hBTk5FTFNbR0xfTFVNSU5BTkNFXSA9XG5GT1JNQVRfQ0hBTk5FTFNbR0xfQUxQSEFdID1cbkZPUk1BVF9DSEFOTkVMU1tHTF9ERVBUSF9DT01QT05FTlRdID0gMVxuRk9STUFUX0NIQU5ORUxTW0dMX0RFUFRIX1NURU5DSUxdID1cbkZPUk1BVF9DSEFOTkVMU1tHTF9MVU1JTkFOQ0VfQUxQSEFdID0gMlxuRk9STUFUX0NIQU5ORUxTW0dMX1JHQl0gPVxuRk9STUFUX0NIQU5ORUxTW0dMX1NSR0JfRVhUXSA9IDNcbkZPUk1BVF9DSEFOTkVMU1tHTF9SR0JBJDFdID1cbkZPUk1BVF9DSEFOTkVMU1tHTF9TUkdCX0FMUEhBX0VYVF0gPSA0XG5cbmZ1bmN0aW9uIG9iamVjdE5hbWUgKHN0cikge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIHN0ciArICddJ1xufVxuXG52YXIgQ0FOVkFTX0NMQVNTID0gb2JqZWN0TmFtZSgnSFRNTENhbnZhc0VsZW1lbnQnKVxudmFyIE9GRlNDUkVFTkNBTlZBU19DTEFTUyA9IG9iamVjdE5hbWUoJ09mZnNjcmVlbkNhbnZhcycpXG52YXIgQ09OVEVYVDJEX0NMQVNTID0gb2JqZWN0TmFtZSgnQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEJylcbnZhciBCSVRNQVBfQ0xBU1MgPSBvYmplY3ROYW1lKCdJbWFnZUJpdG1hcCcpXG52YXIgSU1BR0VfQ0xBU1MgPSBvYmplY3ROYW1lKCdIVE1MSW1hZ2VFbGVtZW50JylcbnZhciBWSURFT19DTEFTUyA9IG9iamVjdE5hbWUoJ0hUTUxWaWRlb0VsZW1lbnQnKVxuXG52YXIgUElYRUxfQ0xBU1NFUyA9IE9iamVjdC5rZXlzKGFycmF5VHlwZXMpLmNvbmNhdChbXG4gIENBTlZBU19DTEFTUyxcbiAgT0ZGU0NSRUVOQ0FOVkFTX0NMQVNTLFxuICBDT05URVhUMkRfQ0xBU1MsXG4gIEJJVE1BUF9DTEFTUyxcbiAgSU1BR0VfQ0xBU1MsXG4gIFZJREVPX0NMQVNTXG5dKVxuXG4vLyBmb3IgZXZlcnkgdGV4dHVyZSB0eXBlLCBzdG9yZVxuLy8gdGhlIHNpemUgaW4gYnl0ZXMuXG52YXIgVFlQRV9TSVpFUyA9IFtdXG5UWVBFX1NJWkVTW0dMX1VOU0lHTkVEX0JZVEUkNV0gPSAxXG5UWVBFX1NJWkVTW0dMX0ZMT0FUJDRdID0gNFxuVFlQRV9TSVpFU1tHTF9IQUxGX0ZMT0FUX09FUyQxXSA9IDJcblxuVFlQRV9TSVpFU1tHTF9VTlNJR05FRF9TSE9SVCQzXSA9IDJcblRZUEVfU0laRVNbR0xfVU5TSUdORURfSU5UJDNdID0gNFxuXG52YXIgRk9STUFUX1NJWkVTX1NQRUNJQUwgPSBbXVxuRk9STUFUX1NJWkVTX1NQRUNJQUxbR0xfUkdCQTRdID0gMlxuRk9STUFUX1NJWkVTX1NQRUNJQUxbR0xfUkdCNV9BMV0gPSAyXG5GT1JNQVRfU0laRVNfU1BFQ0lBTFtHTF9SR0I1NjVdID0gMlxuRk9STUFUX1NJWkVTX1NQRUNJQUxbR0xfREVQVEhfU1RFTkNJTF0gPSA0XG5cbkZPUk1BVF9TSVpFU19TUEVDSUFMW0dMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFRdID0gMC41XG5GT1JNQVRfU0laRVNfU1BFQ0lBTFtHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVF0gPSAwLjVcbkZPUk1BVF9TSVpFU19TUEVDSUFMW0dMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUXSA9IDFcbkZPUk1BVF9TSVpFU19TUEVDSUFMW0dMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUXSA9IDFcblxuRk9STUFUX1NJWkVTX1NQRUNJQUxbR0xfQ09NUFJFU1NFRF9SR0JfQVRDX1dFQkdMXSA9IDAuNVxuRk9STUFUX1NJWkVTX1NQRUNJQUxbR0xfQ09NUFJFU1NFRF9SR0JBX0FUQ19FWFBMSUNJVF9BTFBIQV9XRUJHTF0gPSAxXG5GT1JNQVRfU0laRVNfU1BFQ0lBTFtHTF9DT01QUkVTU0VEX1JHQkFfQVRDX0lOVEVSUE9MQVRFRF9BTFBIQV9XRUJHTF0gPSAxXG5cbkZPUk1BVF9TSVpFU19TUEVDSUFMW0dMX0NPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUddID0gMC41XG5GT1JNQVRfU0laRVNfU1BFQ0lBTFtHTF9DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HXSA9IDAuMjVcbkZPUk1BVF9TSVpFU19TUEVDSUFMW0dMX0NPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HXSA9IDAuNVxuRk9STUFUX1NJWkVTX1NQRUNJQUxbR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUddID0gMC4yNVxuXG5GT1JNQVRfU0laRVNfU1BFQ0lBTFtHTF9DT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMXSA9IDAuNVxuXG5mdW5jdGlvbiBpc051bWVyaWNBcnJheSAoYXJyKSB7XG4gIHJldHVybiAoXG4gICAgQXJyYXkuaXNBcnJheShhcnIpICYmXG4gICAgKGFyci5sZW5ndGggPT09IDAgfHxcbiAgICB0eXBlb2YgYXJyWzBdID09PSAnbnVtYmVyJykpXG59XG5cbmZ1bmN0aW9uIGlzUmVjdEFycmF5IChhcnIpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICB2YXIgd2lkdGggPSBhcnIubGVuZ3RoXG4gIGlmICh3aWR0aCA9PT0gMCB8fCAhaXNBcnJheUxpa2UoYXJyWzBdKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIGNsYXNzU3RyaW5nICh4KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeClcbn1cblxuZnVuY3Rpb24gaXNDYW52YXNFbGVtZW50IChvYmplY3QpIHtcbiAgcmV0dXJuIGNsYXNzU3RyaW5nKG9iamVjdCkgPT09IENBTlZBU19DTEFTU1xufVxuXG5mdW5jdGlvbiBpc09mZnNjcmVlbkNhbnZhcyAob2JqZWN0KSB7XG4gIHJldHVybiBjbGFzc1N0cmluZyhvYmplY3QpID09PSBPRkZTQ1JFRU5DQU5WQVNfQ0xBU1Ncbn1cblxuZnVuY3Rpb24gaXNDb250ZXh0MkQgKG9iamVjdCkge1xuICByZXR1cm4gY2xhc3NTdHJpbmcob2JqZWN0KSA9PT0gQ09OVEVYVDJEX0NMQVNTXG59XG5cbmZ1bmN0aW9uIGlzQml0bWFwIChvYmplY3QpIHtcbiAgcmV0dXJuIGNsYXNzU3RyaW5nKG9iamVjdCkgPT09IEJJVE1BUF9DTEFTU1xufVxuXG5mdW5jdGlvbiBpc0ltYWdlRWxlbWVudCAob2JqZWN0KSB7XG4gIHJldHVybiBjbGFzc1N0cmluZyhvYmplY3QpID09PSBJTUFHRV9DTEFTU1xufVxuXG5mdW5jdGlvbiBpc1ZpZGVvRWxlbWVudCAob2JqZWN0KSB7XG4gIHJldHVybiBjbGFzc1N0cmluZyhvYmplY3QpID09PSBWSURFT19DTEFTU1xufVxuXG5mdW5jdGlvbiBpc1BpeGVsRGF0YSAob2JqZWN0KSB7XG4gIGlmICghb2JqZWN0KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgdmFyIGNsYXNzTmFtZSA9IGNsYXNzU3RyaW5nKG9iamVjdClcbiAgaWYgKFBJWEVMX0NMQVNTRVMuaW5kZXhPZihjbGFzc05hbWUpID49IDApIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiAoXG4gICAgaXNOdW1lcmljQXJyYXkob2JqZWN0KSB8fFxuICAgIGlzUmVjdEFycmF5KG9iamVjdCkgfHxcbiAgICBpc05EQXJyYXlMaWtlKG9iamVjdCkpXG59XG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlDb2RlJDEgKGRhdGEpIHtcbiAgcmV0dXJuIGFycmF5VHlwZXNbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGEpXSB8IDBcbn1cblxuZnVuY3Rpb24gY29udmVydERhdGEgKHJlc3VsdCwgZGF0YSkge1xuICB2YXIgbiA9IGRhdGEubGVuZ3RoXG4gIHN3aXRjaCAocmVzdWx0LnR5cGUpIHtcbiAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEUkNTpcbiAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUJDM6XG4gICAgY2FzZSBHTF9VTlNJR05FRF9JTlQkMzpcbiAgICBjYXNlIEdMX0ZMT0FUJDQ6XG4gICAgICB2YXIgY29udmVydGVkID0gcG9vbC5hbGxvY1R5cGUocmVzdWx0LnR5cGUsIG4pXG4gICAgICBjb252ZXJ0ZWQuc2V0KGRhdGEpXG4gICAgICByZXN1bHQuZGF0YSA9IGNvbnZlcnRlZFxuICAgICAgYnJlYWtcblxuICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVMkMTpcbiAgICAgIHJlc3VsdC5kYXRhID0gY29udmVydFRvSGFsZkZsb2F0KGRhdGEpXG4gICAgICBicmVha1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGNoZWNrJDEucmFpc2UoJ3Vuc3VwcG9ydGVkIHRleHR1cmUgdHlwZSwgbXVzdCBzcGVjaWZ5IGEgdHlwZWQgYXJyYXknKVxuICB9XG59XG5cbmZ1bmN0aW9uIHByZUNvbnZlcnQgKGltYWdlLCBuKSB7XG4gIHJldHVybiBwb29sLmFsbG9jVHlwZShcbiAgICBpbWFnZS50eXBlID09PSBHTF9IQUxGX0ZMT0FUX09FUyQxXG4gICAgICA/IEdMX0ZMT0FUJDRcbiAgICAgIDogaW1hZ2UudHlwZSwgbilcbn1cblxuZnVuY3Rpb24gcG9zdENvbnZlcnQgKGltYWdlLCBkYXRhKSB7XG4gIGlmIChpbWFnZS50eXBlID09PSBHTF9IQUxGX0ZMT0FUX09FUyQxKSB7XG4gICAgaW1hZ2UuZGF0YSA9IGNvbnZlcnRUb0hhbGZGbG9hdChkYXRhKVxuICAgIHBvb2wuZnJlZVR5cGUoZGF0YSlcbiAgfSBlbHNlIHtcbiAgICBpbWFnZS5kYXRhID0gZGF0YVxuICB9XG59XG5cbmZ1bmN0aW9uIHRyYW5zcG9zZURhdGEgKGltYWdlLCBhcnJheSwgc3RyaWRlWCwgc3RyaWRlWSwgc3RyaWRlQywgb2Zmc2V0KSB7XG4gIHZhciB3ID0gaW1hZ2Uud2lkdGhcbiAgdmFyIGggPSBpbWFnZS5oZWlnaHRcbiAgdmFyIGMgPSBpbWFnZS5jaGFubmVsc1xuICB2YXIgbiA9IHcgKiBoICogY1xuICB2YXIgZGF0YSA9IHByZUNvbnZlcnQoaW1hZ2UsIG4pXG5cbiAgdmFyIHAgPSAwXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaDsgKytpKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCB3OyArK2opIHtcbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYzsgKytrKSB7XG4gICAgICAgIGRhdGFbcCsrXSA9IGFycmF5W3N0cmlkZVggKiBqICsgc3RyaWRlWSAqIGkgKyBzdHJpZGVDICogayArIG9mZnNldF1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwb3N0Q29udmVydChpbWFnZSwgZGF0YSlcbn1cblxuZnVuY3Rpb24gZ2V0VGV4dHVyZVNpemUgKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgaXNNaXBtYXAsIGlzQ3ViZSkge1xuICB2YXIgc1xuICBpZiAodHlwZW9mIEZPUk1BVF9TSVpFU19TUEVDSUFMW2Zvcm1hdF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gd2UgaGF2ZSBhIHNwZWNpYWwgYXJyYXkgZm9yIGRlYWxpbmcgd2l0aCB3ZWlyZCBjb2xvciBmb3JtYXRzIHN1Y2ggYXMgUkdCNUExXG4gICAgcyA9IEZPUk1BVF9TSVpFU19TUEVDSUFMW2Zvcm1hdF1cbiAgfSBlbHNlIHtcbiAgICBzID0gRk9STUFUX0NIQU5ORUxTW2Zvcm1hdF0gKiBUWVBFX1NJWkVTW3R5cGVdXG4gIH1cblxuICBpZiAoaXNDdWJlKSB7XG4gICAgcyAqPSA2XG4gIH1cblxuICBpZiAoaXNNaXBtYXApIHtcbiAgICAvLyBjb21wdXRlIHRoZSB0b3RhbCBzaXplIG9mIGFsbCB0aGUgbWlwbWFwcy5cbiAgICB2YXIgdG90YWwgPSAwXG5cbiAgICB2YXIgdyA9IHdpZHRoXG4gICAgd2hpbGUgKHcgPj0gMSkge1xuICAgICAgLy8gd2UgY2FuIG9ubHkgdXNlIG1pcG1hcHMgb24gYSBzcXVhcmUgaW1hZ2UsXG4gICAgICAvLyBzbyB3ZSBjYW4gc2ltcGx5IHVzZSB0aGUgd2lkdGggYW5kIGlnbm9yZSB0aGUgaGVpZ2h0OlxuICAgICAgdG90YWwgKz0gcyAqIHcgKiB3XG4gICAgICB3IC89IDJcbiAgICB9XG4gICAgcmV0dXJuIHRvdGFsXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHMgKiB3aWR0aCAqIGhlaWdodFxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVRleHR1cmVTZXQgKFxuICBnbCwgZXh0ZW5zaW9ucywgbGltaXRzLCByZWdsUG9sbCwgY29udGV4dFN0YXRlLCBzdGF0cywgY29uZmlnKSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gSW5pdGlhbGl6ZSBjb25zdGFudHMgYW5kIHBhcmFtZXRlciB0YWJsZXMgaGVyZVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHZhciBtaXBtYXBIaW50ID0ge1xuICAgIFwiZG9uJ3QgY2FyZVwiOiBHTF9ET05UX0NBUkUsXG4gICAgJ2RvbnQgY2FyZSc6IEdMX0RPTlRfQ0FSRSxcbiAgICAnbmljZSc6IEdMX05JQ0VTVCxcbiAgICAnZmFzdCc6IEdMX0ZBU1RFU1RcbiAgfVxuXG4gIHZhciB3cmFwTW9kZXMgPSB7XG4gICAgJ3JlcGVhdCc6IEdMX1JFUEVBVCxcbiAgICAnY2xhbXAnOiBHTF9DTEFNUF9UT19FREdFJDEsXG4gICAgJ21pcnJvcic6IEdMX01JUlJPUkVEX1JFUEVBVFxuICB9XG5cbiAgdmFyIG1hZ0ZpbHRlcnMgPSB7XG4gICAgJ25lYXJlc3QnOiBHTF9ORUFSRVNUJDEsXG4gICAgJ2xpbmVhcic6IEdMX0xJTkVBUlxuICB9XG5cbiAgdmFyIG1pbkZpbHRlcnMgPSBleHRlbmQoe1xuICAgICdtaXBtYXAnOiBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUiQxLFxuICAgICduZWFyZXN0IG1pcG1hcCBuZWFyZXN0JzogR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCQxLFxuICAgICdsaW5lYXIgbWlwbWFwIG5lYXJlc3QnOiBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1QkMSxcbiAgICAnbmVhcmVzdCBtaXBtYXAgbGluZWFyJzogR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSJDEsXG4gICAgJ2xpbmVhciBtaXBtYXAgbGluZWFyJzogR0xfTElORUFSX01JUE1BUF9MSU5FQVIkMVxuICB9LCBtYWdGaWx0ZXJzKVxuXG4gIHZhciBjb2xvclNwYWNlID0ge1xuICAgICdub25lJzogMCxcbiAgICAnYnJvd3Nlcic6IEdMX0JST1dTRVJfREVGQVVMVF9XRUJHTFxuICB9XG5cbiAgdmFyIHRleHR1cmVUeXBlcyA9IHtcbiAgICAndWludDgnOiBHTF9VTlNJR05FRF9CWVRFJDUsXG4gICAgJ3JnYmE0JzogR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCQxLFxuICAgICdyZ2I1NjUnOiBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSQxLFxuICAgICdyZ2I1IGExJzogR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSQxXG4gIH1cblxuICB2YXIgdGV4dHVyZUZvcm1hdHMgPSB7XG4gICAgJ2FscGhhJzogR0xfQUxQSEEsXG4gICAgJ2x1bWluYW5jZSc6IEdMX0xVTUlOQU5DRSxcbiAgICAnbHVtaW5hbmNlIGFscGhhJzogR0xfTFVNSU5BTkNFX0FMUEhBLFxuICAgICdyZ2InOiBHTF9SR0IsXG4gICAgJ3JnYmEnOiBHTF9SR0JBJDEsXG4gICAgJ3JnYmE0JzogR0xfUkdCQTQsXG4gICAgJ3JnYjUgYTEnOiBHTF9SR0I1X0ExLFxuICAgICdyZ2I1NjUnOiBHTF9SR0I1NjVcbiAgfVxuXG4gIHZhciBjb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMgPSB7fVxuXG4gIGlmIChleHRlbnNpb25zLmV4dF9zcmdiKSB7XG4gICAgdGV4dHVyZUZvcm1hdHMuc3JnYiA9IEdMX1NSR0JfRVhUXG4gICAgdGV4dHVyZUZvcm1hdHMuc3JnYmEgPSBHTF9TUkdCX0FMUEhBX0VYVFxuICB9XG5cbiAgaWYgKGV4dGVuc2lvbnMub2VzX3RleHR1cmVfZmxvYXQpIHtcbiAgICB0ZXh0dXJlVHlwZXMuZmxvYXQzMiA9IHRleHR1cmVUeXBlcy5mbG9hdCA9IEdMX0ZMT0FUJDRcbiAgfVxuXG4gIGlmIChleHRlbnNpb25zLm9lc190ZXh0dXJlX2hhbGZfZmxvYXQpIHtcbiAgICB0ZXh0dXJlVHlwZXNbJ2Zsb2F0MTYnXSA9IHRleHR1cmVUeXBlc1snaGFsZiBmbG9hdCddID0gR0xfSEFMRl9GTE9BVF9PRVMkMVxuICB9XG5cbiAgaWYgKGV4dGVuc2lvbnMud2ViZ2xfZGVwdGhfdGV4dHVyZSkge1xuICAgIGV4dGVuZCh0ZXh0dXJlRm9ybWF0cywge1xuICAgICAgJ2RlcHRoJzogR0xfREVQVEhfQ09NUE9ORU5ULFxuICAgICAgJ2RlcHRoIHN0ZW5jaWwnOiBHTF9ERVBUSF9TVEVOQ0lMXG4gICAgfSlcblxuICAgIGV4dGVuZCh0ZXh0dXJlVHlwZXMsIHtcbiAgICAgICd1aW50MTYnOiBHTF9VTlNJR05FRF9TSE9SVCQzLFxuICAgICAgJ3VpbnQzMic6IEdMX1VOU0lHTkVEX0lOVCQzLFxuICAgICAgJ2RlcHRoIHN0ZW5jaWwnOiBHTF9VTlNJR05FRF9JTlRfMjRfOF9XRUJHTCQxXG4gICAgfSlcbiAgfVxuXG4gIGlmIChleHRlbnNpb25zLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjKSB7XG4gICAgZXh0ZW5kKGNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cywge1xuICAgICAgJ3JnYiBzM3RjIGR4dDEnOiBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhULFxuICAgICAgJ3JnYmEgczN0YyBkeHQxJzogR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQsXG4gICAgICAncmdiYSBzM3RjIGR4dDMnOiBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVCxcbiAgICAgICdyZ2JhIHMzdGMgZHh0NSc6IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUXG4gICAgfSlcbiAgfVxuXG4gIGlmIChleHRlbnNpb25zLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9hdGMpIHtcbiAgICBleHRlbmQoY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLCB7XG4gICAgICAncmdiIGF0Yyc6IEdMX0NPTVBSRVNTRURfUkdCX0FUQ19XRUJHTCxcbiAgICAgICdyZ2JhIGF0YyBleHBsaWNpdCBhbHBoYSc6IEdMX0NPTVBSRVNTRURfUkdCQV9BVENfRVhQTElDSVRfQUxQSEFfV0VCR0wsXG4gICAgICAncmdiYSBhdGMgaW50ZXJwb2xhdGVkIGFscGhhJzogR0xfQ09NUFJFU1NFRF9SR0JBX0FUQ19JTlRFUlBPTEFURURfQUxQSEFfV0VCR0xcbiAgICB9KVxuICB9XG5cbiAgaWYgKGV4dGVuc2lvbnMud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjKSB7XG4gICAgZXh0ZW5kKGNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cywge1xuICAgICAgJ3JnYiBwdnJ0YyA0YnBwdjEnOiBHTF9DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HLFxuICAgICAgJ3JnYiBwdnJ0YyAyYnBwdjEnOiBHTF9DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HLFxuICAgICAgJ3JnYmEgcHZydGMgNGJwcHYxJzogR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUcsXG4gICAgICAncmdiYSBwdnJ0YyAyYnBwdjEnOiBHTF9DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNR1xuICAgIH0pXG4gIH1cblxuICBpZiAoZXh0ZW5zaW9ucy53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMSkge1xuICAgIGNvbXByZXNzZWRUZXh0dXJlRm9ybWF0c1sncmdiIGV0YzEnXSA9IEdMX0NPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0xcbiAgfVxuXG4gIC8vIENvcHkgb3ZlciBhbGwgdGV4dHVyZSBmb3JtYXRzXG4gIHZhciBzdXBwb3J0ZWRDb21wcmVzc2VkRm9ybWF0cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFxuICAgIGdsLmdldFBhcmFtZXRlcihHTF9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUykpXG4gIE9iamVjdC5rZXlzKGNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBmb3JtYXQgPSBjb21wcmVzc2VkVGV4dHVyZUZvcm1hdHNbbmFtZV1cbiAgICBpZiAoc3VwcG9ydGVkQ29tcHJlc3NlZEZvcm1hdHMuaW5kZXhPZihmb3JtYXQpID49IDApIHtcbiAgICAgIHRleHR1cmVGb3JtYXRzW25hbWVdID0gZm9ybWF0XG4gICAgfVxuICB9KVxuXG4gIHZhciBzdXBwb3J0ZWRGb3JtYXRzID0gT2JqZWN0LmtleXModGV4dHVyZUZvcm1hdHMpXG4gIGxpbWl0cy50ZXh0dXJlRm9ybWF0cyA9IHN1cHBvcnRlZEZvcm1hdHNcblxuICAvLyBhc3NvY2lhdGUgd2l0aCBldmVyeSBmb3JtYXQgc3RyaW5nIGl0c1xuICAvLyBjb3JyZXNwb25kaW5nIEdMLXZhbHVlLlxuICB2YXIgdGV4dHVyZUZvcm1hdHNJbnZlcnQgPSBbXVxuICBPYmplY3Qua2V5cyh0ZXh0dXJlRm9ybWF0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHZhbCA9IHRleHR1cmVGb3JtYXRzW2tleV1cbiAgICB0ZXh0dXJlRm9ybWF0c0ludmVydFt2YWxdID0ga2V5XG4gIH0pXG5cbiAgLy8gYXNzb2NpYXRlIHdpdGggZXZlcnkgdHlwZSBzdHJpbmcgaXRzXG4gIC8vIGNvcnJlc3BvbmRpbmcgR0wtdmFsdWUuXG4gIHZhciB0ZXh0dXJlVHlwZXNJbnZlcnQgPSBbXVxuICBPYmplY3Qua2V5cyh0ZXh0dXJlVHlwZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciB2YWwgPSB0ZXh0dXJlVHlwZXNba2V5XVxuICAgIHRleHR1cmVUeXBlc0ludmVydFt2YWxdID0ga2V5XG4gIH0pXG5cbiAgdmFyIG1hZ0ZpbHRlcnNJbnZlcnQgPSBbXVxuICBPYmplY3Qua2V5cyhtYWdGaWx0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgdmFsID0gbWFnRmlsdGVyc1trZXldXG4gICAgbWFnRmlsdGVyc0ludmVydFt2YWxdID0ga2V5XG4gIH0pXG5cbiAgdmFyIG1pbkZpbHRlcnNJbnZlcnQgPSBbXVxuICBPYmplY3Qua2V5cyhtaW5GaWx0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgdmFsID0gbWluRmlsdGVyc1trZXldXG4gICAgbWluRmlsdGVyc0ludmVydFt2YWxdID0ga2V5XG4gIH0pXG5cbiAgdmFyIHdyYXBNb2Rlc0ludmVydCA9IFtdXG4gIE9iamVjdC5rZXlzKHdyYXBNb2RlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHZhbCA9IHdyYXBNb2Rlc1trZXldXG4gICAgd3JhcE1vZGVzSW52ZXJ0W3ZhbF0gPSBrZXlcbiAgfSlcblxuICAvLyBjb2xvckZvcm1hdHNbXSBnaXZlcyB0aGUgZm9ybWF0IChjaGFubmVscykgYXNzb2NpYXRlZCB0byBhblxuICAvLyBpbnRlcm5hbGZvcm1hdFxuICB2YXIgY29sb3JGb3JtYXRzID0gc3VwcG9ydGVkRm9ybWF0cy5yZWR1Y2UoZnVuY3Rpb24gKGNvbG9yLCBrZXkpIHtcbiAgICB2YXIgZ2xlbnVtID0gdGV4dHVyZUZvcm1hdHNba2V5XVxuICAgIGlmIChnbGVudW0gPT09IEdMX0xVTUlOQU5DRSB8fFxuICAgICAgICBnbGVudW0gPT09IEdMX0FMUEhBIHx8XG4gICAgICAgIGdsZW51bSA9PT0gR0xfTFVNSU5BTkNFIHx8XG4gICAgICAgIGdsZW51bSA9PT0gR0xfTFVNSU5BTkNFX0FMUEhBIHx8XG4gICAgICAgIGdsZW51bSA9PT0gR0xfREVQVEhfQ09NUE9ORU5UIHx8XG4gICAgICAgIGdsZW51bSA9PT0gR0xfREVQVEhfU1RFTkNJTCB8fFxuICAgICAgICAoZXh0ZW5zaW9ucy5leHRfc3JnYiAmJlxuICAgICAgICAgICAgICAgIChnbGVudW0gPT09IEdMX1NSR0JfRVhUIHx8XG4gICAgICAgICAgICAgICAgIGdsZW51bSA9PT0gR0xfU1JHQl9BTFBIQV9FWFQpKSkge1xuICAgICAgY29sb3JbZ2xlbnVtXSA9IGdsZW51bVxuICAgIH0gZWxzZSBpZiAoZ2xlbnVtID09PSBHTF9SR0I1X0ExIHx8IGtleS5pbmRleE9mKCdyZ2JhJykgPj0gMCkge1xuICAgICAgY29sb3JbZ2xlbnVtXSA9IEdMX1JHQkEkMVxuICAgIH0gZWxzZSB7XG4gICAgICBjb2xvcltnbGVudW1dID0gR0xfUkdCXG4gICAgfVxuICAgIHJldHVybiBjb2xvclxuICB9LCB7fSlcblxuICBmdW5jdGlvbiBUZXhGbGFncyAoKSB7XG4gICAgLy8gZm9ybWF0IGluZm9cbiAgICB0aGlzLmludGVybmFsZm9ybWF0ID0gR0xfUkdCQSQxXG4gICAgdGhpcy5mb3JtYXQgPSBHTF9SR0JBJDFcbiAgICB0aGlzLnR5cGUgPSBHTF9VTlNJR05FRF9CWVRFJDVcbiAgICB0aGlzLmNvbXByZXNzZWQgPSBmYWxzZVxuXG4gICAgLy8gcGl4ZWwgc3RvcmFnZVxuICAgIHRoaXMucHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlXG4gICAgdGhpcy5mbGlwWSA9IGZhbHNlXG4gICAgdGhpcy51bnBhY2tBbGlnbm1lbnQgPSAxXG4gICAgdGhpcy5jb2xvclNwYWNlID0gR0xfQlJPV1NFUl9ERUZBVUxUX1dFQkdMXG5cbiAgICAvLyBzaGFwZSBpbmZvXG4gICAgdGhpcy53aWR0aCA9IDBcbiAgICB0aGlzLmhlaWdodCA9IDBcbiAgICB0aGlzLmNoYW5uZWxzID0gMFxuICB9XG5cbiAgZnVuY3Rpb24gY29weUZsYWdzIChyZXN1bHQsIG90aGVyKSB7XG4gICAgcmVzdWx0LmludGVybmFsZm9ybWF0ID0gb3RoZXIuaW50ZXJuYWxmb3JtYXRcbiAgICByZXN1bHQuZm9ybWF0ID0gb3RoZXIuZm9ybWF0XG4gICAgcmVzdWx0LnR5cGUgPSBvdGhlci50eXBlXG4gICAgcmVzdWx0LmNvbXByZXNzZWQgPSBvdGhlci5jb21wcmVzc2VkXG5cbiAgICByZXN1bHQucHJlbXVsdGlwbHlBbHBoYSA9IG90aGVyLnByZW11bHRpcGx5QWxwaGFcbiAgICByZXN1bHQuZmxpcFkgPSBvdGhlci5mbGlwWVxuICAgIHJlc3VsdC51bnBhY2tBbGlnbm1lbnQgPSBvdGhlci51bnBhY2tBbGlnbm1lbnRcbiAgICByZXN1bHQuY29sb3JTcGFjZSA9IG90aGVyLmNvbG9yU3BhY2VcblxuICAgIHJlc3VsdC53aWR0aCA9IG90aGVyLndpZHRoXG4gICAgcmVzdWx0LmhlaWdodCA9IG90aGVyLmhlaWdodFxuICAgIHJlc3VsdC5jaGFubmVscyA9IG90aGVyLmNoYW5uZWxzXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUZsYWdzIChmbGFncywgb3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcgfHwgIW9wdGlvbnMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICgncHJlbXVsdGlwbHlBbHBoYScgaW4gb3B0aW9ucykge1xuICAgICAgY2hlY2skMS50eXBlKG9wdGlvbnMucHJlbXVsdGlwbHlBbHBoYSwgJ2Jvb2xlYW4nLFxuICAgICAgICAnaW52YWxpZCBwcmVtdWx0aXBseUFscGhhJylcbiAgICAgIGZsYWdzLnByZW11bHRpcGx5QWxwaGEgPSBvcHRpb25zLnByZW11bHRpcGx5QWxwaGFcbiAgICB9XG5cbiAgICBpZiAoJ2ZsaXBZJyBpbiBvcHRpb25zKSB7XG4gICAgICBjaGVjayQxLnR5cGUob3B0aW9ucy5mbGlwWSwgJ2Jvb2xlYW4nLFxuICAgICAgICAnaW52YWxpZCB0ZXh0dXJlIGZsaXAnKVxuICAgICAgZmxhZ3MuZmxpcFkgPSBvcHRpb25zLmZsaXBZXG4gICAgfVxuXG4gICAgaWYgKCdhbGlnbm1lbnQnIGluIG9wdGlvbnMpIHtcbiAgICAgIGNoZWNrJDEub25lT2Yob3B0aW9ucy5hbGlnbm1lbnQsIFsxLCAyLCA0LCA4XSxcbiAgICAgICAgJ2ludmFsaWQgdGV4dHVyZSB1bnBhY2sgYWxpZ25tZW50JylcbiAgICAgIGZsYWdzLnVucGFja0FsaWdubWVudCA9IG9wdGlvbnMuYWxpZ25tZW50XG4gICAgfVxuXG4gICAgaWYgKCdjb2xvclNwYWNlJyBpbiBvcHRpb25zKSB7XG4gICAgICBjaGVjayQxLnBhcmFtZXRlcihvcHRpb25zLmNvbG9yU3BhY2UsIGNvbG9yU3BhY2UsXG4gICAgICAgICdpbnZhbGlkIGNvbG9yU3BhY2UnKVxuICAgICAgZmxhZ3MuY29sb3JTcGFjZSA9IGNvbG9yU3BhY2Vbb3B0aW9ucy5jb2xvclNwYWNlXVxuICAgIH1cblxuICAgIGlmICgndHlwZScgaW4gb3B0aW9ucykge1xuICAgICAgdmFyIHR5cGUgPSBvcHRpb25zLnR5cGVcbiAgICAgIGNoZWNrJDEoZXh0ZW5zaW9ucy5vZXNfdGV4dHVyZV9mbG9hdCB8fFxuICAgICAgICAhKHR5cGUgPT09ICdmbG9hdCcgfHwgdHlwZSA9PT0gJ2Zsb2F0MzInKSxcbiAgICAgICd5b3UgbXVzdCBlbmFibGUgdGhlIE9FU190ZXh0dXJlX2Zsb2F0IGV4dGVuc2lvbiBpbiBvcmRlciB0byB1c2UgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMuJylcbiAgICAgIGNoZWNrJDEoZXh0ZW5zaW9ucy5vZXNfdGV4dHVyZV9oYWxmX2Zsb2F0IHx8XG4gICAgICAgICEodHlwZSA9PT0gJ2hhbGYgZmxvYXQnIHx8IHR5cGUgPT09ICdmbG9hdDE2JyksXG4gICAgICAneW91IG11c3QgZW5hYmxlIHRoZSBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGV4dGVuc2lvbiBpbiBvcmRlciB0byB1c2UgMTYtYml0IGZsb2F0aW5nIHBvaW50IHRleHR1cmVzLicpXG4gICAgICBjaGVjayQxKGV4dGVuc2lvbnMud2ViZ2xfZGVwdGhfdGV4dHVyZSB8fFxuICAgICAgICAhKHR5cGUgPT09ICd1aW50MTYnIHx8IHR5cGUgPT09ICd1aW50MzInIHx8IHR5cGUgPT09ICdkZXB0aCBzdGVuY2lsJyksXG4gICAgICAneW91IG11c3QgZW5hYmxlIHRoZSBXRUJHTF9kZXB0aF90ZXh0dXJlIGV4dGVuc2lvbiBpbiBvcmRlciB0byB1c2UgZGVwdGgvc3RlbmNpbCB0ZXh0dXJlcy4nKVxuICAgICAgY2hlY2skMS5wYXJhbWV0ZXIodHlwZSwgdGV4dHVyZVR5cGVzLFxuICAgICAgICAnaW52YWxpZCB0ZXh0dXJlIHR5cGUnKVxuICAgICAgZmxhZ3MudHlwZSA9IHRleHR1cmVUeXBlc1t0eXBlXVxuICAgIH1cblxuICAgIHZhciB3ID0gZmxhZ3Mud2lkdGhcbiAgICB2YXIgaCA9IGZsYWdzLmhlaWdodFxuICAgIHZhciBjID0gZmxhZ3MuY2hhbm5lbHNcbiAgICB2YXIgaGFzQ2hhbm5lbHMgPSBmYWxzZVxuICAgIGlmICgnc2hhcGUnIGluIG9wdGlvbnMpIHtcbiAgICAgIGNoZWNrJDEoQXJyYXkuaXNBcnJheShvcHRpb25zLnNoYXBlKSAmJiBvcHRpb25zLnNoYXBlLmxlbmd0aCA+PSAyLFxuICAgICAgICAnc2hhcGUgbXVzdCBiZSBhbiBhcnJheScpXG4gICAgICB3ID0gb3B0aW9ucy5zaGFwZVswXVxuICAgICAgaCA9IG9wdGlvbnMuc2hhcGVbMV1cbiAgICAgIGlmIChvcHRpb25zLnNoYXBlLmxlbmd0aCA9PT0gMykge1xuICAgICAgICBjID0gb3B0aW9ucy5zaGFwZVsyXVxuICAgICAgICBjaGVjayQxKGMgPiAwICYmIGMgPD0gNCwgJ2ludmFsaWQgbnVtYmVyIG9mIGNoYW5uZWxzJylcbiAgICAgICAgaGFzQ2hhbm5lbHMgPSB0cnVlXG4gICAgICB9XG4gICAgICBjaGVjayQxKHcgPj0gMCAmJiB3IDw9IGxpbWl0cy5tYXhUZXh0dXJlU2l6ZSwgJ2ludmFsaWQgd2lkdGgnKVxuICAgICAgY2hlY2skMShoID49IDAgJiYgaCA8PSBsaW1pdHMubWF4VGV4dHVyZVNpemUsICdpbnZhbGlkIGhlaWdodCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICgncmFkaXVzJyBpbiBvcHRpb25zKSB7XG4gICAgICAgIHcgPSBoID0gb3B0aW9ucy5yYWRpdXNcbiAgICAgICAgY2hlY2skMSh3ID49IDAgJiYgdyA8PSBsaW1pdHMubWF4VGV4dHVyZVNpemUsICdpbnZhbGlkIHJhZGl1cycpXG4gICAgICB9XG4gICAgICBpZiAoJ3dpZHRoJyBpbiBvcHRpb25zKSB7XG4gICAgICAgIHcgPSBvcHRpb25zLndpZHRoXG4gICAgICAgIGNoZWNrJDEodyA+PSAwICYmIHcgPD0gbGltaXRzLm1heFRleHR1cmVTaXplLCAnaW52YWxpZCB3aWR0aCcpXG4gICAgICB9XG4gICAgICBpZiAoJ2hlaWdodCcgaW4gb3B0aW9ucykge1xuICAgICAgICBoID0gb3B0aW9ucy5oZWlnaHRcbiAgICAgICAgY2hlY2skMShoID49IDAgJiYgaCA8PSBsaW1pdHMubWF4VGV4dHVyZVNpemUsICdpbnZhbGlkIGhlaWdodCcpXG4gICAgICB9XG4gICAgICBpZiAoJ2NoYW5uZWxzJyBpbiBvcHRpb25zKSB7XG4gICAgICAgIGMgPSBvcHRpb25zLmNoYW5uZWxzXG4gICAgICAgIGNoZWNrJDEoYyA+IDAgJiYgYyA8PSA0LCAnaW52YWxpZCBudW1iZXIgb2YgY2hhbm5lbHMnKVxuICAgICAgICBoYXNDaGFubmVscyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgZmxhZ3Mud2lkdGggPSB3IHwgMFxuICAgIGZsYWdzLmhlaWdodCA9IGggfCAwXG4gICAgZmxhZ3MuY2hhbm5lbHMgPSBjIHwgMFxuXG4gICAgdmFyIGhhc0Zvcm1hdCA9IGZhbHNlXG4gICAgaWYgKCdmb3JtYXQnIGluIG9wdGlvbnMpIHtcbiAgICAgIHZhciBmb3JtYXRTdHIgPSBvcHRpb25zLmZvcm1hdFxuICAgICAgY2hlY2skMShleHRlbnNpb25zLndlYmdsX2RlcHRoX3RleHR1cmUgfHxcbiAgICAgICAgIShmb3JtYXRTdHIgPT09ICdkZXB0aCcgfHwgZm9ybWF0U3RyID09PSAnZGVwdGggc3RlbmNpbCcpLFxuICAgICAgJ3lvdSBtdXN0IGVuYWJsZSB0aGUgV0VCR0xfZGVwdGhfdGV4dHVyZSBleHRlbnNpb24gaW4gb3JkZXIgdG8gdXNlIGRlcHRoL3N0ZW5jaWwgdGV4dHVyZXMuJylcbiAgICAgIGNoZWNrJDEucGFyYW1ldGVyKGZvcm1hdFN0ciwgdGV4dHVyZUZvcm1hdHMsXG4gICAgICAgICdpbnZhbGlkIHRleHR1cmUgZm9ybWF0JylcbiAgICAgIHZhciBpbnRlcm5hbGZvcm1hdCA9IGZsYWdzLmludGVybmFsZm9ybWF0ID0gdGV4dHVyZUZvcm1hdHNbZm9ybWF0U3RyXVxuICAgICAgZmxhZ3MuZm9ybWF0ID0gY29sb3JGb3JtYXRzW2ludGVybmFsZm9ybWF0XVxuICAgICAgaWYgKGZvcm1hdFN0ciBpbiB0ZXh0dXJlVHlwZXMpIHtcbiAgICAgICAgaWYgKCEoJ3R5cGUnIGluIG9wdGlvbnMpKSB7XG4gICAgICAgICAgZmxhZ3MudHlwZSA9IHRleHR1cmVUeXBlc1tmb3JtYXRTdHJdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3JtYXRTdHIgaW4gY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzKSB7XG4gICAgICAgIGZsYWdzLmNvbXByZXNzZWQgPSB0cnVlXG4gICAgICB9XG4gICAgICBoYXNGb3JtYXQgPSB0cnVlXG4gICAgfVxuXG4gICAgLy8gUmVjb25jaWxlIGNoYW5uZWxzIGFuZCBmb3JtYXRcbiAgICBpZiAoIWhhc0NoYW5uZWxzICYmIGhhc0Zvcm1hdCkge1xuICAgICAgZmxhZ3MuY2hhbm5lbHMgPSBGT1JNQVRfQ0hBTk5FTFNbZmxhZ3MuZm9ybWF0XVxuICAgIH0gZWxzZSBpZiAoaGFzQ2hhbm5lbHMgJiYgIWhhc0Zvcm1hdCkge1xuICAgICAgaWYgKGZsYWdzLmNoYW5uZWxzICE9PSBDSEFOTkVMU19GT1JNQVRbZmxhZ3MuZm9ybWF0XSkge1xuICAgICAgICBmbGFncy5mb3JtYXQgPSBmbGFncy5pbnRlcm5hbGZvcm1hdCA9IENIQU5ORUxTX0ZPUk1BVFtmbGFncy5jaGFubmVsc11cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhhc0Zvcm1hdCAmJiBoYXNDaGFubmVscykge1xuICAgICAgY2hlY2skMShcbiAgICAgICAgZmxhZ3MuY2hhbm5lbHMgPT09IEZPUk1BVF9DSEFOTkVMU1tmbGFncy5mb3JtYXRdLFxuICAgICAgICAnbnVtYmVyIG9mIGNoYW5uZWxzIGluY29uc2lzdGVudCB3aXRoIHNwZWNpZmllZCBmb3JtYXQnKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNldEZsYWdzIChmbGFncykge1xuICAgIGdsLnBpeGVsU3RvcmVpKEdMX1VOUEFDS19GTElQX1lfV0VCR0wsIGZsYWdzLmZsaXBZKVxuICAgIGdsLnBpeGVsU3RvcmVpKEdMX1VOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgZmxhZ3MucHJlbXVsdGlwbHlBbHBoYSlcbiAgICBnbC5waXhlbFN0b3JlaShHTF9VTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMLCBmbGFncy5jb2xvclNwYWNlKVxuICAgIGdsLnBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIGZsYWdzLnVucGFja0FsaWdubWVudClcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gVGV4IGltYWdlIGRhdGFcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBmdW5jdGlvbiBUZXhJbWFnZSAoKSB7XG4gICAgVGV4RmxhZ3MuY2FsbCh0aGlzKVxuXG4gICAgdGhpcy54T2Zmc2V0ID0gMFxuICAgIHRoaXMueU9mZnNldCA9IDBcblxuICAgIC8vIGRhdGFcbiAgICB0aGlzLmRhdGEgPSBudWxsXG4gICAgdGhpcy5uZWVkc0ZyZWUgPSBmYWxzZVxuXG4gICAgLy8gaHRtbCBlbGVtZW50XG4gICAgdGhpcy5lbGVtZW50ID0gbnVsbFxuXG4gICAgLy8gY29weVRleEltYWdlIGluZm9cbiAgICB0aGlzLm5lZWRzQ29weSA9IGZhbHNlXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUltYWdlIChpbWFnZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXRhID0gbnVsbFxuICAgIGlmIChpc1BpeGVsRGF0YShvcHRpb25zKSkge1xuICAgICAgZGF0YSA9IG9wdGlvbnNcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGNoZWNrJDEudHlwZShvcHRpb25zLCAnb2JqZWN0JywgJ2ludmFsaWQgcGl4ZWwgZGF0YSB0eXBlJylcbiAgICAgIHBhcnNlRmxhZ3MoaW1hZ2UsIG9wdGlvbnMpXG4gICAgICBpZiAoJ3gnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgaW1hZ2UueE9mZnNldCA9IG9wdGlvbnMueCB8IDBcbiAgICAgIH1cbiAgICAgIGlmICgneScgaW4gb3B0aW9ucykge1xuICAgICAgICBpbWFnZS55T2Zmc2V0ID0gb3B0aW9ucy55IHwgMFxuICAgICAgfVxuICAgICAgaWYgKGlzUGl4ZWxEYXRhKG9wdGlvbnMuZGF0YSkpIHtcbiAgICAgICAgZGF0YSA9IG9wdGlvbnMuZGF0YVxuICAgICAgfVxuICAgIH1cblxuICAgIGNoZWNrJDEoXG4gICAgICAhaW1hZ2UuY29tcHJlc3NlZCB8fFxuICAgICAgZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXksXG4gICAgICAnY29tcHJlc3NlZCB0ZXh0dXJlIGRhdGEgbXVzdCBiZSBzdG9yZWQgaW4gYSB1aW50OGFycmF5JylcblxuICAgIGlmIChvcHRpb25zLmNvcHkpIHtcbiAgICAgIGNoZWNrJDEoIWRhdGEsICdjYW4gbm90IHNwZWNpZnkgY29weSBhbmQgZGF0YSBmaWVsZCBmb3IgdGhlIHNhbWUgdGV4dHVyZScpXG4gICAgICB2YXIgdmlld1cgPSBjb250ZXh0U3RhdGUudmlld3BvcnRXaWR0aFxuICAgICAgdmFyIHZpZXdIID0gY29udGV4dFN0YXRlLnZpZXdwb3J0SGVpZ2h0XG4gICAgICBpbWFnZS53aWR0aCA9IGltYWdlLndpZHRoIHx8ICh2aWV3VyAtIGltYWdlLnhPZmZzZXQpXG4gICAgICBpbWFnZS5oZWlnaHQgPSBpbWFnZS5oZWlnaHQgfHwgKHZpZXdIIC0gaW1hZ2UueU9mZnNldClcbiAgICAgIGltYWdlLm5lZWRzQ29weSA9IHRydWVcbiAgICAgIGNoZWNrJDEoaW1hZ2UueE9mZnNldCA+PSAwICYmIGltYWdlLnhPZmZzZXQgPCB2aWV3VyAmJlxuICAgICAgICAgICAgaW1hZ2UueU9mZnNldCA+PSAwICYmIGltYWdlLnlPZmZzZXQgPCB2aWV3SCAmJlxuICAgICAgICAgICAgaW1hZ2Uud2lkdGggPiAwICYmIGltYWdlLndpZHRoIDw9IHZpZXdXICYmXG4gICAgICAgICAgICBpbWFnZS5oZWlnaHQgPiAwICYmIGltYWdlLmhlaWdodCA8PSB2aWV3SCxcbiAgICAgICdjb3B5IHRleHR1cmUgcmVhZCBvdXQgb2YgYm91bmRzJylcbiAgICB9IGVsc2UgaWYgKCFkYXRhKSB7XG4gICAgICBpbWFnZS53aWR0aCA9IGltYWdlLndpZHRoIHx8IDFcbiAgICAgIGltYWdlLmhlaWdodCA9IGltYWdlLmhlaWdodCB8fCAxXG4gICAgICBpbWFnZS5jaGFubmVscyA9IGltYWdlLmNoYW5uZWxzIHx8IDRcbiAgICB9IGVsc2UgaWYgKGlzVHlwZWRBcnJheShkYXRhKSkge1xuICAgICAgaW1hZ2UuY2hhbm5lbHMgPSBpbWFnZS5jaGFubmVscyB8fCA0XG4gICAgICBpbWFnZS5kYXRhID0gZGF0YVxuICAgICAgaWYgKCEoJ3R5cGUnIGluIG9wdGlvbnMpICYmIGltYWdlLnR5cGUgPT09IEdMX1VOU0lHTkVEX0JZVEUkNSkge1xuICAgICAgICBpbWFnZS50eXBlID0gdHlwZWRBcnJheUNvZGUkMShkYXRhKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNOdW1lcmljQXJyYXkoZGF0YSkpIHtcbiAgICAgIGltYWdlLmNoYW5uZWxzID0gaW1hZ2UuY2hhbm5lbHMgfHwgNFxuICAgICAgY29udmVydERhdGEoaW1hZ2UsIGRhdGEpXG4gICAgICBpbWFnZS5hbGlnbm1lbnQgPSAxXG4gICAgICBpbWFnZS5uZWVkc0ZyZWUgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChpc05EQXJyYXlMaWtlKGRhdGEpKSB7XG4gICAgICB2YXIgYXJyYXkgPSBkYXRhLmRhdGFcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheSkgJiYgaW1hZ2UudHlwZSA9PT0gR0xfVU5TSUdORURfQllURSQ1KSB7XG4gICAgICAgIGltYWdlLnR5cGUgPSB0eXBlZEFycmF5Q29kZSQxKGFycmF5KVxuICAgICAgfVxuICAgICAgdmFyIHNoYXBlID0gZGF0YS5zaGFwZVxuICAgICAgdmFyIHN0cmlkZSA9IGRhdGEuc3RyaWRlXG4gICAgICB2YXIgc2hhcGVYLCBzaGFwZVksIHNoYXBlQywgc3RyaWRlWCwgc3RyaWRlWSwgc3RyaWRlQ1xuICAgICAgaWYgKHNoYXBlLmxlbmd0aCA9PT0gMykge1xuICAgICAgICBzaGFwZUMgPSBzaGFwZVsyXVxuICAgICAgICBzdHJpZGVDID0gc3RyaWRlWzJdXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGVjayQxKHNoYXBlLmxlbmd0aCA9PT0gMiwgJ2ludmFsaWQgbmRhcnJheSBwaXhlbCBkYXRhLCBtdXN0IGJlIDIgb3IgM0QnKVxuICAgICAgICBzaGFwZUMgPSAxXG4gICAgICAgIHN0cmlkZUMgPSAxXG4gICAgICB9XG4gICAgICBzaGFwZVggPSBzaGFwZVswXVxuICAgICAgc2hhcGVZID0gc2hhcGVbMV1cbiAgICAgIHN0cmlkZVggPSBzdHJpZGVbMF1cbiAgICAgIHN0cmlkZVkgPSBzdHJpZGVbMV1cbiAgICAgIGltYWdlLmFsaWdubWVudCA9IDFcbiAgICAgIGltYWdlLndpZHRoID0gc2hhcGVYXG4gICAgICBpbWFnZS5oZWlnaHQgPSBzaGFwZVlcbiAgICAgIGltYWdlLmNoYW5uZWxzID0gc2hhcGVDXG4gICAgICBpbWFnZS5mb3JtYXQgPSBpbWFnZS5pbnRlcm5hbGZvcm1hdCA9IENIQU5ORUxTX0ZPUk1BVFtzaGFwZUNdXG4gICAgICBpbWFnZS5uZWVkc0ZyZWUgPSB0cnVlXG4gICAgICB0cmFuc3Bvc2VEYXRhKGltYWdlLCBhcnJheSwgc3RyaWRlWCwgc3RyaWRlWSwgc3RyaWRlQywgZGF0YS5vZmZzZXQpXG4gICAgfSBlbHNlIGlmIChpc0NhbnZhc0VsZW1lbnQoZGF0YSkgfHwgaXNPZmZzY3JlZW5DYW52YXMoZGF0YSkgfHwgaXNDb250ZXh0MkQoZGF0YSkpIHtcbiAgICAgIGlmIChpc0NhbnZhc0VsZW1lbnQoZGF0YSkgfHwgaXNPZmZzY3JlZW5DYW52YXMoZGF0YSkpIHtcbiAgICAgICAgaW1hZ2UuZWxlbWVudCA9IGRhdGFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGltYWdlLmVsZW1lbnQgPSBkYXRhLmNhbnZhc1xuICAgICAgfVxuICAgICAgaW1hZ2Uud2lkdGggPSBpbWFnZS5lbGVtZW50LndpZHRoXG4gICAgICBpbWFnZS5oZWlnaHQgPSBpbWFnZS5lbGVtZW50LmhlaWdodFxuICAgICAgaW1hZ2UuY2hhbm5lbHMgPSA0XG4gICAgfSBlbHNlIGlmIChpc0JpdG1hcChkYXRhKSkge1xuICAgICAgaW1hZ2UuZWxlbWVudCA9IGRhdGFcbiAgICAgIGltYWdlLndpZHRoID0gZGF0YS53aWR0aFxuICAgICAgaW1hZ2UuaGVpZ2h0ID0gZGF0YS5oZWlnaHRcbiAgICAgIGltYWdlLmNoYW5uZWxzID0gNFxuICAgIH0gZWxzZSBpZiAoaXNJbWFnZUVsZW1lbnQoZGF0YSkpIHtcbiAgICAgIGltYWdlLmVsZW1lbnQgPSBkYXRhXG4gICAgICBpbWFnZS53aWR0aCA9IGRhdGEubmF0dXJhbFdpZHRoXG4gICAgICBpbWFnZS5oZWlnaHQgPSBkYXRhLm5hdHVyYWxIZWlnaHRcbiAgICAgIGltYWdlLmNoYW5uZWxzID0gNFxuICAgIH0gZWxzZSBpZiAoaXNWaWRlb0VsZW1lbnQoZGF0YSkpIHtcbiAgICAgIGltYWdlLmVsZW1lbnQgPSBkYXRhXG4gICAgICBpbWFnZS53aWR0aCA9IGRhdGEudmlkZW9XaWR0aFxuICAgICAgaW1hZ2UuaGVpZ2h0ID0gZGF0YS52aWRlb0hlaWdodFxuICAgICAgaW1hZ2UuY2hhbm5lbHMgPSA0XG4gICAgfSBlbHNlIGlmIChpc1JlY3RBcnJheShkYXRhKSkge1xuICAgICAgdmFyIHcgPSBpbWFnZS53aWR0aCB8fCBkYXRhWzBdLmxlbmd0aFxuICAgICAgdmFyIGggPSBpbWFnZS5oZWlnaHQgfHwgZGF0YS5sZW5ndGhcbiAgICAgIHZhciBjID0gaW1hZ2UuY2hhbm5lbHNcbiAgICAgIGlmIChpc0FycmF5TGlrZShkYXRhWzBdWzBdKSkge1xuICAgICAgICBjID0gYyB8fCBkYXRhWzBdWzBdLmxlbmd0aFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYyA9IGMgfHwgMVxuICAgICAgfVxuICAgICAgdmFyIGFycmF5U2hhcGUgPSBmbGF0dGVuVXRpbHMuc2hhcGUoZGF0YSlcbiAgICAgIHZhciBuID0gMVxuICAgICAgZm9yICh2YXIgZGQgPSAwOyBkZCA8IGFycmF5U2hhcGUubGVuZ3RoOyArK2RkKSB7XG4gICAgICAgIG4gKj0gYXJyYXlTaGFwZVtkZF1cbiAgICAgIH1cbiAgICAgIHZhciBhbGxvY0RhdGEgPSBwcmVDb252ZXJ0KGltYWdlLCBuKVxuICAgICAgZmxhdHRlblV0aWxzLmZsYXR0ZW4oZGF0YSwgYXJyYXlTaGFwZSwgJycsIGFsbG9jRGF0YSlcbiAgICAgIHBvc3RDb252ZXJ0KGltYWdlLCBhbGxvY0RhdGEpXG4gICAgICBpbWFnZS5hbGlnbm1lbnQgPSAxXG4gICAgICBpbWFnZS53aWR0aCA9IHdcbiAgICAgIGltYWdlLmhlaWdodCA9IGhcbiAgICAgIGltYWdlLmNoYW5uZWxzID0gY1xuICAgICAgaW1hZ2UuZm9ybWF0ID0gaW1hZ2UuaW50ZXJuYWxmb3JtYXQgPSBDSEFOTkVMU19GT1JNQVRbY11cbiAgICAgIGltYWdlLm5lZWRzRnJlZSA9IHRydWVcbiAgICB9XG5cbiAgICBpZiAoaW1hZ2UudHlwZSA9PT0gR0xfRkxPQVQkNCkge1xuICAgICAgY2hlY2skMShsaW1pdHMuZXh0ZW5zaW9ucy5pbmRleE9mKCdvZXNfdGV4dHVyZV9mbG9hdCcpID49IDAsXG4gICAgICAgICdvZXNfdGV4dHVyZV9mbG9hdCBleHRlbnNpb24gbm90IGVuYWJsZWQnKVxuICAgIH0gZWxzZSBpZiAoaW1hZ2UudHlwZSA9PT0gR0xfSEFMRl9GTE9BVF9PRVMkMSkge1xuICAgICAgY2hlY2skMShsaW1pdHMuZXh0ZW5zaW9ucy5pbmRleE9mKCdvZXNfdGV4dHVyZV9oYWxmX2Zsb2F0JykgPj0gMCxcbiAgICAgICAgJ29lc190ZXh0dXJlX2hhbGZfZmxvYXQgZXh0ZW5zaW9uIG5vdCBlbmFibGVkJylcbiAgICB9XG5cbiAgICAvLyBkbyBjb21wcmVzc2VkIHRleHR1cmUgIHZhbGlkYXRpb24gaGVyZS5cbiAgfVxuXG4gIGZ1bmN0aW9uIHNldEltYWdlIChpbmZvLCB0YXJnZXQsIG1pcGxldmVsKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBpbmZvLmVsZW1lbnRcbiAgICB2YXIgZGF0YSA9IGluZm8uZGF0YVxuICAgIHZhciBpbnRlcm5hbGZvcm1hdCA9IGluZm8uaW50ZXJuYWxmb3JtYXRcbiAgICB2YXIgZm9ybWF0ID0gaW5mby5mb3JtYXRcbiAgICB2YXIgdHlwZSA9IGluZm8udHlwZVxuICAgIHZhciB3aWR0aCA9IGluZm8ud2lkdGhcbiAgICB2YXIgaGVpZ2h0ID0gaW5mby5oZWlnaHRcblxuICAgIHNldEZsYWdzKGluZm8pXG5cbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgZ2wudGV4SW1hZ2UyRCh0YXJnZXQsIG1pcGxldmVsLCBmb3JtYXQsIGZvcm1hdCwgdHlwZSwgZWxlbWVudClcbiAgICB9IGVsc2UgaWYgKGluZm8uY29tcHJlc3NlZCkge1xuICAgICAgZ2wuY29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBtaXBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGRhdGEpXG4gICAgfSBlbHNlIGlmIChpbmZvLm5lZWRzQ29weSkge1xuICAgICAgcmVnbFBvbGwoKVxuICAgICAgZ2wuY29weVRleEltYWdlMkQoXG4gICAgICAgIHRhcmdldCwgbWlwbGV2ZWwsIGZvcm1hdCwgaW5mby54T2Zmc2V0LCBpbmZvLnlPZmZzZXQsIHdpZHRoLCBoZWlnaHQsIDApXG4gICAgfSBlbHNlIHtcbiAgICAgIGdsLnRleEltYWdlMkQodGFyZ2V0LCBtaXBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUsIGRhdGEgfHwgbnVsbClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZXRTdWJJbWFnZSAoaW5mbywgdGFyZ2V0LCB4LCB5LCBtaXBsZXZlbCkge1xuICAgIHZhciBlbGVtZW50ID0gaW5mby5lbGVtZW50XG4gICAgdmFyIGRhdGEgPSBpbmZvLmRhdGFcbiAgICB2YXIgaW50ZXJuYWxmb3JtYXQgPSBpbmZvLmludGVybmFsZm9ybWF0XG4gICAgdmFyIGZvcm1hdCA9IGluZm8uZm9ybWF0XG4gICAgdmFyIHR5cGUgPSBpbmZvLnR5cGVcbiAgICB2YXIgd2lkdGggPSBpbmZvLndpZHRoXG4gICAgdmFyIGhlaWdodCA9IGluZm8uaGVpZ2h0XG5cbiAgICBzZXRGbGFncyhpbmZvKVxuXG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGdsLnRleFN1YkltYWdlMkQoXG4gICAgICAgIHRhcmdldCwgbWlwbGV2ZWwsIHgsIHksIGZvcm1hdCwgdHlwZSwgZWxlbWVudClcbiAgICB9IGVsc2UgaWYgKGluZm8uY29tcHJlc3NlZCkge1xuICAgICAgZ2wuY29tcHJlc3NlZFRleFN1YkltYWdlMkQoXG4gICAgICAgIHRhcmdldCwgbWlwbGV2ZWwsIHgsIHksIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxuICAgIH0gZWxzZSBpZiAoaW5mby5uZWVkc0NvcHkpIHtcbiAgICAgIHJlZ2xQb2xsKClcbiAgICAgIGdsLmNvcHlUZXhTdWJJbWFnZTJEKFxuICAgICAgICB0YXJnZXQsIG1pcGxldmVsLCB4LCB5LCBpbmZvLnhPZmZzZXQsIGluZm8ueU9mZnNldCwgd2lkdGgsIGhlaWdodClcbiAgICB9IGVsc2Uge1xuICAgICAgZ2wudGV4U3ViSW1hZ2UyRChcbiAgICAgICAgdGFyZ2V0LCBtaXBsZXZlbCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKVxuICAgIH1cbiAgfVxuXG4gIC8vIHRleEltYWdlIHBvb2xcbiAgdmFyIGltYWdlUG9vbCA9IFtdXG5cbiAgZnVuY3Rpb24gYWxsb2NJbWFnZSAoKSB7XG4gICAgcmV0dXJuIGltYWdlUG9vbC5wb3AoKSB8fCBuZXcgVGV4SW1hZ2UoKVxuICB9XG5cbiAgZnVuY3Rpb24gZnJlZUltYWdlIChpbWFnZSkge1xuICAgIGlmIChpbWFnZS5uZWVkc0ZyZWUpIHtcbiAgICAgIHBvb2wuZnJlZVR5cGUoaW1hZ2UuZGF0YSlcbiAgICB9XG4gICAgVGV4SW1hZ2UuY2FsbChpbWFnZSlcbiAgICBpbWFnZVBvb2wucHVzaChpbWFnZSlcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTWlwIG1hcFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGZ1bmN0aW9uIE1pcE1hcCAoKSB7XG4gICAgVGV4RmxhZ3MuY2FsbCh0aGlzKVxuXG4gICAgdGhpcy5nZW5NaXBtYXBzID0gZmFsc2VcbiAgICB0aGlzLm1pcG1hcEhpbnQgPSBHTF9ET05UX0NBUkVcbiAgICB0aGlzLm1pcG1hc2sgPSAwXG4gICAgdGhpcy5pbWFnZXMgPSBBcnJheSgxNilcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTWlwTWFwRnJvbVNoYXBlIChtaXBtYXAsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICB2YXIgaW1nID0gbWlwbWFwLmltYWdlc1swXSA9IGFsbG9jSW1hZ2UoKVxuICAgIG1pcG1hcC5taXBtYXNrID0gMVxuICAgIGltZy53aWR0aCA9IG1pcG1hcC53aWR0aCA9IHdpZHRoXG4gICAgaW1nLmhlaWdodCA9IG1pcG1hcC5oZWlnaHQgPSBoZWlnaHRcbiAgICBpbWcuY2hhbm5lbHMgPSBtaXBtYXAuY2hhbm5lbHMgPSA0XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZU1pcE1hcEZyb21PYmplY3QgKG1pcG1hcCwgb3B0aW9ucykge1xuICAgIHZhciBpbWdEYXRhID0gbnVsbFxuICAgIGlmIChpc1BpeGVsRGF0YShvcHRpb25zKSkge1xuICAgICAgaW1nRGF0YSA9IG1pcG1hcC5pbWFnZXNbMF0gPSBhbGxvY0ltYWdlKClcbiAgICAgIGNvcHlGbGFncyhpbWdEYXRhLCBtaXBtYXApXG4gICAgICBwYXJzZUltYWdlKGltZ0RhdGEsIG9wdGlvbnMpXG4gICAgICBtaXBtYXAubWlwbWFzayA9IDFcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VGbGFncyhtaXBtYXAsIG9wdGlvbnMpXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLm1pcG1hcCkpIHtcbiAgICAgICAgdmFyIG1pcERhdGEgPSBvcHRpb25zLm1pcG1hcFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1pcERhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBpbWdEYXRhID0gbWlwbWFwLmltYWdlc1tpXSA9IGFsbG9jSW1hZ2UoKVxuICAgICAgICAgIGNvcHlGbGFncyhpbWdEYXRhLCBtaXBtYXApXG4gICAgICAgICAgaW1nRGF0YS53aWR0aCA+Pj0gaVxuICAgICAgICAgIGltZ0RhdGEuaGVpZ2h0ID4+PSBpXG4gICAgICAgICAgcGFyc2VJbWFnZShpbWdEYXRhLCBtaXBEYXRhW2ldKVxuICAgICAgICAgIG1pcG1hcC5taXBtYXNrIHw9ICgxIDw8IGkpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGltZ0RhdGEgPSBtaXBtYXAuaW1hZ2VzWzBdID0gYWxsb2NJbWFnZSgpXG4gICAgICAgIGNvcHlGbGFncyhpbWdEYXRhLCBtaXBtYXApXG4gICAgICAgIHBhcnNlSW1hZ2UoaW1nRGF0YSwgb3B0aW9ucylcbiAgICAgICAgbWlwbWFwLm1pcG1hc2sgPSAxXG4gICAgICB9XG4gICAgfVxuICAgIGNvcHlGbGFncyhtaXBtYXAsIG1pcG1hcC5pbWFnZXNbMF0pXG5cbiAgICAvLyBGb3IgdGV4dHVyZXMgb2YgdGhlIGNvbXByZXNzZWQgZm9ybWF0IFdFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjXG4gICAgLy8gd2UgbXVzdCBoYXZlIHRoYXRcbiAgICAvL1xuICAgIC8vIFwiV2hlbiBsZXZlbCBlcXVhbHMgemVybyB3aWR0aCBhbmQgaGVpZ2h0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0LlxuICAgIC8vIFdoZW4gbGV2ZWwgaXMgZ3JlYXRlciB0aGFuIDAgd2lkdGggYW5kIGhlaWdodCBtdXN0IGJlIDAsIDEsIDIgb3IgYSBtdWx0aXBsZSBvZiA0LiBcIlxuICAgIC8vXG4gICAgLy8gYnV0IHdlIGRvIG5vdCB5ZXQgc3VwcG9ydCBoYXZpbmcgbXVsdGlwbGUgbWlwbWFwIGxldmVscyBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcyxcbiAgICAvLyBzbyB3ZSBvbmx5IHRlc3QgZm9yIGxldmVsIHplcm8uXG5cbiAgICBpZiAoXG4gICAgICBtaXBtYXAuY29tcHJlc3NlZCAmJlxuICAgICAgKFxuICAgICAgICBtaXBtYXAuaW50ZXJuYWxmb3JtYXQgPT09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQgfHxcbiAgICAgICAgbWlwbWFwLmludGVybmFsZm9ybWF0ID09PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCB8fFxuICAgICAgICBtaXBtYXAuaW50ZXJuYWxmb3JtYXQgPT09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUIHx8XG4gICAgICAgIG1pcG1hcC5pbnRlcm5hbGZvcm1hdCA9PT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFRcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGNoZWNrJDEobWlwbWFwLndpZHRoICUgNCA9PT0gMCAmJiBtaXBtYXAuaGVpZ2h0ICUgNCA9PT0gMCxcbiAgICAgICAgJ2ZvciBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0cywgbWlwbWFwIGxldmVsIDAgbXVzdCBoYXZlIHdpZHRoIGFuZCBoZWlnaHQgdGhhdCBhcmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZXRNaXBNYXAgKG1pcG1hcCwgdGFyZ2V0KSB7XG4gICAgdmFyIGltYWdlcyA9IG1pcG1hcC5pbWFnZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKCFpbWFnZXNbaV0pIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBzZXRJbWFnZShpbWFnZXNbaV0sIHRhcmdldCwgaSlcbiAgICB9XG4gIH1cblxuICB2YXIgbWlwUG9vbCA9IFtdXG5cbiAgZnVuY3Rpb24gYWxsb2NNaXBNYXAgKCkge1xuICAgIHZhciByZXN1bHQgPSBtaXBQb29sLnBvcCgpIHx8IG5ldyBNaXBNYXAoKVxuICAgIFRleEZsYWdzLmNhbGwocmVzdWx0KVxuICAgIHJlc3VsdC5taXBtYXNrID0gMFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgcmVzdWx0LmltYWdlc1tpXSA9IG51bGxcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgZnVuY3Rpb24gZnJlZU1pcE1hcCAobWlwbWFwKSB7XG4gICAgdmFyIGltYWdlcyA9IG1pcG1hcC5pbWFnZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKGltYWdlc1tpXSkge1xuICAgICAgICBmcmVlSW1hZ2UoaW1hZ2VzW2ldKVxuICAgICAgfVxuICAgICAgaW1hZ2VzW2ldID0gbnVsbFxuICAgIH1cbiAgICBtaXBQb29sLnB1c2gobWlwbWFwKVxuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBUZXggaW5mb1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGZ1bmN0aW9uIFRleEluZm8gKCkge1xuICAgIHRoaXMubWluRmlsdGVyID0gR0xfTkVBUkVTVCQxXG4gICAgdGhpcy5tYWdGaWx0ZXIgPSBHTF9ORUFSRVNUJDFcblxuICAgIHRoaXMud3JhcFMgPSBHTF9DTEFNUF9UT19FREdFJDFcbiAgICB0aGlzLndyYXBUID0gR0xfQ0xBTVBfVE9fRURHRSQxXG5cbiAgICB0aGlzLmFuaXNvdHJvcGljID0gMVxuXG4gICAgdGhpcy5nZW5NaXBtYXBzID0gZmFsc2VcbiAgICB0aGlzLm1pcG1hcEhpbnQgPSBHTF9ET05UX0NBUkVcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlVGV4SW5mbyAoaW5mbywgb3B0aW9ucykge1xuICAgIGlmICgnbWluJyBpbiBvcHRpb25zKSB7XG4gICAgICB2YXIgbWluRmlsdGVyID0gb3B0aW9ucy5taW5cbiAgICAgIGNoZWNrJDEucGFyYW1ldGVyKG1pbkZpbHRlciwgbWluRmlsdGVycylcbiAgICAgIGluZm8ubWluRmlsdGVyID0gbWluRmlsdGVyc1ttaW5GaWx0ZXJdXG4gICAgICBpZiAoTUlQTUFQX0ZJTFRFUlMuaW5kZXhPZihpbmZvLm1pbkZpbHRlcikgPj0gMCAmJiAhKCdmYWNlcycgaW4gb3B0aW9ucykpIHtcbiAgICAgICAgaW5mby5nZW5NaXBtYXBzID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICgnbWFnJyBpbiBvcHRpb25zKSB7XG4gICAgICB2YXIgbWFnRmlsdGVyID0gb3B0aW9ucy5tYWdcbiAgICAgIGNoZWNrJDEucGFyYW1ldGVyKG1hZ0ZpbHRlciwgbWFnRmlsdGVycylcbiAgICAgIGluZm8ubWFnRmlsdGVyID0gbWFnRmlsdGVyc1ttYWdGaWx0ZXJdXG4gICAgfVxuXG4gICAgdmFyIHdyYXBTID0gaW5mby53cmFwU1xuICAgIHZhciB3cmFwVCA9IGluZm8ud3JhcFRcbiAgICBpZiAoJ3dyYXAnIGluIG9wdGlvbnMpIHtcbiAgICAgIHZhciB3cmFwID0gb3B0aW9ucy53cmFwXG4gICAgICBpZiAodHlwZW9mIHdyYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNoZWNrJDEucGFyYW1ldGVyKHdyYXAsIHdyYXBNb2RlcylcbiAgICAgICAgd3JhcFMgPSB3cmFwVCA9IHdyYXBNb2Rlc1t3cmFwXVxuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHdyYXApKSB7XG4gICAgICAgIGNoZWNrJDEucGFyYW1ldGVyKHdyYXBbMF0sIHdyYXBNb2RlcylcbiAgICAgICAgY2hlY2skMS5wYXJhbWV0ZXIod3JhcFsxXSwgd3JhcE1vZGVzKVxuICAgICAgICB3cmFwUyA9IHdyYXBNb2Rlc1t3cmFwWzBdXVxuICAgICAgICB3cmFwVCA9IHdyYXBNb2Rlc1t3cmFwWzFdXVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoJ3dyYXBTJyBpbiBvcHRpb25zKSB7XG4gICAgICAgIHZhciBvcHRXcmFwUyA9IG9wdGlvbnMud3JhcFNcbiAgICAgICAgY2hlY2skMS5wYXJhbWV0ZXIob3B0V3JhcFMsIHdyYXBNb2RlcylcbiAgICAgICAgd3JhcFMgPSB3cmFwTW9kZXNbb3B0V3JhcFNdXG4gICAgICB9XG4gICAgICBpZiAoJ3dyYXBUJyBpbiBvcHRpb25zKSB7XG4gICAgICAgIHZhciBvcHRXcmFwVCA9IG9wdGlvbnMud3JhcFRcbiAgICAgICAgY2hlY2skMS5wYXJhbWV0ZXIob3B0V3JhcFQsIHdyYXBNb2RlcylcbiAgICAgICAgd3JhcFQgPSB3cmFwTW9kZXNbb3B0V3JhcFRdXG4gICAgICB9XG4gICAgfVxuICAgIGluZm8ud3JhcFMgPSB3cmFwU1xuICAgIGluZm8ud3JhcFQgPSB3cmFwVFxuXG4gICAgaWYgKCdhbmlzb3Ryb3BpYycgaW4gb3B0aW9ucykge1xuICAgICAgdmFyIGFuaXNvdHJvcGljID0gb3B0aW9ucy5hbmlzb3Ryb3BpY1xuICAgICAgY2hlY2skMSh0eXBlb2YgYW5pc290cm9waWMgPT09ICdudW1iZXInICYmXG4gICAgICAgICBhbmlzb3Ryb3BpYyA+PSAxICYmIGFuaXNvdHJvcGljIDw9IGxpbWl0cy5tYXhBbmlzb3Ryb3BpYyxcbiAgICAgICdhbmlzbyBzYW1wbGVzIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAnKVxuICAgICAgaW5mby5hbmlzb3Ryb3BpYyA9IG9wdGlvbnMuYW5pc290cm9waWNcbiAgICB9XG5cbiAgICBpZiAoJ21pcG1hcCcgaW4gb3B0aW9ucykge1xuICAgICAgdmFyIGhhc01pcE1hcCA9IGZhbHNlXG4gICAgICBzd2l0Y2ggKHR5cGVvZiBvcHRpb25zLm1pcG1hcCkge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgIGNoZWNrJDEucGFyYW1ldGVyKG9wdGlvbnMubWlwbWFwLCBtaXBtYXBIaW50LFxuICAgICAgICAgICAgJ2ludmFsaWQgbWlwbWFwIGhpbnQnKVxuICAgICAgICAgIGluZm8ubWlwbWFwSGludCA9IG1pcG1hcEhpbnRbb3B0aW9ucy5taXBtYXBdXG4gICAgICAgICAgaW5mby5nZW5NaXBtYXBzID0gdHJ1ZVxuICAgICAgICAgIGhhc01pcE1hcCA9IHRydWVcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgIGhhc01pcE1hcCA9IGluZm8uZ2VuTWlwbWFwcyA9IG9wdGlvbnMubWlwbWFwXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgIGNoZWNrJDEoQXJyYXkuaXNBcnJheShvcHRpb25zLm1pcG1hcCksICdpbnZhbGlkIG1pcG1hcCB0eXBlJylcbiAgICAgICAgICBpbmZvLmdlbk1pcG1hcHMgPSBmYWxzZVxuICAgICAgICAgIGhhc01pcE1hcCA9IHRydWVcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY2hlY2skMS5yYWlzZSgnaW52YWxpZCBtaXBtYXAgdHlwZScpXG4gICAgICB9XG4gICAgICBpZiAoaGFzTWlwTWFwICYmICEoJ21pbicgaW4gb3B0aW9ucykpIHtcbiAgICAgICAgaW5mby5taW5GaWx0ZXIgPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUJDFcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZXRUZXhJbmZvIChpbmZvLCB0YXJnZXQpIHtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBpbmZvLm1pbkZpbHRlcilcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBpbmZvLm1hZ0ZpbHRlcilcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIGluZm8ud3JhcFMpXG4gICAgZ2wudGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBpbmZvLndyYXBUKVxuICAgIGlmIChleHRlbnNpb25zLmV4dF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYykge1xuICAgICAgZ2wudGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdMX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULCBpbmZvLmFuaXNvdHJvcGljKVxuICAgIH1cbiAgICBpZiAoaW5mby5nZW5NaXBtYXBzKSB7XG4gICAgICBnbC5oaW50KEdMX0dFTkVSQVRFX01JUE1BUF9ISU5ULCBpbmZvLm1pcG1hcEhpbnQpXG4gICAgICBnbC5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpXG4gICAgfVxuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBGdWxsIHRleHR1cmUgb2JqZWN0XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgdmFyIHRleHR1cmVDb3VudCA9IDBcbiAgdmFyIHRleHR1cmVTZXQgPSB7fVxuICB2YXIgbnVtVGV4VW5pdHMgPSBsaW1pdHMubWF4VGV4dHVyZVVuaXRzXG4gIHZhciB0ZXh0dXJlVW5pdHMgPSBBcnJheShudW1UZXhVbml0cykubWFwKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9KVxuXG4gIGZ1bmN0aW9uIFJFR0xUZXh0dXJlICh0YXJnZXQpIHtcbiAgICBUZXhGbGFncy5jYWxsKHRoaXMpXG4gICAgdGhpcy5taXBtYXNrID0gMFxuICAgIHRoaXMuaW50ZXJuYWxmb3JtYXQgPSBHTF9SR0JBJDFcblxuICAgIHRoaXMuaWQgPSB0ZXh0dXJlQ291bnQrK1xuXG4gICAgdGhpcy5yZWZDb3VudCA9IDFcblxuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0XG4gICAgdGhpcy50ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpXG5cbiAgICB0aGlzLnVuaXQgPSAtMVxuICAgIHRoaXMuYmluZENvdW50ID0gMFxuXG4gICAgdGhpcy50ZXhJbmZvID0gbmV3IFRleEluZm8oKVxuXG4gICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICB0aGlzLnN0YXRzID0geyBzaXplOiAwIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0ZW1wQmluZCAodGV4dHVyZSkge1xuICAgIGdsLmFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTAkMSlcbiAgICBnbC5iaW5kVGV4dHVyZSh0ZXh0dXJlLnRhcmdldCwgdGV4dHVyZS50ZXh0dXJlKVxuICB9XG5cbiAgZnVuY3Rpb24gdGVtcFJlc3RvcmUgKCkge1xuICAgIHZhciBwcmV2ID0gdGV4dHVyZVVuaXRzWzBdXG4gICAgaWYgKHByZXYpIHtcbiAgICAgIGdsLmJpbmRUZXh0dXJlKHByZXYudGFyZ2V0LCBwcmV2LnRleHR1cmUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGdsLmJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQkMSwgbnVsbClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95ICh0ZXh0dXJlKSB7XG4gICAgdmFyIGhhbmRsZSA9IHRleHR1cmUudGV4dHVyZVxuICAgIGNoZWNrJDEoaGFuZGxlLCAnbXVzdCBub3QgZG91YmxlIGRlc3Ryb3kgdGV4dHVyZScpXG4gICAgdmFyIHVuaXQgPSB0ZXh0dXJlLnVuaXRcbiAgICB2YXIgdGFyZ2V0ID0gdGV4dHVyZS50YXJnZXRcbiAgICBpZiAodW5pdCA+PSAwKSB7XG4gICAgICBnbC5hY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwJDEgKyB1bml0KVxuICAgICAgZ2wuYmluZFRleHR1cmUodGFyZ2V0LCBudWxsKVxuICAgICAgdGV4dHVyZVVuaXRzW3VuaXRdID0gbnVsbFxuICAgIH1cbiAgICBnbC5kZWxldGVUZXh0dXJlKGhhbmRsZSlcbiAgICB0ZXh0dXJlLnRleHR1cmUgPSBudWxsXG4gICAgdGV4dHVyZS5wYXJhbXMgPSBudWxsXG4gICAgdGV4dHVyZS5waXhlbHMgPSBudWxsXG4gICAgdGV4dHVyZS5yZWZDb3VudCA9IDBcbiAgICBkZWxldGUgdGV4dHVyZVNldFt0ZXh0dXJlLmlkXVxuICAgIHN0YXRzLnRleHR1cmVDb3VudC0tXG4gIH1cblxuICBleHRlbmQoUkVHTFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgYmluZDogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRleHR1cmUgPSB0aGlzXG4gICAgICB0ZXh0dXJlLmJpbmRDb3VudCArPSAxXG4gICAgICB2YXIgdW5pdCA9IHRleHR1cmUudW5pdFxuICAgICAgaWYgKHVuaXQgPCAwKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtVGV4VW5pdHM7ICsraSkge1xuICAgICAgICAgIHZhciBvdGhlciA9IHRleHR1cmVVbml0c1tpXVxuICAgICAgICAgIGlmIChvdGhlcikge1xuICAgICAgICAgICAgaWYgKG90aGVyLmJpbmRDb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG90aGVyLnVuaXQgPSAtMVxuICAgICAgICAgIH1cbiAgICAgICAgICB0ZXh0dXJlVW5pdHNbaV0gPSB0ZXh0dXJlXG4gICAgICAgICAgdW5pdCA9IGlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGlmICh1bml0ID49IG51bVRleFVuaXRzKSB7XG4gICAgICAgICAgY2hlY2skMS5yYWlzZSgnaW5zdWZmaWNpZW50IG51bWJlciBvZiB0ZXh0dXJlIHVuaXRzJylcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLnByb2ZpbGUgJiYgc3RhdHMubWF4VGV4dHVyZVVuaXRzIDwgKHVuaXQgKyAxKSkge1xuICAgICAgICAgIHN0YXRzLm1heFRleHR1cmVVbml0cyA9IHVuaXQgKyAxIC8vICsxLCBzaW5jZSB0aGUgdW5pdHMgYXJlIHplcm8tYmFzZWRcbiAgICAgICAgfVxuICAgICAgICB0ZXh0dXJlLnVuaXQgPSB1bml0XG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTAkMSArIHVuaXQpXG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKHRleHR1cmUudGFyZ2V0LCB0ZXh0dXJlLnRleHR1cmUpXG4gICAgICB9XG4gICAgICByZXR1cm4gdW5pdFxuICAgIH0sXG5cbiAgICB1bmJpbmQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuYmluZENvdW50IC09IDFcbiAgICB9LFxuXG4gICAgZGVjUmVmOiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoLS10aGlzLnJlZkNvdW50IDw9IDApIHtcbiAgICAgICAgZGVzdHJveSh0aGlzKVxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICBmdW5jdGlvbiBjcmVhdGVUZXh0dXJlMkQgKGEsIGIpIHtcbiAgICB2YXIgdGV4dHVyZSA9IG5ldyBSRUdMVGV4dHVyZShHTF9URVhUVVJFXzJEJDEpXG4gICAgdGV4dHVyZVNldFt0ZXh0dXJlLmlkXSA9IHRleHR1cmVcbiAgICBzdGF0cy50ZXh0dXJlQ291bnQrK1xuXG4gICAgZnVuY3Rpb24gcmVnbFRleHR1cmUyRCAoYSwgYikge1xuICAgICAgdmFyIHRleEluZm8gPSB0ZXh0dXJlLnRleEluZm9cbiAgICAgIFRleEluZm8uY2FsbCh0ZXhJbmZvKVxuICAgICAgdmFyIG1pcERhdGEgPSBhbGxvY01pcE1hcCgpXG5cbiAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHBhcnNlTWlwTWFwRnJvbVNoYXBlKG1pcERhdGEsIGEgfCAwLCBiIHwgMClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJzZU1pcE1hcEZyb21TaGFwZShtaXBEYXRhLCBhIHwgMCwgYSB8IDApXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoYSkge1xuICAgICAgICBjaGVjayQxLnR5cGUoYSwgJ29iamVjdCcsICdpbnZhbGlkIGFyZ3VtZW50cyB0byByZWdsLnRleHR1cmUnKVxuICAgICAgICBwYXJzZVRleEluZm8odGV4SW5mbywgYSlcbiAgICAgICAgcGFyc2VNaXBNYXBGcm9tT2JqZWN0KG1pcERhdGEsIGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlbXB0eSB0ZXh0dXJlcyBnZXQgYXNzaWduZWQgYSBkZWZhdWx0IHNoYXBlIG9mIDF4MVxuICAgICAgICBwYXJzZU1pcE1hcEZyb21TaGFwZShtaXBEYXRhLCAxLCAxKVxuICAgICAgfVxuXG4gICAgICBpZiAodGV4SW5mby5nZW5NaXBtYXBzKSB7XG4gICAgICAgIG1pcERhdGEubWlwbWFzayA9IChtaXBEYXRhLndpZHRoIDw8IDEpIC0gMVxuICAgICAgfVxuICAgICAgdGV4dHVyZS5taXBtYXNrID0gbWlwRGF0YS5taXBtYXNrXG5cbiAgICAgIGNvcHlGbGFncyh0ZXh0dXJlLCBtaXBEYXRhKVxuXG4gICAgICBjaGVjayQxLnRleHR1cmUyRCh0ZXhJbmZvLCBtaXBEYXRhLCBsaW1pdHMpXG4gICAgICB0ZXh0dXJlLmludGVybmFsZm9ybWF0ID0gbWlwRGF0YS5pbnRlcm5hbGZvcm1hdFxuXG4gICAgICByZWdsVGV4dHVyZTJELndpZHRoID0gbWlwRGF0YS53aWR0aFxuICAgICAgcmVnbFRleHR1cmUyRC5oZWlnaHQgPSBtaXBEYXRhLmhlaWdodFxuXG4gICAgICB0ZW1wQmluZCh0ZXh0dXJlKVxuICAgICAgc2V0TWlwTWFwKG1pcERhdGEsIEdMX1RFWFRVUkVfMkQkMSlcbiAgICAgIHNldFRleEluZm8odGV4SW5mbywgR0xfVEVYVFVSRV8yRCQxKVxuICAgICAgdGVtcFJlc3RvcmUoKVxuXG4gICAgICBmcmVlTWlwTWFwKG1pcERhdGEpXG5cbiAgICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgICB0ZXh0dXJlLnN0YXRzLnNpemUgPSBnZXRUZXh0dXJlU2l6ZShcbiAgICAgICAgICB0ZXh0dXJlLmludGVybmFsZm9ybWF0LFxuICAgICAgICAgIHRleHR1cmUudHlwZSxcbiAgICAgICAgICBtaXBEYXRhLndpZHRoLFxuICAgICAgICAgIG1pcERhdGEuaGVpZ2h0LFxuICAgICAgICAgIHRleEluZm8uZ2VuTWlwbWFwcyxcbiAgICAgICAgICBmYWxzZSlcbiAgICAgIH1cbiAgICAgIHJlZ2xUZXh0dXJlMkQuZm9ybWF0ID0gdGV4dHVyZUZvcm1hdHNJbnZlcnRbdGV4dHVyZS5pbnRlcm5hbGZvcm1hdF1cbiAgICAgIHJlZ2xUZXh0dXJlMkQudHlwZSA9IHRleHR1cmVUeXBlc0ludmVydFt0ZXh0dXJlLnR5cGVdXG5cbiAgICAgIHJlZ2xUZXh0dXJlMkQubWFnID0gbWFnRmlsdGVyc0ludmVydFt0ZXhJbmZvLm1hZ0ZpbHRlcl1cbiAgICAgIHJlZ2xUZXh0dXJlMkQubWluID0gbWluRmlsdGVyc0ludmVydFt0ZXhJbmZvLm1pbkZpbHRlcl1cblxuICAgICAgcmVnbFRleHR1cmUyRC53cmFwUyA9IHdyYXBNb2Rlc0ludmVydFt0ZXhJbmZvLndyYXBTXVxuICAgICAgcmVnbFRleHR1cmUyRC53cmFwVCA9IHdyYXBNb2Rlc0ludmVydFt0ZXhJbmZvLndyYXBUXVxuXG4gICAgICByZXR1cm4gcmVnbFRleHR1cmUyRFxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN1YmltYWdlIChpbWFnZSwgeF8sIHlfLCBsZXZlbF8pIHtcbiAgICAgIGNoZWNrJDEoISFpbWFnZSwgJ211c3Qgc3BlY2lmeSBpbWFnZSBkYXRhJylcblxuICAgICAgdmFyIHggPSB4XyB8IDBcbiAgICAgIHZhciB5ID0geV8gfCAwXG4gICAgICB2YXIgbGV2ZWwgPSBsZXZlbF8gfCAwXG5cbiAgICAgIHZhciBpbWFnZURhdGEgPSBhbGxvY0ltYWdlKClcbiAgICAgIGNvcHlGbGFncyhpbWFnZURhdGEsIHRleHR1cmUpXG4gICAgICBpbWFnZURhdGEud2lkdGggPSAwXG4gICAgICBpbWFnZURhdGEuaGVpZ2h0ID0gMFxuICAgICAgcGFyc2VJbWFnZShpbWFnZURhdGEsIGltYWdlKVxuICAgICAgaW1hZ2VEYXRhLndpZHRoID0gaW1hZ2VEYXRhLndpZHRoIHx8ICgodGV4dHVyZS53aWR0aCA+PiBsZXZlbCkgLSB4KVxuICAgICAgaW1hZ2VEYXRhLmhlaWdodCA9IGltYWdlRGF0YS5oZWlnaHQgfHwgKCh0ZXh0dXJlLmhlaWdodCA+PiBsZXZlbCkgLSB5KVxuXG4gICAgICBjaGVjayQxKFxuICAgICAgICB0ZXh0dXJlLnR5cGUgPT09IGltYWdlRGF0YS50eXBlICYmXG4gICAgICAgIHRleHR1cmUuZm9ybWF0ID09PSBpbWFnZURhdGEuZm9ybWF0ICYmXG4gICAgICAgIHRleHR1cmUuaW50ZXJuYWxmb3JtYXQgPT09IGltYWdlRGF0YS5pbnRlcm5hbGZvcm1hdCxcbiAgICAgICAgJ2luY29tcGF0aWJsZSBmb3JtYXQgZm9yIHRleHR1cmUuc3ViaW1hZ2UnKVxuICAgICAgY2hlY2skMShcbiAgICAgICAgeCA+PSAwICYmIHkgPj0gMCAmJlxuICAgICAgICB4ICsgaW1hZ2VEYXRhLndpZHRoIDw9IHRleHR1cmUud2lkdGggJiZcbiAgICAgICAgeSArIGltYWdlRGF0YS5oZWlnaHQgPD0gdGV4dHVyZS5oZWlnaHQsXG4gICAgICAgICd0ZXh0dXJlLnN1YmltYWdlIHdyaXRlIG91dCBvZiBib3VuZHMnKVxuICAgICAgY2hlY2skMShcbiAgICAgICAgdGV4dHVyZS5taXBtYXNrICYgKDEgPDwgbGV2ZWwpLFxuICAgICAgICAnbWlzc2luZyBtaXBtYXAgZGF0YScpXG4gICAgICBjaGVjayQxKFxuICAgICAgICBpbWFnZURhdGEuZGF0YSB8fCBpbWFnZURhdGEuZWxlbWVudCB8fCBpbWFnZURhdGEubmVlZHNDb3B5LFxuICAgICAgICAnbWlzc2luZyBpbWFnZSBkYXRhJylcblxuICAgICAgdGVtcEJpbmQodGV4dHVyZSlcbiAgICAgIHNldFN1YkltYWdlKGltYWdlRGF0YSwgR0xfVEVYVFVSRV8yRCQxLCB4LCB5LCBsZXZlbClcbiAgICAgIHRlbXBSZXN0b3JlKClcblxuICAgICAgZnJlZUltYWdlKGltYWdlRGF0YSlcblxuICAgICAgcmV0dXJuIHJlZ2xUZXh0dXJlMkRcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNpemUgKHdfLCBoXykge1xuICAgICAgdmFyIHcgPSB3XyB8IDBcbiAgICAgIHZhciBoID0gKGhfIHwgMCkgfHwgd1xuICAgICAgaWYgKHcgPT09IHRleHR1cmUud2lkdGggJiYgaCA9PT0gdGV4dHVyZS5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2xUZXh0dXJlMkRcbiAgICAgIH1cblxuICAgICAgcmVnbFRleHR1cmUyRC53aWR0aCA9IHRleHR1cmUud2lkdGggPSB3XG4gICAgICByZWdsVGV4dHVyZTJELmhlaWdodCA9IHRleHR1cmUuaGVpZ2h0ID0gaFxuXG4gICAgICB0ZW1wQmluZCh0ZXh0dXJlKVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgdGV4dHVyZS5taXBtYXNrID4+IGk7ICsraSkge1xuICAgICAgICB2YXIgX3cgPSB3ID4+IGlcbiAgICAgICAgdmFyIF9oID0gaCA+PiBpXG4gICAgICAgIGlmICghX3cgfHwgIV9oKSBicmVha1xuICAgICAgICBnbC50ZXhJbWFnZTJEKFxuICAgICAgICAgIEdMX1RFWFRVUkVfMkQkMSxcbiAgICAgICAgICBpLFxuICAgICAgICAgIHRleHR1cmUuZm9ybWF0LFxuICAgICAgICAgIF93LFxuICAgICAgICAgIF9oLFxuICAgICAgICAgIDAsXG4gICAgICAgICAgdGV4dHVyZS5mb3JtYXQsXG4gICAgICAgICAgdGV4dHVyZS50eXBlLFxuICAgICAgICAgIG51bGwpXG4gICAgICB9XG4gICAgICB0ZW1wUmVzdG9yZSgpXG5cbiAgICAgIC8vIGFsc28sIHJlY29tcHV0ZSB0aGUgdGV4dHVyZSBzaXplLlxuICAgICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICAgIHRleHR1cmUuc3RhdHMuc2l6ZSA9IGdldFRleHR1cmVTaXplKFxuICAgICAgICAgIHRleHR1cmUuaW50ZXJuYWxmb3JtYXQsXG4gICAgICAgICAgdGV4dHVyZS50eXBlLFxuICAgICAgICAgIHcsXG4gICAgICAgICAgaCxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICBmYWxzZSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlZ2xUZXh0dXJlMkRcbiAgICB9XG5cbiAgICByZWdsVGV4dHVyZTJEKGEsIGIpXG5cbiAgICByZWdsVGV4dHVyZTJELnN1YmltYWdlID0gc3ViaW1hZ2VcbiAgICByZWdsVGV4dHVyZTJELnJlc2l6ZSA9IHJlc2l6ZVxuICAgIHJlZ2xUZXh0dXJlMkQuX3JlZ2xUeXBlID0gJ3RleHR1cmUyZCdcbiAgICByZWdsVGV4dHVyZTJELl90ZXh0dXJlID0gdGV4dHVyZVxuICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgcmVnbFRleHR1cmUyRC5zdGF0cyA9IHRleHR1cmUuc3RhdHNcbiAgICB9XG4gICAgcmVnbFRleHR1cmUyRC5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdGV4dHVyZS5kZWNSZWYoKVxuICAgIH1cblxuICAgIHJldHVybiByZWdsVGV4dHVyZTJEXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVUZXh0dXJlQ3ViZSAoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSkge1xuICAgIHZhciB0ZXh0dXJlID0gbmV3IFJFR0xUZXh0dXJlKEdMX1RFWFRVUkVfQ1VCRV9NQVAkMSlcbiAgICB0ZXh0dXJlU2V0W3RleHR1cmUuaWRdID0gdGV4dHVyZVxuICAgIHN0YXRzLmN1YmVDb3VudCsrXG5cbiAgICB2YXIgZmFjZXMgPSBuZXcgQXJyYXkoNilcblxuICAgIGZ1bmN0aW9uIHJlZ2xUZXh0dXJlQ3ViZSAoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSkge1xuICAgICAgdmFyIGlcbiAgICAgIHZhciB0ZXhJbmZvID0gdGV4dHVyZS50ZXhJbmZvXG4gICAgICBUZXhJbmZvLmNhbGwodGV4SW5mbylcbiAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHtcbiAgICAgICAgZmFjZXNbaV0gPSBhbGxvY01pcE1hcCgpXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgYTAgPT09ICdudW1iZXInIHx8ICFhMCkge1xuICAgICAgICB2YXIgcyA9IChhMCB8IDApIHx8IDFcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDY7ICsraSkge1xuICAgICAgICAgIHBhcnNlTWlwTWFwRnJvbVNoYXBlKGZhY2VzW2ldLCBzLCBzKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhMCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKGExKSB7XG4gICAgICAgICAgcGFyc2VNaXBNYXBGcm9tT2JqZWN0KGZhY2VzWzBdLCBhMClcbiAgICAgICAgICBwYXJzZU1pcE1hcEZyb21PYmplY3QoZmFjZXNbMV0sIGExKVxuICAgICAgICAgIHBhcnNlTWlwTWFwRnJvbU9iamVjdChmYWNlc1syXSwgYTIpXG4gICAgICAgICAgcGFyc2VNaXBNYXBGcm9tT2JqZWN0KGZhY2VzWzNdLCBhMylcbiAgICAgICAgICBwYXJzZU1pcE1hcEZyb21PYmplY3QoZmFjZXNbNF0sIGE0KVxuICAgICAgICAgIHBhcnNlTWlwTWFwRnJvbU9iamVjdChmYWNlc1s1XSwgYTUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyc2VUZXhJbmZvKHRleEluZm8sIGEwKVxuICAgICAgICAgIHBhcnNlRmxhZ3ModGV4dHVyZSwgYTApXG4gICAgICAgICAgaWYgKCdmYWNlcycgaW4gYTApIHtcbiAgICAgICAgICAgIHZhciBmYWNlSW5wdXQgPSBhMC5mYWNlc1xuICAgICAgICAgICAgY2hlY2skMShBcnJheS5pc0FycmF5KGZhY2VJbnB1dCkgJiYgZmFjZUlucHV0Lmxlbmd0aCA9PT0gNixcbiAgICAgICAgICAgICAgJ2N1YmUgZmFjZXMgbXVzdCBiZSBhIGxlbmd0aCA2IGFycmF5JylcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHtcbiAgICAgICAgICAgICAgY2hlY2skMSh0eXBlb2YgZmFjZUlucHV0W2ldID09PSAnb2JqZWN0JyAmJiAhIWZhY2VJbnB1dFtpXSxcbiAgICAgICAgICAgICAgICAnaW52YWxpZCBpbnB1dCBmb3IgY3ViZSBtYXAgZmFjZScpXG4gICAgICAgICAgICAgIGNvcHlGbGFncyhmYWNlc1tpXSwgdGV4dHVyZSlcbiAgICAgICAgICAgICAgcGFyc2VNaXBNYXBGcm9tT2JqZWN0KGZhY2VzW2ldLCBmYWNlSW5wdXRbaV0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHtcbiAgICAgICAgICAgICAgcGFyc2VNaXBNYXBGcm9tT2JqZWN0KGZhY2VzW2ldLCBhMClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoZWNrJDEucmFpc2UoJ2ludmFsaWQgYXJndW1lbnRzIHRvIGN1YmUgbWFwJylcbiAgICAgIH1cblxuICAgICAgY29weUZsYWdzKHRleHR1cmUsIGZhY2VzWzBdKVxuXG4gICAgICBpZiAoIWxpbWl0cy5ucG90VGV4dHVyZUN1YmUpIHtcbiAgICAgICAgY2hlY2skMShpc1BvdzIkMSh0ZXh0dXJlLndpZHRoKSAmJiBpc1BvdzIkMSh0ZXh0dXJlLmhlaWdodCksICd5b3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBub24gcG93ZXIgb3IgdHdvIHRleHR1cmUgZGltZW5zaW9ucycpXG4gICAgICB9XG5cbiAgICAgIGlmICh0ZXhJbmZvLmdlbk1pcG1hcHMpIHtcbiAgICAgICAgdGV4dHVyZS5taXBtYXNrID0gKGZhY2VzWzBdLndpZHRoIDw8IDEpIC0gMVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dHVyZS5taXBtYXNrID0gZmFjZXNbMF0ubWlwbWFza1xuICAgICAgfVxuXG4gICAgICBjaGVjayQxLnRleHR1cmVDdWJlKHRleHR1cmUsIHRleEluZm8sIGZhY2VzLCBsaW1pdHMpXG4gICAgICB0ZXh0dXJlLmludGVybmFsZm9ybWF0ID0gZmFjZXNbMF0uaW50ZXJuYWxmb3JtYXRcblxuICAgICAgcmVnbFRleHR1cmVDdWJlLndpZHRoID0gZmFjZXNbMF0ud2lkdGhcbiAgICAgIHJlZ2xUZXh0dXJlQ3ViZS5oZWlnaHQgPSBmYWNlc1swXS5oZWlnaHRcblxuICAgICAgdGVtcEJpbmQodGV4dHVyZSlcbiAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHtcbiAgICAgICAgc2V0TWlwTWFwKGZhY2VzW2ldLCBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gkMSArIGkpXG4gICAgICB9XG4gICAgICBzZXRUZXhJbmZvKHRleEluZm8sIEdMX1RFWFRVUkVfQ1VCRV9NQVAkMSlcbiAgICAgIHRlbXBSZXN0b3JlKClcblxuICAgICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICAgIHRleHR1cmUuc3RhdHMuc2l6ZSA9IGdldFRleHR1cmVTaXplKFxuICAgICAgICAgIHRleHR1cmUuaW50ZXJuYWxmb3JtYXQsXG4gICAgICAgICAgdGV4dHVyZS50eXBlLFxuICAgICAgICAgIHJlZ2xUZXh0dXJlQ3ViZS53aWR0aCxcbiAgICAgICAgICByZWdsVGV4dHVyZUN1YmUuaGVpZ2h0LFxuICAgICAgICAgIHRleEluZm8uZ2VuTWlwbWFwcyxcbiAgICAgICAgICB0cnVlKVxuICAgICAgfVxuXG4gICAgICByZWdsVGV4dHVyZUN1YmUuZm9ybWF0ID0gdGV4dHVyZUZvcm1hdHNJbnZlcnRbdGV4dHVyZS5pbnRlcm5hbGZvcm1hdF1cbiAgICAgIHJlZ2xUZXh0dXJlQ3ViZS50eXBlID0gdGV4dHVyZVR5cGVzSW52ZXJ0W3RleHR1cmUudHlwZV1cblxuICAgICAgcmVnbFRleHR1cmVDdWJlLm1hZyA9IG1hZ0ZpbHRlcnNJbnZlcnRbdGV4SW5mby5tYWdGaWx0ZXJdXG4gICAgICByZWdsVGV4dHVyZUN1YmUubWluID0gbWluRmlsdGVyc0ludmVydFt0ZXhJbmZvLm1pbkZpbHRlcl1cblxuICAgICAgcmVnbFRleHR1cmVDdWJlLndyYXBTID0gd3JhcE1vZGVzSW52ZXJ0W3RleEluZm8ud3JhcFNdXG4gICAgICByZWdsVGV4dHVyZUN1YmUud3JhcFQgPSB3cmFwTW9kZXNJbnZlcnRbdGV4SW5mby53cmFwVF1cblxuICAgICAgZm9yIChpID0gMDsgaSA8IDY7ICsraSkge1xuICAgICAgICBmcmVlTWlwTWFwKGZhY2VzW2ldKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVnbFRleHR1cmVDdWJlXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3ViaW1hZ2UgKGZhY2UsIGltYWdlLCB4XywgeV8sIGxldmVsXykge1xuICAgICAgY2hlY2skMSghIWltYWdlLCAnbXVzdCBzcGVjaWZ5IGltYWdlIGRhdGEnKVxuICAgICAgY2hlY2skMSh0eXBlb2YgZmFjZSA9PT0gJ251bWJlcicgJiYgZmFjZSA9PT0gKGZhY2UgfCAwKSAmJlxuICAgICAgICBmYWNlID49IDAgJiYgZmFjZSA8IDYsICdpbnZhbGlkIGZhY2UnKVxuXG4gICAgICB2YXIgeCA9IHhfIHwgMFxuICAgICAgdmFyIHkgPSB5XyB8IDBcbiAgICAgIHZhciBsZXZlbCA9IGxldmVsXyB8IDBcblxuICAgICAgdmFyIGltYWdlRGF0YSA9IGFsbG9jSW1hZ2UoKVxuICAgICAgY29weUZsYWdzKGltYWdlRGF0YSwgdGV4dHVyZSlcbiAgICAgIGltYWdlRGF0YS53aWR0aCA9IDBcbiAgICAgIGltYWdlRGF0YS5oZWlnaHQgPSAwXG4gICAgICBwYXJzZUltYWdlKGltYWdlRGF0YSwgaW1hZ2UpXG4gICAgICBpbWFnZURhdGEud2lkdGggPSBpbWFnZURhdGEud2lkdGggfHwgKCh0ZXh0dXJlLndpZHRoID4+IGxldmVsKSAtIHgpXG4gICAgICBpbWFnZURhdGEuaGVpZ2h0ID0gaW1hZ2VEYXRhLmhlaWdodCB8fCAoKHRleHR1cmUuaGVpZ2h0ID4+IGxldmVsKSAtIHkpXG5cbiAgICAgIGNoZWNrJDEoXG4gICAgICAgIHRleHR1cmUudHlwZSA9PT0gaW1hZ2VEYXRhLnR5cGUgJiZcbiAgICAgICAgdGV4dHVyZS5mb3JtYXQgPT09IGltYWdlRGF0YS5mb3JtYXQgJiZcbiAgICAgICAgdGV4dHVyZS5pbnRlcm5hbGZvcm1hdCA9PT0gaW1hZ2VEYXRhLmludGVybmFsZm9ybWF0LFxuICAgICAgICAnaW5jb21wYXRpYmxlIGZvcm1hdCBmb3IgdGV4dHVyZS5zdWJpbWFnZScpXG4gICAgICBjaGVjayQxKFxuICAgICAgICB4ID49IDAgJiYgeSA+PSAwICYmXG4gICAgICAgIHggKyBpbWFnZURhdGEud2lkdGggPD0gdGV4dHVyZS53aWR0aCAmJlxuICAgICAgICB5ICsgaW1hZ2VEYXRhLmhlaWdodCA8PSB0ZXh0dXJlLmhlaWdodCxcbiAgICAgICAgJ3RleHR1cmUuc3ViaW1hZ2Ugd3JpdGUgb3V0IG9mIGJvdW5kcycpXG4gICAgICBjaGVjayQxKFxuICAgICAgICB0ZXh0dXJlLm1pcG1hc2sgJiAoMSA8PCBsZXZlbCksXG4gICAgICAgICdtaXNzaW5nIG1pcG1hcCBkYXRhJylcbiAgICAgIGNoZWNrJDEoXG4gICAgICAgIGltYWdlRGF0YS5kYXRhIHx8IGltYWdlRGF0YS5lbGVtZW50IHx8IGltYWdlRGF0YS5uZWVkc0NvcHksXG4gICAgICAgICdtaXNzaW5nIGltYWdlIGRhdGEnKVxuXG4gICAgICB0ZW1wQmluZCh0ZXh0dXJlKVxuICAgICAgc2V0U3ViSW1hZ2UoaW1hZ2VEYXRhLCBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gkMSArIGZhY2UsIHgsIHksIGxldmVsKVxuICAgICAgdGVtcFJlc3RvcmUoKVxuXG4gICAgICBmcmVlSW1hZ2UoaW1hZ2VEYXRhKVxuXG4gICAgICByZXR1cm4gcmVnbFRleHR1cmVDdWJlXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzaXplIChyYWRpdXNfKSB7XG4gICAgICB2YXIgcmFkaXVzID0gcmFkaXVzXyB8IDBcbiAgICAgIGlmIChyYWRpdXMgPT09IHRleHR1cmUud2lkdGgpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHJlZ2xUZXh0dXJlQ3ViZS53aWR0aCA9IHRleHR1cmUud2lkdGggPSByYWRpdXNcbiAgICAgIHJlZ2xUZXh0dXJlQ3ViZS5oZWlnaHQgPSB0ZXh0dXJlLmhlaWdodCA9IHJhZGl1c1xuXG4gICAgICB0ZW1wQmluZCh0ZXh0dXJlKVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyArK2kpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IHRleHR1cmUubWlwbWFzayA+PiBqOyArK2opIHtcbiAgICAgICAgICBnbC50ZXhJbWFnZTJEKFxuICAgICAgICAgICAgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YJDEgKyBpLFxuICAgICAgICAgICAgaixcbiAgICAgICAgICAgIHRleHR1cmUuZm9ybWF0LFxuICAgICAgICAgICAgcmFkaXVzID4+IGosXG4gICAgICAgICAgICByYWRpdXMgPj4gaixcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB0ZXh0dXJlLmZvcm1hdCxcbiAgICAgICAgICAgIHRleHR1cmUudHlwZSxcbiAgICAgICAgICAgIG51bGwpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRlbXBSZXN0b3JlKClcblxuICAgICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICAgIHRleHR1cmUuc3RhdHMuc2l6ZSA9IGdldFRleHR1cmVTaXplKFxuICAgICAgICAgIHRleHR1cmUuaW50ZXJuYWxmb3JtYXQsXG4gICAgICAgICAgdGV4dHVyZS50eXBlLFxuICAgICAgICAgIHJlZ2xUZXh0dXJlQ3ViZS53aWR0aCxcbiAgICAgICAgICByZWdsVGV4dHVyZUN1YmUuaGVpZ2h0LFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIHRydWUpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWdsVGV4dHVyZUN1YmVcbiAgICB9XG5cbiAgICByZWdsVGV4dHVyZUN1YmUoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSlcblxuICAgIHJlZ2xUZXh0dXJlQ3ViZS5zdWJpbWFnZSA9IHN1YmltYWdlXG4gICAgcmVnbFRleHR1cmVDdWJlLnJlc2l6ZSA9IHJlc2l6ZVxuICAgIHJlZ2xUZXh0dXJlQ3ViZS5fcmVnbFR5cGUgPSAndGV4dHVyZUN1YmUnXG4gICAgcmVnbFRleHR1cmVDdWJlLl90ZXh0dXJlID0gdGV4dHVyZVxuICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgcmVnbFRleHR1cmVDdWJlLnN0YXRzID0gdGV4dHVyZS5zdGF0c1xuICAgIH1cbiAgICByZWdsVGV4dHVyZUN1YmUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRleHR1cmUuZGVjUmVmKClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVnbFRleHR1cmVDdWJlXG4gIH1cblxuICAvLyBDYWxsZWQgd2hlbiByZWdsIGlzIGRlc3Ryb3llZFxuICBmdW5jdGlvbiBkZXN0cm95VGV4dHVyZXMgKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtVGV4VW5pdHM7ICsraSkge1xuICAgICAgZ2wuYWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCQxICsgaSlcbiAgICAgIGdsLmJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQkMSwgbnVsbClcbiAgICAgIHRleHR1cmVVbml0c1tpXSA9IG51bGxcbiAgICB9XG4gICAgdmFsdWVzKHRleHR1cmVTZXQpLmZvckVhY2goZGVzdHJveSlcblxuICAgIHN0YXRzLmN1YmVDb3VudCA9IDBcbiAgICBzdGF0cy50ZXh0dXJlQ291bnQgPSAwXG4gIH1cblxuICBpZiAoY29uZmlnLnByb2ZpbGUpIHtcbiAgICBzdGF0cy5nZXRUb3RhbFRleHR1cmVTaXplID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRvdGFsID0gMFxuICAgICAgT2JqZWN0LmtleXModGV4dHVyZVNldCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHRvdGFsICs9IHRleHR1cmVTZXRba2V5XS5zdGF0cy5zaXplXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHRvdGFsXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzdG9yZVRleHR1cmVzICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bVRleFVuaXRzOyArK2kpIHtcbiAgICAgIHZhciB0ZXggPSB0ZXh0dXJlVW5pdHNbaV1cbiAgICAgIGlmICh0ZXgpIHtcbiAgICAgICAgdGV4LmJpbmRDb3VudCA9IDBcbiAgICAgICAgdGV4LnVuaXQgPSAtMVxuICAgICAgICB0ZXh0dXJlVW5pdHNbaV0gPSBudWxsXG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFsdWVzKHRleHR1cmVTZXQpLmZvckVhY2goZnVuY3Rpb24gKHRleHR1cmUpIHtcbiAgICAgIHRleHR1cmUudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKVxuICAgICAgZ2wuYmluZFRleHR1cmUodGV4dHVyZS50YXJnZXQsIHRleHR1cmUudGV4dHVyZSlcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7ICsraSkge1xuICAgICAgICBpZiAoKHRleHR1cmUubWlwbWFzayAmICgxIDw8IGkpKSA9PT0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHR1cmUudGFyZ2V0ID09PSBHTF9URVhUVVJFXzJEJDEpIHtcbiAgICAgICAgICBnbC50ZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQkMSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICB0ZXh0dXJlLmludGVybmFsZm9ybWF0LFxuICAgICAgICAgICAgdGV4dHVyZS53aWR0aCA+PiBpLFxuICAgICAgICAgICAgdGV4dHVyZS5oZWlnaHQgPj4gaSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB0ZXh0dXJlLmludGVybmFsZm9ybWF0LFxuICAgICAgICAgICAgdGV4dHVyZS50eXBlLFxuICAgICAgICAgICAgbnVsbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDY7ICsraikge1xuICAgICAgICAgICAgZ2wudGV4SW1hZ2UyRChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gkMSArIGosXG4gICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgIHRleHR1cmUuaW50ZXJuYWxmb3JtYXQsXG4gICAgICAgICAgICAgIHRleHR1cmUud2lkdGggPj4gaSxcbiAgICAgICAgICAgICAgdGV4dHVyZS5oZWlnaHQgPj4gaSxcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgdGV4dHVyZS5pbnRlcm5hbGZvcm1hdCxcbiAgICAgICAgICAgICAgdGV4dHVyZS50eXBlLFxuICAgICAgICAgICAgICBudWxsKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0VGV4SW5mbyh0ZXh0dXJlLnRleEluZm8sIHRleHR1cmUudGFyZ2V0KVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiByZWZyZXNoVGV4dHVyZXMgKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtVGV4VW5pdHM7ICsraSkge1xuICAgICAgdmFyIHRleCA9IHRleHR1cmVVbml0c1tpXVxuICAgICAgaWYgKHRleCkge1xuICAgICAgICB0ZXguYmluZENvdW50ID0gMFxuICAgICAgICB0ZXgudW5pdCA9IC0xXG4gICAgICAgIHRleHR1cmVVbml0c1tpXSA9IG51bGxcbiAgICAgIH1cbiAgICAgIGdsLmFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTAkMSArIGkpXG4gICAgICBnbC5iaW5kVGV4dHVyZShHTF9URVhUVVJFXzJEJDEsIG51bGwpXG4gICAgICBnbC5iaW5kVGV4dHVyZShHTF9URVhUVVJFX0NVQkVfTUFQJDEsIG51bGwpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjcmVhdGUyRDogY3JlYXRlVGV4dHVyZTJELFxuICAgIGNyZWF0ZUN1YmU6IGNyZWF0ZVRleHR1cmVDdWJlLFxuICAgIGNsZWFyOiBkZXN0cm95VGV4dHVyZXMsXG4gICAgZ2V0VGV4dHVyZTogZnVuY3Rpb24gKHdyYXBwZXIpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcbiAgICByZXN0b3JlOiByZXN0b3JlVGV4dHVyZXMsXG4gICAgcmVmcmVzaDogcmVmcmVzaFRleHR1cmVzXG4gIH1cbn1cblxudmFyIEdMX1JFTkRFUkJVRkZFUiA9IDB4OEQ0MVxuXG52YXIgR0xfUkdCQTQkMSA9IDB4ODA1NlxudmFyIEdMX1JHQjVfQTEkMSA9IDB4ODA1N1xudmFyIEdMX1JHQjU2NSQxID0gMHg4RDYyXG52YXIgR0xfREVQVEhfQ09NUE9ORU5UMTYgPSAweDgxQTVcbnZhciBHTF9TVEVOQ0lMX0lOREVYOCA9IDB4OEQ0OFxudmFyIEdMX0RFUFRIX1NURU5DSUwkMSA9IDB4ODRGOVxuXG52YXIgR0xfU1JHQjhfQUxQSEE4X0VYVCA9IDB4OEM0M1xuXG52YXIgR0xfUkdCQTMyRl9FWFQgPSAweDg4MTRcblxudmFyIEdMX1JHQkExNkZfRVhUID0gMHg4ODFBXG52YXIgR0xfUkdCMTZGX0VYVCA9IDB4ODgxQlxuXG52YXIgRk9STUFUX1NJWkVTID0gW11cblxuRk9STUFUX1NJWkVTW0dMX1JHQkE0JDFdID0gMlxuRk9STUFUX1NJWkVTW0dMX1JHQjVfQTEkMV0gPSAyXG5GT1JNQVRfU0laRVNbR0xfUkdCNTY1JDFdID0gMlxuXG5GT1JNQVRfU0laRVNbR0xfREVQVEhfQ09NUE9ORU5UMTZdID0gMlxuRk9STUFUX1NJWkVTW0dMX1NURU5DSUxfSU5ERVg4XSA9IDFcbkZPUk1BVF9TSVpFU1tHTF9ERVBUSF9TVEVOQ0lMJDFdID0gNFxuXG5GT1JNQVRfU0laRVNbR0xfU1JHQjhfQUxQSEE4X0VYVF0gPSA0XG5GT1JNQVRfU0laRVNbR0xfUkdCQTMyRl9FWFRdID0gMTZcbkZPUk1BVF9TSVpFU1tHTF9SR0JBMTZGX0VYVF0gPSA4XG5GT1JNQVRfU0laRVNbR0xfUkdCMTZGX0VYVF0gPSA2XG5cbmZ1bmN0aW9uIGdldFJlbmRlcmJ1ZmZlclNpemUgKGZvcm1hdCwgd2lkdGgsIGhlaWdodCkge1xuICByZXR1cm4gRk9STUFUX1NJWkVTW2Zvcm1hdF0gKiB3aWR0aCAqIGhlaWdodFxufVxuXG52YXIgd3JhcFJlbmRlcmJ1ZmZlcnMgPSBmdW5jdGlvbiAoZ2wsIGV4dGVuc2lvbnMsIGxpbWl0cywgc3RhdHMsIGNvbmZpZykge1xuICB2YXIgZm9ybWF0VHlwZXMgPSB7XG4gICAgJ3JnYmE0JzogR0xfUkdCQTQkMSxcbiAgICAncmdiNTY1JzogR0xfUkdCNTY1JDEsXG4gICAgJ3JnYjUgYTEnOiBHTF9SR0I1X0ExJDEsXG4gICAgJ2RlcHRoJzogR0xfREVQVEhfQ09NUE9ORU5UMTYsXG4gICAgJ3N0ZW5jaWwnOiBHTF9TVEVOQ0lMX0lOREVYOCxcbiAgICAnZGVwdGggc3RlbmNpbCc6IEdMX0RFUFRIX1NURU5DSUwkMVxuICB9XG5cbiAgaWYgKGV4dGVuc2lvbnMuZXh0X3NyZ2IpIHtcbiAgICBmb3JtYXRUeXBlc1snc3JnYmEnXSA9IEdMX1NSR0I4X0FMUEhBOF9FWFRcbiAgfVxuXG4gIGlmIChleHRlbnNpb25zLmV4dF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCkge1xuICAgIGZvcm1hdFR5cGVzWydyZ2JhMTZmJ10gPSBHTF9SR0JBMTZGX0VYVFxuICAgIGZvcm1hdFR5cGVzWydyZ2IxNmYnXSA9IEdMX1JHQjE2Rl9FWFRcbiAgfVxuXG4gIGlmIChleHRlbnNpb25zLndlYmdsX2NvbG9yX2J1ZmZlcl9mbG9hdCkge1xuICAgIGZvcm1hdFR5cGVzWydyZ2JhMzJmJ10gPSBHTF9SR0JBMzJGX0VYVFxuICB9XG5cbiAgdmFyIGZvcm1hdFR5cGVzSW52ZXJ0ID0gW11cbiAgT2JqZWN0LmtleXMoZm9ybWF0VHlwZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciB2YWwgPSBmb3JtYXRUeXBlc1trZXldXG4gICAgZm9ybWF0VHlwZXNJbnZlcnRbdmFsXSA9IGtleVxuICB9KVxuXG4gIHZhciByZW5kZXJidWZmZXJDb3VudCA9IDBcbiAgdmFyIHJlbmRlcmJ1ZmZlclNldCA9IHt9XG5cbiAgZnVuY3Rpb24gUkVHTFJlbmRlcmJ1ZmZlciAocmVuZGVyYnVmZmVyKSB7XG4gICAgdGhpcy5pZCA9IHJlbmRlcmJ1ZmZlckNvdW50KytcbiAgICB0aGlzLnJlZkNvdW50ID0gMVxuXG4gICAgdGhpcy5yZW5kZXJidWZmZXIgPSByZW5kZXJidWZmZXJcblxuICAgIHRoaXMuZm9ybWF0ID0gR0xfUkdCQTQkMVxuICAgIHRoaXMud2lkdGggPSAwXG4gICAgdGhpcy5oZWlnaHQgPSAwXG5cbiAgICBpZiAoY29uZmlnLnByb2ZpbGUpIHtcbiAgICAgIHRoaXMuc3RhdHMgPSB7IHNpemU6IDAgfVxuICAgIH1cbiAgfVxuXG4gIFJFR0xSZW5kZXJidWZmZXIucHJvdG90eXBlLmRlY1JlZiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoLS10aGlzLnJlZkNvdW50IDw9IDApIHtcbiAgICAgIGRlc3Ryb3kodGhpcylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95IChyYikge1xuICAgIHZhciBoYW5kbGUgPSByYi5yZW5kZXJidWZmZXJcbiAgICBjaGVjayQxKGhhbmRsZSwgJ211c3Qgbm90IGRvdWJsZSBkZXN0cm95IHJlbmRlcmJ1ZmZlcicpXG4gICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG51bGwpXG4gICAgZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKGhhbmRsZSlcbiAgICByYi5yZW5kZXJidWZmZXIgPSBudWxsXG4gICAgcmIucmVmQ291bnQgPSAwXG4gICAgZGVsZXRlIHJlbmRlcmJ1ZmZlclNldFtyYi5pZF1cbiAgICBzdGF0cy5yZW5kZXJidWZmZXJDb3VudC0tXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVSZW5kZXJidWZmZXIgKGEsIGIpIHtcbiAgICB2YXIgcmVuZGVyYnVmZmVyID0gbmV3IFJFR0xSZW5kZXJidWZmZXIoZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkpXG4gICAgcmVuZGVyYnVmZmVyU2V0W3JlbmRlcmJ1ZmZlci5pZF0gPSByZW5kZXJidWZmZXJcbiAgICBzdGF0cy5yZW5kZXJidWZmZXJDb3VudCsrXG5cbiAgICBmdW5jdGlvbiByZWdsUmVuZGVyYnVmZmVyIChhLCBiKSB7XG4gICAgICB2YXIgdyA9IDBcbiAgICAgIHZhciBoID0gMFxuICAgICAgdmFyIGZvcm1hdCA9IEdMX1JHQkE0JDFcblxuICAgICAgaWYgKHR5cGVvZiBhID09PSAnb2JqZWN0JyAmJiBhKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gYVxuICAgICAgICBpZiAoJ3NoYXBlJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgdmFyIHNoYXBlID0gb3B0aW9ucy5zaGFwZVxuICAgICAgICAgIGNoZWNrJDEoQXJyYXkuaXNBcnJheShzaGFwZSkgJiYgc2hhcGUubGVuZ3RoID49IDIsXG4gICAgICAgICAgICAnaW52YWxpZCByZW5kZXJidWZmZXIgc2hhcGUnKVxuICAgICAgICAgIHcgPSBzaGFwZVswXSB8IDBcbiAgICAgICAgICBoID0gc2hhcGVbMV0gfCAwXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCdyYWRpdXMnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHcgPSBoID0gb3B0aW9ucy5yYWRpdXMgfCAwXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgnd2lkdGgnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHcgPSBvcHRpb25zLndpZHRoIHwgMFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJ2hlaWdodCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgaCA9IG9wdGlvbnMuaGVpZ2h0IHwgMFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoJ2Zvcm1hdCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgIGNoZWNrJDEucGFyYW1ldGVyKG9wdGlvbnMuZm9ybWF0LCBmb3JtYXRUeXBlcyxcbiAgICAgICAgICAgICdpbnZhbGlkIHJlbmRlcmJ1ZmZlciBmb3JtYXQnKVxuICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdFR5cGVzW29wdGlvbnMuZm9ybWF0XVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhID09PSAnbnVtYmVyJykge1xuICAgICAgICB3ID0gYSB8IDBcbiAgICAgICAgaWYgKHR5cGVvZiBiID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGggPSBiIHwgMFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGggPSB3XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIWEpIHtcbiAgICAgICAgdyA9IGggPSAxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGVjayQxLnJhaXNlKCdpbnZhbGlkIGFyZ3VtZW50cyB0byByZW5kZXJidWZmZXIgY29uc3RydWN0b3InKVxuICAgICAgfVxuXG4gICAgICAvLyBjaGVjayBzaGFwZVxuICAgICAgY2hlY2skMShcbiAgICAgICAgdyA+IDAgJiYgaCA+IDAgJiZcbiAgICAgICAgdyA8PSBsaW1pdHMubWF4UmVuZGVyYnVmZmVyU2l6ZSAmJiBoIDw9IGxpbWl0cy5tYXhSZW5kZXJidWZmZXJTaXplLFxuICAgICAgICAnaW52YWxpZCByZW5kZXJidWZmZXIgc2l6ZScpXG5cbiAgICAgIGlmICh3ID09PSByZW5kZXJidWZmZXIud2lkdGggJiZcbiAgICAgICAgICBoID09PSByZW5kZXJidWZmZXIuaGVpZ2h0ICYmXG4gICAgICAgICAgZm9ybWF0ID09PSByZW5kZXJidWZmZXIuZm9ybWF0KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZWdsUmVuZGVyYnVmZmVyLndpZHRoID0gcmVuZGVyYnVmZmVyLndpZHRoID0gd1xuICAgICAgcmVnbFJlbmRlcmJ1ZmZlci5oZWlnaHQgPSByZW5kZXJidWZmZXIuaGVpZ2h0ID0gaFxuICAgICAgcmVuZGVyYnVmZmVyLmZvcm1hdCA9IGZvcm1hdFxuXG4gICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyLnJlbmRlcmJ1ZmZlcilcbiAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBmb3JtYXQsIHcsIGgpXG5cbiAgICAgIGNoZWNrJDEoXG4gICAgICAgIGdsLmdldEVycm9yKCkgPT09IDAsXG4gICAgICAgICdpbnZhbGlkIHJlbmRlciBidWZmZXIgZm9ybWF0JylcblxuICAgICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICAgIHJlbmRlcmJ1ZmZlci5zdGF0cy5zaXplID0gZ2V0UmVuZGVyYnVmZmVyU2l6ZShyZW5kZXJidWZmZXIuZm9ybWF0LCByZW5kZXJidWZmZXIud2lkdGgsIHJlbmRlcmJ1ZmZlci5oZWlnaHQpXG4gICAgICB9XG4gICAgICByZWdsUmVuZGVyYnVmZmVyLmZvcm1hdCA9IGZvcm1hdFR5cGVzSW52ZXJ0W3JlbmRlcmJ1ZmZlci5mb3JtYXRdXG5cbiAgICAgIHJldHVybiByZWdsUmVuZGVyYnVmZmVyXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzaXplICh3XywgaF8pIHtcbiAgICAgIHZhciB3ID0gd18gfCAwXG4gICAgICB2YXIgaCA9IChoXyB8IDApIHx8IHdcblxuICAgICAgaWYgKHcgPT09IHJlbmRlcmJ1ZmZlci53aWR0aCAmJiBoID09PSByZW5kZXJidWZmZXIuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiByZWdsUmVuZGVyYnVmZmVyXG4gICAgICB9XG5cbiAgICAgIC8vIGNoZWNrIHNoYXBlXG4gICAgICBjaGVjayQxKFxuICAgICAgICB3ID4gMCAmJiBoID4gMCAmJlxuICAgICAgICB3IDw9IGxpbWl0cy5tYXhSZW5kZXJidWZmZXJTaXplICYmIGggPD0gbGltaXRzLm1heFJlbmRlcmJ1ZmZlclNpemUsXG4gICAgICAgICdpbnZhbGlkIHJlbmRlcmJ1ZmZlciBzaXplJylcblxuICAgICAgcmVnbFJlbmRlcmJ1ZmZlci53aWR0aCA9IHJlbmRlcmJ1ZmZlci53aWR0aCA9IHdcbiAgICAgIHJlZ2xSZW5kZXJidWZmZXIuaGVpZ2h0ID0gcmVuZGVyYnVmZmVyLmhlaWdodCA9IGhcblxuICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlci5yZW5kZXJidWZmZXIpXG4gICAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyLmZvcm1hdCwgdywgaClcblxuICAgICAgY2hlY2skMShcbiAgICAgICAgZ2wuZ2V0RXJyb3IoKSA9PT0gMCxcbiAgICAgICAgJ2ludmFsaWQgcmVuZGVyIGJ1ZmZlciBmb3JtYXQnKVxuXG4gICAgICAvLyBhbHNvLCByZWNvbXB1dGUgc2l6ZS5cbiAgICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgICByZW5kZXJidWZmZXIuc3RhdHMuc2l6ZSA9IGdldFJlbmRlcmJ1ZmZlclNpemUoXG4gICAgICAgICAgcmVuZGVyYnVmZmVyLmZvcm1hdCwgcmVuZGVyYnVmZmVyLndpZHRoLCByZW5kZXJidWZmZXIuaGVpZ2h0KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVnbFJlbmRlcmJ1ZmZlclxuICAgIH1cblxuICAgIHJlZ2xSZW5kZXJidWZmZXIoYSwgYilcblxuICAgIHJlZ2xSZW5kZXJidWZmZXIucmVzaXplID0gcmVzaXplXG4gICAgcmVnbFJlbmRlcmJ1ZmZlci5fcmVnbFR5cGUgPSAncmVuZGVyYnVmZmVyJ1xuICAgIHJlZ2xSZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlciA9IHJlbmRlcmJ1ZmZlclxuICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgcmVnbFJlbmRlcmJ1ZmZlci5zdGF0cyA9IHJlbmRlcmJ1ZmZlci5zdGF0c1xuICAgIH1cbiAgICByZWdsUmVuZGVyYnVmZmVyLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZW5kZXJidWZmZXIuZGVjUmVmKClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVnbFJlbmRlcmJ1ZmZlclxuICB9XG5cbiAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgc3RhdHMuZ2V0VG90YWxSZW5kZXJidWZmZXJTaXplID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRvdGFsID0gMFxuICAgICAgT2JqZWN0LmtleXMocmVuZGVyYnVmZmVyU2V0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdG90YWwgKz0gcmVuZGVyYnVmZmVyU2V0W2tleV0uc3RhdHMuc2l6ZVxuICAgICAgfSlcbiAgICAgIHJldHVybiB0b3RhbFxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3RvcmVSZW5kZXJidWZmZXJzICgpIHtcbiAgICB2YWx1ZXMocmVuZGVyYnVmZmVyU2V0KS5mb3JFYWNoKGZ1bmN0aW9uIChyYikge1xuICAgICAgcmIucmVuZGVyYnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKClcbiAgICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByYi5yZW5kZXJidWZmZXIpXG4gICAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgcmIuZm9ybWF0LCByYi53aWR0aCwgcmIuaGVpZ2h0KVxuICAgIH0pXG4gICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG51bGwpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNyZWF0ZTogY3JlYXRlUmVuZGVyYnVmZmVyLFxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YWx1ZXMocmVuZGVyYnVmZmVyU2V0KS5mb3JFYWNoKGRlc3Ryb3kpXG4gICAgfSxcbiAgICByZXN0b3JlOiByZXN0b3JlUmVuZGVyYnVmZmVyc1xuICB9XG59XG5cbi8vIFdlIHN0b3JlIHRoZXNlIGNvbnN0YW50cyBzbyB0aGF0IHRoZSBtaW5pZmllciBjYW4gaW5saW5lIHRoZW1cbnZhciBHTF9GUkFNRUJVRkZFUiQxID0gMHg4RDQwXG52YXIgR0xfUkVOREVSQlVGRkVSJDEgPSAweDhENDFcblxudmFyIEdMX1RFWFRVUkVfMkQkMiA9IDB4MERFMVxudmFyIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCQyID0gMHg4NTE1XG5cbnZhciBHTF9DT0xPUl9BVFRBQ0hNRU5UMCQxID0gMHg4Q0UwXG52YXIgR0xfREVQVEhfQVRUQUNITUVOVCA9IDB4OEQwMFxudmFyIEdMX1NURU5DSUxfQVRUQUNITUVOVCA9IDB4OEQyMFxudmFyIEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVCA9IDB4ODIxQVxuXG52YXIgR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUkMSA9IDB4OENENVxudmFyIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCA9IDB4OENENlxudmFyIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UID0gMHg4Q0Q3XG52YXIgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TID0gMHg4Q0Q5XG52YXIgR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQgPSAweDhDRERcblxudmFyIEdMX0hBTEZfRkxPQVRfT0VTJDIgPSAweDhENjFcbnZhciBHTF9VTlNJR05FRF9CWVRFJDYgPSAweDE0MDFcbnZhciBHTF9GTE9BVCQ1ID0gMHgxNDA2XG5cbnZhciBHTF9SR0IkMSA9IDB4MTkwN1xudmFyIEdMX1JHQkEkMiA9IDB4MTkwOFxuXG52YXIgR0xfREVQVEhfQ09NUE9ORU5UJDEgPSAweDE5MDJcblxudmFyIGNvbG9yVGV4dHVyZUZvcm1hdEVudW1zID0gW1xuICBHTF9SR0IkMSxcbiAgR0xfUkdCQSQyXG5dXG5cbi8vIGZvciBldmVyeSB0ZXh0dXJlIGZvcm1hdCwgc3RvcmVcbi8vIHRoZSBudW1iZXIgb2YgY2hhbm5lbHNcbnZhciB0ZXh0dXJlRm9ybWF0Q2hhbm5lbHMgPSBbXVxudGV4dHVyZUZvcm1hdENoYW5uZWxzW0dMX1JHQkEkMl0gPSA0XG50ZXh0dXJlRm9ybWF0Q2hhbm5lbHNbR0xfUkdCJDFdID0gM1xuXG4vLyBmb3IgZXZlcnkgdGV4dHVyZSB0eXBlLCBzdG9yZVxuLy8gdGhlIHNpemUgaW4gYnl0ZXMuXG52YXIgdGV4dHVyZVR5cGVTaXplcyA9IFtdXG50ZXh0dXJlVHlwZVNpemVzW0dMX1VOU0lHTkVEX0JZVEUkNl0gPSAxXG50ZXh0dXJlVHlwZVNpemVzW0dMX0ZMT0FUJDVdID0gNFxudGV4dHVyZVR5cGVTaXplc1tHTF9IQUxGX0ZMT0FUX09FUyQyXSA9IDJcblxudmFyIEdMX1JHQkE0JDIgPSAweDgwNTZcbnZhciBHTF9SR0I1X0ExJDIgPSAweDgwNTdcbnZhciBHTF9SR0I1NjUkMiA9IDB4OEQ2MlxudmFyIEdMX0RFUFRIX0NPTVBPTkVOVDE2JDEgPSAweDgxQTVcbnZhciBHTF9TVEVOQ0lMX0lOREVYOCQxID0gMHg4RDQ4XG52YXIgR0xfREVQVEhfU1RFTkNJTCQyID0gMHg4NEY5XG5cbnZhciBHTF9TUkdCOF9BTFBIQThfRVhUJDEgPSAweDhDNDNcblxudmFyIEdMX1JHQkEzMkZfRVhUJDEgPSAweDg4MTRcblxudmFyIEdMX1JHQkExNkZfRVhUJDEgPSAweDg4MUFcbnZhciBHTF9SR0IxNkZfRVhUJDEgPSAweDg4MUJcblxudmFyIGNvbG9yUmVuZGVyYnVmZmVyRm9ybWF0RW51bXMgPSBbXG4gIEdMX1JHQkE0JDIsXG4gIEdMX1JHQjVfQTEkMixcbiAgR0xfUkdCNTY1JDIsXG4gIEdMX1NSR0I4X0FMUEhBOF9FWFQkMSxcbiAgR0xfUkdCQTE2Rl9FWFQkMSxcbiAgR0xfUkdCMTZGX0VYVCQxLFxuICBHTF9SR0JBMzJGX0VYVCQxXG5dXG5cbnZhciBzdGF0dXNDb2RlID0ge31cbnN0YXR1c0NvZGVbR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUkMV0gPSAnY29tcGxldGUnXG5zdGF0dXNDb2RlW0dMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVF0gPSAnaW5jb21wbGV0ZSBhdHRhY2htZW50J1xuc3RhdHVzQ29kZVtHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlNdID0gJ2luY29tcGxldGUgZGltZW5zaW9ucydcbnN0YXR1c0NvZGVbR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlRdID0gJ2luY29tcGxldGUsIG1pc3NpbmcgYXR0YWNobWVudCdcbnN0YXR1c0NvZGVbR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURURdID0gJ3Vuc3VwcG9ydGVkJ1xuXG5mdW5jdGlvbiB3cmFwRkJPU3RhdGUgKFxuICBnbCxcbiAgZXh0ZW5zaW9ucyxcbiAgbGltaXRzLFxuICB0ZXh0dXJlU3RhdGUsXG4gIHJlbmRlcmJ1ZmZlclN0YXRlLFxuICBzdGF0cykge1xuICB2YXIgZnJhbWVidWZmZXJTdGF0ZSA9IHtcbiAgICBjdXI6IG51bGwsXG4gICAgbmV4dDogbnVsbCxcbiAgICBkaXJ0eTogZmFsc2UsXG4gICAgc2V0RkJPOiBudWxsXG4gIH1cblxuICB2YXIgY29sb3JUZXh0dXJlRm9ybWF0cyA9IFsncmdiYSddXG4gIHZhciBjb2xvclJlbmRlcmJ1ZmZlckZvcm1hdHMgPSBbJ3JnYmE0JywgJ3JnYjU2NScsICdyZ2I1IGExJ11cblxuICBpZiAoZXh0ZW5zaW9ucy5leHRfc3JnYikge1xuICAgIGNvbG9yUmVuZGVyYnVmZmVyRm9ybWF0cy5wdXNoKCdzcmdiYScpXG4gIH1cblxuICBpZiAoZXh0ZW5zaW9ucy5leHRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQpIHtcbiAgICBjb2xvclJlbmRlcmJ1ZmZlckZvcm1hdHMucHVzaCgncmdiYTE2ZicsICdyZ2IxNmYnKVxuICB9XG5cbiAgaWYgKGV4dGVuc2lvbnMud2ViZ2xfY29sb3JfYnVmZmVyX2Zsb2F0KSB7XG4gICAgY29sb3JSZW5kZXJidWZmZXJGb3JtYXRzLnB1c2goJ3JnYmEzMmYnKVxuICB9XG5cbiAgdmFyIGNvbG9yVHlwZXMgPSBbJ3VpbnQ4J11cbiAgaWYgKGV4dGVuc2lvbnMub2VzX3RleHR1cmVfaGFsZl9mbG9hdCkge1xuICAgIGNvbG9yVHlwZXMucHVzaCgnaGFsZiBmbG9hdCcsICdmbG9hdDE2JylcbiAgfVxuICBpZiAoZXh0ZW5zaW9ucy5vZXNfdGV4dHVyZV9mbG9hdCkge1xuICAgIGNvbG9yVHlwZXMucHVzaCgnZmxvYXQnLCAnZmxvYXQzMicpXG4gIH1cblxuICBmdW5jdGlvbiBGcmFtZWJ1ZmZlckF0dGFjaG1lbnQgKHRhcmdldCwgdGV4dHVyZSwgcmVuZGVyYnVmZmVyKSB7XG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXRcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJidWZmZXIgPSByZW5kZXJidWZmZXJcblxuICAgIHZhciB3ID0gMFxuICAgIHZhciBoID0gMFxuICAgIGlmICh0ZXh0dXJlKSB7XG4gICAgICB3ID0gdGV4dHVyZS53aWR0aFxuICAgICAgaCA9IHRleHR1cmUuaGVpZ2h0XG4gICAgfSBlbHNlIGlmIChyZW5kZXJidWZmZXIpIHtcbiAgICAgIHcgPSByZW5kZXJidWZmZXIud2lkdGhcbiAgICAgIGggPSByZW5kZXJidWZmZXIuaGVpZ2h0XG4gICAgfVxuICAgIHRoaXMud2lkdGggPSB3XG4gICAgdGhpcy5oZWlnaHQgPSBoXG4gIH1cblxuICBmdW5jdGlvbiBkZWNSZWYgKGF0dGFjaG1lbnQpIHtcbiAgICBpZiAoYXR0YWNobWVudCkge1xuICAgICAgaWYgKGF0dGFjaG1lbnQudGV4dHVyZSkge1xuICAgICAgICBhdHRhY2htZW50LnRleHR1cmUuX3RleHR1cmUuZGVjUmVmKClcbiAgICAgIH1cbiAgICAgIGlmIChhdHRhY2htZW50LnJlbmRlcmJ1ZmZlcikge1xuICAgICAgICBhdHRhY2htZW50LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmRlY1JlZigpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5jUmVmQW5kQ2hlY2tTaGFwZSAoYXR0YWNobWVudCwgd2lkdGgsIGhlaWdodCkge1xuICAgIGlmICghYXR0YWNobWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChhdHRhY2htZW50LnRleHR1cmUpIHtcbiAgICAgIHZhciB0ZXh0dXJlID0gYXR0YWNobWVudC50ZXh0dXJlLl90ZXh0dXJlXG4gICAgICB2YXIgdHcgPSBNYXRoLm1heCgxLCB0ZXh0dXJlLndpZHRoKVxuICAgICAgdmFyIHRoID0gTWF0aC5tYXgoMSwgdGV4dHVyZS5oZWlnaHQpXG4gICAgICBjaGVjayQxKHR3ID09PSB3aWR0aCAmJiB0aCA9PT0gaGVpZ2h0LFxuICAgICAgICAnaW5jb25zaXN0ZW50IHdpZHRoL2hlaWdodCBmb3Igc3VwcGxpZWQgdGV4dHVyZScpXG4gICAgICB0ZXh0dXJlLnJlZkNvdW50ICs9IDFcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHJlbmRlcmJ1ZmZlciA9IGF0dGFjaG1lbnQucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXJcbiAgICAgIGNoZWNrJDEoXG4gICAgICAgIHJlbmRlcmJ1ZmZlci53aWR0aCA9PT0gd2lkdGggJiYgcmVuZGVyYnVmZmVyLmhlaWdodCA9PT0gaGVpZ2h0LFxuICAgICAgICAnaW5jb25zaXN0ZW50IHdpZHRoL2hlaWdodCBmb3IgcmVuZGVyYnVmZmVyJylcbiAgICAgIHJlbmRlcmJ1ZmZlci5yZWZDb3VudCArPSAxXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYXR0YWNoIChsb2NhdGlvbiwgYXR0YWNobWVudCkge1xuICAgIGlmIChhdHRhY2htZW50KSB7XG4gICAgICBpZiAoYXR0YWNobWVudC50ZXh0dXJlKSB7XG4gICAgICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKFxuICAgICAgICAgIEdMX0ZSQU1FQlVGRkVSJDEsXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgYXR0YWNobWVudC50YXJnZXQsXG4gICAgICAgICAgYXR0YWNobWVudC50ZXh0dXJlLl90ZXh0dXJlLnRleHR1cmUsXG4gICAgICAgICAgMClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKFxuICAgICAgICAgIEdMX0ZSQU1FQlVGRkVSJDEsXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgR0xfUkVOREVSQlVGRkVSJDEsXG4gICAgICAgICAgYXR0YWNobWVudC5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5yZW5kZXJidWZmZXIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VBdHRhY2htZW50IChhdHRhY2htZW50KSB7XG4gICAgdmFyIHRhcmdldCA9IEdMX1RFWFRVUkVfMkQkMlxuICAgIHZhciB0ZXh0dXJlID0gbnVsbFxuICAgIHZhciByZW5kZXJidWZmZXIgPSBudWxsXG5cbiAgICB2YXIgZGF0YSA9IGF0dGFjaG1lbnRcbiAgICBpZiAodHlwZW9mIGF0dGFjaG1lbnQgPT09ICdvYmplY3QnKSB7XG4gICAgICBkYXRhID0gYXR0YWNobWVudC5kYXRhXG4gICAgICBpZiAoJ3RhcmdldCcgaW4gYXR0YWNobWVudCkge1xuICAgICAgICB0YXJnZXQgPSBhdHRhY2htZW50LnRhcmdldCB8IDBcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjaGVjayQxLnR5cGUoZGF0YSwgJ2Z1bmN0aW9uJywgJ2ludmFsaWQgYXR0YWNobWVudCBkYXRhJylcblxuICAgIHZhciB0eXBlID0gZGF0YS5fcmVnbFR5cGVcbiAgICBpZiAodHlwZSA9PT0gJ3RleHR1cmUyZCcpIHtcbiAgICAgIHRleHR1cmUgPSBkYXRhXG4gICAgICBjaGVjayQxKHRhcmdldCA9PT0gR0xfVEVYVFVSRV8yRCQyKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3RleHR1cmVDdWJlJykge1xuICAgICAgdGV4dHVyZSA9IGRhdGFcbiAgICAgIGNoZWNrJDEoXG4gICAgICAgIHRhcmdldCA+PSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gkMiAmJlxuICAgICAgICB0YXJnZXQgPCBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gkMiArIDYsXG4gICAgICAgICdpbnZhbGlkIGN1YmUgbWFwIHRhcmdldCcpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAncmVuZGVyYnVmZmVyJykge1xuICAgICAgcmVuZGVyYnVmZmVyID0gZGF0YVxuICAgICAgdGFyZ2V0ID0gR0xfUkVOREVSQlVGRkVSJDFcbiAgICB9IGVsc2Uge1xuICAgICAgY2hlY2skMS5yYWlzZSgnaW52YWxpZCByZWdsIG9iamVjdCBmb3IgYXR0YWNobWVudCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBGcmFtZWJ1ZmZlckF0dGFjaG1lbnQodGFyZ2V0LCB0ZXh0dXJlLCByZW5kZXJidWZmZXIpXG4gIH1cblxuICBmdW5jdGlvbiBhbGxvY0F0dGFjaG1lbnQgKFxuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBpc1RleHR1cmUsXG4gICAgZm9ybWF0LFxuICAgIHR5cGUpIHtcbiAgICBpZiAoaXNUZXh0dXJlKSB7XG4gICAgICB2YXIgdGV4dHVyZSA9IHRleHR1cmVTdGF0ZS5jcmVhdGUyRCh7XG4gICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgIGZvcm1hdDogZm9ybWF0LFxuICAgICAgICB0eXBlOiB0eXBlXG4gICAgICB9KVxuICAgICAgdGV4dHVyZS5fdGV4dHVyZS5yZWZDb3VudCA9IDBcbiAgICAgIHJldHVybiBuZXcgRnJhbWVidWZmZXJBdHRhY2htZW50KEdMX1RFWFRVUkVfMkQkMiwgdGV4dHVyZSwgbnVsbClcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHJiID0gcmVuZGVyYnVmZmVyU3RhdGUuY3JlYXRlKHtcbiAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgZm9ybWF0OiBmb3JtYXRcbiAgICAgIH0pXG4gICAgICByYi5fcmVuZGVyYnVmZmVyLnJlZkNvdW50ID0gMFxuICAgICAgcmV0dXJuIG5ldyBGcmFtZWJ1ZmZlckF0dGFjaG1lbnQoR0xfUkVOREVSQlVGRkVSJDEsIG51bGwsIHJiKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVud3JhcEF0dGFjaG1lbnQgKGF0dGFjaG1lbnQpIHtcbiAgICByZXR1cm4gYXR0YWNobWVudCAmJiAoYXR0YWNobWVudC50ZXh0dXJlIHx8IGF0dGFjaG1lbnQucmVuZGVyYnVmZmVyKVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzaXplQXR0YWNobWVudCAoYXR0YWNobWVudCwgdywgaCkge1xuICAgIGlmIChhdHRhY2htZW50KSB7XG4gICAgICBpZiAoYXR0YWNobWVudC50ZXh0dXJlKSB7XG4gICAgICAgIGF0dGFjaG1lbnQudGV4dHVyZS5yZXNpemUodywgaClcbiAgICAgIH0gZWxzZSBpZiAoYXR0YWNobWVudC5yZW5kZXJidWZmZXIpIHtcbiAgICAgICAgYXR0YWNobWVudC5yZW5kZXJidWZmZXIucmVzaXplKHcsIGgpXG4gICAgICB9XG4gICAgICBhdHRhY2htZW50LndpZHRoID0gd1xuICAgICAgYXR0YWNobWVudC5oZWlnaHQgPSBoXG4gICAgfVxuICB9XG5cbiAgdmFyIGZyYW1lYnVmZmVyQ291bnQgPSAwXG4gIHZhciBmcmFtZWJ1ZmZlclNldCA9IHt9XG5cbiAgZnVuY3Rpb24gUkVHTEZyYW1lYnVmZmVyICgpIHtcbiAgICB0aGlzLmlkID0gZnJhbWVidWZmZXJDb3VudCsrXG4gICAgZnJhbWVidWZmZXJTZXRbdGhpcy5pZF0gPSB0aGlzXG5cbiAgICB0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKVxuICAgIHRoaXMud2lkdGggPSAwXG4gICAgdGhpcy5oZWlnaHQgPSAwXG5cbiAgICB0aGlzLmNvbG9yQXR0YWNobWVudHMgPSBbXVxuICAgIHRoaXMuZGVwdGhBdHRhY2htZW50ID0gbnVsbFxuICAgIHRoaXMuc3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsXG4gICAgdGhpcy5kZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gZGVjRkJPUmVmcyAoZnJhbWVidWZmZXIpIHtcbiAgICBmcmFtZWJ1ZmZlci5jb2xvckF0dGFjaG1lbnRzLmZvckVhY2goZGVjUmVmKVxuICAgIGRlY1JlZihmcmFtZWJ1ZmZlci5kZXB0aEF0dGFjaG1lbnQpXG4gICAgZGVjUmVmKGZyYW1lYnVmZmVyLnN0ZW5jaWxBdHRhY2htZW50KVxuICAgIGRlY1JlZihmcmFtZWJ1ZmZlci5kZXB0aFN0ZW5jaWxBdHRhY2htZW50KVxuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveSAoZnJhbWVidWZmZXIpIHtcbiAgICB2YXIgaGFuZGxlID0gZnJhbWVidWZmZXIuZnJhbWVidWZmZXJcbiAgICBjaGVjayQxKGhhbmRsZSwgJ211c3Qgbm90IGRvdWJsZSBkZXN0cm95IGZyYW1lYnVmZmVyJylcbiAgICBnbC5kZWxldGVGcmFtZWJ1ZmZlcihoYW5kbGUpXG4gICAgZnJhbWVidWZmZXIuZnJhbWVidWZmZXIgPSBudWxsXG4gICAgc3RhdHMuZnJhbWVidWZmZXJDb3VudC0tXG4gICAgZGVsZXRlIGZyYW1lYnVmZmVyU2V0W2ZyYW1lYnVmZmVyLmlkXVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRnJhbWVidWZmZXIgKGZyYW1lYnVmZmVyKSB7XG4gICAgdmFyIGlcblxuICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiQxLCBmcmFtZWJ1ZmZlci5mcmFtZWJ1ZmZlcilcbiAgICB2YXIgY29sb3JBdHRhY2htZW50cyA9IGZyYW1lYnVmZmVyLmNvbG9yQXR0YWNobWVudHNcbiAgICBmb3IgKGkgPSAwOyBpIDwgY29sb3JBdHRhY2htZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgYXR0YWNoKEdMX0NPTE9SX0FUVEFDSE1FTlQwJDEgKyBpLCBjb2xvckF0dGFjaG1lbnRzW2ldKVxuICAgIH1cbiAgICBmb3IgKGkgPSBjb2xvckF0dGFjaG1lbnRzLmxlbmd0aDsgaSA8IGxpbWl0cy5tYXhDb2xvckF0dGFjaG1lbnRzOyArK2kpIHtcbiAgICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKFxuICAgICAgICBHTF9GUkFNRUJVRkZFUiQxLFxuICAgICAgICBHTF9DT0xPUl9BVFRBQ0hNRU5UMCQxICsgaSxcbiAgICAgICAgR0xfVEVYVFVSRV8yRCQyLFxuICAgICAgICBudWxsLFxuICAgICAgICAwKVxuICAgIH1cblxuICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKFxuICAgICAgR0xfRlJBTUVCVUZGRVIkMSxcbiAgICAgIEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVCxcbiAgICAgIEdMX1RFWFRVUkVfMkQkMixcbiAgICAgIG51bGwsXG4gICAgICAwKVxuICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKFxuICAgICAgR0xfRlJBTUVCVUZGRVIkMSxcbiAgICAgIEdMX0RFUFRIX0FUVEFDSE1FTlQsXG4gICAgICBHTF9URVhUVVJFXzJEJDIsXG4gICAgICBudWxsLFxuICAgICAgMClcbiAgICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChcbiAgICAgIEdMX0ZSQU1FQlVGRkVSJDEsXG4gICAgICBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsXG4gICAgICBHTF9URVhUVVJFXzJEJDIsXG4gICAgICBudWxsLFxuICAgICAgMClcblxuICAgIGF0dGFjaChHTF9ERVBUSF9BVFRBQ0hNRU5ULCBmcmFtZWJ1ZmZlci5kZXB0aEF0dGFjaG1lbnQpXG4gICAgYXR0YWNoKEdMX1NURU5DSUxfQVRUQUNITUVOVCwgZnJhbWVidWZmZXIuc3RlbmNpbEF0dGFjaG1lbnQpXG4gICAgYXR0YWNoKEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVCwgZnJhbWVidWZmZXIuZGVwdGhTdGVuY2lsQXR0YWNobWVudClcblxuICAgIC8vIENoZWNrIHN0YXR1cyBjb2RlXG4gICAgdmFyIHN0YXR1cyA9IGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xfRlJBTUVCVUZGRVIkMSlcbiAgICBpZiAoIWdsLmlzQ29udGV4dExvc3QoKSAmJiBzdGF0dXMgIT09IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFJDEpIHtcbiAgICAgIGNoZWNrJDEucmFpc2UoJ2ZyYW1lYnVmZmVyIGNvbmZpZ3VyYXRpb24gbm90IHN1cHBvcnRlZCwgc3RhdHVzID0gJyArXG4gICAgICAgIHN0YXR1c0NvZGVbc3RhdHVzXSlcbiAgICB9XG5cbiAgICBnbC5iaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIkMSwgZnJhbWVidWZmZXJTdGF0ZS5uZXh0ID8gZnJhbWVidWZmZXJTdGF0ZS5uZXh0LmZyYW1lYnVmZmVyIDogbnVsbClcbiAgICBmcmFtZWJ1ZmZlclN0YXRlLmN1ciA9IGZyYW1lYnVmZmVyU3RhdGUubmV4dFxuXG4gICAgLy8gRklYTUU6IENsZWFyIGVycm9yIGNvZGUgaGVyZS4gIFRoaXMgaXMgYSB3b3JrIGFyb3VuZCBmb3IgYSBidWcgaW5cbiAgICAvLyBoZWFkbGVzcy1nbFxuICAgIGdsLmdldEVycm9yKClcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUZCTyAoYTAsIGExKSB7XG4gICAgdmFyIGZyYW1lYnVmZmVyID0gbmV3IFJFR0xGcmFtZWJ1ZmZlcigpXG4gICAgc3RhdHMuZnJhbWVidWZmZXJDb3VudCsrXG5cbiAgICBmdW5jdGlvbiByZWdsRnJhbWVidWZmZXIgKGEsIGIpIHtcbiAgICAgIHZhciBpXG5cbiAgICAgIGNoZWNrJDEoZnJhbWVidWZmZXJTdGF0ZS5uZXh0ICE9PSBmcmFtZWJ1ZmZlcixcbiAgICAgICAgJ2NhbiBub3QgdXBkYXRlIGZyYW1lYnVmZmVyIHdoaWNoIGlzIGN1cnJlbnRseSBpbiB1c2UnKVxuXG4gICAgICB2YXIgd2lkdGggPSAwXG4gICAgICB2YXIgaGVpZ2h0ID0gMFxuXG4gICAgICB2YXIgbmVlZHNEZXB0aCA9IHRydWVcbiAgICAgIHZhciBuZWVkc1N0ZW5jaWwgPSB0cnVlXG5cbiAgICAgIHZhciBjb2xvckJ1ZmZlciA9IG51bGxcbiAgICAgIHZhciBjb2xvclRleHR1cmUgPSB0cnVlXG4gICAgICB2YXIgY29sb3JGb3JtYXQgPSAncmdiYSdcbiAgICAgIHZhciBjb2xvclR5cGUgPSAndWludDgnXG4gICAgICB2YXIgY29sb3JDb3VudCA9IDFcblxuICAgICAgdmFyIGRlcHRoQnVmZmVyID0gbnVsbFxuICAgICAgdmFyIHN0ZW5jaWxCdWZmZXIgPSBudWxsXG4gICAgICB2YXIgZGVwdGhTdGVuY2lsQnVmZmVyID0gbnVsbFxuICAgICAgdmFyIGRlcHRoU3RlbmNpbFRleHR1cmUgPSBmYWxzZVxuXG4gICAgICBpZiAodHlwZW9mIGEgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHdpZHRoID0gYSB8IDBcbiAgICAgICAgaGVpZ2h0ID0gKGIgfCAwKSB8fCB3aWR0aFxuICAgICAgfSBlbHNlIGlmICghYSkge1xuICAgICAgICB3aWR0aCA9IGhlaWdodCA9IDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoZWNrJDEudHlwZShhLCAnb2JqZWN0JywgJ2ludmFsaWQgYXJndW1lbnRzIGZvciBmcmFtZWJ1ZmZlcicpXG4gICAgICAgIHZhciBvcHRpb25zID0gYVxuXG4gICAgICAgIGlmICgnc2hhcGUnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICB2YXIgc2hhcGUgPSBvcHRpb25zLnNoYXBlXG4gICAgICAgICAgY2hlY2skMShBcnJheS5pc0FycmF5KHNoYXBlKSAmJiBzaGFwZS5sZW5ndGggPj0gMixcbiAgICAgICAgICAgICdpbnZhbGlkIHNoYXBlIGZvciBmcmFtZWJ1ZmZlcicpXG4gICAgICAgICAgd2lkdGggPSBzaGFwZVswXVxuICAgICAgICAgIGhlaWdodCA9IHNoYXBlWzFdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCdyYWRpdXMnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gb3B0aW9ucy5yYWRpdXNcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCd3aWR0aCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgd2lkdGggPSBvcHRpb25zLndpZHRoXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgnaGVpZ2h0JyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBoZWlnaHQgPSBvcHRpb25zLmhlaWdodFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgnY29sb3InIGluIG9wdGlvbnMgfHxcbiAgICAgICAgICAgICdjb2xvcnMnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBjb2xvckJ1ZmZlciA9XG4gICAgICAgICAgICBvcHRpb25zLmNvbG9yIHx8XG4gICAgICAgICAgICBvcHRpb25zLmNvbG9yc1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbG9yQnVmZmVyKSkge1xuICAgICAgICAgICAgY2hlY2skMShcbiAgICAgICAgICAgICAgY29sb3JCdWZmZXIubGVuZ3RoID09PSAxIHx8IGV4dGVuc2lvbnMud2ViZ2xfZHJhd19idWZmZXJzLFxuICAgICAgICAgICAgICAnbXVsdGlwbGUgcmVuZGVyIHRhcmdldHMgbm90IHN1cHBvcnRlZCcpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb2xvckJ1ZmZlcikge1xuICAgICAgICAgIGlmICgnY29sb3JDb3VudCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgY29sb3JDb3VudCA9IG9wdGlvbnMuY29sb3JDb3VudCB8IDBcbiAgICAgICAgICAgIGNoZWNrJDEoY29sb3JDb3VudCA+IDAsICdpbnZhbGlkIGNvbG9yIGJ1ZmZlciBjb3VudCcpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCdjb2xvclRleHR1cmUnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbG9yVGV4dHVyZSA9ICEhb3B0aW9ucy5jb2xvclRleHR1cmVcbiAgICAgICAgICAgIGNvbG9yRm9ybWF0ID0gJ3JnYmE0J1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgnY29sb3JUeXBlJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjb2xvclR5cGUgPSBvcHRpb25zLmNvbG9yVHlwZVxuICAgICAgICAgICAgaWYgKCFjb2xvclRleHR1cmUpIHtcbiAgICAgICAgICAgICAgaWYgKGNvbG9yVHlwZSA9PT0gJ2hhbGYgZmxvYXQnIHx8IGNvbG9yVHlwZSA9PT0gJ2Zsb2F0MTYnKSB7XG4gICAgICAgICAgICAgICAgY2hlY2skMShleHRlbnNpb25zLmV4dF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCxcbiAgICAgICAgICAgICAgICAgICd5b3UgbXVzdCBlbmFibGUgRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IHRvIHVzZSAxNi1iaXQgcmVuZGVyIGJ1ZmZlcnMnKVxuICAgICAgICAgICAgICAgIGNvbG9yRm9ybWF0ID0gJ3JnYmExNmYnXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sb3JUeXBlID09PSAnZmxvYXQnIHx8IGNvbG9yVHlwZSA9PT0gJ2Zsb2F0MzInKSB7XG4gICAgICAgICAgICAgICAgY2hlY2skMShleHRlbnNpb25zLndlYmdsX2NvbG9yX2J1ZmZlcl9mbG9hdCxcbiAgICAgICAgICAgICAgICAgICd5b3UgbXVzdCBlbmFibGUgV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0IGluIG9yZGVyIHRvIHVzZSAzMi1iaXQgZmxvYXRpbmcgcG9pbnQgcmVuZGVyYnVmZmVycycpXG4gICAgICAgICAgICAgICAgY29sb3JGb3JtYXQgPSAncmdiYTMyZidcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2hlY2skMShleHRlbnNpb25zLm9lc190ZXh0dXJlX2Zsb2F0IHx8XG4gICAgICAgICAgICAgICAgIShjb2xvclR5cGUgPT09ICdmbG9hdCcgfHwgY29sb3JUeXBlID09PSAnZmxvYXQzMicpLFxuICAgICAgICAgICAgICAneW91IG11c3QgZW5hYmxlIE9FU190ZXh0dXJlX2Zsb2F0IGluIG9yZGVyIHRvIHVzZSBmbG9hdGluZyBwb2ludCBmcmFtZWJ1ZmZlciBvYmplY3RzJylcbiAgICAgICAgICAgICAgY2hlY2skMShleHRlbnNpb25zLm9lc190ZXh0dXJlX2hhbGZfZmxvYXQgfHxcbiAgICAgICAgICAgICAgICAhKGNvbG9yVHlwZSA9PT0gJ2hhbGYgZmxvYXQnIHx8IGNvbG9yVHlwZSA9PT0gJ2Zsb2F0MTYnKSxcbiAgICAgICAgICAgICAgJ3lvdSBtdXN0IGVuYWJsZSBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGluIG9yZGVyIHRvIHVzZSAxNi1iaXQgZmxvYXRpbmcgcG9pbnQgZnJhbWVidWZmZXIgb2JqZWN0cycpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGVjayQxLm9uZU9mKGNvbG9yVHlwZSwgY29sb3JUeXBlcywgJ2ludmFsaWQgY29sb3IgdHlwZScpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCdjb2xvckZvcm1hdCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgY29sb3JGb3JtYXQgPSBvcHRpb25zLmNvbG9yRm9ybWF0XG4gICAgICAgICAgICBpZiAoY29sb3JUZXh0dXJlRm9ybWF0cy5pbmRleE9mKGNvbG9yRm9ybWF0KSA+PSAwKSB7XG4gICAgICAgICAgICAgIGNvbG9yVGV4dHVyZSA9IHRydWVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sb3JSZW5kZXJidWZmZXJGb3JtYXRzLmluZGV4T2YoY29sb3JGb3JtYXQpID49IDApIHtcbiAgICAgICAgICAgICAgY29sb3JUZXh0dXJlID0gZmFsc2VcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChjb2xvclRleHR1cmUpIHtcbiAgICAgICAgICAgICAgICBjaGVjayQxLm9uZU9mKFxuICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jb2xvckZvcm1hdCwgY29sb3JUZXh0dXJlRm9ybWF0cyxcbiAgICAgICAgICAgICAgICAgICdpbnZhbGlkIGNvbG9yIGZvcm1hdCBmb3IgdGV4dHVyZScpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2hlY2skMS5vbmVPZihcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29sb3JGb3JtYXQsIGNvbG9yUmVuZGVyYnVmZmVyRm9ybWF0cyxcbiAgICAgICAgICAgICAgICAgICdpbnZhbGlkIGNvbG9yIGZvcm1hdCBmb3IgcmVuZGVyYnVmZmVyJylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgnZGVwdGhUZXh0dXJlJyBpbiBvcHRpb25zIHx8ICdkZXB0aFN0ZW5jaWxUZXh0dXJlJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZSA9ICEhKG9wdGlvbnMuZGVwdGhUZXh0dXJlIHx8XG4gICAgICAgICAgICBvcHRpb25zLmRlcHRoU3RlbmNpbFRleHR1cmUpXG4gICAgICAgICAgY2hlY2skMSghZGVwdGhTdGVuY2lsVGV4dHVyZSB8fCBleHRlbnNpb25zLndlYmdsX2RlcHRoX3RleHR1cmUsXG4gICAgICAgICAgICAnd2ViZ2xfZGVwdGhfdGV4dHVyZSBleHRlbnNpb24gbm90IHN1cHBvcnRlZCcpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ2RlcHRoJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmRlcHRoID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIG5lZWRzRGVwdGggPSBvcHRpb25zLmRlcHRoXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlcHRoQnVmZmVyID0gb3B0aW9ucy5kZXB0aFxuICAgICAgICAgICAgbmVlZHNTdGVuY2lsID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3N0ZW5jaWwnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuc3RlbmNpbCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBuZWVkc1N0ZW5jaWwgPSBvcHRpb25zLnN0ZW5jaWxcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RlbmNpbEJ1ZmZlciA9IG9wdGlvbnMuc3RlbmNpbFxuICAgICAgICAgICAgbmVlZHNEZXB0aCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdkZXB0aFN0ZW5jaWwnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVwdGhTdGVuY2lsID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIG5lZWRzRGVwdGggPSBuZWVkc1N0ZW5jaWwgPSBvcHRpb25zLmRlcHRoU3RlbmNpbFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZXB0aFN0ZW5jaWxCdWZmZXIgPSBvcHRpb25zLmRlcHRoU3RlbmNpbFxuICAgICAgICAgICAgbmVlZHNEZXB0aCA9IGZhbHNlXG4gICAgICAgICAgICBuZWVkc1N0ZW5jaWwgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBwYXJzZSBhdHRhY2htZW50c1xuICAgICAgdmFyIGNvbG9yQXR0YWNobWVudHMgPSBudWxsXG4gICAgICB2YXIgZGVwdGhBdHRhY2htZW50ID0gbnVsbFxuICAgICAgdmFyIHN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbFxuICAgICAgdmFyIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsXG5cbiAgICAgIC8vIFNldCB1cCBjb2xvciBhdHRhY2htZW50c1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sb3JCdWZmZXIpKSB7XG4gICAgICAgIGNvbG9yQXR0YWNobWVudHMgPSBjb2xvckJ1ZmZlci5tYXAocGFyc2VBdHRhY2htZW50KVxuICAgICAgfSBlbHNlIGlmIChjb2xvckJ1ZmZlcikge1xuICAgICAgICBjb2xvckF0dGFjaG1lbnRzID0gW3BhcnNlQXR0YWNobWVudChjb2xvckJ1ZmZlcildXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2xvckF0dGFjaG1lbnRzID0gbmV3IEFycmF5KGNvbG9yQ291bnQpXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2xvckNvdW50OyArK2kpIHtcbiAgICAgICAgICBjb2xvckF0dGFjaG1lbnRzW2ldID0gYWxsb2NBdHRhY2htZW50KFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICBjb2xvclRleHR1cmUsXG4gICAgICAgICAgICBjb2xvckZvcm1hdCxcbiAgICAgICAgICAgIGNvbG9yVHlwZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjaGVjayQxKGV4dGVuc2lvbnMud2ViZ2xfZHJhd19idWZmZXJzIHx8IGNvbG9yQXR0YWNobWVudHMubGVuZ3RoIDw9IDEsXG4gICAgICAgICd5b3UgbXVzdCBlbmFibGUgdGhlIFdFQkdMX2RyYXdfYnVmZmVycyBleHRlbnNpb24gaW4gb3JkZXIgdG8gdXNlIG11bHRpcGxlIGNvbG9yIGJ1ZmZlcnMuJylcbiAgICAgIGNoZWNrJDEoY29sb3JBdHRhY2htZW50cy5sZW5ndGggPD0gbGltaXRzLm1heENvbG9yQXR0YWNobWVudHMsXG4gICAgICAgICd0b28gbWFueSBjb2xvciBhdHRhY2htZW50cywgbm90IHN1cHBvcnRlZCcpXG5cbiAgICAgIHdpZHRoID0gd2lkdGggfHwgY29sb3JBdHRhY2htZW50c1swXS53aWR0aFxuICAgICAgaGVpZ2h0ID0gaGVpZ2h0IHx8IGNvbG9yQXR0YWNobWVudHNbMF0uaGVpZ2h0XG5cbiAgICAgIGlmIChkZXB0aEJ1ZmZlcikge1xuICAgICAgICBkZXB0aEF0dGFjaG1lbnQgPSBwYXJzZUF0dGFjaG1lbnQoZGVwdGhCdWZmZXIpXG4gICAgICB9IGVsc2UgaWYgKG5lZWRzRGVwdGggJiYgIW5lZWRzU3RlbmNpbCkge1xuICAgICAgICBkZXB0aEF0dGFjaG1lbnQgPSBhbGxvY0F0dGFjaG1lbnQoXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmUsXG4gICAgICAgICAgJ2RlcHRoJyxcbiAgICAgICAgICAndWludDMyJylcbiAgICAgIH1cblxuICAgICAgaWYgKHN0ZW5jaWxCdWZmZXIpIHtcbiAgICAgICAgc3RlbmNpbEF0dGFjaG1lbnQgPSBwYXJzZUF0dGFjaG1lbnQoc3RlbmNpbEJ1ZmZlcilcbiAgICAgIH0gZWxzZSBpZiAobmVlZHNTdGVuY2lsICYmICFuZWVkc0RlcHRoKSB7XG4gICAgICAgIHN0ZW5jaWxBdHRhY2htZW50ID0gYWxsb2NBdHRhY2htZW50KFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAnc3RlbmNpbCcsXG4gICAgICAgICAgJ3VpbnQ4JylcbiAgICAgIH1cblxuICAgICAgaWYgKGRlcHRoU3RlbmNpbEJ1ZmZlcikge1xuICAgICAgICBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gcGFyc2VBdHRhY2htZW50KGRlcHRoU3RlbmNpbEJ1ZmZlcilcbiAgICAgIH0gZWxzZSBpZiAoIWRlcHRoQnVmZmVyICYmICFzdGVuY2lsQnVmZmVyICYmIG5lZWRzU3RlbmNpbCAmJiBuZWVkc0RlcHRoKSB7XG4gICAgICAgIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBhbGxvY0F0dGFjaG1lbnQoXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmUsXG4gICAgICAgICAgJ2RlcHRoIHN0ZW5jaWwnLFxuICAgICAgICAgICdkZXB0aCBzdGVuY2lsJylcbiAgICAgIH1cblxuICAgICAgY2hlY2skMShcbiAgICAgICAgKCEhZGVwdGhCdWZmZXIpICsgKCEhc3RlbmNpbEJ1ZmZlcikgKyAoISFkZXB0aFN0ZW5jaWxCdWZmZXIpIDw9IDEsXG4gICAgICAgICdpbnZhbGlkIGZyYW1lYnVmZmVyIGNvbmZpZ3VyYXRpb24sIGNhbiBzcGVjaWZ5IGV4YWN0bHkgb25lIGRlcHRoL3N0ZW5jaWwgYXR0YWNobWVudCcpXG5cbiAgICAgIHZhciBjb21tb25Db2xvckF0dGFjaG1lbnRTaXplID0gbnVsbFxuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY29sb3JBdHRhY2htZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICBpbmNSZWZBbmRDaGVja1NoYXBlKGNvbG9yQXR0YWNobWVudHNbaV0sIHdpZHRoLCBoZWlnaHQpXG4gICAgICAgIGNoZWNrJDEoIWNvbG9yQXR0YWNobWVudHNbaV0gfHxcbiAgICAgICAgICAoY29sb3JBdHRhY2htZW50c1tpXS50ZXh0dXJlICYmXG4gICAgICAgICAgICBjb2xvclRleHR1cmVGb3JtYXRFbnVtcy5pbmRleE9mKGNvbG9yQXR0YWNobWVudHNbaV0udGV4dHVyZS5fdGV4dHVyZS5mb3JtYXQpID49IDApIHx8XG4gICAgICAgICAgKGNvbG9yQXR0YWNobWVudHNbaV0ucmVuZGVyYnVmZmVyICYmXG4gICAgICAgICAgICBjb2xvclJlbmRlcmJ1ZmZlckZvcm1hdEVudW1zLmluZGV4T2YoY29sb3JBdHRhY2htZW50c1tpXS5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5mb3JtYXQpID49IDApLFxuICAgICAgICAnZnJhbWVidWZmZXIgY29sb3IgYXR0YWNobWVudCAnICsgaSArICcgaXMgaW52YWxpZCcpXG5cbiAgICAgICAgaWYgKGNvbG9yQXR0YWNobWVudHNbaV0gJiYgY29sb3JBdHRhY2htZW50c1tpXS50ZXh0dXJlKSB7XG4gICAgICAgICAgdmFyIGNvbG9yQXR0YWNobWVudFNpemUgPVxuICAgICAgICAgICAgICB0ZXh0dXJlRm9ybWF0Q2hhbm5lbHNbY29sb3JBdHRhY2htZW50c1tpXS50ZXh0dXJlLl90ZXh0dXJlLmZvcm1hdF0gKlxuICAgICAgICAgICAgICB0ZXh0dXJlVHlwZVNpemVzW2NvbG9yQXR0YWNobWVudHNbaV0udGV4dHVyZS5fdGV4dHVyZS50eXBlXVxuXG4gICAgICAgICAgaWYgKGNvbW1vbkNvbG9yQXR0YWNobWVudFNpemUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbW1vbkNvbG9yQXR0YWNobWVudFNpemUgPSBjb2xvckF0dGFjaG1lbnRTaXplXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYWxsIGNvbG9yIGF0dGFjaG1lbnRzIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGJpdHBsYW5lc1xuICAgICAgICAgICAgLy8gKHRoYXQgaXMsIHRoZSBzYW1lIG51bWVyIG9mIGJpdHMgcGVyIHBpeGVsKVxuICAgICAgICAgICAgLy8gVGhpcyBpcyByZXF1aXJlZCBieSB0aGUgR0xFUzIuMCBzdGFuZGFyZC4gU2VlIHRoZSBiZWdpbm5pbmcgb2YgQ2hhcHRlciA0IGluIHRoYXQgZG9jdW1lbnQuXG4gICAgICAgICAgICBjaGVjayQxKGNvbW1vbkNvbG9yQXR0YWNobWVudFNpemUgPT09IGNvbG9yQXR0YWNobWVudFNpemUsXG4gICAgICAgICAgICAgICdhbGwgY29sb3IgYXR0YWNobWVudHMgbXVjaCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBiaXRzIHBlciBwaXhlbC4nKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaW5jUmVmQW5kQ2hlY2tTaGFwZShkZXB0aEF0dGFjaG1lbnQsIHdpZHRoLCBoZWlnaHQpXG4gICAgICBjaGVjayQxKCFkZXB0aEF0dGFjaG1lbnQgfHxcbiAgICAgICAgKGRlcHRoQXR0YWNobWVudC50ZXh0dXJlICYmXG4gICAgICAgICAgZGVwdGhBdHRhY2htZW50LnRleHR1cmUuX3RleHR1cmUuZm9ybWF0ID09PSBHTF9ERVBUSF9DT01QT05FTlQkMSkgfHxcbiAgICAgICAgKGRlcHRoQXR0YWNobWVudC5yZW5kZXJidWZmZXIgJiZcbiAgICAgICAgICBkZXB0aEF0dGFjaG1lbnQucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIuZm9ybWF0ID09PSBHTF9ERVBUSF9DT01QT05FTlQxNiQxKSxcbiAgICAgICdpbnZhbGlkIGRlcHRoIGF0dGFjaG1lbnQgZm9yIGZyYW1lYnVmZmVyIG9iamVjdCcpXG4gICAgICBpbmNSZWZBbmRDaGVja1NoYXBlKHN0ZW5jaWxBdHRhY2htZW50LCB3aWR0aCwgaGVpZ2h0KVxuICAgICAgY2hlY2skMSghc3RlbmNpbEF0dGFjaG1lbnQgfHxcbiAgICAgICAgKHN0ZW5jaWxBdHRhY2htZW50LnJlbmRlcmJ1ZmZlciAmJlxuICAgICAgICAgIHN0ZW5jaWxBdHRhY2htZW50LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmZvcm1hdCA9PT0gR0xfU1RFTkNJTF9JTkRFWDgkMSksXG4gICAgICAnaW52YWxpZCBzdGVuY2lsIGF0dGFjaG1lbnQgZm9yIGZyYW1lYnVmZmVyIG9iamVjdCcpXG4gICAgICBpbmNSZWZBbmRDaGVja1NoYXBlKGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQsIHdpZHRoLCBoZWlnaHQpXG4gICAgICBjaGVjayQxKCFkZXB0aFN0ZW5jaWxBdHRhY2htZW50IHx8XG4gICAgICAgIChkZXB0aFN0ZW5jaWxBdHRhY2htZW50LnRleHR1cmUgJiZcbiAgICAgICAgICBkZXB0aFN0ZW5jaWxBdHRhY2htZW50LnRleHR1cmUuX3RleHR1cmUuZm9ybWF0ID09PSBHTF9ERVBUSF9TVEVOQ0lMJDIpIHx8XG4gICAgICAgIChkZXB0aFN0ZW5jaWxBdHRhY2htZW50LnJlbmRlcmJ1ZmZlciAmJlxuICAgICAgICAgIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIuZm9ybWF0ID09PSBHTF9ERVBUSF9TVEVOQ0lMJDIpLFxuICAgICAgJ2ludmFsaWQgZGVwdGgtc3RlbmNpbCBhdHRhY2htZW50IGZvciBmcmFtZWJ1ZmZlciBvYmplY3QnKVxuXG4gICAgICAvLyBkZWNyZW1lbnQgcmVmZXJlbmNlc1xuICAgICAgZGVjRkJPUmVmcyhmcmFtZWJ1ZmZlcilcblxuICAgICAgZnJhbWVidWZmZXIud2lkdGggPSB3aWR0aFxuICAgICAgZnJhbWVidWZmZXIuaGVpZ2h0ID0gaGVpZ2h0XG5cbiAgICAgIGZyYW1lYnVmZmVyLmNvbG9yQXR0YWNobWVudHMgPSBjb2xvckF0dGFjaG1lbnRzXG4gICAgICBmcmFtZWJ1ZmZlci5kZXB0aEF0dGFjaG1lbnQgPSBkZXB0aEF0dGFjaG1lbnRcbiAgICAgIGZyYW1lYnVmZmVyLnN0ZW5jaWxBdHRhY2htZW50ID0gc3RlbmNpbEF0dGFjaG1lbnRcbiAgICAgIGZyYW1lYnVmZmVyLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBkZXB0aFN0ZW5jaWxBdHRhY2htZW50XG5cbiAgICAgIHJlZ2xGcmFtZWJ1ZmZlci5jb2xvciA9IGNvbG9yQXR0YWNobWVudHMubWFwKHVud3JhcEF0dGFjaG1lbnQpXG4gICAgICByZWdsRnJhbWVidWZmZXIuZGVwdGggPSB1bndyYXBBdHRhY2htZW50KGRlcHRoQXR0YWNobWVudClcbiAgICAgIHJlZ2xGcmFtZWJ1ZmZlci5zdGVuY2lsID0gdW53cmFwQXR0YWNobWVudChzdGVuY2lsQXR0YWNobWVudClcbiAgICAgIHJlZ2xGcmFtZWJ1ZmZlci5kZXB0aFN0ZW5jaWwgPSB1bndyYXBBdHRhY2htZW50KGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQpXG5cbiAgICAgIHJlZ2xGcmFtZWJ1ZmZlci53aWR0aCA9IGZyYW1lYnVmZmVyLndpZHRoXG4gICAgICByZWdsRnJhbWVidWZmZXIuaGVpZ2h0ID0gZnJhbWVidWZmZXIuaGVpZ2h0XG5cbiAgICAgIHVwZGF0ZUZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKVxuXG4gICAgICByZXR1cm4gcmVnbEZyYW1lYnVmZmVyXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzaXplICh3XywgaF8pIHtcbiAgICAgIGNoZWNrJDEoZnJhbWVidWZmZXJTdGF0ZS5uZXh0ICE9PSBmcmFtZWJ1ZmZlcixcbiAgICAgICAgJ2NhbiBub3QgcmVzaXplIGEgZnJhbWVidWZmZXIgd2hpY2ggaXMgY3VycmVudGx5IGluIHVzZScpXG5cbiAgICAgIHZhciB3ID0gTWF0aC5tYXgod18gfCAwLCAxKVxuICAgICAgdmFyIGggPSBNYXRoLm1heCgoaF8gfCAwKSB8fCB3LCAxKVxuICAgICAgaWYgKHcgPT09IGZyYW1lYnVmZmVyLndpZHRoICYmIGggPT09IGZyYW1lYnVmZmVyLmhlaWdodCkge1xuICAgICAgICByZXR1cm4gcmVnbEZyYW1lYnVmZmVyXG4gICAgICB9XG5cbiAgICAgIC8vIHJlc2l6ZSBhbGwgYnVmZmVyc1xuICAgICAgdmFyIGNvbG9yQXR0YWNobWVudHMgPSBmcmFtZWJ1ZmZlci5jb2xvckF0dGFjaG1lbnRzXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbG9yQXR0YWNobWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgcmVzaXplQXR0YWNobWVudChjb2xvckF0dGFjaG1lbnRzW2ldLCB3LCBoKVxuICAgICAgfVxuICAgICAgcmVzaXplQXR0YWNobWVudChmcmFtZWJ1ZmZlci5kZXB0aEF0dGFjaG1lbnQsIHcsIGgpXG4gICAgICByZXNpemVBdHRhY2htZW50KGZyYW1lYnVmZmVyLnN0ZW5jaWxBdHRhY2htZW50LCB3LCBoKVxuICAgICAgcmVzaXplQXR0YWNobWVudChmcmFtZWJ1ZmZlci5kZXB0aFN0ZW5jaWxBdHRhY2htZW50LCB3LCBoKVxuXG4gICAgICBmcmFtZWJ1ZmZlci53aWR0aCA9IHJlZ2xGcmFtZWJ1ZmZlci53aWR0aCA9IHdcbiAgICAgIGZyYW1lYnVmZmVyLmhlaWdodCA9IHJlZ2xGcmFtZWJ1ZmZlci5oZWlnaHQgPSBoXG5cbiAgICAgIHVwZGF0ZUZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKVxuXG4gICAgICByZXR1cm4gcmVnbEZyYW1lYnVmZmVyXG4gICAgfVxuXG4gICAgcmVnbEZyYW1lYnVmZmVyKGEwLCBhMSlcblxuICAgIHJldHVybiBleHRlbmQocmVnbEZyYW1lYnVmZmVyLCB7XG4gICAgICByZXNpemU6IHJlc2l6ZSxcbiAgICAgIF9yZWdsVHlwZTogJ2ZyYW1lYnVmZmVyJyxcbiAgICAgIF9mcmFtZWJ1ZmZlcjogZnJhbWVidWZmZXIsXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlc3Ryb3koZnJhbWVidWZmZXIpXG4gICAgICAgIGRlY0ZCT1JlZnMoZnJhbWVidWZmZXIpXG4gICAgICB9LFxuICAgICAgdXNlOiBmdW5jdGlvbiAoYmxvY2spIHtcbiAgICAgICAgZnJhbWVidWZmZXJTdGF0ZS5zZXRGQk8oe1xuICAgICAgICAgIGZyYW1lYnVmZmVyOiByZWdsRnJhbWVidWZmZXJcbiAgICAgICAgfSwgYmxvY2spXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUN1YmVGQk8gKG9wdGlvbnMpIHtcbiAgICB2YXIgZmFjZXMgPSBBcnJheSg2KVxuXG4gICAgZnVuY3Rpb24gcmVnbEZyYW1lYnVmZmVyQ3ViZSAoYSkge1xuICAgICAgdmFyIGlcblxuICAgICAgY2hlY2skMShmYWNlcy5pbmRleE9mKGZyYW1lYnVmZmVyU3RhdGUubmV4dCkgPCAwLFxuICAgICAgICAnY2FuIG5vdCB1cGRhdGUgZnJhbWVidWZmZXIgd2hpY2ggaXMgY3VycmVudGx5IGluIHVzZScpXG5cbiAgICAgIHZhciBwYXJhbXMgPSB7XG4gICAgICAgIGNvbG9yOiBudWxsXG4gICAgICB9XG5cbiAgICAgIHZhciByYWRpdXMgPSAwXG5cbiAgICAgIHZhciBjb2xvckJ1ZmZlciA9IG51bGxcbiAgICAgIHZhciBjb2xvckZvcm1hdCA9ICdyZ2JhJ1xuICAgICAgdmFyIGNvbG9yVHlwZSA9ICd1aW50OCdcbiAgICAgIHZhciBjb2xvckNvdW50ID0gMVxuXG4gICAgICBpZiAodHlwZW9mIGEgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJhZGl1cyA9IGEgfCAwXG4gICAgICB9IGVsc2UgaWYgKCFhKSB7XG4gICAgICAgIHJhZGl1cyA9IDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoZWNrJDEudHlwZShhLCAnb2JqZWN0JywgJ2ludmFsaWQgYXJndW1lbnRzIGZvciBmcmFtZWJ1ZmZlcicpXG4gICAgICAgIHZhciBvcHRpb25zID0gYVxuXG4gICAgICAgIGlmICgnc2hhcGUnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICB2YXIgc2hhcGUgPSBvcHRpb25zLnNoYXBlXG4gICAgICAgICAgY2hlY2skMShcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoc2hhcGUpICYmIHNoYXBlLmxlbmd0aCA+PSAyLFxuICAgICAgICAgICAgJ2ludmFsaWQgc2hhcGUgZm9yIGZyYW1lYnVmZmVyJylcbiAgICAgICAgICBjaGVjayQxKFxuICAgICAgICAgICAgc2hhcGVbMF0gPT09IHNoYXBlWzFdLFxuICAgICAgICAgICAgJ2N1YmUgZnJhbWVidWZmZXIgbXVzdCBiZSBzcXVhcmUnKVxuICAgICAgICAgIHJhZGl1cyA9IHNoYXBlWzBdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCdyYWRpdXMnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJhZGl1cyA9IG9wdGlvbnMucmFkaXVzIHwgMFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJ3dpZHRoJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICByYWRpdXMgPSBvcHRpb25zLndpZHRoIHwgMFxuICAgICAgICAgICAgaWYgKCdoZWlnaHQnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgY2hlY2skMShvcHRpb25zLmhlaWdodCA9PT0gcmFkaXVzLCAnbXVzdCBiZSBzcXVhcmUnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoJ2hlaWdodCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgcmFkaXVzID0gb3B0aW9ucy5oZWlnaHQgfCAwXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdjb2xvcicgaW4gb3B0aW9ucyB8fFxuICAgICAgICAgICAgJ2NvbG9ycycgaW4gb3B0aW9ucykge1xuICAgICAgICAgIGNvbG9yQnVmZmVyID1cbiAgICAgICAgICAgIG9wdGlvbnMuY29sb3IgfHxcbiAgICAgICAgICAgIG9wdGlvbnMuY29sb3JzXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sb3JCdWZmZXIpKSB7XG4gICAgICAgICAgICBjaGVjayQxKFxuICAgICAgICAgICAgICBjb2xvckJ1ZmZlci5sZW5ndGggPT09IDEgfHwgZXh0ZW5zaW9ucy53ZWJnbF9kcmF3X2J1ZmZlcnMsXG4gICAgICAgICAgICAgICdtdWx0aXBsZSByZW5kZXIgdGFyZ2V0cyBub3Qgc3VwcG9ydGVkJylcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbG9yQnVmZmVyKSB7XG4gICAgICAgICAgaWYgKCdjb2xvckNvdW50JyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjb2xvckNvdW50ID0gb3B0aW9ucy5jb2xvckNvdW50IHwgMFxuICAgICAgICAgICAgY2hlY2skMShjb2xvckNvdW50ID4gMCwgJ2ludmFsaWQgY29sb3IgYnVmZmVyIGNvdW50JylcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoJ2NvbG9yVHlwZScgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgY2hlY2skMS5vbmVPZihcbiAgICAgICAgICAgICAgb3B0aW9ucy5jb2xvclR5cGUsIGNvbG9yVHlwZXMsXG4gICAgICAgICAgICAgICdpbnZhbGlkIGNvbG9yIHR5cGUnKVxuICAgICAgICAgICAgY29sb3JUeXBlID0gb3B0aW9ucy5jb2xvclR5cGVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoJ2NvbG9yRm9ybWF0JyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjb2xvckZvcm1hdCA9IG9wdGlvbnMuY29sb3JGb3JtYXRcbiAgICAgICAgICAgIGNoZWNrJDEub25lT2YoXG4gICAgICAgICAgICAgIG9wdGlvbnMuY29sb3JGb3JtYXQsIGNvbG9yVGV4dHVyZUZvcm1hdHMsXG4gICAgICAgICAgICAgICdpbnZhbGlkIGNvbG9yIGZvcm1hdCBmb3IgdGV4dHVyZScpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdkZXB0aCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgIHBhcmFtcy5kZXB0aCA9IG9wdGlvbnMuZGVwdGhcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgnc3RlbmNpbCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgIHBhcmFtcy5zdGVuY2lsID0gb3B0aW9ucy5zdGVuY2lsXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ2RlcHRoU3RlbmNpbCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgIHBhcmFtcy5kZXB0aFN0ZW5jaWwgPSBvcHRpb25zLmRlcHRoU3RlbmNpbFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBjb2xvckN1YmVzXG4gICAgICBpZiAoY29sb3JCdWZmZXIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sb3JCdWZmZXIpKSB7XG4gICAgICAgICAgY29sb3JDdWJlcyA9IFtdXG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbG9yQnVmZmVyLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBjb2xvckN1YmVzW2ldID0gY29sb3JCdWZmZXJbaV1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sb3JDdWJlcyA9IFsgY29sb3JCdWZmZXIgXVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2xvckN1YmVzID0gQXJyYXkoY29sb3JDb3VudClcbiAgICAgICAgdmFyIGN1YmVNYXBQYXJhbXMgPSB7XG4gICAgICAgICAgcmFkaXVzOiByYWRpdXMsXG4gICAgICAgICAgZm9ybWF0OiBjb2xvckZvcm1hdCxcbiAgICAgICAgICB0eXBlOiBjb2xvclR5cGVcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29sb3JDb3VudDsgKytpKSB7XG4gICAgICAgICAgY29sb3JDdWJlc1tpXSA9IHRleHR1cmVTdGF0ZS5jcmVhdGVDdWJlKGN1YmVNYXBQYXJhbXMpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgY29sb3IgY3ViZXNcbiAgICAgIHBhcmFtcy5jb2xvciA9IEFycmF5KGNvbG9yQ3ViZXMubGVuZ3RoKVxuICAgICAgZm9yIChpID0gMDsgaSA8IGNvbG9yQ3ViZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGN1YmUgPSBjb2xvckN1YmVzW2ldXG4gICAgICAgIGNoZWNrJDEoXG4gICAgICAgICAgdHlwZW9mIGN1YmUgPT09ICdmdW5jdGlvbicgJiYgY3ViZS5fcmVnbFR5cGUgPT09ICd0ZXh0dXJlQ3ViZScsXG4gICAgICAgICAgJ2ludmFsaWQgY3ViZSBtYXAnKVxuICAgICAgICByYWRpdXMgPSByYWRpdXMgfHwgY3ViZS53aWR0aFxuICAgICAgICBjaGVjayQxKFxuICAgICAgICAgIGN1YmUud2lkdGggPT09IHJhZGl1cyAmJiBjdWJlLmhlaWdodCA9PT0gcmFkaXVzLFxuICAgICAgICAgICdpbnZhbGlkIGN1YmUgbWFwIHNoYXBlJylcbiAgICAgICAgcGFyYW1zLmNvbG9yW2ldID0ge1xuICAgICAgICAgIHRhcmdldDogR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YJDIsXG4gICAgICAgICAgZGF0YTogY29sb3JDdWJlc1tpXVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2xvckN1YmVzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgcGFyYW1zLmNvbG9yW2pdLnRhcmdldCA9IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCQyICsgaVxuICAgICAgICB9XG4gICAgICAgIC8vIHJldXNlIGRlcHRoLXN0ZW5jaWwgYXR0YWNobWVudHMgYWNyb3NzIGFsbCBjdWJlIG1hcHNcbiAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgcGFyYW1zLmRlcHRoID0gZmFjZXNbMF0uZGVwdGhcbiAgICAgICAgICBwYXJhbXMuc3RlbmNpbCA9IGZhY2VzWzBdLnN0ZW5jaWxcbiAgICAgICAgICBwYXJhbXMuZGVwdGhTdGVuY2lsID0gZmFjZXNbMF0uZGVwdGhTdGVuY2lsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZhY2VzW2ldKSB7XG4gICAgICAgICAgKGZhY2VzW2ldKShwYXJhbXMpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmFjZXNbaV0gPSBjcmVhdGVGQk8ocGFyYW1zKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBleHRlbmQocmVnbEZyYW1lYnVmZmVyQ3ViZSwge1xuICAgICAgICB3aWR0aDogcmFkaXVzLFxuICAgICAgICBoZWlnaHQ6IHJhZGl1cyxcbiAgICAgICAgY29sb3I6IGNvbG9yQ3ViZXNcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzaXplIChyYWRpdXNfKSB7XG4gICAgICB2YXIgaVxuICAgICAgdmFyIHJhZGl1cyA9IHJhZGl1c18gfCAwXG4gICAgICBjaGVjayQxKHJhZGl1cyA+IDAgJiYgcmFkaXVzIDw9IGxpbWl0cy5tYXhDdWJlTWFwU2l6ZSxcbiAgICAgICAgJ2ludmFsaWQgcmFkaXVzIGZvciBjdWJlIGZibycpXG5cbiAgICAgIGlmIChyYWRpdXMgPT09IHJlZ2xGcmFtZWJ1ZmZlckN1YmUud2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2xGcmFtZWJ1ZmZlckN1YmVcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbG9ycyA9IHJlZ2xGcmFtZWJ1ZmZlckN1YmUuY29sb3JcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2xvcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY29sb3JzW2ldLnJlc2l6ZShyYWRpdXMpXG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHtcbiAgICAgICAgZmFjZXNbaV0ucmVzaXplKHJhZGl1cylcbiAgICAgIH1cblxuICAgICAgcmVnbEZyYW1lYnVmZmVyQ3ViZS53aWR0aCA9IHJlZ2xGcmFtZWJ1ZmZlckN1YmUuaGVpZ2h0ID0gcmFkaXVzXG5cbiAgICAgIHJldHVybiByZWdsRnJhbWVidWZmZXJDdWJlXG4gICAgfVxuXG4gICAgcmVnbEZyYW1lYnVmZmVyQ3ViZShvcHRpb25zKVxuXG4gICAgcmV0dXJuIGV4dGVuZChyZWdsRnJhbWVidWZmZXJDdWJlLCB7XG4gICAgICBmYWNlczogZmFjZXMsXG4gICAgICByZXNpemU6IHJlc2l6ZSxcbiAgICAgIF9yZWdsVHlwZTogJ2ZyYW1lYnVmZmVyQ3ViZScsXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZhY2VzLmZvckVhY2goZnVuY3Rpb24gKGYpIHtcbiAgICAgICAgICBmLmRlc3Ryb3koKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiByZXN0b3JlRnJhbWVidWZmZXJzICgpIHtcbiAgICBmcmFtZWJ1ZmZlclN0YXRlLmN1ciA9IG51bGxcbiAgICBmcmFtZWJ1ZmZlclN0YXRlLm5leHQgPSBudWxsXG4gICAgZnJhbWVidWZmZXJTdGF0ZS5kaXJ0eSA9IHRydWVcbiAgICB2YWx1ZXMoZnJhbWVidWZmZXJTZXQpLmZvckVhY2goZnVuY3Rpb24gKGZiKSB7XG4gICAgICBmYi5mcmFtZWJ1ZmZlciA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKClcbiAgICAgIHVwZGF0ZUZyYW1lYnVmZmVyKGZiKVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gZXh0ZW5kKGZyYW1lYnVmZmVyU3RhdGUsIHtcbiAgICBnZXRGcmFtZWJ1ZmZlcjogZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdmdW5jdGlvbicgJiYgb2JqZWN0Ll9yZWdsVHlwZSA9PT0gJ2ZyYW1lYnVmZmVyJykge1xuICAgICAgICB2YXIgZmJvID0gb2JqZWN0Ll9mcmFtZWJ1ZmZlclxuICAgICAgICBpZiAoZmJvIGluc3RhbmNlb2YgUkVHTEZyYW1lYnVmZmVyKSB7XG4gICAgICAgICAgcmV0dXJuIGZib1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG4gICAgY3JlYXRlOiBjcmVhdGVGQk8sXG4gICAgY3JlYXRlQ3ViZTogY3JlYXRlQ3ViZUZCTyxcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xuICAgICAgdmFsdWVzKGZyYW1lYnVmZmVyU2V0KS5mb3JFYWNoKGRlc3Ryb3kpXG4gICAgfSxcbiAgICByZXN0b3JlOiByZXN0b3JlRnJhbWVidWZmZXJzXG4gIH0pXG59XG5cbnZhciBHTF9GTE9BVCQ2ID0gNTEyNlxudmFyIEdMX0FSUkFZX0JVRkZFUiQxID0gMzQ5NjJcblxuZnVuY3Rpb24gQXR0cmlidXRlUmVjb3JkICgpIHtcbiAgdGhpcy5zdGF0ZSA9IDBcblxuICB0aGlzLnggPSAwLjBcbiAgdGhpcy55ID0gMC4wXG4gIHRoaXMueiA9IDAuMFxuICB0aGlzLncgPSAwLjBcblxuICB0aGlzLmJ1ZmZlciA9IG51bGxcbiAgdGhpcy5zaXplID0gMFxuICB0aGlzLm5vcm1hbGl6ZWQgPSBmYWxzZVxuICB0aGlzLnR5cGUgPSBHTF9GTE9BVCQ2XG4gIHRoaXMub2Zmc2V0ID0gMFxuICB0aGlzLnN0cmlkZSA9IDBcbiAgdGhpcy5kaXZpc29yID0gMFxufVxuXG5mdW5jdGlvbiB3cmFwQXR0cmlidXRlU3RhdGUgKFxuICBnbCxcbiAgZXh0ZW5zaW9ucyxcbiAgbGltaXRzLFxuICBzdGF0cyxcbiAgYnVmZmVyU3RhdGUpIHtcbiAgdmFyIE5VTV9BVFRSSUJVVEVTID0gbGltaXRzLm1heEF0dHJpYnV0ZXNcbiAgdmFyIGF0dHJpYnV0ZUJpbmRpbmdzID0gbmV3IEFycmF5KE5VTV9BVFRSSUJVVEVTKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IE5VTV9BVFRSSUJVVEVTOyArK2kpIHtcbiAgICBhdHRyaWJ1dGVCaW5kaW5nc1tpXSA9IG5ldyBBdHRyaWJ1dGVSZWNvcmQoKVxuICB9XG4gIHZhciB2YW9Db3VudCA9IDBcbiAgdmFyIHZhb1NldCA9IHt9XG5cbiAgdmFyIHN0YXRlID0ge1xuICAgIFJlY29yZDogQXR0cmlidXRlUmVjb3JkLFxuICAgIHNjb3BlOiB7fSxcbiAgICBzdGF0ZTogYXR0cmlidXRlQmluZGluZ3MsXG4gICAgY3VycmVudFZBTzogbnVsbCxcbiAgICB0YXJnZXRWQU86IG51bGwsXG4gICAgcmVzdG9yZTogZXh0VkFPKCkgPyByZXN0b3JlVkFPIDogZnVuY3Rpb24gKCkge30sXG4gICAgY3JlYXRlVkFPOiBjcmVhdGVWQU8sXG4gICAgZ2V0VkFPOiBnZXRWQU8sXG4gICAgZGVzdHJveUJ1ZmZlcjogZGVzdHJveUJ1ZmZlcixcbiAgICBzZXRWQU86IGV4dFZBTygpID8gc2V0VkFPRVhUIDogc2V0VkFPRW11bGF0ZWQsXG4gICAgY2xlYXI6IGV4dFZBTygpID8gZGVzdHJveVZBT0VYVCA6IGZ1bmN0aW9uICgpIHt9XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95QnVmZmVyIChidWZmZXIpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZUJpbmRpbmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgcmVjb3JkID0gYXR0cmlidXRlQmluZGluZ3NbaV1cbiAgICAgIGlmIChyZWNvcmQuYnVmZmVyID09PSBidWZmZXIpIHtcbiAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpXG4gICAgICAgIHJlY29yZC5idWZmZXIgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZXh0VkFPICgpIHtcbiAgICByZXR1cm4gZXh0ZW5zaW9ucy5vZXNfdmVydGV4X2FycmF5X29iamVjdFxuICB9XG5cbiAgZnVuY3Rpb24gZXh0SW5zdGFuY2VkICgpIHtcbiAgICByZXR1cm4gZXh0ZW5zaW9ucy5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzXG4gIH1cblxuICBmdW5jdGlvbiBnZXRWQU8gKHZhbykge1xuICAgIGlmICh0eXBlb2YgdmFvID09PSAnZnVuY3Rpb24nICYmIHZhby5fdmFvKSB7XG4gICAgICByZXR1cm4gdmFvLl92YW9cbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFZBT0VYVCAodmFvKSB7XG4gICAgaWYgKHZhbyA9PT0gc3RhdGUuY3VycmVudFZBTykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHZhciBleHQgPSBleHRWQU8oKVxuICAgIGlmICh2YW8pIHtcbiAgICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvLnZhbylcbiAgICB9IGVsc2Uge1xuICAgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKVxuICAgIH1cbiAgICBzdGF0ZS5jdXJyZW50VkFPID0gdmFvXG4gIH1cblxuICBmdW5jdGlvbiBzZXRWQU9FbXVsYXRlZCAodmFvKSB7XG4gICAgaWYgKHZhbyA9PT0gc3RhdGUuY3VycmVudFZBTykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICh2YW8pIHtcbiAgICAgIHZhby5iaW5kQXR0cnMoKVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZXh0aSA9IGV4dEluc3RhbmNlZCgpXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZUJpbmRpbmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBiaW5kaW5nID0gYXR0cmlidXRlQmluZGluZ3NbaV1cbiAgICAgICAgaWYgKGJpbmRpbmcuYnVmZmVyKSB7XG4gICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSlcbiAgICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGksIGJpbmRpbmcuc2l6ZSwgYmluZGluZy50eXBlLCBiaW5kaW5nLm5vcm1hbGl6ZWQsIGJpbmRpbmcuc3RyaWRlLCBiaW5kaW5nLm9mZmZzZXQpXG4gICAgICAgICAgaWYgKGV4dGkgJiYgYmluZGluZy5kaXZpc29yKSB7XG4gICAgICAgICAgICBleHRpLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShpLCBiaW5kaW5nLmRpdmlzb3IpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKVxuICAgICAgICAgIGdsLnZlcnRleEF0dHJpYjRmKGksIGJpbmRpbmcueCwgYmluZGluZy55LCBiaW5kaW5nLnosIGJpbmRpbmcudylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBzdGF0ZS5jdXJyZW50VkFPID0gdmFvXG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95VkFPRVhUICgpIHtcbiAgICB2YWx1ZXModmFvU2V0KS5mb3JFYWNoKGZ1bmN0aW9uICh2YW8pIHtcbiAgICAgIHZhby5kZXN0cm95KClcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gUkVHTFZBTyAoKSB7XG4gICAgdGhpcy5pZCA9ICsrdmFvQ291bnRcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBbXVxuICAgIHZhciBleHRlbnNpb24gPSBleHRWQU8oKVxuICAgIGlmIChleHRlbnNpb24pIHtcbiAgICAgIHRoaXMudmFvID0gZXh0ZW5zaW9uLmNyZWF0ZVZlcnRleEFycmF5T0VTKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YW8gPSBudWxsXG4gICAgfVxuICAgIHZhb1NldFt0aGlzLmlkXSA9IHRoaXNcbiAgICB0aGlzLmJ1ZmZlcnMgPSBbXVxuICB9XG5cbiAgUkVHTFZBTy5wcm90b3R5cGUuYmluZEF0dHJzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRpID0gZXh0SW5zdGFuY2VkKClcbiAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlcy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGF0dHIgPSBhdHRyaWJ1dGVzW2ldXG4gICAgICBpZiAoYXR0ci5idWZmZXIpIHtcbiAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSlcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIkMSwgYXR0ci5idWZmZXIuYnVmZmVyKVxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGksIGF0dHIuc2l6ZSwgYXR0ci50eXBlLCBhdHRyLm5vcm1hbGl6ZWQsIGF0dHIuc3RyaWRlLCBhdHRyLm9mZnNldClcbiAgICAgICAgaWYgKGV4dGkgJiYgYXR0ci5kaXZpc29yKSB7XG4gICAgICAgICAgZXh0aS52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaSwgYXR0ci5kaXZpc29yKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSlcbiAgICAgICAgZ2wudmVydGV4QXR0cmliNGYoaSwgYXR0ci54LCBhdHRyLnksIGF0dHIueiwgYXR0ci53KVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBqID0gYXR0cmlidXRlcy5sZW5ndGg7IGogPCBOVU1fQVRUUklCVVRFUzsgKytqKSB7XG4gICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoailcbiAgICB9XG4gIH1cblxuICBSRUdMVkFPLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHQgPSBleHRWQU8oKVxuICAgIGlmIChleHQpIHtcbiAgICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModGhpcy52YW8pXG4gICAgICB0aGlzLmJpbmRBdHRycygpXG4gICAgICBzdGF0ZS5jdXJyZW50VkFPID0gdGhpc1xuICAgIH1cbiAgfVxuXG4gIFJFR0xWQU8ucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMudmFvKSB7XG4gICAgICB2YXIgZXh0ZW5zaW9uID0gZXh0VkFPKClcbiAgICAgIGlmICh0aGlzID09PSBzdGF0ZS5jdXJyZW50VkFPKSB7XG4gICAgICAgIHN0YXRlLmN1cnJlbnRWQU8gPSBudWxsXG4gICAgICAgIGV4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVMobnVsbClcbiAgICAgIH1cbiAgICAgIGV4dGVuc2lvbi5kZWxldGVWZXJ0ZXhBcnJheU9FUyh0aGlzLnZhbylcbiAgICAgIHRoaXMudmFvID0gbnVsbFxuICAgIH1cbiAgICBpZiAodmFvU2V0W3RoaXMuaWRdKSB7XG4gICAgICBkZWxldGUgdmFvU2V0W3RoaXMuaWRdXG4gICAgICBzdGF0cy52YW9Db3VudCAtPSAxXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzdG9yZVZBTyAoKSB7XG4gICAgdmFyIGV4dCA9IGV4dFZBTygpXG4gICAgaWYgKGV4dCkge1xuICAgICAgdmFsdWVzKHZhb1NldCkuZm9yRWFjaChmdW5jdGlvbiAodmFvKSB7XG4gICAgICAgIHZhby5yZWZyZXNoKClcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlVkFPIChfYXR0cikge1xuICAgIHZhciB2YW8gPSBuZXcgUkVHTFZBTygpXG4gICAgc3RhdHMudmFvQ291bnQgKz0gMVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlVkFPIChhdHRyaWJ1dGVzKSB7XG4gICAgICBjaGVjayQxKEFycmF5LmlzQXJyYXkoYXR0cmlidXRlcyksICdhcmd1bWVudHMgdG8gdmVydGV4IGFycmF5IGNvbnN0cnVjdG9yIG11c3QgYmUgYW4gYXJyYXknKVxuICAgICAgY2hlY2skMShhdHRyaWJ1dGVzLmxlbmd0aCA8IE5VTV9BVFRSSUJVVEVTLCAndG9vIG1hbnkgYXR0cmlidXRlcycpXG4gICAgICBjaGVjayQxKGF0dHJpYnV0ZXMubGVuZ3RoID4gMCwgJ211c3Qgc3BlY2lmeSBhdCBsZWFzdCBvbmUgYXR0cmlidXRlJylcblxuICAgICAgdmFyIGJ1ZlVwZGF0ZWQgPSB7fVxuICAgICAgdmFyIG5hdHRyaWJ1dGVzID0gdmFvLmF0dHJpYnV0ZXNcbiAgICAgIG5hdHRyaWJ1dGVzLmxlbmd0aCA9IGF0dHJpYnV0ZXMubGVuZ3RoXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIHNwZWMgPSBhdHRyaWJ1dGVzW2ldXG4gICAgICAgIHZhciByZWMgPSBuYXR0cmlidXRlc1tpXSA9IG5ldyBBdHRyaWJ1dGVSZWNvcmQoKVxuICAgICAgICB2YXIgZGF0YSA9IHNwZWMuZGF0YSB8fCBzcGVjXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpIHx8IGlzVHlwZWRBcnJheShkYXRhKSB8fCBpc05EQXJyYXlMaWtlKGRhdGEpKSB7XG4gICAgICAgICAgdmFyIGJ1ZlxuICAgICAgICAgIGlmICh2YW8uYnVmZmVyc1tpXSkge1xuICAgICAgICAgICAgYnVmID0gdmFvLmJ1ZmZlcnNbaV1cbiAgICAgICAgICAgIGlmIChpc1R5cGVkQXJyYXkoZGF0YSkgJiYgYnVmLl9idWZmZXIuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgICAgYnVmLnN1YmRhdGEoZGF0YSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJ1Zi5kZXN0cm95KClcbiAgICAgICAgICAgICAgdmFvLmJ1ZmZlcnNbaV0gPSBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdmFvLmJ1ZmZlcnNbaV0pIHtcbiAgICAgICAgICAgIGJ1ZiA9IHZhby5idWZmZXJzW2ldID0gYnVmZmVyU3RhdGUuY3JlYXRlKHNwZWMsIEdMX0FSUkFZX0JVRkZFUiQxLCBmYWxzZSwgdHJ1ZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVjLmJ1ZmZlciA9IGJ1ZmZlclN0YXRlLmdldEJ1ZmZlcihidWYpXG4gICAgICAgICAgcmVjLnNpemUgPSByZWMuYnVmZmVyLmRpbWVuc2lvbiB8IDBcbiAgICAgICAgICByZWMubm9ybWFsaXplZCA9IGZhbHNlXG4gICAgICAgICAgcmVjLnR5cGUgPSByZWMuYnVmZmVyLmR0eXBlXG4gICAgICAgICAgcmVjLm9mZnNldCA9IDBcbiAgICAgICAgICByZWMuc3RyaWRlID0gMFxuICAgICAgICAgIHJlYy5kaXZpc29yID0gMFxuICAgICAgICAgIHJlYy5zdGF0ZSA9IDFcbiAgICAgICAgICBidWZVcGRhdGVkW2ldID0gMVxuICAgICAgICB9IGVsc2UgaWYgKGJ1ZmZlclN0YXRlLmdldEJ1ZmZlcihzcGVjKSkge1xuICAgICAgICAgIHJlYy5idWZmZXIgPSBidWZmZXJTdGF0ZS5nZXRCdWZmZXIoc3BlYylcbiAgICAgICAgICByZWMuc2l6ZSA9IHJlYy5idWZmZXIuZGltZW5zaW9uIHwgMFxuICAgICAgICAgIHJlYy5ub3JtYWxpemVkID0gZmFsc2VcbiAgICAgICAgICByZWMudHlwZSA9IHJlYy5idWZmZXIuZHR5cGVcbiAgICAgICAgICByZWMub2Zmc2V0ID0gMFxuICAgICAgICAgIHJlYy5zdHJpZGUgPSAwXG4gICAgICAgICAgcmVjLmRpdmlzb3IgPSAwXG4gICAgICAgICAgcmVjLnN0YXRlID0gMVxuICAgICAgICB9IGVsc2UgaWYgKGJ1ZmZlclN0YXRlLmdldEJ1ZmZlcihzcGVjLmJ1ZmZlcikpIHtcbiAgICAgICAgICByZWMuYnVmZmVyID0gYnVmZmVyU3RhdGUuZ2V0QnVmZmVyKHNwZWMuYnVmZmVyKVxuICAgICAgICAgIHJlYy5zaXplID0gKCgrc3BlYy5zaXplKSB8fCByZWMuYnVmZmVyLmRpbWVuc2lvbikgfCAwXG4gICAgICAgICAgcmVjLm5vcm1hbGl6ZWQgPSAhIXNwZWMubm9ybWFsaXplZCB8fCBmYWxzZVxuICAgICAgICAgIGlmICgndHlwZScgaW4gc3BlYykge1xuICAgICAgICAgICAgY2hlY2skMS5wYXJhbWV0ZXIoc3BlYy50eXBlLCBnbFR5cGVzLCAnaW52YWxpZCBidWZmZXIgdHlwZScpXG4gICAgICAgICAgICByZWMudHlwZSA9IGdsVHlwZXNbc3BlYy50eXBlXVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWMudHlwZSA9IHJlYy5idWZmZXIuZHR5cGVcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVjLm9mZnNldCA9IChzcGVjLm9mZnNldCB8fCAwKSB8IDBcbiAgICAgICAgICByZWMuc3RyaWRlID0gKHNwZWMuc3RyaWRlIHx8IDApIHwgMFxuICAgICAgICAgIHJlYy5kaXZpc29yID0gKHNwZWMuZGl2aXNvciB8fCAwKSB8IDBcbiAgICAgICAgICByZWMuc3RhdGUgPSAxXG5cbiAgICAgICAgICBjaGVjayQxKHJlYy5zaXplID49IDEgJiYgcmVjLnNpemUgPD0gNCwgJ3NpemUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQnKVxuICAgICAgICAgIGNoZWNrJDEocmVjLm9mZnNldCA+PSAwLCAnaW52YWxpZCBvZmZzZXQnKVxuICAgICAgICAgIGNoZWNrJDEocmVjLnN0cmlkZSA+PSAwICYmIHJlYy5zdHJpZGUgPD0gMjU1LCAnc3RyaWRlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNTUnKVxuICAgICAgICAgIGNoZWNrJDEocmVjLmRpdmlzb3IgPj0gMCwgJ2Rpdmlzb3IgbXVzdCBiZSBwb3NpdGl2ZScpXG4gICAgICAgICAgY2hlY2skMSghcmVjLmRpdmlzb3IgfHwgISFleHRlbnNpb25zLmFuZ2xlX2luc3RhbmNlZF9hcnJheXMsICdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIG11c3QgYmUgZW5hYmxlZCB0byB1c2UgZGl2aXNvcicpXG4gICAgICAgIH0gZWxzZSBpZiAoJ3gnIGluIHNwZWMpIHtcbiAgICAgICAgICBjaGVjayQxKGkgPiAwLCAnZmlyc3QgYXR0cmlidXRlIG11c3Qgbm90IGJlIGEgY29uc3RhbnQnKVxuICAgICAgICAgIHJlYy54ID0gK3NwZWMueCB8fCAwXG4gICAgICAgICAgcmVjLnkgPSArc3BlYy55IHx8IDBcbiAgICAgICAgICByZWMueiA9ICtzcGVjLnogfHwgMFxuICAgICAgICAgIHJlYy53ID0gK3NwZWMudyB8fCAwXG4gICAgICAgICAgcmVjLnN0YXRlID0gMlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoZWNrJDEoZmFsc2UsICdpbnZhbGlkIGF0dHJpYnV0ZSBzcGVjIGZvciBsb2NhdGlvbiAnICsgaSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyByZXRpcmUgdW51c2VkIGJ1ZmZlcnNcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFvLmJ1ZmZlcnMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgaWYgKCFidWZVcGRhdGVkW2pdICYmIHZhby5idWZmZXJzW2pdKSB7XG4gICAgICAgICAgdmFvLmJ1ZmZlcnNbal0uZGVzdHJveSgpXG4gICAgICAgICAgdmFvLmJ1ZmZlcnNbal0gPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFvLnJlZnJlc2goKVxuICAgICAgcmV0dXJuIHVwZGF0ZVZBT1xuICAgIH1cblxuICAgIHVwZGF0ZVZBTy5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YW8uYnVmZmVycy5sZW5ndGg7ICsraikge1xuICAgICAgICBpZiAodmFvLmJ1ZmZlcnNbal0pIHtcbiAgICAgICAgICB2YW8uYnVmZmVyc1tqXS5kZXN0cm95KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFvLmJ1ZmZlcnMubGVuZ3RoID0gMFxuICAgICAgdmFvLmRlc3Ryb3koKVxuICAgIH1cblxuICAgIHVwZGF0ZVZBTy5fdmFvID0gdmFvXG4gICAgdXBkYXRlVkFPLl9yZWdsVHlwZSA9ICd2YW8nXG5cbiAgICByZXR1cm4gdXBkYXRlVkFPKF9hdHRyKVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlXG59XG5cbnZhciBHTF9GUkFHTUVOVF9TSEFERVIgPSAzNTYzMlxudmFyIEdMX1ZFUlRFWF9TSEFERVIgPSAzNTYzM1xuXG52YXIgR0xfQUNUSVZFX1VOSUZPUk1TID0gMHg4Qjg2XG52YXIgR0xfQUNUSVZFX0FUVFJJQlVURVMgPSAweDhCODlcblxuZnVuY3Rpb24gd3JhcFNoYWRlclN0YXRlIChnbCwgc3RyaW5nU3RvcmUsIHN0YXRzLCBjb25maWcpIHtcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIGdsc2wgY29tcGlsYXRpb24gYW5kIGxpbmtpbmdcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBmcmFnU2hhZGVycyA9IHt9XG4gIHZhciB2ZXJ0U2hhZGVycyA9IHt9XG5cbiAgZnVuY3Rpb24gQWN0aXZlSW5mbyAobmFtZSwgaWQsIGxvY2F0aW9uLCBpbmZvKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHRoaXMuaWQgPSBpZFxuICAgIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvblxuICAgIHRoaXMuaW5mbyA9IGluZm9cbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2VydEFjdGl2ZUluZm8gKGxpc3QsIGluZm8pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChsaXN0W2ldLmlkID09PSBpbmZvLmlkKSB7XG4gICAgICAgIGxpc3RbaV0ubG9jYXRpb24gPSBpbmZvLmxvY2F0aW9uXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICBsaXN0LnB1c2goaW5mbylcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNoYWRlciAodHlwZSwgaWQsIGNvbW1hbmQpIHtcbiAgICB2YXIgY2FjaGUgPSB0eXBlID09PSBHTF9GUkFHTUVOVF9TSEFERVIgPyBmcmFnU2hhZGVycyA6IHZlcnRTaGFkZXJzXG4gICAgdmFyIHNoYWRlciA9IGNhY2hlW2lkXVxuXG4gICAgaWYgKCFzaGFkZXIpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBzdHJpbmdTdG9yZS5zdHIoaWQpXG4gICAgICBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSlcbiAgICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNvdXJjZSlcbiAgICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKVxuICAgICAgY2hlY2skMS5zaGFkZXJFcnJvcihnbCwgc2hhZGVyLCBzb3VyY2UsIHR5cGUsIGNvbW1hbmQpXG4gICAgICBjYWNoZVtpZF0gPSBzaGFkZXJcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyXG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gcHJvZ3JhbSBsaW5raW5nXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgcHJvZ3JhbUNhY2hlID0ge31cbiAgdmFyIHByb2dyYW1MaXN0ID0gW11cblxuICB2YXIgUFJPR1JBTV9DT1VOVEVSID0gMFxuXG4gIGZ1bmN0aW9uIFJFR0xQcm9ncmFtIChmcmFnSWQsIHZlcnRJZCkge1xuICAgIHRoaXMuaWQgPSBQUk9HUkFNX0NPVU5URVIrK1xuICAgIHRoaXMuZnJhZ0lkID0gZnJhZ0lkXG4gICAgdGhpcy52ZXJ0SWQgPSB2ZXJ0SWRcbiAgICB0aGlzLnByb2dyYW0gPSBudWxsXG4gICAgdGhpcy51bmlmb3JtcyA9IFtdXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gW11cbiAgICB0aGlzLnJlZkNvdW50ID0gMVxuXG4gICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICB0aGlzLnN0YXRzID0ge1xuICAgICAgICB1bmlmb3Jtc0NvdW50OiAwLFxuICAgICAgICBhdHRyaWJ1dGVzQ291bnQ6IDBcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBsaW5rUHJvZ3JhbSAoZGVzYywgY29tbWFuZCwgYXR0cmlidXRlTG9jYXRpb25zKSB7XG4gICAgdmFyIGksIGluZm9cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBjb21waWxlICYgbGlua1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICB2YXIgZnJhZ1NoYWRlciA9IGdldFNoYWRlcihHTF9GUkFHTUVOVF9TSEFERVIsIGRlc2MuZnJhZ0lkKVxuICAgIHZhciB2ZXJ0U2hhZGVyID0gZ2V0U2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIsIGRlc2MudmVydElkKVxuXG4gICAgdmFyIHByb2dyYW0gPSBkZXNjLnByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKClcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZnJhZ1NoYWRlcilcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgdmVydFNoYWRlcilcbiAgICBpZiAoYXR0cmlidXRlTG9jYXRpb25zKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgYXR0cmlidXRlTG9jYXRpb25zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBiaW5kaW5nID0gYXR0cmlidXRlTG9jYXRpb25zW2ldXG4gICAgICAgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBiaW5kaW5nWzBdLCBiaW5kaW5nWzFdKVxuICAgICAgfVxuICAgIH1cblxuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pXG4gICAgY2hlY2skMS5saW5rRXJyb3IoXG4gICAgICBnbCxcbiAgICAgIHByb2dyYW0sXG4gICAgICBzdHJpbmdTdG9yZS5zdHIoZGVzYy5mcmFnSWQpLFxuICAgICAgc3RyaW5nU3RvcmUuc3RyKGRlc2MudmVydElkKSxcbiAgICAgIGNvbW1hbmQpXG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gZ3JhYiB1bmlmb3Jtc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICB2YXIgbnVtVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIEdMX0FDVElWRV9VTklGT1JNUylcbiAgICBpZiAoY29uZmlnLnByb2ZpbGUpIHtcbiAgICAgIGRlc2Muc3RhdHMudW5pZm9ybXNDb3VudCA9IG51bVVuaWZvcm1zXG4gICAgfVxuICAgIHZhciB1bmlmb3JtcyA9IGRlc2MudW5pZm9ybXNcbiAgICBmb3IgKGkgPSAwOyBpIDwgbnVtVW5pZm9ybXM7ICsraSkge1xuICAgICAgaW5mbyA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSlcbiAgICAgIGlmIChpbmZvKSB7XG4gICAgICAgIGlmIChpbmZvLnNpemUgPiAxKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpbmZvLnNpemU7ICsraikge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSBpbmZvLm5hbWUucmVwbGFjZSgnWzBdJywgJ1snICsgaiArICddJylcbiAgICAgICAgICAgIGluc2VydEFjdGl2ZUluZm8odW5pZm9ybXMsIG5ldyBBY3RpdmVJbmZvKFxuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICBzdHJpbmdTdG9yZS5pZChuYW1lKSxcbiAgICAgICAgICAgICAgZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUpLFxuICAgICAgICAgICAgICBpbmZvKSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5zZXJ0QWN0aXZlSW5mbyh1bmlmb3JtcywgbmV3IEFjdGl2ZUluZm8oXG4gICAgICAgICAgICBpbmZvLm5hbWUsXG4gICAgICAgICAgICBzdHJpbmdTdG9yZS5pZChpbmZvLm5hbWUpLFxuICAgICAgICAgICAgZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIGluZm8ubmFtZSksXG4gICAgICAgICAgICBpbmZvKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBncmFiIGF0dHJpYnV0ZXNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgdmFyIG51bUF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIEdMX0FDVElWRV9BVFRSSUJVVEVTKVxuICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgZGVzYy5zdGF0cy5hdHRyaWJ1dGVzQ291bnQgPSBudW1BdHRyaWJ1dGVzXG4gICAgfVxuXG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBkZXNjLmF0dHJpYnV0ZXNcbiAgICBmb3IgKGkgPSAwOyBpIDwgbnVtQXR0cmlidXRlczsgKytpKSB7XG4gICAgICBpbmZvID0gZ2wuZ2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGkpXG4gICAgICBpZiAoaW5mbykge1xuICAgICAgICBpbnNlcnRBY3RpdmVJbmZvKGF0dHJpYnV0ZXMsIG5ldyBBY3RpdmVJbmZvKFxuICAgICAgICAgIGluZm8ubmFtZSxcbiAgICAgICAgICBzdHJpbmdTdG9yZS5pZChpbmZvLm5hbWUpLFxuICAgICAgICAgIGdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZm8ubmFtZSksXG4gICAgICAgICAgaW5mbykpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgc3RhdHMuZ2V0TWF4VW5pZm9ybXNDb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBtID0gMFxuICAgICAgcHJvZ3JhbUxpc3QuZm9yRWFjaChmdW5jdGlvbiAoZGVzYykge1xuICAgICAgICBpZiAoZGVzYy5zdGF0cy51bmlmb3Jtc0NvdW50ID4gbSkge1xuICAgICAgICAgIG0gPSBkZXNjLnN0YXRzLnVuaWZvcm1zQ291bnRcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHJldHVybiBtXG4gICAgfVxuXG4gICAgc3RhdHMuZ2V0TWF4QXR0cmlidXRlc0NvdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG0gPSAwXG4gICAgICBwcm9ncmFtTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChkZXNjKSB7XG4gICAgICAgIGlmIChkZXNjLnN0YXRzLmF0dHJpYnV0ZXNDb3VudCA+IG0pIHtcbiAgICAgICAgICBtID0gZGVzYy5zdGF0cy5hdHRyaWJ1dGVzQ291bnRcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHJldHVybiBtXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzdG9yZVNoYWRlcnMgKCkge1xuICAgIGZyYWdTaGFkZXJzID0ge31cbiAgICB2ZXJ0U2hhZGVycyA9IHt9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9ncmFtTGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgbGlua1Byb2dyYW0ocHJvZ3JhbUxpc3RbaV0sIG51bGwsIHByb2dyYW1MaXN0W2ldLmF0dHJpYnV0ZXMubWFwKGZ1bmN0aW9uIChpbmZvKSB7XG4gICAgICAgIHJldHVybiBbaW5mby5sb2NhdGlvbiwgaW5mby5uYW1lXVxuICAgICAgfSkpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGRlbGV0ZVNoYWRlciA9IGdsLmRlbGV0ZVNoYWRlci5iaW5kKGdsKVxuICAgICAgdmFsdWVzKGZyYWdTaGFkZXJzKS5mb3JFYWNoKGRlbGV0ZVNoYWRlcilcbiAgICAgIGZyYWdTaGFkZXJzID0ge31cbiAgICAgIHZhbHVlcyh2ZXJ0U2hhZGVycykuZm9yRWFjaChkZWxldGVTaGFkZXIpXG4gICAgICB2ZXJ0U2hhZGVycyA9IHt9XG5cbiAgICAgIHByb2dyYW1MaXN0LmZvckVhY2goZnVuY3Rpb24gKGRlc2MpIHtcbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShkZXNjLnByb2dyYW0pXG4gICAgICB9KVxuICAgICAgcHJvZ3JhbUxpc3QubGVuZ3RoID0gMFxuICAgICAgcHJvZ3JhbUNhY2hlID0ge31cblxuICAgICAgc3RhdHMuc2hhZGVyQ291bnQgPSAwXG4gICAgfSxcblxuICAgIHByb2dyYW06IGZ1bmN0aW9uICh2ZXJ0SWQsIGZyYWdJZCwgY29tbWFuZCwgYXR0cmliTG9jYXRpb25zKSB7XG4gICAgICBjaGVjayQxLmNvbW1hbmQodmVydElkID49IDAsICdtaXNzaW5nIHZlcnRleCBzaGFkZXInLCBjb21tYW5kKVxuICAgICAgY2hlY2skMS5jb21tYW5kKGZyYWdJZCA+PSAwLCAnbWlzc2luZyBmcmFnbWVudCBzaGFkZXInLCBjb21tYW5kKVxuXG4gICAgICB2YXIgY2FjaGUgPSBwcm9ncmFtQ2FjaGVbZnJhZ0lkXVxuICAgICAgaWYgKCFjYWNoZSkge1xuICAgICAgICBjYWNoZSA9IHByb2dyYW1DYWNoZVtmcmFnSWRdID0ge31cbiAgICAgIH1cbiAgICAgIHZhciBwcmV2UHJvZ3JhbSA9IGNhY2hlW3ZlcnRJZF1cbiAgICAgIGlmIChwcmV2UHJvZ3JhbSkge1xuICAgICAgICBwcmV2UHJvZ3JhbS5yZWZDb3VudCsrXG4gICAgICAgIGlmICghYXR0cmliTG9jYXRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIHByZXZQcm9ncmFtXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBwcm9ncmFtID0gbmV3IFJFR0xQcm9ncmFtKGZyYWdJZCwgdmVydElkKVxuICAgICAgc3RhdHMuc2hhZGVyQ291bnQrK1xuICAgICAgbGlua1Byb2dyYW0ocHJvZ3JhbSwgY29tbWFuZCwgYXR0cmliTG9jYXRpb25zKVxuICAgICAgaWYgKCFwcmV2UHJvZ3JhbSkge1xuICAgICAgICBjYWNoZVt2ZXJ0SWRdID0gcHJvZ3JhbVxuICAgICAgfVxuICAgICAgcHJvZ3JhbUxpc3QucHVzaChwcm9ncmFtKVxuICAgICAgcmV0dXJuIGV4dGVuZChwcm9ncmFtLCB7XG4gICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBwcm9ncmFtLnJlZkNvdW50LS1cbiAgICAgICAgICBpZiAocHJvZ3JhbS5yZWZDb3VudCA8PSAwKSB7XG4gICAgICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0ucHJvZ3JhbSlcbiAgICAgICAgICAgIHZhciBpZHggPSBwcm9ncmFtTGlzdC5pbmRleE9mKHByb2dyYW0pXG4gICAgICAgICAgICBwcm9ncmFtTGlzdC5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgICAgc3RhdHMuc2hhZGVyQ291bnQtLVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBubyBwcm9ncmFtIGlzIGxpbmtlZCB0byB0aGlzIHZlcnQgYW55bW9yZVxuICAgICAgICAgIGlmIChjYWNoZVtwcm9ncmFtLnZlcnRJZF0ucmVmQ291bnQgPD0gMCkge1xuICAgICAgICAgICAgZ2wuZGVsZXRlU2hhZGVyKHZlcnRTaGFkZXJzW3Byb2dyYW0udmVydElkXSlcbiAgICAgICAgICAgIGRlbGV0ZSB2ZXJ0U2hhZGVyc1twcm9ncmFtLnZlcnRJZF1cbiAgICAgICAgICAgIGRlbGV0ZSBwcm9ncmFtQ2FjaGVbcHJvZ3JhbS5mcmFnSWRdW3Byb2dyYW0udmVydElkXVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBubyBwcm9ncmFtIGlzIGxpbmtlZCB0byB0aGlzIGZyYWcgYW55bW9yZVxuICAgICAgICAgIGlmICghT2JqZWN0LmtleXMocHJvZ3JhbUNhY2hlW3Byb2dyYW0uZnJhZ0lkXSkubGVuZ3RoKSB7XG4gICAgICAgICAgICBnbC5kZWxldGVTaGFkZXIoZnJhZ1NoYWRlcnNbcHJvZ3JhbS5mcmFnSWRdKVxuICAgICAgICAgICAgZGVsZXRlIGZyYWdTaGFkZXJzW3Byb2dyYW0uZnJhZ0lkXVxuICAgICAgICAgICAgZGVsZXRlIHByb2dyYW1DYWNoZVtwcm9ncmFtLmZyYWdJZF1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHJlc3RvcmU6IHJlc3RvcmVTaGFkZXJzLFxuXG4gICAgc2hhZGVyOiBnZXRTaGFkZXIsXG5cbiAgICBmcmFnOiAtMSxcbiAgICB2ZXJ0OiAtMVxuICB9XG59XG5cbnZhciBHTF9SR0JBJDMgPSA2NDA4XG52YXIgR0xfVU5TSUdORURfQllURSQ3ID0gNTEyMVxudmFyIEdMX1BBQ0tfQUxJR05NRU5UID0gMHgwRDA1XG52YXIgR0xfRkxPQVQkNyA9IDB4MTQwNiAvLyA1MTI2XG5cbmZ1bmN0aW9uIHdyYXBSZWFkUGl4ZWxzIChcbiAgZ2wsXG4gIGZyYW1lYnVmZmVyU3RhdGUsXG4gIHJlZ2xQb2xsLFxuICBjb250ZXh0LFxuICBnbEF0dHJpYnV0ZXMsXG4gIGV4dGVuc2lvbnMsXG4gIGxpbWl0cykge1xuICBmdW5jdGlvbiByZWFkUGl4ZWxzSW1wbCAoaW5wdXQpIHtcbiAgICB2YXIgdHlwZVxuICAgIGlmIChmcmFtZWJ1ZmZlclN0YXRlLm5leHQgPT09IG51bGwpIHtcbiAgICAgIGNoZWNrJDEoXG4gICAgICAgIGdsQXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIsXG4gICAgICAgICd5b3UgbXVzdCBjcmVhdGUgYSB3ZWJnbCBjb250ZXh0IHdpdGggXCJwcmVzZXJ2ZURyYXdpbmdCdWZmZXJcIjp0cnVlIGluIG9yZGVyIHRvIHJlYWQgcGl4ZWxzIGZyb20gdGhlIGRyYXdpbmcgYnVmZmVyJylcbiAgICAgIHR5cGUgPSBHTF9VTlNJR05FRF9CWVRFJDdcbiAgICB9IGVsc2Uge1xuICAgICAgY2hlY2skMShcbiAgICAgICAgZnJhbWVidWZmZXJTdGF0ZS5uZXh0LmNvbG9yQXR0YWNobWVudHNbMF0udGV4dHVyZSAhPT0gbnVsbCxcbiAgICAgICAgJ1lvdSBjYW5ub3QgcmVhZCBmcm9tIGEgcmVuZGVyYnVmZmVyJylcbiAgICAgIHR5cGUgPSBmcmFtZWJ1ZmZlclN0YXRlLm5leHQuY29sb3JBdHRhY2htZW50c1swXS50ZXh0dXJlLl90ZXh0dXJlLnR5cGVcblxuICAgICAgaWYgKGV4dGVuc2lvbnMub2VzX3RleHR1cmVfZmxvYXQpIHtcbiAgICAgICAgY2hlY2skMShcbiAgICAgICAgICB0eXBlID09PSBHTF9VTlNJR05FRF9CWVRFJDcgfHwgdHlwZSA9PT0gR0xfRkxPQVQkNyxcbiAgICAgICAgICAnUmVhZGluZyBmcm9tIGEgZnJhbWVidWZmZXIgaXMgb25seSBhbGxvd2VkIGZvciB0aGUgdHlwZXMgXFwndWludDhcXCcgYW5kIFxcJ2Zsb2F0XFwnJylcblxuICAgICAgICBpZiAodHlwZSA9PT0gR0xfRkxPQVQkNykge1xuICAgICAgICAgIGNoZWNrJDEobGltaXRzLnJlYWRGbG9hdCwgJ1JlYWRpbmcgXFwnZmxvYXRcXCcgdmFsdWVzIGlzIG5vdCBwZXJtaXR0ZWQgaW4geW91ciBicm93c2VyLiBGb3IgYSBmYWxsYmFjaywgcGxlYXNlIHNlZTogaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvZ2xzbC1yZWFkLWZsb2F0JylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hlY2skMShcbiAgICAgICAgICB0eXBlID09PSBHTF9VTlNJR05FRF9CWVRFJDcsXG4gICAgICAgICAgJ1JlYWRpbmcgZnJvbSBhIGZyYW1lYnVmZmVyIGlzIG9ubHkgYWxsb3dlZCBmb3IgdGhlIHR5cGUgXFwndWludDhcXCcnKVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB4ID0gMFxuICAgIHZhciB5ID0gMFxuICAgIHZhciB3aWR0aCA9IGNvbnRleHQuZnJhbWVidWZmZXJXaWR0aFxuICAgIHZhciBoZWlnaHQgPSBjb250ZXh0LmZyYW1lYnVmZmVySGVpZ2h0XG4gICAgdmFyIGRhdGEgPSBudWxsXG5cbiAgICBpZiAoaXNUeXBlZEFycmF5KGlucHV0KSkge1xuICAgICAgZGF0YSA9IGlucHV0XG4gICAgfSBlbHNlIGlmIChpbnB1dCkge1xuICAgICAgY2hlY2skMS50eXBlKGlucHV0LCAnb2JqZWN0JywgJ2ludmFsaWQgYXJndW1lbnRzIHRvIHJlZ2wucmVhZCgpJylcbiAgICAgIHggPSBpbnB1dC54IHwgMFxuICAgICAgeSA9IGlucHV0LnkgfCAwXG4gICAgICBjaGVjayQxKFxuICAgICAgICB4ID49IDAgJiYgeCA8IGNvbnRleHQuZnJhbWVidWZmZXJXaWR0aCxcbiAgICAgICAgJ2ludmFsaWQgeCBvZmZzZXQgZm9yIHJlZ2wucmVhZCcpXG4gICAgICBjaGVjayQxKFxuICAgICAgICB5ID49IDAgJiYgeSA8IGNvbnRleHQuZnJhbWVidWZmZXJIZWlnaHQsXG4gICAgICAgICdpbnZhbGlkIHkgb2Zmc2V0IGZvciByZWdsLnJlYWQnKVxuICAgICAgd2lkdGggPSAoaW5wdXQud2lkdGggfHwgKGNvbnRleHQuZnJhbWVidWZmZXJXaWR0aCAtIHgpKSB8IDBcbiAgICAgIGhlaWdodCA9IChpbnB1dC5oZWlnaHQgfHwgKGNvbnRleHQuZnJhbWVidWZmZXJIZWlnaHQgLSB5KSkgfCAwXG4gICAgICBkYXRhID0gaW5wdXQuZGF0YSB8fCBudWxsXG4gICAgfVxuXG4gICAgLy8gc2FuaXR5IGNoZWNrIGlucHV0LmRhdGFcbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKHR5cGUgPT09IEdMX1VOU0lHTkVEX0JZVEUkNykge1xuICAgICAgICBjaGVjayQxKFxuICAgICAgICAgIGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5LFxuICAgICAgICAgICdidWZmZXIgbXVzdCBiZSBcXCdVaW50OEFycmF5XFwnIHdoZW4gcmVhZGluZyBmcm9tIGEgZnJhbWVidWZmZXIgb2YgdHlwZSBcXCd1aW50OFxcJycpXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEdMX0ZMT0FUJDcpIHtcbiAgICAgICAgY2hlY2skMShcbiAgICAgICAgICBkYXRhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5LFxuICAgICAgICAgICdidWZmZXIgbXVzdCBiZSBcXCdGbG9hdDMyQXJyYXlcXCcgd2hlbiByZWFkaW5nIGZyb20gYSBmcmFtZWJ1ZmZlciBvZiB0eXBlIFxcJ2Zsb2F0XFwnJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjaGVjayQxKFxuICAgICAgd2lkdGggPiAwICYmIHdpZHRoICsgeCA8PSBjb250ZXh0LmZyYW1lYnVmZmVyV2lkdGgsXG4gICAgICAnaW52YWxpZCB3aWR0aCBmb3IgcmVhZCBwaXhlbHMnKVxuICAgIGNoZWNrJDEoXG4gICAgICBoZWlnaHQgPiAwICYmIGhlaWdodCArIHkgPD0gY29udGV4dC5mcmFtZWJ1ZmZlckhlaWdodCxcbiAgICAgICdpbnZhbGlkIGhlaWdodCBmb3IgcmVhZCBwaXhlbHMnKVxuXG4gICAgLy8gVXBkYXRlIFdlYkdMIHN0YXRlXG4gICAgcmVnbFBvbGwoKVxuXG4gICAgLy8gQ29tcHV0ZSBzaXplXG4gICAgdmFyIHNpemUgPSB3aWR0aCAqIGhlaWdodCAqIDRcblxuICAgIC8vIEFsbG9jYXRlIGRhdGFcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIGlmICh0eXBlID09PSBHTF9VTlNJR05FRF9CWVRFJDcpIHtcbiAgICAgICAgZGF0YSA9IG5ldyBVaW50OEFycmF5KHNpemUpXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEdMX0ZMT0FUJDcpIHtcbiAgICAgICAgZGF0YSA9IGRhdGEgfHwgbmV3IEZsb2F0MzJBcnJheShzaXplKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFR5cGUgY2hlY2tcbiAgICBjaGVjayQxLmlzVHlwZWRBcnJheShkYXRhLCAnZGF0YSBidWZmZXIgZm9yIHJlZ2wucmVhZCgpIG11c3QgYmUgYSB0eXBlZGFycmF5JylcbiAgICBjaGVjayQxKGRhdGEuYnl0ZUxlbmd0aCA+PSBzaXplLCAnZGF0YSBidWZmZXIgZm9yIHJlZ2wucmVhZCgpIHRvbyBzbWFsbCcpXG5cbiAgICAvLyBSdW4gcmVhZCBwaXhlbHNcbiAgICBnbC5waXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwgNClcbiAgICBnbC5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIEdMX1JHQkEkMyxcbiAgICAgIHR5cGUsXG4gICAgICBkYXRhKVxuXG4gICAgcmV0dXJuIGRhdGFcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRQaXhlbHNGQk8gKG9wdGlvbnMpIHtcbiAgICB2YXIgcmVzdWx0XG4gICAgZnJhbWVidWZmZXJTdGF0ZS5zZXRGQk8oe1xuICAgICAgZnJhbWVidWZmZXI6IG9wdGlvbnMuZnJhbWVidWZmZXJcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXN1bHQgPSByZWFkUGl4ZWxzSW1wbChvcHRpb25zKVxuICAgIH0pXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZFBpeGVscyAob3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucyB8fCAhKCdmcmFtZWJ1ZmZlcicgaW4gb3B0aW9ucykpIHtcbiAgICAgIHJldHVybiByZWFkUGl4ZWxzSW1wbChvcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVhZFBpeGVsc0ZCTyhvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWFkUGl4ZWxzXG59XG5cbmZ1bmN0aW9uIHNsaWNlICh4KSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh4KVxufVxuXG5mdW5jdGlvbiBqb2luICh4KSB7XG4gIHJldHVybiBzbGljZSh4KS5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVFbnZpcm9ubWVudCAoKSB7XG4gIC8vIFVuaXF1ZSB2YXJpYWJsZSBpZCBjb3VudGVyXG4gIHZhciB2YXJDb3VudGVyID0gMFxuXG4gIC8vIExpbmtlZCB2YWx1ZXMgYXJlIHBhc3NlZCBmcm9tIHRoaXMgc2NvcGUgaW50byB0aGUgZ2VuZXJhdGVkIGNvZGUgYmxvY2tcbiAgLy8gQ2FsbGluZyBsaW5rKCkgcGFzc2VzIGEgdmFsdWUgaW50byB0aGUgZ2VuZXJhdGVkIHNjb3BlIGFuZCByZXR1cm5zXG4gIC8vIHRoZSB2YXJpYWJsZSBuYW1lIHdoaWNoIGl0IGlzIGJvdW5kIHRvXG4gIHZhciBsaW5rZWROYW1lcyA9IFtdXG4gIHZhciBsaW5rZWRWYWx1ZXMgPSBbXVxuICBmdW5jdGlvbiBsaW5rICh2YWx1ZSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlua2VkVmFsdWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBpZiAobGlua2VkVmFsdWVzW2ldID09PSB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbGlua2VkTmFtZXNbaV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbmFtZSA9ICdnJyArICh2YXJDb3VudGVyKyspXG4gICAgbGlua2VkTmFtZXMucHVzaChuYW1lKVxuICAgIGxpbmtlZFZhbHVlcy5wdXNoKHZhbHVlKVxuICAgIHJldHVybiBuYW1lXG4gIH1cblxuICAvLyBjcmVhdGUgYSBjb2RlIGJsb2NrXG4gIGZ1bmN0aW9uIGJsb2NrICgpIHtcbiAgICB2YXIgY29kZSA9IFtdXG4gICAgZnVuY3Rpb24gcHVzaCAoKSB7XG4gICAgICBjb2RlLnB1c2guYXBwbHkoY29kZSwgc2xpY2UoYXJndW1lbnRzKSlcbiAgICB9XG5cbiAgICB2YXIgdmFycyA9IFtdXG4gICAgZnVuY3Rpb24gZGVmICgpIHtcbiAgICAgIHZhciBuYW1lID0gJ3YnICsgKHZhckNvdW50ZXIrKylcbiAgICAgIHZhcnMucHVzaChuYW1lKVxuXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29kZS5wdXNoKG5hbWUsICc9JylcbiAgICAgICAgY29kZS5wdXNoLmFwcGx5KGNvZGUsIHNsaWNlKGFyZ3VtZW50cykpXG4gICAgICAgIGNvZGUucHVzaCgnOycpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuYW1lXG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dGVuZChwdXNoLCB7XG4gICAgICBkZWY6IGRlZixcbiAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBqb2luKFtcbiAgICAgICAgICAodmFycy5sZW5ndGggPiAwID8gJ3ZhciAnICsgdmFycy5qb2luKCcsJykgKyAnOycgOiAnJyksXG4gICAgICAgICAgam9pbihjb2RlKVxuICAgICAgICBdKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBzY29wZSAoKSB7XG4gICAgdmFyIGVudHJ5ID0gYmxvY2soKVxuICAgIHZhciBleGl0ID0gYmxvY2soKVxuXG4gICAgdmFyIGVudHJ5VG9TdHJpbmcgPSBlbnRyeS50b1N0cmluZ1xuICAgIHZhciBleGl0VG9TdHJpbmcgPSBleGl0LnRvU3RyaW5nXG5cbiAgICBmdW5jdGlvbiBzYXZlIChvYmplY3QsIHByb3ApIHtcbiAgICAgIGV4aXQob2JqZWN0LCBwcm9wLCAnPScsIGVudHJ5LmRlZihvYmplY3QsIHByb3ApLCAnOycpXG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dGVuZChmdW5jdGlvbiAoKSB7XG4gICAgICBlbnRyeS5hcHBseShlbnRyeSwgc2xpY2UoYXJndW1lbnRzKSlcbiAgICB9LCB7XG4gICAgICBkZWY6IGVudHJ5LmRlZixcbiAgICAgIGVudHJ5OiBlbnRyeSxcbiAgICAgIGV4aXQ6IGV4aXQsXG4gICAgICBzYXZlOiBzYXZlLFxuICAgICAgc2V0OiBmdW5jdGlvbiAob2JqZWN0LCBwcm9wLCB2YWx1ZSkge1xuICAgICAgICBzYXZlKG9iamVjdCwgcHJvcClcbiAgICAgICAgZW50cnkob2JqZWN0LCBwcm9wLCAnPScsIHZhbHVlLCAnOycpXG4gICAgICB9LFxuICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGVudHJ5VG9TdHJpbmcoKSArIGV4aXRUb1N0cmluZygpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbmRpdGlvbmFsICgpIHtcbiAgICB2YXIgcHJlZCA9IGpvaW4oYXJndW1lbnRzKVxuICAgIHZhciB0aGVuQmxvY2sgPSBzY29wZSgpXG4gICAgdmFyIGVsc2VCbG9jayA9IHNjb3BlKClcblxuICAgIHZhciB0aGVuVG9TdHJpbmcgPSB0aGVuQmxvY2sudG9TdHJpbmdcbiAgICB2YXIgZWxzZVRvU3RyaW5nID0gZWxzZUJsb2NrLnRvU3RyaW5nXG5cbiAgICByZXR1cm4gZXh0ZW5kKHRoZW5CbG9jaywge1xuICAgICAgdGhlbjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGVuQmxvY2suYXBwbHkodGhlbkJsb2NrLCBzbGljZShhcmd1bWVudHMpKVxuICAgICAgICByZXR1cm4gdGhpc1xuICAgICAgfSxcbiAgICAgIGVsc2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZWxzZUJsb2NrLmFwcGx5KGVsc2VCbG9jaywgc2xpY2UoYXJndW1lbnRzKSlcbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICAgIH0sXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZWxzZUNsYXVzZSA9IGVsc2VUb1N0cmluZygpXG4gICAgICAgIGlmIChlbHNlQ2xhdXNlKSB7XG4gICAgICAgICAgZWxzZUNsYXVzZSA9ICdlbHNleycgKyBlbHNlQ2xhdXNlICsgJ30nXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpvaW4oW1xuICAgICAgICAgICdpZignLCBwcmVkLCAnKXsnLFxuICAgICAgICAgIHRoZW5Ub1N0cmluZygpLFxuICAgICAgICAgICd9JywgZWxzZUNsYXVzZVxuICAgICAgICBdKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvLyBwcm9jZWR1cmUgbGlzdFxuICB2YXIgZ2xvYmFsQmxvY2sgPSBibG9jaygpXG4gIHZhciBwcm9jZWR1cmVzID0ge31cbiAgZnVuY3Rpb24gcHJvYyAobmFtZSwgY291bnQpIHtcbiAgICB2YXIgYXJncyA9IFtdXG4gICAgZnVuY3Rpb24gYXJnICgpIHtcbiAgICAgIHZhciBuYW1lID0gJ2EnICsgYXJncy5sZW5ndGhcbiAgICAgIGFyZ3MucHVzaChuYW1lKVxuICAgICAgcmV0dXJuIG5hbWVcbiAgICB9XG5cbiAgICBjb3VudCA9IGNvdW50IHx8IDBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgIGFyZygpXG4gICAgfVxuXG4gICAgdmFyIGJvZHkgPSBzY29wZSgpXG4gICAgdmFyIGJvZHlUb1N0cmluZyA9IGJvZHkudG9TdHJpbmdcblxuICAgIHZhciByZXN1bHQgPSBwcm9jZWR1cmVzW25hbWVdID0gZXh0ZW5kKGJvZHksIHtcbiAgICAgIGFyZzogYXJnLFxuICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGpvaW4oW1xuICAgICAgICAgICdmdW5jdGlvbignLCBhcmdzLmpvaW4oKSwgJyl7JyxcbiAgICAgICAgICBib2R5VG9TdHJpbmcoKSxcbiAgICAgICAgICAnfSdcbiAgICAgICAgXSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgZnVuY3Rpb24gY29tcGlsZSAoKSB7XG4gICAgdmFyIGNvZGUgPSBbJ1widXNlIHN0cmljdFwiOycsXG4gICAgICBnbG9iYWxCbG9jayxcbiAgICAgICdyZXR1cm4geyddXG4gICAgT2JqZWN0LmtleXMocHJvY2VkdXJlcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgY29kZS5wdXNoKCdcIicsIG5hbWUsICdcIjonLCBwcm9jZWR1cmVzW25hbWVdLnRvU3RyaW5nKCksICcsJylcbiAgICB9KVxuICAgIGNvZGUucHVzaCgnfScpXG4gICAgdmFyIHNyYyA9IGpvaW4oY29kZSlcbiAgICAgIC5yZXBsYWNlKC87L2csICc7XFxuJylcbiAgICAgIC5yZXBsYWNlKC99L2csICd9XFxuJylcbiAgICAgIC5yZXBsYWNlKC97L2csICd7XFxuJylcbiAgICB2YXIgcHJvYyA9IEZ1bmN0aW9uLmFwcGx5KG51bGwsIGxpbmtlZE5hbWVzLmNvbmNhdChzcmMpKVxuICAgIHJldHVybiBwcm9jLmFwcGx5KG51bGwsIGxpbmtlZFZhbHVlcylcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZ2xvYmFsOiBnbG9iYWxCbG9jayxcbiAgICBsaW5rOiBsaW5rLFxuICAgIGJsb2NrOiBibG9jayxcbiAgICBwcm9jOiBwcm9jLFxuICAgIHNjb3BlOiBzY29wZSxcbiAgICBjb25kOiBjb25kaXRpb25hbCxcbiAgICBjb21waWxlOiBjb21waWxlXG4gIH1cbn1cblxuLy8gXCJjdXRlXCIgbmFtZXMgZm9yIHZlY3RvciBjb21wb25lbnRzXG52YXIgQ1VURV9DT01QT05FTlRTID0gJ3h5encnLnNwbGl0KCcnKVxuXG52YXIgR0xfVU5TSUdORURfQllURSQ4ID0gNTEyMVxuXG52YXIgQVRUUklCX1NUQVRFX1BPSU5URVIgPSAxXG52YXIgQVRUUklCX1NUQVRFX0NPTlNUQU5UID0gMlxuXG52YXIgRFlOX0ZVTkMkMSA9IDBcbnZhciBEWU5fUFJPUCQxID0gMVxudmFyIERZTl9DT05URVhUJDEgPSAyXG52YXIgRFlOX1NUQVRFJDEgPSAzXG52YXIgRFlOX1RIVU5LID0gNFxudmFyIERZTl9DT05TVEFOVCQxID0gNVxudmFyIERZTl9BUlJBWSQxID0gNlxuXG52YXIgU19ESVRIRVIgPSAnZGl0aGVyJ1xudmFyIFNfQkxFTkRfRU5BQkxFID0gJ2JsZW5kLmVuYWJsZSdcbnZhciBTX0JMRU5EX0NPTE9SID0gJ2JsZW5kLmNvbG9yJ1xudmFyIFNfQkxFTkRfRVFVQVRJT04gPSAnYmxlbmQuZXF1YXRpb24nXG52YXIgU19CTEVORF9GVU5DID0gJ2JsZW5kLmZ1bmMnXG52YXIgU19ERVBUSF9FTkFCTEUgPSAnZGVwdGguZW5hYmxlJ1xudmFyIFNfREVQVEhfRlVOQyA9ICdkZXB0aC5mdW5jJ1xudmFyIFNfREVQVEhfUkFOR0UgPSAnZGVwdGgucmFuZ2UnXG52YXIgU19ERVBUSF9NQVNLID0gJ2RlcHRoLm1hc2snXG52YXIgU19DT0xPUl9NQVNLID0gJ2NvbG9yTWFzaydcbnZhciBTX0NVTExfRU5BQkxFID0gJ2N1bGwuZW5hYmxlJ1xudmFyIFNfQ1VMTF9GQUNFID0gJ2N1bGwuZmFjZSdcbnZhciBTX0ZST05UX0ZBQ0UgPSAnZnJvbnRGYWNlJ1xudmFyIFNfTElORV9XSURUSCA9ICdsaW5lV2lkdGgnXG52YXIgU19QT0xZR09OX09GRlNFVF9FTkFCTEUgPSAncG9seWdvbk9mZnNldC5lbmFibGUnXG52YXIgU19QT0xZR09OX09GRlNFVF9PRkZTRVQgPSAncG9seWdvbk9mZnNldC5vZmZzZXQnXG52YXIgU19TQU1QTEVfQUxQSEEgPSAnc2FtcGxlLmFscGhhJ1xudmFyIFNfU0FNUExFX0VOQUJMRSA9ICdzYW1wbGUuZW5hYmxlJ1xudmFyIFNfU0FNUExFX0NPVkVSQUdFID0gJ3NhbXBsZS5jb3ZlcmFnZSdcbnZhciBTX1NURU5DSUxfRU5BQkxFID0gJ3N0ZW5jaWwuZW5hYmxlJ1xudmFyIFNfU1RFTkNJTF9NQVNLID0gJ3N0ZW5jaWwubWFzaydcbnZhciBTX1NURU5DSUxfRlVOQyA9ICdzdGVuY2lsLmZ1bmMnXG52YXIgU19TVEVOQ0lMX09QRlJPTlQgPSAnc3RlbmNpbC5vcEZyb250J1xudmFyIFNfU1RFTkNJTF9PUEJBQ0sgPSAnc3RlbmNpbC5vcEJhY2snXG52YXIgU19TQ0lTU09SX0VOQUJMRSA9ICdzY2lzc29yLmVuYWJsZSdcbnZhciBTX1NDSVNTT1JfQk9YID0gJ3NjaXNzb3IuYm94J1xudmFyIFNfVklFV1BPUlQgPSAndmlld3BvcnQnXG5cbnZhciBTX1BST0ZJTEUgPSAncHJvZmlsZSdcblxudmFyIFNfRlJBTUVCVUZGRVIgPSAnZnJhbWVidWZmZXInXG52YXIgU19WRVJUID0gJ3ZlcnQnXG52YXIgU19GUkFHID0gJ2ZyYWcnXG52YXIgU19FTEVNRU5UUyA9ICdlbGVtZW50cydcbnZhciBTX1BSSU1JVElWRSA9ICdwcmltaXRpdmUnXG52YXIgU19DT1VOVCA9ICdjb3VudCdcbnZhciBTX09GRlNFVCA9ICdvZmZzZXQnXG52YXIgU19JTlNUQU5DRVMgPSAnaW5zdGFuY2VzJ1xudmFyIFNfVkFPID0gJ3ZhbydcblxudmFyIFNVRkZJWF9XSURUSCA9ICdXaWR0aCdcbnZhciBTVUZGSVhfSEVJR0hUID0gJ0hlaWdodCdcblxudmFyIFNfRlJBTUVCVUZGRVJfV0lEVEggPSBTX0ZSQU1FQlVGRkVSICsgU1VGRklYX1dJRFRIXG52YXIgU19GUkFNRUJVRkZFUl9IRUlHSFQgPSBTX0ZSQU1FQlVGRkVSICsgU1VGRklYX0hFSUdIVFxudmFyIFNfVklFV1BPUlRfV0lEVEggPSBTX1ZJRVdQT1JUICsgU1VGRklYX1dJRFRIXG52YXIgU19WSUVXUE9SVF9IRUlHSFQgPSBTX1ZJRVdQT1JUICsgU1VGRklYX0hFSUdIVFxudmFyIFNfRFJBV0lOR0JVRkZFUiA9ICdkcmF3aW5nQnVmZmVyJ1xudmFyIFNfRFJBV0lOR0JVRkZFUl9XSURUSCA9IFNfRFJBV0lOR0JVRkZFUiArIFNVRkZJWF9XSURUSFxudmFyIFNfRFJBV0lOR0JVRkZFUl9IRUlHSFQgPSBTX0RSQVdJTkdCVUZGRVIgKyBTVUZGSVhfSEVJR0hUXG5cbnZhciBORVNURURfT1BUSU9OUyA9IFtcbiAgU19CTEVORF9GVU5DLFxuICBTX0JMRU5EX0VRVUFUSU9OLFxuICBTX1NURU5DSUxfRlVOQyxcbiAgU19TVEVOQ0lMX09QRlJPTlQsXG4gIFNfU1RFTkNJTF9PUEJBQ0ssXG4gIFNfU0FNUExFX0NPVkVSQUdFLFxuICBTX1ZJRVdQT1JULFxuICBTX1NDSVNTT1JfQk9YLFxuICBTX1BPTFlHT05fT0ZGU0VUX09GRlNFVFxuXVxuXG52YXIgR0xfQVJSQVlfQlVGRkVSJDIgPSAzNDk2MlxudmFyIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSJDEgPSAzNDk2M1xuXG52YXIgR0xfRlJBR01FTlRfU0hBREVSJDEgPSAzNTYzMlxudmFyIEdMX1ZFUlRFWF9TSEFERVIkMSA9IDM1NjMzXG5cbnZhciBHTF9URVhUVVJFXzJEJDMgPSAweDBERTFcbnZhciBHTF9URVhUVVJFX0NVQkVfTUFQJDIgPSAweDg1MTNcblxudmFyIEdMX0NVTExfRkFDRSA9IDB4MEI0NFxudmFyIEdMX0JMRU5EID0gMHgwQkUyXG52YXIgR0xfRElUSEVSID0gMHgwQkQwXG52YXIgR0xfU1RFTkNJTF9URVNUID0gMHgwQjkwXG52YXIgR0xfREVQVEhfVEVTVCA9IDB4MEI3MVxudmFyIEdMX1NDSVNTT1JfVEVTVCA9IDB4MEMxMVxudmFyIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEwgPSAweDgwMzdcbnZhciBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UgPSAweDgwOUVcbnZhciBHTF9TQU1QTEVfQ09WRVJBR0UgPSAweDgwQTBcblxudmFyIEdMX0ZMT0FUJDggPSA1MTI2XG52YXIgR0xfRkxPQVRfVkVDMiA9IDM1NjY0XG52YXIgR0xfRkxPQVRfVkVDMyA9IDM1NjY1XG52YXIgR0xfRkxPQVRfVkVDNCA9IDM1NjY2XG52YXIgR0xfSU5UJDMgPSA1MTI0XG52YXIgR0xfSU5UX1ZFQzIgPSAzNTY2N1xudmFyIEdMX0lOVF9WRUMzID0gMzU2NjhcbnZhciBHTF9JTlRfVkVDNCA9IDM1NjY5XG52YXIgR0xfQk9PTCA9IDM1NjcwXG52YXIgR0xfQk9PTF9WRUMyID0gMzU2NzFcbnZhciBHTF9CT09MX1ZFQzMgPSAzNTY3MlxudmFyIEdMX0JPT0xfVkVDNCA9IDM1NjczXG52YXIgR0xfRkxPQVRfTUFUMiA9IDM1Njc0XG52YXIgR0xfRkxPQVRfTUFUMyA9IDM1Njc1XG52YXIgR0xfRkxPQVRfTUFUNCA9IDM1Njc2XG52YXIgR0xfU0FNUExFUl8yRCA9IDM1Njc4XG52YXIgR0xfU0FNUExFUl9DVUJFID0gMzU2ODBcblxudmFyIEdMX1RSSUFOR0xFUyQxID0gNFxuXG52YXIgR0xfRlJPTlQgPSAxMDI4XG52YXIgR0xfQkFDSyA9IDEwMjlcbnZhciBHTF9DVyA9IDB4MDkwMFxudmFyIEdMX0NDVyA9IDB4MDkwMVxudmFyIEdMX01JTl9FWFQgPSAweDgwMDdcbnZhciBHTF9NQVhfRVhUID0gMHg4MDA4XG52YXIgR0xfQUxXQVlTID0gNTE5XG52YXIgR0xfS0VFUCA9IDc2ODBcbnZhciBHTF9aRVJPID0gMFxudmFyIEdMX09ORSA9IDFcbnZhciBHTF9GVU5DX0FERCA9IDB4ODAwNlxudmFyIEdMX0xFU1MgPSA1MTNcblxudmFyIEdMX0ZSQU1FQlVGRkVSJDIgPSAweDhENDBcbnZhciBHTF9DT0xPUl9BVFRBQ0hNRU5UMCQyID0gMHg4Q0UwXG5cbnZhciBibGVuZEZ1bmNzID0ge1xuICAnMCc6IDAsXG4gICcxJzogMSxcbiAgJ3plcm8nOiAwLFxuICAnb25lJzogMSxcbiAgJ3NyYyBjb2xvcic6IDc2OCxcbiAgJ29uZSBtaW51cyBzcmMgY29sb3InOiA3NjksXG4gICdzcmMgYWxwaGEnOiA3NzAsXG4gICdvbmUgbWludXMgc3JjIGFscGhhJzogNzcxLFxuICAnZHN0IGNvbG9yJzogNzc0LFxuICAnb25lIG1pbnVzIGRzdCBjb2xvcic6IDc3NSxcbiAgJ2RzdCBhbHBoYSc6IDc3MixcbiAgJ29uZSBtaW51cyBkc3QgYWxwaGEnOiA3NzMsXG4gICdjb25zdGFudCBjb2xvcic6IDMyNzY5LFxuICAnb25lIG1pbnVzIGNvbnN0YW50IGNvbG9yJzogMzI3NzAsXG4gICdjb25zdGFudCBhbHBoYSc6IDMyNzcxLFxuICAnb25lIG1pbnVzIGNvbnN0YW50IGFscGhhJzogMzI3NzIsXG4gICdzcmMgYWxwaGEgc2F0dXJhdGUnOiA3NzZcbn1cblxuLy8gVGhlcmUgYXJlIGludmFsaWQgdmFsdWVzIGZvciBzcmNSR0IgYW5kIGRzdFJHQi4gU2VlOlxuLy8gaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc3BlY3MvMS4wLyM2LjEzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL1dlYkdML2Jsb2IvMGQzMjAxZjVmN2VjM2MwMDYwYmMxZjA0MDc3NDYxNTQxZjE5ODdiOS9jb25mb3JtYW5jZS1zdWl0ZXMvMS4wLjMvY29uZm9ybWFuY2UvbWlzYy93ZWJnbC1zcGVjaWZpYy5odG1sI0w1NlxudmFyIGludmFsaWRCbGVuZENvbWJpbmF0aW9ucyA9IFtcbiAgJ2NvbnN0YW50IGNvbG9yLCBjb25zdGFudCBhbHBoYScsXG4gICdvbmUgbWludXMgY29uc3RhbnQgY29sb3IsIGNvbnN0YW50IGFscGhhJyxcbiAgJ2NvbnN0YW50IGNvbG9yLCBvbmUgbWludXMgY29uc3RhbnQgYWxwaGEnLFxuICAnb25lIG1pbnVzIGNvbnN0YW50IGNvbG9yLCBvbmUgbWludXMgY29uc3RhbnQgYWxwaGEnLFxuICAnY29uc3RhbnQgYWxwaGEsIGNvbnN0YW50IGNvbG9yJyxcbiAgJ2NvbnN0YW50IGFscGhhLCBvbmUgbWludXMgY29uc3RhbnQgY29sb3InLFxuICAnb25lIG1pbnVzIGNvbnN0YW50IGFscGhhLCBjb25zdGFudCBjb2xvcicsXG4gICdvbmUgbWludXMgY29uc3RhbnQgYWxwaGEsIG9uZSBtaW51cyBjb25zdGFudCBjb2xvcidcbl1cblxudmFyIGNvbXBhcmVGdW5jcyA9IHtcbiAgJ25ldmVyJzogNTEyLFxuICAnbGVzcyc6IDUxMyxcbiAgJzwnOiA1MTMsXG4gICdlcXVhbCc6IDUxNCxcbiAgJz0nOiA1MTQsXG4gICc9PSc6IDUxNCxcbiAgJz09PSc6IDUxNCxcbiAgJ2xlcXVhbCc6IDUxNSxcbiAgJzw9JzogNTE1LFxuICAnZ3JlYXRlcic6IDUxNixcbiAgJz4nOiA1MTYsXG4gICdub3RlcXVhbCc6IDUxNyxcbiAgJyE9JzogNTE3LFxuICAnIT09JzogNTE3LFxuICAnZ2VxdWFsJzogNTE4LFxuICAnPj0nOiA1MTgsXG4gICdhbHdheXMnOiA1MTlcbn1cblxudmFyIHN0ZW5jaWxPcHMgPSB7XG4gICcwJzogMCxcbiAgJ3plcm8nOiAwLFxuICAna2VlcCc6IDc2ODAsXG4gICdyZXBsYWNlJzogNzY4MSxcbiAgJ2luY3JlbWVudCc6IDc2ODIsXG4gICdkZWNyZW1lbnQnOiA3NjgzLFxuICAnaW5jcmVtZW50IHdyYXAnOiAzNDA1NSxcbiAgJ2RlY3JlbWVudCB3cmFwJzogMzQwNTYsXG4gICdpbnZlcnQnOiA1Mzg2XG59XG5cbnZhciBzaGFkZXJUeXBlID0ge1xuICAnZnJhZyc6IEdMX0ZSQUdNRU5UX1NIQURFUiQxLFxuICAndmVydCc6IEdMX1ZFUlRFWF9TSEFERVIkMVxufVxuXG52YXIgb3JpZW50YXRpb25UeXBlID0ge1xuICAnY3cnOiBHTF9DVyxcbiAgJ2Njdyc6IEdMX0NDV1xufVxuXG5mdW5jdGlvbiBpc0J1ZmZlckFyZ3MgKHgpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoeCkgfHxcbiAgICBpc1R5cGVkQXJyYXkoeCkgfHxcbiAgICBpc05EQXJyYXlMaWtlKHgpXG59XG5cbi8vIE1ha2Ugc3VyZSB2aWV3cG9ydCBpcyBwcm9jZXNzZWQgZmlyc3RcbmZ1bmN0aW9uIHNvcnRTdGF0ZSAoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICBpZiAoYSA9PT0gU19WSUVXUE9SVCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfSBlbHNlIGlmIChiID09PSBTX1ZJRVdQT1JUKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cbiAgICByZXR1cm4gKGEgPCBiKSA/IC0xIDogMVxuICB9KVxufVxuXG5mdW5jdGlvbiBEZWNsYXJhdGlvbiAodGhpc0RlcCwgY29udGV4dERlcCwgcHJvcERlcCwgYXBwZW5kKSB7XG4gIHRoaXMudGhpc0RlcCA9IHRoaXNEZXBcbiAgdGhpcy5jb250ZXh0RGVwID0gY29udGV4dERlcFxuICB0aGlzLnByb3BEZXAgPSBwcm9wRGVwXG4gIHRoaXMuYXBwZW5kID0gYXBwZW5kXG59XG5cbmZ1bmN0aW9uIGlzU3RhdGljIChkZWNsKSB7XG4gIHJldHVybiBkZWNsICYmICEoZGVjbC50aGlzRGVwIHx8IGRlY2wuY29udGV4dERlcCB8fCBkZWNsLnByb3BEZXApXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0YXRpY0RlY2wgKGFwcGVuZCkge1xuICByZXR1cm4gbmV3IERlY2xhcmF0aW9uKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGFwcGVuZClcbn1cblxuZnVuY3Rpb24gY3JlYXRlRHluYW1pY0RlY2wgKGR5biwgYXBwZW5kKSB7XG4gIHZhciB0eXBlID0gZHluLnR5cGVcbiAgaWYgKHR5cGUgPT09IERZTl9GVU5DJDEpIHtcbiAgICB2YXIgbnVtQXJncyA9IGR5bi5kYXRhLmxlbmd0aFxuICAgIHJldHVybiBuZXcgRGVjbGFyYXRpb24oXG4gICAgICB0cnVlLFxuICAgICAgbnVtQXJncyA+PSAxLFxuICAgICAgbnVtQXJncyA+PSAyLFxuICAgICAgYXBwZW5kKVxuICB9IGVsc2UgaWYgKHR5cGUgPT09IERZTl9USFVOSykge1xuICAgIHZhciBkYXRhID0gZHluLmRhdGFcbiAgICByZXR1cm4gbmV3IERlY2xhcmF0aW9uKFxuICAgICAgZGF0YS50aGlzRGVwLFxuICAgICAgZGF0YS5jb250ZXh0RGVwLFxuICAgICAgZGF0YS5wcm9wRGVwLFxuICAgICAgYXBwZW5kKVxuICB9IGVsc2UgaWYgKHR5cGUgPT09IERZTl9DT05TVEFOVCQxKSB7XG4gICAgcmV0dXJuIG5ldyBEZWNsYXJhdGlvbihcbiAgICAgIGZhbHNlLFxuICAgICAgZmFsc2UsXG4gICAgICBmYWxzZSxcbiAgICAgIGFwcGVuZClcbiAgfSBlbHNlIGlmICh0eXBlID09PSBEWU5fQVJSQVkkMSkge1xuICAgIHZhciB0aGlzRGVwID0gZmFsc2VcbiAgICB2YXIgY29udGV4dERlcCA9IGZhbHNlXG4gICAgdmFyIHByb3BEZXAgPSBmYWxzZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZHluLmRhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBzdWJEeW4gPSBkeW4uZGF0YVtpXVxuICAgICAgaWYgKHN1YkR5bi50eXBlID09PSBEWU5fUFJPUCQxKSB7XG4gICAgICAgIHByb3BEZXAgPSB0cnVlXG4gICAgICB9IGVsc2UgaWYgKHN1YkR5bi50eXBlID09PSBEWU5fQ09OVEVYVCQxKSB7XG4gICAgICAgIGNvbnRleHREZXAgPSB0cnVlXG4gICAgICB9IGVsc2UgaWYgKHN1YkR5bi50eXBlID09PSBEWU5fU1RBVEUkMSkge1xuICAgICAgICB0aGlzRGVwID0gdHJ1ZVxuICAgICAgfSBlbHNlIGlmIChzdWJEeW4udHlwZSA9PT0gRFlOX0ZVTkMkMSkge1xuICAgICAgICB0aGlzRGVwID0gdHJ1ZVxuICAgICAgICB2YXIgc3ViQXJncyA9IHN1YkR5bi5kYXRhXG4gICAgICAgIGlmIChzdWJBcmdzID49IDEpIHtcbiAgICAgICAgICBjb250ZXh0RGVwID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdWJBcmdzID49IDIpIHtcbiAgICAgICAgICBwcm9wRGVwID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN1YkR5bi50eXBlID09PSBEWU5fVEhVTkspIHtcbiAgICAgICAgdGhpc0RlcCA9IHRoaXNEZXAgfHwgc3ViRHluLmRhdGEudGhpc0RlcFxuICAgICAgICBjb250ZXh0RGVwID0gY29udGV4dERlcCB8fCBzdWJEeW4uZGF0YS5jb250ZXh0RGVwXG4gICAgICAgIHByb3BEZXAgPSBwcm9wRGVwIHx8IHN1YkR5bi5kYXRhLnByb3BEZXBcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEZWNsYXJhdGlvbihcbiAgICAgIHRoaXNEZXAsXG4gICAgICBjb250ZXh0RGVwLFxuICAgICAgcHJvcERlcCxcbiAgICAgIGFwcGVuZClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IERlY2xhcmF0aW9uKFxuICAgICAgdHlwZSA9PT0gRFlOX1NUQVRFJDEsXG4gICAgICB0eXBlID09PSBEWU5fQ09OVEVYVCQxLFxuICAgICAgdHlwZSA9PT0gRFlOX1BST1AkMSxcbiAgICAgIGFwcGVuZClcbiAgfVxufVxuXG52YXIgU0NPUEVfREVDTCA9IG5ldyBEZWNsYXJhdGlvbihmYWxzZSwgZmFsc2UsIGZhbHNlLCBmdW5jdGlvbiAoKSB7fSlcblxuZnVuY3Rpb24gcmVnbENvcmUgKFxuICBnbCxcbiAgc3RyaW5nU3RvcmUsXG4gIGV4dGVuc2lvbnMsXG4gIGxpbWl0cyxcbiAgYnVmZmVyU3RhdGUsXG4gIGVsZW1lbnRTdGF0ZSxcbiAgdGV4dHVyZVN0YXRlLFxuICBmcmFtZWJ1ZmZlclN0YXRlLFxuICB1bmlmb3JtU3RhdGUsXG4gIGF0dHJpYnV0ZVN0YXRlLFxuICBzaGFkZXJTdGF0ZSxcbiAgZHJhd1N0YXRlLFxuICBjb250ZXh0U3RhdGUsXG4gIHRpbWVyLFxuICBjb25maWcpIHtcbiAgdmFyIEF0dHJpYnV0ZVJlY29yZCA9IGF0dHJpYnV0ZVN0YXRlLlJlY29yZFxuXG4gIHZhciBibGVuZEVxdWF0aW9ucyA9IHtcbiAgICAnYWRkJzogMzI3NzQsXG4gICAgJ3N1YnRyYWN0JzogMzI3NzgsXG4gICAgJ3JldmVyc2Ugc3VidHJhY3QnOiAzMjc3OVxuICB9XG4gIGlmIChleHRlbnNpb25zLmV4dF9ibGVuZF9taW5tYXgpIHtcbiAgICBibGVuZEVxdWF0aW9ucy5taW4gPSBHTF9NSU5fRVhUXG4gICAgYmxlbmRFcXVhdGlvbnMubWF4ID0gR0xfTUFYX0VYVFxuICB9XG5cbiAgdmFyIGV4dEluc3RhbmNpbmcgPSBleHRlbnNpb25zLmFuZ2xlX2luc3RhbmNlZF9hcnJheXNcbiAgdmFyIGV4dERyYXdCdWZmZXJzID0gZXh0ZW5zaW9ucy53ZWJnbF9kcmF3X2J1ZmZlcnNcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFdFQkdMIFNUQVRFXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGN1cnJlbnRTdGF0ZSA9IHtcbiAgICBkaXJ0eTogdHJ1ZSxcbiAgICBwcm9maWxlOiBjb25maWcucHJvZmlsZVxuICB9XG4gIHZhciBuZXh0U3RhdGUgPSB7fVxuICB2YXIgR0xfU1RBVEVfTkFNRVMgPSBbXVxuICB2YXIgR0xfRkxBR1MgPSB7fVxuICB2YXIgR0xfVkFSSUFCTEVTID0ge31cblxuICBmdW5jdGlvbiBwcm9wTmFtZSAobmFtZSkge1xuICAgIHJldHVybiBuYW1lLnJlcGxhY2UoJy4nLCAnXycpXG4gIH1cblxuICBmdW5jdGlvbiBzdGF0ZUZsYWcgKHNuYW1lLCBjYXAsIGluaXQpIHtcbiAgICB2YXIgbmFtZSA9IHByb3BOYW1lKHNuYW1lKVxuICAgIEdMX1NUQVRFX05BTUVTLnB1c2goc25hbWUpXG4gICAgbmV4dFN0YXRlW25hbWVdID0gY3VycmVudFN0YXRlW25hbWVdID0gISFpbml0XG4gICAgR0xfRkxBR1NbbmFtZV0gPSBjYXBcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXRlVmFyaWFibGUgKHNuYW1lLCBmdW5jLCBpbml0KSB7XG4gICAgdmFyIG5hbWUgPSBwcm9wTmFtZShzbmFtZSlcbiAgICBHTF9TVEFURV9OQU1FUy5wdXNoKHNuYW1lKVxuICAgIGlmIChBcnJheS5pc0FycmF5KGluaXQpKSB7XG4gICAgICBjdXJyZW50U3RhdGVbbmFtZV0gPSBpbml0LnNsaWNlKClcbiAgICAgIG5leHRTdGF0ZVtuYW1lXSA9IGluaXQuc2xpY2UoKVxuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50U3RhdGVbbmFtZV0gPSBuZXh0U3RhdGVbbmFtZV0gPSBpbml0XG4gICAgfVxuICAgIEdMX1ZBUklBQkxFU1tuYW1lXSA9IGZ1bmNcbiAgfVxuXG4gIC8vIERpdGhlcmluZ1xuICBzdGF0ZUZsYWcoU19ESVRIRVIsIEdMX0RJVEhFUilcblxuICAvLyBCbGVuZGluZ1xuICBzdGF0ZUZsYWcoU19CTEVORF9FTkFCTEUsIEdMX0JMRU5EKVxuICBzdGF0ZVZhcmlhYmxlKFNfQkxFTkRfQ09MT1IsICdibGVuZENvbG9yJywgWzAsIDAsIDAsIDBdKVxuICBzdGF0ZVZhcmlhYmxlKFNfQkxFTkRfRVFVQVRJT04sICdibGVuZEVxdWF0aW9uU2VwYXJhdGUnLFxuICAgIFtHTF9GVU5DX0FERCwgR0xfRlVOQ19BRERdKVxuICBzdGF0ZVZhcmlhYmxlKFNfQkxFTkRfRlVOQywgJ2JsZW5kRnVuY1NlcGFyYXRlJyxcbiAgICBbR0xfT05FLCBHTF9aRVJPLCBHTF9PTkUsIEdMX1pFUk9dKVxuXG4gIC8vIERlcHRoXG4gIHN0YXRlRmxhZyhTX0RFUFRIX0VOQUJMRSwgR0xfREVQVEhfVEVTVCwgdHJ1ZSlcbiAgc3RhdGVWYXJpYWJsZShTX0RFUFRIX0ZVTkMsICdkZXB0aEZ1bmMnLCBHTF9MRVNTKVxuICBzdGF0ZVZhcmlhYmxlKFNfREVQVEhfUkFOR0UsICdkZXB0aFJhbmdlJywgWzAsIDFdKVxuICBzdGF0ZVZhcmlhYmxlKFNfREVQVEhfTUFTSywgJ2RlcHRoTWFzaycsIHRydWUpXG5cbiAgLy8gQ29sb3IgbWFza1xuICBzdGF0ZVZhcmlhYmxlKFNfQ09MT1JfTUFTSywgU19DT0xPUl9NQVNLLCBbdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV0pXG5cbiAgLy8gRmFjZSBjdWxsaW5nXG4gIHN0YXRlRmxhZyhTX0NVTExfRU5BQkxFLCBHTF9DVUxMX0ZBQ0UpXG4gIHN0YXRlVmFyaWFibGUoU19DVUxMX0ZBQ0UsICdjdWxsRmFjZScsIEdMX0JBQ0spXG5cbiAgLy8gRnJvbnQgZmFjZSBvcmllbnRhdGlvblxuICBzdGF0ZVZhcmlhYmxlKFNfRlJPTlRfRkFDRSwgU19GUk9OVF9GQUNFLCBHTF9DQ1cpXG5cbiAgLy8gTGluZSB3aWR0aFxuICBzdGF0ZVZhcmlhYmxlKFNfTElORV9XSURUSCwgU19MSU5FX1dJRFRILCAxKVxuXG4gIC8vIFBvbHlnb24gb2Zmc2V0XG4gIHN0YXRlRmxhZyhTX1BPTFlHT05fT0ZGU0VUX0VOQUJMRSwgR0xfUE9MWUdPTl9PRkZTRVRfRklMTClcbiAgc3RhdGVWYXJpYWJsZShTX1BPTFlHT05fT0ZGU0VUX09GRlNFVCwgJ3BvbHlnb25PZmZzZXQnLCBbMCwgMF0pXG5cbiAgLy8gU2FtcGxlIGNvdmVyYWdlXG4gIHN0YXRlRmxhZyhTX1NBTVBMRV9BTFBIQSwgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFKVxuICBzdGF0ZUZsYWcoU19TQU1QTEVfRU5BQkxFLCBHTF9TQU1QTEVfQ09WRVJBR0UpXG4gIHN0YXRlVmFyaWFibGUoU19TQU1QTEVfQ09WRVJBR0UsICdzYW1wbGVDb3ZlcmFnZScsIFsxLCBmYWxzZV0pXG5cbiAgLy8gU3RlbmNpbFxuICBzdGF0ZUZsYWcoU19TVEVOQ0lMX0VOQUJMRSwgR0xfU1RFTkNJTF9URVNUKVxuICBzdGF0ZVZhcmlhYmxlKFNfU1RFTkNJTF9NQVNLLCAnc3RlbmNpbE1hc2snLCAtMSlcbiAgc3RhdGVWYXJpYWJsZShTX1NURU5DSUxfRlVOQywgJ3N0ZW5jaWxGdW5jJywgW0dMX0FMV0FZUywgMCwgLTFdKVxuICBzdGF0ZVZhcmlhYmxlKFNfU1RFTkNJTF9PUEZST05ULCAnc3RlbmNpbE9wU2VwYXJhdGUnLFxuICAgIFtHTF9GUk9OVCwgR0xfS0VFUCwgR0xfS0VFUCwgR0xfS0VFUF0pXG4gIHN0YXRlVmFyaWFibGUoU19TVEVOQ0lMX09QQkFDSywgJ3N0ZW5jaWxPcFNlcGFyYXRlJyxcbiAgICBbR0xfQkFDSywgR0xfS0VFUCwgR0xfS0VFUCwgR0xfS0VFUF0pXG5cbiAgLy8gU2Npc3NvclxuICBzdGF0ZUZsYWcoU19TQ0lTU09SX0VOQUJMRSwgR0xfU0NJU1NPUl9URVNUKVxuICBzdGF0ZVZhcmlhYmxlKFNfU0NJU1NPUl9CT1gsICdzY2lzc29yJyxcbiAgICBbMCwgMCwgZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLCBnbC5kcmF3aW5nQnVmZmVySGVpZ2h0XSlcblxuICAvLyBWaWV3cG9ydFxuICBzdGF0ZVZhcmlhYmxlKFNfVklFV1BPUlQsIFNfVklFV1BPUlQsXG4gICAgWzAsIDAsIGdsLmRyYXdpbmdCdWZmZXJXaWR0aCwgZ2wuZHJhd2luZ0J1ZmZlckhlaWdodF0pXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBFTlZJUk9OTUVOVFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBzaGFyZWRTdGF0ZSA9IHtcbiAgICBnbDogZ2wsXG4gICAgY29udGV4dDogY29udGV4dFN0YXRlLFxuICAgIHN0cmluZ3M6IHN0cmluZ1N0b3JlLFxuICAgIG5leHQ6IG5leHRTdGF0ZSxcbiAgICBjdXJyZW50OiBjdXJyZW50U3RhdGUsXG4gICAgZHJhdzogZHJhd1N0YXRlLFxuICAgIGVsZW1lbnRzOiBlbGVtZW50U3RhdGUsXG4gICAgYnVmZmVyOiBidWZmZXJTdGF0ZSxcbiAgICBzaGFkZXI6IHNoYWRlclN0YXRlLFxuICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZVN0YXRlLnN0YXRlLFxuICAgIHZhbzogYXR0cmlidXRlU3RhdGUsXG4gICAgdW5pZm9ybXM6IHVuaWZvcm1TdGF0ZSxcbiAgICBmcmFtZWJ1ZmZlcjogZnJhbWVidWZmZXJTdGF0ZSxcbiAgICBleHRlbnNpb25zOiBleHRlbnNpb25zLFxuXG4gICAgdGltZXI6IHRpbWVyLFxuICAgIGlzQnVmZmVyQXJnczogaXNCdWZmZXJBcmdzXG4gIH1cblxuICB2YXIgc2hhcmVkQ29uc3RhbnRzID0ge1xuICAgIHByaW1UeXBlczogcHJpbVR5cGVzLFxuICAgIGNvbXBhcmVGdW5jczogY29tcGFyZUZ1bmNzLFxuICAgIGJsZW5kRnVuY3M6IGJsZW5kRnVuY3MsXG4gICAgYmxlbmRFcXVhdGlvbnM6IGJsZW5kRXF1YXRpb25zLFxuICAgIHN0ZW5jaWxPcHM6IHN0ZW5jaWxPcHMsXG4gICAgZ2xUeXBlczogZ2xUeXBlcyxcbiAgICBvcmllbnRhdGlvblR5cGU6IG9yaWVudGF0aW9uVHlwZVxuICB9XG5cbiAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgc2hhcmVkU3RhdGUuaXNBcnJheUxpa2UgPSBpc0FycmF5TGlrZVxuICB9KVxuXG4gIGlmIChleHREcmF3QnVmZmVycykge1xuICAgIHNoYXJlZENvbnN0YW50cy5iYWNrQnVmZmVyID0gW0dMX0JBQ0tdXG4gICAgc2hhcmVkQ29uc3RhbnRzLmRyYXdCdWZmZXIgPSBsb29wKGxpbWl0cy5tYXhEcmF3YnVmZmVycywgZnVuY3Rpb24gKGkpIHtcbiAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMF1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsb29wKGksIGZ1bmN0aW9uIChqKSB7XG4gICAgICAgIHJldHVybiBHTF9DT0xPUl9BVFRBQ0hNRU5UMCQyICsgalxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdmFyIGRyYXdDYWxsQ291bnRlciA9IDBcbiAgZnVuY3Rpb24gY3JlYXRlUkVHTEVudmlyb25tZW50ICgpIHtcbiAgICB2YXIgZW52ID0gY3JlYXRlRW52aXJvbm1lbnQoKVxuICAgIHZhciBsaW5rID0gZW52LmxpbmtcbiAgICB2YXIgZ2xvYmFsID0gZW52Lmdsb2JhbFxuICAgIGVudi5pZCA9IGRyYXdDYWxsQ291bnRlcisrXG5cbiAgICBlbnYuYmF0Y2hJZCA9ICcwJ1xuXG4gICAgLy8gbGluayBzaGFyZWQgc3RhdGVcbiAgICB2YXIgU0hBUkVEID0gbGluayhzaGFyZWRTdGF0ZSlcbiAgICB2YXIgc2hhcmVkID0gZW52LnNoYXJlZCA9IHtcbiAgICAgIHByb3BzOiAnYTAnXG4gICAgfVxuICAgIE9iamVjdC5rZXlzKHNoYXJlZFN0YXRlKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICBzaGFyZWRbcHJvcF0gPSBnbG9iYWwuZGVmKFNIQVJFRCwgJy4nLCBwcm9wKVxuICAgIH0pXG5cbiAgICAvLyBJbmplY3QgcnVudGltZSBhc3NlcnRpb24gc3R1ZmYgZm9yIGRlYnVnIGJ1aWxkc1xuICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgZW52LkNIRUNLID0gbGluayhjaGVjayQxKVxuICAgICAgZW52LmNvbW1hbmRTdHIgPSBjaGVjayQxLmd1ZXNzQ29tbWFuZCgpXG4gICAgICBlbnYuY29tbWFuZCA9IGxpbmsoZW52LmNvbW1hbmRTdHIpXG4gICAgICBlbnYuYXNzZXJ0ID0gZnVuY3Rpb24gKGJsb2NrLCBwcmVkLCBtZXNzYWdlKSB7XG4gICAgICAgIGJsb2NrKFxuICAgICAgICAgICdpZighKCcsIHByZWQsICcpKScsXG4gICAgICAgICAgdGhpcy5DSEVDSywgJy5jb21tYW5kUmFpc2UoJywgbGluayhtZXNzYWdlKSwgJywnLCB0aGlzLmNvbW1hbmQsICcpOycpXG4gICAgICB9XG5cbiAgICAgIHNoYXJlZENvbnN0YW50cy5pbnZhbGlkQmxlbmRDb21iaW5hdGlvbnMgPSBpbnZhbGlkQmxlbmRDb21iaW5hdGlvbnNcbiAgICB9KVxuXG4gICAgLy8gQ29weSBHTCBzdGF0ZSB2YXJpYWJsZXMgb3ZlclxuICAgIHZhciBuZXh0VmFycyA9IGVudi5uZXh0ID0ge31cbiAgICB2YXIgY3VycmVudFZhcnMgPSBlbnYuY3VycmVudCA9IHt9XG4gICAgT2JqZWN0LmtleXMoR0xfVkFSSUFCTEVTKS5mb3JFYWNoKGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudFN0YXRlW3ZhcmlhYmxlXSkpIHtcbiAgICAgICAgbmV4dFZhcnNbdmFyaWFibGVdID0gZ2xvYmFsLmRlZihzaGFyZWQubmV4dCwgJy4nLCB2YXJpYWJsZSlcbiAgICAgICAgY3VycmVudFZhcnNbdmFyaWFibGVdID0gZ2xvYmFsLmRlZihzaGFyZWQuY3VycmVudCwgJy4nLCB2YXJpYWJsZSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBzaGFyZWQgY29uc3RhbnRzXG4gICAgdmFyIGNvbnN0YW50cyA9IGVudi5jb25zdGFudHMgPSB7fVxuICAgIE9iamVjdC5rZXlzKHNoYXJlZENvbnN0YW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgY29uc3RhbnRzW25hbWVdID0gZ2xvYmFsLmRlZihKU09OLnN0cmluZ2lmeShzaGFyZWRDb25zdGFudHNbbmFtZV0pKVxuICAgIH0pXG5cbiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGNhbGxpbmcgYSBibG9ja1xuICAgIGVudi5pbnZva2UgPSBmdW5jdGlvbiAoYmxvY2ssIHgpIHtcbiAgICAgIHN3aXRjaCAoeC50eXBlKSB7XG4gICAgICAgIGNhc2UgRFlOX0ZVTkMkMTpcbiAgICAgICAgICB2YXIgYXJnTGlzdCA9IFtcbiAgICAgICAgICAgICd0aGlzJyxcbiAgICAgICAgICAgIHNoYXJlZC5jb250ZXh0LFxuICAgICAgICAgICAgc2hhcmVkLnByb3BzLFxuICAgICAgICAgICAgZW52LmJhdGNoSWRcbiAgICAgICAgICBdXG4gICAgICAgICAgcmV0dXJuIGJsb2NrLmRlZihcbiAgICAgICAgICAgIGxpbmsoeC5kYXRhKSwgJy5jYWxsKCcsXG4gICAgICAgICAgICBhcmdMaXN0LnNsaWNlKDAsIE1hdGgubWF4KHguZGF0YS5sZW5ndGggKyAxLCA0KSksXG4gICAgICAgICAgICAnKScpXG4gICAgICAgIGNhc2UgRFlOX1BST1AkMTpcbiAgICAgICAgICByZXR1cm4gYmxvY2suZGVmKHNoYXJlZC5wcm9wcywgeC5kYXRhKVxuICAgICAgICBjYXNlIERZTl9DT05URVhUJDE6XG4gICAgICAgICAgcmV0dXJuIGJsb2NrLmRlZihzaGFyZWQuY29udGV4dCwgeC5kYXRhKVxuICAgICAgICBjYXNlIERZTl9TVEFURSQxOlxuICAgICAgICAgIHJldHVybiBibG9jay5kZWYoJ3RoaXMnLCB4LmRhdGEpXG4gICAgICAgIGNhc2UgRFlOX1RIVU5LOlxuICAgICAgICAgIHguZGF0YS5hcHBlbmQoZW52LCBibG9jaylcbiAgICAgICAgICByZXR1cm4geC5kYXRhLnJlZlxuICAgICAgICBjYXNlIERZTl9DT05TVEFOVCQxOlxuICAgICAgICAgIHJldHVybiB4LmRhdGEudG9TdHJpbmcoKVxuICAgICAgICBjYXNlIERZTl9BUlJBWSQxOlxuICAgICAgICAgIHJldHVybiB4LmRhdGEubWFwKGZ1bmN0aW9uICh5KSB7XG4gICAgICAgICAgICByZXR1cm4gZW52Lmludm9rZShibG9jaywgeSlcbiAgICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGVudi5hdHRyaWJDYWNoZSA9IHt9XG5cbiAgICB2YXIgc2NvcGVBdHRyaWJzID0ge31cbiAgICBlbnYuc2NvcGVBdHRyaWIgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIGlkID0gc3RyaW5nU3RvcmUuaWQobmFtZSlcbiAgICAgIGlmIChpZCBpbiBzY29wZUF0dHJpYnMpIHtcbiAgICAgICAgcmV0dXJuIHNjb3BlQXR0cmlic1tpZF1cbiAgICAgIH1cbiAgICAgIHZhciBiaW5kaW5nID0gYXR0cmlidXRlU3RhdGUuc2NvcGVbaWRdXG4gICAgICBpZiAoIWJpbmRpbmcpIHtcbiAgICAgICAgYmluZGluZyA9IGF0dHJpYnV0ZVN0YXRlLnNjb3BlW2lkXSA9IG5ldyBBdHRyaWJ1dGVSZWNvcmQoKVxuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IHNjb3BlQXR0cmlic1tpZF0gPSBsaW5rKGJpbmRpbmcpXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudlxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQQVJTSU5HXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgZnVuY3Rpb24gcGFyc2VQcm9maWxlIChvcHRpb25zKSB7XG4gICAgdmFyIHN0YXRpY09wdGlvbnMgPSBvcHRpb25zLnN0YXRpY1xuICAgIHZhciBkeW5hbWljT3B0aW9ucyA9IG9wdGlvbnMuZHluYW1pY1xuXG4gICAgdmFyIHByb2ZpbGVFbmFibGVcbiAgICBpZiAoU19QUk9GSUxFIGluIHN0YXRpY09wdGlvbnMpIHtcbiAgICAgIHZhciB2YWx1ZSA9ICEhc3RhdGljT3B0aW9uc1tTX1BST0ZJTEVdXG4gICAgICBwcm9maWxlRW5hYmxlID0gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH0pXG4gICAgICBwcm9maWxlRW5hYmxlLmVuYWJsZSA9IHZhbHVlXG4gICAgfSBlbHNlIGlmIChTX1BST0ZJTEUgaW4gZHluYW1pY09wdGlvbnMpIHtcbiAgICAgIHZhciBkeW4gPSBkeW5hbWljT3B0aW9uc1tTX1BST0ZJTEVdXG4gICAgICBwcm9maWxlRW5hYmxlID0gY3JlYXRlRHluYW1pY0RlY2woZHluLCBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICByZXR1cm4gZW52Lmludm9rZShzY29wZSwgZHluKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvZmlsZUVuYWJsZVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VGcmFtZWJ1ZmZlciAob3B0aW9ucywgZW52KSB7XG4gICAgdmFyIHN0YXRpY09wdGlvbnMgPSBvcHRpb25zLnN0YXRpY1xuICAgIHZhciBkeW5hbWljT3B0aW9ucyA9IG9wdGlvbnMuZHluYW1pY1xuXG4gICAgaWYgKFNfRlJBTUVCVUZGRVIgaW4gc3RhdGljT3B0aW9ucykge1xuICAgICAgdmFyIGZyYW1lYnVmZmVyID0gc3RhdGljT3B0aW9uc1tTX0ZSQU1FQlVGRkVSXVxuICAgICAgaWYgKGZyYW1lYnVmZmVyKSB7XG4gICAgICAgIGZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXJTdGF0ZS5nZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcilcbiAgICAgICAgY2hlY2skMS5jb21tYW5kKGZyYW1lYnVmZmVyLCAnaW52YWxpZCBmcmFtZWJ1ZmZlciBvYmplY3QnKVxuICAgICAgICByZXR1cm4gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52LCBibG9jaykge1xuICAgICAgICAgIHZhciBGUkFNRUJVRkZFUiA9IGVudi5saW5rKGZyYW1lYnVmZmVyKVxuICAgICAgICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG4gICAgICAgICAgYmxvY2suc2V0KFxuICAgICAgICAgICAgc2hhcmVkLmZyYW1lYnVmZmVyLFxuICAgICAgICAgICAgJy5uZXh0JyxcbiAgICAgICAgICAgIEZSQU1FQlVGRkVSKVxuICAgICAgICAgIHZhciBDT05URVhUID0gc2hhcmVkLmNvbnRleHRcbiAgICAgICAgICBibG9jay5zZXQoXG4gICAgICAgICAgICBDT05URVhULFxuICAgICAgICAgICAgJy4nICsgU19GUkFNRUJVRkZFUl9XSURUSCxcbiAgICAgICAgICAgIEZSQU1FQlVGRkVSICsgJy53aWR0aCcpXG4gICAgICAgICAgYmxvY2suc2V0KFxuICAgICAgICAgICAgQ09OVEVYVCxcbiAgICAgICAgICAgICcuJyArIFNfRlJBTUVCVUZGRVJfSEVJR0hULFxuICAgICAgICAgICAgRlJBTUVCVUZGRVIgKyAnLmhlaWdodCcpXG4gICAgICAgICAgcmV0dXJuIEZSQU1FQlVGRkVSXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG4gICAgICAgICAgc2NvcGUuc2V0KFxuICAgICAgICAgICAgc2hhcmVkLmZyYW1lYnVmZmVyLFxuICAgICAgICAgICAgJy5uZXh0JyxcbiAgICAgICAgICAgICdudWxsJylcbiAgICAgICAgICB2YXIgQ09OVEVYVCA9IHNoYXJlZC5jb250ZXh0XG4gICAgICAgICAgc2NvcGUuc2V0KFxuICAgICAgICAgICAgQ09OVEVYVCxcbiAgICAgICAgICAgICcuJyArIFNfRlJBTUVCVUZGRVJfV0lEVEgsXG4gICAgICAgICAgICBDT05URVhUICsgJy4nICsgU19EUkFXSU5HQlVGRkVSX1dJRFRIKVxuICAgICAgICAgIHNjb3BlLnNldChcbiAgICAgICAgICAgIENPTlRFWFQsXG4gICAgICAgICAgICAnLicgKyBTX0ZSQU1FQlVGRkVSX0hFSUdIVCxcbiAgICAgICAgICAgIENPTlRFWFQgKyAnLicgKyBTX0RSQVdJTkdCVUZGRVJfSEVJR0hUKVxuICAgICAgICAgIHJldHVybiAnbnVsbCdcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFNfRlJBTUVCVUZGRVIgaW4gZHluYW1pY09wdGlvbnMpIHtcbiAgICAgIHZhciBkeW4gPSBkeW5hbWljT3B0aW9uc1tTX0ZSQU1FQlVGRkVSXVxuICAgICAgcmV0dXJuIGNyZWF0ZUR5bmFtaWNEZWNsKGR5biwgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgdmFyIEZSQU1FQlVGRkVSX0ZVTkMgPSBlbnYuaW52b2tlKHNjb3BlLCBkeW4pXG4gICAgICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG4gICAgICAgIHZhciBGUkFNRUJVRkZFUl9TVEFURSA9IHNoYXJlZC5mcmFtZWJ1ZmZlclxuICAgICAgICB2YXIgRlJBTUVCVUZGRVIgPSBzY29wZS5kZWYoXG4gICAgICAgICAgRlJBTUVCVUZGRVJfU1RBVEUsICcuZ2V0RnJhbWVidWZmZXIoJywgRlJBTUVCVUZGRVJfRlVOQywgJyknKVxuXG4gICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAnIScgKyBGUkFNRUJVRkZFUl9GVU5DICsgJ3x8JyArIEZSQU1FQlVGRkVSLFxuICAgICAgICAgICAgJ2ludmFsaWQgZnJhbWVidWZmZXIgb2JqZWN0JylcbiAgICAgICAgfSlcblxuICAgICAgICBzY29wZS5zZXQoXG4gICAgICAgICAgRlJBTUVCVUZGRVJfU1RBVEUsXG4gICAgICAgICAgJy5uZXh0JyxcbiAgICAgICAgICBGUkFNRUJVRkZFUilcbiAgICAgICAgdmFyIENPTlRFWFQgPSBzaGFyZWQuY29udGV4dFxuICAgICAgICBzY29wZS5zZXQoXG4gICAgICAgICAgQ09OVEVYVCxcbiAgICAgICAgICAnLicgKyBTX0ZSQU1FQlVGRkVSX1dJRFRILFxuICAgICAgICAgIEZSQU1FQlVGRkVSICsgJz8nICsgRlJBTUVCVUZGRVIgKyAnLndpZHRoOicgK1xuICAgICAgICAgIENPTlRFWFQgKyAnLicgKyBTX0RSQVdJTkdCVUZGRVJfV0lEVEgpXG4gICAgICAgIHNjb3BlLnNldChcbiAgICAgICAgICBDT05URVhULFxuICAgICAgICAgICcuJyArIFNfRlJBTUVCVUZGRVJfSEVJR0hULFxuICAgICAgICAgIEZSQU1FQlVGRkVSICtcbiAgICAgICAgICAnPycgKyBGUkFNRUJVRkZFUiArICcuaGVpZ2h0OicgK1xuICAgICAgICAgIENPTlRFWFQgKyAnLicgKyBTX0RSQVdJTkdCVUZGRVJfSEVJR0hUKVxuICAgICAgICByZXR1cm4gRlJBTUVCVUZGRVJcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VWaWV3cG9ydFNjaXNzb3IgKG9wdGlvbnMsIGZyYW1lYnVmZmVyLCBlbnYpIHtcbiAgICB2YXIgc3RhdGljT3B0aW9ucyA9IG9wdGlvbnMuc3RhdGljXG4gICAgdmFyIGR5bmFtaWNPcHRpb25zID0gb3B0aW9ucy5keW5hbWljXG5cbiAgICBmdW5jdGlvbiBwYXJzZUJveCAocGFyYW0pIHtcbiAgICAgIGlmIChwYXJhbSBpbiBzdGF0aWNPcHRpb25zKSB7XG4gICAgICAgIHZhciBib3ggPSBzdGF0aWNPcHRpb25zW3BhcmFtXVxuICAgICAgICBjaGVjayQxLmNvbW1hbmRUeXBlKGJveCwgJ29iamVjdCcsICdpbnZhbGlkICcgKyBwYXJhbSwgZW52LmNvbW1hbmRTdHIpXG5cbiAgICAgICAgdmFyIGlzU3RhdGljID0gdHJ1ZVxuICAgICAgICB2YXIgeCA9IGJveC54IHwgMFxuICAgICAgICB2YXIgeSA9IGJveC55IHwgMFxuICAgICAgICB2YXIgdywgaFxuICAgICAgICBpZiAoJ3dpZHRoJyBpbiBib3gpIHtcbiAgICAgICAgICB3ID0gYm94LndpZHRoIHwgMFxuICAgICAgICAgIGNoZWNrJDEuY29tbWFuZCh3ID49IDAsICdpbnZhbGlkICcgKyBwYXJhbSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXNTdGF0aWMgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmICgnaGVpZ2h0JyBpbiBib3gpIHtcbiAgICAgICAgICBoID0gYm94LmhlaWdodCB8IDBcbiAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoaCA+PSAwLCAnaW52YWxpZCAnICsgcGFyYW0sIGVudi5jb21tYW5kU3RyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzU3RhdGljID0gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgRGVjbGFyYXRpb24oXG4gICAgICAgICAgIWlzU3RhdGljICYmIGZyYW1lYnVmZmVyICYmIGZyYW1lYnVmZmVyLnRoaXNEZXAsXG4gICAgICAgICAgIWlzU3RhdGljICYmIGZyYW1lYnVmZmVyICYmIGZyYW1lYnVmZmVyLmNvbnRleHREZXAsXG4gICAgICAgICAgIWlzU3RhdGljICYmIGZyYW1lYnVmZmVyICYmIGZyYW1lYnVmZmVyLnByb3BEZXAsXG4gICAgICAgICAgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICAgIHZhciBDT05URVhUID0gZW52LnNoYXJlZC5jb250ZXh0XG4gICAgICAgICAgICB2YXIgQk9YX1cgPSB3XG4gICAgICAgICAgICBpZiAoISgnd2lkdGgnIGluIGJveCkpIHtcbiAgICAgICAgICAgICAgQk9YX1cgPSBzY29wZS5kZWYoQ09OVEVYVCwgJy4nLCBTX0ZSQU1FQlVGRkVSX1dJRFRILCAnLScsIHgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgQk9YX0ggPSBoXG4gICAgICAgICAgICBpZiAoISgnaGVpZ2h0JyBpbiBib3gpKSB7XG4gICAgICAgICAgICAgIEJPWF9IID0gc2NvcGUuZGVmKENPTlRFWFQsICcuJywgU19GUkFNRUJVRkZFUl9IRUlHSFQsICctJywgeSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbeCwgeSwgQk9YX1csIEJPWF9IXVxuICAgICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKHBhcmFtIGluIGR5bmFtaWNPcHRpb25zKSB7XG4gICAgICAgIHZhciBkeW5Cb3ggPSBkeW5hbWljT3B0aW9uc1twYXJhbV1cbiAgICAgICAgdmFyIHJlc3VsdCA9IGNyZWF0ZUR5bmFtaWNEZWNsKGR5bkJveCwgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICB2YXIgQk9YID0gZW52Lmludm9rZShzY29wZSwgZHluQm94KVxuXG4gICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICBCT1ggKyAnJiZ0eXBlb2YgJyArIEJPWCArICc9PT1cIm9iamVjdFwiJyxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgJyArIHBhcmFtKVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICB2YXIgQ09OVEVYVCA9IGVudi5zaGFyZWQuY29udGV4dFxuICAgICAgICAgIHZhciBCT1hfWCA9IHNjb3BlLmRlZihCT1gsICcueHwwJylcbiAgICAgICAgICB2YXIgQk9YX1kgPSBzY29wZS5kZWYoQk9YLCAnLnl8MCcpXG4gICAgICAgICAgdmFyIEJPWF9XID0gc2NvcGUuZGVmKFxuICAgICAgICAgICAgJ1wid2lkdGhcIiBpbiAnLCBCT1gsICc/JywgQk9YLCAnLndpZHRofDA6JyxcbiAgICAgICAgICAgICcoJywgQ09OVEVYVCwgJy4nLCBTX0ZSQU1FQlVGRkVSX1dJRFRILCAnLScsIEJPWF9YLCAnKScpXG4gICAgICAgICAgdmFyIEJPWF9IID0gc2NvcGUuZGVmKFxuICAgICAgICAgICAgJ1wiaGVpZ2h0XCIgaW4gJywgQk9YLCAnPycsIEJPWCwgJy5oZWlnaHR8MDonLFxuICAgICAgICAgICAgJygnLCBDT05URVhULCAnLicsIFNfRlJBTUVCVUZGRVJfSEVJR0hULCAnLScsIEJPWF9ZLCAnKScpXG5cbiAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgIEJPWF9XICsgJz49MCYmJyArXG4gICAgICAgICAgICAgIEJPWF9IICsgJz49MCcsXG4gICAgICAgICAgICAgICdpbnZhbGlkICcgKyBwYXJhbSlcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuIFtCT1hfWCwgQk9YX1ksIEJPWF9XLCBCT1hfSF1cbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGZyYW1lYnVmZmVyKSB7XG4gICAgICAgICAgcmVzdWx0LnRoaXNEZXAgPSByZXN1bHQudGhpc0RlcCB8fCBmcmFtZWJ1ZmZlci50aGlzRGVwXG4gICAgICAgICAgcmVzdWx0LmNvbnRleHREZXAgPSByZXN1bHQuY29udGV4dERlcCB8fCBmcmFtZWJ1ZmZlci5jb250ZXh0RGVwXG4gICAgICAgICAgcmVzdWx0LnByb3BEZXAgPSByZXN1bHQucHJvcERlcCB8fCBmcmFtZWJ1ZmZlci5wcm9wRGVwXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSBlbHNlIGlmIChmcmFtZWJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gbmV3IERlY2xhcmF0aW9uKFxuICAgICAgICAgIGZyYW1lYnVmZmVyLnRoaXNEZXAsXG4gICAgICAgICAgZnJhbWVidWZmZXIuY29udGV4dERlcCxcbiAgICAgICAgICBmcmFtZWJ1ZmZlci5wcm9wRGVwLFxuICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgICAgICB2YXIgQ09OVEVYVCA9IGVudi5zaGFyZWQuY29udGV4dFxuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgMCwgMCxcbiAgICAgICAgICAgICAgc2NvcGUuZGVmKENPTlRFWFQsICcuJywgU19GUkFNRUJVRkZFUl9XSURUSCksXG4gICAgICAgICAgICAgIHNjb3BlLmRlZihDT05URVhULCAnLicsIFNfRlJBTUVCVUZGRVJfSEVJR0hUKV1cbiAgICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdmlld3BvcnQgPSBwYXJzZUJveChTX1ZJRVdQT1JUKVxuXG4gICAgaWYgKHZpZXdwb3J0KSB7XG4gICAgICB2YXIgcHJldlZpZXdwb3J0ID0gdmlld3BvcnRcbiAgICAgIHZpZXdwb3J0ID0gbmV3IERlY2xhcmF0aW9uKFxuICAgICAgICB2aWV3cG9ydC50aGlzRGVwLFxuICAgICAgICB2aWV3cG9ydC5jb250ZXh0RGVwLFxuICAgICAgICB2aWV3cG9ydC5wcm9wRGVwLFxuICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgIHZhciBWSUVXUE9SVCA9IHByZXZWaWV3cG9ydC5hcHBlbmQoZW52LCBzY29wZSlcbiAgICAgICAgICB2YXIgQ09OVEVYVCA9IGVudi5zaGFyZWQuY29udGV4dFxuICAgICAgICAgIHNjb3BlLnNldChcbiAgICAgICAgICAgIENPTlRFWFQsXG4gICAgICAgICAgICAnLicgKyBTX1ZJRVdQT1JUX1dJRFRILFxuICAgICAgICAgICAgVklFV1BPUlRbMl0pXG4gICAgICAgICAgc2NvcGUuc2V0KFxuICAgICAgICAgICAgQ09OVEVYVCxcbiAgICAgICAgICAgICcuJyArIFNfVklFV1BPUlRfSEVJR0hULFxuICAgICAgICAgICAgVklFV1BPUlRbM10pXG4gICAgICAgICAgcmV0dXJuIFZJRVdQT1JUXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZpZXdwb3J0OiB2aWV3cG9ydCxcbiAgICAgIHNjaXNzb3JfYm94OiBwYXJzZUJveChTX1NDSVNTT1JfQk9YKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlQXR0cmliTG9jYXRpb25zIChvcHRpb25zLCBhdHRyaWJ1dGVzKSB7XG4gICAgdmFyIHN0YXRpY09wdGlvbnMgPSBvcHRpb25zLnN0YXRpY1xuICAgIHZhciBzdGF0aWNQcm9ncmFtID1cbiAgICAgIHR5cGVvZiBzdGF0aWNPcHRpb25zW1NfRlJBR10gPT09ICdzdHJpbmcnICYmXG4gICAgICB0eXBlb2Ygc3RhdGljT3B0aW9uc1tTX1ZFUlRdID09PSAnc3RyaW5nJ1xuICAgIGlmIChzdGF0aWNQcm9ncmFtKSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMoYXR0cmlidXRlcy5keW5hbWljKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICB2YXIgc3RhdGljQXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuc3RhdGljXG4gICAgICB2YXIgc0F0dHJpYnV0ZXMgPSBPYmplY3Qua2V5cyhzdGF0aWNBdHRyaWJ1dGVzKVxuICAgICAgaWYgKHNBdHRyaWJ1dGVzLmxlbmd0aCA+IDAgJiYgdHlwZW9mIHN0YXRpY0F0dHJpYnV0ZXNbc0F0dHJpYnV0ZXNbMF1dID09PSAnbnVtYmVyJykge1xuICAgICAgICB2YXIgYmluZGluZ3MgPSBbXVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNBdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgY2hlY2skMSh0eXBlb2Ygc3RhdGljQXR0cmlidXRlc1tzQXR0cmlidXRlc1tpXV0gPT09ICdudW1iZXInLCAnbXVzdCBzcGVjaWZ5IGFsbCB2ZXJ0ZXggYXR0cmlidXRlIGxvY2F0aW9ucyB3aGVuIHVzaW5nIHZhb3MnKVxuICAgICAgICAgIGJpbmRpbmdzLnB1c2goW3N0YXRpY0F0dHJpYnV0ZXNbc0F0dHJpYnV0ZXNbaV1dIHwgMCwgc0F0dHJpYnV0ZXNbaV1dKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiaW5kaW5nc1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VQcm9ncmFtIChvcHRpb25zLCBlbnYsIGF0dHJpYkxvY2F0aW9ucykge1xuICAgIHZhciBzdGF0aWNPcHRpb25zID0gb3B0aW9ucy5zdGF0aWNcbiAgICB2YXIgZHluYW1pY09wdGlvbnMgPSBvcHRpb25zLmR5bmFtaWNcblxuICAgIGZ1bmN0aW9uIHBhcnNlU2hhZGVyIChuYW1lKSB7XG4gICAgICBpZiAobmFtZSBpbiBzdGF0aWNPcHRpb25zKSB7XG4gICAgICAgIHZhciBpZCA9IHN0cmluZ1N0b3JlLmlkKHN0YXRpY09wdGlvbnNbbmFtZV0pXG4gICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNoYWRlclN0YXRlLnNoYWRlcihzaGFkZXJUeXBlW25hbWVdLCBpZCwgY2hlY2skMS5ndWVzc0NvbW1hbmQoKSlcbiAgICAgICAgfSlcbiAgICAgICAgdmFyIHJlc3VsdCA9IGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBpZFxuICAgICAgICB9KVxuICAgICAgICByZXN1bHQuaWQgPSBpZFxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICB9IGVsc2UgaWYgKG5hbWUgaW4gZHluYW1pY09wdGlvbnMpIHtcbiAgICAgICAgdmFyIGR5biA9IGR5bmFtaWNPcHRpb25zW25hbWVdXG4gICAgICAgIHJldHVybiBjcmVhdGVEeW5hbWljRGVjbChkeW4sIGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgICAgdmFyIHN0ciA9IGVudi5pbnZva2Uoc2NvcGUsIGR5bilcbiAgICAgICAgICB2YXIgaWQgPSBzY29wZS5kZWYoZW52LnNoYXJlZC5zdHJpbmdzLCAnLmlkKCcsIHN0ciwgJyknKVxuICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2NvcGUoXG4gICAgICAgICAgICAgIGVudi5zaGFyZWQuc2hhZGVyLCAnLnNoYWRlcignLFxuICAgICAgICAgICAgICBzaGFkZXJUeXBlW25hbWVdLCAnLCcsXG4gICAgICAgICAgICAgIGlkLCAnLCcsXG4gICAgICAgICAgICAgIGVudi5jb21tYW5kLCAnKTsnKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIGlkXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHZhciBmcmFnID0gcGFyc2VTaGFkZXIoU19GUkFHKVxuICAgIHZhciB2ZXJ0ID0gcGFyc2VTaGFkZXIoU19WRVJUKVxuXG4gICAgdmFyIHByb2dyYW0gPSBudWxsXG4gICAgdmFyIHByb2dWYXJcbiAgICBpZiAoaXNTdGF0aWMoZnJhZykgJiYgaXNTdGF0aWModmVydCkpIHtcbiAgICAgIHByb2dyYW0gPSBzaGFkZXJTdGF0ZS5wcm9ncmFtKHZlcnQuaWQsIGZyYWcuaWQsIG51bGwsIGF0dHJpYkxvY2F0aW9ucylcbiAgICAgIHByb2dWYXIgPSBjcmVhdGVTdGF0aWNEZWNsKGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgIHJldHVybiBlbnYubGluayhwcm9ncmFtKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvZ1ZhciA9IG5ldyBEZWNsYXJhdGlvbihcbiAgICAgICAgKGZyYWcgJiYgZnJhZy50aGlzRGVwKSB8fCAodmVydCAmJiB2ZXJ0LnRoaXNEZXApLFxuICAgICAgICAoZnJhZyAmJiBmcmFnLmNvbnRleHREZXApIHx8ICh2ZXJ0ICYmIHZlcnQuY29udGV4dERlcCksXG4gICAgICAgIChmcmFnICYmIGZyYWcucHJvcERlcCkgfHwgKHZlcnQgJiYgdmVydC5wcm9wRGVwKSxcbiAgICAgICAgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICB2YXIgU0hBREVSX1NUQVRFID0gZW52LnNoYXJlZC5zaGFkZXJcbiAgICAgICAgICB2YXIgZnJhZ0lkXG4gICAgICAgICAgaWYgKGZyYWcpIHtcbiAgICAgICAgICAgIGZyYWdJZCA9IGZyYWcuYXBwZW5kKGVudiwgc2NvcGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZyYWdJZCA9IHNjb3BlLmRlZihTSEFERVJfU1RBVEUsICcuJywgU19GUkFHKVxuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgdmVydElkXG4gICAgICAgICAgaWYgKHZlcnQpIHtcbiAgICAgICAgICAgIHZlcnRJZCA9IHZlcnQuYXBwZW5kKGVudiwgc2NvcGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZlcnRJZCA9IHNjb3BlLmRlZihTSEFERVJfU1RBVEUsICcuJywgU19WRVJUKVxuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgcHJvZ0RlZiA9IFNIQURFUl9TVEFURSArICcucHJvZ3JhbSgnICsgdmVydElkICsgJywnICsgZnJhZ0lkXG4gICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBwcm9nRGVmICs9ICcsJyArIGVudi5jb21tYW5kXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXR1cm4gc2NvcGUuZGVmKHByb2dEZWYgKyAnKScpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZyYWc6IGZyYWcsXG4gICAgICB2ZXJ0OiB2ZXJ0LFxuICAgICAgcHJvZ1ZhcjogcHJvZ1ZhcixcbiAgICAgIHByb2dyYW06IHByb2dyYW1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZURyYXcgKG9wdGlvbnMsIGVudikge1xuICAgIHZhciBzdGF0aWNPcHRpb25zID0gb3B0aW9ucy5zdGF0aWNcbiAgICB2YXIgZHluYW1pY09wdGlvbnMgPSBvcHRpb25zLmR5bmFtaWNcblxuICAgIGZ1bmN0aW9uIHBhcnNlRWxlbWVudHMgKCkge1xuICAgICAgaWYgKFNfRUxFTUVOVFMgaW4gc3RhdGljT3B0aW9ucykge1xuICAgICAgICB2YXIgZWxlbWVudHMgPSBzdGF0aWNPcHRpb25zW1NfRUxFTUVOVFNdXG4gICAgICAgIGlmIChpc0J1ZmZlckFyZ3MoZWxlbWVudHMpKSB7XG4gICAgICAgICAgZWxlbWVudHMgPSBlbGVtZW50U3RhdGUuZ2V0RWxlbWVudHMoZWxlbWVudFN0YXRlLmNyZWF0ZShlbGVtZW50cywgdHJ1ZSkpXG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudHMpIHtcbiAgICAgICAgICBlbGVtZW50cyA9IGVsZW1lbnRTdGF0ZS5nZXRFbGVtZW50cyhlbGVtZW50cylcbiAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoZWxlbWVudHMsICdpbnZhbGlkIGVsZW1lbnRzJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlc3VsdCA9IGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICBpZiAoZWxlbWVudHMpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBlbnYubGluayhlbGVtZW50cylcbiAgICAgICAgICAgIGVudi5FTEVNRU5UUyA9IHJlc3VsdFxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgIH1cbiAgICAgICAgICBlbnYuRUxFTUVOVFMgPSBudWxsXG4gICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfSlcbiAgICAgICAgcmVzdWx0LnZhbHVlID0gZWxlbWVudHNcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSBlbHNlIGlmIChTX0VMRU1FTlRTIGluIGR5bmFtaWNPcHRpb25zKSB7XG4gICAgICAgIHZhciBkeW4gPSBkeW5hbWljT3B0aW9uc1tTX0VMRU1FTlRTXVxuICAgICAgICByZXR1cm4gY3JlYXRlRHluYW1pY0RlY2woZHluLCBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG5cbiAgICAgICAgICB2YXIgSVNfQlVGRkVSX0FSR1MgPSBzaGFyZWQuaXNCdWZmZXJBcmdzXG4gICAgICAgICAgdmFyIEVMRU1FTlRfU1RBVEUgPSBzaGFyZWQuZWxlbWVudHNcblxuICAgICAgICAgIHZhciBlbGVtZW50RGVmbiA9IGVudi5pbnZva2Uoc2NvcGUsIGR5bilcbiAgICAgICAgICB2YXIgZWxlbWVudHMgPSBzY29wZS5kZWYoJ251bGwnKVxuICAgICAgICAgIHZhciBlbGVtZW50U3RyZWFtID0gc2NvcGUuZGVmKElTX0JVRkZFUl9BUkdTLCAnKCcsIGVsZW1lbnREZWZuLCAnKScpXG5cbiAgICAgICAgICB2YXIgaWZ0ZSA9IGVudi5jb25kKGVsZW1lbnRTdHJlYW0pXG4gICAgICAgICAgICAudGhlbihlbGVtZW50cywgJz0nLCBFTEVNRU5UX1NUQVRFLCAnLmNyZWF0ZVN0cmVhbSgnLCBlbGVtZW50RGVmbiwgJyk7JylcbiAgICAgICAgICAgIC5lbHNlKGVsZW1lbnRzLCAnPScsIEVMRU1FTlRfU1RBVEUsICcuZ2V0RWxlbWVudHMoJywgZWxlbWVudERlZm4sICcpOycpXG5cbiAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVudi5hc3NlcnQoaWZ0ZS5lbHNlLFxuICAgICAgICAgICAgICAnIScgKyBlbGVtZW50RGVmbiArICd8fCcgKyBlbGVtZW50cyxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgZWxlbWVudHMnKVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBzY29wZS5lbnRyeShpZnRlKVxuICAgICAgICAgIHNjb3BlLmV4aXQoXG4gICAgICAgICAgICBlbnYuY29uZChlbGVtZW50U3RyZWFtKVxuICAgICAgICAgICAgICAudGhlbihFTEVNRU5UX1NUQVRFLCAnLmRlc3Ryb3lTdHJlYW0oJywgZWxlbWVudHMsICcpOycpKVxuXG4gICAgICAgICAgZW52LkVMRU1FTlRTID0gZWxlbWVudHNcblxuICAgICAgICAgIHJldHVybiBlbGVtZW50c1xuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHZhciBlbGVtZW50cyA9IHBhcnNlRWxlbWVudHMoKVxuXG4gICAgZnVuY3Rpb24gcGFyc2VQcmltaXRpdmUgKCkge1xuICAgICAgaWYgKFNfUFJJTUlUSVZFIGluIHN0YXRpY09wdGlvbnMpIHtcbiAgICAgICAgdmFyIHByaW1pdGl2ZSA9IHN0YXRpY09wdGlvbnNbU19QUklNSVRJVkVdXG4gICAgICAgIGNoZWNrJDEuY29tbWFuZFBhcmFtZXRlcihwcmltaXRpdmUsIHByaW1UeXBlcywgJ2ludmFsaWQgcHJpbWl0dmUnLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICByZXR1cm4gcHJpbVR5cGVzW3ByaW1pdGl2ZV1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoU19QUklNSVRJVkUgaW4gZHluYW1pY09wdGlvbnMpIHtcbiAgICAgICAgdmFyIGR5blByaW1pdGl2ZSA9IGR5bmFtaWNPcHRpb25zW1NfUFJJTUlUSVZFXVxuICAgICAgICByZXR1cm4gY3JlYXRlRHluYW1pY0RlY2woZHluUHJpbWl0aXZlLCBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgIHZhciBQUklNX1RZUEVTID0gZW52LmNvbnN0YW50cy5wcmltVHlwZXNcbiAgICAgICAgICB2YXIgcHJpbSA9IGVudi5pbnZva2Uoc2NvcGUsIGR5blByaW1pdGl2ZSlcbiAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgIHByaW0gKyAnIGluICcgKyBQUklNX1RZUEVTLFxuICAgICAgICAgICAgICAnaW52YWxpZCBwcmltaXRpdmUsIG11c3QgYmUgb25lIG9mICcgKyBPYmplY3Qua2V5cyhwcmltVHlwZXMpKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIHNjb3BlLmRlZihQUklNX1RZUEVTLCAnWycsIHByaW0sICddJylcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudHMpIHtcbiAgICAgICAgaWYgKGlzU3RhdGljKGVsZW1lbnRzKSkge1xuICAgICAgICAgIGlmIChlbGVtZW50cy52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlLmRlZihlbnYuRUxFTUVOVFMsICcucHJpbVR5cGUnKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXR1cm4gR0xfVFJJQU5HTEVTJDFcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBuZXcgRGVjbGFyYXRpb24oXG4gICAgICAgICAgICBlbGVtZW50cy50aGlzRGVwLFxuICAgICAgICAgICAgZWxlbWVudHMuY29udGV4dERlcCxcbiAgICAgICAgICAgIGVsZW1lbnRzLnByb3BEZXAsXG4gICAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgICAgICB2YXIgZWxlbWVudHMgPSBlbnYuRUxFTUVOVFNcbiAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlLmRlZihlbGVtZW50cywgJz8nLCBlbGVtZW50cywgJy5wcmltVHlwZTonLCBHTF9UUklBTkdMRVMkMSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VQYXJhbSAocGFyYW0sIGlzT2Zmc2V0KSB7XG4gICAgICBpZiAocGFyYW0gaW4gc3RhdGljT3B0aW9ucykge1xuICAgICAgICB2YXIgdmFsdWUgPSBzdGF0aWNPcHRpb25zW3BhcmFtXSB8IDBcbiAgICAgICAgY2hlY2skMS5jb21tYW5kKCFpc09mZnNldCB8fCB2YWx1ZSA+PSAwLCAnaW52YWxpZCAnICsgcGFyYW0sIGVudi5jb21tYW5kU3RyKVxuICAgICAgICByZXR1cm4gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgIGlmIChpc09mZnNldCkge1xuICAgICAgICAgICAgZW52Lk9GRlNFVCA9IHZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChwYXJhbSBpbiBkeW5hbWljT3B0aW9ucykge1xuICAgICAgICB2YXIgZHluVmFsdWUgPSBkeW5hbWljT3B0aW9uc1twYXJhbV1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR5bmFtaWNEZWNsKGR5blZhbHVlLCBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSBlbnYuaW52b2tlKHNjb3BlLCBkeW5WYWx1ZSlcbiAgICAgICAgICBpZiAoaXNPZmZzZXQpIHtcbiAgICAgICAgICAgIGVudi5PRkZTRVQgPSByZXN1bHRcbiAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgIHJlc3VsdCArICc+PTAnLFxuICAgICAgICAgICAgICAgICdpbnZhbGlkICcgKyBwYXJhbSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoaXNPZmZzZXQgJiYgZWxlbWVudHMpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICBlbnYuT0ZGU0VUID0gJzAnXG4gICAgICAgICAgcmV0dXJuIDBcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgdmFyIE9GRlNFVCA9IHBhcnNlUGFyYW0oU19PRkZTRVQsIHRydWUpXG5cbiAgICBmdW5jdGlvbiBwYXJzZVZlcnRDb3VudCAoKSB7XG4gICAgICBpZiAoU19DT1VOVCBpbiBzdGF0aWNPcHRpb25zKSB7XG4gICAgICAgIHZhciBjb3VudCA9IHN0YXRpY09wdGlvbnNbU19DT1VOVF0gfCAwXG4gICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICB0eXBlb2YgY291bnQgPT09ICdudW1iZXInICYmIGNvdW50ID49IDAsICdpbnZhbGlkIHZlcnRleCBjb3VudCcsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICByZXR1cm4gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvdW50XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKFNfQ09VTlQgaW4gZHluYW1pY09wdGlvbnMpIHtcbiAgICAgICAgdmFyIGR5bkNvdW50ID0gZHluYW1pY09wdGlvbnNbU19DT1VOVF1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR5bmFtaWNEZWNsKGR5bkNvdW50LCBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSBlbnYuaW52b2tlKHNjb3BlLCBkeW5Db3VudClcbiAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgICd0eXBlb2YgJyArIHJlc3VsdCArICc9PT1cIm51bWJlclwiJiYnICtcbiAgICAgICAgICAgICAgcmVzdWx0ICsgJz49MCYmJyArXG4gICAgICAgICAgICAgIHJlc3VsdCArICc9PT0oJyArIHJlc3VsdCArICd8MCknLFxuICAgICAgICAgICAgICAnaW52YWxpZCB2ZXJ0ZXggY291bnQnKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChlbGVtZW50cykge1xuICAgICAgICBpZiAoaXNTdGF0aWMoZWxlbWVudHMpKSB7XG4gICAgICAgICAgaWYgKGVsZW1lbnRzKSB7XG4gICAgICAgICAgICBpZiAoT0ZGU0VUKSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgRGVjbGFyYXRpb24oXG4gICAgICAgICAgICAgICAgT0ZGU0VULnRoaXNEZXAsXG4gICAgICAgICAgICAgICAgT0ZGU0VULmNvbnRleHREZXAsXG4gICAgICAgICAgICAgICAgT0ZGU0VULnByb3BEZXAsXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBzY29wZS5kZWYoXG4gICAgICAgICAgICAgICAgICAgIGVudi5FTEVNRU5UUywgJy52ZXJ0Q291bnQtJywgZW52Lk9GRlNFVClcblxuICAgICAgICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICsgJz49MCcsXG4gICAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgdmVydGV4IG9mZnNldC9lbGVtZW50IGJ1ZmZlciB0b28gc21hbGwnKVxuICAgICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY29wZS5kZWYoZW52LkVMRU1FTlRTLCAnLnZlcnRDb3VudCcpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBjcmVhdGVTdGF0aWNEZWNsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5NSVNTSU5HID0gdHJ1ZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHZhcmlhYmxlID0gbmV3IERlY2xhcmF0aW9uKFxuICAgICAgICAgICAgZWxlbWVudHMudGhpc0RlcCB8fCBPRkZTRVQudGhpc0RlcCxcbiAgICAgICAgICAgIGVsZW1lbnRzLmNvbnRleHREZXAgfHwgT0ZGU0VULmNvbnRleHREZXAsXG4gICAgICAgICAgICBlbGVtZW50cy5wcm9wRGVwIHx8IE9GRlNFVC5wcm9wRGVwLFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICAgICAgdmFyIGVsZW1lbnRzID0gZW52LkVMRU1FTlRTXG4gICAgICAgICAgICAgIGlmIChlbnYuT0ZGU0VUKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlLmRlZihlbGVtZW50cywgJz8nLCBlbGVtZW50cywgJy52ZXJ0Q291bnQtJyxcbiAgICAgICAgICAgICAgICAgIGVudi5PRkZTRVQsICc6LTEnKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBzY29wZS5kZWYoZWxlbWVudHMsICc/JywgZWxlbWVudHMsICcudmVydENvdW50Oi0xJylcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXJpYWJsZS5EWU5BTUlDID0gdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIHZhcmlhYmxlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVsZW1lbnRzOiBlbGVtZW50cyxcbiAgICAgIHByaW1pdGl2ZTogcGFyc2VQcmltaXRpdmUoKSxcbiAgICAgIGNvdW50OiBwYXJzZVZlcnRDb3VudCgpLFxuICAgICAgaW5zdGFuY2VzOiBwYXJzZVBhcmFtKFNfSU5TVEFOQ0VTLCBmYWxzZSksXG4gICAgICBvZmZzZXQ6IE9GRlNFVFxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlR0xTdGF0ZSAob3B0aW9ucywgZW52KSB7XG4gICAgdmFyIHN0YXRpY09wdGlvbnMgPSBvcHRpb25zLnN0YXRpY1xuICAgIHZhciBkeW5hbWljT3B0aW9ucyA9IG9wdGlvbnMuZHluYW1pY1xuXG4gICAgdmFyIFNUQVRFID0ge31cblxuICAgIEdMX1NUQVRFX05BTUVTLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgIHZhciBwYXJhbSA9IHByb3BOYW1lKHByb3ApXG5cbiAgICAgIGZ1bmN0aW9uIHBhcnNlUGFyYW0gKHBhcnNlU3RhdGljLCBwYXJzZUR5bmFtaWMpIHtcbiAgICAgICAgaWYgKHByb3AgaW4gc3RhdGljT3B0aW9ucykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHBhcnNlU3RhdGljKHN0YXRpY09wdGlvbnNbcHJvcF0pXG4gICAgICAgICAgU1RBVEVbcGFyYW1dID0gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2UgaWYgKHByb3AgaW4gZHluYW1pY09wdGlvbnMpIHtcbiAgICAgICAgICB2YXIgZHluID0gZHluYW1pY09wdGlvbnNbcHJvcF1cbiAgICAgICAgICBTVEFURVtwYXJhbV0gPSBjcmVhdGVEeW5hbWljRGVjbChkeW4sIGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VEeW5hbWljKGVudiwgc2NvcGUsIGVudi5pbnZva2Uoc2NvcGUsIGR5bikpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHByb3ApIHtcbiAgICAgICAgY2FzZSBTX0NVTExfRU5BQkxFOlxuICAgICAgICBjYXNlIFNfQkxFTkRfRU5BQkxFOlxuICAgICAgICBjYXNlIFNfRElUSEVSOlxuICAgICAgICBjYXNlIFNfU1RFTkNJTF9FTkFCTEU6XG4gICAgICAgIGNhc2UgU19ERVBUSF9FTkFCTEU6XG4gICAgICAgIGNhc2UgU19TQ0lTU09SX0VOQUJMRTpcbiAgICAgICAgY2FzZSBTX1BPTFlHT05fT0ZGU0VUX0VOQUJMRTpcbiAgICAgICAgY2FzZSBTX1NBTVBMRV9BTFBIQTpcbiAgICAgICAgY2FzZSBTX1NBTVBMRV9FTkFCTEU6XG4gICAgICAgIGNhc2UgU19ERVBUSF9NQVNLOlxuICAgICAgICAgIHJldHVybiBwYXJzZVBhcmFtKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFR5cGUodmFsdWUsICdib29sZWFuJywgcHJvcCwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgJ3R5cGVvZiAnICsgdmFsdWUgKyAnPT09XCJib29sZWFuXCInLFxuICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgZmxhZyAnICsgcHJvcCwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgfSlcblxuICAgICAgICBjYXNlIFNfREVQVEhfRlVOQzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VQYXJhbShcbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRQYXJhbWV0ZXIodmFsdWUsIGNvbXBhcmVGdW5jcywgJ2ludmFsaWQgJyArIHByb3AsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZUZ1bmNzW3ZhbHVlXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICB2YXIgQ09NUEFSRV9GVU5DUyA9IGVudi5jb25zdGFudHMuY29tcGFyZUZ1bmNzXG4gICAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgICAgICB2YWx1ZSArICcgaW4gJyArIENPTVBBUkVfRlVOQ1MsXG4gICAgICAgICAgICAgICAgICAnaW52YWxpZCAnICsgcHJvcCArICcsIG11c3QgYmUgb25lIG9mICcgKyBPYmplY3Qua2V5cyhjb21wYXJlRnVuY3MpKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXR1cm4gc2NvcGUuZGVmKENPTVBBUkVfRlVOQ1MsICdbJywgdmFsdWUsICddJylcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX0RFUFRIX1JBTkdFOlxuICAgICAgICAgIHJldHVybiBwYXJzZVBhcmFtKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICBpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICB2YWx1ZS5sZW5ndGggPT09IDIgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWVbMF0gPT09ICdudW1iZXInICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlWzFdID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgICAgIHZhbHVlWzBdIDw9IHZhbHVlWzFdLFxuICAgICAgICAgICAgICAgICdkZXB0aCByYW5nZSBpcyAyZCBhcnJheScsXG4gICAgICAgICAgICAgICAgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgZW52LnNoYXJlZC5pc0FycmF5TGlrZSArICcoJyArIHZhbHVlICsgJykmJicgK1xuICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnLmxlbmd0aD09PTImJicgK1xuICAgICAgICAgICAgICAgICAgJ3R5cGVvZiAnICsgdmFsdWUgKyAnWzBdPT09XCJudW1iZXJcIiYmJyArXG4gICAgICAgICAgICAgICAgICAndHlwZW9mICcgKyB2YWx1ZSArICdbMV09PT1cIm51bWJlclwiJiYnICtcbiAgICAgICAgICAgICAgICAgIHZhbHVlICsgJ1swXTw9JyArIHZhbHVlICsgJ1sxXScsXG4gICAgICAgICAgICAgICAgICAnZGVwdGggcmFuZ2UgbXVzdCBiZSBhIDJkIGFycmF5JylcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICB2YXIgWl9ORUFSID0gc2NvcGUuZGVmKCcrJywgdmFsdWUsICdbMF0nKVxuICAgICAgICAgICAgICB2YXIgWl9GQVIgPSBzY29wZS5kZWYoJysnLCB2YWx1ZSwgJ1sxXScpXG4gICAgICAgICAgICAgIHJldHVybiBbWl9ORUFSLCBaX0ZBUl1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX0JMRU5EX0ZVTkM6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlUGFyYW0oXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kVHlwZSh2YWx1ZSwgJ29iamVjdCcsICdibGVuZC5mdW5jJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHZhciBzcmNSR0IgPSAoJ3NyY1JHQicgaW4gdmFsdWUgPyB2YWx1ZS5zcmNSR0IgOiB2YWx1ZS5zcmMpXG4gICAgICAgICAgICAgIHZhciBzcmNBbHBoYSA9ICgnc3JjQWxwaGEnIGluIHZhbHVlID8gdmFsdWUuc3JjQWxwaGEgOiB2YWx1ZS5zcmMpXG4gICAgICAgICAgICAgIHZhciBkc3RSR0IgPSAoJ2RzdFJHQicgaW4gdmFsdWUgPyB2YWx1ZS5kc3RSR0IgOiB2YWx1ZS5kc3QpXG4gICAgICAgICAgICAgIHZhciBkc3RBbHBoYSA9ICgnZHN0QWxwaGEnIGluIHZhbHVlID8gdmFsdWUuZHN0QWxwaGEgOiB2YWx1ZS5kc3QpXG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFBhcmFtZXRlcihzcmNSR0IsIGJsZW5kRnVuY3MsIHBhcmFtICsgJy5zcmNSR0InLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kUGFyYW1ldGVyKHNyY0FscGhhLCBibGVuZEZ1bmNzLCBwYXJhbSArICcuc3JjQWxwaGEnLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kUGFyYW1ldGVyKGRzdFJHQiwgYmxlbmRGdW5jcywgcGFyYW0gKyAnLmRzdFJHQicsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRQYXJhbWV0ZXIoZHN0QWxwaGEsIGJsZW5kRnVuY3MsIHBhcmFtICsgJy5kc3RBbHBoYScsIGVudi5jb21tYW5kU3RyKVxuXG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICAoaW52YWxpZEJsZW5kQ29tYmluYXRpb25zLmluZGV4T2Yoc3JjUkdCICsgJywgJyArIGRzdFJHQikgPT09IC0xKSxcbiAgICAgICAgICAgICAgICAndW5hbGxvd2VkIGJsZW5kaW5nIGNvbWJpbmF0aW9uIChzcmNSR0IsIGRzdFJHQikgPSAoJyArIHNyY1JHQiArICcsICcgKyBkc3RSR0IgKyAnKScsIGVudi5jb21tYW5kU3RyKVxuXG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgYmxlbmRGdW5jc1tzcmNSR0JdLFxuICAgICAgICAgICAgICAgIGJsZW5kRnVuY3NbZHN0UkdCXSxcbiAgICAgICAgICAgICAgICBibGVuZEZ1bmNzW3NyY0FscGhhXSxcbiAgICAgICAgICAgICAgICBibGVuZEZ1bmNzW2RzdEFscGhhXVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVudiwgc2NvcGUsIHZhbHVlKSB7XG4gICAgICAgICAgICAgIHZhciBCTEVORF9GVU5DUyA9IGVudi5jb25zdGFudHMuYmxlbmRGdW5jc1xuXG4gICAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgICAgICB2YWx1ZSArICcmJnR5cGVvZiAnICsgdmFsdWUgKyAnPT09XCJvYmplY3RcIicsXG4gICAgICAgICAgICAgICAgICAnaW52YWxpZCBibGVuZCBmdW5jLCBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZCAocHJlZml4LCBzdWZmaXgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZnVuYyA9IHNjb3BlLmRlZihcbiAgICAgICAgICAgICAgICAgICdcIicsIHByZWZpeCwgc3VmZml4LCAnXCIgaW4gJywgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAnPycsIHZhbHVlLCAnLicsIHByZWZpeCwgc3VmZml4LFxuICAgICAgICAgICAgICAgICAgJzonLCB2YWx1ZSwgJy4nLCBwcmVmaXgpXG5cbiAgICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgICAgICAgIGZ1bmMgKyAnIGluICcgKyBCTEVORF9GVU5DUyxcbiAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgJyArIHByb3AgKyAnLicgKyBwcmVmaXggKyBzdWZmaXggKyAnLCBtdXN0IGJlIG9uZSBvZiAnICsgT2JqZWN0LmtleXMoYmxlbmRGdW5jcykpXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgc3JjUkdCID0gcmVhZCgnc3JjJywgJ1JHQicpXG4gICAgICAgICAgICAgIHZhciBkc3RSR0IgPSByZWFkKCdkc3QnLCAnUkdCJylcblxuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgSU5WQUxJRF9CTEVORF9DT01CSU5BVElPTlMgPSBlbnYuY29uc3RhbnRzLmludmFsaWRCbGVuZENvbWJpbmF0aW9uc1xuXG4gICAgICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgICAgIElOVkFMSURfQkxFTkRfQ09NQklOQVRJT05TICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICcuaW5kZXhPZignICsgc3JjUkdCICsgJytcIiwgXCIrJyArIGRzdFJHQiArICcpID09PSAtMSAnLFxuICAgICAgICAgICAgICAgICAgJ3VuYWxsb3dlZCBibGVuZGluZyBjb21iaW5hdGlvbiBmb3IgKHNyY1JHQiwgZHN0UkdCKSdcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgdmFyIFNSQ19SR0IgPSBzY29wZS5kZWYoQkxFTkRfRlVOQ1MsICdbJywgc3JjUkdCLCAnXScpXG4gICAgICAgICAgICAgIHZhciBTUkNfQUxQSEEgPSBzY29wZS5kZWYoQkxFTkRfRlVOQ1MsICdbJywgcmVhZCgnc3JjJywgJ0FscGhhJyksICddJylcbiAgICAgICAgICAgICAgdmFyIERTVF9SR0IgPSBzY29wZS5kZWYoQkxFTkRfRlVOQ1MsICdbJywgZHN0UkdCLCAnXScpXG4gICAgICAgICAgICAgIHZhciBEU1RfQUxQSEEgPSBzY29wZS5kZWYoQkxFTkRfRlVOQ1MsICdbJywgcmVhZCgnZHN0JywgJ0FscGhhJyksICddJylcblxuICAgICAgICAgICAgICByZXR1cm4gW1NSQ19SR0IsIERTVF9SR0IsIFNSQ19BTFBIQSwgRFNUX0FMUEhBXVxuICAgICAgICAgICAgfSlcblxuICAgICAgICBjYXNlIFNfQkxFTkRfRVFVQVRJT046XG4gICAgICAgICAgcmV0dXJuIHBhcnNlUGFyYW0oXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRQYXJhbWV0ZXIodmFsdWUsIGJsZW5kRXF1YXRpb25zLCAnaW52YWxpZCAnICsgcHJvcCwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgIGJsZW5kRXF1YXRpb25zW3ZhbHVlXSxcbiAgICAgICAgICAgICAgICAgIGJsZW5kRXF1YXRpb25zW3ZhbHVlXVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kUGFyYW1ldGVyKFxuICAgICAgICAgICAgICAgICAgdmFsdWUucmdiLCBibGVuZEVxdWF0aW9ucywgcHJvcCArICcucmdiJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kUGFyYW1ldGVyKFxuICAgICAgICAgICAgICAgICAgdmFsdWUuYWxwaGEsIGJsZW5kRXF1YXRpb25zLCBwcm9wICsgJy5hbHBoYScsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICBibGVuZEVxdWF0aW9uc1t2YWx1ZS5yZ2JdLFxuICAgICAgICAgICAgICAgICAgYmxlbmRFcXVhdGlvbnNbdmFsdWUuYWxwaGFdXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFJhaXNlKCdpbnZhbGlkIGJsZW5kLmVxdWF0aW9uJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgdmFyIEJMRU5EX0VRVUFUSU9OUyA9IGVudi5jb25zdGFudHMuYmxlbmRFcXVhdGlvbnNcblxuICAgICAgICAgICAgICB2YXIgUkdCID0gc2NvcGUuZGVmKClcbiAgICAgICAgICAgICAgdmFyIEFMUEhBID0gc2NvcGUuZGVmKClcblxuICAgICAgICAgICAgICB2YXIgaWZ0ZSA9IGVudi5jb25kKCd0eXBlb2YgJywgdmFsdWUsICc9PT1cInN0cmluZ1wiJylcblxuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBjaGVja1Byb3AgKGJsb2NrLCBuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgZW52LmFzc2VydChibG9jayxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnIGluICcgKyBCTEVORF9FUVVBVElPTlMsXG4gICAgICAgICAgICAgICAgICAgICdpbnZhbGlkICcgKyBuYW1lICsgJywgbXVzdCBiZSBvbmUgb2YgJyArIE9iamVjdC5rZXlzKGJsZW5kRXF1YXRpb25zKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2hlY2tQcm9wKGlmdGUudGhlbiwgcHJvcCwgdmFsdWUpXG5cbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KGlmdGUuZWxzZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlICsgJyYmdHlwZW9mICcgKyB2YWx1ZSArICc9PT1cIm9iamVjdFwiJyxcbiAgICAgICAgICAgICAgICAgICdpbnZhbGlkICcgKyBwcm9wKVxuICAgICAgICAgICAgICAgIGNoZWNrUHJvcChpZnRlLmVsc2UsIHByb3AgKyAnLnJnYicsIHZhbHVlICsgJy5yZ2InKVxuICAgICAgICAgICAgICAgIGNoZWNrUHJvcChpZnRlLmVsc2UsIHByb3AgKyAnLmFscGhhJywgdmFsdWUgKyAnLmFscGhhJylcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICBpZnRlLnRoZW4oXG4gICAgICAgICAgICAgICAgUkdCLCAnPScsIEFMUEhBLCAnPScsIEJMRU5EX0VRVUFUSU9OUywgJ1snLCB2YWx1ZSwgJ107JylcbiAgICAgICAgICAgICAgaWZ0ZS5lbHNlKFxuICAgICAgICAgICAgICAgIFJHQiwgJz0nLCBCTEVORF9FUVVBVElPTlMsICdbJywgdmFsdWUsICcucmdiXTsnLFxuICAgICAgICAgICAgICAgIEFMUEhBLCAnPScsIEJMRU5EX0VRVUFUSU9OUywgJ1snLCB2YWx1ZSwgJy5hbHBoYV07JylcblxuICAgICAgICAgICAgICBzY29wZShpZnRlKVxuXG4gICAgICAgICAgICAgIHJldHVybiBbUkdCLCBBTFBIQV1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX0JMRU5EX0NPTE9SOlxuICAgICAgICAgIHJldHVybiBwYXJzZVBhcmFtKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICBpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICB2YWx1ZS5sZW5ndGggPT09IDQsXG4gICAgICAgICAgICAgICAgJ2JsZW5kLmNvbG9yIG11c3QgYmUgYSA0ZCBhcnJheScsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICByZXR1cm4gbG9vcCg0LCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICAgIHJldHVybiArdmFsdWVbaV1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgICAgIGVudi5zaGFyZWQuaXNBcnJheUxpa2UgKyAnKCcgKyB2YWx1ZSArICcpJiYnICtcbiAgICAgICAgICAgICAgICAgIHZhbHVlICsgJy5sZW5ndGg9PT00JyxcbiAgICAgICAgICAgICAgICAgICdibGVuZC5jb2xvciBtdXN0IGJlIGEgNGQgYXJyYXknKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXR1cm4gbG9vcCg0LCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY29wZS5kZWYoJysnLCB2YWx1ZSwgJ1snLCBpLCAnXScpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIGNhc2UgU19TVEVOQ0lMX01BU0s6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlUGFyYW0oXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kVHlwZSh2YWx1ZSwgJ251bWJlcicsIHBhcmFtLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlIHwgMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgJ3R5cGVvZiAnICsgdmFsdWUgKyAnPT09XCJudW1iZXJcIicsXG4gICAgICAgICAgICAgICAgICAnaW52YWxpZCBzdGVuY2lsLm1hc2snKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXR1cm4gc2NvcGUuZGVmKHZhbHVlLCAnfDAnKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICBjYXNlIFNfU1RFTkNJTF9GVU5DOlxuICAgICAgICAgIHJldHVybiBwYXJzZVBhcmFtKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFR5cGUodmFsdWUsICdvYmplY3QnLCBwYXJhbSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHZhciBjbXAgPSB2YWx1ZS5jbXAgfHwgJ2tlZXAnXG4gICAgICAgICAgICAgIHZhciByZWYgPSB2YWx1ZS5yZWYgfHwgMFxuICAgICAgICAgICAgICB2YXIgbWFzayA9ICdtYXNrJyBpbiB2YWx1ZSA/IHZhbHVlLm1hc2sgOiAtMVxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRQYXJhbWV0ZXIoY21wLCBjb21wYXJlRnVuY3MsIHByb3AgKyAnLmNtcCcsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRUeXBlKHJlZiwgJ251bWJlcicsIHByb3AgKyAnLnJlZicsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRUeXBlKG1hc2ssICdudW1iZXInLCBwcm9wICsgJy5tYXNrJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgY29tcGFyZUZ1bmNzW2NtcF0sXG4gICAgICAgICAgICAgICAgcmVmLFxuICAgICAgICAgICAgICAgIG1hc2tcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICB2YXIgQ09NUEFSRV9GVU5DUyA9IGVudi5jb25zdGFudHMuY29tcGFyZUZ1bmNzXG4gICAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFzc2VydCAoKSB7XG4gICAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cywgJycpLFxuICAgICAgICAgICAgICAgICAgICAnaW52YWxpZCBzdGVuY2lsLmZ1bmMnKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3NlcnQodmFsdWUgKyAnJiZ0eXBlb2YgJywgdmFsdWUsICc9PT1cIm9iamVjdFwiJylcbiAgICAgICAgICAgICAgICBhc3NlcnQoJyEoXCJjbXBcIiBpbiAnLCB2YWx1ZSwgJyl8fCgnLFxuICAgICAgICAgICAgICAgICAgdmFsdWUsICcuY21wIGluICcsIENPTVBBUkVfRlVOQ1MsICcpJylcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgdmFyIGNtcCA9IHNjb3BlLmRlZihcbiAgICAgICAgICAgICAgICAnXCJjbXBcIiBpbiAnLCB2YWx1ZSxcbiAgICAgICAgICAgICAgICAnPycsIENPTVBBUkVfRlVOQ1MsICdbJywgdmFsdWUsICcuY21wXScsXG4gICAgICAgICAgICAgICAgJzonLCBHTF9LRUVQKVxuICAgICAgICAgICAgICB2YXIgcmVmID0gc2NvcGUuZGVmKHZhbHVlLCAnLnJlZnwwJylcbiAgICAgICAgICAgICAgdmFyIG1hc2sgPSBzY29wZS5kZWYoXG4gICAgICAgICAgICAgICAgJ1wibWFza1wiIGluICcsIHZhbHVlLFxuICAgICAgICAgICAgICAgICc/JywgdmFsdWUsICcubWFza3wwOi0xJylcbiAgICAgICAgICAgICAgcmV0dXJuIFtjbXAsIHJlZiwgbWFza11cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX1NURU5DSUxfT1BGUk9OVDpcbiAgICAgICAgY2FzZSBTX1NURU5DSUxfT1BCQUNLOlxuICAgICAgICAgIHJldHVybiBwYXJzZVBhcmFtKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFR5cGUodmFsdWUsICdvYmplY3QnLCBwYXJhbSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHZhciBmYWlsID0gdmFsdWUuZmFpbCB8fCAna2VlcCdcbiAgICAgICAgICAgICAgdmFyIHpmYWlsID0gdmFsdWUuemZhaWwgfHwgJ2tlZXAnXG4gICAgICAgICAgICAgIHZhciB6cGFzcyA9IHZhbHVlLnpwYXNzIHx8ICdrZWVwJ1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRQYXJhbWV0ZXIoZmFpbCwgc3RlbmNpbE9wcywgcHJvcCArICcuZmFpbCcsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRQYXJhbWV0ZXIoemZhaWwsIHN0ZW5jaWxPcHMsIHByb3AgKyAnLnpmYWlsJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFBhcmFtZXRlcih6cGFzcywgc3RlbmNpbE9wcywgcHJvcCArICcuenBhc3MnLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBwcm9wID09PSBTX1NURU5DSUxfT1BCQUNLID8gR0xfQkFDSyA6IEdMX0ZST05ULFxuICAgICAgICAgICAgICAgIHN0ZW5jaWxPcHNbZmFpbF0sXG4gICAgICAgICAgICAgICAgc3RlbmNpbE9wc1t6ZmFpbF0sXG4gICAgICAgICAgICAgICAgc3RlbmNpbE9wc1t6cGFzc11cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICB2YXIgU1RFTkNJTF9PUFMgPSBlbnYuY29uc3RhbnRzLnN0ZW5jaWxPcHNcblxuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnJiZ0eXBlb2YgJyArIHZhbHVlICsgJz09PVwib2JqZWN0XCInLFxuICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgJyArIHByb3ApXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZCAobmFtZSkge1xuICAgICAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgICAgICAgJyEoXCInICsgbmFtZSArICdcIiBpbiAnICsgdmFsdWUgKyAnKXx8JyArXG4gICAgICAgICAgICAgICAgICAgICcoJyArIHZhbHVlICsgJy4nICsgbmFtZSArICcgaW4gJyArIFNURU5DSUxfT1BTICsgJyknLFxuICAgICAgICAgICAgICAgICAgICAnaW52YWxpZCAnICsgcHJvcCArICcuJyArIG5hbWUgKyAnLCBtdXN0IGJlIG9uZSBvZiAnICsgT2JqZWN0LmtleXMoc3RlbmNpbE9wcykpXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHJldHVybiBzY29wZS5kZWYoXG4gICAgICAgICAgICAgICAgICAnXCInLCBuYW1lLCAnXCIgaW4gJywgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAnPycsIFNURU5DSUxfT1BTLCAnWycsIHZhbHVlLCAnLicsIG5hbWUsICddOicsXG4gICAgICAgICAgICAgICAgICBHTF9LRUVQKVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBwcm9wID09PSBTX1NURU5DSUxfT1BCQUNLID8gR0xfQkFDSyA6IEdMX0ZST05ULFxuICAgICAgICAgICAgICAgIHJlYWQoJ2ZhaWwnKSxcbiAgICAgICAgICAgICAgICByZWFkKCd6ZmFpbCcpLFxuICAgICAgICAgICAgICAgIHJlYWQoJ3pwYXNzJylcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcblxuICAgICAgICBjYXNlIFNfUE9MWUdPTl9PRkZTRVRfT0ZGU0VUOlxuICAgICAgICAgIHJldHVybiBwYXJzZVBhcmFtKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFR5cGUodmFsdWUsICdvYmplY3QnLCBwYXJhbSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHZhciBmYWN0b3IgPSB2YWx1ZS5mYWN0b3IgfCAwXG4gICAgICAgICAgICAgIHZhciB1bml0cyA9IHZhbHVlLnVuaXRzIHwgMFxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRUeXBlKGZhY3RvciwgJ251bWJlcicsIHBhcmFtICsgJy5mYWN0b3InLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kVHlwZSh1bml0cywgJ251bWJlcicsIHBhcmFtICsgJy51bml0cycsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICByZXR1cm4gW2ZhY3RvciwgdW5pdHNdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVudiwgc2NvcGUsIHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgICAgICB2YWx1ZSArICcmJnR5cGVvZiAnICsgdmFsdWUgKyAnPT09XCJvYmplY3RcIicsXG4gICAgICAgICAgICAgICAgICAnaW52YWxpZCAnICsgcHJvcClcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICB2YXIgRkFDVE9SID0gc2NvcGUuZGVmKHZhbHVlLCAnLmZhY3RvcnwwJylcbiAgICAgICAgICAgICAgdmFyIFVOSVRTID0gc2NvcGUuZGVmKHZhbHVlLCAnLnVuaXRzfDAnKVxuXG4gICAgICAgICAgICAgIHJldHVybiBbRkFDVE9SLCBVTklUU11cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX0NVTExfRkFDRTpcbiAgICAgICAgICByZXR1cm4gcGFyc2VQYXJhbShcbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICB2YXIgZmFjZSA9IDBcbiAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAnZnJvbnQnKSB7XG4gICAgICAgICAgICAgICAgZmFjZSA9IEdMX0ZST05UXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdiYWNrJykge1xuICAgICAgICAgICAgICAgIGZhY2UgPSBHTF9CQUNLXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKCEhZmFjZSwgcGFyYW0sIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICByZXR1cm4gZmFjZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnPT09XCJmcm9udFwifHwnICtcbiAgICAgICAgICAgICAgICAgIHZhbHVlICsgJz09PVwiYmFja1wiJyxcbiAgICAgICAgICAgICAgICAgICdpbnZhbGlkIGN1bGwuZmFjZScpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHJldHVybiBzY29wZS5kZWYodmFsdWUsICc9PT1cImZyb250XCI/JywgR0xfRlJPTlQsICc6JywgR0xfQkFDSylcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX0xJTkVfV0lEVEg6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlUGFyYW0oXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgICAgICB2YWx1ZSA+PSBsaW1pdHMubGluZVdpZHRoRGltc1swXSAmJlxuICAgICAgICAgICAgICAgIHZhbHVlIDw9IGxpbWl0cy5saW5lV2lkdGhEaW1zWzFdLFxuICAgICAgICAgICAgICAgICdpbnZhbGlkIGxpbmUgd2lkdGgsIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIgYmV0d2VlbiAnICtcbiAgICAgICAgICAgICAgICBsaW1pdHMubGluZVdpZHRoRGltc1swXSArICcgYW5kICcgKyBsaW1pdHMubGluZVdpZHRoRGltc1sxXSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgJ3R5cGVvZiAnICsgdmFsdWUgKyAnPT09XCJudW1iZXJcIiYmJyArXG4gICAgICAgICAgICAgICAgICB2YWx1ZSArICc+PScgKyBsaW1pdHMubGluZVdpZHRoRGltc1swXSArICcmJicgK1xuICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnPD0nICsgbGltaXRzLmxpbmVXaWR0aERpbXNbMV0sXG4gICAgICAgICAgICAgICAgICAnaW52YWxpZCBsaW5lIHdpZHRoJylcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX0ZST05UX0ZBQ0U6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlUGFyYW0oXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kUGFyYW1ldGVyKHZhbHVlLCBvcmllbnRhdGlvblR5cGUsIHBhcmFtLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgcmV0dXJuIG9yaWVudGF0aW9uVHlwZVt2YWx1ZV1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlICsgJz09PVwiY3dcInx8JyArXG4gICAgICAgICAgICAgICAgICB2YWx1ZSArICc9PT1cImNjd1wiJyxcbiAgICAgICAgICAgICAgICAgICdpbnZhbGlkIGZyb250RmFjZSwgbXVzdCBiZSBvbmUgb2YgY3csY2N3JylcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlLmRlZih2YWx1ZSArICc9PT1cImN3XCI/JyArIEdMX0NXICsgJzonICsgR0xfQ0NXKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICBjYXNlIFNfQ09MT1JfTUFTSzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VQYXJhbShcbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgaXNBcnJheUxpa2UodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gNCxcbiAgICAgICAgICAgICAgICAnY29sb3IubWFzayBtdXN0IGJlIGxlbmd0aCA0IGFycmF5JywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tYXAoZnVuY3Rpb24gKHYpIHsgcmV0dXJuICEhdiB9KVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgZW52LnNoYXJlZC5pc0FycmF5TGlrZSArICcoJyArIHZhbHVlICsgJykmJicgK1xuICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnLmxlbmd0aD09PTQnLFxuICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgY29sb3IubWFzaycpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHJldHVybiBsb29wKDQsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICchIScgKyB2YWx1ZSArICdbJyArIGkgKyAnXSdcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX1NBTVBMRV9DT1ZFUkFHRTpcbiAgICAgICAgICByZXR1cm4gcGFyc2VQYXJhbShcbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSwgcGFyYW0sIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICB2YXIgc2FtcGxlVmFsdWUgPSAndmFsdWUnIGluIHZhbHVlID8gdmFsdWUudmFsdWUgOiAxXG4gICAgICAgICAgICAgIHZhciBzYW1wbGVJbnZlcnQgPSAhIXZhbHVlLmludmVydFxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgdHlwZW9mIHNhbXBsZVZhbHVlID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgICAgIHNhbXBsZVZhbHVlID49IDAgJiYgc2FtcGxlVmFsdWUgPD0gMSxcbiAgICAgICAgICAgICAgICAnc2FtcGxlLmNvdmVyYWdlLnZhbHVlIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHJldHVybiBbc2FtcGxlVmFsdWUsIHNhbXBsZUludmVydF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlICsgJyYmdHlwZW9mICcgKyB2YWx1ZSArICc9PT1cIm9iamVjdFwiJyxcbiAgICAgICAgICAgICAgICAgICdpbnZhbGlkIHNhbXBsZS5jb3ZlcmFnZScpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHZhciBWQUxVRSA9IHNjb3BlLmRlZihcbiAgICAgICAgICAgICAgICAnXCJ2YWx1ZVwiIGluICcsIHZhbHVlLCAnPysnLCB2YWx1ZSwgJy52YWx1ZToxJylcbiAgICAgICAgICAgICAgdmFyIElOVkVSVCA9IHNjb3BlLmRlZignISEnLCB2YWx1ZSwgJy5pbnZlcnQnKVxuICAgICAgICAgICAgICByZXR1cm4gW1ZBTFVFLCBJTlZFUlRdXG4gICAgICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gU1RBVEVcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlVW5pZm9ybXMgKHVuaWZvcm1zLCBlbnYpIHtcbiAgICB2YXIgc3RhdGljVW5pZm9ybXMgPSB1bmlmb3Jtcy5zdGF0aWNcbiAgICB2YXIgZHluYW1pY1VuaWZvcm1zID0gdW5pZm9ybXMuZHluYW1pY1xuXG4gICAgdmFyIFVOSUZPUk1TID0ge31cblxuICAgIE9iamVjdC5rZXlzKHN0YXRpY1VuaWZvcm1zKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgdmFsdWUgPSBzdGF0aWNVbmlmb3Jtc1tuYW1lXVxuICAgICAgdmFyIHJlc3VsdFxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXN1bHQgPSBjcmVhdGVTdGF0aWNEZWNsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciByZWdsVHlwZSA9IHZhbHVlLl9yZWdsVHlwZVxuICAgICAgICBpZiAocmVnbFR5cGUgPT09ICd0ZXh0dXJlMmQnIHx8XG4gICAgICAgICAgICByZWdsVHlwZSA9PT0gJ3RleHR1cmVDdWJlJykge1xuICAgICAgICAgIHJlc3VsdCA9IGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKGVudikge1xuICAgICAgICAgICAgcmV0dXJuIGVudi5saW5rKHZhbHVlKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSBpZiAocmVnbFR5cGUgPT09ICdmcmFtZWJ1ZmZlcicgfHxcbiAgICAgICAgICAgICAgICAgICByZWdsVHlwZSA9PT0gJ2ZyYW1lYnVmZmVyQ3ViZScpIHtcbiAgICAgICAgICBjaGVjayQxLmNvbW1hbmQodmFsdWUuY29sb3IubGVuZ3RoID4gMCxcbiAgICAgICAgICAgICdtaXNzaW5nIGNvbG9yIGF0dGFjaG1lbnQgZm9yIGZyYW1lYnVmZmVyIHNlbnQgdG8gdW5pZm9ybSBcIicgKyBuYW1lICsgJ1wiJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgcmVzdWx0ID0gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52KSB7XG4gICAgICAgICAgICByZXR1cm4gZW52LmxpbmsodmFsdWUuY29sb3JbMF0pXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGVjayQxLmNvbW1hbmRSYWlzZSgnaW52YWxpZCBkYXRhIGZvciB1bmlmb3JtIFwiJyArIG5hbWUgKyAnXCInLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0ID0gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52KSB7XG4gICAgICAgICAgdmFyIElURU0gPSBlbnYuZ2xvYmFsLmRlZignWycsXG4gICAgICAgICAgICBsb29wKHZhbHVlLmxlbmd0aCwgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZVtpXSA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWVbaV0gPT09ICdib29sZWFuJyxcbiAgICAgICAgICAgICAgICAnaW52YWxpZCB1bmlmb3JtICcgKyBuYW1lLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlW2ldXG4gICAgICAgICAgICB9KSwgJ10nKVxuICAgICAgICAgIHJldHVybiBJVEVNXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGVjayQxLmNvbW1hbmRSYWlzZSgnaW52YWxpZCBvciBtaXNzaW5nIGRhdGEgZm9yIHVuaWZvcm0gXCInICsgbmFtZSArICdcIicsIGVudi5jb21tYW5kU3RyKVxuICAgICAgfVxuICAgICAgcmVzdWx0LnZhbHVlID0gdmFsdWVcbiAgICAgIFVOSUZPUk1TW25hbWVdID0gcmVzdWx0XG4gICAgfSlcblxuICAgIE9iamVjdC5rZXlzKGR5bmFtaWNVbmlmb3JtcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgZHluID0gZHluYW1pY1VuaWZvcm1zW2tleV1cbiAgICAgIFVOSUZPUk1TW2tleV0gPSBjcmVhdGVEeW5hbWljRGVjbChkeW4sIGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgIHJldHVybiBlbnYuaW52b2tlKHNjb3BlLCBkeW4pXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm4gVU5JRk9STVNcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlQXR0cmlidXRlcyAoYXR0cmlidXRlcywgZW52KSB7XG4gICAgdmFyIHN0YXRpY0F0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLnN0YXRpY1xuICAgIHZhciBkeW5hbWljQXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuZHluYW1pY1xuXG4gICAgdmFyIGF0dHJpYnV0ZURlZnMgPSB7fVxuXG4gICAgT2JqZWN0LmtleXMoc3RhdGljQXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG4gICAgICB2YXIgdmFsdWUgPSBzdGF0aWNBdHRyaWJ1dGVzW2F0dHJpYnV0ZV1cbiAgICAgIHZhciBpZCA9IHN0cmluZ1N0b3JlLmlkKGF0dHJpYnV0ZSlcblxuICAgICAgdmFyIHJlY29yZCA9IG5ldyBBdHRyaWJ1dGVSZWNvcmQoKVxuICAgICAgaWYgKGlzQnVmZmVyQXJncyh2YWx1ZSkpIHtcbiAgICAgICAgcmVjb3JkLnN0YXRlID0gQVRUUklCX1NUQVRFX1BPSU5URVJcbiAgICAgICAgcmVjb3JkLmJ1ZmZlciA9IGJ1ZmZlclN0YXRlLmdldEJ1ZmZlcihcbiAgICAgICAgICBidWZmZXJTdGF0ZS5jcmVhdGUodmFsdWUsIEdMX0FSUkFZX0JVRkZFUiQyLCBmYWxzZSwgdHJ1ZSkpXG4gICAgICAgIHJlY29yZC50eXBlID0gMFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGJ1ZmZlciA9IGJ1ZmZlclN0YXRlLmdldEJ1ZmZlcih2YWx1ZSlcbiAgICAgICAgaWYgKGJ1ZmZlcikge1xuICAgICAgICAgIHJlY29yZC5zdGF0ZSA9IEFUVFJJQl9TVEFURV9QT0lOVEVSXG4gICAgICAgICAgcmVjb3JkLmJ1ZmZlciA9IGJ1ZmZlclxuICAgICAgICAgIHJlY29yZC50eXBlID0gMFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoZWNrJDEuY29tbWFuZCh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLFxuICAgICAgICAgICAgJ2ludmFsaWQgZGF0YSBmb3IgYXR0cmlidXRlICcgKyBhdHRyaWJ1dGUsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgIGlmICgnY29uc3RhbnQnIGluIHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgY29uc3RhbnQgPSB2YWx1ZS5jb25zdGFudFxuICAgICAgICAgICAgcmVjb3JkLmJ1ZmZlciA9ICdudWxsJ1xuICAgICAgICAgICAgcmVjb3JkLnN0YXRlID0gQVRUUklCX1NUQVRFX0NPTlNUQU5UXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnN0YW50ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICByZWNvcmQueCA9IGNvbnN0YW50XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgaXNBcnJheUxpa2UoY29uc3RhbnQpICYmXG4gICAgICAgICAgICAgICAgY29uc3RhbnQubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgIGNvbnN0YW50Lmxlbmd0aCA8PSA0LFxuICAgICAgICAgICAgICAgICdpbnZhbGlkIGNvbnN0YW50IGZvciBhdHRyaWJ1dGUgJyArIGF0dHJpYnV0ZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIENVVEVfQ09NUE9ORU5UUy5mb3JFYWNoKGZ1bmN0aW9uIChjLCBpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPCBjb25zdGFudC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIHJlY29yZFtjXSA9IGNvbnN0YW50W2ldXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNCdWZmZXJBcmdzKHZhbHVlLmJ1ZmZlcikpIHtcbiAgICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVyU3RhdGUuZ2V0QnVmZmVyKFxuICAgICAgICAgICAgICAgIGJ1ZmZlclN0YXRlLmNyZWF0ZSh2YWx1ZS5idWZmZXIsIEdMX0FSUkFZX0JVRkZFUiQyLCBmYWxzZSwgdHJ1ZSkpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBidWZmZXIgPSBidWZmZXJTdGF0ZS5nZXRCdWZmZXIodmFsdWUuYnVmZmVyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKCEhYnVmZmVyLCAnbWlzc2luZyBidWZmZXIgZm9yIGF0dHJpYnV0ZSBcIicgKyBhdHRyaWJ1dGUgKyAnXCInLCBlbnYuY29tbWFuZFN0cilcblxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHZhbHVlLm9mZnNldCB8IDBcbiAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChvZmZzZXQgPj0gMCxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgb2Zmc2V0IGZvciBhdHRyaWJ1dGUgXCInICsgYXR0cmlidXRlICsgJ1wiJywgZW52LmNvbW1hbmRTdHIpXG5cbiAgICAgICAgICAgIHZhciBzdHJpZGUgPSB2YWx1ZS5zdHJpZGUgfCAwXG4gICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoc3RyaWRlID49IDAgJiYgc3RyaWRlIDwgMjU2LFxuICAgICAgICAgICAgICAnaW52YWxpZCBzdHJpZGUgZm9yIGF0dHJpYnV0ZSBcIicgKyBhdHRyaWJ1dGUgKyAnXCIsIG11c3QgYmUgaW50ZWdlciBiZXR3ZWVlbiBbMCwgMjU1XScsIGVudi5jb21tYW5kU3RyKVxuXG4gICAgICAgICAgICB2YXIgc2l6ZSA9IHZhbHVlLnNpemUgfCAwXG4gICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoISgnc2l6ZScgaW4gdmFsdWUpIHx8IChzaXplID4gMCAmJiBzaXplIDw9IDQpLFxuICAgICAgICAgICAgICAnaW52YWxpZCBzaXplIGZvciBhdHRyaWJ1dGUgXCInICsgYXR0cmlidXRlICsgJ1wiLCBtdXN0IGJlIDEsMiwzLDQnLCBlbnYuY29tbWFuZFN0cilcblxuICAgICAgICAgICAgdmFyIG5vcm1hbGl6ZWQgPSAhIXZhbHVlLm5vcm1hbGl6ZWRcblxuICAgICAgICAgICAgdmFyIHR5cGUgPSAwXG4gICAgICAgICAgICBpZiAoJ3R5cGUnIGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFBhcmFtZXRlcihcbiAgICAgICAgICAgICAgICB2YWx1ZS50eXBlLCBnbFR5cGVzLFxuICAgICAgICAgICAgICAgICdpbnZhbGlkIHR5cGUgZm9yIGF0dHJpYnV0ZSAnICsgYXR0cmlidXRlLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgdHlwZSA9IGdsVHlwZXNbdmFsdWUudHlwZV1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGRpdmlzb3IgPSB2YWx1ZS5kaXZpc29yIHwgMFxuICAgICAgICAgICAgaWYgKCdkaXZpc29yJyBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoZGl2aXNvciA9PT0gMCB8fCBleHRJbnN0YW5jaW5nLFxuICAgICAgICAgICAgICAgICdjYW5ub3Qgc3BlY2lmeSBkaXZpc29yIGZvciBhdHRyaWJ1dGUgXCInICsgYXR0cmlidXRlICsgJ1wiLCBpbnN0YW5jaW5nIG5vdCBzdXBwb3J0ZWQnLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKGRpdmlzb3IgPj0gMCxcbiAgICAgICAgICAgICAgICAnaW52YWxpZCBkaXZpc29yIGZvciBhdHRyaWJ1dGUgXCInICsgYXR0cmlidXRlICsgJ1wiJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgY29tbWFuZCA9IGVudi5jb21tYW5kU3RyXG5cbiAgICAgICAgICAgICAgdmFyIFZBTElEX0tFWVMgPSBbXG4gICAgICAgICAgICAgICAgJ2J1ZmZlcicsXG4gICAgICAgICAgICAgICAgJ29mZnNldCcsXG4gICAgICAgICAgICAgICAgJ2Rpdmlzb3InLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJyxcbiAgICAgICAgICAgICAgICAndHlwZScsXG4gICAgICAgICAgICAgICAgJ3NpemUnLFxuICAgICAgICAgICAgICAgICdzdHJpZGUnXG4gICAgICAgICAgICAgIF1cblxuICAgICAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICAgIFZBTElEX0tFWVMuaW5kZXhPZihwcm9wKSA+PSAwLFxuICAgICAgICAgICAgICAgICAgJ3Vua25vd24gcGFyYW1ldGVyIFwiJyArIHByb3AgKyAnXCIgZm9yIGF0dHJpYnV0ZSBwb2ludGVyIFwiJyArIGF0dHJpYnV0ZSArICdcIiAodmFsaWQgcGFyYW1ldGVycyBhcmUgJyArIFZBTElEX0tFWVMgKyAnKScsXG4gICAgICAgICAgICAgICAgICBjb21tYW5kKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgcmVjb3JkLmJ1ZmZlciA9IGJ1ZmZlclxuICAgICAgICAgICAgcmVjb3JkLnN0YXRlID0gQVRUUklCX1NUQVRFX1BPSU5URVJcbiAgICAgICAgICAgIHJlY29yZC5zaXplID0gc2l6ZVxuICAgICAgICAgICAgcmVjb3JkLm5vcm1hbGl6ZWQgPSBub3JtYWxpemVkXG4gICAgICAgICAgICByZWNvcmQudHlwZSA9IHR5cGUgfHwgYnVmZmVyLmR0eXBlXG4gICAgICAgICAgICByZWNvcmQub2Zmc2V0ID0gb2Zmc2V0XG4gICAgICAgICAgICByZWNvcmQuc3RyaWRlID0gc3RyaWRlXG4gICAgICAgICAgICByZWNvcmQuZGl2aXNvciA9IGRpdmlzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXR0cmlidXRlRGVmc1thdHRyaWJ1dGVdID0gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICB2YXIgY2FjaGUgPSBlbnYuYXR0cmliQ2FjaGVcbiAgICAgICAgaWYgKGlkIGluIGNhY2hlKSB7XG4gICAgICAgICAgcmV0dXJuIGNhY2hlW2lkXVxuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHQgPSB7XG4gICAgICAgICAgaXNTdHJlYW06IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmtleXMocmVjb3JkKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHJlY29yZFtrZXldXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChyZWNvcmQuYnVmZmVyKSB7XG4gICAgICAgICAgcmVzdWx0LmJ1ZmZlciA9IGVudi5saW5rKHJlY29yZC5idWZmZXIpXG4gICAgICAgICAgcmVzdWx0LnR5cGUgPSByZXN1bHQudHlwZSB8fCAocmVzdWx0LmJ1ZmZlciArICcuZHR5cGUnKVxuICAgICAgICB9XG4gICAgICAgIGNhY2hlW2lkXSA9IHJlc3VsdFxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBPYmplY3Qua2V5cyhkeW5hbWljQXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG4gICAgICB2YXIgZHluID0gZHluYW1pY0F0dHJpYnV0ZXNbYXR0cmlidXRlXVxuXG4gICAgICBmdW5jdGlvbiBhcHBlbmRBdHRyaWJ1dGVDb2RlIChlbnYsIGJsb2NrKSB7XG4gICAgICAgIHZhciBWQUxVRSA9IGVudi5pbnZva2UoYmxvY2ssIGR5bilcblxuICAgICAgICB2YXIgc2hhcmVkID0gZW52LnNoYXJlZFxuICAgICAgICB2YXIgY29uc3RhbnRzID0gZW52LmNvbnN0YW50c1xuXG4gICAgICAgIHZhciBJU19CVUZGRVJfQVJHUyA9IHNoYXJlZC5pc0J1ZmZlckFyZ3NcbiAgICAgICAgdmFyIEJVRkZFUl9TVEFURSA9IHNoYXJlZC5idWZmZXJcblxuICAgICAgICAvLyBQZXJmb3JtIHZhbGlkYXRpb24gb24gYXR0cmlidXRlXG4gICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVudi5hc3NlcnQoYmxvY2ssXG4gICAgICAgICAgICBWQUxVRSArICcmJih0eXBlb2YgJyArIFZBTFVFICsgJz09PVwib2JqZWN0XCJ8fHR5cGVvZiAnICtcbiAgICAgICAgICAgIFZBTFVFICsgJz09PVwiZnVuY3Rpb25cIikmJignICtcbiAgICAgICAgICAgIElTX0JVRkZFUl9BUkdTICsgJygnICsgVkFMVUUgKyAnKXx8JyArXG4gICAgICAgICAgICBCVUZGRVJfU1RBVEUgKyAnLmdldEJ1ZmZlcignICsgVkFMVUUgKyAnKXx8JyArXG4gICAgICAgICAgICBCVUZGRVJfU1RBVEUgKyAnLmdldEJ1ZmZlcignICsgVkFMVUUgKyAnLmJ1ZmZlcil8fCcgK1xuICAgICAgICAgICAgSVNfQlVGRkVSX0FSR1MgKyAnKCcgKyBWQUxVRSArICcuYnVmZmVyKXx8JyArXG4gICAgICAgICAgICAnKFwiY29uc3RhbnRcIiBpbiAnICsgVkFMVUUgK1xuICAgICAgICAgICAgJyYmKHR5cGVvZiAnICsgVkFMVUUgKyAnLmNvbnN0YW50PT09XCJudW1iZXJcInx8JyArXG4gICAgICAgICAgICBzaGFyZWQuaXNBcnJheUxpa2UgKyAnKCcgKyBWQUxVRSArICcuY29uc3RhbnQpKSkpJyxcbiAgICAgICAgICAgICdpbnZhbGlkIGR5bmFtaWMgYXR0cmlidXRlIFwiJyArIGF0dHJpYnV0ZSArICdcIicpXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gYWxsb2NhdGUgbmFtZXMgZm9yIHJlc3VsdFxuICAgICAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICAgIGlzU3RyZWFtOiBibG9jay5kZWYoZmFsc2UpXG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRlZmF1bHRSZWNvcmQgPSBuZXcgQXR0cmlidXRlUmVjb3JkKClcbiAgICAgICAgZGVmYXVsdFJlY29yZC5zdGF0ZSA9IEFUVFJJQl9TVEFURV9QT0lOVEVSXG4gICAgICAgIE9iamVjdC5rZXlzKGRlZmF1bHRSZWNvcmQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gYmxvY2suZGVmKCcnICsgZGVmYXVsdFJlY29yZFtrZXldKVxuICAgICAgICB9KVxuXG4gICAgICAgIHZhciBCVUZGRVIgPSByZXN1bHQuYnVmZmVyXG4gICAgICAgIHZhciBUWVBFID0gcmVzdWx0LnR5cGVcbiAgICAgICAgYmxvY2soXG4gICAgICAgICAgJ2lmKCcsIElTX0JVRkZFUl9BUkdTLCAnKCcsIFZBTFVFLCAnKSl7JyxcbiAgICAgICAgICByZXN1bHQuaXNTdHJlYW0sICc9dHJ1ZTsnLFxuICAgICAgICAgIEJVRkZFUiwgJz0nLCBCVUZGRVJfU1RBVEUsICcuY3JlYXRlU3RyZWFtKCcsIEdMX0FSUkFZX0JVRkZFUiQyLCAnLCcsIFZBTFVFLCAnKTsnLFxuICAgICAgICAgIFRZUEUsICc9JywgQlVGRkVSLCAnLmR0eXBlOycsXG4gICAgICAgICAgJ31lbHNleycsXG4gICAgICAgICAgQlVGRkVSLCAnPScsIEJVRkZFUl9TVEFURSwgJy5nZXRCdWZmZXIoJywgVkFMVUUsICcpOycsXG4gICAgICAgICAgJ2lmKCcsIEJVRkZFUiwgJyl7JyxcbiAgICAgICAgICBUWVBFLCAnPScsIEJVRkZFUiwgJy5kdHlwZTsnLFxuICAgICAgICAgICd9ZWxzZSBpZihcImNvbnN0YW50XCIgaW4gJywgVkFMVUUsICcpeycsXG4gICAgICAgICAgcmVzdWx0LnN0YXRlLCAnPScsIEFUVFJJQl9TVEFURV9DT05TVEFOVCwgJzsnLFxuICAgICAgICAgICdpZih0eXBlb2YgJyArIFZBTFVFICsgJy5jb25zdGFudCA9PT0gXCJudW1iZXJcIil7JyxcbiAgICAgICAgICByZXN1bHRbQ1VURV9DT01QT05FTlRTWzBdXSwgJz0nLCBWQUxVRSwgJy5jb25zdGFudDsnLFxuICAgICAgICAgIENVVEVfQ09NUE9ORU5UUy5zbGljZSgxKS5tYXAoZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRbbl1cbiAgICAgICAgICB9KS5qb2luKCc9JyksICc9MDsnLFxuICAgICAgICAgICd9ZWxzZXsnLFxuICAgICAgICAgIENVVEVfQ09NUE9ORU5UUy5tYXAoZnVuY3Rpb24gKG5hbWUsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSArICc9JyArIFZBTFVFICsgJy5jb25zdGFudC5sZW5ndGg+JyArIGkgK1xuICAgICAgICAgICAgICAnPycgKyBWQUxVRSArICcuY29uc3RhbnRbJyArIGkgKyAnXTowOydcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KS5qb2luKCcnKSxcbiAgICAgICAgICAnfX1lbHNleycsXG4gICAgICAgICAgJ2lmKCcsIElTX0JVRkZFUl9BUkdTLCAnKCcsIFZBTFVFLCAnLmJ1ZmZlcikpeycsXG4gICAgICAgICAgQlVGRkVSLCAnPScsIEJVRkZFUl9TVEFURSwgJy5jcmVhdGVTdHJlYW0oJywgR0xfQVJSQVlfQlVGRkVSJDIsICcsJywgVkFMVUUsICcuYnVmZmVyKTsnLFxuICAgICAgICAgICd9ZWxzZXsnLFxuICAgICAgICAgIEJVRkZFUiwgJz0nLCBCVUZGRVJfU1RBVEUsICcuZ2V0QnVmZmVyKCcsIFZBTFVFLCAnLmJ1ZmZlcik7JyxcbiAgICAgICAgICAnfScsXG4gICAgICAgICAgVFlQRSwgJz1cInR5cGVcIiBpbiAnLCBWQUxVRSwgJz8nLFxuICAgICAgICAgIGNvbnN0YW50cy5nbFR5cGVzLCAnWycsIFZBTFVFLCAnLnR5cGVdOicsIEJVRkZFUiwgJy5kdHlwZTsnLFxuICAgICAgICAgIHJlc3VsdC5ub3JtYWxpemVkLCAnPSEhJywgVkFMVUUsICcubm9ybWFsaXplZDsnKVxuICAgICAgICBmdW5jdGlvbiBlbWl0UmVhZFJlY29yZCAobmFtZSkge1xuICAgICAgICAgIGJsb2NrKHJlc3VsdFtuYW1lXSwgJz0nLCBWQUxVRSwgJy4nLCBuYW1lLCAnfDA7JylcbiAgICAgICAgfVxuICAgICAgICBlbWl0UmVhZFJlY29yZCgnc2l6ZScpXG4gICAgICAgIGVtaXRSZWFkUmVjb3JkKCdvZmZzZXQnKVxuICAgICAgICBlbWl0UmVhZFJlY29yZCgnc3RyaWRlJylcbiAgICAgICAgZW1pdFJlYWRSZWNvcmQoJ2Rpdmlzb3InKVxuXG4gICAgICAgIGJsb2NrKCd9fScpXG5cbiAgICAgICAgYmxvY2suZXhpdChcbiAgICAgICAgICAnaWYoJywgcmVzdWx0LmlzU3RyZWFtLCAnKXsnLFxuICAgICAgICAgIEJVRkZFUl9TVEFURSwgJy5kZXN0cm95U3RyZWFtKCcsIEJVRkZFUiwgJyk7JyxcbiAgICAgICAgICAnfScpXG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfVxuXG4gICAgICBhdHRyaWJ1dGVEZWZzW2F0dHJpYnV0ZV0gPSBjcmVhdGVEeW5hbWljRGVjbChkeW4sIGFwcGVuZEF0dHJpYnV0ZUNvZGUpXG4gICAgfSlcblxuICAgIHJldHVybiBhdHRyaWJ1dGVEZWZzXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVZBTyAob3B0aW9ucywgZW52KSB7XG4gICAgdmFyIHN0YXRpY09wdGlvbnMgPSBvcHRpb25zLnN0YXRpY1xuICAgIHZhciBkeW5hbWljT3B0aW9ucyA9IG9wdGlvbnMuZHluYW1pY1xuICAgIGlmIChTX1ZBTyBpbiBzdGF0aWNPcHRpb25zKSB7XG4gICAgICB2YXIgdmFvID0gc3RhdGljT3B0aW9uc1tTX1ZBT11cbiAgICAgIGlmICh2YW8gIT09IG51bGwgJiYgYXR0cmlidXRlU3RhdGUuZ2V0VkFPKHZhbykgPT09IG51bGwpIHtcbiAgICAgICAgdmFvID0gYXR0cmlidXRlU3RhdGUuY3JlYXRlVkFPKHZhbylcbiAgICAgIH1cbiAgICAgIHJldHVybiBjcmVhdGVTdGF0aWNEZWNsKGZ1bmN0aW9uIChlbnYpIHtcbiAgICAgICAgcmV0dXJuIGVudi5saW5rKGF0dHJpYnV0ZVN0YXRlLmdldFZBTyh2YW8pKVxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKFNfVkFPIGluIGR5bmFtaWNPcHRpb25zKSB7XG4gICAgICB2YXIgZHluID0gZHluYW1pY09wdGlvbnNbU19WQU9dXG4gICAgICByZXR1cm4gY3JlYXRlRHluYW1pY0RlY2woZHluLCBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICB2YXIgdmFvUmVmID0gZW52Lmludm9rZShzY29wZSwgZHluKVxuICAgICAgICByZXR1cm4gc2NvcGUuZGVmKGVudi5zaGFyZWQudmFvICsgJy5nZXRWQU8oJyArIHZhb1JlZiArICcpJylcbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUNvbnRleHQgKGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGljQ29udGV4dCA9IGNvbnRleHQuc3RhdGljXG4gICAgdmFyIGR5bmFtaWNDb250ZXh0ID0gY29udGV4dC5keW5hbWljXG4gICAgdmFyIHJlc3VsdCA9IHt9XG5cbiAgICBPYmplY3Qua2V5cyhzdGF0aWNDb250ZXh0KS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgdmFsdWUgPSBzdGF0aWNDb250ZXh0W25hbWVdXG4gICAgICByZXN1bHRbbmFtZV0gPSBjcmVhdGVTdGF0aWNEZWNsKGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgcmV0dXJuICcnICsgdmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZW52LmxpbmsodmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcblxuICAgIE9iamVjdC5rZXlzKGR5bmFtaWNDb250ZXh0KS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgZHluID0gZHluYW1pY0NvbnRleHRbbmFtZV1cbiAgICAgIHJlc3VsdFtuYW1lXSA9IGNyZWF0ZUR5bmFtaWNEZWNsKGR5biwgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgcmV0dXJuIGVudi5pbnZva2Uoc2NvcGUsIGR5bilcbiAgICAgIH0pXG4gICAgfSlcblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlQXJndW1lbnRzIChvcHRpb25zLCBhdHRyaWJ1dGVzLCB1bmlmb3JtcywgY29udGV4dCwgZW52KSB7XG4gICAgdmFyIHN0YXRpY09wdGlvbnMgPSBvcHRpb25zLnN0YXRpY1xuICAgIHZhciBkeW5hbWljT3B0aW9ucyA9IG9wdGlvbnMuZHluYW1pY1xuXG4gICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgS0VZX05BTUVTID0gW1xuICAgICAgICBTX0ZSQU1FQlVGRkVSLFxuICAgICAgICBTX1ZFUlQsXG4gICAgICAgIFNfRlJBRyxcbiAgICAgICAgU19FTEVNRU5UUyxcbiAgICAgICAgU19QUklNSVRJVkUsXG4gICAgICAgIFNfT0ZGU0VULFxuICAgICAgICBTX0NPVU5ULFxuICAgICAgICBTX0lOU1RBTkNFUyxcbiAgICAgICAgU19QUk9GSUxFLFxuICAgICAgICBTX1ZBT1xuICAgICAgXS5jb25jYXQoR0xfU1RBVEVfTkFNRVMpXG5cbiAgICAgIGZ1bmN0aW9uIGNoZWNrS2V5cyAoZGljdCkge1xuICAgICAgICBPYmplY3Qua2V5cyhkaWN0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICBLRVlfTkFNRVMuaW5kZXhPZihrZXkpID49IDAsXG4gICAgICAgICAgICAndW5rbm93biBwYXJhbWV0ZXIgXCInICsga2V5ICsgJ1wiJyxcbiAgICAgICAgICAgIGVudi5jb21tYW5kU3RyKVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjaGVja0tleXMoc3RhdGljT3B0aW9ucylcbiAgICAgIGNoZWNrS2V5cyhkeW5hbWljT3B0aW9ucylcbiAgICB9KVxuXG4gICAgdmFyIGF0dHJpYkxvY2F0aW9ucyA9IHBhcnNlQXR0cmliTG9jYXRpb25zKG9wdGlvbnMsIGF0dHJpYnV0ZXMpXG5cbiAgICB2YXIgZnJhbWVidWZmZXIgPSBwYXJzZUZyYW1lYnVmZmVyKG9wdGlvbnMsIGVudilcbiAgICB2YXIgdmlld3BvcnRBbmRTY2lzc29yID0gcGFyc2VWaWV3cG9ydFNjaXNzb3Iob3B0aW9ucywgZnJhbWVidWZmZXIsIGVudilcbiAgICB2YXIgZHJhdyA9IHBhcnNlRHJhdyhvcHRpb25zLCBlbnYpXG4gICAgdmFyIHN0YXRlID0gcGFyc2VHTFN0YXRlKG9wdGlvbnMsIGVudilcbiAgICB2YXIgc2hhZGVyID0gcGFyc2VQcm9ncmFtKG9wdGlvbnMsIGVudiwgYXR0cmliTG9jYXRpb25zKVxuXG4gICAgZnVuY3Rpb24gY29weUJveCAobmFtZSkge1xuICAgICAgdmFyIGRlZm4gPSB2aWV3cG9ydEFuZFNjaXNzb3JbbmFtZV1cbiAgICAgIGlmIChkZWZuKSB7XG4gICAgICAgIHN0YXRlW25hbWVdID0gZGVmblxuICAgICAgfVxuICAgIH1cbiAgICBjb3B5Qm94KFNfVklFV1BPUlQpXG4gICAgY29weUJveChwcm9wTmFtZShTX1NDSVNTT1JfQk9YKSlcblxuICAgIHZhciBkaXJ0eSA9IE9iamVjdC5rZXlzKHN0YXRlKS5sZW5ndGggPiAwXG5cbiAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgZnJhbWVidWZmZXI6IGZyYW1lYnVmZmVyLFxuICAgICAgZHJhdzogZHJhdyxcbiAgICAgIHNoYWRlcjogc2hhZGVyLFxuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgZGlydHk6IGRpcnR5LFxuICAgICAgc2NvcGVWQU86IG51bGwsXG4gICAgICBkcmF3VkFPOiBudWxsLFxuICAgICAgdXNlVkFPOiBmYWxzZSxcbiAgICAgIGF0dHJpYnV0ZXM6IHt9XG4gICAgfVxuXG4gICAgcmVzdWx0LnByb2ZpbGUgPSBwYXJzZVByb2ZpbGUob3B0aW9ucywgZW52KVxuICAgIHJlc3VsdC51bmlmb3JtcyA9IHBhcnNlVW5pZm9ybXModW5pZm9ybXMsIGVudilcbiAgICByZXN1bHQuZHJhd1ZBTyA9IHJlc3VsdC5zY29wZVZBTyA9IHBhcnNlVkFPKG9wdGlvbnMsIGVudilcbiAgICAvLyBzcGVjaWFsIGNhc2U6IGNoZWNrIGlmIHdlIGNhbiBzdGF0aWNhbGx5IGFsbG9jYXRlIGEgdmVydGV4IGFycmF5IG9iamVjdCBmb3IgdGhpcyBwcm9ncmFtXG4gICAgaWYgKCFyZXN1bHQuZHJhd1ZBTyAmJiBzaGFkZXIucHJvZ3JhbSAmJiAhYXR0cmliTG9jYXRpb25zICYmIGV4dGVuc2lvbnMuYW5nbGVfaW5zdGFuY2VkX2FycmF5cykge1xuICAgICAgdmFyIHVzZVZBTyA9IHRydWVcbiAgICAgIHZhciBzdGF0aWNCaW5kaW5ncyA9IHNoYWRlci5wcm9ncmFtLmF0dHJpYnV0ZXMubWFwKGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgICAgIHZhciBiaW5kaW5nID0gYXR0cmlidXRlcy5zdGF0aWNbYXR0cl1cbiAgICAgICAgdXNlVkFPID0gdXNlVkFPICYmICEhYmluZGluZ1xuICAgICAgICByZXR1cm4gYmluZGluZ1xuICAgICAgfSlcbiAgICAgIGlmICh1c2VWQU8gJiYgc3RhdGljQmluZGluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgdmFvID0gYXR0cmlidXRlU3RhdGUuZ2V0VkFPKGF0dHJpYnV0ZVN0YXRlLmNyZWF0ZVZBTyhzdGF0aWNCaW5kaW5ncykpXG4gICAgICAgIHJlc3VsdC5kcmF3VkFPID0gbmV3IERlY2xhcmF0aW9uKG51bGwsIG51bGwsIG51bGwsIGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgICAgcmV0dXJuIGVudi5saW5rKHZhbylcbiAgICAgICAgfSlcbiAgICAgICAgcmVzdWx0LnVzZVZBTyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGF0dHJpYkxvY2F0aW9ucykge1xuICAgICAgcmVzdWx0LnVzZVZBTyA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LmF0dHJpYnV0ZXMgPSBwYXJzZUF0dHJpYnV0ZXMoYXR0cmlidXRlcywgZW52KVxuICAgIH1cbiAgICByZXN1bHQuY29udGV4dCA9IHBhcnNlQ29udGV4dChjb250ZXh0LCBlbnYpXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBDT01NT04gVVBEQVRFIEZVTkNUSU9OU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIGZ1bmN0aW9uIGVtaXRDb250ZXh0IChlbnYsIHNjb3BlLCBjb250ZXh0KSB7XG4gICAgdmFyIHNoYXJlZCA9IGVudi5zaGFyZWRcbiAgICB2YXIgQ09OVEVYVCA9IHNoYXJlZC5jb250ZXh0XG5cbiAgICB2YXIgY29udGV4dEVudGVyID0gZW52LnNjb3BlKClcblxuICAgIE9iamVjdC5rZXlzKGNvbnRleHQpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHNjb3BlLnNhdmUoQ09OVEVYVCwgJy4nICsgbmFtZSlcbiAgICAgIHZhciBkZWZuID0gY29udGV4dFtuYW1lXVxuICAgICAgdmFyIHZhbHVlID0gZGVmbi5hcHBlbmQoZW52LCBzY29wZSlcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBjb250ZXh0RW50ZXIoQ09OVEVYVCwgJy4nLCBuYW1lLCAnPVsnLCB2YWx1ZS5qb2luKCksICddOycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0RW50ZXIoQ09OVEVYVCwgJy4nLCBuYW1lLCAnPScsIHZhbHVlLCAnOycpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHNjb3BlKGNvbnRleHRFbnRlcilcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQ09NTU9OIERSQVdJTkcgRlVOQ1RJT05TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgZnVuY3Rpb24gZW1pdFBvbGxGcmFtZWJ1ZmZlciAoZW52LCBzY29wZSwgZnJhbWVidWZmZXIsIHNraXBDaGVjaykge1xuICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG5cbiAgICB2YXIgR0wgPSBzaGFyZWQuZ2xcbiAgICB2YXIgRlJBTUVCVUZGRVJfU1RBVEUgPSBzaGFyZWQuZnJhbWVidWZmZXJcbiAgICB2YXIgRVhUX0RSQVdfQlVGRkVSU1xuICAgIGlmIChleHREcmF3QnVmZmVycykge1xuICAgICAgRVhUX0RSQVdfQlVGRkVSUyA9IHNjb3BlLmRlZihzaGFyZWQuZXh0ZW5zaW9ucywgJy53ZWJnbF9kcmF3X2J1ZmZlcnMnKVxuICAgIH1cblxuICAgIHZhciBjb25zdGFudHMgPSBlbnYuY29uc3RhbnRzXG5cbiAgICB2YXIgRFJBV19CVUZGRVJTID0gY29uc3RhbnRzLmRyYXdCdWZmZXJcbiAgICB2YXIgQkFDS19CVUZGRVIgPSBjb25zdGFudHMuYmFja0J1ZmZlclxuXG4gICAgdmFyIE5FWFRcbiAgICBpZiAoZnJhbWVidWZmZXIpIHtcbiAgICAgIE5FWFQgPSBmcmFtZWJ1ZmZlci5hcHBlbmQoZW52LCBzY29wZSlcbiAgICB9IGVsc2Uge1xuICAgICAgTkVYVCA9IHNjb3BlLmRlZihGUkFNRUJVRkZFUl9TVEFURSwgJy5uZXh0JylcbiAgICB9XG5cbiAgICBpZiAoIXNraXBDaGVjaykge1xuICAgICAgc2NvcGUoJ2lmKCcsIE5FWFQsICchPT0nLCBGUkFNRUJVRkZFUl9TVEFURSwgJy5jdXIpeycpXG4gICAgfVxuICAgIHNjb3BlKFxuICAgICAgJ2lmKCcsIE5FWFQsICcpeycsXG4gICAgICBHTCwgJy5iaW5kRnJhbWVidWZmZXIoJywgR0xfRlJBTUVCVUZGRVIkMiwgJywnLCBORVhULCAnLmZyYW1lYnVmZmVyKTsnKVxuICAgIGlmIChleHREcmF3QnVmZmVycykge1xuICAgICAgc2NvcGUoRVhUX0RSQVdfQlVGRkVSUywgJy5kcmF3QnVmZmVyc1dFQkdMKCcsXG4gICAgICAgIERSQVdfQlVGRkVSUywgJ1snLCBORVhULCAnLmNvbG9yQXR0YWNobWVudHMubGVuZ3RoXSk7JylcbiAgICB9XG4gICAgc2NvcGUoJ31lbHNleycsXG4gICAgICBHTCwgJy5iaW5kRnJhbWVidWZmZXIoJywgR0xfRlJBTUVCVUZGRVIkMiwgJyxudWxsKTsnKVxuICAgIGlmIChleHREcmF3QnVmZmVycykge1xuICAgICAgc2NvcGUoRVhUX0RSQVdfQlVGRkVSUywgJy5kcmF3QnVmZmVyc1dFQkdMKCcsIEJBQ0tfQlVGRkVSLCAnKTsnKVxuICAgIH1cbiAgICBzY29wZShcbiAgICAgICd9JyxcbiAgICAgIEZSQU1FQlVGRkVSX1NUQVRFLCAnLmN1cj0nLCBORVhULCAnOycpXG4gICAgaWYgKCFza2lwQ2hlY2spIHtcbiAgICAgIHNjb3BlKCd9JylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbWl0UG9sbFN0YXRlIChlbnYsIHNjb3BlLCBhcmdzKSB7XG4gICAgdmFyIHNoYXJlZCA9IGVudi5zaGFyZWRcblxuICAgIHZhciBHTCA9IHNoYXJlZC5nbFxuXG4gICAgdmFyIENVUlJFTlRfVkFSUyA9IGVudi5jdXJyZW50XG4gICAgdmFyIE5FWFRfVkFSUyA9IGVudi5uZXh0XG4gICAgdmFyIENVUlJFTlRfU1RBVEUgPSBzaGFyZWQuY3VycmVudFxuICAgIHZhciBORVhUX1NUQVRFID0gc2hhcmVkLm5leHRcblxuICAgIHZhciBibG9jayA9IGVudi5jb25kKENVUlJFTlRfU1RBVEUsICcuZGlydHknKVxuXG4gICAgR0xfU1RBVEVfTkFNRVMuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgdmFyIHBhcmFtID0gcHJvcE5hbWUocHJvcClcbiAgICAgIGlmIChwYXJhbSBpbiBhcmdzLnN0YXRlKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB2YXIgTkVYVCwgQ1VSUkVOVFxuICAgICAgaWYgKHBhcmFtIGluIE5FWFRfVkFSUykge1xuICAgICAgICBORVhUID0gTkVYVF9WQVJTW3BhcmFtXVxuICAgICAgICBDVVJSRU5UID0gQ1VSUkVOVF9WQVJTW3BhcmFtXVxuICAgICAgICB2YXIgcGFydHMgPSBsb29wKGN1cnJlbnRTdGF0ZVtwYXJhbV0ubGVuZ3RoLCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgIHJldHVybiBibG9jay5kZWYoTkVYVCwgJ1snLCBpLCAnXScpXG4gICAgICAgIH0pXG4gICAgICAgIGJsb2NrKGVudi5jb25kKHBhcnRzLm1hcChmdW5jdGlvbiAocCwgaSkge1xuICAgICAgICAgIHJldHVybiBwICsgJyE9PScgKyBDVVJSRU5UICsgJ1snICsgaSArICddJ1xuICAgICAgICB9KS5qb2luKCd8fCcpKVxuICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgR0wsICcuJywgR0xfVkFSSUFCTEVTW3BhcmFtXSwgJygnLCBwYXJ0cywgJyk7JyxcbiAgICAgICAgICAgIHBhcnRzLm1hcChmdW5jdGlvbiAocCwgaSkge1xuICAgICAgICAgICAgICByZXR1cm4gQ1VSUkVOVCArICdbJyArIGkgKyAnXT0nICsgcFxuICAgICAgICAgICAgfSkuam9pbignOycpLCAnOycpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgTkVYVCA9IGJsb2NrLmRlZihORVhUX1NUQVRFLCAnLicsIHBhcmFtKVxuICAgICAgICB2YXIgaWZ0ZSA9IGVudi5jb25kKE5FWFQsICchPT0nLCBDVVJSRU5UX1NUQVRFLCAnLicsIHBhcmFtKVxuICAgICAgICBibG9jayhpZnRlKVxuICAgICAgICBpZiAocGFyYW0gaW4gR0xfRkxBR1MpIHtcbiAgICAgICAgICBpZnRlKFxuICAgICAgICAgICAgZW52LmNvbmQoTkVYVClcbiAgICAgICAgICAgICAgLnRoZW4oR0wsICcuZW5hYmxlKCcsIEdMX0ZMQUdTW3BhcmFtXSwgJyk7JylcbiAgICAgICAgICAgICAgLmVsc2UoR0wsICcuZGlzYWJsZSgnLCBHTF9GTEFHU1twYXJhbV0sICcpOycpLFxuICAgICAgICAgICAgQ1VSUkVOVF9TVEFURSwgJy4nLCBwYXJhbSwgJz0nLCBORVhULCAnOycpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWZ0ZShcbiAgICAgICAgICAgIEdMLCAnLicsIEdMX1ZBUklBQkxFU1twYXJhbV0sICcoJywgTkVYVCwgJyk7JyxcbiAgICAgICAgICAgIENVUlJFTlRfU1RBVEUsICcuJywgcGFyYW0sICc9JywgTkVYVCwgJzsnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICBpZiAoT2JqZWN0LmtleXMoYXJncy5zdGF0ZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICBibG9jayhDVVJSRU5UX1NUQVRFLCAnLmRpcnR5PWZhbHNlOycpXG4gICAgfVxuICAgIHNjb3BlKGJsb2NrKVxuICB9XG5cbiAgZnVuY3Rpb24gZW1pdFNldE9wdGlvbnMgKGVudiwgc2NvcGUsIG9wdGlvbnMsIGZpbHRlcikge1xuICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG4gICAgdmFyIENVUlJFTlRfVkFSUyA9IGVudi5jdXJyZW50XG4gICAgdmFyIENVUlJFTlRfU1RBVEUgPSBzaGFyZWQuY3VycmVudFxuICAgIHZhciBHTCA9IHNoYXJlZC5nbFxuICAgIHNvcnRTdGF0ZShPYmplY3Qua2V5cyhvcHRpb25zKSkuZm9yRWFjaChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHZhciBkZWZuID0gb3B0aW9uc1twYXJhbV1cbiAgICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlcihkZWZuKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHZhciB2YXJpYWJsZSA9IGRlZm4uYXBwZW5kKGVudiwgc2NvcGUpXG4gICAgICBpZiAoR0xfRkxBR1NbcGFyYW1dKSB7XG4gICAgICAgIHZhciBmbGFnID0gR0xfRkxBR1NbcGFyYW1dXG4gICAgICAgIGlmIChpc1N0YXRpYyhkZWZuKSkge1xuICAgICAgICAgIGlmICh2YXJpYWJsZSkge1xuICAgICAgICAgICAgc2NvcGUoR0wsICcuZW5hYmxlKCcsIGZsYWcsICcpOycpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNjb3BlKEdMLCAnLmRpc2FibGUoJywgZmxhZywgJyk7JylcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2NvcGUoZW52LmNvbmQodmFyaWFibGUpXG4gICAgICAgICAgICAudGhlbihHTCwgJy5lbmFibGUoJywgZmxhZywgJyk7JylcbiAgICAgICAgICAgIC5lbHNlKEdMLCAnLmRpc2FibGUoJywgZmxhZywgJyk7JykpXG4gICAgICAgIH1cbiAgICAgICAgc2NvcGUoQ1VSUkVOVF9TVEFURSwgJy4nLCBwYXJhbSwgJz0nLCB2YXJpYWJsZSwgJzsnKVxuICAgICAgfSBlbHNlIGlmIChpc0FycmF5TGlrZSh2YXJpYWJsZSkpIHtcbiAgICAgICAgdmFyIENVUlJFTlQgPSBDVVJSRU5UX1ZBUlNbcGFyYW1dXG4gICAgICAgIHNjb3BlKFxuICAgICAgICAgIEdMLCAnLicsIEdMX1ZBUklBQkxFU1twYXJhbV0sICcoJywgdmFyaWFibGUsICcpOycsXG4gICAgICAgICAgdmFyaWFibGUubWFwKGZ1bmN0aW9uICh2LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gQ1VSUkVOVCArICdbJyArIGkgKyAnXT0nICsgdlxuICAgICAgICAgIH0pLmpvaW4oJzsnKSwgJzsnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2NvcGUoXG4gICAgICAgICAgR0wsICcuJywgR0xfVkFSSUFCTEVTW3BhcmFtXSwgJygnLCB2YXJpYWJsZSwgJyk7JyxcbiAgICAgICAgICBDVVJSRU5UX1NUQVRFLCAnLicsIHBhcmFtLCAnPScsIHZhcmlhYmxlLCAnOycpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGluamVjdEV4dGVuc2lvbnMgKGVudiwgc2NvcGUpIHtcbiAgICBpZiAoZXh0SW5zdGFuY2luZykge1xuICAgICAgZW52Lmluc3RhbmNpbmcgPSBzY29wZS5kZWYoXG4gICAgICAgIGVudi5zaGFyZWQuZXh0ZW5zaW9ucywgJy5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzJylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbWl0UHJvZmlsZSAoZW52LCBzY29wZSwgYXJncywgdXNlU2NvcGUsIGluY3JlbWVudENvdW50ZXIpIHtcbiAgICB2YXIgc2hhcmVkID0gZW52LnNoYXJlZFxuICAgIHZhciBTVEFUUyA9IGVudi5zdGF0c1xuICAgIHZhciBDVVJSRU5UX1NUQVRFID0gc2hhcmVkLmN1cnJlbnRcbiAgICB2YXIgVElNRVIgPSBzaGFyZWQudGltZXJcbiAgICB2YXIgcHJvZmlsZUFyZyA9IGFyZ3MucHJvZmlsZVxuXG4gICAgZnVuY3Rpb24gcGVyZkNvdW50ZXIgKCkge1xuICAgICAgaWYgKHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICdEYXRlLm5vdygpJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICdwZXJmb3JtYW5jZS5ub3coKSdcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgQ1BVX1NUQVJULCBRVUVSWV9DT1VOVEVSXG4gICAgZnVuY3Rpb24gZW1pdFByb2ZpbGVTdGFydCAoYmxvY2spIHtcbiAgICAgIENQVV9TVEFSVCA9IHNjb3BlLmRlZigpXG4gICAgICBibG9jayhDUFVfU1RBUlQsICc9JywgcGVyZkNvdW50ZXIoKSwgJzsnKVxuICAgICAgaWYgKHR5cGVvZiBpbmNyZW1lbnRDb3VudGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICBibG9jayhTVEFUUywgJy5jb3VudCs9JywgaW5jcmVtZW50Q291bnRlciwgJzsnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmxvY2soU1RBVFMsICcuY291bnQrKzsnKVxuICAgICAgfVxuICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgIGlmICh1c2VTY29wZSkge1xuICAgICAgICAgIFFVRVJZX0NPVU5URVIgPSBzY29wZS5kZWYoKVxuICAgICAgICAgIGJsb2NrKFFVRVJZX0NPVU5URVIsICc9JywgVElNRVIsICcuZ2V0TnVtUGVuZGluZ1F1ZXJpZXMoKTsnKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJsb2NrKFRJTUVSLCAnLmJlZ2luUXVlcnkoJywgU1RBVFMsICcpOycpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbWl0UHJvZmlsZUVuZCAoYmxvY2spIHtcbiAgICAgIGJsb2NrKFNUQVRTLCAnLmNwdVRpbWUrPScsIHBlcmZDb3VudGVyKCksICctJywgQ1BVX1NUQVJULCAnOycpXG4gICAgICBpZiAodGltZXIpIHtcbiAgICAgICAgaWYgKHVzZVNjb3BlKSB7XG4gICAgICAgICAgYmxvY2soVElNRVIsICcucHVzaFNjb3BlU3RhdHMoJyxcbiAgICAgICAgICAgIFFVRVJZX0NPVU5URVIsICcsJyxcbiAgICAgICAgICAgIFRJTUVSLCAnLmdldE51bVBlbmRpbmdRdWVyaWVzKCksJyxcbiAgICAgICAgICAgIFNUQVRTLCAnKTsnKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJsb2NrKFRJTUVSLCAnLmVuZFF1ZXJ5KCk7JylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjb3BlUHJvZmlsZSAodmFsdWUpIHtcbiAgICAgIHZhciBwcmV2ID0gc2NvcGUuZGVmKENVUlJFTlRfU1RBVEUsICcucHJvZmlsZScpXG4gICAgICBzY29wZShDVVJSRU5UX1NUQVRFLCAnLnByb2ZpbGU9JywgdmFsdWUsICc7JylcbiAgICAgIHNjb3BlLmV4aXQoQ1VSUkVOVF9TVEFURSwgJy5wcm9maWxlPScsIHByZXYsICc7JylcbiAgICB9XG5cbiAgICB2YXIgVVNFX1BST0ZJTEVcbiAgICBpZiAocHJvZmlsZUFyZykge1xuICAgICAgaWYgKGlzU3RhdGljKHByb2ZpbGVBcmcpKSB7XG4gICAgICAgIGlmIChwcm9maWxlQXJnLmVuYWJsZSkge1xuICAgICAgICAgIGVtaXRQcm9maWxlU3RhcnQoc2NvcGUpXG4gICAgICAgICAgZW1pdFByb2ZpbGVFbmQoc2NvcGUuZXhpdClcbiAgICAgICAgICBzY29wZVByb2ZpbGUoJ3RydWUnKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjb3BlUHJvZmlsZSgnZmFsc2UnKVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgVVNFX1BST0ZJTEUgPSBwcm9maWxlQXJnLmFwcGVuZChlbnYsIHNjb3BlKVxuICAgICAgc2NvcGVQcm9maWxlKFVTRV9QUk9GSUxFKVxuICAgIH0gZWxzZSB7XG4gICAgICBVU0VfUFJPRklMRSA9IHNjb3BlLmRlZihDVVJSRU5UX1NUQVRFLCAnLnByb2ZpbGUnKVxuICAgIH1cblxuICAgIHZhciBzdGFydCA9IGVudi5ibG9jaygpXG4gICAgZW1pdFByb2ZpbGVTdGFydChzdGFydClcbiAgICBzY29wZSgnaWYoJywgVVNFX1BST0ZJTEUsICcpeycsIHN0YXJ0LCAnfScpXG4gICAgdmFyIGVuZCA9IGVudi5ibG9jaygpXG4gICAgZW1pdFByb2ZpbGVFbmQoZW5kKVxuICAgIHNjb3BlLmV4aXQoJ2lmKCcsIFVTRV9QUk9GSUxFLCAnKXsnLCBlbmQsICd9JylcbiAgfVxuXG4gIGZ1bmN0aW9uIGVtaXRBdHRyaWJ1dGVzIChlbnYsIHNjb3BlLCBhcmdzLCBhdHRyaWJ1dGVzLCBmaWx0ZXIpIHtcbiAgICB2YXIgc2hhcmVkID0gZW52LnNoYXJlZFxuXG4gICAgZnVuY3Rpb24gdHlwZUxlbmd0aCAoeCkge1xuICAgICAgc3dpdGNoICh4KSB7XG4gICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjpcbiAgICAgICAgY2FzZSBHTF9JTlRfVkVDMjpcbiAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6XG4gICAgICAgICAgcmV0dXJuIDJcbiAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOlxuICAgICAgICBjYXNlIEdMX0lOVF9WRUMzOlxuICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMzpcbiAgICAgICAgICByZXR1cm4gM1xuICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6XG4gICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6XG4gICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OlxuICAgICAgICAgIHJldHVybiA0XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIDFcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbWl0QmluZEF0dHJpYnV0ZSAoQVRUUklCVVRFLCBzaXplLCByZWNvcmQpIHtcbiAgICAgIHZhciBHTCA9IHNoYXJlZC5nbFxuXG4gICAgICB2YXIgTE9DQVRJT04gPSBzY29wZS5kZWYoQVRUUklCVVRFLCAnLmxvY2F0aW9uJylcbiAgICAgIHZhciBCSU5ESU5HID0gc2NvcGUuZGVmKHNoYXJlZC5hdHRyaWJ1dGVzLCAnWycsIExPQ0FUSU9OLCAnXScpXG5cbiAgICAgIHZhciBTVEFURSA9IHJlY29yZC5zdGF0ZVxuICAgICAgdmFyIEJVRkZFUiA9IHJlY29yZC5idWZmZXJcbiAgICAgIHZhciBDT05TVF9DT01QT05FTlRTID0gW1xuICAgICAgICByZWNvcmQueCxcbiAgICAgICAgcmVjb3JkLnksXG4gICAgICAgIHJlY29yZC56LFxuICAgICAgICByZWNvcmQud1xuICAgICAgXVxuXG4gICAgICB2YXIgQ09NTU9OX0tFWVMgPSBbXG4gICAgICAgICdidWZmZXInLFxuICAgICAgICAnbm9ybWFsaXplZCcsXG4gICAgICAgICdvZmZzZXQnLFxuICAgICAgICAnc3RyaWRlJ1xuICAgICAgXVxuXG4gICAgICBmdW5jdGlvbiBlbWl0QnVmZmVyICgpIHtcbiAgICAgICAgc2NvcGUoXG4gICAgICAgICAgJ2lmKCEnLCBCSU5ESU5HLCAnLmJ1ZmZlcil7JyxcbiAgICAgICAgICBHTCwgJy5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgnLCBMT0NBVElPTiwgJyk7fScpXG5cbiAgICAgICAgdmFyIFRZUEUgPSByZWNvcmQudHlwZVxuICAgICAgICB2YXIgU0laRVxuICAgICAgICBpZiAoIXJlY29yZC5zaXplKSB7XG4gICAgICAgICAgU0laRSA9IHNpemVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBTSVpFID0gc2NvcGUuZGVmKHJlY29yZC5zaXplLCAnfHwnLCBzaXplKVxuICAgICAgICB9XG5cbiAgICAgICAgc2NvcGUoJ2lmKCcsXG4gICAgICAgICAgQklORElORywgJy50eXBlIT09JywgVFlQRSwgJ3x8JyxcbiAgICAgICAgICBCSU5ESU5HLCAnLnNpemUhPT0nLCBTSVpFLCAnfHwnLFxuICAgICAgICAgIENPTU1PTl9LRVlTLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gQklORElORyArICcuJyArIGtleSArICchPT0nICsgcmVjb3JkW2tleV1cbiAgICAgICAgICB9KS5qb2luKCd8fCcpLFxuICAgICAgICAgICcpeycsXG4gICAgICAgICAgR0wsICcuYmluZEJ1ZmZlcignLCBHTF9BUlJBWV9CVUZGRVIkMiwgJywnLCBCVUZGRVIsICcuYnVmZmVyKTsnLFxuICAgICAgICAgIEdMLCAnLnZlcnRleEF0dHJpYlBvaW50ZXIoJywgW1xuICAgICAgICAgICAgTE9DQVRJT04sXG4gICAgICAgICAgICBTSVpFLFxuICAgICAgICAgICAgVFlQRSxcbiAgICAgICAgICAgIHJlY29yZC5ub3JtYWxpemVkLFxuICAgICAgICAgICAgcmVjb3JkLnN0cmlkZSxcbiAgICAgICAgICAgIHJlY29yZC5vZmZzZXRcbiAgICAgICAgICBdLCAnKTsnLFxuICAgICAgICAgIEJJTkRJTkcsICcudHlwZT0nLCBUWVBFLCAnOycsXG4gICAgICAgICAgQklORElORywgJy5zaXplPScsIFNJWkUsICc7JyxcbiAgICAgICAgICBDT01NT05fS0VZUy5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIEJJTkRJTkcgKyAnLicgKyBrZXkgKyAnPScgKyByZWNvcmRba2V5XSArICc7J1xuICAgICAgICAgIH0pLmpvaW4oJycpLFxuICAgICAgICAgICd9JylcblxuICAgICAgICBpZiAoZXh0SW5zdGFuY2luZykge1xuICAgICAgICAgIHZhciBESVZJU09SID0gcmVjb3JkLmRpdmlzb3JcbiAgICAgICAgICBzY29wZShcbiAgICAgICAgICAgICdpZignLCBCSU5ESU5HLCAnLmRpdmlzb3IhPT0nLCBESVZJU09SLCAnKXsnLFxuICAgICAgICAgICAgZW52Lmluc3RhbmNpbmcsICcudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKCcsIFtMT0NBVElPTiwgRElWSVNPUl0sICcpOycsXG4gICAgICAgICAgICBCSU5ESU5HLCAnLmRpdmlzb3I9JywgRElWSVNPUiwgJzt9JylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBlbWl0Q29uc3RhbnQgKCkge1xuICAgICAgICBzY29wZShcbiAgICAgICAgICAnaWYoJywgQklORElORywgJy5idWZmZXIpeycsXG4gICAgICAgICAgR0wsICcuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KCcsIExPQ0FUSU9OLCAnKTsnLFxuICAgICAgICAgIEJJTkRJTkcsICcuYnVmZmVyPW51bGw7JyxcbiAgICAgICAgICAnfWlmKCcsIENVVEVfQ09NUE9ORU5UUy5tYXAoZnVuY3Rpb24gKGMsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiBCSU5ESU5HICsgJy4nICsgYyArICchPT0nICsgQ09OU1RfQ09NUE9ORU5UU1tpXVxuICAgICAgICAgIH0pLmpvaW4oJ3x8JyksICcpeycsXG4gICAgICAgICAgR0wsICcudmVydGV4QXR0cmliNGYoJywgTE9DQVRJT04sICcsJywgQ09OU1RfQ09NUE9ORU5UUywgJyk7JyxcbiAgICAgICAgICBDVVRFX0NPTVBPTkVOVFMubWFwKGZ1bmN0aW9uIChjLCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gQklORElORyArICcuJyArIGMgKyAnPScgKyBDT05TVF9DT01QT05FTlRTW2ldICsgJzsnXG4gICAgICAgICAgfSkuam9pbignJyksXG4gICAgICAgICAgJ30nKVxuICAgICAgfVxuXG4gICAgICBpZiAoU1RBVEUgPT09IEFUVFJJQl9TVEFURV9QT0lOVEVSKSB7XG4gICAgICAgIGVtaXRCdWZmZXIoKVxuICAgICAgfSBlbHNlIGlmIChTVEFURSA9PT0gQVRUUklCX1NUQVRFX0NPTlNUQU5UKSB7XG4gICAgICAgIGVtaXRDb25zdGFudCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY29wZSgnaWYoJywgU1RBVEUsICc9PT0nLCBBVFRSSUJfU1RBVEVfUE9JTlRFUiwgJyl7JylcbiAgICAgICAgZW1pdEJ1ZmZlcigpXG4gICAgICAgIHNjb3BlKCd9ZWxzZXsnKVxuICAgICAgICBlbWl0Q29uc3RhbnQoKVxuICAgICAgICBzY29wZSgnfScpXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXR0cmlidXRlcy5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGUpIHtcbiAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlLm5hbWVcbiAgICAgIHZhciBhcmcgPSBhcmdzLmF0dHJpYnV0ZXNbbmFtZV1cbiAgICAgIHZhciByZWNvcmRcbiAgICAgIGlmIChhcmcpIHtcbiAgICAgICAgaWYgKCFmaWx0ZXIoYXJnKSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHJlY29yZCA9IGFyZy5hcHBlbmQoZW52LCBzY29wZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghZmlsdGVyKFNDT1BFX0RFQ0wpKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNjb3BlQXR0cmliID0gZW52LnNjb3BlQXR0cmliKG5hbWUpXG4gICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICBzY29wZUF0dHJpYiArICcuc3RhdGUnLFxuICAgICAgICAgICAgJ21pc3NpbmcgYXR0cmlidXRlICcgKyBuYW1lKVxuICAgICAgICB9KVxuICAgICAgICByZWNvcmQgPSB7fVxuICAgICAgICBPYmplY3Qua2V5cyhuZXcgQXR0cmlidXRlUmVjb3JkKCkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHJlY29yZFtrZXldID0gc2NvcGUuZGVmKHNjb3BlQXR0cmliLCAnLicsIGtleSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGVtaXRCaW5kQXR0cmlidXRlKFxuICAgICAgICBlbnYubGluayhhdHRyaWJ1dGUpLCB0eXBlTGVuZ3RoKGF0dHJpYnV0ZS5pbmZvLnR5cGUpLCByZWNvcmQpXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGVtaXRVbmlmb3JtcyAoZW52LCBzY29wZSwgYXJncywgdW5pZm9ybXMsIGZpbHRlcikge1xuICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG4gICAgdmFyIEdMID0gc2hhcmVkLmdsXG5cbiAgICB2YXIgaW5maXhcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1zLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgdW5pZm9ybSA9IHVuaWZvcm1zW2ldXG4gICAgICB2YXIgbmFtZSA9IHVuaWZvcm0ubmFtZVxuICAgICAgdmFyIHR5cGUgPSB1bmlmb3JtLmluZm8udHlwZVxuICAgICAgdmFyIGFyZyA9IGFyZ3MudW5pZm9ybXNbbmFtZV1cbiAgICAgIHZhciBVTklGT1JNID0gZW52LmxpbmsodW5pZm9ybSlcbiAgICAgIHZhciBMT0NBVElPTiA9IFVOSUZPUk0gKyAnLmxvY2F0aW9uJ1xuXG4gICAgICB2YXIgVkFMVUVcbiAgICAgIGlmIChhcmcpIHtcbiAgICAgICAgaWYgKCFmaWx0ZXIoYXJnKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3RhdGljKGFyZykpIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBhcmcudmFsdWVcbiAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnLFxuICAgICAgICAgICAgJ21pc3NpbmcgdW5pZm9ybSBcIicgKyBuYW1lICsgJ1wiJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgaWYgKHR5cGUgPT09IEdMX1NBTVBMRVJfMkQgfHwgdHlwZSA9PT0gR0xfU0FNUExFUl9DVUJFKSB7XG4gICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgICAgICAoKHR5cGUgPT09IEdMX1NBTVBMRVJfMkQgJiZcbiAgICAgICAgICAgICAgICAodmFsdWUuX3JlZ2xUeXBlID09PSAndGV4dHVyZTJkJyB8fFxuICAgICAgICAgICAgICAgIHZhbHVlLl9yZWdsVHlwZSA9PT0gJ2ZyYW1lYnVmZmVyJykpIHx8XG4gICAgICAgICAgICAgICh0eXBlID09PSBHTF9TQU1QTEVSX0NVQkUgJiZcbiAgICAgICAgICAgICAgICAodmFsdWUuX3JlZ2xUeXBlID09PSAndGV4dHVyZUN1YmUnIHx8XG4gICAgICAgICAgICAgICAgdmFsdWUuX3JlZ2xUeXBlID09PSAnZnJhbWVidWZmZXJDdWJlJykpKSxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgdGV4dHVyZSBmb3IgdW5pZm9ybSAnICsgbmFtZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICB2YXIgVEVYX1ZBTFVFID0gZW52LmxpbmsodmFsdWUuX3RleHR1cmUgfHwgdmFsdWUuY29sb3JbMF0uX3RleHR1cmUpXG4gICAgICAgICAgICBzY29wZShHTCwgJy51bmlmb3JtMWkoJywgTE9DQVRJT04sICcsJywgVEVYX1ZBTFVFICsgJy5iaW5kKCkpOycpXG4gICAgICAgICAgICBzY29wZS5leGl0KFRFWF9WQUxVRSwgJy51bmJpbmQoKTsnKVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0eXBlID09PSBHTF9GTE9BVF9NQVQyIHx8XG4gICAgICAgICAgICB0eXBlID09PSBHTF9GTE9BVF9NQVQzIHx8XG4gICAgICAgICAgICB0eXBlID09PSBHTF9GTE9BVF9NQVQ0KSB7XG4gICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKGlzQXJyYXlMaWtlKHZhbHVlKSxcbiAgICAgICAgICAgICAgICAnaW52YWxpZCBtYXRyaXggZm9yIHVuaWZvcm0gJyArIG5hbWUsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgKHR5cGUgPT09IEdMX0ZMT0FUX01BVDIgJiYgdmFsdWUubGVuZ3RoID09PSA0KSB8fFxuICAgICAgICAgICAgICAgICh0eXBlID09PSBHTF9GTE9BVF9NQVQzICYmIHZhbHVlLmxlbmd0aCA9PT0gOSkgfHxcbiAgICAgICAgICAgICAgICAodHlwZSA9PT0gR0xfRkxPQVRfTUFUNCAmJiB2YWx1ZS5sZW5ndGggPT09IDE2KSxcbiAgICAgICAgICAgICAgICAnaW52YWxpZCBsZW5ndGggZm9yIG1hdHJpeCB1bmlmb3JtICcgKyBuYW1lLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB2YXIgTUFUX1ZBTFVFID0gZW52Lmdsb2JhbC5kZWYoJ25ldyBGbG9hdDMyQXJyYXkoWycgK1xuICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh2YWx1ZSkgKyAnXSknKVxuICAgICAgICAgICAgdmFyIGRpbSA9IDJcbiAgICAgICAgICAgIGlmICh0eXBlID09PSBHTF9GTE9BVF9NQVQzKSB7XG4gICAgICAgICAgICAgIGRpbSA9IDNcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gR0xfRkxPQVRfTUFUNCkge1xuICAgICAgICAgICAgICBkaW0gPSA0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzY29wZShcbiAgICAgICAgICAgICAgR0wsICcudW5pZm9ybU1hdHJpeCcsIGRpbSwgJ2Z2KCcsXG4gICAgICAgICAgICAgIExPQ0FUSU9OLCAnLGZhbHNlLCcsIE1BVF9WQUxVRSwgJyk7JylcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQkODpcbiAgICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRUeXBlKHZhbHVlLCAnbnVtYmVyJywgJ3VuaWZvcm0gJyArIG5hbWUsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICAgIGluZml4ID0gJzFmJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjpcbiAgICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgICBpc0FycmF5TGlrZSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAyLFxuICAgICAgICAgICAgICAgICAgJ3VuaWZvcm0gJyArIG5hbWUsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICAgIGluZml4ID0gJzJmJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzpcbiAgICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgICBpc0FycmF5TGlrZSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAzLFxuICAgICAgICAgICAgICAgICAgJ3VuaWZvcm0gJyArIG5hbWUsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICAgIGluZml4ID0gJzNmJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDpcbiAgICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgICBpc0FycmF5TGlrZSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSA0LFxuICAgICAgICAgICAgICAgICAgJ3VuaWZvcm0gJyArIG5hbWUsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICAgIGluZml4ID0gJzRmJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDpcbiAgICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRUeXBlKHZhbHVlLCAnYm9vbGVhbicsICd1bmlmb3JtICcgKyBuYW1lLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgICBpbmZpeCA9ICcxaSdcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIEdMX0lOVCQzOlxuICAgICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFR5cGUodmFsdWUsICdudW1iZXInLCAndW5pZm9ybSAnICsgbmFtZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgICAgaW5maXggPSAnMWknXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6XG4gICAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgICAgICAgaXNBcnJheUxpa2UodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMixcbiAgICAgICAgICAgICAgICAgICd1bmlmb3JtICcgKyBuYW1lLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgICBpbmZpeCA9ICcyaSdcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMyOlxuICAgICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICAgIGlzQXJyYXlMaWtlKHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDIsXG4gICAgICAgICAgICAgICAgICAndW5pZm9ybSAnICsgbmFtZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgICAgaW5maXggPSAnMmknXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6XG4gICAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgICAgICAgaXNBcnJheUxpa2UodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMyxcbiAgICAgICAgICAgICAgICAgICd1bmlmb3JtICcgKyBuYW1lLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgICBpbmZpeCA9ICczaSdcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMzOlxuICAgICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICAgIGlzQXJyYXlMaWtlKHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDMsXG4gICAgICAgICAgICAgICAgICAndW5pZm9ybSAnICsgbmFtZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgICAgaW5maXggPSAnM2knXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6XG4gICAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgICAgICAgaXNBcnJheUxpa2UodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gNCxcbiAgICAgICAgICAgICAgICAgICd1bmlmb3JtICcgKyBuYW1lLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgICBpbmZpeCA9ICc0aSdcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OlxuICAgICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICAgIGlzQXJyYXlMaWtlKHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDQsXG4gICAgICAgICAgICAgICAgICAndW5pZm9ybSAnICsgbmFtZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgICAgaW5maXggPSAnNGknXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjb3BlKEdMLCAnLnVuaWZvcm0nLCBpbmZpeCwgJygnLCBMT0NBVElPTiwgJywnLFxuICAgICAgICAgICAgICBpc0FycmF5TGlrZSh2YWx1ZSkgPyBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh2YWx1ZSkgOiB2YWx1ZSxcbiAgICAgICAgICAgICAgJyk7JylcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBWQUxVRSA9IGFyZy5hcHBlbmQoZW52LCBzY29wZSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFmaWx0ZXIoU0NPUEVfREVDTCkpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIFZBTFVFID0gc2NvcGUuZGVmKHNoYXJlZC51bmlmb3JtcywgJ1snLCBzdHJpbmdTdG9yZS5pZChuYW1lKSwgJ10nKVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSA9PT0gR0xfU0FNUExFUl8yRCkge1xuICAgICAgICBjaGVjayQxKCFBcnJheS5pc0FycmF5KFZBTFVFKSwgJ211c3Qgc3BlY2lmeSBhIHNjYWxhciBwcm9wIGZvciB0ZXh0dXJlcycpXG4gICAgICAgIHNjb3BlKFxuICAgICAgICAgICdpZignLCBWQUxVRSwgJyYmJywgVkFMVUUsICcuX3JlZ2xUeXBlPT09XCJmcmFtZWJ1ZmZlclwiKXsnLFxuICAgICAgICAgIFZBTFVFLCAnPScsIFZBTFVFLCAnLmNvbG9yWzBdOycsXG4gICAgICAgICAgJ30nKVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBHTF9TQU1QTEVSX0NVQkUpIHtcbiAgICAgICAgY2hlY2skMSghQXJyYXkuaXNBcnJheShWQUxVRSksICdtdXN0IHNwZWNpZnkgYSBzY2FsYXIgcHJvcCBmb3IgY3ViZSBtYXBzJylcbiAgICAgICAgc2NvcGUoXG4gICAgICAgICAgJ2lmKCcsIFZBTFVFLCAnJiYnLCBWQUxVRSwgJy5fcmVnbFR5cGU9PT1cImZyYW1lYnVmZmVyQ3ViZVwiKXsnLFxuICAgICAgICAgIFZBTFVFLCAnPScsIFZBTFVFLCAnLmNvbG9yWzBdOycsXG4gICAgICAgICAgJ30nKVxuICAgICAgfVxuXG4gICAgICAvLyBwZXJmb3JtIHR5cGUgdmFsaWRhdGlvblxuICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZ1bmN0aW9uIGVtaXRDaGVjayAocHJlZCwgbWVzc2FnZSkge1xuICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsIHByZWQsXG4gICAgICAgICAgICAnYmFkIGRhdGEgb3IgbWlzc2luZyBmb3IgdW5pZm9ybSBcIicgKyBuYW1lICsgJ1wiLiAgJyArIG1lc3NhZ2UpXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjaGVja1R5cGUgKHR5cGUpIHtcbiAgICAgICAgICBjaGVjayQxKCFBcnJheS5pc0FycmF5KFZBTFVFKSwgJ211c3Qgbm90IHNwZWNpZnkgYW4gYXJyYXkgdHlwZSBmb3IgdW5pZm9ybScpXG4gICAgICAgICAgZW1pdENoZWNrKFxuICAgICAgICAgICAgJ3R5cGVvZiAnICsgVkFMVUUgKyAnPT09XCInICsgdHlwZSArICdcIicsXG4gICAgICAgICAgICAnaW52YWxpZCB0eXBlLCBleHBlY3RlZCAnICsgdHlwZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrVmVjdG9yIChuLCB0eXBlKSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoVkFMVUUpKSB7XG4gICAgICAgICAgICBjaGVjayQxKFZBTFVFLmxlbmd0aCA9PT0gbiwgJ211c3QgaGF2ZSBsZW5ndGggJyArIG4pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVtaXRDaGVjayhcbiAgICAgICAgICAgICAgc2hhcmVkLmlzQXJyYXlMaWtlICsgJygnICsgVkFMVUUgKyAnKSYmJyArIFZBTFVFICsgJy5sZW5ndGg9PT0nICsgbixcbiAgICAgICAgICAgICAgJ2ludmFsaWQgdmVjdG9yLCBzaG91bGQgaGF2ZSBsZW5ndGggJyArIG4sIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrVGV4dHVyZSAodGFyZ2V0KSB7XG4gICAgICAgICAgY2hlY2skMSghQXJyYXkuaXNBcnJheShWQUxVRSksICdtdXN0IG5vdCBzcGVjaWZ5IGEgdmFsdWUgdHlwZScpXG4gICAgICAgICAgZW1pdENoZWNrKFxuICAgICAgICAgICAgJ3R5cGVvZiAnICsgVkFMVUUgKyAnPT09XCJmdW5jdGlvblwiJiYnICtcbiAgICAgICAgICAgIFZBTFVFICsgJy5fcmVnbFR5cGU9PT1cInRleHR1cmUnICtcbiAgICAgICAgICAgICh0YXJnZXQgPT09IEdMX1RFWFRVUkVfMkQkMyA/ICcyZCcgOiAnQ3ViZScpICsgJ1wiJyxcbiAgICAgICAgICAgICdpbnZhbGlkIHRleHR1cmUgdHlwZScsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBHTF9JTlQkMzpcbiAgICAgICAgICAgIGNoZWNrVHlwZSgnbnVtYmVyJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMjpcbiAgICAgICAgICAgIGNoZWNrVmVjdG9yKDIsICdudW1iZXInKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMzOlxuICAgICAgICAgICAgY2hlY2tWZWN0b3IoMywgJ251bWJlcicpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6XG4gICAgICAgICAgICBjaGVja1ZlY3Rvcig0LCAnbnVtYmVyJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9GTE9BVCQ4OlxuICAgICAgICAgICAgY2hlY2tUeXBlKCdudW1iZXInKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6XG4gICAgICAgICAgICBjaGVja1ZlY3RvcigyLCAnbnVtYmVyJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOlxuICAgICAgICAgICAgY2hlY2tWZWN0b3IoMywgJ251bWJlcicpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDpcbiAgICAgICAgICAgIGNoZWNrVmVjdG9yKDQsICdudW1iZXInKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIEdMX0JPT0w6XG4gICAgICAgICAgICBjaGVja1R5cGUoJ2Jvb2xlYW4nKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMjpcbiAgICAgICAgICAgIGNoZWNrVmVjdG9yKDIsICdib29sZWFuJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6XG4gICAgICAgICAgICBjaGVja1ZlY3RvcigzLCAnYm9vbGVhbicpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OlxuICAgICAgICAgICAgY2hlY2tWZWN0b3IoNCwgJ2Jvb2xlYW4nKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6XG4gICAgICAgICAgICBjaGVja1ZlY3Rvcig0LCAnbnVtYmVyJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOlxuICAgICAgICAgICAgY2hlY2tWZWN0b3IoOSwgJ251bWJlcicpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDpcbiAgICAgICAgICAgIGNoZWNrVmVjdG9yKDE2LCAnbnVtYmVyJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOlxuICAgICAgICAgICAgY2hlY2tUZXh0dXJlKEdMX1RFWFRVUkVfMkQkMylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6XG4gICAgICAgICAgICBjaGVja1RleHR1cmUoR0xfVEVYVFVSRV9DVUJFX01BUCQyKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgdmFyIHVucm9sbCA9IDFcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6XG4gICAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOlxuICAgICAgICAgIHZhciBURVggPSBzY29wZS5kZWYoVkFMVUUsICcuX3RleHR1cmUnKVxuICAgICAgICAgIHNjb3BlKEdMLCAnLnVuaWZvcm0xaSgnLCBMT0NBVElPTiwgJywnLCBURVgsICcuYmluZCgpKTsnKVxuICAgICAgICAgIHNjb3BlLmV4aXQoVEVYLCAnLnVuYmluZCgpOycpXG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIEdMX0lOVCQzOlxuICAgICAgICBjYXNlIEdMX0JPT0w6XG4gICAgICAgICAgaW5maXggPSAnMWknXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIEdMX0lOVF9WRUMyOlxuICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMjpcbiAgICAgICAgICBpbmZpeCA9ICcyaSdcbiAgICAgICAgICB1bnJvbGwgPSAyXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIEdMX0lOVF9WRUMzOlxuICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMzpcbiAgICAgICAgICBpbmZpeCA9ICczaSdcbiAgICAgICAgICB1bnJvbGwgPSAzXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OlxuICAgICAgICBjYXNlIEdMX0JPT0xfVkVDNDpcbiAgICAgICAgICBpbmZpeCA9ICc0aSdcbiAgICAgICAgICB1bnJvbGwgPSA0XG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIEdMX0ZMT0FUJDg6XG4gICAgICAgICAgaW5maXggPSAnMWYnXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6XG4gICAgICAgICAgaW5maXggPSAnMmYnXG4gICAgICAgICAgdW5yb2xsID0gMlxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOlxuICAgICAgICAgIGluZml4ID0gJzNmJ1xuICAgICAgICAgIHVucm9sbCA9IDNcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDpcbiAgICAgICAgICBpbmZpeCA9ICc0ZidcbiAgICAgICAgICB1bnJvbGwgPSA0XG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6XG4gICAgICAgICAgaW5maXggPSAnTWF0cml4MmZ2J1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOlxuICAgICAgICAgIGluZml4ID0gJ01hdHJpeDNmdidcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDpcbiAgICAgICAgICBpbmZpeCA9ICdNYXRyaXg0ZnYnXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgc2NvcGUoR0wsICcudW5pZm9ybScsIGluZml4LCAnKCcsIExPQ0FUSU9OLCAnLCcpXG4gICAgICBpZiAoaW5maXguY2hhckF0KDApID09PSAnTScpIHtcbiAgICAgICAgdmFyIG1hdFNpemUgPSBNYXRoLnBvdyh0eXBlIC0gR0xfRkxPQVRfTUFUMiArIDIsIDIpXG4gICAgICAgIHZhciBTVE9SQUdFID0gZW52Lmdsb2JhbC5kZWYoJ25ldyBGbG9hdDMyQXJyYXkoJywgbWF0U2l6ZSwgJyknKVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShWQUxVRSkpIHtcbiAgICAgICAgICBzY29wZShcbiAgICAgICAgICAgICdmYWxzZSwoJyxcbiAgICAgICAgICAgIGxvb3AobWF0U2l6ZSwgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFNUT1JBR0UgKyAnWycgKyBpICsgJ109JyArIFZBTFVFW2ldXG4gICAgICAgICAgICB9KSwgJywnLCBTVE9SQUdFLCAnKScpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2NvcGUoXG4gICAgICAgICAgICAnZmFsc2UsKEFycmF5LmlzQXJyYXkoJywgVkFMVUUsICcpfHwnLCBWQUxVRSwgJyBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSk/JywgVkFMVUUsICc6KCcsXG4gICAgICAgICAgICBsb29wKG1hdFNpemUsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBTVE9SQUdFICsgJ1snICsgaSArICddPScgKyBWQUxVRSArICdbJyArIGkgKyAnXSdcbiAgICAgICAgICAgIH0pLCAnLCcsIFNUT1JBR0UsICcpJylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh1bnJvbGwgPiAxKSB7XG4gICAgICAgIHNjb3BlKGxvb3AodW5yb2xsLCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KFZBTFVFKSA/IFZBTFVFW2ldIDogVkFMVUUgKyAnWycgKyBpICsgJ10nXG4gICAgICAgIH0pKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hlY2skMSghQXJyYXkuaXNBcnJheShWQUxVRSksICd1bmlmb3JtIHZhbHVlIG11c3Qgbm90IGJlIGFuIGFycmF5JylcbiAgICAgICAgc2NvcGUoVkFMVUUpXG4gICAgICB9XG4gICAgICBzY29wZSgnKTsnKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVtaXREcmF3IChlbnYsIG91dGVyLCBpbm5lciwgYXJncykge1xuICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG4gICAgdmFyIEdMID0gc2hhcmVkLmdsXG4gICAgdmFyIERSQVdfU1RBVEUgPSBzaGFyZWQuZHJhd1xuXG4gICAgdmFyIGRyYXdPcHRpb25zID0gYXJncy5kcmF3XG5cbiAgICBmdW5jdGlvbiBlbWl0RWxlbWVudHMgKCkge1xuICAgICAgdmFyIGRlZm4gPSBkcmF3T3B0aW9ucy5lbGVtZW50c1xuICAgICAgdmFyIEVMRU1FTlRTXG4gICAgICB2YXIgc2NvcGUgPSBvdXRlclxuICAgICAgaWYgKGRlZm4pIHtcbiAgICAgICAgaWYgKChkZWZuLmNvbnRleHREZXAgJiYgYXJncy5jb250ZXh0RHluYW1pYykgfHwgZGVmbi5wcm9wRGVwKSB7XG4gICAgICAgICAgc2NvcGUgPSBpbm5lclxuICAgICAgICB9XG4gICAgICAgIEVMRU1FTlRTID0gZGVmbi5hcHBlbmQoZW52LCBzY29wZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIEVMRU1FTlRTID0gc2NvcGUuZGVmKERSQVdfU1RBVEUsICcuJywgU19FTEVNRU5UUylcbiAgICAgIH1cbiAgICAgIGlmIChFTEVNRU5UUykge1xuICAgICAgICBzY29wZShcbiAgICAgICAgICAnaWYoJyArIEVMRU1FTlRTICsgJyknICtcbiAgICAgICAgICBHTCArICcuYmluZEJ1ZmZlcignICsgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIkMSArICcsJyArIEVMRU1FTlRTICsgJy5idWZmZXIuYnVmZmVyKTsnKVxuICAgICAgfVxuICAgICAgcmV0dXJuIEVMRU1FTlRTXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW1pdENvdW50ICgpIHtcbiAgICAgIHZhciBkZWZuID0gZHJhd09wdGlvbnMuY291bnRcbiAgICAgIHZhciBDT1VOVFxuICAgICAgdmFyIHNjb3BlID0gb3V0ZXJcbiAgICAgIGlmIChkZWZuKSB7XG4gICAgICAgIGlmICgoZGVmbi5jb250ZXh0RGVwICYmIGFyZ3MuY29udGV4dER5bmFtaWMpIHx8IGRlZm4ucHJvcERlcCkge1xuICAgICAgICAgIHNjb3BlID0gaW5uZXJcbiAgICAgICAgfVxuICAgICAgICBDT1VOVCA9IGRlZm4uYXBwZW5kKGVudiwgc2NvcGUpXG4gICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChkZWZuLk1JU1NJTkcpIHtcbiAgICAgICAgICAgIGVudi5hc3NlcnQob3V0ZXIsICdmYWxzZScsICdtaXNzaW5nIHZlcnRleCBjb3VudCcpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkZWZuLkRZTkFNSUMpIHtcbiAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsIENPVU5UICsgJz49MCcsICdtaXNzaW5nIHZlcnRleCBjb3VudCcpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQ09VTlQgPSBzY29wZS5kZWYoRFJBV19TVEFURSwgJy4nLCBTX0NPVU5UKVxuICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLCBDT1VOVCArICc+PTAnLCAnbWlzc2luZyB2ZXJ0ZXggY291bnQnKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIENPVU5UXG4gICAgfVxuXG4gICAgdmFyIEVMRU1FTlRTID0gZW1pdEVsZW1lbnRzKClcbiAgICBmdW5jdGlvbiBlbWl0VmFsdWUgKG5hbWUpIHtcbiAgICAgIHZhciBkZWZuID0gZHJhd09wdGlvbnNbbmFtZV1cbiAgICAgIGlmIChkZWZuKSB7XG4gICAgICAgIGlmICgoZGVmbi5jb250ZXh0RGVwICYmIGFyZ3MuY29udGV4dER5bmFtaWMpIHx8IGRlZm4ucHJvcERlcCkge1xuICAgICAgICAgIHJldHVybiBkZWZuLmFwcGVuZChlbnYsIGlubmVyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBkZWZuLmFwcGVuZChlbnYsIG91dGVyKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gb3V0ZXIuZGVmKERSQVdfU1RBVEUsICcuJywgbmFtZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgUFJJTUlUSVZFID0gZW1pdFZhbHVlKFNfUFJJTUlUSVZFKVxuICAgIHZhciBPRkZTRVQgPSBlbWl0VmFsdWUoU19PRkZTRVQpXG5cbiAgICB2YXIgQ09VTlQgPSBlbWl0Q291bnQoKVxuICAgIGlmICh0eXBlb2YgQ09VTlQgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoQ09VTlQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlubmVyKCdpZignLCBDT1VOVCwgJyl7JylcbiAgICAgIGlubmVyLmV4aXQoJ30nKVxuICAgIH1cblxuICAgIHZhciBJTlNUQU5DRVMsIEVYVF9JTlNUQU5DSU5HXG4gICAgaWYgKGV4dEluc3RhbmNpbmcpIHtcbiAgICAgIElOU1RBTkNFUyA9IGVtaXRWYWx1ZShTX0lOU1RBTkNFUylcbiAgICAgIEVYVF9JTlNUQU5DSU5HID0gZW52Lmluc3RhbmNpbmdcbiAgICB9XG5cbiAgICB2YXIgRUxFTUVOVF9UWVBFID0gRUxFTUVOVFMgKyAnLnR5cGUnXG5cbiAgICB2YXIgZWxlbWVudHNTdGF0aWMgPSBkcmF3T3B0aW9ucy5lbGVtZW50cyAmJiBpc1N0YXRpYyhkcmF3T3B0aW9ucy5lbGVtZW50cylcblxuICAgIGZ1bmN0aW9uIGVtaXRJbnN0YW5jaW5nICgpIHtcbiAgICAgIGZ1bmN0aW9uIGRyYXdFbGVtZW50cyAoKSB7XG4gICAgICAgIGlubmVyKEVYVF9JTlNUQU5DSU5HLCAnLmRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKCcsIFtcbiAgICAgICAgICBQUklNSVRJVkUsXG4gICAgICAgICAgQ09VTlQsXG4gICAgICAgICAgRUxFTUVOVF9UWVBFLFxuICAgICAgICAgIE9GRlNFVCArICc8PCgoJyArIEVMRU1FTlRfVFlQRSArICctJyArIEdMX1VOU0lHTkVEX0JZVEUkOCArICcpPj4xKScsXG4gICAgICAgICAgSU5TVEFOQ0VTXG4gICAgICAgIF0sICcpOycpXG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGRyYXdBcnJheXMgKCkge1xuICAgICAgICBpbm5lcihFWFRfSU5TVEFOQ0lORywgJy5kcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoJyxcbiAgICAgICAgICBbUFJJTUlUSVZFLCBPRkZTRVQsIENPVU5ULCBJTlNUQU5DRVNdLCAnKTsnKVxuICAgICAgfVxuXG4gICAgICBpZiAoRUxFTUVOVFMpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50c1N0YXRpYykge1xuICAgICAgICAgIGlubmVyKCdpZignLCBFTEVNRU5UUywgJyl7JylcbiAgICAgICAgICBkcmF3RWxlbWVudHMoKVxuICAgICAgICAgIGlubmVyKCd9ZWxzZXsnKVxuICAgICAgICAgIGRyYXdBcnJheXMoKVxuICAgICAgICAgIGlubmVyKCd9JylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkcmF3RWxlbWVudHMoKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkcmF3QXJyYXlzKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbWl0UmVndWxhciAoKSB7XG4gICAgICBmdW5jdGlvbiBkcmF3RWxlbWVudHMgKCkge1xuICAgICAgICBpbm5lcihHTCArICcuZHJhd0VsZW1lbnRzKCcgKyBbXG4gICAgICAgICAgUFJJTUlUSVZFLFxuICAgICAgICAgIENPVU5ULFxuICAgICAgICAgIEVMRU1FTlRfVFlQRSxcbiAgICAgICAgICBPRkZTRVQgKyAnPDwoKCcgKyBFTEVNRU5UX1RZUEUgKyAnLScgKyBHTF9VTlNJR05FRF9CWVRFJDggKyAnKT4+MSknXG4gICAgICAgIF0gKyAnKTsnKVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBkcmF3QXJyYXlzICgpIHtcbiAgICAgICAgaW5uZXIoR0wgKyAnLmRyYXdBcnJheXMoJyArIFtQUklNSVRJVkUsIE9GRlNFVCwgQ09VTlRdICsgJyk7JylcbiAgICAgIH1cblxuICAgICAgaWYgKEVMRU1FTlRTKSB7XG4gICAgICAgIGlmICghZWxlbWVudHNTdGF0aWMpIHtcbiAgICAgICAgICBpbm5lcignaWYoJywgRUxFTUVOVFMsICcpeycpXG4gICAgICAgICAgZHJhd0VsZW1lbnRzKClcbiAgICAgICAgICBpbm5lcignfWVsc2V7JylcbiAgICAgICAgICBkcmF3QXJyYXlzKClcbiAgICAgICAgICBpbm5lcignfScpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZHJhd0VsZW1lbnRzKClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHJhd0FycmF5cygpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV4dEluc3RhbmNpbmcgJiYgKHR5cGVvZiBJTlNUQU5DRVMgIT09ICdudW1iZXInIHx8IElOU1RBTkNFUyA+PSAwKSkge1xuICAgICAgaWYgKHR5cGVvZiBJTlNUQU5DRVMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlubmVyKCdpZignLCBJTlNUQU5DRVMsICc+MCl7JylcbiAgICAgICAgZW1pdEluc3RhbmNpbmcoKVxuICAgICAgICBpbm5lcignfWVsc2UgaWYoJywgSU5TVEFOQ0VTLCAnPDApeycpXG4gICAgICAgIGVtaXRSZWd1bGFyKClcbiAgICAgICAgaW5uZXIoJ30nKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW1pdEluc3RhbmNpbmcoKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbWl0UmVndWxhcigpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQm9keSAoZW1pdEJvZHksIHBhcmVudEVudiwgYXJncywgcHJvZ3JhbSwgY291bnQpIHtcbiAgICB2YXIgZW52ID0gY3JlYXRlUkVHTEVudmlyb25tZW50KClcbiAgICB2YXIgc2NvcGUgPSBlbnYucHJvYygnYm9keScsIGNvdW50KVxuICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgZW52LmNvbW1hbmRTdHIgPSBwYXJlbnRFbnYuY29tbWFuZFN0clxuICAgICAgZW52LmNvbW1hbmQgPSBlbnYubGluayhwYXJlbnRFbnYuY29tbWFuZFN0cilcbiAgICB9KVxuICAgIGlmIChleHRJbnN0YW5jaW5nKSB7XG4gICAgICBlbnYuaW5zdGFuY2luZyA9IHNjb3BlLmRlZihcbiAgICAgICAgZW52LnNoYXJlZC5leHRlbnNpb25zLCAnLmFuZ2xlX2luc3RhbmNlZF9hcnJheXMnKVxuICAgIH1cbiAgICBlbWl0Qm9keShlbnYsIHNjb3BlLCBhcmdzLCBwcm9ncmFtKVxuICAgIHJldHVybiBlbnYuY29tcGlsZSgpLmJvZHlcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRFJBVyBQUk9DXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgZnVuY3Rpb24gZW1pdERyYXdCb2R5IChlbnYsIGRyYXcsIGFyZ3MsIHByb2dyYW0pIHtcbiAgICBpbmplY3RFeHRlbnNpb25zKGVudiwgZHJhdylcbiAgICBpZiAoYXJncy51c2VWQU8pIHtcbiAgICAgIGlmIChhcmdzLmRyYXdWQU8pIHtcbiAgICAgICAgZHJhdyhlbnYuc2hhcmVkLnZhbywgJy5zZXRWQU8oJywgYXJncy5kcmF3VkFPLmFwcGVuZChlbnYsIGRyYXcpLCAnKTsnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHJhdyhlbnYuc2hhcmVkLnZhbywgJy5zZXRWQU8oJywgZW52LnNoYXJlZC52YW8sICcudGFyZ2V0VkFPKTsnKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkcmF3KGVudi5zaGFyZWQudmFvLCAnLnNldFZBTyhudWxsKTsnKVxuICAgICAgZW1pdEF0dHJpYnV0ZXMoZW52LCBkcmF3LCBhcmdzLCBwcm9ncmFtLmF0dHJpYnV0ZXMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0pXG4gICAgfVxuICAgIGVtaXRVbmlmb3JtcyhlbnYsIGRyYXcsIGFyZ3MsIHByb2dyYW0udW5pZm9ybXMsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSlcbiAgICBlbWl0RHJhdyhlbnYsIGRyYXcsIGRyYXcsIGFyZ3MpXG4gIH1cblxuICBmdW5jdGlvbiBlbWl0RHJhd1Byb2MgKGVudiwgYXJncykge1xuICAgIHZhciBkcmF3ID0gZW52LnByb2MoJ2RyYXcnLCAxKVxuXG4gICAgaW5qZWN0RXh0ZW5zaW9ucyhlbnYsIGRyYXcpXG5cbiAgICBlbWl0Q29udGV4dChlbnYsIGRyYXcsIGFyZ3MuY29udGV4dClcbiAgICBlbWl0UG9sbEZyYW1lYnVmZmVyKGVudiwgZHJhdywgYXJncy5mcmFtZWJ1ZmZlcilcblxuICAgIGVtaXRQb2xsU3RhdGUoZW52LCBkcmF3LCBhcmdzKVxuICAgIGVtaXRTZXRPcHRpb25zKGVudiwgZHJhdywgYXJncy5zdGF0ZSlcblxuICAgIGVtaXRQcm9maWxlKGVudiwgZHJhdywgYXJncywgZmFsc2UsIHRydWUpXG5cbiAgICB2YXIgcHJvZ3JhbSA9IGFyZ3Muc2hhZGVyLnByb2dWYXIuYXBwZW5kKGVudiwgZHJhdylcbiAgICBkcmF3KGVudi5zaGFyZWQuZ2wsICcudXNlUHJvZ3JhbSgnLCBwcm9ncmFtLCAnLnByb2dyYW0pOycpXG5cbiAgICBpZiAoYXJncy5zaGFkZXIucHJvZ3JhbSkge1xuICAgICAgZW1pdERyYXdCb2R5KGVudiwgZHJhdywgYXJncywgYXJncy5zaGFkZXIucHJvZ3JhbSlcbiAgICB9IGVsc2Uge1xuICAgICAgZHJhdyhlbnYuc2hhcmVkLnZhbywgJy5zZXRWQU8obnVsbCk7JylcbiAgICAgIHZhciBkcmF3Q2FjaGUgPSBlbnYuZ2xvYmFsLmRlZigne30nKVxuICAgICAgdmFyIFBST0dfSUQgPSBkcmF3LmRlZihwcm9ncmFtLCAnLmlkJylcbiAgICAgIHZhciBDQUNIRURfUFJPQyA9IGRyYXcuZGVmKGRyYXdDYWNoZSwgJ1snLCBQUk9HX0lELCAnXScpXG4gICAgICBkcmF3KFxuICAgICAgICBlbnYuY29uZChDQUNIRURfUFJPQylcbiAgICAgICAgICAudGhlbihDQUNIRURfUFJPQywgJy5jYWxsKHRoaXMsYTApOycpXG4gICAgICAgICAgLmVsc2UoXG4gICAgICAgICAgICBDQUNIRURfUFJPQywgJz0nLCBkcmF3Q2FjaGUsICdbJywgUFJPR19JRCwgJ109JyxcbiAgICAgICAgICAgIGVudi5saW5rKGZ1bmN0aW9uIChwcm9ncmFtKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjcmVhdGVCb2R5KGVtaXREcmF3Qm9keSwgZW52LCBhcmdzLCBwcm9ncmFtLCAxKVxuICAgICAgICAgICAgfSksICcoJywgcHJvZ3JhbSwgJyk7JyxcbiAgICAgICAgICAgIENBQ0hFRF9QUk9DLCAnLmNhbGwodGhpcyxhMCk7JykpXG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKGFyZ3Muc3RhdGUpLmxlbmd0aCA+IDApIHtcbiAgICAgIGRyYXcoZW52LnNoYXJlZC5jdXJyZW50LCAnLmRpcnR5PXRydWU7JylcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEJBVENIIFBST0NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGZ1bmN0aW9uIGVtaXRCYXRjaER5bmFtaWNTaGFkZXJCb2R5IChlbnYsIHNjb3BlLCBhcmdzLCBwcm9ncmFtKSB7XG4gICAgZW52LmJhdGNoSWQgPSAnYTEnXG5cbiAgICBpbmplY3RFeHRlbnNpb25zKGVudiwgc2NvcGUpXG5cbiAgICBmdW5jdGlvbiBhbGwgKCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBlbWl0QXR0cmlidXRlcyhlbnYsIHNjb3BlLCBhcmdzLCBwcm9ncmFtLmF0dHJpYnV0ZXMsIGFsbClcbiAgICBlbWl0VW5pZm9ybXMoZW52LCBzY29wZSwgYXJncywgcHJvZ3JhbS51bmlmb3JtcywgYWxsKVxuICAgIGVtaXREcmF3KGVudiwgc2NvcGUsIHNjb3BlLCBhcmdzKVxuICB9XG5cbiAgZnVuY3Rpb24gZW1pdEJhdGNoQm9keSAoZW52LCBzY29wZSwgYXJncywgcHJvZ3JhbSkge1xuICAgIGluamVjdEV4dGVuc2lvbnMoZW52LCBzY29wZSlcblxuICAgIHZhciBjb250ZXh0RHluYW1pYyA9IGFyZ3MuY29udGV4dERlcFxuXG4gICAgdmFyIEJBVENIX0lEID0gc2NvcGUuZGVmKClcbiAgICB2YXIgUFJPUF9MSVNUID0gJ2EwJ1xuICAgIHZhciBOVU1fUFJPUFMgPSAnYTEnXG4gICAgdmFyIFBST1BTID0gc2NvcGUuZGVmKClcbiAgICBlbnYuc2hhcmVkLnByb3BzID0gUFJPUFNcbiAgICBlbnYuYmF0Y2hJZCA9IEJBVENIX0lEXG5cbiAgICB2YXIgb3V0ZXIgPSBlbnYuc2NvcGUoKVxuICAgIHZhciBpbm5lciA9IGVudi5zY29wZSgpXG5cbiAgICBzY29wZShcbiAgICAgIG91dGVyLmVudHJ5LFxuICAgICAgJ2ZvcignLCBCQVRDSF9JRCwgJz0wOycsIEJBVENIX0lELCAnPCcsIE5VTV9QUk9QUywgJzsrKycsIEJBVENIX0lELCAnKXsnLFxuICAgICAgUFJPUFMsICc9JywgUFJPUF9MSVNULCAnWycsIEJBVENIX0lELCAnXTsnLFxuICAgICAgaW5uZXIsXG4gICAgICAnfScsXG4gICAgICBvdXRlci5leGl0KVxuXG4gICAgZnVuY3Rpb24gaXNJbm5lckRlZm4gKGRlZm4pIHtcbiAgICAgIHJldHVybiAoKGRlZm4uY29udGV4dERlcCAmJiBjb250ZXh0RHluYW1pYykgfHwgZGVmbi5wcm9wRGVwKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT3V0ZXJEZWZuIChkZWZuKSB7XG4gICAgICByZXR1cm4gIWlzSW5uZXJEZWZuKGRlZm4pXG4gICAgfVxuXG4gICAgaWYgKGFyZ3MubmVlZHNDb250ZXh0KSB7XG4gICAgICBlbWl0Q29udGV4dChlbnYsIGlubmVyLCBhcmdzLmNvbnRleHQpXG4gICAgfVxuICAgIGlmIChhcmdzLm5lZWRzRnJhbWVidWZmZXIpIHtcbiAgICAgIGVtaXRQb2xsRnJhbWVidWZmZXIoZW52LCBpbm5lciwgYXJncy5mcmFtZWJ1ZmZlcilcbiAgICB9XG4gICAgZW1pdFNldE9wdGlvbnMoZW52LCBpbm5lciwgYXJncy5zdGF0ZSwgaXNJbm5lckRlZm4pXG5cbiAgICBpZiAoYXJncy5wcm9maWxlICYmIGlzSW5uZXJEZWZuKGFyZ3MucHJvZmlsZSkpIHtcbiAgICAgIGVtaXRQcm9maWxlKGVudiwgaW5uZXIsIGFyZ3MsIGZhbHNlLCB0cnVlKVxuICAgIH1cblxuICAgIGlmICghcHJvZ3JhbSkge1xuICAgICAgdmFyIHByb2dDYWNoZSA9IGVudi5nbG9iYWwuZGVmKCd7fScpXG4gICAgICB2YXIgUFJPR1JBTSA9IGFyZ3Muc2hhZGVyLnByb2dWYXIuYXBwZW5kKGVudiwgaW5uZXIpXG4gICAgICB2YXIgUFJPR19JRCA9IGlubmVyLmRlZihQUk9HUkFNLCAnLmlkJylcbiAgICAgIHZhciBDQUNIRURfUFJPQyA9IGlubmVyLmRlZihwcm9nQ2FjaGUsICdbJywgUFJPR19JRCwgJ10nKVxuICAgICAgaW5uZXIoXG4gICAgICAgIGVudi5zaGFyZWQuZ2wsICcudXNlUHJvZ3JhbSgnLCBQUk9HUkFNLCAnLnByb2dyYW0pOycsXG4gICAgICAgICdpZighJywgQ0FDSEVEX1BST0MsICcpeycsXG4gICAgICAgIENBQ0hFRF9QUk9DLCAnPScsIHByb2dDYWNoZSwgJ1snLCBQUk9HX0lELCAnXT0nLFxuICAgICAgICBlbnYubGluayhmdW5jdGlvbiAocHJvZ3JhbSkge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVCb2R5KFxuICAgICAgICAgICAgZW1pdEJhdGNoRHluYW1pY1NoYWRlckJvZHksIGVudiwgYXJncywgcHJvZ3JhbSwgMilcbiAgICAgICAgfSksICcoJywgUFJPR1JBTSwgJyk7fScsXG4gICAgICAgIENBQ0hFRF9QUk9DLCAnLmNhbGwodGhpcyxhMFsnLCBCQVRDSF9JRCwgJ10sJywgQkFUQ0hfSUQsICcpOycpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChhcmdzLnVzZVZBTykge1xuICAgICAgICBpZiAoYXJncy5kcmF3VkFPKSB7XG4gICAgICAgICAgaWYgKGlzSW5uZXJEZWZuKGFyZ3MuZHJhd1ZBTykpIHtcbiAgICAgICAgICAgIC8vIHZhbyBpcyBhIHByb3BcbiAgICAgICAgICAgIGlubmVyKGVudi5zaGFyZWQudmFvLCAnLnNldFZBTygnLCBhcmdzLmRyYXdWQU8uYXBwZW5kKGVudiwgaW5uZXIpLCAnKTsnKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB2YW8gaXMgaW52YXJpYW50XG4gICAgICAgICAgICBvdXRlcihlbnYuc2hhcmVkLnZhbywgJy5zZXRWQU8oJywgYXJncy5kcmF3VkFPLmFwcGVuZChlbnYsIG91dGVyKSwgJyk7JylcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gc2NvcGVkIHZhbyBiaW5kaW5nXG4gICAgICAgICAgb3V0ZXIoZW52LnNoYXJlZC52YW8sICcuc2V0VkFPKCcsIGVudi5zaGFyZWQudmFvLCAnLnRhcmdldFZBTyk7JylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ZXIoZW52LnNoYXJlZC52YW8sICcuc2V0VkFPKG51bGwpOycpXG4gICAgICAgIGVtaXRBdHRyaWJ1dGVzKGVudiwgb3V0ZXIsIGFyZ3MsIHByb2dyYW0uYXR0cmlidXRlcywgaXNPdXRlckRlZm4pXG4gICAgICAgIGVtaXRBdHRyaWJ1dGVzKGVudiwgaW5uZXIsIGFyZ3MsIHByb2dyYW0uYXR0cmlidXRlcywgaXNJbm5lckRlZm4pXG4gICAgICB9XG4gICAgICBlbWl0VW5pZm9ybXMoZW52LCBvdXRlciwgYXJncywgcHJvZ3JhbS51bmlmb3JtcywgaXNPdXRlckRlZm4pXG4gICAgICBlbWl0VW5pZm9ybXMoZW52LCBpbm5lciwgYXJncywgcHJvZ3JhbS51bmlmb3JtcywgaXNJbm5lckRlZm4pXG4gICAgICBlbWl0RHJhdyhlbnYsIG91dGVyLCBpbm5lciwgYXJncylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbWl0QmF0Y2hQcm9jIChlbnYsIGFyZ3MpIHtcbiAgICB2YXIgYmF0Y2ggPSBlbnYucHJvYygnYmF0Y2gnLCAyKVxuICAgIGVudi5iYXRjaElkID0gJzAnXG5cbiAgICBpbmplY3RFeHRlbnNpb25zKGVudiwgYmF0Y2gpXG5cbiAgICAvLyBDaGVjayBpZiBhbnkgY29udGV4dCB2YXJpYWJsZXMgZGVwZW5kIG9uIHByb3BzXG4gICAgdmFyIGNvbnRleHREeW5hbWljID0gZmFsc2VcbiAgICB2YXIgbmVlZHNDb250ZXh0ID0gdHJ1ZVxuICAgIE9iamVjdC5rZXlzKGFyZ3MuY29udGV4dCkuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgY29udGV4dER5bmFtaWMgPSBjb250ZXh0RHluYW1pYyB8fCBhcmdzLmNvbnRleHRbbmFtZV0ucHJvcERlcFxuICAgIH0pXG4gICAgaWYgKCFjb250ZXh0RHluYW1pYykge1xuICAgICAgZW1pdENvbnRleHQoZW52LCBiYXRjaCwgYXJncy5jb250ZXh0KVxuICAgICAgbmVlZHNDb250ZXh0ID0gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBmcmFtZWJ1ZmZlciBzdGF0ZSBhZmZlY3RzIGZyYW1lYnVmZmVyV2lkdGgvaGVpZ2h0IGNvbnRleHQgdmFyc1xuICAgIHZhciBmcmFtZWJ1ZmZlciA9IGFyZ3MuZnJhbWVidWZmZXJcbiAgICB2YXIgbmVlZHNGcmFtZWJ1ZmZlciA9IGZhbHNlXG4gICAgaWYgKGZyYW1lYnVmZmVyKSB7XG4gICAgICBpZiAoZnJhbWVidWZmZXIucHJvcERlcCkge1xuICAgICAgICBjb250ZXh0RHluYW1pYyA9IG5lZWRzRnJhbWVidWZmZXIgPSB0cnVlXG4gICAgICB9IGVsc2UgaWYgKGZyYW1lYnVmZmVyLmNvbnRleHREZXAgJiYgY29udGV4dER5bmFtaWMpIHtcbiAgICAgICAgbmVlZHNGcmFtZWJ1ZmZlciA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmICghbmVlZHNGcmFtZWJ1ZmZlcikge1xuICAgICAgICBlbWl0UG9sbEZyYW1lYnVmZmVyKGVudiwgYmF0Y2gsIGZyYW1lYnVmZmVyKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbWl0UG9sbEZyYW1lYnVmZmVyKGVudiwgYmF0Y2gsIG51bGwpXG4gICAgfVxuXG4gICAgLy8gdmlld3BvcnQgaXMgd2VpcmQgYmVjYXVzZSBpdCBjYW4gYWZmZWN0IGNvbnRleHQgdmFyc1xuICAgIGlmIChhcmdzLnN0YXRlLnZpZXdwb3J0ICYmIGFyZ3Muc3RhdGUudmlld3BvcnQucHJvcERlcCkge1xuICAgICAgY29udGV4dER5bmFtaWMgPSB0cnVlXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNJbm5lckRlZm4gKGRlZm4pIHtcbiAgICAgIHJldHVybiAoZGVmbi5jb250ZXh0RGVwICYmIGNvbnRleHREeW5hbWljKSB8fCBkZWZuLnByb3BEZXBcbiAgICB9XG5cbiAgICAvLyBzZXQgd2ViZ2wgb3B0aW9uc1xuICAgIGVtaXRQb2xsU3RhdGUoZW52LCBiYXRjaCwgYXJncylcbiAgICBlbWl0U2V0T3B0aW9ucyhlbnYsIGJhdGNoLCBhcmdzLnN0YXRlLCBmdW5jdGlvbiAoZGVmbikge1xuICAgICAgcmV0dXJuICFpc0lubmVyRGVmbihkZWZuKVxuICAgIH0pXG5cbiAgICBpZiAoIWFyZ3MucHJvZmlsZSB8fCAhaXNJbm5lckRlZm4oYXJncy5wcm9maWxlKSkge1xuICAgICAgZW1pdFByb2ZpbGUoZW52LCBiYXRjaCwgYXJncywgZmFsc2UsICdhMScpXG4gICAgfVxuXG4gICAgLy8gU2F2ZSB0aGVzZSB2YWx1ZXMgdG8gYXJncyBzbyB0aGF0IHRoZSBiYXRjaCBib2R5IHJvdXRpbmUgY2FuIHVzZSB0aGVtXG4gICAgYXJncy5jb250ZXh0RGVwID0gY29udGV4dER5bmFtaWNcbiAgICBhcmdzLm5lZWRzQ29udGV4dCA9IG5lZWRzQ29udGV4dFxuICAgIGFyZ3MubmVlZHNGcmFtZWJ1ZmZlciA9IG5lZWRzRnJhbWVidWZmZXJcblxuICAgIC8vIGRldGVybWluZSBpZiBzaGFkZXIgaXMgZHluYW1pY1xuICAgIHZhciBwcm9nRGVmbiA9IGFyZ3Muc2hhZGVyLnByb2dWYXJcbiAgICBpZiAoKHByb2dEZWZuLmNvbnRleHREZXAgJiYgY29udGV4dER5bmFtaWMpIHx8IHByb2dEZWZuLnByb3BEZXApIHtcbiAgICAgIGVtaXRCYXRjaEJvZHkoXG4gICAgICAgIGVudixcbiAgICAgICAgYmF0Y2gsXG4gICAgICAgIGFyZ3MsXG4gICAgICAgIG51bGwpXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBQUk9HUkFNID0gcHJvZ0RlZm4uYXBwZW5kKGVudiwgYmF0Y2gpXG4gICAgICBiYXRjaChlbnYuc2hhcmVkLmdsLCAnLnVzZVByb2dyYW0oJywgUFJPR1JBTSwgJy5wcm9ncmFtKTsnKVxuICAgICAgaWYgKGFyZ3Muc2hhZGVyLnByb2dyYW0pIHtcbiAgICAgICAgZW1pdEJhdGNoQm9keShcbiAgICAgICAgICBlbnYsXG4gICAgICAgICAgYmF0Y2gsXG4gICAgICAgICAgYXJncyxcbiAgICAgICAgICBhcmdzLnNoYWRlci5wcm9ncmFtKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmF0Y2goZW52LnNoYXJlZC52YW8sICcuc2V0VkFPKG51bGwpOycpXG4gICAgICAgIHZhciBiYXRjaENhY2hlID0gZW52Lmdsb2JhbC5kZWYoJ3t9JylcbiAgICAgICAgdmFyIFBST0dfSUQgPSBiYXRjaC5kZWYoUFJPR1JBTSwgJy5pZCcpXG4gICAgICAgIHZhciBDQUNIRURfUFJPQyA9IGJhdGNoLmRlZihiYXRjaENhY2hlLCAnWycsIFBST0dfSUQsICddJylcbiAgICAgICAgYmF0Y2goXG4gICAgICAgICAgZW52LmNvbmQoQ0FDSEVEX1BST0MpXG4gICAgICAgICAgICAudGhlbihDQUNIRURfUFJPQywgJy5jYWxsKHRoaXMsYTAsYTEpOycpXG4gICAgICAgICAgICAuZWxzZShcbiAgICAgICAgICAgICAgQ0FDSEVEX1BST0MsICc9JywgYmF0Y2hDYWNoZSwgJ1snLCBQUk9HX0lELCAnXT0nLFxuICAgICAgICAgICAgICBlbnYubGluayhmdW5jdGlvbiAocHJvZ3JhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVCb2R5KGVtaXRCYXRjaEJvZHksIGVudiwgYXJncywgcHJvZ3JhbSwgMilcbiAgICAgICAgICAgICAgfSksICcoJywgUFJPR1JBTSwgJyk7JyxcbiAgICAgICAgICAgICAgQ0FDSEVEX1BST0MsICcuY2FsbCh0aGlzLGEwLGExKTsnKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoYXJncy5zdGF0ZSkubGVuZ3RoID4gMCkge1xuICAgICAgYmF0Y2goZW52LnNoYXJlZC5jdXJyZW50LCAnLmRpcnR5PXRydWU7JylcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNDT1BFIENPTU1BTkRcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBmdW5jdGlvbiBlbWl0U2NvcGVQcm9jIChlbnYsIGFyZ3MpIHtcbiAgICB2YXIgc2NvcGUgPSBlbnYucHJvYygnc2NvcGUnLCAzKVxuICAgIGVudi5iYXRjaElkID0gJ2EyJ1xuXG4gICAgdmFyIHNoYXJlZCA9IGVudi5zaGFyZWRcbiAgICB2YXIgQ1VSUkVOVF9TVEFURSA9IHNoYXJlZC5jdXJyZW50XG5cbiAgICBlbWl0Q29udGV4dChlbnYsIHNjb3BlLCBhcmdzLmNvbnRleHQpXG5cbiAgICBpZiAoYXJncy5mcmFtZWJ1ZmZlcikge1xuICAgICAgYXJncy5mcmFtZWJ1ZmZlci5hcHBlbmQoZW52LCBzY29wZSlcbiAgICB9XG5cbiAgICBzb3J0U3RhdGUoT2JqZWN0LmtleXMoYXJncy5zdGF0ZSkpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciBkZWZuID0gYXJncy5zdGF0ZVtuYW1lXVxuICAgICAgdmFyIHZhbHVlID0gZGVmbi5hcHBlbmQoZW52LCBzY29wZSlcbiAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAodiwgaSkge1xuICAgICAgICAgIHNjb3BlLnNldChlbnYubmV4dFtuYW1lXSwgJ1snICsgaSArICddJywgdilcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjb3BlLnNldChzaGFyZWQubmV4dCwgJy4nICsgbmFtZSwgdmFsdWUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGVtaXRQcm9maWxlKGVudiwgc2NvcGUsIGFyZ3MsIHRydWUsIHRydWUpXG5cbiAgICA7W1NfRUxFTUVOVFMsIFNfT0ZGU0VULCBTX0NPVU5ULCBTX0lOU1RBTkNFUywgU19QUklNSVRJVkVdLmZvckVhY2goXG4gICAgICBmdW5jdGlvbiAob3B0KSB7XG4gICAgICAgIHZhciB2YXJpYWJsZSA9IGFyZ3MuZHJhd1tvcHRdXG4gICAgICAgIGlmICghdmFyaWFibGUpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBzY29wZS5zZXQoc2hhcmVkLmRyYXcsICcuJyArIG9wdCwgJycgKyB2YXJpYWJsZS5hcHBlbmQoZW52LCBzY29wZSkpXG4gICAgICB9KVxuXG4gICAgT2JqZWN0LmtleXMoYXJncy51bmlmb3JtcykuZm9yRWFjaChmdW5jdGlvbiAob3B0KSB7XG4gICAgICB2YXIgdmFsdWUgPSBhcmdzLnVuaWZvcm1zW29wdF0uYXBwZW5kKGVudiwgc2NvcGUpXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSAnWycgKyB2YWx1ZS5qb2luKCkgKyAnXSdcbiAgICAgIH1cbiAgICAgIHNjb3BlLnNldChcbiAgICAgICAgc2hhcmVkLnVuaWZvcm1zLFxuICAgICAgICAnWycgKyBzdHJpbmdTdG9yZS5pZChvcHQpICsgJ10nLFxuICAgICAgICB2YWx1ZSlcbiAgICB9KVxuXG4gICAgT2JqZWN0LmtleXMoYXJncy5hdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgcmVjb3JkID0gYXJncy5hdHRyaWJ1dGVzW25hbWVdLmFwcGVuZChlbnYsIHNjb3BlKVxuICAgICAgdmFyIHNjb3BlQXR0cmliID0gZW52LnNjb3BlQXR0cmliKG5hbWUpXG4gICAgICBPYmplY3Qua2V5cyhuZXcgQXR0cmlidXRlUmVjb3JkKCkpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgc2NvcGUuc2V0KHNjb3BlQXR0cmliLCAnLicgKyBwcm9wLCByZWNvcmRbcHJvcF0pXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBpZiAoYXJncy5zY29wZVZBTykge1xuICAgICAgc2NvcGUuc2V0KHNoYXJlZC52YW8sICcudGFyZ2V0VkFPJywgYXJncy5zY29wZVZBTy5hcHBlbmQoZW52LCBzY29wZSkpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2F2ZVNoYWRlciAobmFtZSkge1xuICAgICAgdmFyIHNoYWRlciA9IGFyZ3Muc2hhZGVyW25hbWVdXG4gICAgICBpZiAoc2hhZGVyKSB7XG4gICAgICAgIHNjb3BlLnNldChzaGFyZWQuc2hhZGVyLCAnLicgKyBuYW1lLCBzaGFkZXIuYXBwZW5kKGVudiwgc2NvcGUpKVxuICAgICAgfVxuICAgIH1cbiAgICBzYXZlU2hhZGVyKFNfVkVSVClcbiAgICBzYXZlU2hhZGVyKFNfRlJBRylcblxuICAgIGlmIChPYmplY3Qua2V5cyhhcmdzLnN0YXRlKS5sZW5ndGggPiAwKSB7XG4gICAgICBzY29wZShDVVJSRU5UX1NUQVRFLCAnLmRpcnR5PXRydWU7JylcbiAgICAgIHNjb3BlLmV4aXQoQ1VSUkVOVF9TVEFURSwgJy5kaXJ0eT10cnVlOycpXG4gICAgfVxuXG4gICAgc2NvcGUoJ2ExKCcsIGVudi5zaGFyZWQuY29udGV4dCwgJyxhMCwnLCBlbnYuYmF0Y2hJZCwgJyk7JylcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRHluYW1pY09iamVjdCAob2JqZWN0KSB7XG4gICAgaWYgKHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnIHx8IGlzQXJyYXlMaWtlKG9iamVjdCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB2YXIgcHJvcHMgPSBPYmplY3Qua2V5cyhvYmplY3QpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKGR5bmFtaWMuaXNEeW5hbWljKG9iamVjdFtwcm9wc1tpXV0pKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZnVuY3Rpb24gc3BsYXRPYmplY3QgKGVudiwgb3B0aW9ucywgbmFtZSkge1xuICAgIHZhciBvYmplY3QgPSBvcHRpb25zLnN0YXRpY1tuYW1lXVxuICAgIGlmICghb2JqZWN0IHx8ICFpc0R5bmFtaWNPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGdsb2JhbHMgPSBlbnYuZ2xvYmFsXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpXG4gICAgdmFyIHRoaXNEZXAgPSBmYWxzZVxuICAgIHZhciBjb250ZXh0RGVwID0gZmFsc2VcbiAgICB2YXIgcHJvcERlcCA9IGZhbHNlXG4gICAgdmFyIG9iamVjdFJlZiA9IGVudi5nbG9iYWwuZGVmKCd7fScpXG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9iamVjdFtrZXldXG4gICAgICBpZiAoZHluYW1pYy5pc0R5bmFtaWModmFsdWUpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldID0gZHluYW1pYy51bmJveCh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVwcyA9IGNyZWF0ZUR5bmFtaWNEZWNsKHZhbHVlLCBudWxsKVxuICAgICAgICB0aGlzRGVwID0gdGhpc0RlcCB8fCBkZXBzLnRoaXNEZXBcbiAgICAgICAgcHJvcERlcCA9IHByb3BEZXAgfHwgZGVwcy5wcm9wRGVwXG4gICAgICAgIGNvbnRleHREZXAgPSBjb250ZXh0RGVwIHx8IGRlcHMuY29udGV4dERlcFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2xvYmFscyhvYmplY3RSZWYsICcuJywga2V5LCAnPScpXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgIGdsb2JhbHModmFsdWUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICBnbG9iYWxzKCdcIicsIHZhbHVlLCAnXCInKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgIGdsb2JhbHMoJ1snLCB2YWx1ZS5qb2luKCksICddJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGdsb2JhbHMoZW52LmxpbmsodmFsdWUpKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBnbG9iYWxzKCc7JylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgZnVuY3Rpb24gYXBwZW5kQmxvY2sgKGVudiwgYmxvY2spIHtcbiAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IG9iamVjdFtrZXldXG4gICAgICAgIGlmICghZHluYW1pYy5pc0R5bmFtaWModmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlZiA9IGVudi5pbnZva2UoYmxvY2ssIHZhbHVlKVxuICAgICAgICBibG9jayhvYmplY3RSZWYsICcuJywga2V5LCAnPScsIHJlZiwgJzsnKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBvcHRpb25zLmR5bmFtaWNbbmFtZV0gPSBuZXcgZHluYW1pYy5EeW5hbWljVmFyaWFibGUoRFlOX1RIVU5LLCB7XG4gICAgICB0aGlzRGVwOiB0aGlzRGVwLFxuICAgICAgY29udGV4dERlcDogY29udGV4dERlcCxcbiAgICAgIHByb3BEZXA6IHByb3BEZXAsXG4gICAgICByZWY6IG9iamVjdFJlZixcbiAgICAgIGFwcGVuZDogYXBwZW5kQmxvY2tcbiAgICB9KVxuICAgIGRlbGV0ZSBvcHRpb25zLnN0YXRpY1tuYW1lXVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNQUlOIERSQVcgQ09NTUFORFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIGZ1bmN0aW9uIGNvbXBpbGVDb21tYW5kIChvcHRpb25zLCBhdHRyaWJ1dGVzLCB1bmlmb3JtcywgY29udGV4dCwgc3RhdHMpIHtcbiAgICB2YXIgZW52ID0gY3JlYXRlUkVHTEVudmlyb25tZW50KClcblxuICAgIC8vIGxpbmsgc3RhdHMsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBhY2Nlc3MgaXQgaW4gdGhlIHByb2dyYW0uXG4gICAgZW52LnN0YXRzID0gZW52Lmxpbmsoc3RhdHMpXG5cbiAgICAvLyBzcGxhdCBvcHRpb25zIGFuZCBhdHRyaWJ1dGVzIHRvIGFsbG93IGZvciBkeW5hbWljIG5lc3RlZCBwcm9wZXJ0aWVzXG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcy5zdGF0aWMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgc3BsYXRPYmplY3QoZW52LCBhdHRyaWJ1dGVzLCBrZXkpXG4gICAgfSlcbiAgICBORVNURURfT1BUSU9OUy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICBzcGxhdE9iamVjdChlbnYsIG9wdGlvbnMsIG5hbWUpXG4gICAgfSlcblxuICAgIHZhciBhcmdzID0gcGFyc2VBcmd1bWVudHMob3B0aW9ucywgYXR0cmlidXRlcywgdW5pZm9ybXMsIGNvbnRleHQsIGVudilcblxuICAgIGVtaXREcmF3UHJvYyhlbnYsIGFyZ3MpXG4gICAgZW1pdFNjb3BlUHJvYyhlbnYsIGFyZ3MpXG4gICAgZW1pdEJhdGNoUHJvYyhlbnYsIGFyZ3MpXG5cbiAgICByZXR1cm4gZXh0ZW5kKGVudi5jb21waWxlKCksIHtcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXJncy5zaGFkZXIucHJvZ3JhbS5kZXN0cm95KClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQT0xMIC8gUkVGUkVTSFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHJldHVybiB7XG4gICAgbmV4dDogbmV4dFN0YXRlLFxuICAgIGN1cnJlbnQ6IGN1cnJlbnRTdGF0ZSxcbiAgICBwcm9jczogKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBlbnYgPSBjcmVhdGVSRUdMRW52aXJvbm1lbnQoKVxuICAgICAgdmFyIHBvbGwgPSBlbnYucHJvYygncG9sbCcpXG4gICAgICB2YXIgcmVmcmVzaCA9IGVudi5wcm9jKCdyZWZyZXNoJylcbiAgICAgIHZhciBjb21tb24gPSBlbnYuYmxvY2soKVxuICAgICAgcG9sbChjb21tb24pXG4gICAgICByZWZyZXNoKGNvbW1vbilcblxuICAgICAgdmFyIHNoYXJlZCA9IGVudi5zaGFyZWRcbiAgICAgIHZhciBHTCA9IHNoYXJlZC5nbFxuICAgICAgdmFyIE5FWFRfU1RBVEUgPSBzaGFyZWQubmV4dFxuICAgICAgdmFyIENVUlJFTlRfU1RBVEUgPSBzaGFyZWQuY3VycmVudFxuXG4gICAgICBjb21tb24oQ1VSUkVOVF9TVEFURSwgJy5kaXJ0eT1mYWxzZTsnKVxuXG4gICAgICBlbWl0UG9sbEZyYW1lYnVmZmVyKGVudiwgcG9sbClcbiAgICAgIGVtaXRQb2xsRnJhbWVidWZmZXIoZW52LCByZWZyZXNoLCBudWxsLCB0cnVlKVxuXG4gICAgICAvLyBSZWZyZXNoIHVwZGF0ZXMgYWxsIGF0dHJpYnV0ZSBzdGF0ZSBjaGFuZ2VzXG4gICAgICB2YXIgSU5TVEFOQ0lOR1xuICAgICAgaWYgKGV4dEluc3RhbmNpbmcpIHtcbiAgICAgICAgSU5TVEFOQ0lORyA9IGVudi5saW5rKGV4dEluc3RhbmNpbmcpXG4gICAgICB9XG5cbiAgICAgIC8vIHVwZGF0ZSB2ZXJ0ZXggYXJyYXkgYmluZGluZ3NcbiAgICAgIGlmIChleHRlbnNpb25zLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0KSB7XG4gICAgICAgIHJlZnJlc2goZW52LmxpbmsoZXh0ZW5zaW9ucy5vZXNfdmVydGV4X2FycmF5X29iamVjdCksICcuYmluZFZlcnRleEFycmF5T0VTKG51bGwpOycpXG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbWl0cy5tYXhBdHRyaWJ1dGVzOyArK2kpIHtcbiAgICAgICAgdmFyIEJJTkRJTkcgPSByZWZyZXNoLmRlZihzaGFyZWQuYXR0cmlidXRlcywgJ1snLCBpLCAnXScpXG4gICAgICAgIHZhciBpZnRlID0gZW52LmNvbmQoQklORElORywgJy5idWZmZXInKVxuICAgICAgICBpZnRlLnRoZW4oXG4gICAgICAgICAgR0wsICcuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoJywgaSwgJyk7JyxcbiAgICAgICAgICBHTCwgJy5iaW5kQnVmZmVyKCcsXG4gICAgICAgICAgR0xfQVJSQVlfQlVGRkVSJDIsICcsJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLmJ1ZmZlci5idWZmZXIpOycsXG4gICAgICAgICAgR0wsICcudmVydGV4QXR0cmliUG9pbnRlcignLFxuICAgICAgICAgIGksICcsJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLnNpemUsJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLnR5cGUsJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLm5vcm1hbGl6ZWQsJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLnN0cmlkZSwnLFxuICAgICAgICAgIEJJTkRJTkcsICcub2Zmc2V0KTsnXG4gICAgICAgICkuZWxzZShcbiAgICAgICAgICBHTCwgJy5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoJywgaSwgJyk7JyxcbiAgICAgICAgICBHTCwgJy52ZXJ0ZXhBdHRyaWI0ZignLFxuICAgICAgICAgIGksICcsJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLngsJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLnksJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLnosJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLncpOycsXG4gICAgICAgICAgQklORElORywgJy5idWZmZXI9bnVsbDsnKVxuICAgICAgICByZWZyZXNoKGlmdGUpXG4gICAgICAgIGlmIChleHRJbnN0YW5jaW5nKSB7XG4gICAgICAgICAgcmVmcmVzaChcbiAgICAgICAgICAgIElOU1RBTkNJTkcsICcudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKCcsXG4gICAgICAgICAgICBpLCAnLCcsXG4gICAgICAgICAgICBCSU5ESU5HLCAnLmRpdmlzb3IpOycpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlZnJlc2goXG4gICAgICAgIGVudi5zaGFyZWQudmFvLCAnLmN1cnJlbnRWQU89bnVsbDsnLFxuICAgICAgICBlbnYuc2hhcmVkLnZhbywgJy5zZXRWQU8oJywgZW52LnNoYXJlZC52YW8sICcudGFyZ2V0VkFPKTsnKVxuXG4gICAgICBPYmplY3Qua2V5cyhHTF9GTEFHUykuZm9yRWFjaChmdW5jdGlvbiAoZmxhZykge1xuICAgICAgICB2YXIgY2FwID0gR0xfRkxBR1NbZmxhZ11cbiAgICAgICAgdmFyIE5FWFQgPSBjb21tb24uZGVmKE5FWFRfU1RBVEUsICcuJywgZmxhZylcbiAgICAgICAgdmFyIGJsb2NrID0gZW52LmJsb2NrKClcbiAgICAgICAgYmxvY2soJ2lmKCcsIE5FWFQsICcpeycsXG4gICAgICAgICAgR0wsICcuZW5hYmxlKCcsIGNhcCwgJyl9ZWxzZXsnLFxuICAgICAgICAgIEdMLCAnLmRpc2FibGUoJywgY2FwLCAnKX0nLFxuICAgICAgICAgIENVUlJFTlRfU1RBVEUsICcuJywgZmxhZywgJz0nLCBORVhULCAnOycpXG4gICAgICAgIHJlZnJlc2goYmxvY2spXG4gICAgICAgIHBvbGwoXG4gICAgICAgICAgJ2lmKCcsIE5FWFQsICchPT0nLCBDVVJSRU5UX1NUQVRFLCAnLicsIGZsYWcsICcpeycsXG4gICAgICAgICAgYmxvY2ssXG4gICAgICAgICAgJ30nKVxuICAgICAgfSlcblxuICAgICAgT2JqZWN0LmtleXMoR0xfVkFSSUFCTEVTKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHZhciBmdW5jID0gR0xfVkFSSUFCTEVTW25hbWVdXG4gICAgICAgIHZhciBpbml0ID0gY3VycmVudFN0YXRlW25hbWVdXG4gICAgICAgIHZhciBORVhULCBDVVJSRU5UXG4gICAgICAgIHZhciBibG9jayA9IGVudi5ibG9jaygpXG4gICAgICAgIGJsb2NrKEdMLCAnLicsIGZ1bmMsICcoJylcbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGluaXQpKSB7XG4gICAgICAgICAgdmFyIG4gPSBpbml0Lmxlbmd0aFxuICAgICAgICAgIE5FWFQgPSBlbnYuZ2xvYmFsLmRlZihORVhUX1NUQVRFLCAnLicsIG5hbWUpXG4gICAgICAgICAgQ1VSUkVOVCA9IGVudi5nbG9iYWwuZGVmKENVUlJFTlRfU1RBVEUsICcuJywgbmFtZSlcbiAgICAgICAgICBibG9jayhcbiAgICAgICAgICAgIGxvb3AobiwgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIE5FWFQgKyAnWycgKyBpICsgJ10nXG4gICAgICAgICAgICB9KSwgJyk7JyxcbiAgICAgICAgICAgIGxvb3AobiwgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIENVUlJFTlQgKyAnWycgKyBpICsgJ109JyArIE5FWFQgKyAnWycgKyBpICsgJ107J1xuICAgICAgICAgICAgfSkuam9pbignJykpXG4gICAgICAgICAgcG9sbChcbiAgICAgICAgICAgICdpZignLCBsb29wKG4sIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBORVhUICsgJ1snICsgaSArICddIT09JyArIENVUlJFTlQgKyAnWycgKyBpICsgJ10nXG4gICAgICAgICAgICB9KS5qb2luKCd8fCcpLCAnKXsnLFxuICAgICAgICAgICAgYmxvY2ssXG4gICAgICAgICAgICAnfScpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgTkVYVCA9IGNvbW1vbi5kZWYoTkVYVF9TVEFURSwgJy4nLCBuYW1lKVxuICAgICAgICAgIENVUlJFTlQgPSBjb21tb24uZGVmKENVUlJFTlRfU1RBVEUsICcuJywgbmFtZSlcbiAgICAgICAgICBibG9jayhcbiAgICAgICAgICAgIE5FWFQsICcpOycsXG4gICAgICAgICAgICBDVVJSRU5UX1NUQVRFLCAnLicsIG5hbWUsICc9JywgTkVYVCwgJzsnKVxuICAgICAgICAgIHBvbGwoXG4gICAgICAgICAgICAnaWYoJywgTkVYVCwgJyE9PScsIENVUlJFTlQsICcpeycsXG4gICAgICAgICAgICBibG9jayxcbiAgICAgICAgICAgICd9JylcbiAgICAgICAgfVxuICAgICAgICByZWZyZXNoKGJsb2NrKVxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIGVudi5jb21waWxlKClcbiAgICB9KSgpLFxuICAgIGNvbXBpbGU6IGNvbXBpbGVDb21tYW5kXG4gIH1cbn1cblxuZnVuY3Rpb24gc3RhdHMgKCkge1xuICByZXR1cm4ge1xuICAgIHZhb0NvdW50OiAwLFxuICAgIGJ1ZmZlckNvdW50OiAwLFxuICAgIGVsZW1lbnRzQ291bnQ6IDAsXG4gICAgZnJhbWVidWZmZXJDb3VudDogMCxcbiAgICBzaGFkZXJDb3VudDogMCxcbiAgICB0ZXh0dXJlQ291bnQ6IDAsXG4gICAgY3ViZUNvdW50OiAwLFxuICAgIHJlbmRlcmJ1ZmZlckNvdW50OiAwLFxuICAgIG1heFRleHR1cmVVbml0czogMFxuICB9XG59XG5cbnZhciBHTF9RVUVSWV9SRVNVTFRfRVhUID0gMHg4ODY2XG52YXIgR0xfUVVFUllfUkVTVUxUX0FWQUlMQUJMRV9FWFQgPSAweDg4NjdcbnZhciBHTF9USU1FX0VMQVBTRURfRVhUID0gMHg4OEJGXG5cbnZhciBjcmVhdGVUaW1lciA9IGZ1bmN0aW9uIChnbCwgZXh0ZW5zaW9ucykge1xuICBpZiAoIWV4dGVuc2lvbnMuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5KSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIFFVRVJZIFBPT0wgQkVHSU5cbiAgdmFyIHF1ZXJ5UG9vbCA9IFtdXG4gIGZ1bmN0aW9uIGFsbG9jUXVlcnkgKCkge1xuICAgIHJldHVybiBxdWVyeVBvb2wucG9wKCkgfHwgZXh0ZW5zaW9ucy5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuY3JlYXRlUXVlcnlFWFQoKVxuICB9XG4gIGZ1bmN0aW9uIGZyZWVRdWVyeSAocXVlcnkpIHtcbiAgICBxdWVyeVBvb2wucHVzaChxdWVyeSlcbiAgfVxuICAvLyBRVUVSWSBQT09MIEVORFxuXG4gIHZhciBwZW5kaW5nUXVlcmllcyA9IFtdXG4gIGZ1bmN0aW9uIGJlZ2luUXVlcnkgKHN0YXRzKSB7XG4gICAgdmFyIHF1ZXJ5ID0gYWxsb2NRdWVyeSgpXG4gICAgZXh0ZW5zaW9ucy5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuYmVnaW5RdWVyeUVYVChHTF9USU1FX0VMQVBTRURfRVhULCBxdWVyeSlcbiAgICBwZW5kaW5nUXVlcmllcy5wdXNoKHF1ZXJ5KVxuICAgIHB1c2hTY29wZVN0YXRzKHBlbmRpbmdRdWVyaWVzLmxlbmd0aCAtIDEsIHBlbmRpbmdRdWVyaWVzLmxlbmd0aCwgc3RhdHMpXG4gIH1cblxuICBmdW5jdGlvbiBlbmRRdWVyeSAoKSB7XG4gICAgZXh0ZW5zaW9ucy5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZW5kUXVlcnlFWFQoR0xfVElNRV9FTEFQU0VEX0VYVClcbiAgfVxuXG4gIC8vXG4gIC8vIFBlbmRpbmcgc3RhdHMgcG9vbC5cbiAgLy9cbiAgZnVuY3Rpb24gUGVuZGluZ1N0YXRzICgpIHtcbiAgICB0aGlzLnN0YXJ0UXVlcnlJbmRleCA9IC0xXG4gICAgdGhpcy5lbmRRdWVyeUluZGV4ID0gLTFcbiAgICB0aGlzLnN1bSA9IDBcbiAgICB0aGlzLnN0YXRzID0gbnVsbFxuICB9XG4gIHZhciBwZW5kaW5nU3RhdHNQb29sID0gW11cbiAgZnVuY3Rpb24gYWxsb2NQZW5kaW5nU3RhdHMgKCkge1xuICAgIHJldHVybiBwZW5kaW5nU3RhdHNQb29sLnBvcCgpIHx8IG5ldyBQZW5kaW5nU3RhdHMoKVxuICB9XG4gIGZ1bmN0aW9uIGZyZWVQZW5kaW5nU3RhdHMgKHBlbmRpbmdTdGF0cykge1xuICAgIHBlbmRpbmdTdGF0c1Bvb2wucHVzaChwZW5kaW5nU3RhdHMpXG4gIH1cbiAgLy8gUGVuZGluZyBzdGF0cyBwb29sIGVuZFxuXG4gIHZhciBwZW5kaW5nU3RhdHMgPSBbXVxuICBmdW5jdGlvbiBwdXNoU2NvcGVTdGF0cyAoc3RhcnQsIGVuZCwgc3RhdHMpIHtcbiAgICB2YXIgcHMgPSBhbGxvY1BlbmRpbmdTdGF0cygpXG4gICAgcHMuc3RhcnRRdWVyeUluZGV4ID0gc3RhcnRcbiAgICBwcy5lbmRRdWVyeUluZGV4ID0gZW5kXG4gICAgcHMuc3VtID0gMFxuICAgIHBzLnN0YXRzID0gc3RhdHNcbiAgICBwZW5kaW5nU3RhdHMucHVzaChwcylcbiAgfVxuXG4gIC8vIHdlIHNob3VsZCBjYWxsIHRoaXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnJhbWUsXG4gIC8vIGluIG9yZGVyIHRvIHVwZGF0ZSBncHVUaW1lXG4gIHZhciB0aW1lU3VtID0gW11cbiAgdmFyIHF1ZXJ5UHRyID0gW11cbiAgZnVuY3Rpb24gdXBkYXRlICgpIHtcbiAgICB2YXIgcHRyLCBpXG5cbiAgICB2YXIgbiA9IHBlbmRpbmdRdWVyaWVzLmxlbmd0aFxuICAgIGlmIChuID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBSZXNlcnZlIHNwYWNlXG4gICAgcXVlcnlQdHIubGVuZ3RoID0gTWF0aC5tYXgocXVlcnlQdHIubGVuZ3RoLCBuICsgMSlcbiAgICB0aW1lU3VtLmxlbmd0aCA9IE1hdGgubWF4KHRpbWVTdW0ubGVuZ3RoLCBuICsgMSlcbiAgICB0aW1lU3VtWzBdID0gMFxuICAgIHF1ZXJ5UHRyWzBdID0gMFxuXG4gICAgLy8gVXBkYXRlIGFsbCBwZW5kaW5nIHRpbWVyIHF1ZXJpZXNcbiAgICB2YXIgcXVlcnlUaW1lID0gMFxuICAgIHB0ciA9IDBcbiAgICBmb3IgKGkgPSAwOyBpIDwgcGVuZGluZ1F1ZXJpZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBxdWVyeSA9IHBlbmRpbmdRdWVyaWVzW2ldXG4gICAgICBpZiAoZXh0ZW5zaW9ucy5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZ2V0UXVlcnlPYmplY3RFWFQocXVlcnksIEdMX1FVRVJZX1JFU1VMVF9BVkFJTEFCTEVfRVhUKSkge1xuICAgICAgICBxdWVyeVRpbWUgKz0gZXh0ZW5zaW9ucy5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZ2V0UXVlcnlPYmplY3RFWFQocXVlcnksIEdMX1FVRVJZX1JFU1VMVF9FWFQpXG4gICAgICAgIGZyZWVRdWVyeShxdWVyeSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlbmRpbmdRdWVyaWVzW3B0cisrXSA9IHF1ZXJ5XG4gICAgICB9XG4gICAgICB0aW1lU3VtW2kgKyAxXSA9IHF1ZXJ5VGltZVxuICAgICAgcXVlcnlQdHJbaSArIDFdID0gcHRyXG4gICAgfVxuICAgIHBlbmRpbmdRdWVyaWVzLmxlbmd0aCA9IHB0clxuXG4gICAgLy8gVXBkYXRlIGFsbCBwZW5kaW5nIHN0YXQgcXVlcmllc1xuICAgIHB0ciA9IDBcbiAgICBmb3IgKGkgPSAwOyBpIDwgcGVuZGluZ1N0YXRzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgc3RhdHMgPSBwZW5kaW5nU3RhdHNbaV1cbiAgICAgIHZhciBzdGFydCA9IHN0YXRzLnN0YXJ0UXVlcnlJbmRleFxuICAgICAgdmFyIGVuZCA9IHN0YXRzLmVuZFF1ZXJ5SW5kZXhcbiAgICAgIHN0YXRzLnN1bSArPSB0aW1lU3VtW2VuZF0gLSB0aW1lU3VtW3N0YXJ0XVxuICAgICAgdmFyIHN0YXJ0UHRyID0gcXVlcnlQdHJbc3RhcnRdXG4gICAgICB2YXIgZW5kUHRyID0gcXVlcnlQdHJbZW5kXVxuICAgICAgaWYgKGVuZFB0ciA9PT0gc3RhcnRQdHIpIHtcbiAgICAgICAgc3RhdHMuc3RhdHMuZ3B1VGltZSArPSBzdGF0cy5zdW0gLyAxZTZcbiAgICAgICAgZnJlZVBlbmRpbmdTdGF0cyhzdGF0cylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRzLnN0YXJ0UXVlcnlJbmRleCA9IHN0YXJ0UHRyXG4gICAgICAgIHN0YXRzLmVuZFF1ZXJ5SW5kZXggPSBlbmRQdHJcbiAgICAgICAgcGVuZGluZ1N0YXRzW3B0cisrXSA9IHN0YXRzXG4gICAgICB9XG4gICAgfVxuICAgIHBlbmRpbmdTdGF0cy5sZW5ndGggPSBwdHJcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYmVnaW5RdWVyeTogYmVnaW5RdWVyeSxcbiAgICBlbmRRdWVyeTogZW5kUXVlcnksXG4gICAgcHVzaFNjb3BlU3RhdHM6IHB1c2hTY29wZVN0YXRzLFxuICAgIHVwZGF0ZTogdXBkYXRlLFxuICAgIGdldE51bVBlbmRpbmdRdWVyaWVzOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcGVuZGluZ1F1ZXJpZXMubGVuZ3RoXG4gICAgfSxcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xuICAgICAgcXVlcnlQb29sLnB1c2guYXBwbHkocXVlcnlQb29sLCBwZW5kaW5nUXVlcmllcylcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlcnlQb29sLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGV4dGVuc2lvbnMuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmRlbGV0ZVF1ZXJ5RVhUKHF1ZXJ5UG9vbFtpXSlcbiAgICAgIH1cbiAgICAgIHBlbmRpbmdRdWVyaWVzLmxlbmd0aCA9IDBcbiAgICAgIHF1ZXJ5UG9vbC5sZW5ndGggPSAwXG4gICAgfSxcbiAgICByZXN0b3JlOiBmdW5jdGlvbiAoKSB7XG4gICAgICBwZW5kaW5nUXVlcmllcy5sZW5ndGggPSAwXG4gICAgICBxdWVyeVBvb2wubGVuZ3RoID0gMFxuICAgIH1cbiAgfVxufVxuXG52YXIgR0xfQ09MT1JfQlVGRkVSX0JJVCA9IDE2Mzg0XG52YXIgR0xfREVQVEhfQlVGRkVSX0JJVCA9IDI1NlxudmFyIEdMX1NURU5DSUxfQlVGRkVSX0JJVCA9IDEwMjRcblxudmFyIEdMX0FSUkFZX0JVRkZFUiA9IDM0OTYyXG5cbnZhciBDT05URVhUX0xPU1RfRVZFTlQgPSAnd2ViZ2xjb250ZXh0bG9zdCdcbnZhciBDT05URVhUX1JFU1RPUkVEX0VWRU5UID0gJ3dlYmdsY29udGV4dHJlc3RvcmVkJ1xuXG52YXIgRFlOX1BST1AgPSAxXG52YXIgRFlOX0NPTlRFWFQgPSAyXG52YXIgRFlOX1NUQVRFID0gM1xuXG5mdW5jdGlvbiBmaW5kIChoYXlzdGFjaywgbmVlZGxlKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaGF5c3RhY2subGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoaGF5c3RhY2tbaV0gPT09IG5lZWRsZSkge1xuICAgICAgcmV0dXJuIGlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xXG59XG5cbmZ1bmN0aW9uIHdyYXBSRUdMIChhcmdzKSB7XG4gIHZhciBjb25maWcgPSBwYXJzZUFyZ3MoYXJncylcbiAgaWYgKCFjb25maWcpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdmFyIGdsID0gY29uZmlnLmdsXG4gIHZhciBnbEF0dHJpYnV0ZXMgPSBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpXG4gIHZhciBjb250ZXh0TG9zdCA9IGdsLmlzQ29udGV4dExvc3QoKVxuXG4gIHZhciBleHRlbnNpb25TdGF0ZSA9IGNyZWF0ZUV4dGVuc2lvbkNhY2hlKGdsLCBjb25maWcpXG4gIGlmICghZXh0ZW5zaW9uU3RhdGUpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdmFyIHN0cmluZ1N0b3JlID0gY3JlYXRlU3RyaW5nU3RvcmUoKVxuICB2YXIgc3RhdHMkJDEgPSBzdGF0cygpXG4gIHZhciBleHRlbnNpb25zID0gZXh0ZW5zaW9uU3RhdGUuZXh0ZW5zaW9uc1xuICB2YXIgdGltZXIgPSBjcmVhdGVUaW1lcihnbCwgZXh0ZW5zaW9ucylcblxuICB2YXIgU1RBUlRfVElNRSA9IGNsb2NrKClcbiAgdmFyIFdJRFRIID0gZ2wuZHJhd2luZ0J1ZmZlcldpZHRoXG4gIHZhciBIRUlHSFQgPSBnbC5kcmF3aW5nQnVmZmVySGVpZ2h0XG5cbiAgdmFyIGNvbnRleHRTdGF0ZSA9IHtcbiAgICB0aWNrOiAwLFxuICAgIHRpbWU6IDAsXG4gICAgdmlld3BvcnRXaWR0aDogV0lEVEgsXG4gICAgdmlld3BvcnRIZWlnaHQ6IEhFSUdIVCxcbiAgICBmcmFtZWJ1ZmZlcldpZHRoOiBXSURUSCxcbiAgICBmcmFtZWJ1ZmZlckhlaWdodDogSEVJR0hULFxuICAgIGRyYXdpbmdCdWZmZXJXaWR0aDogV0lEVEgsXG4gICAgZHJhd2luZ0J1ZmZlckhlaWdodDogSEVJR0hULFxuICAgIHBpeGVsUmF0aW86IGNvbmZpZy5waXhlbFJhdGlvXG4gIH1cbiAgdmFyIHVuaWZvcm1TdGF0ZSA9IHt9XG4gIHZhciBkcmF3U3RhdGUgPSB7XG4gICAgZWxlbWVudHM6IG51bGwsXG4gICAgcHJpbWl0aXZlOiA0LCAvLyBHTF9UUklBTkdMRVNcbiAgICBjb3VudDogLTEsXG4gICAgb2Zmc2V0OiAwLFxuICAgIGluc3RhbmNlczogLTFcbiAgfVxuXG4gIHZhciBsaW1pdHMgPSB3cmFwTGltaXRzKGdsLCBleHRlbnNpb25zKVxuICB2YXIgYnVmZmVyU3RhdGUgPSB3cmFwQnVmZmVyU3RhdGUoXG4gICAgZ2wsXG4gICAgc3RhdHMkJDEsXG4gICAgY29uZmlnLFxuICAgIGRlc3Ryb3lCdWZmZXIpXG4gIHZhciBhdHRyaWJ1dGVTdGF0ZSA9IHdyYXBBdHRyaWJ1dGVTdGF0ZShcbiAgICBnbCxcbiAgICBleHRlbnNpb25zLFxuICAgIGxpbWl0cyxcbiAgICBzdGF0cyQkMSxcbiAgICBidWZmZXJTdGF0ZSlcbiAgZnVuY3Rpb24gZGVzdHJveUJ1ZmZlciAoYnVmZmVyKSB7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZVN0YXRlLmRlc3Ryb3lCdWZmZXIoYnVmZmVyKVxuICB9XG4gIHZhciBlbGVtZW50U3RhdGUgPSB3cmFwRWxlbWVudHNTdGF0ZShnbCwgZXh0ZW5zaW9ucywgYnVmZmVyU3RhdGUsIHN0YXRzJCQxKVxuICB2YXIgc2hhZGVyU3RhdGUgPSB3cmFwU2hhZGVyU3RhdGUoZ2wsIHN0cmluZ1N0b3JlLCBzdGF0cyQkMSwgY29uZmlnKVxuICB2YXIgdGV4dHVyZVN0YXRlID0gY3JlYXRlVGV4dHVyZVNldChcbiAgICBnbCxcbiAgICBleHRlbnNpb25zLFxuICAgIGxpbWl0cyxcbiAgICBmdW5jdGlvbiAoKSB7IGNvcmUucHJvY3MucG9sbCgpIH0sXG4gICAgY29udGV4dFN0YXRlLFxuICAgIHN0YXRzJCQxLFxuICAgIGNvbmZpZylcbiAgdmFyIHJlbmRlcmJ1ZmZlclN0YXRlID0gd3JhcFJlbmRlcmJ1ZmZlcnMoZ2wsIGV4dGVuc2lvbnMsIGxpbWl0cywgc3RhdHMkJDEsIGNvbmZpZylcbiAgdmFyIGZyYW1lYnVmZmVyU3RhdGUgPSB3cmFwRkJPU3RhdGUoXG4gICAgZ2wsXG4gICAgZXh0ZW5zaW9ucyxcbiAgICBsaW1pdHMsXG4gICAgdGV4dHVyZVN0YXRlLFxuICAgIHJlbmRlcmJ1ZmZlclN0YXRlLFxuICAgIHN0YXRzJCQxKVxuICB2YXIgY29yZSA9IHJlZ2xDb3JlKFxuICAgIGdsLFxuICAgIHN0cmluZ1N0b3JlLFxuICAgIGV4dGVuc2lvbnMsXG4gICAgbGltaXRzLFxuICAgIGJ1ZmZlclN0YXRlLFxuICAgIGVsZW1lbnRTdGF0ZSxcbiAgICB0ZXh0dXJlU3RhdGUsXG4gICAgZnJhbWVidWZmZXJTdGF0ZSxcbiAgICB1bmlmb3JtU3RhdGUsXG4gICAgYXR0cmlidXRlU3RhdGUsXG4gICAgc2hhZGVyU3RhdGUsXG4gICAgZHJhd1N0YXRlLFxuICAgIGNvbnRleHRTdGF0ZSxcbiAgICB0aW1lcixcbiAgICBjb25maWcpXG4gIHZhciByZWFkUGl4ZWxzID0gd3JhcFJlYWRQaXhlbHMoXG4gICAgZ2wsXG4gICAgZnJhbWVidWZmZXJTdGF0ZSxcbiAgICBjb3JlLnByb2NzLnBvbGwsXG4gICAgY29udGV4dFN0YXRlLFxuICAgIGdsQXR0cmlidXRlcywgZXh0ZW5zaW9ucywgbGltaXRzKVxuXG4gIHZhciBuZXh0U3RhdGUgPSBjb3JlLm5leHRcbiAgdmFyIGNhbnZhcyA9IGdsLmNhbnZhc1xuXG4gIHZhciByYWZDYWxsYmFja3MgPSBbXVxuICB2YXIgbG9zc0NhbGxiYWNrcyA9IFtdXG4gIHZhciByZXN0b3JlQ2FsbGJhY2tzID0gW11cbiAgdmFyIGRlc3Ryb3lDYWxsYmFja3MgPSBbY29uZmlnLm9uRGVzdHJveV1cblxuICB2YXIgYWN0aXZlUkFGID0gbnVsbFxuICBmdW5jdGlvbiBoYW5kbGVSQUYgKCkge1xuICAgIGlmIChyYWZDYWxsYmFja3MubGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAodGltZXIpIHtcbiAgICAgICAgdGltZXIudXBkYXRlKClcbiAgICAgIH1cbiAgICAgIGFjdGl2ZVJBRiA9IG51bGxcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIHNjaGVkdWxlIG5leHQgYW5pbWF0aW9uIGZyYW1lXG4gICAgYWN0aXZlUkFGID0gcmFmLm5leHQoaGFuZGxlUkFGKVxuXG4gICAgLy8gcG9sbCBmb3IgY2hhbmdlc1xuICAgIHBvbGwoKVxuXG4gICAgLy8gZmlyZSBhIGNhbGxiYWNrIGZvciBhbGwgcGVuZGluZyByYWZzXG4gICAgZm9yICh2YXIgaSA9IHJhZkNhbGxiYWNrcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdmFyIGNiID0gcmFmQ2FsbGJhY2tzW2ldXG4gICAgICBpZiAoY2IpIHtcbiAgICAgICAgY2IoY29udGV4dFN0YXRlLCBudWxsLCAwKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGZsdXNoIGFsbCBwZW5kaW5nIHdlYmdsIGNhbGxzXG4gICAgZ2wuZmx1c2goKVxuXG4gICAgLy8gcG9sbCBHUFUgdGltZXJzICphZnRlciogZ2wuZmx1c2ggc28gd2UgZG9uJ3QgZGVsYXkgY29tbWFuZCBkaXNwYXRjaFxuICAgIGlmICh0aW1lcikge1xuICAgICAgdGltZXIudXBkYXRlKClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydFJBRiAoKSB7XG4gICAgaWYgKCFhY3RpdmVSQUYgJiYgcmFmQ2FsbGJhY2tzLmxlbmd0aCA+IDApIHtcbiAgICAgIGFjdGl2ZVJBRiA9IHJhZi5uZXh0KGhhbmRsZVJBRilcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdG9wUkFGICgpIHtcbiAgICBpZiAoYWN0aXZlUkFGKSB7XG4gICAgICByYWYuY2FuY2VsKGhhbmRsZVJBRilcbiAgICAgIGFjdGl2ZVJBRiA9IG51bGxcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVDb250ZXh0TG9zcyAoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAvLyBzZXQgY29udGV4dCBsb3N0IGZsYWdcbiAgICBjb250ZXh0TG9zdCA9IHRydWVcblxuICAgIC8vIHBhdXNlIHJlcXVlc3QgYW5pbWF0aW9uIGZyYW1lXG4gICAgc3RvcFJBRigpXG5cbiAgICAvLyBsb3NlIGNvbnRleHRcbiAgICBsb3NzQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24gKGNiKSB7XG4gICAgICBjYigpXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUNvbnRleHRSZXN0b3JlZCAoZXZlbnQpIHtcbiAgICAvLyBjbGVhciBlcnJvciBjb2RlXG4gICAgZ2wuZ2V0RXJyb3IoKVxuXG4gICAgLy8gY2xlYXIgY29udGV4dCBsb3N0IGZsYWdcbiAgICBjb250ZXh0TG9zdCA9IGZhbHNlXG5cbiAgICAvLyByZWZyZXNoIHN0YXRlXG4gICAgZXh0ZW5zaW9uU3RhdGUucmVzdG9yZSgpXG4gICAgc2hhZGVyU3RhdGUucmVzdG9yZSgpXG4gICAgYnVmZmVyU3RhdGUucmVzdG9yZSgpXG4gICAgdGV4dHVyZVN0YXRlLnJlc3RvcmUoKVxuICAgIHJlbmRlcmJ1ZmZlclN0YXRlLnJlc3RvcmUoKVxuICAgIGZyYW1lYnVmZmVyU3RhdGUucmVzdG9yZSgpXG4gICAgYXR0cmlidXRlU3RhdGUucmVzdG9yZSgpXG4gICAgaWYgKHRpbWVyKSB7XG4gICAgICB0aW1lci5yZXN0b3JlKClcbiAgICB9XG5cbiAgICAvLyByZWZyZXNoIHN0YXRlXG4gICAgY29yZS5wcm9jcy5yZWZyZXNoKClcblxuICAgIC8vIHJlc3RhcnQgUkFGXG4gICAgc3RhcnRSQUYoKVxuXG4gICAgLy8gcmVzdG9yZSBjb250ZXh0XG4gICAgcmVzdG9yZUNhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uIChjYikge1xuICAgICAgY2IoKVxuICAgIH0pXG4gIH1cblxuICBpZiAoY2FudmFzKSB7XG4gICAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoQ09OVEVYVF9MT1NUX0VWRU5ULCBoYW5kbGVDb250ZXh0TG9zcywgZmFsc2UpXG4gICAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoQ09OVEVYVF9SRVNUT1JFRF9FVkVOVCwgaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3kgKCkge1xuICAgIHJhZkNhbGxiYWNrcy5sZW5ndGggPSAwXG4gICAgc3RvcFJBRigpXG5cbiAgICBpZiAoY2FudmFzKSB7XG4gICAgICBjYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihDT05URVhUX0xPU1RfRVZFTlQsIGhhbmRsZUNvbnRleHRMb3NzKVxuICAgICAgY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoQ09OVEVYVF9SRVNUT1JFRF9FVkVOVCwgaGFuZGxlQ29udGV4dFJlc3RvcmVkKVxuICAgIH1cblxuICAgIHNoYWRlclN0YXRlLmNsZWFyKClcbiAgICBmcmFtZWJ1ZmZlclN0YXRlLmNsZWFyKClcbiAgICByZW5kZXJidWZmZXJTdGF0ZS5jbGVhcigpXG4gICAgdGV4dHVyZVN0YXRlLmNsZWFyKClcbiAgICBlbGVtZW50U3RhdGUuY2xlYXIoKVxuICAgIGJ1ZmZlclN0YXRlLmNsZWFyKClcbiAgICBhdHRyaWJ1dGVTdGF0ZS5jbGVhcigpXG5cbiAgICBpZiAodGltZXIpIHtcbiAgICAgIHRpbWVyLmNsZWFyKClcbiAgICB9XG5cbiAgICBkZXN0cm95Q2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24gKGNiKSB7XG4gICAgICBjYigpXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXBpbGVQcm9jZWR1cmUgKG9wdGlvbnMpIHtcbiAgICBjaGVjayQxKCEhb3B0aW9ucywgJ2ludmFsaWQgYXJncyB0byByZWdsKHsuLi59KScpXG4gICAgY2hlY2skMS50eXBlKG9wdGlvbnMsICdvYmplY3QnLCAnaW52YWxpZCBhcmdzIHRvIHJlZ2woey4uLn0pJylcblxuICAgIGZ1bmN0aW9uIGZsYXR0ZW5OZXN0ZWRPcHRpb25zIChvcHRpb25zKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gZXh0ZW5kKHt9LCBvcHRpb25zKVxuICAgICAgZGVsZXRlIHJlc3VsdC51bmlmb3Jtc1xuICAgICAgZGVsZXRlIHJlc3VsdC5hdHRyaWJ1dGVzXG4gICAgICBkZWxldGUgcmVzdWx0LmNvbnRleHRcbiAgICAgIGRlbGV0ZSByZXN1bHQudmFvXG5cbiAgICAgIGlmICgnc3RlbmNpbCcgaW4gcmVzdWx0ICYmIHJlc3VsdC5zdGVuY2lsLm9wKSB7XG4gICAgICAgIHJlc3VsdC5zdGVuY2lsLm9wQmFjayA9IHJlc3VsdC5zdGVuY2lsLm9wRnJvbnQgPSByZXN1bHQuc3RlbmNpbC5vcFxuICAgICAgICBkZWxldGUgcmVzdWx0LnN0ZW5jaWwub3BcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gbWVyZ2UgKG5hbWUpIHtcbiAgICAgICAgaWYgKG5hbWUgaW4gcmVzdWx0KSB7XG4gICAgICAgICAgdmFyIGNoaWxkID0gcmVzdWx0W25hbWVdXG4gICAgICAgICAgZGVsZXRlIHJlc3VsdFtuYW1lXVxuICAgICAgICAgIE9iamVjdC5rZXlzKGNoaWxkKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgICAgICByZXN1bHRbbmFtZSArICcuJyArIHByb3BdID0gY2hpbGRbcHJvcF1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBtZXJnZSgnYmxlbmQnKVxuICAgICAgbWVyZ2UoJ2RlcHRoJylcbiAgICAgIG1lcmdlKCdjdWxsJylcbiAgICAgIG1lcmdlKCdzdGVuY2lsJylcbiAgICAgIG1lcmdlKCdwb2x5Z29uT2Zmc2V0JylcbiAgICAgIG1lcmdlKCdzY2lzc29yJylcbiAgICAgIG1lcmdlKCdzYW1wbGUnKVxuXG4gICAgICBpZiAoJ3ZhbycgaW4gb3B0aW9ucykge1xuICAgICAgICByZXN1bHQudmFvID0gb3B0aW9ucy52YW9cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNlcGFyYXRlRHluYW1pYyAob2JqZWN0LCB1c2VBcnJheXMpIHtcbiAgICAgIHZhciBzdGF0aWNJdGVtcyA9IHt9XG4gICAgICB2YXIgZHluYW1pY0l0ZW1zID0ge31cbiAgICAgIE9iamVjdC5rZXlzKG9iamVjdCkuZm9yRWFjaChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IG9iamVjdFtvcHRpb25dXG4gICAgICAgIGlmIChkeW5hbWljLmlzRHluYW1pYyh2YWx1ZSkpIHtcbiAgICAgICAgICBkeW5hbWljSXRlbXNbb3B0aW9uXSA9IGR5bmFtaWMudW5ib3godmFsdWUsIG9wdGlvbilcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSBlbHNlIGlmICh1c2VBcnJheXMgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAoZHluYW1pYy5pc0R5bmFtaWModmFsdWVbaV0pKSB7XG4gICAgICAgICAgICAgIGR5bmFtaWNJdGVtc1tvcHRpb25dID0gZHluYW1pYy51bmJveCh2YWx1ZSwgb3B0aW9uKVxuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljSXRlbXNbb3B0aW9uXSA9IHZhbHVlXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZHluYW1pYzogZHluYW1pY0l0ZW1zLFxuICAgICAgICBzdGF0aWM6IHN0YXRpY0l0ZW1zXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHJlYXQgY29udGV4dCB2YXJpYWJsZXMgc2VwYXJhdGUgZnJvbSBvdGhlciBkeW5hbWljIHZhcmlhYmxlc1xuICAgIHZhciBjb250ZXh0ID0gc2VwYXJhdGVEeW5hbWljKG9wdGlvbnMuY29udGV4dCB8fCB7fSwgdHJ1ZSlcbiAgICB2YXIgdW5pZm9ybXMgPSBzZXBhcmF0ZUR5bmFtaWMob3B0aW9ucy51bmlmb3JtcyB8fCB7fSwgdHJ1ZSlcbiAgICB2YXIgYXR0cmlidXRlcyA9IHNlcGFyYXRlRHluYW1pYyhvcHRpb25zLmF0dHJpYnV0ZXMgfHwge30sIGZhbHNlKVxuICAgIHZhciBvcHRzID0gc2VwYXJhdGVEeW5hbWljKGZsYXR0ZW5OZXN0ZWRPcHRpb25zKG9wdGlvbnMpLCBmYWxzZSlcblxuICAgIHZhciBzdGF0cyQkMSA9IHtcbiAgICAgIGdwdVRpbWU6IDAuMCxcbiAgICAgIGNwdVRpbWU6IDAuMCxcbiAgICAgIGNvdW50OiAwXG4gICAgfVxuXG4gICAgdmFyIGNvbXBpbGVkID0gY29yZS5jb21waWxlKG9wdHMsIGF0dHJpYnV0ZXMsIHVuaWZvcm1zLCBjb250ZXh0LCBzdGF0cyQkMSlcblxuICAgIHZhciBkcmF3ID0gY29tcGlsZWQuZHJhd1xuICAgIHZhciBiYXRjaCA9IGNvbXBpbGVkLmJhdGNoXG4gICAgdmFyIHNjb3BlID0gY29tcGlsZWQuc2NvcGVcblxuICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgbW9kaWZ5IGNvZGUgZ2VuZXJhdGlvbiBmb3IgYmF0Y2ggY29tbWFuZHMgc28gdGhpc1xuICAgIC8vIGlzbid0IG5lY2Vzc2FyeVxuICAgIHZhciBFTVBUWV9BUlJBWSA9IFtdXG4gICAgZnVuY3Rpb24gcmVzZXJ2ZSAoY291bnQpIHtcbiAgICAgIHdoaWxlIChFTVBUWV9BUlJBWS5sZW5ndGggPCBjb3VudCkge1xuICAgICAgICBFTVBUWV9BUlJBWS5wdXNoKG51bGwpXG4gICAgICB9XG4gICAgICByZXR1cm4gRU1QVFlfQVJSQVlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBSRUdMQ29tbWFuZCAoYXJncywgYm9keSkge1xuICAgICAgdmFyIGlcbiAgICAgIGlmIChjb250ZXh0TG9zdCkge1xuICAgICAgICBjaGVjayQxLnJhaXNlKCdjb250ZXh0IGxvc3QnKVxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBhcmdzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBzY29wZS5jYWxsKHRoaXMsIG51bGwsIGFyZ3MsIDApXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYXJncyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnczsgKytpKSB7XG4gICAgICAgICAgICBzY29wZS5jYWxsKHRoaXMsIG51bGwsIGJvZHksIGkpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJncykpIHtcbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgc2NvcGUuY2FsbCh0aGlzLCBhcmdzW2ldLCBib2R5LCBpKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gc2NvcGUuY2FsbCh0aGlzLCBhcmdzLCBib2R5LCAwKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmdzID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoYXJncyA+IDApIHtcbiAgICAgICAgICByZXR1cm4gYmF0Y2guY2FsbCh0aGlzLCByZXNlcnZlKGFyZ3MgfCAwKSwgYXJncyB8IDApXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmdzKSkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gYmF0Y2guY2FsbCh0aGlzLCBhcmdzLCBhcmdzLmxlbmd0aClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGRyYXcuY2FsbCh0aGlzLCBhcmdzKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBleHRlbmQoUkVHTENvbW1hbmQsIHtcbiAgICAgIHN0YXRzOiBzdGF0cyQkMSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29tcGlsZWQuZGVzdHJveSgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHZhciBzZXRGQk8gPSBmcmFtZWJ1ZmZlclN0YXRlLnNldEZCTyA9IGNvbXBpbGVQcm9jZWR1cmUoe1xuICAgIGZyYW1lYnVmZmVyOiBkeW5hbWljLmRlZmluZS5jYWxsKG51bGwsIERZTl9QUk9QLCAnZnJhbWVidWZmZXInKVxuICB9KVxuXG4gIGZ1bmN0aW9uIGNsZWFySW1wbCAoXywgb3B0aW9ucykge1xuICAgIHZhciBjbGVhckZsYWdzID0gMFxuICAgIGNvcmUucHJvY3MucG9sbCgpXG5cbiAgICB2YXIgYyA9IG9wdGlvbnMuY29sb3JcbiAgICBpZiAoYykge1xuICAgICAgZ2wuY2xlYXJDb2xvcigrY1swXSB8fCAwLCArY1sxXSB8fCAwLCArY1syXSB8fCAwLCArY1szXSB8fCAwKVxuICAgICAgY2xlYXJGbGFncyB8PSBHTF9DT0xPUl9CVUZGRVJfQklUXG4gICAgfVxuICAgIGlmICgnZGVwdGgnIGluIG9wdGlvbnMpIHtcbiAgICAgIGdsLmNsZWFyRGVwdGgoK29wdGlvbnMuZGVwdGgpXG4gICAgICBjbGVhckZsYWdzIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVRcbiAgICB9XG4gICAgaWYgKCdzdGVuY2lsJyBpbiBvcHRpb25zKSB7XG4gICAgICBnbC5jbGVhclN0ZW5jaWwob3B0aW9ucy5zdGVuY2lsIHwgMClcbiAgICAgIGNsZWFyRmxhZ3MgfD0gR0xfU1RFTkNJTF9CVUZGRVJfQklUXG4gICAgfVxuXG4gICAgY2hlY2skMSghIWNsZWFyRmxhZ3MsICdjYWxsZWQgcmVnbC5jbGVhciB3aXRoIG5vIGJ1ZmZlciBzcGVjaWZpZWQnKVxuICAgIGdsLmNsZWFyKGNsZWFyRmxhZ3MpXG4gIH1cblxuICBmdW5jdGlvbiBjbGVhciAob3B0aW9ucykge1xuICAgIGNoZWNrJDEoXG4gICAgICB0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgJiYgb3B0aW9ucyxcbiAgICAgICdyZWdsLmNsZWFyKCkgdGFrZXMgYW4gb2JqZWN0IGFzIGlucHV0JylcbiAgICBpZiAoJ2ZyYW1lYnVmZmVyJyBpbiBvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy5mcmFtZWJ1ZmZlciAmJlxuICAgICAgICAgIG9wdGlvbnMuZnJhbWVidWZmZXJfcmVnbFR5cGUgPT09ICdmcmFtZWJ1ZmZlckN1YmUnKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgKytpKSB7XG4gICAgICAgICAgc2V0RkJPKGV4dGVuZCh7XG4gICAgICAgICAgICBmcmFtZWJ1ZmZlcjogb3B0aW9ucy5mcmFtZWJ1ZmZlci5mYWNlc1tpXVxuICAgICAgICAgIH0sIG9wdGlvbnMpLCBjbGVhckltcGwpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldEZCTyhvcHRpb25zLCBjbGVhckltcGwpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFySW1wbChudWxsLCBvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZyYW1lIChjYikge1xuICAgIGNoZWNrJDEudHlwZShjYiwgJ2Z1bmN0aW9uJywgJ3JlZ2wuZnJhbWUoKSBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24nKVxuICAgIHJhZkNhbGxiYWNrcy5wdXNoKGNiKVxuXG4gICAgZnVuY3Rpb24gY2FuY2VsICgpIHtcbiAgICAgIC8vIEZJWE1FOiAgc2hvdWxkIHdlIGNoZWNrIHNvbWV0aGluZyBvdGhlciB0aGFuIGVxdWFscyBjYiBoZXJlP1xuICAgICAgLy8gd2hhdCBpZiBhIHVzZXIgY2FsbHMgZnJhbWUgdHdpY2Ugd2l0aCB0aGUgc2FtZSBjYWxsYmFjay4uLlxuICAgICAgLy9cbiAgICAgIHZhciBpID0gZmluZChyYWZDYWxsYmFja3MsIGNiKVxuICAgICAgY2hlY2skMShpID49IDAsICdjYW5ub3QgY2FuY2VsIGEgZnJhbWUgdHdpY2UnKVxuICAgICAgZnVuY3Rpb24gcGVuZGluZ0NhbmNlbCAoKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGZpbmQocmFmQ2FsbGJhY2tzLCBwZW5kaW5nQ2FuY2VsKVxuICAgICAgICByYWZDYWxsYmFja3NbaW5kZXhdID0gcmFmQ2FsbGJhY2tzW3JhZkNhbGxiYWNrcy5sZW5ndGggLSAxXVxuICAgICAgICByYWZDYWxsYmFja3MubGVuZ3RoIC09IDFcbiAgICAgICAgaWYgKHJhZkNhbGxiYWNrcy5sZW5ndGggPD0gMCkge1xuICAgICAgICAgIHN0b3BSQUYoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByYWZDYWxsYmFja3NbaV0gPSBwZW5kaW5nQ2FuY2VsXG4gICAgfVxuXG4gICAgc3RhcnRSQUYoKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNhbmNlbDogY2FuY2VsXG4gICAgfVxuICB9XG5cbiAgLy8gcG9sbCB2aWV3cG9ydFxuICBmdW5jdGlvbiBwb2xsVmlld3BvcnQgKCkge1xuICAgIHZhciB2aWV3cG9ydCA9IG5leHRTdGF0ZS52aWV3cG9ydFxuICAgIHZhciBzY2lzc29yQm94ID0gbmV4dFN0YXRlLnNjaXNzb3JfYm94XG4gICAgdmlld3BvcnRbMF0gPSB2aWV3cG9ydFsxXSA9IHNjaXNzb3JCb3hbMF0gPSBzY2lzc29yQm94WzFdID0gMFxuICAgIGNvbnRleHRTdGF0ZS52aWV3cG9ydFdpZHRoID1cbiAgICAgIGNvbnRleHRTdGF0ZS5mcmFtZWJ1ZmZlcldpZHRoID1cbiAgICAgIGNvbnRleHRTdGF0ZS5kcmF3aW5nQnVmZmVyV2lkdGggPVxuICAgICAgdmlld3BvcnRbMl0gPVxuICAgICAgc2Npc3NvckJveFsyXSA9IGdsLmRyYXdpbmdCdWZmZXJXaWR0aFxuICAgIGNvbnRleHRTdGF0ZS52aWV3cG9ydEhlaWdodCA9XG4gICAgICBjb250ZXh0U3RhdGUuZnJhbWVidWZmZXJIZWlnaHQgPVxuICAgICAgY29udGV4dFN0YXRlLmRyYXdpbmdCdWZmZXJIZWlnaHQgPVxuICAgICAgdmlld3BvcnRbM10gPVxuICAgICAgc2Npc3NvckJveFszXSA9IGdsLmRyYXdpbmdCdWZmZXJIZWlnaHRcbiAgfVxuXG4gIGZ1bmN0aW9uIHBvbGwgKCkge1xuICAgIGNvbnRleHRTdGF0ZS50aWNrICs9IDFcbiAgICBjb250ZXh0U3RhdGUudGltZSA9IG5vdygpXG4gICAgcG9sbFZpZXdwb3J0KClcbiAgICBjb3JlLnByb2NzLnBvbGwoKVxuICB9XG5cbiAgZnVuY3Rpb24gcmVmcmVzaCAoKSB7XG4gICAgdGV4dHVyZVN0YXRlLnJlZnJlc2goKVxuICAgIHBvbGxWaWV3cG9ydCgpXG4gICAgY29yZS5wcm9jcy5yZWZyZXNoKClcbiAgICBpZiAodGltZXIpIHtcbiAgICAgIHRpbWVyLnVwZGF0ZSgpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbm93ICgpIHtcbiAgICByZXR1cm4gKGNsb2NrKCkgLSBTVEFSVF9USU1FKSAvIDEwMDAuMFxuICB9XG5cbiAgcmVmcmVzaCgpXG5cbiAgZnVuY3Rpb24gYWRkTGlzdGVuZXIgKGV2ZW50LCBjYWxsYmFjaykge1xuICAgIGNoZWNrJDEudHlwZShjYWxsYmFjaywgJ2Z1bmN0aW9uJywgJ2xpc3RlbmVyIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbicpXG5cbiAgICB2YXIgY2FsbGJhY2tzXG4gICAgc3dpdGNoIChldmVudCkge1xuICAgICAgY2FzZSAnZnJhbWUnOlxuICAgICAgICByZXR1cm4gZnJhbWUoY2FsbGJhY2spXG4gICAgICBjYXNlICdsb3N0JzpcbiAgICAgICAgY2FsbGJhY2tzID0gbG9zc0NhbGxiYWNrc1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncmVzdG9yZSc6XG4gICAgICAgIGNhbGxiYWNrcyA9IHJlc3RvcmVDYWxsYmFja3NcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2Rlc3Ryb3knOlxuICAgICAgICBjYWxsYmFja3MgPSBkZXN0cm95Q2FsbGJhY2tzXG4gICAgICAgIGJyZWFrXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjaGVjayQxLnJhaXNlKCdpbnZhbGlkIGV2ZW50LCBtdXN0IGJlIG9uZSBvZiBmcmFtZSxsb3N0LHJlc3RvcmUsZGVzdHJveScpXG4gICAgfVxuXG4gICAgY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spXG4gICAgcmV0dXJuIHtcbiAgICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGlmIChjYWxsYmFja3NbaV0gPT09IGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFja3NbaV0gPSBjYWxsYmFja3NbY2FsbGJhY2tzLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICBjYWxsYmFja3MucG9wKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciByZWdsID0gZXh0ZW5kKGNvbXBpbGVQcm9jZWR1cmUsIHtcbiAgICAvLyBDbGVhciBjdXJyZW50IEZCT1xuICAgIGNsZWFyOiBjbGVhcixcblxuICAgIC8vIFNob3J0IGN1dHMgZm9yIGR5bmFtaWMgdmFyaWFibGVzXG4gICAgcHJvcDogZHluYW1pYy5kZWZpbmUuYmluZChudWxsLCBEWU5fUFJPUCksXG4gICAgY29udGV4dDogZHluYW1pYy5kZWZpbmUuYmluZChudWxsLCBEWU5fQ09OVEVYVCksXG4gICAgdGhpczogZHluYW1pYy5kZWZpbmUuYmluZChudWxsLCBEWU5fU1RBVEUpLFxuXG4gICAgLy8gZXhlY3V0ZXMgYW4gZW1wdHkgZHJhdyBjb21tYW5kXG4gICAgZHJhdzogY29tcGlsZVByb2NlZHVyZSh7fSksXG5cbiAgICAvLyBSZXNvdXJjZXNcbiAgICBidWZmZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYnVmZmVyU3RhdGUuY3JlYXRlKG9wdGlvbnMsIEdMX0FSUkFZX0JVRkZFUiwgZmFsc2UsIGZhbHNlKVxuICAgIH0sXG4gICAgZWxlbWVudHM6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICByZXR1cm4gZWxlbWVudFN0YXRlLmNyZWF0ZShvcHRpb25zLCBmYWxzZSlcbiAgICB9LFxuICAgIHRleHR1cmU6IHRleHR1cmVTdGF0ZS5jcmVhdGUyRCxcbiAgICBjdWJlOiB0ZXh0dXJlU3RhdGUuY3JlYXRlQ3ViZSxcbiAgICByZW5kZXJidWZmZXI6IHJlbmRlcmJ1ZmZlclN0YXRlLmNyZWF0ZSxcbiAgICBmcmFtZWJ1ZmZlcjogZnJhbWVidWZmZXJTdGF0ZS5jcmVhdGUsXG4gICAgZnJhbWVidWZmZXJDdWJlOiBmcmFtZWJ1ZmZlclN0YXRlLmNyZWF0ZUN1YmUsXG4gICAgdmFvOiBhdHRyaWJ1dGVTdGF0ZS5jcmVhdGVWQU8sXG5cbiAgICAvLyBFeHBvc2UgY29udGV4dCBhdHRyaWJ1dGVzXG4gICAgYXR0cmlidXRlczogZ2xBdHRyaWJ1dGVzLFxuXG4gICAgLy8gRnJhbWUgcmVuZGVyaW5nXG4gICAgZnJhbWU6IGZyYW1lLFxuICAgIG9uOiBhZGRMaXN0ZW5lcixcblxuICAgIC8vIFN5c3RlbSBsaW1pdHNcbiAgICBsaW1pdHM6IGxpbWl0cyxcbiAgICBoYXNFeHRlbnNpb246IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICByZXR1cm4gbGltaXRzLmV4dGVuc2lvbnMuaW5kZXhPZihuYW1lLnRvTG93ZXJDYXNlKCkpID49IDBcbiAgICB9LFxuXG4gICAgLy8gUmVhZCBwaXhlbHNcbiAgICByZWFkOiByZWFkUGl4ZWxzLFxuXG4gICAgLy8gRGVzdHJveSByZWdsIGFuZCBhbGwgYXNzb2NpYXRlZCByZXNvdXJjZXNcbiAgICBkZXN0cm95OiBkZXN0cm95LFxuXG4gICAgLy8gRGlyZWN0IEdMIHN0YXRlIG1hbmlwdWxhdGlvblxuICAgIF9nbDogZ2wsXG4gICAgX3JlZnJlc2g6IHJlZnJlc2gsXG5cbiAgICBwb2xsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBwb2xsKClcbiAgICAgIGlmICh0aW1lcikge1xuICAgICAgICB0aW1lci51cGRhdGUoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBDdXJyZW50IHRpbWVcbiAgICBub3c6IG5vdyxcblxuICAgIC8vIHJlZ2wgU3RhdGlzdGljcyBJbmZvcm1hdGlvblxuICAgIHN0YXRzOiBzdGF0cyQkMVxuICB9KVxuXG4gIGNvbmZpZy5vbkRvbmUobnVsbCwgcmVnbClcblxuICByZXR1cm4gcmVnbFxufVxuXG5yZXR1cm4gd3JhcFJFR0w7XG5cbn0pKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWdsLmpzLm1hcFxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIHdpZHRoID0gMjU2Oy8vIGVhY2ggUkM0IG91dHB1dCBpcyAwIDw9IHggPCAyNTZcclxudmFyIGNodW5rcyA9IDY7Ly8gYXQgbGVhc3Qgc2l4IFJDNCBvdXRwdXRzIGZvciBlYWNoIGRvdWJsZVxyXG52YXIgZGlnaXRzID0gNTI7Ly8gdGhlcmUgYXJlIDUyIHNpZ25pZmljYW50IGRpZ2l0cyBpbiBhIGRvdWJsZVxyXG52YXIgcG9vbCA9IFtdOy8vIHBvb2w6IGVudHJvcHkgcG9vbCBzdGFydHMgZW1wdHlcclxudmFyIEdMT0JBTCA9IHR5cGVvZiBnbG9iYWwgPT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsO1xyXG5cclxuLy9cclxuLy8gVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlbGF0ZWQgdG8gSUVFRSA3NTQgbGltaXRzLlxyXG4vL1xyXG52YXIgc3RhcnRkZW5vbSA9IE1hdGgucG93KHdpZHRoLCBjaHVua3MpLFxyXG4gICAgc2lnbmlmaWNhbmNlID0gTWF0aC5wb3coMiwgZGlnaXRzKSxcclxuICAgIG92ZXJmbG93ID0gc2lnbmlmaWNhbmNlICogMixcclxuICAgIG1hc2sgPSB3aWR0aCAtIDE7XHJcblxyXG5cclxudmFyIG9sZFJhbmRvbSA9IE1hdGgucmFuZG9tO1xyXG5cclxuLy9cclxuLy8gc2VlZHJhbmRvbSgpXHJcbi8vIFRoaXMgaXMgdGhlIHNlZWRyYW5kb20gZnVuY3Rpb24gZGVzY3JpYmVkIGFib3ZlLlxyXG4vL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHNlZWQsIG9wdGlvbnMpIHtcclxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdsb2JhbCA9PT0gdHJ1ZSkge1xyXG4gICAgb3B0aW9ucy5nbG9iYWwgPSBmYWxzZTtcclxuICAgIE1hdGgucmFuZG9tID0gbW9kdWxlLmV4cG9ydHMoc2VlZCwgb3B0aW9ucyk7XHJcbiAgICBvcHRpb25zLmdsb2JhbCA9IHRydWU7XHJcbiAgICByZXR1cm4gTWF0aC5yYW5kb207XHJcbiAgfVxyXG4gIHZhciB1c2VfZW50cm9weSA9IChvcHRpb25zICYmIG9wdGlvbnMuZW50cm9weSkgfHwgZmFsc2U7XHJcbiAgdmFyIGtleSA9IFtdO1xyXG5cclxuICAvLyBGbGF0dGVuIHRoZSBzZWVkIHN0cmluZyBvciBidWlsZCBvbmUgZnJvbSBsb2NhbCBlbnRyb3B5IGlmIG5lZWRlZC5cclxuICB2YXIgc2hvcnRzZWVkID0gbWl4a2V5KGZsYXR0ZW4oXHJcbiAgICB1c2VfZW50cm9weSA/IFtzZWVkLCB0b3N0cmluZyhwb29sKV0gOlxyXG4gICAgMCBpbiBhcmd1bWVudHMgPyBzZWVkIDogYXV0b3NlZWQoKSwgMyksIGtleSk7XHJcblxyXG4gIC8vIFVzZSB0aGUgc2VlZCB0byBpbml0aWFsaXplIGFuIEFSQzQgZ2VuZXJhdG9yLlxyXG4gIHZhciBhcmM0ID0gbmV3IEFSQzQoa2V5KTtcclxuXHJcbiAgLy8gTWl4IHRoZSByYW5kb21uZXNzIGludG8gYWNjdW11bGF0ZWQgZW50cm9weS5cclxuICBtaXhrZXkodG9zdHJpbmcoYXJjNC5TKSwgcG9vbCk7XHJcblxyXG4gIC8vIE92ZXJyaWRlIE1hdGgucmFuZG9tXHJcblxyXG4gIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHJhbmRvbSBkb3VibGUgaW4gWzAsIDEpIHRoYXQgY29udGFpbnNcclxuICAvLyByYW5kb21uZXNzIGluIGV2ZXJ5IGJpdCBvZiB0aGUgbWFudGlzc2Egb2YgdGhlIElFRUUgNzU0IHZhbHVlLlxyXG5cclxuICByZXR1cm4gZnVuY3Rpb24oKSB7ICAgICAgICAgLy8gQ2xvc3VyZSB0byByZXR1cm4gYSByYW5kb20gZG91YmxlOlxyXG4gICAgdmFyIG4gPSBhcmM0LmcoY2h1bmtzKSwgICAgICAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG51bWVyYXRvciBuIDwgMiBeIDQ4XHJcbiAgICAgICAgZCA9IHN0YXJ0ZGVub20sICAgICAgICAgICAgICAgICAvLyAgIGFuZCBkZW5vbWluYXRvciBkID0gMiBeIDQ4LlxyXG4gICAgICAgIHggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBhbmQgbm8gJ2V4dHJhIGxhc3QgYnl0ZScuXHJcbiAgICB3aGlsZSAobiA8IHNpZ25pZmljYW5jZSkgeyAgICAgICAgICAvLyBGaWxsIHVwIGFsbCBzaWduaWZpY2FudCBkaWdpdHMgYnlcclxuICAgICAgbiA9IChuICsgeCkgKiB3aWR0aDsgICAgICAgICAgICAgIC8vICAgc2hpZnRpbmcgbnVtZXJhdG9yIGFuZFxyXG4gICAgICBkICo9IHdpZHRoOyAgICAgICAgICAgICAgICAgICAgICAgLy8gICBkZW5vbWluYXRvciBhbmQgZ2VuZXJhdGluZyBhXHJcbiAgICAgIHggPSBhcmM0LmcoMSk7ICAgICAgICAgICAgICAgICAgICAvLyAgIG5ldyBsZWFzdC1zaWduaWZpY2FudC1ieXRlLlxyXG4gICAgfVxyXG4gICAgd2hpbGUgKG4gPj0gb3ZlcmZsb3cpIHsgICAgICAgICAgICAgLy8gVG8gYXZvaWQgcm91bmRpbmcgdXAsIGJlZm9yZSBhZGRpbmdcclxuICAgICAgbiAvPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgbGFzdCBieXRlLCBzaGlmdCBldmVyeXRoaW5nXHJcbiAgICAgIGQgLz0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIHJpZ2h0IHVzaW5nIGludGVnZXIgTWF0aCB1bnRpbFxyXG4gICAgICB4ID4+Pj0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB3ZSBoYXZlIGV4YWN0bHkgdGhlIGRlc2lyZWQgYml0cy5cclxuICAgIH1cclxuICAgIHJldHVybiAobiArIHgpIC8gZDsgICAgICAgICAgICAgICAgIC8vIEZvcm0gdGhlIG51bWJlciB3aXRoaW4gWzAsIDEpLlxyXG4gIH07XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5yZXNldEdsb2JhbCA9IGZ1bmN0aW9uICgpIHtcclxuICBNYXRoLnJhbmRvbSA9IG9sZFJhbmRvbTtcclxufTtcclxuXHJcbi8vXHJcbi8vIEFSQzRcclxuLy9cclxuLy8gQW4gQVJDNCBpbXBsZW1lbnRhdGlvbi4gIFRoZSBjb25zdHJ1Y3RvciB0YWtlcyBhIGtleSBpbiB0aGUgZm9ybSBvZlxyXG4vLyBhbiBhcnJheSBvZiBhdCBtb3N0ICh3aWR0aCkgaW50ZWdlcnMgdGhhdCBzaG91bGQgYmUgMCA8PSB4IDwgKHdpZHRoKS5cclxuLy9cclxuLy8gVGhlIGcoY291bnQpIG1ldGhvZCByZXR1cm5zIGEgcHNldWRvcmFuZG9tIGludGVnZXIgdGhhdCBjb25jYXRlbmF0ZXNcclxuLy8gdGhlIG5leHQgKGNvdW50KSBvdXRwdXRzIGZyb20gQVJDNC4gIEl0cyByZXR1cm4gdmFsdWUgaXMgYSBudW1iZXIgeFxyXG4vLyB0aGF0IGlzIGluIHRoZSByYW5nZSAwIDw9IHggPCAod2lkdGggXiBjb3VudCkuXHJcbi8vXHJcbi8qKiBAY29uc3RydWN0b3IgKi9cclxuZnVuY3Rpb24gQVJDNChrZXkpIHtcclxuICB2YXIgdCwga2V5bGVuID0ga2V5Lmxlbmd0aCxcclxuICAgICAgbWUgPSB0aGlzLCBpID0gMCwgaiA9IG1lLmkgPSBtZS5qID0gMCwgcyA9IG1lLlMgPSBbXTtcclxuXHJcbiAgLy8gVGhlIGVtcHR5IGtleSBbXSBpcyB0cmVhdGVkIGFzIFswXS5cclxuICBpZiAoIWtleWxlbikgeyBrZXkgPSBba2V5bGVuKytdOyB9XHJcblxyXG4gIC8vIFNldCB1cCBTIHVzaW5nIHRoZSBzdGFuZGFyZCBrZXkgc2NoZWR1bGluZyBhbGdvcml0aG0uXHJcbiAgd2hpbGUgKGkgPCB3aWR0aCkge1xyXG4gICAgc1tpXSA9IGkrKztcclxuICB9XHJcbiAgZm9yIChpID0gMDsgaSA8IHdpZHRoOyBpKyspIHtcclxuICAgIHNbaV0gPSBzW2ogPSBtYXNrICYgKGogKyBrZXlbaSAlIGtleWxlbl0gKyAodCA9IHNbaV0pKV07XHJcbiAgICBzW2pdID0gdDtcclxuICB9XHJcblxyXG4gIC8vIFRoZSBcImdcIiBtZXRob2QgcmV0dXJucyB0aGUgbmV4dCAoY291bnQpIG91dHB1dHMgYXMgb25lIG51bWJlci5cclxuICAobWUuZyA9IGZ1bmN0aW9uKGNvdW50KSB7XHJcbiAgICAvLyBVc2luZyBpbnN0YW5jZSBtZW1iZXJzIGluc3RlYWQgb2YgY2xvc3VyZSBzdGF0ZSBuZWFybHkgZG91YmxlcyBzcGVlZC5cclxuICAgIHZhciB0LCByID0gMCxcclxuICAgICAgICBpID0gbWUuaSwgaiA9IG1lLmosIHMgPSBtZS5TO1xyXG4gICAgd2hpbGUgKGNvdW50LS0pIHtcclxuICAgICAgdCA9IHNbaSA9IG1hc2sgJiAoaSArIDEpXTtcclxuICAgICAgciA9IHIgKiB3aWR0aCArIHNbbWFzayAmICgoc1tpXSA9IHNbaiA9IG1hc2sgJiAoaiArIHQpXSkgKyAoc1tqXSA9IHQpKV07XHJcbiAgICB9XHJcbiAgICBtZS5pID0gaTsgbWUuaiA9IGo7XHJcbiAgICByZXR1cm4gcjtcclxuICAgIC8vIEZvciByb2J1c3QgdW5wcmVkaWN0YWJpbGl0eSBkaXNjYXJkIGFuIGluaXRpYWwgYmF0Y2ggb2YgdmFsdWVzLlxyXG4gICAgLy8gU2VlIGh0dHA6Ly93d3cucnNhLmNvbS9yc2FsYWJzL25vZGUuYXNwP2lkPTIwMDlcclxuICB9KSh3aWR0aCk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIGZsYXR0ZW4oKVxyXG4vLyBDb252ZXJ0cyBhbiBvYmplY3QgdHJlZSB0byBuZXN0ZWQgYXJyYXlzIG9mIHN0cmluZ3MuXHJcbi8vXHJcbmZ1bmN0aW9uIGZsYXR0ZW4ob2JqLCBkZXB0aCkge1xyXG4gIHZhciByZXN1bHQgPSBbXSwgdHlwID0gKHR5cGVvZiBvYmopWzBdLCBwcm9wO1xyXG4gIGlmIChkZXB0aCAmJiB0eXAgPT0gJ28nKSB7XHJcbiAgICBmb3IgKHByb3AgaW4gb2JqKSB7XHJcbiAgICAgIHRyeSB7IHJlc3VsdC5wdXNoKGZsYXR0ZW4ob2JqW3Byb3BdLCBkZXB0aCAtIDEpKTsgfSBjYXRjaCAoZSkge31cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIChyZXN1bHQubGVuZ3RoID8gcmVzdWx0IDogdHlwID09ICdzJyA/IG9iaiA6IG9iaiArICdcXDAnKTtcclxufVxyXG5cclxuLy9cclxuLy8gbWl4a2V5KClcclxuLy8gTWl4ZXMgYSBzdHJpbmcgc2VlZCBpbnRvIGEga2V5IHRoYXQgaXMgYW4gYXJyYXkgb2YgaW50ZWdlcnMsIGFuZFxyXG4vLyByZXR1cm5zIGEgc2hvcnRlbmVkIHN0cmluZyBzZWVkIHRoYXQgaXMgZXF1aXZhbGVudCB0byB0aGUgcmVzdWx0IGtleS5cclxuLy9cclxuZnVuY3Rpb24gbWl4a2V5KHNlZWQsIGtleSkge1xyXG4gIHZhciBzdHJpbmdzZWVkID0gc2VlZCArICcnLCBzbWVhciwgaiA9IDA7XHJcbiAgd2hpbGUgKGogPCBzdHJpbmdzZWVkLmxlbmd0aCkge1xyXG4gICAga2V5W21hc2sgJiBqXSA9XHJcbiAgICAgIG1hc2sgJiAoKHNtZWFyIF49IGtleVttYXNrICYgal0gKiAxOSkgKyBzdHJpbmdzZWVkLmNoYXJDb2RlQXQoaisrKSk7XHJcbiAgfVxyXG4gIHJldHVybiB0b3N0cmluZyhrZXkpO1xyXG59XHJcblxyXG4vL1xyXG4vLyBhdXRvc2VlZCgpXHJcbi8vIFJldHVybnMgYW4gb2JqZWN0IGZvciBhdXRvc2VlZGluZywgdXNpbmcgd2luZG93LmNyeXB0byBpZiBhdmFpbGFibGUuXHJcbi8vXHJcbi8qKiBAcGFyYW0ge1VpbnQ4QXJyYXk9fSBzZWVkICovXHJcbmZ1bmN0aW9uIGF1dG9zZWVkKHNlZWQpIHtcclxuICB0cnkge1xyXG4gICAgR0xPQkFMLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoc2VlZCA9IG5ldyBVaW50OEFycmF5KHdpZHRoKSk7XHJcbiAgICByZXR1cm4gdG9zdHJpbmcoc2VlZCk7XHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgcmV0dXJuIFsrbmV3IERhdGUsIEdMT0JBTCwgR0xPQkFMLm5hdmlnYXRvciAmJiBHTE9CQUwubmF2aWdhdG9yLnBsdWdpbnMsXHJcbiAgICAgICAgICAgIEdMT0JBTC5zY3JlZW4sIHRvc3RyaW5nKHBvb2wpXTtcclxuICB9XHJcbn1cclxuXHJcbi8vXHJcbi8vIHRvc3RyaW5nKClcclxuLy8gQ29udmVydHMgYW4gYXJyYXkgb2YgY2hhcmNvZGVzIHRvIGEgc3RyaW5nXHJcbi8vXHJcbmZ1bmN0aW9uIHRvc3RyaW5nKGEpIHtcclxuICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseSgwLCBhKTtcclxufVxyXG5cclxuLy9cclxuLy8gV2hlbiBzZWVkcmFuZG9tLmpzIGlzIGxvYWRlZCwgd2UgaW1tZWRpYXRlbHkgbWl4IGEgZmV3IGJpdHNcclxuLy8gZnJvbSB0aGUgYnVpbHQtaW4gUk5HIGludG8gdGhlIGVudHJvcHkgcG9vbC4gIEJlY2F1c2Ugd2UgZG9cclxuLy8gbm90IHdhbnQgdG8gaW50ZWZlcmUgd2l0aCBkZXRlcm1pbnN0aWMgUFJORyBzdGF0ZSBsYXRlcixcclxuLy8gc2VlZHJhbmRvbSB3aWxsIG5vdCBjYWxsIE1hdGgucmFuZG9tIG9uIGl0cyBvd24gYWdhaW4gYWZ0ZXJcclxuLy8gaW5pdGlhbGl6YXRpb24uXHJcbi8vXHJcbm1peGtleShNYXRoLnJhbmRvbSgpLCBwb29sKTtcclxuIiwiLypcbiAqIEEgZmFzdCBqYXZhc2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHNpbXBsZXggbm9pc2UgYnkgSm9uYXMgV2FnbmVyXG5cbkJhc2VkIG9uIGEgc3BlZWQtaW1wcm92ZWQgc2ltcGxleCBub2lzZSBhbGdvcml0aG0gZm9yIDJELCAzRCBhbmQgNEQgaW4gSmF2YS5cbldoaWNoIGlzIGJhc2VkIG9uIGV4YW1wbGUgY29kZSBieSBTdGVmYW4gR3VzdGF2c29uIChzdGVndUBpdG4ubGl1LnNlKS5cbldpdGggT3B0aW1pc2F0aW9ucyBieSBQZXRlciBFYXN0bWFuIChwZWFzdG1hbkBkcml6emxlLnN0YW5mb3JkLmVkdSkuXG5CZXR0ZXIgcmFuayBvcmRlcmluZyBtZXRob2QgYnkgU3RlZmFuIEd1c3RhdnNvbiBpbiAyMDEyLlxuXG5cbiBDb3B5cmlnaHQgKGMpIDIwMTggSm9uYXMgV2FnbmVyXG5cbiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiBTT0ZUV0FSRS5cbiAqL1xuKGZ1bmN0aW9uKCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIEYyID0gMC41ICogKE1hdGguc3FydCgzLjApIC0gMS4wKTtcbiAgdmFyIEcyID0gKDMuMCAtIE1hdGguc3FydCgzLjApKSAvIDYuMDtcbiAgdmFyIEYzID0gMS4wIC8gMy4wO1xuICB2YXIgRzMgPSAxLjAgLyA2LjA7XG4gIHZhciBGNCA9IChNYXRoLnNxcnQoNS4wKSAtIDEuMCkgLyA0LjA7XG4gIHZhciBHNCA9ICg1LjAgLSBNYXRoLnNxcnQoNS4wKSkgLyAyMC4wO1xuXG4gIGZ1bmN0aW9uIFNpbXBsZXhOb2lzZShyYW5kb21PclNlZWQpIHtcbiAgICB2YXIgcmFuZG9tO1xuICAgIGlmICh0eXBlb2YgcmFuZG9tT3JTZWVkID09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJhbmRvbSA9IHJhbmRvbU9yU2VlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZG9tT3JTZWVkKSB7XG4gICAgICByYW5kb20gPSBhbGVhKHJhbmRvbU9yU2VlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmRvbSA9IE1hdGgucmFuZG9tO1xuICAgIH1cbiAgICB0aGlzLnAgPSBidWlsZFBlcm11dGF0aW9uVGFibGUocmFuZG9tKTtcbiAgICB0aGlzLnBlcm0gPSBuZXcgVWludDhBcnJheSg1MTIpO1xuICAgIHRoaXMucGVybU1vZDEyID0gbmV3IFVpbnQ4QXJyYXkoNTEyKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDUxMjsgaSsrKSB7XG4gICAgICB0aGlzLnBlcm1baV0gPSB0aGlzLnBbaSAmIDI1NV07XG4gICAgICB0aGlzLnBlcm1Nb2QxMltpXSA9IHRoaXMucGVybVtpXSAlIDEyO1xuICAgIH1cblxuICB9XG4gIFNpbXBsZXhOb2lzZS5wcm90b3R5cGUgPSB7XG4gICAgZ3JhZDM6IG5ldyBGbG9hdDMyQXJyYXkoWzEsIDEsIDAsXG4gICAgICAtMSwgMSwgMCxcbiAgICAgIDEsIC0xLCAwLFxuXG4gICAgICAtMSwgLTEsIDAsXG4gICAgICAxLCAwLCAxLFxuICAgICAgLTEsIDAsIDEsXG5cbiAgICAgIDEsIDAsIC0xLFxuICAgICAgLTEsIDAsIC0xLFxuICAgICAgMCwgMSwgMSxcblxuICAgICAgMCwgLTEsIDEsXG4gICAgICAwLCAxLCAtMSxcbiAgICAgIDAsIC0xLCAtMV0pLFxuICAgIGdyYWQ0OiBuZXcgRmxvYXQzMkFycmF5KFswLCAxLCAxLCAxLCAwLCAxLCAxLCAtMSwgMCwgMSwgLTEsIDEsIDAsIDEsIC0xLCAtMSxcbiAgICAgIDAsIC0xLCAxLCAxLCAwLCAtMSwgMSwgLTEsIDAsIC0xLCAtMSwgMSwgMCwgLTEsIC0xLCAtMSxcbiAgICAgIDEsIDAsIDEsIDEsIDEsIDAsIDEsIC0xLCAxLCAwLCAtMSwgMSwgMSwgMCwgLTEsIC0xLFxuICAgICAgLTEsIDAsIDEsIDEsIC0xLCAwLCAxLCAtMSwgLTEsIDAsIC0xLCAxLCAtMSwgMCwgLTEsIC0xLFxuICAgICAgMSwgMSwgMCwgMSwgMSwgMSwgMCwgLTEsIDEsIC0xLCAwLCAxLCAxLCAtMSwgMCwgLTEsXG4gICAgICAtMSwgMSwgMCwgMSwgLTEsIDEsIDAsIC0xLCAtMSwgLTEsIDAsIDEsIC0xLCAtMSwgMCwgLTEsXG4gICAgICAxLCAxLCAxLCAwLCAxLCAxLCAtMSwgMCwgMSwgLTEsIDEsIDAsIDEsIC0xLCAtMSwgMCxcbiAgICAgIC0xLCAxLCAxLCAwLCAtMSwgMSwgLTEsIDAsIC0xLCAtMSwgMSwgMCwgLTEsIC0xLCAtMSwgMF0pLFxuICAgIG5vaXNlMkQ6IGZ1bmN0aW9uKHhpbiwgeWluKSB7XG4gICAgICB2YXIgcGVybU1vZDEyID0gdGhpcy5wZXJtTW9kMTI7XG4gICAgICB2YXIgcGVybSA9IHRoaXMucGVybTtcbiAgICAgIHZhciBncmFkMyA9IHRoaXMuZ3JhZDM7XG4gICAgICB2YXIgbjAgPSAwOyAvLyBOb2lzZSBjb250cmlidXRpb25zIGZyb20gdGhlIHRocmVlIGNvcm5lcnNcbiAgICAgIHZhciBuMSA9IDA7XG4gICAgICB2YXIgbjIgPSAwO1xuICAgICAgLy8gU2tldyB0aGUgaW5wdXQgc3BhY2UgdG8gZGV0ZXJtaW5lIHdoaWNoIHNpbXBsZXggY2VsbCB3ZSdyZSBpblxuICAgICAgdmFyIHMgPSAoeGluICsgeWluKSAqIEYyOyAvLyBIYWlyeSBmYWN0b3IgZm9yIDJEXG4gICAgICB2YXIgaSA9IE1hdGguZmxvb3IoeGluICsgcyk7XG4gICAgICB2YXIgaiA9IE1hdGguZmxvb3IoeWluICsgcyk7XG4gICAgICB2YXIgdCA9IChpICsgaikgKiBHMjtcbiAgICAgIHZhciBYMCA9IGkgLSB0OyAvLyBVbnNrZXcgdGhlIGNlbGwgb3JpZ2luIGJhY2sgdG8gKHgseSkgc3BhY2VcbiAgICAgIHZhciBZMCA9IGogLSB0O1xuICAgICAgdmFyIHgwID0geGluIC0gWDA7IC8vIFRoZSB4LHkgZGlzdGFuY2VzIGZyb20gdGhlIGNlbGwgb3JpZ2luXG4gICAgICB2YXIgeTAgPSB5aW4gLSBZMDtcbiAgICAgIC8vIEZvciB0aGUgMkQgY2FzZSwgdGhlIHNpbXBsZXggc2hhcGUgaXMgYW4gZXF1aWxhdGVyYWwgdHJpYW5nbGUuXG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggc2ltcGxleCB3ZSBhcmUgaW4uXG4gICAgICB2YXIgaTEsIGoxOyAvLyBPZmZzZXRzIGZvciBzZWNvbmQgKG1pZGRsZSkgY29ybmVyIG9mIHNpbXBsZXggaW4gKGksaikgY29vcmRzXG4gICAgICBpZiAoeDAgPiB5MCkge1xuICAgICAgICBpMSA9IDE7XG4gICAgICAgIGoxID0gMDtcbiAgICAgIH0gLy8gbG93ZXIgdHJpYW5nbGUsIFhZIG9yZGVyOiAoMCwwKS0+KDEsMCktPigxLDEpXG4gICAgICBlbHNlIHtcbiAgICAgICAgaTEgPSAwO1xuICAgICAgICBqMSA9IDE7XG4gICAgICB9IC8vIHVwcGVyIHRyaWFuZ2xlLCBZWCBvcmRlcjogKDAsMCktPigwLDEpLT4oMSwxKVxuICAgICAgLy8gQSBzdGVwIG9mICgxLDApIGluIChpLGopIG1lYW5zIGEgc3RlcCBvZiAoMS1jLC1jKSBpbiAoeCx5KSwgYW5kXG4gICAgICAvLyBhIHN0ZXAgb2YgKDAsMSkgaW4gKGksaikgbWVhbnMgYSBzdGVwIG9mICgtYywxLWMpIGluICh4LHkpLCB3aGVyZVxuICAgICAgLy8gYyA9ICgzLXNxcnQoMykpLzZcbiAgICAgIHZhciB4MSA9IHgwIC0gaTEgKyBHMjsgLy8gT2Zmc2V0cyBmb3IgbWlkZGxlIGNvcm5lciBpbiAoeCx5KSB1bnNrZXdlZCBjb29yZHNcbiAgICAgIHZhciB5MSA9IHkwIC0gajEgKyBHMjtcbiAgICAgIHZhciB4MiA9IHgwIC0gMS4wICsgMi4wICogRzI7IC8vIE9mZnNldHMgZm9yIGxhc3QgY29ybmVyIGluICh4LHkpIHVuc2tld2VkIGNvb3Jkc1xuICAgICAgdmFyIHkyID0geTAgLSAxLjAgKyAyLjAgKiBHMjtcbiAgICAgIC8vIFdvcmsgb3V0IHRoZSBoYXNoZWQgZ3JhZGllbnQgaW5kaWNlcyBvZiB0aGUgdGhyZWUgc2ltcGxleCBjb3JuZXJzXG4gICAgICB2YXIgaWkgPSBpICYgMjU1O1xuICAgICAgdmFyIGpqID0gaiAmIDI1NTtcbiAgICAgIC8vIENhbGN1bGF0ZSB0aGUgY29udHJpYnV0aW9uIGZyb20gdGhlIHRocmVlIGNvcm5lcnNcbiAgICAgIHZhciB0MCA9IDAuNSAtIHgwICogeDAgLSB5MCAqIHkwO1xuICAgICAgaWYgKHQwID49IDApIHtcbiAgICAgICAgdmFyIGdpMCA9IHBlcm1Nb2QxMltpaSArIHBlcm1bampdXSAqIDM7XG4gICAgICAgIHQwICo9IHQwO1xuICAgICAgICBuMCA9IHQwICogdDAgKiAoZ3JhZDNbZ2kwXSAqIHgwICsgZ3JhZDNbZ2kwICsgMV0gKiB5MCk7IC8vICh4LHkpIG9mIGdyYWQzIHVzZWQgZm9yIDJEIGdyYWRpZW50XG4gICAgICB9XG4gICAgICB2YXIgdDEgPSAwLjUgLSB4MSAqIHgxIC0geTEgKiB5MTtcbiAgICAgIGlmICh0MSA+PSAwKSB7XG4gICAgICAgIHZhciBnaTEgPSBwZXJtTW9kMTJbaWkgKyBpMSArIHBlcm1bamogKyBqMV1dICogMztcbiAgICAgICAgdDEgKj0gdDE7XG4gICAgICAgIG4xID0gdDEgKiB0MSAqIChncmFkM1tnaTFdICogeDEgKyBncmFkM1tnaTEgKyAxXSAqIHkxKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MiA9IDAuNSAtIHgyICogeDIgLSB5MiAqIHkyO1xuICAgICAgaWYgKHQyID49IDApIHtcbiAgICAgICAgdmFyIGdpMiA9IHBlcm1Nb2QxMltpaSArIDEgKyBwZXJtW2pqICsgMV1dICogMztcbiAgICAgICAgdDIgKj0gdDI7XG4gICAgICAgIG4yID0gdDIgKiB0MiAqIChncmFkM1tnaTJdICogeDIgKyBncmFkM1tnaTIgKyAxXSAqIHkyKTtcbiAgICAgIH1cbiAgICAgIC8vIEFkZCBjb250cmlidXRpb25zIGZyb20gZWFjaCBjb3JuZXIgdG8gZ2V0IHRoZSBmaW5hbCBub2lzZSB2YWx1ZS5cbiAgICAgIC8vIFRoZSByZXN1bHQgaXMgc2NhbGVkIHRvIHJldHVybiB2YWx1ZXMgaW4gdGhlIGludGVydmFsIFstMSwxXS5cbiAgICAgIHJldHVybiA3MC4wICogKG4wICsgbjEgKyBuMik7XG4gICAgfSxcbiAgICAvLyAzRCBzaW1wbGV4IG5vaXNlXG4gICAgbm9pc2UzRDogZnVuY3Rpb24oeGluLCB5aW4sIHppbikge1xuICAgICAgdmFyIHBlcm1Nb2QxMiA9IHRoaXMucGVybU1vZDEyO1xuICAgICAgdmFyIHBlcm0gPSB0aGlzLnBlcm07XG4gICAgICB2YXIgZ3JhZDMgPSB0aGlzLmdyYWQzO1xuICAgICAgdmFyIG4wLCBuMSwgbjIsIG4zOyAvLyBOb2lzZSBjb250cmlidXRpb25zIGZyb20gdGhlIGZvdXIgY29ybmVyc1xuICAgICAgLy8gU2tldyB0aGUgaW5wdXQgc3BhY2UgdG8gZGV0ZXJtaW5lIHdoaWNoIHNpbXBsZXggY2VsbCB3ZSdyZSBpblxuICAgICAgdmFyIHMgPSAoeGluICsgeWluICsgemluKSAqIEYzOyAvLyBWZXJ5IG5pY2UgYW5kIHNpbXBsZSBza2V3IGZhY3RvciBmb3IgM0RcbiAgICAgIHZhciBpID0gTWF0aC5mbG9vcih4aW4gKyBzKTtcbiAgICAgIHZhciBqID0gTWF0aC5mbG9vcih5aW4gKyBzKTtcbiAgICAgIHZhciBrID0gTWF0aC5mbG9vcih6aW4gKyBzKTtcbiAgICAgIHZhciB0ID0gKGkgKyBqICsgaykgKiBHMztcbiAgICAgIHZhciBYMCA9IGkgLSB0OyAvLyBVbnNrZXcgdGhlIGNlbGwgb3JpZ2luIGJhY2sgdG8gKHgseSx6KSBzcGFjZVxuICAgICAgdmFyIFkwID0gaiAtIHQ7XG4gICAgICB2YXIgWjAgPSBrIC0gdDtcbiAgICAgIHZhciB4MCA9IHhpbiAtIFgwOyAvLyBUaGUgeCx5LHogZGlzdGFuY2VzIGZyb20gdGhlIGNlbGwgb3JpZ2luXG4gICAgICB2YXIgeTAgPSB5aW4gLSBZMDtcbiAgICAgIHZhciB6MCA9IHppbiAtIFowO1xuICAgICAgLy8gRm9yIHRoZSAzRCBjYXNlLCB0aGUgc2ltcGxleCBzaGFwZSBpcyBhIHNsaWdodGx5IGlycmVndWxhciB0ZXRyYWhlZHJvbi5cbiAgICAgIC8vIERldGVybWluZSB3aGljaCBzaW1wbGV4IHdlIGFyZSBpbi5cbiAgICAgIHZhciBpMSwgajEsIGsxOyAvLyBPZmZzZXRzIGZvciBzZWNvbmQgY29ybmVyIG9mIHNpbXBsZXggaW4gKGksaixrKSBjb29yZHNcbiAgICAgIHZhciBpMiwgajIsIGsyOyAvLyBPZmZzZXRzIGZvciB0aGlyZCBjb3JuZXIgb2Ygc2ltcGxleCBpbiAoaSxqLGspIGNvb3Jkc1xuICAgICAgaWYgKHgwID49IHkwKSB7XG4gICAgICAgIGlmICh5MCA+PSB6MCkge1xuICAgICAgICAgIGkxID0gMTtcbiAgICAgICAgICBqMSA9IDA7XG4gICAgICAgICAgazEgPSAwO1xuICAgICAgICAgIGkyID0gMTtcbiAgICAgICAgICBqMiA9IDE7XG4gICAgICAgICAgazIgPSAwO1xuICAgICAgICB9IC8vIFggWSBaIG9yZGVyXG4gICAgICAgIGVsc2UgaWYgKHgwID49IHowKSB7XG4gICAgICAgICAgaTEgPSAxO1xuICAgICAgICAgIGoxID0gMDtcbiAgICAgICAgICBrMSA9IDA7XG4gICAgICAgICAgaTIgPSAxO1xuICAgICAgICAgIGoyID0gMDtcbiAgICAgICAgICBrMiA9IDE7XG4gICAgICAgIH0gLy8gWCBaIFkgb3JkZXJcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaTEgPSAwO1xuICAgICAgICAgIGoxID0gMDtcbiAgICAgICAgICBrMSA9IDE7XG4gICAgICAgICAgaTIgPSAxO1xuICAgICAgICAgIGoyID0gMDtcbiAgICAgICAgICBrMiA9IDE7XG4gICAgICAgIH0gLy8gWiBYIFkgb3JkZXJcbiAgICAgIH1cbiAgICAgIGVsc2UgeyAvLyB4MDx5MFxuICAgICAgICBpZiAoeTAgPCB6MCkge1xuICAgICAgICAgIGkxID0gMDtcbiAgICAgICAgICBqMSA9IDA7XG4gICAgICAgICAgazEgPSAxO1xuICAgICAgICAgIGkyID0gMDtcbiAgICAgICAgICBqMiA9IDE7XG4gICAgICAgICAgazIgPSAxO1xuICAgICAgICB9IC8vIFogWSBYIG9yZGVyXG4gICAgICAgIGVsc2UgaWYgKHgwIDwgejApIHtcbiAgICAgICAgICBpMSA9IDA7XG4gICAgICAgICAgajEgPSAxO1xuICAgICAgICAgIGsxID0gMDtcbiAgICAgICAgICBpMiA9IDA7XG4gICAgICAgICAgajIgPSAxO1xuICAgICAgICAgIGsyID0gMTtcbiAgICAgICAgfSAvLyBZIFogWCBvcmRlclxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpMSA9IDA7XG4gICAgICAgICAgajEgPSAxO1xuICAgICAgICAgIGsxID0gMDtcbiAgICAgICAgICBpMiA9IDE7XG4gICAgICAgICAgajIgPSAxO1xuICAgICAgICAgIGsyID0gMDtcbiAgICAgICAgfSAvLyBZIFggWiBvcmRlclxuICAgICAgfVxuICAgICAgLy8gQSBzdGVwIG9mICgxLDAsMCkgaW4gKGksaixrKSBtZWFucyBhIHN0ZXAgb2YgKDEtYywtYywtYykgaW4gKHgseSx6KSxcbiAgICAgIC8vIGEgc3RlcCBvZiAoMCwxLDApIGluIChpLGosaykgbWVhbnMgYSBzdGVwIG9mICgtYywxLWMsLWMpIGluICh4LHkseiksIGFuZFxuICAgICAgLy8gYSBzdGVwIG9mICgwLDAsMSkgaW4gKGksaixrKSBtZWFucyBhIHN0ZXAgb2YgKC1jLC1jLDEtYykgaW4gKHgseSx6KSwgd2hlcmVcbiAgICAgIC8vIGMgPSAxLzYuXG4gICAgICB2YXIgeDEgPSB4MCAtIGkxICsgRzM7IC8vIE9mZnNldHMgZm9yIHNlY29uZCBjb3JuZXIgaW4gKHgseSx6KSBjb29yZHNcbiAgICAgIHZhciB5MSA9IHkwIC0gajEgKyBHMztcbiAgICAgIHZhciB6MSA9IHowIC0gazEgKyBHMztcbiAgICAgIHZhciB4MiA9IHgwIC0gaTIgKyAyLjAgKiBHMzsgLy8gT2Zmc2V0cyBmb3IgdGhpcmQgY29ybmVyIGluICh4LHkseikgY29vcmRzXG4gICAgICB2YXIgeTIgPSB5MCAtIGoyICsgMi4wICogRzM7XG4gICAgICB2YXIgejIgPSB6MCAtIGsyICsgMi4wICogRzM7XG4gICAgICB2YXIgeDMgPSB4MCAtIDEuMCArIDMuMCAqIEczOyAvLyBPZmZzZXRzIGZvciBsYXN0IGNvcm5lciBpbiAoeCx5LHopIGNvb3Jkc1xuICAgICAgdmFyIHkzID0geTAgLSAxLjAgKyAzLjAgKiBHMztcbiAgICAgIHZhciB6MyA9IHowIC0gMS4wICsgMy4wICogRzM7XG4gICAgICAvLyBXb3JrIG91dCB0aGUgaGFzaGVkIGdyYWRpZW50IGluZGljZXMgb2YgdGhlIGZvdXIgc2ltcGxleCBjb3JuZXJzXG4gICAgICB2YXIgaWkgPSBpICYgMjU1O1xuICAgICAgdmFyIGpqID0gaiAmIDI1NTtcbiAgICAgIHZhciBrayA9IGsgJiAyNTU7XG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSBmb3VyIGNvcm5lcnNcbiAgICAgIHZhciB0MCA9IDAuNiAtIHgwICogeDAgLSB5MCAqIHkwIC0gejAgKiB6MDtcbiAgICAgIGlmICh0MCA8IDApIG4wID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTAgPSBwZXJtTW9kMTJbaWkgKyBwZXJtW2pqICsgcGVybVtra11dXSAqIDM7XG4gICAgICAgIHQwICo9IHQwO1xuICAgICAgICBuMCA9IHQwICogdDAgKiAoZ3JhZDNbZ2kwXSAqIHgwICsgZ3JhZDNbZ2kwICsgMV0gKiB5MCArIGdyYWQzW2dpMCArIDJdICogejApO1xuICAgICAgfVxuICAgICAgdmFyIHQxID0gMC42IC0geDEgKiB4MSAtIHkxICogeTEgLSB6MSAqIHoxO1xuICAgICAgaWYgKHQxIDwgMCkgbjEgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMSA9IHBlcm1Nb2QxMltpaSArIGkxICsgcGVybVtqaiArIGoxICsgcGVybVtrayArIGsxXV1dICogMztcbiAgICAgICAgdDEgKj0gdDE7XG4gICAgICAgIG4xID0gdDEgKiB0MSAqIChncmFkM1tnaTFdICogeDEgKyBncmFkM1tnaTEgKyAxXSAqIHkxICsgZ3JhZDNbZ2kxICsgMl0gKiB6MSk7XG4gICAgICB9XG4gICAgICB2YXIgdDIgPSAwLjYgLSB4MiAqIHgyIC0geTIgKiB5MiAtIHoyICogejI7XG4gICAgICBpZiAodDIgPCAwKSBuMiA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kyID0gcGVybU1vZDEyW2lpICsgaTIgKyBwZXJtW2pqICsgajIgKyBwZXJtW2trICsgazJdXV0gKiAzO1xuICAgICAgICB0MiAqPSB0MjtcbiAgICAgICAgbjIgPSB0MiAqIHQyICogKGdyYWQzW2dpMl0gKiB4MiArIGdyYWQzW2dpMiArIDFdICogeTIgKyBncmFkM1tnaTIgKyAyXSAqIHoyKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MyA9IDAuNiAtIHgzICogeDMgLSB5MyAqIHkzIC0gejMgKiB6MztcbiAgICAgIGlmICh0MyA8IDApIG4zID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTMgPSBwZXJtTW9kMTJbaWkgKyAxICsgcGVybVtqaiArIDEgKyBwZXJtW2trICsgMV1dXSAqIDM7XG4gICAgICAgIHQzICo9IHQzO1xuICAgICAgICBuMyA9IHQzICogdDMgKiAoZ3JhZDNbZ2kzXSAqIHgzICsgZ3JhZDNbZ2kzICsgMV0gKiB5MyArIGdyYWQzW2dpMyArIDJdICogejMpO1xuICAgICAgfVxuICAgICAgLy8gQWRkIGNvbnRyaWJ1dGlvbnMgZnJvbSBlYWNoIGNvcm5lciB0byBnZXQgdGhlIGZpbmFsIG5vaXNlIHZhbHVlLlxuICAgICAgLy8gVGhlIHJlc3VsdCBpcyBzY2FsZWQgdG8gc3RheSBqdXN0IGluc2lkZSBbLTEsMV1cbiAgICAgIHJldHVybiAzMi4wICogKG4wICsgbjEgKyBuMiArIG4zKTtcbiAgICB9LFxuICAgIC8vIDREIHNpbXBsZXggbm9pc2UsIGJldHRlciBzaW1wbGV4IHJhbmsgb3JkZXJpbmcgbWV0aG9kIDIwMTItMDMtMDlcbiAgICBub2lzZTREOiBmdW5jdGlvbih4LCB5LCB6LCB3KSB7XG4gICAgICB2YXIgcGVybSA9IHRoaXMucGVybTtcbiAgICAgIHZhciBncmFkNCA9IHRoaXMuZ3JhZDQ7XG5cbiAgICAgIHZhciBuMCwgbjEsIG4yLCBuMywgbjQ7IC8vIE5vaXNlIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgZml2ZSBjb3JuZXJzXG4gICAgICAvLyBTa2V3IHRoZSAoeCx5LHosdykgc3BhY2UgdG8gZGV0ZXJtaW5lIHdoaWNoIGNlbGwgb2YgMjQgc2ltcGxpY2VzIHdlJ3JlIGluXG4gICAgICB2YXIgcyA9ICh4ICsgeSArIHogKyB3KSAqIEY0OyAvLyBGYWN0b3IgZm9yIDREIHNrZXdpbmdcbiAgICAgIHZhciBpID0gTWF0aC5mbG9vcih4ICsgcyk7XG4gICAgICB2YXIgaiA9IE1hdGguZmxvb3IoeSArIHMpO1xuICAgICAgdmFyIGsgPSBNYXRoLmZsb29yKHogKyBzKTtcbiAgICAgIHZhciBsID0gTWF0aC5mbG9vcih3ICsgcyk7XG4gICAgICB2YXIgdCA9IChpICsgaiArIGsgKyBsKSAqIEc0OyAvLyBGYWN0b3IgZm9yIDREIHVuc2tld2luZ1xuICAgICAgdmFyIFgwID0gaSAtIHQ7IC8vIFVuc2tldyB0aGUgY2VsbCBvcmlnaW4gYmFjayB0byAoeCx5LHosdykgc3BhY2VcbiAgICAgIHZhciBZMCA9IGogLSB0O1xuICAgICAgdmFyIFowID0gayAtIHQ7XG4gICAgICB2YXIgVzAgPSBsIC0gdDtcbiAgICAgIHZhciB4MCA9IHggLSBYMDsgLy8gVGhlIHgseSx6LHcgZGlzdGFuY2VzIGZyb20gdGhlIGNlbGwgb3JpZ2luXG4gICAgICB2YXIgeTAgPSB5IC0gWTA7XG4gICAgICB2YXIgejAgPSB6IC0gWjA7XG4gICAgICB2YXIgdzAgPSB3IC0gVzA7XG4gICAgICAvLyBGb3IgdGhlIDREIGNhc2UsIHRoZSBzaW1wbGV4IGlzIGEgNEQgc2hhcGUgSSB3b24ndCBldmVuIHRyeSB0byBkZXNjcmliZS5cbiAgICAgIC8vIFRvIGZpbmQgb3V0IHdoaWNoIG9mIHRoZSAyNCBwb3NzaWJsZSBzaW1wbGljZXMgd2UncmUgaW4sIHdlIG5lZWQgdG9cbiAgICAgIC8vIGRldGVybWluZSB0aGUgbWFnbml0dWRlIG9yZGVyaW5nIG9mIHgwLCB5MCwgejAgYW5kIHcwLlxuICAgICAgLy8gU2l4IHBhaXItd2lzZSBjb21wYXJpc29ucyBhcmUgcGVyZm9ybWVkIGJldHdlZW4gZWFjaCBwb3NzaWJsZSBwYWlyXG4gICAgICAvLyBvZiB0aGUgZm91ciBjb29yZGluYXRlcywgYW5kIHRoZSByZXN1bHRzIGFyZSB1c2VkIHRvIHJhbmsgdGhlIG51bWJlcnMuXG4gICAgICB2YXIgcmFua3ggPSAwO1xuICAgICAgdmFyIHJhbmt5ID0gMDtcbiAgICAgIHZhciByYW5reiA9IDA7XG4gICAgICB2YXIgcmFua3cgPSAwO1xuICAgICAgaWYgKHgwID4geTApIHJhbmt4Kys7XG4gICAgICBlbHNlIHJhbmt5Kys7XG4gICAgICBpZiAoeDAgPiB6MCkgcmFua3grKztcbiAgICAgIGVsc2UgcmFua3orKztcbiAgICAgIGlmICh4MCA+IHcwKSByYW5reCsrO1xuICAgICAgZWxzZSByYW5rdysrO1xuICAgICAgaWYgKHkwID4gejApIHJhbmt5Kys7XG4gICAgICBlbHNlIHJhbmt6Kys7XG4gICAgICBpZiAoeTAgPiB3MCkgcmFua3krKztcbiAgICAgIGVsc2UgcmFua3crKztcbiAgICAgIGlmICh6MCA+IHcwKSByYW5reisrO1xuICAgICAgZWxzZSByYW5rdysrO1xuICAgICAgdmFyIGkxLCBqMSwgazEsIGwxOyAvLyBUaGUgaW50ZWdlciBvZmZzZXRzIGZvciB0aGUgc2Vjb25kIHNpbXBsZXggY29ybmVyXG4gICAgICB2YXIgaTIsIGoyLCBrMiwgbDI7IC8vIFRoZSBpbnRlZ2VyIG9mZnNldHMgZm9yIHRoZSB0aGlyZCBzaW1wbGV4IGNvcm5lclxuICAgICAgdmFyIGkzLCBqMywgazMsIGwzOyAvLyBUaGUgaW50ZWdlciBvZmZzZXRzIGZvciB0aGUgZm91cnRoIHNpbXBsZXggY29ybmVyXG4gICAgICAvLyBzaW1wbGV4W2NdIGlzIGEgNC12ZWN0b3Igd2l0aCB0aGUgbnVtYmVycyAwLCAxLCAyIGFuZCAzIGluIHNvbWUgb3JkZXIuXG4gICAgICAvLyBNYW55IHZhbHVlcyBvZiBjIHdpbGwgbmV2ZXIgb2NjdXIsIHNpbmNlIGUuZy4geD55Pno+dyBtYWtlcyB4PHosIHk8dyBhbmQgeDx3XG4gICAgICAvLyBpbXBvc3NpYmxlLiBPbmx5IHRoZSAyNCBpbmRpY2VzIHdoaWNoIGhhdmUgbm9uLXplcm8gZW50cmllcyBtYWtlIGFueSBzZW5zZS5cbiAgICAgIC8vIFdlIHVzZSBhIHRocmVzaG9sZGluZyB0byBzZXQgdGhlIGNvb3JkaW5hdGVzIGluIHR1cm4gZnJvbSB0aGUgbGFyZ2VzdCBtYWduaXR1ZGUuXG4gICAgICAvLyBSYW5rIDMgZGVub3RlcyB0aGUgbGFyZ2VzdCBjb29yZGluYXRlLlxuICAgICAgaTEgPSByYW5reCA+PSAzID8gMSA6IDA7XG4gICAgICBqMSA9IHJhbmt5ID49IDMgPyAxIDogMDtcbiAgICAgIGsxID0gcmFua3ogPj0gMyA/IDEgOiAwO1xuICAgICAgbDEgPSByYW5rdyA+PSAzID8gMSA6IDA7XG4gICAgICAvLyBSYW5rIDIgZGVub3RlcyB0aGUgc2Vjb25kIGxhcmdlc3QgY29vcmRpbmF0ZS5cbiAgICAgIGkyID0gcmFua3ggPj0gMiA/IDEgOiAwO1xuICAgICAgajIgPSByYW5reSA+PSAyID8gMSA6IDA7XG4gICAgICBrMiA9IHJhbmt6ID49IDIgPyAxIDogMDtcbiAgICAgIGwyID0gcmFua3cgPj0gMiA/IDEgOiAwO1xuICAgICAgLy8gUmFuayAxIGRlbm90ZXMgdGhlIHNlY29uZCBzbWFsbGVzdCBjb29yZGluYXRlLlxuICAgICAgaTMgPSByYW5reCA+PSAxID8gMSA6IDA7XG4gICAgICBqMyA9IHJhbmt5ID49IDEgPyAxIDogMDtcbiAgICAgIGszID0gcmFua3ogPj0gMSA/IDEgOiAwO1xuICAgICAgbDMgPSByYW5rdyA+PSAxID8gMSA6IDA7XG4gICAgICAvLyBUaGUgZmlmdGggY29ybmVyIGhhcyBhbGwgY29vcmRpbmF0ZSBvZmZzZXRzID0gMSwgc28gbm8gbmVlZCB0byBjb21wdXRlIHRoYXQuXG4gICAgICB2YXIgeDEgPSB4MCAtIGkxICsgRzQ7IC8vIE9mZnNldHMgZm9yIHNlY29uZCBjb3JuZXIgaW4gKHgseSx6LHcpIGNvb3Jkc1xuICAgICAgdmFyIHkxID0geTAgLSBqMSArIEc0O1xuICAgICAgdmFyIHoxID0gejAgLSBrMSArIEc0O1xuICAgICAgdmFyIHcxID0gdzAgLSBsMSArIEc0O1xuICAgICAgdmFyIHgyID0geDAgLSBpMiArIDIuMCAqIEc0OyAvLyBPZmZzZXRzIGZvciB0aGlyZCBjb3JuZXIgaW4gKHgseSx6LHcpIGNvb3Jkc1xuICAgICAgdmFyIHkyID0geTAgLSBqMiArIDIuMCAqIEc0O1xuICAgICAgdmFyIHoyID0gejAgLSBrMiArIDIuMCAqIEc0O1xuICAgICAgdmFyIHcyID0gdzAgLSBsMiArIDIuMCAqIEc0O1xuICAgICAgdmFyIHgzID0geDAgLSBpMyArIDMuMCAqIEc0OyAvLyBPZmZzZXRzIGZvciBmb3VydGggY29ybmVyIGluICh4LHkseix3KSBjb29yZHNcbiAgICAgIHZhciB5MyA9IHkwIC0gajMgKyAzLjAgKiBHNDtcbiAgICAgIHZhciB6MyA9IHowIC0gazMgKyAzLjAgKiBHNDtcbiAgICAgIHZhciB3MyA9IHcwIC0gbDMgKyAzLjAgKiBHNDtcbiAgICAgIHZhciB4NCA9IHgwIC0gMS4wICsgNC4wICogRzQ7IC8vIE9mZnNldHMgZm9yIGxhc3QgY29ybmVyIGluICh4LHkseix3KSBjb29yZHNcbiAgICAgIHZhciB5NCA9IHkwIC0gMS4wICsgNC4wICogRzQ7XG4gICAgICB2YXIgejQgPSB6MCAtIDEuMCArIDQuMCAqIEc0O1xuICAgICAgdmFyIHc0ID0gdzAgLSAxLjAgKyA0LjAgKiBHNDtcbiAgICAgIC8vIFdvcmsgb3V0IHRoZSBoYXNoZWQgZ3JhZGllbnQgaW5kaWNlcyBvZiB0aGUgZml2ZSBzaW1wbGV4IGNvcm5lcnNcbiAgICAgIHZhciBpaSA9IGkgJiAyNTU7XG4gICAgICB2YXIgamogPSBqICYgMjU1O1xuICAgICAgdmFyIGtrID0gayAmIDI1NTtcbiAgICAgIHZhciBsbCA9IGwgJiAyNTU7XG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSBmaXZlIGNvcm5lcnNcbiAgICAgIHZhciB0MCA9IDAuNiAtIHgwICogeDAgLSB5MCAqIHkwIC0gejAgKiB6MCAtIHcwICogdzA7XG4gICAgICBpZiAodDAgPCAwKSBuMCA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kwID0gKHBlcm1baWkgKyBwZXJtW2pqICsgcGVybVtrayArIHBlcm1bbGxdXV1dICUgMzIpICogNDtcbiAgICAgICAgdDAgKj0gdDA7XG4gICAgICAgIG4wID0gdDAgKiB0MCAqIChncmFkNFtnaTBdICogeDAgKyBncmFkNFtnaTAgKyAxXSAqIHkwICsgZ3JhZDRbZ2kwICsgMl0gKiB6MCArIGdyYWQ0W2dpMCArIDNdICogdzApO1xuICAgICAgfVxuICAgICAgdmFyIHQxID0gMC42IC0geDEgKiB4MSAtIHkxICogeTEgLSB6MSAqIHoxIC0gdzEgKiB3MTtcbiAgICAgIGlmICh0MSA8IDApIG4xID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTEgPSAocGVybVtpaSArIGkxICsgcGVybVtqaiArIGoxICsgcGVybVtrayArIGsxICsgcGVybVtsbCArIGwxXV1dXSAlIDMyKSAqIDQ7XG4gICAgICAgIHQxICo9IHQxO1xuICAgICAgICBuMSA9IHQxICogdDEgKiAoZ3JhZDRbZ2kxXSAqIHgxICsgZ3JhZDRbZ2kxICsgMV0gKiB5MSArIGdyYWQ0W2dpMSArIDJdICogejEgKyBncmFkNFtnaTEgKyAzXSAqIHcxKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MiA9IDAuNiAtIHgyICogeDIgLSB5MiAqIHkyIC0gejIgKiB6MiAtIHcyICogdzI7XG4gICAgICBpZiAodDIgPCAwKSBuMiA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kyID0gKHBlcm1baWkgKyBpMiArIHBlcm1bamogKyBqMiArIHBlcm1ba2sgKyBrMiArIHBlcm1bbGwgKyBsMl1dXV0gJSAzMikgKiA0O1xuICAgICAgICB0MiAqPSB0MjtcbiAgICAgICAgbjIgPSB0MiAqIHQyICogKGdyYWQ0W2dpMl0gKiB4MiArIGdyYWQ0W2dpMiArIDFdICogeTIgKyBncmFkNFtnaTIgKyAyXSAqIHoyICsgZ3JhZDRbZ2kyICsgM10gKiB3Mik7XG4gICAgICB9XG4gICAgICB2YXIgdDMgPSAwLjYgLSB4MyAqIHgzIC0geTMgKiB5MyAtIHozICogejMgLSB3MyAqIHczO1xuICAgICAgaWYgKHQzIDwgMCkgbjMgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMyA9IChwZXJtW2lpICsgaTMgKyBwZXJtW2pqICsgajMgKyBwZXJtW2trICsgazMgKyBwZXJtW2xsICsgbDNdXV1dICUgMzIpICogNDtcbiAgICAgICAgdDMgKj0gdDM7XG4gICAgICAgIG4zID0gdDMgKiB0MyAqIChncmFkNFtnaTNdICogeDMgKyBncmFkNFtnaTMgKyAxXSAqIHkzICsgZ3JhZDRbZ2kzICsgMl0gKiB6MyArIGdyYWQ0W2dpMyArIDNdICogdzMpO1xuICAgICAgfVxuICAgICAgdmFyIHQ0ID0gMC42IC0geDQgKiB4NCAtIHk0ICogeTQgLSB6NCAqIHo0IC0gdzQgKiB3NDtcbiAgICAgIGlmICh0NCA8IDApIG40ID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTQgPSAocGVybVtpaSArIDEgKyBwZXJtW2pqICsgMSArIHBlcm1ba2sgKyAxICsgcGVybVtsbCArIDFdXV1dICUgMzIpICogNDtcbiAgICAgICAgdDQgKj0gdDQ7XG4gICAgICAgIG40ID0gdDQgKiB0NCAqIChncmFkNFtnaTRdICogeDQgKyBncmFkNFtnaTQgKyAxXSAqIHk0ICsgZ3JhZDRbZ2k0ICsgMl0gKiB6NCArIGdyYWQ0W2dpNCArIDNdICogdzQpO1xuICAgICAgfVxuICAgICAgLy8gU3VtIHVwIGFuZCBzY2FsZSB0aGUgcmVzdWx0IHRvIGNvdmVyIHRoZSByYW5nZSBbLTEsMV1cbiAgICAgIHJldHVybiAyNy4wICogKG4wICsgbjEgKyBuMiArIG4zICsgbjQpO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBidWlsZFBlcm11dGF0aW9uVGFibGUocmFuZG9tKSB7XG4gICAgdmFyIGk7XG4gICAgdmFyIHAgPSBuZXcgVWludDhBcnJheSgyNTYpO1xuICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgcFtpXSA9IGk7XG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCAyNTU7IGkrKykge1xuICAgICAgdmFyIHIgPSBpICsgfn4ocmFuZG9tKCkgKiAoMjU2IC0gaSkpO1xuICAgICAgdmFyIGF1eCA9IHBbaV07XG4gICAgICBwW2ldID0gcFtyXTtcbiAgICAgIHBbcl0gPSBhdXg7XG4gICAgfVxuICAgIHJldHVybiBwO1xuICB9XG4gIFNpbXBsZXhOb2lzZS5fYnVpbGRQZXJtdXRhdGlvblRhYmxlID0gYnVpbGRQZXJtdXRhdGlvblRhYmxlO1xuXG4gIGZ1bmN0aW9uIGFsZWEoKSB7XG4gICAgLy8gSm9oYW5uZXMgQmFhZ8O4ZSA8YmFhZ29lQGJhYWdvZS5jb20+LCAyMDEwXG4gICAgdmFyIHMwID0gMDtcbiAgICB2YXIgczEgPSAwO1xuICAgIHZhciBzMiA9IDA7XG4gICAgdmFyIGMgPSAxO1xuXG4gICAgdmFyIG1hc2ggPSBtYXNoZXIoKTtcbiAgICBzMCA9IG1hc2goJyAnKTtcbiAgICBzMSA9IG1hc2goJyAnKTtcbiAgICBzMiA9IG1hc2goJyAnKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzMCAtPSBtYXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgICBpZiAoczAgPCAwKSB7XG4gICAgICAgIHMwICs9IDE7XG4gICAgICB9XG4gICAgICBzMSAtPSBtYXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgICBpZiAoczEgPCAwKSB7XG4gICAgICAgIHMxICs9IDE7XG4gICAgICB9XG4gICAgICBzMiAtPSBtYXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgICBpZiAoczIgPCAwKSB7XG4gICAgICAgIHMyICs9IDE7XG4gICAgICB9XG4gICAgfVxuICAgIG1hc2ggPSBudWxsO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0ID0gMjA5MTYzOSAqIHMwICsgYyAqIDIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7IC8vIDJeLTMyXG4gICAgICBzMCA9IHMxO1xuICAgICAgczEgPSBzMjtcbiAgICAgIHJldHVybiBzMiA9IHQgLSAoYyA9IHQgfCAwKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG1hc2hlcigpIHtcbiAgICB2YXIgbiA9IDB4ZWZjODI0OWQ7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIGRhdGEgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbiArPSBkYXRhLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIHZhciBoID0gMC4wMjUxOTYwMzI4MjQxNjkzOCAqIG47XG4gICAgICAgIG4gPSBoID4+PiAwO1xuICAgICAgICBoIC09IG47XG4gICAgICAgIGggKj0gbjtcbiAgICAgICAgbiA9IGggPj4+IDA7XG4gICAgICAgIGggLT0gbjtcbiAgICAgICAgbiArPSBoICogMHgxMDAwMDAwMDA7IC8vIDJeMzJcbiAgICAgIH1cbiAgICAgIHJldHVybiAobiA+Pj4gMCkgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxuICAgIH07XG4gIH1cblxuICAvLyBhbWRcbiAgaWYgKHR5cGVvZiBkZWZpbmUgIT09ICd1bmRlZmluZWQnICYmIGRlZmluZS5hbWQpIGRlZmluZShmdW5jdGlvbigpIHtyZXR1cm4gU2ltcGxleE5vaXNlO30pO1xuICAvLyBjb21tb24ganNcbiAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykgZXhwb3J0cy5TaW1wbGV4Tm9pc2UgPSBTaW1wbGV4Tm9pc2U7XG4gIC8vIGJyb3dzZXJcbiAgZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHdpbmRvdy5TaW1wbGV4Tm9pc2UgPSBTaW1wbGV4Tm9pc2U7XG4gIC8vIG5vZGVqc1xuICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IFNpbXBsZXhOb2lzZTtcbiAgfVxuXG59KSgpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfc2xpY2VkVG9BcnJheSA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gc2xpY2VJdGVyYXRvcihhcnIsIGkpIHsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfZSA9IHVuZGVmaW5lZDsgdHJ5IHsgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0pIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfSByZXR1cm4gZnVuY3Rpb24gKGFyciwgaSkgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IHJldHVybiBhcnI7IH0gZWxzZSBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSB7IHJldHVybiBzbGljZUl0ZXJhdG9yKGFyciwgaSk7IH0gZWxzZSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpOyB9IH07IH0oKTtcblxudmFyIFRBVSA9IE1hdGguUEkgKiAyO1xuXG52YXIgbWFwVG9FbGxpcHNlID0gZnVuY3Rpb24gbWFwVG9FbGxpcHNlKF9yZWYsIHJ4LCByeSwgY29zcGhpLCBzaW5waGksIGNlbnRlcngsIGNlbnRlcnkpIHtcbiAgdmFyIHggPSBfcmVmLngsXG4gICAgICB5ID0gX3JlZi55O1xuXG4gIHggKj0gcng7XG4gIHkgKj0gcnk7XG5cbiAgdmFyIHhwID0gY29zcGhpICogeCAtIHNpbnBoaSAqIHk7XG4gIHZhciB5cCA9IHNpbnBoaSAqIHggKyBjb3NwaGkgKiB5O1xuXG4gIHJldHVybiB7XG4gICAgeDogeHAgKyBjZW50ZXJ4LFxuICAgIHk6IHlwICsgY2VudGVyeVxuICB9O1xufTtcblxudmFyIGFwcHJveFVuaXRBcmMgPSBmdW5jdGlvbiBhcHByb3hVbml0QXJjKGFuZzEsIGFuZzIpIHtcbiAgLy8gSWYgOTAgZGVncmVlIGNpcmN1bGFyIGFyYywgdXNlIGEgY29uc3RhbnRcbiAgLy8gYXMgZGVyaXZlZCBmcm9tIGh0dHA6Ly9zcGVuY2VybW9ydGVuc2VuLmNvbS9hcnRpY2xlcy9iZXppZXItY2lyY2xlXG4gIHZhciBhID0gYW5nMiA9PT0gMS41NzA3OTYzMjY3OTQ4OTY2ID8gMC41NTE5MTUwMjQ0OTQgOiBhbmcyID09PSAtMS41NzA3OTYzMjY3OTQ4OTY2ID8gLTAuNTUxOTE1MDI0NDk0IDogNCAvIDMgKiBNYXRoLnRhbihhbmcyIC8gNCk7XG5cbiAgdmFyIHgxID0gTWF0aC5jb3MoYW5nMSk7XG4gIHZhciB5MSA9IE1hdGguc2luKGFuZzEpO1xuICB2YXIgeDIgPSBNYXRoLmNvcyhhbmcxICsgYW5nMik7XG4gIHZhciB5MiA9IE1hdGguc2luKGFuZzEgKyBhbmcyKTtcblxuICByZXR1cm4gW3tcbiAgICB4OiB4MSAtIHkxICogYSxcbiAgICB5OiB5MSArIHgxICogYVxuICB9LCB7XG4gICAgeDogeDIgKyB5MiAqIGEsXG4gICAgeTogeTIgLSB4MiAqIGFcbiAgfSwge1xuICAgIHg6IHgyLFxuICAgIHk6IHkyXG4gIH1dO1xufTtcblxudmFyIHZlY3RvckFuZ2xlID0gZnVuY3Rpb24gdmVjdG9yQW5nbGUodXgsIHV5LCB2eCwgdnkpIHtcbiAgdmFyIHNpZ24gPSB1eCAqIHZ5IC0gdXkgKiB2eCA8IDAgPyAtMSA6IDE7XG5cbiAgdmFyIGRvdCA9IHV4ICogdnggKyB1eSAqIHZ5O1xuXG4gIGlmIChkb3QgPiAxKSB7XG4gICAgZG90ID0gMTtcbiAgfVxuXG4gIGlmIChkb3QgPCAtMSkge1xuICAgIGRvdCA9IC0xO1xuICB9XG5cbiAgcmV0dXJuIHNpZ24gKiBNYXRoLmFjb3MoZG90KTtcbn07XG5cbnZhciBnZXRBcmNDZW50ZXIgPSBmdW5jdGlvbiBnZXRBcmNDZW50ZXIocHgsIHB5LCBjeCwgY3ksIHJ4LCByeSwgbGFyZ2VBcmNGbGFnLCBzd2VlcEZsYWcsIHNpbnBoaSwgY29zcGhpLCBweHAsIHB5cCkge1xuICB2YXIgcnhzcSA9IE1hdGgucG93KHJ4LCAyKTtcbiAgdmFyIHJ5c3EgPSBNYXRoLnBvdyhyeSwgMik7XG4gIHZhciBweHBzcSA9IE1hdGgucG93KHB4cCwgMik7XG4gIHZhciBweXBzcSA9IE1hdGgucG93KHB5cCwgMik7XG5cbiAgdmFyIHJhZGljYW50ID0gcnhzcSAqIHJ5c3EgLSByeHNxICogcHlwc3EgLSByeXNxICogcHhwc3E7XG5cbiAgaWYgKHJhZGljYW50IDwgMCkge1xuICAgIHJhZGljYW50ID0gMDtcbiAgfVxuXG4gIHJhZGljYW50IC89IHJ4c3EgKiBweXBzcSArIHJ5c3EgKiBweHBzcTtcbiAgcmFkaWNhbnQgPSBNYXRoLnNxcnQocmFkaWNhbnQpICogKGxhcmdlQXJjRmxhZyA9PT0gc3dlZXBGbGFnID8gLTEgOiAxKTtcblxuICB2YXIgY2VudGVyeHAgPSByYWRpY2FudCAqIHJ4IC8gcnkgKiBweXA7XG4gIHZhciBjZW50ZXJ5cCA9IHJhZGljYW50ICogLXJ5IC8gcnggKiBweHA7XG5cbiAgdmFyIGNlbnRlcnggPSBjb3NwaGkgKiBjZW50ZXJ4cCAtIHNpbnBoaSAqIGNlbnRlcnlwICsgKHB4ICsgY3gpIC8gMjtcbiAgdmFyIGNlbnRlcnkgPSBzaW5waGkgKiBjZW50ZXJ4cCArIGNvc3BoaSAqIGNlbnRlcnlwICsgKHB5ICsgY3kpIC8gMjtcblxuICB2YXIgdngxID0gKHB4cCAtIGNlbnRlcnhwKSAvIHJ4O1xuICB2YXIgdnkxID0gKHB5cCAtIGNlbnRlcnlwKSAvIHJ5O1xuICB2YXIgdngyID0gKC1weHAgLSBjZW50ZXJ4cCkgLyByeDtcbiAgdmFyIHZ5MiA9ICgtcHlwIC0gY2VudGVyeXApIC8gcnk7XG5cbiAgdmFyIGFuZzEgPSB2ZWN0b3JBbmdsZSgxLCAwLCB2eDEsIHZ5MSk7XG4gIHZhciBhbmcyID0gdmVjdG9yQW5nbGUodngxLCB2eTEsIHZ4MiwgdnkyKTtcblxuICBpZiAoc3dlZXBGbGFnID09PSAwICYmIGFuZzIgPiAwKSB7XG4gICAgYW5nMiAtPSBUQVU7XG4gIH1cblxuICBpZiAoc3dlZXBGbGFnID09PSAxICYmIGFuZzIgPCAwKSB7XG4gICAgYW5nMiArPSBUQVU7XG4gIH1cblxuICByZXR1cm4gW2NlbnRlcngsIGNlbnRlcnksIGFuZzEsIGFuZzJdO1xufTtcblxudmFyIGFyY1RvQmV6aWVyID0gZnVuY3Rpb24gYXJjVG9CZXppZXIoX3JlZjIpIHtcbiAgdmFyIHB4ID0gX3JlZjIucHgsXG4gICAgICBweSA9IF9yZWYyLnB5LFxuICAgICAgY3ggPSBfcmVmMi5jeCxcbiAgICAgIGN5ID0gX3JlZjIuY3ksXG4gICAgICByeCA9IF9yZWYyLnJ4LFxuICAgICAgcnkgPSBfcmVmMi5yeSxcbiAgICAgIF9yZWYyJHhBeGlzUm90YXRpb24gPSBfcmVmMi54QXhpc1JvdGF0aW9uLFxuICAgICAgeEF4aXNSb3RhdGlvbiA9IF9yZWYyJHhBeGlzUm90YXRpb24gPT09IHVuZGVmaW5lZCA/IDAgOiBfcmVmMiR4QXhpc1JvdGF0aW9uLFxuICAgICAgX3JlZjIkbGFyZ2VBcmNGbGFnID0gX3JlZjIubGFyZ2VBcmNGbGFnLFxuICAgICAgbGFyZ2VBcmNGbGFnID0gX3JlZjIkbGFyZ2VBcmNGbGFnID09PSB1bmRlZmluZWQgPyAwIDogX3JlZjIkbGFyZ2VBcmNGbGFnLFxuICAgICAgX3JlZjIkc3dlZXBGbGFnID0gX3JlZjIuc3dlZXBGbGFnLFxuICAgICAgc3dlZXBGbGFnID0gX3JlZjIkc3dlZXBGbGFnID09PSB1bmRlZmluZWQgPyAwIDogX3JlZjIkc3dlZXBGbGFnO1xuXG4gIHZhciBjdXJ2ZXMgPSBbXTtcblxuICBpZiAocnggPT09IDAgfHwgcnkgPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgc2lucGhpID0gTWF0aC5zaW4oeEF4aXNSb3RhdGlvbiAqIFRBVSAvIDM2MCk7XG4gIHZhciBjb3NwaGkgPSBNYXRoLmNvcyh4QXhpc1JvdGF0aW9uICogVEFVIC8gMzYwKTtcblxuICB2YXIgcHhwID0gY29zcGhpICogKHB4IC0gY3gpIC8gMiArIHNpbnBoaSAqIChweSAtIGN5KSAvIDI7XG4gIHZhciBweXAgPSAtc2lucGhpICogKHB4IC0gY3gpIC8gMiArIGNvc3BoaSAqIChweSAtIGN5KSAvIDI7XG5cbiAgaWYgKHB4cCA9PT0gMCAmJiBweXAgPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByeCA9IE1hdGguYWJzKHJ4KTtcbiAgcnkgPSBNYXRoLmFicyhyeSk7XG5cbiAgdmFyIGxhbWJkYSA9IE1hdGgucG93KHB4cCwgMikgLyBNYXRoLnBvdyhyeCwgMikgKyBNYXRoLnBvdyhweXAsIDIpIC8gTWF0aC5wb3cocnksIDIpO1xuXG4gIGlmIChsYW1iZGEgPiAxKSB7XG4gICAgcnggKj0gTWF0aC5zcXJ0KGxhbWJkYSk7XG4gICAgcnkgKj0gTWF0aC5zcXJ0KGxhbWJkYSk7XG4gIH1cblxuICB2YXIgX2dldEFyY0NlbnRlciA9IGdldEFyY0NlbnRlcihweCwgcHksIGN4LCBjeSwgcngsIHJ5LCBsYXJnZUFyY0ZsYWcsIHN3ZWVwRmxhZywgc2lucGhpLCBjb3NwaGksIHB4cCwgcHlwKSxcbiAgICAgIF9nZXRBcmNDZW50ZXIyID0gX3NsaWNlZFRvQXJyYXkoX2dldEFyY0NlbnRlciwgNCksXG4gICAgICBjZW50ZXJ4ID0gX2dldEFyY0NlbnRlcjJbMF0sXG4gICAgICBjZW50ZXJ5ID0gX2dldEFyY0NlbnRlcjJbMV0sXG4gICAgICBhbmcxID0gX2dldEFyY0NlbnRlcjJbMl0sXG4gICAgICBhbmcyID0gX2dldEFyY0NlbnRlcjJbM107XG5cbiAgLy8gSWYgJ2FuZzInID09IDkwLjAwMDAwMDAwMDEsIHRoZW4gYHJhdGlvYCB3aWxsIGV2YWx1YXRlIHRvXG4gIC8vIDEuMDAwMDAwMDAwMS4gVGhpcyBjYXVzZXMgYHNlZ21lbnRzYCB0byBiZSBncmVhdGVyIHRoYW4gb25lLCB3aGljaCBpcyBhblxuICAvLyB1bmVjZXNzYXJ5IHNwbGl0LCBhbmQgYWRkcyBleHRyYSBwb2ludHMgdG8gdGhlIGJlemllciBjdXJ2ZS4gVG8gYWxsZXZpYXRlXG4gIC8vIHRoaXMgaXNzdWUsIHdlIHJvdW5kIHRvIDEuMCB3aGVuIHRoZSByYXRpbyBpcyBjbG9zZSB0byAxLjAuXG5cblxuICB2YXIgcmF0aW8gPSBNYXRoLmFicyhhbmcyKSAvIChUQVUgLyA0KTtcbiAgaWYgKE1hdGguYWJzKDEuMCAtIHJhdGlvKSA8IDAuMDAwMDAwMSkge1xuICAgIHJhdGlvID0gMS4wO1xuICB9XG5cbiAgdmFyIHNlZ21lbnRzID0gTWF0aC5tYXgoTWF0aC5jZWlsKHJhdGlvKSwgMSk7XG5cbiAgYW5nMiAvPSBzZWdtZW50cztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHNlZ21lbnRzOyBpKyspIHtcbiAgICBjdXJ2ZXMucHVzaChhcHByb3hVbml0QXJjKGFuZzEsIGFuZzIpKTtcbiAgICBhbmcxICs9IGFuZzI7XG4gIH1cblxuICByZXR1cm4gY3VydmVzLm1hcChmdW5jdGlvbiAoY3VydmUpIHtcbiAgICB2YXIgX21hcFRvRWxsaXBzZSA9IG1hcFRvRWxsaXBzZShjdXJ2ZVswXSwgcngsIHJ5LCBjb3NwaGksIHNpbnBoaSwgY2VudGVyeCwgY2VudGVyeSksXG4gICAgICAgIHgxID0gX21hcFRvRWxsaXBzZS54LFxuICAgICAgICB5MSA9IF9tYXBUb0VsbGlwc2UueTtcblxuICAgIHZhciBfbWFwVG9FbGxpcHNlMiA9IG1hcFRvRWxsaXBzZShjdXJ2ZVsxXSwgcngsIHJ5LCBjb3NwaGksIHNpbnBoaSwgY2VudGVyeCwgY2VudGVyeSksXG4gICAgICAgIHgyID0gX21hcFRvRWxsaXBzZTIueCxcbiAgICAgICAgeTIgPSBfbWFwVG9FbGxpcHNlMi55O1xuXG4gICAgdmFyIF9tYXBUb0VsbGlwc2UzID0gbWFwVG9FbGxpcHNlKGN1cnZlWzJdLCByeCwgcnksIGNvc3BoaSwgc2lucGhpLCBjZW50ZXJ4LCBjZW50ZXJ5KSxcbiAgICAgICAgeCA9IF9tYXBUb0VsbGlwc2UzLngsXG4gICAgICAgIHkgPSBfbWFwVG9FbGxpcHNlMy55O1xuXG4gICAgcmV0dXJuIHsgeDE6IHgxLCB5MTogeTEsIHgyOiB4MiwgeTI6IHkyLCB4OiB4LCB5OiB5IH07XG4gIH0pO1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gYXJjVG9CZXppZXI7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDsiLCJ2YXIgYmV6aWVyID0gcmVxdWlyZSgnYWRhcHRpdmUtYmV6aWVyLWN1cnZlJylcbnZhciBhYnMgPSByZXF1aXJlKCdhYnMtc3ZnLXBhdGgnKVxudmFyIG5vcm0gPSByZXF1aXJlKCdub3JtYWxpemUtc3ZnLXBhdGgnKVxudmFyIGNvcHkgPSByZXF1aXJlKCd2ZWMyLWNvcHknKVxuXG5mdW5jdGlvbiBzZXQob3V0LCB4LCB5KSB7XG4gICAgb3V0WzBdID0geFxuICAgIG91dFsxXSA9IHlcbiAgICByZXR1cm4gb3V0XG59XG5cbnZhciB0bXAxID0gWzAsMF0sXG4gICAgdG1wMiA9IFswLDBdLFxuICAgIHRtcDMgPSBbMCwwXVxuXG5mdW5jdGlvbiBiZXppZXJUbyhwb2ludHMsIHNjYWxlLCBzdGFydCwgc2VnKSB7XG4gICAgYmV6aWVyKHN0YXJ0LCBcbiAgICAgICAgc2V0KHRtcDEsIHNlZ1sxXSwgc2VnWzJdKSwgXG4gICAgICAgIHNldCh0bXAyLCBzZWdbM10sIHNlZ1s0XSksXG4gICAgICAgIHNldCh0bXAzLCBzZWdbNV0sIHNlZ1s2XSksIHNjYWxlLCBwb2ludHMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29udG91cnMoc3ZnLCBzY2FsZSkge1xuICAgIHZhciBwYXRocyA9IFtdXG5cbiAgICB2YXIgcG9pbnRzID0gW11cbiAgICB2YXIgcGVuID0gWzAsIDBdXG4gICAgbm9ybShhYnMoc3ZnKSkuZm9yRWFjaChmdW5jdGlvbihzZWdtZW50LCBpLCBzZWxmKSB7XG4gICAgICAgIGlmIChzZWdtZW50WzBdID09PSAnTScpIHtcbiAgICAgICAgICAgIGNvcHkocGVuLCBzZWdtZW50LnNsaWNlKDEpKVxuICAgICAgICAgICAgaWYgKHBvaW50cy5sZW5ndGg+MCkge1xuICAgICAgICAgICAgICAgIHBhdGhzLnB1c2gocG9pbnRzKVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc2VnbWVudFswXSA9PT0gJ0MnKSB7XG4gICAgICAgICAgICBiZXppZXJUbyhwb2ludHMsIHNjYWxlLCBwZW4sIHNlZ21lbnQpXG4gICAgICAgICAgICBzZXQocGVuLCBzZWdtZW50WzVdLCBzZWdtZW50WzZdKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbGxlZ2FsIHR5cGUgaW4gU1ZHOiAnK3NlZ21lbnRbMF0pXG4gICAgICAgIH1cbiAgICB9KVxuICAgIGlmIChwb2ludHMubGVuZ3RoPjApXG4gICAgICAgIHBhdGhzLnB1c2gocG9pbnRzKVxuICAgIHJldHVybiBwYXRoc1xufSIsIlxudmFyIM+AID0gTWF0aC5QSVxudmFyIF8xMjAgPSByYWRpYW5zKDEyMClcblxubW9kdWxlLmV4cG9ydHMgPSBub3JtYWxpemVcblxuLyoqXG4gKiBkZXNjcmliZSBgcGF0aGAgaW4gdGVybXMgb2YgY3ViaWMgYsOpemllciBcbiAqIGN1cnZlcyBhbmQgbW92ZSBjb21tYW5kc1xuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGhcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZShwYXRoKXtcblx0Ly8gaW5pdCBzdGF0ZVxuXHR2YXIgcHJldlxuXHR2YXIgcmVzdWx0ID0gW11cblx0dmFyIGJlemllclggPSAwXG5cdHZhciBiZXppZXJZID0gMFxuXHR2YXIgc3RhcnRYID0gMFxuXHR2YXIgc3RhcnRZID0gMFxuXHR2YXIgcXVhZFggPSBudWxsXG5cdHZhciBxdWFkWSA9IG51bGxcblx0dmFyIHggPSAwXG5cdHZhciB5ID0gMFxuXG5cdGZvciAodmFyIGkgPSAwLCBsZW4gPSBwYXRoLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0dmFyIHNlZyA9IHBhdGhbaV1cblx0XHR2YXIgY29tbWFuZCA9IHNlZ1swXVxuXHRcdHN3aXRjaCAoY29tbWFuZCkge1xuXHRcdFx0Y2FzZSAnTSc6XG5cdFx0XHRcdHN0YXJ0WCA9IHNlZ1sxXVxuXHRcdFx0XHRzdGFydFkgPSBzZWdbMl1cblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ0EnOlxuXHRcdFx0XHRzZWcgPSBhcmMoeCwgeSxzZWdbMV0sc2VnWzJdLHJhZGlhbnMoc2VnWzNdKSxzZWdbNF0sc2VnWzVdLHNlZ1s2XSxzZWdbN10pXG5cdFx0XHRcdC8vIHNwbGl0IG11bHRpIHBhcnRcblx0XHRcdFx0c2VnLnVuc2hpZnQoJ0MnKVxuXHRcdFx0XHRpZiAoc2VnLmxlbmd0aCA+IDcpIHtcblx0XHRcdFx0XHRyZXN1bHQucHVzaChzZWcuc3BsaWNlKDAsIDcpKVxuXHRcdFx0XHRcdHNlZy51bnNoaWZ0KCdDJylcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAnUyc6XG5cdFx0XHRcdC8vIGRlZmF1bHQgY29udHJvbCBwb2ludFxuXHRcdFx0XHR2YXIgY3ggPSB4XG5cdFx0XHRcdHZhciBjeSA9IHlcblx0XHRcdFx0aWYgKHByZXYgPT0gJ0MnIHx8IHByZXYgPT0gJ1MnKSB7XG5cdFx0XHRcdFx0Y3ggKz0gY3ggLSBiZXppZXJYIC8vIHJlZmxlY3QgdGhlIHByZXZpb3VzIGNvbW1hbmQncyBjb250cm9sXG5cdFx0XHRcdFx0Y3kgKz0gY3kgLSBiZXppZXJZIC8vIHBvaW50IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBvaW50XG5cdFx0XHRcdH1cblx0XHRcdFx0c2VnID0gWydDJywgY3gsIGN5LCBzZWdbMV0sIHNlZ1syXSwgc2VnWzNdLCBzZWdbNF1dXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlICdUJzpcblx0XHRcdFx0aWYgKHByZXYgPT0gJ1EnIHx8IHByZXYgPT0gJ1QnKSB7XG5cdFx0XHRcdFx0cXVhZFggPSB4ICogMiAtIHF1YWRYIC8vIGFzIHdpdGggJ1MnIHJlZmxlY3QgcHJldmlvdXMgY29udHJvbCBwb2ludFxuXHRcdFx0XHRcdHF1YWRZID0geSAqIDIgLSBxdWFkWVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHF1YWRYID0geFxuXHRcdFx0XHRcdHF1YWRZID0geVxuXHRcdFx0XHR9XG5cdFx0XHRcdHNlZyA9IHF1YWRyYXRpYyh4LCB5LCBxdWFkWCwgcXVhZFksIHNlZ1sxXSwgc2VnWzJdKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAnUSc6XG5cdFx0XHRcdHF1YWRYID0gc2VnWzFdXG5cdFx0XHRcdHF1YWRZID0gc2VnWzJdXG5cdFx0XHRcdHNlZyA9IHF1YWRyYXRpYyh4LCB5LCBzZWdbMV0sIHNlZ1syXSwgc2VnWzNdLCBzZWdbNF0pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlICdMJzpcblx0XHRcdFx0c2VnID0gbGluZSh4LCB5LCBzZWdbMV0sIHNlZ1syXSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ0gnOlxuXHRcdFx0XHRzZWcgPSBsaW5lKHgsIHksIHNlZ1sxXSwgeSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ1YnOlxuXHRcdFx0XHRzZWcgPSBsaW5lKHgsIHksIHgsIHNlZ1sxXSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ1onOlxuXHRcdFx0XHRzZWcgPSBsaW5lKHgsIHksIHN0YXJ0WCwgc3RhcnRZKVxuXHRcdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdC8vIHVwZGF0ZSBzdGF0ZVxuXHRcdHByZXYgPSBjb21tYW5kXG5cdFx0eCA9IHNlZ1tzZWcubGVuZ3RoIC0gMl1cblx0XHR5ID0gc2VnW3NlZy5sZW5ndGggLSAxXVxuXHRcdGlmIChzZWcubGVuZ3RoID4gNCkge1xuXHRcdFx0YmV6aWVyWCA9IHNlZ1tzZWcubGVuZ3RoIC0gNF1cblx0XHRcdGJlemllclkgPSBzZWdbc2VnLmxlbmd0aCAtIDNdXG5cdFx0fSBlbHNlIHtcblx0XHRcdGJlemllclggPSB4XG5cdFx0XHRiZXppZXJZID0geVxuXHRcdH1cblx0XHRyZXN1bHQucHVzaChzZWcpXG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIGxpbmUoeDEsIHkxLCB4MiwgeTIpe1xuXHRyZXR1cm4gWydDJywgeDEsIHkxLCB4MiwgeTIsIHgyLCB5Ml1cbn1cblxuZnVuY3Rpb24gcXVhZHJhdGljKHgxLCB5MSwgY3gsIGN5LCB4MiwgeTIpe1xuXHRyZXR1cm4gW1xuXHRcdCdDJyxcblx0XHR4MS8zICsgKDIvMykgKiBjeCxcblx0XHR5MS8zICsgKDIvMykgKiBjeSxcblx0XHR4Mi8zICsgKDIvMykgKiBjeCxcblx0XHR5Mi8zICsgKDIvMykgKiBjeSxcblx0XHR4Mixcblx0XHR5MlxuXHRdXG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgcmlwcGVkIGZyb20gXG4vLyBnaXRodWIuY29tL0RtaXRyeUJhcmFub3Zza2l5L3JhcGhhZWwvYmxvYi80ZDk3ZDQvcmFwaGFlbC5qcyNMMjIxNi1MMjMwNCBcbi8vIHdoaWNoIHJlZmVyZW5jZXMgdzMub3JnL1RSL1NWRzExL2ltcGxub3RlLmh0bWwjQXJjSW1wbGVtZW50YXRpb25Ob3Rlc1xuLy8gVE9ETzogbWFrZSBpdCBodW1hbiByZWFkYWJsZVxuXG5mdW5jdGlvbiBhcmMoeDEsIHkxLCByeCwgcnksIGFuZ2xlLCBsYXJnZV9hcmNfZmxhZywgc3dlZXBfZmxhZywgeDIsIHkyLCByZWN1cnNpdmUpIHtcblx0aWYgKCFyZWN1cnNpdmUpIHtcblx0XHR2YXIgeHkgPSByb3RhdGUoeDEsIHkxLCAtYW5nbGUpXG5cdFx0eDEgPSB4eS54XG5cdFx0eTEgPSB4eS55XG5cdFx0eHkgPSByb3RhdGUoeDIsIHkyLCAtYW5nbGUpXG5cdFx0eDIgPSB4eS54XG5cdFx0eTIgPSB4eS55XG5cdFx0dmFyIHggPSAoeDEgLSB4MikgLyAyXG5cdFx0dmFyIHkgPSAoeTEgLSB5MikgLyAyXG5cdFx0dmFyIGggPSAoeCAqIHgpIC8gKHJ4ICogcngpICsgKHkgKiB5KSAvIChyeSAqIHJ5KVxuXHRcdGlmIChoID4gMSkge1xuXHRcdFx0aCA9IE1hdGguc3FydChoKVxuXHRcdFx0cnggPSBoICogcnhcblx0XHRcdHJ5ID0gaCAqIHJ5XG5cdFx0fVxuXHRcdHZhciByeDIgPSByeCAqIHJ4XG5cdFx0dmFyIHJ5MiA9IHJ5ICogcnlcblx0XHR2YXIgayA9IChsYXJnZV9hcmNfZmxhZyA9PSBzd2VlcF9mbGFnID8gLTEgOiAxKVxuXHRcdFx0KiBNYXRoLnNxcnQoTWF0aC5hYnMoKHJ4MiAqIHJ5MiAtIHJ4MiAqIHkgKiB5IC0gcnkyICogeCAqIHgpIC8gKHJ4MiAqIHkgKiB5ICsgcnkyICogeCAqIHgpKSlcblx0XHRpZiAoayA9PSBJbmZpbml0eSkgayA9IDEgLy8gbmV1dHJhbGl6ZVxuXHRcdHZhciBjeCA9IGsgKiByeCAqIHkgLyByeSArICh4MSArIHgyKSAvIDJcblx0XHR2YXIgY3kgPSBrICogLXJ5ICogeCAvIHJ4ICsgKHkxICsgeTIpIC8gMlxuXHRcdHZhciBmMSA9IE1hdGguYXNpbigoKHkxIC0gY3kpIC8gcnkpLnRvRml4ZWQoOSkpXG5cdFx0dmFyIGYyID0gTWF0aC5hc2luKCgoeTIgLSBjeSkgLyByeSkudG9GaXhlZCg5KSlcblxuXHRcdGYxID0geDEgPCBjeCA/IM+AIC0gZjEgOiBmMVxuXHRcdGYyID0geDIgPCBjeCA/IM+AIC0gZjIgOiBmMlxuXHRcdGlmIChmMSA8IDApIGYxID0gz4AgKiAyICsgZjFcblx0XHRpZiAoZjIgPCAwKSBmMiA9IM+AICogMiArIGYyXG5cdFx0aWYgKHN3ZWVwX2ZsYWcgJiYgZjEgPiBmMikgZjEgPSBmMSAtIM+AICogMlxuXHRcdGlmICghc3dlZXBfZmxhZyAmJiBmMiA+IGYxKSBmMiA9IGYyIC0gz4AgKiAyXG5cdH0gZWxzZSB7XG5cdFx0ZjEgPSByZWN1cnNpdmVbMF1cblx0XHRmMiA9IHJlY3Vyc2l2ZVsxXVxuXHRcdGN4ID0gcmVjdXJzaXZlWzJdXG5cdFx0Y3kgPSByZWN1cnNpdmVbM11cblx0fVxuXHQvLyBncmVhdGVyIHRoYW4gMTIwIGRlZ3JlZXMgcmVxdWlyZXMgbXVsdGlwbGUgc2VnbWVudHNcblx0aWYgKE1hdGguYWJzKGYyIC0gZjEpID4gXzEyMCkge1xuXHRcdHZhciBmMm9sZCA9IGYyXG5cdFx0dmFyIHgyb2xkID0geDJcblx0XHR2YXIgeTJvbGQgPSB5MlxuXHRcdGYyID0gZjEgKyBfMTIwICogKHN3ZWVwX2ZsYWcgJiYgZjIgPiBmMSA/IDEgOiAtMSlcblx0XHR4MiA9IGN4ICsgcnggKiBNYXRoLmNvcyhmMilcblx0XHR5MiA9IGN5ICsgcnkgKiBNYXRoLnNpbihmMilcblx0XHR2YXIgcmVzID0gYXJjKHgyLCB5MiwgcngsIHJ5LCBhbmdsZSwgMCwgc3dlZXBfZmxhZywgeDJvbGQsIHkyb2xkLCBbZjIsIGYyb2xkLCBjeCwgY3ldKVxuXHR9XG5cdHZhciB0ID0gTWF0aC50YW4oKGYyIC0gZjEpIC8gNClcblx0dmFyIGh4ID0gNCAvIDMgKiByeCAqIHRcblx0dmFyIGh5ID0gNCAvIDMgKiByeSAqIHRcblx0dmFyIGN1cnZlID0gW1xuXHRcdDIgKiB4MSAtICh4MSArIGh4ICogTWF0aC5zaW4oZjEpKSxcblx0XHQyICogeTEgLSAoeTEgLSBoeSAqIE1hdGguY29zKGYxKSksXG5cdFx0eDIgKyBoeCAqIE1hdGguc2luKGYyKSxcblx0XHR5MiAtIGh5ICogTWF0aC5jb3MoZjIpLFxuXHRcdHgyLFxuXHRcdHkyXG5cdF1cblx0aWYgKHJlY3Vyc2l2ZSkgcmV0dXJuIGN1cnZlXG5cdGlmIChyZXMpIGN1cnZlID0gY3VydmUuY29uY2F0KHJlcylcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjdXJ2ZS5sZW5ndGg7KSB7XG5cdFx0dmFyIHJvdCA9IHJvdGF0ZShjdXJ2ZVtpXSwgY3VydmVbaSsxXSwgYW5nbGUpXG5cdFx0Y3VydmVbaSsrXSA9IHJvdC54XG5cdFx0Y3VydmVbaSsrXSA9IHJvdC55XG5cdH1cblx0cmV0dXJuIGN1cnZlXG59XG5cbmZ1bmN0aW9uIHJvdGF0ZSh4LCB5LCByYWQpe1xuXHRyZXR1cm4ge1xuXHRcdHg6IHggKiBNYXRoLmNvcyhyYWQpIC0geSAqIE1hdGguc2luKHJhZCksXG5cdFx0eTogeCAqIE1hdGguc2luKHJhZCkgKyB5ICogTWF0aC5jb3MocmFkKVxuXHR9XG59XG5cbmZ1bmN0aW9uIHJhZGlhbnMoZGVncmVzcyl7XG5cdHJldHVybiBkZWdyZXNzICogKM+AIC8gMTgwKVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB2ZWMyQ29weShvdXQsIGEpIHtcbiAgICBvdXRbMF0gPSBhWzBdXG4gICAgb3V0WzFdID0gYVsxXVxuICAgIHJldHVybiBvdXRcbn0iLCIvLyAtIG1ha2UgdGhlIGNpcmNsZXMgaGF2ZSBjb2xvdXIgZ3JhZGllbnRzXG5cbi8vIC0gR3JpZCBvZiBjaXJjbGVzIHdpdGggcmdiIHZhbHVlcyBmcm9tIGFuIGltYWdlIC0gc2l6ZSBvZiBjaXJjbGVzIGNhbiB2YXJ5XG4vLyAtIGJsb2JzIGlycmVndWxhciBzaGFwZWQgbGlrZSByZWFsIHBhaW50LCBJIGhhdmUgYSBibG9iIHByb2plY3Qgc29tZXdoZXJlIFxuXG5jb25zdCBjYW52YXNTa2V0Y2ggPSByZXF1aXJlKCdjYW52YXMtc2tldGNoJyk7XG5jb25zdCB7IHJhbmRvbSwgbWF0aCB9ID0gcmVxdWlyZSgnY2FudmFzLXNrZXRjaC11dGlsJyk7XG5jb25zdCBUd2Vha3BhbmUgPSByZXF1aXJlKCd0d2Vha3BhbmUnKTtcblxuY29uc3Qgc2V0dGluZ3MgPSB7XG4gIGRpbWVuc2lvbnM6IFsxMDgwLCAxMDgwXSxcbiAgYW5pbWF0ZTogdHJ1ZVxufTtcblxuY29uc3QgcmVjaXBlcyA9IHtcbiAgZGVmYXVsdDoge1xuICAgIGNvbG9yOiAnZ3JlZW4nLFxuICAgIGVuZENvbG9yOiAncmVkJyxcbiAgICByYWRpdXM6IDEsXG4gICAgc2xpY2U6IDEsXG4gICAgZW5kQW5nbGU6IDM2MCxcbiAgICBzaGFwZTogJ2NpcmNsZScsXG4gIH0sXG4gIGhhcHB5QmVhbnM6IHtcbiAgICBjb2xvcjogJ2dyZWVuJyxcbiAgICBlbmRDb2xvcjogJyNkMWM4YjknLFxuICAgIHJhZGl1czogMjcuOSxcbiAgICBzbGljZTogNC4yMyxcbiAgICBlbmRBbmdsZTogMSAqIC0wLjMsXG4gICAgc2hhcGU6ICdjaXJjbGUnLFxuICB9LFxuICBoYWxmV2F0ZXJtZWxvbjoge1xuICAgIGNvbG9yOiAnZ3JlZW4nLFxuICAgIGVuZENvbG9yOiAncmVkJyxcbiAgICByYWRpdXM6IDU0LjgwLFxuICAgIHNsaWNlOiAxNy4xNCxcbiAgICBlbmRBbmdsZTogMTcuMTQgKiAtMC4zLFxuICAgIHNoYXBlOiAnY2lyY2xlJyxcbiAgICAvLyBzY2FsZU1heDogMTAuNjgsXG4gICAgLy8gMC4wMDNcbiAgfSxcbn1cblxuY29uc3QgcGFyYW1zID0ge1xuICBjb2xzOiA2LFxuICByb3dzOiA2LFxuICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZScsXG4gIHNjYWxlTWluOiAxLFxuICBzY2FsZU1heDogMzEsXG4gIGZyZXE6IDAuMDAxLFxuICBhbXA6IDAuMixcbiAgYW5pbWF0ZTogdHJ1ZSxcbiAgZnJhbWU6IDAsIC8vIG9ubHkgdXNlZCB3aGVuIGFuaW1hdGUgaXMgZmFsc2VcbiAgbGluZUNhcDogJ3JvdW5kJyxcbiAgYW5pbWF0ZVRoaWNrbmVzczogZmFsc2UsXG4gIG1hbnVhbFRoaWNrbmVzczogMTAsIC8vIG9ubHkgdXNlZCB3aGVuIGFuaW1hdGVUaGlja25lc3MgaXMgZmFsc2VcbiAgc2hhcGU6IHJlY2lwZXMuaGFsZldhdGVybWVsb24uc2hhcGUsIC8vIGxpbmUgLyBjaXJjbGUgLyB0cmlhbmdsZVxuICBjb2xvcjogcmVjaXBlcy5oYWxmV2F0ZXJtZWxvbi5jb2xvciB8fCByZWNpcGVzLmRlZmF1bHQuY29sb3IsXG4gIGVuZENvbG9yOiByZWNpcGVzLmhhbGZXYXRlcm1lbG9uLmVuZENvbG9yIHx8IHJlY2lwZXMuZGVmYXVsdC5lbmRDb2xvcixcbiAgcmFkaXVzOiByZWNpcGVzLmhhbGZXYXRlcm1lbG9uLnJhZGl1cyB8fCByZWNpcGVzLmRlZmF1bHQucmFkaXVzLFxuICBzbGljZTogcmVjaXBlcy5oYWxmV2F0ZXJtZWxvbi5zbGljZSB8fCByZWNpcGVzLmRlZmF1bHQuc2xpY2UsXG4gIGVuZEFuZ2xlOiByZWNpcGVzLmhhbGZXYXRlcm1lbG9uLmVuZEFuZ2xlIHx8IHJlY2lwZXMuZGVmYXVsdC5lbmRBbmdsZSxcbn07XG5cbmNvbnN0IHNrZXRjaCA9ICgpID0+IHtcbiAgcmV0dXJuICh7IGNvbnRleHQsIHdpZHRoLCBoZWlnaHQsIGZyYW1lIH0pID0+IHtcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHBhcmFtcy5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGNvbnN0IGNvbHMgPSBwYXJhbXMuY29scztcbiAgICBjb25zdCByb3dzID0gcGFyYW1zLnJvd3M7XG4gICAgY29uc3QgbnVtQ2VsbHMgPSBjb2xzICogcm93cztcblxuICAgIGNvbnN0IGdyaWR3ID0gd2lkdGggKiAwLjg7XG4gICAgY29uc3QgZ3JpZGggPSBoZWlnaHQgKiAwLjg7XG4gICAgY29uc3QgY2VsbHcgPSBncmlkdyAvIGNvbHM7XG4gICAgY29uc3QgY2VsbGggPSBncmlkaCAvIHJvd3M7XG4gICAgY29uc3QgbWFyZ3ggPSAod2lkdGggLSBncmlkdykgKiAwLjU7XG4gICAgY29uc3QgbWFyZ3kgPSAoaGVpZ2h0IC0gZ3JpZGgpICogMC41O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1DZWxsczsgaSsrKSB7XG4gICAgICBjb25zdCBjb2wgPSBpICUgY29sczsgLy8gMCwxLDIsMyAvLyBpbnN0ZWFkIG9mIGxvb3Bpbmcgb3ZlciAybmQgZ3JpZFxuICAgICAgY29uc3Qgcm93ID0gTWF0aC5mbG9vcihpIC8gY29scyk7XG5cbiAgICAgIGNvbnN0IHggPSBjb2wgKiBjZWxsdztcbiAgICAgIGNvbnN0IHkgPSByb3cgKiBjZWxsaDtcblxuICAgICAgLy8gbWFraW5nIHRoZSBsaW5lIGEgbGl0dGxlIGJpdCBsZXNzIHRoYW4gdGhlIGNlbGxcbiAgICAgIGNvbnN0IHcgPSBjZWxsdyAqIDAuODtcbiAgICAgIGNvbnN0IGggPSBjZWxsaCAqIDAuODtcblxuICAgICAgY29uc3QgZiA9IHBhcmFtcy5hbmltYXRlID8gZnJhbWUgOiBwYXJhbXMuZnJhbWU7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgZnJhbWUgaWYgaXQncyBhbmltYXRpbmdcblxuICAgICAgLy8gQW5nbGUgb2Ygcm90YXRpb24gb2YgbGluZXNcbiAgICAgIGNvbnN0IG4gPSByYW5kb20ubm9pc2UzRCh4LCB5LCBmICogMTAsIHBhcmFtcy5mcmVxKTsgLy8gMC4wMDEgZnJlcXVlbmN5IG1ha2VzIGl0IGxlc3MgY2hhb3RpYyBcbiAgICAgIGNvbnN0IGFuZ2xlID0gbiAqIE1hdGguUEkgKiBwYXJhbXMuYW1wOyAvLyAwLjIgY2FsbSB0aGUgYW5nbGVcblxuICAgICAgLy8gTGluZSB0aGlja25lc3MgY2FsbGVkIHNjYWxlXG4gICAgICAvLyBjb25zdCBzY2FsZSA9IChuKjAuNSswLjUpICogMzA7XG4gICAgICBjb25zdCBtYW51YWxUaGlja25lc3MgPSBwYXJhbXMubWFudWFsVGhpY2tuZXNzIHx8IHBhcmFtcy5zY2FsZU1pbjtcbiAgICAgIGNvbnN0IHRoaWNrbmVzcyA9IHBhcmFtcy5hbmltYXRlVGhpY2tuZXNzXG4gICAgICAgID8gbWF0aC5tYXBSYW5nZShuLCAtMSwgMSwgcGFyYW1zLnNjYWxlTWluLCBwYXJhbXMuc2NhbGVNYXgpXG4gICAgICAgIDogbWFudWFsVGhpY2tuZXNzO1xuXG4gICAgICBjb250ZXh0LnNhdmUoKTtcbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKHgsIHkpOyAvLyBtb3ZlIHRvIHRoZSBjZWxsXG4gICAgICBjb250ZXh0LnRyYW5zbGF0ZShtYXJneCwgbWFyZ3kpOyAvLyBjb21wZW5zYXRlIGZvciBtYXJnaW5cbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKGNlbGx3ICogMC41LCBjZWxsaCAqIDAuNSk7IC8vIGdldCBjZW50cmUgb2YgY2VsbFxuICAgICAgY29udGV4dC5yb3RhdGUoYW5nbGUpO1xuXG4gICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IHRoaWNrbmVzcztcbiAgICAgIGNvbnRleHQubGluZUpvaW4gPSAncm91bmQnOyAvLydtaXRlciB8IGJldmVsIHwgcm91bmQnO1xuICAgICAgY29udGV4dC5saW5lQ2FwID0gcGFyYW1zLmxpbmVDYXA7XG4gICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gcGFyYW1zLmNvbG9yO1xuICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGdldEdyYWRpZW50KGNvbnRleHQsIHBhcmFtcyk7XG5cbiAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICAgIHN3aXRjaCAocGFyYW1zLnNoYXBlKSB7XG4gICAgICAgIGNhc2UgJ2xpbmUnOlxuICAgICAgICAgIGNvbnRleHQubW92ZVRvKHcgKiAtMC41LCAwKTsgLy8gZHJhd2luZyBhIGxpbmUgc3RhcnRpbmcgYXQgMC41IG9mIHdpZHRoIG1vdmluZyBsZWZ0XG4gICAgICAgICAgY29udGV4dC5saW5lVG8odyAqIDAuNSwgMCk7XG4gICAgICAgICAgLy8gY29udGV4dC5saW5lVG8odywgMCk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnY2lyY2xlJzpcbiAgICAgICAgICBjb250ZXh0LmFyYyhcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgcGFyYW1zLnJhZGl1cyAqIDEsIC8vIHJhZGl1c1xuICAgICAgICAgICAgcGFyYW1zLnNsaWNlICogMSwgLy8gc3RhcnQgYW5nbGVcbiAgICAgICAgICAgIHBhcmFtcy5lbmRBbmdsZSk7IC8vIGVuZCBhbmdsZSAvLyBXaWxsIG1ha2UgYXJjcyBsaWtlIGRhc2hvZmZzZXRcbiAgICAgICAgICAvLyBwYXJhbXMuc2xpY2UgKiAtMC4zKTsgLy8gZW5kIGFuZ2xlIC8vIFdpbGwgbWFrZSBhcmNzIGxpa2UgZGFzaG9mZnNldFxuXG4gICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBnZXRSYWRpYWxHcmFkaWVudChjb250ZXh0LCBwYXJhbXMpO1xuICAgICAgICAgIGNvbnRleHQuZmlsbCgpO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RyaWFuZ2xlJzpcbiAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh3ICogLTAuNSwgdyk7XG4gICAgICAgICAgY29udGV4dC5saW5lVG8odywgdyAtIDUwKTsgLy8gIHxcbiAgICAgICAgICBjb250ZXh0LmFyYyh3LCB3LCAyLCBNYXRoLlBJIC8gMTgwICogMSwgTWF0aC5QSSAvIDE4MCAqIDM2MCk7XG5cbiAgICAgICAgICAvLyBjb250ZXh0LmxpbmVUbyh3LCB3KTsgICAgICAvLyAtXG4gICAgICAgICAgLy8gY29udGV4dC5saW5lVG8odywgMCk7ICAgIC8vIFxcXG4gICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnZ3JlZW4nO1xuICAgICAgICAgIGNvbnRleHQuZmlsbCgpXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICBjb250ZXh0LnJlc3RvcmUoKTtcbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBjcmVhdGVQYW5lID0gKCkgPT4ge1xuICBjb25zdCBwYW5lID0gbmV3IFR3ZWFrcGFuZS5QYW5lKCk7XG4gIGxldCBmb2xkZXI7XG5cbiAgZm9sZGVyID0gcGFuZS5hZGRGb2xkZXIoeyB0aXRsZTogJ0dyaWQnIH0pXG4gIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsICdsaW5lQ2FwJywgeyBvcHRpb25zOiB7IGJ1dHQ6ICdidXR0Jywgcm91bmQ6ICdyb3VuZCcsIHNxdWFyZTogJ3NxdWFyZScgfSB9KVxuICBmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAnY29scycsIHsgbWluOiAyLCBtYXg6IDUwLCBzdGVwOiAxIH0pXG4gIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsICdyb3dzJywgeyBtaW46IDIsIG1heDogNTAsIHN0ZXA6IDEgfSlcbiAgZm9sZGVyLmFkZElucHV0KHBhcmFtcywgJ3NjYWxlTWluJywgeyBtaW46IDEsIG1heDogMTAwIH0pXG4gIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsICdzY2FsZU1heCcsIHsgbWluOiAxLCBtYXg6IDEwMCB9KVxuICBmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAnYW5pbWF0ZVRoaWNrbmVzcycpXG4gIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsICdtYW51YWxUaGlja25lc3MnLCB7IG1pbjogMSwgbWF4OiAzMCB9KVxuICBmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAnc2hhcGUnLCB7IG9wdGlvbnM6IHsgbGluZTogJ2xpbmUnLCBjaXJjbGU6ICdjaXJjbGUnLCB0cmlhbmdsZTogJ3RyaWFuZ2xlJyB9IH0pXG4gIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsICdjb2xvcicpXG4gIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsICdlbmRDb2xvcicpXG4gIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsICdyYWRpdXMnLCB7IG1pbjogMSwgbWF4OiAxMDAgfSlcbiAgZm9sZGVyLmFkZElucHV0KHBhcmFtcywgJ3NsaWNlJywgeyBtaW46IDEsIG1heDogMTAwIH0pXG5cbiAgZm9sZGVyID0gcGFuZS5hZGRGb2xkZXIoeyB0aXRsZTogJ05vaXNlJyB9KVxuICBmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAnZnJlcScsIHsgbWluOiAtMC4wMSwgbWF4OiAwLjAxIH0pXG4gIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsICdhbXAnLCB7IG1pbjogMCwgbWF4OiAxIH0pXG4gIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsICdhbmltYXRlJylcbiAgZm9sZGVyLmFkZElucHV0KHBhcmFtcywgJ2ZyYW1lJywgeyBtaW46IDAsIG1heDogOTk5OSB9KVxufTtcblxuY3JlYXRlUGFuZSgpO1xuY2FudmFzU2tldGNoKHNrZXRjaCwgc2V0dGluZ3MpO1xuXG5jb25zdCBnZXRSYWRpYWxHcmFkaWVudCA9IChjb250ZXh0LCBwYXJhbXMpID0+IHtcblxuICBjb25zdCBncmFkaWVudCA9IGNvbnRleHQuY3JlYXRlUmFkaWFsR3JhZGllbnQoXG4gICAgMCxcbiAgICAwLFxuICAgIHBhcmFtcy5yYWRpdXMgKiAxLFxuICAgIHBhcmFtcy5zbGljZSAqIDEsXG4gICAgcGFyYW1zLnNsaWNlICogNCxcbiAgICBwYXJhbXMucmFkaXVzICogMSk7XG5cbiAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKFwiMFwiLCBwYXJhbXMuY29sb3IpO1xuICBncmFkaWVudC5hZGRDb2xvclN0b3AoXCIxLjBcIiwgcGFyYW1zLmVuZENvbG9yKTtcblxuICByZXR1cm4gZ3JhZGllbnQ7XG59XG5cbmNvbnN0IGdldEdyYWRpZW50ID0gKGNvbnRleHQsIHBhcmFtcykgPT4ge1xuICBjb25zdCBncmFkaWVudCA9IGNvbnRleHQuY3JlYXRlTGluZWFyR3JhZGllbnQoMCwgMCwgNTAwLCAwKTsgLy8gaG9yaXpvbnRhbCBncmFkaWVudFxuICBncmFkaWVudC5hZGRDb2xvclN0b3AoXCIwXCIsIHBhcmFtcy5jb2xvcik7XG4gIGdyYWRpZW50LmFkZENvbG9yU3RvcChcIjEuMFwiLCBwYXJhbXMuZW5kQ29sb3IpO1xuXG4gIHJldHVybiBncmFkaWVudDtcbn0iLCJcbmdsb2JhbC5DQU5WQVNfU0tFVENIX0RFRkFVTFRfU1RPUkFHRV9LRVkgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiJdfQ==