@worktif/runtime 0.3.0-edge.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +101 -0
- package/README.md +495 -0
- package/out/dist/bin/index.js +212 -0
- package/out/dist/bin/purenow.js +218 -0
- package/out/dist/bin/templates/runtime-web/cdk/.gitignore.template +25 -0
- package/out/dist/bin/templates/runtime-web/cdk/README.md.template +267 -0
- package/out/dist/bin/templates/runtime-web/cdk/bin/app.ts.template +173 -0
- package/out/dist/bin/templates/runtime-web/cdk/cdk.json.template +79 -0
- package/out/dist/bin/templates/runtime-web/cdk/package.json.template +28 -0
- package/out/dist/bin/templates/runtime-web/cdk/tsconfig.json.template +38 -0
- package/out/dist/bin/templates/runtime-web/purenow-basic/.env.example +15 -0
- package/out/dist/bin/templates/runtime-web/purenow-basic/README.md +118 -0
- package/out/dist/bin/templates/runtime-web/purenow-basic/gitignore.template +64 -0
- package/out/dist/bin/templates/runtime-web/purenow-basic/package.json +34 -0
- package/out/dist/bin/templates/runtime-web/purenow-basic/purenow.config.ts +105 -0
- package/out/dist/bin/templates/runtime-web/purenow-basic/src/app.tsx +35 -0
- package/out/dist/bin/templates/runtime-web/purenow-basic/src/handlers/users/index.ts +17 -0
- package/out/dist/bin/templates/runtime-web/purenow-basic/src/handlers/users/users.handlers.ts +222 -0
- package/out/dist/bin/templates/runtime-web/purenow-basic/src/index.tsx +71 -0
- package/out/dist/bin/templates/runtime-web/purenow-basic/src/pages/about-page.tsx +65 -0
- package/out/dist/bin/templates/runtime-web/purenow-basic/src/pages/home-page.tsx +55 -0
- package/out/dist/bin/templates/runtime-web/purenow-basic/src/pages/users-page.tsx +66 -0
- package/out/dist/bin/templates/runtime-web/purenow-basic/src/routes.tsx +61 -0
- package/out/dist/bin/templates/runtime-web/purenow-basic/src/services/index.ts +17 -0
- package/out/dist/bin/templates/runtime-web/purenow-basic/src/services/users.service.ts +133 -0
- package/out/dist/bin/templates/runtime-web/purenow-basic/src/ties/index.ts +17 -0
- package/out/dist/bin/templates/runtime-web/purenow-basic/src/ties/users.ties.ts +53 -0
- package/out/dist/bin/templates/runtime-web/purenow-basic/tsconfig.json +53 -0
- package/out/dist/lib/index.d.ts +4 -0
- package/out/dist/lib/index.js +4 -0
- package/out/dist/lib/lib/index.d.ts +3 -0
- package/out/dist/lib/lib/runtime-web/index.d.ts +17 -0
- package/out/dist/lib/lib/runtime-web/pipelines/browser-pipeline.d.ts +110 -0
- package/out/dist/lib/lib/runtime-web/pipelines/index.d.ts +2 -0
- package/out/dist/lib/lib/runtime-web/pureweb.d.ts +65 -0
- package/out/dist/lib/lib/runtime-web/types/config.types.d.ts +301 -0
- package/out/dist/lib/lib/runtime-web/types/http.types.d.ts +171 -0
- package/out/dist/lib/lib/runtime-web/types/index.d.ts +14 -0
- package/out/dist/lib/lib/runtime-web/types/infra.types.d.ts +225 -0
- package/out/dist/lib/lib/runtime-web/types/lambda.types.d.ts +175 -0
- package/out/dist/lib/lib/runtime-web/types/microservice.types.d.ts +70 -0
- package/out/dist/lib/lib/runtime-web/types/runtime.types.d.ts +55 -0
- package/out/dist/lib/utils/index.d.ts +2 -0
- package/out/dist/lib/utils/types/index.d.ts +3 -0
- package/out/dist/lib/utils/types/runtime.config.types.d.ts +71 -0
- package/out/dist/src/bin/index.d.ts +5 -0
- package/out/dist/src/bin/index.unix.d.ts +5 -0
- package/out/dist/src/bin/purenow-runtime-cli.d.ts +31 -0
- package/out/dist/src/bin/services/index.d.ts +8 -0
- package/out/dist/src/bin/services/purenow-runtime-deployment.strategy.d.ts +37 -0
- package/out/dist/src/bin/services/purenow-runtime-stacks-deploy.service.d.ts +58 -0
- package/out/dist/src/bin/services/purenow-runtime-stacks-deploy.service.types.d.ts +18 -0
- package/out/dist/src/bin/services/runtime-web-cli-extensions.d.ts +2 -0
- package/out/dist/src/bin/services/template.service.d.ts +53 -0
- package/out/dist/src/bin/services/utils/index.d.ts +2 -0
- package/out/dist/src/bin/utils/errors.d.ts +68 -0
- package/out/dist/src/lib/runtime-web/index.d.ts +17 -0
- package/out/dist/src/lib/runtime-web/pipelines/browser-pipeline.d.ts +110 -0
- package/out/dist/src/lib/runtime-web/pipelines/index.d.ts +2 -0
- package/out/dist/src/lib/runtime-web/pureweb.d.ts +65 -0
- package/out/dist/src/lib/runtime-web/types/config.types.d.ts +301 -0
- package/out/dist/src/lib/runtime-web/types/http.types.d.ts +171 -0
- package/out/dist/src/lib/runtime-web/types/index.d.ts +14 -0
- package/out/dist/src/lib/runtime-web/types/infra.types.d.ts +225 -0
- package/out/dist/src/lib/runtime-web/types/lambda.types.d.ts +175 -0
- package/out/dist/src/lib/runtime-web/types/microservice.types.d.ts +70 -0
- package/out/dist/src/lib/runtime-web/types/runtime.types.d.ts +55 -0
- package/package.json +133 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";var wn=Object.create;var ce=Object.defineProperty;var bn=Object.getOwnPropertyDescriptor;var vn=Object.getOwnPropertyNames;var kn=Object.getPrototypeOf,xn=Object.prototype.hasOwnProperty;var B=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Mn=(t,e)=>{for(var n in e)ce(t,n,{get:e[n],enumerable:!0})},et=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of vn(e))!xn.call(t,o)&&o!==n&&ce(t,o,{get:()=>e[o],enumerable:!(r=bn(e,o))||r.enumerable});return t};var N=(t,e,n)=>(n=t!=null?wn(kn(t)):{},et(e||!t||!t.__esModule?ce(n,"default",{value:t,enumerable:!0}):n,t)),Sn=t=>et(ce({},"__esModule",{value:!0}),t);var nt=B((or,tt)=>{"use strict";tt.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var Se=B((ir,ot)=>{var ee=nt(),rt={};for(let t of Object.keys(ee))rt[ee[t]]=t;var g={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};ot.exports=g;for(let t of Object.keys(g)){if(!("channels"in g[t]))throw new Error("missing channels property: "+t);if(!("labels"in g[t]))throw new Error("missing channel labels property: "+t);if(g[t].labels.length!==g[t].channels)throw new Error("channel and label counts mismatch: "+t);let{channels:e,labels:n}=g[t];delete g[t].channels,delete g[t].labels,Object.defineProperty(g[t],"channels",{value:e}),Object.defineProperty(g[t],"labels",{value:n})}g.rgb.hsl=function(t){let e=t[0]/255,n=t[1]/255,r=t[2]/255,o=Math.min(e,n,r),i=Math.max(e,n,r),l=i-o,u,h;i===o?u=0:e===i?u=(n-r)/l:n===i?u=2+(r-e)/l:r===i&&(u=4+(e-n)/l),u=Math.min(u*60,360),u<0&&(u+=360);let v=(o+i)/2;return i===o?h=0:v<=.5?h=l/(i+o):h=l/(2-i-o),[u,h*100,v*100]},g.rgb.hsv=function(t){let e,n,r,o,i,l=t[0]/255,u=t[1]/255,h=t[2]/255,v=Math.max(l,u,h),M=v-Math.min(l,u,h),O=function($){return(v-$)/6/M+1/2};return M===0?(o=0,i=0):(i=M/v,e=O(l),n=O(u),r=O(h),l===v?o=r-n:u===v?o=1/3+e-r:h===v&&(o=2/3+n-e),o<0?o+=1:o>1&&(o-=1)),[o*360,i*100,v*100]},g.rgb.hwb=function(t){let e=t[0],n=t[1],r=t[2],o=g.rgb.hsl(t)[0],i=1/255*Math.min(e,Math.min(n,r));return r=1-1/255*Math.max(e,Math.max(n,r)),[o,i*100,r*100]},g.rgb.cmyk=function(t){let e=t[0]/255,n=t[1]/255,r=t[2]/255,o=Math.min(1-e,1-n,1-r),i=(1-e-o)/(1-o)||0,l=(1-n-o)/(1-o)||0,u=(1-r-o)/(1-o)||0;return[i*100,l*100,u*100,o*100]};function On(t,e){return(t[0]-e[0])**2+(t[1]-e[1])**2+(t[2]-e[2])**2}g.rgb.keyword=function(t){let e=rt[t];if(e)return e;let n=1/0,r;for(let o of Object.keys(ee)){let i=ee[o],l=On(t,i);l<n&&(n=l,r=o)}return r},g.keyword.rgb=function(t){return ee[t]},g.rgb.xyz=function(t){let e=t[0]/255,n=t[1]/255,r=t[2]/255;e=e>.04045?((e+.055)/1.055)**2.4:e/12.92,n=n>.04045?((n+.055)/1.055)**2.4:n/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92;let o=e*.4124+n*.3576+r*.1805,i=e*.2126+n*.7152+r*.0722,l=e*.0193+n*.1192+r*.9505;return[o*100,i*100,l*100]},g.rgb.lab=function(t){let e=g.rgb.xyz(t),n=e[0],r=e[1],o=e[2];n/=95.047,r/=100,o/=108.883,n=n>.008856?n**(1/3):7.787*n+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116;let i=116*r-16,l=500*(n-r),u=200*(r-o);return[i,l,u]},g.hsl.rgb=function(t){let e=t[0]/360,n=t[1]/100,r=t[2]/100,o,i,l;if(n===0)return l=r*255,[l,l,l];r<.5?o=r*(1+n):o=r+n-r*n;let u=2*r-o,h=[0,0,0];for(let v=0;v<3;v++)i=e+1/3*-(v-1),i<0&&i++,i>1&&i--,6*i<1?l=u+(o-u)*6*i:2*i<1?l=o:3*i<2?l=u+(o-u)*(2/3-i)*6:l=u,h[v]=l*255;return h},g.hsl.hsv=function(t){let e=t[0],n=t[1]/100,r=t[2]/100,o=n,i=Math.max(r,.01);r*=2,n*=r<=1?r:2-r,o*=i<=1?i:2-i;let l=(r+n)/2,u=r===0?2*o/(i+o):2*n/(r+n);return[e,u*100,l*100]},g.hsv.rgb=function(t){let e=t[0]/60,n=t[1]/100,r=t[2]/100,o=Math.floor(e)%6,i=e-Math.floor(e),l=255*r*(1-n),u=255*r*(1-n*i),h=255*r*(1-n*(1-i));switch(r*=255,o){case 0:return[r,h,l];case 1:return[u,r,l];case 2:return[l,r,h];case 3:return[l,u,r];case 4:return[h,l,r];case 5:return[r,l,u]}},g.hsv.hsl=function(t){let e=t[0],n=t[1]/100,r=t[2]/100,o=Math.max(r,.01),i,l;l=(2-n)*r;let u=(2-n)*o;return i=n*o,i/=u<=1?u:2-u,i=i||0,l/=2,[e,i*100,l*100]},g.hwb.rgb=function(t){let e=t[0]/360,n=t[1]/100,r=t[2]/100,o=n+r,i;o>1&&(n/=o,r/=o);let l=Math.floor(6*e),u=1-r;i=6*e-l,(l&1)!==0&&(i=1-i);let h=n+i*(u-n),v,M,O;switch(l){default:case 6:case 0:v=u,M=h,O=n;break;case 1:v=h,M=u,O=n;break;case 2:v=n,M=u,O=h;break;case 3:v=n,M=h,O=u;break;case 4:v=h,M=n,O=u;break;case 5:v=u,M=n,O=h;break}return[v*255,M*255,O*255]},g.cmyk.rgb=function(t){let e=t[0]/100,n=t[1]/100,r=t[2]/100,o=t[3]/100,i=1-Math.min(1,e*(1-o)+o),l=1-Math.min(1,n*(1-o)+o),u=1-Math.min(1,r*(1-o)+o);return[i*255,l*255,u*255]},g.xyz.rgb=function(t){let e=t[0]/100,n=t[1]/100,r=t[2]/100,o,i,l;return o=e*3.2406+n*-1.5372+r*-.4986,i=e*-.9689+n*1.8758+r*.0415,l=e*.0557+n*-.204+r*1.057,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,i=i>.0031308?1.055*i**(1/2.4)-.055:i*12.92,l=l>.0031308?1.055*l**(1/2.4)-.055:l*12.92,o=Math.min(Math.max(0,o),1),i=Math.min(Math.max(0,i),1),l=Math.min(Math.max(0,l),1),[o*255,i*255,l*255]},g.xyz.lab=function(t){let e=t[0],n=t[1],r=t[2];e/=95.047,n/=100,r/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,n=n>.008856?n**(1/3):7.787*n+16/116,r=r>.008856?r**(1/3):7.787*r+16/116;let o=116*n-16,i=500*(e-n),l=200*(n-r);return[o,i,l]},g.lab.xyz=function(t){let e=t[0],n=t[1],r=t[2],o,i,l;i=(e+16)/116,o=n/500+i,l=i-r/200;let u=i**3,h=o**3,v=l**3;return i=u>.008856?u:(i-16/116)/7.787,o=h>.008856?h:(o-16/116)/7.787,l=v>.008856?v:(l-16/116)/7.787,o*=95.047,i*=100,l*=108.883,[o,i,l]},g.lab.lch=function(t){let e=t[0],n=t[1],r=t[2],o;o=Math.atan2(r,n)*360/2/Math.PI,o<0&&(o+=360);let l=Math.sqrt(n*n+r*r);return[e,l,o]},g.lch.lab=function(t){let e=t[0],n=t[1],o=t[2]/360*2*Math.PI,i=n*Math.cos(o),l=n*Math.sin(o);return[e,i,l]},g.rgb.ansi16=function(t,e=null){let[n,r,o]=t,i=e===null?g.rgb.hsv(t)[2]:e;if(i=Math.round(i/50),i===0)return 30;let l=30+(Math.round(o/255)<<2|Math.round(r/255)<<1|Math.round(n/255));return i===2&&(l+=60),l},g.hsv.ansi16=function(t){return g.rgb.ansi16(g.hsv.rgb(t),t[2])},g.rgb.ansi256=function(t){let e=t[0],n=t[1],r=t[2];return e===n&&n===r?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(n/255*5)+Math.round(r/255*5)},g.ansi16.rgb=function(t){let e=t%10;if(e===0||e===7)return t>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let n=(~~(t>50)+1)*.5,r=(e&1)*n*255,o=(e>>1&1)*n*255,i=(e>>2&1)*n*255;return[r,o,i]},g.ansi256.rgb=function(t){if(t>=232){let i=(t-232)*10+8;return[i,i,i]}t-=16;let e,n=Math.floor(t/36)/5*255,r=Math.floor((e=t%36)/6)/5*255,o=e%6/5*255;return[n,r,o]},g.rgb.hex=function(t){let n=(((Math.round(t[0])&255)<<16)+((Math.round(t[1])&255)<<8)+(Math.round(t[2])&255)).toString(16).toUpperCase();return"000000".substring(n.length)+n},g.hex.rgb=function(t){let e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let n=e[0];e[0].length===3&&(n=n.split("").map(u=>u+u).join(""));let r=parseInt(n,16),o=r>>16&255,i=r>>8&255,l=r&255;return[o,i,l]},g.rgb.hcg=function(t){let e=t[0]/255,n=t[1]/255,r=t[2]/255,o=Math.max(Math.max(e,n),r),i=Math.min(Math.min(e,n),r),l=o-i,u,h;return l<1?u=i/(1-l):u=0,l<=0?h=0:o===e?h=(n-r)/l%6:o===n?h=2+(r-e)/l:h=4+(e-n)/l,h/=6,h%=1,[h*360,l*100,u*100]},g.hsl.hcg=function(t){let e=t[1]/100,n=t[2]/100,r=n<.5?2*e*n:2*e*(1-n),o=0;return r<1&&(o=(n-.5*r)/(1-r)),[t[0],r*100,o*100]},g.hsv.hcg=function(t){let e=t[1]/100,n=t[2]/100,r=e*n,o=0;return r<1&&(o=(n-r)/(1-r)),[t[0],r*100,o*100]},g.hcg.rgb=function(t){let e=t[0]/360,n=t[1]/100,r=t[2]/100;if(n===0)return[r*255,r*255,r*255];let o=[0,0,0],i=e%1*6,l=i%1,u=1-l,h=0;switch(Math.floor(i)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=u,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=u,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=u}return h=(1-n)*r,[(n*o[0]+h)*255,(n*o[1]+h)*255,(n*o[2]+h)*255]},g.hcg.hsv=function(t){let e=t[1]/100,n=t[2]/100,r=e+n*(1-e),o=0;return r>0&&(o=e/r),[t[0],o*100,r*100]},g.hcg.hsl=function(t){let e=t[1]/100,r=t[2]/100*(1-e)+.5*e,o=0;return r>0&&r<.5?o=e/(2*r):r>=.5&&r<1&&(o=e/(2*(1-r))),[t[0],o*100,r*100]},g.hcg.hwb=function(t){let e=t[1]/100,n=t[2]/100,r=e+n*(1-e);return[t[0],(r-e)*100,(1-r)*100]},g.hwb.hcg=function(t){let e=t[1]/100,r=1-t[2]/100,o=r-e,i=0;return o<1&&(i=(r-o)/(1-o)),[t[0],o*100,i*100]},g.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]},g.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]},g.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]},g.gray.hsl=function(t){return[0,0,t[0]]},g.gray.hsv=g.gray.hsl,g.gray.hwb=function(t){return[0,100,t[0]]},g.gray.cmyk=function(t){return[0,0,0,t[0]]},g.gray.lab=function(t){return[t[0],0,0]},g.gray.hex=function(t){let e=Math.round(t[0]/100*255)&255,r=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(r.length)+r},g.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}});var st=B((sr,it)=>{var ue=Se();function En(){let t={},e=Object.keys(ue);for(let n=e.length,r=0;r<n;r++)t[e[r]]={distance:-1,parent:null};return t}function Rn(t){let e=En(),n=[t];for(e[t].distance=0;n.length;){let r=n.pop(),o=Object.keys(ue[r]);for(let i=o.length,l=0;l<i;l++){let u=o[l],h=e[u];h.distance===-1&&(h.distance=e[r].distance+1,h.parent=r,n.unshift(u))}}return e}function Tn(t,e){return function(n){return e(t(n))}}function Cn(t,e){let n=[e[t].parent,t],r=ue[e[t].parent][t],o=e[t].parent;for(;e[o].parent;)n.unshift(e[o].parent),r=Tn(ue[e[o].parent][o],r),o=e[o].parent;return r.conversion=n,r}it.exports=function(t){let e=Rn(t),n={},r=Object.keys(e);for(let o=r.length,i=0;i<o;i++){let l=r[i];e[l].parent!==null&&(n[l]=Cn(l,e))}return n}});var lt=B((ar,at)=>{var Oe=Se(),_n=st(),V={},Pn=Object.keys(Oe);function In(t){let e=function(...n){let r=n[0];return r==null?r:(r.length>1&&(n=r),t(n))};return"conversion"in t&&(e.conversion=t.conversion),e}function Dn(t){let e=function(...n){let r=n[0];if(r==null)return r;r.length>1&&(n=r);let o=t(n);if(typeof o=="object")for(let i=o.length,l=0;l<i;l++)o[l]=Math.round(o[l]);return o};return"conversion"in t&&(e.conversion=t.conversion),e}Pn.forEach(t=>{V[t]={},Object.defineProperty(V[t],"channels",{value:Oe[t].channels}),Object.defineProperty(V[t],"labels",{value:Oe[t].labels});let e=_n(t);Object.keys(e).forEach(r=>{let o=e[r];V[t][r]=Dn(o),V[t][r].raw=In(o)})}),at.exports=V});var pt=B((lr,ht)=>{"use strict";var ct=(t,e)=>(...n)=>`\x1B[${t(...n)+e}m`,ut=(t,e)=>(...n)=>{let r=t(...n);return`\x1B[${38+e};5;${r}m`},ft=(t,e)=>(...n)=>{let r=t(...n);return`\x1B[${38+e};2;${r[0]};${r[1]};${r[2]}m`},fe=t=>t,dt=(t,e,n)=>[t,e,n],Y=(t,e,n)=>{Object.defineProperty(t,e,{get:()=>{let r=n();return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0}),r},enumerable:!0,configurable:!0})},Ee,J=(t,e,n,r)=>{Ee===void 0&&(Ee=lt());let o=r?10:0,i={};for(let[l,u]of Object.entries(Ee)){let h=l==="ansi16"?"ansi":l;l===e?i[h]=t(n,o):typeof u=="object"&&(i[h]=t(u[e],o))}return i};function jn(){let t=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[n,r]of Object.entries(e)){for(let[o,i]of Object.entries(r))e[o]={open:`\x1B[${i[0]}m`,close:`\x1B[${i[1]}m`},r[o]=e[o],t.set(i[0],i[1]);Object.defineProperty(e,n,{value:r,enumerable:!1})}return Object.defineProperty(e,"codes",{value:t,enumerable:!1}),e.color.close="\x1B[39m",e.bgColor.close="\x1B[49m",Y(e.color,"ansi",()=>J(ct,"ansi16",fe,!1)),Y(e.color,"ansi256",()=>J(ut,"ansi256",fe,!1)),Y(e.color,"ansi16m",()=>J(ft,"rgb",dt,!1)),Y(e.bgColor,"ansi",()=>J(ct,"ansi16",fe,!0)),Y(e.bgColor,"ansi256",()=>J(ut,"ansi256",fe,!0)),Y(e.bgColor,"ansi16m",()=>J(ft,"rgb",dt,!0)),e}Object.defineProperty(ht,"exports",{enumerable:!0,get:jn})});var gt=B((cr,mt)=>{"use strict";mt.exports=(t,e=process.argv)=>{let n=t.startsWith("-")?"":t.length===1?"-":"--",r=e.indexOf(n+t),o=e.indexOf("--");return r!==-1&&(o===-1||r<o)}});var bt=B((ur,wt)=>{"use strict";var Bn=require("os"),yt=require("tty"),D=gt(),{env:P}=process,G;D("no-color")||D("no-colors")||D("color=false")||D("color=never")?G=0:(D("color")||D("colors")||D("color=true")||D("color=always"))&&(G=1),"FORCE_COLOR"in P&&(P.FORCE_COLOR==="true"?G=1:P.FORCE_COLOR==="false"?G=0:G=P.FORCE_COLOR.length===0?1:Math.min(parseInt(P.FORCE_COLOR,10),3));function Re(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function Te(t,e){if(G===0)return 0;if(D("color=16m")||D("color=full")||D("color=truecolor"))return 3;if(D("color=256"))return 2;if(t&&!e&&G===void 0)return 0;let n=G||0;if(P.TERM==="dumb")return n;if(process.platform==="win32"){let r=Bn.release().split(".");return Number(r[0])>=10&&Number(r[2])>=10586?Number(r[2])>=14931?3:2:1}if("CI"in P)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(r=>r in P)||P.CI_NAME==="codeship"?1:n;if("TEAMCITY_VERSION"in P)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(P.TEAMCITY_VERSION)?1:0;if(P.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in P){let r=parseInt((P.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(P.TERM_PROGRAM){case"iTerm.app":return r>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(P.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(P.TERM)||"COLORTERM"in P?1:n}function An(t){let e=Te(t,t&&t.isTTY);return Re(e)}wt.exports={supportsColor:An,stdout:Re(Te(!0,yt.isatty(1))),stderr:Re(Te(!0,yt.isatty(2)))}});var kt=B((fr,vt)=>{"use strict";var $n=(t,e,n)=>{let r=t.indexOf(e);if(r===-1)return t;let o=e.length,i=0,l="";do l+=t.substr(i,r-i)+e+n,i=r+o,r=t.indexOf(e,i);while(r!==-1);return l+=t.substr(i),l},Fn=(t,e,n,r)=>{let o=0,i="";do{let l=t[r-1]==="\r";i+=t.substr(o,(l?r-1:r)-o)+e+(l?`\r
|
|
3
|
+
`:`
|
|
4
|
+
`)+n,o=r+1,r=t.indexOf(`
|
|
5
|
+
`,o)}while(r!==-1);return i+=t.substr(o),i};vt.exports={stringReplaceAll:$n,stringEncaseCRLFWithFirstIndex:Fn}});var Et=B((dr,Ot)=>{"use strict";var Ln=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,xt=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,Nn=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,zn=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,Gn=new Map([["n",`
|
|
6
|
+
`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function Mt(t){let e=t[0]==="u",n=t[1]==="{";return e&&!n&&t.length===5||t[0]==="x"&&t.length===3?String.fromCharCode(parseInt(t.slice(1),16)):e&&n?String.fromCodePoint(parseInt(t.slice(2,-1),16)):Gn.get(t)||t}function Un(t,e){let n=[],r=e.trim().split(/\s*,\s*/g),o;for(let i of r){let l=Number(i);if(!Number.isNaN(l))n.push(l);else if(o=i.match(Nn))n.push(o[2].replace(zn,(u,h,v)=>h?Mt(h):v));else throw new Error(`Invalid Chalk template style argument: ${i} (in style '${t}')`)}return n}function Wn(t){xt.lastIndex=0;let e=[],n;for(;(n=xt.exec(t))!==null;){let r=n[1];if(n[2]){let o=Un(r,n[2]);e.push([r].concat(o))}else e.push([r])}return e}function St(t,e){let n={};for(let o of e)for(let i of o.styles)n[i[0]]=o.inverse?null:i.slice(1);let r=t;for(let[o,i]of Object.entries(n))if(Array.isArray(i)){if(!(o in r))throw new Error(`Unknown Chalk style: ${o}`);r=i.length>0?r[o](...i):r[o]}return r}Ot.exports=(t,e)=>{let n=[],r=[],o=[];if(e.replace(Ln,(i,l,u,h,v,M)=>{if(l)o.push(Mt(l));else if(h){let O=o.join("");o=[],r.push(n.length===0?O:St(t,n)(O)),n.push({inverse:u,styles:Wn(h)})}else if(v){if(n.length===0)throw new Error("Found extraneous } in Chalk template literal");r.push(St(t,n)(o.join(""))),o=[],n.pop()}else o.push(M)}),r.push(o.join("")),n.length>0){let i=`Chalk template literal is missing ${n.length} closing bracket${n.length===1?"":"s"} (\`}\`)`;throw new Error(i)}return r.join("")}});var Dt=B((hr,It)=>{"use strict";var te=pt(),{stdout:Ce,stderr:_e}=bt(),{stringReplaceAll:qn,stringEncaseCRLFWithFirstIndex:Hn}=kt(),{isArray:de}=Array,Rt=["ansi","ansi","ansi256","ansi16m"],X=Object.create(null),Vn=(t,e={})=>{if(e.level&&!(Number.isInteger(e.level)&&e.level>=0&&e.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let n=Ce?Ce.level:0;t.level=e.level===void 0?n:e.level},Pe=class{constructor(e){return Tt(e)}},Tt=t=>{let e={};return Vn(e,t),e.template=(...n)=>Pt(e.template,...n),Object.setPrototypeOf(e,he.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=Pe,e.template};function he(t){return Tt(t)}for(let[t,e]of Object.entries(te))X[t]={get(){let n=pe(this,Ie(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:n}),n}};X.visible={get(){let t=pe(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var Ct=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of Ct)X[t]={get(){let{level:e}=this;return function(...n){let r=Ie(te.color[Rt[e]][t](...n),te.color.close,this._styler);return pe(this,r,this._isEmpty)}}};for(let t of Ct){let e="bg"+t[0].toUpperCase()+t.slice(1);X[e]={get(){let{level:n}=this;return function(...r){let o=Ie(te.bgColor[Rt[n]][t](...r),te.bgColor.close,this._styler);return pe(this,o,this._isEmpty)}}}}var Yn=Object.defineProperties(()=>{},{...X,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),Ie=(t,e,n)=>{let r,o;return n===void 0?(r=t,o=e):(r=n.openAll+t,o=e+n.closeAll),{open:t,close:e,openAll:r,closeAll:o,parent:n}},pe=(t,e,n)=>{let r=(...o)=>de(o[0])&&de(o[0].raw)?_t(r,Pt(r,...o)):_t(r,o.length===1?""+o[0]:o.join(" "));return Object.setPrototypeOf(r,Yn),r._generator=t,r._styler=e,r._isEmpty=n,r},_t=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let n=t._styler;if(n===void 0)return e;let{openAll:r,closeAll:o}=n;if(e.indexOf("\x1B")!==-1)for(;n!==void 0;)e=qn(e,n.close,n.open),n=n.parent;let i=e.indexOf(`
|
|
7
|
+
`);return i!==-1&&(e=Hn(e,o,r,i)),r+e+o},De,Pt=(t,...e)=>{let[n]=e;if(!de(n)||!de(n.raw))return e.join(" ");let r=e.slice(1),o=[n.raw[0]];for(let i=1;i<n.length;i++)o.push(String(r[i-1]).replace(/[{}\\]/g,"\\$&"),String(n.raw[i]));return De===void 0&&(De=Et()),De(t,o.join(""))};Object.defineProperties(he.prototype,X);var me=he();me.supportsColor=Ce,me.stderr=he({level:_e?_e.level:0}),me.stderr.supportsColor=_e,It.exports=me});var je=B(()=>{var jt;(function(t){(function(e){var n=typeof globalThis=="object"?globalThis:typeof global=="object"?global:typeof self=="object"?self:typeof this=="object"?this:u(),r=o(t);typeof n.Reflect<"u"&&(r=o(n.Reflect,r)),e(r,n),typeof n.Reflect>"u"&&(n.Reflect=t);function o(h,v){return function(M,O){Object.defineProperty(h,M,{configurable:!0,writable:!0,value:O}),v&&v(M,O)}}function i(){try{return Function("return this;")()}catch{}}function l(){try{return(0,eval)("(function() { return this; })()")}catch{}}function u(){return i()||l()}})(function(e,n){var r=Object.prototype.hasOwnProperty,o=typeof Symbol=="function",i=o&&typeof Symbol.toPrimitive<"u"?Symbol.toPrimitive:"@@toPrimitive",l=o&&typeof Symbol.iterator<"u"?Symbol.iterator:"@@iterator",u=typeof Object.create=="function",h={__proto__:[]}instanceof Array,v=!u&&!h,M={create:u?function(){return Me(Object.create(null))}:h?function(){return Me({__proto__:null})}:function(){return Me({})},has:v?function(s,a){return r.call(s,a)}:function(s,a){return a in s},get:v?function(s,a){return r.call(s,a)?s[a]:void 0}:function(s,a){return s[a]}},O=Object.getPrototypeOf(Function),$=typeof Map=="function"&&typeof Map.prototype.entries=="function"?Map:hn(),Z=typeof Set=="function"&&typeof Set.prototype.entries=="function"?Set:pn(),Q=typeof WeakMap=="function"?WeakMap:mn(),W=o?Symbol.for("@reflect-metadata:registry"):void 0,le=un(),$e=fn(le);function qt(s,a,c,f){if(b(c)){if(!He(s))throw new TypeError;if(!Ve(a))throw new TypeError;return tn(s,a)}else{if(!He(s))throw new TypeError;if(!E(a))throw new TypeError;if(!E(f)&&!b(f)&&!q(f))throw new TypeError;return q(f)&&(f=void 0),c=F(c),nn(s,a,c,f)}}e("decorate",qt);function Ht(s,a){function c(f,w){if(!E(f))throw new TypeError;if(!b(w)&&!ln(w))throw new TypeError;ze(s,a,f,w)}return c}e("metadata",Ht);function Vt(s,a,c,f){if(!E(c))throw new TypeError;return b(f)||(f=F(f)),ze(s,a,c,f)}e("defineMetadata",Vt);function Yt(s,a,c){if(!E(a))throw new TypeError;return b(c)||(c=F(c)),Fe(s,a,c)}e("hasMetadata",Yt);function Jt(s,a,c){if(!E(a))throw new TypeError;return b(c)||(c=F(c)),ve(s,a,c)}e("hasOwnMetadata",Jt);function Xt(s,a,c){if(!E(a))throw new TypeError;return b(c)||(c=F(c)),Le(s,a,c)}e("getMetadata",Xt);function Zt(s,a,c){if(!E(a))throw new TypeError;return b(c)||(c=F(c)),Ne(s,a,c)}e("getOwnMetadata",Zt);function Qt(s,a){if(!E(s))throw new TypeError;return b(a)||(a=F(a)),Ge(s,a)}e("getMetadataKeys",Qt);function Kt(s,a){if(!E(s))throw new TypeError;return b(a)||(a=F(a)),Ue(s,a)}e("getOwnMetadataKeys",Kt);function en(s,a,c){if(!E(a))throw new TypeError;if(b(c)||(c=F(c)),!E(a))throw new TypeError;b(c)||(c=F(c));var f=K(a,c,!1);return b(f)?!1:f.OrdinaryDeleteMetadata(s,a,c)}e("deleteMetadata",en);function tn(s,a){for(var c=s.length-1;c>=0;--c){var f=s[c],w=f(a);if(!b(w)&&!q(w)){if(!Ve(w))throw new TypeError;a=w}}return a}function nn(s,a,c,f){for(var w=s.length-1;w>=0;--w){var R=s[w],_=R(a,c,f);if(!b(_)&&!q(_)){if(!E(_))throw new TypeError;f=_}}return f}function Fe(s,a,c){var f=ve(s,a,c);if(f)return!0;var w=xe(a);return q(w)?!1:Fe(s,w,c)}function ve(s,a,c){var f=K(a,c,!1);return b(f)?!1:qe(f.OrdinaryHasOwnMetadata(s,a,c))}function Le(s,a,c){var f=ve(s,a,c);if(f)return Ne(s,a,c);var w=xe(a);if(!q(w))return Le(s,w,c)}function Ne(s,a,c){var f=K(a,c,!1);if(!b(f))return f.OrdinaryGetOwnMetadata(s,a,c)}function ze(s,a,c,f){var w=K(c,f,!0);w.OrdinaryDefineOwnMetadata(s,a,c,f)}function Ge(s,a){var c=Ue(s,a),f=xe(s);if(f===null)return c;var w=Ge(f,a);if(w.length<=0)return c;if(c.length<=0)return w;for(var R=new Z,_=[],k=0,d=c;k<d.length;k++){var p=d[k],m=R.has(p);m||(R.add(p),_.push(p))}for(var y=0,x=w;y<x.length;y++){var p=x[y],m=R.has(p);m||(R.add(p),_.push(p))}return _}function Ue(s,a){var c=K(s,a,!1);return c?c.OrdinaryOwnMetadataKeys(s,a):[]}function We(s){if(s===null)return 1;switch(typeof s){case"undefined":return 0;case"boolean":return 2;case"string":return 3;case"symbol":return 4;case"number":return 5;case"object":return s===null?1:6;default:return 6}}function b(s){return s===void 0}function q(s){return s===null}function rn(s){return typeof s=="symbol"}function E(s){return typeof s=="object"?s!==null:typeof s=="function"}function on(s,a){switch(We(s)){case 0:return s;case 1:return s;case 2:return s;case 3:return s;case 4:return s;case 5:return s}var c=a===3?"string":a===5?"number":"default",f=Ye(s,i);if(f!==void 0){var w=f.call(s,c);if(E(w))throw new TypeError;return w}return sn(s,c==="default"?"number":c)}function sn(s,a){if(a==="string"){var c=s.toString;if(H(c)){var f=c.call(s);if(!E(f))return f}var w=s.valueOf;if(H(w)){var f=w.call(s);if(!E(f))return f}}else{var w=s.valueOf;if(H(w)){var f=w.call(s);if(!E(f))return f}var R=s.toString;if(H(R)){var f=R.call(s);if(!E(f))return f}}throw new TypeError}function qe(s){return!!s}function an(s){return""+s}function F(s){var a=on(s,3);return rn(a)?a:an(a)}function He(s){return Array.isArray?Array.isArray(s):s instanceof Object?s instanceof Array:Object.prototype.toString.call(s)==="[object Array]"}function H(s){return typeof s=="function"}function Ve(s){return typeof s=="function"}function ln(s){switch(We(s)){case 3:return!0;case 4:return!0;default:return!1}}function ke(s,a){return s===a||s!==s&&a!==a}function Ye(s,a){var c=s[a];if(c!=null){if(!H(c))throw new TypeError;return c}}function Je(s){var a=Ye(s,l);if(!H(a))throw new TypeError;var c=a.call(s);if(!E(c))throw new TypeError;return c}function Xe(s){return s.value}function Ze(s){var a=s.next();return a.done?!1:a}function Qe(s){var a=s.return;a&&a.call(s)}function xe(s){var a=Object.getPrototypeOf(s);if(typeof s!="function"||s===O||a!==O)return a;var c=s.prototype,f=c&&Object.getPrototypeOf(c);if(f==null||f===Object.prototype)return a;var w=f.constructor;return typeof w!="function"||w===s?a:w}function cn(){var s;!b(W)&&typeof n.Reflect<"u"&&!(W in n.Reflect)&&typeof n.Reflect.defineMetadata=="function"&&(s=dn(n.Reflect));var a,c,f,w=new Q,R={registerProvider:_,getProvider:d,setProvider:m};return R;function _(y){if(!Object.isExtensible(R))throw new Error("Cannot add provider to a frozen registry.");switch(!0){case s===y:break;case b(a):a=y;break;case a===y:break;case b(c):c=y;break;case c===y:break;default:f===void 0&&(f=new Z),f.add(y);break}}function k(y,x){if(!b(a)){if(a.isProviderFor(y,x))return a;if(!b(c)){if(c.isProviderFor(y,x))return a;if(!b(f))for(var S=Je(f);;){var T=Ze(S);if(!T)return;var j=Xe(T);if(j.isProviderFor(y,x))return Qe(S),j}}}if(!b(s)&&s.isProviderFor(y,x))return s}function d(y,x){var S=w.get(y),T;return b(S)||(T=S.get(x)),b(T)&&(T=k(y,x),b(T)||(b(S)&&(S=new $,w.set(y,S)),S.set(x,T))),T}function p(y){if(b(y))throw new TypeError;return a===y||c===y||!b(f)&&f.has(y)}function m(y,x,S){if(!p(S))throw new Error("Metadata provider not registered.");var T=d(y,x);if(T!==S){if(!b(T))return!1;var j=w.get(y);b(j)&&(j=new $,w.set(y,j)),j.set(x,S)}return!0}}function un(){var s;return!b(W)&&E(n.Reflect)&&Object.isExtensible(n.Reflect)&&(s=n.Reflect[W]),b(s)&&(s=cn()),!b(W)&&E(n.Reflect)&&Object.isExtensible(n.Reflect)&&Object.defineProperty(n.Reflect,W,{enumerable:!1,configurable:!1,writable:!1,value:s}),s}function fn(s){var a=new Q,c={isProviderFor:function(p,m){var y=a.get(p);return b(y)?!1:y.has(m)},OrdinaryDefineOwnMetadata:_,OrdinaryHasOwnMetadata:w,OrdinaryGetOwnMetadata:R,OrdinaryOwnMetadataKeys:k,OrdinaryDeleteMetadata:d};return le.registerProvider(c),c;function f(p,m,y){var x=a.get(p),S=!1;if(b(x)){if(!y)return;x=new $,a.set(p,x),S=!0}var T=x.get(m);if(b(T)){if(!y)return;if(T=new $,x.set(m,T),!s.setProvider(p,m,c))throw x.delete(m),S&&a.delete(p),new Error("Wrong provider for target.")}return T}function w(p,m,y){var x=f(m,y,!1);return b(x)?!1:qe(x.has(p))}function R(p,m,y){var x=f(m,y,!1);if(!b(x))return x.get(p)}function _(p,m,y,x){var S=f(y,x,!0);S.set(p,m)}function k(p,m){var y=[],x=f(p,m,!1);if(b(x))return y;for(var S=x.keys(),T=Je(S),j=0;;){var Ke=Ze(T);if(!Ke)return y.length=j,y;var gn=Xe(Ke);try{y[j]=gn}catch(yn){try{Qe(T)}finally{throw yn}}j++}}function d(p,m,y){var x=f(m,y,!1);if(b(x)||!x.delete(p))return!1;if(x.size===0){var S=a.get(m);b(S)||(S.delete(y),S.size===0&&a.delete(S))}return!0}}function dn(s){var a=s.defineMetadata,c=s.hasOwnMetadata,f=s.getOwnMetadata,w=s.getOwnMetadataKeys,R=s.deleteMetadata,_=new Q,k={isProviderFor:function(d,p){var m=_.get(d);return!b(m)&&m.has(p)?!0:w(d,p).length?(b(m)&&(m=new Z,_.set(d,m)),m.add(p),!0):!1},OrdinaryDefineOwnMetadata:a,OrdinaryHasOwnMetadata:c,OrdinaryGetOwnMetadata:f,OrdinaryOwnMetadataKeys:w,OrdinaryDeleteMetadata:R};return k}function K(s,a,c){var f=le.getProvider(s,a);if(!b(f))return f;if(c){if(le.setProvider(s,a,$e))return $e;throw new Error("Illegal state.")}}function hn(){var s={},a=[],c=(function(){function k(d,p,m){this._index=0,this._keys=d,this._values=p,this._selector=m}return k.prototype["@@iterator"]=function(){return this},k.prototype[l]=function(){return this},k.prototype.next=function(){var d=this._index;if(d>=0&&d<this._keys.length){var p=this._selector(this._keys[d],this._values[d]);return d+1>=this._keys.length?(this._index=-1,this._keys=a,this._values=a):this._index++,{value:p,done:!1}}return{value:void 0,done:!0}},k.prototype.throw=function(d){throw this._index>=0&&(this._index=-1,this._keys=a,this._values=a),d},k.prototype.return=function(d){return this._index>=0&&(this._index=-1,this._keys=a,this._values=a),{value:d,done:!0}},k})(),f=(function(){function k(){this._keys=[],this._values=[],this._cacheKey=s,this._cacheIndex=-2}return Object.defineProperty(k.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),k.prototype.has=function(d){return this._find(d,!1)>=0},k.prototype.get=function(d){var p=this._find(d,!1);return p>=0?this._values[p]:void 0},k.prototype.set=function(d,p){var m=this._find(d,!0);return this._values[m]=p,this},k.prototype.delete=function(d){var p=this._find(d,!1);if(p>=0){for(var m=this._keys.length,y=p+1;y<m;y++)this._keys[y-1]=this._keys[y],this._values[y-1]=this._values[y];return this._keys.length--,this._values.length--,ke(d,this._cacheKey)&&(this._cacheKey=s,this._cacheIndex=-2),!0}return!1},k.prototype.clear=function(){this._keys.length=0,this._values.length=0,this._cacheKey=s,this._cacheIndex=-2},k.prototype.keys=function(){return new c(this._keys,this._values,w)},k.prototype.values=function(){return new c(this._keys,this._values,R)},k.prototype.entries=function(){return new c(this._keys,this._values,_)},k.prototype["@@iterator"]=function(){return this.entries()},k.prototype[l]=function(){return this.entries()},k.prototype._find=function(d,p){if(!ke(this._cacheKey,d)){this._cacheIndex=-1;for(var m=0;m<this._keys.length;m++)if(ke(this._keys[m],d)){this._cacheIndex=m;break}}return this._cacheIndex<0&&p&&(this._cacheIndex=this._keys.length,this._keys.push(d),this._values.push(void 0)),this._cacheIndex},k})();return f;function w(k,d){return k}function R(k,d){return d}function _(k,d){return[k,d]}}function pn(){var s=(function(){function a(){this._map=new $}return Object.defineProperty(a.prototype,"size",{get:function(){return this._map.size},enumerable:!0,configurable:!0}),a.prototype.has=function(c){return this._map.has(c)},a.prototype.add=function(c){return this._map.set(c,c),this},a.prototype.delete=function(c){return this._map.delete(c)},a.prototype.clear=function(){this._map.clear()},a.prototype.keys=function(){return this._map.keys()},a.prototype.values=function(){return this._map.keys()},a.prototype.entries=function(){return this._map.entries()},a.prototype["@@iterator"]=function(){return this.keys()},a.prototype[l]=function(){return this.keys()},a})();return s}function mn(){var s=16,a=M.create(),c=f();return(function(){function d(){this._key=f()}return d.prototype.has=function(p){var m=w(p,!1);return m!==void 0?M.has(m,this._key):!1},d.prototype.get=function(p){var m=w(p,!1);return m!==void 0?M.get(m,this._key):void 0},d.prototype.set=function(p,m){var y=w(p,!0);return y[this._key]=m,this},d.prototype.delete=function(p){var m=w(p,!1);return m!==void 0?delete m[this._key]:!1},d.prototype.clear=function(){this._key=f()},d})();function f(){var d;do d="@@WeakMap@@"+k();while(M.has(a,d));return a[d]=!0,d}function w(d,p){if(!r.call(d,c)){if(!p)return;Object.defineProperty(d,c,{value:M.create()})}return d[c]}function R(d,p){for(var m=0;m<p;++m)d[m]=Math.random()*255|0;return d}function _(d){if(typeof Uint8Array=="function"){var p=new Uint8Array(d);return typeof crypto<"u"?crypto.getRandomValues(p):typeof msCrypto<"u"?msCrypto.getRandomValues(p):R(p,d),p}return R(new Array(d),d)}function k(){var d=_(s);d[6]=d[6]&79|64,d[8]=d[8]&191|128;for(var p="",m=0;m<s;++m){var y=d[m];(m===4||m===6||m===8)&&(p+="-"),y<16&&(p+="0"),p+=y.toString(16).toLowerCase()}return p}}function Me(s){return s.__=void 0,delete s.__,s}})})(jt||(jt={}))});var nr={};Mn(nr,{main:()=>Wt});module.exports=Sn(nr);var C=N(require("fs")),I=N(require("path")),At=require("@worktif/purenow/infra"),Be=require("@worktif/purenow/bin"),Bt=class{constructor(e=process.cwd()){this.cwd=e;let n=[I.join(__dirname,"templates"),I.join(__dirname,"..","..","..","src","bin","templates"),I.join(I.dirname(process.argv[1]||""),"templates")],r=n.find(o=>C.existsSync(o));r?this.templatesDir=r:this.templatesDir=n[0]}async scaffold(e,n,r,o="purenow"){let i=I.join(this.templatesDir,o,e);if(!C.existsSync(i))throw new Be.ValidationError(`Template '${e}' not found`,"Available templates: purenow-basic");let l=I.resolve(this.cwd,n);this.validateTargetDirectory(l,r.force),C.existsSync(l)||C.mkdirSync(l,{recursive:!0});let u={projectName:r.projectName};await this.copyTemplateFiles(i,l,u),await this.generateConfig(l,r.projectName),await this.generateTsConfig(l)}async generateConfig(e,n){let r=`/*
|
|
8
|
+
* Purenow Configuration
|
|
9
|
+
*
|
|
10
|
+
* This file configures your Purenow serverless React SSR application.
|
|
11
|
+
* See: https://github.com/worktif/purenow
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { PurenowCliConfig } from '@worktif/purenow';
|
|
15
|
+
|
|
16
|
+
const config: PurenowCliConfig = {
|
|
17
|
+
projectName: '${n}',
|
|
18
|
+
|
|
19
|
+
stages: [
|
|
20
|
+
{
|
|
21
|
+
name: 'dev',
|
|
22
|
+
awsRegion: 'us-east-1',
|
|
23
|
+
// awsProfile: 'default', // Optional: AWS profile to use
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
name: 'staging',
|
|
27
|
+
awsRegion: 'us-east-1',
|
|
28
|
+
// domain: 'example.com', // Optional: custom domain
|
|
29
|
+
// subdomain: 'staging', // Optional: subdomain prefix
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: 'prod',
|
|
33
|
+
awsRegion: 'us-east-1',
|
|
34
|
+
// domain: 'example.com',
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
|
|
38
|
+
paths: {
|
|
39
|
+
srcDir: 'src',
|
|
40
|
+
reactEntry: 'src/index.tsx',
|
|
41
|
+
outDir: 'out/dist',
|
|
42
|
+
cdkDir: 'cdk',
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
infraMode: 'cdk',
|
|
46
|
+
|
|
47
|
+
features: {
|
|
48
|
+
enableSeo: false,
|
|
49
|
+
enableManifest: true,
|
|
50
|
+
enableWarmup: false,
|
|
51
|
+
clearCacheOnDeploy: true,
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export default config;
|
|
56
|
+
`,o=I.join(e,"purenow.config.ts");C.writeFileSync(o,r,"utf-8")}async generateTsConfig(e){let n={compilerOptions:{target:"ES2020",lib:["ES2020","DOM","DOM.Iterable"],jsx:"react-jsx",module:"commonjs",moduleResolution:"node",resolveJsonModule:!0,allowJs:!0,outDir:"./out/tsc",rootDir:"./",strict:!0,esModuleInterop:!0,skipLibCheck:!0,forceConsistentCasingInFileNames:!0,experimentalDecorators:!0,emitDecoratorMetadata:!0,declaration:!0,declarationMap:!0,sourceMap:!0,baseUrl:".",paths:{"@core/*":["src/core/*"],"@lib/*":["src/lib/*"],"@utils/*":["src/utils/*"],"@bin/*":["src/bin/*"]}},include:["src/**/*"],exclude:["node_modules","out","dist","cdk.out"]},r=I.join(e,"tsconfig.json");C.writeFileSync(r,JSON.stringify(n,null,2),"utf-8")}validateTargetDirectory(e,n){if(!C.existsSync(e))return;if(C.readdirSync(e).length>0&&!n)throw new Be.ValidationError("Target directory is not empty",`Use --force flag to overwrite existing files in ${e}`)}cdkDirectoryExists(e=this.cwd){let n=I.resolve(e,"cdk");return C.existsSync(n)&&C.existsSync(I.join(n,"bin","app.ts"))}async copyTemplateFiles(e,n,r){let o=C.readdirSync(e,{withFileTypes:!0});for(let i of o){let l=I.join(e,i.name),u=i.name;i.name==="gitignore.template"?u=".gitignore":i.name.endsWith(".template")&&(u=i.name.replace(/\.template$/,""));let h=I.join(n,u);if(i.isDirectory())C.existsSync(h)||C.mkdirSync(h,{recursive:!0}),await this.copyTemplateFiles(l,h,r);else{let v=C.readFileSync(l,"utf-8");v=this.substituteVariables(v,r),C.writeFileSync(h,v,"utf-8")}}}substituteVariables(e,n){let r=e;for(let[o,i]of Object.entries(n)){let l=new RegExp(`\\{\\{\\s*${o}\\s*\\}\\}`,"g"),u=o==="projectName"?(0,At.sanitizeStackName)(i):i;r=r.replace(l,u)}return r}};var ye=N(require("fs")),ne=require("@worktif/purenow/infra"),z=require("@worktif/purenow/bin"),ge=class extends z.StacksDeployService{constructor(n=process.cwd()){super(n);this.cwd=n;this.DEFAULT_CDK_DIR="cdk"}async executeDeploy(n,r){let{stage:o,config:i}=n,l=(0,ne.sanitizeStackName)(`${n.config.projectName}-PurenowInfra-${o}`),u=(0,ne.sanitizeStackName)(`${n.config.projectName}-PurenowRuntime-${o}`),h=(0,ne.sanitizeStackName)(`${n.config.projectName}-RuntimeWeb-${o}`);if(!(0,z.getStage)(i,o))throw new z.DeploymentError(`Stage '${o}' not found in configuration`,`Available stages: ${i.stages.map(Q=>Q.name).join(", ")}`);console.log("Deploying Infrastructure stack...");let M=await this.deployCdkStack(l,o,i);if(!M.success)throw new z.DeploymentError("Infrastructure deployment failed","Runtime stack will not be deployed. Fix Infra issues and retry.");console.log("Deploying PurenowRuntime stack...");let O=await this.deployCdkStack(u,o,i);if(!O.success)throw new z.DeploymentError("Runtime deployment failed","Infrastructure is deployed successfully. Fix Runtime issues and retry.");console.log("Deploying RuntimeWeb stack...");let $=await this.deployCdkStack(h,o,i);if(!$.success)throw new z.DeploymentError("RuntimeWeb deployment failed","Infrastructure is deployed successfully. Fix Runtime issues and retry.");let Z=Date.now()-r;return{success:!0,infraStack:M,runtimeStack:O,runtimeWebStack:$,duration:Z}}parseStackOutputs(n,r){let o=super.parseStackOutputs(n,r);if(!ye.existsSync(r))return o;try{let i=ye.readFileSync(r,"utf-8"),u=JSON.parse(i)[n];u&&(o.lambdaArnList=Object.keys(u).filter(h=>h.match(/(?:Lambda)[a-zA-Z]+Arn$/)).map(h=>u[h]))}catch(i){console.warn(`Failed to parse outputs file for ${n}: ${i instanceof Error?i.message:String(i)}`)}return o}getRegionSignature(n){return n?n.split("-").filter(Boolean).map(r=>r[0]??"").join(""):""}resourceName({name:n,serviceName:r,stage:o,region:i}){let l=(0,ne.sanitizeStackName)(this.getRegionSignature(i||"us-east-1"));return`${r}-${n}-${l}-${o}`}};var Or=N(je());var re=N(require("path")),L=N(require("fs")),we=5*1024*1024,Ae=10*1024*1024,$t=1*1024*1024;function Jn(){let t=process.cwd(),e=re.default.join(t,"public/index.html"),n=!0;if(!L.default.existsSync(e)){if(n)return console.warn(`
|
|
57
|
+
`+"=".repeat(80)),console.warn("DEPRECATION WARNING: Missing public/index.html"),console.warn("=".repeat(80)),console.warn(`
|
|
58
|
+
File not found: ${e}`),console.warn(`
|
|
59
|
+
The Purenow framework is using a fallback HTML template.`),console.warn("This fallback will be removed in a future version."),console.warn(`
|
|
60
|
+
Action required: Create public/index.html in your project root.`),console.warn(`
|
|
61
|
+
Minimal template structure:`),console.warn(""),console.warn("<!DOCTYPE html>"),console.warn('<html lang="en">'),console.warn(" <head>"),console.warn(' <meta charset="utf-8" />'),console.warn(' <meta name="viewport" content="width=device-width, initial-scale=1" />'),console.warn(" </head>"),console.warn(" <body>"),console.warn(' <div id="root-purenow"></div>'),console.warn(" </body>"),console.warn("</html>"),console.warn(`
|
|
62
|
+
`+"=".repeat(80)+`
|
|
63
|
+
`),Qn();throw new Error(`
|
|
64
|
+
${"=".repeat(80)}
|
|
65
|
+
BUILD ERROR: Missing public/index.html
|
|
66
|
+
${"=".repeat(80)}
|
|
67
|
+
|
|
68
|
+
File not found: ${e}
|
|
69
|
+
|
|
70
|
+
The Purenow framework requires a base HTML template in your project.
|
|
71
|
+
|
|
72
|
+
Action required: Create public/index.html with the following minimal structure:
|
|
73
|
+
|
|
74
|
+
<!DOCTYPE html>
|
|
75
|
+
<html lang="en">
|
|
76
|
+
<head>
|
|
77
|
+
<meta charset="utf-8" />
|
|
78
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
79
|
+
</head>
|
|
80
|
+
<body>
|
|
81
|
+
<div id="root-purenow"></div>
|
|
82
|
+
</body>
|
|
83
|
+
</html>
|
|
84
|
+
|
|
85
|
+
${"=".repeat(80)}
|
|
86
|
+
`)}let r=L.default.readFileSync(e,"utf-8");if(!r||r.trim().length===0)throw new Error(`
|
|
87
|
+
${"=".repeat(80)}
|
|
88
|
+
BUILD ERROR: Empty public/index.html
|
|
89
|
+
${"=".repeat(80)}
|
|
90
|
+
|
|
91
|
+
File location: ${e}
|
|
92
|
+
|
|
93
|
+
The file exists but is empty. It must contain a valid HTML document structure.
|
|
94
|
+
|
|
95
|
+
Action required: Add HTML content to public/index.html.
|
|
96
|
+
|
|
97
|
+
${"=".repeat(80)}
|
|
98
|
+
`);return Xn(r,e),Zn(r,e),r}function Xn(t,e){let n=Buffer.byteLength(t,"utf-8"),r=(n/(1024*1024)).toFixed(2);if(n>we){let o=(we/1048576).toFixed(2);throw new Error(`
|
|
99
|
+
${"=".repeat(80)}
|
|
100
|
+
BUILD ERROR: HTML template too large
|
|
101
|
+
${"=".repeat(80)}
|
|
102
|
+
|
|
103
|
+
File: ${e}
|
|
104
|
+
Size: ${r} MB
|
|
105
|
+
Maximum allowed: ${o} MB
|
|
106
|
+
|
|
107
|
+
The HTML template is too large and will cause the Lambda bundle to exceed
|
|
108
|
+
the AWS 10MB deployment limit.
|
|
109
|
+
|
|
110
|
+
Action required: Reduce the size of public/index.html by:
|
|
111
|
+
- Removing inline styles (use external CSS files instead)
|
|
112
|
+
- Removing inline scripts (use external JS files instead)
|
|
113
|
+
- Removing large embedded data (use external files instead)
|
|
114
|
+
- Minimizing HTML comments and whitespace
|
|
115
|
+
|
|
116
|
+
${"=".repeat(80)}
|
|
117
|
+
`)}if(n>$t){let o=($t/1048576).toFixed(2);console.warn(`
|
|
118
|
+
`+"=".repeat(80)),console.warn("WARNING: Large HTML template detected"),console.warn("=".repeat(80)),console.warn(`
|
|
119
|
+
File: ${e}`),console.warn(`Size: ${r} MB (threshold: ${o} MB)`),console.warn(`
|
|
120
|
+
A large HTML template increases Lambda bundle size and cold start time.`),console.warn(`
|
|
121
|
+
Consider:`),console.warn(" - Moving inline styles to external CSS files"),console.warn(" - Moving inline scripts to external JS files"),console.warn(" - Reducing embedded data and comments"),console.warn(`
|
|
122
|
+
`+"=".repeat(80)+`
|
|
123
|
+
`)}}function Zn(t,e){let n=[];/<html[^>]*>/i.test(t)||n.push("<html>"),/<head[^>]*>/i.test(t)||n.push("<head>"),/<body[^>]*>/i.test(t)||n.push("<body>"),n.length>0&&(console.warn(`
|
|
124
|
+
`+"=".repeat(80)),console.warn("WARNING: Invalid HTML structure detected"),console.warn("=".repeat(80)),console.warn(`
|
|
125
|
+
File: ${e}`),console.warn(`Missing required tags: ${n.join(", ")}`),console.warn(`
|
|
126
|
+
The HTML template may not render correctly at runtime.`),console.warn(`
|
|
127
|
+
Action recommended: Add the missing tags to public/index.html.`),console.warn(`
|
|
128
|
+
`+"=".repeat(80)+`
|
|
129
|
+
`))}function Qn(){return`<!DOCTYPE html>
|
|
130
|
+
<html lang="en">
|
|
131
|
+
<head>
|
|
132
|
+
<meta charset="utf-8" />
|
|
133
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
134
|
+
<meta name="theme-color" content="#000000" />
|
|
135
|
+
</head>
|
|
136
|
+
<body>
|
|
137
|
+
<noscript>You need to enable JavaScript to run this app.</noscript>
|
|
138
|
+
<div id="root-internal">Loading...</div>
|
|
139
|
+
<div id="root-purenow"></div>
|
|
140
|
+
</body>
|
|
141
|
+
</html>`}function Kn(t){if(!L.default.existsSync(t)){console.warn(`Warning: Could not validate bundle size - embedded file not found: ${t}`);return}let e=L.default.statSync(t).size,n=(e/(1024*1024)).toFixed(2);if(e>we)throw new Error(`
|
|
142
|
+
${"=".repeat(80)}
|
|
143
|
+
BUILD ERROR: Embedded template file too large
|
|
144
|
+
${"=".repeat(80)}
|
|
145
|
+
|
|
146
|
+
File: ${t}
|
|
147
|
+
Size: ${n} MB
|
|
148
|
+
Maximum allowed: ${(we/(1024*1024)).toFixed(2)} MB
|
|
149
|
+
|
|
150
|
+
The embedded template file will cause the Lambda bundle to exceed the
|
|
151
|
+
AWS 10MB deployment limit.
|
|
152
|
+
|
|
153
|
+
Action required: Reduce the size of public/index.html.
|
|
154
|
+
|
|
155
|
+
${"=".repeat(80)}
|
|
156
|
+
`);let r=re.default.join(__dirname,"../../out/dist/lambda/bundle.js");if(L.default.existsSync(r)){let o=L.default.statSync(r).size,i=(o/(1024*1024)).toFixed(2);console.log(` Lambda bundle size: ${i} MB (existing bundle)`),o>Ae?(console.warn(`
|
|
157
|
+
`+"=".repeat(80)),console.warn("WARNING: Existing Lambda bundle exceeds AWS limit"),console.warn("=".repeat(80)),console.warn(`
|
|
158
|
+
Bundle: ${r}`),console.warn(`Size: ${i} MB`),console.warn(`AWS Lambda limit: ${(Ae/(1024*1024)).toFixed(2)} MB`),console.warn(`
|
|
159
|
+
Note: This is the existing bundle before template embedding.`),console.warn("The bundle will be rebuilt with the new template."),console.warn(`
|
|
160
|
+
If the bundle size issue persists after rebuild:`),console.warn(" 1. Externalize large dependencies in esbuild config"),console.warn(" 2. Use Lambda layers for large dependencies"),console.warn(" 3. Reduce the size of public/index.html if needed"),console.warn(`
|
|
161
|
+
`+"=".repeat(80)+`
|
|
162
|
+
`)):o>8388608&&(console.warn(`
|
|
163
|
+
`+"=".repeat(80)),console.warn("WARNING: Lambda bundle approaching size limit"),console.warn("=".repeat(80)),console.warn(`
|
|
164
|
+
Bundle size: ${i} MB`),console.warn(`AWS limit: ${(Ae/(1024*1024)).toFixed(2)} MB`),console.warn(`
|
|
165
|
+
Consider optimizing the bundle to avoid deployment failures.`),console.warn(`
|
|
166
|
+
`+"=".repeat(80)+`
|
|
167
|
+
`))}}function er(){let t=Jn(),e=`/*
|
|
168
|
+
* Elastic License 2.0
|
|
169
|
+
* Copyright (C) 2025\u2013present Raman Marozau, Work Target Insight Function. All rights reserved.
|
|
170
|
+
* Contact: raman@worktif.com
|
|
171
|
+
*
|
|
172
|
+
* This file is part of the Licensed Work: worktif.purenow.cdk <worktif_purenow_cdk>.
|
|
173
|
+
* Use of this software is governed by the Elastic License 2.0; see the LICENSE file
|
|
174
|
+
* or https://www.elastic.co/licensing/elastic-license for details.
|
|
175
|
+
*
|
|
176
|
+
* Re-licensing notice:
|
|
177
|
+
* This file was previously distributed under the Business Source License 1.1 (BUSL-1.1).
|
|
178
|
+
* As of 2025-09-22, it is re-licensed under Elastic License 2.0.
|
|
179
|
+
*
|
|
180
|
+
* SPDX-License-Identifier: Elastic-2.0
|
|
181
|
+
*/
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Embedded HTML template from public/index.html.
|
|
185
|
+
*
|
|
186
|
+
* This file is auto-generated at build time by bin/deploy/generate-html-template.js.
|
|
187
|
+
* DO NOT EDIT THIS FILE MANUALLY - changes will be overwritten on next build.
|
|
188
|
+
*
|
|
189
|
+
* To modify the HTML template, edit public/index.html in your project root.
|
|
190
|
+
*/
|
|
191
|
+
|
|
192
|
+
export const HTML_TEMPLATE = ${JSON.stringify(t)};
|
|
193
|
+
`,n=re.default.join(__dirname,"../../src/core/services/template/html-template.embedded.ts"),r=re.default.dirname(n);L.default.existsSync(r)||L.default.mkdirSync(r,{recursive:!0}),L.default.writeFileSync(n,e,"utf-8");let o=(t.length/1024).toFixed(2);Kn(n)}function Cr(t=!1){try{er(),t&&process.exit(0)}catch(e){console.error(`
|
|
194
|
+
`+"=".repeat(80)),console.error("BUILD FAILED: HTML Template Generation Error"),console.error("=".repeat(80)),console.error(`
|
|
195
|
+
`+e.message),e.stack&&process.env.DEBUG&&(console.error(`
|
|
196
|
+
Stack trace:`),console.error(e.stack)),t&&process.exit(1)}}var U=class extends Error{constructor(n,r,o){super(n);this.code=r;this.hint=o;this.name="RuntimeCliError",Error.captureStackTrace(this,this.constructor)}},Ft=class extends U{constructor(e,n){super(e,"RUNTIME_CONFIG_ERROR",n),this.name="RuntimeConfigError"}},Lt=class extends U{constructor(e,n){super(e,"RUNTIME_BUILD_ERROR",n),this.name="RuntimeBuildError"}},Nt=class extends U{constructor(e,n){super(e,"RUNTIME_DEPLOYMENT_ERROR",n),this.name="RuntimeDeploymentError"}},zt=class extends U{constructor(e,n){super(e,"RUNTIME_VALIDATION_ERROR",n),this.name="RuntimeValidationError"}},be=class{formatError(e,n=!1){let r=[];return r.push(`Error: ${e.name||"RuntimeError"}`),r.push(""),r.push(`Message: ${e.message}`),r.push(""),e instanceof U&&e.hint&&(r.push(`Hint: ${e.hint}`),r.push("")),n&&e.stack&&(r.push("--- Stack Trace (--verbose) ---"),r.push(e.stack),r.push("")),r.join(`
|
|
197
|
+
`)}formatValidationError(e,n,r=!1){let o=[];return o.push("Validation Error"),o.push(""),o.push(`Field: ${e}`),o.push(`Issue: ${n}`),o.push(""),r&&(o.push("--- Technical Details (--verbose) ---"),o.push(`Field validation failed for: ${e}`),o.push(`Validation message: ${n}`),o.push("")),o.join(`
|
|
198
|
+
`)}formatDeploymentError(e,n,r,o=!1){let i=[];return i.push("Deployment Error"),i.push(""),i.push(`Stack: ${e}`),i.push(`Operation: ${n}`),i.push(`Issue: ${r}`),i.push(""),i.push("Troubleshooting:"),i.push("1. Check AWS credentials and permissions"),i.push("2. Verify stack configuration"),i.push("3. Review CloudFormation events in AWS Console"),i.push(""),o&&(i.push("--- Technical Details (--verbose) ---"),i.push(`Stack name: ${e}`),i.push(`Failed operation: ${n}`),i.push(`Error details: ${r}`),i.push("")),i.join(`
|
|
199
|
+
`)}},Gt=class{constructor(e=!1){this.verbose=e}info(e,n){let r={level:"info",message:e,timestamp:new Date().toISOString(),...n};this.verbose?console.log(JSON.stringify(r,null,2)):console.log(e)}warn(e,n){let r={level:"warn",message:e,timestamp:new Date().toISOString(),...n};this.verbose?console.warn(JSON.stringify(r,null,2)):console.warn(`Warning: ${e}`)}error(e,n){let r={level:"error",message:e,timestamp:new Date().toISOString(),...n};this.verbose?console.error(JSON.stringify(r,null,2)):console.error(`Error: ${e}`)}debug(e,n){if(!this.verbose)return;let r={level:"debug",message:e,timestamp:new Date().toISOString(),...n};console.debug(JSON.stringify(r,null,2))}};var Nr=N(je()),oe=N(require("process")),se=require("@worktif/purenow/bin"),ie=class t extends se.PurenowCli{static{this.defaultToolName="runtime"}constructor(){super(void 0,{toolName:se.PurenowCli.defaultToolName,title:"Runtime target framework for AWS Lambda",description:"Runtime target framework for AWS Lambda",fallbackVersion:"0.2.135"}),this.commands=(0,se.purenowCommandConfig)(t.defaultToolName)}async createContext(e,n=oe.default.cwd()){let r=await super.createContext(e,n),o=new ge(n);return{...r,stacksDeployService:o}}async run(e){await this.program.parseAsync(e||oe.default.argv)}static handleError(e){let n=new be;if(e instanceof Error){let r=n.formatError(e,!!oe.default.env.DEBUG);console.error(r)}else console.error("Unknown error:",String(e));oe.default.exit(1)}};function Ut(){return new ie}var A=N(require("process")),ae=Dt();async function Wt(){try{await Ut().run()}catch(t){ie.handleError(t)}}function Yr(t){t instanceof Error?(console.error(ae.red("\u2717"),"Error:",t.message),A.default.env.DEBUG&&console.error(t.stack)):console.error(ae.red("\u2717"),"Unknown error:",String(t)),A.default.exit(1)}function tr(){A.default.on("uncaughtException",t=>{console.error(ae.red("\u2717"),"Uncaught exception:",t.message),A.default.env.DEBUG&&console.error(t.stack),A.default.exit(1)}),A.default.on("unhandledRejection",t=>{console.error(ae.red("\u2717"),"Unhandled rejection:",t),A.default.env.DEBUG&&t instanceof Error&&console.error(t.stack),A.default.exit(1)})}tr(),Wt().catch(t=>{console.error(ae.red("\u2717"),"Fatal error:",t.message),A.default.env.DEBUG&&console.error(t.stack),A.default.exit(1)});0&&(module.exports={main});
|
|
200
|
+
/*! Bundled license information:
|
|
201
|
+
|
|
202
|
+
reflect-metadata/Reflect.js:
|
|
203
|
+
(*! *****************************************************************************
|
|
204
|
+
Copyright (C) Microsoft. All rights reserved.
|
|
205
|
+
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
|
206
|
+
this file except in compliance with the License. You may obtain a copy of the
|
|
207
|
+
License at http://www.apache.org/licenses/LICENSE-2.0
|
|
208
|
+
|
|
209
|
+
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
210
|
+
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
|
|
211
|
+
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
|
|
212
|
+
MERCHANTABLITY OR NON-INFRINGEMENT.
|
|
213
|
+
|
|
214
|
+
See the Apache Version 2.0 License for specific language governing permissions
|
|
215
|
+
and limitations under the License.
|
|
216
|
+
***************************************************************************** *)
|
|
217
|
+
*/
|
|
218
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLW5hbWUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvY29udmVyc2lvbnMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvcm91dGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9oYXMtZmxhZy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3VwcG9ydHMtY29sb3IvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NoYWxrL3NvdXJjZS91dGlsLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvdGVtcGxhdGVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlZmxlY3QtbWV0YWRhdGEvUmVmbGVjdC5qcyIsICIuLi8uLi8uLi9zcmMvYmluL2luZGV4LnVuaXgudHMiLCAiLi4vLi4vLi4vc3JjL2Jpbi9zZXJ2aWNlcy90ZW1wbGF0ZS5zZXJ2aWNlLnRzIiwgIi4uLy4uLy4uL3NyYy9iaW4vc2VydmljZXMvcHVyZW5vdy1ydW50aW1lLXN0YWNrcy1kZXBsb3kuc2VydmljZS50cyIsICIuLi8uLi8uLi9zcmMvYmluL3NlcnZpY2VzL3B1cmVub3ctcnVudGltZS1zdGFja3MtZGVwbG95LnNlcnZpY2UudHlwZXMudHMiLCAiLi4vLi4vLi4vc3JjL2Jpbi9zZXJ2aWNlcy91dGlscy9pbmRleC50cyIsICIuLi8uLi8uLi9zcmMvYmluL3V0aWxzL2Vycm9ycy50cyIsICIuLi8uLi8uLi9zcmMvYmluL3B1cmVub3ctcnVudGltZS1jbGkudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIid1c2Ugc3RyaWN0J1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblx0XCJhbGljZWJsdWVcIjogWzI0MCwgMjQ4LCAyNTVdLFxyXG5cdFwiYW50aXF1ZXdoaXRlXCI6IFsyNTAsIDIzNSwgMjE1XSxcclxuXHRcImFxdWFcIjogWzAsIDI1NSwgMjU1XSxcclxuXHRcImFxdWFtYXJpbmVcIjogWzEyNywgMjU1LCAyMTJdLFxyXG5cdFwiYXp1cmVcIjogWzI0MCwgMjU1LCAyNTVdLFxyXG5cdFwiYmVpZ2VcIjogWzI0NSwgMjQ1LCAyMjBdLFxyXG5cdFwiYmlzcXVlXCI6IFsyNTUsIDIyOCwgMTk2XSxcclxuXHRcImJsYWNrXCI6IFswLCAwLCAwXSxcclxuXHRcImJsYW5jaGVkYWxtb25kXCI6IFsyNTUsIDIzNSwgMjA1XSxcclxuXHRcImJsdWVcIjogWzAsIDAsIDI1NV0sXHJcblx0XCJibHVldmlvbGV0XCI6IFsxMzgsIDQzLCAyMjZdLFxyXG5cdFwiYnJvd25cIjogWzE2NSwgNDIsIDQyXSxcclxuXHRcImJ1cmx5d29vZFwiOiBbMjIyLCAxODQsIDEzNV0sXHJcblx0XCJjYWRldGJsdWVcIjogWzk1LCAxNTgsIDE2MF0sXHJcblx0XCJjaGFydHJldXNlXCI6IFsxMjcsIDI1NSwgMF0sXHJcblx0XCJjaG9jb2xhdGVcIjogWzIxMCwgMTA1LCAzMF0sXHJcblx0XCJjb3JhbFwiOiBbMjU1LCAxMjcsIDgwXSxcclxuXHRcImNvcm5mbG93ZXJibHVlXCI6IFsxMDAsIDE0OSwgMjM3XSxcclxuXHRcImNvcm5zaWxrXCI6IFsyNTUsIDI0OCwgMjIwXSxcclxuXHRcImNyaW1zb25cIjogWzIyMCwgMjAsIDYwXSxcclxuXHRcImN5YW5cIjogWzAsIDI1NSwgMjU1XSxcclxuXHRcImRhcmtibHVlXCI6IFswLCAwLCAxMzldLFxyXG5cdFwiZGFya2N5YW5cIjogWzAsIDEzOSwgMTM5XSxcclxuXHRcImRhcmtnb2xkZW5yb2RcIjogWzE4NCwgMTM0LCAxMV0sXHJcblx0XCJkYXJrZ3JheVwiOiBbMTY5LCAxNjksIDE2OV0sXHJcblx0XCJkYXJrZ3JlZW5cIjogWzAsIDEwMCwgMF0sXHJcblx0XCJkYXJrZ3JleVwiOiBbMTY5LCAxNjksIDE2OV0sXHJcblx0XCJkYXJra2hha2lcIjogWzE4OSwgMTgzLCAxMDddLFxyXG5cdFwiZGFya21hZ2VudGFcIjogWzEzOSwgMCwgMTM5XSxcclxuXHRcImRhcmtvbGl2ZWdyZWVuXCI6IFs4NSwgMTA3LCA0N10sXHJcblx0XCJkYXJrb3JhbmdlXCI6IFsyNTUsIDE0MCwgMF0sXHJcblx0XCJkYXJrb3JjaGlkXCI6IFsxNTMsIDUwLCAyMDRdLFxyXG5cdFwiZGFya3JlZFwiOiBbMTM5LCAwLCAwXSxcclxuXHRcImRhcmtzYWxtb25cIjogWzIzMywgMTUwLCAxMjJdLFxyXG5cdFwiZGFya3NlYWdyZWVuXCI6IFsxNDMsIDE4OCwgMTQzXSxcclxuXHRcImRhcmtzbGF0ZWJsdWVcIjogWzcyLCA2MSwgMTM5XSxcclxuXHRcImRhcmtzbGF0ZWdyYXlcIjogWzQ3LCA3OSwgNzldLFxyXG5cdFwiZGFya3NsYXRlZ3JleVwiOiBbNDcsIDc5LCA3OV0sXHJcblx0XCJkYXJrdHVycXVvaXNlXCI6IFswLCAyMDYsIDIwOV0sXHJcblx0XCJkYXJrdmlvbGV0XCI6IFsxNDgsIDAsIDIxMV0sXHJcblx0XCJkZWVwcGlua1wiOiBbMjU1LCAyMCwgMTQ3XSxcclxuXHRcImRlZXBza3libHVlXCI6IFswLCAxOTEsIDI1NV0sXHJcblx0XCJkaW1ncmF5XCI6IFsxMDUsIDEwNSwgMTA1XSxcclxuXHRcImRpbWdyZXlcIjogWzEwNSwgMTA1LCAxMDVdLFxyXG5cdFwiZG9kZ2VyYmx1ZVwiOiBbMzAsIDE0NCwgMjU1XSxcclxuXHRcImZpcmVicmlja1wiOiBbMTc4LCAzNCwgMzRdLFxyXG5cdFwiZmxvcmFsd2hpdGVcIjogWzI1NSwgMjUwLCAyNDBdLFxyXG5cdFwiZm9yZXN0Z3JlZW5cIjogWzM0LCAxMzksIDM0XSxcclxuXHRcImZ1Y2hzaWFcIjogWzI1NSwgMCwgMjU1XSxcclxuXHRcImdhaW5zYm9yb1wiOiBbMjIwLCAyMjAsIDIyMF0sXHJcblx0XCJnaG9zdHdoaXRlXCI6IFsyNDgsIDI0OCwgMjU1XSxcclxuXHRcImdvbGRcIjogWzI1NSwgMjE1LCAwXSxcclxuXHRcImdvbGRlbnJvZFwiOiBbMjE4LCAxNjUsIDMyXSxcclxuXHRcImdyYXlcIjogWzEyOCwgMTI4LCAxMjhdLFxyXG5cdFwiZ3JlZW5cIjogWzAsIDEyOCwgMF0sXHJcblx0XCJncmVlbnllbGxvd1wiOiBbMTczLCAyNTUsIDQ3XSxcclxuXHRcImdyZXlcIjogWzEyOCwgMTI4LCAxMjhdLFxyXG5cdFwiaG9uZXlkZXdcIjogWzI0MCwgMjU1LCAyNDBdLFxyXG5cdFwiaG90cGlua1wiOiBbMjU1LCAxMDUsIDE4MF0sXHJcblx0XCJpbmRpYW5yZWRcIjogWzIwNSwgOTIsIDkyXSxcclxuXHRcImluZGlnb1wiOiBbNzUsIDAsIDEzMF0sXHJcblx0XCJpdm9yeVwiOiBbMjU1LCAyNTUsIDI0MF0sXHJcblx0XCJraGFraVwiOiBbMjQwLCAyMzAsIDE0MF0sXHJcblx0XCJsYXZlbmRlclwiOiBbMjMwLCAyMzAsIDI1MF0sXHJcblx0XCJsYXZlbmRlcmJsdXNoXCI6IFsyNTUsIDI0MCwgMjQ1XSxcclxuXHRcImxhd25ncmVlblwiOiBbMTI0LCAyNTIsIDBdLFxyXG5cdFwibGVtb25jaGlmZm9uXCI6IFsyNTUsIDI1MCwgMjA1XSxcclxuXHRcImxpZ2h0Ymx1ZVwiOiBbMTczLCAyMTYsIDIzMF0sXHJcblx0XCJsaWdodGNvcmFsXCI6IFsyNDAsIDEyOCwgMTI4XSxcclxuXHRcImxpZ2h0Y3lhblwiOiBbMjI0LCAyNTUsIDI1NV0sXHJcblx0XCJsaWdodGdvbGRlbnJvZHllbGxvd1wiOiBbMjUwLCAyNTAsIDIxMF0sXHJcblx0XCJsaWdodGdyYXlcIjogWzIxMSwgMjExLCAyMTFdLFxyXG5cdFwibGlnaHRncmVlblwiOiBbMTQ0LCAyMzgsIDE0NF0sXHJcblx0XCJsaWdodGdyZXlcIjogWzIxMSwgMjExLCAyMTFdLFxyXG5cdFwibGlnaHRwaW5rXCI6IFsyNTUsIDE4MiwgMTkzXSxcclxuXHRcImxpZ2h0c2FsbW9uXCI6IFsyNTUsIDE2MCwgMTIyXSxcclxuXHRcImxpZ2h0c2VhZ3JlZW5cIjogWzMyLCAxNzgsIDE3MF0sXHJcblx0XCJsaWdodHNreWJsdWVcIjogWzEzNSwgMjA2LCAyNTBdLFxyXG5cdFwibGlnaHRzbGF0ZWdyYXlcIjogWzExOSwgMTM2LCAxNTNdLFxyXG5cdFwibGlnaHRzbGF0ZWdyZXlcIjogWzExOSwgMTM2LCAxNTNdLFxyXG5cdFwibGlnaHRzdGVlbGJsdWVcIjogWzE3NiwgMTk2LCAyMjJdLFxyXG5cdFwibGlnaHR5ZWxsb3dcIjogWzI1NSwgMjU1LCAyMjRdLFxyXG5cdFwibGltZVwiOiBbMCwgMjU1LCAwXSxcclxuXHRcImxpbWVncmVlblwiOiBbNTAsIDIwNSwgNTBdLFxyXG5cdFwibGluZW5cIjogWzI1MCwgMjQwLCAyMzBdLFxyXG5cdFwibWFnZW50YVwiOiBbMjU1LCAwLCAyNTVdLFxyXG5cdFwibWFyb29uXCI6IFsxMjgsIDAsIDBdLFxyXG5cdFwibWVkaXVtYXF1YW1hcmluZVwiOiBbMTAyLCAyMDUsIDE3MF0sXHJcblx0XCJtZWRpdW1ibHVlXCI6IFswLCAwLCAyMDVdLFxyXG5cdFwibWVkaXVtb3JjaGlkXCI6IFsxODYsIDg1LCAyMTFdLFxyXG5cdFwibWVkaXVtcHVycGxlXCI6IFsxNDcsIDExMiwgMjE5XSxcclxuXHRcIm1lZGl1bXNlYWdyZWVuXCI6IFs2MCwgMTc5LCAxMTNdLFxyXG5cdFwibWVkaXVtc2xhdGVibHVlXCI6IFsxMjMsIDEwNCwgMjM4XSxcclxuXHRcIm1lZGl1bXNwcmluZ2dyZWVuXCI6IFswLCAyNTAsIDE1NF0sXHJcblx0XCJtZWRpdW10dXJxdW9pc2VcIjogWzcyLCAyMDksIDIwNF0sXHJcblx0XCJtZWRpdW12aW9sZXRyZWRcIjogWzE5OSwgMjEsIDEzM10sXHJcblx0XCJtaWRuaWdodGJsdWVcIjogWzI1LCAyNSwgMTEyXSxcclxuXHRcIm1pbnRjcmVhbVwiOiBbMjQ1LCAyNTUsIDI1MF0sXHJcblx0XCJtaXN0eXJvc2VcIjogWzI1NSwgMjI4LCAyMjVdLFxyXG5cdFwibW9jY2FzaW5cIjogWzI1NSwgMjI4LCAxODFdLFxyXG5cdFwibmF2YWpvd2hpdGVcIjogWzI1NSwgMjIyLCAxNzNdLFxyXG5cdFwibmF2eVwiOiBbMCwgMCwgMTI4XSxcclxuXHRcIm9sZGxhY2VcIjogWzI1MywgMjQ1LCAyMzBdLFxyXG5cdFwib2xpdmVcIjogWzEyOCwgMTI4LCAwXSxcclxuXHRcIm9saXZlZHJhYlwiOiBbMTA3LCAxNDIsIDM1XSxcclxuXHRcIm9yYW5nZVwiOiBbMjU1LCAxNjUsIDBdLFxyXG5cdFwib3JhbmdlcmVkXCI6IFsyNTUsIDY5LCAwXSxcclxuXHRcIm9yY2hpZFwiOiBbMjE4LCAxMTIsIDIxNF0sXHJcblx0XCJwYWxlZ29sZGVucm9kXCI6IFsyMzgsIDIzMiwgMTcwXSxcclxuXHRcInBhbGVncmVlblwiOiBbMTUyLCAyNTEsIDE1Ml0sXHJcblx0XCJwYWxldHVycXVvaXNlXCI6IFsxNzUsIDIzOCwgMjM4XSxcclxuXHRcInBhbGV2aW9sZXRyZWRcIjogWzIxOSwgMTEyLCAxNDddLFxyXG5cdFwicGFwYXlhd2hpcFwiOiBbMjU1LCAyMzksIDIxM10sXHJcblx0XCJwZWFjaHB1ZmZcIjogWzI1NSwgMjE4LCAxODVdLFxyXG5cdFwicGVydVwiOiBbMjA1LCAxMzMsIDYzXSxcclxuXHRcInBpbmtcIjogWzI1NSwgMTkyLCAyMDNdLFxyXG5cdFwicGx1bVwiOiBbMjIxLCAxNjAsIDIyMV0sXHJcblx0XCJwb3dkZXJibHVlXCI6IFsxNzYsIDIyNCwgMjMwXSxcclxuXHRcInB1cnBsZVwiOiBbMTI4LCAwLCAxMjhdLFxyXG5cdFwicmViZWNjYXB1cnBsZVwiOiBbMTAyLCA1MSwgMTUzXSxcclxuXHRcInJlZFwiOiBbMjU1LCAwLCAwXSxcclxuXHRcInJvc3licm93blwiOiBbMTg4LCAxNDMsIDE0M10sXHJcblx0XCJyb3lhbGJsdWVcIjogWzY1LCAxMDUsIDIyNV0sXHJcblx0XCJzYWRkbGVicm93blwiOiBbMTM5LCA2OSwgMTldLFxyXG5cdFwic2FsbW9uXCI6IFsyNTAsIDEyOCwgMTE0XSxcclxuXHRcInNhbmR5YnJvd25cIjogWzI0NCwgMTY0LCA5Nl0sXHJcblx0XCJzZWFncmVlblwiOiBbNDYsIDEzOSwgODddLFxyXG5cdFwic2Vhc2hlbGxcIjogWzI1NSwgMjQ1LCAyMzhdLFxyXG5cdFwic2llbm5hXCI6IFsxNjAsIDgyLCA0NV0sXHJcblx0XCJzaWx2ZXJcIjogWzE5MiwgMTkyLCAxOTJdLFxyXG5cdFwic2t5Ymx1ZVwiOiBbMTM1LCAyMDYsIDIzNV0sXHJcblx0XCJzbGF0ZWJsdWVcIjogWzEwNiwgOTAsIDIwNV0sXHJcblx0XCJzbGF0ZWdyYXlcIjogWzExMiwgMTI4LCAxNDRdLFxyXG5cdFwic2xhdGVncmV5XCI6IFsxMTIsIDEyOCwgMTQ0XSxcclxuXHRcInNub3dcIjogWzI1NSwgMjUwLCAyNTBdLFxyXG5cdFwic3ByaW5nZ3JlZW5cIjogWzAsIDI1NSwgMTI3XSxcclxuXHRcInN0ZWVsYmx1ZVwiOiBbNzAsIDEzMCwgMTgwXSxcclxuXHRcInRhblwiOiBbMjEwLCAxODAsIDE0MF0sXHJcblx0XCJ0ZWFsXCI6IFswLCAxMjgsIDEyOF0sXHJcblx0XCJ0aGlzdGxlXCI6IFsyMTYsIDE5MSwgMjE2XSxcclxuXHRcInRvbWF0b1wiOiBbMjU1LCA5OSwgNzFdLFxyXG5cdFwidHVycXVvaXNlXCI6IFs2NCwgMjI0LCAyMDhdLFxyXG5cdFwidmlvbGV0XCI6IFsyMzgsIDEzMCwgMjM4XSxcclxuXHRcIndoZWF0XCI6IFsyNDUsIDIyMiwgMTc5XSxcclxuXHRcIndoaXRlXCI6IFsyNTUsIDI1NSwgMjU1XSxcclxuXHRcIndoaXRlc21va2VcIjogWzI0NSwgMjQ1LCAyNDVdLFxyXG5cdFwieWVsbG93XCI6IFsyNTUsIDI1NSwgMF0sXHJcblx0XCJ5ZWxsb3dncmVlblwiOiBbMTU0LCAyMDUsIDUwXVxyXG59O1xyXG4iLCAiLyogTUlUIGxpY2Vuc2UgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW1peGVkLW9wZXJhdG9ycyAqL1xuY29uc3QgY3NzS2V5d29yZHMgPSByZXF1aXJlKCdjb2xvci1uYW1lJyk7XG5cbi8vIE5PVEU6IGNvbnZlcnNpb25zIHNob3VsZCBvbmx5IHJldHVybiBwcmltaXRpdmUgdmFsdWVzIChpLmUuIGFycmF5cywgb3Jcbi8vICAgICAgIHZhbHVlcyB0aGF0IGdpdmUgY29ycmVjdCBgdHlwZW9mYCByZXN1bHRzKS5cbi8vICAgICAgIGRvIG5vdCB1c2UgYm94IHZhbHVlcyB0eXBlcyAoaS5lLiBOdW1iZXIoKSwgU3RyaW5nKCksIGV0Yy4pXG5cbmNvbnN0IHJldmVyc2VLZXl3b3JkcyA9IHt9O1xuZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY3NzS2V5d29yZHMpKSB7XG5cdHJldmVyc2VLZXl3b3Jkc1tjc3NLZXl3b3Jkc1trZXldXSA9IGtleTtcbn1cblxuY29uc3QgY29udmVydCA9IHtcblx0cmdiOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ3JnYid9LFxuXHRoc2w6IHtjaGFubmVsczogMywgbGFiZWxzOiAnaHNsJ30sXG5cdGhzdjoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdoc3YnfSxcblx0aHdiOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ2h3Yid9LFxuXHRjbXlrOiB7Y2hhbm5lbHM6IDQsIGxhYmVsczogJ2NteWsnfSxcblx0eHl6OiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ3h5eid9LFxuXHRsYWI6IHtjaGFubmVsczogMywgbGFiZWxzOiAnbGFiJ30sXG5cdGxjaDoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdsY2gnfSxcblx0aGV4OiB7Y2hhbm5lbHM6IDEsIGxhYmVsczogWydoZXgnXX0sXG5cdGtleXdvcmQ6IHtjaGFubmVsczogMSwgbGFiZWxzOiBbJ2tleXdvcmQnXX0sXG5cdGFuc2kxNjoge2NoYW5uZWxzOiAxLCBsYWJlbHM6IFsnYW5zaTE2J119LFxuXHRhbnNpMjU2OiB7Y2hhbm5lbHM6IDEsIGxhYmVsczogWydhbnNpMjU2J119LFxuXHRoY2c6IHtjaGFubmVsczogMywgbGFiZWxzOiBbJ2gnLCAnYycsICdnJ119LFxuXHRhcHBsZToge2NoYW5uZWxzOiAzLCBsYWJlbHM6IFsncjE2JywgJ2cxNicsICdiMTYnXX0sXG5cdGdyYXk6IHtjaGFubmVsczogMSwgbGFiZWxzOiBbJ2dyYXknXX1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29udmVydDtcblxuLy8gSGlkZSAuY2hhbm5lbHMgYW5kIC5sYWJlbHMgcHJvcGVydGllc1xuZm9yIChjb25zdCBtb2RlbCBvZiBPYmplY3Qua2V5cyhjb252ZXJ0KSkge1xuXHRpZiAoISgnY2hhbm5lbHMnIGluIGNvbnZlcnRbbW9kZWxdKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignbWlzc2luZyBjaGFubmVscyBwcm9wZXJ0eTogJyArIG1vZGVsKTtcblx0fVxuXG5cdGlmICghKCdsYWJlbHMnIGluIGNvbnZlcnRbbW9kZWxdKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignbWlzc2luZyBjaGFubmVsIGxhYmVscyBwcm9wZXJ0eTogJyArIG1vZGVsKTtcblx0fVxuXG5cdGlmIChjb252ZXJ0W21vZGVsXS5sYWJlbHMubGVuZ3RoICE9PSBjb252ZXJ0W21vZGVsXS5jaGFubmVscykge1xuXHRcdHRocm93IG5ldyBFcnJvcignY2hhbm5lbCBhbmQgbGFiZWwgY291bnRzIG1pc21hdGNoOiAnICsgbW9kZWwpO1xuXHR9XG5cblx0Y29uc3Qge2NoYW5uZWxzLCBsYWJlbHN9ID0gY29udmVydFttb2RlbF07XG5cdGRlbGV0ZSBjb252ZXJ0W21vZGVsXS5jaGFubmVscztcblx0ZGVsZXRlIGNvbnZlcnRbbW9kZWxdLmxhYmVscztcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnZlcnRbbW9kZWxdLCAnY2hhbm5lbHMnLCB7dmFsdWU6IGNoYW5uZWxzfSk7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb252ZXJ0W21vZGVsXSwgJ2xhYmVscycsIHt2YWx1ZTogbGFiZWxzfSk7XG59XG5cbmNvbnZlcnQucmdiLmhzbCA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgciA9IHJnYlswXSAvIDI1NTtcblx0Y29uc3QgZyA9IHJnYlsxXSAvIDI1NTtcblx0Y29uc3QgYiA9IHJnYlsyXSAvIDI1NTtcblx0Y29uc3QgbWluID0gTWF0aC5taW4ociwgZywgYik7XG5cdGNvbnN0IG1heCA9IE1hdGgubWF4KHIsIGcsIGIpO1xuXHRjb25zdCBkZWx0YSA9IG1heCAtIG1pbjtcblx0bGV0IGg7XG5cdGxldCBzO1xuXG5cdGlmIChtYXggPT09IG1pbikge1xuXHRcdGggPSAwO1xuXHR9IGVsc2UgaWYgKHIgPT09IG1heCkge1xuXHRcdGggPSAoZyAtIGIpIC8gZGVsdGE7XG5cdH0gZWxzZSBpZiAoZyA9PT0gbWF4KSB7XG5cdFx0aCA9IDIgKyAoYiAtIHIpIC8gZGVsdGE7XG5cdH0gZWxzZSBpZiAoYiA9PT0gbWF4KSB7XG5cdFx0aCA9IDQgKyAociAtIGcpIC8gZGVsdGE7XG5cdH1cblxuXHRoID0gTWF0aC5taW4oaCAqIDYwLCAzNjApO1xuXG5cdGlmIChoIDwgMCkge1xuXHRcdGggKz0gMzYwO1xuXHR9XG5cblx0Y29uc3QgbCA9IChtaW4gKyBtYXgpIC8gMjtcblxuXHRpZiAobWF4ID09PSBtaW4pIHtcblx0XHRzID0gMDtcblx0fSBlbHNlIGlmIChsIDw9IDAuNSkge1xuXHRcdHMgPSBkZWx0YSAvIChtYXggKyBtaW4pO1xuXHR9IGVsc2Uge1xuXHRcdHMgPSBkZWx0YSAvICgyIC0gbWF4IC0gbWluKTtcblx0fVxuXG5cdHJldHVybiBbaCwgcyAqIDEwMCwgbCAqIDEwMF07XG59O1xuXG5jb252ZXJ0LnJnYi5oc3YgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGxldCByZGlmO1xuXHRsZXQgZ2RpZjtcblx0bGV0IGJkaWY7XG5cdGxldCBoO1xuXHRsZXQgcztcblxuXHRjb25zdCByID0gcmdiWzBdIC8gMjU1O1xuXHRjb25zdCBnID0gcmdiWzFdIC8gMjU1O1xuXHRjb25zdCBiID0gcmdiWzJdIC8gMjU1O1xuXHRjb25zdCB2ID0gTWF0aC5tYXgociwgZywgYik7XG5cdGNvbnN0IGRpZmYgPSB2IC0gTWF0aC5taW4ociwgZywgYik7XG5cdGNvbnN0IGRpZmZjID0gZnVuY3Rpb24gKGMpIHtcblx0XHRyZXR1cm4gKHYgLSBjKSAvIDYgLyBkaWZmICsgMSAvIDI7XG5cdH07XG5cblx0aWYgKGRpZmYgPT09IDApIHtcblx0XHRoID0gMDtcblx0XHRzID0gMDtcblx0fSBlbHNlIHtcblx0XHRzID0gZGlmZiAvIHY7XG5cdFx0cmRpZiA9IGRpZmZjKHIpO1xuXHRcdGdkaWYgPSBkaWZmYyhnKTtcblx0XHRiZGlmID0gZGlmZmMoYik7XG5cblx0XHRpZiAociA9PT0gdikge1xuXHRcdFx0aCA9IGJkaWYgLSBnZGlmO1xuXHRcdH0gZWxzZSBpZiAoZyA9PT0gdikge1xuXHRcdFx0aCA9ICgxIC8gMykgKyByZGlmIC0gYmRpZjtcblx0XHR9IGVsc2UgaWYgKGIgPT09IHYpIHtcblx0XHRcdGggPSAoMiAvIDMpICsgZ2RpZiAtIHJkaWY7XG5cdFx0fVxuXG5cdFx0aWYgKGggPCAwKSB7XG5cdFx0XHRoICs9IDE7XG5cdFx0fSBlbHNlIGlmIChoID4gMSkge1xuXHRcdFx0aCAtPSAxO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBbXG5cdFx0aCAqIDM2MCxcblx0XHRzICogMTAwLFxuXHRcdHYgKiAxMDBcblx0XTtcbn07XG5cbmNvbnZlcnQucmdiLmh3YiA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgciA9IHJnYlswXTtcblx0Y29uc3QgZyA9IHJnYlsxXTtcblx0bGV0IGIgPSByZ2JbMl07XG5cdGNvbnN0IGggPSBjb252ZXJ0LnJnYi5oc2wocmdiKVswXTtcblx0Y29uc3QgdyA9IDEgLyAyNTUgKiBNYXRoLm1pbihyLCBNYXRoLm1pbihnLCBiKSk7XG5cblx0YiA9IDEgLSAxIC8gMjU1ICogTWF0aC5tYXgociwgTWF0aC5tYXgoZywgYikpO1xuXG5cdHJldHVybiBbaCwgdyAqIDEwMCwgYiAqIDEwMF07XG59O1xuXG5jb252ZXJ0LnJnYi5jbXlrID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCByID0gcmdiWzBdIC8gMjU1O1xuXHRjb25zdCBnID0gcmdiWzFdIC8gMjU1O1xuXHRjb25zdCBiID0gcmdiWzJdIC8gMjU1O1xuXG5cdGNvbnN0IGsgPSBNYXRoLm1pbigxIC0gciwgMSAtIGcsIDEgLSBiKTtcblx0Y29uc3QgYyA9ICgxIC0gciAtIGspIC8gKDEgLSBrKSB8fCAwO1xuXHRjb25zdCBtID0gKDEgLSBnIC0gaykgLyAoMSAtIGspIHx8IDA7XG5cdGNvbnN0IHkgPSAoMSAtIGIgLSBrKSAvICgxIC0gaykgfHwgMDtcblxuXHRyZXR1cm4gW2MgKiAxMDAsIG0gKiAxMDAsIHkgKiAxMDAsIGsgKiAxMDBdO1xufTtcblxuZnVuY3Rpb24gY29tcGFyYXRpdmVEaXN0YW5jZSh4LCB5KSB7XG5cdC8qXG5cdFx0U2VlIGh0dHBzOi8vZW4ubS53aWtpcGVkaWEub3JnL3dpa2kvRXVjbGlkZWFuX2Rpc3RhbmNlI1NxdWFyZWRfRXVjbGlkZWFuX2Rpc3RhbmNlXG5cdCovXG5cdHJldHVybiAoXG5cdFx0KCh4WzBdIC0geVswXSkgKiogMikgK1xuXHRcdCgoeFsxXSAtIHlbMV0pICoqIDIpICtcblx0XHQoKHhbMl0gLSB5WzJdKSAqKiAyKVxuXHQpO1xufVxuXG5jb252ZXJ0LnJnYi5rZXl3b3JkID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCByZXZlcnNlZCA9IHJldmVyc2VLZXl3b3Jkc1tyZ2JdO1xuXHRpZiAocmV2ZXJzZWQpIHtcblx0XHRyZXR1cm4gcmV2ZXJzZWQ7XG5cdH1cblxuXHRsZXQgY3VycmVudENsb3Nlc3REaXN0YW5jZSA9IEluZmluaXR5O1xuXHRsZXQgY3VycmVudENsb3Nlc3RLZXl3b3JkO1xuXG5cdGZvciAoY29uc3Qga2V5d29yZCBvZiBPYmplY3Qua2V5cyhjc3NLZXl3b3JkcykpIHtcblx0XHRjb25zdCB2YWx1ZSA9IGNzc0tleXdvcmRzW2tleXdvcmRdO1xuXG5cdFx0Ly8gQ29tcHV0ZSBjb21wYXJhdGl2ZSBkaXN0YW5jZVxuXHRcdGNvbnN0IGRpc3RhbmNlID0gY29tcGFyYXRpdmVEaXN0YW5jZShyZ2IsIHZhbHVlKTtcblxuXHRcdC8vIENoZWNrIGlmIGl0cyBsZXNzLCBpZiBzbyBzZXQgYXMgY2xvc2VzdFxuXHRcdGlmIChkaXN0YW5jZSA8IGN1cnJlbnRDbG9zZXN0RGlzdGFuY2UpIHtcblx0XHRcdGN1cnJlbnRDbG9zZXN0RGlzdGFuY2UgPSBkaXN0YW5jZTtcblx0XHRcdGN1cnJlbnRDbG9zZXN0S2V5d29yZCA9IGtleXdvcmQ7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGN1cnJlbnRDbG9zZXN0S2V5d29yZDtcbn07XG5cbmNvbnZlcnQua2V5d29yZC5yZ2IgPSBmdW5jdGlvbiAoa2V5d29yZCkge1xuXHRyZXR1cm4gY3NzS2V5d29yZHNba2V5d29yZF07XG59O1xuXG5jb252ZXJ0LnJnYi54eXogPSBmdW5jdGlvbiAocmdiKSB7XG5cdGxldCByID0gcmdiWzBdIC8gMjU1O1xuXHRsZXQgZyA9IHJnYlsxXSAvIDI1NTtcblx0bGV0IGIgPSByZ2JbMl0gLyAyNTU7XG5cblx0Ly8gQXNzdW1lIHNSR0Jcblx0ciA9IHIgPiAwLjA0MDQ1ID8gKCgociArIDAuMDU1KSAvIDEuMDU1KSAqKiAyLjQpIDogKHIgLyAxMi45Mik7XG5cdGcgPSBnID4gMC4wNDA0NSA/ICgoKGcgKyAwLjA1NSkgLyAxLjA1NSkgKiogMi40KSA6IChnIC8gMTIuOTIpO1xuXHRiID0gYiA+IDAuMDQwNDUgPyAoKChiICsgMC4wNTUpIC8gMS4wNTUpICoqIDIuNCkgOiAoYiAvIDEyLjkyKTtcblxuXHRjb25zdCB4ID0gKHIgKiAwLjQxMjQpICsgKGcgKiAwLjM1NzYpICsgKGIgKiAwLjE4MDUpO1xuXHRjb25zdCB5ID0gKHIgKiAwLjIxMjYpICsgKGcgKiAwLjcxNTIpICsgKGIgKiAwLjA3MjIpO1xuXHRjb25zdCB6ID0gKHIgKiAwLjAxOTMpICsgKGcgKiAwLjExOTIpICsgKGIgKiAwLjk1MDUpO1xuXG5cdHJldHVybiBbeCAqIDEwMCwgeSAqIDEwMCwgeiAqIDEwMF07XG59O1xuXG5jb252ZXJ0LnJnYi5sYWIgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHh5eiA9IGNvbnZlcnQucmdiLnh5eihyZ2IpO1xuXHRsZXQgeCA9IHh5elswXTtcblx0bGV0IHkgPSB4eXpbMV07XG5cdGxldCB6ID0geHl6WzJdO1xuXG5cdHggLz0gOTUuMDQ3O1xuXHR5IC89IDEwMDtcblx0eiAvPSAxMDguODgzO1xuXG5cdHggPSB4ID4gMC4wMDg4NTYgPyAoeCAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHgpICsgKDE2IC8gMTE2KTtcblx0eSA9IHkgPiAwLjAwODg1NiA/ICh5ICoqICgxIC8gMykpIDogKDcuNzg3ICogeSkgKyAoMTYgLyAxMTYpO1xuXHR6ID0geiA+IDAuMDA4ODU2ID8gKHogKiogKDEgLyAzKSkgOiAoNy43ODcgKiB6KSArICgxNiAvIDExNik7XG5cblx0Y29uc3QgbCA9ICgxMTYgKiB5KSAtIDE2O1xuXHRjb25zdCBhID0gNTAwICogKHggLSB5KTtcblx0Y29uc3QgYiA9IDIwMCAqICh5IC0geik7XG5cblx0cmV0dXJuIFtsLCBhLCBiXTtcbn07XG5cbmNvbnZlcnQuaHNsLnJnYiA9IGZ1bmN0aW9uIChoc2wpIHtcblx0Y29uc3QgaCA9IGhzbFswXSAvIDM2MDtcblx0Y29uc3QgcyA9IGhzbFsxXSAvIDEwMDtcblx0Y29uc3QgbCA9IGhzbFsyXSAvIDEwMDtcblx0bGV0IHQyO1xuXHRsZXQgdDM7XG5cdGxldCB2YWw7XG5cblx0aWYgKHMgPT09IDApIHtcblx0XHR2YWwgPSBsICogMjU1O1xuXHRcdHJldHVybiBbdmFsLCB2YWwsIHZhbF07XG5cdH1cblxuXHRpZiAobCA8IDAuNSkge1xuXHRcdHQyID0gbCAqICgxICsgcyk7XG5cdH0gZWxzZSB7XG5cdFx0dDIgPSBsICsgcyAtIGwgKiBzO1xuXHR9XG5cblx0Y29uc3QgdDEgPSAyICogbCAtIHQyO1xuXG5cdGNvbnN0IHJnYiA9IFswLCAwLCAwXTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcblx0XHR0MyA9IGggKyAxIC8gMyAqIC0oaSAtIDEpO1xuXHRcdGlmICh0MyA8IDApIHtcblx0XHRcdHQzKys7XG5cdFx0fVxuXG5cdFx0aWYgKHQzID4gMSkge1xuXHRcdFx0dDMtLTtcblx0XHR9XG5cblx0XHRpZiAoNiAqIHQzIDwgMSkge1xuXHRcdFx0dmFsID0gdDEgKyAodDIgLSB0MSkgKiA2ICogdDM7XG5cdFx0fSBlbHNlIGlmICgyICogdDMgPCAxKSB7XG5cdFx0XHR2YWwgPSB0Mjtcblx0XHR9IGVsc2UgaWYgKDMgKiB0MyA8IDIpIHtcblx0XHRcdHZhbCA9IHQxICsgKHQyIC0gdDEpICogKDIgLyAzIC0gdDMpICogNjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFsID0gdDE7XG5cdFx0fVxuXG5cdFx0cmdiW2ldID0gdmFsICogMjU1O1xuXHR9XG5cblx0cmV0dXJuIHJnYjtcbn07XG5cbmNvbnZlcnQuaHNsLmhzdiA9IGZ1bmN0aW9uIChoc2wpIHtcblx0Y29uc3QgaCA9IGhzbFswXTtcblx0bGV0IHMgPSBoc2xbMV0gLyAxMDA7XG5cdGxldCBsID0gaHNsWzJdIC8gMTAwO1xuXHRsZXQgc21pbiA9IHM7XG5cdGNvbnN0IGxtaW4gPSBNYXRoLm1heChsLCAwLjAxKTtcblxuXHRsICo9IDI7XG5cdHMgKj0gKGwgPD0gMSkgPyBsIDogMiAtIGw7XG5cdHNtaW4gKj0gbG1pbiA8PSAxID8gbG1pbiA6IDIgLSBsbWluO1xuXHRjb25zdCB2ID0gKGwgKyBzKSAvIDI7XG5cdGNvbnN0IHN2ID0gbCA9PT0gMCA/ICgyICogc21pbikgLyAobG1pbiArIHNtaW4pIDogKDIgKiBzKSAvIChsICsgcyk7XG5cblx0cmV0dXJuIFtoLCBzdiAqIDEwMCwgdiAqIDEwMF07XG59O1xuXG5jb252ZXJ0Lmhzdi5yZ2IgPSBmdW5jdGlvbiAoaHN2KSB7XG5cdGNvbnN0IGggPSBoc3ZbMF0gLyA2MDtcblx0Y29uc3QgcyA9IGhzdlsxXSAvIDEwMDtcblx0bGV0IHYgPSBoc3ZbMl0gLyAxMDA7XG5cdGNvbnN0IGhpID0gTWF0aC5mbG9vcihoKSAlIDY7XG5cblx0Y29uc3QgZiA9IGggLSBNYXRoLmZsb29yKGgpO1xuXHRjb25zdCBwID0gMjU1ICogdiAqICgxIC0gcyk7XG5cdGNvbnN0IHEgPSAyNTUgKiB2ICogKDEgLSAocyAqIGYpKTtcblx0Y29uc3QgdCA9IDI1NSAqIHYgKiAoMSAtIChzICogKDEgLSBmKSkpO1xuXHR2ICo9IDI1NTtcblxuXHRzd2l0Y2ggKGhpKSB7XG5cdFx0Y2FzZSAwOlxuXHRcdFx0cmV0dXJuIFt2LCB0LCBwXTtcblx0XHRjYXNlIDE6XG5cdFx0XHRyZXR1cm4gW3EsIHYsIHBdO1xuXHRcdGNhc2UgMjpcblx0XHRcdHJldHVybiBbcCwgdiwgdF07XG5cdFx0Y2FzZSAzOlxuXHRcdFx0cmV0dXJuIFtwLCBxLCB2XTtcblx0XHRjYXNlIDQ6XG5cdFx0XHRyZXR1cm4gW3QsIHAsIHZdO1xuXHRcdGNhc2UgNTpcblx0XHRcdHJldHVybiBbdiwgcCwgcV07XG5cdH1cbn07XG5cbmNvbnZlcnQuaHN2LmhzbCA9IGZ1bmN0aW9uIChoc3YpIHtcblx0Y29uc3QgaCA9IGhzdlswXTtcblx0Y29uc3QgcyA9IGhzdlsxXSAvIDEwMDtcblx0Y29uc3QgdiA9IGhzdlsyXSAvIDEwMDtcblx0Y29uc3Qgdm1pbiA9IE1hdGgubWF4KHYsIDAuMDEpO1xuXHRsZXQgc2w7XG5cdGxldCBsO1xuXG5cdGwgPSAoMiAtIHMpICogdjtcblx0Y29uc3QgbG1pbiA9ICgyIC0gcykgKiB2bWluO1xuXHRzbCA9IHMgKiB2bWluO1xuXHRzbCAvPSAobG1pbiA8PSAxKSA/IGxtaW4gOiAyIC0gbG1pbjtcblx0c2wgPSBzbCB8fCAwO1xuXHRsIC89IDI7XG5cblx0cmV0dXJuIFtoLCBzbCAqIDEwMCwgbCAqIDEwMF07XG59O1xuXG4vLyBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MtY29sb3IvI2h3Yi10by1yZ2JcbmNvbnZlcnQuaHdiLnJnYiA9IGZ1bmN0aW9uIChod2IpIHtcblx0Y29uc3QgaCA9IGh3YlswXSAvIDM2MDtcblx0bGV0IHdoID0gaHdiWzFdIC8gMTAwO1xuXHRsZXQgYmwgPSBod2JbMl0gLyAxMDA7XG5cdGNvbnN0IHJhdGlvID0gd2ggKyBibDtcblx0bGV0IGY7XG5cblx0Ly8gV2ggKyBibCBjYW50IGJlID4gMVxuXHRpZiAocmF0aW8gPiAxKSB7XG5cdFx0d2ggLz0gcmF0aW87XG5cdFx0YmwgLz0gcmF0aW87XG5cdH1cblxuXHRjb25zdCBpID0gTWF0aC5mbG9vcig2ICogaCk7XG5cdGNvbnN0IHYgPSAxIC0gYmw7XG5cdGYgPSA2ICogaCAtIGk7XG5cblx0aWYgKChpICYgMHgwMSkgIT09IDApIHtcblx0XHRmID0gMSAtIGY7XG5cdH1cblxuXHRjb25zdCBuID0gd2ggKyBmICogKHYgLSB3aCk7IC8vIExpbmVhciBpbnRlcnBvbGF0aW9uXG5cblx0bGV0IHI7XG5cdGxldCBnO1xuXHRsZXQgYjtcblx0LyogZXNsaW50LWRpc2FibGUgbWF4LXN0YXRlbWVudHMtcGVyLWxpbmUsbm8tbXVsdGktc3BhY2VzICovXG5cdHN3aXRjaCAoaSkge1xuXHRcdGRlZmF1bHQ6XG5cdFx0Y2FzZSA2OlxuXHRcdGNhc2UgMDogciA9IHY7ICBnID0gbjsgIGIgPSB3aDsgYnJlYWs7XG5cdFx0Y2FzZSAxOiByID0gbjsgIGcgPSB2OyAgYiA9IHdoOyBicmVhaztcblx0XHRjYXNlIDI6IHIgPSB3aDsgZyA9IHY7ICBiID0gbjsgYnJlYWs7XG5cdFx0Y2FzZSAzOiByID0gd2g7IGcgPSBuOyAgYiA9IHY7IGJyZWFrO1xuXHRcdGNhc2UgNDogciA9IG47ICBnID0gd2g7IGIgPSB2OyBicmVhaztcblx0XHRjYXNlIDU6IHIgPSB2OyAgZyA9IHdoOyBiID0gbjsgYnJlYWs7XG5cdH1cblx0LyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cy1wZXItbGluZSxuby1tdWx0aS1zcGFjZXMgKi9cblxuXHRyZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTVdO1xufTtcblxuY29udmVydC5jbXlrLnJnYiA9IGZ1bmN0aW9uIChjbXlrKSB7XG5cdGNvbnN0IGMgPSBjbXlrWzBdIC8gMTAwO1xuXHRjb25zdCBtID0gY215a1sxXSAvIDEwMDtcblx0Y29uc3QgeSA9IGNteWtbMl0gLyAxMDA7XG5cdGNvbnN0IGsgPSBjbXlrWzNdIC8gMTAwO1xuXG5cdGNvbnN0IHIgPSAxIC0gTWF0aC5taW4oMSwgYyAqICgxIC0gaykgKyBrKTtcblx0Y29uc3QgZyA9IDEgLSBNYXRoLm1pbigxLCBtICogKDEgLSBrKSArIGspO1xuXHRjb25zdCBiID0gMSAtIE1hdGgubWluKDEsIHkgKiAoMSAtIGspICsgayk7XG5cblx0cmV0dXJuIFtyICogMjU1LCBnICogMjU1LCBiICogMjU1XTtcbn07XG5cbmNvbnZlcnQueHl6LnJnYiA9IGZ1bmN0aW9uICh4eXopIHtcblx0Y29uc3QgeCA9IHh5elswXSAvIDEwMDtcblx0Y29uc3QgeSA9IHh5elsxXSAvIDEwMDtcblx0Y29uc3QgeiA9IHh5elsyXSAvIDEwMDtcblx0bGV0IHI7XG5cdGxldCBnO1xuXHRsZXQgYjtcblxuXHRyID0gKHggKiAzLjI0MDYpICsgKHkgKiAtMS41MzcyKSArICh6ICogLTAuNDk4Nik7XG5cdGcgPSAoeCAqIC0wLjk2ODkpICsgKHkgKiAxLjg3NTgpICsgKHogKiAwLjA0MTUpO1xuXHRiID0gKHggKiAwLjA1NTcpICsgKHkgKiAtMC4yMDQwKSArICh6ICogMS4wNTcwKTtcblxuXHQvLyBBc3N1bWUgc1JHQlxuXHRyID0gciA+IDAuMDAzMTMwOFxuXHRcdD8gKCgxLjA1NSAqIChyICoqICgxLjAgLyAyLjQpKSkgLSAwLjA1NSlcblx0XHQ6IHIgKiAxMi45MjtcblxuXHRnID0gZyA+IDAuMDAzMTMwOFxuXHRcdD8gKCgxLjA1NSAqIChnICoqICgxLjAgLyAyLjQpKSkgLSAwLjA1NSlcblx0XHQ6IGcgKiAxMi45MjtcblxuXHRiID0gYiA+IDAuMDAzMTMwOFxuXHRcdD8gKCgxLjA1NSAqIChiICoqICgxLjAgLyAyLjQpKSkgLSAwLjA1NSlcblx0XHQ6IGIgKiAxMi45MjtcblxuXHRyID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgciksIDEpO1xuXHRnID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZyksIDEpO1xuXHRiID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgYiksIDEpO1xuXG5cdHJldHVybiBbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NV07XG59O1xuXG5jb252ZXJ0Lnh5ei5sYWIgPSBmdW5jdGlvbiAoeHl6KSB7XG5cdGxldCB4ID0geHl6WzBdO1xuXHRsZXQgeSA9IHh5elsxXTtcblx0bGV0IHogPSB4eXpbMl07XG5cblx0eCAvPSA5NS4wNDc7XG5cdHkgLz0gMTAwO1xuXHR6IC89IDEwOC44ODM7XG5cblx0eCA9IHggPiAwLjAwODg1NiA/ICh4ICoqICgxIC8gMykpIDogKDcuNzg3ICogeCkgKyAoMTYgLyAxMTYpO1xuXHR5ID0geSA+IDAuMDA4ODU2ID8gKHkgKiogKDEgLyAzKSkgOiAoNy43ODcgKiB5KSArICgxNiAvIDExNik7XG5cdHogPSB6ID4gMC4wMDg4NTYgPyAoeiAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHopICsgKDE2IC8gMTE2KTtcblxuXHRjb25zdCBsID0gKDExNiAqIHkpIC0gMTY7XG5cdGNvbnN0IGEgPSA1MDAgKiAoeCAtIHkpO1xuXHRjb25zdCBiID0gMjAwICogKHkgLSB6KTtcblxuXHRyZXR1cm4gW2wsIGEsIGJdO1xufTtcblxuY29udmVydC5sYWIueHl6ID0gZnVuY3Rpb24gKGxhYikge1xuXHRjb25zdCBsID0gbGFiWzBdO1xuXHRjb25zdCBhID0gbGFiWzFdO1xuXHRjb25zdCBiID0gbGFiWzJdO1xuXHRsZXQgeDtcblx0bGV0IHk7XG5cdGxldCB6O1xuXG5cdHkgPSAobCArIDE2KSAvIDExNjtcblx0eCA9IGEgLyA1MDAgKyB5O1xuXHR6ID0geSAtIGIgLyAyMDA7XG5cblx0Y29uc3QgeTIgPSB5ICoqIDM7XG5cdGNvbnN0IHgyID0geCAqKiAzO1xuXHRjb25zdCB6MiA9IHogKiogMztcblx0eSA9IHkyID4gMC4wMDg4NTYgPyB5MiA6ICh5IC0gMTYgLyAxMTYpIC8gNy43ODc7XG5cdHggPSB4MiA+IDAuMDA4ODU2ID8geDIgOiAoeCAtIDE2IC8gMTE2KSAvIDcuNzg3O1xuXHR6ID0gejIgPiAwLjAwODg1NiA/IHoyIDogKHogLSAxNiAvIDExNikgLyA3Ljc4NztcblxuXHR4ICo9IDk1LjA0Nztcblx0eSAqPSAxMDA7XG5cdHogKj0gMTA4Ljg4MztcblxuXHRyZXR1cm4gW3gsIHksIHpdO1xufTtcblxuY29udmVydC5sYWIubGNoID0gZnVuY3Rpb24gKGxhYikge1xuXHRjb25zdCBsID0gbGFiWzBdO1xuXHRjb25zdCBhID0gbGFiWzFdO1xuXHRjb25zdCBiID0gbGFiWzJdO1xuXHRsZXQgaDtcblxuXHRjb25zdCBociA9IE1hdGguYXRhbjIoYiwgYSk7XG5cdGggPSBociAqIDM2MCAvIDIgLyBNYXRoLlBJO1xuXG5cdGlmIChoIDwgMCkge1xuXHRcdGggKz0gMzYwO1xuXHR9XG5cblx0Y29uc3QgYyA9IE1hdGguc3FydChhICogYSArIGIgKiBiKTtcblxuXHRyZXR1cm4gW2wsIGMsIGhdO1xufTtcblxuY29udmVydC5sY2gubGFiID0gZnVuY3Rpb24gKGxjaCkge1xuXHRjb25zdCBsID0gbGNoWzBdO1xuXHRjb25zdCBjID0gbGNoWzFdO1xuXHRjb25zdCBoID0gbGNoWzJdO1xuXG5cdGNvbnN0IGhyID0gaCAvIDM2MCAqIDIgKiBNYXRoLlBJO1xuXHRjb25zdCBhID0gYyAqIE1hdGguY29zKGhyKTtcblx0Y29uc3QgYiA9IGMgKiBNYXRoLnNpbihocik7XG5cblx0cmV0dXJuIFtsLCBhLCBiXTtcbn07XG5cbmNvbnZlcnQucmdiLmFuc2kxNiA9IGZ1bmN0aW9uIChhcmdzLCBzYXR1cmF0aW9uID0gbnVsbCkge1xuXHRjb25zdCBbciwgZywgYl0gPSBhcmdzO1xuXHRsZXQgdmFsdWUgPSBzYXR1cmF0aW9uID09PSBudWxsID8gY29udmVydC5yZ2IuaHN2KGFyZ3MpWzJdIDogc2F0dXJhdGlvbjsgLy8gSHN2IC0+IGFuc2kxNiBvcHRpbWl6YXRpb25cblxuXHR2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgLyA1MCk7XG5cblx0aWYgKHZhbHVlID09PSAwKSB7XG5cdFx0cmV0dXJuIDMwO1xuXHR9XG5cblx0bGV0IGFuc2kgPSAzMFxuXHRcdCsgKChNYXRoLnJvdW5kKGIgLyAyNTUpIDw8IDIpXG5cdFx0fCAoTWF0aC5yb3VuZChnIC8gMjU1KSA8PCAxKVxuXHRcdHwgTWF0aC5yb3VuZChyIC8gMjU1KSk7XG5cblx0aWYgKHZhbHVlID09PSAyKSB7XG5cdFx0YW5zaSArPSA2MDtcblx0fVxuXG5cdHJldHVybiBhbnNpO1xufTtcblxuY29udmVydC5oc3YuYW5zaTE2ID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0Ly8gT3B0aW1pemF0aW9uIGhlcmU7IHdlIGFscmVhZHkga25vdyB0aGUgdmFsdWUgYW5kIGRvbid0IG5lZWQgdG8gZ2V0XG5cdC8vIGl0IGNvbnZlcnRlZCBmb3IgdXMuXG5cdHJldHVybiBjb252ZXJ0LnJnYi5hbnNpMTYoY29udmVydC5oc3YucmdiKGFyZ3MpLCBhcmdzWzJdKTtcbn07XG5cbmNvbnZlcnQucmdiLmFuc2kyNTYgPSBmdW5jdGlvbiAoYXJncykge1xuXHRjb25zdCByID0gYXJnc1swXTtcblx0Y29uc3QgZyA9IGFyZ3NbMV07XG5cdGNvbnN0IGIgPSBhcmdzWzJdO1xuXG5cdC8vIFdlIHVzZSB0aGUgZXh0ZW5kZWQgZ3JleXNjYWxlIHBhbGV0dGUgaGVyZSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mXG5cdC8vIGJsYWNrIGFuZCB3aGl0ZS4gbm9ybWFsIHBhbGV0dGUgb25seSBoYXMgNCBncmV5c2NhbGUgc2hhZGVzLlxuXHRpZiAociA9PT0gZyAmJiBnID09PSBiKSB7XG5cdFx0aWYgKHIgPCA4KSB7XG5cdFx0XHRyZXR1cm4gMTY7XG5cdFx0fVxuXG5cdFx0aWYgKHIgPiAyNDgpIHtcblx0XHRcdHJldHVybiAyMzE7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIE1hdGgucm91bmQoKChyIC0gOCkgLyAyNDcpICogMjQpICsgMjMyO1xuXHR9XG5cblx0Y29uc3QgYW5zaSA9IDE2XG5cdFx0KyAoMzYgKiBNYXRoLnJvdW5kKHIgLyAyNTUgKiA1KSlcblx0XHQrICg2ICogTWF0aC5yb3VuZChnIC8gMjU1ICogNSkpXG5cdFx0KyBNYXRoLnJvdW5kKGIgLyAyNTUgKiA1KTtcblxuXHRyZXR1cm4gYW5zaTtcbn07XG5cbmNvbnZlcnQuYW5zaTE2LnJnYiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdGxldCBjb2xvciA9IGFyZ3MgJSAxMDtcblxuXHQvLyBIYW5kbGUgZ3JleXNjYWxlXG5cdGlmIChjb2xvciA9PT0gMCB8fCBjb2xvciA9PT0gNykge1xuXHRcdGlmIChhcmdzID4gNTApIHtcblx0XHRcdGNvbG9yICs9IDMuNTtcblx0XHR9XG5cblx0XHRjb2xvciA9IGNvbG9yIC8gMTAuNSAqIDI1NTtcblxuXHRcdHJldHVybiBbY29sb3IsIGNvbG9yLCBjb2xvcl07XG5cdH1cblxuXHRjb25zdCBtdWx0ID0gKH5+KGFyZ3MgPiA1MCkgKyAxKSAqIDAuNTtcblx0Y29uc3QgciA9ICgoY29sb3IgJiAxKSAqIG11bHQpICogMjU1O1xuXHRjb25zdCBnID0gKCgoY29sb3IgPj4gMSkgJiAxKSAqIG11bHQpICogMjU1O1xuXHRjb25zdCBiID0gKCgoY29sb3IgPj4gMikgJiAxKSAqIG11bHQpICogMjU1O1xuXG5cdHJldHVybiBbciwgZywgYl07XG59O1xuXG5jb252ZXJ0LmFuc2kyNTYucmdiID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0Ly8gSGFuZGxlIGdyZXlzY2FsZVxuXHRpZiAoYXJncyA+PSAyMzIpIHtcblx0XHRjb25zdCBjID0gKGFyZ3MgLSAyMzIpICogMTAgKyA4O1xuXHRcdHJldHVybiBbYywgYywgY107XG5cdH1cblxuXHRhcmdzIC09IDE2O1xuXG5cdGxldCByZW07XG5cdGNvbnN0IHIgPSBNYXRoLmZsb29yKGFyZ3MgLyAzNikgLyA1ICogMjU1O1xuXHRjb25zdCBnID0gTWF0aC5mbG9vcigocmVtID0gYXJncyAlIDM2KSAvIDYpIC8gNSAqIDI1NTtcblx0Y29uc3QgYiA9IChyZW0gJSA2KSAvIDUgKiAyNTU7XG5cblx0cmV0dXJuIFtyLCBnLCBiXTtcbn07XG5cbmNvbnZlcnQucmdiLmhleCA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdGNvbnN0IGludGVnZXIgPSAoKE1hdGgucm91bmQoYXJnc1swXSkgJiAweEZGKSA8PCAxNilcblx0XHQrICgoTWF0aC5yb3VuZChhcmdzWzFdKSAmIDB4RkYpIDw8IDgpXG5cdFx0KyAoTWF0aC5yb3VuZChhcmdzWzJdKSAmIDB4RkYpO1xuXG5cdGNvbnN0IHN0cmluZyA9IGludGVnZXIudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cdHJldHVybiAnMDAwMDAwJy5zdWJzdHJpbmcoc3RyaW5nLmxlbmd0aCkgKyBzdHJpbmc7XG59O1xuXG5jb252ZXJ0LmhleC5yZ2IgPSBmdW5jdGlvbiAoYXJncykge1xuXHRjb25zdCBtYXRjaCA9IGFyZ3MudG9TdHJpbmcoMTYpLm1hdGNoKC9bYS1mMC05XXs2fXxbYS1mMC05XXszfS9pKTtcblx0aWYgKCFtYXRjaCkge1xuXHRcdHJldHVybiBbMCwgMCwgMF07XG5cdH1cblxuXHRsZXQgY29sb3JTdHJpbmcgPSBtYXRjaFswXTtcblxuXHRpZiAobWF0Y2hbMF0ubGVuZ3RoID09PSAzKSB7XG5cdFx0Y29sb3JTdHJpbmcgPSBjb2xvclN0cmluZy5zcGxpdCgnJykubWFwKGNoYXIgPT4ge1xuXHRcdFx0cmV0dXJuIGNoYXIgKyBjaGFyO1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0Y29uc3QgaW50ZWdlciA9IHBhcnNlSW50KGNvbG9yU3RyaW5nLCAxNik7XG5cdGNvbnN0IHIgPSAoaW50ZWdlciA+PiAxNikgJiAweEZGO1xuXHRjb25zdCBnID0gKGludGVnZXIgPj4gOCkgJiAweEZGO1xuXHRjb25zdCBiID0gaW50ZWdlciAmIDB4RkY7XG5cblx0cmV0dXJuIFtyLCBnLCBiXTtcbn07XG5cbmNvbnZlcnQucmdiLmhjZyA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgciA9IHJnYlswXSAvIDI1NTtcblx0Y29uc3QgZyA9IHJnYlsxXSAvIDI1NTtcblx0Y29uc3QgYiA9IHJnYlsyXSAvIDI1NTtcblx0Y29uc3QgbWF4ID0gTWF0aC5tYXgoTWF0aC5tYXgociwgZyksIGIpO1xuXHRjb25zdCBtaW4gPSBNYXRoLm1pbihNYXRoLm1pbihyLCBnKSwgYik7XG5cdGNvbnN0IGNocm9tYSA9IChtYXggLSBtaW4pO1xuXHRsZXQgZ3JheXNjYWxlO1xuXHRsZXQgaHVlO1xuXG5cdGlmIChjaHJvbWEgPCAxKSB7XG5cdFx0Z3JheXNjYWxlID0gbWluIC8gKDEgLSBjaHJvbWEpO1xuXHR9IGVsc2Uge1xuXHRcdGdyYXlzY2FsZSA9IDA7XG5cdH1cblxuXHRpZiAoY2hyb21hIDw9IDApIHtcblx0XHRodWUgPSAwO1xuXHR9IGVsc2Vcblx0aWYgKG1heCA9PT0gcikge1xuXHRcdGh1ZSA9ICgoZyAtIGIpIC8gY2hyb21hKSAlIDY7XG5cdH0gZWxzZVxuXHRpZiAobWF4ID09PSBnKSB7XG5cdFx0aHVlID0gMiArIChiIC0gcikgLyBjaHJvbWE7XG5cdH0gZWxzZSB7XG5cdFx0aHVlID0gNCArIChyIC0gZykgLyBjaHJvbWE7XG5cdH1cblxuXHRodWUgLz0gNjtcblx0aHVlICU9IDE7XG5cblx0cmV0dXJuIFtodWUgKiAzNjAsIGNocm9tYSAqIDEwMCwgZ3JheXNjYWxlICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaHNsLmhjZyA9IGZ1bmN0aW9uIChoc2wpIHtcblx0Y29uc3QgcyA9IGhzbFsxXSAvIDEwMDtcblx0Y29uc3QgbCA9IGhzbFsyXSAvIDEwMDtcblxuXHRjb25zdCBjID0gbCA8IDAuNSA/ICgyLjAgKiBzICogbCkgOiAoMi4wICogcyAqICgxLjAgLSBsKSk7XG5cblx0bGV0IGYgPSAwO1xuXHRpZiAoYyA8IDEuMCkge1xuXHRcdGYgPSAobCAtIDAuNSAqIGMpIC8gKDEuMCAtIGMpO1xuXHR9XG5cblx0cmV0dXJuIFtoc2xbMF0sIGMgKiAxMDAsIGYgKiAxMDBdO1xufTtcblxuY29udmVydC5oc3YuaGNnID0gZnVuY3Rpb24gKGhzdikge1xuXHRjb25zdCBzID0gaHN2WzFdIC8gMTAwO1xuXHRjb25zdCB2ID0gaHN2WzJdIC8gMTAwO1xuXG5cdGNvbnN0IGMgPSBzICogdjtcblx0bGV0IGYgPSAwO1xuXG5cdGlmIChjIDwgMS4wKSB7XG5cdFx0ZiA9ICh2IC0gYykgLyAoMSAtIGMpO1xuXHR9XG5cblx0cmV0dXJuIFtoc3ZbMF0sIGMgKiAxMDAsIGYgKiAxMDBdO1xufTtcblxuY29udmVydC5oY2cucmdiID0gZnVuY3Rpb24gKGhjZykge1xuXHRjb25zdCBoID0gaGNnWzBdIC8gMzYwO1xuXHRjb25zdCBjID0gaGNnWzFdIC8gMTAwO1xuXHRjb25zdCBnID0gaGNnWzJdIC8gMTAwO1xuXG5cdGlmIChjID09PSAwLjApIHtcblx0XHRyZXR1cm4gW2cgKiAyNTUsIGcgKiAyNTUsIGcgKiAyNTVdO1xuXHR9XG5cblx0Y29uc3QgcHVyZSA9IFswLCAwLCAwXTtcblx0Y29uc3QgaGkgPSAoaCAlIDEpICogNjtcblx0Y29uc3QgdiA9IGhpICUgMTtcblx0Y29uc3QgdyA9IDEgLSB2O1xuXHRsZXQgbWcgPSAwO1xuXG5cdC8qIGVzbGludC1kaXNhYmxlIG1heC1zdGF0ZW1lbnRzLXBlci1saW5lICovXG5cdHN3aXRjaCAoTWF0aC5mbG9vcihoaSkpIHtcblx0XHRjYXNlIDA6XG5cdFx0XHRwdXJlWzBdID0gMTsgcHVyZVsxXSA9IHY7IHB1cmVbMl0gPSAwOyBicmVhaztcblx0XHRjYXNlIDE6XG5cdFx0XHRwdXJlWzBdID0gdzsgcHVyZVsxXSA9IDE7IHB1cmVbMl0gPSAwOyBicmVhaztcblx0XHRjYXNlIDI6XG5cdFx0XHRwdXJlWzBdID0gMDsgcHVyZVsxXSA9IDE7IHB1cmVbMl0gPSB2OyBicmVhaztcblx0XHRjYXNlIDM6XG5cdFx0XHRwdXJlWzBdID0gMDsgcHVyZVsxXSA9IHc7IHB1cmVbMl0gPSAxOyBicmVhaztcblx0XHRjYXNlIDQ6XG5cdFx0XHRwdXJlWzBdID0gdjsgcHVyZVsxXSA9IDA7IHB1cmVbMl0gPSAxOyBicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0cHVyZVswXSA9IDE7IHB1cmVbMV0gPSAwOyBwdXJlWzJdID0gdztcblx0fVxuXHQvKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzLXBlci1saW5lICovXG5cblx0bWcgPSAoMS4wIC0gYykgKiBnO1xuXG5cdHJldHVybiBbXG5cdFx0KGMgKiBwdXJlWzBdICsgbWcpICogMjU1LFxuXHRcdChjICogcHVyZVsxXSArIG1nKSAqIDI1NSxcblx0XHQoYyAqIHB1cmVbMl0gKyBtZykgKiAyNTVcblx0XTtcbn07XG5cbmNvbnZlcnQuaGNnLmhzdiA9IGZ1bmN0aW9uIChoY2cpIHtcblx0Y29uc3QgYyA9IGhjZ1sxXSAvIDEwMDtcblx0Y29uc3QgZyA9IGhjZ1syXSAvIDEwMDtcblxuXHRjb25zdCB2ID0gYyArIGcgKiAoMS4wIC0gYyk7XG5cdGxldCBmID0gMDtcblxuXHRpZiAodiA+IDAuMCkge1xuXHRcdGYgPSBjIC8gdjtcblx0fVxuXG5cdHJldHVybiBbaGNnWzBdLCBmICogMTAwLCB2ICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaGNnLmhzbCA9IGZ1bmN0aW9uIChoY2cpIHtcblx0Y29uc3QgYyA9IGhjZ1sxXSAvIDEwMDtcblx0Y29uc3QgZyA9IGhjZ1syXSAvIDEwMDtcblxuXHRjb25zdCBsID0gZyAqICgxLjAgLSBjKSArIDAuNSAqIGM7XG5cdGxldCBzID0gMDtcblxuXHRpZiAobCA+IDAuMCAmJiBsIDwgMC41KSB7XG5cdFx0cyA9IGMgLyAoMiAqIGwpO1xuXHR9IGVsc2Vcblx0aWYgKGwgPj0gMC41ICYmIGwgPCAxLjApIHtcblx0XHRzID0gYyAvICgyICogKDEgLSBsKSk7XG5cdH1cblxuXHRyZXR1cm4gW2hjZ1swXSwgcyAqIDEwMCwgbCAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmhjZy5od2IgPSBmdW5jdGlvbiAoaGNnKSB7XG5cdGNvbnN0IGMgPSBoY2dbMV0gLyAxMDA7XG5cdGNvbnN0IGcgPSBoY2dbMl0gLyAxMDA7XG5cdGNvbnN0IHYgPSBjICsgZyAqICgxLjAgLSBjKTtcblx0cmV0dXJuIFtoY2dbMF0sICh2IC0gYykgKiAxMDAsICgxIC0gdikgKiAxMDBdO1xufTtcblxuY29udmVydC5od2IuaGNnID0gZnVuY3Rpb24gKGh3Yikge1xuXHRjb25zdCB3ID0gaHdiWzFdIC8gMTAwO1xuXHRjb25zdCBiID0gaHdiWzJdIC8gMTAwO1xuXHRjb25zdCB2ID0gMSAtIGI7XG5cdGNvbnN0IGMgPSB2IC0gdztcblx0bGV0IGcgPSAwO1xuXG5cdGlmIChjIDwgMSkge1xuXHRcdGcgPSAodiAtIGMpIC8gKDEgLSBjKTtcblx0fVxuXG5cdHJldHVybiBbaHdiWzBdLCBjICogMTAwLCBnICogMTAwXTtcbn07XG5cbmNvbnZlcnQuYXBwbGUucmdiID0gZnVuY3Rpb24gKGFwcGxlKSB7XG5cdHJldHVybiBbKGFwcGxlWzBdIC8gNjU1MzUpICogMjU1LCAoYXBwbGVbMV0gLyA2NTUzNSkgKiAyNTUsIChhcHBsZVsyXSAvIDY1NTM1KSAqIDI1NV07XG59O1xuXG5jb252ZXJ0LnJnYi5hcHBsZSA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0cmV0dXJuIFsocmdiWzBdIC8gMjU1KSAqIDY1NTM1LCAocmdiWzFdIC8gMjU1KSAqIDY1NTM1LCAocmdiWzJdIC8gMjU1KSAqIDY1NTM1XTtcbn07XG5cbmNvbnZlcnQuZ3JheS5yZ2IgPSBmdW5jdGlvbiAoYXJncykge1xuXHRyZXR1cm4gW2FyZ3NbMF0gLyAxMDAgKiAyNTUsIGFyZ3NbMF0gLyAxMDAgKiAyNTUsIGFyZ3NbMF0gLyAxMDAgKiAyNTVdO1xufTtcblxuY29udmVydC5ncmF5LmhzbCA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdHJldHVybiBbMCwgMCwgYXJnc1swXV07XG59O1xuXG5jb252ZXJ0LmdyYXkuaHN2ID0gY29udmVydC5ncmF5LmhzbDtcblxuY29udmVydC5ncmF5Lmh3YiA9IGZ1bmN0aW9uIChncmF5KSB7XG5cdHJldHVybiBbMCwgMTAwLCBncmF5WzBdXTtcbn07XG5cbmNvbnZlcnQuZ3JheS5jbXlrID0gZnVuY3Rpb24gKGdyYXkpIHtcblx0cmV0dXJuIFswLCAwLCAwLCBncmF5WzBdXTtcbn07XG5cbmNvbnZlcnQuZ3JheS5sYWIgPSBmdW5jdGlvbiAoZ3JheSkge1xuXHRyZXR1cm4gW2dyYXlbMF0sIDAsIDBdO1xufTtcblxuY29udmVydC5ncmF5LmhleCA9IGZ1bmN0aW9uIChncmF5KSB7XG5cdGNvbnN0IHZhbCA9IE1hdGgucm91bmQoZ3JheVswXSAvIDEwMCAqIDI1NSkgJiAweEZGO1xuXHRjb25zdCBpbnRlZ2VyID0gKHZhbCA8PCAxNikgKyAodmFsIDw8IDgpICsgdmFsO1xuXG5cdGNvbnN0IHN0cmluZyA9IGludGVnZXIudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cdHJldHVybiAnMDAwMDAwJy5zdWJzdHJpbmcoc3RyaW5nLmxlbmd0aCkgKyBzdHJpbmc7XG59O1xuXG5jb252ZXJ0LnJnYi5ncmF5ID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCB2YWwgPSAocmdiWzBdICsgcmdiWzFdICsgcmdiWzJdKSAvIDM7XG5cdHJldHVybiBbdmFsIC8gMjU1ICogMTAwXTtcbn07XG4iLCAiY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKCcuL2NvbnZlcnNpb25zJyk7XG5cbi8qXG5cdFRoaXMgZnVuY3Rpb24gcm91dGVzIGEgbW9kZWwgdG8gYWxsIG90aGVyIG1vZGVscy5cblxuXHRhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIHJvdXRlZCBoYXZlIGEgcHJvcGVydHkgYC5jb252ZXJzaW9uYCBhdHRhY2hlZFxuXHR0byB0aGUgcmV0dXJuZWQgc3ludGhldGljIGZ1bmN0aW9uLiBUaGlzIHByb3BlcnR5IGlzIGFuIGFycmF5XG5cdG9mIHN0cmluZ3MsIGVhY2ggd2l0aCB0aGUgc3RlcHMgaW4gYmV0d2VlbiB0aGUgJ2Zyb20nIGFuZCAndG8nXG5cdGNvbG9yIG1vZGVscyAoaW5jbHVzaXZlKS5cblxuXHRjb252ZXJzaW9ucyB0aGF0IGFyZSBub3QgcG9zc2libGUgc2ltcGx5IGFyZSBub3QgaW5jbHVkZWQuXG4qL1xuXG5mdW5jdGlvbiBidWlsZEdyYXBoKCkge1xuXHRjb25zdCBncmFwaCA9IHt9O1xuXHQvLyBodHRwczovL2pzcGVyZi5jb20vb2JqZWN0LWtleXMtdnMtZm9yLWluLXdpdGgtY2xvc3VyZS8zXG5cdGNvbnN0IG1vZGVscyA9IE9iamVjdC5rZXlzKGNvbnZlcnNpb25zKTtcblxuXHRmb3IgKGxldCBsZW4gPSBtb2RlbHMubGVuZ3RoLCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0Z3JhcGhbbW9kZWxzW2ldXSA9IHtcblx0XHRcdC8vIGh0dHA6Ly9qc3BlcmYuY29tLzEtdnMtaW5maW5pdHlcblx0XHRcdC8vIG1pY3JvLW9wdCwgYnV0IHRoaXMgaXMgc2ltcGxlLlxuXHRcdFx0ZGlzdGFuY2U6IC0xLFxuXHRcdFx0cGFyZW50OiBudWxsXG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiBncmFwaDtcbn1cblxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQnJlYWR0aC1maXJzdF9zZWFyY2hcbmZ1bmN0aW9uIGRlcml2ZUJGUyhmcm9tTW9kZWwpIHtcblx0Y29uc3QgZ3JhcGggPSBidWlsZEdyYXBoKCk7XG5cdGNvbnN0IHF1ZXVlID0gW2Zyb21Nb2RlbF07IC8vIFVuc2hpZnQgLT4gcXVldWUgLT4gcG9wXG5cblx0Z3JhcGhbZnJvbU1vZGVsXS5kaXN0YW5jZSA9IDA7XG5cblx0d2hpbGUgKHF1ZXVlLmxlbmd0aCkge1xuXHRcdGNvbnN0IGN1cnJlbnQgPSBxdWV1ZS5wb3AoKTtcblx0XHRjb25zdCBhZGphY2VudHMgPSBPYmplY3Qua2V5cyhjb252ZXJzaW9uc1tjdXJyZW50XSk7XG5cblx0XHRmb3IgKGxldCBsZW4gPSBhZGphY2VudHMubGVuZ3RoLCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBhZGphY2VudCA9IGFkamFjZW50c1tpXTtcblx0XHRcdGNvbnN0IG5vZGUgPSBncmFwaFthZGphY2VudF07XG5cblx0XHRcdGlmIChub2RlLmRpc3RhbmNlID09PSAtMSkge1xuXHRcdFx0XHRub2RlLmRpc3RhbmNlID0gZ3JhcGhbY3VycmVudF0uZGlzdGFuY2UgKyAxO1xuXHRcdFx0XHRub2RlLnBhcmVudCA9IGN1cnJlbnQ7XG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoYWRqYWNlbnQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBncmFwaDtcbn1cblxuZnVuY3Rpb24gbGluayhmcm9tLCB0bykge1xuXHRyZXR1cm4gZnVuY3Rpb24gKGFyZ3MpIHtcblx0XHRyZXR1cm4gdG8oZnJvbShhcmdzKSk7XG5cdH07XG59XG5cbmZ1bmN0aW9uIHdyYXBDb252ZXJzaW9uKHRvTW9kZWwsIGdyYXBoKSB7XG5cdGNvbnN0IHBhdGggPSBbZ3JhcGhbdG9Nb2RlbF0ucGFyZW50LCB0b01vZGVsXTtcblx0bGV0IGZuID0gY29udmVyc2lvbnNbZ3JhcGhbdG9Nb2RlbF0ucGFyZW50XVt0b01vZGVsXTtcblxuXHRsZXQgY3VyID0gZ3JhcGhbdG9Nb2RlbF0ucGFyZW50O1xuXHR3aGlsZSAoZ3JhcGhbY3VyXS5wYXJlbnQpIHtcblx0XHRwYXRoLnVuc2hpZnQoZ3JhcGhbY3VyXS5wYXJlbnQpO1xuXHRcdGZuID0gbGluayhjb252ZXJzaW9uc1tncmFwaFtjdXJdLnBhcmVudF1bY3VyXSwgZm4pO1xuXHRcdGN1ciA9IGdyYXBoW2N1cl0ucGFyZW50O1xuXHR9XG5cblx0Zm4uY29udmVyc2lvbiA9IHBhdGg7XG5cdHJldHVybiBmbjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZnJvbU1vZGVsKSB7XG5cdGNvbnN0IGdyYXBoID0gZGVyaXZlQkZTKGZyb21Nb2RlbCk7XG5cdGNvbnN0IGNvbnZlcnNpb24gPSB7fTtcblxuXHRjb25zdCBtb2RlbHMgPSBPYmplY3Qua2V5cyhncmFwaCk7XG5cdGZvciAobGV0IGxlbiA9IG1vZGVscy5sZW5ndGgsIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRjb25zdCB0b01vZGVsID0gbW9kZWxzW2ldO1xuXHRcdGNvbnN0IG5vZGUgPSBncmFwaFt0b01vZGVsXTtcblxuXHRcdGlmIChub2RlLnBhcmVudCA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gTm8gcG9zc2libGUgY29udmVyc2lvbiwgb3IgdGhpcyBub2RlIGlzIHRoZSBzb3VyY2UgbW9kZWwuXG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjb252ZXJzaW9uW3RvTW9kZWxdID0gd3JhcENvbnZlcnNpb24odG9Nb2RlbCwgZ3JhcGgpO1xuXHR9XG5cblx0cmV0dXJuIGNvbnZlcnNpb247XG59O1xuXG4iLCAiY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKCcuL2NvbnZlcnNpb25zJyk7XG5jb25zdCByb3V0ZSA9IHJlcXVpcmUoJy4vcm91dGUnKTtcblxuY29uc3QgY29udmVydCA9IHt9O1xuXG5jb25zdCBtb2RlbHMgPSBPYmplY3Qua2V5cyhjb252ZXJzaW9ucyk7XG5cbmZ1bmN0aW9uIHdyYXBSYXcoZm4pIHtcblx0Y29uc3Qgd3JhcHBlZEZuID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcblx0XHRjb25zdCBhcmcwID0gYXJnc1swXTtcblx0XHRpZiAoYXJnMCA9PT0gdW5kZWZpbmVkIHx8IGFyZzAgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiBhcmcwO1xuXHRcdH1cblxuXHRcdGlmIChhcmcwLmxlbmd0aCA+IDEpIHtcblx0XHRcdGFyZ3MgPSBhcmcwO1xuXHRcdH1cblxuXHRcdHJldHVybiBmbihhcmdzKTtcblx0fTtcblxuXHQvLyBQcmVzZXJ2ZSAuY29udmVyc2lvbiBwcm9wZXJ0eSBpZiB0aGVyZSBpcyBvbmVcblx0aWYgKCdjb252ZXJzaW9uJyBpbiBmbikge1xuXHRcdHdyYXBwZWRGbi5jb252ZXJzaW9uID0gZm4uY29udmVyc2lvbjtcblx0fVxuXG5cdHJldHVybiB3cmFwcGVkRm47XG59XG5cbmZ1bmN0aW9uIHdyYXBSb3VuZGVkKGZuKSB7XG5cdGNvbnN0IHdyYXBwZWRGbiA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG5cdFx0Y29uc3QgYXJnMCA9IGFyZ3NbMF07XG5cblx0XHRpZiAoYXJnMCA9PT0gdW5kZWZpbmVkIHx8IGFyZzAgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiBhcmcwO1xuXHRcdH1cblxuXHRcdGlmIChhcmcwLmxlbmd0aCA+IDEpIHtcblx0XHRcdGFyZ3MgPSBhcmcwO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJlc3VsdCA9IGZuKGFyZ3MpO1xuXG5cdFx0Ly8gV2UncmUgYXNzdW1pbmcgdGhlIHJlc3VsdCBpcyBhbiBhcnJheSBoZXJlLlxuXHRcdC8vIHNlZSBub3RpY2UgaW4gY29udmVyc2lvbnMuanM7IGRvbid0IHVzZSBib3ggdHlwZXNcblx0XHQvLyBpbiBjb252ZXJzaW9uIGZ1bmN0aW9ucy5cblx0XHRpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGZvciAobGV0IGxlbiA9IHJlc3VsdC5sZW5ndGgsIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdFx0cmVzdWx0W2ldID0gTWF0aC5yb3VuZChyZXN1bHRbaV0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH07XG5cblx0Ly8gUHJlc2VydmUgLmNvbnZlcnNpb24gcHJvcGVydHkgaWYgdGhlcmUgaXMgb25lXG5cdGlmICgnY29udmVyc2lvbicgaW4gZm4pIHtcblx0XHR3cmFwcGVkRm4uY29udmVyc2lvbiA9IGZuLmNvbnZlcnNpb247XG5cdH1cblxuXHRyZXR1cm4gd3JhcHBlZEZuO1xufVxuXG5tb2RlbHMuZm9yRWFjaChmcm9tTW9kZWwgPT4ge1xuXHRjb252ZXJ0W2Zyb21Nb2RlbF0gPSB7fTtcblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udmVydFtmcm9tTW9kZWxdLCAnY2hhbm5lbHMnLCB7dmFsdWU6IGNvbnZlcnNpb25zW2Zyb21Nb2RlbF0uY2hhbm5lbHN9KTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnZlcnRbZnJvbU1vZGVsXSwgJ2xhYmVscycsIHt2YWx1ZTogY29udmVyc2lvbnNbZnJvbU1vZGVsXS5sYWJlbHN9KTtcblxuXHRjb25zdCByb3V0ZXMgPSByb3V0ZShmcm9tTW9kZWwpO1xuXHRjb25zdCByb3V0ZU1vZGVscyA9IE9iamVjdC5rZXlzKHJvdXRlcyk7XG5cblx0cm91dGVNb2RlbHMuZm9yRWFjaCh0b01vZGVsID0+IHtcblx0XHRjb25zdCBmbiA9IHJvdXRlc1t0b01vZGVsXTtcblxuXHRcdGNvbnZlcnRbZnJvbU1vZGVsXVt0b01vZGVsXSA9IHdyYXBSb3VuZGVkKGZuKTtcblx0XHRjb252ZXJ0W2Zyb21Nb2RlbF1bdG9Nb2RlbF0ucmF3ID0gd3JhcFJhdyhmbik7XG5cdH0pO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gY29udmVydDtcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHdyYXBBbnNpMTYgPSAoZm4sIG9mZnNldCkgPT4gKC4uLmFyZ3MpID0+IHtcblx0Y29uc3QgY29kZSA9IGZuKC4uLmFyZ3MpO1xuXHRyZXR1cm4gYFxcdTAwMUJbJHtjb2RlICsgb2Zmc2V0fW1gO1xufTtcblxuY29uc3Qgd3JhcEFuc2kyNTYgPSAoZm4sIG9mZnNldCkgPT4gKC4uLmFyZ3MpID0+IHtcblx0Y29uc3QgY29kZSA9IGZuKC4uLmFyZ3MpO1xuXHRyZXR1cm4gYFxcdTAwMUJbJHszOCArIG9mZnNldH07NTske2NvZGV9bWA7XG59O1xuXG5jb25zdCB3cmFwQW5zaTE2bSA9IChmbiwgb2Zmc2V0KSA9PiAoLi4uYXJncykgPT4ge1xuXHRjb25zdCByZ2IgPSBmbiguLi5hcmdzKTtcblx0cmV0dXJuIGBcXHUwMDFCWyR7MzggKyBvZmZzZXR9OzI7JHtyZ2JbMF19OyR7cmdiWzFdfTske3JnYlsyXX1tYDtcbn07XG5cbmNvbnN0IGFuc2kyYW5zaSA9IG4gPT4gbjtcbmNvbnN0IHJnYjJyZ2IgPSAociwgZywgYikgPT4gW3IsIGcsIGJdO1xuXG5jb25zdCBzZXRMYXp5UHJvcGVydHkgPSAob2JqZWN0LCBwcm9wZXJ0eSwgZ2V0KSA9PiB7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCB7XG5cdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IGdldCgpO1xuXG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwge1xuXHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH0sXG5cdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRjb25maWd1cmFibGU6IHRydWVcblx0fSk7XG59O1xuXG4vKiogQHR5cGUge3R5cGVvZiBpbXBvcnQoJ2NvbG9yLWNvbnZlcnQnKX0gKi9cbmxldCBjb2xvckNvbnZlcnQ7XG5jb25zdCBtYWtlRHluYW1pY1N0eWxlcyA9ICh3cmFwLCB0YXJnZXRTcGFjZSwgaWRlbnRpdHksIGlzQmFja2dyb3VuZCkgPT4ge1xuXHRpZiAoY29sb3JDb252ZXJ0ID09PSB1bmRlZmluZWQpIHtcblx0XHRjb2xvckNvbnZlcnQgPSByZXF1aXJlKCdjb2xvci1jb252ZXJ0Jyk7XG5cdH1cblxuXHRjb25zdCBvZmZzZXQgPSBpc0JhY2tncm91bmQgPyAxMCA6IDA7XG5cdGNvbnN0IHN0eWxlcyA9IHt9O1xuXG5cdGZvciAoY29uc3QgW3NvdXJjZVNwYWNlLCBzdWl0ZV0gb2YgT2JqZWN0LmVudHJpZXMoY29sb3JDb252ZXJ0KSkge1xuXHRcdGNvbnN0IG5hbWUgPSBzb3VyY2VTcGFjZSA9PT0gJ2Fuc2kxNicgPyAnYW5zaScgOiBzb3VyY2VTcGFjZTtcblx0XHRpZiAoc291cmNlU3BhY2UgPT09IHRhcmdldFNwYWNlKSB7XG5cdFx0XHRzdHlsZXNbbmFtZV0gPSB3cmFwKGlkZW50aXR5LCBvZmZzZXQpO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHN1aXRlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0c3R5bGVzW25hbWVdID0gd3JhcChzdWl0ZVt0YXJnZXRTcGFjZV0sIG9mZnNldCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHN0eWxlcztcbn07XG5cbmZ1bmN0aW9uIGFzc2VtYmxlU3R5bGVzKCkge1xuXHRjb25zdCBjb2RlcyA9IG5ldyBNYXAoKTtcblx0Y29uc3Qgc3R5bGVzID0ge1xuXHRcdG1vZGlmaWVyOiB7XG5cdFx0XHRyZXNldDogWzAsIDBdLFxuXHRcdFx0Ly8gMjEgaXNuJ3Qgd2lkZWx5IHN1cHBvcnRlZCBhbmQgMjIgZG9lcyB0aGUgc2FtZSB0aGluZ1xuXHRcdFx0Ym9sZDogWzEsIDIyXSxcblx0XHRcdGRpbTogWzIsIDIyXSxcblx0XHRcdGl0YWxpYzogWzMsIDIzXSxcblx0XHRcdHVuZGVybGluZTogWzQsIDI0XSxcblx0XHRcdGludmVyc2U6IFs3LCAyN10sXG5cdFx0XHRoaWRkZW46IFs4LCAyOF0sXG5cdFx0XHRzdHJpa2V0aHJvdWdoOiBbOSwgMjldXG5cdFx0fSxcblx0XHRjb2xvcjoge1xuXHRcdFx0YmxhY2s6IFszMCwgMzldLFxuXHRcdFx0cmVkOiBbMzEsIDM5XSxcblx0XHRcdGdyZWVuOiBbMzIsIDM5XSxcblx0XHRcdHllbGxvdzogWzMzLCAzOV0sXG5cdFx0XHRibHVlOiBbMzQsIDM5XSxcblx0XHRcdG1hZ2VudGE6IFszNSwgMzldLFxuXHRcdFx0Y3lhbjogWzM2LCAzOV0sXG5cdFx0XHR3aGl0ZTogWzM3LCAzOV0sXG5cblx0XHRcdC8vIEJyaWdodCBjb2xvclxuXHRcdFx0YmxhY2tCcmlnaHQ6IFs5MCwgMzldLFxuXHRcdFx0cmVkQnJpZ2h0OiBbOTEsIDM5XSxcblx0XHRcdGdyZWVuQnJpZ2h0OiBbOTIsIDM5XSxcblx0XHRcdHllbGxvd0JyaWdodDogWzkzLCAzOV0sXG5cdFx0XHRibHVlQnJpZ2h0OiBbOTQsIDM5XSxcblx0XHRcdG1hZ2VudGFCcmlnaHQ6IFs5NSwgMzldLFxuXHRcdFx0Y3lhbkJyaWdodDogWzk2LCAzOV0sXG5cdFx0XHR3aGl0ZUJyaWdodDogWzk3LCAzOV1cblx0XHR9LFxuXHRcdGJnQ29sb3I6IHtcblx0XHRcdGJnQmxhY2s6IFs0MCwgNDldLFxuXHRcdFx0YmdSZWQ6IFs0MSwgNDldLFxuXHRcdFx0YmdHcmVlbjogWzQyLCA0OV0sXG5cdFx0XHRiZ1llbGxvdzogWzQzLCA0OV0sXG5cdFx0XHRiZ0JsdWU6IFs0NCwgNDldLFxuXHRcdFx0YmdNYWdlbnRhOiBbNDUsIDQ5XSxcblx0XHRcdGJnQ3lhbjogWzQ2LCA0OV0sXG5cdFx0XHRiZ1doaXRlOiBbNDcsIDQ5XSxcblxuXHRcdFx0Ly8gQnJpZ2h0IGNvbG9yXG5cdFx0XHRiZ0JsYWNrQnJpZ2h0OiBbMTAwLCA0OV0sXG5cdFx0XHRiZ1JlZEJyaWdodDogWzEwMSwgNDldLFxuXHRcdFx0YmdHcmVlbkJyaWdodDogWzEwMiwgNDldLFxuXHRcdFx0YmdZZWxsb3dCcmlnaHQ6IFsxMDMsIDQ5XSxcblx0XHRcdGJnQmx1ZUJyaWdodDogWzEwNCwgNDldLFxuXHRcdFx0YmdNYWdlbnRhQnJpZ2h0OiBbMTA1LCA0OV0sXG5cdFx0XHRiZ0N5YW5CcmlnaHQ6IFsxMDYsIDQ5XSxcblx0XHRcdGJnV2hpdGVCcmlnaHQ6IFsxMDcsIDQ5XVxuXHRcdH1cblx0fTtcblxuXHQvLyBBbGlhcyBicmlnaHQgYmxhY2sgYXMgZ3JheSAoYW5kIGdyZXkpXG5cdHN0eWxlcy5jb2xvci5ncmF5ID0gc3R5bGVzLmNvbG9yLmJsYWNrQnJpZ2h0O1xuXHRzdHlsZXMuYmdDb2xvci5iZ0dyYXkgPSBzdHlsZXMuYmdDb2xvci5iZ0JsYWNrQnJpZ2h0O1xuXHRzdHlsZXMuY29sb3IuZ3JleSA9IHN0eWxlcy5jb2xvci5ibGFja0JyaWdodDtcblx0c3R5bGVzLmJnQ29sb3IuYmdHcmV5ID0gc3R5bGVzLmJnQ29sb3IuYmdCbGFja0JyaWdodDtcblxuXHRmb3IgKGNvbnN0IFtncm91cE5hbWUsIGdyb3VwXSBvZiBPYmplY3QuZW50cmllcyhzdHlsZXMpKSB7XG5cdFx0Zm9yIChjb25zdCBbc3R5bGVOYW1lLCBzdHlsZV0gb2YgT2JqZWN0LmVudHJpZXMoZ3JvdXApKSB7XG5cdFx0XHRzdHlsZXNbc3R5bGVOYW1lXSA9IHtcblx0XHRcdFx0b3BlbjogYFxcdTAwMUJbJHtzdHlsZVswXX1tYCxcblx0XHRcdFx0Y2xvc2U6IGBcXHUwMDFCWyR7c3R5bGVbMV19bWBcblx0XHRcdH07XG5cblx0XHRcdGdyb3VwW3N0eWxlTmFtZV0gPSBzdHlsZXNbc3R5bGVOYW1lXTtcblxuXHRcdFx0Y29kZXMuc2V0KHN0eWxlWzBdLCBzdHlsZVsxXSk7XG5cdFx0fVxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHN0eWxlcywgZ3JvdXBOYW1lLCB7XG5cdFx0XHR2YWx1ZTogZ3JvdXAsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG5cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHN0eWxlcywgJ2NvZGVzJywge1xuXHRcdHZhbHVlOiBjb2Rlcyxcblx0XHRlbnVtZXJhYmxlOiBmYWxzZVxuXHR9KTtcblxuXHRzdHlsZXMuY29sb3IuY2xvc2UgPSAnXFx1MDAxQlszOW0nO1xuXHRzdHlsZXMuYmdDb2xvci5jbG9zZSA9ICdcXHUwMDFCWzQ5bSc7XG5cblx0c2V0TGF6eVByb3BlcnR5KHN0eWxlcy5jb2xvciwgJ2Fuc2knLCAoKSA9PiBtYWtlRHluYW1pY1N0eWxlcyh3cmFwQW5zaTE2LCAnYW5zaTE2JywgYW5zaTJhbnNpLCBmYWxzZSkpO1xuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmNvbG9yLCAnYW5zaTI1NicsICgpID0+IG1ha2VEeW5hbWljU3R5bGVzKHdyYXBBbnNpMjU2LCAnYW5zaTI1NicsIGFuc2kyYW5zaSwgZmFsc2UpKTtcblx0c2V0TGF6eVByb3BlcnR5KHN0eWxlcy5jb2xvciwgJ2Fuc2kxNm0nLCAoKSA9PiBtYWtlRHluYW1pY1N0eWxlcyh3cmFwQW5zaTE2bSwgJ3JnYicsIHJnYjJyZ2IsIGZhbHNlKSk7XG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuYmdDb2xvciwgJ2Fuc2knLCAoKSA9PiBtYWtlRHluYW1pY1N0eWxlcyh3cmFwQW5zaTE2LCAnYW5zaTE2JywgYW5zaTJhbnNpLCB0cnVlKSk7XG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuYmdDb2xvciwgJ2Fuc2kyNTYnLCAoKSA9PiBtYWtlRHluYW1pY1N0eWxlcyh3cmFwQW5zaTI1NiwgJ2Fuc2kyNTYnLCBhbnNpMmFuc2ksIHRydWUpKTtcblx0c2V0TGF6eVByb3BlcnR5KHN0eWxlcy5iZ0NvbG9yLCAnYW5zaTE2bScsICgpID0+IG1ha2VEeW5hbWljU3R5bGVzKHdyYXBBbnNpMTZtLCAncmdiJywgcmdiMnJnYiwgdHJ1ZSkpO1xuXG5cdHJldHVybiBzdHlsZXM7XG59XG5cbi8vIE1ha2UgdGhlIGV4cG9ydCBpbW11dGFibGVcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsICdleHBvcnRzJywge1xuXHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRnZXQ6IGFzc2VtYmxlU3R5bGVzXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gKGZsYWcsIGFyZ3YgPSBwcm9jZXNzLmFyZ3YpID0+IHtcblx0Y29uc3QgcHJlZml4ID0gZmxhZy5zdGFydHNXaXRoKCctJykgPyAnJyA6IChmbGFnLmxlbmd0aCA9PT0gMSA/ICctJyA6ICctLScpO1xuXHRjb25zdCBwb3NpdGlvbiA9IGFyZ3YuaW5kZXhPZihwcmVmaXggKyBmbGFnKTtcblx0Y29uc3QgdGVybWluYXRvclBvc2l0aW9uID0gYXJndi5pbmRleE9mKCctLScpO1xuXHRyZXR1cm4gcG9zaXRpb24gIT09IC0xICYmICh0ZXJtaW5hdG9yUG9zaXRpb24gPT09IC0xIHx8IHBvc2l0aW9uIDwgdGVybWluYXRvclBvc2l0aW9uKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuY29uc3Qgb3MgPSByZXF1aXJlKCdvcycpO1xuY29uc3QgdHR5ID0gcmVxdWlyZSgndHR5Jyk7XG5jb25zdCBoYXNGbGFnID0gcmVxdWlyZSgnaGFzLWZsYWcnKTtcblxuY29uc3Qge2Vudn0gPSBwcm9jZXNzO1xuXG5sZXQgZm9yY2VDb2xvcjtcbmlmIChoYXNGbGFnKCduby1jb2xvcicpIHx8XG5cdGhhc0ZsYWcoJ25vLWNvbG9ycycpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPWZhbHNlJykgfHxcblx0aGFzRmxhZygnY29sb3I9bmV2ZXInKSkge1xuXHRmb3JjZUNvbG9yID0gMDtcbn0gZWxzZSBpZiAoaGFzRmxhZygnY29sb3InKSB8fFxuXHRoYXNGbGFnKCdjb2xvcnMnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj10cnVlJykgfHxcblx0aGFzRmxhZygnY29sb3I9YWx3YXlzJykpIHtcblx0Zm9yY2VDb2xvciA9IDE7XG59XG5cbmlmICgnRk9SQ0VfQ09MT1InIGluIGVudikge1xuXHRpZiAoZW52LkZPUkNFX0NPTE9SID09PSAndHJ1ZScpIHtcblx0XHRmb3JjZUNvbG9yID0gMTtcblx0fSBlbHNlIGlmIChlbnYuRk9SQ0VfQ09MT1IgPT09ICdmYWxzZScpIHtcblx0XHRmb3JjZUNvbG9yID0gMDtcblx0fSBlbHNlIHtcblx0XHRmb3JjZUNvbG9yID0gZW52LkZPUkNFX0NPTE9SLmxlbmd0aCA9PT0gMCA/IDEgOiBNYXRoLm1pbihwYXJzZUludChlbnYuRk9SQ0VfQ09MT1IsIDEwKSwgMyk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpIHtcblx0aWYgKGxldmVsID09PSAwKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRsZXZlbCxcblx0XHRoYXNCYXNpYzogdHJ1ZSxcblx0XHRoYXMyNTY6IGxldmVsID49IDIsXG5cdFx0aGFzMTZtOiBsZXZlbCA+PSAzXG5cdH07XG59XG5cbmZ1bmN0aW9uIHN1cHBvcnRzQ29sb3IoaGF2ZVN0cmVhbSwgc3RyZWFtSXNUVFkpIHtcblx0aWYgKGZvcmNlQ29sb3IgPT09IDApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGlmIChoYXNGbGFnKCdjb2xvcj0xNm0nKSB8fFxuXHRcdGhhc0ZsYWcoJ2NvbG9yPWZ1bGwnKSB8fFxuXHRcdGhhc0ZsYWcoJ2NvbG9yPXRydWVjb2xvcicpKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cblxuXHRpZiAoaGFzRmxhZygnY29sb3I9MjU2JykpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdGlmIChoYXZlU3RyZWFtICYmICFzdHJlYW1Jc1RUWSAmJiBmb3JjZUNvbG9yID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGNvbnN0IG1pbiA9IGZvcmNlQ29sb3IgfHwgMDtcblxuXHRpZiAoZW52LlRFUk0gPT09ICdkdW1iJykge1xuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuXHRcdC8vIFdpbmRvd3MgMTAgYnVpbGQgMTA1ODYgaXMgdGhlIGZpcnN0IFdpbmRvd3MgcmVsZWFzZSB0aGF0IHN1cHBvcnRzIDI1NiBjb2xvcnMuXG5cdFx0Ly8gV2luZG93cyAxMCBidWlsZCAxNDkzMSBpcyB0aGUgZmlyc3QgcmVsZWFzZSB0aGF0IHN1cHBvcnRzIDE2bS9UcnVlQ29sb3IuXG5cdFx0Y29uc3Qgb3NSZWxlYXNlID0gb3MucmVsZWFzZSgpLnNwbGl0KCcuJyk7XG5cdFx0aWYgKFxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVswXSkgPj0gMTAgJiZcblx0XHRcdE51bWJlcihvc1JlbGVhc2VbMl0pID49IDEwNTg2XG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gTnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTQ5MzEgPyAzIDogMjtcblx0XHR9XG5cblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdGlmICgnQ0knIGluIGVudikge1xuXHRcdGlmIChbJ1RSQVZJUycsICdDSVJDTEVDSScsICdBUFBWRVlPUicsICdHSVRMQUJfQ0knLCAnR0lUSFVCX0FDVElPTlMnLCAnQlVJTERLSVRFJ10uc29tZShzaWduID0+IHNpZ24gaW4gZW52KSB8fCBlbnYuQ0lfTkFNRSA9PT0gJ2NvZGVzaGlwJykge1xuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1pbjtcblx0fVxuXG5cdGlmICgnVEVBTUNJVFlfVkVSU0lPTicgaW4gZW52KSB7XG5cdFx0cmV0dXJuIC9eKDlcXC4oMCpbMS05XVxcZCopXFwufFxcZHsyLH1cXC4pLy50ZXN0KGVudi5URUFNQ0lUWV9WRVJTSU9OKSA/IDEgOiAwO1xuXHR9XG5cblx0aWYgKGVudi5DT0xPUlRFUk0gPT09ICd0cnVlY29sb3InKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cblxuXHRpZiAoJ1RFUk1fUFJPR1JBTScgaW4gZW52KSB7XG5cdFx0Y29uc3QgdmVyc2lvbiA9IHBhcnNlSW50KChlbnYuVEVSTV9QUk9HUkFNX1ZFUlNJT04gfHwgJycpLnNwbGl0KCcuJylbMF0sIDEwKTtcblxuXHRcdHN3aXRjaCAoZW52LlRFUk1fUFJPR1JBTSkge1xuXHRcdFx0Y2FzZSAnaVRlcm0uYXBwJzpcblx0XHRcdFx0cmV0dXJuIHZlcnNpb24gPj0gMyA/IDMgOiAyO1xuXHRcdFx0Y2FzZSAnQXBwbGVfVGVybWluYWwnOlxuXHRcdFx0XHRyZXR1cm4gMjtcblx0XHRcdC8vIE5vIGRlZmF1bHRcblx0XHR9XG5cdH1cblxuXHRpZiAoLy0yNTYoY29sb3IpPyQvaS50ZXN0KGVudi5URVJNKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cblx0aWYgKC9ec2NyZWVufF54dGVybXxednQxMDB8XnZ0MjIwfF5yeHZ0fGNvbG9yfGFuc2l8Y3lnd2lufGxpbnV4L2kudGVzdChlbnYuVEVSTSkpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdGlmICgnQ09MT1JURVJNJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdHJldHVybiBtaW47XG59XG5cbmZ1bmN0aW9uIGdldFN1cHBvcnRMZXZlbChzdHJlYW0pIHtcblx0Y29uc3QgbGV2ZWwgPSBzdXBwb3J0c0NvbG9yKHN0cmVhbSwgc3RyZWFtICYmIHN0cmVhbS5pc1RUWSk7XG5cdHJldHVybiB0cmFuc2xhdGVMZXZlbChsZXZlbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRzdXBwb3J0c0NvbG9yOiBnZXRTdXBwb3J0TGV2ZWwsXG5cdHN0ZG91dDogdHJhbnNsYXRlTGV2ZWwoc3VwcG9ydHNDb2xvcih0cnVlLCB0dHkuaXNhdHR5KDEpKSksXG5cdHN0ZGVycjogdHJhbnNsYXRlTGV2ZWwoc3VwcG9ydHNDb2xvcih0cnVlLCB0dHkuaXNhdHR5KDIpKSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBzdHJpbmdSZXBsYWNlQWxsID0gKHN0cmluZywgc3Vic3RyaW5nLCByZXBsYWNlcikgPT4ge1xuXHRsZXQgaW5kZXggPSBzdHJpbmcuaW5kZXhPZihzdWJzdHJpbmcpO1xuXHRpZiAoaW5kZXggPT09IC0xKSB7XG5cdFx0cmV0dXJuIHN0cmluZztcblx0fVxuXG5cdGNvbnN0IHN1YnN0cmluZ0xlbmd0aCA9IHN1YnN0cmluZy5sZW5ndGg7XG5cdGxldCBlbmRJbmRleCA9IDA7XG5cdGxldCByZXR1cm5WYWx1ZSA9ICcnO1xuXHRkbyB7XG5cdFx0cmV0dXJuVmFsdWUgKz0gc3RyaW5nLnN1YnN0cihlbmRJbmRleCwgaW5kZXggLSBlbmRJbmRleCkgKyBzdWJzdHJpbmcgKyByZXBsYWNlcjtcblx0XHRlbmRJbmRleCA9IGluZGV4ICsgc3Vic3RyaW5nTGVuZ3RoO1xuXHRcdGluZGV4ID0gc3RyaW5nLmluZGV4T2Yoc3Vic3RyaW5nLCBlbmRJbmRleCk7XG5cdH0gd2hpbGUgKGluZGV4ICE9PSAtMSk7XG5cblx0cmV0dXJuVmFsdWUgKz0gc3RyaW5nLnN1YnN0cihlbmRJbmRleCk7XG5cdHJldHVybiByZXR1cm5WYWx1ZTtcbn07XG5cbmNvbnN0IHN0cmluZ0VuY2FzZUNSTEZXaXRoRmlyc3RJbmRleCA9IChzdHJpbmcsIHByZWZpeCwgcG9zdGZpeCwgaW5kZXgpID0+IHtcblx0bGV0IGVuZEluZGV4ID0gMDtcblx0bGV0IHJldHVyblZhbHVlID0gJyc7XG5cdGRvIHtcblx0XHRjb25zdCBnb3RDUiA9IHN0cmluZ1tpbmRleCAtIDFdID09PSAnXFxyJztcblx0XHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc3Vic3RyKGVuZEluZGV4LCAoZ290Q1IgPyBpbmRleCAtIDEgOiBpbmRleCkgLSBlbmRJbmRleCkgKyBwcmVmaXggKyAoZ290Q1IgPyAnXFxyXFxuJyA6ICdcXG4nKSArIHBvc3RmaXg7XG5cdFx0ZW5kSW5kZXggPSBpbmRleCArIDE7XG5cdFx0aW5kZXggPSBzdHJpbmcuaW5kZXhPZignXFxuJywgZW5kSW5kZXgpO1xuXHR9IHdoaWxlIChpbmRleCAhPT0gLTEpO1xuXG5cdHJldHVyblZhbHVlICs9IHN0cmluZy5zdWJzdHIoZW5kSW5kZXgpO1xuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0c3RyaW5nUmVwbGFjZUFsbCxcblx0c3RyaW5nRW5jYXNlQ1JMRldpdGhGaXJzdEluZGV4XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IFRFTVBMQVRFX1JFR0VYID0gLyg/OlxcXFwodSg/OlthLWZcXGRdezR9fFxce1thLWZcXGRdezEsNn1cXH0pfHhbYS1mXFxkXXsyfXwuKSl8KD86XFx7KH4pPyhcXHcrKD86XFwoW14pXSpcXCkpPyg/OlxcLlxcdysoPzpcXChbXildKlxcKSk/KSopKD86WyBcXHRdfCg/PVxccj9cXG4pKSl8KFxcfSl8KCg/Oi58W1xcclxcblxcZl0pKz8pL2dpO1xuY29uc3QgU1RZTEVfUkVHRVggPSAvKD86XnxcXC4pKFxcdyspKD86XFwoKFteKV0qKVxcKSk/L2c7XG5jb25zdCBTVFJJTkdfUkVHRVggPSAvXihbJ1wiXSkoKD86XFxcXC58KD8hXFwxKVteXFxcXF0pKilcXDEkLztcbmNvbnN0IEVTQ0FQRV9SRUdFWCA9IC9cXFxcKHUoPzpbYS1mXFxkXXs0fXx7W2EtZlxcZF17MSw2fX0pfHhbYS1mXFxkXXsyfXwuKXwoW15cXFxcXSkvZ2k7XG5cbmNvbnN0IEVTQ0FQRVMgPSBuZXcgTWFwKFtcblx0WyduJywgJ1xcbiddLFxuXHRbJ3InLCAnXFxyJ10sXG5cdFsndCcsICdcXHQnXSxcblx0WydiJywgJ1xcYiddLFxuXHRbJ2YnLCAnXFxmJ10sXG5cdFsndicsICdcXHYnXSxcblx0WycwJywgJ1xcMCddLFxuXHRbJ1xcXFwnLCAnXFxcXCddLFxuXHRbJ2UnLCAnXFx1MDAxQiddLFxuXHRbJ2EnLCAnXFx1MDAwNyddXG5dKTtcblxuZnVuY3Rpb24gdW5lc2NhcGUoYykge1xuXHRjb25zdCB1ID0gY1swXSA9PT0gJ3UnO1xuXHRjb25zdCBicmFja2V0ID0gY1sxXSA9PT0gJ3snO1xuXG5cdGlmICgodSAmJiAhYnJhY2tldCAmJiBjLmxlbmd0aCA9PT0gNSkgfHwgKGNbMF0gPT09ICd4JyAmJiBjLmxlbmd0aCA9PT0gMykpIHtcblx0XHRyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChjLnNsaWNlKDEpLCAxNikpO1xuXHR9XG5cblx0aWYgKHUgJiYgYnJhY2tldCkge1xuXHRcdHJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludChwYXJzZUludChjLnNsaWNlKDIsIC0xKSwgMTYpKTtcblx0fVxuXG5cdHJldHVybiBFU0NBUEVTLmdldChjKSB8fCBjO1xufVxuXG5mdW5jdGlvbiBwYXJzZUFyZ3VtZW50cyhuYW1lLCBhcmd1bWVudHNfKSB7XG5cdGNvbnN0IHJlc3VsdHMgPSBbXTtcblx0Y29uc3QgY2h1bmtzID0gYXJndW1lbnRzXy50cmltKCkuc3BsaXQoL1xccyosXFxzKi9nKTtcblx0bGV0IG1hdGNoZXM7XG5cblx0Zm9yIChjb25zdCBjaHVuayBvZiBjaHVua3MpIHtcblx0XHRjb25zdCBudW1iZXIgPSBOdW1iZXIoY2h1bmspO1xuXHRcdGlmICghTnVtYmVyLmlzTmFOKG51bWJlcikpIHtcblx0XHRcdHJlc3VsdHMucHVzaChudW1iZXIpO1xuXHRcdH0gZWxzZSBpZiAoKG1hdGNoZXMgPSBjaHVuay5tYXRjaChTVFJJTkdfUkVHRVgpKSkge1xuXHRcdFx0cmVzdWx0cy5wdXNoKG1hdGNoZXNbMl0ucmVwbGFjZShFU0NBUEVfUkVHRVgsIChtLCBlc2NhcGUsIGNoYXJhY3RlcikgPT4gZXNjYXBlID8gdW5lc2NhcGUoZXNjYXBlKSA6IGNoYXJhY3RlcikpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgQ2hhbGsgdGVtcGxhdGUgc3R5bGUgYXJndW1lbnQ6ICR7Y2h1bmt9IChpbiBzdHlsZSAnJHtuYW1lfScpYCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU3R5bGUoc3R5bGUpIHtcblx0U1RZTEVfUkVHRVgubGFzdEluZGV4ID0gMDtcblxuXHRjb25zdCByZXN1bHRzID0gW107XG5cdGxldCBtYXRjaGVzO1xuXG5cdHdoaWxlICgobWF0Y2hlcyA9IFNUWUxFX1JFR0VYLmV4ZWMoc3R5bGUpKSAhPT0gbnVsbCkge1xuXHRcdGNvbnN0IG5hbWUgPSBtYXRjaGVzWzFdO1xuXG5cdFx0aWYgKG1hdGNoZXNbMl0pIHtcblx0XHRcdGNvbnN0IGFyZ3MgPSBwYXJzZUFyZ3VtZW50cyhuYW1lLCBtYXRjaGVzWzJdKTtcblx0XHRcdHJlc3VsdHMucHVzaChbbmFtZV0uY29uY2F0KGFyZ3MpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0cy5wdXNoKFtuYW1lXSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkU3R5bGUoY2hhbGssIHN0eWxlcykge1xuXHRjb25zdCBlbmFibGVkID0ge307XG5cblx0Zm9yIChjb25zdCBsYXllciBvZiBzdHlsZXMpIHtcblx0XHRmb3IgKGNvbnN0IHN0eWxlIG9mIGxheWVyLnN0eWxlcykge1xuXHRcdFx0ZW5hYmxlZFtzdHlsZVswXV0gPSBsYXllci5pbnZlcnNlID8gbnVsbCA6IHN0eWxlLnNsaWNlKDEpO1xuXHRcdH1cblx0fVxuXG5cdGxldCBjdXJyZW50ID0gY2hhbGs7XG5cdGZvciAoY29uc3QgW3N0eWxlTmFtZSwgc3R5bGVzXSBvZiBPYmplY3QuZW50cmllcyhlbmFibGVkKSkge1xuXHRcdGlmICghQXJyYXkuaXNBcnJheShzdHlsZXMpKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoIShzdHlsZU5hbWUgaW4gY3VycmVudCkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgVW5rbm93biBDaGFsayBzdHlsZTogJHtzdHlsZU5hbWV9YCk7XG5cdFx0fVxuXG5cdFx0Y3VycmVudCA9IHN0eWxlcy5sZW5ndGggPiAwID8gY3VycmVudFtzdHlsZU5hbWVdKC4uLnN0eWxlcykgOiBjdXJyZW50W3N0eWxlTmFtZV07XG5cdH1cblxuXHRyZXR1cm4gY3VycmVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSAoY2hhbGssIHRlbXBvcmFyeSkgPT4ge1xuXHRjb25zdCBzdHlsZXMgPSBbXTtcblx0Y29uc3QgY2h1bmtzID0gW107XG5cdGxldCBjaHVuayA9IFtdO1xuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtcGFyYW1zXG5cdHRlbXBvcmFyeS5yZXBsYWNlKFRFTVBMQVRFX1JFR0VYLCAobSwgZXNjYXBlQ2hhcmFjdGVyLCBpbnZlcnNlLCBzdHlsZSwgY2xvc2UsIGNoYXJhY3RlcikgPT4ge1xuXHRcdGlmIChlc2NhcGVDaGFyYWN0ZXIpIHtcblx0XHRcdGNodW5rLnB1c2godW5lc2NhcGUoZXNjYXBlQ2hhcmFjdGVyKSk7XG5cdFx0fSBlbHNlIGlmIChzdHlsZSkge1xuXHRcdFx0Y29uc3Qgc3RyaW5nID0gY2h1bmsuam9pbignJyk7XG5cdFx0XHRjaHVuayA9IFtdO1xuXHRcdFx0Y2h1bmtzLnB1c2goc3R5bGVzLmxlbmd0aCA9PT0gMCA/IHN0cmluZyA6IGJ1aWxkU3R5bGUoY2hhbGssIHN0eWxlcykoc3RyaW5nKSk7XG5cdFx0XHRzdHlsZXMucHVzaCh7aW52ZXJzZSwgc3R5bGVzOiBwYXJzZVN0eWxlKHN0eWxlKX0pO1xuXHRcdH0gZWxzZSBpZiAoY2xvc2UpIHtcblx0XHRcdGlmIChzdHlsZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignRm91bmQgZXh0cmFuZW91cyB9IGluIENoYWxrIHRlbXBsYXRlIGxpdGVyYWwnKTtcblx0XHRcdH1cblxuXHRcdFx0Y2h1bmtzLnB1c2goYnVpbGRTdHlsZShjaGFsaywgc3R5bGVzKShjaHVuay5qb2luKCcnKSkpO1xuXHRcdFx0Y2h1bmsgPSBbXTtcblx0XHRcdHN0eWxlcy5wb3AoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2h1bmsucHVzaChjaGFyYWN0ZXIpO1xuXHRcdH1cblx0fSk7XG5cblx0Y2h1bmtzLnB1c2goY2h1bmsuam9pbignJykpO1xuXG5cdGlmIChzdHlsZXMubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGVyck1lc3NhZ2UgPSBgQ2hhbGsgdGVtcGxhdGUgbGl0ZXJhbCBpcyBtaXNzaW5nICR7c3R5bGVzLmxlbmd0aH0gY2xvc2luZyBicmFja2V0JHtzdHlsZXMubGVuZ3RoID09PSAxID8gJycgOiAncyd9IChcXGB9XFxgKWA7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGVyck1lc3NhZ2UpO1xuXHR9XG5cblx0cmV0dXJuIGNodW5rcy5qb2luKCcnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuY29uc3QgYW5zaVN0eWxlcyA9IHJlcXVpcmUoJ2Fuc2ktc3R5bGVzJyk7XG5jb25zdCB7c3Rkb3V0OiBzdGRvdXRDb2xvciwgc3RkZXJyOiBzdGRlcnJDb2xvcn0gPSByZXF1aXJlKCdzdXBwb3J0cy1jb2xvcicpO1xuY29uc3Qge1xuXHRzdHJpbmdSZXBsYWNlQWxsLFxuXHRzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXhcbn0gPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuY29uc3Qge2lzQXJyYXl9ID0gQXJyYXk7XG5cbi8vIGBzdXBwb3J0c0NvbG9yLmxldmVsYCBcdTIxOTIgYGFuc2lTdHlsZXMuY29sb3JbbmFtZV1gIG1hcHBpbmdcbmNvbnN0IGxldmVsTWFwcGluZyA9IFtcblx0J2Fuc2knLFxuXHQnYW5zaScsXG5cdCdhbnNpMjU2Jyxcblx0J2Fuc2kxNm0nXG5dO1xuXG5jb25zdCBzdHlsZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG5jb25zdCBhcHBseU9wdGlvbnMgPSAob2JqZWN0LCBvcHRpb25zID0ge30pID0+IHtcblx0aWYgKG9wdGlvbnMubGV2ZWwgJiYgIShOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMubGV2ZWwpICYmIG9wdGlvbnMubGV2ZWwgPj0gMCAmJiBvcHRpb25zLmxldmVsIDw9IDMpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdUaGUgYGxldmVsYCBvcHRpb24gc2hvdWxkIGJlIGFuIGludGVnZXIgZnJvbSAwIHRvIDMnKTtcblx0fVxuXG5cdC8vIERldGVjdCBsZXZlbCBpZiBub3Qgc2V0IG1hbnVhbGx5XG5cdGNvbnN0IGNvbG9yTGV2ZWwgPSBzdGRvdXRDb2xvciA/IHN0ZG91dENvbG9yLmxldmVsIDogMDtcblx0b2JqZWN0LmxldmVsID0gb3B0aW9ucy5sZXZlbCA9PT0gdW5kZWZpbmVkID8gY29sb3JMZXZlbCA6IG9wdGlvbnMubGV2ZWw7XG59O1xuXG5jbGFzcyBDaGFsa0NsYXNzIHtcblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdHJ1Y3Rvci1yZXR1cm5cblx0XHRyZXR1cm4gY2hhbGtGYWN0b3J5KG9wdGlvbnMpO1xuXHR9XG59XG5cbmNvbnN0IGNoYWxrRmFjdG9yeSA9IG9wdGlvbnMgPT4ge1xuXHRjb25zdCBjaGFsayA9IHt9O1xuXHRhcHBseU9wdGlvbnMoY2hhbGssIG9wdGlvbnMpO1xuXG5cdGNoYWxrLnRlbXBsYXRlID0gKC4uLmFyZ3VtZW50c18pID0+IGNoYWxrVGFnKGNoYWxrLnRlbXBsYXRlLCAuLi5hcmd1bWVudHNfKTtcblxuXHRPYmplY3Quc2V0UHJvdG90eXBlT2YoY2hhbGssIENoYWxrLnByb3RvdHlwZSk7XG5cdE9iamVjdC5zZXRQcm90b3R5cGVPZihjaGFsay50ZW1wbGF0ZSwgY2hhbGspO1xuXG5cdGNoYWxrLnRlbXBsYXRlLmNvbnN0cnVjdG9yID0gKCkgPT4ge1xuXHRcdHRocm93IG5ldyBFcnJvcignYGNoYWxrLmNvbnN0cnVjdG9yKClgIGlzIGRlcHJlY2F0ZWQuIFVzZSBgbmV3IGNoYWxrLkluc3RhbmNlKClgIGluc3RlYWQuJyk7XG5cdH07XG5cblx0Y2hhbGsudGVtcGxhdGUuSW5zdGFuY2UgPSBDaGFsa0NsYXNzO1xuXG5cdHJldHVybiBjaGFsay50ZW1wbGF0ZTtcbn07XG5cbmZ1bmN0aW9uIENoYWxrKG9wdGlvbnMpIHtcblx0cmV0dXJuIGNoYWxrRmFjdG9yeShvcHRpb25zKTtcbn1cblxuZm9yIChjb25zdCBbc3R5bGVOYW1lLCBzdHlsZV0gb2YgT2JqZWN0LmVudHJpZXMoYW5zaVN0eWxlcykpIHtcblx0c3R5bGVzW3N0eWxlTmFtZV0gPSB7XG5cdFx0Z2V0KCkge1xuXHRcdFx0Y29uc3QgYnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIodGhpcywgY3JlYXRlU3R5bGVyKHN0eWxlLm9wZW4sIHN0eWxlLmNsb3NlLCB0aGlzLl9zdHlsZXIpLCB0aGlzLl9pc0VtcHR5KTtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBzdHlsZU5hbWUsIHt2YWx1ZTogYnVpbGRlcn0pO1xuXHRcdFx0cmV0dXJuIGJ1aWxkZXI7XG5cdFx0fVxuXHR9O1xufVxuXG5zdHlsZXMudmlzaWJsZSA9IHtcblx0Z2V0KCkge1xuXHRcdGNvbnN0IGJ1aWxkZXIgPSBjcmVhdGVCdWlsZGVyKHRoaXMsIHRoaXMuX3N0eWxlciwgdHJ1ZSk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd2aXNpYmxlJywge3ZhbHVlOiBidWlsZGVyfSk7XG5cdFx0cmV0dXJuIGJ1aWxkZXI7XG5cdH1cbn07XG5cbmNvbnN0IHVzZWRNb2RlbHMgPSBbJ3JnYicsICdoZXgnLCAna2V5d29yZCcsICdoc2wnLCAnaHN2JywgJ2h3YicsICdhbnNpJywgJ2Fuc2kyNTYnXTtcblxuZm9yIChjb25zdCBtb2RlbCBvZiB1c2VkTW9kZWxzKSB7XG5cdHN0eWxlc1ttb2RlbF0gPSB7XG5cdFx0Z2V0KCkge1xuXHRcdFx0Y29uc3Qge2xldmVsfSA9IHRoaXM7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3VtZW50c18pIHtcblx0XHRcdFx0Y29uc3Qgc3R5bGVyID0gY3JlYXRlU3R5bGVyKGFuc2lTdHlsZXMuY29sb3JbbGV2ZWxNYXBwaW5nW2xldmVsXV1bbW9kZWxdKC4uLmFyZ3VtZW50c18pLCBhbnNpU3R5bGVzLmNvbG9yLmNsb3NlLCB0aGlzLl9zdHlsZXIpO1xuXHRcdFx0XHRyZXR1cm4gY3JlYXRlQnVpbGRlcih0aGlzLCBzdHlsZXIsIHRoaXMuX2lzRW1wdHkpO1xuXHRcdFx0fTtcblx0XHR9XG5cdH07XG59XG5cbmZvciAoY29uc3QgbW9kZWwgb2YgdXNlZE1vZGVscykge1xuXHRjb25zdCBiZ01vZGVsID0gJ2JnJyArIG1vZGVsWzBdLnRvVXBwZXJDYXNlKCkgKyBtb2RlbC5zbGljZSgxKTtcblx0c3R5bGVzW2JnTW9kZWxdID0ge1xuXHRcdGdldCgpIHtcblx0XHRcdGNvbnN0IHtsZXZlbH0gPSB0aGlzO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uICguLi5hcmd1bWVudHNfKSB7XG5cdFx0XHRcdGNvbnN0IHN0eWxlciA9IGNyZWF0ZVN0eWxlcihhbnNpU3R5bGVzLmJnQ29sb3JbbGV2ZWxNYXBwaW5nW2xldmVsXV1bbW9kZWxdKC4uLmFyZ3VtZW50c18pLCBhbnNpU3R5bGVzLmJnQ29sb3IuY2xvc2UsIHRoaXMuX3N0eWxlcik7XG5cdFx0XHRcdHJldHVybiBjcmVhdGVCdWlsZGVyKHRoaXMsIHN0eWxlciwgdGhpcy5faXNFbXB0eSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fTtcbn1cblxuY29uc3QgcHJvdG8gPSBPYmplY3QuZGVmaW5lUHJvcGVydGllcygoKSA9PiB7fSwge1xuXHQuLi5zdHlsZXMsXG5cdGxldmVsOiB7XG5cdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRnZXQoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fZ2VuZXJhdG9yLmxldmVsO1xuXHRcdH0sXG5cdFx0c2V0KGxldmVsKSB7XG5cdFx0XHR0aGlzLl9nZW5lcmF0b3IubGV2ZWwgPSBsZXZlbDtcblx0XHR9XG5cdH1cbn0pO1xuXG5jb25zdCBjcmVhdGVTdHlsZXIgPSAob3BlbiwgY2xvc2UsIHBhcmVudCkgPT4ge1xuXHRsZXQgb3BlbkFsbDtcblx0bGV0IGNsb3NlQWxsO1xuXHRpZiAocGFyZW50ID09PSB1bmRlZmluZWQpIHtcblx0XHRvcGVuQWxsID0gb3Blbjtcblx0XHRjbG9zZUFsbCA9IGNsb3NlO1xuXHR9IGVsc2Uge1xuXHRcdG9wZW5BbGwgPSBwYXJlbnQub3BlbkFsbCArIG9wZW47XG5cdFx0Y2xvc2VBbGwgPSBjbG9zZSArIHBhcmVudC5jbG9zZUFsbDtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0b3Blbixcblx0XHRjbG9zZSxcblx0XHRvcGVuQWxsLFxuXHRcdGNsb3NlQWxsLFxuXHRcdHBhcmVudFxuXHR9O1xufTtcblxuY29uc3QgY3JlYXRlQnVpbGRlciA9IChzZWxmLCBfc3R5bGVyLCBfaXNFbXB0eSkgPT4ge1xuXHRjb25zdCBidWlsZGVyID0gKC4uLmFyZ3VtZW50c18pID0+IHtcblx0XHRpZiAoaXNBcnJheShhcmd1bWVudHNfWzBdKSAmJiBpc0FycmF5KGFyZ3VtZW50c19bMF0ucmF3KSkge1xuXHRcdFx0Ly8gQ2FsbGVkIGFzIGEgdGVtcGxhdGUgbGl0ZXJhbCwgZm9yIGV4YW1wbGU6IGNoYWxrLnJlZGAyICsgMyA9IHtib2xkICR7MiszfX1gXG5cdFx0XHRyZXR1cm4gYXBwbHlTdHlsZShidWlsZGVyLCBjaGFsa1RhZyhidWlsZGVyLCAuLi5hcmd1bWVudHNfKSk7XG5cdFx0fVxuXG5cdFx0Ly8gU2luZ2xlIGFyZ3VtZW50IGlzIGhvdCBwYXRoLCBpbXBsaWNpdCBjb2VyY2lvbiBpcyBmYXN0ZXIgdGhhbiBhbnl0aGluZ1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbXBsaWNpdC1jb2VyY2lvblxuXHRcdHJldHVybiBhcHBseVN0eWxlKGJ1aWxkZXIsIChhcmd1bWVudHNfLmxlbmd0aCA9PT0gMSkgPyAoJycgKyBhcmd1bWVudHNfWzBdKSA6IGFyZ3VtZW50c18uam9pbignICcpKTtcblx0fTtcblxuXHQvLyBXZSBhbHRlciB0aGUgcHJvdG90eXBlIGJlY2F1c2Ugd2UgbXVzdCByZXR1cm4gYSBmdW5jdGlvbiwgYnV0IHRoZXJlIGlzXG5cdC8vIG5vIHdheSB0byBjcmVhdGUgYSBmdW5jdGlvbiB3aXRoIGEgZGlmZmVyZW50IHByb3RvdHlwZVxuXHRPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVpbGRlciwgcHJvdG8pO1xuXG5cdGJ1aWxkZXIuX2dlbmVyYXRvciA9IHNlbGY7XG5cdGJ1aWxkZXIuX3N0eWxlciA9IF9zdHlsZXI7XG5cdGJ1aWxkZXIuX2lzRW1wdHkgPSBfaXNFbXB0eTtcblxuXHRyZXR1cm4gYnVpbGRlcjtcbn07XG5cbmNvbnN0IGFwcGx5U3R5bGUgPSAoc2VsZiwgc3RyaW5nKSA9PiB7XG5cdGlmIChzZWxmLmxldmVsIDw9IDAgfHwgIXN0cmluZykge1xuXHRcdHJldHVybiBzZWxmLl9pc0VtcHR5ID8gJycgOiBzdHJpbmc7XG5cdH1cblxuXHRsZXQgc3R5bGVyID0gc2VsZi5fc3R5bGVyO1xuXG5cdGlmIChzdHlsZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBzdHJpbmc7XG5cdH1cblxuXHRjb25zdCB7b3BlbkFsbCwgY2xvc2VBbGx9ID0gc3R5bGVyO1xuXHRpZiAoc3RyaW5nLmluZGV4T2YoJ1xcdTAwMUInKSAhPT0gLTEpIHtcblx0XHR3aGlsZSAoc3R5bGVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIFJlcGxhY2UgYW55IGluc3RhbmNlcyBhbHJlYWR5IHByZXNlbnQgd2l0aCBhIHJlLW9wZW5pbmcgY29kZVxuXHRcdFx0Ly8gb3RoZXJ3aXNlIG9ubHkgdGhlIHBhcnQgb2YgdGhlIHN0cmluZyB1bnRpbCBzYWlkIGNsb3NpbmcgY29kZVxuXHRcdFx0Ly8gd2lsbCBiZSBjb2xvcmVkLCBhbmQgdGhlIHJlc3Qgd2lsbCBzaW1wbHkgYmUgJ3BsYWluJy5cblx0XHRcdHN0cmluZyA9IHN0cmluZ1JlcGxhY2VBbGwoc3RyaW5nLCBzdHlsZXIuY2xvc2UsIHN0eWxlci5vcGVuKTtcblxuXHRcdFx0c3R5bGVyID0gc3R5bGVyLnBhcmVudDtcblx0XHR9XG5cdH1cblxuXHQvLyBXZSBjYW4gbW92ZSBib3RoIG5leHQgYWN0aW9ucyBvdXQgb2YgbG9vcCwgYmVjYXVzZSByZW1haW5pbmcgYWN0aW9ucyBpbiBsb29wIHdvbid0IGhhdmVcblx0Ly8gYW55L3Zpc2libGUgZWZmZWN0IG9uIHBhcnRzIHdlIGFkZCBoZXJlLiBDbG9zZSB0aGUgc3R5bGluZyBiZWZvcmUgYSBsaW5lYnJlYWsgYW5kIHJlb3BlblxuXHQvLyBhZnRlciBuZXh0IGxpbmUgdG8gZml4IGEgYmxlZWQgaXNzdWUgb24gbWFjT1M6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9jaGFsay9wdWxsLzkyXG5cdGNvbnN0IGxmSW5kZXggPSBzdHJpbmcuaW5kZXhPZignXFxuJyk7XG5cdGlmIChsZkluZGV4ICE9PSAtMSkge1xuXHRcdHN0cmluZyA9IHN0cmluZ0VuY2FzZUNSTEZXaXRoRmlyc3RJbmRleChzdHJpbmcsIGNsb3NlQWxsLCBvcGVuQWxsLCBsZkluZGV4KTtcblx0fVxuXG5cdHJldHVybiBvcGVuQWxsICsgc3RyaW5nICsgY2xvc2VBbGw7XG59O1xuXG5sZXQgdGVtcGxhdGU7XG5jb25zdCBjaGFsa1RhZyA9IChjaGFsaywgLi4uc3RyaW5ncykgPT4ge1xuXHRjb25zdCBbZmlyc3RTdHJpbmddID0gc3RyaW5ncztcblxuXHRpZiAoIWlzQXJyYXkoZmlyc3RTdHJpbmcpIHx8ICFpc0FycmF5KGZpcnN0U3RyaW5nLnJhdykpIHtcblx0XHQvLyBJZiBjaGFsaygpIHdhcyBjYWxsZWQgYnkgaXRzZWxmIG9yIHdpdGggYSBzdHJpbmcsXG5cdFx0Ly8gcmV0dXJuIHRoZSBzdHJpbmcgaXRzZWxmIGFzIGEgc3RyaW5nLlxuXHRcdHJldHVybiBzdHJpbmdzLmpvaW4oJyAnKTtcblx0fVxuXG5cdGNvbnN0IGFyZ3VtZW50c18gPSBzdHJpbmdzLnNsaWNlKDEpO1xuXHRjb25zdCBwYXJ0cyA9IFtmaXJzdFN0cmluZy5yYXdbMF1dO1xuXG5cdGZvciAobGV0IGkgPSAxOyBpIDwgZmlyc3RTdHJpbmcubGVuZ3RoOyBpKyspIHtcblx0XHRwYXJ0cy5wdXNoKFxuXHRcdFx0U3RyaW5nKGFyZ3VtZW50c19baSAtIDFdKS5yZXBsYWNlKC9be31cXFxcXS9nLCAnXFxcXCQmJyksXG5cdFx0XHRTdHJpbmcoZmlyc3RTdHJpbmcucmF3W2ldKVxuXHRcdCk7XG5cdH1cblxuXHRpZiAodGVtcGxhdGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRlbXBsYXRlID0gcmVxdWlyZSgnLi90ZW1wbGF0ZXMnKTtcblx0fVxuXG5cdHJldHVybiB0ZW1wbGF0ZShjaGFsaywgcGFydHMuam9pbignJykpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2hhbGsucHJvdG90eXBlLCBzdHlsZXMpO1xuXG5jb25zdCBjaGFsayA9IENoYWxrKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuY2hhbGsuc3VwcG9ydHNDb2xvciA9IHN0ZG91dENvbG9yO1xuY2hhbGsuc3RkZXJyID0gQ2hhbGsoe2xldmVsOiBzdGRlcnJDb2xvciA/IHN0ZGVyckNvbG9yLmxldmVsIDogMH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcbmNoYWxrLnN0ZGVyci5zdXBwb3J0c0NvbG9yID0gc3RkZXJyQ29sb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gY2hhbGs7XG4iLCAiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKEMpIE1pY3Jvc29mdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZVxudGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGVcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cblRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcbldBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsXG5NRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxuXG5TZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbmFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG52YXIgUmVmbGVjdDtcbihmdW5jdGlvbiAoUmVmbGVjdCkge1xuICAgIC8vIE1ldGFkYXRhIFByb3Bvc2FsXG4gICAgLy8gaHR0cHM6Ly9yYnVja3Rvbi5naXRodWIuaW8vcmVmbGVjdC1tZXRhZGF0YS9cbiAgICAoZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgICAgICAgdmFyIHJvb3QgPSB0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbFRoaXMgOlxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbCA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6XG4gICAgICAgICAgICAgICAgdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDpcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMgPT09IFwib2JqZWN0XCIgPyB0aGlzIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsb3BweU1vZGVUaGlzKCk7XG4gICAgICAgIHZhciBleHBvcnRlciA9IG1ha2VFeHBvcnRlcihSZWZsZWN0KTtcbiAgICAgICAgaWYgKHR5cGVvZiByb290LlJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGV4cG9ydGVyID0gbWFrZUV4cG9ydGVyKHJvb3QuUmVmbGVjdCwgZXhwb3J0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIGZhY3RvcnkoZXhwb3J0ZXIsIHJvb3QpO1xuICAgICAgICBpZiAodHlwZW9mIHJvb3QuUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcm9vdC5SZWZsZWN0ID0gUmVmbGVjdDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBtYWtlRXhwb3J0ZXIodGFyZ2V0LCBwcmV2aW91cykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICAgICAgICAgICAgICBpZiAocHJldmlvdXMpXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBmdW5jdGlvblRoaXMoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvbihcInJldHVybiB0aGlzO1wiKSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF8pIHsgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGluZGlyZWN0RXZhbFRoaXMoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiAodm9pZCAwLCBldmFsKShcIihmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pKClcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoXykgeyB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2xvcHB5TW9kZVRoaXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb25UaGlzKCkgfHwgaW5kaXJlY3RFdmFsVGhpcygpO1xuICAgICAgICB9XG4gICAgfSkoZnVuY3Rpb24gKGV4cG9ydGVyLCByb290KSB7XG4gICAgICAgIHZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuICAgICAgICAvLyBmZWF0dXJlIHRlc3QgZm9yIFN5bWJvbCBzdXBwb3J0XG4gICAgICAgIHZhciBzdXBwb3J0c1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIjtcbiAgICAgICAgdmFyIHRvUHJpbWl0aXZlU3ltYm9sID0gc3VwcG9ydHNTeW1ib2wgJiYgdHlwZW9mIFN5bWJvbC50b1ByaW1pdGl2ZSAhPT0gXCJ1bmRlZmluZWRcIiA/IFN5bWJvbC50b1ByaW1pdGl2ZSA6IFwiQEB0b1ByaW1pdGl2ZVwiO1xuICAgICAgICB2YXIgaXRlcmF0b3JTeW1ib2wgPSBzdXBwb3J0c1N5bWJvbCAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yICE9PSBcInVuZGVmaW5lZFwiID8gU3ltYm9sLml0ZXJhdG9yIDogXCJAQGl0ZXJhdG9yXCI7XG4gICAgICAgIHZhciBzdXBwb3J0c0NyZWF0ZSA9IHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSBcImZ1bmN0aW9uXCI7IC8vIGZlYXR1cmUgdGVzdCBmb3IgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0XG4gICAgICAgIHZhciBzdXBwb3J0c1Byb3RvID0geyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheTsgLy8gZmVhdHVyZSB0ZXN0IGZvciBfX3Byb3RvX18gc3VwcG9ydFxuICAgICAgICB2YXIgZG93bkxldmVsID0gIXN1cHBvcnRzQ3JlYXRlICYmICFzdXBwb3J0c1Byb3RvO1xuICAgICAgICB2YXIgSGFzaE1hcCA9IHtcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhbiBvYmplY3QgaW4gZGljdGlvbmFyeSBtb2RlIChhLmsuYS4gXCJzbG93XCIgbW9kZSBpbiB2OClcbiAgICAgICAgICAgIGNyZWF0ZTogc3VwcG9ydHNDcmVhdGVcbiAgICAgICAgICAgICAgICA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE1ha2VEaWN0aW9uYXJ5KE9iamVjdC5jcmVhdGUobnVsbCkpOyB9XG4gICAgICAgICAgICAgICAgOiBzdXBwb3J0c1Byb3RvXG4gICAgICAgICAgICAgICAgICAgID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gTWFrZURpY3Rpb25hcnkoeyBfX3Byb3RvX186IG51bGwgfSk7IH1cbiAgICAgICAgICAgICAgICAgICAgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBNYWtlRGljdGlvbmFyeSh7fSk7IH0sXG4gICAgICAgICAgICBoYXM6IGRvd25MZXZlbFxuICAgICAgICAgICAgICAgID8gZnVuY3Rpb24gKG1hcCwga2V5KSB7IHJldHVybiBoYXNPd24uY2FsbChtYXAsIGtleSk7IH1cbiAgICAgICAgICAgICAgICA6IGZ1bmN0aW9uIChtYXAsIGtleSkgeyByZXR1cm4ga2V5IGluIG1hcDsgfSxcbiAgICAgICAgICAgIGdldDogZG93bkxldmVsXG4gICAgICAgICAgICAgICAgPyBmdW5jdGlvbiAobWFwLCBrZXkpIHsgcmV0dXJuIGhhc093bi5jYWxsKG1hcCwga2V5KSA/IG1hcFtrZXldIDogdW5kZWZpbmVkOyB9XG4gICAgICAgICAgICAgICAgOiBmdW5jdGlvbiAobWFwLCBrZXkpIHsgcmV0dXJuIG1hcFtrZXldOyB9LFxuICAgICAgICB9O1xuICAgICAgICAvLyBMb2FkIGdsb2JhbCBvciBzaGltIHZlcnNpb25zIG9mIE1hcCwgU2V0LCBhbmQgV2Vha01hcFxuICAgICAgICB2YXIgZnVuY3Rpb25Qcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoRnVuY3Rpb24pO1xuICAgICAgICB2YXIgX01hcCA9IHR5cGVvZiBNYXAgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgTWFwLnByb3RvdHlwZS5lbnRyaWVzID09PSBcImZ1bmN0aW9uXCIgPyBNYXAgOiBDcmVhdGVNYXBQb2x5ZmlsbCgpO1xuICAgICAgICB2YXIgX1NldCA9IHR5cGVvZiBTZXQgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU2V0LnByb3RvdHlwZS5lbnRyaWVzID09PSBcImZ1bmN0aW9uXCIgPyBTZXQgOiBDcmVhdGVTZXRQb2x5ZmlsbCgpO1xuICAgICAgICB2YXIgX1dlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gXCJmdW5jdGlvblwiID8gV2Vha01hcCA6IENyZWF0ZVdlYWtNYXBQb2x5ZmlsbCgpO1xuICAgICAgICB2YXIgcmVnaXN0cnlTeW1ib2wgPSBzdXBwb3J0c1N5bWJvbCA/IFN5bWJvbC5mb3IoXCJAcmVmbGVjdC1tZXRhZGF0YTpyZWdpc3RyeVwiKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIG1ldGFkYXRhUmVnaXN0cnkgPSBHZXRPckNyZWF0ZU1ldGFkYXRhUmVnaXN0cnkoKTtcbiAgICAgICAgdmFyIG1ldGFkYXRhUHJvdmlkZXIgPSBDcmVhdGVNZXRhZGF0YVByb3ZpZGVyKG1ldGFkYXRhUmVnaXN0cnkpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQXBwbGllcyBhIHNldCBvZiBkZWNvcmF0b3JzIHRvIGEgcHJvcGVydHkgb2YgYSB0YXJnZXQgb2JqZWN0LlxuICAgICAgICAgKiBAcGFyYW0gZGVjb3JhdG9ycyBBbiBhcnJheSBvZiBkZWNvcmF0b3JzLlxuICAgICAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgb2JqZWN0LlxuICAgICAgICAgKiBAcGFyYW0gcHJvcGVydHlLZXkgKE9wdGlvbmFsKSBUaGUgcHJvcGVydHkga2V5IHRvIGRlY29yYXRlLlxuICAgICAgICAgKiBAcGFyYW0gYXR0cmlidXRlcyAoT3B0aW9uYWwpIFRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgdGFyZ2V0IGtleS5cbiAgICAgICAgICogQHJlbWFya3MgRGVjb3JhdG9ycyBhcmUgYXBwbGllZCBpbiByZXZlcnNlIG9yZGVyLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgY2xhc3MgRXhhbXBsZSB7XG4gICAgICAgICAqICAgICAgICAgLy8gcHJvcGVydHkgZGVjbGFyYXRpb25zIGFyZSBub3QgcGFydCBvZiBFUzYsIHRob3VnaCB0aGV5IGFyZSB2YWxpZCBpbiBUeXBlU2NyaXB0OlxuICAgICAgICAgKiAgICAgICAgIC8vIHN0YXRpYyBzdGF0aWNQcm9wZXJ0eTtcbiAgICAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICAgICBjb25zdHJ1Y3RvcihwKSB7IH1cbiAgICAgICAgICogICAgICAgICBzdGF0aWMgc3RhdGljTWV0aG9kKHApIHsgfVxuICAgICAgICAgKiAgICAgICAgIG1ldGhvZChwKSB7IH1cbiAgICAgICAgICogICAgIH1cbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIGNvbnN0cnVjdG9yXG4gICAgICAgICAqICAgICBFeGFtcGxlID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzQXJyYXksIEV4YW1wbGUpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIGNvbnN0cnVjdG9yKVxuICAgICAgICAgKiAgICAgUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzQXJyYXksIEV4YW1wbGUsIFwic3RhdGljUHJvcGVydHlcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gcHJvdG90eXBlKVxuICAgICAgICAgKiAgICAgUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzQXJyYXksIEV4YW1wbGUucHJvdG90eXBlLCBcInByb3BlcnR5XCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBjb25zdHJ1Y3RvcilcbiAgICAgICAgICogICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFeGFtcGxlLCBcInN0YXRpY01ldGhvZFwiLFxuICAgICAgICAgKiAgICAgICAgIFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9yc0FycmF5LCBFeGFtcGxlLCBcInN0YXRpY01ldGhvZFwiLFxuICAgICAgICAgKiAgICAgICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4YW1wbGUsIFwic3RhdGljTWV0aG9kXCIpKSk7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBtZXRob2QgKG9uIHByb3RvdHlwZSlcbiAgICAgICAgICogICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFeGFtcGxlLnByb3RvdHlwZSwgXCJtZXRob2RcIixcbiAgICAgICAgICogICAgICAgICBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnNBcnJheSwgRXhhbXBsZS5wcm90b3R5cGUsIFwibWV0aG9kXCIsXG4gICAgICAgICAqICAgICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhhbXBsZS5wcm90b3R5cGUsIFwibWV0aG9kXCIpKSk7XG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBkZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICBpZiAoIUlzVW5kZWZpbmVkKHByb3BlcnR5S2V5KSkge1xuICAgICAgICAgICAgICAgIGlmICghSXNBcnJheShkZWNvcmF0b3JzKSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xuICAgICAgICAgICAgICAgIGlmICghSXNPYmplY3QodGFyZ2V0KSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xuICAgICAgICAgICAgICAgIGlmICghSXNPYmplY3QoYXR0cmlidXRlcykgJiYgIUlzVW5kZWZpbmVkKGF0dHJpYnV0ZXMpICYmICFJc051bGwoYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgICAgICBpZiAoSXNOdWxsKGF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHByb3BlcnR5S2V5ID0gVG9Qcm9wZXJ0eUtleShwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIERlY29yYXRlUHJvcGVydHkoZGVjb3JhdG9ycywgdGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIUlzQXJyYXkoZGVjb3JhdG9ycykpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgICAgICBpZiAoIUlzQ29uc3RydWN0b3IodGFyZ2V0KSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xuICAgICAgICAgICAgICAgIHJldHVybiBEZWNvcmF0ZUNvbnN0cnVjdG9yKGRlY29yYXRvcnMsIHRhcmdldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZXhwb3J0ZXIoXCJkZWNvcmF0ZVwiLCBkZWNvcmF0ZSk7XG4gICAgICAgIC8vIDQuMS4yIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpXG4gICAgICAgIC8vIGh0dHBzOi8vcmJ1Y2t0b24uZ2l0aHViLmlvL3JlZmxlY3QtbWV0YWRhdGEvI3JlZmxlY3QubWV0YWRhdGFcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgZGVmYXVsdCBtZXRhZGF0YSBkZWNvcmF0b3IgZmFjdG9yeSB0aGF0IGNhbiBiZSB1c2VkIG9uIGEgY2xhc3MsIGNsYXNzIG1lbWJlciwgb3IgcGFyYW1ldGVyLlxuICAgICAgICAgKiBAcGFyYW0gbWV0YWRhdGFLZXkgVGhlIGtleSBmb3IgdGhlIG1ldGFkYXRhIGVudHJ5LlxuICAgICAgICAgKiBAcGFyYW0gbWV0YWRhdGFWYWx1ZSBUaGUgdmFsdWUgZm9yIHRoZSBtZXRhZGF0YSBlbnRyeS5cbiAgICAgICAgICogQHJldHVybnMgQSBkZWNvcmF0b3IgZnVuY3Rpb24uXG4gICAgICAgICAqIEByZW1hcmtzXG4gICAgICAgICAqIElmIGBtZXRhZGF0YUtleWAgaXMgYWxyZWFkeSBkZWZpbmVkIGZvciB0aGUgdGFyZ2V0IGFuZCB0YXJnZXQga2V5LCB0aGVcbiAgICAgICAgICogbWV0YWRhdGFWYWx1ZSBmb3IgdGhhdCBrZXkgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIGNvbnN0cnVjdG9yXG4gICAgICAgICAqICAgICBAUmVmbGVjdC5tZXRhZGF0YShrZXksIHZhbHVlKVxuICAgICAgICAgKiAgICAgY2xhc3MgRXhhbXBsZSB7XG4gICAgICAgICAqICAgICB9XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gY29uc3RydWN0b3IsIFR5cGVTY3JpcHQgb25seSlcbiAgICAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xuICAgICAgICAgKiAgICAgICAgIEBSZWZsZWN0Lm1ldGFkYXRhKGtleSwgdmFsdWUpXG4gICAgICAgICAqICAgICAgICAgc3RhdGljIHN0YXRpY1Byb3BlcnR5O1xuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIHByb3RvdHlwZSwgVHlwZVNjcmlwdCBvbmx5KVxuICAgICAgICAgKiAgICAgY2xhc3MgRXhhbXBsZSB7XG4gICAgICAgICAqICAgICAgICAgQFJlZmxlY3QubWV0YWRhdGEoa2V5LCB2YWx1ZSlcbiAgICAgICAgICogICAgICAgICBwcm9wZXJ0eTtcbiAgICAgICAgICogICAgIH1cbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIG1ldGhvZCAob24gY29uc3RydWN0b3IpXG4gICAgICAgICAqICAgICBjbGFzcyBFeGFtcGxlIHtcbiAgICAgICAgICogICAgICAgICBAUmVmbGVjdC5tZXRhZGF0YShrZXksIHZhbHVlKVxuICAgICAgICAgKiAgICAgICAgIHN0YXRpYyBzdGF0aWNNZXRob2QoKSB7IH1cbiAgICAgICAgICogICAgIH1cbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIG1ldGhvZCAob24gcHJvdG90eXBlKVxuICAgICAgICAgKiAgICAgY2xhc3MgRXhhbXBsZSB7XG4gICAgICAgICAqICAgICAgICAgQFJlZmxlY3QubWV0YWRhdGEoa2V5LCB2YWx1ZSlcbiAgICAgICAgICogICAgICAgICBtZXRob2QoKSB7IH1cbiAgICAgICAgICogICAgIH1cbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIG1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBkZWNvcmF0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgICAgICAgICAgICAgIGlmICghSXNPYmplY3QodGFyZ2V0KSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xuICAgICAgICAgICAgICAgIGlmICghSXNVbmRlZmluZWQocHJvcGVydHlLZXkpICYmICFJc1Byb3BlcnR5S2V5KHByb3BlcnR5S2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xuICAgICAgICAgICAgICAgIE9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlY29yYXRvcjtcbiAgICAgICAgfVxuICAgICAgICBleHBvcnRlcihcIm1ldGFkYXRhXCIsIG1ldGFkYXRhKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZSBhIHVuaXF1ZSBtZXRhZGF0YSBlbnRyeSBvbiB0aGUgdGFyZ2V0LlxuICAgICAgICAgKiBAcGFyYW0gbWV0YWRhdGFLZXkgQSBrZXkgdXNlZCB0byBzdG9yZSBhbmQgcmV0cmlldmUgbWV0YWRhdGEuXG4gICAgICAgICAqIEBwYXJhbSBtZXRhZGF0YVZhbHVlIEEgdmFsdWUgdGhhdCBjb250YWlucyBhdHRhY2hlZCBtZXRhZGF0YS5cbiAgICAgICAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9iamVjdCBvbiB3aGljaCB0byBkZWZpbmUgbWV0YWRhdGEuXG4gICAgICAgICAqIEBwYXJhbSBwcm9wZXJ0eUtleSAoT3B0aW9uYWwpIFRoZSBwcm9wZXJ0eSBrZXkgZm9yIHRoZSB0YXJnZXQuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICBjbGFzcyBFeGFtcGxlIHtcbiAgICAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eSBkZWNsYXJhdGlvbnMgYXJlIG5vdCBwYXJ0IG9mIEVTNiwgdGhvdWdoIHRoZXkgYXJlIHZhbGlkIGluIFR5cGVTY3JpcHQ6XG4gICAgICAgICAqICAgICAgICAgLy8gc3RhdGljIHN0YXRpY1Byb3BlcnR5O1xuICAgICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5O1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgICAgIGNvbnN0cnVjdG9yKHApIHsgfVxuICAgICAgICAgKiAgICAgICAgIHN0YXRpYyBzdGF0aWNNZXRob2QocCkgeyB9XG4gICAgICAgICAqICAgICAgICAgbWV0aG9kKHApIHsgfVxuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gY29uc3RydWN0b3JcbiAgICAgICAgICogICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBvcHRpb25zLCBFeGFtcGxlKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBjb25zdHJ1Y3RvcilcbiAgICAgICAgICogICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBvcHRpb25zLCBFeGFtcGxlLCBcInN0YXRpY1Byb3BlcnR5XCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIHByb3RvdHlwZSlcbiAgICAgICAgICogICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBvcHRpb25zLCBFeGFtcGxlLnByb3RvdHlwZSwgXCJwcm9wZXJ0eVwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIG1ldGhvZCAob24gY29uc3RydWN0b3IpXG4gICAgICAgICAqICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgb3B0aW9ucywgRXhhbXBsZSwgXCJzdGF0aWNNZXRob2RcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBtZXRob2QgKG9uIHByb3RvdHlwZSlcbiAgICAgICAgICogICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBvcHRpb25zLCBFeGFtcGxlLnByb3RvdHlwZSwgXCJtZXRob2RcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBkZWNvcmF0b3IgZmFjdG9yeSBhcyBtZXRhZGF0YS1wcm9kdWNpbmcgYW5ub3RhdGlvbi5cbiAgICAgICAgICogICAgIGZ1bmN0aW9uIE15QW5ub3RhdGlvbihvcHRpb25zKTogRGVjb3JhdG9yIHtcbiAgICAgICAgICogICAgICAgICByZXR1cm4gKHRhcmdldCwga2V5PykgPT4gUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIG9wdGlvbnMsIHRhcmdldCwga2V5KTtcbiAgICAgICAgICogICAgIH1cbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGRlZmluZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCB0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgICAgICAgICBpZiAoIUlzT2JqZWN0KHRhcmdldCkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xuICAgICAgICAgICAgaWYgKCFJc1VuZGVmaW5lZChwcm9wZXJ0eUtleSkpXG4gICAgICAgICAgICAgICAgcHJvcGVydHlLZXkgPSBUb1Byb3BlcnR5S2V5KHByb3BlcnR5S2V5KTtcbiAgICAgICAgICAgIHJldHVybiBPcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgICAgICAgfVxuICAgICAgICBleHBvcnRlcihcImRlZmluZU1ldGFkYXRhXCIsIGRlZmluZU1ldGFkYXRhKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgYSB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHRhcmdldCBvYmplY3Qgb3IgaXRzIHByb3RvdHlwZSBjaGFpbiBoYXMgdGhlIHByb3ZpZGVkIG1ldGFkYXRhIGtleSBkZWZpbmVkLlxuICAgICAgICAgKiBAcGFyYW0gbWV0YWRhdGFLZXkgQSBrZXkgdXNlZCB0byBzdG9yZSBhbmQgcmV0cmlldmUgbWV0YWRhdGEuXG4gICAgICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3Qgb24gd2hpY2ggdGhlIG1ldGFkYXRhIGlzIGRlZmluZWQuXG4gICAgICAgICAqIEBwYXJhbSBwcm9wZXJ0eUtleSAoT3B0aW9uYWwpIFRoZSBwcm9wZXJ0eSBrZXkgZm9yIHRoZSB0YXJnZXQuXG4gICAgICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbWV0YWRhdGEga2V5IHdhcyBkZWZpbmVkIG9uIHRoZSB0YXJnZXQgb2JqZWN0IG9yIGl0cyBwcm90b3R5cGUgY2hhaW47IG90aGVyd2lzZSwgYGZhbHNlYC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xuICAgICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5IGRlY2xhcmF0aW9ucyBhcmUgbm90IHBhcnQgb2YgRVM2LCB0aG91Z2ggdGhleSBhcmUgdmFsaWQgaW4gVHlwZVNjcmlwdDpcbiAgICAgICAgICogICAgICAgICAvLyBzdGF0aWMgc3RhdGljUHJvcGVydHk7XG4gICAgICAgICAqICAgICAgICAgLy8gcHJvcGVydHk7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgICAgY29uc3RydWN0b3IocCkgeyB9XG4gICAgICAgICAqICAgICAgICAgc3RhdGljIHN0YXRpY01ldGhvZChwKSB7IH1cbiAgICAgICAgICogICAgICAgICBtZXRob2QocCkgeyB9XG4gICAgICAgICAqICAgICB9XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBjb25zdHJ1Y3RvclxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5oYXNNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIGNvbnN0cnVjdG9yKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5oYXNNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUsIFwic3RhdGljUHJvcGVydHlcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gcHJvdG90eXBlKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5oYXNNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUucHJvdG90eXBlLCBcInByb3BlcnR5XCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBjb25zdHJ1Y3RvcilcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuaGFzTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLCBcInN0YXRpY01ldGhvZFwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIG1ldGhvZCAob24gcHJvdG90eXBlKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5oYXNNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUucHJvdG90eXBlLCBcIm1ldGhvZFwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgICAgICAgICBpZiAoIUlzT2JqZWN0KHRhcmdldCkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xuICAgICAgICAgICAgaWYgKCFJc1VuZGVmaW5lZChwcm9wZXJ0eUtleSkpXG4gICAgICAgICAgICAgICAgcHJvcGVydHlLZXkgPSBUb1Byb3BlcnR5S2V5KHByb3BlcnR5S2V5KTtcbiAgICAgICAgICAgIHJldHVybiBPcmRpbmFyeUhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgICAgICAgfVxuICAgICAgICBleHBvcnRlcihcImhhc01ldGFkYXRhXCIsIGhhc01ldGFkYXRhKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgYSB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHRhcmdldCBvYmplY3QgaGFzIHRoZSBwcm92aWRlZCBtZXRhZGF0YSBrZXkgZGVmaW5lZC5cbiAgICAgICAgICogQHBhcmFtIG1ldGFkYXRhS2V5IEEga2V5IHVzZWQgdG8gc3RvcmUgYW5kIHJldHJpZXZlIG1ldGFkYXRhLlxuICAgICAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgb2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRhZGF0YSBpcyBkZWZpbmVkLlxuICAgICAgICAgKiBAcGFyYW0gcHJvcGVydHlLZXkgKE9wdGlvbmFsKSBUaGUgcHJvcGVydHkga2V5IGZvciB0aGUgdGFyZ2V0LlxuICAgICAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG1ldGFkYXRhIGtleSB3YXMgZGVmaW5lZCBvbiB0aGUgdGFyZ2V0IG9iamVjdDsgb3RoZXJ3aXNlLCBgZmFsc2VgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgY2xhc3MgRXhhbXBsZSB7XG4gICAgICAgICAqICAgICAgICAgLy8gcHJvcGVydHkgZGVjbGFyYXRpb25zIGFyZSBub3QgcGFydCBvZiBFUzYsIHRob3VnaCB0aGV5IGFyZSB2YWxpZCBpbiBUeXBlU2NyaXB0OlxuICAgICAgICAgKiAgICAgICAgIC8vIHN0YXRpYyBzdGF0aWNQcm9wZXJ0eTtcbiAgICAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICAgICBjb25zdHJ1Y3RvcihwKSB7IH1cbiAgICAgICAgICogICAgICAgICBzdGF0aWMgc3RhdGljTWV0aG9kKHApIHsgfVxuICAgICAgICAgKiAgICAgICAgIG1ldGhvZChwKSB7IH1cbiAgICAgICAgICogICAgIH1cbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIGNvbnN0cnVjdG9yXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0Lmhhc093bk1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZSk7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gY29uc3RydWN0b3IpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0Lmhhc093bk1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZSwgXCJzdGF0aWNQcm9wZXJ0eVwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBwcm90b3R5cGUpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0Lmhhc093bk1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZS5wcm90b3R5cGUsIFwicHJvcGVydHlcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBtZXRob2QgKG9uIGNvbnN0cnVjdG9yKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5oYXNPd25NZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUsIFwic3RhdGljTWV0aG9kXCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBwcm90b3R5cGUpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0Lmhhc093bk1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZS5wcm90b3R5cGUsIFwibWV0aG9kXCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gaGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICAgICAgICAgIGlmICghSXNPYmplY3QodGFyZ2V0KSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICBpZiAoIUlzVW5kZWZpbmVkKHByb3BlcnR5S2V5KSlcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUtleSA9IFRvUHJvcGVydHlLZXkocHJvcGVydHlLZXkpO1xuICAgICAgICAgICAgcmV0dXJuIE9yZGluYXJ5SGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICAgICAgICB9XG4gICAgICAgIGV4cG9ydGVyKFwiaGFzT3duTWV0YWRhdGFcIiwgaGFzT3duTWV0YWRhdGEpO1xuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgbWV0YWRhdGEgdmFsdWUgZm9yIHRoZSBwcm92aWRlZCBtZXRhZGF0YSBrZXkgb24gdGhlIHRhcmdldCBvYmplY3Qgb3IgaXRzIHByb3RvdHlwZSBjaGFpbi5cbiAgICAgICAgICogQHBhcmFtIG1ldGFkYXRhS2V5IEEga2V5IHVzZWQgdG8gc3RvcmUgYW5kIHJldHJpZXZlIG1ldGFkYXRhLlxuICAgICAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgb2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRhZGF0YSBpcyBkZWZpbmVkLlxuICAgICAgICAgKiBAcGFyYW0gcHJvcGVydHlLZXkgKE9wdGlvbmFsKSBUaGUgcHJvcGVydHkga2V5IGZvciB0aGUgdGFyZ2V0LlxuICAgICAgICAgKiBAcmV0dXJucyBUaGUgbWV0YWRhdGEgdmFsdWUgZm9yIHRoZSBtZXRhZGF0YSBrZXkgaWYgZm91bmQ7IG90aGVyd2lzZSwgYHVuZGVmaW5lZGAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICBjbGFzcyBFeGFtcGxlIHtcbiAgICAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eSBkZWNsYXJhdGlvbnMgYXJlIG5vdCBwYXJ0IG9mIEVTNiwgdGhvdWdoIHRoZXkgYXJlIHZhbGlkIGluIFR5cGVTY3JpcHQ6XG4gICAgICAgICAqICAgICAgICAgLy8gc3RhdGljIHN0YXRpY1Byb3BlcnR5O1xuICAgICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5O1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgICAgIGNvbnN0cnVjdG9yKHApIHsgfVxuICAgICAgICAgKiAgICAgICAgIHN0YXRpYyBzdGF0aWNNZXRob2QocCkgeyB9XG4gICAgICAgICAqICAgICAgICAgbWV0aG9kKHApIHsgfVxuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gY29uc3RydWN0b3JcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBjb25zdHJ1Y3RvcilcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLCBcInN0YXRpY1Byb3BlcnR5XCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIHByb3RvdHlwZSlcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLnByb3RvdHlwZSwgXCJwcm9wZXJ0eVwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIG1ldGhvZCAob24gY29uc3RydWN0b3IpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZSwgXCJzdGF0aWNNZXRob2RcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBtZXRob2QgKG9uIHByb3RvdHlwZSlcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLnByb3RvdHlwZSwgXCJtZXRob2RcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBnZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgICAgICAgICAgaWYgKCFJc09iamVjdCh0YXJnZXQpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgIGlmICghSXNVbmRlZmluZWQocHJvcGVydHlLZXkpKVxuICAgICAgICAgICAgICAgIHByb3BlcnR5S2V5ID0gVG9Qcm9wZXJ0eUtleShwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgICByZXR1cm4gT3JkaW5hcnlHZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwb3J0ZXIoXCJnZXRNZXRhZGF0YVwiLCBnZXRNZXRhZGF0YSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBtZXRhZGF0YSB2YWx1ZSBmb3IgdGhlIHByb3ZpZGVkIG1ldGFkYXRhIGtleSBvbiB0aGUgdGFyZ2V0IG9iamVjdC5cbiAgICAgICAgICogQHBhcmFtIG1ldGFkYXRhS2V5IEEga2V5IHVzZWQgdG8gc3RvcmUgYW5kIHJldHJpZXZlIG1ldGFkYXRhLlxuICAgICAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgb2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRhZGF0YSBpcyBkZWZpbmVkLlxuICAgICAgICAgKiBAcGFyYW0gcHJvcGVydHlLZXkgKE9wdGlvbmFsKSBUaGUgcHJvcGVydHkga2V5IGZvciB0aGUgdGFyZ2V0LlxuICAgICAgICAgKiBAcmV0dXJucyBUaGUgbWV0YWRhdGEgdmFsdWUgZm9yIHRoZSBtZXRhZGF0YSBrZXkgaWYgZm91bmQ7IG90aGVyd2lzZSwgYHVuZGVmaW5lZGAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICBjbGFzcyBFeGFtcGxlIHtcbiAgICAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eSBkZWNsYXJhdGlvbnMgYXJlIG5vdCBwYXJ0IG9mIEVTNiwgdGhvdWdoIHRoZXkgYXJlIHZhbGlkIGluIFR5cGVTY3JpcHQ6XG4gICAgICAgICAqICAgICAgICAgLy8gc3RhdGljIHN0YXRpY1Byb3BlcnR5O1xuICAgICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5O1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgICAgIGNvbnN0cnVjdG9yKHApIHsgfVxuICAgICAgICAgKiAgICAgICAgIHN0YXRpYyBzdGF0aWNNZXRob2QocCkgeyB9XG4gICAgICAgICAqICAgICAgICAgbWV0aG9kKHApIHsgfVxuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gY29uc3RydWN0b3JcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBjb25zdHJ1Y3RvcilcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLCBcInN0YXRpY1Byb3BlcnR5XCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIHByb3RvdHlwZSlcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLnByb3RvdHlwZSwgXCJwcm9wZXJ0eVwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIG1ldGhvZCAob24gY29uc3RydWN0b3IpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE93bk1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZSwgXCJzdGF0aWNNZXRob2RcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBtZXRob2QgKG9uIHByb3RvdHlwZSlcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLnByb3RvdHlwZSwgXCJtZXRob2RcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgICAgICAgICAgaWYgKCFJc09iamVjdCh0YXJnZXQpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgIGlmICghSXNVbmRlZmluZWQocHJvcGVydHlLZXkpKVxuICAgICAgICAgICAgICAgIHByb3BlcnR5S2V5ID0gVG9Qcm9wZXJ0eUtleShwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgICByZXR1cm4gT3JkaW5hcnlHZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwb3J0ZXIoXCJnZXRPd25NZXRhZGF0YVwiLCBnZXRPd25NZXRhZGF0YSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBtZXRhZGF0YSBrZXlzIGRlZmluZWQgb24gdGhlIHRhcmdldCBvYmplY3Qgb3IgaXRzIHByb3RvdHlwZSBjaGFpbi5cbiAgICAgICAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9iamVjdCBvbiB3aGljaCB0aGUgbWV0YWRhdGEgaXMgZGVmaW5lZC5cbiAgICAgICAgICogQHBhcmFtIHByb3BlcnR5S2V5IChPcHRpb25hbCkgVGhlIHByb3BlcnR5IGtleSBmb3IgdGhlIHRhcmdldC5cbiAgICAgICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgdW5pcXVlIG1ldGFkYXRhIGtleXMuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICBjbGFzcyBFeGFtcGxlIHtcbiAgICAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eSBkZWNsYXJhdGlvbnMgYXJlIG5vdCBwYXJ0IG9mIEVTNiwgdGhvdWdoIHRoZXkgYXJlIHZhbGlkIGluIFR5cGVTY3JpcHQ6XG4gICAgICAgICAqICAgICAgICAgLy8gc3RhdGljIHN0YXRpY1Byb3BlcnR5O1xuICAgICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5O1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgICAgIGNvbnN0cnVjdG9yKHApIHsgfVxuICAgICAgICAgKiAgICAgICAgIHN0YXRpYyBzdGF0aWNNZXRob2QocCkgeyB9XG4gICAgICAgICAqICAgICAgICAgbWV0aG9kKHApIHsgfVxuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gY29uc3RydWN0b3JcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0TWV0YWRhdGFLZXlzKEV4YW1wbGUpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIGNvbnN0cnVjdG9yKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRNZXRhZGF0YUtleXMoRXhhbXBsZSwgXCJzdGF0aWNQcm9wZXJ0eVwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBwcm90b3R5cGUpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE1ldGFkYXRhS2V5cyhFeGFtcGxlLnByb3RvdHlwZSwgXCJwcm9wZXJ0eVwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIG1ldGhvZCAob24gY29uc3RydWN0b3IpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE1ldGFkYXRhS2V5cyhFeGFtcGxlLCBcInN0YXRpY01ldGhvZFwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIG1ldGhvZCAob24gcHJvdG90eXBlKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRNZXRhZGF0YUtleXMoRXhhbXBsZS5wcm90b3R5cGUsIFwibWV0aG9kXCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gZ2V0TWV0YWRhdGFLZXlzKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICAgICAgICAgIGlmICghSXNPYmplY3QodGFyZ2V0KSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICBpZiAoIUlzVW5kZWZpbmVkKHByb3BlcnR5S2V5KSlcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUtleSA9IFRvUHJvcGVydHlLZXkocHJvcGVydHlLZXkpO1xuICAgICAgICAgICAgcmV0dXJuIE9yZGluYXJ5TWV0YWRhdGFLZXlzKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICAgICAgICB9XG4gICAgICAgIGV4cG9ydGVyKFwiZ2V0TWV0YWRhdGFLZXlzXCIsIGdldE1ldGFkYXRhS2V5cyk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSB1bmlxdWUgbWV0YWRhdGEga2V5cyBkZWZpbmVkIG9uIHRoZSB0YXJnZXQgb2JqZWN0LlxuICAgICAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgb2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRhZGF0YSBpcyBkZWZpbmVkLlxuICAgICAgICAgKiBAcGFyYW0gcHJvcGVydHlLZXkgKE9wdGlvbmFsKSBUaGUgcHJvcGVydHkga2V5IGZvciB0aGUgdGFyZ2V0LlxuICAgICAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiB1bmlxdWUgbWV0YWRhdGEga2V5cy5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xuICAgICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5IGRlY2xhcmF0aW9ucyBhcmUgbm90IHBhcnQgb2YgRVM2LCB0aG91Z2ggdGhleSBhcmUgdmFsaWQgaW4gVHlwZVNjcmlwdDpcbiAgICAgICAgICogICAgICAgICAvLyBzdGF0aWMgc3RhdGljUHJvcGVydHk7XG4gICAgICAgICAqICAgICAgICAgLy8gcHJvcGVydHk7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgICAgY29uc3RydWN0b3IocCkgeyB9XG4gICAgICAgICAqICAgICAgICAgc3RhdGljIHN0YXRpY01ldGhvZChwKSB7IH1cbiAgICAgICAgICogICAgICAgICBtZXRob2QocCkgeyB9XG4gICAgICAgICAqICAgICB9XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBjb25zdHJ1Y3RvclxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRPd25NZXRhZGF0YUtleXMoRXhhbXBsZSk7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gY29uc3RydWN0b3IpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE93bk1ldGFkYXRhS2V5cyhFeGFtcGxlLCBcInN0YXRpY1Byb3BlcnR5XCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIHByb3RvdHlwZSlcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGFLZXlzKEV4YW1wbGUucHJvdG90eXBlLCBcInByb3BlcnR5XCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBjb25zdHJ1Y3RvcilcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGFLZXlzKEV4YW1wbGUsIFwic3RhdGljTWV0aG9kXCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBwcm90b3R5cGUpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE93bk1ldGFkYXRhS2V5cyhFeGFtcGxlLnByb3RvdHlwZSwgXCJtZXRob2RcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YUtleXModGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgICAgICAgICAgaWYgKCFJc09iamVjdCh0YXJnZXQpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgIGlmICghSXNVbmRlZmluZWQocHJvcGVydHlLZXkpKVxuICAgICAgICAgICAgICAgIHByb3BlcnR5S2V5ID0gVG9Qcm9wZXJ0eUtleShwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgICByZXR1cm4gT3JkaW5hcnlPd25NZXRhZGF0YUtleXModGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwb3J0ZXIoXCJnZXRPd25NZXRhZGF0YUtleXNcIiwgZ2V0T3duTWV0YWRhdGFLZXlzKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlbGV0ZXMgdGhlIG1ldGFkYXRhIGVudHJ5IGZyb20gdGhlIHRhcmdldCBvYmplY3Qgd2l0aCB0aGUgcHJvdmlkZWQga2V5LlxuICAgICAgICAgKiBAcGFyYW0gbWV0YWRhdGFLZXkgQSBrZXkgdXNlZCB0byBzdG9yZSBhbmQgcmV0cmlldmUgbWV0YWRhdGEuXG4gICAgICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3Qgb24gd2hpY2ggdGhlIG1ldGFkYXRhIGlzIGRlZmluZWQuXG4gICAgICAgICAqIEBwYXJhbSBwcm9wZXJ0eUtleSAoT3B0aW9uYWwpIFRoZSBwcm9wZXJ0eSBrZXkgZm9yIHRoZSB0YXJnZXQuXG4gICAgICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbWV0YWRhdGEgZW50cnkgd2FzIGZvdW5kIGFuZCBkZWxldGVkOyBvdGhlcndpc2UsIGZhbHNlLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgY2xhc3MgRXhhbXBsZSB7XG4gICAgICAgICAqICAgICAgICAgLy8gcHJvcGVydHkgZGVjbGFyYXRpb25zIGFyZSBub3QgcGFydCBvZiBFUzYsIHRob3VnaCB0aGV5IGFyZSB2YWxpZCBpbiBUeXBlU2NyaXB0OlxuICAgICAgICAgKiAgICAgICAgIC8vIHN0YXRpYyBzdGF0aWNQcm9wZXJ0eTtcbiAgICAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICAgICBjb25zdHJ1Y3RvcihwKSB7IH1cbiAgICAgICAgICogICAgICAgICBzdGF0aWMgc3RhdGljTWV0aG9kKHApIHsgfVxuICAgICAgICAgKiAgICAgICAgIG1ldGhvZChwKSB7IH1cbiAgICAgICAgICogICAgIH1cbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIGNvbnN0cnVjdG9yXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmRlbGV0ZU1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZSk7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gY29uc3RydWN0b3IpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmRlbGV0ZU1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZSwgXCJzdGF0aWNQcm9wZXJ0eVwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBwcm90b3R5cGUpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmRlbGV0ZU1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZS5wcm90b3R5cGUsIFwicHJvcGVydHlcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBtZXRob2QgKG9uIGNvbnN0cnVjdG9yKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5kZWxldGVNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUsIFwic3RhdGljTWV0aG9kXCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBwcm90b3R5cGUpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmRlbGV0ZU1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZS5wcm90b3R5cGUsIFwibWV0aG9kXCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gZGVsZXRlTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICAgICAgICAgIGlmICghSXNPYmplY3QodGFyZ2V0KSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICBpZiAoIUlzVW5kZWZpbmVkKHByb3BlcnR5S2V5KSlcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUtleSA9IFRvUHJvcGVydHlLZXkocHJvcGVydHlLZXkpO1xuICAgICAgICAgICAgaWYgKCFJc09iamVjdCh0YXJnZXQpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgIGlmICghSXNVbmRlZmluZWQocHJvcGVydHlLZXkpKVxuICAgICAgICAgICAgICAgIHByb3BlcnR5S2V5ID0gVG9Qcm9wZXJ0eUtleShwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgICB2YXIgcHJvdmlkZXIgPSBHZXRNZXRhZGF0YVByb3ZpZGVyKHRhcmdldCwgcHJvcGVydHlLZXksIC8qQ3JlYXRlKi8gZmFsc2UpO1xuICAgICAgICAgICAgaWYgKElzVW5kZWZpbmVkKHByb3ZpZGVyKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gcHJvdmlkZXIuT3JkaW5hcnlEZWxldGVNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwb3J0ZXIoXCJkZWxldGVNZXRhZGF0YVwiLCBkZWxldGVNZXRhZGF0YSk7XG4gICAgICAgIGZ1bmN0aW9uIERlY29yYXRlQ29uc3RydWN0b3IoZGVjb3JhdG9ycywgdGFyZ2V0KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICAgICAgICAgIHZhciBkZWNvcmF0b3IgPSBkZWNvcmF0b3JzW2ldO1xuICAgICAgICAgICAgICAgIHZhciBkZWNvcmF0ZWQgPSBkZWNvcmF0b3IodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBpZiAoIUlzVW5kZWZpbmVkKGRlY29yYXRlZCkgJiYgIUlzTnVsbChkZWNvcmF0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghSXNDb25zdHJ1Y3RvcihkZWNvcmF0ZWQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBkZWNvcmF0ZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBEZWNvcmF0ZVByb3BlcnR5KGRlY29yYXRvcnMsIHRhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlY29yYXRvciA9IGRlY29yYXRvcnNbaV07XG4gICAgICAgICAgICAgICAgdmFyIGRlY29yYXRlZCA9IGRlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgICAgICAgICBpZiAoIUlzVW5kZWZpbmVkKGRlY29yYXRlZCkgJiYgIUlzTnVsbChkZWNvcmF0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghSXNPYmplY3QoZGVjb3JhdGVkKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvciA9IGRlY29yYXRlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICAgICAgfVxuICAgICAgICAvLyAzLjEuMS4xIE9yZGluYXJ5SGFzTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApXG4gICAgICAgIC8vIGh0dHBzOi8vcmJ1Y2t0b24uZ2l0aHViLmlvL3JlZmxlY3QtbWV0YWRhdGEvI29yZGluYXJ5aGFzbWV0YWRhdGFcbiAgICAgICAgZnVuY3Rpb24gT3JkaW5hcnlIYXNNZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCkge1xuICAgICAgICAgICAgdmFyIGhhc093biA9IE9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICAgICAgICAgICAgaWYgKGhhc093bilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBwYXJlbnQgPSBPcmRpbmFyeUdldFByb3RvdHlwZU9mKE8pO1xuICAgICAgICAgICAgaWYgKCFJc051bGwocGFyZW50KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gT3JkaW5hcnlIYXNNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyAzLjEuMi4xIE9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApXG4gICAgICAgIC8vIGh0dHBzOi8vcmJ1Y2t0b24uZ2l0aHViLmlvL3JlZmxlY3QtbWV0YWRhdGEvI29yZGluYXJ5aGFzb3dubWV0YWRhdGFcbiAgICAgICAgZnVuY3Rpb24gT3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCkge1xuICAgICAgICAgICAgdmFyIHByb3ZpZGVyID0gR2V0TWV0YWRhdGFQcm92aWRlcihPLCBQLCAvKkNyZWF0ZSovIGZhbHNlKTtcbiAgICAgICAgICAgIGlmIChJc1VuZGVmaW5lZChwcm92aWRlcikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIFRvQm9vbGVhbihwcm92aWRlci5PcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gMy4xLjMuMSBPcmRpbmFyeUdldE1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKVxuICAgICAgICAvLyBodHRwczovL3JidWNrdG9uLmdpdGh1Yi5pby9yZWZsZWN0LW1ldGFkYXRhLyNvcmRpbmFyeWdldG1ldGFkYXRhXG4gICAgICAgIGZ1bmN0aW9uIE9yZGluYXJ5R2V0TWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgICAgICAgICAgIHZhciBoYXNPd24gPSBPcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgICAgICAgICAgIGlmIChoYXNPd24pXG4gICAgICAgICAgICAgICAgcmV0dXJuIE9yZGluYXJ5R2V0T3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICAgICAgICAgICAgdmFyIHBhcmVudCA9IE9yZGluYXJ5R2V0UHJvdG90eXBlT2YoTyk7XG4gICAgICAgICAgICBpZiAoIUlzTnVsbChwYXJlbnQpKVxuICAgICAgICAgICAgICAgIHJldHVybiBPcmRpbmFyeUdldE1ldGFkYXRhKE1ldGFkYXRhS2V5LCBwYXJlbnQsIFApO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvLyAzLjEuNC4xIE9yZGluYXJ5R2V0T3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApXG4gICAgICAgIC8vIGh0dHBzOi8vcmJ1Y2t0b24uZ2l0aHViLmlvL3JlZmxlY3QtbWV0YWRhdGEvI29yZGluYXJ5Z2V0b3dubWV0YWRhdGFcbiAgICAgICAgZnVuY3Rpb24gT3JkaW5hcnlHZXRPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCkge1xuICAgICAgICAgICAgdmFyIHByb3ZpZGVyID0gR2V0TWV0YWRhdGFQcm92aWRlcihPLCBQLCAvKkNyZWF0ZSovIGZhbHNlKTtcbiAgICAgICAgICAgIGlmIChJc1VuZGVmaW5lZChwcm92aWRlcikpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyLk9yZGluYXJ5R2V0T3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICAgICAgICB9XG4gICAgICAgIC8vIDMuMS41LjEgT3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSwgTywgUClcbiAgICAgICAgLy8gaHR0cHM6Ly9yYnVja3Rvbi5naXRodWIuaW8vcmVmbGVjdC1tZXRhZGF0YS8jb3JkaW5hcnlkZWZpbmVvd25tZXRhZGF0YVxuICAgICAgICBmdW5jdGlvbiBPcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlLCBPLCBQKSB7XG4gICAgICAgICAgICB2YXIgcHJvdmlkZXIgPSBHZXRNZXRhZGF0YVByb3ZpZGVyKE8sIFAsIC8qQ3JlYXRlKi8gdHJ1ZSk7XG4gICAgICAgICAgICBwcm92aWRlci5PcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlLCBPLCBQKTtcbiAgICAgICAgfVxuICAgICAgICAvLyAzLjEuNi4xIE9yZGluYXJ5TWV0YWRhdGFLZXlzKE8sIFApXG4gICAgICAgIC8vIGh0dHBzOi8vcmJ1Y2t0b24uZ2l0aHViLmlvL3JlZmxlY3QtbWV0YWRhdGEvI29yZGluYXJ5bWV0YWRhdGFrZXlzXG4gICAgICAgIGZ1bmN0aW9uIE9yZGluYXJ5TWV0YWRhdGFLZXlzKE8sIFApIHtcbiAgICAgICAgICAgIHZhciBvd25LZXlzID0gT3JkaW5hcnlPd25NZXRhZGF0YUtleXMoTywgUCk7XG4gICAgICAgICAgICB2YXIgcGFyZW50ID0gT3JkaW5hcnlHZXRQcm90b3R5cGVPZihPKTtcbiAgICAgICAgICAgIGlmIChwYXJlbnQgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG93bktleXM7XG4gICAgICAgICAgICB2YXIgcGFyZW50S2V5cyA9IE9yZGluYXJ5TWV0YWRhdGFLZXlzKHBhcmVudCwgUCk7XG4gICAgICAgICAgICBpZiAocGFyZW50S2V5cy5sZW5ndGggPD0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gb3duS2V5cztcbiAgICAgICAgICAgIGlmIChvd25LZXlzLmxlbmd0aCA8PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnRLZXlzO1xuICAgICAgICAgICAgdmFyIHNldCA9IG5ldyBfU2V0KCk7XG4gICAgICAgICAgICB2YXIga2V5cyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBvd25LZXlzXzEgPSBvd25LZXlzOyBfaSA8IG93bktleXNfMS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gb3duS2V5c18xW19pXTtcbiAgICAgICAgICAgICAgICB2YXIgaGFzS2V5ID0gc2V0LmhhcyhrZXkpO1xuICAgICAgICAgICAgICAgIGlmICghaGFzS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldC5hZGQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgX2EgPSAwLCBwYXJlbnRLZXlzXzEgPSBwYXJlbnRLZXlzOyBfYSA8IHBhcmVudEtleXNfMS5sZW5ndGg7IF9hKyspIHtcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gcGFyZW50S2V5c18xW19hXTtcbiAgICAgICAgICAgICAgICB2YXIgaGFzS2V5ID0gc2V0LmhhcyhrZXkpO1xuICAgICAgICAgICAgICAgIGlmICghaGFzS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldC5hZGQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gMy4xLjcuMSBPcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhPLCBQKVxuICAgICAgICAvLyBodHRwczovL3JidWNrdG9uLmdpdGh1Yi5pby9yZWZsZWN0LW1ldGFkYXRhLyNvcmRpbmFyeW93bm1ldGFkYXRha2V5c1xuICAgICAgICBmdW5jdGlvbiBPcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhPLCBQKSB7XG4gICAgICAgICAgICB2YXIgcHJvdmlkZXIgPSBHZXRNZXRhZGF0YVByb3ZpZGVyKE8sIFAsIC8qY3JlYXRlKi8gZmFsc2UpO1xuICAgICAgICAgICAgaWYgKCFwcm92aWRlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwcm92aWRlci5PcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhPLCBQKTtcbiAgICAgICAgfVxuICAgICAgICAvLyA2IEVDTUFTY3JpcHQgRGF0YSBUeXBlcyBhbmQgVmFsdWVzXG4gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG4gICAgICAgIGZ1bmN0aW9uIFR5cGUoeCkge1xuICAgICAgICAgICAgaWYgKHggPT09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIDEgLyogTnVsbCAqLztcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHgpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6IHJldHVybiAwIC8qIFVuZGVmaW5lZCAqLztcbiAgICAgICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOiByZXR1cm4gMiAvKiBCb29sZWFuICovO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjogcmV0dXJuIDMgLyogU3RyaW5nICovO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjogcmV0dXJuIDQgLyogU3ltYm9sICovO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjogcmV0dXJuIDUgLyogTnVtYmVyICovO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjogcmV0dXJuIHggPT09IG51bGwgPyAxIC8qIE51bGwgKi8gOiA2IC8qIE9iamVjdCAqLztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gNiAvKiBPYmplY3QgKi87XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gNi4xLjEgVGhlIFVuZGVmaW5lZCBUeXBlXG4gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMtdW5kZWZpbmVkLXR5cGVcbiAgICAgICAgZnVuY3Rpb24gSXNVbmRlZmluZWQoeCkge1xuICAgICAgICAgICAgcmV0dXJuIHggPT09IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvLyA2LjEuMiBUaGUgTnVsbCBUeXBlXG4gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMtbnVsbC10eXBlXG4gICAgICAgIGZ1bmN0aW9uIElzTnVsbCh4KSB7XG4gICAgICAgICAgICByZXR1cm4geCA9PT0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvLyA2LjEuNSBUaGUgU3ltYm9sIFR5cGVcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcy1zeW1ib2wtdHlwZVxuICAgICAgICBmdW5jdGlvbiBJc1N5bWJvbCh4KSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNi4xLjcgVGhlIE9iamVjdCBUeXBlXG4gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC10eXBlXG4gICAgICAgIGZ1bmN0aW9uIElzT2JqZWN0KHgpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgeCA9PT0gXCJvYmplY3RcIiA/IHggIT09IG51bGwgOiB0eXBlb2YgeCA9PT0gXCJmdW5jdGlvblwiO1xuICAgICAgICB9XG4gICAgICAgIC8vIDcuMSBUeXBlIENvbnZlcnNpb25cbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdHlwZS1jb252ZXJzaW9uXG4gICAgICAgIC8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxuICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxuICAgICAgICBmdW5jdGlvbiBUb1ByaW1pdGl2ZShpbnB1dCwgUHJlZmVycmVkVHlwZSkge1xuICAgICAgICAgICAgc3dpdGNoIChUeXBlKGlucHV0KSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMCAvKiBVbmRlZmluZWQgKi86IHJldHVybiBpbnB1dDtcbiAgICAgICAgICAgICAgICBjYXNlIDEgLyogTnVsbCAqLzogcmV0dXJuIGlucHV0O1xuICAgICAgICAgICAgICAgIGNhc2UgMiAvKiBCb29sZWFuICovOiByZXR1cm4gaW5wdXQ7XG4gICAgICAgICAgICAgICAgY2FzZSAzIC8qIFN0cmluZyAqLzogcmV0dXJuIGlucHV0O1xuICAgICAgICAgICAgICAgIGNhc2UgNCAvKiBTeW1ib2wgKi86IHJldHVybiBpbnB1dDtcbiAgICAgICAgICAgICAgICBjYXNlIDUgLyogTnVtYmVyICovOiByZXR1cm4gaW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaGludCA9IFByZWZlcnJlZFR5cGUgPT09IDMgLyogU3RyaW5nICovID8gXCJzdHJpbmdcIiA6IFByZWZlcnJlZFR5cGUgPT09IDUgLyogTnVtYmVyICovID8gXCJudW1iZXJcIiA6IFwiZGVmYXVsdFwiO1xuICAgICAgICAgICAgdmFyIGV4b3RpY1RvUHJpbSA9IEdldE1ldGhvZChpbnB1dCwgdG9QcmltaXRpdmVTeW1ib2wpO1xuICAgICAgICAgICAgaWYgKGV4b3RpY1RvUHJpbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGV4b3RpY1RvUHJpbS5jYWxsKGlucHV0LCBoaW50KTtcbiAgICAgICAgICAgICAgICBpZiAoSXNPYmplY3QocmVzdWx0KSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gT3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgaGludCA9PT0gXCJkZWZhdWx0XCIgPyBcIm51bWJlclwiIDogaGludCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNy4xLjEuMSBPcmRpbmFyeVRvUHJpbWl0aXZlKE8sIGhpbnQpXG4gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbiAgICAgICAgZnVuY3Rpb24gT3JkaW5hcnlUb1ByaW1pdGl2ZShPLCBoaW50KSB7XG4gICAgICAgICAgICBpZiAoaGludCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHZhciB0b1N0cmluZ18xID0gTy50b1N0cmluZztcbiAgICAgICAgICAgICAgICBpZiAoSXNDYWxsYWJsZSh0b1N0cmluZ18xKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdG9TdHJpbmdfMS5jYWxsKE8pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIUlzT2JqZWN0KHJlc3VsdCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgdmFsdWVPZiA9IE8udmFsdWVPZjtcbiAgICAgICAgICAgICAgICBpZiAoSXNDYWxsYWJsZSh2YWx1ZU9mKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdmFsdWVPZi5jYWxsKE8pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIUlzT2JqZWN0KHJlc3VsdCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZU9mID0gTy52YWx1ZU9mO1xuICAgICAgICAgICAgICAgIGlmIChJc0NhbGxhYmxlKHZhbHVlT2YpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB2YWx1ZU9mLmNhbGwoTyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghSXNPYmplY3QocmVzdWx0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciB0b1N0cmluZ18yID0gTy50b1N0cmluZztcbiAgICAgICAgICAgICAgICBpZiAoSXNDYWxsYWJsZSh0b1N0cmluZ18yKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdG9TdHJpbmdfMi5jYWxsKE8pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIUlzT2JqZWN0KHJlc3VsdCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyA3LjEuMiBUb0Jvb2xlYW4oYXJndW1lbnQpXG4gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8yMDE2LyNzZWMtdG9ib29sZWFuXG4gICAgICAgIGZ1bmN0aW9uIFRvQm9vbGVhbihhcmd1bWVudCkge1xuICAgICAgICAgICAgcmV0dXJuICEhYXJndW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNy4xLjEyIFRvU3RyaW5nKGFyZ3VtZW50KVxuICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b3N0cmluZ1xuICAgICAgICBmdW5jdGlvbiBUb1N0cmluZyhhcmd1bWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCIgKyBhcmd1bWVudDtcbiAgICAgICAgfVxuICAgICAgICAvLyA3LjEuMTQgVG9Qcm9wZXJ0eUtleShhcmd1bWVudClcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxuICAgICAgICBmdW5jdGlvbiBUb1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gVG9QcmltaXRpdmUoYXJndW1lbnQsIDMgLyogU3RyaW5nICovKTtcbiAgICAgICAgICAgIGlmIChJc1N5bWJvbChrZXkpKVxuICAgICAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgICAgICByZXR1cm4gVG9TdHJpbmcoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICAvLyA3LjIgVGVzdGluZyBhbmQgQ29tcGFyaXNvbiBPcGVyYXRpb25zXG4gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRlc3RpbmctYW5kLWNvbXBhcmlzb24tb3BlcmF0aW9uc1xuICAgICAgICAvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxuICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4gICAgICAgIGZ1bmN0aW9uIElzQXJyYXkoYXJndW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5XG4gICAgICAgICAgICAgICAgPyBBcnJheS5pc0FycmF5KGFyZ3VtZW50KVxuICAgICAgICAgICAgICAgIDogYXJndW1lbnQgaW5zdGFuY2VvZiBPYmplY3RcbiAgICAgICAgICAgICAgICAgICAgPyBhcmd1bWVudCBpbnN0YW5jZW9mIEFycmF5XG4gICAgICAgICAgICAgICAgICAgIDogT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KSA9PT0gXCJbb2JqZWN0IEFycmF5XVwiO1xuICAgICAgICB9XG4gICAgICAgIC8vIDcuMi4zIElzQ2FsbGFibGUoYXJndW1lbnQpXG4gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbiAgICAgICAgZnVuY3Rpb24gSXNDYWxsYWJsZShhcmd1bWVudCkge1xuICAgICAgICAgICAgLy8gTk9URTogVGhpcyBpcyBhbiBhcHByb3hpbWF0aW9uIGFzIHdlIGNhbm5vdCBjaGVjayBmb3IgW1tDYWxsXV0gaW50ZXJuYWwgbWV0aG9kLlxuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PT0gXCJmdW5jdGlvblwiO1xuICAgICAgICB9XG4gICAgICAgIC8vIDcuMi40IElzQ29uc3RydWN0b3IoYXJndW1lbnQpXG4gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWlzY29uc3RydWN0b3JcbiAgICAgICAgZnVuY3Rpb24gSXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICAgICAgICAgICAgLy8gTk9URTogVGhpcyBpcyBhbiBhcHByb3hpbWF0aW9uIGFzIHdlIGNhbm5vdCBjaGVjayBmb3IgW1tDb25zdHJ1Y3RdXSBpbnRlcm5hbCBtZXRob2QuXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSBcImZ1bmN0aW9uXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNy4yLjcgSXNQcm9wZXJ0eUtleShhcmd1bWVudClcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtaXNwcm9wZXJ0eWtleVxuICAgICAgICBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG4gICAgICAgICAgICBzd2l0Y2ggKFR5cGUoYXJndW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAzIC8qIFN0cmluZyAqLzogcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgY2FzZSA0IC8qIFN5bWJvbCAqLzogcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIFNhbWVWYWx1ZVplcm8oeCwgeSkge1xuICAgICAgICAgICAgcmV0dXJuIHggPT09IHkgfHwgeCAhPT0geCAmJiB5ICE9PSB5O1xuICAgICAgICB9XG4gICAgICAgIC8vIDcuMyBPcGVyYXRpb25zIG9uIE9iamVjdHNcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb3BlcmF0aW9ucy1vbi1vYmplY3RzXG4gICAgICAgIC8vIDcuMy45IEdldE1ldGhvZChWLCBQKVxuICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1nZXRtZXRob2RcbiAgICAgICAgZnVuY3Rpb24gR2V0TWV0aG9kKFYsIFApIHtcbiAgICAgICAgICAgIHZhciBmdW5jID0gVltQXTtcbiAgICAgICAgICAgIGlmIChmdW5jID09PSB1bmRlZmluZWQgfHwgZnVuYyA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKCFJc0NhbGxhYmxlKGZ1bmMpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jO1xuICAgICAgICB9XG4gICAgICAgIC8vIDcuNCBPcGVyYXRpb25zIG9uIEl0ZXJhdG9yIE9iamVjdHNcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb3BlcmF0aW9ucy1vbi1pdGVyYXRvci1vYmplY3RzXG4gICAgICAgIGZ1bmN0aW9uIEdldEl0ZXJhdG9yKG9iaikge1xuICAgICAgICAgICAgdmFyIG1ldGhvZCA9IEdldE1ldGhvZChvYmosIGl0ZXJhdG9yU3ltYm9sKTtcbiAgICAgICAgICAgIGlmICghSXNDYWxsYWJsZShtZXRob2QpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gZnJvbSBDYWxsXG4gICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBtZXRob2QuY2FsbChvYmopO1xuICAgICAgICAgICAgaWYgKCFJc09iamVjdChpdGVyYXRvcikpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yO1xuICAgICAgICB9XG4gICAgICAgIC8vIDcuNC40IEl0ZXJhdG9yVmFsdWUoaXRlclJlc3VsdClcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLzIwMTYvI3NlYy1pdGVyYXRvcnZhbHVlXG4gICAgICAgIGZ1bmN0aW9uIEl0ZXJhdG9yVmFsdWUoaXRlclJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJSZXN1bHQudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNy40LjUgSXRlcmF0b3JTdGVwKGl0ZXJhdG9yKVxuICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1pdGVyYXRvcnN0ZXBcbiAgICAgICAgZnVuY3Rpb24gSXRlcmF0b3JTdGVwKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gZmFsc2UgOiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtaXRlcmF0b3JjbG9zZVxuICAgICAgICBmdW5jdGlvbiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGl0ZXJhdG9yW1wicmV0dXJuXCJdO1xuICAgICAgICAgICAgaWYgKGYpXG4gICAgICAgICAgICAgICAgZi5jYWxsKGl0ZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICAvLyA5LjEgT3JkaW5hcnkgT2JqZWN0IEludGVybmFsIE1ldGhvZHMgYW5kIEludGVybmFsIFNsb3RzXG4gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9yZGluYXJ5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90c1xuICAgICAgICAvLyA5LjEuMS4xIE9yZGluYXJ5R2V0UHJvdG90eXBlT2YoTylcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb3JkaW5hcnlnZXRwcm90b3R5cGVvZlxuICAgICAgICBmdW5jdGlvbiBPcmRpbmFyeUdldFByb3RvdHlwZU9mKE8pIHtcbiAgICAgICAgICAgIHZhciBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihPKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgTyAhPT0gXCJmdW5jdGlvblwiIHx8IE8gPT09IGZ1bmN0aW9uUHJvdG90eXBlKVxuICAgICAgICAgICAgICAgIHJldHVybiBwcm90bztcbiAgICAgICAgICAgIC8vIFR5cGVTY3JpcHQgZG9lc24ndCBzZXQgX19wcm90b19fIGluIEVTNSwgYXMgaXQncyBub24tc3RhbmRhcmQuXG4gICAgICAgICAgICAvLyBUcnkgdG8gZGV0ZXJtaW5lIHRoZSBzdXBlcmNsYXNzIGNvbnN0cnVjdG9yLiBDb21wYXRpYmxlIGltcGxlbWVudGF0aW9uc1xuICAgICAgICAgICAgLy8gbXVzdCBlaXRoZXIgc2V0IF9fcHJvdG9fXyBvbiBhIHN1YmNsYXNzIGNvbnN0cnVjdG9yIHRvIHRoZSBzdXBlcmNsYXNzIGNvbnN0cnVjdG9yLFxuICAgICAgICAgICAgLy8gb3IgZW5zdXJlIGVhY2ggY2xhc3MgaGFzIGEgdmFsaWQgYGNvbnN0cnVjdG9yYCBwcm9wZXJ0eSBvbiBpdHMgcHJvdG90eXBlIHRoYXRcbiAgICAgICAgICAgIC8vIHBvaW50cyBiYWNrIHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIEZ1bmN0aW9uLltbUHJvdG90eXBlXV0sIHRoZW4gdGhpcyBpcyBkZWZpbmF0ZWx5IGluaGVyaXRlZC5cbiAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiBpbiBFUzYgb3Igd2hlbiB1c2luZyBfX3Byb3RvX18gaW4gYSBjb21wYXRpYmxlIGJyb3dzZXIuXG4gICAgICAgICAgICBpZiAocHJvdG8gIT09IGZ1bmN0aW9uUHJvdG90eXBlKVxuICAgICAgICAgICAgICAgIHJldHVybiBwcm90bztcbiAgICAgICAgICAgIC8vIElmIHRoZSBzdXBlciBwcm90b3R5cGUgaXMgT2JqZWN0LnByb3RvdHlwZSwgbnVsbCwgb3IgdW5kZWZpbmVkLCB0aGVuIHdlIGNhbm5vdCBkZXRlcm1pbmUgdGhlIGhlcml0YWdlLlxuICAgICAgICAgICAgdmFyIHByb3RvdHlwZSA9IE8ucHJvdG90eXBlO1xuICAgICAgICAgICAgdmFyIHByb3RvdHlwZVByb3RvID0gcHJvdG90eXBlICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpO1xuICAgICAgICAgICAgaWYgKHByb3RvdHlwZVByb3RvID09IG51bGwgfHwgcHJvdG90eXBlUHJvdG8gPT09IE9iamVjdC5wcm90b3R5cGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3RvO1xuICAgICAgICAgICAgLy8gSWYgdGhlIGNvbnN0cnVjdG9yIHdhcyBub3QgYSBmdW5jdGlvbiwgdGhlbiB3ZSBjYW5ub3QgZGV0ZXJtaW5lIHRoZSBoZXJpdGFnZS5cbiAgICAgICAgICAgIHZhciBjb25zdHJ1Y3RvciA9IHByb3RvdHlwZVByb3RvLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zdHJ1Y3RvciAhPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgICAgIHJldHVybiBwcm90bztcbiAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgc29tZSBraW5kIG9mIHNlbGYtcmVmZXJlbmNlLCB0aGVuIHdlIGNhbm5vdCBkZXRlcm1pbmUgdGhlIGhlcml0YWdlLlxuICAgICAgICAgICAgaWYgKGNvbnN0cnVjdG9yID09PSBPKVxuICAgICAgICAgICAgICAgIHJldHVybiBwcm90bztcbiAgICAgICAgICAgIC8vIHdlIGhhdmUgYSBwcmV0dHkgZ29vZCBndWVzcyBhdCB0aGUgaGVyaXRhZ2UuXG4gICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7XG4gICAgICAgIH1cbiAgICAgICAgLy8gR2xvYmFsIG1ldGFkYXRhIHJlZ2lzdHJ5XG4gICAgICAgIC8vIC0gQWxsb3dzIGBpbXBvcnQgXCJyZWZsZWN0LW1ldGFkYXRhXCJgIGFuZCBgaW1wb3J0IFwicmVmbGVjdC1tZXRhZGF0YS9uby1jb25mbGljdFwiYCB0byBpbnRlcm9wZXJhdGUuXG4gICAgICAgIC8vIC0gVXNlcyBpc29sYXRlZCBtZXRhZGF0YSBpZiBgUmVmbGVjdGAgaXMgZnJvemVuIGJlZm9yZSB0aGUgcmVnaXN0cnkgY2FuIGJlIGluc3RhbGxlZC5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSByZWdpc3RyeSB1c2VkIHRvIGFsbG93IG11bHRpcGxlIGByZWZsZWN0LW1ldGFkYXRhYCBwcm92aWRlcnMuXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBDcmVhdGVNZXRhZGF0YVJlZ2lzdHJ5KCkge1xuICAgICAgICAgICAgdmFyIGZhbGxiYWNrO1xuICAgICAgICAgICAgaWYgKCFJc1VuZGVmaW5lZChyZWdpc3RyeVN5bWJvbCkgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2Ygcm9vdC5SZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICAgICAgICAgIShyZWdpc3RyeVN5bWJvbCBpbiByb290LlJlZmxlY3QpICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIHJvb3QuUmVmbGVjdC5kZWZpbmVNZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgLy8gaW50ZXJvcGVyYXRlIHdpdGggb2xkZXIgdmVyc2lvbiBvZiBgcmVmbGVjdC1tZXRhZGF0YWAgdGhhdCBkaWQgbm90IHN1cHBvcnQgYSByZWdpc3RyeS5cbiAgICAgICAgICAgICAgICBmYWxsYmFjayA9IENyZWF0ZUZhbGxiYWNrUHJvdmlkZXIocm9vdC5SZWZsZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBmaXJzdDtcbiAgICAgICAgICAgIHZhciBzZWNvbmQ7XG4gICAgICAgICAgICB2YXIgcmVzdDtcbiAgICAgICAgICAgIHZhciB0YXJnZXRQcm92aWRlck1hcCA9IG5ldyBfV2Vha01hcCgpO1xuICAgICAgICAgICAgdmFyIHJlZ2lzdHJ5ID0ge1xuICAgICAgICAgICAgICAgIHJlZ2lzdGVyUHJvdmlkZXI6IHJlZ2lzdGVyUHJvdmlkZXIsXG4gICAgICAgICAgICAgICAgZ2V0UHJvdmlkZXI6IGdldFByb3ZpZGVyLFxuICAgICAgICAgICAgICAgIHNldFByb3ZpZGVyOiBzZXRQcm92aWRlcixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcmVnaXN0cnk7XG4gICAgICAgICAgICBmdW5jdGlvbiByZWdpc3RlclByb3ZpZGVyKHByb3ZpZGVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFPYmplY3QuaXNFeHRlbnNpYmxlKHJlZ2lzdHJ5KSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgYWRkIHByb3ZpZGVyIHRvIGEgZnJvemVuIHJlZ2lzdHJ5LlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgZmFsbGJhY2sgPT09IHByb3ZpZGVyOiBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBJc1VuZGVmaW5lZChmaXJzdCk6XG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IHByb3ZpZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgZmlyc3QgPT09IHByb3ZpZGVyOiBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBJc1VuZGVmaW5lZChzZWNvbmQpOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kID0gcHJvdmlkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBzZWNvbmQgPT09IHByb3ZpZGVyOiBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN0ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdCA9IG5ldyBfU2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN0LmFkZChwcm92aWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRQcm92aWRlck5vQ2FjaGUoTywgUCkge1xuICAgICAgICAgICAgICAgIGlmICghSXNVbmRlZmluZWQoZmlyc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdC5pc1Byb3ZpZGVyRm9yKE8sIFApKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0O1xuICAgICAgICAgICAgICAgICAgICBpZiAoIUlzVW5kZWZpbmVkKHNlY29uZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWNvbmQuaXNQcm92aWRlckZvcihPLCBQKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUlzVW5kZWZpbmVkKHJlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gR2V0SXRlcmF0b3IocmVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBJdGVyYXRvclN0ZXAoaXRlcmF0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb3ZpZGVyID0gSXRlcmF0b3JWYWx1ZShuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3ZpZGVyLmlzUHJvdmlkZXJGb3IoTywgUCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghSXNVbmRlZmluZWQoZmFsbGJhY2spICYmIGZhbGxiYWNrLmlzUHJvdmlkZXJGb3IoTywgUCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbGxiYWNrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0UHJvdmlkZXIoTywgUCkge1xuICAgICAgICAgICAgICAgIHZhciBwcm92aWRlck1hcCA9IHRhcmdldFByb3ZpZGVyTWFwLmdldChPKTtcbiAgICAgICAgICAgICAgICB2YXIgcHJvdmlkZXI7XG4gICAgICAgICAgICAgICAgaWYgKCFJc1VuZGVmaW5lZChwcm92aWRlck1hcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXIgPSBwcm92aWRlck1hcC5nZXQoUCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghSXNVbmRlZmluZWQocHJvdmlkZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvdmlkZXIgPSBnZXRQcm92aWRlck5vQ2FjaGUoTywgUCk7XG4gICAgICAgICAgICAgICAgaWYgKCFJc1VuZGVmaW5lZChwcm92aWRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKElzVW5kZWZpbmVkKHByb3ZpZGVyTWFwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXJNYXAgPSBuZXcgX01hcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0UHJvdmlkZXJNYXAuc2V0KE8sIHByb3ZpZGVyTWFwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwcm92aWRlck1hcC5zZXQoUCwgcHJvdmlkZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvdmlkZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBoYXNQcm92aWRlcihwcm92aWRlcikge1xuICAgICAgICAgICAgICAgIGlmIChJc1VuZGVmaW5lZChwcm92aWRlcikpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3QgPT09IHByb3ZpZGVyIHx8IHNlY29uZCA9PT0gcHJvdmlkZXIgfHwgIUlzVW5kZWZpbmVkKHJlc3QpICYmIHJlc3QuaGFzKHByb3ZpZGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHNldFByb3ZpZGVyKE8sIFAsIHByb3ZpZGVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNQcm92aWRlcihwcm92aWRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0YWRhdGEgcHJvdmlkZXIgbm90IHJlZ2lzdGVyZWQuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgZXhpc3RpbmdQcm92aWRlciA9IGdldFByb3ZpZGVyKE8sIFApO1xuICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1Byb3ZpZGVyICE9PSBwcm92aWRlcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIUlzVW5kZWZpbmVkKGV4aXN0aW5nUHJvdmlkZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIHByb3ZpZGVyTWFwID0gdGFyZ2V0UHJvdmlkZXJNYXAuZ2V0KE8pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoSXNVbmRlZmluZWQocHJvdmlkZXJNYXApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlck1hcCA9IG5ldyBfTWFwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRQcm92aWRlck1hcC5zZXQoTywgcHJvdmlkZXJNYXApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyTWFwLnNldChQLCBwcm92aWRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIG9yIGNyZWF0ZXMgdGhlIHNoYXJlZCByZWdpc3RyeSBvZiBtZXRhZGF0YSBwcm92aWRlcnMuXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBHZXRPckNyZWF0ZU1ldGFkYXRhUmVnaXN0cnkoKSB7XG4gICAgICAgICAgICB2YXIgbWV0YWRhdGFSZWdpc3RyeTtcbiAgICAgICAgICAgIGlmICghSXNVbmRlZmluZWQocmVnaXN0cnlTeW1ib2wpICYmIElzT2JqZWN0KHJvb3QuUmVmbGVjdCkgJiYgT2JqZWN0LmlzRXh0ZW5zaWJsZShyb290LlJlZmxlY3QpKSB7XG4gICAgICAgICAgICAgICAgbWV0YWRhdGFSZWdpc3RyeSA9IHJvb3QuUmVmbGVjdFtyZWdpc3RyeVN5bWJvbF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoSXNVbmRlZmluZWQobWV0YWRhdGFSZWdpc3RyeSkpIHtcbiAgICAgICAgICAgICAgICBtZXRhZGF0YVJlZ2lzdHJ5ID0gQ3JlYXRlTWV0YWRhdGFSZWdpc3RyeSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFJc1VuZGVmaW5lZChyZWdpc3RyeVN5bWJvbCkgJiYgSXNPYmplY3Qocm9vdC5SZWZsZWN0KSAmJiBPYmplY3QuaXNFeHRlbnNpYmxlKHJvb3QuUmVmbGVjdCkpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocm9vdC5SZWZsZWN0LCByZWdpc3RyeVN5bWJvbCwge1xuICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWV0YWRhdGFSZWdpc3RyeVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhUmVnaXN0cnk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gQ3JlYXRlTWV0YWRhdGFQcm92aWRlcihyZWdpc3RyeSkge1xuICAgICAgICAgICAgLy8gW1tNZXRhZGF0YV1dIGludGVybmFsIHNsb3RcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vcmJ1Y2t0b24uZ2l0aHViLmlvL3JlZmxlY3QtbWV0YWRhdGEvI29yZGluYXJ5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90c1xuICAgICAgICAgICAgdmFyIG1ldGFkYXRhID0gbmV3IF9XZWFrTWFwKCk7XG4gICAgICAgICAgICB2YXIgcHJvdmlkZXIgPSB7XG4gICAgICAgICAgICAgICAgaXNQcm92aWRlckZvcjogZnVuY3Rpb24gKE8sIFApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldE1ldGFkYXRhID0gbWV0YWRhdGEuZ2V0KE8pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoSXNVbmRlZmluZWQodGFyZ2V0TWV0YWRhdGEpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0TWV0YWRhdGEuaGFzKFApO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgT3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YTogT3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBPcmRpbmFyeUhhc093bk1ldGFkYXRhOiBPcmRpbmFyeUhhc093bk1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIE9yZGluYXJ5R2V0T3duTWV0YWRhdGE6IE9yZGluYXJ5R2V0T3duTWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgT3JkaW5hcnlPd25NZXRhZGF0YUtleXM6IE9yZGluYXJ5T3duTWV0YWRhdGFLZXlzLFxuICAgICAgICAgICAgICAgIE9yZGluYXJ5RGVsZXRlTWV0YWRhdGE6IE9yZGluYXJ5RGVsZXRlTWV0YWRhdGEsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbWV0YWRhdGFSZWdpc3RyeS5yZWdpc3RlclByb3ZpZGVyKHByb3ZpZGVyKTtcbiAgICAgICAgICAgIHJldHVybiBwcm92aWRlcjtcbiAgICAgICAgICAgIGZ1bmN0aW9uIEdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgQ3JlYXRlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldE1ldGFkYXRhID0gbWV0YWRhdGEuZ2V0KE8pO1xuICAgICAgICAgICAgICAgIHZhciBjcmVhdGVkVGFyZ2V0TWV0YWRhdGEgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoSXNVbmRlZmluZWQodGFyZ2V0TWV0YWRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghQ3JlYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TWV0YWRhdGEgPSBuZXcgX01hcCgpO1xuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5zZXQoTywgdGFyZ2V0TWV0YWRhdGEpO1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkVGFyZ2V0TWV0YWRhdGEgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgbWV0YWRhdGFNYXAgPSB0YXJnZXRNZXRhZGF0YS5nZXQoUCk7XG4gICAgICAgICAgICAgICAgaWYgKElzVW5kZWZpbmVkKG1ldGFkYXRhTWFwKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIUNyZWF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhTWFwID0gbmV3IF9NYXAoKTtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TWV0YWRhdGEuc2V0KFAsIG1ldGFkYXRhTWFwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWdpc3RyeS5zZXRQcm92aWRlcihPLCBQLCBwcm92aWRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE1ldGFkYXRhLmRlbGV0ZShQKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjcmVhdGVkVGFyZ2V0TWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5kZWxldGUoTyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBwcm92aWRlciBmb3IgdGFyZ2V0LlwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbWV0YWRhdGFNYXA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyAzLjEuMi4xIE9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApXG4gICAgICAgICAgICAvLyBodHRwczovL3JidWNrdG9uLmdpdGh1Yi5pby9yZWZsZWN0LW1ldGFkYXRhLyNvcmRpbmFyeWhhc293bm1ldGFkYXRhXG4gICAgICAgICAgICBmdW5jdGlvbiBPcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1ldGFkYXRhTWFwID0gR2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCAvKkNyZWF0ZSovIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoSXNVbmRlZmluZWQobWV0YWRhdGFNYXApKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFRvQm9vbGVhbihtZXRhZGF0YU1hcC5oYXMoTWV0YWRhdGFLZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIDMuMS40LjEgT3JkaW5hcnlHZXRPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUClcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vcmJ1Y2t0b24uZ2l0aHViLmlvL3JlZmxlY3QtbWV0YWRhdGEvI29yZGluYXJ5Z2V0b3dubWV0YWRhdGFcbiAgICAgICAgICAgIGZ1bmN0aW9uIE9yZGluYXJ5R2V0T3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgICAgICAgICAgICAgICB2YXIgbWV0YWRhdGFNYXAgPSBHZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIC8qQ3JlYXRlKi8gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChJc1VuZGVmaW5lZChtZXRhZGF0YU1hcCkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhTWFwLmdldChNZXRhZGF0YUtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyAzLjEuNS4xIE9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUsIE8sIFApXG4gICAgICAgICAgICAvLyBodHRwczovL3JidWNrdG9uLmdpdGh1Yi5pby9yZWZsZWN0LW1ldGFkYXRhLyNvcmRpbmFyeWRlZmluZW93bm1ldGFkYXRhXG4gICAgICAgICAgICBmdW5jdGlvbiBPcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlLCBPLCBQKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1ldGFkYXRhTWFwID0gR2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCAvKkNyZWF0ZSovIHRydWUpO1xuICAgICAgICAgICAgICAgIG1ldGFkYXRhTWFwLnNldChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyAzLjEuNy4xIE9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKE8sIFApXG4gICAgICAgICAgICAvLyBodHRwczovL3JidWNrdG9uLmdpdGh1Yi5pby9yZWZsZWN0LW1ldGFkYXRhLyNvcmRpbmFyeW93bm1ldGFkYXRha2V5c1xuICAgICAgICAgICAgZnVuY3Rpb24gT3JkaW5hcnlPd25NZXRhZGF0YUtleXMoTywgUCkge1xuICAgICAgICAgICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgICAgICAgICAgdmFyIG1ldGFkYXRhTWFwID0gR2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCAvKkNyZWF0ZSovIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoSXNVbmRlZmluZWQobWV0YWRhdGFNYXApKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5cztcbiAgICAgICAgICAgICAgICB2YXIga2V5c09iaiA9IG1ldGFkYXRhTWFwLmtleXMoKTtcbiAgICAgICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBHZXRJdGVyYXRvcihrZXlzT2JqKTtcbiAgICAgICAgICAgICAgICB2YXIgayA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBJdGVyYXRvclN0ZXAoaXRlcmF0b3IpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXMubGVuZ3RoID0gaztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VmFsdWUgPSBJdGVyYXRvclZhbHVlKG5leHQpO1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5c1trXSA9IG5leHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIE9yZGluYXJ5RGVsZXRlTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgICAgICAgICAgICAgICB2YXIgbWV0YWRhdGFNYXAgPSBHZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIC8qQ3JlYXRlKi8gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChJc1VuZGVmaW5lZChtZXRhZGF0YU1hcCkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoIW1ldGFkYXRhTWFwLmRlbGV0ZShNZXRhZGF0YUtleSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAobWV0YWRhdGFNYXAuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQoTyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghSXNVbmRlZmluZWQodGFyZ2V0TWV0YWRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRNZXRhZGF0YS5kZWxldGUoUCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0TWV0YWRhdGEuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLmRlbGV0ZSh0YXJnZXRNZXRhZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gQ3JlYXRlRmFsbGJhY2tQcm92aWRlcihyZWZsZWN0KSB7XG4gICAgICAgICAgICB2YXIgZGVmaW5lTWV0YWRhdGEgPSByZWZsZWN0LmRlZmluZU1ldGFkYXRhLCBoYXNPd25NZXRhZGF0YSA9IHJlZmxlY3QuaGFzT3duTWV0YWRhdGEsIGdldE93bk1ldGFkYXRhID0gcmVmbGVjdC5nZXRPd25NZXRhZGF0YSwgZ2V0T3duTWV0YWRhdGFLZXlzID0gcmVmbGVjdC5nZXRPd25NZXRhZGF0YUtleXMsIGRlbGV0ZU1ldGFkYXRhID0gcmVmbGVjdC5kZWxldGVNZXRhZGF0YTtcbiAgICAgICAgICAgIHZhciBtZXRhZGF0YU93bmVyID0gbmV3IF9XZWFrTWFwKCk7XG4gICAgICAgICAgICB2YXIgcHJvdmlkZXIgPSB7XG4gICAgICAgICAgICAgICAgaXNQcm92aWRlckZvcjogZnVuY3Rpb24gKE8sIFApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1ldGFkYXRhUHJvcGVydHlTZXQgPSBtZXRhZGF0YU93bmVyLmdldChPKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFJc1VuZGVmaW5lZChtZXRhZGF0YVByb3BlcnR5U2V0KSAmJiBtZXRhZGF0YVByb3BlcnR5U2V0LmhhcyhQKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldE93bk1ldGFkYXRhS2V5cyhPLCBQKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1VuZGVmaW5lZChtZXRhZGF0YVByb3BlcnR5U2V0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhUHJvcGVydHlTZXQgPSBuZXcgX1NldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhT3duZXIuc2V0KE8sIG1ldGFkYXRhUHJvcGVydHlTZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGFQcm9wZXJ0eVNldC5hZGQoUCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBPcmRpbmFyeURlZmluZU93bk1ldGFkYXRhOiBkZWZpbmVNZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBPcmRpbmFyeUhhc093bk1ldGFkYXRhOiBoYXNPd25NZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBPcmRpbmFyeUdldE93bk1ldGFkYXRhOiBnZXRPd25NZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBPcmRpbmFyeU93bk1ldGFkYXRhS2V5czogZ2V0T3duTWV0YWRhdGFLZXlzLFxuICAgICAgICAgICAgICAgIE9yZGluYXJ5RGVsZXRlTWV0YWRhdGE6IGRlbGV0ZU1ldGFkYXRhLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBwcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgbWV0YWRhdGEgcHJvdmlkZXIgZm9yIGFuIG9iamVjdC4gSWYgdGhlIG9iamVjdCBoYXMgbm8gbWV0YWRhdGEgcHJvdmlkZXIgYW5kIHRoaXMgaXMgZm9yIGEgY3JlYXRlIG9wZXJhdGlvbixcbiAgICAgICAgICogdGhlbiB0aGlzIG1vZHVsZSdzIG1ldGFkYXRhIHByb3ZpZGVyIGlzIGFzc2lnbmVkIHRvIHRoZSBvYmplY3QuXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBHZXRNZXRhZGF0YVByb3ZpZGVyKE8sIFAsIENyZWF0ZSkge1xuICAgICAgICAgICAgdmFyIHJlZ2lzdGVyZWRQcm92aWRlciA9IG1ldGFkYXRhUmVnaXN0cnkuZ2V0UHJvdmlkZXIoTywgUCk7XG4gICAgICAgICAgICBpZiAoIUlzVW5kZWZpbmVkKHJlZ2lzdGVyZWRQcm92aWRlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVnaXN0ZXJlZFByb3ZpZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKENyZWF0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChtZXRhZGF0YVJlZ2lzdHJ5LnNldFByb3ZpZGVyKE8sIFAsIG1ldGFkYXRhUHJvdmlkZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXRhZGF0YVByb3ZpZGVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbGxlZ2FsIHN0YXRlLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbmFpdmUgTWFwIHNoaW1cbiAgICAgICAgZnVuY3Rpb24gQ3JlYXRlTWFwUG9seWZpbGwoKSB7XG4gICAgICAgICAgICB2YXIgY2FjaGVTZW50aW5lbCA9IHt9O1xuICAgICAgICAgICAgdmFyIGFycmF5U2VudGluZWwgPSBbXTtcbiAgICAgICAgICAgIHZhciBNYXBJdGVyYXRvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBNYXBJdGVyYXRvcihrZXlzLCB2YWx1ZXMsIHNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fa2V5cyA9IGtleXM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlcyA9IHZhbHVlcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0b3IgPSBzZWxlY3RvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgTWFwSXRlcmF0b3IucHJvdG90eXBlW1wiQEBpdGVyYXRvclwiXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG4gICAgICAgICAgICAgICAgTWFwSXRlcmF0b3IucHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG4gICAgICAgICAgICAgICAgTWFwSXRlcmF0b3IucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2luZGV4O1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMuX2tleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fc2VsZWN0b3IodGhpcy5fa2V5c1tpbmRleF0sIHRoaXMuX3ZhbHVlc1tpbmRleF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICsgMSA+PSB0aGlzLl9rZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2luZGV4ID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fa2V5cyA9IGFycmF5U2VudGluZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzID0gYXJyYXlTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2luZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogcmVzdWx0LCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIE1hcEl0ZXJhdG9yLnByb3RvdHlwZS50aHJvdyA9IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5kZXggPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2tleXMgPSBhcnJheVNlbnRpbmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzID0gYXJyYXlTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIE1hcEl0ZXJhdG9yLnByb3RvdHlwZS5yZXR1cm4gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2luZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2luZGV4ID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9rZXlzID0gYXJyYXlTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlcyA9IGFycmF5U2VudGluZWw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWFwSXRlcmF0b3I7XG4gICAgICAgICAgICB9KCkpO1xuICAgICAgICAgICAgdmFyIE1hcCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBNYXAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2tleXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlS2V5ID0gY2FjaGVTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVJbmRleCA9IC0yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWFwLnByb3RvdHlwZSwgXCJzaXplXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9rZXlzLmxlbmd0aDsgfSxcbiAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgTWFwLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAoa2V5KSB7IHJldHVybiB0aGlzLl9maW5kKGtleSwgLyppbnNlcnQqLyBmYWxzZSkgPj0gMDsgfTtcbiAgICAgICAgICAgICAgICBNYXAucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZChrZXksIC8qaW5zZXJ0Ki8gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXggPj0gMCA/IHRoaXMuX3ZhbHVlc1tpbmRleF0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBNYXAucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmQoa2V5LCAvKmluc2VydCovIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgTWFwLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmQoa2V5LCAvKmluc2VydCovIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gdGhpcy5fa2V5cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gaW5kZXggKyAxOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fa2V5c1tpIC0gMV0gPSB0aGlzLl9rZXlzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlc1tpIC0gMV0gPSB0aGlzLl92YWx1ZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9rZXlzLmxlbmd0aC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzLmxlbmd0aC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNhbWVWYWx1ZVplcm8oa2V5LCB0aGlzLl9jYWNoZUtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZUtleSA9IGNhY2hlU2VudGluZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVJbmRleCA9IC0yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgTWFwLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fa2V5cy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVLZXkgPSBjYWNoZVNlbnRpbmVsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZUluZGV4ID0gLTI7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBNYXAucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgTWFwSXRlcmF0b3IodGhpcy5fa2V5cywgdGhpcy5fdmFsdWVzLCBnZXRLZXkpOyB9O1xuICAgICAgICAgICAgICAgIE1hcC5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IE1hcEl0ZXJhdG9yKHRoaXMuX2tleXMsIHRoaXMuX3ZhbHVlcywgZ2V0VmFsdWUpOyB9O1xuICAgICAgICAgICAgICAgIE1hcC5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBNYXBJdGVyYXRvcih0aGlzLl9rZXlzLCB0aGlzLl92YWx1ZXMsIGdldEVudHJ5KTsgfTtcbiAgICAgICAgICAgICAgICBNYXAucHJvdG90eXBlW1wiQEBpdGVyYXRvclwiXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuZW50cmllcygpOyB9O1xuICAgICAgICAgICAgICAgIE1hcC5wcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5lbnRyaWVzKCk7IH07XG4gICAgICAgICAgICAgICAgTWFwLnByb3RvdHlwZS5fZmluZCA9IGZ1bmN0aW9uIChrZXksIGluc2VydCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVNhbWVWYWx1ZVplcm8odGhpcy5fY2FjaGVLZXksIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlSW5kZXggPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fa2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTYW1lVmFsdWVaZXJvKHRoaXMuX2tleXNbaV0sIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVJbmRleCA8IDAgJiYgaW5zZXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZUluZGV4ID0gdGhpcy5fa2V5cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlSW5kZXg7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWFwO1xuICAgICAgICAgICAgfSgpKTtcbiAgICAgICAgICAgIHJldHVybiBNYXA7XG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRLZXkoa2V5LCBfKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldFZhbHVlKF8sIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0RW50cnkoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBba2V5LCB2YWx1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gbmFpdmUgU2V0IHNoaW1cbiAgICAgICAgZnVuY3Rpb24gQ3JlYXRlU2V0UG9seWZpbGwoKSB7XG4gICAgICAgICAgICB2YXIgU2V0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFNldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwID0gbmV3IF9NYXAoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNldC5wcm90b3R5cGUsIFwic2l6ZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fbWFwLnNpemU7IH0sXG4gICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIFNldC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB0aGlzLl9tYXAuaGFzKHZhbHVlKTsgfTtcbiAgICAgICAgICAgICAgICBTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gdGhpcy5fbWFwLnNldCh2YWx1ZSwgdmFsdWUpLCB0aGlzOyB9O1xuICAgICAgICAgICAgICAgIFNldC5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB0aGlzLl9tYXAuZGVsZXRlKHZhbHVlKTsgfTtcbiAgICAgICAgICAgICAgICBTZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkgeyB0aGlzLl9tYXAuY2xlYXIoKTsgfTtcbiAgICAgICAgICAgICAgICBTZXQucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9tYXAua2V5cygpOyB9O1xuICAgICAgICAgICAgICAgIFNldC5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fbWFwLmtleXMoKTsgfTtcbiAgICAgICAgICAgICAgICBTZXQucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9tYXAuZW50cmllcygpOyB9O1xuICAgICAgICAgICAgICAgIFNldC5wcm90b3R5cGVbXCJAQGl0ZXJhdG9yXCJdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5rZXlzKCk7IH07XG4gICAgICAgICAgICAgICAgU2V0LnByb3RvdHlwZVtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmtleXMoKTsgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gU2V0O1xuICAgICAgICAgICAgfSgpKTtcbiAgICAgICAgICAgIHJldHVybiBTZXQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbmFpdmUgV2Vha01hcCBzaGltXG4gICAgICAgIGZ1bmN0aW9uIENyZWF0ZVdlYWtNYXBQb2x5ZmlsbCgpIHtcbiAgICAgICAgICAgIHZhciBVVUlEX1NJWkUgPSAxNjtcbiAgICAgICAgICAgIHZhciBrZXlzID0gSGFzaE1hcC5jcmVhdGUoKTtcbiAgICAgICAgICAgIHZhciByb290S2V5ID0gQ3JlYXRlVW5pcXVlS2V5KCk7XG4gICAgICAgICAgICByZXR1cm4gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdlYWtNYXAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2tleSA9IENyZWF0ZVVuaXF1ZUtleSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBXZWFrTWFwLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YWJsZSA9IEdldE9yQ3JlYXRlV2Vha01hcFRhYmxlKHRhcmdldCwgLypjcmVhdGUqLyBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0YWJsZSAhPT0gdW5kZWZpbmVkID8gSGFzaE1hcC5oYXModGFibGUsIHRoaXMuX2tleSkgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIFdlYWtNYXAucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhYmxlID0gR2V0T3JDcmVhdGVXZWFrTWFwVGFibGUodGFyZ2V0LCAvKmNyZWF0ZSovIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlICE9PSB1bmRlZmluZWQgPyBIYXNoTWFwLmdldCh0YWJsZSwgdGhpcy5fa2V5KSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIFdlYWtNYXAucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh0YXJnZXQsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YWJsZSA9IEdldE9yQ3JlYXRlV2Vha01hcFRhYmxlKHRhcmdldCwgLypjcmVhdGUqLyB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGFibGVbdGhpcy5fa2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhYmxlID0gR2V0T3JDcmVhdGVXZWFrTWFwVGFibGUodGFyZ2V0LCAvKmNyZWF0ZSovIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlICE9PSB1bmRlZmluZWQgPyBkZWxldGUgdGFibGVbdGhpcy5fa2V5XSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgV2Vha01hcC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IG5vdCBhIHJlYWwgY2xlYXIsIGp1c3QgbWFrZXMgdGhlIHByZXZpb3VzIGRhdGEgdW5yZWFjaGFibGVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fa2V5ID0gQ3JlYXRlVW5pcXVlS2V5KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gV2Vha01hcDtcbiAgICAgICAgICAgIH0oKSk7XG4gICAgICAgICAgICBmdW5jdGlvbiBDcmVhdGVVbmlxdWVLZXkoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleTtcbiAgICAgICAgICAgICAgICBkb1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBcIkBAV2Vha01hcEBAXCIgKyBDcmVhdGVVVUlEKCk7XG4gICAgICAgICAgICAgICAgd2hpbGUgKEhhc2hNYXAuaGFzKGtleXMsIGtleSkpO1xuICAgICAgICAgICAgICAgIGtleXNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIEdldE9yQ3JlYXRlV2Vha01hcFRhYmxlKHRhcmdldCwgY3JlYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNPd24uY2FsbCh0YXJnZXQsIHJvb3RLZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY3JlYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcm9vdEtleSwgeyB2YWx1ZTogSGFzaE1hcC5jcmVhdGUoKSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtyb290S2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIEZpbGxSYW5kb21CeXRlcyhidWZmZXIsIHNpemUpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gTWF0aC5yYW5kb20oKSAqIDB4ZmYgfCAwO1xuICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBHZW5SYW5kb21CeXRlcyhzaXplKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBVaW50OEFycmF5ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3J5cHRvICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycmF5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgbXNDcnlwdG8gIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnJheSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBGaWxsUmFuZG9tQnl0ZXMoYXJyYXksIHNpemUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbGxSYW5kb21CeXRlcyhuZXcgQXJyYXkoc2l6ZSksIHNpemUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gQ3JlYXRlVVVJRCgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IEdlblJhbmRvbUJ5dGVzKFVVSURfU0laRSk7XG4gICAgICAgICAgICAgICAgLy8gbWFyayBhcyByYW5kb20gLSBSRkMgNDEyMiBcdTAwQTcgNC40XG4gICAgICAgICAgICAgICAgZGF0YVs2XSA9IGRhdGFbNl0gJiAweDRmIHwgMHg0MDtcbiAgICAgICAgICAgICAgICBkYXRhWzhdID0gZGF0YVs4XSAmIDB4YmYgfCAweDgwO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBcIlwiO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIG9mZnNldCA9IDA7IG9mZnNldCA8IFVVSURfU0laRTsgKytvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGUgPSBkYXRhW29mZnNldF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPT09IDQgfHwgb2Zmc2V0ID09PSA2IHx8IG9mZnNldCA9PT0gOClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBcIi1cIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGUgPCAxNilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBcIjBcIjtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGJ5dGUudG9TdHJpbmcoMTYpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gdXNlcyBhIGhldXJpc3RpYyB1c2VkIGJ5IHY4IGFuZCBjaGFrcmEgdG8gZm9yY2UgYW4gb2JqZWN0IGludG8gZGljdGlvbmFyeSBtb2RlLlxuICAgICAgICBmdW5jdGlvbiBNYWtlRGljdGlvbmFyeShvYmopIHtcbiAgICAgICAgICAgIG9iai5fXyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGRlbGV0ZSBvYmouX187XG4gICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICB9XG4gICAgfSk7XG59KShSZWZsZWN0IHx8IChSZWZsZWN0ID0ge30pKTtcbiIsICIvKlxuICogRWxhc3RpYyBMaWNlbnNlIDIuMFxuICogQ29weXJpZ2h0IChDKSAyMDI1XHUyMDEzcHJlc2VudCBSYW1hbiBNYXJvemF1LCBXb3JrIFRhcmdldCBJbnNpZ2h0IEZ1bmN0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQ29udGFjdDogcmFtYW5Ad29ya3RpZi5jb21cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTGljZW5zZWQgV29yazogd29ya3RpZi5wdXJlbm93LmNkayA8d29ya3RpZl9wdXJlbm93X2Nkaz4uXG4gKiBVc2Ugb2YgdGhpcyBzb2Z0d2FyZSBpcyBnb3Zlcm5lZCBieSB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMDsgc2VlIHRoZSBMSUNFTlNFIGZpbGVcbiAqIG9yIGh0dHBzOi8vd3d3LmVsYXN0aWMuY28vbGljZW5zaW5nL2VsYXN0aWMtbGljZW5zZSBmb3IgZGV0YWlscy5cbiAqXG4gKiBSZS1saWNlbnNpbmcgbm90aWNlOlxuICogICBUaGlzIGZpbGUgd2FzIHByZXZpb3VzbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJ1c2luZXNzIFNvdXJjZSBMaWNlbnNlIDEuMSAoQlVTTC0xLjEpLlxuICogICBBcyBvZiAyMDI1LTA5LTE1LCBpdCBpcyByZS1saWNlbnNlZCB1bmRlciBFbGFzdGljIExpY2Vuc2UgMi4wLlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFbGFzdGljLTIuMFxuICovXG5cbmNvbnN0IGNoYWxrID0gcmVxdWlyZSgnY2hhbGsnKTtcbmltcG9ydCBwcm9jZXNzIGZyb20gJ3Byb2Nlc3MnO1xuXG5pbXBvcnQgeyBjcmVhdGVSdW50aW1lQ2xpLCBQdXJlbm93UnVudGltZUNsaSB9IGZyb20gJ0BiaW4vcHVyZW5vdy1ydW50aW1lLWNsaSc7XG5cbi8qKlxuICogTWFpbiBDTEkgZW50cnkgcG9pbnQgd2l0aCBydW50aW1lLXdlYiBleHRlbnNpb25zXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKCk6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIC8vIENyZWF0ZSBDTEkgaW5zdGFuY2UgdGhhdCBleHRlbmRzIFB1cmVub3dDbGlcbiAgICBjb25zdCBjbGkgPSBjcmVhdGVSdW50aW1lQ2xpKCk7XG5cbiAgICAvLyBQYXJzZSBhbmQgZXhlY3V0ZSBDTEkgY29tbWFuZHNcbiAgICBhd2FpdCBjbGkucnVuKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gQHRvZG86IHRlc3QgdGhpcyBjdXN0b20gZm9ybWF0dGVyIHNvbHV0aW9uLCBvdGhlcndpc2UgcmV0dXJuIHRvIG9yaWdpbmFsXG4gICAgUHVyZW5vd1J1bnRpbWVDbGkuaGFuZGxlRXJyb3IoZXJyb3IpO1xuICB9XG59XG5cbi8qKlxuICogSGFuZGxlIGVycm9ycyB3aXRoIGZvcm1hdHRlZCBvdXRwdXRcbiAqL1xuZnVuY3Rpb24gaGFuZGxlRXJyb3IoZXJyb3I6IHVua25vd24pOiBuZXZlciB7XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ1x1MjcxNycpLCAnRXJyb3I6JywgZXJyb3IubWVzc2FnZSk7XG4gICAgaWYgKHByb2Nlc3MuZW52LkRFQlVHKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yLnN0YWNrKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ1x1MjcxNycpLCAnVW5rbm93biBlcnJvcjonLCBTdHJpbmcoZXJyb3IpKTtcbiAgfVxuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5cbi8qKlxuICogU2V0dXAgZ2xvYmFsIGVycm9yIGhhbmRsZXJzIGZvciB1bmNhdWdodCBleGNlcHRpb25zXG4gKi9cbmZ1bmN0aW9uIHNldHVwR2xvYmFsRXJyb3JIYW5kbGVycygpIHtcbiAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ1x1MjcxNycpLCAnVW5jYXVnaHQgZXhjZXB0aW9uOicsIGVycm9yLm1lc3NhZ2UpO1xuICAgIGlmIChwcm9jZXNzLmVudi5ERUJVRykge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvci5zdGFjayk7XG4gICAgfVxuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfSk7XG5cbiAgcHJvY2Vzcy5vbigndW5oYW5kbGVkUmVqZWN0aW9uJywgKHJlYXNvbjogYW55KSA9PiB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ1x1MjcxNycpLCAnVW5oYW5kbGVkIHJlamVjdGlvbjonLCByZWFzb24pO1xuICAgIGlmIChwcm9jZXNzLmVudi5ERUJVRyAmJiByZWFzb24gaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihyZWFzb24uc3RhY2spO1xuICAgIH1cbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH0pO1xufVxuXG4vLyBTZXR1cCBlcnJvciBoYW5kbGVyc1xuc2V0dXBHbG9iYWxFcnJvckhhbmRsZXJzKCk7XG5cbi8vIFJ1biBDTEkgaWYgdGhpcyBmaWxlIGlzIGV4ZWN1dGVkIGRpcmVjdGx5XG4vLyBpZiAocmVxdWlyZS5tYWluID09PSBtb2R1bGUpIHtcbm1haW4oKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ1x1MjcxNycpLCAnRmF0YWwgZXJyb3I6JywgZXJyb3IubWVzc2FnZSk7XG4gIGlmIChwcm9jZXNzLmVudi5ERUJVRykge1xuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3Iuc3RhY2spO1xuICB9XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn0pO1xuLy8gfVxuIiwgIi8qXG4gKiBFbGFzdGljIExpY2Vuc2UgMi4wXG4gKiBDb3B5cmlnaHQgKEMpIDIwMjVcdTIwMTNwcmVzZW50IFJhbWFuIE1hcm96YXUsIFdvcmsgVGFyZ2V0IEluc2lnaHQgRnVuY3Rpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBDb250YWN0OiByYW1hbkB3b3JrdGlmLmNvbVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMaWNlbnNlZCBXb3JrOiB3b3JrdGlmLnB1cmVub3cuY2RrIDx3b3JrdGlmX3B1cmVub3dfY2RrPi5cbiAqIFVzZSBvZiB0aGlzIHNvZnR3YXJlIGlzIGdvdmVybmVkIGJ5IHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wOyBzZWUgdGhlIExJQ0VOU0UgZmlsZVxuICogb3IgaHR0cHM6Ly93d3cuZWxhc3RpYy5jby9saWNlbnNpbmcvZWxhc3RpYy1saWNlbnNlIGZvciBkZXRhaWxzLlxuICpcbiAqIFJlLWxpY2Vuc2luZyBub3RpY2U6XG4gKiAgIFRoaXMgZmlsZSB3YXMgcHJldmlvdXNseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgQnVzaW5lc3MgU291cmNlIExpY2Vuc2UgMS4xIChCVVNMLTEuMSkuXG4gKiAgIEFzIG9mIDIwMjUtMDktMTUsIGl0IGlzIHJlLWxpY2Vuc2VkIHVuZGVyIEVsYXN0aWMgTGljZW5zZSAyLjAuXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVsYXN0aWMtMi4wXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IHNhbml0aXplU3RhY2tOYW1lIH0gZnJvbSAnQHdvcmt0aWYvcHVyZW5vdy9pbmZyYSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdAd29ya3RpZi9wdXJlbm93L2Jpbic7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc2NhZmZvbGRpbmcgYSBuZXcgcHJvamVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjYWZmb2xkT3B0aW9ucyB7XG4gIC8qKiBQcm9qZWN0IG5hbWUgKi9cbiAgcHJvamVjdE5hbWU6IHN0cmluZztcbiAgLyoqIEZvcmNlIG92ZXJ3cml0ZSBleGlzdGluZyBmaWxlcyAqL1xuICBmb3JjZTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUZW1wbGF0ZSB2YXJpYWJsZSBzdWJzdGl0dXRpb24gY29udGV4dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlQ29udGV4dCB7XG4gIHByb2plY3ROYW1lOiBzdHJpbmc7XG5cbiAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlcnZpY2UgZm9yIHByb2plY3Qgc2NhZmZvbGRpbmcgYW5kIHRlbXBsYXRlIG1hbmFnZW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIFRlbXBsYXRlU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGVtcGxhdGVzRGlyOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCkpIHtcbiAgICAvLyBUZW1wbGF0ZXMgYXJlIGxvY2F0ZWQgaW4gdGhlIHBhY2thZ2UncyBiaW4vdGVtcGxhdGVzIGRpcmVjdG9yeVxuICAgIC8vIFdoZW4gYnVuZGxlZCwgd2UgbmVlZCB0byBmaW5kIHRoZSB0ZW1wbGF0ZXMgcmVsYXRpdmUgdG8gdGhlIENMSSBiaW5hcnkgbG9jYXRpb25cbiAgICAvLyBUaGUgQ0xJIGJpbmFyeSBpcyBhdCBvdXQvZGlzdC9iaW4vcHVyZW5vdy5qcywgdGVtcGxhdGVzIGFyZSBhdCBvdXQvZGlzdC9iaW4vdGVtcGxhdGVzL1xuXG4gICAgLy8gVHJ5IHRvIGZpbmQgdGhlIGFjdHVhbCBsb2NhdGlvbiBvZiB0aGlzIG1vZHVsZVxuICAgIC8vIEluIGJ1bmRsZWQgY29kZSwgX19kaXJuYW1lIG1pZ2h0IG5vdCBiZSByZWxpYWJsZSwgc28gd2UgdHJ5IG11bHRpcGxlIHN0cmF0ZWdpZXNcbiAgICBjb25zdCBwb3NzaWJsZVBhdGhzID0gW1xuICAgICAgLy8gV2hlbiBydW5uaW5nIGZyb20gaW5zdGFsbGVkIHBhY2thZ2U6IG5vZGVfbW9kdWxlcy9Ad29ya3RpZi9wdXJlbm93L291dC9kaXN0L2Jpbi90ZW1wbGF0ZXNcbiAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICd0ZW1wbGF0ZXMnKSxcbiAgICAgIC8vIFdoZW4gcnVubmluZyBmcm9tIHNvdXJjZSBkdXJpbmcgZGV2ZWxvcG1lbnRcbiAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICcuLicsICdzcmMnLCAnYmluJywgJ3RlbXBsYXRlcycpLFxuICAgICAgLy8gQWx0ZXJuYXRpdmU6IHJlbGF0aXZlIHRvIHByb2Nlc3MuYXJndlsxXSAodGhlIHNjcmlwdCBiZWluZyBleGVjdXRlZClcbiAgICAgIHBhdGguam9pbihwYXRoLmRpcm5hbWUocHJvY2Vzcy5hcmd2WzFdIHx8ICcnKSwgJ3RlbXBsYXRlcycpLFxuICAgIF07XG5cbiAgICBjb25zdCBmb3VuZFBhdGggPSBwb3NzaWJsZVBhdGhzLmZpbmQocCA9PiB7XG4gICAgICBjb25zdCBleGlzdHMgPSBmcy5leGlzdHNTeW5jKHApO1xuICAgICAgcmV0dXJuIGV4aXN0cztcbiAgICB9KTtcblxuICAgIGlmICghZm91bmRQYXRoKSB7XG4gICAgICAvLyBGYWxsYmFjazogdXNlIGZpcnN0IHBhdGggYW5kIGxldCB2YWxpZGF0aW9uIGVycm9yIGhhbmRsZSBpdFxuICAgICAgdGhpcy50ZW1wbGF0ZXNEaXIgPSBwb3NzaWJsZVBhdGhzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRlbXBsYXRlc0RpciA9IGZvdW5kUGF0aDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2NhZmZvbGQgYSBuZXcgcHJvamVjdCBmcm9tIGEgdGVtcGxhdGVcbiAgICovXG4gIGFzeW5jIHNjYWZmb2xkKFxuICAgIHRlbXBsYXRlTmFtZTogc3RyaW5nLFxuICAgIHRhcmdldERpcjogc3RyaW5nLFxuICAgIG9wdGlvbnM6IFNjYWZmb2xkT3B0aW9ucyxcbiAgICBjb3JlRGlyOiBzdHJpbmcgPSAncHVyZW5vdycsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IHBhdGguam9pbih0aGlzLnRlbXBsYXRlc0RpciwgY29yZURpciwgdGVtcGxhdGVOYW1lKTtcblxuICAgIC8vIFZhbGlkYXRlIHRlbXBsYXRlIGV4aXN0c1xuICAgIGlmICghZnMuZXhpc3RzU3luYyh0ZW1wbGF0ZVBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBgVGVtcGxhdGUgJyR7dGVtcGxhdGVOYW1lfScgbm90IGZvdW5kYCxcbiAgICAgICAgYEF2YWlsYWJsZSB0ZW1wbGF0ZXM6IHB1cmVub3ctYmFzaWNgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0YXJnZXQgZGlyZWN0b3J5XG4gICAgY29uc3QgcmVzb2x2ZWRUYXJnZXREaXIgPSBwYXRoLnJlc29sdmUodGhpcy5jd2QsIHRhcmdldERpcik7XG4gICAgdGhpcy52YWxpZGF0ZVRhcmdldERpcmVjdG9yeShyZXNvbHZlZFRhcmdldERpciwgb3B0aW9ucy5mb3JjZSk7XG5cbiAgICAvLyBDcmVhdGUgdGFyZ2V0IGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHJlc29sdmVkVGFyZ2V0RGlyKSkge1xuICAgICAgZnMubWtkaXJTeW5jKHJlc29sdmVkVGFyZ2V0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvLyBDb3B5IHRlbXBsYXRlIGZpbGVzXG4gICAgY29uc3QgY29udGV4dDogVGVtcGxhdGVDb250ZXh0ID0ge1xuICAgICAgcHJvamVjdE5hbWU6IG9wdGlvbnMucHJvamVjdE5hbWUsXG4gICAgfTtcblxuICAgIGF3YWl0IHRoaXMuY29weVRlbXBsYXRlRmlsZXModGVtcGxhdGVQYXRoLCByZXNvbHZlZFRhcmdldERpciwgY29udGV4dCk7XG5cbiAgICAvLyBHZW5lcmF0ZSBjb25maWd1cmF0aW9uIGZpbGVzXG4gICAgYXdhaXQgdGhpcy5nZW5lcmF0ZUNvbmZpZyhyZXNvbHZlZFRhcmdldERpciwgb3B0aW9ucy5wcm9qZWN0TmFtZSk7XG4gICAgYXdhaXQgdGhpcy5nZW5lcmF0ZVRzQ29uZmlnKHJlc29sdmVkVGFyZ2V0RGlyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBwdXJlbm93LmNvbmZpZy50cyBmaWxlXG4gICAqL1xuICBhc3luYyBnZW5lcmF0ZUNvbmZpZyh0YXJnZXREaXI6IHN0cmluZywgcHJvamVjdE5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvbmZpZ0NvbnRlbnQgPSBgLypcbiAqIFB1cmVub3cgQ29uZmlndXJhdGlvblxuICogXG4gKiBUaGlzIGZpbGUgY29uZmlndXJlcyB5b3VyIFB1cmVub3cgc2VydmVybGVzcyBSZWFjdCBTU1IgYXBwbGljYXRpb24uXG4gKiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS93b3JrdGlmL3B1cmVub3dcbiAqL1xuXG5pbXBvcnQgeyBQdXJlbm93Q2xpQ29uZmlnIH0gZnJvbSAnQHdvcmt0aWYvcHVyZW5vdyc7XG5cbmNvbnN0IGNvbmZpZzogUHVyZW5vd0NsaUNvbmZpZyA9IHtcbiAgcHJvamVjdE5hbWU6ICcke3Byb2plY3ROYW1lfScsXG4gIFxuICBzdGFnZXM6IFtcbiAgICB7XG4gICAgICBuYW1lOiAnZGV2JyxcbiAgICAgIGF3c1JlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgICAvLyBhd3NQcm9maWxlOiAnZGVmYXVsdCcsIC8vIE9wdGlvbmFsOiBBV1MgcHJvZmlsZSB0byB1c2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzdGFnaW5nJyxcbiAgICAgIGF3c1JlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgICAvLyBkb21haW46ICdleGFtcGxlLmNvbScsIC8vIE9wdGlvbmFsOiBjdXN0b20gZG9tYWluXG4gICAgICAvLyBzdWJkb21haW46ICdzdGFnaW5nJywgLy8gT3B0aW9uYWw6IHN1YmRvbWFpbiBwcmVmaXhcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwcm9kJyxcbiAgICAgIGF3c1JlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgICAvLyBkb21haW46ICdleGFtcGxlLmNvbScsXG4gICAgfSxcbiAgXSxcbiAgXG4gIHBhdGhzOiB7XG4gICAgc3JjRGlyOiAnc3JjJyxcbiAgICByZWFjdEVudHJ5OiAnc3JjL2luZGV4LnRzeCcsXG4gICAgb3V0RGlyOiAnb3V0L2Rpc3QnLFxuICAgIGNka0RpcjogJ2NkaycsXG4gIH0sXG4gIFxuICBpbmZyYU1vZGU6ICdjZGsnLFxuICBcbiAgZmVhdHVyZXM6IHtcbiAgICBlbmFibGVTZW86IGZhbHNlLFxuICAgIGVuYWJsZU1hbmlmZXN0OiB0cnVlLFxuICAgIGVuYWJsZVdhcm11cDogZmFsc2UsXG4gICAgY2xlYXJDYWNoZU9uRGVwbG95OiB0cnVlLFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29uZmlnO1xuYDtcblxuICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBwYXRoLmpvaW4odGFyZ2V0RGlyLCAncHVyZW5vdy5jb25maWcudHMnKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKGNvbmZpZ1BhdGgsIGNvbmZpZ0NvbnRlbnQsICd1dGYtOCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRzY29uZmlnLmpzb24gZmlsZVxuICAgKi9cbiAgYXN5bmMgZ2VuZXJhdGVUc0NvbmZpZyh0YXJnZXREaXI6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRzY29uZmlnQ29udGVudCA9IHtcbiAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgICB0YXJnZXQ6ICdFUzIwMjAnLFxuICAgICAgICBsaWI6IFsnRVMyMDIwJywgJ0RPTScsICdET00uSXRlcmFibGUnXSxcbiAgICAgICAganN4OiAncmVhY3QtanN4JyxcbiAgICAgICAgbW9kdWxlOiAnY29tbW9uanMnLFxuICAgICAgICBtb2R1bGVSZXNvbHV0aW9uOiAnbm9kZScsXG4gICAgICAgIHJlc29sdmVKc29uTW9kdWxlOiB0cnVlLFxuICAgICAgICBhbGxvd0pzOiB0cnVlLFxuICAgICAgICBvdXREaXI6ICcuL291dC90c2MnLFxuICAgICAgICByb290RGlyOiAnLi8nLFxuICAgICAgICBzdHJpY3Q6IHRydWUsXG4gICAgICAgIGVzTW9kdWxlSW50ZXJvcDogdHJ1ZSxcbiAgICAgICAgc2tpcExpYkNoZWNrOiB0cnVlLFxuICAgICAgICBmb3JjZUNvbnNpc3RlbnRDYXNpbmdJbkZpbGVOYW1lczogdHJ1ZSxcbiAgICAgICAgZXhwZXJpbWVudGFsRGVjb3JhdG9yczogdHJ1ZSxcbiAgICAgICAgZW1pdERlY29yYXRvck1ldGFkYXRhOiB0cnVlLFxuICAgICAgICBkZWNsYXJhdGlvbjogdHJ1ZSxcbiAgICAgICAgZGVjbGFyYXRpb25NYXA6IHRydWUsXG4gICAgICAgIHNvdXJjZU1hcDogdHJ1ZSxcbiAgICAgICAgYmFzZVVybDogJy4nLFxuICAgICAgICBwYXRoczoge1xuICAgICAgICAgICdAY29yZS8qJzogWydzcmMvY29yZS8qJ10sXG4gICAgICAgICAgJ0BsaWIvKic6IFsnc3JjL2xpYi8qJ10sXG4gICAgICAgICAgJ0B1dGlscy8qJzogWydzcmMvdXRpbHMvKiddLFxuICAgICAgICAgICdAYmluLyonOiBbJ3NyYy9iaW4vKiddLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGluY2x1ZGU6IFsnc3JjLyoqLyonXSxcbiAgICAgIGV4Y2x1ZGU6IFsnbm9kZV9tb2R1bGVzJywgJ291dCcsICdkaXN0JywgJ2Nkay5vdXQnXSxcbiAgICB9O1xuXG4gICAgY29uc3QgdHNjb25maWdQYXRoID0gcGF0aC5qb2luKHRhcmdldERpciwgJ3RzY29uZmlnLmpzb24nKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgdHNjb25maWdQYXRoLFxuICAgICAgSlNPTi5zdHJpbmdpZnkodHNjb25maWdDb250ZW50LCBudWxsLCAyKSxcbiAgICAgICd1dGYtOCcsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0YXJnZXQgZGlyZWN0b3J5XG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlVGFyZ2V0RGlyZWN0b3J5KHRhcmdldERpcjogc3RyaW5nLCBmb3JjZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghZnMuZXhpc3RzU3luYyh0YXJnZXREaXIpKSB7XG4gICAgICByZXR1cm47IC8vIERpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBzYWZlIHRvIGNyZWF0ZVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGRpcmVjdG9yeSBpcyBlbXB0eVxuICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmModGFyZ2V0RGlyKTtcbiAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCAmJiAhZm9yY2UpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICdUYXJnZXQgZGlyZWN0b3J5IGlzIG5vdCBlbXB0eScsXG4gICAgICAgIGBVc2UgLS1mb3JjZSBmbGFnIHRvIG92ZXJ3cml0ZSBleGlzdGluZyBmaWxlcyBpbiAke3RhcmdldERpcn1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgQ0RLIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0c1xuICAgKi9cbiAgY2RrRGlyZWN0b3J5RXhpc3RzKGN3ZDogc3RyaW5nID0gdGhpcy5jd2QpOiBib29sZWFuIHtcbiAgICBjb25zdCBjZGtEaXIgPSBwYXRoLnJlc29sdmUoY3dkLCAnY2RrJyk7XG4gICAgcmV0dXJuIGZzLmV4aXN0c1N5bmMoY2RrRGlyKSAmJiBmcy5leGlzdHNTeW5jKHBhdGguam9pbihjZGtEaXIsICdiaW4nLCAnYXBwLnRzJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvcHkgdGVtcGxhdGUgZmlsZXMgcmVjdXJzaXZlbHkgd2l0aCB2YXJpYWJsZSBzdWJzdGl0dXRpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY29weVRlbXBsYXRlRmlsZXMoXG4gICAgc291cmNlUGF0aDogc3RyaW5nLFxuICAgIHRhcmdldFBhdGg6IHN0cmluZyxcbiAgICBjb250ZXh0OiBUZW1wbGF0ZUNvbnRleHQsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVudHJpZXMgPSBmcy5yZWFkZGlyU3luYyhzb3VyY2VQYXRoLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG5cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgIGNvbnN0IHNvdXJjZUZpbGUgPSBwYXRoLmpvaW4oc291cmNlUGF0aCwgZW50cnkubmFtZSk7XG4gICAgICBsZXQgdGFyZ2V0RmlsZU5hbWUgPSBlbnRyeS5uYW1lO1xuXG4gICAgICAvLyBIYW5kbGUgc3BlY2lhbCBmaWxlIHJlbmFtZXNcbiAgICAgIC8vIGdpdGlnbm9yZS50ZW1wbGF0ZSAtPiAuZ2l0aWdub3JlIChucG0gZXhjbHVkZXMgLmdpdGlnbm9yZSBmcm9tIHBhY2thZ2VzKVxuICAgICAgaWYgKGVudHJ5Lm5hbWUgPT09ICdnaXRpZ25vcmUudGVtcGxhdGUnKSB7XG4gICAgICAgIHRhcmdldEZpbGVOYW1lID0gJy5naXRpZ25vcmUnO1xuICAgICAgfVxuICAgICAgLy8gUmVtb3ZlIC50ZW1wbGF0ZSBleHRlbnNpb24gZnJvbSBhbGwgdGVtcGxhdGUgZmlsZXNcbiAgICAgIGVsc2UgaWYgKGVudHJ5Lm5hbWUuZW5kc1dpdGgoJy50ZW1wbGF0ZScpKSB7XG4gICAgICAgIHRhcmdldEZpbGVOYW1lID0gZW50cnkubmFtZS5yZXBsYWNlKC9cXC50ZW1wbGF0ZSQvLCAnJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldEZpbGUgPSBwYXRoLmpvaW4odGFyZ2V0UGF0aCwgdGFyZ2V0RmlsZU5hbWUpO1xuXG4gICAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAvLyBDcmVhdGUgZGlyZWN0b3J5IGFuZCByZWN1cnNlXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh0YXJnZXRGaWxlKSkge1xuICAgICAgICAgIGZzLm1rZGlyU3luYyh0YXJnZXRGaWxlLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmNvcHlUZW1wbGF0ZUZpbGVzKHNvdXJjZUZpbGUsIHRhcmdldEZpbGUsIGNvbnRleHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ29weSBmaWxlIHdpdGggdmFyaWFibGUgc3Vic3RpdHV0aW9uXG4gICAgICAgIGxldCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHNvdXJjZUZpbGUsICd1dGYtOCcpO1xuICAgICAgICBjb250ZW50ID0gdGhpcy5zdWJzdGl0dXRlVmFyaWFibGVzKGNvbnRlbnQsIGNvbnRleHQpO1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRhcmdldEZpbGUsIGNvbnRlbnQsICd1dGYtOCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzdGl0dXRlIHRlbXBsYXRlIHZhcmlhYmxlcyBpbiBjb250ZW50XG4gICAqL1xuICBwcml2YXRlIHN1YnN0aXR1dGVWYXJpYWJsZXMoY29udGVudDogc3RyaW5nLCBjb250ZXh0OiBUZW1wbGF0ZUNvbnRleHQpOiBzdHJpbmcge1xuICAgIGxldCByZXN1bHQgPSBjb250ZW50O1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY29udGV4dCkpIHtcbiAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgXFxcXHtcXFxce1xcXFxzKiR7a2V5fVxcXFxzKlxcXFx9XFxcXH1gLCAnZycpO1xuICAgICAgLy8gT25seSBzYW5pdGl6ZSBwcm9qZWN0TmFtZSBmb3IgQ0RLIGNvbXBhdGliaWxpdHksIGxlYXZlIG90aGVyIHZhbHVlcyBhcy1pc1xuICAgICAgY29uc3QgZmluYWxWYWx1ZSA9IGtleSA9PT0gJ3Byb2plY3ROYW1lJyA/IHNhbml0aXplU3RhY2tOYW1lKHZhbHVlKSA6IHZhbHVlO1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UocmVnZXgsIGZpbmFsVmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiIsICIvKlxuICogRWxhc3RpYyBMaWNlbnNlIDIuMFxuICogQ29weXJpZ2h0IChDKSAyMDI1XHUyMDEzcHJlc2VudCBSYW1hbiBNYXJvemF1LCBXb3JrIFRhcmdldCBJbnNpZ2h0IEZ1bmN0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQ29udGFjdDogcmFtYW5Ad29ya3RpZi5jb21cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTGljZW5zZWQgV29yazogd29ya3RpZi5wdXJlbm93LmNkayA8d29ya3RpZl9wdXJlbm93X2Nkaz4uXG4gKiBVc2Ugb2YgdGhpcyBzb2Z0d2FyZSBpcyBnb3Zlcm5lZCBieSB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMDsgc2VlIHRoZSBMSUNFTlNFIGZpbGVcbiAqIG9yIGh0dHBzOi8vd3d3LmVsYXN0aWMuY28vbGljZW5zaW5nL2VsYXN0aWMtbGljZW5zZSBmb3IgZGV0YWlscy5cbiAqXG4gKiBSZS1saWNlbnNpbmcgbm90aWNlOlxuICogICBUaGlzIGZpbGUgd2FzIHByZXZpb3VzbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJ1c2luZXNzIFNvdXJjZSBMaWNlbnNlIDEuMSAoQlVTTC0xLjEpLlxuICogICBBcyBvZiAyMDI1LTA5LTIyLCBpdCBpcyByZS1saWNlbnNlZCB1bmRlciBFbGFzdGljIExpY2Vuc2UgMi4wLlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFbGFzdGljLTIuMFxuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCB7IHNhbml0aXplU3RhY2tOYW1lLCBQdXJlbm93SW5mcmFSZXNvdXJjZU9wdGlvbnMsIFB1cmVub3dJbmZyYVJlc291cmNlcyB9IGZyb20gJ0B3b3JrdGlmL3B1cmVub3cvaW5mcmEnO1xuaW1wb3J0IHtcbiAgRGVwbG95bWVudEVycm9yLFxuICB0eXBlIERlcGxveW1lbnRPdXRwdXRzLFxuICBnZXRTdGFnZSxcbiAgU3RhY2tzRGVwbG95T3B0aW9ucyxcbiAgU3RhY2tzRGVwbG95U2VydmljZSxcbn0gZnJvbSAnQHdvcmt0aWYvcHVyZW5vdy9iaW4nO1xuaW1wb3J0IHsgUHVyZW5vd1J1bnRpbWVEZXBsb3ltZW50T3V0cHV0cywgUHVyZW5vd1J1bnRpbWVTdGFja3NEZXBsb3lSZXN1bHQgfSBmcm9tICcuL3B1cmVub3ctcnVudGltZS1zdGFja3MtZGVwbG95LnNlcnZpY2UudHlwZXMnO1xuXG5cbmV4cG9ydCBjbGFzcyBQdXJlbm93UnVudGltZVN0YWNrc0RlcGxveVNlcnZpY2UgZXh0ZW5kcyBTdGFja3NEZXBsb3lTZXJ2aWNlIGltcGxlbWVudHMgUHVyZW5vd0luZnJhUmVzb3VyY2VzIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IERFRkFVTFRfQ0RLX0RJUiA9ICdjZGsnO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IFR3b1N0YWNrRGVwbG95U2VydmljZSBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIGN3ZCAtIEN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgKHByb2plY3Qgcm9vdClcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCkpIHtcbiAgICBzdXBlcihjd2QpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGZpcnN0IGRlcGxveW1lbnQgd29ya2Zsb3c6IGRlcGxveSBJbmZyYSBcdTIxOTIgcmVhZCBvdXRwdXRzIFx1MjE5MiBkZXBsb3kgUnVudGltZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBEZXBsb3ltZW50IG9wdGlvbnNcbiAgICogQHBhcmFtIHN0YXJ0VGltZSAtIERlcGxveW1lbnQgc3RhcnQgdGltZXN0YW1wXG4gICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBkZXBsb3ltZW50IHJlc3VsdFxuICAgKiBAdGhyb3dzIHtEZXBsb3ltZW50RXJyb3J9IElmIEluZnJhIG9yIFJ1bnRpbWUgZGVwbG95bWVudCBmYWlsc1xuICAgKlxuICAgKiBAdG9kbzogY29tcGxldGUgZXh0ZW5zaWJsZSBkZXBsb3ltZW50IGFwcHJvYWNoIHdpdGggZHVyYXRpb24gbWV0cmljIGF0dGVuZGFuY2VcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBleGVjdXRlRGVwbG95PFQgZXh0ZW5kcyBQdXJlbm93UnVudGltZVN0YWNrc0RlcGxveVJlc3VsdCA9IFB1cmVub3dSdW50aW1lU3RhY2tzRGVwbG95UmVzdWx0PihcbiAgICBvcHRpb25zOiBTdGFja3NEZXBsb3lPcHRpb25zLFxuICAgIHN0YXJ0VGltZTogbnVtYmVyLFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCB7IHN0YWdlLCBjb25maWcgfSA9IG9wdGlvbnM7XG5cbiAgICAvLyBTYW5pdGl6ZSBzdGFjayBuYW1lcyBmb3IgQVdTIENsb3VkRm9ybWF0aW9uIGNvbXBhdGliaWxpdHlcbiAgICBjb25zdCBpbmZyYVN0YWNrTmFtZSA9IHNhbml0aXplU3RhY2tOYW1lKGAke29wdGlvbnMuY29uZmlnLnByb2plY3ROYW1lfS1QdXJlbm93SW5mcmEtJHtzdGFnZX1gKTtcbiAgICBjb25zdCBydW50aW1lU3RhY2tOYW1lID0gc2FuaXRpemVTdGFja05hbWUoYCR7b3B0aW9ucy5jb25maWcucHJvamVjdE5hbWV9LVB1cmVub3dSdW50aW1lLSR7c3RhZ2V9YCk7XG4gICAgY29uc3QgcnVudGltZVdlYlN0YWNrTmFtZSA9IHNhbml0aXplU3RhY2tOYW1lKGAke29wdGlvbnMuY29uZmlnLnByb2plY3ROYW1lfS1SdW50aW1lV2ViLSR7c3RhZ2V9YCk7XG5cbiAgICBjb25zdCBzdGFnZUNvbmZpZyA9IGdldFN0YWdlKGNvbmZpZywgc3RhZ2UpO1xuICAgIGlmICghc3RhZ2VDb25maWcpIHtcbiAgICAgIHRocm93IG5ldyBEZXBsb3ltZW50RXJyb3IoXG4gICAgICAgIGBTdGFnZSAnJHtzdGFnZX0nIG5vdCBmb3VuZCBpbiBjb25maWd1cmF0aW9uYCxcbiAgICAgICAgYEF2YWlsYWJsZSBzdGFnZXM6ICR7Y29uZmlnLnN0YWdlcy5tYXAoKHM6IGFueSkgPT4gcy5uYW1lKS5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGNvbnN0IGNsb3VkRm9ybWF0aW9uQ2xpZW50ID0gbmV3IENsb3VkRm9ybWF0aW9uQ2xpZW50KHtcbiAgICAvLyAgIHJlZ2lvbjogc3RhZ2VDb25maWcuYXdzUmVnaW9uLFxuICAgIC8vIH0pO1xuXG4gICAgLy8gU3RlcCAxOiBEZXBsb3kgSW5mcmEgc3RhY2tcbiAgICBjb25zb2xlLmxvZygnRGVwbG95aW5nIEluZnJhc3RydWN0dXJlIHN0YWNrLi4uJyk7XG4gICAgY29uc3QgaW5mcmFSZXN1bHQgPSBhd2FpdCB0aGlzLmRlcGxveUNka1N0YWNrKFxuICAgICAgaW5mcmFTdGFja05hbWUsXG4gICAgICBzdGFnZSxcbiAgICAgIGNvbmZpZyxcbiAgICApO1xuXG4gICAgaWYgKCFpbmZyYVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRGVwbG95bWVudEVycm9yKFxuICAgICAgICAnSW5mcmFzdHJ1Y3R1cmUgZGVwbG95bWVudCBmYWlsZWQnLFxuICAgICAgICAnUnVudGltZSBzdGFjayB3aWxsIG5vdCBiZSBkZXBsb3llZC4gRml4IEluZnJhIGlzc3VlcyBhbmQgcmV0cnkuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gU3RlcCAyOiBSZWFkIEluZnJhIG91dHB1dHNcbiAgICAvLyBjb25zb2xlLmxvZygnUmVhZGluZyBJbmZyYXN0cnVjdHVyZSBvdXRwdXRzLi4uJyk7XG4gICAgLy8gY29uc3QgaW5mcmFPdXRwdXRzID0gYXdhaXQgdGhpcy5nZXRJbmZyYU91dHB1dHMoY2xvdWRGb3JtYXRpb25DbGllbnQsIHN0YWdlLCBjb25maWcsIGluZnJhU3RhY2tOYW1lLCBzdGFnZUNvbmZpZz8uYXdzUHJvZmlsZSk7XG4gICAgLy8gY29uc29sZS5sb2coYFJldHJpZXZlZCAke09iamVjdC5rZXlzKGluZnJhT3V0cHV0cykubGVuZ3RofSBvdXRwdXRzIGZyb20gSW5mcmFzdHJ1Y3R1cmUgc3RhY2tgKTtcblxuICAgIC8vIFN0ZXAgMzogRGVwbG95IFJ1bnRpbWUgc3RhY2tcbiAgICBjb25zb2xlLmxvZygnRGVwbG95aW5nIFB1cmVub3dSdW50aW1lIHN0YWNrLi4uJyk7XG4gICAgY29uc3QgcnVudGltZVJlc3VsdCA9IGF3YWl0IHRoaXMuZGVwbG95Q2RrU3RhY2soXG4gICAgICBydW50aW1lU3RhY2tOYW1lLFxuICAgICAgc3RhZ2UsXG4gICAgICBjb25maWcsXG4gICAgKTtcblxuICAgIGlmICghcnVudGltZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRGVwbG95bWVudEVycm9yKFxuICAgICAgICAnUnVudGltZSBkZXBsb3ltZW50IGZhaWxlZCcsXG4gICAgICAgICdJbmZyYXN0cnVjdHVyZSBpcyBkZXBsb3llZCBzdWNjZXNzZnVsbHkuIEZpeCBSdW50aW1lIGlzc3VlcyBhbmQgcmV0cnkuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gU3RlcCAzOiBEZXBsb3kgUnVudGltZSBzdGFja1xuICAgIGNvbnNvbGUubG9nKCdEZXBsb3lpbmcgUnVudGltZVdlYiBzdGFjay4uLicpO1xuICAgIGNvbnN0IHJ1bnRpbWVXZWJSZXN1bHQgPSBhd2FpdCB0aGlzLmRlcGxveUNka1N0YWNrKFxuICAgICAgcnVudGltZVdlYlN0YWNrTmFtZSxcbiAgICAgIHN0YWdlLFxuICAgICAgY29uZmlnLFxuICAgICk7XG5cbiAgICBpZiAoIXJ1bnRpbWVXZWJSZXN1bHQuc3VjY2Vzcykge1xuICAgICAgdGhyb3cgbmV3IERlcGxveW1lbnRFcnJvcihcbiAgICAgICAgJ1J1bnRpbWVXZWIgZGVwbG95bWVudCBmYWlsZWQnLFxuICAgICAgICAnSW5mcmFzdHJ1Y3R1cmUgaXMgZGVwbG95ZWQgc3VjY2Vzc2Z1bGx5LiBGaXggUnVudGltZSBpc3N1ZXMgYW5kIHJldHJ5LicsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGR1cmF0aW9uID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgaW5mcmFTdGFjazogaW5mcmFSZXN1bHQsXG4gICAgICBydW50aW1lU3RhY2s6IHJ1bnRpbWVSZXN1bHQsXG4gICAgICBydW50aW1lV2ViU3RhY2s6IHJ1bnRpbWVXZWJSZXN1bHQsXG4gICAgICBkdXJhdGlvbixcbiAgICB9IGFzIHVua25vd24gYXMgVDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgZGVwbG95bWVudCBvdXRwdXRzIGZyb20gQ0RLIG91dHB1dHMgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIHN0YWNrTmFtZSAtIE5hbWUgb2YgdGhlIENsb3VkRm9ybWF0aW9uIHN0YWNrXG4gICAqIEByZXR1cm5zIERlcGxveW1lbnQgb3V0cHV0cyBtYXBcbiAgICpcbiAgICogQGltcG9ydGFudDogT1BUSU1JU0UgVEhJUyBTT0xVVElPTlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0gb3V0cHV0c1BhdGhcbiAgICovXG4gIHByb3RlY3RlZCBwYXJzZVN0YWNrT3V0cHV0cyhzdGFja05hbWU6IHN0cmluZywgb3V0cHV0c1BhdGg6IHN0cmluZyk6IERlcGxveW1lbnRPdXRwdXRzIHtcbiAgICBjb25zdCBvdXRwdXRzOiBQdXJlbm93UnVudGltZURlcGxveW1lbnRPdXRwdXRzID0gc3VwZXIucGFyc2VTdGFja091dHB1dHMoc3RhY2tOYW1lLCBvdXRwdXRzUGF0aCkgYXMgUHVyZW5vd1J1bnRpbWVEZXBsb3ltZW50T3V0cHV0cztcblxuICAgIGlmICghZnMuZXhpc3RzU3luYyhvdXRwdXRzUGF0aCkpIHtcbiAgICAgIHJldHVybiBvdXRwdXRzO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBvdXRwdXRzRmlsZUNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMob3V0cHV0c1BhdGgsICd1dGYtOCcpO1xuICAgICAgY29uc3QgY2RrT3V0cHV0cyA9IEpTT04ucGFyc2Uob3V0cHV0c0ZpbGVDb250ZW50KTtcblxuICAgICAgLy8gQ0RLIG91dHB1dHMgZmlsZSBzdHJ1Y3R1cmU6IHsgXCJTdGFja05hbWVcIjogeyBcIk91dHB1dEtleVwiOiBcIk91dHB1dFZhbHVlXCIgfSB9XG4gICAgICBjb25zdCBzdGFja091dHB1dHMgPSBjZGtPdXRwdXRzW3N0YWNrTmFtZV07XG4gICAgICBpZiAoc3RhY2tPdXRwdXRzKSB7XG4gICAgICAgIG91dHB1dHMubGFtYmRhQXJuTGlzdCA9IE9iamVjdC5rZXlzKHN0YWNrT3V0cHV0cylcbiAgICAgICAgICAuZmlsdGVyKChrZXk6IHN0cmluZykgPT4ga2V5Lm1hdGNoKC8oPzpMYW1iZGEpW2EtekEtWl0rQXJuJC8pKVxuICAgICAgICAgIC5tYXAoKGxhbWJkYU1hdGNoOiBhbnkpID0+IHN0YWNrT3V0cHV0c1tsYW1iZGFNYXRjaF0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBwYXJzZSBvdXRwdXRzIGZpbGUgZm9yICR7c3RhY2tOYW1lfTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dHM7XG4gIH1cblxuXG4gIC8vIEBub3RlOiBkdXBsaWNhdGVzXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSBzaWduYXR1cmUgZm9yIHRoZSBwcm92aWRlZCByZWdpb24gYnkgZXh0cmFjdGluZyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGVhY2ggc2VnbWVudCBpbiB0aGUgcmVnaW9uIHN0cmluZywgZGVsaW1pdGVkIGJ5IGh5cGhlbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWdpb24gLSBUaGUgcmVnaW9uIHN0cmluZyB0byBnZW5lcmF0ZSB0aGUgc2lnbmF0dXJlIGZyb20uIEl0IGlzIGV4cGVjdGVkIHRvIGJlIGEgaHlwaGVuLXNlcGFyYXRlZCBzdHJpbmcuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGdlbmVyYXRlZCByZWdpb24gc2lnbmF0dXJlLCBmb3JtZWQgYnkgY29uY2F0ZW5hdGluZyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGVhY2ggdmFsaWQgc2VnbWVudC4gUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGlucHV0IGlzIGludmFsaWQgb3IgZW1wdHkuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0UmVnaW9uU2lnbmF0dXJlKHJlZ2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXJlZ2lvbikgcmV0dXJuICcnO1xuXG4gICAgcmV0dXJuIHJlZ2lvblxuICAgICAgLnNwbGl0KCctJylcbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5tYXAocGFydCA9PiBwYXJ0WzBdID8/ICcnKVxuICAgICAgLmpvaW4oJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIHJlc291cmNlIG5hbWUgYnkgY29uY2F0ZW5hdGluZyBzZXJ2aWNlIG5hbWUsIHJlc291cmNlIG5hbWUsXG4gICAqIHNpbXBsaWZpZWQgcmVnaW9uLCBhbmQgc3RhZ2Ugd2l0aCBoeXBoZW5zIGFzIHNlcGFyYXRvcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5uYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLnNlcnZpY2VOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5yZWdpb25TaW1wbGlmaWVkIC0gVGhlIHNpbXBsaWZpZWQgcmVnaW9uIGlkZW50aWZpZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMuc3RhZ2UgLSBUaGUgZGVwbG95bWVudCBzdGFnZSBvZiB0aGUgcmVzb3VyY2UuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb25jYXRlbmF0ZWQgcmVzb3VyY2UgbmFtZS5cbiAgICovXG4gIHB1YmxpYyByZXNvdXJjZU5hbWUoeyBuYW1lLCBzZXJ2aWNlTmFtZSwgc3RhZ2UsIHJlZ2lvbiB9OiBQdXJlbm93SW5mcmFSZXNvdXJjZU9wdGlvbnMpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJlZ2lvblNpbXBsaWZpZWQgPSBzYW5pdGl6ZVN0YWNrTmFtZSh0aGlzLmdldFJlZ2lvblNpZ25hdHVyZShyZWdpb24gfHwgJ3VzLWVhc3QtMScpKTtcbiAgICByZXR1cm4gYCR7c2VydmljZU5hbWV9LSR7bmFtZX0tJHtyZWdpb25TaW1wbGlmaWVkfS0ke3N0YWdlfWA7XG4gIH1cbn1cbiIsICIvKlxuICogRWxhc3RpYyBMaWNlbnNlIDIuMFxuICogQ29weXJpZ2h0IChDKSAyMDI1XHUyMDEzcHJlc2VudCBSYW1hbiBNYXJvemF1LCBXb3JrIFRhcmdldCBJbnNpZ2h0IEZ1bmN0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQ29udGFjdDogcmFtYW5Ad29ya3RpZi5jb21cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTGljZW5zZWQgV29yazogUmVhY3QgU2VydmVybGVzcyA8cmVhY3Qtc2VydmVybGVzcz4uXG4gKiBVc2Ugb2YgdGhpcyBzb2Z0d2FyZSBpcyBnb3Zlcm5lZCBieSB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMDsgc2VlIHRoZSBMSUNFTlNFIGZpbGVcbiAqIG9yIGh0dHBzOi8vd3d3LmVsYXN0aWMuY28vbGljZW5zaW5nL2VsYXN0aWMtbGljZW5zZSBmb3IgZGV0YWlscy5cbiAqXG4gKiBSZS1saWNlbnNpbmcgbm90aWNlOlxuICogICBUaGlzIGZpbGUgd2FzIHByZXZpb3VzbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJ1c2luZXNzIFNvdXJjZSBMaWNlbnNlIDEuMSAoQlVTTC0xLjEpLlxuICogICBBcyBvZiAyMDI1LTA5LTE1LCBpdCBpcyByZS1saWNlbnNlZCB1bmRlciBFbGFzdGljIExpY2Vuc2UgMi4wLlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFbGFzdGljLTIuMFxuICovXG5cbmltcG9ydCAncmVmbGVjdC1tZXRhZGF0YSc7XG5pbXBvcnQgeyB0eXBlIERlcGxveW1lbnRSZXN1bHQsIFN0YWNrc0RlcGxveVJlc3VsdCwgRGVwbG95bWVudE91dHB1dHMgfSBmcm9tICdAd29ya3RpZi9wdXJlbm93L2Jpbic7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgcmVzdWx0IG9mIGRlcGxveWluZyBydW50aW1lIHN0YWNrcyBpbiB0aGUgUHVyZW5vdyBzeXN0ZW0uXG4gKiBUaGlzIHR5cGUgZXh0ZW5kcyB0aGUgU3RhY2tzRGVwbG95UmVzdWx0LCBhZGRpbmcgYSBzcGVjaWZpYyByZXN1bHQgZm9yIHRoZSBydW50aW1lIHN0YWNrIGRlcGxveW1lbnQuXG4gKlxuICogUHJvcGVydGllczpcbiAqIC0gcnVudGltZVN0YWNrOiBQcm92aWRlcyB0aGUgZGVwbG95bWVudCByZXN1bHQgc3BlY2lmaWMgdG8gdGhlIHJ1bnRpbWUgc3RhY2ssIGNvbnRhaW5pbmcgZGV0YWlscyBhbmQgc3RhdHVzIG9mIHRoZSBydW50aW1lIHN0YWNrIGRlcGxveW1lbnQgcHJvY2Vzcy5cbiAqXG4gKiBVc2UgdGhpcyB0eXBlIHRvIGVuY2Fwc3VsYXRlIGFuZCBtYW5hZ2UgcmVzdWx0cyByZWxhdGVkIHRvIGJvdGggZ2VuZXJhbCBzdGFjayBkZXBsb3ltZW50cyBhbmQgc3BlY2lmaWMgcnVudGltZSBzdGFjayBkZXBsb3ltZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgUHVyZW5vd1J1bnRpbWVTdGFja3NEZXBsb3lSZXN1bHQgPSBTdGFja3NEZXBsb3lSZXN1bHQgJiB7XG4gIHJ1bnRpbWVTdGFjazogRGVwbG95bWVudFJlc3VsdDtcbn1cblxuZXhwb3J0IHR5cGUgUHVyZW5vd1J1bnRpbWVEZXBsb3ltZW50T3V0cHV0cyA9IERlcGxveW1lbnRPdXRwdXRzICYge1xuICBsYW1iZGFBcm5MaXN0OiBzdHJpbmdbXTtcbn1cblxuIiwgIi8qXG4gKiBFbGFzdGljIExpY2Vuc2UgMi4wXG4gKiBDb3B5cmlnaHQgKEMpIDIwMjVcdTIwMTNwcmVzZW50IFJhbWFuIE1hcm96YXUsIFdvcmsgVGFyZ2V0IEluc2lnaHQgRnVuY3Rpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBDb250YWN0OiByYW1hbkB3b3JrdGlmLmNvbVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMaWNlbnNlZCBXb3JrOiB3b3JrdGlmLnB1cmVub3cuY2RrIDx3b3JrdGlmX3B1cmVub3dfY2RrPi5cbiAqIFVzZSBvZiB0aGlzIHNvZnR3YXJlIGlzIGdvdmVybmVkIGJ5IHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wOyBzZWUgdGhlIExJQ0VOU0UgZmlsZVxuICogb3IgaHR0cHM6Ly93d3cuZWxhc3RpYy5jby9saWNlbnNpbmcvZWxhc3RpYy1saWNlbnNlIGZvciBkZXRhaWxzLlxuICpcbiAqIFJlLWxpY2Vuc2luZyBub3RpY2U6XG4gKiAgIFRoaXMgZmlsZSB3YXMgcHJldmlvdXNseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgQnVzaW5lc3MgU291cmNlIExpY2Vuc2UgMS4xIChCVVNMLTEuMSkuXG4gKiAgIEFzIG9mIDIwMjUtMDktMTUsIGl0IGlzIHJlLWxpY2Vuc2VkIHVuZGVyIEVsYXN0aWMgTGljZW5zZSAyLjAuXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVsYXN0aWMtMi4wXG4gKi9cblxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuXG4vKipcbiAqIEdlbmVyYXRlIGh0bWwtdGVtcGxhdGUuZW1iZWRkZWQudHMgZmlsZSB3aXRoIHRoZSBIVE1MIHRlbXBsYXRlIGNvbnN0YW50LlxuICpcbiAqIFRoaXMgc2NyaXB0IGlzIHJ1biBhdCBidWlsZCB0aW1lIHRvIGVtYmVkIHRoZSB1c2VyJ3MgcHVibGljL2luZGV4Lmh0bWxcbiAqIGludG8gdGhlIExhbWJkYSBidW5kbGUgYXMgYSBUeXBlU2NyaXB0IGNvbnN0YW50LiBUaGlzIGVsaW1pbmF0ZXMgdGhlIG5lZWRcbiAqIGZvciBmaWxlIHN5c3RlbSByZWFkcyBhdCBydW50aW1lIGFuZCBlbnN1cmVzIHRoZSB0ZW1wbGF0ZSBpcyBhdmFpbGFibGVcbiAqIGluIHRoZSBMYW1iZGEgZW52aXJvbm1lbnQuXG4gKlxuICogVGhlIHNjcmlwdDpcbiAqIDEuIExvYWRzIHRoZSBIVE1MIHRlbXBsYXRlIHVzaW5nIEh0bWxUZW1wbGF0ZUxvYWRlciBsb2dpY1xuICogMi4gVmFsaWRhdGVzIHRoZSB0ZW1wbGF0ZSBzdHJ1Y3R1cmUgYW5kIHNpemVcbiAqIDMuIEdlbmVyYXRlcyBhIFR5cGVTY3JpcHQgZmlsZSB3aXRoIHRoZSB0ZW1wbGF0ZSBhcyBhIGNvbnN0YW50XG4gKiA0LiBXcml0ZXMgdGhlIGZpbGUgdG8gc3JjL2NvcmUvc2VydmljZXMvdGVtcGxhdGUvaHRtbC10ZW1wbGF0ZS5lbWJlZGRlZC50c1xuICogNS4gVmFsaWRhdGVzIHRoZSByZXN1bHRpbmcgYnVuZGxlIHNpemUgaW1wYWN0XG4gKlxuICogVGhpcyBmaWxlIGlzIHRoZW4gaW1wb3J0ZWQgYnkgSHRtbFRlbXBsYXRlU2VydmljZSBhdCBydW50aW1lLlxuICovXG5cbi8vIENvbnN0YW50cyBmb3IgdmFsaWRhdGlvblxuY29uc3QgTUFYX1RFTVBMQVRFX1NJWkVfQllURVMgPSA1ICogMTAyNCAqIDEwMjQ7IC8vIDVNQiAoY29uc2VydmF0aXZlIGxpbWl0IHRvIHN0YXkgdW5kZXIgMTBNQiBMYW1iZGEgbGltaXQpXG5jb25zdCBMQU1CREFfQlVORExFX1NJWkVfTElNSVQgPSAxMCAqIDEwMjQgKiAxMDI0OyAvLyAxME1CIEFXUyBMYW1iZGEgbGltaXRcbmNvbnN0IFRFTVBMQVRFX1NJWkVfV0FSTklOR19USFJFU0hPTEQgPSAxICogMTAyNCAqIDEwMjQ7IC8vIDFNQiB3YXJuaW5nIHRocmVzaG9sZFxuXG5mdW5jdGlvbiBsb2FkVGVtcGxhdGUoKSB7XG4gIGNvbnN0IHByb2plY3RSb290ID0gcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aC5qb2luKHByb2plY3RSb290LCAncHVibGljL2luZGV4Lmh0bWwnKTtcbiAgY29uc3QgdXNlRmFsbGJhY2sgPSB0cnVlOyAvLyBEZWZhdWx0IHRvIHRydWUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcblxuICAvLyBDaGVjayBpZiBmaWxlIGV4aXN0c1xuICBpZiAoIWZzLmV4aXN0c1N5bmModGVtcGxhdGVQYXRoKSkge1xuICAgIGlmICh1c2VGYWxsYmFjaykge1xuICAgICAgY29uc29sZS53YXJuKCdcXG4nICsgJz0nLnJlcGVhdCg4MCkpO1xuICAgICAgY29uc29sZS53YXJuKCdERVBSRUNBVElPTiBXQVJOSU5HOiBNaXNzaW5nIHB1YmxpYy9pbmRleC5odG1sJyk7XG4gICAgICBjb25zb2xlLndhcm4oJz0nLnJlcGVhdCg4MCkpO1xuICAgICAgY29uc29sZS53YXJuKGBcXG5GaWxlIG5vdCBmb3VuZDogJHt0ZW1wbGF0ZVBhdGh9YCk7XG4gICAgICBjb25zb2xlLndhcm4oJ1xcblRoZSBQdXJlbm93IGZyYW1ld29yayBpcyB1c2luZyBhIGZhbGxiYWNrIEhUTUwgdGVtcGxhdGUuJyk7XG4gICAgICBjb25zb2xlLndhcm4oJ1RoaXMgZmFsbGJhY2sgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uJyk7XG4gICAgICBjb25zb2xlLndhcm4oJ1xcbkFjdGlvbiByZXF1aXJlZDogQ3JlYXRlIHB1YmxpYy9pbmRleC5odG1sIGluIHlvdXIgcHJvamVjdCByb290LicpO1xuICAgICAgY29uc29sZS53YXJuKCdcXG5NaW5pbWFsIHRlbXBsYXRlIHN0cnVjdHVyZTonKTtcbiAgICAgIGNvbnNvbGUud2FybignJyk7XG4gICAgICBjb25zb2xlLndhcm4oJzwhRE9DVFlQRSBodG1sPicpO1xuICAgICAgY29uc29sZS53YXJuKCc8aHRtbCBsYW5nPVwiZW5cIj4nKTtcbiAgICAgIGNvbnNvbGUud2FybignICA8aGVhZD4nKTtcbiAgICAgIGNvbnNvbGUud2FybignICAgIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiIC8+Jyk7XG4gICAgICBjb25zb2xlLndhcm4oJyAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTFcIiAvPicpO1xuICAgICAgY29uc29sZS53YXJuKCcgIDwvaGVhZD4nKTtcbiAgICAgIGNvbnNvbGUud2FybignICA8Ym9keT4nKTtcbiAgICAgIGNvbnNvbGUud2FybignICAgIDxkaXYgaWQ9XCJyb290LXB1cmVub3dcIj48L2Rpdj4nKTtcbiAgICAgIGNvbnNvbGUud2FybignICA8L2JvZHk+Jyk7XG4gICAgICBjb25zb2xlLndhcm4oJzwvaHRtbD4nKTtcbiAgICAgIGNvbnNvbGUud2FybignXFxuJyArICc9Jy5yZXBlYXQoODApICsgJ1xcbicpO1xuXG4gICAgICByZXR1cm4gZ2V0RGVmYXVsdFRlbXBsYXRlKCk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFxcbiR7Jz0nLnJlcGVhdCg4MCl9XFxuYCArXG4gICAgICBgQlVJTEQgRVJST1I6IE1pc3NpbmcgcHVibGljL2luZGV4Lmh0bWxcXG5gICtcbiAgICAgIGAkeyc9Jy5yZXBlYXQoODApfVxcblxcbmAgK1xuICAgICAgYEZpbGUgbm90IGZvdW5kOiAke3RlbXBsYXRlUGF0aH1cXG5cXG5gICtcbiAgICAgIGBUaGUgUHVyZW5vdyBmcmFtZXdvcmsgcmVxdWlyZXMgYSBiYXNlIEhUTUwgdGVtcGxhdGUgaW4geW91ciBwcm9qZWN0LlxcblxcbmAgK1xuICAgICAgYEFjdGlvbiByZXF1aXJlZDogQ3JlYXRlIHB1YmxpYy9pbmRleC5odG1sIHdpdGggdGhlIGZvbGxvd2luZyBtaW5pbWFsIHN0cnVjdHVyZTpcXG5cXG5gICtcbiAgICAgIGA8IURPQ1RZUEUgaHRtbD5cXG5gICtcbiAgICAgIGA8aHRtbCBsYW5nPVwiZW5cIj5cXG5gICtcbiAgICAgIGAgIDxoZWFkPlxcbmAgK1xuICAgICAgYCAgICA8bWV0YSBjaGFyc2V0PVwidXRmLThcIiAvPlxcbmAgK1xuICAgICAgYCAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTFcIiAvPlxcbmAgK1xuICAgICAgYCAgPC9oZWFkPlxcbmAgK1xuICAgICAgYCAgPGJvZHk+XFxuYCArXG4gICAgICBgICAgIDxkaXYgaWQ9XCJyb290LXB1cmVub3dcIj48L2Rpdj5cXG5gICtcbiAgICAgIGAgIDwvYm9keT5cXG5gICtcbiAgICAgIGA8L2h0bWw+XFxuXFxuYCArXG4gICAgICBgJHsnPScucmVwZWF0KDgwKX1cXG5gLFxuICAgICk7XG4gIH1cblxuICAvLyBSZWFkIGZpbGUgY29udGVudFxuICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHRlbXBsYXRlUGF0aCwgJ3V0Zi04Jyk7XG5cbiAgLy8gQ2hlY2sgaWYgZmlsZSBpcyBlbXB0eVxuICBpZiAoIWNvbnRlbnQgfHwgY29udGVudC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFxcbiR7Jz0nLnJlcGVhdCg4MCl9XFxuYCArXG4gICAgICBgQlVJTEQgRVJST1I6IEVtcHR5IHB1YmxpYy9pbmRleC5odG1sXFxuYCArXG4gICAgICBgJHsnPScucmVwZWF0KDgwKX1cXG5cXG5gICtcbiAgICAgIGBGaWxlIGxvY2F0aW9uOiAke3RlbXBsYXRlUGF0aH1cXG5cXG5gICtcbiAgICAgIGBUaGUgZmlsZSBleGlzdHMgYnV0IGlzIGVtcHR5LiBJdCBtdXN0IGNvbnRhaW4gYSB2YWxpZCBIVE1MIGRvY3VtZW50IHN0cnVjdHVyZS5cXG5cXG5gICtcbiAgICAgIGBBY3Rpb24gcmVxdWlyZWQ6IEFkZCBIVE1MIGNvbnRlbnQgdG8gcHVibGljL2luZGV4Lmh0bWwuXFxuXFxuYCArXG4gICAgICBgJHsnPScucmVwZWF0KDgwKX1cXG5gLFxuICAgICk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSB0ZW1wbGF0ZSBzaXplXG4gIHZhbGlkYXRlVGVtcGxhdGVTaXplKGNvbnRlbnQsIHRlbXBsYXRlUGF0aCk7XG5cbiAgLy8gVmFsaWRhdGUgSFRNTCBzdHJ1Y3R1cmVcbiAgdmFsaWRhdGVUZW1wbGF0ZShjb250ZW50LCB0ZW1wbGF0ZVBhdGgpO1xuXG4gIHJldHVybiBjb250ZW50O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVRlbXBsYXRlU2l6ZShodG1sOiBzdHJpbmcsIHRlbXBsYXRlUGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IHNpemVCeXRlcyA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGh0bWwsICd1dGYtOCcpO1xuICBjb25zdCBzaXplTUIgPSAoc2l6ZUJ5dGVzIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgyKTtcblxuICAvLyBDaGVjayBpZiB0ZW1wbGF0ZSBleGNlZWRzIG1heGltdW0gc2l6ZVxuICBpZiAoc2l6ZUJ5dGVzID4gTUFYX1RFTVBMQVRFX1NJWkVfQllURVMpIHtcbiAgICBjb25zdCBtYXhTaXplTUIgPSAoTUFYX1RFTVBMQVRFX1NJWkVfQllURVMgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDIpO1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBcXG4keyc9Jy5yZXBlYXQoODApfVxcbmAgK1xuICAgICAgYEJVSUxEIEVSUk9SOiBIVE1MIHRlbXBsYXRlIHRvbyBsYXJnZVxcbmAgK1xuICAgICAgYCR7Jz0nLnJlcGVhdCg4MCl9XFxuXFxuYCArXG4gICAgICBgRmlsZTogJHt0ZW1wbGF0ZVBhdGh9XFxuYCArXG4gICAgICBgU2l6ZTogJHtzaXplTUJ9IE1CXFxuYCArXG4gICAgICBgTWF4aW11bSBhbGxvd2VkOiAke21heFNpemVNQn0gTUJcXG5cXG5gICtcbiAgICAgIGBUaGUgSFRNTCB0ZW1wbGF0ZSBpcyB0b28gbGFyZ2UgYW5kIHdpbGwgY2F1c2UgdGhlIExhbWJkYSBidW5kbGUgdG8gZXhjZWVkXFxuYCArXG4gICAgICBgdGhlIEFXUyAxME1CIGRlcGxveW1lbnQgbGltaXQuXFxuXFxuYCArXG4gICAgICBgQWN0aW9uIHJlcXVpcmVkOiBSZWR1Y2UgdGhlIHNpemUgb2YgcHVibGljL2luZGV4Lmh0bWwgYnk6XFxuYCArXG4gICAgICBgICAtIFJlbW92aW5nIGlubGluZSBzdHlsZXMgKHVzZSBleHRlcm5hbCBDU1MgZmlsZXMgaW5zdGVhZClcXG5gICtcbiAgICAgIGAgIC0gUmVtb3ZpbmcgaW5saW5lIHNjcmlwdHMgKHVzZSBleHRlcm5hbCBKUyBmaWxlcyBpbnN0ZWFkKVxcbmAgK1xuICAgICAgYCAgLSBSZW1vdmluZyBsYXJnZSBlbWJlZGRlZCBkYXRhICh1c2UgZXh0ZXJuYWwgZmlsZXMgaW5zdGVhZClcXG5gICtcbiAgICAgIGAgIC0gTWluaW1pemluZyBIVE1MIGNvbW1lbnRzIGFuZCB3aGl0ZXNwYWNlXFxuXFxuYCArXG4gICAgICBgJHsnPScucmVwZWF0KDgwKX1cXG5gLFxuICAgICk7XG4gIH1cblxuICAvLyBXYXJuIGlmIHRlbXBsYXRlIGlzIGFwcHJvYWNoaW5nIHRoZSB3YXJuaW5nIHRocmVzaG9sZFxuICBpZiAoc2l6ZUJ5dGVzID4gVEVNUExBVEVfU0laRV9XQVJOSU5HX1RIUkVTSE9MRCkge1xuICAgIGNvbnN0IHdhcm5pbmdUaHJlc2hvbGRNQiA9IChURU1QTEFURV9TSVpFX1dBUk5JTkdfVEhSRVNIT0xEIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgyKTtcbiAgICBjb25zb2xlLndhcm4oJ1xcbicgKyAnPScucmVwZWF0KDgwKSk7XG4gICAgY29uc29sZS53YXJuKCdXQVJOSU5HOiBMYXJnZSBIVE1MIHRlbXBsYXRlIGRldGVjdGVkJyk7XG4gICAgY29uc29sZS53YXJuKCc9Jy5yZXBlYXQoODApKTtcbiAgICBjb25zb2xlLndhcm4oYFxcbkZpbGU6ICR7dGVtcGxhdGVQYXRofWApO1xuICAgIGNvbnNvbGUud2FybihgU2l6ZTogJHtzaXplTUJ9IE1CICh0aHJlc2hvbGQ6ICR7d2FybmluZ1RocmVzaG9sZE1CfSBNQilgKTtcbiAgICBjb25zb2xlLndhcm4oJ1xcbkEgbGFyZ2UgSFRNTCB0ZW1wbGF0ZSBpbmNyZWFzZXMgTGFtYmRhIGJ1bmRsZSBzaXplIGFuZCBjb2xkIHN0YXJ0IHRpbWUuJyk7XG4gICAgY29uc29sZS53YXJuKCdcXG5Db25zaWRlcjonKTtcbiAgICBjb25zb2xlLndhcm4oJyAgLSBNb3ZpbmcgaW5saW5lIHN0eWxlcyB0byBleHRlcm5hbCBDU1MgZmlsZXMnKTtcbiAgICBjb25zb2xlLndhcm4oJyAgLSBNb3ZpbmcgaW5saW5lIHNjcmlwdHMgdG8gZXh0ZXJuYWwgSlMgZmlsZXMnKTtcbiAgICBjb25zb2xlLndhcm4oJyAgLSBSZWR1Y2luZyBlbWJlZGRlZCBkYXRhIGFuZCBjb21tZW50cycpO1xuICAgIGNvbnNvbGUud2FybignXFxuJyArICc9Jy5yZXBlYXQoODApICsgJ1xcbicpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGVtcGxhdGUoaHRtbDogc3RyaW5nLCB0ZW1wbGF0ZVBhdGg6IHN0cmluZykge1xuICBjb25zdCBtaXNzaW5nVGFncyA9IFtdO1xuXG4gIGlmICghLzxodG1sW14+XSo+L2kudGVzdChodG1sKSkge1xuICAgIG1pc3NpbmdUYWdzLnB1c2goJzxodG1sPicpO1xuICB9XG4gIGlmICghLzxoZWFkW14+XSo+L2kudGVzdChodG1sKSkge1xuICAgIG1pc3NpbmdUYWdzLnB1c2goJzxoZWFkPicpO1xuICB9XG4gIGlmICghLzxib2R5W14+XSo+L2kudGVzdChodG1sKSkge1xuICAgIG1pc3NpbmdUYWdzLnB1c2goJzxib2R5PicpO1xuICB9XG5cbiAgaWYgKG1pc3NpbmdUYWdzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLndhcm4oJ1xcbicgKyAnPScucmVwZWF0KDgwKSk7XG4gICAgY29uc29sZS53YXJuKCdXQVJOSU5HOiBJbnZhbGlkIEhUTUwgc3RydWN0dXJlIGRldGVjdGVkJyk7XG4gICAgY29uc29sZS53YXJuKCc9Jy5yZXBlYXQoODApKTtcbiAgICBjb25zb2xlLndhcm4oYFxcbkZpbGU6ICR7dGVtcGxhdGVQYXRofWApO1xuICAgIGNvbnNvbGUud2FybihgTWlzc2luZyByZXF1aXJlZCB0YWdzOiAke21pc3NpbmdUYWdzLmpvaW4oJywgJyl9YCk7XG4gICAgY29uc29sZS53YXJuKCdcXG5UaGUgSFRNTCB0ZW1wbGF0ZSBtYXkgbm90IHJlbmRlciBjb3JyZWN0bHkgYXQgcnVudGltZS4nKTtcbiAgICBjb25zb2xlLndhcm4oJ1xcbkFjdGlvbiByZWNvbW1lbmRlZDogQWRkIHRoZSBtaXNzaW5nIHRhZ3MgdG8gcHVibGljL2luZGV4Lmh0bWwuJyk7XG4gICAgY29uc29sZS53YXJuKCdcXG4nICsgJz0nLnJlcGVhdCg4MCkgKyAnXFxuJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdFRlbXBsYXRlKCkge1xuICByZXR1cm4gYDwhRE9DVFlQRSBodG1sPlxuPGh0bWwgbGFuZz1cImVuXCI+XG4gIDxoZWFkPlxuICAgIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiIC8+XG4gICAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xXCIgLz5cbiAgICA8bWV0YSBuYW1lPVwidGhlbWUtY29sb3JcIiBjb250ZW50PVwiIzAwMDAwMFwiIC8+XG4gIDwvaGVhZD5cbiAgPGJvZHk+XG4gICAgPG5vc2NyaXB0PllvdSBuZWVkIHRvIGVuYWJsZSBKYXZhU2NyaXB0IHRvIHJ1biB0aGlzIGFwcC48L25vc2NyaXB0PlxuICAgIDxkaXYgaWQ9XCJyb290LWludGVybmFsXCI+TG9hZGluZy4uLjwvZGl2PlxuICAgIDxkaXYgaWQ9XCJyb290LXB1cmVub3dcIj48L2Rpdj5cbiAgPC9ib2R5PlxuPC9odG1sPmA7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQnVuZGxlU2l6ZShlbWJlZGRlZEZpbGVQYXRoOiBhbnkpIHtcbiAgLy8gQ2hlY2sgaWYgdGhlIGVtYmVkZGVkIGZpbGUgZXhpc3RzXG4gIGlmICghZnMuZXhpc3RzU3luYyhlbWJlZGRlZEZpbGVQYXRoKSkge1xuICAgIGNvbnNvbGUud2FybihgV2FybmluZzogQ291bGQgbm90IHZhbGlkYXRlIGJ1bmRsZSBzaXplIC0gZW1iZWRkZWQgZmlsZSBub3QgZm91bmQ6ICR7ZW1iZWRkZWRGaWxlUGF0aH1gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBlbWJlZGRlZEZpbGVTaXplID0gZnMuc3RhdFN5bmMoZW1iZWRkZWRGaWxlUGF0aCkuc2l6ZTtcbiAgY29uc3QgZW1iZWRkZWRGaWxlU2l6ZU1CID0gKGVtYmVkZGVkRmlsZVNpemUgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDIpO1xuXG4gIC8vIGNvbnNvbGUubG9nKGAgIEVtYmVkZGVkIGZpbGUgc2l6ZTogJHtlbWJlZGRlZEZpbGVTaXplTUJ9IE1CYCk7XG5cbiAgLy8gRXN0aW1hdGUgaW1wYWN0IG9uIExhbWJkYSBidW5kbGVcbiAgLy8gVGhlIGVtYmVkZGVkIGZpbGUgd2lsbCBiZSBwYXJ0IG9mIHRoZSBMYW1iZGEgYnVuZGxlLCBzbyB3ZSBjaGVjayBpZiBpdCdzIHJlYXNvbmFibGVcbiAgaWYgKGVtYmVkZGVkRmlsZVNpemUgPiBNQVhfVEVNUExBVEVfU0laRV9CWVRFUykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBcXG4keyc9Jy5yZXBlYXQoODApfVxcbmAgK1xuICAgICAgYEJVSUxEIEVSUk9SOiBFbWJlZGRlZCB0ZW1wbGF0ZSBmaWxlIHRvbyBsYXJnZVxcbmAgK1xuICAgICAgYCR7Jz0nLnJlcGVhdCg4MCl9XFxuXFxuYCArXG4gICAgICBgRmlsZTogJHtlbWJlZGRlZEZpbGVQYXRofVxcbmAgK1xuICAgICAgYFNpemU6ICR7ZW1iZWRkZWRGaWxlU2l6ZU1CfSBNQlxcbmAgK1xuICAgICAgYE1heGltdW0gYWxsb3dlZDogJHsoTUFYX1RFTVBMQVRFX1NJWkVfQllURVMgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDIpfSBNQlxcblxcbmAgK1xuICAgICAgYFRoZSBlbWJlZGRlZCB0ZW1wbGF0ZSBmaWxlIHdpbGwgY2F1c2UgdGhlIExhbWJkYSBidW5kbGUgdG8gZXhjZWVkIHRoZVxcbmAgK1xuICAgICAgYEFXUyAxME1CIGRlcGxveW1lbnQgbGltaXQuXFxuXFxuYCArXG4gICAgICBgQWN0aW9uIHJlcXVpcmVkOiBSZWR1Y2UgdGhlIHNpemUgb2YgcHVibGljL2luZGV4Lmh0bWwuXFxuXFxuYCArXG4gICAgICBgJHsnPScucmVwZWF0KDgwKX1cXG5gLFxuICAgICk7XG4gIH1cblxuICAvLyBDaGVjayBpZiBMYW1iZGEgYnVuZGxlIGV4aXN0cyBhbmQgdmFsaWRhdGUgaXRzIHNpemVcbiAgLy8gTm90ZTogVGhpcyBpcyBpbmZvcm1hdGlvbmFsIG9ubHkgZHVyaW5nIHRlbXBsYXRlIGdlbmVyYXRpb24sIGFzIHRoZSBidW5kbGVcbiAgLy8gbWF5IG5vdCBoYXZlIGJlZW4gcmVidWlsdCB5ZXQgd2l0aCB0aGUgbmV3IHRlbXBsYXRlXG4gIGNvbnN0IGxhbWJkYUJ1bmRsZVBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vLi4vb3V0L2Rpc3QvbGFtYmRhL2J1bmRsZS5qcycpO1xuICBpZiAoZnMuZXhpc3RzU3luYyhsYW1iZGFCdW5kbGVQYXRoKSkge1xuICAgIGNvbnN0IGJ1bmRsZVNpemUgPSBmcy5zdGF0U3luYyhsYW1iZGFCdW5kbGVQYXRoKS5zaXplO1xuICAgIGNvbnN0IGJ1bmRsZVNpemVNQiA9IChidW5kbGVTaXplIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgyKTtcblxuICAgIGNvbnNvbGUubG9nKGAgIExhbWJkYSBidW5kbGUgc2l6ZTogJHtidW5kbGVTaXplTUJ9IE1CIChleGlzdGluZyBidW5kbGUpYCk7XG5cbiAgICAvLyBPbmx5IHdhcm4gYWJvdXQgYnVuZGxlIHNpemUsIGRvbid0IGZhaWwgdGhlIGJ1aWxkXG4gICAgLy8gVGhlIGJ1bmRsZSB3aWxsIGJlIHJlYnVpbHQgYWZ0ZXIgdGhpcyBzY3JpcHQgcnVuc1xuICAgIGlmIChidW5kbGVTaXplID4gTEFNQkRBX0JVTkRMRV9TSVpFX0xJTUlUKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1xcbicgKyAnPScucmVwZWF0KDgwKSk7XG4gICAgICBjb25zb2xlLndhcm4oJ1dBUk5JTkc6IEV4aXN0aW5nIExhbWJkYSBidW5kbGUgZXhjZWVkcyBBV1MgbGltaXQnKTtcbiAgICAgIGNvbnNvbGUud2FybignPScucmVwZWF0KDgwKSk7XG4gICAgICBjb25zb2xlLndhcm4oYFxcbkJ1bmRsZTogJHtsYW1iZGFCdW5kbGVQYXRofWApO1xuICAgICAgY29uc29sZS53YXJuKGBTaXplOiAke2J1bmRsZVNpemVNQn0gTUJgKTtcbiAgICAgIGNvbnNvbGUud2FybihgQVdTIExhbWJkYSBsaW1pdDogJHsoTEFNQkRBX0JVTkRMRV9TSVpFX0xJTUlUIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgyKX0gTUJgKTtcbiAgICAgIGNvbnNvbGUud2FybignXFxuTm90ZTogVGhpcyBpcyB0aGUgZXhpc3RpbmcgYnVuZGxlIGJlZm9yZSB0ZW1wbGF0ZSBlbWJlZGRpbmcuJyk7XG4gICAgICBjb25zb2xlLndhcm4oJ1RoZSBidW5kbGUgd2lsbCBiZSByZWJ1aWx0IHdpdGggdGhlIG5ldyB0ZW1wbGF0ZS4nKTtcbiAgICAgIGNvbnNvbGUud2FybignXFxuSWYgdGhlIGJ1bmRsZSBzaXplIGlzc3VlIHBlcnNpc3RzIGFmdGVyIHJlYnVpbGQ6Jyk7XG4gICAgICBjb25zb2xlLndhcm4oJyAgMS4gRXh0ZXJuYWxpemUgbGFyZ2UgZGVwZW5kZW5jaWVzIGluIGVzYnVpbGQgY29uZmlnJyk7XG4gICAgICBjb25zb2xlLndhcm4oJyAgMi4gVXNlIExhbWJkYSBsYXllcnMgZm9yIGxhcmdlIGRlcGVuZGVuY2llcycpO1xuICAgICAgY29uc29sZS53YXJuKCcgIDMuIFJlZHVjZSB0aGUgc2l6ZSBvZiBwdWJsaWMvaW5kZXguaHRtbCBpZiBuZWVkZWQnKTtcbiAgICAgIGNvbnNvbGUud2FybignXFxuJyArICc9Jy5yZXBlYXQoODApICsgJ1xcbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXYXJuIGlmIGJ1bmRsZSBpcyBhcHByb2FjaGluZyB0aGUgbGltaXQgKD44TUIpXG4gICAgICBjb25zdCBidW5kbGVXYXJuaW5nVGhyZXNob2xkID0gOCAqIDEwMjQgKiAxMDI0O1xuICAgICAgaWYgKGJ1bmRsZVNpemUgPiBidW5kbGVXYXJuaW5nVGhyZXNob2xkKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignXFxuJyArICc9Jy5yZXBlYXQoODApKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdXQVJOSU5HOiBMYW1iZGEgYnVuZGxlIGFwcHJvYWNoaW5nIHNpemUgbGltaXQnKTtcbiAgICAgICAgY29uc29sZS53YXJuKCc9Jy5yZXBlYXQoODApKTtcbiAgICAgICAgY29uc29sZS53YXJuKGBcXG5CdW5kbGUgc2l6ZTogJHtidW5kbGVTaXplTUJ9IE1CYCk7XG4gICAgICAgIGNvbnNvbGUud2FybihgQVdTIGxpbWl0OiAkeyhMQU1CREFfQlVORExFX1NJWkVfTElNSVQgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDIpfSBNQmApO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1xcbkNvbnNpZGVyIG9wdGltaXppbmcgdGhlIGJ1bmRsZSB0byBhdm9pZCBkZXBsb3ltZW50IGZhaWx1cmVzLicpO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1xcbicgKyAnPScucmVwZWF0KDgwKSArICdcXG4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVFbWJlZGRlZFRlbXBsYXRlRmlsZSgpIHtcbiAgLy8gY29uc29sZS5sb2coJ1xcbicgKyAnPScucmVwZWF0KDgwKSk7XG4gIC8vIGNvbnNvbGUubG9nKCdHZW5lcmF0aW5nIEhUTUwgVGVtcGxhdGUgRW1iZWRkaW5nJyk7XG4gIC8vIGNvbnNvbGUubG9nKCc9Jy5yZXBlYXQoODApICsgJ1xcbicpO1xuXG4gIC8vIExvYWQgdGhlIEhUTUwgdGVtcGxhdGVcbiAgY29uc3QgdGVtcGxhdGUgPSBsb2FkVGVtcGxhdGUoKTtcblxuICAvLyBHZW5lcmF0ZSBUeXBlU2NyaXB0IGZpbGUgY29udGVudFxuICBjb25zdCBmaWxlQ29udGVudCA9IGAvKlxuICogRWxhc3RpYyBMaWNlbnNlIDIuMFxuICogQ29weXJpZ2h0IChDKSAyMDI1XHUyMDEzcHJlc2VudCBSYW1hbiBNYXJvemF1LCBXb3JrIFRhcmdldCBJbnNpZ2h0IEZ1bmN0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQ29udGFjdDogcmFtYW5Ad29ya3RpZi5jb21cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTGljZW5zZWQgV29yazogd29ya3RpZi5wdXJlbm93LmNkayA8d29ya3RpZl9wdXJlbm93X2Nkaz4uXG4gKiBVc2Ugb2YgdGhpcyBzb2Z0d2FyZSBpcyBnb3Zlcm5lZCBieSB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMDsgc2VlIHRoZSBMSUNFTlNFIGZpbGVcbiAqIG9yIGh0dHBzOi8vd3d3LmVsYXN0aWMuY28vbGljZW5zaW5nL2VsYXN0aWMtbGljZW5zZSBmb3IgZGV0YWlscy5cbiAqXG4gKiBSZS1saWNlbnNpbmcgbm90aWNlOlxuICogICBUaGlzIGZpbGUgd2FzIHByZXZpb3VzbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJ1c2luZXNzIFNvdXJjZSBMaWNlbnNlIDEuMSAoQlVTTC0xLjEpLlxuICogICBBcyBvZiAyMDI1LTA5LTIyLCBpdCBpcyByZS1saWNlbnNlZCB1bmRlciBFbGFzdGljIExpY2Vuc2UgMi4wLlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFbGFzdGljLTIuMFxuICovXG5cbi8qKlxuICogRW1iZWRkZWQgSFRNTCB0ZW1wbGF0ZSBmcm9tIHB1YmxpYy9pbmRleC5odG1sLlxuICogXG4gKiBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYXQgYnVpbGQgdGltZSBieSBiaW4vZGVwbG95L2dlbmVyYXRlLWh0bWwtdGVtcGxhdGUuanMuXG4gKiBETyBOT1QgRURJVCBUSElTIEZJTEUgTUFOVUFMTFkgLSBjaGFuZ2VzIHdpbGwgYmUgb3ZlcndyaXR0ZW4gb24gbmV4dCBidWlsZC5cbiAqIFxuICogVG8gbW9kaWZ5IHRoZSBIVE1MIHRlbXBsYXRlLCBlZGl0IHB1YmxpYy9pbmRleC5odG1sIGluIHlvdXIgcHJvamVjdCByb290LlxuICovXG5cbmV4cG9ydCBjb25zdCBIVE1MX1RFTVBMQVRFID0gJHtKU09OLnN0cmluZ2lmeSh0ZW1wbGF0ZSl9O1xuYDtcblxuICAvLyBXcml0ZSB0byBzcmMvY29yZS9zZXJ2aWNlcy90ZW1wbGF0ZS9odG1sLXRlbXBsYXRlLmVtYmVkZGVkLnRzXG4gIGNvbnN0IG91dHB1dFBhdGggPSBwYXRoLmpvaW4oXG4gICAgX19kaXJuYW1lLFxuICAgICcuLi8uLi9zcmMvY29yZS9zZXJ2aWNlcy90ZW1wbGF0ZS9odG1sLXRlbXBsYXRlLmVtYmVkZGVkLnRzJyxcbiAgKTtcblxuICAvLyBFbnN1cmUgZGlyZWN0b3J5IGV4aXN0c1xuICBjb25zdCBvdXRwdXREaXIgPSBwYXRoLmRpcm5hbWUob3V0cHV0UGF0aCk7XG4gIGlmICghZnMuZXhpc3RzU3luYyhvdXRwdXREaXIpKSB7XG4gICAgZnMubWtkaXJTeW5jKG91dHB1dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIH1cblxuICBmcy53cml0ZUZpbGVTeW5jKG91dHB1dFBhdGgsIGZpbGVDb250ZW50LCAndXRmLTgnKTtcblxuICBjb25zdCB0ZW1wbGF0ZVNpemVLQiA9ICh0ZW1wbGF0ZS5sZW5ndGggLyAxMDI0KS50b0ZpeGVkKDIpO1xuICAvLyBjb25zb2xlLmxvZyhgXHUyNzEzIEdlbmVyYXRlZDogJHtvdXRwdXRQYXRofWApO1xuICAvLyBjb25zb2xlLmxvZyhgICBUZW1wbGF0ZSBzaXplOiAke3RlbXBsYXRlU2l6ZUtCfSBLQmApO1xuXG4gIC8vIFZhbGlkYXRlIGJ1bmRsZSBzaXplXG4gIHZhbGlkYXRlQnVuZGxlU2l6ZShvdXRwdXRQYXRoKTtcblxuICAvLyBjb25zb2xlLmxvZygnXFxuJyArICc9Jy5yZXBlYXQoODApKTtcbiAgLy8gY29uc29sZS5sb2coJ0hUTUwgVGVtcGxhdGUgRW1iZWRkaW5nIENvbXBsZXRlJyk7XG4gIC8vIGNvbnNvbGUubG9nKCc9Jy5yZXBlYXQoODApICsgJ1xcbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTdGF0aWNIdG1sKHNob3VsZEV4aXQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAvLyBSdW4gdGhlIGdlbmVyYXRvclxuICB0cnkge1xuICAgIGdlbmVyYXRlRW1iZWRkZWRUZW1wbGF0ZUZpbGUoKTtcbiAgICBpZiAoc2hvdWxkRXhpdCkge1xuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1xcbicgKyAnPScucmVwZWF0KDgwKSk7XG4gICAgY29uc29sZS5lcnJvcignQlVJTEQgRkFJTEVEOiBIVE1MIFRlbXBsYXRlIEdlbmVyYXRpb24gRXJyb3InKTtcbiAgICBjb25zb2xlLmVycm9yKCc9Jy5yZXBlYXQoODApKTtcbiAgICBjb25zb2xlLmVycm9yKCdcXG4nICsgZXJyb3IubWVzc2FnZSk7XG4gICAgaWYgKGVycm9yLnN0YWNrICYmIHByb2Nlc3MuZW52LkRFQlVHKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdcXG5TdGFjayB0cmFjZTonKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3Iuc3RhY2spO1xuICAgIH1cbiAgICBpZiAoc2hvdWxkRXhpdCkge1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfVxufVxuXG5cbiIsICIvKlxuICogRWxhc3RpYyBMaWNlbnNlIDIuMFxuICogQ29weXJpZ2h0IChDKSAyMDI1XHUyMDEzcHJlc2VudCBSYW1hbiBNYXJvemF1LCBXb3JrIFRhcmdldCBJbnNpZ2h0IEZ1bmN0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQ29udGFjdDogcmFtYW5Ad29ya3RpZi5jb21cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTGljZW5zZWQgV29yazogd29ya3RpZi5wdXJlbm93LmNkayA8d29ya3RpZl9wdXJlbm93X2Nkaz4uXG4gKiBVc2Ugb2YgdGhpcyBzb2Z0d2FyZSBpcyBnb3Zlcm5lZCBieSB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMDsgc2VlIHRoZSBMSUNFTlNFIGZpbGVcbiAqIG9yIGh0dHBzOi8vd3d3LmVsYXN0aWMuY28vbGljZW5zaW5nL2VsYXN0aWMtbGljZW5zZSBmb3IgZGV0YWlscy5cbiAqXG4gKiBSZS1saWNlbnNpbmcgbm90aWNlOlxuICogICBUaGlzIGZpbGUgd2FzIHByZXZpb3VzbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJ1c2luZXNzIFNvdXJjZSBMaWNlbnNlIDEuMSAoQlVTTC0xLjEpLlxuICogICBBcyBvZiAyMDI1LTA5LTE1LCBpdCBpcyByZS1saWNlbnNlZCB1bmRlciBFbGFzdGljIExpY2Vuc2UgMi4wLlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFbGFzdGljLTIuMFxuICovXG5cbi8qKlxuICogQmFzZSBlcnJvciBjbGFzcyBmb3IgYWxsIFJ1bnRpbWUgQ0xJIGVycm9yc1xuICogRm9sbG93cyBwdXJlbm93IGVycm9yIHBhdHRlcm5zIHdpdGhvdXQgZW1vamlcbiAqL1xuZXhwb3J0IGNsYXNzIFJ1bnRpbWVDbGlFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSBjb2RlOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IGhpbnQ/OiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdSdW50aW1lQ2xpRXJyb3InO1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9XG59XG5cbi8qKlxuICogRXJyb3IgdGhyb3duIHdoZW4gcnVudGltZSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQgb3IgbWlzc2luZ1xuICogRXh0ZW5kcyBwdXJlbm93IENvbmZpZ0Vycm9yIHBhdHRlcm5cbiAqL1xuZXhwb3J0IGNsYXNzIFJ1bnRpbWVDb25maWdFcnJvciBleHRlbmRzIFJ1bnRpbWVDbGlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgaGludD86IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UsICdSVU5USU1FX0NPTkZJR19FUlJPUicsIGhpbnQpO1xuICAgIHRoaXMubmFtZSA9ICdSdW50aW1lQ29uZmlnRXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogRXJyb3IgdGhyb3duIHdoZW4gcnVudGltZSBidWlsZCBvcGVyYXRpb25zIGZhaWxcbiAqIEV4dGVuZHMgcHVyZW5vdyBCdWlsZEVycm9yIHBhdHRlcm5cbiAqL1xuZXhwb3J0IGNsYXNzIFJ1bnRpbWVCdWlsZEVycm9yIGV4dGVuZHMgUnVudGltZUNsaUVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBoaW50Pzogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSwgJ1JVTlRJTUVfQlVJTERfRVJST1InLCBoaW50KTtcbiAgICB0aGlzLm5hbWUgPSAnUnVudGltZUJ1aWxkRXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogRXJyb3IgdGhyb3duIHdoZW4gcnVudGltZSBkZXBsb3ltZW50IG9wZXJhdGlvbnMgZmFpbFxuICogRXh0ZW5kcyBwdXJlbm93IERlcGxveW1lbnRFcnJvciBwYXR0ZXJuXG4gKi9cbmV4cG9ydCBjbGFzcyBSdW50aW1lRGVwbG95bWVudEVycm9yIGV4dGVuZHMgUnVudGltZUNsaUVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBoaW50Pzogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSwgJ1JVTlRJTUVfREVQTE9ZTUVOVF9FUlJPUicsIGhpbnQpO1xuICAgIHRoaXMubmFtZSA9ICdSdW50aW1lRGVwbG95bWVudEVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIEVycm9yIHRocm93biB3aGVuIHJ1bnRpbWUgdmFsaWRhdGlvbiBjaGVja3MgZmFpbFxuICogRXh0ZW5kcyBwdXJlbm93IFZhbGlkYXRpb25FcnJvciBwYXR0ZXJuXG4gKi9cbmV4cG9ydCBjbGFzcyBSdW50aW1lVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgUnVudGltZUNsaUVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBoaW50Pzogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSwgJ1JVTlRJTUVfVkFMSURBVElPTl9FUlJPUicsIGhpbnQpO1xuICAgIHRoaXMubmFtZSA9ICdSdW50aW1lVmFsaWRhdGlvbkVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIEZyaWVuZGx5IGVycm9yIGZvcm1hdHRlciBmb3IgcnVudGltZSB3b3Jrc3BhY2VcbiAqIEZvbGxvd3MgcHVyZW5vdyBGcmllbmRseUVycm9yRm9ybWF0dGVyIHBhdHRlcm4gd2l0aG91dCBlbW9qaVxuICovXG5leHBvcnQgY2xhc3MgUnVudGltZUZyaWVuZGx5RXJyb3JGb3JtYXR0ZXIge1xuICAvKipcbiAgICogRm9ybWF0IGVycm9yIGFzIGh1bWFuLXJlYWRhYmxlIG1lc3NhZ2Ugd2l0aG91dCBlbW9qaVxuICAgKi9cbiAgZm9ybWF0RXJyb3IoZXJyb3I6IEVycm9yLCB2ZXJib3NlOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gSGVhZGVyIHdpdGhvdXQgZW1vamlcbiAgICBsaW5lcy5wdXNoKGBFcnJvcjogJHtlcnJvci5uYW1lIHx8ICdSdW50aW1lRXJyb3InfWApO1xuICAgIGxpbmVzLnB1c2goJycpO1xuXG4gICAgLy8gRXJyb3IgbWVzc2FnZVxuICAgIGxpbmVzLnB1c2goYE1lc3NhZ2U6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICBsaW5lcy5wdXNoKCcnKTtcblxuICAgIC8vIEhpbnQgaWYgYXZhaWxhYmxlXG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgUnVudGltZUNsaUVycm9yICYmIGVycm9yLmhpbnQpIHtcbiAgICAgIGxpbmVzLnB1c2goYEhpbnQ6ICR7ZXJyb3IuaGludH1gKTtcbiAgICAgIGxpbmVzLnB1c2goJycpO1xuICAgIH1cblxuICAgIC8vIFN0YWNrIHRyYWNlIGluIHZlcmJvc2UgbW9kZVxuICAgIGlmICh2ZXJib3NlICYmIGVycm9yLnN0YWNrKSB7XG4gICAgICBsaW5lcy5wdXNoKCctLS0gU3RhY2sgVHJhY2UgKC0tdmVyYm9zZSkgLS0tJyk7XG4gICAgICBsaW5lcy5wdXNoKGVycm9yLnN0YWNrKTtcbiAgICAgIGxpbmVzLnB1c2goJycpO1xuICAgIH1cblxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgdmFsaWRhdGlvbiBlcnJvciB3aXRob3V0IGVtb2ppXG4gICAqL1xuICBmb3JtYXRWYWxpZGF0aW9uRXJyb3IoXG4gICAgZmllbGROYW1lOiBzdHJpbmcsXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIHZlcmJvc2U6IGJvb2xlYW4gPSBmYWxzZSxcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcblxuICAgIGxpbmVzLnB1c2goJ1ZhbGlkYXRpb24gRXJyb3InKTtcbiAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICBsaW5lcy5wdXNoKGBGaWVsZDogJHtmaWVsZE5hbWV9YCk7XG4gICAgbGluZXMucHVzaChgSXNzdWU6ICR7bWVzc2FnZX1gKTtcbiAgICBsaW5lcy5wdXNoKCcnKTtcblxuICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICBsaW5lcy5wdXNoKCctLS0gVGVjaG5pY2FsIERldGFpbHMgKC0tdmVyYm9zZSkgLS0tJyk7XG4gICAgICBsaW5lcy5wdXNoKGBGaWVsZCB2YWxpZGF0aW9uIGZhaWxlZCBmb3I6ICR7ZmllbGROYW1lfWApO1xuICAgICAgbGluZXMucHVzaChgVmFsaWRhdGlvbiBtZXNzYWdlOiAke21lc3NhZ2V9YCk7XG4gICAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IGRlcGxveW1lbnQgZXJyb3Igd2l0aG91dCBlbW9qaVxuICAgKi9cbiAgZm9ybWF0RGVwbG95bWVudEVycm9yKFxuICAgIHN0YWNrTmFtZTogc3RyaW5nLFxuICAgIG9wZXJhdGlvbjogc3RyaW5nLFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICB2ZXJib3NlOiBib29sZWFuID0gZmFsc2UsXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBsaW5lcy5wdXNoKCdEZXBsb3ltZW50IEVycm9yJyk7XG4gICAgbGluZXMucHVzaCgnJyk7XG4gICAgbGluZXMucHVzaChgU3RhY2s6ICR7c3RhY2tOYW1lfWApO1xuICAgIGxpbmVzLnB1c2goYE9wZXJhdGlvbjogJHtvcGVyYXRpb259YCk7XG4gICAgbGluZXMucHVzaChgSXNzdWU6ICR7bWVzc2FnZX1gKTtcbiAgICBsaW5lcy5wdXNoKCcnKTtcblxuICAgIGxpbmVzLnB1c2goJ1Ryb3VibGVzaG9vdGluZzonKTtcbiAgICBsaW5lcy5wdXNoKCcxLiBDaGVjayBBV1MgY3JlZGVudGlhbHMgYW5kIHBlcm1pc3Npb25zJyk7XG4gICAgbGluZXMucHVzaCgnMi4gVmVyaWZ5IHN0YWNrIGNvbmZpZ3VyYXRpb24nKTtcbiAgICBsaW5lcy5wdXNoKCczLiBSZXZpZXcgQ2xvdWRGb3JtYXRpb24gZXZlbnRzIGluIEFXUyBDb25zb2xlJyk7XG4gICAgbGluZXMucHVzaCgnJyk7XG5cbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbGluZXMucHVzaCgnLS0tIFRlY2huaWNhbCBEZXRhaWxzICgtLXZlcmJvc2UpIC0tLScpO1xuICAgICAgbGluZXMucHVzaChgU3RhY2sgbmFtZTogJHtzdGFja05hbWV9YCk7XG4gICAgICBsaW5lcy5wdXNoKGBGYWlsZWQgb3BlcmF0aW9uOiAke29wZXJhdGlvbn1gKTtcbiAgICAgIGxpbmVzLnB1c2goYEVycm9yIGRldGFpbHM6ICR7bWVzc2FnZX1gKTtcbiAgICAgIGxpbmVzLnB1c2goJycpO1xuICAgIH1cblxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxufVxuXG4vKipcbiAqIFN0cnVjdHVyZWQgbG9nZ2VyIGZvciBydW50aW1lIHdvcmtzcGFjZVxuICogRm9sbG93cyBwdXJlbm93IGxvZ2dpbmcgcGF0dGVybnMgd2l0aG91dCBlbW9qaVxuICovXG5leHBvcnQgY2xhc3MgUnVudGltZVN0cnVjdHVyZWRMb2dnZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHZlcmJvc2U6IGJvb2xlYW4gPSBmYWxzZSkge1xuICB9XG5cbiAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55Pik6IHZvaWQge1xuICAgIGNvbnN0IGxvZ0VudHJ5ID0ge1xuICAgICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIC4uLm1ldGFkYXRhLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy52ZXJib3NlKSB7XG4gICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShsb2dFbnRyeSwgbnVsbCwgMikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICB3YXJuKG1lc3NhZ2U6IHN0cmluZywgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdm9pZCB7XG4gICAgY29uc3QgbG9nRW50cnkgPSB7XG4gICAgICBsZXZlbDogJ3dhcm4nLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgLi4ubWV0YWRhdGEsXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnZlcmJvc2UpIHtcbiAgICAgIGNvbnNvbGUud2FybihKU09OLnN0cmluZ2lmeShsb2dFbnRyeSwgbnVsbCwgMikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oYFdhcm5pbmc6ICR7bWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBlcnJvcihtZXNzYWdlOiBzdHJpbmcsIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55Pik6IHZvaWQge1xuICAgIGNvbnN0IGxvZ0VudHJ5ID0ge1xuICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICBtZXNzYWdlLFxuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAuLi5tZXRhZGF0YSxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMudmVyYm9zZSkge1xuICAgICAgY29uc29sZS5lcnJvcihKU09OLnN0cmluZ2lmeShsb2dFbnRyeSwgbnVsbCwgMikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBFcnJvcjogJHttZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnZlcmJvc2UpIHJldHVybjtcblxuICAgIGNvbnN0IGxvZ0VudHJ5ID0ge1xuICAgICAgbGV2ZWw6ICdkZWJ1ZycsXG4gICAgICBtZXNzYWdlLFxuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAuLi5tZXRhZGF0YSxcbiAgICB9O1xuXG4gICAgY29uc29sZS5kZWJ1ZyhKU09OLnN0cmluZ2lmeShsb2dFbnRyeSwgbnVsbCwgMikpO1xuICB9XG59XG4iLCAiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG4vKlxuICogRWxhc3RpYyBMaWNlbnNlIDIuMFxuICogQ29weXJpZ2h0IChDKSAyMDI1XHUyMDEzcHJlc2VudCBSYW1hbiBNYXJvemF1LCBXb3JrIFRhcmdldCBJbnNpZ2h0IEZ1bmN0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQ29udGFjdDogcmFtYW5Ad29ya3RpZi5jb21cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTGljZW5zZWQgV29yazogd29ya3RpZi5wdXJlbm93LmNkayA8d29ya3RpZl9wdXJlbm93X2Nkaz4uXG4gKiBVc2Ugb2YgdGhpcyBzb2Z0d2FyZSBpcyBnb3Zlcm5lZCBieSB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMDsgc2VlIHRoZSBMSUNFTlNFIGZpbGVcbiAqIG9yIGh0dHBzOi8vd3d3LmVsYXN0aWMuY28vbGljZW5zaW5nL2VsYXN0aWMtbGljZW5zZSBmb3IgZGV0YWlscy5cbiAqXG4gKiBSZS1saWNlbnNpbmcgbm90aWNlOlxuICogICBUaGlzIGZpbGUgd2FzIHByZXZpb3VzbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJ1c2luZXNzIFNvdXJjZSBMaWNlbnNlIDEuMSAoQlVTTC0xLjEpLlxuICogQXMgb2YgMjAyNS0wOS0xNSwgaXQgaXMgcmUtbGljZW5zZWQgdW5kZXIgRWxhc3RpYyBMaWNlbnNlIDIuMC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRWxhc3RpYy0yLjBcbiAqL1xuXG5pbXBvcnQgJ3JlZmxlY3QtbWV0YWRhdGEnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAncHJvY2Vzcyc7XG5cbmltcG9ydCB7IEdsb2JhbE9wdGlvbnMsIFB1cmVub3dDbGksIFB1cmVub3dDbGlDb250ZXh0LCBwdXJlbm93Q29tbWFuZENvbmZpZyB9IGZyb20gJ0B3b3JrdGlmL3B1cmVub3cvYmluJztcblxuaW1wb3J0IHsgUHVyZW5vd1J1bnRpbWVDbGlDb250ZXh0LCBQdXJlbm93UnVudGltZVN0YWNrc0RlcGxveVNlcnZpY2UgfSBmcm9tICdAYmluL3NlcnZpY2VzJztcblxuaW1wb3J0IHsgUnVudGltZUZyaWVuZGx5RXJyb3JGb3JtYXR0ZXIgfSBmcm9tICcuL3V0aWxzL2Vycm9ycyc7XG5cbi8qKlxuICogUnVudGltZSBDTEkgdGhhdCBwcm9wZXJseSBleHRlbmRzIFB1cmVub3dDbGkgdXNpbmcgdGhlIGV4dGVuc2libGUgYXJjaGl0ZWN0dXJlXG4gKlxuICogVGhpcyBpbXBsZW1lbnRhdGlvbiB1c2VzIHB1cmVub3cncyBFeHRlbnNpYmxlQ2xpQ29yZS5hZGRDb21tYW5kcygpIGFuZCBhZGRBY3Rpb25zKClcbiAqIHRvIGFkZCBydW50aW1lLXNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgd2hpbGUgcHJlc2VydmluZyBhbGwgZXhpc3RpbmcgcHVyZW5vdyBjb21tYW5kcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFB1cmVub3dSdW50aW1lQ2xpIGV4dGVuZHMgUHVyZW5vd0NsaSB7XG4gIHN0YXRpYyBkZWZhdWx0VG9vbE5hbWU6IHN0cmluZyA9ICdydW50aW1lJztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBJbml0aWFsaXplIHdpdGggcnVudGltZS1zcGVjaWZpYyBzdHJhdGVnaWVzXG4gICAgLy8gY29uc3Qgc3RyYXRlZ2llcyA9IG5ldyBTdHJhdGVneUNvbnRhaW5lcigpO1xuICAgIC8vXG4gICAgLy8gLy8gQWRkIHJ1bnRpbWUgZGVwbG95bWVudCBzdHJhdGVneSBmb3IgdGhyZWUtc3RhY2sgZGVwbG95bWVudFxuICAgIC8vIHN0cmF0ZWdpZXMuYWRkU3RyYXRlZ3kobmV3IFJ1bnRpbWVEZXBsb3ltZW50U3RyYXRlZ3koKSk7XG5cbiAgICBzdXBlcih2b2lkIDAgLypzdHJhdGVnaWVzKi8sIHtcbiAgICAgIHRvb2xOYW1lOiBQdXJlbm93Q2xpLmRlZmF1bHRUb29sTmFtZSxcbiAgICAgIHRpdGxlOiAnUnVudGltZSB0YXJnZXQgZnJhbWV3b3JrIGZvciBBV1MgTGFtYmRhJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnUnVudGltZSB0YXJnZXQgZnJhbWV3b3JrIGZvciBBV1MgTGFtYmRhJyxcbiAgICAgIGZhbGxiYWNrVmVyc2lvbjogJzAuMi4xMzUnLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jb21tYW5kcyA9IHB1cmVub3dDb21tYW5kQ29uZmlnKFB1cmVub3dSdW50aW1lQ2xpLmRlZmF1bHRUb29sTmFtZSk7XG5cbiAgICAvLyBJbml0aWFsaXplIHJ1bnRpbWUtd2ViIGV4dGVuc2lvbnNcbiAgICAvLyB0aGlzLnJ1bnRpbWVFeHRlbnNpb25zID0gbmV3IFJ1bnRpbWVXZWJDbGlFeHRlbnNpb25zKCk7XG5cbiAgICAvLyBBZGQgcnVudGltZS1zcGVjaWZpYyBjb21tYW5kcyB1c2luZyBleHRlbnNpYmxlIGFyY2hpdGVjdHVyZVxuICAgIC8vIEBub3RlOiBpcyBub3QgbmVjZXNzYXJ5LCB3ZSBleHBlY3QgdG8gcmVkZWZpbmUgZGVwbG95bWVudCBzdHJhdGVneSBvbmx5XG4gICAgLy8gdGhpcy5hZGRSdW50aW1lQ29tbWFuZHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgUHVyZW5vdy1zcGVjaWZpYyBjb250ZXh0IHdpdGggYWxsIHJlcXVpcmVkIHNlcnZpY2VzXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgY3JlYXRlQ29udGV4dDxUIGV4dGVuZHMgUHVyZW5vd0NsaUNvbnRleHQgPSBQdXJlbm93UnVudGltZUNsaUNvbnRleHQ+KFxuICAgIGdsb2JhbE9wdHM6IEdsb2JhbE9wdGlvbnMsIGN3ZDogc3RyaW5nID0gcHJvY2Vzcy5jd2QoKSxcbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgcHVyZW5vd0NvbnRleHQgPVxuICAgICAgYXdhaXQgc3VwZXIuY3JlYXRlQ29udGV4dDxQdXJlbm93Q2xpQ29udGV4dD4oZ2xvYmFsT3B0cywgY3dkKTtcblxuICAgIC8vIENyZWF0ZSBzdGFja3MgZGVwbG95bWVudCBzZXJ2aWNlXG4gICAgY29uc3Qgc3RhY2tzRGVwbG95U2VydmljZSA9IG5ldyBQdXJlbm93UnVudGltZVN0YWNrc0RlcGxveVNlcnZpY2UoY3dkKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5wdXJlbm93Q29udGV4dCxcbiAgICAgIHN0YWNrc0RlcGxveVNlcnZpY2UsXG4gICAgfSBhcyB1bmtub3duIGFzIFQ7XG4gIH1cblxuICAvKipcbiAgICogUnVuIHRoZSBDTEkgd2l0aCBwcm92aWRlZCBhcmd1bWVudHNcbiAgICovXG4gIGFzeW5jIHJ1bihhcmdzPzogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnByb2dyYW0ucGFyc2VBc3luYyhhcmdzIHx8IHByb2Nlc3MuYXJndik7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGVycm9ycyB3aXRoIHN0cnVjdHVyZWQgbG9nZ2luZyAobm8gZW1vamkpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGhhbmRsZUVycm9yKGVycm9yOiB1bmtub3duKTogbmV2ZXIge1xuICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBSdW50aW1lRnJpZW5kbHlFcnJvckZvcm1hdHRlcigpO1xuXG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZEVycm9yID0gZm9ybWF0dGVyLmZvcm1hdEVycm9yKGVycm9yLCAhIXByb2Nlc3MuZW52LkRFQlVHKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0dGVkRXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdVbmtub3duIGVycm9yOicsIFN0cmluZyhlcnJvcikpO1xuICAgIH1cbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgQ0xJIGluc3RhbmNlIHRoYXQgcHJvcGVybHkgZXh0ZW5kcyBwdXJlbm93XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSdW50aW1lQ2xpKCk6IFB1cmVub3dSdW50aW1lQ2xpIHtcbiAgcmV0dXJuIG5ldyBQdXJlbm93UnVudGltZUNsaSgpO1xufVxuXG4vLyAvKipcbi8vICAqIE1haW4gQ0xJIGVudHJ5IHBvaW50IHVzaW5nIHByb3BlciBwdXJlbm93IGV4dGVuc2lvblxuLy8gICovXG4vLyBleHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbigpOiBQcm9taXNlPHZvaWQ+IHtcbi8vICAgdHJ5IHtcbi8vICAgICAvLyBDcmVhdGUgQ0xJIGluc3RhbmNlIHRoYXQgZXh0ZW5kcyBQdXJlbm93Q2xpXG4vLyAgICAgY29uc3QgY2xpID0gY3JlYXRlUnVudGltZUNsaSgpO1xuLy9cbi8vICAgICAvLyBQYXJzZSBhbmQgZXhlY3V0ZSBDTEkgY29tbWFuZHNcbi8vICAgICBhd2FpdCBjbGkucnVuKCk7XG4vLyAgIH0gY2F0Y2ggKGVycm9yKSB7XG4vLyAgICAgUHVyZW5vd1J1bnRpbWVDbGkuaGFuZGxlRXJyb3IoZXJyb3IpO1xuLy8gICB9XG4vLyB9XG5cbi8vIFJ1biBDTEkgaWYgdGhpcyBmaWxlIGlzIGV4ZWN1dGVkIGRpcmVjdGx5XG4vLyBpZiAocmVxdWlyZS5tYWluID09PSBtb2R1bGUpIHtcbi8vICAgbWFpbigpLmNhdGNoKFB1cmVub3dSdW50aW1lQ2xpLmhhbmRsZUVycm9yKTtcbi8vIH1cbiJdLAogICJtYXBwaW5ncyI6ICI7d29CQUFBLElBQUFBLEdBQUFDLEVBQUEsQ0FBQUMsR0FBQUMsS0FBQSxjQUVBQSxHQUFPLFFBQVUsQ0FDaEIsVUFBYSxDQUFDLElBQUssSUFBSyxHQUFHLEVBQzNCLGFBQWdCLENBQUMsSUFBSyxJQUFLLEdBQUcsRUFDOUIsS0FBUSxDQUFDLEVBQUcsSUFBSyxHQUFHLEVBQ3BCLFdBQWMsQ0FBQyxJQUFLLElBQUssR0FBRyxFQUM1QixNQUFTLENBQUMsSUFBSyxJQUFLLEdBQUcsRUFDdkIsTUFBUyxDQUFDLElBQUssSUFBSyxHQUFHLEVBQ3ZCLE9BQVUsQ0FBQyxJQUFLLElBQUssR0FBRyxFQUN4QixNQUFTLENBQUMsRUFBRyxFQUFHLENBQUMsRUFDakIsZUFBa0IsQ0FBQyxJQUFLLElBQUssR0FBRyxFQUNoQyxLQUFRLENBQUMsRUFBRyxFQUFHLEdBQUcsRUFDbEIsV0FBYyxDQUFDLElBQUssR0FBSSxHQUFHLEVBQzNCLE1BQVMsQ0FBQyxJQUFLLEdBQUksRUFBRSxFQUNyQixVQUFhLENBQUMsSUFBSyxJQUFLLEdBQUcsRUFDM0IsVUFBYSxDQUFDLEdBQUksSUFBSyxHQUFHLEVBQzFCLFdBQWMsQ0FBQyxJQUFLLElBQUssQ0FBQyxFQUMxQixVQUFhLENBQUMsSUFBSyxJQUFLLEVBQUUsRUFDMUIsTUFBUyxDQUFDLElBQUssSUFBSyxFQUFFLEVBQ3RCLGVBQWtCLENBQUMsSUFBSyxJQUFLLEdBQUcsRUFDaEMsU0FBWSxDQUFDLElBQUssSUFBSyxHQUFHLEVBQzFCLFFBQVcsQ0FBQyxJQUFLLEdBQUksRUFBRSxFQUN2QixLQUFRLENBQUMsRUFBRyxJQUFLLEdBQUcsRUFDcEIsU0FBWSxDQUFDLEVBQUcsRUFBRyxHQUFHLEVBQ3RCLFNBQVksQ0FBQyxFQUFHLElBQUssR0FBRyxFQUN4QixjQUFpQixDQUFDLElBQUssSUFBSyxFQUFFLEVBQzlC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QUFPLEVBQzlELEVBQUFHLFFBQVEsSUFBSSxPQUNkLFFBQVEsTUFBTUgsRUFBTSxLQUFLLEVBRTNCLEVBQUFHLFFBQVEsS0FBSyxDQUFDLENBQ2hCLENBQUMsRUFFRCxFQUFBQSxRQUFRLEdBQUcscUJBQXVCRSxHQUFnQixDQUNoRCxRQUFRLE1BQU1SLEdBQU0sSUFBSSxRQUFHLEVBQUcsdUJBQXdCUSxDQUFNLEVBQ3hELEVBQUFGLFFBQVEsSUFBSSxPQUFTRSxhQUFrQixPQUN6QyxRQUFRLE1BQU1BLEVBQU8sS0FBSyxFQUU1QixFQUFBRixRQUFRLEtBQUssQ0FBQyxDQUNoQixDQUFDLENBQ0gsQ0FHQUMsR0FBeUIsRUFJekJOLEdBQUssRUFBRSxNQUFPRSxHQUFVLENBQ3RCLFFBQVEsTUFBTUgsR0FBTSxJQUFJLFFBQUcsRUFBRyxlQUFnQkcsRUFBTSxPQUFPLEVBQ3ZELEVBQUFHLFFBQVEsSUFBSSxPQUNkLFFBQVEsTUFBTUgsRUFBTSxLQUFLLEVBRTNCLEVBQUFHLFFBQVEsS0FBSyxDQUFDLENBQ2hCLENBQUMiLAogICJuYW1lcyI6IFsicmVxdWlyZV9jb2xvcl9uYW1lIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9jb252ZXJzaW9ucyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImNzc0tleXdvcmRzIiwgInJldmVyc2VLZXl3b3JkcyIsICJrZXkiLCAiY29udmVydCIsICJtb2RlbCIsICJjaGFubmVscyIsICJsYWJlbHMiLCAicmdiIiwgInIiLCAiZyIsICJiIiwgIm1pbiIsICJtYXgiLCAiZGVsdGEiLCAiaCIsICJzIiwgImwiLCAicmRpZiIsICJnZGlmIiwgImJkaWYiLCAiZGlmZiIsICJkaWZmYyIsICJjIiwgInciLCAiayIsICJtIiwgInkiLCAiY29tcGFyYXRpdmVEaXN0YW5jZSIsICJ4IiwgInJldmVyc2VkIiwgImN1cnJlbnRDbG9zZXN0RGlzdGFuY2UiLCAiY3VycmVudENsb3Nlc3RLZXl3b3JkIiwgImtleXdvcmQiLCAidmFsdWUiLCAiZGlzdGFuY2UiLCAieiIsICJ4eXoiLCAiYSIsICJoc2wiLCAidDIiLCAidDMiLCAidmFsIiwgInQxIiwgImkiLCAic21pbiIsICJsbWluIiwgInYiLCAic3YiLCAiaHN2IiwgImhpIiwgImYiLCAicCIsICJxIiwgInQiLCAidm1pbiIsICJzbCIsICJod2IiLCAid2giLCAiYmwiLCAicmF0aW8iLCAibiIsICJjbXlrIiwgImxhYiIsICJ5MiIsICJ4MiIsICJ6MiIsICJsY2giLCAiaHIiLCAiYXJncyIsICJzYXR1cmF0aW9uIiwgImFuc2kiLCAiY29sb3IiLCAibXVsdCIsICJyZW0iLCAic3RyaW5nIiwgIm1hdGNoIiwgImNvbG9yU3RyaW5nIiwgImNoYXIiLCAiaW50ZWdlciIsICJjaHJvbWEiLCAiZ3JheXNjYWxlIiwgImh1ZSIsICJoY2ciLCAicHVyZSIsICJtZyIsICJhcHBsZSIsICJncmF5IiwgInJlcXVpcmVfcm91dGUiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb252ZXJzaW9ucyIsICJidWlsZEdyYXBoIiwgImdyYXBoIiwgIm1vZGVscyIsICJsZW4iLCAiaSIsICJkZXJpdmVCRlMiLCAiZnJvbU1vZGVsIiwgInF1ZXVlIiwgImN1cnJlbnQiLCAiYWRqYWNlbnRzIiwgImFkamFjZW50IiwgIm5vZGUiLCAibGluayIsICJmcm9tIiwgInRvIiwgImFyZ3MiLCAid3JhcENvbnZlcnNpb24iLCAidG9Nb2RlbCIsICJwYXRoIiwgImZuIiwgImN1ciIsICJjb252ZXJzaW9uIiwgInJlcXVpcmVfY29sb3JfY29udmVydCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImNvbnZlcnNpb25zIiwgInJvdXRlIiwgImNvbnZlcnQiLCAibW9kZWxzIiwgIndyYXBSYXciLCAiZm4iLCAid3JhcHBlZEZuIiwgImFyZ3MiLCAiYXJnMCIsICJ3cmFwUm91bmRlZCIsICJyZXN1bHQiLCAibGVuIiwgImkiLCAiZnJvbU1vZGVsIiwgInJvdXRlcyIsICJ0b01vZGVsIiwgInJlcXVpcmVfYW5zaV9zdHlsZXMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ3cmFwQW5zaTE2IiwgImZuIiwgIm9mZnNldCIsICJhcmdzIiwgIndyYXBBbnNpMjU2IiwgImNvZGUiLCAid3JhcEFuc2kxNm0iLCAicmdiIiwgImFuc2kyYW5zaSIsICJuIiwgInJnYjJyZ2IiLCAiciIsICJnIiwgImIiLCAic2V0TGF6eVByb3BlcnR5IiwgIm9iamVjdCIsICJwcm9wZXJ0eSIsICJnZXQiLCAidmFsdWUiLCAiY29sb3JDb252ZXJ0IiwgIm1ha2VEeW5hbWljU3R5bGVzIiwgIndyYXAiLCAidGFyZ2V0U3BhY2UiLCAiaWRlbnRpdHkiLCAiaXNCYWNrZ3JvdW5kIiwgInN0eWxlcyIsICJzb3VyY2VTcGFjZSIsICJzdWl0ZSIsICJuYW1lIiwgImFzc2VtYmxlU3R5bGVzIiwgImNvZGVzIiwgImdyb3VwTmFtZSIsICJncm91cCIsICJzdHlsZU5hbWUiLCAic3R5bGUiLCAicmVxdWlyZV9oYXNfZmxhZyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZsYWciLCAiYXJndiIsICJwcmVmaXgiLCAicG9zaXRpb24iLCAidGVybWluYXRvclBvc2l0aW9uIiwgInJlcXVpcmVfc3VwcG9ydHNfY29sb3IiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJvcyIsICJ0dHkiLCAiaGFzRmxhZyIsICJlbnYiLCAiZm9yY2VDb2xvciIsICJ0cmFuc2xhdGVMZXZlbCIsICJsZXZlbCIsICJzdXBwb3J0c0NvbG9yIiwgImhhdmVTdHJlYW0iLCAic3RyZWFtSXNUVFkiLCAibWluIiwgIm9zUmVsZWFzZSIsICJzaWduIiwgInZlcnNpb24iLCAiZ2V0U3VwcG9ydExldmVsIiwgInN0cmVhbSIsICJyZXF1aXJlX3V0aWwiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJzdHJpbmdSZXBsYWNlQWxsIiwgInN0cmluZyIsICJzdWJzdHJpbmciLCAicmVwbGFjZXIiLCAiaW5kZXgiLCAic3Vic3RyaW5nTGVuZ3RoIiwgImVuZEluZGV4IiwgInJldHVyblZhbHVlIiwgInN0cmluZ0VuY2FzZUNSTEZXaXRoRmlyc3RJbmRleCIsICJwcmVmaXgiLCAicG9zdGZpeCIsICJnb3RDUiIsICJyZXF1aXJlX3RlbXBsYXRlcyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlRFTVBMQVRFX1JFR0VYIiwgIlNUWUxFX1JFR0VYIiwgIlNUUklOR19SRUdFWCIsICJFU0NBUEVfUkVHRVgiLCAiRVNDQVBFUyIsICJ1bmVzY2FwZSIsICJjIiwgInUiLCAiYnJhY2tldCIsICJwYXJzZUFyZ3VtZW50cyIsICJuYW1lIiwgImFyZ3VtZW50c18iLCAicmVzdWx0cyIsICJjaHVua3MiLCAibWF0Y2hlcyIsICJjaHVuayIsICJudW1iZXIiLCAibSIsICJlc2NhcGUiLCAiY2hhcmFjdGVyIiwgInBhcnNlU3R5bGUiLCAic3R5bGUiLCAiYXJncyIsICJidWlsZFN0eWxlIiwgImNoYWxrIiwgInN0eWxlcyIsICJlbmFibGVkIiwgImxheWVyIiwgImN1cnJlbnQiLCAic3R5bGVOYW1lIiwgInRlbXBvcmFyeSIsICJlc2NhcGVDaGFyYWN0ZXIiLCAiaW52ZXJzZSIsICJjbG9zZSIsICJzdHJpbmciLCAiZXJyTWVzc2FnZSIsICJyZXF1aXJlX3NvdXJjZSIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImFuc2lTdHlsZXMiLCAic3Rkb3V0Q29sb3IiLCAic3RkZXJyQ29sb3IiLCAic3RyaW5nUmVwbGFjZUFsbCIsICJzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXgiLCAiaXNBcnJheSIsICJsZXZlbE1hcHBpbmciLCAic3R5bGVzIiwgImFwcGx5T3B0aW9ucyIsICJvYmplY3QiLCAib3B0aW9ucyIsICJjb2xvckxldmVsIiwgIkNoYWxrQ2xhc3MiLCAiY2hhbGtGYWN0b3J5IiwgImNoYWxrIiwgImFyZ3VtZW50c18iLCAiY2hhbGtUYWciLCAiQ2hhbGsiLCAic3R5bGVOYW1lIiwgInN0eWxlIiwgImJ1aWxkZXIiLCAiY3JlYXRlQnVpbGRlciIsICJjcmVhdGVTdHlsZXIiLCAidXNlZE1vZGVscyIsICJtb2RlbCIsICJsZXZlbCIsICJzdHlsZXIiLCAiYmdNb2RlbCIsICJwcm90byIsICJvcGVuIiwgImNsb3NlIiwgInBhcmVudCIsICJvcGVuQWxsIiwgImNsb3NlQWxsIiwgInNlbGYiLCAiX3N0eWxlciIsICJfaXNFbXB0eSIsICJhcHBseVN0eWxlIiwgInN0cmluZyIsICJsZkluZGV4IiwgInRlbXBsYXRlIiwgInN0cmluZ3MiLCAiZmlyc3RTdHJpbmciLCAicGFydHMiLCAicmVxdWlyZV9SZWZsZWN0IiwgIl9fY29tbW9uSlNNaW4iLCAiUmVmbGVjdCIsICJmYWN0b3J5IiwgInJvb3QiLCAic2xvcHB5TW9kZVRoaXMiLCAiZXhwb3J0ZXIiLCAibWFrZUV4cG9ydGVyIiwgInRhcmdldCIsICJwcmV2aW91cyIsICJrZXkiLCAidmFsdWUiLCAiZnVuY3Rpb25UaGlzIiwgImluZGlyZWN0RXZhbFRoaXMiLCAiaGFzT3duIiwgInN1cHBvcnRzU3ltYm9sIiwgInRvUHJpbWl0aXZlU3ltYm9sIiwgIml0ZXJhdG9yU3ltYm9sIiwgInN1cHBvcnRzQ3JlYXRlIiwgInN1cHBvcnRzUHJvdG8iLCAiZG93bkxldmVsIiwgIkhhc2hNYXAiLCAiTWFrZURpY3Rpb25hcnkiLCAibWFwIiwgImZ1bmN0aW9uUHJvdG90eXBlIiwgIl9NYXAiLCAiQ3JlYXRlTWFwUG9seWZpbGwiLCAiX1NldCIsICJDcmVhdGVTZXRQb2x5ZmlsbCIsICJfV2Vha01hcCIsICJDcmVhdGVXZWFrTWFwUG9seWZpbGwiLCAicmVnaXN0cnlTeW1ib2wiLCAibWV0YWRhdGFSZWdpc3RyeSIsICJHZXRPckNyZWF0ZU1ldGFkYXRhUmVnaXN0cnkiLCAibWV0YWRhdGFQcm92aWRlciIsICJDcmVhdGVNZXRhZGF0YVByb3ZpZGVyIiwgImRlY29yYXRlIiwgImRlY29yYXRvcnMiLCAicHJvcGVydHlLZXkiLCAiYXR0cmlidXRlcyIsICJJc1VuZGVmaW5lZCIsICJJc0FycmF5IiwgIklzQ29uc3RydWN0b3IiLCAiRGVjb3JhdGVDb25zdHJ1Y3RvciIsICJJc09iamVjdCIsICJJc051bGwiLCAiVG9Qcm9wZXJ0eUtleSIsICJEZWNvcmF0ZVByb3BlcnR5IiwgIm1ldGFkYXRhIiwgIm1ldGFkYXRhS2V5IiwgIm1ldGFkYXRhVmFsdWUiLCAiZGVjb3JhdG9yIiwgIklzUHJvcGVydHlLZXkiLCAiT3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSIsICJkZWZpbmVNZXRhZGF0YSIsICJoYXNNZXRhZGF0YSIsICJPcmRpbmFyeUhhc01ldGFkYXRhIiwgImhhc093bk1ldGFkYXRhIiwgIk9yZGluYXJ5SGFzT3duTWV0YWRhdGEiLCAiZ2V0TWV0YWRhdGEiLCAiT3JkaW5hcnlHZXRNZXRhZGF0YSIsICJnZXRPd25NZXRhZGF0YSIsICJPcmRpbmFyeUdldE93bk1ldGFkYXRhIiwgImdldE1ldGFkYXRhS2V5cyIsICJPcmRpbmFyeU1ldGFkYXRhS2V5cyIsICJnZXRPd25NZXRhZGF0YUtleXMiLCAiT3JkaW5hcnlPd25NZXRhZGF0YUtleXMiLCAiZGVsZXRlTWV0YWRhdGEiLCAicHJvdmlkZXIiLCAiR2V0TWV0YWRhdGFQcm92aWRlciIsICJpIiwgImRlY29yYXRlZCIsICJkZXNjcmlwdG9yIiwgIk1ldGFkYXRhS2V5IiwgIk8iLCAiUCIsICJwYXJlbnQiLCAiT3JkaW5hcnlHZXRQcm90b3R5cGVPZiIsICJUb0Jvb2xlYW4iLCAiTWV0YWRhdGFWYWx1ZSIsICJvd25LZXlzIiwgInBhcmVudEtleXMiLCAic2V0IiwgImtleXMiLCAiX2kiLCAib3duS2V5c18xIiwgImhhc0tleSIsICJfYSIsICJwYXJlbnRLZXlzXzEiLCAiVHlwZSIsICJ4IiwgIklzU3ltYm9sIiwgIlRvUHJpbWl0aXZlIiwgImlucHV0IiwgIlByZWZlcnJlZFR5cGUiLCAiaGludCIsICJleG90aWNUb1ByaW0iLCAiR2V0TWV0aG9kIiwgInJlc3VsdCIsICJPcmRpbmFyeVRvUHJpbWl0aXZlIiwgInRvU3RyaW5nXzEiLCAiSXNDYWxsYWJsZSIsICJ2YWx1ZU9mIiwgInRvU3RyaW5nXzIiLCAiYXJndW1lbnQiLCAiVG9TdHJpbmciLCAiU2FtZVZhbHVlWmVybyIsICJ5IiwgIlYiLCAiZnVuYyIsICJHZXRJdGVyYXRvciIsICJvYmoiLCAibWV0aG9kIiwgIml0ZXJhdG9yIiwgIkl0ZXJhdG9yVmFsdWUiLCAiaXRlclJlc3VsdCIsICJJdGVyYXRvclN0ZXAiLCAiSXRlcmF0b3JDbG9zZSIsICJmIiwgInByb3RvIiwgInByb3RvdHlwZSIsICJwcm90b3R5cGVQcm90byIsICJjb25zdHJ1Y3RvciIsICJDcmVhdGVNZXRhZGF0YVJlZ2lzdHJ5IiwgImZhbGxiYWNrIiwgIkNyZWF0ZUZhbGxiYWNrUHJvdmlkZXIiLCAiZmlyc3QiLCAic2Vjb25kIiwgInJlc3QiLCAidGFyZ2V0UHJvdmlkZXJNYXAiLCAicmVnaXN0cnkiLCAicmVnaXN0ZXJQcm92aWRlciIsICJnZXRQcm92aWRlciIsICJzZXRQcm92aWRlciIsICJnZXRQcm92aWRlck5vQ2FjaGUiLCAibmV4dCIsICJwcm92aWRlck1hcCIsICJoYXNQcm92aWRlciIsICJleGlzdGluZ1Byb3ZpZGVyIiwgInRhcmdldE1ldGFkYXRhIiwgIk9yZGluYXJ5RGVsZXRlTWV0YWRhdGEiLCAiR2V0T3JDcmVhdGVNZXRhZGF0YU1hcCIsICJDcmVhdGUiLCAiY3JlYXRlZFRhcmdldE1ldGFkYXRhIiwgIm1ldGFkYXRhTWFwIiwgImtleXNPYmoiLCAiayIsICJuZXh0VmFsdWUiLCAiZSIsICJyZWZsZWN0IiwgIm1ldGFkYXRhT3duZXIiLCAibWV0YWRhdGFQcm9wZXJ0eVNldCIsICJyZWdpc3RlcmVkUHJvdmlkZXIiLCAiY2FjaGVTZW50aW5lbCIsICJhcnJheVNlbnRpbmVsIiwgIk1hcEl0ZXJhdG9yIiwgInZhbHVlcyIsICJzZWxlY3RvciIsICJpbmRleCIsICJlcnJvciIsICJNYXAiLCAic2l6ZSIsICJnZXRLZXkiLCAiZ2V0VmFsdWUiLCAiZ2V0RW50cnkiLCAiaW5zZXJ0IiwgIl8iLCAiU2V0IiwgIlVVSURfU0laRSIsICJyb290S2V5IiwgIkNyZWF0ZVVuaXF1ZUtleSIsICJXZWFrTWFwIiwgInRhYmxlIiwgIkdldE9yQ3JlYXRlV2Vha01hcFRhYmxlIiwgIkNyZWF0ZVVVSUQiLCAiY3JlYXRlIiwgIkZpbGxSYW5kb21CeXRlcyIsICJidWZmZXIiLCAiR2VuUmFuZG9tQnl0ZXMiLCAiYXJyYXkiLCAiZGF0YSIsICJvZmZzZXQiLCAiYnl0ZSIsICJpbmRleF91bml4X2V4cG9ydHMiLCAiX19leHBvcnQiLCAibWFpbiIsICJfX3RvQ29tbW9uSlMiLCAiZnMiLCAicGF0aCIsICJpbXBvcnRfaW5mcmEiLCAiaW1wb3J0X2JpbiIsICJUZW1wbGF0ZVNlcnZpY2UiLCAiY3dkIiwgInBvc3NpYmxlUGF0aHMiLCAiZm91bmRQYXRoIiwgInAiLCAidGVtcGxhdGVOYW1lIiwgInRhcmdldERpciIsICJvcHRpb25zIiwgImNvcmVEaXIiLCAidGVtcGxhdGVQYXRoIiwgInJlc29sdmVkVGFyZ2V0RGlyIiwgImNvbnRleHQiLCAicHJvamVjdE5hbWUiLCAiY29uZmlnQ29udGVudCIsICJjb25maWdQYXRoIiwgInRzY29uZmlnQ29udGVudCIsICJ0c2NvbmZpZ1BhdGgiLCAiZm9yY2UiLCAiY2RrRGlyIiwgInNvdXJjZVBhdGgiLCAidGFyZ2V0UGF0aCIsICJlbnRyaWVzIiwgImVudHJ5IiwgInNvdXJjZUZpbGUiLCAidGFyZ2V0RmlsZU5hbWUiLCAidGFyZ2V0RmlsZSIsICJjb250ZW50IiwgInJlc3VsdCIsICJrZXkiLCAidmFsdWUiLCAicmVnZXgiLCAiZmluYWxWYWx1ZSIsICJmcyIsICJpbXBvcnRfaW5mcmEiLCAiaW1wb3J0X2JpbiIsICJQdXJlbm93UnVudGltZVN0YWNrc0RlcGxveVNlcnZpY2UiLCAiY3dkIiwgIm9wdGlvbnMiLCAic3RhcnRUaW1lIiwgInN0YWdlIiwgImNvbmZpZyIsICJpbmZyYVN0YWNrTmFtZSIsICJydW50aW1lU3RhY2tOYW1lIiwgInJ1bnRpbWVXZWJTdGFja05hbWUiLCAicyIsICJpbmZyYVJlc3VsdCIsICJydW50aW1lUmVzdWx0IiwgInJ1bnRpbWVXZWJSZXN1bHQiLCAiZHVyYXRpb24iLCAic3RhY2tOYW1lIiwgIm91dHB1dHNQYXRoIiwgIm91dHB1dHMiLCAib3V0cHV0c0ZpbGVDb250ZW50IiwgInN0YWNrT3V0cHV0cyIsICJrZXkiLCAibGFtYmRhTWF0Y2giLCAiZXJyb3IiLCAicmVnaW9uIiwgInBhcnQiLCAibmFtZSIsICJzZXJ2aWNlTmFtZSIsICJyZWdpb25TaW1wbGlmaWVkIiwgImltcG9ydF9yZWZsZWN0X21ldGFkYXRhIiwgImltcG9ydF9wYXRoIiwgImltcG9ydF9mcyIsICJNQVhfVEVNUExBVEVfU0laRV9CWVRFUyIsICJMQU1CREFfQlVORExFX1NJWkVfTElNSVQiLCAiVEVNUExBVEVfU0laRV9XQVJOSU5HX1RIUkVTSE9MRCIsICJsb2FkVGVtcGxhdGUiLCAicHJvamVjdFJvb3QiLCAidGVtcGxhdGVQYXRoIiwgInBhdGgiLCAidXNlRmFsbGJhY2siLCAiZnMiLCAiZ2V0RGVmYXVsdFRlbXBsYXRlIiwgImNvbnRlbnQiLCAidmFsaWRhdGVUZW1wbGF0ZVNpemUiLCAidmFsaWRhdGVUZW1wbGF0ZSIsICJodG1sIiwgInNpemVCeXRlcyIsICJzaXplTUIiLCAibWF4U2l6ZU1CIiwgIndhcm5pbmdUaHJlc2hvbGRNQiIsICJtaXNzaW5nVGFncyIsICJ2YWxpZGF0ZUJ1bmRsZVNpemUiLCAiZW1iZWRkZWRGaWxlUGF0aCIsICJlbWJlZGRlZEZpbGVTaXplIiwgImVtYmVkZGVkRmlsZVNpemVNQiIsICJsYW1iZGFCdW5kbGVQYXRoIiwgImJ1bmRsZVNpemUiLCAiYnVuZGxlU2l6ZU1CIiwgImdlbmVyYXRlRW1iZWRkZWRUZW1wbGF0ZUZpbGUiLCAidGVtcGxhdGUiLCAiZmlsZUNvbnRlbnQiLCAib3V0cHV0UGF0aCIsICJvdXRwdXREaXIiLCAidGVtcGxhdGVTaXplS0IiLCAiYnVpbGRTdGF0aWNIdG1sIiwgInNob3VsZEV4aXQiLCAiZXJyb3IiLCAiUnVudGltZUNsaUVycm9yIiwgIm1lc3NhZ2UiLCAiY29kZSIsICJoaW50IiwgIlJ1bnRpbWVDb25maWdFcnJvciIsICJSdW50aW1lQnVpbGRFcnJvciIsICJSdW50aW1lRGVwbG95bWVudEVycm9yIiwgIlJ1bnRpbWVWYWxpZGF0aW9uRXJyb3IiLCAiUnVudGltZUZyaWVuZGx5RXJyb3JGb3JtYXR0ZXIiLCAiZXJyb3IiLCAidmVyYm9zZSIsICJsaW5lcyIsICJmaWVsZE5hbWUiLCAic3RhY2tOYW1lIiwgIm9wZXJhdGlvbiIsICJSdW50aW1lU3RydWN0dXJlZExvZ2dlciIsICJtZXRhZGF0YSIsICJsb2dFbnRyeSIsICJpbXBvcnRfcmVmbGVjdF9tZXRhZGF0YSIsICJpbXBvcnRfcHJvY2VzcyIsICJpbXBvcnRfYmluIiwgIlB1cmVub3dSdW50aW1lQ2xpIiwgIl9QdXJlbm93UnVudGltZUNsaSIsICJnbG9iYWxPcHRzIiwgImN3ZCIsICJwcm9jZXNzIiwgInB1cmVub3dDb250ZXh0IiwgInN0YWNrc0RlcGxveVNlcnZpY2UiLCAiUHVyZW5vd1J1bnRpbWVTdGFja3NEZXBsb3lTZXJ2aWNlIiwgImFyZ3MiLCAiZXJyb3IiLCAiZm9ybWF0dGVyIiwgIlJ1bnRpbWVGcmllbmRseUVycm9yRm9ybWF0dGVyIiwgImZvcm1hdHRlZEVycm9yIiwgImNyZWF0ZVJ1bnRpbWVDbGkiLCAiaW1wb3J0X3Byb2Nlc3MiLCAiY2hhbGsiLCAibWFpbiIsICJjcmVhdGVSdW50aW1lQ2xpIiwgImVycm9yIiwgIlB1cmVub3dSdW50aW1lQ2xpIiwgImhhbmRsZUVycm9yIiwgInByb2Nlc3MiLCAic2V0dXBHbG9iYWxFcnJvckhhbmRsZXJzIiwgInJlYXNvbiJdCn0K
|