country-flag-cli 0.0.19 → 0.0.23

Sign up to get free protection for your applications and to get access to all the features.
package/dist/cli.js CHANGED
@@ -1,36 +1,39 @@
1
1
  #!/usr/bin/env node
2
- var Rd=Object.create;var fi=Object.defineProperty;var Ad=Object.getOwnPropertyDescriptor;var Pd=Object.getOwnPropertyNames;var qd=Object.getPrototypeOf,Nd=Object.prototype.hasOwnProperty;var Md=t=>fi(t,"__esModule",{value:!0});var b=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var kd=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Pd(e))!Nd.call(t,i)&&(r||i!=="default")&&fi(t,i,{get:()=>e[i],enumerable:!(n=Ad(e,i))||n.enumerable});return t},li=(t,e)=>kd(Md(fi(t!=null?Rd(qd(t)):{},"default",!e&&t&&t.__esModule?{get:()=>t.default,enumerable:!0}:{value:t,enumerable:!0})),t);var gs=b((jr,vs)=>{var Dd=require("events").EventEmitter,di=require("child_process").spawn,Dr=require("path"),Fd=Dr.dirname,ds=Dr.basename,ps=require("fs");require("util").inherits(j,Dd);jr=vs.exports=new j;jr.Command=j;jr.Option=Nt;function Nt(t,e){this.flags=t,this.required=t.indexOf("<")>=0,this.optional=t.indexOf("[")>=0,this.bool=t.indexOf("-no-")===-1,t=t.split(/[ ,|]+/),t.length>1&&!/^[[<]/.test(t[1])&&(this.short=t.shift()),this.long=t.shift(),this.description=e||""}Nt.prototype.name=function(){return this.long.replace("--","").replace("no-","")};Nt.prototype.attributeName=function(){return jd(this.name())};Nt.prototype.is=function(t){return this.short===t||this.long===t};function j(t){this.commands=[],this.options=[],this._execs={},this._allowUnknownOption=!1,this._args=[],this._name=t||""}j.prototype.command=function(t,e,r){typeof e=="object"&&e!==null&&(r=e,e=null),r=r||{};var n=t.split(/ +/),i=new j(n.shift());return e&&(i.description(e),this.executables=!0,this._execs[i._name]=!0,r.isDefault&&(this.defaultExecutable=i._name)),i._noHelp=!!r.noHelp,this.commands.push(i),i.parseExpectedArgs(n),i.parent=this,e?this:i};j.prototype.arguments=function(t){return this.parseExpectedArgs(t.split(/ +/))};j.prototype.addImplicitHelpCommand=function(){this.command("help [cmd]","display help for [cmd]")};j.prototype.parseExpectedArgs=function(t){if(!!t.length){var e=this;return t.forEach(function(r){var n={required:!1,name:"",variadic:!1};switch(r[0]){case"<":n.required=!0,n.name=r.slice(1,-1);break;case"[":n.name=r.slice(1,-1);break}n.name.length>3&&n.name.slice(-3)==="..."&&(n.variadic=!0,n.name=n.name.slice(0,-3)),n.name&&e._args.push(n)}),this}};j.prototype.action=function(t){var e=this,r=function(o,a){o=o||[],a=a||[];var s=e.parseOptions(a);hs(e,s.unknown),s.unknown.length>0&&e.unknownOption(s.unknown[0]),s.args.length&&(o=s.args.concat(o)),e._args.forEach(function(u,c){u.required&&o[c]==null?e.missingArgument(u.name):u.variadic&&(c!==e._args.length-1&&e.variadicArgNotLast(u.name),o[c]=o.splice(c))}),e._args.length?o[e._args.length]=e:o.push(e),t.apply(e,o)},n=this.parent||this,i=n===this?"*":this._name;return n.on("command:"+i,r),this._alias&&n.on("command:"+this._alias,r),this};j.prototype.option=function(t,e,r,n){var i=this,o=new Nt(t,e),a=o.name(),s=o.attributeName();if(typeof r!="function")if(r instanceof RegExp){var u=r;r=function(c,l){var d=u.exec(c);return d?d[0]:l}}else n=r,r=null;return(!o.bool||o.optional||o.required)&&(o.bool||(n=!0),n!==void 0&&(i[s]=n,o.defaultValue=n)),this.options.push(o),this.on("option:"+a,function(c){c!==null&&r&&(c=r(c,i[s]===void 0?n:i[s])),typeof i[s]=="boolean"||typeof i[s]=="undefined"?c==null?i[s]=o.bool?n||!0:!1:i[s]=c:c!==null&&(i[s]=c)}),this};j.prototype.allowUnknownOption=function(t){return this._allowUnknownOption=arguments.length===0||t,this};j.prototype.parse=function(t){this.executables&&this.addImplicitHelpCommand(),this.rawArgs=t,this._name=this._name||ds(t[1],".js"),this.executables&&t.length<3&&!this.defaultExecutable&&t.push("--help");var e=this.parseOptions(this.normalize(t.slice(2))),r=this.args=e.args,n=this.parseArgs(this.args,e.unknown),i=n.args[0],o=null;return i&&(o=this.commands.filter(function(a){return a.alias()===i})[0]),this._execs[i]===!0?this.executeSubCommand(t,r,e.unknown):o?(r[0]=o._name,this.executeSubCommand(t,r,e.unknown)):this.defaultExecutable?(r.unshift(this.defaultExecutable),this.executeSubCommand(t,r,e.unknown)):n};j.prototype.executeSubCommand=function(t,e,r){e=e.concat(r),e.length||this.help(),e[0]==="help"&&e.length===1&&this.help(),e[0]==="help"&&(e[0]=e[1],e[1]="--help");var n=t[1],i=ds(n,Dr.extname(n))+"-"+e[0],o,a=ps.realpathSync(n);o=Fd(a);var s=Dr.join(o,i),u=!1;pi(s+".js")?(i=s+".js",u=!0):pi(s+".ts")?(i=s+".ts",u=!0):pi(s)&&(i=s),e=e.slice(1);var c;process.platform!=="win32"?u?(e.unshift(i),e=(process.execArgv||[]).concat(e),c=di(process.argv[0],e,{stdio:"inherit",customFds:[0,1,2]})):c=di(i,e,{stdio:"inherit",customFds:[0,1,2]}):(e.unshift(i),c=di(process.execPath,e,{stdio:"inherit"}));var l=["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"];l.forEach(function(d){process.on(d,function(){c.killed===!1&&c.exitCode===null&&c.kill(d)})}),c.on("close",process.exit.bind(process)),c.on("error",function(d){d.code==="ENOENT"?console.error("error: %s(1) does not exist, try --help",i):d.code==="EACCES"&&console.error("error: %s(1) not executable. try chmod or run with root",i),process.exit(1)}),this.runningCommand=c};j.prototype.normalize=function(t){for(var e=[],r,n,i,o=0,a=t.length;o<a;++o)if(r=t[o],o>0&&(n=this.optionFor(t[o-1])),r==="--"){e=e.concat(t.slice(o));break}else n&&n.required?e.push(r):r.length>1&&r[0]==="-"&&r[1]!=="-"?r.slice(1).split("").forEach(function(s){e.push("-"+s)}):/^--/.test(r)&&~(i=r.indexOf("="))?e.push(r.slice(0,i),r.slice(i+1)):e.push(r);return e};j.prototype.parseArgs=function(t,e){var r;return t.length?(r=t[0],this.listeners("command:"+r).length?this.emit("command:"+t.shift(),t,e):this.emit("command:*",t)):(hs(this,e),e.length>0&&this.unknownOption(e[0]),this.commands.length===0&&this._args.filter(function(n){return n.required}).length===0&&this.emit("command:*")),this};j.prototype.optionFor=function(t){for(var e=0,r=this.options.length;e<r;++e)if(this.options[e].is(t))return this.options[e]};j.prototype.parseOptions=function(t){for(var e=[],r=t.length,n,i,o,a=[],s=0;s<r;++s){if(o=t[s],n){e.push(o);continue}if(o==="--"){n=!0;continue}if(i=this.optionFor(o),i){if(i.required){if(o=t[++s],o==null)return this.optionMissingArgument(i);this.emit("option:"+i.name(),o)}else i.optional?(o=t[s+1],o==null||o[0]==="-"&&o!=="-"?o=null:++s,this.emit("option:"+i.name(),o)):this.emit("option:"+i.name());continue}if(o.length>1&&o[0]==="-"){a.push(o),s+1<t.length&&t[s+1][0]!=="-"&&a.push(t[++s]);continue}e.push(o)}return{args:e,unknown:a}};j.prototype.opts=function(){for(var t={},e=this.options.length,r=0;r<e;r++){var n=this.options[r].attributeName();t[n]=n===this._versionOptionName?this._version:this[n]}return t};j.prototype.missingArgument=function(t){console.error("error: missing required argument `%s'",t),process.exit(1)};j.prototype.optionMissingArgument=function(t,e){e?console.error("error: option `%s' argument missing, got `%s'",t.flags,e):console.error("error: option `%s' argument missing",t.flags),process.exit(1)};j.prototype.unknownOption=function(t){this._allowUnknownOption||(console.error("error: unknown option `%s'",t),process.exit(1))};j.prototype.variadicArgNotLast=function(t){console.error("error: variadic arguments must be last `%s'",t),process.exit(1)};j.prototype.version=function(t,e){if(arguments.length===0)return this._version;this._version=t,e=e||"-V, --version";var r=new Nt(e,"output the version number");return this._versionOptionName=r.long.substr(2)||"version",this.options.push(r),this.on("option:"+this._versionOptionName,function(){process.stdout.write(t+`
3
- `),process.exit(0)}),this};j.prototype.description=function(t,e){return arguments.length===0?this._description:(this._description=t,this._argsDescription=e,this)};j.prototype.alias=function(t){var e=this;if(this.commands.length!==0&&(e=this.commands[this.commands.length-1]),arguments.length===0)return e._alias;if(t===e._name)throw new Error("Command alias can't be the same as its name");return e._alias=t,this};j.prototype.usage=function(t){var e=this._args.map(function(n){return _s(n)}),r="[options]"+(this.commands.length?" [command]":"")+(this._args.length?" "+e.join(" "):"");return arguments.length===0?this._usage||r:(this._usage=t,this)};j.prototype.name=function(t){return arguments.length===0?this._name:(this._name=t,this)};j.prototype.prepareCommands=function(){return this.commands.filter(function(t){return!t._noHelp}).map(function(t){var e=t._args.map(function(r){return _s(r)}).join(" ");return[t._name+(t._alias?"|"+t._alias:"")+(t.options.length?" [options]":"")+(e?" "+e:""),t._description]})};j.prototype.largestCommandLength=function(){var t=this.prepareCommands();return t.reduce(function(e,r){return Math.max(e,r[0].length)},0)};j.prototype.largestOptionLength=function(){var t=[].slice.call(this.options);return t.push({flags:"-h, --help"}),t.reduce(function(e,r){return Math.max(e,r.flags.length)},0)};j.prototype.largestArgLength=function(){return this._args.reduce(function(t,e){return Math.max(t,e.name.length)},0)};j.prototype.padWidth=function(){var t=this.largestOptionLength();return this._argsDescription&&this._args.length&&this.largestArgLength()>t&&(t=this.largestArgLength()),this.commands&&this.commands.length&&this.largestCommandLength()>t&&(t=this.largestCommandLength()),t};j.prototype.optionHelp=function(){var t=this.padWidth();return this.options.map(function(e){return Fr(e.flags,t)+" "+e.description+(e.bool&&e.defaultValue!==void 0?" (default: "+JSON.stringify(e.defaultValue)+")":"")}).concat([Fr("-h, --help",t)+" output usage information"]).join(`
4
- `)};j.prototype.commandHelp=function(){if(!this.commands.length)return"";var t=this.prepareCommands(),e=this.padWidth();return["Commands:",t.map(function(r){var n=r[1]?" "+r[1]:"";return(n?Fr(r[0],e):r[0])+n}).join(`
2
+ var ch=Object.create;var Bi=Object.defineProperty;var lh=Object.getOwnPropertyDescriptor;var fh=Object.getOwnPropertyNames;var dh=Object.getPrototypeOf,ph=Object.prototype.hasOwnProperty;var hh=t=>Bi(t,"__esModule",{value:!0});var b=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var vh=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of fh(e))!ph.call(t,i)&&(r||i!=="default")&&Bi(t,i,{get:()=>e[i],enumerable:!(n=lh(e,i))||n.enumerable});return t},Gi=(t,e)=>vh(hh(Bi(t!=null?ch(dh(t)):{},"default",!e&&t&&t.__esModule?{get:()=>t.default,enumerable:!0}:{value:t,enumerable:!0})),t);var gu=b((fn,_u)=>{var _h=require("events").EventEmitter,zi=require("child_process").spawn,cn=require("path"),gh=cn.dirname,du=cn.basename,pu=require("fs");require("util").inherits(U,_h);fn=_u.exports=new U;fn.Command=U;fn.Option=Kt;function Kt(t,e){this.flags=t,this.required=t.indexOf("<")>=0,this.optional=t.indexOf("[")>=0,this.bool=t.indexOf("-no-")===-1,t=t.split(/[ ,|]+/),t.length>1&&!/^[[<]/.test(t[1])&&(this.short=t.shift()),this.long=t.shift(),this.description=e||""}Kt.prototype.name=function(){return this.long.replace("--","").replace("no-","")};Kt.prototype.attributeName=function(){return mh(this.name())};Kt.prototype.is=function(t){return this.short===t||this.long===t};function U(t){this.commands=[],this.options=[],this._execs={},this._allowUnknownOption=!1,this._args=[],this._name=t||""}U.prototype.command=function(t,e,r){typeof e=="object"&&e!==null&&(r=e,e=null),r=r||{};var n=t.split(/ +/),i=new U(n.shift());return e&&(i.description(e),this.executables=!0,this._execs[i._name]=!0,r.isDefault&&(this.defaultExecutable=i._name)),i._noHelp=!!r.noHelp,this.commands.push(i),i.parseExpectedArgs(n),i.parent=this,e?this:i};U.prototype.arguments=function(t){return this.parseExpectedArgs(t.split(/ +/))};U.prototype.addImplicitHelpCommand=function(){this.command("help [cmd]","display help for [cmd]")};U.prototype.parseExpectedArgs=function(t){if(!!t.length){var e=this;return t.forEach(function(r){var n={required:!1,name:"",variadic:!1};switch(r[0]){case"<":n.required=!0,n.name=r.slice(1,-1);break;case"[":n.name=r.slice(1,-1);break}n.name.length>3&&n.name.slice(-3)==="..."&&(n.variadic=!0,n.name=n.name.slice(0,-3)),n.name&&e._args.push(n)}),this}};U.prototype.action=function(t){var e=this,r=function(o,s){o=o||[],s=s||[];var a=e.parseOptions(s);hu(e,a.unknown),a.unknown.length>0&&e.unknownOption(a.unknown[0]),a.args.length&&(o=a.args.concat(o)),e._args.forEach(function(u,c){u.required&&o[c]==null?e.missingArgument(u.name):u.variadic&&(c!==e._args.length-1&&e.variadicArgNotLast(u.name),o[c]=o.splice(c))}),e._args.length?o[e._args.length]=e:o.push(e),t.apply(e,o)},n=this.parent||this,i=n===this?"*":this._name;return n.on("command:"+i,r),this._alias&&n.on("command:"+this._alias,r),this};U.prototype.option=function(t,e,r,n){var i=this,o=new Kt(t,e),s=o.name(),a=o.attributeName();if(typeof r!="function")if(r instanceof RegExp){var u=r;r=function(c,l){var d=u.exec(c);return d?d[0]:l}}else n=r,r=null;return(!o.bool||o.optional||o.required)&&(o.bool||(n=!0),n!==void 0&&(i[a]=n,o.defaultValue=n)),this.options.push(o),this.on("option:"+s,function(c){c!==null&&r&&(c=r(c,i[a]===void 0?n:i[a])),typeof i[a]=="boolean"||typeof i[a]=="undefined"?c==null?i[a]=o.bool?n||!0:!1:i[a]=c:c!==null&&(i[a]=c)}),this};U.prototype.allowUnknownOption=function(t){return this._allowUnknownOption=arguments.length===0||t,this};U.prototype.parse=function(t){this.executables&&this.addImplicitHelpCommand(),this.rawArgs=t,this._name=this._name||du(t[1],".js"),this.executables&&t.length<3&&!this.defaultExecutable&&t.push("--help");var e=this.parseOptions(this.normalize(t.slice(2))),r=this.args=e.args,n=this.parseArgs(this.args,e.unknown),i=n.args[0],o=null;return i&&(o=this.commands.filter(function(s){return s.alias()===i})[0]),this._execs[i]===!0?this.executeSubCommand(t,r,e.unknown):o?(r[0]=o._name,this.executeSubCommand(t,r,e.unknown)):this.defaultExecutable?(r.unshift(this.defaultExecutable),this.executeSubCommand(t,r,e.unknown)):n};U.prototype.executeSubCommand=function(t,e,r){e=e.concat(r),e.length||this.help(),e[0]==="help"&&e.length===1&&this.help(),e[0]==="help"&&(e[0]=e[1],e[1]="--help");var n=t[1],i=du(n,cn.extname(n))+"-"+e[0],o,s=pu.realpathSync(n);o=gh(s);var a=cn.join(o,i),u=!1;Vi(a+".js")?(i=a+".js",u=!0):Vi(a+".ts")?(i=a+".ts",u=!0):Vi(a)&&(i=a),e=e.slice(1);var c;process.platform!=="win32"?u?(e.unshift(i),e=(process.execArgv||[]).concat(e),c=zi(process.argv[0],e,{stdio:"inherit",customFds:[0,1,2]})):c=zi(i,e,{stdio:"inherit",customFds:[0,1,2]}):(e.unshift(i),c=zi(process.execPath,e,{stdio:"inherit"}));var l=["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"];l.forEach(function(d){process.on(d,function(){c.killed===!1&&c.exitCode===null&&c.kill(d)})}),c.on("close",process.exit.bind(process)),c.on("error",function(d){d.code==="ENOENT"?console.error("error: %s(1) does not exist, try --help",i):d.code==="EACCES"&&console.error("error: %s(1) not executable. try chmod or run with root",i),process.exit(1)}),this.runningCommand=c};U.prototype.normalize=function(t){for(var e=[],r,n,i,o=0,s=t.length;o<s;++o)if(r=t[o],o>0&&(n=this.optionFor(t[o-1])),r==="--"){e=e.concat(t.slice(o));break}else n&&n.required?e.push(r):r.length>1&&r[0]==="-"&&r[1]!=="-"?r.slice(1).split("").forEach(function(a){e.push("-"+a)}):/^--/.test(r)&&~(i=r.indexOf("="))?e.push(r.slice(0,i),r.slice(i+1)):e.push(r);return e};U.prototype.parseArgs=function(t,e){var r;return t.length?(r=t[0],this.listeners("command:"+r).length?this.emit("command:"+t.shift(),t,e):this.emit("command:*",t)):(hu(this,e),e.length>0&&this.unknownOption(e[0]),this.commands.length===0&&this._args.filter(function(n){return n.required}).length===0&&this.emit("command:*")),this};U.prototype.optionFor=function(t){for(var e=0,r=this.options.length;e<r;++e)if(this.options[e].is(t))return this.options[e]};U.prototype.parseOptions=function(t){for(var e=[],r=t.length,n,i,o,s=[],a=0;a<r;++a){if(o=t[a],n){e.push(o);continue}if(o==="--"){n=!0;continue}if(i=this.optionFor(o),i){if(i.required){if(o=t[++a],o==null)return this.optionMissingArgument(i);this.emit("option:"+i.name(),o)}else i.optional?(o=t[a+1],o==null||o[0]==="-"&&o!=="-"?o=null:++a,this.emit("option:"+i.name(),o)):this.emit("option:"+i.name());continue}if(o.length>1&&o[0]==="-"){s.push(o),a+1<t.length&&t[a+1][0]!=="-"&&s.push(t[++a]);continue}e.push(o)}return{args:e,unknown:s}};U.prototype.opts=function(){for(var t={},e=this.options.length,r=0;r<e;r++){var n=this.options[r].attributeName();t[n]=n===this._versionOptionName?this._version:this[n]}return t};U.prototype.missingArgument=function(t){console.error("error: missing required argument `%s'",t),process.exit(1)};U.prototype.optionMissingArgument=function(t,e){e?console.error("error: option `%s' argument missing, got `%s'",t.flags,e):console.error("error: option `%s' argument missing",t.flags),process.exit(1)};U.prototype.unknownOption=function(t){this._allowUnknownOption||(console.error("error: unknown option `%s'",t),process.exit(1))};U.prototype.variadicArgNotLast=function(t){console.error("error: variadic arguments must be last `%s'",t),process.exit(1)};U.prototype.version=function(t,e){if(arguments.length===0)return this._version;this._version=t,e=e||"-V, --version";var r=new Kt(e,"output the version number");return this._versionOptionName=r.long.substr(2)||"version",this.options.push(r),this.on("option:"+this._versionOptionName,function(){process.stdout.write(t+`
3
+ `),process.exit(0)}),this};U.prototype.description=function(t,e){return arguments.length===0?this._description:(this._description=t,this._argsDescription=e,this)};U.prototype.alias=function(t){var e=this;if(this.commands.length!==0&&(e=this.commands[this.commands.length-1]),arguments.length===0)return e._alias;if(t===e._name)throw new Error("Command alias can't be the same as its name");return e._alias=t,this};U.prototype.usage=function(t){var e=this._args.map(function(n){return vu(n)}),r="[options]"+(this.commands.length?" [command]":"")+(this._args.length?" "+e.join(" "):"");return arguments.length===0?this._usage||r:(this._usage=t,this)};U.prototype.name=function(t){return arguments.length===0?this._name:(this._name=t,this)};U.prototype.prepareCommands=function(){return this.commands.filter(function(t){return!t._noHelp}).map(function(t){var e=t._args.map(function(r){return vu(r)}).join(" ");return[t._name+(t._alias?"|"+t._alias:"")+(t.options.length?" [options]":"")+(e?" "+e:""),t._description]})};U.prototype.largestCommandLength=function(){var t=this.prepareCommands();return t.reduce(function(e,r){return Math.max(e,r[0].length)},0)};U.prototype.largestOptionLength=function(){var t=[].slice.call(this.options);return t.push({flags:"-h, --help"}),t.reduce(function(e,r){return Math.max(e,r.flags.length)},0)};U.prototype.largestArgLength=function(){return this._args.reduce(function(t,e){return Math.max(t,e.name.length)},0)};U.prototype.padWidth=function(){var t=this.largestOptionLength();return this._argsDescription&&this._args.length&&this.largestArgLength()>t&&(t=this.largestArgLength()),this.commands&&this.commands.length&&this.largestCommandLength()>t&&(t=this.largestCommandLength()),t};U.prototype.optionHelp=function(){var t=this.padWidth();return this.options.map(function(e){return ln(e.flags,t)+" "+e.description+(e.bool&&e.defaultValue!==void 0?" (default: "+JSON.stringify(e.defaultValue)+")":"")}).concat([ln("-h, --help",t)+" output usage information"]).join(`
4
+ `)};U.prototype.commandHelp=function(){if(!this.commands.length)return"";var t=this.prepareCommands(),e=this.padWidth();return["Commands:",t.map(function(r){var n=r[1]?" "+r[1]:"";return(n?ln(r[0],e):r[0])+n}).join(`
5
5
  `).replace(/^/gm," "),""].join(`
6
- `)};j.prototype.helpInformation=function(){var t=[];if(this._description){t=[this._description,""];var e=this._argsDescription;if(e&&this._args.length){var r=this.padWidth();t.push("Arguments:"),t.push(""),this._args.forEach(function(u){t.push(" "+Fr(u.name,r)+" "+e[u.name])}),t.push("")}}var n=this._name;this._alias&&(n=n+"|"+this._alias);var i=["Usage: "+n+" "+this.usage(),""],o=[],a=this.commandHelp();a&&(o=[a]);var s=["Options:",""+this.optionHelp().replace(/^/gm," "),""];return i.concat(t).concat(s).concat(o).join(`
7
- `)};j.prototype.outputHelp=function(t){t||(t=function(e){return e}),process.stdout.write(t(this.helpInformation())),this.emit("--help")};j.prototype.help=function(t){this.outputHelp(t),process.exit()};function jd(t){return t.split("-").reduce(function(e,r){return e+r[0].toUpperCase()+r.slice(1)})}function Fr(t,e){var r=Math.max(0,e-t.length);return t+Array(r+1).join(" ")}function hs(t,e){e=e||[];for(var r=0;r<e.length;r++)(e[r]==="--help"||e[r]==="-h")&&(t.outputHelp(),process.exit(0))}function _s(t){var e=t.name+(t.variadic===!0?"...":"");return t.required?"<"+e+">":"["+e+"]"}function pi(t){try{if(ps.statSync(t).isFile())return!0}catch{return!1}}});var N=b((Hb,Lr)=>{var ys,bs,Ss,Es,Ts,Os,ws,xs,Is,Hr,hi,Cs,Rs,Mt,As,Ps,qs,Ns,Ms,ks,Ds,Fs,js;(function(t){var e=typeof global=="object"?global:typeof self=="object"?self:typeof this=="object"?this:{};typeof define=="function"&&define.amd?define("tslib",["exports"],function(n){t(r(e,r(n)))}):typeof Lr=="object"&&typeof Lr.exports=="object"?t(r(e,r(Lr.exports))):t(r(e));function r(n,i){return n!==e&&(typeof Object.create=="function"?Object.defineProperty(n,"__esModule",{value:!0}):n.__esModule=!0),function(o,a){return n[o]=i?i(o,a):a}}})(function(t){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var i in n)n.hasOwnProperty(i)&&(r[i]=n[i])};ys=function(r,n){e(r,n);function i(){this.constructor=r}r.prototype=n===null?Object.create(n):(i.prototype=n.prototype,new i)},bs=Object.assign||function(r){for(var n,i=1,o=arguments.length;i<o;i++){n=arguments[i];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(r[a]=n[a])}return r},Ss=function(r,n){var i={};for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&n.indexOf(o)<0&&(i[o]=r[o]);if(r!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,o=Object.getOwnPropertySymbols(r);a<o.length;a++)n.indexOf(o[a])<0&&Object.prototype.propertyIsEnumerable.call(r,o[a])&&(i[o[a]]=r[o[a]]);return i},Es=function(r,n,i,o){var a=arguments.length,s=a<3?n:o===null?o=Object.getOwnPropertyDescriptor(n,i):o,u;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(r,n,i,o);else for(var c=r.length-1;c>=0;c--)(u=r[c])&&(s=(a<3?u(s):a>3?u(n,i,s):u(n,i))||s);return a>3&&s&&Object.defineProperty(n,i,s),s},Ts=function(r,n){return function(i,o){n(i,o,r)}},Os=function(r,n){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,n)},ws=function(r,n,i,o){function a(s){return s instanceof i?s:new i(function(u){u(s)})}return new(i||(i=Promise))(function(s,u){function c(h){try{d(o.next(h))}catch(y){u(y)}}function l(h){try{d(o.throw(h))}catch(y){u(y)}}function d(h){h.done?s(h.value):a(h.value).then(c,l)}d((o=o.apply(r,n||[])).next())})},xs=function(r,n){var i={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},o,a,s,u;return u={next:c(0),throw:c(1),return:c(2)},typeof Symbol=="function"&&(u[Symbol.iterator]=function(){return this}),u;function c(d){return function(h){return l([d,h])}}function l(d){if(o)throw new TypeError("Generator is already executing.");for(;i;)try{if(o=1,a&&(s=d[0]&2?a.return:d[0]?a.throw||((s=a.return)&&s.call(a),0):a.next)&&!(s=s.call(a,d[1])).done)return s;switch(a=0,s&&(d=[d[0]&2,s.value]),d[0]){case 0:case 1:s=d;break;case 4:return i.label++,{value:d[1],done:!1};case 5:i.label++,a=d[1],d=[0];continue;case 7:d=i.ops.pop(),i.trys.pop();continue;default:if(s=i.trys,!(s=s.length>0&&s[s.length-1])&&(d[0]===6||d[0]===2)){i=0;continue}if(d[0]===3&&(!s||d[1]>s[0]&&d[1]<s[3])){i.label=d[1];break}if(d[0]===6&&i.label<s[1]){i.label=s[1],s=d;break}if(s&&i.label<s[2]){i.label=s[2],i.ops.push(d);break}s[2]&&i.ops.pop(),i.trys.pop();continue}d=n.call(r,i)}catch(h){d=[6,h],a=0}finally{o=s=0}if(d[0]&5)throw d[1];return{value:d[0]?d[1]:void 0,done:!0}}},js=function(r,n,i,o){o===void 0&&(o=i),r[o]=n[i]},Is=function(r,n){for(var i in r)i!=="default"&&!n.hasOwnProperty(i)&&(n[i]=r[i])},Hr=function(r){var n=typeof Symbol=="function"&&Symbol.iterator,i=n&&r[n],o=0;if(i)return i.call(r);if(r&&typeof r.length=="number")return{next:function(){return r&&o>=r.length&&(r=void 0),{value:r&&r[o++],done:!r}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")},hi=function(r,n){var i=typeof Symbol=="function"&&r[Symbol.iterator];if(!i)return r;var o=i.call(r),a,s=[],u;try{for(;(n===void 0||n-- >0)&&!(a=o.next()).done;)s.push(a.value)}catch(c){u={error:c}}finally{try{a&&!a.done&&(i=o.return)&&i.call(o)}finally{if(u)throw u.error}}return s},Cs=function(){for(var r=[],n=0;n<arguments.length;n++)r=r.concat(hi(arguments[n]));return r},Rs=function(){for(var r=0,n=0,i=arguments.length;n<i;n++)r+=arguments[n].length;for(var o=Array(r),a=0,n=0;n<i;n++)for(var s=arguments[n],u=0,c=s.length;u<c;u++,a++)o[a]=s[u];return o},Mt=function(r){return this instanceof Mt?(this.v=r,this):new Mt(r)},As=function(r,n,i){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o=i.apply(r,n||[]),a,s=[];return a={},u("next"),u("throw"),u("return"),a[Symbol.asyncIterator]=function(){return this},a;function u(S){o[S]&&(a[S]=function(T){return new Promise(function(C,q){s.push([S,T,C,q])>1||c(S,T)})})}function c(S,T){try{l(o[S](T))}catch(C){y(s[0][3],C)}}function l(S){S.value instanceof Mt?Promise.resolve(S.value.v).then(d,h):y(s[0][2],S)}function d(S){c("next",S)}function h(S){c("throw",S)}function y(S,T){S(T),s.shift(),s.length&&c(s[0][0],s[0][1])}},Ps=function(r){var n,i;return n={},o("next"),o("throw",function(a){throw a}),o("return"),n[Symbol.iterator]=function(){return this},n;function o(a,s){n[a]=r[a]?function(u){return(i=!i)?{value:Mt(r[a](u)),done:a==="return"}:s?s(u):u}:s}},qs=function(r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r[Symbol.asyncIterator],i;return n?n.call(r):(r=typeof Hr=="function"?Hr(r):r[Symbol.iterator](),i={},o("next"),o("throw"),o("return"),i[Symbol.asyncIterator]=function(){return this},i);function o(s){i[s]=r[s]&&function(u){return new Promise(function(c,l){u=r[s](u),a(c,l,u.done,u.value)})}}function a(s,u,c,l){Promise.resolve(l).then(function(d){s({value:d,done:c})},u)}},Ns=function(r,n){return Object.defineProperty?Object.defineProperty(r,"raw",{value:n}):r.raw=n,r},Ms=function(r){if(r&&r.__esModule)return r;var n={};if(r!=null)for(var i in r)Object.hasOwnProperty.call(r,i)&&(n[i]=r[i]);return n.default=r,n},ks=function(r){return r&&r.__esModule?r:{default:r}},Ds=function(r,n){if(!n.has(r))throw new TypeError("attempted to get private field on non-instance");return n.get(r)},Fs=function(r,n,i){if(!n.has(r))throw new TypeError("attempted to set private field on non-instance");return n.set(r,i),i},t("__extends",ys),t("__assign",bs),t("__rest",Ss),t("__decorate",Es),t("__param",Ts),t("__metadata",Os),t("__awaiter",ws),t("__generator",xs),t("__exportStar",Is),t("__createBinding",js),t("__values",Hr),t("__read",hi),t("__spread",Cs),t("__spreadArrays",Rs),t("__await",Mt),t("__asyncGenerator",As),t("__asyncDelegator",Ps),t("__asyncValues",qs),t("__makeTemplateObject",Ns),t("__importStar",Ms),t("__importDefault",ks),t("__classPrivateFieldGet",Ds),t("__classPrivateFieldSet",Fs)})});var Hs=b(Ur=>{Object.defineProperty(Ur,"__esModule",{value:!0});var Hd;(function(t){t[t.None=0]="None",t[t.Error=1]="Error",t[t.Debug=2]="Debug",t[t.Verbose=3]="Verbose"})(Hd=Ur.LogLevel||(Ur.LogLevel={}))});var Ls=b(kt=>{Object.defineProperty(kt,"__esModule",{value:!0});var Ld;(function(t){t.Ok="ok",t.Exited="exited",t.Crashed="crashed",t.Abnormal="abnormal"})(Ld=kt.SessionStatus||(kt.SessionStatus={}));var Ud;(function(t){t.Ok="ok",t.Errored="errored",t.Crashed="crashed"})(Ud=kt.RequestSessionStatus||(kt.RequestSessionStatus={}))});var Bs=b(Dt=>{Object.defineProperty(Dt,"__esModule",{value:!0});var Us;(function(t){t.Fatal="fatal",t.Error="error",t.Warning="warning",t.Log="log",t.Info="info",t.Debug="debug",t.Critical="critical"})(Us=Dt.Severity||(Dt.Severity={}));(function(t){function e(r){switch(r){case"debug":return t.Debug;case"info":return t.Info;case"warn":case"warning":return t.Warning;case"error":return t.Error;case"fatal":return t.Fatal;case"critical":return t.Critical;case"log":default:return t.Log}}t.fromString=e})(Us=Dt.Severity||(Dt.Severity={}))});var zs=b(Ft=>{Object.defineProperty(Ft,"__esModule",{value:!0});var Gs;(function(t){t.Unknown="unknown",t.Skipped="skipped",t.Success="success",t.RateLimit="rate_limit",t.Invalid="invalid",t.Failed="failed"})(Gs=Ft.Status||(Ft.Status={}));(function(t){function e(r){return r>=200&&r<300?t.Success:r===429?t.RateLimit:r>=400&&r<500?t.Invalid:r>=500?t.Failed:t.Unknown}t.fromHttpCode=e})(Gs=Ft.Status||(Ft.Status={}))});var Vs=b(Br=>{Object.defineProperty(Br,"__esModule",{value:!0});var Bd;(function(t){t.Explicit="explicitly_set",t.Sampler="client_sampler",t.Rate="client_rate",t.Inheritance="inheritance"})(Bd=Br.TransactionSamplingMethod||(Br.TransactionSamplingMethod={}))});var Ws=b(Gr=>{Object.defineProperty(Gr,"__esModule",{value:!0});var Gd;(function(t){t.BeforeSend="before_send",t.EventProcessor="event_processor",t.NetworkError="network_error",t.QueueOverflow="queue_overflow",t.RateLimitBackoff="ratelimit_backoff",t.SampleRate="sample_rate"})(Gd=Gr.Outcome||(Gr.Outcome={}))});var ne=b(Ge=>{Object.defineProperty(Ge,"__esModule",{value:!0});var zd=Hs();Ge.LogLevel=zd.LogLevel;var Ys=Ls();Ge.SessionStatus=Ys.SessionStatus;Ge.RequestSessionStatus=Ys.RequestSessionStatus;var Vd=Bs();Ge.Severity=Vd.Severity;var Wd=zs();Ge.Status=Wd.Status;var Yd=Vs();Ge.TransactionSamplingMethod=Yd.TransactionSamplingMethod;var $d=Ws();Ge.Outcome=$d.Outcome});var $s=b(_i=>{Object.defineProperty(_i,"__esModule",{value:!0});function Kd(t){t.then(null,function(e){console.error(e)})}_i.forget=Kd});var Wr=b((ar,Vr)=>{Object.defineProperty(ar,"__esModule",{value:!0});function Jd(){return Object.prototype.toString.call(typeof process!="undefined"?process:0)==="[object process]"}ar.isNodeEnv=Jd;function zr(t,e){return t.require(e)}ar.dynamicRequire=zr;function Xd(t){var e;try{e=zr(Vr,t)}catch{}try{var r=zr(Vr,"process").cwd;e=zr(Vr,r()+"/node_modules/"+t)}catch{}return e}ar.loadModule=Xd});var nt=b(vi=>{Object.defineProperty(vi,"__esModule",{value:!0});var Qd=Wr(),Zd={};function ep(){return Qd.isNodeEnv()?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Zd}vi.getGlobalObject=ep});var vt=b(ce=>{Object.defineProperty(ce,"__esModule",{value:!0});function tp(t){switch(Object.prototype.toString.call(t)){case"[object Error]":return!0;case"[object Exception]":return!0;case"[object DOMException]":return!0;default:return Yr(t,Error)}}ce.isError=tp;function rp(t){return Object.prototype.toString.call(t)==="[object ErrorEvent]"}ce.isErrorEvent=rp;function np(t){return Object.prototype.toString.call(t)==="[object DOMError]"}ce.isDOMError=np;function ip(t){return Object.prototype.toString.call(t)==="[object DOMException]"}ce.isDOMException=ip;function op(t){return Object.prototype.toString.call(t)==="[object String]"}ce.isString=op;function ap(t){return t===null||typeof t!="object"&&typeof t!="function"}ce.isPrimitive=ap;function Ks(t){return Object.prototype.toString.call(t)==="[object Object]"}ce.isPlainObject=Ks;function sp(t){return typeof Event!="undefined"&&Yr(t,Event)}ce.isEvent=sp;function up(t){return typeof Element!="undefined"&&Yr(t,Element)}ce.isElement=up;function cp(t){return Object.prototype.toString.call(t)==="[object RegExp]"}ce.isRegExp=cp;function fp(t){return Boolean(t&&t.then&&typeof t.then=="function")}ce.isThenable=fp;function lp(t){return Ks(t)&&"nativeEvent"in t&&"preventDefault"in t&&"stopPropagation"in t}ce.isSyntheticEvent=lp;function Yr(t,e){try{return t instanceof e}catch{return!1}}ce.isInstanceOf=Yr});var gi=b($r=>{Object.defineProperty($r,"__esModule",{value:!0});var dp=nt(),pp=vt();function hp(t,e){try{for(var r=t,n=5,i=80,o=[],a=0,s=0,u=" > ",c=u.length,l=void 0;r&&a++<n&&(l=_p(r,e),!(l==="html"||a>1&&s+o.length*c+l.length>=i));)o.push(l),s+=l.length,r=r.parentNode;return o.reverse().join(u)}catch{return"<unknown>"}}$r.htmlTreeAsString=hp;function _p(t,e){var r,n,i=t,o=[],a,s,u,c,l;if(!i||!i.tagName)return"";o.push(i.tagName.toLowerCase());var d=((r=e)===null||r===void 0?void 0:r.length)?e.filter(function(y){return i.getAttribute(y)}).map(function(y){return[y,i.getAttribute(y)]}):null;if((n=d)===null||n===void 0?void 0:n.length)d.forEach(function(y){o.push("["+y[0]+'="'+y[1]+'"]')});else if(i.id&&o.push("#"+i.id),a=i.className,a&&pp.isString(a))for(s=a.split(/\s+/),l=0;l<s.length;l++)o.push("."+s[l]);var h=["type","name","title","alt"];for(l=0;l<h.length;l++)u=h[l],c=i.getAttribute(u),c&&o.push("["+u+'="'+c+'"]');return o.join("")}function vp(){var t=dp.getGlobalObject();try{return t.document.location.href}catch{return""}}$r.getLocationHref=vp});var Js=b(mi=>{Object.defineProperty(mi,"__esModule",{value:!0});mi.setPrototypeOf=Object.setPrototypeOf||({__proto__:[]}instanceof Array?gp:mp);function gp(t,e){return t.__proto__=e,t}function mp(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(t,r)||(t[r]=e[r]);return t}});var Kr=b(yi=>{Object.defineProperty(yi,"__esModule",{value:!0});var yp=N(),bp=Js(),Sp=function(t){yp.__extends(e,t);function e(r){var n=this.constructor,i=t.call(this,r)||this;return i.message=r,i.name=n.prototype.constructor.name,bp.setPrototypeOf(i,n.prototype),i}return e}(Error);yi.SentryError=Sp});var Xs=b(bi=>{Object.defineProperty(bi,"__esModule",{value:!0});var Ep=N(),sr=Kr(),Tp=/^(?:(\w+):)\/\/(?:(\w+)(?::(\w+))?@)([\w.-]+)(?::(\d+))?\/(.+)/,ur="Invalid Dsn",Op=function(){function t(e){typeof e=="string"?this._fromString(e):this._fromComponents(e),this._validate()}return t.prototype.toString=function(e){e===void 0&&(e=!1);var r=this,n=r.host,i=r.path,o=r.pass,a=r.port,s=r.projectId,u=r.protocol,c=r.publicKey;return u+"://"+c+(e&&o?":"+o:"")+("@"+n+(a?":"+a:"")+"/"+(i&&i+"/")+s)},t.prototype._fromString=function(e){var r=Tp.exec(e);if(!r)throw new sr.SentryError(ur);var n=Ep.__read(r.slice(1),6),i=n[0],o=n[1],a=n[2],s=a===void 0?"":a,u=n[3],c=n[4],l=c===void 0?"":c,d=n[5],h="",y=d,S=y.split("/");if(S.length>1&&(h=S.slice(0,-1).join("/"),y=S.pop()),y){var T=y.match(/^\d+/);T&&(y=T[0])}this._fromComponents({host:u,pass:s,path:h,projectId:y,port:l,protocol:i,publicKey:o})},t.prototype._fromComponents=function(e){"user"in e&&!("publicKey"in e)&&(e.publicKey=e.user),this.user=e.publicKey||"",this.protocol=e.protocol,this.publicKey=e.publicKey||"",this.pass=e.pass||"",this.host=e.host,this.port=e.port||"",this.path=e.path||"",this.projectId=e.projectId},t.prototype._validate=function(){var e=this;if(["protocol","publicKey","host","projectId"].forEach(function(r){if(!e[r])throw new sr.SentryError(ur+": "+r+" missing")}),!this.projectId.match(/^\d+$/))throw new sr.SentryError(ur+": Invalid projectId "+this.projectId);if(this.protocol!=="http"&&this.protocol!=="https")throw new sr.SentryError(ur+": Invalid protocol "+this.protocol);if(this.port&&isNaN(parseInt(this.port,10)))throw new sr.SentryError(ur+": Invalid port "+this.port)},t}();bi.Dsn=Op});var Qr=b(Xr=>{Object.defineProperty(Xr,"__esModule",{value:!0});var Qs=nt(),gt=Qs.getGlobalObject(),Si="Sentry Logger ";function Jr(t){var e=Qs.getGlobalObject(),r=["debug","info","warn","error","log","assert"];if(!("console"in e))return t();var n=e.console,i={};r.forEach(function(a){a in e.console&&n[a].__sentry_original__&&(i[a]=n[a],n[a]=n[a].__sentry_original__)});var o=t();return Object.keys(i).forEach(function(a){n[a]=i[a]}),o}Xr.consoleSandbox=Jr;var wp=function(){function t(){this._enabled=!1}return t.prototype.disable=function(){this._enabled=!1},t.prototype.enable=function(){this._enabled=!0},t.prototype.log=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];!this._enabled||Jr(function(){gt.console.log(Si+"[Log]: "+e.join(" "))})},t.prototype.warn=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];!this._enabled||Jr(function(){gt.console.warn(Si+"[Warn]: "+e.join(" "))})},t.prototype.error=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];!this._enabled||Jr(function(){gt.console.error(Si+"[Error]: "+e.join(" "))})},t}();gt.__SENTRY__=gt.__SENTRY__||{};var xp=gt.__SENTRY__.logger||(gt.__SENTRY__.logger=new wp);Xr.logger=xp});var Ti=b(Ei=>{Object.defineProperty(Ei,"__esModule",{value:!0});var Ip=function(){function t(){this._hasWeakSet=typeof WeakSet=="function",this._inner=this._hasWeakSet?new WeakSet:[]}return t.prototype.memoize=function(e){if(this._hasWeakSet)return this._inner.has(e)?!0:(this._inner.add(e),!1);for(var r=0;r<this._inner.length;r++){var n=this._inner[r];if(n===e)return!0}return this._inner.push(e),!1},t.prototype.unmemoize=function(e){if(this._hasWeakSet)this._inner.delete(e);else for(var r=0;r<this._inner.length;r++)if(this._inner[r]===e){this._inner.splice(r,1);break}},t}();Ei.Memo=Ip});var Zr=b(wi=>{Object.defineProperty(wi,"__esModule",{value:!0});var Oi="<anonymous>";function Cp(t){try{return!t||typeof t!="function"?Oi:t.name||Oi}catch{return Oi}}wi.getFunctionName=Cp});var en=b(mt=>{Object.defineProperty(mt,"__esModule",{value:!0});var Zs=vt();function Rp(t,e){return e===void 0&&(e=0),typeof t!="string"||e===0||t.length<=e?t:t.substr(0,e)+"..."}mt.truncate=Rp;function Ap(t,e){var r=t,n=r.length;if(n<=150)return r;e>n&&(e=n);var i=Math.max(e-60,0);i<5&&(i=0);var o=Math.min(i+140,n);return o>n-5&&(o=n),o===n&&(i=Math.max(o-140,0)),r=r.slice(i,o),i>0&&(r="'{snip} "+r),o<n&&(r+=" {snip}"),r}mt.snipLine=Ap;function Pp(t,e){if(!Array.isArray(t))return"";for(var r=[],n=0;n<t.length;n++){var i=t[n];try{r.push(String(i))}catch{r.push("[value cannot be serialized]")}}return r.join(e)}mt.safeJoin=Pp;function qp(t,e){return Zs.isString(t)?Zs.isRegExp(e)?e.test(t):typeof e=="string"?t.indexOf(e)!==-1:!1:!1}mt.isMatchingPattern=qp;function Np(t){return t.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}mt.escapeStringForRegex=Np});var Ci=b(De=>{Object.defineProperty(De,"__esModule",{value:!0});var Mp=N(),eu=gi(),ke=vt(),kp=Ti(),Dp=Zr(),tu=en();function Fp(t,e,r){if(e in t){var n=t[e],i=r(n);if(typeof i=="function")try{i.prototype=i.prototype||{},Object.defineProperties(i,{__sentry_original__:{enumerable:!1,value:n}})}catch{}t[e]=i}}De.fill=Fp;function jp(t){return Object.keys(t).map(function(e){return encodeURIComponent(e)+"="+encodeURIComponent(t[e])}).join("&")}De.urlEncode=jp;function ru(t){if(ke.isError(t)){var e=t,r={message:e.message,name:e.name,stack:e.stack};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r}if(ke.isEvent(t)){var i=t,o={};o.type=i.type;try{o.target=ke.isElement(i.target)?eu.htmlTreeAsString(i.target):Object.prototype.toString.call(i.target)}catch{o.target="<unknown>"}try{o.currentTarget=ke.isElement(i.currentTarget)?eu.htmlTreeAsString(i.currentTarget):Object.prototype.toString.call(i.currentTarget)}catch{o.currentTarget="<unknown>"}typeof CustomEvent!="undefined"&&ke.isInstanceOf(t,CustomEvent)&&(o.detail=i.detail);for(var a in i)Object.prototype.hasOwnProperty.call(i,a)&&(o[a]=i[a]);return o}return t}function Hp(t){return~-encodeURI(t).split(/%..|./).length}function Lp(t){return Hp(JSON.stringify(t))}function nu(t,e,r){e===void 0&&(e=3),r===void 0&&(r=100*1024);var n=ou(t,e);return Lp(n)>r?nu(t,e-1,r):n}De.normalizeToSize=nu;function Up(t){var e=Object.prototype.toString.call(t);if(typeof t=="string")return t;if(e==="[object Object]")return"[Object]";if(e==="[object Array]")return"[Array]";var r=iu(t);return ke.isPrimitive(r)?r:e}function iu(t,e){return e==="domain"&&t&&typeof t=="object"&&t._events?"[Domain]":e==="domainEmitter"?"[DomainEmitter]":typeof global!="undefined"&&t===global?"[Global]":typeof window!="undefined"&&t===window?"[Window]":typeof document!="undefined"&&t===document?"[Document]":ke.isSyntheticEvent(t)?"[SyntheticEvent]":typeof t=="number"&&t!==t?"[NaN]":t===void 0?"[undefined]":typeof t=="function"?"[Function: "+Dp.getFunctionName(t)+"]":typeof t=="symbol"?"["+String(t)+"]":typeof t=="bigint"?"[BigInt: "+String(t)+"]":t}function xi(t,e,r,n){if(r===void 0&&(r=1/0),n===void 0&&(n=new kp.Memo),r===0)return Up(e);if(e!=null&&typeof e.toJSON=="function")return e.toJSON();var i=iu(e,t);if(ke.isPrimitive(i))return i;var o=ru(e),a=Array.isArray(e)?[]:{};if(n.memoize(e))return"[Circular ~]";for(var s in o)!Object.prototype.hasOwnProperty.call(o,s)||(a[s]=xi(s,o[s],r-1,n));return n.unmemoize(e),a}De.walk=xi;function ou(t,e){try{return JSON.parse(JSON.stringify(t,function(r,n){return xi(r,n,e)}))}catch{return"**non-serializable**"}}De.normalize=ou;function Bp(t,e){e===void 0&&(e=40);var r=Object.keys(ru(t));if(r.sort(),!r.length)return"[object has no keys]";if(r[0].length>=e)return tu.truncate(r[0],e);for(var n=r.length;n>0;n--){var i=r.slice(0,n).join(", ");if(!(i.length>e))return n===r.length?i:tu.truncate(i,e)}return""}De.extractExceptionKeysForMessage=Bp;function Ii(t){var e,r;if(ke.isPlainObject(t)){var n=t,i={};try{for(var o=Mp.__values(Object.keys(n)),a=o.next();!a.done;a=o.next()){var s=a.value;typeof n[s]!="undefined"&&(i[s]=Ii(n[s]))}}catch(u){e={error:u}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}return i}return Array.isArray(t)?t.map(Ii):t}De.dropUndefinedKeys=Ii;function Gp(t){var e;switch(!0){case t==null:e=new String(t);break;case(typeof t=="symbol"||typeof t=="bigint"):e=Object(t);break;case ke.isPrimitive(t):e=new t.constructor(t);break;default:e=t;break}return e}De.objectify=Gp});var Pi=b(Re=>{Object.defineProperty(Re,"__esModule",{value:!0});var tn=nt(),zp=Qr();function Vp(){try{return new ErrorEvent(""),!0}catch{return!1}}Re.supportsErrorEvent=Vp;function Wp(){try{return new DOMError(""),!0}catch{return!1}}Re.supportsDOMError=Wp;function Yp(){try{return new DOMException(""),!0}catch{return!1}}Re.supportsDOMException=Yp;function Ri(){if(!("fetch"in tn.getGlobalObject()))return!1;try{return new Headers,new Request(""),new Response,!0}catch{return!1}}Re.supportsFetch=Ri;function Ai(t){return t&&/^function fetch\(\)\s+\{\s+\[native code\]\s+\}$/.test(t.toString())}Re.isNativeFetch=Ai;function $p(){if(!Ri())return!1;var t=tn.getGlobalObject();if(Ai(t.fetch))return!0;var e=!1,r=t.document;if(r&&typeof r.createElement=="function")try{var n=r.createElement("iframe");n.hidden=!0,r.head.appendChild(n),n.contentWindow&&n.contentWindow.fetch&&(e=Ai(n.contentWindow.fetch)),r.head.removeChild(n)}catch(i){zp.logger.warn("Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ",i)}return e}Re.supportsNativeFetch=$p;function Kp(){return"ReportingObserver"in tn.getGlobalObject()}Re.supportsReportingObserver=Kp;function Jp(){if(!Ri())return!1;try{return new Request("_",{referrerPolicy:"origin"}),!0}catch{return!1}}Re.supportsReferrerPolicy=Jp;function Xp(){var t=tn.getGlobalObject(),e=t.chrome,r=e&&e.app&&e.app.runtime,n="history"in t&&!!t.history.pushState&&!!t.history.replaceState;return!r&&n}Re.supportsHistory=Xp});var fu=b(Mi=>{Object.defineProperty(Mi,"__esModule",{value:!0});var jt=N(),Qp=nt(),rn=vt(),au=Qr(),ze=Ci(),Zp=Zr(),su=Pi(),Y=Qp.getGlobalObject(),cr={},uu={};function eh(t){if(!uu[t])switch(uu[t]=!0,t){case"console":rh();break;case"dom":lh();break;case"xhr":ah();break;case"fetch":nh();break;case"history":sh();break;case"error":dh();break;case"unhandledrejection":ph();break;default:au.logger.warn("unknown instrumentation type:",t)}}function th(t){!t||typeof t.type!="string"||typeof t.callback!="function"||(cr[t.type]=cr[t.type]||[],cr[t.type].push(t.callback),eh(t.type))}Mi.addInstrumentationHandler=th;function Ae(t,e){var r,n;if(!(!t||!cr[t]))try{for(var i=jt.__values(cr[t]||[]),o=i.next();!o.done;o=i.next()){var a=o.value;try{a(e)}catch(s){au.logger.error(`Error while triggering instrumentation handler.
6
+ `)};U.prototype.helpInformation=function(){var t=[];if(this._description){t=[this._description,""];var e=this._argsDescription;if(e&&this._args.length){var r=this.padWidth();t.push("Arguments:"),t.push(""),this._args.forEach(function(u){t.push(" "+ln(u.name,r)+" "+e[u.name])}),t.push("")}}var n=this._name;this._alias&&(n=n+"|"+this._alias);var i=["Usage: "+n+" "+this.usage(),""],o=[],s=this.commandHelp();s&&(o=[s]);var a=["Options:",""+this.optionHelp().replace(/^/gm," "),""];return i.concat(t).concat(a).concat(o).join(`
7
+ `)};U.prototype.outputHelp=function(t){t||(t=function(e){return e}),process.stdout.write(t(this.helpInformation())),this.emit("--help")};U.prototype.help=function(t){this.outputHelp(t),process.exit()};function mh(t){return t.split("-").reduce(function(e,r){return e+r[0].toUpperCase()+r.slice(1)})}function ln(t,e){var r=Math.max(0,e-t.length);return t+Array(r+1).join(" ")}function hu(t,e){e=e||[];for(var r=0;r<e.length;r++)(e[r]==="--help"||e[r]==="-h")&&(t.outputHelp(),process.exit(0))}function vu(t){var e=t.name+(t.variadic===!0?"...":"");return t.required?"<"+e+">":"["+e+"]"}function Vi(t){try{if(pu.statSync(t).isFile())return!0}catch{return!1}}});var q=b((n0,pn)=>{var yu,bu,Su,Eu,Tu,wu,Ou,Cu,xu,dn,Wi,Ru,Iu,Jt,Au,Mu,Pu,Nu,qu,ku,Du,Lu,Fu;(function(t){var e=typeof global=="object"?global:typeof self=="object"?self:typeof this=="object"?this:{};typeof define=="function"&&define.amd?define("tslib",["exports"],function(n){t(r(e,r(n)))}):typeof pn=="object"&&typeof pn.exports=="object"?t(r(e,r(pn.exports))):t(r(e));function r(n,i){return n!==e&&(typeof Object.create=="function"?Object.defineProperty(n,"__esModule",{value:!0}):n.__esModule=!0),function(o,s){return n[o]=i?i(o,s):s}}})(function(t){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var i in n)n.hasOwnProperty(i)&&(r[i]=n[i])};yu=function(r,n){e(r,n);function i(){this.constructor=r}r.prototype=n===null?Object.create(n):(i.prototype=n.prototype,new i)},bu=Object.assign||function(r){for(var n,i=1,o=arguments.length;i<o;i++){n=arguments[i];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(r[s]=n[s])}return r},Su=function(r,n){var i={};for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&n.indexOf(o)<0&&(i[o]=r[o]);if(r!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,o=Object.getOwnPropertySymbols(r);s<o.length;s++)n.indexOf(o[s])<0&&Object.prototype.propertyIsEnumerable.call(r,o[s])&&(i[o[s]]=r[o[s]]);return i},Eu=function(r,n,i,o){var s=arguments.length,a=s<3?n:o===null?o=Object.getOwnPropertyDescriptor(n,i):o,u;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")a=Reflect.decorate(r,n,i,o);else for(var c=r.length-1;c>=0;c--)(u=r[c])&&(a=(s<3?u(a):s>3?u(n,i,a):u(n,i))||a);return s>3&&a&&Object.defineProperty(n,i,a),a},Tu=function(r,n){return function(i,o){n(i,o,r)}},wu=function(r,n){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,n)},Ou=function(r,n,i,o){function s(a){return a instanceof i?a:new i(function(u){u(a)})}return new(i||(i=Promise))(function(a,u){function c(h){try{d(o.next(h))}catch(_){u(_)}}function l(h){try{d(o.throw(h))}catch(_){u(_)}}function d(h){h.done?a(h.value):s(h.value).then(c,l)}d((o=o.apply(r,n||[])).next())})},Cu=function(r,n){var i={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},o,s,a,u;return u={next:c(0),throw:c(1),return:c(2)},typeof Symbol=="function"&&(u[Symbol.iterator]=function(){return this}),u;function c(d){return function(h){return l([d,h])}}function l(d){if(o)throw new TypeError("Generator is already executing.");for(;i;)try{if(o=1,s&&(a=d[0]&2?s.return:d[0]?s.throw||((a=s.return)&&a.call(s),0):s.next)&&!(a=a.call(s,d[1])).done)return a;switch(s=0,a&&(d=[d[0]&2,a.value]),d[0]){case 0:case 1:a=d;break;case 4:return i.label++,{value:d[1],done:!1};case 5:i.label++,s=d[1],d=[0];continue;case 7:d=i.ops.pop(),i.trys.pop();continue;default:if(a=i.trys,!(a=a.length>0&&a[a.length-1])&&(d[0]===6||d[0]===2)){i=0;continue}if(d[0]===3&&(!a||d[1]>a[0]&&d[1]<a[3])){i.label=d[1];break}if(d[0]===6&&i.label<a[1]){i.label=a[1],a=d;break}if(a&&i.label<a[2]){i.label=a[2],i.ops.push(d);break}a[2]&&i.ops.pop(),i.trys.pop();continue}d=n.call(r,i)}catch(h){d=[6,h],s=0}finally{o=a=0}if(d[0]&5)throw d[1];return{value:d[0]?d[1]:void 0,done:!0}}},Fu=function(r,n,i,o){o===void 0&&(o=i),r[o]=n[i]},xu=function(r,n){for(var i in r)i!=="default"&&!n.hasOwnProperty(i)&&(n[i]=r[i])},dn=function(r){var n=typeof Symbol=="function"&&Symbol.iterator,i=n&&r[n],o=0;if(i)return i.call(r);if(r&&typeof r.length=="number")return{next:function(){return r&&o>=r.length&&(r=void 0),{value:r&&r[o++],done:!r}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")},Wi=function(r,n){var i=typeof Symbol=="function"&&r[Symbol.iterator];if(!i)return r;var o=i.call(r),s,a=[],u;try{for(;(n===void 0||n-- >0)&&!(s=o.next()).done;)a.push(s.value)}catch(c){u={error:c}}finally{try{s&&!s.done&&(i=o.return)&&i.call(o)}finally{if(u)throw u.error}}return a},Ru=function(){for(var r=[],n=0;n<arguments.length;n++)r=r.concat(Wi(arguments[n]));return r},Iu=function(){for(var r=0,n=0,i=arguments.length;n<i;n++)r+=arguments[n].length;for(var o=Array(r),s=0,n=0;n<i;n++)for(var a=arguments[n],u=0,c=a.length;u<c;u++,s++)o[s]=a[u];return o},Jt=function(r){return this instanceof Jt?(this.v=r,this):new Jt(r)},Au=function(r,n,i){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o=i.apply(r,n||[]),s,a=[];return s={},u("next"),u("throw"),u("return"),s[Symbol.asyncIterator]=function(){return this},s;function u(S){o[S]&&(s[S]=function(T){return new Promise(function(R,A){a.push([S,T,R,A])>1||c(S,T)})})}function c(S,T){try{l(o[S](T))}catch(R){_(a[0][3],R)}}function l(S){S.value instanceof Jt?Promise.resolve(S.value.v).then(d,h):_(a[0][2],S)}function d(S){c("next",S)}function h(S){c("throw",S)}function _(S,T){S(T),a.shift(),a.length&&c(a[0][0],a[0][1])}},Mu=function(r){var n,i;return n={},o("next"),o("throw",function(s){throw s}),o("return"),n[Symbol.iterator]=function(){return this},n;function o(s,a){n[s]=r[s]?function(u){return(i=!i)?{value:Jt(r[s](u)),done:s==="return"}:a?a(u):u}:a}},Pu=function(r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r[Symbol.asyncIterator],i;return n?n.call(r):(r=typeof dn=="function"?dn(r):r[Symbol.iterator](),i={},o("next"),o("throw"),o("return"),i[Symbol.asyncIterator]=function(){return this},i);function o(a){i[a]=r[a]&&function(u){return new Promise(function(c,l){u=r[a](u),s(c,l,u.done,u.value)})}}function s(a,u,c,l){Promise.resolve(l).then(function(d){a({value:d,done:c})},u)}},Nu=function(r,n){return Object.defineProperty?Object.defineProperty(r,"raw",{value:n}):r.raw=n,r},qu=function(r){if(r&&r.__esModule)return r;var n={};if(r!=null)for(var i in r)Object.hasOwnProperty.call(r,i)&&(n[i]=r[i]);return n.default=r,n},ku=function(r){return r&&r.__esModule?r:{default:r}},Du=function(r,n){if(!n.has(r))throw new TypeError("attempted to get private field on non-instance");return n.get(r)},Lu=function(r,n,i){if(!n.has(r))throw new TypeError("attempted to set private field on non-instance");return n.set(r,i),i},t("__extends",yu),t("__assign",bu),t("__rest",Su),t("__decorate",Eu),t("__param",Tu),t("__metadata",wu),t("__awaiter",Ou),t("__generator",Cu),t("__exportStar",xu),t("__createBinding",Fu),t("__values",dn),t("__read",Wi),t("__spread",Ru),t("__spreadArrays",Iu),t("__await",Jt),t("__asyncGenerator",Au),t("__asyncDelegator",Mu),t("__asyncValues",Pu),t("__makeTemplateObject",Nu),t("__importStar",qu),t("__importDefault",ku),t("__classPrivateFieldGet",Du),t("__classPrivateFieldSet",Lu)})});var ju=b(hn=>{Object.defineProperty(hn,"__esModule",{value:!0});var yh;(function(t){t[t.None=0]="None",t[t.Error=1]="Error",t[t.Debug=2]="Debug",t[t.Verbose=3]="Verbose"})(yh=hn.LogLevel||(hn.LogLevel={}))});var Uu=b(Xt=>{Object.defineProperty(Xt,"__esModule",{value:!0});var bh;(function(t){t.Ok="ok",t.Exited="exited",t.Crashed="crashed",t.Abnormal="abnormal"})(bh=Xt.SessionStatus||(Xt.SessionStatus={}));var Sh;(function(t){t.Ok="ok",t.Errored="errored",t.Crashed="crashed"})(Sh=Xt.RequestSessionStatus||(Xt.RequestSessionStatus={}))});var Bu=b(Qt=>{Object.defineProperty(Qt,"__esModule",{value:!0});var Hu;(function(t){t.Fatal="fatal",t.Error="error",t.Warning="warning",t.Log="log",t.Info="info",t.Debug="debug",t.Critical="critical"})(Hu=Qt.Severity||(Qt.Severity={}));(function(t){function e(r){switch(r){case"debug":return t.Debug;case"info":return t.Info;case"warn":case"warning":return t.Warning;case"error":return t.Error;case"fatal":return t.Fatal;case"critical":return t.Critical;case"log":default:return t.Log}}t.fromString=e})(Hu=Qt.Severity||(Qt.Severity={}))});var zu=b(Zt=>{Object.defineProperty(Zt,"__esModule",{value:!0});var Gu;(function(t){t.Unknown="unknown",t.Skipped="skipped",t.Success="success",t.RateLimit="rate_limit",t.Invalid="invalid",t.Failed="failed"})(Gu=Zt.Status||(Zt.Status={}));(function(t){function e(r){return r>=200&&r<300?t.Success:r===429?t.RateLimit:r>=400&&r<500?t.Invalid:r>=500?t.Failed:t.Unknown}t.fromHttpCode=e})(Gu=Zt.Status||(Zt.Status={}))});var Vu=b(vn=>{Object.defineProperty(vn,"__esModule",{value:!0});var Eh;(function(t){t.Explicit="explicitly_set",t.Sampler="client_sampler",t.Rate="client_rate",t.Inheritance="inheritance"})(Eh=vn.TransactionSamplingMethod||(vn.TransactionSamplingMethod={}))});var Wu=b(_n=>{Object.defineProperty(_n,"__esModule",{value:!0});var Th;(function(t){t.BeforeSend="before_send",t.EventProcessor="event_processor",t.NetworkError="network_error",t.QueueOverflow="queue_overflow",t.RateLimitBackoff="ratelimit_backoff",t.SampleRate="sample_rate"})(Th=_n.Outcome||(_n.Outcome={}))});var se=b(Qe=>{Object.defineProperty(Qe,"__esModule",{value:!0});var wh=ju();Qe.LogLevel=wh.LogLevel;var $u=Uu();Qe.SessionStatus=$u.SessionStatus;Qe.RequestSessionStatus=$u.RequestSessionStatus;var Oh=Bu();Qe.Severity=Oh.Severity;var Ch=zu();Qe.Status=Ch.Status;var xh=Vu();Qe.TransactionSamplingMethod=xh.TransactionSamplingMethod;var Rh=Wu();Qe.Outcome=Rh.Outcome});var Yu=b($i=>{Object.defineProperty($i,"__esModule",{value:!0});function Ih(t){t.then(null,function(e){console.error(e)})}$i.forget=Ih});var yn=b((xr,mn)=>{Object.defineProperty(xr,"__esModule",{value:!0});function Ah(){return Object.prototype.toString.call(typeof process!="undefined"?process:0)==="[object process]"}xr.isNodeEnv=Ah;function gn(t,e){return t.require(e)}xr.dynamicRequire=gn;function Mh(t){var e;try{e=gn(mn,t)}catch{}try{var r=gn(mn,"process").cwd;e=gn(mn,r()+"/node_modules/"+t)}catch{}return e}xr.loadModule=Mh});var pt=b(Yi=>{Object.defineProperty(Yi,"__esModule",{value:!0});var Ph=yn(),Nh={};function qh(){return Ph.isNodeEnv()?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Nh}Yi.getGlobalObject=qh});var Rt=b(he=>{Object.defineProperty(he,"__esModule",{value:!0});function kh(t){switch(Object.prototype.toString.call(t)){case"[object Error]":return!0;case"[object Exception]":return!0;case"[object DOMException]":return!0;default:return bn(t,Error)}}he.isError=kh;function Dh(t){return Object.prototype.toString.call(t)==="[object ErrorEvent]"}he.isErrorEvent=Dh;function Lh(t){return Object.prototype.toString.call(t)==="[object DOMError]"}he.isDOMError=Lh;function Fh(t){return Object.prototype.toString.call(t)==="[object DOMException]"}he.isDOMException=Fh;function jh(t){return Object.prototype.toString.call(t)==="[object String]"}he.isString=jh;function Uh(t){return t===null||typeof t!="object"&&typeof t!="function"}he.isPrimitive=Uh;function Ku(t){return Object.prototype.toString.call(t)==="[object Object]"}he.isPlainObject=Ku;function Hh(t){return typeof Event!="undefined"&&bn(t,Event)}he.isEvent=Hh;function Bh(t){return typeof Element!="undefined"&&bn(t,Element)}he.isElement=Bh;function Gh(t){return Object.prototype.toString.call(t)==="[object RegExp]"}he.isRegExp=Gh;function zh(t){return Boolean(t&&t.then&&typeof t.then=="function")}he.isThenable=zh;function Vh(t){return Ku(t)&&"nativeEvent"in t&&"preventDefault"in t&&"stopPropagation"in t}he.isSyntheticEvent=Vh;function bn(t,e){try{return t instanceof e}catch{return!1}}he.isInstanceOf=bn});var Ki=b(Sn=>{Object.defineProperty(Sn,"__esModule",{value:!0});var Wh=pt(),$h=Rt();function Yh(t,e){try{for(var r=t,n=5,i=80,o=[],s=0,a=0,u=" > ",c=u.length,l=void 0;r&&s++<n&&(l=Kh(r,e),!(l==="html"||s>1&&a+o.length*c+l.length>=i));)o.push(l),a+=l.length,r=r.parentNode;return o.reverse().join(u)}catch{return"<unknown>"}}Sn.htmlTreeAsString=Yh;function Kh(t,e){var r,n,i=t,o=[],s,a,u,c,l;if(!i||!i.tagName)return"";o.push(i.tagName.toLowerCase());var d=((r=e)===null||r===void 0?void 0:r.length)?e.filter(function(_){return i.getAttribute(_)}).map(function(_){return[_,i.getAttribute(_)]}):null;if((n=d)===null||n===void 0?void 0:n.length)d.forEach(function(_){o.push("["+_[0]+'="'+_[1]+'"]')});else if(i.id&&o.push("#"+i.id),s=i.className,s&&$h.isString(s))for(a=s.split(/\s+/),l=0;l<a.length;l++)o.push("."+a[l]);var h=["type","name","title","alt"];for(l=0;l<h.length;l++)u=h[l],c=i.getAttribute(u),c&&o.push("["+u+'="'+c+'"]');return o.join("")}function Jh(){var t=Wh.getGlobalObject();try{return t.document.location.href}catch{return""}}Sn.getLocationHref=Jh});var Ju=b(Ji=>{Object.defineProperty(Ji,"__esModule",{value:!0});Ji.setPrototypeOf=Object.setPrototypeOf||({__proto__:[]}instanceof Array?Xh:Qh);function Xh(t,e){return t.__proto__=e,t}function Qh(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(t,r)||(t[r]=e[r]);return t}});var En=b(Xi=>{Object.defineProperty(Xi,"__esModule",{value:!0});var Zh=q(),ev=Ju(),tv=function(t){Zh.__extends(e,t);function e(r){var n=this.constructor,i=t.call(this,r)||this;return i.message=r,i.name=n.prototype.constructor.name,ev.setPrototypeOf(i,n.prototype),i}return e}(Error);Xi.SentryError=tv});var Xu=b(Qi=>{Object.defineProperty(Qi,"__esModule",{value:!0});var rv=q(),Rr=En(),nv=/^(?:(\w+):)\/\/(?:(\w+)(?::(\w+))?@)([\w.-]+)(?::(\d+))?\/(.+)/,Ir="Invalid Dsn",iv=function(){function t(e){typeof e=="string"?this._fromString(e):this._fromComponents(e),this._validate()}return t.prototype.toString=function(e){e===void 0&&(e=!1);var r=this,n=r.host,i=r.path,o=r.pass,s=r.port,a=r.projectId,u=r.protocol,c=r.publicKey;return u+"://"+c+(e&&o?":"+o:"")+("@"+n+(s?":"+s:"")+"/"+(i&&i+"/")+a)},t.prototype._fromString=function(e){var r=nv.exec(e);if(!r)throw new Rr.SentryError(Ir);var n=rv.__read(r.slice(1),6),i=n[0],o=n[1],s=n[2],a=s===void 0?"":s,u=n[3],c=n[4],l=c===void 0?"":c,d=n[5],h="",_=d,S=_.split("/");if(S.length>1&&(h=S.slice(0,-1).join("/"),_=S.pop()),_){var T=_.match(/^\d+/);T&&(_=T[0])}this._fromComponents({host:u,pass:a,path:h,projectId:_,port:l,protocol:i,publicKey:o})},t.prototype._fromComponents=function(e){"user"in e&&!("publicKey"in e)&&(e.publicKey=e.user),this.user=e.publicKey||"",this.protocol=e.protocol,this.publicKey=e.publicKey||"",this.pass=e.pass||"",this.host=e.host,this.port=e.port||"",this.path=e.path||"",this.projectId=e.projectId},t.prototype._validate=function(){var e=this;if(["protocol","publicKey","host","projectId"].forEach(function(r){if(!e[r])throw new Rr.SentryError(Ir+": "+r+" missing")}),!this.projectId.match(/^\d+$/))throw new Rr.SentryError(Ir+": Invalid projectId "+this.projectId);if(this.protocol!=="http"&&this.protocol!=="https")throw new Rr.SentryError(Ir+": Invalid protocol "+this.protocol);if(this.port&&isNaN(parseInt(this.port,10)))throw new Rr.SentryError(Ir+": Invalid port "+this.port)},t}();Qi.Dsn=iv});var On=b(wn=>{Object.defineProperty(wn,"__esModule",{value:!0});var Qu=pt(),It=Qu.getGlobalObject(),Zi="Sentry Logger ";function Tn(t){var e=Qu.getGlobalObject(),r=["debug","info","warn","error","log","assert"];if(!("console"in e))return t();var n=e.console,i={};r.forEach(function(s){s in e.console&&n[s].__sentry_original__&&(i[s]=n[s],n[s]=n[s].__sentry_original__)});var o=t();return Object.keys(i).forEach(function(s){n[s]=i[s]}),o}wn.consoleSandbox=Tn;var ov=function(){function t(){this._enabled=!1}return t.prototype.disable=function(){this._enabled=!1},t.prototype.enable=function(){this._enabled=!0},t.prototype.log=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];!this._enabled||Tn(function(){It.console.log(Zi+"[Log]: "+e.join(" "))})},t.prototype.warn=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];!this._enabled||Tn(function(){It.console.warn(Zi+"[Warn]: "+e.join(" "))})},t.prototype.error=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];!this._enabled||Tn(function(){It.console.error(Zi+"[Error]: "+e.join(" "))})},t}();It.__SENTRY__=It.__SENTRY__||{};var sv=It.__SENTRY__.logger||(It.__SENTRY__.logger=new ov);wn.logger=sv});var to=b(eo=>{Object.defineProperty(eo,"__esModule",{value:!0});var av=function(){function t(){this._hasWeakSet=typeof WeakSet=="function",this._inner=this._hasWeakSet?new WeakSet:[]}return t.prototype.memoize=function(e){if(this._hasWeakSet)return this._inner.has(e)?!0:(this._inner.add(e),!1);for(var r=0;r<this._inner.length;r++){var n=this._inner[r];if(n===e)return!0}return this._inner.push(e),!1},t.prototype.unmemoize=function(e){if(this._hasWeakSet)this._inner.delete(e);else for(var r=0;r<this._inner.length;r++)if(this._inner[r]===e){this._inner.splice(r,1);break}},t}();eo.Memo=av});var Cn=b(no=>{Object.defineProperty(no,"__esModule",{value:!0});var ro="<anonymous>";function uv(t){try{return!t||typeof t!="function"?ro:t.name||ro}catch{return ro}}no.getFunctionName=uv});var xn=b(At=>{Object.defineProperty(At,"__esModule",{value:!0});var Zu=Rt();function cv(t,e){return e===void 0&&(e=0),typeof t!="string"||e===0||t.length<=e?t:t.substr(0,e)+"..."}At.truncate=cv;function lv(t,e){var r=t,n=r.length;if(n<=150)return r;e>n&&(e=n);var i=Math.max(e-60,0);i<5&&(i=0);var o=Math.min(i+140,n);return o>n-5&&(o=n),o===n&&(i=Math.max(o-140,0)),r=r.slice(i,o),i>0&&(r="'{snip} "+r),o<n&&(r+=" {snip}"),r}At.snipLine=lv;function fv(t,e){if(!Array.isArray(t))return"";for(var r=[],n=0;n<t.length;n++){var i=t[n];try{r.push(String(i))}catch{r.push("[value cannot be serialized]")}}return r.join(e)}At.safeJoin=fv;function dv(t,e){return Zu.isString(t)?Zu.isRegExp(e)?e.test(t):typeof e=="string"?t.indexOf(e)!==-1:!1:!1}At.isMatchingPattern=dv;function pv(t){return t.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}At.escapeStringForRegex=pv});var so=b(ze=>{Object.defineProperty(ze,"__esModule",{value:!0});var hv=q(),ec=Ki(),Ge=Rt(),vv=to(),_v=Cn(),tc=xn();function gv(t,e,r){if(e in t){var n=t[e],i=r(n);if(typeof i=="function")try{i.prototype=i.prototype||{},Object.defineProperties(i,{__sentry_original__:{enumerable:!1,value:n}})}catch{}t[e]=i}}ze.fill=gv;function mv(t){return Object.keys(t).map(function(e){return encodeURIComponent(e)+"="+encodeURIComponent(t[e])}).join("&")}ze.urlEncode=mv;function rc(t){if(Ge.isError(t)){var e=t,r={message:e.message,name:e.name,stack:e.stack};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r}if(Ge.isEvent(t)){var i=t,o={};o.type=i.type;try{o.target=Ge.isElement(i.target)?ec.htmlTreeAsString(i.target):Object.prototype.toString.call(i.target)}catch{o.target="<unknown>"}try{o.currentTarget=Ge.isElement(i.currentTarget)?ec.htmlTreeAsString(i.currentTarget):Object.prototype.toString.call(i.currentTarget)}catch{o.currentTarget="<unknown>"}typeof CustomEvent!="undefined"&&Ge.isInstanceOf(t,CustomEvent)&&(o.detail=i.detail);for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(o[s]=i[s]);return o}return t}function yv(t){return~-encodeURI(t).split(/%..|./).length}function bv(t){return yv(JSON.stringify(t))}function nc(t,e,r){e===void 0&&(e=3),r===void 0&&(r=100*1024);var n=oc(t,e);return bv(n)>r?nc(t,e-1,r):n}ze.normalizeToSize=nc;function Sv(t){var e=Object.prototype.toString.call(t);if(typeof t=="string")return t;if(e==="[object Object]")return"[Object]";if(e==="[object Array]")return"[Array]";var r=ic(t);return Ge.isPrimitive(r)?r:e}function ic(t,e){return e==="domain"&&t&&typeof t=="object"&&t._events?"[Domain]":e==="domainEmitter"?"[DomainEmitter]":typeof global!="undefined"&&t===global?"[Global]":typeof window!="undefined"&&t===window?"[Window]":typeof document!="undefined"&&t===document?"[Document]":Ge.isSyntheticEvent(t)?"[SyntheticEvent]":typeof t=="number"&&t!==t?"[NaN]":t===void 0?"[undefined]":typeof t=="function"?"[Function: "+_v.getFunctionName(t)+"]":typeof t=="symbol"?"["+String(t)+"]":typeof t=="bigint"?"[BigInt: "+String(t)+"]":t}function io(t,e,r,n){if(r===void 0&&(r=1/0),n===void 0&&(n=new vv.Memo),r===0)return Sv(e);if(e!=null&&typeof e.toJSON=="function")return e.toJSON();var i=ic(e,t);if(Ge.isPrimitive(i))return i;var o=rc(e),s=Array.isArray(e)?[]:{};if(n.memoize(e))return"[Circular ~]";for(var a in o)!Object.prototype.hasOwnProperty.call(o,a)||(s[a]=io(a,o[a],r-1,n));return n.unmemoize(e),s}ze.walk=io;function oc(t,e){try{return JSON.parse(JSON.stringify(t,function(r,n){return io(r,n,e)}))}catch{return"**non-serializable**"}}ze.normalize=oc;function Ev(t,e){e===void 0&&(e=40);var r=Object.keys(rc(t));if(r.sort(),!r.length)return"[object has no keys]";if(r[0].length>=e)return tc.truncate(r[0],e);for(var n=r.length;n>0;n--){var i=r.slice(0,n).join(", ");if(!(i.length>e))return n===r.length?i:tc.truncate(i,e)}return""}ze.extractExceptionKeysForMessage=Ev;function oo(t){var e,r;if(Ge.isPlainObject(t)){var n=t,i={};try{for(var o=hv.__values(Object.keys(n)),s=o.next();!s.done;s=o.next()){var a=s.value;typeof n[a]!="undefined"&&(i[a]=oo(n[a]))}}catch(u){e={error:u}}finally{try{s&&!s.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}return i}return Array.isArray(t)?t.map(oo):t}ze.dropUndefinedKeys=oo;function Tv(t){var e;switch(!0){case t==null:e=new String(t);break;case(typeof t=="symbol"||typeof t=="bigint"):e=Object(t);break;case Ge.isPrimitive(t):e=new t.constructor(t);break;default:e=t;break}return e}ze.objectify=Tv});var co=b(De=>{Object.defineProperty(De,"__esModule",{value:!0});var Rn=pt(),wv=On();function Ov(){try{return new ErrorEvent(""),!0}catch{return!1}}De.supportsErrorEvent=Ov;function Cv(){try{return new DOMError(""),!0}catch{return!1}}De.supportsDOMError=Cv;function xv(){try{return new DOMException(""),!0}catch{return!1}}De.supportsDOMException=xv;function ao(){if(!("fetch"in Rn.getGlobalObject()))return!1;try{return new Headers,new Request(""),new Response,!0}catch{return!1}}De.supportsFetch=ao;function uo(t){return t&&/^function fetch\(\)\s+\{\s+\[native code\]\s+\}$/.test(t.toString())}De.isNativeFetch=uo;function Rv(){if(!ao())return!1;var t=Rn.getGlobalObject();if(uo(t.fetch))return!0;var e=!1,r=t.document;if(r&&typeof r.createElement=="function")try{var n=r.createElement("iframe");n.hidden=!0,r.head.appendChild(n),n.contentWindow&&n.contentWindow.fetch&&(e=uo(n.contentWindow.fetch)),r.head.removeChild(n)}catch(i){wv.logger.warn("Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ",i)}return e}De.supportsNativeFetch=Rv;function Iv(){return"ReportingObserver"in Rn.getGlobalObject()}De.supportsReportingObserver=Iv;function Av(){if(!ao())return!1;try{return new Request("_",{referrerPolicy:"origin"}),!0}catch{return!1}}De.supportsReferrerPolicy=Av;function Mv(){var t=Rn.getGlobalObject(),e=t.chrome,r=e&&e.app&&e.app.runtime,n="history"in t&&!!t.history.pushState&&!!t.history.replaceState;return!r&&n}De.supportsHistory=Mv});var lc=b(po=>{Object.defineProperty(po,"__esModule",{value:!0});var er=q(),Pv=pt(),In=Rt(),sc=On(),Ze=so(),Nv=Cn(),ac=co(),K=Pv.getGlobalObject(),Ar={},uc={};function qv(t){if(!uc[t])switch(uc[t]=!0,t){case"console":Dv();break;case"dom":Vv();break;case"xhr":Uv();break;case"fetch":Lv();break;case"history":Hv();break;case"error":Wv();break;case"unhandledrejection":$v();break;default:sc.logger.warn("unknown instrumentation type:",t)}}function kv(t){!t||typeof t.type!="string"||typeof t.callback!="function"||(Ar[t.type]=Ar[t.type]||[],Ar[t.type].push(t.callback),qv(t.type))}po.addInstrumentationHandler=kv;function Le(t,e){var r,n;if(!(!t||!Ar[t]))try{for(var i=er.__values(Ar[t]||[]),o=i.next();!o.done;o=i.next()){var s=o.value;try{s(e)}catch(a){sc.logger.error(`Error while triggering instrumentation handler.
8
8
  Type: `+t+`
9
- Name: `+Zp.getFunctionName(a)+`
10
- Error: `+s)}}}catch(s){r={error:s}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}}function rh(){"console"in Y&&["debug","info","warn","error","log","assert"].forEach(function(t){t in Y.console&&ze.fill(Y.console,t,function(e){return function(){for(var r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];Ae("console",{args:r,level:t}),e&&Function.prototype.apply.call(e,Y.console,r)}})})}function nh(){!su.supportsNativeFetch()||ze.fill(Y,"fetch",function(t){return function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var n={args:e,fetchData:{method:ih(e),url:oh(e)},startTimestamp:Date.now()};return Ae("fetch",jt.__assign({},n)),t.apply(Y,e).then(function(i){return Ae("fetch",jt.__assign(jt.__assign({},n),{endTimestamp:Date.now(),response:i})),i},function(i){throw Ae("fetch",jt.__assign(jt.__assign({},n),{endTimestamp:Date.now(),error:i})),i})}})}function ih(t){return t===void 0&&(t=[]),"Request"in Y&&rn.isInstanceOf(t[0],Request)&&t[0].method?String(t[0].method).toUpperCase():t[1]&&t[1].method?String(t[1].method).toUpperCase():"GET"}function oh(t){return t===void 0&&(t=[]),typeof t[0]=="string"?t[0]:"Request"in Y&&rn.isInstanceOf(t[0],Request)?t[0].url:String(t[0])}function ah(){if("XMLHttpRequest"in Y){var t=[],e=[],r=XMLHttpRequest.prototype;ze.fill(r,"open",function(n){return function(){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];var a=this,s=i[1];a.__sentry_xhr__={method:rn.isString(i[0])?i[0].toUpperCase():i[0],url:i[1]},rn.isString(s)&&a.__sentry_xhr__.method==="POST"&&s.match(/sentry_key/)&&(a.__sentry_own_request__=!0);var u=function(){if(a.readyState===4){try{a.__sentry_xhr__&&(a.__sentry_xhr__.status_code=a.status)}catch{}try{var c=t.indexOf(a);if(c!==-1){t.splice(c);var l=e.splice(c)[0];a.__sentry_xhr__&&l[0]!==void 0&&(a.__sentry_xhr__.body=l[0])}}catch{}Ae("xhr",{args:i,endTimestamp:Date.now(),startTimestamp:Date.now(),xhr:a})}};return"onreadystatechange"in a&&typeof a.onreadystatechange=="function"?ze.fill(a,"onreadystatechange",function(c){return function(){for(var l=[],d=0;d<arguments.length;d++)l[d]=arguments[d];return u(),c.apply(a,l)}}):a.addEventListener("readystatechange",u),n.apply(a,i)}}),ze.fill(r,"send",function(n){return function(){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];return t.push(this),e.push(i),Ae("xhr",{args:i,startTimestamp:Date.now(),xhr:this}),n.apply(this,i)}})}}var nn;function sh(){if(!su.supportsHistory())return;var t=Y.onpopstate;Y.onpopstate=function(){for(var r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];var i=Y.location.href,o=nn;if(nn=i,Ae("history",{from:o,to:i}),t)try{return t.apply(this,r)}catch{}};function e(r){return function(){for(var n=[],i=0;i<arguments.length;i++)n[i]=arguments[i];var o=n.length>2?n[2]:void 0;if(o){var a=nn,s=String(o);nn=s,Ae("history",{from:a,to:s})}return r.apply(this,n)}}ze.fill(Y.history,"pushState",e),ze.fill(Y.history,"replaceState",e)}var uh=1e3,on,an;function ch(t,e){if(!t||t.type!==e.type)return!0;try{if(t.target!==e.target)return!0}catch{}return!1}function fh(t){if(t.type!=="keypress")return!1;try{var e=t.target;if(!e||!e.tagName)return!0;if(e.tagName==="INPUT"||e.tagName==="TEXTAREA"||e.isContentEditable)return!1}catch{}return!0}function cu(t,e){return e===void 0&&(e=!1),function(r){if(!(!r||an===r)&&!fh(r)){var n=r.type==="keypress"?"input":r.type;on===void 0?(t({event:r,name:n,global:e}),an=r):ch(an,r)&&(t({event:r,name:n,global:e}),an=r),clearTimeout(on),on=Y.setTimeout(function(){on=void 0},uh)}}}function lh(){if("document"in Y){var t=Ae.bind(null,"dom"),e=cu(t,!0);Y.document.addEventListener("click",e,!1),Y.document.addEventListener("keypress",e,!1),["EventTarget","Node"].forEach(function(r){var n=Y[r]&&Y[r].prototype;!n||!n.hasOwnProperty||!n.hasOwnProperty("addEventListener")||(ze.fill(n,"addEventListener",function(i){return function(o,a,s){if(o==="click"||o=="keypress")try{var u=this,c=u.__sentry_instrumentation_handlers__=u.__sentry_instrumentation_handlers__||{},l=c[o]=c[o]||{refCount:0};if(!l.handler){var d=cu(t);l.handler=d,i.call(this,o,d,s)}l.refCount+=1}catch{}return i.call(this,o,a,s)}}),ze.fill(n,"removeEventListener",function(i){return function(o,a,s){if(o==="click"||o=="keypress")try{var u=this,c=u.__sentry_instrumentation_handlers__||{},l=c[o];l&&(l.refCount-=1,l.refCount<=0&&(i.call(this,o,l.handler,s),l.handler=void 0,delete c[o]),Object.keys(c).length===0&&delete u.__sentry_instrumentation_handlers__)}catch{}return i.call(this,o,a,s)}}))})}}var qi=null;function dh(){qi=Y.onerror,Y.onerror=function(t,e,r,n,i){return Ae("error",{column:n,error:i,line:r,msg:t,url:e}),qi?qi.apply(this,arguments):!1}}var Ni=null;function ph(){Ni=Y.onunhandledrejection,Y.onunhandledrejection=function(t){return Ae("unhandledrejection",t),Ni?Ni.apply(this,arguments):!0}}});var du=b(we=>{Object.defineProperty(we,"__esModule",{value:!0});var fr=N(),hh=nt(),ki=en();function _h(){var t=hh.getGlobalObject(),e=t.crypto||t.msCrypto;if(e!==void 0&&e.getRandomValues){var r=new Uint16Array(8);e.getRandomValues(r),r[3]=r[3]&4095|16384,r[4]=r[4]&16383|32768;var n=function(i){for(var o=i.toString(16);o.length<4;)o="0"+o;return o};return n(r[0])+n(r[1])+n(r[2])+n(r[3])+n(r[4])+n(r[5])+n(r[6])+n(r[7])}return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,function(i){var o=Math.random()*16|0,a=i==="x"?o:o&3|8;return a.toString(16)})}we.uuid4=_h;function vh(t){if(!t)return{};var e=t.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!e)return{};var r=e[6]||"",n=e[8]||"";return{host:e[4],path:e[5],protocol:e[2],relative:e[5]+r+n}}we.parseUrl=vh;function gh(t){if(t.message)return t.message;if(t.exception&&t.exception.values&&t.exception.values[0]){var e=t.exception.values[0];return e.type&&e.value?e.type+": "+e.value:e.type||e.value||t.event_id||"<unknown>"}return t.event_id||"<unknown>"}we.getEventDescription=gh;function mh(t,e,r){t.exception=t.exception||{},t.exception.values=t.exception.values||[],t.exception.values[0]=t.exception.values[0]||{},t.exception.values[0].value=t.exception.values[0].value||e||"",t.exception.values[0].type=t.exception.values[0].type||r||"Error"}we.addExceptionTypeValue=mh;function yh(t,e){var r;if(!(!t.exception||!t.exception.values)){var n=t.exception.values[0],i={type:"generic",handled:!0},o=n.mechanism;if(n.mechanism=fr.__assign(fr.__assign(fr.__assign({},i),o),e),e&&"data"in e){var a=fr.__assign(fr.__assign({},(r=o)===null||r===void 0?void 0:r.data),e.data);n.mechanism.data=a}}}we.addExceptionMechanism=yh;var bh=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;function Sh(t){var e=t.match(bh)||[],r=parseInt(e[1],10),n=parseInt(e[2],10),i=parseInt(e[3],10);return{buildmetadata:e[5],major:isNaN(r)?void 0:r,minor:isNaN(n)?void 0:n,patch:isNaN(i)?void 0:i,prerelease:e[4]}}we.parseSemver=Sh;var lu=60*1e3;function Eh(t,e){if(!e)return lu;var r=parseInt(""+e,10);if(!isNaN(r))return r*1e3;var n=Date.parse(""+e);return isNaN(n)?lu:n-t}we.parseRetryAfterHeader=Eh;function Th(t,e,r){r===void 0&&(r=5);var n=e.lineno||0,i=t.length,o=Math.max(Math.min(i,n-1),0);e.pre_context=t.slice(Math.max(0,o-r),o).map(function(a){return ki.snipLine(a,0)}),e.context_line=ki.snipLine(t[Math.min(i-1,o)],e.colno||0),e.post_context=t.slice(Math.min(o+1,i),o+1+r).map(function(a){return ki.snipLine(a,0)})}we.addContextToFrame=Th;function Oh(t){return t.split(/[\?#]/,1)[0]}we.stripUrlQueryAndFragment=Oh;function wh(t){var e;if((e=t)===null||e===void 0?void 0:e.__sentry_captured__)return!0;try{Object.defineProperty(t,"__sentry_captured__",{value:!0})}catch{}return!1}we.checkOrSetAlreadyCaught=wh});var mu=b(Ve=>{Object.defineProperty(Ve,"__esModule",{value:!0});function pu(t,e){for(var r=0,n=t.length-1;n>=0;n--){var i=t[n];i==="."?t.splice(n,1):i===".."?(t.splice(n,1),r++):r&&(t.splice(n,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}var xh=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^/]+?|)(\.[^./]*|))(?:[/]*)$/;function hu(t){var e=xh.exec(t);return e?e.slice(1):[]}function Di(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];for(var r="",n=!1,i=t.length-1;i>=-1&&!n;i--){var o=i>=0?t[i]:"/";!o||(r=o+"/"+r,n=o.charAt(0)==="/")}return r=pu(r.split("/").filter(function(a){return!!a}),!n).join("/"),(n?"/":"")+r||"."}Ve.resolve=Di;function _u(t){for(var e=0;e<t.length&&t[e]==="";e++);for(var r=t.length-1;r>=0&&t[r]==="";r--);return e>r?[]:t.slice(e,r-e+1)}function Ih(t,e){t=Di(t).substr(1),e=Di(e).substr(1);for(var r=_u(t.split("/")),n=_u(e.split("/")),i=Math.min(r.length,n.length),o=i,a=0;a<i;a++)if(r[a]!==n[a]){o=a;break}for(var s=[],a=o;a<r.length;a++)s.push("..");return s=s.concat(n.slice(o)),s.join("/")}Ve.relative=Ih;function vu(t){var e=gu(t),r=t.substr(-1)==="/",n=pu(t.split("/").filter(function(i){return!!i}),!e).join("/");return!n&&!e&&(n="."),n&&r&&(n+="/"),(e?"/":"")+n}Ve.normalizePath=vu;function gu(t){return t.charAt(0)==="/"}Ve.isAbsolute=gu;function Ch(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return vu(t.join("/"))}Ve.join=Ch;function Rh(t){var e=hu(t),r=e[0],n=e[1];return!r&&!n?".":(n&&(n=n.substr(0,n.length-1)),r+n)}Ve.dirname=Rh;function Ah(t,e){var r=hu(t)[2];return e&&r.substr(e.length*-1)===e&&(r=r.substr(0,r.length-e.length)),r}Ve.basename=Ah});var ji=b(Fi=>{Object.defineProperty(Fi,"__esModule",{value:!0});var Ph=vt(),qh=function(){function t(e){var r=this;this._state="PENDING",this._handlers=[],this._resolve=function(n){r._setResult("RESOLVED",n)},this._reject=function(n){r._setResult("REJECTED",n)},this._setResult=function(n,i){if(r._state==="PENDING"){if(Ph.isThenable(i)){i.then(r._resolve,r._reject);return}r._state=n,r._value=i,r._executeHandlers()}},this._attachHandler=function(n){r._handlers=r._handlers.concat(n),r._executeHandlers()},this._executeHandlers=function(){if(r._state!=="PENDING"){var n=r._handlers.slice();r._handlers=[],n.forEach(function(i){i.done||(r._state==="RESOLVED"&&i.onfulfilled&&i.onfulfilled(r._value),r._state==="REJECTED"&&i.onrejected&&i.onrejected(r._value),i.done=!0)})}};try{e(this._resolve,this._reject)}catch(n){this._reject(n)}}return t.resolve=function(e){return new t(function(r){r(e)})},t.reject=function(e){return new t(function(r,n){n(e)})},t.all=function(e){return new t(function(r,n){if(!Array.isArray(e)){n(new TypeError("Promise.all requires an array as input."));return}if(e.length===0){r([]);return}var i=e.length,o=[];e.forEach(function(a,s){t.resolve(a).then(function(u){o[s]=u,i-=1,i===0&&r(o)}).then(null,n)})})},t.prototype.then=function(e,r){var n=this;return new t(function(i,o){n._attachHandler({done:!1,onfulfilled:function(a){if(!e){i(a);return}try{i(e(a));return}catch(s){o(s);return}},onrejected:function(a){if(!r){o(a);return}try{i(r(a));return}catch(s){o(s);return}}})})},t.prototype.catch=function(e){return this.then(function(r){return r},e)},t.prototype.finally=function(e){var r=this;return new t(function(n,i){var o,a;return r.then(function(s){a=!1,o=s,e&&e()},function(s){a=!0,o=s,e&&e()}).then(function(){if(a){i(o);return}n(o)})})},t.prototype.toString=function(){return"[object SyncPromise]"},t}();Fi.SyncPromise=qh});var yu=b(Li=>{Object.defineProperty(Li,"__esModule",{value:!0});var Nh=Kr(),Hi=ji(),Mh=function(){function t(e){this._limit=e,this._buffer=[]}return t.prototype.isReady=function(){return this._limit===void 0||this.length()<this._limit},t.prototype.add=function(e){var r=this;if(!this.isReady())return Hi.SyncPromise.reject(new Nh.SentryError("Not adding Promise due to buffer limit reached."));var n=e();return this._buffer.indexOf(n)===-1&&this._buffer.push(n),n.then(function(){return r.remove(n)}).then(null,function(){return r.remove(n).then(null,function(){})}),n},t.prototype.remove=function(e){var r=this._buffer.splice(this._buffer.indexOf(e),1)[0];return r},t.prototype.length=function(){return this._buffer.length},t.prototype.drain=function(e){var r=this;return new Hi.SyncPromise(function(n){var i=setTimeout(function(){e&&e>0&&n(!1)},e);Hi.SyncPromise.all(r._buffer).then(function(){clearTimeout(i),n(!0)}).then(null,function(){n(!0)})})},t}();Li.PromiseBuffer=Mh});var Ou=b((xe,Tu)=>{Object.defineProperty(xe,"__esModule",{value:!0});var bu=nt(),Su=Wr(),Ui={nowSeconds:function(){return Date.now()/1e3}};function kh(){var t=bu.getGlobalObject().performance;if(!(!t||!t.now)){var e=Date.now()-t.now();return{now:function(){return t.now()},timeOrigin:e}}}function Dh(){try{var t=Su.dynamicRequire(Tu,"perf_hooks");return t.performance}catch{return}}var sn=Su.isNodeEnv()?Dh():kh(),Eu=sn===void 0?Ui:{nowSeconds:function(){return(sn.timeOrigin+sn.now())/1e3}};xe.dateTimestampInSeconds=Ui.nowSeconds.bind(Ui);xe.timestampInSeconds=Eu.nowSeconds.bind(Eu);xe.timestampWithMs=xe.timestampInSeconds;xe.usingPerformanceAPI=sn!==void 0;xe.browserPerformanceTimeOrigin=function(){var t=bu.getGlobalObject().performance;if(!t||!t.now){xe._browserPerformanceTimeOriginMode="none";return}var e=3600*1e3,r=t.now(),n=Date.now(),i=t.timeOrigin?Math.abs(t.timeOrigin+r-n):e,o=i<e,a=t.timing&&t.timing.navigationStart,s=typeof a=="number",u=s?Math.abs(a+r-n):e,c=u<e;return o||c?i<=u?(xe._browserPerformanceTimeOriginMode="timeOrigin",t.timeOrigin):(xe._browserPerformanceTimeOriginMode="navigationStart",a):(xe._browserPerformanceTimeOriginMode="dateNow",n)}()});var P=b(K=>{Object.defineProperty(K,"__esModule",{value:!0});var Q=N();Q.__exportStar($s(),K);Q.__exportStar(gi(),K);Q.__exportStar(Xs(),K);Q.__exportStar(Kr(),K);Q.__exportStar(nt(),K);Q.__exportStar(fu(),K);Q.__exportStar(vt(),K);Q.__exportStar(Qr(),K);Q.__exportStar(Ti(),K);Q.__exportStar(du(),K);Q.__exportStar(Wr(),K);Q.__exportStar(Ci(),K);Q.__exportStar(mu(),K);Q.__exportStar(yu(),K);Q.__exportStar(Zr(),K);Q.__exportStar(en(),K);Q.__exportStar(Pi(),K);Q.__exportStar(ji(),K);Q.__exportStar(Ou(),K)});var Bi=b(un=>{Object.defineProperty(un,"__esModule",{value:!0});var M=N(),lr=P(),wu=100,Fh=function(){function t(){this._notifyingListeners=!1,this._scopeListeners=[],this._eventProcessors=[],this._breadcrumbs=[],this._user={},this._tags={},this._extra={},this._contexts={}}return t.clone=function(e){var r=new t;return e&&(r._breadcrumbs=M.__spread(e._breadcrumbs),r._tags=M.__assign({},e._tags),r._extra=M.__assign({},e._extra),r._contexts=M.__assign({},e._contexts),r._user=e._user,r._level=e._level,r._span=e._span,r._session=e._session,r._transactionName=e._transactionName,r._fingerprint=e._fingerprint,r._eventProcessors=M.__spread(e._eventProcessors),r._requestSession=e._requestSession),r},t.prototype.addScopeListener=function(e){this._scopeListeners.push(e)},t.prototype.addEventProcessor=function(e){return this._eventProcessors.push(e),this},t.prototype.setUser=function(e){return this._user=e||{},this._session&&this._session.update({user:e}),this._notifyScopeListeners(),this},t.prototype.getUser=function(){return this._user},t.prototype.getRequestSession=function(){return this._requestSession},t.prototype.setRequestSession=function(e){return this._requestSession=e,this},t.prototype.setTags=function(e){return this._tags=M.__assign(M.__assign({},this._tags),e),this._notifyScopeListeners(),this},t.prototype.setTag=function(e,r){var n;return this._tags=M.__assign(M.__assign({},this._tags),(n={},n[e]=r,n)),this._notifyScopeListeners(),this},t.prototype.setExtras=function(e){return this._extra=M.__assign(M.__assign({},this._extra),e),this._notifyScopeListeners(),this},t.prototype.setExtra=function(e,r){var n;return this._extra=M.__assign(M.__assign({},this._extra),(n={},n[e]=r,n)),this._notifyScopeListeners(),this},t.prototype.setFingerprint=function(e){return this._fingerprint=e,this._notifyScopeListeners(),this},t.prototype.setLevel=function(e){return this._level=e,this._notifyScopeListeners(),this},t.prototype.setTransactionName=function(e){return this._transactionName=e,this._notifyScopeListeners(),this},t.prototype.setTransaction=function(e){return this.setTransactionName(e)},t.prototype.setContext=function(e,r){var n;return r===null?delete this._contexts[e]:this._contexts=M.__assign(M.__assign({},this._contexts),(n={},n[e]=r,n)),this._notifyScopeListeners(),this},t.prototype.setSpan=function(e){return this._span=e,this._notifyScopeListeners(),this},t.prototype.getSpan=function(){return this._span},t.prototype.getTransaction=function(){var e,r,n,i,o=this.getSpan();if((e=o)===null||e===void 0?void 0:e.transaction)return(r=o)===null||r===void 0?void 0:r.transaction;if((i=(n=o)===null||n===void 0?void 0:n.spanRecorder)===null||i===void 0?void 0:i.spans[0])return o.spanRecorder.spans[0]},t.prototype.setSession=function(e){return e?this._session=e:delete this._session,this._notifyScopeListeners(),this},t.prototype.getSession=function(){return this._session},t.prototype.update=function(e){if(!e)return this;if(typeof e=="function"){var r=e(this);return r instanceof t?r:this}return e instanceof t?(this._tags=M.__assign(M.__assign({},this._tags),e._tags),this._extra=M.__assign(M.__assign({},this._extra),e._extra),this._contexts=M.__assign(M.__assign({},this._contexts),e._contexts),e._user&&Object.keys(e._user).length&&(this._user=e._user),e._level&&(this._level=e._level),e._fingerprint&&(this._fingerprint=e._fingerprint),e._requestSession&&(this._requestSession=e._requestSession)):lr.isPlainObject(e)&&(e=e,this._tags=M.__assign(M.__assign({},this._tags),e.tags),this._extra=M.__assign(M.__assign({},this._extra),e.extra),this._contexts=M.__assign(M.__assign({},this._contexts),e.contexts),e.user&&(this._user=e.user),e.level&&(this._level=e.level),e.fingerprint&&(this._fingerprint=e.fingerprint),e.requestSession&&(this._requestSession=e.requestSession)),this},t.prototype.clear=function(){return this._breadcrumbs=[],this._tags={},this._extra={},this._user={},this._contexts={},this._level=void 0,this._transactionName=void 0,this._fingerprint=void 0,this._requestSession=void 0,this._span=void 0,this._session=void 0,this._notifyScopeListeners(),this},t.prototype.addBreadcrumb=function(e,r){var n=typeof r=="number"?Math.min(r,wu):wu;if(n<=0)return this;var i=M.__assign({timestamp:lr.dateTimestampInSeconds()},e);return this._breadcrumbs=M.__spread(this._breadcrumbs,[i]).slice(-n),this._notifyScopeListeners(),this},t.prototype.clearBreadcrumbs=function(){return this._breadcrumbs=[],this._notifyScopeListeners(),this},t.prototype.applyToEvent=function(e,r){var n;if(this._extra&&Object.keys(this._extra).length&&(e.extra=M.__assign(M.__assign({},this._extra),e.extra)),this._tags&&Object.keys(this._tags).length&&(e.tags=M.__assign(M.__assign({},this._tags),e.tags)),this._user&&Object.keys(this._user).length&&(e.user=M.__assign(M.__assign({},this._user),e.user)),this._contexts&&Object.keys(this._contexts).length&&(e.contexts=M.__assign(M.__assign({},this._contexts),e.contexts)),this._level&&(e.level=this._level),this._transactionName&&(e.transaction=this._transactionName),this._span){e.contexts=M.__assign({trace:this._span.getTraceContext()},e.contexts);var i=(n=this._span.transaction)===null||n===void 0?void 0:n.name;i&&(e.tags=M.__assign({transaction:i},e.tags))}return this._applyFingerprint(e),e.breadcrumbs=M.__spread(e.breadcrumbs||[],this._breadcrumbs),e.breadcrumbs=e.breadcrumbs.length>0?e.breadcrumbs:void 0,this._notifyEventProcessors(M.__spread(xu(),this._eventProcessors),e,r)},t.prototype._notifyEventProcessors=function(e,r,n,i){var o=this;return i===void 0&&(i=0),new lr.SyncPromise(function(a,s){var u=e[i];if(r===null||typeof u!="function")a(r);else{var c=u(M.__assign({},r),n);lr.isThenable(c)?c.then(function(l){return o._notifyEventProcessors(e,l,n,i+1).then(a)}).then(null,s):o._notifyEventProcessors(e,c,n,i+1).then(a).then(null,s)}})},t.prototype._notifyScopeListeners=function(){var e=this;this._notifyingListeners||(this._notifyingListeners=!0,this._scopeListeners.forEach(function(r){r(e)}),this._notifyingListeners=!1)},t.prototype._applyFingerprint=function(e){e.fingerprint=e.fingerprint?Array.isArray(e.fingerprint)?e.fingerprint:[e.fingerprint]:[],this._fingerprint&&(e.fingerprint=e.fingerprint.concat(this._fingerprint)),e.fingerprint&&!e.fingerprint.length&&delete e.fingerprint},t}();un.Scope=Fh;function xu(){var t=lr.getGlobalObject();return t.__SENTRY__=t.__SENTRY__||{},t.__SENTRY__.globalEventProcessors=t.__SENTRY__.globalEventProcessors||[],t.__SENTRY__.globalEventProcessors}function jh(t){xu().push(t)}un.addGlobalEventProcessor=jh});var Vi=b(zi=>{Object.defineProperty(zi,"__esModule",{value:!0});var Gi=ne(),Ht=P(),Hh=function(){function t(e){this.errors=0,this.sid=Ht.uuid4(),this.duration=0,this.status=Gi.SessionStatus.Ok,this.init=!0,this.ignoreDuration=!1;var r=Ht.timestampInSeconds();this.timestamp=r,this.started=r,e&&this.update(e)}return t.prototype.update=function(e){if(e===void 0&&(e={}),e.user&&(!this.ipAddress&&e.user.ip_address&&(this.ipAddress=e.user.ip_address),!this.did&&!e.did&&(this.did=e.user.id||e.user.email||e.user.username)),this.timestamp=e.timestamp||Ht.timestampInSeconds(),e.ignoreDuration&&(this.ignoreDuration=e.ignoreDuration),e.sid&&(this.sid=e.sid.length===32?e.sid:Ht.uuid4()),e.init!==void 0&&(this.init=e.init),!this.did&&e.did&&(this.did=""+e.did),typeof e.started=="number"&&(this.started=e.started),this.ignoreDuration)this.duration=void 0;else if(typeof e.duration=="number")this.duration=e.duration;else{var r=this.timestamp-this.started;this.duration=r>=0?r:0}e.release&&(this.release=e.release),e.environment&&(this.environment=e.environment),!this.ipAddress&&e.ipAddress&&(this.ipAddress=e.ipAddress),!this.userAgent&&e.userAgent&&(this.userAgent=e.userAgent),typeof e.errors=="number"&&(this.errors=e.errors),e.status&&(this.status=e.status)},t.prototype.close=function(e){e?this.update({status:e}):this.status===Gi.SessionStatus.Ok?this.update({status:Gi.SessionStatus.Exited}):this.update()},t.prototype.toJSON=function(){return Ht.dropUndefinedKeys({sid:""+this.sid,init:this.init,started:new Date(this.started*1e3).toISOString(),timestamp:new Date(this.timestamp*1e3).toISOString(),status:this.status,errors:this.errors,did:typeof this.did=="number"||typeof this.did=="string"?""+this.did:void 0,duration:this.duration,attrs:Ht.dropUndefinedKeys({release:this.release,environment:this.environment,ip_address:this.ipAddress,user_agent:this.userAgent})})},t}();zi.Session=Hh});var $i=b(_e=>{Object.defineProperty(_e,"__esModule",{value:!0});var Pe=N(),Iu=ne(),qe=P(),Wi=Bi(),Lh=Vi();_e.API_VERSION=4;var Uh=100,cn=function(){function t(e,r,n){r===void 0&&(r=new Wi.Scope),n===void 0&&(n=_e.API_VERSION),this._version=n,this._stack=[{}],this.getStackTop().scope=r,e&&this.bindClient(e)}return t.prototype.isOlderThan=function(e){return this._version<e},t.prototype.bindClient=function(e){var r=this.getStackTop();r.client=e,e&&e.setupIntegrations&&e.setupIntegrations()},t.prototype.pushScope=function(){var e=Wi.Scope.clone(this.getScope());return this.getStack().push({client:this.getClient(),scope:e}),e},t.prototype.popScope=function(){return this.getStack().length<=1?!1:!!this.getStack().pop()},t.prototype.withScope=function(e){var r=this.pushScope();try{e(r)}finally{this.popScope()}},t.prototype.getClient=function(){return this.getStackTop().client},t.prototype.getScope=function(){return this.getStackTop().scope},t.prototype.getStack=function(){return this._stack},t.prototype.getStackTop=function(){return this._stack[this._stack.length-1]},t.prototype.captureException=function(e,r){var n=this._lastEventId=qe.uuid4(),i=r;if(!r){var o=void 0;try{throw new Error("Sentry syntheticException")}catch(a){o=a}i={originalException:e,syntheticException:o}}return this._invokeClient("captureException",e,Pe.__assign(Pe.__assign({},i),{event_id:n})),n},t.prototype.captureMessage=function(e,r,n){var i=this._lastEventId=qe.uuid4(),o=n;if(!n){var a=void 0;try{throw new Error(e)}catch(s){a=s}o={originalException:e,syntheticException:a}}return this._invokeClient("captureMessage",e,r,Pe.__assign(Pe.__assign({},o),{event_id:i})),i},t.prototype.captureEvent=function(e,r){var n=qe.uuid4();return e.type!=="transaction"&&(this._lastEventId=n),this._invokeClient("captureEvent",e,Pe.__assign(Pe.__assign({},r),{event_id:n})),n},t.prototype.lastEventId=function(){return this._lastEventId},t.prototype.addBreadcrumb=function(e,r){var n=this.getStackTop(),i=n.scope,o=n.client;if(!(!i||!o)){var a=o.getOptions&&o.getOptions()||{},s=a.beforeBreadcrumb,u=s===void 0?null:s,c=a.maxBreadcrumbs,l=c===void 0?Uh:c;if(!(l<=0)){var d=qe.dateTimestampInSeconds(),h=Pe.__assign({timestamp:d},e),y=u?qe.consoleSandbox(function(){return u(h,r)}):h;y!==null&&i.addBreadcrumb(y,l)}}},t.prototype.setUser=function(e){var r=this.getScope();r&&r.setUser(e)},t.prototype.setTags=function(e){var r=this.getScope();r&&r.setTags(e)},t.prototype.setExtras=function(e){var r=this.getScope();r&&r.setExtras(e)},t.prototype.setTag=function(e,r){var n=this.getScope();n&&n.setTag(e,r)},t.prototype.setExtra=function(e,r){var n=this.getScope();n&&n.setExtra(e,r)},t.prototype.setContext=function(e,r){var n=this.getScope();n&&n.setContext(e,r)},t.prototype.configureScope=function(e){var r=this.getStackTop(),n=r.scope,i=r.client;n&&i&&e(n)},t.prototype.run=function(e){var r=Yi(this);try{e(this)}finally{Yi(r)}},t.prototype.getIntegration=function(e){var r=this.getClient();if(!r)return null;try{return r.getIntegration(e)}catch{return qe.logger.warn("Cannot retrieve integration "+e.id+" from the current Hub"),null}},t.prototype.startSpan=function(e){return this._callExtensionMethod("startSpan",e)},t.prototype.startTransaction=function(e,r){return this._callExtensionMethod("startTransaction",e,r)},t.prototype.traceHeaders=function(){return this._callExtensionMethod("traceHeaders")},t.prototype.captureSession=function(e){if(e===void 0&&(e=!1),e)return this.endSession();this._sendSessionUpdate()},t.prototype.endSession=function(){var e,r,n,i,o;(n=(r=(e=this.getStackTop())===null||e===void 0?void 0:e.scope)===null||r===void 0?void 0:r.getSession())===null||n===void 0||n.close(),this._sendSessionUpdate(),(o=(i=this.getStackTop())===null||i===void 0?void 0:i.scope)===null||o===void 0||o.setSession()},t.prototype.startSession=function(e){var r=this.getStackTop(),n=r.scope,i=r.client,o=i&&i.getOptions()||{},a=o.release,s=o.environment,u=qe.getGlobalObject(),c=(u.navigator||{}).userAgent,l=new Lh.Session(Pe.__assign(Pe.__assign(Pe.__assign({release:a,environment:s},n&&{user:n.getUser()}),c&&{userAgent:c}),e));if(n){var d=n.getSession&&n.getSession();d&&d.status===Iu.SessionStatus.Ok&&d.update({status:Iu.SessionStatus.Exited}),this.endSession(),n.setSession(l)}return l},t.prototype._sendSessionUpdate=function(){var e=this.getStackTop(),r=e.scope,n=e.client;if(!!r){var i=r.getSession&&r.getSession();i&&n&&n.captureSession&&n.captureSession(i)}},t.prototype._invokeClient=function(e){for(var r,n=[],i=1;i<arguments.length;i++)n[i-1]=arguments[i];var o=this.getStackTop(),a=o.scope,s=o.client;s&&s[e]&&(r=s)[e].apply(r,Pe.__spread(n,[a]))},t.prototype._callExtensionMethod=function(e){for(var r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];var i=Lt(),o=i.__SENTRY__;if(o&&o.extensions&&typeof o.extensions[e]=="function")return o.extensions[e].apply(this,r);qe.logger.warn("Extension method "+e+" couldn't be found, doing nothing.")},t}();_e.Hub=cn;function Lt(){var t=qe.getGlobalObject();return t.__SENTRY__=t.__SENTRY__||{extensions:{},hub:void 0},t}_e.getMainCarrier=Lt;function Yi(t){var e=Lt(),r=We(e);return fn(e,t),r}_e.makeMain=Yi;function Bh(){var t=Lt();return(!Cu(t)||We(t).isOlderThan(_e.API_VERSION))&&fn(t,new cn),qe.isNodeEnv()?zh(t):We(t)}_e.getCurrentHub=Bh;function Gh(){qe.logger.warn("Function `getActiveDomain` is deprecated and will be removed in a future version.");var t=Lt().__SENTRY__;return t&&t.extensions&&t.extensions.domain&&t.extensions.domain.active}_e.getActiveDomain=Gh;function zh(t){var e,r,n;try{var i=(n=(r=(e=Lt().__SENTRY__)===null||e===void 0?void 0:e.extensions)===null||r===void 0?void 0:r.domain)===null||n===void 0?void 0:n.active;if(!i)return We(t);if(!Cu(i)||We(i).isOlderThan(_e.API_VERSION)){var o=We(t).getStackTop();fn(i,new cn(o.client,Wi.Scope.clone(o.scope)))}return We(i)}catch{return We(t)}}function Cu(t){return!!(t&&t.__SENTRY__&&t.__SENTRY__.hub)}function We(t){return t&&t.__SENTRY__&&t.__SENTRY__.hub||(t.__SENTRY__=t.__SENTRY__||{},t.__SENTRY__.hub=new cn),t.__SENTRY__.hub}_e.getHubFromCarrier=We;function fn(t,e){return t?(t.__SENTRY__=t.__SENTRY__||{},t.__SENTRY__.hub=e,!0):!1}_e.setHubOnCarrier=fn});var Ru=b(Xi=>{Object.defineProperty(Xi,"__esModule",{value:!0});var Ki=ne(),Ji=P(),Vh=$i(),Wh=function(){function t(e,r){var n=this;this.flushTimeout=60,this._pendingAggregates={},this._isEnabled=!0,this._transport=e,this._intervalId=setInterval(function(){return n.flush()},this.flushTimeout*1e3),this._sessionAttrs=r}return t.prototype.sendSessionAggregates=function(e){if(!this._transport.sendSession){Ji.logger.warn("Dropping session because custom transport doesn't implement sendSession");return}this._transport.sendSession(e).then(null,function(r){Ji.logger.error("Error while sending session: "+r)})},t.prototype.flush=function(){var e=this.getSessionAggregates();e.aggregates.length!==0&&(this._pendingAggregates={},this.sendSessionAggregates(e))},t.prototype.getSessionAggregates=function(){var e=this,r=Object.keys(this._pendingAggregates).map(function(i){return e._pendingAggregates[parseInt(i)]}),n={attrs:this._sessionAttrs,aggregates:r};return Ji.dropUndefinedKeys(n)},t.prototype.close=function(){clearInterval(this._intervalId),this._isEnabled=!1,this.flush()},t.prototype.incrementSessionStatusCount=function(){var e,r;if(!!this._isEnabled){var n=Vh.getCurrentHub().getScope(),i=(e=n)===null||e===void 0?void 0:e.getRequestSession();i&&i.status&&(this._incrementSessionStatusCount(i.status,new Date),(r=n)===null||r===void 0||r.setRequestSession(void 0))}},t.prototype._incrementSessionStatusCount=function(e,r){var n=new Date(r).setSeconds(0,0);this._pendingAggregates[n]=this._pendingAggregates[n]||{};var i=this._pendingAggregates[n];switch(i.started||(i.started=new Date(n).toISOString()),e){case Ki.RequestSessionStatus.Errored:return i.errored=(i.errored||0)+1,i.errored;case Ki.RequestSessionStatus.Ok:return i.exited=(i.exited||0)+1,i.exited;case Ki.RequestSessionStatus.Crashed:return i.crashed=(i.crashed||0)+1,i.crashed}},t}();Xi.SessionFlusher=Wh});var ge=b(ve=>{Object.defineProperty(ve,"__esModule",{value:!0});var Au=Bi();ve.addGlobalEventProcessor=Au.addGlobalEventProcessor;ve.Scope=Au.Scope;var Yh=Vi();ve.Session=Yh.Session;var $h=Ru();ve.SessionFlusher=$h.SessionFlusher;var yt=$i();ve.getActiveDomain=yt.getActiveDomain;ve.getCurrentHub=yt.getCurrentHub;ve.getHubFromCarrier=yt.getHubFromCarrier;ve.getMainCarrier=yt.getMainCarrier;ve.Hub=yt.Hub;ve.makeMain=yt.makeMain;ve.setHubOnCarrier=yt.setHubOnCarrier});var Pu=b(se=>{Object.defineProperty(se,"__esModule",{value:!0});var ln=N(),Kh=ge();function de(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=Kh.getCurrentHub();if(n&&n[t])return n[t].apply(n,ln.__spread(e));throw new Error("No hub defined or "+t+" was not found on the hub, please open a bug report.")}function Jh(t,e){var r;try{throw new Error("Sentry syntheticException")}catch(n){r=n}return de("captureException",t,{captureContext:e,originalException:t,syntheticException:r})}se.captureException=Jh;function Xh(t,e){var r;try{throw new Error(t)}catch(o){r=o}var n=typeof e=="string"?e:void 0,i=typeof e!="string"?{captureContext:e}:void 0;return de("captureMessage",t,n,ln.__assign({originalException:t,syntheticException:r},i))}se.captureMessage=Xh;function Qh(t){return de("captureEvent",t)}se.captureEvent=Qh;function Zh(t){de("configureScope",t)}se.configureScope=Zh;function e_(t){de("addBreadcrumb",t)}se.addBreadcrumb=e_;function t_(t,e){de("setContext",t,e)}se.setContext=t_;function r_(t){de("setExtras",t)}se.setExtras=r_;function n_(t){de("setTags",t)}se.setTags=n_;function i_(t,e){de("setExtra",t,e)}se.setExtra=i_;function o_(t,e){de("setTag",t,e)}se.setTag=o_;function a_(t){de("setUser",t)}se.setUser=a_;function s_(t){de("withScope",t)}se.withScope=s_;function u_(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];de.apply(void 0,ln.__spread(["_invokeClient",t],e))}se._callOnClient=u_;function c_(t,e){return de("startTransaction",ln.__assign({},t),e)}se.startTransaction=c_});var Mu=b(Qi=>{Object.defineProperty(Qi,"__esModule",{value:!0});var qu=P(),Nu="7",f_=function(){function t(e,r,n){r===void 0&&(r={}),this.dsn=e,this._dsnObject=new qu.Dsn(e),this.metadata=r,this._tunnel=n}return t.prototype.getDsn=function(){return this._dsnObject},t.prototype.forceEnvelope=function(){return!!this._tunnel},t.prototype.getBaseApiEndpoint=function(){var e=this.getDsn(),r=e.protocol?e.protocol+":":"",n=e.port?":"+e.port:"";return r+"//"+e.host+n+(e.path?"/"+e.path:"")+"/api/"},t.prototype.getStoreEndpoint=function(){return this._getIngestEndpoint("store")},t.prototype.getStoreEndpointWithUrlEncodedAuth=function(){return this.getStoreEndpoint()+"?"+this._encodedAuth()},t.prototype.getEnvelopeEndpointWithUrlEncodedAuth=function(){return this.forceEnvelope()?this._tunnel:this._getEnvelopeEndpoint()+"?"+this._encodedAuth()},t.prototype.getStoreEndpointPath=function(){var e=this.getDsn();return(e.path?"/"+e.path:"")+"/api/"+e.projectId+"/store/"},t.prototype.getRequestHeaders=function(e,r){var n=this.getDsn(),i=["Sentry sentry_version="+Nu];return i.push("sentry_client="+e+"/"+r),i.push("sentry_key="+n.publicKey),n.pass&&i.push("sentry_secret="+n.pass),{"Content-Type":"application/json","X-Sentry-Auth":i.join(", ")}},t.prototype.getReportDialogEndpoint=function(e){e===void 0&&(e={});var r=this.getDsn(),n=this.getBaseApiEndpoint()+"embed/error-page/",i=[];i.push("dsn="+r.toString());for(var o in e)if(o!=="dsn")if(o==="user"){if(!e.user)continue;e.user.name&&i.push("name="+encodeURIComponent(e.user.name)),e.user.email&&i.push("email="+encodeURIComponent(e.user.email))}else i.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));return i.length?n+"?"+i.join("&"):n},t.prototype._getEnvelopeEndpoint=function(){return this._getIngestEndpoint("envelope")},t.prototype._getIngestEndpoint=function(e){if(this._tunnel)return this._tunnel;var r=this.getBaseApiEndpoint(),n=this.getDsn();return""+r+n.projectId+"/"+e+"/"},t.prototype._encodedAuth=function(){var e=this.getDsn(),r={sentry_key:e.publicKey,sentry_version:Nu};return qu.urlEncode(r)},t}();Qi.API=f_});var Hu=b(it=>{Object.defineProperty(it,"__esModule",{value:!0});var dn=N(),ku=ge(),l_=P();it.installedIntegrations=[];function Du(t){return t.reduce(function(e,r){return e.every(function(n){return r.name!==n.name})&&e.push(r),e},[])}function Fu(t){var e=t.defaultIntegrations&&dn.__spread(t.defaultIntegrations)||[],r=t.integrations,n=dn.__spread(Du(e));Array.isArray(r)?n=dn.__spread(n.filter(function(a){return r.every(function(s){return s.name!==a.name})}),Du(r)):typeof r=="function"&&(n=r(n),n=Array.isArray(n)?n:[n]);var i=n.map(function(a){return a.name}),o="Debug";return i.indexOf(o)!==-1&&n.push.apply(n,dn.__spread(n.splice(i.indexOf(o),1))),n}it.getIntegrationsToSetup=Fu;function ju(t){it.installedIntegrations.indexOf(t.name)===-1&&(t.setupOnce(ku.addGlobalEventProcessor,ku.getCurrentHub),it.installedIntegrations.push(t.name),l_.logger.log("Integration installed: "+t.name))}it.setupIntegration=ju;function d_(t){var e={};return Fu(t).forEach(function(r){e[r.name]=r,ju(r)}),Object.defineProperty(e,"initialized",{value:!0}),e}it.setupIntegrations=d_});var Uu=b(Zi=>{Object.defineProperty(Zi,"__esModule",{value:!0});var me=N(),p_=ge(),dr=ne(),L=P(),h_=Hu(),Lu="Not capturing exception because it's already been captured.",__=function(){function t(e,r){this._integrations={},this._numProcessing=0,this._backend=new e(r),this._options=r,r.dsn&&(this._dsn=new L.Dsn(r.dsn))}return t.prototype.captureException=function(e,r,n){var i=this;if(L.checkOrSetAlreadyCaught(e)){L.logger.log(Lu);return}var o=r&&r.event_id;return this._process(this._getBackend().eventFromException(e,r).then(function(a){return i._captureEvent(a,r,n)}).then(function(a){o=a})),o},t.prototype.captureMessage=function(e,r,n,i){var o=this,a=n&&n.event_id,s=L.isPrimitive(e)?this._getBackend().eventFromMessage(String(e),r,n):this._getBackend().eventFromException(e,n);return this._process(s.then(function(u){return o._captureEvent(u,n,i)}).then(function(u){a=u})),a},t.prototype.captureEvent=function(e,r,n){var i;if(((i=r)===null||i===void 0?void 0:i.originalException)&&L.checkOrSetAlreadyCaught(r.originalException)){L.logger.log(Lu);return}var o=r&&r.event_id;return this._process(this._captureEvent(e,r,n).then(function(a){o=a})),o},t.prototype.captureSession=function(e){if(!this._isEnabled()){L.logger.warn("SDK not enabled, will not capture session.");return}typeof e.release!="string"?L.logger.warn("Discarded session because of missing or non-string release"):(this._sendSession(e),e.update({init:!1}))},t.prototype.getDsn=function(){return this._dsn},t.prototype.getOptions=function(){return this._options},t.prototype.getTransport=function(){return this._getBackend().getTransport()},t.prototype.flush=function(e){var r=this;return this._isClientDoneProcessing(e).then(function(n){return r.getTransport().close(e).then(function(i){return n&&i})})},t.prototype.close=function(e){var r=this;return this.flush(e).then(function(n){return r.getOptions().enabled=!1,n})},t.prototype.setupIntegrations=function(){this._isEnabled()&&!this._integrations.initialized&&(this._integrations=h_.setupIntegrations(this._options))},t.prototype.getIntegration=function(e){try{return this._integrations[e.id]||null}catch{return L.logger.warn("Cannot retrieve integration "+e.id+" from the current Client"),null}},t.prototype._updateSessionFromEvent=function(e,r){var n,i,o=!1,a=!1,s=r.exception&&r.exception.values;if(s){a=!0;try{for(var u=me.__values(s),c=u.next();!c.done;c=u.next()){var l=c.value,d=l.mechanism;if(d&&d.handled===!1){o=!0;break}}}catch(S){n={error:S}}finally{try{c&&!c.done&&(i=u.return)&&i.call(u)}finally{if(n)throw n.error}}}var h=e.status===dr.SessionStatus.Ok,y=h&&e.errors===0||h&&o;y&&(e.update(me.__assign(me.__assign({},o&&{status:dr.SessionStatus.Crashed}),{errors:e.errors||Number(a||o)})),this.captureSession(e))},t.prototype._sendSession=function(e){this._getBackend().sendSession(e)},t.prototype._isClientDoneProcessing=function(e){var r=this;return new L.SyncPromise(function(n){var i=0,o=1,a=setInterval(function(){r._numProcessing==0?(clearInterval(a),n(!0)):(i+=o,e&&i>=e&&(clearInterval(a),n(!1)))},o)})},t.prototype._getBackend=function(){return this._backend},t.prototype._isEnabled=function(){return this.getOptions().enabled!==!1&&this._dsn!==void 0},t.prototype._prepareEvent=function(e,r,n){var i=this,o=this.getOptions().normalizeDepth,a=o===void 0?3:o,s=me.__assign(me.__assign({},e),{event_id:e.event_id||(n&&n.event_id?n.event_id:L.uuid4()),timestamp:e.timestamp||L.dateTimestampInSeconds()});this._applyClientOptions(s),this._applyIntegrationsMetadata(s);var u=r;n&&n.captureContext&&(u=p_.Scope.clone(u).update(n.captureContext));var c=L.SyncPromise.resolve(s);return u&&(c=u.applyToEvent(s,n)),c.then(function(l){return typeof a=="number"&&a>0?i._normalizeEvent(l,a):l})},t.prototype._normalizeEvent=function(e,r){if(!e)return null;var n=me.__assign(me.__assign(me.__assign(me.__assign(me.__assign({},e),e.breadcrumbs&&{breadcrumbs:e.breadcrumbs.map(function(a){return me.__assign(me.__assign({},a),a.data&&{data:L.normalize(a.data,r)})})}),e.user&&{user:L.normalize(e.user,r)}),e.contexts&&{contexts:L.normalize(e.contexts,r)}),e.extra&&{extra:L.normalize(e.extra,r)});e.contexts&&e.contexts.trace&&(n.contexts.trace=e.contexts.trace);var i=this.getOptions()._experiments,o=i===void 0?{}:i;return o.ensureNoCircularStructures?L.normalize(n):n},t.prototype._applyClientOptions=function(e){var r=this.getOptions(),n=r.environment,i=r.release,o=r.dist,a=r.maxValueLength,s=a===void 0?250:a;"environment"in e||(e.environment="environment"in r?n:"production"),e.release===void 0&&i!==void 0&&(e.release=i),e.dist===void 0&&o!==void 0&&(e.dist=o),e.message&&(e.message=L.truncate(e.message,s));var u=e.exception&&e.exception.values&&e.exception.values[0];u&&u.value&&(u.value=L.truncate(u.value,s));var c=e.request;c&&c.url&&(c.url=L.truncate(c.url,s))},t.prototype._applyIntegrationsMetadata=function(e){var r=Object.keys(this._integrations);r.length>0&&(e.sdk=e.sdk||{},e.sdk.integrations=me.__spread(e.sdk.integrations||[],r))},t.prototype._sendEvent=function(e){this._getBackend().sendEvent(e)},t.prototype._captureEvent=function(e,r,n){return this._processEvent(e,r,n).then(function(i){return i.event_id},function(i){L.logger.error(i)})},t.prototype._processEvent=function(e,r,n){var i=this,o,a,s=this.getOptions(),u=s.beforeSend,c=s.sampleRate,l=this.getTransport();if(!this._isEnabled())return L.SyncPromise.reject(new L.SentryError("SDK not enabled, will not capture event."));var d=e.type==="transaction";return!d&&typeof c=="number"&&Math.random()>c?((a=(o=l).recordLostEvent)===null||a===void 0||a.call(o,dr.Outcome.SampleRate,"event"),L.SyncPromise.reject(new L.SentryError("Discarding event because it's not included in the random sample (sampling rate = "+c+")"))):this._prepareEvent(e,n,r).then(function(h){var y,S;if(h===null)throw(S=(y=l).recordLostEvent)===null||S===void 0||S.call(y,dr.Outcome.EventProcessor,e.type||"event"),new L.SentryError("An event processor returned null, will not send event.");var T=r&&r.data&&r.data.__sentry__===!0;if(T||d||!u)return h;var C=u(h,r);return i._ensureBeforeSendRv(C)}).then(function(h){var y,S;if(h===null)throw(S=(y=l).recordLostEvent)===null||S===void 0||S.call(y,dr.Outcome.BeforeSend,e.type||"event"),new L.SentryError("`beforeSend` returned `null`, will not send event.");var T=n&&n.getSession&&n.getSession();return!d&&T&&i._updateSessionFromEvent(T,h),i._sendEvent(h),h}).then(null,function(h){throw h instanceof L.SentryError?h:(i.captureException(h,{data:{__sentry__:!0},originalException:h}),new L.SentryError(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.
11
- Reason: `+h))})},t.prototype._process=function(e){var r=this;this._numProcessing+=1,e.then(function(n){return r._numProcessing-=1,n},function(n){return r._numProcessing-=1,n})},t.prototype._ensureBeforeSendRv=function(e){var r="`beforeSend` method has to return `null` or a valid event.";if(L.isThenable(e))return e.then(function(n){if(!(L.isPlainObject(n)||n===null))throw new L.SentryError(r);return n},function(n){throw new L.SentryError("beforeSend rejected with "+n)});if(!(L.isPlainObject(e)||e===null))throw new L.SentryError(r);return e},t}();Zi.BaseClient=__});var to=b(eo=>{Object.defineProperty(eo,"__esModule",{value:!0});var v_=ne(),Bu=P(),g_=function(){function t(){}return t.prototype.sendEvent=function(e){return Bu.SyncPromise.resolve({reason:"NoopTransport: Event has been skipped because no Dsn is configured.",status:v_.Status.Skipped})},t.prototype.close=function(e){return Bu.SyncPromise.resolve(!0)},t}();eo.NoopTransport=g_});var Gu=b(ro=>{Object.defineProperty(ro,"__esModule",{value:!0});var Ut=P(),m_=to(),y_=function(){function t(e){this._options=e,this._options.dsn||Ut.logger.warn("No DSN provided, backend will not do anything."),this._transport=this._setupTransport()}return t.prototype.eventFromException=function(e,r){throw new Ut.SentryError("Backend has to implement `eventFromException` method")},t.prototype.eventFromMessage=function(e,r,n){throw new Ut.SentryError("Backend has to implement `eventFromMessage` method")},t.prototype.sendEvent=function(e){this._transport.sendEvent(e).then(null,function(r){Ut.logger.error("Error while sending event: "+r)})},t.prototype.sendSession=function(e){if(!this._transport.sendSession){Ut.logger.warn("Dropping session because custom transport doesn't implement sendSession");return}this._transport.sendSession(e).then(null,function(r){Ut.logger.error("Error while sending session: "+r)})},t.prototype.getTransport=function(){return this._transport},t.prototype._setupTransport=function(){return new m_.NoopTransport},t}();ro.BaseBackend=y_});var Vu=b(pn=>{Object.defineProperty(pn,"__esModule",{value:!0});var bt=N();function zu(t){if(!(!t.metadata||!t.metadata.sdk)){var e=t.metadata.sdk,r=e.name,n=e.version;return{name:r,version:n}}}function b_(t,e){return e&&(t.sdk=t.sdk||{},t.sdk.name=t.sdk.name||e.name,t.sdk.version=t.sdk.version||e.version,t.sdk.integrations=bt.__spread(t.sdk.integrations||[],e.integrations||[]),t.sdk.packages=bt.__spread(t.sdk.packages||[],e.packages||[])),t}function S_(t,e){var r=zu(e),n=JSON.stringify(bt.__assign(bt.__assign({sent_at:new Date().toISOString()},r&&{sdk:r}),e.forceEnvelope()&&{dsn:e.getDsn().toString()})),i="aggregates"in t?"sessions":"session",o=JSON.stringify({type:i});return{body:n+`
9
+ Name: `+Nv.getFunctionName(s)+`
10
+ Error: `+a)}}}catch(a){r={error:a}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}}function Dv(){"console"in K&&["debug","info","warn","error","log","assert"].forEach(function(t){t in K.console&&Ze.fill(K.console,t,function(e){return function(){for(var r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];Le("console",{args:r,level:t}),e&&Function.prototype.apply.call(e,K.console,r)}})})}function Lv(){!ac.supportsNativeFetch()||Ze.fill(K,"fetch",function(t){return function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var n={args:e,fetchData:{method:Fv(e),url:jv(e)},startTimestamp:Date.now()};return Le("fetch",er.__assign({},n)),t.apply(K,e).then(function(i){return Le("fetch",er.__assign(er.__assign({},n),{endTimestamp:Date.now(),response:i})),i},function(i){throw Le("fetch",er.__assign(er.__assign({},n),{endTimestamp:Date.now(),error:i})),i})}})}function Fv(t){return t===void 0&&(t=[]),"Request"in K&&In.isInstanceOf(t[0],Request)&&t[0].method?String(t[0].method).toUpperCase():t[1]&&t[1].method?String(t[1].method).toUpperCase():"GET"}function jv(t){return t===void 0&&(t=[]),typeof t[0]=="string"?t[0]:"Request"in K&&In.isInstanceOf(t[0],Request)?t[0].url:String(t[0])}function Uv(){if("XMLHttpRequest"in K){var t=[],e=[],r=XMLHttpRequest.prototype;Ze.fill(r,"open",function(n){return function(){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];var s=this,a=i[1];s.__sentry_xhr__={method:In.isString(i[0])?i[0].toUpperCase():i[0],url:i[1]},In.isString(a)&&s.__sentry_xhr__.method==="POST"&&a.match(/sentry_key/)&&(s.__sentry_own_request__=!0);var u=function(){if(s.readyState===4){try{s.__sentry_xhr__&&(s.__sentry_xhr__.status_code=s.status)}catch{}try{var c=t.indexOf(s);if(c!==-1){t.splice(c);var l=e.splice(c)[0];s.__sentry_xhr__&&l[0]!==void 0&&(s.__sentry_xhr__.body=l[0])}}catch{}Le("xhr",{args:i,endTimestamp:Date.now(),startTimestamp:Date.now(),xhr:s})}};return"onreadystatechange"in s&&typeof s.onreadystatechange=="function"?Ze.fill(s,"onreadystatechange",function(c){return function(){for(var l=[],d=0;d<arguments.length;d++)l[d]=arguments[d];return u(),c.apply(s,l)}}):s.addEventListener("readystatechange",u),n.apply(s,i)}}),Ze.fill(r,"send",function(n){return function(){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];return t.push(this),e.push(i),Le("xhr",{args:i,startTimestamp:Date.now(),xhr:this}),n.apply(this,i)}})}}var An;function Hv(){if(!ac.supportsHistory())return;var t=K.onpopstate;K.onpopstate=function(){for(var r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];var i=K.location.href,o=An;if(An=i,Le("history",{from:o,to:i}),t)try{return t.apply(this,r)}catch{}};function e(r){return function(){for(var n=[],i=0;i<arguments.length;i++)n[i]=arguments[i];var o=n.length>2?n[2]:void 0;if(o){var s=An,a=String(o);An=a,Le("history",{from:s,to:a})}return r.apply(this,n)}}Ze.fill(K.history,"pushState",e),Ze.fill(K.history,"replaceState",e)}var Bv=1e3,Mn,Pn;function Gv(t,e){if(!t||t.type!==e.type)return!0;try{if(t.target!==e.target)return!0}catch{}return!1}function zv(t){if(t.type!=="keypress")return!1;try{var e=t.target;if(!e||!e.tagName)return!0;if(e.tagName==="INPUT"||e.tagName==="TEXTAREA"||e.isContentEditable)return!1}catch{}return!0}function cc(t,e){return e===void 0&&(e=!1),function(r){if(!(!r||Pn===r)&&!zv(r)){var n=r.type==="keypress"?"input":r.type;Mn===void 0?(t({event:r,name:n,global:e}),Pn=r):Gv(Pn,r)&&(t({event:r,name:n,global:e}),Pn=r),clearTimeout(Mn),Mn=K.setTimeout(function(){Mn=void 0},Bv)}}}function Vv(){if("document"in K){var t=Le.bind(null,"dom"),e=cc(t,!0);K.document.addEventListener("click",e,!1),K.document.addEventListener("keypress",e,!1),["EventTarget","Node"].forEach(function(r){var n=K[r]&&K[r].prototype;!n||!n.hasOwnProperty||!n.hasOwnProperty("addEventListener")||(Ze.fill(n,"addEventListener",function(i){return function(o,s,a){if(o==="click"||o=="keypress")try{var u=this,c=u.__sentry_instrumentation_handlers__=u.__sentry_instrumentation_handlers__||{},l=c[o]=c[o]||{refCount:0};if(!l.handler){var d=cc(t);l.handler=d,i.call(this,o,d,a)}l.refCount+=1}catch{}return i.call(this,o,s,a)}}),Ze.fill(n,"removeEventListener",function(i){return function(o,s,a){if(o==="click"||o=="keypress")try{var u=this,c=u.__sentry_instrumentation_handlers__||{},l=c[o];l&&(l.refCount-=1,l.refCount<=0&&(i.call(this,o,l.handler,a),l.handler=void 0,delete c[o]),Object.keys(c).length===0&&delete u.__sentry_instrumentation_handlers__)}catch{}return i.call(this,o,s,a)}}))})}}var lo=null;function Wv(){lo=K.onerror,K.onerror=function(t,e,r,n,i){return Le("error",{column:n,error:i,line:r,msg:t,url:e}),lo?lo.apply(this,arguments):!1}}var fo=null;function $v(){fo=K.onunhandledrejection,K.onunhandledrejection=function(t){return Le("unhandledrejection",t),fo?fo.apply(this,arguments):!0}}});var dc=b(Me=>{Object.defineProperty(Me,"__esModule",{value:!0});var Mr=q(),Yv=pt(),ho=xn();function Kv(){var t=Yv.getGlobalObject(),e=t.crypto||t.msCrypto;if(e!==void 0&&e.getRandomValues){var r=new Uint16Array(8);e.getRandomValues(r),r[3]=r[3]&4095|16384,r[4]=r[4]&16383|32768;var n=function(i){for(var o=i.toString(16);o.length<4;)o="0"+o;return o};return n(r[0])+n(r[1])+n(r[2])+n(r[3])+n(r[4])+n(r[5])+n(r[6])+n(r[7])}return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,function(i){var o=Math.random()*16|0,s=i==="x"?o:o&3|8;return s.toString(16)})}Me.uuid4=Kv;function Jv(t){if(!t)return{};var e=t.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!e)return{};var r=e[6]||"",n=e[8]||"";return{host:e[4],path:e[5],protocol:e[2],relative:e[5]+r+n}}Me.parseUrl=Jv;function Xv(t){if(t.message)return t.message;if(t.exception&&t.exception.values&&t.exception.values[0]){var e=t.exception.values[0];return e.type&&e.value?e.type+": "+e.value:e.type||e.value||t.event_id||"<unknown>"}return t.event_id||"<unknown>"}Me.getEventDescription=Xv;function Qv(t,e,r){t.exception=t.exception||{},t.exception.values=t.exception.values||[],t.exception.values[0]=t.exception.values[0]||{},t.exception.values[0].value=t.exception.values[0].value||e||"",t.exception.values[0].type=t.exception.values[0].type||r||"Error"}Me.addExceptionTypeValue=Qv;function Zv(t,e){var r;if(!(!t.exception||!t.exception.values)){var n=t.exception.values[0],i={type:"generic",handled:!0},o=n.mechanism;if(n.mechanism=Mr.__assign(Mr.__assign(Mr.__assign({},i),o),e),e&&"data"in e){var s=Mr.__assign(Mr.__assign({},(r=o)===null||r===void 0?void 0:r.data),e.data);n.mechanism.data=s}}}Me.addExceptionMechanism=Zv;var e_=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;function t_(t){var e=t.match(e_)||[],r=parseInt(e[1],10),n=parseInt(e[2],10),i=parseInt(e[3],10);return{buildmetadata:e[5],major:isNaN(r)?void 0:r,minor:isNaN(n)?void 0:n,patch:isNaN(i)?void 0:i,prerelease:e[4]}}Me.parseSemver=t_;var fc=60*1e3;function r_(t,e){if(!e)return fc;var r=parseInt(""+e,10);if(!isNaN(r))return r*1e3;var n=Date.parse(""+e);return isNaN(n)?fc:n-t}Me.parseRetryAfterHeader=r_;function n_(t,e,r){r===void 0&&(r=5);var n=e.lineno||0,i=t.length,o=Math.max(Math.min(i,n-1),0);e.pre_context=t.slice(Math.max(0,o-r),o).map(function(s){return ho.snipLine(s,0)}),e.context_line=ho.snipLine(t[Math.min(i-1,o)],e.colno||0),e.post_context=t.slice(Math.min(o+1,i),o+1+r).map(function(s){return ho.snipLine(s,0)})}Me.addContextToFrame=n_;function i_(t){return t.split(/[\?#]/,1)[0]}Me.stripUrlQueryAndFragment=i_;function o_(t){var e;if((e=t)===null||e===void 0?void 0:e.__sentry_captured__)return!0;try{Object.defineProperty(t,"__sentry_captured__",{value:!0})}catch{}return!1}Me.checkOrSetAlreadyCaught=o_});var mc=b(et=>{Object.defineProperty(et,"__esModule",{value:!0});function pc(t,e){for(var r=0,n=t.length-1;n>=0;n--){var i=t[n];i==="."?t.splice(n,1):i===".."?(t.splice(n,1),r++):r&&(t.splice(n,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}var s_=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^/]+?|)(\.[^./]*|))(?:[/]*)$/;function hc(t){var e=s_.exec(t);return e?e.slice(1):[]}function vo(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];for(var r="",n=!1,i=t.length-1;i>=-1&&!n;i--){var o=i>=0?t[i]:"/";!o||(r=o+"/"+r,n=o.charAt(0)==="/")}return r=pc(r.split("/").filter(function(s){return!!s}),!n).join("/"),(n?"/":"")+r||"."}et.resolve=vo;function vc(t){for(var e=0;e<t.length&&t[e]==="";e++);for(var r=t.length-1;r>=0&&t[r]==="";r--);return e>r?[]:t.slice(e,r-e+1)}function a_(t,e){t=vo(t).substr(1),e=vo(e).substr(1);for(var r=vc(t.split("/")),n=vc(e.split("/")),i=Math.min(r.length,n.length),o=i,s=0;s<i;s++)if(r[s]!==n[s]){o=s;break}for(var a=[],s=o;s<r.length;s++)a.push("..");return a=a.concat(n.slice(o)),a.join("/")}et.relative=a_;function _c(t){var e=gc(t),r=t.substr(-1)==="/",n=pc(t.split("/").filter(function(i){return!!i}),!e).join("/");return!n&&!e&&(n="."),n&&r&&(n+="/"),(e?"/":"")+n}et.normalizePath=_c;function gc(t){return t.charAt(0)==="/"}et.isAbsolute=gc;function u_(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return _c(t.join("/"))}et.join=u_;function c_(t){var e=hc(t),r=e[0],n=e[1];return!r&&!n?".":(n&&(n=n.substr(0,n.length-1)),r+n)}et.dirname=c_;function l_(t,e){var r=hc(t)[2];return e&&r.substr(e.length*-1)===e&&(r=r.substr(0,r.length-e.length)),r}et.basename=l_});var go=b(_o=>{Object.defineProperty(_o,"__esModule",{value:!0});var f_=Rt(),d_=function(){function t(e){var r=this;this._state="PENDING",this._handlers=[],this._resolve=function(n){r._setResult("RESOLVED",n)},this._reject=function(n){r._setResult("REJECTED",n)},this._setResult=function(n,i){if(r._state==="PENDING"){if(f_.isThenable(i)){i.then(r._resolve,r._reject);return}r._state=n,r._value=i,r._executeHandlers()}},this._attachHandler=function(n){r._handlers=r._handlers.concat(n),r._executeHandlers()},this._executeHandlers=function(){if(r._state!=="PENDING"){var n=r._handlers.slice();r._handlers=[],n.forEach(function(i){i.done||(r._state==="RESOLVED"&&i.onfulfilled&&i.onfulfilled(r._value),r._state==="REJECTED"&&i.onrejected&&i.onrejected(r._value),i.done=!0)})}};try{e(this._resolve,this._reject)}catch(n){this._reject(n)}}return t.resolve=function(e){return new t(function(r){r(e)})},t.reject=function(e){return new t(function(r,n){n(e)})},t.all=function(e){return new t(function(r,n){if(!Array.isArray(e)){n(new TypeError("Promise.all requires an array as input."));return}if(e.length===0){r([]);return}var i=e.length,o=[];e.forEach(function(s,a){t.resolve(s).then(function(u){o[a]=u,i-=1,i===0&&r(o)}).then(null,n)})})},t.prototype.then=function(e,r){var n=this;return new t(function(i,o){n._attachHandler({done:!1,onfulfilled:function(s){if(!e){i(s);return}try{i(e(s));return}catch(a){o(a);return}},onrejected:function(s){if(!r){o(s);return}try{i(r(s));return}catch(a){o(a);return}}})})},t.prototype.catch=function(e){return this.then(function(r){return r},e)},t.prototype.finally=function(e){var r=this;return new t(function(n,i){var o,s;return r.then(function(a){s=!1,o=a,e&&e()},function(a){s=!0,o=a,e&&e()}).then(function(){if(s){i(o);return}n(o)})})},t.prototype.toString=function(){return"[object SyncPromise]"},t}();_o.SyncPromise=d_});var yc=b(yo=>{Object.defineProperty(yo,"__esModule",{value:!0});var p_=En(),mo=go(),h_=function(){function t(e){this._limit=e,this._buffer=[]}return t.prototype.isReady=function(){return this._limit===void 0||this.length()<this._limit},t.prototype.add=function(e){var r=this;if(!this.isReady())return mo.SyncPromise.reject(new p_.SentryError("Not adding Promise due to buffer limit reached."));var n=e();return this._buffer.indexOf(n)===-1&&this._buffer.push(n),n.then(function(){return r.remove(n)}).then(null,function(){return r.remove(n).then(null,function(){})}),n},t.prototype.remove=function(e){var r=this._buffer.splice(this._buffer.indexOf(e),1)[0];return r},t.prototype.length=function(){return this._buffer.length},t.prototype.drain=function(e){var r=this;return new mo.SyncPromise(function(n){var i=setTimeout(function(){e&&e>0&&n(!1)},e);mo.SyncPromise.all(r._buffer).then(function(){clearTimeout(i),n(!0)}).then(null,function(){n(!0)})})},t}();yo.PromiseBuffer=h_});var wc=b((Pe,Tc)=>{Object.defineProperty(Pe,"__esModule",{value:!0});var bc=pt(),Sc=yn(),bo={nowSeconds:function(){return Date.now()/1e3}};function v_(){var t=bc.getGlobalObject().performance;if(!(!t||!t.now)){var e=Date.now()-t.now();return{now:function(){return t.now()},timeOrigin:e}}}function __(){try{var t=Sc.dynamicRequire(Tc,"perf_hooks");return t.performance}catch{return}}var Nn=Sc.isNodeEnv()?__():v_(),Ec=Nn===void 0?bo:{nowSeconds:function(){return(Nn.timeOrigin+Nn.now())/1e3}};Pe.dateTimestampInSeconds=bo.nowSeconds.bind(bo);Pe.timestampInSeconds=Ec.nowSeconds.bind(Ec);Pe.timestampWithMs=Pe.timestampInSeconds;Pe.usingPerformanceAPI=Nn!==void 0;Pe.browserPerformanceTimeOrigin=function(){var t=bc.getGlobalObject().performance;if(!t||!t.now){Pe._browserPerformanceTimeOriginMode="none";return}var e=3600*1e3,r=t.now(),n=Date.now(),i=t.timeOrigin?Math.abs(t.timeOrigin+r-n):e,o=i<e,s=t.timing&&t.timing.navigationStart,a=typeof s=="number",u=a?Math.abs(s+r-n):e,c=u<e;return o||c?i<=u?(Pe._browserPerformanceTimeOriginMode="timeOrigin",t.timeOrigin):(Pe._browserPerformanceTimeOriginMode="navigationStart",s):(Pe._browserPerformanceTimeOriginMode="dateNow",n)}()});var N=b(X=>{Object.defineProperty(X,"__esModule",{value:!0});var te=q();te.__exportStar(Yu(),X);te.__exportStar(Ki(),X);te.__exportStar(Xu(),X);te.__exportStar(En(),X);te.__exportStar(pt(),X);te.__exportStar(lc(),X);te.__exportStar(Rt(),X);te.__exportStar(On(),X);te.__exportStar(to(),X);te.__exportStar(dc(),X);te.__exportStar(yn(),X);te.__exportStar(so(),X);te.__exportStar(mc(),X);te.__exportStar(yc(),X);te.__exportStar(Cn(),X);te.__exportStar(xn(),X);te.__exportStar(co(),X);te.__exportStar(go(),X);te.__exportStar(wc(),X)});var So=b(qn=>{Object.defineProperty(qn,"__esModule",{value:!0});var D=q(),Pr=N(),Oc=100,g_=function(){function t(){this._notifyingListeners=!1,this._scopeListeners=[],this._eventProcessors=[],this._breadcrumbs=[],this._user={},this._tags={},this._extra={},this._contexts={}}return t.clone=function(e){var r=new t;return e&&(r._breadcrumbs=D.__spread(e._breadcrumbs),r._tags=D.__assign({},e._tags),r._extra=D.__assign({},e._extra),r._contexts=D.__assign({},e._contexts),r._user=e._user,r._level=e._level,r._span=e._span,r._session=e._session,r._transactionName=e._transactionName,r._fingerprint=e._fingerprint,r._eventProcessors=D.__spread(e._eventProcessors),r._requestSession=e._requestSession),r},t.prototype.addScopeListener=function(e){this._scopeListeners.push(e)},t.prototype.addEventProcessor=function(e){return this._eventProcessors.push(e),this},t.prototype.setUser=function(e){return this._user=e||{},this._session&&this._session.update({user:e}),this._notifyScopeListeners(),this},t.prototype.getUser=function(){return this._user},t.prototype.getRequestSession=function(){return this._requestSession},t.prototype.setRequestSession=function(e){return this._requestSession=e,this},t.prototype.setTags=function(e){return this._tags=D.__assign(D.__assign({},this._tags),e),this._notifyScopeListeners(),this},t.prototype.setTag=function(e,r){var n;return this._tags=D.__assign(D.__assign({},this._tags),(n={},n[e]=r,n)),this._notifyScopeListeners(),this},t.prototype.setExtras=function(e){return this._extra=D.__assign(D.__assign({},this._extra),e),this._notifyScopeListeners(),this},t.prototype.setExtra=function(e,r){var n;return this._extra=D.__assign(D.__assign({},this._extra),(n={},n[e]=r,n)),this._notifyScopeListeners(),this},t.prototype.setFingerprint=function(e){return this._fingerprint=e,this._notifyScopeListeners(),this},t.prototype.setLevel=function(e){return this._level=e,this._notifyScopeListeners(),this},t.prototype.setTransactionName=function(e){return this._transactionName=e,this._notifyScopeListeners(),this},t.prototype.setTransaction=function(e){return this.setTransactionName(e)},t.prototype.setContext=function(e,r){var n;return r===null?delete this._contexts[e]:this._contexts=D.__assign(D.__assign({},this._contexts),(n={},n[e]=r,n)),this._notifyScopeListeners(),this},t.prototype.setSpan=function(e){return this._span=e,this._notifyScopeListeners(),this},t.prototype.getSpan=function(){return this._span},t.prototype.getTransaction=function(){var e,r,n,i,o=this.getSpan();if((e=o)===null||e===void 0?void 0:e.transaction)return(r=o)===null||r===void 0?void 0:r.transaction;if((i=(n=o)===null||n===void 0?void 0:n.spanRecorder)===null||i===void 0?void 0:i.spans[0])return o.spanRecorder.spans[0]},t.prototype.setSession=function(e){return e?this._session=e:delete this._session,this._notifyScopeListeners(),this},t.prototype.getSession=function(){return this._session},t.prototype.update=function(e){if(!e)return this;if(typeof e=="function"){var r=e(this);return r instanceof t?r:this}return e instanceof t?(this._tags=D.__assign(D.__assign({},this._tags),e._tags),this._extra=D.__assign(D.__assign({},this._extra),e._extra),this._contexts=D.__assign(D.__assign({},this._contexts),e._contexts),e._user&&Object.keys(e._user).length&&(this._user=e._user),e._level&&(this._level=e._level),e._fingerprint&&(this._fingerprint=e._fingerprint),e._requestSession&&(this._requestSession=e._requestSession)):Pr.isPlainObject(e)&&(e=e,this._tags=D.__assign(D.__assign({},this._tags),e.tags),this._extra=D.__assign(D.__assign({},this._extra),e.extra),this._contexts=D.__assign(D.__assign({},this._contexts),e.contexts),e.user&&(this._user=e.user),e.level&&(this._level=e.level),e.fingerprint&&(this._fingerprint=e.fingerprint),e.requestSession&&(this._requestSession=e.requestSession)),this},t.prototype.clear=function(){return this._breadcrumbs=[],this._tags={},this._extra={},this._user={},this._contexts={},this._level=void 0,this._transactionName=void 0,this._fingerprint=void 0,this._requestSession=void 0,this._span=void 0,this._session=void 0,this._notifyScopeListeners(),this},t.prototype.addBreadcrumb=function(e,r){var n=typeof r=="number"?Math.min(r,Oc):Oc;if(n<=0)return this;var i=D.__assign({timestamp:Pr.dateTimestampInSeconds()},e);return this._breadcrumbs=D.__spread(this._breadcrumbs,[i]).slice(-n),this._notifyScopeListeners(),this},t.prototype.clearBreadcrumbs=function(){return this._breadcrumbs=[],this._notifyScopeListeners(),this},t.prototype.applyToEvent=function(e,r){var n;if(this._extra&&Object.keys(this._extra).length&&(e.extra=D.__assign(D.__assign({},this._extra),e.extra)),this._tags&&Object.keys(this._tags).length&&(e.tags=D.__assign(D.__assign({},this._tags),e.tags)),this._user&&Object.keys(this._user).length&&(e.user=D.__assign(D.__assign({},this._user),e.user)),this._contexts&&Object.keys(this._contexts).length&&(e.contexts=D.__assign(D.__assign({},this._contexts),e.contexts)),this._level&&(e.level=this._level),this._transactionName&&(e.transaction=this._transactionName),this._span){e.contexts=D.__assign({trace:this._span.getTraceContext()},e.contexts);var i=(n=this._span.transaction)===null||n===void 0?void 0:n.name;i&&(e.tags=D.__assign({transaction:i},e.tags))}return this._applyFingerprint(e),e.breadcrumbs=D.__spread(e.breadcrumbs||[],this._breadcrumbs),e.breadcrumbs=e.breadcrumbs.length>0?e.breadcrumbs:void 0,this._notifyEventProcessors(D.__spread(Cc(),this._eventProcessors),e,r)},t.prototype._notifyEventProcessors=function(e,r,n,i){var o=this;return i===void 0&&(i=0),new Pr.SyncPromise(function(s,a){var u=e[i];if(r===null||typeof u!="function")s(r);else{var c=u(D.__assign({},r),n);Pr.isThenable(c)?c.then(function(l){return o._notifyEventProcessors(e,l,n,i+1).then(s)}).then(null,a):o._notifyEventProcessors(e,c,n,i+1).then(s).then(null,a)}})},t.prototype._notifyScopeListeners=function(){var e=this;this._notifyingListeners||(this._notifyingListeners=!0,this._scopeListeners.forEach(function(r){r(e)}),this._notifyingListeners=!1)},t.prototype._applyFingerprint=function(e){e.fingerprint=e.fingerprint?Array.isArray(e.fingerprint)?e.fingerprint:[e.fingerprint]:[],this._fingerprint&&(e.fingerprint=e.fingerprint.concat(this._fingerprint)),e.fingerprint&&!e.fingerprint.length&&delete e.fingerprint},t}();qn.Scope=g_;function Cc(){var t=Pr.getGlobalObject();return t.__SENTRY__=t.__SENTRY__||{},t.__SENTRY__.globalEventProcessors=t.__SENTRY__.globalEventProcessors||[],t.__SENTRY__.globalEventProcessors}function m_(t){Cc().push(t)}qn.addGlobalEventProcessor=m_});var wo=b(To=>{Object.defineProperty(To,"__esModule",{value:!0});var Eo=se(),tr=N(),y_=function(){function t(e){this.errors=0,this.sid=tr.uuid4(),this.duration=0,this.status=Eo.SessionStatus.Ok,this.init=!0,this.ignoreDuration=!1;var r=tr.timestampInSeconds();this.timestamp=r,this.started=r,e&&this.update(e)}return t.prototype.update=function(e){if(e===void 0&&(e={}),e.user&&(!this.ipAddress&&e.user.ip_address&&(this.ipAddress=e.user.ip_address),!this.did&&!e.did&&(this.did=e.user.id||e.user.email||e.user.username)),this.timestamp=e.timestamp||tr.timestampInSeconds(),e.ignoreDuration&&(this.ignoreDuration=e.ignoreDuration),e.sid&&(this.sid=e.sid.length===32?e.sid:tr.uuid4()),e.init!==void 0&&(this.init=e.init),!this.did&&e.did&&(this.did=""+e.did),typeof e.started=="number"&&(this.started=e.started),this.ignoreDuration)this.duration=void 0;else if(typeof e.duration=="number")this.duration=e.duration;else{var r=this.timestamp-this.started;this.duration=r>=0?r:0}e.release&&(this.release=e.release),e.environment&&(this.environment=e.environment),!this.ipAddress&&e.ipAddress&&(this.ipAddress=e.ipAddress),!this.userAgent&&e.userAgent&&(this.userAgent=e.userAgent),typeof e.errors=="number"&&(this.errors=e.errors),e.status&&(this.status=e.status)},t.prototype.close=function(e){e?this.update({status:e}):this.status===Eo.SessionStatus.Ok?this.update({status:Eo.SessionStatus.Exited}):this.update()},t.prototype.toJSON=function(){return tr.dropUndefinedKeys({sid:""+this.sid,init:this.init,started:new Date(this.started*1e3).toISOString(),timestamp:new Date(this.timestamp*1e3).toISOString(),status:this.status,errors:this.errors,did:typeof this.did=="number"||typeof this.did=="string"?""+this.did:void 0,duration:this.duration,attrs:tr.dropUndefinedKeys({release:this.release,environment:this.environment,ip_address:this.ipAddress,user_agent:this.userAgent})})},t}();To.Session=y_});var xo=b(be=>{Object.defineProperty(be,"__esModule",{value:!0});var Fe=q(),xc=se(),je=N(),Oo=So(),b_=wo();be.API_VERSION=4;var S_=100,kn=function(){function t(e,r,n){r===void 0&&(r=new Oo.Scope),n===void 0&&(n=be.API_VERSION),this._version=n,this._stack=[{}],this.getStackTop().scope=r,e&&this.bindClient(e)}return t.prototype.isOlderThan=function(e){return this._version<e},t.prototype.bindClient=function(e){var r=this.getStackTop();r.client=e,e&&e.setupIntegrations&&e.setupIntegrations()},t.prototype.pushScope=function(){var e=Oo.Scope.clone(this.getScope());return this.getStack().push({client:this.getClient(),scope:e}),e},t.prototype.popScope=function(){return this.getStack().length<=1?!1:!!this.getStack().pop()},t.prototype.withScope=function(e){var r=this.pushScope();try{e(r)}finally{this.popScope()}},t.prototype.getClient=function(){return this.getStackTop().client},t.prototype.getScope=function(){return this.getStackTop().scope},t.prototype.getStack=function(){return this._stack},t.prototype.getStackTop=function(){return this._stack[this._stack.length-1]},t.prototype.captureException=function(e,r){var n=this._lastEventId=je.uuid4(),i=r;if(!r){var o=void 0;try{throw new Error("Sentry syntheticException")}catch(s){o=s}i={originalException:e,syntheticException:o}}return this._invokeClient("captureException",e,Fe.__assign(Fe.__assign({},i),{event_id:n})),n},t.prototype.captureMessage=function(e,r,n){var i=this._lastEventId=je.uuid4(),o=n;if(!n){var s=void 0;try{throw new Error(e)}catch(a){s=a}o={originalException:e,syntheticException:s}}return this._invokeClient("captureMessage",e,r,Fe.__assign(Fe.__assign({},o),{event_id:i})),i},t.prototype.captureEvent=function(e,r){var n=je.uuid4();return e.type!=="transaction"&&(this._lastEventId=n),this._invokeClient("captureEvent",e,Fe.__assign(Fe.__assign({},r),{event_id:n})),n},t.prototype.lastEventId=function(){return this._lastEventId},t.prototype.addBreadcrumb=function(e,r){var n=this.getStackTop(),i=n.scope,o=n.client;if(!(!i||!o)){var s=o.getOptions&&o.getOptions()||{},a=s.beforeBreadcrumb,u=a===void 0?null:a,c=s.maxBreadcrumbs,l=c===void 0?S_:c;if(!(l<=0)){var d=je.dateTimestampInSeconds(),h=Fe.__assign({timestamp:d},e),_=u?je.consoleSandbox(function(){return u(h,r)}):h;_!==null&&i.addBreadcrumb(_,l)}}},t.prototype.setUser=function(e){var r=this.getScope();r&&r.setUser(e)},t.prototype.setTags=function(e){var r=this.getScope();r&&r.setTags(e)},t.prototype.setExtras=function(e){var r=this.getScope();r&&r.setExtras(e)},t.prototype.setTag=function(e,r){var n=this.getScope();n&&n.setTag(e,r)},t.prototype.setExtra=function(e,r){var n=this.getScope();n&&n.setExtra(e,r)},t.prototype.setContext=function(e,r){var n=this.getScope();n&&n.setContext(e,r)},t.prototype.configureScope=function(e){var r=this.getStackTop(),n=r.scope,i=r.client;n&&i&&e(n)},t.prototype.run=function(e){var r=Co(this);try{e(this)}finally{Co(r)}},t.prototype.getIntegration=function(e){var r=this.getClient();if(!r)return null;try{return r.getIntegration(e)}catch{return je.logger.warn("Cannot retrieve integration "+e.id+" from the current Hub"),null}},t.prototype.startSpan=function(e){return this._callExtensionMethod("startSpan",e)},t.prototype.startTransaction=function(e,r){return this._callExtensionMethod("startTransaction",e,r)},t.prototype.traceHeaders=function(){return this._callExtensionMethod("traceHeaders")},t.prototype.captureSession=function(e){if(e===void 0&&(e=!1),e)return this.endSession();this._sendSessionUpdate()},t.prototype.endSession=function(){var e,r,n,i,o;(n=(r=(e=this.getStackTop())===null||e===void 0?void 0:e.scope)===null||r===void 0?void 0:r.getSession())===null||n===void 0||n.close(),this._sendSessionUpdate(),(o=(i=this.getStackTop())===null||i===void 0?void 0:i.scope)===null||o===void 0||o.setSession()},t.prototype.startSession=function(e){var r=this.getStackTop(),n=r.scope,i=r.client,o=i&&i.getOptions()||{},s=o.release,a=o.environment,u=je.getGlobalObject(),c=(u.navigator||{}).userAgent,l=new b_.Session(Fe.__assign(Fe.__assign(Fe.__assign({release:s,environment:a},n&&{user:n.getUser()}),c&&{userAgent:c}),e));if(n){var d=n.getSession&&n.getSession();d&&d.status===xc.SessionStatus.Ok&&d.update({status:xc.SessionStatus.Exited}),this.endSession(),n.setSession(l)}return l},t.prototype._sendSessionUpdate=function(){var e=this.getStackTop(),r=e.scope,n=e.client;if(!!r){var i=r.getSession&&r.getSession();i&&n&&n.captureSession&&n.captureSession(i)}},t.prototype._invokeClient=function(e){for(var r,n=[],i=1;i<arguments.length;i++)n[i-1]=arguments[i];var o=this.getStackTop(),s=o.scope,a=o.client;a&&a[e]&&(r=a)[e].apply(r,Fe.__spread(n,[s]))},t.prototype._callExtensionMethod=function(e){for(var r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];var i=rr(),o=i.__SENTRY__;if(o&&o.extensions&&typeof o.extensions[e]=="function")return o.extensions[e].apply(this,r);je.logger.warn("Extension method "+e+" couldn't be found, doing nothing.")},t}();be.Hub=kn;function rr(){var t=je.getGlobalObject();return t.__SENTRY__=t.__SENTRY__||{extensions:{},hub:void 0},t}be.getMainCarrier=rr;function Co(t){var e=rr(),r=tt(e);return Dn(e,t),r}be.makeMain=Co;function E_(){var t=rr();return(!Rc(t)||tt(t).isOlderThan(be.API_VERSION))&&Dn(t,new kn),je.isNodeEnv()?w_(t):tt(t)}be.getCurrentHub=E_;function T_(){je.logger.warn("Function `getActiveDomain` is deprecated and will be removed in a future version.");var t=rr().__SENTRY__;return t&&t.extensions&&t.extensions.domain&&t.extensions.domain.active}be.getActiveDomain=T_;function w_(t){var e,r,n;try{var i=(n=(r=(e=rr().__SENTRY__)===null||e===void 0?void 0:e.extensions)===null||r===void 0?void 0:r.domain)===null||n===void 0?void 0:n.active;if(!i)return tt(t);if(!Rc(i)||tt(i).isOlderThan(be.API_VERSION)){var o=tt(t).getStackTop();Dn(i,new kn(o.client,Oo.Scope.clone(o.scope)))}return tt(i)}catch{return tt(t)}}function Rc(t){return!!(t&&t.__SENTRY__&&t.__SENTRY__.hub)}function tt(t){return t&&t.__SENTRY__&&t.__SENTRY__.hub||(t.__SENTRY__=t.__SENTRY__||{},t.__SENTRY__.hub=new kn),t.__SENTRY__.hub}be.getHubFromCarrier=tt;function Dn(t,e){return t?(t.__SENTRY__=t.__SENTRY__||{},t.__SENTRY__.hub=e,!0):!1}be.setHubOnCarrier=Dn});var Ic=b(Ao=>{Object.defineProperty(Ao,"__esModule",{value:!0});var Ro=se(),Io=N(),O_=xo(),C_=function(){function t(e,r){var n=this;this.flushTimeout=60,this._pendingAggregates={},this._isEnabled=!0,this._transport=e,this._intervalId=setInterval(function(){return n.flush()},this.flushTimeout*1e3),this._sessionAttrs=r}return t.prototype.sendSessionAggregates=function(e){if(!this._transport.sendSession){Io.logger.warn("Dropping session because custom transport doesn't implement sendSession");return}this._transport.sendSession(e).then(null,function(r){Io.logger.error("Error while sending session: "+r)})},t.prototype.flush=function(){var e=this.getSessionAggregates();e.aggregates.length!==0&&(this._pendingAggregates={},this.sendSessionAggregates(e))},t.prototype.getSessionAggregates=function(){var e=this,r=Object.keys(this._pendingAggregates).map(function(i){return e._pendingAggregates[parseInt(i)]}),n={attrs:this._sessionAttrs,aggregates:r};return Io.dropUndefinedKeys(n)},t.prototype.close=function(){clearInterval(this._intervalId),this._isEnabled=!1,this.flush()},t.prototype.incrementSessionStatusCount=function(){var e,r;if(!!this._isEnabled){var n=O_.getCurrentHub().getScope(),i=(e=n)===null||e===void 0?void 0:e.getRequestSession();i&&i.status&&(this._incrementSessionStatusCount(i.status,new Date),(r=n)===null||r===void 0||r.setRequestSession(void 0))}},t.prototype._incrementSessionStatusCount=function(e,r){var n=new Date(r).setSeconds(0,0);this._pendingAggregates[n]=this._pendingAggregates[n]||{};var i=this._pendingAggregates[n];switch(i.started||(i.started=new Date(n).toISOString()),e){case Ro.RequestSessionStatus.Errored:return i.errored=(i.errored||0)+1,i.errored;case Ro.RequestSessionStatus.Ok:return i.exited=(i.exited||0)+1,i.exited;case Ro.RequestSessionStatus.Crashed:return i.crashed=(i.crashed||0)+1,i.crashed}},t}();Ao.SessionFlusher=C_});var Ee=b(Se=>{Object.defineProperty(Se,"__esModule",{value:!0});var Ac=So();Se.addGlobalEventProcessor=Ac.addGlobalEventProcessor;Se.Scope=Ac.Scope;var x_=wo();Se.Session=x_.Session;var R_=Ic();Se.SessionFlusher=R_.SessionFlusher;var Mt=xo();Se.getActiveDomain=Mt.getActiveDomain;Se.getCurrentHub=Mt.getCurrentHub;Se.getHubFromCarrier=Mt.getHubFromCarrier;Se.getMainCarrier=Mt.getMainCarrier;Se.Hub=Mt.Hub;Se.makeMain=Mt.makeMain;Se.setHubOnCarrier=Mt.setHubOnCarrier});var Mc=b(fe=>{Object.defineProperty(fe,"__esModule",{value:!0});var Ln=q(),I_=Ee();function ge(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=I_.getCurrentHub();if(n&&n[t])return n[t].apply(n,Ln.__spread(e));throw new Error("No hub defined or "+t+" was not found on the hub, please open a bug report.")}function A_(t,e){var r;try{throw new Error("Sentry syntheticException")}catch(n){r=n}return ge("captureException",t,{captureContext:e,originalException:t,syntheticException:r})}fe.captureException=A_;function M_(t,e){var r;try{throw new Error(t)}catch(o){r=o}var n=typeof e=="string"?e:void 0,i=typeof e!="string"?{captureContext:e}:void 0;return ge("captureMessage",t,n,Ln.__assign({originalException:t,syntheticException:r},i))}fe.captureMessage=M_;function P_(t){return ge("captureEvent",t)}fe.captureEvent=P_;function N_(t){ge("configureScope",t)}fe.configureScope=N_;function q_(t){ge("addBreadcrumb",t)}fe.addBreadcrumb=q_;function k_(t,e){ge("setContext",t,e)}fe.setContext=k_;function D_(t){ge("setExtras",t)}fe.setExtras=D_;function L_(t){ge("setTags",t)}fe.setTags=L_;function F_(t,e){ge("setExtra",t,e)}fe.setExtra=F_;function j_(t,e){ge("setTag",t,e)}fe.setTag=j_;function U_(t){ge("setUser",t)}fe.setUser=U_;function H_(t){ge("withScope",t)}fe.withScope=H_;function B_(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];ge.apply(void 0,Ln.__spread(["_invokeClient",t],e))}fe._callOnClient=B_;function G_(t,e){return ge("startTransaction",Ln.__assign({},t),e)}fe.startTransaction=G_});var qc=b(Mo=>{Object.defineProperty(Mo,"__esModule",{value:!0});var Pc=N(),Nc="7",z_=function(){function t(e,r,n){r===void 0&&(r={}),this.dsn=e,this._dsnObject=new Pc.Dsn(e),this.metadata=r,this._tunnel=n}return t.prototype.getDsn=function(){return this._dsnObject},t.prototype.forceEnvelope=function(){return!!this._tunnel},t.prototype.getBaseApiEndpoint=function(){var e=this.getDsn(),r=e.protocol?e.protocol+":":"",n=e.port?":"+e.port:"";return r+"//"+e.host+n+(e.path?"/"+e.path:"")+"/api/"},t.prototype.getStoreEndpoint=function(){return this._getIngestEndpoint("store")},t.prototype.getStoreEndpointWithUrlEncodedAuth=function(){return this.getStoreEndpoint()+"?"+this._encodedAuth()},t.prototype.getEnvelopeEndpointWithUrlEncodedAuth=function(){return this.forceEnvelope()?this._tunnel:this._getEnvelopeEndpoint()+"?"+this._encodedAuth()},t.prototype.getStoreEndpointPath=function(){var e=this.getDsn();return(e.path?"/"+e.path:"")+"/api/"+e.projectId+"/store/"},t.prototype.getRequestHeaders=function(e,r){var n=this.getDsn(),i=["Sentry sentry_version="+Nc];return i.push("sentry_client="+e+"/"+r),i.push("sentry_key="+n.publicKey),n.pass&&i.push("sentry_secret="+n.pass),{"Content-Type":"application/json","X-Sentry-Auth":i.join(", ")}},t.prototype.getReportDialogEndpoint=function(e){e===void 0&&(e={});var r=this.getDsn(),n=this.getBaseApiEndpoint()+"embed/error-page/",i=[];i.push("dsn="+r.toString());for(var o in e)if(o!=="dsn")if(o==="user"){if(!e.user)continue;e.user.name&&i.push("name="+encodeURIComponent(e.user.name)),e.user.email&&i.push("email="+encodeURIComponent(e.user.email))}else i.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));return i.length?n+"?"+i.join("&"):n},t.prototype._getEnvelopeEndpoint=function(){return this._getIngestEndpoint("envelope")},t.prototype._getIngestEndpoint=function(e){if(this._tunnel)return this._tunnel;var r=this.getBaseApiEndpoint(),n=this.getDsn();return""+r+n.projectId+"/"+e+"/"},t.prototype._encodedAuth=function(){var e=this.getDsn(),r={sentry_key:e.publicKey,sentry_version:Nc};return Pc.urlEncode(r)},t}();Mo.API=z_});var jc=b(ht=>{Object.defineProperty(ht,"__esModule",{value:!0});var Fn=q(),kc=Ee(),V_=N();ht.installedIntegrations=[];function Dc(t){return t.reduce(function(e,r){return e.every(function(n){return r.name!==n.name})&&e.push(r),e},[])}function Lc(t){var e=t.defaultIntegrations&&Fn.__spread(t.defaultIntegrations)||[],r=t.integrations,n=Fn.__spread(Dc(e));Array.isArray(r)?n=Fn.__spread(n.filter(function(s){return r.every(function(a){return a.name!==s.name})}),Dc(r)):typeof r=="function"&&(n=r(n),n=Array.isArray(n)?n:[n]);var i=n.map(function(s){return s.name}),o="Debug";return i.indexOf(o)!==-1&&n.push.apply(n,Fn.__spread(n.splice(i.indexOf(o),1))),n}ht.getIntegrationsToSetup=Lc;function Fc(t){ht.installedIntegrations.indexOf(t.name)===-1&&(t.setupOnce(kc.addGlobalEventProcessor,kc.getCurrentHub),ht.installedIntegrations.push(t.name),V_.logger.log("Integration installed: "+t.name))}ht.setupIntegration=Fc;function W_(t){var e={};return Lc(t).forEach(function(r){e[r.name]=r,Fc(r)}),Object.defineProperty(e,"initialized",{value:!0}),e}ht.setupIntegrations=W_});var Hc=b(Po=>{Object.defineProperty(Po,"__esModule",{value:!0});var Te=q(),$_=Ee(),Nr=se(),B=N(),Y_=jc(),Uc="Not capturing exception because it's already been captured.",K_=function(){function t(e,r){this._integrations={},this._numProcessing=0,this._backend=new e(r),this._options=r,r.dsn&&(this._dsn=new B.Dsn(r.dsn))}return t.prototype.captureException=function(e,r,n){var i=this;if(B.checkOrSetAlreadyCaught(e)){B.logger.log(Uc);return}var o=r&&r.event_id;return this._process(this._getBackend().eventFromException(e,r).then(function(s){return i._captureEvent(s,r,n)}).then(function(s){o=s})),o},t.prototype.captureMessage=function(e,r,n,i){var o=this,s=n&&n.event_id,a=B.isPrimitive(e)?this._getBackend().eventFromMessage(String(e),r,n):this._getBackend().eventFromException(e,n);return this._process(a.then(function(u){return o._captureEvent(u,n,i)}).then(function(u){s=u})),s},t.prototype.captureEvent=function(e,r,n){var i;if(((i=r)===null||i===void 0?void 0:i.originalException)&&B.checkOrSetAlreadyCaught(r.originalException)){B.logger.log(Uc);return}var o=r&&r.event_id;return this._process(this._captureEvent(e,r,n).then(function(s){o=s})),o},t.prototype.captureSession=function(e){if(!this._isEnabled()){B.logger.warn("SDK not enabled, will not capture session.");return}typeof e.release!="string"?B.logger.warn("Discarded session because of missing or non-string release"):(this._sendSession(e),e.update({init:!1}))},t.prototype.getDsn=function(){return this._dsn},t.prototype.getOptions=function(){return this._options},t.prototype.getTransport=function(){return this._getBackend().getTransport()},t.prototype.flush=function(e){var r=this;return this._isClientDoneProcessing(e).then(function(n){return r.getTransport().close(e).then(function(i){return n&&i})})},t.prototype.close=function(e){var r=this;return this.flush(e).then(function(n){return r.getOptions().enabled=!1,n})},t.prototype.setupIntegrations=function(){this._isEnabled()&&!this._integrations.initialized&&(this._integrations=Y_.setupIntegrations(this._options))},t.prototype.getIntegration=function(e){try{return this._integrations[e.id]||null}catch{return B.logger.warn("Cannot retrieve integration "+e.id+" from the current Client"),null}},t.prototype._updateSessionFromEvent=function(e,r){var n,i,o=!1,s=!1,a=r.exception&&r.exception.values;if(a){s=!0;try{for(var u=Te.__values(a),c=u.next();!c.done;c=u.next()){var l=c.value,d=l.mechanism;if(d&&d.handled===!1){o=!0;break}}}catch(S){n={error:S}}finally{try{c&&!c.done&&(i=u.return)&&i.call(u)}finally{if(n)throw n.error}}}var h=e.status===Nr.SessionStatus.Ok,_=h&&e.errors===0||h&&o;_&&(e.update(Te.__assign(Te.__assign({},o&&{status:Nr.SessionStatus.Crashed}),{errors:e.errors||Number(s||o)})),this.captureSession(e))},t.prototype._sendSession=function(e){this._getBackend().sendSession(e)},t.prototype._isClientDoneProcessing=function(e){var r=this;return new B.SyncPromise(function(n){var i=0,o=1,s=setInterval(function(){r._numProcessing==0?(clearInterval(s),n(!0)):(i+=o,e&&i>=e&&(clearInterval(s),n(!1)))},o)})},t.prototype._getBackend=function(){return this._backend},t.prototype._isEnabled=function(){return this.getOptions().enabled!==!1&&this._dsn!==void 0},t.prototype._prepareEvent=function(e,r,n){var i=this,o=this.getOptions().normalizeDepth,s=o===void 0?3:o,a=Te.__assign(Te.__assign({},e),{event_id:e.event_id||(n&&n.event_id?n.event_id:B.uuid4()),timestamp:e.timestamp||B.dateTimestampInSeconds()});this._applyClientOptions(a),this._applyIntegrationsMetadata(a);var u=r;n&&n.captureContext&&(u=$_.Scope.clone(u).update(n.captureContext));var c=B.SyncPromise.resolve(a);return u&&(c=u.applyToEvent(a,n)),c.then(function(l){return typeof s=="number"&&s>0?i._normalizeEvent(l,s):l})},t.prototype._normalizeEvent=function(e,r){if(!e)return null;var n=Te.__assign(Te.__assign(Te.__assign(Te.__assign(Te.__assign({},e),e.breadcrumbs&&{breadcrumbs:e.breadcrumbs.map(function(s){return Te.__assign(Te.__assign({},s),s.data&&{data:B.normalize(s.data,r)})})}),e.user&&{user:B.normalize(e.user,r)}),e.contexts&&{contexts:B.normalize(e.contexts,r)}),e.extra&&{extra:B.normalize(e.extra,r)});e.contexts&&e.contexts.trace&&(n.contexts.trace=e.contexts.trace);var i=this.getOptions()._experiments,o=i===void 0?{}:i;return o.ensureNoCircularStructures?B.normalize(n):n},t.prototype._applyClientOptions=function(e){var r=this.getOptions(),n=r.environment,i=r.release,o=r.dist,s=r.maxValueLength,a=s===void 0?250:s;"environment"in e||(e.environment="environment"in r?n:"production"),e.release===void 0&&i!==void 0&&(e.release=i),e.dist===void 0&&o!==void 0&&(e.dist=o),e.message&&(e.message=B.truncate(e.message,a));var u=e.exception&&e.exception.values&&e.exception.values[0];u&&u.value&&(u.value=B.truncate(u.value,a));var c=e.request;c&&c.url&&(c.url=B.truncate(c.url,a))},t.prototype._applyIntegrationsMetadata=function(e){var r=Object.keys(this._integrations);r.length>0&&(e.sdk=e.sdk||{},e.sdk.integrations=Te.__spread(e.sdk.integrations||[],r))},t.prototype._sendEvent=function(e){this._getBackend().sendEvent(e)},t.prototype._captureEvent=function(e,r,n){return this._processEvent(e,r,n).then(function(i){return i.event_id},function(i){B.logger.error(i)})},t.prototype._processEvent=function(e,r,n){var i=this,o,s,a=this.getOptions(),u=a.beforeSend,c=a.sampleRate,l=this.getTransport();if(!this._isEnabled())return B.SyncPromise.reject(new B.SentryError("SDK not enabled, will not capture event."));var d=e.type==="transaction";return!d&&typeof c=="number"&&Math.random()>c?((s=(o=l).recordLostEvent)===null||s===void 0||s.call(o,Nr.Outcome.SampleRate,"event"),B.SyncPromise.reject(new B.SentryError("Discarding event because it's not included in the random sample (sampling rate = "+c+")"))):this._prepareEvent(e,n,r).then(function(h){var _,S;if(h===null)throw(S=(_=l).recordLostEvent)===null||S===void 0||S.call(_,Nr.Outcome.EventProcessor,e.type||"event"),new B.SentryError("An event processor returned null, will not send event.");var T=r&&r.data&&r.data.__sentry__===!0;if(T||d||!u)return h;var R=u(h,r);return i._ensureBeforeSendRv(R)}).then(function(h){var _,S;if(h===null)throw(S=(_=l).recordLostEvent)===null||S===void 0||S.call(_,Nr.Outcome.BeforeSend,e.type||"event"),new B.SentryError("`beforeSend` returned `null`, will not send event.");var T=n&&n.getSession&&n.getSession();return!d&&T&&i._updateSessionFromEvent(T,h),i._sendEvent(h),h}).then(null,function(h){throw h instanceof B.SentryError?h:(i.captureException(h,{data:{__sentry__:!0},originalException:h}),new B.SentryError(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.
11
+ Reason: `+h))})},t.prototype._process=function(e){var r=this;this._numProcessing+=1,e.then(function(n){return r._numProcessing-=1,n},function(n){return r._numProcessing-=1,n})},t.prototype._ensureBeforeSendRv=function(e){var r="`beforeSend` method has to return `null` or a valid event.";if(B.isThenable(e))return e.then(function(n){if(!(B.isPlainObject(n)||n===null))throw new B.SentryError(r);return n},function(n){throw new B.SentryError("beforeSend rejected with "+n)});if(!(B.isPlainObject(e)||e===null))throw new B.SentryError(r);return e},t}();Po.BaseClient=K_});var qo=b(No=>{Object.defineProperty(No,"__esModule",{value:!0});var J_=se(),Bc=N(),X_=function(){function t(){}return t.prototype.sendEvent=function(e){return Bc.SyncPromise.resolve({reason:"NoopTransport: Event has been skipped because no Dsn is configured.",status:J_.Status.Skipped})},t.prototype.close=function(e){return Bc.SyncPromise.resolve(!0)},t}();No.NoopTransport=X_});var Gc=b(ko=>{Object.defineProperty(ko,"__esModule",{value:!0});var nr=N(),Q_=qo(),Z_=function(){function t(e){this._options=e,this._options.dsn||nr.logger.warn("No DSN provided, backend will not do anything."),this._transport=this._setupTransport()}return t.prototype.eventFromException=function(e,r){throw new nr.SentryError("Backend has to implement `eventFromException` method")},t.prototype.eventFromMessage=function(e,r,n){throw new nr.SentryError("Backend has to implement `eventFromMessage` method")},t.prototype.sendEvent=function(e){this._transport.sendEvent(e).then(null,function(r){nr.logger.error("Error while sending event: "+r)})},t.prototype.sendSession=function(e){if(!this._transport.sendSession){nr.logger.warn("Dropping session because custom transport doesn't implement sendSession");return}this._transport.sendSession(e).then(null,function(r){nr.logger.error("Error while sending session: "+r)})},t.prototype.getTransport=function(){return this._transport},t.prototype._setupTransport=function(){return new Q_.NoopTransport},t}();ko.BaseBackend=Z_});var Vc=b(jn=>{Object.defineProperty(jn,"__esModule",{value:!0});var Pt=q();function zc(t){if(!(!t.metadata||!t.metadata.sdk)){var e=t.metadata.sdk,r=e.name,n=e.version;return{name:r,version:n}}}function eg(t,e){return e&&(t.sdk=t.sdk||{},t.sdk.name=t.sdk.name||e.name,t.sdk.version=t.sdk.version||e.version,t.sdk.integrations=Pt.__spread(t.sdk.integrations||[],e.integrations||[]),t.sdk.packages=Pt.__spread(t.sdk.packages||[],e.packages||[])),t}function tg(t,e){var r=zc(e),n=JSON.stringify(Pt.__assign(Pt.__assign({sent_at:new Date().toISOString()},r&&{sdk:r}),e.forceEnvelope()&&{dsn:e.getDsn().toString()})),i="aggregates"in t?"sessions":"session",o=JSON.stringify({type:i});return{body:n+`
12
12
  `+o+`
13
- `+JSON.stringify(t),type:i,url:e.getEnvelopeEndpointWithUrlEncodedAuth()}}pn.sessionToSentryRequest=S_;function E_(t,e){var r=zu(e),n=t.type||"event",i=n==="transaction"||e.forceEnvelope(),o=t.debug_meta||{},a=o.transactionSampling,s=bt.__rest(o,["transactionSampling"]),u=a||{},c=u.method,l=u.rate;Object.keys(s).length===0?delete t.debug_meta:t.debug_meta=s;var d={body:JSON.stringify(r?b_(t,e.metadata.sdk):t),type:n,url:i?e.getEnvelopeEndpointWithUrlEncodedAuth():e.getStoreEndpointWithUrlEncodedAuth()};if(i){var h=JSON.stringify(bt.__assign(bt.__assign({event_id:t.event_id,sent_at:new Date().toISOString()},r&&{sdk:r}),e.forceEnvelope()&&{dsn:e.getDsn().toString()})),y=JSON.stringify({type:n,sample_rates:[{id:c,rate:l}]}),S=h+`
14
- `+y+`
15
- `+d.body;d.body=S}return d}pn.eventToSentryRequest=E_});var Wu=b(no=>{Object.defineProperty(no,"__esModule",{value:!0});var T_=ge(),O_=P();function w_(t,e){var r;e.debug===!0&&O_.logger.enable();var n=T_.getCurrentHub();(r=n.getScope())===null||r===void 0||r.update(e.initialScope);var i=new t(e);n.bindClient(i)}no.initAndBind=w_});var Yu=b(io=>{Object.defineProperty(io,"__esModule",{value:!0});io.SDK_VERSION="6.16.1"});var Ku=b(oo=>{Object.defineProperty(oo,"__esModule",{value:!0});var $u,x_=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(){$u=Function.prototype.toString,Function.prototype.toString=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var n=this.__sentry_original__||this;return $u.apply(n,e)}},t.id="FunctionToString",t}();oo.FunctionToString=x_});var Xu=b(so=>{Object.defineProperty(so,"__esModule",{value:!0});var ao=N(),Ju=ge(),fe=P(),I_=[/^Script error\.?$/,/^Javascript error: Script error\.? on line 0$/],C_=function(){function t(e){e===void 0&&(e={}),this._options=e,this.name=t.id}return t.prototype.setupOnce=function(){Ju.addGlobalEventProcessor(function(e){var r=Ju.getCurrentHub();if(!r)return e;var n=r.getIntegration(t);if(n){var i=r.getClient(),o=i?i.getOptions():{},a=typeof n._mergeOptions=="function"?n._mergeOptions(o):{};return typeof n._shouldDropEvent!="function"?e:n._shouldDropEvent(e,a)?null:e}return e})},t.prototype._shouldDropEvent=function(e,r){return this._isSentryError(e,r)?(fe.logger.warn(`Event dropped due to being internal Sentry Error.
16
- Event: `+fe.getEventDescription(e)),!0):this._isIgnoredError(e,r)?(fe.logger.warn("Event dropped due to being matched by `ignoreErrors` option.\nEvent: "+fe.getEventDescription(e)),!0):this._isDeniedUrl(e,r)?(fe.logger.warn("Event dropped due to being matched by `denyUrls` option.\nEvent: "+fe.getEventDescription(e)+`.
17
- Url: `+this._getEventFilterUrl(e)),!0):this._isAllowedUrl(e,r)?!1:(fe.logger.warn("Event dropped due to not being matched by `allowUrls` option.\nEvent: "+fe.getEventDescription(e)+`.
18
- Url: `+this._getEventFilterUrl(e)),!0)},t.prototype._isSentryError=function(e,r){if(!r.ignoreInternal)return!1;try{return e&&e.exception&&e.exception.values&&e.exception.values[0]&&e.exception.values[0].type==="SentryError"||!1}catch{return!1}},t.prototype._isIgnoredError=function(e,r){return!r.ignoreErrors||!r.ignoreErrors.length?!1:this._getPossibleEventMessages(e).some(function(n){return r.ignoreErrors.some(function(i){return fe.isMatchingPattern(n,i)})})},t.prototype._isDeniedUrl=function(e,r){if(!r.denyUrls||!r.denyUrls.length)return!1;var n=this._getEventFilterUrl(e);return n?r.denyUrls.some(function(i){return fe.isMatchingPattern(n,i)}):!1},t.prototype._isAllowedUrl=function(e,r){if(!r.allowUrls||!r.allowUrls.length)return!0;var n=this._getEventFilterUrl(e);return n?r.allowUrls.some(function(i){return fe.isMatchingPattern(n,i)}):!0},t.prototype._mergeOptions=function(e){return e===void 0&&(e={}),{allowUrls:ao.__spread(this._options.whitelistUrls||[],this._options.allowUrls||[],e.whitelistUrls||[],e.allowUrls||[]),denyUrls:ao.__spread(this._options.blacklistUrls||[],this._options.denyUrls||[],e.blacklistUrls||[],e.denyUrls||[]),ignoreErrors:ao.__spread(this._options.ignoreErrors||[],e.ignoreErrors||[],I_),ignoreInternal:typeof this._options.ignoreInternal!="undefined"?this._options.ignoreInternal:!0}},t.prototype._getPossibleEventMessages=function(e){if(e.message)return[e.message];if(e.exception)try{var r=e.exception.values&&e.exception.values[0]||{},n=r.type,i=n===void 0?"":n,o=r.value,a=o===void 0?"":o;return[""+a,i+": "+a]}catch{return fe.logger.error("Cannot extract message for event "+fe.getEventDescription(e)),[]}return[]},t.prototype._getLastValidUrl=function(e){e===void 0&&(e=[]);for(var r,n,i=e.length-1;i>=0;i--){var o=e[i];if(((r=o)===null||r===void 0?void 0:r.filename)!=="<anonymous>"&&((n=o)===null||n===void 0?void 0:n.filename)!=="[native code]")return o.filename||null}return null},t.prototype._getEventFilterUrl=function(e){try{if(e.stacktrace){var r=e.stacktrace.frames;return this._getLastValidUrl(r)}if(e.exception){var n=e.exception.values&&e.exception.values[0].stacktrace&&e.exception.values[0].stacktrace.frames;return this._getLastValidUrl(n)}return null}catch{return fe.logger.error("Cannot extract url for event "+fe.getEventDescription(e)),null}},t.id="InboundFilters",t}();so.InboundFilters=C_});var Qu=b(hn=>{Object.defineProperty(hn,"__esModule",{value:!0});var R_=Ku();hn.FunctionToString=R_.FunctionToString;var A_=Xu();hn.InboundFilters=A_.InboundFilters});var ie=b(z=>{Object.defineProperty(z,"__esModule",{value:!0});var ye=Pu();z.addBreadcrumb=ye.addBreadcrumb;z.captureException=ye.captureException;z.captureEvent=ye.captureEvent;z.captureMessage=ye.captureMessage;z.configureScope=ye.configureScope;z.startTransaction=ye.startTransaction;z.setContext=ye.setContext;z.setExtra=ye.setExtra;z.setExtras=ye.setExtras;z.setTag=ye.setTag;z.setTags=ye.setTags;z.setUser=ye.setUser;z.withScope=ye.withScope;var Bt=ge();z.addGlobalEventProcessor=Bt.addGlobalEventProcessor;z.getCurrentHub=Bt.getCurrentHub;z.getHubFromCarrier=Bt.getHubFromCarrier;z.Hub=Bt.Hub;z.makeMain=Bt.makeMain;z.Scope=Bt.Scope;var P_=Mu();z.API=P_.API;var q_=Uu();z.BaseClient=q_.BaseClient;var N_=Gu();z.BaseBackend=N_.BaseBackend;var Zu=Vu();z.eventToSentryRequest=Zu.eventToSentryRequest;z.sessionToSentryRequest=Zu.sessionToSentryRequest;var M_=Wu();z.initAndBind=M_.initAndBind;var k_=to();z.NoopTransport=k_.NoopTransport;var D_=Yu();z.SDK_VERSION=D_.SDK_VERSION;var F_=Qu();z.Integrations=F_});var ec=b(_n=>{(function(t,e){let r=typeof _n=="object"?_n:typeof t=="object"?t:{};e(r),typeof define=="function"&&define.amd&&define("lru",r)})(_n,function(t){let e=Symbol("newer"),r=Symbol("older");function n(u,c){typeof u!="number"&&(c=u,u=0),this.size=0,this.limit=u,this.oldest=this.newest=void 0,this._keymap=new Map,c&&(this.assign(c),u<1&&(this.limit=this.size))}t.LRUMap=n;function i(u,c){this.key=u,this.value=c,this[e]=void 0,this[r]=void 0}n.prototype._markEntryAsUsed=function(u){u!==this.newest&&(u[e]&&(u===this.oldest&&(this.oldest=u[e]),u[e][r]=u[r]),u[r]&&(u[r][e]=u[e]),u[e]=void 0,u[r]=this.newest,this.newest&&(this.newest[e]=u),this.newest=u)},n.prototype.assign=function(u){let c,l=this.limit||Number.MAX_VALUE;this._keymap.clear();let d=u[Symbol.iterator]();for(let h=d.next();!h.done;h=d.next()){let y=new i(h.value[0],h.value[1]);if(this._keymap.set(y.key,y),c?(c[e]=y,y[r]=c):this.oldest=y,c=y,l--==0)throw new Error("overflow")}this.newest=c,this.size=this._keymap.size},n.prototype.get=function(u){var c=this._keymap.get(u);if(!!c)return this._markEntryAsUsed(c),c.value},n.prototype.set=function(u,c){var l=this._keymap.get(u);return l?(l.value=c,this._markEntryAsUsed(l),this):(this._keymap.set(u,l=new i(u,c)),this.newest?(this.newest[e]=l,l[r]=this.newest):this.oldest=l,this.newest=l,++this.size,this.size>this.limit&&this.shift(),this)},n.prototype.shift=function(){var u=this.oldest;if(u)return this.oldest[e]?(this.oldest=this.oldest[e],this.oldest[r]=void 0):(this.oldest=void 0,this.newest=void 0),u[e]=u[r]=void 0,this._keymap.delete(u.key),--this.size,[u.key,u.value]},n.prototype.find=function(u){let c=this._keymap.get(u);return c?c.value:void 0},n.prototype.has=function(u){return this._keymap.has(u)},n.prototype.delete=function(u){var c=this._keymap.get(u);if(!!c)return this._keymap.delete(c.key),c[e]&&c[r]?(c[r][e]=c[e],c[e][r]=c[r]):c[e]?(c[e][r]=void 0,this.oldest=c[e]):c[r]?(c[r][e]=void 0,this.newest=c[r]):this.oldest=this.newest=void 0,this.size--,c.value},n.prototype.clear=function(){this.oldest=this.newest=void 0,this.size=0,this._keymap.clear()};function o(u){this.entry=u}o.prototype[Symbol.iterator]=function(){return this},o.prototype.next=function(){let u=this.entry;return u?(this.entry=u[e],{done:!1,value:[u.key,u.value]}):{done:!0,value:void 0}};function a(u){this.entry=u}a.prototype[Symbol.iterator]=function(){return this},a.prototype.next=function(){let u=this.entry;return u?(this.entry=u[e],{done:!1,value:u.key}):{done:!0,value:void 0}};function s(u){this.entry=u}s.prototype[Symbol.iterator]=function(){return this},s.prototype.next=function(){let u=this.entry;return u?(this.entry=u[e],{done:!1,value:u.value}):{done:!0,value:void 0}},n.prototype.keys=function(){return new a(this.oldest)},n.prototype.values=function(){return new s(this.oldest)},n.prototype.entries=function(){return this},n.prototype[Symbol.iterator]=function(){return new o(this.oldest)},n.prototype.forEach=function(u,c){typeof c!="object"&&(c=this);let l=this.oldest;for(;l;)u.call(c,l.value,l.key,this),l=l[e]},n.prototype.toJSON=function(){for(var u=new Array(this.size),c=0,l=this.oldest;l;)u[c++]={key:l.key,value:l.value},l=l[e];return u},n.prototype.toString=function(){for(var u="",c=this.oldest;c;)u+=String(c.key)+":"+c.value,c=c[e],c&&(u+=" < ");return u}})});var tc=b(uo=>{Object.defineProperty(uo,"__esModule",{value:!0});function j_(t){if(!t.stack)return[];var e=t.stack.split(`
19
- `).slice(1);return e.map(function(r){if(r.match(/^\s*[-]{4,}$/))return{columnNumber:null,fileName:r,functionName:null,lineNumber:null,methodName:null,native:null,typeName:null};var n=r.match(/at (?:(.+?)\s+\()?(?:(.+?):(\d+)(?::(\d+))?|([^)]+))\)?/);if(!!n){var i=null,o=null,a=null,s=null,u=null,c=n[5]==="native";if(n[1]){a=n[1];var l=a.lastIndexOf(".");if(a[l-1]==="."&&l--,l>0){i=a.substr(0,l),o=a.substr(l+1);var d=i.indexOf(".Module");d>0&&(a=a.substr(d+1),i=i.substr(0,d))}s=null}o&&(s=i,u=o),o==="<anonymous>"&&(u=null,a=null);var h={columnNumber:parseInt(n[4],10)||null,fileName:n[2]||null,functionName:a,lineNumber:parseInt(n[3],10)||null,methodName:u,native:c,typeName:s};return h}}).filter(function(r){return!!r})}uo.parse=j_});var fo=b(ot=>{Object.defineProperty(ot,"__esModule",{value:!0});var Ne=P(),H_=require("fs"),L_=ec(),U_=tc(),B_=7,co=new L_.LRUMap(100);function G_(){co.clear()}ot.resetFileContentCache=G_;function z_(t){try{return t.functionName||t.typeName+"."+(t.methodName||"<anonymous>")}catch{return"<anonymous>"}}var V_=(require.main&&require.main.filename&&Ne.dirname(require.main.filename)||global.process.cwd())+"/";function W_(t,e){e||(e=V_);var r=Ne.basename(t,".js");t=Ne.dirname(t);var n=t.lastIndexOf("/node_modules/");if(n>-1)return t.substr(n+14).replace(/\//g,".")+":"+r;if(n=(t+"/").lastIndexOf(e,0),n===0){var i=t.substr(e.length).replace(/\//g,".");return i&&(i+=":"),i+=r,i}return r}function Y_(t){return t.length===0?Ne.SyncPromise.resolve({}):new Ne.SyncPromise(function(e){for(var r={},n=0,i=function(a){var s=t[a],u=co.get(s);if(u!==void 0)return u!==null&&(r[s]=u),n++,n===t.length&&e(r),"continue";H_.readFile(s,function(c,l){var d=c?null:l.toString();r[s]=d,co.set(s,d),n++,n===t.length&&e(r)})},o=0;o<t.length;o++)i(o)})}function rc(t){var e=U_.parse(t);return e||[]}ot.extractStackFromError=rc;function nc(t,e){var r=[],n=e&&e.frameContextLines!==void 0?e.frameContextLines:B_,i=t.map(function(o){var a,s={colno:o.columnNumber,filename:((a=o.fileName)===null||a===void 0?void 0:a.startsWith("file://"))?o.fileName.substr(7):o.fileName||"",function:z_(o),lineno:o.lineNumber},u=o.native||s.filename&&!s.filename.startsWith("/")&&!s.filename.startsWith(".")&&s.filename.indexOf(":\\")!==1;return s.in_app=!u&&s.filename!==void 0&&s.filename.indexOf("node_modules/")===-1,s.filename&&(s.module=W_(s.filename),!u&&n>0&&r.indexOf(s.filename)===-1&&r.push(s.filename)),s});if(n<=0)return Ne.SyncPromise.resolve(i);try{return $_(r,i,n)}catch{return Ne.SyncPromise.resolve(i)}}ot.parseStack=nc;function $_(t,e,r){return new Ne.SyncPromise(function(n){return Y_(t).then(function(i){var o=e.map(function(a){if(a.filename&&i[a.filename])try{var s=i[a.filename].split(`
20
- `);Ne.addContextToFrame(s,a,r)}catch{}return a});n(o)})})}function ic(t,e){var r=t.name||t.constructor.name,n=rc(t);return new Ne.SyncPromise(function(i){return nc(n,e).then(function(o){var a={stacktrace:{frames:oc(o)},type:r,value:t.message};i(a)})})}ot.getExceptionFromError=ic;function K_(t,e){return new Ne.SyncPromise(function(r){return ic(t,e).then(function(n){r({exception:{values:[n]}})})})}ot.parseError=K_;function oc(t){if(!t||!t.length)return[];var e=t,r=e[0].function||"";return(r.indexOf("captureMessage")!==-1||r.indexOf("captureException")!==-1)&&(e=e.slice(1)),e.reverse()}ot.prepareFramesForEvent=oc});var po=b(lo=>{Object.defineProperty(lo,"__esModule",{value:!0});lo.SDK_NAME="sentry.javascript.node"});var vn=b(_o=>{Object.defineProperty(_o,"__esModule",{value:!0});var Ye=N(),ac=ie(),sc=ne(),St=P(),J_=require("fs"),X_=require("url"),Q_=po(),ho={event:"error",transaction:"transaction",session:"session",attachment:"attachment"},Z_=function(){function t(e){this.options=e,this._buffer=new St.PromiseBuffer(30),this._rateLimits={},this.urlParser=function(r){return new X_.URL(r)},this._api=new ac.API(e.dsn,e._metadata,e.tunnel)}return t.prototype.sendEvent=function(e){throw new St.SentryError("Transport Class has to implement `sendEvent` method.")},t.prototype.close=function(e){return this._buffer.drain(e)},t.prototype._getProxy=function(e){var r,n,i=process.env,o=i.no_proxy,a=i.http_proxy,s=i.https_proxy,u=this.options,c=u.httpProxy,l=u.httpsProxy,d=e==="http"?c||a:l||c||s||a;if(!o)return d;var h=this._api.getDsn(),y=h.host,S=h.port;try{for(var T=Ye.__values(o.split(",")),C=T.next();!C.done;C=T.next()){var q=C.value;if(y.endsWith(q)||(y+":"+S).endsWith(q))return}}catch(U){r={error:U}}finally{try{C&&!C.done&&(n=T.return)&&n.call(T)}finally{if(r)throw r.error}}return d},t.prototype._getRequestOptions=function(e){var r=Ye.__assign(Ye.__assign({},this._api.getRequestHeaders(Q_.SDK_NAME,ac.SDK_VERSION)),this.options.headers),n=e.hostname,i=e.pathname,o=e.port,a=e.protocol,s=""+i;return Ye.__assign({agent:this.client,headers:r,hostname:n,method:"POST",path:s,port:o,protocol:a},this.options.caCerts&&{ca:J_.readFileSync(this.options.caCerts)})},t.prototype._disabledUntil=function(e){var r=ho[e];return this._rateLimits[r]||this._rateLimits.all},t.prototype._isRateLimited=function(e){return this._disabledUntil(e)>new Date(Date.now())},t.prototype._handleRateLimit=function(e){var r,n,i,o,a=Date.now(),s=e["x-sentry-rate-limits"],u=e["retry-after"];if(s){try{for(var c=Ye.__values(s.trim().split(",")),l=c.next();!l.done;l=c.next()){var d=l.value,h=d.split(":",2),y=parseInt(h[0],10),S=(isNaN(y)?60:y)*1e3;try{for(var T=(i=void 0,Ye.__values(h[1]&&h[1].split(";")||["all"])),C=T.next();!C.done;C=T.next()){var q=C.value,U=Ye.__spread(Object.keys(ho).map(function(k){return ho[k]}),["all"]);U.includes(q)&&(this._rateLimits[q]=new Date(a+S))}}catch(k){i={error:k}}finally{try{C&&!C.done&&(o=T.return)&&o.call(T)}finally{if(i)throw i.error}}}}catch(k){r={error:k}}finally{try{l&&!l.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}return!0}else if(u)return this._rateLimits.all=new Date(a+St.parseRetryAfterHeader(a,u)),!0;return!1},t.prototype._send=function(e,r){return Ye.__awaiter(this,void 0,void 0,function(){var n=this;return Ye.__generator(this,function(i){if(!this.module)throw new St.SentryError("No module available");return r&&this._isRateLimited(e.type)?[2,Promise.reject({payload:r,type:e.type,reason:"Transport for "+e.type+" requests locked till "+this._disabledUntil(e.type)+" due to too many requests.",status:429})]:[2,this._buffer.add(function(){return new Promise(function(o,a){if(!n.module)throw new St.SentryError("No module available");var s=n._getRequestOptions(n.urlParser(e.url)),u=n.module.request(s,function(c){var l=c.statusCode||500,d=sc.Status.fromHttpCode(l);c.setEncoding("utf8");var h=c.headers?c.headers["retry-after"]:"";h=Array.isArray(h)?h[0]:h;var y=c.headers?c.headers["x-sentry-rate-limits"]:"";y=Array.isArray(y)?y[0]:y;var S={"x-sentry-rate-limits":y,"retry-after":h},T=n._handleRateLimit(S);if(T&&St.logger.warn("Too many "+e.type+" requests, backing off until: "+n._disabledUntil(e.type)),d===sc.Status.Success)o({status:d});else{var C="HTTP Error ("+l+")";c.headers&&c.headers["x-sentry-error"]&&(C+=": "+c.headers["x-sentry-error"]),a(new St.SentryError(C))}c.on("data",function(){}),c.on("end",function(){})});u.on("error",a),u.end(e.body)})})]})})},t}();_o.BaseTransport=Z_});var cc=b((kS,uc)=>{var Gt=1e3,zt=Gt*60,Vt=zt*60,Et=Vt*24,ev=Et*7,tv=Et*365.25;uc.exports=function(t,e){e=e||{};var r=typeof t;if(r==="string"&&t.length>0)return rv(t);if(r==="number"&&isFinite(t))return e.long?iv(t):nv(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function rv(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(!!e){var r=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return r*tv;case"weeks":case"week":case"w":return r*ev;case"days":case"day":case"d":return r*Et;case"hours":case"hour":case"hrs":case"hr":case"h":return r*Vt;case"minutes":case"minute":case"mins":case"min":case"m":return r*zt;case"seconds":case"second":case"secs":case"sec":case"s":return r*Gt;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}function nv(t){var e=Math.abs(t);return e>=Et?Math.round(t/Et)+"d":e>=Vt?Math.round(t/Vt)+"h":e>=zt?Math.round(t/zt)+"m":e>=Gt?Math.round(t/Gt)+"s":t+"ms"}function iv(t){var e=Math.abs(t);return e>=Et?gn(t,e,Et,"day"):e>=Vt?gn(t,e,Vt,"hour"):e>=zt?gn(t,e,zt,"minute"):e>=Gt?gn(t,e,Gt,"second"):t+" ms"}function gn(t,e,r,n){var i=e>=r*1.5;return Math.round(t/r)+" "+n+(i?"s":"")}});var vo=b((DS,fc)=>{function ov(t){r.debug=r,r.default=r,r.coerce=u,r.disable=o,r.enable=i,r.enabled=a,r.humanize=cc(),r.destroy=c,Object.keys(t).forEach(l=>{r[l]=t[l]}),r.names=[],r.skips=[],r.formatters={};function e(l){let d=0;for(let h=0;h<l.length;h++)d=(d<<5)-d+l.charCodeAt(h),d|=0;return r.colors[Math.abs(d)%r.colors.length]}r.selectColor=e;function r(l){let d,h=null,y,S;function T(...C){if(!T.enabled)return;let q=T,U=Number(new Date),k=U-(d||U);q.diff=k,q.prev=d,q.curr=U,d=U,C[0]=r.coerce(C[0]),typeof C[0]!="string"&&C.unshift("%O");let Se=0;C[0]=C[0].replace(/%([a-zA-Z%])/g,(R,B)=>{if(R==="%%")return"%";Se++;let D=r.formatters[B];if(typeof D=="function"){let V=C[Se];R=D.call(q,V),C.splice(Se,1),Se--}return R}),r.formatArgs.call(q,C),(q.log||r.log).apply(q,C)}return T.namespace=l,T.useColors=r.useColors(),T.color=r.selectColor(l),T.extend=n,T.destroy=r.destroy,Object.defineProperty(T,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(y!==r.namespaces&&(y=r.namespaces,S=r.enabled(l)),S),set:C=>{h=C}}),typeof r.init=="function"&&r.init(T),T}function n(l,d){let h=r(this.namespace+(typeof d=="undefined"?":":d)+l);return h.log=this.log,h}function i(l){r.save(l),r.namespaces=l,r.names=[],r.skips=[];let d,h=(typeof l=="string"?l:"").split(/[\s,]+/),y=h.length;for(d=0;d<y;d++)!h[d]||(l=h[d].replace(/\*/g,".*?"),l[0]==="-"?r.skips.push(new RegExp("^"+l.substr(1)+"$")):r.names.push(new RegExp("^"+l+"$")))}function o(){let l=[...r.names.map(s),...r.skips.map(s).map(d=>"-"+d)].join(",");return r.enable(""),l}function a(l){if(l[l.length-1]==="*")return!0;let d,h;for(d=0,h=r.skips.length;d<h;d++)if(r.skips[d].test(l))return!1;for(d=0,h=r.names.length;d<h;d++)if(r.names[d].test(l))return!0;return!1}function s(l){return l.toString().substring(2,l.toString().length-2).replace(/\.\*\?$/,"*")}function u(l){return l instanceof Error?l.stack||l.message:l}function c(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return r.enable(r.load()),r}fc.exports=ov});var lc=b((be,mn)=>{be.formatArgs=sv;be.save=uv;be.load=cv;be.useColors=av;be.storage=fv();be.destroy=(()=>{let t=!1;return()=>{t||(t=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();be.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function av(){return typeof window!="undefined"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator!="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)?!1:typeof document!="undefined"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window!="undefined"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator!="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator!="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function sv(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+mn.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;t.splice(1,0,e,"color: inherit");let r=0,n=0;t[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(r++,i==="%c"&&(n=r))}),t.splice(n,0,e)}be.log=console.debug||console.log||(()=>{});function uv(t){try{t?be.storage.setItem("debug",t):be.storage.removeItem("debug")}catch{}}function cv(){let t;try{t=be.storage.getItem("debug")}catch{}return!t&&typeof process!="undefined"&&"env"in process&&(t=process.env.DEBUG),t}function fv(){try{return localStorage}catch{}}mn.exports=vo()(be);var{formatters:lv}=mn.exports;lv.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var pc=b((FS,dc)=>{"use strict";dc.exports=(t,e=process.argv)=>{let r=t.startsWith("-")?"":t.length===1?"-":"--",n=e.indexOf(r+t),i=e.indexOf("--");return n!==-1&&(i===-1||n<i)}});var vc=b((jS,_c)=>{"use strict";var dv=require("os"),hc=require("tty"),Ie=pc(),{env:ee}=process,at;Ie("no-color")||Ie("no-colors")||Ie("color=false")||Ie("color=never")?at=0:(Ie("color")||Ie("colors")||Ie("color=true")||Ie("color=always"))&&(at=1);"FORCE_COLOR"in ee&&(ee.FORCE_COLOR==="true"?at=1:ee.FORCE_COLOR==="false"?at=0:at=ee.FORCE_COLOR.length===0?1:Math.min(parseInt(ee.FORCE_COLOR,10),3));function go(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function mo(t,e){if(at===0)return 0;if(Ie("color=16m")||Ie("color=full")||Ie("color=truecolor"))return 3;if(Ie("color=256"))return 2;if(t&&!e&&at===void 0)return 0;let r=at||0;if(ee.TERM==="dumb")return r;if(process.platform==="win32"){let n=dv.release().split(".");return Number(n[0])>=10&&Number(n[2])>=10586?Number(n[2])>=14931?3:2:1}if("CI"in ee)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(n=>n in ee)||ee.CI_NAME==="codeship"?1:r;if("TEAMCITY_VERSION"in ee)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(ee.TEAMCITY_VERSION)?1:0;if(ee.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in ee){let n=parseInt((ee.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(ee.TERM_PROGRAM){case"iTerm.app":return n>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(ee.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ee.TERM)||"COLORTERM"in ee?1:r}function pv(t){let e=mo(t,t&&t.isTTY);return go(e)}_c.exports={supportsColor:pv,stdout:go(mo(!0,hc.isatty(1))),stderr:go(mo(!0,hc.isatty(2)))}});var mc=b((oe,bn)=>{var hv=require("tty"),yn=require("util");oe.init=Sv;oe.log=mv;oe.formatArgs=vv;oe.save=yv;oe.load=bv;oe.useColors=_v;oe.destroy=yn.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");oe.colors=[6,2,3,4,5,1];try{let t=vc();t&&(t.stderr||t).level>=2&&(oe.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}oe.inspectOpts=Object.keys(process.env).filter(t=>/^debug_/i.test(t)).reduce((t,e)=>{let r=e.substring(6).toLowerCase().replace(/_([a-z])/g,(i,o)=>o.toUpperCase()),n=process.env[e];return/^(yes|on|true|enabled)$/i.test(n)?n=!0:/^(no|off|false|disabled)$/i.test(n)?n=!1:n==="null"?n=null:n=Number(n),t[r]=n,t},{});function _v(){return"colors"in oe.inspectOpts?Boolean(oe.inspectOpts.colors):hv.isatty(process.stderr.fd)}function vv(t){let{namespace:e,useColors:r}=this;if(r){let n=this.color,i="\x1B[3"+(n<8?n:"8;5;"+n),o=` ${i};1m${e} \x1B[0m`;t[0]=o+t[0].split(`
13
+ `+JSON.stringify(t),type:i,url:e.getEnvelopeEndpointWithUrlEncodedAuth()}}jn.sessionToSentryRequest=tg;function rg(t,e){var r=zc(e),n=t.type||"event",i=n==="transaction"||e.forceEnvelope(),o=t.debug_meta||{},s=o.transactionSampling,a=Pt.__rest(o,["transactionSampling"]),u=s||{},c=u.method,l=u.rate;Object.keys(a).length===0?delete t.debug_meta:t.debug_meta=a;var d={body:JSON.stringify(r?eg(t,e.metadata.sdk):t),type:n,url:i?e.getEnvelopeEndpointWithUrlEncodedAuth():e.getStoreEndpointWithUrlEncodedAuth()};if(i){var h=JSON.stringify(Pt.__assign(Pt.__assign({event_id:t.event_id,sent_at:new Date().toISOString()},r&&{sdk:r}),e.forceEnvelope()&&{dsn:e.getDsn().toString()})),_=JSON.stringify({type:n,sample_rates:[{id:c,rate:l}]}),S=h+`
14
+ `+_+`
15
+ `+d.body;d.body=S}return d}jn.eventToSentryRequest=rg});var Wc=b(Do=>{Object.defineProperty(Do,"__esModule",{value:!0});var ng=Ee(),ig=N();function og(t,e){var r;e.debug===!0&&ig.logger.enable();var n=ng.getCurrentHub();(r=n.getScope())===null||r===void 0||r.update(e.initialScope);var i=new t(e);n.bindClient(i)}Do.initAndBind=og});var $c=b(Lo=>{Object.defineProperty(Lo,"__esModule",{value:!0});Lo.SDK_VERSION="6.16.1"});var Kc=b(Fo=>{Object.defineProperty(Fo,"__esModule",{value:!0});var Yc,sg=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(){Yc=Function.prototype.toString,Function.prototype.toString=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var n=this.__sentry_original__||this;return Yc.apply(n,e)}},t.id="FunctionToString",t}();Fo.FunctionToString=sg});var Xc=b(Uo=>{Object.defineProperty(Uo,"__esModule",{value:!0});var jo=q(),Jc=Ee(),ve=N(),ag=[/^Script error\.?$/,/^Javascript error: Script error\.? on line 0$/],ug=function(){function t(e){e===void 0&&(e={}),this._options=e,this.name=t.id}return t.prototype.setupOnce=function(){Jc.addGlobalEventProcessor(function(e){var r=Jc.getCurrentHub();if(!r)return e;var n=r.getIntegration(t);if(n){var i=r.getClient(),o=i?i.getOptions():{},s=typeof n._mergeOptions=="function"?n._mergeOptions(o):{};return typeof n._shouldDropEvent!="function"?e:n._shouldDropEvent(e,s)?null:e}return e})},t.prototype._shouldDropEvent=function(e,r){return this._isSentryError(e,r)?(ve.logger.warn(`Event dropped due to being internal Sentry Error.
16
+ Event: `+ve.getEventDescription(e)),!0):this._isIgnoredError(e,r)?(ve.logger.warn("Event dropped due to being matched by `ignoreErrors` option.\nEvent: "+ve.getEventDescription(e)),!0):this._isDeniedUrl(e,r)?(ve.logger.warn("Event dropped due to being matched by `denyUrls` option.\nEvent: "+ve.getEventDescription(e)+`.
17
+ Url: `+this._getEventFilterUrl(e)),!0):this._isAllowedUrl(e,r)?!1:(ve.logger.warn("Event dropped due to not being matched by `allowUrls` option.\nEvent: "+ve.getEventDescription(e)+`.
18
+ Url: `+this._getEventFilterUrl(e)),!0)},t.prototype._isSentryError=function(e,r){if(!r.ignoreInternal)return!1;try{return e&&e.exception&&e.exception.values&&e.exception.values[0]&&e.exception.values[0].type==="SentryError"||!1}catch{return!1}},t.prototype._isIgnoredError=function(e,r){return!r.ignoreErrors||!r.ignoreErrors.length?!1:this._getPossibleEventMessages(e).some(function(n){return r.ignoreErrors.some(function(i){return ve.isMatchingPattern(n,i)})})},t.prototype._isDeniedUrl=function(e,r){if(!r.denyUrls||!r.denyUrls.length)return!1;var n=this._getEventFilterUrl(e);return n?r.denyUrls.some(function(i){return ve.isMatchingPattern(n,i)}):!1},t.prototype._isAllowedUrl=function(e,r){if(!r.allowUrls||!r.allowUrls.length)return!0;var n=this._getEventFilterUrl(e);return n?r.allowUrls.some(function(i){return ve.isMatchingPattern(n,i)}):!0},t.prototype._mergeOptions=function(e){return e===void 0&&(e={}),{allowUrls:jo.__spread(this._options.whitelistUrls||[],this._options.allowUrls||[],e.whitelistUrls||[],e.allowUrls||[]),denyUrls:jo.__spread(this._options.blacklistUrls||[],this._options.denyUrls||[],e.blacklistUrls||[],e.denyUrls||[]),ignoreErrors:jo.__spread(this._options.ignoreErrors||[],e.ignoreErrors||[],ag),ignoreInternal:typeof this._options.ignoreInternal!="undefined"?this._options.ignoreInternal:!0}},t.prototype._getPossibleEventMessages=function(e){if(e.message)return[e.message];if(e.exception)try{var r=e.exception.values&&e.exception.values[0]||{},n=r.type,i=n===void 0?"":n,o=r.value,s=o===void 0?"":o;return[""+s,i+": "+s]}catch{return ve.logger.error("Cannot extract message for event "+ve.getEventDescription(e)),[]}return[]},t.prototype._getLastValidUrl=function(e){e===void 0&&(e=[]);for(var r,n,i=e.length-1;i>=0;i--){var o=e[i];if(((r=o)===null||r===void 0?void 0:r.filename)!=="<anonymous>"&&((n=o)===null||n===void 0?void 0:n.filename)!=="[native code]")return o.filename||null}return null},t.prototype._getEventFilterUrl=function(e){try{if(e.stacktrace){var r=e.stacktrace.frames;return this._getLastValidUrl(r)}if(e.exception){var n=e.exception.values&&e.exception.values[0].stacktrace&&e.exception.values[0].stacktrace.frames;return this._getLastValidUrl(n)}return null}catch{return ve.logger.error("Cannot extract url for event "+ve.getEventDescription(e)),null}},t.id="InboundFilters",t}();Uo.InboundFilters=ug});var Qc=b(Un=>{Object.defineProperty(Un,"__esModule",{value:!0});var cg=Kc();Un.FunctionToString=cg.FunctionToString;var lg=Xc();Un.InboundFilters=lg.InboundFilters});var ae=b(V=>{Object.defineProperty(V,"__esModule",{value:!0});var we=Mc();V.addBreadcrumb=we.addBreadcrumb;V.captureException=we.captureException;V.captureEvent=we.captureEvent;V.captureMessage=we.captureMessage;V.configureScope=we.configureScope;V.startTransaction=we.startTransaction;V.setContext=we.setContext;V.setExtra=we.setExtra;V.setExtras=we.setExtras;V.setTag=we.setTag;V.setTags=we.setTags;V.setUser=we.setUser;V.withScope=we.withScope;var ir=Ee();V.addGlobalEventProcessor=ir.addGlobalEventProcessor;V.getCurrentHub=ir.getCurrentHub;V.getHubFromCarrier=ir.getHubFromCarrier;V.Hub=ir.Hub;V.makeMain=ir.makeMain;V.Scope=ir.Scope;var fg=qc();V.API=fg.API;var dg=Hc();V.BaseClient=dg.BaseClient;var pg=Gc();V.BaseBackend=pg.BaseBackend;var Zc=Vc();V.eventToSentryRequest=Zc.eventToSentryRequest;V.sessionToSentryRequest=Zc.sessionToSentryRequest;var hg=Wc();V.initAndBind=hg.initAndBind;var vg=qo();V.NoopTransport=vg.NoopTransport;var _g=$c();V.SDK_VERSION=_g.SDK_VERSION;var gg=Qc();V.Integrations=gg});var el=b(Hn=>{(function(t,e){let r=typeof Hn=="object"?Hn:typeof t=="object"?t:{};e(r),typeof define=="function"&&define.amd&&define("lru",r)})(Hn,function(t){let e=Symbol("newer"),r=Symbol("older");function n(u,c){typeof u!="number"&&(c=u,u=0),this.size=0,this.limit=u,this.oldest=this.newest=void 0,this._keymap=new Map,c&&(this.assign(c),u<1&&(this.limit=this.size))}t.LRUMap=n;function i(u,c){this.key=u,this.value=c,this[e]=void 0,this[r]=void 0}n.prototype._markEntryAsUsed=function(u){u!==this.newest&&(u[e]&&(u===this.oldest&&(this.oldest=u[e]),u[e][r]=u[r]),u[r]&&(u[r][e]=u[e]),u[e]=void 0,u[r]=this.newest,this.newest&&(this.newest[e]=u),this.newest=u)},n.prototype.assign=function(u){let c,l=this.limit||Number.MAX_VALUE;this._keymap.clear();let d=u[Symbol.iterator]();for(let h=d.next();!h.done;h=d.next()){let _=new i(h.value[0],h.value[1]);if(this._keymap.set(_.key,_),c?(c[e]=_,_[r]=c):this.oldest=_,c=_,l--==0)throw new Error("overflow")}this.newest=c,this.size=this._keymap.size},n.prototype.get=function(u){var c=this._keymap.get(u);if(!!c)return this._markEntryAsUsed(c),c.value},n.prototype.set=function(u,c){var l=this._keymap.get(u);return l?(l.value=c,this._markEntryAsUsed(l),this):(this._keymap.set(u,l=new i(u,c)),this.newest?(this.newest[e]=l,l[r]=this.newest):this.oldest=l,this.newest=l,++this.size,this.size>this.limit&&this.shift(),this)},n.prototype.shift=function(){var u=this.oldest;if(u)return this.oldest[e]?(this.oldest=this.oldest[e],this.oldest[r]=void 0):(this.oldest=void 0,this.newest=void 0),u[e]=u[r]=void 0,this._keymap.delete(u.key),--this.size,[u.key,u.value]},n.prototype.find=function(u){let c=this._keymap.get(u);return c?c.value:void 0},n.prototype.has=function(u){return this._keymap.has(u)},n.prototype.delete=function(u){var c=this._keymap.get(u);if(!!c)return this._keymap.delete(c.key),c[e]&&c[r]?(c[r][e]=c[e],c[e][r]=c[r]):c[e]?(c[e][r]=void 0,this.oldest=c[e]):c[r]?(c[r][e]=void 0,this.newest=c[r]):this.oldest=this.newest=void 0,this.size--,c.value},n.prototype.clear=function(){this.oldest=this.newest=void 0,this.size=0,this._keymap.clear()};function o(u){this.entry=u}o.prototype[Symbol.iterator]=function(){return this},o.prototype.next=function(){let u=this.entry;return u?(this.entry=u[e],{done:!1,value:[u.key,u.value]}):{done:!0,value:void 0}};function s(u){this.entry=u}s.prototype[Symbol.iterator]=function(){return this},s.prototype.next=function(){let u=this.entry;return u?(this.entry=u[e],{done:!1,value:u.key}):{done:!0,value:void 0}};function a(u){this.entry=u}a.prototype[Symbol.iterator]=function(){return this},a.prototype.next=function(){let u=this.entry;return u?(this.entry=u[e],{done:!1,value:u.value}):{done:!0,value:void 0}},n.prototype.keys=function(){return new s(this.oldest)},n.prototype.values=function(){return new a(this.oldest)},n.prototype.entries=function(){return this},n.prototype[Symbol.iterator]=function(){return new o(this.oldest)},n.prototype.forEach=function(u,c){typeof c!="object"&&(c=this);let l=this.oldest;for(;l;)u.call(c,l.value,l.key,this),l=l[e]},n.prototype.toJSON=function(){for(var u=new Array(this.size),c=0,l=this.oldest;l;)u[c++]={key:l.key,value:l.value},l=l[e];return u},n.prototype.toString=function(){for(var u="",c=this.oldest;c;)u+=String(c.key)+":"+c.value,c=c[e],c&&(u+=" < ");return u}})});var tl=b(Ho=>{Object.defineProperty(Ho,"__esModule",{value:!0});function mg(t){if(!t.stack)return[];var e=t.stack.split(`
19
+ `).slice(1);return e.map(function(r){if(r.match(/^\s*[-]{4,}$/))return{columnNumber:null,fileName:r,functionName:null,lineNumber:null,methodName:null,native:null,typeName:null};var n=r.match(/at (?:(.+?)\s+\()?(?:(.+?):(\d+)(?::(\d+))?|([^)]+))\)?/);if(!!n){var i=null,o=null,s=null,a=null,u=null,c=n[5]==="native";if(n[1]){s=n[1];var l=s.lastIndexOf(".");if(s[l-1]==="."&&l--,l>0){i=s.substr(0,l),o=s.substr(l+1);var d=i.indexOf(".Module");d>0&&(s=s.substr(d+1),i=i.substr(0,d))}a=null}o&&(a=i,u=o),o==="<anonymous>"&&(u=null,s=null);var h={columnNumber:parseInt(n[4],10)||null,fileName:n[2]||null,functionName:s,lineNumber:parseInt(n[3],10)||null,methodName:u,native:c,typeName:a};return h}}).filter(function(r){return!!r})}Ho.parse=mg});var Go=b(vt=>{Object.defineProperty(vt,"__esModule",{value:!0});var Ue=N(),yg=require("fs"),bg=el(),Sg=tl(),Eg=7,Bo=new bg.LRUMap(100);function Tg(){Bo.clear()}vt.resetFileContentCache=Tg;function wg(t){try{return t.functionName||t.typeName+"."+(t.methodName||"<anonymous>")}catch{return"<anonymous>"}}var Og=(require.main&&require.main.filename&&Ue.dirname(require.main.filename)||global.process.cwd())+"/";function Cg(t,e){e||(e=Og);var r=Ue.basename(t,".js");t=Ue.dirname(t);var n=t.lastIndexOf("/node_modules/");if(n>-1)return t.substr(n+14).replace(/\//g,".")+":"+r;if(n=(t+"/").lastIndexOf(e,0),n===0){var i=t.substr(e.length).replace(/\//g,".");return i&&(i+=":"),i+=r,i}return r}function xg(t){return t.length===0?Ue.SyncPromise.resolve({}):new Ue.SyncPromise(function(e){for(var r={},n=0,i=function(s){var a=t[s],u=Bo.get(a);if(u!==void 0)return u!==null&&(r[a]=u),n++,n===t.length&&e(r),"continue";yg.readFile(a,function(c,l){var d=c?null:l.toString();r[a]=d,Bo.set(a,d),n++,n===t.length&&e(r)})},o=0;o<t.length;o++)i(o)})}function rl(t){var e=Sg.parse(t);return e||[]}vt.extractStackFromError=rl;function nl(t,e){var r=[],n=e&&e.frameContextLines!==void 0?e.frameContextLines:Eg,i=t.map(function(o){var s,a={colno:o.columnNumber,filename:((s=o.fileName)===null||s===void 0?void 0:s.startsWith("file://"))?o.fileName.substr(7):o.fileName||"",function:wg(o),lineno:o.lineNumber},u=o.native||a.filename&&!a.filename.startsWith("/")&&!a.filename.startsWith(".")&&a.filename.indexOf(":\\")!==1;return a.in_app=!u&&a.filename!==void 0&&a.filename.indexOf("node_modules/")===-1,a.filename&&(a.module=Cg(a.filename),!u&&n>0&&r.indexOf(a.filename)===-1&&r.push(a.filename)),a});if(n<=0)return Ue.SyncPromise.resolve(i);try{return Rg(r,i,n)}catch{return Ue.SyncPromise.resolve(i)}}vt.parseStack=nl;function Rg(t,e,r){return new Ue.SyncPromise(function(n){return xg(t).then(function(i){var o=e.map(function(s){if(s.filename&&i[s.filename])try{var a=i[s.filename].split(`
20
+ `);Ue.addContextToFrame(a,s,r)}catch{}return s});n(o)})})}function il(t,e){var r=t.name||t.constructor.name,n=rl(t);return new Ue.SyncPromise(function(i){return nl(n,e).then(function(o){var s={stacktrace:{frames:ol(o)},type:r,value:t.message};i(s)})})}vt.getExceptionFromError=il;function Ig(t,e){return new Ue.SyncPromise(function(r){return il(t,e).then(function(n){r({exception:{values:[n]}})})})}vt.parseError=Ig;function ol(t){if(!t||!t.length)return[];var e=t,r=e[0].function||"";return(r.indexOf("captureMessage")!==-1||r.indexOf("captureException")!==-1)&&(e=e.slice(1)),e.reverse()}vt.prepareFramesForEvent=ol});var Vo=b(zo=>{Object.defineProperty(zo,"__esModule",{value:!0});zo.SDK_NAME="sentry.javascript.node"});var Bn=b($o=>{Object.defineProperty($o,"__esModule",{value:!0});var rt=q(),sl=ae(),al=se(),Nt=N(),Ag=require("fs"),Mg=require("url"),Pg=Vo(),Wo={event:"error",transaction:"transaction",session:"session",attachment:"attachment"},Ng=function(){function t(e){this.options=e,this._buffer=new Nt.PromiseBuffer(30),this._rateLimits={},this.urlParser=function(r){return new Mg.URL(r)},this._api=new sl.API(e.dsn,e._metadata,e.tunnel)}return t.prototype.sendEvent=function(e){throw new Nt.SentryError("Transport Class has to implement `sendEvent` method.")},t.prototype.close=function(e){return this._buffer.drain(e)},t.prototype._getProxy=function(e){var r,n,i=process.env,o=i.no_proxy,s=i.http_proxy,a=i.https_proxy,u=this.options,c=u.httpProxy,l=u.httpsProxy,d=e==="http"?c||s:l||c||a||s;if(!o)return d;var h=this._api.getDsn(),_=h.host,S=h.port;try{for(var T=rt.__values(o.split(",")),R=T.next();!R.done;R=T.next()){var A=R.value;if(_.endsWith(A)||(_+":"+S).endsWith(A))return}}catch(F){r={error:F}}finally{try{R&&!R.done&&(n=T.return)&&n.call(T)}finally{if(r)throw r.error}}return d},t.prototype._getRequestOptions=function(e){var r=rt.__assign(rt.__assign({},this._api.getRequestHeaders(Pg.SDK_NAME,sl.SDK_VERSION)),this.options.headers),n=e.hostname,i=e.pathname,o=e.port,s=e.protocol,a=""+i;return rt.__assign({agent:this.client,headers:r,hostname:n,method:"POST",path:a,port:o,protocol:s},this.options.caCerts&&{ca:Ag.readFileSync(this.options.caCerts)})},t.prototype._disabledUntil=function(e){var r=Wo[e];return this._rateLimits[r]||this._rateLimits.all},t.prototype._isRateLimited=function(e){return this._disabledUntil(e)>new Date(Date.now())},t.prototype._handleRateLimit=function(e){var r,n,i,o,s=Date.now(),a=e["x-sentry-rate-limits"],u=e["retry-after"];if(a){try{for(var c=rt.__values(a.trim().split(",")),l=c.next();!l.done;l=c.next()){var d=l.value,h=d.split(":",2),_=parseInt(h[0],10),S=(isNaN(_)?60:_)*1e3;try{for(var T=(i=void 0,rt.__values(h[1]&&h[1].split(";")||["all"])),R=T.next();!R.done;R=T.next()){var A=R.value,F=rt.__spread(Object.keys(Wo).map(function(k){return Wo[k]}),["all"]);F.includes(A)&&(this._rateLimits[A]=new Date(s+S))}}catch(k){i={error:k}}finally{try{R&&!R.done&&(o=T.return)&&o.call(T)}finally{if(i)throw i.error}}}}catch(k){r={error:k}}finally{try{l&&!l.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}return!0}else if(u)return this._rateLimits.all=new Date(s+Nt.parseRetryAfterHeader(s,u)),!0;return!1},t.prototype._send=function(e,r){return rt.__awaiter(this,void 0,void 0,function(){var n=this;return rt.__generator(this,function(i){if(!this.module)throw new Nt.SentryError("No module available");return r&&this._isRateLimited(e.type)?[2,Promise.reject({payload:r,type:e.type,reason:"Transport for "+e.type+" requests locked till "+this._disabledUntil(e.type)+" due to too many requests.",status:429})]:[2,this._buffer.add(function(){return new Promise(function(o,s){if(!n.module)throw new Nt.SentryError("No module available");var a=n._getRequestOptions(n.urlParser(e.url)),u=n.module.request(a,function(c){var l=c.statusCode||500,d=al.Status.fromHttpCode(l);c.setEncoding("utf8");var h=c.headers?c.headers["retry-after"]:"";h=Array.isArray(h)?h[0]:h;var _=c.headers?c.headers["x-sentry-rate-limits"]:"";_=Array.isArray(_)?_[0]:_;var S={"x-sentry-rate-limits":_,"retry-after":h},T=n._handleRateLimit(S);if(T&&Nt.logger.warn("Too many "+e.type+" requests, backing off until: "+n._disabledUntil(e.type)),d===al.Status.Success)o({status:d});else{var R="HTTP Error ("+l+")";c.headers&&c.headers["x-sentry-error"]&&(R+=": "+c.headers["x-sentry-error"]),s(new Nt.SentryError(R))}c.on("data",function(){}),c.on("end",function(){})});u.on("error",s),u.end(e.body)})})]})})},t}();$o.BaseTransport=Ng});var cl=b((Z0,ul)=>{var or=1e3,sr=or*60,ar=sr*60,qt=ar*24,qg=qt*7,kg=qt*365.25;ul.exports=function(t,e){e=e||{};var r=typeof t;if(r==="string"&&t.length>0)return Dg(t);if(r==="number"&&isFinite(t))return e.long?Fg(t):Lg(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function Dg(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(!!e){var r=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return r*kg;case"weeks":case"week":case"w":return r*qg;case"days":case"day":case"d":return r*qt;case"hours":case"hour":case"hrs":case"hr":case"h":return r*ar;case"minutes":case"minute":case"mins":case"min":case"m":return r*sr;case"seconds":case"second":case"secs":case"sec":case"s":return r*or;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}function Lg(t){var e=Math.abs(t);return e>=qt?Math.round(t/qt)+"d":e>=ar?Math.round(t/ar)+"h":e>=sr?Math.round(t/sr)+"m":e>=or?Math.round(t/or)+"s":t+"ms"}function Fg(t){var e=Math.abs(t);return e>=qt?Gn(t,e,qt,"day"):e>=ar?Gn(t,e,ar,"hour"):e>=sr?Gn(t,e,sr,"minute"):e>=or?Gn(t,e,or,"second"):t+" ms"}function Gn(t,e,r,n){var i=e>=r*1.5;return Math.round(t/r)+" "+n+(i?"s":"")}});var Yo=b((eT,ll)=>{function jg(t){r.debug=r,r.default=r,r.coerce=u,r.disable=o,r.enable=i,r.enabled=s,r.humanize=cl(),r.destroy=c,Object.keys(t).forEach(l=>{r[l]=t[l]}),r.names=[],r.skips=[],r.formatters={};function e(l){let d=0;for(let h=0;h<l.length;h++)d=(d<<5)-d+l.charCodeAt(h),d|=0;return r.colors[Math.abs(d)%r.colors.length]}r.selectColor=e;function r(l){let d,h=null,_,S;function T(...R){if(!T.enabled)return;let A=T,F=Number(new Date),k=F-(d||F);A.diff=k,A.prev=d,A.curr=F,d=F,R[0]=r.coerce(R[0]),typeof R[0]!="string"&&R.unshift("%O");let xe=0;R[0]=R[0].replace(/%([a-zA-Z%])/g,(I,G)=>{if(I==="%%")return"%";xe++;let L=r.formatters[G];if(typeof L=="function"){let W=R[xe];I=L.call(A,W),R.splice(xe,1),xe--}return I}),r.formatArgs.call(A,R),(A.log||r.log).apply(A,R)}return T.namespace=l,T.useColors=r.useColors(),T.color=r.selectColor(l),T.extend=n,T.destroy=r.destroy,Object.defineProperty(T,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(_!==r.namespaces&&(_=r.namespaces,S=r.enabled(l)),S),set:R=>{h=R}}),typeof r.init=="function"&&r.init(T),T}function n(l,d){let h=r(this.namespace+(typeof d=="undefined"?":":d)+l);return h.log=this.log,h}function i(l){r.save(l),r.namespaces=l,r.names=[],r.skips=[];let d,h=(typeof l=="string"?l:"").split(/[\s,]+/),_=h.length;for(d=0;d<_;d++)!h[d]||(l=h[d].replace(/\*/g,".*?"),l[0]==="-"?r.skips.push(new RegExp("^"+l.substr(1)+"$")):r.names.push(new RegExp("^"+l+"$")))}function o(){let l=[...r.names.map(a),...r.skips.map(a).map(d=>"-"+d)].join(",");return r.enable(""),l}function s(l){if(l[l.length-1]==="*")return!0;let d,h;for(d=0,h=r.skips.length;d<h;d++)if(r.skips[d].test(l))return!1;for(d=0,h=r.names.length;d<h;d++)if(r.names[d].test(l))return!0;return!1}function a(l){return l.toString().substring(2,l.toString().length-2).replace(/\.\*\?$/,"*")}function u(l){return l instanceof Error?l.stack||l.message:l}function c(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return r.enable(r.load()),r}ll.exports=jg});var fl=b((Oe,zn)=>{Oe.formatArgs=Hg;Oe.save=Bg;Oe.load=Gg;Oe.useColors=Ug;Oe.storage=zg();Oe.destroy=(()=>{let t=!1;return()=>{t||(t=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();Oe.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function Ug(){return typeof window!="undefined"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator!="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)?!1:typeof document!="undefined"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window!="undefined"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator!="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator!="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function Hg(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+zn.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;t.splice(1,0,e,"color: inherit");let r=0,n=0;t[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(r++,i==="%c"&&(n=r))}),t.splice(n,0,e)}Oe.log=console.debug||console.log||(()=>{});function Bg(t){try{t?Oe.storage.setItem("debug",t):Oe.storage.removeItem("debug")}catch{}}function Gg(){let t;try{t=Oe.storage.getItem("debug")}catch{}return!t&&typeof process!="undefined"&&"env"in process&&(t=process.env.DEBUG),t}function zg(){try{return localStorage}catch{}}zn.exports=Yo()(Oe);var{formatters:Vg}=zn.exports;Vg.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var pl=b((tT,dl)=>{"use strict";dl.exports=(t,e=process.argv)=>{let r=t.startsWith("-")?"":t.length===1?"-":"--",n=e.indexOf(r+t),i=e.indexOf("--");return n!==-1&&(i===-1||n<i)}});var _l=b((rT,vl)=>{"use strict";var Wg=require("os"),hl=require("tty"),Ne=pl(),{env:ne}=process,_t;Ne("no-color")||Ne("no-colors")||Ne("color=false")||Ne("color=never")?_t=0:(Ne("color")||Ne("colors")||Ne("color=true")||Ne("color=always"))&&(_t=1);"FORCE_COLOR"in ne&&(ne.FORCE_COLOR==="true"?_t=1:ne.FORCE_COLOR==="false"?_t=0:_t=ne.FORCE_COLOR.length===0?1:Math.min(parseInt(ne.FORCE_COLOR,10),3));function Ko(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function Jo(t,e){if(_t===0)return 0;if(Ne("color=16m")||Ne("color=full")||Ne("color=truecolor"))return 3;if(Ne("color=256"))return 2;if(t&&!e&&_t===void 0)return 0;let r=_t||0;if(ne.TERM==="dumb")return r;if(process.platform==="win32"){let n=Wg.release().split(".");return Number(n[0])>=10&&Number(n[2])>=10586?Number(n[2])>=14931?3:2:1}if("CI"in ne)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(n=>n in ne)||ne.CI_NAME==="codeship"?1:r;if("TEAMCITY_VERSION"in ne)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(ne.TEAMCITY_VERSION)?1:0;if(ne.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in ne){let n=parseInt((ne.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(ne.TERM_PROGRAM){case"iTerm.app":return n>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(ne.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ne.TERM)||"COLORTERM"in ne?1:r}function $g(t){let e=Jo(t,t&&t.isTTY);return Ko(e)}vl.exports={supportsColor:$g,stdout:Ko(Jo(!0,hl.isatty(1))),stderr:Ko(Jo(!0,hl.isatty(2)))}});var ml=b((ue,Wn)=>{var Yg=require("tty"),Vn=require("util");ue.init=tm;ue.log=Qg;ue.formatArgs=Jg;ue.save=Zg;ue.load=em;ue.useColors=Kg;ue.destroy=Vn.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");ue.colors=[6,2,3,4,5,1];try{let t=_l();t&&(t.stderr||t).level>=2&&(ue.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}ue.inspectOpts=Object.keys(process.env).filter(t=>/^debug_/i.test(t)).reduce((t,e)=>{let r=e.substring(6).toLowerCase().replace(/_([a-z])/g,(i,o)=>o.toUpperCase()),n=process.env[e];return/^(yes|on|true|enabled)$/i.test(n)?n=!0:/^(no|off|false|disabled)$/i.test(n)?n=!1:n==="null"?n=null:n=Number(n),t[r]=n,t},{});function Kg(){return"colors"in ue.inspectOpts?Boolean(ue.inspectOpts.colors):Yg.isatty(process.stderr.fd)}function Jg(t){let{namespace:e,useColors:r}=this;if(r){let n=this.color,i="\x1B[3"+(n<8?n:"8;5;"+n),o=` ${i};1m${e} \x1B[0m`;t[0]=o+t[0].split(`
21
21
  `).join(`
22
- `+o),t.push(i+"m+"+bn.exports.humanize(this.diff)+"\x1B[0m")}else t[0]=gv()+e+" "+t[0]}function gv(){return oe.inspectOpts.hideDate?"":new Date().toISOString()+" "}function mv(...t){return process.stderr.write(yn.format(...t)+`
23
- `)}function yv(t){t?process.env.DEBUG=t:delete process.env.DEBUG}function bv(){return process.env.DEBUG}function Sv(t){t.inspectOpts={};let e=Object.keys(oe.inspectOpts);for(let r=0;r<e.length;r++)t.inspectOpts[e[r]]=oe.inspectOpts[e[r]]}bn.exports=vo()(oe);var{formatters:gc}=bn.exports;gc.o=function(t){return this.inspectOpts.colors=this.useColors,yn.inspect(t,this.inspectOpts).split(`
24
- `).map(e=>e.trim()).join(" ")};gc.O=function(t){return this.inspectOpts.colors=this.useColors,yn.inspect(t,this.inspectOpts)}});var Sn=b((HS,yo)=>{typeof process=="undefined"||process.type==="renderer"||process.browser===!0||process.__nwjs?yo.exports=lc():yo.exports=mc()});var yc=b(bo=>{"use strict";Object.defineProperty(bo,"__esModule",{value:!0});function Ev(t){return function(e,r){return new Promise((n,i)=>{t.call(this,e,r,(o,a)=>{o?i(o):n(a)})})}}bo.default=Ev});var Ec=b((Eo,Sc)=>{"use strict";var bc=Eo&&Eo.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},Tv=require("events"),Ov=bc(Sn()),wv=bc(yc()),pr=Ov.default("agent-base");function xv(t){return Boolean(t)&&typeof t.addRequest=="function"}function So(){let{stack:t}=new Error;return typeof t!="string"?!1:t.split(`
25
- `).some(e=>e.indexOf("(https.js:")!==-1||e.indexOf("node:https:")!==-1)}function En(t,e){return new En.Agent(t,e)}(function(t){class e extends Tv.EventEmitter{constructor(n,i){super();let o=i;typeof n=="function"?this.callback=n:n&&(o=n),this.timeout=null,o&&typeof o.timeout=="number"&&(this.timeout=o.timeout),this.maxFreeSockets=1,this.maxSockets=1,this.maxTotalSockets=1/0,this.sockets={},this.freeSockets={},this.requests={},this.options={}}get defaultPort(){return typeof this.explicitDefaultPort=="number"?this.explicitDefaultPort:So()?443:80}set defaultPort(n){this.explicitDefaultPort=n}get protocol(){return typeof this.explicitProtocol=="string"?this.explicitProtocol:So()?"https:":"http:"}set protocol(n){this.explicitProtocol=n}callback(n,i,o){throw new Error('"agent-base" has no default implementation, you must subclass and override `callback()`')}addRequest(n,i){let o=Object.assign({},i);typeof o.secureEndpoint!="boolean"&&(o.secureEndpoint=So()),o.host==null&&(o.host="localhost"),o.port==null&&(o.port=o.secureEndpoint?443:80),o.protocol==null&&(o.protocol=o.secureEndpoint?"https:":"http:"),o.host&&o.path&&delete o.path,delete o.agent,delete o.hostname,delete o._defaultAgent,delete o.defaultPort,delete o.createConnection,n._last=!0,n.shouldKeepAlive=!1;let a=!1,s=null,u=o.timeout||this.timeout,c=y=>{n._hadError||(n.emit("error",y),n._hadError=!0)},l=()=>{s=null,a=!0;let y=new Error(`A "socket" was not created for HTTP request before ${u}ms`);y.code="ETIMEOUT",c(y)},d=y=>{a||(s!==null&&(clearTimeout(s),s=null),c(y))},h=y=>{if(a)return;if(s!=null&&(clearTimeout(s),s=null),xv(y)){pr("Callback returned another Agent instance %o",y.constructor.name),y.addRequest(n,o);return}if(y){y.once("free",()=>{this.freeSocket(y,o)}),n.onSocket(y);return}let S=new Error(`no Duplex stream was returned to agent-base for \`${n.method} ${n.path}\``);c(S)};if(typeof this.callback!="function"){c(new Error("`callback` is not defined"));return}this.promisifiedCallback||(this.callback.length>=3?(pr("Converting legacy callback function to promise"),this.promisifiedCallback=wv.default(this.callback)):this.promisifiedCallback=this.callback),typeof u=="number"&&u>0&&(s=setTimeout(l,u)),"port"in o&&typeof o.port!="number"&&(o.port=Number(o.port));try{pr("Resolving socket for %o request: %o",o.protocol,`${n.method} ${n.path}`),Promise.resolve(this.promisifiedCallback(n,o)).then(h,d)}catch(y){Promise.reject(y).catch(d)}}freeSocket(n,i){pr("Freeing socket %o %o",n.constructor.name,i),n.destroy()}destroy(){pr("Destroying agent %o",this.constructor.name)}}t.Agent=e,t.prototype=t.Agent.prototype})(En||(En={}));Sc.exports=En});var Tc=b(_r=>{"use strict";var Iv=_r&&_r.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(_r,"__esModule",{value:!0});var Cv=Iv(Sn()),hr=Cv.default("https-proxy-agent:parse-proxy-response");function Rv(t){return new Promise((e,r)=>{let n=0,i=[];function o(){let d=t.read();d?l(d):t.once("readable",o)}function a(){t.removeListener("end",u),t.removeListener("error",c),t.removeListener("close",s),t.removeListener("readable",o)}function s(d){hr("onclose had error %o",d)}function u(){hr("onend")}function c(d){a(),hr("onerror %o",d),r(d)}function l(d){i.push(d),n+=d.length;let h=Buffer.concat(i,n);if(h.indexOf(`\r
22
+ `+o),t.push(i+"m+"+Wn.exports.humanize(this.diff)+"\x1B[0m")}else t[0]=Xg()+e+" "+t[0]}function Xg(){return ue.inspectOpts.hideDate?"":new Date().toISOString()+" "}function Qg(...t){return process.stderr.write(Vn.format(...t)+`
23
+ `)}function Zg(t){t?process.env.DEBUG=t:delete process.env.DEBUG}function em(){return process.env.DEBUG}function tm(t){t.inspectOpts={};let e=Object.keys(ue.inspectOpts);for(let r=0;r<e.length;r++)t.inspectOpts[e[r]]=ue.inspectOpts[e[r]]}Wn.exports=Yo()(ue);var{formatters:gl}=Wn.exports;gl.o=function(t){return this.inspectOpts.colors=this.useColors,Vn.inspect(t,this.inspectOpts).split(`
24
+ `).map(e=>e.trim()).join(" ")};gl.O=function(t){return this.inspectOpts.colors=this.useColors,Vn.inspect(t,this.inspectOpts)}});var $n=b((nT,Xo)=>{typeof process=="undefined"||process.type==="renderer"||process.browser===!0||process.__nwjs?Xo.exports=fl():Xo.exports=ml()});var yl=b(Qo=>{"use strict";Object.defineProperty(Qo,"__esModule",{value:!0});function rm(t){return function(e,r){return new Promise((n,i)=>{t.call(this,e,r,(o,s)=>{o?i(o):n(s)})})}}Qo.default=rm});var El=b((es,Sl)=>{"use strict";var bl=es&&es.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},nm=require("events"),im=bl($n()),om=bl(yl()),qr=im.default("agent-base");function sm(t){return Boolean(t)&&typeof t.addRequest=="function"}function Zo(){let{stack:t}=new Error;return typeof t!="string"?!1:t.split(`
25
+ `).some(e=>e.indexOf("(https.js:")!==-1||e.indexOf("node:https:")!==-1)}function Yn(t,e){return new Yn.Agent(t,e)}(function(t){class e extends nm.EventEmitter{constructor(n,i){super();let o=i;typeof n=="function"?this.callback=n:n&&(o=n),this.timeout=null,o&&typeof o.timeout=="number"&&(this.timeout=o.timeout),this.maxFreeSockets=1,this.maxSockets=1,this.maxTotalSockets=1/0,this.sockets={},this.freeSockets={},this.requests={},this.options={}}get defaultPort(){return typeof this.explicitDefaultPort=="number"?this.explicitDefaultPort:Zo()?443:80}set defaultPort(n){this.explicitDefaultPort=n}get protocol(){return typeof this.explicitProtocol=="string"?this.explicitProtocol:Zo()?"https:":"http:"}set protocol(n){this.explicitProtocol=n}callback(n,i,o){throw new Error('"agent-base" has no default implementation, you must subclass and override `callback()`')}addRequest(n,i){let o=Object.assign({},i);typeof o.secureEndpoint!="boolean"&&(o.secureEndpoint=Zo()),o.host==null&&(o.host="localhost"),o.port==null&&(o.port=o.secureEndpoint?443:80),o.protocol==null&&(o.protocol=o.secureEndpoint?"https:":"http:"),o.host&&o.path&&delete o.path,delete o.agent,delete o.hostname,delete o._defaultAgent,delete o.defaultPort,delete o.createConnection,n._last=!0,n.shouldKeepAlive=!1;let s=!1,a=null,u=o.timeout||this.timeout,c=_=>{n._hadError||(n.emit("error",_),n._hadError=!0)},l=()=>{a=null,s=!0;let _=new Error(`A "socket" was not created for HTTP request before ${u}ms`);_.code="ETIMEOUT",c(_)},d=_=>{s||(a!==null&&(clearTimeout(a),a=null),c(_))},h=_=>{if(s)return;if(a!=null&&(clearTimeout(a),a=null),sm(_)){qr("Callback returned another Agent instance %o",_.constructor.name),_.addRequest(n,o);return}if(_){_.once("free",()=>{this.freeSocket(_,o)}),n.onSocket(_);return}let S=new Error(`no Duplex stream was returned to agent-base for \`${n.method} ${n.path}\``);c(S)};if(typeof this.callback!="function"){c(new Error("`callback` is not defined"));return}this.promisifiedCallback||(this.callback.length>=3?(qr("Converting legacy callback function to promise"),this.promisifiedCallback=om.default(this.callback)):this.promisifiedCallback=this.callback),typeof u=="number"&&u>0&&(a=setTimeout(l,u)),"port"in o&&typeof o.port!="number"&&(o.port=Number(o.port));try{qr("Resolving socket for %o request: %o",o.protocol,`${n.method} ${n.path}`),Promise.resolve(this.promisifiedCallback(n,o)).then(h,d)}catch(_){Promise.reject(_).catch(d)}}freeSocket(n,i){qr("Freeing socket %o %o",n.constructor.name,i),n.destroy()}destroy(){qr("Destroying agent %o",this.constructor.name)}}t.Agent=e,t.prototype=t.Agent.prototype})(Yn||(Yn={}));Sl.exports=Yn});var Tl=b(Dr=>{"use strict";var am=Dr&&Dr.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Dr,"__esModule",{value:!0});var um=am($n()),kr=um.default("https-proxy-agent:parse-proxy-response");function cm(t){return new Promise((e,r)=>{let n=0,i=[];function o(){let d=t.read();d?l(d):t.once("readable",o)}function s(){t.removeListener("end",u),t.removeListener("error",c),t.removeListener("close",a),t.removeListener("readable",o)}function a(d){kr("onclose had error %o",d)}function u(){kr("onend")}function c(d){s(),kr("onerror %o",d),r(d)}function l(d){i.push(d),n+=d.length;let h=Buffer.concat(i,n);if(h.indexOf(`\r
26
26
  \r
27
- `)===-1){hr("have not received end of HTTP headers yet..."),o();return}let S=h.toString("ascii",0,h.indexOf(`\r
28
- `)),T=+S.split(" ")[1];hr("got proxy server response: %o",S),e({statusCode:T,buffered:h})}t.on("error",c),t.on("close",s),t.on("end",u),o()})}_r.default=Rv});var Ic=b(Tt=>{"use strict";var Av=Tt&&Tt.__awaiter||function(t,e,r,n){function i(o){return o instanceof r?o:new r(function(a){a(o)})}return new(r||(r=Promise))(function(o,a){function s(l){try{c(n.next(l))}catch(d){a(d)}}function u(l){try{c(n.throw(l))}catch(d){a(d)}}function c(l){l.done?o(l.value):i(l.value).then(s,u)}c((n=n.apply(t,e||[])).next())})},Wt=Tt&&Tt.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Tt,"__esModule",{value:!0});var Oc=Wt(require("net")),wc=Wt(require("tls")),Pv=Wt(require("url")),qv=Wt(require("assert")),Nv=Wt(Sn()),Mv=Ec(),kv=Wt(Tc()),vr=Nv.default("https-proxy-agent:agent"),xc=class extends Mv.Agent{constructor(e){let r;if(typeof e=="string"?r=Pv.default.parse(e):r=e,!r)throw new Error("an HTTP(S) proxy server `host` and `port` must be specified!");vr("creating new HttpsProxyAgent instance: %o",r);super(r);let n=Object.assign({},r);this.secureProxy=r.secureProxy||jv(n.protocol),n.host=n.hostname||n.host,typeof n.port=="string"&&(n.port=parseInt(n.port,10)),!n.port&&n.host&&(n.port=this.secureProxy?443:80),this.secureProxy&&!("ALPNProtocols"in n)&&(n.ALPNProtocols=["http 1.1"]),n.host&&n.path&&(delete n.path,delete n.pathname),this.proxy=n}callback(e,r){return Av(this,void 0,void 0,function*(){let{proxy:n,secureProxy:i}=this,o;i?(vr("Creating `tls.Socket`: %o",n),o=wc.default.connect(n)):(vr("Creating `net.Socket`: %o",n),o=Oc.default.connect(n));let a=Object.assign({},n.headers),u=`CONNECT ${`${r.host}:${r.port}`} HTTP/1.1\r
29
- `;n.auth&&(a["Proxy-Authorization"]=`Basic ${Buffer.from(n.auth).toString("base64")}`);let{host:c,port:l,secureEndpoint:d}=r;Fv(l,d)||(c+=`:${l}`),a.Host=c,a.Connection="close";for(let C of Object.keys(a))u+=`${C}: ${a[C]}\r
30
- `;let h=kv.default(o);o.write(`${u}\r
31
- `);let{statusCode:y,buffered:S}=yield h;if(y===200){if(e.once("socket",Dv),r.secureEndpoint){let C=r.servername||r.host;if(!C)throw new Error('Could not determine "servername"');return vr("Upgrading socket connection to TLS"),wc.default.connect(Object.assign(Object.assign({},Hv(r,"host","hostname","path","port")),{socket:o,servername:C}))}return o}o.destroy();let T=new Oc.default.Socket;return T.readable=!0,e.once("socket",C=>{vr("replaying proxy buffer for failed request"),qv.default(C.listenerCount("data")>0),C.push(S),C.push(null)}),T})}};Tt.default=xc;function Dv(t){t.resume()}function Fv(t,e){return Boolean(!e&&t===80||e&&t===443)}function jv(t){return typeof t=="string"?/^https:?$/i.test(t):!1}function Hv(t,...e){let r={},n;for(n in t)e.includes(n)||(r[n]=t[n]);return r}});var xo=b((wo,Cc)=>{"use strict";var Lv=wo&&wo.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},To=Lv(Ic());function Oo(t){return new To.default(t)}(function(t){t.HttpsProxyAgent=To.default,t.prototype=To.default.prototype})(Oo||(Oo={}));Cc.exports=Oo});var Pc=b(Io=>{Object.defineProperty(Io,"__esModule",{value:!0});var Uv=N(),Rc=ie(),Ac=require("http"),Bv=vn(),Gv=function(t){Uv.__extends(e,t);function e(r){var n=t.call(this,r)||this;n.options=r;var i=n._getProxy("http");return n.module=Ac,n.client=i?new(xo())(i):new Ac.Agent({keepAlive:!1,maxSockets:30,timeout:2e3}),n}return e.prototype.sendEvent=function(r){return this._send(Rc.eventToSentryRequest(r,this._api),r)},e.prototype.sendSession=function(r){return this._send(Rc.sessionToSentryRequest(r,this._api),r)},e}(Bv.BaseTransport);Io.HTTPTransport=Gv});var Mc=b(Co=>{Object.defineProperty(Co,"__esModule",{value:!0});var zv=N(),qc=ie(),Nc=require("https"),Vv=vn(),Wv=function(t){zv.__extends(e,t);function e(r){var n=t.call(this,r)||this;n.options=r;var i=n._getProxy("https");return n.module=Nc,n.client=i?new(xo())(i):new Nc.Agent({keepAlive:!1,maxSockets:30,timeout:2e3}),n}return e.prototype.sendEvent=function(r){return this._send(qc.eventToSentryRequest(r,this._api),r)},e.prototype.sendSession=function(r){return this._send(qc.sessionToSentryRequest(r,this._api),r)},e}(Vv.BaseTransport);Co.HTTPSTransport=Wv});var Ro=b(gr=>{Object.defineProperty(gr,"__esModule",{value:!0});var Yv=vn();gr.BaseTransport=Yv.BaseTransport;var $v=Pc();gr.HTTPTransport=$v.HTTPTransport;var Kv=Mc();gr.HTTPSTransport=Kv.HTTPSTransport});var Po=b(Ao=>{Object.defineProperty(Ao,"__esModule",{value:!0});var st=N(),kc=ie(),Jv=ne(),$e=P(),Tn=fo(),Dc=Ro(),Xv=function(t){st.__extends(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.eventFromException=function(r,n){var i=this,o=r,a=n&&n.data&&n.data.mechanism,s=a||{handled:!0,type:"generic"};if(!$e.isError(r)){if($e.isPlainObject(r)){var u="Non-Error exception captured with keys: "+$e.extractExceptionKeysForMessage(r);kc.getCurrentHub().configureScope(function(c){c.setExtra("__serialized__",$e.normalizeToSize(r))}),o=n&&n.syntheticException||new Error(u),o.message=u}else o=n&&n.syntheticException||new Error(r),o.message=r;s.synthetic=!0}return new $e.SyncPromise(function(c,l){return Tn.parseError(o,i._options).then(function(d){$e.addExceptionTypeValue(d,void 0,void 0),$e.addExceptionMechanism(d,s),c(st.__assign(st.__assign({},d),{event_id:n&&n.event_id}))}).then(null,l)})},e.prototype.eventFromMessage=function(r,n,i){var o=this;n===void 0&&(n=Jv.Severity.Info);var a={event_id:i&&i.event_id,level:n,message:r};return new $e.SyncPromise(function(s){if(o._options.attachStacktrace&&i&&i.syntheticException){var u=i.syntheticException?Tn.extractStackFromError(i.syntheticException):[];Tn.parseStack(u,o._options).then(function(c){a.stacktrace={frames:Tn.prepareFramesForEvent(c)},s(a)}).then(null,function(){s(a)})}else s(a)})},e.prototype._setupTransport=function(){if(!this._options.dsn)return t.prototype._setupTransport.call(this);var r=new $e.Dsn(this._options.dsn),n=st.__assign(st.__assign(st.__assign(st.__assign(st.__assign({},this._options.transportOptions),this._options.httpProxy&&{httpProxy:this._options.httpProxy}),this._options.httpsProxy&&{httpsProxy:this._options.httpsProxy}),this._options.caCerts&&{caCerts:this._options.caCerts}),{dsn:this._options.dsn,tunnel:this._options.tunnel,_metadata:this._options._metadata});return this._options.transport?new this._options.transport(n):r.protocol==="http"?new Dc.HTTPTransport(n):new Dc.HTTPSTransport(n)},e}(kc.BaseBackend);Ao.NodeBackend=Xv});var Mo=b(No=>{Object.defineProperty(No,"__esModule",{value:!0});var Qv=N(),qo=ie(),Zv=ge(),On=ne(),Fc=P(),eg=Po(),tg=function(t){Qv.__extends(e,t);function e(r){var n=this;return r._metadata=r._metadata||{},r._metadata.sdk=r._metadata.sdk||{name:"sentry.javascript.node",packages:[{name:"npm:@sentry/node",version:qo.SDK_VERSION}],version:qo.SDK_VERSION},n=t.call(this,eg.NodeBackend,r)||this,n}return e.prototype.captureException=function(r,n,i){if(this._options.autoSessionTracking&&this._sessionFlusher&&i){var o=i.getRequestSession();o&&o.status===On.RequestSessionStatus.Ok&&(o.status=On.RequestSessionStatus.Errored)}return t.prototype.captureException.call(this,r,n,i)},e.prototype.captureEvent=function(r,n,i){if(this._options.autoSessionTracking&&this._sessionFlusher&&i){var o=r.type||"exception",a=o==="exception"&&r.exception&&r.exception.values&&r.exception.values.length>0;if(a){var s=i.getRequestSession();s&&s.status===On.RequestSessionStatus.Ok&&(s.status=On.RequestSessionStatus.Errored)}}return t.prototype.captureEvent.call(this,r,n,i)},e.prototype.close=function(r){var n;return(n=this._sessionFlusher)===null||n===void 0||n.close(),t.prototype.close.call(this,r)},e.prototype.initSessionFlusher=function(){var r=this._options,n=r.release,i=r.environment;n?this._sessionFlusher=new Zv.SessionFlusher(this.getTransport(),{release:n,environment:i}):Fc.logger.warn("Cannot initialise an instance of SessionFlusher if no release is provided!")},e.prototype._prepareEvent=function(r,n,i){return r.platform=r.platform||"node",this.getOptions().serverName&&(r.server_name=this.getOptions().serverName),t.prototype._prepareEvent.call(this,r,n,i)},e.prototype._captureRequestSession=function(){this._sessionFlusher?this._sessionFlusher.incrementSessionStatusCount():Fc.logger.warn("Discarded request mode session because autoSessionTracking option was disabled")},e}(qo.BaseClient);No.NodeClient=tg});var Uc=b(ko=>{Object.defineProperty(ko,"__esModule",{value:!0});var jc=N(),Hc=ie(),mr=ne(),rg=P(),ng=require("util"),Lc=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(){var e,r;try{for(var n=jc.__values(["debug","info","warn","error","log"]),i=n.next();!i.done;i=n.next()){var o=i.value;rg.fill(console,o,ig(o))}}catch(a){e={error:a}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}},t.id="Console",t}();ko.Console=Lc;function ig(t){return function(r){var n;switch(t){case"debug":n=mr.Severity.Debug;break;case"error":n=mr.Severity.Error;break;case"info":n=mr.Severity.Info;break;case"warn":n=mr.Severity.Warning;break;default:n=mr.Severity.Log}return function(){Hc.getCurrentHub().getIntegration(Lc)&&Hc.getCurrentHub().addBreadcrumb({category:"console",level:n,message:ng.format.apply(void 0,arguments)},{input:jc.__spread(arguments),level:t}),r.apply(this,arguments)}}}});var Vc=b(Ot=>{Object.defineProperty(Ot,"__esModule",{value:!0});var Do=N(),og=ie(),ag=P(),Bc=require("url"),Gc=ag.parseSemver(process.versions.node);function sg(t){var e,r=(e=og.getCurrentHub().getClient())===null||e===void 0?void 0:e.getDsn();return r?t.includes(r.host):!1}Ot.isSentryRequest=sg;function zc(t){var e=t.protocol||"",r=t.hostname||t.host||"",n=!t.port||t.port===80||t.port===443?"":":"+t.port,i=t.path?t.path:"/";return e+"//"+r+n+i}Ot.extractUrl=zc;function ug(t,e,r){var n,i,o;if(!t)return t;var a=Do.__read(t.split(" "),2),s=a[0],u=a[1];return e.host&&!e.protocol&&(e.protocol=(i=(n=r)===null||n===void 0?void 0:n.agent)===null||i===void 0?void 0:i.protocol,u=zc(e)),((o=u)===null||o===void 0?void 0:o.startsWith("///"))&&(u=u.slice(2)),s+" "+u}Ot.cleanSpanDescription=ug;function Fo(t){var e={protocol:t.protocol,hostname:typeof t.hostname=="string"&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,hash:t.hash,search:t.search,pathname:t.pathname,path:""+(t.pathname||"")+(t.search||""),href:t.href};return t.port!==""&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=t.username+":"+t.password),e}Ot.urlToOptions=Fo;function cg(t,e){var r,n,i,o,a,s,u,c,l,d;return typeof e[e.length-1]=="function"&&(l=e.pop()),typeof e[0]=="string"?d=Fo(new Bc.URL(e[0])):e[0]instanceof Bc.URL?d=Fo(e[0]):d=e[0],e.length===2&&(d=Do.__assign(Do.__assign({},d),e[1])),d.protocol===void 0&&(Gc.major&&Gc.major>8?d.protocol=((n=(r=t)===null||r===void 0?void 0:r.globalAgent)===null||n===void 0?void 0:n.protocol)||((i=d.agent)===null||i===void 0?void 0:i.protocol)||((o=d._defaultAgent)===null||o===void 0?void 0:o.protocol):d.protocol=((a=d.agent)===null||a===void 0?void 0:a.protocol)||((s=d._defaultAgent)===null||s===void 0?void 0:s.protocol)||((c=(u=t)===null||u===void 0?void 0:u.globalAgent)===null||c===void 0?void 0:c.protocol)),l?[d,l]:[d]}Ot.normalizeRequestArgs=cg});var Jc=b(Ho=>{Object.defineProperty(Ho,"__esModule",{value:!0});var Wc=N(),jo=ie(),Yt=P(),yr=Vc(),Yc=Yt.parseSemver(process.versions.node),$c=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._breadcrumbs=typeof e.breadcrumbs=="undefined"?!0:e.breadcrumbs,this._tracing=typeof e.tracing=="undefined"?!1:e.tracing}return t.prototype.setupOnce=function(){if(!(!this._breadcrumbs&&!this._tracing)){var e=fg(this._breadcrumbs,this._tracing),r=require("http");if(Yt.fill(r,"get",e),Yt.fill(r,"request",e),Yc.major&&Yc.major>8){var n=require("https");Yt.fill(n,"get",e),Yt.fill(n,"request",e)}}},t.id="Http",t}();Ho.Http=$c;function fg(t,e){return function(n){return function(){for(var o=[],a=0;a<arguments.length;a++)o[a]=arguments[a];var s=this,u=yr.normalizeRequestArgs(this,o),c=u[0],l=yr.extractUrl(c);if(yr.isSentryRequest(l))return n.apply(s,u);var d,h,y=jo.getCurrentHub().getScope();if(y&&e&&(h=y.getSpan(),h)){d=h.startChild({description:(c.method||"GET")+" "+l,op:"http.client"});var S=d.toTraceparent();Yt.logger.log("[Tracing] Adding sentry-trace header "+S+" to outgoing request to "+l+": "),c.headers=Wc.__assign(Wc.__assign({},c.headers),{"sentry-trace":S})}return n.apply(s,u).once("response",function(T){var C=this;t&&Kc("response",l,C,T),e&&d&&(T.statusCode&&d.setHttpStatus(T.statusCode),d.description=yr.cleanSpanDescription(d.description,c,C),d.finish())}).once("error",function(){var T=this;t&&Kc("error",l,T),e&&d&&(d.setHttpStatus(500),d.description=yr.cleanSpanDescription(d.description,c,T),d.finish())})}}}function Kc(t,e,r,n){!jo.getCurrentHub().getIntegration($c)||jo.getCurrentHub().addBreadcrumb({category:"http",data:{method:r.method,status_code:n&&n.statusCode,url:e},type:"http"},{event:t,request:r,response:n})}});var Bo=b(Uo=>{Object.defineProperty(Uo,"__esModule",{value:!0});var lg=ie(),Lo=P(),dg=2e3;function pg(t){console.error(t&&t.stack?t.stack:t);var e=lg.getCurrentHub().getClient();if(e===void 0){Lo.logger.warn("No NodeClient was defined, we are exiting the process now."),global.process.exit(1);return}var r=e.getOptions(),n=r&&r.shutdownTimeout&&r.shutdownTimeout>0&&r.shutdownTimeout||dg;Lo.forget(e.close(n).then(function(i){i||Lo.logger.warn("We reached the timeout for emptying the request buffer, still exiting now!"),global.process.exit(1)}))}Uo.logAndExitProcess=pg});var Zc=b(Go=>{Object.defineProperty(Go,"__esModule",{value:!0});var Xc=ie(),hg=ne(),_g=P(),Qc=Bo(),vg=function(){function t(e){e===void 0&&(e={}),this._options=e,this.name=t.id,this.handler=this._makeErrorHandler()}return t.prototype.setupOnce=function(){global.process.on("uncaughtException",this.handler.bind(this))},t.prototype._makeErrorHandler=function(){var e=this,r=2e3,n=!1,i=!1,o=!1,a;return function(s){var u=Qc.logAndExitProcess,c=Xc.getCurrentHub().getClient();if(e._options.onFatalError?u=e._options.onFatalError:c&&c.getOptions().onFatalError&&(u=c.getOptions().onFatalError),n)o?(_g.logger.warn("uncaught exception after calling fatal error shutdown callback - this is bad! forcing shutdown"),Qc.logAndExitProcess(s)):i||(i=!0,setTimeout(function(){o||(o=!0,u(a,s))},r));else{var l=Xc.getCurrentHub();a=s,n=!0,l.getIntegration(t)?l.withScope(function(d){d.setLevel(hg.Severity.Fatal),l.captureException(s,{originalException:s,data:{mechanism:{handled:!1,type:"onuncaughtexception"}}}),o||(o=!0,u(s))}):o||(o=!0,u(s))}}},t.id="OnUncaughtException",t}();Go.OnUncaughtException=vg});var tf=b(zo=>{Object.defineProperty(zo,"__esModule",{value:!0});var gg=ie(),ef=P(),mg=Bo(),yg=function(){function t(e){e===void 0&&(e={mode:"warn"}),this._options=e,this.name=t.id}return t.prototype.setupOnce=function(){global.process.on("unhandledRejection",this.sendUnhandledPromise.bind(this))},t.prototype.sendUnhandledPromise=function(e,r){var n=gg.getCurrentHub();if(!n.getIntegration(t)){this._handleRejection(e);return}var i=r.domain&&r.domain.sentryContext||{};n.withScope(function(o){o.setExtra("unhandledPromiseRejection",!0),i.user&&o.setUser(i.user),i.tags&&o.setTags(i.tags),i.extra&&o.setExtras(i.extra),n.captureException(e,{originalException:r,data:{mechanism:{handled:!1,type:"onunhandledrejection"}}})}),this._handleRejection(e)},t.prototype._handleRejection=function(e){var r="This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason:";this._options.mode==="warn"?ef.consoleSandbox(function(){console.warn(r),console.error(e&&e.stack?e.stack:e)}):this._options.mode==="strict"&&(ef.consoleSandbox(function(){console.warn(r)}),mg.logAndExitProcess(e))},t.id="OnUnhandledRejection",t}();zo.OnUnhandledRejection=yg});var of=b(Vo=>{Object.defineProperty(Vo,"__esModule",{value:!0});var rf=N(),nf=ie(),$t=P(),bg=fo(),Sg="cause",Eg=5,Tg=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._key=e.key||Sg,this._limit=e.limit||Eg}return t.prototype.setupOnce=function(){nf.addGlobalEventProcessor(function(e,r){var n=nf.getCurrentHub().getIntegration(t);if(n){var i=n._handler&&n._handler.bind(n);return typeof i=="function"?i(e,r):e}return e})},t.prototype._handler=function(e,r){var n=this;return!e.exception||!e.exception.values||!r||!$t.isInstanceOf(r.originalException,Error)?$t.SyncPromise.resolve(e):new $t.SyncPromise(function(i){n._walkErrorTree(r.originalException,n._key).then(function(o){e&&e.exception&&e.exception.values&&(e.exception.values=rf.__spread(o,e.exception.values)),i(e)}).then(null,function(){i(e)})})},t.prototype._walkErrorTree=function(e,r,n){var i=this;return n===void 0&&(n=[]),!$t.isInstanceOf(e[r],Error)||n.length+1>=this._limit?$t.SyncPromise.resolve(n):new $t.SyncPromise(function(o,a){bg.getExceptionFromError(e[r]).then(function(s){i._walkErrorTree(e[r],r,rf.__spread([s],n)).then(o).then(null,function(){a()})}).then(null,function(){a()})})},t.id="LinkedErrors",t}();Vo.LinkedErrors=Tg});var cf=b(Yo=>{Object.defineProperty(Yo,"__esModule",{value:!0});var af=N(),sf=require("fs"),uf=require("path"),Wo;function Og(){try{return require.cache?Object.keys(require.cache):[]}catch{return[]}}function wg(){var t=require.main&&require.main.paths||[],e=Og(),r={},n={};return e.forEach(function(i){var o=i,a=function(){var s=o;if(o=uf.dirname(s),!(!o||s===o||n[s])){if(t.indexOf(o)<0)return a();var u=uf.join(s,"package.json");if(n[s]=!0,!sf.existsSync(u))return a();try{var c=JSON.parse(sf.readFileSync(u,"utf8"));r[c.name]=c.version}catch{}}};a()}),r}var xg=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(e,r){var n=this;e(function(i){return r().getIntegration(t)?af.__assign(af.__assign({},i),{modules:n._getModules()}):i})},t.prototype._getModules=function(){return Wo||(Wo=wg()),Wo},t.id="Modules",t}();Yo.Modules=xg});var $o=b(ut=>{Object.defineProperty(ut,"__esModule",{value:!0});var Ig=Uc();ut.Console=Ig.Console;var Cg=Jc();ut.Http=Cg.Http;var Rg=Zc();ut.OnUncaughtException=Rg.OnUncaughtException;var Ag=tf();ut.OnUnhandledRejection=Ag.OnUnhandledRejection;var Pg=of();ut.LinkedErrors=Pg.LinkedErrors;var qg=cf();ut.Modules=qg.Modules});var Jo=b(Fe=>{Object.defineProperty(Fe,"__esModule",{value:!0});var br=N(),ct=ie(),ff=ge(),lf=ne(),Ko=P(),Ng=require("domain"),Mg=Mo(),Sr=$o();Fe.defaultIntegrations=[new ct.Integrations.InboundFilters,new ct.Integrations.FunctionToString,new Sr.Console,new Sr.Http,new Sr.OnUncaughtException,new Sr.OnUnhandledRejection,new Sr.LinkedErrors];function kg(t){t===void 0&&(t={});var e,r=ff.getMainCarrier(),n=((e=r.__SENTRY__)===null||e===void 0?void 0:e.integrations)||[];if(t.defaultIntegrations=t.defaultIntegrations===!1?[]:br.__spread(Array.isArray(t.defaultIntegrations)?t.defaultIntegrations:Fe.defaultIntegrations,n),t.dsn===void 0&&process.env.SENTRY_DSN&&(t.dsn=process.env.SENTRY_DSN),t.tracesSampleRate===void 0&&process.env.SENTRY_TRACES_SAMPLE_RATE){var i=parseFloat(process.env.SENTRY_TRACES_SAMPLE_RATE);isFinite(i)&&(t.tracesSampleRate=i)}if(t.release===void 0){var o=df();o!==void 0?t.release=o:t.autoSessionTracking=!1}t.environment===void 0&&process.env.SENTRY_ENVIRONMENT&&(t.environment=process.env.SENTRY_ENVIRONMENT),t.autoSessionTracking===void 0&&t.dsn!==void 0&&(t.autoSessionTracking=!0),Ng.active&&ff.setHubOnCarrier(r,ct.getCurrentHub()),ct.initAndBind(Mg.NodeClient,t),t.autoSessionTracking&&Lg()}Fe.init=kg;function Dg(){return ct.getCurrentHub().lastEventId()}Fe.lastEventId=Dg;function Fg(t){return br.__awaiter(this,void 0,void 0,function(){var e;return br.__generator(this,function(r){return e=ct.getCurrentHub().getClient(),e?[2,e.flush(t)]:(Ko.logger.warn("Cannot flush events. No client defined."),[2,Promise.resolve(!1)])})})}Fe.flush=Fg;function jg(t){return br.__awaiter(this,void 0,void 0,function(){var e;return br.__generator(this,function(r){return e=ct.getCurrentHub().getClient(),e?[2,e.close(t)]:(Ko.logger.warn("Cannot flush events and disable SDK. No client defined."),[2,Promise.resolve(!1)])})})}Fe.close=jg;function Hg(t){if(t===void 0)return!1;var e=t&&t.getOptions();return e&&e.autoSessionTracking!==void 0?e.autoSessionTracking:!1}Fe.isAutoSessionTrackingEnabled=Hg;function df(t){if(process.env.SENTRY_RELEASE)return process.env.SENTRY_RELEASE;var e=Ko.getGlobalObject();return e.SENTRY_RELEASE&&e.SENTRY_RELEASE.id?e.SENTRY_RELEASE.id:process.env.GITHUB_SHA||process.env.COMMIT_REF||process.env.VERCEL_GIT_COMMIT_SHA||process.env.VERCEL_GITHUB_COMMIT_SHA||process.env.VERCEL_GITLAB_COMMIT_SHA||process.env.VERCEL_BITBUCKET_COMMIT_SHA||process.env.ZEIT_GITHUB_COMMIT_SHA||process.env.ZEIT_GITLAB_COMMIT_SHA||process.env.ZEIT_BITBUCKET_COMMIT_SHA||t}Fe.getSentryRelease=df;function Lg(){var t=ct.getCurrentHub();t.startSession(),process.on("beforeExit",function(){var e,r=(e=t.getScope())===null||e===void 0?void 0:e.getSession(),n=[lf.SessionStatus.Exited,lf.SessionStatus.Crashed];r&&!n.includes(r.status)&&t.endSession()})}});var hf=b(Qo=>{Object.defineProperty(Qo,"__esModule",{value:!0});var pf=N(),wn=require("fs"),Xo=require("path");function Ug(t){var e=Xo.resolve(t);if(!wn.existsSync(e))throw new Error("Cannot read contents of "+e+". Directory does not exist.");if(!wn.statSync(e).isDirectory())throw new Error("Cannot read contents of "+e+", because it is not a directory.");var r=function(n){return wn.readdirSync(n).reduce(function(i,o){var a=Xo.join(n,o);return wn.statSync(a).isDirectory()?pf.__spread(i,r(a)):pf.__spread(i,[a])},[])};return r(e).map(function(n){return Xo.relative(e,n)})}Qo.deepReadDirSync=Ug});var ft=b(Kt=>{Object.defineProperty(Kt,"__esModule",{value:!0});var _f;(function(t){t.Ok="ok",t.DeadlineExceeded="deadline_exceeded",t.Unauthenticated="unauthenticated",t.PermissionDenied="permission_denied",t.NotFound="not_found",t.ResourceExhausted="resource_exhausted",t.InvalidArgument="invalid_argument",t.Unimplemented="unimplemented",t.Unavailable="unavailable",t.InternalError="internal_error",t.UnknownError="unknown_error",t.Cancelled="cancelled",t.AlreadyExists="already_exists",t.FailedPrecondition="failed_precondition",t.Aborted="aborted",t.OutOfRange="out_of_range",t.DataLoss="data_loss"})(_f=Kt.SpanStatus||(Kt.SpanStatus={}));(function(t){function e(r){if(r<400&&r>=100)return t.Ok;if(r>=400&&r<500)switch(r){case 401:return t.Unauthenticated;case 403:return t.PermissionDenied;case 404:return t.NotFound;case 409:return t.AlreadyExists;case 413:return t.FailedPrecondition;case 429:return t.ResourceExhausted;default:return t.InvalidArgument}if(r>=500&&r<600)switch(r){case 501:return t.Unimplemented;case 503:return t.Unavailable;case 504:return t.DeadlineExceeded;default:return t.InternalError}return t.UnknownError}t.fromHttpCode=e})(_f=Kt.SpanStatus||(Kt.SpanStatus={}))});var lt=b(je=>{Object.defineProperty(je,"__esModule",{value:!0});var vf=ge();je.TRACEPARENT_REGEXP=new RegExp("^[ \\t]*([0-9a-f]{32})?-?([0-9a-f]{16})?-?([01])?[ \\t]*$");function Bg(t){t===void 0&&(t=(e=vf.getCurrentHub().getClient())===null||e===void 0?void 0:e.getOptions());var e;return!!t&&("tracesSampleRate"in t||"tracesSampler"in t)}je.hasTracingEnabled=Bg;function Gg(t){var e=t.match(je.TRACEPARENT_REGEXP);if(e){var r=void 0;return e[3]==="1"?r=!0:e[3]==="0"&&(r=!1),{traceId:e[1],parentSampled:r,parentSpanId:e[2]}}}je.extractTraceparentData=Gg;function zg(t){t===void 0&&(t=vf.getCurrentHub());var e,r;return(r=(e=t)===null||e===void 0?void 0:e.getScope())===null||r===void 0?void 0:r.getTransaction()}je.getActiveTransaction=zg;function Vg(t){return t/1e3}je.msToSec=Vg;function Wg(t){return t*1e3}je.secToMs=Wg;var Yg=P();je.stripUrlQueryAndFragment=Yg.stripUrlQueryAndFragment});var yf=b(ea=>{Object.defineProperty(ea,"__esModule",{value:!0});var Zo=P(),gf=ft(),$g=lt();function Kg(){Zo.addInstrumentationHandler({callback:mf,type:"error"}),Zo.addInstrumentationHandler({callback:mf,type:"unhandledrejection"})}ea.registerErrorInstrumentation=Kg;function mf(){var t=$g.getActiveTransaction();t&&(Zo.logger.log("[Tracing] Transaction: "+gf.SpanStatus.InternalError+" -> Global error occured"),t.setStatus(gf.SpanStatus.InternalError))}});var ta=b(xn=>{Object.defineProperty(xn,"__esModule",{value:!0});xn.FINISH_REASON_TAG="finishReason";xn.IDLE_TRANSACTION_FINISH_REASONS=["heartbeatFailed","idleTimeout","documentHidden"]});var Cn=b(In=>{Object.defineProperty(In,"__esModule",{value:!0});var Jt=N(),wt=P(),ra=ft(),Jg=function(){function t(e){e===void 0&&(e=1e3),this.spans=[],this._maxlen=e}return t.prototype.add=function(e){this.spans.length>this._maxlen?e.spanRecorder=void 0:this.spans.push(e)},t}();In.SpanRecorder=Jg;var Xg=function(){function t(e){if(this.traceId=wt.uuid4(),this.spanId=wt.uuid4().substring(16),this.startTimestamp=wt.timestampWithMs(),this.tags={},this.data={},!e)return this;e.traceId&&(this.traceId=e.traceId),e.spanId&&(this.spanId=e.spanId),e.parentSpanId&&(this.parentSpanId=e.parentSpanId),"sampled"in e&&(this.sampled=e.sampled),e.op&&(this.op=e.op),e.description&&(this.description=e.description),e.data&&(this.data=e.data),e.tags&&(this.tags=e.tags),e.status&&(this.status=e.status),e.startTimestamp&&(this.startTimestamp=e.startTimestamp),e.endTimestamp&&(this.endTimestamp=e.endTimestamp)}return t.prototype.child=function(e){return this.startChild(e)},t.prototype.startChild=function(e){var r=new t(Jt.__assign(Jt.__assign({},e),{parentSpanId:this.spanId,sampled:this.sampled,traceId:this.traceId}));return r.spanRecorder=this.spanRecorder,r.spanRecorder&&r.spanRecorder.add(r),r.transaction=this.transaction,r},t.prototype.setTag=function(e,r){var n;return this.tags=Jt.__assign(Jt.__assign({},this.tags),(n={},n[e]=r,n)),this},t.prototype.setData=function(e,r){var n;return this.data=Jt.__assign(Jt.__assign({},this.data),(n={},n[e]=r,n)),this},t.prototype.setStatus=function(e){return this.status=e,this},t.prototype.setHttpStatus=function(e){this.setTag("http.status_code",String(e));var r=ra.SpanStatus.fromHttpCode(e);return r!==ra.SpanStatus.UnknownError&&this.setStatus(r),this},t.prototype.isSuccess=function(){return this.status===ra.SpanStatus.Ok},t.prototype.finish=function(e){this.endTimestamp=typeof e=="number"?e:wt.timestampWithMs()},t.prototype.toTraceparent=function(){var e="";return this.sampled!==void 0&&(e=this.sampled?"-1":"-0"),this.traceId+"-"+this.spanId+e},t.prototype.toContext=function(){return wt.dropUndefinedKeys({data:this.data,description:this.description,endTimestamp:this.endTimestamp,op:this.op,parentSpanId:this.parentSpanId,sampled:this.sampled,spanId:this.spanId,startTimestamp:this.startTimestamp,status:this.status,tags:this.tags,traceId:this.traceId})},t.prototype.updateWithContext=function(e){var r,n,i,o,a;return this.data=(r=e.data,r??{}),this.description=e.description,this.endTimestamp=e.endTimestamp,this.op=e.op,this.parentSpanId=e.parentSpanId,this.sampled=e.sampled,this.spanId=(n=e.spanId,n??this.spanId),this.startTimestamp=(i=e.startTimestamp,i??this.startTimestamp),this.status=e.status,this.tags=(o=e.tags,o??{}),this.traceId=(a=e.traceId,a??this.traceId),this},t.prototype.getTraceContext=function(){return wt.dropUndefinedKeys({data:Object.keys(this.data).length>0?this.data:void 0,description:this.description,op:this.op,parent_span_id:this.parentSpanId,span_id:this.spanId,status:this.status,tags:Object.keys(this.tags).length>0?this.tags:void 0,trace_id:this.traceId})},t.prototype.toJSON=function(){return wt.dropUndefinedKeys({data:Object.keys(this.data).length>0?this.data:void 0,description:this.description,op:this.op,parent_span_id:this.parentSpanId,span_id:this.spanId,start_timestamp:this.startTimestamp,status:this.status,tags:Object.keys(this.tags).length>0?this.tags:void 0,timestamp:this.endTimestamp,trace_id:this.traceId})},t}();In.Span=Xg});var Rn=b(na=>{Object.defineProperty(na,"__esModule",{value:!0});var Xt=N(),bf=ge(),Qg=ne(),Qt=P(),Sf=Cn(),Zg=function(t){Xt.__extends(e,t);function e(r,n){var i=t.call(this,r)||this;return i._measurements={},i._hub=bf.getCurrentHub(),Qt.isInstanceOf(n,bf.Hub)&&(i._hub=n),i.name=r.name||"",i.metadata=r.metadata||{},i._trimEnd=r.trimEnd,i.transaction=i,i}return e.prototype.setName=function(r){this.name=r},e.prototype.initSpanRecorder=function(r){r===void 0&&(r=1e3),this.spanRecorder||(this.spanRecorder=new Sf.SpanRecorder(r)),this.spanRecorder.add(this)},e.prototype.setMeasurements=function(r){this._measurements=Xt.__assign({},r)},e.prototype.setMetadata=function(r){this.metadata=Xt.__assign(Xt.__assign({},this.metadata),r)},e.prototype.finish=function(r){var n=this,i,o,a,s,u;if(this.endTimestamp===void 0){if(this.name||(Qt.logger.warn("Transaction has no name, falling back to `<unlabeled transaction>`."),this.name="<unlabeled transaction>"),t.prototype.finish.call(this,r),this.sampled!==!0){Qt.logger.log("[Tracing] Discarding transaction because its trace was not chosen to be sampled."),(u=(a=(i=this._hub.getClient())===null||i===void 0?void 0:(o=i).getTransport)===null||a===void 0?void 0:(s=a.call(o)).recordLostEvent)===null||u===void 0||u.call(s,Qg.Outcome.SampleRate,"transaction");return}var c=this.spanRecorder?this.spanRecorder.spans.filter(function(h){return h!==n&&h.endTimestamp}):[];this._trimEnd&&c.length>0&&(this.endTimestamp=c.reduce(function(h,y){return h.endTimestamp&&y.endTimestamp?h.endTimestamp>y.endTimestamp?h:y:h}).endTimestamp);var l={contexts:{trace:this.getTraceContext()},spans:c,start_timestamp:this.startTimestamp,tags:this.tags,timestamp:this.endTimestamp,transaction:this.name,type:"transaction",debug_meta:this.metadata},d=Object.keys(this._measurements).length>0;return d&&(Qt.logger.log("[Measurements] Adding measurements to transaction",JSON.stringify(this._measurements,void 0,2)),l.measurements=this._measurements),Qt.logger.log("[Tracing] Finishing "+this.op+" transaction: "+this.name+"."),this._hub.captureEvent(l)}},e.prototype.toContext=function(){var r=t.prototype.toContext.call(this);return Qt.dropUndefinedKeys(Xt.__assign(Xt.__assign({},r),{name:this.name,trimEnd:this._trimEnd}))},e.prototype.updateWithContext=function(r){var n;return t.prototype.updateWithContext.call(this,r),this.name=(n=r.name,n??""),this._trimEnd=r.trimEnd,this},e}(Sf.Span);na.Transaction=Zg});var Pn=b(dt=>{Object.defineProperty(dt,"__esModule",{value:!0});var ia=N(),ue=P(),An=ta(),em=Cn(),Ef=ft(),tm=Rn();dt.DEFAULT_IDLE_TIMEOUT=1e3;dt.HEARTBEAT_INTERVAL=5e3;var Tf=function(t){ia.__extends(e,t);function e(r,n,i,o){i===void 0&&(i="");var a=t.call(this,o)||this;return a._pushActivity=r,a._popActivity=n,a.transactionSpanId=i,a}return e.prototype.add=function(r){var n=this;r.spanId!==this.transactionSpanId&&(r.finish=function(i){r.endTimestamp=typeof i=="number"?i:ue.timestampWithMs(),n._popActivity(r.spanId)},r.endTimestamp===void 0&&this._pushActivity(r.spanId)),t.prototype.add.call(this,r)},e}(em.SpanRecorder);dt.IdleTransactionSpanRecorder=Tf;var rm=function(t){ia.__extends(e,t);function e(r,n,i,o){i===void 0&&(i=dt.DEFAULT_IDLE_TIMEOUT),o===void 0&&(o=!1);var a=t.call(this,r,n)||this;return a._idleHub=n,a._idleTimeout=i,a._onScope=o,a.activities={},a._heartbeatCounter=0,a._finished=!1,a._beforeFinishCallbacks=[],n&&o&&(Of(n),ue.logger.log("Setting idle transaction on scope. Span ID: "+a.spanId),n.configureScope(function(s){return s.setSpan(a)})),a._initTimeout=setTimeout(function(){a._finished||a.finish()},a._idleTimeout),a}return e.prototype.finish=function(r){var n,i,o=this;if(r===void 0&&(r=ue.timestampWithMs()),this._finished=!0,this.activities={},this.spanRecorder){ue.logger.log("[Tracing] finishing IdleTransaction",new Date(r*1e3).toISOString(),this.op);try{for(var a=ia.__values(this._beforeFinishCallbacks),s=a.next();!s.done;s=a.next()){var u=s.value;u(this,r)}}catch(c){n={error:c}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(n)throw n.error}}this.spanRecorder.spans=this.spanRecorder.spans.filter(function(c){if(c.spanId===o.spanId)return!0;c.endTimestamp||(c.endTimestamp=r,c.setStatus(Ef.SpanStatus.Cancelled),ue.logger.log("[Tracing] cancelling span since transaction ended early",JSON.stringify(c,void 0,2)));var l=c.startTimestamp<r;return l||ue.logger.log("[Tracing] discarding Span since it happened after Transaction was finished",JSON.stringify(c,void 0,2)),l}),ue.logger.log("[Tracing] flushing IdleTransaction")}else ue.logger.log("[Tracing] No active IdleTransaction");return this._onScope&&Of(this._idleHub),t.prototype.finish.call(this,r)},e.prototype.registerBeforeFinishCallback=function(r){this._beforeFinishCallbacks.push(r)},e.prototype.initSpanRecorder=function(r){var n=this;if(!this.spanRecorder){var i=function(a){n._finished||n._pushActivity(a)},o=function(a){n._finished||n._popActivity(a)};this.spanRecorder=new Tf(i,o,this.spanId,r),ue.logger.log("Starting heartbeat"),this._pingHeartbeat()}this.spanRecorder.add(this)},e.prototype._pushActivity=function(r){this._initTimeout&&(clearTimeout(this._initTimeout),this._initTimeout=void 0),ue.logger.log("[Tracing] pushActivity: "+r),this.activities[r]=!0,ue.logger.log("[Tracing] new activities count",Object.keys(this.activities).length)},e.prototype._popActivity=function(r){var n=this;if(this.activities[r]&&(ue.logger.log("[Tracing] popActivity "+r),delete this.activities[r],ue.logger.log("[Tracing] new activities count",Object.keys(this.activities).length)),Object.keys(this.activities).length===0){var i=this._idleTimeout,o=ue.timestampWithMs()+i/1e3;setTimeout(function(){n._finished||(n.setTag(An.FINISH_REASON_TAG,An.IDLE_TRANSACTION_FINISH_REASONS[1]),n.finish(o))},i)}},e.prototype._beat=function(){if(!this._finished){var r=Object.keys(this.activities).join("");r===this._prevHeartbeatString?this._heartbeatCounter+=1:this._heartbeatCounter=1,this._prevHeartbeatString=r,this._heartbeatCounter>=3?(ue.logger.log("[Tracing] Transaction finished because of no change for 3 heart beats"),this.setStatus(Ef.SpanStatus.DeadlineExceeded),this.setTag(An.FINISH_REASON_TAG,An.IDLE_TRANSACTION_FINISH_REASONS[0]),this.finish()):this._pingHeartbeat()}},e.prototype._pingHeartbeat=function(){var r=this;ue.logger.log("pinging Heartbeat -> current counter: "+this._heartbeatCounter),setTimeout(function(){r._beat()},dt.HEARTBEAT_INTERVAL)},e}(tm.Transaction);dt.IdleTransaction=rm;function Of(t){if(t){var e=t.getScope();if(e){var r=e.getTransaction();r&&e.setSpan(void 0)}}}});var Nn=b((Er,Tr)=>{Object.defineProperty(Er,"__esModule",{value:!0});var oa=N(),wf=ge(),qn=ne(),Ce=P(),nm=yf(),im=Pn(),om=Rn(),am=lt();function sm(){var t=this.getScope();if(t){var e=t.getSpan();if(e)return{"sentry-trace":e.toTraceparent()}}return{}}function xf(t,e,r){if(!am.hasTracingEnabled(e))return t.sampled=!1,t;if(t.sampled!==void 0)return t.setMetadata({transactionSampling:{method:qn.TransactionSamplingMethod.Explicit}}),t;var n;return typeof e.tracesSampler=="function"?(n=e.tracesSampler(r),t.setMetadata({transactionSampling:{method:qn.TransactionSamplingMethod.Sampler,rate:Number(n)}})):r.parentSampled!==void 0?(n=r.parentSampled,t.setMetadata({transactionSampling:{method:qn.TransactionSamplingMethod.Inheritance}})):(n=e.tracesSampleRate,t.setMetadata({transactionSampling:{method:qn.TransactionSamplingMethod.Rate,rate:Number(n)}})),um(n)?n?(t.sampled=Math.random()<n,t.sampled?(Ce.logger.log("[Tracing] starting "+t.op+" transaction - "+t.name),t):(Ce.logger.log("[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = "+Number(n)+")"),t)):(Ce.logger.log("[Tracing] Discarding transaction because "+(typeof e.tracesSampler=="function"?"tracesSampler returned 0 or false":"a negative sampling decision was inherited or tracesSampleRate is set to 0")),t.sampled=!1,t):(Ce.logger.warn("[Tracing] Discarding transaction because of invalid sample rate."),t.sampled=!1,t)}function um(t){return isNaN(t)||!(typeof t=="number"||typeof t=="boolean")?(Ce.logger.warn("[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got "+JSON.stringify(t)+" of type "+JSON.stringify(typeof t)+"."),!1):t<0||t>1?(Ce.logger.warn("[Tracing] Given sample rate is invalid. Sample rate must be between 0 and 1. Got "+t+"."),!1):!0}function cm(t,e){var r,n,i=((r=this.getClient())===null||r===void 0?void 0:r.getOptions())||{},o=new om.Transaction(t,this);return o=xf(o,i,oa.__assign({parentSampled:t.parentSampled,transactionContext:t},e)),o.sampled&&o.initSpanRecorder((n=i._experiments)===null||n===void 0?void 0:n.maxSpans),o}function fm(t,e,r,n,i){var o,a,s=((o=t.getClient())===null||o===void 0?void 0:o.getOptions())||{},u=new im.IdleTransaction(e,t,r,n);return u=xf(u,s,oa.__assign({parentSampled:e.parentSampled,transactionContext:e},i)),u.sampled&&u.initSpanRecorder((a=s._experiments)===null||a===void 0?void 0:a.maxSpans),u}Er.startIdleTransaction=fm;function If(){var t=wf.getMainCarrier();!t.__SENTRY__||(t.__SENTRY__.extensions=t.__SENTRY__.extensions||{},t.__SENTRY__.extensions.startTransaction||(t.__SENTRY__.extensions.startTransaction=cm),t.__SENTRY__.extensions.traceHeaders||(t.__SENTRY__.extensions.traceHeaders=sm))}Er._addTracingExtensions=If;function lm(){var t=wf.getMainCarrier();if(!!t.__SENTRY__){var e={mongodb:function(){var n=Ce.dynamicRequire(Tr,"./integrations/node/mongo");return new n.Mongo},mongoose:function(){var n=Ce.dynamicRequire(Tr,"./integrations/node/mongo");return new n.Mongo({mongoose:!0})},mysql:function(){var n=Ce.dynamicRequire(Tr,"./integrations/node/mysql");return new n.Mysql},pg:function(){var n=Ce.dynamicRequire(Tr,"./integrations/node/postgres");return new n.Postgres}},r=Object.keys(e).filter(function(n){return!!Ce.loadModule(n)}).map(function(n){try{return e[n]()}catch{return}}).filter(function(n){return n});r.length>0&&(t.__SENTRY__.integrations=oa.__spread(t.__SENTRY__.integrations||[],r))}}function dm(){If(),Ce.isNodeEnv()&&lm(),nm.registerErrorInstrumentation()}Er.addExtensionMethods=dm});var Rf=b(sa=>{Object.defineProperty(sa,"__esModule",{value:!0});var aa=N(),pm=P(),hm=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._router=e.router||e.app,this._methods=(Array.isArray(e.methods)?e.methods:[]).concat("use")}return t.prototype.setupOnce=function(){if(!this._router){pm.logger.error("ExpressIntegration is missing an Express instance");return}gm(this._router,this._methods)},t.id="Express",t}();sa.Express=hm;function Cf(t,e){var r=t.length;switch(r){case 2:return function(n,i){var o=i.__sentry_transaction;if(o){var a=o.startChild({description:t.name,op:"express.middleware."+e});i.once("finish",function(){a.finish()})}return t.call(this,n,i)};case 3:return function(n,i,o){var a,s=i.__sentry_transaction,u=(a=s)===null||a===void 0?void 0:a.startChild({description:t.name,op:"express.middleware."+e});t.call(this,n,i,function(){for(var c=[],l=0;l<arguments.length;l++)c[l]=arguments[l];var d;(d=u)===null||d===void 0||d.finish(),o.call.apply(o,aa.__spread([this],c))})};case 4:return function(n,i,o,a){var s,u=o.__sentry_transaction,c=(s=u)===null||s===void 0?void 0:s.startChild({description:t.name,op:"express.middleware."+e});t.call(this,n,i,o,function(){for(var l=[],d=0;d<arguments.length;d++)l[d]=arguments[d];var h;(h=c)===null||h===void 0||h.finish(),a.call.apply(a,aa.__spread([this],l))})};default:throw new Error("Express middleware takes 2-4 arguments. Got: "+r)}}function _m(t,e){return t.map(function(r){return typeof r=="function"?Cf(r,e):Array.isArray(r)?r.map(function(n){return typeof n=="function"?Cf(n,e):n}):r})}function vm(t,e){var r=t[e];return t[e]=function(){for(var n=[],i=0;i<arguments.length;i++)n[i]=arguments[i];return r.call.apply(r,aa.__spread([this],_m(n,e)))},t}function gm(t,e){e===void 0&&(e=[]),e.forEach(function(r){return vm(t,r)})}});var Af=b(ua=>{Object.defineProperty(ua,"__esModule",{value:!0});var Or=P(),mm=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._usePgNative=!!e.usePgNative}return t.prototype.setupOnce=function(e,r){var n,i=Or.loadModule("pg");if(!i){Or.logger.error("Postgres Integration was unable to require `pg` package.");return}if(this._usePgNative&&!((n=i.native)===null||n===void 0?void 0:n.Client)){Or.logger.error("Postgres Integration was unable to access 'pg-native' bindings.");return}var o=(this._usePgNative?i.native:i).Client;Or.fill(o.prototype,"query",function(a){return function(s,u,c){var l,d,h,y=r().getScope(),S=(l=y)===null||l===void 0?void 0:l.getSpan(),T=(d=S)===null||d===void 0?void 0:d.startChild({description:typeof s=="string"?s:s.text,op:"db"});if(typeof c=="function")return a.call(this,s,u,function(q,U){var k;(k=T)===null||k===void 0||k.finish(),c(q,U)});if(typeof u=="function")return a.call(this,s,function(q,U){var k;(k=T)===null||k===void 0||k.finish(),u(q,U)});var C=typeof u!="undefined"?a.call(this,s,u):a.call(this,s);return Or.isThenable(C)?C.then(function(q){var U;return(U=T)===null||U===void 0||U.finish(),q}):((h=T)===null||h===void 0||h.finish(),C)}})},t.id="Postgres",t}();ua.Postgres=mm});var Pf=b(fa=>{Object.defineProperty(fa,"__esModule",{value:!0});var ca=P(),ym=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(e,r){var n=ca.loadModule("mysql/lib/Connection.js");if(!n){ca.logger.error("Mysql Integration was unable to require `mysql` package.");return}ca.fill(n,"createQuery",function(i){return function(o,a,s){var u,c,l=r().getScope(),d=(u=l)===null||u===void 0?void 0:u.getSpan(),h=(c=d)===null||c===void 0?void 0:c.startChild({description:typeof o=="string"?o:o.sql,op:"db"});return typeof s=="function"?i.call(this,o,a,function(y,S,T){var C;(C=h)===null||C===void 0||C.finish(),s(y,S,T)}):typeof a=="function"?i.call(this,o,function(y,S,T){var C;(C=h)===null||C===void 0||C.finish(),a(y,S,T)}):i.call(this,o,a,s)}})},t.id="Mysql",t}();fa.Mysql=ym});var qf=b(da=>{Object.defineProperty(da,"__esModule",{value:!0});var la=N(),Mn=P(),bm=["aggregate","bulkWrite","countDocuments","createIndex","createIndexes","deleteMany","deleteOne","distinct","drop","dropIndex","dropIndexes","estimatedDocumentCount","find","findOne","findOneAndDelete","findOneAndReplace","findOneAndUpdate","indexes","indexExists","indexInformation","initializeOrderedBulkOp","insertMany","insertOne","isCapped","mapReduce","options","parallelCollectionScan","rename","replaceOne","stats","updateMany","updateOne"],Sm={bulkWrite:["operations"],countDocuments:["query"],createIndex:["fieldOrSpec"],createIndexes:["indexSpecs"],deleteMany:["filter"],deleteOne:["filter"],distinct:["key","query"],dropIndex:["indexName"],find:["query"],findOne:["query"],findOneAndDelete:["filter"],findOneAndReplace:["filter","replacement"],findOneAndUpdate:["filter","update"],indexExists:["indexes"],insertMany:["docs"],insertOne:["doc"],mapReduce:["map","reduce"],rename:["newName"],replaceOne:["filter","doc"],updateMany:["filter","update"],updateOne:["filter","update"]},Em=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._operations=Array.isArray(e.operations)?e.operations:bm,this._describeOperations="describeOperations"in e?e.describeOperations:!0,this._useMongoose=!!e.useMongoose}return t.prototype.setupOnce=function(e,r){var n=this._useMongoose?"mongoose":"mongodb",i=Mn.loadModule(n);if(!i){Mn.logger.error("Mongo Integration was unable to require `"+n+"` package.");return}this._instrumentOperations(i.Collection,this._operations,r)},t.prototype._instrumentOperations=function(e,r,n){var i=this;r.forEach(function(o){return i._patchOperation(e,o,n)})},t.prototype._patchOperation=function(e,r,n){if(r in e.prototype){var i=this._getSpanContextFromOperationArguments.bind(this);Mn.fill(e.prototype,r,function(o){return function(){for(var a=[],s=0;s<arguments.length;s++)a[s]=arguments[s];var u,c,l,d,h=a[a.length-1],y=n().getScope(),S=(u=y)===null||u===void 0?void 0:u.getSpan();if(typeof h!="function"||r==="mapReduce"&&a.length===2){var T=(c=S)===null||c===void 0?void 0:c.startChild(i(this,r,a)),C=o.call.apply(o,la.__spread([this],a));return Mn.isThenable(C)?C.then(function(U){var k;return(k=T)===null||k===void 0||k.finish(),U}):((l=T)===null||l===void 0||l.finish(),C)}var q=(d=S)===null||d===void 0?void 0:d.startChild(i(this,r,a.slice(0,-1)));return o.call.apply(o,la.__spread([this],a.slice(0,-1),[function(U,k){var Se;(Se=q)===null||Se===void 0||Se.finish(),h(U,k)}]))}})}},t.prototype._getSpanContextFromOperationArguments=function(e,r,n){var i={collectionName:e.collectionName,dbName:e.dbName,namespace:e.namespace},o={op:"db",description:r,data:i},a=Sm[r],s=Array.isArray(this._describeOperations)?this._describeOperations.includes(r):this._describeOperations;if(!a||!s)return o;try{if(r==="mapReduce"){var u=la.__read(n,2),c=u[0],l=u[1];i[a[0]]=typeof c=="string"?c:c.name||"<anonymous>",i[a[1]]=typeof l=="string"?l:l.name||"<anonymous>"}else for(var d=0;d<a.length;d++)i[a[d]]=JSON.stringify(n[d])}catch{}return o},t.id="Mongo",t}();da.Mongo=Em});var kf=b(ha=>{Object.defineProperty(ha,"__esModule",{value:!0});var pa=P(),Nf=ta(),Mf=ft(),Tm=lt(),kn=pa.getGlobalObject();function Om(){kn&&kn.document?kn.document.addEventListener("visibilitychange",function(){var t=Tm.getActiveTransaction();kn.document.hidden&&t&&(pa.logger.log("[Tracing] Transaction: "+Mf.SpanStatus.Cancelled+" -> since tab moved to the background, op: "+t.op),t.status||t.setStatus(Mf.SpanStatus.Cancelled),t.setTag("visibilitychange","document.hidden"),t.setTag(Nf.FINISH_REASON_TAG,Nf.IDLE_TRANSACTION_FINISH_REASONS[2]),t.finish())}):pa.logger.warn("[Tracing] Could not set up background tab detection due to lack of global document")}ha.registerBackgroundTabDetection=Om});var Dn=b(_a=>{Object.defineProperty(_a,"__esModule",{value:!0});_a.bindReporter=function(t,e,r){var n;return function(i){e.value>=0&&(i||r)&&(e.delta=e.value-(n||0),(e.delta||n===void 0)&&(n=e.value,t(e)))}}});var Df=b(va=>{Object.defineProperty(va,"__esModule",{value:!0});va.generateUniqueID=function(){return"v2-"+Date.now()+"-"+(Math.floor(Math.random()*(9e12-1))+1e12)}});var Fn=b(ga=>{Object.defineProperty(ga,"__esModule",{value:!0});var wm=Df();ga.initMetric=function(t,e){return{name:t,value:e??-1,delta:0,entries:[],id:wm.generateUniqueID()}}});var jn=b(ma=>{Object.defineProperty(ma,"__esModule",{value:!0});ma.observe=function(t,e){try{if(PerformanceObserver.supportedEntryTypes.includes(t)){if(t==="first-input"&&!("PerformanceEventTiming"in self))return;var r=new PerformanceObserver(function(n){return n.getEntries().map(e)});return r.observe({type:t,buffered:!0}),r}}catch{}}});var wr=b(ya=>{Object.defineProperty(ya,"__esModule",{value:!0});var xm=P();ya.onHidden=function(t,e){var r=function(n){(n.type==="pagehide"||xm.getGlobalObject().document.visibilityState==="hidden")&&(t(n),e&&(removeEventListener("visibilitychange",r,!0),removeEventListener("pagehide",r,!0)))};addEventListener("visibilitychange",r,!0),addEventListener("pagehide",r,!0)}});var Ff=b(ba=>{Object.defineProperty(ba,"__esModule",{value:!0});var Im=Dn(),Cm=Fn(),Rm=jn(),Am=wr();ba.getCLS=function(t,e){var r=Cm.initMetric("CLS",0),n,i=0,o=[],a=function(u){if(u&&!u.hadRecentInput){var c=o[0],l=o[o.length-1];i&&o.length!==0&&u.startTime-l.startTime<1e3&&u.startTime-c.startTime<5e3?(i+=u.value,o.push(u)):(i=u.value,o=[u]),i>r.value&&(r.value=i,r.entries=o,n&&n())}},s=Rm.observe("layout-shift",a);s&&(n=Im.bindReporter(t,r,e),Am.onHidden(function(){s.takeRecords().map(a),n(!0)}))}});var Ln=b(Sa=>{Object.defineProperty(Sa,"__esModule",{value:!0});var Pm=P(),qm=wr(),Hn=-1,Nm=function(){return Pm.getGlobalObject().document.visibilityState==="hidden"?0:1/0},Mm=function(){qm.onHidden(function(t){var e=t.timeStamp;Hn=e},!0)};Sa.getVisibilityWatcher=function(){return Hn<0&&(Hn=Nm(),Mm()),{get firstHiddenTime(){return Hn}}}});var jf=b(Ea=>{Object.defineProperty(Ea,"__esModule",{value:!0});var km=Dn(),Dm=Ln(),Fm=Fn(),jm=jn(),Hm=wr();Ea.getFID=function(t,e){var r=Dm.getVisibilityWatcher(),n=Fm.initMetric("FID"),i,o=function(s){i&&s.startTime<r.firstHiddenTime&&(n.value=s.processingStart-s.startTime,n.entries.push(s),i(!0))},a=jm.observe("first-input",o);a&&(i=km.bindReporter(t,n,e),Hm.onHidden(function(){a.takeRecords().map(o),a.disconnect()},!0))}});var Lf=b(Ta=>{Object.defineProperty(Ta,"__esModule",{value:!0});var Lm=Dn(),Um=Ln(),Bm=Fn(),Gm=jn(),zm=wr(),Hf={};Ta.getLCP=function(t,e){var r=Um.getVisibilityWatcher(),n=Bm.initMetric("LCP"),i,o=function(u){var c=u.startTime;c<r.firstHiddenTime&&(n.value=c,n.entries.push(u)),i&&i()},a=Gm.observe("largest-contentful-paint",o);if(a){i=Lm.bindReporter(t,n,e);var s=function(){Hf[n.id]||(a.takeRecords().map(o),a.disconnect(),Hf[n.id]=!0,i(!0))};["keydown","click"].forEach(function(u){addEventListener(u,s,{once:!0,capture:!0})}),zm.onHidden(s,!0)}}});var Gf=b(xr=>{Object.defineProperty(xr,"__esModule",{value:!0});var Uf=N(),Z=P(),te=lt(),Vm=Ff(),Wm=jf(),Ym=Lf(),$m=Ln(),le=Z.getGlobalObject(),Km=function(){function t(e){e===void 0&&(e=!1);var r,n;this._reportAllChanges=e,this._measurements={},this._performanceCursor=0,!Z.isNodeEnv()&&((r=le)===null||r===void 0?void 0:r.performance)&&((n=le)===null||n===void 0?void 0:n.document)&&(le.performance.mark&&le.performance.mark("sentry-tracing-init"),this._trackCLS(),this._trackLCP(),this._trackFID())}return t.prototype.addPerformanceEntries=function(e){var r=this;if(!(!le||!le.performance||!le.performance.getEntries||!Z.browserPerformanceTimeOrigin)){Z.logger.log("[Tracing] Adding & adjusting spans using Performance API");var n=te.msToSec(Z.browserPerformanceTimeOrigin),i;if(le.document&&le.document.scripts){for(var o=0;o<le.document.scripts.length;o++)if(le.document.scripts[o].dataset.entry==="true"){i=le.document.scripts[o].src;break}}var a,s,u,c;if(le.performance.getEntries().slice(this._performanceCursor).forEach(function(d){var h=te.msToSec(d.startTime),y=te.msToSec(d.duration);if(!(e.op==="navigation"&&n+h<e.startTimestamp))switch(d.entryType){case"navigation":{Jm(e,d,n),u=n+te.msToSec(d.responseStart),c=n+te.msToSec(d.requestStart);break}case"mark":case"paint":case"measure":{var S=Xm(e,d,h,y,n);s===void 0&&d.name==="sentry-tracing-init"&&(s=S);var T=$m.getVisibilityWatcher(),C=d.startTime<T.firstHiddenTime;d.name==="first-paint"&&C&&(Z.logger.log("[Measurements] Adding FP"),r._measurements.fp={value:d.startTime},r._measurements["mark.fp"]={value:S}),d.name==="first-contentful-paint"&&C&&(Z.logger.log("[Measurements] Adding FCP"),r._measurements.fcp={value:d.startTime},r._measurements["mark.fcp"]={value:S});break}case"resource":{var q=d.name.replace(le.location.origin,""),U=Bf(e,d,q,h,y,n);a===void 0&&(i||"").indexOf(q)>-1&&(a=U);break}default:}}),a!==void 0&&s!==void 0&&ht(e,{description:"evaluation",endTimestamp:s,op:"script",startTimestamp:a}),this._performanceCursor=Math.max(performance.getEntries().length-1,0),this._trackNavigator(e),e.op==="pageload"){var l=te.msToSec(Z.browserPerformanceTimeOrigin);typeof u=="number"&&(Z.logger.log("[Measurements] Adding TTFB"),this._measurements.ttfb={value:(u-e.startTimestamp)*1e3},typeof c=="number"&&c<=u&&(this._measurements["ttfb.requestTime"]={value:(u-c)*1e3})),["fcp","fp","lcp"].forEach(function(d){if(!(!r._measurements[d]||l>=e.startTimestamp)){var h=r._measurements[d].value,y=l+te.msToSec(h),S=Math.abs((y-e.startTimestamp)*1e3),T=S-h;Z.logger.log("[Measurements] Normalized "+d+" from "+h+" to "+S+" ("+T+")"),r._measurements[d].value=S}}),this._measurements["mark.fid"]&&this._measurements.fid&&ht(e,{description:"first input delay",endTimestamp:this._measurements["mark.fid"].value+te.msToSec(this._measurements.fid.value),op:"web.vitals",startTimestamp:this._measurements["mark.fid"].value}),"fcp"in this._measurements||delete this._measurements.cls,e.setMeasurements(this._measurements),this._tagMetricInfo(e),e.setTag("sentry_reportAllChanges",this._reportAllChanges)}}},t.prototype._tagMetricInfo=function(e){this._lcpEntry&&(Z.logger.log("[Measurements] Adding LCP Data"),this._lcpEntry.element&&e.setTag("lcp.element",Z.htmlTreeAsString(this._lcpEntry.element)),this._lcpEntry.id&&e.setTag("lcp.id",this._lcpEntry.id),this._lcpEntry.url&&e.setTag("lcp.url",this._lcpEntry.url.trim().slice(0,200)),e.setTag("lcp.size",this._lcpEntry.size)),this._clsEntry&&this._clsEntry.sources&&(Z.logger.log("[Measurements] Adding CLS Data"),this._clsEntry.sources.forEach(function(r,n){return e.setTag("cls.source."+(n+1),Z.htmlTreeAsString(r.node))}))},t.prototype._trackCLS=function(){var e=this;Vm.getCLS(function(r){var n=r.entries.pop();!n||(Z.logger.log("[Measurements] Adding CLS"),e._measurements.cls={value:r.value},e._clsEntry=n)})},t.prototype._trackNavigator=function(e){var r=le.navigator;if(!!r){var n=r.connection;n&&(n.effectiveType&&e.setTag("effectiveConnectionType",n.effectiveType),n.type&&e.setTag("connectionType",n.type),Un(n.rtt)&&(this._measurements["connection.rtt"]={value:n.rtt}),Un(n.downlink)&&(this._measurements["connection.downlink"]={value:n.downlink})),Un(r.deviceMemory)&&e.setTag("deviceMemory",String(r.deviceMemory)),Un(r.hardwareConcurrency)&&e.setTag("hardwareConcurrency",String(r.hardwareConcurrency))}},t.prototype._trackLCP=function(){var e=this;Ym.getLCP(function(r){var n=r.entries.pop();if(!!n){var i=te.msToSec(Z.browserPerformanceTimeOrigin),o=te.msToSec(n.startTime);Z.logger.log("[Measurements] Adding LCP"),e._measurements.lcp={value:r.value},e._measurements["mark.lcp"]={value:i+o},e._lcpEntry=n}},this._reportAllChanges)},t.prototype._trackFID=function(){var e=this;Wm.getFID(function(r){var n=r.entries.pop();if(!!n){var i=te.msToSec(Z.browserPerformanceTimeOrigin),o=te.msToSec(n.startTime);Z.logger.log("[Measurements] Adding FID"),e._measurements.fid={value:r.value},e._measurements["mark.fid"]={value:i+o}}})},t}();xr.MetricsInstrumentation=Km;function Jm(t,e,r){pt({transaction:t,entry:e,event:"unloadEvent",timeOrigin:r}),pt({transaction:t,entry:e,event:"redirect",timeOrigin:r}),pt({transaction:t,entry:e,event:"domContentLoadedEvent",timeOrigin:r}),pt({transaction:t,entry:e,event:"loadEvent",timeOrigin:r}),pt({transaction:t,entry:e,event:"connect",timeOrigin:r}),pt({transaction:t,entry:e,event:"secureConnection",timeOrigin:r,eventEnd:"connectEnd",description:"TLS/SSL"}),pt({transaction:t,entry:e,event:"fetch",timeOrigin:r,eventEnd:"domainLookupStart",description:"cache"}),pt({transaction:t,entry:e,event:"domainLookup",timeOrigin:r,description:"DNS"}),Qm(t,e,r)}function Xm(t,e,r,n,i){var o=i+r,a=o+n;return ht(t,{description:e.name,endTimestamp:a,op:e.entryType,startTimestamp:o}),o}function Bf(t,e,r,n,i,o){if(!(e.initiatorType==="xmlhttprequest"||e.initiatorType==="fetch")){var a={};"transferSize"in e&&(a["Transfer Size"]=e.transferSize),"encodedBodySize"in e&&(a["Encoded Body Size"]=e.encodedBodySize),"decodedBodySize"in e&&(a["Decoded Body Size"]=e.decodedBodySize);var s=o+n,u=s+i;return ht(t,{description:r,endTimestamp:u,op:e.initiatorType?"resource."+e.initiatorType:"resource",startTimestamp:s,data:a}),u}}xr.addResourceSpans=Bf;function pt(t){var e=t.transaction,r=t.entry,n=t.event,i=t.timeOrigin,o=t.eventEnd,a=t.description,s=o?r[o]:r[n+"End"],u=r[n+"Start"];!u||!s||ht(e,{op:"browser",description:a??n,startTimestamp:i+te.msToSec(u),endTimestamp:i+te.msToSec(s)})}function Qm(t,e,r){ht(t,{op:"browser",description:"request",startTimestamp:r+te.msToSec(e.requestStart),endTimestamp:r+te.msToSec(e.responseEnd)}),ht(t,{op:"browser",description:"response",startTimestamp:r+te.msToSec(e.responseStart),endTimestamp:r+te.msToSec(e.responseEnd)})}function ht(t,e){var r=e.startTimestamp,n=Uf.__rest(e,["startTimestamp"]);return r&&t.startTimestamp>r&&(t.startTimestamp=r),t.startChild(Uf.__assign({startTimestamp:r},n))}xr._startChild=ht;function Un(t){return typeof t=="number"&&isFinite(t)}});var Oa=b(Je=>{Object.defineProperty(Je,"__esModule",{value:!0});var Ke=N(),Ir=P(),Zm=ft(),Bn=lt();Je.DEFAULT_TRACING_ORIGINS=["localhost",/^\//];Je.defaultRequestInstrumentationOptions={traceFetch:!0,traceXHR:!0,tracingOrigins:Je.DEFAULT_TRACING_ORIGINS};function ey(t){var e=Ke.__assign(Ke.__assign({},Je.defaultRequestInstrumentationOptions),t),r=e.traceFetch,n=e.traceXHR,i=e.tracingOrigins,o=e.shouldCreateSpanForRequest,a={},s=function(l){if(a[l])return a[l];var d=i;return a[l]=d.some(function(h){return Ir.isMatchingPattern(l,h)})&&!Ir.isMatchingPattern(l,"sentry_key"),a[l]},u=s;typeof o=="function"&&(u=function(l){return s(l)&&o(l)});var c={};r&&Ir.addInstrumentationHandler({callback:function(l){zf(l,u,c)},type:"fetch"}),n&&Ir.addInstrumentationHandler({callback:function(l){Vf(l,u,c)},type:"xhr"})}Je.instrumentOutgoingRequests=ey;function zf(t,e,r){if(!(!Bn.hasTracingEnabled()||!(t.fetchData&&e(t.fetchData.url)))){if(t.endTimestamp&&t.fetchData.__span){var n=r[t.fetchData.__span];n&&(t.response?n.setHttpStatus(t.response.status):t.error&&n.setStatus(Zm.SpanStatus.InternalError),n.finish(),delete r[t.fetchData.__span]);return}var i=Bn.getActiveTransaction();if(i){var n=i.startChild({data:Ke.__assign(Ke.__assign({},t.fetchData),{type:"fetch"}),description:t.fetchData.method+" "+t.fetchData.url,op:"http.client"});t.fetchData.__span=n.spanId,r[n.spanId]=n;var o=t.args[0]=t.args[0],a=t.args[1]=t.args[1]||{},s=a.headers;Ir.isInstanceOf(o,Request)&&(s=o.headers),s?typeof s.append=="function"?s.append("sentry-trace",n.toTraceparent()):Array.isArray(s)?s=Ke.__spread(s,[["sentry-trace",n.toTraceparent()]]):s=Ke.__assign(Ke.__assign({},s),{"sentry-trace":n.toTraceparent()}):s={"sentry-trace":n.toTraceparent()},a.headers=s}}}Je.fetchCallback=zf;function Vf(t,e,r){var n,i;if(!(!Bn.hasTracingEnabled()||((n=t.xhr)===null||n===void 0?void 0:n.__sentry_own_request__)||!(((i=t.xhr)===null||i===void 0?void 0:i.__sentry_xhr__)&&e(t.xhr.__sentry_xhr__.url)))){var o=t.xhr.__sentry_xhr__;if(t.endTimestamp&&t.xhr.__sentry_xhr_span_id__){var a=r[t.xhr.__sentry_xhr_span_id__];a&&(a.setHttpStatus(o.status_code),a.finish(),delete r[t.xhr.__sentry_xhr_span_id__]);return}var s=Bn.getActiveTransaction();if(s){var a=s.startChild({data:Ke.__assign(Ke.__assign({},o.data),{type:"xhr",method:o.method,url:o.url}),description:o.method+" "+o.url,op:"http.client"});if(t.xhr.__sentry_xhr_span_id__=a.spanId,r[t.xhr.__sentry_xhr_span_id__]=a,t.xhr.setRequestHeader)try{t.xhr.setRequestHeader("sentry-trace",a.toTraceparent())}catch{}}}}Je.xhrCallback=Vf});var Wf=b(wa=>{Object.defineProperty(wa,"__esModule",{value:!0});var Gn=P(),Cr=Gn.getGlobalObject();function ty(t,e,r){if(e===void 0&&(e=!0),r===void 0&&(r=!0),!Cr||!Cr.location){Gn.logger.warn("Could not initialize routing instrumentation due to invalid location");return}var n=Cr.location.href,i;e&&(i=t({name:Cr.location.pathname,op:"pageload"})),r&&Gn.addInstrumentationHandler({callback:function(o){var a=o.to,s=o.from;if(s===void 0&&n&&n.indexOf(a)!==-1){n=void 0;return}s!==a&&(n=void 0,i&&(Gn.logger.log("[Tracing] Finishing current transaction with op: "+i.op),i.finish()),i=t({name:Cr.location.pathname,op:"navigation"}))},type:"history"})}wa.instrumentRoutingWithDefaults=ty});var Jf=b(It=>{Object.defineProperty(It,"__esModule",{value:!0});var Xe=N(),xt=P(),ry=Nn(),ny=Pn(),iy=ft(),Yf=lt(),oy=kf(),ay=Gf(),zn=Oa(),sy=Wf();It.DEFAULT_MAX_TRANSACTION_DURATION_SECONDS=600;var uy=Xe.__assign({idleTimeout:ny.DEFAULT_IDLE_TIMEOUT,markBackgroundTransactions:!0,maxTransactionDuration:It.DEFAULT_MAX_TRANSACTION_DURATION_SECONDS,routingInstrumentation:sy.instrumentRoutingWithDefaults,startTransactionOnLocationChange:!0,startTransactionOnPageLoad:!0},zn.defaultRequestInstrumentationOptions),cy=function(){function t(e){this.name=t.id,this._emitOptionsWarning=!1,this._configuredIdleTimeout=void 0;var r=zn.defaultRequestInstrumentationOptions.tracingOrigins;e&&(this._configuredIdleTimeout=e.idleTimeout,e.tracingOrigins&&Array.isArray(e.tracingOrigins)&&e.tracingOrigins.length!==0?r=e.tracingOrigins:this._emitOptionsWarning=!0),this.options=Xe.__assign(Xe.__assign(Xe.__assign({},uy),e),{tracingOrigins:r});var n=this.options._metricOptions;this._metrics=new ay.MetricsInstrumentation(n&&n._reportAllChanges)}return t.prototype.setupOnce=function(e,r){var n=this;this._getCurrentHub=r,this._emitOptionsWarning&&(xt.logger.warn("[Tracing] You need to define `tracingOrigins` in the options. Set an array of urls or patterns to trace."),xt.logger.warn("[Tracing] We added a reasonable default for you: "+zn.defaultRequestInstrumentationOptions.tracingOrigins));var i=this.options,o=i.routingInstrumentation,a=i.startTransactionOnLocationChange,s=i.startTransactionOnPageLoad,u=i.markBackgroundTransactions,c=i.traceFetch,l=i.traceXHR,d=i.tracingOrigins,h=i.shouldCreateSpanForRequest;o(function(y){return n._createRouteTransaction(y)},s,a),u&&oy.registerBackgroundTabDetection(),zn.instrumentOutgoingRequests({traceFetch:c,traceXHR:l,tracingOrigins:d,shouldCreateSpanForRequest:h})},t.prototype._createRouteTransaction=function(e){var r=this;if(!this._getCurrentHub){xt.logger.warn("[Tracing] Did not create "+e.op+" transaction because _getCurrentHub is invalid.");return}var n=this.options,i=n.beforeNavigate,o=n.idleTimeout,a=n.maxTransactionDuration,s=e.op==="pageload"?$f():void 0,u=Xe.__assign(Xe.__assign(Xe.__assign({},e),s),{trimEnd:!0}),c=typeof i=="function"?i(u):u,l=c===void 0?Xe.__assign(Xe.__assign({},u),{sampled:!1}):c;l.sampled===!1&&xt.logger.log("[Tracing] Will not send "+l.op+" transaction because of beforeNavigate."),xt.logger.log("[Tracing] Starting "+l.op+" transaction on scope");var d=this._getCurrentHub(),h=xt.getGlobalObject().location,y=ry.startIdleTransaction(d,l,o,!0,{location:h});return y.registerBeforeFinishCallback(function(S,T){r._metrics.addPerformanceEntries(S),fy(Yf.secToMs(a),S,T)}),y.setTag("idleTimeout",this._configuredIdleTimeout),y},t.id="BrowserTracing",t}();It.BrowserTracing=cy;function $f(){var t=Kf("sentry-trace");if(t)return Yf.extractTraceparentData(t)}It.getHeaderContext=$f;function Kf(t){var e=xt.getGlobalObject().document.querySelector("meta[name="+t+"]");return e?e.getAttribute("content"):null}It.getMetaContent=Kf;function fy(t,e,r){var n=r-e.startTimestamp,i=r&&(n>t||n<0);i&&(e.setStatus(iy.SpanStatus.DeadlineExceeded),e.setTag("maxTransactionDurationExceeded","true"))}});var Vn=b(Rr=>{Object.defineProperty(Rr,"__esModule",{value:!0});var ly=Jf();Rr.BrowserTracing=ly.BrowserTracing;var Xf=Oa();Rr.instrumentOutgoingRequests=Xf.instrumentOutgoingRequests;Rr.defaultRequestInstrumentationOptions=Xf.defaultRequestInstrumentationOptions});var Qf=b(Ct=>{Object.defineProperty(Ct,"__esModule",{value:!0});var dy=Rf();Ct.Express=dy.Express;var py=Af();Ct.Postgres=py.Postgres;var hy=Pf();Ct.Mysql=hy.Mysql;var _y=qf();Ct.Mongo=_y.Mongo;var vy=Vn();Ct.BrowserTracing=vy.BrowserTracing});var tl=b(ae=>{Object.defineProperty(ae,"__esModule",{value:!0});var Zf=Nn();ae.addExtensionMethods=Zf.addExtensionMethods;var gy=Qf();ae.Integrations=gy;var my=Vn();ae.BrowserTracing=my.BrowserTracing;var yy=Cn();ae.Span=yy.Span;var by=Rn();ae.Transaction=by.Transaction;var el=Vn();ae.registerRequestInstrumentation=el.instrumentOutgoingRequests;ae.defaultRequestInstrumentationOptions=el.defaultRequestInstrumentationOptions;var Sy=ft();ae.SpanStatus=Sy.SpanStatus;var Ey=Pn();ae.IdleTransaction=Ey.IdleTransaction;var Ty=Nn();ae.startIdleTransaction=Ty.startIdleTransaction;Zf.addExtensionMethods();var Ar=lt();ae.extractTraceparentData=Ar.extractTraceparentData;ae.getActiveTransaction=Ar.getActiveTransaction;ae.hasTracingEnabled=Ar.hasTracingEnabled;ae.stripUrlQueryAndFragment=Ar.stripUrlQueryAndFragment;ae.TRACEPARENT_REGEXP=Ar.TRACEPARENT_REGEXP});var rl=b(xa=>{"use strict";xa.parse=Iy;xa.serialize=Cy;var Oy=decodeURIComponent,wy=encodeURIComponent,xy=/; */,Wn=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;function Iy(t,e){if(typeof t!="string")throw new TypeError("argument str must be a string");for(var r={},n=e||{},i=t.split(xy),o=n.decode||Oy,a=0;a<i.length;a++){var s=i[a],u=s.indexOf("=");if(!(u<0)){var c=s.substr(0,u).trim(),l=s.substr(++u,s.length).trim();l[0]=='"'&&(l=l.slice(1,-1)),r[c]==null&&(r[c]=Ry(l,o))}}return r}function Cy(t,e,r){var n=r||{},i=n.encode||wy;if(typeof i!="function")throw new TypeError("option encode is invalid");if(!Wn.test(t))throw new TypeError("argument name is invalid");var o=i(e);if(o&&!Wn.test(o))throw new TypeError("argument val is invalid");var a=t+"="+o;if(n.maxAge!=null){var s=n.maxAge-0;if(isNaN(s)||!isFinite(s))throw new TypeError("option maxAge is invalid");a+="; Max-Age="+Math.floor(s)}if(n.domain){if(!Wn.test(n.domain))throw new TypeError("option domain is invalid");a+="; Domain="+n.domain}if(n.path){if(!Wn.test(n.path))throw new TypeError("option path is invalid");a+="; Path="+n.path}if(n.expires){if(typeof n.expires.toUTCString!="function")throw new TypeError("option expires is invalid");a+="; Expires="+n.expires.toUTCString()}if(n.httpOnly&&(a+="; HttpOnly"),n.secure&&(a+="; Secure"),n.sameSite){var u=typeof n.sameSite=="string"?n.sameSite.toLowerCase():n.sameSite;switch(u){case!0:a+="; SameSite=Strict";break;case"lax":a+="; SameSite=Lax";break;case"strict":a+="; SameSite=Strict";break;case"none":a+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}}return a}function Ry(t,e){try{return e(t)}catch{return t}}});var ol=b(At=>{Object.defineProperty(At,"__esModule",{value:!0});var He=N(),Rt=ie(),Ay=tl(),nl=ne(),Zt=P(),Py=rl(),qy=require("domain"),Ny=require("os"),My=require("url"),Pr=Jo();function ky(){return function(e,r,n){var i;e.headers&&Zt.isString(e.headers["sentry-trace"])&&(i=Ay.extractTraceparentData(e.headers["sentry-trace"]));var o=Rt.startTransaction(He.__assign({name:Yn(e,{path:!0,method:!0}),op:"http.server"},i),{request:$n(e)});Rt.getCurrentHub().configureScope(function(a){a.setSpan(o)}),r.__sentry_transaction=o,r.once("finish",function(){setImmediate(function(){Dy(o,e),o.setHttpStatus(r.statusCode),o.finish()})}),n()}}At.tracingHandler=ky;function Dy(t,e){!t||(t.name=Yn(e,{path:!0,method:!0}),t.setData("url",e.originalUrl),t.setData("baseUrl",e.baseUrl),t.setData("query",e.query))}function Yn(t,e){e===void 0&&(e={});var r,n=(r=t.method)===null||r===void 0?void 0:r.toUpperCase(),i="";t.route?i=""+(t.baseUrl||"")+t.route.path:(t.originalUrl||t.url)&&(i=Zt.stripUrlQueryAndFragment(t.originalUrl||t.url||""));var o="";return e.method&&n&&(o+=n),e.method&&e.path&&(o+=" "),e.path&&i&&(o+=i),o}function Fy(t,e){var r;switch(e){case"path":return Yn(t,{path:!0});case"handler":return((r=t.route)===null||r===void 0?void 0:r.stack[0].name)||"<anonymous>";case"methodPath":default:return Yn(t,{path:!0,method:!0})}}var jy=["id","username","email"];function Hy(t,e){var r={},n=Array.isArray(e)?e:jy;return n.forEach(function(i){t&&i in t&&(r[i]=t[i])}),r}var Ly=["cookies","data","headers","method","query_string","url"];function $n(t,e){e===void 0&&(e=Ly);var r={},n=t.headers||t.header||{},i=t.method,o=t.hostname||t.host||n.host||"<no host>",a=t.protocol==="https"||t.secure||(t.socket||{}).encrypted?"https":"http",s=t.originalUrl||t.url||"",u=a+"://"+o+s;return e.forEach(function(c){switch(c){case"headers":r.headers=n;break;case"method":r.method=i;break;case"url":r.url=u;break;case"cookies":r.cookies=t.cookies||Py.parse(n.cookie||"");break;case"query_string":r.query_string=t.query||My.parse(s||"",!1).query;break;case"data":if(i==="GET"||i==="HEAD")break;t.body!==void 0&&(r.data=Zt.isString(t.body)?t.body:JSON.stringify(Zt.normalize(t.body)));break;default:({}).hasOwnProperty.call(t,c)&&(r[c]=t[c])}}),r}At.extractRequestData=$n;function il(t,e,r){if(r=He.__assign({ip:!1,request:!0,serverName:!0,transaction:!0,user:!0,version:!0},r),r.version&&(t.contexts=He.__assign(He.__assign({},t.contexts),{runtime:{name:"node",version:global.process.version}})),r.request){var n=Array.isArray(r.request)?$n(e,r.request):$n(e);t.request=He.__assign(He.__assign({},t.request),n)}if(r.serverName&&!t.server_name&&(t.server_name=global.process.env.SENTRY_NAME||Ny.hostname()),r.user){var i=e.user&&Zt.isPlainObject(e.user)?Hy(e.user,r.user):{};Object.keys(i)&&(t.user=He.__assign(He.__assign({},t.user),i))}if(r.ip){var o=e.ip||e.connection&&e.connection.remoteAddress;o&&(t.user=He.__assign(He.__assign({},t.user),{ip_address:o}))}return r.transaction&&!t.transaction&&(t.transaction=Fy(e,r.transaction)),t}At.parseRequest=il;function Uy(t){var e=Rt.getCurrentHub(),r=e.getClient();if(r&&Pr.isAutoSessionTrackingEnabled(r)){r.initSessionFlusher();var n=e.getScope();n&&n.getSession()&&n.setSession()}return function(o,a,s){if(t&&t.flushTimeout&&t.flushTimeout>0){var u=a.end;a.end=function(l,d,h){var y=this;Pr.flush(t.flushTimeout).then(function(){u.call(y,l,d,h)}).then(null,function(S){Zt.logger.error(S)})}}var c=qy.create();c.add(o),c.add(a),c.on("error",s),c.run(function(){var l=Rt.getCurrentHub();l.configureScope(function(d){d.addEventProcessor(function(S){return il(S,o,t)});var h=l.getClient();if(Pr.isAutoSessionTrackingEnabled(h)){var y=l.getScope();y&&y.setRequestSession({status:nl.RequestSessionStatus.Ok})}}),a.once("finish",function(){var d=l.getClient();Pr.isAutoSessionTrackingEnabled(d)&&setImmediate(function(){d&&d._captureRequestSession&&d._captureRequestSession()})}),s()})}}At.requestHandler=Uy;function By(t){var e=t.status||t.statusCode||t.status_code||t.output&&t.output.statusCode;return e?parseInt(e,10):500}function Gy(t){var e=By(t);return e>=500}function zy(t){return function(r,n,i,o){var a=t&&t.shouldHandleError||Gy;if(a(r)){Rt.withScope(function(s){var u=i.__sentry_transaction;u&&s.getSpan()===void 0&&s.setSpan(u);var c=Rt.getCurrentHub().getClient();if(c&&Pr.isAutoSessionTrackingEnabled(c)){var l=c._sessionFlusher!==void 0;if(l){var d=s.getRequestSession();d&&d.status!==void 0&&(d.status=nl.RequestSessionStatus.Crashed)}}var h=Rt.captureException(r);i.sentry=h,o(r)});return}o(r)}}At.errorHandler=zy});var ul=b(H=>{Object.defineProperty(H,"__esModule",{value:!0});var al=N(),sl=ne();H.Severity=sl.Severity;H.Status=sl.Status;var X=ie();H.addGlobalEventProcessor=X.addGlobalEventProcessor;H.addBreadcrumb=X.addBreadcrumb;H.captureException=X.captureException;H.captureEvent=X.captureEvent;H.captureMessage=X.captureMessage;H.configureScope=X.configureScope;H.getHubFromCarrier=X.getHubFromCarrier;H.getCurrentHub=X.getCurrentHub;H.Hub=X.Hub;H.makeMain=X.makeMain;H.Scope=X.Scope;H.startTransaction=X.startTransaction;H.SDK_VERSION=X.SDK_VERSION;H.setContext=X.setContext;H.setExtra=X.setExtra;H.setExtras=X.setExtras;H.setTag=X.setTag;H.setTags=X.setTags;H.setUser=X.setUser;H.withScope=X.withScope;var Vy=Po();H.NodeBackend=Vy.NodeBackend;var Wy=Mo();H.NodeClient=Wy.NodeClient;var er=Jo();H.defaultIntegrations=er.defaultIntegrations;H.init=er.init;H.lastEventId=er.lastEventId;H.flush=er.flush;H.close=er.close;H.getSentryRelease=er.getSentryRelease;var Yy=hf();H.deepReadDirSync=Yy.deepReadDirSync;var $y=po();H.SDK_NAME=$y.SDK_NAME;var Ky=ie(),Jy=ge(),Xy=require("domain"),Qy=ol();H.Handlers=Qy;var Zy=$o(),eb=Ro();H.Transports=eb;var tb=al.__assign(al.__assign({},Ky.Integrations),Zy);H.Integrations=tb;var qr=Jy.getMainCarrier();qr.__SENTRY__&&(qr.__SENTRY__.extensions=qr.__SENTRY__.extensions||{},qr.__SENTRY__.extensions.domain=qr.__SENTRY__.extensions.domain||Xy)});var fl=b(Ca=>{Object.defineProperty(Ca,"__esModule",{value:!0});var cl=N(),Ia=P(),rb=/^\[((?:[$a-zA-Z0-9]+:)?(?:[$a-zA-Z0-9]+))\] (.*?)\n?(\S+)$/,nb=function(){function t(e){if(e===void 0&&(e={}),this.name=t.id,Ia.logger.log("You are still using the Angular integration, consider moving to @sentry/angular"),this._angular=e.angular||Ia.getGlobalObject().angular,!this._angular){Ia.logger.error("AngularIntegration is missing an Angular instance");return}this._module=this._angular.module(t.moduleName,[])}return t.prototype.setupOnce=function(e,r){var n=this;!this._module||(this._getCurrentHub=r,this._module.config(["$provide",function(i){i.decorator("$exceptionHandler",["$delegate",n._$exceptionHandlerDecorator.bind(n)])}]))},t.prototype._$exceptionHandlerDecorator=function(e){var r=this;return function(n,i){var o=r._getCurrentHub&&r._getCurrentHub();o&&o.getIntegration(t)&&o.withScope(function(a){i&&a.setExtra("cause",i),a.addEventProcessor(function(s){var u=s.exception&&s.exception.values&&s.exception.values[0];if(u){var c=rb.exec(u.value||"");c&&(u.type=c[1],u.value=c[2],s.message=u.type+": "+u.value,s.extra=cl.__assign(cl.__assign({},s.extra),{angularDocs:c[3].substr(0,250)}))}return s}),o.captureException(n)}),e(n,i)}},t.id="AngularJS",t.moduleName="ngSentry",t}();Ca.Angular=nb});var ll=b(Ra=>{Object.defineProperty(Ra,"__esModule",{value:!0});var ib=ne(),Kn=P(),Jn=Kn.getGlobalObject(),ob=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._levels=["log","info","warn","error","debug","assert"],e.levels&&(this._levels=e.levels)}return t.prototype.setupOnce=function(e,r){"console"in Jn&&this._levels.forEach(function(n){n in Jn.console&&Kn.fill(Jn.console,n,function(i){return function(){for(var o=[],a=0;a<arguments.length;a++)o[a]=arguments[a];var s=r();s.getIntegration(t)&&s.withScope(function(u){u.setLevel(ib.Severity.fromString(n)),u.setExtra("arguments",o),u.addEventProcessor(function(l){return l.logger="console",l});var c=Kn.safeJoin(o," ");n==="assert"?o[0]===!1&&(c="Assertion failed: "+(Kn.safeJoin(o.slice(1)," ")||"console.assert"),u.setExtra("arguments",o.slice(1)),s.captureMessage(c)):n==="error"&&o[0]instanceof Error?s.captureException(o[0]):s.captureMessage(c)}),i&&Function.prototype.apply.call(i,Jn.console,o)}})})},t.id="CaptureConsole",t}();Ra.CaptureConsole=ob});var dl=b(Aa=>{Object.defineProperty(Aa,"__esModule",{value:!0});var ab=N(),sb=P(),ub=function(){function t(e){this.name=t.id,this._options=ab.__assign({debugger:!1,stringify:!1},e)}return t.prototype.setupOnce=function(e,r){e(function(n,i){var o=r().getIntegration(t);if(o){if(o._options.debugger)debugger;sb.consoleSandbox(function(){o._options.stringify?(console.log(JSON.stringify(n,null,2)),i&&console.log(JSON.stringify(i,null,2))):(console.log(n),i&&console.log(i))})}return n})},t.id="Debug",t}();Aa.Debug=ub});var pl=b(Pa=>{Object.defineProperty(Pa,"__esModule",{value:!0});var cb=P(),fb=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(e,r){e(function(n){var i=r().getIntegration(t);if(i){try{if(i._shouldDropEvent(n,i._previousEvent))return cb.logger.warn("Event dropped due to being a duplicate of previously captured event."),null}catch{return i._previousEvent=n}return i._previousEvent=n}return n})},t.prototype._shouldDropEvent=function(e,r){return r?!!(this._isSameMessageEvent(e,r)||this._isSameExceptionEvent(e,r)):!1},t.prototype._isSameMessageEvent=function(e,r){var n=e.message,i=r.message;return!(!n&&!i||n&&!i||!n&&i||n!==i||!this._isSameFingerprint(e,r)||!this._isSameStacktrace(e,r))},t.prototype._getFramesFromEvent=function(e){var r=e.exception;if(r)try{return r.values[0].stacktrace.frames}catch{return}else if(e.stacktrace)return e.stacktrace.frames},t.prototype._isSameStacktrace=function(e,r){var n=this._getFramesFromEvent(e),i=this._getFramesFromEvent(r);if(!n&&!i)return!0;if(n&&!i||!n&&i||(n=n,i=i,i.length!==n.length))return!1;for(var o=0;o<i.length;o++){var a=i[o],s=n[o];if(a.filename!==s.filename||a.lineno!==s.lineno||a.colno!==s.colno||a.function!==s.function)return!1}return!0},t.prototype._getExceptionFromEvent=function(e){return e.exception&&e.exception.values&&e.exception.values[0]},t.prototype._isSameExceptionEvent=function(e,r){var n=this._getExceptionFromEvent(r),i=this._getExceptionFromEvent(e);return!(!n||!i||n.type!==i.type||n.value!==i.value||!this._isSameFingerprint(e,r)||!this._isSameStacktrace(e,r))},t.prototype._isSameFingerprint=function(e,r){var n=e.fingerprint,i=r.fingerprint;if(!n&&!i)return!0;if(n&&!i||!n&&i)return!1;n=n,i=i;try{return n.join("")===i.join("")}catch{return!1}},t.id="Dedupe",t}();Pa.Dedupe=fb});var hl=b(Na=>{Object.defineProperty(Na,"__esModule",{value:!0});var qa=P(),lb=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._Ember=e.Ember||qa.getGlobalObject().Ember}return t.prototype.setupOnce=function(e,r){var n=this;if(!this._Ember){qa.logger.error("EmberIntegration is missing an Ember instance");return}var i=this._Ember.onerror;this._Ember.onerror=function(o){if(r().getIntegration(t)&&r().captureException(o,{originalException:o}),typeof i=="function")i.call(n._Ember,o);else if(n._Ember.testing)throw o},this._Ember.RSVP.on("error",function(o){r().getIntegration(t)&&r().withScope(function(a){qa.isInstanceOf(o,Error)?(a.setExtra("context","Unhandled Promise error detected"),r().captureException(o,{originalException:o})):(a.setExtra("reason",o),r().captureMessage("Unhandled Promise error detected"))})})},t.id="Ember",t}();Na.Ember=lb});var _l=b(Ma=>{Object.defineProperty(Ma,"__esModule",{value:!0});var _t=N(),tr=P(),db=function(){function t(e){e===void 0&&(e={depth:3}),this._options=e,this.name=t.id}return t.prototype.setupOnce=function(e,r){e(function(n,i){var o=r().getIntegration(t);return o?o.enhanceEventWithErrorData(n,i):n})},t.prototype.enhanceEventWithErrorData=function(e,r){var n;if(!r||!r.originalException||!tr.isError(r.originalException))return e;var i=r.originalException.name||r.originalException.constructor.name,o=this._extractErrorData(r.originalException);if(o){var a=_t.__assign({},e.contexts),s=tr.normalize(o,this._options.depth);return tr.isPlainObject(s)&&(a=_t.__assign(_t.__assign({},e.contexts),(n={},n[i]=_t.__assign({},s),n))),_t.__assign(_t.__assign({},e),{contexts:a})}return e},t.prototype._extractErrorData=function(e){var r,n,i,o;try{var a=["name","message","stack","line","column","fileName","lineNumber","columnNumber","toJSON"],s={};try{for(var u=_t.__values(Object.keys(e)),c=u.next();!c.done;c=u.next()){var l=c.value;if(a.indexOf(l)===-1){var d=e[l];s[l]=tr.isError(d)?d.toString():d}}}catch(T){r={error:T}}finally{try{c&&!c.done&&(n=u.return)&&n.call(u)}finally{if(r)throw r.error}}if(typeof e.toJSON=="function"){var h=e.toJSON();try{for(var y=_t.__values(Object.keys(h)),S=y.next();!S.done;S=y.next()){var l=S.value,d=h[l];s[l]=tr.isError(d)?d.toString():d}}catch(T){i={error:T}}finally{try{S&&!S.done&&(o=y.return)&&o.call(y)}finally{if(i)throw i.error}}}return s}catch(T){tr.logger.error("Unable to extract extra data from the Error object:",T)}return null},t.id="ExtraErrorData",t}();Ma.ExtraErrorData=db});var gl=b((vl,ka)=>{(function(t){if(typeof vl=="object"&&typeof ka!="undefined")ka.exports=t();else if(typeof define=="function"&&define.amd)define([],t);else{var e;typeof window!="undefined"?e=window:typeof global!="undefined"?e=global:typeof self!="undefined"?e=self:e=this,e.localforage=t()}})(function(){var t,e,r;return function n(i,o,a){function s(l,d){if(!o[l]){if(!i[l]){var h=typeof require=="function"&&require;if(!d&&h)return h(l,!0);if(u)return u(l,!0);var y=new Error("Cannot find module '"+l+"'");throw y.code="MODULE_NOT_FOUND",y}var S=o[l]={exports:{}};i[l][0].call(S.exports,function(T){var C=i[l][1][T];return s(C||T)},S,S.exports,n,i,o,a)}return o[l].exports}for(var u=typeof require=="function"&&require,c=0;c<a.length;c++)s(a[c]);return s}({1:[function(n,i,o){(function(a){"use strict";var s=a.MutationObserver||a.WebKitMutationObserver,u;if(s){var c=0,l=new s(T),d=a.document.createTextNode("");l.observe(d,{characterData:!0}),u=function(){d.data=c=++c%2}}else if(!a.setImmediate&&typeof a.MessageChannel!="undefined"){var h=new a.MessageChannel;h.port1.onmessage=T,u=function(){h.port2.postMessage(0)}}else"document"in a&&"onreadystatechange"in a.document.createElement("script")?u=function(){var q=a.document.createElement("script");q.onreadystatechange=function(){T(),q.onreadystatechange=null,q.parentNode.removeChild(q),q=null},a.document.documentElement.appendChild(q)}:u=function(){setTimeout(T,0)};var y,S=[];function T(){y=!0;for(var q,U,k=S.length;k;){for(U=S,S=[],q=-1;++q<k;)U[q]();k=S.length}y=!1}i.exports=C;function C(q){S.push(q)===1&&!y&&u()}}).call(this,typeof global!="undefined"?global:typeof self!="undefined"?self:typeof window!="undefined"?window:{})},{}],2:[function(n,i,o){"use strict";var a=n(1);function s(){}var u={},c=["REJECTED"],l=["FULFILLED"],d=["PENDING"];i.exports=h;function h(R){if(typeof R!="function")throw new TypeError("resolver must be a function");this.state=d,this.queue=[],this.outcome=void 0,R!==s&&C(this,R)}h.prototype.catch=function(R){return this.then(null,R)},h.prototype.then=function(R,B){if(typeof R!="function"&&this.state===l||typeof B!="function"&&this.state===c)return this;var D=new this.constructor(s);if(this.state!==d){var V=this.state===l?R:B;S(D,V,this.outcome)}else this.queue.push(new y(D,R,B));return D};function y(R,B,D){this.promise=R,typeof B=="function"&&(this.onFulfilled=B,this.callFulfilled=this.otherCallFulfilled),typeof D=="function"&&(this.onRejected=D,this.callRejected=this.otherCallRejected)}y.prototype.callFulfilled=function(R){u.resolve(this.promise,R)},y.prototype.otherCallFulfilled=function(R){S(this.promise,this.onFulfilled,R)},y.prototype.callRejected=function(R){u.reject(this.promise,R)},y.prototype.otherCallRejected=function(R){S(this.promise,this.onRejected,R)};function S(R,B,D){a(function(){var V;try{V=B(D)}catch(re){return u.reject(R,re)}V===R?u.reject(R,new TypeError("Cannot resolve promise with itself")):u.resolve(R,V)})}u.resolve=function(R,B){var D=q(T,B);if(D.status==="error")return u.reject(R,D.value);var V=D.value;if(V)C(R,V);else{R.state=l,R.outcome=B;for(var re=-1,he=R.queue.length;++re<he;)R.queue[re].callFulfilled(B)}return R},u.reject=function(R,B){R.state=c,R.outcome=B;for(var D=-1,V=R.queue.length;++D<V;)R.queue[D].callRejected(B);return R};function T(R){var B=R&&R.then;if(R&&(typeof R=="object"||typeof R=="function")&&typeof B=="function")return function(){B.apply(R,arguments)}}function C(R,B){var D=!1;function V(Te){D||(D=!0,u.reject(R,Te))}function re(Te){D||(D=!0,u.resolve(R,Te))}function he(){B(re,V)}var Ee=q(he);Ee.status==="error"&&V(Ee.value)}function q(R,B){var D={};try{D.value=R(B),D.status="success"}catch(V){D.status="error",D.value=V}return D}h.resolve=U;function U(R){return R instanceof this?R:u.resolve(new this(s),R)}h.reject=k;function k(R){var B=new this(s);return u.reject(B,R)}h.all=Se;function Se(R){var B=this;if(Object.prototype.toString.call(R)!=="[object Array]")return this.reject(new TypeError("must be an array"));var D=R.length,V=!1;if(!D)return this.resolve([]);for(var re=new Array(D),he=0,Ee=-1,Te=new this(s);++Ee<D;)Ue(R[Ee],Ee);return Te;function Ue(nr,Nr){B.resolve(nr).then(ei,function(Pt){V||(V=!0,u.reject(Te,Pt))});function ei(Pt){re[Nr]=Pt,++he===D&&!V&&(V=!0,u.resolve(Te,re))}}}h.race=et;function et(R){var B=this;if(Object.prototype.toString.call(R)!=="[object Array]")return this.reject(new TypeError("must be an array"));var D=R.length,V=!1;if(!D)return this.resolve([]);for(var re=-1,he=new this(s);++re<D;)Ee(R[re]);return he;function Ee(Te){B.resolve(Te).then(function(Ue){V||(V=!0,u.resolve(he,Ue))},function(Ue){V||(V=!0,u.reject(he,Ue))})}}},{"1":1}],3:[function(n,i,o){(function(a){"use strict";typeof a.Promise!="function"&&(a.Promise=n(2))}).call(this,typeof global!="undefined"?global:typeof self!="undefined"?self:typeof window!="undefined"?window:{})},{"2":2}],4:[function(n,i,o){"use strict";var a=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(f){return typeof f}:function(f){return f&&typeof Symbol=="function"&&f.constructor===Symbol&&f!==Symbol.prototype?"symbol":typeof f};function s(f,_){if(!(f instanceof _))throw new TypeError("Cannot call a class as a function")}function u(){try{if(typeof indexedDB!="undefined")return indexedDB;if(typeof webkitIndexedDB!="undefined")return webkitIndexedDB;if(typeof mozIndexedDB!="undefined")return mozIndexedDB;if(typeof OIndexedDB!="undefined")return OIndexedDB;if(typeof msIndexedDB!="undefined")return msIndexedDB}catch{return}}var c=u();function l(){try{if(!c||!c.open)return!1;var f=typeof openDatabase!="undefined"&&/(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)&&!/BlackBerry/.test(navigator.platform),_=typeof fetch=="function"&&fetch.toString().indexOf("[native code")!==-1;return(!f||_)&&typeof indexedDB!="undefined"&&typeof IDBKeyRange!="undefined"}catch{return!1}}function d(f,_){f=f||[],_=_||{};try{return new Blob(f,_)}catch(v){if(v.name!=="TypeError")throw v;for(var p=typeof BlobBuilder!="undefined"?BlobBuilder:typeof MSBlobBuilder!="undefined"?MSBlobBuilder:typeof MozBlobBuilder!="undefined"?MozBlobBuilder:WebKitBlobBuilder,g=new p,m=0;m<f.length;m+=1)g.append(f[m]);return g.getBlob(_.type)}}typeof Promise=="undefined"&&n(3);var h=Promise;function y(f,_){_&&f.then(function(p){_(null,p)},function(p){_(p)})}function S(f,_,p){typeof _=="function"&&f.then(_),typeof p=="function"&&f.catch(p)}function T(f){return typeof f!="string"&&(console.warn(f+" used as a key, but it is not a string."),f=String(f)),f}function C(){if(arguments.length&&typeof arguments[arguments.length-1]=="function")return arguments[arguments.length-1]}var q="local-forage-detect-blob-support",U=void 0,k={},Se=Object.prototype.toString,et="readonly",R="readwrite";function B(f){for(var _=f.length,p=new ArrayBuffer(_),g=new Uint8Array(p),m=0;m<_;m++)g[m]=f.charCodeAt(m);return p}function D(f){return new h(function(_){var p=f.transaction(q,R),g=d([""]);p.objectStore(q).put(g,"key"),p.onabort=function(m){m.preventDefault(),m.stopPropagation(),_(!1)},p.oncomplete=function(){var m=navigator.userAgent.match(/Chrome\/(\d+)/),v=navigator.userAgent.match(/Edge\//);_(v||!m||parseInt(m[1],10)>=43)}}).catch(function(){return!1})}function V(f){return typeof U=="boolean"?h.resolve(U):D(f).then(function(_){return U=_,U})}function re(f){var _=k[f.name],p={};p.promise=new h(function(g,m){p.resolve=g,p.reject=m}),_.deferredOperations.push(p),_.dbReady?_.dbReady=_.dbReady.then(function(){return p.promise}):_.dbReady=p.promise}function he(f){var _=k[f.name],p=_.deferredOperations.pop();if(p)return p.resolve(),p.promise}function Ee(f,_){var p=k[f.name],g=p.deferredOperations.pop();if(g)return g.reject(_),g.promise}function Te(f,_){return new h(function(p,g){if(k[f.name]=k[f.name]||Wa(),f.db)if(_)re(f),f.db.close();else return p(f.db);var m=[f.name];_&&m.push(f.version);var v=c.open.apply(c,m);_&&(v.onupgradeneeded=function(E){var O=v.result;try{O.createObjectStore(f.storeName),E.oldVersion<=1&&O.createObjectStore(q)}catch(w){if(w.name==="ConstraintError")console.warn('The database "'+f.name+'" has been upgraded from version '+E.oldVersion+" to version "+E.newVersion+', but the storage "'+f.storeName+'" already exists.');else throw w}}),v.onerror=function(E){E.preventDefault(),g(v.error)},v.onsuccess=function(){var E=v.result;E.onversionchange=function(O){O.target.close()},p(E),he(f)}})}function Ue(f){return Te(f,!1)}function nr(f){return Te(f,!0)}function Nr(f,_){if(!f.db)return!0;var p=!f.db.objectStoreNames.contains(f.storeName),g=f.version<f.db.version,m=f.version>f.db.version;if(g&&(f.version!==_&&console.warn('The database "'+f.name+`" can't be downgraded from version `+f.db.version+" to version "+f.version+"."),f.version=f.db.version),m||p){if(p){var v=f.db.version+1;v>f.version&&(f.version=v)}return!0}return!1}function ei(f){return new h(function(_,p){var g=new FileReader;g.onerror=p,g.onloadend=function(m){var v=btoa(m.target.result||"");_({__local_forage_encoded_blob:!0,data:v,type:f.type})},g.readAsBinaryString(f)})}function Pt(f){var _=B(atob(f.data));return d([_],{type:f.type})}function Va(f){return f&&f.__local_forage_encoded_blob}function Al(f){var _=this,p=_._initReady().then(function(){var g=k[_._dbInfo.name];if(g&&g.dbReady)return g.dbReady});return S(p,f,f),p}function Pl(f){re(f);for(var _=k[f.name],p=_.forages,g=0;g<p.length;g++){var m=p[g];m._dbInfo.db&&(m._dbInfo.db.close(),m._dbInfo.db=null)}return f.db=null,Ue(f).then(function(v){return f.db=v,Nr(f)?nr(f):v}).then(function(v){f.db=_.db=v;for(var E=0;E<p.length;E++)p[E]._dbInfo.db=v}).catch(function(v){throw Ee(f,v),v})}function Be(f,_,p,g){g===void 0&&(g=1);try{var m=f.db.transaction(f.storeName,_);p(null,m)}catch(v){if(g>0&&(!f.db||v.name==="InvalidStateError"||v.name==="NotFoundError"))return h.resolve().then(function(){if(!f.db||v.name==="NotFoundError"&&!f.db.objectStoreNames.contains(f.storeName)&&f.version<=f.db.version)return f.db&&(f.version=f.db.version+1),nr(f)}).then(function(){return Pl(f).then(function(){Be(f,_,p,g-1)})}).catch(p);p(v)}}function Wa(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function ql(f){var _=this,p={db:null};if(f)for(var g in f)p[g]=f[g];var m=k[p.name];m||(m=Wa(),k[p.name]=m),m.forages.push(_),_._initReady||(_._initReady=_.ready,_.ready=Al);var v=[];function E(){return h.resolve()}for(var O=0;O<m.forages.length;O++){var w=m.forages[O];w!==_&&v.push(w._initReady().catch(E))}var x=m.forages.slice(0);return h.all(v).then(function(){return p.db=m.db,Ue(p)}).then(function(I){return p.db=I,Nr(p,_._defaultConfig.version)?nr(p):I}).then(function(I){p.db=m.db=I,_._dbInfo=p;for(var A=0;A<x.length;A++){var F=x[A];F!==_&&(F._dbInfo.db=p.db,F._dbInfo.version=p.version)}})}function Nl(f,_){var p=this;f=T(f);var g=new h(function(m,v){p.ready().then(function(){Be(p._dbInfo,et,function(E,O){if(E)return v(E);try{var w=O.objectStore(p._dbInfo.storeName),x=w.get(f);x.onsuccess=function(){var I=x.result;I===void 0&&(I=null),Va(I)&&(I=Pt(I)),m(I)},x.onerror=function(){v(x.error)}}catch(I){v(I)}})}).catch(v)});return y(g,_),g}function Ml(f,_){var p=this,g=new h(function(m,v){p.ready().then(function(){Be(p._dbInfo,et,function(E,O){if(E)return v(E);try{var w=O.objectStore(p._dbInfo.storeName),x=w.openCursor(),I=1;x.onsuccess=function(){var A=x.result;if(A){var F=A.value;Va(F)&&(F=Pt(F));var G=f(F,A.key,I++);G!==void 0?m(G):A.continue()}else m()},x.onerror=function(){v(x.error)}}catch(A){v(A)}})}).catch(v)});return y(g,_),g}function kl(f,_,p){var g=this;f=T(f);var m=new h(function(v,E){var O;g.ready().then(function(){return O=g._dbInfo,Se.call(_)==="[object Blob]"?V(O.db).then(function(w){return w?_:ei(_)}):_}).then(function(w){Be(g._dbInfo,R,function(x,I){if(x)return E(x);try{var A=I.objectStore(g._dbInfo.storeName);w===null&&(w=void 0);var F=A.put(w,f);I.oncomplete=function(){w===void 0&&(w=null),v(w)},I.onabort=I.onerror=function(){var G=F.error?F.error:F.transaction.error;E(G)}}catch(G){E(G)}})}).catch(E)});return y(m,p),m}function Dl(f,_){var p=this;f=T(f);var g=new h(function(m,v){p.ready().then(function(){Be(p._dbInfo,R,function(E,O){if(E)return v(E);try{var w=O.objectStore(p._dbInfo.storeName),x=w.delete(f);O.oncomplete=function(){m()},O.onerror=function(){v(x.error)},O.onabort=function(){var I=x.error?x.error:x.transaction.error;v(I)}}catch(I){v(I)}})}).catch(v)});return y(g,_),g}function Fl(f){var _=this,p=new h(function(g,m){_.ready().then(function(){Be(_._dbInfo,R,function(v,E){if(v)return m(v);try{var O=E.objectStore(_._dbInfo.storeName),w=O.clear();E.oncomplete=function(){g()},E.onabort=E.onerror=function(){var x=w.error?w.error:w.transaction.error;m(x)}}catch(x){m(x)}})}).catch(m)});return y(p,f),p}function jl(f){var _=this,p=new h(function(g,m){_.ready().then(function(){Be(_._dbInfo,et,function(v,E){if(v)return m(v);try{var O=E.objectStore(_._dbInfo.storeName),w=O.count();w.onsuccess=function(){g(w.result)},w.onerror=function(){m(w.error)}}catch(x){m(x)}})}).catch(m)});return y(p,f),p}function Hl(f,_){var p=this,g=new h(function(m,v){if(f<0){m(null);return}p.ready().then(function(){Be(p._dbInfo,et,function(E,O){if(E)return v(E);try{var w=O.objectStore(p._dbInfo.storeName),x=!1,I=w.openKeyCursor();I.onsuccess=function(){var A=I.result;if(!A){m(null);return}f===0||x?m(A.key):(x=!0,A.advance(f))},I.onerror=function(){v(I.error)}}catch(A){v(A)}})}).catch(v)});return y(g,_),g}function Ll(f){var _=this,p=new h(function(g,m){_.ready().then(function(){Be(_._dbInfo,et,function(v,E){if(v)return m(v);try{var O=E.objectStore(_._dbInfo.storeName),w=O.openKeyCursor(),x=[];w.onsuccess=function(){var I=w.result;if(!I){g(x);return}x.push(I.key),I.continue()},w.onerror=function(){m(w.error)}}catch(I){m(I)}})}).catch(m)});return y(p,f),p}function Ul(f,_){_=C.apply(this,arguments);var p=this.config();f=typeof f!="function"&&f||{},f.name||(f.name=f.name||p.name,f.storeName=f.storeName||p.storeName);var g=this,m;if(!f.name)m=h.reject("Invalid arguments");else{var v=f.name===p.name&&g._dbInfo.db,E=v?h.resolve(g._dbInfo.db):Ue(f).then(function(O){var w=k[f.name],x=w.forages;w.db=O;for(var I=0;I<x.length;I++)x[I]._dbInfo.db=O;return O});f.storeName?m=E.then(function(O){if(!!O.objectStoreNames.contains(f.storeName)){var w=O.version+1;re(f);var x=k[f.name],I=x.forages;O.close();for(var A=0;A<I.length;A++){var F=I[A];F._dbInfo.db=null,F._dbInfo.version=w}var G=new h(function(W,J){var $=c.open(f.name,w);$.onerror=function(Oe){var or=$.result;or.close(),J(Oe)},$.onupgradeneeded=function(){var Oe=$.result;Oe.deleteObjectStore(f.storeName)},$.onsuccess=function(){var Oe=$.result;Oe.close(),W(Oe)}});return G.then(function(W){x.db=W;for(var J=0;J<I.length;J++){var $=I[J];$._dbInfo.db=W,he($._dbInfo)}}).catch(function(W){throw(Ee(f,W)||h.resolve()).catch(function(){}),W})}}):m=E.then(function(O){re(f);var w=k[f.name],x=w.forages;O.close();for(var I=0;I<x.length;I++){var A=x[I];A._dbInfo.db=null}var F=new h(function(G,W){var J=c.deleteDatabase(f.name);J.onerror=function(){var $=J.result;$&&$.close(),W(J.error)},J.onblocked=function(){console.warn('dropInstance blocked for database "'+f.name+'" until all open connections are closed')},J.onsuccess=function(){var $=J.result;$&&$.close(),G($)}});return F.then(function(G){w.db=G;for(var W=0;W<x.length;W++){var J=x[W];he(J._dbInfo)}}).catch(function(G){throw(Ee(f,G)||h.resolve()).catch(function(){}),G})})}return y(m,_),m}var Bl={_driver:"asyncStorage",_initStorage:ql,_support:l(),iterate:Ml,getItem:Nl,setItem:kl,removeItem:Dl,clear:Fl,length:jl,key:Hl,keys:Ll,dropInstance:Ul};function Gl(){return typeof openDatabase=="function"}var tt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",zl="~~local_forage_type~",Ya=/^~~local_forage_type~([^~]+)~/,Mr="__lfsc__:",ti=Mr.length,ri="arbf",ni="blob",$a="si08",Ka="ui08",Ja="uic8",Xa="si16",Qa="si32",Za="ur16",es="ui32",ts="fl32",rs="fl64",ns=ti+ri.length,is=Object.prototype.toString;function os(f){var _=f.length*.75,p=f.length,g,m=0,v,E,O,w;f[f.length-1]==="="&&(_--,f[f.length-2]==="="&&_--);var x=new ArrayBuffer(_),I=new Uint8Array(x);for(g=0;g<p;g+=4)v=tt.indexOf(f[g]),E=tt.indexOf(f[g+1]),O=tt.indexOf(f[g+2]),w=tt.indexOf(f[g+3]),I[m++]=v<<2|E>>4,I[m++]=(E&15)<<4|O>>2,I[m++]=(O&3)<<6|w&63;return x}function ii(f){var _=new Uint8Array(f),p="",g;for(g=0;g<_.length;g+=3)p+=tt[_[g]>>2],p+=tt[(_[g]&3)<<4|_[g+1]>>4],p+=tt[(_[g+1]&15)<<2|_[g+2]>>6],p+=tt[_[g+2]&63];return _.length%3===2?p=p.substring(0,p.length-1)+"=":_.length%3===1&&(p=p.substring(0,p.length-2)+"=="),p}function Vl(f,_){var p="";if(f&&(p=is.call(f)),f&&(p==="[object ArrayBuffer]"||f.buffer&&is.call(f.buffer)==="[object ArrayBuffer]")){var g,m=Mr;f instanceof ArrayBuffer?(g=f,m+=ri):(g=f.buffer,p==="[object Int8Array]"?m+=$a:p==="[object Uint8Array]"?m+=Ka:p==="[object Uint8ClampedArray]"?m+=Ja:p==="[object Int16Array]"?m+=Xa:p==="[object Uint16Array]"?m+=Za:p==="[object Int32Array]"?m+=Qa:p==="[object Uint32Array]"?m+=es:p==="[object Float32Array]"?m+=ts:p==="[object Float64Array]"?m+=rs:_(new Error("Failed to get type for BinaryArray"))),_(m+ii(g))}else if(p==="[object Blob]"){var v=new FileReader;v.onload=function(){var E=zl+f.type+"~"+ii(this.result);_(Mr+ni+E)},v.readAsArrayBuffer(f)}else try{_(JSON.stringify(f))}catch(E){console.error("Couldn't convert value into a JSON string: ",f),_(null,E)}}function Wl(f){if(f.substring(0,ti)!==Mr)return JSON.parse(f);var _=f.substring(ns),p=f.substring(ti,ns),g;if(p===ni&&Ya.test(_)){var m=_.match(Ya);g=m[1],_=_.substring(m[0].length)}var v=os(_);switch(p){case ri:return v;case ni:return d([v],{type:g});case $a:return new Int8Array(v);case Ka:return new Uint8Array(v);case Ja:return new Uint8ClampedArray(v);case Xa:return new Int16Array(v);case Za:return new Uint16Array(v);case Qa:return new Int32Array(v);case es:return new Uint32Array(v);case ts:return new Float32Array(v);case rs:return new Float64Array(v);default:throw new Error("Unkown type: "+p)}}var oi={serialize:Vl,deserialize:Wl,stringToBuffer:os,bufferToString:ii};function as(f,_,p,g){f.executeSql("CREATE TABLE IF NOT EXISTS "+_.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],p,g)}function Yl(f){var _=this,p={db:null};if(f)for(var g in f)p[g]=typeof f[g]!="string"?f[g].toString():f[g];var m=new h(function(v,E){try{p.db=openDatabase(p.name,String(p.version),p.description,p.size)}catch(O){return E(O)}p.db.transaction(function(O){as(O,p,function(){_._dbInfo=p,v()},function(w,x){E(x)})},E)});return p.serializer=oi,m}function rt(f,_,p,g,m,v){f.executeSql(p,g,m,function(E,O){O.code===O.SYNTAX_ERR?E.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[_.storeName],function(w,x){x.rows.length?v(w,O):as(w,_,function(){w.executeSql(p,g,m,v)},v)},v):v(E,O)},v)}function $l(f,_){var p=this;f=T(f);var g=new h(function(m,v){p.ready().then(function(){var E=p._dbInfo;E.db.transaction(function(O){rt(O,E,"SELECT * FROM "+E.storeName+" WHERE key = ? LIMIT 1",[f],function(w,x){var I=x.rows.length?x.rows.item(0).value:null;I&&(I=E.serializer.deserialize(I)),m(I)},function(w,x){v(x)})})}).catch(v)});return y(g,_),g}function Kl(f,_){var p=this,g=new h(function(m,v){p.ready().then(function(){var E=p._dbInfo;E.db.transaction(function(O){rt(O,E,"SELECT * FROM "+E.storeName,[],function(w,x){for(var I=x.rows,A=I.length,F=0;F<A;F++){var G=I.item(F),W=G.value;if(W&&(W=E.serializer.deserialize(W)),W=f(W,G.key,F+1),W!==void 0){m(W);return}}m()},function(w,x){v(x)})})}).catch(v)});return y(g,_),g}function ss(f,_,p,g){var m=this;f=T(f);var v=new h(function(E,O){m.ready().then(function(){_===void 0&&(_=null);var w=_,x=m._dbInfo;x.serializer.serialize(_,function(I,A){A?O(A):x.db.transaction(function(F){rt(F,x,"INSERT OR REPLACE INTO "+x.storeName+" (key, value) VALUES (?, ?)",[f,I],function(){E(w)},function(G,W){O(W)})},function(F){if(F.code===F.QUOTA_ERR){if(g>0){E(ss.apply(m,[f,w,p,g-1]));return}O(F)}})})}).catch(O)});return y(v,p),v}function Jl(f,_,p){return ss.apply(this,[f,_,p,1])}function Xl(f,_){var p=this;f=T(f);var g=new h(function(m,v){p.ready().then(function(){var E=p._dbInfo;E.db.transaction(function(O){rt(O,E,"DELETE FROM "+E.storeName+" WHERE key = ?",[f],function(){m()},function(w,x){v(x)})})}).catch(v)});return y(g,_),g}function Ql(f){var _=this,p=new h(function(g,m){_.ready().then(function(){var v=_._dbInfo;v.db.transaction(function(E){rt(E,v,"DELETE FROM "+v.storeName,[],function(){g()},function(O,w){m(w)})})}).catch(m)});return y(p,f),p}function Zl(f){var _=this,p=new h(function(g,m){_.ready().then(function(){var v=_._dbInfo;v.db.transaction(function(E){rt(E,v,"SELECT COUNT(key) as c FROM "+v.storeName,[],function(O,w){var x=w.rows.item(0).c;g(x)},function(O,w){m(w)})})}).catch(m)});return y(p,f),p}function ed(f,_){var p=this,g=new h(function(m,v){p.ready().then(function(){var E=p._dbInfo;E.db.transaction(function(O){rt(O,E,"SELECT key FROM "+E.storeName+" WHERE id = ? LIMIT 1",[f+1],function(w,x){var I=x.rows.length?x.rows.item(0).key:null;m(I)},function(w,x){v(x)})})}).catch(v)});return y(g,_),g}function td(f){var _=this,p=new h(function(g,m){_.ready().then(function(){var v=_._dbInfo;v.db.transaction(function(E){rt(E,v,"SELECT key FROM "+v.storeName,[],function(O,w){for(var x=[],I=0;I<w.rows.length;I++)x.push(w.rows.item(I).key);g(x)},function(O,w){m(w)})})}).catch(m)});return y(p,f),p}function rd(f){return new h(function(_,p){f.transaction(function(g){g.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'",[],function(m,v){for(var E=[],O=0;O<v.rows.length;O++)E.push(v.rows.item(O).name);_({db:f,storeNames:E})},function(m,v){p(v)})},function(g){p(g)})})}function nd(f,_){_=C.apply(this,arguments);var p=this.config();f=typeof f!="function"&&f||{},f.name||(f.name=f.name||p.name,f.storeName=f.storeName||p.storeName);var g=this,m;return f.name?m=new h(function(v){var E;f.name===p.name?E=g._dbInfo.db:E=openDatabase(f.name,"","",0),f.storeName?v({db:E,storeNames:[f.storeName]}):v(rd(E))}).then(function(v){return new h(function(E,O){v.db.transaction(function(w){function x(G){return new h(function(W,J){w.executeSql("DROP TABLE IF EXISTS "+G,[],function(){W()},function($,Oe){J(Oe)})})}for(var I=[],A=0,F=v.storeNames.length;A<F;A++)I.push(x(v.storeNames[A]));h.all(I).then(function(){E()}).catch(function(G){O(G)})},function(w){O(w)})})}):m=h.reject("Invalid arguments"),y(m,_),m}var id={_driver:"webSQLStorage",_initStorage:Yl,_support:Gl(),iterate:Kl,getItem:$l,setItem:Jl,removeItem:Xl,clear:Ql,length:Zl,key:ed,keys:td,dropInstance:nd};function od(){try{return typeof localStorage!="undefined"&&"setItem"in localStorage&&!!localStorage.setItem}catch{return!1}}function us(f,_){var p=f.name+"/";return f.storeName!==_.storeName&&(p+=f.storeName+"/"),p}function ad(){var f="_localforage_support_test";try{return localStorage.setItem(f,!0),localStorage.removeItem(f),!1}catch{return!0}}function sd(){return!ad()||localStorage.length>0}function ud(f){var _=this,p={};if(f)for(var g in f)p[g]=f[g];return p.keyPrefix=us(f,_._defaultConfig),sd()?(_._dbInfo=p,p.serializer=oi,h.resolve()):h.reject()}function cd(f){var _=this,p=_.ready().then(function(){for(var g=_._dbInfo.keyPrefix,m=localStorage.length-1;m>=0;m--){var v=localStorage.key(m);v.indexOf(g)===0&&localStorage.removeItem(v)}});return y(p,f),p}function fd(f,_){var p=this;f=T(f);var g=p.ready().then(function(){var m=p._dbInfo,v=localStorage.getItem(m.keyPrefix+f);return v&&(v=m.serializer.deserialize(v)),v});return y(g,_),g}function ld(f,_){var p=this,g=p.ready().then(function(){for(var m=p._dbInfo,v=m.keyPrefix,E=v.length,O=localStorage.length,w=1,x=0;x<O;x++){var I=localStorage.key(x);if(I.indexOf(v)===0){var A=localStorage.getItem(I);if(A&&(A=m.serializer.deserialize(A)),A=f(A,I.substring(E),w++),A!==void 0)return A}}});return y(g,_),g}function dd(f,_){var p=this,g=p.ready().then(function(){var m=p._dbInfo,v;try{v=localStorage.key(f)}catch{v=null}return v&&(v=v.substring(m.keyPrefix.length)),v});return y(g,_),g}function pd(f){var _=this,p=_.ready().then(function(){for(var g=_._dbInfo,m=localStorage.length,v=[],E=0;E<m;E++){var O=localStorage.key(E);O.indexOf(g.keyPrefix)===0&&v.push(O.substring(g.keyPrefix.length))}return v});return y(p,f),p}function hd(f){var _=this,p=_.keys().then(function(g){return g.length});return y(p,f),p}function _d(f,_){var p=this;f=T(f);var g=p.ready().then(function(){var m=p._dbInfo;localStorage.removeItem(m.keyPrefix+f)});return y(g,_),g}function vd(f,_,p){var g=this;f=T(f);var m=g.ready().then(function(){_===void 0&&(_=null);var v=_;return new h(function(E,O){var w=g._dbInfo;w.serializer.serialize(_,function(x,I){if(I)O(I);else try{localStorage.setItem(w.keyPrefix+f,x),E(v)}catch(A){(A.name==="QuotaExceededError"||A.name==="NS_ERROR_DOM_QUOTA_REACHED")&&O(A),O(A)}})})});return y(m,p),m}function gd(f,_){if(_=C.apply(this,arguments),f=typeof f!="function"&&f||{},!f.name){var p=this.config();f.name=f.name||p.name,f.storeName=f.storeName||p.storeName}var g=this,m;return f.name?m=new h(function(v){f.storeName?v(us(f,g._defaultConfig)):v(f.name+"/")}).then(function(v){for(var E=localStorage.length-1;E>=0;E--){var O=localStorage.key(E);O.indexOf(v)===0&&localStorage.removeItem(O)}}):m=h.reject("Invalid arguments"),y(m,_),m}var md={_driver:"localStorageWrapper",_initStorage:ud,_support:od(),iterate:ld,getItem:fd,setItem:vd,removeItem:_d,clear:cd,length:hd,key:dd,keys:pd,dropInstance:gd},yd=function(_,p){return _===p||typeof _=="number"&&typeof p=="number"&&isNaN(_)&&isNaN(p)},bd=function(_,p){for(var g=_.length,m=0;m<g;){if(yd(_[m],p))return!0;m++}return!1},cs=Array.isArray||function(f){return Object.prototype.toString.call(f)==="[object Array]"},ir={},fs={},qt={INDEXEDDB:Bl,WEBSQL:id,LOCALSTORAGE:md},Sd=[qt.INDEXEDDB._driver,qt.WEBSQL._driver,qt.LOCALSTORAGE._driver],kr=["dropInstance"],ai=["clear","getItem","iterate","key","keys","length","removeItem","setItem"].concat(kr),Ed={description:"",driver:Sd.slice(),name:"localforage",size:4980736,storeName:"keyvaluepairs",version:1};function Td(f,_){f[_]=function(){var p=arguments;return f.ready().then(function(){return f[_].apply(f,p)})}}function si(){for(var f=1;f<arguments.length;f++){var _=arguments[f];if(_)for(var p in _)_.hasOwnProperty(p)&&(cs(_[p])?arguments[0][p]=_[p].slice():arguments[0][p]=_[p])}return arguments[0]}var Od=function(){function f(_){s(this,f);for(var p in qt)if(qt.hasOwnProperty(p)){var g=qt[p],m=g._driver;this[p]=m,ir[m]||this.defineDriver(g)}this._defaultConfig=si({},Ed),this._config=si({},this._defaultConfig,_),this._driverSet=null,this._initDriver=null,this._ready=!1,this._dbInfo=null,this._wrapLibraryMethodsWithReady(),this.setDriver(this._config.driver).catch(function(){})}return f.prototype.config=function(p){if((typeof p=="undefined"?"undefined":a(p))==="object"){if(this._ready)return new Error("Can't call config() after localforage has been used.");for(var g in p){if(g==="storeName"&&(p[g]=p[g].replace(/\W/g,"_")),g==="version"&&typeof p[g]!="number")return new Error("Database version must be a number.");this._config[g]=p[g]}return"driver"in p&&p.driver?this.setDriver(this._config.driver):!0}else return typeof p=="string"?this._config[p]:this._config},f.prototype.defineDriver=function(p,g,m){var v=new h(function(E,O){try{var w=p._driver,x=new Error("Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver");if(!p._driver){O(x);return}for(var I=ai.concat("_initStorage"),A=0,F=I.length;A<F;A++){var G=I[A],W=!bd(kr,G);if((W||p[G])&&typeof p[G]!="function"){O(x);return}}var J=function(){for(var or=function(Id){return function(){var Cd=new Error("Method "+Id+" is not implemented by the current driver"),ls=h.reject(Cd);return y(ls,arguments[arguments.length-1]),ls}},ui=0,xd=kr.length;ui<xd;ui++){var ci=kr[ui];p[ci]||(p[ci]=or(ci))}};J();var $=function(or){ir[w]&&console.info("Redefining LocalForage driver: "+w),ir[w]=p,fs[w]=or,E()};"_support"in p?p._support&&typeof p._support=="function"?p._support().then($,O):$(!!p._support):$(!0)}catch(Oe){O(Oe)}});return S(v,g,m),v},f.prototype.driver=function(){return this._driver||null},f.prototype.getDriver=function(p,g,m){var v=ir[p]?h.resolve(ir[p]):h.reject(new Error("Driver not found."));return S(v,g,m),v},f.prototype.getSerializer=function(p){var g=h.resolve(oi);return S(g,p),g},f.prototype.ready=function(p){var g=this,m=g._driverSet.then(function(){return g._ready===null&&(g._ready=g._initDriver()),g._ready});return S(m,p,p),m},f.prototype.setDriver=function(p,g,m){var v=this;cs(p)||(p=[p]);var E=this._getSupportedDrivers(p);function O(){v._config.driver=v.driver()}function w(A){return v._extend(A),O(),v._ready=v._initStorage(v._config),v._ready}function x(A){return function(){var F=0;function G(){for(;F<A.length;){var W=A[F];return F++,v._dbInfo=null,v._ready=null,v.getDriver(W).then(w).catch(G)}O();var J=new Error("No available storage method found.");return v._driverSet=h.reject(J),v._driverSet}return G()}}var I=this._driverSet!==null?this._driverSet.catch(function(){return h.resolve()}):h.resolve();return this._driverSet=I.then(function(){var A=E[0];return v._dbInfo=null,v._ready=null,v.getDriver(A).then(function(F){v._driver=F._driver,O(),v._wrapLibraryMethodsWithReady(),v._initDriver=x(E)})}).catch(function(){O();var A=new Error("No available storage method found.");return v._driverSet=h.reject(A),v._driverSet}),S(this._driverSet,g,m),this._driverSet},f.prototype.supports=function(p){return!!fs[p]},f.prototype._extend=function(p){si(this,p)},f.prototype._getSupportedDrivers=function(p){for(var g=[],m=0,v=p.length;m<v;m++){var E=p[m];this.supports(E)&&g.push(E)}return g},f.prototype._wrapLibraryMethodsWithReady=function(){for(var p=0,g=ai.length;p<g;p++)Td(this,ai[p])},f.prototype.createInstance=function(p){return new f(p)},f}(),wd=new Od;i.exports=wd},{"3":3}]},{},[4])(4)})});var ml=b(Da=>{Object.defineProperty(Da,"__esModule",{value:!0});var Me=N(),Qe=P(),pb=Me.__importDefault(gl()),hb=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this.global=Qe.getGlobalObject(),this.maxStoredEvents=e.maxStoredEvents||30,this.offlineEventStore=pb.default.createInstance({name:"sentry/offlineEventStore"})}return t.prototype.setupOnce=function(e,r){var n=this;this.hub=r(),"addEventListener"in this.global&&this.global.addEventListener("online",function(){n._sendEvents().catch(function(){Qe.logger.warn("could not send cached events")})}),e(function(i){return n.hub&&n.hub.getIntegration(t)&&"navigator"in n.global&&"onLine"in n.global.navigator&&!n.global.navigator.onLine?(n._cacheEvent(i).then(function(o){return n._enforceMaxEvents()}).catch(function(o){Qe.logger.warn("could not cache event while offline")}),null):i}),"navigator"in this.global&&"onLine"in this.global.navigator&&this.global.navigator.onLine&&this._sendEvents().catch(function(){Qe.logger.warn("could not send cached events")})},t.prototype._cacheEvent=function(e){return Me.__awaiter(this,void 0,void 0,function(){return Me.__generator(this,function(r){return[2,this.offlineEventStore.setItem(Qe.uuid4(),Qe.normalize(e))]})})},t.prototype._enforceMaxEvents=function(){return Me.__awaiter(this,void 0,void 0,function(){var e,r=this;return Me.__generator(this,function(n){return e=[],[2,this.offlineEventStore.iterate(function(i,o,a){e.push({cacheKey:o,event:i})}).then(function(){return r._purgeEvents(e.sort(function(i,o){return(o.event.timestamp||0)-(i.event.timestamp||0)}).slice(r.maxStoredEvents<e.length?r.maxStoredEvents:e.length).map(function(i){return i.cacheKey}))}).catch(function(i){Qe.logger.warn("could not enforce max events")})]})})},t.prototype._purgeEvent=function(e){return Me.__awaiter(this,void 0,void 0,function(){return Me.__generator(this,function(r){return[2,this.offlineEventStore.removeItem(e)]})})},t.prototype._purgeEvents=function(e){return Me.__awaiter(this,void 0,void 0,function(){var r=this;return Me.__generator(this,function(n){return[2,Promise.all(e.map(function(i){return r._purgeEvent(i)})).then()]})})},t.prototype._sendEvents=function(){return Me.__awaiter(this,void 0,void 0,function(){var e=this;return Me.__generator(this,function(r){return[2,this.offlineEventStore.iterate(function(n,i,o){e.hub?(e.hub.captureEvent(n),e._purgeEvent(i).catch(function(a){Qe.logger.warn("could not purge event from cache")})):Qe.logger.warn("no hub found - could not send cached event")})]})})},t.id="Offline",t}();Da.Offline=hb});var bl=b(Fa=>{Object.defineProperty(Fa,"__esModule",{value:!0});var _b=N(),yl=P(),vb=function(){function t(e){e===void 0&&(e={types:["crash","deprecation","intervention"]}),this._options=e,this.name=t.id}return t.prototype.setupOnce=function(e,r){if(!!yl.supportsReportingObserver()){this._getCurrentHub=r;var n=new(yl.getGlobalObject()).ReportingObserver(this.handler.bind(this),{buffered:!0,types:this._options.types});n.observe()}},t.prototype.handler=function(e){var r,n,i=this._getCurrentHub&&this._getCurrentHub();if(!(!i||!i.getIntegration(t))){var o=function(c){i.withScope(function(l){l.setExtra("url",c.url);var d="ReportingObserver ["+c.type+"]",h="No details available";if(c.body){var y={};for(var S in c.body)y[S]=c.body[S];if(l.setExtra("body",y),c.type==="crash"){var T=c.body;h=[T.crashId||"",T.reason||""].join(" ").trim()||h}else{var T=c.body;h=T.message||h}}i.captureMessage(d+": "+h)})};try{for(var a=_b.__values(e),s=a.next();!s.done;s=a.next()){var u=s.value;o(u)}}catch(c){r={error:c}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}}},t.id="ReportingObserver",t}();Fa.ReportingObserver=vb});var El=b(ja=>{Object.defineProperty(ja,"__esModule",{value:!0});var Le=N(),Sl=P(),gb=function(){function t(e){var r=this;e===void 0&&(e={}),this.name=t.id,this._prefix="app:///",this._iteratee=function(n){if(!n.filename)return n;var i=/^[A-Z]:\\/.test(n.filename),o=/^\//.test(n.filename);if(i||o){var a=i?n.filename.replace(/^[A-Z]:/,"").replace(/\\/g,"/"):n.filename,s=r._root?Sl.relative(r._root,a):Sl.basename(a);n.filename=""+r._prefix+s}return n},e.root&&(this._root=e.root),e.prefix&&(this._prefix=e.prefix),e.iteratee&&(this._iteratee=e.iteratee)}return t.prototype.setupOnce=function(e,r){e(function(n){var i=r().getIntegration(t);return i?i.process(n):n})},t.prototype.process=function(e){var r=e;return e.exception&&Array.isArray(e.exception.values)&&(r=this._processExceptionsEvent(r)),e.stacktrace&&(r=this._processStacktraceEvent(r)),r},t.prototype._processExceptionsEvent=function(e){var r=this;try{return Le.__assign(Le.__assign({},e),{exception:Le.__assign(Le.__assign({},e.exception),{values:e.exception.values.map(function(n){return Le.__assign(Le.__assign({},n),{stacktrace:r._processStacktrace(n.stacktrace)})})})})}catch{return e}},t.prototype._processStacktraceEvent=function(e){try{return Le.__assign(Le.__assign({},e),{stacktrace:this._processStacktrace(e.stacktrace)})}catch{return e}},t.prototype._processStacktrace=function(e){var r=this;return Le.__assign(Le.__assign({},e),{frames:e&&e.frames&&e.frames.map(function(n){return r._iteratee(n)})})},t.id="RewriteFrames",t}();ja.RewriteFrames=gb});var Tl=b(Ha=>{Object.defineProperty(Ha,"__esModule",{value:!0});var Xn=N(),mb=function(){function t(){this.name=t.id,this._startTime=Date.now()}return t.prototype.setupOnce=function(e,r){e(function(n){var i=r().getIntegration(t);return i?i.process(n):n})},t.prototype.process=function(e){var r,n=Date.now();return Xn.__assign(Xn.__assign({},e),{extra:Xn.__assign(Xn.__assign({},e.extra),(r={},r["session:start"]=this._startTime,r["session:duration"]=n-this._startTime,r["session:end"]=n,r))})},t.id="SessionTiming",t}();Ha.SessionTiming=mb});var Ol=b(La=>{Object.defineProperty(La,"__esModule",{value:!0});var yb=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(e,r){e(function(n){var i=r().getIntegration(t);return i?i.process(n):n})},t.prototype.process=function(e){for(var r=this._getFramesFromEvent(e),n=r.length-1;n>=0;n--){var i=r[n];if(i.in_app===!0){e.transaction=this._getTransaction(i);break}}return e},t.prototype._getFramesFromEvent=function(e){var r=e.exception&&e.exception.values&&e.exception.values[0];return r&&r.stacktrace&&r.stacktrace.frames||[]},t.prototype._getTransaction=function(e){return e.module||e.function?(e.module||"?")+"/"+(e.function||"?"):"<unknown>"},t.id="Transaction",t}();La.Transaction=yb});var Il=b(Zn=>{Object.defineProperty(Zn,"__esModule",{value:!0});var Qn=N(),Ze=P(),Ua={id:"Tracing"},bb={id:"BrowserTracing"},Ba="ui.vue",Sb={activate:["activated","deactivated"],create:["beforeCreate","created"],destroy:["beforeDestroy","destroyed"],mount:["beforeMount","mounted"],update:["beforeUpdate","updated"]},Eb=/(?:^|[-_/])(\w)/g,wl="root",Ga="anonymous component",Tb=function(){function t(e){var r=this;this.name=t.id,this._componentsCache={},this._applyTracingHooks=function(n,i){if(!n.$options.$_sentryPerfHook){n.$options.$_sentryPerfHook=!0;var o=r._getComponentName(n),a=o===wl,s={},u=function(l){var d=Ze.timestampWithMs();r._rootSpan?r._finishRootSpan(d,i):n.$once("hook:"+l,function(){var h=i().getIntegration(Ua);if(h){r._tracingActivity=h.constructor.pushActivity("Vue Application Render");var y=h.constructor.getTransaction();y&&(r._rootSpan=y.startChild({description:"Application Render",op:Ba}))}else{var S=xl(i());S&&(r._rootSpan=S.startChild({description:"Application Render",op:Ba}))}})},c=function(l,d){var h=Array.isArray(r._options.tracingOptions.trackComponents)?r._options.tracingOptions.trackComponents.indexOf(o)>-1:r._options.tracingOptions.trackComponents;if(!(!r._rootSpan||!h)){var y=Ze.timestampWithMs(),S=s[d];S?(S.finish(),r._finishRootSpan(y,i)):n.$once("hook:"+l,function(){r._rootSpan&&(s[d]=r._rootSpan.startChild({description:"Vue <"+o+">",op:Ba+"."+d}))})}};r._options.tracingOptions.hooks.forEach(function(l){var d=Sb[l];if(!d){Ze.logger.warn("Unknown hook: "+l);return}d.forEach(function(h){var y=a?u.bind(r,h):c.bind(r,h,l),S=n.$options[h];Array.isArray(S)?n.$options[h]=Qn.__spread([y],S):typeof S=="function"?n.$options[h]=[y,S]:n.$options[h]=[y]})})}},Ze.logger.log("You are still using the Vue.js integration, consider moving to @sentry/vue"),this._options=Qn.__assign(Qn.__assign({Vue:Ze.getGlobalObject().Vue,attachProps:!0,logErrors:!1,tracing:!1},e),{tracingOptions:Qn.__assign({hooks:["mount","update"],timeout:2e3,trackComponents:!1},e.tracingOptions)})}return t.prototype.setupOnce=function(e,r){if(!this._options.Vue){Ze.logger.error("Vue integration is missing a Vue instance");return}this._attachErrorHandler(r),this._options.tracing&&this._startTracing(r)},t.prototype._getComponentName=function(e){if(!e)return Ga;if(e.$root===e)return wl;if(!e.$options)return Ga;if(e.$options.name)return e.$options.name;if(e.$options._componentTag)return e.$options._componentTag;if(e.$options.__file){var r=e.$options.__file.replace(/^[a-zA-Z]:/,"").replace(/\\/g,"/"),n=Ze.basename(r,".vue");return this._componentsCache[n]||(this._componentsCache[n]=n.replace(Eb,function(i,o){return o?o.toUpperCase():""}))}return Ga},t.prototype._finishRootSpan=function(e,r){var n=this;this._rootSpanTimer&&clearTimeout(this._rootSpanTimer),this._rootSpanTimer=setTimeout(function(){if(n._tracingActivity){var i=r().getIntegration(Ua);i&&i.constructor.popActivity(n._tracingActivity)}n._rootSpan&&n._rootSpan.finish(e)},this._options.tracingOptions.timeout)},t.prototype._startTracing=function(e){var r=this._applyTracingHooks;this._options.Vue.mixin({beforeCreate:function(){e().getIntegration(Ua)||e().getIntegration(bb)?r(this,e):Ze.logger.error("Vue integration has tracing enabled, but Tracing integration is not configured")}})},t.prototype._attachErrorHandler=function(e){var r=this,n=this._options.Vue.config.errorHandler;this._options.Vue.config.errorHandler=function(i,o,a){var s={};if(o)try{s.componentName=r._getComponentName(o),r._options.attachProps&&(s.propsData=o.$options.propsData)}catch{Ze.logger.warn("Unable to extract metadata from Vue component.")}a&&(s.lifecycleHook=a),e().getIntegration(t)&&setTimeout(function(){e().withScope(function(u){u.setContext("vue",s),e().captureException(i)})}),typeof n=="function"&&n.call(r._options.Vue,i,o,a),r._options.logErrors&&(r._options.Vue.util&&r._options.Vue.util.warn("Error in "+a+': "'+(i&&i.toString())+'"',o),console.error(i))}},t.id="Vue",t}();Zn.Vue=Tb;function xl(t){if(t&&t.getScope){var e=t.getScope();if(e)return e.getTransaction()}}Zn.getActiveTransaction=xl});var Cl=b(pe=>{Object.defineProperty(pe,"__esModule",{value:!0});var Ob=fl();pe.Angular=Ob.Angular;var wb=ll();pe.CaptureConsole=wb.CaptureConsole;var xb=dl();pe.Debug=xb.Debug;var Ib=pl();pe.Dedupe=Ib.Dedupe;var Cb=hl();pe.Ember=Cb.Ember;var Rb=_l();pe.ExtraErrorData=Rb.ExtraErrorData;var Ab=ml();pe.Offline=Ab.Offline;var Pb=bl();pe.ReportingObserver=Pb.ReportingObserver;var qb=El();pe.RewriteFrames=qb.RewriteFrames;var Nb=Tl();pe.SessionTiming=Nb.SessionTiming;var Mb=Ol();pe.Transaction=Mb.Transaction;var kb=Il();pe.Vue=kb.Vue});var za=li(gs());function ms(t){if(t.length==2)return t.toUpperCase().replace(/./g,e=>String.fromCodePoint(127397+e.charCodeAt(0)))}var rr=li(ul()),Rl=li(Cl());rr.init({dsn:"https://aec0873e750c49b082fe3594def15af1@o1116132.ingest.sentry.io/6149280",tracesSampleRate:1,integrations:[new Rl.RewriteFrames({root:global.__rootdir__})]});za.default.version("0.1.0").name("country-flag-cli").command("get <flag>").action(t=>{let e=rr.startTransaction({op:"get flag from 2 alpha code",name:"GET flag from 2 alpha code"});try{let r=ms(t);if(r===void 0)throw new Error(`Flag: ${t}
27
+ `)===-1){kr("have not received end of HTTP headers yet..."),o();return}let S=h.toString("ascii",0,h.indexOf(`\r
28
+ `)),T=+S.split(" ")[1];kr("got proxy server response: %o",S),e({statusCode:T,buffered:h})}t.on("error",c),t.on("close",a),t.on("end",u),o()})}Dr.default=cm});var xl=b(kt=>{"use strict";var lm=kt&&kt.__awaiter||function(t,e,r,n){function i(o){return o instanceof r?o:new r(function(s){s(o)})}return new(r||(r=Promise))(function(o,s){function a(l){try{c(n.next(l))}catch(d){s(d)}}function u(l){try{c(n.throw(l))}catch(d){s(d)}}function c(l){l.done?o(l.value):i(l.value).then(a,u)}c((n=n.apply(t,e||[])).next())})},ur=kt&&kt.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(kt,"__esModule",{value:!0});var wl=ur(require("net")),Ol=ur(require("tls")),fm=ur(require("url")),dm=ur(require("assert")),pm=ur($n()),hm=El(),vm=ur(Tl()),Lr=pm.default("https-proxy-agent:agent"),Cl=class extends hm.Agent{constructor(e){let r;if(typeof e=="string"?r=fm.default.parse(e):r=e,!r)throw new Error("an HTTP(S) proxy server `host` and `port` must be specified!");Lr("creating new HttpsProxyAgent instance: %o",r);super(r);let n=Object.assign({},r);this.secureProxy=r.secureProxy||mm(n.protocol),n.host=n.hostname||n.host,typeof n.port=="string"&&(n.port=parseInt(n.port,10)),!n.port&&n.host&&(n.port=this.secureProxy?443:80),this.secureProxy&&!("ALPNProtocols"in n)&&(n.ALPNProtocols=["http 1.1"]),n.host&&n.path&&(delete n.path,delete n.pathname),this.proxy=n}callback(e,r){return lm(this,void 0,void 0,function*(){let{proxy:n,secureProxy:i}=this,o;i?(Lr("Creating `tls.Socket`: %o",n),o=Ol.default.connect(n)):(Lr("Creating `net.Socket`: %o",n),o=wl.default.connect(n));let s=Object.assign({},n.headers),u=`CONNECT ${`${r.host}:${r.port}`} HTTP/1.1\r
29
+ `;n.auth&&(s["Proxy-Authorization"]=`Basic ${Buffer.from(n.auth).toString("base64")}`);let{host:c,port:l,secureEndpoint:d}=r;gm(l,d)||(c+=`:${l}`),s.Host=c,s.Connection="close";for(let R of Object.keys(s))u+=`${R}: ${s[R]}\r
30
+ `;let h=vm.default(o);o.write(`${u}\r
31
+ `);let{statusCode:_,buffered:S}=yield h;if(_===200){if(e.once("socket",_m),r.secureEndpoint){let R=r.servername||r.host;if(!R)throw new Error('Could not determine "servername"');return Lr("Upgrading socket connection to TLS"),Ol.default.connect(Object.assign(Object.assign({},ym(r,"host","hostname","path","port")),{socket:o,servername:R}))}return o}o.destroy();let T=new wl.default.Socket;return T.readable=!0,e.once("socket",R=>{Lr("replaying proxy buffer for failed request"),dm.default(R.listenerCount("data")>0),R.push(S),R.push(null)}),T})}};kt.default=Cl;function _m(t){t.resume()}function gm(t,e){return Boolean(!e&&t===80||e&&t===443)}function mm(t){return typeof t=="string"?/^https:?$/i.test(t):!1}function ym(t,...e){let r={},n;for(n in t)e.includes(n)||(r[n]=t[n]);return r}});var is=b((ns,Rl)=>{"use strict";var bm=ns&&ns.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},ts=bm(xl());function rs(t){return new ts.default(t)}(function(t){t.HttpsProxyAgent=ts.default,t.prototype=ts.default.prototype})(rs||(rs={}));Rl.exports=rs});var Ml=b(os=>{Object.defineProperty(os,"__esModule",{value:!0});var Sm=q(),Il=ae(),Al=require("http"),Em=Bn(),Tm=function(t){Sm.__extends(e,t);function e(r){var n=t.call(this,r)||this;n.options=r;var i=n._getProxy("http");return n.module=Al,n.client=i?new(is())(i):new Al.Agent({keepAlive:!1,maxSockets:30,timeout:2e3}),n}return e.prototype.sendEvent=function(r){return this._send(Il.eventToSentryRequest(r,this._api),r)},e.prototype.sendSession=function(r){return this._send(Il.sessionToSentryRequest(r,this._api),r)},e}(Em.BaseTransport);os.HTTPTransport=Tm});var ql=b(ss=>{Object.defineProperty(ss,"__esModule",{value:!0});var wm=q(),Pl=ae(),Nl=require("https"),Om=Bn(),Cm=function(t){wm.__extends(e,t);function e(r){var n=t.call(this,r)||this;n.options=r;var i=n._getProxy("https");return n.module=Nl,n.client=i?new(is())(i):new Nl.Agent({keepAlive:!1,maxSockets:30,timeout:2e3}),n}return e.prototype.sendEvent=function(r){return this._send(Pl.eventToSentryRequest(r,this._api),r)},e.prototype.sendSession=function(r){return this._send(Pl.sessionToSentryRequest(r,this._api),r)},e}(Om.BaseTransport);ss.HTTPSTransport=Cm});var as=b(Fr=>{Object.defineProperty(Fr,"__esModule",{value:!0});var xm=Bn();Fr.BaseTransport=xm.BaseTransport;var Rm=Ml();Fr.HTTPTransport=Rm.HTTPTransport;var Im=ql();Fr.HTTPSTransport=Im.HTTPSTransport});var cs=b(us=>{Object.defineProperty(us,"__esModule",{value:!0});var gt=q(),kl=ae(),Am=se(),nt=N(),Kn=Go(),Dl=as(),Mm=function(t){gt.__extends(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.eventFromException=function(r,n){var i=this,o=r,s=n&&n.data&&n.data.mechanism,a=s||{handled:!0,type:"generic"};if(!nt.isError(r)){if(nt.isPlainObject(r)){var u="Non-Error exception captured with keys: "+nt.extractExceptionKeysForMessage(r);kl.getCurrentHub().configureScope(function(c){c.setExtra("__serialized__",nt.normalizeToSize(r))}),o=n&&n.syntheticException||new Error(u),o.message=u}else o=n&&n.syntheticException||new Error(r),o.message=r;a.synthetic=!0}return new nt.SyncPromise(function(c,l){return Kn.parseError(o,i._options).then(function(d){nt.addExceptionTypeValue(d,void 0,void 0),nt.addExceptionMechanism(d,a),c(gt.__assign(gt.__assign({},d),{event_id:n&&n.event_id}))}).then(null,l)})},e.prototype.eventFromMessage=function(r,n,i){var o=this;n===void 0&&(n=Am.Severity.Info);var s={event_id:i&&i.event_id,level:n,message:r};return new nt.SyncPromise(function(a){if(o._options.attachStacktrace&&i&&i.syntheticException){var u=i.syntheticException?Kn.extractStackFromError(i.syntheticException):[];Kn.parseStack(u,o._options).then(function(c){s.stacktrace={frames:Kn.prepareFramesForEvent(c)},a(s)}).then(null,function(){a(s)})}else a(s)})},e.prototype._setupTransport=function(){if(!this._options.dsn)return t.prototype._setupTransport.call(this);var r=new nt.Dsn(this._options.dsn),n=gt.__assign(gt.__assign(gt.__assign(gt.__assign(gt.__assign({},this._options.transportOptions),this._options.httpProxy&&{httpProxy:this._options.httpProxy}),this._options.httpsProxy&&{httpsProxy:this._options.httpsProxy}),this._options.caCerts&&{caCerts:this._options.caCerts}),{dsn:this._options.dsn,tunnel:this._options.tunnel,_metadata:this._options._metadata});return this._options.transport?new this._options.transport(n):r.protocol==="http"?new Dl.HTTPTransport(n):new Dl.HTTPSTransport(n)},e}(kl.BaseBackend);us.NodeBackend=Mm});var ds=b(fs=>{Object.defineProperty(fs,"__esModule",{value:!0});var Pm=q(),ls=ae(),Nm=Ee(),Jn=se(),Ll=N(),qm=cs(),km=function(t){Pm.__extends(e,t);function e(r){var n=this;return r._metadata=r._metadata||{},r._metadata.sdk=r._metadata.sdk||{name:"sentry.javascript.node",packages:[{name:"npm:@sentry/node",version:ls.SDK_VERSION}],version:ls.SDK_VERSION},n=t.call(this,qm.NodeBackend,r)||this,n}return e.prototype.captureException=function(r,n,i){if(this._options.autoSessionTracking&&this._sessionFlusher&&i){var o=i.getRequestSession();o&&o.status===Jn.RequestSessionStatus.Ok&&(o.status=Jn.RequestSessionStatus.Errored)}return t.prototype.captureException.call(this,r,n,i)},e.prototype.captureEvent=function(r,n,i){if(this._options.autoSessionTracking&&this._sessionFlusher&&i){var o=r.type||"exception",s=o==="exception"&&r.exception&&r.exception.values&&r.exception.values.length>0;if(s){var a=i.getRequestSession();a&&a.status===Jn.RequestSessionStatus.Ok&&(a.status=Jn.RequestSessionStatus.Errored)}}return t.prototype.captureEvent.call(this,r,n,i)},e.prototype.close=function(r){var n;return(n=this._sessionFlusher)===null||n===void 0||n.close(),t.prototype.close.call(this,r)},e.prototype.initSessionFlusher=function(){var r=this._options,n=r.release,i=r.environment;n?this._sessionFlusher=new Nm.SessionFlusher(this.getTransport(),{release:n,environment:i}):Ll.logger.warn("Cannot initialise an instance of SessionFlusher if no release is provided!")},e.prototype._prepareEvent=function(r,n,i){return r.platform=r.platform||"node",this.getOptions().serverName&&(r.server_name=this.getOptions().serverName),t.prototype._prepareEvent.call(this,r,n,i)},e.prototype._captureRequestSession=function(){this._sessionFlusher?this._sessionFlusher.incrementSessionStatusCount():Ll.logger.warn("Discarded request mode session because autoSessionTracking option was disabled")},e}(ls.BaseClient);fs.NodeClient=km});var Hl=b(ps=>{Object.defineProperty(ps,"__esModule",{value:!0});var Fl=q(),jl=ae(),jr=se(),Dm=N(),Lm=require("util"),Ul=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(){var e,r;try{for(var n=Fl.__values(["debug","info","warn","error","log"]),i=n.next();!i.done;i=n.next()){var o=i.value;Dm.fill(console,o,Fm(o))}}catch(s){e={error:s}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}},t.id="Console",t}();ps.Console=Ul;function Fm(t){return function(r){var n;switch(t){case"debug":n=jr.Severity.Debug;break;case"error":n=jr.Severity.Error;break;case"info":n=jr.Severity.Info;break;case"warn":n=jr.Severity.Warning;break;default:n=jr.Severity.Log}return function(){jl.getCurrentHub().getIntegration(Ul)&&jl.getCurrentHub().addBreadcrumb({category:"console",level:n,message:Lm.format.apply(void 0,arguments)},{input:Fl.__spread(arguments),level:t}),r.apply(this,arguments)}}}});var Vl=b(Dt=>{Object.defineProperty(Dt,"__esModule",{value:!0});var hs=q(),jm=ae(),Um=N(),Bl=require("url"),Gl=Um.parseSemver(process.versions.node);function Hm(t){var e,r=(e=jm.getCurrentHub().getClient())===null||e===void 0?void 0:e.getDsn();return r?t.includes(r.host):!1}Dt.isSentryRequest=Hm;function zl(t){var e=t.protocol||"",r=t.hostname||t.host||"",n=!t.port||t.port===80||t.port===443?"":":"+t.port,i=t.path?t.path:"/";return e+"//"+r+n+i}Dt.extractUrl=zl;function Bm(t,e,r){var n,i,o;if(!t)return t;var s=hs.__read(t.split(" "),2),a=s[0],u=s[1];return e.host&&!e.protocol&&(e.protocol=(i=(n=r)===null||n===void 0?void 0:n.agent)===null||i===void 0?void 0:i.protocol,u=zl(e)),((o=u)===null||o===void 0?void 0:o.startsWith("///"))&&(u=u.slice(2)),a+" "+u}Dt.cleanSpanDescription=Bm;function vs(t){var e={protocol:t.protocol,hostname:typeof t.hostname=="string"&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,hash:t.hash,search:t.search,pathname:t.pathname,path:""+(t.pathname||"")+(t.search||""),href:t.href};return t.port!==""&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=t.username+":"+t.password),e}Dt.urlToOptions=vs;function Gm(t,e){var r,n,i,o,s,a,u,c,l,d;return typeof e[e.length-1]=="function"&&(l=e.pop()),typeof e[0]=="string"?d=vs(new Bl.URL(e[0])):e[0]instanceof Bl.URL?d=vs(e[0]):d=e[0],e.length===2&&(d=hs.__assign(hs.__assign({},d),e[1])),d.protocol===void 0&&(Gl.major&&Gl.major>8?d.protocol=((n=(r=t)===null||r===void 0?void 0:r.globalAgent)===null||n===void 0?void 0:n.protocol)||((i=d.agent)===null||i===void 0?void 0:i.protocol)||((o=d._defaultAgent)===null||o===void 0?void 0:o.protocol):d.protocol=((s=d.agent)===null||s===void 0?void 0:s.protocol)||((a=d._defaultAgent)===null||a===void 0?void 0:a.protocol)||((c=(u=t)===null||u===void 0?void 0:u.globalAgent)===null||c===void 0?void 0:c.protocol)),l?[d,l]:[d]}Dt.normalizeRequestArgs=Gm});var Jl=b(gs=>{Object.defineProperty(gs,"__esModule",{value:!0});var Wl=q(),_s=ae(),cr=N(),Ur=Vl(),$l=cr.parseSemver(process.versions.node),Yl=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._breadcrumbs=typeof e.breadcrumbs=="undefined"?!0:e.breadcrumbs,this._tracing=typeof e.tracing=="undefined"?!1:e.tracing}return t.prototype.setupOnce=function(){if(!(!this._breadcrumbs&&!this._tracing)){var e=zm(this._breadcrumbs,this._tracing),r=require("http");if(cr.fill(r,"get",e),cr.fill(r,"request",e),$l.major&&$l.major>8){var n=require("https");cr.fill(n,"get",e),cr.fill(n,"request",e)}}},t.id="Http",t}();gs.Http=Yl;function zm(t,e){return function(n){return function(){for(var o=[],s=0;s<arguments.length;s++)o[s]=arguments[s];var a=this,u=Ur.normalizeRequestArgs(this,o),c=u[0],l=Ur.extractUrl(c);if(Ur.isSentryRequest(l))return n.apply(a,u);var d,h,_=_s.getCurrentHub().getScope();if(_&&e&&(h=_.getSpan(),h)){d=h.startChild({description:(c.method||"GET")+" "+l,op:"http.client"});var S=d.toTraceparent();cr.logger.log("[Tracing] Adding sentry-trace header "+S+" to outgoing request to "+l+": "),c.headers=Wl.__assign(Wl.__assign({},c.headers),{"sentry-trace":S})}return n.apply(a,u).once("response",function(T){var R=this;t&&Kl("response",l,R,T),e&&d&&(T.statusCode&&d.setHttpStatus(T.statusCode),d.description=Ur.cleanSpanDescription(d.description,c,R),d.finish())}).once("error",function(){var T=this;t&&Kl("error",l,T),e&&d&&(d.setHttpStatus(500),d.description=Ur.cleanSpanDescription(d.description,c,T),d.finish())})}}}function Kl(t,e,r,n){!_s.getCurrentHub().getIntegration(Yl)||_s.getCurrentHub().addBreadcrumb({category:"http",data:{method:r.method,status_code:n&&n.statusCode,url:e},type:"http"},{event:t,request:r,response:n})}});var bs=b(ys=>{Object.defineProperty(ys,"__esModule",{value:!0});var Vm=ae(),ms=N(),Wm=2e3;function $m(t){console.error(t&&t.stack?t.stack:t);var e=Vm.getCurrentHub().getClient();if(e===void 0){ms.logger.warn("No NodeClient was defined, we are exiting the process now."),global.process.exit(1);return}var r=e.getOptions(),n=r&&r.shutdownTimeout&&r.shutdownTimeout>0&&r.shutdownTimeout||Wm;ms.forget(e.close(n).then(function(i){i||ms.logger.warn("We reached the timeout for emptying the request buffer, still exiting now!"),global.process.exit(1)}))}ys.logAndExitProcess=$m});var Zl=b(Ss=>{Object.defineProperty(Ss,"__esModule",{value:!0});var Xl=ae(),Ym=se(),Km=N(),Ql=bs(),Jm=function(){function t(e){e===void 0&&(e={}),this._options=e,this.name=t.id,this.handler=this._makeErrorHandler()}return t.prototype.setupOnce=function(){global.process.on("uncaughtException",this.handler.bind(this))},t.prototype._makeErrorHandler=function(){var e=this,r=2e3,n=!1,i=!1,o=!1,s;return function(a){var u=Ql.logAndExitProcess,c=Xl.getCurrentHub().getClient();if(e._options.onFatalError?u=e._options.onFatalError:c&&c.getOptions().onFatalError&&(u=c.getOptions().onFatalError),n)o?(Km.logger.warn("uncaught exception after calling fatal error shutdown callback - this is bad! forcing shutdown"),Ql.logAndExitProcess(a)):i||(i=!0,setTimeout(function(){o||(o=!0,u(s,a))},r));else{var l=Xl.getCurrentHub();s=a,n=!0,l.getIntegration(t)?l.withScope(function(d){d.setLevel(Ym.Severity.Fatal),l.captureException(a,{originalException:a,data:{mechanism:{handled:!1,type:"onuncaughtexception"}}}),o||(o=!0,u(a))}):o||(o=!0,u(a))}}},t.id="OnUncaughtException",t}();Ss.OnUncaughtException=Jm});var tf=b(Es=>{Object.defineProperty(Es,"__esModule",{value:!0});var Xm=ae(),ef=N(),Qm=bs(),Zm=function(){function t(e){e===void 0&&(e={mode:"warn"}),this._options=e,this.name=t.id}return t.prototype.setupOnce=function(){global.process.on("unhandledRejection",this.sendUnhandledPromise.bind(this))},t.prototype.sendUnhandledPromise=function(e,r){var n=Xm.getCurrentHub();if(!n.getIntegration(t)){this._handleRejection(e);return}var i=r.domain&&r.domain.sentryContext||{};n.withScope(function(o){o.setExtra("unhandledPromiseRejection",!0),i.user&&o.setUser(i.user),i.tags&&o.setTags(i.tags),i.extra&&o.setExtras(i.extra),n.captureException(e,{originalException:r,data:{mechanism:{handled:!1,type:"onunhandledrejection"}}})}),this._handleRejection(e)},t.prototype._handleRejection=function(e){var r="This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason:";this._options.mode==="warn"?ef.consoleSandbox(function(){console.warn(r),console.error(e&&e.stack?e.stack:e)}):this._options.mode==="strict"&&(ef.consoleSandbox(function(){console.warn(r)}),Qm.logAndExitProcess(e))},t.id="OnUnhandledRejection",t}();Es.OnUnhandledRejection=Zm});var of=b(Ts=>{Object.defineProperty(Ts,"__esModule",{value:!0});var rf=q(),nf=ae(),lr=N(),ey=Go(),ty="cause",ry=5,ny=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._key=e.key||ty,this._limit=e.limit||ry}return t.prototype.setupOnce=function(){nf.addGlobalEventProcessor(function(e,r){var n=nf.getCurrentHub().getIntegration(t);if(n){var i=n._handler&&n._handler.bind(n);return typeof i=="function"?i(e,r):e}return e})},t.prototype._handler=function(e,r){var n=this;return!e.exception||!e.exception.values||!r||!lr.isInstanceOf(r.originalException,Error)?lr.SyncPromise.resolve(e):new lr.SyncPromise(function(i){n._walkErrorTree(r.originalException,n._key).then(function(o){e&&e.exception&&e.exception.values&&(e.exception.values=rf.__spread(o,e.exception.values)),i(e)}).then(null,function(){i(e)})})},t.prototype._walkErrorTree=function(e,r,n){var i=this;return n===void 0&&(n=[]),!lr.isInstanceOf(e[r],Error)||n.length+1>=this._limit?lr.SyncPromise.resolve(n):new lr.SyncPromise(function(o,s){ey.getExceptionFromError(e[r]).then(function(a){i._walkErrorTree(e[r],r,rf.__spread([a],n)).then(o).then(null,function(){s()})}).then(null,function(){s()})})},t.id="LinkedErrors",t}();Ts.LinkedErrors=ny});var cf=b(Os=>{Object.defineProperty(Os,"__esModule",{value:!0});var sf=q(),af=require("fs"),uf=require("path"),ws;function iy(){try{return require.cache?Object.keys(require.cache):[]}catch{return[]}}function oy(){var t=require.main&&require.main.paths||[],e=iy(),r={},n={};return e.forEach(function(i){var o=i,s=function(){var a=o;if(o=uf.dirname(a),!(!o||a===o||n[a])){if(t.indexOf(o)<0)return s();var u=uf.join(a,"package.json");if(n[a]=!0,!af.existsSync(u))return s();try{var c=JSON.parse(af.readFileSync(u,"utf8"));r[c.name]=c.version}catch{}}};s()}),r}var sy=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(e,r){var n=this;e(function(i){return r().getIntegration(t)?sf.__assign(sf.__assign({},i),{modules:n._getModules()}):i})},t.prototype._getModules=function(){return ws||(ws=oy()),ws},t.id="Modules",t}();Os.Modules=sy});var Cs=b(mt=>{Object.defineProperty(mt,"__esModule",{value:!0});var ay=Hl();mt.Console=ay.Console;var uy=Jl();mt.Http=uy.Http;var cy=Zl();mt.OnUncaughtException=cy.OnUncaughtException;var ly=tf();mt.OnUnhandledRejection=ly.OnUnhandledRejection;var fy=of();mt.LinkedErrors=fy.LinkedErrors;var dy=cf();mt.Modules=dy.Modules});var Rs=b(Ve=>{Object.defineProperty(Ve,"__esModule",{value:!0});var Hr=q(),yt=ae(),lf=Ee(),ff=se(),xs=N(),py=require("domain"),hy=ds(),Br=Cs();Ve.defaultIntegrations=[new yt.Integrations.InboundFilters,new yt.Integrations.FunctionToString,new Br.Console,new Br.Http,new Br.OnUncaughtException,new Br.OnUnhandledRejection,new Br.LinkedErrors];function vy(t){t===void 0&&(t={});var e,r=lf.getMainCarrier(),n=((e=r.__SENTRY__)===null||e===void 0?void 0:e.integrations)||[];if(t.defaultIntegrations=t.defaultIntegrations===!1?[]:Hr.__spread(Array.isArray(t.defaultIntegrations)?t.defaultIntegrations:Ve.defaultIntegrations,n),t.dsn===void 0&&process.env.SENTRY_DSN&&(t.dsn=process.env.SENTRY_DSN),t.tracesSampleRate===void 0&&process.env.SENTRY_TRACES_SAMPLE_RATE){var i=parseFloat(process.env.SENTRY_TRACES_SAMPLE_RATE);isFinite(i)&&(t.tracesSampleRate=i)}if(t.release===void 0){var o=df();o!==void 0?t.release=o:t.autoSessionTracking=!1}t.environment===void 0&&process.env.SENTRY_ENVIRONMENT&&(t.environment=process.env.SENTRY_ENVIRONMENT),t.autoSessionTracking===void 0&&t.dsn!==void 0&&(t.autoSessionTracking=!0),py.active&&lf.setHubOnCarrier(r,yt.getCurrentHub()),yt.initAndBind(hy.NodeClient,t),t.autoSessionTracking&&by()}Ve.init=vy;function _y(){return yt.getCurrentHub().lastEventId()}Ve.lastEventId=_y;function gy(t){return Hr.__awaiter(this,void 0,void 0,function(){var e;return Hr.__generator(this,function(r){return e=yt.getCurrentHub().getClient(),e?[2,e.flush(t)]:(xs.logger.warn("Cannot flush events. No client defined."),[2,Promise.resolve(!1)])})})}Ve.flush=gy;function my(t){return Hr.__awaiter(this,void 0,void 0,function(){var e;return Hr.__generator(this,function(r){return e=yt.getCurrentHub().getClient(),e?[2,e.close(t)]:(xs.logger.warn("Cannot flush events and disable SDK. No client defined."),[2,Promise.resolve(!1)])})})}Ve.close=my;function yy(t){if(t===void 0)return!1;var e=t&&t.getOptions();return e&&e.autoSessionTracking!==void 0?e.autoSessionTracking:!1}Ve.isAutoSessionTrackingEnabled=yy;function df(t){if(process.env.SENTRY_RELEASE)return process.env.SENTRY_RELEASE;var e=xs.getGlobalObject();return e.SENTRY_RELEASE&&e.SENTRY_RELEASE.id?e.SENTRY_RELEASE.id:process.env.GITHUB_SHA||process.env.COMMIT_REF||process.env.VERCEL_GIT_COMMIT_SHA||process.env.VERCEL_GITHUB_COMMIT_SHA||process.env.VERCEL_GITLAB_COMMIT_SHA||process.env.VERCEL_BITBUCKET_COMMIT_SHA||process.env.ZEIT_GITHUB_COMMIT_SHA||process.env.ZEIT_GITLAB_COMMIT_SHA||process.env.ZEIT_BITBUCKET_COMMIT_SHA||t}Ve.getSentryRelease=df;function by(){var t=yt.getCurrentHub();t.startSession(),process.on("beforeExit",function(){var e,r=(e=t.getScope())===null||e===void 0?void 0:e.getSession(),n=[ff.SessionStatus.Exited,ff.SessionStatus.Crashed];r&&!n.includes(r.status)&&t.endSession()})}});var hf=b(As=>{Object.defineProperty(As,"__esModule",{value:!0});var pf=q(),Xn=require("fs"),Is=require("path");function Sy(t){var e=Is.resolve(t);if(!Xn.existsSync(e))throw new Error("Cannot read contents of "+e+". Directory does not exist.");if(!Xn.statSync(e).isDirectory())throw new Error("Cannot read contents of "+e+", because it is not a directory.");var r=function(n){return Xn.readdirSync(n).reduce(function(i,o){var s=Is.join(n,o);return Xn.statSync(s).isDirectory()?pf.__spread(i,r(s)):pf.__spread(i,[s])},[])};return r(e).map(function(n){return Is.relative(e,n)})}As.deepReadDirSync=Sy});var bt=b(fr=>{Object.defineProperty(fr,"__esModule",{value:!0});var vf;(function(t){t.Ok="ok",t.DeadlineExceeded="deadline_exceeded",t.Unauthenticated="unauthenticated",t.PermissionDenied="permission_denied",t.NotFound="not_found",t.ResourceExhausted="resource_exhausted",t.InvalidArgument="invalid_argument",t.Unimplemented="unimplemented",t.Unavailable="unavailable",t.InternalError="internal_error",t.UnknownError="unknown_error",t.Cancelled="cancelled",t.AlreadyExists="already_exists",t.FailedPrecondition="failed_precondition",t.Aborted="aborted",t.OutOfRange="out_of_range",t.DataLoss="data_loss"})(vf=fr.SpanStatus||(fr.SpanStatus={}));(function(t){function e(r){if(r<400&&r>=100)return t.Ok;if(r>=400&&r<500)switch(r){case 401:return t.Unauthenticated;case 403:return t.PermissionDenied;case 404:return t.NotFound;case 409:return t.AlreadyExists;case 413:return t.FailedPrecondition;case 429:return t.ResourceExhausted;default:return t.InvalidArgument}if(r>=500&&r<600)switch(r){case 501:return t.Unimplemented;case 503:return t.Unavailable;case 504:return t.DeadlineExceeded;default:return t.InternalError}return t.UnknownError}t.fromHttpCode=e})(vf=fr.SpanStatus||(fr.SpanStatus={}))});var St=b(We=>{Object.defineProperty(We,"__esModule",{value:!0});var _f=Ee();We.TRACEPARENT_REGEXP=new RegExp("^[ \\t]*([0-9a-f]{32})?-?([0-9a-f]{16})?-?([01])?[ \\t]*$");function Ey(t){t===void 0&&(t=(e=_f.getCurrentHub().getClient())===null||e===void 0?void 0:e.getOptions());var e;return!!t&&("tracesSampleRate"in t||"tracesSampler"in t)}We.hasTracingEnabled=Ey;function Ty(t){var e=t.match(We.TRACEPARENT_REGEXP);if(e){var r=void 0;return e[3]==="1"?r=!0:e[3]==="0"&&(r=!1),{traceId:e[1],parentSampled:r,parentSpanId:e[2]}}}We.extractTraceparentData=Ty;function wy(t){t===void 0&&(t=_f.getCurrentHub());var e,r;return(r=(e=t)===null||e===void 0?void 0:e.getScope())===null||r===void 0?void 0:r.getTransaction()}We.getActiveTransaction=wy;function Oy(t){return t/1e3}We.msToSec=Oy;function Cy(t){return t*1e3}We.secToMs=Cy;var xy=N();We.stripUrlQueryAndFragment=xy.stripUrlQueryAndFragment});var yf=b(Ps=>{Object.defineProperty(Ps,"__esModule",{value:!0});var Ms=N(),gf=bt(),Ry=St();function Iy(){Ms.addInstrumentationHandler({callback:mf,type:"error"}),Ms.addInstrumentationHandler({callback:mf,type:"unhandledrejection"})}Ps.registerErrorInstrumentation=Iy;function mf(){var t=Ry.getActiveTransaction();t&&(Ms.logger.log("[Tracing] Transaction: "+gf.SpanStatus.InternalError+" -> Global error occured"),t.setStatus(gf.SpanStatus.InternalError))}});var Ns=b(Qn=>{Object.defineProperty(Qn,"__esModule",{value:!0});Qn.FINISH_REASON_TAG="finishReason";Qn.IDLE_TRANSACTION_FINISH_REASONS=["heartbeatFailed","idleTimeout","documentHidden"]});var ei=b(Zn=>{Object.defineProperty(Zn,"__esModule",{value:!0});var dr=q(),Lt=N(),qs=bt(),Ay=function(){function t(e){e===void 0&&(e=1e3),this.spans=[],this._maxlen=e}return t.prototype.add=function(e){this.spans.length>this._maxlen?e.spanRecorder=void 0:this.spans.push(e)},t}();Zn.SpanRecorder=Ay;var My=function(){function t(e){if(this.traceId=Lt.uuid4(),this.spanId=Lt.uuid4().substring(16),this.startTimestamp=Lt.timestampWithMs(),this.tags={},this.data={},!e)return this;e.traceId&&(this.traceId=e.traceId),e.spanId&&(this.spanId=e.spanId),e.parentSpanId&&(this.parentSpanId=e.parentSpanId),"sampled"in e&&(this.sampled=e.sampled),e.op&&(this.op=e.op),e.description&&(this.description=e.description),e.data&&(this.data=e.data),e.tags&&(this.tags=e.tags),e.status&&(this.status=e.status),e.startTimestamp&&(this.startTimestamp=e.startTimestamp),e.endTimestamp&&(this.endTimestamp=e.endTimestamp)}return t.prototype.child=function(e){return this.startChild(e)},t.prototype.startChild=function(e){var r=new t(dr.__assign(dr.__assign({},e),{parentSpanId:this.spanId,sampled:this.sampled,traceId:this.traceId}));return r.spanRecorder=this.spanRecorder,r.spanRecorder&&r.spanRecorder.add(r),r.transaction=this.transaction,r},t.prototype.setTag=function(e,r){var n;return this.tags=dr.__assign(dr.__assign({},this.tags),(n={},n[e]=r,n)),this},t.prototype.setData=function(e,r){var n;return this.data=dr.__assign(dr.__assign({},this.data),(n={},n[e]=r,n)),this},t.prototype.setStatus=function(e){return this.status=e,this},t.prototype.setHttpStatus=function(e){this.setTag("http.status_code",String(e));var r=qs.SpanStatus.fromHttpCode(e);return r!==qs.SpanStatus.UnknownError&&this.setStatus(r),this},t.prototype.isSuccess=function(){return this.status===qs.SpanStatus.Ok},t.prototype.finish=function(e){this.endTimestamp=typeof e=="number"?e:Lt.timestampWithMs()},t.prototype.toTraceparent=function(){var e="";return this.sampled!==void 0&&(e=this.sampled?"-1":"-0"),this.traceId+"-"+this.spanId+e},t.prototype.toContext=function(){return Lt.dropUndefinedKeys({data:this.data,description:this.description,endTimestamp:this.endTimestamp,op:this.op,parentSpanId:this.parentSpanId,sampled:this.sampled,spanId:this.spanId,startTimestamp:this.startTimestamp,status:this.status,tags:this.tags,traceId:this.traceId})},t.prototype.updateWithContext=function(e){var r,n,i,o,s;return this.data=(r=e.data,r??{}),this.description=e.description,this.endTimestamp=e.endTimestamp,this.op=e.op,this.parentSpanId=e.parentSpanId,this.sampled=e.sampled,this.spanId=(n=e.spanId,n??this.spanId),this.startTimestamp=(i=e.startTimestamp,i??this.startTimestamp),this.status=e.status,this.tags=(o=e.tags,o??{}),this.traceId=(s=e.traceId,s??this.traceId),this},t.prototype.getTraceContext=function(){return Lt.dropUndefinedKeys({data:Object.keys(this.data).length>0?this.data:void 0,description:this.description,op:this.op,parent_span_id:this.parentSpanId,span_id:this.spanId,status:this.status,tags:Object.keys(this.tags).length>0?this.tags:void 0,trace_id:this.traceId})},t.prototype.toJSON=function(){return Lt.dropUndefinedKeys({data:Object.keys(this.data).length>0?this.data:void 0,description:this.description,op:this.op,parent_span_id:this.parentSpanId,span_id:this.spanId,start_timestamp:this.startTimestamp,status:this.status,tags:Object.keys(this.tags).length>0?this.tags:void 0,timestamp:this.endTimestamp,trace_id:this.traceId})},t}();Zn.Span=My});var ti=b(ks=>{Object.defineProperty(ks,"__esModule",{value:!0});var pr=q(),bf=Ee(),Py=se(),hr=N(),Sf=ei(),Ny=function(t){pr.__extends(e,t);function e(r,n){var i=t.call(this,r)||this;return i._measurements={},i._hub=bf.getCurrentHub(),hr.isInstanceOf(n,bf.Hub)&&(i._hub=n),i.name=r.name||"",i.metadata=r.metadata||{},i._trimEnd=r.trimEnd,i.transaction=i,i}return e.prototype.setName=function(r){this.name=r},e.prototype.initSpanRecorder=function(r){r===void 0&&(r=1e3),this.spanRecorder||(this.spanRecorder=new Sf.SpanRecorder(r)),this.spanRecorder.add(this)},e.prototype.setMeasurements=function(r){this._measurements=pr.__assign({},r)},e.prototype.setMetadata=function(r){this.metadata=pr.__assign(pr.__assign({},this.metadata),r)},e.prototype.finish=function(r){var n=this,i,o,s,a,u;if(this.endTimestamp===void 0){if(this.name||(hr.logger.warn("Transaction has no name, falling back to `<unlabeled transaction>`."),this.name="<unlabeled transaction>"),t.prototype.finish.call(this,r),this.sampled!==!0){hr.logger.log("[Tracing] Discarding transaction because its trace was not chosen to be sampled."),(u=(s=(i=this._hub.getClient())===null||i===void 0?void 0:(o=i).getTransport)===null||s===void 0?void 0:(a=s.call(o)).recordLostEvent)===null||u===void 0||u.call(a,Py.Outcome.SampleRate,"transaction");return}var c=this.spanRecorder?this.spanRecorder.spans.filter(function(h){return h!==n&&h.endTimestamp}):[];this._trimEnd&&c.length>0&&(this.endTimestamp=c.reduce(function(h,_){return h.endTimestamp&&_.endTimestamp?h.endTimestamp>_.endTimestamp?h:_:h}).endTimestamp);var l={contexts:{trace:this.getTraceContext()},spans:c,start_timestamp:this.startTimestamp,tags:this.tags,timestamp:this.endTimestamp,transaction:this.name,type:"transaction",debug_meta:this.metadata},d=Object.keys(this._measurements).length>0;return d&&(hr.logger.log("[Measurements] Adding measurements to transaction",JSON.stringify(this._measurements,void 0,2)),l.measurements=this._measurements),hr.logger.log("[Tracing] Finishing "+this.op+" transaction: "+this.name+"."),this._hub.captureEvent(l)}},e.prototype.toContext=function(){var r=t.prototype.toContext.call(this);return hr.dropUndefinedKeys(pr.__assign(pr.__assign({},r),{name:this.name,trimEnd:this._trimEnd}))},e.prototype.updateWithContext=function(r){var n;return t.prototype.updateWithContext.call(this,r),this.name=(n=r.name,n??""),this._trimEnd=r.trimEnd,this},e}(Sf.Span);ks.Transaction=Ny});var ni=b(Et=>{Object.defineProperty(Et,"__esModule",{value:!0});var Ds=q(),de=N(),ri=Ns(),qy=ei(),Ef=bt(),ky=ti();Et.DEFAULT_IDLE_TIMEOUT=1e3;Et.HEARTBEAT_INTERVAL=5e3;var Tf=function(t){Ds.__extends(e,t);function e(r,n,i,o){i===void 0&&(i="");var s=t.call(this,o)||this;return s._pushActivity=r,s._popActivity=n,s.transactionSpanId=i,s}return e.prototype.add=function(r){var n=this;r.spanId!==this.transactionSpanId&&(r.finish=function(i){r.endTimestamp=typeof i=="number"?i:de.timestampWithMs(),n._popActivity(r.spanId)},r.endTimestamp===void 0&&this._pushActivity(r.spanId)),t.prototype.add.call(this,r)},e}(qy.SpanRecorder);Et.IdleTransactionSpanRecorder=Tf;var Dy=function(t){Ds.__extends(e,t);function e(r,n,i,o){i===void 0&&(i=Et.DEFAULT_IDLE_TIMEOUT),o===void 0&&(o=!1);var s=t.call(this,r,n)||this;return s._idleHub=n,s._idleTimeout=i,s._onScope=o,s.activities={},s._heartbeatCounter=0,s._finished=!1,s._beforeFinishCallbacks=[],n&&o&&(wf(n),de.logger.log("Setting idle transaction on scope. Span ID: "+s.spanId),n.configureScope(function(a){return a.setSpan(s)})),s._initTimeout=setTimeout(function(){s._finished||s.finish()},s._idleTimeout),s}return e.prototype.finish=function(r){var n,i,o=this;if(r===void 0&&(r=de.timestampWithMs()),this._finished=!0,this.activities={},this.spanRecorder){de.logger.log("[Tracing] finishing IdleTransaction",new Date(r*1e3).toISOString(),this.op);try{for(var s=Ds.__values(this._beforeFinishCallbacks),a=s.next();!a.done;a=s.next()){var u=a.value;u(this,r)}}catch(c){n={error:c}}finally{try{a&&!a.done&&(i=s.return)&&i.call(s)}finally{if(n)throw n.error}}this.spanRecorder.spans=this.spanRecorder.spans.filter(function(c){if(c.spanId===o.spanId)return!0;c.endTimestamp||(c.endTimestamp=r,c.setStatus(Ef.SpanStatus.Cancelled),de.logger.log("[Tracing] cancelling span since transaction ended early",JSON.stringify(c,void 0,2)));var l=c.startTimestamp<r;return l||de.logger.log("[Tracing] discarding Span since it happened after Transaction was finished",JSON.stringify(c,void 0,2)),l}),de.logger.log("[Tracing] flushing IdleTransaction")}else de.logger.log("[Tracing] No active IdleTransaction");return this._onScope&&wf(this._idleHub),t.prototype.finish.call(this,r)},e.prototype.registerBeforeFinishCallback=function(r){this._beforeFinishCallbacks.push(r)},e.prototype.initSpanRecorder=function(r){var n=this;if(!this.spanRecorder){var i=function(s){n._finished||n._pushActivity(s)},o=function(s){n._finished||n._popActivity(s)};this.spanRecorder=new Tf(i,o,this.spanId,r),de.logger.log("Starting heartbeat"),this._pingHeartbeat()}this.spanRecorder.add(this)},e.prototype._pushActivity=function(r){this._initTimeout&&(clearTimeout(this._initTimeout),this._initTimeout=void 0),de.logger.log("[Tracing] pushActivity: "+r),this.activities[r]=!0,de.logger.log("[Tracing] new activities count",Object.keys(this.activities).length)},e.prototype._popActivity=function(r){var n=this;if(this.activities[r]&&(de.logger.log("[Tracing] popActivity "+r),delete this.activities[r],de.logger.log("[Tracing] new activities count",Object.keys(this.activities).length)),Object.keys(this.activities).length===0){var i=this._idleTimeout,o=de.timestampWithMs()+i/1e3;setTimeout(function(){n._finished||(n.setTag(ri.FINISH_REASON_TAG,ri.IDLE_TRANSACTION_FINISH_REASONS[1]),n.finish(o))},i)}},e.prototype._beat=function(){if(!this._finished){var r=Object.keys(this.activities).join("");r===this._prevHeartbeatString?this._heartbeatCounter+=1:this._heartbeatCounter=1,this._prevHeartbeatString=r,this._heartbeatCounter>=3?(de.logger.log("[Tracing] Transaction finished because of no change for 3 heart beats"),this.setStatus(Ef.SpanStatus.DeadlineExceeded),this.setTag(ri.FINISH_REASON_TAG,ri.IDLE_TRANSACTION_FINISH_REASONS[0]),this.finish()):this._pingHeartbeat()}},e.prototype._pingHeartbeat=function(){var r=this;de.logger.log("pinging Heartbeat -> current counter: "+this._heartbeatCounter),setTimeout(function(){r._beat()},Et.HEARTBEAT_INTERVAL)},e}(ky.Transaction);Et.IdleTransaction=Dy;function wf(t){if(t){var e=t.getScope();if(e){var r=e.getTransaction();r&&e.setSpan(void 0)}}}});var oi=b((Gr,zr)=>{Object.defineProperty(Gr,"__esModule",{value:!0});var Ls=q(),Of=Ee(),ii=se(),qe=N(),Ly=yf(),Fy=ni(),jy=ti(),Uy=St();function Hy(){var t=this.getScope();if(t){var e=t.getSpan();if(e)return{"sentry-trace":e.toTraceparent()}}return{}}function Cf(t,e,r){if(!Uy.hasTracingEnabled(e))return t.sampled=!1,t;if(t.sampled!==void 0)return t.setMetadata({transactionSampling:{method:ii.TransactionSamplingMethod.Explicit}}),t;var n;return typeof e.tracesSampler=="function"?(n=e.tracesSampler(r),t.setMetadata({transactionSampling:{method:ii.TransactionSamplingMethod.Sampler,rate:Number(n)}})):r.parentSampled!==void 0?(n=r.parentSampled,t.setMetadata({transactionSampling:{method:ii.TransactionSamplingMethod.Inheritance}})):(n=e.tracesSampleRate,t.setMetadata({transactionSampling:{method:ii.TransactionSamplingMethod.Rate,rate:Number(n)}})),By(n)?n?(t.sampled=Math.random()<n,t.sampled?(qe.logger.log("[Tracing] starting "+t.op+" transaction - "+t.name),t):(qe.logger.log("[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = "+Number(n)+")"),t)):(qe.logger.log("[Tracing] Discarding transaction because "+(typeof e.tracesSampler=="function"?"tracesSampler returned 0 or false":"a negative sampling decision was inherited or tracesSampleRate is set to 0")),t.sampled=!1,t):(qe.logger.warn("[Tracing] Discarding transaction because of invalid sample rate."),t.sampled=!1,t)}function By(t){return isNaN(t)||!(typeof t=="number"||typeof t=="boolean")?(qe.logger.warn("[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got "+JSON.stringify(t)+" of type "+JSON.stringify(typeof t)+"."),!1):t<0||t>1?(qe.logger.warn("[Tracing] Given sample rate is invalid. Sample rate must be between 0 and 1. Got "+t+"."),!1):!0}function Gy(t,e){var r,n,i=((r=this.getClient())===null||r===void 0?void 0:r.getOptions())||{},o=new jy.Transaction(t,this);return o=Cf(o,i,Ls.__assign({parentSampled:t.parentSampled,transactionContext:t},e)),o.sampled&&o.initSpanRecorder((n=i._experiments)===null||n===void 0?void 0:n.maxSpans),o}function zy(t,e,r,n,i){var o,s,a=((o=t.getClient())===null||o===void 0?void 0:o.getOptions())||{},u=new Fy.IdleTransaction(e,t,r,n);return u=Cf(u,a,Ls.__assign({parentSampled:e.parentSampled,transactionContext:e},i)),u.sampled&&u.initSpanRecorder((s=a._experiments)===null||s===void 0?void 0:s.maxSpans),u}Gr.startIdleTransaction=zy;function xf(){var t=Of.getMainCarrier();!t.__SENTRY__||(t.__SENTRY__.extensions=t.__SENTRY__.extensions||{},t.__SENTRY__.extensions.startTransaction||(t.__SENTRY__.extensions.startTransaction=Gy),t.__SENTRY__.extensions.traceHeaders||(t.__SENTRY__.extensions.traceHeaders=Hy))}Gr._addTracingExtensions=xf;function Vy(){var t=Of.getMainCarrier();if(!!t.__SENTRY__){var e={mongodb:function(){var n=qe.dynamicRequire(zr,"./integrations/node/mongo");return new n.Mongo},mongoose:function(){var n=qe.dynamicRequire(zr,"./integrations/node/mongo");return new n.Mongo({mongoose:!0})},mysql:function(){var n=qe.dynamicRequire(zr,"./integrations/node/mysql");return new n.Mysql},pg:function(){var n=qe.dynamicRequire(zr,"./integrations/node/postgres");return new n.Postgres}},r=Object.keys(e).filter(function(n){return!!qe.loadModule(n)}).map(function(n){try{return e[n]()}catch{return}}).filter(function(n){return n});r.length>0&&(t.__SENTRY__.integrations=Ls.__spread(t.__SENTRY__.integrations||[],r))}}function Wy(){xf(),qe.isNodeEnv()&&Vy(),Ly.registerErrorInstrumentation()}Gr.addExtensionMethods=Wy});var If=b(js=>{Object.defineProperty(js,"__esModule",{value:!0});var Fs=q(),$y=N(),Yy=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._router=e.router||e.app,this._methods=(Array.isArray(e.methods)?e.methods:[]).concat("use")}return t.prototype.setupOnce=function(){if(!this._router){$y.logger.error("ExpressIntegration is missing an Express instance");return}Xy(this._router,this._methods)},t.id="Express",t}();js.Express=Yy;function Rf(t,e){var r=t.length;switch(r){case 2:return function(n,i){var o=i.__sentry_transaction;if(o){var s=o.startChild({description:t.name,op:"express.middleware."+e});i.once("finish",function(){s.finish()})}return t.call(this,n,i)};case 3:return function(n,i,o){var s,a=i.__sentry_transaction,u=(s=a)===null||s===void 0?void 0:s.startChild({description:t.name,op:"express.middleware."+e});t.call(this,n,i,function(){for(var c=[],l=0;l<arguments.length;l++)c[l]=arguments[l];var d;(d=u)===null||d===void 0||d.finish(),o.call.apply(o,Fs.__spread([this],c))})};case 4:return function(n,i,o,s){var a,u=o.__sentry_transaction,c=(a=u)===null||a===void 0?void 0:a.startChild({description:t.name,op:"express.middleware."+e});t.call(this,n,i,o,function(){for(var l=[],d=0;d<arguments.length;d++)l[d]=arguments[d];var h;(h=c)===null||h===void 0||h.finish(),s.call.apply(s,Fs.__spread([this],l))})};default:throw new Error("Express middleware takes 2-4 arguments. Got: "+r)}}function Ky(t,e){return t.map(function(r){return typeof r=="function"?Rf(r,e):Array.isArray(r)?r.map(function(n){return typeof n=="function"?Rf(n,e):n}):r})}function Jy(t,e){var r=t[e];return t[e]=function(){for(var n=[],i=0;i<arguments.length;i++)n[i]=arguments[i];return r.call.apply(r,Fs.__spread([this],Ky(n,e)))},t}function Xy(t,e){e===void 0&&(e=[]),e.forEach(function(r){return Jy(t,r)})}});var Af=b(Us=>{Object.defineProperty(Us,"__esModule",{value:!0});var Vr=N(),Qy=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._usePgNative=!!e.usePgNative}return t.prototype.setupOnce=function(e,r){var n,i=Vr.loadModule("pg");if(!i){Vr.logger.error("Postgres Integration was unable to require `pg` package.");return}if(this._usePgNative&&!((n=i.native)===null||n===void 0?void 0:n.Client)){Vr.logger.error("Postgres Integration was unable to access 'pg-native' bindings.");return}var o=(this._usePgNative?i.native:i).Client;Vr.fill(o.prototype,"query",function(s){return function(a,u,c){var l,d,h,_=r().getScope(),S=(l=_)===null||l===void 0?void 0:l.getSpan(),T=(d=S)===null||d===void 0?void 0:d.startChild({description:typeof a=="string"?a:a.text,op:"db"});if(typeof c=="function")return s.call(this,a,u,function(A,F){var k;(k=T)===null||k===void 0||k.finish(),c(A,F)});if(typeof u=="function")return s.call(this,a,function(A,F){var k;(k=T)===null||k===void 0||k.finish(),u(A,F)});var R=typeof u!="undefined"?s.call(this,a,u):s.call(this,a);return Vr.isThenable(R)?R.then(function(A){var F;return(F=T)===null||F===void 0||F.finish(),A}):((h=T)===null||h===void 0||h.finish(),R)}})},t.id="Postgres",t}();Us.Postgres=Qy});var Mf=b(Bs=>{Object.defineProperty(Bs,"__esModule",{value:!0});var Hs=N(),Zy=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(e,r){var n=Hs.loadModule("mysql/lib/Connection.js");if(!n){Hs.logger.error("Mysql Integration was unable to require `mysql` package.");return}Hs.fill(n,"createQuery",function(i){return function(o,s,a){var u,c,l=r().getScope(),d=(u=l)===null||u===void 0?void 0:u.getSpan(),h=(c=d)===null||c===void 0?void 0:c.startChild({description:typeof o=="string"?o:o.sql,op:"db"});return typeof a=="function"?i.call(this,o,s,function(_,S,T){var R;(R=h)===null||R===void 0||R.finish(),a(_,S,T)}):typeof s=="function"?i.call(this,o,function(_,S,T){var R;(R=h)===null||R===void 0||R.finish(),s(_,S,T)}):i.call(this,o,s,a)}})},t.id="Mysql",t}();Bs.Mysql=Zy});var Pf=b(zs=>{Object.defineProperty(zs,"__esModule",{value:!0});var Gs=q(),si=N(),eb=["aggregate","bulkWrite","countDocuments","createIndex","createIndexes","deleteMany","deleteOne","distinct","drop","dropIndex","dropIndexes","estimatedDocumentCount","find","findOne","findOneAndDelete","findOneAndReplace","findOneAndUpdate","indexes","indexExists","indexInformation","initializeOrderedBulkOp","insertMany","insertOne","isCapped","mapReduce","options","parallelCollectionScan","rename","replaceOne","stats","updateMany","updateOne"],tb={bulkWrite:["operations"],countDocuments:["query"],createIndex:["fieldOrSpec"],createIndexes:["indexSpecs"],deleteMany:["filter"],deleteOne:["filter"],distinct:["key","query"],dropIndex:["indexName"],find:["query"],findOne:["query"],findOneAndDelete:["filter"],findOneAndReplace:["filter","replacement"],findOneAndUpdate:["filter","update"],indexExists:["indexes"],insertMany:["docs"],insertOne:["doc"],mapReduce:["map","reduce"],rename:["newName"],replaceOne:["filter","doc"],updateMany:["filter","update"],updateOne:["filter","update"]},rb=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._operations=Array.isArray(e.operations)?e.operations:eb,this._describeOperations="describeOperations"in e?e.describeOperations:!0,this._useMongoose=!!e.useMongoose}return t.prototype.setupOnce=function(e,r){var n=this._useMongoose?"mongoose":"mongodb",i=si.loadModule(n);if(!i){si.logger.error("Mongo Integration was unable to require `"+n+"` package.");return}this._instrumentOperations(i.Collection,this._operations,r)},t.prototype._instrumentOperations=function(e,r,n){var i=this;r.forEach(function(o){return i._patchOperation(e,o,n)})},t.prototype._patchOperation=function(e,r,n){if(r in e.prototype){var i=this._getSpanContextFromOperationArguments.bind(this);si.fill(e.prototype,r,function(o){return function(){for(var s=[],a=0;a<arguments.length;a++)s[a]=arguments[a];var u,c,l,d,h=s[s.length-1],_=n().getScope(),S=(u=_)===null||u===void 0?void 0:u.getSpan();if(typeof h!="function"||r==="mapReduce"&&s.length===2){var T=(c=S)===null||c===void 0?void 0:c.startChild(i(this,r,s)),R=o.call.apply(o,Gs.__spread([this],s));return si.isThenable(R)?R.then(function(F){var k;return(k=T)===null||k===void 0||k.finish(),F}):((l=T)===null||l===void 0||l.finish(),R)}var A=(d=S)===null||d===void 0?void 0:d.startChild(i(this,r,s.slice(0,-1)));return o.call.apply(o,Gs.__spread([this],s.slice(0,-1),[function(F,k){var xe;(xe=A)===null||xe===void 0||xe.finish(),h(F,k)}]))}})}},t.prototype._getSpanContextFromOperationArguments=function(e,r,n){var i={collectionName:e.collectionName,dbName:e.dbName,namespace:e.namespace},o={op:"db",description:r,data:i},s=tb[r],a=Array.isArray(this._describeOperations)?this._describeOperations.includes(r):this._describeOperations;if(!s||!a)return o;try{if(r==="mapReduce"){var u=Gs.__read(n,2),c=u[0],l=u[1];i[s[0]]=typeof c=="string"?c:c.name||"<anonymous>",i[s[1]]=typeof l=="string"?l:l.name||"<anonymous>"}else for(var d=0;d<s.length;d++)i[s[d]]=JSON.stringify(n[d])}catch{}return o},t.id="Mongo",t}();zs.Mongo=rb});var kf=b(Ws=>{Object.defineProperty(Ws,"__esModule",{value:!0});var Vs=N(),Nf=Ns(),qf=bt(),nb=St(),ai=Vs.getGlobalObject();function ib(){ai&&ai.document?ai.document.addEventListener("visibilitychange",function(){var t=nb.getActiveTransaction();ai.document.hidden&&t&&(Vs.logger.log("[Tracing] Transaction: "+qf.SpanStatus.Cancelled+" -> since tab moved to the background, op: "+t.op),t.status||t.setStatus(qf.SpanStatus.Cancelled),t.setTag("visibilitychange","document.hidden"),t.setTag(Nf.FINISH_REASON_TAG,Nf.IDLE_TRANSACTION_FINISH_REASONS[2]),t.finish())}):Vs.logger.warn("[Tracing] Could not set up background tab detection due to lack of global document")}Ws.registerBackgroundTabDetection=ib});var ui=b($s=>{Object.defineProperty($s,"__esModule",{value:!0});$s.bindReporter=function(t,e,r){var n;return function(i){e.value>=0&&(i||r)&&(e.delta=e.value-(n||0),(e.delta||n===void 0)&&(n=e.value,t(e)))}}});var Df=b(Ys=>{Object.defineProperty(Ys,"__esModule",{value:!0});Ys.generateUniqueID=function(){return"v2-"+Date.now()+"-"+(Math.floor(Math.random()*(9e12-1))+1e12)}});var ci=b(Ks=>{Object.defineProperty(Ks,"__esModule",{value:!0});var ob=Df();Ks.initMetric=function(t,e){return{name:t,value:e??-1,delta:0,entries:[],id:ob.generateUniqueID()}}});var li=b(Js=>{Object.defineProperty(Js,"__esModule",{value:!0});Js.observe=function(t,e){try{if(PerformanceObserver.supportedEntryTypes.includes(t)){if(t==="first-input"&&!("PerformanceEventTiming"in self))return;var r=new PerformanceObserver(function(n){return n.getEntries().map(e)});return r.observe({type:t,buffered:!0}),r}}catch{}}});var Wr=b(Xs=>{Object.defineProperty(Xs,"__esModule",{value:!0});var sb=N();Xs.onHidden=function(t,e){var r=function(n){(n.type==="pagehide"||sb.getGlobalObject().document.visibilityState==="hidden")&&(t(n),e&&(removeEventListener("visibilitychange",r,!0),removeEventListener("pagehide",r,!0)))};addEventListener("visibilitychange",r,!0),addEventListener("pagehide",r,!0)}});var Lf=b(Qs=>{Object.defineProperty(Qs,"__esModule",{value:!0});var ab=ui(),ub=ci(),cb=li(),lb=Wr();Qs.getCLS=function(t,e){var r=ub.initMetric("CLS",0),n,i=0,o=[],s=function(u){if(u&&!u.hadRecentInput){var c=o[0],l=o[o.length-1];i&&o.length!==0&&u.startTime-l.startTime<1e3&&u.startTime-c.startTime<5e3?(i+=u.value,o.push(u)):(i=u.value,o=[u]),i>r.value&&(r.value=i,r.entries=o,n&&n())}},a=cb.observe("layout-shift",s);a&&(n=ab.bindReporter(t,r,e),lb.onHidden(function(){a.takeRecords().map(s),n(!0)}))}});var di=b(Zs=>{Object.defineProperty(Zs,"__esModule",{value:!0});var fb=N(),db=Wr(),fi=-1,pb=function(){return fb.getGlobalObject().document.visibilityState==="hidden"?0:1/0},hb=function(){db.onHidden(function(t){var e=t.timeStamp;fi=e},!0)};Zs.getVisibilityWatcher=function(){return fi<0&&(fi=pb(),hb()),{get firstHiddenTime(){return fi}}}});var Ff=b(ea=>{Object.defineProperty(ea,"__esModule",{value:!0});var vb=ui(),_b=di(),gb=ci(),mb=li(),yb=Wr();ea.getFID=function(t,e){var r=_b.getVisibilityWatcher(),n=gb.initMetric("FID"),i,o=function(a){i&&a.startTime<r.firstHiddenTime&&(n.value=a.processingStart-a.startTime,n.entries.push(a),i(!0))},s=mb.observe("first-input",o);s&&(i=vb.bindReporter(t,n,e),yb.onHidden(function(){s.takeRecords().map(o),s.disconnect()},!0))}});var Uf=b(ta=>{Object.defineProperty(ta,"__esModule",{value:!0});var bb=ui(),Sb=di(),Eb=ci(),Tb=li(),wb=Wr(),jf={};ta.getLCP=function(t,e){var r=Sb.getVisibilityWatcher(),n=Eb.initMetric("LCP"),i,o=function(u){var c=u.startTime;c<r.firstHiddenTime&&(n.value=c,n.entries.push(u)),i&&i()},s=Tb.observe("largest-contentful-paint",o);if(s){i=bb.bindReporter(t,n,e);var a=function(){jf[n.id]||(s.takeRecords().map(o),s.disconnect(),jf[n.id]=!0,i(!0))};["keydown","click"].forEach(function(u){addEventListener(u,a,{once:!0,capture:!0})}),wb.onHidden(a,!0)}}});var Gf=b($r=>{Object.defineProperty($r,"__esModule",{value:!0});var Hf=q(),re=N(),ie=St(),Ob=Lf(),Cb=Ff(),xb=Uf(),Rb=di(),_e=re.getGlobalObject(),Ib=function(){function t(e){e===void 0&&(e=!1);var r,n;this._reportAllChanges=e,this._measurements={},this._performanceCursor=0,!re.isNodeEnv()&&((r=_e)===null||r===void 0?void 0:r.performance)&&((n=_e)===null||n===void 0?void 0:n.document)&&(_e.performance.mark&&_e.performance.mark("sentry-tracing-init"),this._trackCLS(),this._trackLCP(),this._trackFID())}return t.prototype.addPerformanceEntries=function(e){var r=this;if(!(!_e||!_e.performance||!_e.performance.getEntries||!re.browserPerformanceTimeOrigin)){re.logger.log("[Tracing] Adding & adjusting spans using Performance API");var n=ie.msToSec(re.browserPerformanceTimeOrigin),i;if(_e.document&&_e.document.scripts){for(var o=0;o<_e.document.scripts.length;o++)if(_e.document.scripts[o].dataset.entry==="true"){i=_e.document.scripts[o].src;break}}var s,a,u,c;if(_e.performance.getEntries().slice(this._performanceCursor).forEach(function(d){var h=ie.msToSec(d.startTime),_=ie.msToSec(d.duration);if(!(e.op==="navigation"&&n+h<e.startTimestamp))switch(d.entryType){case"navigation":{Ab(e,d,n),u=n+ie.msToSec(d.responseStart),c=n+ie.msToSec(d.requestStart);break}case"mark":case"paint":case"measure":{var S=Mb(e,d,h,_,n);a===void 0&&d.name==="sentry-tracing-init"&&(a=S);var T=Rb.getVisibilityWatcher(),R=d.startTime<T.firstHiddenTime;d.name==="first-paint"&&R&&(re.logger.log("[Measurements] Adding FP"),r._measurements.fp={value:d.startTime},r._measurements["mark.fp"]={value:S}),d.name==="first-contentful-paint"&&R&&(re.logger.log("[Measurements] Adding FCP"),r._measurements.fcp={value:d.startTime},r._measurements["mark.fcp"]={value:S});break}case"resource":{var A=d.name.replace(_e.location.origin,""),F=Bf(e,d,A,h,_,n);s===void 0&&(i||"").indexOf(A)>-1&&(s=F);break}default:}}),s!==void 0&&a!==void 0&&wt(e,{description:"evaluation",endTimestamp:a,op:"script",startTimestamp:s}),this._performanceCursor=Math.max(performance.getEntries().length-1,0),this._trackNavigator(e),e.op==="pageload"){var l=ie.msToSec(re.browserPerformanceTimeOrigin);typeof u=="number"&&(re.logger.log("[Measurements] Adding TTFB"),this._measurements.ttfb={value:(u-e.startTimestamp)*1e3},typeof c=="number"&&c<=u&&(this._measurements["ttfb.requestTime"]={value:(u-c)*1e3})),["fcp","fp","lcp"].forEach(function(d){if(!(!r._measurements[d]||l>=e.startTimestamp)){var h=r._measurements[d].value,_=l+ie.msToSec(h),S=Math.abs((_-e.startTimestamp)*1e3),T=S-h;re.logger.log("[Measurements] Normalized "+d+" from "+h+" to "+S+" ("+T+")"),r._measurements[d].value=S}}),this._measurements["mark.fid"]&&this._measurements.fid&&wt(e,{description:"first input delay",endTimestamp:this._measurements["mark.fid"].value+ie.msToSec(this._measurements.fid.value),op:"web.vitals",startTimestamp:this._measurements["mark.fid"].value}),"fcp"in this._measurements||delete this._measurements.cls,e.setMeasurements(this._measurements),this._tagMetricInfo(e),e.setTag("sentry_reportAllChanges",this._reportAllChanges)}}},t.prototype._tagMetricInfo=function(e){this._lcpEntry&&(re.logger.log("[Measurements] Adding LCP Data"),this._lcpEntry.element&&e.setTag("lcp.element",re.htmlTreeAsString(this._lcpEntry.element)),this._lcpEntry.id&&e.setTag("lcp.id",this._lcpEntry.id),this._lcpEntry.url&&e.setTag("lcp.url",this._lcpEntry.url.trim().slice(0,200)),e.setTag("lcp.size",this._lcpEntry.size)),this._clsEntry&&this._clsEntry.sources&&(re.logger.log("[Measurements] Adding CLS Data"),this._clsEntry.sources.forEach(function(r,n){return e.setTag("cls.source."+(n+1),re.htmlTreeAsString(r.node))}))},t.prototype._trackCLS=function(){var e=this;Ob.getCLS(function(r){var n=r.entries.pop();!n||(re.logger.log("[Measurements] Adding CLS"),e._measurements.cls={value:r.value},e._clsEntry=n)})},t.prototype._trackNavigator=function(e){var r=_e.navigator;if(!!r){var n=r.connection;n&&(n.effectiveType&&e.setTag("effectiveConnectionType",n.effectiveType),n.type&&e.setTag("connectionType",n.type),pi(n.rtt)&&(this._measurements["connection.rtt"]={value:n.rtt}),pi(n.downlink)&&(this._measurements["connection.downlink"]={value:n.downlink})),pi(r.deviceMemory)&&e.setTag("deviceMemory",String(r.deviceMemory)),pi(r.hardwareConcurrency)&&e.setTag("hardwareConcurrency",String(r.hardwareConcurrency))}},t.prototype._trackLCP=function(){var e=this;xb.getLCP(function(r){var n=r.entries.pop();if(!!n){var i=ie.msToSec(re.browserPerformanceTimeOrigin),o=ie.msToSec(n.startTime);re.logger.log("[Measurements] Adding LCP"),e._measurements.lcp={value:r.value},e._measurements["mark.lcp"]={value:i+o},e._lcpEntry=n}},this._reportAllChanges)},t.prototype._trackFID=function(){var e=this;Cb.getFID(function(r){var n=r.entries.pop();if(!!n){var i=ie.msToSec(re.browserPerformanceTimeOrigin),o=ie.msToSec(n.startTime);re.logger.log("[Measurements] Adding FID"),e._measurements.fid={value:r.value},e._measurements["mark.fid"]={value:i+o}}})},t}();$r.MetricsInstrumentation=Ib;function Ab(t,e,r){Tt({transaction:t,entry:e,event:"unloadEvent",timeOrigin:r}),Tt({transaction:t,entry:e,event:"redirect",timeOrigin:r}),Tt({transaction:t,entry:e,event:"domContentLoadedEvent",timeOrigin:r}),Tt({transaction:t,entry:e,event:"loadEvent",timeOrigin:r}),Tt({transaction:t,entry:e,event:"connect",timeOrigin:r}),Tt({transaction:t,entry:e,event:"secureConnection",timeOrigin:r,eventEnd:"connectEnd",description:"TLS/SSL"}),Tt({transaction:t,entry:e,event:"fetch",timeOrigin:r,eventEnd:"domainLookupStart",description:"cache"}),Tt({transaction:t,entry:e,event:"domainLookup",timeOrigin:r,description:"DNS"}),Pb(t,e,r)}function Mb(t,e,r,n,i){var o=i+r,s=o+n;return wt(t,{description:e.name,endTimestamp:s,op:e.entryType,startTimestamp:o}),o}function Bf(t,e,r,n,i,o){if(!(e.initiatorType==="xmlhttprequest"||e.initiatorType==="fetch")){var s={};"transferSize"in e&&(s["Transfer Size"]=e.transferSize),"encodedBodySize"in e&&(s["Encoded Body Size"]=e.encodedBodySize),"decodedBodySize"in e&&(s["Decoded Body Size"]=e.decodedBodySize);var a=o+n,u=a+i;return wt(t,{description:r,endTimestamp:u,op:e.initiatorType?"resource."+e.initiatorType:"resource",startTimestamp:a,data:s}),u}}$r.addResourceSpans=Bf;function Tt(t){var e=t.transaction,r=t.entry,n=t.event,i=t.timeOrigin,o=t.eventEnd,s=t.description,a=o?r[o]:r[n+"End"],u=r[n+"Start"];!u||!a||wt(e,{op:"browser",description:s??n,startTimestamp:i+ie.msToSec(u),endTimestamp:i+ie.msToSec(a)})}function Pb(t,e,r){wt(t,{op:"browser",description:"request",startTimestamp:r+ie.msToSec(e.requestStart),endTimestamp:r+ie.msToSec(e.responseEnd)}),wt(t,{op:"browser",description:"response",startTimestamp:r+ie.msToSec(e.responseStart),endTimestamp:r+ie.msToSec(e.responseEnd)})}function wt(t,e){var r=e.startTimestamp,n=Hf.__rest(e,["startTimestamp"]);return r&&t.startTimestamp>r&&(t.startTimestamp=r),t.startChild(Hf.__assign({startTimestamp:r},n))}$r._startChild=wt;function pi(t){return typeof t=="number"&&isFinite(t)}});var ra=b(ot=>{Object.defineProperty(ot,"__esModule",{value:!0});var it=q(),Yr=N(),Nb=bt(),hi=St();ot.DEFAULT_TRACING_ORIGINS=["localhost",/^\//];ot.defaultRequestInstrumentationOptions={traceFetch:!0,traceXHR:!0,tracingOrigins:ot.DEFAULT_TRACING_ORIGINS};function qb(t){var e=it.__assign(it.__assign({},ot.defaultRequestInstrumentationOptions),t),r=e.traceFetch,n=e.traceXHR,i=e.tracingOrigins,o=e.shouldCreateSpanForRequest,s={},a=function(l){if(s[l])return s[l];var d=i;return s[l]=d.some(function(h){return Yr.isMatchingPattern(l,h)})&&!Yr.isMatchingPattern(l,"sentry_key"),s[l]},u=a;typeof o=="function"&&(u=function(l){return a(l)&&o(l)});var c={};r&&Yr.addInstrumentationHandler({callback:function(l){zf(l,u,c)},type:"fetch"}),n&&Yr.addInstrumentationHandler({callback:function(l){Vf(l,u,c)},type:"xhr"})}ot.instrumentOutgoingRequests=qb;function zf(t,e,r){if(!(!hi.hasTracingEnabled()||!(t.fetchData&&e(t.fetchData.url)))){if(t.endTimestamp&&t.fetchData.__span){var n=r[t.fetchData.__span];n&&(t.response?n.setHttpStatus(t.response.status):t.error&&n.setStatus(Nb.SpanStatus.InternalError),n.finish(),delete r[t.fetchData.__span]);return}var i=hi.getActiveTransaction();if(i){var n=i.startChild({data:it.__assign(it.__assign({},t.fetchData),{type:"fetch"}),description:t.fetchData.method+" "+t.fetchData.url,op:"http.client"});t.fetchData.__span=n.spanId,r[n.spanId]=n;var o=t.args[0]=t.args[0],s=t.args[1]=t.args[1]||{},a=s.headers;Yr.isInstanceOf(o,Request)&&(a=o.headers),a?typeof a.append=="function"?a.append("sentry-trace",n.toTraceparent()):Array.isArray(a)?a=it.__spread(a,[["sentry-trace",n.toTraceparent()]]):a=it.__assign(it.__assign({},a),{"sentry-trace":n.toTraceparent()}):a={"sentry-trace":n.toTraceparent()},s.headers=a}}}ot.fetchCallback=zf;function Vf(t,e,r){var n,i;if(!(!hi.hasTracingEnabled()||((n=t.xhr)===null||n===void 0?void 0:n.__sentry_own_request__)||!(((i=t.xhr)===null||i===void 0?void 0:i.__sentry_xhr__)&&e(t.xhr.__sentry_xhr__.url)))){var o=t.xhr.__sentry_xhr__;if(t.endTimestamp&&t.xhr.__sentry_xhr_span_id__){var s=r[t.xhr.__sentry_xhr_span_id__];s&&(s.setHttpStatus(o.status_code),s.finish(),delete r[t.xhr.__sentry_xhr_span_id__]);return}var a=hi.getActiveTransaction();if(a){var s=a.startChild({data:it.__assign(it.__assign({},o.data),{type:"xhr",method:o.method,url:o.url}),description:o.method+" "+o.url,op:"http.client"});if(t.xhr.__sentry_xhr_span_id__=s.spanId,r[t.xhr.__sentry_xhr_span_id__]=s,t.xhr.setRequestHeader)try{t.xhr.setRequestHeader("sentry-trace",s.toTraceparent())}catch{}}}}ot.xhrCallback=Vf});var Wf=b(na=>{Object.defineProperty(na,"__esModule",{value:!0});var vi=N(),Kr=vi.getGlobalObject();function kb(t,e,r){if(e===void 0&&(e=!0),r===void 0&&(r=!0),!Kr||!Kr.location){vi.logger.warn("Could not initialize routing instrumentation due to invalid location");return}var n=Kr.location.href,i;e&&(i=t({name:Kr.location.pathname,op:"pageload"})),r&&vi.addInstrumentationHandler({callback:function(o){var s=o.to,a=o.from;if(a===void 0&&n&&n.indexOf(s)!==-1){n=void 0;return}a!==s&&(n=void 0,i&&(vi.logger.log("[Tracing] Finishing current transaction with op: "+i.op),i.finish()),i=t({name:Kr.location.pathname,op:"navigation"}))},type:"history"})}na.instrumentRoutingWithDefaults=kb});var Jf=b(jt=>{Object.defineProperty(jt,"__esModule",{value:!0});var st=q(),Ft=N(),Db=oi(),Lb=ni(),Fb=bt(),$f=St(),jb=kf(),Ub=Gf(),_i=ra(),Hb=Wf();jt.DEFAULT_MAX_TRANSACTION_DURATION_SECONDS=600;var Bb=st.__assign({idleTimeout:Lb.DEFAULT_IDLE_TIMEOUT,markBackgroundTransactions:!0,maxTransactionDuration:jt.DEFAULT_MAX_TRANSACTION_DURATION_SECONDS,routingInstrumentation:Hb.instrumentRoutingWithDefaults,startTransactionOnLocationChange:!0,startTransactionOnPageLoad:!0},_i.defaultRequestInstrumentationOptions),Gb=function(){function t(e){this.name=t.id,this._emitOptionsWarning=!1,this._configuredIdleTimeout=void 0;var r=_i.defaultRequestInstrumentationOptions.tracingOrigins;e&&(this._configuredIdleTimeout=e.idleTimeout,e.tracingOrigins&&Array.isArray(e.tracingOrigins)&&e.tracingOrigins.length!==0?r=e.tracingOrigins:this._emitOptionsWarning=!0),this.options=st.__assign(st.__assign(st.__assign({},Bb),e),{tracingOrigins:r});var n=this.options._metricOptions;this._metrics=new Ub.MetricsInstrumentation(n&&n._reportAllChanges)}return t.prototype.setupOnce=function(e,r){var n=this;this._getCurrentHub=r,this._emitOptionsWarning&&(Ft.logger.warn("[Tracing] You need to define `tracingOrigins` in the options. Set an array of urls or patterns to trace."),Ft.logger.warn("[Tracing] We added a reasonable default for you: "+_i.defaultRequestInstrumentationOptions.tracingOrigins));var i=this.options,o=i.routingInstrumentation,s=i.startTransactionOnLocationChange,a=i.startTransactionOnPageLoad,u=i.markBackgroundTransactions,c=i.traceFetch,l=i.traceXHR,d=i.tracingOrigins,h=i.shouldCreateSpanForRequest;o(function(_){return n._createRouteTransaction(_)},a,s),u&&jb.registerBackgroundTabDetection(),_i.instrumentOutgoingRequests({traceFetch:c,traceXHR:l,tracingOrigins:d,shouldCreateSpanForRequest:h})},t.prototype._createRouteTransaction=function(e){var r=this;if(!this._getCurrentHub){Ft.logger.warn("[Tracing] Did not create "+e.op+" transaction because _getCurrentHub is invalid.");return}var n=this.options,i=n.beforeNavigate,o=n.idleTimeout,s=n.maxTransactionDuration,a=e.op==="pageload"?Yf():void 0,u=st.__assign(st.__assign(st.__assign({},e),a),{trimEnd:!0}),c=typeof i=="function"?i(u):u,l=c===void 0?st.__assign(st.__assign({},u),{sampled:!1}):c;l.sampled===!1&&Ft.logger.log("[Tracing] Will not send "+l.op+" transaction because of beforeNavigate."),Ft.logger.log("[Tracing] Starting "+l.op+" transaction on scope");var d=this._getCurrentHub(),h=Ft.getGlobalObject().location,_=Db.startIdleTransaction(d,l,o,!0,{location:h});return _.registerBeforeFinishCallback(function(S,T){r._metrics.addPerformanceEntries(S),zb($f.secToMs(s),S,T)}),_.setTag("idleTimeout",this._configuredIdleTimeout),_},t.id="BrowserTracing",t}();jt.BrowserTracing=Gb;function Yf(){var t=Kf("sentry-trace");if(t)return $f.extractTraceparentData(t)}jt.getHeaderContext=Yf;function Kf(t){var e=Ft.getGlobalObject().document.querySelector("meta[name="+t+"]");return e?e.getAttribute("content"):null}jt.getMetaContent=Kf;function zb(t,e,r){var n=r-e.startTimestamp,i=r&&(n>t||n<0);i&&(e.setStatus(Fb.SpanStatus.DeadlineExceeded),e.setTag("maxTransactionDurationExceeded","true"))}});var gi=b(Jr=>{Object.defineProperty(Jr,"__esModule",{value:!0});var Vb=Jf();Jr.BrowserTracing=Vb.BrowserTracing;var Xf=ra();Jr.instrumentOutgoingRequests=Xf.instrumentOutgoingRequests;Jr.defaultRequestInstrumentationOptions=Xf.defaultRequestInstrumentationOptions});var Qf=b(Ut=>{Object.defineProperty(Ut,"__esModule",{value:!0});var Wb=If();Ut.Express=Wb.Express;var $b=Af();Ut.Postgres=$b.Postgres;var Yb=Mf();Ut.Mysql=Yb.Mysql;var Kb=Pf();Ut.Mongo=Kb.Mongo;var Jb=gi();Ut.BrowserTracing=Jb.BrowserTracing});var td=b(ce=>{Object.defineProperty(ce,"__esModule",{value:!0});var Zf=oi();ce.addExtensionMethods=Zf.addExtensionMethods;var Xb=Qf();ce.Integrations=Xb;var Qb=gi();ce.BrowserTracing=Qb.BrowserTracing;var Zb=ei();ce.Span=Zb.Span;var eS=ti();ce.Transaction=eS.Transaction;var ed=gi();ce.registerRequestInstrumentation=ed.instrumentOutgoingRequests;ce.defaultRequestInstrumentationOptions=ed.defaultRequestInstrumentationOptions;var tS=bt();ce.SpanStatus=tS.SpanStatus;var rS=ni();ce.IdleTransaction=rS.IdleTransaction;var nS=oi();ce.startIdleTransaction=nS.startIdleTransaction;Zf.addExtensionMethods();var Xr=St();ce.extractTraceparentData=Xr.extractTraceparentData;ce.getActiveTransaction=Xr.getActiveTransaction;ce.hasTracingEnabled=Xr.hasTracingEnabled;ce.stripUrlQueryAndFragment=Xr.stripUrlQueryAndFragment;ce.TRACEPARENT_REGEXP=Xr.TRACEPARENT_REGEXP});var rd=b(ia=>{"use strict";ia.parse=aS;ia.serialize=uS;var iS=decodeURIComponent,oS=encodeURIComponent,sS=/; */,mi=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;function aS(t,e){if(typeof t!="string")throw new TypeError("argument str must be a string");for(var r={},n=e||{},i=t.split(sS),o=n.decode||iS,s=0;s<i.length;s++){var a=i[s],u=a.indexOf("=");if(!(u<0)){var c=a.substr(0,u).trim(),l=a.substr(++u,a.length).trim();l[0]=='"'&&(l=l.slice(1,-1)),r[c]==null&&(r[c]=cS(l,o))}}return r}function uS(t,e,r){var n=r||{},i=n.encode||oS;if(typeof i!="function")throw new TypeError("option encode is invalid");if(!mi.test(t))throw new TypeError("argument name is invalid");var o=i(e);if(o&&!mi.test(o))throw new TypeError("argument val is invalid");var s=t+"="+o;if(n.maxAge!=null){var a=n.maxAge-0;if(isNaN(a)||!isFinite(a))throw new TypeError("option maxAge is invalid");s+="; Max-Age="+Math.floor(a)}if(n.domain){if(!mi.test(n.domain))throw new TypeError("option domain is invalid");s+="; Domain="+n.domain}if(n.path){if(!mi.test(n.path))throw new TypeError("option path is invalid");s+="; Path="+n.path}if(n.expires){if(typeof n.expires.toUTCString!="function")throw new TypeError("option expires is invalid");s+="; Expires="+n.expires.toUTCString()}if(n.httpOnly&&(s+="; HttpOnly"),n.secure&&(s+="; Secure"),n.sameSite){var u=typeof n.sameSite=="string"?n.sameSite.toLowerCase():n.sameSite;switch(u){case!0:s+="; SameSite=Strict";break;case"lax":s+="; SameSite=Lax";break;case"strict":s+="; SameSite=Strict";break;case"none":s+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}}return s}function cS(t,e){try{return e(t)}catch{return t}}});var od=b(Bt=>{Object.defineProperty(Bt,"__esModule",{value:!0});var $e=q(),Ht=ae(),lS=td(),nd=se(),vr=N(),fS=rd(),dS=require("domain"),pS=require("os"),hS=require("url"),Qr=Rs();function vS(){return function(e,r,n){var i;e.headers&&vr.isString(e.headers["sentry-trace"])&&(i=lS.extractTraceparentData(e.headers["sentry-trace"]));var o=Ht.startTransaction($e.__assign({name:yi(e,{path:!0,method:!0}),op:"http.server"},i),{request:bi(e)});Ht.getCurrentHub().configureScope(function(s){s.setSpan(o)}),r.__sentry_transaction=o,r.once("finish",function(){setImmediate(function(){_S(o,e),o.setHttpStatus(r.statusCode),o.finish()})}),n()}}Bt.tracingHandler=vS;function _S(t,e){!t||(t.name=yi(e,{path:!0,method:!0}),t.setData("url",e.originalUrl),t.setData("baseUrl",e.baseUrl),t.setData("query",e.query))}function yi(t,e){e===void 0&&(e={});var r,n=(r=t.method)===null||r===void 0?void 0:r.toUpperCase(),i="";t.route?i=""+(t.baseUrl||"")+t.route.path:(t.originalUrl||t.url)&&(i=vr.stripUrlQueryAndFragment(t.originalUrl||t.url||""));var o="";return e.method&&n&&(o+=n),e.method&&e.path&&(o+=" "),e.path&&i&&(o+=i),o}function gS(t,e){var r;switch(e){case"path":return yi(t,{path:!0});case"handler":return((r=t.route)===null||r===void 0?void 0:r.stack[0].name)||"<anonymous>";case"methodPath":default:return yi(t,{path:!0,method:!0})}}var mS=["id","username","email"];function yS(t,e){var r={},n=Array.isArray(e)?e:mS;return n.forEach(function(i){t&&i in t&&(r[i]=t[i])}),r}var bS=["cookies","data","headers","method","query_string","url"];function bi(t,e){e===void 0&&(e=bS);var r={},n=t.headers||t.header||{},i=t.method,o=t.hostname||t.host||n.host||"<no host>",s=t.protocol==="https"||t.secure||(t.socket||{}).encrypted?"https":"http",a=t.originalUrl||t.url||"",u=s+"://"+o+a;return e.forEach(function(c){switch(c){case"headers":r.headers=n;break;case"method":r.method=i;break;case"url":r.url=u;break;case"cookies":r.cookies=t.cookies||fS.parse(n.cookie||"");break;case"query_string":r.query_string=t.query||hS.parse(a||"",!1).query;break;case"data":if(i==="GET"||i==="HEAD")break;t.body!==void 0&&(r.data=vr.isString(t.body)?t.body:JSON.stringify(vr.normalize(t.body)));break;default:({}).hasOwnProperty.call(t,c)&&(r[c]=t[c])}}),r}Bt.extractRequestData=bi;function id(t,e,r){if(r=$e.__assign({ip:!1,request:!0,serverName:!0,transaction:!0,user:!0,version:!0},r),r.version&&(t.contexts=$e.__assign($e.__assign({},t.contexts),{runtime:{name:"node",version:global.process.version}})),r.request){var n=Array.isArray(r.request)?bi(e,r.request):bi(e);t.request=$e.__assign($e.__assign({},t.request),n)}if(r.serverName&&!t.server_name&&(t.server_name=global.process.env.SENTRY_NAME||pS.hostname()),r.user){var i=e.user&&vr.isPlainObject(e.user)?yS(e.user,r.user):{};Object.keys(i)&&(t.user=$e.__assign($e.__assign({},t.user),i))}if(r.ip){var o=e.ip||e.connection&&e.connection.remoteAddress;o&&(t.user=$e.__assign($e.__assign({},t.user),{ip_address:o}))}return r.transaction&&!t.transaction&&(t.transaction=gS(e,r.transaction)),t}Bt.parseRequest=id;function SS(t){var e=Ht.getCurrentHub(),r=e.getClient();if(r&&Qr.isAutoSessionTrackingEnabled(r)){r.initSessionFlusher();var n=e.getScope();n&&n.getSession()&&n.setSession()}return function(o,s,a){if(t&&t.flushTimeout&&t.flushTimeout>0){var u=s.end;s.end=function(l,d,h){var _=this;Qr.flush(t.flushTimeout).then(function(){u.call(_,l,d,h)}).then(null,function(S){vr.logger.error(S)})}}var c=dS.create();c.add(o),c.add(s),c.on("error",a),c.run(function(){var l=Ht.getCurrentHub();l.configureScope(function(d){d.addEventProcessor(function(S){return id(S,o,t)});var h=l.getClient();if(Qr.isAutoSessionTrackingEnabled(h)){var _=l.getScope();_&&_.setRequestSession({status:nd.RequestSessionStatus.Ok})}}),s.once("finish",function(){var d=l.getClient();Qr.isAutoSessionTrackingEnabled(d)&&setImmediate(function(){d&&d._captureRequestSession&&d._captureRequestSession()})}),a()})}}Bt.requestHandler=SS;function ES(t){var e=t.status||t.statusCode||t.status_code||t.output&&t.output.statusCode;return e?parseInt(e,10):500}function TS(t){var e=ES(t);return e>=500}function wS(t){return function(r,n,i,o){var s=t&&t.shouldHandleError||TS;if(s(r)){Ht.withScope(function(a){var u=i.__sentry_transaction;u&&a.getSpan()===void 0&&a.setSpan(u);var c=Ht.getCurrentHub().getClient();if(c&&Qr.isAutoSessionTrackingEnabled(c)){var l=c._sessionFlusher!==void 0;if(l){var d=a.getRequestSession();d&&d.status!==void 0&&(d.status=nd.RequestSessionStatus.Crashed)}}var h=Ht.captureException(r);i.sentry=h,o(r)});return}o(r)}}Bt.errorHandler=wS});var ud=b(H=>{Object.defineProperty(H,"__esModule",{value:!0});var sd=q(),ad=se();H.Severity=ad.Severity;H.Status=ad.Status;var Z=ae();H.addGlobalEventProcessor=Z.addGlobalEventProcessor;H.addBreadcrumb=Z.addBreadcrumb;H.captureException=Z.captureException;H.captureEvent=Z.captureEvent;H.captureMessage=Z.captureMessage;H.configureScope=Z.configureScope;H.getHubFromCarrier=Z.getHubFromCarrier;H.getCurrentHub=Z.getCurrentHub;H.Hub=Z.Hub;H.makeMain=Z.makeMain;H.Scope=Z.Scope;H.startTransaction=Z.startTransaction;H.SDK_VERSION=Z.SDK_VERSION;H.setContext=Z.setContext;H.setExtra=Z.setExtra;H.setExtras=Z.setExtras;H.setTag=Z.setTag;H.setTags=Z.setTags;H.setUser=Z.setUser;H.withScope=Z.withScope;var OS=cs();H.NodeBackend=OS.NodeBackend;var CS=ds();H.NodeClient=CS.NodeClient;var _r=Rs();H.defaultIntegrations=_r.defaultIntegrations;H.init=_r.init;H.lastEventId=_r.lastEventId;H.flush=_r.flush;H.close=_r.close;H.getSentryRelease=_r.getSentryRelease;var xS=hf();H.deepReadDirSync=xS.deepReadDirSync;var RS=Vo();H.SDK_NAME=RS.SDK_NAME;var IS=ae(),AS=Ee(),MS=require("domain"),PS=od();H.Handlers=PS;var NS=Cs(),qS=as();H.Transports=qS;var kS=sd.__assign(sd.__assign({},IS.Integrations),NS);H.Integrations=kS;var Zr=AS.getMainCarrier();Zr.__SENTRY__&&(Zr.__SENTRY__.extensions=Zr.__SENTRY__.extensions||{},Zr.__SENTRY__.extensions.domain=Zr.__SENTRY__.extensions.domain||MS)});var ld=b(sa=>{Object.defineProperty(sa,"__esModule",{value:!0});var cd=q(),oa=N(),DS=/^\[((?:[$a-zA-Z0-9]+:)?(?:[$a-zA-Z0-9]+))\] (.*?)\n?(\S+)$/,LS=function(){function t(e){if(e===void 0&&(e={}),this.name=t.id,oa.logger.log("You are still using the Angular integration, consider moving to @sentry/angular"),this._angular=e.angular||oa.getGlobalObject().angular,!this._angular){oa.logger.error("AngularIntegration is missing an Angular instance");return}this._module=this._angular.module(t.moduleName,[])}return t.prototype.setupOnce=function(e,r){var n=this;!this._module||(this._getCurrentHub=r,this._module.config(["$provide",function(i){i.decorator("$exceptionHandler",["$delegate",n._$exceptionHandlerDecorator.bind(n)])}]))},t.prototype._$exceptionHandlerDecorator=function(e){var r=this;return function(n,i){var o=r._getCurrentHub&&r._getCurrentHub();o&&o.getIntegration(t)&&o.withScope(function(s){i&&s.setExtra("cause",i),s.addEventProcessor(function(a){var u=a.exception&&a.exception.values&&a.exception.values[0];if(u){var c=DS.exec(u.value||"");c&&(u.type=c[1],u.value=c[2],a.message=u.type+": "+u.value,a.extra=cd.__assign(cd.__assign({},a.extra),{angularDocs:c[3].substr(0,250)}))}return a}),o.captureException(n)}),e(n,i)}},t.id="AngularJS",t.moduleName="ngSentry",t}();sa.Angular=LS});var fd=b(aa=>{Object.defineProperty(aa,"__esModule",{value:!0});var FS=se(),Si=N(),Ei=Si.getGlobalObject(),jS=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._levels=["log","info","warn","error","debug","assert"],e.levels&&(this._levels=e.levels)}return t.prototype.setupOnce=function(e,r){"console"in Ei&&this._levels.forEach(function(n){n in Ei.console&&Si.fill(Ei.console,n,function(i){return function(){for(var o=[],s=0;s<arguments.length;s++)o[s]=arguments[s];var a=r();a.getIntegration(t)&&a.withScope(function(u){u.setLevel(FS.Severity.fromString(n)),u.setExtra("arguments",o),u.addEventProcessor(function(l){return l.logger="console",l});var c=Si.safeJoin(o," ");n==="assert"?o[0]===!1&&(c="Assertion failed: "+(Si.safeJoin(o.slice(1)," ")||"console.assert"),u.setExtra("arguments",o.slice(1)),a.captureMessage(c)):n==="error"&&o[0]instanceof Error?a.captureException(o[0]):a.captureMessage(c)}),i&&Function.prototype.apply.call(i,Ei.console,o)}})})},t.id="CaptureConsole",t}();aa.CaptureConsole=jS});var dd=b(ua=>{Object.defineProperty(ua,"__esModule",{value:!0});var US=q(),HS=N(),BS=function(){function t(e){this.name=t.id,this._options=US.__assign({debugger:!1,stringify:!1},e)}return t.prototype.setupOnce=function(e,r){e(function(n,i){var o=r().getIntegration(t);if(o){if(o._options.debugger)debugger;HS.consoleSandbox(function(){o._options.stringify?(console.log(JSON.stringify(n,null,2)),i&&console.log(JSON.stringify(i,null,2))):(console.log(n),i&&console.log(i))})}return n})},t.id="Debug",t}();ua.Debug=BS});var pd=b(ca=>{Object.defineProperty(ca,"__esModule",{value:!0});var GS=N(),zS=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(e,r){e(function(n){var i=r().getIntegration(t);if(i){try{if(i._shouldDropEvent(n,i._previousEvent))return GS.logger.warn("Event dropped due to being a duplicate of previously captured event."),null}catch{return i._previousEvent=n}return i._previousEvent=n}return n})},t.prototype._shouldDropEvent=function(e,r){return r?!!(this._isSameMessageEvent(e,r)||this._isSameExceptionEvent(e,r)):!1},t.prototype._isSameMessageEvent=function(e,r){var n=e.message,i=r.message;return!(!n&&!i||n&&!i||!n&&i||n!==i||!this._isSameFingerprint(e,r)||!this._isSameStacktrace(e,r))},t.prototype._getFramesFromEvent=function(e){var r=e.exception;if(r)try{return r.values[0].stacktrace.frames}catch{return}else if(e.stacktrace)return e.stacktrace.frames},t.prototype._isSameStacktrace=function(e,r){var n=this._getFramesFromEvent(e),i=this._getFramesFromEvent(r);if(!n&&!i)return!0;if(n&&!i||!n&&i||(n=n,i=i,i.length!==n.length))return!1;for(var o=0;o<i.length;o++){var s=i[o],a=n[o];if(s.filename!==a.filename||s.lineno!==a.lineno||s.colno!==a.colno||s.function!==a.function)return!1}return!0},t.prototype._getExceptionFromEvent=function(e){return e.exception&&e.exception.values&&e.exception.values[0]},t.prototype._isSameExceptionEvent=function(e,r){var n=this._getExceptionFromEvent(r),i=this._getExceptionFromEvent(e);return!(!n||!i||n.type!==i.type||n.value!==i.value||!this._isSameFingerprint(e,r)||!this._isSameStacktrace(e,r))},t.prototype._isSameFingerprint=function(e,r){var n=e.fingerprint,i=r.fingerprint;if(!n&&!i)return!0;if(n&&!i||!n&&i)return!1;n=n,i=i;try{return n.join("")===i.join("")}catch{return!1}},t.id="Dedupe",t}();ca.Dedupe=zS});var hd=b(fa=>{Object.defineProperty(fa,"__esModule",{value:!0});var la=N(),VS=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._Ember=e.Ember||la.getGlobalObject().Ember}return t.prototype.setupOnce=function(e,r){var n=this;if(!this._Ember){la.logger.error("EmberIntegration is missing an Ember instance");return}var i=this._Ember.onerror;this._Ember.onerror=function(o){if(r().getIntegration(t)&&r().captureException(o,{originalException:o}),typeof i=="function")i.call(n._Ember,o);else if(n._Ember.testing)throw o},this._Ember.RSVP.on("error",function(o){r().getIntegration(t)&&r().withScope(function(s){la.isInstanceOf(o,Error)?(s.setExtra("context","Unhandled Promise error detected"),r().captureException(o,{originalException:o})):(s.setExtra("reason",o),r().captureMessage("Unhandled Promise error detected"))})})},t.id="Ember",t}();fa.Ember=VS});var vd=b(da=>{Object.defineProperty(da,"__esModule",{value:!0});var Ot=q(),gr=N(),WS=function(){function t(e){e===void 0&&(e={depth:3}),this._options=e,this.name=t.id}return t.prototype.setupOnce=function(e,r){e(function(n,i){var o=r().getIntegration(t);return o?o.enhanceEventWithErrorData(n,i):n})},t.prototype.enhanceEventWithErrorData=function(e,r){var n;if(!r||!r.originalException||!gr.isError(r.originalException))return e;var i=r.originalException.name||r.originalException.constructor.name,o=this._extractErrorData(r.originalException);if(o){var s=Ot.__assign({},e.contexts),a=gr.normalize(o,this._options.depth);return gr.isPlainObject(a)&&(s=Ot.__assign(Ot.__assign({},e.contexts),(n={},n[i]=Ot.__assign({},a),n))),Ot.__assign(Ot.__assign({},e),{contexts:s})}return e},t.prototype._extractErrorData=function(e){var r,n,i,o;try{var s=["name","message","stack","line","column","fileName","lineNumber","columnNumber","toJSON"],a={};try{for(var u=Ot.__values(Object.keys(e)),c=u.next();!c.done;c=u.next()){var l=c.value;if(s.indexOf(l)===-1){var d=e[l];a[l]=gr.isError(d)?d.toString():d}}}catch(T){r={error:T}}finally{try{c&&!c.done&&(n=u.return)&&n.call(u)}finally{if(r)throw r.error}}if(typeof e.toJSON=="function"){var h=e.toJSON();try{for(var _=Ot.__values(Object.keys(h)),S=_.next();!S.done;S=_.next()){var l=S.value,d=h[l];a[l]=gr.isError(d)?d.toString():d}}catch(T){i={error:T}}finally{try{S&&!S.done&&(o=_.return)&&o.call(_)}finally{if(i)throw i.error}}}return a}catch(T){gr.logger.error("Unable to extract extra data from the Error object:",T)}return null},t.id="ExtraErrorData",t}();da.ExtraErrorData=WS});var gd=b((_d,pa)=>{(function(t){if(typeof _d=="object"&&typeof pa!="undefined")pa.exports=t();else if(typeof define=="function"&&define.amd)define([],t);else{var e;typeof window!="undefined"?e=window:typeof global!="undefined"?e=global:typeof self!="undefined"?e=self:e=this,e.localforage=t()}})(function(){var t,e,r;return function n(i,o,s){function a(l,d){if(!o[l]){if(!i[l]){var h=typeof require=="function"&&require;if(!d&&h)return h(l,!0);if(u)return u(l,!0);var _=new Error("Cannot find module '"+l+"'");throw _.code="MODULE_NOT_FOUND",_}var S=o[l]={exports:{}};i[l][0].call(S.exports,function(T){var R=i[l][1][T];return a(R||T)},S,S.exports,n,i,o,s)}return o[l].exports}for(var u=typeof require=="function"&&require,c=0;c<s.length;c++)a(s[c]);return a}({1:[function(n,i,o){(function(s){"use strict";var a=s.MutationObserver||s.WebKitMutationObserver,u;if(a){var c=0,l=new a(T),d=s.document.createTextNode("");l.observe(d,{characterData:!0}),u=function(){d.data=c=++c%2}}else if(!s.setImmediate&&typeof s.MessageChannel!="undefined"){var h=new s.MessageChannel;h.port1.onmessage=T,u=function(){h.port2.postMessage(0)}}else"document"in s&&"onreadystatechange"in s.document.createElement("script")?u=function(){var A=s.document.createElement("script");A.onreadystatechange=function(){T(),A.onreadystatechange=null,A.parentNode.removeChild(A),A=null},s.document.documentElement.appendChild(A)}:u=function(){setTimeout(T,0)};var _,S=[];function T(){_=!0;for(var A,F,k=S.length;k;){for(F=S,S=[],A=-1;++A<k;)F[A]();k=S.length}_=!1}i.exports=R;function R(A){S.push(A)===1&&!_&&u()}}).call(this,typeof global!="undefined"?global:typeof self!="undefined"?self:typeof window!="undefined"?window:{})},{}],2:[function(n,i,o){"use strict";var s=n(1);function a(){}var u={},c=["REJECTED"],l=["FULFILLED"],d=["PENDING"];i.exports=h;function h(I){if(typeof I!="function")throw new TypeError("resolver must be a function");this.state=d,this.queue=[],this.outcome=void 0,I!==a&&R(this,I)}h.prototype.catch=function(I){return this.then(null,I)},h.prototype.then=function(I,G){if(typeof I!="function"&&this.state===l||typeof G!="function"&&this.state===c)return this;var L=new this.constructor(a);if(this.state!==d){var W=this.state===l?I:G;S(L,W,this.outcome)}else this.queue.push(new _(L,I,G));return L};function _(I,G,L){this.promise=I,typeof G=="function"&&(this.onFulfilled=G,this.callFulfilled=this.otherCallFulfilled),typeof L=="function"&&(this.onRejected=L,this.callRejected=this.otherCallRejected)}_.prototype.callFulfilled=function(I){u.resolve(this.promise,I)},_.prototype.otherCallFulfilled=function(I){S(this.promise,this.onFulfilled,I)},_.prototype.callRejected=function(I){u.reject(this.promise,I)},_.prototype.otherCallRejected=function(I){S(this.promise,this.onRejected,I)};function S(I,G,L){s(function(){var W;try{W=G(L)}catch(oe){return u.reject(I,oe)}W===I?u.reject(I,new TypeError("Cannot resolve promise with itself")):u.resolve(I,W)})}u.resolve=function(I,G){var L=A(T,G);if(L.status==="error")return u.reject(I,L.value);var W=L.value;if(W)R(I,W);else{I.state=l,I.outcome=G;for(var oe=-1,ye=I.queue.length;++oe<ye;)I.queue[oe].callFulfilled(G)}return I},u.reject=function(I,G){I.state=c,I.outcome=G;for(var L=-1,W=I.queue.length;++L<W;)I.queue[L].callRejected(G);return I};function T(I){var G=I&&I.then;if(I&&(typeof I=="object"||typeof I=="function")&&typeof G=="function")return function(){G.apply(I,arguments)}}function R(I,G){var L=!1;function W(Ie){L||(L=!0,u.reject(I,Ie))}function oe(Ie){L||(L=!0,u.resolve(I,Ie))}function ye(){G(oe,W)}var Re=A(ye);Re.status==="error"&&W(Re.value)}function A(I,G){var L={};try{L.value=I(G),L.status="success"}catch(W){L.status="error",L.value=W}return L}h.resolve=F;function F(I){return I instanceof this?I:u.resolve(new this(a),I)}h.reject=k;function k(I){var G=new this(a);return u.reject(G,I)}h.all=xe;function xe(I){var G=this;if(Object.prototype.toString.call(I)!=="[object Array]")return this.reject(new TypeError("must be an array"));var L=I.length,W=!1;if(!L)return this.resolve([]);for(var oe=new Array(L),ye=0,Re=-1,Ie=new this(a);++Re<L;)Je(I[Re],Re);return Ie;function Je(wr,sn){G.resolve(wr).then(Pi,function($t){W||(W=!0,u.reject(Ie,$t))});function Pi($t){oe[sn]=$t,++ye===L&&!W&&(W=!0,u.resolve(Ie,oe))}}}h.race=lt;function lt(I){var G=this;if(Object.prototype.toString.call(I)!=="[object Array]")return this.reject(new TypeError("must be an array"));var L=I.length,W=!1;if(!L)return this.resolve([]);for(var oe=-1,ye=new this(a);++oe<L;)Re(I[oe]);return ye;function Re(Ie){G.resolve(Ie).then(function(Je){W||(W=!0,u.resolve(ye,Je))},function(Je){W||(W=!0,u.reject(ye,Je))})}}},{"1":1}],3:[function(n,i,o){(function(s){"use strict";typeof s.Promise!="function"&&(s.Promise=n(2))}).call(this,typeof global!="undefined"?global:typeof self!="undefined"?self:typeof window!="undefined"?window:{})},{"2":2}],4:[function(n,i,o){"use strict";var s=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(f){return typeof f}:function(f){return f&&typeof Symbol=="function"&&f.constructor===Symbol&&f!==Symbol.prototype?"symbol":typeof f};function a(f,v){if(!(f instanceof v))throw new TypeError("Cannot call a class as a function")}function u(){try{if(typeof indexedDB!="undefined")return indexedDB;if(typeof webkitIndexedDB!="undefined")return webkitIndexedDB;if(typeof mozIndexedDB!="undefined")return mozIndexedDB;if(typeof OIndexedDB!="undefined")return OIndexedDB;if(typeof msIndexedDB!="undefined")return msIndexedDB}catch{return}}var c=u();function l(){try{if(!c||!c.open)return!1;var f=typeof openDatabase!="undefined"&&/(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)&&!/BlackBerry/.test(navigator.platform),v=typeof fetch=="function"&&fetch.toString().indexOf("[native code")!==-1;return(!f||v)&&typeof indexedDB!="undefined"&&typeof IDBKeyRange!="undefined"}catch{return!1}}function d(f,v){f=f||[],v=v||{};try{return new Blob(f,v)}catch(g){if(g.name!=="TypeError")throw g;for(var p=typeof BlobBuilder!="undefined"?BlobBuilder:typeof MSBlobBuilder!="undefined"?MSBlobBuilder:typeof MozBlobBuilder!="undefined"?MozBlobBuilder:WebKitBlobBuilder,m=new p,y=0;y<f.length;y+=1)m.append(f[y]);return m.getBlob(v.type)}}typeof Promise=="undefined"&&n(3);var h=Promise;function _(f,v){v&&f.then(function(p){v(null,p)},function(p){v(p)})}function S(f,v,p){typeof v=="function"&&f.then(v),typeof p=="function"&&f.catch(p)}function T(f){return typeof f!="string"&&(console.warn(f+" used as a key, but it is not a string."),f=String(f)),f}function R(){if(arguments.length&&typeof arguments[arguments.length-1]=="function")return arguments[arguments.length-1]}var A="local-forage-detect-blob-support",F=void 0,k={},xe=Object.prototype.toString,lt="readonly",I="readwrite";function G(f){for(var v=f.length,p=new ArrayBuffer(v),m=new Uint8Array(p),y=0;y<v;y++)m[y]=f.charCodeAt(y);return p}function L(f){return new h(function(v){var p=f.transaction(A,I),m=d([""]);p.objectStore(A).put(m,"key"),p.onabort=function(y){y.preventDefault(),y.stopPropagation(),v(!1)},p.oncomplete=function(){var y=navigator.userAgent.match(/Chrome\/(\d+)/),g=navigator.userAgent.match(/Edge\//);v(g||!y||parseInt(y[1],10)>=43)}}).catch(function(){return!1})}function W(f){return typeof F=="boolean"?h.resolve(F):L(f).then(function(v){return F=v,F})}function oe(f){var v=k[f.name],p={};p.promise=new h(function(m,y){p.resolve=m,p.reject=y}),v.deferredOperations.push(p),v.dbReady?v.dbReady=v.dbReady.then(function(){return p.promise}):v.dbReady=p.promise}function ye(f){var v=k[f.name],p=v.deferredOperations.pop();if(p)return p.resolve(),p.promise}function Re(f,v){var p=k[f.name],m=p.deferredOperations.pop();if(m)return m.reject(v),m.promise}function Ie(f,v){return new h(function(p,m){if(k[f.name]=k[f.name]||Wa(),f.db)if(v)oe(f),f.db.close();else return p(f.db);var y=[f.name];v&&y.push(f.version);var g=c.open.apply(c,y);v&&(g.onupgradeneeded=function(E){var w=g.result;try{w.createObjectStore(f.storeName),E.oldVersion<=1&&w.createObjectStore(A)}catch(O){if(O.name==="ConstraintError")console.warn('The database "'+f.name+'" has been upgraded from version '+E.oldVersion+" to version "+E.newVersion+', but the storage "'+f.storeName+'" already exists.');else throw O}}),g.onerror=function(E){E.preventDefault(),m(g.error)},g.onsuccess=function(){var E=g.result;E.onversionchange=function(w){w.target.close()},p(E),ye(f)}})}function Je(f){return Ie(f,!1)}function wr(f){return Ie(f,!0)}function sn(f,v){if(!f.db)return!0;var p=!f.db.objectStoreNames.contains(f.storeName),m=f.version<f.db.version,y=f.version>f.db.version;if(m&&(f.version!==v&&console.warn('The database "'+f.name+`" can't be downgraded from version `+f.db.version+" to version "+f.version+"."),f.version=f.db.version),y||p){if(p){var g=f.db.version+1;g>f.version&&(f.version=g)}return!0}return!1}function Pi(f){return new h(function(v,p){var m=new FileReader;m.onerror=p,m.onloadend=function(y){var g=btoa(y.target.result||"");v({__local_forage_encoded_blob:!0,data:g,type:f.type})},m.readAsBinaryString(f)})}function $t(f){var v=G(atob(f.data));return d([v],{type:f.type})}function Va(f){return f&&f.__local_forage_encoded_blob}function lp(f){var v=this,p=v._initReady().then(function(){var m=k[v._dbInfo.name];if(m&&m.dbReady)return m.dbReady});return S(p,f,f),p}function fp(f){oe(f);for(var v=k[f.name],p=v.forages,m=0;m<p.length;m++){var y=p[m];y._dbInfo.db&&(y._dbInfo.db.close(),y._dbInfo.db=null)}return f.db=null,Je(f).then(function(g){return f.db=g,sn(f)?wr(f):g}).then(function(g){f.db=v.db=g;for(var E=0;E<p.length;E++)p[E]._dbInfo.db=g}).catch(function(g){throw Re(f,g),g})}function Xe(f,v,p,m){m===void 0&&(m=1);try{var y=f.db.transaction(f.storeName,v);p(null,y)}catch(g){if(m>0&&(!f.db||g.name==="InvalidStateError"||g.name==="NotFoundError"))return h.resolve().then(function(){if(!f.db||g.name==="NotFoundError"&&!f.db.objectStoreNames.contains(f.storeName)&&f.version<=f.db.version)return f.db&&(f.version=f.db.version+1),wr(f)}).then(function(){return fp(f).then(function(){Xe(f,v,p,m-1)})}).catch(p);p(g)}}function Wa(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function dp(f){var v=this,p={db:null};if(f)for(var m in f)p[m]=f[m];var y=k[p.name];y||(y=Wa(),k[p.name]=y),y.forages.push(v),v._initReady||(v._initReady=v.ready,v.ready=lp);var g=[];function E(){return h.resolve()}for(var w=0;w<y.forages.length;w++){var O=y.forages[w];O!==v&&g.push(O._initReady().catch(E))}var C=y.forages.slice(0);return h.all(g).then(function(){return p.db=y.db,Je(p)}).then(function(x){return p.db=x,sn(p,v._defaultConfig.version)?wr(p):x}).then(function(x){p.db=y.db=x,v._dbInfo=p;for(var P=0;P<C.length;P++){var j=C[P];j!==v&&(j._dbInfo.db=p.db,j._dbInfo.version=p.version)}})}function pp(f,v){var p=this;f=T(f);var m=new h(function(y,g){p.ready().then(function(){Xe(p._dbInfo,lt,function(E,w){if(E)return g(E);try{var O=w.objectStore(p._dbInfo.storeName),C=O.get(f);C.onsuccess=function(){var x=C.result;x===void 0&&(x=null),Va(x)&&(x=$t(x)),y(x)},C.onerror=function(){g(C.error)}}catch(x){g(x)}})}).catch(g)});return _(m,v),m}function hp(f,v){var p=this,m=new h(function(y,g){p.ready().then(function(){Xe(p._dbInfo,lt,function(E,w){if(E)return g(E);try{var O=w.objectStore(p._dbInfo.storeName),C=O.openCursor(),x=1;C.onsuccess=function(){var P=C.result;if(P){var j=P.value;Va(j)&&(j=$t(j));var z=f(j,P.key,x++);z!==void 0?y(z):P.continue()}else y()},C.onerror=function(){g(C.error)}}catch(P){g(P)}})}).catch(g)});return _(m,v),m}function vp(f,v,p){var m=this;f=T(f);var y=new h(function(g,E){var w;m.ready().then(function(){return w=m._dbInfo,xe.call(v)==="[object Blob]"?W(w.db).then(function(O){return O?v:Pi(v)}):v}).then(function(O){Xe(m._dbInfo,I,function(C,x){if(C)return E(C);try{var P=x.objectStore(m._dbInfo.storeName);O===null&&(O=void 0);var j=P.put(O,f);x.oncomplete=function(){O===void 0&&(O=null),g(O)},x.onabort=x.onerror=function(){var z=j.error?j.error:j.transaction.error;E(z)}}catch(z){E(z)}})}).catch(E)});return _(y,p),y}function _p(f,v){var p=this;f=T(f);var m=new h(function(y,g){p.ready().then(function(){Xe(p._dbInfo,I,function(E,w){if(E)return g(E);try{var O=w.objectStore(p._dbInfo.storeName),C=O.delete(f);w.oncomplete=function(){y()},w.onerror=function(){g(C.error)},w.onabort=function(){var x=C.error?C.error:C.transaction.error;g(x)}}catch(x){g(x)}})}).catch(g)});return _(m,v),m}function gp(f){var v=this,p=new h(function(m,y){v.ready().then(function(){Xe(v._dbInfo,I,function(g,E){if(g)return y(g);try{var w=E.objectStore(v._dbInfo.storeName),O=w.clear();E.oncomplete=function(){m()},E.onabort=E.onerror=function(){var C=O.error?O.error:O.transaction.error;y(C)}}catch(C){y(C)}})}).catch(y)});return _(p,f),p}function mp(f){var v=this,p=new h(function(m,y){v.ready().then(function(){Xe(v._dbInfo,lt,function(g,E){if(g)return y(g);try{var w=E.objectStore(v._dbInfo.storeName),O=w.count();O.onsuccess=function(){m(O.result)},O.onerror=function(){y(O.error)}}catch(C){y(C)}})}).catch(y)});return _(p,f),p}function yp(f,v){var p=this,m=new h(function(y,g){if(f<0){y(null);return}p.ready().then(function(){Xe(p._dbInfo,lt,function(E,w){if(E)return g(E);try{var O=w.objectStore(p._dbInfo.storeName),C=!1,x=O.openKeyCursor();x.onsuccess=function(){var P=x.result;if(!P){y(null);return}f===0||C?y(P.key):(C=!0,P.advance(f))},x.onerror=function(){g(x.error)}}catch(P){g(P)}})}).catch(g)});return _(m,v),m}function bp(f){var v=this,p=new h(function(m,y){v.ready().then(function(){Xe(v._dbInfo,lt,function(g,E){if(g)return y(g);try{var w=E.objectStore(v._dbInfo.storeName),O=w.openKeyCursor(),C=[];O.onsuccess=function(){var x=O.result;if(!x){m(C);return}C.push(x.key),x.continue()},O.onerror=function(){y(O.error)}}catch(x){y(x)}})}).catch(y)});return _(p,f),p}function Sp(f,v){v=R.apply(this,arguments);var p=this.config();f=typeof f!="function"&&f||{},f.name||(f.name=f.name||p.name,f.storeName=f.storeName||p.storeName);var m=this,y;if(!f.name)y=h.reject("Invalid arguments");else{var g=f.name===p.name&&m._dbInfo.db,E=g?h.resolve(m._dbInfo.db):Je(f).then(function(w){var O=k[f.name],C=O.forages;O.db=w;for(var x=0;x<C.length;x++)C[x]._dbInfo.db=w;return w});f.storeName?y=E.then(function(w){if(!!w.objectStoreNames.contains(f.storeName)){var O=w.version+1;oe(f);var C=k[f.name],x=C.forages;w.close();for(var P=0;P<x.length;P++){var j=x[P];j._dbInfo.db=null,j._dbInfo.version=O}var z=new h(function($,Q){var J=c.open(f.name,O);J.onerror=function(Ae){var Cr=J.result;Cr.close(),Q(Ae)},J.onupgradeneeded=function(){var Ae=J.result;Ae.deleteObjectStore(f.storeName)},J.onsuccess=function(){var Ae=J.result;Ae.close(),$(Ae)}});return z.then(function($){C.db=$;for(var Q=0;Q<x.length;Q++){var J=x[Q];J._dbInfo.db=$,ye(J._dbInfo)}}).catch(function($){throw(Re(f,$)||h.resolve()).catch(function(){}),$})}}):y=E.then(function(w){oe(f);var O=k[f.name],C=O.forages;w.close();for(var x=0;x<C.length;x++){var P=C[x];P._dbInfo.db=null}var j=new h(function(z,$){var Q=c.deleteDatabase(f.name);Q.onerror=function(){var J=Q.result;J&&J.close(),$(Q.error)},Q.onblocked=function(){console.warn('dropInstance blocked for database "'+f.name+'" until all open connections are closed')},Q.onsuccess=function(){var J=Q.result;J&&J.close(),z(J)}});return j.then(function(z){O.db=z;for(var $=0;$<C.length;$++){var Q=C[$];ye(Q._dbInfo)}}).catch(function(z){throw(Re(f,z)||h.resolve()).catch(function(){}),z})})}return _(y,v),y}var Ep={_driver:"asyncStorage",_initStorage:dp,_support:l(),iterate:hp,getItem:pp,setItem:vp,removeItem:_p,clear:gp,length:mp,key:yp,keys:bp,dropInstance:Sp};function Tp(){return typeof openDatabase=="function"}var ft="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",wp="~~local_forage_type~",$a=/^~~local_forage_type~([^~]+)~/,an="__lfsc__:",Ni=an.length,qi="arbf",ki="blob",Ya="si08",Ka="ui08",Ja="uic8",Xa="si16",Qa="si32",Za="ur16",eu="ui32",tu="fl32",ru="fl64",nu=Ni+qi.length,iu=Object.prototype.toString;function ou(f){var v=f.length*.75,p=f.length,m,y=0,g,E,w,O;f[f.length-1]==="="&&(v--,f[f.length-2]==="="&&v--);var C=new ArrayBuffer(v),x=new Uint8Array(C);for(m=0;m<p;m+=4)g=ft.indexOf(f[m]),E=ft.indexOf(f[m+1]),w=ft.indexOf(f[m+2]),O=ft.indexOf(f[m+3]),x[y++]=g<<2|E>>4,x[y++]=(E&15)<<4|w>>2,x[y++]=(w&3)<<6|O&63;return C}function Di(f){var v=new Uint8Array(f),p="",m;for(m=0;m<v.length;m+=3)p+=ft[v[m]>>2],p+=ft[(v[m]&3)<<4|v[m+1]>>4],p+=ft[(v[m+1]&15)<<2|v[m+2]>>6],p+=ft[v[m+2]&63];return v.length%3===2?p=p.substring(0,p.length-1)+"=":v.length%3===1&&(p=p.substring(0,p.length-2)+"=="),p}function Op(f,v){var p="";if(f&&(p=iu.call(f)),f&&(p==="[object ArrayBuffer]"||f.buffer&&iu.call(f.buffer)==="[object ArrayBuffer]")){var m,y=an;f instanceof ArrayBuffer?(m=f,y+=qi):(m=f.buffer,p==="[object Int8Array]"?y+=Ya:p==="[object Uint8Array]"?y+=Ka:p==="[object Uint8ClampedArray]"?y+=Ja:p==="[object Int16Array]"?y+=Xa:p==="[object Uint16Array]"?y+=Za:p==="[object Int32Array]"?y+=Qa:p==="[object Uint32Array]"?y+=eu:p==="[object Float32Array]"?y+=tu:p==="[object Float64Array]"?y+=ru:v(new Error("Failed to get type for BinaryArray"))),v(y+Di(m))}else if(p==="[object Blob]"){var g=new FileReader;g.onload=function(){var E=wp+f.type+"~"+Di(this.result);v(an+ki+E)},g.readAsArrayBuffer(f)}else try{v(JSON.stringify(f))}catch(E){console.error("Couldn't convert value into a JSON string: ",f),v(null,E)}}function Cp(f){if(f.substring(0,Ni)!==an)return JSON.parse(f);var v=f.substring(nu),p=f.substring(Ni,nu),m;if(p===ki&&$a.test(v)){var y=v.match($a);m=y[1],v=v.substring(y[0].length)}var g=ou(v);switch(p){case qi:return g;case ki:return d([g],{type:m});case Ya:return new Int8Array(g);case Ka:return new Uint8Array(g);case Ja:return new Uint8ClampedArray(g);case Xa:return new Int16Array(g);case Za:return new Uint16Array(g);case Qa:return new Int32Array(g);case eu:return new Uint32Array(g);case tu:return new Float32Array(g);case ru:return new Float64Array(g);default:throw new Error("Unkown type: "+p)}}var Li={serialize:Op,deserialize:Cp,stringToBuffer:ou,bufferToString:Di};function su(f,v,p,m){f.executeSql("CREATE TABLE IF NOT EXISTS "+v.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],p,m)}function xp(f){var v=this,p={db:null};if(f)for(var m in f)p[m]=typeof f[m]!="string"?f[m].toString():f[m];var y=new h(function(g,E){try{p.db=openDatabase(p.name,String(p.version),p.description,p.size)}catch(w){return E(w)}p.db.transaction(function(w){su(w,p,function(){v._dbInfo=p,g()},function(O,C){E(C)})},E)});return p.serializer=Li,y}function dt(f,v,p,m,y,g){f.executeSql(p,m,y,function(E,w){w.code===w.SYNTAX_ERR?E.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[v.storeName],function(O,C){C.rows.length?g(O,w):su(O,v,function(){O.executeSql(p,m,y,g)},g)},g):g(E,w)},g)}function Rp(f,v){var p=this;f=T(f);var m=new h(function(y,g){p.ready().then(function(){var E=p._dbInfo;E.db.transaction(function(w){dt(w,E,"SELECT * FROM "+E.storeName+" WHERE key = ? LIMIT 1",[f],function(O,C){var x=C.rows.length?C.rows.item(0).value:null;x&&(x=E.serializer.deserialize(x)),y(x)},function(O,C){g(C)})})}).catch(g)});return _(m,v),m}function Ip(f,v){var p=this,m=new h(function(y,g){p.ready().then(function(){var E=p._dbInfo;E.db.transaction(function(w){dt(w,E,"SELECT * FROM "+E.storeName,[],function(O,C){for(var x=C.rows,P=x.length,j=0;j<P;j++){var z=x.item(j),$=z.value;if($&&($=E.serializer.deserialize($)),$=f($,z.key,j+1),$!==void 0){y($);return}}y()},function(O,C){g(C)})})}).catch(g)});return _(m,v),m}function au(f,v,p,m){var y=this;f=T(f);var g=new h(function(E,w){y.ready().then(function(){v===void 0&&(v=null);var O=v,C=y._dbInfo;C.serializer.serialize(v,function(x,P){P?w(P):C.db.transaction(function(j){dt(j,C,"INSERT OR REPLACE INTO "+C.storeName+" (key, value) VALUES (?, ?)",[f,x],function(){E(O)},function(z,$){w($)})},function(j){if(j.code===j.QUOTA_ERR){if(m>0){E(au.apply(y,[f,O,p,m-1]));return}w(j)}})})}).catch(w)});return _(g,p),g}function Ap(f,v,p){return au.apply(this,[f,v,p,1])}function Mp(f,v){var p=this;f=T(f);var m=new h(function(y,g){p.ready().then(function(){var E=p._dbInfo;E.db.transaction(function(w){dt(w,E,"DELETE FROM "+E.storeName+" WHERE key = ?",[f],function(){y()},function(O,C){g(C)})})}).catch(g)});return _(m,v),m}function Pp(f){var v=this,p=new h(function(m,y){v.ready().then(function(){var g=v._dbInfo;g.db.transaction(function(E){dt(E,g,"DELETE FROM "+g.storeName,[],function(){m()},function(w,O){y(O)})})}).catch(y)});return _(p,f),p}function Np(f){var v=this,p=new h(function(m,y){v.ready().then(function(){var g=v._dbInfo;g.db.transaction(function(E){dt(E,g,"SELECT COUNT(key) as c FROM "+g.storeName,[],function(w,O){var C=O.rows.item(0).c;m(C)},function(w,O){y(O)})})}).catch(y)});return _(p,f),p}function qp(f,v){var p=this,m=new h(function(y,g){p.ready().then(function(){var E=p._dbInfo;E.db.transaction(function(w){dt(w,E,"SELECT key FROM "+E.storeName+" WHERE id = ? LIMIT 1",[f+1],function(O,C){var x=C.rows.length?C.rows.item(0).key:null;y(x)},function(O,C){g(C)})})}).catch(g)});return _(m,v),m}function kp(f){var v=this,p=new h(function(m,y){v.ready().then(function(){var g=v._dbInfo;g.db.transaction(function(E){dt(E,g,"SELECT key FROM "+g.storeName,[],function(w,O){for(var C=[],x=0;x<O.rows.length;x++)C.push(O.rows.item(x).key);m(C)},function(w,O){y(O)})})}).catch(y)});return _(p,f),p}function Dp(f){return new h(function(v,p){f.transaction(function(m){m.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'",[],function(y,g){for(var E=[],w=0;w<g.rows.length;w++)E.push(g.rows.item(w).name);v({db:f,storeNames:E})},function(y,g){p(g)})},function(m){p(m)})})}function Lp(f,v){v=R.apply(this,arguments);var p=this.config();f=typeof f!="function"&&f||{},f.name||(f.name=f.name||p.name,f.storeName=f.storeName||p.storeName);var m=this,y;return f.name?y=new h(function(g){var E;f.name===p.name?E=m._dbInfo.db:E=openDatabase(f.name,"","",0),f.storeName?g({db:E,storeNames:[f.storeName]}):g(Dp(E))}).then(function(g){return new h(function(E,w){g.db.transaction(function(O){function C(z){return new h(function($,Q){O.executeSql("DROP TABLE IF EXISTS "+z,[],function(){$()},function(J,Ae){Q(Ae)})})}for(var x=[],P=0,j=g.storeNames.length;P<j;P++)x.push(C(g.storeNames[P]));h.all(x).then(function(){E()}).catch(function(z){w(z)})},function(O){w(O)})})}):y=h.reject("Invalid arguments"),_(y,v),y}var Fp={_driver:"webSQLStorage",_initStorage:xp,_support:Tp(),iterate:Ip,getItem:Rp,setItem:Ap,removeItem:Mp,clear:Pp,length:Np,key:qp,keys:kp,dropInstance:Lp};function jp(){try{return typeof localStorage!="undefined"&&"setItem"in localStorage&&!!localStorage.setItem}catch{return!1}}function uu(f,v){var p=f.name+"/";return f.storeName!==v.storeName&&(p+=f.storeName+"/"),p}function Up(){var f="_localforage_support_test";try{return localStorage.setItem(f,!0),localStorage.removeItem(f),!1}catch{return!0}}function Hp(){return!Up()||localStorage.length>0}function Bp(f){var v=this,p={};if(f)for(var m in f)p[m]=f[m];return p.keyPrefix=uu(f,v._defaultConfig),Hp()?(v._dbInfo=p,p.serializer=Li,h.resolve()):h.reject()}function Gp(f){var v=this,p=v.ready().then(function(){for(var m=v._dbInfo.keyPrefix,y=localStorage.length-1;y>=0;y--){var g=localStorage.key(y);g.indexOf(m)===0&&localStorage.removeItem(g)}});return _(p,f),p}function zp(f,v){var p=this;f=T(f);var m=p.ready().then(function(){var y=p._dbInfo,g=localStorage.getItem(y.keyPrefix+f);return g&&(g=y.serializer.deserialize(g)),g});return _(m,v),m}function Vp(f,v){var p=this,m=p.ready().then(function(){for(var y=p._dbInfo,g=y.keyPrefix,E=g.length,w=localStorage.length,O=1,C=0;C<w;C++){var x=localStorage.key(C);if(x.indexOf(g)===0){var P=localStorage.getItem(x);if(P&&(P=y.serializer.deserialize(P)),P=f(P,x.substring(E),O++),P!==void 0)return P}}});return _(m,v),m}function Wp(f,v){var p=this,m=p.ready().then(function(){var y=p._dbInfo,g;try{g=localStorage.key(f)}catch{g=null}return g&&(g=g.substring(y.keyPrefix.length)),g});return _(m,v),m}function $p(f){var v=this,p=v.ready().then(function(){for(var m=v._dbInfo,y=localStorage.length,g=[],E=0;E<y;E++){var w=localStorage.key(E);w.indexOf(m.keyPrefix)===0&&g.push(w.substring(m.keyPrefix.length))}return g});return _(p,f),p}function Yp(f){var v=this,p=v.keys().then(function(m){return m.length});return _(p,f),p}function Kp(f,v){var p=this;f=T(f);var m=p.ready().then(function(){var y=p._dbInfo;localStorage.removeItem(y.keyPrefix+f)});return _(m,v),m}function Jp(f,v,p){var m=this;f=T(f);var y=m.ready().then(function(){v===void 0&&(v=null);var g=v;return new h(function(E,w){var O=m._dbInfo;O.serializer.serialize(v,function(C,x){if(x)w(x);else try{localStorage.setItem(O.keyPrefix+f,C),E(g)}catch(P){(P.name==="QuotaExceededError"||P.name==="NS_ERROR_DOM_QUOTA_REACHED")&&w(P),w(P)}})})});return _(y,p),y}function Xp(f,v){if(v=R.apply(this,arguments),f=typeof f!="function"&&f||{},!f.name){var p=this.config();f.name=f.name||p.name,f.storeName=f.storeName||p.storeName}var m=this,y;return f.name?y=new h(function(g){f.storeName?g(uu(f,m._defaultConfig)):g(f.name+"/")}).then(function(g){for(var E=localStorage.length-1;E>=0;E--){var w=localStorage.key(E);w.indexOf(g)===0&&localStorage.removeItem(w)}}):y=h.reject("Invalid arguments"),_(y,v),y}var Qp={_driver:"localStorageWrapper",_initStorage:Bp,_support:jp(),iterate:Vp,getItem:zp,setItem:Jp,removeItem:Kp,clear:Gp,length:Yp,key:Wp,keys:$p,dropInstance:Xp},Zp=function(v,p){return v===p||typeof v=="number"&&typeof p=="number"&&isNaN(v)&&isNaN(p)},eh=function(v,p){for(var m=v.length,y=0;y<m;){if(Zp(v[y],p))return!0;y++}return!1},cu=Array.isArray||function(f){return Object.prototype.toString.call(f)==="[object Array]"},Or={},lu={},Yt={INDEXEDDB:Ep,WEBSQL:Fp,LOCALSTORAGE:Qp},th=[Yt.INDEXEDDB._driver,Yt.WEBSQL._driver,Yt.LOCALSTORAGE._driver],un=["dropInstance"],Fi=["clear","getItem","iterate","key","keys","length","removeItem","setItem"].concat(un),rh={description:"",driver:th.slice(),name:"localforage",size:4980736,storeName:"keyvaluepairs",version:1};function nh(f,v){f[v]=function(){var p=arguments;return f.ready().then(function(){return f[v].apply(f,p)})}}function ji(){for(var f=1;f<arguments.length;f++){var v=arguments[f];if(v)for(var p in v)v.hasOwnProperty(p)&&(cu(v[p])?arguments[0][p]=v[p].slice():arguments[0][p]=v[p])}return arguments[0]}var ih=function(){function f(v){a(this,f);for(var p in Yt)if(Yt.hasOwnProperty(p)){var m=Yt[p],y=m._driver;this[p]=y,Or[y]||this.defineDriver(m)}this._defaultConfig=ji({},rh),this._config=ji({},this._defaultConfig,v),this._driverSet=null,this._initDriver=null,this._ready=!1,this._dbInfo=null,this._wrapLibraryMethodsWithReady(),this.setDriver(this._config.driver).catch(function(){})}return f.prototype.config=function(p){if((typeof p=="undefined"?"undefined":s(p))==="object"){if(this._ready)return new Error("Can't call config() after localforage has been used.");for(var m in p){if(m==="storeName"&&(p[m]=p[m].replace(/\W/g,"_")),m==="version"&&typeof p[m]!="number")return new Error("Database version must be a number.");this._config[m]=p[m]}return"driver"in p&&p.driver?this.setDriver(this._config.driver):!0}else return typeof p=="string"?this._config[p]:this._config},f.prototype.defineDriver=function(p,m,y){var g=new h(function(E,w){try{var O=p._driver,C=new Error("Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver");if(!p._driver){w(C);return}for(var x=Fi.concat("_initStorage"),P=0,j=x.length;P<j;P++){var z=x[P],$=!eh(un,z);if(($||p[z])&&typeof p[z]!="function"){w(C);return}}var Q=function(){for(var Cr=function(ah){return function(){var uh=new Error("Method "+ah+" is not implemented by the current driver"),fu=h.reject(uh);return _(fu,arguments[arguments.length-1]),fu}},Ui=0,sh=un.length;Ui<sh;Ui++){var Hi=un[Ui];p[Hi]||(p[Hi]=Cr(Hi))}};Q();var J=function(Cr){Or[O]&&console.info("Redefining LocalForage driver: "+O),Or[O]=p,lu[O]=Cr,E()};"_support"in p?p._support&&typeof p._support=="function"?p._support().then(J,w):J(!!p._support):J(!0)}catch(Ae){w(Ae)}});return S(g,m,y),g},f.prototype.driver=function(){return this._driver||null},f.prototype.getDriver=function(p,m,y){var g=Or[p]?h.resolve(Or[p]):h.reject(new Error("Driver not found."));return S(g,m,y),g},f.prototype.getSerializer=function(p){var m=h.resolve(Li);return S(m,p),m},f.prototype.ready=function(p){var m=this,y=m._driverSet.then(function(){return m._ready===null&&(m._ready=m._initDriver()),m._ready});return S(y,p,p),y},f.prototype.setDriver=function(p,m,y){var g=this;cu(p)||(p=[p]);var E=this._getSupportedDrivers(p);function w(){g._config.driver=g.driver()}function O(P){return g._extend(P),w(),g._ready=g._initStorage(g._config),g._ready}function C(P){return function(){var j=0;function z(){for(;j<P.length;){var $=P[j];return j++,g._dbInfo=null,g._ready=null,g.getDriver($).then(O).catch(z)}w();var Q=new Error("No available storage method found.");return g._driverSet=h.reject(Q),g._driverSet}return z()}}var x=this._driverSet!==null?this._driverSet.catch(function(){return h.resolve()}):h.resolve();return this._driverSet=x.then(function(){var P=E[0];return g._dbInfo=null,g._ready=null,g.getDriver(P).then(function(j){g._driver=j._driver,w(),g._wrapLibraryMethodsWithReady(),g._initDriver=C(E)})}).catch(function(){w();var P=new Error("No available storage method found.");return g._driverSet=h.reject(P),g._driverSet}),S(this._driverSet,m,y),this._driverSet},f.prototype.supports=function(p){return!!lu[p]},f.prototype._extend=function(p){ji(this,p)},f.prototype._getSupportedDrivers=function(p){for(var m=[],y=0,g=p.length;y<g;y++){var E=p[y];this.supports(E)&&m.push(E)}return m},f.prototype._wrapLibraryMethodsWithReady=function(){for(var p=0,m=Fi.length;p<m;p++)nh(this,Fi[p])},f.prototype.createInstance=function(p){return new f(p)},f}(),oh=new ih;i.exports=oh},{"3":3}]},{},[4])(4)})});var md=b(ha=>{Object.defineProperty(ha,"__esModule",{value:!0});var He=q(),at=N(),$S=He.__importDefault(gd()),YS=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this.global=at.getGlobalObject(),this.maxStoredEvents=e.maxStoredEvents||30,this.offlineEventStore=$S.default.createInstance({name:"sentry/offlineEventStore"})}return t.prototype.setupOnce=function(e,r){var n=this;this.hub=r(),"addEventListener"in this.global&&this.global.addEventListener("online",function(){n._sendEvents().catch(function(){at.logger.warn("could not send cached events")})}),e(function(i){return n.hub&&n.hub.getIntegration(t)&&"navigator"in n.global&&"onLine"in n.global.navigator&&!n.global.navigator.onLine?(n._cacheEvent(i).then(function(o){return n._enforceMaxEvents()}).catch(function(o){at.logger.warn("could not cache event while offline")}),null):i}),"navigator"in this.global&&"onLine"in this.global.navigator&&this.global.navigator.onLine&&this._sendEvents().catch(function(){at.logger.warn("could not send cached events")})},t.prototype._cacheEvent=function(e){return He.__awaiter(this,void 0,void 0,function(){return He.__generator(this,function(r){return[2,this.offlineEventStore.setItem(at.uuid4(),at.normalize(e))]})})},t.prototype._enforceMaxEvents=function(){return He.__awaiter(this,void 0,void 0,function(){var e,r=this;return He.__generator(this,function(n){return e=[],[2,this.offlineEventStore.iterate(function(i,o,s){e.push({cacheKey:o,event:i})}).then(function(){return r._purgeEvents(e.sort(function(i,o){return(o.event.timestamp||0)-(i.event.timestamp||0)}).slice(r.maxStoredEvents<e.length?r.maxStoredEvents:e.length).map(function(i){return i.cacheKey}))}).catch(function(i){at.logger.warn("could not enforce max events")})]})})},t.prototype._purgeEvent=function(e){return He.__awaiter(this,void 0,void 0,function(){return He.__generator(this,function(r){return[2,this.offlineEventStore.removeItem(e)]})})},t.prototype._purgeEvents=function(e){return He.__awaiter(this,void 0,void 0,function(){var r=this;return He.__generator(this,function(n){return[2,Promise.all(e.map(function(i){return r._purgeEvent(i)})).then()]})})},t.prototype._sendEvents=function(){return He.__awaiter(this,void 0,void 0,function(){var e=this;return He.__generator(this,function(r){return[2,this.offlineEventStore.iterate(function(n,i,o){e.hub?(e.hub.captureEvent(n),e._purgeEvent(i).catch(function(s){at.logger.warn("could not purge event from cache")})):at.logger.warn("no hub found - could not send cached event")})]})})},t.id="Offline",t}();ha.Offline=YS});var bd=b(va=>{Object.defineProperty(va,"__esModule",{value:!0});var KS=q(),yd=N(),JS=function(){function t(e){e===void 0&&(e={types:["crash","deprecation","intervention"]}),this._options=e,this.name=t.id}return t.prototype.setupOnce=function(e,r){if(!!yd.supportsReportingObserver()){this._getCurrentHub=r;var n=new(yd.getGlobalObject()).ReportingObserver(this.handler.bind(this),{buffered:!0,types:this._options.types});n.observe()}},t.prototype.handler=function(e){var r,n,i=this._getCurrentHub&&this._getCurrentHub();if(!(!i||!i.getIntegration(t))){var o=function(c){i.withScope(function(l){l.setExtra("url",c.url);var d="ReportingObserver ["+c.type+"]",h="No details available";if(c.body){var _={};for(var S in c.body)_[S]=c.body[S];if(l.setExtra("body",_),c.type==="crash"){var T=c.body;h=[T.crashId||"",T.reason||""].join(" ").trim()||h}else{var T=c.body;h=T.message||h}}i.captureMessage(d+": "+h)})};try{for(var s=KS.__values(e),a=s.next();!a.done;a=s.next()){var u=a.value;o(u)}}catch(c){r={error:c}}finally{try{a&&!a.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}}},t.id="ReportingObserver",t}();va.ReportingObserver=JS});var Ed=b(_a=>{Object.defineProperty(_a,"__esModule",{value:!0});var Ye=q(),Sd=N(),XS=function(){function t(e){var r=this;e===void 0&&(e={}),this.name=t.id,this._prefix="app:///",this._iteratee=function(n){if(!n.filename)return n;var i=/^[A-Z]:\\/.test(n.filename),o=/^\//.test(n.filename);if(i||o){var s=i?n.filename.replace(/^[A-Z]:/,"").replace(/\\/g,"/"):n.filename,a=r._root?Sd.relative(r._root,s):Sd.basename(s);n.filename=""+r._prefix+a}return n},e.root&&(this._root=e.root),e.prefix&&(this._prefix=e.prefix),e.iteratee&&(this._iteratee=e.iteratee)}return t.prototype.setupOnce=function(e,r){e(function(n){var i=r().getIntegration(t);return i?i.process(n):n})},t.prototype.process=function(e){var r=e;return e.exception&&Array.isArray(e.exception.values)&&(r=this._processExceptionsEvent(r)),e.stacktrace&&(r=this._processStacktraceEvent(r)),r},t.prototype._processExceptionsEvent=function(e){var r=this;try{return Ye.__assign(Ye.__assign({},e),{exception:Ye.__assign(Ye.__assign({},e.exception),{values:e.exception.values.map(function(n){return Ye.__assign(Ye.__assign({},n),{stacktrace:r._processStacktrace(n.stacktrace)})})})})}catch{return e}},t.prototype._processStacktraceEvent=function(e){try{return Ye.__assign(Ye.__assign({},e),{stacktrace:this._processStacktrace(e.stacktrace)})}catch{return e}},t.prototype._processStacktrace=function(e){var r=this;return Ye.__assign(Ye.__assign({},e),{frames:e&&e.frames&&e.frames.map(function(n){return r._iteratee(n)})})},t.id="RewriteFrames",t}();_a.RewriteFrames=XS});var Td=b(ga=>{Object.defineProperty(ga,"__esModule",{value:!0});var Ti=q(),QS=function(){function t(){this.name=t.id,this._startTime=Date.now()}return t.prototype.setupOnce=function(e,r){e(function(n){var i=r().getIntegration(t);return i?i.process(n):n})},t.prototype.process=function(e){var r,n=Date.now();return Ti.__assign(Ti.__assign({},e),{extra:Ti.__assign(Ti.__assign({},e.extra),(r={},r["session:start"]=this._startTime,r["session:duration"]=n-this._startTime,r["session:end"]=n,r))})},t.id="SessionTiming",t}();ga.SessionTiming=QS});var wd=b(ma=>{Object.defineProperty(ma,"__esModule",{value:!0});var ZS=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(e,r){e(function(n){var i=r().getIntegration(t);return i?i.process(n):n})},t.prototype.process=function(e){for(var r=this._getFramesFromEvent(e),n=r.length-1;n>=0;n--){var i=r[n];if(i.in_app===!0){e.transaction=this._getTransaction(i);break}}return e},t.prototype._getFramesFromEvent=function(e){var r=e.exception&&e.exception.values&&e.exception.values[0];return r&&r.stacktrace&&r.stacktrace.frames||[]},t.prototype._getTransaction=function(e){return e.module||e.function?(e.module||"?")+"/"+(e.function||"?"):"<unknown>"},t.id="Transaction",t}();ma.Transaction=ZS});var xd=b(Oi=>{Object.defineProperty(Oi,"__esModule",{value:!0});var wi=q(),ut=N(),ya={id:"Tracing"},eE={id:"BrowserTracing"},ba="ui.vue",tE={activate:["activated","deactivated"],create:["beforeCreate","created"],destroy:["beforeDestroy","destroyed"],mount:["beforeMount","mounted"],update:["beforeUpdate","updated"]},rE=/(?:^|[-_/])(\w)/g,Od="root",Sa="anonymous component",nE=function(){function t(e){var r=this;this.name=t.id,this._componentsCache={},this._applyTracingHooks=function(n,i){if(!n.$options.$_sentryPerfHook){n.$options.$_sentryPerfHook=!0;var o=r._getComponentName(n),s=o===Od,a={},u=function(l){var d=ut.timestampWithMs();r._rootSpan?r._finishRootSpan(d,i):n.$once("hook:"+l,function(){var h=i().getIntegration(ya);if(h){r._tracingActivity=h.constructor.pushActivity("Vue Application Render");var _=h.constructor.getTransaction();_&&(r._rootSpan=_.startChild({description:"Application Render",op:ba}))}else{var S=Cd(i());S&&(r._rootSpan=S.startChild({description:"Application Render",op:ba}))}})},c=function(l,d){var h=Array.isArray(r._options.tracingOptions.trackComponents)?r._options.tracingOptions.trackComponents.indexOf(o)>-1:r._options.tracingOptions.trackComponents;if(!(!r._rootSpan||!h)){var _=ut.timestampWithMs(),S=a[d];S?(S.finish(),r._finishRootSpan(_,i)):n.$once("hook:"+l,function(){r._rootSpan&&(a[d]=r._rootSpan.startChild({description:"Vue <"+o+">",op:ba+"."+d}))})}};r._options.tracingOptions.hooks.forEach(function(l){var d=tE[l];if(!d){ut.logger.warn("Unknown hook: "+l);return}d.forEach(function(h){var _=s?u.bind(r,h):c.bind(r,h,l),S=n.$options[h];Array.isArray(S)?n.$options[h]=wi.__spread([_],S):typeof S=="function"?n.$options[h]=[_,S]:n.$options[h]=[_]})})}},ut.logger.log("You are still using the Vue.js integration, consider moving to @sentry/vue"),this._options=wi.__assign(wi.__assign({Vue:ut.getGlobalObject().Vue,attachProps:!0,logErrors:!1,tracing:!1},e),{tracingOptions:wi.__assign({hooks:["mount","update"],timeout:2e3,trackComponents:!1},e.tracingOptions)})}return t.prototype.setupOnce=function(e,r){if(!this._options.Vue){ut.logger.error("Vue integration is missing a Vue instance");return}this._attachErrorHandler(r),this._options.tracing&&this._startTracing(r)},t.prototype._getComponentName=function(e){if(!e)return Sa;if(e.$root===e)return Od;if(!e.$options)return Sa;if(e.$options.name)return e.$options.name;if(e.$options._componentTag)return e.$options._componentTag;if(e.$options.__file){var r=e.$options.__file.replace(/^[a-zA-Z]:/,"").replace(/\\/g,"/"),n=ut.basename(r,".vue");return this._componentsCache[n]||(this._componentsCache[n]=n.replace(rE,function(i,o){return o?o.toUpperCase():""}))}return Sa},t.prototype._finishRootSpan=function(e,r){var n=this;this._rootSpanTimer&&clearTimeout(this._rootSpanTimer),this._rootSpanTimer=setTimeout(function(){if(n._tracingActivity){var i=r().getIntegration(ya);i&&i.constructor.popActivity(n._tracingActivity)}n._rootSpan&&n._rootSpan.finish(e)},this._options.tracingOptions.timeout)},t.prototype._startTracing=function(e){var r=this._applyTracingHooks;this._options.Vue.mixin({beforeCreate:function(){e().getIntegration(ya)||e().getIntegration(eE)?r(this,e):ut.logger.error("Vue integration has tracing enabled, but Tracing integration is not configured")}})},t.prototype._attachErrorHandler=function(e){var r=this,n=this._options.Vue.config.errorHandler;this._options.Vue.config.errorHandler=function(i,o,s){var a={};if(o)try{a.componentName=r._getComponentName(o),r._options.attachProps&&(a.propsData=o.$options.propsData)}catch{ut.logger.warn("Unable to extract metadata from Vue component.")}s&&(a.lifecycleHook=s),e().getIntegration(t)&&setTimeout(function(){e().withScope(function(u){u.setContext("vue",a),e().captureException(i)})}),typeof n=="function"&&n.call(r._options.Vue,i,o,s),r._options.logErrors&&(r._options.Vue.util&&r._options.Vue.util.warn("Error in "+s+': "'+(i&&i.toString())+'"',o),console.error(i))}},t.id="Vue",t}();Oi.Vue=nE;function Cd(t){if(t&&t.getScope){var e=t.getScope();if(e)return e.getTransaction()}}Oi.getActiveTransaction=Cd});var Rd=b(me=>{Object.defineProperty(me,"__esModule",{value:!0});var iE=ld();me.Angular=iE.Angular;var oE=fd();me.CaptureConsole=oE.CaptureConsole;var sE=dd();me.Debug=sE.Debug;var aE=pd();me.Dedupe=aE.Dedupe;var uE=hd();me.Ember=uE.Ember;var cE=vd();me.ExtraErrorData=cE.ExtraErrorData;var lE=md();me.Offline=lE.Offline;var fE=bd();me.ReportingObserver=fE.ReportingObserver;var dE=Ed();me.RewriteFrames=dE.RewriteFrames;var pE=Td();me.SessionTiming=pE.SessionTiming;var hE=wd();me.Transaction=hE.Transaction;var vE=xd();me.Vue=vE.Vue});var Ad=b(Ea=>{var Id="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");Ea.encode=function(t){if(0<=t&&t<Id.length)return Id[t];throw new TypeError("Must be between 0 and 63: "+t)};Ea.decode=function(t){var e=65,r=90,n=97,i=122,o=48,s=57,a=43,u=47,c=26,l=52;return e<=t&&t<=r?t-e:n<=t&&t<=i?t-n+c:o<=t&&t<=s?t-o+l:t==a?62:t==u?63:-1}});var Oa=b(wa=>{var Md=Ad(),Ta=5,Pd=1<<Ta,Nd=Pd-1,qd=Pd;function _E(t){return t<0?(-t<<1)+1:(t<<1)+0}function gE(t){var e=(t&1)===1,r=t>>1;return e?-r:r}wa.encode=function(e){var r="",n,i=_E(e);do n=i&Nd,i>>>=Ta,i>0&&(n|=qd),r+=Md.encode(n);while(i>0);return r};wa.decode=function(e,r,n){var i=e.length,o=0,s=0,a,u;do{if(r>=i)throw new Error("Expected more digits in base 64 VLQ value.");if(u=Md.decode(e.charCodeAt(r++)),u===-1)throw new Error("Invalid base64 digit: "+e.charAt(r-1));a=!!(u&qd),u&=Nd,o=o+(u<<s),s+=Ta}while(a);n.value=gE(o),n.rest=r}});var br=b(pe=>{function mE(t,e,r){if(e in t)return t[e];if(arguments.length===3)return r;throw new Error('"'+e+'" is a required argument.')}pe.getArg=mE;var kd=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/,yE=/^data:.+\,.+$/;function en(t){var e=t.match(kd);return e?{scheme:e[1],auth:e[2],host:e[3],port:e[4],path:e[5]}:null}pe.urlParse=en;function mr(t){var e="";return t.scheme&&(e+=t.scheme+":"),e+="//",t.auth&&(e+=t.auth+"@"),t.host&&(e+=t.host),t.port&&(e+=":"+t.port),t.path&&(e+=t.path),e}pe.urlGenerate=mr;function Ca(t){var e=t,r=en(t);if(r){if(!r.path)return t;e=r.path}for(var n=pe.isAbsolute(e),i=e.split(/\/+/),o,s=0,a=i.length-1;a>=0;a--)o=i[a],o==="."?i.splice(a,1):o===".."?s++:s>0&&(o===""?(i.splice(a+1,s),s=0):(i.splice(a,2),s--));return e=i.join("/"),e===""&&(e=n?"/":"."),r?(r.path=e,mr(r)):e}pe.normalize=Ca;function Dd(t,e){t===""&&(t="."),e===""&&(e=".");var r=en(e),n=en(t);if(n&&(t=n.path||"/"),r&&!r.scheme)return n&&(r.scheme=n.scheme),mr(r);if(r||e.match(yE))return e;if(n&&!n.host&&!n.path)return n.host=e,mr(n);var i=e.charAt(0)==="/"?e:Ca(t.replace(/\/+$/,"")+"/"+e);return n?(n.path=i,mr(n)):i}pe.join=Dd;pe.isAbsolute=function(t){return t.charAt(0)==="/"||kd.test(t)};function bE(t,e){t===""&&(t="."),t=t.replace(/\/$/,"");for(var r=0;e.indexOf(t+"/")!==0;){var n=t.lastIndexOf("/");if(n<0||(t=t.slice(0,n),t.match(/^([^\/]+:\/)?\/*$/)))return e;++r}return Array(r+1).join("../")+e.substr(t.length+1)}pe.relative=bE;var Ld=function(){var t=Object.create(null);return!("__proto__"in t)}();function Fd(t){return t}function SE(t){return jd(t)?"$"+t:t}pe.toSetString=Ld?Fd:SE;function EE(t){return jd(t)?t.slice(1):t}pe.fromSetString=Ld?Fd:EE;function jd(t){if(!t)return!1;var e=t.length;if(e<9||t.charCodeAt(e-1)!==95||t.charCodeAt(e-2)!==95||t.charCodeAt(e-3)!==111||t.charCodeAt(e-4)!==116||t.charCodeAt(e-5)!==111||t.charCodeAt(e-6)!==114||t.charCodeAt(e-7)!==112||t.charCodeAt(e-8)!==95||t.charCodeAt(e-9)!==95)return!1;for(var r=e-10;r>=0;r--)if(t.charCodeAt(r)!==36)return!1;return!0}function TE(t,e,r){var n=yr(t.source,e.source);return n!==0||(n=t.originalLine-e.originalLine,n!==0)||(n=t.originalColumn-e.originalColumn,n!==0||r)||(n=t.generatedColumn-e.generatedColumn,n!==0)||(n=t.generatedLine-e.generatedLine,n!==0)?n:yr(t.name,e.name)}pe.compareByOriginalPositions=TE;function wE(t,e,r){var n=t.generatedLine-e.generatedLine;return n!==0||(n=t.generatedColumn-e.generatedColumn,n!==0||r)||(n=yr(t.source,e.source),n!==0)||(n=t.originalLine-e.originalLine,n!==0)||(n=t.originalColumn-e.originalColumn,n!==0)?n:yr(t.name,e.name)}pe.compareByGeneratedPositionsDeflated=wE;function yr(t,e){return t===e?0:t===null?1:e===null?-1:t>e?1:-1}function OE(t,e){var r=t.generatedLine-e.generatedLine;return r!==0||(r=t.generatedColumn-e.generatedColumn,r!==0)||(r=yr(t.source,e.source),r!==0)||(r=t.originalLine-e.originalLine,r!==0)||(r=t.originalColumn-e.originalColumn,r!==0)?r:yr(t.name,e.name)}pe.compareByGeneratedPositionsInflated=OE;function CE(t){return JSON.parse(t.replace(/^\)]}'[^\n]*\n/,""))}pe.parseSourceMapInput=CE;function xE(t,e,r){if(e=e||"",t&&(t[t.length-1]!=="/"&&e[0]!=="/"&&(t+="/"),e=t+e),r){var n=en(r);if(!n)throw new Error("sourceMapURL could not be parsed");if(n.path){var i=n.path.lastIndexOf("/");i>=0&&(n.path=n.path.substring(0,i+1))}e=Dd(mr(n),e)}return Ca(e)}pe.computeSourceURL=xE});var Ia=b(Ud=>{var xa=br(),Ra=Object.prototype.hasOwnProperty,Gt=typeof Map!="undefined";function ct(){this._array=[],this._set=Gt?new Map:Object.create(null)}ct.fromArray=function(e,r){for(var n=new ct,i=0,o=e.length;i<o;i++)n.add(e[i],r);return n};ct.prototype.size=function(){return Gt?this._set.size:Object.getOwnPropertyNames(this._set).length};ct.prototype.add=function(e,r){var n=Gt?e:xa.toSetString(e),i=Gt?this.has(e):Ra.call(this._set,n),o=this._array.length;(!i||r)&&this._array.push(e),i||(Gt?this._set.set(e,o):this._set[n]=o)};ct.prototype.has=function(e){if(Gt)return this._set.has(e);var r=xa.toSetString(e);return Ra.call(this._set,r)};ct.prototype.indexOf=function(e){if(Gt){var r=this._set.get(e);if(r>=0)return r}else{var n=xa.toSetString(e);if(Ra.call(this._set,n))return this._set[n]}throw new Error('"'+e+'" is not in the set.')};ct.prototype.at=function(e){if(e>=0&&e<this._array.length)return this._array[e];throw new Error("No element indexed by "+e)};ct.prototype.toArray=function(){return this._array.slice()};Ud.ArraySet=ct});var Gd=b(Bd=>{var Hd=br();function RE(t,e){var r=t.generatedLine,n=e.generatedLine,i=t.generatedColumn,o=e.generatedColumn;return n>r||n==r&&o>=i||Hd.compareByGeneratedPositionsInflated(t,e)<=0}function Ci(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}Ci.prototype.unsortedForEach=function(e,r){this._array.forEach(e,r)};Ci.prototype.add=function(e){RE(this._last,e)?(this._last=e,this._array.push(e)):(this._sorted=!1,this._array.push(e))};Ci.prototype.toArray=function(){return this._sorted||(this._array.sort(Hd.compareByGeneratedPositionsInflated),this._sorted=!0),this._array};Bd.MappingList=Ci});var Aa=b(zd=>{var tn=Oa(),ee=br(),xi=Ia().ArraySet,IE=Gd().MappingList;function ke(t){t||(t={}),this._file=ee.getArg(t,"file",null),this._sourceRoot=ee.getArg(t,"sourceRoot",null),this._skipValidation=ee.getArg(t,"skipValidation",!1),this._sources=new xi,this._names=new xi,this._mappings=new IE,this._sourcesContents=null}ke.prototype._version=3;ke.fromSourceMap=function(e){var r=e.sourceRoot,n=new ke({file:e.file,sourceRoot:r});return e.eachMapping(function(i){var o={generated:{line:i.generatedLine,column:i.generatedColumn}};i.source!=null&&(o.source=i.source,r!=null&&(o.source=ee.relative(r,o.source)),o.original={line:i.originalLine,column:i.originalColumn},i.name!=null&&(o.name=i.name)),n.addMapping(o)}),e.sources.forEach(function(i){var o=i;r!==null&&(o=ee.relative(r,i)),n._sources.has(o)||n._sources.add(o);var s=e.sourceContentFor(i);s!=null&&n.setSourceContent(i,s)}),n};ke.prototype.addMapping=function(e){var r=ee.getArg(e,"generated"),n=ee.getArg(e,"original",null),i=ee.getArg(e,"source",null),o=ee.getArg(e,"name",null);this._skipValidation||this._validateMapping(r,n,i,o),i!=null&&(i=String(i),this._sources.has(i)||this._sources.add(i)),o!=null&&(o=String(o),this._names.has(o)||this._names.add(o)),this._mappings.add({generatedLine:r.line,generatedColumn:r.column,originalLine:n!=null&&n.line,originalColumn:n!=null&&n.column,source:i,name:o})};ke.prototype.setSourceContent=function(e,r){var n=e;this._sourceRoot!=null&&(n=ee.relative(this._sourceRoot,n)),r!=null?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[ee.toSetString(n)]=r):this._sourcesContents&&(delete this._sourcesContents[ee.toSetString(n)],Object.keys(this._sourcesContents).length===0&&(this._sourcesContents=null))};ke.prototype.applySourceMap=function(e,r,n){var i=r;if(r==null){if(e.file==null)throw new Error(`SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map's "file" property. Both were omitted.`);i=e.file}var o=this._sourceRoot;o!=null&&(i=ee.relative(o,i));var s=new xi,a=new xi;this._mappings.unsortedForEach(function(u){if(u.source===i&&u.originalLine!=null){var c=e.originalPositionFor({line:u.originalLine,column:u.originalColumn});c.source!=null&&(u.source=c.source,n!=null&&(u.source=ee.join(n,u.source)),o!=null&&(u.source=ee.relative(o,u.source)),u.originalLine=c.line,u.originalColumn=c.column,c.name!=null&&(u.name=c.name))}var l=u.source;l!=null&&!s.has(l)&&s.add(l);var d=u.name;d!=null&&!a.has(d)&&a.add(d)},this),this._sources=s,this._names=a,e.sources.forEach(function(u){var c=e.sourceContentFor(u);c!=null&&(n!=null&&(u=ee.join(n,u)),o!=null&&(u=ee.relative(o,u)),this.setSourceContent(u,c))},this)};ke.prototype._validateMapping=function(e,r,n,i){if(r&&typeof r.line!="number"&&typeof r.column!="number")throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if(!(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0&&!r&&!n&&!i)){if(e&&"line"in e&&"column"in e&&r&&"line"in r&&"column"in r&&e.line>0&&e.column>=0&&r.line>0&&r.column>=0&&n)return;throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:n,original:r,name:i}))}};ke.prototype._serializeMappings=function(){for(var e=0,r=1,n=0,i=0,o=0,s=0,a="",u,c,l,d,h=this._mappings.toArray(),_=0,S=h.length;_<S;_++){if(c=h[_],u="",c.generatedLine!==r)for(e=0;c.generatedLine!==r;)u+=";",r++;else if(_>0){if(!ee.compareByGeneratedPositionsInflated(c,h[_-1]))continue;u+=","}u+=tn.encode(c.generatedColumn-e),e=c.generatedColumn,c.source!=null&&(d=this._sources.indexOf(c.source),u+=tn.encode(d-s),s=d,u+=tn.encode(c.originalLine-1-i),i=c.originalLine-1,u+=tn.encode(c.originalColumn-n),n=c.originalColumn,c.name!=null&&(l=this._names.indexOf(c.name),u+=tn.encode(l-o),o=l)),a+=u}return a};ke.prototype._generateSourcesContent=function(e,r){return e.map(function(n){if(!this._sourcesContents)return null;r!=null&&(n=ee.relative(r,n));var i=ee.toSetString(n);return Object.prototype.hasOwnProperty.call(this._sourcesContents,i)?this._sourcesContents[i]:null},this)};ke.prototype.toJSON=function(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return this._file!=null&&(e.file=this._file),this._sourceRoot!=null&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e};ke.prototype.toString=function(){return JSON.stringify(this.toJSON())};zd.SourceMapGenerator=ke});var Vd=b(zt=>{zt.GREATEST_LOWER_BOUND=1;zt.LEAST_UPPER_BOUND=2;function Ma(t,e,r,n,i,o){var s=Math.floor((e-t)/2)+t,a=i(r,n[s],!0);return a===0?s:a>0?e-s>1?Ma(s,e,r,n,i,o):o==zt.LEAST_UPPER_BOUND?e<n.length?e:-1:s:s-t>1?Ma(t,s,r,n,i,o):o==zt.LEAST_UPPER_BOUND?s:t<0?-1:t}zt.search=function(e,r,n,i){if(r.length===0)return-1;var o=Ma(-1,r.length,e,r,n,i||zt.GREATEST_LOWER_BOUND);if(o<0)return-1;for(;o-1>=0&&n(r[o],r[o-1],!0)===0;)--o;return o}});var $d=b(Wd=>{function Pa(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function AE(t,e){return Math.round(t+Math.random()*(e-t))}function Na(t,e,r,n){if(r<n){var i=AE(r,n),o=r-1;Pa(t,i,n);for(var s=t[n],a=r;a<n;a++)e(t[a],s)<=0&&(o+=1,Pa(t,o,a));Pa(t,o+1,a);var u=o+1;Na(t,e,r,u-1),Na(t,e,u+1,n)}}Wd.quickSort=function(t,e){Na(t,e,0,t.length-1)}});var Kd=b(Ri=>{var M=br(),qa=Vd(),Sr=Ia().ArraySet,ME=Oa(),rn=$d().quickSort;function Y(t,e){var r=t;return typeof t=="string"&&(r=M.parseSourceMapInput(t)),r.sections!=null?new Be(r,e):new le(r,e)}Y.fromSourceMap=function(t,e){return le.fromSourceMap(t,e)};Y.prototype._version=3;Y.prototype.__generatedMappings=null;Object.defineProperty(Y.prototype,"_generatedMappings",{configurable:!0,enumerable:!0,get:function(){return this.__generatedMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__generatedMappings}});Y.prototype.__originalMappings=null;Object.defineProperty(Y.prototype,"_originalMappings",{configurable:!0,enumerable:!0,get:function(){return this.__originalMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__originalMappings}});Y.prototype._charIsMappingSeparator=function(e,r){var n=e.charAt(r);return n===";"||n===","};Y.prototype._parseMappings=function(e,r){throw new Error("Subclasses must implement _parseMappings")};Y.GENERATED_ORDER=1;Y.ORIGINAL_ORDER=2;Y.GREATEST_LOWER_BOUND=1;Y.LEAST_UPPER_BOUND=2;Y.prototype.eachMapping=function(e,r,n){var i=r||null,o=n||Y.GENERATED_ORDER,s;switch(o){case Y.GENERATED_ORDER:s=this._generatedMappings;break;case Y.ORIGINAL_ORDER:s=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}var a=this.sourceRoot;s.map(function(u){var c=u.source===null?null:this._sources.at(u.source);return c=M.computeSourceURL(a,c,this._sourceMapURL),{source:c,generatedLine:u.generatedLine,generatedColumn:u.generatedColumn,originalLine:u.originalLine,originalColumn:u.originalColumn,name:u.name===null?null:this._names.at(u.name)}},this).forEach(e,i)};Y.prototype.allGeneratedPositionsFor=function(e){var r=M.getArg(e,"line"),n={source:M.getArg(e,"source"),originalLine:r,originalColumn:M.getArg(e,"column",0)};if(n.source=this._findSourceIndex(n.source),n.source<0)return[];var i=[],o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",M.compareByOriginalPositions,qa.LEAST_UPPER_BOUND);if(o>=0){var s=this._originalMappings[o];if(e.column===void 0)for(var a=s.originalLine;s&&s.originalLine===a;)i.push({line:M.getArg(s,"generatedLine",null),column:M.getArg(s,"generatedColumn",null),lastColumn:M.getArg(s,"lastGeneratedColumn",null)}),s=this._originalMappings[++o];else for(var u=s.originalColumn;s&&s.originalLine===r&&s.originalColumn==u;)i.push({line:M.getArg(s,"generatedLine",null),column:M.getArg(s,"generatedColumn",null),lastColumn:M.getArg(s,"lastGeneratedColumn",null)}),s=this._originalMappings[++o]}return i};Ri.SourceMapConsumer=Y;function le(t,e){var r=t;typeof t=="string"&&(r=M.parseSourceMapInput(t));var n=M.getArg(r,"version"),i=M.getArg(r,"sources"),o=M.getArg(r,"names",[]),s=M.getArg(r,"sourceRoot",null),a=M.getArg(r,"sourcesContent",null),u=M.getArg(r,"mappings"),c=M.getArg(r,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);s&&(s=M.normalize(s)),i=i.map(String).map(M.normalize).map(function(l){return s&&M.isAbsolute(s)&&M.isAbsolute(l)?M.relative(s,l):l}),this._names=Sr.fromArray(o.map(String),!0),this._sources=Sr.fromArray(i,!0),this._absoluteSources=this._sources.toArray().map(function(l){return M.computeSourceURL(s,l,e)}),this.sourceRoot=s,this.sourcesContent=a,this._mappings=u,this._sourceMapURL=e,this.file=c}le.prototype=Object.create(Y.prototype);le.prototype.consumer=Y;le.prototype._findSourceIndex=function(t){var e=t;if(this.sourceRoot!=null&&(e=M.relative(this.sourceRoot,e)),this._sources.has(e))return this._sources.indexOf(e);var r;for(r=0;r<this._absoluteSources.length;++r)if(this._absoluteSources[r]==t)return r;return-1};le.fromSourceMap=function(e,r){var n=Object.create(le.prototype),i=n._names=Sr.fromArray(e._names.toArray(),!0),o=n._sources=Sr.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file,n._sourceMapURL=r,n._absoluteSources=n._sources.toArray().map(function(_){return M.computeSourceURL(n.sourceRoot,_,r)});for(var s=e._mappings.toArray().slice(),a=n.__generatedMappings=[],u=n.__originalMappings=[],c=0,l=s.length;c<l;c++){var d=s[c],h=new Yd;h.generatedLine=d.generatedLine,h.generatedColumn=d.generatedColumn,d.source&&(h.source=o.indexOf(d.source),h.originalLine=d.originalLine,h.originalColumn=d.originalColumn,d.name&&(h.name=i.indexOf(d.name)),u.push(h)),a.push(h)}return rn(n.__originalMappings,M.compareByOriginalPositions),n};le.prototype._version=3;Object.defineProperty(le.prototype,"sources",{get:function(){return this._absoluteSources.slice()}});function Yd(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}le.prototype._parseMappings=function(e,r){for(var n=1,i=0,o=0,s=0,a=0,u=0,c=e.length,l=0,d={},h={},_=[],S=[],T,R,A,F,k;l<c;)if(e.charAt(l)===";")n++,l++,i=0;else if(e.charAt(l)===",")l++;else{for(T=new Yd,T.generatedLine=n,F=l;F<c&&!this._charIsMappingSeparator(e,F);F++);if(R=e.slice(l,F),A=d[R],A)l+=R.length;else{for(A=[];l<F;)ME.decode(e,l,h),k=h.value,l=h.rest,A.push(k);if(A.length===2)throw new Error("Found a source, but no line and column");if(A.length===3)throw new Error("Found a source and line, but no column");d[R]=A}T.generatedColumn=i+A[0],i=T.generatedColumn,A.length>1&&(T.source=a+A[1],a+=A[1],T.originalLine=o+A[2],o=T.originalLine,T.originalLine+=1,T.originalColumn=s+A[3],s=T.originalColumn,A.length>4&&(T.name=u+A[4],u+=A[4])),S.push(T),typeof T.originalLine=="number"&&_.push(T)}rn(S,M.compareByGeneratedPositionsDeflated),this.__generatedMappings=S,rn(_,M.compareByOriginalPositions),this.__originalMappings=_};le.prototype._findMapping=function(e,r,n,i,o,s){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[i]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[i]);return qa.search(e,r,o,s)};le.prototype.computeColumnSpans=function(){for(var e=0;e<this._generatedMappings.length;++e){var r=this._generatedMappings[e];if(e+1<this._generatedMappings.length){var n=this._generatedMappings[e+1];if(r.generatedLine===n.generatedLine){r.lastGeneratedColumn=n.generatedColumn-1;continue}}r.lastGeneratedColumn=1/0}};le.prototype.originalPositionFor=function(e){var r={generatedLine:M.getArg(e,"line"),generatedColumn:M.getArg(e,"column")},n=this._findMapping(r,this._generatedMappings,"generatedLine","generatedColumn",M.compareByGeneratedPositionsDeflated,M.getArg(e,"bias",Y.GREATEST_LOWER_BOUND));if(n>=0){var i=this._generatedMappings[n];if(i.generatedLine===r.generatedLine){var o=M.getArg(i,"source",null);o!==null&&(o=this._sources.at(o),o=M.computeSourceURL(this.sourceRoot,o,this._sourceMapURL));var s=M.getArg(i,"name",null);return s!==null&&(s=this._names.at(s)),{source:o,line:M.getArg(i,"originalLine",null),column:M.getArg(i,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}};le.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return e==null}):!1};le.prototype.sourceContentFor=function(e,r){if(!this.sourcesContent)return null;var n=this._findSourceIndex(e);if(n>=0)return this.sourcesContent[n];var i=e;this.sourceRoot!=null&&(i=M.relative(this.sourceRoot,i));var o;if(this.sourceRoot!=null&&(o=M.urlParse(this.sourceRoot))){var s=i.replace(/^file:\/\//,"");if(o.scheme=="file"&&this._sources.has(s))return this.sourcesContent[this._sources.indexOf(s)];if((!o.path||o.path=="/")&&this._sources.has("/"+i))return this.sourcesContent[this._sources.indexOf("/"+i)]}if(r)return null;throw new Error('"'+i+'" is not in the SourceMap.')};le.prototype.generatedPositionFor=function(e){var r=M.getArg(e,"source");if(r=this._findSourceIndex(r),r<0)return{line:null,column:null,lastColumn:null};var n={source:r,originalLine:M.getArg(e,"line"),originalColumn:M.getArg(e,"column")},i=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",M.compareByOriginalPositions,M.getArg(e,"bias",Y.GREATEST_LOWER_BOUND));if(i>=0){var o=this._originalMappings[i];if(o.source===n.source)return{line:M.getArg(o,"generatedLine",null),column:M.getArg(o,"generatedColumn",null),lastColumn:M.getArg(o,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}};Ri.BasicSourceMapConsumer=le;function Be(t,e){var r=t;typeof t=="string"&&(r=M.parseSourceMapInput(t));var n=M.getArg(r,"version"),i=M.getArg(r,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new Sr,this._names=new Sr;var o={line:-1,column:0};this._sections=i.map(function(s){if(s.url)throw new Error("Support for url field in sections not implemented.");var a=M.getArg(s,"offset"),u=M.getArg(a,"line"),c=M.getArg(a,"column");if(u<o.line||u===o.line&&c<o.column)throw new Error("Section offsets must be ordered and non-overlapping.");return o=a,{generatedOffset:{generatedLine:u+1,generatedColumn:c+1},consumer:new Y(M.getArg(s,"map"),e)}})}Be.prototype=Object.create(Y.prototype);Be.prototype.constructor=Y;Be.prototype._version=3;Object.defineProperty(Be.prototype,"sources",{get:function(){for(var t=[],e=0;e<this._sections.length;e++)for(var r=0;r<this._sections[e].consumer.sources.length;r++)t.push(this._sections[e].consumer.sources[r]);return t}});Be.prototype.originalPositionFor=function(e){var r={generatedLine:M.getArg(e,"line"),generatedColumn:M.getArg(e,"column")},n=qa.search(r,this._sections,function(o,s){var a=o.generatedLine-s.generatedOffset.generatedLine;return a||o.generatedColumn-s.generatedOffset.generatedColumn}),i=this._sections[n];return i?i.consumer.originalPositionFor({line:r.generatedLine-(i.generatedOffset.generatedLine-1),column:r.generatedColumn-(i.generatedOffset.generatedLine===r.generatedLine?i.generatedOffset.generatedColumn-1:0),bias:e.bias}):{source:null,line:null,column:null,name:null}};Be.prototype.hasContentsOfAllSources=function(){return this._sections.every(function(e){return e.consumer.hasContentsOfAllSources()})};Be.prototype.sourceContentFor=function(e,r){for(var n=0;n<this._sections.length;n++){var i=this._sections[n],o=i.consumer.sourceContentFor(e,!0);if(o)return o}if(r)return null;throw new Error('"'+e+'" is not in the SourceMap.')};Be.prototype.generatedPositionFor=function(e){for(var r=0;r<this._sections.length;r++){var n=this._sections[r];if(n.consumer._findSourceIndex(M.getArg(e,"source"))!==-1){var i=n.consumer.generatedPositionFor(e);if(i){var o={line:i.line+(n.generatedOffset.generatedLine-1),column:i.column+(n.generatedOffset.generatedLine===i.line?n.generatedOffset.generatedColumn-1:0)};return o}}}return{line:null,column:null}};Be.prototype._parseMappings=function(e,r){this.__generatedMappings=[],this.__originalMappings=[];for(var n=0;n<this._sections.length;n++)for(var i=this._sections[n],o=i.consumer._generatedMappings,s=0;s<o.length;s++){var a=o[s],u=i.consumer._sources.at(a.source);u=M.computeSourceURL(i.consumer.sourceRoot,u,this._sourceMapURL),this._sources.add(u),u=this._sources.indexOf(u);var c=null;a.name&&(c=i.consumer._names.at(a.name),this._names.add(c),c=this._names.indexOf(c));var l={source:u,generatedLine:a.generatedLine+(i.generatedOffset.generatedLine-1),generatedColumn:a.generatedColumn+(i.generatedOffset.generatedLine===a.generatedLine?i.generatedOffset.generatedColumn-1:0),originalLine:a.originalLine,originalColumn:a.originalColumn,name:c};this.__generatedMappings.push(l),typeof l.originalLine=="number"&&this.__originalMappings.push(l)}rn(this.__generatedMappings,M.compareByGeneratedPositionsDeflated),rn(this.__originalMappings,M.compareByOriginalPositions)};Ri.IndexedSourceMapConsumer=Be});var Xd=b(Jd=>{var PE=Aa().SourceMapGenerator,Ii=br(),NE=/(\r?\n)/,qE=10,Er="$$$isSourceNode$$$";function Ce(t,e,r,n,i){this.children=[],this.sourceContents={},this.line=t??null,this.column=e??null,this.source=r??null,this.name=i??null,this[Er]=!0,n!=null&&this.add(n)}Ce.fromStringWithSourceMap=function(e,r,n){var i=new Ce,o=e.split(NE),s=0,a=function(){var h=S(),_=S()||"";return h+_;function S(){return s<o.length?o[s++]:void 0}},u=1,c=0,l=null;return r.eachMapping(function(h){if(l!==null)if(u<h.generatedLine)d(l,a()),u++,c=0;else{var _=o[s]||"",S=_.substr(0,h.generatedColumn-c);o[s]=_.substr(h.generatedColumn-c),c=h.generatedColumn,d(l,S),l=h;return}for(;u<h.generatedLine;)i.add(a()),u++;if(c<h.generatedColumn){var _=o[s]||"";i.add(_.substr(0,h.generatedColumn)),o[s]=_.substr(h.generatedColumn),c=h.generatedColumn}l=h},this),s<o.length&&(l&&d(l,a()),i.add(o.splice(s).join(""))),r.sources.forEach(function(h){var _=r.sourceContentFor(h);_!=null&&(n!=null&&(h=Ii.join(n,h)),i.setSourceContent(h,_))}),i;function d(h,_){if(h===null||h.source===void 0)i.add(_);else{var S=n?Ii.join(n,h.source):h.source;i.add(new Ce(h.originalLine,h.originalColumn,S,_,h.name))}}};Ce.prototype.add=function(e){if(Array.isArray(e))e.forEach(function(r){this.add(r)},this);else if(e[Er]||typeof e=="string")e&&this.children.push(e);else throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);return this};Ce.prototype.prepend=function(e){if(Array.isArray(e))for(var r=e.length-1;r>=0;r--)this.prepend(e[r]);else if(e[Er]||typeof e=="string")this.children.unshift(e);else throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);return this};Ce.prototype.walk=function(e){for(var r,n=0,i=this.children.length;n<i;n++)r=this.children[n],r[Er]?r.walk(e):r!==""&&e(r,{source:this.source,line:this.line,column:this.column,name:this.name})};Ce.prototype.join=function(e){var r,n,i=this.children.length;if(i>0){for(r=[],n=0;n<i-1;n++)r.push(this.children[n]),r.push(e);r.push(this.children[n]),this.children=r}return this};Ce.prototype.replaceRight=function(e,r){var n=this.children[this.children.length-1];return n[Er]?n.replaceRight(e,r):typeof n=="string"?this.children[this.children.length-1]=n.replace(e,r):this.children.push("".replace(e,r)),this};Ce.prototype.setSourceContent=function(e,r){this.sourceContents[Ii.toSetString(e)]=r};Ce.prototype.walkSourceContents=function(e){for(var r=0,n=this.children.length;r<n;r++)this.children[r][Er]&&this.children[r].walkSourceContents(e);for(var i=Object.keys(this.sourceContents),r=0,n=i.length;r<n;r++)e(Ii.fromSetString(i[r]),this.sourceContents[i[r]])};Ce.prototype.toString=function(){var e="";return this.walk(function(r){e+=r}),e};Ce.prototype.toStringWithSourceMap=function(e){var r={code:"",line:1,column:0},n=new PE(e),i=!1,o=null,s=null,a=null,u=null;return this.walk(function(c,l){r.code+=c,l.source!==null&&l.line!==null&&l.column!==null?((o!==l.source||s!==l.line||a!==l.column||u!==l.name)&&n.addMapping({source:l.source,original:{line:l.line,column:l.column},generated:{line:r.line,column:r.column},name:l.name}),o=l.source,s=l.line,a=l.column,u=l.name,i=!0):i&&(n.addMapping({generated:{line:r.line,column:r.column}}),o=null,i=!1);for(var d=0,h=c.length;d<h;d++)c.charCodeAt(d)===qE?(r.line++,r.column=0,d+1===h?(o=null,i=!1):i&&n.addMapping({source:l.source,original:{line:l.line,column:l.column},generated:{line:r.line,column:r.column},name:l.name})):r.column++}),this.walkSourceContents(function(c,l){n.setSourceContent(c,l)}),{code:r.code,map:n}};Jd.SourceNode=Ce});var Qd=b(Ai=>{Ai.SourceMapGenerator=Aa().SourceMapGenerator;Ai.SourceMapConsumer=Kd().SourceMapConsumer;Ai.SourceNode=Xd().SourceNode});var ep=b((ww,Zd)=>{var kE=Object.prototype.toString,ka=typeof Buffer!="undefined"&&typeof Buffer.alloc=="function"&&typeof Buffer.allocUnsafe=="function"&&typeof Buffer.from=="function";function DE(t){return kE.call(t).slice(8,-1)==="ArrayBuffer"}function LE(t,e,r){e>>>=0;var n=t.byteLength-e;if(n<0)throw new RangeError("'offset' is out of bounds");if(r===void 0)r=n;else if(r>>>=0,r>n)throw new RangeError("'length' is out of bounds");return ka?Buffer.from(t.slice(e,e+r)):new Buffer(new Uint8Array(t.slice(e,e+r)))}function FE(t,e){if((typeof e!="string"||e==="")&&(e="utf8"),!Buffer.isEncoding(e))throw new TypeError('"encoding" must be a valid string encoding');return ka?Buffer.from(t,e):new Buffer(t,e)}function jE(t,e,r){if(typeof t=="number")throw new TypeError('"value" argument must not be a number');return DE(t)?LE(t,e,r):typeof t=="string"?FE(t,e):ka?Buffer.from(t):new Buffer(t)}Zd.exports=jE});var up=b((Wt,Ga)=>{var UE=Qd().SourceMapConsumer,Da=require("path"),Ke;try{Ke=require("fs"),(!Ke.existsSync||!Ke.readFileSync)&&(Ke=null)}catch{}var HE=ep();function tp(t,e){return t.require(e)}var rp=!1,np=!1,La=!1,nn="auto",Vt={},on={},BE=/^data:application\/json[^,]+base64,/,Ct=[],xt=[];function Fa(){return nn==="browser"?!0:nn==="node"?!1:typeof window!="undefined"&&typeof XMLHttpRequest=="function"&&!(window.require&&window.module&&window.process&&window.process.type==="renderer")}function GE(){return typeof process=="object"&&process!==null&&typeof process.on=="function"}function zE(){return typeof process=="object"&&process!==null?process.version:""}function VE(){if(typeof process=="object"&&process!==null)return process.stderr}function WE(t){if(typeof process=="object"&&process!==null&&typeof process.exit=="function")return process.exit(t)}function Mi(t){return function(e){for(var r=0;r<t.length;r++){var n=t[r](e);if(n)return n}return null}}var ja=Mi(Ct);Ct.push(function(t){if(t=t.trim(),/^file:/.test(t)&&(t=t.replace(/file:\/\/\/(\w:)?/,function(n,i){return i?"":"/"})),t in Vt)return Vt[t];var e="";try{if(Ke)Ke.existsSync(t)&&(e=Ke.readFileSync(t,"utf8"));else{var r=new XMLHttpRequest;r.open("GET",t,!1),r.send(null),r.readyState===4&&r.status===200&&(e=r.responseText)}}catch{}return Vt[t]=e});function Ua(t,e){if(!t)return e;var r=Da.dirname(t),n=/^\w+:\/\/[^\/]*/.exec(r),i=n?n[0]:"",o=r.slice(i.length);return i&&/^\/\w\:/.test(o)?(i+="/",i+Da.resolve(r.slice(i.length),e).replace(/\\/g,"/")):i+Da.resolve(r.slice(i.length),e)}function $E(t){var e;if(Fa())try{var r=new XMLHttpRequest;r.open("GET",t,!1),r.send(null),e=r.readyState===4?r.responseText:null;var n=r.getResponseHeader("SourceMap")||r.getResponseHeader("X-SourceMap");if(n)return n}catch{}e=ja(t);for(var i=/(?:\/\/[@#][\s]*sourceMappingURL=([^\s'"]+)[\s]*$)|(?:\/\*[@#][\s]*sourceMappingURL=([^\s*'"]+)[\s]*(?:\*\/)[\s]*$)/mg,o,s;s=i.exec(e);)o=s;return o?o[1]:null}var Ha=Mi(xt);xt.push(function(t){var e=$E(t);if(!e)return null;var r;if(BE.test(e)){var n=e.slice(e.indexOf(",")+1);r=HE(n,"base64").toString(),e=t}else e=Ua(t,e),r=ja(e);return r?{url:e,map:r}:null});function Ba(t){var e=on[t.source];if(!e){var r=Ha(t.source);r?(e=on[t.source]={url:r.url,map:new UE(r.map)},e.map.sourcesContent&&e.map.sources.forEach(function(i,o){var s=e.map.sourcesContent[o];if(s){var a=Ua(e.url,i);Vt[a]=s}})):e=on[t.source]={url:null,map:null}}if(e&&e.map&&typeof e.map.originalPositionFor=="function"){var n=e.map.originalPositionFor(t);if(n.source!==null)return n.source=Ua(e.url,n.source),n}return t}function ip(t){var e=/^eval at ([^(]+) \((.+):(\d+):(\d+)\)$/.exec(t);if(e){var r=Ba({source:e[2],line:+e[3],column:e[4]-1});return"eval at "+e[1]+" ("+r.source+":"+r.line+":"+(r.column+1)+")"}return e=/^eval at ([^(]+) \((.+)\)$/.exec(t),e?"eval at "+e[1]+" ("+ip(e[2])+")":t}function YE(){var t,e="";if(this.isNative())e="native";else{t=this.getScriptNameOrSourceURL(),!t&&this.isEval()&&(e=this.getEvalOrigin(),e+=", "),t?e+=t:e+="<anonymous>";var r=this.getLineNumber();if(r!=null){e+=":"+r;var n=this.getColumnNumber();n&&(e+=":"+n)}}var i="",o=this.getFunctionName(),s=!0,a=this.isConstructor(),u=!(this.isToplevel()||a);if(u){var c=this.getTypeName();c==="[object Object]"&&(c="null");var l=this.getMethodName();o?(c&&o.indexOf(c)!=0&&(i+=c+"."),i+=o,l&&o.indexOf("."+l)!=o.length-l.length-1&&(i+=" [as "+l+"]")):i+=c+"."+(l||"<anonymous>")}else a?i+="new "+(o||"<anonymous>"):o?i+=o:(i+=e,s=!1);return s&&(i+=" ("+e+")"),i}function op(t){var e={};return Object.getOwnPropertyNames(Object.getPrototypeOf(t)).forEach(function(r){e[r]=/^(?:is|get)/.test(r)?function(){return t[r].call(t)}:t[r]}),e.toString=YE,e}function sp(t,e){if(e===void 0&&(e={nextPosition:null,curPosition:null}),t.isNative())return e.curPosition=null,t;var r=t.getFileName()||t.getScriptNameOrSourceURL();if(r){var n=t.getLineNumber(),i=t.getColumnNumber()-1,o=/^v(10\.1[6-9]|10\.[2-9][0-9]|10\.[0-9]{3,}|1[2-9]\d*|[2-9]\d|\d{3,}|11\.11)/,s=o.test(zE())?0:62;n===1&&i>s&&!Fa()&&!t.isEval()&&(i-=s);var a=Ba({source:r,line:n,column:i});e.curPosition=a,t=op(t);var u=t.getFunctionName;return t.getFunctionName=function(){return e.nextPosition==null?u():e.nextPosition.name||u()},t.getFileName=function(){return a.source},t.getLineNumber=function(){return a.line},t.getColumnNumber=function(){return a.column+1},t.getScriptNameOrSourceURL=function(){return a.source},t}var c=t.isEval()&&t.getEvalOrigin();return c&&(c=ip(c),t=op(t),t.getEvalOrigin=function(){return c}),t}function KE(t,e){La&&(Vt={},on={});for(var r=t.name||"Error",n=t.message||"",i=r+": "+n,o={nextPosition:null,curPosition:null},s=[],a=e.length-1;a>=0;a--)s.push(`
32
+ at `+sp(e[a],o)),o.nextPosition=o.curPosition;return o.curPosition=o.nextPosition=null,i+s.reverse().join("")}function ap(t){var e=/\n at [^(]+ \((.*):(\d+):(\d+)\)/.exec(t.stack);if(e){var r=e[1],n=+e[2],i=+e[3],o=Vt[r];if(!o&&Ke&&Ke.existsSync(r))try{o=Ke.readFileSync(r,"utf8")}catch{o=""}if(o){var s=o.split(/(?:\r\n|\r|\n)/)[n-1];if(s)return r+":"+n+`
33
+ `+s+`
34
+ `+new Array(i).join(" ")+"^"}}return null}function JE(t){var e=ap(t),r=VE();r&&r._handle&&r._handle.setBlocking&&r._handle.setBlocking(!0),e&&(console.error(),console.error(e)),console.error(t.stack),WE(1)}function XE(){var t=process.emit;process.emit=function(e){if(e==="uncaughtException"){var r=arguments[1]&&arguments[1].stack,n=this.listeners(e).length>0;if(r&&!n)return JE(arguments[1])}return t.apply(this,arguments)}}var QE=Ct.slice(0),ZE=xt.slice(0);Wt.wrapCallSite=sp;Wt.getErrorSource=ap;Wt.mapSourcePosition=Ba;Wt.retrieveSourceMap=Ha;Wt.install=function(t){if(t=t||{},t.environment&&(nn=t.environment,["node","browser","auto"].indexOf(nn)===-1))throw new Error("environment "+nn+" was unknown. Available options are {auto, browser, node}");if(t.retrieveFile&&(t.overrideRetrieveFile&&(Ct.length=0),Ct.unshift(t.retrieveFile)),t.retrieveSourceMap&&(t.overrideRetrieveSourceMap&&(xt.length=0),xt.unshift(t.retrieveSourceMap)),t.hookRequire&&!Fa()){var e=tp(Ga,"module"),r=e.prototype._compile;r.__sourceMapSupport||(e.prototype._compile=function(o,s){return Vt[s]=o,on[s]=void 0,r.call(this,o,s)},e.prototype._compile.__sourceMapSupport=!0)}if(La||(La="emptyCacheBetweenOperations"in t?t.emptyCacheBetweenOperations:!1),rp||(rp=!0,Error.prepareStackTrace=KE),!np){var n="handleUncaughtExceptions"in t?t.handleUncaughtExceptions:!0;try{var i=tp(Ga,"worker_threads");i.isMainThread===!1&&(n=!1)}catch{}n&&GE()&&(np=!0,XE())}};Wt.resetRetrieveHandlers=function(){Ct.length=0,xt.length=0,Ct=QE.slice(0),xt=ZE.slice(0),Ha=Mi(xt),ja=Mi(Ct)}});var za=Gi(gu());function mu(t){if(t.length==2)return t.toUpperCase().replace(/./g,e=>String.fromCodePoint(127397+e.charCodeAt(0)))}var Tr=Gi(ud()),cp=Gi(Rd());up().install();Tr.init({dsn:"https://aec0873e750c49b082fe3594def15af1@o1116132.ingest.sentry.io/6149280",tracesSampleRate:1,integrations:[new cp.RewriteFrames({root:global.__rootdir__})]});za.default.version("0.1.0").name("country-flag-cli").command("get <flag>").action(t=>{let e=Tr.startTransaction({op:"get flag from 2 alpha code",name:"GET flag from 2 alpha code"});try{let r=mu(t);if(r===void 0)throw new Error(`Flag: ${t}
32
35
  Result: ${r}
33
- `);console.log(r)}catch(r){rr.captureException(r)}finally{e.finish()}});za.default.parse(process.argv);
36
+ `);console.log(r)}catch(r){console.error(r),Tr.captureException(r)}finally{e.finish()}});za.default.parse(process.argv);
34
37
  /*!
35
38
  localForage -- Offline Storage, Improved
36
39
  Version 1.10.0
@@ -68,4 +71,4 @@ PERFORMANCE OF THIS SOFTWARE.
68
71
  * https://github.com/felixge/node-stack-trace/
69
72
  * @license MIT
70
73
  */
71
- //# sourceMappingURL=cli.js.map
74
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHlwZXMvc3JjL2xvZ2xldmVsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3R5cGVzL3NyYy9zZXNzaW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3R5cGVzL3NyYy9zZXZlcml0eS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90eXBlcy9zcmMvc3RhdHVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3R5cGVzL3NyYy90cmFuc2FjdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90eXBlcy9zcmMvdHJhbnNwb3J0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3R5cGVzL3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9zcmMvYXN5bmMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL25vZGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL2dsb2JhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9zcmMvaXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL2Jyb3dzZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL3BvbHlmaWxsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL3NyYy9lcnJvci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9zcmMvZHNuLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL3NyYy9sb2dnZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL21lbW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL3N0YWNrdHJhY2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL3N0cmluZy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9zcmMvb2JqZWN0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL3NyYy9zdXBwb3J0cy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9zcmMvaW5zdHJ1bWVudC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9zcmMvbWlzYy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9zcmMvcGF0aC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9zcmMvc3luY3Byb21pc2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL3Byb21pc2VidWZmZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL3RpbWUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2h1Yi9zcmMvc2NvcGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvaHViL3NyYy9zZXNzaW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2h1Yi9zcmMvaHViLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2h1Yi9zcmMvc2Vzc2lvbmZsdXNoZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvaHViL3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9taW5pbWFsL3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL3NyYy9hcGkudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9zcmMvaW50ZWdyYXRpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9zcmMvYmFzZWNsaWVudC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL3NyYy90cmFuc3BvcnRzL25vb3AudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9zcmMvYmFzZWJhY2tlbmQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9zcmMvcmVxdWVzdC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL3NyYy9zZGsudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9zcmMvdmVyc2lvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL3NyYy9pbnRlZ3JhdGlvbnMvZnVuY3Rpb250b3N0cmluZy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL3NyYy9pbnRlZ3JhdGlvbnMvaW5ib3VuZGZpbHRlcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9zcmMvaW50ZWdyYXRpb25zL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9scnVfbWFwL2xydS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL3NyYy9zdGFja3RyYWNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvc3JjL3BhcnNlcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvdmVyc2lvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL3NyYy90cmFuc3BvcnRzL2Jhc2UvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL21zL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvY29tbW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvYnJvd3Nlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvaGFzLWZsYWcvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3N1cHBvcnRzLWNvbG9yL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvbm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hZ2VudC1iYXNlL3NyYy9wcm9taXNpZnkudHMiLCAiLi4vbm9kZV9tb2R1bGVzL2FnZW50LWJhc2Uvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9odHRwcy1wcm94eS1hZ2VudC9zcmMvcGFyc2UtcHJveHktcmVzcG9uc2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL2h0dHBzLXByb3h5LWFnZW50L3NyYy9hZ2VudC50cyIsICIuLi9ub2RlX21vZHVsZXMvaHR0cHMtcHJveHktYWdlbnQvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvc3JjL3RyYW5zcG9ydHMvaHR0cC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL3NyYy90cmFuc3BvcnRzL2h0dHBzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvc3JjL3RyYW5zcG9ydHMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvYmFja2VuZC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL3NyYy9jbGllbnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW50ZWdyYXRpb25zL2NvbnNvbGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW50ZWdyYXRpb25zL3V0aWxzL2h0dHAudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW50ZWdyYXRpb25zL2h0dHAudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW50ZWdyYXRpb25zL3V0aWxzL2Vycm9yaGFuZGxpbmcudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW50ZWdyYXRpb25zL29udW5jYXVnaHRleGNlcHRpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW50ZWdyYXRpb25zL29udW5oYW5kbGVkcmVqZWN0aW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvc3JjL2ludGVncmF0aW9ucy9saW5rZWRlcnJvcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW50ZWdyYXRpb25zL21vZHVsZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW50ZWdyYXRpb25zL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvc3JjL3Nkay50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL3NyYy91dGlscy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9zcGFuc3RhdHVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL3V0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2Vycm9ycy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9jb25zdGFudHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9zcmMvc3Bhbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy90cmFuc2FjdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9pZGxldHJhbnNhY3Rpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9zcmMvaHViZXh0ZW5zaW9ucy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9pbnRlZ3JhdGlvbnMvbm9kZS9leHByZXNzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2ludGVncmF0aW9ucy9ub2RlL3Bvc3RncmVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2ludGVncmF0aW9ucy9ub2RlL215c3FsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2ludGVncmF0aW9ucy9ub2RlL21vbmdvLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2Jyb3dzZXIvYmFja2dyb3VuZHRhYi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9icm93c2VyL3dlYi12aXRhbHMvbGliL2JpbmRSZXBvcnRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9icm93c2VyL3dlYi12aXRhbHMvbGliL2dlbmVyYXRlVW5pcXVlSUQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9zcmMvYnJvd3Nlci93ZWItdml0YWxzL2xpYi9pbml0TWV0cmljLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2Jyb3dzZXIvd2ViLXZpdGFscy9saWIvb2JzZXJ2ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9icm93c2VyL3dlYi12aXRhbHMvbGliL29uSGlkZGVuLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2Jyb3dzZXIvd2ViLXZpdGFscy9nZXRDTFMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9zcmMvYnJvd3Nlci93ZWItdml0YWxzL2xpYi9nZXRWaXNpYmlsaXR5V2F0Y2hlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9icm93c2VyL3dlYi12aXRhbHMvZ2V0RklELnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2Jyb3dzZXIvd2ViLXZpdGFscy9nZXRMQ1AudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9zcmMvYnJvd3Nlci9tZXRyaWNzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2Jyb3dzZXIvcmVxdWVzdC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9icm93c2VyL3JvdXRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9icm93c2VyL2Jyb3dzZXJ0cmFjaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2Jyb3dzZXIvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9zcmMvaW50ZWdyYXRpb25zL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9jb29raWUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaGFuZGxlcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvaW50ZWdyYXRpb25zL3NyYy9hbmd1bGFyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2ludGVncmF0aW9ucy9zcmMvY2FwdHVyZWNvbnNvbGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvaW50ZWdyYXRpb25zL3NyYy9kZWJ1Zy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9pbnRlZ3JhdGlvbnMvc3JjL2RlZHVwZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9pbnRlZ3JhdGlvbnMvc3JjL2VtYmVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2ludGVncmF0aW9ucy9zcmMvZXh0cmFlcnJvcmRhdGEudHMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvY2FsZm9yYWdlL2Rpc3QvbG9jYWxmb3JhZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvaW50ZWdyYXRpb25zL3NyYy9vZmZsaW5lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2ludGVncmF0aW9ucy9zcmMvcmVwb3J0aW5nb2JzZXJ2ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvaW50ZWdyYXRpb25zL3NyYy9yZXdyaXRlZnJhbWVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2ludGVncmF0aW9ucy9zcmMvc2Vzc2lvbnRpbWluZy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9pbnRlZ3JhdGlvbnMvc3JjL3RyYW5zYWN0aW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2ludGVncmF0aW9ucy9zcmMvdnVlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2ludGVncmF0aW9ucy9zcmMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2Jhc2U2NC5qcyIsICIuLi9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmFzZTY0LXZscS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYXJyYXktc2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9tYXBwaW5nLWxpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3NvdXJjZS1tYXAtZ2VuZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9iaW5hcnktc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9xdWljay1zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2Utbm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9zb3VyY2UtbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9idWZmZXItZnJvbS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvc291cmNlLW1hcC1zdXBwb3J0L3NvdXJjZS1tYXAtc3VwcG9ydC5qcyIsICIuLi9zcmMvY2xpLnRzIiwgIi4uL3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvc291cmNlLW1hcC1zdXBwb3J0L3JlZ2lzdGVyLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcbnZhciBzcGF3biA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5zcGF3bjtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIGRpcm5hbWUgPSBwYXRoLmRpcm5hbWU7XG52YXIgYmFzZW5hbWUgPSBwYXRoLmJhc2VuYW1lO1xudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcblxuLyoqXG4gKiBJbmhlcml0IGBDb21tYW5kYCBmcm9tIGBFdmVudEVtaXR0ZXIucHJvdG90eXBlYC5cbiAqL1xuXG5yZXF1aXJlKCd1dGlsJykuaW5oZXJpdHMoQ29tbWFuZCwgRXZlbnRFbWl0dGVyKTtcblxuLyoqXG4gKiBFeHBvc2UgdGhlIHJvb3QgY29tbWFuZC5cbiAqL1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBuZXcgQ29tbWFuZCgpO1xuXG4vKipcbiAqIEV4cG9zZSBgQ29tbWFuZGAuXG4gKi9cblxuZXhwb3J0cy5Db21tYW5kID0gQ29tbWFuZDtcblxuLyoqXG4gKiBFeHBvc2UgYE9wdGlvbmAuXG4gKi9cblxuZXhwb3J0cy5PcHRpb24gPSBPcHRpb247XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIG5ldyBgT3B0aW9uYCB3aXRoIHRoZSBnaXZlbiBgZmxhZ3NgIGFuZCBgZGVzY3JpcHRpb25gLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBmbGFnc1xuICogQHBhcmFtIHtTdHJpbmd9IGRlc2NyaXB0aW9uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIE9wdGlvbihmbGFncywgZGVzY3JpcHRpb24pIHtcbiAgdGhpcy5mbGFncyA9IGZsYWdzO1xuICB0aGlzLnJlcXVpcmVkID0gZmxhZ3MuaW5kZXhPZignPCcpID49IDA7XG4gIHRoaXMub3B0aW9uYWwgPSBmbGFncy5pbmRleE9mKCdbJykgPj0gMDtcbiAgdGhpcy5ib29sID0gZmxhZ3MuaW5kZXhPZignLW5vLScpID09PSAtMTtcbiAgZmxhZ3MgPSBmbGFncy5zcGxpdCgvWyAsfF0rLyk7XG4gIGlmIChmbGFncy5sZW5ndGggPiAxICYmICEvXltbPF0vLnRlc3QoZmxhZ3NbMV0pKSB0aGlzLnNob3J0ID0gZmxhZ3Muc2hpZnQoKTtcbiAgdGhpcy5sb25nID0gZmxhZ3Muc2hpZnQoKTtcbiAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uIHx8ICcnO1xufVxuXG4vKipcbiAqIFJldHVybiBvcHRpb24gbmFtZS5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5PcHRpb24ucHJvdG90eXBlLm5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMubG9uZ1xuICAgIC5yZXBsYWNlKCctLScsICcnKVxuICAgIC5yZXBsYWNlKCduby0nLCAnJyk7XG59O1xuXG4vKipcbiAqIFJldHVybiBvcHRpb24gbmFtZSwgaW4gYSBjYW1lbGNhc2UgZm9ybWF0IHRoYXQgY2FuIGJlIHVzZWRcbiAqIGFzIGEgb2JqZWN0IGF0dHJpYnV0ZSBrZXkuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuT3B0aW9uLnByb3RvdHlwZS5hdHRyaWJ1dGVOYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBjYW1lbGNhc2UodGhpcy5uYW1lKCkpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBgYXJnYCBtYXRjaGVzIHRoZSBzaG9ydCBvciBsb25nIGZsYWcuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGFyZ1xuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbk9wdGlvbi5wcm90b3R5cGUuaXMgPSBmdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIHRoaXMuc2hvcnQgPT09IGFyZyB8fCB0aGlzLmxvbmcgPT09IGFyZztcbn07XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIG5ldyBgQ29tbWFuZGAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gQ29tbWFuZChuYW1lKSB7XG4gIHRoaXMuY29tbWFuZHMgPSBbXTtcbiAgdGhpcy5vcHRpb25zID0gW107XG4gIHRoaXMuX2V4ZWNzID0ge307XG4gIHRoaXMuX2FsbG93VW5rbm93bk9wdGlvbiA9IGZhbHNlO1xuICB0aGlzLl9hcmdzID0gW107XG4gIHRoaXMuX25hbWUgPSBuYW1lIHx8ICcnO1xufVxuXG4vKipcbiAqIEFkZCBjb21tYW5kIGBuYW1lYC5cbiAqXG4gKiBUaGUgYC5hY3Rpb24oKWAgY2FsbGJhY2sgaXMgaW52b2tlZCB3aGVuIHRoZVxuICogY29tbWFuZCBgbmFtZWAgaXMgc3BlY2lmaWVkIHZpYSBfX0FSR1ZfXyxcbiAqIGFuZCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgYXBwbGllZCB0byB0aGVcbiAqIGZ1bmN0aW9uIGZvciBhY2Nlc3MuXG4gKlxuICogV2hlbiB0aGUgYG5hbWVgIGlzIFwiKlwiIGFuIHVuLW1hdGNoZWQgY29tbWFuZFxuICogd2lsbCBiZSBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZywgZm9sbG93ZWQgYnlcbiAqIHRoZSByZXN0IG9mIF9fQVJHVl9fIHJlbWFpbmluZy5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgIHByb2dyYW1cbiAqICAgICAgICAudmVyc2lvbignMC4wLjEnKVxuICogICAgICAgIC5vcHRpb24oJy1DLCAtLWNoZGlyIDxwYXRoPicsICdjaGFuZ2UgdGhlIHdvcmtpbmcgZGlyZWN0b3J5JylcbiAqICAgICAgICAub3B0aW9uKCctYywgLS1jb25maWcgPHBhdGg+JywgJ3NldCBjb25maWcgcGF0aC4gZGVmYXVsdHMgdG8gLi9kZXBsb3kuY29uZicpXG4gKiAgICAgICAgLm9wdGlvbignLVQsIC0tbm8tdGVzdHMnLCAnaWdub3JlIHRlc3QgaG9vaycpXG4gKlxuICogICAgICBwcm9ncmFtXG4gKiAgICAgICAgLmNvbW1hbmQoJ3NldHVwJylcbiAqICAgICAgICAuZGVzY3JpcHRpb24oJ3J1biByZW1vdGUgc2V0dXAgY29tbWFuZHMnKVxuICogICAgICAgIC5hY3Rpb24oZnVuY3Rpb24oKSB7XG4gKiAgICAgICAgICBjb25zb2xlLmxvZygnc2V0dXAnKTtcbiAqICAgICAgICB9KTtcbiAqXG4gKiAgICAgIHByb2dyYW1cbiAqICAgICAgICAuY29tbWFuZCgnZXhlYyA8Y21kPicpXG4gKiAgICAgICAgLmRlc2NyaXB0aW9uKCdydW4gdGhlIGdpdmVuIHJlbW90ZSBjb21tYW5kJylcbiAqICAgICAgICAuYWN0aW9uKGZ1bmN0aW9uKGNtZCkge1xuICogICAgICAgICAgY29uc29sZS5sb2coJ2V4ZWMgXCIlc1wiJywgY21kKTtcbiAqICAgICAgICB9KTtcbiAqXG4gKiAgICAgIHByb2dyYW1cbiAqICAgICAgICAuY29tbWFuZCgndGVhcmRvd24gPGRpcj4gW290aGVyRGlycy4uLl0nKVxuICogICAgICAgIC5kZXNjcmlwdGlvbigncnVuIHRlYXJkb3duIGNvbW1hbmRzJylcbiAqICAgICAgICAuYWN0aW9uKGZ1bmN0aW9uKGRpciwgb3RoZXJEaXJzKSB7XG4gKiAgICAgICAgICBjb25zb2xlLmxvZygnZGlyIFwiJXNcIicsIGRpcik7XG4gKiAgICAgICAgICBpZiAob3RoZXJEaXJzKSB7XG4gKiAgICAgICAgICAgIG90aGVyRGlycy5mb3JFYWNoKGZ1bmN0aW9uIChvRGlyKSB7XG4gKiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2RpciBcIiVzXCInLCBvRGlyKTtcbiAqICAgICAgICAgICAgfSk7XG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfSk7XG4gKlxuICogICAgICBwcm9ncmFtXG4gKiAgICAgICAgLmNvbW1hbmQoJyonKVxuICogICAgICAgIC5kZXNjcmlwdGlvbignZGVwbG95IHRoZSBnaXZlbiBlbnYnKVxuICogICAgICAgIC5hY3Rpb24oZnVuY3Rpb24oZW52KSB7XG4gKiAgICAgICAgICBjb25zb2xlLmxvZygnZGVwbG95aW5nIFwiJXNcIicsIGVudik7XG4gKiAgICAgICAgfSk7XG4gKlxuICogICAgICBwcm9ncmFtLnBhcnNlKHByb2Nlc3MuYXJndik7XG4gICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gW2Rlc2NdIGZvciBnaXQtc3R5bGUgc3ViLWNvbW1hbmRzXG4gKiBAcmV0dXJuIHtDb21tYW5kfSB0aGUgbmV3IGNvbW1hbmRcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUuY29tbWFuZCA9IGZ1bmN0aW9uKG5hbWUsIGRlc2MsIG9wdHMpIHtcbiAgaWYgKHR5cGVvZiBkZXNjID09PSAnb2JqZWN0JyAmJiBkZXNjICE9PSBudWxsKSB7XG4gICAgb3B0cyA9IGRlc2M7XG4gICAgZGVzYyA9IG51bGw7XG4gIH1cbiAgb3B0cyA9IG9wdHMgfHwge307XG4gIHZhciBhcmdzID0gbmFtZS5zcGxpdCgvICsvKTtcbiAgdmFyIGNtZCA9IG5ldyBDb21tYW5kKGFyZ3Muc2hpZnQoKSk7XG5cbiAgaWYgKGRlc2MpIHtcbiAgICBjbWQuZGVzY3JpcHRpb24oZGVzYyk7XG4gICAgdGhpcy5leGVjdXRhYmxlcyA9IHRydWU7XG4gICAgdGhpcy5fZXhlY3NbY21kLl9uYW1lXSA9IHRydWU7XG4gICAgaWYgKG9wdHMuaXNEZWZhdWx0KSB0aGlzLmRlZmF1bHRFeGVjdXRhYmxlID0gY21kLl9uYW1lO1xuICB9XG4gIGNtZC5fbm9IZWxwID0gISFvcHRzLm5vSGVscDtcbiAgdGhpcy5jb21tYW5kcy5wdXNoKGNtZCk7XG4gIGNtZC5wYXJzZUV4cGVjdGVkQXJncyhhcmdzKTtcbiAgY21kLnBhcmVudCA9IHRoaXM7XG5cbiAgaWYgKGRlc2MpIHJldHVybiB0aGlzO1xuICByZXR1cm4gY21kO1xufTtcblxuLyoqXG4gKiBEZWZpbmUgYXJndW1lbnQgc3ludGF4IGZvciB0aGUgdG9wLWxldmVsIGNvbW1hbmQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5hcmd1bWVudHMgPSBmdW5jdGlvbihkZXNjKSB7XG4gIHJldHVybiB0aGlzLnBhcnNlRXhwZWN0ZWRBcmdzKGRlc2Muc3BsaXQoLyArLykpO1xufTtcblxuLyoqXG4gKiBBZGQgYW4gaW1wbGljaXQgYGhlbHAgW2NtZF1gIHN1YmNvbW1hbmRcbiAqIHdoaWNoIGludm9rZXMgYC0taGVscGAgZm9yIHRoZSBnaXZlbiBjb21tYW5kLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLmFkZEltcGxpY2l0SGVscENvbW1hbmQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5jb21tYW5kKCdoZWxwIFtjbWRdJywgJ2Rpc3BsYXkgaGVscCBmb3IgW2NtZF0nKTtcbn07XG5cbi8qKlxuICogUGFyc2UgZXhwZWN0ZWQgYGFyZ3NgLlxuICpcbiAqIEZvciBleGFtcGxlIGBbXCJbdHlwZV1cIl1gIGJlY29tZXMgYFt7IHJlcXVpcmVkOiBmYWxzZSwgbmFtZTogJ3R5cGUnIH1dYC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzXG4gKiBAcmV0dXJuIHtDb21tYW5kfSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUucGFyc2VFeHBlY3RlZEFyZ3MgPSBmdW5jdGlvbihhcmdzKSB7XG4gIGlmICghYXJncy5sZW5ndGgpIHJldHVybjtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBhcmdzLmZvckVhY2goZnVuY3Rpb24oYXJnKSB7XG4gICAgdmFyIGFyZ0RldGFpbHMgPSB7XG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBuYW1lOiAnJyxcbiAgICAgIHZhcmlhZGljOiBmYWxzZVxuICAgIH07XG5cbiAgICBzd2l0Y2ggKGFyZ1swXSkge1xuICAgICAgY2FzZSAnPCc6XG4gICAgICAgIGFyZ0RldGFpbHMucmVxdWlyZWQgPSB0cnVlO1xuICAgICAgICBhcmdEZXRhaWxzLm5hbWUgPSBhcmcuc2xpY2UoMSwgLTEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1snOlxuICAgICAgICBhcmdEZXRhaWxzLm5hbWUgPSBhcmcuc2xpY2UoMSwgLTEpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoYXJnRGV0YWlscy5uYW1lLmxlbmd0aCA+IDMgJiYgYXJnRGV0YWlscy5uYW1lLnNsaWNlKC0zKSA9PT0gJy4uLicpIHtcbiAgICAgIGFyZ0RldGFpbHMudmFyaWFkaWMgPSB0cnVlO1xuICAgICAgYXJnRGV0YWlscy5uYW1lID0gYXJnRGV0YWlscy5uYW1lLnNsaWNlKDAsIC0zKTtcbiAgICB9XG4gICAgaWYgKGFyZ0RldGFpbHMubmFtZSkge1xuICAgICAgc2VsZi5fYXJncy5wdXNoKGFyZ0RldGFpbHMpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBjYWxsYmFjayBgZm5gIGZvciB0aGUgY29tbWFuZC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgIHByb2dyYW1cbiAqICAgICAgICAuY29tbWFuZCgnaGVscCcpXG4gKiAgICAgICAgLmRlc2NyaXB0aW9uKCdkaXNwbGF5IHZlcmJvc2UgaGVscCcpXG4gKiAgICAgICAgLmFjdGlvbihmdW5jdGlvbigpIHtcbiAqICAgICAgICAgICAvLyBvdXRwdXQgaGVscCBoZXJlXG4gKiAgICAgICAgfSk7XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm4ge0NvbW1hbmR9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5hY3Rpb24gPSBmdW5jdGlvbihmbikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uKGFyZ3MsIHVua25vd24pIHtcbiAgICAvLyBQYXJzZSBhbnkgc28tZmFyIHVua25vd24gb3B0aW9uc1xuICAgIGFyZ3MgPSBhcmdzIHx8IFtdO1xuICAgIHVua25vd24gPSB1bmtub3duIHx8IFtdO1xuXG4gICAgdmFyIHBhcnNlZCA9IHNlbGYucGFyc2VPcHRpb25zKHVua25vd24pO1xuXG4gICAgLy8gT3V0cHV0IGhlbHAgaWYgbmVjZXNzYXJ5XG4gICAgb3V0cHV0SGVscElmTmVjZXNzYXJ5KHNlbGYsIHBhcnNlZC51bmtub3duKTtcblxuICAgIC8vIElmIHRoZXJlIGFyZSBzdGlsbCBhbnkgdW5rbm93biBvcHRpb25zLCB0aGVuIHdlIHNpbXBseVxuICAgIC8vIGRpZSwgdW5sZXNzIHNvbWVvbmUgYXNrZWQgZm9yIGhlbHAsIGluIHdoaWNoIGNhc2Ugd2UgZ2l2ZSBpdFxuICAgIC8vIHRvIHRoZW0sIGFuZCB0aGVuIHdlIGRpZS5cbiAgICBpZiAocGFyc2VkLnVua25vd24ubGVuZ3RoID4gMCkge1xuICAgICAgc2VsZi51bmtub3duT3B0aW9uKHBhcnNlZC51bmtub3duWzBdKTtcbiAgICB9XG5cbiAgICAvLyBMZWZ0b3ZlciBhcmd1bWVudHMgbmVlZCB0byBiZSBwdXNoZWQgYmFjay4gRml4ZXMgaXNzdWUgIzU2XG4gICAgaWYgKHBhcnNlZC5hcmdzLmxlbmd0aCkgYXJncyA9IHBhcnNlZC5hcmdzLmNvbmNhdChhcmdzKTtcblxuICAgIHNlbGYuX2FyZ3MuZm9yRWFjaChmdW5jdGlvbihhcmcsIGkpIHtcbiAgICAgIGlmIChhcmcucmVxdWlyZWQgJiYgYXJnc1tpXSA9PSBudWxsKSB7XG4gICAgICAgIHNlbGYubWlzc2luZ0FyZ3VtZW50KGFyZy5uYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJnLnZhcmlhZGljKSB7XG4gICAgICAgIGlmIChpICE9PSBzZWxmLl9hcmdzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBzZWxmLnZhcmlhZGljQXJnTm90TGFzdChhcmcubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBhcmdzW2ldID0gYXJncy5zcGxpY2UoaSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBBbHdheXMgYXBwZW5kIG91cnNlbHZlcyB0byB0aGUgZW5kIG9mIHRoZSBhcmd1bWVudHMsXG4gICAgLy8gdG8gbWFrZSBzdXJlIHdlIG1hdGNoIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRoZSB1c2VyXG4gICAgLy8gZXhwZWN0c1xuICAgIGlmIChzZWxmLl9hcmdzLmxlbmd0aCkge1xuICAgICAgYXJnc1tzZWxmLl9hcmdzLmxlbmd0aF0gPSBzZWxmO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmdzLnB1c2goc2VsZik7XG4gICAgfVxuXG4gICAgZm4uYXBwbHkoc2VsZiwgYXJncyk7XG4gIH07XG4gIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudCB8fCB0aGlzO1xuICB2YXIgbmFtZSA9IHBhcmVudCA9PT0gdGhpcyA/ICcqJyA6IHRoaXMuX25hbWU7XG4gIHBhcmVudC5vbignY29tbWFuZDonICsgbmFtZSwgbGlzdGVuZXIpO1xuICBpZiAodGhpcy5fYWxpYXMpIHBhcmVudC5vbignY29tbWFuZDonICsgdGhpcy5fYWxpYXMsIGxpc3RlbmVyKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERlZmluZSBvcHRpb24gd2l0aCBgZmxhZ3NgLCBgZGVzY3JpcHRpb25gIGFuZCBvcHRpb25hbFxuICogY29lcmNpb24gYGZuYC5cbiAqXG4gKiBUaGUgYGZsYWdzYCBzdHJpbmcgc2hvdWxkIGNvbnRhaW4gYm90aCB0aGUgc2hvcnQgYW5kIGxvbmcgZmxhZ3MsXG4gKiBzZXBhcmF0ZWQgYnkgY29tbWEsIGEgcGlwZSBvciBzcGFjZS4gVGhlIGZvbGxvd2luZyBhcmUgYWxsIHZhbGlkXG4gKiBhbGwgd2lsbCBvdXRwdXQgdGhpcyB3YXkgd2hlbiBgLS1oZWxwYCBpcyB1c2VkLlxuICpcbiAqICAgIFwiLXAsIC0tcGVwcGVyXCJcbiAqICAgIFwiLXB8LS1wZXBwZXJcIlxuICogICAgXCItcCAtLXBlcHBlclwiXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgIC8vIHNpbXBsZSBib29sZWFuIGRlZmF1bHRpbmcgdG8gZmFsc2VcbiAqICAgICBwcm9ncmFtLm9wdGlvbignLXAsIC0tcGVwcGVyJywgJ2FkZCBwZXBwZXInKTtcbiAqXG4gKiAgICAgLS1wZXBwZXJcbiAqICAgICBwcm9ncmFtLnBlcHBlclxuICogICAgIC8vID0+IEJvb2xlYW5cbiAqXG4gKiAgICAgLy8gc2ltcGxlIGJvb2xlYW4gZGVmYXVsdGluZyB0byB0cnVlXG4gKiAgICAgcHJvZ3JhbS5vcHRpb24oJy1DLCAtLW5vLWNoZWVzZScsICdyZW1vdmUgY2hlZXNlJyk7XG4gKlxuICogICAgIHByb2dyYW0uY2hlZXNlXG4gKiAgICAgLy8gPT4gdHJ1ZVxuICpcbiAqICAgICAtLW5vLWNoZWVzZVxuICogICAgIHByb2dyYW0uY2hlZXNlXG4gKiAgICAgLy8gPT4gZmFsc2VcbiAqXG4gKiAgICAgLy8gcmVxdWlyZWQgYXJndW1lbnRcbiAqICAgICBwcm9ncmFtLm9wdGlvbignLUMsIC0tY2hkaXIgPHBhdGg+JywgJ2NoYW5nZSB0aGUgd29ya2luZyBkaXJlY3RvcnknKTtcbiAqXG4gKiAgICAgLS1jaGRpciAvdG1wXG4gKiAgICAgcHJvZ3JhbS5jaGRpclxuICogICAgIC8vID0+IFwiL3RtcFwiXG4gKlxuICogICAgIC8vIG9wdGlvbmFsIGFyZ3VtZW50XG4gKiAgICAgcHJvZ3JhbS5vcHRpb24oJy1jLCAtLWNoZWVzZSBbdHlwZV0nLCAnYWRkIGNoZWVzZSBbbWFyYmxlXScpO1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBmbGFnc1xuICogQHBhcmFtIHtTdHJpbmd9IGRlc2NyaXB0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufCp9IFtmbl0gb3IgZGVmYXVsdFxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXVxuICogQHJldHVybiB7Q29tbWFuZH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLm9wdGlvbiA9IGZ1bmN0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbiwgZm4sIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgb3B0aW9uID0gbmV3IE9wdGlvbihmbGFncywgZGVzY3JpcHRpb24pLFxuICAgIG9uYW1lID0gb3B0aW9uLm5hbWUoKSxcbiAgICBuYW1lID0gb3B0aW9uLmF0dHJpYnV0ZU5hbWUoKTtcblxuICAvLyBkZWZhdWx0IGFzIDNyZCBhcmdcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChmbiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgdmFyIHJlZ2V4ID0gZm47XG4gICAgICBmbiA9IGZ1bmN0aW9uKHZhbCwgZGVmKSB7XG4gICAgICAgIHZhciBtID0gcmVnZXguZXhlYyh2YWwpO1xuICAgICAgICByZXR1cm4gbSA/IG1bMF0gOiBkZWY7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSBmbjtcbiAgICAgIGZuID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyBwcmVhc3NpZ24gZGVmYXVsdCB2YWx1ZSBvbmx5IGZvciAtLW5vLSosIFtvcHRpb25hbF0sIG9yIDxyZXF1aXJlZD5cbiAgaWYgKCFvcHRpb24uYm9vbCB8fCBvcHRpb24ub3B0aW9uYWwgfHwgb3B0aW9uLnJlcXVpcmVkKSB7XG4gICAgLy8gd2hlbiAtLW5vLSogd2UgbWFrZSBzdXJlIGRlZmF1bHQgaXMgdHJ1ZVxuICAgIGlmICghb3B0aW9uLmJvb2wpIGRlZmF1bHRWYWx1ZSA9IHRydWU7XG4gICAgLy8gcHJlYXNzaWduIG9ubHkgaWYgd2UgaGF2ZSBhIGRlZmF1bHRcbiAgICBpZiAoZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNlbGZbbmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICBvcHRpb24uZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJlZ2lzdGVyIHRoZSBvcHRpb25cbiAgdGhpcy5vcHRpb25zLnB1c2gob3B0aW9uKTtcblxuICAvLyB3aGVuIGl0J3MgcGFzc2VkIGFzc2lnbiB0aGUgdmFsdWVcbiAgLy8gYW5kIGNvbmRpdGlvbmFsbHkgaW52b2tlIHRoZSBjYWxsYmFja1xuICB0aGlzLm9uKCdvcHRpb246JyArIG9uYW1lLCBmdW5jdGlvbih2YWwpIHtcbiAgICAvLyBjb2VyY2lvblxuICAgIGlmICh2YWwgIT09IG51bGwgJiYgZm4pIHtcbiAgICAgIHZhbCA9IGZuKHZhbCwgc2VsZltuYW1lXSA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogc2VsZltuYW1lXSk7XG4gICAgfVxuXG4gICAgLy8gdW5hc3NpZ25lZCBvciBib29sXG4gICAgaWYgKHR5cGVvZiBzZWxmW25hbWVdID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIHNlbGZbbmFtZV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBpZiBubyB2YWx1ZSwgYm9vbCB0cnVlLCBhbmQgd2UgaGF2ZSBhIGRlZmF1bHQsIHRoZW4gdXNlIGl0IVxuICAgICAgaWYgKHZhbCA9PSBudWxsKSB7XG4gICAgICAgIHNlbGZbbmFtZV0gPSBvcHRpb24uYm9vbFxuICAgICAgICAgID8gZGVmYXVsdFZhbHVlIHx8IHRydWVcbiAgICAgICAgICA6IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZltuYW1lXSA9IHZhbDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbCAhPT0gbnVsbCkge1xuICAgICAgLy8gcmVhc3NpZ25cbiAgICAgIHNlbGZbbmFtZV0gPSB2YWw7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWxsb3cgdW5rbm93biBvcHRpb25zIG9uIHRoZSBjb21tYW5kIGxpbmUuXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBhcmcgaWYgYHRydWVgIG9yIG9taXR0ZWQsIG5vIGVycm9yIHdpbGwgYmUgdGhyb3duXG4gKiBmb3IgdW5rbm93biBvcHRpb25zLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuQ29tbWFuZC5wcm90b3R5cGUuYWxsb3dVbmtub3duT3B0aW9uID0gZnVuY3Rpb24oYXJnKSB7XG4gIHRoaXMuX2FsbG93VW5rbm93bk9wdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDAgfHwgYXJnO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUGFyc2UgYGFyZ3ZgLCBzZXR0aW5ncyBvcHRpb25zIGFuZCBpbnZva2luZyBjb21tYW5kcyB3aGVuIGRlZmluZWQuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJndlxuICogQHJldHVybiB7Q29tbWFuZH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24oYXJndikge1xuICAvLyBpbXBsaWNpdCBoZWxwXG4gIGlmICh0aGlzLmV4ZWN1dGFibGVzKSB0aGlzLmFkZEltcGxpY2l0SGVscENvbW1hbmQoKTtcblxuICAvLyBzdG9yZSByYXcgYXJnc1xuICB0aGlzLnJhd0FyZ3MgPSBhcmd2O1xuXG4gIC8vIGd1ZXNzIG5hbWVcbiAgdGhpcy5fbmFtZSA9IHRoaXMuX25hbWUgfHwgYmFzZW5hbWUoYXJndlsxXSwgJy5qcycpO1xuXG4gIC8vIGdpdGh1Yi1zdHlsZSBzdWItY29tbWFuZHMgd2l0aCBubyBzdWItY29tbWFuZFxuICBpZiAodGhpcy5leGVjdXRhYmxlcyAmJiBhcmd2Lmxlbmd0aCA8IDMgJiYgIXRoaXMuZGVmYXVsdEV4ZWN1dGFibGUpIHtcbiAgICAvLyB0aGlzIHVzZXIgbmVlZHMgaGVscFxuICAgIGFyZ3YucHVzaCgnLS1oZWxwJyk7XG4gIH1cblxuICAvLyBwcm9jZXNzIGFyZ3ZcbiAgdmFyIHBhcnNlZCA9IHRoaXMucGFyc2VPcHRpb25zKHRoaXMubm9ybWFsaXplKGFyZ3Yuc2xpY2UoMikpKTtcbiAgdmFyIGFyZ3MgPSB0aGlzLmFyZ3MgPSBwYXJzZWQuYXJncztcblxuICB2YXIgcmVzdWx0ID0gdGhpcy5wYXJzZUFyZ3ModGhpcy5hcmdzLCBwYXJzZWQudW5rbm93bik7XG5cbiAgLy8gZXhlY3V0YWJsZSBzdWItY29tbWFuZHNcbiAgdmFyIG5hbWUgPSByZXN1bHQuYXJnc1swXTtcblxuICB2YXIgYWxpYXNDb21tYW5kID0gbnVsbDtcbiAgLy8gY2hlY2sgYWxpYXMgb2Ygc3ViIGNvbW1hbmRzXG4gIGlmIChuYW1lKSB7XG4gICAgYWxpYXNDb21tYW5kID0gdGhpcy5jb21tYW5kcy5maWx0ZXIoZnVuY3Rpb24oY29tbWFuZCkge1xuICAgICAgcmV0dXJuIGNvbW1hbmQuYWxpYXMoKSA9PT0gbmFtZTtcbiAgICB9KVswXTtcbiAgfVxuXG4gIGlmICh0aGlzLl9leGVjc1tuYW1lXSA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVTdWJDb21tYW5kKGFyZ3YsIGFyZ3MsIHBhcnNlZC51bmtub3duKTtcbiAgfSBlbHNlIGlmIChhbGlhc0NvbW1hbmQpIHtcbiAgICAvLyBpcyBhbGlhcyBvZiBhIHN1YkNvbW1hbmRcbiAgICBhcmdzWzBdID0gYWxpYXNDb21tYW5kLl9uYW1lO1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVTdWJDb21tYW5kKGFyZ3YsIGFyZ3MsIHBhcnNlZC51bmtub3duKTtcbiAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRFeGVjdXRhYmxlKSB7XG4gICAgLy8gdXNlIHRoZSBkZWZhdWx0IHN1YmNvbW1hbmRcbiAgICBhcmdzLnVuc2hpZnQodGhpcy5kZWZhdWx0RXhlY3V0YWJsZSk7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVN1YkNvbW1hbmQoYXJndiwgYXJncywgcGFyc2VkLnVua25vd24pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogRXhlY3V0ZSBhIHN1Yi1jb21tYW5kIGV4ZWN1dGFibGUuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJndlxuICogQHBhcmFtIHtBcnJheX0gYXJnc1xuICogQHBhcmFtIHtBcnJheX0gdW5rbm93blxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUuZXhlY3V0ZVN1YkNvbW1hbmQgPSBmdW5jdGlvbihhcmd2LCBhcmdzLCB1bmtub3duKSB7XG4gIGFyZ3MgPSBhcmdzLmNvbmNhdCh1bmtub3duKTtcblxuICBpZiAoIWFyZ3MubGVuZ3RoKSB0aGlzLmhlbHAoKTtcbiAgaWYgKGFyZ3NbMF0gPT09ICdoZWxwJyAmJiBhcmdzLmxlbmd0aCA9PT0gMSkgdGhpcy5oZWxwKCk7XG5cbiAgLy8gPGNtZD4gLS1oZWxwXG4gIGlmIChhcmdzWzBdID09PSAnaGVscCcpIHtcbiAgICBhcmdzWzBdID0gYXJnc1sxXTtcbiAgICBhcmdzWzFdID0gJy0taGVscCc7XG4gIH1cblxuICAvLyBleGVjdXRhYmxlXG4gIHZhciBmID0gYXJndlsxXTtcbiAgLy8gbmFtZSBvZiB0aGUgc3ViY29tbWFuZCwgbGluayBgcG0taW5zdGFsbGBcbiAgdmFyIGJpbiA9IGJhc2VuYW1lKGYsIHBhdGguZXh0bmFtZShmKSkgKyAnLScgKyBhcmdzWzBdO1xuXG4gIC8vIEluIGNhc2Ugb2YgZ2xvYmFsbHkgaW5zdGFsbGVkLCBnZXQgdGhlIGJhc2UgZGlyIHdoZXJlIGV4ZWN1dGFibGVcbiAgLy8gIHN1YmNvbW1hbmQgZmlsZSBzaG91bGQgYmUgbG9jYXRlZCBhdFxuICB2YXIgYmFzZURpcjtcblxuICB2YXIgcmVzb2x2ZWRMaW5rID0gZnMucmVhbHBhdGhTeW5jKGYpO1xuXG4gIGJhc2VEaXIgPSBkaXJuYW1lKHJlc29sdmVkTGluayk7XG5cbiAgLy8gcHJlZmVyIGxvY2FsIGAuLzxiaW4+YCB0byBiaW4gaW4gdGhlICRQQVRIXG4gIHZhciBsb2NhbEJpbiA9IHBhdGguam9pbihiYXNlRGlyLCBiaW4pO1xuXG4gIC8vIHdoZXRoZXIgYmluIGZpbGUgaXMgYSBqcyBzY3JpcHQgd2l0aCBleHBsaWNpdCBgLmpzYCBvciBgLnRzYCBleHRlbnNpb25cbiAgdmFyIGlzRXhwbGljaXRKUyA9IGZhbHNlO1xuICBpZiAoZXhpc3RzKGxvY2FsQmluICsgJy5qcycpKSB7XG4gICAgYmluID0gbG9jYWxCaW4gKyAnLmpzJztcbiAgICBpc0V4cGxpY2l0SlMgPSB0cnVlO1xuICB9IGVsc2UgaWYgKGV4aXN0cyhsb2NhbEJpbiArICcudHMnKSkge1xuICAgIGJpbiA9IGxvY2FsQmluICsgJy50cyc7XG4gICAgaXNFeHBsaWNpdEpTID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChleGlzdHMobG9jYWxCaW4pKSB7XG4gICAgYmluID0gbG9jYWxCaW47XG4gIH1cblxuICBhcmdzID0gYXJncy5zbGljZSgxKTtcblxuICB2YXIgcHJvYztcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT09ICd3aW4zMicpIHtcbiAgICBpZiAoaXNFeHBsaWNpdEpTKSB7XG4gICAgICBhcmdzLnVuc2hpZnQoYmluKTtcbiAgICAgIC8vIGFkZCBleGVjdXRhYmxlIGFyZ3VtZW50cyB0byBzcGF3blxuICAgICAgYXJncyA9IChwcm9jZXNzLmV4ZWNBcmd2IHx8IFtdKS5jb25jYXQoYXJncyk7XG5cbiAgICAgIHByb2MgPSBzcGF3bihwcm9jZXNzLmFyZ3ZbMF0sIGFyZ3MsIHsgc3RkaW86ICdpbmhlcml0JywgY3VzdG9tRmRzOiBbMCwgMSwgMl0gfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2MgPSBzcGF3bihiaW4sIGFyZ3MsIHsgc3RkaW86ICdpbmhlcml0JywgY3VzdG9tRmRzOiBbMCwgMSwgMl0gfSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFyZ3MudW5zaGlmdChiaW4pO1xuICAgIHByb2MgPSBzcGF3bihwcm9jZXNzLmV4ZWNQYXRoLCBhcmdzLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gIH1cblxuICB2YXIgc2lnbmFscyA9IFsnU0lHVVNSMScsICdTSUdVU1IyJywgJ1NJR1RFUk0nLCAnU0lHSU5UJywgJ1NJR0hVUCddO1xuICBzaWduYWxzLmZvckVhY2goZnVuY3Rpb24oc2lnbmFsKSB7XG4gICAgcHJvY2Vzcy5vbihzaWduYWwsIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHByb2Mua2lsbGVkID09PSBmYWxzZSAmJiBwcm9jLmV4aXRDb2RlID09PSBudWxsKSB7XG4gICAgICAgIHByb2Mua2lsbChzaWduYWwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcHJvYy5vbignY2xvc2UnLCBwcm9jZXNzLmV4aXQuYmluZChwcm9jZXNzKSk7XG4gIHByb2Mub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgY29uc29sZS5lcnJvcignZXJyb3I6ICVzKDEpIGRvZXMgbm90IGV4aXN0LCB0cnkgLS1oZWxwJywgYmluKTtcbiAgICB9IGVsc2UgaWYgKGVyci5jb2RlID09PSAnRUFDQ0VTJykge1xuICAgICAgY29uc29sZS5lcnJvcignZXJyb3I6ICVzKDEpIG5vdCBleGVjdXRhYmxlLiB0cnkgY2htb2Qgb3IgcnVuIHdpdGggcm9vdCcsIGJpbik7XG4gICAgfVxuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfSk7XG5cbiAgLy8gU3RvcmUgdGhlIHJlZmVyZW5jZSB0byB0aGUgY2hpbGQgcHJvY2Vzc1xuICB0aGlzLnJ1bm5pbmdDb21tYW5kID0gcHJvYztcbn07XG5cbi8qKlxuICogTm9ybWFsaXplIGBhcmdzYCwgc3BsaXR0aW5nIGpvaW5lZCBzaG9ydCBmbGFncy4gRm9yIGV4YW1wbGVcbiAqIHRoZSBhcmcgXCItYWJjXCIgaXMgZXF1aXZhbGVudCB0byBcIi1hIC1iIC1jXCIuXG4gKiBUaGlzIGFsc28gbm9ybWFsaXplcyBlcXVhbCBzaWduIGFuZCBzcGxpdHMgXCItLWFiYz1kZWZcIiBpbnRvIFwiLS1hYmMgZGVmXCIuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJnc1xuICogQHJldHVybiB7QXJyYXl9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5ub3JtYWxpemUgPSBmdW5jdGlvbihhcmdzKSB7XG4gIHZhciByZXQgPSBbXSxcbiAgICBhcmcsXG4gICAgbGFzdE9wdCxcbiAgICBpbmRleDtcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJncy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIGFyZyA9IGFyZ3NbaV07XG4gICAgaWYgKGkgPiAwKSB7XG4gICAgICBsYXN0T3B0ID0gdGhpcy5vcHRpb25Gb3IoYXJnc1tpIC0gMV0pO1xuICAgIH1cblxuICAgIGlmIChhcmcgPT09ICctLScpIHtcbiAgICAgIC8vIEhvbm9yIG9wdGlvbiB0ZXJtaW5hdG9yXG4gICAgICByZXQgPSByZXQuY29uY2F0KGFyZ3Muc2xpY2UoaSkpO1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmIChsYXN0T3B0ICYmIGxhc3RPcHQucmVxdWlyZWQpIHtcbiAgICAgIHJldC5wdXNoKGFyZyk7XG4gICAgfSBlbHNlIGlmIChhcmcubGVuZ3RoID4gMSAmJiBhcmdbMF0gPT09ICctJyAmJiBhcmdbMV0gIT09ICctJykge1xuICAgICAgYXJnLnNsaWNlKDEpLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgcmV0LnB1c2goJy0nICsgYyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKC9eLS0vLnRlc3QoYXJnKSAmJiB+KGluZGV4ID0gYXJnLmluZGV4T2YoJz0nKSkpIHtcbiAgICAgIHJldC5wdXNoKGFyZy5zbGljZSgwLCBpbmRleCksIGFyZy5zbGljZShpbmRleCArIDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0LnB1c2goYXJnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0O1xufTtcblxuLyoqXG4gKiBQYXJzZSBjb21tYW5kIGBhcmdzYC5cbiAqXG4gKiBXaGVuIGxpc3RlbmVyKHMpIGFyZSBhdmFpbGFibGUgdGhvc2VcbiAqIGNhbGxiYWNrcyBhcmUgaW52b2tlZCwgb3RoZXJ3aXNlIHRoZSBcIipcIlxuICogZXZlbnQgaXMgZW1pdHRlZCBhbmQgdGhvc2UgYWN0aW9ucyBhcmUgaW52b2tlZC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzXG4gKiBAcmV0dXJuIHtDb21tYW5kfSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLnBhcnNlQXJncyA9IGZ1bmN0aW9uKGFyZ3MsIHVua25vd24pIHtcbiAgdmFyIG5hbWU7XG5cbiAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgbmFtZSA9IGFyZ3NbMF07XG4gICAgaWYgKHRoaXMubGlzdGVuZXJzKCdjb21tYW5kOicgKyBuYW1lKS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZW1pdCgnY29tbWFuZDonICsgYXJncy5zaGlmdCgpLCBhcmdzLCB1bmtub3duKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbWl0KCdjb21tYW5kOionLCBhcmdzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0cHV0SGVscElmTmVjZXNzYXJ5KHRoaXMsIHVua25vd24pO1xuXG4gICAgLy8gSWYgdGhlcmUgd2VyZSBubyBhcmdzIGFuZCB3ZSBoYXZlIHVua25vd24gb3B0aW9ucyxcbiAgICAvLyB0aGVuIHRoZXkgYXJlIGV4dHJhbmVvdXMgYW5kIHdlIG5lZWQgdG8gZXJyb3IuXG4gICAgaWYgKHVua25vd24ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy51bmtub3duT3B0aW9uKHVua25vd25bMF0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb21tYW5kcy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgdGhpcy5fYXJncy5maWx0ZXIoZnVuY3Rpb24oYSkgeyByZXR1cm4gYS5yZXF1aXJlZDsgfSkubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmVtaXQoJ2NvbW1hbmQ6KicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYW4gb3B0aW9uIG1hdGNoaW5nIGBhcmdgIGlmIGFueS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYXJnXG4gKiBAcmV0dXJuIHtPcHRpb259XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5vcHRpb25Gb3IgPSBmdW5jdGlvbihhcmcpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMub3B0aW9ucy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNbaV0uaXMoYXJnKSkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1tpXTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogUGFyc2Ugb3B0aW9ucyBmcm9tIGBhcmd2YCByZXR1cm5pbmcgYGFyZ3ZgXG4gKiB2b2lkIG9mIHRoZXNlIG9wdGlvbnMuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJndlxuICogQHJldHVybiB7QXJyYXl9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLnBhcnNlT3B0aW9ucyA9IGZ1bmN0aW9uKGFyZ3YpIHtcbiAgdmFyIGFyZ3MgPSBbXSxcbiAgICBsZW4gPSBhcmd2Lmxlbmd0aCxcbiAgICBsaXRlcmFsLFxuICAgIG9wdGlvbixcbiAgICBhcmc7XG5cbiAgdmFyIHVua25vd25PcHRpb25zID0gW107XG5cbiAgLy8gcGFyc2Ugb3B0aW9uc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgYXJnID0gYXJndltpXTtcblxuICAgIC8vIGxpdGVyYWwgYXJncyBhZnRlciAtLVxuICAgIGlmIChsaXRlcmFsKSB7XG4gICAgICBhcmdzLnB1c2goYXJnKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChhcmcgPT09ICctLScpIHtcbiAgICAgIGxpdGVyYWwgPSB0cnVlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gZmluZCBtYXRjaGluZyBPcHRpb25cbiAgICBvcHRpb24gPSB0aGlzLm9wdGlvbkZvcihhcmcpO1xuXG4gICAgLy8gb3B0aW9uIGlzIGRlZmluZWRcbiAgICBpZiAob3B0aW9uKSB7XG4gICAgICAvLyByZXF1aXJlcyBhcmdcbiAgICAgIGlmIChvcHRpb24ucmVxdWlyZWQpIHtcbiAgICAgICAgYXJnID0gYXJndlsrK2ldO1xuICAgICAgICBpZiAoYXJnID09IG51bGwpIHJldHVybiB0aGlzLm9wdGlvbk1pc3NpbmdBcmd1bWVudChvcHRpb24pO1xuICAgICAgICB0aGlzLmVtaXQoJ29wdGlvbjonICsgb3B0aW9uLm5hbWUoKSwgYXJnKTtcbiAgICAgIC8vIG9wdGlvbmFsIGFyZ1xuICAgICAgfSBlbHNlIGlmIChvcHRpb24ub3B0aW9uYWwpIHtcbiAgICAgICAgYXJnID0gYXJndltpICsgMV07XG4gICAgICAgIGlmIChhcmcgPT0gbnVsbCB8fCAoYXJnWzBdID09PSAnLScgJiYgYXJnICE9PSAnLScpKSB7XG4gICAgICAgICAgYXJnID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICArK2k7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0KCdvcHRpb246JyArIG9wdGlvbi5uYW1lKCksIGFyZyk7XG4gICAgICAvLyBib29sXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVtaXQoJ29wdGlvbjonICsgb3B0aW9uLm5hbWUoKSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBsb29rcyBsaWtlIGFuIG9wdGlvblxuICAgIGlmIChhcmcubGVuZ3RoID4gMSAmJiBhcmdbMF0gPT09ICctJykge1xuICAgICAgdW5rbm93bk9wdGlvbnMucHVzaChhcmcpO1xuXG4gICAgICAvLyBJZiB0aGUgbmV4dCBhcmd1bWVudCBsb29rcyBsaWtlIGl0IG1pZ2h0IGJlXG4gICAgICAvLyBhbiBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24sIHdlIHBhc3MgaXQgb24uXG4gICAgICAvLyBJZiBpdCBpc24ndCwgdGhlbiBpdCdsbCBzaW1wbHkgYmUgaWdub3JlZFxuICAgICAgaWYgKChpICsgMSkgPCBhcmd2Lmxlbmd0aCAmJiBhcmd2W2kgKyAxXVswXSAhPT0gJy0nKSB7XG4gICAgICAgIHVua25vd25PcHRpb25zLnB1c2goYXJndlsrK2ldKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGFyZ1xuICAgIGFyZ3MucHVzaChhcmcpO1xuICB9XG5cbiAgcmV0dXJuIHsgYXJnczogYXJncywgdW5rbm93bjogdW5rbm93bk9wdGlvbnMgfTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGFuIG9iamVjdCBjb250YWluaW5nIG9wdGlvbnMgYXMga2V5LXZhbHVlIHBhaXJzXG4gKlxuICogQHJldHVybiB7T2JqZWN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuQ29tbWFuZC5wcm90b3R5cGUub3B0cyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzdWx0ID0ge30sXG4gICAgbGVuID0gdGhpcy5vcHRpb25zLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGtleSA9IHRoaXMub3B0aW9uc1tpXS5hdHRyaWJ1dGVOYW1lKCk7XG4gICAgcmVzdWx0W2tleV0gPSBrZXkgPT09IHRoaXMuX3ZlcnNpb25PcHRpb25OYW1lID8gdGhpcy5fdmVyc2lvbiA6IHRoaXNba2V5XTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBBcmd1bWVudCBgbmFtZWAgaXMgbWlzc2luZy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUubWlzc2luZ0FyZ3VtZW50ID0gZnVuY3Rpb24obmFtZSkge1xuICBjb25zb2xlLmVycm9yKFwiZXJyb3I6IG1pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQgYCVzJ1wiLCBuYW1lKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufTtcblxuLyoqXG4gKiBgT3B0aW9uYCBpcyBtaXNzaW5nIGFuIGFyZ3VtZW50LCBidXQgcmVjZWl2ZWQgYGZsYWdgIG9yIG5vdGhpbmcuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvblxuICogQHBhcmFtIHtTdHJpbmd9IGZsYWdcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLm9wdGlvbk1pc3NpbmdBcmd1bWVudCA9IGZ1bmN0aW9uKG9wdGlvbiwgZmxhZykge1xuICBpZiAoZmxhZykge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJlcnJvcjogb3B0aW9uIGAlcycgYXJndW1lbnQgbWlzc2luZywgZ290IGAlcydcIiwgb3B0aW9uLmZsYWdzLCBmbGFnKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmVycm9yKFwiZXJyb3I6IG9wdGlvbiBgJXMnIGFyZ3VtZW50IG1pc3NpbmdcIiwgb3B0aW9uLmZsYWdzKTtcbiAgfVxuICBwcm9jZXNzLmV4aXQoMSk7XG59O1xuXG4vKipcbiAqIFVua25vd24gb3B0aW9uIGBmbGFnYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZmxhZ1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUudW5rbm93bk9wdGlvbiA9IGZ1bmN0aW9uKGZsYWcpIHtcbiAgaWYgKHRoaXMuX2FsbG93VW5rbm93bk9wdGlvbikgcmV0dXJuO1xuICBjb25zb2xlLmVycm9yKFwiZXJyb3I6IHVua25vd24gb3B0aW9uIGAlcydcIiwgZmxhZyk7XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn07XG5cbi8qKlxuICogVmFyaWFkaWMgYXJndW1lbnQgd2l0aCBgbmFtZWAgaXMgbm90IHRoZSBsYXN0IGFyZ3VtZW50IGFzIHJlcXVpcmVkLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS52YXJpYWRpY0FyZ05vdExhc3QgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGNvbnNvbGUuZXJyb3IoXCJlcnJvcjogdmFyaWFkaWMgYXJndW1lbnRzIG11c3QgYmUgbGFzdCBgJXMnXCIsIG5hbWUpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcHJvZ3JhbSB2ZXJzaW9uIHRvIGBzdHJgLlxuICpcbiAqIFRoaXMgbWV0aG9kIGF1dG8tcmVnaXN0ZXJzIHRoZSBcIi1WLCAtLXZlcnNpb25cIiBmbGFnXG4gKiB3aGljaCB3aWxsIHByaW50IHRoZSB2ZXJzaW9uIG51bWJlciB3aGVuIHBhc3NlZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gW2ZsYWdzXVxuICogQHJldHVybiB7Q29tbWFuZH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLnZlcnNpb24gPSBmdW5jdGlvbihzdHIsIGZsYWdzKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdGhpcy5fdmVyc2lvbjtcbiAgdGhpcy5fdmVyc2lvbiA9IHN0cjtcbiAgZmxhZ3MgPSBmbGFncyB8fCAnLVYsIC0tdmVyc2lvbic7XG4gIHZhciB2ZXJzaW9uT3B0aW9uID0gbmV3IE9wdGlvbihmbGFncywgJ291dHB1dCB0aGUgdmVyc2lvbiBudW1iZXInKTtcbiAgdGhpcy5fdmVyc2lvbk9wdGlvbk5hbWUgPSB2ZXJzaW9uT3B0aW9uLmxvbmcuc3Vic3RyKDIpIHx8ICd2ZXJzaW9uJztcbiAgdGhpcy5vcHRpb25zLnB1c2godmVyc2lvbk9wdGlvbik7XG4gIHRoaXMub24oJ29wdGlvbjonICsgdGhpcy5fdmVyc2lvbk9wdGlvbk5hbWUsIGZ1bmN0aW9uKCkge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHN0ciArICdcXG4nKTtcbiAgICBwcm9jZXNzLmV4aXQoMCk7XG4gIH0pO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IHRoZSBkZXNjcmlwdGlvbiB0byBgc3RyYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge09iamVjdH0gYXJnc0Rlc2NyaXB0aW9uXG4gKiBAcmV0dXJuIHtTdHJpbmd8Q29tbWFuZH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUuZGVzY3JpcHRpb24gPSBmdW5jdGlvbihzdHIsIGFyZ3NEZXNjcmlwdGlvbikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMuX2Rlc2NyaXB0aW9uO1xuICB0aGlzLl9kZXNjcmlwdGlvbiA9IHN0cjtcbiAgdGhpcy5fYXJnc0Rlc2NyaXB0aW9uID0gYXJnc0Rlc2NyaXB0aW9uO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IGFuIGFsaWFzIGZvciB0aGUgY29tbWFuZFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhbGlhc1xuICogQHJldHVybiB7U3RyaW5nfENvbW1hbmR9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLmFsaWFzID0gZnVuY3Rpb24oYWxpYXMpIHtcbiAgdmFyIGNvbW1hbmQgPSB0aGlzO1xuICBpZiAodGhpcy5jb21tYW5kcy5sZW5ndGggIT09IDApIHtcbiAgICBjb21tYW5kID0gdGhpcy5jb21tYW5kc1t0aGlzLmNvbW1hbmRzLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiBjb21tYW5kLl9hbGlhcztcblxuICBpZiAoYWxpYXMgPT09IGNvbW1hbmQuX25hbWUpIHRocm93IG5ldyBFcnJvcignQ29tbWFuZCBhbGlhcyBjYW5cXCd0IGJlIHRoZSBzYW1lIGFzIGl0cyBuYW1lJyk7XG5cbiAgY29tbWFuZC5fYWxpYXMgPSBhbGlhcztcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldCAvIGdldCB0aGUgY29tbWFuZCB1c2FnZSBgc3RyYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtTdHJpbmd8Q29tbWFuZH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUudXNhZ2UgPSBmdW5jdGlvbihzdHIpIHtcbiAgdmFyIGFyZ3MgPSB0aGlzLl9hcmdzLm1hcChmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gaHVtYW5SZWFkYWJsZUFyZ05hbWUoYXJnKTtcbiAgfSk7XG5cbiAgdmFyIHVzYWdlID0gJ1tvcHRpb25zXScgK1xuICAgICh0aGlzLmNvbW1hbmRzLmxlbmd0aCA/ICcgW2NvbW1hbmRdJyA6ICcnKSArXG4gICAgKHRoaXMuX2FyZ3MubGVuZ3RoID8gJyAnICsgYXJncy5qb2luKCcgJykgOiAnJyk7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB0aGlzLl91c2FnZSB8fCB1c2FnZTtcbiAgdGhpcy5fdXNhZ2UgPSBzdHI7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEdldCBvciBzZXQgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtTdHJpbmd8Q29tbWFuZH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUubmFtZSA9IGZ1bmN0aW9uKHN0cikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMuX25hbWU7XG4gIHRoaXMuX25hbWUgPSBzdHI7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gcHJlcGFyZWQgY29tbWFuZHMuXG4gKlxuICogQHJldHVybiB7QXJyYXl9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5wcmVwYXJlQ29tbWFuZHMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuY29tbWFuZHMuZmlsdGVyKGZ1bmN0aW9uKGNtZCkge1xuICAgIHJldHVybiAhY21kLl9ub0hlbHA7XG4gIH0pLm1hcChmdW5jdGlvbihjbWQpIHtcbiAgICB2YXIgYXJncyA9IGNtZC5fYXJncy5tYXAoZnVuY3Rpb24oYXJnKSB7XG4gICAgICByZXR1cm4gaHVtYW5SZWFkYWJsZUFyZ05hbWUoYXJnKTtcbiAgICB9KS5qb2luKCcgJyk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgY21kLl9uYW1lICtcbiAgICAgICAgKGNtZC5fYWxpYXMgPyAnfCcgKyBjbWQuX2FsaWFzIDogJycpICtcbiAgICAgICAgKGNtZC5vcHRpb25zLmxlbmd0aCA/ICcgW29wdGlvbnNdJyA6ICcnKSArXG4gICAgICAgIChhcmdzID8gJyAnICsgYXJncyA6ICcnKSxcbiAgICAgIGNtZC5fZGVzY3JpcHRpb25cbiAgICBdO1xuICB9KTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsYXJnZXN0IGNvbW1hbmQgbGVuZ3RoLlxuICpcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLmxhcmdlc3RDb21tYW5kTGVuZ3RoID0gZnVuY3Rpb24oKSB7XG4gIHZhciBjb21tYW5kcyA9IHRoaXMucHJlcGFyZUNvbW1hbmRzKCk7XG4gIHJldHVybiBjb21tYW5kcy5yZWR1Y2UoZnVuY3Rpb24obWF4LCBjb21tYW5kKSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KG1heCwgY29tbWFuZFswXS5sZW5ndGgpO1xuICB9LCAwKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsYXJnZXN0IG9wdGlvbiBsZW5ndGguXG4gKlxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUubGFyZ2VzdE9wdGlvbkxlbmd0aCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgb3B0aW9ucyA9IFtdLnNsaWNlLmNhbGwodGhpcy5vcHRpb25zKTtcbiAgb3B0aW9ucy5wdXNoKHtcbiAgICBmbGFnczogJy1oLCAtLWhlbHAnXG4gIH0pO1xuICByZXR1cm4gb3B0aW9ucy5yZWR1Y2UoZnVuY3Rpb24obWF4LCBvcHRpb24pIHtcbiAgICByZXR1cm4gTWF0aC5tYXgobWF4LCBvcHRpb24uZmxhZ3MubGVuZ3RoKTtcbiAgfSwgMCk7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbGFyZ2VzdCBhcmcgbGVuZ3RoLlxuICpcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLmxhcmdlc3RBcmdMZW5ndGggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2FyZ3MucmVkdWNlKGZ1bmN0aW9uKG1heCwgYXJnKSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KG1heCwgYXJnLm5hbWUubGVuZ3RoKTtcbiAgfSwgMCk7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgcGFkIHdpZHRoLlxuICpcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLnBhZFdpZHRoID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3aWR0aCA9IHRoaXMubGFyZ2VzdE9wdGlvbkxlbmd0aCgpO1xuICBpZiAodGhpcy5fYXJnc0Rlc2NyaXB0aW9uICYmIHRoaXMuX2FyZ3MubGVuZ3RoKSB7XG4gICAgaWYgKHRoaXMubGFyZ2VzdEFyZ0xlbmd0aCgpID4gd2lkdGgpIHtcbiAgICAgIHdpZHRoID0gdGhpcy5sYXJnZXN0QXJnTGVuZ3RoKCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMuY29tbWFuZHMgJiYgdGhpcy5jb21tYW5kcy5sZW5ndGgpIHtcbiAgICBpZiAodGhpcy5sYXJnZXN0Q29tbWFuZExlbmd0aCgpID4gd2lkdGgpIHtcbiAgICAgIHdpZHRoID0gdGhpcy5sYXJnZXN0Q29tbWFuZExlbmd0aCgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3aWR0aDtcbn07XG5cbi8qKlxuICogUmV0dXJuIGhlbHAgZm9yIG9wdGlvbnMuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUub3B0aW9uSGVscCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd2lkdGggPSB0aGlzLnBhZFdpZHRoKCk7XG5cbiAgLy8gQXBwZW5kIHRoZSBoZWxwIGluZm9ybWF0aW9uXG4gIHJldHVybiB0aGlzLm9wdGlvbnMubWFwKGZ1bmN0aW9uKG9wdGlvbikge1xuICAgIHJldHVybiBwYWQob3B0aW9uLmZsYWdzLCB3aWR0aCkgKyAnICAnICsgb3B0aW9uLmRlc2NyaXB0aW9uICtcbiAgICAgICgob3B0aW9uLmJvb2wgJiYgb3B0aW9uLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSA/ICcgKGRlZmF1bHQ6ICcgKyBKU09OLnN0cmluZ2lmeShvcHRpb24uZGVmYXVsdFZhbHVlKSArICcpJyA6ICcnKTtcbiAgfSkuY29uY2F0KFtwYWQoJy1oLCAtLWhlbHAnLCB3aWR0aCkgKyAnICAnICsgJ291dHB1dCB1c2FnZSBpbmZvcm1hdGlvbiddKVxuICAgIC5qb2luKCdcXG4nKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGNvbW1hbmQgaGVscCBkb2N1bWVudGF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLmNvbW1hbmRIZWxwID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5jb21tYW5kcy5sZW5ndGgpIHJldHVybiAnJztcblxuICB2YXIgY29tbWFuZHMgPSB0aGlzLnByZXBhcmVDb21tYW5kcygpO1xuICB2YXIgd2lkdGggPSB0aGlzLnBhZFdpZHRoKCk7XG5cbiAgcmV0dXJuIFtcbiAgICAnQ29tbWFuZHM6JyxcbiAgICBjb21tYW5kcy5tYXAoZnVuY3Rpb24oY21kKSB7XG4gICAgICB2YXIgZGVzYyA9IGNtZFsxXSA/ICcgICcgKyBjbWRbMV0gOiAnJztcbiAgICAgIHJldHVybiAoZGVzYyA/IHBhZChjbWRbMF0sIHdpZHRoKSA6IGNtZFswXSkgKyBkZXNjO1xuICAgIH0pLmpvaW4oJ1xcbicpLnJlcGxhY2UoL14vZ20sICcgICcpLFxuICAgICcnXG4gIF0uam9pbignXFxuJyk7XG59O1xuXG4vKipcbiAqIFJldHVybiBwcm9ncmFtIGhlbHAgZG9jdW1lbnRhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5oZWxwSW5mb3JtYXRpb24gPSBmdW5jdGlvbigpIHtcbiAgdmFyIGRlc2MgPSBbXTtcbiAgaWYgKHRoaXMuX2Rlc2NyaXB0aW9uKSB7XG4gICAgZGVzYyA9IFtcbiAgICAgIHRoaXMuX2Rlc2NyaXB0aW9uLFxuICAgICAgJydcbiAgICBdO1xuXG4gICAgdmFyIGFyZ3NEZXNjcmlwdGlvbiA9IHRoaXMuX2FyZ3NEZXNjcmlwdGlvbjtcbiAgICBpZiAoYXJnc0Rlc2NyaXB0aW9uICYmIHRoaXMuX2FyZ3MubGVuZ3RoKSB7XG4gICAgICB2YXIgd2lkdGggPSB0aGlzLnBhZFdpZHRoKCk7XG4gICAgICBkZXNjLnB1c2goJ0FyZ3VtZW50czonKTtcbiAgICAgIGRlc2MucHVzaCgnJyk7XG4gICAgICB0aGlzLl9hcmdzLmZvckVhY2goZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIGRlc2MucHVzaCgnICAnICsgcGFkKGFyZy5uYW1lLCB3aWR0aCkgKyAnICAnICsgYXJnc0Rlc2NyaXB0aW9uW2FyZy5uYW1lXSk7XG4gICAgICB9KTtcbiAgICAgIGRlc2MucHVzaCgnJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNtZE5hbWUgPSB0aGlzLl9uYW1lO1xuICBpZiAodGhpcy5fYWxpYXMpIHtcbiAgICBjbWROYW1lID0gY21kTmFtZSArICd8JyArIHRoaXMuX2FsaWFzO1xuICB9XG4gIHZhciB1c2FnZSA9IFtcbiAgICAnVXNhZ2U6ICcgKyBjbWROYW1lICsgJyAnICsgdGhpcy51c2FnZSgpLFxuICAgICcnXG4gIF07XG5cbiAgdmFyIGNtZHMgPSBbXTtcbiAgdmFyIGNvbW1hbmRIZWxwID0gdGhpcy5jb21tYW5kSGVscCgpO1xuICBpZiAoY29tbWFuZEhlbHApIGNtZHMgPSBbY29tbWFuZEhlbHBdO1xuXG4gIHZhciBvcHRpb25zID0gW1xuICAgICdPcHRpb25zOicsXG4gICAgJycgKyB0aGlzLm9wdGlvbkhlbHAoKS5yZXBsYWNlKC9eL2dtLCAnICAnKSxcbiAgICAnJ1xuICBdO1xuXG4gIHJldHVybiB1c2FnZVxuICAgIC5jb25jYXQoZGVzYylcbiAgICAuY29uY2F0KG9wdGlvbnMpXG4gICAgLmNvbmNhdChjbWRzKVxuICAgIC5qb2luKCdcXG4nKTtcbn07XG5cbi8qKlxuICogT3V0cHV0IGhlbHAgaW5mb3JtYXRpb24gZm9yIHRoaXMgY29tbWFuZFxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUub3V0cHV0SGVscCA9IGZ1bmN0aW9uKGNiKSB7XG4gIGlmICghY2IpIHtcbiAgICBjYiA9IGZ1bmN0aW9uKHBhc3N0aHJ1KSB7XG4gICAgICByZXR1cm4gcGFzc3RocnU7XG4gICAgfTtcbiAgfVxuICBwcm9jZXNzLnN0ZG91dC53cml0ZShjYih0aGlzLmhlbHBJbmZvcm1hdGlvbigpKSk7XG4gIHRoaXMuZW1pdCgnLS1oZWxwJyk7XG59O1xuXG4vKipcbiAqIE91dHB1dCBoZWxwIGluZm9ybWF0aW9uIGFuZCBleGl0LlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUuaGVscCA9IGZ1bmN0aW9uKGNiKSB7XG4gIHRoaXMub3V0cHV0SGVscChjYik7XG4gIHByb2Nlc3MuZXhpdCgpO1xufTtcblxuLyoqXG4gKiBDYW1lbC1jYXNlIHRoZSBnaXZlbiBgZmxhZ2BcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZmxhZ1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gY2FtZWxjYXNlKGZsYWcpIHtcbiAgcmV0dXJuIGZsYWcuc3BsaXQoJy0nKS5yZWR1Y2UoZnVuY3Rpb24oc3RyLCB3b3JkKSB7XG4gICAgcmV0dXJuIHN0ciArIHdvcmRbMF0udG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFBhZCBgc3RyYCB0byBgd2lkdGhgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3aWR0aFxuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFkKHN0ciwgd2lkdGgpIHtcbiAgdmFyIGxlbiA9IE1hdGgubWF4KDAsIHdpZHRoIC0gc3RyLmxlbmd0aCk7XG4gIHJldHVybiBzdHIgKyBBcnJheShsZW4gKyAxKS5qb2luKCcgJyk7XG59XG5cbi8qKlxuICogT3V0cHV0IGhlbHAgaW5mb3JtYXRpb24gaWYgbmVjZXNzYXJ5XG4gKlxuICogQHBhcmFtIHtDb21tYW5kfSBjb21tYW5kIHRvIG91dHB1dCBoZWxwIGZvclxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgb2Ygb3B0aW9ucyB0byBzZWFyY2ggZm9yIC1oIG9yIC0taGVscFxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gb3V0cHV0SGVscElmTmVjZXNzYXJ5KGNtZCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG9wdGlvbnNbaV0gPT09ICctLWhlbHAnIHx8IG9wdGlvbnNbaV0gPT09ICctaCcpIHtcbiAgICAgIGNtZC5vdXRwdXRIZWxwKCk7XG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGFrZXMgYW4gYXJndW1lbnQgYW4gcmV0dXJucyBpdHMgaHVtYW4gcmVhZGFibGUgZXF1aXZhbGVudCBmb3IgaGVscCB1c2FnZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYXJnXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBodW1hblJlYWRhYmxlQXJnTmFtZShhcmcpIHtcbiAgdmFyIG5hbWVPdXRwdXQgPSBhcmcubmFtZSArIChhcmcudmFyaWFkaWMgPT09IHRydWUgPyAnLi4uJyA6ICcnKTtcblxuICByZXR1cm4gYXJnLnJlcXVpcmVkXG4gICAgPyAnPCcgKyBuYW1lT3V0cHV0ICsgJz4nXG4gICAgOiAnWycgKyBuYW1lT3V0cHV0ICsgJ10nO1xufVxuXG4vLyBmb3IgdmVyc2lvbnMgYmVmb3JlIG5vZGUgdjAuOCB3aGVuIHRoZXJlIHdlcmVuJ3QgYGZzLmV4aXN0c1N5bmNgXG5mdW5jdGlvbiBleGlzdHMoZmlsZSkge1xuICB0cnkge1xuICAgIGlmIChmcy5zdGF0U3luYyhmaWxlKS5pc0ZpbGUoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCAiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuXHJcbi8qIGdsb2JhbCBnbG9iYWwsIGRlZmluZSwgU3lzdGVtLCBSZWZsZWN0LCBQcm9taXNlICovXHJcbnZhciBfX2V4dGVuZHM7XHJcbnZhciBfX2Fzc2lnbjtcclxudmFyIF9fcmVzdDtcclxudmFyIF9fZGVjb3JhdGU7XHJcbnZhciBfX3BhcmFtO1xyXG52YXIgX19tZXRhZGF0YTtcclxudmFyIF9fYXdhaXRlcjtcclxudmFyIF9fZ2VuZXJhdG9yO1xyXG52YXIgX19leHBvcnRTdGFyO1xyXG52YXIgX192YWx1ZXM7XHJcbnZhciBfX3JlYWQ7XHJcbnZhciBfX3NwcmVhZDtcclxudmFyIF9fc3ByZWFkQXJyYXlzO1xyXG52YXIgX19hd2FpdDtcclxudmFyIF9fYXN5bmNHZW5lcmF0b3I7XHJcbnZhciBfX2FzeW5jRGVsZWdhdG9yO1xyXG52YXIgX19hc3luY1ZhbHVlcztcclxudmFyIF9fbWFrZVRlbXBsYXRlT2JqZWN0O1xyXG52YXIgX19pbXBvcnRTdGFyO1xyXG52YXIgX19pbXBvcnREZWZhdWx0O1xyXG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZEdldDtcclxudmFyIF9fY2xhc3NQcml2YXRlRmllbGRTZXQ7XHJcbnZhciBfX2NyZWF0ZUJpbmRpbmc7XHJcbihmdW5jdGlvbiAoZmFjdG9yeSkge1xyXG4gICAgdmFyIHJvb3QgPSB0eXBlb2YgZ2xvYmFsID09PSBcIm9iamVjdFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdHlwZW9mIHRoaXMgPT09IFwib2JqZWN0XCIgPyB0aGlzIDoge307XHJcbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcclxuICAgICAgICBkZWZpbmUoXCJ0c2xpYlwiLCBbXCJleHBvcnRzXCJdLCBmdW5jdGlvbiAoZXhwb3J0cykgeyBmYWN0b3J5KGNyZWF0ZUV4cG9ydGVyKHJvb3QsIGNyZWF0ZUV4cG9ydGVyKGV4cG9ydHMpKSk7IH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICBmYWN0b3J5KGNyZWF0ZUV4cG9ydGVyKHJvb3QsIGNyZWF0ZUV4cG9ydGVyKG1vZHVsZS5leHBvcnRzKSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZmFjdG9yeShjcmVhdGVFeHBvcnRlcihyb290KSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBjcmVhdGVFeHBvcnRlcihleHBvcnRzLCBwcmV2aW91cykge1xyXG4gICAgICAgIGlmIChleHBvcnRzICE9PSByb290KSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoaWQsIHYpIHsgcmV0dXJuIGV4cG9ydHNbaWRdID0gcHJldmlvdXMgPyBwcmV2aW91cyhpZCwgdikgOiB2OyB9O1xyXG4gICAgfVxyXG59KVxyXG4oZnVuY3Rpb24gKGV4cG9ydGVyKSB7XHJcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuXHJcbiAgICBfX2V4dGVuZHMgPSBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fcmVzdCA9IGZ1bmN0aW9uIChzLCBlKSB7XHJcbiAgICAgICAgdmFyIHQgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH07XHJcblxyXG4gICAgX19kZWNvcmF0ZSA9IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgICAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fcGFyYW0gPSBmdW5jdGlvbiAocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbiAgICB9O1xyXG5cclxuICAgIF9fbWV0YWRhdGEgPSBmdW5jdGlvbiAobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2F3YWl0ZXIgPSBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgX19nZW5lcmF0b3IgPSBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xyXG4gICAgICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICAgICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICAgICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBfX2NyZWF0ZUJpbmRpbmcgPSBmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICAgICAgb1trMl0gPSBtW2tdO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2V4cG9ydFN0YXIgPSBmdW5jdGlvbiAobSwgZXhwb3J0cykge1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBvcnRzW3BdID0gbVtwXTtcclxuICAgIH07XHJcblxyXG4gICAgX192YWx1ZXMgPSBmdW5jdGlvbiAobykge1xyXG4gICAgICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICAgICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICAgICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fcmVhZCA9IGZ1bmN0aW9uIChvLCBuKSB7XHJcbiAgICAgICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICAgICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcjtcclxuICAgIH07XHJcblxyXG4gICAgX19zcHJlYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgICAgICByZXR1cm4gYXI7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fc3ByZWFkQXJyYXlzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcclxuICAgICAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgICAgICByZXR1cm4gcjtcclxuICAgIH07XHJcblxyXG4gICAgX19hd2FpdCA9IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYXN5bmNHZW5lcmF0b3IgPSBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICAgICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgICAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgICAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgICAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyAgfVxyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICAgICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG4gICAgfTtcclxuXHJcbiAgICBfX2FzeW5jRGVsZWdhdG9yID0gZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICB2YXIgaSwgcDtcclxuICAgICAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxuICAgIH07XHJcblxyXG4gICAgX19hc3luY1ZhbHVlcyA9IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgICAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgICAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICAgICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG4gICAgfTtcclxuXHJcbiAgICBfX21ha2VUZW1wbGF0ZU9iamVjdCA9IGZ1bmN0aW9uIChjb29rZWQsIHJhdykge1xyXG4gICAgICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICAgICAgcmV0dXJuIGNvb2tlZDtcclxuICAgIH07XHJcblxyXG4gICAgX19pbXBvcnRTdGFyID0gZnVuY3Rpb24gKG1vZCkge1xyXG4gICAgICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSByZXN1bHRba10gPSBtb2Rba107XHJcbiAgICAgICAgcmVzdWx0W1wiZGVmYXVsdFwiXSA9IG1vZDtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2ltcG9ydERlZmF1bHQgPSBmdW5jdGlvbiAobW9kKSB7XHJcbiAgICAgICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XHJcbiAgICB9O1xyXG5cclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSBmdW5jdGlvbiAocmVjZWl2ZXIsIHByaXZhdGVNYXApIHtcclxuICAgICAgICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHByaXZhdGVNYXAuZ2V0KHJlY2VpdmVyKTtcclxuICAgIH07XHJcblxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCA9IGZ1bmN0aW9uIChyZWNlaXZlciwgcHJpdmF0ZU1hcCwgdmFsdWUpIHtcclxuICAgICAgICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIHNldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHJpdmF0ZU1hcC5zZXQocmVjZWl2ZXIsIHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9O1xyXG5cclxuICAgIGV4cG9ydGVyKFwiX19leHRlbmRzXCIsIF9fZXh0ZW5kcyk7XHJcbiAgICBleHBvcnRlcihcIl9fYXNzaWduXCIsIF9fYXNzaWduKTtcclxuICAgIGV4cG9ydGVyKFwiX19yZXN0XCIsIF9fcmVzdCk7XHJcbiAgICBleHBvcnRlcihcIl9fZGVjb3JhdGVcIiwgX19kZWNvcmF0ZSk7XHJcbiAgICBleHBvcnRlcihcIl9fcGFyYW1cIiwgX19wYXJhbSk7XHJcbiAgICBleHBvcnRlcihcIl9fbWV0YWRhdGFcIiwgX19tZXRhZGF0YSk7XHJcbiAgICBleHBvcnRlcihcIl9fYXdhaXRlclwiLCBfX2F3YWl0ZXIpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2dlbmVyYXRvclwiLCBfX2dlbmVyYXRvcik7XHJcbiAgICBleHBvcnRlcihcIl9fZXhwb3J0U3RhclwiLCBfX2V4cG9ydFN0YXIpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2NyZWF0ZUJpbmRpbmdcIiwgX19jcmVhdGVCaW5kaW5nKTtcclxuICAgIGV4cG9ydGVyKFwiX192YWx1ZXNcIiwgX192YWx1ZXMpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3JlYWRcIiwgX19yZWFkKTtcclxuICAgIGV4cG9ydGVyKFwiX19zcHJlYWRcIiwgX19zcHJlYWQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3NwcmVhZEFycmF5c1wiLCBfX3NwcmVhZEFycmF5cyk7XHJcbiAgICBleHBvcnRlcihcIl9fYXdhaXRcIiwgX19hd2FpdCk7XHJcbiAgICBleHBvcnRlcihcIl9fYXN5bmNHZW5lcmF0b3JcIiwgX19hc3luY0dlbmVyYXRvcik7XHJcbiAgICBleHBvcnRlcihcIl9fYXN5bmNEZWxlZ2F0b3JcIiwgX19hc3luY0RlbGVnYXRvcik7XHJcbiAgICBleHBvcnRlcihcIl9fYXN5bmNWYWx1ZXNcIiwgX19hc3luY1ZhbHVlcyk7XHJcbiAgICBleHBvcnRlcihcIl9fbWFrZVRlbXBsYXRlT2JqZWN0XCIsIF9fbWFrZVRlbXBsYXRlT2JqZWN0KTtcclxuICAgIGV4cG9ydGVyKFwiX19pbXBvcnRTdGFyXCIsIF9faW1wb3J0U3Rhcik7XHJcbiAgICBleHBvcnRlcihcIl9faW1wb3J0RGVmYXVsdFwiLCBfX2ltcG9ydERlZmF1bHQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0XCIsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0XCIsIF9fY2xhc3NQcml2YXRlRmllbGRTZXQpO1xyXG59KTtcclxuIiwgIi8qKiBDb25zb2xlIGxvZ2dpbmcgdmVyYm9zaXR5IGZvciB0aGUgU0RLLiAqL1xuZXhwb3J0IGVudW0gTG9nTGV2ZWwge1xuICAvKiogTm8gbG9ncyB3aWxsIGJlIGdlbmVyYXRlZC4gKi9cbiAgTm9uZSA9IDAsXG4gIC8qKiBPbmx5IFNESyBpbnRlcm5hbCBlcnJvcnMgd2lsbCBiZSBsb2dnZWQuICovXG4gIEVycm9yID0gMSxcbiAgLyoqIEluZm9ybWF0aW9uIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHRoZSBTREsgd2lsbCBiZSBsb2dnZWQuICovXG4gIERlYnVnID0gMixcbiAgLyoqIEFsbCBTREsgYWN0aW9ucyB3aWxsIGJlIGxvZ2dlZC4gKi9cbiAgVmVyYm9zZSA9IDMsXG59XG4iLCAiaW1wb3J0IHsgVXNlciB9IGZyb20gJy4vdXNlcic7XG5cbi8qKlxuICogQGluaGVyaXRkb2NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uIGV4dGVuZHMgU2Vzc2lvbkNvbnRleHQge1xuICAvKiogSlNEb2MgKi9cbiAgdXBkYXRlKGNvbnRleHQ/OiBTZXNzaW9uQ29udGV4dCk6IHZvaWQ7XG5cbiAgLyoqIEpTRG9jICovXG4gIGNsb3NlKHN0YXR1cz86IFNlc3Npb25TdGF0dXMpOiB2b2lkO1xuXG4gIC8qKiBKU0RvYyAqL1xuICB0b0pTT04oKToge1xuICAgIGluaXQ6IGJvb2xlYW47XG4gICAgc2lkOiBzdHJpbmc7XG4gICAgZGlkPzogc3RyaW5nO1xuICAgIHRpbWVzdGFtcDogc3RyaW5nO1xuICAgIHN0YXJ0ZWQ6IHN0cmluZztcbiAgICBkdXJhdGlvbj86IG51bWJlcjtcbiAgICBzdGF0dXM6IFNlc3Npb25TdGF0dXM7XG4gICAgZXJyb3JzOiBudW1iZXI7XG4gICAgYXR0cnM/OiB7XG4gICAgICByZWxlYXNlPzogc3RyaW5nO1xuICAgICAgZW52aXJvbm1lbnQ/OiBzdHJpbmc7XG4gICAgICB1c2VyX2FnZW50Pzogc3RyaW5nO1xuICAgICAgaXBfYWRkcmVzcz86IHN0cmluZztcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RTZXNzaW9uIHtcbiAgc3RhdHVzPzogUmVxdWVzdFNlc3Npb25TdGF0dXM7XG59XG5cbi8qKlxuICogU2Vzc2lvbiBDb250ZXh0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbkNvbnRleHQge1xuICBzaWQ/OiBzdHJpbmc7XG4gIGRpZD86IHN0cmluZztcbiAgaW5pdD86IGJvb2xlYW47XG4gIC8vIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2hcbiAgdGltZXN0YW1wPzogbnVtYmVyO1xuICAvLyBzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoXG4gIHN0YXJ0ZWQ/OiBudW1iZXI7XG4gIGR1cmF0aW9uPzogbnVtYmVyO1xuICBzdGF0dXM/OiBTZXNzaW9uU3RhdHVzO1xuICByZWxlYXNlPzogc3RyaW5nO1xuICBlbnZpcm9ubWVudD86IHN0cmluZztcbiAgdXNlckFnZW50Pzogc3RyaW5nO1xuICBpcEFkZHJlc3M/OiBzdHJpbmc7XG4gIGVycm9ycz86IG51bWJlcjtcbiAgdXNlcj86IFVzZXIgfCBudWxsO1xuICBpZ25vcmVEdXJhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogU2Vzc2lvbiBTdGF0dXNcbiAqL1xuZXhwb3J0IGVudW0gU2Vzc2lvblN0YXR1cyB7XG4gIC8qKiBKU0RvYyAqL1xuICBPayA9ICdvaycsXG4gIC8qKiBKU0RvYyAqL1xuICBFeGl0ZWQgPSAnZXhpdGVkJyxcbiAgLyoqIEpTRG9jICovXG4gIENyYXNoZWQgPSAnY3Jhc2hlZCcsXG4gIC8qKiBKU0RvYyAqL1xuICBBYm5vcm1hbCA9ICdhYm5vcm1hbCcsXG59XG5cbmV4cG9ydCBlbnVtIFJlcXVlc3RTZXNzaW9uU3RhdHVzIHtcbiAgLyoqIEpTRG9jICovXG4gIE9rID0gJ29rJyxcbiAgLyoqIEpTRG9jICovXG4gIEVycm9yZWQgPSAnZXJyb3JlZCcsXG4gIC8qKiBKU0RvYyAqL1xuICBDcmFzaGVkID0gJ2NyYXNoZWQnLFxufVxuXG4vKiogSlNEb2MgKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbkFnZ3JlZ2F0ZXMge1xuICBhdHRycz86IHtcbiAgICBlbnZpcm9ubWVudD86IHN0cmluZztcbiAgICByZWxlYXNlPzogc3RyaW5nO1xuICB9O1xuICBhZ2dyZWdhdGVzOiBBcnJheTxBZ2dyZWdhdGlvbkNvdW50cz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbkZsdXNoZXJMaWtlIHtcbiAgLyoqXG4gICAqIEluY3JlbWVudHMgdGhlIFNlc3Npb24gU3RhdHVzIGJ1Y2tldCBpbiBTZXNzaW9uQWdncmVnYXRlcyBPYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUgc3RhdHVzIG9mIHRoZSBzZXNzaW9uXG4gICAqIGNhcHR1cmVkXG4gICAqL1xuICBpbmNyZW1lbnRTZXNzaW9uU3RhdHVzQ291bnQoKTogdm9pZDtcblxuICAvKiogU3VibWl0cyB0aGUgYWdncmVnYXRlcyByZXF1ZXN0IG1vZGUgc2Vzc2lvbnMgdG8gU2VudHJ5ICovXG4gIHNlbmRTZXNzaW9uQWdncmVnYXRlcyhzZXNzaW9uQWdncmVnYXRlczogU2Vzc2lvbkFnZ3JlZ2F0ZXMpOiB2b2lkO1xuXG4gIC8qKiBFbXB0aWVzIEFnZ3JlZ2F0ZSBCdWNrZXRzIGFuZCBTZW5kcyB0aGVtIHRvIFRyYW5zcG9ydCBCdWZmZXIgKi9cbiAgZmx1c2goKTogdm9pZDtcblxuICAvKiogQ2xlYXJzIHNldEludGVydmFsIGFuZCBjYWxscyBmbHVzaCAqL1xuICBjbG9zZSgpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFnZ3JlZ2F0aW9uQ291bnRzIHtcbiAgc3RhcnRlZDogc3RyaW5nO1xuICBlcnJvcmVkPzogbnVtYmVyO1xuICBleGl0ZWQ/OiBudW1iZXI7XG4gIGNyYXNoZWQ/OiBudW1iZXI7XG59XG4iLCAiLyoqIEpTRG9jICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L2V4cG9ydFxuZXhwb3J0IGVudW0gU2V2ZXJpdHkge1xuICAvKiogSlNEb2MgKi9cbiAgRmF0YWwgPSAnZmF0YWwnLFxuICAvKiogSlNEb2MgKi9cbiAgRXJyb3IgPSAnZXJyb3InLFxuICAvKiogSlNEb2MgKi9cbiAgV2FybmluZyA9ICd3YXJuaW5nJyxcbiAgLyoqIEpTRG9jICovXG4gIExvZyA9ICdsb2cnLFxuICAvKiogSlNEb2MgKi9cbiAgSW5mbyA9ICdpbmZvJyxcbiAgLyoqIEpTRG9jICovXG4gIERlYnVnID0gJ2RlYnVnJyxcbiAgLyoqIEpTRG9jICovXG4gIENyaXRpY2FsID0gJ2NyaXRpY2FsJyxcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2UsIGltcG9ydC9leHBvcnRcbmV4cG9ydCBuYW1lc3BhY2UgU2V2ZXJpdHkge1xuICAvKipcbiAgICogQ29udmVydHMgYSBzdHJpbmctYmFzZWQgbGV2ZWwgaW50byBhIHtAbGluayBTZXZlcml0eX0uXG4gICAqXG4gICAqIEBwYXJhbSBsZXZlbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgU2V2ZXJpdHlcbiAgICogQHJldHVybnMgU2V2ZXJpdHlcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBmcm9tU3RyaW5nKGxldmVsOiBzdHJpbmcpOiBTZXZlcml0eSB7XG4gICAgc3dpdGNoIChsZXZlbCkge1xuICAgICAgY2FzZSAnZGVidWcnOlxuICAgICAgICByZXR1cm4gU2V2ZXJpdHkuRGVidWc7XG4gICAgICBjYXNlICdpbmZvJzpcbiAgICAgICAgcmV0dXJuIFNldmVyaXR5LkluZm87XG4gICAgICBjYXNlICd3YXJuJzpcbiAgICAgIGNhc2UgJ3dhcm5pbmcnOlxuICAgICAgICByZXR1cm4gU2V2ZXJpdHkuV2FybmluZztcbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgcmV0dXJuIFNldmVyaXR5LkVycm9yO1xuICAgICAgY2FzZSAnZmF0YWwnOlxuICAgICAgICByZXR1cm4gU2V2ZXJpdHkuRmF0YWw7XG4gICAgICBjYXNlICdjcml0aWNhbCc6XG4gICAgICAgIHJldHVybiBTZXZlcml0eS5Dcml0aWNhbDtcbiAgICAgIGNhc2UgJ2xvZyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gU2V2ZXJpdHkuTG9nO1xuICAgIH1cbiAgfVxufVxuIiwgIi8qKiBUaGUgc3RhdHVzIG9mIGFuIGV2ZW50LiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9leHBvcnRcbmV4cG9ydCBlbnVtIFN0YXR1cyB7XG4gIC8qKiBUaGUgc3RhdHVzIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLiAqL1xuICBVbmtub3duID0gJ3Vua25vd24nLFxuICAvKiogVGhlIGV2ZW50IHdhcyBza2lwcGVkIGR1ZSB0byBjb25maWd1cmF0aW9uIG9yIGNhbGxiYWNrcy4gKi9cbiAgU2tpcHBlZCA9ICdza2lwcGVkJyxcbiAgLyoqIFRoZSBldmVudCB3YXMgc2VudCB0byBTZW50cnkgc3VjY2Vzc2Z1bGx5LiAqL1xuICBTdWNjZXNzID0gJ3N1Y2Nlc3MnLFxuICAvKiogVGhlIGNsaWVudCBpcyBjdXJyZW50bHkgcmF0ZSBsaW1pdGVkIGFuZCB3aWxsIHRyeSBhZ2FpbiBsYXRlci4gKi9cbiAgUmF0ZUxpbWl0ID0gJ3JhdGVfbGltaXQnLFxuICAvKiogVGhlIGV2ZW50IGNvdWxkIG5vdCBiZSBwcm9jZXNzZWQuICovXG4gIEludmFsaWQgPSAnaW52YWxpZCcsXG4gIC8qKiBBIHNlcnZlci1zaWRlIGVycm9yIG9jY3VycmVkIGR1cmluZyBzdWJtaXNzaW9uLiAqL1xuICBGYWlsZWQgPSAnZmFpbGVkJyxcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2UsIGltcG9ydC9leHBvcnRcbmV4cG9ydCBuYW1lc3BhY2UgU3RhdHVzIHtcbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgSFRUUCBzdGF0dXMgY29kZSBpbnRvIGEge0BsaW5rIFN0YXR1c30uXG4gICAqXG4gICAqIEBwYXJhbSBjb2RlIFRoZSBIVFRQIHJlc3BvbnNlIHN0YXR1cyBjb2RlLlxuICAgKiBAcmV0dXJucyBUaGUgc2VuZCBzdGF0dXMgb3Ige0BsaW5rIFN0YXR1cy5Vbmtub3dufS5cbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBmcm9tSHR0cENvZGUoY29kZTogbnVtYmVyKTogU3RhdHVzIHtcbiAgICBpZiAoY29kZSA+PSAyMDAgJiYgY29kZSA8IDMwMCkge1xuICAgICAgcmV0dXJuIFN0YXR1cy5TdWNjZXNzO1xuICAgIH1cblxuICAgIGlmIChjb2RlID09PSA0MjkpIHtcbiAgICAgIHJldHVybiBTdGF0dXMuUmF0ZUxpbWl0O1xuICAgIH1cblxuICAgIGlmIChjb2RlID49IDQwMCAmJiBjb2RlIDwgNTAwKSB7XG4gICAgICByZXR1cm4gU3RhdHVzLkludmFsaWQ7XG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPj0gNTAwKSB7XG4gICAgICByZXR1cm4gU3RhdHVzLkZhaWxlZDtcbiAgICB9XG5cbiAgICByZXR1cm4gU3RhdHVzLlVua25vd247XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBFeHRyYWN0ZWROb2RlUmVxdWVzdERhdGEsIFByaW1pdGl2ZSwgV29ya2VyTG9jYXRpb24gfSBmcm9tICcuL21pc2MnO1xuaW1wb3J0IHsgU3BhbiwgU3BhbkNvbnRleHQgfSBmcm9tICcuL3NwYW4nO1xuXG4vKipcbiAqIEludGVyZmFjZSBob2xkaW5nIFRyYW5zYWN0aW9uLXNwZWNpZmljIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvbkNvbnRleHQgZXh0ZW5kcyBTcGFuQ29udGV4dCB7XG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBpZGVudGlmaWVyIGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgc2V0cyB0aGUgZW5kIHRpbWVzdGFtcCBvZiB0aGUgdHJhbnNhY3Rpb24gdG8gdGhlIGhpZ2hlc3QgdGltZXN0YW1wIG9mIGNoaWxkIHNwYW5zLCB0cmltbWluZ1xuICAgKiB0aGUgZHVyYXRpb24gb2YgdGhlIHRyYW5zYWN0aW9uLiBUaGlzIGlzIHVzZWZ1bCB0byBkaXNjYXJkIGV4dHJhIHRpbWUgaW4gdGhlIHRyYW5zYWN0aW9uIHRoYXQgaXMgbm90XG4gICAqIGFjY291bnRlZCBmb3IgaW4gY2hpbGQgc3BhbnMsIGxpa2Ugd2hhdCBoYXBwZW5zIGluIHRoZSBpZGxlIHRyYW5zYWN0aW9uIFRyYWNpbmcgaW50ZWdyYXRpb24sIHdoZXJlIHdlIGZpbmlzaCB0aGVcbiAgICogdHJhbnNhY3Rpb24gYWZ0ZXIgYSBnaXZlbiBcImlkbGUgdGltZVwiIGFuZCB3ZSBkb24ndCB3YW50IHRoaXMgXCJpZGxlIHRpbWVcIiB0byBiZSBwYXJ0IG9mIHRoZSB0cmFuc2FjdGlvbi5cbiAgICovXG4gIHRyaW1FbmQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiB0aGlzIHRyYW5zYWN0aW9uIGhhcyBhIHBhcmVudCwgdGhlIHBhcmVudCdzIHNhbXBsaW5nIGRlY2lzaW9uXG4gICAqL1xuICBwYXJlbnRTYW1wbGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSB0cmFuc2FjdGlvbiwgZm9yIGludGVybmFsIFNESyB1c2UuXG4gICAqL1xuICBtZXRhZGF0YT86IFRyYW5zYWN0aW9uTWV0YWRhdGE7XG59XG5cbi8qKlxuICogRGF0YSBwdWxsZWQgZnJvbSBhIGBzZW50cnktdHJhY2VgIGhlYWRlclxuICovXG5leHBvcnQgdHlwZSBUcmFjZXBhcmVudERhdGEgPSBQaWNrPFRyYW5zYWN0aW9uQ29udGV4dCwgJ3RyYWNlSWQnIHwgJ3BhcmVudFNwYW5JZCcgfCAncGFyZW50U2FtcGxlZCc+O1xuXG4vKipcbiAqIFRyYW5zYWN0aW9uIFwiQ2xhc3NcIiwgaW5oZXJpdHMgU3BhbiBvbmx5IGhhcyBgc2V0TmFtZWBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvbiBleHRlbmRzIFRyYW5zYWN0aW9uQ29udGV4dCwgU3BhbiB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgc3BhbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICB0cmFjZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBzdGFydFRpbWVzdGFtcDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgdGFnczogeyBba2V5OiBzdHJpbmddOiBQcmltaXRpdmUgfTtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIGRhdGE6IHsgW2tleTogc3RyaW5nXTogYW55IH07XG5cbiAgLyoqXG4gICAqIE1ldGFkYXRhIGFib3V0IHRoZSB0cmFuc2FjdGlvblxuICAgKi9cbiAgbWV0YWRhdGE6IFRyYW5zYWN0aW9uTWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbmFtZSBvZiB0aGUgdHJhbnNhY3Rpb25cbiAgICovXG4gIHNldE5hbWUobmFtZTogc3RyaW5nKTogdm9pZDtcblxuICAvKiogUmV0dXJucyB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBwcm9wZXJ0aWVzIGFzIGEgYFRyYW5zYWN0aW9uQ29udGV4dGAgKi9cbiAgdG9Db250ZXh0KCk6IFRyYW5zYWN0aW9uQ29udGV4dDtcblxuICAvKiogVXBkYXRlcyB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB3aXRoIGEgbmV3IGBUcmFuc2FjdGlvbkNvbnRleHRgICovXG4gIHVwZGF0ZVdpdGhDb250ZXh0KHRyYW5zYWN0aW9uQ29udGV4dDogVHJhbnNhY3Rpb25Db250ZXh0KTogdGhpcztcbn1cblxuLyoqXG4gKiBDb250ZXh0IGRhdGEgcGFzc2VkIGJ5IHRoZSB1c2VyIHdoZW4gc3RhcnRpbmcgYSB0cmFuc2FjdGlvbiwgdG8gYmUgdXNlZCBieSB0aGUgdHJhY2VzU2FtcGxlciBtZXRob2QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tU2FtcGxpbmdDb250ZXh0IHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG4vKipcbiAqIERhdGEgcGFzc2VkIHRvIHRoZSBgdHJhY2VzU2FtcGxlcmAgZnVuY3Rpb24sIHdoaWNoIGZvcm1zIHRoZSBiYXNpcyBmb3Igd2hhdGV2ZXIgZGVjaXNpb25zIGl0IG1pZ2h0IG1ha2UuXG4gKlxuICogQWRkcyBkZWZhdWx0IGRhdGEgdG8gZGF0YSBwcm92aWRlZCBieSB0aGUgdXNlci4gU2VlIHtAbGluayBIdWIuc3RhcnRUcmFuc2FjdGlvbn1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYW1wbGluZ0NvbnRleHQgZXh0ZW5kcyBDdXN0b21TYW1wbGluZ0NvbnRleHQge1xuICAvKipcbiAgICogQ29udGV4dCBkYXRhIHdpdGggd2hpY2ggdHJhbnNhY3Rpb24gYmVpbmcgc2FtcGxlZCB3YXMgY3JlYXRlZFxuICAgKi9cbiAgdHJhbnNhY3Rpb25Db250ZXh0OiBUcmFuc2FjdGlvbkNvbnRleHQ7XG5cbiAgLyoqXG4gICAqIFNhbXBsaW5nIGRlY2lzaW9uIGZyb20gdGhlIHBhcmVudCB0cmFuc2FjdGlvbiwgaWYgYW55LlxuICAgKi9cbiAgcGFyZW50U2FtcGxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9iamVjdCByZXByZXNlbnRpbmcgdGhlIFVSTCBvZiB0aGUgY3VycmVudCBwYWdlIG9yIHdvcmtlciBzY3JpcHQuIFBhc3NlZCBieSBkZWZhdWx0IHdoZW4gdXNpbmcgdGhlIGBCcm93c2VyVHJhY2luZ2BcbiAgICogaW50ZWdyYXRpb24uXG4gICAqL1xuICBsb2NhdGlvbj86IFdvcmtlckxvY2F0aW9uO1xuXG4gIC8qKlxuICAgKiBPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBpbmNvbWluZyByZXF1ZXN0IHRvIGEgbm9kZSBzZXJ2ZXIuIFBhc3NlZCBieSBkZWZhdWx0IHdoZW4gdXNpbmcgdGhlIFRyYWNpbmdIYW5kbGVyLlxuICAgKi9cbiAgcmVxdWVzdD86IEV4dHJhY3RlZE5vZGVSZXF1ZXN0RGF0YTtcbn1cblxuZXhwb3J0IHR5cGUgTWVhc3VyZW1lbnRzID0gUmVjb3JkPHN0cmluZywgeyB2YWx1ZTogbnVtYmVyIH0+O1xuXG5leHBvcnQgZW51bSBUcmFuc2FjdGlvblNhbXBsaW5nTWV0aG9kIHtcbiAgRXhwbGljaXQgPSAnZXhwbGljaXRseV9zZXQnLFxuICBTYW1wbGVyID0gJ2NsaWVudF9zYW1wbGVyJyxcbiAgUmF0ZSA9ICdjbGllbnRfcmF0ZScsXG4gIEluaGVyaXRhbmNlID0gJ2luaGVyaXRhbmNlJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvbk1ldGFkYXRhIHtcbiAgdHJhbnNhY3Rpb25TYW1wbGluZz86IHsgcmF0ZT86IG51bWJlcjsgbWV0aG9kPzogc3RyaW5nIH07XG5cbiAgLyoqIFRoZSB0d28gaGFsdmVzIChzZW50cnkgYW5kIHRoaXJkLXBhcnR5KSBvZiBhIHRyYW5zYWN0aW9uJ3MgdHJhY2VzdGF0ZSBoZWFkZXIsIHVzZWQgZm9yIGR5bmFtaWMgc2FtcGxpbmcgKi9cbiAgdHJhY2VzdGF0ZT86IHtcbiAgICBzZW50cnk/OiBzdHJpbmc7XG4gICAgdGhpcmRwYXJ0eT86IHN0cmluZztcbiAgfTtcblxuICAvKiogRm9yIHRyYW5zYWN0aW9ucyB0cmFjaW5nIHNlcnZlci1zaWRlIHJlcXVlc3QgaGFuZGxpbmcsIHRoZSBwYXRoIG9mIHRoZSByZXF1ZXN0IGJlaW5nIHRyYWNrZWQuICovXG4gIHJlcXVlc3RQYXRoPzogc3RyaW5nO1xufVxuIiwgImltcG9ydCB7IERzbkxpa2UgfSBmcm9tICcuL2Rzbic7XG5pbXBvcnQgeyBFdmVudCB9IGZyb20gJy4vZXZlbnQnO1xuaW1wb3J0IHsgU2VudHJ5UmVxdWVzdFR5cGUgfSBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IHsgUmVzcG9uc2UgfSBmcm9tICcuL3Jlc3BvbnNlJztcbmltcG9ydCB7IFNka01ldGFkYXRhIH0gZnJvbSAnLi9zZGttZXRhZGF0YSc7XG5pbXBvcnQgeyBTZXNzaW9uLCBTZXNzaW9uQWdncmVnYXRlcyB9IGZyb20gJy4vc2Vzc2lvbic7XG5cbmV4cG9ydCBlbnVtIE91dGNvbWUge1xuICBCZWZvcmVTZW5kID0gJ2JlZm9yZV9zZW5kJyxcbiAgRXZlbnRQcm9jZXNzb3IgPSAnZXZlbnRfcHJvY2Vzc29yJyxcbiAgTmV0d29ya0Vycm9yID0gJ25ldHdvcmtfZXJyb3InLFxuICBRdWV1ZU92ZXJmbG93ID0gJ3F1ZXVlX292ZXJmbG93JyxcbiAgUmF0ZUxpbWl0QmFja29mZiA9ICdyYXRlbGltaXRfYmFja29mZicsXG4gIFNhbXBsZVJhdGUgPSAnc2FtcGxlX3JhdGUnLFxufVxuXG4vKiogVHJhbnNwb3J0IHVzZWQgc2VuZGluZyBkYXRhIHRvIFNlbnRyeSAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFuc3BvcnQge1xuICAvKipcbiAgICogU2VuZHMgdGhlIGV2ZW50IHRvIHRoZSBTdG9yZSBlbmRwb2ludCBpbiBTZW50cnkuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCBFdmVudCB0aGF0IHNob3VsZCBiZSBzZW50IHRvIFNlbnRyeS5cbiAgICovXG4gIHNlbmRFdmVudChldmVudDogRXZlbnQpOiBQcm9taXNlTGlrZTxSZXNwb25zZT47XG5cbiAgLyoqXG4gICAqIFNlbmRzIHRoZSBzZXNzaW9uIHRvIHRoZSBFbnZlbG9wZSBlbmRwb2ludCBpbiBTZW50cnkuXG4gICAqXG4gICAqIEBwYXJhbSBzZXNzaW9uIFNlc3Npb24gdGhhdCBzaG91bGQgYmUgc2VudCB0byBTZW50cnkgfCBTZXNzaW9uIEFnZ3JlZ2F0ZXMgdGhhdCBzaG91bGQgYmUgc2VudCB0byBTZW50cnkuXG4gICAqL1xuICBzZW5kU2Vzc2lvbj8oc2Vzc2lvbjogU2Vzc2lvbiB8IFNlc3Npb25BZ2dyZWdhdGVzKTogUHJvbWlzZUxpa2U8UmVzcG9uc2U+O1xuXG4gIC8qKlxuICAgKiBXYWl0IGZvciBhbGwgZXZlbnRzIHRvIGJlIHNlbnQgb3IgdGhlIHRpbWVvdXQgdG8gZXhwaXJlLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuXG4gICAqXG4gICAqIEBwYXJhbSB0aW1lb3V0IE1heGltdW0gdGltZSBpbiBtcyB0aGUgdHJhbnNwb3J0IHNob3VsZCB3YWl0IGZvciBldmVudHMgdG8gYmUgZmx1c2hlZC4gT21pdHRpbmcgdGhpcyBwYXJhbWV0ZXIgd2lsbFxuICAgKiAgIGNhdXNlIHRoZSB0cmFuc3BvcnQgdG8gd2FpdCB1bnRpbCBhbGwgZXZlbnRzIGFyZSBzZW50IGJlZm9yZSByZXNvbHZpbmcgdGhlIHByb21pc2UuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSB3aXRoIGB0cnVlYCBpZiBhbGwgZXZlbnRzIGFyZSBzZW50IGJlZm9yZSB0aGUgdGltZW91dCwgb3IgYGZhbHNlYCBpZiB0aGVyZSBhcmVcbiAgICogc3RpbGwgZXZlbnRzIGluIHRoZSBxdWV1ZSB3aGVuIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQuXG4gICAqL1xuICBjbG9zZSh0aW1lb3V0PzogbnVtYmVyKTogUHJvbWlzZUxpa2U8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIEluY3JlbWVudCB0aGUgY291bnRlciBmb3IgdGhlIHNwZWNpZmljIGNsaWVudCBvdXRjb21lXG4gICAqL1xuICByZWNvcmRMb3N0RXZlbnQ/KHR5cGU6IE91dGNvbWUsIGNhdGVnb3J5OiBTZW50cnlSZXF1ZXN0VHlwZSk6IHZvaWQ7XG59XG5cbi8qKiBKU0RvYyAqL1xuZXhwb3J0IHR5cGUgVHJhbnNwb3J0Q2xhc3M8VCBleHRlbmRzIFRyYW5zcG9ydD4gPSBuZXcgKG9wdGlvbnM6IFRyYW5zcG9ydE9wdGlvbnMpID0+IFQ7XG5cbi8qKiBKU0RvYyAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFuc3BvcnRPcHRpb25zIHtcbiAgLyoqIFNlbnRyeSBEU04gKi9cbiAgZHNuOiBEc25MaWtlO1xuICAvKiogRGVmaW5lIGN1c3RvbSBoZWFkZXJzICovXG4gIGhlYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAvKiogU2V0IGEgSFRUUCBwcm94eSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBvdXRib3VuZCByZXF1ZXN0cy4gKi9cbiAgaHR0cFByb3h5Pzogc3RyaW5nO1xuICAvKiogU2V0IGEgSFRUUFMgcHJveHkgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3Igb3V0Ym91bmQgcmVxdWVzdHMuICovXG4gIGh0dHBzUHJveHk/OiBzdHJpbmc7XG4gIC8qKiBIVFRQUyBwcm94eSBjZXJ0aWZpY2F0ZXMgcGF0aCAqL1xuICBjYUNlcnRzPzogc3RyaW5nO1xuICAvKiogRmV0Y2ggQVBJIGluaXQgcGFyYW1ldGVycyAqL1xuICBmZXRjaFBhcmFtZXRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAvKiogVGhlIGVudmVsb3BlIHR1bm5lbCB0byB1c2UuICovXG4gIHR1bm5lbD86IHN0cmluZztcbiAgLyoqIFNlbmQgU0RLIENsaWVudCBSZXBvcnRzLiBFbmFibGVkIGJ5IGRlZmF1bHQuICovXG4gIHNlbmRDbGllbnRSZXBvcnRzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNldCBvZiBtZXRhZGF0YSBhYm91dCB0aGUgU0RLIHRoYXQgY2FuIGJlIGludGVybmFsbHkgdXNlZCB0byBlbmhhbmNlIGVudmVsb3BlcyBhbmQgZXZlbnRzLFxuICAgKiBhbmQgcHJvdmlkZSBhZGRpdGlvbmFsIGRhdGEgYWJvdXQgZXZlcnkgcmVxdWVzdC5cbiAgICogKi9cbiAgX21ldGFkYXRhPzogU2RrTWV0YWRhdGE7XG59XG4iLCAiZXhwb3J0IHsgQnJlYWRjcnVtYiwgQnJlYWRjcnVtYkhpbnQgfSBmcm9tICcuL2JyZWFkY3J1bWInO1xuZXhwb3J0IHsgQ2xpZW50IH0gZnJvbSAnLi9jbGllbnQnO1xuZXhwb3J0IHsgQ29udGV4dCwgQ29udGV4dHMgfSBmcm9tICcuL2NvbnRleHQnO1xuZXhwb3J0IHsgRHNuLCBEc25Db21wb25lbnRzLCBEc25MaWtlLCBEc25Qcm90b2NvbCB9IGZyb20gJy4vZHNuJztcbmV4cG9ydCB7IERlYnVnSW1hZ2UsIERlYnVnSW1hZ2VUeXBlLCBEZWJ1Z01ldGEgfSBmcm9tICcuL2RlYnVnTWV0YSc7XG5leHBvcnQgeyBFeHRlbmRlZEVycm9yIH0gZnJvbSAnLi9lcnJvcic7XG5leHBvcnQgeyBFdmVudCwgRXZlbnRIaW50IH0gZnJvbSAnLi9ldmVudCc7XG5leHBvcnQgeyBFdmVudFByb2Nlc3NvciB9IGZyb20gJy4vZXZlbnRwcm9jZXNzb3InO1xuZXhwb3J0IHsgRXhjZXB0aW9uIH0gZnJvbSAnLi9leGNlcHRpb24nO1xuZXhwb3J0IHsgRXh0cmEsIEV4dHJhcyB9IGZyb20gJy4vZXh0cmEnO1xuZXhwb3J0IHsgSHViIH0gZnJvbSAnLi9odWInO1xuZXhwb3J0IHsgSW50ZWdyYXRpb24sIEludGVncmF0aW9uQ2xhc3MgfSBmcm9tICcuL2ludGVncmF0aW9uJztcbmV4cG9ydCB7IExvZ0xldmVsIH0gZnJvbSAnLi9sb2dsZXZlbCc7XG5leHBvcnQgeyBNZWNoYW5pc20gfSBmcm9tICcuL21lY2hhbmlzbSc7XG5leHBvcnQgeyBFeHRyYWN0ZWROb2RlUmVxdWVzdERhdGEsIFByaW1pdGl2ZSwgV29ya2VyTG9jYXRpb24gfSBmcm9tICcuL21pc2MnO1xuZXhwb3J0IHsgT3B0aW9ucyB9IGZyb20gJy4vb3B0aW9ucyc7XG5leHBvcnQgeyBQYWNrYWdlIH0gZnJvbSAnLi9wYWNrYWdlJztcbmV4cG9ydCB7IFF1ZXJ5UGFyYW1zLCBSZXF1ZXN0LCBTZW50cnlSZXF1ZXN0LCBTZW50cnlSZXF1ZXN0VHlwZSB9IGZyb20gJy4vcmVxdWVzdCc7XG5leHBvcnQgeyBSZXNwb25zZSB9IGZyb20gJy4vcmVzcG9uc2UnO1xuZXhwb3J0IHsgUnVudGltZSB9IGZyb20gJy4vcnVudGltZSc7XG5leHBvcnQgeyBDYXB0dXJlQ29udGV4dCwgU2NvcGUsIFNjb3BlQ29udGV4dCB9IGZyb20gJy4vc2NvcGUnO1xuZXhwb3J0IHsgU2RrSW5mbyB9IGZyb20gJy4vc2RraW5mbyc7XG5leHBvcnQgeyBTZGtNZXRhZGF0YSB9IGZyb20gJy4vc2RrbWV0YWRhdGEnO1xuZXhwb3J0IHtcbiAgU2Vzc2lvbkFnZ3JlZ2F0ZXMsXG4gIEFnZ3JlZ2F0aW9uQ291bnRzLFxuICBTZXNzaW9uLFxuICBTZXNzaW9uQ29udGV4dCxcbiAgU2Vzc2lvblN0YXR1cyxcbiAgUmVxdWVzdFNlc3Npb24sXG4gIFJlcXVlc3RTZXNzaW9uU3RhdHVzLFxuICBTZXNzaW9uRmx1c2hlckxpa2UsXG59IGZyb20gJy4vc2Vzc2lvbic7XG5leHBvcnQgeyBTZXZlcml0eSB9IGZyb20gJy4vc2V2ZXJpdHknO1xuZXhwb3J0IHsgU3BhbiwgU3BhbkNvbnRleHQgfSBmcm9tICcuL3NwYW4nO1xuZXhwb3J0IHsgU3RhY2tGcmFtZSB9IGZyb20gJy4vc3RhY2tmcmFtZSc7XG5leHBvcnQgeyBTdGFja3RyYWNlIH0gZnJvbSAnLi9zdGFja3RyYWNlJztcbmV4cG9ydCB7IFN0YXR1cyB9IGZyb20gJy4vc3RhdHVzJztcbmV4cG9ydCB7XG4gIEN1c3RvbVNhbXBsaW5nQ29udGV4dCxcbiAgTWVhc3VyZW1lbnRzLFxuICBTYW1wbGluZ0NvbnRleHQsXG4gIFRyYWNlcGFyZW50RGF0YSxcbiAgVHJhbnNhY3Rpb24sXG4gIFRyYW5zYWN0aW9uQ29udGV4dCxcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YSxcbiAgVHJhbnNhY3Rpb25TYW1wbGluZ01ldGhvZCxcbn0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5leHBvcnQgeyBUaHJlYWQgfSBmcm9tICcuL3RocmVhZCc7XG5leHBvcnQgeyBPdXRjb21lLCBUcmFuc3BvcnQsIFRyYW5zcG9ydE9wdGlvbnMsIFRyYW5zcG9ydENsYXNzIH0gZnJvbSAnLi90cmFuc3BvcnQnO1xuZXhwb3J0IHsgVXNlciB9IGZyb20gJy4vdXNlcic7XG5leHBvcnQgeyBXcmFwcGVkRnVuY3Rpb24gfSBmcm9tICcuL3dyYXBwZWRmdW5jdGlvbic7XG4iLCAiLyoqXG4gKiBDb25zdW1lcyB0aGUgcHJvbWlzZSBhbmQgbG9ncyB0aGUgZXJyb3Igd2hlbiBpdCByZWplY3RzLlxuICogQHBhcmFtIHByb21pc2UgQSBwcm9taXNlIHRvIGZvcmdldC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBmb3JnZXQocHJvbWlzZTogUHJvbWlzZUxpa2U8YW55Pik6IHZvaWQge1xuICB2b2lkIHByb21pc2UudGhlbihudWxsLCBlID0+IHtcbiAgICAvLyBUT0RPOiBVc2UgYSBiZXR0ZXIgbG9nZ2luZyBtZWNoYW5pc21cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gIH0pO1xufVxuIiwgIi8qKlxuICogTk9URTogSW4gb3JkZXIgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLCBpZiB5b3UgYWRkIGEgZnVuY3Rpb24gdG8gdGhpcyBtb2R1bGUgYW5kIGl0IG5lZWRzIHRvIHByaW50IHNvbWV0aGluZyxcbiAqIHlvdSBtdXN0IGVpdGhlciBhKSB1c2UgYGNvbnNvbGUubG9nYCByYXRoZXIgdGhhbiB0aGUgbG9nZ2VyLCBvciBiKSBwdXQgeW91ciBmdW5jdGlvbiBlbHNld2hlcmUuXG4gKi9cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB3ZSdyZSBpbiB0aGUgTm9kZS5qcyBvciBCcm93c2VyIGVudmlyb25tZW50XG4gKlxuICogQHJldHVybnMgQW5zd2VyIHRvIGdpdmVuIHF1ZXN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVFbnYoKTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnID8gcHJvY2VzcyA6IDApID09PSAnW29iamVjdCBwcm9jZXNzXSc7XG59XG5cbi8qKlxuICogUmVxdWlyZXMgYSBtb2R1bGUgd2hpY2ggaXMgcHJvdGVjdGVkIGFnYWluc3QgYnVuZGxlciBtaW5pZmljYXRpb24uXG4gKlxuICogQHBhcmFtIHJlcXVlc3QgVGhlIG1vZHVsZSBwYXRoIHRvIHJlc29sdmVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXMsIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBkeW5hbWljUmVxdWlyZShtb2Q6IGFueSwgcmVxdWVzdDogc3RyaW5nKTogYW55IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICByZXR1cm4gbW9kLnJlcXVpcmUocmVxdWVzdCk7XG59XG5cbi8qKlxuICogSGVscGVyIGZvciBkeW5hbWljYWxseSBsb2FkaW5nIG1vZHVsZSB0aGF0IHNob3VsZCB3b3JrIHdpdGggbGlua2VkIGRlcGVuZGVuY2llcy5cbiAqIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2UgX3Nob3VsZF8gYmUgdXNpbmcgYHJlcXVpcmUocmVxdWlyZS5yZXNvbHZlKG1vZHVsZU5hbWUsIHsgcGF0aHM6IFtjd2QoKV0gfSkpYFxuICogSG93ZXZlciBpdCdzIF9ub3QgcG9zc2libGVfIHRvIGRvIHRoYXQgd2l0aCBXZWJwYWNrLCBhcyBpdCBoYXMgdG8ga25vdyBhbGwgdGhlIGRlcGVuZGVuY2llcyBkdXJpbmdcbiAqIGJ1aWxkIHRpbWUuIGByZXF1aXJlLnJlc29sdmVgIGlzIGFsc28gbm90IGF2YWlsYWJsZSBpbiBhbnkgb3RoZXIgd2F5LCBzbyB3ZSBjYW5ub3QgY3JlYXRlLFxuICogYSBmYWtlIGhlbHBlciBsaWtlIHdlIGRvIHdpdGggYGR5bmFtaWNSZXF1aXJlYC5cbiAqXG4gKiBXZSBhbHdheXMgcHJlZmVyIHRvIHVzZSBsb2NhbCBwYWNrYWdlLCB0aHVzIHRoZSB2YWx1ZSBpcyBub3QgcmV0dXJuZWQgZWFybHkgZnJvbSBlYWNoIGB0cnkvY2F0Y2hgIGJsb2NrLlxuICogVGhhdCBpcyB0byBtaW1pYyB0aGUgYmVoYXZpb3Igb2YgYHJlcXVpcmUucmVzb2x2ZWAgZXhhY3RseS5cbiAqXG4gKiBAcGFyYW0gbW9kdWxlTmFtZSBtb2R1bGUgbmFtZSB0byByZXF1aXJlXG4gKiBAcmV0dXJucyBwb3NzaWJseSByZXF1aXJlZCBtb2R1bGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRNb2R1bGU8VD4obW9kdWxlTmFtZTogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gIGxldCBtb2Q6IFQgfCB1bmRlZmluZWQ7XG5cbiAgdHJ5IHtcbiAgICBtb2QgPSBkeW5hbWljUmVxdWlyZShtb2R1bGUsIG1vZHVsZU5hbWUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gbm8tZW1wdHlcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgeyBjd2QgfSA9IGR5bmFtaWNSZXF1aXJlKG1vZHVsZSwgJ3Byb2Nlc3MnKTtcbiAgICBtb2QgPSBkeW5hbWljUmVxdWlyZShtb2R1bGUsIGAke2N3ZCgpfS9ub2RlX21vZHVsZXMvJHttb2R1bGVOYW1lfWApIGFzIFQ7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBuby1lbXB0eVxuICB9XG5cbiAgcmV0dXJuIG1vZDtcbn1cbiIsICIvKipcbiAqIE5PVEU6IEluIG9yZGVyIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcywgaWYgeW91IGFkZCBhIGZ1bmN0aW9uIHRvIHRoaXMgbW9kdWxlIGFuZCBpdCBuZWVkcyB0byBwcmludCBzb21ldGhpbmcsXG4gKiB5b3UgbXVzdCBlaXRoZXIgYSkgdXNlIGBjb25zb2xlLmxvZ2AgcmF0aGVyIHRoYW4gdGhlIGxvZ2dlciwgb3IgYikgcHV0IHlvdXIgZnVuY3Rpb24gZWxzZXdoZXJlLlxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cblxuaW1wb3J0IHsgSW50ZWdyYXRpb24gfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcblxuaW1wb3J0IHsgaXNOb2RlRW52IH0gZnJvbSAnLi9ub2RlJztcblxuLyoqIEludGVybmFsICovXG5pbnRlcmZhY2UgU2VudHJ5R2xvYmFsIHtcbiAgU2VudHJ5Pzoge1xuICAgIEludGVncmF0aW9ucz86IEludGVncmF0aW9uW107XG4gIH07XG4gIFNFTlRSWV9FTlZJUk9OTUVOVD86IHN0cmluZztcbiAgU0VOVFJZX0RTTj86IHN0cmluZztcbiAgU0VOVFJZX1JFTEVBU0U/OiB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gIH07XG4gIF9fU0VOVFJZX186IHtcbiAgICBnbG9iYWxFdmVudFByb2Nlc3NvcnM6IGFueTtcbiAgICBodWI6IGFueTtcbiAgICBsb2dnZXI6IGFueTtcbiAgfTtcbn1cblxuY29uc3QgZmFsbGJhY2tHbG9iYWxPYmplY3QgPSB7fTtcblxuLyoqXG4gKiBTYWZlbHkgZ2V0IGdsb2JhbCBzY29wZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyBHbG9iYWwgc2NvcGUgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRHbG9iYWxPYmplY3Q8VD4oKTogVCAmIFNlbnRyeUdsb2JhbCB7XG4gIHJldHVybiAoaXNOb2RlRW52KClcbiAgICA/IGdsb2JhbFxuICAgIDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcbiAgICA/IHdpbmRvdyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICAgIDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnXG4gICAgPyBzZWxmXG4gICAgOiBmYWxsYmFja0dsb2JhbE9iamVjdCkgYXMgVCAmIFNlbnRyeUdsb2JhbDtcbn1cbiIsICIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzICovXG5cbmltcG9ydCB7IFByaW1pdGl2ZSB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgb25lIG9mIGEgZmV3IEVycm9yIG9yIEVycm9yLWxpa2VcbiAqIHtAbGluayBpc0Vycm9yfS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRXJyb3Iod2F0OiBhbnkpOiBib29sZWFuIHtcbiAgc3dpdGNoIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2F0KSkge1xuICAgIGNhc2UgJ1tvYmplY3QgRXJyb3JdJzpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGNhc2UgJ1tvYmplY3QgRXhjZXB0aW9uXSc6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBjYXNlICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBpc0luc3RhbmNlT2Yod2F0LCBFcnJvcik7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgRXJyb3JFdmVudFxuICoge0BsaW5rIGlzRXJyb3JFdmVudH0uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Vycm9yRXZlbnQod2F0OiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3YXQpID09PSAnW29iamVjdCBFcnJvckV2ZW50XSc7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIERPTUVycm9yXG4gKiB7QGxpbmsgaXNET01FcnJvcn0uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RPTUVycm9yKHdhdDogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2F0KSA9PT0gJ1tvYmplY3QgRE9NRXJyb3JdJztcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgRE9NRXhjZXB0aW9uXG4gKiB7QGxpbmsgaXNET01FeGNlcHRpb259LlxuICpcbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNET01FeGNlcHRpb24od2F0OiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3YXQpID09PSAnW29iamVjdCBET01FeGNlcHRpb25dJztcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYSBzdHJpbmdcbiAqIHtAbGluayBpc1N0cmluZ30uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyh3YXQ6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdhdCkgPT09ICdbb2JqZWN0IFN0cmluZ10nO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgaXMgYSBwcmltaXRpdmUgKHVuZGVmaW5lZCwgbnVsbCwgbnVtYmVyLCBib29sZWFuLCBzdHJpbmcsIGJpZ2ludCwgc3ltYm9sKVxuICoge0BsaW5rIGlzUHJpbWl0aXZlfS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHdhdDogYW55KTogd2F0IGlzIFByaW1pdGl2ZSB7XG4gIHJldHVybiB3YXQgPT09IG51bGwgfHwgKHR5cGVvZiB3YXQgIT09ICdvYmplY3QnICYmIHR5cGVvZiB3YXQgIT09ICdmdW5jdGlvbicpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBvYmplY3QgbGl0ZXJhbFxuICoge0BsaW5rIGlzUGxhaW5PYmplY3R9LlxuICpcbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh3YXQ6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdhdCkgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBFdmVudCBpbnN0YW5jZVxuICoge0BsaW5rIGlzRXZlbnR9LlxuICpcbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFdmVudCh3YXQ6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIEV2ZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpc0luc3RhbmNlT2Yod2F0LCBFdmVudCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEVsZW1lbnQgaW5zdGFuY2VcbiAqIHtAbGluayBpc0VsZW1lbnR9LlxuICpcbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50KHdhdDogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHdhdCwgRWxlbWVudCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIHJlZ2V4cFxuICoge0BsaW5rIGlzUmVnRXhwfS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVnRXhwKHdhdDogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2F0KSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUgaGFzIGEgdGhlbiBmdW5jdGlvbi5cbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUaGVuYWJsZSh3YXQ6IGFueSk6IGJvb2xlYW4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gIHJldHVybiBCb29sZWFuKHdhdCAmJiB3YXQudGhlbiAmJiB0eXBlb2Ygd2F0LnRoZW4gPT09ICdmdW5jdGlvbicpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIFN5bnRoZXRpY0V2ZW50XG4gKiB7QGxpbmsgaXNTeW50aGV0aWNFdmVudH0uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KHdhdDogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1BsYWluT2JqZWN0KHdhdCkgJiYgJ25hdGl2ZUV2ZW50JyBpbiB3YXQgJiYgJ3ByZXZlbnREZWZhdWx0JyBpbiB3YXQgJiYgJ3N0b3BQcm9wYWdhdGlvbicgaW4gd2F0O1xufVxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYW4gaW5zdGFuY2Ugb2YgcHJvdmlkZWQgY29uc3RydWN0b3IuXG4gKiB7QGxpbmsgaXNJbnN0YW5jZU9mfS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEBwYXJhbSBiYXNlIEEgY29uc3RydWN0b3IgdG8gYmUgdXNlZCBpbiBhIGNoZWNrLlxuICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJbnN0YW5jZU9mKHdhdDogYW55LCBiYXNlOiBhbnkpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gd2F0IGluc3RhbmNlb2YgYmFzZTtcbiAgfSBjYXRjaCAoX2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tICcuL2dsb2JhbCc7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJy4vaXMnO1xuXG4vKipcbiAqIEdpdmVuIGEgY2hpbGQgRE9NIGVsZW1lbnQsIHJldHVybnMgYSBxdWVyeS1zZWxlY3RvciBzdGF0ZW1lbnQgZGVzY3JpYmluZyB0aGF0XG4gKiBhbmQgaXRzIGFuY2VzdG9yc1xuICogZS5nLiBbSFRNTEVsZW1lbnRdID0+IGJvZHkgPiBkaXYgPiBpbnB1dCNmb28uYnRuW25hbWU9YmF6XVxuICogQHJldHVybnMgZ2VuZXJhdGVkIERPTSBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBodG1sVHJlZUFzU3RyaW5nKGVsZW06IHVua25vd24sIGtleUF0dHJzPzogc3RyaW5nW10pOiBzdHJpbmcge1xuICB0eXBlIFNpbXBsZU5vZGUgPSB7XG4gICAgcGFyZW50Tm9kZTogU2ltcGxlTm9kZTtcbiAgfSB8IG51bGw7XG5cbiAgLy8gdHJ5L2NhdGNoIGJvdGg6XG4gIC8vIC0gYWNjZXNzaW5nIGV2ZW50LnRhcmdldCAoc2VlIGdldHNlbnRyeS9yYXZlbi1qcyM4MzgsICM3NjgpXG4gIC8vIC0gYGh0bWxUcmVlQXNTdHJpbmdgIGJlY2F1c2UgaXQncyBjb21wbGV4LCBhbmQganVzdCBhY2Nlc3NpbmcgdGhlIERPTSBpbmNvcnJlY3RseVxuICAvLyAtIGNhbiB0aHJvdyBhbiBleGNlcHRpb24gaW4gc29tZSBjaXJjdW1zdGFuY2VzLlxuICB0cnkge1xuICAgIGxldCBjdXJyZW50RWxlbSA9IGVsZW0gYXMgU2ltcGxlTm9kZTtcbiAgICBjb25zdCBNQVhfVFJBVkVSU0VfSEVJR0hUID0gNTtcbiAgICBjb25zdCBNQVhfT1VUUFVUX0xFTiA9IDgwO1xuICAgIGNvbnN0IG91dCA9IFtdO1xuICAgIGxldCBoZWlnaHQgPSAwO1xuICAgIGxldCBsZW4gPSAwO1xuICAgIGNvbnN0IHNlcGFyYXRvciA9ICcgPiAnO1xuICAgIGNvbnN0IHNlcExlbmd0aCA9IHNlcGFyYXRvci5sZW5ndGg7XG4gICAgbGV0IG5leHRTdHI7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGx1c3BsdXNcbiAgICB3aGlsZSAoY3VycmVudEVsZW0gJiYgaGVpZ2h0KysgPCBNQVhfVFJBVkVSU0VfSEVJR0hUKSB7XG4gICAgICBuZXh0U3RyID0gX2h0bWxFbGVtZW50QXNTdHJpbmcoY3VycmVudEVsZW0sIGtleUF0dHJzKTtcbiAgICAgIC8vIGJhaWwgb3V0IGlmXG4gICAgICAvLyAtIG5leHRTdHIgaXMgdGhlICdodG1sJyBlbGVtZW50XG4gICAgICAvLyAtIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyB0aGF0IHdvdWxkIGJlIGNyZWF0ZWQgZXhjZWVkcyBNQVhfT1VUUFVUX0xFTlxuICAgICAgLy8gICAoaWdub3JlIHRoaXMgbGltaXQgaWYgd2UgYXJlIG9uIHRoZSBmaXJzdCBpdGVyYXRpb24pXG4gICAgICBpZiAobmV4dFN0ciA9PT0gJ2h0bWwnIHx8IChoZWlnaHQgPiAxICYmIGxlbiArIG91dC5sZW5ndGggKiBzZXBMZW5ndGggKyBuZXh0U3RyLmxlbmd0aCA+PSBNQVhfT1VUUFVUX0xFTikpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIG91dC5wdXNoKG5leHRTdHIpO1xuXG4gICAgICBsZW4gKz0gbmV4dFN0ci5sZW5ndGg7XG4gICAgICBjdXJyZW50RWxlbSA9IGN1cnJlbnRFbGVtLnBhcmVudE5vZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dC5yZXZlcnNlKCkuam9pbihzZXBhcmF0b3IpO1xuICB9IGNhdGNoIChfb08pIHtcbiAgICByZXR1cm4gJzx1bmtub3duPic7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgc2ltcGxlLCBxdWVyeS1zZWxlY3RvciByZXByZXNlbnRhdGlvbiBvZiBhIERPTSBlbGVtZW50XG4gKiBlLmcuIFtIVE1MRWxlbWVudF0gPT4gaW5wdXQjZm9vLmJ0bltuYW1lPWJhel1cbiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aFxuICovXG5mdW5jdGlvbiBfaHRtbEVsZW1lbnRBc1N0cmluZyhlbDogdW5rbm93biwga2V5QXR0cnM/OiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGNvbnN0IGVsZW0gPSBlbCBhcyB7XG4gICAgdGFnTmFtZT86IHN0cmluZztcbiAgICBpZD86IHN0cmluZztcbiAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgZ2V0QXR0cmlidXRlKGtleTogc3RyaW5nKTogc3RyaW5nO1xuICB9O1xuXG4gIGNvbnN0IG91dCA9IFtdO1xuICBsZXQgY2xhc3NOYW1lO1xuICBsZXQgY2xhc3NlcztcbiAgbGV0IGtleTtcbiAgbGV0IGF0dHI7XG4gIGxldCBpO1xuXG4gIGlmICghZWxlbSB8fCAhZWxlbS50YWdOYW1lKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgb3V0LnB1c2goZWxlbS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpO1xuXG4gIC8vIFBhaXJzIG9mIGF0dHJpYnV0ZSBrZXlzIGRlZmluZWQgaW4gYHNlcmlhbGl6ZUF0dHJpYnV0ZWAgYW5kIHRoZWlyIHZhbHVlcyBvbiBlbGVtZW50LlxuICBjb25zdCBrZXlBdHRyUGFpcnMgPSBrZXlBdHRycz8ubGVuZ3RoXG4gICAgPyBrZXlBdHRycy5maWx0ZXIoa2V5QXR0ciA9PiBlbGVtLmdldEF0dHJpYnV0ZShrZXlBdHRyKSkubWFwKGtleUF0dHIgPT4gW2tleUF0dHIsIGVsZW0uZ2V0QXR0cmlidXRlKGtleUF0dHIpXSlcbiAgICA6IG51bGw7XG5cbiAgaWYgKGtleUF0dHJQYWlycz8ubGVuZ3RoKSB7XG4gICAga2V5QXR0clBhaXJzLmZvckVhY2goa2V5QXR0clBhaXIgPT4ge1xuICAgICAgb3V0LnB1c2goYFske2tleUF0dHJQYWlyWzBdfT1cIiR7a2V5QXR0clBhaXJbMV19XCJdYCk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGVsZW0uaWQpIHtcbiAgICAgIG91dC5wdXNoKGAjJHtlbGVtLmlkfWApO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICBjbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZTtcbiAgICBpZiAoY2xhc3NOYW1lICYmIGlzU3RyaW5nKGNsYXNzTmFtZSkpIHtcbiAgICAgIGNsYXNzZXMgPSBjbGFzc05hbWUuc3BsaXQoL1xccysvKTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG91dC5wdXNoKGAuJHtjbGFzc2VzW2ldfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCBhbGxvd2VkQXR0cnMgPSBbJ3R5cGUnLCAnbmFtZScsICd0aXRsZScsICdhbHQnXTtcbiAgZm9yIChpID0gMDsgaSA8IGFsbG93ZWRBdHRycy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IGFsbG93ZWRBdHRyc1tpXTtcbiAgICBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoa2V5KTtcbiAgICBpZiAoYXR0cikge1xuICAgICAgb3V0LnB1c2goYFske2tleX09XCIke2F0dHJ9XCJdYCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQuam9pbignJyk7XG59XG5cbi8qKlxuICogQSBzYWZlIGZvcm0gb2YgbG9jYXRpb24uaHJlZlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9jYXRpb25IcmVmKCk6IHN0cmluZyB7XG4gIGNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdDxXaW5kb3c+KCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGdsb2JhbC5kb2N1bWVudC5sb2NhdGlvbi5ocmVmO1xuICB9IGNhdGNoIChvTykge1xuICAgIHJldHVybiAnJztcbiAgfVxufVxuIiwgImV4cG9ydCBjb25zdCBzZXRQcm90b3R5cGVPZiA9XG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSA/IHNldFByb3RvT2YgOiBtaXhpblByb3BlcnRpZXMpO1xuXG4vKipcbiAqIHNldFByb3RvdHlwZU9mIHBvbHlmaWxsIHVzaW5nIF9fcHJvdG9fX1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuZnVuY3Rpb24gc2V0UHJvdG9PZjxUVGFyZ2V0IGV4dGVuZHMgb2JqZWN0LCBUUHJvdG8+KG9iajogVFRhcmdldCwgcHJvdG86IFRQcm90byk6IFRUYXJnZXQgJiBUUHJvdG8ge1xuICAvLyBAdHMtaWdub3JlIF9fcHJvdG9fXyBkb2VzIG5vdCBleGlzdCBvbiBvYmpcbiAgb2JqLl9fcHJvdG9fXyA9IHByb3RvO1xuICByZXR1cm4gb2JqIGFzIFRUYXJnZXQgJiBUUHJvdG87XG59XG5cbi8qKlxuICogc2V0UHJvdG90eXBlT2YgcG9seWZpbGwgdXNpbmcgbWl4aW5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXNcbmZ1bmN0aW9uIG1peGluUHJvcGVydGllczxUVGFyZ2V0IGV4dGVuZHMgb2JqZWN0LCBUUHJvdG8+KG9iajogVFRhcmdldCwgcHJvdG86IFRQcm90byk6IFRUYXJnZXQgJiBUUHJvdG8ge1xuICBmb3IgKGNvbnN0IHByb3AgaW4gcHJvdG8pIHtcbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSB7XG4gICAgICAvLyBAdHMtaWdub3JlIHR5cGVzY3JpcHQgY29tcGxhaW5zIGFib3V0IGluZGV4aW5nIHNvIHdlIHJlbW92ZVxuICAgICAgb2JqW3Byb3BdID0gcHJvdG9bcHJvcF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iaiBhcyBUVGFyZ2V0ICYgVFByb3RvO1xufVxuIiwgImltcG9ydCB7IHNldFByb3RvdHlwZU9mIH0gZnJvbSAnLi9wb2x5ZmlsbCc7XG5cbi8qKiBBbiBlcnJvciBlbWl0dGVkIGJ5IFNlbnRyeSBTREtzIGFuZCByZWxhdGVkIHV0aWxpdGllcy4gKi9cbmV4cG9ydCBjbGFzcyBTZW50cnlFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqIERpc3BsYXkgbmFtZSBvZiB0aGlzIGVycm9yIGluc3RhbmNlLiAqL1xuICBwdWJsaWMgbmFtZTogc3RyaW5nO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG5cbiAgICB0aGlzLm5hbWUgPSBuZXcudGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIHNldFByb3RvdHlwZU9mKHRoaXMsIG5ldy50YXJnZXQucHJvdG90eXBlKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IERzbkNvbXBvbmVudHMsIERzbkxpa2UsIERzblByb3RvY29sIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5cbmltcG9ydCB7IFNlbnRyeUVycm9yIH0gZnJvbSAnLi9lcnJvcic7XG5cbi8qKiBSZWd1bGFyIGV4cHJlc3Npb24gdXNlZCB0byBwYXJzZSBhIERzbi4gKi9cbmNvbnN0IERTTl9SRUdFWCA9IC9eKD86KFxcdyspOilcXC9cXC8oPzooXFx3KykoPzo6KFxcdyspKT9AKShbXFx3Li1dKykoPzo6KFxcZCspKT9cXC8oLispLztcblxuLyoqIEVycm9yIG1lc3NhZ2UgKi9cbmNvbnN0IEVSUk9SX01FU1NBR0UgPSAnSW52YWxpZCBEc24nO1xuXG4vKiogVGhlIFNlbnRyeSBEc24sIGlkZW50aWZ5aW5nIGEgU2VudHJ5IGluc3RhbmNlIGFuZCBwcm9qZWN0LiAqL1xuZXhwb3J0IGNsYXNzIERzbiBpbXBsZW1lbnRzIERzbkNvbXBvbmVudHMge1xuICAvKiogUHJvdG9jb2wgdXNlZCB0byBjb25uZWN0IHRvIFNlbnRyeS4gKi9cbiAgcHVibGljIHByb3RvY29sITogRHNuUHJvdG9jb2w7XG4gIC8qKiBQdWJsaWMgYXV0aG9yaXphdGlvbiBrZXkgKGRlcHJlY2F0ZWQsIHJlbmFtZWQgdG8gcHVibGljS2V5KS4gKi9cbiAgcHVibGljIHVzZXIhOiBzdHJpbmc7XG4gIC8qKiBQdWJsaWMgYXV0aG9yaXphdGlvbiBrZXkuICovXG4gIHB1YmxpYyBwdWJsaWNLZXkhOiBzdHJpbmc7XG4gIC8qKiBQcml2YXRlIGF1dGhvcml6YXRpb24ga2V5IChkZXByZWNhdGVkLCBvcHRpb25hbCkuICovXG4gIHB1YmxpYyBwYXNzITogc3RyaW5nO1xuICAvKiogSG9zdG5hbWUgb2YgdGhlIFNlbnRyeSBpbnN0YW5jZS4gKi9cbiAgcHVibGljIGhvc3QhOiBzdHJpbmc7XG4gIC8qKiBQb3J0IG9mIHRoZSBTZW50cnkgaW5zdGFuY2UuICovXG4gIHB1YmxpYyBwb3J0ITogc3RyaW5nO1xuICAvKiogUGF0aCAqL1xuICBwdWJsaWMgcGF0aCE6IHN0cmluZztcbiAgLyoqIFByb2plY3QgSUQgKi9cbiAgcHVibGljIHByb2plY3RJZCE6IHN0cmluZztcblxuICAvKiogQ3JlYXRlcyBhIG5ldyBEc24gY29tcG9uZW50ICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihmcm9tOiBEc25MaWtlKSB7XG4gICAgaWYgKHR5cGVvZiBmcm9tID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fZnJvbVN0cmluZyhmcm9tKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZnJvbUNvbXBvbmVudHMoZnJvbSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdmFsaWRhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEc24uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHRoaXMgd2lsbCByZW5kZXIgdGhlIHB1YmxpYyByZXByZXNlbnRhdGlvbiB3aXRob3V0IHRoZSBwYXNzd29yZFxuICAgKiBjb21wb25lbnQuIFRvIGdldCB0aGUgZGVwcmVjYXRlZCBwcml2YXRlIHJlcHJlc2VudGF0aW9uLCBzZXQgYHdpdGhQYXNzd29yZGBcbiAgICogdG8gdHJ1ZS5cbiAgICpcbiAgICogQHBhcmFtIHdpdGhQYXNzd29yZCBXaGVuIHNldCB0byB0cnVlLCB0aGUgcGFzc3dvcmQgd2lsbCBiZSBpbmNsdWRlZC5cbiAgICovXG4gIHB1YmxpYyB0b1N0cmluZyh3aXRoUGFzc3dvcmQ6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBob3N0LCBwYXRoLCBwYXNzLCBwb3J0LCBwcm9qZWN0SWQsIHByb3RvY29sLCBwdWJsaWNLZXkgfSA9IHRoaXM7XG4gICAgcmV0dXJuIChcbiAgICAgIGAke3Byb3RvY29sfTovLyR7cHVibGljS2V5fSR7d2l0aFBhc3N3b3JkICYmIHBhc3MgPyBgOiR7cGFzc31gIDogJyd9YCArXG4gICAgICBgQCR7aG9zdH0ke3BvcnQgPyBgOiR7cG9ydH1gIDogJyd9LyR7cGF0aCA/IGAke3BhdGh9L2AgOiBwYXRofSR7cHJvamVjdElkfWBcbiAgICApO1xuICB9XG5cbiAgLyoqIFBhcnNlcyBhIHN0cmluZyBpbnRvIHRoaXMgRHNuLiAqL1xuICBwcml2YXRlIF9mcm9tU3RyaW5nKHN0cjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbWF0Y2ggPSBEU05fUkVHRVguZXhlYyhzdHIpO1xuXG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IFNlbnRyeUVycm9yKEVSUk9SX01FU1NBR0UpO1xuICAgIH1cblxuICAgIGNvbnN0IFtwcm90b2NvbCwgcHVibGljS2V5LCBwYXNzID0gJycsIGhvc3QsIHBvcnQgPSAnJywgbGFzdFBhdGhdID0gbWF0Y2guc2xpY2UoMSk7XG4gICAgbGV0IHBhdGggPSAnJztcbiAgICBsZXQgcHJvamVjdElkID0gbGFzdFBhdGg7XG5cbiAgICBjb25zdCBzcGxpdCA9IHByb2plY3RJZC5zcGxpdCgnLycpO1xuICAgIGlmIChzcGxpdC5sZW5ndGggPiAxKSB7XG4gICAgICBwYXRoID0gc3BsaXQuc2xpY2UoMCwgLTEpLmpvaW4oJy8nKTtcbiAgICAgIHByb2plY3RJZCA9IHNwbGl0LnBvcCgpIGFzIHN0cmluZztcbiAgICB9XG5cbiAgICBpZiAocHJvamVjdElkKSB7XG4gICAgICBjb25zdCBwcm9qZWN0TWF0Y2ggPSBwcm9qZWN0SWQubWF0Y2goL15cXGQrLyk7XG4gICAgICBpZiAocHJvamVjdE1hdGNoKSB7XG4gICAgICAgIHByb2plY3RJZCA9IHByb2plY3RNYXRjaFswXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9mcm9tQ29tcG9uZW50cyh7IGhvc3QsIHBhc3MsIHBhdGgsIHByb2plY3RJZCwgcG9ydCwgcHJvdG9jb2w6IHByb3RvY29sIGFzIERzblByb3RvY29sLCBwdWJsaWNLZXkgfSk7XG4gIH1cblxuICAvKiogTWFwcyBEc24gY29tcG9uZW50cyBpbnRvIHRoaXMgaW5zdGFuY2UuICovXG4gIHByaXZhdGUgX2Zyb21Db21wb25lbnRzKGNvbXBvbmVudHM6IERzbkNvbXBvbmVudHMpOiB2b2lkIHtcbiAgICAvLyBUT0RPIHRoaXMgaXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBhbmQgY2FuIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvblxuICAgIGlmICgndXNlcicgaW4gY29tcG9uZW50cyAmJiAhKCdwdWJsaWNLZXknIGluIGNvbXBvbmVudHMpKSB7XG4gICAgICBjb21wb25lbnRzLnB1YmxpY0tleSA9IGNvbXBvbmVudHMudXNlcjtcbiAgICB9XG4gICAgdGhpcy51c2VyID0gY29tcG9uZW50cy5wdWJsaWNLZXkgfHwgJyc7XG5cbiAgICB0aGlzLnByb3RvY29sID0gY29tcG9uZW50cy5wcm90b2NvbDtcbiAgICB0aGlzLnB1YmxpY0tleSA9IGNvbXBvbmVudHMucHVibGljS2V5IHx8ICcnO1xuICAgIHRoaXMucGFzcyA9IGNvbXBvbmVudHMucGFzcyB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBjb21wb25lbnRzLmhvc3Q7XG4gICAgdGhpcy5wb3J0ID0gY29tcG9uZW50cy5wb3J0IHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IGNvbXBvbmVudHMucGF0aCB8fCAnJztcbiAgICB0aGlzLnByb2plY3RJZCA9IGNvbXBvbmVudHMucHJvamVjdElkO1xuICB9XG5cbiAgLyoqIFZhbGlkYXRlcyB0aGlzIERzbiBhbmQgdGhyb3dzIG9uIGVycm9yLiAqL1xuICBwcml2YXRlIF92YWxpZGF0ZSgpOiB2b2lkIHtcbiAgICBbJ3Byb3RvY29sJywgJ3B1YmxpY0tleScsICdob3N0JywgJ3Byb2plY3RJZCddLmZvckVhY2goY29tcG9uZW50ID0+IHtcbiAgICAgIGlmICghdGhpc1tjb21wb25lbnQgYXMga2V5b2YgRHNuQ29tcG9uZW50c10pIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlbnRyeUVycm9yKGAke0VSUk9SX01FU1NBR0V9OiAke2NvbXBvbmVudH0gbWlzc2luZ2ApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLnByb2plY3RJZC5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIHRocm93IG5ldyBTZW50cnlFcnJvcihgJHtFUlJPUl9NRVNTQUdFfTogSW52YWxpZCBwcm9qZWN0SWQgJHt0aGlzLnByb2plY3RJZH1gKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm90b2NvbCAhPT0gJ2h0dHAnICYmIHRoaXMucHJvdG9jb2wgIT09ICdodHRwcycpIHtcbiAgICAgIHRocm93IG5ldyBTZW50cnlFcnJvcihgJHtFUlJPUl9NRVNTQUdFfTogSW52YWxpZCBwcm90b2NvbCAke3RoaXMucHJvdG9jb2x9YCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucG9ydCAmJiBpc05hTihwYXJzZUludCh0aGlzLnBvcnQsIDEwKSkpIHtcbiAgICAgIHRocm93IG5ldyBTZW50cnlFcnJvcihgJHtFUlJPUl9NRVNTQUdFfTogSW52YWxpZCBwb3J0ICR7dGhpcy5wb3J0fWApO1xuICAgIH1cbiAgfVxufVxuIiwgIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IFdyYXBwZWRGdW5jdGlvbiB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuXG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tICcuL2dsb2JhbCc7XG5cbi8vIFRPRE86IEltcGxlbWVudCBkaWZmZXJlbnQgbG9nZ2VycyBmb3IgZGlmZmVyZW50IGVudmlyb25tZW50c1xuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsT2JqZWN0PFdpbmRvdyB8IE5vZGVKUy5HbG9iYWw+KCk7XG5cbi8qKiBQcmVmaXggZm9yIGxvZ2dpbmcgc3RyaW5ncyAqL1xuY29uc3QgUFJFRklYID0gJ1NlbnRyeSBMb2dnZXIgJztcblxuLyoqIEpTRG9jICovXG5pbnRlcmZhY2UgRXh0ZW5zaWJsZUNvbnNvbGUgZXh0ZW5kcyBDb25zb2xlIHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG4vKipcbiAqIFRlbXBvcmFyaWx5IHVud3JhcCBgY29uc29sZS5sb2dgIGFuZCBmcmllbmRzIGluIG9yZGVyIHRvIHBlcmZvcm0gdGhlIGdpdmVuIGNhbGxiYWNrIHVzaW5nIHRoZSBvcmlnaW5hbCBtZXRob2RzLlxuICogUmVzdG9yZXMgd3JhcHBpbmcgYWZ0ZXIgdGhlIGNhbGxiYWNrIGNvbXBsZXRlcy5cbiAqXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIHJ1biBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBgY29uc29sZWAgbWVzc2FnZXNcbiAqIEByZXR1cm5zIFRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29uc29sZVNhbmRib3goY2FsbGJhY2s6ICgpID0+IGFueSk6IGFueSB7XG4gIGNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdDxXaW5kb3c+KCk7XG4gIGNvbnN0IGxldmVscyA9IFsnZGVidWcnLCAnaW5mbycsICd3YXJuJywgJ2Vycm9yJywgJ2xvZycsICdhc3NlcnQnXTtcblxuICBpZiAoISgnY29uc29sZScgaW4gZ2xvYmFsKSkge1xuICAgIHJldHVybiBjYWxsYmFjaygpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICBjb25zdCBvcmlnaW5hbENvbnNvbGUgPSAoZ2xvYmFsIGFzIGFueSkuY29uc29sZSBhcyBFeHRlbnNpYmxlQ29uc29sZTtcbiAgY29uc3Qgd3JhcHBlZExldmVsczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gIC8vIFJlc3RvcmUgYWxsIHdyYXBwZWQgY29uc29sZSBtZXRob2RzXG4gIGxldmVscy5mb3JFYWNoKGxldmVsID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgaWYgKGxldmVsIGluIChnbG9iYWwgYXMgYW55KS5jb25zb2xlICYmIChvcmlnaW5hbENvbnNvbGVbbGV2ZWxdIGFzIFdyYXBwZWRGdW5jdGlvbikuX19zZW50cnlfb3JpZ2luYWxfXykge1xuICAgICAgd3JhcHBlZExldmVsc1tsZXZlbF0gPSBvcmlnaW5hbENvbnNvbGVbbGV2ZWxdIGFzIFdyYXBwZWRGdW5jdGlvbjtcbiAgICAgIG9yaWdpbmFsQ29uc29sZVtsZXZlbF0gPSAob3JpZ2luYWxDb25zb2xlW2xldmVsXSBhcyBXcmFwcGVkRnVuY3Rpb24pLl9fc2VudHJ5X29yaWdpbmFsX187XG4gICAgfVxuICB9KTtcblxuICAvLyBQZXJmb3JtIGNhbGxiYWNrIG1hbmlwdWxhdGlvbnNcbiAgY29uc3QgcmVzdWx0ID0gY2FsbGJhY2soKTtcblxuICAvLyBSZXZlcnQgcmVzdG9yYXRpb24gdG8gd3JhcHBlZCBzdGF0ZVxuICBPYmplY3Qua2V5cyh3cmFwcGVkTGV2ZWxzKS5mb3JFYWNoKGxldmVsID0+IHtcbiAgICBvcmlnaW5hbENvbnNvbGVbbGV2ZWxdID0gd3JhcHBlZExldmVsc1tsZXZlbF07XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiBKU0RvYyAqL1xuY2xhc3MgTG9nZ2VyIHtcbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgX2VuYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqIEpTRG9jICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHVibGljIGRpc2FibGUoKTogdm9pZCB7XG4gICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHB1YmxpYyBlbmFibGUoKTogdm9pZCB7XG4gICAgdGhpcy5fZW5hYmxlZCA9IHRydWU7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHVibGljIGxvZyguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zb2xlU2FuZGJveCgoKSA9PiB7XG4gICAgICBnbG9iYWwuY29uc29sZS5sb2coYCR7UFJFRklYfVtMb2ddOiAke2FyZ3Muam9pbignICcpfWApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHB1YmxpYyB3YXJuKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnNvbGVTYW5kYm94KCgpID0+IHtcbiAgICAgIGdsb2JhbC5jb25zb2xlLndhcm4oYCR7UFJFRklYfVtXYXJuXTogJHthcmdzLmpvaW4oJyAnKX1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwdWJsaWMgZXJyb3IoLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2VuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc29sZVNhbmRib3goKCkgPT4ge1xuICAgICAgZ2xvYmFsLmNvbnNvbGUuZXJyb3IoYCR7UFJFRklYfVtFcnJvcl06ICR7YXJncy5qb2luKCcgJyl9YCk7XG4gICAgfSk7XG4gIH1cbn1cblxuLy8gRW5zdXJlIHdlIG9ubHkgaGF2ZSBhIHNpbmdsZSBsb2dnZXIgaW5zdGFuY2UsIGV2ZW4gaWYgbXVsdGlwbGUgdmVyc2lvbnMgb2YgQHNlbnRyeS91dGlscyBhcmUgYmVpbmcgdXNlZFxuZ2xvYmFsLl9fU0VOVFJZX18gPSBnbG9iYWwuX19TRU5UUllfXyB8fCB7fTtcbmNvbnN0IGxvZ2dlciA9IChnbG9iYWwuX19TRU5UUllfXy5sb2dnZXIgYXMgTG9nZ2VyKSB8fCAoZ2xvYmFsLl9fU0VOVFJZX18ubG9nZ2VyID0gbmV3IExvZ2dlcigpKTtcblxuZXhwb3J0IHsgbG9nZ2VyIH07XG4iLCAiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzICovXG4vKipcbiAqIE1lbW8gY2xhc3MgdXNlZCBmb3IgZGVjeWNsZSBqc29uIG9iamVjdHMuIFVzZXMgV2Vha1NldCBpZiBhdmFpbGFibGUgb3RoZXJ3aXNlIGFycmF5LlxuICovXG5leHBvcnQgY2xhc3MgTWVtbyB7XG4gIC8qKiBEZXRlcm1pbmVzIGlmIFdlYWtTZXQgaXMgYXZhaWxhYmxlICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhc1dlYWtTZXQ6IGJvb2xlYW47XG4gIC8qKiBFaXRoZXIgV2Vha1NldCBvciBBcnJheSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbm5lcjogYW55O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9oYXNXZWFrU2V0ID0gdHlwZW9mIFdlYWtTZXQgPT09ICdmdW5jdGlvbic7XG4gICAgdGhpcy5faW5uZXIgPSB0aGlzLl9oYXNXZWFrU2V0ID8gbmV3IFdlYWtTZXQoKSA6IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgb2JqIHRvIHJlbWVtYmVyLlxuICAgKiBAcGFyYW0gb2JqIE9iamVjdCB0byByZW1lbWJlclxuICAgKi9cbiAgcHVibGljIG1lbW9pemUob2JqOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5faGFzV2Vha1NldCkge1xuICAgICAgaWYgKHRoaXMuX2lubmVyLmhhcyhvYmopKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5faW5uZXIuYWRkKG9iaik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLWZvci1vZlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5faW5uZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5faW5uZXJbaV07XG4gICAgICBpZiAodmFsdWUgPT09IG9iaikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5faW5uZXIucHVzaChvYmopO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIG9iamVjdCBmcm9tIGludGVybmFsIHN0b3JhZ2UuXG4gICAqIEBwYXJhbSBvYmogT2JqZWN0IHRvIGZvcmdldFxuICAgKi9cbiAgcHVibGljIHVubWVtb2l6ZShvYmo6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9oYXNXZWFrU2V0KSB7XG4gICAgICB0aGlzLl9pbm5lci5kZWxldGUob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9pbm5lci5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5faW5uZXJbaV0gPT09IG9iaikge1xuICAgICAgICAgIHRoaXMuX2lubmVyLnNwbGljZShpLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwgImNvbnN0IGRlZmF1bHRGdW5jdGlvbk5hbWUgPSAnPGFub255bW91cz4nO1xuXG4vKipcbiAqIFNhZmVseSBleHRyYWN0IGZ1bmN0aW9uIG5hbWUgZnJvbSBpdHNlbGZcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZ1bmN0aW9uTmFtZShmbjogdW5rbm93bik6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgaWYgKCFmbiB8fCB0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lO1xuICAgIH1cbiAgICByZXR1cm4gZm4ubmFtZSB8fCBkZWZhdWx0RnVuY3Rpb25OYW1lO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gSnVzdCBhY2Nlc3NpbmcgY3VzdG9tIHByb3BzIGluIHNvbWUgU2VsZW5pdW0gZW52aXJvbm1lbnRzXG4gICAgLy8gY2FuIGNhdXNlIGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGV4Y2VwdGlvbiAoc2VlIHJhdmVuLWpzIzQ5NSkuXG4gICAgcmV0dXJuIGRlZmF1bHRGdW5jdGlvbk5hbWU7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBpc1JlZ0V4cCwgaXNTdHJpbmcgfSBmcm9tICcuL2lzJztcblxuLyoqXG4gKiBUcnVuY2F0ZXMgZ2l2ZW4gc3RyaW5nIHRvIHRoZSBtYXhpbXVtIGNoYXJhY3RlcnMgY291bnRcbiAqXG4gKiBAcGFyYW0gc3RyIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHNlcmlhbGl6YWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBtYXggTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0cnVuY2F0ZWQgc3RyaW5nICgwID0gdW5saW1pdGVkKVxuICogQHJldHVybnMgc3RyaW5nIEVuY29kZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRydW5jYXRlKHN0cjogc3RyaW5nLCBtYXg6IG51bWJlciA9IDApOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycgfHwgbWF4ID09PSAwKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICByZXR1cm4gc3RyLmxlbmd0aCA8PSBtYXggPyBzdHIgOiBgJHtzdHIuc3Vic3RyKDAsIG1heCl9Li4uYDtcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGJhc2ljYWxseSBqdXN0IGB0cmltX2xpbmVgIGZyb21cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5L2Jsb2IvbWFzdGVyL3NyYy9zZW50cnkvbGFuZy9qYXZhc2NyaXB0L3Byb2Nlc3Nvci5weSNMNjdcbiAqXG4gKiBAcGFyYW0gc3RyIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHNlcmlhbGl6YWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBtYXggTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0cnVuY2F0ZWQgc3RyaW5nXG4gKiBAcmV0dXJucyBzdHJpbmcgRW5jb2RlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gc25pcExpbmUobGluZTogc3RyaW5nLCBjb2xubzogbnVtYmVyKTogc3RyaW5nIHtcbiAgbGV0IG5ld0xpbmUgPSBsaW5lO1xuICBjb25zdCBsbCA9IG5ld0xpbmUubGVuZ3RoO1xuICBpZiAobGwgPD0gMTUwKSB7XG4gICAgcmV0dXJuIG5ld0xpbmU7XG4gIH1cbiAgaWYgKGNvbG5vID4gbGwpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBjb2xubyA9IGxsO1xuICB9XG5cbiAgbGV0IHN0YXJ0ID0gTWF0aC5tYXgoY29sbm8gLSA2MCwgMCk7XG4gIGlmIChzdGFydCA8IDUpIHtcbiAgICBzdGFydCA9IDA7XG4gIH1cblxuICBsZXQgZW5kID0gTWF0aC5taW4oc3RhcnQgKyAxNDAsIGxsKTtcbiAgaWYgKGVuZCA+IGxsIC0gNSkge1xuICAgIGVuZCA9IGxsO1xuICB9XG4gIGlmIChlbmQgPT09IGxsKSB7XG4gICAgc3RhcnQgPSBNYXRoLm1heChlbmQgLSAxNDAsIDApO1xuICB9XG5cbiAgbmV3TGluZSA9IG5ld0xpbmUuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIGlmIChzdGFydCA+IDApIHtcbiAgICBuZXdMaW5lID0gYCd7c25pcH0gJHtuZXdMaW5lfWA7XG4gIH1cbiAgaWYgKGVuZCA8IGxsKSB7XG4gICAgbmV3TGluZSArPSAnIHtzbmlwfSc7XG4gIH1cblxuICByZXR1cm4gbmV3TGluZTtcbn1cblxuLyoqXG4gKiBKb2luIHZhbHVlcyBpbiBhcnJheVxuICogQHBhcmFtIGlucHV0IGFycmF5IG9mIHZhbHVlcyB0byBiZSBqb2luZWQgdG9nZXRoZXJcbiAqIEBwYXJhbSBkZWxpbWl0ZXIgc3RyaW5nIHRvIGJlIHBsYWNlZCBpbi1iZXR3ZWVuIHZhbHVlc1xuICogQHJldHVybnMgSm9pbmVkIHZhbHVlc1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVKb2luKGlucHV0OiBhbnlbXSwgZGVsaW1pdGVyPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IG91dHB1dCA9IFtdO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1mb3Itb2ZcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHZhbHVlID0gaW5wdXRbaV07XG4gICAgdHJ5IHtcbiAgICAgIG91dHB1dC5wdXNoKFN0cmluZyh2YWx1ZSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIG91dHB1dC5wdXNoKCdbdmFsdWUgY2Fubm90IGJlIHNlcmlhbGl6ZWRdJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG91dHB1dC5qb2luKGRlbGltaXRlcik7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSB2YWx1ZSBtYXRjaGVzIGEgcmVnZXggb3IgaW5jbHVkZXMgdGhlIHN0cmluZ1xuICogQHBhcmFtIHZhbHVlIFRoZSBzdHJpbmcgdmFsdWUgdG8gYmUgY2hlY2tlZCBhZ2FpbnN0XG4gKiBAcGFyYW0gcGF0dGVybiBFaXRoZXIgYSByZWdleCBvciBhIHN0cmluZyB0aGF0IG11c3QgYmUgY29udGFpbmVkIGluIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01hdGNoaW5nUGF0dGVybih2YWx1ZTogc3RyaW5nLCBwYXR0ZXJuOiBSZWdFeHAgfCBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCFpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNSZWdFeHAocGF0dGVybikpIHtcbiAgICByZXR1cm4gKHBhdHRlcm4gYXMgUmVnRXhwKS50ZXN0KHZhbHVlKTtcbiAgfVxuICBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlLmluZGV4T2YocGF0dGVybikgIT09IC0xO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIHN0cmluZywgZXNjYXBlIGNoYXJhY3RlcnMgd2hpY2ggaGF2ZSBtZWFuaW5nIGluIHRoZSByZWdleCBncmFtbWFyLCBzdWNoIHRoYXQgdGhlIHJlc3VsdCBpcyBzYWZlIHRvIGZlZWQgdG9cbiAqIGBuZXcgUmVnRXhwKClgLlxuICpcbiAqIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvZXNjYXBlLXN0cmluZy1yZWdleHAuIFZlbmRvcmVkIHRvIGEpIHJlZHVjZSB0aGUgc2l6ZSBieSBza2lwcGluZyB0aGUgcnVudGltZVxuICogdHlwZS1jaGVja2luZywgYW5kIGIpIGVuc3VyZSBpdCBnZXRzIGRvd24tY29tcGlsZWQgZm9yIG9sZCB2ZXJzaW9ucyBvZiBOb2RlICh0aGUgcHVibGlzaGVkIHBhY2thZ2Ugb25seSBzdXBwb3J0cyBOb2RlXG4gKiAxMispLlxuICpcbiAqIEBwYXJhbSByZWdleFN0cmluZyBUaGUgc3RyaW5nIHRvIGVzY2FwZVxuICogQHJldHVybnMgQW4gdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIHNwZWNpYWwgcmVnZXggY2hhcmFjdGVycyBlc2NhcGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVTdHJpbmdGb3JSZWdleChyZWdleFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gZXNjYXBlIHRoZSBoeXBoZW4gc2VwYXJhdGVseSBzbyB3ZSBjYW4gYWxzbyByZXBsYWNlIGl0IHdpdGggYSB1bmljb2RlIGxpdGVyYWwgaHlwaGVuLCB0byBhdm9pZCB0aGUgcHJvYmxlbXNcbiAgLy8gZGlzY3Vzc2VkIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvZXNjYXBlLXN0cmluZy1yZWdleHAvaXNzdWVzLzIwLlxuICByZXR1cm4gcmVnZXhTdHJpbmcucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCsqPy5dL2csICdcXFxcJCYnKS5yZXBsYWNlKC8tL2csICdcXFxceDJkJyk7XG59XG4iLCAiLyogZXNsaW50LWRpc2FibGUgbWF4LWxpbmVzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBFeHRlbmRlZEVycm9yLCBXcmFwcGVkRnVuY3Rpb24gfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcblxuaW1wb3J0IHsgaHRtbFRyZWVBc1N0cmluZyB9IGZyb20gJy4vYnJvd3Nlcic7XG5pbXBvcnQgeyBpc0VsZW1lbnQsIGlzRXJyb3IsIGlzRXZlbnQsIGlzSW5zdGFuY2VPZiwgaXNQbGFpbk9iamVjdCwgaXNQcmltaXRpdmUsIGlzU3ludGhldGljRXZlbnQgfSBmcm9tICcuL2lzJztcbmltcG9ydCB7IE1lbW8gfSBmcm9tICcuL21lbW8nO1xuaW1wb3J0IHsgZ2V0RnVuY3Rpb25OYW1lIH0gZnJvbSAnLi9zdGFja3RyYWNlJztcbmltcG9ydCB7IHRydW5jYXRlIH0gZnJvbSAnLi9zdHJpbmcnO1xuXG4vKipcbiAqIFJlcGxhY2UgYSBtZXRob2QgaW4gYW4gb2JqZWN0IHdpdGggYSB3cmFwcGVkIHZlcnNpb24gb2YgaXRzZWxmLlxuICpcbiAqIEBwYXJhbSBzb3VyY2UgQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBtZXRob2QgdG8gYmUgd3JhcHBlZC5cbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdG8gYmUgd3JhcHBlZC5cbiAqIEBwYXJhbSByZXBsYWNlbWVudEZhY3RvcnkgQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgZ2l2ZW4gbWV0aG9kIGFuZCByZXR1cm5zIGFcbiAqIHdyYXBwZWQgdmVyc2lvbi4gTm90ZTogVGhlIGZ1bmN0aW9uIHJldHVybmVkIGJ5IGByZXBsYWNlbWVudEZhY3RvcnlgIG5lZWRzIHRvIGJlIGEgbm9uLWFycm93IGZ1bmN0aW9uLCBpbiBvcmRlciB0b1xuICogcHJlc2VydmUgdGhlIGNvcnJlY3QgdmFsdWUgb2YgYHRoaXNgLCBhbmQgdGhlIG9yaWdpbmFsIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCB1c2luZyBgb3JpZ01ldGhvZC5jYWxsKHRoaXMsIDxvdGhlclxuICogYXJncz4pYCBvciBgb3JpZ01ldGhvZC5hcHBseSh0aGlzLCBbPG90aGVyIGFyZ3M+XSlgIChyYXRoZXIgdGhhbiBiZWluZyBjYWxsZWQgZGlyZWN0bHkpLCBhZ2FpbiB0byBwcmVzZXJ2ZSBgdGhpc2AuXG4gKiBAcmV0dXJucyB2b2lkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWxsKHNvdXJjZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgbmFtZTogc3RyaW5nLCByZXBsYWNlbWVudEZhY3Rvcnk6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55KTogdm9pZCB7XG4gIGlmICghKG5hbWUgaW4gc291cmNlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG9yaWdpbmFsID0gc291cmNlW25hbWVdIGFzICgpID0+IGFueTtcbiAgY29uc3Qgd3JhcHBlZCA9IHJlcGxhY2VtZW50RmFjdG9yeShvcmlnaW5hbCkgYXMgV3JhcHBlZEZ1bmN0aW9uO1xuXG4gIC8vIE1ha2Ugc3VyZSBpdCdzIGEgZnVuY3Rpb24gZmlyc3QsIGFzIHdlIG5lZWQgdG8gYXR0YWNoIGFuIGVtcHR5IHByb3RvdHlwZSBmb3IgYGRlZmluZVByb3BlcnRpZXNgIHRvIHdvcmtcbiAgLy8gb3RoZXJ3aXNlIGl0J2xsIHRocm93IFwiVHlwZUVycm9yOiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyBjYWxsZWQgb24gbm9uLW9iamVjdFwiXG4gIGlmICh0eXBlb2Ygd3JhcHBlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICB3cmFwcGVkLnByb3RvdHlwZSA9IHdyYXBwZWQucHJvdG90eXBlIHx8IHt9O1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMod3JhcHBlZCwge1xuICAgICAgICBfX3NlbnRyeV9vcmlnaW5hbF9fOiB7XG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgdmFsdWU6IG9yaWdpbmFsLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoX09vKSB7XG4gICAgICAvLyBUaGlzIGNhbiB0aHJvdyBpZiBtdWx0aXBsZSBmaWxsIGhhcHBlbnMgb24gYSBnbG9iYWwgb2JqZWN0IGxpa2UgWE1MSHR0cFJlcXVlc3RcbiAgICAgIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzIwNDNcbiAgICB9XG4gIH1cblxuICBzb3VyY2VbbmFtZV0gPSB3cmFwcGVkO1xufVxuXG4vKipcbiAqIEVuY29kZXMgZ2l2ZW4gb2JqZWN0IGludG8gdXJsLWZyaWVuZGx5IGZvcm1hdFxuICpcbiAqIEBwYXJhbSBvYmplY3QgQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgc2VyaWFsaXphYmxlIHZhbHVlc1xuICogQHJldHVybnMgc3RyaW5nIEVuY29kZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVybEVuY29kZShvYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBzdHJpbmcge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KVxuICAgIC5tYXAoa2V5ID0+IGAke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudChvYmplY3Rba2V5XSl9YClcbiAgICAuam9pbignJicpO1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybXMgYW55IG9iamVjdCBpbnRvIGFuIG9iamVjdCBsaXRlcmFsIHdpdGggYWxsIGl0cyBhdHRyaWJ1dGVzXG4gKiBhdHRhY2hlZCB0byBpdC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgSW5pdGlhbCBzb3VyY2UgdGhhdCB3ZSBoYXZlIHRvIHRyYW5zZm9ybSBpbiBvcmRlciBmb3IgaXQgdG8gYmUgdXNhYmxlIGJ5IHRoZSBzZXJpYWxpemVyXG4gKi9cbmZ1bmN0aW9uIGdldFdhbGtTb3VyY2UoXG4gIHZhbHVlOiBhbnksXG4pOiB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn0ge1xuICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICBjb25zdCBlcnJvciA9IHZhbHVlIGFzIEV4dGVuZGVkRXJyb3I7XG4gICAgY29uc3QgZXJyOiB7XG4gICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICBzdGFjazogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgbWVzc2FnZTogc3RyaW5nO1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgIH0gPSB7XG4gICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgbmFtZTogZXJyb3IubmFtZSxcbiAgICAgIHN0YWNrOiBlcnJvci5zdGFjayxcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBpIGluIGVycm9yKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVycm9yLCBpKSkge1xuICAgICAgICBlcnJbaV0gPSBlcnJvcltpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyO1xuICB9XG5cbiAgaWYgKGlzRXZlbnQodmFsdWUpKSB7XG4gICAgLyoqXG4gICAgICogRXZlbnQtbGlrZSBpbnRlcmZhY2UgdGhhdCdzIHVzYWJsZSBpbiBicm93c2VyIGFuZCBub2RlXG4gICAgICovXG4gICAgaW50ZXJmYWNlIFNpbXBsZUV2ZW50IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICB0YXJnZXQ/OiB1bmtub3duO1xuICAgICAgY3VycmVudFRhcmdldD86IHVua25vd247XG4gICAgfVxuXG4gICAgY29uc3QgZXZlbnQgPSB2YWx1ZSBhcyBTaW1wbGVFdmVudDtcblxuICAgIGNvbnN0IHNvdXJjZToge1xuICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgIH0gPSB7fTtcblxuICAgIC8vIEFjY2Vzc2luZyBldmVudCBhdHRyaWJ1dGVzIGNhbiB0aHJvdyAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzc2OCBhbmRcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy84MzgpLCBidXQgYWNjZXNzaW5nIGB0eXBlYCBoYXNuJ3QgYmVlbiB3cmFwcGVkIGluIGFcbiAgICAvLyB0cnktY2F0Y2ggaW4gYXQgbGVhc3QgdHdvIHllYXJzIGFuZCBubyBvbmUncyBjb21wbGFpbmVkLCBzbyB0aGF0J3MgbGlrZWx5IG5vdCBhbiBpc3N1ZSBhbnltb3JlXG4gICAgc291cmNlLnR5cGUgPSBldmVudC50eXBlO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNvdXJjZS50YXJnZXQgPSBpc0VsZW1lbnQoZXZlbnQudGFyZ2V0KVxuICAgICAgICA/IGh0bWxUcmVlQXNTdHJpbmcoZXZlbnQudGFyZ2V0KVxuICAgICAgICA6IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChldmVudC50YXJnZXQpO1xuICAgIH0gY2F0Y2ggKF9vTykge1xuICAgICAgc291cmNlLnRhcmdldCA9ICc8dW5rbm93bj4nO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBzb3VyY2UuY3VycmVudFRhcmdldCA9IGlzRWxlbWVudChldmVudC5jdXJyZW50VGFyZ2V0KVxuICAgICAgICA/IGh0bWxUcmVlQXNTdHJpbmcoZXZlbnQuY3VycmVudFRhcmdldClcbiAgICAgICAgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgfSBjYXRjaCAoX29PKSB7XG4gICAgICBzb3VyY2UuY3VycmVudFRhcmdldCA9ICc8dW5rbm93bj4nO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgQ3VzdG9tRXZlbnQgIT09ICd1bmRlZmluZWQnICYmIGlzSW5zdGFuY2VPZih2YWx1ZSwgQ3VzdG9tRXZlbnQpKSB7XG4gICAgICBzb3VyY2UuZGV0YWlsID0gZXZlbnQuZGV0YWlsO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgYXR0ciBpbiBldmVudCkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChldmVudCwgYXR0cikpIHtcbiAgICAgICAgc291cmNlW2F0dHJdID0gZXZlbnRbYXR0cl07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZSBhcyB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9O1xufVxuXG4vKiogQ2FsY3VsYXRlcyBieXRlcyBzaXplIG9mIGlucHV0IHN0cmluZyAqL1xuZnVuY3Rpb24gdXRmOExlbmd0aCh2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgcmV0dXJuIH4tZW5jb2RlVVJJKHZhbHVlKS5zcGxpdCgvJS4ufC4vKS5sZW5ndGg7XG59XG5cbi8qKiBDYWxjdWxhdGVzIGJ5dGVzIHNpemUgb2YgaW5wdXQgb2JqZWN0ICovXG5mdW5jdGlvbiBqc29uU2l6ZSh2YWx1ZTogYW55KTogbnVtYmVyIHtcbiAgcmV0dXJuIHV0ZjhMZW5ndGgoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbn1cblxuLyoqIEpTRG9jICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVG9TaXplPFQ+KFxuICBvYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0sXG4gIC8vIERlZmF1bHQgTm9kZS5qcyBSRVBMIGRlcHRoXG4gIGRlcHRoOiBudW1iZXIgPSAzLFxuICAvLyAxMDBrQiwgYXMgMjAwa0IgaXMgbWF4IHBheWxvYWQgc2l6ZSwgc28gaGFsZiBzb3VuZHMgcmVhc29uYWJsZVxuICBtYXhTaXplOiBudW1iZXIgPSAxMDAgKiAxMDI0LFxuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWQgPSBub3JtYWxpemUob2JqZWN0LCBkZXB0aCk7XG5cbiAgaWYgKGpzb25TaXplKHNlcmlhbGl6ZWQpID4gbWF4U2l6ZSkge1xuICAgIHJldHVybiBub3JtYWxpemVUb1NpemUob2JqZWN0LCBkZXB0aCAtIDEsIG1heFNpemUpO1xuICB9XG5cbiAgcmV0dXJuIHNlcmlhbGl6ZWQgYXMgVDtcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gYW55IG5vbi1wcmltaXRpdmUsIEJpZ0ludCwgb3IgU3ltYm9sLXR5cGUgdmFsdWUgaW50byBhIHN0cmluZy4gQWN0cyBhcyBhIG5vLW9wIG9uIHN0cmluZ3MsIG51bWJlcnMsXG4gKiBib29sZWFucywgbnVsbCwgYW5kIHVuZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHN0cmluZ2lmeVxuICogQHJldHVybnMgRm9yIG5vbi1wcmltaXRpdmUsIEJpZ0ludCwgYW5kIFN5bWJvbC10eXBlIHZhbHVlcywgYSBzdHJpbmcgZGVub3RpbmcgdGhlIHZhbHVlJ3MgdHlwZSwgdHlwZSBhbmQgdmFsdWUsIG9yXG4gKiAgdHlwZSBhbmQgYGRlc2NyaXB0aW9uYCBwcm9wZXJ0eSwgcmVzcGVjdGl2ZWx5LiBGb3Igbm9uLUJpZ0ludCwgbm9uLVN5bWJvbCBwcmltaXRpdmVzLCByZXR1cm5zIHRoZSBvcmlnaW5hbCB2YWx1ZSxcbiAqICB1bmNoYW5nZWQuXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZVZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xuICBjb25zdCB0eXBlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcblxuICAvLyBOb2RlLmpzIFJFUEwgbm90YXRpb25cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKHR5cGUgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgcmV0dXJuICdbT2JqZWN0XSc7XG4gIH1cbiAgaWYgKHR5cGUgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICByZXR1cm4gJ1tBcnJheV0nO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgcmV0dXJuIGlzUHJpbWl0aXZlKG5vcm1hbGl6ZWQpID8gbm9ybWFsaXplZCA6IHR5cGU7XG59XG5cbi8qKlxuICogbm9ybWFsaXplVmFsdWUoKVxuICpcbiAqIFRha2VzIHVuc2VyaWFsaXphYmxlIGlucHV0IGFuZCBtYWtlIGl0IHNlcmlhbGl6YWJsZSBmcmllbmRseVxuICpcbiAqIC0gdHJhbnNsYXRlcyB1bmRlZmluZWQvTmFOIHZhbHVlcyB0byBcIlt1bmRlZmluZWRdXCIvXCJbTmFOXVwiIHJlc3BlY3RpdmVseSxcbiAqIC0gc2VyaWFsaXplcyBFcnJvciBvYmplY3RzXG4gKiAtIGZpbHRlciBnbG9iYWwgb2JqZWN0c1xuICovXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZTxUPih2YWx1ZTogVCwga2V5PzogYW55KTogVCB8IHN0cmluZyB7XG4gIGlmIChrZXkgPT09ICdkb21haW4nICYmIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgKCh2YWx1ZSBhcyB1bmtub3duKSBhcyB7IF9ldmVudHM6IGFueSB9KS5fZXZlbnRzKSB7XG4gICAgcmV0dXJuICdbRG9tYWluXSc7XG4gIH1cblxuICBpZiAoa2V5ID09PSAnZG9tYWluRW1pdHRlcicpIHtcbiAgICByZXR1cm4gJ1tEb21haW5FbWl0dGVyXSc7XG4gIH1cblxuICBpZiAodHlwZW9mIChnbG9iYWwgYXMgYW55KSAhPT0gJ3VuZGVmaW5lZCcgJiYgKHZhbHVlIGFzIHVua25vd24pID09PSBnbG9iYWwpIHtcbiAgICByZXR1cm4gJ1tHbG9iYWxdJztcbiAgfVxuXG4gIC8vIEl0J3Mgc2FmZSB0byB1c2UgYHdpbmRvd2AgYW5kIGBkb2N1bWVudGAgaGVyZSBpbiB0aGlzIG1hbm5lciwgYXMgd2UgYXJlIGFzc2VydGluZyB1c2luZyBgdHlwZW9mYCBmaXJzdFxuICAvLyB3aGljaCB3b24ndCB0aHJvdyBpZiB0aGV5IGFyZSBub3QgcHJlc2VudC5cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG4gIGlmICh0eXBlb2YgKHdpbmRvdyBhcyBhbnkpICE9PSAndW5kZWZpbmVkJyAmJiAodmFsdWUgYXMgdW5rbm93bikgPT09IHdpbmRvdykge1xuICAgIHJldHVybiAnW1dpbmRvd10nO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICBpZiAodHlwZW9mIChkb2N1bWVudCBhcyBhbnkpICE9PSAndW5kZWZpbmVkJyAmJiAodmFsdWUgYXMgdW5rbm93bikgPT09IGRvY3VtZW50KSB7XG4gICAgcmV0dXJuICdbRG9jdW1lbnRdJztcbiAgfVxuXG4gIC8vIFJlYWN0J3MgU3ludGhldGljRXZlbnQgdGhpbmd5XG4gIGlmIChpc1N5bnRoZXRpY0V2ZW50KHZhbHVlKSkge1xuICAgIHJldHVybiAnW1N5bnRoZXRpY0V2ZW50XSc7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICByZXR1cm4gJ1tOYU5dJztcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuICdbdW5kZWZpbmVkXSc7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGBbRnVuY3Rpb246ICR7Z2V0RnVuY3Rpb25OYW1lKHZhbHVlKX1dYDtcbiAgfVxuXG4gIC8vIHN5bWJvbHMgYW5kIGJpZ2ludHMgYXJlIGNvbnNpZGVyZWQgcHJpbWl0aXZlcyBieSBUUywgYnV0IGFyZW4ndCBuYXRpdmVseSBKU09OLXNlcmlsYWl6YWJsZVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG4gICAgcmV0dXJuIGBbJHtTdHJpbmcodmFsdWUpfV1gO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcbiAgICByZXR1cm4gYFtCaWdJbnQ6ICR7U3RyaW5nKHZhbHVlKX1dYDtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBXYWxrcyBhbiBvYmplY3QgdG8gcGVyZm9ybSBhIG5vcm1hbGl6YXRpb24gb24gaXRcbiAqXG4gKiBAcGFyYW0ga2V5IG9mIG9iamVjdCB0aGF0J3Mgd2Fsa2VkIGluIGN1cnJlbnQgaXRlcmF0aW9uXG4gKiBAcGFyYW0gdmFsdWUgb2JqZWN0IHRvIGJlIHdhbGtlZFxuICogQHBhcmFtIGRlcHRoIE9wdGlvbmFsIG51bWJlciBpbmRpY2F0aW5nIGhvdyBkZWVwIHNob3VsZCB3YWxraW5nIGJlIHBlcmZvcm1lZFxuICogQHBhcmFtIG1lbW8gT3B0aW9uYWwgTWVtbyBjbGFzcyBoYW5kbGluZyBkZWN5Y2xpbmdcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcbmV4cG9ydCBmdW5jdGlvbiB3YWxrKGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBkZXB0aDogbnVtYmVyID0gK0luZmluaXR5LCBtZW1vOiBNZW1vID0gbmV3IE1lbW8oKSk6IGFueSB7XG4gIC8vIElmIHdlIHJlYWNoIHRoZSBtYXhpbXVtIGRlcHRoLCBzZXJpYWxpemUgd2hhdGV2ZXIgaGFzIGxlZnRcbiAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZVZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyAqL1xuICAvLyBJZiB2YWx1ZSBpbXBsZW1lbnRzIGB0b0pTT05gIG1ldGhvZCwgY2FsbCBpdCBhbmQgcmV0dXJuIGVhcmx5XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB2YWx1ZS50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdmFsdWUudG9KU09OKCk7XG4gIH1cbiAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi9cblxuICAvLyBJZiBub3JtYWxpemVkIHZhbHVlIGlzIGEgcHJpbWl0aXZlLCB0aGVyZSBhcmUgbm8gYnJhbmNoZXMgbGVmdCB0byB3YWxrLCBzbyB3ZSBjYW4ganVzdCBiYWlsIG91dCwgYXMgdGhlcmVzIG5vIHBvaW50IGluIGdvaW5nIGRvd24gdGhhdCBicmFuY2ggYW55IGZ1cnRoZXJcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlLCBrZXkpO1xuICBpZiAoaXNQcmltaXRpdmUobm9ybWFsaXplZCkpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgfVxuXG4gIC8vIENyZWF0ZSBzb3VyY2UgdGhhdCB3ZSB3aWxsIHVzZSBmb3IgbmV4dCBpdHRlcmF0aW9ucywgZWl0aGVyIG9iamVjdGlmaWVkIGVycm9yIG9iamVjdCAoRXJyb3IgdHlwZSB3aXRoIGV4dHJhY3RlZCBrZXlzOnZhbHVlIHBhaXJzKSBvciB0aGUgaW5wdXQgaXRzZWxmXG4gIGNvbnN0IHNvdXJjZSA9IGdldFdhbGtTb3VyY2UodmFsdWUpO1xuXG4gIC8vIENyZWF0ZSBhbiBhY2N1bXVsYXRvciB0aGF0IHdpbGwgYWN0IGFzIGEgcGFyZW50IGZvciBhbGwgZnV0dXJlIGl0dGVyYXRpb25zIG9mIHRoYXQgYnJhbmNoXG4gIGNvbnN0IGFjYyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gW10gOiB7fTtcblxuICAvLyBJZiB3ZSBhbHJlYWR5IHdhbGtlZCB0aGF0IGJyYW5jaCwgYmFpbCBvdXQsIGFzIGl0J3MgY2lyY3VsYXIgcmVmZXJlbmNlXG4gIGlmIChtZW1vLm1lbW9pemUodmFsdWUpKSB7XG4gICAgcmV0dXJuICdbQ2lyY3VsYXIgfl0nO1xuICB9XG5cbiAgLy8gV2FsayBhbGwga2V5cyBvZiB0aGUgc291cmNlXG4gIGZvciAoY29uc3QgaW5uZXJLZXkgaW4gc291cmNlKSB7XG4gICAgLy8gQXZvaWQgaXRlcmF0aW5nIG92ZXIgZmllbGRzIGluIHRoZSBwcm90b3R5cGUgaWYgdGhleSd2ZSBzb21laG93IGJlZW4gZXhwb3NlZCB0byBlbnVtZXJhdGlvbi5cbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGlubmVyS2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IHdhbGsgdGhyb3VnaCBhbGwgdGhlIGNoaWxkIG5vZGVzXG4gICAgKGFjYyBhcyB7IFtrZXk6IHN0cmluZ106IGFueSB9KVtpbm5lcktleV0gPSB3YWxrKGlubmVyS2V5LCBzb3VyY2VbaW5uZXJLZXldLCBkZXB0aCAtIDEsIG1lbW8pO1xuICB9XG5cbiAgLy8gT25jZSB3YWxrZWQgdGhyb3VnaCBhbGwgdGhlIGJyYW5jaGVzLCByZW1vdmUgdGhlIHBhcmVudCBmcm9tIG1lbW8gc3RvcmFnZVxuICBtZW1vLnVubWVtb2l6ZSh2YWx1ZSk7XG5cbiAgLy8gUmV0dXJuIGFjY3VtdWxhdGVkIHZhbHVlc1xuICByZXR1cm4gYWNjO1xufVxuXG4vKipcbiAqIG5vcm1hbGl6ZSgpXG4gKlxuICogLSBDcmVhdGVzIGEgY29weSB0byBwcmV2ZW50IG9yaWdpbmFsIGlucHV0IG11dGF0aW9uXG4gKiAtIFNraXAgbm9uLWVudW1lcmFibGVyc1xuICogLSBDYWxscyBgdG9KU09OYCBpZiBpbXBsZW1lbnRlZFxuICogLSBSZW1vdmVzIGNpcmN1bGFyIHJlZmVyZW5jZXNcbiAqIC0gVHJhbnNsYXRlcyBub24tc2VyaWFsaXplYWJsZSB2YWx1ZXMgKHVuZGVmaW5lZC9OYU4vRnVuY3Rpb25zKSB0byBzZXJpYWxpemFibGUgZm9ybWF0XG4gKiAtIFRyYW5zbGF0ZXMga25vd24gZ2xvYmFsIG9iamVjdHMvQ2xhc3NlcyB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbnNcbiAqIC0gVGFrZXMgY2FyZSBvZiBFcnJvciBvYmplY3RzIHNlcmlhbGl6YXRpb25cbiAqIC0gT3B0aW9uYWxseSBsaW1pdCBkZXB0aCBvZiBmaW5hbCBvdXRwdXRcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUoaW5wdXQ6IGFueSwgZGVwdGg/OiBudW1iZXIpOiBhbnkge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGlucHV0LCAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHdhbGsoa2V5LCB2YWx1ZSwgZGVwdGgpKSk7XG4gIH0gY2F0Y2ggKF9vTykge1xuICAgIHJldHVybiAnKipub24tc2VyaWFsaXphYmxlKionO1xuICB9XG59XG5cbi8qKlxuICogR2l2ZW4gYW55IGNhcHR1cmVkIGV4Y2VwdGlvbiwgZXh0cmFjdCBpdHMga2V5cyBhbmQgY3JlYXRlIGEgc29ydGVkXG4gKiBhbmQgdHJ1bmNhdGVkIGxpc3QgdGhhdCB3aWxsIGJlIHVzZWQgaW5zaWRlIHRoZSBldmVudCBtZXNzYWdlLlxuICogZWcuIGBOb24tZXJyb3IgZXhjZXB0aW9uIGNhcHR1cmVkIHdpdGgga2V5czogZm9vLCBiYXIsIGJhemBcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RXhjZXB0aW9uS2V5c0Zvck1lc3NhZ2UoZXhjZXB0aW9uOiBhbnksIG1heExlbmd0aDogbnVtYmVyID0gNDApOiBzdHJpbmcge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZ2V0V2Fsa1NvdXJjZShleGNlcHRpb24pKTtcbiAga2V5cy5zb3J0KCk7XG5cbiAgaWYgKCFrZXlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnW29iamVjdCBoYXMgbm8ga2V5c10nO1xuICB9XG5cbiAgaWYgKGtleXNbMF0ubGVuZ3RoID49IG1heExlbmd0aCkge1xuICAgIHJldHVybiB0cnVuY2F0ZShrZXlzWzBdLCBtYXhMZW5ndGgpO1xuICB9XG5cbiAgZm9yIChsZXQgaW5jbHVkZWRLZXlzID0ga2V5cy5sZW5ndGg7IGluY2x1ZGVkS2V5cyA+IDA7IGluY2x1ZGVkS2V5cy0tKSB7XG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IGtleXMuc2xpY2UoMCwgaW5jbHVkZWRLZXlzKS5qb2luKCcsICcpO1xuICAgIGlmIChzZXJpYWxpemVkLmxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChpbmNsdWRlZEtleXMgPT09IGtleXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gc2VyaWFsaXplZDtcbiAgICB9XG4gICAgcmV0dXJuIHRydW5jYXRlKHNlcmlhbGl6ZWQsIG1heExlbmd0aCk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogR2l2ZW4gYW55IG9iamVjdCwgcmV0dXJuIHRoZSBuZXcgb2JqZWN0IHdpdGggcmVtb3ZlZCBrZXlzIHRoYXQgdmFsdWUgd2FzIGB1bmRlZmluZWRgLlxuICogV29ya3MgcmVjdXJzaXZlbHkgb24gb2JqZWN0cyBhbmQgYXJyYXlzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJvcFVuZGVmaW5lZEtleXM8VD4odmFsOiBUKTogVCB7XG4gIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICBjb25zdCBvYmogPSB2YWwgYXMgeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgICBjb25zdCBydjogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgIGlmICh0eXBlb2Ygb2JqW2tleV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJ2W2tleV0gPSBkcm9wVW5kZWZpbmVkS2V5cyhvYmpba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBydiBhcyBUO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgIHJldHVybiAodmFsIGFzIGFueVtdKS5tYXAoZHJvcFVuZGVmaW5lZEtleXMpIGFzIGFueTtcbiAgfVxuXG4gIHJldHVybiB2YWw7XG59XG5cbi8qKlxuICogRW5zdXJlIHRoYXQgc29tZXRoaW5nIGlzIGFuIG9iamVjdC5cbiAqXG4gKiBUdXJucyBgdW5kZWZpbmVkYCBhbmQgYG51bGxgIGludG8gYFN0cmluZ2BzIGFuZCBhbGwgb3RoZXIgcHJpbWl0aXZlcyBpbnRvIGluc3RhbmNlcyBvZiB0aGVpciByZXNwZWN0aXZlIHdyYXBwZXJcbiAqIGNsYXNzZXMgKFN0cmluZywgQm9vbGVhbiwgTnVtYmVyLCBldGMuKS4gQWN0cyBhcyB0aGUgaWRlbnRpdHkgZnVuY3Rpb24gb24gbm9uLXByaW1pdGl2ZXMuXG4gKlxuICogQHBhcmFtIHdhdCBUaGUgc3ViamVjdCBvZiB0aGUgb2JqZWN0aWZpY2F0aW9uXG4gKiBAcmV0dXJucyBBIHZlcnNpb24gb2YgYHdhdGAgd2hpY2ggY2FuIHNhZmVseSBiZSB1c2VkIHdpdGggYE9iamVjdGAgY2xhc3MgbWV0aG9kc1xuICovXG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0aWZ5KHdhdDogdW5rbm93bik6IHR5cGVvZiBPYmplY3Qge1xuICBsZXQgb2JqZWN0aWZpZWQ7XG4gIHN3aXRjaCAodHJ1ZSkge1xuICAgIGNhc2Ugd2F0ID09PSB1bmRlZmluZWQgfHwgd2F0ID09PSBudWxsOlxuICAgICAgb2JqZWN0aWZpZWQgPSBuZXcgU3RyaW5nKHdhdCk7XG4gICAgICBicmVhaztcblxuICAgIC8vIFRob3VnaCBzeW1ib2xzIGFuZCBiaWdpbnRzIGRvIGhhdmUgd3JhcHBlciBjbGFzc2VzIChgU3ltYm9sYCBhbmQgYEJpZ0ludGAsIHJlc3BlY3RpdmVseSksIGZvciB3aGF0ZXZlciByZWFzb25cbiAgICAvLyB0aG9zZSBjbGFzc2VzIGRvbid0IGhhdmUgY29uc3RydWN0b3JzIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggdGhlIGBuZXdgIGtleXdvcmQuIFdlIHRoZXJlZm9yZSBuZWVkIHRvIGNhc3QgZWFjaCBhc1xuICAgIC8vIGFuIG9iamVjdCBpbiBvcmRlciB0byB3cmFwIGl0LlxuICAgIGNhc2UgdHlwZW9mIHdhdCA9PT0gJ3N5bWJvbCcgfHwgdHlwZW9mIHdhdCA9PT0gJ2JpZ2ludCc6XG4gICAgICBvYmplY3RpZmllZCA9IE9iamVjdCh3YXQpO1xuICAgICAgYnJlYWs7XG5cbiAgICAvLyB0aGlzIHdpbGwgY2F0Y2ggdGhlIHJlbWFpbmluZyBwcmltaXRpdmVzOiBgU3RyaW5nYCwgYE51bWJlcmAsIGFuZCBgQm9vbGVhbmBcbiAgICBjYXNlIGlzUHJpbWl0aXZlKHdhdCk6XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgICBvYmplY3RpZmllZCA9IG5ldyAod2F0IGFzIGFueSkuY29uc3RydWN0b3Iod2F0KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgLy8gYnkgcHJvY2VzcyBvZiBlbGltaW5hdGlvbiwgYXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoYXQgYHdhdGAgbXVzdCBhbHJlYWR5IGJlIGFuIG9iamVjdFxuICAgIGRlZmF1bHQ6XG4gICAgICBvYmplY3RpZmllZCA9IHdhdDtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBvYmplY3RpZmllZDtcbn1cbiIsICJpbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tICcuL2dsb2JhbCc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5cbi8qKlxuICogVGVsbHMgd2hldGhlciBjdXJyZW50IGVudmlyb25tZW50IHN1cHBvcnRzIEVycm9yRXZlbnQgb2JqZWN0c1xuICoge0BsaW5rIHN1cHBvcnRzRXJyb3JFdmVudH0uXG4gKlxuICogQHJldHVybnMgQW5zd2VyIHRvIHRoZSBnaXZlbiBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzRXJyb3JFdmVudCgpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBuZXcgRXJyb3JFdmVudCgnJyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBUZWxscyB3aGV0aGVyIGN1cnJlbnQgZW52aXJvbm1lbnQgc3VwcG9ydHMgRE9NRXJyb3Igb2JqZWN0c1xuICoge0BsaW5rIHN1cHBvcnRzRE9NRXJyb3J9LlxuICpcbiAqIEByZXR1cm5zIEFuc3dlciB0byB0aGUgZ2l2ZW4gcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0c0RPTUVycm9yKCk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIC8vIENocm9tZTogVk04OToxIFVuY2F1Z2h0IFR5cGVFcnJvcjogRmFpbGVkIHRvIGNvbnN0cnVjdCAnRE9NRXJyb3InOlxuICAgIC8vIDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IDAgcHJlc2VudC5cbiAgICAvLyBAdHMtaWdub3JlIEl0IHJlYWxseSBuZWVkcyAxIGFyZ3VtZW50LCBub3QgMC5cbiAgICBuZXcgRE9NRXJyb3IoJycpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVGVsbHMgd2hldGhlciBjdXJyZW50IGVudmlyb25tZW50IHN1cHBvcnRzIERPTUV4Y2VwdGlvbiBvYmplY3RzXG4gKiB7QGxpbmsgc3VwcG9ydHNET01FeGNlcHRpb259LlxuICpcbiAqIEByZXR1cm5zIEFuc3dlciB0byB0aGUgZ2l2ZW4gcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0c0RPTUV4Y2VwdGlvbigpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBuZXcgRE9NRXhjZXB0aW9uKCcnKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFRlbGxzIHdoZXRoZXIgY3VycmVudCBlbnZpcm9ubWVudCBzdXBwb3J0cyBGZXRjaCBBUElcbiAqIHtAbGluayBzdXBwb3J0c0ZldGNofS5cbiAqXG4gKiBAcmV0dXJucyBBbnN3ZXIgdG8gdGhlIGdpdmVuIHF1ZXN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNGZXRjaCgpOiBib29sZWFuIHtcbiAgaWYgKCEoJ2ZldGNoJyBpbiBnZXRHbG9iYWxPYmplY3Q8V2luZG93PigpKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgbmV3IEhlYWRlcnMoKTtcbiAgICBuZXcgUmVxdWVzdCgnJyk7XG4gICAgbmV3IFJlc3BvbnNlKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogaXNOYXRpdmVGZXRjaCBjaGVja3MgaWYgdGhlIGdpdmVuIGZ1bmN0aW9uIGlzIGEgbmF0aXZlIGltcGxlbWVudGF0aW9uIG9mIGZldGNoKClcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXNcbmV4cG9ydCBmdW5jdGlvbiBpc05hdGl2ZUZldGNoKGZ1bmM6IEZ1bmN0aW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiBmdW5jICYmIC9eZnVuY3Rpb24gZmV0Y2hcXChcXClcXHMrXFx7XFxzK1xcW25hdGl2ZSBjb2RlXFxdXFxzK1xcfSQvLnRlc3QoZnVuYy50b1N0cmluZygpKTtcbn1cblxuLyoqXG4gKiBUZWxscyB3aGV0aGVyIGN1cnJlbnQgZW52aXJvbm1lbnQgc3VwcG9ydHMgRmV0Y2ggQVBJIG5hdGl2ZWx5XG4gKiB7QGxpbmsgc3VwcG9ydHNOYXRpdmVGZXRjaH0uXG4gKlxuICogQHJldHVybnMgdHJ1ZSBpZiBgd2luZG93LmZldGNoYCBpcyBuYXRpdmVseSBpbXBsZW1lbnRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0c05hdGl2ZUZldGNoKCk6IGJvb2xlYW4ge1xuICBpZiAoIXN1cHBvcnRzRmV0Y2goKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdDxXaW5kb3c+KCk7XG5cbiAgLy8gRmFzdCBwYXRoIHRvIGF2b2lkIERPTSBJL09cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICBpZiAoaXNOYXRpdmVGZXRjaChnbG9iYWwuZmV0Y2gpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyB3aW5kb3cuZmV0Y2ggaXMgaW1wbGVtZW50ZWQsIGJ1dCBpcyBwb2x5ZmlsbGVkIG9yIGFscmVhZHkgd3JhcHBlZCAoZS5nOiBieSBhIGNocm9tZSBleHRlbnNpb24pXG4gIC8vIHNvIGNyZWF0ZSBhIFwicHVyZVwiIGlmcmFtZSB0byBzZWUgaWYgdGhhdCBoYXMgbmF0aXZlIGZldGNoXG4gIGxldCByZXN1bHQgPSBmYWxzZTtcbiAgY29uc3QgZG9jID0gZ2xvYmFsLmRvY3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgaWYgKGRvYyAmJiB0eXBlb2YgKGRvYy5jcmVhdGVFbGVtZW50IGFzIHVua25vd24pID09PSBgZnVuY3Rpb25gKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNhbmRib3ggPSBkb2MuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gICAgICBzYW5kYm94LmhpZGRlbiA9IHRydWU7XG4gICAgICBkb2MuaGVhZC5hcHBlbmRDaGlsZChzYW5kYm94KTtcbiAgICAgIGlmIChzYW5kYm94LmNvbnRlbnRXaW5kb3cgJiYgc2FuZGJveC5jb250ZW50V2luZG93LmZldGNoKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICAgICAgcmVzdWx0ID0gaXNOYXRpdmVGZXRjaChzYW5kYm94LmNvbnRlbnRXaW5kb3cuZmV0Y2gpO1xuICAgICAgfVxuICAgICAgZG9jLmhlYWQucmVtb3ZlQ2hpbGQoc2FuZGJveCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIud2FybignQ291bGQgbm90IGNyZWF0ZSBzYW5kYm94IGlmcmFtZSBmb3IgcHVyZSBmZXRjaCBjaGVjaywgYmFpbGluZyB0byB3aW5kb3cuZmV0Y2g6ICcsIGVycik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBUZWxscyB3aGV0aGVyIGN1cnJlbnQgZW52aXJvbm1lbnQgc3VwcG9ydHMgUmVwb3J0aW5nT2JzZXJ2ZXIgQVBJXG4gKiB7QGxpbmsgc3VwcG9ydHNSZXBvcnRpbmdPYnNlcnZlcn0uXG4gKlxuICogQHJldHVybnMgQW5zd2VyIHRvIHRoZSBnaXZlbiBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzUmVwb3J0aW5nT2JzZXJ2ZXIoKTogYm9vbGVhbiB7XG4gIHJldHVybiAnUmVwb3J0aW5nT2JzZXJ2ZXInIGluIGdldEdsb2JhbE9iamVjdCgpO1xufVxuXG4vKipcbiAqIFRlbGxzIHdoZXRoZXIgY3VycmVudCBlbnZpcm9ubWVudCBzdXBwb3J0cyBSZWZlcnJlciBQb2xpY3kgQVBJXG4gKiB7QGxpbmsgc3VwcG9ydHNSZWZlcnJlclBvbGljeX0uXG4gKlxuICogQHJldHVybnMgQW5zd2VyIHRvIHRoZSBnaXZlbiBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzUmVmZXJyZXJQb2xpY3koKTogYm9vbGVhbiB7XG4gIC8vIERlc3BpdGUgYWxsIHN0YXJzIGluIHRoZSBza3kgc2F5aW5nIHRoYXQgRWRnZSBzdXBwb3J0cyBvbGQgZHJhZnQgc3ludGF4LCBha2EgJ25ldmVyJywgJ2Fsd2F5cycsICdvcmlnaW4nIGFuZCAnZGVmYXVsdFxuICAvLyBodHRwczovL2Nhbml1c2UuY29tLyNmZWF0PXJlZmVycmVyLXBvbGljeVxuICAvLyBJdCBkb2Vzbid0LiBBbmQgaXQgdGhyb3cgZXhjZXB0aW9uIGluc3RlYWQgb2YgaWdub3JpbmcgdGhpcyBwYXJhbWV0ZXIuLi5cbiAgLy8gUkVGOiBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3JhdmVuLWpzL2lzc3Vlcy8xMjMzXG5cbiAgaWYgKCFzdXBwb3J0c0ZldGNoKCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0cnkge1xuICAgIG5ldyBSZXF1ZXN0KCdfJywge1xuICAgICAgcmVmZXJyZXJQb2xpY3k6ICdvcmlnaW4nIGFzIFJlZmVycmVyUG9saWN5LFxuICAgIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVGVsbHMgd2hldGhlciBjdXJyZW50IGVudmlyb25tZW50IHN1cHBvcnRzIEhpc3RvcnkgQVBJXG4gKiB7QGxpbmsgc3VwcG9ydHNIaXN0b3J5fS5cbiAqXG4gKiBAcmV0dXJucyBBbnN3ZXIgdG8gdGhlIGdpdmVuIHF1ZXN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNIaXN0b3J5KCk6IGJvb2xlYW4ge1xuICAvLyBOT1RFOiBpbiBDaHJvbWUgQXBwIGVudmlyb25tZW50LCB0b3VjaGluZyBoaXN0b3J5LnB1c2hTdGF0ZSwgKmV2ZW4gaW5zaWRlXG4gIC8vICAgICAgIGEgdHJ5L2NhdGNoIGJsb2NrKiwgd2lsbCBjYXVzZSBDaHJvbWUgdG8gb3V0cHV0IGFuIGVycm9yIHRvIGNvbnNvbGUuZXJyb3JcbiAgLy8gYm9ycm93ZWQgZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci5qcy9wdWxsLzEzOTQ1L2ZpbGVzXG4gIGNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdDxXaW5kb3c+KCk7XG4gIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBjb25zdCBjaHJvbWUgPSAoZ2xvYmFsIGFzIGFueSkuY2hyb21lO1xuICBjb25zdCBpc0Nocm9tZVBhY2thZ2VkQXBwID0gY2hyb21lICYmIGNocm9tZS5hcHAgJiYgY2hyb21lLmFwcC5ydW50aW1lO1xuICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyAqL1xuICBjb25zdCBoYXNIaXN0b3J5QXBpID0gJ2hpc3RvcnknIGluIGdsb2JhbCAmJiAhIWdsb2JhbC5oaXN0b3J5LnB1c2hTdGF0ZSAmJiAhIWdsb2JhbC5oaXN0b3J5LnJlcGxhY2VTdGF0ZTtcblxuICByZXR1cm4gIWlzQ2hyb21lUGFja2FnZWRBcHAgJiYgaGFzSGlzdG9yeUFwaTtcbn1cbiIsICIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGluZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXMgKi9cbmltcG9ydCB7IFdyYXBwZWRGdW5jdGlvbiB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuXG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tICcuL2dsb2JhbCc7XG5pbXBvcnQgeyBpc0luc3RhbmNlT2YsIGlzU3RyaW5nIH0gZnJvbSAnLi9pcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBmaWxsIH0gZnJvbSAnLi9vYmplY3QnO1xuaW1wb3J0IHsgZ2V0RnVuY3Rpb25OYW1lIH0gZnJvbSAnLi9zdGFja3RyYWNlJztcbmltcG9ydCB7IHN1cHBvcnRzSGlzdG9yeSwgc3VwcG9ydHNOYXRpdmVGZXRjaCB9IGZyb20gJy4vc3VwcG9ydHMnO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWxPYmplY3Q8V2luZG93PigpO1xuXG4vKiogT2JqZWN0IGRlc2NyaWJpbmcgaGFuZGxlciB0aGF0IHdpbGwgYmUgdHJpZ2dlcmVkIGZvciBhIGdpdmVuIGB0eXBlYCBvZiBpbnN0cnVtZW50YXRpb24gKi9cbmludGVyZmFjZSBJbnN0cnVtZW50SGFuZGxlciB7XG4gIHR5cGU6IEluc3RydW1lbnRIYW5kbGVyVHlwZTtcbiAgY2FsbGJhY2s6IEluc3RydW1lbnRIYW5kbGVyQ2FsbGJhY2s7XG59XG50eXBlIEluc3RydW1lbnRIYW5kbGVyVHlwZSA9XG4gIHwgJ2NvbnNvbGUnXG4gIHwgJ2RvbSdcbiAgfCAnZmV0Y2gnXG4gIHwgJ2hpc3RvcnknXG4gIHwgJ3NlbnRyeSdcbiAgfCAneGhyJ1xuICB8ICdlcnJvcidcbiAgfCAndW5oYW5kbGVkcmVqZWN0aW9uJztcbnR5cGUgSW5zdHJ1bWVudEhhbmRsZXJDYWxsYmFjayA9IChkYXRhOiBhbnkpID0+IHZvaWQ7XG5cbi8qKlxuICogSW5zdHJ1bWVudCBuYXRpdmUgQVBJcyB0byBjYWxsIGhhbmRsZXJzIHRoYXQgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGJyZWFkY3J1bWJzLCBBUE0gc3BhbnMgZXRjLlxuICogIC0gQ29uc29sZSBBUElcbiAqICAtIEZldGNoIEFQSVxuICogIC0gWEhSIEFQSVxuICogIC0gSGlzdG9yeSBBUElcbiAqICAtIERPTSBBUEkgKGNsaWNrL3R5cGluZylcbiAqICAtIEVycm9yIEFQSVxuICogIC0gVW5oYW5kbGVkUmVqZWN0aW9uIEFQSVxuICovXG5cbmNvbnN0IGhhbmRsZXJzOiB7IFtrZXkgaW4gSW5zdHJ1bWVudEhhbmRsZXJUeXBlXT86IEluc3RydW1lbnRIYW5kbGVyQ2FsbGJhY2tbXSB9ID0ge307XG5jb25zdCBpbnN0cnVtZW50ZWQ6IHsgW2tleSBpbiBJbnN0cnVtZW50SGFuZGxlclR5cGVdPzogYm9vbGVhbiB9ID0ge307XG5cbi8qKiBJbnN0cnVtZW50cyBnaXZlbiBBUEkgKi9cbmZ1bmN0aW9uIGluc3RydW1lbnQodHlwZTogSW5zdHJ1bWVudEhhbmRsZXJUeXBlKTogdm9pZCB7XG4gIGlmIChpbnN0cnVtZW50ZWRbdHlwZV0pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpbnN0cnVtZW50ZWRbdHlwZV0gPSB0cnVlO1xuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2NvbnNvbGUnOlxuICAgICAgaW5zdHJ1bWVudENvbnNvbGUoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2RvbSc6XG4gICAgICBpbnN0cnVtZW50RE9NKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd4aHInOlxuICAgICAgaW5zdHJ1bWVudFhIUigpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZmV0Y2gnOlxuICAgICAgaW5zdHJ1bWVudEZldGNoKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdoaXN0b3J5JzpcbiAgICAgIGluc3RydW1lbnRIaXN0b3J5KCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlcnJvcic6XG4gICAgICBpbnN0cnVtZW50RXJyb3IoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3VuaGFuZGxlZHJlamVjdGlvbic6XG4gICAgICBpbnN0cnVtZW50VW5oYW5kbGVkUmVqZWN0aW9uKCk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgbG9nZ2VyLndhcm4oJ3Vua25vd24gaW5zdHJ1bWVudGF0aW9uIHR5cGU6JywgdHlwZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBZGQgaGFuZGxlciB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gZ2l2ZW4gdHlwZSBvZiBpbnN0cnVtZW50YXRpb24gdHJpZ2dlcnMuXG4gKiBVc2UgYXQgeW91ciBvd24gcmlzaywgdGhpcyBtaWdodCBicmVhayB3aXRob3V0IGNoYW5nZWxvZyBub3RpY2UsIG9ubHkgdXNlZCBpbnRlcm5hbGx5LlxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkSW5zdHJ1bWVudGF0aW9uSGFuZGxlcihoYW5kbGVyOiBJbnN0cnVtZW50SGFuZGxlcik6IHZvaWQge1xuICBpZiAoIWhhbmRsZXIgfHwgdHlwZW9mIGhhbmRsZXIudHlwZSAhPT0gJ3N0cmluZycgfHwgdHlwZW9mIGhhbmRsZXIuY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGFuZGxlcnNbaGFuZGxlci50eXBlXSA9IGhhbmRsZXJzW2hhbmRsZXIudHlwZV0gfHwgW107XG4gIChoYW5kbGVyc1toYW5kbGVyLnR5cGVdIGFzIEluc3RydW1lbnRIYW5kbGVyQ2FsbGJhY2tbXSkucHVzaChoYW5kbGVyLmNhbGxiYWNrKTtcbiAgaW5zdHJ1bWVudChoYW5kbGVyLnR5cGUpO1xufVxuXG4vKiogSlNEb2MgKi9cbmZ1bmN0aW9uIHRyaWdnZXJIYW5kbGVycyh0eXBlOiBJbnN0cnVtZW50SGFuZGxlclR5cGUsIGRhdGE6IGFueSk6IHZvaWQge1xuICBpZiAoIXR5cGUgfHwgIWhhbmRsZXJzW3R5cGVdKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yIChjb25zdCBoYW5kbGVyIG9mIGhhbmRsZXJzW3R5cGVdIHx8IFtdKSB7XG4gICAgdHJ5IHtcbiAgICAgIGhhbmRsZXIoZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICBgRXJyb3Igd2hpbGUgdHJpZ2dlcmluZyBpbnN0cnVtZW50YXRpb24gaGFuZGxlci5cXG5UeXBlOiAke3R5cGV9XFxuTmFtZTogJHtnZXRGdW5jdGlvbk5hbWUoXG4gICAgICAgICAgaGFuZGxlcixcbiAgICAgICAgKX1cXG5FcnJvcjogJHtlfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vKiogSlNEb2MgKi9cbmZ1bmN0aW9uIGluc3RydW1lbnRDb25zb2xlKCk6IHZvaWQge1xuICBpZiAoISgnY29uc29sZScgaW4gZ2xvYmFsKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIFsnZGVidWcnLCAnaW5mbycsICd3YXJuJywgJ2Vycm9yJywgJ2xvZycsICdhc3NlcnQnXS5mb3JFYWNoKGZ1bmN0aW9uKGxldmVsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIShsZXZlbCBpbiBnbG9iYWwuY29uc29sZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmaWxsKGdsb2JhbC5jb25zb2xlLCBsZXZlbCwgZnVuY3Rpb24ob3JpZ2luYWxDb25zb2xlTGV2ZWw6ICgpID0+IGFueSk6IEZ1bmN0aW9uIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICB0cmlnZ2VySGFuZGxlcnMoJ2NvbnNvbGUnLCB7IGFyZ3MsIGxldmVsIH0pO1xuXG4gICAgICAgIC8vIHRoaXMgZmFpbHMgZm9yIHNvbWUgYnJvd3NlcnMuIDooXG4gICAgICAgIGlmIChvcmlnaW5hbENvbnNvbGVMZXZlbCkge1xuICAgICAgICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKG9yaWdpbmFsQ29uc29sZUxldmVsLCBnbG9iYWwuY29uc29sZSwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKiogSlNEb2MgKi9cbmZ1bmN0aW9uIGluc3RydW1lbnRGZXRjaCgpOiB2b2lkIHtcbiAgaWYgKCFzdXBwb3J0c05hdGl2ZUZldGNoKCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmaWxsKGdsb2JhbCwgJ2ZldGNoJywgZnVuY3Rpb24ob3JpZ2luYWxGZXRjaDogKCkgPT4gdm9pZCk6ICgpID0+IHZvaWQge1xuICAgIHJldHVybiBmdW5jdGlvbiguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgY29uc3QgaGFuZGxlckRhdGEgPSB7XG4gICAgICAgIGFyZ3MsXG4gICAgICAgIGZldGNoRGF0YToge1xuICAgICAgICAgIG1ldGhvZDogZ2V0RmV0Y2hNZXRob2QoYXJncyksXG4gICAgICAgICAgdXJsOiBnZXRGZXRjaFVybChhcmdzKSxcbiAgICAgICAgfSxcbiAgICAgICAgc3RhcnRUaW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICB9O1xuXG4gICAgICB0cmlnZ2VySGFuZGxlcnMoJ2ZldGNoJywge1xuICAgICAgICAuLi5oYW5kbGVyRGF0YSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgICByZXR1cm4gb3JpZ2luYWxGZXRjaC5hcHBseShnbG9iYWwsIGFyZ3MpLnRoZW4oXG4gICAgICAgIChyZXNwb25zZTogUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0cmlnZ2VySGFuZGxlcnMoJ2ZldGNoJywge1xuICAgICAgICAgICAgLi4uaGFuZGxlckRhdGEsXG4gICAgICAgICAgICBlbmRUaW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICB0cmlnZ2VySGFuZGxlcnMoJ2ZldGNoJywge1xuICAgICAgICAgICAgLi4uaGFuZGxlckRhdGEsXG4gICAgICAgICAgICBlbmRUaW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyBOT1RFOiBJZiB5b3UgYXJlIGEgU2VudHJ5IHVzZXIsIGFuZCB5b3UgYXJlIHNlZWluZyB0aGlzIHN0YWNrIGZyYW1lLFxuICAgICAgICAgIC8vICAgICAgIGl0IG1lYW5zIHRoZSBzZW50cnkuamF2YXNjcmlwdCBTREsgY2F1Z2h0IGFuIGVycm9yIGludm9raW5nIHlvdXIgYXBwbGljYXRpb24gY29kZS5cbiAgICAgICAgICAvLyAgICAgICBUaGlzIGlzIGV4cGVjdGVkIGJlaGF2aW9yIGFuZCBOT1QgaW5kaWNhdGl2ZSBvZiBhIGJ1ZyB3aXRoIHNlbnRyeS5qYXZhc2NyaXB0LlxuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9O1xuICB9KTtcbn1cblxudHlwZSBYSFJTZW5kSW5wdXQgPSBudWxsIHwgQmxvYiB8IEJ1ZmZlclNvdXJjZSB8IEZvcm1EYXRhIHwgVVJMU2VhcmNoUGFyYW1zIHwgc3RyaW5nO1xuXG4vKiogSlNEb2MgKi9cbmludGVyZmFjZSBTZW50cnlXcmFwcGVkWE1MSHR0cFJlcXVlc3QgZXh0ZW5kcyBYTUxIdHRwUmVxdWVzdCB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbiAgX19zZW50cnlfeGhyX18/OiB7XG4gICAgbWV0aG9kPzogc3RyaW5nO1xuICAgIHVybD86IHN0cmluZztcbiAgICBzdGF0dXNfY29kZT86IG51bWJlcjtcbiAgICBib2R5PzogWEhSU2VuZElucHV0O1xuICB9O1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi9cbi8qKiBFeHRyYWN0IGBtZXRob2RgIGZyb20gZmV0Y2ggY2FsbCBhcmd1bWVudHMgKi9cbmZ1bmN0aW9uIGdldEZldGNoTWV0aG9kKGZldGNoQXJnczogYW55W10gPSBbXSk6IHN0cmluZyB7XG4gIGlmICgnUmVxdWVzdCcgaW4gZ2xvYmFsICYmIGlzSW5zdGFuY2VPZihmZXRjaEFyZ3NbMF0sIFJlcXVlc3QpICYmIGZldGNoQXJnc1swXS5tZXRob2QpIHtcbiAgICByZXR1cm4gU3RyaW5nKGZldGNoQXJnc1swXS5tZXRob2QpLnRvVXBwZXJDYXNlKCk7XG4gIH1cbiAgaWYgKGZldGNoQXJnc1sxXSAmJiBmZXRjaEFyZ3NbMV0ubWV0aG9kKSB7XG4gICAgcmV0dXJuIFN0cmluZyhmZXRjaEFyZ3NbMV0ubWV0aG9kKS50b1VwcGVyQ2FzZSgpO1xuICB9XG4gIHJldHVybiAnR0VUJztcbn1cblxuLyoqIEV4dHJhY3QgYHVybGAgZnJvbSBmZXRjaCBjYWxsIGFyZ3VtZW50cyAqL1xuZnVuY3Rpb24gZ2V0RmV0Y2hVcmwoZmV0Y2hBcmdzOiBhbnlbXSA9IFtdKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBmZXRjaEFyZ3NbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZldGNoQXJnc1swXTtcbiAgfVxuICBpZiAoJ1JlcXVlc3QnIGluIGdsb2JhbCAmJiBpc0luc3RhbmNlT2YoZmV0Y2hBcmdzWzBdLCBSZXF1ZXN0KSkge1xuICAgIHJldHVybiBmZXRjaEFyZ3NbMF0udXJsO1xuICB9XG4gIHJldHVybiBTdHJpbmcoZmV0Y2hBcmdzWzBdKTtcbn1cbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovXG5cbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gaW5zdHJ1bWVudFhIUigpOiB2b2lkIHtcbiAgaWYgKCEoJ1hNTEh0dHBSZXF1ZXN0JyBpbiBnbG9iYWwpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gUG9vciBtYW4ncyBpbXBsZW1lbnRhdGlvbiBvZiBFUzYgYE1hcGAsIHRyYWNraW5nIGFuZCBrZWVwaW5nIGluIHN5bmMga2V5IGFuZCB2YWx1ZSBzZXBhcmF0ZWx5LlxuICBjb25zdCByZXF1ZXN0S2V5czogWE1MSHR0cFJlcXVlc3RbXSA9IFtdO1xuICBjb25zdCByZXF1ZXN0VmFsdWVzOiBBcnJheTxhbnk+W10gPSBbXTtcbiAgY29uc3QgeGhycHJvdG8gPSBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGU7XG5cbiAgZmlsbCh4aHJwcm90bywgJ29wZW4nLCBmdW5jdGlvbihvcmlnaW5hbE9wZW46ICgpID0+IHZvaWQpOiAoKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gZnVuY3Rpb24odGhpczogU2VudHJ5V3JhcHBlZFhNTEh0dHBSZXF1ZXN0LCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICBjb25zdCB4aHIgPSB0aGlzO1xuICAgICAgY29uc3QgdXJsID0gYXJnc1sxXTtcbiAgICAgIHhoci5fX3NlbnRyeV94aHJfXyA9IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICBtZXRob2Q6IGlzU3RyaW5nKGFyZ3NbMF0pID8gYXJnc1swXS50b1VwcGVyQ2FzZSgpIDogYXJnc1swXSxcbiAgICAgICAgdXJsOiBhcmdzWzFdLFxuICAgICAgfTtcblxuICAgICAgLy8gaWYgU2VudHJ5IGtleSBhcHBlYXJzIGluIFVSTCwgZG9uJ3QgY2FwdHVyZSBpdCBhcyBhIHJlcXVlc3RcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgIGlmIChpc1N0cmluZyh1cmwpICYmIHhoci5fX3NlbnRyeV94aHJfXy5tZXRob2QgPT09ICdQT1NUJyAmJiB1cmwubWF0Y2goL3NlbnRyeV9rZXkvKSkge1xuICAgICAgICB4aHIuX19zZW50cnlfb3duX3JlcXVlc3RfXyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9ucmVhZHlzdGF0ZWNoYW5nZUhhbmRsZXIgPSBmdW5jdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIHRvdWNoaW5nIHN0YXR1c0NvZGUgaW4gc29tZSBwbGF0Zm9ybXMgdGhyb3dzXG4gICAgICAgICAgICAvLyBhbiBleGNlcHRpb25cbiAgICAgICAgICAgIGlmICh4aHIuX19zZW50cnlfeGhyX18pIHtcbiAgICAgICAgICAgICAgeGhyLl9fc2VudHJ5X3hocl9fLnN0YXR1c19jb2RlID0geGhyLnN0YXR1cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvKiBkbyBub3RoaW5nICovXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RQb3MgPSByZXF1ZXN0S2V5cy5pbmRleE9mKHhocik7XG4gICAgICAgICAgICBpZiAocmVxdWVzdFBvcyAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRvIHBvcCBib3RoIGtleSBhbmQgdmFsdWUgdG8ga2VlcCBpdCBpbiBzeW5jLlxuICAgICAgICAgICAgICByZXF1ZXN0S2V5cy5zcGxpY2UocmVxdWVzdFBvcyk7XG4gICAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSByZXF1ZXN0VmFsdWVzLnNwbGljZShyZXF1ZXN0UG9zKVswXTtcbiAgICAgICAgICAgICAgaWYgKHhoci5fX3NlbnRyeV94aHJfXyAmJiBhcmdzWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB4aHIuX19zZW50cnlfeGhyX18uYm9keSA9IGFyZ3NbMF0gYXMgWEhSU2VuZElucHV0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLyogZG8gbm90aGluZyAqL1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRyaWdnZXJIYW5kbGVycygneGhyJywge1xuICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgIGVuZFRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIHN0YXJ0VGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgeGhyLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBpZiAoJ29ucmVhZHlzdGF0ZWNoYW5nZScgaW4geGhyICYmIHR5cGVvZiB4aHIub25yZWFkeXN0YXRlY2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZpbGwoeGhyLCAnb25yZWFkeXN0YXRlY2hhbmdlJywgZnVuY3Rpb24ob3JpZ2luYWw6IFdyYXBwZWRGdW5jdGlvbik6IEZ1bmN0aW9uIHtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oLi4ucmVhZHlTdGF0ZUFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgICAgICBvbnJlYWR5c3RhdGVjaGFuZ2VIYW5kbGVyKCk7XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkoeGhyLCByZWFkeVN0YXRlQXJncyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsIG9ucmVhZHlzdGF0ZWNoYW5nZUhhbmRsZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3JpZ2luYWxPcGVuLmFwcGx5KHhociwgYXJncyk7XG4gICAgfTtcbiAgfSk7XG5cbiAgZmlsbCh4aHJwcm90bywgJ3NlbmQnLCBmdW5jdGlvbihvcmlnaW5hbFNlbmQ6ICgpID0+IHZvaWQpOiAoKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gZnVuY3Rpb24odGhpczogU2VudHJ5V3JhcHBlZFhNTEh0dHBSZXF1ZXN0LCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgcmVxdWVzdEtleXMucHVzaCh0aGlzKTtcbiAgICAgIHJlcXVlc3RWYWx1ZXMucHVzaChhcmdzKTtcblxuICAgICAgdHJpZ2dlckhhbmRsZXJzKCd4aHInLCB7XG4gICAgICAgIGFyZ3MsXG4gICAgICAgIHN0YXJ0VGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICB4aHI6IHRoaXMsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG9yaWdpbmFsU2VuZC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9KTtcbn1cblxubGV0IGxhc3RIcmVmOiBzdHJpbmc7XG5cbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gaW5zdHJ1bWVudEhpc3RvcnkoKTogdm9pZCB7XG4gIGlmICghc3VwcG9ydHNIaXN0b3J5KCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvbGRPblBvcFN0YXRlID0gZ2xvYmFsLm9ucG9wc3RhdGU7XG4gIGdsb2JhbC5vbnBvcHN0YXRlID0gZnVuY3Rpb24odGhpczogV2luZG93RXZlbnRIYW5kbGVycywgLi4uYXJnczogYW55W10pOiBhbnkge1xuICAgIGNvbnN0IHRvID0gZ2xvYmFsLmxvY2F0aW9uLmhyZWY7XG4gICAgLy8ga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBVUkwgc3RhdGUsIGFzIHdlIGFsd2F5cyByZWNlaXZlIG9ubHkgdGhlIHVwZGF0ZWQgc3RhdGVcbiAgICBjb25zdCBmcm9tID0gbGFzdEhyZWY7XG4gICAgbGFzdEhyZWYgPSB0bztcbiAgICB0cmlnZ2VySGFuZGxlcnMoJ2hpc3RvcnknLCB7XG4gICAgICBmcm9tLFxuICAgICAgdG8sXG4gICAgfSk7XG4gICAgaWYgKG9sZE9uUG9wU3RhdGUpIHtcbiAgICAgIC8vIEFwcGFyZW50bHkgdGhpcyBjYW4gdGhyb3cgaW4gRmlyZWZveCB3aGVuIGluY29ycmVjdGx5IGltcGxlbWVudGVkIHBsdWdpbiBpcyBpbnN0YWxsZWQuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8zMzQ0XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnVnc25hZy9idWdzbmFnLWpzL2lzc3Vlcy80NjlcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBvbGRPblBvcFN0YXRlLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoX29PKSB7XG4gICAgICAgIC8vIG5vLWVtcHR5XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKiBAaGlkZGVuICovXG4gIGZ1bmN0aW9uIGhpc3RvcnlSZXBsYWNlbWVudEZ1bmN0aW9uKG9yaWdpbmFsSGlzdG9yeUZ1bmN0aW9uOiAoKSA9PiB2b2lkKTogKCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHRoaXM6IEhpc3RvcnksIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICBjb25zdCB1cmwgPSBhcmdzLmxlbmd0aCA+IDIgPyBhcmdzWzJdIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKHVybCkge1xuICAgICAgICAvLyBjb2VyY2UgdG8gc3RyaW5nICh0aGlzIGlzIHdoYXQgcHVzaFN0YXRlIGRvZXMpXG4gICAgICAgIGNvbnN0IGZyb20gPSBsYXN0SHJlZjtcbiAgICAgICAgY29uc3QgdG8gPSBTdHJpbmcodXJsKTtcbiAgICAgICAgLy8ga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBVUkwgc3RhdGUsIGFzIHdlIGFsd2F5cyByZWNlaXZlIG9ubHkgdGhlIHVwZGF0ZWQgc3RhdGVcbiAgICAgICAgbGFzdEhyZWYgPSB0bztcbiAgICAgICAgdHJpZ2dlckhhbmRsZXJzKCdoaXN0b3J5Jywge1xuICAgICAgICAgIGZyb20sXG4gICAgICAgICAgdG8sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9yaWdpbmFsSGlzdG9yeUZ1bmN0aW9uLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gIH1cblxuICBmaWxsKGdsb2JhbC5oaXN0b3J5LCAncHVzaFN0YXRlJywgaGlzdG9yeVJlcGxhY2VtZW50RnVuY3Rpb24pO1xuICBmaWxsKGdsb2JhbC5oaXN0b3J5LCAncmVwbGFjZVN0YXRlJywgaGlzdG9yeVJlcGxhY2VtZW50RnVuY3Rpb24pO1xufVxuXG5jb25zdCBkZWJvdW5jZUR1cmF0aW9uID0gMTAwMDtcbmxldCBkZWJvdW5jZVRpbWVySUQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbmxldCBsYXN0Q2FwdHVyZWRFdmVudDogRXZlbnQgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogRGVjaWRlIHdoZXRoZXIgdGhlIGN1cnJlbnQgZXZlbnQgc2hvdWxkIGZpbmlzaCB0aGUgZGVib3VuY2Ugb2YgcHJldmlvdXNseSBjYXB0dXJlZCBvbmUuXG4gKiBAcGFyYW0gcHJldmlvdXMgcHJldmlvdXNseSBjYXB0dXJlZCBldmVudFxuICogQHBhcmFtIGN1cnJlbnQgZXZlbnQgdG8gYmUgY2FwdHVyZWRcbiAqL1xuZnVuY3Rpb24gc2hvdWxkU2hvcnRjaXJjdWl0UHJldmlvdXNEZWJvdW5jZShwcmV2aW91czogRXZlbnQgfCB1bmRlZmluZWQsIGN1cnJlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gIC8vIElmIHRoZXJlIHdhcyBubyBwcmV2aW91cyBldmVudCwgaXQgc2hvdWxkIGFsd2F5cyBiZSBzd2FwcGVkIGZvciB0aGUgbmV3IG9uZS5cbiAgaWYgKCFwcmV2aW91cykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gSWYgYm90aCBldmVudHMgaGF2ZSBkaWZmZXJlbnQgdHlwZSwgdGhlbiB1c2VyIGRlZmluaXRlbHkgcGVyZm9ybWVkIHR3byBzZXBhcmF0ZSBhY3Rpb25zLiBlLmcuIGNsaWNrICsga2V5cHJlc3MuXG4gIGlmIChwcmV2aW91cy50eXBlICE9PSBjdXJyZW50LnR5cGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gSWYgYm90aCBldmVudHMgaGF2ZSB0aGUgc2FtZSB0eXBlLCBpdCdzIHN0aWxsIHBvc3NpYmxlIHRoYXQgYWN0aW9ucyB3ZXJlIHBlcmZvcm1lZCBvbiBkaWZmZXJlbnQgdGFyZ2V0cy5cbiAgICAvLyBlLmcuIDIgY2xpY2tzIG9uIGRpZmZlcmVudCBidXR0b25zLlxuICAgIGlmIChwcmV2aW91cy50YXJnZXQgIT09IGN1cnJlbnQudGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBqdXN0IGFjY2Vzc2luZyBgdGFyZ2V0YCBwcm9wZXJ0eSBjYW4gdGhyb3cgYW4gZXhjZXB0aW9uIGluIHNvbWUgcmFyZSBjaXJjdW1zdGFuY2VzXG4gICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy84MzhcbiAgfVxuXG4gIC8vIElmIGJvdGggZXZlbnRzIGhhdmUgdGhlIHNhbWUgdHlwZSBfYW5kXyBzYW1lIGB0YXJnZXRgIChhbiBlbGVtZW50IHdoaWNoIHRyaWdnZXJlZCBhbiBldmVudCwgX25vdCBuZWNlc3NhcmlseV9cbiAgLy8gdG8gd2hpY2ggYW4gZXZlbnQgbGlzdGVuZXIgd2FzIGF0dGFjaGVkKSwgd2UgdHJlYXQgdGhlbSBhcyB0aGUgc2FtZSBhY3Rpb24sIGFzIHdlIHdhbnQgdG8gY2FwdHVyZVxuICAvLyBvbmx5IG9uZSBicmVhZGNydW1iLiBlLmcuIG11bHRpcGxlIGNsaWNrcyBvbiB0aGUgc2FtZSBidXR0b24sIG9yIHR5cGluZyBpbnNpZGUgYSB1c2VyIGlucHV0IGJveC5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIERlY2lkZSB3aGV0aGVyIGFuIGV2ZW50IHNob3VsZCBiZSBjYXB0dXJlZC5cbiAqIEBwYXJhbSBldmVudCBldmVudCB0byBiZSBjYXB0dXJlZFxuICovXG5mdW5jdGlvbiBzaG91bGRTa2lwRE9NRXZlbnQoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gIC8vIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gZmlsdGVyaW5nIGBrZXlwcmVzc2AgZXZlbnRzIGZvciBub3cuXG4gIGlmIChldmVudC50eXBlICE9PSAna2V5cHJlc3MnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0LnRhZ05hbWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIE9ubHkgY29uc2lkZXIga2V5cHJlc3MgZXZlbnRzIG9uIGFjdHVhbCBpbnB1dCBlbGVtZW50cy4gVGhpcyB3aWxsIGRpc3JlZ2FyZCBrZXlwcmVzc2VzIHRhcmdldGluZyBib2R5XG4gICAgLy8gZS5nLnRhYmJpbmcgdGhyb3VnaCBlbGVtZW50cywgaG90a2V5cywgZXRjLlxuICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ0lOUFVUJyB8fCB0YXJnZXQudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyB8fCB0YXJnZXQuaXNDb250ZW50RWRpdGFibGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBqdXN0IGFjY2Vzc2luZyBgdGFyZ2V0YCBwcm9wZXJ0eSBjYW4gdGhyb3cgYW4gZXhjZXB0aW9uIGluIHNvbWUgcmFyZSBjaXJjdW1zdGFuY2VzXG4gICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy84MzhcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFdyYXBzIGFkZEV2ZW50TGlzdGVuZXIgdG8gY2FwdHVyZSBVSSBicmVhZGNydW1ic1xuICogQHBhcmFtIGhhbmRsZXIgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHRyaWdnZXJlZFxuICogQHBhcmFtIGdsb2JhbExpc3RlbmVyIGluZGljYXRlcyB3aGV0aGVyIGV2ZW50IHdhcyBjYXB0dXJlZCBieSB0aGUgZ2xvYmFsIGV2ZW50IGxpc3RlbmVyXG4gKiBAcmV0dXJucyB3cmFwcGVkIGJyZWFkY3J1bWIgZXZlbnRzIGhhbmRsZXJcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gbWFrZURPTUV2ZW50SGFuZGxlcihoYW5kbGVyOiBGdW5jdGlvbiwgZ2xvYmFsTGlzdGVuZXI6IGJvb2xlYW4gPSBmYWxzZSk6IChldmVudDogRXZlbnQpID0+IHZvaWQge1xuICByZXR1cm4gKGV2ZW50OiBFdmVudCk6IHZvaWQgPT4ge1xuICAgIC8vIEl0J3MgcG9zc2libGUgdGhpcyBoYW5kbGVyIG1pZ2h0IHRyaWdnZXIgbXVsdGlwbGUgdGltZXMgZm9yIHRoZSBzYW1lXG4gICAgLy8gZXZlbnQgKGUuZy4gZXZlbnQgcHJvcGFnYXRpb24gdGhyb3VnaCBub2RlIGFuY2VzdG9ycykuXG4gICAgLy8gSWdub3JlIGlmIHdlJ3ZlIGFscmVhZHkgY2FwdHVyZWQgdGhhdCBldmVudC5cbiAgICBpZiAoIWV2ZW50IHx8IGxhc3RDYXB0dXJlZEV2ZW50ID09PSBldmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFdlIGFsd2F5cyB3YW50IHRvIHNraXAgX3NvbWVfIGV2ZW50cy5cbiAgICBpZiAoc2hvdWxkU2tpcERPTUV2ZW50KGV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWUgPSBldmVudC50eXBlID09PSAna2V5cHJlc3MnID8gJ2lucHV0JyA6IGV2ZW50LnR5cGU7XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBubyBkZWJvdW5jZSB0aW1lciwgaXQgbWVhbnMgdGhhdCB3ZSBjYW4gc2FmZWx5IGNhcHR1cmUgdGhlIG5ldyBldmVudCBhbmQgc3RvcmUgaXQgZm9yIGZ1dHVyZSBjb21wYXJpc29ucy5cbiAgICBpZiAoZGVib3VuY2VUaW1lcklEID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhbmRsZXIoe1xuICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGdsb2JhbDogZ2xvYmFsTGlzdGVuZXIsXG4gICAgICB9KTtcbiAgICAgIGxhc3RDYXB0dXJlZEV2ZW50ID0gZXZlbnQ7XG4gICAgfVxuICAgIC8vIElmIHRoZXJlIGlzIGEgZGVib3VuY2UgYXdhaXRpbmcsIHNlZSBpZiB0aGUgbmV3IGV2ZW50IGlzIGRpZmZlcmVudCBlbm91Z2ggdG8gdHJlYXQgaXQgYXMgYSB1bmlxdWUgb25lLlxuICAgIC8vIElmIHRoYXQncyB0aGUgY2FzZSwgZW1pdCB0aGUgcHJldmlvdXMgZXZlbnQgYW5kIHN0b3JlIGxvY2FsbHkgdGhlIG5ld2x5LWNhcHR1cmVkIERPTSBldmVudC5cbiAgICBlbHNlIGlmIChzaG91bGRTaG9ydGNpcmN1aXRQcmV2aW91c0RlYm91bmNlKGxhc3RDYXB0dXJlZEV2ZW50LCBldmVudCkpIHtcbiAgICAgIGhhbmRsZXIoe1xuICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGdsb2JhbDogZ2xvYmFsTGlzdGVuZXIsXG4gICAgICB9KTtcbiAgICAgIGxhc3RDYXB0dXJlZEV2ZW50ID0gZXZlbnQ7XG4gICAgfVxuXG4gICAgLy8gU3RhcnQgYSBuZXcgZGVib3VuY2UgdGltZXIgdGhhdCB3aWxsIHByZXZlbnQgdXMgZnJvbSBjYXB0dXJpbmcgbXVsdGlwbGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGdyb3VwZWQgdG9nZXRoZXIuXG4gICAgY2xlYXJUaW1lb3V0KGRlYm91bmNlVGltZXJJRCk7XG4gICAgZGVib3VuY2VUaW1lcklEID0gZ2xvYmFsLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZGVib3VuY2VUaW1lcklEID0gdW5kZWZpbmVkO1xuICAgIH0sIGRlYm91bmNlRHVyYXRpb24pO1xuICB9O1xufVxuXG50eXBlIEFkZEV2ZW50TGlzdGVuZXIgPSAoXG4gIHR5cGU6IHN0cmluZyxcbiAgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsXG4gIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMsXG4pID0+IHZvaWQ7XG50eXBlIFJlbW92ZUV2ZW50TGlzdGVuZXIgPSAoXG4gIHR5cGU6IHN0cmluZyxcbiAgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsXG4gIG9wdGlvbnM/OiBib29sZWFuIHwgRXZlbnRMaXN0ZW5lck9wdGlvbnMsXG4pID0+IHZvaWQ7XG5cbnR5cGUgSW5zdHJ1bWVudGVkRWxlbWVudCA9IEVsZW1lbnQgJiB7XG4gIF9fc2VudHJ5X2luc3RydW1lbnRhdGlvbl9oYW5kbGVyc19fPzoge1xuICAgIFtrZXkgaW4gJ2NsaWNrJyB8ICdrZXlwcmVzcyddPzoge1xuICAgICAgaGFuZGxlcj86IEZ1bmN0aW9uO1xuICAgICAgLyoqIFRoZSBudW1iZXIgb2YgY3VzdG9tIGxpc3RlbmVycyBhdHRhY2hlZCB0byB0aGlzIGVsZW1lbnQgKi9cbiAgICAgIHJlZkNvdW50OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbn07XG5cbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gaW5zdHJ1bWVudERPTSgpOiB2b2lkIHtcbiAgaWYgKCEoJ2RvY3VtZW50JyBpbiBnbG9iYWwpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gTWFrZSBpdCBzbyB0aGF0IGFueSBjbGljayBvciBrZXlwcmVzcyB0aGF0IGlzIHVuaGFuZGxlZCAvIGJ1YmJsZWQgdXAgYWxsIHRoZSB3YXkgdG8gdGhlIGRvY3VtZW50IHRyaWdnZXJzIG91ciBkb21cbiAgLy8gaGFuZGxlcnMuIChOb3JtYWxseSB3ZSBoYXZlIG9ubHkgb25lLCB3aGljaCBjYXB0dXJlcyBhIGJyZWFkY3J1bWIgZm9yIGVhY2ggY2xpY2sgb3Iga2V5cHJlc3MuKSBEbyB0aGlzIGJlZm9yZVxuICAvLyB3ZSBpbnN0cnVtZW50IGBhZGRFdmVudExpc3RlbmVyYCBzbyB0aGF0IHdlIGRvbid0IGVuZCB1cCBhdHRhY2hpbmcgdGhpcyBoYW5kbGVyIHR3aWNlLlxuICBjb25zdCB0cmlnZ2VyRE9NSGFuZGxlciA9IHRyaWdnZXJIYW5kbGVycy5iaW5kKG51bGwsICdkb20nKTtcbiAgY29uc3QgZ2xvYmFsRE9NRXZlbnRIYW5kbGVyID0gbWFrZURPTUV2ZW50SGFuZGxlcih0cmlnZ2VyRE9NSGFuZGxlciwgdHJ1ZSk7XG4gIGdsb2JhbC5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGdsb2JhbERPTUV2ZW50SGFuZGxlciwgZmFsc2UpO1xuICBnbG9iYWwuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCBnbG9iYWxET01FdmVudEhhbmRsZXIsIGZhbHNlKTtcblxuICAvLyBBZnRlciBob29raW5nIGludG8gY2xpY2sgYW5kIGtleXByZXNzIGV2ZW50cyBidWJibGVkIHVwIHRvIGBkb2N1bWVudGAsIHdlIGFsc28gaG9vayBpbnRvIHVzZXItaGFuZGxlZFxuICAvLyBjbGlja3MgJiBrZXlwcmVzc2VzLCBieSBhZGRpbmcgYW4gZXZlbnQgbGlzdGVuZXIgb2Ygb3VyIG93biB0byBhbnkgZWxlbWVudCB0byB3aGljaCB0aGV5IGFkZCBhIGxpc3RlbmVyLiBUaGF0XG4gIC8vIHdheSwgd2hlbmV2ZXIgb25lIG9mIHRoZWlyIGhhbmRsZXJzIGlzIHRyaWdnZXJlZCwgb3VycyB3aWxsIGJlLCB0b28uIChUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoZWlyIGhhbmRsZXJcbiAgLy8gY291bGQgcG90ZW50aWFsbHkgcHJldmVudCB0aGUgZXZlbnQgZnJvbSBidWJibGluZyB1cCB0byBvdXIgZ2xvYmFsIGxpc3RlbmVycy4gVGhpcyB3YXksIG91ciBoYW5kbGVyIGFyZSBzdGlsbFxuICAvLyBndWFyYW50ZWVkIHRvIGZpcmUgYXQgbGVhc3Qgb25jZS4pXG4gIFsnRXZlbnRUYXJnZXQnLCAnTm9kZSddLmZvckVhY2goKHRhcmdldDogc3RyaW5nKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgIGNvbnN0IHByb3RvID0gKGdsb2JhbCBhcyBhbnkpW3RhcmdldF0gJiYgKGdsb2JhbCBhcyBhbnkpW3RhcmdldF0ucHJvdG90eXBlO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MsIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIGlmICghcHJvdG8gfHwgIXByb3RvLmhhc093blByb3BlcnR5IHx8ICFwcm90by5oYXNPd25Qcm9wZXJ0eSgnYWRkRXZlbnRMaXN0ZW5lcicpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZmlsbChwcm90bywgJ2FkZEV2ZW50TGlzdGVuZXInLCBmdW5jdGlvbihvcmlnaW5hbEFkZEV2ZW50TGlzdGVuZXI6IEFkZEV2ZW50TGlzdGVuZXIpOiBBZGRFdmVudExpc3RlbmVyIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihcbiAgICAgICAgdGhpczogRWxlbWVudCxcbiAgICAgICAgdHlwZTogc3RyaW5nLFxuICAgICAgICBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCxcbiAgICAgICAgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyxcbiAgICAgICk6IEFkZEV2ZW50TGlzdGVuZXIge1xuICAgICAgICBpZiAodHlwZSA9PT0gJ2NsaWNrJyB8fCB0eXBlID09ICdrZXlwcmVzcycpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZWwgPSB0aGlzIGFzIEluc3RydW1lbnRlZEVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVycyA9IChlbC5fX3NlbnRyeV9pbnN0cnVtZW50YXRpb25faGFuZGxlcnNfXyA9IGVsLl9fc2VudHJ5X2luc3RydW1lbnRhdGlvbl9oYW5kbGVyc19fIHx8IHt9KTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJGb3JUeXBlID0gKGhhbmRsZXJzW3R5cGVdID0gaGFuZGxlcnNbdHlwZV0gfHwgeyByZWZDb3VudDogMCB9KTtcblxuICAgICAgICAgICAgaWYgKCFoYW5kbGVyRm9yVHlwZS5oYW5kbGVyKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBtYWtlRE9NRXZlbnRIYW5kbGVyKHRyaWdnZXJET01IYW5kbGVyKTtcbiAgICAgICAgICAgICAgaGFuZGxlckZvclR5cGUuaGFuZGxlciA9IGhhbmRsZXI7XG4gICAgICAgICAgICAgIG9yaWdpbmFsQWRkRXZlbnRMaXN0ZW5lci5jYWxsKHRoaXMsIHR5cGUsIGhhbmRsZXIsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBoYW5kbGVyRm9yVHlwZS5yZWZDb3VudCArPSAxO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIEFjY2Vzc2luZyBkb20gcHJvcGVydGllcyBpcyBhbHdheXMgZnJhZ2lsZS5cbiAgICAgICAgICAgIC8vIEFsc28gYWxsb3dzIHVzIHRvIHNraXAgYGFkZEV2ZW50TGlzdGVucnNgIGNhbGxzIHdpdGggbm8gcHJvcGVyIGB0aGlzYCBjb250ZXh0LlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcmlnaW5hbEFkZEV2ZW50TGlzdGVuZXIuY2FsbCh0aGlzLCB0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgZmlsbChwcm90bywgJ3JlbW92ZUV2ZW50TGlzdGVuZXInLCBmdW5jdGlvbihvcmlnaW5hbFJlbW92ZUV2ZW50TGlzdGVuZXI6IFJlbW92ZUV2ZW50TGlzdGVuZXIpOiBSZW1vdmVFdmVudExpc3RlbmVyIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihcbiAgICAgICAgdGhpczogRWxlbWVudCxcbiAgICAgICAgdHlwZTogc3RyaW5nLFxuICAgICAgICBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCxcbiAgICAgICAgb3B0aW9ucz86IGJvb2xlYW4gfCBFdmVudExpc3RlbmVyT3B0aW9ucyxcbiAgICAgICk6ICgpID0+IHZvaWQge1xuICAgICAgICBpZiAodHlwZSA9PT0gJ2NsaWNrJyB8fCB0eXBlID09ICdrZXlwcmVzcycpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZWwgPSB0aGlzIGFzIEluc3RydW1lbnRlZEVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVycyA9IGVsLl9fc2VudHJ5X2luc3RydW1lbnRhdGlvbl9oYW5kbGVyc19fIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlckZvclR5cGUgPSBoYW5kbGVyc1t0eXBlXTtcblxuICAgICAgICAgICAgaWYgKGhhbmRsZXJGb3JUeXBlKSB7XG4gICAgICAgICAgICAgIGhhbmRsZXJGb3JUeXBlLnJlZkNvdW50IC09IDE7XG4gICAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBsb25nZXIgYW55IGN1c3RvbSBoYW5kbGVycyBvZiB0aGUgY3VycmVudCB0eXBlIG9uIHRoaXMgZWxlbWVudCwgd2UgY2FuIHJlbW92ZSBvdXJzLCB0b28uXG4gICAgICAgICAgICAgIGlmIChoYW5kbGVyRm9yVHlwZS5yZWZDb3VudCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxSZW1vdmVFdmVudExpc3RlbmVyLmNhbGwodGhpcywgdHlwZSwgaGFuZGxlckZvclR5cGUuaGFuZGxlciwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaGFuZGxlckZvclR5cGUuaGFuZGxlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBkZWxldGUgaGFuZGxlcnNbdHlwZV07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gbG9uZ2VyIGFueSBjdXN0b20gaGFuZGxlcnMgb2YgYW55IHR5cGUgb24gdGhpcyBlbGVtZW50LCBjbGVhbnVwIGV2ZXJ5dGhpbmcuXG4gICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhoYW5kbGVycykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGVsLl9fc2VudHJ5X2luc3RydW1lbnRhdGlvbl9oYW5kbGVyc19fO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gQWNjZXNzaW5nIGRvbSBwcm9wZXJ0aWVzIGlzIGFsd2F5cyBmcmFnaWxlLlxuICAgICAgICAgICAgLy8gQWxzbyBhbGxvd3MgdXMgdG8gc2tpcCBgYWRkRXZlbnRMaXN0ZW5yc2AgY2FsbHMgd2l0aCBubyBwcm9wZXIgYHRoaXNgIGNvbnRleHQuXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVtb3ZlRXZlbnRMaXN0ZW5lci5jYWxsKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH0pO1xufVxuXG5sZXQgX29sZE9uRXJyb3JIYW5kbGVyOiBPbkVycm9yRXZlbnRIYW5kbGVyID0gbnVsbDtcbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gaW5zdHJ1bWVudEVycm9yKCk6IHZvaWQge1xuICBfb2xkT25FcnJvckhhbmRsZXIgPSBnbG9iYWwub25lcnJvcjtcblxuICBnbG9iYWwub25lcnJvciA9IGZ1bmN0aW9uKG1zZzogYW55LCB1cmw6IGFueSwgbGluZTogYW55LCBjb2x1bW46IGFueSwgZXJyb3I6IGFueSk6IGJvb2xlYW4ge1xuICAgIHRyaWdnZXJIYW5kbGVycygnZXJyb3InLCB7XG4gICAgICBjb2x1bW4sXG4gICAgICBlcnJvcixcbiAgICAgIGxpbmUsXG4gICAgICBtc2csXG4gICAgICB1cmwsXG4gICAgfSk7XG5cbiAgICBpZiAoX29sZE9uRXJyb3JIYW5kbGVyKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICByZXR1cm4gX29sZE9uRXJyb3JIYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xufVxuXG5sZXQgX29sZE9uVW5oYW5kbGVkUmVqZWN0aW9uSGFuZGxlcjogKChlOiBhbnkpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4vKiogSlNEb2MgKi9cbmZ1bmN0aW9uIGluc3RydW1lbnRVbmhhbmRsZWRSZWplY3Rpb24oKTogdm9pZCB7XG4gIF9vbGRPblVuaGFuZGxlZFJlamVjdGlvbkhhbmRsZXIgPSBnbG9iYWwub251bmhhbmRsZWRyZWplY3Rpb247XG5cbiAgZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uID0gZnVuY3Rpb24oZTogYW55KTogYm9vbGVhbiB7XG4gICAgdHJpZ2dlckhhbmRsZXJzKCd1bmhhbmRsZWRyZWplY3Rpb24nLCBlKTtcblxuICAgIGlmIChfb2xkT25VbmhhbmRsZWRSZWplY3Rpb25IYW5kbGVyKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICByZXR1cm4gX29sZE9uVW5oYW5kbGVkUmVqZWN0aW9uSGFuZGxlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xufVxuIiwgIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEV2ZW50LCBNZWNoYW5pc20sIFN0YWNrRnJhbWUgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcblxuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSAnLi9nbG9iYWwnO1xuaW1wb3J0IHsgc25pcExpbmUgfSBmcm9tICcuL3N0cmluZyc7XG5cbi8qKlxuICogRXh0ZW5kZWQgV2luZG93IGludGVyZmFjZSB0aGF0IGFsbG93cyBmb3IgQ3J5cHRvIEFQSSB1c2FnZSBpbiBJRSBicm93c2Vyc1xuICovXG5pbnRlcmZhY2UgTXNDcnlwdG9XaW5kb3cgZXh0ZW5kcyBXaW5kb3cge1xuICBtc0NyeXB0bz86IENyeXB0bztcbn1cblxuLyoqXG4gKiBVVUlENCBnZW5lcmF0b3JcbiAqXG4gKiBAcmV0dXJucyBzdHJpbmcgR2VuZXJhdGVkIFVVSUQ0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXVpZDQoKTogc3RyaW5nIHtcbiAgY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsT2JqZWN0KCkgYXMgTXNDcnlwdG9XaW5kb3c7XG4gIGNvbnN0IGNyeXB0byA9IGdsb2JhbC5jcnlwdG8gfHwgZ2xvYmFsLm1zQ3J5cHRvO1xuXG4gIGlmICghKGNyeXB0byA9PT0gdm9pZCAwKSAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gVXNlIHdpbmRvdy5jcnlwdG8gQVBJIGlmIGF2YWlsYWJsZVxuICAgIGNvbnN0IGFyciA9IG5ldyBVaW50MTZBcnJheSg4KTtcbiAgICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycik7XG5cbiAgICAvLyBzZXQgNCBpbiBieXRlIDdcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgIGFyclszXSA9IChhcnJbM10gJiAweGZmZikgfCAweDQwMDA7XG4gICAgLy8gc2V0IDIgbW9zdCBzaWduaWZpY2FudCBiaXRzIG9mIGJ5dGUgOSB0byAnMTAnXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICBhcnJbNF0gPSAoYXJyWzRdICYgMHgzZmZmKSB8IDB4ODAwMDtcblxuICAgIGNvbnN0IHBhZCA9IChudW06IG51bWJlcik6IHN0cmluZyA9PiB7XG4gICAgICBsZXQgdiA9IG51bS50b1N0cmluZygxNik7XG4gICAgICB3aGlsZSAodi5sZW5ndGggPCA0KSB7XG4gICAgICAgIHYgPSBgMCR7dn1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHY7XG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICBwYWQoYXJyWzBdKSArIHBhZChhcnJbMV0pICsgcGFkKGFyclsyXSkgKyBwYWQoYXJyWzNdKSArIHBhZChhcnJbNF0pICsgcGFkKGFycls1XSkgKyBwYWQoYXJyWzZdKSArIHBhZChhcnJbN10pXG4gICAgKTtcbiAgfVxuICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTAzNC9ob3ctdG8tY3JlYXRlLWEtZ3VpZC11dWlkLWluLWphdmFzY3JpcHQvMjExNzUyMyMyMTE3NTIzXG4gIHJldHVybiAneHh4eHh4eHh4eHh4NHh4eHl4eHh4eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgYyA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICBjb25zdCByID0gKE1hdGgucmFuZG9tKCkgKiAxNikgfCAwO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgY29uc3QgdiA9IGMgPT09ICd4JyA/IHIgOiAociAmIDB4MykgfCAweDg7XG4gICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgc3RyaW5nIGZvcm0gb2YgVVJMIGludG8gYW4gb2JqZWN0XG4gKiAvLyBib3Jyb3dlZCBmcm9tIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I2FwcGVuZGl4LUJcbiAqIC8vIGludGVudGlvbmFsbHkgdXNpbmcgcmVnZXggYW5kIG5vdCA8YS8+IGhyZWYgcGFyc2luZyB0cmljayBiZWNhdXNlIFJlYWN0IE5hdGl2ZSBhbmQgb3RoZXJcbiAqIC8vIGVudmlyb25tZW50cyB3aGVyZSBET00gbWlnaHQgbm90IGJlIGF2YWlsYWJsZVxuICogQHJldHVybnMgcGFyc2VkIFVSTCBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVXJsKFxuICB1cmw6IHN0cmluZyxcbik6IHtcbiAgaG9zdD86IHN0cmluZztcbiAgcGF0aD86IHN0cmluZztcbiAgcHJvdG9jb2w/OiBzdHJpbmc7XG4gIHJlbGF0aXZlPzogc3RyaW5nO1xufSB7XG4gIGlmICghdXJsKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgbWF0Y2ggPSB1cmwubWF0Y2goL14oKFteOi8/I10rKTopPyhcXC9cXC8oW14vPyNdKikpPyhbXj8jXSopKFxcPyhbXiNdKikpPygjKC4qKSk/JC8pO1xuXG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvLyBjb2VyY2UgdG8gdW5kZWZpbmVkIHZhbHVlcyB0byBlbXB0eSBzdHJpbmcgc28gd2UgZG9uJ3QgZ2V0ICd1bmRlZmluZWQnXG4gIGNvbnN0IHF1ZXJ5ID0gbWF0Y2hbNl0gfHwgJyc7XG4gIGNvbnN0IGZyYWdtZW50ID0gbWF0Y2hbOF0gfHwgJyc7XG4gIHJldHVybiB7XG4gICAgaG9zdDogbWF0Y2hbNF0sXG4gICAgcGF0aDogbWF0Y2hbNV0sXG4gICAgcHJvdG9jb2w6IG1hdGNoWzJdLFxuICAgIHJlbGF0aXZlOiBtYXRjaFs1XSArIHF1ZXJ5ICsgZnJhZ21lbnQsIC8vIGV2ZXJ5dGhpbmcgbWludXMgb3JpZ2luXG4gIH07XG59XG5cbi8qKlxuICogRXh0cmFjdHMgZWl0aGVyIG1lc3NhZ2Ugb3IgdHlwZSt2YWx1ZSBmcm9tIGFuIGV2ZW50IHRoYXQgY2FuIGJlIHVzZWQgZm9yIHVzZXItZmFjaW5nIGxvZ3NcbiAqIEByZXR1cm5zIGV2ZW50J3MgZGVzY3JpcHRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEV2ZW50RGVzY3JpcHRpb24oZXZlbnQ6IEV2ZW50KTogc3RyaW5nIHtcbiAgaWYgKGV2ZW50Lm1lc3NhZ2UpIHtcbiAgICByZXR1cm4gZXZlbnQubWVzc2FnZTtcbiAgfVxuICBpZiAoZXZlbnQuZXhjZXB0aW9uICYmIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMgJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXSkge1xuICAgIGNvbnN0IGV4Y2VwdGlvbiA9IGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF07XG5cbiAgICBpZiAoZXhjZXB0aW9uLnR5cGUgJiYgZXhjZXB0aW9uLnZhbHVlKSB7XG4gICAgICByZXR1cm4gYCR7ZXhjZXB0aW9uLnR5cGV9OiAke2V4Y2VwdGlvbi52YWx1ZX1gO1xuICAgIH1cbiAgICByZXR1cm4gZXhjZXB0aW9uLnR5cGUgfHwgZXhjZXB0aW9uLnZhbHVlIHx8IGV2ZW50LmV2ZW50X2lkIHx8ICc8dW5rbm93bj4nO1xuICB9XG4gIHJldHVybiBldmVudC5ldmVudF9pZCB8fCAnPHVua25vd24+Jztcbn1cblxuLyoqXG4gKiBBZGRzIGV4Y2VwdGlvbiB2YWx1ZXMsIHR5cGUgYW5kIHZhbHVlIHRvIGFuIHN5bnRoZXRpYyBFeGNlcHRpb24uXG4gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSBvZiB0aGUgZXhjZXB0aW9uLlxuICogQHBhcmFtIHR5cGUgVHlwZSBvZiB0aGUgZXhjZXB0aW9uLlxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRXhjZXB0aW9uVHlwZVZhbHVlKGV2ZW50OiBFdmVudCwgdmFsdWU/OiBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgZXZlbnQuZXhjZXB0aW9uID0gZXZlbnQuZXhjZXB0aW9uIHx8IHt9O1xuICBldmVudC5leGNlcHRpb24udmFsdWVzID0gZXZlbnQuZXhjZXB0aW9uLnZhbHVlcyB8fCBbXTtcbiAgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXSA9IGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0gfHwge307XG4gIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0udmFsdWUgPSBldmVudC5leGNlcHRpb24udmFsdWVzWzBdLnZhbHVlIHx8IHZhbHVlIHx8ICcnO1xuICBldmVudC5leGNlcHRpb24udmFsdWVzWzBdLnR5cGUgPSBldmVudC5leGNlcHRpb24udmFsdWVzWzBdLnR5cGUgfHwgdHlwZSB8fCAnRXJyb3InO1xufVxuXG4vKipcbiAqIEFkZHMgZXhjZXB0aW9uIG1lY2hhbmlzbSBkYXRhIHRvIGEgZ2l2ZW4gZXZlbnQuIFVzZXMgZGVmYXVsdHMgaWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgbm90IHBhc3NlZC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSBuZXdNZWNoYW5pc20gTWVjaGFuaXNtIGRhdGEgdG8gYWRkIHRvIHRoZSBldmVudC5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEV4Y2VwdGlvbk1lY2hhbmlzbShldmVudDogRXZlbnQsIG5ld01lY2hhbmlzbT86IFBhcnRpYWw8TWVjaGFuaXNtPik6IHZvaWQge1xuICBpZiAoIWV2ZW50LmV4Y2VwdGlvbiB8fCAhZXZlbnQuZXhjZXB0aW9uLnZhbHVlcykge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBleGNlcHRpb25WYWx1ZTAgPSBldmVudC5leGNlcHRpb24udmFsdWVzWzBdO1xuXG4gIGNvbnN0IGRlZmF1bHRNZWNoYW5pc20gPSB7IHR5cGU6ICdnZW5lcmljJywgaGFuZGxlZDogdHJ1ZSB9O1xuICBjb25zdCBjdXJyZW50TWVjaGFuaXNtID0gZXhjZXB0aW9uVmFsdWUwLm1lY2hhbmlzbTtcbiAgZXhjZXB0aW9uVmFsdWUwLm1lY2hhbmlzbSA9IHsgLi4uZGVmYXVsdE1lY2hhbmlzbSwgLi4uY3VycmVudE1lY2hhbmlzbSwgLi4ubmV3TWVjaGFuaXNtIH07XG5cbiAgaWYgKG5ld01lY2hhbmlzbSAmJiAnZGF0YScgaW4gbmV3TWVjaGFuaXNtKSB7XG4gICAgY29uc3QgbWVyZ2VkRGF0YSA9IHsgLi4uY3VycmVudE1lY2hhbmlzbT8uZGF0YSwgLi4ubmV3TWVjaGFuaXNtLmRhdGEgfTtcbiAgICBleGNlcHRpb25WYWx1ZTAubWVjaGFuaXNtLmRhdGEgPSBtZXJnZWREYXRhO1xuICB9XG59XG5cbi8vIGh0dHBzOi8vc2VtdmVyLm9yZy8jaXMtdGhlcmUtYS1zdWdnZXN0ZWQtcmVndWxhci1leHByZXNzaW9uLXJlZ2V4LXRvLWNoZWNrLWEtc2VtdmVyLXN0cmluZ1xuY29uc3QgU0VNVkVSX1JFR0VYUCA9IC9eKDB8WzEtOV1cXGQqKVxcLigwfFsxLTldXFxkKilcXC4oMHxbMS05XVxcZCopKD86LSgoPzowfFsxLTldXFxkKnxcXGQqW2EtekEtWi1dWzAtOWEtekEtWi1dKikoPzpcXC4oPzowfFsxLTldXFxkKnxcXGQqW2EtekEtWi1dWzAtOWEtekEtWi1dKikpKikpPyg/OlxcKyhbMC05YS16QS1aLV0rKD86XFwuWzAtOWEtekEtWi1dKykqKSk/JC87XG5cbi8qKlxuICogUmVwcmVzZW50cyBTZW1hbnRpYyBWZXJzaW9uaW5nIG9iamVjdFxuICovXG5pbnRlcmZhY2UgU2VtVmVyIHtcbiAgbWFqb3I/OiBudW1iZXI7XG4gIG1pbm9yPzogbnVtYmVyO1xuICBwYXRjaD86IG51bWJlcjtcbiAgcHJlcmVsZWFzZT86IHN0cmluZztcbiAgYnVpbGRtZXRhZGF0YT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJzZXMgaW5wdXQgaW50byBhIFNlbVZlciBpbnRlcmZhY2VcbiAqIEBwYXJhbSBpbnB1dCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBzZW12ZXIgdmVyc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTZW12ZXIoaW5wdXQ6IHN0cmluZyk6IFNlbVZlciB7XG4gIGNvbnN0IG1hdGNoID0gaW5wdXQubWF0Y2goU0VNVkVSX1JFR0VYUCkgfHwgW107XG4gIGNvbnN0IG1ham9yID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTtcbiAgY29uc3QgbWlub3IgPSBwYXJzZUludChtYXRjaFsyXSwgMTApO1xuICBjb25zdCBwYXRjaCA9IHBhcnNlSW50KG1hdGNoWzNdLCAxMCk7XG4gIHJldHVybiB7XG4gICAgYnVpbGRtZXRhZGF0YTogbWF0Y2hbNV0sXG4gICAgbWFqb3I6IGlzTmFOKG1ham9yKSA/IHVuZGVmaW5lZCA6IG1ham9yLFxuICAgIG1pbm9yOiBpc05hTihtaW5vcikgPyB1bmRlZmluZWQgOiBtaW5vcixcbiAgICBwYXRjaDogaXNOYU4ocGF0Y2gpID8gdW5kZWZpbmVkIDogcGF0Y2gsXG4gICAgcHJlcmVsZWFzZTogbWF0Y2hbNF0sXG4gIH07XG59XG5cbmNvbnN0IGRlZmF1bHRSZXRyeUFmdGVyID0gNjAgKiAxMDAwOyAvLyA2MCBzZWNvbmRzXG5cbi8qKlxuICogRXh0cmFjdHMgUmV0cnktQWZ0ZXIgdmFsdWUgZnJvbSB0aGUgcmVxdWVzdCBoZWFkZXIgb3IgcmV0dXJucyBkZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0gbm93IGN1cnJlbnQgdW5peCB0aW1lc3RhbXBcbiAqIEBwYXJhbSBoZWFkZXIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mICdSZXRyeS1BZnRlcicgaGVhZGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVJldHJ5QWZ0ZXJIZWFkZXIobm93OiBudW1iZXIsIGhlYWRlcj86IHN0cmluZyB8IG51bWJlciB8IG51bGwpOiBudW1iZXIge1xuICBpZiAoIWhlYWRlcikge1xuICAgIHJldHVybiBkZWZhdWx0UmV0cnlBZnRlcjtcbiAgfVxuXG4gIGNvbnN0IGhlYWRlckRlbGF5ID0gcGFyc2VJbnQoYCR7aGVhZGVyfWAsIDEwKTtcbiAgaWYgKCFpc05hTihoZWFkZXJEZWxheSkpIHtcbiAgICByZXR1cm4gaGVhZGVyRGVsYXkgKiAxMDAwO1xuICB9XG5cbiAgY29uc3QgaGVhZGVyRGF0ZSA9IERhdGUucGFyc2UoYCR7aGVhZGVyfWApO1xuICBpZiAoIWlzTmFOKGhlYWRlckRhdGUpKSB7XG4gICAgcmV0dXJuIGhlYWRlckRhdGUgLSBub3c7XG4gIH1cblxuICByZXR1cm4gZGVmYXVsdFJldHJ5QWZ0ZXI7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBhZGRzIGNvbnRleHQgKHByZS9wb3N0L2xpbmUpIGxpbmVzIHRvIHRoZSBwcm92aWRlZCBmcmFtZVxuICpcbiAqIEBwYXJhbSBsaW5lcyBzdHJpbmdbXSBjb250YWluaW5nIGFsbCBsaW5lc1xuICogQHBhcmFtIGZyYW1lIFN0YWNrRnJhbWUgdGhhdCB3aWxsIGJlIG11dGF0ZWRcbiAqIEBwYXJhbSBsaW5lc09mQ29udGV4dCBudW1iZXIgb2YgY29udGV4dCBsaW5lcyB3ZSB3YW50IHRvIGFkZCBwcmUvcG9zdFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkQ29udGV4dFRvRnJhbWUobGluZXM6IHN0cmluZ1tdLCBmcmFtZTogU3RhY2tGcmFtZSwgbGluZXNPZkNvbnRleHQ6IG51bWJlciA9IDUpOiB2b2lkIHtcbiAgY29uc3QgbGluZW5vID0gZnJhbWUubGluZW5vIHx8IDA7XG4gIGNvbnN0IG1heExpbmVzID0gbGluZXMubGVuZ3RoO1xuICBjb25zdCBzb3VyY2VMaW5lID0gTWF0aC5tYXgoTWF0aC5taW4obWF4TGluZXMsIGxpbmVubyAtIDEpLCAwKTtcblxuICBmcmFtZS5wcmVfY29udGV4dCA9IGxpbmVzXG4gICAgLnNsaWNlKE1hdGgubWF4KDAsIHNvdXJjZUxpbmUgLSBsaW5lc09mQ29udGV4dCksIHNvdXJjZUxpbmUpXG4gICAgLm1hcCgobGluZTogc3RyaW5nKSA9PiBzbmlwTGluZShsaW5lLCAwKSk7XG5cbiAgZnJhbWUuY29udGV4dF9saW5lID0gc25pcExpbmUobGluZXNbTWF0aC5taW4obWF4TGluZXMgLSAxLCBzb3VyY2VMaW5lKV0sIGZyYW1lLmNvbG5vIHx8IDApO1xuXG4gIGZyYW1lLnBvc3RfY29udGV4dCA9IGxpbmVzXG4gICAgLnNsaWNlKE1hdGgubWluKHNvdXJjZUxpbmUgKyAxLCBtYXhMaW5lcyksIHNvdXJjZUxpbmUgKyAxICsgbGluZXNPZkNvbnRleHQpXG4gICAgLm1hcCgobGluZTogc3RyaW5nKSA9PiBzbmlwTGluZShsaW5lLCAwKSk7XG59XG5cbi8qKlxuICogU3RyaXAgdGhlIHF1ZXJ5IHN0cmluZyBhbmQgZnJhZ21lbnQgb2ZmIG9mIGEgZ2l2ZW4gVVJMIG9yIHBhdGggKGlmIHByZXNlbnQpXG4gKlxuICogQHBhcmFtIHVybFBhdGggRnVsbCBVUkwgb3IgcGF0aCwgaW5jbHVkaW5nIHBvc3NpYmxlIHF1ZXJ5IHN0cmluZyBhbmQvb3IgZnJhZ21lbnRcbiAqIEByZXR1cm5zIFVSTCBvciBwYXRoIHdpdGhvdXQgcXVlcnkgc3RyaW5nIG9yIGZyYWdtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcFVybFF1ZXJ5QW5kRnJhZ21lbnQodXJsUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gIHJldHVybiB1cmxQYXRoLnNwbGl0KC9bXFw/I10vLCAxKVswXTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBvciBub3Qgd2UndmUgYWxyZWFkeSBjYXB0dXJlZCB0aGUgZ2l2ZW4gZXhjZXB0aW9uIChub3RlOiBub3QgYW4gaWRlbnRpY2FsIGV4Y2VwdGlvbiAtIHRoZSB2ZXJ5IG9iamVjdFxuICogaW4gcXVlc3Rpb24pLCBhbmQgbWFya3MgaXQgY2FwdHVyZWQgaWYgbm90LlxuICpcbiAqIFRoaXMgaXMgdXNlZnVsIGJlY2F1c2UgaXQncyBwb3NzaWJsZSBmb3IgYW4gZXJyb3IgdG8gZ2V0IGNhcHR1cmVkIGJ5IG1vcmUgdGhhbiBvbmUgbWVjaGFuaXNtLiBBZnRlciB3ZSBpbnRlcmNlcHQgYW5kXG4gKiByZWNvcmQgYW4gZXJyb3IsIHdlIHJldGhyb3cgaXQgKGFzc3VtaW5nIHdlJ3ZlIGludGVyY2VwdGVkIGl0IGJlZm9yZSBpdCdzIHJlYWNoZWQgdGhlIHRvcC1sZXZlbCBnbG9iYWwgaGFuZGxlcnMpLCBzb1xuICogdGhhdCB3ZSBkb24ndCBpbnRlcmZlcmUgd2l0aCB3aGF0ZXZlciBlZmZlY3RzIHRoZSBlcnJvciBtaWdodCBoYXZlIGhhZCB3ZXJlIHRoZSBTREsgbm90IHRoZXJlLiBBdCB0aGF0IHBvaW50LCBiZWNhdXNlXG4gKiB0aGUgZXJyb3IgaGFzIGJlZW4gcmV0aHJvd24sIGl0J3MgcG9zc2libGUgZm9yIGl0IHRvIGJ1YmJsZSB1cCB0byBzb21lIG90aGVyIGNvZGUgd2UndmUgaW5zdHJ1bWVudGVkLiBJZiBpdCdzIG5vdFxuICogY2F1Z2h0IGFmdGVyIHRoYXQsIGl0IHdpbGwgYnViYmxlIGFsbCB0aGUgd2F5IHVwIHRvIHRoZSBnbG9iYWwgaGFuZGxlcnMgKHdoaWNoIG9mIGNvdXJzZSB3ZSBhbHNvIGluc3RydW1lbnQpLiBUaGlzXG4gKiBmdW5jdGlvbiBoZWxwcyB1cyBlbnN1cmUgdGhhdCBldmVuIGlmIHdlIGVuY291bnRlciB0aGUgc2FtZSBlcnJvciBtb3JlIHRoYW4gb25jZSwgd2Ugb25seSByZWNvcmQgaXQgdGhlIGZpcnN0IHRpbWUgd2VcbiAqIHNlZSBpdC5cbiAqXG4gKiBOb3RlOiBJdCB3aWxsIGlnbm9yZSBwcmltaXRpdmVzIChhbHdheXMgcmV0dXJuIGBmYWxzZWAgYW5kIG5vdCBtYXJrIHRoZW0gYXMgc2VlbiksIGFzIHByb3BlcnRpZXMgY2FuJ3QgYmUgc2V0IG9uXG4gKiB0aGVtLiB7QGxpbms6IE9iamVjdC5vYmplY3RpZnl9IGNhbiBiZSB1c2VkIG9uIGV4Y2VwdGlvbnMgdG8gY29udmVydCBhbnkgdGhhdCBhcmUgcHJpbWl0aXZlcyBpbnRvIHRoZWlyIGVxdWl2YWxlbnRcbiAqIG9iamVjdCB3cmFwcGVyIGZvcm1zIHNvIHRoYXQgdGhpcyBjaGVjayB3aWxsIGFsd2F5cyB3b3JrLiBIb3dldmVyLCBiZWNhdXNlIHdlIG5lZWQgdG8gZmxhZyB0aGUgZXhhY3Qgb2JqZWN0IHdoaWNoXG4gKiB3aWxsIGdldCByZXRocm93biwgYW5kIGJlY2F1c2UgdGhhdCByZXRocm93aW5nIGhhcHBlbnMgb3V0c2lkZSBvZiB0aGUgZXZlbnQgcHJvY2Vzc2luZyBwaXBlbGluZSwgdGhlIG9iamVjdGlmaWNhdGlvblxuICogbXVzdCBiZSBkb25lIGJlZm9yZSB0aGUgZXhjZXB0aW9uIGNhcHR1cmVkLlxuICpcbiAqIEBwYXJhbSBBIHRocm93biBleGNlcHRpb24gdG8gY2hlY2sgb3IgZmxhZyBhcyBoYXZpbmcgYmVlbiBzZWVuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGV4Y2VwdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGNhcHR1cmVkLCBgZmFsc2VgIGlmIG5vdCAod2l0aCB0aGUgc2lkZSBlZmZlY3Qgb2YgbWFya2luZyBpdCBzZWVuKVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tPclNldEFscmVhZHlDYXVnaHQoZXhjZXB0aW9uOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgaWYgKChleGNlcHRpb24gYXMgYW55KT8uX19zZW50cnlfY2FwdHVyZWRfXykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBzZXQgaXQgdGhpcyB3YXkgcmF0aGVyIHRoYW4gYnkgYXNzaWdubWVudCBzbyB0aGF0IGl0J3Mgbm90IGVubnVtZXJhYmxlIGFuZCB0aGVyZWZvcmUgaXNuJ3QgcmVjb3JkZWQgYnkgdGhlXG4gICAgLy8gYEV4dHJhRXJyb3JEYXRhYCBpbnRlZ3JhdGlvblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleGNlcHRpb24sICdfX3NlbnRyeV9jYXB0dXJlZF9fJywge1xuICAgICAgdmFsdWU6IHRydWUsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIGBleGNlcHRpb25gIGlzIGEgcHJpbWl0aXZlLCBzbyB3ZSBjYW4ndCBtYXJrIGl0IHNlZW5cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbiIsICIvLyBTbGlnaHRseSBtb2RpZmllZCAobm8gSUU4IHN1cHBvcnQsIEVTNikgYW5kIHRyYW5zY3JpYmVkIHRvIFR5cGVTY3JpcHRcbi8vIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9jYWx2aW5tZXRjYWxmL3JvbGx1cC1wbHVnaW4tbm9kZS1idWlsdGlucy9tYXN0ZXIvc3JjL2VzNi9wYXRoLmpzXG5cbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHM6IHN0cmluZ1tdLCBhbGxvd0Fib3ZlUm9vdD86IGJvb2xlYW4pOiBzdHJpbmdbXSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIGxldCB1cCA9IDA7XG4gIGZvciAobGV0IGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGxhc3QgPSBwYXJ0c1tpXTtcbiAgICBpZiAobGFzdCA9PT0gJy4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGx1c3BsdXNcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBsdXNwbHVzXG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBsdXNwbHVzXG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG5jb25zdCBzcGxpdFBhdGhSZSA9IC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXi9dKz98KShcXC5bXi4vXSp8KSkoPzpbL10qKSQvO1xuLyoqIEpTRG9jICovXG5mdW5jdGlvbiBzcGxpdFBhdGgoZmlsZW5hbWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcGFydHMgPSBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKTtcbiAgcmV0dXJuIHBhcnRzID8gcGFydHMuc2xpY2UoMSkgOiBbXTtcbn1cblxuLy8gcGF0aC5yZXNvbHZlKFtmcm9tIC4uLl0sIHRvKVxuLy8gcG9zaXggdmVyc2lvblxuLyoqIEpTRG9jICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZSguLi5hcmdzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGxldCByZXNvbHZlZFBhdGggPSAnJztcbiAgbGV0IHJlc29sdmVkQWJzb2x1dGUgPSBmYWxzZTtcblxuICBmb3IgKGxldCBpID0gYXJncy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICBjb25zdCBwYXRoID0gaSA+PSAwID8gYXJnc1tpXSA6ICcvJztcblxuICAgIC8vIFNraXAgZW1wdHkgZW50cmllc1xuICAgIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gYCR7cGF0aH0vJHtyZXNvbHZlZFBhdGh9YDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KFxuICAgIHJlc29sdmVkUGF0aC5zcGxpdCgnLycpLmZpbHRlcihwID0+ICEhcCksXG4gICAgIXJlc29sdmVkQWJzb2x1dGUsXG4gICkuam9pbignLycpO1xuXG4gIHJldHVybiAocmVzb2x2ZWRBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHJlc29sdmVkUGF0aCB8fCAnLic7XG59XG5cbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gdHJpbShhcnI6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICBsZXQgc3RhcnQgPSAwO1xuICBmb3IgKDsgc3RhcnQgPCBhcnIubGVuZ3RoOyBzdGFydCsrKSB7XG4gICAgaWYgKGFycltzdGFydF0gIT09ICcnKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBsZXQgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICBpZiAoYXJyW2VuZF0gIT09ICcnKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhcnQgPiBlbmQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbn1cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbi8qKiBKU0RvYyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbGF0aXZlKGZyb206IHN0cmluZywgdG86IHN0cmluZyk6IHN0cmluZyB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG4gIGZyb20gPSByZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSByZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cblxuICBjb25zdCBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIGNvbnN0IHRvUGFydHMgPSB0cmltKHRvLnNwbGl0KCcvJykpO1xuXG4gIGNvbnN0IGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgbGV0IHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBsZXQgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG4vKiogSlNEb2MgKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGlzUGF0aEFic29sdXRlID0gaXNBYnNvbHV0ZShwYXRoKTtcbiAgY29uc3QgdHJhaWxpbmdTbGFzaCA9IHBhdGguc3Vic3RyKC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBsZXQgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVBcnJheShcbiAgICBwYXRoLnNwbGl0KCcvJykuZmlsdGVyKHAgPT4gISFwKSxcbiAgICAhaXNQYXRoQWJzb2x1dGUsXG4gICkuam9pbignLycpO1xuXG4gIGlmICghbm9ybWFsaXplZFBhdGggJiYgIWlzUGF0aEFic29sdXRlKSB7XG4gICAgbm9ybWFsaXplZFBhdGggPSAnLic7XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWRQYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBub3JtYWxpemVkUGF0aCArPSAnLyc7XG4gIH1cblxuICByZXR1cm4gKGlzUGF0aEFic29sdXRlID8gJy8nIDogJycpICsgbm9ybWFsaXplZFBhdGg7XG59XG5cbi8vIHBvc2l4IHZlcnNpb25cbi8qKiBKU0RvYyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWJzb2x1dGUocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufVxuXG4vLyBwb3NpeCB2ZXJzaW9uXG4vKiogSlNEb2MgKi9cbmV4cG9ydCBmdW5jdGlvbiBqb2luKC4uLmFyZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZVBhdGgoYXJncy5qb2luKCcvJykpO1xufVxuXG4vKiogSlNEb2MgKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXJuYW1lKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKTtcbiAgY29uc3Qgcm9vdCA9IHJlc3VsdFswXTtcbiAgbGV0IGRpciA9IHJlc3VsdFsxXTtcblxuICBpZiAoIXJvb3QgJiYgIWRpcikge1xuICAgIC8vIE5vIGRpcm5hbWUgd2hhdHNvZXZlclxuICAgIHJldHVybiAnLic7XG4gIH1cblxuICBpZiAoZGlyKSB7XG4gICAgLy8gSXQgaGFzIGEgZGlybmFtZSwgc3RyaXAgdHJhaWxpbmcgc2xhc2hcbiAgICBkaXIgPSBkaXIuc3Vic3RyKDAsIGRpci5sZW5ndGggLSAxKTtcbiAgfVxuXG4gIHJldHVybiByb290ICsgZGlyO1xufVxuXG4vKiogSlNEb2MgKi9cbmV4cG9ydCBmdW5jdGlvbiBiYXNlbmFtZShwYXRoOiBzdHJpbmcsIGV4dD86IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBmID0gc3BsaXRQYXRoKHBhdGgpWzJdO1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKGV4dC5sZW5ndGggKiAtMSkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufVxuIiwgIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1mdW5jdGlvbi1yZXR1cm4tdHlwZSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L3R5cGVkZWYgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IGlzVGhlbmFibGUgfSBmcm9tICcuL2lzJztcblxuLyoqIFN5bmNQcm9taXNlIGludGVybmFsIHN0YXRlcyAqL1xuY29uc3QgZW51bSBTdGF0ZXMge1xuICAvKiogUGVuZGluZyAqL1xuICBQRU5ESU5HID0gJ1BFTkRJTkcnLFxuICAvKiogUmVzb2x2ZWQgLyBPSyAqL1xuICBSRVNPTFZFRCA9ICdSRVNPTFZFRCcsXG4gIC8qKiBSZWplY3RlZCAvIEVycm9yICovXG4gIFJFSkVDVEVEID0gJ1JFSkVDVEVEJyxcbn1cblxuLyoqXG4gKiBUaGVuYWJsZSBjbGFzcyB0aGF0IGJlaGF2ZXMgbGlrZSBhIFByb21pc2UgYW5kIGZvbGxvd3MgaXQncyBpbnRlcmZhY2VcbiAqIGJ1dCBpcyBub3QgYXN5bmMgaW50ZXJuYWxseVxuICovXG5jbGFzcyBTeW5jUHJvbWlzZTxUPiBpbXBsZW1lbnRzIFByb21pc2VMaWtlPFQ+IHtcbiAgcHJpdmF0ZSBfc3RhdGU6IFN0YXRlcyA9IFN0YXRlcy5QRU5ESU5HO1xuICBwcml2YXRlIF9oYW5kbGVyczogQXJyYXk8e1xuICAgIGRvbmU6IGJvb2xlYW47XG4gICAgb25mdWxmaWxsZWQ/OiAoKHZhbHVlOiBUKSA9PiBUIHwgUHJvbWlzZUxpa2U8VD4pIHwgbnVsbDtcbiAgICBvbnJlamVjdGVkPzogKChyZWFzb246IGFueSkgPT4gYW55KSB8IG51bGw7XG4gIH0+ID0gW107XG4gIHByaXZhdGUgX3ZhbHVlOiBhbnk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIGV4ZWN1dG9yOiAocmVzb2x2ZTogKHZhbHVlPzogVCB8IFByb21pc2VMaWtlPFQ+IHwgbnVsbCkgPT4gdm9pZCwgcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkKSA9PiB2b2lkLFxuICApIHtcbiAgICB0cnkge1xuICAgICAgZXhlY3V0b3IodGhpcy5fcmVzb2x2ZSwgdGhpcy5fcmVqZWN0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9yZWplY3QoZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHB1YmxpYyBzdGF0aWMgcmVzb2x2ZTxUPih2YWx1ZTogVCB8IFByb21pc2VMaWtlPFQ+KTogUHJvbWlzZUxpa2U8VD4ge1xuICAgIHJldHVybiBuZXcgU3luY1Byb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwdWJsaWMgc3RhdGljIHJlamVjdDxUID0gbmV2ZXI+KHJlYXNvbj86IGFueSk6IFByb21pc2VMaWtlPFQ+IHtcbiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgIHJlamVjdChyZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHB1YmxpYyBzdGF0aWMgYWxsPFUgPSBhbnk+KGNvbGxlY3Rpb246IEFycmF5PFUgfCBQcm9taXNlTGlrZTxVPj4pOiBQcm9taXNlTGlrZTxVW10+IHtcbiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlPFVbXT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbGxlY3Rpb24pKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKGBQcm9taXNlLmFsbCByZXF1aXJlcyBhbiBhcnJheSBhcyBpbnB1dC5gKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbGxlY3Rpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBjb3VudGVyID0gY29sbGVjdGlvbi5sZW5ndGg7XG4gICAgICBjb25zdCByZXNvbHZlZENvbGxlY3Rpb246IFVbXSA9IFtdO1xuXG4gICAgICBjb2xsZWN0aW9uLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgIHZvaWQgU3luY1Byb21pc2UucmVzb2x2ZShpdGVtKVxuICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcbiAgICAgICAgICAgIHJlc29sdmVkQ29sbGVjdGlvbltpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGNvdW50ZXIgLT0gMTtcblxuICAgICAgICAgICAgaWYgKGNvdW50ZXIgIT09IDApIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXNvbHZlZENvbGxlY3Rpb24pO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnRoZW4obnVsbCwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHB1YmxpYyB0aGVuPFRSZXN1bHQxID0gVCwgVFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgb25mdWxmaWxsZWQ/OiAoKHZhbHVlOiBUKSA9PiBUUmVzdWx0MSB8IFByb21pc2VMaWtlPFRSZXN1bHQxPikgfCBudWxsLFxuICAgIG9ucmVqZWN0ZWQ/OiAoKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0MiB8IFByb21pc2VMaWtlPFRSZXN1bHQyPikgfCBudWxsLFxuICApOiBQcm9taXNlTGlrZTxUUmVzdWx0MSB8IFRSZXN1bHQyPiB7XG4gICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9hdHRhY2hIYW5kbGVyKHtcbiAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgIG9uZnVsZmlsbGVkOiByZXN1bHQgPT4ge1xuICAgICAgICAgIGlmICghb25mdWxmaWxsZWQpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IFx1MDBBRlxcXyhcdTMwQzQpXy9cdTAwQUZcbiAgICAgICAgICAgIC8vIFRPRE86IEZJWE1FXG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCBhcyBhbnkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzb2x2ZShvbmZ1bGZpbGxlZChyZXN1bHQpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvbnJlamVjdGVkOiByZWFzb24gPT4ge1xuICAgICAgICAgIGlmICghb25yZWplY3RlZCkge1xuICAgICAgICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXNvbHZlKG9ucmVqZWN0ZWQocmVhc29uKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHB1YmxpYyBjYXRjaDxUUmVzdWx0ID0gbmV2ZXI+KFxuICAgIG9ucmVqZWN0ZWQ/OiAoKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0IHwgUHJvbWlzZUxpa2U8VFJlc3VsdD4pIHwgbnVsbCxcbiAgKTogUHJvbWlzZUxpa2U8VCB8IFRSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy50aGVuKHZhbCA9PiB2YWwsIG9ucmVqZWN0ZWQpO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHB1YmxpYyBmaW5hbGx5PFRSZXN1bHQ+KG9uZmluYWxseT86ICgoKSA9PiB2b2lkKSB8IG51bGwpOiBQcm9taXNlTGlrZTxUUmVzdWx0PiB7XG4gICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZTxUUmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgdmFsOiBUUmVzdWx0IHwgYW55O1xuICAgICAgbGV0IGlzUmVqZWN0ZWQ6IGJvb2xlYW47XG5cbiAgICAgIHJldHVybiB0aGlzLnRoZW4oXG4gICAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgICBpc1JlamVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgdmFsID0gdmFsdWU7XG4gICAgICAgICAgaWYgKG9uZmluYWxseSkge1xuICAgICAgICAgICAgb25maW5hbGx5KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZWFzb24gPT4ge1xuICAgICAgICAgIGlzUmVqZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbCA9IHJlYXNvbjtcbiAgICAgICAgICBpZiAob25maW5hbGx5KSB7XG4gICAgICAgICAgICBvbmZpbmFsbHkoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAoaXNSZWplY3RlZCkge1xuICAgICAgICAgIHJlamVjdCh2YWwpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc29sdmUoKHZhbCBhcyB1bmtub3duKSBhcyBhbnkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdbb2JqZWN0IFN5bmNQcm9taXNlXSc7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfcmVzb2x2ZSA9ICh2YWx1ZT86IFQgfCBQcm9taXNlTGlrZTxUPiB8IG51bGwpID0+IHtcbiAgICB0aGlzLl9zZXRSZXN1bHQoU3RhdGVzLlJFU09MVkVELCB2YWx1ZSk7XG4gIH07XG5cbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlamVjdCA9IChyZWFzb24/OiBhbnkpID0+IHtcbiAgICB0aGlzLl9zZXRSZXN1bHQoU3RhdGVzLlJFSkVDVEVELCByZWFzb24pO1xuICB9O1xuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRSZXN1bHQgPSAoc3RhdGU6IFN0YXRlcywgdmFsdWU/OiBUIHwgUHJvbWlzZUxpa2U8VD4gfCBhbnkpID0+IHtcbiAgICBpZiAodGhpcy5fc3RhdGUgIT09IFN0YXRlcy5QRU5ESU5HKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICB2b2lkICh2YWx1ZSBhcyBQcm9taXNlTGlrZTxUPikudGhlbih0aGlzLl9yZXNvbHZlLCB0aGlzLl9yZWplY3QpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlID0gc3RhdGU7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcblxuICAgIHRoaXMuX2V4ZWN1dGVIYW5kbGVycygpO1xuICB9O1xuXG4gIC8vIFRPRE86IEZJWE1FXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdHRhY2hIYW5kbGVyID0gKGhhbmRsZXI6IHtcbiAgICAvKiogSlNEb2MgKi9cbiAgICBkb25lOiBib29sZWFuO1xuICAgIC8qKiBKU0RvYyAqL1xuICAgIG9uZnVsZmlsbGVkPyh2YWx1ZTogVCk6IGFueTtcbiAgICAvKiogSlNEb2MgKi9cbiAgICBvbnJlamVjdGVkPyhyZWFzb246IGFueSk6IGFueTtcbiAgfSkgPT4ge1xuICAgIHRoaXMuX2hhbmRsZXJzID0gdGhpcy5faGFuZGxlcnMuY29uY2F0KGhhbmRsZXIpO1xuICAgIHRoaXMuX2V4ZWN1dGVIYW5kbGVycygpO1xuICB9O1xuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9leGVjdXRlSGFuZGxlcnMgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSBTdGF0ZXMuUEVORElORykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNhY2hlZEhhbmRsZXJzID0gdGhpcy5faGFuZGxlcnMuc2xpY2UoKTtcbiAgICB0aGlzLl9oYW5kbGVycyA9IFtdO1xuXG4gICAgY2FjaGVkSGFuZGxlcnMuZm9yRWFjaChoYW5kbGVyID0+IHtcbiAgICAgIGlmIChoYW5kbGVyLmRvbmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fc3RhdGUgPT09IFN0YXRlcy5SRVNPTFZFRCkge1xuICAgICAgICBpZiAoaGFuZGxlci5vbmZ1bGZpbGxlZCkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICAgICAgICBoYW5kbGVyLm9uZnVsZmlsbGVkKCh0aGlzLl92YWx1ZSBhcyB1bmtub3duKSBhcyBhbnkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gU3RhdGVzLlJFSkVDVEVEKSB7XG4gICAgICAgIGlmIChoYW5kbGVyLm9ucmVqZWN0ZWQpIHtcbiAgICAgICAgICBoYW5kbGVyLm9ucmVqZWN0ZWQodGhpcy5fdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGhhbmRsZXIuZG9uZSA9IHRydWU7XG4gICAgfSk7XG4gIH07XG59XG5cbmV4cG9ydCB7IFN5bmNQcm9taXNlIH07XG4iLCAiaW1wb3J0IHsgU2VudHJ5RXJyb3IgfSBmcm9tICcuL2Vycm9yJztcbmltcG9ydCB7IFN5bmNQcm9taXNlIH0gZnJvbSAnLi9zeW5jcHJvbWlzZSc7XG5cbi8qKiBBIHNpbXBsZSBxdWV1ZSB0aGF0IGhvbGRzIHByb21pc2VzLiAqL1xuZXhwb3J0IGNsYXNzIFByb21pc2VCdWZmZXI8VD4ge1xuICAvKiogSW50ZXJuYWwgc2V0IG9mIHF1ZXVlZCBQcm9taXNlcyAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9idWZmZXI6IEFycmF5PFByb21pc2VMaWtlPFQ+PiA9IFtdO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2xpbWl0PzogbnVtYmVyKSB7fVxuXG4gIC8qKlxuICAgKiBTYXlzIGlmIHRoZSBidWZmZXIgaXMgcmVhZHkgdG8gdGFrZSBtb3JlIHJlcXVlc3RzXG4gICAqL1xuICBwdWJsaWMgaXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbGltaXQgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmxlbmd0aCgpIDwgdGhpcy5fbGltaXQ7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgcHJvbWlzZSAocmVwcmVzZW50aW5nIGFuIGluLWZsaWdodCBhY3Rpb24pIHRvIHRoZSBxdWV1ZSwgYW5kIHNldCBpdCB0byByZW1vdmUgaXRzZWxmIG9uIGZ1bGZpbGxtZW50LlxuICAgKlxuICAgKiBAcGFyYW0gdGFza1Byb2R1Y2VyIEEgZnVuY3Rpb24gcHJvZHVjaW5nIGFueSBQcm9taXNlTGlrZTxUPjsgSW4gcHJldmlvdXMgdmVyc2lvbnMgdGhpcyB1c2VkIHRvIGJlIGB0YXNrOlxuICAgKiAgICAgICAgUHJvbWlzZUxpa2U8VD5gLCBidXQgdW5kZXIgdGhhdCBtb2RlbCwgUHJvbWlzZXMgd2VyZSBpbnN0YW50bHkgY3JlYXRlZCBvbiB0aGUgY2FsbC1zaXRlIGFuZCB0aGVpciBleGVjdXRvclxuICAgKiAgICAgICAgZnVuY3Rpb25zIHRoZXJlZm9yZSByYW4gaW1tZWRpYXRlbHkuIFRodXMsIGV2ZW4gaWYgdGhlIGJ1ZmZlciB3YXMgZnVsbCwgdGhlIGFjdGlvbiBzdGlsbCBoYXBwZW5lZC4gQnlcbiAgICogICAgICAgIHJlcXVpcmluZyB0aGUgcHJvbWlzZSB0byBiZSB3cmFwcGVkIGluIGEgZnVuY3Rpb24sIHdlIGNhbiBkZWZlciBwcm9taXNlIGNyZWF0aW9uIHVudGlsIGFmdGVyIHRoZSBidWZmZXJcbiAgICogICAgICAgIGxpbWl0IGNoZWNrLlxuICAgKiBAcmV0dXJucyBUaGUgb3JpZ2luYWwgcHJvbWlzZS5cbiAgICovXG4gIHB1YmxpYyBhZGQodGFza1Byb2R1Y2VyOiAoKSA9PiBQcm9taXNlTGlrZTxUPik6IFByb21pc2VMaWtlPFQ+IHtcbiAgICBpZiAoIXRoaXMuaXNSZWFkeSgpKSB7XG4gICAgICByZXR1cm4gU3luY1Byb21pc2UucmVqZWN0KG5ldyBTZW50cnlFcnJvcignTm90IGFkZGluZyBQcm9taXNlIGR1ZSB0byBidWZmZXIgbGltaXQgcmVhY2hlZC4nKSk7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgdGhlIHRhc2sgYW5kIGFkZCBpdHMgcHJvbWlzZSB0byB0aGUgcXVldWVcbiAgICBjb25zdCB0YXNrID0gdGFza1Byb2R1Y2VyKCk7XG4gICAgaWYgKHRoaXMuX2J1ZmZlci5pbmRleE9mKHRhc2spID09PSAtMSkge1xuICAgICAgdGhpcy5fYnVmZmVyLnB1c2godGFzayk7XG4gICAgfVxuICAgIHZvaWQgdGFza1xuICAgICAgLnRoZW4oKCkgPT4gdGhpcy5yZW1vdmUodGFzaykpXG4gICAgICAvLyBVc2UgYHRoZW4obnVsbCwgcmVqZWN0aW9uSGFuZGxlcilgIHJhdGhlciB0aGFuIGBjYXRjaChyZWplY3Rpb25IYW5kbGVyKWAgc28gdGhhdCB3ZSBjYW4gdXNlIGBQcm9taXNlTGlrZWBcbiAgICAgIC8vIHJhdGhlciB0aGFuIGBQcm9taXNlYC4gYFByb21pc2VMaWtlYCBkb2Vzbid0IGhhdmUgYSBgLmNhdGNoYCBtZXRob2QsIG1ha2luZyBpdHMgcG9seWZpbGwgc21hbGxlci4gKEVTNSBkaWRuJ3RcbiAgICAgIC8vIGhhdmUgcHJvbWlzZXMsIHNvIFRTIGhhcyB0byBwb2x5ZmlsbCB3aGVuIGRvd24tY29tcGlsaW5nLilcbiAgICAgIC50aGVuKG51bGwsICgpID0+XG4gICAgICAgIHRoaXMucmVtb3ZlKHRhc2spLnRoZW4obnVsbCwgKCkgPT4ge1xuICAgICAgICAgIC8vIFdlIGhhdmUgdG8gYWRkIGFub3RoZXIgY2F0Y2ggaGVyZSBiZWNhdXNlIGB0aGlzLnJlbW92ZSgpYCBzdGFydHMgYSBuZXcgcHJvbWlzZSBjaGFpbi5cbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIHJldHVybiB0YXNrO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHByb21pc2UgZnJvbSB0aGUgcXVldWUuXG4gICAqXG4gICAqIEBwYXJhbSB0YXNrIENhbiBiZSBhbnkgUHJvbWlzZUxpa2U8VD5cbiAgICogQHJldHVybnMgUmVtb3ZlZCBwcm9taXNlLlxuICAgKi9cbiAgcHVibGljIHJlbW92ZSh0YXNrOiBQcm9taXNlTGlrZTxUPik6IFByb21pc2VMaWtlPFQ+IHtcbiAgICBjb25zdCByZW1vdmVkVGFzayA9IHRoaXMuX2J1ZmZlci5zcGxpY2UodGhpcy5fYnVmZmVyLmluZGV4T2YodGFzayksIDEpWzBdO1xuICAgIHJldHVybiByZW1vdmVkVGFzaztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiB1bnJlc29sdmVkIHByb21pc2VzIGluIHRoZSBxdWV1ZS5cbiAgICovXG4gIHB1YmxpYyBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXYWl0IGZvciBhbGwgcHJvbWlzZXMgaW4gdGhlIHF1ZXVlIHRvIHJlc29sdmUgb3IgZm9yIHRpbWVvdXQgdG8gZXhwaXJlLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuXG4gICAqXG4gICAqIEBwYXJhbSB0aW1lb3V0IFRoZSB0aW1lLCBpbiBtcywgYWZ0ZXIgd2hpY2ggdG8gcmVzb2x2ZSB0byBgZmFsc2VgIGlmIHRoZSBxdWV1ZSBpcyBzdGlsbCBub24tZW1wdHkuIFBhc3NpbmcgYDBgIChvclxuICAgKiBub3QgcGFzc2luZyBhbnl0aGluZykgd2lsbCBtYWtlIHRoZSBwcm9taXNlIHdhaXQgYXMgbG9uZyBhcyBpdCB0YWtlcyBmb3IgdGhlIHF1ZXVlIHRvIGRyYWluIGJlZm9yZSByZXNvbHZpbmcgdG9cbiAgICogYHRydWVgLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggd2lsbCByZXNvbHZlIHRvIGB0cnVlYCBpZiB0aGUgcXVldWUgaXMgYWxyZWFkeSBlbXB0eSBvciBkcmFpbnMgYmVmb3JlIHRoZSB0aW1lb3V0LCBhbmRcbiAgICogYGZhbHNlYCBvdGhlcndpc2VcbiAgICovXG4gIHB1YmxpYyBkcmFpbih0aW1lb3V0PzogbnVtYmVyKTogUHJvbWlzZUxpa2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgU3luY1Byb21pc2U8Ym9vbGVhbj4ocmVzb2x2ZSA9PiB7XG4gICAgICAvLyB3YWl0IGZvciBgdGltZW91dGAgbXMgYW5kIHRoZW4gcmVzb2x2ZSB0byBgZmFsc2VgIChpZiBub3QgY2FuY2VsbGVkIGZpcnN0KVxuICAgICAgY29uc3QgY2FwdHVyZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aW1lb3V0ICYmIHRpbWVvdXQgPiAwKSB7XG4gICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHRpbWVvdXQpO1xuXG4gICAgICAvLyBpZiBhbGwgcHJvbWlzZXMgcmVzb2x2ZSBpbiB0aW1lLCBjYW5jZWwgdGhlIHRpbWVyIGFuZCByZXNvbHZlIHRvIGB0cnVlYFxuICAgICAgdm9pZCBTeW5jUHJvbWlzZS5hbGwodGhpcy5fYnVmZmVyKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KGNhcHR1cmVkU2V0VGltZW91dCk7XG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4obnVsbCwgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSAnLi9nbG9iYWwnO1xuaW1wb3J0IHsgZHluYW1pY1JlcXVpcmUsIGlzTm9kZUVudiB9IGZyb20gJy4vbm9kZSc7XG5cbi8qKlxuICogQW4gb2JqZWN0IHRoYXQgY2FuIHJldHVybiB0aGUgY3VycmVudCB0aW1lc3RhbXAgaW4gc2Vjb25kcyBzaW5jZSB0aGUgVU5JWCBlcG9jaC5cbiAqL1xuaW50ZXJmYWNlIFRpbWVzdGFtcFNvdXJjZSB7XG4gIG5vd1NlY29uZHMoKTogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEgVGltZXN0YW1wU291cmNlIGltcGxlbWVudGF0aW9uIGZvciBlbnZpcm9ubWVudHMgdGhhdCBkbyBub3Qgc3VwcG9ydCB0aGUgUGVyZm9ybWFuY2UgV2ViIEFQSSBuYXRpdmVseS5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBUaW1lc3RhbXBTb3VyY2UgZG9lcyBub3QgdXNlIGEgbW9ub3RvbmljIGNsb2NrLiBBIGNhbGwgdG8gYG5vd1NlY29uZHNgIG1heSByZXR1cm4gYSB0aW1lc3RhbXAgZWFybGllclxuICogdGhhbiBhIHByZXZpb3VzbHkgcmV0dXJuZWQgdmFsdWUuIFdlIGRvIG5vdCB0cnkgdG8gZW11bGF0ZSBhIG1vbm90b25pYyBiZWhhdmlvciBpbiBvcmRlciB0byBmYWNpbGl0YXRlIGRlYnVnZ2luZy4gSXRcbiAqIGlzIG1vcmUgb2J2aW91cyB0byBleHBsYWluIFwid2h5IGRvZXMgbXkgc3BhbiBoYXZlIG5lZ2F0aXZlIGR1cmF0aW9uXCIgdGhhbiBcIndoeSBteSBzcGFucyBoYXZlIHplcm8gZHVyYXRpb25cIi5cbiAqL1xuY29uc3QgZGF0ZVRpbWVzdGFtcFNvdXJjZTogVGltZXN0YW1wU291cmNlID0ge1xuICBub3dTZWNvbmRzOiAoKSA9PiBEYXRlLm5vdygpIC8gMTAwMCxcbn07XG5cbi8qKlxuICogQSBwYXJ0aWFsIGRlZmluaXRpb24gb2YgdGhlIFtQZXJmb3JtYW5jZSBXZWIgQVBJXXtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUGVyZm9ybWFuY2V9XG4gKiBmb3IgYWNjZXNzaW5nIGEgaGlnaCByZXNvbHV0aW9uIG1vbm90b25pYyBjbG9jay5cbiAqL1xuaW50ZXJmYWNlIFBlcmZvcm1hbmNlIHtcbiAgLyoqXG4gICAqIFRoZSBtaWxsaXNlY29uZCB0aW1lc3RhbXAgYXQgd2hpY2ggbWVhc3VyZW1lbnQgYmVnYW4sIG1lYXN1cmVkIGluIFVuaXggdGltZS5cbiAgICovXG4gIHRpbWVPcmlnaW46IG51bWJlcjtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgbWlsbGlzZWNvbmQgdGltZXN0YW1wLCB3aGVyZSAwIHJlcHJlc2VudHMgdGhlIHN0YXJ0IG9mIG1lYXN1cmVtZW50LlxuICAgKi9cbiAgbm93KCk6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgd3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBQZXJmb3JtYW5jZSBBUEkgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiwgb3IgdW5kZWZpbmVkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdFxuICogc3VwcG9ydCB0aGUgQVBJLlxuICpcbiAqIFdyYXBwaW5nIHRoZSBuYXRpdmUgQVBJIHdvcmtzIGFyb3VuZCBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciBmcm9tIGRpZmZlcmVudCBicm93c2Vycy5cbiAqL1xuZnVuY3Rpb24gZ2V0QnJvd3NlclBlcmZvcm1hbmNlKCk6IFBlcmZvcm1hbmNlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyBwZXJmb3JtYW5jZSB9ID0gZ2V0R2xvYmFsT2JqZWN0PFdpbmRvdz4oKTtcbiAgaWYgKCFwZXJmb3JtYW5jZSB8fCAhcGVyZm9ybWFuY2Uubm93KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIFJlcGxhY2UgcGVyZm9ybWFuY2UudGltZU9yaWdpbiB3aXRoIG91ciBvd24gdGltZU9yaWdpbiBiYXNlZCBvbiBEYXRlLm5vdygpLlxuICAvL1xuICAvLyBUaGlzIGlzIGEgcGFydGlhbCB3b3JrYXJvdW5kIGZvciBicm93c2VycyByZXBvcnRpbmcgcGVyZm9ybWFuY2UudGltZU9yaWdpbiBzdWNoIHRoYXQgcGVyZm9ybWFuY2UudGltZU9yaWdpbiArXG4gIC8vIHBlcmZvcm1hbmNlLm5vdygpIGdpdmVzIGEgZGF0ZSBhcmJpdHJhcmlseSBpbiB0aGUgcGFzdC5cbiAgLy9cbiAgLy8gQWRkaXRpb25hbGx5LCBjb21wdXRpbmcgdGltZU9yaWdpbiBpbiB0aGlzIHdheSBmaWxscyB0aGUgZ2FwIGZvciBicm93c2VycyB3aGVyZSBwZXJmb3JtYW5jZS50aW1lT3JpZ2luIGlzXG4gIC8vIHVuZGVmaW5lZC5cbiAgLy9cbiAgLy8gVGhlIGFzc3VtcHRpb24gdGhhdCBwZXJmb3JtYW5jZS50aW1lT3JpZ2luICsgcGVyZm9ybWFuY2Uubm93KCkgfj0gRGF0ZS5ub3coKSBpcyBmbGF3ZWQsIGJ1dCB3ZSBkZXBlbmQgb24gaXQgdG9cbiAgLy8gaW50ZXJhY3Qgd2l0aCBkYXRhIGNvbWluZyBvdXQgb2YgcGVyZm9ybWFuY2UgZW50cmllcy5cbiAgLy9cbiAgLy8gTm90ZSB0aGF0IGRlc3BpdGUgcmVjb21tZW5kYXRpb25zIGFnYWluc3QgaXQgaW4gdGhlIHNwZWMsIGJyb3dzZXJzIGltcGxlbWVudCB0aGUgUGVyZm9ybWFuY2UgQVBJIHdpdGggYSBjbG9jayB0aGF0XG4gIC8vIG1pZ2h0IHN0b3Agd2hlbiB0aGUgY29tcHV0ZXIgaXMgYXNsZWVwIChhbmQgcGVyaGFwcyB1bmRlciBvdGhlciBjaXJjdW1zdGFuY2VzKS4gU3VjaCBiZWhhdmlvciBjYXVzZXNcbiAgLy8gcGVyZm9ybWFuY2UudGltZU9yaWdpbiArIHBlcmZvcm1hbmNlLm5vdygpIHRvIGhhdmUgYW4gYXJiaXRyYXJ5IHNrZXcgb3ZlciBEYXRlLm5vdygpLiBJbiBsYXB0b3AgY29tcHV0ZXJzLCB3ZSBoYXZlXG4gIC8vIG9ic2VydmVkIHNrZXdzIHRoYXQgY2FuIGJlIGFzIGxvbmcgYXMgZGF5cywgd2Vla3Mgb3IgbW9udGhzLlxuICAvL1xuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9pc3N1ZXMvMjU5MC5cbiAgLy9cbiAgLy8gQlVHOiBkZXNwaXRlIG91ciBiZXN0IGludGVudGlvbnMsIHRoaXMgd29ya2Fyb3VuZCBoYXMgaXRzIGxpbWl0YXRpb25zLiBJdCBtb3N0bHkgYWRkcmVzc2VzIHRpbWluZ3Mgb2YgcGFnZWxvYWRcbiAgLy8gdHJhbnNhY3Rpb25zLCBidXQgaWdub3JlcyB0aGUgc2tldyBidWlsdCB1cCBvdmVyIHRpbWUgdGhhdCBjYW4gYXZlcnNlbHkgYWZmZWN0IHRpbWVzdGFtcHMgb2YgbmF2aWdhdGlvblxuICAvLyB0cmFuc2FjdGlvbnMgb2YgbG9uZy1saXZlZCB3ZWIgcGFnZXMuXG4gIGNvbnN0IHRpbWVPcmlnaW4gPSBEYXRlLm5vdygpIC0gcGVyZm9ybWFuY2Uubm93KCk7XG5cbiAgcmV0dXJuIHtcbiAgICBub3c6ICgpID0+IHBlcmZvcm1hbmNlLm5vdygpLFxuICAgIHRpbWVPcmlnaW4sXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbmF0aXZlIFBlcmZvcm1hbmNlIEFQSSBpbXBsZW1lbnRhdGlvbiBmcm9tIE5vZGUuanMuIFJldHVybnMgdW5kZWZpbmVkIGluIG9sZCBOb2RlLmpzIHZlcnNpb25zIHRoYXQgZG9uJ3RcbiAqIGltcGxlbWVudCB0aGUgQVBJLlxuICovXG5mdW5jdGlvbiBnZXROb2RlUGVyZm9ybWFuY2UoKTogUGVyZm9ybWFuY2UgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIGNvbnN0IHBlcmZIb29rcyA9IGR5bmFtaWNSZXF1aXJlKG1vZHVsZSwgJ3BlcmZfaG9va3MnKSBhcyB7IHBlcmZvcm1hbmNlOiBQZXJmb3JtYW5jZSB9O1xuICAgIHJldHVybiBwZXJmSG9va3MucGVyZm9ybWFuY2U7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogVGhlIFBlcmZvcm1hbmNlIEFQSSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0sIGlmIGF2YWlsYWJsZS5cbiAqL1xuY29uc3QgcGxhdGZvcm1QZXJmb3JtYW5jZTogUGVyZm9ybWFuY2UgfCB1bmRlZmluZWQgPSBpc05vZGVFbnYoKSA/IGdldE5vZGVQZXJmb3JtYW5jZSgpIDogZ2V0QnJvd3NlclBlcmZvcm1hbmNlKCk7XG5cbmNvbnN0IHRpbWVzdGFtcFNvdXJjZTogVGltZXN0YW1wU291cmNlID1cbiAgcGxhdGZvcm1QZXJmb3JtYW5jZSA9PT0gdW5kZWZpbmVkXG4gICAgPyBkYXRlVGltZXN0YW1wU291cmNlXG4gICAgOiB7XG4gICAgICAgIG5vd1NlY29uZHM6ICgpID0+IChwbGF0Zm9ybVBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKyBwbGF0Zm9ybVBlcmZvcm1hbmNlLm5vdygpKSAvIDEwMDAsXG4gICAgICB9O1xuXG4vKipcbiAqIFJldHVybnMgYSB0aW1lc3RhbXAgaW4gc2Vjb25kcyBzaW5jZSB0aGUgVU5JWCBlcG9jaCB1c2luZyB0aGUgRGF0ZSBBUEkuXG4gKi9cbmV4cG9ydCBjb25zdCBkYXRlVGltZXN0YW1wSW5TZWNvbmRzOiAoKSA9PiBudW1iZXIgPSBkYXRlVGltZXN0YW1wU291cmNlLm5vd1NlY29uZHMuYmluZChkYXRlVGltZXN0YW1wU291cmNlKTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgdGltZXN0YW1wIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2ggdXNpbmcgZWl0aGVyIHRoZSBQZXJmb3JtYW5jZSBvciBEYXRlIEFQSXMsIGRlcGVuZGluZyBvbiB0aGVcbiAqIGF2YWlsYWJpbGl0eSBvZiB0aGUgUGVyZm9ybWFuY2UgQVBJLlxuICpcbiAqIFNlZSBgdXNpbmdQZXJmb3JtYW5jZUFQSWAgdG8gdGVzdCB3aGV0aGVyIHRoZSBQZXJmb3JtYW5jZSBBUEkgaXMgdXNlZC5cbiAqXG4gKiBCVUc6IE5vdGUgdGhhdCBiZWNhdXNlIG9mIGhvdyBicm93c2VycyBpbXBsZW1lbnQgdGhlIFBlcmZvcm1hbmNlIEFQSSwgdGhlIGNsb2NrIG1pZ2h0IHN0b3Agd2hlbiB0aGUgY29tcHV0ZXIgaXNcbiAqIGFzbGVlcC4gVGhpcyBjcmVhdGVzIGEgc2tldyBiZXR3ZWVuIGBkYXRlVGltZXN0YW1wSW5TZWNvbmRzYCBhbmQgYHRpbWVzdGFtcEluU2Vjb25kc2AuIFRoZVxuICogc2tldyBjYW4gZ3JvdyB0byBhcmJpdHJhcnkgYW1vdW50cyBsaWtlIGRheXMsIHdlZWtzIG9yIG1vbnRocy5cbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8yNTkwLlxuICovXG5leHBvcnQgY29uc3QgdGltZXN0YW1wSW5TZWNvbmRzOiAoKSA9PiBudW1iZXIgPSB0aW1lc3RhbXBTb3VyY2Uubm93U2Vjb25kcy5iaW5kKHRpbWVzdGFtcFNvdXJjZSk7XG5cbi8vIFJlLWV4cG9ydGVkIHdpdGggYW4gb2xkIG5hbWUgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5LlxuZXhwb3J0IGNvbnN0IHRpbWVzdGFtcFdpdGhNcyA9IHRpbWVzdGFtcEluU2Vjb25kcztcblxuLyoqXG4gKiBBIGJvb2xlYW4gdGhhdCBpcyB0cnVlIHdoZW4gdGltZXN0YW1wSW5TZWNvbmRzIHVzZXMgdGhlIFBlcmZvcm1hbmNlIEFQSSB0byBwcm9kdWNlIG1vbm90b25pYyB0aW1lc3RhbXBzLlxuICovXG5leHBvcnQgY29uc3QgdXNpbmdQZXJmb3JtYW5jZUFQSSA9IHBsYXRmb3JtUGVyZm9ybWFuY2UgIT09IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBJbnRlcm5hbCBoZWxwZXIgdG8gc3RvcmUgd2hhdCBpcyB0aGUgc291cmNlIG9mIGJyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW4gYmVsb3cuIEZvciBkZWJ1Z2dpbmcgb25seS5cbiAqL1xuZXhwb3J0IGxldCBfYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbk1vZGU6IHN0cmluZztcblxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgVU5JWCBlcG9jaC4gVGhpcyB2YWx1ZSBpcyBvbmx5IHVzYWJsZSBpbiBhIGJyb3dzZXIsIGFuZCBvbmx5IHdoZW4gdGhlXG4gKiBwZXJmb3JtYW5jZSBBUEkgaXMgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgY29uc3QgYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbiA9ICgoKTogbnVtYmVyIHwgdW5kZWZpbmVkID0+IHtcbiAgLy8gVW5mb3J0dW5hdGVseSBicm93c2VycyBtYXkgcmVwb3J0IGFuIGluYWNjdXJhdGUgdGltZSBvcmlnaW4gZGF0YSwgdGhyb3VnaCBlaXRoZXIgcGVyZm9ybWFuY2UudGltZU9yaWdpbiBvclxuICAvLyBwZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0LCB3aGljaCByZXN1bHRzIGluIHBvb3IgcmVzdWx0cyBpbiBwZXJmb3JtYW5jZSBkYXRhLiBXZSBvbmx5IHRyZWF0IHRpbWUgb3JpZ2luXG4gIC8vIGRhdGEgYXMgcmVsaWFibGUgaWYgdGhleSBhcmUgd2l0aGluIGEgcmVhc29uYWJsZSB0aHJlc2hvbGQgb2YgdGhlIGN1cnJlbnQgdGltZS5cblxuICBjb25zdCB7IHBlcmZvcm1hbmNlIH0gPSBnZXRHbG9iYWxPYmplY3Q8V2luZG93PigpO1xuICBpZiAoIXBlcmZvcm1hbmNlIHx8ICFwZXJmb3JtYW5jZS5ub3cpIHtcbiAgICBfYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbk1vZGUgPSAnbm9uZSc7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHRocmVzaG9sZCA9IDM2MDAgKiAxMDAwO1xuICBjb25zdCBwZXJmb3JtYW5jZU5vdyA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBjb25zdCBkYXRlTm93ID0gRGF0ZS5ub3coKTtcblxuICAvLyBpZiB0aW1lT3JpZ2luIGlzbid0IGF2YWlsYWJsZSBzZXQgZGVsdGEgdG8gdGhyZXNob2xkIHNvIGl0IGlzbid0IHVzZWRcbiAgY29uc3QgdGltZU9yaWdpbkRlbHRhID0gcGVyZm9ybWFuY2UudGltZU9yaWdpblxuICAgID8gTWF0aC5hYnMocGVyZm9ybWFuY2UudGltZU9yaWdpbiArIHBlcmZvcm1hbmNlTm93IC0gZGF0ZU5vdylcbiAgICA6IHRocmVzaG9sZDtcbiAgY29uc3QgdGltZU9yaWdpbklzUmVsaWFibGUgPSB0aW1lT3JpZ2luRGVsdGEgPCB0aHJlc2hvbGQ7XG5cbiAgLy8gV2hpbGUgcGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydCBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4sIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW5cbiAgLy8gaXMgbm90IGFzIHdpZGVseSBzdXBwb3J0ZWQuIE5hbWVseSwgcGVyZm9ybWFuY2UudGltZU9yaWdpbiBpcyB1bmRlZmluZWQgaW4gU2FmYXJpIGFzIG9mIHdyaXRpbmcuXG4gIC8vIEFsc28gYXMgb2Ygd3JpdGluZywgcGVyZm9ybWFuY2UudGltaW5nIGlzIG5vdCBhdmFpbGFibGUgaW4gV2ViIFdvcmtlcnMgaW4gbWFpbnN0cmVhbSBicm93c2Vycywgc28gaXQgaXMgbm90IGFsd2F5c1xuICAvLyBhIHZhbGlkIGZhbGxiYWNrLiBJbiB0aGUgYWJzZW5jZSBvZiBhbiBpbml0aWFsIHRpbWUgcHJvdmlkZWQgYnkgdGhlIGJyb3dzZXIsIGZhbGxiYWNrIHRvIHRoZSBjdXJyZW50IHRpbWUgZnJvbSB0aGVcbiAgLy8gRGF0ZSBBUEkuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBjb25zdCBuYXZpZ2F0aW9uU3RhcnQgPSBwZXJmb3JtYW5jZS50aW1pbmcgJiYgcGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydDtcbiAgY29uc3QgaGFzTmF2aWdhdGlvblN0YXJ0ID0gdHlwZW9mIG5hdmlnYXRpb25TdGFydCA9PT0gJ251bWJlcic7XG4gIC8vIGlmIG5hdmlnYXRpb25TdGFydCBpc24ndCBhdmFpbGFibGUgc2V0IGRlbHRhIHRvIHRocmVzaG9sZCBzbyBpdCBpc24ndCB1c2VkXG4gIGNvbnN0IG5hdmlnYXRpb25TdGFydERlbHRhID0gaGFzTmF2aWdhdGlvblN0YXJ0ID8gTWF0aC5hYnMobmF2aWdhdGlvblN0YXJ0ICsgcGVyZm9ybWFuY2VOb3cgLSBkYXRlTm93KSA6IHRocmVzaG9sZDtcbiAgY29uc3QgbmF2aWdhdGlvblN0YXJ0SXNSZWxpYWJsZSA9IG5hdmlnYXRpb25TdGFydERlbHRhIDwgdGhyZXNob2xkO1xuXG4gIGlmICh0aW1lT3JpZ2luSXNSZWxpYWJsZSB8fCBuYXZpZ2F0aW9uU3RhcnRJc1JlbGlhYmxlKSB7XG4gICAgLy8gVXNlIHRoZSBtb3JlIHJlbGlhYmxlIHRpbWUgb3JpZ2luXG4gICAgaWYgKHRpbWVPcmlnaW5EZWx0YSA8PSBuYXZpZ2F0aW9uU3RhcnREZWx0YSkge1xuICAgICAgX2Jyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW5Nb2RlID0gJ3RpbWVPcmlnaW4nO1xuICAgICAgcmV0dXJuIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW47XG4gICAgfSBlbHNlIHtcbiAgICAgIF9icm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luTW9kZSA9ICduYXZpZ2F0aW9uU3RhcnQnO1xuICAgICAgcmV0dXJuIG5hdmlnYXRpb25TdGFydDtcbiAgICB9XG4gIH1cblxuICAvLyBFaXRoZXIgYm90aCB0aW1lT3JpZ2luIGFuZCBuYXZpZ2F0aW9uU3RhcnQgYXJlIHNrZXdlZCBvciBuZWl0aGVyIGlzIGF2YWlsYWJsZSwgZmFsbGJhY2sgdG8gRGF0ZS5cbiAgX2Jyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW5Nb2RlID0gJ2RhdGVOb3cnO1xuICByZXR1cm4gZGF0ZU5vdztcbn0pKCk7XG4iLCAiZXhwb3J0ICogZnJvbSAnLi9hc3luYyc7XG5leHBvcnQgKiBmcm9tICcuL2Jyb3dzZXInO1xuZXhwb3J0ICogZnJvbSAnLi9kc24nO1xuZXhwb3J0ICogZnJvbSAnLi9lcnJvcic7XG5leHBvcnQgKiBmcm9tICcuL2dsb2JhbCc7XG5leHBvcnQgKiBmcm9tICcuL2luc3RydW1lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9pcyc7XG5leHBvcnQgKiBmcm9tICcuL2xvZ2dlcic7XG5leHBvcnQgKiBmcm9tICcuL21lbW8nO1xuZXhwb3J0ICogZnJvbSAnLi9taXNjJztcbmV4cG9ydCAqIGZyb20gJy4vbm9kZSc7XG5leHBvcnQgKiBmcm9tICcuL29iamVjdCc7XG5leHBvcnQgKiBmcm9tICcuL3BhdGgnO1xuZXhwb3J0ICogZnJvbSAnLi9wcm9taXNlYnVmZmVyJztcbmV4cG9ydCAqIGZyb20gJy4vc3RhY2t0cmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL3N0cmluZyc7XG5leHBvcnQgKiBmcm9tICcuL3N1cHBvcnRzJztcbmV4cG9ydCAqIGZyb20gJy4vc3luY3Byb21pc2UnO1xuZXhwb3J0ICogZnJvbSAnLi90aW1lJztcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGluZXMgKi9cbmltcG9ydCB7XG4gIEJyZWFkY3J1bWIsXG4gIENhcHR1cmVDb250ZXh0LFxuICBDb250ZXh0LFxuICBDb250ZXh0cyxcbiAgRXZlbnQsXG4gIEV2ZW50SGludCxcbiAgRXZlbnRQcm9jZXNzb3IsXG4gIEV4dHJhLFxuICBFeHRyYXMsXG4gIFByaW1pdGl2ZSxcbiAgUmVxdWVzdFNlc3Npb24sXG4gIFNjb3BlIGFzIFNjb3BlSW50ZXJmYWNlLFxuICBTY29wZUNvbnRleHQsXG4gIFNldmVyaXR5LFxuICBTcGFuLFxuICBUcmFuc2FjdGlvbixcbiAgVXNlcixcbn0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBkYXRlVGltZXN0YW1wSW5TZWNvbmRzLCBnZXRHbG9iYWxPYmplY3QsIGlzUGxhaW5PYmplY3QsIGlzVGhlbmFibGUsIFN5bmNQcm9taXNlIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmltcG9ydCB7IFNlc3Npb24gfSBmcm9tICcuL3Nlc3Npb24nO1xuXG4vKipcbiAqIEFic29sdXRlIG1heGltdW0gbnVtYmVyIG9mIGJyZWFkY3J1bWJzIGFkZGVkIHRvIGFuIGV2ZW50LlxuICogVGhlIGBtYXhCcmVhZGNydW1ic2Agb3B0aW9uIGNhbm5vdCBiZSBoaWdoZXIgdGhhbiB0aGlzIHZhbHVlLlxuICovXG5jb25zdCBNQVhfQlJFQURDUlVNQlMgPSAxMDA7XG5cbi8qKlxuICogSG9sZHMgYWRkaXRpb25hbCBldmVudCBpbmZvcm1hdGlvbi4ge0BsaW5rIFNjb3BlLmFwcGx5VG9FdmVudH0gd2lsbCBiZVxuICogY2FsbGVkIGJ5IHRoZSBjbGllbnQgYmVmb3JlIGFuIGV2ZW50IHdpbGwgYmUgc2VudC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNjb3BlIGltcGxlbWVudHMgU2NvcGVJbnRlcmZhY2Uge1xuICAvKiogRmxhZyBpZiBub3RpZnlpbmcgaXMgaGFwcGVuaW5nLiAqL1xuICBwcm90ZWN0ZWQgX25vdGlmeWluZ0xpc3RlbmVyczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBDYWxsYmFjayBmb3IgY2xpZW50IHRvIHJlY2VpdmUgc2NvcGUgY2hhbmdlcy4gKi9cbiAgcHJvdGVjdGVkIF9zY29wZUxpc3RlbmVyczogQXJyYXk8KHNjb3BlOiBTY29wZSkgPT4gdm9pZD4gPSBbXTtcblxuICAvKiogQ2FsbGJhY2sgbGlzdCB0aGF0IHdpbGwgYmUgY2FsbGVkIGFmdGVyIHtAbGluayBhcHBseVRvRXZlbnR9LiAqL1xuICBwcm90ZWN0ZWQgX2V2ZW50UHJvY2Vzc29yczogRXZlbnRQcm9jZXNzb3JbXSA9IFtdO1xuXG4gIC8qKiBBcnJheSBvZiBicmVhZGNydW1icy4gKi9cbiAgcHJvdGVjdGVkIF9icmVhZGNydW1iczogQnJlYWRjcnVtYltdID0gW107XG5cbiAgLyoqIFVzZXIgKi9cbiAgcHJvdGVjdGVkIF91c2VyOiBVc2VyID0ge307XG5cbiAgLyoqIFRhZ3MgKi9cbiAgcHJvdGVjdGVkIF90YWdzOiB7IFtrZXk6IHN0cmluZ106IFByaW1pdGl2ZSB9ID0ge307XG5cbiAgLyoqIEV4dHJhICovXG4gIHByb3RlY3RlZCBfZXh0cmE6IEV4dHJhcyA9IHt9O1xuXG4gIC8qKiBDb250ZXh0cyAqL1xuICBwcm90ZWN0ZWQgX2NvbnRleHRzOiBDb250ZXh0cyA9IHt9O1xuXG4gIC8qKiBGaW5nZXJwcmludCAqL1xuICBwcm90ZWN0ZWQgX2ZpbmdlcnByaW50Pzogc3RyaW5nW107XG5cbiAgLyoqIFNldmVyaXR5ICovXG4gIHByb3RlY3RlZCBfbGV2ZWw/OiBTZXZlcml0eTtcblxuICAvKiogVHJhbnNhY3Rpb24gTmFtZSAqL1xuICBwcm90ZWN0ZWQgX3RyYW5zYWN0aW9uTmFtZT86IHN0cmluZztcblxuICAvKiogU3BhbiAqL1xuICBwcm90ZWN0ZWQgX3NwYW4/OiBTcGFuO1xuXG4gIC8qKiBTZXNzaW9uICovXG4gIHByb3RlY3RlZCBfc2Vzc2lvbj86IFNlc3Npb247XG5cbiAgLyoqIFJlcXVlc3QgTW9kZSBTZXNzaW9uIFN0YXR1cyAqL1xuICBwcm90ZWN0ZWQgX3JlcXVlc3RTZXNzaW9uPzogUmVxdWVzdFNlc3Npb247XG5cbiAgLyoqXG4gICAqIEluaGVyaXQgdmFsdWVzIGZyb20gdGhlIHBhcmVudCBzY29wZS5cbiAgICogQHBhcmFtIHNjb3BlIHRvIGNsb25lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjbG9uZShzY29wZT86IFNjb3BlKTogU2NvcGUge1xuICAgIGNvbnN0IG5ld1Njb3BlID0gbmV3IFNjb3BlKCk7XG4gICAgaWYgKHNjb3BlKSB7XG4gICAgICBuZXdTY29wZS5fYnJlYWRjcnVtYnMgPSBbLi4uc2NvcGUuX2JyZWFkY3J1bWJzXTtcbiAgICAgIG5ld1Njb3BlLl90YWdzID0geyAuLi5zY29wZS5fdGFncyB9O1xuICAgICAgbmV3U2NvcGUuX2V4dHJhID0geyAuLi5zY29wZS5fZXh0cmEgfTtcbiAgICAgIG5ld1Njb3BlLl9jb250ZXh0cyA9IHsgLi4uc2NvcGUuX2NvbnRleHRzIH07XG4gICAgICBuZXdTY29wZS5fdXNlciA9IHNjb3BlLl91c2VyO1xuICAgICAgbmV3U2NvcGUuX2xldmVsID0gc2NvcGUuX2xldmVsO1xuICAgICAgbmV3U2NvcGUuX3NwYW4gPSBzY29wZS5fc3BhbjtcbiAgICAgIG5ld1Njb3BlLl9zZXNzaW9uID0gc2NvcGUuX3Nlc3Npb247XG4gICAgICBuZXdTY29wZS5fdHJhbnNhY3Rpb25OYW1lID0gc2NvcGUuX3RyYW5zYWN0aW9uTmFtZTtcbiAgICAgIG5ld1Njb3BlLl9maW5nZXJwcmludCA9IHNjb3BlLl9maW5nZXJwcmludDtcbiAgICAgIG5ld1Njb3BlLl9ldmVudFByb2Nlc3NvcnMgPSBbLi4uc2NvcGUuX2V2ZW50UHJvY2Vzc29yc107XG4gICAgICBuZXdTY29wZS5fcmVxdWVzdFNlc3Npb24gPSBzY29wZS5fcmVxdWVzdFNlc3Npb247XG4gICAgfVxuICAgIHJldHVybiBuZXdTY29wZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgaW50ZXJuYWwgb24gY2hhbmdlIGxpc3RlbmVyLiBVc2VkIGZvciBzdWIgU0RLcyB0aGF0IG5lZWQgdG8gc3RvcmUgdGhlIHNjb3BlLlxuICAgKiBAaGlkZGVuXG4gICAqL1xuICBwdWJsaWMgYWRkU2NvcGVMaXN0ZW5lcihjYWxsYmFjazogKHNjb3BlOiBTY29wZSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX3Njb3BlTGlzdGVuZXJzLnB1c2goY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgYWRkRXZlbnRQcm9jZXNzb3IoY2FsbGJhY2s6IEV2ZW50UHJvY2Vzc29yKTogdGhpcyB7XG4gICAgdGhpcy5fZXZlbnRQcm9jZXNzb3JzLnB1c2goY2FsbGJhY2spO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0VXNlcih1c2VyOiBVc2VyIHwgbnVsbCk6IHRoaXMge1xuICAgIHRoaXMuX3VzZXIgPSB1c2VyIHx8IHt9O1xuICAgIGlmICh0aGlzLl9zZXNzaW9uKSB7XG4gICAgICB0aGlzLl9zZXNzaW9uLnVwZGF0ZSh7IHVzZXIgfSk7XG4gICAgfVxuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBnZXRVc2VyKCk6IFVzZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl91c2VyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgZ2V0UmVxdWVzdFNlc3Npb24oKTogUmVxdWVzdFNlc3Npb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0U2Vzc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldFJlcXVlc3RTZXNzaW9uKHJlcXVlc3RTZXNzaW9uPzogUmVxdWVzdFNlc3Npb24pOiB0aGlzIHtcbiAgICB0aGlzLl9yZXF1ZXN0U2Vzc2lvbiA9IHJlcXVlc3RTZXNzaW9uO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0VGFncyh0YWdzOiB7IFtrZXk6IHN0cmluZ106IFByaW1pdGl2ZSB9KTogdGhpcyB7XG4gICAgdGhpcy5fdGFncyA9IHtcbiAgICAgIC4uLnRoaXMuX3RhZ3MsXG4gICAgICAuLi50YWdzLFxuICAgIH07XG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldFRhZyhrZXk6IHN0cmluZywgdmFsdWU6IFByaW1pdGl2ZSk6IHRoaXMge1xuICAgIHRoaXMuX3RhZ3MgPSB7IC4uLnRoaXMuX3RhZ3MsIFtrZXldOiB2YWx1ZSB9O1xuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXRFeHRyYXMoZXh0cmFzOiBFeHRyYXMpOiB0aGlzIHtcbiAgICB0aGlzLl9leHRyYSA9IHtcbiAgICAgIC4uLnRoaXMuX2V4dHJhLFxuICAgICAgLi4uZXh0cmFzLFxuICAgIH07XG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldEV4dHJhKGtleTogc3RyaW5nLCBleHRyYTogRXh0cmEpOiB0aGlzIHtcbiAgICB0aGlzLl9leHRyYSA9IHsgLi4udGhpcy5fZXh0cmEsIFtrZXldOiBleHRyYSB9O1xuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXRGaW5nZXJwcmludChmaW5nZXJwcmludDogc3RyaW5nW10pOiB0aGlzIHtcbiAgICB0aGlzLl9maW5nZXJwcmludCA9IGZpbmdlcnByaW50O1xuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXRMZXZlbChsZXZlbDogU2V2ZXJpdHkpOiB0aGlzIHtcbiAgICB0aGlzLl9sZXZlbCA9IGxldmVsO1xuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXRUcmFuc2FjdGlvbk5hbWUobmFtZT86IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uTmFtZSA9IG5hbWU7XG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW4gYmUgcmVtb3ZlZCBpbiBtYWpvciB2ZXJzaW9uLlxuICAgKiBAZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB7QGxpbmsgdGhpcy5zZXRUcmFuc2FjdGlvbk5hbWV9XG4gICAqL1xuICBwdWJsaWMgc2V0VHJhbnNhY3Rpb24obmFtZT86IHN0cmluZyk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLnNldFRyYW5zYWN0aW9uTmFtZShuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldENvbnRleHQoa2V5OiBzdHJpbmcsIGNvbnRleHQ6IENvbnRleHQgfCBudWxsKTogdGhpcyB7XG4gICAgaWYgKGNvbnRleHQgPT09IG51bGwpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGVcbiAgICAgIGRlbGV0ZSB0aGlzLl9jb250ZXh0c1trZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jb250ZXh0cyA9IHsgLi4udGhpcy5fY29udGV4dHMsIFtrZXldOiBjb250ZXh0IH07XG4gICAgfVxuXG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldFNwYW4oc3Bhbj86IFNwYW4pOiB0aGlzIHtcbiAgICB0aGlzLl9zcGFuID0gc3BhbjtcbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgZ2V0U3BhbigpOiBTcGFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fc3BhbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGdldFRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICAvLyBvZnRlbiwgdGhpcyBzcGFuIHdpbGwgYmUgYSB0cmFuc2FjdGlvbiwgYnV0IGl0J3Mgbm90IGd1YXJhbnRlZWQgdG8gYmVcbiAgICBjb25zdCBzcGFuID0gdGhpcy5nZXRTcGFuKCkgYXMgdW5kZWZpbmVkIHwgKFNwYW4gJiB7IHNwYW5SZWNvcmRlcjogeyBzcGFuczogU3BhbltdIH0gfSk7XG5cbiAgICAvLyB0cnkgaXQgdGhlIG5ldyB3YXkgZmlyc3RcbiAgICBpZiAoc3Bhbj8udHJhbnNhY3Rpb24pIHtcbiAgICAgIHJldHVybiBzcGFuPy50cmFuc2FjdGlvbjtcbiAgICB9XG5cbiAgICAvLyBmYWxsYmFjayB0byB0aGUgb2xkIHdheSAoa25vd24gYnVnOiB0aGlzIG9ubHkgZmluZHMgdHJhbnNhY3Rpb25zIHdpdGggc2FtcGxlZCA9IHRydWUpXG4gICAgaWYgKHNwYW4/LnNwYW5SZWNvcmRlcj8uc3BhbnNbMF0pIHtcbiAgICAgIHJldHVybiBzcGFuLnNwYW5SZWNvcmRlci5zcGFuc1swXSBhcyBUcmFuc2FjdGlvbjtcbiAgICB9XG5cbiAgICAvLyBuZWl0aGVyIHdheSBmb3VuZCBhIHRyYW5zYWN0aW9uXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldFNlc3Npb24oc2Vzc2lvbj86IFNlc3Npb24pOiB0aGlzIHtcbiAgICBpZiAoIXNlc3Npb24pIHtcbiAgICAgIGRlbGV0ZSB0aGlzLl9zZXNzaW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXNzaW9uID0gc2Vzc2lvbjtcbiAgICB9XG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGdldFNlc3Npb24oKTogU2Vzc2lvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb247XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyB1cGRhdGUoY2FwdHVyZUNvbnRleHQ/OiBDYXB0dXJlQ29udGV4dCk6IHRoaXMge1xuICAgIGlmICghY2FwdHVyZUNvbnRleHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FwdHVyZUNvbnRleHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRTY29wZSA9IChjYXB0dXJlQ29udGV4dCBhcyA8VD4oc2NvcGU6IFQpID0+IFQpKHRoaXMpO1xuICAgICAgcmV0dXJuIHVwZGF0ZWRTY29wZSBpbnN0YW5jZW9mIFNjb3BlID8gdXBkYXRlZFNjb3BlIDogdGhpcztcbiAgICB9XG5cbiAgICBpZiAoY2FwdHVyZUNvbnRleHQgaW5zdGFuY2VvZiBTY29wZSkge1xuICAgICAgdGhpcy5fdGFncyA9IHsgLi4udGhpcy5fdGFncywgLi4uY2FwdHVyZUNvbnRleHQuX3RhZ3MgfTtcbiAgICAgIHRoaXMuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSwgLi4uY2FwdHVyZUNvbnRleHQuX2V4dHJhIH07XG4gICAgICB0aGlzLl9jb250ZXh0cyA9IHsgLi4udGhpcy5fY29udGV4dHMsIC4uLmNhcHR1cmVDb250ZXh0Ll9jb250ZXh0cyB9O1xuICAgICAgaWYgKGNhcHR1cmVDb250ZXh0Ll91c2VyICYmIE9iamVjdC5rZXlzKGNhcHR1cmVDb250ZXh0Ll91c2VyKS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fdXNlciA9IGNhcHR1cmVDb250ZXh0Ll91c2VyO1xuICAgICAgfVxuICAgICAgaWYgKGNhcHR1cmVDb250ZXh0Ll9sZXZlbCkge1xuICAgICAgICB0aGlzLl9sZXZlbCA9IGNhcHR1cmVDb250ZXh0Ll9sZXZlbDtcbiAgICAgIH1cbiAgICAgIGlmIChjYXB0dXJlQ29udGV4dC5fZmluZ2VycHJpbnQpIHtcbiAgICAgICAgdGhpcy5fZmluZ2VycHJpbnQgPSBjYXB0dXJlQ29udGV4dC5fZmluZ2VycHJpbnQ7XG4gICAgICB9XG4gICAgICBpZiAoY2FwdHVyZUNvbnRleHQuX3JlcXVlc3RTZXNzaW9uKSB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RTZXNzaW9uID0gY2FwdHVyZUNvbnRleHQuX3JlcXVlc3RTZXNzaW9uO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChjYXB0dXJlQ29udGV4dCkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgY2FwdHVyZUNvbnRleHQgPSBjYXB0dXJlQ29udGV4dCBhcyBTY29wZUNvbnRleHQ7XG4gICAgICB0aGlzLl90YWdzID0geyAuLi50aGlzLl90YWdzLCAuLi5jYXB0dXJlQ29udGV4dC50YWdzIH07XG4gICAgICB0aGlzLl9leHRyYSA9IHsgLi4udGhpcy5fZXh0cmEsIC4uLmNhcHR1cmVDb250ZXh0LmV4dHJhIH07XG4gICAgICB0aGlzLl9jb250ZXh0cyA9IHsgLi4udGhpcy5fY29udGV4dHMsIC4uLmNhcHR1cmVDb250ZXh0LmNvbnRleHRzIH07XG4gICAgICBpZiAoY2FwdHVyZUNvbnRleHQudXNlcikge1xuICAgICAgICB0aGlzLl91c2VyID0gY2FwdHVyZUNvbnRleHQudXNlcjtcbiAgICAgIH1cbiAgICAgIGlmIChjYXB0dXJlQ29udGV4dC5sZXZlbCkge1xuICAgICAgICB0aGlzLl9sZXZlbCA9IGNhcHR1cmVDb250ZXh0LmxldmVsO1xuICAgICAgfVxuICAgICAgaWYgKGNhcHR1cmVDb250ZXh0LmZpbmdlcnByaW50KSB7XG4gICAgICAgIHRoaXMuX2ZpbmdlcnByaW50ID0gY2FwdHVyZUNvbnRleHQuZmluZ2VycHJpbnQ7XG4gICAgICB9XG4gICAgICBpZiAoY2FwdHVyZUNvbnRleHQucmVxdWVzdFNlc3Npb24pIHtcbiAgICAgICAgdGhpcy5fcmVxdWVzdFNlc3Npb24gPSBjYXB0dXJlQ29udGV4dC5yZXF1ZXN0U2Vzc2lvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNsZWFyKCk6IHRoaXMge1xuICAgIHRoaXMuX2JyZWFkY3J1bWJzID0gW107XG4gICAgdGhpcy5fdGFncyA9IHt9O1xuICAgIHRoaXMuX2V4dHJhID0ge307XG4gICAgdGhpcy5fdXNlciA9IHt9O1xuICAgIHRoaXMuX2NvbnRleHRzID0ge307XG4gICAgdGhpcy5fbGV2ZWwgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb25OYW1lID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2ZpbmdlcnByaW50ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3JlcXVlc3RTZXNzaW9uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3NwYW4gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fc2Vzc2lvbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgYWRkQnJlYWRjcnVtYihicmVhZGNydW1iOiBCcmVhZGNydW1iLCBtYXhCcmVhZGNydW1icz86IG51bWJlcik6IHRoaXMge1xuICAgIGNvbnN0IG1heENydW1icyA9IHR5cGVvZiBtYXhCcmVhZGNydW1icyA9PT0gJ251bWJlcicgPyBNYXRoLm1pbihtYXhCcmVhZGNydW1icywgTUFYX0JSRUFEQ1JVTUJTKSA6IE1BWF9CUkVBRENSVU1CUztcblxuICAgIC8vIE5vIGRhdGEgaGFzIGJlZW4gY2hhbmdlZCwgc28gZG9uJ3Qgbm90aWZ5IHNjb3BlIGxpc3RlbmVyc1xuICAgIGlmIChtYXhDcnVtYnMgPD0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgY29uc3QgbWVyZ2VkQnJlYWRjcnVtYiA9IHtcbiAgICAgIHRpbWVzdGFtcDogZGF0ZVRpbWVzdGFtcEluU2Vjb25kcygpLFxuICAgICAgLi4uYnJlYWRjcnVtYixcbiAgICB9O1xuICAgIHRoaXMuX2JyZWFkY3J1bWJzID0gWy4uLnRoaXMuX2JyZWFkY3J1bWJzLCBtZXJnZWRCcmVhZGNydW1iXS5zbGljZSgtbWF4Q3J1bWJzKTtcbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBjbGVhckJyZWFkY3J1bWJzKCk6IHRoaXMge1xuICAgIHRoaXMuX2JyZWFkY3J1bWJzID0gW107XG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kIGZpbmdlcnByaW50IHRvIHRoZSBldmVudC5cbiAgICogTm90ZSB0aGF0IGJyZWFkY3J1bWJzIHdpbGwgYmUgYWRkZWQgYnkgdGhlIGNsaWVudC5cbiAgICogQWxzbyBpZiB0aGUgZXZlbnQgaGFzIGFscmVhZHkgYnJlYWRjcnVtYnMgb24gaXQsIHdlIGRvIG5vdCBtZXJnZSB0aGVtLlxuICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRcbiAgICogQHBhcmFtIGhpbnQgTWF5IGNvbnRhaW4gYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uLlxuICAgKiBAaGlkZGVuXG4gICAqL1xuICBwdWJsaWMgYXBwbHlUb0V2ZW50KGV2ZW50OiBFdmVudCwgaGludD86IEV2ZW50SGludCk6IFByb21pc2VMaWtlPEV2ZW50IHwgbnVsbD4ge1xuICAgIGlmICh0aGlzLl9leHRyYSAmJiBPYmplY3Qua2V5cyh0aGlzLl9leHRyYSkubGVuZ3RoKSB7XG4gICAgICBldmVudC5leHRyYSA9IHsgLi4udGhpcy5fZXh0cmEsIC4uLmV2ZW50LmV4dHJhIH07XG4gICAgfVxuICAgIGlmICh0aGlzLl90YWdzICYmIE9iamVjdC5rZXlzKHRoaXMuX3RhZ3MpLmxlbmd0aCkge1xuICAgICAgZXZlbnQudGFncyA9IHsgLi4udGhpcy5fdGFncywgLi4uZXZlbnQudGFncyB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5fdXNlciAmJiBPYmplY3Qua2V5cyh0aGlzLl91c2VyKS5sZW5ndGgpIHtcbiAgICAgIGV2ZW50LnVzZXIgPSB7IC4uLnRoaXMuX3VzZXIsIC4uLmV2ZW50LnVzZXIgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NvbnRleHRzICYmIE9iamVjdC5rZXlzKHRoaXMuX2NvbnRleHRzKS5sZW5ndGgpIHtcbiAgICAgIGV2ZW50LmNvbnRleHRzID0geyAuLi50aGlzLl9jb250ZXh0cywgLi4uZXZlbnQuY29udGV4dHMgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2xldmVsKSB7XG4gICAgICBldmVudC5sZXZlbCA9IHRoaXMuX2xldmVsO1xuICAgIH1cbiAgICBpZiAodGhpcy5fdHJhbnNhY3Rpb25OYW1lKSB7XG4gICAgICBldmVudC50cmFuc2FjdGlvbiA9IHRoaXMuX3RyYW5zYWN0aW9uTmFtZTtcbiAgICB9XG4gICAgLy8gV2Ugd2FudCB0byBzZXQgdGhlIHRyYWNlIGNvbnRleHQgZm9yIG5vcm1hbCBldmVudHMgb25seSBpZiB0aGVyZSBpc24ndCBhbHJlYWR5XG4gICAgLy8gYSB0cmFjZSBjb250ZXh0IG9uIHRoZSBldmVudC4gVGhlcmUgaXMgYSBwcm9kdWN0IGZlYXR1cmUgaW4gcGxhY2Ugd2hlcmUgd2UgbGlua1xuICAgIC8vIGVycm9ycyB3aXRoIHRyYW5zYWN0aW9uIGFuZCBpdCByZWxpZXMgb24gdGhhdC5cbiAgICBpZiAodGhpcy5fc3Bhbikge1xuICAgICAgZXZlbnQuY29udGV4dHMgPSB7IHRyYWNlOiB0aGlzLl9zcGFuLmdldFRyYWNlQ29udGV4dCgpLCAuLi5ldmVudC5jb250ZXh0cyB9O1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb25OYW1lID0gdGhpcy5fc3Bhbi50cmFuc2FjdGlvbj8ubmFtZTtcbiAgICAgIGlmICh0cmFuc2FjdGlvbk5hbWUpIHtcbiAgICAgICAgZXZlbnQudGFncyA9IHsgdHJhbnNhY3Rpb246IHRyYW5zYWN0aW9uTmFtZSwgLi4uZXZlbnQudGFncyB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2FwcGx5RmluZ2VycHJpbnQoZXZlbnQpO1xuXG4gICAgZXZlbnQuYnJlYWRjcnVtYnMgPSBbLi4uKGV2ZW50LmJyZWFkY3J1bWJzIHx8IFtdKSwgLi4udGhpcy5fYnJlYWRjcnVtYnNdO1xuICAgIGV2ZW50LmJyZWFkY3J1bWJzID0gZXZlbnQuYnJlYWRjcnVtYnMubGVuZ3RoID4gMCA/IGV2ZW50LmJyZWFkY3J1bWJzIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHRoaXMuX25vdGlmeUV2ZW50UHJvY2Vzc29ycyhbLi4uZ2V0R2xvYmFsRXZlbnRQcm9jZXNzb3JzKCksIC4uLnRoaXMuX2V2ZW50UHJvY2Vzc29yc10sIGV2ZW50LCBoaW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHdpbGwgYmUgY2FsbGVkIGFmdGVyIHtAbGluayBhcHBseVRvRXZlbnR9IGlzIGZpbmlzaGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9ub3RpZnlFdmVudFByb2Nlc3NvcnMoXG4gICAgcHJvY2Vzc29yczogRXZlbnRQcm9jZXNzb3JbXSxcbiAgICBldmVudDogRXZlbnQgfCBudWxsLFxuICAgIGhpbnQ/OiBFdmVudEhpbnQsXG4gICAgaW5kZXg6IG51bWJlciA9IDAsXG4gICk6IFByb21pc2VMaWtlPEV2ZW50IHwgbnVsbD4ge1xuICAgIHJldHVybiBuZXcgU3luY1Byb21pc2U8RXZlbnQgfCBudWxsPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBwcm9jZXNzb3IgPSBwcm9jZXNzb3JzW2luZGV4XTtcbiAgICAgIGlmIChldmVudCA9PT0gbnVsbCB8fCB0eXBlb2YgcHJvY2Vzc29yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlc29sdmUoZXZlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcHJvY2Vzc29yKHsgLi4uZXZlbnQgfSwgaGludCkgYXMgRXZlbnQgfCBudWxsO1xuICAgICAgICBpZiAoaXNUaGVuYWJsZShyZXN1bHQpKSB7XG4gICAgICAgICAgdm9pZCAocmVzdWx0IGFzIFByb21pc2VMaWtlPEV2ZW50IHwgbnVsbD4pXG4gICAgICAgICAgICAudGhlbihmaW5hbCA9PiB0aGlzLl9ub3RpZnlFdmVudFByb2Nlc3NvcnMocHJvY2Vzc29ycywgZmluYWwsIGhpbnQsIGluZGV4ICsgMSkudGhlbihyZXNvbHZlKSlcbiAgICAgICAgICAgIC50aGVuKG51bGwsIHJlamVjdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdm9pZCB0aGlzLl9ub3RpZnlFdmVudFByb2Nlc3NvcnMocHJvY2Vzc29ycywgcmVzdWx0LCBoaW50LCBpbmRleCArIDEpXG4gICAgICAgICAgICAudGhlbihyZXNvbHZlKVxuICAgICAgICAgICAgLnRoZW4obnVsbCwgcmVqZWN0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgd2lsbCBiZSBjYWxsZWQgb24gZXZlcnkgc2V0IGNhbGwuXG4gICAqL1xuICBwcm90ZWN0ZWQgX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIC8vIFdlIG5lZWQgdGhpcyBjaGVjayBmb3IgdGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzIHRvIGJlIGFibGUgdG8gd29yayBvbiBzY29wZSBkdXJpbmcgdXBkYXRlc1xuICAgIC8vIElmIHRoaXMgY2hlY2sgaXMgbm90IGhlcmUgd2UnbGwgcHJvZHVjZSBlbmRsZXNzIHJlY3Vyc2lvbiB3aGVuIHNvbWV0aGluZyBpcyBkb25lIHdpdGggdGhlIHNjb3BlXG4gICAgLy8gZHVyaW5nIHRoZSBjYWxsYmFjay5cbiAgICBpZiAoIXRoaXMuX25vdGlmeWluZ0xpc3RlbmVycykge1xuICAgICAgdGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3Njb3BlTGlzdGVuZXJzLmZvckVhY2goY2FsbGJhY2sgPT4ge1xuICAgICAgICBjYWxsYmFjayh0aGlzKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgZmluZ2VycHJpbnQgZnJvbSB0aGUgc2NvcGUgdG8gdGhlIGV2ZW50IGlmIHRoZXJlJ3Mgb25lLFxuICAgKiB1c2VzIG1lc3NhZ2UgaWYgdGhlcmUncyBvbmUgaW5zdGVhZCBvciBnZXQgcmlkIG9mIGVtcHR5IGZpbmdlcnByaW50XG4gICAqL1xuICBwcml2YXRlIF9hcHBseUZpbmdlcnByaW50KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIC8vIE1ha2Ugc3VyZSBpdCdzIGFuIGFycmF5IGZpcnN0IGFuZCB3ZSBhY3R1YWxseSBoYXZlIHNvbWV0aGluZyBpbiBwbGFjZVxuICAgIGV2ZW50LmZpbmdlcnByaW50ID0gZXZlbnQuZmluZ2VycHJpbnRcbiAgICAgID8gQXJyYXkuaXNBcnJheShldmVudC5maW5nZXJwcmludClcbiAgICAgICAgPyBldmVudC5maW5nZXJwcmludFxuICAgICAgICA6IFtldmVudC5maW5nZXJwcmludF1cbiAgICAgIDogW107XG5cbiAgICAvLyBJZiB3ZSBoYXZlIHNvbWV0aGluZyBvbiB0aGUgc2NvcGUsIHRoZW4gbWVyZ2UgaXQgd2l0aCBldmVudFxuICAgIGlmICh0aGlzLl9maW5nZXJwcmludCkge1xuICAgICAgZXZlbnQuZmluZ2VycHJpbnQgPSBldmVudC5maW5nZXJwcmludC5jb25jYXQodGhpcy5fZmluZ2VycHJpbnQpO1xuICAgIH1cblxuICAgIC8vIElmIHdlIGhhdmUgbm8gZGF0YSBhdCBhbGwsIHJlbW92ZSBlbXB0eSBhcnJheSBkZWZhdWx0XG4gICAgaWYgKGV2ZW50LmZpbmdlcnByaW50ICYmICFldmVudC5maW5nZXJwcmludC5sZW5ndGgpIHtcbiAgICAgIGRlbGV0ZSBldmVudC5maW5nZXJwcmludDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnbG9iYWwgZXZlbnQgcHJvY2Vzc29ycy5cbiAqL1xuZnVuY3Rpb24gZ2V0R2xvYmFsRXZlbnRQcm9jZXNzb3JzKCk6IEV2ZW50UHJvY2Vzc29yW10ge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgICovXG4gIGNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdDxhbnk+KCk7XG4gIGdsb2JhbC5fX1NFTlRSWV9fID0gZ2xvYmFsLl9fU0VOVFJZX18gfHwge307XG4gIGdsb2JhbC5fX1NFTlRSWV9fLmdsb2JhbEV2ZW50UHJvY2Vzc29ycyA9IGdsb2JhbC5fX1NFTlRSWV9fLmdsb2JhbEV2ZW50UHJvY2Vzc29ycyB8fCBbXTtcbiAgcmV0dXJuIGdsb2JhbC5fX1NFTlRSWV9fLmdsb2JhbEV2ZW50UHJvY2Vzc29ycztcbiAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi9cbn1cblxuLyoqXG4gKiBBZGQgYSBFdmVudFByb2Nlc3NvciB0byBiZSBrZXB0IGdsb2JhbGx5LlxuICogQHBhcmFtIGNhbGxiYWNrIEV2ZW50UHJvY2Vzc29yIHRvIGFkZFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkR2xvYmFsRXZlbnRQcm9jZXNzb3IoY2FsbGJhY2s6IEV2ZW50UHJvY2Vzc29yKTogdm9pZCB7XG4gIGdldEdsb2JhbEV2ZW50UHJvY2Vzc29ycygpLnB1c2goY2FsbGJhY2spO1xufVxuIiwgImltcG9ydCB7IFNlc3Npb24gYXMgU2Vzc2lvbkludGVyZmFjZSwgU2Vzc2lvbkNvbnRleHQsIFNlc3Npb25TdGF0dXMgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGRyb3BVbmRlZmluZWRLZXlzLCB0aW1lc3RhbXBJblNlY29uZHMsIHV1aWQ0IH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbi8qKlxuICogQGluaGVyaXRkb2NcbiAqL1xuZXhwb3J0IGNsYXNzIFNlc3Npb24gaW1wbGVtZW50cyBTZXNzaW9uSW50ZXJmYWNlIHtcbiAgcHVibGljIHVzZXJBZ2VudD86IHN0cmluZztcbiAgcHVibGljIGVycm9yczogbnVtYmVyID0gMDtcbiAgcHVibGljIHJlbGVhc2U/OiBzdHJpbmc7XG4gIHB1YmxpYyBzaWQ6IHN0cmluZyA9IHV1aWQ0KCk7XG4gIHB1YmxpYyBkaWQ/OiBzdHJpbmc7XG4gIHB1YmxpYyB0aW1lc3RhbXA6IG51bWJlcjtcbiAgcHVibGljIHN0YXJ0ZWQ6IG51bWJlcjtcbiAgcHVibGljIGR1cmF0aW9uPzogbnVtYmVyID0gMDtcbiAgcHVibGljIHN0YXR1czogU2Vzc2lvblN0YXR1cyA9IFNlc3Npb25TdGF0dXMuT2s7XG4gIHB1YmxpYyBlbnZpcm9ubWVudD86IHN0cmluZztcbiAgcHVibGljIGlwQWRkcmVzcz86IHN0cmluZztcbiAgcHVibGljIGluaXQ6IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgaWdub3JlRHVyYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoY29udGV4dD86IE9taXQ8U2Vzc2lvbkNvbnRleHQsICdzdGFydGVkJyB8ICdzdGF0dXMnPikge1xuICAgIC8vIEJvdGggdGltZXN0YW1wIGFuZCBzdGFydGVkIGFyZSBpbiBzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoLlxuICAgIGNvbnN0IHN0YXJ0aW5nVGltZSA9IHRpbWVzdGFtcEluU2Vjb25kcygpO1xuICAgIHRoaXMudGltZXN0YW1wID0gc3RhcnRpbmdUaW1lO1xuICAgIHRoaXMuc3RhcnRlZCA9IHN0YXJ0aW5nVGltZTtcbiAgICBpZiAoY29udGV4dCkge1xuICAgICAgdGhpcy51cGRhdGUoY29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIHB1YmxpYyB1cGRhdGUoY29udGV4dDogU2Vzc2lvbkNvbnRleHQgPSB7fSk6IHZvaWQge1xuICAgIGlmIChjb250ZXh0LnVzZXIpIHtcbiAgICAgIGlmICghdGhpcy5pcEFkZHJlc3MgJiYgY29udGV4dC51c2VyLmlwX2FkZHJlc3MpIHtcbiAgICAgICAgdGhpcy5pcEFkZHJlc3MgPSBjb250ZXh0LnVzZXIuaXBfYWRkcmVzcztcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLmRpZCAmJiAhY29udGV4dC5kaWQpIHtcbiAgICAgICAgdGhpcy5kaWQgPSBjb250ZXh0LnVzZXIuaWQgfHwgY29udGV4dC51c2VyLmVtYWlsIHx8IGNvbnRleHQudXNlci51c2VybmFtZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnRpbWVzdGFtcCA9IGNvbnRleHQudGltZXN0YW1wIHx8IHRpbWVzdGFtcEluU2Vjb25kcygpO1xuICAgIGlmIChjb250ZXh0Lmlnbm9yZUR1cmF0aW9uKSB7XG4gICAgICB0aGlzLmlnbm9yZUR1cmF0aW9uID0gY29udGV4dC5pZ25vcmVEdXJhdGlvbjtcbiAgICB9XG4gICAgaWYgKGNvbnRleHQuc2lkKSB7XG4gICAgICAvLyBHb29kIGVub3VnaCB1dWlkIHZhbGlkYXRpb24uIFx1MjAxNCBLYW1pbFxuICAgICAgdGhpcy5zaWQgPSBjb250ZXh0LnNpZC5sZW5ndGggPT09IDMyID8gY29udGV4dC5zaWQgOiB1dWlkNCgpO1xuICAgIH1cbiAgICBpZiAoY29udGV4dC5pbml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaW5pdCA9IGNvbnRleHQuaW5pdDtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmRpZCAmJiBjb250ZXh0LmRpZCkge1xuICAgICAgdGhpcy5kaWQgPSBgJHtjb250ZXh0LmRpZH1gO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbnRleHQuc3RhcnRlZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMuc3RhcnRlZCA9IGNvbnRleHQuc3RhcnRlZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaWdub3JlRHVyYXRpb24pIHtcbiAgICAgIHRoaXMuZHVyYXRpb24gPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29udGV4dC5kdXJhdGlvbiA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMuZHVyYXRpb24gPSBjb250ZXh0LmR1cmF0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IHRoaXMudGltZXN0YW1wIC0gdGhpcy5zdGFydGVkO1xuICAgICAgdGhpcy5kdXJhdGlvbiA9IGR1cmF0aW9uID49IDAgPyBkdXJhdGlvbiA6IDA7XG4gICAgfVxuICAgIGlmIChjb250ZXh0LnJlbGVhc2UpIHtcbiAgICAgIHRoaXMucmVsZWFzZSA9IGNvbnRleHQucmVsZWFzZTtcbiAgICB9XG4gICAgaWYgKGNvbnRleHQuZW52aXJvbm1lbnQpIHtcbiAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBjb250ZXh0LmVudmlyb25tZW50O1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXBBZGRyZXNzICYmIGNvbnRleHQuaXBBZGRyZXNzKSB7XG4gICAgICB0aGlzLmlwQWRkcmVzcyA9IGNvbnRleHQuaXBBZGRyZXNzO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudXNlckFnZW50ICYmIGNvbnRleHQudXNlckFnZW50KSB7XG4gICAgICB0aGlzLnVzZXJBZ2VudCA9IGNvbnRleHQudXNlckFnZW50O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbnRleHQuZXJyb3JzID09PSAnbnVtYmVyJykge1xuICAgICAgdGhpcy5lcnJvcnMgPSBjb250ZXh0LmVycm9ycztcbiAgICB9XG4gICAgaWYgKGNvbnRleHQuc3RhdHVzKSB7XG4gICAgICB0aGlzLnN0YXR1cyA9IGNvbnRleHQuc3RhdHVzO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwdWJsaWMgY2xvc2Uoc3RhdHVzPzogRXhjbHVkZTxTZXNzaW9uU3RhdHVzLCBTZXNzaW9uU3RhdHVzLk9rPik6IHZvaWQge1xuICAgIGlmIChzdGF0dXMpIHtcbiAgICAgIHRoaXMudXBkYXRlKHsgc3RhdHVzIH0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0dXMgPT09IFNlc3Npb25TdGF0dXMuT2spIHtcbiAgICAgIHRoaXMudXBkYXRlKHsgc3RhdHVzOiBTZXNzaW9uU3RhdHVzLkV4aXRlZCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHVibGljIHRvSlNPTigpOiB7XG4gICAgaW5pdDogYm9vbGVhbjtcbiAgICBzaWQ6IHN0cmluZztcbiAgICBkaWQ/OiBzdHJpbmc7XG4gICAgdGltZXN0YW1wOiBzdHJpbmc7XG4gICAgc3RhcnRlZDogc3RyaW5nO1xuICAgIGR1cmF0aW9uPzogbnVtYmVyO1xuICAgIHN0YXR1czogU2Vzc2lvblN0YXR1cztcbiAgICBlcnJvcnM6IG51bWJlcjtcbiAgICBhdHRycz86IHtcbiAgICAgIHJlbGVhc2U/OiBzdHJpbmc7XG4gICAgICBlbnZpcm9ubWVudD86IHN0cmluZztcbiAgICAgIHVzZXJfYWdlbnQ/OiBzdHJpbmc7XG4gICAgICBpcF9hZGRyZXNzPzogc3RyaW5nO1xuICAgIH07XG4gIH0ge1xuICAgIHJldHVybiBkcm9wVW5kZWZpbmVkS2V5cyh7XG4gICAgICBzaWQ6IGAke3RoaXMuc2lkfWAsXG4gICAgICBpbml0OiB0aGlzLmluaXQsXG4gICAgICAvLyBNYWtlIHN1cmUgdGhhdCBzZWMgaXMgY29udmVydGVkIHRvIG1zIGZvciBkYXRlIGNvbnN0cnVjdG9yXG4gICAgICBzdGFydGVkOiBuZXcgRGF0ZSh0aGlzLnN0YXJ0ZWQgKiAxMDAwKS50b0lTT1N0cmluZygpLFxuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSh0aGlzLnRpbWVzdGFtcCAqIDEwMDApLnRvSVNPU3RyaW5nKCksXG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgZXJyb3JzOiB0aGlzLmVycm9ycyxcbiAgICAgIGRpZDogdHlwZW9mIHRoaXMuZGlkID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdGhpcy5kaWQgPT09ICdzdHJpbmcnID8gYCR7dGhpcy5kaWR9YCA6IHVuZGVmaW5lZCxcbiAgICAgIGR1cmF0aW9uOiB0aGlzLmR1cmF0aW9uLFxuICAgICAgYXR0cnM6IGRyb3BVbmRlZmluZWRLZXlzKHtcbiAgICAgICAgcmVsZWFzZTogdGhpcy5yZWxlYXNlLFxuICAgICAgICBlbnZpcm9ubWVudDogdGhpcy5lbnZpcm9ubWVudCxcbiAgICAgICAgaXBfYWRkcmVzczogdGhpcy5pcEFkZHJlc3MsXG4gICAgICAgIHVzZXJfYWdlbnQ6IHRoaXMudXNlckFnZW50LFxuICAgICAgfSksXG4gICAgfSk7XG4gIH1cbn1cbiIsICIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGluZXMgKi9cbmltcG9ydCB7XG4gIEJyZWFkY3J1bWIsXG4gIEJyZWFkY3J1bWJIaW50LFxuICBDbGllbnQsXG4gIEN1c3RvbVNhbXBsaW5nQ29udGV4dCxcbiAgRXZlbnQsXG4gIEV2ZW50SGludCxcbiAgRXh0cmEsXG4gIEV4dHJhcyxcbiAgSHViIGFzIEh1YkludGVyZmFjZSxcbiAgSW50ZWdyYXRpb24sXG4gIEludGVncmF0aW9uQ2xhc3MsXG4gIFByaW1pdGl2ZSxcbiAgU2Vzc2lvbkNvbnRleHQsXG4gIFNlc3Npb25TdGF0dXMsXG4gIFNldmVyaXR5LFxuICBTcGFuLFxuICBTcGFuQ29udGV4dCxcbiAgVHJhbnNhY3Rpb24sXG4gIFRyYW5zYWN0aW9uQ29udGV4dCxcbiAgVXNlcixcbn0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBjb25zb2xlU2FuZGJveCwgZGF0ZVRpbWVzdGFtcEluU2Vjb25kcywgZ2V0R2xvYmFsT2JqZWN0LCBpc05vZGVFbnYsIGxvZ2dlciwgdXVpZDQgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuaW1wb3J0IHsgU2NvcGUgfSBmcm9tICcuL3Njb3BlJztcbmltcG9ydCB7IFNlc3Npb24gfSBmcm9tICcuL3Nlc3Npb24nO1xuXG4vKipcbiAqIEFQSSBjb21wYXRpYmlsaXR5IHZlcnNpb24gb2YgdGhpcyBodWIuXG4gKlxuICogV0FSTklORzogVGhpcyBudW1iZXIgc2hvdWxkIG9ubHkgYmUgaW5jcmVhc2VkIHdoZW4gdGhlIGdsb2JhbCBpbnRlcmZhY2VcbiAqIGNoYW5nZXMgYW5kIG5ldyBtZXRob2RzIGFyZSBpbnRyb2R1Y2VkLlxuICpcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNvbnN0IEFQSV9WRVJTSU9OID0gNDtcblxuLyoqXG4gKiBEZWZhdWx0IG1heGltdW0gbnVtYmVyIG9mIGJyZWFkY3J1bWJzIGFkZGVkIHRvIGFuIGV2ZW50LiBDYW4gYmUgb3ZlcndyaXR0ZW5cbiAqIHdpdGgge0BsaW5rIE9wdGlvbnMubWF4QnJlYWRjcnVtYnN9LlxuICovXG5jb25zdCBERUZBVUxUX0JSRUFEQ1JVTUJTID0gMTAwO1xuXG4vKipcbiAqIEEgbGF5ZXIgaW4gdGhlIHByb2Nlc3Mgc3RhY2suXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGF5ZXIge1xuICBjbGllbnQ/OiBDbGllbnQ7XG4gIHNjb3BlPzogU2NvcGU7XG59XG5cbi8qKlxuICogQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBodWIgYW5kIG1haW50YWlucyBhIHNjb3BlIHN0YWNrLlxuICogQGhpZGRlblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhcnJpZXIge1xuICBfX1NFTlRSWV9fPzoge1xuICAgIGh1Yj86IEh1YjtcbiAgICAvKipcbiAgICAgKiBFeHRyYSBIdWIgcHJvcGVydGllcyBpbmplY3RlZCBieSB2YXJpb3VzIFNES3NcbiAgICAgKi9cbiAgICBpbnRlZ3JhdGlvbnM/OiBJbnRlZ3JhdGlvbltdO1xuICAgIGV4dGVuc2lvbnM/OiB7XG4gICAgICAvKiogSGFjayB0byBwcmV2ZW50IGJ1bmRsZXJzIGZyb20gYnJlYWtpbmcgb3VyIHVzYWdlIG9mIHRoZSBkb21haW4gcGFja2FnZSBpbiB0aGUgY3Jvc3MtcGxhdGZvcm0gSHViIHBhY2thZ2UgKi9cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBkb21haW4/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICAgIH0gJiB7XG4gICAgICAvKiogRXh0ZW5zaW9uIG1ldGhvZHMgZm9yIHRoZSBodWIsIHdoaWNoIGFyZSBib3VuZCB0byB0aGUgY3VycmVudCBIdWIgaW5zdGFuY2UgKi9cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG4gICAgICBba2V5OiBzdHJpbmddOiBGdW5jdGlvbjtcbiAgICB9O1xuICB9O1xufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqIEBkZXByZWNhdGVkIENhbiBiZSByZW1vdmVkIG9uY2UgYEh1Yi5nZXRBY3RpdmVEb21haW5gIGlzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9tYWluQXNDYXJyaWVyIGV4dGVuZHMgQ2FycmllciB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIG1lbWJlcnM6IHsgW2tleTogc3RyaW5nXTogYW55IH1bXTtcbn1cblxuLyoqXG4gKiBAaW5oZXJpdERvY1xuICovXG5leHBvcnQgY2xhc3MgSHViIGltcGxlbWVudHMgSHViSW50ZXJmYWNlIHtcbiAgLyoqIElzIGEge0BsaW5rIExheWVyfVtdIGNvbnRhaW5pbmcgdGhlIGNsaWVudCBhbmQgc2NvcGUgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhY2s6IExheWVyW10gPSBbe31dO1xuXG4gIC8qKiBDb250YWlucyB0aGUgbGFzdCBldmVudCBpZCBvZiBhIGNhcHR1cmVkIGV2ZW50LiAgKi9cbiAgcHJpdmF0ZSBfbGFzdEV2ZW50SWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGh1Yiwgd2lsbCBwdXNoIG9uZSB7QGxpbmsgTGF5ZXJ9IGludG8gdGhlXG4gICAqIGludGVybmFsIHN0YWNrIG9uIGNyZWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gY2xpZW50IGJvdW5kIHRvIHRoZSBodWIuXG4gICAqIEBwYXJhbSBzY29wZSBib3VuZCB0byB0aGUgaHViLlxuICAgKiBAcGFyYW0gdmVyc2lvbiBudW1iZXIsIGhpZ2hlciBudW1iZXIgbWVhbnMgaGlnaGVyIHByaW9yaXR5LlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNsaWVudD86IENsaWVudCwgc2NvcGU6IFNjb3BlID0gbmV3IFNjb3BlKCksIHByaXZhdGUgcmVhZG9ubHkgX3ZlcnNpb246IG51bWJlciA9IEFQSV9WRVJTSU9OKSB7XG4gICAgdGhpcy5nZXRTdGFja1RvcCgpLnNjb3BlID0gc2NvcGU7XG4gICAgaWYgKGNsaWVudCkge1xuICAgICAgdGhpcy5iaW5kQ2xpZW50KGNsaWVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgaXNPbGRlclRoYW4odmVyc2lvbjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZlcnNpb24gPCB2ZXJzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgYmluZENsaWVudChjbGllbnQ/OiBDbGllbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0b3AgPSB0aGlzLmdldFN0YWNrVG9wKCk7XG4gICAgdG9wLmNsaWVudCA9IGNsaWVudDtcbiAgICBpZiAoY2xpZW50ICYmIGNsaWVudC5zZXR1cEludGVncmF0aW9ucykge1xuICAgICAgY2xpZW50LnNldHVwSW50ZWdyYXRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgcHVzaFNjb3BlKCk6IFNjb3BlIHtcbiAgICAvLyBXZSB3YW50IHRvIGNsb25lIHRoZSBjb250ZW50IG9mIHByZXYgc2NvcGVcbiAgICBjb25zdCBzY29wZSA9IFNjb3BlLmNsb25lKHRoaXMuZ2V0U2NvcGUoKSk7XG4gICAgdGhpcy5nZXRTdGFjaygpLnB1c2goe1xuICAgICAgY2xpZW50OiB0aGlzLmdldENsaWVudCgpLFxuICAgICAgc2NvcGUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHNjb3BlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgcG9wU2NvcGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZ2V0U3RhY2soKS5sZW5ndGggPD0gMSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhIXRoaXMuZ2V0U3RhY2soKS5wb3AoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHdpdGhTY29wZShjYWxsYmFjazogKHNjb3BlOiBTY29wZSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5wdXNoU2NvcGUoKTtcbiAgICB0cnkge1xuICAgICAgY2FsbGJhY2soc2NvcGUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnBvcFNjb3BlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgZ2V0Q2xpZW50PEMgZXh0ZW5kcyBDbGllbnQ+KCk6IEMgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdldFN0YWNrVG9wKCkuY2xpZW50IGFzIEM7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgc2NvcGUgb2YgdGhlIHRvcCBzdGFjay4gKi9cbiAgcHVibGljIGdldFNjb3BlKCk6IFNjb3BlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGFja1RvcCgpLnNjb3BlO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIHNjb3BlIHN0YWNrIGZvciBkb21haW5zIG9yIHRoZSBwcm9jZXNzLiAqL1xuICBwdWJsaWMgZ2V0U3RhY2soKTogTGF5ZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YWNrO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIHRvcG1vc3Qgc2NvcGUgbGF5ZXIgaW4gdGhlIG9yZGVyIGRvbWFpbiA+IGxvY2FsID4gcHJvY2Vzcy4gKi9cbiAgcHVibGljIGdldFN0YWNrVG9wKCk6IExheWVyIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoIC0gMV07XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXG4gIHB1YmxpYyBjYXB0dXJlRXhjZXB0aW9uKGV4Y2VwdGlvbjogYW55LCBoaW50PzogRXZlbnRIaW50KTogc3RyaW5nIHtcbiAgICBjb25zdCBldmVudElkID0gKHRoaXMuX2xhc3RFdmVudElkID0gdXVpZDQoKSk7XG4gICAgbGV0IGZpbmFsSGludCA9IGhpbnQ7XG5cbiAgICAvLyBJZiB0aGVyZSdzIG5vIGV4cGxpY2l0IGhpbnQgcHJvdmlkZWQsIG1pbWljIHRoZSBzYW1lIHRoaW5nIHRoYXQgd291bGQgaGFwcGVuXG4gICAgLy8gaW4gdGhlIG1pbmltYWwgaXRzZWxmIHRvIGNyZWF0ZSBhIGNvbnNpc3RlbnQgYmVoYXZpb3IuXG4gICAgLy8gV2UgZG9uJ3QgZG8gdGhpcyBpbiB0aGUgY2xpZW50LCBhcyBpdCdzIHRoZSBsb3dlc3QgbGV2ZWwgQVBJLCBhbmQgZG9pbmcgdGhpcyxcbiAgICAvLyB3b3VsZCBwcmV2ZW50IHVzZXIgZnJvbSBoYXZpbmcgZnVsbCBjb250cm9sIG92ZXIgZGlyZWN0IGNhbGxzLlxuICAgIGlmICghaGludCkge1xuICAgICAgbGV0IHN5bnRoZXRpY0V4Y2VwdGlvbjogRXJyb3I7XG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlbnRyeSBzeW50aGV0aWNFeGNlcHRpb24nKTtcbiAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge1xuICAgICAgICBzeW50aGV0aWNFeGNlcHRpb24gPSBleGNlcHRpb24gYXMgRXJyb3I7XG4gICAgICB9XG4gICAgICBmaW5hbEhpbnQgPSB7XG4gICAgICAgIG9yaWdpbmFsRXhjZXB0aW9uOiBleGNlcHRpb24sXG4gICAgICAgIHN5bnRoZXRpY0V4Y2VwdGlvbixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5faW52b2tlQ2xpZW50KCdjYXB0dXJlRXhjZXB0aW9uJywgZXhjZXB0aW9uLCB7XG4gICAgICAuLi5maW5hbEhpbnQsXG4gICAgICBldmVudF9pZDogZXZlbnRJZCxcbiAgICB9KTtcbiAgICByZXR1cm4gZXZlbnRJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNhcHR1cmVNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZywgbGV2ZWw/OiBTZXZlcml0eSwgaGludD86IEV2ZW50SGludCk6IHN0cmluZyB7XG4gICAgY29uc3QgZXZlbnRJZCA9ICh0aGlzLl9sYXN0RXZlbnRJZCA9IHV1aWQ0KCkpO1xuICAgIGxldCBmaW5hbEhpbnQgPSBoaW50O1xuXG4gICAgLy8gSWYgdGhlcmUncyBubyBleHBsaWNpdCBoaW50IHByb3ZpZGVkLCBtaW1pYyB0aGUgc2FtZSB0aGluZyB0aGF0IHdvdWxkIGhhcHBlblxuICAgIC8vIGluIHRoZSBtaW5pbWFsIGl0c2VsZiB0byBjcmVhdGUgYSBjb25zaXN0ZW50IGJlaGF2aW9yLlxuICAgIC8vIFdlIGRvbid0IGRvIHRoaXMgaW4gdGhlIGNsaWVudCwgYXMgaXQncyB0aGUgbG93ZXN0IGxldmVsIEFQSSwgYW5kIGRvaW5nIHRoaXMsXG4gICAgLy8gd291bGQgcHJldmVudCB1c2VyIGZyb20gaGF2aW5nIGZ1bGwgY29udHJvbCBvdmVyIGRpcmVjdCBjYWxscy5cbiAgICBpZiAoIWhpbnQpIHtcbiAgICAgIGxldCBzeW50aGV0aWNFeGNlcHRpb246IEVycm9yO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICAgIHN5bnRoZXRpY0V4Y2VwdGlvbiA9IGV4Y2VwdGlvbiBhcyBFcnJvcjtcbiAgICAgIH1cbiAgICAgIGZpbmFsSGludCA9IHtcbiAgICAgICAgb3JpZ2luYWxFeGNlcHRpb246IG1lc3NhZ2UsXG4gICAgICAgIHN5bnRoZXRpY0V4Y2VwdGlvbixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5faW52b2tlQ2xpZW50KCdjYXB0dXJlTWVzc2FnZScsIG1lc3NhZ2UsIGxldmVsLCB7XG4gICAgICAuLi5maW5hbEhpbnQsXG4gICAgICBldmVudF9pZDogZXZlbnRJZCxcbiAgICB9KTtcbiAgICByZXR1cm4gZXZlbnRJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNhcHR1cmVFdmVudChldmVudDogRXZlbnQsIGhpbnQ/OiBFdmVudEhpbnQpOiBzdHJpbmcge1xuICAgIGNvbnN0IGV2ZW50SWQgPSB1dWlkNCgpO1xuICAgIGlmIChldmVudC50eXBlICE9PSAndHJhbnNhY3Rpb24nKSB7XG4gICAgICB0aGlzLl9sYXN0RXZlbnRJZCA9IGV2ZW50SWQ7XG4gICAgfVxuXG4gICAgdGhpcy5faW52b2tlQ2xpZW50KCdjYXB0dXJlRXZlbnQnLCBldmVudCwge1xuICAgICAgLi4uaGludCxcbiAgICAgIGV2ZW50X2lkOiBldmVudElkLFxuICAgIH0pO1xuICAgIHJldHVybiBldmVudElkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgbGFzdEV2ZW50SWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fbGFzdEV2ZW50SWQ7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBhZGRCcmVhZGNydW1iKGJyZWFkY3J1bWI6IEJyZWFkY3J1bWIsIGhpbnQ/OiBCcmVhZGNydW1iSGludCk6IHZvaWQge1xuICAgIGNvbnN0IHsgc2NvcGUsIGNsaWVudCB9ID0gdGhpcy5nZXRTdGFja1RvcCgpO1xuXG4gICAgaWYgKCFzY29wZSB8fCAhY2xpZW50KSByZXR1cm47XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgY29uc3QgeyBiZWZvcmVCcmVhZGNydW1iID0gbnVsbCwgbWF4QnJlYWRjcnVtYnMgPSBERUZBVUxUX0JSRUFEQ1JVTUJTIH0gPVxuICAgICAgKGNsaWVudC5nZXRPcHRpb25zICYmIGNsaWVudC5nZXRPcHRpb25zKCkpIHx8IHt9O1xuXG4gICAgaWYgKG1heEJyZWFkY3J1bWJzIDw9IDApIHJldHVybjtcblxuICAgIGNvbnN0IHRpbWVzdGFtcCA9IGRhdGVUaW1lc3RhbXBJblNlY29uZHMoKTtcbiAgICBjb25zdCBtZXJnZWRCcmVhZGNydW1iID0geyB0aW1lc3RhbXAsIC4uLmJyZWFkY3J1bWIgfTtcbiAgICBjb25zdCBmaW5hbEJyZWFkY3J1bWIgPSBiZWZvcmVCcmVhZGNydW1iXG4gICAgICA/IChjb25zb2xlU2FuZGJveCgoKSA9PiBiZWZvcmVCcmVhZGNydW1iKG1lcmdlZEJyZWFkY3J1bWIsIGhpbnQpKSBhcyBCcmVhZGNydW1iIHwgbnVsbClcbiAgICAgIDogbWVyZ2VkQnJlYWRjcnVtYjtcblxuICAgIGlmIChmaW5hbEJyZWFkY3J1bWIgPT09IG51bGwpIHJldHVybjtcblxuICAgIHNjb3BlLmFkZEJyZWFkY3J1bWIoZmluYWxCcmVhZGNydW1iLCBtYXhCcmVhZGNydW1icyk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXRVc2VyKHVzZXI6IFVzZXIgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLmdldFNjb3BlKCk7XG4gICAgaWYgKHNjb3BlKSBzY29wZS5zZXRVc2VyKHVzZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0VGFncyh0YWdzOiB7IFtrZXk6IHN0cmluZ106IFByaW1pdGl2ZSB9KTogdm9pZCB7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLmdldFNjb3BlKCk7XG4gICAgaWYgKHNjb3BlKSBzY29wZS5zZXRUYWdzKHRhZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0RXh0cmFzKGV4dHJhczogRXh0cmFzKTogdm9pZCB7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLmdldFNjb3BlKCk7XG4gICAgaWYgKHNjb3BlKSBzY29wZS5zZXRFeHRyYXMoZXh0cmFzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldFRhZyhrZXk6IHN0cmluZywgdmFsdWU6IFByaW1pdGl2ZSk6IHZvaWQge1xuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5nZXRTY29wZSgpO1xuICAgIGlmIChzY29wZSkgc2NvcGUuc2V0VGFnKGtleSwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0RXh0cmEoa2V5OiBzdHJpbmcsIGV4dHJhOiBFeHRyYSk6IHZvaWQge1xuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5nZXRTY29wZSgpO1xuICAgIGlmIChzY29wZSkgc2NvcGUuc2V0RXh0cmEoa2V5LCBleHRyYSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHB1YmxpYyBzZXRDb250ZXh0KG5hbWU6IHN0cmluZywgY29udGV4dDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwpOiB2b2lkIHtcbiAgICBjb25zdCBzY29wZSA9IHRoaXMuZ2V0U2NvcGUoKTtcbiAgICBpZiAoc2NvcGUpIHNjb3BlLnNldENvbnRleHQobmFtZSwgY29udGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBjb25maWd1cmVTY29wZShjYWxsYmFjazogKHNjb3BlOiBTY29wZSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHsgc2NvcGUsIGNsaWVudCB9ID0gdGhpcy5nZXRTdGFja1RvcCgpO1xuICAgIGlmIChzY29wZSAmJiBjbGllbnQpIHtcbiAgICAgIGNhbGxiYWNrKHNjb3BlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBydW4oY2FsbGJhY2s6IChodWI6IEh1YikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IG9sZEh1YiA9IG1ha2VNYWluKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBjYWxsYmFjayh0aGlzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbWFrZU1haW4ob2xkSHViKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBnZXRJbnRlZ3JhdGlvbjxUIGV4dGVuZHMgSW50ZWdyYXRpb24+KGludGVncmF0aW9uOiBJbnRlZ3JhdGlvbkNsYXNzPFQ+KTogVCB8IG51bGwge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0Q2xpZW50KCk7XG4gICAgaWYgKCFjbGllbnQpIHJldHVybiBudWxsO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY2xpZW50LmdldEludGVncmF0aW9uKGludGVncmF0aW9uKTtcbiAgICB9IGNhdGNoIChfb08pIHtcbiAgICAgIGxvZ2dlci53YXJuKGBDYW5ub3QgcmV0cmlldmUgaW50ZWdyYXRpb24gJHtpbnRlZ3JhdGlvbi5pZH0gZnJvbSB0aGUgY3VycmVudCBIdWJgKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHN0YXJ0U3Bhbihjb250ZXh0OiBTcGFuQ29udGV4dCk6IFNwYW4ge1xuICAgIHJldHVybiB0aGlzLl9jYWxsRXh0ZW5zaW9uTWV0aG9kKCdzdGFydFNwYW4nLCBjb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHN0YXJ0VHJhbnNhY3Rpb24oY29udGV4dDogVHJhbnNhY3Rpb25Db250ZXh0LCBjdXN0b21TYW1wbGluZ0NvbnRleHQ/OiBDdXN0b21TYW1wbGluZ0NvbnRleHQpOiBUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGxFeHRlbnNpb25NZXRob2QoJ3N0YXJ0VHJhbnNhY3Rpb24nLCBjb250ZXh0LCBjdXN0b21TYW1wbGluZ0NvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgdHJhY2VIZWFkZXJzKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB0aGlzLl9jYWxsRXh0ZW5zaW9uTWV0aG9kPHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0+KCd0cmFjZUhlYWRlcnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNhcHR1cmVTZXNzaW9uKGVuZFNlc3Npb246IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIC8vIGJvdGggc2VuZCB0aGUgdXBkYXRlIGFuZCBwdWxsIHRoZSBzZXNzaW9uIGZyb20gdGhlIHNjb3BlXG4gICAgaWYgKGVuZFNlc3Npb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZFNlc3Npb24oKTtcbiAgICB9XG5cbiAgICAvLyBvbmx5IHNlbmQgdGhlIHVwZGF0ZVxuICAgIHRoaXMuX3NlbmRTZXNzaW9uVXBkYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBlbmRTZXNzaW9uKCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0U3RhY2tUb3AoKVxuICAgICAgPy5zY29wZT8uZ2V0U2Vzc2lvbigpXG4gICAgICA/LmNsb3NlKCk7XG4gICAgdGhpcy5fc2VuZFNlc3Npb25VcGRhdGUoKTtcblxuICAgIC8vIHRoZSBzZXNzaW9uIGlzIG92ZXI7IHRha2UgaXQgb2ZmIG9mIHRoZSBzY29wZVxuICAgIHRoaXMuZ2V0U3RhY2tUb3AoKT8uc2NvcGU/LnNldFNlc3Npb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHN0YXJ0U2Vzc2lvbihjb250ZXh0PzogU2Vzc2lvbkNvbnRleHQpOiBTZXNzaW9uIHtcbiAgICBjb25zdCB7IHNjb3BlLCBjbGllbnQgfSA9IHRoaXMuZ2V0U3RhY2tUb3AoKTtcbiAgICBjb25zdCB7IHJlbGVhc2UsIGVudmlyb25tZW50IH0gPSAoY2xpZW50ICYmIGNsaWVudC5nZXRPcHRpb25zKCkpIHx8IHt9O1xuXG4gICAgLy8gV2lsbCBmZXRjaCB1c2VyQWdlbnQgaWYgY2FsbGVkIGZyb20gYnJvd3NlciBzZGtcbiAgICBjb25zdCBnbG9iYWwgPSBnZXRHbG9iYWxPYmplY3Q8eyBuYXZpZ2F0b3I/OiB7IHVzZXJBZ2VudD86IHN0cmluZyB9IH0+KCk7XG4gICAgY29uc3QgeyB1c2VyQWdlbnQgfSA9IGdsb2JhbC5uYXZpZ2F0b3IgfHwge307XG5cbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oe1xuICAgICAgcmVsZWFzZSxcbiAgICAgIGVudmlyb25tZW50LFxuICAgICAgLi4uKHNjb3BlICYmIHsgdXNlcjogc2NvcGUuZ2V0VXNlcigpIH0pLFxuICAgICAgLi4uKHVzZXJBZ2VudCAmJiB7IHVzZXJBZ2VudCB9KSxcbiAgICAgIC4uLmNvbnRleHQsXG4gICAgfSk7XG5cbiAgICBpZiAoc2NvcGUpIHtcbiAgICAgIC8vIEVuZCBleGlzdGluZyBzZXNzaW9uIGlmIHRoZXJlJ3Mgb25lXG4gICAgICBjb25zdCBjdXJyZW50U2Vzc2lvbiA9IHNjb3BlLmdldFNlc3Npb24gJiYgc2NvcGUuZ2V0U2Vzc2lvbigpO1xuICAgICAgaWYgKGN1cnJlbnRTZXNzaW9uICYmIGN1cnJlbnRTZXNzaW9uLnN0YXR1cyA9PT0gU2Vzc2lvblN0YXR1cy5Paykge1xuICAgICAgICBjdXJyZW50U2Vzc2lvbi51cGRhdGUoeyBzdGF0dXM6IFNlc3Npb25TdGF0dXMuRXhpdGVkIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5lbmRTZXNzaW9uKCk7XG5cbiAgICAgIC8vIEFmdGVyd2FyZHMgd2Ugc2V0IHRoZSBuZXcgc2Vzc2lvbiBvbiB0aGUgc2NvcGVcbiAgICAgIHNjb3BlLnNldFNlc3Npb24oc2Vzc2lvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlc3Npb247XG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgdGhlIGN1cnJlbnQgU2Vzc2lvbiBvbiB0aGUgc2NvcGVcbiAgICovXG4gIHByaXZhdGUgX3NlbmRTZXNzaW9uVXBkYXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgc2NvcGUsIGNsaWVudCB9ID0gdGhpcy5nZXRTdGFja1RvcCgpO1xuICAgIGlmICghc2NvcGUpIHJldHVybjtcblxuICAgIGNvbnN0IHNlc3Npb24gPSBzY29wZS5nZXRTZXNzaW9uICYmIHNjb3BlLmdldFNlc3Npb24oKTtcbiAgICBpZiAoc2Vzc2lvbikge1xuICAgICAgaWYgKGNsaWVudCAmJiBjbGllbnQuY2FwdHVyZVNlc3Npb24pIHtcbiAgICAgICAgY2xpZW50LmNhcHR1cmVTZXNzaW9uKHNlc3Npb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gdG8gY2FsbCBhIG1ldGhvZCBvbiB0aGUgdG9wIGNsaWVudCBpZiBpdCBleGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSBtZXRob2QgVGhlIG1ldGhvZCB0byBjYWxsIG9uIHRoZSBjbGllbnQuXG4gICAqIEBwYXJhbSBhcmdzIEFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBjbGllbnQgZnVuY3Rpb24uXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwcml2YXRlIF9pbnZva2VDbGllbnQ8TSBleHRlbmRzIGtleW9mIENsaWVudD4obWV0aG9kOiBNLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgIGNvbnN0IHsgc2NvcGUsIGNsaWVudCB9ID0gdGhpcy5nZXRTdGFja1RvcCgpO1xuICAgIGlmIChjbGllbnQgJiYgY2xpZW50W21ldGhvZF0pIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MsIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIChjbGllbnQgYXMgYW55KVttZXRob2RdKC4uLmFyZ3MsIHNjb3BlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgZ2xvYmFsIGV4dGVuc2lvbiBtZXRob2QgYW5kIGJpbmRpbmcgY3VycmVudCBpbnN0YW5jZSB0byB0aGUgZnVuY3Rpb24gY2FsbFxuICAgKi9cbiAgLy8gQHRzLWlnbm9yZSBGdW5jdGlvbiBsYWNrcyBlbmRpbmcgcmV0dXJuIHN0YXRlbWVudCBhbmQgcmV0dXJuIHR5cGUgZG9lcyBub3QgaW5jbHVkZSAndW5kZWZpbmVkJy4gdHMoMjM2NilcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcHJpdmF0ZSBfY2FsbEV4dGVuc2lvbk1ldGhvZDxUPihtZXRob2Q6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBUIHtcbiAgICBjb25zdCBjYXJyaWVyID0gZ2V0TWFpbkNhcnJpZXIoKTtcbiAgICBjb25zdCBzZW50cnkgPSBjYXJyaWVyLl9fU0VOVFJZX187XG4gICAgaWYgKHNlbnRyeSAmJiBzZW50cnkuZXh0ZW5zaW9ucyAmJiB0eXBlb2Ygc2VudHJ5LmV4dGVuc2lvbnNbbWV0aG9kXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHNlbnRyeS5leHRlbnNpb25zW21ldGhvZF0uYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGxvZ2dlci53YXJuKGBFeHRlbnNpb24gbWV0aG9kICR7bWV0aG9kfSBjb3VsZG4ndCBiZSBmb3VuZCwgZG9pbmcgbm90aGluZy5gKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGdsb2JhbCBzaGltIHJlZ2lzdHJ5LlxuICpcbiAqIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIHByb2JsZW1hdGljLCBiZWNhdXNlIGRlc3BpdGUgYWx3YXlzIHJldHVybmluZyBhIHZhbGlkIENhcnJpZXIsXG4gKiBpdCBoYXMgYW4gb3B0aW9uYWwgYF9fU0VOVFJZX19gIHByb3BlcnR5LCB3aGljaCB0aGVuIGluIHR1cm4gcmVxdWlyZXMgdXMgdG8gYWx3YXlzIHBlcmZvcm0gYW4gdW5uZWNlc3NhcnkgY2hlY2tcbiAqIGF0IHRoZSBjYWxsLXNpdGUuIFdlIGFsd2F5cyBhY2Nlc3MgdGhlIGNhcnJpZXIgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uLCBzbyB3ZSBjYW4gZ3VhcmFudGVlIHRoYXQgYF9fU0VOVFJZX19gIGlzIHRoZXJlLlxuICoqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1haW5DYXJyaWVyKCk6IENhcnJpZXIge1xuICBjb25zdCBjYXJyaWVyID0gZ2V0R2xvYmFsT2JqZWN0KCk7XG4gIGNhcnJpZXIuX19TRU5UUllfXyA9IGNhcnJpZXIuX19TRU5UUllfXyB8fCB7XG4gICAgZXh0ZW5zaW9uczoge30sXG4gICAgaHViOiB1bmRlZmluZWQsXG4gIH07XG4gIHJldHVybiBjYXJyaWVyO1xufVxuXG4vKipcbiAqIFJlcGxhY2VzIHRoZSBjdXJyZW50IG1haW4gaHViIHdpdGggdGhlIHBhc3NlZCBvbmUgb24gdGhlIGdsb2JhbCBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyBUaGUgb2xkIHJlcGxhY2VkIGh1YlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZU1haW4oaHViOiBIdWIpOiBIdWIge1xuICBjb25zdCByZWdpc3RyeSA9IGdldE1haW5DYXJyaWVyKCk7XG4gIGNvbnN0IG9sZEh1YiA9IGdldEh1YkZyb21DYXJyaWVyKHJlZ2lzdHJ5KTtcbiAgc2V0SHViT25DYXJyaWVyKHJlZ2lzdHJ5LCBodWIpO1xuICByZXR1cm4gb2xkSHViO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGRlZmF1bHQgaHViIGluc3RhbmNlLlxuICpcbiAqIElmIGEgaHViIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBpbiB0aGUgZ2xvYmFsIGNhcnJpZXIgYnV0IHRoaXMgbW9kdWxlXG4gKiBjb250YWlucyBhIG1vcmUgcmVjZW50IHZlcnNpb24sIGl0IHJlcGxhY2VzIHRoZSByZWdpc3RlcmVkIHZlcnNpb24uXG4gKiBPdGhlcndpc2UsIHRoZSBjdXJyZW50bHkgcmVnaXN0ZXJlZCBodWIgd2lsbCBiZSByZXR1cm5lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRIdWIoKTogSHViIHtcbiAgLy8gR2V0IG1haW4gY2FycmllciAoZ2xvYmFsIGZvciBldmVyeSBlbnZpcm9ubWVudClcbiAgY29uc3QgcmVnaXN0cnkgPSBnZXRNYWluQ2FycmllcigpO1xuXG4gIC8vIElmIHRoZXJlJ3Mgbm8gaHViLCBvciBpdHMgYW4gb2xkIEFQSSwgYXNzaWduIGEgbmV3IG9uZVxuICBpZiAoIWhhc0h1Yk9uQ2FycmllcihyZWdpc3RyeSkgfHwgZ2V0SHViRnJvbUNhcnJpZXIocmVnaXN0cnkpLmlzT2xkZXJUaGFuKEFQSV9WRVJTSU9OKSkge1xuICAgIHNldEh1Yk9uQ2FycmllcihyZWdpc3RyeSwgbmV3IEh1YigpKTtcbiAgfVxuXG4gIC8vIFByZWZlciBkb21haW5zIG92ZXIgZ2xvYmFsIGlmIHRoZXkgYXJlIHRoZXJlIChhcHBsaWNhYmxlIG9ubHkgdG8gTm9kZSBlbnZpcm9ubWVudClcbiAgaWYgKGlzTm9kZUVudigpKSB7XG4gICAgcmV0dXJuIGdldEh1YkZyb21BY3RpdmVEb21haW4ocmVnaXN0cnkpO1xuICB9XG4gIC8vIFJldHVybiBodWIgdGhhdCBsaXZlcyBvbiBhIGdsb2JhbCBvYmplY3RcbiAgcmV0dXJuIGdldEh1YkZyb21DYXJyaWVyKHJlZ2lzdHJ5KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhY3RpdmUgZG9tYWluLCBpZiBvbmUgZXhpc3RzXG4gKiBAZGVwcmVjYXRlZCBObyBsb25nZXIgdXNlZDsgcmVtb3ZlIGluIHY3XG4gKiBAcmV0dXJucyBUaGUgZG9tYWluLCBvciB1bmRlZmluZWQgaWYgdGhlcmUgaXMgbm8gYWN0aXZlIGRvbWFpblxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3RpdmVEb21haW4oKTogRG9tYWluQXNDYXJyaWVyIHwgdW5kZWZpbmVkIHtcbiAgbG9nZ2VyLndhcm4oJ0Z1bmN0aW9uIGBnZXRBY3RpdmVEb21haW5gIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLicpO1xuXG4gIGNvbnN0IHNlbnRyeSA9IGdldE1haW5DYXJyaWVyKCkuX19TRU5UUllfXztcblxuICByZXR1cm4gc2VudHJ5ICYmIHNlbnRyeS5leHRlbnNpb25zICYmIHNlbnRyeS5leHRlbnNpb25zLmRvbWFpbiAmJiBzZW50cnkuZXh0ZW5zaW9ucy5kb21haW4uYWN0aXZlO1xufVxuXG4vKipcbiAqIFRyeSB0byByZWFkIHRoZSBodWIgZnJvbSBhbiBhY3RpdmUgZG9tYWluLCBhbmQgZmFsbGJhY2sgdG8gdGhlIHJlZ2lzdHJ5IGlmIG9uZSBkb2Vzbid0IGV4aXN0XG4gKiBAcmV0dXJucyBkaXNjb3ZlcmVkIGh1YlxuICovXG5mdW5jdGlvbiBnZXRIdWJGcm9tQWN0aXZlRG9tYWluKHJlZ2lzdHJ5OiBDYXJyaWVyKTogSHViIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBhY3RpdmVEb21haW4gPSBnZXRNYWluQ2FycmllcigpLl9fU0VOVFJZX18/LmV4dGVuc2lvbnM/LmRvbWFpbj8uYWN0aXZlO1xuXG4gICAgLy8gSWYgdGhlcmUncyBubyBhY3RpdmUgZG9tYWluLCBqdXN0IHJldHVybiBnbG9iYWwgaHViXG4gICAgaWYgKCFhY3RpdmVEb21haW4pIHtcbiAgICAgIHJldHVybiBnZXRIdWJGcm9tQ2FycmllcihyZWdpc3RyeSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUncyBubyBodWIgb24gY3VycmVudCBkb21haW4sIG9yIGl0J3MgYW4gb2xkIEFQSSwgYXNzaWduIGEgbmV3IG9uZVxuICAgIGlmICghaGFzSHViT25DYXJyaWVyKGFjdGl2ZURvbWFpbikgfHwgZ2V0SHViRnJvbUNhcnJpZXIoYWN0aXZlRG9tYWluKS5pc09sZGVyVGhhbihBUElfVkVSU0lPTikpIHtcbiAgICAgIGNvbnN0IHJlZ2lzdHJ5SHViVG9wU3RhY2sgPSBnZXRIdWJGcm9tQ2FycmllcihyZWdpc3RyeSkuZ2V0U3RhY2tUb3AoKTtcbiAgICAgIHNldEh1Yk9uQ2FycmllcihhY3RpdmVEb21haW4sIG5ldyBIdWIocmVnaXN0cnlIdWJUb3BTdGFjay5jbGllbnQsIFNjb3BlLmNsb25lKHJlZ2lzdHJ5SHViVG9wU3RhY2suc2NvcGUpKSk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGh1YiB0aGF0IGxpdmVzIG9uIGEgZG9tYWluXG4gICAgcmV0dXJuIGdldEh1YkZyb21DYXJyaWVyKGFjdGl2ZURvbWFpbik7XG4gIH0gY2F0Y2ggKF9Pbykge1xuICAgIC8vIFJldHVybiBodWIgdGhhdCBsaXZlcyBvbiBhIGdsb2JhbCBvYmplY3RcbiAgICByZXR1cm4gZ2V0SHViRnJvbUNhcnJpZXIocmVnaXN0cnkpO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyB3aWxsIHRlbGwgd2hldGhlciBhIGNhcnJpZXIgaGFzIGEgaHViIG9uIGl0IG9yIG5vdFxuICogQHBhcmFtIGNhcnJpZXIgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGhhc0h1Yk9uQ2FycmllcihjYXJyaWVyOiBDYXJyaWVyKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIShjYXJyaWVyICYmIGNhcnJpZXIuX19TRU5UUllfXyAmJiBjYXJyaWVyLl9fU0VOVFJZX18uaHViKTtcbn1cblxuLyoqXG4gKiBUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IHtAbGluayBIdWJ9IGFuZCBhZGQgdG8gdGhlIHBhc3NlZCBvYmplY3Qgb25cbiAqIF9fU0VOVFJZX18uaHViLlxuICogQHBhcmFtIGNhcnJpZXIgb2JqZWN0XG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIdWJGcm9tQ2FycmllcihjYXJyaWVyOiBDYXJyaWVyKTogSHViIHtcbiAgaWYgKGNhcnJpZXIgJiYgY2Fycmllci5fX1NFTlRSWV9fICYmIGNhcnJpZXIuX19TRU5UUllfXy5odWIpIHJldHVybiBjYXJyaWVyLl9fU0VOVFJZX18uaHViO1xuICBjYXJyaWVyLl9fU0VOVFJZX18gPSBjYXJyaWVyLl9fU0VOVFJZX18gfHwge307XG4gIGNhcnJpZXIuX19TRU5UUllfXy5odWIgPSBuZXcgSHViKCk7XG4gIHJldHVybiBjYXJyaWVyLl9fU0VOVFJZX18uaHViO1xufVxuXG4vKipcbiAqIFRoaXMgd2lsbCBzZXQgcGFzc2VkIHtAbGluayBIdWJ9IG9uIHRoZSBwYXNzZWQgb2JqZWN0J3MgX19TRU5UUllfXy5odWIgYXR0cmlidXRlXG4gKiBAcGFyYW0gY2FycmllciBvYmplY3RcbiAqIEBwYXJhbSBodWIgSHViXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEh1Yk9uQ2FycmllcihjYXJyaWVyOiBDYXJyaWVyLCBodWI6IEh1Yik6IGJvb2xlYW4ge1xuICBpZiAoIWNhcnJpZXIpIHJldHVybiBmYWxzZTtcbiAgY2Fycmllci5fX1NFTlRSWV9fID0gY2Fycmllci5fX1NFTlRSWV9fIHx8IHt9O1xuICBjYXJyaWVyLl9fU0VOVFJZX18uaHViID0gaHViO1xuICByZXR1cm4gdHJ1ZTtcbn1cbiIsICJpbXBvcnQge1xuICBBZ2dyZWdhdGlvbkNvdW50cyxcbiAgUmVxdWVzdFNlc3Npb25TdGF0dXMsXG4gIFNlc3Npb25BZ2dyZWdhdGVzLFxuICBTZXNzaW9uRmx1c2hlckxpa2UsXG4gIFRyYW5zcG9ydCxcbn0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBkcm9wVW5kZWZpbmVkS2V5cywgbG9nZ2VyIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmltcG9ydCB7IGdldEN1cnJlbnRIdWIgfSBmcm9tICcuL2h1Yic7XG5cbnR5cGUgUmVsZWFzZUhlYWx0aEF0dHJpYnV0ZXMgPSB7XG4gIGVudmlyb25tZW50Pzogc3RyaW5nO1xuICByZWxlYXNlOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEBpbmhlcml0ZG9jXG4gKi9cbmV4cG9ydCBjbGFzcyBTZXNzaW9uRmx1c2hlciBpbXBsZW1lbnRzIFNlc3Npb25GbHVzaGVyTGlrZSB7XG4gIHB1YmxpYyByZWFkb25seSBmbHVzaFRpbWVvdXQ6IG51bWJlciA9IDYwO1xuICBwcml2YXRlIF9wZW5kaW5nQWdncmVnYXRlczogUmVjb3JkPG51bWJlciwgQWdncmVnYXRpb25Db3VudHM+ID0ge307XG4gIHByaXZhdGUgX3Nlc3Npb25BdHRyczogUmVsZWFzZUhlYWx0aEF0dHJpYnV0ZXM7XG4gIHByaXZhdGUgX2ludGVydmFsSWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPjtcbiAgcHJpdmF0ZSBfaXNFbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfdHJhbnNwb3J0OiBUcmFuc3BvcnQ7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHRyYW5zcG9ydDogVHJhbnNwb3J0LCBhdHRyczogUmVsZWFzZUhlYWx0aEF0dHJpYnV0ZXMpIHtcbiAgICB0aGlzLl90cmFuc3BvcnQgPSB0cmFuc3BvcnQ7XG4gICAgLy8gQ2FsbCB0byBzZXRJbnRlcnZhbCwgc28gdGhhdCBmbHVzaCBpcyBjYWxsZWQgZXZlcnkgNjAgc2Vjb25kc1xuICAgIHRoaXMuX2ludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLmZsdXNoKCksIHRoaXMuZmx1c2hUaW1lb3V0ICogMTAwMCk7XG4gICAgdGhpcy5fc2Vzc2lvbkF0dHJzID0gYXR0cnM7XG4gIH1cblxuICAvKiogU2VuZHMgc2Vzc2lvbiBhZ2dyZWdhdGVzIHRvIFRyYW5zcG9ydCAqL1xuICBwdWJsaWMgc2VuZFNlc3Npb25BZ2dyZWdhdGVzKHNlc3Npb25BZ2dyZWdhdGVzOiBTZXNzaW9uQWdncmVnYXRlcyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdHJhbnNwb3J0LnNlbmRTZXNzaW9uKSB7XG4gICAgICBsb2dnZXIud2FybihcIkRyb3BwaW5nIHNlc3Npb24gYmVjYXVzZSBjdXN0b20gdHJhbnNwb3J0IGRvZXNuJ3QgaW1wbGVtZW50IHNlbmRTZXNzaW9uXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2b2lkIHRoaXMuX3RyYW5zcG9ydC5zZW5kU2Vzc2lvbihzZXNzaW9uQWdncmVnYXRlcykudGhlbihudWxsLCByZWFzb24gPT4ge1xuICAgICAgbG9nZ2VyLmVycm9yKGBFcnJvciB3aGlsZSBzZW5kaW5nIHNlc3Npb246ICR7cmVhc29ufWApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIENoZWNrcyBpZiBgcGVuZGluZ0FnZ3JlZ2F0ZXNgIGhhcyBlbnRyaWVzLCBhbmQgaWYgaXQgZG9lcyBmbHVzaGVzIHRoZW0gYnkgY2FsbGluZyBgc2VuZFNlc3Npb25zYCAqL1xuICBwdWJsaWMgZmx1c2goKTogdm9pZCB7XG4gICAgY29uc3Qgc2Vzc2lvbkFnZ3JlZ2F0ZXMgPSB0aGlzLmdldFNlc3Npb25BZ2dyZWdhdGVzKCk7XG4gICAgaWYgKHNlc3Npb25BZ2dyZWdhdGVzLmFnZ3JlZ2F0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3BlbmRpbmdBZ2dyZWdhdGVzID0ge307XG4gICAgdGhpcy5zZW5kU2Vzc2lvbkFnZ3JlZ2F0ZXMoc2Vzc2lvbkFnZ3JlZ2F0ZXMpO1xuICB9XG5cbiAgLyoqIE1hc3NhZ2VzIHRoZSBlbnRyaWVzIGluIGBwZW5kaW5nQWdncmVnYXRlc2AgYW5kIHJldHVybnMgYWdncmVnYXRlZCBzZXNzaW9ucyAqL1xuICBwdWJsaWMgZ2V0U2Vzc2lvbkFnZ3JlZ2F0ZXMoKTogU2Vzc2lvbkFnZ3JlZ2F0ZXMge1xuICAgIGNvbnN0IGFnZ3JlZ2F0ZXM6IEFnZ3JlZ2F0aW9uQ291bnRzW10gPSBPYmplY3Qua2V5cyh0aGlzLl9wZW5kaW5nQWdncmVnYXRlcykubWFwKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdBZ2dyZWdhdGVzW3BhcnNlSW50KGtleSldO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc2Vzc2lvbkFnZ3JlZ2F0ZXM6IFNlc3Npb25BZ2dyZWdhdGVzID0ge1xuICAgICAgYXR0cnM6IHRoaXMuX3Nlc3Npb25BdHRycyxcbiAgICAgIGFnZ3JlZ2F0ZXMsXG4gICAgfTtcbiAgICByZXR1cm4gZHJvcFVuZGVmaW5lZEtleXMoc2Vzc2lvbkFnZ3JlZ2F0ZXMpO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICBjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsSWQpO1xuICAgIHRoaXMuX2lzRW5hYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmx1c2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciBfaW5jcmVtZW50U2Vzc2lvblN0YXR1c0NvdW50IHRoYXQgY2hlY2tzIGlmIHRoZSBpbnN0YW5jZSBvZiBTZXNzaW9uRmx1c2hlciBpcyBlbmFibGVkIHRoZW5cbiAgICogZmV0Y2hlcyB0aGUgc2Vzc2lvbiBzdGF0dXMgb2YgdGhlIHJlcXVlc3QgZnJvbSBgU2NvcGUuZ2V0UmVxdWVzdFNlc3Npb24oKS5zdGF0dXNgIG9uIHRoZSBzY29wZSBhbmQgcGFzc2VzIHRoZW0gdG9cbiAgICogYF9pbmNyZW1lbnRTZXNzaW9uU3RhdHVzQ291bnRgIGFsb25nIHdpdGggdGhlIHN0YXJ0IGRhdGVcbiAgICovXG4gIHB1YmxpYyBpbmNyZW1lbnRTZXNzaW9uU3RhdHVzQ291bnQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRDdXJyZW50SHViKCkuZ2V0U2NvcGUoKTtcbiAgICBjb25zdCByZXF1ZXN0U2Vzc2lvbiA9IHNjb3BlPy5nZXRSZXF1ZXN0U2Vzc2lvbigpO1xuXG4gICAgaWYgKHJlcXVlc3RTZXNzaW9uICYmIHJlcXVlc3RTZXNzaW9uLnN0YXR1cykge1xuICAgICAgdGhpcy5faW5jcmVtZW50U2Vzc2lvblN0YXR1c0NvdW50KHJlcXVlc3RTZXNzaW9uLnN0YXR1cywgbmV3IERhdGUoKSk7XG4gICAgICAvLyBUaGlzIGlzIG5vdCBlbnRpcmVseSBuZWNlc3NhcmlseSBidXQgaXMgYWRkZWQgYXMgYSBzYWZlIGd1YXJkIHRvIGluZGljYXRlIHRoZSBib3VuZHMgb2YgYSByZXF1ZXN0IGFuZCBzbyBpblxuICAgICAgLy8gY2FzZSBjYXB0dXJlUmVxdWVzdFNlc3Npb24gaXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIHRvIHByZXZlbnQgZG91YmxlIGNvdW50XG4gICAgICBzY29wZT8uc2V0UmVxdWVzdFNlc3Npb24odW5kZWZpbmVkKTtcblxuICAgICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi9cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5jcmVtZW50cyBzdGF0dXMgYnVja2V0IGluIHBlbmRpbmdBZ2dyZWdhdGVzIGJ1ZmZlciAoaW50ZXJuYWwgc3RhdGUpIGNvcnJlc3BvbmRpbmcgdG8gc3RhdHVzIG9mXG4gICAqIHRoZSBzZXNzaW9uIHJlY2VpdmVkXG4gICAqL1xuICBwcml2YXRlIF9pbmNyZW1lbnRTZXNzaW9uU3RhdHVzQ291bnQoc3RhdHVzOiBSZXF1ZXN0U2Vzc2lvblN0YXR1cywgZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgLy8gVHJ1bmNhdGUgbWludXRlcyBhbmQgc2Vjb25kcyBvbiBTZXNzaW9uIFN0YXJ0ZWQgYXR0cmlidXRlIHRvIGhhdmUgb25lIG1pbnV0ZSBidWNrZXQga2V5c1xuICAgIGNvbnN0IHNlc3Npb25TdGFydGVkVHJ1bmMgPSBuZXcgRGF0ZShkYXRlKS5zZXRTZWNvbmRzKDAsIDApO1xuICAgIHRoaXMuX3BlbmRpbmdBZ2dyZWdhdGVzW3Nlc3Npb25TdGFydGVkVHJ1bmNdID0gdGhpcy5fcGVuZGluZ0FnZ3JlZ2F0ZXNbc2Vzc2lvblN0YXJ0ZWRUcnVuY10gfHwge307XG5cbiAgICAvLyBjb3JyZXNwb25kcyB0byBhZ2dyZWdhdGVkIHNlc3Npb25zIGluIG9uZSBzcGVjaWZpYyBtaW51dGUgYnVja2V0XG4gICAgLy8gZm9yIGV4YW1wbGUsIHtcInN0YXJ0ZWRcIjpcIjIwMjEtMDMtMTZUMDg6MDA6MDAuMDAwWlwiLFwiZXhpdGVkXCI6NCwgXCJlcnJvcmVkXCI6IDF9XG4gICAgY29uc3QgYWdncmVnYXRpb25Db3VudHM6IEFnZ3JlZ2F0aW9uQ291bnRzID0gdGhpcy5fcGVuZGluZ0FnZ3JlZ2F0ZXNbc2Vzc2lvblN0YXJ0ZWRUcnVuY107XG4gICAgaWYgKCFhZ2dyZWdhdGlvbkNvdW50cy5zdGFydGVkKSB7XG4gICAgICBhZ2dyZWdhdGlvbkNvdW50cy5zdGFydGVkID0gbmV3IERhdGUoc2Vzc2lvblN0YXJ0ZWRUcnVuYykudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSBSZXF1ZXN0U2Vzc2lvblN0YXR1cy5FcnJvcmVkOlxuICAgICAgICBhZ2dyZWdhdGlvbkNvdW50cy5lcnJvcmVkID0gKGFnZ3JlZ2F0aW9uQ291bnRzLmVycm9yZWQgfHwgMCkgKyAxO1xuICAgICAgICByZXR1cm4gYWdncmVnYXRpb25Db3VudHMuZXJyb3JlZDtcbiAgICAgIGNhc2UgUmVxdWVzdFNlc3Npb25TdGF0dXMuT2s6XG4gICAgICAgIGFnZ3JlZ2F0aW9uQ291bnRzLmV4aXRlZCA9IChhZ2dyZWdhdGlvbkNvdW50cy5leGl0ZWQgfHwgMCkgKyAxO1xuICAgICAgICByZXR1cm4gYWdncmVnYXRpb25Db3VudHMuZXhpdGVkO1xuICAgICAgY2FzZSBSZXF1ZXN0U2Vzc2lvblN0YXR1cy5DcmFzaGVkOlxuICAgICAgICBhZ2dyZWdhdGlvbkNvdW50cy5jcmFzaGVkID0gKGFnZ3JlZ2F0aW9uQ291bnRzLmNyYXNoZWQgfHwgMCkgKyAxO1xuICAgICAgICByZXR1cm4gYWdncmVnYXRpb25Db3VudHMuY3Jhc2hlZDtcbiAgICB9XG4gIH1cbn1cbiIsICJleHBvcnQgeyBhZGRHbG9iYWxFdmVudFByb2Nlc3NvciwgU2NvcGUgfSBmcm9tICcuL3Njb3BlJztcbmV4cG9ydCB7IFNlc3Npb24gfSBmcm9tICcuL3Nlc3Npb24nO1xuZXhwb3J0IHsgU2Vzc2lvbkZsdXNoZXIgfSBmcm9tICcuL3Nlc3Npb25mbHVzaGVyJztcbmV4cG9ydCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBnZXRBY3RpdmVEb21haW4sXG4gIGdldEN1cnJlbnRIdWIsXG4gIGdldEh1YkZyb21DYXJyaWVyLFxuICBnZXRNYWluQ2FycmllcixcbiAgSHViLFxuICBtYWtlTWFpbixcbiAgc2V0SHViT25DYXJyaWVyLFxuICBDYXJyaWVyLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgRG9tYWluQXNDYXJyaWVyLFxuICBMYXllcixcbn0gZnJvbSAnLi9odWInO1xuIiwgImltcG9ydCB7IGdldEN1cnJlbnRIdWIsIEh1YiwgU2NvcGUgfSBmcm9tICdAc2VudHJ5L2h1Yic7XG5pbXBvcnQge1xuICBCcmVhZGNydW1iLFxuICBDYXB0dXJlQ29udGV4dCxcbiAgQ3VzdG9tU2FtcGxpbmdDb250ZXh0LFxuICBFdmVudCxcbiAgRXh0cmEsXG4gIEV4dHJhcyxcbiAgUHJpbWl0aXZlLFxuICBTZXZlcml0eSxcbiAgVHJhbnNhY3Rpb24sXG4gIFRyYW5zYWN0aW9uQ29udGV4dCxcbiAgVXNlcixcbn0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5cbi8qKlxuICogVGhpcyBjYWxscyBhIGZ1bmN0aW9uIG9uIHRoZSBjdXJyZW50IGh1Yi5cbiAqIEBwYXJhbSBtZXRob2QgZnVuY3Rpb24gdG8gY2FsbCBvbiBodWIuXG4gKiBAcGFyYW0gYXJncyB0byBwYXNzIHRvIGZ1bmN0aW9uLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gY2FsbE9uSHViPFQ+KG1ldGhvZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFQge1xuICBjb25zdCBodWIgPSBnZXRDdXJyZW50SHViKCk7XG4gIGlmIChodWIgJiYgaHViW21ldGhvZCBhcyBrZXlvZiBIdWJdKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICByZXR1cm4gKGh1YlttZXRob2QgYXMga2V5b2YgSHViXSBhcyBhbnkpKC4uLmFyZ3MpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgTm8gaHViIGRlZmluZWQgb3IgJHttZXRob2R9IHdhcyBub3QgZm91bmQgb24gdGhlIGh1YiwgcGxlYXNlIG9wZW4gYSBidWcgcmVwb3J0LmApO1xufVxuXG4vKipcbiAqIENhcHR1cmVzIGFuIGV4Y2VwdGlvbiBldmVudCBhbmQgc2VuZHMgaXQgdG8gU2VudHJ5LlxuICpcbiAqIEBwYXJhbSBleGNlcHRpb24gQW4gZXhjZXB0aW9uLWxpa2Ugb2JqZWN0LlxuICogQHJldHVybnMgVGhlIGdlbmVyYXRlZCBldmVudElkLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xuZXhwb3J0IGZ1bmN0aW9uIGNhcHR1cmVFeGNlcHRpb24oZXhjZXB0aW9uOiBhbnksIGNhcHR1cmVDb250ZXh0PzogQ2FwdHVyZUNvbnRleHQpOiBzdHJpbmcge1xuICBsZXQgc3ludGhldGljRXhjZXB0aW9uOiBFcnJvcjtcbiAgdHJ5IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlbnRyeSBzeW50aGV0aWNFeGNlcHRpb24nKTtcbiAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgc3ludGhldGljRXhjZXB0aW9uID0gZXhjZXB0aW9uIGFzIEVycm9yO1xuICB9XG4gIHJldHVybiBjYWxsT25IdWIoJ2NhcHR1cmVFeGNlcHRpb24nLCBleGNlcHRpb24sIHtcbiAgICBjYXB0dXJlQ29udGV4dCxcbiAgICBvcmlnaW5hbEV4Y2VwdGlvbjogZXhjZXB0aW9uLFxuICAgIHN5bnRoZXRpY0V4Y2VwdGlvbixcbiAgfSk7XG59XG5cbi8qKlxuICogQ2FwdHVyZXMgYSBtZXNzYWdlIGV2ZW50IGFuZCBzZW5kcyBpdCB0byBTZW50cnkuXG4gKlxuICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gc2VuZCB0byBTZW50cnkuXG4gKiBAcGFyYW0gbGV2ZWwgRGVmaW5lIHRoZSBsZXZlbCBvZiB0aGUgbWVzc2FnZS5cbiAqIEByZXR1cm5zIFRoZSBnZW5lcmF0ZWQgZXZlbnRJZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhcHR1cmVNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZywgY2FwdHVyZUNvbnRleHQ/OiBDYXB0dXJlQ29udGV4dCB8IFNldmVyaXR5KTogc3RyaW5nIHtcbiAgbGV0IHN5bnRoZXRpY0V4Y2VwdGlvbjogRXJyb3I7XG4gIHRyeSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICBzeW50aGV0aWNFeGNlcHRpb24gPSBleGNlcHRpb24gYXMgRXJyb3I7XG4gIH1cblxuICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSB0byBwcm92aWRlIGV4cGxpY2l0IHNjb3BlcyB1cGdyYWRlLCB3aXRob3V0IGNoYW5naW5nIHRoZSBvcmlnaW5hbFxuICAvLyBhcml0eSBvZiB0aGUgYGNhcHR1cmVNZXNzYWdlKG1lc3NhZ2UsIGxldmVsKWAgbWV0aG9kLlxuICBjb25zdCBsZXZlbCA9IHR5cGVvZiBjYXB0dXJlQ29udGV4dCA9PT0gJ3N0cmluZycgPyBjYXB0dXJlQ29udGV4dCA6IHVuZGVmaW5lZDtcbiAgY29uc3QgY29udGV4dCA9IHR5cGVvZiBjYXB0dXJlQ29udGV4dCAhPT0gJ3N0cmluZycgPyB7IGNhcHR1cmVDb250ZXh0IH0gOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIGNhbGxPbkh1YignY2FwdHVyZU1lc3NhZ2UnLCBtZXNzYWdlLCBsZXZlbCwge1xuICAgIG9yaWdpbmFsRXhjZXB0aW9uOiBtZXNzYWdlLFxuICAgIHN5bnRoZXRpY0V4Y2VwdGlvbixcbiAgICAuLi5jb250ZXh0LFxuICB9KTtcbn1cblxuLyoqXG4gKiBDYXB0dXJlcyBhIG1hbnVhbGx5IGNyZWF0ZWQgZXZlbnQgYW5kIHNlbmRzIGl0IHRvIFNlbnRyeS5cbiAqXG4gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRvIHNlbmQgdG8gU2VudHJ5LlxuICogQHJldHVybnMgVGhlIGdlbmVyYXRlZCBldmVudElkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwdHVyZUV2ZW50KGV2ZW50OiBFdmVudCk6IHN0cmluZyB7XG4gIHJldHVybiBjYWxsT25IdWIoJ2NhcHR1cmVFdmVudCcsIGV2ZW50KTtcbn1cblxuLyoqXG4gKiBDYWxsYmFjayB0byBzZXQgY29udGV4dCBpbmZvcm1hdGlvbiBvbnRvIHRoZSBzY29wZS5cbiAqIEBwYXJhbSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIFNjb3BlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uZmlndXJlU2NvcGUoY2FsbGJhY2s6IChzY29wZTogU2NvcGUpID0+IHZvaWQpOiB2b2lkIHtcbiAgY2FsbE9uSHViPHZvaWQ+KCdjb25maWd1cmVTY29wZScsIGNhbGxiYWNrKTtcbn1cblxuLyoqXG4gKiBSZWNvcmRzIGEgbmV3IGJyZWFkY3J1bWIgd2hpY2ggd2lsbCBiZSBhdHRhY2hlZCB0byBmdXR1cmUgZXZlbnRzLlxuICpcbiAqIEJyZWFkY3J1bWJzIHdpbGwgYmUgYWRkZWQgdG8gc3Vic2VxdWVudCBldmVudHMgdG8gcHJvdmlkZSBtb3JlIGNvbnRleHQgb25cbiAqIHVzZXIncyBhY3Rpb25zIHByaW9yIHRvIGFuIGVycm9yIG9yIGNyYXNoLlxuICpcbiAqIEBwYXJhbSBicmVhZGNydW1iIFRoZSBicmVhZGNydW1iIHRvIHJlY29yZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEJyZWFkY3J1bWIoYnJlYWRjcnVtYjogQnJlYWRjcnVtYik6IHZvaWQge1xuICBjYWxsT25IdWI8dm9pZD4oJ2FkZEJyZWFkY3J1bWInLCBicmVhZGNydW1iKTtcbn1cblxuLyoqXG4gKiBTZXRzIGNvbnRleHQgZGF0YSB3aXRoIHRoZSBnaXZlbiBuYW1lLlxuICogQHBhcmFtIG5hbWUgb2YgdGhlIGNvbnRleHRcbiAqIEBwYXJhbSBjb250ZXh0IEFueSBraW5kIG9mIGRhdGEuIFRoaXMgZGF0YSB3aWxsIGJlIG5vcm1hbGl6ZWQuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgZnVuY3Rpb24gc2V0Q29udGV4dChuYW1lOiBzdHJpbmcsIGNvbnRleHQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsKTogdm9pZCB7XG4gIGNhbGxPbkh1Yjx2b2lkPignc2V0Q29udGV4dCcsIG5hbWUsIGNvbnRleHQpO1xufVxuXG4vKipcbiAqIFNldCBhbiBvYmplY3QgdGhhdCB3aWxsIGJlIG1lcmdlZCBzZW50IGFzIGV4dHJhIGRhdGEgd2l0aCB0aGUgZXZlbnQuXG4gKiBAcGFyYW0gZXh0cmFzIEV4dHJhcyBvYmplY3QgdG8gbWVyZ2UgaW50byBjdXJyZW50IGNvbnRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRFeHRyYXMoZXh0cmFzOiBFeHRyYXMpOiB2b2lkIHtcbiAgY2FsbE9uSHViPHZvaWQ+KCdzZXRFeHRyYXMnLCBleHRyYXMpO1xufVxuXG4vKipcbiAqIFNldCBhbiBvYmplY3QgdGhhdCB3aWxsIGJlIG1lcmdlZCBzZW50IGFzIHRhZ3MgZGF0YSB3aXRoIHRoZSBldmVudC5cbiAqIEBwYXJhbSB0YWdzIFRhZ3MgY29udGV4dCBvYmplY3QgdG8gbWVyZ2UgaW50byBjdXJyZW50IGNvbnRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRUYWdzKHRhZ3M6IHsgW2tleTogc3RyaW5nXTogUHJpbWl0aXZlIH0pOiB2b2lkIHtcbiAgY2FsbE9uSHViPHZvaWQ+KCdzZXRUYWdzJywgdGFncyk7XG59XG5cbi8qKlxuICogU2V0IGtleTp2YWx1ZSB0aGF0IHdpbGwgYmUgc2VudCBhcyBleHRyYSBkYXRhIHdpdGggdGhlIGV2ZW50LlxuICogQHBhcmFtIGtleSBTdHJpbmcgb2YgZXh0cmFcbiAqIEBwYXJhbSBleHRyYSBBbnkga2luZCBvZiBkYXRhLiBUaGlzIGRhdGEgd2lsbCBiZSBub3JtYWxpemVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RXh0cmEoa2V5OiBzdHJpbmcsIGV4dHJhOiBFeHRyYSk6IHZvaWQge1xuICBjYWxsT25IdWI8dm9pZD4oJ3NldEV4dHJhJywga2V5LCBleHRyYSk7XG59XG5cbi8qKlxuICogU2V0IGtleTp2YWx1ZSB0aGF0IHdpbGwgYmUgc2VudCBhcyB0YWdzIGRhdGEgd2l0aCB0aGUgZXZlbnQuXG4gKlxuICogQ2FuIGFsc28gYmUgdXNlZCB0byB1bnNldCBhIHRhZywgYnkgcGFzc2luZyBgdW5kZWZpbmVkYC5cbiAqXG4gKiBAcGFyYW0ga2V5IFN0cmluZyBrZXkgb2YgdGFnXG4gKiBAcGFyYW0gdmFsdWUgVmFsdWUgb2YgdGFnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRUYWcoa2V5OiBzdHJpbmcsIHZhbHVlOiBQcmltaXRpdmUpOiB2b2lkIHtcbiAgY2FsbE9uSHViPHZvaWQ+KCdzZXRUYWcnLCBrZXksIHZhbHVlKTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIHVzZXIgY29udGV4dCBpbmZvcm1hdGlvbiBmb3IgZnV0dXJlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gdXNlciBVc2VyIGNvbnRleHQgb2JqZWN0IHRvIGJlIHNldCBpbiB0aGUgY3VycmVudCBjb250ZXh0LiBQYXNzIGBudWxsYCB0byB1bnNldCB0aGUgdXNlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFVzZXIodXNlcjogVXNlciB8IG51bGwpOiB2b2lkIHtcbiAgY2FsbE9uSHViPHZvaWQ+KCdzZXRVc2VyJywgdXNlcik7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBzY29wZSB3aXRoIGFuZCBleGVjdXRlcyB0aGUgZ2l2ZW4gb3BlcmF0aW9uIHdpdGhpbi5cbiAqIFRoZSBzY29wZSBpcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgb25jZSB0aGUgb3BlcmF0aW9uXG4gKiBmaW5pc2hlcyBvciB0aHJvd3MuXG4gKlxuICogVGhpcyBpcyBlc3NlbnRpYWxseSBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvcjpcbiAqXG4gKiAgICAgcHVzaFNjb3BlKCk7XG4gKiAgICAgY2FsbGJhY2soKTtcbiAqICAgICBwb3BTY29wZSgpO1xuICpcbiAqIEBwYXJhbSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZW5jbG9zZWQgaW50byBwdXNoL3BvcFNjb3BlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFNjb3BlKGNhbGxiYWNrOiAoc2NvcGU6IFNjb3BlKSA9PiB2b2lkKTogdm9pZCB7XG4gIGNhbGxPbkh1Yjx2b2lkPignd2l0aFNjb3BlJywgY2FsbGJhY2spO1xufVxuXG4vKipcbiAqIENhbGxzIGEgZnVuY3Rpb24gb24gdGhlIGxhdGVzdCBjbGllbnQuIFVzZSB0aGlzIHdpdGggY2F1dGlvbiwgaXQncyBtZWFudCBhc1xuICogaW4gXCJpbnRlcm5hbFwiIGhlbHBlciBzbyB3ZSBkb24ndCBuZWVkIHRvIGV4cG9zZSBldmVyeSBwb3NzaWJsZSBmdW5jdGlvbiBpblxuICogdGhlIHNoaW0uIEl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXQgdGhlIGNsaWVudCBhY3R1YWxseSBpbXBsZW1lbnRzIHRoZVxuICogZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIG1ldGhvZCBUaGUgbWV0aG9kIHRvIGNhbGwgb24gdGhlIGNsaWVudC9jbGllbnQuXG4gKiBAcGFyYW0gYXJncyBBcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgY2xpZW50L2ZvbnRlbmQuXG4gKiBAaGlkZGVuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgZnVuY3Rpb24gX2NhbGxPbkNsaWVudChtZXRob2Q6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgY2FsbE9uSHViPHZvaWQ+KCdfaW52b2tlQ2xpZW50JywgbWV0aG9kLCAuLi5hcmdzKTtcbn1cblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgYFRyYW5zYWN0aW9uYCBhbmQgcmV0dXJucyBpdC4gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgdG8gbWFudWFsIHRyYWNpbmcgaW5zdHJ1bWVudGF0aW9uLlxuICpcbiAqIEEgdHJlZSBzdHJ1Y3R1cmUgY2FuIGJlIGJ1aWx0IGJ5IGFkZGluZyBjaGlsZCBzcGFucyB0byB0aGUgdHJhbnNhY3Rpb24sIGFuZCBjaGlsZCBzcGFucyB0byBvdGhlciBzcGFucy4gVG8gc3RhcnQgYVxuICogbmV3IGNoaWxkIHNwYW4gd2l0aGluIHRoZSB0cmFuc2FjdGlvbiBvciBhbnkgc3BhbiwgY2FsbCB0aGUgcmVzcGVjdGl2ZSBgLnN0YXJ0Q2hpbGQoKWAgbWV0aG9kLlxuICpcbiAqIEV2ZXJ5IGNoaWxkIHNwYW4gbXVzdCBiZSBmaW5pc2hlZCBiZWZvcmUgdGhlIHRyYW5zYWN0aW9uIGlzIGZpbmlzaGVkLCBvdGhlcndpc2UgdGhlIHVuZmluaXNoZWQgc3BhbnMgYXJlIGRpc2NhcmRlZC5cbiAqXG4gKiBUaGUgdHJhbnNhY3Rpb24gbXVzdCBiZSBmaW5pc2hlZCB3aXRoIGEgY2FsbCB0byBpdHMgYC5maW5pc2goKWAgbWV0aG9kLCBhdCB3aGljaCBwb2ludCB0aGUgdHJhbnNhY3Rpb24gd2l0aCBhbGwgaXRzXG4gKiBmaW5pc2hlZCBjaGlsZCBzcGFucyB3aWxsIGJlIHNlbnQgdG8gU2VudHJ5LlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IFByb3BlcnRpZXMgb2YgdGhlIG5ldyBgVHJhbnNhY3Rpb25gLlxuICogQHBhcmFtIGN1c3RvbVNhbXBsaW5nQ29udGV4dCBJbmZvcm1hdGlvbiBnaXZlbiB0byB0aGUgdHJhbnNhY3Rpb24gc2FtcGxpbmcgZnVuY3Rpb24gKGFsb25nIHdpdGggY29udGV4dC1kZXBlbmRlbnRcbiAqIGRlZmF1bHQgdmFsdWVzKS4gU2VlIHtAbGluayBPcHRpb25zLnRyYWNlc1NhbXBsZXJ9LlxuICpcbiAqIEByZXR1cm5zIFRoZSB0cmFuc2FjdGlvbiB3aGljaCB3YXMganVzdCBzdGFydGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFRyYW5zYWN0aW9uKFxuICBjb250ZXh0OiBUcmFuc2FjdGlvbkNvbnRleHQsXG4gIGN1c3RvbVNhbXBsaW5nQ29udGV4dD86IEN1c3RvbVNhbXBsaW5nQ29udGV4dCxcbik6IFRyYW5zYWN0aW9uIHtcbiAgcmV0dXJuIGNhbGxPbkh1Yignc3RhcnRUcmFuc2FjdGlvbicsIHsgLi4uY29udGV4dCB9LCBjdXN0b21TYW1wbGluZ0NvbnRleHQpO1xufVxuIiwgImltcG9ydCB7IERzbkxpa2UsIFNka01ldGFkYXRhIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBEc24sIHVybEVuY29kZSB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5jb25zdCBTRU5UUllfQVBJX1ZFUlNJT04gPSAnNyc7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIHByb3ZpZGUgdXJscywgaGVhZGVycyBhbmQgbWV0YWRhdGEgdGhhdCBjYW4gYmUgdXNlZCB0byBmb3JtXG4gKiBkaWZmZXJlbnQgdHlwZXMgb2YgcmVxdWVzdHMgdG8gU2VudHJ5IGVuZHBvaW50cy5cbiAqIFN1cHBvcnRzIGJvdGggZW52ZWxvcGVzIGFuZCByZWd1bGFyIGV2ZW50IHJlcXVlc3RzLlxuICoqL1xuZXhwb3J0IGNsYXNzIEFQSSB7XG4gIC8qKiBUaGUgRFNOIGFzIHBhc3NlZCB0byBTZW50cnkuaW5pdCgpICovXG4gIHB1YmxpYyBkc246IERzbkxpa2U7XG5cbiAgLyoqIE1ldGFkYXRhIGFib3V0IHRoZSBTREsgKG5hbWUsIHZlcnNpb24sIGV0YykgZm9yIGluY2x1c2lvbiBpbiBlbnZlbG9wZSBoZWFkZXJzICovXG4gIHB1YmxpYyBtZXRhZGF0YTogU2RrTWV0YWRhdGE7XG5cbiAgLyoqIFRoZSBpbnRlcm5hbGx5IHVzZWQgRHNuIG9iamVjdC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfZHNuT2JqZWN0OiBEc247XG5cbiAgLyoqIFRoZSBlbnZlbG9wZSB0dW5uZWwgdG8gdXNlLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF90dW5uZWw/OiBzdHJpbmc7XG5cbiAgLyoqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBUEkgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGRzbjogRHNuTGlrZSwgbWV0YWRhdGE6IFNka01ldGFkYXRhID0ge30sIHR1bm5lbD86IHN0cmluZykge1xuICAgIHRoaXMuZHNuID0gZHNuO1xuICAgIHRoaXMuX2Rzbk9iamVjdCA9IG5ldyBEc24oZHNuKTtcbiAgICB0aGlzLm1ldGFkYXRhID0gbWV0YWRhdGE7XG4gICAgdGhpcy5fdHVubmVsID0gdHVubmVsO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIERzbiBvYmplY3QuICovXG4gIHB1YmxpYyBnZXREc24oKTogRHNuIHtcbiAgICByZXR1cm4gdGhpcy5fZHNuT2JqZWN0O1xuICB9XG5cbiAgLyoqIERvZXMgdGhpcyB0cmFuc3BvcnQgZm9yY2UgZW52ZWxvcGVzPyAqL1xuICBwdWJsaWMgZm9yY2VFbnZlbG9wZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLl90dW5uZWw7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgcHJlZml4IHRvIGNvbnN0cnVjdCBTZW50cnkgaW5nZXN0aW9uIEFQSSBlbmRwb2ludHMuICovXG4gIHB1YmxpYyBnZXRCYXNlQXBpRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBkc24gPSB0aGlzLmdldERzbigpO1xuICAgIGNvbnN0IHByb3RvY29sID0gZHNuLnByb3RvY29sID8gYCR7ZHNuLnByb3RvY29sfTpgIDogJyc7XG4gICAgY29uc3QgcG9ydCA9IGRzbi5wb3J0ID8gYDoke2Rzbi5wb3J0fWAgOiAnJztcbiAgICByZXR1cm4gYCR7cHJvdG9jb2x9Ly8ke2Rzbi5ob3N0fSR7cG9ydH0ke2Rzbi5wYXRoID8gYC8ke2Rzbi5wYXRofWAgOiAnJ30vYXBpL2A7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgc3RvcmUgZW5kcG9pbnQgVVJMLiAqL1xuICBwdWJsaWMgZ2V0U3RvcmVFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9nZXRJbmdlc3RFbmRwb2ludCgnc3RvcmUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdG9yZSBlbmRwb2ludCBVUkwgd2l0aCBhdXRoIGluIHRoZSBxdWVyeSBzdHJpbmcuXG4gICAqXG4gICAqIFNlbmRpbmcgYXV0aCBhcyBwYXJ0IG9mIHRoZSBxdWVyeSBzdHJpbmcgYW5kIG5vdCBhcyBjdXN0b20gSFRUUCBoZWFkZXJzIGF2b2lkcyBDT1JTIHByZWZsaWdodCByZXF1ZXN0cy5cbiAgICovXG4gIHB1YmxpYyBnZXRTdG9yZUVuZHBvaW50V2l0aFVybEVuY29kZWRBdXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuZ2V0U3RvcmVFbmRwb2ludCgpfT8ke3RoaXMuX2VuY29kZWRBdXRoKCl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBlbnZlbG9wZSBlbmRwb2ludCBVUkwgd2l0aCBhdXRoIGluIHRoZSBxdWVyeSBzdHJpbmcuXG4gICAqXG4gICAqIFNlbmRpbmcgYXV0aCBhcyBwYXJ0IG9mIHRoZSBxdWVyeSBzdHJpbmcgYW5kIG5vdCBhcyBjdXN0b20gSFRUUCBoZWFkZXJzIGF2b2lkcyBDT1JTIHByZWZsaWdodCByZXF1ZXN0cy5cbiAgICovXG4gIHB1YmxpYyBnZXRFbnZlbG9wZUVuZHBvaW50V2l0aFVybEVuY29kZWRBdXRoKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZm9yY2VFbnZlbG9wZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHVubmVsIGFzIHN0cmluZztcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7dGhpcy5fZ2V0RW52ZWxvcGVFbmRwb2ludCgpfT8ke3RoaXMuX2VuY29kZWRBdXRoKCl9YDtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIG9ubHkgdGhlIHBhdGggY29tcG9uZW50IGZvciB0aGUgc3RvcmUgZW5kcG9pbnQuICovXG4gIHB1YmxpYyBnZXRTdG9yZUVuZHBvaW50UGF0aCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRzbiA9IHRoaXMuZ2V0RHNuKCk7XG4gICAgcmV0dXJuIGAke2Rzbi5wYXRoID8gYC8ke2Rzbi5wYXRofWAgOiAnJ30vYXBpLyR7ZHNuLnByb2plY3RJZH0vc3RvcmUvYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGluIHJlcXVlc3QgaGVhZGVycy5cbiAgICogVGhpcyBpcyBuZWVkZWQgZm9yIG5vZGUgYW5kIHRoZSBvbGQgL3N0b3JlIGVuZHBvaW50IGluIHNlbnRyeVxuICAgKi9cbiAgcHVibGljIGdldFJlcXVlc3RIZWFkZXJzKGNsaWVudE5hbWU6IHN0cmluZywgY2xpZW50VmVyc2lvbjogc3RyaW5nKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgLy8gQ0hBTkdFIFRISVMgdG8gdXNlIG1ldGFkYXRhIGJ1dCBrZWVwIGNsaWVudE5hbWUgYW5kIGNsaWVudFZlcnNpb24gY29tcGF0aWJsZVxuICAgIGNvbnN0IGRzbiA9IHRoaXMuZ2V0RHNuKCk7XG4gICAgY29uc3QgaGVhZGVyID0gW2BTZW50cnkgc2VudHJ5X3ZlcnNpb249JHtTRU5UUllfQVBJX1ZFUlNJT059YF07XG4gICAgaGVhZGVyLnB1c2goYHNlbnRyeV9jbGllbnQ9JHtjbGllbnROYW1lfS8ke2NsaWVudFZlcnNpb259YCk7XG4gICAgaGVhZGVyLnB1c2goYHNlbnRyeV9rZXk9JHtkc24ucHVibGljS2V5fWApO1xuICAgIGlmIChkc24ucGFzcykge1xuICAgICAgaGVhZGVyLnB1c2goYHNlbnRyeV9zZWNyZXQ9JHtkc24ucGFzc31gKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAnWC1TZW50cnktQXV0aCc6IGhlYWRlci5qb2luKCcsICcpLFxuICAgIH07XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgdXJsIHRvIHRoZSByZXBvcnQgZGlhbG9nIGVuZHBvaW50LiAqL1xuICBwdWJsaWMgZ2V0UmVwb3J0RGlhbG9nRW5kcG9pbnQoXG4gICAgZGlhbG9nT3B0aW9uczoge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgIHVzZXI/OiB7IG5hbWU/OiBzdHJpbmc7IGVtYWlsPzogc3RyaW5nIH07XG4gICAgfSA9IHt9LFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGRzbiA9IHRoaXMuZ2V0RHNuKCk7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHt0aGlzLmdldEJhc2VBcGlFbmRwb2ludCgpfWVtYmVkL2Vycm9yLXBhZ2UvYDtcblxuICAgIGNvbnN0IGVuY29kZWRPcHRpb25zID0gW107XG4gICAgZW5jb2RlZE9wdGlvbnMucHVzaChgZHNuPSR7ZHNuLnRvU3RyaW5nKCl9YCk7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZGlhbG9nT3B0aW9ucykge1xuICAgICAgaWYgKGtleSA9PT0gJ2RzbicpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXkgPT09ICd1c2VyJykge1xuICAgICAgICBpZiAoIWRpYWxvZ09wdGlvbnMudXNlcikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkaWFsb2dPcHRpb25zLnVzZXIubmFtZSkge1xuICAgICAgICAgIGVuY29kZWRPcHRpb25zLnB1c2goYG5hbWU9JHtlbmNvZGVVUklDb21wb25lbnQoZGlhbG9nT3B0aW9ucy51c2VyLm5hbWUpfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkaWFsb2dPcHRpb25zLnVzZXIuZW1haWwpIHtcbiAgICAgICAgICBlbmNvZGVkT3B0aW9ucy5wdXNoKGBlbWFpbD0ke2VuY29kZVVSSUNvbXBvbmVudChkaWFsb2dPcHRpb25zLnVzZXIuZW1haWwpfWApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbmNvZGVkT3B0aW9ucy5wdXNoKGAke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudChkaWFsb2dPcHRpb25zW2tleV0gYXMgc3RyaW5nKX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuY29kZWRPcHRpb25zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGAke2VuZHBvaW50fT8ke2VuY29kZWRPcHRpb25zLmpvaW4oJyYnKX1gO1xuICAgIH1cblxuICAgIHJldHVybiBlbmRwb2ludDtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBlbnZlbG9wZSBlbmRwb2ludCBVUkwuICovXG4gIHByaXZhdGUgX2dldEVudmVsb3BlRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0SW5nZXN0RW5kcG9pbnQoJ2VudmVsb3BlJyk7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgaW5nZXN0IEFQSSBlbmRwb2ludCBmb3IgdGFyZ2V0LiAqL1xuICBwcml2YXRlIF9nZXRJbmdlc3RFbmRwb2ludCh0YXJnZXQ6ICdzdG9yZScgfCAnZW52ZWxvcGUnKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5fdHVubmVsKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHVubmVsO1xuICAgIH1cbiAgICBjb25zdCBiYXNlID0gdGhpcy5nZXRCYXNlQXBpRW5kcG9pbnQoKTtcbiAgICBjb25zdCBkc24gPSB0aGlzLmdldERzbigpO1xuICAgIHJldHVybiBgJHtiYXNlfSR7ZHNuLnByb2plY3RJZH0vJHt0YXJnZXR9L2A7XG4gIH1cblxuICAvKiogUmV0dXJucyBhIFVSTC1lbmNvZGVkIHN0cmluZyB3aXRoIGF1dGggY29uZmlnIHN1aXRhYmxlIGZvciBhIHF1ZXJ5IHN0cmluZy4gKi9cbiAgcHJpdmF0ZSBfZW5jb2RlZEF1dGgoKTogc3RyaW5nIHtcbiAgICBjb25zdCBkc24gPSB0aGlzLmdldERzbigpO1xuICAgIGNvbnN0IGF1dGggPSB7XG4gICAgICAvLyBXZSBzZW5kIG9ubHkgdGhlIG1pbmltdW0gc2V0IG9mIHJlcXVpcmVkIGluZm9ybWF0aW9uLiBTZWVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1NzIuXG4gICAgICBzZW50cnlfa2V5OiBkc24ucHVibGljS2V5LFxuICAgICAgc2VudHJ5X3ZlcnNpb246IFNFTlRSWV9BUElfVkVSU0lPTixcbiAgICB9O1xuICAgIHJldHVybiB1cmxFbmNvZGUoYXV0aCk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBhZGRHbG9iYWxFdmVudFByb2Nlc3NvciwgZ2V0Q3VycmVudEh1YiB9IGZyb20gJ0BzZW50cnkvaHViJztcbmltcG9ydCB7IEludGVncmF0aW9uLCBPcHRpb25zIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGluc3RhbGxlZEludGVncmF0aW9uczogc3RyaW5nW10gPSBbXTtcblxuLyoqIE1hcCBvZiBpbnRlZ3JhdGlvbnMgYXNzaWduZWQgdG8gYSBjbGllbnQgKi9cbmV4cG9ydCB0eXBlIEludGVncmF0aW9uSW5kZXggPSB7XG4gIFtrZXk6IHN0cmluZ106IEludGVncmF0aW9uO1xufSAmIHsgaW5pdGlhbGl6ZWQ/OiBib29sZWFuIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZmlsdGVyRHVwbGljYXRlcyhpbnRlZ3JhdGlvbnM6IEludGVncmF0aW9uW10pOiBJbnRlZ3JhdGlvbltdIHtcbiAgcmV0dXJuIGludGVncmF0aW9ucy5yZWR1Y2UoKGFjYywgaW50ZWdyYXRpb25zKSA9PiB7XG4gICAgaWYgKGFjYy5ldmVyeShhY2NJbnRlZ3JhdGlvbiA9PiBpbnRlZ3JhdGlvbnMubmFtZSAhPT0gYWNjSW50ZWdyYXRpb24ubmFtZSkpIHtcbiAgICAgIGFjYy5wdXNoKGludGVncmF0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdIGFzIEludGVncmF0aW9uW10pO1xufVxuXG4vKiogR2V0cyBpbnRlZ3JhdGlvbiB0byBpbnN0YWxsICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW50ZWdyYXRpb25zVG9TZXR1cChvcHRpb25zOiBPcHRpb25zKTogSW50ZWdyYXRpb25bXSB7XG4gIGNvbnN0IGRlZmF1bHRJbnRlZ3JhdGlvbnMgPSAob3B0aW9ucy5kZWZhdWx0SW50ZWdyYXRpb25zICYmIFsuLi5vcHRpb25zLmRlZmF1bHRJbnRlZ3JhdGlvbnNdKSB8fCBbXTtcbiAgY29uc3QgdXNlckludGVncmF0aW9ucyA9IG9wdGlvbnMuaW50ZWdyYXRpb25zO1xuXG4gIGxldCBpbnRlZ3JhdGlvbnM6IEludGVncmF0aW9uW10gPSBbLi4uZmlsdGVyRHVwbGljYXRlcyhkZWZhdWx0SW50ZWdyYXRpb25zKV07XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodXNlckludGVncmF0aW9ucykpIHtcbiAgICAvLyBGaWx0ZXIgb3V0IGludGVncmF0aW9ucyB0aGF0IGFyZSBhbHNvIGluY2x1ZGVkIGluIHVzZXIgb3B0aW9uc1xuICAgIGludGVncmF0aW9ucyA9IFtcbiAgICAgIC4uLmludGVncmF0aW9ucy5maWx0ZXIoaW50ZWdyYXRpb25zID0+XG4gICAgICAgIHVzZXJJbnRlZ3JhdGlvbnMuZXZlcnkodXNlckludGVncmF0aW9uID0+IHVzZXJJbnRlZ3JhdGlvbi5uYW1lICE9PSBpbnRlZ3JhdGlvbnMubmFtZSksXG4gICAgICApLFxuICAgICAgLy8gQW5kIGZpbHRlciBvdXQgZHVwbGljYXRlZCB1c2VyIG9wdGlvbnMgaW50ZWdyYXRpb25zXG4gICAgICAuLi5maWx0ZXJEdXBsaWNhdGVzKHVzZXJJbnRlZ3JhdGlvbnMpLFxuICAgIF07XG4gIH0gZWxzZSBpZiAodHlwZW9mIHVzZXJJbnRlZ3JhdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnRlZ3JhdGlvbnMgPSB1c2VySW50ZWdyYXRpb25zKGludGVncmF0aW9ucyk7XG4gICAgaW50ZWdyYXRpb25zID0gQXJyYXkuaXNBcnJheShpbnRlZ3JhdGlvbnMpID8gaW50ZWdyYXRpb25zIDogW2ludGVncmF0aW9uc107XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgdGhhdCBpZiBwcmVzZW50LCBgRGVidWdgIGludGVncmF0aW9uIHdpbGwgYWx3YXlzIHJ1biBsYXN0XG4gIGNvbnN0IGludGVncmF0aW9uc05hbWVzID0gaW50ZWdyYXRpb25zLm1hcChpID0+IGkubmFtZSk7XG4gIGNvbnN0IGFsd2F5c0xhc3RUb1J1biA9ICdEZWJ1Zyc7XG4gIGlmIChpbnRlZ3JhdGlvbnNOYW1lcy5pbmRleE9mKGFsd2F5c0xhc3RUb1J1bikgIT09IC0xKSB7XG4gICAgaW50ZWdyYXRpb25zLnB1c2goLi4uaW50ZWdyYXRpb25zLnNwbGljZShpbnRlZ3JhdGlvbnNOYW1lcy5pbmRleE9mKGFsd2F5c0xhc3RUb1J1biksIDEpKTtcbiAgfVxuXG4gIHJldHVybiBpbnRlZ3JhdGlvbnM7XG59XG5cbi8qKiBTZXR1cCBnaXZlbiBpbnRlZ3JhdGlvbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHVwSW50ZWdyYXRpb24oaW50ZWdyYXRpb246IEludGVncmF0aW9uKTogdm9pZCB7XG4gIGlmIChpbnN0YWxsZWRJbnRlZ3JhdGlvbnMuaW5kZXhPZihpbnRlZ3JhdGlvbi5uYW1lKSAhPT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaW50ZWdyYXRpb24uc2V0dXBPbmNlKGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yLCBnZXRDdXJyZW50SHViKTtcbiAgaW5zdGFsbGVkSW50ZWdyYXRpb25zLnB1c2goaW50ZWdyYXRpb24ubmFtZSk7XG4gIGxvZ2dlci5sb2coYEludGVncmF0aW9uIGluc3RhbGxlZDogJHtpbnRlZ3JhdGlvbi5uYW1lfWApO1xufVxuXG4vKipcbiAqIEdpdmVuIGEgbGlzdCBvZiBpbnRlZ3JhdGlvbiBpbnN0YW5jZXMgdGhpcyBpbnN0YWxscyB0aGVtIGFsbC4gV2hlbiBgd2l0aERlZmF1bHRzYCBpcyBzZXQgdG8gYHRydWVgIHRoZW4gYWxsIGRlZmF1bHRcbiAqIGludGVncmF0aW9ucyBhcmUgYWRkZWQgdW5sZXNzIHRoZXkgd2VyZSBhbHJlYWR5IHByb3ZpZGVkIGJlZm9yZS5cbiAqIEBwYXJhbSBpbnRlZ3JhdGlvbnMgYXJyYXkgb2YgaW50ZWdyYXRpb24gaW5zdGFuY2VzXG4gKiBAcGFyYW0gd2l0aERlZmF1bHQgc2hvdWxkIGVuYWJsZSBkZWZhdWx0IGludGVncmF0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBJbnRlZ3JhdGlvbnM8TyBleHRlbmRzIE9wdGlvbnM+KG9wdGlvbnM6IE8pOiBJbnRlZ3JhdGlvbkluZGV4IHtcbiAgY29uc3QgaW50ZWdyYXRpb25zOiBJbnRlZ3JhdGlvbkluZGV4ID0ge307XG4gIGdldEludGVncmF0aW9uc1RvU2V0dXAob3B0aW9ucykuZm9yRWFjaChpbnRlZ3JhdGlvbiA9PiB7XG4gICAgaW50ZWdyYXRpb25zW2ludGVncmF0aW9uLm5hbWVdID0gaW50ZWdyYXRpb247XG4gICAgc2V0dXBJbnRlZ3JhdGlvbihpbnRlZ3JhdGlvbik7XG4gIH0pO1xuICAvLyBzZXQgdGhlIGBpbml0aWFsaXplZGAgZmxhZyBzbyB3ZSBkb24ndCBydW4gdGhyb3VnaCB0aGUgcHJvY2VzcyBhZ2FpbiB1bmVjZXNzYXJpbHk7IHVzZSBgT2JqZWN0LmRlZmluZVByb3BlcnR5YFxuICAvLyBiZWNhdXNlIGJ5IGRlZmF1bHQgaXQgY3JlYXRlcyBhIHByb3BlcnR5IHdoaWNoIGlzIG5vbmVudW1lcmFibGUsIHdoaWNoIHdlIHdhbnQgc2luY2UgYGluaXRpYWxpemVkYCBzaG91bGRuJ3QgYmVcbiAgLy8gY29uc2lkZXJlZCBhIG1lbWJlciBvZiB0aGUgaW5kZXggdGhlIHdheSB0aGUgYWN0dWFsIGludGVncmF0aW9ucyBhcmVcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGludGVncmF0aW9ucywgJ2luaXRpYWxpemVkJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgcmV0dXJuIGludGVncmF0aW9ucztcbn1cbiIsICIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGluZXMgKi9cbmltcG9ydCB7IFNjb3BlLCBTZXNzaW9uIH0gZnJvbSAnQHNlbnRyeS9odWInO1xuaW1wb3J0IHtcbiAgQ2xpZW50LFxuICBFdmVudCxcbiAgRXZlbnRIaW50LFxuICBJbnRlZ3JhdGlvbixcbiAgSW50ZWdyYXRpb25DbGFzcyxcbiAgT3B0aW9ucyxcbiAgT3V0Y29tZSxcbiAgU2Vzc2lvblN0YXR1cyxcbiAgU2V2ZXJpdHksXG4gIFRyYW5zcG9ydCxcbn0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQge1xuICBjaGVja09yU2V0QWxyZWFkeUNhdWdodCxcbiAgZGF0ZVRpbWVzdGFtcEluU2Vjb25kcyxcbiAgRHNuLFxuICBpc1BsYWluT2JqZWN0LFxuICBpc1ByaW1pdGl2ZSxcbiAgaXNUaGVuYWJsZSxcbiAgbG9nZ2VyLFxuICBub3JtYWxpemUsXG4gIFNlbnRyeUVycm9yLFxuICBTeW5jUHJvbWlzZSxcbiAgdHJ1bmNhdGUsXG4gIHV1aWQ0LFxufSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuaW1wb3J0IHsgQmFja2VuZCwgQmFja2VuZENsYXNzIH0gZnJvbSAnLi9iYXNlYmFja2VuZCc7XG5pbXBvcnQgeyBJbnRlZ3JhdGlvbkluZGV4LCBzZXR1cEludGVncmF0aW9ucyB9IGZyb20gJy4vaW50ZWdyYXRpb24nO1xuXG5jb25zdCBBTFJFQURZX1NFRU5fRVJST1IgPSBcIk5vdCBjYXB0dXJpbmcgZXhjZXB0aW9uIGJlY2F1c2UgaXQncyBhbHJlYWR5IGJlZW4gY2FwdHVyZWQuXCI7XG5cbi8qKlxuICogQmFzZSBpbXBsZW1lbnRhdGlvbiBmb3IgYWxsIEphdmFTY3JpcHQgU0RLIGNsaWVudHMuXG4gKlxuICogQ2FsbCB0aGUgY29uc3RydWN0b3Igd2l0aCB0aGUgY29ycmVzcG9uZGluZyBiYWNrZW5kIGNvbnN0cnVjdG9yIGFuZCBvcHRpb25zXG4gKiBzcGVjaWZpYyB0byB0aGUgY2xpZW50IHN1YmNsYXNzLiBUbyBhY2Nlc3MgdGhlc2Ugb3B0aW9ucyBsYXRlciwgdXNlXG4gKiB7QGxpbmsgQ2xpZW50LmdldE9wdGlvbnN9LiBBbHNvLCB0aGUgQmFja2VuZCBpbnN0YW5jZSBpcyBhdmFpbGFibGUgdmlhXG4gKiB7QGxpbmsgQ2xpZW50LmdldEJhY2tlbmR9LlxuICpcbiAqIElmIGEgRHNuIGlzIHNwZWNpZmllZCBpbiB0aGUgb3B0aW9ucywgaXQgd2lsbCBiZSBwYXJzZWQgYW5kIHN0b3JlZC4gVXNlXG4gKiB7QGxpbmsgQ2xpZW50LmdldERzbn0gdG8gcmV0cmlldmUgdGhlIERzbiBhdCBhbnkgbW9tZW50LiBJbiBjYXNlIHRoZSBEc24gaXNcbiAqIGludmFsaWQsIHRoZSBjb25zdHJ1Y3RvciB3aWxsIHRocm93IGEge0BsaW5rIFNlbnRyeUV4Y2VwdGlvbn0uIE5vdGUgdGhhdFxuICogd2l0aG91dCBhIHZhbGlkIERzbiwgdGhlIFNESyB3aWxsIG5vdCBzZW5kIGFueSBldmVudHMgdG8gU2VudHJ5LlxuICpcbiAqIEJlZm9yZSBzZW5kaW5nIGFuIGV2ZW50IHZpYSB0aGUgYmFja2VuZCwgaXQgaXMgcGFzc2VkIHRocm91Z2hcbiAqIHtAbGluayBCYXNlQ2xpZW50Ll9wcmVwYXJlRXZlbnR9IHRvIGFkZCBTREsgaW5mb3JtYXRpb24gYW5kIHNjb3BlIGRhdGFcbiAqIChicmVhZGNydW1icyBhbmQgY29udGV4dCkuIFRvIGFkZCBtb3JlIGN1c3RvbSBpbmZvcm1hdGlvbiwgb3ZlcnJpZGUgdGhpc1xuICogbWV0aG9kIGFuZCBleHRlbmQgdGhlIHJlc3VsdGluZyBwcmVwYXJlZCBldmVudC5cbiAqXG4gKiBUbyBpc3N1ZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZXZlbnRzIChlLmcuIHZpYSBpbnN0cnVtZW50YXRpb24pLCB1c2VcbiAqIHtAbGluayBDbGllbnQuY2FwdHVyZUV2ZW50fS4gSXQgd2lsbCBwcmVwYXJlIHRoZSBldmVudCBhbmQgcGFzcyBpdCB0aHJvdWdoXG4gKiB0aGUgY2FsbGJhY2sgbGlmZWN5Y2xlLiBUbyBpc3N1ZSBhdXRvLWJyZWFkY3J1bWJzLCB1c2VcbiAqIHtAbGluayBDbGllbnQuYWRkQnJlYWRjcnVtYn0uXG4gKlxuICogQGV4YW1wbGVcbiAqIGNsYXNzIE5vZGVDbGllbnQgZXh0ZW5kcyBCYXNlQ2xpZW50PE5vZGVCYWNrZW5kLCBOb2RlT3B0aW9ucz4ge1xuICogICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogTm9kZU9wdGlvbnMpIHtcbiAqICAgICBzdXBlcihOb2RlQmFja2VuZCwgb3B0aW9ucyk7XG4gKiAgIH1cbiAqXG4gKiAgIC8vIC4uLlxuICogfVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUNsaWVudDxCIGV4dGVuZHMgQmFja2VuZCwgTyBleHRlbmRzIE9wdGlvbnM+IGltcGxlbWVudHMgQ2xpZW50PE8+IHtcbiAgLyoqXG4gICAqIFRoZSBiYWNrZW5kIHVzZWQgdG8gcGh5c2ljYWxseSBpbnRlcmFjdCBpbiB0aGUgZW52aXJvbm1lbnQuIFVzdWFsbHksIHRoaXNcbiAgICogd2lsbCBjb3JyZXNwb25kIHRvIHRoZSBjbGllbnQuIFdoZW4gY29tcG9zaW5nIFNES3MsIGhvd2V2ZXIsIHRoZSBCYWNrZW5kXG4gICAqIGZyb20gdGhlIHJvb3QgU0RLIHdpbGwgYmUgdXNlZC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBfYmFja2VuZDogQjtcblxuICAvKiogT3B0aW9ucyBwYXNzZWQgdG8gdGhlIFNESy4gKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9vcHRpb25zOiBPO1xuXG4gIC8qKiBUaGUgY2xpZW50IERzbiwgaWYgc3BlY2lmaWVkIGluIG9wdGlvbnMuIFdpdGhvdXQgdGhpcyBEc24sIHRoZSBTREsgd2lsbCBiZSBkaXNhYmxlZC4gKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9kc24/OiBEc247XG5cbiAgLyoqIEFycmF5IG9mIHVzZWQgaW50ZWdyYXRpb25zLiAqL1xuICBwcm90ZWN0ZWQgX2ludGVncmF0aW9uczogSW50ZWdyYXRpb25JbmRleCA9IHt9O1xuXG4gIC8qKiBOdW1iZXIgb2YgY2FsbHMgYmVpbmcgcHJvY2Vzc2VkICovXG4gIHByb3RlY3RlZCBfbnVtUHJvY2Vzc2luZzogbnVtYmVyID0gMDtcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhpcyBjbGllbnQgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBiYWNrZW5kQ2xhc3MgQSBjb25zdHJ1Y3RvciBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGJhY2tlbmQuXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSBjbGllbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYmFja2VuZENsYXNzOiBCYWNrZW5kQ2xhc3M8QiwgTz4sIG9wdGlvbnM6IE8pIHtcbiAgICB0aGlzLl9iYWNrZW5kID0gbmV3IGJhY2tlbmRDbGFzcyhvcHRpb25zKTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcblxuICAgIGlmIChvcHRpb25zLmRzbikge1xuICAgICAgdGhpcy5fZHNuID0gbmV3IERzbihvcHRpb25zLmRzbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xuICBwdWJsaWMgY2FwdHVyZUV4Y2VwdGlvbihleGNlcHRpb246IGFueSwgaGludD86IEV2ZW50SGludCwgc2NvcGU/OiBTY29wZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgLy8gZW5zdXJlIHdlIGhhdmVuJ3QgY2FwdHVyZWQgdGhpcyB2ZXJ5IG9iamVjdCBiZWZvcmVcbiAgICBpZiAoY2hlY2tPclNldEFscmVhZHlDYXVnaHQoZXhjZXB0aW9uKSkge1xuICAgICAgbG9nZ2VyLmxvZyhBTFJFQURZX1NFRU5fRVJST1IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBldmVudElkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBoaW50ICYmIGhpbnQuZXZlbnRfaWQ7XG5cbiAgICB0aGlzLl9wcm9jZXNzKFxuICAgICAgdGhpcy5fZ2V0QmFja2VuZCgpXG4gICAgICAgIC5ldmVudEZyb21FeGNlcHRpb24oZXhjZXB0aW9uLCBoaW50KVxuICAgICAgICAudGhlbihldmVudCA9PiB0aGlzLl9jYXB0dXJlRXZlbnQoZXZlbnQsIGhpbnQsIHNjb3BlKSlcbiAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICBldmVudElkID0gcmVzdWx0O1xuICAgICAgICB9KSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGV2ZW50SWQ7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBjYXB0dXJlTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcsIGxldmVsPzogU2V2ZXJpdHksIGhpbnQ/OiBFdmVudEhpbnQsIHNjb3BlPzogU2NvcGUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGxldCBldmVudElkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBoaW50ICYmIGhpbnQuZXZlbnRfaWQ7XG5cbiAgICBjb25zdCBwcm9taXNlZEV2ZW50ID0gaXNQcmltaXRpdmUobWVzc2FnZSlcbiAgICAgID8gdGhpcy5fZ2V0QmFja2VuZCgpLmV2ZW50RnJvbU1lc3NhZ2UoU3RyaW5nKG1lc3NhZ2UpLCBsZXZlbCwgaGludClcbiAgICAgIDogdGhpcy5fZ2V0QmFja2VuZCgpLmV2ZW50RnJvbUV4Y2VwdGlvbihtZXNzYWdlLCBoaW50KTtcblxuICAgIHRoaXMuX3Byb2Nlc3MoXG4gICAgICBwcm9taXNlZEV2ZW50XG4gICAgICAgIC50aGVuKGV2ZW50ID0+IHRoaXMuX2NhcHR1cmVFdmVudChldmVudCwgaGludCwgc2NvcGUpKVxuICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgIGV2ZW50SWQgPSByZXN1bHQ7XG4gICAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4gZXZlbnRJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNhcHR1cmVFdmVudChldmVudDogRXZlbnQsIGhpbnQ/OiBFdmVudEhpbnQsIHNjb3BlPzogU2NvcGUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIC8vIGVuc3VyZSB3ZSBoYXZlbid0IGNhcHR1cmVkIHRoaXMgdmVyeSBvYmplY3QgYmVmb3JlXG4gICAgaWYgKGhpbnQ/Lm9yaWdpbmFsRXhjZXB0aW9uICYmIGNoZWNrT3JTZXRBbHJlYWR5Q2F1Z2h0KGhpbnQub3JpZ2luYWxFeGNlcHRpb24pKSB7XG4gICAgICBsb2dnZXIubG9nKEFMUkVBRFlfU0VFTl9FUlJPUik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGV2ZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGhpbnQgJiYgaGludC5ldmVudF9pZDtcblxuICAgIHRoaXMuX3Byb2Nlc3MoXG4gICAgICB0aGlzLl9jYXB0dXJlRXZlbnQoZXZlbnQsIGhpbnQsIHNjb3BlKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIGV2ZW50SWQgPSByZXN1bHQ7XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGV2ZW50SWQ7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBjYXB0dXJlU2Vzc2lvbihzZXNzaW9uOiBTZXNzaW9uKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQoKSkge1xuICAgICAgbG9nZ2VyLndhcm4oJ1NESyBub3QgZW5hYmxlZCwgd2lsbCBub3QgY2FwdHVyZSBzZXNzaW9uLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghKHR5cGVvZiBzZXNzaW9uLnJlbGVhc2UgPT09ICdzdHJpbmcnKSkge1xuICAgICAgbG9nZ2VyLndhcm4oJ0Rpc2NhcmRlZCBzZXNzaW9uIGJlY2F1c2Ugb2YgbWlzc2luZyBvciBub24tc3RyaW5nIHJlbGVhc2UnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2VuZFNlc3Npb24oc2Vzc2lvbik7XG4gICAgICAvLyBBZnRlciBzZW5kaW5nLCB3ZSBzZXQgaW5pdCBmYWxzZSB0byBpbmRpY2F0ZSBpdCdzIG5vdCB0aGUgZmlyc3Qgb2NjdXJyZW5jZVxuICAgICAgc2Vzc2lvbi51cGRhdGUoeyBpbml0OiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBnZXREc24oKTogRHNuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZHNuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgZ2V0T3B0aW9ucygpOiBPIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGdldFRyYW5zcG9ydCgpOiBUcmFuc3BvcnQge1xuICAgIHJldHVybiB0aGlzLl9nZXRCYWNrZW5kKCkuZ2V0VHJhbnNwb3J0KCk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBmbHVzaCh0aW1lb3V0PzogbnVtYmVyKTogUHJvbWlzZUxpa2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9pc0NsaWVudERvbmVQcm9jZXNzaW5nKHRpbWVvdXQpLnRoZW4oY2xpZW50RmluaXNoZWQgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNwb3J0KClcbiAgICAgICAgLmNsb3NlKHRpbWVvdXQpXG4gICAgICAgIC50aGVuKHRyYW5zcG9ydEZsdXNoZWQgPT4gY2xpZW50RmluaXNoZWQgJiYgdHJhbnNwb3J0Rmx1c2hlZCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBjbG9zZSh0aW1lb3V0PzogbnVtYmVyKTogUHJvbWlzZUxpa2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmZsdXNoKHRpbWVvdXQpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIHRoaXMuZ2V0T3B0aW9ucygpLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgaW50ZWdyYXRpb25zXG4gICAqL1xuICBwdWJsaWMgc2V0dXBJbnRlZ3JhdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzRW5hYmxlZCgpICYmICF0aGlzLl9pbnRlZ3JhdGlvbnMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMuX2ludGVncmF0aW9ucyA9IHNldHVwSW50ZWdyYXRpb25zKHRoaXMuX29wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGdldEludGVncmF0aW9uPFQgZXh0ZW5kcyBJbnRlZ3JhdGlvbj4oaW50ZWdyYXRpb246IEludGVncmF0aW9uQ2xhc3M8VD4pOiBUIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAodGhpcy5faW50ZWdyYXRpb25zW2ludGVncmF0aW9uLmlkXSBhcyBUKSB8fCBudWxsO1xuICAgIH0gY2F0Y2ggKF9vTykge1xuICAgICAgbG9nZ2VyLndhcm4oYENhbm5vdCByZXRyaWV2ZSBpbnRlZ3JhdGlvbiAke2ludGVncmF0aW9uLmlkfSBmcm9tIHRoZSBjdXJyZW50IENsaWVudGApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqIFVwZGF0ZXMgZXhpc3Rpbmcgc2Vzc2lvbiBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgZXZlbnQgKi9cbiAgcHJvdGVjdGVkIF91cGRhdGVTZXNzaW9uRnJvbUV2ZW50KHNlc3Npb246IFNlc3Npb24sIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGxldCBjcmFzaGVkID0gZmFsc2U7XG4gICAgbGV0IGVycm9yZWQgPSBmYWxzZTtcbiAgICBjb25zdCBleGNlcHRpb25zID0gZXZlbnQuZXhjZXB0aW9uICYmIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXM7XG5cbiAgICBpZiAoZXhjZXB0aW9ucykge1xuICAgICAgZXJyb3JlZCA9IHRydWU7XG5cbiAgICAgIGZvciAoY29uc3QgZXggb2YgZXhjZXB0aW9ucykge1xuICAgICAgICBjb25zdCBtZWNoYW5pc20gPSBleC5tZWNoYW5pc207XG4gICAgICAgIGlmIChtZWNoYW5pc20gJiYgbWVjaGFuaXNtLmhhbmRsZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgY3Jhc2hlZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBIHNlc3Npb24gaXMgdXBkYXRlZCBhbmQgdGhhdCBzZXNzaW9uIHVwZGF0ZSBpcyBzZW50IGluIG9ubHkgb25lIG9mIHRoZSB0d28gZm9sbG93aW5nIHNjZW5hcmlvczpcbiAgICAvLyAxLiBTZXNzaW9uIHdpdGggbm9uIHRlcm1pbmFsIHN0YXR1cyBhbmQgMCBlcnJvcnMgKyBhbiBlcnJvciBvY2N1cnJlZCAtPiBXaWxsIHNldCBlcnJvciBjb3VudCB0byAxIGFuZCBzZW5kIHVwZGF0ZVxuICAgIC8vIDIuIFNlc3Npb24gd2l0aCBub24gdGVybWluYWwgc3RhdHVzIGFuZCAxIGVycm9yICsgYSBjcmFzaCBvY2N1cnJlZCAtPiBXaWxsIHNldCBzdGF0dXMgY3Jhc2hlZCBhbmQgc2VuZCB1cGRhdGVcbiAgICBjb25zdCBzZXNzaW9uTm9uVGVybWluYWwgPSBzZXNzaW9uLnN0YXR1cyA9PT0gU2Vzc2lvblN0YXR1cy5PaztcbiAgICBjb25zdCBzaG91bGRVcGRhdGVBbmRTZW5kID0gKHNlc3Npb25Ob25UZXJtaW5hbCAmJiBzZXNzaW9uLmVycm9ycyA9PT0gMCkgfHwgKHNlc3Npb25Ob25UZXJtaW5hbCAmJiBjcmFzaGVkKTtcblxuICAgIGlmIChzaG91bGRVcGRhdGVBbmRTZW5kKSB7XG4gICAgICBzZXNzaW9uLnVwZGF0ZSh7XG4gICAgICAgIC4uLihjcmFzaGVkICYmIHsgc3RhdHVzOiBTZXNzaW9uU3RhdHVzLkNyYXNoZWQgfSksXG4gICAgICAgIGVycm9yczogc2Vzc2lvbi5lcnJvcnMgfHwgTnVtYmVyKGVycm9yZWQgfHwgY3Jhc2hlZCksXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2FwdHVyZVNlc3Npb24oc2Vzc2lvbik7XG4gICAgfVxuICB9XG5cbiAgLyoqIERlbGl2ZXIgY2FwdHVyZWQgc2Vzc2lvbiB0byBTZW50cnkgKi9cbiAgcHJvdGVjdGVkIF9zZW5kU2Vzc2lvbihzZXNzaW9uOiBTZXNzaW9uKTogdm9pZCB7XG4gICAgdGhpcy5fZ2V0QmFja2VuZCgpLnNlbmRTZXNzaW9uKHNlc3Npb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBpZiB0aGUgY2xpZW50IGlzIGZpbmlzaGVkIHByb2Nlc3NpbmcuIFJldHVybnMgYSBwcm9taXNlIGJlY2F1c2UgaXQgd2lsbCB3YWl0IGB0aW1lb3V0YCBtcyBiZWZvcmUgc2F5aW5nXG4gICAqIFwibm9cIiAocmVzb2x2aW5nIHRvIGBmYWxzZWApIGluIG9yZGVyIHRvIGdpdmUgdGhlIGNsaWVudCBhIGNoYW5jZSB0byBwb3RlbnRpYWxseSBmaW5pc2ggZmlyc3QuXG4gICAqXG4gICAqIEBwYXJhbSB0aW1lb3V0IFRoZSB0aW1lLCBpbiBtcywgYWZ0ZXIgd2hpY2ggdG8gcmVzb2x2ZSB0byBgZmFsc2VgIGlmIHRoZSBjbGllbnQgaXMgc3RpbGwgYnVzeS4gUGFzc2luZyBgMGAgKG9yIG5vdFxuICAgKiBwYXNzaW5nIGFueXRoaW5nKSB3aWxsIG1ha2UgdGhlIHByb21pc2Ugd2FpdCBhcyBsb25nIGFzIGl0IHRha2VzIGZvciBwcm9jZXNzaW5nIHRvIGZpbmlzaCBiZWZvcmUgcmVzb2x2aW5nIHRvXG4gICAqIGB0cnVlYC5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHdpbGwgcmVzb2x2ZSB0byBgdHJ1ZWAgaWYgcHJvY2Vzc2luZyBpcyBhbHJlYWR5IGRvbmUgb3IgZmluaXNoZXMgYmVmb3JlIHRoZSB0aW1lb3V0LCBhbmRcbiAgICogYGZhbHNlYCBvdGhlcndpc2VcbiAgICovXG4gIHByb3RlY3RlZCBfaXNDbGllbnREb25lUHJvY2Vzc2luZyh0aW1lb3V0PzogbnVtYmVyKTogUHJvbWlzZUxpa2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgU3luY1Byb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBsZXQgdGlja2VkOiBudW1iZXIgPSAwO1xuICAgICAgY29uc3QgdGljazogbnVtYmVyID0gMTtcblxuICAgICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9udW1Qcm9jZXNzaW5nID09IDApIHtcbiAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRpY2tlZCArPSB0aWNrO1xuICAgICAgICAgIGlmICh0aW1lb3V0ICYmIHRpY2tlZCA+PSB0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgdGljayk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgY3VycmVudCBiYWNrZW5kLiAqL1xuICBwcm90ZWN0ZWQgX2dldEJhY2tlbmQoKTogQiB7XG4gICAgcmV0dXJuIHRoaXMuX2JhY2tlbmQ7XG4gIH1cblxuICAvKiogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoaXMgU0RLIGlzIGVuYWJsZWQgYW5kIGEgdmFsaWQgRHNuIGlzIHByZXNlbnQuICovXG4gIHByb3RlY3RlZCBfaXNFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbnMoKS5lbmFibGVkICE9PSBmYWxzZSAmJiB0aGlzLl9kc24gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGNvbW1vbiBpbmZvcm1hdGlvbiB0byBldmVudHMuXG4gICAqXG4gICAqIFRoZSBpbmZvcm1hdGlvbiBpbmNsdWRlcyByZWxlYXNlIGFuZCBlbnZpcm9ubWVudCBmcm9tIGBvcHRpb25zYCxcbiAgICogYnJlYWRjcnVtYnMgYW5kIGNvbnRleHQgKGV4dHJhLCB0YWdzIGFuZCB1c2VyKSBmcm9tIHRoZSBzY29wZS5cbiAgICpcbiAgICogSW5mb3JtYXRpb24gdGhhdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIGV2ZW50IGlzIG5ldmVyIG92ZXJ3cml0dGVuLiBGb3JcbiAgICogbmVzdGVkIG9iamVjdHMsIHN1Y2ggYXMgdGhlIGNvbnRleHQsIGtleXMgYXJlIG1lcmdlZC5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IFRoZSBvcmlnaW5hbCBldmVudC5cbiAgICogQHBhcmFtIGhpbnQgTWF5IGNvbnRhaW4gYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uLlxuICAgKiBAcGFyYW0gc2NvcGUgQSBzY29wZSBjb250YWluaW5nIGV2ZW50IG1ldGFkYXRhLlxuICAgKiBAcmV0dXJucyBBIG5ldyBldmVudCB3aXRoIG1vcmUgaW5mb3JtYXRpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgX3ByZXBhcmVFdmVudChldmVudDogRXZlbnQsIHNjb3BlPzogU2NvcGUsIGhpbnQ/OiBFdmVudEhpbnQpOiBQcm9taXNlTGlrZTxFdmVudCB8IG51bGw+IHtcbiAgICBjb25zdCB7IG5vcm1hbGl6ZURlcHRoID0gMyB9ID0gdGhpcy5nZXRPcHRpb25zKCk7XG4gICAgY29uc3QgcHJlcGFyZWQ6IEV2ZW50ID0ge1xuICAgICAgLi4uZXZlbnQsXG4gICAgICBldmVudF9pZDogZXZlbnQuZXZlbnRfaWQgfHwgKGhpbnQgJiYgaGludC5ldmVudF9pZCA/IGhpbnQuZXZlbnRfaWQgOiB1dWlkNCgpKSxcbiAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wIHx8IGRhdGVUaW1lc3RhbXBJblNlY29uZHMoKSxcbiAgICB9O1xuXG4gICAgdGhpcy5fYXBwbHlDbGllbnRPcHRpb25zKHByZXBhcmVkKTtcbiAgICB0aGlzLl9hcHBseUludGVncmF0aW9uc01ldGFkYXRhKHByZXBhcmVkKTtcblxuICAgIC8vIElmIHdlIGhhdmUgc2NvcGUgZ2l2ZW4gdG8gdXMsIHVzZSBpdCBhcyB0aGUgYmFzZSBmb3IgZnVydGhlciBtb2RpZmljYXRpb25zLlxuICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgY29weWluZyBvZiBkYXRhIGlmIGBjYXB0dXJlQ29udGV4dGAgaXMgbm90IHByb3ZpZGVkLlxuICAgIGxldCBmaW5hbFNjb3BlID0gc2NvcGU7XG4gICAgaWYgKGhpbnQgJiYgaGludC5jYXB0dXJlQ29udGV4dCkge1xuICAgICAgZmluYWxTY29wZSA9IFNjb3BlLmNsb25lKGZpbmFsU2NvcGUpLnVwZGF0ZShoaW50LmNhcHR1cmVDb250ZXh0KTtcbiAgICB9XG5cbiAgICAvLyBXZSBwcmVwYXJlIHRoZSByZXN1bHQgaGVyZSB3aXRoIGEgcmVzb2x2ZWQgRXZlbnQuXG4gICAgbGV0IHJlc3VsdCA9IFN5bmNQcm9taXNlLnJlc29sdmU8RXZlbnQgfCBudWxsPihwcmVwYXJlZCk7XG5cbiAgICAvLyBUaGlzIHNob3VsZCBiZSB0aGUgbGFzdCB0aGluZyBjYWxsZWQsIHNpbmNlIHdlIHdhbnQgdGhhdFxuICAgIC8vIHtAbGluayBIdWIuYWRkRXZlbnRQcm9jZXNzb3J9IGdldHMgdGhlIGZpbmlzaGVkIHByZXBhcmVkIGV2ZW50LlxuICAgIGlmIChmaW5hbFNjb3BlKSB7XG4gICAgICAvLyBJbiBjYXNlIHdlIGhhdmUgYSBodWIgd2UgcmVhc3NpZ24gaXQuXG4gICAgICByZXN1bHQgPSBmaW5hbFNjb3BlLmFwcGx5VG9FdmVudChwcmVwYXJlZCwgaGludCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdC50aGVuKGV2dCA9PiB7XG4gICAgICBpZiAodHlwZW9mIG5vcm1hbGl6ZURlcHRoID09PSAnbnVtYmVyJyAmJiBub3JtYWxpemVEZXB0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vcm1hbGl6ZUV2ZW50KGV2dCwgbm9ybWFsaXplRGVwdGgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV2dDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGBub3JtYWxpemVgIGZ1bmN0aW9uIG9uIG5lY2Vzc2FyeSBgRXZlbnRgIGF0dHJpYnV0ZXMgdG8gbWFrZSB0aGVtIHNhZmUgZm9yIHNlcmlhbGl6YXRpb24uXG4gICAqIE5vcm1hbGl6ZWQga2V5czpcbiAgICogLSBgYnJlYWRjcnVtYnMuZGF0YWBcbiAgICogLSBgdXNlcmBcbiAgICogLSBgY29udGV4dHNgXG4gICAqIC0gYGV4dHJhYFxuICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRcbiAgICogQHJldHVybnMgTm9ybWFsaXplZCBldmVudFxuICAgKi9cbiAgcHJvdGVjdGVkIF9ub3JtYWxpemVFdmVudChldmVudDogRXZlbnQgfCBudWxsLCBkZXB0aDogbnVtYmVyKTogRXZlbnQgfCBudWxsIHtcbiAgICBpZiAoIWV2ZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVkID0ge1xuICAgICAgLi4uZXZlbnQsXG4gICAgICAuLi4oZXZlbnQuYnJlYWRjcnVtYnMgJiYge1xuICAgICAgICBicmVhZGNydW1iczogZXZlbnQuYnJlYWRjcnVtYnMubWFwKGIgPT4gKHtcbiAgICAgICAgICAuLi5iLFxuICAgICAgICAgIC4uLihiLmRhdGEgJiYge1xuICAgICAgICAgICAgZGF0YTogbm9ybWFsaXplKGIuZGF0YSwgZGVwdGgpLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KSksXG4gICAgICB9KSxcbiAgICAgIC4uLihldmVudC51c2VyICYmIHtcbiAgICAgICAgdXNlcjogbm9ybWFsaXplKGV2ZW50LnVzZXIsIGRlcHRoKSxcbiAgICAgIH0pLFxuICAgICAgLi4uKGV2ZW50LmNvbnRleHRzICYmIHtcbiAgICAgICAgY29udGV4dHM6IG5vcm1hbGl6ZShldmVudC5jb250ZXh0cywgZGVwdGgpLFxuICAgICAgfSksXG4gICAgICAuLi4oZXZlbnQuZXh0cmEgJiYge1xuICAgICAgICBleHRyYTogbm9ybWFsaXplKGV2ZW50LmV4dHJhLCBkZXB0aCksXG4gICAgICB9KSxcbiAgICB9O1xuICAgIC8vIGV2ZW50LmNvbnRleHRzLnRyYWNlIHN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCBhIFRyYW5zYWN0aW9uLiBTaW1pbGFybHksXG4gICAgLy8gZXZlbnQuc3BhbnNbXSBzdG9yZXMgaW5mb3JtYXRpb24gYWJvdXQgY2hpbGQgU3BhbnMuIEdpdmVuIHRoYXQgYVxuICAgIC8vIFRyYW5zYWN0aW9uIGlzIGNvbmNlcHR1YWxseSBhIFNwYW4sIG5vcm1hbGl6YXRpb24gc2hvdWxkIGFwcGx5IHRvIGJvdGhcbiAgICAvLyBUcmFuc2FjdGlvbnMgYW5kIFNwYW5zIGNvbnNpc3RlbnRseS5cbiAgICAvLyBGb3Igbm93IHRoZSBkZWNpc2lvbiBpcyB0byBza2lwIG5vcm1hbGl6YXRpb24gb2YgVHJhbnNhY3Rpb25zIGFuZCBTcGFucyxcbiAgICAvLyBzbyB0aGlzIGJsb2NrIG92ZXJ3cml0ZXMgdGhlIG5vcm1hbGl6ZWQgZXZlbnQgdG8gYWRkIGJhY2sgdGhlIG9yaWdpbmFsXG4gICAgLy8gVHJhbnNhY3Rpb24gaW5mb3JtYXRpb24gcHJpb3IgdG8gbm9ybWFsaXphdGlvbi5cbiAgICBpZiAoZXZlbnQuY29udGV4dHMgJiYgZXZlbnQuY29udGV4dHMudHJhY2UpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgIG5vcm1hbGl6ZWQuY29udGV4dHMudHJhY2UgPSBldmVudC5jb250ZXh0cy50cmFjZTtcbiAgICB9XG5cbiAgICBjb25zdCB7IF9leHBlcmltZW50cyA9IHt9IH0gPSB0aGlzLmdldE9wdGlvbnMoKTtcbiAgICBpZiAoX2V4cGVyaW1lbnRzLmVuc3VyZU5vQ2lyY3VsYXJTdHJ1Y3R1cmVzKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplKG5vcm1hbGl6ZWQpO1xuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpemVkO1xuICB9XG5cbiAgLyoqXG4gICAqICBFbmhhbmNlcyBldmVudCB1c2luZyB0aGUgY2xpZW50IGNvbmZpZ3VyYXRpb24uXG4gICAqICBJdCB0YWtlcyBjYXJlIG9mIGFsbCBcInN0YXRpY1wiIHZhbHVlcyBsaWtlIGVudmlyb25tZW50LCByZWxlYXNlIGFuZCBgZGlzdGAsXG4gICAqICBhcyB3ZWxsIGFzIHRydW5jYXRpbmcgb3Zlcmx5IGxvbmcgdmFsdWVzLlxuICAgKiBAcGFyYW0gZXZlbnQgZXZlbnQgaW5zdGFuY2UgdG8gYmUgZW5oYW5jZWRcbiAgICovXG4gIHByb3RlY3RlZCBfYXBwbHlDbGllbnRPcHRpb25zKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbnMoKTtcbiAgICBjb25zdCB7IGVudmlyb25tZW50LCByZWxlYXNlLCBkaXN0LCBtYXhWYWx1ZUxlbmd0aCA9IDI1MCB9ID0gb3B0aW9ucztcblxuICAgIGlmICghKCdlbnZpcm9ubWVudCcgaW4gZXZlbnQpKSB7XG4gICAgICBldmVudC5lbnZpcm9ubWVudCA9ICdlbnZpcm9ubWVudCcgaW4gb3B0aW9ucyA/IGVudmlyb25tZW50IDogJ3Byb2R1Y3Rpb24nO1xuICAgIH1cblxuICAgIGlmIChldmVudC5yZWxlYXNlID09PSB1bmRlZmluZWQgJiYgcmVsZWFzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBldmVudC5yZWxlYXNlID0gcmVsZWFzZTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQuZGlzdCA9PT0gdW5kZWZpbmVkICYmIGRpc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZXZlbnQuZGlzdCA9IGRpc3Q7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50Lm1lc3NhZ2UpIHtcbiAgICAgIGV2ZW50Lm1lc3NhZ2UgPSB0cnVuY2F0ZShldmVudC5tZXNzYWdlLCBtYXhWYWx1ZUxlbmd0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhjZXB0aW9uID0gZXZlbnQuZXhjZXB0aW9uICYmIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMgJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXTtcbiAgICBpZiAoZXhjZXB0aW9uICYmIGV4Y2VwdGlvbi52YWx1ZSkge1xuICAgICAgZXhjZXB0aW9uLnZhbHVlID0gdHJ1bmNhdGUoZXhjZXB0aW9uLnZhbHVlLCBtYXhWYWx1ZUxlbmd0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGV2ZW50LnJlcXVlc3Q7XG4gICAgaWYgKHJlcXVlc3QgJiYgcmVxdWVzdC51cmwpIHtcbiAgICAgIHJlcXVlc3QudXJsID0gdHJ1bmNhdGUocmVxdWVzdC51cmwsIG1heFZhbHVlTGVuZ3RoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBhZGRzIGFsbCB1c2VkIGludGVncmF0aW9ucyB0byB0aGUgU0RLIGluZm8gaW4gdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRoYXQgd2lsbCBiZSBmaWxsZWQgd2l0aCBhbGwgaW50ZWdyYXRpb25zLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9hcHBseUludGVncmF0aW9uc01ldGFkYXRhKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGludGVncmF0aW9uc0FycmF5ID0gT2JqZWN0LmtleXModGhpcy5faW50ZWdyYXRpb25zKTtcbiAgICBpZiAoaW50ZWdyYXRpb25zQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgZXZlbnQuc2RrID0gZXZlbnQuc2RrIHx8IHt9O1xuICAgICAgZXZlbnQuc2RrLmludGVncmF0aW9ucyA9IFsuLi4oZXZlbnQuc2RrLmludGVncmF0aW9ucyB8fCBbXSksIC4uLmludGVncmF0aW9uc0FycmF5XTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGVsbHMgdGhlIGJhY2tlbmQgdG8gc2VuZCB0aGlzIGV2ZW50XG4gICAqIEBwYXJhbSBldmVudCBUaGUgU2VudHJ5IGV2ZW50IHRvIHNlbmRcbiAgICovXG4gIHByb3RlY3RlZCBfc2VuZEV2ZW50KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuX2dldEJhY2tlbmQoKS5zZW5kRXZlbnQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3NlcyB0aGUgZXZlbnQgYW5kIGxvZ3MgYW4gZXJyb3IgaW4gY2FzZSBvZiByZWplY3Rpb25cbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwYXJhbSBoaW50XG4gICAqIEBwYXJhbSBzY29wZVxuICAgKi9cbiAgcHJvdGVjdGVkIF9jYXB0dXJlRXZlbnQoZXZlbnQ6IEV2ZW50LCBoaW50PzogRXZlbnRIaW50LCBzY29wZT86IFNjb3BlKTogUHJvbWlzZUxpa2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NFdmVudChldmVudCwgaGludCwgc2NvcGUpLnRoZW4oXG4gICAgICBmaW5hbEV2ZW50ID0+IHtcbiAgICAgICAgcmV0dXJuIGZpbmFsRXZlbnQuZXZlbnRfaWQ7XG4gICAgICB9LFxuICAgICAgcmVhc29uID0+IHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKHJlYXNvbik7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2Vzc2VzIGFuIGV2ZW50IChlaXRoZXIgZXJyb3Igb3IgbWVzc2FnZSkgYW5kIHNlbmRzIGl0IHRvIFNlbnRyeS5cbiAgICpcbiAgICogVGhpcyBhbHNvIGFkZHMgYnJlYWRjcnVtYnMgYW5kIGNvbnRleHQgaW5mb3JtYXRpb24gdG8gdGhlIGV2ZW50LiBIb3dldmVyLFxuICAgKiBwbGF0Zm9ybSBzcGVjaWZpYyBtZXRhIGRhdGEgKHN1Y2ggYXMgdGhlIFVzZXIncyBJUCBhZGRyZXNzKSBtdXN0IGJlIGFkZGVkXG4gICAqIGJ5IHRoZSBTREsgaW1wbGVtZW50b3IuXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgdG8gc2VuZCB0byBTZW50cnkuXG4gICAqIEBwYXJhbSBoaW50IE1heSBjb250YWluIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbi5cbiAgICogQHBhcmFtIHNjb3BlIEEgc2NvcGUgY29udGFpbmluZyBldmVudCBtZXRhZGF0YS5cbiAgICogQHJldHVybnMgQSBTeW5jUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGV2ZW50IG9yIHJlamVjdHMgaW4gY2FzZSBldmVudCB3YXMvd2lsbCBub3QgYmUgc2VuZC5cbiAgICovXG4gIHByb3RlY3RlZCBfcHJvY2Vzc0V2ZW50KGV2ZW50OiBFdmVudCwgaGludD86IEV2ZW50SGludCwgc2NvcGU/OiBTY29wZSk6IFByb21pc2VMaWtlPEV2ZW50PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICAgIGNvbnN0IHsgYmVmb3JlU2VuZCwgc2FtcGxlUmF0ZSB9ID0gdGhpcy5nZXRPcHRpb25zKCk7XG4gICAgY29uc3QgdHJhbnNwb3J0ID0gdGhpcy5nZXRUcmFuc3BvcnQoKTtcblxuICAgIGlmICghdGhpcy5faXNFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybiBTeW5jUHJvbWlzZS5yZWplY3QobmV3IFNlbnRyeUVycm9yKCdTREsgbm90IGVuYWJsZWQsIHdpbGwgbm90IGNhcHR1cmUgZXZlbnQuJykpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzVHJhbnNhY3Rpb24gPSBldmVudC50eXBlID09PSAndHJhbnNhY3Rpb24nO1xuICAgIC8vIDEuMCA9PT0gMTAwJSBldmVudHMgYXJlIHNlbnRcbiAgICAvLyAwLjAgPT09IDAlIGV2ZW50cyBhcmUgc2VudFxuICAgIC8vIFNhbXBsaW5nIGZvciB0cmFuc2FjdGlvbiBoYXBwZW5zIHNvbWV3aGVyZSBlbHNlXG4gICAgaWYgKCFpc1RyYW5zYWN0aW9uICYmIHR5cGVvZiBzYW1wbGVSYXRlID09PSAnbnVtYmVyJyAmJiBNYXRoLnJhbmRvbSgpID4gc2FtcGxlUmF0ZSkge1xuICAgICAgdHJhbnNwb3J0LnJlY29yZExvc3RFdmVudD8uKE91dGNvbWUuU2FtcGxlUmF0ZSwgJ2V2ZW50Jyk7XG4gICAgICByZXR1cm4gU3luY1Byb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgU2VudHJ5RXJyb3IoXG4gICAgICAgICAgYERpc2NhcmRpbmcgZXZlbnQgYmVjYXVzZSBpdCdzIG5vdCBpbmNsdWRlZCBpbiB0aGUgcmFuZG9tIHNhbXBsZSAoc2FtcGxpbmcgcmF0ZSA9ICR7c2FtcGxlUmF0ZX0pYCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3ByZXBhcmVFdmVudChldmVudCwgc2NvcGUsIGhpbnQpXG4gICAgICAudGhlbihwcmVwYXJlZCA9PiB7XG4gICAgICAgIGlmIChwcmVwYXJlZCA9PT0gbnVsbCkge1xuICAgICAgICAgIHRyYW5zcG9ydC5yZWNvcmRMb3N0RXZlbnQ/LihPdXRjb21lLkV2ZW50UHJvY2Vzc29yLCBldmVudC50eXBlIHx8ICdldmVudCcpO1xuICAgICAgICAgIHRocm93IG5ldyBTZW50cnlFcnJvcignQW4gZXZlbnQgcHJvY2Vzc29yIHJldHVybmVkIG51bGwsIHdpbGwgbm90IHNlbmQgZXZlbnQuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc0ludGVybmFsRXhjZXB0aW9uID0gaGludCAmJiBoaW50LmRhdGEgJiYgKGhpbnQuZGF0YSBhcyB7IF9fc2VudHJ5X186IGJvb2xlYW4gfSkuX19zZW50cnlfXyA9PT0gdHJ1ZTtcbiAgICAgICAgaWYgKGlzSW50ZXJuYWxFeGNlcHRpb24gfHwgaXNUcmFuc2FjdGlvbiB8fCAhYmVmb3JlU2VuZCkge1xuICAgICAgICAgIHJldHVybiBwcmVwYXJlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJlZm9yZVNlbmRSZXN1bHQgPSBiZWZvcmVTZW5kKHByZXBhcmVkLCBoaW50KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vuc3VyZUJlZm9yZVNlbmRSdihiZWZvcmVTZW5kUmVzdWx0KTtcbiAgICAgIH0pXG4gICAgICAudGhlbihwcm9jZXNzZWRFdmVudCA9PiB7XG4gICAgICAgIGlmIChwcm9jZXNzZWRFdmVudCA9PT0gbnVsbCkge1xuICAgICAgICAgIHRyYW5zcG9ydC5yZWNvcmRMb3N0RXZlbnQ/LihPdXRjb21lLkJlZm9yZVNlbmQsIGV2ZW50LnR5cGUgfHwgJ2V2ZW50Jyk7XG4gICAgICAgICAgdGhyb3cgbmV3IFNlbnRyeUVycm9yKCdgYmVmb3JlU2VuZGAgcmV0dXJuZWQgYG51bGxgLCB3aWxsIG5vdCBzZW5kIGV2ZW50LicpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHNjb3BlICYmIHNjb3BlLmdldFNlc3Npb24gJiYgc2NvcGUuZ2V0U2Vzc2lvbigpO1xuICAgICAgICBpZiAoIWlzVHJhbnNhY3Rpb24gJiYgc2Vzc2lvbikge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVNlc3Npb25Gcm9tRXZlbnQoc2Vzc2lvbiwgcHJvY2Vzc2VkRXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2VuZEV2ZW50KHByb2Nlc3NlZEV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3NlZEV2ZW50O1xuICAgICAgfSlcbiAgICAgIC50aGVuKG51bGwsIHJlYXNvbiA9PiB7XG4gICAgICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBTZW50cnlFcnJvcikge1xuICAgICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FwdHVyZUV4Y2VwdGlvbihyZWFzb24sIHtcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBfX3NlbnRyeV9fOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb3JpZ2luYWxFeGNlcHRpb246IHJlYXNvbiBhcyBFcnJvcixcbiAgICAgICAgfSk7XG4gICAgICAgIHRocm93IG5ldyBTZW50cnlFcnJvcihcbiAgICAgICAgICBgRXZlbnQgcHJvY2Vzc2luZyBwaXBlbGluZSB0aHJldyBhbiBlcnJvciwgb3JpZ2luYWwgZXZlbnQgd2lsbCBub3QgYmUgc2VudC4gRGV0YWlscyBoYXZlIGJlZW4gc2VudCBhcyBhIG5ldyBldmVudC5cXG5SZWFzb246ICR7cmVhc29ufWAsXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPY2N1cGllcyB0aGUgY2xpZW50IHdpdGggcHJvY2Vzc2luZyBhbmQgZXZlbnRcbiAgICovXG4gIHByb3RlY3RlZCBfcHJvY2VzczxUPihwcm9taXNlOiBQcm9taXNlTGlrZTxUPik6IHZvaWQge1xuICAgIHRoaXMuX251bVByb2Nlc3NpbmcgKz0gMTtcbiAgICB2b2lkIHByb21pc2UudGhlbihcbiAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgdGhpcy5fbnVtUHJvY2Vzc2luZyAtPSAxO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9LFxuICAgICAgcmVhc29uID0+IHtcbiAgICAgICAgdGhpcy5fbnVtUHJvY2Vzc2luZyAtPSAxO1xuICAgICAgICByZXR1cm4gcmVhc29uO1xuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoYXQgcmV0dXJuIHZhbHVlIG9mIGNvbmZpZ3VyZWQgYGJlZm9yZVNlbmRgIGlzIG9mIGV4cGVjdGVkIHR5cGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgX2Vuc3VyZUJlZm9yZVNlbmRSdihcbiAgICBydjogUHJvbWlzZUxpa2U8RXZlbnQgfCBudWxsPiB8IEV2ZW50IHwgbnVsbCxcbiAgKTogUHJvbWlzZUxpa2U8RXZlbnQgfCBudWxsPiB8IEV2ZW50IHwgbnVsbCB7XG4gICAgY29uc3QgbnVsbEVyciA9ICdgYmVmb3JlU2VuZGAgbWV0aG9kIGhhcyB0byByZXR1cm4gYG51bGxgIG9yIGEgdmFsaWQgZXZlbnQuJztcbiAgICBpZiAoaXNUaGVuYWJsZShydikpIHtcbiAgICAgIHJldHVybiAocnYgYXMgUHJvbWlzZUxpa2U8RXZlbnQgfCBudWxsPikudGhlbihcbiAgICAgICAgZXZlbnQgPT4ge1xuICAgICAgICAgIGlmICghKGlzUGxhaW5PYmplY3QoZXZlbnQpIHx8IGV2ZW50ID09PSBudWxsKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFNlbnRyeUVycm9yKG51bGxFcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIGUgPT4ge1xuICAgICAgICAgIHRocm93IG5ldyBTZW50cnlFcnJvcihgYmVmb3JlU2VuZCByZWplY3RlZCB3aXRoICR7ZX1gKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICghKGlzUGxhaW5PYmplY3QocnYpIHx8IHJ2ID09PSBudWxsKSkge1xuICAgICAgdGhyb3cgbmV3IFNlbnRyeUVycm9yKG51bGxFcnIpO1xuICAgIH1cbiAgICByZXR1cm4gcnY7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBFdmVudCwgUmVzcG9uc2UsIFN0YXR1cywgVHJhbnNwb3J0IH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBTeW5jUHJvbWlzZSB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG4vKiogTm9vcCB0cmFuc3BvcnQgKi9cbmV4cG9ydCBjbGFzcyBOb29wVHJhbnNwb3J0IGltcGxlbWVudHMgVHJhbnNwb3J0IHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2VuZEV2ZW50KF86IEV2ZW50KTogUHJvbWlzZUxpa2U8UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gU3luY1Byb21pc2UucmVzb2x2ZSh7XG4gICAgICByZWFzb246IGBOb29wVHJhbnNwb3J0OiBFdmVudCBoYXMgYmVlbiBza2lwcGVkIGJlY2F1c2Ugbm8gRHNuIGlzIGNvbmZpZ3VyZWQuYCxcbiAgICAgIHN0YXR1czogU3RhdHVzLlNraXBwZWQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBjbG9zZShfPzogbnVtYmVyKTogUHJvbWlzZUxpa2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBTeW5jUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgRXZlbnQsIEV2ZW50SGludCwgT3B0aW9ucywgU2Vzc2lvbiwgU2V2ZXJpdHksIFRyYW5zcG9ydCB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgbG9nZ2VyLCBTZW50cnlFcnJvciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5pbXBvcnQgeyBOb29wVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnRzL25vb3AnO1xuXG4vKipcbiAqIEludGVybmFsIHBsYXRmb3JtLWRlcGVuZGVudCBTZW50cnkgU0RLIEJhY2tlbmQuXG4gKlxuICogV2hpbGUge0BsaW5rIENsaWVudH0gY29udGFpbnMgYnVzaW5lc3MgbG9naWMgc3BlY2lmaWMgdG8gYW4gU0RLLCB0aGVcbiAqIEJhY2tlbmQgb2ZmZXJzIHBsYXRmb3JtIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBmb3IgbG93LWxldmVsIG9wZXJhdGlvbnMuXG4gKiBUaGVzZSBhcmUgcGVyc2lzdGluZyBhbmQgbG9hZGluZyBpbmZvcm1hdGlvbiwgc2VuZGluZyBldmVudHMsIGFuZCBob29raW5nXG4gKiBpbnRvIHRoZSBlbnZpcm9ubWVudC5cbiAqXG4gKiBCYWNrZW5kcyByZWNlaXZlIGEgaGFuZGxlIHRvIHRoZSBDbGllbnQgaW4gdGhlaXIgY29uc3RydWN0b3IuIFdoZW4gYVxuICogQmFja2VuZCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlcyBldmVudHMsIGl0IG11c3QgcGFzcyB0aGVtIHRvXG4gKiB0aGUgQ2xpZW50IGZvciB2YWxpZGF0aW9uIGFuZCBwcm9jZXNzaW5nIGZpcnN0LlxuICpcbiAqIFVzdWFsbHksIHRoZSBDbGllbnQgd2lsbCBiZSBvZiBjb3JyZXNwb25kaW5nIHR5cGUsIGUuZy4gTm9kZUJhY2tlbmRcbiAqIHJlY2VpdmVzIE5vZGVDbGllbnQuIEhvd2V2ZXIsIGhpZ2hlci1sZXZlbCBTREtzIGNhbiBjaG9vc2UgdG8gaW5zdGFudGlhdGVcbiAqIG11bHRpcGxlIEJhY2tlbmRzIGFuZCBkZWxlZ2F0ZSB0YXNrcyBiZXR3ZWVuIHRoZW0uIEluIHRoaXMgY2FzZSwgYW4gZXZlbnRcbiAqIGdlbmVyYXRlZCBieSBvbmUgYmFja2VuZCBtaWdodCB2ZXJ5IHdlbGwgYmUgc2VudCBieSBhbm90aGVyIG9uZS5cbiAqXG4gKiBUaGUgY2xpZW50IGFsc28gcHJvdmlkZXMgYWNjZXNzIHRvIG9wdGlvbnMgdmlhIHtAbGluayBDbGllbnQuZ2V0T3B0aW9uc30uXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFja2VuZCB7XG4gIC8qKiBDcmVhdGVzIGEge0BsaW5rIEV2ZW50fSBmcm9tIGFuIGV4Y2VwdGlvbi4gKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgZXZlbnRGcm9tRXhjZXB0aW9uKGV4Y2VwdGlvbjogYW55LCBoaW50PzogRXZlbnRIaW50KTogUHJvbWlzZUxpa2U8RXZlbnQ+O1xuXG4gIC8qKiBDcmVhdGVzIGEge0BsaW5rIEV2ZW50fSBmcm9tIGEgcGxhaW4gbWVzc2FnZS4gKi9cbiAgZXZlbnRGcm9tTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcsIGxldmVsPzogU2V2ZXJpdHksIGhpbnQ/OiBFdmVudEhpbnQpOiBQcm9taXNlTGlrZTxFdmVudD47XG5cbiAgLyoqIFN1Ym1pdHMgdGhlIGV2ZW50IHRvIFNlbnRyeSAqL1xuICBzZW5kRXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZDtcblxuICAvKiogU3VibWl0cyB0aGUgc2Vzc2lvbiB0byBTZW50cnkgKi9cbiAgc2VuZFNlc3Npb24oc2Vzc2lvbjogU2Vzc2lvbik6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRyYW5zcG9ydCB0aGF0IGlzIHVzZWQgYnkgdGhlIGJhY2tlbmQuXG4gICAqIFBsZWFzZSBub3RlIHRoYXQgdGhlIHRyYW5zcG9ydCBnZXRzIGxhenkgaW5pdGlhbGl6ZWQgc28gaXQgd2lsbCBvbmx5IGJlIHRoZXJlIG9uY2UgdGhlIGZpcnN0IGV2ZW50IGhhcyBiZWVuIHNlbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSB0cmFuc3BvcnQuXG4gICAqL1xuICBnZXRUcmFuc3BvcnQoKTogVHJhbnNwb3J0O1xufVxuXG4vKipcbiAqIEEgY2xhc3Mgb2JqZWN0IHRoYXQgY2FuIGluc3RhbnRpYXRlIEJhY2tlbmQgb2JqZWN0cy5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IHR5cGUgQmFja2VuZENsYXNzPEIgZXh0ZW5kcyBCYWNrZW5kLCBPIGV4dGVuZHMgT3B0aW9ucz4gPSBuZXcgKG9wdGlvbnM6IE8pID0+IEI7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBpbXBsZW1lbnRpb24gb2YgYSBCYWNrZW5kLlxuICogQGhpZGRlblxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUJhY2tlbmQ8TyBleHRlbmRzIE9wdGlvbnM+IGltcGxlbWVudHMgQmFja2VuZCB7XG4gIC8qKiBPcHRpb25zIHBhc3NlZCB0byB0aGUgU0RLLiAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX29wdGlvbnM6IE87XG5cbiAgLyoqIENhY2hlZCB0cmFuc3BvcnQgdXNlZCBpbnRlcm5hbGx5LiAqL1xuICBwcm90ZWN0ZWQgX3RyYW5zcG9ydDogVHJhbnNwb3J0O1xuXG4gIC8qKiBDcmVhdGVzIGEgbmV3IGJhY2tlbmQgaW5zdGFuY2UuICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBPKSB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgaWYgKCF0aGlzLl9vcHRpb25zLmRzbikge1xuICAgICAgbG9nZ2VyLndhcm4oJ05vIERTTiBwcm92aWRlZCwgYmFja2VuZCB3aWxsIG5vdCBkbyBhbnl0aGluZy4nKTtcbiAgICB9XG4gICAgdGhpcy5fdHJhbnNwb3J0ID0gdGhpcy5fc2V0dXBUcmFuc3BvcnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcbiAgcHVibGljIGV2ZW50RnJvbUV4Y2VwdGlvbihfZXhjZXB0aW9uOiBhbnksIF9oaW50PzogRXZlbnRIaW50KTogUHJvbWlzZUxpa2U8RXZlbnQ+IHtcbiAgICB0aHJvdyBuZXcgU2VudHJ5RXJyb3IoJ0JhY2tlbmQgaGFzIHRvIGltcGxlbWVudCBgZXZlbnRGcm9tRXhjZXB0aW9uYCBtZXRob2QnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGV2ZW50RnJvbU1lc3NhZ2UoX21lc3NhZ2U6IHN0cmluZywgX2xldmVsPzogU2V2ZXJpdHksIF9oaW50PzogRXZlbnRIaW50KTogUHJvbWlzZUxpa2U8RXZlbnQ+IHtcbiAgICB0aHJvdyBuZXcgU2VudHJ5RXJyb3IoJ0JhY2tlbmQgaGFzIHRvIGltcGxlbWVudCBgZXZlbnRGcm9tTWVzc2FnZWAgbWV0aG9kJyk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZW5kRXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLl90cmFuc3BvcnQuc2VuZEV2ZW50KGV2ZW50KS50aGVuKG51bGwsIHJlYXNvbiA9PiB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEVycm9yIHdoaWxlIHNlbmRpbmcgZXZlbnQ6ICR7cmVhc29ufWApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2VuZFNlc3Npb24oc2Vzc2lvbjogU2Vzc2lvbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdHJhbnNwb3J0LnNlbmRTZXNzaW9uKSB7XG4gICAgICBsb2dnZXIud2FybihcIkRyb3BwaW5nIHNlc3Npb24gYmVjYXVzZSBjdXN0b20gdHJhbnNwb3J0IGRvZXNuJ3QgaW1wbGVtZW50IHNlbmRTZXNzaW9uXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZvaWQgdGhpcy5fdHJhbnNwb3J0LnNlbmRTZXNzaW9uKHNlc3Npb24pLnRoZW4obnVsbCwgcmVhc29uID0+IHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRXJyb3Igd2hpbGUgc2VuZGluZyBzZXNzaW9uOiAke3JlYXNvbn1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGdldFRyYW5zcG9ydCgpOiBUcmFuc3BvcnQge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgdHJhbnNwb3J0IHNvIGl0IGNhbiBiZSB1c2VkIGxhdGVyIHRvIHNlbmQgcmVxdWVzdHMuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3NldHVwVHJhbnNwb3J0KCk6IFRyYW5zcG9ydCB7XG4gICAgcmV0dXJuIG5ldyBOb29wVHJhbnNwb3J0KCk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBFdmVudCwgU2RrSW5mbywgU2VudHJ5UmVxdWVzdCwgU2VudHJ5UmVxdWVzdFR5cGUsIFNlc3Npb24sIFNlc3Npb25BZ2dyZWdhdGVzIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5cbmltcG9ydCB7IEFQSSB9IGZyb20gJy4vYXBpJztcblxuLyoqIEV4dHJhY3Qgc2RrIGluZm8gZnJvbSBmcm9tIHRoZSBBUEkgbWV0YWRhdGEgKi9cbmZ1bmN0aW9uIGdldFNka01ldGFkYXRhRm9yRW52ZWxvcGVIZWFkZXIoYXBpOiBBUEkpOiBTZGtJbmZvIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFhcGkubWV0YWRhdGEgfHwgIWFwaS5tZXRhZGF0YS5zZGspIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uIH0gPSBhcGkubWV0YWRhdGEuc2RrO1xuICByZXR1cm4geyBuYW1lLCB2ZXJzaW9uIH07XG59XG5cbi8qKlxuICogQXBwbHkgU2RrSW5mbyAobmFtZSwgdmVyc2lvbiwgcGFja2FnZXMsIGludGVncmF0aW9ucykgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZXZlbnQga2V5LlxuICogTWVyZ2Ugd2l0aCBleGlzdGluZyBkYXRhIGlmIGFueS5cbiAqKi9cbmZ1bmN0aW9uIGVuaGFuY2VFdmVudFdpdGhTZGtJbmZvKGV2ZW50OiBFdmVudCwgc2RrSW5mbz86IFNka0luZm8pOiBFdmVudCB7XG4gIGlmICghc2RrSW5mbykge1xuICAgIHJldHVybiBldmVudDtcbiAgfVxuICBldmVudC5zZGsgPSBldmVudC5zZGsgfHwge307XG4gIGV2ZW50LnNkay5uYW1lID0gZXZlbnQuc2RrLm5hbWUgfHwgc2RrSW5mby5uYW1lO1xuICBldmVudC5zZGsudmVyc2lvbiA9IGV2ZW50LnNkay52ZXJzaW9uIHx8IHNka0luZm8udmVyc2lvbjtcbiAgZXZlbnQuc2RrLmludGVncmF0aW9ucyA9IFsuLi4oZXZlbnQuc2RrLmludGVncmF0aW9ucyB8fCBbXSksIC4uLihzZGtJbmZvLmludGVncmF0aW9ucyB8fCBbXSldO1xuICBldmVudC5zZGsucGFja2FnZXMgPSBbLi4uKGV2ZW50LnNkay5wYWNrYWdlcyB8fCBbXSksIC4uLihzZGtJbmZvLnBhY2thZ2VzIHx8IFtdKV07XG4gIHJldHVybiBldmVudDtcbn1cblxuLyoqIENyZWF0ZXMgYSBTZW50cnlSZXF1ZXN0IGZyb20gYSBTZXNzaW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlc3Npb25Ub1NlbnRyeVJlcXVlc3Qoc2Vzc2lvbjogU2Vzc2lvbiB8IFNlc3Npb25BZ2dyZWdhdGVzLCBhcGk6IEFQSSk6IFNlbnRyeVJlcXVlc3Qge1xuICBjb25zdCBzZGtJbmZvID0gZ2V0U2RrTWV0YWRhdGFGb3JFbnZlbG9wZUhlYWRlcihhcGkpO1xuICBjb25zdCBlbnZlbG9wZUhlYWRlcnMgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgc2VudF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIC4uLihzZGtJbmZvICYmIHsgc2RrOiBzZGtJbmZvIH0pLFxuICAgIC4uLihhcGkuZm9yY2VFbnZlbG9wZSgpICYmIHsgZHNuOiBhcGkuZ2V0RHNuKCkudG9TdHJpbmcoKSB9KSxcbiAgfSk7XG4gIC8vIEkga25vdyB0aGlzIGlzIGhhY2t5IGJ1dCB3ZSBkb24ndCB3YW50IHRvIGFkZCBgc2Vzc2lvbmAgdG8gcmVxdWVzdCB0eXBlIHNpbmNlIGl0J3MgbmV2ZXIgcmF0ZSBsaW1pdGVkXG4gIGNvbnN0IHR5cGU6IFNlbnRyeVJlcXVlc3RUeXBlID0gJ2FnZ3JlZ2F0ZXMnIGluIHNlc3Npb24gPyAoJ3Nlc3Npb25zJyBhcyBTZW50cnlSZXF1ZXN0VHlwZSkgOiAnc2Vzc2lvbic7XG4gIGNvbnN0IGl0ZW1IZWFkZXJzID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgIHR5cGUsXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgYm9keTogYCR7ZW52ZWxvcGVIZWFkZXJzfVxcbiR7aXRlbUhlYWRlcnN9XFxuJHtKU09OLnN0cmluZ2lmeShzZXNzaW9uKX1gLFxuICAgIHR5cGUsXG4gICAgdXJsOiBhcGkuZ2V0RW52ZWxvcGVFbmRwb2ludFdpdGhVcmxFbmNvZGVkQXV0aCgpLFxuICB9O1xufVxuXG4vKiogQ3JlYXRlcyBhIFNlbnRyeVJlcXVlc3QgZnJvbSBhbiBldmVudC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmVudFRvU2VudHJ5UmVxdWVzdChldmVudDogRXZlbnQsIGFwaTogQVBJKTogU2VudHJ5UmVxdWVzdCB7XG4gIGNvbnN0IHNka0luZm8gPSBnZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyKGFwaSk7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50LnR5cGUgfHwgJ2V2ZW50JztcbiAgY29uc3QgdXNlRW52ZWxvcGUgPSBldmVudFR5cGUgPT09ICd0cmFuc2FjdGlvbicgfHwgYXBpLmZvcmNlRW52ZWxvcGUoKTtcblxuICBjb25zdCB7IHRyYW5zYWN0aW9uU2FtcGxpbmcsIC4uLm1ldGFkYXRhIH0gPSBldmVudC5kZWJ1Z19tZXRhIHx8IHt9O1xuICBjb25zdCB7IG1ldGhvZDogc2FtcGxpbmdNZXRob2QsIHJhdGU6IHNhbXBsZVJhdGUgfSA9IHRyYW5zYWN0aW9uU2FtcGxpbmcgfHwge307XG4gIGlmIChPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID09PSAwKSB7XG4gICAgZGVsZXRlIGV2ZW50LmRlYnVnX21ldGE7XG4gIH0gZWxzZSB7XG4gICAgZXZlbnQuZGVidWdfbWV0YSA9IG1ldGFkYXRhO1xuICB9XG5cbiAgY29uc3QgcmVxOiBTZW50cnlSZXF1ZXN0ID0ge1xuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHNka0luZm8gPyBlbmhhbmNlRXZlbnRXaXRoU2RrSW5mbyhldmVudCwgYXBpLm1ldGFkYXRhLnNkaykgOiBldmVudCksXG4gICAgdHlwZTogZXZlbnRUeXBlLFxuICAgIHVybDogdXNlRW52ZWxvcGUgPyBhcGkuZ2V0RW52ZWxvcGVFbmRwb2ludFdpdGhVcmxFbmNvZGVkQXV0aCgpIDogYXBpLmdldFN0b3JlRW5kcG9pbnRXaXRoVXJsRW5jb2RlZEF1dGgoKSxcbiAgfTtcblxuICAvLyBodHRwczovL2RldmVsb3Auc2VudHJ5LmRldi9zZGsvZW52ZWxvcGVzL1xuXG4gIC8vIFNpbmNlIHdlIGRvbid0IG5lZWQgdG8gbWFuaXB1bGF0ZSBlbnZlbG9wZXMgbm9yIHN0b3JlIHRoZW0sIHRoZXJlIGlzIG5vXG4gIC8vIGV4cG9ydGVkIGNvbmNlcHQgb2YgYW4gRW52ZWxvcGUgd2l0aCBvcGVyYXRpb25zIGluY2x1ZGluZyBzZXJpYWxpemF0aW9uIGFuZFxuICAvLyBkZXNlcmlhbGl6YXRpb24uIEluc3RlYWQsIHdlIG9ubHkgaW1wbGVtZW50IGEgbWluaW1hbCBzdWJzZXQgb2YgdGhlIHNwZWMgdG9cbiAgLy8gc2VyaWFsaXplIGV2ZW50cyBpbmxpbmUgaGVyZS5cbiAgaWYgKHVzZUVudmVsb3BlKSB7XG4gICAgY29uc3QgZW52ZWxvcGVIZWFkZXJzID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZXZlbnRfaWQ6IGV2ZW50LmV2ZW50X2lkLFxuICAgICAgc2VudF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgLi4uKHNka0luZm8gJiYgeyBzZGs6IHNka0luZm8gfSksXG4gICAgICAuLi4oYXBpLmZvcmNlRW52ZWxvcGUoKSAmJiB7IGRzbjogYXBpLmdldERzbigpLnRvU3RyaW5nKCkgfSksXG4gICAgfSk7XG4gICAgY29uc3QgaXRlbUhlYWRlcnMgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICB0eXBlOiBldmVudFR5cGUsXG5cbiAgICAgIC8vIFRPRE86IFJpZ2h0IG5vdywgc2FtcGxlUmF0ZSBtYXkgb3IgbWF5IG5vdCBiZSBkZWZpbmVkIChpdCB3b24ndCBiZSBpbiB0aGUgY2FzZXMgb2YgaW5oZXJpdGFuY2UgYW5kXG4gICAgICAvLyBleHBsaWNpdGx5LXNldCBzYW1wbGluZyBkZWNpc2lvbnMpLiBBcmUgd2UgZ29vZCB3aXRoIHRoYXQ/XG4gICAgICBzYW1wbGVfcmF0ZXM6IFt7IGlkOiBzYW1wbGluZ01ldGhvZCwgcmF0ZTogc2FtcGxlUmF0ZSB9XSxcblxuICAgICAgLy8gVGhlIGNvbnRlbnQtdHlwZSBpcyBhc3N1bWVkIHRvIGJlICdhcHBsaWNhdGlvbi9qc29uJyBhbmQgbm90IHBhcnQgb2ZcbiAgICAgIC8vIHRoZSBjdXJyZW50IHNwZWMgZm9yIHRyYW5zYWN0aW9uIGl0ZW1zLCBzbyB3ZSBkb24ndCBibG9hdCB0aGUgcmVxdWVzdFxuICAgICAgLy8gYm9keSB3aXRoIGl0LlxuICAgICAgLy9cbiAgICAgIC8vIGNvbnRlbnRfdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBsZW5ndGggaXMgb3B0aW9uYWwuIEl0IG11c3QgYmUgdGhlIG51bWJlciBvZiBieXRlcyBpbiByZXEuQm9keVxuICAgICAgLy8gZW5jb2RlZCBhcyBVVEYtOC4gU2luY2UgdGhlIHNlcnZlciBjYW4gZmlndXJlIHRoaXMgb3V0IGFuZCB3b3VsZFxuICAgICAgLy8gb3RoZXJ3aXNlIHJlZnVzZSBldmVudHMgdGhhdCByZXBvcnQgdGhlIGxlbmd0aCBpbmNvcnJlY3RseSwgd2UgZGVjaWRlZFxuICAgICAgLy8gbm90IHRvIHNlbmQgdGhlIGxlbmd0aCB0byBhdm9pZCBwcm9ibGVtcyByZWxhdGVkIHRvIHJlcG9ydGluZyB0aGUgd3JvbmdcbiAgICAgIC8vIHNpemUgYW5kIHRvIHJlZHVjZSByZXF1ZXN0IGJvZHkgc2l6ZS5cbiAgICAgIC8vXG4gICAgICAvLyBsZW5ndGg6IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShyZXEuYm9keSkubGVuZ3RoLFxuICAgIH0pO1xuICAgIC8vIFRoZSB0cmFpbGluZyBuZXdsaW5lIGlzIG9wdGlvbmFsLiBXZSBpbnRlbnRpb25hbGx5IGRvbid0IHNlbmQgaXQgdG8gYXZvaWRcbiAgICAvLyBzZW5kaW5nIHVubmVjZXNzYXJ5IGJ5dGVzLlxuICAgIC8vXG4gICAgLy8gY29uc3QgZW52ZWxvcGUgPSBgJHtlbnZlbG9wZUhlYWRlcnN9XFxuJHtpdGVtSGVhZGVyc31cXG4ke3JlcS5ib2R5fVxcbmA7XG4gICAgY29uc3QgZW52ZWxvcGUgPSBgJHtlbnZlbG9wZUhlYWRlcnN9XFxuJHtpdGVtSGVhZGVyc31cXG4ke3JlcS5ib2R5fWA7XG4gICAgcmVxLmJvZHkgPSBlbnZlbG9wZTtcbiAgfVxuXG4gIHJldHVybiByZXE7XG59XG4iLCAiaW1wb3J0IHsgZ2V0Q3VycmVudEh1YiB9IGZyb20gJ0BzZW50cnkvaHViJztcbmltcG9ydCB7IENsaWVudCwgT3B0aW9ucyB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbi8qKiBBIGNsYXNzIG9iamVjdCB0aGF0IGNhbiBpbnN0YW50aWF0ZSBDbGllbnQgb2JqZWN0cy4gKi9cbmV4cG9ydCB0eXBlIENsaWVudENsYXNzPEYgZXh0ZW5kcyBDbGllbnQsIE8gZXh0ZW5kcyBPcHRpb25zPiA9IG5ldyAob3B0aW9uczogTykgPT4gRjtcblxuLyoqXG4gKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgU0RLIGNsaWVudCBpbnN0YW5jZS4gVGhlIGNsaWVudCBpc1xuICogaW5zdGFsbGVkIGFuZCB0aGVuIGJvdW5kIHRvIHRoZSBjdXJyZW50IHNjb3BlLlxuICpcbiAqIEBwYXJhbSBjbGllbnRDbGFzcyBUaGUgY2xpZW50IGNsYXNzIHRvIGluc3RhbnRpYXRlLlxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBjbGllbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0QW5kQmluZDxGIGV4dGVuZHMgQ2xpZW50LCBPIGV4dGVuZHMgT3B0aW9ucz4oY2xpZW50Q2xhc3M6IENsaWVudENsYXNzPEYsIE8+LCBvcHRpb25zOiBPKTogdm9pZCB7XG4gIGlmIChvcHRpb25zLmRlYnVnID09PSB0cnVlKSB7XG4gICAgbG9nZ2VyLmVuYWJsZSgpO1xuICB9XG4gIGNvbnN0IGh1YiA9IGdldEN1cnJlbnRIdWIoKTtcbiAgaHViLmdldFNjb3BlKCk/LnVwZGF0ZShvcHRpb25zLmluaXRpYWxTY29wZSk7XG4gIGNvbnN0IGNsaWVudCA9IG5ldyBjbGllbnRDbGFzcyhvcHRpb25zKTtcbiAgaHViLmJpbmRDbGllbnQoY2xpZW50KTtcbn1cbiIsICJleHBvcnQgY29uc3QgU0RLX1ZFUlNJT04gPSAnNi4xNi4xJztcbiIsICJpbXBvcnQgeyBJbnRlZ3JhdGlvbiwgV3JhcHBlZEZ1bmN0aW9uIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5cbmxldCBvcmlnaW5hbEZ1bmN0aW9uVG9TdHJpbmc6ICgpID0+IHZvaWQ7XG5cbi8qKiBQYXRjaCB0b1N0cmluZyBjYWxscyB0byByZXR1cm4gcHJvcGVyIG5hbWUgZm9yIHdyYXBwZWQgZnVuY3Rpb25zICovXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25Ub1N0cmluZyBpbXBsZW1lbnRzIEludGVncmF0aW9uIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlkOiBzdHJpbmcgPSAnRnVuY3Rpb25Ub1N0cmluZyc7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgbmFtZTogc3RyaW5nID0gRnVuY3Rpb25Ub1N0cmluZy5pZDtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXR1cE9uY2UoKTogdm9pZCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICAgIG9yaWdpbmFsRnVuY3Rpb25Ub1N0cmluZyA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24odGhpczogV3JhcHBlZEZ1bmN0aW9uLCAuLi5hcmdzOiBhbnlbXSk6IHN0cmluZyB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5fX3NlbnRyeV9vcmlnaW5hbF9fIHx8IHRoaXM7XG4gICAgICByZXR1cm4gb3JpZ2luYWxGdW5jdGlvblRvU3RyaW5nLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgIH07XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBhZGRHbG9iYWxFdmVudFByb2Nlc3NvciwgZ2V0Q3VycmVudEh1YiB9IGZyb20gJ0BzZW50cnkvaHViJztcbmltcG9ydCB7IEV2ZW50LCBJbnRlZ3JhdGlvbiwgU3RhY2tGcmFtZSB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgZ2V0RXZlbnREZXNjcmlwdGlvbiwgaXNNYXRjaGluZ1BhdHRlcm4sIGxvZ2dlciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG4vLyBcIlNjcmlwdCBlcnJvci5cIiBpcyBoYXJkIGNvZGVkIGludG8gYnJvd3NlcnMgZm9yIGVycm9ycyB0aGF0IGl0IGNhbid0IHJlYWQuXG4vLyB0aGlzIGlzIHRoZSByZXN1bHQgb2YgYSBzY3JpcHQgYmVpbmcgcHVsbGVkIGluIGZyb20gYW4gZXh0ZXJuYWwgZG9tYWluIGFuZCBDT1JTLlxuY29uc3QgREVGQVVMVF9JR05PUkVfRVJST1JTID0gWy9eU2NyaXB0IGVycm9yXFwuPyQvLCAvXkphdmFzY3JpcHQgZXJyb3I6IFNjcmlwdCBlcnJvclxcLj8gb24gbGluZSAwJC9dO1xuXG4vKiogSlNEb2MgKi9cbmludGVyZmFjZSBJbmJvdW5kRmlsdGVyc09wdGlvbnMge1xuICBhbGxvd1VybHM6IEFycmF5PHN0cmluZyB8IFJlZ0V4cD47XG4gIGRlbnlVcmxzOiBBcnJheTxzdHJpbmcgfCBSZWdFeHA+O1xuICBpZ25vcmVFcnJvcnM6IEFycmF5PHN0cmluZyB8IFJlZ0V4cD47XG4gIGlnbm9yZUludGVybmFsOiBib29sZWFuO1xuXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2Uge0BsaW5rIEluYm91bmRGaWx0ZXJzT3B0aW9ucy5hbGxvd1VybHN9IGluc3RlYWQuICovXG4gIHdoaXRlbGlzdFVybHM6IEFycmF5PHN0cmluZyB8IFJlZ0V4cD47XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2Uge0BsaW5rIEluYm91bmRGaWx0ZXJzT3B0aW9ucy5kZW55VXJsc30gaW5zdGVhZC4gKi9cbiAgYmxhY2tsaXN0VXJsczogQXJyYXk8c3RyaW5nIHwgUmVnRXhwPjtcbn1cblxuLyoqIEluYm91bmQgZmlsdGVycyBjb25maWd1cmFibGUgYnkgdGhlIHVzZXIgKi9cbmV4cG9ydCBjbGFzcyBJbmJvdW5kRmlsdGVycyBpbXBsZW1lbnRzIEludGVncmF0aW9uIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlkOiBzdHJpbmcgPSAnSW5ib3VuZEZpbHRlcnMnO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIG5hbWU6IHN0cmluZyA9IEluYm91bmRGaWx0ZXJzLmlkO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBQYXJ0aWFsPEluYm91bmRGaWx0ZXJzT3B0aW9ucz4gPSB7fSkge31cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXR1cE9uY2UoKTogdm9pZCB7XG4gICAgYWRkR2xvYmFsRXZlbnRQcm9jZXNzb3IoKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgaHViID0gZ2V0Q3VycmVudEh1YigpO1xuICAgICAgaWYgKCFodWIpIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VsZiA9IGh1Yi5nZXRJbnRlZ3JhdGlvbihJbmJvdW5kRmlsdGVycyk7XG4gICAgICBpZiAoc2VsZikge1xuICAgICAgICBjb25zdCBjbGllbnQgPSBodWIuZ2V0Q2xpZW50KCk7XG4gICAgICAgIGNvbnN0IGNsaWVudE9wdGlvbnMgPSBjbGllbnQgPyBjbGllbnQuZ2V0T3B0aW9ucygpIDoge307XG4gICAgICAgIC8vIFRoaXMgY2hlY2tzIHByZXZlbnRzIG1vc3Qgb2YgdGhlIG9jY3VycmVuY2VzIG9mIHRoZSBidWcgbGlua2VkIGJlbG93OlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8yNjIyXG4gICAgICAgIC8vIFRoZSBidWcgaXMgY2F1c2VkIGJ5IG11bHRpcGxlIFNESyBpbnN0YW5jZXMsIHdoZXJlIG9uZSBpcyBtaW5pZmllZCBhbmQgb25lIGlzIHVzaW5nIG5vbi1tYW5nbGVkIGNvZGUuXG4gICAgICAgIC8vIFVuZm9ydHVuYXRlbGx5IHdlIGNhbm5vdCBmaXggaXQgcmVsaWFibHkgKHRodXMgcmVzZXJ2ZWQgcHJvcGVydHkgaW4gcm9sbHVwJ3MgdGVyc2VyIGNvbmZpZyksXG4gICAgICAgIC8vIGFzIHdlIGNhbm5vdCBmb3JjZSBwZW9wbGUgdXNpbmcgbXVsdGlwbGUgaW5zdGFuY2VzIGluIHRoZWlyIGFwcHMgdG8gc3luYyBTREsgdmVyc2lvbnMuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0eXBlb2Ygc2VsZi5fbWVyZ2VPcHRpb25zID09PSAnZnVuY3Rpb24nID8gc2VsZi5fbWVyZ2VPcHRpb25zKGNsaWVudE9wdGlvbnMpIDoge307XG4gICAgICAgIGlmICh0eXBlb2Ygc2VsZi5fc2hvdWxkRHJvcEV2ZW50ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmLl9zaG91bGREcm9wRXZlbnQoZXZlbnQsIG9wdGlvbnMpID8gbnVsbCA6IGV2ZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV2ZW50O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgX3Nob3VsZERyb3BFdmVudChldmVudDogRXZlbnQsIG9wdGlvbnM6IFBhcnRpYWw8SW5ib3VuZEZpbHRlcnNPcHRpb25zPik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLl9pc1NlbnRyeUVycm9yKGV2ZW50LCBvcHRpb25zKSkge1xuICAgICAgbG9nZ2VyLndhcm4oYEV2ZW50IGRyb3BwZWQgZHVlIHRvIGJlaW5nIGludGVybmFsIFNlbnRyeSBFcnJvci5cXG5FdmVudDogJHtnZXRFdmVudERlc2NyaXB0aW9uKGV2ZW50KX1gKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5faXNJZ25vcmVkRXJyb3IoZXZlbnQsIG9wdGlvbnMpKSB7XG4gICAgICBsb2dnZXIud2FybihcbiAgICAgICAgYEV2ZW50IGRyb3BwZWQgZHVlIHRvIGJlaW5nIG1hdGNoZWQgYnkgXFxgaWdub3JlRXJyb3JzXFxgIG9wdGlvbi5cXG5FdmVudDogJHtnZXRFdmVudERlc2NyaXB0aW9uKGV2ZW50KX1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5faXNEZW5pZWRVcmwoZXZlbnQsIG9wdGlvbnMpKSB7XG4gICAgICBsb2dnZXIud2FybihcbiAgICAgICAgYEV2ZW50IGRyb3BwZWQgZHVlIHRvIGJlaW5nIG1hdGNoZWQgYnkgXFxgZGVueVVybHNcXGAgb3B0aW9uLlxcbkV2ZW50OiAke2dldEV2ZW50RGVzY3JpcHRpb24oXG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgICl9LlxcblVybDogJHt0aGlzLl9nZXRFdmVudEZpbHRlclVybChldmVudCl9YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9pc0FsbG93ZWRVcmwoZXZlbnQsIG9wdGlvbnMpKSB7XG4gICAgICBsb2dnZXIud2FybihcbiAgICAgICAgYEV2ZW50IGRyb3BwZWQgZHVlIHRvIG5vdCBiZWluZyBtYXRjaGVkIGJ5IFxcYGFsbG93VXJsc1xcYCBvcHRpb24uXFxuRXZlbnQ6ICR7Z2V0RXZlbnREZXNjcmlwdGlvbihcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgKX0uXFxuVXJsOiAke3RoaXMuX2dldEV2ZW50RmlsdGVyVXJsKGV2ZW50KX1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSBfaXNTZW50cnlFcnJvcihldmVudDogRXZlbnQsIG9wdGlvbnM6IFBhcnRpYWw8SW5ib3VuZEZpbHRlcnNPcHRpb25zPik6IGJvb2xlYW4ge1xuICAgIGlmICghb3B0aW9ucy5pZ25vcmVJbnRlcm5hbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoZXZlbnQgJiZcbiAgICAgICAgICBldmVudC5leGNlcHRpb24gJiZcbiAgICAgICAgICBldmVudC5leGNlcHRpb24udmFsdWVzICYmXG4gICAgICAgICAgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXSAmJlxuICAgICAgICAgIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0udHlwZSA9PT0gJ1NlbnRyeUVycm9yJykgfHxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoX29PKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgX2lzSWdub3JlZEVycm9yKGV2ZW50OiBFdmVudCwgb3B0aW9uczogUGFydGlhbDxJbmJvdW5kRmlsdGVyc09wdGlvbnM+KTogYm9vbGVhbiB7XG4gICAgaWYgKCFvcHRpb25zLmlnbm9yZUVycm9ycyB8fCAhb3B0aW9ucy5pZ25vcmVFcnJvcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2dldFBvc3NpYmxlRXZlbnRNZXNzYWdlcyhldmVudCkuc29tZShtZXNzYWdlID0+XG4gICAgICAvLyBOb3Qgc3VyZSB3aHkgVHlwZVNjcmlwdCBjb21wbGFpbnMgaGVyZS4uLlxuICAgICAgKG9wdGlvbnMuaWdub3JlRXJyb3JzIGFzIEFycmF5PFJlZ0V4cCB8IHN0cmluZz4pLnNvbWUocGF0dGVybiA9PiBpc01hdGNoaW5nUGF0dGVybihtZXNzYWdlLCBwYXR0ZXJuKSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIF9pc0RlbmllZFVybChldmVudDogRXZlbnQsIG9wdGlvbnM6IFBhcnRpYWw8SW5ib3VuZEZpbHRlcnNPcHRpb25zPik6IGJvb2xlYW4ge1xuICAgIC8vIFRPRE86IFVzZSBHbG9iIGluc3RlYWQ/XG4gICAgaWYgKCFvcHRpb25zLmRlbnlVcmxzIHx8ICFvcHRpb25zLmRlbnlVcmxzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB1cmwgPSB0aGlzLl9nZXRFdmVudEZpbHRlclVybChldmVudCk7XG4gICAgcmV0dXJuICF1cmwgPyBmYWxzZSA6IG9wdGlvbnMuZGVueVVybHMuc29tZShwYXR0ZXJuID0+IGlzTWF0Y2hpbmdQYXR0ZXJuKHVybCwgcGF0dGVybikpO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgX2lzQWxsb3dlZFVybChldmVudDogRXZlbnQsIG9wdGlvbnM6IFBhcnRpYWw8SW5ib3VuZEZpbHRlcnNPcHRpb25zPik6IGJvb2xlYW4ge1xuICAgIC8vIFRPRE86IFVzZSBHbG9iIGluc3RlYWQ/XG4gICAgaWYgKCFvcHRpb25zLmFsbG93VXJscyB8fCAhb3B0aW9ucy5hbGxvd1VybHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgdXJsID0gdGhpcy5fZ2V0RXZlbnRGaWx0ZXJVcmwoZXZlbnQpO1xuICAgIHJldHVybiAhdXJsID8gdHJ1ZSA6IG9wdGlvbnMuYWxsb3dVcmxzLnNvbWUocGF0dGVybiA9PiBpc01hdGNoaW5nUGF0dGVybih1cmwsIHBhdHRlcm4pKTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIF9tZXJnZU9wdGlvbnMoY2xpZW50T3B0aW9uczogUGFydGlhbDxJbmJvdW5kRmlsdGVyc09wdGlvbnM+ID0ge30pOiBQYXJ0aWFsPEluYm91bmRGaWx0ZXJzT3B0aW9ucz4ge1xuICAgIHJldHVybiB7XG4gICAgICBhbGxvd1VybHM6IFtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgIC4uLih0aGlzLl9vcHRpb25zLndoaXRlbGlzdFVybHMgfHwgW10pLFxuICAgICAgICAuLi4odGhpcy5fb3B0aW9ucy5hbGxvd1VybHMgfHwgW10pLFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgLi4uKGNsaWVudE9wdGlvbnMud2hpdGVsaXN0VXJscyB8fCBbXSksXG4gICAgICAgIC4uLihjbGllbnRPcHRpb25zLmFsbG93VXJscyB8fCBbXSksXG4gICAgICBdLFxuICAgICAgZGVueVVybHM6IFtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgIC4uLih0aGlzLl9vcHRpb25zLmJsYWNrbGlzdFVybHMgfHwgW10pLFxuICAgICAgICAuLi4odGhpcy5fb3B0aW9ucy5kZW55VXJscyB8fCBbXSksXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgICAuLi4oY2xpZW50T3B0aW9ucy5ibGFja2xpc3RVcmxzIHx8IFtdKSxcbiAgICAgICAgLi4uKGNsaWVudE9wdGlvbnMuZGVueVVybHMgfHwgW10pLFxuICAgICAgXSxcbiAgICAgIGlnbm9yZUVycm9yczogW1xuICAgICAgICAuLi4odGhpcy5fb3B0aW9ucy5pZ25vcmVFcnJvcnMgfHwgW10pLFxuICAgICAgICAuLi4oY2xpZW50T3B0aW9ucy5pZ25vcmVFcnJvcnMgfHwgW10pLFxuICAgICAgICAuLi5ERUZBVUxUX0lHTk9SRV9FUlJPUlMsXG4gICAgICBdLFxuICAgICAgaWdub3JlSW50ZXJuYWw6IHR5cGVvZiB0aGlzLl9vcHRpb25zLmlnbm9yZUludGVybmFsICE9PSAndW5kZWZpbmVkJyA/IHRoaXMuX29wdGlvbnMuaWdub3JlSW50ZXJuYWwgOiB0cnVlLFxuICAgIH07XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSBfZ2V0UG9zc2libGVFdmVudE1lc3NhZ2VzKGV2ZW50OiBFdmVudCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoZXZlbnQubWVzc2FnZSkge1xuICAgICAgcmV0dXJuIFtldmVudC5tZXNzYWdlXTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmV4Y2VwdGlvbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyB0eXBlID0gJycsIHZhbHVlID0gJycgfSA9IChldmVudC5leGNlcHRpb24udmFsdWVzICYmIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0pIHx8IHt9O1xuICAgICAgICByZXR1cm4gW2Ake3ZhbHVlfWAsIGAke3R5cGV9OiAke3ZhbHVlfWBdO1xuICAgICAgfSBjYXRjaCAob08pIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBDYW5ub3QgZXh0cmFjdCBtZXNzYWdlIGZvciBldmVudCAke2dldEV2ZW50RGVzY3JpcHRpb24oZXZlbnQpfWApO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIF9nZXRMYXN0VmFsaWRVcmwoZnJhbWVzOiBTdGFja0ZyYW1lW10gPSBbXSk6IHN0cmluZyB8IG51bGwge1xuICAgIGZvciAobGV0IGkgPSBmcmFtZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IGZyYW1lID0gZnJhbWVzW2ldO1xuXG4gICAgICBpZiAoZnJhbWU/LmZpbGVuYW1lICE9PSAnPGFub255bW91cz4nICYmIGZyYW1lPy5maWxlbmFtZSAhPT0gJ1tuYXRpdmUgY29kZV0nKSB7XG4gICAgICAgIHJldHVybiBmcmFtZS5maWxlbmFtZSB8fCBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgX2dldEV2ZW50RmlsdGVyVXJsKGV2ZW50OiBFdmVudCk6IHN0cmluZyB8IG51bGwge1xuICAgIHRyeSB7XG4gICAgICBpZiAoZXZlbnQuc3RhY2t0cmFjZSkge1xuICAgICAgICBjb25zdCBmcmFtZXMgPSBldmVudC5zdGFja3RyYWNlLmZyYW1lcztcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldExhc3RWYWxpZFVybChmcmFtZXMpO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmV4Y2VwdGlvbikge1xuICAgICAgICBjb25zdCBmcmFtZXMgPVxuICAgICAgICAgIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMgJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXS5zdGFja3RyYWNlICYmIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0uc3RhY2t0cmFjZS5mcmFtZXM7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRMYXN0VmFsaWRVcmwoZnJhbWVzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gY2F0Y2ggKG9PKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYENhbm5vdCBleHRyYWN0IHVybCBmb3IgZXZlbnQgJHtnZXRFdmVudERlc2NyaXB0aW9uKGV2ZW50KX1gKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuIiwgImV4cG9ydCB7IEZ1bmN0aW9uVG9TdHJpbmcgfSBmcm9tICcuL2Z1bmN0aW9udG9zdHJpbmcnO1xuZXhwb3J0IHsgSW5ib3VuZEZpbHRlcnMgfSBmcm9tICcuL2luYm91bmRmaWx0ZXJzJztcbiIsICJleHBvcnQge1xuICBhZGRCcmVhZGNydW1iLFxuICBjYXB0dXJlRXhjZXB0aW9uLFxuICBjYXB0dXJlRXZlbnQsXG4gIGNhcHR1cmVNZXNzYWdlLFxuICBjb25maWd1cmVTY29wZSxcbiAgc3RhcnRUcmFuc2FjdGlvbixcbiAgc2V0Q29udGV4dCxcbiAgc2V0RXh0cmEsXG4gIHNldEV4dHJhcyxcbiAgc2V0VGFnLFxuICBzZXRUYWdzLFxuICBzZXRVc2VyLFxuICB3aXRoU2NvcGUsXG59IGZyb20gJ0BzZW50cnkvbWluaW1hbCc7XG5leHBvcnQgeyBhZGRHbG9iYWxFdmVudFByb2Nlc3NvciwgZ2V0Q3VycmVudEh1YiwgZ2V0SHViRnJvbUNhcnJpZXIsIEh1YiwgbWFrZU1haW4sIFNjb3BlIH0gZnJvbSAnQHNlbnRyeS9odWInO1xuZXhwb3J0IHsgQVBJIH0gZnJvbSAnLi9hcGknO1xuZXhwb3J0IHsgQmFzZUNsaWVudCB9IGZyb20gJy4vYmFzZWNsaWVudCc7XG5leHBvcnQgeyBCYWNrZW5kQ2xhc3MsIEJhc2VCYWNrZW5kIH0gZnJvbSAnLi9iYXNlYmFja2VuZCc7XG5leHBvcnQgeyBldmVudFRvU2VudHJ5UmVxdWVzdCwgc2Vzc2lvblRvU2VudHJ5UmVxdWVzdCB9IGZyb20gJy4vcmVxdWVzdCc7XG5leHBvcnQgeyBpbml0QW5kQmluZCwgQ2xpZW50Q2xhc3MgfSBmcm9tICcuL3Nkayc7XG5leHBvcnQgeyBOb29wVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnRzL25vb3AnO1xuZXhwb3J0IHsgU0RLX1ZFUlNJT04gfSBmcm9tICcuL3ZlcnNpb24nO1xuXG5pbXBvcnQgKiBhcyBJbnRlZ3JhdGlvbnMgZnJvbSAnLi9pbnRlZ3JhdGlvbnMnO1xuXG5leHBvcnQgeyBJbnRlZ3JhdGlvbnMgfTtcbiIsICIvKipcbiAqIEEgZG91Ymx5IGxpbmtlZCBsaXN0LWJhc2VkIExlYXN0IFJlY2VudGx5IFVzZWQgKExSVSkgY2FjaGUuIFdpbGwga2VlcCBtb3N0XG4gKiByZWNlbnRseSB1c2VkIGl0ZW1zIHdoaWxlIGRpc2NhcmRpbmcgbGVhc3QgcmVjZW50bHkgdXNlZCBpdGVtcyB3aGVuIGl0cyBsaW1pdFxuICogaXMgcmVhY2hlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQuIENvcHlyaWdodCAoYykgMjAxMCBSYXNtdXMgQW5kZXJzc29uIDxodHRwOi8vaHVuY2guc2UvPlxuICogU2VlIFJFQURNRS5tZCBmb3IgZGV0YWlscy5cbiAqXG4gKiBJbGx1c3RyYXRpb24gb2YgdGhlIGRlc2lnbjpcbiAqXG4gKiAgICAgICBlbnRyeSAgICAgICAgICAgICBlbnRyeSAgICAgICAgICAgICBlbnRyeSAgICAgICAgICAgICBlbnRyeVxuICogICAgICAgX19fX19fICAgICAgICAgICAgX19fX19fICAgICAgICAgICAgX19fX19fICAgICAgICAgICAgX19fX19fXG4gKiAgICAgIHwgaGVhZCB8Lm5ld2VyID0+IHwgICAgICB8Lm5ld2VyID0+IHwgICAgICB8Lm5ld2VyID0+IHwgdGFpbCB8XG4gKiAgICAgIHwgIEEgICB8ICAgICAgICAgIHwgIEIgICB8ICAgICAgICAgIHwgIEMgICB8ICAgICAgICAgIHwgIEQgICB8XG4gKiAgICAgIHxfX19fX198IDw9IG9sZGVyLnxfX19fX198IDw9IG9sZGVyLnxfX19fX198IDw9IG9sZGVyLnxfX19fX198XG4gKlxuICogIHJlbW92ZWQgIDwtLSAgPC0tICA8LS0gIDwtLSAgPC0tICA8LS0gIDwtLSAgPC0tICA8LS0gIDwtLSAgPC0tICBhZGRlZFxuICovXG4oZnVuY3Rpb24oZyxmKXtcbiAgY29uc3QgZSA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnID8gZXhwb3J0cyA6IHR5cGVvZiBnID09ICdvYmplY3QnID8gZyA6IHt9O1xuICBmKGUpO1xuICBpZiAodHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsgZGVmaW5lKCdscnUnLCBlKTsgfVxufSkodGhpcywgZnVuY3Rpb24oZXhwb3J0cykge1xuXG5jb25zdCBORVdFUiA9IFN5bWJvbCgnbmV3ZXInKTtcbmNvbnN0IE9MREVSID0gU3ltYm9sKCdvbGRlcicpO1xuXG5mdW5jdGlvbiBMUlVNYXAobGltaXQsIGVudHJpZXMpIHtcbiAgaWYgKHR5cGVvZiBsaW1pdCAhPT0gJ251bWJlcicpIHtcbiAgICAvLyBjYWxsZWQgYXMgKGVudHJpZXMpXG4gICAgZW50cmllcyA9IGxpbWl0O1xuICAgIGxpbWl0ID0gMDtcbiAgfVxuXG4gIHRoaXMuc2l6ZSA9IDA7XG4gIHRoaXMubGltaXQgPSBsaW1pdDtcbiAgdGhpcy5vbGRlc3QgPSB0aGlzLm5ld2VzdCA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fa2V5bWFwID0gbmV3IE1hcCgpO1xuXG4gIGlmIChlbnRyaWVzKSB7XG4gICAgdGhpcy5hc3NpZ24oZW50cmllcyk7XG4gICAgaWYgKGxpbWl0IDwgMSkge1xuICAgICAgdGhpcy5saW1pdCA9IHRoaXMuc2l6ZTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0cy5MUlVNYXAgPSBMUlVNYXA7XG5cbmZ1bmN0aW9uIEVudHJ5KGtleSwgdmFsdWUpIHtcbiAgdGhpcy5rZXkgPSBrZXk7XG4gIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgdGhpc1tORVdFUl0gPSB1bmRlZmluZWQ7XG4gIHRoaXNbT0xERVJdID0gdW5kZWZpbmVkO1xufVxuXG5cbkxSVU1hcC5wcm90b3R5cGUuX21hcmtFbnRyeUFzVXNlZCA9IGZ1bmN0aW9uKGVudHJ5KSB7XG4gIGlmIChlbnRyeSA9PT0gdGhpcy5uZXdlc3QpIHtcbiAgICAvLyBBbHJlYWR5IHRoZSBtb3N0IHJlY2VubHR5IHVzZWQgZW50cnksIHNvIG5vIG5lZWQgdG8gdXBkYXRlIHRoZSBsaXN0XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIEhFQUQtLS0tLS0tLS0tLS0tLVRBSUxcbiAgLy8gICA8Lm9sZGVyICAgLm5ld2VyPlxuICAvLyAgPC0tLSBhZGQgZGlyZWN0aW9uIC0tXG4gIC8vICAgQSAgQiAgQyAgPEQ+ICBFXG4gIGlmIChlbnRyeVtORVdFUl0pIHtcbiAgICBpZiAoZW50cnkgPT09IHRoaXMub2xkZXN0KSB7XG4gICAgICB0aGlzLm9sZGVzdCA9IGVudHJ5W05FV0VSXTtcbiAgICB9XG4gICAgZW50cnlbTkVXRVJdW09MREVSXSA9IGVudHJ5W09MREVSXTsgLy8gQyA8LS0gRS5cbiAgfVxuICBpZiAoZW50cnlbT0xERVJdKSB7XG4gICAgZW50cnlbT0xERVJdW05FV0VSXSA9IGVudHJ5W05FV0VSXTsgLy8gQy4gLS0+IEVcbiAgfVxuICBlbnRyeVtORVdFUl0gPSB1bmRlZmluZWQ7IC8vIEQgLS14XG4gIGVudHJ5W09MREVSXSA9IHRoaXMubmV3ZXN0OyAvLyBELiAtLT4gRVxuICBpZiAodGhpcy5uZXdlc3QpIHtcbiAgICB0aGlzLm5ld2VzdFtORVdFUl0gPSBlbnRyeTsgLy8gRS4gPC0tIERcbiAgfVxuICB0aGlzLm5ld2VzdCA9IGVudHJ5O1xufTtcblxuTFJVTWFwLnByb3RvdHlwZS5hc3NpZ24gPSBmdW5jdGlvbihlbnRyaWVzKSB7XG4gIGxldCBlbnRyeSwgbGltaXQgPSB0aGlzLmxpbWl0IHx8IE51bWJlci5NQVhfVkFMVUU7XG4gIHRoaXMuX2tleW1hcC5jbGVhcigpO1xuICBsZXQgaXQgPSBlbnRyaWVzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgZm9yIChsZXQgaXR2ID0gaXQubmV4dCgpOyAhaXR2LmRvbmU7IGl0diA9IGl0Lm5leHQoKSkge1xuICAgIGxldCBlID0gbmV3IEVudHJ5KGl0di52YWx1ZVswXSwgaXR2LnZhbHVlWzFdKTtcbiAgICB0aGlzLl9rZXltYXAuc2V0KGUua2V5LCBlKTtcbiAgICBpZiAoIWVudHJ5KSB7XG4gICAgICB0aGlzLm9sZGVzdCA9IGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVudHJ5W05FV0VSXSA9IGU7XG4gICAgICBlW09MREVSXSA9IGVudHJ5O1xuICAgIH1cbiAgICBlbnRyeSA9IGU7XG4gICAgaWYgKGxpbWl0LS0gPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdvdmVyZmxvdycpO1xuICAgIH1cbiAgfVxuICB0aGlzLm5ld2VzdCA9IGVudHJ5O1xuICB0aGlzLnNpemUgPSB0aGlzLl9rZXltYXAuc2l6ZTtcbn07XG5cbkxSVU1hcC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24oa2V5KSB7XG4gIC8vIEZpcnN0LCBmaW5kIG91ciBjYWNoZSBlbnRyeVxuICB2YXIgZW50cnkgPSB0aGlzLl9rZXltYXAuZ2V0KGtleSk7XG4gIGlmICghZW50cnkpIHJldHVybjsgLy8gTm90IGNhY2hlZC4gU29ycnkuXG4gIC8vIEFzIDxrZXk+IHdhcyBmb3VuZCBpbiB0aGUgY2FjaGUsIHJlZ2lzdGVyIGl0IGFzIGJlaW5nIHJlcXVlc3RlZCByZWNlbnRseVxuICB0aGlzLl9tYXJrRW50cnlBc1VzZWQoZW50cnkpO1xuICByZXR1cm4gZW50cnkudmFsdWU7XG59O1xuXG5MUlVNYXAucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcbiAgdmFyIGVudHJ5ID0gdGhpcy5fa2V5bWFwLmdldChrZXkpO1xuXG4gIGlmIChlbnRyeSkge1xuICAgIC8vIHVwZGF0ZSBleGlzdGluZ1xuICAgIGVudHJ5LnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5fbWFya0VudHJ5QXNVc2VkKGVudHJ5KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIG5ldyBlbnRyeVxuICB0aGlzLl9rZXltYXAuc2V0KGtleSwgKGVudHJ5ID0gbmV3IEVudHJ5KGtleSwgdmFsdWUpKSk7XG5cbiAgaWYgKHRoaXMubmV3ZXN0KSB7XG4gICAgLy8gbGluayBwcmV2aW91cyB0YWlsIHRvIHRoZSBuZXcgdGFpbCAoZW50cnkpXG4gICAgdGhpcy5uZXdlc3RbTkVXRVJdID0gZW50cnk7XG4gICAgZW50cnlbT0xERVJdID0gdGhpcy5uZXdlc3Q7XG4gIH0gZWxzZSB7XG4gICAgLy8gd2UncmUgZmlyc3QgaW4gLS0geWF5XG4gICAgdGhpcy5vbGRlc3QgPSBlbnRyeTtcbiAgfVxuXG4gIC8vIGFkZCBuZXcgZW50cnkgdG8gdGhlIGVuZCBvZiB0aGUgbGlua2VkIGxpc3QgLS0gaXQncyBub3cgdGhlIGZyZXNoZXN0IGVudHJ5LlxuICB0aGlzLm5ld2VzdCA9IGVudHJ5O1xuICArK3RoaXMuc2l6ZTtcbiAgaWYgKHRoaXMuc2l6ZSA+IHRoaXMubGltaXQpIHtcbiAgICAvLyB3ZSBoaXQgdGhlIGxpbWl0IC0tIHJlbW92ZSB0aGUgaGVhZFxuICAgIHRoaXMuc2hpZnQoKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTFJVTWFwLnByb3RvdHlwZS5zaGlmdCA9IGZ1bmN0aW9uKCkge1xuICAvLyB0b2RvOiBoYW5kbGUgc3BlY2lhbCBjYXNlIHdoZW4gbGltaXQgPT0gMVxuICB2YXIgZW50cnkgPSB0aGlzLm9sZGVzdDtcbiAgaWYgKGVudHJ5KSB7XG4gICAgaWYgKHRoaXMub2xkZXN0W05FV0VSXSkge1xuICAgICAgLy8gYWR2YW5jZSB0aGUgbGlzdFxuICAgICAgdGhpcy5vbGRlc3QgPSB0aGlzLm9sZGVzdFtORVdFUl07XG4gICAgICB0aGlzLm9sZGVzdFtPTERFUl0gPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoZSBjYWNoZSBpcyBleGhhdXN0ZWRcbiAgICAgIHRoaXMub2xkZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5uZXdlc3QgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIFJlbW92ZSBsYXN0IHN0cm9uZyByZWZlcmVuY2UgdG8gPGVudHJ5PiBhbmQgcmVtb3ZlIGxpbmtzIGZyb20gdGhlIHB1cmdlZFxuICAgIC8vIGVudHJ5IGJlaW5nIHJldHVybmVkOlxuICAgIGVudHJ5W05FV0VSXSA9IGVudHJ5W09MREVSXSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9rZXltYXAuZGVsZXRlKGVudHJ5LmtleSk7XG4gICAgLS10aGlzLnNpemU7XG4gICAgcmV0dXJuIFtlbnRyeS5rZXksIGVudHJ5LnZhbHVlXTtcbiAgfVxufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRm9sbG93aW5nIGNvZGUgaXMgb3B0aW9uYWwgYW5kIGNhbiBiZSByZW1vdmVkIHdpdGhvdXQgYnJlYWtpbmcgdGhlIGNvcmVcbi8vIGZ1bmN0aW9uYWxpdHkuXG5cbkxSVU1hcC5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKGtleSkge1xuICBsZXQgZSA9IHRoaXMuX2tleW1hcC5nZXQoa2V5KTtcbiAgcmV0dXJuIGUgPyBlLnZhbHVlIDogdW5kZWZpbmVkO1xufTtcblxuTFJVTWFwLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX2tleW1hcC5oYXMoa2V5KTtcbn07XG5cbkxSVU1hcC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gZnVuY3Rpb24oa2V5KSB7XG4gIHZhciBlbnRyeSA9IHRoaXMuX2tleW1hcC5nZXQoa2V5KTtcbiAgaWYgKCFlbnRyeSkgcmV0dXJuO1xuICB0aGlzLl9rZXltYXAuZGVsZXRlKGVudHJ5LmtleSk7XG4gIGlmIChlbnRyeVtORVdFUl0gJiYgZW50cnlbT0xERVJdKSB7XG4gICAgLy8gcmVsaW5rIHRoZSBvbGRlciBlbnRyeSB3aXRoIHRoZSBuZXdlciBlbnRyeVxuICAgIGVudHJ5W09MREVSXVtORVdFUl0gPSBlbnRyeVtORVdFUl07XG4gICAgZW50cnlbTkVXRVJdW09MREVSXSA9IGVudHJ5W09MREVSXTtcbiAgfSBlbHNlIGlmIChlbnRyeVtORVdFUl0pIHtcbiAgICAvLyByZW1vdmUgdGhlIGxpbmsgdG8gdXNcbiAgICBlbnRyeVtORVdFUl1bT0xERVJdID0gdW5kZWZpbmVkO1xuICAgIC8vIGxpbmsgdGhlIG5ld2VyIGVudHJ5IHRvIGhlYWRcbiAgICB0aGlzLm9sZGVzdCA9IGVudHJ5W05FV0VSXTtcbiAgfSBlbHNlIGlmIChlbnRyeVtPTERFUl0pIHtcbiAgICAvLyByZW1vdmUgdGhlIGxpbmsgdG8gdXNcbiAgICBlbnRyeVtPTERFUl1bTkVXRVJdID0gdW5kZWZpbmVkO1xuICAgIC8vIGxpbmsgdGhlIG5ld2VyIGVudHJ5IHRvIGhlYWRcbiAgICB0aGlzLm5ld2VzdCA9IGVudHJ5W09MREVSXTtcbiAgfSBlbHNlIHsvLyBpZihlbnRyeVtPTERFUl0gPT09IHVuZGVmaW5lZCAmJiBlbnRyeS5uZXdlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5vbGRlc3QgPSB0aGlzLm5ld2VzdCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRoaXMuc2l6ZS0tO1xuICByZXR1cm4gZW50cnkudmFsdWU7XG59O1xuXG5MUlVNYXAucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7XG4gIC8vIE5vdCBjbGVhcmluZyBsaW5rcyBzaG91bGQgYmUgc2FmZSwgYXMgd2UgZG9uJ3QgZXhwb3NlIGxpdmUgbGlua3MgdG8gdXNlclxuICB0aGlzLm9sZGVzdCA9IHRoaXMubmV3ZXN0ID0gdW5kZWZpbmVkO1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9rZXltYXAuY2xlYXIoKTtcbn07XG5cblxuZnVuY3Rpb24gRW50cnlJdGVyYXRvcihvbGRlc3RFbnRyeSkgeyB0aGlzLmVudHJ5ID0gb2xkZXN0RW50cnk7IH1cbkVudHJ5SXRlcmF0b3IucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH1cbkVudHJ5SXRlcmF0b3IucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbigpIHtcbiAgbGV0IGVudCA9IHRoaXMuZW50cnk7XG4gIGlmIChlbnQpIHtcbiAgICB0aGlzLmVudHJ5ID0gZW50W05FV0VSXTtcbiAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IFtlbnQua2V5LCBlbnQudmFsdWVdIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuICB9XG59O1xuXG5cbmZ1bmN0aW9uIEtleUl0ZXJhdG9yKG9sZGVzdEVudHJ5KSB7IHRoaXMuZW50cnkgPSBvbGRlc3RFbnRyeTsgfVxuS2V5SXRlcmF0b3IucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH1cbktleUl0ZXJhdG9yLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oKSB7XG4gIGxldCBlbnQgPSB0aGlzLmVudHJ5O1xuICBpZiAoZW50KSB7XG4gICAgdGhpcy5lbnRyeSA9IGVudFtORVdFUl07XG4gICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBlbnQua2V5IH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuICB9XG59O1xuXG5mdW5jdGlvbiBWYWx1ZUl0ZXJhdG9yKG9sZGVzdEVudHJ5KSB7IHRoaXMuZW50cnkgPSBvbGRlc3RFbnRyeTsgfVxuVmFsdWVJdGVyYXRvci5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfVxuVmFsdWVJdGVyYXRvci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKCkge1xuICBsZXQgZW50ID0gdGhpcy5lbnRyeTtcbiAgaWYgKGVudCkge1xuICAgIHRoaXMuZW50cnkgPSBlbnRbTkVXRVJdO1xuICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogZW50LnZhbHVlIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuICB9XG59O1xuXG5cbkxSVU1hcC5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IEtleUl0ZXJhdG9yKHRoaXMub2xkZXN0KTtcbn07XG5cbkxSVU1hcC5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVmFsdWVJdGVyYXRvcih0aGlzLm9sZGVzdCk7XG59O1xuXG5MUlVNYXAucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5MUlVNYXAucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBFbnRyeUl0ZXJhdG9yKHRoaXMub2xkZXN0KTtcbn07XG5cbkxSVU1hcC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGZ1biwgdGhpc09iaikge1xuICBpZiAodHlwZW9mIHRoaXNPYmogIT09ICdvYmplY3QnKSB7XG4gICAgdGhpc09iaiA9IHRoaXM7XG4gIH1cbiAgbGV0IGVudHJ5ID0gdGhpcy5vbGRlc3Q7XG4gIHdoaWxlIChlbnRyeSkge1xuICAgIGZ1bi5jYWxsKHRoaXNPYmosIGVudHJ5LnZhbHVlLCBlbnRyeS5rZXksIHRoaXMpO1xuICAgIGVudHJ5ID0gZW50cnlbTkVXRVJdO1xuICB9XG59O1xuXG4vKiogUmV0dXJucyBhIEpTT04gKGFycmF5KSByZXByZXNlbnRhdGlvbiAqL1xuTFJVTWFwLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHMgPSBuZXcgQXJyYXkodGhpcy5zaXplKSwgaSA9IDAsIGVudHJ5ID0gdGhpcy5vbGRlc3Q7XG4gIHdoaWxlIChlbnRyeSkge1xuICAgIHNbaSsrXSA9IHsga2V5OiBlbnRyeS5rZXksIHZhbHVlOiBlbnRyeS52YWx1ZSB9O1xuICAgIGVudHJ5ID0gZW50cnlbTkVXRVJdO1xuICB9XG4gIHJldHVybiBzO1xufTtcblxuLyoqIFJldHVybnMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gKi9cbkxSVU1hcC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHMgPSAnJywgZW50cnkgPSB0aGlzLm9sZGVzdDtcbiAgd2hpbGUgKGVudHJ5KSB7XG4gICAgcyArPSBTdHJpbmcoZW50cnkua2V5KSsnOicrZW50cnkudmFsdWU7XG4gICAgZW50cnkgPSBlbnRyeVtORVdFUl07XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBzICs9ICcgPCAnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcztcbn07XG5cbn0pO1xuIiwgIi8qKlxuICogc3RhY2stdHJhY2UgLSBQYXJzZXMgbm9kZS5qcyBzdGFjayB0cmFjZXNcbiAqXG4gKiBUaGlzIHdhcyBvcmlnaW5hbGx5IGZvcmtlZCB0byBmaXggdGhpcyBpc3N1ZTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mZWxpeGdlL25vZGUtc3RhY2stdHJhY2UvaXNzdWVzLzMxXG4gKlxuICogTWFyIDE5LDIwMTkgLSAjNGZkMzc5ZVxuICpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mZWxpeGdlL25vZGUtc3RhY2stdHJhY2UvXG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuXG4vKiogRGVjb2RlZCBTdGFja0ZyYW1lICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrRnJhbWUge1xuICBmaWxlTmFtZTogc3RyaW5nO1xuICBsaW5lTnVtYmVyOiBudW1iZXI7XG4gIGZ1bmN0aW9uTmFtZTogc3RyaW5nO1xuICB0eXBlTmFtZTogc3RyaW5nO1xuICBtZXRob2ROYW1lOiBzdHJpbmc7XG4gIG5hdGl2ZTogYm9vbGVhbjtcbiAgY29sdW1uTnVtYmVyOiBudW1iZXI7XG59XG5cbi8qKiBFeHRyYWN0cyBTdGFja0ZyYW1lcyBmcm9tIHRoZSBFcnJvciAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKGVycjogRXJyb3IpOiBTdGFja0ZyYW1lW10ge1xuICBpZiAoIWVyci5zdGFjaykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGxpbmVzID0gZXJyLnN0YWNrLnNwbGl0KCdcXG4nKS5zbGljZSgxKTtcblxuICByZXR1cm4gbGluZXNcbiAgICAubWFwKGxpbmUgPT4ge1xuICAgICAgaWYgKGxpbmUubWF0Y2goL15cXHMqWy1dezQsfSQvKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbHVtbk51bWJlcjogbnVsbCxcbiAgICAgICAgICBmaWxlTmFtZTogbGluZSxcbiAgICAgICAgICBmdW5jdGlvbk5hbWU6IG51bGwsXG4gICAgICAgICAgbGluZU51bWJlcjogbnVsbCxcbiAgICAgICAgICBtZXRob2ROYW1lOiBudWxsLFxuICAgICAgICAgIG5hdGl2ZTogbnVsbCxcbiAgICAgICAgICB0eXBlTmFtZTogbnVsbCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGluZU1hdGNoID0gbGluZS5tYXRjaCgvYXQgKD86KC4rPylcXHMrXFwoKT8oPzooLis/KTooXFxkKykoPzo6KFxcZCspKT98KFteKV0rKSlcXCk/Lyk7XG4gICAgICBpZiAoIWxpbmVNYXRjaCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBsZXQgb2JqZWN0ID0gbnVsbDtcbiAgICAgIGxldCBtZXRob2QgPSBudWxsO1xuICAgICAgbGV0IGZ1bmN0aW9uTmFtZSA9IG51bGw7XG4gICAgICBsZXQgdHlwZU5hbWUgPSBudWxsO1xuICAgICAgbGV0IG1ldGhvZE5hbWUgPSBudWxsO1xuICAgICAgY29uc3QgaXNOYXRpdmUgPSBsaW5lTWF0Y2hbNV0gPT09ICduYXRpdmUnO1xuXG4gICAgICBpZiAobGluZU1hdGNoWzFdKSB7XG4gICAgICAgIGZ1bmN0aW9uTmFtZSA9IGxpbmVNYXRjaFsxXTtcbiAgICAgICAgbGV0IG1ldGhvZFN0YXJ0ID0gZnVuY3Rpb25OYW1lLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgICAgIGlmIChmdW5jdGlvbk5hbWVbbWV0aG9kU3RhcnQgLSAxXSA9PT0gJy4nKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBsdXNwbHVzXG4gICAgICAgICAgbWV0aG9kU3RhcnQtLTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0aG9kU3RhcnQgPiAwKSB7XG4gICAgICAgICAgb2JqZWN0ID0gZnVuY3Rpb25OYW1lLnN1YnN0cigwLCBtZXRob2RTdGFydCk7XG4gICAgICAgICAgbWV0aG9kID0gZnVuY3Rpb25OYW1lLnN1YnN0cihtZXRob2RTdGFydCArIDEpO1xuICAgICAgICAgIGNvbnN0IG9iamVjdEVuZCA9IG9iamVjdC5pbmRleE9mKCcuTW9kdWxlJyk7XG4gICAgICAgICAgaWYgKG9iamVjdEVuZCA+IDApIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uTmFtZS5zdWJzdHIob2JqZWN0RW5kICsgMSk7XG4gICAgICAgICAgICBvYmplY3QgPSBvYmplY3Quc3Vic3RyKDAsIG9iamVjdEVuZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHR5cGVOYW1lID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCkge1xuICAgICAgICB0eXBlTmFtZSA9IG9iamVjdDtcbiAgICAgICAgbWV0aG9kTmFtZSA9IG1ldGhvZDtcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJzxhbm9ueW1vdXM+Jykge1xuICAgICAgICBtZXRob2ROYW1lID0gbnVsbDtcbiAgICAgICAgZnVuY3Rpb25OYW1lID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHtcbiAgICAgICAgY29sdW1uTnVtYmVyOiBwYXJzZUludChsaW5lTWF0Y2hbNF0sIDEwKSB8fCBudWxsLFxuICAgICAgICBmaWxlTmFtZTogbGluZU1hdGNoWzJdIHx8IG51bGwsXG4gICAgICAgIGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgbGluZU51bWJlcjogcGFyc2VJbnQobGluZU1hdGNoWzNdLCAxMCkgfHwgbnVsbCxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgbmF0aXZlOiBpc05hdGl2ZSxcbiAgICAgICAgdHlwZU5hbWUsXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcHJvcGVydGllcztcbiAgICB9KVxuICAgIC5maWx0ZXIoY2FsbFNpdGUgPT4gISFjYWxsU2l0ZSkgYXMgU3RhY2tGcmFtZVtdO1xufVxuIiwgImltcG9ydCB7IEV2ZW50LCBFeGNlcHRpb24sIEV4dGVuZGVkRXJyb3IsIFN0YWNrRnJhbWUgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGFkZENvbnRleHRUb0ZyYW1lLCBiYXNlbmFtZSwgZGlybmFtZSwgU3luY1Byb21pc2UgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbmltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgTFJVTWFwIH0gZnJvbSAnbHJ1X21hcCc7XG5cbmltcG9ydCAqIGFzIHN0YWNrdHJhY2UgZnJvbSAnLi9zdGFja3RyYWNlJztcbmltcG9ydCB7IE5vZGVPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IERFRkFVTFRfTElORVNfT0ZfQ09OVEVYVDogbnVtYmVyID0gNztcbmNvbnN0IEZJTEVfQ09OVEVOVF9DQUNIRSA9IG5ldyBMUlVNYXA8c3RyaW5nLCBzdHJpbmcgfCBudWxsPigxMDApO1xuXG4vKipcbiAqIFJlc2V0cyB0aGUgZmlsZSBjYWNoZS4gRXhpc3RzIGZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRGaWxlQ29udGVudENhY2hlKCk6IHZvaWQge1xuICBGSUxFX0NPTlRFTlRfQ0FDSEUuY2xlYXIoKTtcbn1cblxuLyoqIEpTRG9jICovXG5mdW5jdGlvbiBnZXRGdW5jdGlvbihmcmFtZTogc3RhY2t0cmFjZS5TdGFja0ZyYW1lKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZnJhbWUuZnVuY3Rpb25OYW1lIHx8IGAke2ZyYW1lLnR5cGVOYW1lfS4ke2ZyYW1lLm1ldGhvZE5hbWUgfHwgJzxhbm9ueW1vdXM+J31gO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gVGhpcyBzZWVtcyB0byBoYXBwZW4gc29tZXRpbWVzIHdoZW4gdXNpbmcgJ3VzZSBzdHJpY3QnLFxuICAgIC8vIHN0ZW1taW5nIGZyb20gYGdldFR5cGVOYW1lYC5cbiAgICAvLyBbVHlwZUVycm9yOiBDYW5ub3QgcmVhZCBwcm9wZXJ0eSAnY29uc3RydWN0b3InIG9mIHVuZGVmaW5lZF1cbiAgICByZXR1cm4gJzxhbm9ueW1vdXM+JztcbiAgfVxufVxuXG5jb25zdCBtYWluTW9kdWxlOiBzdHJpbmcgPSBgJHsocmVxdWlyZS5tYWluICYmIHJlcXVpcmUubWFpbi5maWxlbmFtZSAmJiBkaXJuYW1lKHJlcXVpcmUubWFpbi5maWxlbmFtZSkpIHx8XG4gIGdsb2JhbC5wcm9jZXNzLmN3ZCgpfS9gO1xuXG4vKiogSlNEb2MgKi9cbmZ1bmN0aW9uIGdldE1vZHVsZShmaWxlbmFtZTogc3RyaW5nLCBiYXNlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFiYXNlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgYmFzZSA9IG1haW5Nb2R1bGU7XG4gIH1cblxuICAvLyBJdCdzIHNwZWNpZmljYWxseSBhIG1vZHVsZVxuICBjb25zdCBmaWxlID0gYmFzZW5hbWUoZmlsZW5hbWUsICcuanMnKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGZpbGVuYW1lID0gZGlybmFtZShmaWxlbmFtZSk7XG4gIGxldCBuID0gZmlsZW5hbWUubGFzdEluZGV4T2YoJy9ub2RlX21vZHVsZXMvJyk7XG4gIGlmIChuID4gLTEpIHtcbiAgICAvLyAvbm9kZV9tb2R1bGVzLyBpcyAxNCBjaGFyc1xuICAgIHJldHVybiBgJHtmaWxlbmFtZS5zdWJzdHIobiArIDE0KS5yZXBsYWNlKC9cXC8vZywgJy4nKX06JHtmaWxlfWA7XG4gIH1cbiAgLy8gTGV0J3Mgc2VlIGlmIGl0J3MgYSBwYXJ0IG9mIHRoZSBtYWluIG1vZHVsZVxuICAvLyBUbyBiZSBhIHBhcnQgb2YgbWFpbiBtb2R1bGUsIGl0IGhhcyB0byBzaGFyZSB0aGUgc2FtZSBiYXNlXG4gIG4gPSBgJHtmaWxlbmFtZX0vYC5sYXN0SW5kZXhPZihiYXNlLCAwKTtcbiAgaWYgKG4gPT09IDApIHtcbiAgICBsZXQgbW9kdWxlTmFtZSA9IGZpbGVuYW1lLnN1YnN0cihiYXNlLmxlbmd0aCkucmVwbGFjZSgvXFwvL2csICcuJyk7XG4gICAgaWYgKG1vZHVsZU5hbWUpIHtcbiAgICAgIG1vZHVsZU5hbWUgKz0gJzonO1xuICAgIH1cbiAgICBtb2R1bGVOYW1lICs9IGZpbGU7XG4gICAgcmV0dXJuIG1vZHVsZU5hbWU7XG4gIH1cbiAgcmV0dXJuIGZpbGU7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZWFkcyBmaWxlIGNvbnRlbnRzIGFuZCBjYWNoZXMgdGhlbSBpbiBhIGdsb2JhbCBMUlUgY2FjaGUuXG4gKiBSZXR1cm5zIGEgUHJvbWlzZSBmaWxlcGF0aCA9PiBjb250ZW50IGFycmF5IGZvciBhbGwgZmlsZXMgdGhhdCB3ZSB3ZXJlIGFibGUgdG8gcmVhZC5cbiAqXG4gKiBAcGFyYW0gZmlsZW5hbWVzIEFycmF5IG9mIGZpbGVwYXRocyB0byByZWFkIGNvbnRlbnQgZnJvbS5cbiAqL1xuZnVuY3Rpb24gcmVhZFNvdXJjZUZpbGVzKGZpbGVuYW1lczogc3RyaW5nW10pOiBQcm9taXNlTGlrZTx7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bGwgfT4ge1xuICAvLyB3ZSdyZSByZWx5aW5nIG9uIGZpbGVuYW1lcyBiZWluZyBkZS1kdXBlZCBhbHJlYWR5XG4gIGlmIChmaWxlbmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFN5bmNQcm9taXNlLnJlc29sdmUoe30pO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZTx7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVsbDtcbiAgfT4ocmVzb2x2ZSA9PiB7XG4gICAgY29uc3Qgc291cmNlRmlsZXM6IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bGw7XG4gICAgfSA9IHt9O1xuXG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1mb3Itb2ZcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZmlsZW5hbWUgPSBmaWxlbmFtZXNbaV07XG5cbiAgICAgIGNvbnN0IGNhY2hlID0gRklMRV9DT05URU5UX0NBQ0hFLmdldChmaWxlbmFtZSk7XG4gICAgICAvLyBXZSBoYXZlIGEgY2FjaGUgaGl0XG4gICAgICBpZiAoY2FjaGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBJZiBpdCdzIG5vdCBudWxsICh3aGljaCBtZWFucyB3ZSBmb3VuZCBhIGZpbGUgYW5kIGhhdmUgYSBjb250ZW50KVxuICAgICAgICAvLyB3ZSBzZXQgdGhlIGNvbnRlbnQgYW5kIHJldHVybiBpdCBsYXRlci5cbiAgICAgICAgaWYgKGNhY2hlICE9PSBudWxsKSB7XG4gICAgICAgICAgc291cmNlRmlsZXNbZmlsZW5hbWVdID0gY2FjaGU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBsdXNwbHVzXG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIC8vIEluIGFueSBjYXNlIHdlIHdhbnQgdG8gc2tpcCBoZXJlIHRoZW4gc2luY2Ugd2UgaGF2ZSBhIGNvbnRlbnQgYWxyZWFkeSBvciB3ZSBjb3VsZG4ndFxuICAgICAgICAvLyByZWFkIHRoZSBmaWxlIGFuZCBkb24ndCB3YW50IHRvIHRyeSBhZ2Fpbi5cbiAgICAgICAgaWYgKGNvdW50ID09PSBmaWxlbmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgcmVzb2x2ZShzb3VyY2VGaWxlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHJlYWRGaWxlKGZpbGVuYW1lLCAoZXJyOiBFcnJvciB8IG51bGwsIGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gZXJyID8gbnVsbCA6IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgc291cmNlRmlsZXNbZmlsZW5hbWVdID0gY29udGVudDtcblxuICAgICAgICAvLyBXZSBhbHdheXMgd2FudCB0byBzZXQgdGhlIGNhY2hlLCBldmVuIHRvIG51bGwgd2hpY2ggbWVhbnMgdGhlcmUgd2FzIGFuIGVycm9yIHJlYWRpbmcgdGhlIGZpbGUuXG4gICAgICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIHRyeSB0byByZWFkIHRoZSBmaWxlIGFnYWluLlxuICAgICAgICBGSUxFX0NPTlRFTlRfQ0FDSEUuc2V0KGZpbGVuYW1lLCBjb250ZW50KTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBsdXNwbHVzXG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIGlmIChjb3VudCA9PT0gZmlsZW5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgIHJlc29sdmUoc291cmNlRmlsZXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RTdGFja0Zyb21FcnJvcihlcnJvcjogRXJyb3IpOiBzdGFja3RyYWNlLlN0YWNrRnJhbWVbXSB7XG4gIGNvbnN0IHN0YWNrID0gc3RhY2t0cmFjZS5wYXJzZShlcnJvcik7XG4gIGlmICghc3RhY2spIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIHN0YWNrO1xufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3RhY2soc3RhY2s6IHN0YWNrdHJhY2UuU3RhY2tGcmFtZVtdLCBvcHRpb25zPzogTm9kZU9wdGlvbnMpOiBQcm9taXNlTGlrZTxTdGFja0ZyYW1lW10+IHtcbiAgY29uc3QgZmlsZXNUb1JlYWQ6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3QgbGluZXNPZkNvbnRleHQgPVxuICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5mcmFtZUNvbnRleHRMaW5lcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5mcmFtZUNvbnRleHRMaW5lcyA6IERFRkFVTFRfTElORVNfT0ZfQ09OVEVYVDtcblxuICBjb25zdCBmcmFtZXM6IFN0YWNrRnJhbWVbXSA9IHN0YWNrLm1hcChmcmFtZSA9PiB7XG4gICAgY29uc3QgcGFyc2VkRnJhbWU6IFN0YWNrRnJhbWUgPSB7XG4gICAgICBjb2xubzogZnJhbWUuY29sdW1uTnVtYmVyLFxuICAgICAgZmlsZW5hbWU6IGZyYW1lLmZpbGVOYW1lPy5zdGFydHNXaXRoKCdmaWxlOi8vJykgPyBmcmFtZS5maWxlTmFtZS5zdWJzdHIoNykgOiBmcmFtZS5maWxlTmFtZSB8fCAnJyxcbiAgICAgIGZ1bmN0aW9uOiBnZXRGdW5jdGlvbihmcmFtZSksXG4gICAgICBsaW5lbm86IGZyYW1lLmxpbmVOdW1iZXIsXG4gICAgfTtcblxuICAgIGNvbnN0IGlzSW50ZXJuYWwgPVxuICAgICAgZnJhbWUubmF0aXZlIHx8XG4gICAgICAocGFyc2VkRnJhbWUuZmlsZW5hbWUgJiZcbiAgICAgICAgIXBhcnNlZEZyYW1lLmZpbGVuYW1lLnN0YXJ0c1dpdGgoJy8nKSAmJlxuICAgICAgICAhcGFyc2VkRnJhbWUuZmlsZW5hbWUuc3RhcnRzV2l0aCgnLicpICYmXG4gICAgICAgIHBhcnNlZEZyYW1lLmZpbGVuYW1lLmluZGV4T2YoJzpcXFxcJykgIT09IDEpO1xuXG4gICAgLy8gaW5fYXBwIGlzIGFsbCB0aGF0J3Mgbm90IGFuIGludGVybmFsIE5vZGUgZnVuY3Rpb24gb3IgYSBtb2R1bGUgd2l0aGluIG5vZGVfbW9kdWxlc1xuICAgIC8vIG5vdGUgdGhhdCBpc05hdGl2ZSBhcHBlYXJzIHRvIHJldHVybiB0cnVlIGV2ZW4gZm9yIG5vZGUgY29yZSBsaWJyYXJpZXNcbiAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9yYXZlbi1ub2RlL2lzc3Vlcy8xNzZcbiAgICBwYXJzZWRGcmFtZS5pbl9hcHAgPVxuICAgICAgIWlzSW50ZXJuYWwgJiYgcGFyc2VkRnJhbWUuZmlsZW5hbWUgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWRGcmFtZS5maWxlbmFtZS5pbmRleE9mKCdub2RlX21vZHVsZXMvJykgPT09IC0xO1xuXG4gICAgLy8gRXh0cmFjdCBhIG1vZHVsZSBuYW1lIGJhc2VkIG9uIHRoZSBmaWxlbmFtZVxuICAgIGlmIChwYXJzZWRGcmFtZS5maWxlbmFtZSkge1xuICAgICAgcGFyc2VkRnJhbWUubW9kdWxlID0gZ2V0TW9kdWxlKHBhcnNlZEZyYW1lLmZpbGVuYW1lKTtcblxuICAgICAgaWYgKCFpc0ludGVybmFsICYmIGxpbmVzT2ZDb250ZXh0ID4gMCAmJiBmaWxlc1RvUmVhZC5pbmRleE9mKHBhcnNlZEZyYW1lLmZpbGVuYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgZmlsZXNUb1JlYWQucHVzaChwYXJzZWRGcmFtZS5maWxlbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZEZyYW1lO1xuICB9KTtcblxuICAvLyBXZSBkbyBhbiBlYXJseSByZXR1cm4gaWYgd2UgZG8gbm90IHdhbnQgdG8gZmV0Y2ggY29udGV4dCBsaWVuc1xuICBpZiAobGluZXNPZkNvbnRleHQgPD0gMCkge1xuICAgIHJldHVybiBTeW5jUHJvbWlzZS5yZXNvbHZlKGZyYW1lcyk7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhZGRQcmVQb3N0Q29udGV4dChmaWxlc1RvUmVhZCwgZnJhbWVzLCBsaW5lc09mQ29udGV4dCk7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICAvLyBUaGlzIGhhcHBlbnMgaW4gZWxlY3Ryb24gZm9yIGV4YW1wbGUgd2hlcmUgd2UgYXJlIG5vdCBhYmxlIHRvIHJlYWQgZmlsZXMgZnJvbSBhc2FyLlxuICAgIC8vIFNvIGl0J3MgZmluZSwgd2UgcmVjb3ZlciBiZSBqdXN0IHJldHVybmluZyBhbGwgZnJhbWVzIHdpdGhvdXQgcHJlL3Bvc3QgY29udGV4dC5cbiAgICByZXR1cm4gU3luY1Byb21pc2UucmVzb2x2ZShmcmFtZXMpO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB0cmllcyB0byByZWFkIHRoZSBzb3VyY2UgZmlsZXMgKyBhZGRpbmcgcHJlIGFuZCBwb3N0IGNvbnRleHQgKHNvdXJjZSBjb2RlKVxuICogdG8gYSBmcmFtZS5cbiAqIEBwYXJhbSBmaWxlc1RvUmVhZCBzdHJpbmdbXSBvZiBmaWxlcGF0aHNcbiAqIEBwYXJhbSBmcmFtZXMgU3RhY2tGcmFtZVtdIGNvbnRhaW5nIGFsbCBmcmFtZXNcbiAqL1xuZnVuY3Rpb24gYWRkUHJlUG9zdENvbnRleHQoXG4gIGZpbGVzVG9SZWFkOiBzdHJpbmdbXSxcbiAgZnJhbWVzOiBTdGFja0ZyYW1lW10sXG4gIGxpbmVzT2ZDb250ZXh0OiBudW1iZXIsXG4pOiBQcm9taXNlTGlrZTxTdGFja0ZyYW1lW10+IHtcbiAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZTxTdGFja0ZyYW1lW10+KHJlc29sdmUgPT5cbiAgICByZWFkU291cmNlRmlsZXMoZmlsZXNUb1JlYWQpLnRoZW4oc291cmNlRmlsZXMgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZnJhbWVzLm1hcChmcmFtZSA9PiB7XG4gICAgICAgIGlmIChmcmFtZS5maWxlbmFtZSAmJiBzb3VyY2VGaWxlc1tmcmFtZS5maWxlbmFtZV0pIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgbGluZXMgPSAoc291cmNlRmlsZXNbZnJhbWUuZmlsZW5hbWVdIGFzIHN0cmluZykuc3BsaXQoJ1xcbicpO1xuXG4gICAgICAgICAgICBhZGRDb250ZXh0VG9GcmFtZShsaW5lcywgZnJhbWUsIGxpbmVzT2ZDb250ZXh0KTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBhbm9tYWx5LCBiZWluZyBkZWZlbnNpdmUgaW4gY2FzZVxuICAgICAgICAgICAgLy8gdW5saWtlbHkgdG8gZXZlciBoYXBwZW4gaW4gcHJhY3RpY2UgYnV0IGNhbiBkZWZpbml0ZWx5IGhhcHBlbiBpbiB0aGVvcnlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZyYW1lO1xuICAgICAgfSk7XG5cbiAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICB9KSxcbiAgKTtcbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeGNlcHRpb25Gcm9tRXJyb3IoZXJyb3I6IEVycm9yLCBvcHRpb25zPzogTm9kZU9wdGlvbnMpOiBQcm9taXNlTGlrZTxFeGNlcHRpb24+IHtcbiAgY29uc3QgbmFtZSA9IGVycm9yLm5hbWUgfHwgZXJyb3IuY29uc3RydWN0b3IubmFtZTtcbiAgY29uc3Qgc3RhY2sgPSBleHRyYWN0U3RhY2tGcm9tRXJyb3IoZXJyb3IpO1xuICByZXR1cm4gbmV3IFN5bmNQcm9taXNlPEV4Y2VwdGlvbj4ocmVzb2x2ZSA9PlxuICAgIHBhcnNlU3RhY2soc3RhY2ssIG9wdGlvbnMpLnRoZW4oZnJhbWVzID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgc3RhY2t0cmFjZToge1xuICAgICAgICAgIGZyYW1lczogcHJlcGFyZUZyYW1lc0ZvckV2ZW50KGZyYW1lcyksXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IG5hbWUsXG4gICAgICAgIHZhbHVlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgfTtcbiAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICB9KSxcbiAgKTtcbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUVycm9yKGVycm9yOiBFeHRlbmRlZEVycm9yLCBvcHRpb25zPzogTm9kZU9wdGlvbnMpOiBQcm9taXNlTGlrZTxFdmVudD4ge1xuICByZXR1cm4gbmV3IFN5bmNQcm9taXNlPEV2ZW50PihyZXNvbHZlID0+XG4gICAgZ2V0RXhjZXB0aW9uRnJvbUVycm9yKGVycm9yLCBvcHRpb25zKS50aGVuKChleGNlcHRpb246IEV4Y2VwdGlvbikgPT4ge1xuICAgICAgcmVzb2x2ZSh7XG4gICAgICAgIGV4Y2VwdGlvbjoge1xuICAgICAgICAgIHZhbHVlczogW2V4Y2VwdGlvbl0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KSxcbiAgKTtcbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlRnJhbWVzRm9yRXZlbnQoc3RhY2s6IFN0YWNrRnJhbWVbXSk6IFN0YWNrRnJhbWVbXSB7XG4gIGlmICghc3RhY2sgfHwgIXN0YWNrLmxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGxldCBsb2NhbFN0YWNrID0gc3RhY2s7XG4gIGNvbnN0IGZpcnN0RnJhbWVGdW5jdGlvbiA9IGxvY2FsU3RhY2tbMF0uZnVuY3Rpb24gfHwgJyc7XG5cbiAgaWYgKGZpcnN0RnJhbWVGdW5jdGlvbi5pbmRleE9mKCdjYXB0dXJlTWVzc2FnZScpICE9PSAtMSB8fCBmaXJzdEZyYW1lRnVuY3Rpb24uaW5kZXhPZignY2FwdHVyZUV4Y2VwdGlvbicpICE9PSAtMSkge1xuICAgIGxvY2FsU3RhY2sgPSBsb2NhbFN0YWNrLnNsaWNlKDEpO1xuICB9XG5cbiAgLy8gVGhlIGZyYW1lIHdoZXJlIHRoZSBjcmFzaCBoYXBwZW5lZCwgc2hvdWxkIGJlIHRoZSBsYXN0IGVudHJ5IGluIHRoZSBhcnJheVxuICByZXR1cm4gbG9jYWxTdGFjay5yZXZlcnNlKCk7XG59XG4iLCAiLy8gVE9ETzogUmVtb3ZlIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UgYW5kIHJlbHkgb25seSBvbiBAc2VudHJ5L2NvcmUgU0RLX1ZFUlNJT04gYW5kIFNka01ldGFkYXRhXG5leHBvcnQgY29uc3QgU0RLX05BTUUgPSAnc2VudHJ5LmphdmFzY3JpcHQubm9kZSc7XG4iLCAiaW1wb3J0IHsgQVBJLCBTREtfVkVSU0lPTiB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQge1xuICBEc25Qcm90b2NvbCxcbiAgRXZlbnQsXG4gIFJlc3BvbnNlLFxuICBTZW50cnlSZXF1ZXN0LFxuICBTZW50cnlSZXF1ZXN0VHlwZSxcbiAgU2Vzc2lvbixcbiAgU2Vzc2lvbkFnZ3JlZ2F0ZXMsXG4gIFN0YXR1cyxcbiAgVHJhbnNwb3J0LFxuICBUcmFuc3BvcnRPcHRpb25zLFxufSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGxvZ2dlciwgcGFyc2VSZXRyeUFmdGVySGVhZGVyLCBQcm9taXNlQnVmZmVyLCBTZW50cnlFcnJvciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgaHR0cCBmcm9tICdodHRwJztcbmltcG9ydCAqIGFzIGh0dHBzIGZyb20gJ2h0dHBzJztcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCc7XG5cbmltcG9ydCB7IFNES19OQU1FIH0gZnJvbSAnLi4vLi4vdmVyc2lvbic7XG5pbXBvcnQgeyBIVFRQTW9kdWxlIH0gZnJvbSAnLi9odHRwLW1vZHVsZSc7XG5cbmV4cG9ydCB0eXBlIFVSTFBhcnRzID0gUGljazxVUkwsICdob3N0bmFtZScgfCAncGF0aG5hbWUnIHwgJ3BvcnQnIHwgJ3Byb3RvY29sJz47XG5leHBvcnQgdHlwZSBVcmxQYXJzZXIgPSAodXJsOiBzdHJpbmcpID0+IFVSTFBhcnRzO1xuXG5jb25zdCBDQVRFR09SWV9NQVBQSU5HOiB7XG4gIFtrZXkgaW4gU2VudHJ5UmVxdWVzdFR5cGVdOiBzdHJpbmc7XG59ID0ge1xuICBldmVudDogJ2Vycm9yJyxcbiAgdHJhbnNhY3Rpb246ICd0cmFuc2FjdGlvbicsXG4gIHNlc3Npb246ICdzZXNzaW9uJyxcbiAgYXR0YWNobWVudDogJ2F0dGFjaG1lbnQnLFxufTtcblxuLyoqIEJhc2UgVHJhbnNwb3J0IGNsYXNzIGltcGxlbWVudGF0aW9uICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVRyYW5zcG9ydCBpbXBsZW1lbnRzIFRyYW5zcG9ydCB7XG4gIC8qKiBUaGUgQWdlbnQgdXNlZCBmb3IgY29ycmVzcG9uZGluZyB0cmFuc3BvcnQgKi9cbiAgcHVibGljIG1vZHVsZT86IEhUVFBNb2R1bGU7XG5cbiAgLyoqIFRoZSBBZ2VudCB1c2VkIGZvciBjb3JyZXNwb25kaW5nIHRyYW5zcG9ydCAqL1xuICBwdWJsaWMgY2xpZW50PzogaHR0cC5BZ2VudCB8IGh0dHBzLkFnZW50O1xuXG4gIC8qKiBBUEkgb2JqZWN0ICovXG4gIHByb3RlY3RlZCBfYXBpOiBBUEk7XG5cbiAgLyoqIEEgc2ltcGxlIGJ1ZmZlciBob2xkaW5nIGFsbCByZXF1ZXN0cy4gKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9idWZmZXI6IFByb21pc2VCdWZmZXI8UmVzcG9uc2U+ID0gbmV3IFByb21pc2VCdWZmZXIoMzApO1xuXG4gIC8qKiBMb2NrcyB0cmFuc3BvcnQgYWZ0ZXIgcmVjZWl2aW5nIHJhdGUgbGltaXRzIGluIGEgcmVzcG9uc2UgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9yYXRlTGltaXRzOiBSZWNvcmQ8c3RyaW5nLCBEYXRlPiA9IHt9O1xuXG4gIC8qKiBDcmVhdGUgaW5zdGFuY2UgYW5kIHNldCB0aGlzLmRzbiAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIG9wdGlvbnM6IFRyYW5zcG9ydE9wdGlvbnMpIHtcbiAgICB0aGlzLl9hcGkgPSBuZXcgQVBJKG9wdGlvbnMuZHNuLCBvcHRpb25zLl9tZXRhZGF0YSwgb3B0aW9ucy50dW5uZWwpO1xuICB9XG5cbiAgLyoqIERlZmF1bHQgZnVuY3Rpb24gdXNlZCB0byBwYXJzZSBVUkxzICovXG4gIHB1YmxpYyB1cmxQYXJzZXI6IFVybFBhcnNlciA9IHVybCA9PiBuZXcgVVJMKHVybCk7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2VuZEV2ZW50KF86IEV2ZW50KTogUHJvbWlzZUxpa2U8UmVzcG9uc2U+IHtcbiAgICB0aHJvdyBuZXcgU2VudHJ5RXJyb3IoJ1RyYW5zcG9ydCBDbGFzcyBoYXMgdG8gaW1wbGVtZW50IGBzZW5kRXZlbnRgIG1ldGhvZC4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNsb3NlKHRpbWVvdXQ/OiBudW1iZXIpOiBQcm9taXNlTGlrZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5kcmFpbih0aW1lb3V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBwcm94eSBzZXR0aW5ncyBmcm9tIGNsaWVudCBvcHRpb25zIGFuZCBlbnYgdmFyaWFibGVzLlxuICAgKlxuICAgKiBIb25vcnMgYG5vX3Byb3h5YCBlbnYgdmFyaWFibGUgd2l0aCB0aGUgaGlnaGVzdCBwcmlvcml0eSB0byBhbGxvdyBmb3IgaG9zdHMgZXhjbHVzaW9uLlxuICAgKlxuICAgKiBBbiBvcmRlciBvZiBwcmlvcml0eSBmb3IgYXZhaWxhYmxlIHByb3RvY29scyBpczpcbiAgICogYGh0dHBgICA9PiBgb3B0aW9ucy5odHRwUHJveHlgIHwgYHByb2Nlc3MuZW52Lmh0dHBfcHJveHlgXG4gICAqIGBodHRwc2AgPT4gYG9wdGlvbnMuaHR0cHNQcm94eWAgfCBgb3B0aW9ucy5odHRwUHJveHlgIHwgYHByb2Nlc3MuZW52Lmh0dHBzX3Byb3h5YCB8IGBwcm9jZXNzLmVudi5odHRwX3Byb3h5YFxuICAgKi9cbiAgcHJvdGVjdGVkIF9nZXRQcm94eShwcm90b2NvbDogRHNuUHJvdG9jb2wpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHsgbm9fcHJveHksIGh0dHBfcHJveHksIGh0dHBzX3Byb3h5IH0gPSBwcm9jZXNzLmVudjtcbiAgICBjb25zdCB7IGh0dHBQcm94eSwgaHR0cHNQcm94eSB9ID0gdGhpcy5vcHRpb25zO1xuICAgIGNvbnN0IHByb3h5ID0gcHJvdG9jb2wgPT09ICdodHRwJyA/IGh0dHBQcm94eSB8fCBodHRwX3Byb3h5IDogaHR0cHNQcm94eSB8fCBodHRwUHJveHkgfHwgaHR0cHNfcHJveHkgfHwgaHR0cF9wcm94eTtcblxuICAgIGlmICghbm9fcHJveHkpIHtcbiAgICAgIHJldHVybiBwcm94eTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGhvc3QsIHBvcnQgfSA9IHRoaXMuX2FwaS5nZXREc24oKTtcbiAgICBmb3IgKGNvbnN0IG5wIG9mIG5vX3Byb3h5LnNwbGl0KCcsJykpIHtcbiAgICAgIGlmIChob3N0LmVuZHNXaXRoKG5wKSB8fCBgJHtob3N0fToke3BvcnR9YC5lbmRzV2l0aChucCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm94eTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIGEgYnVpbGQgcmVxdWVzdCBvcHRpb24gb2JqZWN0IHVzZWQgYnkgcmVxdWVzdCAqL1xuICBwcm90ZWN0ZWQgX2dldFJlcXVlc3RPcHRpb25zKHVybFBhcnRzOiBVUkxQYXJ0cyk6IGh0dHAuUmVxdWVzdE9wdGlvbnMgfCBodHRwcy5SZXF1ZXN0T3B0aW9ucyB7XG4gICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgIC4uLnRoaXMuX2FwaS5nZXRSZXF1ZXN0SGVhZGVycyhTREtfTkFNRSwgU0RLX1ZFUlNJT04pLFxuICAgICAgLi4udGhpcy5vcHRpb25zLmhlYWRlcnMsXG4gICAgfTtcbiAgICBjb25zdCB7IGhvc3RuYW1lLCBwYXRobmFtZSwgcG9ydCwgcHJvdG9jb2wgfSA9IHVybFBhcnRzO1xuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi8zODE0NmU3MTdmZWQyZmFiZTNhYWNiNjU0MGQ4Mzk0NzVlMGNlMWM2L2xpYi9pbnRlcm5hbC91cmwuanMjTDEyNjgtTDEyOTBcbiAgICAvLyBXZSBpZ25vcmUgdGhlIHF1ZXJ5IHN0cmluZyBvbiBwdXJwb3NlXG4gICAgY29uc3QgcGF0aCA9IGAke3BhdGhuYW1lfWA7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWdlbnQ6IHRoaXMuY2xpZW50LFxuICAgICAgaGVhZGVycyxcbiAgICAgIGhvc3RuYW1lLFxuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBwYXRoLFxuICAgICAgcG9ydCxcbiAgICAgIHByb3RvY29sLFxuICAgICAgLi4uKHRoaXMub3B0aW9ucy5jYUNlcnRzICYmIHtcbiAgICAgICAgY2E6IGZzLnJlYWRGaWxlU3luYyh0aGlzLm9wdGlvbnMuY2FDZXJ0cyksXG4gICAgICB9KSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHRpbWUgdGhhdCBnaXZlbiBjYXRlZ29yeSBpcyBkaXNhYmxlZCB1bnRpbCBmb3IgcmF0ZSBsaW1pdGluZ1xuICAgKi9cbiAgcHJvdGVjdGVkIF9kaXNhYmxlZFVudGlsKHJlcXVlc3RUeXBlOiBTZW50cnlSZXF1ZXN0VHlwZSk6IERhdGUge1xuICAgIGNvbnN0IGNhdGVnb3J5ID0gQ0FURUdPUllfTUFQUElOR1tyZXF1ZXN0VHlwZV07XG4gICAgcmV0dXJuIHRoaXMuX3JhdGVMaW1pdHNbY2F0ZWdvcnldIHx8IHRoaXMuX3JhdGVMaW1pdHMuYWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIGNhdGVnb3J5IGlzIHJhdGUgbGltaXRlZFxuICAgKi9cbiAgcHJvdGVjdGVkIF9pc1JhdGVMaW1pdGVkKHJlcXVlc3RUeXBlOiBTZW50cnlSZXF1ZXN0VHlwZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZFVudGlsKHJlcXVlc3RUeXBlKSA+IG5ldyBEYXRlKERhdGUubm93KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgaW50ZXJuYWwgX3JhdGVMaW1pdHMgZnJvbSBpbmNvbWluZyBoZWFkZXJzLiBSZXR1cm5zIHRydWUgaWYgaGVhZGVycyBjb250YWlucyBhIG5vbi1lbXB0eSByYXRlIGxpbWl0aW5nIGhlYWRlci5cbiAgICovXG4gIHByb3RlY3RlZCBfaGFuZGxlUmF0ZUxpbWl0KGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGw+KTogYm9vbGVhbiB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBybEhlYWRlciA9IGhlYWRlcnNbJ3gtc2VudHJ5LXJhdGUtbGltaXRzJ107XG4gICAgY29uc3QgcmFIZWFkZXIgPSBoZWFkZXJzWydyZXRyeS1hZnRlciddO1xuXG4gICAgaWYgKHJsSGVhZGVyKSB7XG4gICAgICAvLyByYXRlIGxpbWl0IGhlYWRlcnMgYXJlIG9mIHRoZSBmb3JtXG4gICAgICAvLyAgICAgPGhlYWRlcj4sPGhlYWRlcj4sLi5cbiAgICAgIC8vIHdoZXJlIGVhY2ggPGhlYWRlcj4gaXMgb2YgdGhlIGZvcm1cbiAgICAgIC8vICAgICA8cmV0cnlfYWZ0ZXI+OiA8Y2F0ZWdvcmllcz46IDxzY29wZT46IDxyZWFzb25fY29kZT5cbiAgICAgIC8vIHdoZXJlXG4gICAgICAvLyAgICAgPHJldHJ5X2FmdGVyPiBpcyBhIGRlbGF5IGluIG1zXG4gICAgICAvLyAgICAgPGNhdGVnb3JpZXM+IGlzIHRoZSBldmVudCB0eXBlKHMpIChlcnJvciwgdHJhbnNhY3Rpb24sIGV0YykgYmVpbmcgcmF0ZSBsaW1pdGVkIGFuZCBpcyBvZiB0aGUgZm9ybVxuICAgICAgLy8gICAgICAgICA8Y2F0ZWdvcnk+OzxjYXRlZ29yeT47Li4uXG4gICAgICAvLyAgICAgPHNjb3BlPiBpcyB3aGF0J3MgYmVpbmcgbGltaXRlZCAob3JnLCBwcm9qZWN0LCBvciBrZXkpIC0gaWdub3JlZCBieSBTREtcbiAgICAgIC8vICAgICA8cmVhc29uX2NvZGU+IGlzIGFuIGFyYml0cmFyeSBzdHJpbmcgbGlrZSBcIm9yZ19xdW90YVwiIC0gaWdub3JlZCBieSBTREtcbiAgICAgIGZvciAoY29uc3QgbGltaXQgb2YgcmxIZWFkZXIudHJpbSgpLnNwbGl0KCcsJykpIHtcbiAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IGxpbWl0LnNwbGl0KCc6JywgMik7XG4gICAgICAgIGNvbnN0IGhlYWRlckRlbGF5ID0gcGFyc2VJbnQocGFyYW1ldGVyc1swXSwgMTApO1xuICAgICAgICBjb25zdCBkZWxheSA9ICghaXNOYU4oaGVhZGVyRGVsYXkpID8gaGVhZGVyRGVsYXkgOiA2MCkgKiAxMDAwOyAvLyA2MHNlYyBkZWZhdWx0XG4gICAgICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgKHBhcmFtZXRlcnNbMV0gJiYgcGFyYW1ldGVyc1sxXS5zcGxpdCgnOycpKSB8fCBbJ2FsbCddKSB7XG4gICAgICAgICAgLy8gY2F0ZWdvcmllc0FsbG93ZWQgaXMgYWRkZWQgaGVyZSB0byBlbnN1cmUgd2UgYXJlIG9ubHkgc3RvcmluZyByYXRlIGxpbWl0cyBmb3IgY2F0ZWdvcmllcyB3ZSBzdXBwb3J0IGluIHRoaXNcbiAgICAgICAgICAvLyBzZGsgYW5kIGFueSBjYXRlZ29yaWVzIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgd2lsbCBub3QgYmUgYWRkZWQgcmVkdW5kYW50bHkgdG8gdGhlIHJhdGVMaW1pdHMgb2JqZWN0XG4gICAgICAgICAgY29uc3QgY2F0ZWdvcmllc0FsbG93ZWQgPSBbXG4gICAgICAgICAgICAuLi4oT2JqZWN0LmtleXMoQ0FURUdPUllfTUFQUElORykgYXMgW1NlbnRyeVJlcXVlc3RUeXBlXSkubWFwKGsgPT4gQ0FURUdPUllfTUFQUElOR1trXSksXG4gICAgICAgICAgICAnYWxsJyxcbiAgICAgICAgICBdO1xuICAgICAgICAgIGlmIChjYXRlZ29yaWVzQWxsb3dlZC5pbmNsdWRlcyhjYXRlZ29yeSkpIHRoaXMuX3JhdGVMaW1pdHNbY2F0ZWdvcnldID0gbmV3IERhdGUobm93ICsgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHJhSGVhZGVyKSB7XG4gICAgICB0aGlzLl9yYXRlTGltaXRzLmFsbCA9IG5ldyBEYXRlKG5vdyArIHBhcnNlUmV0cnlBZnRlckhlYWRlcihub3csIHJhSGVhZGVyKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBfc2VuZChcbiAgICBzZW50cnlSZXF1ZXN0OiBTZW50cnlSZXF1ZXN0LFxuICAgIG9yaWdpbmFsUGF5bG9hZD86IEV2ZW50IHwgU2Vzc2lvbiB8IFNlc3Npb25BZ2dyZWdhdGVzLFxuICApOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgaWYgKCF0aGlzLm1vZHVsZSkge1xuICAgICAgdGhyb3cgbmV3IFNlbnRyeUVycm9yKCdObyBtb2R1bGUgYXZhaWxhYmxlJyk7XG4gICAgfVxuICAgIGlmIChvcmlnaW5hbFBheWxvYWQgJiYgdGhpcy5faXNSYXRlTGltaXRlZChzZW50cnlSZXF1ZXN0LnR5cGUpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qoe1xuICAgICAgICBwYXlsb2FkOiBvcmlnaW5hbFBheWxvYWQsXG4gICAgICAgIHR5cGU6IHNlbnRyeVJlcXVlc3QudHlwZSxcbiAgICAgICAgcmVhc29uOiBgVHJhbnNwb3J0IGZvciAke3NlbnRyeVJlcXVlc3QudHlwZX0gcmVxdWVzdHMgbG9ja2VkIHRpbGwgJHt0aGlzLl9kaXNhYmxlZFVudGlsKFxuICAgICAgICAgIHNlbnRyeVJlcXVlc3QudHlwZSxcbiAgICAgICAgKX0gZHVlIHRvIHRvbyBtYW55IHJlcXVlc3RzLmAsXG4gICAgICAgIHN0YXR1czogNDI5LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5hZGQoXG4gICAgICAoKSA9PlxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5tb2R1bGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTZW50cnlFcnJvcignTm8gbW9kdWxlIGF2YWlsYWJsZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fZ2V0UmVxdWVzdE9wdGlvbnModGhpcy51cmxQYXJzZXIoc2VudHJ5UmVxdWVzdC51cmwpKTtcbiAgICAgICAgICBjb25zdCByZXEgPSB0aGlzLm1vZHVsZS5yZXF1ZXN0KG9wdGlvbnMsIHJlcyA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gcmVzLnN0YXR1c0NvZGUgfHwgNTAwO1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzID0gU3RhdHVzLmZyb21IdHRwQ29kZShzdGF0dXNDb2RlKTtcblxuICAgICAgICAgICAgcmVzLnNldEVuY29kaW5nKCd1dGY4Jyk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogXCJLZXktdmFsdWUgcGFpcnMgb2YgaGVhZGVyIG5hbWVzIGFuZCB2YWx1ZXMuIEhlYWRlciBuYW1lcyBhcmUgbG93ZXItY2FzZWQuXCJcbiAgICAgICAgICAgICAqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGxldCByZXRyeUFmdGVySGVhZGVyID0gcmVzLmhlYWRlcnMgPyByZXMuaGVhZGVyc1sncmV0cnktYWZ0ZXInXSA6ICcnO1xuICAgICAgICAgICAgcmV0cnlBZnRlckhlYWRlciA9IChBcnJheS5pc0FycmF5KHJldHJ5QWZ0ZXJIZWFkZXIpID8gcmV0cnlBZnRlckhlYWRlclswXSA6IHJldHJ5QWZ0ZXJIZWFkZXIpIGFzIHN0cmluZztcblxuICAgICAgICAgICAgbGV0IHJsSGVhZGVyID0gcmVzLmhlYWRlcnMgPyByZXMuaGVhZGVyc1sneC1zZW50cnktcmF0ZS1saW1pdHMnXSA6ICcnO1xuICAgICAgICAgICAgcmxIZWFkZXIgPSAoQXJyYXkuaXNBcnJheShybEhlYWRlcikgPyBybEhlYWRlclswXSA6IHJsSGVhZGVyKSBhcyBzdHJpbmc7XG5cbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICd4LXNlbnRyeS1yYXRlLWxpbWl0cyc6IHJsSGVhZGVyLFxuICAgICAgICAgICAgICAncmV0cnktYWZ0ZXInOiByZXRyeUFmdGVySGVhZGVyLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbGltaXRlZCA9IHRoaXMuX2hhbmRsZVJhdGVMaW1pdChoZWFkZXJzKTtcbiAgICAgICAgICAgIGlmIChsaW1pdGVkKVxuICAgICAgICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICAgICAgICBgVG9vIG1hbnkgJHtzZW50cnlSZXF1ZXN0LnR5cGV9IHJlcXVlc3RzLCBiYWNraW5nIG9mZiB1bnRpbDogJHt0aGlzLl9kaXNhYmxlZFVudGlsKFxuICAgICAgICAgICAgICAgICAgc2VudHJ5UmVxdWVzdC50eXBlLFxuICAgICAgICAgICAgICAgICl9YCxcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gU3RhdHVzLlN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh7IHN0YXR1cyB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxldCByZWplY3Rpb25NZXNzYWdlID0gYEhUVFAgRXJyb3IgKCR7c3RhdHVzQ29kZX0pYDtcbiAgICAgICAgICAgICAgaWYgKHJlcy5oZWFkZXJzICYmIHJlcy5oZWFkZXJzWyd4LXNlbnRyeS1lcnJvciddKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0aW9uTWVzc2FnZSArPSBgOiAke3Jlcy5oZWFkZXJzWyd4LXNlbnRyeS1lcnJvciddfWA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVqZWN0KG5ldyBTZW50cnlFcnJvcihyZWplY3Rpb25NZXNzYWdlKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEZvcmNlIHRoZSBzb2NrZXQgdG8gZHJhaW5cbiAgICAgICAgICAgIHJlcy5vbignZGF0YScsICgpID0+IHtcbiAgICAgICAgICAgICAgLy8gRHJhaW5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgIC8vIERyYWluXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXEub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgICByZXEuZW5kKHNlbnRyeVJlcXVlc3QuYm9keSk7XG4gICAgICAgIH0pLFxuICAgICk7XG4gIH1cbn1cbiIsICIvKipcbiAqIEhlbHBlcnMuXG4gKi9cblxudmFyIHMgPSAxMDAwO1xudmFyIG0gPSBzICogNjA7XG52YXIgaCA9IG0gKiA2MDtcbnZhciBkID0gaCAqIDI0O1xudmFyIHcgPSBkICogNztcbnZhciB5ID0gZCAqIDM2NS4yNTtcblxuLyoqXG4gKiBQYXJzZSBvciBmb3JtYXQgdGhlIGdpdmVuIGB2YWxgLlxuICpcbiAqIE9wdGlvbnM6XG4gKlxuICogIC0gYGxvbmdgIHZlcmJvc2UgZm9ybWF0dGluZyBbZmFsc2VdXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSB2YWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aHJvdyBhbiBlcnJvciBpZiB2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIG51bWJlclxuICogQHJldHVybiB7U3RyaW5nfE51bWJlcn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih2YWwsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbDtcbiAgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIHZhbC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHBhcnNlKHZhbCk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodmFsKSkge1xuICAgIHJldHVybiBvcHRpb25zLmxvbmcgPyBmbXRMb25nKHZhbCkgOiBmbXRTaG9ydCh2YWwpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAndmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBudW1iZXIuIHZhbD0nICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KHZhbClcbiAgKTtcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIGBzdHJgIGFuZCByZXR1cm4gbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHN0ci5sZW5ndGggPiAxMDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG1hdGNoID0gL14oLT8oPzpcXGQrKT9cXC4/XFxkKykgKihtaWxsaXNlY29uZHM/fG1zZWNzP3xtc3xzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHdlZWtzP3x3fHllYXJzP3x5cnM/fHkpPyQvaS5leGVjKFxuICAgIHN0clxuICApO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBuID0gcGFyc2VGbG9hdChtYXRjaFsxXSk7XG4gIHZhciB0eXBlID0gKG1hdGNoWzJdIHx8ICdtcycpLnRvTG93ZXJDYXNlKCk7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3llYXJzJzpcbiAgICBjYXNlICd5ZWFyJzpcbiAgICBjYXNlICd5cnMnOlxuICAgIGNhc2UgJ3lyJzpcbiAgICBjYXNlICd5JzpcbiAgICAgIHJldHVybiBuICogeTtcbiAgICBjYXNlICd3ZWVrcyc6XG4gICAgY2FzZSAnd2Vlayc6XG4gICAgY2FzZSAndyc6XG4gICAgICByZXR1cm4gbiAqIHc7XG4gICAgY2FzZSAnZGF5cyc6XG4gICAgY2FzZSAnZGF5JzpcbiAgICBjYXNlICdkJzpcbiAgICAgIHJldHVybiBuICogZDtcbiAgICBjYXNlICdob3Vycyc6XG4gICAgY2FzZSAnaG91cic6XG4gICAgY2FzZSAnaHJzJzpcbiAgICBjYXNlICdocic6XG4gICAgY2FzZSAnaCc6XG4gICAgICByZXR1cm4gbiAqIGg7XG4gICAgY2FzZSAnbWludXRlcyc6XG4gICAgY2FzZSAnbWludXRlJzpcbiAgICBjYXNlICdtaW5zJzpcbiAgICBjYXNlICdtaW4nOlxuICAgIGNhc2UgJ20nOlxuICAgICAgcmV0dXJuIG4gKiBtO1xuICAgIGNhc2UgJ3NlY29uZHMnOlxuICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgY2FzZSAnc2Vjcyc6XG4gICAgY2FzZSAnc2VjJzpcbiAgICBjYXNlICdzJzpcbiAgICAgIHJldHVybiBuICogcztcbiAgICBjYXNlICdtaWxsaXNlY29uZHMnOlxuICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICBjYXNlICdtc2Vjcyc6XG4gICAgY2FzZSAnbXNlYyc6XG4gICAgY2FzZSAnbXMnOlxuICAgICAgcmV0dXJuIG47XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBTaG9ydCBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRTaG9ydChtcykge1xuICB2YXIgbXNBYnMgPSBNYXRoLmFicyhtcyk7XG4gIGlmIChtc0FicyA+PSBkKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBkKSArICdkJztcbiAgfVxuICBpZiAobXNBYnMgPj0gaCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gaCkgKyAnaCc7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG0pICsgJ20nO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBzKSArICdzJztcbiAgfVxuICByZXR1cm4gbXMgKyAnbXMnO1xufVxuXG4vKipcbiAqIExvbmcgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZm10TG9uZyhtcykge1xuICB2YXIgbXNBYnMgPSBNYXRoLmFicyhtcyk7XG4gIGlmIChtc0FicyA+PSBkKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGQsICdkYXknKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gaCkge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBoLCAnaG91cicpO1xuICB9XG4gIGlmIChtc0FicyA+PSBtKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIG0sICdtaW51dGUnKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gcykge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBzLCAnc2Vjb25kJyk7XG4gIH1cbiAgcmV0dXJuIG1zICsgJyBtcyc7XG59XG5cbi8qKlxuICogUGx1cmFsaXphdGlvbiBoZWxwZXIuXG4gKi9cblxuZnVuY3Rpb24gcGx1cmFsKG1zLCBtc0FicywgbiwgbmFtZSkge1xuICB2YXIgaXNQbHVyYWwgPSBtc0FicyA+PSBuICogMS41O1xuICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG4pICsgJyAnICsgbmFtZSArIChpc1BsdXJhbCA/ICdzJyA6ICcnKTtcbn1cbiIsICJcbi8qKlxuICogVGhpcyBpcyB0aGUgY29tbW9uIGxvZ2ljIGZvciBib3RoIHRoZSBOb2RlLmpzIGFuZCB3ZWIgYnJvd3NlclxuICogaW1wbGVtZW50YXRpb25zIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5mdW5jdGlvbiBzZXR1cChlbnYpIHtcblx0Y3JlYXRlRGVidWcuZGVidWcgPSBjcmVhdGVEZWJ1Zztcblx0Y3JlYXRlRGVidWcuZGVmYXVsdCA9IGNyZWF0ZURlYnVnO1xuXHRjcmVhdGVEZWJ1Zy5jb2VyY2UgPSBjb2VyY2U7XG5cdGNyZWF0ZURlYnVnLmRpc2FibGUgPSBkaXNhYmxlO1xuXHRjcmVhdGVEZWJ1Zy5lbmFibGUgPSBlbmFibGU7XG5cdGNyZWF0ZURlYnVnLmVuYWJsZWQgPSBlbmFibGVkO1xuXHRjcmVhdGVEZWJ1Zy5odW1hbml6ZSA9IHJlcXVpcmUoJ21zJyk7XG5cdGNyZWF0ZURlYnVnLmRlc3Ryb3kgPSBkZXN0cm95O1xuXG5cdE9iamVjdC5rZXlzKGVudikuZm9yRWFjaChrZXkgPT4ge1xuXHRcdGNyZWF0ZURlYnVnW2tleV0gPSBlbnZba2V5XTtcblx0fSk7XG5cblx0LyoqXG5cdCogVGhlIGN1cnJlbnRseSBhY3RpdmUgZGVidWcgbW9kZSBuYW1lcywgYW5kIG5hbWVzIHRvIHNraXAuXG5cdCovXG5cblx0Y3JlYXRlRGVidWcubmFtZXMgPSBbXTtcblx0Y3JlYXRlRGVidWcuc2tpcHMgPSBbXTtcblxuXHQvKipcblx0KiBNYXAgb2Ygc3BlY2lhbCBcIiVuXCIgaGFuZGxpbmcgZnVuY3Rpb25zLCBmb3IgdGhlIGRlYnVnIFwiZm9ybWF0XCIgYXJndW1lbnQuXG5cdCpcblx0KiBWYWxpZCBrZXkgbmFtZXMgYXJlIGEgc2luZ2xlLCBsb3dlciBvciB1cHBlci1jYXNlIGxldHRlciwgaS5lLiBcIm5cIiBhbmQgXCJOXCIuXG5cdCovXG5cdGNyZWF0ZURlYnVnLmZvcm1hdHRlcnMgPSB7fTtcblxuXHQvKipcblx0KiBTZWxlY3RzIGEgY29sb3IgZm9yIGEgZGVidWcgbmFtZXNwYWNlXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHN0cmluZyBmb3IgdGhlIGRlYnVnIGluc3RhbmNlIHRvIGJlIGNvbG9yZWRcblx0KiBAcmV0dXJuIHtOdW1iZXJ8U3RyaW5nfSBBbiBBTlNJIGNvbG9yIGNvZGUgZm9yIHRoZSBnaXZlbiBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gc2VsZWN0Q29sb3IobmFtZXNwYWNlKSB7XG5cdFx0bGV0IGhhc2ggPSAwO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lc3BhY2UubGVuZ3RoOyBpKyspIHtcblx0XHRcdGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIG5hbWVzcGFjZS5jaGFyQ29kZUF0KGkpO1xuXHRcdFx0aGFzaCB8PSAwOyAvLyBDb252ZXJ0IHRvIDMyYml0IGludGVnZXJcblx0XHR9XG5cblx0XHRyZXR1cm4gY3JlYXRlRGVidWcuY29sb3JzW01hdGguYWJzKGhhc2gpICUgY3JlYXRlRGVidWcuY29sb3JzLmxlbmd0aF07XG5cdH1cblx0Y3JlYXRlRGVidWcuc2VsZWN0Q29sb3IgPSBzZWxlY3RDb2xvcjtcblxuXHQvKipcblx0KiBDcmVhdGUgYSBkZWJ1Z2dlciB3aXRoIHRoZSBnaXZlbiBgbmFtZXNwYWNlYC5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAcmV0dXJuIHtGdW5jdGlvbn1cblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBjcmVhdGVEZWJ1ZyhuYW1lc3BhY2UpIHtcblx0XHRsZXQgcHJldlRpbWU7XG5cdFx0bGV0IGVuYWJsZU92ZXJyaWRlID0gbnVsbDtcblx0XHRsZXQgbmFtZXNwYWNlc0NhY2hlO1xuXHRcdGxldCBlbmFibGVkQ2FjaGU7XG5cblx0XHRmdW5jdGlvbiBkZWJ1ZyguLi5hcmdzKSB7XG5cdFx0XHQvLyBEaXNhYmxlZD9cblx0XHRcdGlmICghZGVidWcuZW5hYmxlZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNlbGYgPSBkZWJ1ZztcblxuXHRcdFx0Ly8gU2V0IGBkaWZmYCB0aW1lc3RhbXBcblx0XHRcdGNvbnN0IGN1cnIgPSBOdW1iZXIobmV3IERhdGUoKSk7XG5cdFx0XHRjb25zdCBtcyA9IGN1cnIgLSAocHJldlRpbWUgfHwgY3Vycik7XG5cdFx0XHRzZWxmLmRpZmYgPSBtcztcblx0XHRcdHNlbGYucHJldiA9IHByZXZUaW1lO1xuXHRcdFx0c2VsZi5jdXJyID0gY3Vycjtcblx0XHRcdHByZXZUaW1lID0gY3VycjtcblxuXHRcdFx0YXJnc1swXSA9IGNyZWF0ZURlYnVnLmNvZXJjZShhcmdzWzBdKTtcblxuXHRcdFx0aWYgKHR5cGVvZiBhcmdzWzBdICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHQvLyBBbnl0aGluZyBlbHNlIGxldCdzIGluc3BlY3Qgd2l0aCAlT1xuXHRcdFx0XHRhcmdzLnVuc2hpZnQoJyVPJyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFwcGx5IGFueSBgZm9ybWF0dGVyc2AgdHJhbnNmb3JtYXRpb25zXG5cdFx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdFx0YXJnc1swXSA9IGFyZ3NbMF0ucmVwbGFjZSgvJShbYS16QS1aJV0pL2csIChtYXRjaCwgZm9ybWF0KSA9PiB7XG5cdFx0XHRcdC8vIElmIHdlIGVuY291bnRlciBhbiBlc2NhcGVkICUgdGhlbiBkb24ndCBpbmNyZWFzZSB0aGUgYXJyYXkgaW5kZXhcblx0XHRcdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRcdFx0cmV0dXJuICclJztcblx0XHRcdFx0fVxuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRjb25zdCBmb3JtYXR0ZXIgPSBjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzW2Zvcm1hdF07XG5cdFx0XHRcdGlmICh0eXBlb2YgZm9ybWF0dGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsID0gYXJnc1tpbmRleF07XG5cdFx0XHRcdFx0bWF0Y2ggPSBmb3JtYXR0ZXIuY2FsbChzZWxmLCB2YWwpO1xuXG5cdFx0XHRcdFx0Ly8gTm93IHdlIG5lZWQgdG8gcmVtb3ZlIGBhcmdzW2luZGV4XWAgc2luY2UgaXQncyBpbmxpbmVkIGluIHRoZSBgZm9ybWF0YFxuXHRcdFx0XHRcdGFyZ3Muc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdFx0XHRpbmRleC0tO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBtYXRjaDtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBBcHBseSBlbnYtc3BlY2lmaWMgZm9ybWF0dGluZyAoY29sb3JzLCBldGMuKVxuXHRcdFx0Y3JlYXRlRGVidWcuZm9ybWF0QXJncy5jYWxsKHNlbGYsIGFyZ3MpO1xuXG5cdFx0XHRjb25zdCBsb2dGbiA9IHNlbGYubG9nIHx8IGNyZWF0ZURlYnVnLmxvZztcblx0XHRcdGxvZ0ZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXHRcdH1cblxuXHRcdGRlYnVnLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcblx0XHRkZWJ1Zy51c2VDb2xvcnMgPSBjcmVhdGVEZWJ1Zy51c2VDb2xvcnMoKTtcblx0XHRkZWJ1Zy5jb2xvciA9IGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yKG5hbWVzcGFjZSk7XG5cdFx0ZGVidWcuZXh0ZW5kID0gZXh0ZW5kO1xuXHRcdGRlYnVnLmRlc3Ryb3kgPSBjcmVhdGVEZWJ1Zy5kZXN0cm95OyAvLyBYWFggVGVtcG9yYXJ5LiBXaWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkZWJ1ZywgJ2VuYWJsZWQnLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcblx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRpZiAoZW5hYmxlT3ZlcnJpZGUgIT09IG51bGwpIHtcblx0XHRcdFx0XHRyZXR1cm4gZW5hYmxlT3ZlcnJpZGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG5hbWVzcGFjZXNDYWNoZSAhPT0gY3JlYXRlRGVidWcubmFtZXNwYWNlcykge1xuXHRcdFx0XHRcdG5hbWVzcGFjZXNDYWNoZSA9IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXM7XG5cdFx0XHRcdFx0ZW5hYmxlZENhY2hlID0gY3JlYXRlRGVidWcuZW5hYmxlZChuYW1lc3BhY2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVuYWJsZWRDYWNoZTtcblx0XHRcdH0sXG5cdFx0XHRzZXQ6IHYgPT4ge1xuXHRcdFx0XHRlbmFibGVPdmVycmlkZSA9IHY7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBFbnYtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbG9naWMgZm9yIGRlYnVnIGluc3RhbmNlc1xuXHRcdGlmICh0eXBlb2YgY3JlYXRlRGVidWcuaW5pdCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Y3JlYXRlRGVidWcuaW5pdChkZWJ1Zyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlYnVnO1xuXHR9XG5cblx0ZnVuY3Rpb24gZXh0ZW5kKG5hbWVzcGFjZSwgZGVsaW1pdGVyKSB7XG5cdFx0Y29uc3QgbmV3RGVidWcgPSBjcmVhdGVEZWJ1Zyh0aGlzLm5hbWVzcGFjZSArICh0eXBlb2YgZGVsaW1pdGVyID09PSAndW5kZWZpbmVkJyA/ICc6JyA6IGRlbGltaXRlcikgKyBuYW1lc3BhY2UpO1xuXHRcdG5ld0RlYnVnLmxvZyA9IHRoaXMubG9nO1xuXHRcdHJldHVybiBuZXdEZWJ1Zztcblx0fVxuXG5cdC8qKlxuXHQqIEVuYWJsZXMgYSBkZWJ1ZyBtb2RlIGJ5IG5hbWVzcGFjZXMuIFRoaXMgY2FuIGluY2x1ZGUgbW9kZXNcblx0KiBzZXBhcmF0ZWQgYnkgYSBjb2xvbiBhbmQgd2lsZGNhcmRzLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBlbmFibGUobmFtZXNwYWNlcykge1xuXHRcdGNyZWF0ZURlYnVnLnNhdmUobmFtZXNwYWNlcyk7XG5cdFx0Y3JlYXRlRGVidWcubmFtZXNwYWNlcyA9IG5hbWVzcGFjZXM7XG5cblx0XHRjcmVhdGVEZWJ1Zy5uYW1lcyA9IFtdO1xuXHRcdGNyZWF0ZURlYnVnLnNraXBzID0gW107XG5cblx0XHRsZXQgaTtcblx0XHRjb25zdCBzcGxpdCA9ICh0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycgPyBuYW1lc3BhY2VzIDogJycpLnNwbGl0KC9bXFxzLF0rLyk7XG5cdFx0Y29uc3QgbGVuID0gc3BsaXQubGVuZ3RoO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoIXNwbGl0W2ldKSB7XG5cdFx0XHRcdC8vIGlnbm9yZSBlbXB0eSBzdHJpbmdzXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRuYW1lc3BhY2VzID0gc3BsaXRbaV0ucmVwbGFjZSgvXFwqL2csICcuKj8nKTtcblxuXHRcdFx0aWYgKG5hbWVzcGFjZXNbMF0gPT09ICctJykge1xuXHRcdFx0XHRjcmVhdGVEZWJ1Zy5za2lwcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcy5zdWJzdHIoMSkgKyAnJCcpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNyZWF0ZURlYnVnLm5hbWVzLnB1c2gobmV3IFJlZ0V4cCgnXicgKyBuYW1lc3BhY2VzICsgJyQnKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCogRGlzYWJsZSBkZWJ1ZyBvdXRwdXQuXG5cdCpcblx0KiBAcmV0dXJuIHtTdHJpbmd9IG5hbWVzcGFjZXNcblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBkaXNhYmxlKCkge1xuXHRcdGNvbnN0IG5hbWVzcGFjZXMgPSBbXG5cdFx0XHQuLi5jcmVhdGVEZWJ1Zy5uYW1lcy5tYXAodG9OYW1lc3BhY2UpLFxuXHRcdFx0Li4uY3JlYXRlRGVidWcuc2tpcHMubWFwKHRvTmFtZXNwYWNlKS5tYXAobmFtZXNwYWNlID0+ICctJyArIG5hbWVzcGFjZSlcblx0XHRdLmpvaW4oJywnKTtcblx0XHRjcmVhdGVEZWJ1Zy5lbmFibGUoJycpO1xuXHRcdHJldHVybiBuYW1lc3BhY2VzO1xuXHR9XG5cblx0LyoqXG5cdCogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBtb2RlIG5hbWUgaXMgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVcblx0KiBAcmV0dXJuIHtCb29sZWFufVxuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGVuYWJsZWQobmFtZSkge1xuXHRcdGlmIChuYW1lW25hbWUubGVuZ3RoIC0gMV0gPT09ICcqJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0bGV0IGk7XG5cdFx0bGV0IGxlbjtcblxuXHRcdGZvciAoaSA9IDAsIGxlbiA9IGNyZWF0ZURlYnVnLnNraXBzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoY3JlYXRlRGVidWcuc2tpcHNbaV0udGVzdChuYW1lKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcubmFtZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChjcmVhdGVEZWJ1Zy5uYW1lc1tpXS50ZXN0KG5hbWUpKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQqIENvbnZlcnQgcmVnZXhwIHRvIG5hbWVzcGFjZVxuXHQqXG5cdCogQHBhcmFtIHtSZWdFeHB9IHJlZ3hlcFxuXHQqIEByZXR1cm4ge1N0cmluZ30gbmFtZXNwYWNlXG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIHRvTmFtZXNwYWNlKHJlZ2V4cCkge1xuXHRcdHJldHVybiByZWdleHAudG9TdHJpbmcoKVxuXHRcdFx0LnN1YnN0cmluZygyLCByZWdleHAudG9TdHJpbmcoKS5sZW5ndGggLSAyKVxuXHRcdFx0LnJlcGxhY2UoL1xcLlxcKlxcPyQvLCAnKicpO1xuXHR9XG5cblx0LyoqXG5cdCogQ29lcmNlIGB2YWxgLlxuXHQqXG5cdCogQHBhcmFtIHtNaXhlZH0gdmFsXG5cdCogQHJldHVybiB7TWl4ZWR9XG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIGNvZXJjZSh2YWwpIHtcblx0XHRpZiAodmFsIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRcdHJldHVybiB2YWwuc3RhY2sgfHwgdmFsLm1lc3NhZ2U7XG5cdFx0fVxuXHRcdHJldHVybiB2YWw7XG5cdH1cblxuXHQvKipcblx0KiBYWFggRE8gTk9UIFVTRS4gVGhpcyBpcyBhIHRlbXBvcmFyeSBzdHViIGZ1bmN0aW9uLlxuXHQqIFhYWCBJdCBXSUxMIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cblx0Ki9cblx0ZnVuY3Rpb24gZGVzdHJveSgpIHtcblx0XHRjb25zb2xlLndhcm4oJ0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nKTtcblx0fVxuXG5cdGNyZWF0ZURlYnVnLmVuYWJsZShjcmVhdGVEZWJ1Zy5sb2FkKCkpO1xuXG5cdHJldHVybiBjcmVhdGVEZWJ1Zztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXR1cDtcbiIsICIvKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSB3ZWIgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLnN0b3JhZ2UgPSBsb2NhbHN0b3JhZ2UoKTtcbmV4cG9ydHMuZGVzdHJveSA9ICgoKSA9PiB7XG5cdGxldCB3YXJuZWQgPSBmYWxzZTtcblxuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGlmICghd2FybmVkKSB7XG5cdFx0XHR3YXJuZWQgPSB0cnVlO1xuXHRcdFx0Y29uc29sZS53YXJuKCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJyk7XG5cdFx0fVxuXHR9O1xufSkoKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbXG5cdCcjMDAwMENDJyxcblx0JyMwMDAwRkYnLFxuXHQnIzAwMzNDQycsXG5cdCcjMDAzM0ZGJyxcblx0JyMwMDY2Q0MnLFxuXHQnIzAwNjZGRicsXG5cdCcjMDA5OUNDJyxcblx0JyMwMDk5RkYnLFxuXHQnIzAwQ0MwMCcsXG5cdCcjMDBDQzMzJyxcblx0JyMwMENDNjYnLFxuXHQnIzAwQ0M5OScsXG5cdCcjMDBDQ0NDJyxcblx0JyMwMENDRkYnLFxuXHQnIzMzMDBDQycsXG5cdCcjMzMwMEZGJyxcblx0JyMzMzMzQ0MnLFxuXHQnIzMzMzNGRicsXG5cdCcjMzM2NkNDJyxcblx0JyMzMzY2RkYnLFxuXHQnIzMzOTlDQycsXG5cdCcjMzM5OUZGJyxcblx0JyMzM0NDMDAnLFxuXHQnIzMzQ0MzMycsXG5cdCcjMzNDQzY2Jyxcblx0JyMzM0NDOTknLFxuXHQnIzMzQ0NDQycsXG5cdCcjMzNDQ0ZGJyxcblx0JyM2NjAwQ0MnLFxuXHQnIzY2MDBGRicsXG5cdCcjNjYzM0NDJyxcblx0JyM2NjMzRkYnLFxuXHQnIzY2Q0MwMCcsXG5cdCcjNjZDQzMzJyxcblx0JyM5OTAwQ0MnLFxuXHQnIzk5MDBGRicsXG5cdCcjOTkzM0NDJyxcblx0JyM5OTMzRkYnLFxuXHQnIzk5Q0MwMCcsXG5cdCcjOTlDQzMzJyxcblx0JyNDQzAwMDAnLFxuXHQnI0NDMDAzMycsXG5cdCcjQ0MwMDY2Jyxcblx0JyNDQzAwOTknLFxuXHQnI0NDMDBDQycsXG5cdCcjQ0MwMEZGJyxcblx0JyNDQzMzMDAnLFxuXHQnI0NDMzMzMycsXG5cdCcjQ0MzMzY2Jyxcblx0JyNDQzMzOTknLFxuXHQnI0NDMzNDQycsXG5cdCcjQ0MzM0ZGJyxcblx0JyNDQzY2MDAnLFxuXHQnI0NDNjYzMycsXG5cdCcjQ0M5OTAwJyxcblx0JyNDQzk5MzMnLFxuXHQnI0NDQ0MwMCcsXG5cdCcjQ0NDQzMzJyxcblx0JyNGRjAwMDAnLFxuXHQnI0ZGMDAzMycsXG5cdCcjRkYwMDY2Jyxcblx0JyNGRjAwOTknLFxuXHQnI0ZGMDBDQycsXG5cdCcjRkYwMEZGJyxcblx0JyNGRjMzMDAnLFxuXHQnI0ZGMzMzMycsXG5cdCcjRkYzMzY2Jyxcblx0JyNGRjMzOTknLFxuXHQnI0ZGMzNDQycsXG5cdCcjRkYzM0ZGJyxcblx0JyNGRjY2MDAnLFxuXHQnI0ZGNjYzMycsXG5cdCcjRkY5OTAwJyxcblx0JyNGRjk5MzMnLFxuXHQnI0ZGQ0MwMCcsXG5cdCcjRkZDQzMzJ1xuXTtcblxuLyoqXG4gKiBDdXJyZW50bHkgb25seSBXZWJLaXQtYmFzZWQgV2ViIEluc3BlY3RvcnMsIEZpcmVmb3ggPj0gdjMxLFxuICogYW5kIHRoZSBGaXJlYnVnIGV4dGVuc2lvbiAoYW55IEZpcmVmb3ggdmVyc2lvbikgYXJlIGtub3duXG4gKiB0byBzdXBwb3J0IFwiJWNcIiBDU1MgY3VzdG9taXphdGlvbnMuXG4gKlxuICogVE9ETzogYWRkIGEgYGxvY2FsU3RvcmFnZWAgdmFyaWFibGUgdG8gZXhwbGljaXRseSBlbmFibGUvZGlzYWJsZSBjb2xvcnNcbiAqL1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuXHQvLyBOQjogSW4gYW4gRWxlY3Ryb24gcHJlbG9hZCBzY3JpcHQsIGRvY3VtZW50IHdpbGwgYmUgZGVmaW5lZCBidXQgbm90IGZ1bGx5XG5cdC8vIGluaXRpYWxpemVkLiBTaW5jZSB3ZSBrbm93IHdlJ3JlIGluIENocm9tZSwgd2UnbGwganVzdCBkZXRlY3QgdGhpcyBjYXNlXG5cdC8vIGV4cGxpY2l0bHlcblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wcm9jZXNzICYmICh3aW5kb3cucHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHdpbmRvdy5wcm9jZXNzLl9fbndqcykpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIEludGVybmV0IEV4cGxvcmVyIGFuZCBFZGdlIGRvIG5vdCBzdXBwb3J0IGNvbG9ycy5cblx0aWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oZWRnZXx0cmlkZW50KVxcLyhcXGQrKS8pKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gSXMgd2Via2l0PyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xNjQ1OTYwNi8zNzY3NzNcblx0Ly8gZG9jdW1lbnQgaXMgdW5kZWZpbmVkIGluIHJlYWN0LW5hdGl2ZTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LW5hdGl2ZS9wdWxsLzE2MzJcblx0cmV0dXJuICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2UpIHx8XG5cdFx0Ly8gSXMgZmlyZWJ1Zz8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzk4MTIwLzM3Njc3M1xuXHRcdCh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUuZmlyZWJ1ZyB8fCAod2luZG93LmNvbnNvbGUuZXhjZXB0aW9uICYmIHdpbmRvdy5jb25zb2xlLnRhYmxlKSkpIHx8XG5cdFx0Ly8gSXMgZmlyZWZveCA+PSB2MzE/XG5cdFx0Ly8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Ub29scy9XZWJfQ29uc29sZSNTdHlsaW5nX21lc3NhZ2VzXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLykgJiYgcGFyc2VJbnQoUmVnRXhwLiQxLCAxMCkgPj0gMzEpIHx8XG5cdFx0Ly8gRG91YmxlIGNoZWNrIHdlYmtpdCBpbiB1c2VyQWdlbnQganVzdCBpbiBjYXNlIHdlIGFyZSBpbiBhIHdvcmtlclxuXHRcdCh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvYXBwbGV3ZWJraXRcXC8oXFxkKykvKSk7XG59XG5cbi8qKlxuICogQ29sb3JpemUgbG9nIGFyZ3VtZW50cyBpZiBlbmFibGVkLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0QXJncyhhcmdzKSB7XG5cdGFyZ3NbMF0gPSAodGhpcy51c2VDb2xvcnMgPyAnJWMnIDogJycpICtcblx0XHR0aGlzLm5hbWVzcGFjZSArXG5cdFx0KHRoaXMudXNlQ29sb3JzID8gJyAlYycgOiAnICcpICtcblx0XHRhcmdzWzBdICtcblx0XHQodGhpcy51c2VDb2xvcnMgPyAnJWMgJyA6ICcgJykgK1xuXHRcdCcrJyArIG1vZHVsZS5leHBvcnRzLmh1bWFuaXplKHRoaXMuZGlmZik7XG5cblx0aWYgKCF0aGlzLnVzZUNvbG9ycykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IGMgPSAnY29sb3I6ICcgKyB0aGlzLmNvbG9yO1xuXHRhcmdzLnNwbGljZSgxLCAwLCBjLCAnY29sb3I6IGluaGVyaXQnKTtcblxuXHQvLyBUaGUgZmluYWwgXCIlY1wiIGlzIHNvbWV3aGF0IHRyaWNreSwgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBvdGhlclxuXHQvLyBhcmd1bWVudHMgcGFzc2VkIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlICVjLCBzbyB3ZSBuZWVkIHRvXG5cdC8vIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QgaW5kZXggdG8gaW5zZXJ0IHRoZSBDU1MgaW50b1xuXHRsZXQgaW5kZXggPSAwO1xuXHRsZXQgbGFzdEMgPSAwO1xuXHRhcmdzWzBdLnJlcGxhY2UoLyVbYS16QS1aJV0vZywgbWF0Y2ggPT4ge1xuXHRcdGlmIChtYXRjaCA9PT0gJyUlJykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpbmRleCsrO1xuXHRcdGlmIChtYXRjaCA9PT0gJyVjJykge1xuXHRcdFx0Ly8gV2Ugb25seSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgKmxhc3QqICVjXG5cdFx0XHQvLyAodGhlIHVzZXIgbWF5IGhhdmUgcHJvdmlkZWQgdGhlaXIgb3duKVxuXHRcdFx0bGFzdEMgPSBpbmRleDtcblx0XHR9XG5cdH0pO1xuXG5cdGFyZ3Muc3BsaWNlKGxhc3RDLCAwLCBjKTtcbn1cblxuLyoqXG4gKiBJbnZva2VzIGBjb25zb2xlLmRlYnVnKClgIHdoZW4gYXZhaWxhYmxlLlxuICogTm8tb3Agd2hlbiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGEgXCJmdW5jdGlvblwiLlxuICogSWYgYGNvbnNvbGUuZGVidWdgIGlzIG5vdCBhdmFpbGFibGUsIGZhbGxzIGJhY2tcbiAqIHRvIGBjb25zb2xlLmxvZ2AuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuZXhwb3J0cy5sb2cgPSBjb25zb2xlLmRlYnVnIHx8IGNvbnNvbGUubG9nIHx8ICgoKSA9PiB7fSk7XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzYXZlKG5hbWVzcGFjZXMpIHtcblx0dHJ5IHtcblx0XHRpZiAobmFtZXNwYWNlcykge1xuXHRcdFx0ZXhwb3J0cy5zdG9yYWdlLnNldEl0ZW0oJ2RlYnVnJywgbmFtZXNwYWNlcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGV4cG9ydHMuc3RvcmFnZS5yZW1vdmVJdGVtKCdkZWJ1ZycpO1xuXHRcdH1cblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cbn1cblxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbG9hZCgpIHtcblx0bGV0IHI7XG5cdHRyeSB7XG5cdFx0ciA9IGV4cG9ydHMuc3RvcmFnZS5nZXRJdGVtKCdkZWJ1ZycpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxuXG5cdC8vIElmIGRlYnVnIGlzbid0IHNldCBpbiBMUywgYW5kIHdlJ3JlIGluIEVsZWN0cm9uLCB0cnkgdG8gbG9hZCAkREVCVUdcblx0aWYgKCFyICYmIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiAnZW52JyBpbiBwcm9jZXNzKSB7XG5cdFx0ciA9IHByb2Nlc3MuZW52LkRFQlVHO1xuXHR9XG5cblx0cmV0dXJuIHI7XG59XG5cbi8qKlxuICogTG9jYWxzdG9yYWdlIGF0dGVtcHRzIHRvIHJldHVybiB0aGUgbG9jYWxzdG9yYWdlLlxuICpcbiAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugc2FmYXJpIHRocm93c1xuICogd2hlbiBhIHVzZXIgZGlzYWJsZXMgY29va2llcy9sb2NhbHN0b3JhZ2VcbiAqIGFuZCB5b3UgYXR0ZW1wdCB0byBhY2Nlc3MgaXQuXG4gKlxuICogQHJldHVybiB7TG9jYWxTdG9yYWdlfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gbG9jYWxzdG9yYWdlKCkge1xuXHR0cnkge1xuXHRcdC8vIFRWTUxLaXQgKEFwcGxlIFRWIEpTIFJ1bnRpbWUpIGRvZXMgbm90IGhhdmUgYSB3aW5kb3cgb2JqZWN0LCBqdXN0IGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHRcblx0XHQvLyBUaGUgQnJvd3NlciBhbHNvIGhhcyBsb2NhbFN0b3JhZ2UgaW4gdGhlIGdsb2JhbCBjb250ZXh0LlxuXHRcdHJldHVybiBsb2NhbFN0b3JhZ2U7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb21tb24nKShleHBvcnRzKTtcblxuY29uc3Qge2Zvcm1hdHRlcnN9ID0gbW9kdWxlLmV4cG9ydHM7XG5cbi8qKlxuICogTWFwICVqIHRvIGBKU09OLnN0cmluZ2lmeSgpYCwgc2luY2Ugbm8gV2ViIEluc3BlY3RvcnMgZG8gdGhhdCBieSBkZWZhdWx0LlxuICovXG5cbmZvcm1hdHRlcnMuaiA9IGZ1bmN0aW9uICh2KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHYpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdHJldHVybiAnW1VuZXhwZWN0ZWRKU09OUGFyc2VFcnJvcl06ICcgKyBlcnJvci5tZXNzYWdlO1xuXHR9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSAoZmxhZywgYXJndiA9IHByb2Nlc3MuYXJndikgPT4ge1xuXHRjb25zdCBwcmVmaXggPSBmbGFnLnN0YXJ0c1dpdGgoJy0nKSA/ICcnIDogKGZsYWcubGVuZ3RoID09PSAxID8gJy0nIDogJy0tJyk7XG5cdGNvbnN0IHBvc2l0aW9uID0gYXJndi5pbmRleE9mKHByZWZpeCArIGZsYWcpO1xuXHRjb25zdCB0ZXJtaW5hdG9yUG9zaXRpb24gPSBhcmd2LmluZGV4T2YoJy0tJyk7XG5cdHJldHVybiBwb3NpdGlvbiAhPT0gLTEgJiYgKHRlcm1pbmF0b3JQb3NpdGlvbiA9PT0gLTEgfHwgcG9zaXRpb24gPCB0ZXJtaW5hdG9yUG9zaXRpb24pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBvcyA9IHJlcXVpcmUoJ29zJyk7XG5jb25zdCB0dHkgPSByZXF1aXJlKCd0dHknKTtcbmNvbnN0IGhhc0ZsYWcgPSByZXF1aXJlKCdoYXMtZmxhZycpO1xuXG5jb25zdCB7ZW52fSA9IHByb2Nlc3M7XG5cbmxldCBmb3JjZUNvbG9yO1xuaWYgKGhhc0ZsYWcoJ25vLWNvbG9yJykgfHxcblx0aGFzRmxhZygnbm8tY29sb3JzJykgfHxcblx0aGFzRmxhZygnY29sb3I9ZmFsc2UnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1uZXZlcicpKSB7XG5cdGZvcmNlQ29sb3IgPSAwO1xufSBlbHNlIGlmIChoYXNGbGFnKCdjb2xvcicpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9ycycpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPXRydWUnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1hbHdheXMnKSkge1xuXHRmb3JjZUNvbG9yID0gMTtcbn1cblxuaWYgKCdGT1JDRV9DT0xPUicgaW4gZW52KSB7XG5cdGlmIChlbnYuRk9SQ0VfQ09MT1IgPT09ICd0cnVlJykge1xuXHRcdGZvcmNlQ29sb3IgPSAxO1xuXHR9IGVsc2UgaWYgKGVudi5GT1JDRV9DT0xPUiA9PT0gJ2ZhbHNlJykge1xuXHRcdGZvcmNlQ29sb3IgPSAwO1xuXHR9IGVsc2Uge1xuXHRcdGZvcmNlQ29sb3IgPSBlbnYuRk9SQ0VfQ09MT1IubGVuZ3RoID09PSAwID8gMSA6IE1hdGgubWluKHBhcnNlSW50KGVudi5GT1JDRV9DT0xPUiwgMTApLCAzKTtcblx0fVxufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVMZXZlbChsZXZlbCkge1xuXHRpZiAobGV2ZWwgPT09IDApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGxldmVsLFxuXHRcdGhhc0Jhc2ljOiB0cnVlLFxuXHRcdGhhczI1NjogbGV2ZWwgPj0gMixcblx0XHRoYXMxNm06IGxldmVsID49IDNcblx0fTtcbn1cblxuZnVuY3Rpb24gc3VwcG9ydHNDb2xvcihoYXZlU3RyZWFtLCBzdHJlYW1Jc1RUWSkge1xuXHRpZiAoZm9yY2VDb2xvciA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTE2bScpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9ZnVsbCcpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9dHJ1ZWNvbG9yJykpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmIChoYXNGbGFnKCdjb2xvcj0yNTYnKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cblx0aWYgKGhhdmVTdHJlYW0gJiYgIXN0cmVhbUlzVFRZICYmIGZvcmNlQ29sb3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Y29uc3QgbWluID0gZm9yY2VDb2xvciB8fCAwO1xuXG5cdGlmIChlbnYuVEVSTSA9PT0gJ2R1bWInKSB7XG5cdFx0cmV0dXJuIG1pbjtcblx0fVxuXG5cdGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG5cdFx0Ly8gV2luZG93cyAxMCBidWlsZCAxMDU4NiBpcyB0aGUgZmlyc3QgV2luZG93cyByZWxlYXNlIHRoYXQgc3VwcG9ydHMgMjU2IGNvbG9ycy5cblx0XHQvLyBXaW5kb3dzIDEwIGJ1aWxkIDE0OTMxIGlzIHRoZSBmaXJzdCByZWxlYXNlIHRoYXQgc3VwcG9ydHMgMTZtL1RydWVDb2xvci5cblx0XHRjb25zdCBvc1JlbGVhc2UgPSBvcy5yZWxlYXNlKCkuc3BsaXQoJy4nKTtcblx0XHRpZiAoXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzBdKSA+PSAxMCAmJlxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTA1ODZcblx0XHQpIHtcblx0XHRcdHJldHVybiBOdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxNDkzMSA/IDMgOiAyO1xuXHRcdH1cblxuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDSScgaW4gZW52KSB7XG5cdFx0aWYgKFsnVFJBVklTJywgJ0NJUkNMRUNJJywgJ0FQUFZFWU9SJywgJ0dJVExBQl9DSScsICdHSVRIVUJfQUNUSU9OUycsICdCVUlMREtJVEUnXS5zb21lKHNpZ24gPT4gc2lnbiBpbiBlbnYpIHx8IGVudi5DSV9OQU1FID09PSAnY29kZXNoaXAnKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKCdURUFNQ0lUWV9WRVJTSU9OJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gL14oOVxcLigwKlsxLTldXFxkKilcXC58XFxkezIsfVxcLikvLnRlc3QoZW52LlRFQU1DSVRZX1ZFUlNJT04pID8gMSA6IDA7XG5cdH1cblxuXHRpZiAoZW52LkNPTE9SVEVSTSA9PT0gJ3RydWVjb2xvcicpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmICgnVEVSTV9QUk9HUkFNJyBpbiBlbnYpIHtcblx0XHRjb25zdCB2ZXJzaW9uID0gcGFyc2VJbnQoKGVudi5URVJNX1BST0dSQU1fVkVSU0lPTiB8fCAnJykuc3BsaXQoJy4nKVswXSwgMTApO1xuXG5cdFx0c3dpdGNoIChlbnYuVEVSTV9QUk9HUkFNKSB7XG5cdFx0XHRjYXNlICdpVGVybS5hcHAnOlxuXHRcdFx0XHRyZXR1cm4gdmVyc2lvbiA+PSAzID8gMyA6IDI7XG5cdFx0XHRjYXNlICdBcHBsZV9UZXJtaW5hbCc6XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0Ly8gTm8gZGVmYXVsdFxuXHRcdH1cblx0fVxuXG5cdGlmICgvLTI1Nihjb2xvcik/JC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoL15zY3JlZW58Xnh0ZXJtfF52dDEwMHxednQyMjB8XnJ4dnR8Y29sb3J8YW5zaXxjeWd3aW58bGludXgvaS50ZXN0KGVudi5URVJNKSkge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDT0xPUlRFUk0nIGluIGVudikge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0cmV0dXJuIG1pbjtcbn1cblxuZnVuY3Rpb24gZ2V0U3VwcG9ydExldmVsKHN0cmVhbSkge1xuXHRjb25zdCBsZXZlbCA9IHN1cHBvcnRzQ29sb3Ioc3RyZWFtLCBzdHJlYW0gJiYgc3RyZWFtLmlzVFRZKTtcblx0cmV0dXJuIHRyYW5zbGF0ZUxldmVsKGxldmVsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHN1cHBvcnRzQ29sb3I6IGdldFN1cHBvcnRMZXZlbCxcblx0c3Rkb3V0OiB0cmFuc2xhdGVMZXZlbChzdXBwb3J0c0NvbG9yKHRydWUsIHR0eS5pc2F0dHkoMSkpKSxcblx0c3RkZXJyOiB0cmFuc2xhdGVMZXZlbChzdXBwb3J0c0NvbG9yKHRydWUsIHR0eS5pc2F0dHkoMikpKVxufTtcbiIsICIvKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxuY29uc3QgdHR5ID0gcmVxdWlyZSgndHR5Jyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIE5vZGUuanMgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICovXG5cbmV4cG9ydHMuaW5pdCA9IGluaXQ7XG5leHBvcnRzLmxvZyA9IGxvZztcbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0cy5kZXN0cm95ID0gdXRpbC5kZXByZWNhdGUoXG5cdCgpID0+IHt9LFxuXHQnSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLidcbik7XG5cbi8qKlxuICogQ29sb3JzLlxuICovXG5cbmV4cG9ydHMuY29sb3JzID0gWzYsIDIsIDMsIDQsIDUsIDFdO1xuXG50cnkge1xuXHQvLyBPcHRpb25hbCBkZXBlbmRlbmN5IChhcyBpbiwgZG9lc24ndCBuZWVkIHRvIGJlIGluc3RhbGxlZCwgTk9UIGxpa2Ugb3B0aW9uYWxEZXBlbmRlbmNpZXMgaW4gcGFja2FnZS5qc29uKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG5cdGNvbnN0IHN1cHBvcnRzQ29sb3IgPSByZXF1aXJlKCdzdXBwb3J0cy1jb2xvcicpO1xuXG5cdGlmIChzdXBwb3J0c0NvbG9yICYmIChzdXBwb3J0c0NvbG9yLnN0ZGVyciB8fCBzdXBwb3J0c0NvbG9yKS5sZXZlbCA+PSAyKSB7XG5cdFx0ZXhwb3J0cy5jb2xvcnMgPSBbXG5cdFx0XHQyMCxcblx0XHRcdDIxLFxuXHRcdFx0MjYsXG5cdFx0XHQyNyxcblx0XHRcdDMyLFxuXHRcdFx0MzMsXG5cdFx0XHQzOCxcblx0XHRcdDM5LFxuXHRcdFx0NDAsXG5cdFx0XHQ0MSxcblx0XHRcdDQyLFxuXHRcdFx0NDMsXG5cdFx0XHQ0NCxcblx0XHRcdDQ1LFxuXHRcdFx0NTYsXG5cdFx0XHQ1Nyxcblx0XHRcdDYyLFxuXHRcdFx0NjMsXG5cdFx0XHQ2OCxcblx0XHRcdDY5LFxuXHRcdFx0NzQsXG5cdFx0XHQ3NSxcblx0XHRcdDc2LFxuXHRcdFx0NzcsXG5cdFx0XHQ3OCxcblx0XHRcdDc5LFxuXHRcdFx0ODAsXG5cdFx0XHQ4MSxcblx0XHRcdDkyLFxuXHRcdFx0OTMsXG5cdFx0XHQ5OCxcblx0XHRcdDk5LFxuXHRcdFx0MTEyLFxuXHRcdFx0MTEzLFxuXHRcdFx0MTI4LFxuXHRcdFx0MTI5LFxuXHRcdFx0MTM0LFxuXHRcdFx0MTM1LFxuXHRcdFx0MTQ4LFxuXHRcdFx0MTQ5LFxuXHRcdFx0MTYwLFxuXHRcdFx0MTYxLFxuXHRcdFx0MTYyLFxuXHRcdFx0MTYzLFxuXHRcdFx0MTY0LFxuXHRcdFx0MTY1LFxuXHRcdFx0MTY2LFxuXHRcdFx0MTY3LFxuXHRcdFx0MTY4LFxuXHRcdFx0MTY5LFxuXHRcdFx0MTcwLFxuXHRcdFx0MTcxLFxuXHRcdFx0MTcyLFxuXHRcdFx0MTczLFxuXHRcdFx0MTc4LFxuXHRcdFx0MTc5LFxuXHRcdFx0MTg0LFxuXHRcdFx0MTg1LFxuXHRcdFx0MTk2LFxuXHRcdFx0MTk3LFxuXHRcdFx0MTk4LFxuXHRcdFx0MTk5LFxuXHRcdFx0MjAwLFxuXHRcdFx0MjAxLFxuXHRcdFx0MjAyLFxuXHRcdFx0MjAzLFxuXHRcdFx0MjA0LFxuXHRcdFx0MjA1LFxuXHRcdFx0MjA2LFxuXHRcdFx0MjA3LFxuXHRcdFx0MjA4LFxuXHRcdFx0MjA5LFxuXHRcdFx0MjE0LFxuXHRcdFx0MjE1LFxuXHRcdFx0MjIwLFxuXHRcdFx0MjIxXG5cdFx0XTtcblx0fVxufSBjYXRjaCAoZXJyb3IpIHtcblx0Ly8gU3dhbGxvdyAtIHdlIG9ubHkgY2FyZSBpZiBgc3VwcG9ydHMtY29sb3JgIGlzIGF2YWlsYWJsZTsgaXQgZG9lc24ndCBoYXZlIHRvIGJlLlxufVxuXG4vKipcbiAqIEJ1aWxkIHVwIHRoZSBkZWZhdWx0IGBpbnNwZWN0T3B0c2Agb2JqZWN0IGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqXG4gKiAgICQgREVCVUdfQ09MT1JTPW5vIERFQlVHX0RFUFRIPTEwIERFQlVHX1NIT1dfSElEREVOPWVuYWJsZWQgbm9kZSBzY3JpcHQuanNcbiAqL1xuXG5leHBvcnRzLmluc3BlY3RPcHRzID0gT2JqZWN0LmtleXMocHJvY2Vzcy5lbnYpLmZpbHRlcihrZXkgPT4ge1xuXHRyZXR1cm4gL15kZWJ1Z18vaS50ZXN0KGtleSk7XG59KS5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG5cdC8vIENhbWVsLWNhc2Vcblx0Y29uc3QgcHJvcCA9IGtleVxuXHRcdC5zdWJzdHJpbmcoNilcblx0XHQudG9Mb3dlckNhc2UoKVxuXHRcdC5yZXBsYWNlKC9fKFthLXpdKS9nLCAoXywgaykgPT4ge1xuXHRcdFx0cmV0dXJuIGsudG9VcHBlckNhc2UoKTtcblx0XHR9KTtcblxuXHQvLyBDb2VyY2Ugc3RyaW5nIHZhbHVlIGludG8gSlMgdmFsdWVcblx0bGV0IHZhbCA9IHByb2Nlc3MuZW52W2tleV07XG5cdGlmICgvXih5ZXN8b258dHJ1ZXxlbmFibGVkKSQvaS50ZXN0KHZhbCkpIHtcblx0XHR2YWwgPSB0cnVlO1xuXHR9IGVsc2UgaWYgKC9eKG5vfG9mZnxmYWxzZXxkaXNhYmxlZCkkL2kudGVzdCh2YWwpKSB7XG5cdFx0dmFsID0gZmFsc2U7XG5cdH0gZWxzZSBpZiAodmFsID09PSAnbnVsbCcpIHtcblx0XHR2YWwgPSBudWxsO1xuXHR9IGVsc2Uge1xuXHRcdHZhbCA9IE51bWJlcih2YWwpO1xuXHR9XG5cblx0b2JqW3Byb3BdID0gdmFsO1xuXHRyZXR1cm4gb2JqO1xufSwge30pO1xuXG4vKipcbiAqIElzIHN0ZG91dCBhIFRUWT8gQ29sb3JlZCBvdXRwdXQgaXMgZW5hYmxlZCB3aGVuIGB0cnVlYC5cbiAqL1xuXG5mdW5jdGlvbiB1c2VDb2xvcnMoKSB7XG5cdHJldHVybiAnY29sb3JzJyBpbiBleHBvcnRzLmluc3BlY3RPcHRzID9cblx0XHRCb29sZWFuKGV4cG9ydHMuaW5zcGVjdE9wdHMuY29sb3JzKSA6XG5cdFx0dHR5LmlzYXR0eShwcm9jZXNzLnN0ZGVyci5mZCk7XG59XG5cbi8qKlxuICogQWRkcyBBTlNJIGNvbG9yIGVzY2FwZSBjb2RlcyBpZiBlbmFibGVkLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0QXJncyhhcmdzKSB7XG5cdGNvbnN0IHtuYW1lc3BhY2U6IG5hbWUsIHVzZUNvbG9yc30gPSB0aGlzO1xuXG5cdGlmICh1c2VDb2xvcnMpIHtcblx0XHRjb25zdCBjID0gdGhpcy5jb2xvcjtcblx0XHRjb25zdCBjb2xvckNvZGUgPSAnXFx1MDAxQlszJyArIChjIDwgOCA/IGMgOiAnODs1OycgKyBjKTtcblx0XHRjb25zdCBwcmVmaXggPSBgICAke2NvbG9yQ29kZX07MW0ke25hbWV9IFxcdTAwMUJbMG1gO1xuXG5cdFx0YXJnc1swXSA9IHByZWZpeCArIGFyZ3NbMF0uc3BsaXQoJ1xcbicpLmpvaW4oJ1xcbicgKyBwcmVmaXgpO1xuXHRcdGFyZ3MucHVzaChjb2xvckNvZGUgKyAnbSsnICsgbW9kdWxlLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKSArICdcXHUwMDFCWzBtJyk7XG5cdH0gZWxzZSB7XG5cdFx0YXJnc1swXSA9IGdldERhdGUoKSArIG5hbWUgKyAnICcgKyBhcmdzWzBdO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldERhdGUoKSB7XG5cdGlmIChleHBvcnRzLmluc3BlY3RPcHRzLmhpZGVEYXRlKSB7XG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cdHJldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgKyAnICc7XG59XG5cbi8qKlxuICogSW52b2tlcyBgdXRpbC5mb3JtYXQoKWAgd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50cyBhbmQgd3JpdGVzIHRvIHN0ZGVyci5cbiAqL1xuXG5mdW5jdGlvbiBsb2coLi4uYXJncykge1xuXHRyZXR1cm4gcHJvY2Vzcy5zdGRlcnIud3JpdGUodXRpbC5mb3JtYXQoLi4uYXJncykgKyAnXFxuJyk7XG59XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzYXZlKG5hbWVzcGFjZXMpIHtcblx0aWYgKG5hbWVzcGFjZXMpIHtcblx0XHRwcm9jZXNzLmVudi5ERUJVRyA9IG5hbWVzcGFjZXM7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gSWYgeW91IHNldCBhIHByb2Nlc3MuZW52IGZpZWxkIHRvIG51bGwgb3IgdW5kZWZpbmVkLCBpdCBnZXRzIGNhc3QgdG8gdGhlXG5cdFx0Ly8gc3RyaW5nICdudWxsJyBvciAndW5kZWZpbmVkJy4gSnVzdCBkZWxldGUgaW5zdGVhZC5cblx0XHRkZWxldGUgcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cbn1cblxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRyZXR1cm4gcHJvY2Vzcy5lbnYuREVCVUc7XG59XG5cbi8qKlxuICogSW5pdCBsb2dpYyBmb3IgYGRlYnVnYCBpbnN0YW5jZXMuXG4gKlxuICogQ3JlYXRlIGEgbmV3IGBpbnNwZWN0T3B0c2Agb2JqZWN0IGluIGNhc2UgYHVzZUNvbG9yc2AgaXMgc2V0XG4gKiBkaWZmZXJlbnRseSBmb3IgYSBwYXJ0aWN1bGFyIGBkZWJ1Z2AgaW5zdGFuY2UuXG4gKi9cblxuZnVuY3Rpb24gaW5pdChkZWJ1Zykge1xuXHRkZWJ1Zy5pbnNwZWN0T3B0cyA9IHt9O1xuXG5cdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhleHBvcnRzLmluc3BlY3RPcHRzKTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0ZGVidWcuaW5zcGVjdE9wdHNba2V5c1tpXV0gPSBleHBvcnRzLmluc3BlY3RPcHRzW2tleXNbaV1dO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb21tb24nKShleHBvcnRzKTtcblxuY29uc3Qge2Zvcm1hdHRlcnN9ID0gbW9kdWxlLmV4cG9ydHM7XG5cbi8qKlxuICogTWFwICVvIHRvIGB1dGlsLmluc3BlY3QoKWAsIGFsbCBvbiBhIHNpbmdsZSBsaW5lLlxuICovXG5cbmZvcm1hdHRlcnMubyA9IGZ1bmN0aW9uICh2KSB7XG5cdHRoaXMuaW5zcGVjdE9wdHMuY29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cdHJldHVybiB1dGlsLmluc3BlY3QodiwgdGhpcy5pbnNwZWN0T3B0cylcblx0XHQuc3BsaXQoJ1xcbicpXG5cdFx0Lm1hcChzdHIgPT4gc3RyLnRyaW0oKSlcblx0XHQuam9pbignICcpO1xufTtcblxuLyoqXG4gKiBNYXAgJU8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsb3dpbmcgbXVsdGlwbGUgbGluZXMgaWYgbmVlZGVkLlxuICovXG5cbmZvcm1hdHRlcnMuTyA9IGZ1bmN0aW9uICh2KSB7XG5cdHRoaXMuaW5zcGVjdE9wdHMuY29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cdHJldHVybiB1dGlsLmluc3BlY3QodiwgdGhpcy5pbnNwZWN0T3B0cyk7XG59O1xuIiwgIi8qKlxuICogRGV0ZWN0IEVsZWN0cm9uIHJlbmRlcmVyIC8gbndqcyBwcm9jZXNzLCB3aGljaCBpcyBub2RlLCBidXQgd2Ugc2hvdWxkXG4gKiB0cmVhdCBhcyBhIGJyb3dzZXIuXG4gKi9cblxuaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCBwcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicgfHwgcHJvY2Vzcy5icm93c2VyID09PSB0cnVlIHx8IHByb2Nlc3MuX19ud2pzKSB7XG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9icm93c2VyLmpzJyk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbm9kZS5qcycpO1xufVxuIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgImltcG9ydCB7IGV2ZW50VG9TZW50cnlSZXF1ZXN0LCBzZXNzaW9uVG9TZW50cnlSZXF1ZXN0IH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IEV2ZW50LCBSZXNwb25zZSwgU2Vzc2lvbiwgU2Vzc2lvbkFnZ3JlZ2F0ZXMsIFRyYW5zcG9ydE9wdGlvbnMgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCAqIGFzIGh0dHAgZnJvbSAnaHR0cCc7XG5cbmltcG9ydCB7IEJhc2VUcmFuc3BvcnQgfSBmcm9tICcuL2Jhc2UnO1xuXG4vKiogTm9kZSBodHRwIG1vZHVsZSB0cmFuc3BvcnQgKi9cbmV4cG9ydCBjbGFzcyBIVFRQVHJhbnNwb3J0IGV4dGVuZHMgQmFzZVRyYW5zcG9ydCB7XG4gIC8qKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UgYW5kIHNldCB0aGlzLmFnZW50ICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgb3B0aW9uczogVHJhbnNwb3J0T3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgIGNvbnN0IHByb3h5ID0gdGhpcy5fZ2V0UHJveHkoJ2h0dHAnKTtcbiAgICB0aGlzLm1vZHVsZSA9IGh0dHA7XG4gICAgdGhpcy5jbGllbnQgPSBwcm94eVxuICAgICAgPyAobmV3IChyZXF1aXJlKCdodHRwcy1wcm94eS1hZ2VudCcpKShwcm94eSkgYXMgaHR0cC5BZ2VudClcbiAgICAgIDogbmV3IGh0dHAuQWdlbnQoeyBrZWVwQWxpdmU6IGZhbHNlLCBtYXhTb2NrZXRzOiAzMCwgdGltZW91dDogMjAwMCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNlbmRFdmVudChldmVudDogRXZlbnQpOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmQoZXZlbnRUb1NlbnRyeVJlcXVlc3QoZXZlbnQsIHRoaXMuX2FwaSksIGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNlbmRTZXNzaW9uKHNlc3Npb246IFNlc3Npb24gfCBTZXNzaW9uQWdncmVnYXRlcyk6IFByb21pc2VMaWtlPFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmQoc2Vzc2lvblRvU2VudHJ5UmVxdWVzdChzZXNzaW9uLCB0aGlzLl9hcGkpLCBzZXNzaW9uKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGV2ZW50VG9TZW50cnlSZXF1ZXN0LCBzZXNzaW9uVG9TZW50cnlSZXF1ZXN0IH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IEV2ZW50LCBSZXNwb25zZSwgU2Vzc2lvbiwgU2Vzc2lvbkFnZ3JlZ2F0ZXMsIFRyYW5zcG9ydE9wdGlvbnMgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCAqIGFzIGh0dHBzIGZyb20gJ2h0dHBzJztcblxuaW1wb3J0IHsgQmFzZVRyYW5zcG9ydCB9IGZyb20gJy4vYmFzZSc7XG5cbi8qKiBOb2RlIGh0dHBzIG1vZHVsZSB0cmFuc3BvcnQgKi9cbmV4cG9ydCBjbGFzcyBIVFRQU1RyYW5zcG9ydCBleHRlbmRzIEJhc2VUcmFuc3BvcnQge1xuICAvKiogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIGFuZCBzZXQgdGhpcy5hZ2VudCAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIG9wdGlvbnM6IFRyYW5zcG9ydE9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKTtcbiAgICBjb25zdCBwcm94eSA9IHRoaXMuX2dldFByb3h5KCdodHRwcycpO1xuICAgIHRoaXMubW9kdWxlID0gaHR0cHM7XG4gICAgdGhpcy5jbGllbnQgPSBwcm94eVxuICAgICAgPyAobmV3IChyZXF1aXJlKCdodHRwcy1wcm94eS1hZ2VudCcpKShwcm94eSkgYXMgaHR0cHMuQWdlbnQpXG4gICAgICA6IG5ldyBodHRwcy5BZ2VudCh7IGtlZXBBbGl2ZTogZmFsc2UsIG1heFNvY2tldHM6IDMwLCB0aW1lb3V0OiAyMDAwIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2VuZEV2ZW50KGV2ZW50OiBFdmVudCk6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZChldmVudFRvU2VudHJ5UmVxdWVzdChldmVudCwgdGhpcy5fYXBpKSwgZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2VuZFNlc3Npb24oc2Vzc2lvbjogU2Vzc2lvbiB8IFNlc3Npb25BZ2dyZWdhdGVzKTogUHJvbWlzZUxpa2U8UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZChzZXNzaW9uVG9TZW50cnlSZXF1ZXN0KHNlc3Npb24sIHRoaXMuX2FwaSksIHNlc3Npb24pO1xuICB9XG59XG4iLCAiZXhwb3J0IHsgQmFzZVRyYW5zcG9ydCB9IGZyb20gJy4vYmFzZSc7XG5leHBvcnQgeyBIVFRQVHJhbnNwb3J0IH0gZnJvbSAnLi9odHRwJztcbmV4cG9ydCB7IEhUVFBTVHJhbnNwb3J0IH0gZnJvbSAnLi9odHRwcyc7XG4iLCAiaW1wb3J0IHsgQmFzZUJhY2tlbmQsIGdldEN1cnJlbnRIdWIgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgRXZlbnQsIEV2ZW50SGludCwgTWVjaGFuaXNtLCBTZXZlcml0eSwgVHJhbnNwb3J0LCBUcmFuc3BvcnRPcHRpb25zIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQge1xuICBhZGRFeGNlcHRpb25NZWNoYW5pc20sXG4gIGFkZEV4Y2VwdGlvblR5cGVWYWx1ZSxcbiAgRHNuLFxuICBleHRyYWN0RXhjZXB0aW9uS2V5c0Zvck1lc3NhZ2UsXG4gIGlzRXJyb3IsXG4gIGlzUGxhaW5PYmplY3QsXG4gIG5vcm1hbGl6ZVRvU2l6ZSxcbiAgU3luY1Byb21pc2UsXG59IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5pbXBvcnQgeyBleHRyYWN0U3RhY2tGcm9tRXJyb3IsIHBhcnNlRXJyb3IsIHBhcnNlU3RhY2ssIHByZXBhcmVGcmFtZXNGb3JFdmVudCB9IGZyb20gJy4vcGFyc2Vycyc7XG5pbXBvcnQgeyBIVFRQU1RyYW5zcG9ydCwgSFRUUFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0cyc7XG5pbXBvcnQgeyBOb2RlT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFRoZSBTZW50cnkgTm9kZSBTREsgQmFja2VuZC5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIE5vZGVCYWNrZW5kIGV4dGVuZHMgQmFzZUJhY2tlbmQ8Tm9kZU9wdGlvbnM+IHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xuICBwdWJsaWMgZXZlbnRGcm9tRXhjZXB0aW9uKGV4Y2VwdGlvbjogYW55LCBoaW50PzogRXZlbnRIaW50KTogUHJvbWlzZUxpa2U8RXZlbnQ+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGxldCBleDogYW55ID0gZXhjZXB0aW9uO1xuICAgIGNvbnN0IHByb3ZpZGVkTWVjaGFuaXNtOiBNZWNoYW5pc20gfCB1bmRlZmluZWQgPVxuICAgICAgaGludCAmJiBoaW50LmRhdGEgJiYgKGhpbnQuZGF0YSBhcyB7IG1lY2hhbmlzbTogTWVjaGFuaXNtIH0pLm1lY2hhbmlzbTtcbiAgICBjb25zdCBtZWNoYW5pc206IE1lY2hhbmlzbSA9IHByb3ZpZGVkTWVjaGFuaXNtIHx8IHtcbiAgICAgIGhhbmRsZWQ6IHRydWUsXG4gICAgICB0eXBlOiAnZ2VuZXJpYycsXG4gICAgfTtcblxuICAgIGlmICghaXNFcnJvcihleGNlcHRpb24pKSB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChleGNlcHRpb24pKSB7XG4gICAgICAgIC8vIFRoaXMgd2lsbCBhbGxvdyB1cyB0byBncm91cCBldmVudHMgYmFzZWQgb24gdG9wLWxldmVsIGtleXNcbiAgICAgICAgLy8gd2hpY2ggaXMgbXVjaCBiZXR0ZXIgdGhhbiBjcmVhdGluZyBuZXcgZ3JvdXAgd2hlbiBhbnkga2V5L3ZhbHVlIGNoYW5nZVxuICAgICAgICBjb25zdCBtZXNzYWdlID0gYE5vbi1FcnJvciBleGNlcHRpb24gY2FwdHVyZWQgd2l0aCBrZXlzOiAke2V4dHJhY3RFeGNlcHRpb25LZXlzRm9yTWVzc2FnZShleGNlcHRpb24pfWA7XG5cbiAgICAgICAgZ2V0Q3VycmVudEh1YigpLmNvbmZpZ3VyZVNjb3BlKHNjb3BlID0+IHtcbiAgICAgICAgICBzY29wZS5zZXRFeHRyYSgnX19zZXJpYWxpemVkX18nLCBub3JtYWxpemVUb1NpemUoZXhjZXB0aW9uIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4ID0gKGhpbnQgJiYgaGludC5zeW50aGV0aWNFeGNlcHRpb24pIHx8IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgKGV4IGFzIEVycm9yKS5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgaGFuZGxlcyB3aGVuIHNvbWVvbmUgZG9lczogYHRocm93IFwic29tZXRoaW5nIGF3ZXNvbWVcIjtgXG4gICAgICAgIC8vIFdlIHVzZSBzeW50aGVzaXplZCBFcnJvciBoZXJlIHNvIHdlIGNhbiBleHRyYWN0IGEgKHJvdWdoKSBzdGFjayB0cmFjZS5cbiAgICAgICAgZXggPSAoaGludCAmJiBoaW50LnN5bnRoZXRpY0V4Y2VwdGlvbikgfHwgbmV3IEVycm9yKGV4Y2VwdGlvbiBhcyBzdHJpbmcpO1xuICAgICAgICAoZXggYXMgRXJyb3IpLm1lc3NhZ2UgPSBleGNlcHRpb247XG4gICAgICB9XG4gICAgICBtZWNoYW5pc20uc3ludGhldGljID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlPEV2ZW50PigocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgICAgcGFyc2VFcnJvcihleCBhcyBFcnJvciwgdGhpcy5fb3B0aW9ucylcbiAgICAgICAgLnRoZW4oZXZlbnQgPT4ge1xuICAgICAgICAgIGFkZEV4Y2VwdGlvblR5cGVWYWx1ZShldmVudCwgdW5kZWZpbmVkLCB1bmRlZmluZWQpO1xuICAgICAgICAgIGFkZEV4Y2VwdGlvbk1lY2hhbmlzbShldmVudCwgbWVjaGFuaXNtKTtcblxuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgICAgICBldmVudF9pZDogaGludCAmJiBoaW50LmV2ZW50X2lkLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbihudWxsLCByZWplY3QpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBldmVudEZyb21NZXNzYWdlKG1lc3NhZ2U6IHN0cmluZywgbGV2ZWw6IFNldmVyaXR5ID0gU2V2ZXJpdHkuSW5mbywgaGludD86IEV2ZW50SGludCk6IFByb21pc2VMaWtlPEV2ZW50PiB7XG4gICAgY29uc3QgZXZlbnQ6IEV2ZW50ID0ge1xuICAgICAgZXZlbnRfaWQ6IGhpbnQgJiYgaGludC5ldmVudF9pZCxcbiAgICAgIGxldmVsLFxuICAgICAgbWVzc2FnZSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZTxFdmVudD4ocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAodGhpcy5fb3B0aW9ucy5hdHRhY2hTdGFja3RyYWNlICYmIGhpbnQgJiYgaGludC5zeW50aGV0aWNFeGNlcHRpb24pIHtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBoaW50LnN5bnRoZXRpY0V4Y2VwdGlvbiA/IGV4dHJhY3RTdGFja0Zyb21FcnJvcihoaW50LnN5bnRoZXRpY0V4Y2VwdGlvbikgOiBbXTtcbiAgICAgICAgdm9pZCBwYXJzZVN0YWNrKHN0YWNrLCB0aGlzLl9vcHRpb25zKVxuICAgICAgICAgIC50aGVuKGZyYW1lcyA9PiB7XG4gICAgICAgICAgICBldmVudC5zdGFja3RyYWNlID0ge1xuICAgICAgICAgICAgICBmcmFtZXM6IHByZXBhcmVGcmFtZXNGb3JFdmVudChmcmFtZXMpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc29sdmUoZXZlbnQpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnRoZW4obnVsbCwgKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHJvdGVjdGVkIF9zZXR1cFRyYW5zcG9ydCgpOiBUcmFuc3BvcnQge1xuICAgIGlmICghdGhpcy5fb3B0aW9ucy5kc24pIHtcbiAgICAgIC8vIFdlIHJldHVybiB0aGUgbm9vcCB0cmFuc3BvcnQgaGVyZSBpbiBjYXNlIHRoZXJlIGlzIG5vIERzbi5cbiAgICAgIHJldHVybiBzdXBlci5fc2V0dXBUcmFuc3BvcnQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBkc24gPSBuZXcgRHNuKHRoaXMuX29wdGlvbnMuZHNuKTtcblxuICAgIGNvbnN0IHRyYW5zcG9ydE9wdGlvbnM6IFRyYW5zcG9ydE9wdGlvbnMgPSB7XG4gICAgICAuLi50aGlzLl9vcHRpb25zLnRyYW5zcG9ydE9wdGlvbnMsXG4gICAgICAuLi4odGhpcy5fb3B0aW9ucy5odHRwUHJveHkgJiYgeyBodHRwUHJveHk6IHRoaXMuX29wdGlvbnMuaHR0cFByb3h5IH0pLFxuICAgICAgLi4uKHRoaXMuX29wdGlvbnMuaHR0cHNQcm94eSAmJiB7IGh0dHBzUHJveHk6IHRoaXMuX29wdGlvbnMuaHR0cHNQcm94eSB9KSxcbiAgICAgIC4uLih0aGlzLl9vcHRpb25zLmNhQ2VydHMgJiYgeyBjYUNlcnRzOiB0aGlzLl9vcHRpb25zLmNhQ2VydHMgfSksXG4gICAgICBkc246IHRoaXMuX29wdGlvbnMuZHNuLFxuICAgICAgdHVubmVsOiB0aGlzLl9vcHRpb25zLnR1bm5lbCxcbiAgICAgIF9tZXRhZGF0YTogdGhpcy5fb3B0aW9ucy5fbWV0YWRhdGEsXG4gICAgfTtcblxuICAgIGlmICh0aGlzLl9vcHRpb25zLnRyYW5zcG9ydCkge1xuICAgICAgcmV0dXJuIG5ldyB0aGlzLl9vcHRpb25zLnRyYW5zcG9ydCh0cmFuc3BvcnRPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGRzbi5wcm90b2NvbCA9PT0gJ2h0dHAnKSB7XG4gICAgICByZXR1cm4gbmV3IEhUVFBUcmFuc3BvcnQodHJhbnNwb3J0T3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgSFRUUFNUcmFuc3BvcnQodHJhbnNwb3J0T3B0aW9ucyk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBCYXNlQ2xpZW50LCBTY29wZSwgU0RLX1ZFUlNJT04gfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgU2Vzc2lvbkZsdXNoZXIgfSBmcm9tICdAc2VudHJ5L2h1Yic7XG5pbXBvcnQgeyBFdmVudCwgRXZlbnRIaW50LCBSZXF1ZXN0U2Vzc2lvblN0YXR1cyB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmltcG9ydCB7IE5vZGVCYWNrZW5kIH0gZnJvbSAnLi9iYWNrZW5kJztcbmltcG9ydCB7IE5vZGVPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogVGhlIFNlbnRyeSBOb2RlIFNESyBDbGllbnQuXG4gKlxuICogQHNlZSBOb2RlT3B0aW9ucyBmb3IgZG9jdW1lbnRhdGlvbiBvbiBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gKiBAc2VlIFNlbnRyeUNsaWVudCBmb3IgdXNhZ2UgZG9jdW1lbnRhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIE5vZGVDbGllbnQgZXh0ZW5kcyBCYXNlQ2xpZW50PE5vZGVCYWNrZW5kLCBOb2RlT3B0aW9ucz4ge1xuICBwcm90ZWN0ZWQgX3Nlc3Npb25GbHVzaGVyOiBTZXNzaW9uRmx1c2hlciB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBOb2RlIFNESyBpbnN0YW5jZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIFNESy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBOb2RlT3B0aW9ucykge1xuICAgIG9wdGlvbnMuX21ldGFkYXRhID0gb3B0aW9ucy5fbWV0YWRhdGEgfHwge307XG4gICAgb3B0aW9ucy5fbWV0YWRhdGEuc2RrID0gb3B0aW9ucy5fbWV0YWRhdGEuc2RrIHx8IHtcbiAgICAgIG5hbWU6ICdzZW50cnkuamF2YXNjcmlwdC5ub2RlJyxcbiAgICAgIHBhY2thZ2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnbnBtOkBzZW50cnkvbm9kZScsXG4gICAgICAgICAgdmVyc2lvbjogU0RLX1ZFUlNJT04sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdmVyc2lvbjogU0RLX1ZFUlNJT04sXG4gICAgfTtcblxuICAgIHN1cGVyKE5vZGVCYWNrZW5kLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcbiAgcHVibGljIGNhcHR1cmVFeGNlcHRpb24oZXhjZXB0aW9uOiBhbnksIGhpbnQ/OiBFdmVudEhpbnQsIHNjb3BlPzogU2NvcGUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIC8vIENoZWNrIGlmIHRoZSBmbGFnIGBhdXRvU2Vzc2lvblRyYWNraW5nYCBpcyBlbmFibGVkLCBhbmQgaWYgYF9zZXNzaW9uRmx1c2hlcmAgZXhpc3RzIGJlY2F1c2UgaXQgaXMgaW5pdGlhbGlzZWQgb25seVxuICAgIC8vIHdoZW4gdGhlIGByZXF1ZXN0SGFuZGxlcmAgbWlkZGxld2FyZSBpcyB1c2VkLCBhbmQgaGVuY2UgdGhlIGV4cGVjdGF0aW9uIGlzIHRvIGhhdmUgU2Vzc2lvbkFnZ3JlZ2F0ZXMgcGF5bG9hZFxuICAgIC8vIHNlbnQgdG8gdGhlIFNlcnZlciBvbmx5IHdoZW4gdGhlIGByZXF1ZXN0SGFuZGxlcmAgbWlkZGxld2FyZSBpcyB1c2VkXG4gICAgaWYgKHRoaXMuX29wdGlvbnMuYXV0b1Nlc3Npb25UcmFja2luZyAmJiB0aGlzLl9zZXNzaW9uRmx1c2hlciAmJiBzY29wZSkge1xuICAgICAgY29uc3QgcmVxdWVzdFNlc3Npb24gPSBzY29wZS5nZXRSZXF1ZXN0U2Vzc2lvbigpO1xuXG4gICAgICAvLyBOZWNlc3NhcnkgY2hlY2tzIHRvIGVuc3VyZSB0aGlzIGlzIGNvZGUgYmxvY2sgaXMgZXhlY3V0ZWQgb25seSB3aXRoaW4gYSByZXF1ZXN0XG4gICAgICAvLyBTaG91bGQgb3ZlcnJpZGUgdGhlIHN0YXR1cyBvbmx5IGlmIGByZXF1ZXN0U2Vzc2lvbi5zdGF0dXNgIGlzIGBPa2AsIHdoaWNoIGlzIGl0cyBpbml0aWFsIHN0YWdlXG4gICAgICBpZiAocmVxdWVzdFNlc3Npb24gJiYgcmVxdWVzdFNlc3Npb24uc3RhdHVzID09PSBSZXF1ZXN0U2Vzc2lvblN0YXR1cy5Paykge1xuICAgICAgICByZXF1ZXN0U2Vzc2lvbi5zdGF0dXMgPSBSZXF1ZXN0U2Vzc2lvblN0YXR1cy5FcnJvcmVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5jYXB0dXJlRXhjZXB0aW9uKGV4Y2VwdGlvbiwgaGludCwgc2NvcGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgY2FwdHVyZUV2ZW50KGV2ZW50OiBFdmVudCwgaGludD86IEV2ZW50SGludCwgc2NvcGU/OiBTY29wZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIGZsYWcgYGF1dG9TZXNzaW9uVHJhY2tpbmdgIGlzIGVuYWJsZWQsIGFuZCBpZiBgX3Nlc3Npb25GbHVzaGVyYCBleGlzdHMgYmVjYXVzZSBpdCBpcyBpbml0aWFsaXNlZCBvbmx5XG4gICAgLy8gd2hlbiB0aGUgYHJlcXVlc3RIYW5kbGVyYCBtaWRkbGV3YXJlIGlzIHVzZWQsIGFuZCBoZW5jZSB0aGUgZXhwZWN0YXRpb24gaXMgdG8gaGF2ZSBTZXNzaW9uQWdncmVnYXRlcyBwYXlsb2FkXG4gICAgLy8gc2VudCB0byB0aGUgU2VydmVyIG9ubHkgd2hlbiB0aGUgYHJlcXVlc3RIYW5kbGVyYCBtaWRkbGV3YXJlIGlzIHVzZWRcbiAgICBpZiAodGhpcy5fb3B0aW9ucy5hdXRvU2Vzc2lvblRyYWNraW5nICYmIHRoaXMuX3Nlc3Npb25GbHVzaGVyICYmIHNjb3BlKSB7XG4gICAgICBjb25zdCBldmVudFR5cGUgPSBldmVudC50eXBlIHx8ICdleGNlcHRpb24nO1xuICAgICAgY29uc3QgaXNFeGNlcHRpb24gPVxuICAgICAgICBldmVudFR5cGUgPT09ICdleGNlcHRpb24nICYmIGV2ZW50LmV4Y2VwdGlvbiAmJiBldmVudC5leGNlcHRpb24udmFsdWVzICYmIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMubGVuZ3RoID4gMDtcblxuICAgICAgLy8gSWYgdGhlIGV2ZW50IGlzIG9mIHR5cGUgRXhjZXB0aW9uLCB0aGVuIGEgcmVxdWVzdCBzZXNzaW9uIHNob3VsZCBiZSBjYXB0dXJlZFxuICAgICAgaWYgKGlzRXhjZXB0aW9uKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RTZXNzaW9uID0gc2NvcGUuZ2V0UmVxdWVzdFNlc3Npb24oKTtcblxuICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGlzIGlzIGhhcHBlbmluZyB3aXRoaW4gdGhlIGJvdW5kcyBvZiBhIHJlcXVlc3QsIGFuZCBtYWtlIHN1cmUgbm90IHRvIG92ZXJyaWRlXG4gICAgICAgIC8vIFNlc3Npb24gU3RhdHVzIGlmIEVycm9yZWQgLyBDcmFzaGVkXG4gICAgICAgIGlmIChyZXF1ZXN0U2Vzc2lvbiAmJiByZXF1ZXN0U2Vzc2lvbi5zdGF0dXMgPT09IFJlcXVlc3RTZXNzaW9uU3RhdHVzLk9rKSB7XG4gICAgICAgICAgcmVxdWVzdFNlc3Npb24uc3RhdHVzID0gUmVxdWVzdFNlc3Npb25TdGF0dXMuRXJyb3JlZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5jYXB0dXJlRXZlbnQoZXZlbnQsIGhpbnQsIHNjb3BlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKi9cbiAgcHVibGljIGNsb3NlKHRpbWVvdXQ/OiBudW1iZXIpOiBQcm9taXNlTGlrZTxib29sZWFuPiB7XG4gICAgdGhpcy5fc2Vzc2lvbkZsdXNoZXI/LmNsb3NlKCk7XG4gICAgcmV0dXJuIHN1cGVyLmNsb3NlKHRpbWVvdXQpO1xuICB9XG5cbiAgLyoqIE1ldGhvZCB0aGF0IGluaXRpYWxpc2VzIGFuIGluc3RhbmNlIG9mIFNlc3Npb25GbHVzaGVyIG9uIENsaWVudCAqL1xuICBwdWJsaWMgaW5pdFNlc3Npb25GbHVzaGVyKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgcmVsZWFzZSwgZW52aXJvbm1lbnQgfSA9IHRoaXMuX29wdGlvbnM7XG4gICAgaWYgKCFyZWxlYXNlKSB7XG4gICAgICBsb2dnZXIud2FybignQ2Fubm90IGluaXRpYWxpc2UgYW4gaW5zdGFuY2Ugb2YgU2Vzc2lvbkZsdXNoZXIgaWYgbm8gcmVsZWFzZSBpcyBwcm92aWRlZCEnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2Vzc2lvbkZsdXNoZXIgPSBuZXcgU2Vzc2lvbkZsdXNoZXIodGhpcy5nZXRUcmFuc3BvcnQoKSwge1xuICAgICAgICByZWxlYXNlLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHJvdGVjdGVkIF9wcmVwYXJlRXZlbnQoZXZlbnQ6IEV2ZW50LCBzY29wZT86IFNjb3BlLCBoaW50PzogRXZlbnRIaW50KTogUHJvbWlzZUxpa2U8RXZlbnQgfCBudWxsPiB7XG4gICAgZXZlbnQucGxhdGZvcm0gPSBldmVudC5wbGF0Zm9ybSB8fCAnbm9kZSc7XG4gICAgaWYgKHRoaXMuZ2V0T3B0aW9ucygpLnNlcnZlck5hbWUpIHtcbiAgICAgIGV2ZW50LnNlcnZlcl9uYW1lID0gdGhpcy5nZXRPcHRpb25zKCkuc2VydmVyTmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLl9wcmVwYXJlRXZlbnQoZXZlbnQsIHNjb3BlLCBoaW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgcmVzcG9uc2libGUgZm9yIGNhcHR1cmluZy9lbmRpbmcgYSByZXF1ZXN0IHNlc3Npb24gYnkgY2FsbGluZyBgaW5jcmVtZW50U2Vzc2lvblN0YXR1c0NvdW50YCB0byBpbmNyZW1lbnRcbiAgICogYXBwcm9wcmlhdGUgc2Vzc2lvbiBhZ2dyZWdhdGVzIGJ1Y2tldFxuICAgKi9cbiAgcHJvdGVjdGVkIF9jYXB0dXJlUmVxdWVzdFNlc3Npb24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9zZXNzaW9uRmx1c2hlcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ0Rpc2NhcmRlZCByZXF1ZXN0IG1vZGUgc2Vzc2lvbiBiZWNhdXNlIGF1dG9TZXNzaW9uVHJhY2tpbmcgb3B0aW9uIHdhcyBkaXNhYmxlZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXNzaW9uRmx1c2hlci5pbmNyZW1lbnRTZXNzaW9uU3RhdHVzQ291bnQoKTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBnZXRDdXJyZW50SHViIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IEludGVncmF0aW9uLCBTZXZlcml0eSB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgZmlsbCB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICd1dGlsJztcblxuLyoqIENvbnNvbGUgbW9kdWxlIGludGVncmF0aW9uICovXG5leHBvcnQgY2xhc3MgQ29uc29sZSBpbXBsZW1lbnRzIEludGVncmF0aW9uIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlkOiBzdHJpbmcgPSAnQ29uc29sZSc7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgbmFtZTogc3RyaW5nID0gQ29uc29sZS5pZDtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXR1cE9uY2UoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBsZXZlbCBvZiBbJ2RlYnVnJywgJ2luZm8nLCAnd2FybicsICdlcnJvcicsICdsb2cnXSkge1xuICAgICAgZmlsbChjb25zb2xlLCBsZXZlbCwgY3JlYXRlQ29uc29sZVdyYXBwZXIobGV2ZWwpKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIHRoYXQnbGwgYmUgdXNlZCBmb3IgZXZlcnkgY29uc29sZSBsZXZlbFxuICovXG5mdW5jdGlvbiBjcmVhdGVDb25zb2xlV3JhcHBlcihsZXZlbDogc3RyaW5nKTogKG9yaWdpbmFsQ29uc29sZU1ldGhvZDogKCkgPT4gdm9pZCkgPT4gdm9pZCB7XG4gIHJldHVybiBmdW5jdGlvbiBjb25zb2xlV3JhcHBlcihvcmlnaW5hbENvbnNvbGVNZXRob2Q6ICgpID0+IHZvaWQpOiAoKSA9PiB2b2lkIHtcbiAgICBsZXQgc2VudHJ5TGV2ZWw6IFNldmVyaXR5O1xuXG4gICAgc3dpdGNoIChsZXZlbCkge1xuICAgICAgY2FzZSAnZGVidWcnOlxuICAgICAgICBzZW50cnlMZXZlbCA9IFNldmVyaXR5LkRlYnVnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgc2VudHJ5TGV2ZWwgPSBTZXZlcml0eS5FcnJvcjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdpbmZvJzpcbiAgICAgICAgc2VudHJ5TGV2ZWwgPSBTZXZlcml0eS5JbmZvO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3dhcm4nOlxuICAgICAgICBzZW50cnlMZXZlbCA9IFNldmVyaXR5Lldhcm5pbmc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc2VudHJ5TGV2ZWwgPSBTZXZlcml0eS5Mb2c7XG4gICAgfVxuXG4gICAgLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLXJlc3QtcGFyYW1zICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHRoaXM6IHR5cGVvZiBjb25zb2xlKTogdm9pZCB7XG4gICAgICBpZiAoZ2V0Q3VycmVudEh1YigpLmdldEludGVncmF0aW9uKENvbnNvbGUpKSB7XG4gICAgICAgIGdldEN1cnJlbnRIdWIoKS5hZGRCcmVhZGNydW1iKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNhdGVnb3J5OiAnY29uc29sZScsXG4gICAgICAgICAgICBsZXZlbDogc2VudHJ5TGV2ZWwsXG4gICAgICAgICAgICBtZXNzYWdlOiB1dGlsLmZvcm1hdC5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbnB1dDogWy4uLmFyZ3VtZW50c10sXG4gICAgICAgICAgICBsZXZlbCxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBvcmlnaW5hbENvbnNvbGVNZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICAgIC8qIGVzbGludC1lbmFibGUgcHJlZmVyLXJlc3QtcGFyYW1zICovXG4gIH07XG59XG4iLCAiaW1wb3J0IHsgZ2V0Q3VycmVudEh1YiB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyBwYXJzZVNlbXZlciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuaW1wb3J0ICogYXMgaHR0cCBmcm9tICdodHRwJztcbmltcG9ydCAqIGFzIGh0dHBzIGZyb20gJ2h0dHBzJztcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCc7XG5cbmNvbnN0IE5PREVfVkVSU0lPTiA9IHBhcnNlU2VtdmVyKHByb2Nlc3MudmVyc2lvbnMubm9kZSk7XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdXJsIHBvaW50cyB0byBTZW50cnkgc2VydmVyXG4gKiBAcGFyYW0gdXJsIHVybCB0byB2ZXJpZnlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2VudHJ5UmVxdWVzdCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBkc24gPSBnZXRDdXJyZW50SHViKClcbiAgICAuZ2V0Q2xpZW50KClcbiAgICA/LmdldERzbigpO1xuICByZXR1cm4gZHNuID8gdXJsLmluY2x1ZGVzKGRzbi5ob3N0KSA6IGZhbHNlO1xufVxuXG4vKipcbiAqIEFzc2VtYmxlIGEgVVJMIHRvIGJlIHVzZWQgZm9yIGJyZWFkY3J1bWJzIGFuZCBzcGFucy5cbiAqXG4gKiBAcGFyYW0gcmVxdWVzdE9wdGlvbnMgUmVxdWVzdE9wdGlvbnMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvbXBvbmVudCBwYXJ0cyBmb3IgYSBVUkxcbiAqIEByZXR1cm5zIEZ1bGx5LWZvcm1lZCBVUkxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RVcmwocmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RPcHRpb25zKTogc3RyaW5nIHtcbiAgY29uc3QgcHJvdG9jb2wgPSByZXF1ZXN0T3B0aW9ucy5wcm90b2NvbCB8fCAnJztcbiAgY29uc3QgaG9zdG5hbWUgPSByZXF1ZXN0T3B0aW9ucy5ob3N0bmFtZSB8fCByZXF1ZXN0T3B0aW9ucy5ob3N0IHx8ICcnO1xuICAvLyBEb24ndCBsb2cgc3RhbmRhcmQgOjgwIChodHRwKSBhbmQgOjQ0MyAoaHR0cHMpIHBvcnRzIHRvIHJlZHVjZSB0aGUgbm9pc2VcbiAgY29uc3QgcG9ydCA9XG4gICAgIXJlcXVlc3RPcHRpb25zLnBvcnQgfHwgcmVxdWVzdE9wdGlvbnMucG9ydCA9PT0gODAgfHwgcmVxdWVzdE9wdGlvbnMucG9ydCA9PT0gNDQzID8gJycgOiBgOiR7cmVxdWVzdE9wdGlvbnMucG9ydH1gO1xuICBjb25zdCBwYXRoID0gcmVxdWVzdE9wdGlvbnMucGF0aCA/IHJlcXVlc3RPcHRpb25zLnBhdGggOiAnLyc7XG5cbiAgcmV0dXJuIGAke3Byb3RvY29sfS8vJHtob3N0bmFtZX0ke3BvcnR9JHtwYXRofWA7XG59XG5cbi8qKlxuICogSGFuZGxlIHZhcmlvdXMgZWRnZSBjYXNlcyBpbiB0aGUgc3BhbiBkZXNjcmlwdGlvbiAoZm9yIHNwYW5zIHJlcHJlc2VudGluZyBodHRwKHMpIHJlcXVlc3RzKS5cbiAqXG4gKiBAcGFyYW0gZGVzY3JpcHRpb24gY3VycmVudCBgZGVzY3JpcHRpb25gIHByb3BlcnR5IG9mIHRoZSBzcGFuIHJlcHJlc2VudGluZyB0aGUgcmVxdWVzdFxuICogQHBhcmFtIHJlcXVlc3RPcHRpb25zIENvbmZpZ3VyYXRpb24gZGF0YSBmb3IgdGhlIHJlcXVlc3RcbiAqIEBwYXJhbSBSZXF1ZXN0IFJlcXVlc3Qgb2JqZWN0XG4gKlxuICogQHJldHVybnMgVGhlIGNsZWFuZWQgZGVzY3JpcHRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuU3BhbkRlc2NyaXB0aW9uKFxuICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICByZXF1ZXN0T3B0aW9uczogUmVxdWVzdE9wdGlvbnMsXG4gIHJlcXVlc3Q6IGh0dHAuQ2xpZW50UmVxdWVzdCxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIC8vIG5vdGhpbmcgdG8gY2xlYW5cbiAgaWYgKCFkZXNjcmlwdGlvbikge1xuICAgIHJldHVybiBkZXNjcmlwdGlvbjtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgbGV0IFttZXRob2QsIHJlcXVlc3RVcmxdID0gZGVzY3JpcHRpb24uc3BsaXQoJyAnKTtcblxuICAvLyBzdXBlcmFnZW50IHN0aWNrcyB0aGUgcHJvdG9jb2wgaW4gYSB3ZWlyZCBwbGFjZSAod2UgY2hlY2sgZm9yIGhvc3QgYmVjYXVzZSBpZiBib3RoIGhvc3QgKmFuZCogcHJvdG9jb2wgYXJlIG1pc3NpbmcsXG4gIC8vIHdlJ3JlIGxpa2VseSBkZWFsaW5nIHdpdGggYW4gaW50ZXJuYWwgcm91dGUgYW5kIHRoaXMgZG9lc24ndCBhcHBseSlcbiAgaWYgKHJlcXVlc3RPcHRpb25zLmhvc3QgJiYgIXJlcXVlc3RPcHRpb25zLnByb3RvY29sKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHJlcXVlc3RPcHRpb25zLnByb3RvY29sID0gKHJlcXVlc3QgYXMgYW55KT8uYWdlbnQ/LnByb3RvY29sOyAvLyB3b3JzdCBjb21lcyB0byB3b3JzdCwgdGhpcyBpcyB1bmRlZmluZWQgYW5kIG5vdGhpbmcgY2hhbmdlc1xuICAgIHJlcXVlc3RVcmwgPSBleHRyYWN0VXJsKHJlcXVlc3RPcHRpb25zKTtcbiAgfVxuXG4gIC8vIGludGVybmFsIHJvdXRlcyBjYW4gZW5kIHVwIHN0YXJ0aW5nIHdpdGggYSB0cmlwbGUgc2xhc2ggcmF0aGVyIHRoYW4gYSBzaW5nbGUgb25lXG4gIGlmIChyZXF1ZXN0VXJsPy5zdGFydHNXaXRoKCcvLy8nKSkge1xuICAgIHJlcXVlc3RVcmwgPSByZXF1ZXN0VXJsLnNsaWNlKDIpO1xuICB9XG5cbiAgcmV0dXJuIGAke21ldGhvZH0gJHtyZXF1ZXN0VXJsfWA7XG59XG5cbi8vIHRoZSBub2RlIHR5cGVzIGFyZSBtaXNzaW5nIGEgZmV3IHByb3BlcnRpZXMgd2hpY2ggbm9kZSdzIGB1cmxUb09wdGlvbnNgIGZ1bmN0aW9uIHNwaXRzIG91dFxuZXhwb3J0IHR5cGUgUmVxdWVzdE9wdGlvbnMgPSBodHRwLlJlcXVlc3RPcHRpb25zICYgeyBoYXNoPzogc3RyaW5nOyBzZWFyY2g/OiBzdHJpbmc7IHBhdGhuYW1lPzogc3RyaW5nOyBocmVmPzogc3RyaW5nIH07XG50eXBlIFJlcXVlc3RDYWxsYmFjayA9IChyZXNwb25zZTogaHR0cC5JbmNvbWluZ01lc3NhZ2UpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TWV0aG9kQXJncyA9XG4gIHwgW1JlcXVlc3RPcHRpb25zIHwgc3RyaW5nIHwgVVJMLCBSZXF1ZXN0Q2FsbGJhY2s/XVxuICB8IFtzdHJpbmcgfCBVUkwsIFJlcXVlc3RPcHRpb25zLCBSZXF1ZXN0Q2FsbGJhY2s/XTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RNZXRob2QgPSAoLi4uYXJnczogUmVxdWVzdE1ldGhvZEFyZ3MpID0+IGh0dHAuQ2xpZW50UmVxdWVzdDtcblxuLyoqXG4gKiBDb252ZXJ0IGEgVVJMIG9iamVjdCBpbnRvIGEgUmVxdWVzdE9wdGlvbnMgb2JqZWN0LlxuICpcbiAqIENvcGllZCBmcm9tIE5vZGUncyBpbnRlcm5hbHMgKHdoZXJlIGl0J3MgdXNlZCBpbiBodHRwKHMpLnJlcXVlc3QoKSBhbmQgaHR0cChzKS5nZXQoKSksIG1vZGlmaWVkIG9ubHkgdG8gdXNlIHRoZVxuICogUmVxdWVzdE9wdGlvbnMgdHlwZSBhYm92ZS5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFzdGVyL2xpYi9pbnRlcm5hbC91cmwuanMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cmxUb09wdGlvbnModXJsOiBVUkwpOiBSZXF1ZXN0T3B0aW9ucyB7XG4gIGNvbnN0IG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zID0ge1xuICAgIHByb3RvY29sOiB1cmwucHJvdG9jb2wsXG4gICAgaG9zdG5hbWU6XG4gICAgICB0eXBlb2YgdXJsLmhvc3RuYW1lID09PSAnc3RyaW5nJyAmJiB1cmwuaG9zdG5hbWUuc3RhcnRzV2l0aCgnWycpID8gdXJsLmhvc3RuYW1lLnNsaWNlKDEsIC0xKSA6IHVybC5ob3N0bmFtZSxcbiAgICBoYXNoOiB1cmwuaGFzaCxcbiAgICBzZWFyY2g6IHVybC5zZWFyY2gsXG4gICAgcGF0aG5hbWU6IHVybC5wYXRobmFtZSxcbiAgICBwYXRoOiBgJHt1cmwucGF0aG5hbWUgfHwgJyd9JHt1cmwuc2VhcmNoIHx8ICcnfWAsXG4gICAgaHJlZjogdXJsLmhyZWYsXG4gIH07XG4gIGlmICh1cmwucG9ydCAhPT0gJycpIHtcbiAgICBvcHRpb25zLnBvcnQgPSBOdW1iZXIodXJsLnBvcnQpO1xuICB9XG4gIGlmICh1cmwudXNlcm5hbWUgfHwgdXJsLnBhc3N3b3JkKSB7XG4gICAgb3B0aW9ucy5hdXRoID0gYCR7dXJsLnVzZXJuYW1lfToke3VybC5wYXNzd29yZH1gO1xuICB9XG4gIHJldHVybiBvcHRpb25zO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBpbnB1dHMgdG8gYGh0dHAocykucmVxdWVzdCgpYCBhbmQgYGh0dHAocykuZ2V0KClgLlxuICpcbiAqIExlZ2FsIGlucHV0cyB0byBgaHR0cChzKS5yZXF1ZXN0KClgIGFuZCBgaHR0cChzKS5nZXQoKWAgY2FuIHRha2Ugb25lIG9mIHRlbiBmb3JtczpcbiAqICAgICBbIFJlcXVlc3RPcHRpb25zIHwgc3RyaW5nIHwgVVJMIF0sXG4gKiAgICAgWyBSZXF1ZXN0T3B0aW9ucyB8IHN0cmluZyB8IFVSTCwgUmVxdWVzdENhbGxiYWNrIF0sXG4gKiAgICAgWyBzdHJpbmcgfCBVUkwsIFJlcXVlc3RPcHRpb25zIF0sIGFuZFxuICogICAgIFsgc3RyaW5nIHwgVVJMLCBSZXF1ZXN0T3B0aW9ucywgUmVxdWVzdENhbGxiYWNrIF0uXG4gKlxuICogVGhpcyBzdGFuZGFyZGl6ZXMgdG8gb25lIG9mIHR3byBmb3JtczogWyBSZXF1ZXN0T3B0aW9ucyBdIGFuZCBbIFJlcXVlc3RPcHRpb25zLCBSZXF1ZXN0Q2FsbGJhY2sgXS4gQSBzaW1pbGFyIHRoaW5nIGlzXG4gKiBkb25lIGFzIHRoZSBmaXJzdCBzdGVwIG9mIGBodHRwKHMpLnJlcXVlc3QoKWAgYW5kIGBodHRwKHMpLmdldCgpYDsgdGhpcyBqdXN0IGRvZXMgaXQgZWFybHkgc28gdGhhdCB3ZSBjYW4gaW50ZXJhY3RcbiAqIHdpdGggdGhlIGFyZ3MgaW4gYSBzdGFuZGFyZCB3YXkuXG4gKlxuICogQHBhcmFtIHJlcXVlc3RBcmdzIFRoZSBpbnB1dHMgdG8gYGh0dHAocykucmVxdWVzdCgpYCBvciBgaHR0cChzKS5nZXQoKWAsIGFzIGFuIGFycmF5LlxuICpcbiAqIEByZXR1cm5zIEVxdWl2YWxlbnQgYXJncyBvZiB0aGUgZm9ybSBbIFJlcXVlc3RPcHRpb25zIF0gb3IgWyBSZXF1ZXN0T3B0aW9ucywgUmVxdWVzdENhbGxiYWNrIF0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVSZXF1ZXN0QXJncyhcbiAgaHR0cE1vZHVsZTogdHlwZW9mIGh0dHAgfCB0eXBlb2YgaHR0cHMsXG4gIHJlcXVlc3RBcmdzOiBSZXF1ZXN0TWV0aG9kQXJncyxcbik6IFtSZXF1ZXN0T3B0aW9uc10gfCBbUmVxdWVzdE9wdGlvbnMsIFJlcXVlc3RDYWxsYmFja10ge1xuICBsZXQgY2FsbGJhY2ssIHJlcXVlc3RPcHRpb25zO1xuXG4gIC8vIHBvcCBvZmYgdGhlIGNhbGxiYWNrLCBpZiB0aGVyZSBpcyBvbmVcbiAgaWYgKHR5cGVvZiByZXF1ZXN0QXJnc1tyZXF1ZXN0QXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gcmVxdWVzdEFyZ3MucG9wKCkgYXMgUmVxdWVzdENhbGxiYWNrO1xuICB9XG5cbiAgLy8gY3JlYXRlIGEgUmVxdWVzdE9wdGlvbnMgb2JqZWN0IG9mIHdoYXRldmVyJ3MgYXQgaW5kZXggMFxuICBpZiAodHlwZW9mIHJlcXVlc3RBcmdzWzBdID09PSAnc3RyaW5nJykge1xuICAgIHJlcXVlc3RPcHRpb25zID0gdXJsVG9PcHRpb25zKG5ldyBVUkwocmVxdWVzdEFyZ3NbMF0pKTtcbiAgfSBlbHNlIGlmIChyZXF1ZXN0QXJnc1swXSBpbnN0YW5jZW9mIFVSTCkge1xuICAgIHJlcXVlc3RPcHRpb25zID0gdXJsVG9PcHRpb25zKHJlcXVlc3RBcmdzWzBdKTtcbiAgfSBlbHNlIHtcbiAgICByZXF1ZXN0T3B0aW9ucyA9IHJlcXVlc3RBcmdzWzBdO1xuICB9XG5cbiAgLy8gaWYgdGhlIG9wdGlvbnMgd2VyZSBnaXZlbiBzZXBhcmF0ZWx5IGZyb20gdGhlIFVSTCwgZm9sZCB0aGVtIGluXG4gIGlmIChyZXF1ZXN0QXJncy5sZW5ndGggPT09IDIpIHtcbiAgICByZXF1ZXN0T3B0aW9ucyA9IHsgLi4ucmVxdWVzdE9wdGlvbnMsIC4uLnJlcXVlc3RBcmdzWzFdIH07XG4gIH1cblxuICAvLyBGaWd1cmUgb3V0IHRoZSBwcm90b2NvbCBpZiBpdCdzIGN1cnJlbnRseSBtaXNzaW5nXG4gIGlmIChyZXF1ZXN0T3B0aW9ucy5wcm90b2NvbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gV29yc3QgY2FzZSB3ZSBlbmQgdXAgcG9wdWxhdGluZyBwcm90b2NvbCB3aXRoIHVuZGVmaW5lZCwgd2hpY2ggaXQgYWxyZWFkeSBpc1xuICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG4gICAgLy8gTk9URTogUHJpb3IgdG8gTm9kZSA5LCBgaHR0cHNgIHVzZWQgaW50ZXJuYWxzIG9mIGBodHRwYCBtb2R1bGUsIHRodXMgd2UgZG9uJ3QgcGF0Y2ggaXQuXG4gICAgLy8gQmVjYXVzZSBvZiB0aGF0LCB3ZSBjYW5ub3QgcmVseSBvbiBgaHR0cE1vZHVsZWAgdG8gcHJvdmlkZSB1cyB3aXRoIHZhbGlkIHByb3RvY29sLFxuICAgIC8vIGFzIGl0IHdpbGwgYWx3YXlzIHJldHVybiBgaHR0cGAsIGV2ZW4gd2hlbiB1c2luZyBgaHR0cHNgIG1vZHVsZS5cbiAgICAvL1xuICAgIC8vIFNlZSB0ZXN0L2ludGVncmF0aW9ucy9odHRwLnRlc3QudHMgZm9yIG1vcmUgZGV0YWlscyBvbiBOb2RlIDw9djggcHJvdG9jb2wgaXNzdWUuXG4gICAgaWYgKE5PREVfVkVSU0lPTi5tYWpvciAmJiBOT0RFX1ZFUlNJT04ubWFqb3IgPiA4KSB7XG4gICAgICByZXF1ZXN0T3B0aW9ucy5wcm90b2NvbCA9XG4gICAgICAgIChodHRwTW9kdWxlPy5nbG9iYWxBZ2VudCBhcyBhbnkpPy5wcm90b2NvbCB8fFxuICAgICAgICAocmVxdWVzdE9wdGlvbnMuYWdlbnQgYXMgYW55KT8ucHJvdG9jb2wgfHxcbiAgICAgICAgKHJlcXVlc3RPcHRpb25zLl9kZWZhdWx0QWdlbnQgYXMgYW55KT8ucHJvdG9jb2w7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3RPcHRpb25zLnByb3RvY29sID1cbiAgICAgICAgKHJlcXVlc3RPcHRpb25zLmFnZW50IGFzIGFueSk/LnByb3RvY29sIHx8XG4gICAgICAgIChyZXF1ZXN0T3B0aW9ucy5fZGVmYXVsdEFnZW50IGFzIGFueSk/LnByb3RvY29sIHx8XG4gICAgICAgIChodHRwTW9kdWxlPy5nbG9iYWxBZ2VudCBhcyBhbnkpPy5wcm90b2NvbDtcbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MsIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbiAgfVxuXG4gIC8vIHJldHVybiBhcmdzIGluIHN0YW5kYXJkaXplZCBmb3JtXG4gIGlmIChjYWxsYmFjaykge1xuICAgIHJldHVybiBbcmVxdWVzdE9wdGlvbnMsIGNhbGxiYWNrXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gW3JlcXVlc3RPcHRpb25zXTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGdldEN1cnJlbnRIdWIgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgSW50ZWdyYXRpb24sIFNwYW4gfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGZpbGwsIGxvZ2dlciwgcGFyc2VTZW12ZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbmltcG9ydCAqIGFzIGh0dHAgZnJvbSAnaHR0cCc7XG5pbXBvcnQgKiBhcyBodHRwcyBmcm9tICdodHRwcyc7XG5cbmltcG9ydCB7XG4gIGNsZWFuU3BhbkRlc2NyaXB0aW9uLFxuICBleHRyYWN0VXJsLFxuICBpc1NlbnRyeVJlcXVlc3QsXG4gIG5vcm1hbGl6ZVJlcXVlc3RBcmdzLFxuICBSZXF1ZXN0TWV0aG9kLFxuICBSZXF1ZXN0TWV0aG9kQXJncyxcbn0gZnJvbSAnLi91dGlscy9odHRwJztcblxuY29uc3QgTk9ERV9WRVJTSU9OID0gcGFyc2VTZW12ZXIocHJvY2Vzcy52ZXJzaW9ucy5ub2RlKTtcblxuLyoqIGh0dHAgbW9kdWxlIGludGVncmF0aW9uICovXG5leHBvcnQgY2xhc3MgSHR0cCBpbXBsZW1lbnRzIEludGVncmF0aW9uIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlkOiBzdHJpbmcgPSAnSHR0cCc7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgbmFtZTogc3RyaW5nID0gSHR0cC5pZDtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2JyZWFkY3J1bWJzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfdHJhY2luZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiB7IGJyZWFkY3J1bWJzPzogYm9vbGVhbjsgdHJhY2luZz86IGJvb2xlYW4gfSA9IHt9KSB7XG4gICAgdGhpcy5fYnJlYWRjcnVtYnMgPSB0eXBlb2Ygb3B0aW9ucy5icmVhZGNydW1icyA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogb3B0aW9ucy5icmVhZGNydW1icztcbiAgICB0aGlzLl90cmFjaW5nID0gdHlwZW9mIG9wdGlvbnMudHJhY2luZyA9PT0gJ3VuZGVmaW5lZCcgPyBmYWxzZSA6IG9wdGlvbnMudHJhY2luZztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldHVwT25jZSgpOiB2b2lkIHtcbiAgICAvLyBObyBuZWVkIHRvIGluc3RydW1lbnQgaWYgd2UgZG9uJ3Qgd2FudCB0byB0cmFjayBhbnl0aGluZ1xuICAgIGlmICghdGhpcy5fYnJlYWRjcnVtYnMgJiYgIXRoaXMuX3RyYWNpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB3cmFwcGVkSGFuZGxlck1ha2VyID0gX2NyZWF0ZVdyYXBwZWRSZXF1ZXN0TWV0aG9kRmFjdG9yeSh0aGlzLl9icmVhZGNydW1icywgdGhpcy5fdHJhY2luZyk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICAgIGNvbnN0IGh0dHBNb2R1bGUgPSByZXF1aXJlKCdodHRwJyk7XG4gICAgZmlsbChodHRwTW9kdWxlLCAnZ2V0Jywgd3JhcHBlZEhhbmRsZXJNYWtlcik7XG4gICAgZmlsbChodHRwTW9kdWxlLCAncmVxdWVzdCcsIHdyYXBwZWRIYW5kbGVyTWFrZXIpO1xuXG4gICAgLy8gTk9URTogUHJpb3IgdG8gTm9kZSA5LCBgaHR0cHNgIHVzZWQgaW50ZXJuYWxzIG9mIGBodHRwYCBtb2R1bGUsIHRodXMgd2UgZG9uJ3QgcGF0Y2ggaXQuXG4gICAgLy8gSWYgd2UgZG8sIHdlJ2QgZ2V0IGRvdWJsZSBicmVhZGNydW1icyBhbmQgZG91YmxlIHNwYW5zIGZvciBgaHR0cHNgIGNhbGxzLlxuICAgIC8vIEl0IGhhcyBiZWVuIGNoYW5nZWQgaW4gTm9kZSA5LCBzbyBmb3IgYWxsIHZlcnNpb25zIGVxdWFsIGFuZCBhYm92ZSwgd2UgcGF0Y2ggYGh0dHBzYCBzZXBhcmF0ZWx5LlxuICAgIGlmIChOT0RFX1ZFUlNJT04ubWFqb3IgJiYgTk9ERV9WRVJTSU9OLm1ham9yID4gOCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcbiAgICAgIGNvbnN0IGh0dHBzTW9kdWxlID0gcmVxdWlyZSgnaHR0cHMnKTtcbiAgICAgIGZpbGwoaHR0cHNNb2R1bGUsICdnZXQnLCB3cmFwcGVkSGFuZGxlck1ha2VyKTtcbiAgICAgIGZpbGwoaHR0cHNNb2R1bGUsICdyZXF1ZXN0Jywgd3JhcHBlZEhhbmRsZXJNYWtlcik7XG4gICAgfVxuICB9XG59XG5cbi8vIGZvciBlYXNlIG9mIHJlYWRpbmcgYmVsb3dcbnR5cGUgT3JpZ2luYWxSZXF1ZXN0TWV0aG9kID0gUmVxdWVzdE1ldGhvZDtcbnR5cGUgV3JhcHBlZFJlcXVlc3RNZXRob2QgPSBSZXF1ZXN0TWV0aG9kO1xudHlwZSBXcmFwcGVkUmVxdWVzdE1ldGhvZEZhY3RvcnkgPSAob3JpZ2luYWw6IE9yaWdpbmFsUmVxdWVzdE1ldGhvZCkgPT4gV3JhcHBlZFJlcXVlc3RNZXRob2Q7XG5cbi8qKlxuICogRnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIGZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgd3JhcHBlZCB2ZXJzaW9ucyBvZiBpbnRlcm5hbCBgcmVxdWVzdGAgYW5kIGBnZXRgIGNhbGxzIHdpdGhpbiBgaHR0cGBcbiAqIGFuZCBgaHR0cHNgIG1vZHVsZXMuIChOQjogTm90IGEgdHlwbyAtIHRoaXMgaXMgYSBjcmVhdG9yXjIhKVxuICpcbiAqIEBwYXJhbSBicmVhZGNydW1ic0VuYWJsZWQgV2hldGhlciBvciBub3QgdG8gcmVjb3JkIG91dGdvaW5nIHJlcXVlc3RzIGFzIGJyZWFkY3J1bWJzXG4gKiBAcGFyYW0gdHJhY2luZ0VuYWJsZWQgV2hldGhlciBvciBub3QgdG8gcmVjb3JkIG91dGdvaW5nIHJlcXVlc3RzIGFzIHRyYWNpbmcgc3BhbnNcbiAqXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHdoaWNoIGFjY2VwdHMgdGhlIGV4aXRpbmcgaGFuZGxlciBhbmQgcmV0dXJucyBhIHdyYXBwZWQgaGFuZGxlclxuICovXG5mdW5jdGlvbiBfY3JlYXRlV3JhcHBlZFJlcXVlc3RNZXRob2RGYWN0b3J5KFxuICBicmVhZGNydW1ic0VuYWJsZWQ6IGJvb2xlYW4sXG4gIHRyYWNpbmdFbmFibGVkOiBib29sZWFuLFxuKTogV3JhcHBlZFJlcXVlc3RNZXRob2RGYWN0b3J5IHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXBwZWRSZXF1ZXN0TWV0aG9kRmFjdG9yeShvcmlnaW5hbFJlcXVlc3RNZXRob2Q6IE9yaWdpbmFsUmVxdWVzdE1ldGhvZCk6IFdyYXBwZWRSZXF1ZXN0TWV0aG9kIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gd3JhcHBlZE1ldGhvZCh0aGlzOiB0eXBlb2YgaHR0cCB8IHR5cGVvZiBodHRwcywgLi4uYXJnczogUmVxdWVzdE1ldGhvZEFyZ3MpOiBodHRwLkNsaWVudFJlcXVlc3Qge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICBjb25zdCBodHRwTW9kdWxlID0gdGhpcztcblxuICAgICAgY29uc3QgcmVxdWVzdEFyZ3MgPSBub3JtYWxpemVSZXF1ZXN0QXJncyh0aGlzLCBhcmdzKTtcbiAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gcmVxdWVzdEFyZ3NbMF07XG4gICAgICBjb25zdCByZXF1ZXN0VXJsID0gZXh0cmFjdFVybChyZXF1ZXN0T3B0aW9ucyk7XG5cbiAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gcmVjb3JkIHJlcXVlc3RzIHRvIFNlbnRyeSBhcyBlaXRoZXIgYnJlYWRjcnVtYnMgb3Igc3BhbnMsIHNvIGp1c3QgdXNlIHRoZSBvcmlnaW5hbCBtZXRob2RcbiAgICAgIGlmIChpc1NlbnRyeVJlcXVlc3QocmVxdWVzdFVybCkpIHtcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVxdWVzdE1ldGhvZC5hcHBseShodHRwTW9kdWxlLCByZXF1ZXN0QXJncyk7XG4gICAgICB9XG5cbiAgICAgIGxldCBzcGFuOiBTcGFuIHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IHBhcmVudFNwYW46IFNwYW4gfCB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gZ2V0Q3VycmVudEh1YigpLmdldFNjb3BlKCk7XG4gICAgICBpZiAoc2NvcGUgJiYgdHJhY2luZ0VuYWJsZWQpIHtcbiAgICAgICAgcGFyZW50U3BhbiA9IHNjb3BlLmdldFNwYW4oKTtcbiAgICAgICAgaWYgKHBhcmVudFNwYW4pIHtcbiAgICAgICAgICBzcGFuID0gcGFyZW50U3Bhbi5zdGFydENoaWxkKHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgJHtyZXF1ZXN0T3B0aW9ucy5tZXRob2QgfHwgJ0dFVCd9ICR7cmVxdWVzdFVybH1gLFxuICAgICAgICAgICAgb3A6ICdodHRwLmNsaWVudCcsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBzZW50cnlUcmFjZUhlYWRlciA9IHNwYW4udG9UcmFjZXBhcmVudCgpO1xuICAgICAgICAgIGxvZ2dlci5sb2coXG4gICAgICAgICAgICBgW1RyYWNpbmddIEFkZGluZyBzZW50cnktdHJhY2UgaGVhZGVyICR7c2VudHJ5VHJhY2VIZWFkZXJ9IHRvIG91dGdvaW5nIHJlcXVlc3QgdG8gJHtyZXF1ZXN0VXJsfTogYCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSB7IC4uLnJlcXVlc3RPcHRpb25zLmhlYWRlcnMsICdzZW50cnktdHJhY2UnOiBzZW50cnlUcmFjZUhlYWRlciB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgIHJldHVybiBvcmlnaW5hbFJlcXVlc3RNZXRob2RcbiAgICAgICAgLmFwcGx5KGh0dHBNb2R1bGUsIHJlcXVlc3RBcmdzKVxuICAgICAgICAub25jZSgncmVzcG9uc2UnLCBmdW5jdGlvbih0aGlzOiBodHRwLkNsaWVudFJlcXVlc3QsIHJlczogaHR0cC5JbmNvbWluZ01lc3NhZ2UpOiB2b2lkIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICAgICAgICBjb25zdCByZXEgPSB0aGlzO1xuICAgICAgICAgIGlmIChicmVhZGNydW1ic0VuYWJsZWQpIHtcbiAgICAgICAgICAgIGFkZFJlcXVlc3RCcmVhZGNydW1iKCdyZXNwb25zZScsIHJlcXVlc3RVcmwsIHJlcSwgcmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRyYWNpbmdFbmFibGVkICYmIHNwYW4pIHtcbiAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSkge1xuICAgICAgICAgICAgICBzcGFuLnNldEh0dHBTdGF0dXMocmVzLnN0YXR1c0NvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Bhbi5kZXNjcmlwdGlvbiA9IGNsZWFuU3BhbkRlc2NyaXB0aW9uKHNwYW4uZGVzY3JpcHRpb24sIHJlcXVlc3RPcHRpb25zLCByZXEpO1xuICAgICAgICAgICAgc3Bhbi5maW5pc2goKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbmNlKCdlcnJvcicsIGZ1bmN0aW9uKHRoaXM6IGh0dHAuQ2xpZW50UmVxdWVzdCk6IHZvaWQge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgICAgIGNvbnN0IHJlcSA9IHRoaXM7XG5cbiAgICAgICAgICBpZiAoYnJlYWRjcnVtYnNFbmFibGVkKSB7XG4gICAgICAgICAgICBhZGRSZXF1ZXN0QnJlYWRjcnVtYignZXJyb3InLCByZXF1ZXN0VXJsLCByZXEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHJhY2luZ0VuYWJsZWQgJiYgc3Bhbikge1xuICAgICAgICAgICAgc3Bhbi5zZXRIdHRwU3RhdHVzKDUwMCk7XG4gICAgICAgICAgICBzcGFuLmRlc2NyaXB0aW9uID0gY2xlYW5TcGFuRGVzY3JpcHRpb24oc3Bhbi5kZXNjcmlwdGlvbiwgcmVxdWVzdE9wdGlvbnMsIHJlcSk7XG4gICAgICAgICAgICBzcGFuLmZpbmlzaCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgfTtcbn1cblxuLyoqXG4gKiBDYXB0dXJlcyBCcmVhZGNydW1iIGJhc2VkIG9uIHByb3ZpZGVkIHJlcXVlc3QvcmVzcG9uc2UgcGFpclxuICovXG5mdW5jdGlvbiBhZGRSZXF1ZXN0QnJlYWRjcnVtYihldmVudDogc3RyaW5nLCB1cmw6IHN0cmluZywgcmVxOiBodHRwLkNsaWVudFJlcXVlc3QsIHJlcz86IGh0dHAuSW5jb21pbmdNZXNzYWdlKTogdm9pZCB7XG4gIGlmICghZ2V0Q3VycmVudEh1YigpLmdldEludGVncmF0aW9uKEh0dHApKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZ2V0Q3VycmVudEh1YigpLmFkZEJyZWFkY3J1bWIoXG4gICAge1xuICAgICAgY2F0ZWdvcnk6ICdodHRwJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbWV0aG9kOiByZXEubWV0aG9kLFxuICAgICAgICBzdGF0dXNfY29kZTogcmVzICYmIHJlcy5zdGF0dXNDb2RlLFxuICAgICAgICB1cmwsXG4gICAgICB9LFxuICAgICAgdHlwZTogJ2h0dHAnLFxuICAgIH0sXG4gICAge1xuICAgICAgZXZlbnQsXG4gICAgICByZXF1ZXN0OiByZXEsXG4gICAgICByZXNwb25zZTogcmVzLFxuICAgIH0sXG4gICk7XG59XG4iLCAiaW1wb3J0IHsgZ2V0Q3VycmVudEh1YiB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyBmb3JnZXQsIGxvZ2dlciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5pbXBvcnQgeyBOb2RlQ2xpZW50IH0gZnJvbSAnLi4vLi4vY2xpZW50JztcblxuY29uc3QgREVGQVVMVF9TSFVURE9XTl9USU1FT1VUID0gMjAwMDtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2dBbmRFeGl0UHJvY2VzcyhlcnJvcjogRXJyb3IpOiB2b2lkIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgY29uc29sZS5lcnJvcihlcnJvciAmJiBlcnJvci5zdGFjayA/IGVycm9yLnN0YWNrIDogZXJyb3IpO1xuXG4gIGNvbnN0IGNsaWVudCA9IGdldEN1cnJlbnRIdWIoKS5nZXRDbGllbnQ8Tm9kZUNsaWVudD4oKTtcblxuICBpZiAoY2xpZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICBsb2dnZXIud2FybignTm8gTm9kZUNsaWVudCB3YXMgZGVmaW5lZCwgd2UgYXJlIGV4aXRpbmcgdGhlIHByb2Nlc3Mgbm93LicpO1xuICAgIGdsb2JhbC5wcm9jZXNzLmV4aXQoMSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgb3B0aW9ucyA9IGNsaWVudC5nZXRPcHRpb25zKCk7XG4gIGNvbnN0IHRpbWVvdXQgPVxuICAgIChvcHRpb25zICYmIG9wdGlvbnMuc2h1dGRvd25UaW1lb3V0ICYmIG9wdGlvbnMuc2h1dGRvd25UaW1lb3V0ID4gMCAmJiBvcHRpb25zLnNodXRkb3duVGltZW91dCkgfHxcbiAgICBERUZBVUxUX1NIVVRET1dOX1RJTUVPVVQ7XG4gIGZvcmdldChcbiAgICBjbGllbnQuY2xvc2UodGltZW91dCkudGhlbigocmVzdWx0OiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICBsb2dnZXIud2FybignV2UgcmVhY2hlZCB0aGUgdGltZW91dCBmb3IgZW1wdHlpbmcgdGhlIHJlcXVlc3QgYnVmZmVyLCBzdGlsbCBleGl0aW5nIG5vdyEnKTtcbiAgICAgIH1cbiAgICAgIGdsb2JhbC5wcm9jZXNzLmV4aXQoMSk7XG4gICAgfSksXG4gICk7XG59XG4iLCAiaW1wb3J0IHsgZ2V0Q3VycmVudEh1YiwgU2NvcGUgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgSW50ZWdyYXRpb24sIFNldmVyaXR5IH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuaW1wb3J0IHsgTm9kZUNsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XG5pbXBvcnQgeyBsb2dBbmRFeGl0UHJvY2VzcyB9IGZyb20gJy4vdXRpbHMvZXJyb3JoYW5kbGluZyc7XG5cbnR5cGUgT25GYXRhbEVycm9ySGFuZGxlciA9IChmaXJzdEVycm9yOiBFcnJvciwgc2Vjb25kRXJyb3I/OiBFcnJvcikgPT4gdm9pZDtcblxuLyoqIEdsb2JhbCBQcm9taXNlIFJlamVjdGlvbiBoYW5kbGVyICovXG5leHBvcnQgY2xhc3MgT25VbmNhdWdodEV4Y2VwdGlvbiBpbXBsZW1lbnRzIEludGVncmF0aW9uIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlkOiBzdHJpbmcgPSAnT25VbmNhdWdodEV4Y2VwdGlvbic7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgbmFtZTogc3RyaW5nID0gT25VbmNhdWdodEV4Y2VwdGlvbi5pZDtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBoYW5kbGVyOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkID0gdGhpcy5fbWFrZUVycm9ySGFuZGxlcigpO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IHtcbiAgICAgIC8qKlxuICAgICAgICogRGVmYXVsdCBvbkZhdGFsRXJyb3IgaGFuZGxlclxuICAgICAgICogQHBhcmFtIGZpcnN0RXJyb3IgRXJyb3IgdGhhdCBoYXMgYmVlbiB0aHJvd25cbiAgICAgICAqIEBwYXJhbSBzZWNvbmRFcnJvciBJZiB0aGlzIHdhcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMgdGhpcyB3aWxsIGJlIHNldFxuICAgICAgICovXG4gICAgICBvbkZhdGFsRXJyb3I/KGZpcnN0RXJyb3I6IEVycm9yLCBzZWNvbmRFcnJvcj86IEVycm9yKTogdm9pZDtcbiAgICB9ID0ge30sXG4gICkge31cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0dXBPbmNlKCk6IHZvaWQge1xuICAgIGdsb2JhbC5wcm9jZXNzLm9uKCd1bmNhdWdodEV4Y2VwdGlvbicsIHRoaXMuaGFuZGxlci5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaGlkZGVuXG4gICAqL1xuICBwcml2YXRlIF9tYWtlRXJyb3JIYW5kbGVyKCk6IChlcnJvcjogRXJyb3IpID0+IHZvaWQge1xuICAgIGNvbnN0IHRpbWVvdXQgPSAyMDAwO1xuICAgIGxldCBjYXVnaHRGaXJzdEVycm9yOiBib29sZWFuID0gZmFsc2U7XG4gICAgbGV0IGNhdWdodFNlY29uZEVycm9yOiBib29sZWFuID0gZmFsc2U7XG4gICAgbGV0IGNhbGxlZEZhdGFsRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBsZXQgZmlyc3RFcnJvcjogRXJyb3I7XG5cbiAgICByZXR1cm4gKGVycm9yOiBFcnJvcik6IHZvaWQgPT4ge1xuICAgICAgbGV0IG9uRmF0YWxFcnJvcjogT25GYXRhbEVycm9ySGFuZGxlciA9IGxvZ0FuZEV4aXRQcm9jZXNzO1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0Q3VycmVudEh1YigpLmdldENsaWVudDxOb2RlQ2xpZW50PigpO1xuXG4gICAgICBpZiAodGhpcy5fb3B0aW9ucy5vbkZhdGFsRXJyb3IpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICAgICAgICBvbkZhdGFsRXJyb3IgPSB0aGlzLl9vcHRpb25zLm9uRmF0YWxFcnJvcjtcbiAgICAgIH0gZWxzZSBpZiAoY2xpZW50ICYmIGNsaWVudC5nZXRPcHRpb25zKCkub25GYXRhbEVycm9yKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICAgICAgb25GYXRhbEVycm9yID0gY2xpZW50LmdldE9wdGlvbnMoKS5vbkZhdGFsRXJyb3IgYXMgT25GYXRhbEVycm9ySGFuZGxlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFjYXVnaHRGaXJzdEVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh1YiA9IGdldEN1cnJlbnRIdWIoKTtcblxuICAgICAgICAvLyB0aGlzIGlzIHRoZSBmaXJzdCB1bmNhdWdodCBlcnJvciBhbmQgdGhlIHVsdGltYXRlIHJlYXNvbiBmb3Igc2h1dHRpbmcgZG93blxuICAgICAgICAvLyB3ZSB3YW50IHRvIGRvIGFic29sdXRlbHkgZXZlcnl0aGluZyBwb3NzaWJsZSB0byBlbnN1cmUgaXQgZ2V0cyBjYXB0dXJlZFxuICAgICAgICAvLyBhbHNvIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGdvIHJlY3Vyc2lvbiBjcmF6eSBpZiBtb3JlIGVycm9ycyBoYXBwZW4gYWZ0ZXIgdGhpcyBvbmVcbiAgICAgICAgZmlyc3RFcnJvciA9IGVycm9yO1xuICAgICAgICBjYXVnaHRGaXJzdEVycm9yID0gdHJ1ZTtcblxuICAgICAgICBpZiAoaHViLmdldEludGVncmF0aW9uKE9uVW5jYXVnaHRFeGNlcHRpb24pKSB7XG4gICAgICAgICAgaHViLndpdGhTY29wZSgoc2NvcGU6IFNjb3BlKSA9PiB7XG4gICAgICAgICAgICBzY29wZS5zZXRMZXZlbChTZXZlcml0eS5GYXRhbCk7XG4gICAgICAgICAgICBodWIuY2FwdHVyZUV4Y2VwdGlvbihlcnJvciwge1xuICAgICAgICAgICAgICBvcmlnaW5hbEV4Y2VwdGlvbjogZXJyb3IsXG4gICAgICAgICAgICAgIGRhdGE6IHsgbWVjaGFuaXNtOiB7IGhhbmRsZWQ6IGZhbHNlLCB0eXBlOiAnb251bmNhdWdodGV4Y2VwdGlvbicgfSB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWNhbGxlZEZhdGFsRXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FsbGVkRmF0YWxFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgIG9uRmF0YWxFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFjYWxsZWRGYXRhbEVycm9yKSB7XG4gICAgICAgICAgICBjYWxsZWRGYXRhbEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIG9uRmF0YWxFcnJvcihlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNhbGxlZEZhdGFsRXJyb3IpIHtcbiAgICAgICAgLy8gd2UgaGl0IGFuIGVycm9yICphZnRlciogY2FsbGluZyBvbkZhdGFsRXJyb3IgLSBwcmV0dHkgYm9uZWQgYXQgdGhpcyBwb2ludCwganVzdCBzaHV0IGl0IGRvd25cbiAgICAgICAgbG9nZ2VyLndhcm4oJ3VuY2F1Z2h0IGV4Y2VwdGlvbiBhZnRlciBjYWxsaW5nIGZhdGFsIGVycm9yIHNodXRkb3duIGNhbGxiYWNrIC0gdGhpcyBpcyBiYWQhIGZvcmNpbmcgc2h1dGRvd24nKTtcbiAgICAgICAgbG9nQW5kRXhpdFByb2Nlc3MoZXJyb3IpO1xuICAgICAgfSBlbHNlIGlmICghY2F1Z2h0U2Vjb25kRXJyb3IpIHtcbiAgICAgICAgLy8gdHdvIGNhc2VzIGZvciBob3cgd2UgY2FuIGhpdCB0aGlzIGJyYW5jaDpcbiAgICAgICAgLy8gICAtIGNhcHR1cmluZyBvZiBmaXJzdCBlcnJvciBibGV3IHVwIGFuZCB3ZSBqdXN0IGNhdWdodCB0aGUgZXhjZXB0aW9uIGZyb20gdGhhdFxuICAgICAgICAvLyAgICAgLSBxdWl0IHRyeWluZyB0byBjYXB0dXJlLCBwcm9jZWVkIHdpdGggc2h1dGRvd25cbiAgICAgICAgLy8gICAtIGEgc2Vjb25kIGluZGVwZW5kZW50IGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIGZpcnN0IGVycm9yIHRvIGNhcHR1cmVcbiAgICAgICAgLy8gICAgIC0gd2FudCB0byBhdm9pZCBjYXVzaW5nIHByZW1hdHVyZSBzaHV0ZG93biBiZWZvcmUgZmlyc3QgZXJyb3IgY2FwdHVyZSBmaW5pc2hlc1xuICAgICAgICAvLyBpdCdzIGhhcmQgdG8gaW1tZWRpYXRlbHkgdGVsbCBjYXNlIDEgZnJvbSBjYXNlIDIgd2l0aG91dCBkb2luZyBzb21lIGZhbmN5L3F1ZXN0aW9uYWJsZSBkb21haW4gc3R1ZmZcbiAgICAgICAgLy8gc28gbGV0J3MgaW5zdGVhZCBqdXN0IGRlbGF5IGEgYml0IGJlZm9yZSB3ZSBwcm9jZWVkIHdpdGggb3VyIGFjdGlvbiBoZXJlXG4gICAgICAgIC8vIGluIGNhc2UgMSwgd2UganVzdCB3YWl0IGEgYml0IHVubmVjZXNzYXJpbHkgYnV0IHVsdGltYXRlbHkgZG8gdGhlIHNhbWUgdGhpbmdcbiAgICAgICAgLy8gaW4gY2FzZSAyLCB0aGUgZGVsYXkgaG9wZWZ1bGx5IG1hZGUgdXMgd2FpdCBsb25nIGVub3VnaCBmb3IgdGhlIGNhcHR1cmUgdG8gZmluaXNoXG4gICAgICAgIC8vIHR3byBwb3RlbnRpYWwgbm9uaWRlYWwgb3V0Y29tZXM6XG4gICAgICAgIC8vICAgbm9uaWRlYWwgY2FzZSAxOiBjYXB0dXJpbmcgZmFpbHMgZmFzdCwgd2Ugc2l0IGFyb3VuZCBmb3IgYSBmZXcgc2Vjb25kcyB1bm5lY2Vzc2FyaWx5IGJlZm9yZSBwcm9jZWVkaW5nIGNvcnJlY3RseSBieSBjYWxsaW5nIG9uRmF0YWxFcnJvclxuICAgICAgICAvLyAgIG5vbmlkZWFsIGNhc2UgMjogY2FzZSAyIGhhcHBlbnMsIDFzdCBlcnJvciBpcyBjYXB0dXJlZCBidXQgc2xvd2x5LCB0aW1lb3V0IGNvbXBsZXRlcyBiZWZvcmUgY2FwdHVyZSBhbmQgd2UgdHJlYXQgc2Vjb25kIGVycm9yIGFzIHRoZSBzZW5kRXJyIG9mIChub25leGlzdGVudCkgZmFpbHVyZSBmcm9tIHRyeWluZyB0byBjYXB0dXJlIGZpcnN0IGVycm9yXG4gICAgICAgIC8vIG5vdGUgdGhhdCBhZnRlciBoaXR0aW5nIHRoaXMgYnJhbmNoLCB3ZSBtaWdodCBjYXRjaCBtb3JlIGVycm9ycyB3aGVyZSAoY2F1Z2h0U2Vjb25kRXJyb3IgJiYgIWNhbGxlZEZhdGFsRXJyb3IpXG4gICAgICAgIC8vICAgd2UgaWdub3JlIHRoZW0gLSB0aGV5IGRvbid0IG1hdHRlciB0byB1cywgd2UncmUganVzdCB3YWl0aW5nIGZvciB0aGUgc2Vjb25kIGVycm9yIHRpbWVvdXQgdG8gZmluaXNoXG4gICAgICAgIGNhdWdodFNlY29uZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKCFjYWxsZWRGYXRhbEVycm9yKSB7XG4gICAgICAgICAgICAvLyBpdCB3YXMgcHJvYmFibHkgY2FzZSAxLCBsZXQncyB0cmVhdCBlcnIgYXMgdGhlIHNlbmRFcnIgYW5kIGNhbGwgb25GYXRhbEVycm9yXG4gICAgICAgICAgICBjYWxsZWRGYXRhbEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIG9uRmF0YWxFcnJvcihmaXJzdEVycm9yLCBlcnJvcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGl0IHdhcyBwcm9iYWJseSBjYXNlIDIsIG91ciBmaXJzdCBlcnJvciBmaW5pc2hlZCBjYXB0dXJpbmcgd2hpbGUgd2Ugd2FpdGVkLCBjb29sLCBkbyBub3RoaW5nXG4gICAgICAgICAgfVxuICAgICAgICB9LCB0aW1lb3V0KTsgLy8gY2FwdHVyaW5nIGNvdWxkIHRha2UgYXQgbGVhc3Qgc2VuZFRpbWVvdXQgdG8gZmFpbCwgcGx1cyBhbiBhcmJpdHJhcnkgc2Vjb25kIGZvciBob3cgbG9uZyBpdCB0YWtlcyB0byBjb2xsZWN0IHN1cnJvdW5kaW5nIHNvdXJjZSBldGNcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgZ2V0Q3VycmVudEh1YiwgU2NvcGUgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgSW50ZWdyYXRpb24gfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGNvbnNvbGVTYW5kYm94IH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmltcG9ydCB7IGxvZ0FuZEV4aXRQcm9jZXNzIH0gZnJvbSAnLi91dGlscy9lcnJvcmhhbmRsaW5nJztcblxudHlwZSBVbmhhbmRsZWRSZWplY3Rpb25Nb2RlID0gJ25vbmUnIHwgJ3dhcm4nIHwgJ3N0cmljdCc7XG5cbi8qKiBHbG9iYWwgUHJvbWlzZSBSZWplY3Rpb24gaGFuZGxlciAqL1xuZXhwb3J0IGNsYXNzIE9uVW5oYW5kbGVkUmVqZWN0aW9uIGltcGxlbWVudHMgSW50ZWdyYXRpb24ge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaWQ6IHN0cmluZyA9ICdPblVuaGFuZGxlZFJlamVjdGlvbic7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgbmFtZTogc3RyaW5nID0gT25VbmhhbmRsZWRSZWplY3Rpb24uaWQ7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczoge1xuICAgICAgLyoqXG4gICAgICAgKiBPcHRpb24gZGVjaWRpbmcgd2hhdCB0byBkbyBhZnRlciBjYXB0dXJpbmcgdW5oYW5kbGVkUmVqZWN0aW9uLFxuICAgICAgICogdGhhdCBtaW1pY2tzIGJlaGF2aW9yIG9mIG5vZGUncyAtLXVuaGFuZGxlZC1yZWplY3Rpb24gZmxhZy5cbiAgICAgICAqL1xuICAgICAgbW9kZTogVW5oYW5kbGVkUmVqZWN0aW9uTW9kZTtcbiAgICB9ID0geyBtb2RlOiAnd2FybicgfSxcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldHVwT25jZSgpOiB2b2lkIHtcbiAgICBnbG9iYWwucHJvY2Vzcy5vbigndW5oYW5kbGVkUmVqZWN0aW9uJywgdGhpcy5zZW5kVW5oYW5kbGVkUHJvbWlzZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGFuIGV4Y2VwdGlvbiB3aXRoIHJlYXNvblxuICAgKiBAcGFyYW0gcmVhc29uIHN0cmluZ1xuICAgKiBAcGFyYW0gcHJvbWlzZSBwcm9taXNlXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlcywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwdWJsaWMgc2VuZFVuaGFuZGxlZFByb21pc2UocmVhc29uOiBhbnksIHByb21pc2U6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGh1YiA9IGdldEN1cnJlbnRIdWIoKTtcblxuICAgIGlmICghaHViLmdldEludGVncmF0aW9uKE9uVW5oYW5kbGVkUmVqZWN0aW9uKSkge1xuICAgICAgdGhpcy5faGFuZGxlUmVqZWN0aW9uKHJlYXNvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovXG4gICAgY29uc3QgY29udGV4dCA9IChwcm9taXNlLmRvbWFpbiAmJiBwcm9taXNlLmRvbWFpbi5zZW50cnlDb250ZXh0KSB8fCB7fTtcblxuICAgIGh1Yi53aXRoU2NvcGUoKHNjb3BlOiBTY29wZSkgPT4ge1xuICAgICAgc2NvcGUuc2V0RXh0cmEoJ3VuaGFuZGxlZFByb21pc2VSZWplY3Rpb24nLCB0cnVlKTtcblxuICAgICAgLy8gUHJlc2VydmUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCByYXZlbi1ub2RlIGZvciBub3dcbiAgICAgIGlmIChjb250ZXh0LnVzZXIpIHtcbiAgICAgICAgc2NvcGUuc2V0VXNlcihjb250ZXh0LnVzZXIpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRleHQudGFncykge1xuICAgICAgICBzY29wZS5zZXRUYWdzKGNvbnRleHQudGFncyk7XG4gICAgICB9XG4gICAgICBpZiAoY29udGV4dC5leHRyYSkge1xuICAgICAgICBzY29wZS5zZXRFeHRyYXMoY29udGV4dC5leHRyYSk7XG4gICAgICB9XG5cbiAgICAgIGh1Yi5jYXB0dXJlRXhjZXB0aW9uKHJlYXNvbiwge1xuICAgICAgICBvcmlnaW5hbEV4Y2VwdGlvbjogcHJvbWlzZSxcbiAgICAgICAgZGF0YTogeyBtZWNoYW5pc206IHsgaGFuZGxlZDogZmFsc2UsIHR5cGU6ICdvbnVuaGFuZGxlZHJlamVjdGlvbicgfSB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovXG5cbiAgICB0aGlzLl9oYW5kbGVSZWplY3Rpb24ocmVhc29uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVyIGZvciBgbW9kZWAgb3B0aW9uXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwcml2YXRlIF9oYW5kbGVSZWplY3Rpb24ocmVhc29uOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi83Y2Y2ZjllOTY0YWEwMDc3Mjk2NTM5MWMyM2FjZGE2ZDcxOTcyYTlhL2xpYi9pbnRlcm5hbC9wcm9jZXNzL3Byb21pc2VzLmpzI0wyMzQtTDI0MFxuICAgIGNvbnN0IHJlamVjdGlvbldhcm5pbmcgPVxuICAgICAgJ1RoaXMgZXJyb3Igb3JpZ2luYXRlZCBlaXRoZXIgYnkgJyArXG4gICAgICAndGhyb3dpbmcgaW5zaWRlIG9mIGFuIGFzeW5jIGZ1bmN0aW9uIHdpdGhvdXQgYSBjYXRjaCBibG9jaywgJyArXG4gICAgICAnb3IgYnkgcmVqZWN0aW5nIGEgcHJvbWlzZSB3aGljaCB3YXMgbm90IGhhbmRsZWQgd2l0aCAuY2F0Y2goKS4nICtcbiAgICAgICcgVGhlIHByb21pc2UgcmVqZWN0ZWQgd2l0aCB0aGUgcmVhc29uOic7XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4gICAgaWYgKHRoaXMuX29wdGlvbnMubW9kZSA9PT0gJ3dhcm4nKSB7XG4gICAgICBjb25zb2xlU2FuZGJveCgoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUud2FybihyZWplY3Rpb25XYXJuaW5nKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICBjb25zb2xlLmVycm9yKHJlYXNvbiAmJiByZWFzb24uc3RhY2sgPyByZWFzb24uc3RhY2sgOiByZWFzb24pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9vcHRpb25zLm1vZGUgPT09ICdzdHJpY3QnKSB7XG4gICAgICBjb25zb2xlU2FuZGJveCgoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUud2FybihyZWplY3Rpb25XYXJuaW5nKTtcbiAgICAgIH0pO1xuICAgICAgbG9nQW5kRXhpdFByb2Nlc3MocmVhc29uKTtcbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBhZGRHbG9iYWxFdmVudFByb2Nlc3NvciwgZ2V0Q3VycmVudEh1YiB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyBFdmVudCwgRXZlbnRIaW50LCBFeGNlcHRpb24sIEV4dGVuZGVkRXJyb3IsIEludGVncmF0aW9uIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBpc0luc3RhbmNlT2YsIFN5bmNQcm9taXNlIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmltcG9ydCB7IGdldEV4Y2VwdGlvbkZyb21FcnJvciB9IGZyb20gJy4uL3BhcnNlcnMnO1xuXG5jb25zdCBERUZBVUxUX0tFWSA9ICdjYXVzZSc7XG5jb25zdCBERUZBVUxUX0xJTUlUID0gNTtcblxuLyoqIEFkZHMgU0RLIGluZm8gdG8gYW4gZXZlbnQuICovXG5leHBvcnQgY2xhc3MgTGlua2VkRXJyb3JzIGltcGxlbWVudHMgSW50ZWdyYXRpb24ge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaWQ6IHN0cmluZyA9ICdMaW5rZWRFcnJvcnMnO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZyA9IExpbmtlZEVycm9ycy5pZDtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2tleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfbGltaXQ6IG51bWJlcjtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiB7IGtleT86IHN0cmluZzsgbGltaXQ/OiBudW1iZXIgfSA9IHt9KSB7XG4gICAgdGhpcy5fa2V5ID0gb3B0aW9ucy5rZXkgfHwgREVGQVVMVF9LRVk7XG4gICAgdGhpcy5fbGltaXQgPSBvcHRpb25zLmxpbWl0IHx8IERFRkFVTFRfTElNSVQ7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXR1cE9uY2UoKTogdm9pZCB7XG4gICAgYWRkR2xvYmFsRXZlbnRQcm9jZXNzb3IoKGV2ZW50OiBFdmVudCwgaGludD86IEV2ZW50SGludCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZiA9IGdldEN1cnJlbnRIdWIoKS5nZXRJbnRlZ3JhdGlvbihMaW5rZWRFcnJvcnMpO1xuICAgICAgaWYgKHNlbGYpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHNlbGYuX2hhbmRsZXIgJiYgc2VsZi5faGFuZGxlci5iaW5kKHNlbGYpO1xuICAgICAgICByZXR1cm4gdHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicgPyBoYW5kbGVyKGV2ZW50LCBoaW50KSA6IGV2ZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV2ZW50O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwcml2YXRlIF9oYW5kbGVyKGV2ZW50OiBFdmVudCwgaGludD86IEV2ZW50SGludCk6IFByb21pc2VMaWtlPEV2ZW50PiB7XG4gICAgaWYgKCFldmVudC5leGNlcHRpb24gfHwgIWV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMgfHwgIWhpbnQgfHwgIWlzSW5zdGFuY2VPZihoaW50Lm9yaWdpbmFsRXhjZXB0aW9uLCBFcnJvcikpIHtcbiAgICAgIHJldHVybiBTeW5jUHJvbWlzZS5yZXNvbHZlKGV2ZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlPEV2ZW50PihyZXNvbHZlID0+IHtcbiAgICAgIHZvaWQgdGhpcy5fd2Fsa0Vycm9yVHJlZShoaW50Lm9yaWdpbmFsRXhjZXB0aW9uIGFzIEVycm9yLCB0aGlzLl9rZXkpXG4gICAgICAgIC50aGVuKChsaW5rZWRFcnJvcnM6IEV4Y2VwdGlvbltdKSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LmV4Y2VwdGlvbiAmJiBldmVudC5leGNlcHRpb24udmFsdWVzKSB7XG4gICAgICAgICAgICBldmVudC5leGNlcHRpb24udmFsdWVzID0gWy4uLmxpbmtlZEVycm9ycywgLi4uZXZlbnQuZXhjZXB0aW9uLnZhbHVlc107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc29sdmUoZXZlbnQpO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbihudWxsLCAoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShldmVudCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwcml2YXRlIF93YWxrRXJyb3JUcmVlKGVycm9yOiBFeHRlbmRlZEVycm9yLCBrZXk6IHN0cmluZywgc3RhY2s6IEV4Y2VwdGlvbltdID0gW10pOiBQcm9taXNlTGlrZTxFeGNlcHRpb25bXT4ge1xuICAgIGlmICghaXNJbnN0YW5jZU9mKGVycm9yW2tleV0sIEVycm9yKSB8fCBzdGFjay5sZW5ndGggKyAxID49IHRoaXMuX2xpbWl0KSB7XG4gICAgICByZXR1cm4gU3luY1Byb21pc2UucmVzb2x2ZShzdGFjayk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgU3luY1Byb21pc2U8RXhjZXB0aW9uW10+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHZvaWQgZ2V0RXhjZXB0aW9uRnJvbUVycm9yKGVycm9yW2tleV0pXG4gICAgICAgIC50aGVuKChleGNlcHRpb246IEV4Y2VwdGlvbikgPT4ge1xuICAgICAgICAgIHZvaWQgdGhpcy5fd2Fsa0Vycm9yVHJlZShlcnJvcltrZXldLCBrZXksIFtleGNlcHRpb24sIC4uLnN0YWNrXSlcbiAgICAgICAgICAgIC50aGVuKHJlc29sdmUpXG4gICAgICAgICAgICAudGhlbihudWxsLCAoKSA9PiB7XG4gICAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKG51bGwsICgpID0+IHtcbiAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBFdmVudFByb2Nlc3NvciwgSHViLCBJbnRlZ3JhdGlvbiB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gJ3BhdGgnO1xuXG5sZXQgbW9kdWxlQ2FjaGU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbi8qKiBFeHRyYWN0IGluZm9ybWF0aW9uIGFib3V0IHBhdGhzICovXG5mdW5jdGlvbiBnZXRQYXRocygpOiBzdHJpbmdbXSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHJlcXVpcmUuY2FjaGUgPyBPYmplY3Qua2V5cyhyZXF1aXJlLmNhY2hlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA6IFtdO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbi8qKiBFeHRyYWN0IGluZm9ybWF0aW9uIGFib3V0IHBhY2thZ2UuanNvbiBtb2R1bGVzICovXG5mdW5jdGlvbiBjb2xsZWN0TW9kdWxlcygpOiB7XG4gIFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7XG59IHtcbiAgY29uc3QgbWFpblBhdGhzID0gKHJlcXVpcmUubWFpbiAmJiByZXF1aXJlLm1haW4ucGF0aHMpIHx8IFtdO1xuICBjb25zdCBwYXRocyA9IGdldFBhdGhzKCk7XG4gIGNvbnN0IGluZm9zOiB7XG4gICAgW25hbWU6IHN0cmluZ106IHN0cmluZztcbiAgfSA9IHt9O1xuICBjb25zdCBzZWVuOiB7XG4gICAgW3BhdGg6IHN0cmluZ106IGJvb2xlYW47XG4gIH0gPSB7fTtcblxuICBwYXRocy5mb3JFYWNoKHBhdGggPT4ge1xuICAgIGxldCBkaXIgPSBwYXRoO1xuXG4gICAgLyoqIFRyYXZlcnNlIGRpcmVjdG9yaWVzIHVwd2FyZCBpbiB0aGUgc2VhcmNoIG9mIHBhY2thZ2UuanNvbiBmaWxlICovXG4gICAgY29uc3QgdXBkaXIgPSAoKTogdm9pZCB8ICgoKSA9PiB2b2lkKSA9PiB7XG4gICAgICBjb25zdCBvcmlnID0gZGlyO1xuICAgICAgZGlyID0gZGlybmFtZShvcmlnKTtcblxuICAgICAgaWYgKCFkaXIgfHwgb3JpZyA9PT0gZGlyIHx8IHNlZW5bb3JpZ10pIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChtYWluUGF0aHMuaW5kZXhPZihkaXIpIDwgMCkge1xuICAgICAgICByZXR1cm4gdXBkaXIoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGtnZmlsZSA9IGpvaW4ob3JpZywgJ3BhY2thZ2UuanNvbicpO1xuICAgICAgc2VlbltvcmlnXSA9IHRydWU7XG5cbiAgICAgIGlmICghZXhpc3RzU3luYyhwa2dmaWxlKSkge1xuICAgICAgICByZXR1cm4gdXBkaXIoKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaW5mbyA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBrZ2ZpbGUsICd1dGY4JykpIGFzIHtcbiAgICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgICAgdmVyc2lvbjogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgICBpbmZvc1tpbmZvLm5hbWVdID0gaW5mby52ZXJzaW9uO1xuICAgICAgfSBjYXRjaCAoX29PKSB7XG4gICAgICAgIC8vIG5vLWVtcHR5XG4gICAgICB9XG4gICAgfTtcblxuICAgIHVwZGlyKCk7XG4gIH0pO1xuXG4gIHJldHVybiBpbmZvcztcbn1cblxuLyoqIEFkZCBub2RlIG1vZHVsZXMgLyBwYWNrYWdlcyB0byB0aGUgZXZlbnQgKi9cbmV4cG9ydCBjbGFzcyBNb2R1bGVzIGltcGxlbWVudHMgSW50ZWdyYXRpb24ge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaWQ6IHN0cmluZyA9ICdNb2R1bGVzJztcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSBNb2R1bGVzLmlkO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldHVwT25jZShhZGRHbG9iYWxFdmVudFByb2Nlc3NvcjogKGNhbGxiYWNrOiBFdmVudFByb2Nlc3NvcikgPT4gdm9pZCwgZ2V0Q3VycmVudEh1YjogKCkgPT4gSHViKTogdm9pZCB7XG4gICAgYWRkR2xvYmFsRXZlbnRQcm9jZXNzb3IoZXZlbnQgPT4ge1xuICAgICAgaWYgKCFnZXRDdXJyZW50SHViKCkuZ2V0SW50ZWdyYXRpb24oTW9kdWxlcykpIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgIG1vZHVsZXM6IHRoaXMuX2dldE1vZHVsZXMoKSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKiogRmV0Y2hlcyB0aGUgbGlzdCBvZiBtb2R1bGVzIGFuZCB0aGUgdmVyc2lvbnMgbG9hZGVkIGJ5IHRoZSBlbnRyeSBmaWxlIGZvciB5b3VyIG5vZGUuanMgYXBwLiAqL1xuICBwcml2YXRlIF9nZXRNb2R1bGVzKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIGlmICghbW9kdWxlQ2FjaGUpIHtcbiAgICAgIG1vZHVsZUNhY2hlID0gY29sbGVjdE1vZHVsZXMoKTtcbiAgICB9XG4gICAgcmV0dXJuIG1vZHVsZUNhY2hlO1xuICB9XG59XG4iLCAiZXhwb3J0IHsgQ29uc29sZSB9IGZyb20gJy4vY29uc29sZSc7XG5leHBvcnQgeyBIdHRwIH0gZnJvbSAnLi9odHRwJztcbmV4cG9ydCB7IE9uVW5jYXVnaHRFeGNlcHRpb24gfSBmcm9tICcuL29udW5jYXVnaHRleGNlcHRpb24nO1xuZXhwb3J0IHsgT25VbmhhbmRsZWRSZWplY3Rpb24gfSBmcm9tICcuL29udW5oYW5kbGVkcmVqZWN0aW9uJztcbmV4cG9ydCB7IExpbmtlZEVycm9ycyB9IGZyb20gJy4vbGlua2VkZXJyb3JzJztcbmV4cG9ydCB7IE1vZHVsZXMgfSBmcm9tICcuL21vZHVsZXMnO1xuIiwgImltcG9ydCB7IGdldEN1cnJlbnRIdWIsIGluaXRBbmRCaW5kLCBJbnRlZ3JhdGlvbnMgYXMgQ29yZUludGVncmF0aW9ucyB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyBnZXRNYWluQ2Fycmllciwgc2V0SHViT25DYXJyaWVyIH0gZnJvbSAnQHNlbnRyeS9odWInO1xuaW1wb3J0IHsgU2Vzc2lvblN0YXR1cyB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0LCBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbmltcG9ydCAqIGFzIGRvbWFpbiBmcm9tICdkb21haW4nO1xuXG5pbXBvcnQgeyBOb2RlQ2xpZW50IH0gZnJvbSAnLi9jbGllbnQnO1xuaW1wb3J0IHsgQ29uc29sZSwgSHR0cCwgTGlua2VkRXJyb3JzLCBPblVuY2F1Z2h0RXhjZXB0aW9uLCBPblVuaGFuZGxlZFJlamVjdGlvbiB9IGZyb20gJy4vaW50ZWdyYXRpb25zJztcbmltcG9ydCB7IE5vZGVPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0SW50ZWdyYXRpb25zID0gW1xuICAvLyBDb21tb25cbiAgbmV3IENvcmVJbnRlZ3JhdGlvbnMuSW5ib3VuZEZpbHRlcnMoKSxcbiAgbmV3IENvcmVJbnRlZ3JhdGlvbnMuRnVuY3Rpb25Ub1N0cmluZygpLFxuICAvLyBOYXRpdmUgV3JhcHBlcnNcbiAgbmV3IENvbnNvbGUoKSxcbiAgbmV3IEh0dHAoKSxcbiAgLy8gR2xvYmFsIEhhbmRsZXJzXG4gIG5ldyBPblVuY2F1Z2h0RXhjZXB0aW9uKCksXG4gIG5ldyBPblVuaGFuZGxlZFJlamVjdGlvbigpLFxuICAvLyBNaXNjXG4gIG5ldyBMaW5rZWRFcnJvcnMoKSxcbl07XG5cbi8qKlxuICogVGhlIFNlbnRyeSBOb2RlIFNESyBDbGllbnQuXG4gKlxuICogVG8gdXNlIHRoaXMgU0RLLCBjYWxsIHRoZSB7QGxpbmsgaW5pdH0gZnVuY3Rpb24gYXMgZWFybHkgYXMgcG9zc2libGUgaW4gdGhlXG4gKiBtYWluIGVudHJ5IG1vZHVsZS4gVG8gc2V0IGNvbnRleHQgaW5mb3JtYXRpb24gb3Igc2VuZCBtYW51YWwgZXZlbnRzLCB1c2UgdGhlXG4gKiBwcm92aWRlZCBtZXRob2RzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqXG4gKiBjb25zdCB7IGluaXQgfSA9IHJlcXVpcmUoJ0BzZW50cnkvbm9kZScpO1xuICpcbiAqIGluaXQoe1xuICogICBkc246ICdfX0RTTl9fJyxcbiAqICAgLy8gLi4uXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqXG4gKiBjb25zdCB7IGNvbmZpZ3VyZVNjb3BlIH0gPSByZXF1aXJlKCdAc2VudHJ5L25vZGUnKTtcbiAqIGNvbmZpZ3VyZVNjb3BlKChzY29wZTogU2NvcGUpID0+IHtcbiAqICAgc2NvcGUuc2V0RXh0cmEoeyBiYXR0ZXJ5OiAwLjcgfSk7XG4gKiAgIHNjb3BlLnNldFRhZyh7IHVzZXJfbW9kZTogJ2FkbWluJyB9KTtcbiAqICAgc2NvcGUuc2V0VXNlcih7IGlkOiAnNDcxMScgfSk7XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqXG4gKiBjb25zdCB7IGFkZEJyZWFkY3J1bWIgfSA9IHJlcXVpcmUoJ0BzZW50cnkvbm9kZScpO1xuICogYWRkQnJlYWRjcnVtYih7XG4gKiAgIG1lc3NhZ2U6ICdNeSBCcmVhZGNydW1iJyxcbiAqICAgLy8gLi4uXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqXG4gKiBjb25zdCBTZW50cnkgPSByZXF1aXJlKCdAc2VudHJ5L25vZGUnKTtcbiAqIFNlbnRyeS5jYXB0dXJlTWVzc2FnZSgnSGVsbG8sIHdvcmxkIScpO1xuICogU2VudHJ5LmNhcHR1cmVFeGNlcHRpb24obmV3IEVycm9yKCdHb29kIGJ5ZScpKTtcbiAqIFNlbnRyeS5jYXB0dXJlRXZlbnQoe1xuICogICBtZXNzYWdlOiAnTWFudWFsJyxcbiAqICAgc3RhY2t0cmFjZTogW1xuICogICAgIC8vIC4uLlxuICogICBdLFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBOb2RlT3B0aW9uc30gZm9yIGRvY3VtZW50YXRpb24gb24gY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdChvcHRpb25zOiBOb2RlT3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gIGNvbnN0IGNhcnJpZXIgPSBnZXRNYWluQ2FycmllcigpO1xuICBjb25zdCBhdXRvbG9hZGVkSW50ZWdyYXRpb25zID0gY2Fycmllci5fX1NFTlRSWV9fPy5pbnRlZ3JhdGlvbnMgfHwgW107XG5cbiAgb3B0aW9ucy5kZWZhdWx0SW50ZWdyYXRpb25zID1cbiAgICBvcHRpb25zLmRlZmF1bHRJbnRlZ3JhdGlvbnMgPT09IGZhbHNlXG4gICAgICA/IFtdXG4gICAgICA6IFtcbiAgICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShvcHRpb25zLmRlZmF1bHRJbnRlZ3JhdGlvbnMpID8gb3B0aW9ucy5kZWZhdWx0SW50ZWdyYXRpb25zIDogZGVmYXVsdEludGVncmF0aW9ucyksXG4gICAgICAgICAgLi4uYXV0b2xvYWRlZEludGVncmF0aW9ucyxcbiAgICAgICAgXTtcblxuICBpZiAob3B0aW9ucy5kc24gPT09IHVuZGVmaW5lZCAmJiBwcm9jZXNzLmVudi5TRU5UUllfRFNOKSB7XG4gICAgb3B0aW9ucy5kc24gPSBwcm9jZXNzLmVudi5TRU5UUllfRFNOO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMudHJhY2VzU2FtcGxlUmF0ZSA9PT0gdW5kZWZpbmVkICYmIHByb2Nlc3MuZW52LlNFTlRSWV9UUkFDRVNfU0FNUExFX1JBVEUpIHtcbiAgICBjb25zdCB0cmFjZXNTYW1wbGVSYXRlID0gcGFyc2VGbG9hdChwcm9jZXNzLmVudi5TRU5UUllfVFJBQ0VTX1NBTVBMRV9SQVRFKTtcbiAgICBpZiAoaXNGaW5pdGUodHJhY2VzU2FtcGxlUmF0ZSkpIHtcbiAgICAgIG9wdGlvbnMudHJhY2VzU2FtcGxlUmF0ZSA9IHRyYWNlc1NhbXBsZVJhdGU7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdGlvbnMucmVsZWFzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgZGV0ZWN0ZWRSZWxlYXNlID0gZ2V0U2VudHJ5UmVsZWFzZSgpO1xuICAgIGlmIChkZXRlY3RlZFJlbGVhc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucy5yZWxlYXNlID0gZGV0ZWN0ZWRSZWxlYXNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiByZWxlYXNlIGlzIG5vdCBwcm92aWRlZCwgdGhlbiB3ZSBzaG91bGQgZGlzYWJsZSBhdXRvU2Vzc2lvblRyYWNraW5nXG4gICAgICBvcHRpb25zLmF1dG9TZXNzaW9uVHJhY2tpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAob3B0aW9ucy5lbnZpcm9ubWVudCA9PT0gdW5kZWZpbmVkICYmIHByb2Nlc3MuZW52LlNFTlRSWV9FTlZJUk9OTUVOVCkge1xuICAgIG9wdGlvbnMuZW52aXJvbm1lbnQgPSBwcm9jZXNzLmVudi5TRU5UUllfRU5WSVJPTk1FTlQ7XG4gIH1cblxuICBpZiAob3B0aW9ucy5hdXRvU2Vzc2lvblRyYWNraW5nID09PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5kc24gIT09IHVuZGVmaW5lZCkge1xuICAgIG9wdGlvbnMuYXV0b1Nlc3Npb25UcmFja2luZyA9IHRydWU7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGlmICgoZG9tYWluIGFzIGFueSkuYWN0aXZlKSB7XG4gICAgc2V0SHViT25DYXJyaWVyKGNhcnJpZXIsIGdldEN1cnJlbnRIdWIoKSk7XG4gIH1cblxuICBpbml0QW5kQmluZChOb2RlQ2xpZW50LCBvcHRpb25zKTtcblxuICBpZiAob3B0aW9ucy5hdXRvU2Vzc2lvblRyYWNraW5nKSB7XG4gICAgc3RhcnRTZXNzaW9uVHJhY2tpbmcoKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGdldHRlciBmb3IgbGFzdEV2ZW50SWQuXG4gKlxuICogQHJldHVybnMgVGhlIGxhc3QgZXZlbnQgaWQgb2YgYSBjYXB0dXJlZCBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxhc3RFdmVudElkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBnZXRDdXJyZW50SHViKCkubGFzdEV2ZW50SWQoKTtcbn1cblxuLyoqXG4gKiBDYWxsIGBmbHVzaCgpYCBvbiB0aGUgY3VycmVudCBjbGllbnQsIGlmIHRoZXJlIGlzIG9uZS4gU2VlIHtAbGluayBDbGllbnQuZmx1c2h9LlxuICpcbiAqIEBwYXJhbSB0aW1lb3V0IE1heGltdW0gdGltZSBpbiBtcyB0aGUgY2xpZW50IHNob3VsZCB3YWl0IHRvIGZsdXNoIGl0cyBldmVudCBxdWV1ZS4gT21pdHRpbmcgdGhpcyBwYXJhbWV0ZXIgd2lsbCBjYXVzZVxuICogdGhlIGNsaWVudCB0byB3YWl0IHVudGlsIGFsbCBldmVudHMgYXJlIHNlbnQgYmVmb3JlIHJlc29sdmluZyB0aGUgcHJvbWlzZS5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB0byBgdHJ1ZWAgaWYgdGhlIHF1ZXVlIHN1Y2Nlc3NmdWxseSBkcmFpbnMgYmVmb3JlIHRoZSB0aW1lb3V0LCBvciBgZmFsc2VgIGlmIGl0XG4gKiBkb2Vzbid0IChvciBpZiB0aGVyZSdzIG5vIGNsaWVudCBkZWZpbmVkKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZsdXNoKHRpbWVvdXQ/OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q3VycmVudEh1YigpLmdldENsaWVudDxOb2RlQ2xpZW50PigpO1xuICBpZiAoY2xpZW50KSB7XG4gICAgcmV0dXJuIGNsaWVudC5mbHVzaCh0aW1lb3V0KTtcbiAgfVxuICBsb2dnZXIud2FybignQ2Fubm90IGZsdXNoIGV2ZW50cy4gTm8gY2xpZW50IGRlZmluZWQuJyk7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xufVxuXG4vKipcbiAqIENhbGwgYGNsb3NlKClgIG9uIHRoZSBjdXJyZW50IGNsaWVudCwgaWYgdGhlcmUgaXMgb25lLiBTZWUge0BsaW5rIENsaWVudC5jbG9zZX0uXG4gKlxuICogQHBhcmFtIHRpbWVvdXQgTWF4aW11bSB0aW1lIGluIG1zIHRoZSBjbGllbnQgc2hvdWxkIHdhaXQgdG8gZmx1c2ggaXRzIGV2ZW50IHF1ZXVlIGJlZm9yZSBzaHV0dGluZyBkb3duLiBPbWl0dGluZyB0aGlzXG4gKiBwYXJhbWV0ZXIgd2lsbCBjYXVzZSB0aGUgY2xpZW50IHRvIHdhaXQgdW50aWwgYWxsIGV2ZW50cyBhcmUgc2VudCBiZWZvcmUgZGlzYWJsaW5nIGl0c2VsZi5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB0byBgdHJ1ZWAgaWYgdGhlIHF1ZXVlIHN1Y2Nlc3NmdWxseSBkcmFpbnMgYmVmb3JlIHRoZSB0aW1lb3V0LCBvciBgZmFsc2VgIGlmIGl0XG4gKiBkb2Vzbid0IChvciBpZiB0aGVyZSdzIG5vIGNsaWVudCBkZWZpbmVkKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsb3NlKHRpbWVvdXQ/OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q3VycmVudEh1YigpLmdldENsaWVudDxOb2RlQ2xpZW50PigpO1xuICBpZiAoY2xpZW50KSB7XG4gICAgcmV0dXJuIGNsaWVudC5jbG9zZSh0aW1lb3V0KTtcbiAgfVxuICBsb2dnZXIud2FybignQ2Fubm90IGZsdXNoIGV2ZW50cyBhbmQgZGlzYWJsZSBTREsuIE5vIGNsaWVudCBkZWZpbmVkLicpO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0aGF0IHRha2VzIGFuIGluc3RhbmNlIG9mIE5vZGVDbGllbnQgYW5kIGNoZWNrcyBpZiBhdXRvU2Vzc2lvblRyYWNraW5nIG9wdGlvbiBpcyBlbmFibGVkIGZvciB0aGF0IGNsaWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBdXRvU2Vzc2lvblRyYWNraW5nRW5hYmxlZChjbGllbnQ/OiBOb2RlQ2xpZW50KTogYm9vbGVhbiB7XG4gIGlmIChjbGllbnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBjbGllbnRPcHRpb25zOiBOb2RlT3B0aW9ucyA9IGNsaWVudCAmJiBjbGllbnQuZ2V0T3B0aW9ucygpO1xuICBpZiAoY2xpZW50T3B0aW9ucyAmJiBjbGllbnRPcHRpb25zLmF1dG9TZXNzaW9uVHJhY2tpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjbGllbnRPcHRpb25zLmF1dG9TZXNzaW9uVHJhY2tpbmc7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByZWxlYXNlIGR5bmFtaWNhbGx5IGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VudHJ5UmVsZWFzZShmYWxsYmFjaz86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIC8vIEFsd2F5cyByZWFkIGZpcnN0IGFzIFNlbnRyeSB0YWtlcyB0aGlzIGFzIHByZWNlZGVuY2VcbiAgaWYgKHByb2Nlc3MuZW52LlNFTlRSWV9SRUxFQVNFKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LlNFTlRSWV9SRUxFQVNFO1xuICB9XG5cbiAgLy8gVGhpcyBzdXBwb3J0cyB0aGUgdmFyaWFibGUgdGhhdCBzZW50cnktd2VicGFjay1wbHVnaW4gaW5qZWN0c1xuICBjb25zdCBnbG9iYWwgPSBnZXRHbG9iYWxPYmplY3QoKTtcbiAgaWYgKGdsb2JhbC5TRU5UUllfUkVMRUFTRSAmJiBnbG9iYWwuU0VOVFJZX1JFTEVBU0UuaWQpIHtcbiAgICByZXR1cm4gZ2xvYmFsLlNFTlRSWV9SRUxFQVNFLmlkO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICAvLyBHaXRIdWIgQWN0aW9ucyAtIGh0dHBzOi8vaGVscC5naXRodWIuY29tL2VuL2FjdGlvbnMvY29uZmlndXJpbmctYW5kLW1hbmFnaW5nLXdvcmtmbG93cy91c2luZy1lbnZpcm9ubWVudC12YXJpYWJsZXMjZGVmYXVsdC1lbnZpcm9ubWVudC12YXJpYWJsZXNcbiAgICBwcm9jZXNzLmVudi5HSVRIVUJfU0hBIHx8XG4gICAgLy8gTmV0bGlmeSAtIGh0dHBzOi8vZG9jcy5uZXRsaWZ5LmNvbS9jb25maWd1cmUtYnVpbGRzL2Vudmlyb25tZW50LXZhcmlhYmxlcy8jYnVpbGQtbWV0YWRhdGFcbiAgICBwcm9jZXNzLmVudi5DT01NSVRfUkVGIHx8XG4gICAgLy8gVmVyY2VsIC0gaHR0cHM6Ly92ZXJjZWwuY29tL2RvY3MvdjIvYnVpbGQtc3RlcCNzeXN0ZW0tZW52aXJvbm1lbnQtdmFyaWFibGVzXG4gICAgcHJvY2Vzcy5lbnYuVkVSQ0VMX0dJVF9DT01NSVRfU0hBIHx8XG4gICAgcHJvY2Vzcy5lbnYuVkVSQ0VMX0dJVEhVQl9DT01NSVRfU0hBIHx8XG4gICAgcHJvY2Vzcy5lbnYuVkVSQ0VMX0dJVExBQl9DT01NSVRfU0hBIHx8XG4gICAgcHJvY2Vzcy5lbnYuVkVSQ0VMX0JJVEJVQ0tFVF9DT01NSVRfU0hBIHx8XG4gICAgLy8gWmVpdCAobm93IGtub3duIGFzIFZlcmNlbClcbiAgICBwcm9jZXNzLmVudi5aRUlUX0dJVEhVQl9DT01NSVRfU0hBIHx8XG4gICAgcHJvY2Vzcy5lbnYuWkVJVF9HSVRMQUJfQ09NTUlUX1NIQSB8fFxuICAgIHByb2Nlc3MuZW52LlpFSVRfQklUQlVDS0VUX0NPTU1JVF9TSEEgfHxcbiAgICBmYWxsYmFja1xuICApO1xufVxuXG4vKipcbiAqIEVuYWJsZSBhdXRvbWF0aWMgU2Vzc2lvbiBUcmFja2luZyBmb3IgdGhlIG5vZGUgcHJvY2Vzcy5cbiAqL1xuZnVuY3Rpb24gc3RhcnRTZXNzaW9uVHJhY2tpbmcoKTogdm9pZCB7XG4gIGNvbnN0IGh1YiA9IGdldEN1cnJlbnRIdWIoKTtcbiAgaHViLnN0YXJ0U2Vzc2lvbigpO1xuICAvLyBFbWl0dGVkIGluIHRoZSBjYXNlIG9mIGhlYWx0aHkgc2Vzc2lvbnMsIGVycm9yIG9mIGBtZWNoYW5pc20uaGFuZGxlZDogdHJ1ZWAgYW5kIHVuaGFuZGxlZHJlamVjdGlvbnMgYmVjYXVzZVxuICAvLyBUaGUgJ2JlZm9yZUV4aXQnIGV2ZW50IGlzIG5vdCBlbWl0dGVkIGZvciBjb25kaXRpb25zIGNhdXNpbmcgZXhwbGljaXQgdGVybWluYXRpb24sXG4gIC8vIHN1Y2ggYXMgY2FsbGluZyBwcm9jZXNzLmV4aXQoKSBvciB1bmNhdWdodCBleGNlcHRpb25zLlxuICAvLyBSZWY6IGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcHJvY2Vzcy5odG1sI3Byb2Nlc3NfZXZlbnRfYmVmb3JlZXhpdFxuICBwcm9jZXNzLm9uKCdiZWZvcmVFeGl0JywgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBodWIuZ2V0U2NvcGUoKT8uZ2V0U2Vzc2lvbigpO1xuICAgIGNvbnN0IHRlcm1pbmFsU3RhdGVzID0gW1Nlc3Npb25TdGF0dXMuRXhpdGVkLCBTZXNzaW9uU3RhdHVzLkNyYXNoZWRdO1xuICAgIC8vIE9ubHkgY2FsbCBlbmRTZXNzaW9uLCBpZiB0aGUgU2Vzc2lvbiBleGlzdHMgb24gU2NvcGUgYW5kIFNlc3Npb25TdGF0dXMgaXMgbm90IGFcbiAgICAvLyBUZXJtaW5hbCBTdGF0dXMgaS5lLiBFeGl0ZWQgb3IgQ3Jhc2hlZCBiZWNhdXNlXG4gICAgLy8gXCJXaGVuIGEgc2Vzc2lvbiBpcyBtb3ZlZCBhd2F5IGZyb20gb2sgaXQgbXVzdCBub3QgYmUgdXBkYXRlZCBhbnltb3JlLlwiXG4gICAgLy8gUmVmOiBodHRwczovL2RldmVsb3Auc2VudHJ5LmRldi9zZGsvc2Vzc2lvbnMvXG4gICAgaWYgKHNlc3Npb24gJiYgIXRlcm1pbmFsU3RhdGVzLmluY2x1ZGVzKHNlc3Npb24uc3RhdHVzKSkgaHViLmVuZFNlc3Npb24oKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuLyoqXG4gKiBSZWN1cnNpdmVseSByZWFkIHRoZSBjb250ZW50cyBvZiBhIGRpcmVjdG9yeS5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0RGlyIEFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGggb2YgdGhlIGRpcmVjdG9yeSB0byBzY2FuLiBBbGwgcmV0dXJuZWQgcGF0aHMgd2lsbCBiZSByZWxhdGl2ZSB0byB0aGlzXG4gKiBkaXJlY3RvcnkuXG4gKiBAcmV0dXJucyBBcnJheSBob2xkaW5nIGFsbCByZWxhdGl2ZSBwYXRoc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVlcFJlYWREaXJTeW5jKHRhcmdldERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCB0YXJnZXREaXJBYnNQYXRoID0gcGF0aC5yZXNvbHZlKHRhcmdldERpcik7XG5cbiAgaWYgKCFmcy5leGlzdHNTeW5jKHRhcmdldERpckFic1BhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVhZCBjb250ZW50cyBvZiAke3RhcmdldERpckFic1BhdGh9LiBEaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QuYCk7XG4gIH1cblxuICBpZiAoIWZzLnN0YXRTeW5jKHRhcmdldERpckFic1BhdGgpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZWFkIGNvbnRlbnRzIG9mICR7dGFyZ2V0RGlyQWJzUGF0aH0sIGJlY2F1c2UgaXQgaXMgbm90IGEgZGlyZWN0b3J5LmApO1xuICB9XG5cbiAgLy8gVGhpcyBkb2VzIHRoZSBzYW1lIHRoaW5nIGFzIGl0cyBjb250YWluaW5nIGZ1bmN0aW9uLCBgZGVlcFJlYWREaXJTeW5jYCAoZXhjZXB0IHRoYXQgLSBwdXJlbHkgZm9yIGNvbnZlbmllbmNlIC0gaXRcbiAgLy8gZGVhbHMgaW4gYWJzb2x1dGUgcGF0aHMgcmF0aGVyIHRoYW4gcmVsYXRpdmUgb25lcykuIFdlIG5lZWQgdGhpcyB0byBiZSBzZXBhcmF0ZSBmcm9tIHRoZSBvdXRlciBmdW5jdGlvbiB0byBwcmVzZXJ2ZVxuICAvLyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGB0YXJnZXREaXJBYnNQYXRoYCBhbmQgYGN1cnJlbnREaXJBYnNQYXRoYC5cbiAgY29uc3QgZGVlcFJlYWRDdXJyZW50RGlyID0gKGN1cnJlbnREaXJBYnNQYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSA9PiB7XG4gICAgcmV0dXJuIGZzLnJlYWRkaXJTeW5jKGN1cnJlbnREaXJBYnNQYXRoKS5yZWR1Y2UoKGFic1BhdGhzOiBzdHJpbmdbXSwgaXRlbU5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgaXRlbUFic1BhdGggPSBwYXRoLmpvaW4oY3VycmVudERpckFic1BhdGgsIGl0ZW1OYW1lKTtcblxuICAgICAgaWYgKGZzLnN0YXRTeW5jKGl0ZW1BYnNQYXRoKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIHJldHVybiBbLi4uYWJzUGF0aHMsIC4uLmRlZXBSZWFkQ3VycmVudERpcihpdGVtQWJzUGF0aCldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gWy4uLmFic1BhdGhzLCBpdGVtQWJzUGF0aF07XG4gICAgfSwgW10pO1xuICB9O1xuXG4gIHJldHVybiBkZWVwUmVhZEN1cnJlbnREaXIodGFyZ2V0RGlyQWJzUGF0aCkubWFwKGFic1BhdGggPT4gcGF0aC5yZWxhdGl2ZSh0YXJnZXREaXJBYnNQYXRoLCBhYnNQYXRoKSk7XG59XG4iLCAiLyoqIFRoZSBzdGF0dXMgb2YgYW4gU3Bhbi4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvZXhwb3J0XG5leHBvcnQgZW51bSBTcGFuU3RhdHVzIHtcbiAgLyoqIFRoZSBvcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gKi9cbiAgT2sgPSAnb2snLFxuICAvKiogRGVhZGxpbmUgZXhwaXJlZCBiZWZvcmUgb3BlcmF0aW9uIGNvdWxkIGNvbXBsZXRlLiAqL1xuICBEZWFkbGluZUV4Y2VlZGVkID0gJ2RlYWRsaW5lX2V4Y2VlZGVkJyxcbiAgLyoqIDQwMSBVbmF1dGhvcml6ZWQgKGFjdHVhbGx5IGRvZXMgbWVhbiB1bmF1dGhlbnRpY2F0ZWQgYWNjb3JkaW5nIHRvIFJGQyA3MjM1KSAqL1xuICBVbmF1dGhlbnRpY2F0ZWQgPSAndW5hdXRoZW50aWNhdGVkJyxcbiAgLyoqIDQwMyBGb3JiaWRkZW4gKi9cbiAgUGVybWlzc2lvbkRlbmllZCA9ICdwZXJtaXNzaW9uX2RlbmllZCcsXG4gIC8qKiA0MDQgTm90IEZvdW5kLiBTb21lIHJlcXVlc3RlZCBlbnRpdHkgKGZpbGUgb3IgZGlyZWN0b3J5KSB3YXMgbm90IGZvdW5kLiAqL1xuICBOb3RGb3VuZCA9ICdub3RfZm91bmQnLFxuICAvKiogNDI5IFRvbyBNYW55IFJlcXVlc3RzICovXG4gIFJlc291cmNlRXhoYXVzdGVkID0gJ3Jlc291cmNlX2V4aGF1c3RlZCcsXG4gIC8qKiBDbGllbnQgc3BlY2lmaWVkIGFuIGludmFsaWQgYXJndW1lbnQuIDR4eC4gKi9cbiAgSW52YWxpZEFyZ3VtZW50ID0gJ2ludmFsaWRfYXJndW1lbnQnLFxuICAvKiogNTAxIE5vdCBJbXBsZW1lbnRlZCAqL1xuICBVbmltcGxlbWVudGVkID0gJ3VuaW1wbGVtZW50ZWQnLFxuICAvKiogNTAzIFNlcnZpY2UgVW5hdmFpbGFibGUgKi9cbiAgVW5hdmFpbGFibGUgPSAndW5hdmFpbGFibGUnLFxuICAvKiogT3RoZXIvZ2VuZXJpYyA1eHguICovXG4gIEludGVybmFsRXJyb3IgPSAnaW50ZXJuYWxfZXJyb3InLFxuICAvKiogVW5rbm93bi4gQW55IG5vbi1zdGFuZGFyZCBIVFRQIHN0YXR1cyBjb2RlLiAqL1xuICBVbmtub3duRXJyb3IgPSAndW5rbm93bl9lcnJvcicsXG4gIC8qKiBUaGUgb3BlcmF0aW9uIHdhcyBjYW5jZWxsZWQgKHR5cGljYWxseSBieSB0aGUgdXNlcikuICovXG4gIENhbmNlbGxlZCA9ICdjYW5jZWxsZWQnLFxuICAvKiogQWxyZWFkeSBleGlzdHMgKDQwOSkgKi9cbiAgQWxyZWFkeUV4aXN0cyA9ICdhbHJlYWR5X2V4aXN0cycsXG4gIC8qKiBPcGVyYXRpb24gd2FzIHJlamVjdGVkIGJlY2F1c2UgdGhlIHN5c3RlbSBpcyBub3QgaW4gYSBzdGF0ZSByZXF1aXJlZCBmb3IgdGhlIG9wZXJhdGlvbidzICovXG4gIEZhaWxlZFByZWNvbmRpdGlvbiA9ICdmYWlsZWRfcHJlY29uZGl0aW9uJyxcbiAgLyoqIFRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQsIHR5cGljYWxseSBkdWUgdG8gYSBjb25jdXJyZW5jeSBpc3N1ZS4gKi9cbiAgQWJvcnRlZCA9ICdhYm9ydGVkJyxcbiAgLyoqIE9wZXJhdGlvbiB3YXMgYXR0ZW1wdGVkIHBhc3QgdGhlIHZhbGlkIHJhbmdlLiAqL1xuICBPdXRPZlJhbmdlID0gJ291dF9vZl9yYW5nZScsXG4gIC8qKiBVbnJlY292ZXJhYmxlIGRhdGEgbG9zcyBvciBjb3JydXB0aW9uICovXG4gIERhdGFMb3NzID0gJ2RhdGFfbG9zcycsXG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlLCBpbXBvcnQvZXhwb3J0XG5leHBvcnQgbmFtZXNwYWNlIFNwYW5TdGF0dXMge1xuICAvKipcbiAgICogQ29udmVydHMgYSBIVFRQIHN0YXR1cyBjb2RlIGludG8gYSB7QGxpbmsgU3BhblN0YXR1c30uXG4gICAqXG4gICAqIEBwYXJhbSBodHRwU3RhdHVzIFRoZSBIVFRQIHJlc3BvbnNlIHN0YXR1cyBjb2RlLlxuICAgKiBAcmV0dXJucyBUaGUgc3BhbiBzdGF0dXMgb3Ige0BsaW5rIFNwYW5TdGF0dXMuVW5rbm93bkVycm9yfS5cbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBmcm9tSHR0cENvZGUoaHR0cFN0YXR1czogbnVtYmVyKTogU3BhblN0YXR1cyB7XG4gICAgaWYgKGh0dHBTdGF0dXMgPCA0MDAgJiYgaHR0cFN0YXR1cyA+PSAxMDApIHtcbiAgICAgIHJldHVybiBTcGFuU3RhdHVzLk9rO1xuICAgIH1cblxuICAgIGlmIChodHRwU3RhdHVzID49IDQwMCAmJiBodHRwU3RhdHVzIDwgNTAwKSB7XG4gICAgICBzd2l0Y2ggKGh0dHBTdGF0dXMpIHtcbiAgICAgICAgY2FzZSA0MDE6XG4gICAgICAgICAgcmV0dXJuIFNwYW5TdGF0dXMuVW5hdXRoZW50aWNhdGVkO1xuICAgICAgICBjYXNlIDQwMzpcbiAgICAgICAgICByZXR1cm4gU3BhblN0YXR1cy5QZXJtaXNzaW9uRGVuaWVkO1xuICAgICAgICBjYXNlIDQwNDpcbiAgICAgICAgICByZXR1cm4gU3BhblN0YXR1cy5Ob3RGb3VuZDtcbiAgICAgICAgY2FzZSA0MDk6XG4gICAgICAgICAgcmV0dXJuIFNwYW5TdGF0dXMuQWxyZWFkeUV4aXN0cztcbiAgICAgICAgY2FzZSA0MTM6XG4gICAgICAgICAgcmV0dXJuIFNwYW5TdGF0dXMuRmFpbGVkUHJlY29uZGl0aW9uO1xuICAgICAgICBjYXNlIDQyOTpcbiAgICAgICAgICByZXR1cm4gU3BhblN0YXR1cy5SZXNvdXJjZUV4aGF1c3RlZDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gU3BhblN0YXR1cy5JbnZhbGlkQXJndW1lbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGh0dHBTdGF0dXMgPj0gNTAwICYmIGh0dHBTdGF0dXMgPCA2MDApIHtcbiAgICAgIHN3aXRjaCAoaHR0cFN0YXR1cykge1xuICAgICAgICBjYXNlIDUwMTpcbiAgICAgICAgICByZXR1cm4gU3BhblN0YXR1cy5VbmltcGxlbWVudGVkO1xuICAgICAgICBjYXNlIDUwMzpcbiAgICAgICAgICByZXR1cm4gU3BhblN0YXR1cy5VbmF2YWlsYWJsZTtcbiAgICAgICAgY2FzZSA1MDQ6XG4gICAgICAgICAgcmV0dXJuIFNwYW5TdGF0dXMuRGVhZGxpbmVFeGNlZWRlZDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gU3BhblN0YXR1cy5JbnRlcm5hbEVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBTcGFuU3RhdHVzLlVua25vd25FcnJvcjtcbiAgfVxufVxuIiwgImltcG9ydCB7IGdldEN1cnJlbnRIdWIsIEh1YiB9IGZyb20gJ0BzZW50cnkvaHViJztcbmltcG9ydCB7IE9wdGlvbnMsIFRyYWNlcGFyZW50RGF0YSwgVHJhbnNhY3Rpb24gfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IFRSQUNFUEFSRU5UX1JFR0VYUCA9IG5ldyBSZWdFeHAoXG4gICdeWyBcXFxcdF0qJyArIC8vIHdoaXRlc3BhY2VcbiAgJyhbMC05YS1mXXszMn0pPycgKyAvLyB0cmFjZV9pZFxuICAnLT8oWzAtOWEtZl17MTZ9KT8nICsgLy8gc3Bhbl9pZFxuICAnLT8oWzAxXSk/JyArIC8vIHNhbXBsZWRcbiAgICAnWyBcXFxcdF0qJCcsIC8vIHdoaXRlc3BhY2Vcbik7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0cmFjaW5nIGlzIGN1cnJlbnRseSBlbmFibGVkLlxuICpcbiAqIFRyYWNpbmcgaXMgZW5hYmxlZCB3aGVuIGF0IGxlYXN0IG9uZSBvZiBgdHJhY2VzU2FtcGxlUmF0ZWAgYW5kIGB0cmFjZXNTYW1wbGVyYCBpcyBkZWZpbmVkIGluIHRoZSBTREsgY29uZmlnLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzVHJhY2luZ0VuYWJsZWQoXG4gIG9wdGlvbnM6IE9wdGlvbnMgfCB1bmRlZmluZWQgPSBnZXRDdXJyZW50SHViKClcbiAgICAuZ2V0Q2xpZW50KClcbiAgICA/LmdldE9wdGlvbnMoKSxcbik6IGJvb2xlYW4ge1xuICByZXR1cm4gISFvcHRpb25zICYmICgndHJhY2VzU2FtcGxlUmF0ZScgaW4gb3B0aW9ucyB8fCAndHJhY2VzU2FtcGxlcicgaW4gb3B0aW9ucyk7XG59XG5cbi8qKlxuICogRXh0cmFjdCB0cmFuc2FjdGlvbiBjb250ZXh0IGRhdGEgZnJvbSBhIGBzZW50cnktdHJhY2VgIGhlYWRlci5cbiAqXG4gKiBAcGFyYW0gdHJhY2VwYXJlbnQgVHJhY2VwYXJlbnQgc3RyaW5nXG4gKlxuICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgZGF0YSBmcm9tIHRoZSBoZWFkZXIsIG9yIHVuZGVmaW5lZCBpZiB0cmFjZXBhcmVudCBzdHJpbmcgaXMgbWFsZm9ybWVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0VHJhY2VwYXJlbnREYXRhKHRyYWNlcGFyZW50OiBzdHJpbmcpOiBUcmFjZXBhcmVudERhdGEgfCB1bmRlZmluZWQge1xuICBjb25zdCBtYXRjaGVzID0gdHJhY2VwYXJlbnQubWF0Y2goVFJBQ0VQQVJFTlRfUkVHRVhQKTtcbiAgaWYgKG1hdGNoZXMpIHtcbiAgICBsZXQgcGFyZW50U2FtcGxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICBpZiAobWF0Y2hlc1szXSA9PT0gJzEnKSB7XG4gICAgICBwYXJlbnRTYW1wbGVkID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoZXNbM10gPT09ICcwJykge1xuICAgICAgcGFyZW50U2FtcGxlZCA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdHJhY2VJZDogbWF0Y2hlc1sxXSxcbiAgICAgIHBhcmVudFNhbXBsZWQsXG4gICAgICBwYXJlbnRTcGFuSWQ6IG1hdGNoZXNbMl0sXG4gICAgfTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiogR3JhYnMgYWN0aXZlIHRyYW5zYWN0aW9uIG9mZiBzY29wZSwgaWYgYW55ICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aXZlVHJhbnNhY3Rpb248VCBleHRlbmRzIFRyYW5zYWN0aW9uPihodWI6IEh1YiA9IGdldEN1cnJlbnRIdWIoKSk6IFQgfCB1bmRlZmluZWQge1xuICByZXR1cm4gaHViPy5nZXRTY29wZSgpPy5nZXRUcmFuc2FjdGlvbigpIGFzIFQgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ29udmVydHMgZnJvbSBtaWxsaXNlY29uZHMgdG8gc2Vjb25kc1xuICogQHBhcmFtIHRpbWUgdGltZSBpbiBtc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbXNUb1NlYyh0aW1lOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gdGltZSAvIDEwMDA7XG59XG5cbi8qKlxuICogQ29udmVydHMgZnJvbSBzZWNvbmRzIHRvIG1pbGxpc2Vjb25kc1xuICogQHBhcmFtIHRpbWUgdGltZSBpbiBzZWNvbmRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWNUb01zKHRpbWU6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiB0aW1lICogMTAwMDtcbn1cblxuLy8gc28gaXQgY2FuIGJlIHVzZWQgaW4gbWFudWFsIGluc3RydW1lbnRhdGlvbiB3aXRob3V0IG5lY2Vzc2l0YXRpbmcgYSBoYXJkIGRlcGVuZGVuY3kgb24gQHNlbnRyeS91dGlsc1xuZXhwb3J0IHsgc3RyaXBVcmxRdWVyeUFuZEZyYWdtZW50IH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG4iLCAiaW1wb3J0IHsgYWRkSW5zdHJ1bWVudGF0aW9uSGFuZGxlciwgbG9nZ2VyIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmltcG9ydCB7IFNwYW5TdGF0dXMgfSBmcm9tICcuL3NwYW5zdGF0dXMnO1xuaW1wb3J0IHsgZ2V0QWN0aXZlVHJhbnNhY3Rpb24gfSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBDb25maWd1cmVzIGdsb2JhbCBlcnJvciBsaXN0ZW5lcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRXJyb3JJbnN0cnVtZW50YXRpb24oKTogdm9pZCB7XG4gIGFkZEluc3RydW1lbnRhdGlvbkhhbmRsZXIoe1xuICAgIGNhbGxiYWNrOiBlcnJvckNhbGxiYWNrLFxuICAgIHR5cGU6ICdlcnJvcicsXG4gIH0pO1xuICBhZGRJbnN0cnVtZW50YXRpb25IYW5kbGVyKHtcbiAgICBjYWxsYmFjazogZXJyb3JDYWxsYmFjayxcbiAgICB0eXBlOiAndW5oYW5kbGVkcmVqZWN0aW9uJyxcbiAgfSk7XG59XG5cbi8qKlxuICogSWYgYW4gZXJyb3Igb3IgdW5oYW5kbGVkIHByb21pc2Ugb2NjdXJzLCB3ZSBtYXJrIHRoZSBhY3RpdmUgdHJhbnNhY3Rpb24gYXMgZmFpbGVkXG4gKi9cbmZ1bmN0aW9uIGVycm9yQ2FsbGJhY2soKTogdm9pZCB7XG4gIGNvbnN0IGFjdGl2ZVRyYW5zYWN0aW9uID0gZ2V0QWN0aXZlVHJhbnNhY3Rpb24oKTtcbiAgaWYgKGFjdGl2ZVRyYW5zYWN0aW9uKSB7XG4gICAgbG9nZ2VyLmxvZyhgW1RyYWNpbmddIFRyYW5zYWN0aW9uOiAke1NwYW5TdGF0dXMuSW50ZXJuYWxFcnJvcn0gLT4gR2xvYmFsIGVycm9yIG9jY3VyZWRgKTtcbiAgICBhY3RpdmVUcmFuc2FjdGlvbi5zZXRTdGF0dXMoU3BhblN0YXR1cy5JbnRlcm5hbEVycm9yKTtcbiAgfVxufVxuIiwgIi8vIFN0b3JlIGZpbmlzaCByZWFzb25zIGluIHR1cGxlIHRvIHNhdmUgb24gYnVuZGxlIHNpemVcbi8vIFJlYWRvbmx5IHR5cGUgc2hvdWxkIGVuZm9yY2UgdGhhdCB0aGlzIGlzIG5vdCBtdXRhdGVkLlxuZXhwb3J0IGNvbnN0IEZJTklTSF9SRUFTT05fVEFHID0gJ2ZpbmlzaFJlYXNvbic7XG5cbmV4cG9ydCBjb25zdCBJRExFX1RSQU5TQUNUSU9OX0ZJTklTSF9SRUFTT05TID0gWydoZWFydGJlYXRGYWlsZWQnLCAnaWRsZVRpbWVvdXQnLCAnZG9jdW1lbnRIaWRkZW4nXSBhcyBjb25zdDtcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGluZXMgKi9cbmltcG9ydCB7IFByaW1pdGl2ZSwgU3BhbiBhcyBTcGFuSW50ZXJmYWNlLCBTcGFuQ29udGV4dCwgVHJhbnNhY3Rpb24gfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGRyb3BVbmRlZmluZWRLZXlzLCB0aW1lc3RhbXBXaXRoTXMsIHV1aWQ0IH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmltcG9ydCB7IFNwYW5TdGF0dXMgfSBmcm9tICcuL3NwYW5zdGF0dXMnO1xuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIGZpbmlzaGVkIHNwYW5zIGZvciBhIGdpdmVuIHRyYW5zYWN0aW9uXG4gKiBAaW50ZXJuYWxcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFNwYW5SZWNvcmRlciB7XG4gIHB1YmxpYyBzcGFuczogU3BhbltdID0gW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbWF4bGVuOiBudW1iZXI7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKG1heGxlbjogbnVtYmVyID0gMTAwMCkge1xuICAgIHRoaXMuX21heGxlbiA9IG1heGxlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGp1c3Qgc28gdGhhdCB3ZSBkb24ndCBydW4gb3V0IG9mIG1lbW9yeSB3aGlsZSByZWNvcmRpbmcgYSBsb3RcbiAgICogb2Ygc3BhbnMuIEF0IHNvbWUgcG9pbnQgd2UganVzdCBzdG9wIGFuZCBmbHVzaCBvdXQgdGhlIHN0YXJ0IG9mIHRoZVxuICAgKiB0cmFjZSB0cmVlIChpLmUudGhlIGZpcnN0IG4gc3BhbnMgd2l0aCB0aGUgc21hbGxlc3RcbiAgICogc3RhcnRfdGltZXN0YW1wKS5cbiAgICovXG4gIHB1YmxpYyBhZGQoc3BhbjogU3Bhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnNwYW5zLmxlbmd0aCA+IHRoaXMuX21heGxlbikge1xuICAgICAgc3Bhbi5zcGFuUmVjb3JkZXIgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3BhbnMucHVzaChzcGFuKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTcGFuIGNvbnRhaW5zIGFsbCBkYXRhIGFib3V0IGEgc3BhblxuICovXG5leHBvcnQgY2xhc3MgU3BhbiBpbXBsZW1lbnRzIFNwYW5JbnRlcmZhY2Uge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyB0cmFjZUlkOiBzdHJpbmcgPSB1dWlkNCgpO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNwYW5JZDogc3RyaW5nID0gdXVpZDQoKS5zdWJzdHJpbmcoMTYpO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHBhcmVudFNwYW5JZD86IHN0cmluZztcblxuICAvKipcbiAgICogSW50ZXJuYWwga2VlcGVyIG9mIHRoZSBzdGF0dXNcbiAgICovXG4gIHB1YmxpYyBzdGF0dXM/OiBTcGFuU3RhdHVzIHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNhbXBsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgaW4gc2Vjb25kcyB3aGVuIHRoZSBzcGFuIHdhcyBjcmVhdGVkLlxuICAgKi9cbiAgcHVibGljIHN0YXJ0VGltZXN0YW1wOiBudW1iZXIgPSB0aW1lc3RhbXBXaXRoTXMoKTtcblxuICAvKipcbiAgICogVGltZXN0YW1wIGluIHNlY29uZHMgd2hlbiB0aGUgc3BhbiBlbmRlZC5cbiAgICovXG4gIHB1YmxpYyBlbmRUaW1lc3RhbXA/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgb3A/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgdGFnczogeyBba2V5OiBzdHJpbmddOiBQcmltaXRpdmUgfSA9IHt9O1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcHVibGljIGRhdGE6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcblxuICAvKipcbiAgICogTGlzdCBvZiBzcGFucyB0aGF0IHdlcmUgZmluYWxpemVkXG4gICAqL1xuICBwdWJsaWMgc3BhblJlY29yZGVyPzogU3BhblJlY29yZGVyO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHRyYW5zYWN0aW9uPzogVHJhbnNhY3Rpb247XG5cbiAgLyoqXG4gICAqIFlvdSBzaG91bGQgbmV2ZXIgY2FsbCB0aGUgY29uc3RydWN0b3IgbWFudWFsbHksIGFsd2F5cyB1c2UgYFNlbnRyeS5zdGFydFRyYW5zYWN0aW9uKClgXG4gICAqIG9yIGNhbGwgYHN0YXJ0Q2hpbGQoKWAgb24gYW4gZXhpc3Rpbmcgc3Bhbi5cbiAgICogQGludGVybmFsXG4gICAqIEBoaWRlY29uc3RydWN0b3JcbiAgICogQGhpZGRlblxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNwYW5Db250ZXh0PzogU3BhbkNvbnRleHQpIHtcbiAgICBpZiAoIXNwYW5Db250ZXh0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKHNwYW5Db250ZXh0LnRyYWNlSWQpIHtcbiAgICAgIHRoaXMudHJhY2VJZCA9IHNwYW5Db250ZXh0LnRyYWNlSWQ7XG4gICAgfVxuICAgIGlmIChzcGFuQ29udGV4dC5zcGFuSWQpIHtcbiAgICAgIHRoaXMuc3BhbklkID0gc3BhbkNvbnRleHQuc3BhbklkO1xuICAgIH1cbiAgICBpZiAoc3BhbkNvbnRleHQucGFyZW50U3BhbklkKSB7XG4gICAgICB0aGlzLnBhcmVudFNwYW5JZCA9IHNwYW5Db250ZXh0LnBhcmVudFNwYW5JZDtcbiAgICB9XG4gICAgLy8gV2Ugd2FudCB0byBpbmNsdWRlIGJvb2xlYW5zIGFzIHdlbGwgaGVyZVxuICAgIGlmICgnc2FtcGxlZCcgaW4gc3BhbkNvbnRleHQpIHtcbiAgICAgIHRoaXMuc2FtcGxlZCA9IHNwYW5Db250ZXh0LnNhbXBsZWQ7XG4gICAgfVxuICAgIGlmIChzcGFuQ29udGV4dC5vcCkge1xuICAgICAgdGhpcy5vcCA9IHNwYW5Db250ZXh0Lm9wO1xuICAgIH1cbiAgICBpZiAoc3BhbkNvbnRleHQuZGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBzcGFuQ29udGV4dC5kZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgaWYgKHNwYW5Db250ZXh0LmRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YSA9IHNwYW5Db250ZXh0LmRhdGE7XG4gICAgfVxuICAgIGlmIChzcGFuQ29udGV4dC50YWdzKSB7XG4gICAgICB0aGlzLnRhZ3MgPSBzcGFuQ29udGV4dC50YWdzO1xuICAgIH1cbiAgICBpZiAoc3BhbkNvbnRleHQuc3RhdHVzKSB7XG4gICAgICB0aGlzLnN0YXR1cyA9IHNwYW5Db250ZXh0LnN0YXR1cztcbiAgICB9XG4gICAgaWYgKHNwYW5Db250ZXh0LnN0YXJ0VGltZXN0YW1wKSB7XG4gICAgICB0aGlzLnN0YXJ0VGltZXN0YW1wID0gc3BhbkNvbnRleHQuc3RhcnRUaW1lc3RhbXA7XG4gICAgfVxuICAgIGlmIChzcGFuQ29udGV4dC5lbmRUaW1lc3RhbXApIHtcbiAgICAgIHRoaXMuZW5kVGltZXN0YW1wID0gc3BhbkNvbnRleHQuZW5kVGltZXN0YW1wO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgcHVibGljIGNoaWxkKFxuICAgIHNwYW5Db250ZXh0PzogUGljazxTcGFuQ29udGV4dCwgRXhjbHVkZTxrZXlvZiBTcGFuQ29udGV4dCwgJ3NwYW5JZCcgfCAnc2FtcGxlZCcgfCAndHJhY2VJZCcgfCAncGFyZW50U3BhbklkJz4+LFxuICApOiBTcGFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydENoaWxkKHNwYW5Db250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHN0YXJ0Q2hpbGQoXG4gICAgc3BhbkNvbnRleHQ/OiBQaWNrPFNwYW5Db250ZXh0LCBFeGNsdWRlPGtleW9mIFNwYW5Db250ZXh0LCAnc3BhbklkJyB8ICdzYW1wbGVkJyB8ICd0cmFjZUlkJyB8ICdwYXJlbnRTcGFuSWQnPj4sXG4gICk6IFNwYW4ge1xuICAgIGNvbnN0IGNoaWxkU3BhbiA9IG5ldyBTcGFuKHtcbiAgICAgIC4uLnNwYW5Db250ZXh0LFxuICAgICAgcGFyZW50U3BhbklkOiB0aGlzLnNwYW5JZCxcbiAgICAgIHNhbXBsZWQ6IHRoaXMuc2FtcGxlZCxcbiAgICAgIHRyYWNlSWQ6IHRoaXMudHJhY2VJZCxcbiAgICB9KTtcblxuICAgIGNoaWxkU3Bhbi5zcGFuUmVjb3JkZXIgPSB0aGlzLnNwYW5SZWNvcmRlcjtcbiAgICBpZiAoY2hpbGRTcGFuLnNwYW5SZWNvcmRlcikge1xuICAgICAgY2hpbGRTcGFuLnNwYW5SZWNvcmRlci5hZGQoY2hpbGRTcGFuKTtcbiAgICB9XG5cbiAgICBjaGlsZFNwYW4udHJhbnNhY3Rpb24gPSB0aGlzLnRyYW5zYWN0aW9uO1xuXG4gICAgcmV0dXJuIGNoaWxkU3BhbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldFRhZyhrZXk6IHN0cmluZywgdmFsdWU6IFByaW1pdGl2ZSk6IHRoaXMge1xuICAgIHRoaXMudGFncyA9IHsgLi4udGhpcy50YWdzLCBba2V5XTogdmFsdWUgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcbiAgcHVibGljIHNldERhdGEoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB0aGlzIHtcbiAgICB0aGlzLmRhdGEgPSB7IC4uLnRoaXMuZGF0YSwgW2tleV06IHZhbHVlIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXRTdGF0dXModmFsdWU6IFNwYW5TdGF0dXMpOiB0aGlzIHtcbiAgICB0aGlzLnN0YXR1cyA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0SHR0cFN0YXR1cyhodHRwU3RhdHVzOiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLnNldFRhZygnaHR0cC5zdGF0dXNfY29kZScsIFN0cmluZyhodHRwU3RhdHVzKSk7XG4gICAgY29uc3Qgc3BhblN0YXR1cyA9IFNwYW5TdGF0dXMuZnJvbUh0dHBDb2RlKGh0dHBTdGF0dXMpO1xuICAgIGlmIChzcGFuU3RhdHVzICE9PSBTcGFuU3RhdHVzLlVua25vd25FcnJvcikge1xuICAgICAgdGhpcy5zZXRTdGF0dXMoc3BhblN0YXR1cyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgaXNTdWNjZXNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gU3BhblN0YXR1cy5PaztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGZpbmlzaChlbmRUaW1lc3RhbXA/OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmVuZFRpbWVzdGFtcCA9IHR5cGVvZiBlbmRUaW1lc3RhbXAgPT09ICdudW1iZXInID8gZW5kVGltZXN0YW1wIDogdGltZXN0YW1wV2l0aE1zKCk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyB0b1RyYWNlcGFyZW50KCk6IHN0cmluZyB7XG4gICAgbGV0IHNhbXBsZWRTdHJpbmcgPSAnJztcbiAgICBpZiAodGhpcy5zYW1wbGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNhbXBsZWRTdHJpbmcgPSB0aGlzLnNhbXBsZWQgPyAnLTEnIDogJy0wJztcbiAgICB9XG4gICAgcmV0dXJuIGAke3RoaXMudHJhY2VJZH0tJHt0aGlzLnNwYW5JZH0ke3NhbXBsZWRTdHJpbmd9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHRvQ29udGV4dCgpOiBTcGFuQ29udGV4dCB7XG4gICAgcmV0dXJuIGRyb3BVbmRlZmluZWRLZXlzKHtcbiAgICAgIGRhdGE6IHRoaXMuZGF0YSxcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgZW5kVGltZXN0YW1wOiB0aGlzLmVuZFRpbWVzdGFtcCxcbiAgICAgIG9wOiB0aGlzLm9wLFxuICAgICAgcGFyZW50U3BhbklkOiB0aGlzLnBhcmVudFNwYW5JZCxcbiAgICAgIHNhbXBsZWQ6IHRoaXMuc2FtcGxlZCxcbiAgICAgIHNwYW5JZDogdGhpcy5zcGFuSWQsXG4gICAgICBzdGFydFRpbWVzdGFtcDogdGhpcy5zdGFydFRpbWVzdGFtcCxcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICB0YWdzOiB0aGlzLnRhZ3MsXG4gICAgICB0cmFjZUlkOiB0aGlzLnRyYWNlSWQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyB1cGRhdGVXaXRoQ29udGV4dChzcGFuQ29udGV4dDogU3BhbkNvbnRleHQpOiB0aGlzIHtcbiAgICB0aGlzLmRhdGEgPSBzcGFuQ29udGV4dC5kYXRhID8/IHt9O1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBzcGFuQ29udGV4dC5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLmVuZFRpbWVzdGFtcCA9IHNwYW5Db250ZXh0LmVuZFRpbWVzdGFtcDtcbiAgICB0aGlzLm9wID0gc3BhbkNvbnRleHQub3A7XG4gICAgdGhpcy5wYXJlbnRTcGFuSWQgPSBzcGFuQ29udGV4dC5wYXJlbnRTcGFuSWQ7XG4gICAgdGhpcy5zYW1wbGVkID0gc3BhbkNvbnRleHQuc2FtcGxlZDtcbiAgICB0aGlzLnNwYW5JZCA9IHNwYW5Db250ZXh0LnNwYW5JZCA/PyB0aGlzLnNwYW5JZDtcbiAgICB0aGlzLnN0YXJ0VGltZXN0YW1wID0gc3BhbkNvbnRleHQuc3RhcnRUaW1lc3RhbXAgPz8gdGhpcy5zdGFydFRpbWVzdGFtcDtcbiAgICB0aGlzLnN0YXR1cyA9IHNwYW5Db250ZXh0LnN0YXR1cztcbiAgICB0aGlzLnRhZ3MgPSBzcGFuQ29udGV4dC50YWdzID8/IHt9O1xuICAgIHRoaXMudHJhY2VJZCA9IHNwYW5Db250ZXh0LnRyYWNlSWQgPz8gdGhpcy50cmFjZUlkO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBnZXRUcmFjZUNvbnRleHQoKToge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgZGF0YT86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgb3A/OiBzdHJpbmc7XG4gICAgcGFyZW50X3NwYW5faWQ/OiBzdHJpbmc7XG4gICAgc3Bhbl9pZDogc3RyaW5nO1xuICAgIHN0YXR1cz86IHN0cmluZztcbiAgICB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBQcmltaXRpdmUgfTtcbiAgICB0cmFjZV9pZDogc3RyaW5nO1xuICB9IHtcbiAgICByZXR1cm4gZHJvcFVuZGVmaW5lZEtleXMoe1xuICAgICAgZGF0YTogT2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGggPiAwID8gdGhpcy5kYXRhIDogdW5kZWZpbmVkLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBvcDogdGhpcy5vcCxcbiAgICAgIHBhcmVudF9zcGFuX2lkOiB0aGlzLnBhcmVudFNwYW5JZCxcbiAgICAgIHNwYW5faWQ6IHRoaXMuc3BhbklkLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIHRhZ3M6IE9iamVjdC5rZXlzKHRoaXMudGFncykubGVuZ3RoID4gMCA/IHRoaXMudGFncyA6IHVuZGVmaW5lZCxcbiAgICAgIHRyYWNlX2lkOiB0aGlzLnRyYWNlSWQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyB0b0pTT04oKToge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgZGF0YT86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgb3A/OiBzdHJpbmc7XG4gICAgcGFyZW50X3NwYW5faWQ/OiBzdHJpbmc7XG4gICAgc3Bhbl9pZDogc3RyaW5nO1xuICAgIHN0YXJ0X3RpbWVzdGFtcDogbnVtYmVyO1xuICAgIHN0YXR1cz86IHN0cmluZztcbiAgICB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBQcmltaXRpdmUgfTtcbiAgICB0aW1lc3RhbXA/OiBudW1iZXI7XG4gICAgdHJhY2VfaWQ6IHN0cmluZztcbiAgfSB7XG4gICAgcmV0dXJuIGRyb3BVbmRlZmluZWRLZXlzKHtcbiAgICAgIGRhdGE6IE9iamVjdC5rZXlzKHRoaXMuZGF0YSkubGVuZ3RoID4gMCA/IHRoaXMuZGF0YSA6IHVuZGVmaW5lZCxcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgb3A6IHRoaXMub3AsXG4gICAgICBwYXJlbnRfc3Bhbl9pZDogdGhpcy5wYXJlbnRTcGFuSWQsXG4gICAgICBzcGFuX2lkOiB0aGlzLnNwYW5JZCxcbiAgICAgIHN0YXJ0X3RpbWVzdGFtcDogdGhpcy5zdGFydFRpbWVzdGFtcCxcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICB0YWdzOiBPYmplY3Qua2V5cyh0aGlzLnRhZ3MpLmxlbmd0aCA+IDAgPyB0aGlzLnRhZ3MgOiB1bmRlZmluZWQsXG4gICAgICB0aW1lc3RhbXA6IHRoaXMuZW5kVGltZXN0YW1wLFxuICAgICAgdHJhY2VfaWQ6IHRoaXMudHJhY2VJZCxcbiAgICB9KTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGdldEN1cnJlbnRIdWIsIEh1YiB9IGZyb20gJ0BzZW50cnkvaHViJztcbmltcG9ydCB7XG4gIEV2ZW50LFxuICBNZWFzdXJlbWVudHMsXG4gIE91dGNvbWUsXG4gIFRyYW5zYWN0aW9uIGFzIFRyYW5zYWN0aW9uSW50ZXJmYWNlLFxuICBUcmFuc2FjdGlvbkNvbnRleHQsXG4gIFRyYW5zYWN0aW9uTWV0YWRhdGEsXG59IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgZHJvcFVuZGVmaW5lZEtleXMsIGlzSW5zdGFuY2VPZiwgbG9nZ2VyIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmltcG9ydCB7IFNwYW4gYXMgU3BhbkNsYXNzLCBTcGFuUmVjb3JkZXIgfSBmcm9tICcuL3NwYW4nO1xuXG4vKiogSlNEb2MgKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiBleHRlbmRzIFNwYW5DbGFzcyBpbXBsZW1lbnRzIFRyYW5zYWN0aW9uSW50ZXJmYWNlIHtcbiAgcHVibGljIG5hbWU6IHN0cmluZztcblxuICBwdWJsaWMgbWV0YWRhdGE6IFRyYW5zYWN0aW9uTWV0YWRhdGE7XG5cbiAgcHJpdmF0ZSBfbWVhc3VyZW1lbnRzOiBNZWFzdXJlbWVudHMgPSB7fTtcblxuICAvKipcbiAgICogVGhlIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBodWIuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9odWI6IEh1YiA9IChnZXRDdXJyZW50SHViKCkgYXMgdW5rbm93bikgYXMgSHViO1xuXG4gIHByaXZhdGUgX3RyaW1FbmQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGlzIGNvbnN0cnVjdG9yIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgbWFudWFsbHkuIFRob3NlIGluc3RydW1lbnRpbmcgdHJhY2luZyBzaG91bGQgdXNlXG4gICAqIGBTZW50cnkuc3RhcnRUcmFuc2FjdGlvbigpYCwgYW5kIGludGVybmFsIG1ldGhvZHMgc2hvdWxkIHVzZSBgaHViLnN0YXJ0VHJhbnNhY3Rpb24oKWAuXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAaGlkZWNvbnN0cnVjdG9yXG4gICAqIEBoaWRkZW5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0cmFuc2FjdGlvbkNvbnRleHQ6IFRyYW5zYWN0aW9uQ29udGV4dCwgaHViPzogSHViKSB7XG4gICAgc3VwZXIodHJhbnNhY3Rpb25Db250ZXh0KTtcblxuICAgIGlmIChpc0luc3RhbmNlT2YoaHViLCBIdWIpKSB7XG4gICAgICB0aGlzLl9odWIgPSBodWIgYXMgSHViO1xuICAgIH1cblxuICAgIHRoaXMubmFtZSA9IHRyYW5zYWN0aW9uQ29udGV4dC5uYW1lIHx8ICcnO1xuXG4gICAgdGhpcy5tZXRhZGF0YSA9IHRyYW5zYWN0aW9uQ29udGV4dC5tZXRhZGF0YSB8fCB7fTtcbiAgICB0aGlzLl90cmltRW5kID0gdHJhbnNhY3Rpb25Db250ZXh0LnRyaW1FbmQ7XG5cbiAgICAvLyB0aGlzIGlzIGJlY2F1c2UgdHJhbnNhY3Rpb25zIGFyZSBhbHNvIHNwYW5zLCBhbmQgc3BhbnMgaGF2ZSBhIHRyYW5zYWN0aW9uIHBvaW50ZXJcbiAgICB0aGlzLnRyYW5zYWN0aW9uID0gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBKU0RvY1xuICAgKi9cbiAgcHVibGljIHNldE5hbWUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2hlcyBTcGFuUmVjb3JkZXIgdG8gdGhlIHNwYW4gaXRzZWxmXG4gICAqIEBwYXJhbSBtYXhsZW4gbWF4aW11bSBudW1iZXIgb2Ygc3BhbnMgdGhhdCBjYW4gYmUgcmVjb3JkZWRcbiAgICovXG4gIHB1YmxpYyBpbml0U3BhblJlY29yZGVyKG1heGxlbjogbnVtYmVyID0gMTAwMCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zcGFuUmVjb3JkZXIpIHtcbiAgICAgIHRoaXMuc3BhblJlY29yZGVyID0gbmV3IFNwYW5SZWNvcmRlcihtYXhsZW4pO1xuICAgIH1cbiAgICB0aGlzLnNwYW5SZWNvcmRlci5hZGQodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG9ic2VydmVkIG1lYXN1cmVtZW50cyBmb3IgdGhpcyB0cmFuc2FjdGlvbi5cbiAgICogQGhpZGRlblxuICAgKi9cbiAgcHVibGljIHNldE1lYXN1cmVtZW50cyhtZWFzdXJlbWVudHM6IE1lYXN1cmVtZW50cyk6IHZvaWQge1xuICAgIHRoaXMuX21lYXN1cmVtZW50cyA9IHsgLi4ubWVhc3VyZW1lbnRzIH07XG4gIH1cblxuICAvKipcbiAgICogU2V0IG1ldGFkYXRhIGZvciB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKiBAaGlkZGVuXG4gICAqL1xuICBwdWJsaWMgc2V0TWV0YWRhdGEobmV3TWV0YWRhdGE6IFRyYW5zYWN0aW9uTWV0YWRhdGEpOiB2b2lkIHtcbiAgICB0aGlzLm1ldGFkYXRhID0geyAuLi50aGlzLm1ldGFkYXRhLCAuLi5uZXdNZXRhZGF0YSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgZmluaXNoKGVuZFRpbWVzdGFtcD86IG51bWJlcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgLy8gVGhpcyB0cmFuc2FjdGlvbiBpcyBhbHJlYWR5IGZpbmlzaGVkLCBzbyB3ZSBzaG91bGQgbm90IGZsdXNoIGl0IGFnYWluLlxuICAgIGlmICh0aGlzLmVuZFRpbWVzdGFtcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5uYW1lKSB7XG4gICAgICBsb2dnZXIud2FybignVHJhbnNhY3Rpb24gaGFzIG5vIG5hbWUsIGZhbGxpbmcgYmFjayB0byBgPHVubGFiZWxlZCB0cmFuc2FjdGlvbj5gLicpO1xuICAgICAgdGhpcy5uYW1lID0gJzx1bmxhYmVsZWQgdHJhbnNhY3Rpb24+JztcbiAgICB9XG5cbiAgICAvLyBqdXN0IHNldHMgdGhlIGVuZCB0aW1lc3RhbXBcbiAgICBzdXBlci5maW5pc2goZW5kVGltZXN0YW1wKTtcblxuICAgIGlmICh0aGlzLnNhbXBsZWQgIT09IHRydWUpIHtcbiAgICAgIC8vIEF0IHRoaXMgcG9pbnQgaWYgYHNhbXBsZWQgIT09IHRydWVgIHdlIHdhbnQgdG8gZGlzY2FyZCB0aGUgdHJhbnNhY3Rpb24uXG4gICAgICBsb2dnZXIubG9nKCdbVHJhY2luZ10gRGlzY2FyZGluZyB0cmFuc2FjdGlvbiBiZWNhdXNlIGl0cyB0cmFjZSB3YXMgbm90IGNob3NlbiB0byBiZSBzYW1wbGVkLicpO1xuXG4gICAgICB0aGlzLl9odWJcbiAgICAgICAgLmdldENsaWVudCgpXG4gICAgICAgID8uZ2V0VHJhbnNwb3J0Py4oKVxuICAgICAgICAucmVjb3JkTG9zdEV2ZW50Py4oT3V0Y29tZS5TYW1wbGVSYXRlLCAndHJhbnNhY3Rpb24nKTtcblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZFNwYW5zID0gdGhpcy5zcGFuUmVjb3JkZXIgPyB0aGlzLnNwYW5SZWNvcmRlci5zcGFucy5maWx0ZXIocyA9PiBzICE9PSB0aGlzICYmIHMuZW5kVGltZXN0YW1wKSA6IFtdO1xuXG4gICAgaWYgKHRoaXMuX3RyaW1FbmQgJiYgZmluaXNoZWRTcGFucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmVuZFRpbWVzdGFtcCA9IGZpbmlzaGVkU3BhbnMucmVkdWNlKChwcmV2OiBTcGFuQ2xhc3MsIGN1cnJlbnQ6IFNwYW5DbGFzcykgPT4ge1xuICAgICAgICBpZiAocHJldi5lbmRUaW1lc3RhbXAgJiYgY3VycmVudC5lbmRUaW1lc3RhbXApIHtcbiAgICAgICAgICByZXR1cm4gcHJldi5lbmRUaW1lc3RhbXAgPiBjdXJyZW50LmVuZFRpbWVzdGFtcCA/IHByZXYgOiBjdXJyZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgfSkuZW5kVGltZXN0YW1wO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uOiBFdmVudCA9IHtcbiAgICAgIGNvbnRleHRzOiB7XG4gICAgICAgIHRyYWNlOiB0aGlzLmdldFRyYWNlQ29udGV4dCgpLFxuICAgICAgfSxcbiAgICAgIHNwYW5zOiBmaW5pc2hlZFNwYW5zLFxuICAgICAgc3RhcnRfdGltZXN0YW1wOiB0aGlzLnN0YXJ0VGltZXN0YW1wLFxuICAgICAgdGFnczogdGhpcy50YWdzLFxuICAgICAgdGltZXN0YW1wOiB0aGlzLmVuZFRpbWVzdGFtcCxcbiAgICAgIHRyYW5zYWN0aW9uOiB0aGlzLm5hbWUsXG4gICAgICB0eXBlOiAndHJhbnNhY3Rpb24nLFxuICAgICAgZGVidWdfbWV0YTogdGhpcy5tZXRhZGF0YSxcbiAgICB9O1xuXG4gICAgY29uc3QgaGFzTWVhc3VyZW1lbnRzID0gT2JqZWN0LmtleXModGhpcy5fbWVhc3VyZW1lbnRzKS5sZW5ndGggPiAwO1xuXG4gICAgaWYgKGhhc01lYXN1cmVtZW50cykge1xuICAgICAgbG9nZ2VyLmxvZygnW01lYXN1cmVtZW50c10gQWRkaW5nIG1lYXN1cmVtZW50cyB0byB0cmFuc2FjdGlvbicsIEpTT04uc3RyaW5naWZ5KHRoaXMuX21lYXN1cmVtZW50cywgdW5kZWZpbmVkLCAyKSk7XG4gICAgICB0cmFuc2FjdGlvbi5tZWFzdXJlbWVudHMgPSB0aGlzLl9tZWFzdXJlbWVudHM7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmxvZyhgW1RyYWNpbmddIEZpbmlzaGluZyAke3RoaXMub3B9IHRyYW5zYWN0aW9uOiAke3RoaXMubmFtZX0uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5faHViLmNhcHR1cmVFdmVudCh0cmFuc2FjdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyB0b0NvbnRleHQoKTogVHJhbnNhY3Rpb25Db250ZXh0IHtcbiAgICBjb25zdCBzcGFuQ29udGV4dCA9IHN1cGVyLnRvQ29udGV4dCgpO1xuXG4gICAgcmV0dXJuIGRyb3BVbmRlZmluZWRLZXlzKHtcbiAgICAgIC4uLnNwYW5Db250ZXh0LFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgdHJpbUVuZDogdGhpcy5fdHJpbUVuZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHVwZGF0ZVdpdGhDb250ZXh0KHRyYW5zYWN0aW9uQ29udGV4dDogVHJhbnNhY3Rpb25Db250ZXh0KTogdGhpcyB7XG4gICAgc3VwZXIudXBkYXRlV2l0aENvbnRleHQodHJhbnNhY3Rpb25Db250ZXh0KTtcblxuICAgIHRoaXMubmFtZSA9IHRyYW5zYWN0aW9uQ29udGV4dC5uYW1lID8/ICcnO1xuXG4gICAgdGhpcy5fdHJpbUVuZCA9IHRyYW5zYWN0aW9uQ29udGV4dC50cmltRW5kO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBIdWIgfSBmcm9tICdAc2VudHJ5L2h1Yic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkNvbnRleHQgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGxvZ2dlciwgdGltZXN0YW1wV2l0aE1zIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmltcG9ydCB7IEZJTklTSF9SRUFTT05fVEFHLCBJRExFX1RSQU5TQUNUSU9OX0ZJTklTSF9SRUFTT05TIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgU3BhbiwgU3BhblJlY29yZGVyIH0gZnJvbSAnLi9zcGFuJztcbmltcG9ydCB7IFNwYW5TdGF0dXMgfSBmcm9tICcuL3NwYW5zdGF0dXMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSURMRV9USU1FT1VUID0gMTAwMDtcbmV4cG9ydCBjb25zdCBIRUFSVEJFQVRfSU5URVJWQUwgPSA1MDAwO1xuXG4vKipcbiAqIEBpbmhlcml0RG9jXG4gKi9cbmV4cG9ydCBjbGFzcyBJZGxlVHJhbnNhY3Rpb25TcGFuUmVjb3JkZXIgZXh0ZW5kcyBTcGFuUmVjb3JkZXIge1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcHVzaEFjdGl2aXR5OiAoaWQ6IHN0cmluZykgPT4gdm9pZCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wb3BBY3Rpdml0eTogKGlkOiBzdHJpbmcpID0+IHZvaWQsXG4gICAgcHVibGljIHRyYW5zYWN0aW9uU3BhbklkOiBzdHJpbmcgPSAnJyxcbiAgICBtYXhsZW4/OiBudW1iZXIsXG4gICkge1xuICAgIHN1cGVyKG1heGxlbik7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBhZGQoc3BhbjogU3Bhbik6IHZvaWQge1xuICAgIC8vIFdlIHNob3VsZCBtYWtlIHN1cmUgd2UgZG8gbm90IHB1c2ggYW5kIHBvcCBhY3Rpdml0aWVzIGZvclxuICAgIC8vIHRoZSB0cmFuc2FjdGlvbiB0aGF0IHRoaXMgc3BhbiByZWNvcmRlciBiZWxvbmdzIHRvLlxuICAgIGlmIChzcGFuLnNwYW5JZCAhPT0gdGhpcy50cmFuc2FjdGlvblNwYW5JZCkge1xuICAgICAgLy8gV2UgcGF0Y2ggc3Bhbi5maW5pc2goKSB0byBwb3AgYW4gYWN0aXZpdHkgYWZ0ZXIgc2V0dGluZyBhbiBlbmRUaW1lc3RhbXAuXG4gICAgICBzcGFuLmZpbmlzaCA9IChlbmRUaW1lc3RhbXA/OiBudW1iZXIpID0+IHtcbiAgICAgICAgc3Bhbi5lbmRUaW1lc3RhbXAgPSB0eXBlb2YgZW5kVGltZXN0YW1wID09PSAnbnVtYmVyJyA/IGVuZFRpbWVzdGFtcCA6IHRpbWVzdGFtcFdpdGhNcygpO1xuICAgICAgICB0aGlzLl9wb3BBY3Rpdml0eShzcGFuLnNwYW5JZCk7XG4gICAgICB9O1xuXG4gICAgICAvLyBXZSBzaG91bGQgb25seSBwdXNoIG5ldyBhY3Rpdml0aWVzIGlmIHRoZSBzcGFuIGRvZXMgbm90IGhhdmUgYW4gZW5kIHRpbWVzdGFtcC5cbiAgICAgIGlmIChzcGFuLmVuZFRpbWVzdGFtcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3B1c2hBY3Rpdml0eShzcGFuLnNwYW5JZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3VwZXIuYWRkKHNwYW4pO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIEJlZm9yZUZpbmlzaENhbGxiYWNrID0gKHRyYW5zYWN0aW9uU3BhbjogSWRsZVRyYW5zYWN0aW9uLCBlbmRUaW1lc3RhbXA6IG51bWJlcikgPT4gdm9pZDtcblxuLyoqXG4gKiBBbiBJZGxlVHJhbnNhY3Rpb24gaXMgYSB0cmFuc2FjdGlvbiB0aGF0IGF1dG9tYXRpY2FsbHkgZmluaXNoZXMuIEl0IGRvZXMgdGhpcyBieSB0cmFja2luZyBjaGlsZCBzcGFucyBhcyBhY3Rpdml0aWVzLlxuICogWW91IGNhbiBoYXZlIG11bHRpcGxlIElkbGVUcmFuc2FjdGlvbnMgYWN0aXZlLCBidXQgaWYgdGhlIGBvblNjb3BlYCBvcHRpb24gaXMgc3BlY2lmaWVkLCB0aGUgaWRsZSB0cmFuc2FjdGlvbiB3aWxsXG4gKiBwdXQgaXRzZWxmIG9uIHRoZSBzY29wZSBvbiBjcmVhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIElkbGVUcmFuc2FjdGlvbiBleHRlbmRzIFRyYW5zYWN0aW9uIHtcbiAgLy8gQWN0aXZpdGllcyBzdG9yZSBhIGxpc3Qgb2YgYWN0aXZlIHNwYW5zXG4gIHB1YmxpYyBhY3Rpdml0aWVzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXG4gIC8vIFRyYWNrIHN0YXRlIG9mIGFjdGl2aXRpZXMgaW4gcHJldmlvdXMgaGVhcnRiZWF0XG4gIHByaXZhdGUgX3ByZXZIZWFydGJlYXRTdHJpbmc6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvLyBBbW91bnQgb2YgdGltZXMgaGVhcnRiZWF0IGhhcyBjb3VudGVkLiBXaWxsIGNhdXNlIHRyYW5zYWN0aW9uIHRvIGZpbmlzaCBhZnRlciAzIGJlYXRzLlxuICBwcml2YXRlIF9oZWFydGJlYXRDb3VudGVyOiBudW1iZXIgPSAwO1xuXG4gIC8vIFdlIHNob3VsZCBub3QgdXNlIGhlYXJ0YmVhdCBpZiB3ZSBmaW5pc2hlZCBhIHRyYW5zYWN0aW9uXG4gIHByaXZhdGUgX2ZpbmlzaGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYmVmb3JlRmluaXNoQ2FsbGJhY2tzOiBCZWZvcmVGaW5pc2hDYWxsYmFja1tdID0gW107XG5cbiAgLyoqXG4gICAqIElmIGEgdHJhbnNhY3Rpb24gaXMgY3JlYXRlZCBhbmQgbm8gYWN0aXZpdGllcyBhcmUgYWRkZWQsIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXRcbiAgICogaXQgdGltZXMgb3V0IHByb3Blcmx5LiBUaGlzIGlzIGNsZWFyZWQgYW5kIG5vdCB1c2VkIHdoZW4gYWN0aXZpdGllcyBhcmUgYWRkZWQuXG4gICAqL1xuICBwcml2YXRlIF9pbml0VGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHRyYW5zYWN0aW9uQ29udGV4dDogVHJhbnNhY3Rpb25Db250ZXh0LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2lkbGVIdWI/OiBIdWIsXG4gICAgLyoqXG4gICAgICogVGhlIHRpbWUgdG8gd2FpdCBpbiBtcyB1bnRpbCB0aGUgaWRsZSB0cmFuc2FjdGlvbiB3aWxsIGJlIGZpbmlzaGVkLlxuICAgICAqIEBkZWZhdWx0IDEwMDBcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pZGxlVGltZW91dDogbnVtYmVyID0gREVGQVVMVF9JRExFX1RJTUVPVVQsXG4gICAgLy8gSWYgYW4gaWRsZSB0cmFuc2FjdGlvbiBzaG91bGQgYmUgcHV0IGl0c2VsZiBvbiBhbmQgb2ZmIHRoZSBzY29wZSBhdXRvbWF0aWNhbGx5LlxuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uU2NvcGU6IGJvb2xlYW4gPSBmYWxzZSxcbiAgKSB7XG4gICAgc3VwZXIodHJhbnNhY3Rpb25Db250ZXh0LCBfaWRsZUh1Yik7XG5cbiAgICBpZiAoX2lkbGVIdWIgJiYgX29uU2NvcGUpIHtcbiAgICAgIC8vIFRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZSBhY3RpdmUgdHJhbnNhY3Rpb24gb24gdGhlIHNjb3BlXG4gICAgICBjbGVhckFjdGl2ZVRyYW5zYWN0aW9uKF9pZGxlSHViKTtcblxuICAgICAgLy8gV2Ugc2V0IHRoZSB0cmFuc2FjdGlvbiBoZXJlIG9uIHRoZSBzY29wZSBzbyBlcnJvciBldmVudHMgcGljayB1cCB0aGUgdHJhY2VcbiAgICAgIC8vIGNvbnRleHQgYW5kIGF0dGFjaCBpdCB0byB0aGUgZXJyb3IuXG4gICAgICBsb2dnZXIubG9nKGBTZXR0aW5nIGlkbGUgdHJhbnNhY3Rpb24gb24gc2NvcGUuIFNwYW4gSUQ6ICR7dGhpcy5zcGFuSWR9YCk7XG4gICAgICBfaWRsZUh1Yi5jb25maWd1cmVTY29wZShzY29wZSA9PiBzY29wZS5zZXRTcGFuKHRoaXMpKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9maW5pc2hlZCkge1xuICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuX2lkbGVUaW1lb3V0KTtcbiAgfVxuXG4gIC8qKiB7QGluaGVyaXREb2N9ICovXG4gIHB1YmxpYyBmaW5pc2goZW5kVGltZXN0YW1wOiBudW1iZXIgPSB0aW1lc3RhbXBXaXRoTXMoKSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgdGhpcy5fZmluaXNoZWQgPSB0cnVlO1xuICAgIHRoaXMuYWN0aXZpdGllcyA9IHt9O1xuXG4gICAgaWYgKHRoaXMuc3BhblJlY29yZGVyKSB7XG4gICAgICBsb2dnZXIubG9nKCdbVHJhY2luZ10gZmluaXNoaW5nIElkbGVUcmFuc2FjdGlvbicsIG5ldyBEYXRlKGVuZFRpbWVzdGFtcCAqIDEwMDApLnRvSVNPU3RyaW5nKCksIHRoaXMub3ApO1xuXG4gICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHRoaXMuX2JlZm9yZUZpbmlzaENhbGxiYWNrcykge1xuICAgICAgICBjYWxsYmFjayh0aGlzLCBlbmRUaW1lc3RhbXApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNwYW5SZWNvcmRlci5zcGFucyA9IHRoaXMuc3BhblJlY29yZGVyLnNwYW5zLmZpbHRlcigoc3BhbjogU3BhbikgPT4ge1xuICAgICAgICAvLyBJZiB3ZSBhcmUgZGVhbGluZyB3aXRoIHRoZSB0cmFuc2FjdGlvbiBpdHNlbGYsIHdlIGp1c3QgcmV0dXJuIGl0XG4gICAgICAgIGlmIChzcGFuLnNwYW5JZCA9PT0gdGhpcy5zcGFuSWQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlIGNhbmNlbCBhbGwgcGVuZGluZyBzcGFucyB3aXRoIHN0YXR1cyBcImNhbmNlbGxlZFwiIHRvIGluZGljYXRlIHRoZSBpZGxlIHRyYW5zYWN0aW9uIHdhcyBmaW5pc2hlZCBlYXJseVxuICAgICAgICBpZiAoIXNwYW4uZW5kVGltZXN0YW1wKSB7XG4gICAgICAgICAgc3Bhbi5lbmRUaW1lc3RhbXAgPSBlbmRUaW1lc3RhbXA7XG4gICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoU3BhblN0YXR1cy5DYW5jZWxsZWQpO1xuICAgICAgICAgIGxvZ2dlci5sb2coJ1tUcmFjaW5nXSBjYW5jZWxsaW5nIHNwYW4gc2luY2UgdHJhbnNhY3Rpb24gZW5kZWQgZWFybHknLCBKU09OLnN0cmluZ2lmeShzcGFuLCB1bmRlZmluZWQsIDIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGtlZXBTcGFuID0gc3Bhbi5zdGFydFRpbWVzdGFtcCA8IGVuZFRpbWVzdGFtcDtcbiAgICAgICAgaWYgKCFrZWVwU3Bhbikge1xuICAgICAgICAgIGxvZ2dlci5sb2coXG4gICAgICAgICAgICAnW1RyYWNpbmddIGRpc2NhcmRpbmcgU3BhbiBzaW5jZSBpdCBoYXBwZW5lZCBhZnRlciBUcmFuc2FjdGlvbiB3YXMgZmluaXNoZWQnLFxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoc3BhbiwgdW5kZWZpbmVkLCAyKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZWVwU3BhbjtcbiAgICAgIH0pO1xuXG4gICAgICBsb2dnZXIubG9nKCdbVHJhY2luZ10gZmx1c2hpbmcgSWRsZVRyYW5zYWN0aW9uJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5sb2coJ1tUcmFjaW5nXSBObyBhY3RpdmUgSWRsZVRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgLy8gdGhpcy5fb25TY29wZSBpcyB0cnVlIGlmIHRoZSB0cmFuc2FjdGlvbiB3YXMgcHJldmlvdXNseSBvbiB0aGUgc2NvcGUuXG4gICAgaWYgKHRoaXMuX29uU2NvcGUpIHtcbiAgICAgIGNsZWFyQWN0aXZlVHJhbnNhY3Rpb24odGhpcy5faWRsZUh1Yik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLmZpbmlzaChlbmRUaW1lc3RhbXApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBnZXRzIGV4Y2VjdXRlZCBiZWZvcmUgdGhlIHRyYW5zYWN0aW9uIGZpbmlzaGVzLlxuICAgKiBVc2VmdWwgZm9yIGNsZWFudXAgb3IgaWYgeW91IHdhbnQgdG8gYWRkIGFueSBhZGRpdGlvbmFsIHNwYW5zIGJhc2VkIG9uIGN1cnJlbnQgY29udGV4dC5cbiAgICpcbiAgICogVGhpcyBpcyBleHBvc2VkIGJlY2F1c2UgdXNlcnMgaGF2ZSBubyBvdGhlciB3YXkgb2YgcnVubmluZyBzb21ldGhpbmcgYmVmb3JlIGFuIGlkbGUgdHJhbnNhY3Rpb25cbiAgICogZmluaXNoZXMuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJCZWZvcmVGaW5pc2hDYWxsYmFjayhjYWxsYmFjazogQmVmb3JlRmluaXNoQ2FsbGJhY2spOiB2b2lkIHtcbiAgICB0aGlzLl9iZWZvcmVGaW5pc2hDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBpbml0U3BhblJlY29yZGVyKG1heGxlbj86IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5zcGFuUmVjb3JkZXIpIHtcbiAgICAgIGNvbnN0IHB1c2hBY3Rpdml0eSA9IChpZDogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9maW5pc2hlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wdXNoQWN0aXZpdHkoaWQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHBvcEFjdGl2aXR5ID0gKGlkOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2ZpbmlzaGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BvcEFjdGl2aXR5KGlkKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuc3BhblJlY29yZGVyID0gbmV3IElkbGVUcmFuc2FjdGlvblNwYW5SZWNvcmRlcihwdXNoQWN0aXZpdHksIHBvcEFjdGl2aXR5LCB0aGlzLnNwYW5JZCwgbWF4bGVuKTtcblxuICAgICAgLy8gU3RhcnQgaGVhcnRiZWF0IHNvIHRoYXQgdHJhbnNhY3Rpb25zIGRvIG5vdCBydW4gZm9yZXZlci5cbiAgICAgIGxvZ2dlci5sb2coJ1N0YXJ0aW5nIGhlYXJ0YmVhdCcpO1xuICAgICAgdGhpcy5fcGluZ0hlYXJ0YmVhdCgpO1xuICAgIH1cbiAgICB0aGlzLnNwYW5SZWNvcmRlci5hZGQodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgdHJhY2tpbmcgYSBzcGVjaWZpYyBhY3Rpdml0eS5cbiAgICogQHBhcmFtIHNwYW5JZCBUaGUgc3BhbiBpZCB0aGF0IHJlcHJlc2VudHMgdGhlIGFjdGl2aXR5XG4gICAqL1xuICBwcml2YXRlIF9wdXNoQWN0aXZpdHkoc3BhbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faW5pdFRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9pbml0VGltZW91dCk7XG4gICAgICB0aGlzLl9pbml0VGltZW91dCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbG9nZ2VyLmxvZyhgW1RyYWNpbmddIHB1c2hBY3Rpdml0eTogJHtzcGFuSWR9YCk7XG4gICAgdGhpcy5hY3Rpdml0aWVzW3NwYW5JZF0gPSB0cnVlO1xuICAgIGxvZ2dlci5sb2coJ1tUcmFjaW5nXSBuZXcgYWN0aXZpdGllcyBjb3VudCcsIE9iamVjdC5rZXlzKHRoaXMuYWN0aXZpdGllcykubGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gYWN0aXZpdHkgZnJvbSB1c2FnZVxuICAgKiBAcGFyYW0gc3BhbklkIFRoZSBzcGFuIGlkIHRoYXQgcmVwcmVzZW50cyB0aGUgYWN0aXZpdHlcbiAgICovXG4gIHByaXZhdGUgX3BvcEFjdGl2aXR5KHNwYW5JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWN0aXZpdGllc1tzcGFuSWRdKSB7XG4gICAgICBsb2dnZXIubG9nKGBbVHJhY2luZ10gcG9wQWN0aXZpdHkgJHtzcGFuSWR9YCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlXG4gICAgICBkZWxldGUgdGhpcy5hY3Rpdml0aWVzW3NwYW5JZF07XG4gICAgICBsb2dnZXIubG9nKCdbVHJhY2luZ10gbmV3IGFjdGl2aXRpZXMgY291bnQnLCBPYmplY3Qua2V5cyh0aGlzLmFjdGl2aXRpZXMpLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuYWN0aXZpdGllcykubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy5faWRsZVRpbWVvdXQ7XG4gICAgICAvLyBXZSBuZWVkIHRvIGFkZCB0aGUgdGltZW91dCBoZXJlIHRvIGhhdmUgdGhlIHJlYWwgZW5kdGltZXN0YW1wIG9mIHRoZSB0cmFuc2FjdGlvblxuICAgICAgLy8gUmVtZW1iZXIgdGltZXN0YW1wV2l0aE1zIGlzIGluIHNlY29uZHMsIHRpbWVvdXQgaXMgaW4gbXNcbiAgICAgIGNvbnN0IGVuZCA9IHRpbWVzdGFtcFdpdGhNcygpICsgdGltZW91dCAvIDEwMDA7XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuX2ZpbmlzaGVkKSB7XG4gICAgICAgICAgdGhpcy5zZXRUYWcoRklOSVNIX1JFQVNPTl9UQUcsIElETEVfVFJBTlNBQ1RJT05fRklOSVNIX1JFQVNPTlNbMV0pO1xuICAgICAgICAgIHRoaXMuZmluaXNoKGVuZCk7XG4gICAgICAgIH1cbiAgICAgIH0sIHRpbWVvdXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hlbiBlbnRyaWVzIG9mIHRoaXMuYWN0aXZpdGllcyBhcmUgbm90IGNoYW5naW5nIGZvciAzIGJlYXRzLlxuICAgKiBJZiB0aGlzIG9jY3VycyB3ZSBmaW5pc2ggdGhlIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBfYmVhdCgpOiB2b2lkIHtcbiAgICAvLyBXZSBzaG91bGQgbm90IGJlIHJ1bm5pbmcgaGVhcnRiZWF0IGlmIHRoZSBpZGxlIHRyYW5zYWN0aW9uIGlzIGZpbmlzaGVkLlxuICAgIGlmICh0aGlzLl9maW5pc2hlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGhlYXJ0YmVhdFN0cmluZyA9IE9iamVjdC5rZXlzKHRoaXMuYWN0aXZpdGllcykuam9pbignJyk7XG5cbiAgICBpZiAoaGVhcnRiZWF0U3RyaW5nID09PSB0aGlzLl9wcmV2SGVhcnRiZWF0U3RyaW5nKSB7XG4gICAgICB0aGlzLl9oZWFydGJlYXRDb3VudGVyICs9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2hlYXJ0YmVhdENvdW50ZXIgPSAxO1xuICAgIH1cblxuICAgIHRoaXMuX3ByZXZIZWFydGJlYXRTdHJpbmcgPSBoZWFydGJlYXRTdHJpbmc7XG5cbiAgICBpZiAodGhpcy5faGVhcnRiZWF0Q291bnRlciA+PSAzKSB7XG4gICAgICBsb2dnZXIubG9nKGBbVHJhY2luZ10gVHJhbnNhY3Rpb24gZmluaXNoZWQgYmVjYXVzZSBvZiBubyBjaGFuZ2UgZm9yIDMgaGVhcnQgYmVhdHNgKTtcbiAgICAgIHRoaXMuc2V0U3RhdHVzKFNwYW5TdGF0dXMuRGVhZGxpbmVFeGNlZWRlZCk7XG4gICAgICB0aGlzLnNldFRhZyhGSU5JU0hfUkVBU09OX1RBRywgSURMRV9UUkFOU0FDVElPTl9GSU5JU0hfUkVBU09OU1swXSk7XG4gICAgICB0aGlzLmZpbmlzaCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9waW5nSGVhcnRiZWF0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBpbmdzIHRoZSBoZWFydGJlYXRcbiAgICovXG4gIHByaXZhdGUgX3BpbmdIZWFydGJlYXQoKTogdm9pZCB7XG4gICAgbG9nZ2VyLmxvZyhgcGluZ2luZyBIZWFydGJlYXQgLT4gY3VycmVudCBjb3VudGVyOiAke3RoaXMuX2hlYXJ0YmVhdENvdW50ZXJ9YCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9iZWF0KCk7XG4gICAgfSwgSEVBUlRCRUFUX0lOVEVSVkFMKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0IGFjdGl2ZSB0cmFuc2FjdGlvbiBvbiBzY29wZVxuICovXG5mdW5jdGlvbiBjbGVhckFjdGl2ZVRyYW5zYWN0aW9uKGh1Yj86IEh1Yik6IHZvaWQge1xuICBpZiAoaHViKSB7XG4gICAgY29uc3Qgc2NvcGUgPSBodWIuZ2V0U2NvcGUoKTtcbiAgICBpZiAoc2NvcGUpIHtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gc2NvcGUuZ2V0VHJhbnNhY3Rpb24oKTtcbiAgICAgIGlmICh0cmFuc2FjdGlvbikge1xuICAgICAgICBzY29wZS5zZXRTcGFuKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgZ2V0TWFpbkNhcnJpZXIsIEh1YiB9IGZyb20gJ0BzZW50cnkvaHViJztcbmltcG9ydCB7XG4gIEN1c3RvbVNhbXBsaW5nQ29udGV4dCxcbiAgSW50ZWdyYXRpb24sXG4gIEludGVncmF0aW9uQ2xhc3MsXG4gIE9wdGlvbnMsXG4gIFNhbXBsaW5nQ29udGV4dCxcbiAgVHJhbnNhY3Rpb25Db250ZXh0LFxuICBUcmFuc2FjdGlvblNhbXBsaW5nTWV0aG9kLFxufSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGR5bmFtaWNSZXF1aXJlLCBpc05vZGVFbnYsIGxvYWRNb2R1bGUsIGxvZ2dlciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5pbXBvcnQgeyByZWdpc3RlckVycm9ySW5zdHJ1bWVudGF0aW9uIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgSWRsZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi9pZGxldHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IGhhc1RyYWNpbmdFbmFibGVkIH0gZnJvbSAnLi91dGlscyc7XG5cbi8qKiBSZXR1cm5zIGFsbCB0cmFjZSBoZWFkZXJzIHRoYXQgYXJlIGN1cnJlbnRseSBvbiB0aGUgdG9wIHNjb3BlLiAqL1xuZnVuY3Rpb24gdHJhY2VIZWFkZXJzKHRoaXM6IEh1Yik6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICBjb25zdCBzY29wZSA9IHRoaXMuZ2V0U2NvcGUoKTtcbiAgaWYgKHNjb3BlKSB7XG4gICAgY29uc3Qgc3BhbiA9IHNjb3BlLmdldFNwYW4oKTtcbiAgICBpZiAoc3Bhbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ3NlbnRyeS10cmFjZSc6IHNwYW4udG9UcmFjZXBhcmVudCgpLFxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHt9O1xufVxuXG4vKipcbiAqIE1ha2VzIGEgc2FtcGxpbmcgZGVjaXNpb24gZm9yIHRoZSBnaXZlbiB0cmFuc2FjdGlvbiBhbmQgc3RvcmVzIGl0IG9uIHRoZSB0cmFuc2FjdGlvbi5cbiAqXG4gKiBDYWxsZWQgZXZlcnkgdGltZSBhIHRyYW5zYWN0aW9uIGlzIGNyZWF0ZWQuIE9ubHkgdHJhbnNhY3Rpb25zIHdoaWNoIGVtZXJnZSB3aXRoIGEgYHNhbXBsZWRgIHZhbHVlIG9mIGB0cnVlYCB3aWxsIGJlXG4gKiBzZW50IHRvIFNlbnRyeS5cbiAqXG4gKiBAcGFyYW0gaHViOiBUaGUgaHViIG9mZiBvZiB3aGljaCB0byByZWFkIGNvbmZpZyBvcHRpb25zXG4gKiBAcGFyYW0gdHJhbnNhY3Rpb246IFRoZSB0cmFuc2FjdGlvbiBuZWVkaW5nIGEgc2FtcGxpbmcgZGVjaXNpb25cbiAqIEBwYXJhbSBzYW1wbGluZ0NvbnRleHQ6IERlZmF1bHQgYW5kIHVzZXItcHJvdmlkZWQgZGF0YSB3aGljaCBtYXkgYmUgdXNlZCB0byBoZWxwIG1ha2UgdGhlIGRlY2lzaW9uXG4gKlxuICogQHJldHVybnMgVGhlIGdpdmVuIHRyYW5zYWN0aW9uIHdpdGggaXRzIGBzYW1wbGVkYCB2YWx1ZSBzZXRcbiAqL1xuZnVuY3Rpb24gc2FtcGxlPFQgZXh0ZW5kcyBUcmFuc2FjdGlvbj4odHJhbnNhY3Rpb246IFQsIG9wdGlvbnM6IE9wdGlvbnMsIHNhbXBsaW5nQ29udGV4dDogU2FtcGxpbmdDb250ZXh0KTogVCB7XG4gIC8vIG5vdGhpbmcgdG8gZG8gaWYgdHJhY2luZyBpcyBub3QgZW5hYmxlZFxuICBpZiAoIWhhc1RyYWNpbmdFbmFibGVkKG9wdGlvbnMpKSB7XG4gICAgdHJhbnNhY3Rpb24uc2FtcGxlZCA9IGZhbHNlO1xuICAgIHJldHVybiB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8vIGlmIHRoZSB1c2VyIGhhcyBmb3JjZWQgYSBzYW1wbGluZyBkZWNpc2lvbiBieSBwYXNzaW5nIGEgYHNhbXBsZWRgIHZhbHVlIGluIHRoZWlyIHRyYW5zYWN0aW9uIGNvbnRleHQsIGdvIHdpdGggdGhhdFxuICBpZiAodHJhbnNhY3Rpb24uc2FtcGxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdHJhbnNhY3Rpb24uc2V0TWV0YWRhdGEoe1xuICAgICAgdHJhbnNhY3Rpb25TYW1wbGluZzogeyBtZXRob2Q6IFRyYW5zYWN0aW9uU2FtcGxpbmdNZXRob2QuRXhwbGljaXQgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb247XG4gIH1cblxuICAvLyB3ZSB3b3VsZCBoYXZlIGJhaWxlZCBhbHJlYWR5IGlmIG5laXRoZXIgYHRyYWNlc1NhbXBsZXJgIG5vciBgdHJhY2VzU2FtcGxlUmF0ZWAgd2VyZSBkZWZpbmVkLCBzbyBvbmUgb2YgdGhlc2Ugc2hvdWxkXG4gIC8vIHdvcms7IHByZWZlciB0aGUgaG9vayBpZiBzb1xuICBsZXQgc2FtcGxlUmF0ZTtcbiAgaWYgKHR5cGVvZiBvcHRpb25zLnRyYWNlc1NhbXBsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzYW1wbGVSYXRlID0gb3B0aW9ucy50cmFjZXNTYW1wbGVyKHNhbXBsaW5nQ29udGV4dCk7XG4gICAgdHJhbnNhY3Rpb24uc2V0TWV0YWRhdGEoe1xuICAgICAgdHJhbnNhY3Rpb25TYW1wbGluZzoge1xuICAgICAgICBtZXRob2Q6IFRyYW5zYWN0aW9uU2FtcGxpbmdNZXRob2QuU2FtcGxlcixcbiAgICAgICAgLy8gY2FzdCB0byBudW1iZXIgaW4gY2FzZSBpdCdzIGEgYm9vbGVhblxuICAgICAgICByYXRlOiBOdW1iZXIoc2FtcGxlUmF0ZSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKHNhbXBsaW5nQ29udGV4dC5wYXJlbnRTYW1wbGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICBzYW1wbGVSYXRlID0gc2FtcGxpbmdDb250ZXh0LnBhcmVudFNhbXBsZWQ7XG4gICAgdHJhbnNhY3Rpb24uc2V0TWV0YWRhdGEoe1xuICAgICAgdHJhbnNhY3Rpb25TYW1wbGluZzogeyBtZXRob2Q6IFRyYW5zYWN0aW9uU2FtcGxpbmdNZXRob2QuSW5oZXJpdGFuY2UgfSxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBzYW1wbGVSYXRlID0gb3B0aW9ucy50cmFjZXNTYW1wbGVSYXRlO1xuICAgIHRyYW5zYWN0aW9uLnNldE1ldGFkYXRhKHtcbiAgICAgIHRyYW5zYWN0aW9uU2FtcGxpbmc6IHtcbiAgICAgICAgbWV0aG9kOiBUcmFuc2FjdGlvblNhbXBsaW5nTWV0aG9kLlJhdGUsXG4gICAgICAgIC8vIGNhc3QgdG8gbnVtYmVyIGluIGNhc2UgaXQncyBhIGJvb2xlYW5cbiAgICAgICAgcmF0ZTogTnVtYmVyKHNhbXBsZVJhdGUpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFNpbmNlIHRoaXMgaXMgY29taW5nIGZyb20gdGhlIHVzZXIgKG9yIGZyb20gYSBmdW5jdGlvbiBwcm92aWRlZCBieSB0aGUgdXNlciksIHdobyBrbm93cyB3aGF0IHdlIG1pZ2h0IGdldC4gKFRoZVxuICAvLyBvbmx5IHZhbGlkIHZhbHVlcyBhcmUgYm9vbGVhbnMgb3IgbnVtYmVycyBiZXR3ZWVuIDAgYW5kIDEuKVxuICBpZiAoIWlzVmFsaWRTYW1wbGVSYXRlKHNhbXBsZVJhdGUpKSB7XG4gICAgbG9nZ2VyLndhcm4oYFtUcmFjaW5nXSBEaXNjYXJkaW5nIHRyYW5zYWN0aW9uIGJlY2F1c2Ugb2YgaW52YWxpZCBzYW1wbGUgcmF0ZS5gKTtcbiAgICB0cmFuc2FjdGlvbi5zYW1wbGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLy8gaWYgdGhlIGZ1bmN0aW9uIHJldHVybmVkIDAgKG9yIGZhbHNlKSwgb3IgaWYgYHRyYWNlc1NhbXBsZVJhdGVgIGlzIDAsIGl0J3MgYSBzaWduIHRoZSB0cmFuc2FjdGlvbiBzaG91bGQgYmUgZHJvcHBlZFxuICBpZiAoIXNhbXBsZVJhdGUpIHtcbiAgICBsb2dnZXIubG9nKFxuICAgICAgYFtUcmFjaW5nXSBEaXNjYXJkaW5nIHRyYW5zYWN0aW9uIGJlY2F1c2UgJHtcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMudHJhY2VzU2FtcGxlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgID8gJ3RyYWNlc1NhbXBsZXIgcmV0dXJuZWQgMCBvciBmYWxzZSdcbiAgICAgICAgICA6ICdhIG5lZ2F0aXZlIHNhbXBsaW5nIGRlY2lzaW9uIHdhcyBpbmhlcml0ZWQgb3IgdHJhY2VzU2FtcGxlUmF0ZSBpcyBzZXQgdG8gMCdcbiAgICAgIH1gLFxuICAgICk7XG4gICAgdHJhbnNhY3Rpb24uc2FtcGxlZCA9IGZhbHNlO1xuICAgIHJldHVybiB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8vIE5vdyB3ZSByb2xsIHRoZSBkaWNlLiBNYXRoLnJhbmRvbSBpcyBpbmNsdXNpdmUgb2YgMCwgYnV0IG5vdCBvZiAxLCBzbyBzdHJpY3QgPCBpcyBzYWZlIGhlcmUuIEluIGNhc2Ugc2FtcGxlUmF0ZSBpc1xuICAvLyBhIGJvb2xlYW4sIHRoZSA8IGNvbXBhcmlzb24gd2lsbCBjYXVzZSBpdCB0byBiZSBhdXRvbWF0aWNhbGx5IGNhc3QgdG8gMSBpZiBpdCdzIHRydWUgYW5kIDAgaWYgaXQncyBmYWxzZS5cbiAgdHJhbnNhY3Rpb24uc2FtcGxlZCA9IE1hdGgucmFuZG9tKCkgPCAoc2FtcGxlUmF0ZSBhcyBudW1iZXIgfCBib29sZWFuKTtcblxuICAvLyBpZiB3ZSdyZSBub3QgZ29pbmcgdG8ga2VlcCBpdCwgd2UncmUgZG9uZVxuICBpZiAoIXRyYW5zYWN0aW9uLnNhbXBsZWQpIHtcbiAgICBsb2dnZXIubG9nKFxuICAgICAgYFtUcmFjaW5nXSBEaXNjYXJkaW5nIHRyYW5zYWN0aW9uIGJlY2F1c2UgaXQncyBub3QgaW5jbHVkZWQgaW4gdGhlIHJhbmRvbSBzYW1wbGUgKHNhbXBsaW5nIHJhdGUgPSAke051bWJlcihcbiAgICAgICAgc2FtcGxlUmF0ZSxcbiAgICAgICl9KWAsXG4gICAgKTtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb247XG4gIH1cblxuICBsb2dnZXIubG9nKGBbVHJhY2luZ10gc3RhcnRpbmcgJHt0cmFuc2FjdGlvbi5vcH0gdHJhbnNhY3Rpb24gLSAke3RyYW5zYWN0aW9uLm5hbWV9YCk7XG4gIHJldHVybiB0cmFuc2FjdGlvbjtcbn1cblxuLyoqXG4gKiBDaGVja3MgdGhlIGdpdmVuIHNhbXBsZSByYXRlIHRvIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZCB0eXBlIGFuZCB2YWx1ZSAoYSBib29sZWFuLCBvciBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEpLlxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU2FtcGxlUmF0ZShyYXRlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIC8vIHdlIG5lZWQgdG8gY2hlY2sgTmFOIGV4cGxpY2l0bHkgYmVjYXVzZSBpdCdzIG9mIHR5cGUgJ251bWJlcicgYW5kIHRoZXJlZm9yZSB3b3VsZG4ndCBnZXQgY2F1Z2h0IGJ5IHRoaXMgdHlwZWNoZWNrXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGlmIChpc05hTihyYXRlIGFzIGFueSkgfHwgISh0eXBlb2YgcmF0ZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHJhdGUgPT09ICdib29sZWFuJykpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgIGBbVHJhY2luZ10gR2l2ZW4gc2FtcGxlIHJhdGUgaXMgaW52YWxpZC4gU2FtcGxlIHJhdGUgbXVzdCBiZSBhIGJvb2xlYW4gb3IgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxLiBHb3QgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgcmF0ZSxcbiAgICAgICl9IG9mIHR5cGUgJHtKU09OLnN0cmluZ2lmeSh0eXBlb2YgcmF0ZSl9LmAsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBpbiBjYXNlIHNhbXBsZVJhdGUgaXMgYSBib29sZWFuLCBpdCB3aWxsIGdldCBhdXRvbWF0aWNhbGx5IGNhc3QgdG8gMSBpZiBpdCdzIHRydWUgYW5kIDAgaWYgaXQncyBmYWxzZVxuICBpZiAocmF0ZSA8IDAgfHwgcmF0ZSA+IDEpIHtcbiAgICBsb2dnZXIud2FybihgW1RyYWNpbmddIEdpdmVuIHNhbXBsZSByYXRlIGlzIGludmFsaWQuIFNhbXBsZSByYXRlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLiBHb3QgJHtyYXRlfS5gKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB0cmFuc2FjdGlvbiBhbmQgYWRkcyBhIHNhbXBsaW5nIGRlY2lzaW9uIGlmIGl0IGRvZXNuJ3QgeWV0IGhhdmUgb25lLlxuICpcbiAqIFRoZSBIdWIuc3RhcnRUcmFuc2FjdGlvbiBtZXRob2QgZGVsZWdhdGVzIHRvIHRoaXMgbWV0aG9kIHRvIGRvIGl0cyB3b3JrLCBwYXNzaW5nIHRoZSBIdWIgaW5zdGFuY2UgaW4gYXMgYHRoaXNgLCBhcyBpZlxuICogaXQgaGFkIGJlZW4gY2FsbGVkIG9uIHRoZSBodWIgZGlyZWN0bHkuIEV4aXN0cyBhcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIHRoYXQgaXQgY2FuIGJlIGluamVjdGVkIGludG8gdGhlIGNsYXNzIGFzIGFuXG4gKiBcImV4dGVuc2lvbiBtZXRob2QuXCJcbiAqXG4gKiBAcGFyYW0gdGhpczogVGhlIEh1YiBzdGFydGluZyB0aGUgdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB0cmFuc2FjdGlvbkNvbnRleHQ6IERhdGEgdXNlZCB0byBjb25maWd1cmUgdGhlIHRyYW5zYWN0aW9uXG4gKiBAcGFyYW0gQ3VzdG9tU2FtcGxpbmdDb250ZXh0OiBPcHRpb25hbCBkYXRhIHRvIGJlIHByb3ZpZGVkIHRvIHRoZSBgdHJhY2VzU2FtcGxlcmAgZnVuY3Rpb24gKGlmIGFueSlcbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV3IHRyYW5zYWN0aW9uXG4gKlxuICogQHNlZSB7QGxpbmsgSHViLnN0YXJ0VHJhbnNhY3Rpb259XG4gKi9cbmZ1bmN0aW9uIF9zdGFydFRyYW5zYWN0aW9uKFxuICB0aGlzOiBIdWIsXG4gIHRyYW5zYWN0aW9uQ29udGV4dDogVHJhbnNhY3Rpb25Db250ZXh0LFxuICBjdXN0b21TYW1wbGluZ0NvbnRleHQ/OiBDdXN0b21TYW1wbGluZ0NvbnRleHQsXG4pOiBUcmFuc2FjdGlvbiB7XG4gIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldENsaWVudCgpPy5nZXRPcHRpb25zKCkgfHwge307XG5cbiAgbGV0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uQ29udGV4dCwgdGhpcyk7XG4gIHRyYW5zYWN0aW9uID0gc2FtcGxlKHRyYW5zYWN0aW9uLCBvcHRpb25zLCB7XG4gICAgcGFyZW50U2FtcGxlZDogdHJhbnNhY3Rpb25Db250ZXh0LnBhcmVudFNhbXBsZWQsXG4gICAgdHJhbnNhY3Rpb25Db250ZXh0LFxuICAgIC4uLmN1c3RvbVNhbXBsaW5nQ29udGV4dCxcbiAgfSk7XG4gIGlmICh0cmFuc2FjdGlvbi5zYW1wbGVkKSB7XG4gICAgdHJhbnNhY3Rpb24uaW5pdFNwYW5SZWNvcmRlcihvcHRpb25zLl9leHBlcmltZW50cz8ubWF4U3BhbnMgYXMgbnVtYmVyKTtcbiAgfVxuICByZXR1cm4gdHJhbnNhY3Rpb247XG59XG5cbi8qKlxuICogQ3JlYXRlIG5ldyBpZGxlIHRyYW5zYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRJZGxlVHJhbnNhY3Rpb24oXG4gIGh1YjogSHViLFxuICB0cmFuc2FjdGlvbkNvbnRleHQ6IFRyYW5zYWN0aW9uQ29udGV4dCxcbiAgaWRsZVRpbWVvdXQ/OiBudW1iZXIsXG4gIG9uU2NvcGU/OiBib29sZWFuLFxuICBjdXN0b21TYW1wbGluZ0NvbnRleHQ/OiBDdXN0b21TYW1wbGluZ0NvbnRleHQsXG4pOiBJZGxlVHJhbnNhY3Rpb24ge1xuICBjb25zdCBvcHRpb25zID0gaHViLmdldENsaWVudCgpPy5nZXRPcHRpb25zKCkgfHwge307XG5cbiAgbGV0IHRyYW5zYWN0aW9uID0gbmV3IElkbGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbkNvbnRleHQsIGh1YiwgaWRsZVRpbWVvdXQsIG9uU2NvcGUpO1xuICB0cmFuc2FjdGlvbiA9IHNhbXBsZSh0cmFuc2FjdGlvbiwgb3B0aW9ucywge1xuICAgIHBhcmVudFNhbXBsZWQ6IHRyYW5zYWN0aW9uQ29udGV4dC5wYXJlbnRTYW1wbGVkLFxuICAgIHRyYW5zYWN0aW9uQ29udGV4dCxcbiAgICAuLi5jdXN0b21TYW1wbGluZ0NvbnRleHQsXG4gIH0pO1xuICBpZiAodHJhbnNhY3Rpb24uc2FtcGxlZCkge1xuICAgIHRyYW5zYWN0aW9uLmluaXRTcGFuUmVjb3JkZXIob3B0aW9ucy5fZXhwZXJpbWVudHM/Lm1heFNwYW5zIGFzIG51bWJlcik7XG4gIH1cbiAgcmV0dXJuIHRyYW5zYWN0aW9uO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfYWRkVHJhY2luZ0V4dGVuc2lvbnMoKTogdm9pZCB7XG4gIGNvbnN0IGNhcnJpZXIgPSBnZXRNYWluQ2FycmllcigpO1xuICBpZiAoIWNhcnJpZXIuX19TRU5UUllfXykge1xuICAgIHJldHVybjtcbiAgfVxuICBjYXJyaWVyLl9fU0VOVFJZX18uZXh0ZW5zaW9ucyA9IGNhcnJpZXIuX19TRU5UUllfXy5leHRlbnNpb25zIHx8IHt9O1xuICBpZiAoIWNhcnJpZXIuX19TRU5UUllfXy5leHRlbnNpb25zLnN0YXJ0VHJhbnNhY3Rpb24pIHtcbiAgICBjYXJyaWVyLl9fU0VOVFJZX18uZXh0ZW5zaW9ucy5zdGFydFRyYW5zYWN0aW9uID0gX3N0YXJ0VHJhbnNhY3Rpb247XG4gIH1cbiAgaWYgKCFjYXJyaWVyLl9fU0VOVFJZX18uZXh0ZW5zaW9ucy50cmFjZUhlYWRlcnMpIHtcbiAgICBjYXJyaWVyLl9fU0VOVFJZX18uZXh0ZW5zaW9ucy50cmFjZUhlYWRlcnMgPSB0cmFjZUhlYWRlcnM7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfYXV0b2xvYWREYXRhYmFzZUludGVncmF0aW9ucygpOiB2b2lkIHtcbiAgY29uc3QgY2FycmllciA9IGdldE1haW5DYXJyaWVyKCk7XG4gIGlmICghY2Fycmllci5fX1NFTlRSWV9fKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGFja2FnZVRvSW50ZWdyYXRpb25NYXBwaW5nOiBSZWNvcmQ8c3RyaW5nLCAoKSA9PiBJbnRlZ3JhdGlvbj4gPSB7XG4gICAgbW9uZ29kYigpIHtcbiAgICAgIGNvbnN0IGludGVncmF0aW9uID0gZHluYW1pY1JlcXVpcmUobW9kdWxlLCAnLi9pbnRlZ3JhdGlvbnMvbm9kZS9tb25nbycpIGFzIHtcbiAgICAgICAgTW9uZ286IEludGVncmF0aW9uQ2xhc3M8SW50ZWdyYXRpb24+O1xuICAgICAgfTtcbiAgICAgIHJldHVybiBuZXcgaW50ZWdyYXRpb24uTW9uZ28oKTtcbiAgICB9LFxuICAgIG1vbmdvb3NlKCkge1xuICAgICAgY29uc3QgaW50ZWdyYXRpb24gPSBkeW5hbWljUmVxdWlyZShtb2R1bGUsICcuL2ludGVncmF0aW9ucy9ub2RlL21vbmdvJykgYXMge1xuICAgICAgICBNb25nbzogSW50ZWdyYXRpb25DbGFzczxJbnRlZ3JhdGlvbj47XG4gICAgICB9O1xuICAgICAgcmV0dXJuIG5ldyBpbnRlZ3JhdGlvbi5Nb25nbyh7IG1vbmdvb3NlOiB0cnVlIH0pO1xuICAgIH0sXG4gICAgbXlzcWwoKSB7XG4gICAgICBjb25zdCBpbnRlZ3JhdGlvbiA9IGR5bmFtaWNSZXF1aXJlKG1vZHVsZSwgJy4vaW50ZWdyYXRpb25zL25vZGUvbXlzcWwnKSBhcyB7XG4gICAgICAgIE15c3FsOiBJbnRlZ3JhdGlvbkNsYXNzPEludGVncmF0aW9uPjtcbiAgICAgIH07XG4gICAgICByZXR1cm4gbmV3IGludGVncmF0aW9uLk15c3FsKCk7XG4gICAgfSxcbiAgICBwZygpIHtcbiAgICAgIGNvbnN0IGludGVncmF0aW9uID0gZHluYW1pY1JlcXVpcmUobW9kdWxlLCAnLi9pbnRlZ3JhdGlvbnMvbm9kZS9wb3N0Z3JlcycpIGFzIHtcbiAgICAgICAgUG9zdGdyZXM6IEludGVncmF0aW9uQ2xhc3M8SW50ZWdyYXRpb24+O1xuICAgICAgfTtcbiAgICAgIHJldHVybiBuZXcgaW50ZWdyYXRpb24uUG9zdGdyZXMoKTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IG1hcHBlZFBhY2thZ2VzID0gT2JqZWN0LmtleXMocGFja2FnZVRvSW50ZWdyYXRpb25NYXBwaW5nKVxuICAgIC5maWx0ZXIobW9kdWxlTmFtZSA9PiAhIWxvYWRNb2R1bGUobW9kdWxlTmFtZSkpXG4gICAgLm1hcChwa2cgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHBhY2thZ2VUb0ludGVncmF0aW9uTWFwcGluZ1twa2ddKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSlcbiAgICAuZmlsdGVyKHAgPT4gcCkgYXMgSW50ZWdyYXRpb25bXTtcblxuICBpZiAobWFwcGVkUGFja2FnZXMubGVuZ3RoID4gMCkge1xuICAgIGNhcnJpZXIuX19TRU5UUllfXy5pbnRlZ3JhdGlvbnMgPSBbLi4uKGNhcnJpZXIuX19TRU5UUllfXy5pbnRlZ3JhdGlvbnMgfHwgW10pLCAuLi5tYXBwZWRQYWNrYWdlc107XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIHBhdGNoZXMgdGhlIGdsb2JhbCBvYmplY3QgYW5kIGluamVjdHMgdGhlIFRyYWNpbmcgZXh0ZW5zaW9ucyBtZXRob2RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRFeHRlbnNpb25NZXRob2RzKCk6IHZvaWQge1xuICBfYWRkVHJhY2luZ0V4dGVuc2lvbnMoKTtcblxuICAvLyBEZXRlY3QgYW5kIGF1dG9tYXRpY2FsbHkgbG9hZCBzcGVjaWZpZWQgaW50ZWdyYXRpb25zLlxuICBpZiAoaXNOb2RlRW52KCkpIHtcbiAgICBfYXV0b2xvYWREYXRhYmFzZUludGVncmF0aW9ucygpO1xuICB9XG5cbiAgLy8gSWYgYW4gZXJyb3IgaGFwcGVucyBnbG9iYWxseSwgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0cmFuc2FjdGlvbiBzdGF0dXMgaXMgc2V0IHRvIGVycm9yLlxuICByZWdpc3RlckVycm9ySW5zdHJ1bWVudGF0aW9uKCk7XG59XG4iLCAiaW1wb3J0IHsgSW50ZWdyYXRpb24sIFRyYW5zYWN0aW9uIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxudHlwZSBNZXRob2QgPVxuICB8ICdhbGwnXG4gIHwgJ2dldCdcbiAgfCAncG9zdCdcbiAgfCAncHV0J1xuICB8ICdkZWxldGUnXG4gIHwgJ3BhdGNoJ1xuICB8ICdvcHRpb25zJ1xuICB8ICdoZWFkJ1xuICB8ICdjaGVja291dCdcbiAgfCAnY29weSdcbiAgfCAnbG9jaydcbiAgfCAnbWVyZ2UnXG4gIHwgJ21rYWN0aXZpdHknXG4gIHwgJ21rY29sJ1xuICB8ICdtb3ZlJ1xuICB8ICdtLXNlYXJjaCdcbiAgfCAnbm90aWZ5J1xuICB8ICdwdXJnZSdcbiAgfCAncmVwb3J0J1xuICB8ICdzZWFyY2gnXG4gIHwgJ3N1YnNjcmliZSdcbiAgfCAndHJhY2UnXG4gIHwgJ3VubG9jaydcbiAgfCAndW5zdWJzY3JpYmUnXG4gIHwgJ3VzZSc7XG5cbnR5cGUgUm91dGVyID0ge1xuICBbbWV0aG9kIGluIE1ldGhvZF06ICguLi5hcmdzOiBhbnkpID0+IGFueTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59O1xuXG5pbnRlcmZhY2UgRXhwcmVzc1Jlc3BvbnNlIHtcbiAgb25jZShuYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZDtcbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBoZWxwZXIgZm9yIGBfX3NlbnRyeV90cmFuc2FjdGlvbmBcbiAqIEBoaWRkZW5cbiAqL1xuaW50ZXJmYWNlIFNlbnRyeVRyYWNpbmdSZXNwb25zZSB7XG4gIF9fc2VudHJ5X3RyYW5zYWN0aW9uPzogVHJhbnNhY3Rpb247XG59XG5cbi8qKlxuICogRXhwcmVzcyBpbnRlZ3JhdGlvblxuICpcbiAqIFByb3ZpZGVzIGFuIHJlcXVlc3QgYW5kIGVycm9yIGhhbmRsZXIgZm9yIEV4cHJlc3MgZnJhbWV3b3JrIGFzIHdlbGwgYXMgdHJhY2luZyBjYXBhYmlsaXRpZXNcbiAqL1xuZXhwb3J0IGNsYXNzIEV4cHJlc3MgaW1wbGVtZW50cyBJbnRlZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpZDogc3RyaW5nID0gJ0V4cHJlc3MnO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIG5hbWU6IHN0cmluZyA9IEV4cHJlc3MuaWQ7XG5cbiAgLyoqXG4gICAqIEV4cHJlc3MgQXBwIGluc3RhbmNlXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9yb3V0ZXI/OiBSb3V0ZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldGhvZHM/OiBNZXRob2RbXTtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiB7IGFwcD86IFJvdXRlcjsgcm91dGVyPzogUm91dGVyOyBtZXRob2RzPzogTWV0aG9kW10gfSA9IHt9KSB7XG4gICAgdGhpcy5fcm91dGVyID0gb3B0aW9ucy5yb3V0ZXIgfHwgb3B0aW9ucy5hcHA7XG4gICAgdGhpcy5fbWV0aG9kcyA9IChBcnJheS5pc0FycmF5KG9wdGlvbnMubWV0aG9kcykgPyBvcHRpb25zLm1ldGhvZHMgOiBbXSkuY29uY2F0KCd1c2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldHVwT25jZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3JvdXRlcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdFeHByZXNzSW50ZWdyYXRpb24gaXMgbWlzc2luZyBhbiBFeHByZXNzIGluc3RhbmNlJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGluc3RydW1lbnRNaWRkbGV3YXJlcyh0aGlzLl9yb3V0ZXIsIHRoaXMuX21ldGhvZHMpO1xuICB9XG59XG5cbi8qKlxuICogV3JhcHMgb3JpZ2luYWwgbWlkZGxld2FyZSBmdW5jdGlvbiBpbiBhIHRyYWNpbmcgY2FsbCwgd2hpY2ggc3RvcmVzIHRoZSBpbmZvIGFib3V0IHRoZSBjYWxsIGFzIGEgc3BhbixcbiAqIGFuZCBmaW5pc2hlcyBpdCBvbmNlIHRoZSBtaWRkbGV3YXJlIGlzIGRvbmUgaW52b2tpbmcuXG4gKlxuICogRXhwcmVzcyBtaWRkbGV3YXJlcyBoYXZlIDMgdmFyaW91cyBmb3JtcywgdGh1cyB3ZSBoYXZlIHRvIHRha2UgY2FyZSBvZiBhbGwgb2YgdGhlbTpcbiAqIC8vIHN5bmNcbiAqIGFwcC51c2UoZnVuY3Rpb24gKHJlcSwgcmVzKSB7IC4uLiB9KVxuICogLy8gYXN5bmNcbiAqIGFwcC51c2UoZnVuY3Rpb24gKHJlcSwgcmVzLCBuZXh0KSB7IC4uLiB9KVxuICogLy8gZXJyb3IgaGFuZGxlclxuICogYXBwLnVzZShmdW5jdGlvbiAoZXJyLCByZXEsIHJlcywgbmV4dCkgeyAuLi4gfSlcbiAqXG4gKiBUaGV5IGFsbCBpbnRlcm5hbGx5IGRlbGVnYXRlIHRvIHRoZSBgcm91dGVyW21ldGhvZF1gIG9mIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXMsIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIHdyYXAoZm46IEZ1bmN0aW9uLCBtZXRob2Q6IE1ldGhvZCk6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCB7XG4gIGNvbnN0IGFyaXR5ID0gZm4ubGVuZ3RoO1xuXG4gIHN3aXRjaCAoYXJpdHkpIHtcbiAgICBjYXNlIDI6IHtcbiAgICAgIHJldHVybiBmdW5jdGlvbih0aGlzOiBOb2RlSlMuR2xvYmFsLCByZXE6IHVua25vd24sIHJlczogRXhwcmVzc1Jlc3BvbnNlICYgU2VudHJ5VHJhY2luZ1Jlc3BvbnNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gcmVzLl9fc2VudHJ5X3RyYW5zYWN0aW9uO1xuICAgICAgICBpZiAodHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICBjb25zdCBzcGFuID0gdHJhbnNhY3Rpb24uc3RhcnRDaGlsZCh7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogZm4ubmFtZSxcbiAgICAgICAgICAgIG9wOiBgZXhwcmVzcy5taWRkbGV3YXJlLiR7bWV0aG9kfWAsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmVzLm9uY2UoJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgICAgICAgIHNwYW4uZmluaXNoKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhpcywgcmVxLCByZXMpO1xuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSAzOiB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oXG4gICAgICAgIHRoaXM6IE5vZGVKUy5HbG9iYWwsXG4gICAgICAgIHJlcTogdW5rbm93bixcbiAgICAgICAgcmVzOiBFeHByZXNzUmVzcG9uc2UgJiBTZW50cnlUcmFjaW5nUmVzcG9uc2UsXG4gICAgICAgIG5leHQ6ICgpID0+IHZvaWQsXG4gICAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSByZXMuX19zZW50cnlfdHJhbnNhY3Rpb247XG4gICAgICAgIGNvbnN0IHNwYW4gPSB0cmFuc2FjdGlvbj8uc3RhcnRDaGlsZCh7XG4gICAgICAgICAgZGVzY3JpcHRpb246IGZuLm5hbWUsXG4gICAgICAgICAgb3A6IGBleHByZXNzLm1pZGRsZXdhcmUuJHttZXRob2R9YCxcbiAgICAgICAgfSk7XG4gICAgICAgIGZuLmNhbGwodGhpcywgcmVxLCByZXMsIGZ1bmN0aW9uKHRoaXM6IE5vZGVKUy5HbG9iYWwsIC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgICAgICAgIHNwYW4/LmZpbmlzaCgpO1xuICAgICAgICAgIG5leHQuY2FsbCh0aGlzLCAuLi5hcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIDQ6IHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihcbiAgICAgICAgdGhpczogTm9kZUpTLkdsb2JhbCxcbiAgICAgICAgZXJyOiBFcnJvcixcbiAgICAgICAgcmVxOiBSZXF1ZXN0LFxuICAgICAgICByZXM6IFJlc3BvbnNlICYgU2VudHJ5VHJhY2luZ1Jlc3BvbnNlLFxuICAgICAgICBuZXh0OiAoKSA9PiB2b2lkLFxuICAgICAgKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gcmVzLl9fc2VudHJ5X3RyYW5zYWN0aW9uO1xuICAgICAgICBjb25zdCBzcGFuID0gdHJhbnNhY3Rpb24/LnN0YXJ0Q2hpbGQoe1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBmbi5uYW1lLFxuICAgICAgICAgIG9wOiBgZXhwcmVzcy5taWRkbGV3YXJlLiR7bWV0aG9kfWAsXG4gICAgICAgIH0pO1xuICAgICAgICBmbi5jYWxsKHRoaXMsIGVyciwgcmVxLCByZXMsIGZ1bmN0aW9uKHRoaXM6IE5vZGVKUy5HbG9iYWwsIC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgICAgICAgIHNwYW4/LmZpbmlzaCgpO1xuICAgICAgICAgIG5leHQuY2FsbCh0aGlzLCAuLi5hcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cHJlc3MgbWlkZGxld2FyZSB0YWtlcyAyLTQgYXJndW1lbnRzLiBHb3Q6ICR7YXJpdHl9YCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGFrZXMgYWxsIHRoZSBmdW5jdGlvbiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBvcmlnaW5hbCBgYXBwYCBvciBgcm91dGVyYCBtZXRob2QsIGVnLiBgYXBwLnVzZWAgb3IgYHJvdXRlci51c2VgXG4gKiBhbmQgd3JhcHMgZXZlcnkgZnVuY3Rpb24sIGFzIHdlbGwgYXMgYXJyYXkgb2YgZnVuY3Rpb25zIHdpdGggYSBjYWxsIHRvIG91ciBgd3JhcGAgbWV0aG9kLlxuICogV2UgaGF2ZSB0byB0YWtlIGNhcmUgb2YgdGhlIGFycmF5cyBhcyB3ZWxsIGFzIGl0ZXJhdGUgb3ZlciBhbGwgb2YgdGhlIGFyZ3VtZW50cyxcbiAqIGFzIGBhcHAudXNlYCBjYW4gYWNjZXB0IG1pZGRsZXdhcmVzIGluIGZldyB2YXJpb3VzIGZvcm1zLlxuICpcbiAqIGFwcC51c2UoWzxwYXRoPl0sIDxmbj4pXG4gKiBhcHAudXNlKFs8cGF0aD5dLCA8Zm4+LCAuLi48Zm4+KVxuICogYXBwLnVzZShbPHBhdGg+XSwgLi4uPGZuPltdKVxuICovXG5mdW5jdGlvbiB3cmFwTWlkZGxld2FyZUFyZ3MoYXJnczogdW5rbm93bltdLCBtZXRob2Q6IE1ldGhvZCk6IHVua25vd25bXSB7XG4gIHJldHVybiBhcmdzLm1hcCgoYXJnOiB1bmtub3duKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB3cmFwKGFyZywgbWV0aG9kKTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICByZXR1cm4gYXJnLm1hcCgoYTogdW5rbm93bikgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gd3JhcChhLCBtZXRob2QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyZztcbiAgfSk7XG59XG5cbi8qKlxuICogUGF0Y2hlcyBvcmlnaW5hbCByb3V0ZXIgdG8gdXRpbGl6ZSBvdXIgdHJhY2luZyBmdW5jdGlvbmFsaXR5XG4gKi9cbmZ1bmN0aW9uIHBhdGNoTWlkZGxld2FyZShyb3V0ZXI6IFJvdXRlciwgbWV0aG9kOiBNZXRob2QpOiBSb3V0ZXIge1xuICBjb25zdCBvcmlnaW5hbENhbGxiYWNrID0gcm91dGVyW21ldGhvZF07XG5cbiAgcm91dGVyW21ldGhvZF0gPSBmdW5jdGlvbiguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICByZXR1cm4gb3JpZ2luYWxDYWxsYmFjay5jYWxsKHRoaXMsIC4uLndyYXBNaWRkbGV3YXJlQXJncyhhcmdzLCBtZXRob2QpKTtcbiAgfTtcblxuICByZXR1cm4gcm91dGVyO1xufVxuXG4vKipcbiAqIFBhdGNoZXMgb3JpZ2luYWwgcm91dGVyIG1ldGhvZHNcbiAqL1xuZnVuY3Rpb24gaW5zdHJ1bWVudE1pZGRsZXdhcmVzKHJvdXRlcjogUm91dGVyLCBtZXRob2RzOiBNZXRob2RbXSA9IFtdKTogdm9pZCB7XG4gIG1ldGhvZHMuZm9yRWFjaCgobWV0aG9kOiBNZXRob2QpID0+IHBhdGNoTWlkZGxld2FyZShyb3V0ZXIsIG1ldGhvZCkpO1xufVxuIiwgImltcG9ydCB7IEh1YiB9IGZyb20gJ0BzZW50cnkvaHViJztcbmltcG9ydCB7IEV2ZW50UHJvY2Vzc29yLCBJbnRlZ3JhdGlvbiB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgZmlsbCwgaXNUaGVuYWJsZSwgbG9hZE1vZHVsZSwgbG9nZ2VyIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmludGVyZmFjZSBQZ0NsaWVudCB7XG4gIHByb3RvdHlwZToge1xuICAgIHF1ZXJ5OiAoKSA9PiB2b2lkIHwgUHJvbWlzZTx1bmtub3duPjtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIFBnT3B0aW9ucyB7XG4gIHVzZVBnTmF0aXZlPzogYm9vbGVhbjtcbn1cblxuLyoqIFRyYWNpbmcgaW50ZWdyYXRpb24gZm9yIG5vZGUtcG9zdGdyZXMgcGFja2FnZSAqL1xuZXhwb3J0IGNsYXNzIFBvc3RncmVzIGltcGxlbWVudHMgSW50ZWdyYXRpb24ge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaWQ6IHN0cmluZyA9ICdQb3N0Z3Jlcyc7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgbmFtZTogc3RyaW5nID0gUG9zdGdyZXMuaWQ7XG5cbiAgcHJpdmF0ZSBfdXNlUGdOYXRpdmU6IGJvb2xlYW47XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFBnT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5fdXNlUGdOYXRpdmUgPSAhIW9wdGlvbnMudXNlUGdOYXRpdmU7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXR1cE9uY2UoXzogKGNhbGxiYWNrOiBFdmVudFByb2Nlc3NvcikgPT4gdm9pZCwgZ2V0Q3VycmVudEh1YjogKCkgPT4gSHViKTogdm9pZCB7XG4gICAgY29uc3QgcGtnID0gbG9hZE1vZHVsZTx7IENsaWVudDogUGdDbGllbnQ7IG5hdGl2ZTogeyBDbGllbnQ6IFBnQ2xpZW50IH0gfT4oJ3BnJyk7XG5cbiAgICBpZiAoIXBrZykge1xuICAgICAgbG9nZ2VyLmVycm9yKCdQb3N0Z3JlcyBJbnRlZ3JhdGlvbiB3YXMgdW5hYmxlIHRvIHJlcXVpcmUgYHBnYCBwYWNrYWdlLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl91c2VQZ05hdGl2ZSAmJiAhcGtnLm5hdGl2ZT8uQ2xpZW50KSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYFBvc3RncmVzIEludGVncmF0aW9uIHdhcyB1bmFibGUgdG8gYWNjZXNzICdwZy1uYXRpdmUnIGJpbmRpbmdzLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgQ2xpZW50IH0gPSB0aGlzLl91c2VQZ05hdGl2ZSA/IHBrZy5uYXRpdmUgOiBwa2c7XG5cbiAgICAvKipcbiAgICAgKiBmdW5jdGlvbiAocXVlcnksIGNhbGxiYWNrKSA9PiB2b2lkXG4gICAgICogZnVuY3Rpb24gKHF1ZXJ5LCBwYXJhbXMsIGNhbGxiYWNrKSA9PiB2b2lkXG4gICAgICogZnVuY3Rpb24gKHF1ZXJ5KSA9PiBQcm9taXNlXG4gICAgICogZnVuY3Rpb24gKHF1ZXJ5LCBwYXJhbXMpID0+IFByb21pc2VcbiAgICAgKiBmdW5jdGlvbiAocGcuQ3Vyc29yKSA9PiBwZy5DdXJzb3JcbiAgICAgKi9cbiAgICBmaWxsKENsaWVudC5wcm90b3R5cGUsICdxdWVyeScsIGZ1bmN0aW9uKG9yaWc6ICgpID0+IHZvaWQgfCBQcm9taXNlPHVua25vd24+KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24odGhpczogdW5rbm93biwgY29uZmlnOiB1bmtub3duLCB2YWx1ZXM6IHVua25vd24sIGNhbGxiYWNrOiB1bmtub3duKSB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gZ2V0Q3VycmVudEh1YigpLmdldFNjb3BlKCk7XG4gICAgICAgIGNvbnN0IHBhcmVudFNwYW4gPSBzY29wZT8uZ2V0U3BhbigpO1xuICAgICAgICBjb25zdCBzcGFuID0gcGFyZW50U3Bhbj8uc3RhcnRDaGlsZCh7XG4gICAgICAgICAgZGVzY3JpcHRpb246IHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnID8gY29uZmlnIDogKGNvbmZpZyBhcyB7IHRleHQ6IHN0cmluZyB9KS50ZXh0LFxuICAgICAgICAgIG9wOiBgZGJgLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIG9yaWcuY2FsbCh0aGlzLCBjb25maWcsIHZhbHVlcywgZnVuY3Rpb24oZXJyOiBFcnJvciwgcmVzdWx0OiB1bmtub3duKSB7XG4gICAgICAgICAgICBzcGFuPy5maW5pc2goKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIG9yaWcuY2FsbCh0aGlzLCBjb25maWcsIGZ1bmN0aW9uKGVycjogRXJyb3IsIHJlc3VsdDogdW5rbm93bikge1xuICAgICAgICAgICAgc3Bhbj8uZmluaXNoKCk7XG4gICAgICAgICAgICB2YWx1ZXMoZXJyLCByZXN1bHQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcnYgPSB0eXBlb2YgdmFsdWVzICE9PSAndW5kZWZpbmVkJyA/IG9yaWcuY2FsbCh0aGlzLCBjb25maWcsIHZhbHVlcykgOiBvcmlnLmNhbGwodGhpcywgY29uZmlnKTtcblxuICAgICAgICBpZiAoaXNUaGVuYWJsZShydikpIHtcbiAgICAgICAgICByZXR1cm4gKHJ2IGFzIFByb21pc2U8dW5rbm93bj4pLnRoZW4oKHJlczogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgc3Bhbj8uZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgc3Bhbj8uZmluaXNoKCk7XG4gICAgICAgIHJldHVybiBydjtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBIdWIgfSBmcm9tICdAc2VudHJ5L2h1Yic7XG5pbXBvcnQgeyBFdmVudFByb2Nlc3NvciwgSW50ZWdyYXRpb24gfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGZpbGwsIGxvYWRNb2R1bGUsIGxvZ2dlciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5pbnRlcmZhY2UgTXlzcWxDb25uZWN0aW9uIHtcbiAgY3JlYXRlUXVlcnk6ICgpID0+IHZvaWQ7XG59XG5cbi8qKiBUcmFjaW5nIGludGVncmF0aW9uIGZvciBub2RlLW15c3FsIHBhY2thZ2UgKi9cbmV4cG9ydCBjbGFzcyBNeXNxbCBpbXBsZW1lbnRzIEludGVncmF0aW9uIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlkOiBzdHJpbmcgPSAnTXlzcWwnO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIG5hbWU6IHN0cmluZyA9IE15c3FsLmlkO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldHVwT25jZShfOiAoY2FsbGJhY2s6IEV2ZW50UHJvY2Vzc29yKSA9PiB2b2lkLCBnZXRDdXJyZW50SHViOiAoKSA9PiBIdWIpOiB2b2lkIHtcbiAgICBjb25zdCBwa2cgPSBsb2FkTW9kdWxlPE15c3FsQ29ubmVjdGlvbj4oJ215c3FsL2xpYi9Db25uZWN0aW9uLmpzJyk7XG5cbiAgICBpZiAoIXBrZykge1xuICAgICAgbG9nZ2VyLmVycm9yKCdNeXNxbCBJbnRlZ3JhdGlvbiB3YXMgdW5hYmxlIHRvIHJlcXVpcmUgYG15c3FsYCBwYWNrYWdlLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRoZSBvcmlnaW5hbCBmdW5jdGlvbiB3aWxsIGhhdmUgb25lIG9mIHRoZXNlIHNpZ25hdHVyZXM6XG4gICAgLy8gICAgZnVuY3Rpb24gKGNhbGxiYWNrKSA9PiB2b2lkXG4gICAgLy8gICAgZnVuY3Rpb24gKG9wdGlvbnMsIGNhbGxiYWNrKSA9PiB2b2lkXG4gICAgLy8gICAgZnVuY3Rpb24gKG9wdGlvbnMsIHZhbHVlcywgY2FsbGJhY2spID0+IHZvaWRcbiAgICBmaWxsKHBrZywgJ2NyZWF0ZVF1ZXJ5JywgZnVuY3Rpb24ob3JpZzogKCkgPT4gdm9pZCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHRoaXM6IHVua25vd24sIG9wdGlvbnM6IHVua25vd24sIHZhbHVlczogdW5rbm93biwgY2FsbGJhY2s6IHVua25vd24pIHtcbiAgICAgICAgY29uc3Qgc2NvcGUgPSBnZXRDdXJyZW50SHViKCkuZ2V0U2NvcGUoKTtcbiAgICAgICAgY29uc3QgcGFyZW50U3BhbiA9IHNjb3BlPy5nZXRTcGFuKCk7XG4gICAgICAgIGNvbnN0IHNwYW4gPSBwYXJlbnRTcGFuPy5zdGFydENoaWxkKHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogdHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnID8gb3B0aW9ucyA6IChvcHRpb25zIGFzIHsgc3FsOiBzdHJpbmcgfSkuc3FsLFxuICAgICAgICAgIG9wOiBgZGJgLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIG9yaWcuY2FsbCh0aGlzLCBvcHRpb25zLCB2YWx1ZXMsIGZ1bmN0aW9uKGVycjogRXJyb3IsIHJlc3VsdDogdW5rbm93biwgZmllbGRzOiB1bmtub3duKSB7XG4gICAgICAgICAgICBzcGFuPy5maW5pc2goKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0LCBmaWVsZHMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gb3JpZy5jYWxsKHRoaXMsIG9wdGlvbnMsIGZ1bmN0aW9uKGVycjogRXJyb3IsIHJlc3VsdDogdW5rbm93biwgZmllbGRzOiB1bmtub3duKSB7XG4gICAgICAgICAgICBzcGFuPy5maW5pc2goKTtcbiAgICAgICAgICAgIHZhbHVlcyhlcnIsIHJlc3VsdCwgZmllbGRzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcmlnLmNhbGwodGhpcywgb3B0aW9ucywgdmFsdWVzLCBjYWxsYmFjayk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgSHViIH0gZnJvbSAnQHNlbnRyeS9odWInO1xuaW1wb3J0IHsgRXZlbnRQcm9jZXNzb3IsIEludGVncmF0aW9uLCBTcGFuQ29udGV4dCB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgZmlsbCwgaXNUaGVuYWJsZSwgbG9hZE1vZHVsZSwgbG9nZ2VyIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbi8vIFRoaXMgYWxsb3dzIHVzIHRvIHVzZSB0aGUgc2FtZSBhcnJheSBmb3IgYm90aCBkZWZhdWx0cyBvcHRpb25zIGFuZCB0aGUgdHlwZSBpdHNlbGYuXG4vLyAobm90ZSBgYXMgY29uc3RgIGF0IHRoZSBlbmQgdG8gbWFrZSBpdCBhIHVuaW9uIG9mIHN0cmluZyBsaXRlcmFsIHR5cGVzIChpLmUuIFwiYVwiIHwgXCJiXCIgfCAuLi4gKVxuLy8gYW5kIG5vdCBqdXN0IGEgc3RyaW5nW10pXG50eXBlIE9wZXJhdGlvbiA9IHR5cGVvZiBPUEVSQVRJT05TW251bWJlcl07XG5jb25zdCBPUEVSQVRJT05TID0gW1xuICAnYWdncmVnYXRlJywgLy8gYWdncmVnYXRlKHBpcGVsaW5lLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgJ2J1bGtXcml0ZScsIC8vIGJ1bGtXcml0ZShvcGVyYXRpb25zLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgJ2NvdW50RG9jdW1lbnRzJywgLy8gY291bnREb2N1bWVudHMocXVlcnksIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnY3JlYXRlSW5kZXgnLCAvLyBjcmVhdGVJbmRleChmaWVsZE9yU3BlYywgb3B0aW9ucywgY2FsbGJhY2spXG4gICdjcmVhdGVJbmRleGVzJywgLy8gY3JlYXRlSW5kZXhlcyhpbmRleFNwZWNzLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgJ2RlbGV0ZU1hbnknLCAvLyBkZWxldGVNYW55KGZpbHRlciwgb3B0aW9ucywgY2FsbGJhY2spXG4gICdkZWxldGVPbmUnLCAvLyBkZWxldGVPbmUoZmlsdGVyLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgJ2Rpc3RpbmN0JywgLy8gZGlzdGluY3Qoa2V5LCBxdWVyeSwgb3B0aW9ucywgY2FsbGJhY2spXG4gICdkcm9wJywgLy8gZHJvcChvcHRpb25zLCBjYWxsYmFjaylcbiAgJ2Ryb3BJbmRleCcsIC8vIGRyb3BJbmRleChpbmRleE5hbWUsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnZHJvcEluZGV4ZXMnLCAvLyBkcm9wSW5kZXhlcyhvcHRpb25zLCBjYWxsYmFjaylcbiAgJ2VzdGltYXRlZERvY3VtZW50Q291bnQnLCAvLyBlc3RpbWF0ZWREb2N1bWVudENvdW50KG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnZmluZCcsIC8vIGZpbmQocXVlcnksIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnZmluZE9uZScsIC8vIGZpbmRPbmUocXVlcnksIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnZmluZE9uZUFuZERlbGV0ZScsIC8vIGZpbmRPbmVBbmREZWxldGUoZmlsdGVyLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgJ2ZpbmRPbmVBbmRSZXBsYWNlJywgLy8gZmluZE9uZUFuZFJlcGxhY2UoZmlsdGVyLCByZXBsYWNlbWVudCwgb3B0aW9ucywgY2FsbGJhY2spXG4gICdmaW5kT25lQW5kVXBkYXRlJywgLy8gZmluZE9uZUFuZFVwZGF0ZShmaWx0ZXIsIHVwZGF0ZSwgb3B0aW9ucywgY2FsbGJhY2spXG4gICdpbmRleGVzJywgLy8gaW5kZXhlcyhvcHRpb25zLCBjYWxsYmFjaylcbiAgJ2luZGV4RXhpc3RzJywgLy8gaW5kZXhFeGlzdHMoaW5kZXhlcywgb3B0aW9ucywgY2FsbGJhY2spXG4gICdpbmRleEluZm9ybWF0aW9uJywgLy8gaW5kZXhJbmZvcm1hdGlvbihvcHRpb25zLCBjYWxsYmFjaylcbiAgJ2luaXRpYWxpemVPcmRlcmVkQnVsa09wJywgLy8gaW5pdGlhbGl6ZU9yZGVyZWRCdWxrT3Aob3B0aW9ucywgY2FsbGJhY2spXG4gICdpbnNlcnRNYW55JywgLy8gaW5zZXJ0TWFueShkb2NzLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgJ2luc2VydE9uZScsIC8vIGluc2VydE9uZShkb2MsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnaXNDYXBwZWQnLCAvLyBpc0NhcHBlZChvcHRpb25zLCBjYWxsYmFjaylcbiAgJ21hcFJlZHVjZScsIC8vIG1hcFJlZHVjZShtYXAsIHJlZHVjZSwgb3B0aW9ucywgY2FsbGJhY2spXG4gICdvcHRpb25zJywgLy8gb3B0aW9ucyhvcHRpb25zLCBjYWxsYmFjaylcbiAgJ3BhcmFsbGVsQ29sbGVjdGlvblNjYW4nLCAvLyBwYXJhbGxlbENvbGxlY3Rpb25TY2FuKG9wdGlvbnMsIGNhbGxiYWNrKVxuICAncmVuYW1lJywgLy8gcmVuYW1lKG5ld05hbWUsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAncmVwbGFjZU9uZScsIC8vIHJlcGxhY2VPbmUoZmlsdGVyLCBkb2MsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnc3RhdHMnLCAvLyBzdGF0cyhvcHRpb25zLCBjYWxsYmFjaylcbiAgJ3VwZGF0ZU1hbnknLCAvLyB1cGRhdGVNYW55KGZpbHRlciwgdXBkYXRlLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgJ3VwZGF0ZU9uZScsIC8vIHVwZGF0ZU9uZShmaWx0ZXIsIHVwZGF0ZSwgb3B0aW9ucywgY2FsbGJhY2spXG5dIGFzIGNvbnN0O1xuXG4vLyBBbGwgb2YgdGhlIG9wZXJhdGlvbnMgYWJvdmUgdGFrZSBgb3B0aW9uc2AgYW5kIGBjYWxsYmFja2AgYXMgdGhlaXIgZmluYWwgcGFyYW1ldGVycywgYnV0IHNvbWUgb2YgdGhlbVxuLy8gdGFrZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgYXMgd2VsbC4gRm9yIHRob3NlIG9wZXJhdGlvbnMsIHRoaXMgaXMgYSBtYXAgb2Zcbi8vIHsgPG9wZXJhdGlvbiBuYW1lPjogIFs8bmFtZXMgb2YgYWRkaXRpb25hbCBwYXJhbWV0ZXJzPl0gfSwgYXMgYSB3YXkgdG8ga25vdyB3aGF0IHRvIGNhbGwgdGhlIG9wZXJhdGlvbidzXG4vLyBwb3NpdGlvbmFsIGFyZ3VtZW50cyB3aGVuIHdlIGFkZCB0aGVtIHRvIHRoZSBzcGFuJ3MgYGRhdGFgIG9iamVjdCBsYXRlclxuY29uc3QgT1BFUkFUSU9OX1NJR05BVFVSRVM6IHtcbiAgW29wIGluIE9wZXJhdGlvbl0/OiBzdHJpbmdbXTtcbn0gPSB7XG4gIC8vIGFnZ3JlZ2F0ZSBpbnRlbnRpb25hbGx5IG5vdCBpbmNsdWRlZCBiZWNhdXNlIGBwaXBlbGluZWAgYXJndW1lbnRzIGFyZSB0b28gY29tcGxleCB0byBzZXJpYWxpemUgd2VsbFxuICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9wdWxsLzMxMDJcbiAgYnVsa1dyaXRlOiBbJ29wZXJhdGlvbnMnXSxcbiAgY291bnREb2N1bWVudHM6IFsncXVlcnknXSxcbiAgY3JlYXRlSW5kZXg6IFsnZmllbGRPclNwZWMnXSxcbiAgY3JlYXRlSW5kZXhlczogWydpbmRleFNwZWNzJ10sXG4gIGRlbGV0ZU1hbnk6IFsnZmlsdGVyJ10sXG4gIGRlbGV0ZU9uZTogWydmaWx0ZXInXSxcbiAgZGlzdGluY3Q6IFsna2V5JywgJ3F1ZXJ5J10sXG4gIGRyb3BJbmRleDogWydpbmRleE5hbWUnXSxcbiAgZmluZDogWydxdWVyeSddLFxuICBmaW5kT25lOiBbJ3F1ZXJ5J10sXG4gIGZpbmRPbmVBbmREZWxldGU6IFsnZmlsdGVyJ10sXG4gIGZpbmRPbmVBbmRSZXBsYWNlOiBbJ2ZpbHRlcicsICdyZXBsYWNlbWVudCddLFxuICBmaW5kT25lQW5kVXBkYXRlOiBbJ2ZpbHRlcicsICd1cGRhdGUnXSxcbiAgaW5kZXhFeGlzdHM6IFsnaW5kZXhlcyddLFxuICBpbnNlcnRNYW55OiBbJ2RvY3MnXSxcbiAgaW5zZXJ0T25lOiBbJ2RvYyddLFxuICBtYXBSZWR1Y2U6IFsnbWFwJywgJ3JlZHVjZSddLFxuICByZW5hbWU6IFsnbmV3TmFtZSddLFxuICByZXBsYWNlT25lOiBbJ2ZpbHRlcicsICdkb2MnXSxcbiAgdXBkYXRlTWFueTogWydmaWx0ZXInLCAndXBkYXRlJ10sXG4gIHVwZGF0ZU9uZTogWydmaWx0ZXInLCAndXBkYXRlJ10sXG59O1xuXG5pbnRlcmZhY2UgTW9uZ29Db2xsZWN0aW9uIHtcbiAgY29sbGVjdGlvbk5hbWU6IHN0cmluZztcbiAgZGJOYW1lOiBzdHJpbmc7XG4gIG5hbWVzcGFjZTogc3RyaW5nO1xuICBwcm90b3R5cGU6IHtcbiAgICBbb3BlcmF0aW9uIGluIE9wZXJhdGlvbl06ICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd247XG4gIH07XG59XG5cbmludGVyZmFjZSBNb25nb09wdGlvbnMge1xuICBvcGVyYXRpb25zPzogT3BlcmF0aW9uW107XG4gIGRlc2NyaWJlT3BlcmF0aW9ucz86IGJvb2xlYW4gfCBPcGVyYXRpb25bXTtcbiAgdXNlTW9uZ29vc2U/OiBib29sZWFuO1xufVxuXG4vKiogVHJhY2luZyBpbnRlZ3JhdGlvbiBmb3IgbW9uZ28gcGFja2FnZSAqL1xuZXhwb3J0IGNsYXNzIE1vbmdvIGltcGxlbWVudHMgSW50ZWdyYXRpb24ge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaWQ6IHN0cmluZyA9ICdNb25nbyc7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgbmFtZTogc3RyaW5nID0gTW9uZ28uaWQ7XG5cbiAgcHJpdmF0ZSBfb3BlcmF0aW9uczogT3BlcmF0aW9uW107XG4gIHByaXZhdGUgX2Rlc2NyaWJlT3BlcmF0aW9ucz86IGJvb2xlYW4gfCBPcGVyYXRpb25bXTtcbiAgcHJpdmF0ZSBfdXNlTW9uZ29vc2U6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogTW9uZ29PcHRpb25zID0ge30pIHtcbiAgICB0aGlzLl9vcGVyYXRpb25zID0gQXJyYXkuaXNBcnJheShvcHRpb25zLm9wZXJhdGlvbnMpXG4gICAgICA/IG9wdGlvbnMub3BlcmF0aW9uc1xuICAgICAgOiAoKE9QRVJBVElPTlMgYXMgdW5rbm93bikgYXMgT3BlcmF0aW9uW10pO1xuICAgIHRoaXMuX2Rlc2NyaWJlT3BlcmF0aW9ucyA9ICdkZXNjcmliZU9wZXJhdGlvbnMnIGluIG9wdGlvbnMgPyBvcHRpb25zLmRlc2NyaWJlT3BlcmF0aW9ucyA6IHRydWU7XG4gICAgdGhpcy5fdXNlTW9uZ29vc2UgPSAhIW9wdGlvbnMudXNlTW9uZ29vc2U7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXR1cE9uY2UoXzogKGNhbGxiYWNrOiBFdmVudFByb2Nlc3NvcikgPT4gdm9pZCwgZ2V0Q3VycmVudEh1YjogKCkgPT4gSHViKTogdm9pZCB7XG4gICAgY29uc3QgbW9kdWxlTmFtZSA9IHRoaXMuX3VzZU1vbmdvb3NlID8gJ21vbmdvb3NlJyA6ICdtb25nb2RiJztcbiAgICBjb25zdCBwa2cgPSBsb2FkTW9kdWxlPHsgQ29sbGVjdGlvbjogTW9uZ29Db2xsZWN0aW9uIH0+KG1vZHVsZU5hbWUpO1xuXG4gICAgaWYgKCFwa2cpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgTW9uZ28gSW50ZWdyYXRpb24gd2FzIHVuYWJsZSB0byByZXF1aXJlIFxcYCR7bW9kdWxlTmFtZX1cXGAgcGFja2FnZS5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbnN0cnVtZW50T3BlcmF0aW9ucyhwa2cuQ29sbGVjdGlvbiwgdGhpcy5fb3BlcmF0aW9ucywgZ2V0Q3VycmVudEh1Yik7XG4gIH1cblxuICAvKipcbiAgICogUGF0Y2hlcyBvcmlnaW5hbCBjb2xsZWN0aW9uIG1ldGhvZHNcbiAgICovXG4gIHByaXZhdGUgX2luc3RydW1lbnRPcGVyYXRpb25zKGNvbGxlY3Rpb246IE1vbmdvQ29sbGVjdGlvbiwgb3BlcmF0aW9uczogT3BlcmF0aW9uW10sIGdldEN1cnJlbnRIdWI6ICgpID0+IEh1Yik6IHZvaWQge1xuICAgIG9wZXJhdGlvbnMuZm9yRWFjaCgob3BlcmF0aW9uOiBPcGVyYXRpb24pID0+IHRoaXMuX3BhdGNoT3BlcmF0aW9uKGNvbGxlY3Rpb24sIG9wZXJhdGlvbiwgZ2V0Q3VycmVudEh1YikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhdGNoZXMgb3JpZ2luYWwgY29sbGVjdGlvbiB0byB1dGlsaXplIG91ciB0cmFjaW5nIGZ1bmN0aW9uYWxpdHlcbiAgICovXG4gIHByaXZhdGUgX3BhdGNoT3BlcmF0aW9uKGNvbGxlY3Rpb246IE1vbmdvQ29sbGVjdGlvbiwgb3BlcmF0aW9uOiBPcGVyYXRpb24sIGdldEN1cnJlbnRIdWI6ICgpID0+IEh1Yik6IHZvaWQge1xuICAgIGlmICghKG9wZXJhdGlvbiBpbiBjb2xsZWN0aW9uLnByb3RvdHlwZSkpIHJldHVybjtcblxuICAgIGNvbnN0IGdldFNwYW5Db250ZXh0ID0gdGhpcy5fZ2V0U3BhbkNvbnRleHRGcm9tT3BlcmF0aW9uQXJndW1lbnRzLmJpbmQodGhpcyk7XG5cbiAgICBmaWxsKGNvbGxlY3Rpb24ucHJvdG90eXBlLCBvcGVyYXRpb24sIGZ1bmN0aW9uKG9yaWc6ICgpID0+IHZvaWQgfCBQcm9taXNlPHVua25vd24+KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24odGhpczogdW5rbm93biwgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICAgIGNvbnN0IGxhc3RBcmcgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IHNjb3BlID0gZ2V0Q3VycmVudEh1YigpLmdldFNjb3BlKCk7XG4gICAgICAgIGNvbnN0IHBhcmVudFNwYW4gPSBzY29wZT8uZ2V0U3BhbigpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBvcGVyYXRpb24gd2FzIHBhc3NlZCBhIGNhbGxiYWNrLiAobWFwUmVkdWNlIHJlcXVpcmVzIGEgZGlmZmVyZW50IGNoZWNrLCBhc1xuICAgICAgICAvLyBpdHMgKG5vbi1jYWxsYmFjaykgYXJndW1lbnRzIGNhbiBhbHNvIGJlIGZ1bmN0aW9ucy4pXG4gICAgICAgIGlmICh0eXBlb2YgbGFzdEFyZyAhPT0gJ2Z1bmN0aW9uJyB8fCAob3BlcmF0aW9uID09PSAnbWFwUmVkdWNlJyAmJiBhcmdzLmxlbmd0aCA9PT0gMikpIHtcbiAgICAgICAgICBjb25zdCBzcGFuID0gcGFyZW50U3Bhbj8uc3RhcnRDaGlsZChnZXRTcGFuQ29udGV4dCh0aGlzLCBvcGVyYXRpb24sIGFyZ3MpKTtcbiAgICAgICAgICBjb25zdCBtYXliZVByb21pc2UgPSBvcmlnLmNhbGwodGhpcywgLi4uYXJncykgYXMgUHJvbWlzZTx1bmtub3duPjtcblxuICAgICAgICAgIGlmIChpc1RoZW5hYmxlKG1heWJlUHJvbWlzZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBtYXliZVByb21pc2UudGhlbigocmVzOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgIHNwYW4/LmZpbmlzaCgpO1xuICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNwYW4/LmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIG1heWJlUHJvbWlzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzcGFuID0gcGFyZW50U3Bhbj8uc3RhcnRDaGlsZChnZXRTcGFuQ29udGV4dCh0aGlzLCBvcGVyYXRpb24sIGFyZ3Muc2xpY2UoMCwgLTEpKSk7XG4gICAgICAgIHJldHVybiBvcmlnLmNhbGwodGhpcywgLi4uYXJncy5zbGljZSgwLCAtMSksIGZ1bmN0aW9uKGVycjogRXJyb3IsIHJlc3VsdDogdW5rbm93bikge1xuICAgICAgICAgIHNwYW4/LmZpbmlzaCgpO1xuICAgICAgICAgIGxhc3RBcmcoZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybSBhIFNwYW5Db250ZXh0IGJhc2VkIG9uIHRoZSB1c2VyIGlucHV0IHRvIGEgZ2l2ZW4gb3BlcmF0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0U3BhbkNvbnRleHRGcm9tT3BlcmF0aW9uQXJndW1lbnRzKFxuICAgIGNvbGxlY3Rpb246IE1vbmdvQ29sbGVjdGlvbixcbiAgICBvcGVyYXRpb246IE9wZXJhdGlvbixcbiAgICBhcmdzOiB1bmtub3duW10sXG4gICk6IFNwYW5Db250ZXh0IHtcbiAgICBjb25zdCBkYXRhOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgY29sbGVjdGlvbk5hbWU6IGNvbGxlY3Rpb24uY29sbGVjdGlvbk5hbWUsXG4gICAgICBkYk5hbWU6IGNvbGxlY3Rpb24uZGJOYW1lLFxuICAgICAgbmFtZXNwYWNlOiBjb2xsZWN0aW9uLm5hbWVzcGFjZSxcbiAgICB9O1xuICAgIGNvbnN0IHNwYW5Db250ZXh0OiBTcGFuQ29udGV4dCA9IHtcbiAgICAgIG9wOiBgZGJgLFxuICAgICAgZGVzY3JpcHRpb246IG9wZXJhdGlvbixcbiAgICAgIGRhdGEsXG4gICAgfTtcblxuICAgIC8vIElmIHRoZSBvcGVyYXRpb24gdGFrZXMgbm8gYXJndW1lbnRzIGJlc2lkZXMgYG9wdGlvbnNgIGFuZCBgY2FsbGJhY2tgLCBvciBpZiBhcmd1bWVudFxuICAgIC8vIGNvbGxlY3Rpb24gaXMgZGlzYWJsZWQgZm9yIHRoaXMgb3BlcmF0aW9uLCBqdXN0IHJldHVybiBlYXJseS5cbiAgICBjb25zdCBzaWduYXR1cmUgPSBPUEVSQVRJT05fU0lHTkFUVVJFU1tvcGVyYXRpb25dO1xuICAgIGNvbnN0IHNob3VsZERlc2NyaWJlID0gQXJyYXkuaXNBcnJheSh0aGlzLl9kZXNjcmliZU9wZXJhdGlvbnMpXG4gICAgICA/IHRoaXMuX2Rlc2NyaWJlT3BlcmF0aW9ucy5pbmNsdWRlcyhvcGVyYXRpb24pXG4gICAgICA6IHRoaXMuX2Rlc2NyaWJlT3BlcmF0aW9ucztcblxuICAgIGlmICghc2lnbmF0dXJlIHx8ICFzaG91bGREZXNjcmliZSkge1xuICAgICAgcmV0dXJuIHNwYW5Db250ZXh0O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGBtYXBSZWR1Y2VgLCBhcyB0aGUgb25seSBvbmUgYWNjZXB0aW5nIGZ1bmN0aW9ucyBhcyBhcmd1bWVudHMuXG4gICAgICBpZiAob3BlcmF0aW9uID09PSAnbWFwUmVkdWNlJykge1xuICAgICAgICBjb25zdCBbbWFwLCByZWR1Y2VdID0gYXJncyBhcyB7IG5hbWU/OiBzdHJpbmcgfVtdO1xuICAgICAgICBkYXRhW3NpZ25hdHVyZVswXV0gPSB0eXBlb2YgbWFwID09PSAnc3RyaW5nJyA/IG1hcCA6IG1hcC5uYW1lIHx8ICc8YW5vbnltb3VzPic7XG4gICAgICAgIGRhdGFbc2lnbmF0dXJlWzFdXSA9IHR5cGVvZiByZWR1Y2UgPT09ICdzdHJpbmcnID8gcmVkdWNlIDogcmVkdWNlLm5hbWUgfHwgJzxhbm9ueW1vdXM+JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2lnbmF0dXJlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZGF0YVtzaWduYXR1cmVbaV1dID0gSlNPTi5zdHJpbmdpZnkoYXJnc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChfb08pIHtcbiAgICAgIC8vIG5vLWVtcHR5XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwYW5Db250ZXh0O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0LCBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuaW1wb3J0IHsgRklOSVNIX1JFQVNPTl9UQUcsIElETEVfVFJBTlNBQ1RJT05fRklOSVNIX1JFQVNPTlMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgSWRsZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vaWRsZXRyYW5zYWN0aW9uJztcbmltcG9ydCB7IFNwYW5TdGF0dXMgfSBmcm9tICcuLi9zcGFuc3RhdHVzJztcbmltcG9ydCB7IGdldEFjdGl2ZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWxPYmplY3Q8V2luZG93PigpO1xuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIHRoYXQgY2FuY2VscyBhbmQgZmluaXNoZXMgYSB0cmFuc2FjdGlvbiB3aGVuIHRoZSBnbG9iYWxcbiAqIGRvY3VtZW50IGlzIGhpZGRlbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQmFja2dyb3VuZFRhYkRldGVjdGlvbigpOiB2b2lkIHtcbiAgaWYgKGdsb2JhbCAmJiBnbG9iYWwuZG9jdW1lbnQpIHtcbiAgICBnbG9iYWwuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGFjdGl2ZVRyYW5zYWN0aW9uID0gZ2V0QWN0aXZlVHJhbnNhY3Rpb24oKSBhcyBJZGxlVHJhbnNhY3Rpb247XG4gICAgICBpZiAoZ2xvYmFsLmRvY3VtZW50LmhpZGRlbiAmJiBhY3RpdmVUcmFuc2FjdGlvbikge1xuICAgICAgICBsb2dnZXIubG9nKFxuICAgICAgICAgIGBbVHJhY2luZ10gVHJhbnNhY3Rpb246ICR7U3BhblN0YXR1cy5DYW5jZWxsZWR9IC0+IHNpbmNlIHRhYiBtb3ZlZCB0byB0aGUgYmFja2dyb3VuZCwgb3A6ICR7YWN0aXZlVHJhbnNhY3Rpb24ub3B9YCxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCBzZXQgc3RhdHVzIGlmIGl0IGlzIGFscmVhZHkgc2V0LCB0aGlzIHByZXZlbnQgaW1wb3J0YW50IHN0YXR1c2VzIGxpa2VcbiAgICAgICAgLy8gZXJyb3Igb3IgZGF0YSBsb3NzIGZyb20gYmVpbmcgb3ZlcndyaXR0ZW4gb24gdHJhbnNhY3Rpb24uXG4gICAgICAgIGlmICghYWN0aXZlVHJhbnNhY3Rpb24uc3RhdHVzKSB7XG4gICAgICAgICAgYWN0aXZlVHJhbnNhY3Rpb24uc2V0U3RhdHVzKFNwYW5TdGF0dXMuQ2FuY2VsbGVkKTtcbiAgICAgICAgfVxuICAgICAgICBhY3RpdmVUcmFuc2FjdGlvbi5zZXRUYWcoJ3Zpc2liaWxpdHljaGFuZ2UnLCAnZG9jdW1lbnQuaGlkZGVuJyk7XG4gICAgICAgIGFjdGl2ZVRyYW5zYWN0aW9uLnNldFRhZyhGSU5JU0hfUkVBU09OX1RBRywgSURMRV9UUkFOU0FDVElPTl9GSU5JU0hfUkVBU09OU1syXSk7XG4gICAgICAgIGFjdGl2ZVRyYW5zYWN0aW9uLmZpbmlzaCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGxvZ2dlci53YXJuKCdbVHJhY2luZ10gQ291bGQgbm90IHNldCB1cCBiYWNrZ3JvdW5kIHRhYiBkZXRlY3Rpb24gZHVlIHRvIGxhY2sgb2YgZ2xvYmFsIGRvY3VtZW50Jyk7XG4gIH1cbn1cbiIsICIvKlxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQ1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgTWV0cmljLCBSZXBvcnRIYW5kbGVyIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgYmluZFJlcG9ydGVyID0gKFxuICBjYWxsYmFjazogUmVwb3J0SGFuZGxlcixcbiAgbWV0cmljOiBNZXRyaWMsXG4gIHJlcG9ydEFsbENoYW5nZXM/OiBib29sZWFuLFxuKTogKChmb3JjZVJlcG9ydD86IGJvb2xlYW4pID0+IHZvaWQpID0+IHtcbiAgbGV0IHByZXZWYWx1ZTogbnVtYmVyO1xuICByZXR1cm4gKGZvcmNlUmVwb3J0PzogYm9vbGVhbikgPT4ge1xuICAgIGlmIChtZXRyaWMudmFsdWUgPj0gMCkge1xuICAgICAgaWYgKGZvcmNlUmVwb3J0IHx8IHJlcG9ydEFsbENoYW5nZXMpIHtcbiAgICAgICAgbWV0cmljLmRlbHRhID0gbWV0cmljLnZhbHVlIC0gKHByZXZWYWx1ZSB8fCAwKTtcblxuICAgICAgICAvLyBSZXBvcnQgdGhlIG1ldHJpYyBpZiB0aGVyZSdzIGEgbm9uLXplcm8gZGVsdGEgb3IgaWYgbm8gcHJldmlvdXNcbiAgICAgICAgLy8gdmFsdWUgZXhpc3RzICh3aGljaCBjYW4gaGFwcGVuIGluIHRoZSBjYXNlIG9mIHRoZSBkb2N1bWVudCBiZWNvbWluZ1xuICAgICAgICAvLyBoaWRkZW4gd2hlbiB0aGUgbWV0cmljIHZhbHVlIGlzIDApLlxuICAgICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9Hb29nbGVDaHJvbWUvd2ViLXZpdGFscy9pc3N1ZXMvMTRcbiAgICAgICAgaWYgKG1ldHJpYy5kZWx0YSB8fCBwcmV2VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHByZXZWYWx1ZSA9IG1ldHJpYy52YWx1ZTtcbiAgICAgICAgICBjYWxsYmFjayhtZXRyaWMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcbiIsICIvKlxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQ1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtYW50bHkgZ2VuZXJhdGUgYSB1bmlxdWUsIDMwLWNoYXIgc3RyaW5nIGJ5IGNvbWJpbmluZyBhIHZlcnNpb25cbiAqIG51bWJlciwgdGhlIGN1cnJlbnQgdGltZXN0YW1wIHdpdGggYSAxMy1kaWdpdCBudW1iZXIgaW50ZWdlci5cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IGdlbmVyYXRlVW5pcXVlSUQgPSAoKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGB2Mi0ke0RhdGUubm93KCl9LSR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKDllMTIgLSAxKSkgKyAxZTEyfWA7XG59O1xuIiwgIi8qXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBNZXRyaWMgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVVuaXF1ZUlEIH0gZnJvbSAnLi9nZW5lcmF0ZVVuaXF1ZUlEJztcblxuZXhwb3J0IGNvbnN0IGluaXRNZXRyaWMgPSAobmFtZTogTWV0cmljWyduYW1lJ10sIHZhbHVlPzogbnVtYmVyKTogTWV0cmljID0+IHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lLFxuICAgIHZhbHVlOiB2YWx1ZSA/PyAtMSxcbiAgICBkZWx0YTogMCxcbiAgICBlbnRyaWVzOiBbXSxcbiAgICBpZDogZ2VuZXJhdGVVbmlxdWVJRCgpLFxuICB9O1xufTtcbiIsICIvKlxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQ1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuZXhwb3J0IGludGVyZmFjZSBQZXJmb3JtYW5jZUVudHJ5SGFuZGxlciB7XG4gIChlbnRyeTogUGVyZm9ybWFuY2VFbnRyeSk6IHZvaWQ7XG59XG5cbi8qKlxuICogVGFrZXMgYSBwZXJmb3JtYW5jZSBlbnRyeSB0eXBlIGFuZCBhIGNhbGxiYWNrIGZ1bmN0aW9uLCBhbmQgY3JlYXRlcyBhXG4gKiBgUGVyZm9ybWFuY2VPYnNlcnZlcmAgaW5zdGFuY2UgdGhhdCB3aWxsIG9ic2VydmUgdGhlIHNwZWNpZmllZCBlbnRyeSB0eXBlXG4gKiB3aXRoIGJ1ZmZlcmluZyBlbmFibGVkIGFuZCBjYWxsIHRoZSBjYWxsYmFjayBfZm9yIGVhY2ggZW50cnlfLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gYWxzbyBmZWF0dXJlLWRldGVjdHMgZW50cnkgc3VwcG9ydCBhbmQgd3JhcHMgdGhlIGxvZ2ljIGluIGFcbiAqIHRyeS9jYXRjaCB0byBhdm9pZCBlcnJvcnMgaW4gdW5zdXBwb3J0aW5nIGJyb3dzZXJzLlxuICovXG5leHBvcnQgY29uc3Qgb2JzZXJ2ZSA9ICh0eXBlOiBzdHJpbmcsIGNhbGxiYWNrOiBQZXJmb3JtYW5jZUVudHJ5SGFuZGxlcik6IFBlcmZvcm1hbmNlT2JzZXJ2ZXIgfCB1bmRlZmluZWQgPT4ge1xuICB0cnkge1xuICAgIGlmIChQZXJmb3JtYW5jZU9ic2VydmVyLnN1cHBvcnRlZEVudHJ5VHlwZXMuaW5jbHVkZXModHlwZSkpIHtcbiAgICAgIC8vIE1vcmUgZXh0ZW5zaXZlIGZlYXR1cmUgZGV0ZWN0IG5lZWRlZCBmb3IgRmlyZWZveCBkdWUgdG86XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vR29vZ2xlQ2hyb21lL3dlYi12aXRhbHMvaXNzdWVzLzE0MlxuICAgICAgaWYgKHR5cGUgPT09ICdmaXJzdC1pbnB1dCcgJiYgISgnUGVyZm9ybWFuY2VFdmVudFRpbWluZycgaW4gc2VsZikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwbzogUGVyZm9ybWFuY2VPYnNlcnZlciA9IG5ldyBQZXJmb3JtYW5jZU9ic2VydmVyKGwgPT4gbC5nZXRFbnRyaWVzKCkubWFwKGNhbGxiYWNrKSk7XG5cbiAgICAgIHBvLm9ic2VydmUoeyB0eXBlLCBidWZmZXJlZDogdHJ1ZSB9KTtcbiAgICAgIHJldHVybiBwbztcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBEbyBub3RoaW5nLlxuICB9XG4gIHJldHVybjtcbn07XG4iLCAiLypcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9uSGlkZGVuQ2FsbGJhY2sge1xuICAoZXZlbnQ6IEV2ZW50KTogdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IG9uSGlkZGVuID0gKGNiOiBPbkhpZGRlbkNhbGxiYWNrLCBvbmNlPzogYm9vbGVhbik6IHZvaWQgPT4ge1xuICBjb25zdCBvbkhpZGRlbk9yUGFnZUhpZGUgPSAoZXZlbnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdwYWdlaGlkZScgfHwgZ2V0R2xvYmFsT2JqZWN0PFdpbmRvdz4oKS5kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICdoaWRkZW4nKSB7XG4gICAgICBjYihldmVudCk7XG4gICAgICBpZiAob25jZSkge1xuICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgb25IaWRkZW5PclBhZ2VIaWRlLCB0cnVlKTtcbiAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcigncGFnZWhpZGUnLCBvbkhpZGRlbk9yUGFnZUhpZGUsIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIG9uSGlkZGVuT3JQYWdlSGlkZSwgdHJ1ZSk7XG4gIC8vIFNvbWUgYnJvd3NlcnMgaGF2ZSBidWdneSBpbXBsZW1lbnRhdGlvbnMgb2YgdmlzaWJpbGl0eWNoYW5nZSxcbiAgLy8gc28gd2UgdXNlIHBhZ2VoaWRlIGluIGFkZGl0aW9uLCBqdXN0IHRvIGJlIHNhZmUuXG4gIGFkZEV2ZW50TGlzdGVuZXIoJ3BhZ2VoaWRlJywgb25IaWRkZW5PclBhZ2VIaWRlLCB0cnVlKTtcbn07XG4iLCAiLypcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IGJpbmRSZXBvcnRlciB9IGZyb20gJy4vbGliL2JpbmRSZXBvcnRlcic7XG5pbXBvcnQgeyBpbml0TWV0cmljIH0gZnJvbSAnLi9saWIvaW5pdE1ldHJpYyc7XG5pbXBvcnQgeyBvYnNlcnZlLCBQZXJmb3JtYW5jZUVudHJ5SGFuZGxlciB9IGZyb20gJy4vbGliL29ic2VydmUnO1xuaW1wb3J0IHsgb25IaWRkZW4gfSBmcm9tICcuL2xpYi9vbkhpZGRlbic7XG5pbXBvcnQgeyBSZXBvcnRIYW5kbGVyIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8vIGh0dHBzOi8vd2ljZy5naXRodWIuaW8vbGF5b3V0LWluc3RhYmlsaXR5LyNzZWMtbGF5b3V0LXNoaWZ0XG5leHBvcnQgaW50ZXJmYWNlIExheW91dFNoaWZ0IGV4dGVuZHMgUGVyZm9ybWFuY2VFbnRyeSB7XG4gIHZhbHVlOiBudW1iZXI7XG4gIGhhZFJlY2VudElucHV0OiBib29sZWFuO1xuICBzb3VyY2VzOiBBcnJheTxMYXlvdXRTaGlmdEF0dHJpYnV0aW9uPjtcbiAgdG9KU09OKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExheW91dFNoaWZ0QXR0cmlidXRpb24ge1xuICBub2RlPzogTm9kZTtcbiAgcHJldmlvdXNSZWN0OiBET01SZWN0UmVhZE9ubHk7XG4gIGN1cnJlbnRSZWN0OiBET01SZWN0UmVhZE9ubHk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRDTFMgPSAob25SZXBvcnQ6IFJlcG9ydEhhbmRsZXIsIHJlcG9ydEFsbENoYW5nZXM/OiBib29sZWFuKTogdm9pZCA9PiB7XG4gIGNvbnN0IG1ldHJpYyA9IGluaXRNZXRyaWMoJ0NMUycsIDApO1xuICBsZXQgcmVwb3J0OiBSZXR1cm5UeXBlPHR5cGVvZiBiaW5kUmVwb3J0ZXI+O1xuXG4gIGxldCBzZXNzaW9uVmFsdWUgPSAwO1xuICBsZXQgc2Vzc2lvbkVudHJpZXM6IFBlcmZvcm1hbmNlRW50cnlbXSA9IFtdO1xuXG4gIGNvbnN0IGVudHJ5SGFuZGxlciA9IChlbnRyeTogTGF5b3V0U2hpZnQpOiB2b2lkID0+IHtcbiAgICAvLyBPbmx5IGNvdW50IGxheW91dCBzaGlmdHMgd2l0aG91dCByZWNlbnQgdXNlciBpbnB1dC5cbiAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoeSBlbnRyeSBjYW4gYmUgdW5kZWZpbmVkXG4gICAgaWYgKGVudHJ5ICYmICFlbnRyeS5oYWRSZWNlbnRJbnB1dCkge1xuICAgICAgY29uc3QgZmlyc3RTZXNzaW9uRW50cnkgPSBzZXNzaW9uRW50cmllc1swXTtcbiAgICAgIGNvbnN0IGxhc3RTZXNzaW9uRW50cnkgPSBzZXNzaW9uRW50cmllc1tzZXNzaW9uRW50cmllcy5sZW5ndGggLSAxXTtcblxuICAgICAgLy8gSWYgdGhlIGVudHJ5IG9jY3VycmVkIGxlc3MgdGhhbiAxIHNlY29uZCBhZnRlciB0aGUgcHJldmlvdXMgZW50cnkgYW5kXG4gICAgICAvLyBsZXNzIHRoYW4gNSBzZWNvbmRzIGFmdGVyIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgc2Vzc2lvbiwgaW5jbHVkZSB0aGVcbiAgICAgIC8vIGVudHJ5IGluIHRoZSBjdXJyZW50IHNlc3Npb24uIE90aGVyd2lzZSwgc3RhcnQgYSBuZXcgc2Vzc2lvbi5cbiAgICAgIGlmIChcbiAgICAgICAgc2Vzc2lvblZhbHVlICYmXG4gICAgICAgIHNlc3Npb25FbnRyaWVzLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgICBlbnRyeS5zdGFydFRpbWUgLSBsYXN0U2Vzc2lvbkVudHJ5LnN0YXJ0VGltZSA8IDEwMDAgJiZcbiAgICAgICAgZW50cnkuc3RhcnRUaW1lIC0gZmlyc3RTZXNzaW9uRW50cnkuc3RhcnRUaW1lIDwgNTAwMFxuICAgICAgKSB7XG4gICAgICAgIHNlc3Npb25WYWx1ZSArPSBlbnRyeS52YWx1ZTtcbiAgICAgICAgc2Vzc2lvbkVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXNzaW9uVmFsdWUgPSBlbnRyeS52YWx1ZTtcbiAgICAgICAgc2Vzc2lvbkVudHJpZXMgPSBbZW50cnldO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgY3VycmVudCBzZXNzaW9uIHZhbHVlIGlzIGxhcmdlciB0aGFuIHRoZSBjdXJyZW50IENMUyB2YWx1ZSxcbiAgICAgIC8vIHVwZGF0ZSBDTFMgYW5kIHRoZSBlbnRyaWVzIGNvbnRyaWJ1dGluZyB0byBpdC5cbiAgICAgIGlmIChzZXNzaW9uVmFsdWUgPiBtZXRyaWMudmFsdWUpIHtcbiAgICAgICAgbWV0cmljLnZhbHVlID0gc2Vzc2lvblZhbHVlO1xuICAgICAgICBtZXRyaWMuZW50cmllcyA9IHNlc3Npb25FbnRyaWVzO1xuICAgICAgICBpZiAocmVwb3J0KSB7XG4gICAgICAgICAgcmVwb3J0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcG8gPSBvYnNlcnZlKCdsYXlvdXQtc2hpZnQnLCBlbnRyeUhhbmRsZXIgYXMgUGVyZm9ybWFuY2VFbnRyeUhhbmRsZXIpO1xuICBpZiAocG8pIHtcbiAgICByZXBvcnQgPSBiaW5kUmVwb3J0ZXIob25SZXBvcnQsIG1ldHJpYywgcmVwb3J0QWxsQ2hhbmdlcyk7XG5cbiAgICBvbkhpZGRlbigoKSA9PiB7XG4gICAgICBwby50YWtlUmVjb3JkcygpLm1hcChlbnRyeUhhbmRsZXIgYXMgUGVyZm9ybWFuY2VFbnRyeUhhbmRsZXIpO1xuICAgICAgcmVwb3J0KHRydWUpO1xuICAgIH0pO1xuICB9XG59O1xuIiwgIi8qXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuaW1wb3J0IHsgb25IaWRkZW4gfSBmcm9tICcuL29uSGlkZGVuJztcblxubGV0IGZpcnN0SGlkZGVuVGltZSA9IC0xO1xuXG5jb25zdCBpbml0SGlkZGVuVGltZSA9ICgpOiBudW1iZXIgPT4ge1xuICByZXR1cm4gZ2V0R2xvYmFsT2JqZWN0PFdpbmRvdz4oKS5kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICdoaWRkZW4nID8gMCA6IEluZmluaXR5O1xufTtcblxuY29uc3QgdHJhY2tDaGFuZ2VzID0gKCk6IHZvaWQgPT4ge1xuICAvLyBVcGRhdGUgdGhlIHRpbWUgaWYvd2hlbiB0aGUgZG9jdW1lbnQgYmVjb21lcyBoaWRkZW4uXG4gIG9uSGlkZGVuKCh7IHRpbWVTdGFtcCB9KSA9PiB7XG4gICAgZmlyc3RIaWRkZW5UaW1lID0gdGltZVN0YW1wO1xuICB9LCB0cnVlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaXNpYmlsaXR5V2F0Y2hlciA9ICgpOiB7XG4gIHJlYWRvbmx5IGZpcnN0SGlkZGVuVGltZTogbnVtYmVyO1xufSA9PiB7XG4gIGlmIChmaXJzdEhpZGRlblRpbWUgPCAwKSB7XG4gICAgLy8gSWYgdGhlIGRvY3VtZW50IGlzIGhpZGRlbiB3aGVuIHRoaXMgY29kZSBydW5zLCBhc3N1bWUgaXQgd2FzIGhpZGRlblxuICAgIC8vIHNpbmNlIG5hdmlnYXRpb24gc3RhcnQuIFRoaXMgaXNuJ3QgYSBwZXJmZWN0IGhldXJpc3RpYywgYnV0IGl0J3MgdGhlXG4gICAgLy8gYmVzdCB3ZSBjYW4gZG8gdW50aWwgYW4gQVBJIGlzIGF2YWlsYWJsZSB0byBzdXBwb3J0IHF1ZXJ5aW5nIHBhc3RcbiAgICAvLyB2aXNpYmlsaXR5U3RhdGUuXG4gICAgZmlyc3RIaWRkZW5UaW1lID0gaW5pdEhpZGRlblRpbWUoKTtcbiAgICB0cmFja0NoYW5nZXMoKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGdldCBmaXJzdEhpZGRlblRpbWUoKSB7XG4gICAgICByZXR1cm4gZmlyc3RIaWRkZW5UaW1lO1xuICAgIH0sXG4gIH07XG59O1xuIiwgIi8qXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBiaW5kUmVwb3J0ZXIgfSBmcm9tICcuL2xpYi9iaW5kUmVwb3J0ZXInO1xuaW1wb3J0IHsgZ2V0VmlzaWJpbGl0eVdhdGNoZXIgfSBmcm9tICcuL2xpYi9nZXRWaXNpYmlsaXR5V2F0Y2hlcic7XG5pbXBvcnQgeyBpbml0TWV0cmljIH0gZnJvbSAnLi9saWIvaW5pdE1ldHJpYyc7XG5pbXBvcnQgeyBvYnNlcnZlLCBQZXJmb3JtYW5jZUVudHJ5SGFuZGxlciB9IGZyb20gJy4vbGliL29ic2VydmUnO1xuaW1wb3J0IHsgb25IaWRkZW4gfSBmcm9tICcuL2xpYi9vbkhpZGRlbic7XG5pbXBvcnQgeyBQZXJmb3JtYW5jZUV2ZW50VGltaW5nLCBSZXBvcnRIYW5kbGVyIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBnZXRGSUQgPSAob25SZXBvcnQ6IFJlcG9ydEhhbmRsZXIsIHJlcG9ydEFsbENoYW5nZXM/OiBib29sZWFuKTogdm9pZCA9PiB7XG4gIGNvbnN0IHZpc2liaWxpdHlXYXRjaGVyID0gZ2V0VmlzaWJpbGl0eVdhdGNoZXIoKTtcbiAgY29uc3QgbWV0cmljID0gaW5pdE1ldHJpYygnRklEJyk7XG4gIGxldCByZXBvcnQ6IFJldHVyblR5cGU8dHlwZW9mIGJpbmRSZXBvcnRlcj47XG5cbiAgY29uc3QgZW50cnlIYW5kbGVyID0gKGVudHJ5OiBQZXJmb3JtYW5jZUV2ZW50VGltaW5nKTogdm9pZCA9PiB7XG4gICAgLy8gT25seSByZXBvcnQgaWYgdGhlIHBhZ2Ugd2Fzbid0IGhpZGRlbiBwcmlvciB0byB0aGUgZmlyc3QgaW5wdXQuXG4gICAgaWYgKHJlcG9ydCAmJiBlbnRyeS5zdGFydFRpbWUgPCB2aXNpYmlsaXR5V2F0Y2hlci5maXJzdEhpZGRlblRpbWUpIHtcbiAgICAgIG1ldHJpYy52YWx1ZSA9IGVudHJ5LnByb2Nlc3NpbmdTdGFydCAtIGVudHJ5LnN0YXJ0VGltZTtcbiAgICAgIG1ldHJpYy5lbnRyaWVzLnB1c2goZW50cnkpO1xuICAgICAgcmVwb3J0KHRydWUpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBwbyA9IG9ic2VydmUoJ2ZpcnN0LWlucHV0JywgZW50cnlIYW5kbGVyIGFzIFBlcmZvcm1hbmNlRW50cnlIYW5kbGVyKTtcbiAgaWYgKHBvKSB7XG4gICAgcmVwb3J0ID0gYmluZFJlcG9ydGVyKG9uUmVwb3J0LCBtZXRyaWMsIHJlcG9ydEFsbENoYW5nZXMpO1xuICAgIG9uSGlkZGVuKCgpID0+IHtcbiAgICAgIHBvLnRha2VSZWNvcmRzKCkubWFwKGVudHJ5SGFuZGxlciBhcyBQZXJmb3JtYW5jZUVudHJ5SGFuZGxlcik7XG4gICAgICBwby5kaXNjb25uZWN0KCk7XG4gICAgfSwgdHJ1ZSk7XG4gIH1cbn07XG4iLCAiLypcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IGJpbmRSZXBvcnRlciB9IGZyb20gJy4vbGliL2JpbmRSZXBvcnRlcic7XG5pbXBvcnQgeyBnZXRWaXNpYmlsaXR5V2F0Y2hlciB9IGZyb20gJy4vbGliL2dldFZpc2liaWxpdHlXYXRjaGVyJztcbmltcG9ydCB7IGluaXRNZXRyaWMgfSBmcm9tICcuL2xpYi9pbml0TWV0cmljJztcbmltcG9ydCB7IG9ic2VydmUsIFBlcmZvcm1hbmNlRW50cnlIYW5kbGVyIH0gZnJvbSAnLi9saWIvb2JzZXJ2ZSc7XG5pbXBvcnQgeyBvbkhpZGRlbiB9IGZyb20gJy4vbGliL29uSGlkZGVuJztcbmltcG9ydCB7IFJlcG9ydEhhbmRsZXIgfSBmcm9tICcuL3R5cGVzJztcblxuLy8gaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9sYXJnZXN0LWNvbnRlbnRmdWwtcGFpbnQvI3NlYy1sYXJnZXN0LWNvbnRlbnRmdWwtcGFpbnQtaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIExhcmdlc3RDb250ZW50ZnVsUGFpbnQgZXh0ZW5kcyBQZXJmb3JtYW5jZUVudHJ5IHtcbiAgcmVuZGVyVGltZTogRE9NSGlnaFJlc1RpbWVTdGFtcDtcbiAgbG9hZFRpbWU6IERPTUhpZ2hSZXNUaW1lU3RhbXA7XG4gIHNpemU6IG51bWJlcjtcbiAgaWQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIGVsZW1lbnQ/OiBFbGVtZW50O1xuICB0b0pTT04oKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuY29uc3QgcmVwb3J0ZWRNZXRyaWNJRHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cbmV4cG9ydCBjb25zdCBnZXRMQ1AgPSAob25SZXBvcnQ6IFJlcG9ydEhhbmRsZXIsIHJlcG9ydEFsbENoYW5nZXM/OiBib29sZWFuKTogdm9pZCA9PiB7XG4gIGNvbnN0IHZpc2liaWxpdHlXYXRjaGVyID0gZ2V0VmlzaWJpbGl0eVdhdGNoZXIoKTtcbiAgY29uc3QgbWV0cmljID0gaW5pdE1ldHJpYygnTENQJyk7XG4gIGxldCByZXBvcnQ6IFJldHVyblR5cGU8dHlwZW9mIGJpbmRSZXBvcnRlcj47XG5cbiAgY29uc3QgZW50cnlIYW5kbGVyID0gKGVudHJ5OiBQZXJmb3JtYW5jZUVudHJ5KTogdm9pZCA9PiB7XG4gICAgLy8gVGhlIHN0YXJ0VGltZSBhdHRyaWJ1dGUgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHJlbmRlclRpbWUgaWYgaXQgaXMgbm90IDAsXG4gICAgLy8gYW5kIHRoZSB2YWx1ZSBvZiB0aGUgbG9hZFRpbWUgb3RoZXJ3aXNlLlxuICAgIGNvbnN0IHZhbHVlID0gZW50cnkuc3RhcnRUaW1lO1xuXG4gICAgLy8gSWYgdGhlIHBhZ2Ugd2FzIGhpZGRlbiBwcmlvciB0byBwYWludCB0aW1lIG9mIHRoZSBlbnRyeSxcbiAgICAvLyBpZ25vcmUgaXQgYW5kIG1hcmsgdGhlIG1ldHJpYyBhcyBmaW5hbCwgb3RoZXJ3aXNlIGFkZCB0aGUgZW50cnkuXG4gICAgaWYgKHZhbHVlIDwgdmlzaWJpbGl0eVdhdGNoZXIuZmlyc3RIaWRkZW5UaW1lKSB7XG4gICAgICBtZXRyaWMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIG1ldHJpYy5lbnRyaWVzLnB1c2goZW50cnkpO1xuICAgIH1cblxuICAgIGlmIChyZXBvcnQpIHtcbiAgICAgIHJlcG9ydCgpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBwbyA9IG9ic2VydmUoJ2xhcmdlc3QtY29udGVudGZ1bC1wYWludCcsIGVudHJ5SGFuZGxlcik7XG5cbiAgaWYgKHBvKSB7XG4gICAgcmVwb3J0ID0gYmluZFJlcG9ydGVyKG9uUmVwb3J0LCBtZXRyaWMsIHJlcG9ydEFsbENoYW5nZXMpO1xuXG4gICAgY29uc3Qgc3RvcExpc3RlbmluZyA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmICghcmVwb3J0ZWRNZXRyaWNJRHNbbWV0cmljLmlkXSkge1xuICAgICAgICBwby50YWtlUmVjb3JkcygpLm1hcChlbnRyeUhhbmRsZXIgYXMgUGVyZm9ybWFuY2VFbnRyeUhhbmRsZXIpO1xuICAgICAgICBwby5kaXNjb25uZWN0KCk7XG4gICAgICAgIHJlcG9ydGVkTWV0cmljSURzW21ldHJpYy5pZF0gPSB0cnVlO1xuICAgICAgICByZXBvcnQodHJ1ZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIFN0b3AgbGlzdGVuaW5nIGFmdGVyIGlucHV0LiBOb3RlOiB3aGlsZSBzY3JvbGxpbmcgaXMgYW4gaW5wdXQgdGhhdFxuICAgIC8vIHN0b3AgTENQIG9ic2VydmF0aW9uLCBpdCdzIHVucmVsaWFibGUgc2luY2UgaXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHlcbiAgICAvLyBnZW5lcmF0ZWQuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNocm9tZS93ZWItdml0YWxzL2lzc3Vlcy83NVxuICAgIFsna2V5ZG93bicsICdjbGljayddLmZvckVhY2godHlwZSA9PiB7XG4gICAgICBhZGRFdmVudExpc3RlbmVyKHR5cGUsIHN0b3BMaXN0ZW5pbmcsIHsgb25jZTogdHJ1ZSwgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICB9KTtcblxuICAgIG9uSGlkZGVuKHN0b3BMaXN0ZW5pbmcsIHRydWUpO1xuICB9XG59O1xuIiwgIi8qIGVzbGludC1kaXNhYmxlIG1heC1saW5lcyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgTWVhc3VyZW1lbnRzLCBTcGFuQ29udGV4dCB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbiwgZ2V0R2xvYmFsT2JqZWN0LCBodG1sVHJlZUFzU3RyaW5nLCBpc05vZGVFbnYsIGxvZ2dlciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5pbXBvcnQgeyBTcGFuIH0gZnJvbSAnLi4vc3Bhbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4uL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IG1zVG9TZWMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBnZXRDTFMsIExheW91dFNoaWZ0IH0gZnJvbSAnLi93ZWItdml0YWxzL2dldENMUyc7XG5pbXBvcnQgeyBnZXRGSUQgfSBmcm9tICcuL3dlYi12aXRhbHMvZ2V0RklEJztcbmltcG9ydCB7IGdldExDUCwgTGFyZ2VzdENvbnRlbnRmdWxQYWludCB9IGZyb20gJy4vd2ViLXZpdGFscy9nZXRMQ1AnO1xuaW1wb3J0IHsgZ2V0VmlzaWJpbGl0eVdhdGNoZXIgfSBmcm9tICcuL3dlYi12aXRhbHMvbGliL2dldFZpc2liaWxpdHlXYXRjaGVyJztcbmltcG9ydCB7IE5hdmlnYXRvckRldmljZU1lbW9yeSwgTmF2aWdhdG9yTmV0d29ya0luZm9ybWF0aW9uIH0gZnJvbSAnLi93ZWItdml0YWxzL3R5cGVzJztcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsT2JqZWN0PFdpbmRvdz4oKTtcblxuLyoqIENsYXNzIHRyYWNraW5nIG1ldHJpY3MgICovXG5leHBvcnQgY2xhc3MgTWV0cmljc0luc3RydW1lbnRhdGlvbiB7XG4gIHByaXZhdGUgX21lYXN1cmVtZW50czogTWVhc3VyZW1lbnRzID0ge307XG5cbiAgcHJpdmF0ZSBfcGVyZm9ybWFuY2VDdXJzb3I6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX2xjcEVudHJ5OiBMYXJnZXN0Q29udGVudGZ1bFBhaW50IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9jbHNFbnRyeTogTGF5b3V0U2hpZnQgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX3JlcG9ydEFsbENoYW5nZXM6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGlmICghaXNOb2RlRW52KCkgJiYgZ2xvYmFsPy5wZXJmb3JtYW5jZSAmJiBnbG9iYWw/LmRvY3VtZW50KSB7XG4gICAgICBpZiAoZ2xvYmFsLnBlcmZvcm1hbmNlLm1hcmspIHtcbiAgICAgICAgZ2xvYmFsLnBlcmZvcm1hbmNlLm1hcmsoJ3NlbnRyeS10cmFjaW5nLWluaXQnKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fdHJhY2tDTFMoKTtcbiAgICAgIHRoaXMuX3RyYWNrTENQKCk7XG4gICAgICB0aGlzLl90cmFja0ZJRCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBBZGQgcGVyZm9ybWFuY2UgcmVsYXRlZCBzcGFucyB0byBhIHRyYW5zYWN0aW9uICovXG4gIHB1YmxpYyBhZGRQZXJmb3JtYW5jZUVudHJpZXModHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgaWYgKCFnbG9iYWwgfHwgIWdsb2JhbC5wZXJmb3JtYW5jZSB8fCAhZ2xvYmFsLnBlcmZvcm1hbmNlLmdldEVudHJpZXMgfHwgIWJyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW4pIHtcbiAgICAgIC8vIEdhdGVrZWVwZXIgaWYgcGVyZm9ybWFuY2UgQVBJIG5vdCBhdmFpbGFibGVcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2dnZXIubG9nKCdbVHJhY2luZ10gQWRkaW5nICYgYWRqdXN0aW5nIHNwYW5zIHVzaW5nIFBlcmZvcm1hbmNlIEFQSScpO1xuXG4gICAgY29uc3QgdGltZU9yaWdpbiA9IG1zVG9TZWMoYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbik7XG4gICAgbGV0IGVudHJ5U2NyaXB0U3JjOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZ2xvYmFsLmRvY3VtZW50ICYmIGdsb2JhbC5kb2N1bWVudC5zY3JpcHRzKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1mb3Itb2ZcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ2xvYmFsLmRvY3VtZW50LnNjcmlwdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gV2UgZ28gdGhyb3VnaCBhbGwgc2NyaXB0cyBvbiB0aGUgcGFnZSBhbmQgbG9vayBmb3IgJ2RhdGEtZW50cnknXG4gICAgICAgIC8vIFdlIHJlbWVtYmVyIHRoZSBuYW1lIGFuZCBtZWFzdXJlIHRoZSB0aW1lIGJldHdlZW4gdGhpcyBzY3JpcHQgZmluaXNoZWQgbG9hZGluZyBhbmRcbiAgICAgICAgLy8gb3VyIG1hcmsgJ3NlbnRyeS10cmFjaW5nLWluaXQnXG4gICAgICAgIGlmIChnbG9iYWwuZG9jdW1lbnQuc2NyaXB0c1tpXS5kYXRhc2V0LmVudHJ5ID09PSAndHJ1ZScpIHtcbiAgICAgICAgICBlbnRyeVNjcmlwdFNyYyA9IGdsb2JhbC5kb2N1bWVudC5zY3JpcHRzW2ldLnNyYztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBlbnRyeVNjcmlwdFN0YXJ0VGltZXN0YW1wOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHRyYWNpbmdJbml0TWFya1N0YXJ0VGltZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGxldCByZXNwb25zZVN0YXJ0VGltZXN0YW1wOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHJlcXVlc3RTdGFydFRpbWVzdGFtcDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICAgZ2xvYmFsLnBlcmZvcm1hbmNlXG4gICAgICAuZ2V0RW50cmllcygpXG4gICAgICAuc2xpY2UodGhpcy5fcGVyZm9ybWFuY2VDdXJzb3IpXG4gICAgICAuZm9yRWFjaCgoZW50cnk6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gbXNUb1NlYyhlbnRyeS5zdGFydFRpbWUgYXMgbnVtYmVyKTtcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBtc1RvU2VjKGVudHJ5LmR1cmF0aW9uIGFzIG51bWJlcik7XG5cbiAgICAgICAgaWYgKHRyYW5zYWN0aW9uLm9wID09PSAnbmF2aWdhdGlvbicgJiYgdGltZU9yaWdpbiArIHN0YXJ0VGltZSA8IHRyYW5zYWN0aW9uLnN0YXJ0VGltZXN0YW1wKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChlbnRyeS5lbnRyeVR5cGUpIHtcbiAgICAgICAgICBjYXNlICduYXZpZ2F0aW9uJzoge1xuICAgICAgICAgICAgYWRkTmF2aWdhdGlvblNwYW5zKHRyYW5zYWN0aW9uLCBlbnRyeSwgdGltZU9yaWdpbik7XG4gICAgICAgICAgICByZXNwb25zZVN0YXJ0VGltZXN0YW1wID0gdGltZU9yaWdpbiArIG1zVG9TZWMoZW50cnkucmVzcG9uc2VTdGFydCBhcyBudW1iZXIpO1xuICAgICAgICAgICAgcmVxdWVzdFN0YXJ0VGltZXN0YW1wID0gdGltZU9yaWdpbiArIG1zVG9TZWMoZW50cnkucmVxdWVzdFN0YXJ0IGFzIG51bWJlcik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAnbWFyayc6XG4gICAgICAgICAgY2FzZSAncGFpbnQnOlxuICAgICAgICAgIGNhc2UgJ21lYXN1cmUnOiB7XG4gICAgICAgICAgICBjb25zdCBzdGFydFRpbWVzdGFtcCA9IGFkZE1lYXN1cmVTcGFucyh0cmFuc2FjdGlvbiwgZW50cnksIHN0YXJ0VGltZSwgZHVyYXRpb24sIHRpbWVPcmlnaW4pO1xuICAgICAgICAgICAgaWYgKHRyYWNpbmdJbml0TWFya1N0YXJ0VGltZSA9PT0gdW5kZWZpbmVkICYmIGVudHJ5Lm5hbWUgPT09ICdzZW50cnktdHJhY2luZy1pbml0Jykge1xuICAgICAgICAgICAgICB0cmFjaW5nSW5pdE1hcmtTdGFydFRpbWUgPSBzdGFydFRpbWVzdGFtcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2FwdHVyZSB3ZWIgdml0YWxzXG5cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SGlkZGVuID0gZ2V0VmlzaWJpbGl0eVdhdGNoZXIoKTtcbiAgICAgICAgICAgIC8vIE9ubHkgcmVwb3J0IGlmIHRoZSBwYWdlIHdhc24ndCBoaWRkZW4gcHJpb3IgdG8gdGhlIHdlYiB2aXRhbC5cbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFJlY29yZCA9IGVudHJ5LnN0YXJ0VGltZSA8IGZpcnN0SGlkZGVuLmZpcnN0SGlkZGVuVGltZTtcblxuICAgICAgICAgICAgaWYgKGVudHJ5Lm5hbWUgPT09ICdmaXJzdC1wYWludCcgJiYgc2hvdWxkUmVjb3JkKSB7XG4gICAgICAgICAgICAgIGxvZ2dlci5sb2coJ1tNZWFzdXJlbWVudHNdIEFkZGluZyBGUCcpO1xuICAgICAgICAgICAgICB0aGlzLl9tZWFzdXJlbWVudHNbJ2ZwJ10gPSB7IHZhbHVlOiBlbnRyeS5zdGFydFRpbWUgfTtcbiAgICAgICAgICAgICAgdGhpcy5fbWVhc3VyZW1lbnRzWydtYXJrLmZwJ10gPSB7IHZhbHVlOiBzdGFydFRpbWVzdGFtcCB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZW50cnkubmFtZSA9PT0gJ2ZpcnN0LWNvbnRlbnRmdWwtcGFpbnQnICYmIHNob3VsZFJlY29yZCkge1xuICAgICAgICAgICAgICBsb2dnZXIubG9nKCdbTWVhc3VyZW1lbnRzXSBBZGRpbmcgRkNQJyk7XG4gICAgICAgICAgICAgIHRoaXMuX21lYXN1cmVtZW50c1snZmNwJ10gPSB7IHZhbHVlOiBlbnRyeS5zdGFydFRpbWUgfTtcbiAgICAgICAgICAgICAgdGhpcy5fbWVhc3VyZW1lbnRzWydtYXJrLmZjcCddID0geyB2YWx1ZTogc3RhcnRUaW1lc3RhbXAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ3Jlc291cmNlJzoge1xuICAgICAgICAgICAgY29uc3QgcmVzb3VyY2VOYW1lID0gKGVudHJ5Lm5hbWUgYXMgc3RyaW5nKS5yZXBsYWNlKGdsb2JhbC5sb2NhdGlvbi5vcmlnaW4sICcnKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZFRpbWVzdGFtcCA9IGFkZFJlc291cmNlU3BhbnModHJhbnNhY3Rpb24sIGVudHJ5LCByZXNvdXJjZU5hbWUsIHN0YXJ0VGltZSwgZHVyYXRpb24sIHRpbWVPcmlnaW4pO1xuICAgICAgICAgICAgLy8gV2UgcmVtZW1iZXIgdGhlIGVudHJ5IHNjcmlwdCBlbmQgdGltZSB0byBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgdG8gdGhlIGZpcnN0IGluaXQgbWFya1xuICAgICAgICAgICAgaWYgKGVudHJ5U2NyaXB0U3RhcnRUaW1lc3RhbXAgPT09IHVuZGVmaW5lZCAmJiAoZW50cnlTY3JpcHRTcmMgfHwgJycpLmluZGV4T2YocmVzb3VyY2VOYW1lKSA+IC0xKSB7XG4gICAgICAgICAgICAgIGVudHJ5U2NyaXB0U3RhcnRUaW1lc3RhbXAgPSBlbmRUaW1lc3RhbXA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBJZ25vcmUgb3RoZXIgZW50cnkgdHlwZXMuXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgaWYgKGVudHJ5U2NyaXB0U3RhcnRUaW1lc3RhbXAgIT09IHVuZGVmaW5lZCAmJiB0cmFjaW5nSW5pdE1hcmtTdGFydFRpbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgX3N0YXJ0Q2hpbGQodHJhbnNhY3Rpb24sIHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdldmFsdWF0aW9uJyxcbiAgICAgICAgZW5kVGltZXN0YW1wOiB0cmFjaW5nSW5pdE1hcmtTdGFydFRpbWUsXG4gICAgICAgIG9wOiAnc2NyaXB0JyxcbiAgICAgICAgc3RhcnRUaW1lc3RhbXA6IGVudHJ5U2NyaXB0U3RhcnRUaW1lc3RhbXAsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9wZXJmb3JtYW5jZUN1cnNvciA9IE1hdGgubWF4KHBlcmZvcm1hbmNlLmdldEVudHJpZXMoKS5sZW5ndGggLSAxLCAwKTtcblxuICAgIHRoaXMuX3RyYWNrTmF2aWdhdG9yKHRyYW5zYWN0aW9uKTtcblxuICAgIC8vIE1lYXN1cmVtZW50cyBhcmUgb25seSBhdmFpbGFibGUgZm9yIHBhZ2Vsb2FkIHRyYW5zYWN0aW9uc1xuICAgIGlmICh0cmFuc2FjdGlvbi5vcCA9PT0gJ3BhZ2Vsb2FkJykge1xuICAgICAgLy8gbm9ybWFsaXplIGFwcGxpY2FibGUgd2ViIHZpdGFsIHZhbHVlcyB0byBiZSByZWxhdGl2ZSB0byB0cmFuc2FjdGlvbi5zdGFydFRpbWVzdGFtcFxuXG4gICAgICBjb25zdCB0aW1lT3JpZ2luID0gbXNUb1NlYyhicm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luKTtcblxuICAgICAgLy8gR2VuZXJhdGUgVFRGQiAoVGltZSB0byBGaXJzdCBCeXRlKSwgd2hpY2ggbWVhc3VyZWQgYXMgdGhlIHRpbWUgYmV0d2VlbiB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0cmFuc2FjdGlvbiBhbmQgdGhlXG4gICAgICAvLyBzdGFydCBvZiB0aGUgcmVzcG9uc2UgaW4gbWlsbGlzZWNvbmRzXG4gICAgICBpZiAodHlwZW9mIHJlc3BvbnNlU3RhcnRUaW1lc3RhbXAgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGxvZ2dlci5sb2coJ1tNZWFzdXJlbWVudHNdIEFkZGluZyBUVEZCJyk7XG4gICAgICAgIHRoaXMuX21lYXN1cmVtZW50c1sndHRmYiddID0geyB2YWx1ZTogKHJlc3BvbnNlU3RhcnRUaW1lc3RhbXAgLSB0cmFuc2FjdGlvbi5zdGFydFRpbWVzdGFtcCkgKiAxMDAwIH07XG5cbiAgICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0U3RhcnRUaW1lc3RhbXAgPT09ICdudW1iZXInICYmIHJlcXVlc3RTdGFydFRpbWVzdGFtcCA8PSByZXNwb25zZVN0YXJ0VGltZXN0YW1wKSB7XG4gICAgICAgICAgLy8gQ2FwdHVyZSB0aGUgdGltZSBzcGVudCBtYWtpbmcgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmluZyB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgcmVzcG9uc2UuXG4gICAgICAgICAgLy8gVGhpcyBpcyB0aGUgdGltZSBiZXR3ZWVuIHRoZSBzdGFydCBvZiB0aGUgcmVxdWVzdCBhbmQgdGhlIHN0YXJ0IG9mIHRoZSByZXNwb25zZSBpbiBtaWxsaXNlY29uZHMuXG4gICAgICAgICAgdGhpcy5fbWVhc3VyZW1lbnRzWyd0dGZiLnJlcXVlc3RUaW1lJ10gPSB7IHZhbHVlOiAocmVzcG9uc2VTdGFydFRpbWVzdGFtcCAtIHJlcXVlc3RTdGFydFRpbWVzdGFtcCkgKiAxMDAwIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgWydmY3AnLCAnZnAnLCAnbGNwJ10uZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9tZWFzdXJlbWVudHNbbmFtZV0gfHwgdGltZU9yaWdpbiA+PSB0cmFuc2FjdGlvbi5zdGFydFRpbWVzdGFtcCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSB3ZWIgdml0YWxzLCBmY3AsIGZwLCBsY3AsIGFuZCB0dGZiLCBhbGwgbWVhc3VyZSByZWxhdGl2ZSB0byB0aW1lT3JpZ2luLlxuICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5LCB0aW1lT3JpZ2luIGlzIG5vdCBjYXB0dXJlZCB3aXRoaW4gdGhlIHRyYW5zYWN0aW9uIHNwYW4gZGF0YSwgc28gdGhlc2Ugd2ViIHZpdGFscyB3aWxsIG5lZWRcbiAgICAgICAgLy8gdG8gYmUgYWRqdXN0ZWQgdG8gYmUgcmVsYXRpdmUgdG8gdHJhbnNhY3Rpb24uc3RhcnRUaW1lc3RhbXAuXG5cbiAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLl9tZWFzdXJlbWVudHNbbmFtZV0udmFsdWU7XG4gICAgICAgIGNvbnN0IG1lYXN1cmVtZW50VGltZXN0YW1wID0gdGltZU9yaWdpbiArIG1zVG9TZWMob2xkVmFsdWUpO1xuICAgICAgICAvLyBub3JtYWxpemVkVmFsdWUgc2hvdWxkIGJlIGluIG1pbGxpc2Vjb25kc1xuICAgICAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSBNYXRoLmFicygobWVhc3VyZW1lbnRUaW1lc3RhbXAgLSB0cmFuc2FjdGlvbi5zdGFydFRpbWVzdGFtcCkgKiAxMDAwKTtcblxuICAgICAgICBjb25zdCBkZWx0YSA9IG5vcm1hbGl6ZWRWYWx1ZSAtIG9sZFZhbHVlO1xuICAgICAgICBsb2dnZXIubG9nKGBbTWVhc3VyZW1lbnRzXSBOb3JtYWxpemVkICR7bmFtZX0gZnJvbSAke29sZFZhbHVlfSB0byAke25vcm1hbGl6ZWRWYWx1ZX0gKCR7ZGVsdGF9KWApO1xuXG4gICAgICAgIHRoaXMuX21lYXN1cmVtZW50c1tuYW1lXS52YWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5fbWVhc3VyZW1lbnRzWydtYXJrLmZpZCddICYmIHRoaXMuX21lYXN1cmVtZW50c1snZmlkJ10pIHtcbiAgICAgICAgLy8gY3JlYXRlIHNwYW4gZm9yIEZJRFxuXG4gICAgICAgIF9zdGFydENoaWxkKHRyYW5zYWN0aW9uLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdmaXJzdCBpbnB1dCBkZWxheScsXG4gICAgICAgICAgZW5kVGltZXN0YW1wOiB0aGlzLl9tZWFzdXJlbWVudHNbJ21hcmsuZmlkJ10udmFsdWUgKyBtc1RvU2VjKHRoaXMuX21lYXN1cmVtZW50c1snZmlkJ10udmFsdWUpLFxuICAgICAgICAgIG9wOiAnd2ViLnZpdGFscycsXG4gICAgICAgICAgc3RhcnRUaW1lc3RhbXA6IHRoaXMuX21lYXN1cmVtZW50c1snbWFyay5maWQnXS52YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIEZDUCBpcyBub3QgcmVjb3JkZWQgd2Ugc2hvdWxkIG5vdCByZWNvcmQgdGhlIGNscyB2YWx1ZVxuICAgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBuZXcgZGVmaW5pdGlvbiBvZiBDTFMuXG4gICAgICBpZiAoISgnZmNwJyBpbiB0aGlzLl9tZWFzdXJlbWVudHMpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9tZWFzdXJlbWVudHMuY2xzO1xuICAgICAgfVxuXG4gICAgICB0cmFuc2FjdGlvbi5zZXRNZWFzdXJlbWVudHModGhpcy5fbWVhc3VyZW1lbnRzKTtcbiAgICAgIHRoaXMuX3RhZ01ldHJpY0luZm8odHJhbnNhY3Rpb24pO1xuXG4gICAgICB0cmFuc2FjdGlvbi5zZXRUYWcoJ3NlbnRyeV9yZXBvcnRBbGxDaGFuZ2VzJywgdGhpcy5fcmVwb3J0QWxsQ2hhbmdlcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEFkZCBMQ1AgLyBDTFMgZGF0YSB0byB0cmFuc2FjdGlvbiB0byBhbGxvdyBkZWJ1Z2dpbmcgKi9cbiAgcHJpdmF0ZSBfdGFnTWV0cmljSW5mbyh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbGNwRW50cnkpIHtcbiAgICAgIGxvZ2dlci5sb2coJ1tNZWFzdXJlbWVudHNdIEFkZGluZyBMQ1AgRGF0YScpO1xuICAgICAgLy8gQ2FwdHVyZSBQcm9wZXJ0aWVzIG9mIHRoZSBMQ1AgZWxlbWVudCB0aGF0IGNvbnRyaWJ1dGVzIHRvIHRoZSBMQ1AuXG5cbiAgICAgIGlmICh0aGlzLl9sY3BFbnRyeS5lbGVtZW50KSB7XG4gICAgICAgIHRyYW5zYWN0aW9uLnNldFRhZygnbGNwLmVsZW1lbnQnLCBodG1sVHJlZUFzU3RyaW5nKHRoaXMuX2xjcEVudHJ5LmVsZW1lbnQpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2xjcEVudHJ5LmlkKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uLnNldFRhZygnbGNwLmlkJywgdGhpcy5fbGNwRW50cnkuaWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fbGNwRW50cnkudXJsKSB7XG4gICAgICAgIC8vIFRyaW0gVVJMIHRvIHRoZSBmaXJzdCAyMDAgY2hhcmFjdGVycy5cbiAgICAgICAgdHJhbnNhY3Rpb24uc2V0VGFnKCdsY3AudXJsJywgdGhpcy5fbGNwRW50cnkudXJsLnRyaW0oKS5zbGljZSgwLCAyMDApKTtcbiAgICAgIH1cblxuICAgICAgdHJhbnNhY3Rpb24uc2V0VGFnKCdsY3Auc2l6ZScsIHRoaXMuX2xjcEVudHJ5LnNpemUpO1xuICAgIH1cblxuICAgIC8vIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0xheW91dFNoaWZ0XG4gICAgaWYgKHRoaXMuX2Nsc0VudHJ5ICYmIHRoaXMuX2Nsc0VudHJ5LnNvdXJjZXMpIHtcbiAgICAgIGxvZ2dlci5sb2coJ1tNZWFzdXJlbWVudHNdIEFkZGluZyBDTFMgRGF0YScpO1xuICAgICAgdGhpcy5fY2xzRW50cnkuc291cmNlcy5mb3JFYWNoKChzb3VyY2UsIGluZGV4KSA9PlxuICAgICAgICB0cmFuc2FjdGlvbi5zZXRUYWcoYGNscy5zb3VyY2UuJHtpbmRleCArIDF9YCwgaHRtbFRyZWVBc1N0cmluZyhzb3VyY2Uubm9kZSkpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKiogU3RhcnRzIHRyYWNraW5nIHRoZSBDdW11bGF0aXZlIExheW91dCBTaGlmdCBvbiB0aGUgY3VycmVudCBwYWdlLiAqL1xuICBwcml2YXRlIF90cmFja0NMUygpOiB2b2lkIHtcbiAgICAvLyBTZWU6XG4gICAgLy8gaHR0cHM6Ly93ZWIuZGV2L2V2b2x2aW5nLWNscy9cbiAgICAvLyBodHRwczovL3dlYi5kZXYvY2xzLXdlYi10b29saW5nL1xuICAgIGdldENMUyhtZXRyaWMgPT4ge1xuICAgICAgY29uc3QgZW50cnkgPSBtZXRyaWMuZW50cmllcy5wb3AoKTtcbiAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIubG9nKCdbTWVhc3VyZW1lbnRzXSBBZGRpbmcgQ0xTJyk7XG4gICAgICB0aGlzLl9tZWFzdXJlbWVudHNbJ2NscyddID0geyB2YWx1ZTogbWV0cmljLnZhbHVlIH07XG4gICAgICB0aGlzLl9jbHNFbnRyeSA9IGVudHJ5IGFzIExheW91dFNoaWZ0O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhcHR1cmUgdGhlIGluZm9ybWF0aW9uIG9mIHRoZSB1c2VyIGFnZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBfdHJhY2tOYXZpZ2F0b3IodHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgbmF2aWdhdG9yID0gZ2xvYmFsLm5hdmlnYXRvciBhcyBudWxsIHwgKE5hdmlnYXRvciAmIE5hdmlnYXRvck5ldHdvcmtJbmZvcm1hdGlvbiAmIE5hdmlnYXRvckRldmljZU1lbW9yeSk7XG4gICAgaWYgKCFuYXZpZ2F0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB0cmFjayBuZXR3b3JrIGNvbm5lY3Rpdml0eVxuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBuYXZpZ2F0b3IuY29ubmVjdGlvbjtcbiAgICBpZiAoY29ubmVjdGlvbikge1xuICAgICAgaWYgKGNvbm5lY3Rpb24uZWZmZWN0aXZlVHlwZSkge1xuICAgICAgICB0cmFuc2FjdGlvbi5zZXRUYWcoJ2VmZmVjdGl2ZUNvbm5lY3Rpb25UeXBlJywgY29ubmVjdGlvbi5lZmZlY3RpdmVUeXBlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbm5lY3Rpb24udHlwZSkge1xuICAgICAgICB0cmFuc2FjdGlvbi5zZXRUYWcoJ2Nvbm5lY3Rpb25UeXBlJywgY29ubmVjdGlvbi50eXBlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTWVhc3VyZW1lbnRWYWx1ZShjb25uZWN0aW9uLnJ0dCkpIHtcbiAgICAgICAgdGhpcy5fbWVhc3VyZW1lbnRzWydjb25uZWN0aW9uLnJ0dCddID0geyB2YWx1ZTogY29ubmVjdGlvbi5ydHQgYXMgbnVtYmVyIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChpc01lYXN1cmVtZW50VmFsdWUoY29ubmVjdGlvbi5kb3dubGluaykpIHtcbiAgICAgICAgdGhpcy5fbWVhc3VyZW1lbnRzWydjb25uZWN0aW9uLmRvd25saW5rJ10gPSB7IHZhbHVlOiBjb25uZWN0aW9uLmRvd25saW5rIGFzIG51bWJlciB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc01lYXN1cmVtZW50VmFsdWUobmF2aWdhdG9yLmRldmljZU1lbW9yeSkpIHtcbiAgICAgIHRyYW5zYWN0aW9uLnNldFRhZygnZGV2aWNlTWVtb3J5JywgU3RyaW5nKG5hdmlnYXRvci5kZXZpY2VNZW1vcnkpKTtcbiAgICB9XG5cbiAgICBpZiAoaXNNZWFzdXJlbWVudFZhbHVlKG5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5KSkge1xuICAgICAgdHJhbnNhY3Rpb24uc2V0VGFnKCdoYXJkd2FyZUNvbmN1cnJlbmN5JywgU3RyaW5nKG5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5KSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFN0YXJ0cyB0cmFja2luZyB0aGUgTGFyZ2VzdCBDb250ZW50ZnVsIFBhaW50IG9uIHRoZSBjdXJyZW50IHBhZ2UuICovXG4gIHByaXZhdGUgX3RyYWNrTENQKCk6IHZvaWQge1xuICAgIGdldExDUChtZXRyaWMgPT4ge1xuICAgICAgY29uc3QgZW50cnkgPSBtZXRyaWMuZW50cmllcy5wb3AoKTtcblxuICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRpbWVPcmlnaW4gPSBtc1RvU2VjKGJyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW4gYXMgbnVtYmVyKTtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IG1zVG9TZWMoZW50cnkuc3RhcnRUaW1lIGFzIG51bWJlcik7XG4gICAgICBsb2dnZXIubG9nKCdbTWVhc3VyZW1lbnRzXSBBZGRpbmcgTENQJyk7XG4gICAgICB0aGlzLl9tZWFzdXJlbWVudHNbJ2xjcCddID0geyB2YWx1ZTogbWV0cmljLnZhbHVlIH07XG4gICAgICB0aGlzLl9tZWFzdXJlbWVudHNbJ21hcmsubGNwJ10gPSB7IHZhbHVlOiB0aW1lT3JpZ2luICsgc3RhcnRUaW1lIH07XG4gICAgICB0aGlzLl9sY3BFbnRyeSA9IGVudHJ5IGFzIExhcmdlc3RDb250ZW50ZnVsUGFpbnQ7XG4gICAgfSwgdGhpcy5fcmVwb3J0QWxsQ2hhbmdlcyk7XG4gIH1cblxuICAvKiogU3RhcnRzIHRyYWNraW5nIHRoZSBGaXJzdCBJbnB1dCBEZWxheSBvbiB0aGUgY3VycmVudCBwYWdlLiAqL1xuICBwcml2YXRlIF90cmFja0ZJRCgpOiB2b2lkIHtcbiAgICBnZXRGSUQobWV0cmljID0+IHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gbWV0cmljLmVudHJpZXMucG9wKCk7XG5cbiAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0aW1lT3JpZ2luID0gbXNUb1NlYyhicm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luIGFzIG51bWJlcik7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSBtc1RvU2VjKGVudHJ5LnN0YXJ0VGltZSBhcyBudW1iZXIpO1xuICAgICAgbG9nZ2VyLmxvZygnW01lYXN1cmVtZW50c10gQWRkaW5nIEZJRCcpO1xuICAgICAgdGhpcy5fbWVhc3VyZW1lbnRzWydmaWQnXSA9IHsgdmFsdWU6IG1ldHJpYy52YWx1ZSB9O1xuICAgICAgdGhpcy5fbWVhc3VyZW1lbnRzWydtYXJrLmZpZCddID0geyB2YWx1ZTogdGltZU9yaWdpbiArIHN0YXJ0VGltZSB9O1xuICAgIH0pO1xuICB9XG59XG5cbi8qKiBJbnN0cnVtZW50IG5hdmlnYXRpb24gZW50cmllcyAqL1xuZnVuY3Rpb24gYWRkTmF2aWdhdGlvblNwYW5zKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbiwgZW50cnk6IFJlY29yZDxzdHJpbmcsIGFueT4sIHRpbWVPcmlnaW46IG51bWJlcik6IHZvaWQge1xuICBhZGRQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmcoeyB0cmFuc2FjdGlvbiwgZW50cnksIGV2ZW50OiAndW5sb2FkRXZlbnQnLCB0aW1lT3JpZ2luIH0pO1xuICBhZGRQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmcoeyB0cmFuc2FjdGlvbiwgZW50cnksIGV2ZW50OiAncmVkaXJlY3QnLCB0aW1lT3JpZ2luIH0pO1xuICBhZGRQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmcoeyB0cmFuc2FjdGlvbiwgZW50cnksIGV2ZW50OiAnZG9tQ29udGVudExvYWRlZEV2ZW50JywgdGltZU9yaWdpbiB9KTtcbiAgYWRkUGVyZm9ybWFuY2VOYXZpZ2F0aW9uVGltaW5nKHsgdHJhbnNhY3Rpb24sIGVudHJ5LCBldmVudDogJ2xvYWRFdmVudCcsIHRpbWVPcmlnaW4gfSk7XG4gIGFkZFBlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWluZyh7IHRyYW5zYWN0aW9uLCBlbnRyeSwgZXZlbnQ6ICdjb25uZWN0JywgdGltZU9yaWdpbiB9KTtcbiAgYWRkUGVyZm9ybWFuY2VOYXZpZ2F0aW9uVGltaW5nKHtcbiAgICB0cmFuc2FjdGlvbixcbiAgICBlbnRyeSxcbiAgICBldmVudDogJ3NlY3VyZUNvbm5lY3Rpb24nLFxuICAgIHRpbWVPcmlnaW4sXG4gICAgZXZlbnRFbmQ6ICdjb25uZWN0RW5kJyxcbiAgICBkZXNjcmlwdGlvbjogJ1RMUy9TU0wnLFxuICB9KTtcbiAgYWRkUGVyZm9ybWFuY2VOYXZpZ2F0aW9uVGltaW5nKHtcbiAgICB0cmFuc2FjdGlvbixcbiAgICBlbnRyeSxcbiAgICBldmVudDogJ2ZldGNoJyxcbiAgICB0aW1lT3JpZ2luLFxuICAgIGV2ZW50RW5kOiAnZG9tYWluTG9va3VwU3RhcnQnLFxuICAgIGRlc2NyaXB0aW9uOiAnY2FjaGUnLFxuICB9KTtcbiAgYWRkUGVyZm9ybWFuY2VOYXZpZ2F0aW9uVGltaW5nKHsgdHJhbnNhY3Rpb24sIGVudHJ5LCBldmVudDogJ2RvbWFpbkxvb2t1cCcsIHRpbWVPcmlnaW4sIGRlc2NyaXB0aW9uOiAnRE5TJyB9KTtcbiAgYWRkUmVxdWVzdCh0cmFuc2FjdGlvbiwgZW50cnksIHRpbWVPcmlnaW4pO1xufVxuXG4vKiogQ3JlYXRlIG1lYXN1cmUgcmVsYXRlZCBzcGFucyAqL1xuZnVuY3Rpb24gYWRkTWVhc3VyZVNwYW5zKFxuICB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24sXG4gIGVudHJ5OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBzdGFydFRpbWU6IG51bWJlcixcbiAgZHVyYXRpb246IG51bWJlcixcbiAgdGltZU9yaWdpbjogbnVtYmVyLFxuKTogbnVtYmVyIHtcbiAgY29uc3QgbWVhc3VyZVN0YXJ0VGltZXN0YW1wID0gdGltZU9yaWdpbiArIHN0YXJ0VGltZTtcbiAgY29uc3QgbWVhc3VyZUVuZFRpbWVzdGFtcCA9IG1lYXN1cmVTdGFydFRpbWVzdGFtcCArIGR1cmF0aW9uO1xuXG4gIF9zdGFydENoaWxkKHRyYW5zYWN0aW9uLCB7XG4gICAgZGVzY3JpcHRpb246IGVudHJ5Lm5hbWUgYXMgc3RyaW5nLFxuICAgIGVuZFRpbWVzdGFtcDogbWVhc3VyZUVuZFRpbWVzdGFtcCxcbiAgICBvcDogZW50cnkuZW50cnlUeXBlIGFzIHN0cmluZyxcbiAgICBzdGFydFRpbWVzdGFtcDogbWVhc3VyZVN0YXJ0VGltZXN0YW1wLFxuICB9KTtcblxuICByZXR1cm4gbWVhc3VyZVN0YXJ0VGltZXN0YW1wO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlRW50cnkgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGluaXRpYXRvclR5cGU/OiBzdHJpbmc7XG4gIHRyYW5zZmVyU2l6ZT86IG51bWJlcjtcbiAgZW5jb2RlZEJvZHlTaXplPzogbnVtYmVyO1xuICBkZWNvZGVkQm9keVNpemU/OiBudW1iZXI7XG59XG5cbi8qKiBDcmVhdGUgcmVzb3VyY2UtcmVsYXRlZCBzcGFucyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFJlc291cmNlU3BhbnMoXG4gIHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbixcbiAgZW50cnk6IFJlc291cmNlRW50cnksXG4gIHJlc291cmNlTmFtZTogc3RyaW5nLFxuICBzdGFydFRpbWU6IG51bWJlcixcbiAgZHVyYXRpb246IG51bWJlcixcbiAgdGltZU9yaWdpbjogbnVtYmVyLFxuKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgLy8gd2UgYWxyZWFkeSBpbnN0cnVtZW50IGJhc2VkIG9uIGZldGNoIGFuZCB4aHIsIHNvIHdlIGRvbid0IG5lZWQgdG9cbiAgLy8gZHVwbGljYXRlIHNwYW5zIGhlcmUuXG4gIGlmIChlbnRyeS5pbml0aWF0b3JUeXBlID09PSAneG1saHR0cHJlcXVlc3QnIHx8IGVudHJ5LmluaXRpYXRvclR5cGUgPT09ICdmZXRjaCcpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICBpZiAoJ3RyYW5zZmVyU2l6ZScgaW4gZW50cnkpIHtcbiAgICBkYXRhWydUcmFuc2ZlciBTaXplJ10gPSBlbnRyeS50cmFuc2ZlclNpemU7XG4gIH1cbiAgaWYgKCdlbmNvZGVkQm9keVNpemUnIGluIGVudHJ5KSB7XG4gICAgZGF0YVsnRW5jb2RlZCBCb2R5IFNpemUnXSA9IGVudHJ5LmVuY29kZWRCb2R5U2l6ZTtcbiAgfVxuICBpZiAoJ2RlY29kZWRCb2R5U2l6ZScgaW4gZW50cnkpIHtcbiAgICBkYXRhWydEZWNvZGVkIEJvZHkgU2l6ZSddID0gZW50cnkuZGVjb2RlZEJvZHlTaXplO1xuICB9XG5cbiAgY29uc3Qgc3RhcnRUaW1lc3RhbXAgPSB0aW1lT3JpZ2luICsgc3RhcnRUaW1lO1xuICBjb25zdCBlbmRUaW1lc3RhbXAgPSBzdGFydFRpbWVzdGFtcCArIGR1cmF0aW9uO1xuXG4gIF9zdGFydENoaWxkKHRyYW5zYWN0aW9uLCB7XG4gICAgZGVzY3JpcHRpb246IHJlc291cmNlTmFtZSxcbiAgICBlbmRUaW1lc3RhbXAsXG4gICAgb3A6IGVudHJ5LmluaXRpYXRvclR5cGUgPyBgcmVzb3VyY2UuJHtlbnRyeS5pbml0aWF0b3JUeXBlfWAgOiAncmVzb3VyY2UnLFxuICAgIHN0YXJ0VGltZXN0YW1wLFxuICAgIGRhdGEsXG4gIH0pO1xuXG4gIHJldHVybiBlbmRUaW1lc3RhbXA7XG59XG5cbi8qKiBDcmVhdGUgcGVyZm9ybWFuY2UgbmF2aWdhdGlvbiByZWxhdGVkIHNwYW5zICovXG5mdW5jdGlvbiBhZGRQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmcocHJvcHM6IHtcbiAgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uO1xuICBlbnRyeTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZXZlbnQ6IHN0cmluZztcbiAgdGltZU9yaWdpbjogbnVtYmVyO1xuICBldmVudEVuZD86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59KTogdm9pZCB7XG4gIGNvbnN0IHsgdHJhbnNhY3Rpb24sIGVudHJ5LCBldmVudCwgdGltZU9yaWdpbiwgZXZlbnRFbmQsIGRlc2NyaXB0aW9uIH0gPSBwcm9wcztcblxuICBjb25zdCBlbmQgPSBldmVudEVuZCA/IChlbnRyeVtldmVudEVuZF0gYXMgbnVtYmVyIHwgdW5kZWZpbmVkKSA6IChlbnRyeVtgJHtldmVudH1FbmRgXSBhcyBudW1iZXIgfCB1bmRlZmluZWQpO1xuICBjb25zdCBzdGFydCA9IGVudHJ5W2Ake2V2ZW50fVN0YXJ0YF0gYXMgbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBpZiAoIXN0YXJ0IHx8ICFlbmQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgX3N0YXJ0Q2hpbGQodHJhbnNhY3Rpb24sIHtcbiAgICBvcDogJ2Jyb3dzZXInLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiA/PyBldmVudCxcbiAgICBzdGFydFRpbWVzdGFtcDogdGltZU9yaWdpbiArIG1zVG9TZWMoc3RhcnQpLFxuICAgIGVuZFRpbWVzdGFtcDogdGltZU9yaWdpbiArIG1zVG9TZWMoZW5kKSxcbiAgfSk7XG59XG5cbi8qKiBDcmVhdGUgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcmVsYXRlZCBzcGFucyAqL1xuZnVuY3Rpb24gYWRkUmVxdWVzdCh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24sIGVudHJ5OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCB0aW1lT3JpZ2luOiBudW1iZXIpOiB2b2lkIHtcbiAgX3N0YXJ0Q2hpbGQodHJhbnNhY3Rpb24sIHtcbiAgICBvcDogJ2Jyb3dzZXInLFxuICAgIGRlc2NyaXB0aW9uOiAncmVxdWVzdCcsXG4gICAgc3RhcnRUaW1lc3RhbXA6IHRpbWVPcmlnaW4gKyBtc1RvU2VjKGVudHJ5LnJlcXVlc3RTdGFydCBhcyBudW1iZXIpLFxuICAgIGVuZFRpbWVzdGFtcDogdGltZU9yaWdpbiArIG1zVG9TZWMoZW50cnkucmVzcG9uc2VFbmQgYXMgbnVtYmVyKSxcbiAgfSk7XG5cbiAgX3N0YXJ0Q2hpbGQodHJhbnNhY3Rpb24sIHtcbiAgICBvcDogJ2Jyb3dzZXInLFxuICAgIGRlc2NyaXB0aW9uOiAncmVzcG9uc2UnLFxuICAgIHN0YXJ0VGltZXN0YW1wOiB0aW1lT3JpZ2luICsgbXNUb1NlYyhlbnRyeS5yZXNwb25zZVN0YXJ0IGFzIG51bWJlciksXG4gICAgZW5kVGltZXN0YW1wOiB0aW1lT3JpZ2luICsgbXNUb1NlYyhlbnRyeS5yZXNwb25zZUVuZCBhcyBudW1iZXIpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gc3RhcnQgY2hpbGQgb24gdHJhbnNhY3Rpb25zLiBUaGlzIGZ1bmN0aW9uIHdpbGwgbWFrZSBzdXJlIHRoYXQgdGhlIHRyYW5zYWN0aW9uIHdpbGxcbiAqIHVzZSB0aGUgc3RhcnQgdGltZXN0YW1wIG9mIHRoZSBjcmVhdGVkIGNoaWxkIHNwYW4gaWYgaXQgaXMgZWFybGllciB0aGFuIHRoZSB0cmFuc2FjdGlvbnMgYWN0dWFsXG4gKiBzdGFydCB0aW1lc3RhbXAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfc3RhcnRDaGlsZCh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24sIHsgc3RhcnRUaW1lc3RhbXAsIC4uLmN0eCB9OiBTcGFuQ29udGV4dCk6IFNwYW4ge1xuICBpZiAoc3RhcnRUaW1lc3RhbXAgJiYgdHJhbnNhY3Rpb24uc3RhcnRUaW1lc3RhbXAgPiBzdGFydFRpbWVzdGFtcCkge1xuICAgIHRyYW5zYWN0aW9uLnN0YXJ0VGltZXN0YW1wID0gc3RhcnRUaW1lc3RhbXA7XG4gIH1cblxuICByZXR1cm4gdHJhbnNhY3Rpb24uc3RhcnRDaGlsZCh7XG4gICAgc3RhcnRUaW1lc3RhbXAsXG4gICAgLi4uY3R4LFxuICB9KTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiB2YWx1ZSBpcyBhIHZhbGlkIG1lYXN1cmVtZW50IHZhbHVlLlxuICovXG5mdW5jdGlvbiBpc01lYXN1cmVtZW50VmFsdWUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWx1ZSk7XG59XG4iLCAiaW1wb3J0IHsgYWRkSW5zdHJ1bWVudGF0aW9uSGFuZGxlciwgaXNJbnN0YW5jZU9mLCBpc01hdGNoaW5nUGF0dGVybiB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5pbXBvcnQgeyBTcGFuIH0gZnJvbSAnLi4vc3Bhbic7XG5pbXBvcnQgeyBTcGFuU3RhdHVzIH0gZnJvbSAnLi4vc3BhbnN0YXR1cyc7XG5pbXBvcnQgeyBnZXRBY3RpdmVUcmFuc2FjdGlvbiwgaGFzVHJhY2luZ0VuYWJsZWQgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1RSQUNJTkdfT1JJR0lOUyA9IFsnbG9jYWxob3N0JywgL15cXC8vXTtcblxuLyoqIE9wdGlvbnMgZm9yIFJlcXVlc3QgSW5zdHJ1bWVudGF0aW9uICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RJbnN0cnVtZW50YXRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIExpc3Qgb2Ygc3RyaW5ncyAvIHJlZ2V4IHdoZXJlIHRoZSBpbnRlZ3JhdGlvbiBzaG91bGQgY3JlYXRlIFNwYW5zIG91dCBvZi4gQWRkaXRpb25hbGx5IHRoaXMgd2lsbCBiZSB1c2VkXG4gICAqIHRvIGRlZmluZSB3aGljaCBvdXRnb2luZyByZXF1ZXN0cyB0aGUgYHNlbnRyeS10cmFjZWAgaGVhZGVyIHdpbGwgYmUgYXR0YWNoZWQgdG8uXG4gICAqXG4gICAqIERlZmF1bHQ6IFsnbG9jYWxob3N0JywgL15cXC8vXSB7QHNlZSBERUZBVUxUX1RSQUNJTkdfT1JJR0lOU31cbiAgICovXG4gIHRyYWNpbmdPcmlnaW5zOiBBcnJheTxzdHJpbmcgfCBSZWdFeHA+O1xuXG4gIC8qKlxuICAgKiBGbGFnIHRvIGRpc2FibGUgcGF0Y2hpbmcgYWxsIHRvZ2V0aGVyIGZvciBmZXRjaCByZXF1ZXN0cy5cbiAgICpcbiAgICogRGVmYXVsdDogdHJ1ZVxuICAgKi9cbiAgdHJhY2VGZXRjaDogYm9vbGVhbjtcblxuICAvKipcbiAgICogRmxhZyB0byBkaXNhYmxlIHBhdGNoaW5nIGFsbCB0b2dldGhlciBmb3IgeGhyIHJlcXVlc3RzLlxuICAgKlxuICAgKiBEZWZhdWx0OiB0cnVlXG4gICAqL1xuICB0cmFjZVhIUjogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgY3JlYXRpbmcgYSBzcGFuIGZvciBhIHJlcXVlc3Qgd2l0aCB0aGUgZ2l2ZW4gdXJsLlxuICAgKiBSZXR1cm4gZmFsc2UgaWYgeW91IGRvbid0IHdhbnQgYSBzcGFuIGZvciB0aGUgZ2l2ZW4gdXJsLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0IGl0IHVzZXMgdGhlIGB0cmFjaW5nT3JpZ2luc2Agb3B0aW9ucyBhcyBhIHVybCBtYXRjaC5cbiAgICovXG4gIHNob3VsZENyZWF0ZVNwYW5Gb3JSZXF1ZXN0Pyh1cmw6IHN0cmluZyk6IGJvb2xlYW47XG59XG5cbi8qKiBEYXRhIHJldHVybmVkIGZyb20gZmV0Y2ggY2FsbGJhY2sgKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmV0Y2hEYXRhIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgYXJnczogYW55W107IC8vIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBmZXRjaCBjYWxsIGl0c2VsZlxuICBmZXRjaERhdGE/OiB7XG4gICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgLy8gc3Bhbl9pZFxuICAgIF9fc3Bhbj86IHN0cmluZztcbiAgfTtcblxuICAvLyBUT0RPIFNob3VsZCB0aGlzIGJlIHVua25vd24gaW5zdGVhZD8gSWYgd2UgdmVuZG9yIHR5cGVzLCBtYWtlIGl0IGEgUmVzcG9uc2VcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcmVzcG9uc2U/OiBhbnk7XG4gIGVycm9yPzogdW5rbm93bjtcblxuICBzdGFydFRpbWVzdGFtcDogbnVtYmVyO1xuICBlbmRUaW1lc3RhbXA/OiBudW1iZXI7XG59XG5cbi8qKiBEYXRhIHJldHVybmVkIGZyb20gWEhSIHJlcXVlc3QgKi9cbmV4cG9ydCBpbnRlcmZhY2UgWEhSRGF0YSB7XG4gIHhocj86IHtcbiAgICBfX3NlbnRyeV94aHJfXz86IHtcbiAgICAgIG1ldGhvZDogc3RyaW5nO1xuICAgICAgdXJsOiBzdHJpbmc7XG4gICAgICBzdGF0dXNfY29kZTogbnVtYmVyO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgfTtcbiAgICBfX3NlbnRyeV94aHJfc3Bhbl9pZF9fPzogc3RyaW5nO1xuICAgIHNldFJlcXVlc3RIZWFkZXI/OiAoa2V5OiBzdHJpbmcsIHZhbDogc3RyaW5nKSA9PiB2b2lkO1xuICAgIF9fc2VudHJ5X293bl9yZXF1ZXN0X18/OiBib29sZWFuO1xuICB9O1xuICBzdGFydFRpbWVzdGFtcDogbnVtYmVyO1xuICBlbmRUaW1lc3RhbXA/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0UmVxdWVzdEluc3RydW1lbnRhdGlvbk9wdGlvbnM6IFJlcXVlc3RJbnN0cnVtZW50YXRpb25PcHRpb25zID0ge1xuICB0cmFjZUZldGNoOiB0cnVlLFxuICB0cmFjZVhIUjogdHJ1ZSxcbiAgdHJhY2luZ09yaWdpbnM6IERFRkFVTFRfVFJBQ0lOR19PUklHSU5TLFxufTtcblxuLyoqIFJlZ2lzdGVycyBzcGFuIGNyZWF0b3JzIGZvciB4aHIgYW5kIGZldGNoIHJlcXVlc3RzICAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RydW1lbnRPdXRnb2luZ1JlcXVlc3RzKF9vcHRpb25zPzogUGFydGlhbDxSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uT3B0aW9ucz4pOiB2b2lkIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICBjb25zdCB7IHRyYWNlRmV0Y2gsIHRyYWNlWEhSLCB0cmFjaW5nT3JpZ2lucywgc2hvdWxkQ3JlYXRlU3BhbkZvclJlcXVlc3QgfSA9IHtcbiAgICAuLi5kZWZhdWx0UmVxdWVzdEluc3RydW1lbnRhdGlvbk9wdGlvbnMsXG4gICAgLi4uX29wdGlvbnMsXG4gIH07XG5cbiAgLy8gV2Ugc2hvdWxkIGNhY2hlIHVybCAtPiBkZWNpc2lvbiBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gY29tcHV0ZVxuICAvLyByZWdleHAgZXZlcnl0aW1lIHdlIGNyZWF0ZSBhIHJlcXVlc3QuXG4gIGNvbnN0IHVybE1hcDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblxuICBjb25zdCBkZWZhdWx0U2hvdWxkQ3JlYXRlU3BhbiA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICh1cmxNYXBbdXJsXSkge1xuICAgICAgcmV0dXJuIHVybE1hcFt1cmxdO1xuICAgIH1cbiAgICBjb25zdCBvcmlnaW5zID0gdHJhY2luZ09yaWdpbnM7XG4gICAgdXJsTWFwW3VybF0gPVxuICAgICAgb3JpZ2lucy5zb21lKChvcmlnaW46IHN0cmluZyB8IFJlZ0V4cCkgPT4gaXNNYXRjaGluZ1BhdHRlcm4odXJsLCBvcmlnaW4pKSAmJlxuICAgICAgIWlzTWF0Y2hpbmdQYXR0ZXJuKHVybCwgJ3NlbnRyeV9rZXknKTtcbiAgICByZXR1cm4gdXJsTWFwW3VybF07XG4gIH07XG5cbiAgLy8gV2Ugd2FudCB0aGF0IG91ciB1c2VycyBkb24ndCBoYXZlIHRvIHJlLWltcGxlbWVudCBzaG91bGRDcmVhdGVTcGFuRm9yUmVxdWVzdCB0aGVtc2VsdmVzXG4gIC8vIFRoYXQncyB3aHkgd2UgZmlsdGVyIG91dCBhbHJlYWR5IHVud2FudGVkIFNwYW5zIGZyb20gdHJhY2luZ09yaWdpbnNcbiAgbGV0IHNob3VsZENyZWF0ZVNwYW4gPSBkZWZhdWx0U2hvdWxkQ3JlYXRlU3BhbjtcbiAgaWYgKHR5cGVvZiBzaG91bGRDcmVhdGVTcGFuRm9yUmVxdWVzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHNob3VsZENyZWF0ZVNwYW4gPSAodXJsOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiBkZWZhdWx0U2hvdWxkQ3JlYXRlU3Bhbih1cmwpICYmIHNob3VsZENyZWF0ZVNwYW5Gb3JSZXF1ZXN0KHVybCk7XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHNwYW5zOiBSZWNvcmQ8c3RyaW5nLCBTcGFuPiA9IHt9O1xuXG4gIGlmICh0cmFjZUZldGNoKSB7XG4gICAgYWRkSW5zdHJ1bWVudGF0aW9uSGFuZGxlcih7XG4gICAgICBjYWxsYmFjazogKGhhbmRsZXJEYXRhOiBGZXRjaERhdGEpID0+IHtcbiAgICAgICAgZmV0Y2hDYWxsYmFjayhoYW5kbGVyRGF0YSwgc2hvdWxkQ3JlYXRlU3Bhbiwgc3BhbnMpO1xuICAgICAgfSxcbiAgICAgIHR5cGU6ICdmZXRjaCcsXG4gICAgfSk7XG4gIH1cblxuICBpZiAodHJhY2VYSFIpIHtcbiAgICBhZGRJbnN0cnVtZW50YXRpb25IYW5kbGVyKHtcbiAgICAgIGNhbGxiYWNrOiAoaGFuZGxlckRhdGE6IFhIUkRhdGEpID0+IHtcbiAgICAgICAgeGhyQ2FsbGJhY2soaGFuZGxlckRhdGEsIHNob3VsZENyZWF0ZVNwYW4sIHNwYW5zKTtcbiAgICAgIH0sXG4gICAgICB0eXBlOiAneGhyJyxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSBhbmQgdHJhY2sgZmV0Y2ggcmVxdWVzdCBzcGFuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2hDYWxsYmFjayhcbiAgaGFuZGxlckRhdGE6IEZldGNoRGF0YSxcbiAgc2hvdWxkQ3JlYXRlU3BhbjogKHVybDogc3RyaW5nKSA9PiBib29sZWFuLFxuICBzcGFuczogUmVjb3JkPHN0cmluZywgU3Bhbj4sXG4pOiB2b2lkIHtcbiAgaWYgKCFoYXNUcmFjaW5nRW5hYmxlZCgpIHx8ICEoaGFuZGxlckRhdGEuZmV0Y2hEYXRhICYmIHNob3VsZENyZWF0ZVNwYW4oaGFuZGxlckRhdGEuZmV0Y2hEYXRhLnVybCkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGhhbmRsZXJEYXRhLmVuZFRpbWVzdGFtcCAmJiBoYW5kbGVyRGF0YS5mZXRjaERhdGEuX19zcGFuKSB7XG4gICAgY29uc3Qgc3BhbiA9IHNwYW5zW2hhbmRsZXJEYXRhLmZldGNoRGF0YS5fX3NwYW5dO1xuICAgIGlmIChzcGFuKSB7XG4gICAgICBpZiAoaGFuZGxlckRhdGEucmVzcG9uc2UpIHtcbiAgICAgICAgLy8gVE9ETyAoa21jbGIpIHJlbW92ZSB0aGlzIG9uY2UgdHlwZXMgUFIgZ29lcyB0aHJvdWdoXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgc3Bhbi5zZXRIdHRwU3RhdHVzKGhhbmRsZXJEYXRhLnJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICB9IGVsc2UgaWYgKGhhbmRsZXJEYXRhLmVycm9yKSB7XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKFNwYW5TdGF0dXMuSW50ZXJuYWxFcnJvcik7XG4gICAgICB9XG4gICAgICBzcGFuLmZpbmlzaCgpO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlXG4gICAgICBkZWxldGUgc3BhbnNbaGFuZGxlckRhdGEuZmV0Y2hEYXRhLl9fc3Bhbl07XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGFjdGl2ZVRyYW5zYWN0aW9uID0gZ2V0QWN0aXZlVHJhbnNhY3Rpb24oKTtcbiAgaWYgKGFjdGl2ZVRyYW5zYWN0aW9uKSB7XG4gICAgY29uc3Qgc3BhbiA9IGFjdGl2ZVRyYW5zYWN0aW9uLnN0YXJ0Q2hpbGQoe1xuICAgICAgZGF0YToge1xuICAgICAgICAuLi5oYW5kbGVyRGF0YS5mZXRjaERhdGEsXG4gICAgICAgIHR5cGU6ICdmZXRjaCcsXG4gICAgICB9LFxuICAgICAgZGVzY3JpcHRpb246IGAke2hhbmRsZXJEYXRhLmZldGNoRGF0YS5tZXRob2R9ICR7aGFuZGxlckRhdGEuZmV0Y2hEYXRhLnVybH1gLFxuICAgICAgb3A6ICdodHRwLmNsaWVudCcsXG4gICAgfSk7XG5cbiAgICBoYW5kbGVyRGF0YS5mZXRjaERhdGEuX19zcGFuID0gc3Bhbi5zcGFuSWQ7XG4gICAgc3BhbnNbc3Bhbi5zcGFuSWRdID0gc3BhbjtcblxuICAgIGNvbnN0IHJlcXVlc3QgPSAoaGFuZGxlckRhdGEuYXJnc1swXSA9IGhhbmRsZXJEYXRhLmFyZ3NbMF0gYXMgc3RyaW5nIHwgUmVxdWVzdCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCBvcHRpb25zID0gKGhhbmRsZXJEYXRhLmFyZ3NbMV0gPSAoaGFuZGxlckRhdGEuYXJnc1sxXSBhcyB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB8fCB7fSk7XG4gICAgbGV0IGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnM7XG4gICAgaWYgKGlzSW5zdGFuY2VPZihyZXF1ZXN0LCBSZXF1ZXN0KSkge1xuICAgICAgaGVhZGVycyA9IChyZXF1ZXN0IGFzIFJlcXVlc3QpLmhlYWRlcnM7XG4gICAgfVxuICAgIGlmIChoZWFkZXJzKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgICBpZiAodHlwZW9mIGhlYWRlcnMuYXBwZW5kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgaGVhZGVycy5hcHBlbmQoJ3NlbnRyeS10cmFjZScsIHNwYW4udG9UcmFjZXBhcmVudCgpKTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgICAgICBoZWFkZXJzID0gWy4uLmhlYWRlcnMsIFsnc2VudHJ5LXRyYWNlJywgc3Bhbi50b1RyYWNlcGFyZW50KCldXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlYWRlcnMgPSB7IC4uLmhlYWRlcnMsICdzZW50cnktdHJhY2UnOiBzcGFuLnRvVHJhY2VwYXJlbnQoKSB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXJzID0geyAnc2VudHJ5LXRyYWNlJzogc3Bhbi50b1RyYWNlcGFyZW50KCkgfTtcbiAgICB9XG4gICAgb3B0aW9ucy5oZWFkZXJzID0gaGVhZGVycztcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSBhbmQgdHJhY2sgeGhyIHJlcXVlc3Qgc3BhbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHhockNhbGxiYWNrKFxuICBoYW5kbGVyRGF0YTogWEhSRGF0YSxcbiAgc2hvdWxkQ3JlYXRlU3BhbjogKHVybDogc3RyaW5nKSA9PiBib29sZWFuLFxuICBzcGFuczogUmVjb3JkPHN0cmluZywgU3Bhbj4sXG4pOiB2b2lkIHtcbiAgaWYgKFxuICAgICFoYXNUcmFjaW5nRW5hYmxlZCgpIHx8XG4gICAgaGFuZGxlckRhdGEueGhyPy5fX3NlbnRyeV9vd25fcmVxdWVzdF9fIHx8XG4gICAgIShoYW5kbGVyRGF0YS54aHI/Ll9fc2VudHJ5X3hocl9fICYmIHNob3VsZENyZWF0ZVNwYW4oaGFuZGxlckRhdGEueGhyLl9fc2VudHJ5X3hocl9fLnVybCkpXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHhociA9IGhhbmRsZXJEYXRhLnhoci5fX3NlbnRyeV94aHJfXztcblxuICAvLyBjaGVjayBmaXJzdCBpZiB0aGUgcmVxdWVzdCBoYXMgZmluaXNoZWQgYW5kIGlzIHRyYWNrZWQgYnkgYW4gZXhpc3Rpbmcgc3BhbiB3aGljaCBzaG91bGQgbm93IGVuZFxuICBpZiAoaGFuZGxlckRhdGEuZW5kVGltZXN0YW1wICYmIGhhbmRsZXJEYXRhLnhoci5fX3NlbnRyeV94aHJfc3Bhbl9pZF9fKSB7XG4gICAgY29uc3Qgc3BhbiA9IHNwYW5zW2hhbmRsZXJEYXRhLnhoci5fX3NlbnRyeV94aHJfc3Bhbl9pZF9fXTtcbiAgICBpZiAoc3Bhbikge1xuICAgICAgc3Bhbi5zZXRIdHRwU3RhdHVzKHhoci5zdGF0dXNfY29kZSk7XG4gICAgICBzcGFuLmZpbmlzaCgpO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlXG4gICAgICBkZWxldGUgc3BhbnNbaGFuZGxlckRhdGEueGhyLl9fc2VudHJ5X3hocl9zcGFuX2lkX19dO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBpZiBub3QsIGNyZWF0ZSBhIG5ldyBzcGFuIHRvIHRyYWNrIGl0XG4gIGNvbnN0IGFjdGl2ZVRyYW5zYWN0aW9uID0gZ2V0QWN0aXZlVHJhbnNhY3Rpb24oKTtcbiAgaWYgKGFjdGl2ZVRyYW5zYWN0aW9uKSB7XG4gICAgY29uc3Qgc3BhbiA9IGFjdGl2ZVRyYW5zYWN0aW9uLnN0YXJ0Q2hpbGQoe1xuICAgICAgZGF0YToge1xuICAgICAgICAuLi54aHIuZGF0YSxcbiAgICAgICAgdHlwZTogJ3hocicsXG4gICAgICAgIG1ldGhvZDogeGhyLm1ldGhvZCxcbiAgICAgICAgdXJsOiB4aHIudXJsLFxuICAgICAgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgJHt4aHIubWV0aG9kfSAke3hoci51cmx9YCxcbiAgICAgIG9wOiAnaHR0cC5jbGllbnQnLFxuICAgIH0pO1xuXG4gICAgaGFuZGxlckRhdGEueGhyLl9fc2VudHJ5X3hocl9zcGFuX2lkX18gPSBzcGFuLnNwYW5JZDtcbiAgICBzcGFuc1toYW5kbGVyRGF0YS54aHIuX19zZW50cnlfeGhyX3NwYW5faWRfX10gPSBzcGFuO1xuXG4gICAgaWYgKGhhbmRsZXJEYXRhLnhoci5zZXRSZXF1ZXN0SGVhZGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBoYW5kbGVyRGF0YS54aHIuc2V0UmVxdWVzdEhlYWRlcignc2VudHJ5LXRyYWNlJywgc3Bhbi50b1RyYWNlcGFyZW50KCkpO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAvLyBFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IEZhaWxlZCB0byBleGVjdXRlICdzZXRSZXF1ZXN0SGVhZGVyJyBvbiAnWE1MSHR0cFJlcXVlc3QnOiBUaGUgb2JqZWN0J3Mgc3RhdGUgbXVzdCBiZSBPUEVORUQuXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uQ29udGV4dCB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgYWRkSW5zdHJ1bWVudGF0aW9uSGFuZGxlciwgZ2V0R2xvYmFsT2JqZWN0LCBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsT2JqZWN0PFdpbmRvdz4oKTtcblxuLyoqXG4gKiBEZWZhdWx0IGZ1bmN0aW9uIGltcGxlbWVudGluZyBwYWdlbG9hZCBhbmQgbmF2aWdhdGlvbiB0cmFuc2FjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RydW1lbnRSb3V0aW5nV2l0aERlZmF1bHRzPFQgZXh0ZW5kcyBUcmFuc2FjdGlvbj4oXG4gIGN1c3RvbVN0YXJ0VHJhbnNhY3Rpb246IChjb250ZXh0OiBUcmFuc2FjdGlvbkNvbnRleHQpID0+IFQgfCB1bmRlZmluZWQsXG4gIHN0YXJ0VHJhbnNhY3Rpb25PblBhZ2VMb2FkOiBib29sZWFuID0gdHJ1ZSxcbiAgc3RhcnRUcmFuc2FjdGlvbk9uTG9jYXRpb25DaGFuZ2U6IGJvb2xlYW4gPSB0cnVlLFxuKTogdm9pZCB7XG4gIGlmICghZ2xvYmFsIHx8ICFnbG9iYWwubG9jYXRpb24pIHtcbiAgICBsb2dnZXIud2FybignQ291bGQgbm90IGluaXRpYWxpemUgcm91dGluZyBpbnN0cnVtZW50YXRpb24gZHVlIHRvIGludmFsaWQgbG9jYXRpb24nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgc3RhcnRpbmdVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdsb2JhbC5sb2NhdGlvbi5ocmVmO1xuXG4gIGxldCBhY3RpdmVUcmFuc2FjdGlvbjogVCB8IHVuZGVmaW5lZDtcbiAgaWYgKHN0YXJ0VHJhbnNhY3Rpb25PblBhZ2VMb2FkKSB7XG4gICAgYWN0aXZlVHJhbnNhY3Rpb24gPSBjdXN0b21TdGFydFRyYW5zYWN0aW9uKHsgbmFtZTogZ2xvYmFsLmxvY2F0aW9uLnBhdGhuYW1lLCBvcDogJ3BhZ2Vsb2FkJyB9KTtcbiAgfVxuXG4gIGlmIChzdGFydFRyYW5zYWN0aW9uT25Mb2NhdGlvbkNoYW5nZSkge1xuICAgIGFkZEluc3RydW1lbnRhdGlvbkhhbmRsZXIoe1xuICAgICAgY2FsbGJhY2s6ICh7IHRvLCBmcm9tIH06IHsgdG86IHN0cmluZzsgZnJvbT86IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGlzIGVhcmx5IHJldHVybiBpcyB0aGVyZSB0byBhY2NvdW50IGZvciBzb21lIGNhc2VzIHdoZXJlIGEgbmF2aWdhdGlvbiB0cmFuc2FjdGlvbiBzdGFydHMgcmlnaHQgYWZ0ZXJcbiAgICAgICAgICogbG9uZy1ydW5uaW5nIHBhZ2Vsb2FkLiBXZSBtYWtlIHN1cmUgdGhhdCBpZiBgZnJvbWAgaXMgdW5kZWZpbmVkIGFuZCBhIHZhbGlkIGBzdGFydGluZ1VSTGAgZXhpc3RzLCB3ZSBkb24ndFxuICAgICAgICAgKiBjcmVhdGUgYW4gdW5lY2Nlc3NhcnkgbmF2aWdhdGlvbiB0cmFuc2FjdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhpcyB3YXMgaGFyZCB0byBkdXBsaWNhdGUsIGJ1dCB0aGlzIGJlaGF2aW9yIHN0b3BwZWQgYXMgc29vbiBhcyB0aGlzIGZpeCB3YXMgYXBwbGllZC4gVGhpcyBpc3N1ZSBtaWdodCBhbHNvXG4gICAgICAgICAqIG9ubHkgYmUgY2F1c2VkIGluIGNlcnRhaW4gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzIHdoZXJlIHRoZSB1c2FnZSBvZiBhIGhvdCBtb2R1bGUgcmVsb2FkZXIgaXMgY2F1c2luZ1xuICAgICAgICAgKiBlcnJvcnMuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoZnJvbSA9PT0gdW5kZWZpbmVkICYmIHN0YXJ0aW5nVXJsICYmIHN0YXJ0aW5nVXJsLmluZGV4T2YodG8pICE9PSAtMSkge1xuICAgICAgICAgIHN0YXJ0aW5nVXJsID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmcm9tICE9PSB0bykge1xuICAgICAgICAgIHN0YXJ0aW5nVXJsID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChhY3RpdmVUcmFuc2FjdGlvbikge1xuICAgICAgICAgICAgbG9nZ2VyLmxvZyhgW1RyYWNpbmddIEZpbmlzaGluZyBjdXJyZW50IHRyYW5zYWN0aW9uIHdpdGggb3A6ICR7YWN0aXZlVHJhbnNhY3Rpb24ub3B9YCk7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGFuIG9wZW4gdHJhbnNhY3Rpb24gb24gdGhlIHNjb3BlLCB3ZSBuZWVkIHRvIGZpbmlzaCBpdCBiZWZvcmUgY3JlYXRpbmcgYW4gbmV3IG9uZS5cbiAgICAgICAgICAgIGFjdGl2ZVRyYW5zYWN0aW9uLmZpbmlzaCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3RpdmVUcmFuc2FjdGlvbiA9IGN1c3RvbVN0YXJ0VHJhbnNhY3Rpb24oeyBuYW1lOiBnbG9iYWwubG9jYXRpb24ucGF0aG5hbWUsIG9wOiAnbmF2aWdhdGlvbicgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0eXBlOiAnaGlzdG9yeScsXG4gICAgfSk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBIdWIgfSBmcm9tICdAc2VudHJ5L2h1Yic7XG5pbXBvcnQgeyBFdmVudFByb2Nlc3NvciwgSW50ZWdyYXRpb24sIFRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvbkNvbnRleHQgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCwgbG9nZ2VyIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmltcG9ydCB7IHN0YXJ0SWRsZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vaHViZXh0ZW5zaW9ucyc7XG5pbXBvcnQgeyBERUZBVUxUX0lETEVfVElNRU9VVCwgSWRsZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vaWRsZXRyYW5zYWN0aW9uJztcbmltcG9ydCB7IFNwYW5TdGF0dXMgfSBmcm9tICcuLi9zcGFuc3RhdHVzJztcbmltcG9ydCB7IGV4dHJhY3RUcmFjZXBhcmVudERhdGEsIHNlY1RvTXMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyByZWdpc3RlckJhY2tncm91bmRUYWJEZXRlY3Rpb24gfSBmcm9tICcuL2JhY2tncm91bmR0YWInO1xuaW1wb3J0IHsgTWV0cmljc0luc3RydW1lbnRhdGlvbiB9IGZyb20gJy4vbWV0cmljcyc7XG5pbXBvcnQge1xuICBkZWZhdWx0UmVxdWVzdEluc3RydW1lbnRhdGlvbk9wdGlvbnMsXG4gIGluc3RydW1lbnRPdXRnb2luZ1JlcXVlc3RzLFxuICBSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uT3B0aW9ucyxcbn0gZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7IGluc3RydW1lbnRSb3V0aW5nV2l0aERlZmF1bHRzIH0gZnJvbSAnLi9yb3V0ZXInO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9NQVhfVFJBTlNBQ1RJT05fRFVSQVRJT05fU0VDT05EUyA9IDYwMDtcblxuLyoqIE9wdGlvbnMgZm9yIEJyb3dzZXIgVHJhY2luZyBpbnRlZ3JhdGlvbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCcm93c2VyVHJhY2luZ09wdGlvbnMgZXh0ZW5kcyBSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgdGltZSB0byB3YWl0IGluIG1zIHVudGlsIHRoZSB0cmFuc2FjdGlvbiB3aWxsIGJlIGZpbmlzaGVkLiBUaGUgdHJhbnNhY3Rpb24gd2lsbCB1c2UgdGhlIGVuZCB0aW1lc3RhbXAgb2ZcbiAgICogdGhlIGxhc3QgZmluaXNoZWQgc3BhbiBhcyB0aGUgZW5kdGltZSBmb3IgdGhlIHRyYW5zYWN0aW9uLlxuICAgKiBUaW1lIGlzIGluIG1zLlxuICAgKlxuICAgKiBEZWZhdWx0OiAxMDAwXG4gICAqL1xuICBpZGxlVGltZW91dDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBGbGFnIHRvIGVuYWJsZS9kaXNhYmxlIGNyZWF0aW9uIG9mIGBuYXZpZ2F0aW9uYCB0cmFuc2FjdGlvbiBvbiBoaXN0b3J5IGNoYW5nZXMuXG4gICAqXG4gICAqIERlZmF1bHQ6IHRydWVcbiAgICovXG4gIHN0YXJ0VHJhbnNhY3Rpb25PbkxvY2F0aW9uQ2hhbmdlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBGbGFnIHRvIGVuYWJsZS9kaXNhYmxlIGNyZWF0aW9uIG9mIGBwYWdlbG9hZGAgdHJhbnNhY3Rpb24gb24gZmlyc3QgcGFnZWxvYWQuXG4gICAqXG4gICAqIERlZmF1bHQ6IHRydWVcbiAgICovXG4gIHN0YXJ0VHJhbnNhY3Rpb25PblBhZ2VMb2FkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBkdXJhdGlvbiBvZiBhIHRyYW5zYWN0aW9uIGJlZm9yZSBpdCB3aWxsIGJlIG1hcmtlZCBhcyBcImRlYWRsaW5lX2V4Y2VlZGVkXCIuXG4gICAqIElmIHlvdSBuZXZlciB3YW50IHRvIG1hcmsgYSB0cmFuc2FjdGlvbiBzZXQgaXQgdG8gMC5cbiAgICogVGltZSBpcyBpbiBzZWNvbmRzLlxuICAgKlxuICAgKiBEZWZhdWx0OiA2MDBcbiAgICovXG4gIG1heFRyYW5zYWN0aW9uRHVyYXRpb246IG51bWJlcjtcblxuICAvKipcbiAgICogRmxhZyBUcmFuc2FjdGlvbnMgd2hlcmUgdGFicyBtb3ZlZCB0byBiYWNrZ3JvdW5kIHdpdGggXCJjYW5jZWxsZWRcIi4gQnJvd3NlciBiYWNrZ3JvdW5kIHRhYiB0aW1pbmcgaXNcbiAgICogbm90IHN1aXRlZCB0b3dhcmRzIGRvaW5nIHByZWNpc2UgbWVhc3VyZW1lbnRzIG9mIG9wZXJhdGlvbnMuIEJ5IGRlZmF1bHQsIHdlIHJlY29tbWVuZCB0aGF0IHRoaXMgb3B0aW9uXG4gICAqIGJlIGVuYWJsZWQgYXMgYmFja2dyb3VuZCB0cmFuc2FjdGlvbnMgY2FuIG1lc3MgdXAgeW91ciBzdGF0aXN0aWNzIGluIG5vbmRldGVybWluaXN0aWMgd2F5cy5cbiAgICpcbiAgICogRGVmYXVsdDogdHJ1ZVxuICAgKi9cbiAgbWFya0JhY2tncm91bmRUcmFuc2FjdGlvbnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIF9tZXRyaWNPcHRpb25zIGFsbG93cyB0aGUgdXNlciB0byBzZW5kIG9wdGlvbnMgdG8gY2hhbmdlIGhvdyBtZXRyaWNzIGFyZSBjb2xsZWN0ZWQuXG4gICAqXG4gICAqIF9tZXRyaWNPcHRpb25zIGlzIGN1cnJlbnRseSBleHBlcmltZW50YWwuXG4gICAqXG4gICAqIERlZmF1bHQ6IHVuZGVmaW5lZFxuICAgKi9cbiAgX21ldHJpY09wdGlvbnM/OiBQYXJ0aWFsPHsgX3JlcG9ydEFsbENoYW5nZXM6IGJvb2xlYW4gfT47XG5cbiAgLyoqXG4gICAqIGJlZm9yZU5hdmlnYXRlIGlzIGNhbGxlZCBiZWZvcmUgYSBwYWdlbG9hZC9uYXZpZ2F0aW9uIHRyYW5zYWN0aW9uIGlzIGNyZWF0ZWQgYW5kIGFsbG93cyB1c2VycyB0byBtb2RpZnkgdHJhbnNhY3Rpb25cbiAgICogY29udGV4dCBkYXRhLCBvciBkcm9wIHRoZSB0cmFuc2FjdGlvbiBlbnRpcmVseSAoYnkgc2V0dGluZyBgc2FtcGxlZCA9IGZhbHNlYCBpbiB0aGUgY29udGV4dCkuXG4gICAqXG4gICAqIE5vdGU6IEZvciBsZWdhY3kgcmVhc29ucywgdHJhbnNhY3Rpb25zIGNhbiBhbHNvIGJlIGRyb3BwZWQgYnkgcmV0dXJuaW5nIGB1bmRlZmluZWRgLlxuICAgKlxuICAgKiBAcGFyYW0gY29udGV4dDogVGhlIGNvbnRleHQgZGF0YSB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byBgc3RhcnRUcmFuc2FjdGlvbmAgYnkgZGVmYXVsdFxuICAgKlxuICAgKiBAcmV0dXJucyBBIChwb3RlbnRpYWxseSkgbW9kaWZpZWQgY29udGV4dCBvYmplY3QsIHdpdGggYHNhbXBsZWQgPSBmYWxzZWAgaWYgdGhlIHRyYW5zYWN0aW9uIHNob3VsZCBiZSBkcm9wcGVkLlxuICAgKi9cbiAgYmVmb3JlTmF2aWdhdGU/KGNvbnRleHQ6IFRyYW5zYWN0aW9uQ29udGV4dCk6IFRyYW5zYWN0aW9uQ29udGV4dCB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSW5zdHJ1bWVudGF0aW9uIHRoYXQgY3JlYXRlcyByb3V0aW5nIGNoYW5nZSB0cmFuc2FjdGlvbnMuIEJ5IGRlZmF1bHQgY3JlYXRlc1xuICAgKiBwYWdlbG9hZCBhbmQgbmF2aWdhdGlvbiB0cmFuc2FjdGlvbnMuXG4gICAqL1xuICByb3V0aW5nSW5zdHJ1bWVudGF0aW9uPFQgZXh0ZW5kcyBUcmFuc2FjdGlvbj4oXG4gICAgY3VzdG9tU3RhcnRUcmFuc2FjdGlvbjogKGNvbnRleHQ6IFRyYW5zYWN0aW9uQ29udGV4dCkgPT4gVCB8IHVuZGVmaW5lZCxcbiAgICBzdGFydFRyYW5zYWN0aW9uT25QYWdlTG9hZD86IGJvb2xlYW4sXG4gICAgc3RhcnRUcmFuc2FjdGlvbk9uTG9jYXRpb25DaGFuZ2U/OiBib29sZWFuLFxuICApOiB2b2lkO1xufVxuXG5jb25zdCBERUZBVUxUX0JST1dTRVJfVFJBQ0lOR19PUFRJT05TID0ge1xuICBpZGxlVGltZW91dDogREVGQVVMVF9JRExFX1RJTUVPVVQsXG4gIG1hcmtCYWNrZ3JvdW5kVHJhbnNhY3Rpb25zOiB0cnVlLFxuICBtYXhUcmFuc2FjdGlvbkR1cmF0aW9uOiBERUZBVUxUX01BWF9UUkFOU0FDVElPTl9EVVJBVElPTl9TRUNPTkRTLFxuICByb3V0aW5nSW5zdHJ1bWVudGF0aW9uOiBpbnN0cnVtZW50Um91dGluZ1dpdGhEZWZhdWx0cyxcbiAgc3RhcnRUcmFuc2FjdGlvbk9uTG9jYXRpb25DaGFuZ2U6IHRydWUsXG4gIHN0YXJ0VHJhbnNhY3Rpb25PblBhZ2VMb2FkOiB0cnVlLFxuICAuLi5kZWZhdWx0UmVxdWVzdEluc3RydW1lbnRhdGlvbk9wdGlvbnMsXG59O1xuXG4vKipcbiAqIFRoZSBCcm93c2VyIFRyYWNpbmcgaW50ZWdyYXRpb24gYXV0b21hdGljYWxseSBpbnN0cnVtZW50cyBicm93c2VyIHBhZ2Vsb2FkL25hdmlnYXRpb25cbiAqIGFjdGlvbnMgYXMgdHJhbnNhY3Rpb25zLCBhbmQgY2FwdHVyZXMgcmVxdWVzdHMsIG1ldHJpY3MgYW5kIGVycm9ycyBhcyBzcGFucy5cbiAqXG4gKiBUaGUgaW50ZWdyYXRpb24gY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCBhIHZhcmlldHkgb2Ygb3B0aW9ucywgYW5kIGNhbiBiZSBleHRlbmRlZCB0byB1c2VcbiAqIGFueSByb3V0aW5nIGxpYnJhcnkuIFRoaXMgaW50ZWdyYXRpb24gdXNlcyB7QHNlZSBJZGxlVHJhbnNhY3Rpb259IHRvIGNyZWF0ZSB0cmFuc2FjdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBCcm93c2VyVHJhY2luZyBpbXBsZW1lbnRzIEludGVncmF0aW9uIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlkOiBzdHJpbmcgPSAnQnJvd3NlclRyYWNpbmcnO1xuXG4gIC8qKiBCcm93c2VyIFRyYWNpbmcgaW50ZWdyYXRpb24gb3B0aW9ucyAqL1xuICBwdWJsaWMgb3B0aW9uczogQnJvd3NlclRyYWNpbmdPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIG5hbWU6IHN0cmluZyA9IEJyb3dzZXJUcmFjaW5nLmlkO1xuXG4gIHByaXZhdGUgX2dldEN1cnJlbnRIdWI/OiAoKSA9PiBIdWI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljczogTWV0cmljc0luc3RydW1lbnRhdGlvbjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9lbWl0T3B0aW9uc1dhcm5pbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogU3RvcmUgY29uZmlndXJlZCBpZGxlIHRpbWVvdXQgc28gdGhhdCBpdCBjYW4gYmUgYWRkZWQgYXMgYSB0YWcgdG8gdHJhbnNhY3Rpb25zICovXG4gIHByaXZhdGUgX2NvbmZpZ3VyZWRJZGxlVGltZW91dDogQnJvd3NlclRyYWNpbmdPcHRpb25zWydpZGxlVGltZW91dCddIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihfb3B0aW9ucz86IFBhcnRpYWw8QnJvd3NlclRyYWNpbmdPcHRpb25zPikge1xuICAgIGxldCB0cmFjaW5nT3JpZ2lucyA9IGRlZmF1bHRSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uT3B0aW9ucy50cmFjaW5nT3JpZ2lucztcbiAgICAvLyBOT1RFOiBMb2dnZXIgZG9lc24ndCB3b3JrIGluIGNvbnN0cnVjdG9ycywgYXMgaXQncyBpbml0aWFsaXplZCBhZnRlciBpbnRlZ3JhdGlvbnMgaW5zdGFuY2VzXG4gICAgaWYgKF9vcHRpb25zKSB7XG4gICAgICB0aGlzLl9jb25maWd1cmVkSWRsZVRpbWVvdXQgPSBfb3B0aW9ucy5pZGxlVGltZW91dDtcbiAgICAgIGlmIChfb3B0aW9ucy50cmFjaW5nT3JpZ2lucyAmJiBBcnJheS5pc0FycmF5KF9vcHRpb25zLnRyYWNpbmdPcmlnaW5zKSAmJiBfb3B0aW9ucy50cmFjaW5nT3JpZ2lucy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgdHJhY2luZ09yaWdpbnMgPSBfb3B0aW9ucy50cmFjaW5nT3JpZ2lucztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2VtaXRPcHRpb25zV2FybmluZyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgLi4uREVGQVVMVF9CUk9XU0VSX1RSQUNJTkdfT1BUSU9OUyxcbiAgICAgIC4uLl9vcHRpb25zLFxuICAgICAgdHJhY2luZ09yaWdpbnMsXG4gICAgfTtcblxuICAgIGNvbnN0IHsgX21ldHJpY09wdGlvbnMgfSA9IHRoaXMub3B0aW9ucztcbiAgICB0aGlzLl9tZXRyaWNzID0gbmV3IE1ldHJpY3NJbnN0cnVtZW50YXRpb24oX21ldHJpY09wdGlvbnMgJiYgX21ldHJpY09wdGlvbnMuX3JlcG9ydEFsbENoYW5nZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0dXBPbmNlKF86IChjYWxsYmFjazogRXZlbnRQcm9jZXNzb3IpID0+IHZvaWQsIGdldEN1cnJlbnRIdWI6ICgpID0+IEh1Yik6IHZvaWQge1xuICAgIHRoaXMuX2dldEN1cnJlbnRIdWIgPSBnZXRDdXJyZW50SHViO1xuXG4gICAgaWYgKHRoaXMuX2VtaXRPcHRpb25zV2FybmluZykge1xuICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICdbVHJhY2luZ10gWW91IG5lZWQgdG8gZGVmaW5lIGB0cmFjaW5nT3JpZ2luc2AgaW4gdGhlIG9wdGlvbnMuIFNldCBhbiBhcnJheSBvZiB1cmxzIG9yIHBhdHRlcm5zIHRvIHRyYWNlLicsXG4gICAgICApO1xuICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgIGBbVHJhY2luZ10gV2UgYWRkZWQgYSByZWFzb25hYmxlIGRlZmF1bHQgZm9yIHlvdTogJHtkZWZhdWx0UmVxdWVzdEluc3RydW1lbnRhdGlvbk9wdGlvbnMudHJhY2luZ09yaWdpbnN9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICAgIGNvbnN0IHtcbiAgICAgIHJvdXRpbmdJbnN0cnVtZW50YXRpb246IGluc3RydW1lbnRSb3V0aW5nLFxuICAgICAgc3RhcnRUcmFuc2FjdGlvbk9uTG9jYXRpb25DaGFuZ2UsXG4gICAgICBzdGFydFRyYW5zYWN0aW9uT25QYWdlTG9hZCxcbiAgICAgIG1hcmtCYWNrZ3JvdW5kVHJhbnNhY3Rpb25zLFxuICAgICAgdHJhY2VGZXRjaCxcbiAgICAgIHRyYWNlWEhSLFxuICAgICAgdHJhY2luZ09yaWdpbnMsXG4gICAgICBzaG91bGRDcmVhdGVTcGFuRm9yUmVxdWVzdCxcbiAgICB9ID0gdGhpcy5vcHRpb25zO1xuXG4gICAgaW5zdHJ1bWVudFJvdXRpbmcoXG4gICAgICAoY29udGV4dDogVHJhbnNhY3Rpb25Db250ZXh0KSA9PiB0aGlzLl9jcmVhdGVSb3V0ZVRyYW5zYWN0aW9uKGNvbnRleHQpLFxuICAgICAgc3RhcnRUcmFuc2FjdGlvbk9uUGFnZUxvYWQsXG4gICAgICBzdGFydFRyYW5zYWN0aW9uT25Mb2NhdGlvbkNoYW5nZSxcbiAgICApO1xuXG4gICAgaWYgKG1hcmtCYWNrZ3JvdW5kVHJhbnNhY3Rpb25zKSB7XG4gICAgICByZWdpc3RlckJhY2tncm91bmRUYWJEZXRlY3Rpb24oKTtcbiAgICB9XG5cbiAgICBpbnN0cnVtZW50T3V0Z29pbmdSZXF1ZXN0cyh7IHRyYWNlRmV0Y2gsIHRyYWNlWEhSLCB0cmFjaW5nT3JpZ2lucywgc2hvdWxkQ3JlYXRlU3BhbkZvclJlcXVlc3QgfSk7XG4gIH1cblxuICAvKiogQ3JlYXRlIHJvdXRpbmcgaWRsZSB0cmFuc2FjdGlvbi4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlUm91dGVUcmFuc2FjdGlvbihjb250ZXh0OiBUcmFuc2FjdGlvbkNvbnRleHQpOiBUcmFuc2FjdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLl9nZXRDdXJyZW50SHViKSB7XG4gICAgICBsb2dnZXIud2FybihgW1RyYWNpbmddIERpZCBub3QgY3JlYXRlICR7Y29udGV4dC5vcH0gdHJhbnNhY3Rpb24gYmVjYXVzZSBfZ2V0Q3VycmVudEh1YiBpcyBpbnZhbGlkLmApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgY29uc3QgeyBiZWZvcmVOYXZpZ2F0ZSwgaWRsZVRpbWVvdXQsIG1heFRyYW5zYWN0aW9uRHVyYXRpb24gfSA9IHRoaXMub3B0aW9ucztcblxuICAgIGNvbnN0IHBhcmVudENvbnRleHRGcm9tSGVhZGVyID0gY29udGV4dC5vcCA9PT0gJ3BhZ2Vsb2FkJyA/IGdldEhlYWRlckNvbnRleHQoKSA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGV4cGFuZGVkQ29udGV4dCA9IHtcbiAgICAgIC4uLmNvbnRleHQsXG4gICAgICAuLi5wYXJlbnRDb250ZXh0RnJvbUhlYWRlcixcbiAgICAgIHRyaW1FbmQ6IHRydWUsXG4gICAgfTtcbiAgICBjb25zdCBtb2RpZmllZENvbnRleHQgPSB0eXBlb2YgYmVmb3JlTmF2aWdhdGUgPT09ICdmdW5jdGlvbicgPyBiZWZvcmVOYXZpZ2F0ZShleHBhbmRlZENvbnRleHQpIDogZXhwYW5kZWRDb250ZXh0O1xuXG4gICAgLy8gRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIGJlZm9yZU5hdmlnYXRlIGNhbiByZXR1cm4gdW5kZWZpbmVkIHRvIFwiZHJvcFwiIHRoZSB0cmFuc2FjdGlvbiAocHJldmVudCBpdFxuICAgIC8vIGZyb20gYmVpbmcgc2VudCB0byBTZW50cnkpLlxuICAgIGNvbnN0IGZpbmFsQ29udGV4dCA9IG1vZGlmaWVkQ29udGV4dCA9PT0gdW5kZWZpbmVkID8geyAuLi5leHBhbmRlZENvbnRleHQsIHNhbXBsZWQ6IGZhbHNlIH0gOiBtb2RpZmllZENvbnRleHQ7XG5cbiAgICBpZiAoZmluYWxDb250ZXh0LnNhbXBsZWQgPT09IGZhbHNlKSB7XG4gICAgICBsb2dnZXIubG9nKGBbVHJhY2luZ10gV2lsbCBub3Qgc2VuZCAke2ZpbmFsQ29udGV4dC5vcH0gdHJhbnNhY3Rpb24gYmVjYXVzZSBvZiBiZWZvcmVOYXZpZ2F0ZS5gKTtcbiAgICB9XG5cbiAgICBsb2dnZXIubG9nKGBbVHJhY2luZ10gU3RhcnRpbmcgJHtmaW5hbENvbnRleHQub3B9IHRyYW5zYWN0aW9uIG9uIHNjb3BlYCk7XG5cbiAgICBjb25zdCBodWIgPSB0aGlzLl9nZXRDdXJyZW50SHViKCk7XG4gICAgY29uc3QgeyBsb2NhdGlvbiB9ID0gZ2V0R2xvYmFsT2JqZWN0KCkgYXMgV2luZG93T3JXb3JrZXJHbG9iYWxTY29wZSAmIHsgbG9jYXRpb246IExvY2F0aW9uIH07XG5cbiAgICBjb25zdCBpZGxlVHJhbnNhY3Rpb24gPSBzdGFydElkbGVUcmFuc2FjdGlvbihcbiAgICAgIGh1YixcbiAgICAgIGZpbmFsQ29udGV4dCxcbiAgICAgIGlkbGVUaW1lb3V0LFxuICAgICAgdHJ1ZSxcbiAgICAgIHsgbG9jYXRpb24gfSwgLy8gZm9yIHVzZSBpbiB0aGUgdHJhY2VzU2FtcGxlclxuICAgICk7XG4gICAgaWRsZVRyYW5zYWN0aW9uLnJlZ2lzdGVyQmVmb3JlRmluaXNoQ2FsbGJhY2soKHRyYW5zYWN0aW9uLCBlbmRUaW1lc3RhbXApID0+IHtcbiAgICAgIHRoaXMuX21ldHJpY3MuYWRkUGVyZm9ybWFuY2VFbnRyaWVzKHRyYW5zYWN0aW9uKTtcbiAgICAgIGFkanVzdFRyYW5zYWN0aW9uRHVyYXRpb24oc2VjVG9NcyhtYXhUcmFuc2FjdGlvbkR1cmF0aW9uKSwgdHJhbnNhY3Rpb24sIGVuZFRpbWVzdGFtcCk7XG4gICAgfSk7XG5cbiAgICBpZGxlVHJhbnNhY3Rpb24uc2V0VGFnKCdpZGxlVGltZW91dCcsIHRoaXMuX2NvbmZpZ3VyZWRJZGxlVGltZW91dCk7XG5cbiAgICByZXR1cm4gaWRsZVRyYW5zYWN0aW9uIGFzIFRyYW5zYWN0aW9uO1xuICB9XG59XG5cbi8qKlxuICogR2V0cyB0cmFuc2FjdGlvbiBjb250ZXh0IGZyb20gYSBzZW50cnktdHJhY2UgbWV0YS5cbiAqXG4gKiBAcmV0dXJucyBUcmFuc2FjdGlvbiBjb250ZXh0IGRhdGEgZnJvbSB0aGUgaGVhZGVyIG9yIHVuZGVmaW5lZCBpZiB0aGVyZSdzIG5vIGhlYWRlciBvciB0aGUgaGVhZGVyIGlzIG1hbGZvcm1lZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyQ29udGV4dCgpOiBQYXJ0aWFsPFRyYW5zYWN0aW9uQ29udGV4dD4gfCB1bmRlZmluZWQge1xuICBjb25zdCBoZWFkZXIgPSBnZXRNZXRhQ29udGVudCgnc2VudHJ5LXRyYWNlJyk7XG4gIGlmIChoZWFkZXIpIHtcbiAgICByZXR1cm4gZXh0cmFjdFRyYWNlcGFyZW50RGF0YShoZWFkZXIpO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgbWV0YSB0YWcgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXRhQ29udGVudChtZXRhTmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGVsID0gZ2V0R2xvYmFsT2JqZWN0PFdpbmRvdz4oKS5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBtZXRhW25hbWU9JHttZXRhTmFtZX1dYCk7XG4gIHJldHVybiBlbCA/IGVsLmdldEF0dHJpYnV0ZSgnY29udGVudCcpIDogbnVsbDtcbn1cblxuLyoqIEFkanVzdHMgdHJhbnNhY3Rpb24gdmFsdWUgYmFzZWQgb24gbWF4IHRyYW5zYWN0aW9uIGR1cmF0aW9uICovXG5mdW5jdGlvbiBhZGp1c3RUcmFuc2FjdGlvbkR1cmF0aW9uKG1heER1cmF0aW9uOiBudW1iZXIsIHRyYW5zYWN0aW9uOiBJZGxlVHJhbnNhY3Rpb24sIGVuZFRpbWVzdGFtcDogbnVtYmVyKTogdm9pZCB7XG4gIGNvbnN0IGRpZmYgPSBlbmRUaW1lc3RhbXAgLSB0cmFuc2FjdGlvbi5zdGFydFRpbWVzdGFtcDtcbiAgY29uc3QgaXNPdXRkYXRlZFRyYW5zYWN0aW9uID0gZW5kVGltZXN0YW1wICYmIChkaWZmID4gbWF4RHVyYXRpb24gfHwgZGlmZiA8IDApO1xuICBpZiAoaXNPdXRkYXRlZFRyYW5zYWN0aW9uKSB7XG4gICAgdHJhbnNhY3Rpb24uc2V0U3RhdHVzKFNwYW5TdGF0dXMuRGVhZGxpbmVFeGNlZWRlZCk7XG4gICAgdHJhbnNhY3Rpb24uc2V0VGFnKCdtYXhUcmFuc2FjdGlvbkR1cmF0aW9uRXhjZWVkZWQnLCAndHJ1ZScpO1xuICB9XG59XG4iLCAiZXhwb3J0IHsgQnJvd3NlclRyYWNpbmcgfSBmcm9tICcuL2Jyb3dzZXJ0cmFjaW5nJztcbmV4cG9ydCB7XG4gIGluc3RydW1lbnRPdXRnb2luZ1JlcXVlc3RzLFxuICBSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uT3B0aW9ucyxcbiAgZGVmYXVsdFJlcXVlc3RJbnN0cnVtZW50YXRpb25PcHRpb25zLFxufSBmcm9tICcuL3JlcXVlc3QnO1xuIiwgImV4cG9ydCB7IEV4cHJlc3MgfSBmcm9tICcuL25vZGUvZXhwcmVzcyc7XG5leHBvcnQgeyBQb3N0Z3JlcyB9IGZyb20gJy4vbm9kZS9wb3N0Z3Jlcyc7XG5leHBvcnQgeyBNeXNxbCB9IGZyb20gJy4vbm9kZS9teXNxbCc7XG5leHBvcnQgeyBNb25nbyB9IGZyb20gJy4vbm9kZS9tb25nbyc7XG5cbi8vIFRPRE8odjcpOiBSZW1vdmUgdGhpcyBleHBvcnRcbi8vIFBsZWFzZSBzZWUgYHNyYy9pbmRleC50c2AgZm9yIG1vcmUgZGV0YWlscy5cbmV4cG9ydCB7IEJyb3dzZXJUcmFjaW5nIH0gZnJvbSAnLi4vYnJvd3Nlcic7XG4iLCAiaW1wb3J0IHsgYWRkRXh0ZW5zaW9uTWV0aG9kcyB9IGZyb20gJy4vaHViZXh0ZW5zaW9ucyc7XG5pbXBvcnQgKiBhcyBJbnRlZ3JhdGlvbnMgZnJvbSAnLi9pbnRlZ3JhdGlvbnMnO1xuXG5leHBvcnQgeyBJbnRlZ3JhdGlvbnMgfTtcblxuLy8gVGhpcyBpcyBhbHJlYWR5IGV4cG9ydGVkIGFzIHBhcnQgb2YgYEludGVncmF0aW9uc2AgYWJvdmUgKGFuZCBmb3IgdGhlIG1vbWVudCB3aWxsIHJlbWFpbiBzbyBmb3Jcbi8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5KSwgYnV0IHRoYXQgaW50ZXJmZXJlcyB3aXRoIHRyZWVzaGFraW5nLCBzbyB3ZSBhbHNvIGV4cG9ydCBpdCBzZXBhcmF0ZWx5XG4vLyBoZXJlLlxuLy9cbi8vIFByZXZpb3VzbHkgd2UgZXhwZWN0ZWQgdXNlcnMgdG8gaW1wb3J0IHRyYWNpbmcgaW50ZWdyYXRpb25zIGxpa2Vcbi8vXG4vLyBpbXBvcnQgeyBJbnRlZ3JhdGlvbnMgfSBmcm9tICdAc2VudHJ5L3RyYWNpbmcnO1xuLy8gY29uc3QgaW5zdGFuY2UgPSBuZXcgSW50ZWdyYXRpb25zLkJyb3dzZXJUcmFjaW5nKCk7XG4vL1xuLy8gVGhpcyBtYWtlcyB0aGUgaW50ZWdyYXRpb25zIHVuYWJsZSB0byBiZSB0cmVlc2hha2VuIHRob3VnaC4gVG8gYWRkcmVzcyB0aGlzLCB3ZSBub3cgaGF2ZVxuLy8gdGhpcyBpbmRpdmlkdWFsIGV4cG9ydC4gV2Ugbm93IGV4cGVjdCB1c2VycyB0byBjb25zdW1lIEJyb3dzZXJUcmFjaW5nIGxpa2Ugc286XG4vL1xuLy8gaW1wb3J0IHsgQnJvd3NlclRyYWNpbmcgfSBmcm9tICdAc2VudHJ5L3RyYWNpbmcnO1xuLy8gY29uc3QgaW5zdGFuY2UgPSBuZXcgQnJvd3NlclRyYWNpbmcoKTtcbi8vXG4vLyBGb3IgYW4gZXhhbXBsZSBvZiBvZiB0aGUgbmV3IHVzYWdlIG9mIEJyb3dzZXJUcmFjaW5nLCBzZWUgQHNlbnRyeS9uZXh0anMgaW5kZXguY2xpZW50LnRzXG5leHBvcnQgeyBCcm93c2VyVHJhY2luZyB9IGZyb20gJy4vYnJvd3Nlcic7XG5cbmV4cG9ydCB7IFNwYW4gfSBmcm9tICcuL3NwYW4nO1xuZXhwb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmV4cG9ydCB7XG4gIC8vIFRPRE8gZGVwcmVjYXRlIG9sZCBuYW1lIGluIHY3XG4gIGluc3RydW1lbnRPdXRnb2luZ1JlcXVlc3RzIGFzIHJlZ2lzdGVyUmVxdWVzdEluc3RydW1lbnRhdGlvbixcbiAgUmVxdWVzdEluc3RydW1lbnRhdGlvbk9wdGlvbnMsXG4gIGRlZmF1bHRSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uT3B0aW9ucyxcbn0gZnJvbSAnLi9icm93c2VyJztcbmV4cG9ydCB7IFNwYW5TdGF0dXMgfSBmcm9tICcuL3NwYW5zdGF0dXMnO1xuZXhwb3J0IHsgSWRsZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi9pZGxldHJhbnNhY3Rpb24nO1xuZXhwb3J0IHsgc3RhcnRJZGxlVHJhbnNhY3Rpb24gfSBmcm9tICcuL2h1YmV4dGVuc2lvbnMnO1xuXG4vLyBXZSBhcmUgcGF0Y2hpbmcgdGhlIGdsb2JhbCBvYmplY3Qgd2l0aCBvdXIgaHViIGV4dGVuc2lvbiBtZXRob2RzXG5hZGRFeHRlbnNpb25NZXRob2RzKCk7XG5cbmV4cG9ydCB7IGFkZEV4dGVuc2lvbk1ldGhvZHMgfTtcblxuZXhwb3J0IHtcbiAgZXh0cmFjdFRyYWNlcGFyZW50RGF0YSxcbiAgZ2V0QWN0aXZlVHJhbnNhY3Rpb24sXG4gIGhhc1RyYWNpbmdFbmFibGVkLFxuICBzdHJpcFVybFF1ZXJ5QW5kRnJhZ21lbnQsXG4gIFRSQUNFUEFSRU5UX1JFR0VYUCxcbn0gZnJvbSAnLi91dGlscyc7XG4iLCAiLyohXG4gKiBjb29raWVcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgUm9tYW4gU2h0eWxtYW5cbiAqIENvcHlyaWdodChjKSAyMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKiBAcHVibGljXG4gKi9cblxuZXhwb3J0cy5wYXJzZSA9IHBhcnNlO1xuZXhwb3J0cy5zZXJpYWxpemUgPSBzZXJpYWxpemU7XG5cbi8qKlxuICogTW9kdWxlIHZhcmlhYmxlcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIGRlY29kZSA9IGRlY29kZVVSSUNvbXBvbmVudDtcbnZhciBlbmNvZGUgPSBlbmNvZGVVUklDb21wb25lbnQ7XG52YXIgcGFpclNwbGl0UmVnRXhwID0gLzsgKi87XG5cbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoIGZpZWxkLWNvbnRlbnQgaW4gUkZDIDcyMzAgc2VjIDMuMlxuICpcbiAqIGZpZWxkLWNvbnRlbnQgPSBmaWVsZC12Y2hhciBbIDEqKCBTUCAvIEhUQUIgKSBmaWVsZC12Y2hhciBdXG4gKiBmaWVsZC12Y2hhciAgID0gVkNIQVIgLyBvYnMtdGV4dFxuICogb2JzLXRleHQgICAgICA9ICV4ODAtRkZcbiAqL1xuXG52YXIgZmllbGRDb250ZW50UmVnRXhwID0gL15bXFx1MDAwOVxcdTAwMjAtXFx1MDA3ZVxcdTAwODAtXFx1MDBmZl0rJC87XG5cbi8qKlxuICogUGFyc2UgYSBjb29raWUgaGVhZGVyLlxuICpcbiAqIFBhcnNlIHRoZSBnaXZlbiBjb29raWUgaGVhZGVyIHN0cmluZyBpbnRvIGFuIG9iamVjdFxuICogVGhlIG9iamVjdCBoYXMgdGhlIHZhcmlvdXMgY29va2llcyBhcyBrZXlzKG5hbWVzKSA9PiB2YWx1ZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKiBAcHVibGljXG4gKi9cblxuZnVuY3Rpb24gcGFyc2Uoc3RyLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IHN0ciBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gIH1cblxuICB2YXIgb2JqID0ge31cbiAgdmFyIG9wdCA9IG9wdGlvbnMgfHwge307XG4gIHZhciBwYWlycyA9IHN0ci5zcGxpdChwYWlyU3BsaXRSZWdFeHApO1xuICB2YXIgZGVjID0gb3B0LmRlY29kZSB8fCBkZWNvZGU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWlycy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwYWlyID0gcGFpcnNbaV07XG4gICAgdmFyIGVxX2lkeCA9IHBhaXIuaW5kZXhPZignPScpO1xuXG4gICAgLy8gc2tpcCB0aGluZ3MgdGhhdCBkb24ndCBsb29rIGxpa2Uga2V5PXZhbHVlXG4gICAgaWYgKGVxX2lkeCA8IDApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBrZXkgPSBwYWlyLnN1YnN0cigwLCBlcV9pZHgpLnRyaW0oKVxuICAgIHZhciB2YWwgPSBwYWlyLnN1YnN0cigrK2VxX2lkeCwgcGFpci5sZW5ndGgpLnRyaW0oKTtcblxuICAgIC8vIHF1b3RlZCB2YWx1ZXNcbiAgICBpZiAoJ1wiJyA9PSB2YWxbMF0pIHtcbiAgICAgIHZhbCA9IHZhbC5zbGljZSgxLCAtMSk7XG4gICAgfVxuXG4gICAgLy8gb25seSBhc3NpZ24gb25jZVxuICAgIGlmICh1bmRlZmluZWQgPT0gb2JqW2tleV0pIHtcbiAgICAgIG9ialtrZXldID0gdHJ5RGVjb2RlKHZhbCwgZGVjKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZSBkYXRhIGludG8gYSBjb29raWUgaGVhZGVyLlxuICpcbiAqIFNlcmlhbGl6ZSB0aGUgYSBuYW1lIHZhbHVlIHBhaXIgaW50byBhIGNvb2tpZSBzdHJpbmcgc3VpdGFibGUgZm9yXG4gKiBodHRwIGhlYWRlcnMuIEFuIG9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0IHNwZWNpZmllZCBjb29raWUgcGFyYW1ldGVycy5cbiAqXG4gKiBzZXJpYWxpemUoJ2ZvbycsICdiYXInLCB7IGh0dHBPbmx5OiB0cnVlIH0pXG4gKiAgID0+IFwiZm9vPWJhcjsgaHR0cE9ubHlcIlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cblxuZnVuY3Rpb24gc2VyaWFsaXplKG5hbWUsIHZhbCwgb3B0aW9ucykge1xuICB2YXIgb3B0ID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIGVuYyA9IG9wdC5lbmNvZGUgfHwgZW5jb2RlO1xuXG4gIGlmICh0eXBlb2YgZW5jICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIGVuY29kZSBpcyBpbnZhbGlkJyk7XG4gIH1cblxuICBpZiAoIWZpZWxkQ29udGVudFJlZ0V4cC50ZXN0KG5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgbmFtZSBpcyBpbnZhbGlkJyk7XG4gIH1cblxuICB2YXIgdmFsdWUgPSBlbmModmFsKTtcblxuICBpZiAodmFsdWUgJiYgIWZpZWxkQ29udGVudFJlZ0V4cC50ZXN0KHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IHZhbCBpcyBpbnZhbGlkJyk7XG4gIH1cblxuICB2YXIgc3RyID0gbmFtZSArICc9JyArIHZhbHVlO1xuXG4gIGlmIChudWxsICE9IG9wdC5tYXhBZ2UpIHtcbiAgICB2YXIgbWF4QWdlID0gb3B0Lm1heEFnZSAtIDA7XG5cbiAgICBpZiAoaXNOYU4obWF4QWdlKSB8fCAhaXNGaW5pdGUobWF4QWdlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIG1heEFnZSBpcyBpbnZhbGlkJylcbiAgICB9XG5cbiAgICBzdHIgKz0gJzsgTWF4LUFnZT0nICsgTWF0aC5mbG9vcihtYXhBZ2UpO1xuICB9XG5cbiAgaWYgKG9wdC5kb21haW4pIHtcbiAgICBpZiAoIWZpZWxkQ29udGVudFJlZ0V4cC50ZXN0KG9wdC5kb21haW4pKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gZG9tYWluIGlzIGludmFsaWQnKTtcbiAgICB9XG5cbiAgICBzdHIgKz0gJzsgRG9tYWluPScgKyBvcHQuZG9tYWluO1xuICB9XG5cbiAgaWYgKG9wdC5wYXRoKSB7XG4gICAgaWYgKCFmaWVsZENvbnRlbnRSZWdFeHAudGVzdChvcHQucGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBwYXRoIGlzIGludmFsaWQnKTtcbiAgICB9XG5cbiAgICBzdHIgKz0gJzsgUGF0aD0nICsgb3B0LnBhdGg7XG4gIH1cblxuICBpZiAob3B0LmV4cGlyZXMpIHtcbiAgICBpZiAodHlwZW9mIG9wdC5leHBpcmVzLnRvVVRDU3RyaW5nICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gZXhwaXJlcyBpcyBpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgc3RyICs9ICc7IEV4cGlyZXM9JyArIG9wdC5leHBpcmVzLnRvVVRDU3RyaW5nKCk7XG4gIH1cblxuICBpZiAob3B0Lmh0dHBPbmx5KSB7XG4gICAgc3RyICs9ICc7IEh0dHBPbmx5JztcbiAgfVxuXG4gIGlmIChvcHQuc2VjdXJlKSB7XG4gICAgc3RyICs9ICc7IFNlY3VyZSc7XG4gIH1cblxuICBpZiAob3B0LnNhbWVTaXRlKSB7XG4gICAgdmFyIHNhbWVTaXRlID0gdHlwZW9mIG9wdC5zYW1lU2l0ZSA9PT0gJ3N0cmluZydcbiAgICAgID8gb3B0LnNhbWVTaXRlLnRvTG93ZXJDYXNlKCkgOiBvcHQuc2FtZVNpdGU7XG5cbiAgICBzd2l0Y2ggKHNhbWVTaXRlKSB7XG4gICAgICBjYXNlIHRydWU6XG4gICAgICAgIHN0ciArPSAnOyBTYW1lU2l0ZT1TdHJpY3QnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xheCc6XG4gICAgICAgIHN0ciArPSAnOyBTYW1lU2l0ZT1MYXgnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3N0cmljdCc6XG4gICAgICAgIHN0ciArPSAnOyBTYW1lU2l0ZT1TdHJpY3QnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ25vbmUnOlxuICAgICAgICBzdHIgKz0gJzsgU2FtZVNpdGU9Tm9uZSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIHNhbWVTaXRlIGlzIGludmFsaWQnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RyO1xufVxuXG4vKipcbiAqIFRyeSBkZWNvZGluZyBhIHN0cmluZyB1c2luZyBhIGRlY29kaW5nIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGRlY29kZVxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiB0cnlEZWNvZGUoc3RyLCBkZWNvZGUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlKHN0cik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG59XG4iLCAiLyogZXNsaW50LWRpc2FibGUgbWF4LWxpbmVzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBjYXB0dXJlRXhjZXB0aW9uLCBnZXRDdXJyZW50SHViLCBzdGFydFRyYW5zYWN0aW9uLCB3aXRoU2NvcGUgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgZXh0cmFjdFRyYWNlcGFyZW50RGF0YSwgU3BhbiB9IGZyb20gJ0BzZW50cnkvdHJhY2luZyc7XG5pbXBvcnQgeyBFdmVudCwgRXh0cmFjdGVkTm9kZVJlcXVlc3REYXRhLCBSZXF1ZXN0U2Vzc2lvblN0YXR1cywgVHJhbnNhY3Rpb24gfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGlzUGxhaW5PYmplY3QsIGlzU3RyaW5nLCBsb2dnZXIsIG5vcm1hbGl6ZSwgc3RyaXBVcmxRdWVyeUFuZEZyYWdtZW50IH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5pbXBvcnQgKiBhcyBjb29raWUgZnJvbSAnY29va2llJztcbmltcG9ydCAqIGFzIGRvbWFpbiBmcm9tICdkb21haW4nO1xuaW1wb3J0ICogYXMgaHR0cCBmcm9tICdodHRwJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHVybCBmcm9tICd1cmwnO1xuXG5pbXBvcnQgeyBOb2RlQ2xpZW50IH0gZnJvbSAnLi9jbGllbnQnO1xuaW1wb3J0IHsgZmx1c2gsIGlzQXV0b1Nlc3Npb25UcmFja2luZ0VuYWJsZWQgfSBmcm9tICcuL3Nkayc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwcmVzc1JlcXVlc3Qge1xuICBiYXNlVXJsPzogc3RyaW5nO1xuICBjb25uZWN0aW9uPzoge1xuICAgIHJlbW90ZUFkZHJlc3M/OiBzdHJpbmc7XG4gIH07XG4gIGlwPzogc3RyaW5nO1xuICBtZXRob2Q/OiBzdHJpbmc7XG4gIG9yaWdpbmFsVXJsPzogc3RyaW5nO1xuICByb3V0ZT86IHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgc3RhY2s6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgfSxcbiAgICBdO1xuICB9O1xuICBxdWVyeT86IHtcbiAgICAvLyBJdCBjYW4gYmU6IHVuZGVmaW5lZCB8IHN0cmluZyB8IHN0cmluZ1tdIHwgUGFyc2VkUXMgfCBQYXJzZWRRc1tdIChmcm9tIGBxc2AgcGFja2FnZSksIGJ1dCB3ZSBkb250IHdhbnQgdG8gcHVsbCBpdC5cbiAgICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICB9O1xuICB1cmw/OiBzdHJpbmc7XG4gIHVzZXI/OiB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9O1xufVxuXG4vKipcbiAqIEV4cHJlc3MtY29tcGF0aWJsZSB0cmFjaW5nIGhhbmRsZXIuXG4gKiBAc2VlIEV4cG9zZWQgYXMgYEhhbmRsZXJzLnRyYWNpbmdIYW5kbGVyYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhY2luZ0hhbmRsZXIoKTogKFxuICByZXE6IGh0dHAuSW5jb21pbmdNZXNzYWdlLFxuICByZXM6IGh0dHAuU2VydmVyUmVzcG9uc2UsXG4gIG5leHQ6IChlcnJvcj86IGFueSkgPT4gdm9pZCxcbikgPT4gdm9pZCB7XG4gIHJldHVybiBmdW5jdGlvbiBzZW50cnlUcmFjaW5nTWlkZGxld2FyZShcbiAgICByZXE6IGh0dHAuSW5jb21pbmdNZXNzYWdlLFxuICAgIHJlczogaHR0cC5TZXJ2ZXJSZXNwb25zZSxcbiAgICBuZXh0OiAoZXJyb3I/OiBhbnkpID0+IHZvaWQsXG4gICk6IHZvaWQge1xuICAgIC8vIElmIHRoZXJlIGlzIGEgdHJhY2UgaGVhZGVyIHNldCwgd2UgZXh0cmFjdCB0aGUgZGF0YSBmcm9tIGl0IChwYXJlbnRTcGFuSWQsIHRyYWNlSWQsIGFuZCBzYW1wbGluZyBkZWNpc2lvbilcbiAgICBsZXQgdHJhY2VwYXJlbnREYXRhO1xuICAgIGlmIChyZXEuaGVhZGVycyAmJiBpc1N0cmluZyhyZXEuaGVhZGVyc1snc2VudHJ5LXRyYWNlJ10pKSB7XG4gICAgICB0cmFjZXBhcmVudERhdGEgPSBleHRyYWN0VHJhY2VwYXJlbnREYXRhKHJlcS5oZWFkZXJzWydzZW50cnktdHJhY2UnXSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gc3RhcnRUcmFuc2FjdGlvbihcbiAgICAgIHtcbiAgICAgICAgbmFtZTogZXh0cmFjdEV4cHJlc3NUcmFuc2FjdGlvbk5hbWUocmVxLCB7IHBhdGg6IHRydWUsIG1ldGhvZDogdHJ1ZSB9KSxcbiAgICAgICAgb3A6ICdodHRwLnNlcnZlcicsXG4gICAgICAgIC4uLnRyYWNlcGFyZW50RGF0YSxcbiAgICAgIH0sXG4gICAgICAvLyBleHRyYSBjb250ZXh0IHBhc3NlZCB0byB0aGUgdHJhY2VzU2FtcGxlclxuICAgICAgeyByZXF1ZXN0OiBleHRyYWN0UmVxdWVzdERhdGEocmVxKSB9LFxuICAgICk7XG5cbiAgICAvLyBXZSBwdXQgdGhlIHRyYW5zYWN0aW9uIG9uIHRoZSBzY29wZSBzbyB1c2VycyBjYW4gYXR0YWNoIGNoaWxkcmVuIHRvIGl0XG4gICAgZ2V0Q3VycmVudEh1YigpLmNvbmZpZ3VyZVNjb3BlKHNjb3BlID0+IHtcbiAgICAgIHNjb3BlLnNldFNwYW4odHJhbnNhY3Rpb24pO1xuICAgIH0pO1xuXG4gICAgLy8gV2UgYWxzbyBzZXQgX19zZW50cnlfdHJhbnNhY3Rpb24gb24gdGhlIHJlc3BvbnNlIHNvIHBlb3BsZSBjYW4gZ3JhYiB0aGUgdHJhbnNhY3Rpb24gdGhlcmUgdG8gYWRkXG4gICAgLy8gc3BhbnMgdG8gaXQgbGF0ZXIuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgIChyZXMgYXMgYW55KS5fX3NlbnRyeV90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uO1xuXG4gICAgcmVzLm9uY2UoJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgIC8vIFB1c2ggYHRyYW5zYWN0aW9uLmZpbmlzaGAgdG8gdGhlIG5leHQgZXZlbnQgbG9vcCBzbyBvcGVuIHNwYW5zIGhhdmUgYSBjaGFuY2UgdG8gZmluaXNoIGJlZm9yZSB0aGUgdHJhbnNhY3Rpb25cbiAgICAgIC8vIGNsb3Nlc1xuICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgYWRkRXhwcmVzc1JlcVRvVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIHJlcSk7XG4gICAgICAgIHRyYW5zYWN0aW9uLnNldEh0dHBTdGF0dXMocmVzLnN0YXR1c0NvZGUpO1xuICAgICAgICB0cmFuc2FjdGlvbi5maW5pc2goKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgbmV4dCgpO1xuICB9O1xufVxuXG4vKipcbiAqIFNldCBwYXJhbWV0ZXJpemVkIGFzIHRyYW5zYWN0aW9uIG5hbWUgZS5nLjogYEdFVCAvdXNlcnMvOmlkYFxuICogQWxzbyBhZGRzIG1vcmUgY29udGV4dCBkYXRhIG9uIHRoZSB0cmFuc2FjdGlvbiBmcm9tIHRoZSByZXF1ZXN0XG4gKi9cbmZ1bmN0aW9uIGFkZEV4cHJlc3NSZXFUb1RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbiB8IHVuZGVmaW5lZCwgcmVxOiBFeHByZXNzUmVxdWVzdCk6IHZvaWQge1xuICBpZiAoIXRyYW5zYWN0aW9uKSByZXR1cm47XG4gIHRyYW5zYWN0aW9uLm5hbWUgPSBleHRyYWN0RXhwcmVzc1RyYW5zYWN0aW9uTmFtZShyZXEsIHsgcGF0aDogdHJ1ZSwgbWV0aG9kOiB0cnVlIH0pO1xuICB0cmFuc2FjdGlvbi5zZXREYXRhKCd1cmwnLCByZXEub3JpZ2luYWxVcmwpO1xuICB0cmFuc2FjdGlvbi5zZXREYXRhKCdiYXNlVXJsJywgcmVxLmJhc2VVcmwpO1xuICB0cmFuc2FjdGlvbi5zZXREYXRhKCdxdWVyeScsIHJlcS5xdWVyeSk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgY29tcGxldGUgZ2VuZXJhbGl6ZWQgcGF0aCBmcm9tIHRoZSByZXF1ZXN0IG9iamVjdCBhbmQgdXNlcyBpdCB0byBjb25zdHJ1Y3QgdHJhbnNhY3Rpb24gbmFtZS5cbiAqXG4gKiBlZy4gR0VUIC9tb3VudHBvaW50L3VzZXIvOmlkXG4gKlxuICogQHBhcmFtIHJlcSBUaGUgRXhwcmVzc1JlcXVlc3Qgb2JqZWN0XG4gKiBAcGFyYW0gb3B0aW9ucyBXaGF0IHRvIGluY2x1ZGUgaW4gdGhlIHRyYW5zYWN0aW9uIG5hbWUgKG1ldGhvZCwgcGF0aCwgb3IgYm90aClcbiAqXG4gKiBAcmV0dXJucyBUaGUgZnVsbHkgY29uc3RydWN0ZWQgdHJhbnNhY3Rpb24gbmFtZVxuICovXG5mdW5jdGlvbiBleHRyYWN0RXhwcmVzc1RyYW5zYWN0aW9uTmFtZShcbiAgcmVxOiBFeHByZXNzUmVxdWVzdCxcbiAgb3B0aW9uczogeyBwYXRoPzogYm9vbGVhbjsgbWV0aG9kPzogYm9vbGVhbiB9ID0ge30sXG4pOiBzdHJpbmcge1xuICBjb25zdCBtZXRob2QgPSByZXEubWV0aG9kPy50b1VwcGVyQ2FzZSgpO1xuXG4gIGxldCBwYXRoID0gJyc7XG4gIGlmIChyZXEucm91dGUpIHtcbiAgICBwYXRoID0gYCR7cmVxLmJhc2VVcmwgfHwgJyd9JHtyZXEucm91dGUucGF0aH1gO1xuICB9IGVsc2UgaWYgKHJlcS5vcmlnaW5hbFVybCB8fCByZXEudXJsKSB7XG4gICAgcGF0aCA9IHN0cmlwVXJsUXVlcnlBbmRGcmFnbWVudChyZXEub3JpZ2luYWxVcmwgfHwgcmVxLnVybCB8fCAnJyk7XG4gIH1cblxuICBsZXQgaW5mbyA9ICcnO1xuICBpZiAob3B0aW9ucy5tZXRob2QgJiYgbWV0aG9kKSB7XG4gICAgaW5mbyArPSBtZXRob2Q7XG4gIH1cbiAgaWYgKG9wdGlvbnMubWV0aG9kICYmIG9wdGlvbnMucGF0aCkge1xuICAgIGluZm8gKz0gYCBgO1xuICB9XG4gIGlmIChvcHRpb25zLnBhdGggJiYgcGF0aCkge1xuICAgIGluZm8gKz0gcGF0aDtcbiAgfVxuXG4gIHJldHVybiBpbmZvO1xufVxuXG50eXBlIFRyYW5zYWN0aW9uTmFtaW5nU2NoZW1lID0gJ3BhdGgnIHwgJ21ldGhvZFBhdGgnIHwgJ2hhbmRsZXInO1xuXG4vKiogSlNEb2MgKi9cbmZ1bmN0aW9uIGV4dHJhY3RUcmFuc2FjdGlvbihyZXE6IEV4cHJlc3NSZXF1ZXN0LCB0eXBlOiBib29sZWFuIHwgVHJhbnNhY3Rpb25OYW1pbmdTY2hlbWUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdwYXRoJzoge1xuICAgICAgcmV0dXJuIGV4dHJhY3RFeHByZXNzVHJhbnNhY3Rpb25OYW1lKHJlcSwgeyBwYXRoOiB0cnVlIH0pO1xuICAgIH1cbiAgICBjYXNlICdoYW5kbGVyJzoge1xuICAgICAgcmV0dXJuIHJlcS5yb3V0ZT8uc3RhY2tbMF0ubmFtZSB8fCAnPGFub255bW91cz4nO1xuICAgIH1cbiAgICBjYXNlICdtZXRob2RQYXRoJzpcbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gZXh0cmFjdEV4cHJlc3NUcmFuc2FjdGlvbk5hbWUocmVxLCB7IHBhdGg6IHRydWUsIG1ldGhvZDogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqIERlZmF1bHQgdXNlciBrZXlzIHRoYXQnbGwgYmUgdXNlZCB0byBleHRyYWN0IGRhdGEgZnJvbSB0aGUgcmVxdWVzdCAqL1xuY29uc3QgREVGQVVMVF9VU0VSX0tFWVMgPSBbJ2lkJywgJ3VzZXJuYW1lJywgJ2VtYWlsJ107XG5cbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gZXh0cmFjdFVzZXJEYXRhKFxuICB1c2VyOiB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9LFxuICBrZXlzOiBib29sZWFuIHwgc3RyaW5nW10sXG4pOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgY29uc3QgZXh0cmFjdGVkVXNlcjogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBjb25zdCBhdHRyaWJ1dGVzID0gQXJyYXkuaXNBcnJheShrZXlzKSA/IGtleXMgOiBERUZBVUxUX1VTRVJfS0VZUztcblxuICBhdHRyaWJ1dGVzLmZvckVhY2goa2V5ID0+IHtcbiAgICBpZiAodXNlciAmJiBrZXkgaW4gdXNlcikge1xuICAgICAgZXh0cmFjdGVkVXNlcltrZXldID0gdXNlcltrZXldO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGV4dHJhY3RlZFVzZXI7XG59XG5cbi8qKiBEZWZhdWx0IHJlcXVlc3Qga2V5cyB0aGF0J2xsIGJlIHVzZWQgdG8gZXh0cmFjdCBkYXRhIGZyb20gdGhlIHJlcXVlc3QgKi9cbmNvbnN0IERFRkFVTFRfUkVRVUVTVF9LRVlTID0gWydjb29raWVzJywgJ2RhdGEnLCAnaGVhZGVycycsICdtZXRob2QnLCAncXVlcnlfc3RyaW5nJywgJ3VybCddO1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgZGF0YSBmcm9tIHRoZSByZXF1ZXN0IG9iamVjdCwgYWNjb3VudGluZyBmb3IgZnJhbWV3b3JrIGRpZmZlcmVuY2VzLlxuICpcbiAqIEBwYXJhbSByZXEgVGhlIHJlcXVlc3Qgb2JqZWN0IGZyb20gd2hpY2ggdG8gZXh0cmFjdCBkYXRhXG4gKiBAcGFyYW0ga2V5cyBBbiBvcHRpb25hbCBhcnJheSBvZiBrZXlzIHRvIGluY2x1ZGUgaW4gdGhlIG5vcm1hbGl6ZWQgZGF0YS4gRGVmYXVsdHMgdG8gREVGQVVMVF9SRVFVRVNUX0tFWVMgaWYgbm90XG4gKiBwcm92aWRlZC5cbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIG5vcm1hbGl6ZWQgcmVxdWVzdCBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0UmVxdWVzdERhdGEoXG4gIHJlcTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSxcbiAga2V5czogc3RyaW5nW10gPSBERUZBVUxUX1JFUVVFU1RfS0VZUyxcbik6IEV4dHJhY3RlZE5vZGVSZXF1ZXN0RGF0YSB7XG4gIGNvbnN0IHJlcXVlc3REYXRhOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG5cbiAgLy8gaGVhZGVyczpcbiAgLy8gICBub2RlLCBleHByZXNzLCBuZXh0anM6IHJlcS5oZWFkZXJzXG4gIC8vICAga29hOiByZXEuaGVhZGVyXG4gIGNvbnN0IGhlYWRlcnMgPSAocmVxLmhlYWRlcnMgfHwgcmVxLmhlYWRlciB8fCB7fSkgYXMge1xuICAgIGhvc3Q/OiBzdHJpbmc7XG4gICAgY29va2llPzogc3RyaW5nO1xuICB9O1xuICAvLyBtZXRob2Q6XG4gIC8vICAgbm9kZSwgZXhwcmVzcywga29hLCBuZXh0anM6IHJlcS5tZXRob2RcbiAgY29uc3QgbWV0aG9kID0gcmVxLm1ldGhvZDtcbiAgLy8gaG9zdDpcbiAgLy8gICBleHByZXNzOiByZXEuaG9zdG5hbWUgaW4gPiA0IGFuZCByZXEuaG9zdCBpbiA8IDRcbiAgLy8gICBrb2E6IHJlcS5ob3N0XG4gIC8vICAgbm9kZSwgbmV4dGpzOiByZXEuaGVhZGVycy5ob3N0XG4gIGNvbnN0IGhvc3QgPSByZXEuaG9zdG5hbWUgfHwgcmVxLmhvc3QgfHwgaGVhZGVycy5ob3N0IHx8ICc8bm8gaG9zdD4nO1xuICAvLyBwcm90b2NvbDpcbiAgLy8gICBub2RlLCBuZXh0anM6IDxuL2E+XG4gIC8vICAgZXhwcmVzcywga29hOiByZXEucHJvdG9jb2xcbiAgY29uc3QgcHJvdG9jb2wgPVxuICAgIHJlcS5wcm90b2NvbCA9PT0gJ2h0dHBzJyB8fCByZXEuc2VjdXJlIHx8ICgocmVxLnNvY2tldCB8fCB7fSkgYXMgeyBlbmNyeXB0ZWQ/OiBib29sZWFuIH0pLmVuY3J5cHRlZFxuICAgICAgPyAnaHR0cHMnXG4gICAgICA6ICdodHRwJztcbiAgLy8gdXJsIChpbmNsdWRpbmcgcGF0aCBhbmQgcXVlcnkgc3RyaW5nKTpcbiAgLy8gICBub2RlLCBleHByZXNzOiByZXEub3JpZ2luYWxVcmxcbiAgLy8gICBrb2EsIG5leHRqczogcmVxLnVybFxuICBjb25zdCBvcmlnaW5hbFVybCA9IChyZXEub3JpZ2luYWxVcmwgfHwgcmVxLnVybCB8fCAnJykgYXMgc3RyaW5nO1xuICAvLyBhYnNvbHV0ZSB1cmxcbiAgY29uc3QgYWJzb2x1dGVVcmwgPSBgJHtwcm90b2NvbH06Ly8ke2hvc3R9JHtvcmlnaW5hbFVybH1gO1xuXG4gIGtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICBjYXNlICdoZWFkZXJzJzpcbiAgICAgICAgcmVxdWVzdERhdGEuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbWV0aG9kJzpcbiAgICAgICAgcmVxdWVzdERhdGEubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VybCc6XG4gICAgICAgIHJlcXVlc3REYXRhLnVybCA9IGFic29sdXRlVXJsO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Nvb2tpZXMnOlxuICAgICAgICAvLyBjb29raWVzOlxuICAgICAgICAvLyAgIG5vZGUsIGV4cHJlc3MsIGtvYTogcmVxLmhlYWRlcnMuY29va2llXG4gICAgICAgIC8vICAgdmVyY2VsLCBzYWlscy5qcywgZXhwcmVzcyAody8gY29va2llIG1pZGRsZXdhcmUpLCBuZXh0anM6IHJlcS5jb29raWVzXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgcmVxdWVzdERhdGEuY29va2llcyA9IHJlcS5jb29raWVzIHx8IGNvb2tpZS5wYXJzZShoZWFkZXJzLmNvb2tpZSB8fCAnJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncXVlcnlfc3RyaW5nJzpcbiAgICAgICAgLy8gcXVlcnkgc3RyaW5nOlxuICAgICAgICAvLyAgIG5vZGU6IHJlcS51cmwgKHJhdylcbiAgICAgICAgLy8gICBleHByZXNzLCBrb2EsIG5leHRqczogcmVxLnF1ZXJ5XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgcmVxdWVzdERhdGEucXVlcnlfc3RyaW5nID0gcmVxLnF1ZXJ5IHx8IHVybC5wYXJzZShvcmlnaW5hbFVybCB8fCAnJywgZmFsc2UpLnF1ZXJ5O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RhdGEnOlxuICAgICAgICBpZiAobWV0aG9kID09PSAnR0VUJyB8fCBtZXRob2QgPT09ICdIRUFEJykge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vIGJvZHkgZGF0YTpcbiAgICAgICAgLy8gICBleHByZXNzLCBrb2EsIG5leHRqczogcmVxLmJvZHlcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICB3aGVuIHVzaW5nIG5vZGUgYnkgaXRzZWxmLCB5b3UgaGF2ZSB0byByZWFkIHRoZSBpbmNvbWluZyBzdHJlYW0oc2VlXG4gICAgICAgIC8vICAgaHR0cHM6Ly9ub2RlanMuZGV2L2xlYXJuL2dldC1odHRwLXJlcXVlc3QtYm9keS1kYXRhLXVzaW5nLW5vZGVqcyk7IGlmIGEgdXNlciBpcyBkb2luZyB0aGF0LCB3ZSBjYW4ndCBrbm93XG4gICAgICAgIC8vICAgd2hlcmUgdGhleSdyZSBnb2luZyB0byBzdG9yZSB0aGUgZmluYWwgcmVzdWx0LCBzbyB0aGV5J2xsIGhhdmUgdG8gY2FwdHVyZSB0aGlzIGRhdGEgdGhlbXNlbHZlc1xuICAgICAgICBpZiAocmVxLmJvZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJlcXVlc3REYXRhLmRhdGEgPSBpc1N0cmluZyhyZXEuYm9keSkgPyByZXEuYm9keSA6IEpTT04uc3RyaW5naWZ5KG5vcm1hbGl6ZShyZXEuYm9keSkpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwocmVxLCBrZXkpKSB7XG4gICAgICAgICAgcmVxdWVzdERhdGFba2V5XSA9IChyZXEgYXMgeyBba2V5OiBzdHJpbmddOiBhbnkgfSlba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJlcXVlc3REYXRhO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZGVjaWRpbmcgd2hhdCBwYXJ0cyBvZiB0aGUgcmVxdWVzdCB0byB1c2Ugd2hlbiBlbmhhbmNpbmcgYW4gZXZlbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZVJlcXVlc3RPcHRpb25zIHtcbiAgaXA/OiBib29sZWFuO1xuICByZXF1ZXN0PzogYm9vbGVhbiB8IHN0cmluZ1tdO1xuICBzZXJ2ZXJOYW1lPzogYm9vbGVhbjtcbiAgdHJhbnNhY3Rpb24/OiBib29sZWFuIHwgVHJhbnNhY3Rpb25OYW1pbmdTY2hlbWU7XG4gIHVzZXI/OiBib29sZWFuIHwgc3RyaW5nW107XG4gIHZlcnNpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEVucmljaGVzIHBhc3NlZCBldmVudCB3aXRoIHJlcXVlc3QgZGF0YS5cbiAqXG4gKiBAcGFyYW0gZXZlbnQgV2lsbCBiZSBtdXRhdGVkIGFuZCBlbnJpY2hlZCB3aXRoIHJlcSBkYXRhXG4gKiBAcGFyYW0gcmVxIFJlcXVlc3Qgb2JqZWN0XG4gKiBAcGFyYW0gb3B0aW9ucyBvYmplY3QgY29udGFpbmluZyBmbGFncyB0byBlbmFibGUgZnVuY3Rpb25hbGl0eVxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZXF1ZXN0KGV2ZW50OiBFdmVudCwgcmVxOiBFeHByZXNzUmVxdWVzdCwgb3B0aW9ucz86IFBhcnNlUmVxdWVzdE9wdGlvbnMpOiBFdmVudCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0ge1xuICAgIGlwOiBmYWxzZSxcbiAgICByZXF1ZXN0OiB0cnVlLFxuICAgIHNlcnZlck5hbWU6IHRydWUsXG4gICAgdHJhbnNhY3Rpb246IHRydWUsXG4gICAgdXNlcjogdHJ1ZSxcbiAgICB2ZXJzaW9uOiB0cnVlLFxuICAgIC4uLm9wdGlvbnMsXG4gIH07XG5cbiAgaWYgKG9wdGlvbnMudmVyc2lvbikge1xuICAgIGV2ZW50LmNvbnRleHRzID0ge1xuICAgICAgLi4uZXZlbnQuY29udGV4dHMsXG4gICAgICBydW50aW1lOiB7XG4gICAgICAgIG5hbWU6ICdub2RlJyxcbiAgICAgICAgdmVyc2lvbjogZ2xvYmFsLnByb2Nlc3MudmVyc2lvbixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnJlcXVlc3QpIHtcbiAgICAvLyBpZiB0aGUgb3B0aW9uIHZhbHVlIGlzIGB0cnVlYCwgdXNlIHRoZSBkZWZhdWx0IHNldCBvZiBrZXlzIGJ5IG5vdCBwYXNzaW5nIGFueXRoaW5nIHRvIGBleHRyYWN0UmVxdWVzdERhdGEoKWBcbiAgICBjb25zdCBleHRyYWN0ZWRSZXF1ZXN0RGF0YSA9IEFycmF5LmlzQXJyYXkob3B0aW9ucy5yZXF1ZXN0KVxuICAgICAgPyBleHRyYWN0UmVxdWVzdERhdGEocmVxLCBvcHRpb25zLnJlcXVlc3QpXG4gICAgICA6IGV4dHJhY3RSZXF1ZXN0RGF0YShyZXEpO1xuICAgIGV2ZW50LnJlcXVlc3QgPSB7XG4gICAgICAuLi5ldmVudC5yZXF1ZXN0LFxuICAgICAgLi4uZXh0cmFjdGVkUmVxdWVzdERhdGEsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnNlcnZlck5hbWUgJiYgIWV2ZW50LnNlcnZlcl9uYW1lKSB7XG4gICAgZXZlbnQuc2VydmVyX25hbWUgPSBnbG9iYWwucHJvY2Vzcy5lbnYuU0VOVFJZX05BTUUgfHwgb3MuaG9zdG5hbWUoKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnVzZXIpIHtcbiAgICBjb25zdCBleHRyYWN0ZWRVc2VyID0gcmVxLnVzZXIgJiYgaXNQbGFpbk9iamVjdChyZXEudXNlcikgPyBleHRyYWN0VXNlckRhdGEocmVxLnVzZXIsIG9wdGlvbnMudXNlcikgOiB7fTtcblxuICAgIGlmIChPYmplY3Qua2V5cyhleHRyYWN0ZWRVc2VyKSkge1xuICAgICAgZXZlbnQudXNlciA9IHtcbiAgICAgICAgLi4uZXZlbnQudXNlcixcbiAgICAgICAgLi4uZXh0cmFjdGVkVXNlcixcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8gY2xpZW50IGlwOlxuICAvLyAgIG5vZGUsIG5leHRqczogcmVxLmNvbm5lY3Rpb24ucmVtb3RlQWRkcmVzc1xuICAvLyAgIGV4cHJlc3MsIGtvYTogcmVxLmlwXG4gIGlmIChvcHRpb25zLmlwKSB7XG4gICAgY29uc3QgaXAgPSByZXEuaXAgfHwgKHJlcS5jb25uZWN0aW9uICYmIHJlcS5jb25uZWN0aW9uLnJlbW90ZUFkZHJlc3MpO1xuICAgIGlmIChpcCkge1xuICAgICAgZXZlbnQudXNlciA9IHtcbiAgICAgICAgLi4uZXZlbnQudXNlcixcbiAgICAgICAgaXBfYWRkcmVzczogaXAsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zLnRyYW5zYWN0aW9uICYmICFldmVudC50cmFuc2FjdGlvbikge1xuICAgIC8vIFRPRE8gZG8gd2UgZXZlbiBuZWVkIHRoaXMgYW55bW9yZT9cbiAgICAvLyBUT0RPIG1ha2UgdGhpcyB3b3JrIGZvciBuZXh0anNcbiAgICBldmVudC50cmFuc2FjdGlvbiA9IGV4dHJhY3RUcmFuc2FjdGlvbihyZXEsIG9wdGlvbnMudHJhbnNhY3Rpb24pO1xuICB9XG5cbiAgcmV0dXJuIGV2ZW50O1xufVxuXG5leHBvcnQgdHlwZSBSZXF1ZXN0SGFuZGxlck9wdGlvbnMgPSBQYXJzZVJlcXVlc3RPcHRpb25zICYge1xuICBmbHVzaFRpbWVvdXQ/OiBudW1iZXI7XG59O1xuXG4vKipcbiAqIEV4cHJlc3MgY29tcGF0aWJsZSByZXF1ZXN0IGhhbmRsZXIuXG4gKiBAc2VlIEV4cG9zZWQgYXMgYEhhbmRsZXJzLnJlcXVlc3RIYW5kbGVyYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdEhhbmRsZXIoXG4gIG9wdGlvbnM/OiBSZXF1ZXN0SGFuZGxlck9wdGlvbnMsXG4pOiAocmVxOiBodHRwLkluY29taW5nTWVzc2FnZSwgcmVzOiBodHRwLlNlcnZlclJlc3BvbnNlLCBuZXh0OiAoZXJyb3I/OiBhbnkpID0+IHZvaWQpID0+IHZvaWQge1xuICBjb25zdCBjdXJyZW50SHViID0gZ2V0Q3VycmVudEh1YigpO1xuICBjb25zdCBjbGllbnQgPSBjdXJyZW50SHViLmdldENsaWVudDxOb2RlQ2xpZW50PigpO1xuICAvLyBJbml0aWFsaXNlIGFuIGluc3RhbmNlIG9mIFNlc3Npb25GbHVzaGVyIG9uIHRoZSBjbGllbnQgd2hlbiBgYXV0b1Nlc3Npb25UcmFja2luZ2AgaXMgZW5hYmxlZCBhbmQgdGhlXG4gIC8vIGByZXF1ZXN0SGFuZGxlcmAgbWlkZGxld2FyZSBpcyB1c2VkIGluZGljYXRpbmcgdGhhdCB3ZSBhcmUgcnVubmluZyBpbiBTZXNzaW9uQWdncmVnYXRlcyBtb2RlXG4gIGlmIChjbGllbnQgJiYgaXNBdXRvU2Vzc2lvblRyYWNraW5nRW5hYmxlZChjbGllbnQpKSB7XG4gICAgY2xpZW50LmluaXRTZXNzaW9uRmx1c2hlcigpO1xuXG4gICAgLy8gSWYgU2NvcGUgY29udGFpbnMgYSBTaW5nbGUgbW9kZSBTZXNzaW9uLCBpdCBpcyByZW1vdmVkIGluIGZhdm9yIG9mIHVzaW5nIFNlc3Npb24gQWdncmVnYXRlcyBtb2RlXG4gICAgY29uc3Qgc2NvcGUgPSBjdXJyZW50SHViLmdldFNjb3BlKCk7XG4gICAgaWYgKHNjb3BlICYmIHNjb3BlLmdldFNlc3Npb24oKSkge1xuICAgICAgc2NvcGUuc2V0U2Vzc2lvbigpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gc2VudHJ5UmVxdWVzdE1pZGRsZXdhcmUoXG4gICAgcmVxOiBodHRwLkluY29taW5nTWVzc2FnZSxcbiAgICByZXM6IGh0dHAuU2VydmVyUmVzcG9uc2UsXG4gICAgbmV4dDogKGVycm9yPzogYW55KSA9PiB2b2lkLFxuICApOiB2b2lkIHtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmZsdXNoVGltZW91dCAmJiBvcHRpb25zLmZsdXNoVGltZW91dCA+IDApIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICAgIGNvbnN0IF9lbmQgPSByZXMuZW5kO1xuICAgICAgcmVzLmVuZCA9IGZ1bmN0aW9uKGNodW5rPzogYW55IHwgKCgpID0+IHZvaWQpLCBlbmNvZGluZz86IHN0cmluZyB8ICgoKSA9PiB2b2lkKSwgY2I/OiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHZvaWQgZmx1c2gob3B0aW9ucy5mbHVzaFRpbWVvdXQpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgX2VuZC5jYWxsKHRoaXMsIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnRoZW4obnVsbCwgZSA9PiB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoZSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBsb2NhbCA9IGRvbWFpbi5jcmVhdGUoKTtcbiAgICBsb2NhbC5hZGQocmVxKTtcbiAgICBsb2NhbC5hZGQocmVzKTtcbiAgICBsb2NhbC5vbignZXJyb3InLCBuZXh0KTtcblxuICAgIGxvY2FsLnJ1bigoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50SHViID0gZ2V0Q3VycmVudEh1YigpO1xuXG4gICAgICBjdXJyZW50SHViLmNvbmZpZ3VyZVNjb3BlKHNjb3BlID0+IHtcbiAgICAgICAgc2NvcGUuYWRkRXZlbnRQcm9jZXNzb3IoKGV2ZW50OiBFdmVudCkgPT4gcGFyc2VSZXF1ZXN0KGV2ZW50LCByZXEsIG9wdGlvbnMpKTtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gY3VycmVudEh1Yi5nZXRDbGllbnQ8Tm9kZUNsaWVudD4oKTtcbiAgICAgICAgaWYgKGlzQXV0b1Nlc3Npb25UcmFja2luZ0VuYWJsZWQoY2xpZW50KSkge1xuICAgICAgICAgIGNvbnN0IHNjb3BlID0gY3VycmVudEh1Yi5nZXRTY29wZSgpO1xuICAgICAgICAgIGlmIChzY29wZSkge1xuICAgICAgICAgICAgLy8gU2V0IGBzdGF0dXNgIG9mIGBSZXF1ZXN0U2Vzc2lvbmAgdG8gT2ssIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlcXVlc3RcbiAgICAgICAgICAgIHNjb3BlLnNldFJlcXVlc3RTZXNzaW9uKHsgc3RhdHVzOiBSZXF1ZXN0U2Vzc2lvblN0YXR1cy5PayB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXMub25jZSgnZmluaXNoJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjbGllbnQgPSBjdXJyZW50SHViLmdldENsaWVudDxOb2RlQ2xpZW50PigpO1xuICAgICAgICBpZiAoaXNBdXRvU2Vzc2lvblRyYWNraW5nRW5hYmxlZChjbGllbnQpKSB7XG4gICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgICAgIGlmIChjbGllbnQgJiYgKGNsaWVudCBhcyBhbnkpLl9jYXB0dXJlUmVxdWVzdFNlc3Npb24pIHtcbiAgICAgICAgICAgICAgLy8gQ2FsbGluZyBfY2FwdHVyZVJlcXVlc3RTZXNzaW9uIHRvIGNhcHR1cmUgcmVxdWVzdCBzZXNzaW9uIGF0IHRoZSBlbmQgb2YgdGhlIHJlcXVlc3QgYnkgaW5jcmVtZW50aW5nXG4gICAgICAgICAgICAgIC8vIHRoZSBjb3JyZWN0IFNlc3Npb25BZ2dyZWdhdGVzIGJ1Y2tldCBpLmUuIGNyYXNoZWQsIGVycm9yZWQgb3IgZXhpdGVkXG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgICAgICAgKGNsaWVudCBhcyBhbnkpLl9jYXB0dXJlUmVxdWVzdFNlc3Npb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBuZXh0KCk7XG4gICAgfSk7XG4gIH07XG59XG5cbi8qKiBKU0RvYyAqL1xuaW50ZXJmYWNlIE1pZGRsZXdhcmVFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgc3RhdHVzPzogbnVtYmVyIHwgc3RyaW5nO1xuICBzdGF0dXNDb2RlPzogbnVtYmVyIHwgc3RyaW5nO1xuICBzdGF0dXNfY29kZT86IG51bWJlciB8IHN0cmluZztcbiAgb3V0cHV0Pzoge1xuICAgIHN0YXR1c0NvZGU/OiBudW1iZXIgfCBzdHJpbmc7XG4gIH07XG59XG5cbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gZ2V0U3RhdHVzQ29kZUZyb21SZXNwb25zZShlcnJvcjogTWlkZGxld2FyZUVycm9yKTogbnVtYmVyIHtcbiAgY29uc3Qgc3RhdHVzQ29kZSA9IGVycm9yLnN0YXR1cyB8fCBlcnJvci5zdGF0dXNDb2RlIHx8IGVycm9yLnN0YXR1c19jb2RlIHx8IChlcnJvci5vdXRwdXQgJiYgZXJyb3Iub3V0cHV0LnN0YXR1c0NvZGUpO1xuICByZXR1cm4gc3RhdHVzQ29kZSA/IHBhcnNlSW50KHN0YXR1c0NvZGUgYXMgc3RyaW5nLCAxMCkgOiA1MDA7XG59XG5cbi8qKiBSZXR1cm5zIHRydWUgaWYgcmVzcG9uc2UgY29kZSBpcyBpbnRlcm5hbCBzZXJ2ZXIgZXJyb3IgKi9cbmZ1bmN0aW9uIGRlZmF1bHRTaG91bGRIYW5kbGVFcnJvcihlcnJvcjogTWlkZGxld2FyZUVycm9yKTogYm9vbGVhbiB7XG4gIGNvbnN0IHN0YXR1cyA9IGdldFN0YXR1c0NvZGVGcm9tUmVzcG9uc2UoZXJyb3IpO1xuICByZXR1cm4gc3RhdHVzID49IDUwMDtcbn1cblxuLyoqXG4gKiBFeHByZXNzIGNvbXBhdGlibGUgZXJyb3IgaGFuZGxlci5cbiAqIEBzZWUgRXhwb3NlZCBhcyBgSGFuZGxlcnMuZXJyb3JIYW5kbGVyYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JIYW5kbGVyKG9wdGlvbnM/OiB7XG4gIC8qKlxuICAgKiBDYWxsYmFjayBtZXRob2QgZGVjaWRpbmcgd2hldGhlciBlcnJvciBzaG91bGQgYmUgY2FwdHVyZWQgYW5kIHNlbnQgdG8gU2VudHJ5XG4gICAqIEBwYXJhbSBlcnJvciBDYXB0dXJlZCBtaWRkbGV3YXJlIGVycm9yXG4gICAqL1xuICBzaG91bGRIYW5kbGVFcnJvcj8oZXJyb3I6IE1pZGRsZXdhcmVFcnJvcik6IGJvb2xlYW47XG59KTogKFxuICBlcnJvcjogTWlkZGxld2FyZUVycm9yLFxuICByZXE6IGh0dHAuSW5jb21pbmdNZXNzYWdlLFxuICByZXM6IGh0dHAuU2VydmVyUmVzcG9uc2UsXG4gIG5leHQ6IChlcnJvcjogTWlkZGxld2FyZUVycm9yKSA9PiB2b2lkLFxuKSA9PiB2b2lkIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNlbnRyeUVycm9yTWlkZGxld2FyZShcbiAgICBlcnJvcjogTWlkZGxld2FyZUVycm9yLFxuICAgIF9yZXE6IGh0dHAuSW5jb21pbmdNZXNzYWdlLFxuICAgIHJlczogaHR0cC5TZXJ2ZXJSZXNwb25zZSxcbiAgICBuZXh0OiAoZXJyb3I6IE1pZGRsZXdhcmVFcnJvcikgPT4gdm9pZCxcbiAgKTogdm9pZCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICAgIGNvbnN0IHNob3VsZEhhbmRsZUVycm9yID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5zaG91bGRIYW5kbGVFcnJvcikgfHwgZGVmYXVsdFNob3VsZEhhbmRsZUVycm9yO1xuXG4gICAgaWYgKHNob3VsZEhhbmRsZUVycm9yKGVycm9yKSkge1xuICAgICAgd2l0aFNjb3BlKF9zY29wZSA9PiB7XG4gICAgICAgIC8vIEZvciBzb21lIHJlYXNvbiB3ZSBuZWVkIHRvIHNldCB0aGUgdHJhbnNhY3Rpb24gb24gdGhlIHNjb3BlIGFnYWluXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSAocmVzIGFzIGFueSkuX19zZW50cnlfdHJhbnNhY3Rpb24gYXMgU3BhbjtcbiAgICAgICAgaWYgKHRyYW5zYWN0aW9uICYmIF9zY29wZS5nZXRTcGFuKCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIF9zY29wZS5zZXRTcGFuKHRyYW5zYWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGdldEN1cnJlbnRIdWIoKS5nZXRDbGllbnQ8Tm9kZUNsaWVudD4oKTtcbiAgICAgICAgaWYgKGNsaWVudCAmJiBpc0F1dG9TZXNzaW9uVHJhY2tpbmdFbmFibGVkKGNsaWVudCkpIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgYFNlc3Npb25GbHVzaGVyYCBpcyBpbnN0YW50aWF0ZWQgb24gdGhlIGNsaWVudCB0byBnbyBpbnRvIHRoaXMgYnJhbmNoIHRoYXQgbWFya3MgdGhlXG4gICAgICAgICAgLy8gYHJlcXVlc3RTZXNzaW9uLnN0YXR1c2AgYXMgYENyYXNoZWRgLCBhbmQgdGhpcyBjaGVjayBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgYFNlc3Npb25GbHVzaGVyYCBpcyBvbmx5XG4gICAgICAgICAgLy8gaW5zdGFudGlhdGVkIHdoZW4gdGhlIHRoZWByZXF1ZXN0SGFuZGxlcmAgbWlkZGxld2FyZSBpcyBpbml0aWFsaXNlZCwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgd2Ugc2hvdWxkIGJlXG4gICAgICAgICAgLy8gcnVubmluZyBpbiBTZXNzaW9uQWdncmVnYXRlcyBtb2RlXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICAgIGNvbnN0IGlzU2Vzc2lvbkFnZ3JlZ2F0ZXNNb2RlID0gKGNsaWVudCBhcyBhbnkpLl9zZXNzaW9uRmx1c2hlciAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChpc1Nlc3Npb25BZ2dyZWdhdGVzTW9kZSkge1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdFNlc3Npb24gPSBfc2NvcGUuZ2V0UmVxdWVzdFNlc3Npb24oKTtcbiAgICAgICAgICAgIC8vIElmIGFuIGVycm9yIGJ1YmJsZXMgdG8gdGhlIGBlcnJvckhhbmRsZXJgLCB0aGVuIHRoaXMgaXMgYW4gdW5oYW5kbGVkIGVycm9yLCBhbmQgc2hvdWxkIGJlIHJlcG9ydGVkIGFzIGFcbiAgICAgICAgICAgIC8vIENyYXNoZWQgc2Vzc2lvbi4gVGhlIGBfcmVxdWVzdFNlc3Npb24uc3RhdHVzYCBpcyBjaGVja2VkIHRvIGVuc3VyZSB0aGF0IHRoaXMgZXJyb3IgaXMgaGFwcGVuaW5nIHdpdGhpblxuICAgICAgICAgICAgLy8gdGhlIGJvdW5kcyBvZiBhIHJlcXVlc3QsIGFuZCBpZiBzbyB0aGUgc3RhdHVzIGlzIHVwZGF0ZWRcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0U2Vzc2lvbiAmJiByZXF1ZXN0U2Vzc2lvbi5zdGF0dXMgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgcmVxdWVzdFNlc3Npb24uc3RhdHVzID0gUmVxdWVzdFNlc3Npb25TdGF0dXMuQ3Jhc2hlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBldmVudElkID0gY2FwdHVyZUV4Y2VwdGlvbihlcnJvcik7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgKHJlcyBhcyBhbnkpLnNlbnRyeSA9IGV2ZW50SWQ7XG4gICAgICAgIG5leHQoZXJyb3IpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBuZXh0KGVycm9yKTtcbiAgfTtcbn1cbiIsICJleHBvcnQge1xuICBCcmVhZGNydW1iLFxuICBCcmVhZGNydW1iSGludCxcbiAgUmVxdWVzdCxcbiAgU2RrSW5mbyxcbiAgRXZlbnQsXG4gIEV2ZW50SGludCxcbiAgRXhjZXB0aW9uLFxuICBSZXNwb25zZSxcbiAgU2V2ZXJpdHksXG4gIFN0YWNrRnJhbWUsXG4gIFN0YWNrdHJhY2UsXG4gIFN0YXR1cyxcbiAgVGhyZWFkLFxuICBVc2VyLFxufSBmcm9tICdAc2VudHJ5L3R5cGVzJztcblxuZXhwb3J0IHtcbiAgYWRkR2xvYmFsRXZlbnRQcm9jZXNzb3IsXG4gIGFkZEJyZWFkY3J1bWIsXG4gIGNhcHR1cmVFeGNlcHRpb24sXG4gIGNhcHR1cmVFdmVudCxcbiAgY2FwdHVyZU1lc3NhZ2UsXG4gIGNvbmZpZ3VyZVNjb3BlLFxuICBnZXRIdWJGcm9tQ2FycmllcixcbiAgZ2V0Q3VycmVudEh1YixcbiAgSHViLFxuICBtYWtlTWFpbixcbiAgU2NvcGUsXG4gIHN0YXJ0VHJhbnNhY3Rpb24sXG4gIFNES19WRVJTSU9OLFxuICBzZXRDb250ZXh0LFxuICBzZXRFeHRyYSxcbiAgc2V0RXh0cmFzLFxuICBzZXRUYWcsXG4gIHNldFRhZ3MsXG4gIHNldFVzZXIsXG4gIHdpdGhTY29wZSxcbn0gZnJvbSAnQHNlbnRyeS9jb3JlJztcblxuZXhwb3J0IHsgTm9kZU9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCB7IE5vZGVCYWNrZW5kIH0gZnJvbSAnLi9iYWNrZW5kJztcbmV4cG9ydCB7IE5vZGVDbGllbnQgfSBmcm9tICcuL2NsaWVudCc7XG5leHBvcnQgeyBkZWZhdWx0SW50ZWdyYXRpb25zLCBpbml0LCBsYXN0RXZlbnRJZCwgZmx1c2gsIGNsb3NlLCBnZXRTZW50cnlSZWxlYXNlIH0gZnJvbSAnLi9zZGsnO1xuZXhwb3J0IHsgZGVlcFJlYWREaXJTeW5jIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgeyBTREtfTkFNRSB9IGZyb20gJy4vdmVyc2lvbic7XG5cbmltcG9ydCB7IEludGVncmF0aW9ucyBhcyBDb3JlSW50ZWdyYXRpb25zIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IGdldE1haW5DYXJyaWVyIH0gZnJvbSAnQHNlbnRyeS9odWInO1xuaW1wb3J0ICogYXMgZG9tYWluIGZyb20gJ2RvbWFpbic7XG5cbmltcG9ydCAqIGFzIEhhbmRsZXJzIGZyb20gJy4vaGFuZGxlcnMnO1xuaW1wb3J0ICogYXMgTm9kZUludGVncmF0aW9ucyBmcm9tICcuL2ludGVncmF0aW9ucyc7XG5pbXBvcnQgKiBhcyBUcmFuc3BvcnRzIGZyb20gJy4vdHJhbnNwb3J0cyc7XG5cbmNvbnN0IElOVEVHUkFUSU9OUyA9IHtcbiAgLi4uQ29yZUludGVncmF0aW9ucyxcbiAgLi4uTm9kZUludGVncmF0aW9ucyxcbn07XG5cbmV4cG9ydCB7IElOVEVHUkFUSU9OUyBhcyBJbnRlZ3JhdGlvbnMsIFRyYW5zcG9ydHMsIEhhbmRsZXJzIH07XG5cbi8vIFdlIG5lZWQgdG8gcGF0Y2ggZG9tYWluIG9uIHRoZSBnbG9iYWwgX19TRU5UUllfXyBvYmplY3QgdG8gbWFrZSBpdCB3b3JrIGZvciBub2RlIGluIGNyb3NzLXBsYXRmb3JtIHBhY2thZ2VzIGxpa2Vcbi8vIEBzZW50cnkvaHViLiBJZiB3ZSBkb24ndCBkbyB0aGlzLCBicm93c2VyIGJ1bmRsZXJzIHdpbGwgaGF2ZSB0cm91YmxlcyByZXNvbHZpbmcgYHJlcXVpcmUoJ2RvbWFpbicpYC5cbmNvbnN0IGNhcnJpZXIgPSBnZXRNYWluQ2FycmllcigpO1xuaWYgKGNhcnJpZXIuX19TRU5UUllfXykge1xuICBjYXJyaWVyLl9fU0VOVFJZX18uZXh0ZW5zaW9ucyA9IGNhcnJpZXIuX19TRU5UUllfXy5leHRlbnNpb25zIHx8IHt9O1xuICBjYXJyaWVyLl9fU0VOVFJZX18uZXh0ZW5zaW9ucy5kb21haW4gPSBjYXJyaWVyLl9fU0VOVFJZX18uZXh0ZW5zaW9ucy5kb21haW4gfHwgZG9tYWluO1xufVxuIiwgImltcG9ydCB7IEV2ZW50LCBFdmVudFByb2Nlc3NvciwgSHViLCBJbnRlZ3JhdGlvbiB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0LCBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIuanMvYmxvYi92MS40Ljcvc3JjL21pbkVyci5qc1xuY29uc3QgYW5ndWxhclBhdHRlcm4gPSAvXlxcWygoPzpbJGEtekEtWjAtOV0rOik/KD86WyRhLXpBLVowLTldKykpXFxdICguKj8pXFxuPyhcXFMrKSQvO1xuXG4vKipcbiAqIEFuZ3VsYXJKUyBpbnRlZ3JhdGlvblxuICpcbiAqIFByb3ZpZGVzIGFuICRleGNlcHRpb25IYW5kbGVyIGZvciBBbmd1bGFySlNcbiAqL1xuZXhwb3J0IGNsYXNzIEFuZ3VsYXIgaW1wbGVtZW50cyBJbnRlZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpZDogc3RyaW5nID0gJ0FuZ3VsYXJKUyc7XG5cbiAgLyoqXG4gICAqIG1vZHVsZU5hbWUgdXNlZCBpbiBBbmd1bGFyJ3MgREkgcmVzb2x1dGlvbiBhbGdvcml0aG1cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbW9kdWxlTmFtZTogc3RyaW5nID0gJ25nU2VudHJ5JztcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSBBbmd1bGFyLmlkO1xuXG4gIC8qKlxuICAgKiBBbmd1bGFyJ3MgaW5zdGFuY2VcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FuZ3VsYXI6IGFueTtcblxuICAvKipcbiAgICogbmdTZW50cnkgbW9kdWxlIGluc3RhbmNlXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwcml2YXRlIHJlYWRvbmx5IF9tb2R1bGU6IGFueTtcblxuICAvKipcbiAgICogUmV0dXJucyBjdXJyZW50IGh1Yi5cbiAgICovXG4gIHByaXZhdGUgX2dldEN1cnJlbnRIdWI/OiAoKSA9PiBIdWI7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogeyBhbmd1bGFyPzogYW55IH0gPSB7fSkge1xuICAgIGxvZ2dlci5sb2coJ1lvdSBhcmUgc3RpbGwgdXNpbmcgdGhlIEFuZ3VsYXIgaW50ZWdyYXRpb24sIGNvbnNpZGVyIG1vdmluZyB0byBAc2VudHJ5L2FuZ3VsYXInKTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICB0aGlzLl9hbmd1bGFyID0gb3B0aW9ucy5hbmd1bGFyIHx8IGdldEdsb2JhbE9iamVjdDxhbnk+KCkuYW5ndWxhcjtcblxuICAgIGlmICghdGhpcy5fYW5ndWxhcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdBbmd1bGFySW50ZWdyYXRpb24gaXMgbWlzc2luZyBhbiBBbmd1bGFyIGluc3RhbmNlJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgIHRoaXMuX21vZHVsZSA9IHRoaXMuX2FuZ3VsYXIubW9kdWxlKEFuZ3VsYXIubW9kdWxlTmFtZSwgW10pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0dXBPbmNlKF86IChjYWxsYmFjazogRXZlbnRQcm9jZXNzb3IpID0+IHZvaWQsIGdldEN1cnJlbnRIdWI6ICgpID0+IEh1Yik6IHZvaWQge1xuICAgIGlmICghdGhpcy5fbW9kdWxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZ2V0Q3VycmVudEh1YiA9IGdldEN1cnJlbnRIdWI7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgdGhpcy5fbW9kdWxlLmNvbmZpZyhbXG4gICAgICAnJHByb3ZpZGUnLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICgkcHJvdmlkZTogYW55KTogdm9pZCA9PiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgJHByb3ZpZGUuZGVjb3JhdG9yKCckZXhjZXB0aW9uSGFuZGxlcicsIFsnJGRlbGVnYXRlJywgdGhpcy5fJGV4Y2VwdGlvbkhhbmRsZXJEZWNvcmF0b3IuYmluZCh0aGlzKV0pO1xuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbmd1bGFyJ3MgZXhjZXB0aW9uSGFuZGxlciBmb3IgU2VudHJ5IGludGVncmF0aW9uXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwcml2YXRlIF8kZXhjZXB0aW9uSGFuZGxlckRlY29yYXRvcigkZGVsZWdhdGU6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIChleGNlcHRpb246IEVycm9yLCBjYXVzZT86IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgaHViID0gdGhpcy5fZ2V0Q3VycmVudEh1YiAmJiB0aGlzLl9nZXRDdXJyZW50SHViKCk7XG5cbiAgICAgIGlmIChodWIgJiYgaHViLmdldEludGVncmF0aW9uKEFuZ3VsYXIpKSB7XG4gICAgICAgIGh1Yi53aXRoU2NvcGUoc2NvcGUgPT4ge1xuICAgICAgICAgIGlmIChjYXVzZSkge1xuICAgICAgICAgICAgc2NvcGUuc2V0RXh0cmEoJ2NhdXNlJywgY2F1c2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNjb3BlLmFkZEV2ZW50UHJvY2Vzc29yKChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV4ID0gZXZlbnQuZXhjZXB0aW9uICYmIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMgJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXTtcblxuICAgICAgICAgICAgaWYgKGV4KSB7XG4gICAgICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSBhbmd1bGFyUGF0dGVybi5leGVjKGV4LnZhbHVlIHx8ICcnKTtcblxuICAgICAgICAgICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICAgICAgICAgIC8vIFRoaXMgdHlwZSBub3cgYmVjb21lcyBzb21ldGhpbmcgbGlrZTogJHJvb3RTY29wZTppbnByb2dcbiAgICAgICAgICAgICAgICBleC50eXBlID0gbWF0Y2hlc1sxXTtcbiAgICAgICAgICAgICAgICBleC52YWx1ZSA9IG1hdGNoZXNbMl07XG4gICAgICAgICAgICAgICAgZXZlbnQubWVzc2FnZSA9IGAke2V4LnR5cGV9OiAke2V4LnZhbHVlfWA7XG4gICAgICAgICAgICAgICAgLy8gYXV0byBzZXQgYSBuZXcgdGFnIHNwZWNpZmljYWxseSBmb3IgdGhlIGFuZ3VsYXIgZXJyb3IgdXJsXG4gICAgICAgICAgICAgICAgZXZlbnQuZXh0cmEgPSB7XG4gICAgICAgICAgICAgICAgICAuLi5ldmVudC5leHRyYSxcbiAgICAgICAgICAgICAgICAgIGFuZ3VsYXJEb2NzOiBtYXRjaGVzWzNdLnN1YnN0cigwLCAyNTApLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaHViLmNhcHR1cmVFeGNlcHRpb24oZXhjZXB0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAkZGVsZWdhdGUoZXhjZXB0aW9uLCBjYXVzZSk7XG4gICAgfTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEV2ZW50UHJvY2Vzc29yLCBIdWIsIEludGVncmF0aW9uLCBTZXZlcml0eSB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgZmlsbCwgZ2V0R2xvYmFsT2JqZWN0LCBzYWZlSm9pbiB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWxPYmplY3Q8V2luZG93IHwgTm9kZUpTLkdsb2JhbD4oKTtcblxuLyoqIFNlbmQgQ29uc29sZSBBUEkgY2FsbHMgYXMgU2VudHJ5IEV2ZW50cyAqL1xuZXhwb3J0IGNsYXNzIENhcHR1cmVDb25zb2xlIGltcGxlbWVudHMgSW50ZWdyYXRpb24ge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaWQ6IHN0cmluZyA9ICdDYXB0dXJlQ29uc29sZSc7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgbmFtZTogc3RyaW5nID0gQ2FwdHVyZUNvbnNvbGUuaWQ7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9sZXZlbHM6IHN0cmluZ1tdID0gWydsb2cnLCAnaW5mbycsICd3YXJuJywgJ2Vycm9yJywgJ2RlYnVnJywgJ2Fzc2VydCddO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IHsgbGV2ZWxzPzogc3RyaW5nW10gfSA9IHt9KSB7XG4gICAgaWYgKG9wdGlvbnMubGV2ZWxzKSB7XG4gICAgICB0aGlzLl9sZXZlbHMgPSBvcHRpb25zLmxldmVscztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXR1cE9uY2UoXzogKGNhbGxiYWNrOiBFdmVudFByb2Nlc3NvcikgPT4gdm9pZCwgZ2V0Q3VycmVudEh1YjogKCkgPT4gSHViKTogdm9pZCB7XG4gICAgaWYgKCEoJ2NvbnNvbGUnIGluIGdsb2JhbCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sZXZlbHMuZm9yRWFjaCgobGV2ZWw6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCEobGV2ZWwgaW4gZ2xvYmFsLmNvbnNvbGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIGZpbGwoZ2xvYmFsLmNvbnNvbGUsIGxldmVsLCAob3JpZ2luYWxDb25zb2xlTGV2ZWw6ICgpID0+IGFueSkgPT4gKC4uLmFyZ3M6IGFueVtdKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IGh1YiA9IGdldEN1cnJlbnRIdWIoKTtcblxuICAgICAgICBpZiAoaHViLmdldEludGVncmF0aW9uKENhcHR1cmVDb25zb2xlKSkge1xuICAgICAgICAgIGh1Yi53aXRoU2NvcGUoc2NvcGUgPT4ge1xuICAgICAgICAgICAgc2NvcGUuc2V0TGV2ZWwoU2V2ZXJpdHkuZnJvbVN0cmluZyhsZXZlbCkpO1xuICAgICAgICAgICAgc2NvcGUuc2V0RXh0cmEoJ2FyZ3VtZW50cycsIGFyZ3MpO1xuICAgICAgICAgICAgc2NvcGUuYWRkRXZlbnRQcm9jZXNzb3IoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICBldmVudC5sb2dnZXIgPSAnY29uc29sZSc7XG4gICAgICAgICAgICAgIHJldHVybiBldmVudDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IHNhZmVKb2luKGFyZ3MsICcgJyk7XG4gICAgICAgICAgICBpZiAobGV2ZWwgPT09ICdhc3NlcnQnKSB7XG4gICAgICAgICAgICAgIGlmIChhcmdzWzBdID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgQXNzZXJ0aW9uIGZhaWxlZDogJHtzYWZlSm9pbihhcmdzLnNsaWNlKDEpLCAnICcpIHx8ICdjb25zb2xlLmFzc2VydCd9YDtcbiAgICAgICAgICAgICAgICBzY29wZS5zZXRFeHRyYSgnYXJndW1lbnRzJywgYXJncy5zbGljZSgxKSk7XG4gICAgICAgICAgICAgICAgaHViLmNhcHR1cmVNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxldmVsID09PSAnZXJyb3InICYmIGFyZ3NbMF0gaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICBodWIuY2FwdHVyZUV4Y2VwdGlvbihhcmdzWzBdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGh1Yi5jYXB0dXJlTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoaXMgZmFpbHMgZm9yIHNvbWUgYnJvd3NlcnMuIDooXG4gICAgICAgIGlmIChvcmlnaW5hbENvbnNvbGVMZXZlbCkge1xuICAgICAgICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKG9yaWdpbmFsQ29uc29sZUxldmVsLCBnbG9iYWwuY29uc29sZSwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgRXZlbnQsIEV2ZW50SGludCwgRXZlbnRQcm9jZXNzb3IsIEh1YiwgSW50ZWdyYXRpb24gfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGNvbnNvbGVTYW5kYm94IH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbi8qKiBKU0RvYyAqL1xuaW50ZXJmYWNlIERlYnVnT3B0aW9ucyB7XG4gIHN0cmluZ2lmeT86IGJvb2xlYW47XG4gIGRlYnVnZ2VyPzogYm9vbGVhbjtcbn1cblxuLyoqIEpTRG9jICovXG5leHBvcnQgY2xhc3MgRGVidWcgaW1wbGVtZW50cyBJbnRlZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpZDogc3RyaW5nID0gJ0RlYnVnJztcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSBEZWJ1Zy5pZDtcblxuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogRGVidWdPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBEZWJ1Z09wdGlvbnMpIHtcbiAgICB0aGlzLl9vcHRpb25zID0ge1xuICAgICAgZGVidWdnZXI6IGZhbHNlLFxuICAgICAgc3RyaW5naWZ5OiBmYWxzZSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldHVwT25jZShhZGRHbG9iYWxFdmVudFByb2Nlc3NvcjogKGNhbGxiYWNrOiBFdmVudFByb2Nlc3NvcikgPT4gdm9pZCwgZ2V0Q3VycmVudEh1YjogKCkgPT4gSHViKTogdm9pZCB7XG4gICAgYWRkR2xvYmFsRXZlbnRQcm9jZXNzb3IoKGV2ZW50OiBFdmVudCwgaGludD86IEV2ZW50SGludCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZiA9IGdldEN1cnJlbnRIdWIoKS5nZXRJbnRlZ3JhdGlvbihEZWJ1Zyk7XG4gICAgICBpZiAoc2VsZikge1xuICAgICAgICBpZiAoc2VsZi5fb3B0aW9ucy5kZWJ1Z2dlcikge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1kZWJ1Z2dlclxuICAgICAgICAgIGRlYnVnZ2VyO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuICAgICAgICBjb25zb2xlU2FuZGJveCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHNlbGYuX29wdGlvbnMuc3RyaW5naWZ5KSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShldmVudCwgbnVsbCwgMikpO1xuICAgICAgICAgICAgaWYgKGhpbnQpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoaGludCwgbnVsbCwgMikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhldmVudCk7XG4gICAgICAgICAgICBpZiAoaGludCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhoaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbnNvbGUgKi9cbiAgICAgIH1cbiAgICAgIHJldHVybiBldmVudDtcbiAgICB9KTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEV2ZW50LCBFdmVudFByb2Nlc3NvciwgRXhjZXB0aW9uLCBIdWIsIEludGVncmF0aW9uLCBTdGFja0ZyYW1lIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuLyoqIERlZHVwbGljYXRpb24gZmlsdGVyICovXG5leHBvcnQgY2xhc3MgRGVkdXBlIGltcGxlbWVudHMgSW50ZWdyYXRpb24ge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaWQ6IHN0cmluZyA9ICdEZWR1cGUnO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIG5hbWU6IHN0cmluZyA9IERlZHVwZS5pZDtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHByaXZhdGUgX3ByZXZpb3VzRXZlbnQ/OiBFdmVudDtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXR1cE9uY2UoYWRkR2xvYmFsRXZlbnRQcm9jZXNzb3I6IChjYWxsYmFjazogRXZlbnRQcm9jZXNzb3IpID0+IHZvaWQsIGdldEN1cnJlbnRIdWI6ICgpID0+IEh1Yik6IHZvaWQge1xuICAgIGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yKChjdXJyZW50RXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBzZWxmID0gZ2V0Q3VycmVudEh1YigpLmdldEludGVncmF0aW9uKERlZHVwZSk7XG4gICAgICBpZiAoc2VsZikge1xuICAgICAgICAvLyBKdXV1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZ1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChzZWxmLl9zaG91bGREcm9wRXZlbnQoY3VycmVudEV2ZW50LCBzZWxmLl9wcmV2aW91c0V2ZW50KSkge1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oYEV2ZW50IGRyb3BwZWQgZHVlIHRvIGJlaW5nIGEgZHVwbGljYXRlIG9mIHByZXZpb3VzbHkgY2FwdHVyZWQgZXZlbnQuYCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKF9vTykge1xuICAgICAgICAgIHJldHVybiAoc2VsZi5fcHJldmlvdXNFdmVudCA9IGN1cnJlbnRFdmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKHNlbGYuX3ByZXZpb3VzRXZlbnQgPSBjdXJyZW50RXZlbnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGN1cnJlbnRFdmVudDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIF9zaG91bGREcm9wRXZlbnQoY3VycmVudEV2ZW50OiBFdmVudCwgcHJldmlvdXNFdmVudD86IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgaWYgKCFwcmV2aW91c0V2ZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzU2FtZU1lc3NhZ2VFdmVudChjdXJyZW50RXZlbnQsIHByZXZpb3VzRXZlbnQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faXNTYW1lRXhjZXB0aW9uRXZlbnQoY3VycmVudEV2ZW50LCBwcmV2aW91c0V2ZW50KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgX2lzU2FtZU1lc3NhZ2VFdmVudChjdXJyZW50RXZlbnQ6IEV2ZW50LCBwcmV2aW91c0V2ZW50OiBFdmVudCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGN1cnJlbnRNZXNzYWdlID0gY3VycmVudEV2ZW50Lm1lc3NhZ2U7XG4gICAgY29uc3QgcHJldmlvdXNNZXNzYWdlID0gcHJldmlvdXNFdmVudC5tZXNzYWdlO1xuXG4gICAgLy8gSWYgbmVpdGhlciBldmVudCBoYXMgYSBtZXNzYWdlIHByb3BlcnR5LCB0aGV5IHdlcmUgYm90aCBleGNlcHRpb25zLCBzbyBiYWlsIG91dFxuICAgIGlmICghY3VycmVudE1lc3NhZ2UgJiYgIXByZXZpb3VzTWVzc2FnZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIElmIG9ubHkgb25lIGV2ZW50IGhhcyBhIHN0YWNrdHJhY2UsIGJ1dCBub3QgdGhlIG90aGVyIG9uZSwgdGhleSBhcmUgbm90IHRoZSBzYW1lXG4gICAgaWYgKChjdXJyZW50TWVzc2FnZSAmJiAhcHJldmlvdXNNZXNzYWdlKSB8fCAoIWN1cnJlbnRNZXNzYWdlICYmIHByZXZpb3VzTWVzc2FnZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudE1lc3NhZ2UgIT09IHByZXZpb3VzTWVzc2FnZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5faXNTYW1lRmluZ2VycHJpbnQoY3VycmVudEV2ZW50LCBwcmV2aW91c0V2ZW50KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5faXNTYW1lU3RhY2t0cmFjZShjdXJyZW50RXZlbnQsIHByZXZpb3VzRXZlbnQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSBfZ2V0RnJhbWVzRnJvbUV2ZW50KGV2ZW50OiBFdmVudCk6IFN0YWNrRnJhbWVbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gZXZlbnQuZXhjZXB0aW9uO1xuXG4gICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBPYmplY3QgY291bGQgYmUgdW5kZWZpbmVkXG4gICAgICAgIHJldHVybiBleGNlcHRpb24udmFsdWVzWzBdLnN0YWNrdHJhY2UuZnJhbWVzO1xuICAgICAgfSBjYXRjaCAoX29PKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudC5zdGFja3RyYWNlKSB7XG4gICAgICByZXR1cm4gZXZlbnQuc3RhY2t0cmFjZS5mcmFtZXM7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSBfaXNTYW1lU3RhY2t0cmFjZShjdXJyZW50RXZlbnQ6IEV2ZW50LCBwcmV2aW91c0V2ZW50OiBFdmVudCk6IGJvb2xlYW4ge1xuICAgIGxldCBjdXJyZW50RnJhbWVzID0gdGhpcy5fZ2V0RnJhbWVzRnJvbUV2ZW50KGN1cnJlbnRFdmVudCk7XG4gICAgbGV0IHByZXZpb3VzRnJhbWVzID0gdGhpcy5fZ2V0RnJhbWVzRnJvbUV2ZW50KHByZXZpb3VzRXZlbnQpO1xuXG4gICAgLy8gSWYgbmVpdGhlciBldmVudCBoYXMgYSBzdGFja3RyYWNlLCB0aGV5IGFyZSBhc3N1bWVkIHRvIGJlIHRoZSBzYW1lXG4gICAgaWYgKCFjdXJyZW50RnJhbWVzICYmICFwcmV2aW91c0ZyYW1lcykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gSWYgb25seSBvbmUgZXZlbnQgaGFzIGEgc3RhY2t0cmFjZSwgYnV0IG5vdCB0aGUgb3RoZXIgb25lLCB0aGV5IGFyZSBub3QgdGhlIHNhbWVcbiAgICBpZiAoKGN1cnJlbnRGcmFtZXMgJiYgIXByZXZpb3VzRnJhbWVzKSB8fCAoIWN1cnJlbnRGcmFtZXMgJiYgcHJldmlvdXNGcmFtZXMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY3VycmVudEZyYW1lcyA9IGN1cnJlbnRGcmFtZXMgYXMgU3RhY2tGcmFtZVtdO1xuICAgIHByZXZpb3VzRnJhbWVzID0gcHJldmlvdXNGcmFtZXMgYXMgU3RhY2tGcmFtZVtdO1xuXG4gICAgLy8gSWYgbnVtYmVyIG9mIGZyYW1lcyBkaWZmZXIsIHRoZXkgYXJlIG5vdCB0aGUgc2FtZVxuICAgIGlmIChwcmV2aW91c0ZyYW1lcy5sZW5ndGggIT09IGN1cnJlbnRGcmFtZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlLCBjb21wYXJlIHRoZSB0d29cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXZpb3VzRnJhbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBmcmFtZUEgPSBwcmV2aW91c0ZyYW1lc1tpXTtcbiAgICAgIGNvbnN0IGZyYW1lQiA9IGN1cnJlbnRGcmFtZXNbaV07XG5cbiAgICAgIGlmIChcbiAgICAgICAgZnJhbWVBLmZpbGVuYW1lICE9PSBmcmFtZUIuZmlsZW5hbWUgfHxcbiAgICAgICAgZnJhbWVBLmxpbmVubyAhPT0gZnJhbWVCLmxpbmVubyB8fFxuICAgICAgICBmcmFtZUEuY29sbm8gIT09IGZyYW1lQi5jb2xubyB8fFxuICAgICAgICBmcmFtZUEuZnVuY3Rpb24gIT09IGZyYW1lQi5mdW5jdGlvblxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIF9nZXRFeGNlcHRpb25Gcm9tRXZlbnQoZXZlbnQ6IEV2ZW50KTogRXhjZXB0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gZXZlbnQuZXhjZXB0aW9uICYmIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMgJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIF9pc1NhbWVFeGNlcHRpb25FdmVudChjdXJyZW50RXZlbnQ6IEV2ZW50LCBwcmV2aW91c0V2ZW50OiBFdmVudCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByZXZpb3VzRXhjZXB0aW9uID0gdGhpcy5fZ2V0RXhjZXB0aW9uRnJvbUV2ZW50KHByZXZpb3VzRXZlbnQpO1xuICAgIGNvbnN0IGN1cnJlbnRFeGNlcHRpb24gPSB0aGlzLl9nZXRFeGNlcHRpb25Gcm9tRXZlbnQoY3VycmVudEV2ZW50KTtcblxuICAgIGlmICghcHJldmlvdXNFeGNlcHRpb24gfHwgIWN1cnJlbnRFeGNlcHRpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAocHJldmlvdXNFeGNlcHRpb24udHlwZSAhPT0gY3VycmVudEV4Y2VwdGlvbi50eXBlIHx8IHByZXZpb3VzRXhjZXB0aW9uLnZhbHVlICE9PSBjdXJyZW50RXhjZXB0aW9uLnZhbHVlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9pc1NhbWVGaW5nZXJwcmludChjdXJyZW50RXZlbnQsIHByZXZpb3VzRXZlbnQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9pc1NhbWVTdGFja3RyYWNlKGN1cnJlbnRFdmVudCwgcHJldmlvdXNFdmVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIF9pc1NhbWVGaW5nZXJwcmludChjdXJyZW50RXZlbnQ6IEV2ZW50LCBwcmV2aW91c0V2ZW50OiBFdmVudCk6IGJvb2xlYW4ge1xuICAgIGxldCBjdXJyZW50RmluZ2VycHJpbnQgPSBjdXJyZW50RXZlbnQuZmluZ2VycHJpbnQ7XG4gICAgbGV0IHByZXZpb3VzRmluZ2VycHJpbnQgPSBwcmV2aW91c0V2ZW50LmZpbmdlcnByaW50O1xuXG4gICAgLy8gSWYgbmVpdGhlciBldmVudCBoYXMgYSBmaW5nZXJwcmludCwgdGhleSBhcmUgYXNzdW1lZCB0byBiZSB0aGUgc2FtZVxuICAgIGlmICghY3VycmVudEZpbmdlcnByaW50ICYmICFwcmV2aW91c0ZpbmdlcnByaW50KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBJZiBvbmx5IG9uZSBldmVudCBoYXMgYSBmaW5nZXJwcmludCwgYnV0IG5vdCB0aGUgb3RoZXIgb25lLCB0aGV5IGFyZSBub3QgdGhlIHNhbWVcbiAgICBpZiAoKGN1cnJlbnRGaW5nZXJwcmludCAmJiAhcHJldmlvdXNGaW5nZXJwcmludCkgfHwgKCFjdXJyZW50RmluZ2VycHJpbnQgJiYgcHJldmlvdXNGaW5nZXJwcmludCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjdXJyZW50RmluZ2VycHJpbnQgPSBjdXJyZW50RmluZ2VycHJpbnQgYXMgc3RyaW5nW107XG4gICAgcHJldmlvdXNGaW5nZXJwcmludCA9IHByZXZpb3VzRmluZ2VycHJpbnQgYXMgc3RyaW5nW107XG5cbiAgICAvLyBPdGhlcndpc2UsIGNvbXBhcmUgdGhlIHR3b1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gISEoY3VycmVudEZpbmdlcnByaW50LmpvaW4oJycpID09PSBwcmV2aW91c0ZpbmdlcnByaW50LmpvaW4oJycpKTtcbiAgICB9IGNhdGNoIChfb08pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBFdmVudFByb2Nlc3NvciwgSHViLCBJbnRlZ3JhdGlvbiB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0LCBpc0luc3RhbmNlT2YsIGxvZ2dlciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG4vKiogSlNEb2MgKi9cbmV4cG9ydCBjbGFzcyBFbWJlciBpbXBsZW1lbnRzIEludGVncmF0aW9uIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlkOiBzdHJpbmcgPSAnRW1iZXInO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIG5hbWU6IHN0cmluZyA9IEVtYmVyLmlkO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiwgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwcml2YXRlIHJlYWRvbmx5IF9FbWJlcjogYW55O1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IHsgRW1iZXI/OiBhbnkgfSA9IHt9KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgIHRoaXMuX0VtYmVyID0gb3B0aW9ucy5FbWJlciB8fCBnZXRHbG9iYWxPYmplY3Q8YW55PigpLkVtYmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0dXBPbmNlKF86IChjYWxsYmFjazogRXZlbnRQcm9jZXNzb3IpID0+IHZvaWQsIGdldEN1cnJlbnRIdWI6ICgpID0+IEh1Yik6IHZvaWQge1xuICAgIGlmICghdGhpcy5fRW1iZXIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRW1iZXJJbnRlZ3JhdGlvbiBpcyBtaXNzaW5nIGFuIEVtYmVyIGluc3RhbmNlJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovXG4gICAgY29uc3Qgb2xkT25FcnJvciA9IHRoaXMuX0VtYmVyLm9uZXJyb3I7XG5cbiAgICB0aGlzLl9FbWJlci5vbmVycm9yID0gKGVycm9yOiBFcnJvcik6IHZvaWQgPT4ge1xuICAgICAgaWYgKGdldEN1cnJlbnRIdWIoKS5nZXRJbnRlZ3JhdGlvbihFbWJlcikpIHtcbiAgICAgICAgZ2V0Q3VycmVudEh1YigpLmNhcHR1cmVFeGNlcHRpb24oZXJyb3IsIHsgb3JpZ2luYWxFeGNlcHRpb246IGVycm9yIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9sZE9uRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb2xkT25FcnJvci5jYWxsKHRoaXMuX0VtYmVyLCBlcnJvcik7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX0VtYmVyLnRlc3RpbmcpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdGhpcy5fRW1iZXIuUlNWUC5vbignZXJyb3InLCAocmVhc29uOiB1bmtub3duKTogdm9pZCA9PiB7XG4gICAgICBpZiAoZ2V0Q3VycmVudEh1YigpLmdldEludGVncmF0aW9uKEVtYmVyKSkge1xuICAgICAgICBnZXRDdXJyZW50SHViKCkud2l0aFNjb3BlKHNjb3BlID0+IHtcbiAgICAgICAgICBpZiAoaXNJbnN0YW5jZU9mKHJlYXNvbiwgRXJyb3IpKSB7XG4gICAgICAgICAgICBzY29wZS5zZXRFeHRyYSgnY29udGV4dCcsICdVbmhhbmRsZWQgUHJvbWlzZSBlcnJvciBkZXRlY3RlZCcpO1xuICAgICAgICAgICAgZ2V0Q3VycmVudEh1YigpLmNhcHR1cmVFeGNlcHRpb24ocmVhc29uLCB7IG9yaWdpbmFsRXhjZXB0aW9uOiByZWFzb24gYXMgRXJyb3IgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNjb3BlLnNldEV4dHJhKCdyZWFzb24nLCByZWFzb24pO1xuICAgICAgICAgICAgZ2V0Q3VycmVudEh1YigpLmNhcHR1cmVNZXNzYWdlKCdVbmhhbmRsZWQgUHJvbWlzZSBlcnJvciBkZXRlY3RlZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi9cbn1cbiIsICJpbXBvcnQgeyBFdmVudCwgRXZlbnRIaW50LCBFdmVudFByb2Nlc3NvciwgRXh0ZW5kZWRFcnJvciwgSHViLCBJbnRlZ3JhdGlvbiB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgaXNFcnJvciwgaXNQbGFpbk9iamVjdCwgbG9nZ2VyLCBub3JtYWxpemUgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuLyoqIEpTRG9jICovXG5pbnRlcmZhY2UgRXh0cmFFcnJvckRhdGFPcHRpb25zIHtcbiAgZGVwdGg/OiBudW1iZXI7XG59XG5cbi8qKiBQYXRjaCB0b1N0cmluZyBjYWxscyB0byByZXR1cm4gcHJvcGVyIG5hbWUgZm9yIHdyYXBwZWQgZnVuY3Rpb25zICovXG5leHBvcnQgY2xhc3MgRXh0cmFFcnJvckRhdGEgaW1wbGVtZW50cyBJbnRlZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpZDogc3RyaW5nID0gJ0V4dHJhRXJyb3JEYXRhJztcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSBFeHRyYUVycm9yRGF0YS5pZDtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBFeHRyYUVycm9yRGF0YU9wdGlvbnMgPSB7IGRlcHRoOiAzIH0pIHt9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0dXBPbmNlKGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yOiAoY2FsbGJhY2s6IEV2ZW50UHJvY2Vzc29yKSA9PiB2b2lkLCBnZXRDdXJyZW50SHViOiAoKSA9PiBIdWIpOiB2b2lkIHtcbiAgICBhZGRHbG9iYWxFdmVudFByb2Nlc3NvcigoZXZlbnQ6IEV2ZW50LCBoaW50PzogRXZlbnRIaW50KSA9PiB7XG4gICAgICBjb25zdCBzZWxmID0gZ2V0Q3VycmVudEh1YigpLmdldEludGVncmF0aW9uKEV4dHJhRXJyb3JEYXRhKTtcbiAgICAgIGlmICghc2VsZikge1xuICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VsZi5lbmhhbmNlRXZlbnRXaXRoRXJyb3JEYXRhKGV2ZW50LCBoaW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2hlcyBleHRyYWN0ZWQgaW5mb3JtYXRpb24gZnJvbSB0aGUgRXJyb3Igb2JqZWN0IHRvIGV4dHJhIGZpZWxkIGluIHRoZSBFdmVudFxuICAgKi9cbiAgcHVibGljIGVuaGFuY2VFdmVudFdpdGhFcnJvckRhdGEoZXZlbnQ6IEV2ZW50LCBoaW50PzogRXZlbnRIaW50KTogRXZlbnQge1xuICAgIGlmICghaGludCB8fCAhaGludC5vcmlnaW5hbEV4Y2VwdGlvbiB8fCAhaXNFcnJvcihoaW50Lm9yaWdpbmFsRXhjZXB0aW9uKSkge1xuICAgICAgcmV0dXJuIGV2ZW50O1xuICAgIH1cbiAgICBjb25zdCBuYW1lID0gKGhpbnQub3JpZ2luYWxFeGNlcHRpb24gYXMgRXh0ZW5kZWRFcnJvcikubmFtZSB8fCBoaW50Lm9yaWdpbmFsRXhjZXB0aW9uLmNvbnN0cnVjdG9yLm5hbWU7XG5cbiAgICBjb25zdCBlcnJvckRhdGEgPSB0aGlzLl9leHRyYWN0RXJyb3JEYXRhKGhpbnQub3JpZ2luYWxFeGNlcHRpb24gYXMgRXh0ZW5kZWRFcnJvcik7XG5cbiAgICBpZiAoZXJyb3JEYXRhKSB7XG4gICAgICBsZXQgY29udGV4dHMgPSB7XG4gICAgICAgIC4uLmV2ZW50LmNvbnRleHRzLFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgbm9ybWFsaXplZEVycm9yRGF0YSA9IG5vcm1hbGl6ZShlcnJvckRhdGEsIHRoaXMuX29wdGlvbnMuZGVwdGgpO1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3Qobm9ybWFsaXplZEVycm9yRGF0YSkpIHtcbiAgICAgICAgY29udGV4dHMgPSB7XG4gICAgICAgICAgLi4uZXZlbnQuY29udGV4dHMsXG4gICAgICAgICAgW25hbWVdOiB7XG4gICAgICAgICAgICAuLi5ub3JtYWxpemVkRXJyb3JEYXRhLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmV2ZW50LFxuICAgICAgICBjb250ZXh0cyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgZXh0cmEgaW5mb3JtYXRpb24gZnJvbSB0aGUgRXJyb3Igb2JqZWN0XG4gICAqL1xuICBwcml2YXRlIF9leHRyYWN0RXJyb3JEYXRhKGVycm9yOiBFeHRlbmRlZEVycm9yKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHtcbiAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIGVuaGFuY2UgYWxyZWFkeSBleGlzdGluZyBldmVudCwgc28gbm8gaGFybSBkb25lIGlmIGl0IHdvbid0IHN1Y2NlZWRcbiAgICB0cnkge1xuICAgICAgY29uc3QgbmF0aXZlS2V5cyA9IFtcbiAgICAgICAgJ25hbWUnLFxuICAgICAgICAnbWVzc2FnZScsXG4gICAgICAgICdzdGFjaycsXG4gICAgICAgICdsaW5lJyxcbiAgICAgICAgJ2NvbHVtbicsXG4gICAgICAgICdmaWxlTmFtZScsXG4gICAgICAgICdsaW5lTnVtYmVyJyxcbiAgICAgICAgJ2NvbHVtbk51bWJlcicsXG4gICAgICAgICd0b0pTT04nLFxuICAgICAgXTtcblxuICAgICAgY29uc3QgZXh0cmFFcnJvckluZm86IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgICAgIC8vIFdlIHdhbnQgb25seSBlbnVtZXJhYmxlIHByb3BlcnRpZXMsIHRodXMgYGdldE93blByb3BlcnR5TmFtZXNgIGlzIHJlZHVuZGFudCBoZXJlLCBhcyB3ZSBmaWx0ZXIga2V5cyBhbnl3YXkuXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhlcnJvcikpIHtcbiAgICAgICAgaWYgKG5hdGl2ZUtleXMuaW5kZXhPZihrZXkpICE9PSAtMSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXJyb3Jba2V5XTtcbiAgICAgICAgZXh0cmFFcnJvckluZm9ba2V5XSA9IGlzRXJyb3IodmFsdWUpID8gKHZhbHVlIGFzIEVycm9yKS50b1N0cmluZygpIDogdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHNvbWVvbmUgYXR0YWNoZWQgYHRvSlNPTmAgbWV0aG9kIHRvIGdyYWIgZXZlbiBtb3JlIHByb3BlcnRpZXMgKGVnLiBheGlvcyBpcyBkb2luZyB0aGF0KVxuICAgICAgaWYgKHR5cGVvZiBlcnJvci50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZEVycm9yID0gZXJyb3IudG9KU09OKCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoc2VyaWFsaXplZEVycm9yKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gc2VyaWFsaXplZEVycm9yW2tleV07XG4gICAgICAgICAgZXh0cmFFcnJvckluZm9ba2V5XSA9IGlzRXJyb3IodmFsdWUpID8gKHZhbHVlIGFzIEVycm9yKS50b1N0cmluZygpIDogdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGV4dHJhRXJyb3JJbmZvO1xuICAgIH0gY2F0Y2ggKG9PKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBleHRyYWN0IGV4dHJhIGRhdGEgZnJvbSB0aGUgRXJyb3Igb2JqZWN0OicsIG9PKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIiwgIi8qIVxuICAgIGxvY2FsRm9yYWdlIC0tIE9mZmxpbmUgU3RvcmFnZSwgSW1wcm92ZWRcbiAgICBWZXJzaW9uIDEuMTAuMFxuICAgIGh0dHBzOi8vbG9jYWxmb3JhZ2UuZ2l0aHViLmlvL2xvY2FsRm9yYWdlXG4gICAgKGMpIDIwMTMtMjAxNyBNb3ppbGxhLCBBcGFjaGUgTGljZW5zZSAyLjBcbiovXG4oZnVuY3Rpb24oZil7aWYodHlwZW9mIGV4cG9ydHM9PT1cIm9iamVjdFwiJiZ0eXBlb2YgbW9kdWxlIT09XCJ1bmRlZmluZWRcIil7bW9kdWxlLmV4cG9ydHM9ZigpfWVsc2UgaWYodHlwZW9mIGRlZmluZT09PVwiZnVuY3Rpb25cIiYmZGVmaW5lLmFtZCl7ZGVmaW5lKFtdLGYpfWVsc2V7dmFyIGc7aWYodHlwZW9mIHdpbmRvdyE9PVwidW5kZWZpbmVkXCIpe2c9d2luZG93fWVsc2UgaWYodHlwZW9mIGdsb2JhbCE9PVwidW5kZWZpbmVkXCIpe2c9Z2xvYmFsfWVsc2UgaWYodHlwZW9mIHNlbGYhPT1cInVuZGVmaW5lZFwiKXtnPXNlbGZ9ZWxzZXtnPXRoaXN9Zy5sb2NhbGZvcmFnZSA9IGYoKX19KShmdW5jdGlvbigpe3ZhciBkZWZpbmUsbW9kdWxlLGV4cG9ydHM7cmV0dXJuIChmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyAoZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLCBmKX12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pKHsxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAoZ2xvYmFsKXtcbid1c2Ugc3RyaWN0JztcbnZhciBNdXRhdGlvbiA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xuXG52YXIgc2NoZWR1bGVEcmFpbjtcblxue1xuICBpZiAoTXV0YXRpb24pIHtcbiAgICB2YXIgY2FsbGVkID0gMDtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb24obmV4dFRpY2spO1xuICAgIHZhciBlbGVtZW50ID0gZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIHtcbiAgICAgIGNoYXJhY3RlckRhdGE6IHRydWVcbiAgICB9KTtcbiAgICBzY2hlZHVsZURyYWluID0gZnVuY3Rpb24gKCkge1xuICAgICAgZWxlbWVudC5kYXRhID0gKGNhbGxlZCA9ICsrY2FsbGVkICUgMik7XG4gICAgfTtcbiAgfSBlbHNlIGlmICghZ2xvYmFsLnNldEltbWVkaWF0ZSAmJiB0eXBlb2YgZ2xvYmFsLk1lc3NhZ2VDaGFubmVsICE9PSAndW5kZWZpbmVkJykge1xuICAgIHZhciBjaGFubmVsID0gbmV3IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbCgpO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbmV4dFRpY2s7XG4gICAgc2NoZWR1bGVEcmFpbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoMCk7XG4gICAgfTtcbiAgfSBlbHNlIGlmICgnZG9jdW1lbnQnIGluIGdsb2JhbCAmJiAnb25yZWFkeXN0YXRlY2hhbmdlJyBpbiBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpIHtcbiAgICBzY2hlZHVsZURyYWluID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICAvLyBDcmVhdGUgYSA8c2NyaXB0PiBlbGVtZW50OyBpdHMgcmVhZHlzdGF0ZWNoYW5nZSBldmVudCB3aWxsIGJlIGZpcmVkIGFzeW5jaHJvbm91c2x5IG9uY2UgaXQgaXMgaW5zZXJ0ZWRcbiAgICAgIC8vIGludG8gdGhlIGRvY3VtZW50LiBEbyBzbywgdGh1cyBxdWV1aW5nIHVwIHRoZSB0YXNrLiBSZW1lbWJlciB0byBjbGVhbiB1cCBvbmNlIGl0J3MgYmVlbiBjYWxsZWQuXG4gICAgICB2YXIgc2NyaXB0RWwgPSBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICBzY3JpcHRFbC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG5leHRUaWNrKCk7XG5cbiAgICAgICAgc2NyaXB0RWwub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgc2NyaXB0RWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHRFbCk7XG4gICAgICAgIHNjcmlwdEVsID0gbnVsbDtcbiAgICAgIH07XG4gICAgICBnbG9iYWwuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHNjcmlwdEVsKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHNjaGVkdWxlRHJhaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZXRUaW1lb3V0KG5leHRUaWNrLCAwKTtcbiAgICB9O1xuICB9XG59XG5cbnZhciBkcmFpbmluZztcbnZhciBxdWV1ZSA9IFtdO1xuLy9uYW1lZCBuZXh0VGljayBmb3IgbGVzcyBjb25mdXNpbmcgc3RhY2sgdHJhY2VzXG5mdW5jdGlvbiBuZXh0VGljaygpIHtcbiAgZHJhaW5pbmcgPSB0cnVlO1xuICB2YXIgaSwgb2xkUXVldWU7XG4gIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gIHdoaWxlIChsZW4pIHtcbiAgICBvbGRRdWV1ZSA9IHF1ZXVlO1xuICAgIHF1ZXVlID0gW107XG4gICAgaSA9IC0xO1xuICAgIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICAgIG9sZFF1ZXVlW2ldKCk7XG4gICAgfVxuICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgfVxuICBkcmFpbmluZyA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGltbWVkaWF0ZTtcbmZ1bmN0aW9uIGltbWVkaWF0ZSh0YXNrKSB7XG4gIGlmIChxdWV1ZS5wdXNoKHRhc2spID09PSAxICYmICFkcmFpbmluZykge1xuICAgIHNjaGVkdWxlRHJhaW4oKTtcbiAgfVxufVxuXG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcbn0se31dLDI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xudmFyIGltbWVkaWF0ZSA9IF9kZXJlcV8oMSk7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBJTlRFUk5BTCgpIHt9XG5cbnZhciBoYW5kbGVycyA9IHt9O1xuXG52YXIgUkVKRUNURUQgPSBbJ1JFSkVDVEVEJ107XG52YXIgRlVMRklMTEVEID0gWydGVUxGSUxMRUQnXTtcbnZhciBQRU5ESU5HID0gWydQRU5ESU5HJ107XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcblxuZnVuY3Rpb24gUHJvbWlzZShyZXNvbHZlcikge1xuICBpZiAodHlwZW9mIHJlc29sdmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVzb2x2ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cbiAgdGhpcy5zdGF0ZSA9IFBFTkRJTkc7XG4gIHRoaXMucXVldWUgPSBbXTtcbiAgdGhpcy5vdXRjb21lID0gdm9pZCAwO1xuICBpZiAocmVzb2x2ZXIgIT09IElOVEVSTkFMKSB7XG4gICAgc2FmZWx5UmVzb2x2ZVRoZW5hYmxlKHRoaXMsIHJlc29sdmVyKTtcbiAgfVxufVxuXG5Qcm9taXNlLnByb3RvdHlwZVtcImNhdGNoXCJdID0gZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcbn07XG5Qcm9taXNlLnByb3RvdHlwZS50aGVuID0gZnVuY3Rpb24gKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gIGlmICh0eXBlb2Ygb25GdWxmaWxsZWQgIT09ICdmdW5jdGlvbicgJiYgdGhpcy5zdGF0ZSA9PT0gRlVMRklMTEVEIHx8XG4gICAgdHlwZW9mIG9uUmVqZWN0ZWQgIT09ICdmdW5jdGlvbicgJiYgdGhpcy5zdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB2YXIgcHJvbWlzZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKElOVEVSTkFMKTtcbiAgaWYgKHRoaXMuc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICB2YXIgcmVzb2x2ZXIgPSB0aGlzLnN0YXRlID09PSBGVUxGSUxMRUQgPyBvbkZ1bGZpbGxlZCA6IG9uUmVqZWN0ZWQ7XG4gICAgdW53cmFwKHByb21pc2UsIHJlc29sdmVyLCB0aGlzLm91dGNvbWUpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucXVldWUucHVzaChuZXcgUXVldWVJdGVtKHByb21pc2UsIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5mdW5jdGlvbiBRdWV1ZUl0ZW0ocHJvbWlzZSwgb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgaWYgKHR5cGVvZiBvbkZ1bGZpbGxlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMub25GdWxmaWxsZWQgPSBvbkZ1bGZpbGxlZDtcbiAgICB0aGlzLmNhbGxGdWxmaWxsZWQgPSB0aGlzLm90aGVyQ2FsbEZ1bGZpbGxlZDtcbiAgfVxuICBpZiAodHlwZW9mIG9uUmVqZWN0ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLm9uUmVqZWN0ZWQgPSBvblJlamVjdGVkO1xuICAgIHRoaXMuY2FsbFJlamVjdGVkID0gdGhpcy5vdGhlckNhbGxSZWplY3RlZDtcbiAgfVxufVxuUXVldWVJdGVtLnByb3RvdHlwZS5jYWxsRnVsZmlsbGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIGhhbmRsZXJzLnJlc29sdmUodGhpcy5wcm9taXNlLCB2YWx1ZSk7XG59O1xuUXVldWVJdGVtLnByb3RvdHlwZS5vdGhlckNhbGxGdWxmaWxsZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdW53cmFwKHRoaXMucHJvbWlzZSwgdGhpcy5vbkZ1bGZpbGxlZCwgdmFsdWUpO1xufTtcblF1ZXVlSXRlbS5wcm90b3R5cGUuY2FsbFJlamVjdGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIGhhbmRsZXJzLnJlamVjdCh0aGlzLnByb21pc2UsIHZhbHVlKTtcbn07XG5RdWV1ZUl0ZW0ucHJvdG90eXBlLm90aGVyQ2FsbFJlamVjdGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHVud3JhcCh0aGlzLnByb21pc2UsIHRoaXMub25SZWplY3RlZCwgdmFsdWUpO1xufTtcblxuZnVuY3Rpb24gdW53cmFwKHByb21pc2UsIGZ1bmMsIHZhbHVlKSB7XG4gIGltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJldHVyblZhbHVlO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm5WYWx1ZSA9IGZ1bmModmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBoYW5kbGVycy5yZWplY3QocHJvbWlzZSwgZSk7XG4gICAgfVxuICAgIGlmIChyZXR1cm5WYWx1ZSA9PT0gcHJvbWlzZSkge1xuICAgICAgaGFuZGxlcnMucmVqZWN0KHByb21pc2UsIG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCByZXNvbHZlIHByb21pc2Ugd2l0aCBpdHNlbGYnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZXJzLnJlc29sdmUocHJvbWlzZSwgcmV0dXJuVmFsdWUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmhhbmRsZXJzLnJlc29sdmUgPSBmdW5jdGlvbiAoc2VsZiwgdmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IHRyeUNhdGNoKGdldFRoZW4sIHZhbHVlKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICByZXR1cm4gaGFuZGxlcnMucmVqZWN0KHNlbGYsIHJlc3VsdC52YWx1ZSk7XG4gIH1cbiAgdmFyIHRoZW5hYmxlID0gcmVzdWx0LnZhbHVlO1xuXG4gIGlmICh0aGVuYWJsZSkge1xuICAgIHNhZmVseVJlc29sdmVUaGVuYWJsZShzZWxmLCB0aGVuYWJsZSk7XG4gIH0gZWxzZSB7XG4gICAgc2VsZi5zdGF0ZSA9IEZVTEZJTExFRDtcbiAgICBzZWxmLm91dGNvbWUgPSB2YWx1ZTtcbiAgICB2YXIgaSA9IC0xO1xuICAgIHZhciBsZW4gPSBzZWxmLnF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgICBzZWxmLnF1ZXVlW2ldLmNhbGxGdWxmaWxsZWQodmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2VsZjtcbn07XG5oYW5kbGVycy5yZWplY3QgPSBmdW5jdGlvbiAoc2VsZiwgZXJyb3IpIHtcbiAgc2VsZi5zdGF0ZSA9IFJFSkVDVEVEO1xuICBzZWxmLm91dGNvbWUgPSBlcnJvcjtcbiAgdmFyIGkgPSAtMTtcbiAgdmFyIGxlbiA9IHNlbGYucXVldWUubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgc2VsZi5xdWV1ZVtpXS5jYWxsUmVqZWN0ZWQoZXJyb3IpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufTtcblxuZnVuY3Rpb24gZ2V0VGhlbihvYmopIHtcbiAgLy8gTWFrZSBzdXJlIHdlIG9ubHkgYWNjZXNzIHRoZSBhY2Nlc3NvciBvbmNlIGFzIHJlcXVpcmVkIGJ5IHRoZSBzcGVjXG4gIHZhciB0aGVuID0gb2JqICYmIG9iai50aGVuO1xuICBpZiAob2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmdW5jdGlvbiBhcHB5VGhlbigpIHtcbiAgICAgIHRoZW4uYXBwbHkob2JqLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gc2FmZWx5UmVzb2x2ZVRoZW5hYmxlKHNlbGYsIHRoZW5hYmxlKSB7XG4gIC8vIEVpdGhlciBmdWxmaWxsLCByZWplY3Qgb3IgcmVqZWN0IHdpdGggZXJyb3JcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBvbkVycm9yKHZhbHVlKSB7XG4gICAgaWYgKGNhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjYWxsZWQgPSB0cnVlO1xuICAgIGhhbmRsZXJzLnJlamVjdChzZWxmLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBvblN1Y2Nlc3ModmFsdWUpIHtcbiAgICBpZiAoY2FsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxlZCA9IHRydWU7XG4gICAgaGFuZGxlcnMucmVzb2x2ZShzZWxmLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cnlUb1Vud3JhcCgpIHtcbiAgICB0aGVuYWJsZShvblN1Y2Nlc3MsIG9uRXJyb3IpO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IHRyeUNhdGNoKHRyeVRvVW53cmFwKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICBvbkVycm9yKHJlc3VsdC52YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5Q2F0Y2goZnVuYywgdmFsdWUpIHtcbiAgdmFyIG91dCA9IHt9O1xuICB0cnkge1xuICAgIG91dC52YWx1ZSA9IGZ1bmModmFsdWUpO1xuICAgIG91dC5zdGF0dXMgPSAnc3VjY2Vzcyc7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBvdXQuc3RhdHVzID0gJ2Vycm9yJztcbiAgICBvdXQudmFsdWUgPSBlO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cblByb21pc2UucmVzb2x2ZSA9IHJlc29sdmU7XG5mdW5jdGlvbiByZXNvbHZlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIHRoaXMpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGhhbmRsZXJzLnJlc29sdmUobmV3IHRoaXMoSU5URVJOQUwpLCB2YWx1ZSk7XG59XG5cblByb21pc2UucmVqZWN0ID0gcmVqZWN0O1xuZnVuY3Rpb24gcmVqZWN0KHJlYXNvbikge1xuICB2YXIgcHJvbWlzZSA9IG5ldyB0aGlzKElOVEVSTkFMKTtcbiAgcmV0dXJuIGhhbmRsZXJzLnJlamVjdChwcm9taXNlLCByZWFzb24pO1xufVxuXG5Qcm9taXNlLmFsbCA9IGFsbDtcbmZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaXRlcmFibGUpICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ211c3QgYmUgYW4gYXJyYXknKSk7XG4gIH1cblxuICB2YXIgbGVuID0gaXRlcmFibGUubGVuZ3RoO1xuICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gIGlmICghbGVuKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZShbXSk7XG4gIH1cblxuICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KGxlbik7XG4gIHZhciByZXNvbHZlZCA9IDA7XG4gIHZhciBpID0gLTE7XG4gIHZhciBwcm9taXNlID0gbmV3IHRoaXMoSU5URVJOQUwpO1xuXG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBhbGxSZXNvbHZlcihpdGVyYWJsZVtpXSwgaSk7XG4gIH1cbiAgcmV0dXJuIHByb21pc2U7XG4gIGZ1bmN0aW9uIGFsbFJlc29sdmVyKHZhbHVlLCBpKSB7XG4gICAgc2VsZi5yZXNvbHZlKHZhbHVlKS50aGVuKHJlc29sdmVGcm9tQWxsLCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgIGhhbmRsZXJzLnJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gcmVzb2x2ZUZyb21BbGwob3V0VmFsdWUpIHtcbiAgICAgIHZhbHVlc1tpXSA9IG91dFZhbHVlO1xuICAgICAgaWYgKCsrcmVzb2x2ZWQgPT09IGxlbiAmJiAhY2FsbGVkKSB7XG4gICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgIGhhbmRsZXJzLnJlc29sdmUocHJvbWlzZSwgdmFsdWVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuUHJvbWlzZS5yYWNlID0gcmFjZTtcbmZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGl0ZXJhYmxlKSAhPT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgIHJldHVybiB0aGlzLnJlamVjdChuZXcgVHlwZUVycm9yKCdtdXN0IGJlIGFuIGFycmF5JykpO1xuICB9XG5cbiAgdmFyIGxlbiA9IGl0ZXJhYmxlLmxlbmd0aDtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICBpZiAoIWxlbikge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmUoW10pO1xuICB9XG5cbiAgdmFyIGkgPSAtMTtcbiAgdmFyIHByb21pc2UgPSBuZXcgdGhpcyhJTlRFUk5BTCk7XG5cbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIHJlc29sdmVyKGl0ZXJhYmxlW2ldKTtcbiAgfVxuICByZXR1cm4gcHJvbWlzZTtcbiAgZnVuY3Rpb24gcmVzb2x2ZXIodmFsdWUpIHtcbiAgICBzZWxmLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICBoYW5kbGVycy5yZXNvbHZlKHByb21pc2UsIHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgIGhhbmRsZXJzLnJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxufSx7XCIxXCI6MX1dLDM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChnbG9iYWwpe1xuJ3VzZSBzdHJpY3QnO1xuaWYgKHR5cGVvZiBnbG9iYWwuUHJvbWlzZSAhPT0gJ2Z1bmN0aW9uJykge1xuICBnbG9iYWwuUHJvbWlzZSA9IF9kZXJlcV8oMik7XG59XG5cbn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxufSx7XCIyXCI6Mn1dLDQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIGdldElEQigpIHtcbiAgICAvKiBnbG9iYWwgaW5kZXhlZERCLHdlYmtpdEluZGV4ZWREQixtb3pJbmRleGVkREIsT0luZGV4ZWREQixtc0luZGV4ZWREQiAqL1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5kZXhlZERCICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4ZWREQjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHdlYmtpdEluZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB3ZWJraXRJbmRleGVkREI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBtb3pJbmRleGVkREIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbW96SW5kZXhlZERCO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgT0luZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBPSW5kZXhlZERCO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbXNJbmRleGVkREIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbXNJbmRleGVkREI7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG59XG5cbnZhciBpZGIgPSBnZXRJREIoKTtcblxuZnVuY3Rpb24gaXNJbmRleGVkREJWYWxpZCgpIHtcbiAgICB0cnkge1xuICAgICAgICAvLyBJbml0aWFsaXplIEluZGV4ZWREQjsgZmFsbCBiYWNrIHRvIHZlbmRvci1wcmVmaXhlZCB2ZXJzaW9uc1xuICAgICAgICAvLyBpZiBuZWVkZWQuXG4gICAgICAgIGlmICghaWRiIHx8ICFpZGIub3Blbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIG1pbWljIFBvdWNoREIgaGVyZTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2UgdGVzdCBmb3Igb3BlbkRhdGFiYXNlIGJlY2F1c2UgSUUgTW9iaWxlIGlkZW50aWZpZXMgaXRzZWxmXG4gICAgICAgIC8vIGFzIFNhZmFyaS4gT2ggdGhlIGx1bHouLi5cbiAgICAgICAgdmFyIGlzU2FmYXJpID0gdHlwZW9mIG9wZW5EYXRhYmFzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgLyhTYWZhcml8aVBob25lfGlQYWR8aVBvZCkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgIS9DaHJvbWUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgIS9CbGFja0JlcnJ5Ly50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7XG5cbiAgICAgICAgdmFyIGhhc0ZldGNoID0gdHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nICYmIGZldGNoLnRvU3RyaW5nKCkuaW5kZXhPZignW25hdGl2ZSBjb2RlJykgIT09IC0xO1xuXG4gICAgICAgIC8vIFNhZmFyaSA8MTAuMSBkb2VzIG5vdCBtZWV0IG91ciByZXF1aXJlbWVudHMgZm9yIElEQiBzdXBwb3J0XG4gICAgICAgIC8vIChzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9wb3VjaGRiL3BvdWNoZGIvaXNzdWVzLzU1NzIpLlxuICAgICAgICAvLyBTYWZhcmkgMTAuMSBzaGlwcGVkIHdpdGggZmV0Y2gsIHdlIGNhbiB1c2UgdGhhdCB0byBkZXRlY3QgaXQuXG4gICAgICAgIC8vIE5vdGU6IHRoaXMgY3JlYXRlcyBpc3N1ZXMgd2l0aCBgd2luZG93LmZldGNoYCBwb2x5ZmlsbHMgYW5kXG4gICAgICAgIC8vIG92ZXJyaWRlczsgc2VlOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbG9jYWxGb3JhZ2UvbG9jYWxGb3JhZ2UvaXNzdWVzLzg1NlxuICAgICAgICByZXR1cm4gKCFpc1NhZmFyaSB8fCBoYXNGZXRjaCkgJiYgdHlwZW9mIGluZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgLy8gc29tZSBvdXRkYXRlZCBpbXBsZW1lbnRhdGlvbnMgb2YgSURCIHRoYXQgYXBwZWFyIG9uIFNhbXN1bmdcbiAgICAgICAgLy8gYW5kIEhUQyBBbmRyb2lkIGRldmljZXMgPDQuNCBhcmUgbWlzc2luZyBJREJLZXlSYW5nZVxuICAgICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2xvY2FsRm9yYWdlL2lzc3Vlcy8xMjhcbiAgICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9sb2NhbEZvcmFnZS9pc3N1ZXMvMjcyXG4gICAgICAgIHR5cGVvZiBJREJLZXlSYW5nZSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG4vLyBBYnN0cmFjdHMgY29uc3RydWN0aW5nIGEgQmxvYiBvYmplY3QsIHNvIGl0IGFsc28gd29ya3MgaW4gb2xkZXJcbi8vIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGUgbmF0aXZlIEJsb2IgY29uc3RydWN0b3IuIChpLmUuXG4vLyBvbGQgUXRXZWJLaXQgdmVyc2lvbnMsIGF0IGxlYXN0KS5cbi8vIEFic3RyYWN0cyBjb25zdHJ1Y3RpbmcgYSBCbG9iIG9iamVjdCwgc28gaXQgYWxzbyB3b3JrcyBpbiBvbGRlclxuLy8gYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZSBuYXRpdmUgQmxvYiBjb25zdHJ1Y3Rvci4gKGkuZS5cbi8vIG9sZCBRdFdlYktpdCB2ZXJzaW9ucywgYXQgbGVhc3QpLlxuZnVuY3Rpb24gY3JlYXRlQmxvYihwYXJ0cywgcHJvcGVydGllcykge1xuICAgIC8qIGdsb2JhbCBCbG9iQnVpbGRlcixNU0Jsb2JCdWlsZGVyLE1vekJsb2JCdWlsZGVyLFdlYktpdEJsb2JCdWlsZGVyICovXG4gICAgcGFydHMgPSBwYXJ0cyB8fCBbXTtcbiAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCB7fTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2IocGFydHMsIHByb3BlcnRpZXMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUubmFtZSAhPT0gJ1R5cGVFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIEJ1aWxkZXIgPSB0eXBlb2YgQmxvYkJ1aWxkZXIgIT09ICd1bmRlZmluZWQnID8gQmxvYkJ1aWxkZXIgOiB0eXBlb2YgTVNCbG9iQnVpbGRlciAhPT0gJ3VuZGVmaW5lZCcgPyBNU0Jsb2JCdWlsZGVyIDogdHlwZW9mIE1vekJsb2JCdWlsZGVyICE9PSAndW5kZWZpbmVkJyA/IE1vekJsb2JCdWlsZGVyIDogV2ViS2l0QmxvYkJ1aWxkZXI7XG4gICAgICAgIHZhciBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQocGFydHNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IocHJvcGVydGllcy50eXBlKTtcbiAgICB9XG59XG5cbi8vIFRoaXMgaXMgQ29tbW9uSlMgYmVjYXVzZSBsaWUgaXMgYW4gZXh0ZXJuYWwgZGVwZW5kZW5jeSwgc28gUm9sbHVwXG4vLyBjYW4ganVzdCBpZ25vcmUgaXQuXG5pZiAodHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gSW4gdGhlIFwibm9wcm9taXNlc1wiIGJ1aWxkIHRoaXMgd2lsbCBqdXN0IHRocm93IGlmIHlvdSBkb24ndCBoYXZlXG4gICAgLy8gYSBnbG9iYWwgcHJvbWlzZSBvYmplY3QsIGJ1dCBpdCB3b3VsZCB0aHJvdyBhbnl3YXkgbGF0ZXIuXG4gICAgX2RlcmVxXygzKTtcbn1cbnZhciBQcm9taXNlJDEgPSBQcm9taXNlO1xuXG5mdW5jdGlvbiBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVUd29DYWxsYmFja3MocHJvbWlzZSwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByb21pc2UudGhlbihjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBlcnJvckNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByb21pc2VbXCJjYXRjaFwiXShlcnJvckNhbGxiYWNrKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUtleShrZXkpIHtcbiAgICAvLyBDYXN0IHRoZSBrZXkgdG8gYSBzdHJpbmcsIGFzIHRoYXQncyBhbGwgd2UgY2FuIHNldCBhcyBhIGtleS5cbiAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGtleSArICcgdXNlZCBhcyBhIGtleSwgYnV0IGl0IGlzIG5vdCBhIHN0cmluZy4nKTtcbiAgICAgICAga2V5ID0gU3RyaW5nKGtleSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGtleTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2FsbGJhY2soKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggJiYgdHlwZW9mIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgfVxufVxuXG4vLyBTb21lIGNvZGUgb3JpZ2luYWxseSBmcm9tIGFzeW5jX3N0b3JhZ2UuanMgaW5cbi8vIFtHYWlhXShodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS1iMmcvZ2FpYSkuXG5cbnZhciBERVRFQ1RfQkxPQl9TVVBQT1JUX1NUT1JFID0gJ2xvY2FsLWZvcmFnZS1kZXRlY3QtYmxvYi1zdXBwb3J0JztcbnZhciBzdXBwb3J0c0Jsb2JzID0gdm9pZCAwO1xudmFyIGRiQ29udGV4dHMgPSB7fTtcbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIFRyYW5zYWN0aW9uIE1vZGVzXG52YXIgUkVBRF9PTkxZID0gJ3JlYWRvbmx5JztcbnZhciBSRUFEX1dSSVRFID0gJ3JlYWR3cml0ZSc7XG5cbi8vIFRyYW5zZm9ybSBhIGJpbmFyeSBzdHJpbmcgdG8gYW4gYXJyYXkgYnVmZmVyLCBiZWNhdXNlIG90aGVyd2lzZVxuLy8gd2VpcmQgc3R1ZmYgaGFwcGVucyB3aGVuIHlvdSB0cnkgdG8gd29yayB3aXRoIHRoZSBiaW5hcnkgc3RyaW5nIGRpcmVjdGx5LlxuLy8gSXQgaXMga25vd24uXG4vLyBGcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTQ5Njc2NDcvIChjb250aW51ZXMgb24gbmV4dCBsaW5lKVxuLy8gZW5jb2RlLWRlY29kZS1pbWFnZS13aXRoLWJhc2U2NC1icmVha3MtaW1hZ2UgKDIwMTMtMDQtMjEpXG5mdW5jdGlvbiBfYmluU3RyaW5nVG9BcnJheUJ1ZmZlcihiaW4pIHtcbiAgICB2YXIgbGVuZ3RoID0gYmluLmxlbmd0aDtcbiAgICB2YXIgYnVmID0gbmV3IEFycmF5QnVmZmVyKGxlbmd0aCk7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KGJ1Zik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBhcnJbaV0gPSBiaW4uY2hhckNvZGVBdChpKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1Zjtcbn1cblxuLy9cbi8vIEJsb2JzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGFsbCB2ZXJzaW9ucyBvZiBJbmRleGVkREIsIG5vdGFibHlcbi8vIENocm9tZSA8MzcgYW5kIEFuZHJvaWQgPDUuIEluIHRob3NlIHZlcnNpb25zLCBzdG9yaW5nIGEgYmxvYiB3aWxsIHRocm93LlxuLy9cbi8vIFZhcmlvdXMgb3RoZXIgYmxvYiBidWdzIGV4aXN0IGluIENocm9tZSB2MzctNDIgKGluY2x1c2l2ZSkuXG4vLyBEZXRlY3RpbmcgdGhlbSBpcyBleHBlbnNpdmUgYW5kIGNvbmZ1c2luZyB0byB1c2VycywgYW5kIENocm9tZSAzNy00MlxuLy8gaXMgYXQgdmVyeSBsb3cgdXNhZ2Ugd29ybGR3aWRlLCBzbyB3ZSBkbyBhIGhhY2t5IHVzZXJBZ2VudCBjaGVjayBpbnN0ZWFkLlxuLy9cbi8vIGNvbnRlbnQtdHlwZSBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00MDgxMjBcbi8vIDQwNCBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDc5MTZcbi8vIEZpbGVSZWFkZXIgYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ3ODM2XG4vL1xuLy8gQ29kZSBib3Jyb3dlZCBmcm9tIFBvdWNoREIuIFNlZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3VjaGRiL3BvdWNoZGIvYmxvYi9tYXN0ZXIvcGFja2FnZXMvbm9kZV9tb2R1bGVzL3BvdWNoZGItYWRhcHRlci1pZGIvc3JjL2Jsb2JTdXBwb3J0LmpzXG4vL1xuZnVuY3Rpb24gX2NoZWNrQmxvYlN1cHBvcnRXaXRob3V0Q2FjaGluZyhpZGIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICB2YXIgdHhuID0gaWRiLnRyYW5zYWN0aW9uKERFVEVDVF9CTE9CX1NVUFBPUlRfU1RPUkUsIFJFQURfV1JJVEUpO1xuICAgICAgICB2YXIgYmxvYiA9IGNyZWF0ZUJsb2IoWycnXSk7XG4gICAgICAgIHR4bi5vYmplY3RTdG9yZShERVRFQ1RfQkxPQl9TVVBQT1JUX1NUT1JFKS5wdXQoYmxvYiwgJ2tleScpO1xuXG4gICAgICAgIHR4bi5vbmFib3J0ID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSB0cmFuc2FjdGlvbiBhYm9ydHMgbm93IGl0cyBkdWUgdG8gbm90IGJlaW5nIGFibGUgdG9cbiAgICAgICAgICAgIC8vIHdyaXRlIHRvIHRoZSBkYXRhYmFzZSwgbGlrZWx5IGR1ZSB0byB0aGUgZGlzayBiZWluZyBmdWxsXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdHhuLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbWF0Y2hlZENocm9tZSA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgICAgICAgICAgdmFyIG1hdGNoZWRFZGdlID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLy8pO1xuICAgICAgICAgICAgLy8gTVMgRWRnZSBwcmV0ZW5kcyB0byBiZSBDaHJvbWUgNDI6XG4gICAgICAgICAgICAvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2hoODY5MzAxJTI4dj12cy44NSUyOS5hc3B4XG4gICAgICAgICAgICByZXNvbHZlKG1hdGNoZWRFZGdlIHx8ICFtYXRjaGVkQ2hyb21lIHx8IHBhcnNlSW50KG1hdGNoZWRDaHJvbWVbMV0sIDEwKSA+PSA0Myk7XG4gICAgICAgIH07XG4gICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gZXJyb3IsIHNvIGFzc3VtZSB1bnN1cHBvcnRlZFxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBfY2hlY2tCbG9iU3VwcG9ydChpZGIpIHtcbiAgICBpZiAodHlwZW9mIHN1cHBvcnRzQmxvYnMgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZSQxLnJlc29sdmUoc3VwcG9ydHNCbG9icyk7XG4gICAgfVxuICAgIHJldHVybiBfY2hlY2tCbG9iU3VwcG9ydFdpdGhvdXRDYWNoaW5nKGlkYikudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgc3VwcG9ydHNCbG9icyA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gc3VwcG9ydHNCbG9icztcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gX2RlZmVyUmVhZGluZXNzKGRiSW5mbykge1xuICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW2RiSW5mby5uYW1lXTtcblxuICAgIC8vIENyZWF0ZSBhIGRlZmVycmVkIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgZGF0YWJhc2Ugb3BlcmF0aW9uLlxuICAgIHZhciBkZWZlcnJlZE9wZXJhdGlvbiA9IHt9O1xuXG4gICAgZGVmZXJyZWRPcGVyYXRpb24ucHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBkZWZlcnJlZE9wZXJhdGlvbi5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgZGVmZXJyZWRPcGVyYXRpb24ucmVqZWN0ID0gcmVqZWN0O1xuICAgIH0pO1xuXG4gICAgLy8gRW5xdWV1ZSB0aGUgZGVmZXJyZWQgb3BlcmF0aW9uLlxuICAgIGRiQ29udGV4dC5kZWZlcnJlZE9wZXJhdGlvbnMucHVzaChkZWZlcnJlZE9wZXJhdGlvbik7XG5cbiAgICAvLyBDaGFpbiBpdHMgcHJvbWlzZSB0byB0aGUgZGF0YWJhc2UgcmVhZGluZXNzLlxuICAgIGlmICghZGJDb250ZXh0LmRiUmVhZHkpIHtcbiAgICAgICAgZGJDb250ZXh0LmRiUmVhZHkgPSBkZWZlcnJlZE9wZXJhdGlvbi5wcm9taXNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRiQ29udGV4dC5kYlJlYWR5ID0gZGJDb250ZXh0LmRiUmVhZHkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmZXJyZWRPcGVyYXRpb24ucHJvbWlzZTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfYWR2YW5jZVJlYWRpbmVzcyhkYkluZm8pIHtcbiAgICB2YXIgZGJDb250ZXh0ID0gZGJDb250ZXh0c1tkYkluZm8ubmFtZV07XG5cbiAgICAvLyBEZXF1ZXVlIGEgZGVmZXJyZWQgb3BlcmF0aW9uLlxuICAgIHZhciBkZWZlcnJlZE9wZXJhdGlvbiA9IGRiQ29udGV4dC5kZWZlcnJlZE9wZXJhdGlvbnMucG9wKCk7XG5cbiAgICAvLyBSZXNvbHZlIGl0cyBwcm9taXNlICh3aGljaCBpcyBwYXJ0IG9mIHRoZSBkYXRhYmFzZSByZWFkaW5lc3NcbiAgICAvLyBjaGFpbiBvZiBwcm9taXNlcykuXG4gICAgaWYgKGRlZmVycmVkT3BlcmF0aW9uKSB7XG4gICAgICAgIGRlZmVycmVkT3BlcmF0aW9uLnJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuIGRlZmVycmVkT3BlcmF0aW9uLnByb21pc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfcmVqZWN0UmVhZGluZXNzKGRiSW5mbywgZXJyKSB7XG4gICAgdmFyIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWVdO1xuXG4gICAgLy8gRGVxdWV1ZSBhIGRlZmVycmVkIG9wZXJhdGlvbi5cbiAgICB2YXIgZGVmZXJyZWRPcGVyYXRpb24gPSBkYkNvbnRleHQuZGVmZXJyZWRPcGVyYXRpb25zLnBvcCgpO1xuXG4gICAgLy8gUmVqZWN0IGl0cyBwcm9taXNlICh3aGljaCBpcyBwYXJ0IG9mIHRoZSBkYXRhYmFzZSByZWFkaW5lc3NcbiAgICAvLyBjaGFpbiBvZiBwcm9taXNlcykuXG4gICAgaWYgKGRlZmVycmVkT3BlcmF0aW9uKSB7XG4gICAgICAgIGRlZmVycmVkT3BlcmF0aW9uLnJlamVjdChlcnIpO1xuICAgICAgICByZXR1cm4gZGVmZXJyZWRPcGVyYXRpb24ucHJvbWlzZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIF9nZXRDb25uZWN0aW9uKGRiSW5mbywgdXBncmFkZU5lZWRlZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZGJDb250ZXh0c1tkYkluZm8ubmFtZV0gPSBkYkNvbnRleHRzW2RiSW5mby5uYW1lXSB8fCBjcmVhdGVEYkNvbnRleHQoKTtcblxuICAgICAgICBpZiAoZGJJbmZvLmRiKSB7XG4gICAgICAgICAgICBpZiAodXBncmFkZU5lZWRlZCkge1xuICAgICAgICAgICAgICAgIF9kZWZlclJlYWRpbmVzcyhkYkluZm8pO1xuICAgICAgICAgICAgICAgIGRiSW5mby5kYi5jbG9zZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShkYkluZm8uZGIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRiQXJncyA9IFtkYkluZm8ubmFtZV07XG5cbiAgICAgICAgaWYgKHVwZ3JhZGVOZWVkZWQpIHtcbiAgICAgICAgICAgIGRiQXJncy5wdXNoKGRiSW5mby52ZXJzaW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvcGVucmVxID0gaWRiLm9wZW4uYXBwbHkoaWRiLCBkYkFyZ3MpO1xuXG4gICAgICAgIGlmICh1cGdyYWRlTmVlZGVkKSB7XG4gICAgICAgICAgICBvcGVucmVxLm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRiID0gb3BlbnJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLm9sZFZlcnNpb24gPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkZWQgd2hlbiBzdXBwb3J0IGZvciBibG9iIHNoaW1zIHdhcyBhZGRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoREVURUNUX0JMT0JfU1VQUE9SVF9TVE9SRSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXgubmFtZSA9PT0gJ0NvbnN0cmFpbnRFcnJvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGRhdGFiYXNlIFwiJyArIGRiSW5mby5uYW1lICsgJ1wiJyArICcgaGFzIGJlZW4gdXBncmFkZWQgZnJvbSB2ZXJzaW9uICcgKyBlLm9sZFZlcnNpb24gKyAnIHRvIHZlcnNpb24gJyArIGUubmV3VmVyc2lvbiArICcsIGJ1dCB0aGUgc3RvcmFnZSBcIicgKyBkYkluZm8uc3RvcmVOYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3BlbnJlcS5vbmVycm9yID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJlamVjdChvcGVucmVxLmVycm9yKTtcbiAgICAgICAgfTtcblxuICAgICAgICBvcGVucmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYiA9IG9wZW5yZXEucmVzdWx0O1xuICAgICAgICAgICAgZGIub252ZXJzaW9uY2hhbmdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyZWQgd2hlbiB0aGUgZGF0YWJhc2UgaXMgbW9kaWZpZWQgKGUuZy4gYWRkaW5nIGFuIG9iamVjdFN0b3JlKSBvclxuICAgICAgICAgICAgICAgIC8vIGRlbGV0ZWQgKGV2ZW4gd2hlbiBpbml0aWF0ZWQgYnkgb3RoZXIgc2Vzc2lvbnMgaW4gZGlmZmVyZW50IHRhYnMpLlxuICAgICAgICAgICAgICAgIC8vIENsb3NpbmcgdGhlIGNvbm5lY3Rpb24gaGVyZSBwcmV2ZW50cyB0aG9zZSBvcGVyYXRpb25zIGZyb20gYmVpbmcgYmxvY2tlZC5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZGF0YWJhc2UgaXMgYWNjZXNzZWQgYWdhaW4gbGF0ZXIgYnkgdGhpcyBpbnN0YW5jZSwgdGhlIGNvbm5lY3Rpb25cbiAgICAgICAgICAgICAgICAvLyB3aWxsIGJlIHJlb3BlbmVkIG9yIHRoZSBkYXRhYmFzZSByZWNyZWF0ZWQgYXMgbmVlZGVkLlxuICAgICAgICAgICAgICAgIGUudGFyZ2V0LmNsb3NlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzb2x2ZShkYik7XG4gICAgICAgICAgICBfYWR2YW5jZVJlYWRpbmVzcyhkYkluZm8pO1xuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBfZ2V0T3JpZ2luYWxDb25uZWN0aW9uKGRiSW5mbykge1xuICAgIHJldHVybiBfZ2V0Q29ubmVjdGlvbihkYkluZm8sIGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gX2dldFVwZ3JhZGVkQ29ubmVjdGlvbihkYkluZm8pIHtcbiAgICByZXR1cm4gX2dldENvbm5lY3Rpb24oZGJJbmZvLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gX2lzVXBncmFkZU5lZWRlZChkYkluZm8sIGRlZmF1bHRWZXJzaW9uKSB7XG4gICAgaWYgKCFkYkluZm8uZGIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGlzTmV3U3RvcmUgPSAhZGJJbmZvLmRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgdmFyIGlzRG93bmdyYWRlID0gZGJJbmZvLnZlcnNpb24gPCBkYkluZm8uZGIudmVyc2lvbjtcbiAgICB2YXIgaXNVcGdyYWRlID0gZGJJbmZvLnZlcnNpb24gPiBkYkluZm8uZGIudmVyc2lvbjtcblxuICAgIGlmIChpc0Rvd25ncmFkZSkge1xuICAgICAgICAvLyBJZiB0aGUgdmVyc2lvbiBpcyBub3QgdGhlIGRlZmF1bHQgb25lXG4gICAgICAgIC8vIHRoZW4gd2FybiBmb3IgaW1wb3NzaWJsZSBkb3duZ3JhZGUuXG4gICAgICAgIGlmIChkYkluZm8udmVyc2lvbiAhPT0gZGVmYXVsdFZlcnNpb24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGRhdGFiYXNlIFwiJyArIGRiSW5mby5uYW1lICsgJ1wiJyArIFwiIGNhbid0IGJlIGRvd25ncmFkZWQgZnJvbSB2ZXJzaW9uIFwiICsgZGJJbmZvLmRiLnZlcnNpb24gKyAnIHRvIHZlcnNpb24gJyArIGRiSW5mby52ZXJzaW9uICsgJy4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBbGlnbiB0aGUgdmVyc2lvbnMgdG8gcHJldmVudCBlcnJvcnMuXG4gICAgICAgIGRiSW5mby52ZXJzaW9uID0gZGJJbmZvLmRiLnZlcnNpb247XG4gICAgfVxuXG4gICAgaWYgKGlzVXBncmFkZSB8fCBpc05ld1N0b3JlKSB7XG4gICAgICAgIC8vIElmIHRoZSBzdG9yZSBpcyBuZXcgdGhlbiBpbmNyZW1lbnQgdGhlIHZlcnNpb24gKGlmIG5lZWRlZCkuXG4gICAgICAgIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIGFuIFwidXBncmFkZW5lZWRlZFwiIGV2ZW50IHdoaWNoIGlzIHJlcXVpcmVkXG4gICAgICAgIC8vIGZvciBjcmVhdGluZyBhIHN0b3JlLlxuICAgICAgICBpZiAoaXNOZXdTdG9yZSkge1xuICAgICAgICAgICAgdmFyIGluY1ZlcnNpb24gPSBkYkluZm8uZGIudmVyc2lvbiArIDE7XG4gICAgICAgICAgICBpZiAoaW5jVmVyc2lvbiA+IGRiSW5mby52ZXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgZGJJbmZvLnZlcnNpb24gPSBpbmNWZXJzaW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBlbmNvZGUgYSBibG9iIGZvciBpbmRleGVkZGIgZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnQgYmxvYnNcbmZ1bmN0aW9uIF9lbmNvZGVCbG9iKGJsb2IpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICB2YXIgYmFzZTY0ID0gYnRvYShlLnRhcmdldC5yZXN1bHQgfHwgJycpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgX19sb2NhbF9mb3JhZ2VfZW5jb2RlZF9ibG9iOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRhdGE6IGJhc2U2NCxcbiAgICAgICAgICAgICAgICB0eXBlOiBibG9iLnR5cGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKGJsb2IpO1xuICAgIH0pO1xufVxuXG4vLyBkZWNvZGUgYW4gZW5jb2RlZCBibG9iXG5mdW5jdGlvbiBfZGVjb2RlQmxvYihlbmNvZGVkQmxvYikge1xuICAgIHZhciBhcnJheUJ1ZmYgPSBfYmluU3RyaW5nVG9BcnJheUJ1ZmZlcihhdG9iKGVuY29kZWRCbG9iLmRhdGEpKTtcbiAgICByZXR1cm4gY3JlYXRlQmxvYihbYXJyYXlCdWZmXSwgeyB0eXBlOiBlbmNvZGVkQmxvYi50eXBlIH0pO1xufVxuXG4vLyBpcyB0aGlzIG9uZSBvZiBvdXIgZmFuY3kgZW5jb2RlZCBibG9icz9cbmZ1bmN0aW9uIF9pc0VuY29kZWRCbG9iKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLl9fbG9jYWxfZm9yYWdlX2VuY29kZWRfYmxvYjtcbn1cblxuLy8gU3BlY2lhbGl6ZSB0aGUgZGVmYXVsdCBgcmVhZHkoKWAgZnVuY3Rpb24gYnkgbWFraW5nIGl0IGRlcGVuZGVudFxuLy8gb24gdGhlIGN1cnJlbnQgZGF0YWJhc2Ugb3BlcmF0aW9ucy4gVGh1cywgdGhlIGRyaXZlciB3aWxsIGJlIGFjdHVhbGx5XG4vLyByZWFkeSB3aGVuIGl0J3MgYmVlbiBpbml0aWFsaXplZCAoZGVmYXVsdCkgKmFuZCogdGhlcmUgYXJlIG5vIHBlbmRpbmdcbi8vIG9wZXJhdGlvbnMgb24gdGhlIGRhdGFiYXNlIChpbml0aWF0ZWQgYnkgc29tZSBvdGhlciBpbnN0YW5jZXMpLlxuZnVuY3Rpb24gX2Z1bGx5UmVhZHkoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYuX2luaXRSZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGJDb250ZXh0ID0gZGJDb250ZXh0c1tzZWxmLl9kYkluZm8ubmFtZV07XG5cbiAgICAgICAgaWYgKGRiQ29udGV4dCAmJiBkYkNvbnRleHQuZGJSZWFkeSkge1xuICAgICAgICAgICAgcmV0dXJuIGRiQ29udGV4dC5kYlJlYWR5O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBleGVjdXRlVHdvQ2FsbGJhY2tzKHByb21pc2UsIGNhbGxiYWNrLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIFRyeSB0byBlc3RhYmxpc2ggYSBuZXcgZGIgY29ubmVjdGlvbiB0byByZXBsYWNlIHRoZVxuLy8gY3VycmVudCBvbmUgd2hpY2ggaXMgYnJva2VuIChpLmUuIGV4cGVyaWVuY2luZ1xuLy8gSW52YWxpZFN0YXRlRXJyb3Igd2hpbGUgY3JlYXRpbmcgYSB0cmFuc2FjdGlvbikuXG5mdW5jdGlvbiBfdHJ5UmVjb25uZWN0KGRiSW5mbykge1xuICAgIF9kZWZlclJlYWRpbmVzcyhkYkluZm8pO1xuXG4gICAgdmFyIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWVdO1xuICAgIHZhciBmb3JhZ2VzID0gZGJDb250ZXh0LmZvcmFnZXM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGZvcmFnZSA9IGZvcmFnZXNbaV07XG4gICAgICAgIGlmIChmb3JhZ2UuX2RiSW5mby5kYikge1xuICAgICAgICAgICAgZm9yYWdlLl9kYkluZm8uZGIuY2xvc2UoKTtcbiAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLmRiID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkYkluZm8uZGIgPSBudWxsO1xuXG4gICAgcmV0dXJuIF9nZXRPcmlnaW5hbENvbm5lY3Rpb24oZGJJbmZvKS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICBkYkluZm8uZGIgPSBkYjtcbiAgICAgICAgaWYgKF9pc1VwZ3JhZGVOZWVkZWQoZGJJbmZvKSkge1xuICAgICAgICAgICAgLy8gUmVvcGVuIHRoZSBkYXRhYmFzZSBmb3IgdXBncmFkaW5nLlxuICAgICAgICAgICAgcmV0dXJuIF9nZXRVcGdyYWRlZENvbm5lY3Rpb24oZGJJbmZvKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGI7XG4gICAgfSkudGhlbihmdW5jdGlvbiAoZGIpIHtcbiAgICAgICAgLy8gc3RvcmUgdGhlIGxhdGVzdCBkYiByZWZlcmVuY2VcbiAgICAgICAgLy8gaW4gY2FzZSB0aGUgZGIgd2FzIHVwZ3JhZGVkXG4gICAgICAgIGRiSW5mby5kYiA9IGRiQ29udGV4dC5kYiA9IGRiO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZvcmFnZXNbaV0uX2RiSW5mby5kYiA9IGRiO1xuICAgICAgICB9XG4gICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIF9yZWplY3RSZWFkaW5lc3MoZGJJbmZvLCBlcnIpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG59XG5cbi8vIEZGIGRvZXNuJ3QgbGlrZSBQcm9taXNlcyAobWljcm8tdGFza3MpIGFuZCBJRERCIHN0b3JlIG9wZXJhdGlvbnMsXG4vLyBzbyB3ZSBoYXZlIHRvIGRvIGl0IHdpdGggY2FsbGJhY2tzXG5mdW5jdGlvbiBjcmVhdGVUcmFuc2FjdGlvbihkYkluZm8sIG1vZGUsIGNhbGxiYWNrLCByZXRyaWVzKSB7XG4gICAgaWYgKHJldHJpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXRyaWVzID0gMTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICB2YXIgdHggPSBkYkluZm8uZGIudHJhbnNhY3Rpb24oZGJJbmZvLnN0b3JlTmFtZSwgbW9kZSk7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHR4KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJldHJpZXMgPiAwICYmICghZGJJbmZvLmRiIHx8IGVyci5uYW1lID09PSAnSW52YWxpZFN0YXRlRXJyb3InIHx8IGVyci5uYW1lID09PSAnTm90Rm91bmRFcnJvcicpKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZSQxLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWRiSW5mby5kYiB8fCBlcnIubmFtZSA9PT0gJ05vdEZvdW5kRXJyb3InICYmICFkYkluZm8uZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhkYkluZm8uc3RvcmVOYW1lKSAmJiBkYkluZm8udmVyc2lvbiA8PSBkYkluZm8uZGIudmVyc2lvbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBpbmNyZWFzZSB0aGUgZGIgdmVyc2lvbiwgdG8gY3JlYXRlIHRoZSBuZXcgT2JqZWN0U3RvcmVcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRiSW5mby5kYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGJJbmZvLnZlcnNpb24gPSBkYkluZm8uZGIudmVyc2lvbiArIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gUmVvcGVuIHRoZSBkYXRhYmFzZSBmb3IgdXBncmFkaW5nLlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2dldFVwZ3JhZGVkQ29ubmVjdGlvbihkYkluZm8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdHJ5UmVjb25uZWN0KGRiSW5mbykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKGRiSW5mbywgbW9kZSwgY2FsbGJhY2ssIHJldHJpZXMgLSAxKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pW1wiY2F0Y2hcIl0oY2FsbGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURiQ29udGV4dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAvLyBSdW5uaW5nIGxvY2FsRm9yYWdlcyBzaGFyaW5nIGEgZGF0YWJhc2UuXG4gICAgICAgIGZvcmFnZXM6IFtdLFxuICAgICAgICAvLyBTaGFyZWQgZGF0YWJhc2UuXG4gICAgICAgIGRiOiBudWxsLFxuICAgICAgICAvLyBEYXRhYmFzZSByZWFkaW5lc3MgKHByb21pc2UpLlxuICAgICAgICBkYlJlYWR5OiBudWxsLFxuICAgICAgICAvLyBEZWZlcnJlZCBvcGVyYXRpb25zIG9uIHRoZSBkYXRhYmFzZS5cbiAgICAgICAgZGVmZXJyZWRPcGVyYXRpb25zOiBbXVxuICAgIH07XG59XG5cbi8vIE9wZW4gdGhlIEluZGV4ZWREQiBkYXRhYmFzZSAoYXV0b21hdGljYWxseSBjcmVhdGVzIG9uZSBpZiBvbmUgZGlkbid0XG4vLyBwcmV2aW91c2x5IGV4aXN0KSwgdXNpbmcgYW55IG9wdGlvbnMgc2V0IGluIHRoZSBjb25maWcuXG5mdW5jdGlvbiBfaW5pdFN0b3JhZ2Uob3B0aW9ucykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgZGJJbmZvID0ge1xuICAgICAgICBkYjogbnVsbFxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBmb3IgKHZhciBpIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGRiSW5mb1tpXSA9IG9wdGlvbnNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgY29udGV4dCBvZiB0aGUgZGF0YWJhc2U7XG4gICAgdmFyIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWVdO1xuXG4gICAgLy8gLi4ub3IgY3JlYXRlIGEgbmV3IGNvbnRleHQuXG4gICAgaWYgKCFkYkNvbnRleHQpIHtcbiAgICAgICAgZGJDb250ZXh0ID0gY3JlYXRlRGJDb250ZXh0KCk7XG4gICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBuZXcgY29udGV4dCBpbiB0aGUgZ2xvYmFsIGNvbnRhaW5lci5cbiAgICAgICAgZGJDb250ZXh0c1tkYkluZm8ubmFtZV0gPSBkYkNvbnRleHQ7XG4gICAgfVxuXG4gICAgLy8gUmVnaXN0ZXIgaXRzZWxmIGFzIGEgcnVubmluZyBsb2NhbEZvcmFnZSBpbiB0aGUgY3VycmVudCBjb250ZXh0LlxuICAgIGRiQ29udGV4dC5mb3JhZ2VzLnB1c2goc2VsZik7XG5cbiAgICAvLyBSZXBsYWNlIHRoZSBkZWZhdWx0IGByZWFkeSgpYCBmdW5jdGlvbiB3aXRoIHRoZSBzcGVjaWFsaXplZCBvbmUuXG4gICAgaWYgKCFzZWxmLl9pbml0UmVhZHkpIHtcbiAgICAgICAgc2VsZi5faW5pdFJlYWR5ID0gc2VsZi5yZWFkeTtcbiAgICAgICAgc2VsZi5yZWFkeSA9IF9mdWxseVJlYWR5O1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhbiBhcnJheSBvZiBpbml0aWFsaXphdGlvbiBzdGF0ZXMgb2YgdGhlIHJlbGF0ZWQgbG9jYWxGb3JhZ2VzLlxuICAgIHZhciBpbml0UHJvbWlzZXMgPSBbXTtcblxuICAgIGZ1bmN0aW9uIGlnbm9yZUVycm9ycygpIHtcbiAgICAgICAgLy8gRG9uJ3QgaGFuZGxlIGVycm9ycyBoZXJlLFxuICAgICAgICAvLyBqdXN0IG1ha2VzIHN1cmUgcmVsYXRlZCBsb2NhbEZvcmFnZXMgYXJlbid0IHBlbmRpbmcuXG4gICAgICAgIHJldHVybiBQcm9taXNlJDEucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgZGJDb250ZXh0LmZvcmFnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGZvcmFnZSA9IGRiQ29udGV4dC5mb3JhZ2VzW2pdO1xuICAgICAgICBpZiAoZm9yYWdlICE9PSBzZWxmKSB7XG4gICAgICAgICAgICAvLyBEb24ndCB3YWl0IGZvciBpdHNlbGYuLi5cbiAgICAgICAgICAgIGluaXRQcm9taXNlcy5wdXNoKGZvcmFnZS5faW5pdFJlYWR5KClbXCJjYXRjaFwiXShpZ25vcmVFcnJvcnMpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRha2UgYSBzbmFwc2hvdCBvZiB0aGUgcmVsYXRlZCBsb2NhbEZvcmFnZXMuXG4gICAgdmFyIGZvcmFnZXMgPSBkYkNvbnRleHQuZm9yYWdlcy5zbGljZSgwKTtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIGNvbm5lY3Rpb24gcHJvY2VzcyBvbmx5IHdoZW5cbiAgICAvLyBhbGwgdGhlIHJlbGF0ZWQgbG9jYWxGb3JhZ2VzIGFyZW4ndCBwZW5kaW5nLlxuICAgIHJldHVybiBQcm9taXNlJDEuYWxsKGluaXRQcm9taXNlcykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRiSW5mby5kYiA9IGRiQ29udGV4dC5kYjtcbiAgICAgICAgLy8gR2V0IHRoZSBjb25uZWN0aW9uIG9yIG9wZW4gYSBuZXcgb25lIHdpdGhvdXQgdXBncmFkZS5cbiAgICAgICAgcmV0dXJuIF9nZXRPcmlnaW5hbENvbm5lY3Rpb24oZGJJbmZvKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICBkYkluZm8uZGIgPSBkYjtcbiAgICAgICAgaWYgKF9pc1VwZ3JhZGVOZWVkZWQoZGJJbmZvLCBzZWxmLl9kZWZhdWx0Q29uZmlnLnZlcnNpb24pKSB7XG4gICAgICAgICAgICAvLyBSZW9wZW4gdGhlIGRhdGFiYXNlIGZvciB1cGdyYWRpbmcuXG4gICAgICAgICAgICByZXR1cm4gX2dldFVwZ3JhZGVkQ29ubmVjdGlvbihkYkluZm8pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYjtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICBkYkluZm8uZGIgPSBkYkNvbnRleHQuZGIgPSBkYjtcbiAgICAgICAgc2VsZi5fZGJJbmZvID0gZGJJbmZvO1xuICAgICAgICAvLyBTaGFyZSB0aGUgZmluYWwgY29ubmVjdGlvbiBhbW9uZ3N0IHJlbGF0ZWQgbG9jYWxGb3JhZ2VzLlxuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGZvcmFnZXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIHZhciBmb3JhZ2UgPSBmb3JhZ2VzW2tdO1xuICAgICAgICAgICAgaWYgKGZvcmFnZSAhPT0gc2VsZikge1xuICAgICAgICAgICAgICAgIC8vIFNlbGYgaXMgYWxyZWFkeSB1cC10by1kYXRlLlxuICAgICAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLmRiID0gZGJJbmZvLmRiO1xuICAgICAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLnZlcnNpb24gPSBkYkluZm8udmVyc2lvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRJdGVtKGtleSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9PTkxZLCBmdW5jdGlvbiAoZXJyLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuX2RiSW5mby5zdG9yZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUuZ2V0KGtleSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXNFbmNvZGVkQmxvYih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IF9kZWNvZGVCbG9iKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlcS5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIEl0ZXJhdGUgb3ZlciBhbGwgaXRlbXMgc3RvcmVkIGluIGRhdGFiYXNlLlxuZnVuY3Rpb24gaXRlcmF0ZShpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihzZWxmLl9kYkluZm8sIFJFQURfT05MWSwgZnVuY3Rpb24gKGVyciwgdHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzZWxmLl9kYkluZm8uc3RvcmVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcSA9IHN0b3JlLm9wZW5DdXJzb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZXJhdGlvbk51bWJlciA9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSByZXEucmVzdWx0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3Vyc29yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gY3Vyc29yLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXNFbmNvZGVkQmxvYih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBfZGVjb2RlQmxvYih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBpdGVyYXRvcih2YWx1ZSwgY3Vyc29yLmtleSwgaXRlcmF0aW9uTnVtYmVyKyspO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB0aGUgaXRlcmF0b3IgY2FsbGJhY2sgcmV0dXJucyBhbnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAobm9uLWB1bmRlZmluZWRgKSB2YWx1ZSwgdGhlbiB3ZSBzdG9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGl0ZXJhdGlvbiBpbW1lZGlhdGVseVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yW1wiY29udGludWVcIl0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIHNldEl0ZW0oa2V5LCB2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBkYkluZm87XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgICAgIGlmICh0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQmxvYl0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jaGVja0Jsb2JTdXBwb3J0KGRiSW5mby5kYikudGhlbihmdW5jdGlvbiAoYmxvYlN1cHBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2JTdXBwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbmNvZGVCbG9iKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9XUklURSwgZnVuY3Rpb24gKGVyciwgdHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzZWxmLl9kYkluZm8uc3RvcmVOYW1lKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVhc29uIHdlIGRvbid0IF9zYXZlXyBudWxsIGlzIGJlY2F1c2UgSUUgMTAgZG9lc1xuICAgICAgICAgICAgICAgICAgICAvLyBub3Qgc3VwcG9ydCBzYXZpbmcgdGhlIGBudWxsYCB0eXBlIGluIEluZGV4ZWREQi4gSG93XG4gICAgICAgICAgICAgICAgICAgIC8vIGlyb25pYywgZ2l2ZW4gdGhlIGJ1ZyBiZWxvdyFcbiAgICAgICAgICAgICAgICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9sb2NhbEZvcmFnZS9pc3N1ZXMvMTYxXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUucHV0KHZhbHVlLCBrZXkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXN0IHRvIHVuZGVmaW5lZCBzbyB0aGUgdmFsdWUgcGFzc2VkIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxsYmFjay9wcm9taXNlIGlzIHRoZSBzYW1lIGFzIHdoYXQgb25lIHdvdWxkIGdldCBvdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIGBnZXRJdGVtKClgIGxhdGVyLiBUaGlzIGxlYWRzIHRvIHNvbWUgd2VpcmRuZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAoc2V0SXRlbSgnZm9vJywgdW5kZWZpbmVkKSB3aWxsIHJldHVybiBgbnVsbGApLCBidXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0J3Mgbm90IG15IGZhdWx0IGxvY2FsU3RvcmFnZSBpcyBvdXIgYmFzZWxpbmUgYW5kIHRoYXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0J3Mgd2VpcmQuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uYWJvcnQgPSB0cmFuc2FjdGlvbi5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IHJlcS5lcnJvciA/IHJlcS5lcnJvciA6IHJlcS50cmFuc2FjdGlvbi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiByZW1vdmVJdGVtKGtleSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9XUklURSwgZnVuY3Rpb24gKGVyciwgdHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzZWxmLl9kYkluZm8uc3RvcmVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgdXNlIGEgR3J1bnQgdGFzayB0byBtYWtlIHRoaXMgc2FmZSBmb3IgSUUgYW5kIHNvbWVcbiAgICAgICAgICAgICAgICAgICAgLy8gdmVyc2lvbnMgb2YgQW5kcm9pZCAoaW5jbHVkaW5nIHRob3NlIHVzZWQgYnkgQ29yZG92YSkuXG4gICAgICAgICAgICAgICAgICAgIC8vIE5vcm1hbGx5IElFIHdvbid0IGxpa2UgYC5kZWxldGUoKWAgYW5kIHdpbGwgaW5zaXN0IG9uXG4gICAgICAgICAgICAgICAgICAgIC8vIHVzaW5nIGBbJ2RlbGV0ZSddKClgLCBidXQgd2UgaGF2ZSBhIGJ1aWxkIHN0ZXAgdGhhdFxuICAgICAgICAgICAgICAgICAgICAvLyBmaXhlcyB0aGlzIGZvciB1cyBub3cuXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZVtcImRlbGV0ZVwiXShrZXkpO1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVxLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVxdWVzdCB3aWxsIGJlIGFsc28gYmUgYWJvcnRlZCBpZiB3ZSd2ZSBleGNlZWRlZCBvdXIgc3RvcmFnZVxuICAgICAgICAgICAgICAgICAgICAvLyBzcGFjZS5cbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSByZXEuZXJyb3IgPyByZXEuZXJyb3IgOiByZXEudHJhbnNhY3Rpb24uZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gY2xlYXIoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihzZWxmLl9kYkluZm8sIFJFQURfV1JJVEUsIGZ1bmN0aW9uIChlcnIsIHRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc2VsZi5fZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZS5jbGVhcigpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25hYm9ydCA9IHRyYW5zYWN0aW9uLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyID0gcmVxLmVycm9yID8gcmVxLmVycm9yIDogcmVxLnRyYW5zYWN0aW9uLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGxlbmd0aChjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9PTkxZLCBmdW5jdGlvbiAoZXJyLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuX2RiSW5mby5zdG9yZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUuY291bnQoKTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXEucmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBrZXkobiwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBpZiAobiA8IDApIHtcbiAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9PTkxZLCBmdW5jdGlvbiAoZXJyLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuX2RiSW5mby5zdG9yZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYWR2YW5jZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcSA9IHN0b3JlLm9wZW5LZXlDdXJzb3IoKTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnNvciA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnNvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhlcmUgd2VyZW4ndCBlbm91Z2gga2V5c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0aGUgZmlyc3Qga2V5LCByZXR1cm4gaXQgaWYgdGhhdCdzIHdoYXQgdGhleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdhbnRlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGN1cnNvci5rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFkdmFuY2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgYXNrIHRoZSBjdXJzb3IgdG8gc2tpcCBhaGVhZCBuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlY29yZHMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yLmFkdmFuY2Uobik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB3ZSBnZXQgaGVyZSwgd2UndmUgZ290IHRoZSBudGgga2V5LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGN1cnNvci5rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBrZXlzKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY3JlYXRlVHJhbnNhY3Rpb24oc2VsZi5fZGJJbmZvLCBSRUFEX09OTFksIGZ1bmN0aW9uIChlcnIsIHRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc2VsZi5fZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZS5vcGVuS2V5Q3Vyc29yKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXlzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSByZXEucmVzdWx0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnNvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoa2V5cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goY3Vyc29yLmtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JbXCJjb250aW51ZVwiXSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlcS5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGRyb3BJbnN0YW5jZShvcHRpb25zLCBjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrID0gZ2V0Q2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHZhciBjdXJyZW50Q29uZmlnID0gdGhpcy5jb25maWcoKTtcbiAgICBvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgIT09ICdmdW5jdGlvbicgJiYgb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgICAgICBvcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgY3VycmVudENvbmZpZy5uYW1lO1xuICAgICAgICBvcHRpb25zLnN0b3JlTmFtZSA9IG9wdGlvbnMuc3RvcmVOYW1lIHx8IGN1cnJlbnRDb25maWcuc3RvcmVOYW1lO1xuICAgIH1cblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZTtcbiAgICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgICAgICBwcm9taXNlID0gUHJvbWlzZSQxLnJlamVjdCgnSW52YWxpZCBhcmd1bWVudHMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaXNDdXJyZW50RGIgPSBvcHRpb25zLm5hbWUgPT09IGN1cnJlbnRDb25maWcubmFtZSAmJiBzZWxmLl9kYkluZm8uZGI7XG5cbiAgICAgICAgdmFyIGRiUHJvbWlzZSA9IGlzQ3VycmVudERiID8gUHJvbWlzZSQxLnJlc29sdmUoc2VsZi5fZGJJbmZvLmRiKSA6IF9nZXRPcmlnaW5hbENvbm5lY3Rpb24ob3B0aW9ucykudGhlbihmdW5jdGlvbiAoZGIpIHtcbiAgICAgICAgICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW29wdGlvbnMubmFtZV07XG4gICAgICAgICAgICB2YXIgZm9yYWdlcyA9IGRiQ29udGV4dC5mb3JhZ2VzO1xuICAgICAgICAgICAgZGJDb250ZXh0LmRiID0gZGI7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBmb3JhZ2VzW2ldLl9kYkluZm8uZGIgPSBkYjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnN0b3JlTmFtZSkge1xuICAgICAgICAgICAgcHJvbWlzZSA9IGRiUHJvbWlzZS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICAgICAgICAgIF9kZWZlclJlYWRpbmVzcyhvcHRpb25zKTtcblxuICAgICAgICAgICAgICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW29wdGlvbnMubmFtZV07XG4gICAgICAgICAgICAgICAgdmFyIGZvcmFnZXMgPSBkYkNvbnRleHQuZm9yYWdlcztcblxuICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3JhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmb3JhZ2UgPSBmb3JhZ2VzW2ldO1xuICAgICAgICAgICAgICAgICAgICBmb3JhZ2UuX2RiSW5mby5kYiA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGRyb3BEQlByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcSA9IGlkYi5kZWxldGVEYXRhYmFzZShvcHRpb25zLm5hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRiID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVxLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25ibG9ja2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2luZyBhbGwgb3BlbiBjb25uZWN0aW9ucyBpbiBvbnZlcnNpb25jaGFuZ2UgaGFuZGxlciBzaG91bGQgcHJldmVudCB0aGlzIHNpdHVhdGlvbiwgYnV0IGlmXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBkbyBnZXQgaGVyZSwgaXQganVzdCBtZWFucyB0aGUgcmVxdWVzdCByZW1haW5zIHBlbmRpbmcgLSBldmVudHVhbGx5IGl0IHdpbGwgc3VjY2VlZCBvciBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdkcm9wSW5zdGFuY2UgYmxvY2tlZCBmb3IgZGF0YWJhc2UgXCInICsgb3B0aW9ucy5uYW1lICsgJ1wiIHVudGlsIGFsbCBvcGVuIGNvbm5lY3Rpb25zIGFyZSBjbG9zZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRiID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRiKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBkcm9wREJQcm9taXNlLnRoZW4oZnVuY3Rpb24gKGRiKSB7XG4gICAgICAgICAgICAgICAgICAgIGRiQ29udGV4dC5kYiA9IGRiO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZm9yYWdlID0gZm9yYWdlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hZHZhbmNlUmVhZGluZXNzKF9mb3JhZ2UuX2RiSW5mbyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgKF9yZWplY3RSZWFkaW5lc3Mob3B0aW9ucywgZXJyKSB8fCBQcm9taXNlJDEucmVzb2x2ZSgpKVtcImNhdGNoXCJdKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9taXNlID0gZGJQcm9taXNlLnRoZW4oZnVuY3Rpb24gKGRiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKG9wdGlvbnMuc3RvcmVOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIG5ld1ZlcnNpb24gPSBkYi52ZXJzaW9uICsgMTtcblxuICAgICAgICAgICAgICAgIF9kZWZlclJlYWRpbmVzcyhvcHRpb25zKTtcblxuICAgICAgICAgICAgICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW29wdGlvbnMubmFtZV07XG4gICAgICAgICAgICAgICAgdmFyIGZvcmFnZXMgPSBkYkNvbnRleHQuZm9yYWdlcztcblxuICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3JhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmb3JhZ2UgPSBmb3JhZ2VzW2ldO1xuICAgICAgICAgICAgICAgICAgICBmb3JhZ2UuX2RiSW5mby5kYiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLnZlcnNpb24gPSBuZXdWZXJzaW9uO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBkcm9wT2JqZWN0UHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gaWRiLm9wZW4ob3B0aW9ucy5uYW1lLCBuZXdWZXJzaW9uKTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYiA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYi5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYiA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYi5kZWxldGVPYmplY3RTdG9yZShvcHRpb25zLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYiA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYi5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZHJvcE9iamVjdFByb21pc2UudGhlbihmdW5jdGlvbiAoZGIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGJDb250ZXh0LmRiID0gZGI7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZm9yYWdlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9mb3JhZ2UyID0gZm9yYWdlc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9mb3JhZ2UyLl9kYkluZm8uZGIgPSBkYjtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hZHZhbmNlUmVhZGluZXNzKF9mb3JhZ2UyLl9kYkluZm8pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIChfcmVqZWN0UmVhZGluZXNzKG9wdGlvbnMsIGVycikgfHwgUHJvbWlzZSQxLnJlc29sdmUoKSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIGFzeW5jU3RvcmFnZSA9IHtcbiAgICBfZHJpdmVyOiAnYXN5bmNTdG9yYWdlJyxcbiAgICBfaW5pdFN0b3JhZ2U6IF9pbml0U3RvcmFnZSxcbiAgICBfc3VwcG9ydDogaXNJbmRleGVkREJWYWxpZCgpLFxuICAgIGl0ZXJhdGU6IGl0ZXJhdGUsXG4gICAgZ2V0SXRlbTogZ2V0SXRlbSxcbiAgICBzZXRJdGVtOiBzZXRJdGVtLFxuICAgIHJlbW92ZUl0ZW06IHJlbW92ZUl0ZW0sXG4gICAgY2xlYXI6IGNsZWFyLFxuICAgIGxlbmd0aDogbGVuZ3RoLFxuICAgIGtleToga2V5LFxuICAgIGtleXM6IGtleXMsXG4gICAgZHJvcEluc3RhbmNlOiBkcm9wSW5zdGFuY2Vcbn07XG5cbmZ1bmN0aW9uIGlzV2ViU1FMVmFsaWQoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvcGVuRGF0YWJhc2UgPT09ICdmdW5jdGlvbic7XG59XG5cbi8vIFNhZGx5LCB0aGUgYmVzdCB3YXkgdG8gc2F2ZSBiaW5hcnkgZGF0YSBpbiBXZWJTUUwvbG9jYWxTdG9yYWdlIGlzIHNlcmlhbGl6aW5nXG4vLyBpdCB0byBCYXNlNjQsIHNvIHRoaXMgaXMgaG93IHdlIHN0b3JlIGl0IHRvIHByZXZlbnQgdmVyeSBzdHJhbmdlIGVycm9ycyB3aXRoIGxlc3Ncbi8vIHZlcmJvc2Ugd2F5cyBvZiBiaW5hcnkgPC0+IHN0cmluZyBkYXRhIHN0b3JhZ2UuXG52YXIgQkFTRV9DSEFSUyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcblxudmFyIEJMT0JfVFlQRV9QUkVGSVggPSAnfn5sb2NhbF9mb3JhZ2VfdHlwZX4nO1xudmFyIEJMT0JfVFlQRV9QUkVGSVhfUkVHRVggPSAvXn5+bG9jYWxfZm9yYWdlX3R5cGV+KFtefl0rKX4vO1xuXG52YXIgU0VSSUFMSVpFRF9NQVJLRVIgPSAnX19sZnNjX186JztcbnZhciBTRVJJQUxJWkVEX01BUktFUl9MRU5HVEggPSBTRVJJQUxJWkVEX01BUktFUi5sZW5ndGg7XG5cbi8vIE9NRyB0aGUgc2VyaWFsaXphdGlvbnMhXG52YXIgVFlQRV9BUlJBWUJVRkZFUiA9ICdhcmJmJztcbnZhciBUWVBFX0JMT0IgPSAnYmxvYic7XG52YXIgVFlQRV9JTlQ4QVJSQVkgPSAnc2kwOCc7XG52YXIgVFlQRV9VSU5UOEFSUkFZID0gJ3VpMDgnO1xudmFyIFRZUEVfVUlOVDhDTEFNUEVEQVJSQVkgPSAndWljOCc7XG52YXIgVFlQRV9JTlQxNkFSUkFZID0gJ3NpMTYnO1xudmFyIFRZUEVfSU5UMzJBUlJBWSA9ICdzaTMyJztcbnZhciBUWVBFX1VJTlQxNkFSUkFZID0gJ3VyMTYnO1xudmFyIFRZUEVfVUlOVDMyQVJSQVkgPSAndWkzMic7XG52YXIgVFlQRV9GTE9BVDMyQVJSQVkgPSAnZmwzMic7XG52YXIgVFlQRV9GTE9BVDY0QVJSQVkgPSAnZmw2NCc7XG52YXIgVFlQRV9TRVJJQUxJWkVEX01BUktFUl9MRU5HVEggPSBTRVJJQUxJWkVEX01BUktFUl9MRU5HVEggKyBUWVBFX0FSUkFZQlVGRkVSLmxlbmd0aDtcblxudmFyIHRvU3RyaW5nJDEgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5mdW5jdGlvbiBzdHJpbmdUb0J1ZmZlcihzZXJpYWxpemVkU3RyaW5nKSB7XG4gICAgLy8gRmlsbCB0aGUgc3RyaW5nIGludG8gYSBBcnJheUJ1ZmZlci5cbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gc2VyaWFsaXplZFN0cmluZy5sZW5ndGggKiAwLjc1O1xuICAgIHZhciBsZW4gPSBzZXJpYWxpemVkU3RyaW5nLmxlbmd0aDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcCA9IDA7XG4gICAgdmFyIGVuY29kZWQxLCBlbmNvZGVkMiwgZW5jb2RlZDMsIGVuY29kZWQ0O1xuXG4gICAgaWYgKHNlcmlhbGl6ZWRTdHJpbmdbc2VyaWFsaXplZFN0cmluZy5sZW5ndGggLSAxXSA9PT0gJz0nKSB7XG4gICAgICAgIGJ1ZmZlckxlbmd0aC0tO1xuICAgICAgICBpZiAoc2VyaWFsaXplZFN0cmluZ1tzZXJpYWxpemVkU3RyaW5nLmxlbmd0aCAtIDJdID09PSAnPScpIHtcbiAgICAgICAgICAgIGJ1ZmZlckxlbmd0aC0tO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihidWZmZXJMZW5ndGgpO1xuICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICAgICAgZW5jb2RlZDEgPSBCQVNFX0NIQVJTLmluZGV4T2Yoc2VyaWFsaXplZFN0cmluZ1tpXSk7XG4gICAgICAgIGVuY29kZWQyID0gQkFTRV9DSEFSUy5pbmRleE9mKHNlcmlhbGl6ZWRTdHJpbmdbaSArIDFdKTtcbiAgICAgICAgZW5jb2RlZDMgPSBCQVNFX0NIQVJTLmluZGV4T2Yoc2VyaWFsaXplZFN0cmluZ1tpICsgMl0pO1xuICAgICAgICBlbmNvZGVkNCA9IEJBU0VfQ0hBUlMuaW5kZXhPZihzZXJpYWxpemVkU3RyaW5nW2kgKyAzXSk7XG5cbiAgICAgICAgLypqc2xpbnQgYml0d2lzZTogdHJ1ZSAqL1xuICAgICAgICBieXRlc1twKytdID0gZW5jb2RlZDEgPDwgMiB8IGVuY29kZWQyID4+IDQ7XG4gICAgICAgIGJ5dGVzW3ArK10gPSAoZW5jb2RlZDIgJiAxNSkgPDwgNCB8IGVuY29kZWQzID4+IDI7XG4gICAgICAgIGJ5dGVzW3ArK10gPSAoZW5jb2RlZDMgJiAzKSA8PCA2IHwgZW5jb2RlZDQgJiA2MztcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZmZlcjtcbn1cblxuLy8gQ29udmVydHMgYSBidWZmZXIgdG8gYSBzdHJpbmcgdG8gc3RvcmUsIHNlcmlhbGl6ZWQsIGluIHRoZSBiYWNrZW5kXG4vLyBzdG9yYWdlIGxpYnJhcnkuXG5mdW5jdGlvbiBidWZmZXJUb1N0cmluZyhidWZmZXIpIHtcbiAgICAvLyBiYXNlNjQtYXJyYXlidWZmZXJcbiAgICB2YXIgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICAgIHZhciBiYXNlNjRTdHJpbmcgPSAnJztcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICAvKmpzbGludCBiaXR3aXNlOiB0cnVlICovXG4gICAgICAgIGJhc2U2NFN0cmluZyArPSBCQVNFX0NIQVJTW2J5dGVzW2ldID4+IDJdO1xuICAgICAgICBiYXNlNjRTdHJpbmcgKz0gQkFTRV9DSEFSU1soYnl0ZXNbaV0gJiAzKSA8PCA0IHwgYnl0ZXNbaSArIDFdID4+IDRdO1xuICAgICAgICBiYXNlNjRTdHJpbmcgKz0gQkFTRV9DSEFSU1soYnl0ZXNbaSArIDFdICYgMTUpIDw8IDIgfCBieXRlc1tpICsgMl0gPj4gNl07XG4gICAgICAgIGJhc2U2NFN0cmluZyArPSBCQVNFX0NIQVJTW2J5dGVzW2kgKyAyXSAmIDYzXTtcbiAgICB9XG5cbiAgICBpZiAoYnl0ZXMubGVuZ3RoICUgMyA9PT0gMikge1xuICAgICAgICBiYXNlNjRTdHJpbmcgPSBiYXNlNjRTdHJpbmcuc3Vic3RyaW5nKDAsIGJhc2U2NFN0cmluZy5sZW5ndGggLSAxKSArICc9JztcbiAgICB9IGVsc2UgaWYgKGJ5dGVzLmxlbmd0aCAlIDMgPT09IDEpIHtcbiAgICAgICAgYmFzZTY0U3RyaW5nID0gYmFzZTY0U3RyaW5nLnN1YnN0cmluZygwLCBiYXNlNjRTdHJpbmcubGVuZ3RoIC0gMikgKyAnPT0nO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlNjRTdHJpbmc7XG59XG5cbi8vIFNlcmlhbGl6ZSBhIHZhbHVlLCBhZnRlcndhcmRzIGV4ZWN1dGluZyBhIGNhbGxiYWNrICh3aGljaCB1c3VhbGx5XG4vLyBpbnN0cnVjdHMgdGhlIGBzZXRJdGVtKClgIGNhbGxiYWNrL3Byb21pc2UgdG8gYmUgZXhlY3V0ZWQpLiBUaGlzIGlzIGhvd1xuLy8gd2Ugc3RvcmUgYmluYXJ5IGRhdGEgd2l0aCBsb2NhbFN0b3JhZ2UuXG5mdW5jdGlvbiBzZXJpYWxpemUodmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHZhbHVlVHlwZSA9ICcnO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB2YWx1ZVR5cGUgPSB0b1N0cmluZyQxLmNhbGwodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIENhbm5vdCB1c2UgYHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJgIG9yIHN1Y2ggaGVyZSwgYXMgdGhlc2VcbiAgICAvLyBjaGVja3MgZmFpbCB3aGVuIHJ1bm5pbmcgdGhlIHRlc3RzIHVzaW5nIGNhc3Blci5qcy4uLlxuICAgIC8vXG4gICAgLy8gVE9ETzogU2VlIHdoeSB0aG9zZSB0ZXN0cyBmYWlsIGFuZCB1c2UgYSBiZXR0ZXIgc29sdXRpb24uXG4gICAgaWYgKHZhbHVlICYmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXScgfHwgdmFsdWUuYnVmZmVyICYmIHRvU3RyaW5nJDEuY2FsbCh2YWx1ZS5idWZmZXIpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nKSkge1xuICAgICAgICAvLyBDb252ZXJ0IGJpbmFyeSBhcnJheXMgdG8gYSBzdHJpbmcgYW5kIHByZWZpeCB0aGUgc3RyaW5nIHdpdGhcbiAgICAgICAgLy8gYSBzcGVjaWFsIG1hcmtlci5cbiAgICAgICAgdmFyIGJ1ZmZlcjtcbiAgICAgICAgdmFyIG1hcmtlciA9IFNFUklBTElaRURfTUFSS0VSO1xuXG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICBidWZmZXIgPSB2YWx1ZTtcbiAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0FSUkFZQlVGRkVSO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZmVyID0gdmFsdWUuYnVmZmVyO1xuXG4gICAgICAgICAgICBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBJbnQ4QXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0lOVDhBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBVaW50OEFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9VSU5UOEFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9VSU5UOENMQU1QRURBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBJbnQxNkFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9JTlQxNkFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IFVpbnQxNkFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9VSU5UMTZBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBJbnQzMkFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9JTlQzMkFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IFVpbnQzMkFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9VSU5UMzJBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBGbG9hdDMyQXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0ZMT0FUMzJBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBGbG9hdDY0QXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0ZMT0FUNjRBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKCdGYWlsZWQgdG8gZ2V0IHR5cGUgZm9yIEJpbmFyeUFycmF5JykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2sobWFya2VyICsgYnVmZmVyVG9TdHJpbmcoYnVmZmVyKSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IEJsb2JdJykge1xuICAgICAgICAvLyBDb252ZXIgdGhlIGJsb2IgdG8gYSBiaW5hcnlBcnJheSBhbmQgdGhlbiB0byBhIHN0cmluZy5cbiAgICAgICAgdmFyIGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgICAgIGZpbGVSZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gQmFja3dhcmRzLWNvbXBhdGlibGUgcHJlZml4IGZvciB0aGUgYmxvYiB0eXBlLlxuICAgICAgICAgICAgdmFyIHN0ciA9IEJMT0JfVFlQRV9QUkVGSVggKyB2YWx1ZS50eXBlICsgJ34nICsgYnVmZmVyVG9TdHJpbmcodGhpcy5yZXN1bHQpO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhTRVJJQUxJWkVEX01BUktFUiArIFRZUEVfQkxPQiArIHN0cik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcih2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDb3VsZG4ndCBjb252ZXJ0IHZhbHVlIGludG8gYSBKU09OIHN0cmluZzogXCIsIHZhbHVlKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIERlc2VyaWFsaXplIGRhdGEgd2UndmUgaW5zZXJ0ZWQgaW50byBhIHZhbHVlIGNvbHVtbi9maWVsZC4gV2UgcGxhY2Vcbi8vIHNwZWNpYWwgbWFya2VycyBpbnRvIG91ciBzdHJpbmdzIHRvIG1hcmsgdGhlbSBhcyBlbmNvZGVkOyB0aGlzIGlzbid0XG4vLyBhcyBuaWNlIGFzIGEgbWV0YSBmaWVsZCwgYnV0IGl0J3MgdGhlIG9ubHkgc2FuZSB0aGluZyB3ZSBjYW4gZG8gd2hpbHN0XG4vLyBrZWVwaW5nIGxvY2FsU3RvcmFnZSBzdXBwb3J0IGludGFjdC5cbi8vXG4vLyBPZnRlbnRpbWVzIHRoaXMgd2lsbCBqdXN0IGRlc2VyaWFsaXplIEpTT04gY29udGVudCwgYnV0IGlmIHdlIGhhdmUgYVxuLy8gc3BlY2lhbCBtYXJrZXIgKFNFUklBTElaRURfTUFSS0VSLCBkZWZpbmVkIGFib3ZlKSwgd2Ugd2lsbCBleHRyYWN0XG4vLyBzb21lIGtpbmQgb2YgYXJyYXlidWZmZXIvYmluYXJ5IGRhdGEvdHlwZWQgYXJyYXkgb3V0IG9mIHRoZSBzdHJpbmcuXG5mdW5jdGlvbiBkZXNlcmlhbGl6ZSh2YWx1ZSkge1xuICAgIC8vIElmIHdlIGhhdmVuJ3QgbWFya2VkIHRoaXMgc3RyaW5nIGFzIGJlaW5nIHNwZWNpYWxseSBzZXJpYWxpemVkIChpLmUuXG4gICAgLy8gc29tZXRoaW5nIG90aGVyIHRoYW4gc2VyaWFsaXplZCBKU09OKSwgd2UgY2FuIGp1c3QgcmV0dXJuIGl0IGFuZCBiZVxuICAgIC8vIGRvbmUgd2l0aCBpdC5cbiAgICBpZiAodmFsdWUuc3Vic3RyaW5nKDAsIFNFUklBTElaRURfTUFSS0VSX0xFTkdUSCkgIT09IFNFUklBTElaRURfTUFSS0VSKSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgZGVhbHMgd2l0aCBkZXNlcmlhbGl6aW5nIHNvbWUga2luZCBvZiBCbG9iIG9yXG4gICAgLy8gVHlwZWRBcnJheS4gRmlyc3Qgd2Ugc2VwYXJhdGUgb3V0IHRoZSB0eXBlIG9mIGRhdGEgd2UncmUgZGVhbGluZ1xuICAgIC8vIHdpdGggZnJvbSB0aGUgZGF0YSBpdHNlbGYuXG4gICAgdmFyIHNlcmlhbGl6ZWRTdHJpbmcgPSB2YWx1ZS5zdWJzdHJpbmcoVFlQRV9TRVJJQUxJWkVEX01BUktFUl9MRU5HVEgpO1xuICAgIHZhciB0eXBlID0gdmFsdWUuc3Vic3RyaW5nKFNFUklBTElaRURfTUFSS0VSX0xFTkdUSCwgVFlQRV9TRVJJQUxJWkVEX01BUktFUl9MRU5HVEgpO1xuXG4gICAgdmFyIGJsb2JUeXBlO1xuICAgIC8vIEJhY2t3YXJkcy1jb21wYXRpYmxlIGJsb2IgdHlwZSBzZXJpYWxpemF0aW9uIHN0cmF0ZWd5LlxuICAgIC8vIERCcyBjcmVhdGVkIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgbG9jYWxGb3JhZ2Ugd2lsbCBzaW1wbHkgbm90IGhhdmUgdGhlIGJsb2IgdHlwZS5cbiAgICBpZiAodHlwZSA9PT0gVFlQRV9CTE9CICYmIEJMT0JfVFlQRV9QUkVGSVhfUkVHRVgudGVzdChzZXJpYWxpemVkU3RyaW5nKSkge1xuICAgICAgICB2YXIgbWF0Y2hlciA9IHNlcmlhbGl6ZWRTdHJpbmcubWF0Y2goQkxPQl9UWVBFX1BSRUZJWF9SRUdFWCk7XG4gICAgICAgIGJsb2JUeXBlID0gbWF0Y2hlclsxXTtcbiAgICAgICAgc2VyaWFsaXplZFN0cmluZyA9IHNlcmlhbGl6ZWRTdHJpbmcuc3Vic3RyaW5nKG1hdGNoZXJbMF0ubGVuZ3RoKTtcbiAgICB9XG4gICAgdmFyIGJ1ZmZlciA9IHN0cmluZ1RvQnVmZmVyKHNlcmlhbGl6ZWRTdHJpbmcpO1xuXG4gICAgLy8gUmV0dXJuIHRoZSByaWdodCB0eXBlIGJhc2VkIG9uIHRoZSBjb2RlL3R5cGUgc2V0IGR1cmluZ1xuICAgIC8vIHNlcmlhbGl6YXRpb24uXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgVFlQRV9BUlJBWUJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgICAgIGNhc2UgVFlQRV9CTE9COlxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogYmxvYlR5cGUgfSk7XG4gICAgICAgIGNhc2UgVFlQRV9JTlQ4QVJSQVk6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDhBcnJheShidWZmZXIpO1xuICAgICAgICBjYXNlIFRZUEVfVUlOVDhBUlJBWTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICBjYXNlIFRZUEVfVUlOVDhDTEFNUEVEQVJSQVk6XG4gICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGNhc2UgVFlQRV9JTlQxNkFSUkFZOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQxNkFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGNhc2UgVFlQRV9VSU5UMTZBUlJBWTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDE2QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgY2FzZSBUWVBFX0lOVDMyQVJSQVk6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoYnVmZmVyKTtcbiAgICAgICAgY2FzZSBUWVBFX1VJTlQzMkFSUkFZOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50MzJBcnJheShidWZmZXIpO1xuICAgICAgICBjYXNlIFRZUEVfRkxPQVQzMkFSUkFZOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyKTtcbiAgICAgICAgY2FzZSBUWVBFX0ZMT0FUNjRBUlJBWTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQ2NEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua293biB0eXBlOiAnICsgdHlwZSk7XG4gICAgfVxufVxuXG52YXIgbG9jYWxmb3JhZ2VTZXJpYWxpemVyID0ge1xuICAgIHNlcmlhbGl6ZTogc2VyaWFsaXplLFxuICAgIGRlc2VyaWFsaXplOiBkZXNlcmlhbGl6ZSxcbiAgICBzdHJpbmdUb0J1ZmZlcjogc3RyaW5nVG9CdWZmZXIsXG4gICAgYnVmZmVyVG9TdHJpbmc6IGJ1ZmZlclRvU3RyaW5nXG59O1xuXG4vKlxuICogSW5jbHVkZXMgY29kZSBmcm9tOlxuICpcbiAqIGJhc2U2NC1hcnJheWJ1ZmZlclxuICogaHR0cHM6Ly9naXRodWIuY29tL25pa2xhc3ZoL2Jhc2U2NC1hcnJheWJ1ZmZlclxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMiBOaWtsYXMgdm9uIEhlcnR6ZW5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVEYlRhYmxlKHQsIGRiSW5mbywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICB0LmV4ZWN1dGVTcWwoJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICcgKyBkYkluZm8uc3RvcmVOYW1lICsgJyAnICsgJyhpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBrZXkgdW5pcXVlLCB2YWx1ZSknLCBbXSwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xufVxuXG4vLyBPcGVuIHRoZSBXZWJTUUwgZGF0YWJhc2UgKGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBvbmUgaWYgb25lIGRpZG4ndFxuLy8gcHJldmlvdXNseSBleGlzdCksIHVzaW5nIGFueSBvcHRpb25zIHNldCBpbiB0aGUgY29uZmlnLlxuZnVuY3Rpb24gX2luaXRTdG9yYWdlJDEob3B0aW9ucykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgZGJJbmZvID0ge1xuICAgICAgICBkYjogbnVsbFxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBmb3IgKHZhciBpIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGRiSW5mb1tpXSA9IHR5cGVvZiBvcHRpb25zW2ldICE9PSAnc3RyaW5nJyA/IG9wdGlvbnNbaV0udG9TdHJpbmcoKSA6IG9wdGlvbnNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGJJbmZvUHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAvLyBPcGVuIHRoZSBkYXRhYmFzZTsgdGhlIG9wZW5EYXRhYmFzZSBBUEkgd2lsbCBhdXRvbWF0aWNhbGx5XG4gICAgICAgIC8vIGNyZWF0ZSBpdCBmb3IgdXMgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRiSW5mby5kYiA9IG9wZW5EYXRhYmFzZShkYkluZm8ubmFtZSwgU3RyaW5nKGRiSW5mby52ZXJzaW9uKSwgZGJJbmZvLmRlc2NyaXB0aW9uLCBkYkluZm8uc2l6ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgb3VyIGtleS92YWx1ZSB0YWJsZSBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgIGNyZWF0ZURiVGFibGUodCwgZGJJbmZvLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fZGJJbmZvID0gZGJJbmZvO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGRiSW5mby5zZXJpYWxpemVyID0gbG9jYWxmb3JhZ2VTZXJpYWxpemVyO1xuICAgIHJldHVybiBkYkluZm9Qcm9taXNlO1xufVxuXG5mdW5jdGlvbiB0cnlFeGVjdXRlU3FsKHQsIGRiSW5mbywgc3FsU3RhdGVtZW50LCBhcmdzLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaykge1xuICAgIHQuZXhlY3V0ZVNxbChzcWxTdGF0ZW1lbnQsIGFyZ3MsIGNhbGxiYWNrLCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IGVycm9yLlNZTlRBWF9FUlIpIHtcbiAgICAgICAgICAgIHQuZXhlY3V0ZVNxbCgnU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyICcgKyBcIldIRVJFIHR5cGU9J3RhYmxlJyBBTkQgbmFtZSA9ID9cIiwgW2RiSW5mby5zdG9yZU5hbWVdLCBmdW5jdGlvbiAodCwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0cy5yb3dzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgdGFibGUgaXMgbWlzc2luZyAod2FzIGRlbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlLWNyZWF0ZSBpdCB0YWJsZSBhbmQgcmV0cnlcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRGJUYWJsZSh0LCBkYkluZm8sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHQuZXhlY3V0ZVNxbChzcWxTdGF0ZW1lbnQsIGFyZ3MsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3JDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjayh0LCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZXJyb3JDYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvckNhbGxiYWNrKHQsIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH0sIGVycm9yQ2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBnZXRJdGVtJDEoa2V5LCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGtleSA9IG5vcm1hbGl6ZUtleShrZXkpO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgICAgIGRiSW5mby5kYi50cmFuc2FjdGlvbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgIHRyeUV4ZWN1dGVTcWwodCwgZGJJbmZvLCAnU0VMRUNUICogRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSArICcgV0hFUkUga2V5ID0gPyBMSU1JVCAxJywgW2tleV0sIGZ1bmN0aW9uICh0LCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSByZXN1bHRzLnJvd3MubGVuZ3RoID8gcmVzdWx0cy5yb3dzLml0ZW0oMCkudmFsdWUgOiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIHNlcmlhbGl6ZWQgY29udGVudCB3ZSBuZWVkIHRvXG4gICAgICAgICAgICAgICAgICAgIC8vIHVucGFjay5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGJJbmZvLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBpdGVyYXRlJDEoaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcblxuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdTRUxFQ1QgKiBGUk9NICcgKyBkYkluZm8uc3RvcmVOYW1lLCBbXSwgZnVuY3Rpb24gKHQsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJvd3MgPSByZXN1bHRzLnJvd3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSByb3dzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHJvd3MuaXRlbShpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBpdGVtLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhpcyBpcyBzZXJpYWxpemVkIGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gdW5wYWNrLlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRiSW5mby5zZXJpYWxpemVyLmRlc2VyaWFsaXplKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yKHJlc3VsdCwgaXRlbS5rZXksIGkgKyAxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdm9pZCgwKSBwcmV2ZW50cyBwcm9ibGVtcyB3aXRoIHJlZGVmaW5pdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2YgYHVuZGVmaW5lZGAuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIF9zZXRJdGVtKGtleSwgdmFsdWUsIGNhbGxiYWNrLCByZXRyaWVzTGVmdCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGtleSA9IG5vcm1hbGl6ZUtleShrZXkpO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gVGhlIGxvY2FsU3RvcmFnZSBBUEkgZG9lc24ndCByZXR1cm4gdW5kZWZpbmVkIHZhbHVlcyBpbiBhblxuICAgICAgICAgICAgLy8gXCJleHBlY3RlZFwiIHdheSwgc28gdW5kZWZpbmVkIGlzIGFsd2F5cyBjYXN0IHRvIG51bGwgaW4gYWxsXG4gICAgICAgICAgICAvLyBkcml2ZXJzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2xvY2FsRm9yYWdlL3B1bGwvNDJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTYXZlIHRoZSBvcmlnaW5hbCB2YWx1ZSB0byBwYXNzIHRvIHRoZSBjYWxsYmFjay5cbiAgICAgICAgICAgIHZhciBvcmlnaW5hbFZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBkYkluZm8uc2VyaWFsaXplci5zZXJpYWxpemUodmFsdWUsIGZ1bmN0aW9uICh2YWx1ZSwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeUV4ZWN1dGVTcWwodCwgZGJJbmZvLCAnSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyAnICsgZGJJbmZvLnN0b3JlTmFtZSArICcgJyArICcoa2V5LCB2YWx1ZSkgVkFMVUVTICg/LCA/KScsIFtrZXksIHZhbHVlXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUob3JpZ2luYWxWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChzcWxFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHRyYW5zYWN0aW9uIGZhaWxlZDsgY2hlY2tcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHNlZSBpZiBpdCdzIGEgcXVvdGEgZXJyb3IuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3FsRXJyb3IuY29kZSA9PT0gc3FsRXJyb3IuUVVPVEFfRVJSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgcmVqZWN0IHRoZSBjYWxsYmFjayBvdXRyaWdodCBmb3Igbm93LCBidXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIHdvcnRoIHRyeWluZyB0byByZS1ydW4gdGhlIHRyYW5zYWN0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV2ZW4gaWYgdGhlIHVzZXIgYWNjZXB0cyB0aGUgcHJvbXB0IHRvIHVzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vcmUgc3RvcmFnZSBvbiBTYWZhcmksIHRoaXMgZXJyb3Igd2lsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlIGNhbGxlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyeSB0byByZS1ydW4gdGhlIHRyYW5zYWN0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRyaWVzTGVmdCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShfc2V0SXRlbS5hcHBseShzZWxmLCBba2V5LCBvcmlnaW5hbFZhbHVlLCBjYWxsYmFjaywgcmV0cmllc0xlZnQgLSAxXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChzcWxFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBzZXRJdGVtJDEoa2V5LCB2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gX3NldEl0ZW0uYXBwbHkodGhpcywgW2tleSwgdmFsdWUsIGNhbGxiYWNrLCAxXSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUl0ZW0kMShrZXksIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdERUxFVEUgRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSArICcgV0hFUkUga2V5ID0gPycsIFtrZXldLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBEZWxldGVzIGV2ZXJ5IGl0ZW0gaW4gdGhlIHRhYmxlLlxuLy8gVE9ETzogRmluZCBvdXQgaWYgdGhpcyByZXNldHMgdGhlIEFVVE9fSU5DUkVNRU5UIG51bWJlci5cbmZ1bmN0aW9uIGNsZWFyJDEoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdERUxFVEUgRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSwgW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIERvZXMgYSBzaW1wbGUgYENPVU5UKGtleSlgIHRvIGdldCB0aGUgbnVtYmVyIG9mIGl0ZW1zIHN0b3JlZCBpblxuLy8gbG9jYWxGb3JhZ2UuXG5mdW5jdGlvbiBsZW5ndGgkMShjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAvLyBBaGhoLCBTUUwgbWFrZXMgdGhpcyBvbmUgc29vb29vbyBlYXN5LlxuICAgICAgICAgICAgICAgIHRyeUV4ZWN1dGVTcWwodCwgZGJJbmZvLCAnU0VMRUNUIENPVU5UKGtleSkgYXMgYyBGUk9NICcgKyBkYkluZm8uc3RvcmVOYW1lLCBbXSwgZnVuY3Rpb24gKHQsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3VsdHMucm93cy5pdGVtKDApLmM7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBSZXR1cm4gdGhlIGtleSBsb2NhdGVkIGF0IGtleSBpbmRleCBYOyBlc3NlbnRpYWxseSBnZXRzIHRoZSBrZXkgZnJvbSBhXG4vLyBgV0hFUkUgaWQgPSA/YC4gVGhpcyBpcyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IEkgY2FuIHRoaW5rIHRvIGltcGxlbWVudFxuLy8gdGhpcyByYXJlbHktdXNlZCAoaW4gbXkgZXhwZXJpZW5jZSkgcGFydCBvZiB0aGUgQVBJLCBidXQgaXQgY2FuIHNlZW1cbi8vIGluY29uc2lzdGVudCwgYmVjYXVzZSB3ZSBkbyBgSU5TRVJUIE9SIFJFUExBQ0UgSU5UT2Agb24gYHNldEl0ZW0oKWAsIHNvXG4vLyB0aGUgSUQgb2YgZWFjaCBrZXkgd2lsbCBjaGFuZ2UgZXZlcnkgdGltZSBpdCdzIHVwZGF0ZWQuIFBlcmhhcHMgYSBzdG9yZWRcbi8vIHByb2NlZHVyZSBmb3IgdGhlIGBzZXRJdGVtKClgIFNRTCB3b3VsZCBzb2x2ZSB0aGlzIHByb2JsZW0/XG4vLyBUT0RPOiBEb24ndCBjaGFuZ2UgSUQgb24gYHNldEl0ZW0oKWAuXG5mdW5jdGlvbiBrZXkkMShuLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICB0cnlFeGVjdXRlU3FsKHQsIGRiSW5mbywgJ1NFTEVDVCBrZXkgRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSArICcgV0hFUkUgaWQgPSA/IExJTUlUIDEnLCBbbiArIDFdLCBmdW5jdGlvbiAodCwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcmVzdWx0cy5yb3dzLmxlbmd0aCA/IHJlc3VsdHMucm93cy5pdGVtKDApLmtleSA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBrZXlzJDEoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdTRUxFQ1Qga2V5IEZST00gJyArIGRiSW5mby5zdG9yZU5hbWUsIFtdLCBmdW5jdGlvbiAodCwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2gocmVzdWx0cy5yb3dzLml0ZW0oaSkua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoa2V5cyk7XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHQsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmRhdGFiYXNlLyNkYXRhYmFzZXNcbi8vID4gVGhlcmUgaXMgbm8gd2F5IHRvIGVudW1lcmF0ZSBvciBkZWxldGUgdGhlIGRhdGFiYXNlcyBhdmFpbGFibGUgZm9yIGFuIG9yaWdpbiBmcm9tIHRoaXMgQVBJLlxuZnVuY3Rpb24gZ2V0QWxsU3RvcmVOYW1lcyhkYikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgIHQuZXhlY3V0ZVNxbCgnU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyICcgKyBcIldIRVJFIHR5cGU9J3RhYmxlJyBBTkQgbmFtZSA8PiAnX19XZWJLaXREYXRhYmFzZUluZm9UYWJsZV9fJ1wiLCBbXSwgZnVuY3Rpb24gKHQsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RvcmVOYW1lcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmVOYW1lcy5wdXNoKHJlc3VsdHMucm93cy5pdGVtKGkpLm5hbWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBkYjogZGIsXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlTmFtZXM6IHN0b3JlTmFtZXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHNxbEVycm9yKSB7XG4gICAgICAgICAgICByZWplY3Qoc3FsRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZHJvcEluc3RhbmNlJDEob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayA9IGdldENhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB2YXIgY3VycmVudENvbmZpZyA9IHRoaXMuY29uZmlnKCk7XG4gICAgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zICE9PSAnZnVuY3Rpb24nICYmIG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgb3B0aW9ucy5uYW1lID0gb3B0aW9ucy5uYW1lIHx8IGN1cnJlbnRDb25maWcubmFtZTtcbiAgICAgICAgb3B0aW9ucy5zdG9yZU5hbWUgPSBvcHRpb25zLnN0b3JlTmFtZSB8fCBjdXJyZW50Q29uZmlnLnN0b3JlTmFtZTtcbiAgICB9XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHByb21pc2U7XG4gICAgaWYgKCFvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgcHJvbWlzZSA9IFByb21pc2UkMS5yZWplY3QoJ0ludmFsaWQgYXJndW1lbnRzJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgIHZhciBkYjtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLm5hbWUgPT09IGN1cnJlbnRDb25maWcubmFtZSkge1xuICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgZGIgcmVmZXJlbmNlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlXG4gICAgICAgICAgICAgICAgZGIgPSBzZWxmLl9kYkluZm8uZGI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRiID0gb3BlbkRhdGFiYXNlKG9wdGlvbnMubmFtZSwgJycsICcnLCAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFvcHRpb25zLnN0b3JlTmFtZSkge1xuICAgICAgICAgICAgICAgIC8vIGRyb3AgYWxsIGRhdGFiYXNlIHRhYmxlc1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZ2V0QWxsU3RvcmVOYW1lcyhkYikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgZGI6IGRiLFxuICAgICAgICAgICAgICAgICAgICBzdG9yZU5hbWVzOiBbb3B0aW9ucy5zdG9yZU5hbWVdXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKG9wZXJhdGlvbkluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25JbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRyb3BUYWJsZShzdG9yZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmV4ZWN1dGVTcWwoJ0RST1AgVEFCTEUgSUYgRVhJU1RTICcgKyBzdG9yZU5hbWUsIFtdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG9wZXJhdGlvbkluZm8uc3RvcmVOYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5wdXNoKGRyb3BUYWJsZShvcGVyYXRpb25JbmZvLnN0b3JlTmFtZXNbaV0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFByb21pc2UkMS5hbGwob3BlcmF0aW9ucykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHNxbEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChzcWxFcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIHdlYlNRTFN0b3JhZ2UgPSB7XG4gICAgX2RyaXZlcjogJ3dlYlNRTFN0b3JhZ2UnLFxuICAgIF9pbml0U3RvcmFnZTogX2luaXRTdG9yYWdlJDEsXG4gICAgX3N1cHBvcnQ6IGlzV2ViU1FMVmFsaWQoKSxcbiAgICBpdGVyYXRlOiBpdGVyYXRlJDEsXG4gICAgZ2V0SXRlbTogZ2V0SXRlbSQxLFxuICAgIHNldEl0ZW06IHNldEl0ZW0kMSxcbiAgICByZW1vdmVJdGVtOiByZW1vdmVJdGVtJDEsXG4gICAgY2xlYXI6IGNsZWFyJDEsXG4gICAgbGVuZ3RoOiBsZW5ndGgkMSxcbiAgICBrZXk6IGtleSQxLFxuICAgIGtleXM6IGtleXMkMSxcbiAgICBkcm9wSW5zdGFuY2U6IGRyb3BJbnN0YW5jZSQxXG59O1xuXG5mdW5jdGlvbiBpc0xvY2FsU3RvcmFnZVZhbGlkKCkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyAmJiAnc2V0SXRlbScgaW4gbG9jYWxTdG9yYWdlICYmXG4gICAgICAgIC8vIGluIElFOCB0eXBlb2YgbG9jYWxTdG9yYWdlLnNldEl0ZW0gPT09ICdvYmplY3QnXG4gICAgICAgICEhbG9jYWxTdG9yYWdlLnNldEl0ZW07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfZ2V0S2V5UHJlZml4KG9wdGlvbnMsIGRlZmF1bHRDb25maWcpIHtcbiAgICB2YXIga2V5UHJlZml4ID0gb3B0aW9ucy5uYW1lICsgJy8nO1xuXG4gICAgaWYgKG9wdGlvbnMuc3RvcmVOYW1lICE9PSBkZWZhdWx0Q29uZmlnLnN0b3JlTmFtZSkge1xuICAgICAgICBrZXlQcmVmaXggKz0gb3B0aW9ucy5zdG9yZU5hbWUgKyAnLyc7XG4gICAgfVxuICAgIHJldHVybiBrZXlQcmVmaXg7XG59XG5cbi8vIENoZWNrIGlmIGxvY2FsU3RvcmFnZSB0aHJvd3Mgd2hlbiBzYXZpbmcgYW4gaXRlbVxuZnVuY3Rpb24gY2hlY2tJZkxvY2FsU3RvcmFnZVRocm93cygpIHtcbiAgICB2YXIgbG9jYWxTdG9yYWdlVGVzdEtleSA9ICdfbG9jYWxmb3JhZ2Vfc3VwcG9ydF90ZXN0JztcblxuICAgIHRyeSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGxvY2FsU3RvcmFnZVRlc3RLZXksIHRydWUpO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShsb2NhbFN0b3JhZ2VUZXN0S2V5KTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5cbi8vIENoZWNrIGlmIGxvY2FsU3RvcmFnZSBpcyB1c2FibGUgYW5kIGFsbG93cyB0byBzYXZlIGFuIGl0ZW1cbi8vIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiBsb2NhbFN0b3JhZ2UgaXMgdXNhYmxlIGluIFNhZmFyaSBQcml2YXRlIEJyb3dzaW5nXG4vLyBtb2RlLCBvciBpbiBhbnkgb3RoZXIgY2FzZSB3aGVyZSB0aGUgYXZhaWxhYmxlIHF1b3RhIGZvciBsb2NhbFN0b3JhZ2Vcbi8vIGlzIDAgYW5kIHRoZXJlIHdhc24ndCBhbnkgc2F2ZWQgaXRlbXMgeWV0LlxuZnVuY3Rpb24gX2lzTG9jYWxTdG9yYWdlVXNhYmxlKCkge1xuICAgIHJldHVybiAhY2hlY2tJZkxvY2FsU3RvcmFnZVRocm93cygpIHx8IGxvY2FsU3RvcmFnZS5sZW5ndGggPiAwO1xufVxuXG4vLyBDb25maWcgdGhlIGxvY2FsU3RvcmFnZSBiYWNrZW5kLCB1c2luZyBvcHRpb25zIHNldCBpbiB0aGUgY29uZmlnLlxuZnVuY3Rpb24gX2luaXRTdG9yYWdlJDIob3B0aW9ucykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgZGJJbmZvID0ge307XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBkYkluZm9baV0gPSBvcHRpb25zW2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGJJbmZvLmtleVByZWZpeCA9IF9nZXRLZXlQcmVmaXgob3B0aW9ucywgc2VsZi5fZGVmYXVsdENvbmZpZyk7XG5cbiAgICBpZiAoIV9pc0xvY2FsU3RvcmFnZVVzYWJsZSgpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlJDEucmVqZWN0KCk7XG4gICAgfVxuXG4gICAgc2VsZi5fZGJJbmZvID0gZGJJbmZvO1xuICAgIGRiSW5mby5zZXJpYWxpemVyID0gbG9jYWxmb3JhZ2VTZXJpYWxpemVyO1xuXG4gICAgcmV0dXJuIFByb21pc2UkMS5yZXNvbHZlKCk7XG59XG5cbi8vIFJlbW92ZSBhbGwga2V5cyBmcm9tIHRoZSBkYXRhc3RvcmUsIGVmZmVjdGl2ZWx5IGRlc3Ryb3lpbmcgYWxsIGRhdGEgaW5cbi8vIHRoZSBhcHAncyBrZXkvdmFsdWUgc3RvcmUhXG5mdW5jdGlvbiBjbGVhciQyKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIga2V5UHJlZml4ID0gc2VsZi5fZGJJbmZvLmtleVByZWZpeDtcblxuICAgICAgICBmb3IgKHZhciBpID0gbG9jYWxTdG9yYWdlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gbG9jYWxTdG9yYWdlLmtleShpKTtcblxuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKGtleVByZWZpeCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBSZXRyaWV2ZSBhbiBpdGVtIGZyb20gdGhlIHN0b3JlLiBVbmxpa2UgdGhlIG9yaWdpbmFsIGFzeW5jX3N0b3JhZ2Vcbi8vIGxpYnJhcnkgaW4gR2FpYSwgd2UgZG9uJ3QgbW9kaWZ5IHJldHVybiB2YWx1ZXMgYXQgYWxsLiBJZiBhIGtleSdzIHZhbHVlXG4vLyBpcyBgdW5kZWZpbmVkYCwgd2UgcGFzcyB0aGF0IHZhbHVlIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbmZ1bmN0aW9uIGdldEl0ZW0kMihrZXksIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgdmFyIHJlc3VsdCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGRiSW5mby5rZXlQcmVmaXggKyBrZXkpO1xuXG4gICAgICAgIC8vIElmIGEgcmVzdWx0IHdhcyBmb3VuZCwgcGFyc2UgaXQgZnJvbSB0aGUgc2VyaWFsaXplZFxuICAgICAgICAvLyBzdHJpbmcgaW50byBhIEpTIG9iamVjdC4gSWYgcmVzdWx0IGlzbid0IHRydXRoeSwgdGhlIGtleVxuICAgICAgICAvLyBpcyBsaWtlbHkgdW5kZWZpbmVkIGFuZCB3ZSdsbCBwYXNzIGl0IHN0cmFpZ2h0IHRvIHRoZVxuICAgICAgICAvLyBjYWxsYmFjay5cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZGJJbmZvLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBJdGVyYXRlIG92ZXIgYWxsIGl0ZW1zIGluIHRoZSBzdG9yZS5cbmZ1bmN0aW9uIGl0ZXJhdGUkMihpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgdmFyIGtleVByZWZpeCA9IGRiSW5mby5rZXlQcmVmaXg7XG4gICAgICAgIHZhciBrZXlQcmVmaXhMZW5ndGggPSBrZXlQcmVmaXgubGVuZ3RoO1xuICAgICAgICB2YXIgbGVuZ3RoID0gbG9jYWxTdG9yYWdlLmxlbmd0aDtcblxuICAgICAgICAvLyBXZSB1c2UgYSBkZWRpY2F0ZWQgaXRlcmF0b3IgaW5zdGVhZCBvZiB0aGUgYGlgIHZhcmlhYmxlIGJlbG93XG4gICAgICAgIC8vIHNvIG90aGVyIGtleXMgd2UgZmV0Y2ggaW4gbG9jYWxTdG9yYWdlIGFyZW4ndCBjb3VudGVkIGluXG4gICAgICAgIC8vIHRoZSBgaXRlcmF0aW9uTnVtYmVyYCBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGBpdGVyYXRlKClgXG4gICAgICAgIC8vIGNhbGxiYWNrLlxuICAgICAgICAvL1xuICAgICAgICAvLyBTZWU6IGdpdGh1Yi5jb20vbW96aWxsYS9sb2NhbEZvcmFnZS9wdWxsLzQzNSNkaXNjdXNzaW9uX3IzODA2MTUzMFxuICAgICAgICB2YXIgaXRlcmF0aW9uTnVtYmVyID0gMTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gbG9jYWxTdG9yYWdlLmtleShpKTtcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihrZXlQcmVmaXgpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuXG4gICAgICAgICAgICAvLyBJZiBhIHJlc3VsdCB3YXMgZm91bmQsIHBhcnNlIGl0IGZyb20gdGhlIHNlcmlhbGl6ZWRcbiAgICAgICAgICAgIC8vIHN0cmluZyBpbnRvIGEgSlMgb2JqZWN0LiBJZiByZXN1bHQgaXNuJ3QgdHJ1dGh5LCB0aGVcbiAgICAgICAgICAgIC8vIGtleSBpcyBsaWtlbHkgdW5kZWZpbmVkIGFuZCB3ZSdsbCBwYXNzIGl0IHN0cmFpZ2h0XG4gICAgICAgICAgICAvLyB0byB0aGUgaXRlcmF0b3IuXG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGRiSW5mby5zZXJpYWxpemVyLmRlc2VyaWFsaXplKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFsdWUgPSBpdGVyYXRvcih2YWx1ZSwga2V5LnN1YnN0cmluZyhrZXlQcmVmaXhMZW5ndGgpLCBpdGVyYXRpb25OdW1iZXIrKyk7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBTYW1lIGFzIGxvY2FsU3RvcmFnZSdzIGtleSgpIG1ldGhvZCwgZXhjZXB0IHRha2VzIGEgY2FsbGJhY2suXG5mdW5jdGlvbiBrZXkkMihuLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGxvY2FsU3RvcmFnZS5rZXkobik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBwcmVmaXggZnJvbSB0aGUga2V5LCBpZiBhIGtleSBpcyBmb3VuZC5cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnN1YnN0cmluZyhkYkluZm8ua2V5UHJlZml4Lmxlbmd0aCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24ga2V5cyQyKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICB2YXIgbGVuZ3RoID0gbG9jYWxTdG9yYWdlLmxlbmd0aDtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgaXRlbUtleSA9IGxvY2FsU3RvcmFnZS5rZXkoaSk7XG4gICAgICAgICAgICBpZiAoaXRlbUtleS5pbmRleE9mKGRiSW5mby5rZXlQcmVmaXgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGl0ZW1LZXkuc3Vic3RyaW5nKGRiSW5mby5rZXlQcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ga2V5cztcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIFN1cHBseSB0aGUgbnVtYmVyIG9mIGtleXMgaW4gdGhlIGRhdGFzdG9yZSB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG5mdW5jdGlvbiBsZW5ndGgkMihjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYua2V5cygpLnRoZW4oZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgcmV0dXJuIGtleXMubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuLy8gUmVtb3ZlIGFuIGl0ZW0gZnJvbSB0aGUgc3RvcmUsIG5pY2UgYW5kIHNpbXBsZS5cbmZ1bmN0aW9uIHJlbW92ZUl0ZW0kMihrZXksIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZGJJbmZvLmtleVByZWZpeCArIGtleSk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBTZXQgYSBrZXkncyB2YWx1ZSBhbmQgcnVuIGFuIG9wdGlvbmFsIGNhbGxiYWNrIG9uY2UgdGhlIHZhbHVlIGlzIHNldC5cbi8vIFVubGlrZSBHYWlhJ3MgaW1wbGVtZW50YXRpb24sIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBwYXNzZWQgdGhlIHZhbHVlLFxuLy8gaW4gY2FzZSB5b3Ugd2FudCB0byBvcGVyYXRlIG9uIHRoYXQgdmFsdWUgb25seSBhZnRlciB5b3UncmUgc3VyZSBpdFxuLy8gc2F2ZWQsIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuXG5mdW5jdGlvbiBzZXRJdGVtJDIoa2V5LCB2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBDb252ZXJ0IHVuZGVmaW5lZCB2YWx1ZXMgdG8gbnVsbC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvbG9jYWxGb3JhZ2UvcHVsbC80MlxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgb3JpZ2luYWwgdmFsdWUgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2suXG4gICAgICAgIHZhciBvcmlnaW5hbFZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgICAgIGRiSW5mby5zZXJpYWxpemVyLnNlcmlhbGl6ZSh2YWx1ZSwgZnVuY3Rpb24gKHZhbHVlLCBlcnJvcikge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShkYkluZm8ua2V5UHJlZml4ICsga2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG9yaWdpbmFsVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhbFN0b3JhZ2UgY2FwYWNpdHkgZXhjZWVkZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBNYWtlIHRoaXMgYSBzcGVjaWZpYyBlcnJvci9ldmVudC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdRdW90YUV4Y2VlZGVkRXJyb3InIHx8IGUubmFtZSA9PT0gJ05TX0VSUk9SX0RPTV9RVU9UQV9SRUFDSEVEJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGRyb3BJbnN0YW5jZSQyKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sgPSBnZXRDYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zICE9PSAnZnVuY3Rpb24nICYmIG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRDb25maWcgPSB0aGlzLmNvbmZpZygpO1xuICAgICAgICBvcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgY3VycmVudENvbmZpZy5uYW1lO1xuICAgICAgICBvcHRpb25zLnN0b3JlTmFtZSA9IG9wdGlvbnMuc3RvcmVOYW1lIHx8IGN1cnJlbnRDb25maWcuc3RvcmVOYW1lO1xuICAgIH1cblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZTtcbiAgICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgICAgICBwcm9taXNlID0gUHJvbWlzZSQxLnJlamVjdCgnSW52YWxpZCBhcmd1bWVudHMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zLnN0b3JlTmFtZSkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUob3B0aW9ucy5uYW1lICsgJy8nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShfZ2V0S2V5UHJlZml4KG9wdGlvbnMsIHNlbGYuX2RlZmF1bHRDb25maWcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoa2V5UHJlZml4KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gbG9jYWxTdG9yYWdlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGxvY2FsU3RvcmFnZS5rZXkoaSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoa2V5LmluZGV4T2Yoa2V5UHJlZml4KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIGxvY2FsU3RvcmFnZVdyYXBwZXIgPSB7XG4gICAgX2RyaXZlcjogJ2xvY2FsU3RvcmFnZVdyYXBwZXInLFxuICAgIF9pbml0U3RvcmFnZTogX2luaXRTdG9yYWdlJDIsXG4gICAgX3N1cHBvcnQ6IGlzTG9jYWxTdG9yYWdlVmFsaWQoKSxcbiAgICBpdGVyYXRlOiBpdGVyYXRlJDIsXG4gICAgZ2V0SXRlbTogZ2V0SXRlbSQyLFxuICAgIHNldEl0ZW06IHNldEl0ZW0kMixcbiAgICByZW1vdmVJdGVtOiByZW1vdmVJdGVtJDIsXG4gICAgY2xlYXI6IGNsZWFyJDIsXG4gICAgbGVuZ3RoOiBsZW5ndGgkMixcbiAgICBrZXk6IGtleSQyLFxuICAgIGtleXM6IGtleXMkMixcbiAgICBkcm9wSW5zdGFuY2U6IGRyb3BJbnN0YW5jZSQyXG59O1xuXG52YXIgc2FtZVZhbHVlID0gZnVuY3Rpb24gc2FtZVZhbHVlKHgsIHkpIHtcbiAgICByZXR1cm4geCA9PT0geSB8fCB0eXBlb2YgeCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHkgPT09ICdudW1iZXInICYmIGlzTmFOKHgpICYmIGlzTmFOKHkpO1xufTtcblxudmFyIGluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIHNlYXJjaEVsZW1lbnQpIHtcbiAgICB2YXIgbGVuID0gYXJyYXkubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICBpZiAoc2FtZVZhbHVlKGFycmF5W2ldLCBzZWFyY2hFbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuLy8gRHJpdmVycyBhcmUgc3RvcmVkIGhlcmUgd2hlbiBgZGVmaW5lRHJpdmVyKClgIGlzIGNhbGxlZC5cbi8vIFRoZXkgYXJlIHNoYXJlZCBhY3Jvc3MgYWxsIGluc3RhbmNlcyBvZiBsb2NhbEZvcmFnZS5cbnZhciBEZWZpbmVkRHJpdmVycyA9IHt9O1xuXG52YXIgRHJpdmVyU3VwcG9ydCA9IHt9O1xuXG52YXIgRGVmYXVsdERyaXZlcnMgPSB7XG4gICAgSU5ERVhFRERCOiBhc3luY1N0b3JhZ2UsXG4gICAgV0VCU1FMOiB3ZWJTUUxTdG9yYWdlLFxuICAgIExPQ0FMU1RPUkFHRTogbG9jYWxTdG9yYWdlV3JhcHBlclxufTtcblxudmFyIERlZmF1bHREcml2ZXJPcmRlciA9IFtEZWZhdWx0RHJpdmVycy5JTkRFWEVEREIuX2RyaXZlciwgRGVmYXVsdERyaXZlcnMuV0VCU1FMLl9kcml2ZXIsIERlZmF1bHREcml2ZXJzLkxPQ0FMU1RPUkFHRS5fZHJpdmVyXTtcblxudmFyIE9wdGlvbmFsRHJpdmVyTWV0aG9kcyA9IFsnZHJvcEluc3RhbmNlJ107XG5cbnZhciBMaWJyYXJ5TWV0aG9kcyA9IFsnY2xlYXInLCAnZ2V0SXRlbScsICdpdGVyYXRlJywgJ2tleScsICdrZXlzJywgJ2xlbmd0aCcsICdyZW1vdmVJdGVtJywgJ3NldEl0ZW0nXS5jb25jYXQoT3B0aW9uYWxEcml2ZXJNZXRob2RzKTtcblxudmFyIERlZmF1bHRDb25maWcgPSB7XG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIGRyaXZlcjogRGVmYXVsdERyaXZlck9yZGVyLnNsaWNlKCksXG4gICAgbmFtZTogJ2xvY2FsZm9yYWdlJyxcbiAgICAvLyBEZWZhdWx0IERCIHNpemUgaXMgX0pVU1QgVU5ERVJfIDVNQiwgYXMgaXQncyB0aGUgaGlnaGVzdCBzaXplXG4gICAgLy8gd2UgY2FuIHVzZSB3aXRob3V0IGEgcHJvbXB0LlxuICAgIHNpemU6IDQ5ODA3MzYsXG4gICAgc3RvcmVOYW1lOiAna2V5dmFsdWVwYWlycycsXG4gICAgdmVyc2lvbjogMS4wXG59O1xuXG5mdW5jdGlvbiBjYWxsV2hlblJlYWR5KGxvY2FsRm9yYWdlSW5zdGFuY2UsIGxpYnJhcnlNZXRob2QpIHtcbiAgICBsb2NhbEZvcmFnZUluc3RhbmNlW2xpYnJhcnlNZXRob2RdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2FyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBsb2NhbEZvcmFnZUluc3RhbmNlLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxGb3JhZ2VJbnN0YW5jZVtsaWJyYXJ5TWV0aG9kXS5hcHBseShsb2NhbEZvcmFnZUluc3RhbmNlLCBfYXJncyk7XG4gICAgICAgIH0pO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGV4dGVuZCgpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICAgIGlmIChhcmcpIHtcbiAgICAgICAgICAgIGZvciAodmFyIF9rZXkgaW4gYXJnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZy5oYXNPd25Qcm9wZXJ0eShfa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheShhcmdbX2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNbMF1bX2tleV0gPSBhcmdbX2tleV0uc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1swXVtfa2V5XSA9IGFyZ1tfa2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhcmd1bWVudHNbMF07XG59XG5cbnZhciBMb2NhbEZvcmFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBMb2NhbEZvcmFnZShvcHRpb25zKSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMb2NhbEZvcmFnZSk7XG5cbiAgICAgICAgZm9yICh2YXIgZHJpdmVyVHlwZUtleSBpbiBEZWZhdWx0RHJpdmVycykge1xuICAgICAgICAgICAgaWYgKERlZmF1bHREcml2ZXJzLmhhc093blByb3BlcnR5KGRyaXZlclR5cGVLZXkpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRyaXZlciA9IERlZmF1bHREcml2ZXJzW2RyaXZlclR5cGVLZXldO1xuICAgICAgICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gZHJpdmVyLl9kcml2ZXI7XG4gICAgICAgICAgICAgICAgdGhpc1tkcml2ZXJUeXBlS2V5XSA9IGRyaXZlck5hbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAoIURlZmluZWREcml2ZXJzW2RyaXZlck5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gd2FpdCBmb3IgdGhlIHByb21pc2UsXG4gICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBkZWZhdWx0IGRyaXZlcnMgY2FuIGJlIGRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgLy8gaW4gYSBibG9ja2luZyBtYW5uZXJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVEcml2ZXIoZHJpdmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kZWZhdWx0Q29uZmlnID0gZXh0ZW5kKHt9LCBEZWZhdWx0Q29uZmlnKTtcbiAgICAgICAgdGhpcy5fY29uZmlnID0gZXh0ZW5kKHt9LCB0aGlzLl9kZWZhdWx0Q29uZmlnLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5fZHJpdmVyU2V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5faW5pdERyaXZlciA9IG51bGw7XG4gICAgICAgIHRoaXMuX3JlYWR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2RiSW5mbyA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fd3JhcExpYnJhcnlNZXRob2RzV2l0aFJlYWR5KCk7XG4gICAgICAgIHRoaXMuc2V0RHJpdmVyKHRoaXMuX2NvbmZpZy5kcml2ZXIpW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKCkge30pO1xuICAgIH1cblxuICAgIC8vIFNldCBhbnkgY29uZmlnIHZhbHVlcyBmb3IgbG9jYWxGb3JhZ2U7IGNhbiBiZSBjYWxsZWQgYW55dGltZSBiZWZvcmVcbiAgICAvLyB0aGUgZmlyc3QgQVBJIGNhbGwgKGUuZy4gYGdldEl0ZW1gLCBgc2V0SXRlbWApLlxuICAgIC8vIFdlIGxvb3AgdGhyb3VnaCBvcHRpb25zIHNvIHdlIGRvbid0IG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWdcbiAgICAvLyB2YWx1ZXMuXG5cblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5jb25maWcgPSBmdW5jdGlvbiBjb25maWcob3B0aW9ucykge1xuICAgICAgICAvLyBJZiB0aGUgb3B0aW9ucyBhcmd1bWVudCBpcyBhbiBvYmplY3QsIHdlIHVzZSBpdCB0byBzZXQgdmFsdWVzLlxuICAgICAgICAvLyBPdGhlcndpc2UsIHdlIHJldHVybiBlaXRoZXIgYSBzcGVjaWZpZWQgY29uZmlnIHZhbHVlIG9yIGFsbFxuICAgICAgICAvLyBjb25maWcgdmFsdWVzLlxuICAgICAgICBpZiAoKHR5cGVvZiBvcHRpb25zID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihvcHRpb25zKSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAvLyBJZiBsb2NhbGZvcmFnZSBpcyByZWFkeSBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQsIHdlIGNhbid0IHNldFxuICAgICAgICAgICAgLy8gYW55IG5ldyBjb25maWd1cmF0aW9uIHZhbHVlcy4gSW5zdGVhZCwgd2UgcmV0dXJuIGFuIGVycm9yLlxuICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcIkNhbid0IGNhbGwgY29uZmlnKCkgYWZ0ZXIgbG9jYWxmb3JhZ2UgXCIgKyAnaGFzIGJlZW4gdXNlZC4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09ICdzdG9yZU5hbWUnKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnNbaV0gPSBvcHRpb25zW2ldLnJlcGxhY2UoL1xcVy9nLCAnXycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpID09PSAndmVyc2lvbicgJiYgdHlwZW9mIG9wdGlvbnNbaV0gIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0RhdGFiYXNlIHZlcnNpb24gbXVzdCBiZSBhIG51bWJlci4nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jb25maWdbaV0gPSBvcHRpb25zW2ldO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhZnRlciBhbGwgY29uZmlnIG9wdGlvbnMgYXJlIHNldCBhbmRcbiAgICAgICAgICAgIC8vIHRoZSBkcml2ZXIgb3B0aW9uIGlzIHVzZWQsIHRyeSBzZXR0aW5nIGl0XG4gICAgICAgICAgICBpZiAoJ2RyaXZlcicgaW4gb3B0aW9ucyAmJiBvcHRpb25zLmRyaXZlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldERyaXZlcih0aGlzLl9jb25maWcuZHJpdmVyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnW29wdGlvbnNdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBVc2VkIHRvIGRlZmluZSBhIGN1c3RvbSBkcml2ZXIsIHNoYXJlZCBhY3Jvc3MgYWxsIGluc3RhbmNlcyBvZlxuICAgIC8vIGxvY2FsRm9yYWdlLlxuXG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuZGVmaW5lRHJpdmVyID0gZnVuY3Rpb24gZGVmaW5lRHJpdmVyKGRyaXZlck9iamVjdCwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIGRyaXZlck5hbWUgPSBkcml2ZXJPYmplY3QuX2RyaXZlcjtcbiAgICAgICAgICAgICAgICB2YXIgY29tcGxpYW5jZUVycm9yID0gbmV3IEVycm9yKCdDdXN0b20gZHJpdmVyIG5vdCBjb21wbGlhbnQ7IHNlZSAnICsgJ2h0dHBzOi8vbW96aWxsYS5naXRodWIuaW8vbG9jYWxGb3JhZ2UvI2RlZmluZWRyaXZlcicpO1xuXG4gICAgICAgICAgICAgICAgLy8gQSBkcml2ZXIgbmFtZSBzaG91bGQgYmUgZGVmaW5lZCBhbmQgbm90IG92ZXJsYXAgd2l0aCB0aGVcbiAgICAgICAgICAgICAgICAvLyBsaWJyYXJ5LWRlZmluZWQsIGRlZmF1bHQgZHJpdmVycy5cbiAgICAgICAgICAgICAgICBpZiAoIWRyaXZlck9iamVjdC5fZHJpdmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChjb21wbGlhbmNlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGRyaXZlck1ldGhvZHMgPSBMaWJyYXJ5TWV0aG9kcy5jb25jYXQoJ19pbml0U3RvcmFnZScpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBkcml2ZXJNZXRob2RzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkcml2ZXJNZXRob2ROYW1lID0gZHJpdmVyTWV0aG9kc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHRoZSBwcm9wZXJ0eSBpcyB0aGVyZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gaXQgc2hvdWxkIGJlIGEgbWV0aG9kIGV2ZW4gd2hlbiBvcHRpb25hbFxuICAgICAgICAgICAgICAgICAgICB2YXIgaXNSZXF1aXJlZCA9ICFpbmNsdWRlcyhPcHRpb25hbERyaXZlck1ldGhvZHMsIGRyaXZlck1ldGhvZE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGlzUmVxdWlyZWQgfHwgZHJpdmVyT2JqZWN0W2RyaXZlck1ldGhvZE5hbWVdKSAmJiB0eXBlb2YgZHJpdmVyT2JqZWN0W2RyaXZlck1ldGhvZE5hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoY29tcGxpYW5jZUVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBjb25maWd1cmVNaXNzaW5nTWV0aG9kcyA9IGZ1bmN0aW9uIGNvbmZpZ3VyZU1pc3NpbmdNZXRob2RzKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWV0aG9kTm90SW1wbGVtZW50ZWRGYWN0b3J5ID0gZnVuY3Rpb24gbWV0aG9kTm90SW1wbGVtZW50ZWRGYWN0b3J5KG1ldGhvZE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdNZXRob2QgJyArIG1ldGhvZE5hbWUgKyAnIGlzIG5vdCBpbXBsZW1lbnRlZCBieSB0aGUgY3VycmVudCBkcml2ZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UkMS5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfbGVuID0gT3B0aW9uYWxEcml2ZXJNZXRob2RzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3B0aW9uYWxEcml2ZXJNZXRob2QgPSBPcHRpb25hbERyaXZlck1ldGhvZHNbX2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkcml2ZXJPYmplY3Rbb3B0aW9uYWxEcml2ZXJNZXRob2RdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyT2JqZWN0W29wdGlvbmFsRHJpdmVyTWV0aG9kXSA9IG1ldGhvZE5vdEltcGxlbWVudGVkRmFjdG9yeShvcHRpb25hbERyaXZlck1ldGhvZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uZmlndXJlTWlzc2luZ01ldGhvZHMoKTtcblxuICAgICAgICAgICAgICAgIHZhciBzZXREcml2ZXJTdXBwb3J0ID0gZnVuY3Rpb24gc2V0RHJpdmVyU3VwcG9ydChzdXBwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChEZWZpbmVkRHJpdmVyc1tkcml2ZXJOYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKCdSZWRlZmluaW5nIExvY2FsRm9yYWdlIGRyaXZlcjogJyArIGRyaXZlck5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIERlZmluZWREcml2ZXJzW2RyaXZlck5hbWVdID0gZHJpdmVyT2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICBEcml2ZXJTdXBwb3J0W2RyaXZlck5hbWVdID0gc3VwcG9ydDtcbiAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgdXNlIGEgdGhlbiwgc28gdGhhdCB3ZSBjYW4gZGVmaW5lXG4gICAgICAgICAgICAgICAgICAgIC8vIGRyaXZlcnMgdGhhdCBoYXZlIHNpbXBsZSBfc3VwcG9ydCBtZXRob2RzXG4gICAgICAgICAgICAgICAgICAgIC8vIGluIGEgYmxvY2tpbmcgbWFubmVyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKCdfc3VwcG9ydCcgaW4gZHJpdmVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkcml2ZXJPYmplY3QuX3N1cHBvcnQgJiYgdHlwZW9mIGRyaXZlck9iamVjdC5fc3VwcG9ydCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyT2JqZWN0Ll9zdXBwb3J0KCkudGhlbihzZXREcml2ZXJTdXBwb3J0LCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RHJpdmVyU3VwcG9ydCghIWRyaXZlck9iamVjdC5fc3VwcG9ydCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZXREcml2ZXJTdXBwb3J0KHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4ZWN1dGVUd29DYWxsYmFja3MocHJvbWlzZSwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgTG9jYWxGb3JhZ2UucHJvdG90eXBlLmRyaXZlciA9IGZ1bmN0aW9uIGRyaXZlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RyaXZlciB8fCBudWxsO1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuZ2V0RHJpdmVyID0gZnVuY3Rpb24gZ2V0RHJpdmVyKGRyaXZlck5hbWUsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBnZXREcml2ZXJQcm9taXNlID0gRGVmaW5lZERyaXZlcnNbZHJpdmVyTmFtZV0gPyBQcm9taXNlJDEucmVzb2x2ZShEZWZpbmVkRHJpdmVyc1tkcml2ZXJOYW1lXSkgOiBQcm9taXNlJDEucmVqZWN0KG5ldyBFcnJvcignRHJpdmVyIG5vdCBmb3VuZC4nKSk7XG5cbiAgICAgICAgZXhlY3V0ZVR3b0NhbGxiYWNrcyhnZXREcml2ZXJQcm9taXNlLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7XG4gICAgICAgIHJldHVybiBnZXREcml2ZXJQcm9taXNlO1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuZ2V0U2VyaWFsaXplciA9IGZ1bmN0aW9uIGdldFNlcmlhbGl6ZXIoY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHNlcmlhbGl6ZXJQcm9taXNlID0gUHJvbWlzZSQxLnJlc29sdmUobG9jYWxmb3JhZ2VTZXJpYWxpemVyKTtcbiAgICAgICAgZXhlY3V0ZVR3b0NhbGxiYWNrcyhzZXJpYWxpemVyUHJvbWlzZSwgY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplclByb21pc2U7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5yZWFkeSA9IGZ1bmN0aW9uIHJlYWR5KGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgICB2YXIgcHJvbWlzZSA9IHNlbGYuX2RyaXZlclNldC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLl9yZWFkeSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNlbGYuX3JlYWR5ID0gc2VsZi5faW5pdERyaXZlcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZHk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4ZWN1dGVUd29DYWxsYmFja3MocHJvbWlzZSwgY2FsbGJhY2ssIGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5zZXREcml2ZXIgPSBmdW5jdGlvbiBzZXREcml2ZXIoZHJpdmVycywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGlmICghaXNBcnJheShkcml2ZXJzKSkge1xuICAgICAgICAgICAgZHJpdmVycyA9IFtkcml2ZXJzXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdXBwb3J0ZWREcml2ZXJzID0gdGhpcy5fZ2V0U3VwcG9ydGVkRHJpdmVycyhkcml2ZXJzKTtcblxuICAgICAgICBmdW5jdGlvbiBzZXREcml2ZXJUb0NvbmZpZygpIHtcbiAgICAgICAgICAgIHNlbGYuX2NvbmZpZy5kcml2ZXIgPSBzZWxmLmRyaXZlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZXh0ZW5kU2VsZldpdGhEcml2ZXIoZHJpdmVyKSB7XG4gICAgICAgICAgICBzZWxmLl9leHRlbmQoZHJpdmVyKTtcbiAgICAgICAgICAgIHNldERyaXZlclRvQ29uZmlnKCk7XG5cbiAgICAgICAgICAgIHNlbGYuX3JlYWR5ID0gc2VsZi5faW5pdFN0b3JhZ2Uoc2VsZi5fY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkeTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGluaXREcml2ZXIoc3VwcG9ydGVkRHJpdmVycykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudERyaXZlckluZGV4ID0gMDtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRyaXZlclByb21pc2VMb29wKCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudERyaXZlckluZGV4IDwgc3VwcG9ydGVkRHJpdmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gc3VwcG9ydGVkRHJpdmVyc1tjdXJyZW50RHJpdmVySW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudERyaXZlckluZGV4Kys7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RiSW5mbyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkeSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldERyaXZlcihkcml2ZXJOYW1lKS50aGVuKGV4dGVuZFNlbGZXaXRoRHJpdmVyKVtcImNhdGNoXCJdKGRyaXZlclByb21pc2VMb29wKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNldERyaXZlclRvQ29uZmlnKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcignTm8gYXZhaWxhYmxlIHN0b3JhZ2UgbWV0aG9kIGZvdW5kLicpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9kcml2ZXJTZXQgPSBQcm9taXNlJDEucmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RyaXZlclNldDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZHJpdmVyUHJvbWlzZUxvb3AoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGVyZSBtaWdodCBiZSBhIGRyaXZlciBpbml0aWFsaXphdGlvbiBpbiBwcm9ncmVzc1xuICAgICAgICAvLyBzbyB3YWl0IGZvciBpdCB0byBmaW5pc2ggaW4gb3JkZXIgdG8gYXZvaWQgYSBwb3NzaWJsZVxuICAgICAgICAvLyByYWNlIGNvbmRpdGlvbiB0byBzZXQgX2RiSW5mb1xuICAgICAgICB2YXIgb2xkRHJpdmVyU2V0RG9uZSA9IHRoaXMuX2RyaXZlclNldCAhPT0gbnVsbCA/IHRoaXMuX2RyaXZlclNldFtcImNhdGNoXCJdKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlJDEucmVzb2x2ZSgpO1xuICAgICAgICB9KSA6IFByb21pc2UkMS5yZXNvbHZlKCk7XG5cbiAgICAgICAgdGhpcy5fZHJpdmVyU2V0ID0gb2xkRHJpdmVyU2V0RG9uZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gc3VwcG9ydGVkRHJpdmVyc1swXTtcbiAgICAgICAgICAgIHNlbGYuX2RiSW5mbyA9IG51bGw7XG4gICAgICAgICAgICBzZWxmLl9yZWFkeSA9IG51bGw7XG5cbiAgICAgICAgICAgIHJldHVybiBzZWxmLmdldERyaXZlcihkcml2ZXJOYW1lKS50aGVuKGZ1bmN0aW9uIChkcml2ZXIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9kcml2ZXIgPSBkcml2ZXIuX2RyaXZlcjtcbiAgICAgICAgICAgICAgICBzZXREcml2ZXJUb0NvbmZpZygpO1xuICAgICAgICAgICAgICAgIHNlbGYuX3dyYXBMaWJyYXJ5TWV0aG9kc1dpdGhSZWFkeSgpO1xuICAgICAgICAgICAgICAgIHNlbGYuX2luaXREcml2ZXIgPSBpbml0RHJpdmVyKHN1cHBvcnRlZERyaXZlcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2V0RHJpdmVyVG9Db25maWcoKTtcbiAgICAgICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcignTm8gYXZhaWxhYmxlIHN0b3JhZ2UgbWV0aG9kIGZvdW5kLicpO1xuICAgICAgICAgICAgc2VsZi5fZHJpdmVyU2V0ID0gUHJvbWlzZSQxLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5fZHJpdmVyU2V0O1xuICAgICAgICB9KTtcblxuICAgICAgICBleGVjdXRlVHdvQ2FsbGJhY2tzKHRoaXMuX2RyaXZlclNldCwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJpdmVyU2V0O1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuc3VwcG9ydHMgPSBmdW5jdGlvbiBzdXBwb3J0cyhkcml2ZXJOYW1lKSB7XG4gICAgICAgIHJldHVybiAhIURyaXZlclN1cHBvcnRbZHJpdmVyTmFtZV07XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5fZXh0ZW5kID0gZnVuY3Rpb24gX2V4dGVuZChsaWJyYXJ5TWV0aG9kc0FuZFByb3BlcnRpZXMpIHtcbiAgICAgICAgZXh0ZW5kKHRoaXMsIGxpYnJhcnlNZXRob2RzQW5kUHJvcGVydGllcyk7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5fZ2V0U3VwcG9ydGVkRHJpdmVycyA9IGZ1bmN0aW9uIF9nZXRTdXBwb3J0ZWREcml2ZXJzKGRyaXZlcnMpIHtcbiAgICAgICAgdmFyIHN1cHBvcnRlZERyaXZlcnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGRyaXZlcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gZHJpdmVyc1tpXTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN1cHBvcnRzKGRyaXZlck5hbWUpKSB7XG4gICAgICAgICAgICAgICAgc3VwcG9ydGVkRHJpdmVycy5wdXNoKGRyaXZlck5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBwb3J0ZWREcml2ZXJzO1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuX3dyYXBMaWJyYXJ5TWV0aG9kc1dpdGhSZWFkeSA9IGZ1bmN0aW9uIF93cmFwTGlicmFyeU1ldGhvZHNXaXRoUmVhZHkoKSB7XG4gICAgICAgIC8vIEFkZCBhIHN0dWIgZm9yIGVhY2ggZHJpdmVyIEFQSSBtZXRob2QgdGhhdCBkZWxheXMgdGhlIGNhbGwgdG8gdGhlXG4gICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgZHJpdmVyIG1ldGhvZCB1bnRpbCBsb2NhbEZvcmFnZSBpcyByZWFkeS4gVGhlc2Ugc3R1YnNcbiAgICAgICAgLy8gd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgZHJpdmVyIG1ldGhvZHMgYXMgc29vbiBhcyB0aGUgZHJpdmVyIGlzXG4gICAgICAgIC8vIGxvYWRlZCwgc28gdGhlcmUgaXMgbm8gcGVyZm9ybWFuY2UgaW1wYWN0LlxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gTGlicmFyeU1ldGhvZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGNhbGxXaGVuUmVhZHkodGhpcywgTGlicmFyeU1ldGhvZHNbaV0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5jcmVhdGVJbnN0YW5jZSA9IGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb2NhbEZvcmFnZShvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIExvY2FsRm9yYWdlO1xufSgpO1xuXG4vLyBUaGUgYWN0dWFsIGxvY2FsRm9yYWdlIG9iamVjdCB0aGF0IHdlIGV4cG9zZSBhcyBhIG1vZHVsZSBvciB2aWEgYVxuLy8gZ2xvYmFsLiBJdCdzIGV4dGVuZGVkIGJ5IHB1bGxpbmcgaW4gb25lIG9mIG91ciBvdGhlciBsaWJyYXJpZXMuXG5cblxudmFyIGxvY2FsZm9yYWdlX2pzID0gbmV3IExvY2FsRm9yYWdlKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbG9jYWxmb3JhZ2VfanM7XG5cbn0se1wiM1wiOjN9XX0se30sWzRdKSg0KVxufSk7XG4iLCAiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovXG5pbXBvcnQgeyBFdmVudCwgRXZlbnRQcm9jZXNzb3IsIEh1YiwgSW50ZWdyYXRpb24gfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCwgbG9nZ2VyLCBub3JtYWxpemUsIHV1aWQ0IH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5pbXBvcnQgbG9jYWxGb3JhZ2UgZnJvbSAnbG9jYWxmb3JhZ2UnO1xuXG50eXBlIExvY2FsRm9yYWdlID0ge1xuICBzZXRJdGVtPFQ+KGtleTogc3RyaW5nLCB2YWx1ZTogVCwgY2FsbGJhY2s/OiAoZXJyOiBhbnksIHZhbHVlOiBUKSA9PiB2b2lkKTogUHJvbWlzZTxUPjtcbiAgaXRlcmF0ZTxULCBVPihcbiAgICBpdGVyYXRlZTogKHZhbHVlOiBULCBrZXk6IHN0cmluZywgaXRlcmF0aW9uTnVtYmVyOiBudW1iZXIpID0+IFUsXG4gICAgY2FsbGJhY2s/OiAoZXJyOiBhbnksIHJlc3VsdDogVSkgPT4gdm9pZCxcbiAgKTogUHJvbWlzZTxVPjtcbiAgcmVtb3ZlSXRlbShrZXk6IHN0cmluZywgY2FsbGJhY2s/OiAoZXJyOiBhbnkpID0+IHZvaWQpOiBQcm9taXNlPHZvaWQ+O1xufTtcblxuLyoqXG4gKiBjYWNoZSBvZmZsaW5lIGVycm9ycyBhbmQgc2VuZCB3aGVuIGNvbm5lY3RlZFxuICovXG5leHBvcnQgY2xhc3MgT2ZmbGluZSBpbXBsZW1lbnRzIEludGVncmF0aW9uIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlkOiBzdHJpbmcgPSAnT2ZmbGluZSc7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nID0gT2ZmbGluZS5pZDtcblxuICAvKipcbiAgICogdGhlIGdsb2JhbCBpbnN0YW5jZVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcHVibGljIGdsb2JhbDogYW55O1xuXG4gIC8qKlxuICAgKiB0aGUgY3VycmVudCBodWIgaW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyBodWI/OiBIdWI7XG5cbiAgLyoqXG4gICAqIG1heGltdW0gbnVtYmVyIG9mIGV2ZW50cyB0byBzdG9yZSB3aGlsZSBvZmZsaW5lXG4gICAqL1xuICBwdWJsaWMgbWF4U3RvcmVkRXZlbnRzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIGV2ZW50IGNhY2hlXG4gICAqL1xuICBwdWJsaWMgb2ZmbGluZUV2ZW50U3RvcmU6IExvY2FsRm9yYWdlO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IHsgbWF4U3RvcmVkRXZlbnRzPzogbnVtYmVyIH0gPSB7fSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdGhpcy5nbG9iYWwgPSBnZXRHbG9iYWxPYmplY3Q8YW55PigpO1xuICAgIHRoaXMubWF4U3RvcmVkRXZlbnRzID0gb3B0aW9ucy5tYXhTdG9yZWRFdmVudHMgfHwgMzA7IC8vIHNldCBhIHJlYXNvbmFibGUgZGVmYXVsdFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICB0aGlzLm9mZmxpbmVFdmVudFN0b3JlID0gbG9jYWxGb3JhZ2UuY3JlYXRlSW5zdGFuY2Uoe1xuICAgICAgbmFtZTogJ3NlbnRyeS9vZmZsaW5lRXZlbnRTdG9yZScsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXR1cE9uY2UoYWRkR2xvYmFsRXZlbnRQcm9jZXNzb3I6IChjYWxsYmFjazogRXZlbnRQcm9jZXNzb3IpID0+IHZvaWQsIGdldEN1cnJlbnRIdWI6ICgpID0+IEh1Yik6IHZvaWQge1xuICAgIHRoaXMuaHViID0gZ2V0Q3VycmVudEh1YigpO1xuXG4gICAgaWYgKCdhZGRFdmVudExpc3RlbmVyJyBpbiB0aGlzLmdsb2JhbCkge1xuICAgICAgdGhpcy5nbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignb25saW5lJywgKCkgPT4ge1xuICAgICAgICB2b2lkIHRoaXMuX3NlbmRFdmVudHMoKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oJ2NvdWxkIG5vdCBzZW5kIGNhY2hlZCBldmVudHMnKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBhZGRHbG9iYWxFdmVudFByb2Nlc3NvcigoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICBpZiAodGhpcy5odWIgJiYgdGhpcy5odWIuZ2V0SW50ZWdyYXRpb24oT2ZmbGluZSkpIHtcbiAgICAgICAgLy8gY2FjaGUgaWYgd2UgYXJlIHBvc2l0aXZlbHkgb2ZmbGluZVxuICAgICAgICBpZiAoJ25hdmlnYXRvcicgaW4gdGhpcy5nbG9iYWwgJiYgJ29uTGluZScgaW4gdGhpcy5nbG9iYWwubmF2aWdhdG9yICYmICF0aGlzLmdsb2JhbC5uYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgdm9pZCB0aGlzLl9jYWNoZUV2ZW50KGV2ZW50KVxuICAgICAgICAgICAgLnRoZW4oKF9ldmVudDogRXZlbnQpOiBQcm9taXNlPHZvaWQ+ID0+IHRoaXMuX2VuZm9yY2VNYXhFdmVudHMoKSlcbiAgICAgICAgICAgIC5jYXRjaCgoX2Vycm9yKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGxvZ2dlci53YXJuKCdjb3VsZCBub3QgY2FjaGUgZXZlbnQgd2hpbGUgb2ZmbGluZScpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyByZXR1cm4gbnVsbCBvbiBzdWNjZXNzIG9yIGZhaWx1cmUsIGJlY2F1c2UgYmVpbmcgb2ZmbGluZSB3aWxsIHN0aWxsIHJlc3VsdCBpbiBhbiBlcnJvclxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBldmVudDtcbiAgICB9KTtcblxuICAgIC8vIGlmIG9ubGluZSBub3csIHNlbmQgYW55IGV2ZW50cyBzdG9yZWQgaW4gYSBwcmV2aW91cyBvZmZsaW5lIHNlc3Npb25cbiAgICBpZiAoJ25hdmlnYXRvcicgaW4gdGhpcy5nbG9iYWwgJiYgJ29uTGluZScgaW4gdGhpcy5nbG9iYWwubmF2aWdhdG9yICYmIHRoaXMuZ2xvYmFsLm5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgIHZvaWQgdGhpcy5fc2VuZEV2ZW50cygpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ2NvdWxkIG5vdCBzZW5kIGNhY2hlZCBldmVudHMnKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBjYWNoZSBhbiBldmVudCB0byBzZW5kIGxhdGVyXG4gICAqIEBwYXJhbSBldmVudCBhbiBldmVudFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBfY2FjaGVFdmVudChldmVudDogRXZlbnQpOiBQcm9taXNlPEV2ZW50PiB7XG4gICAgcmV0dXJuIHRoaXMub2ZmbGluZUV2ZW50U3RvcmUuc2V0SXRlbTxFdmVudD4odXVpZDQoKSwgbm9ybWFsaXplKGV2ZW50KSk7XG4gIH1cblxuICAvKipcbiAgICogcHVyZ2UgZXhjZXNzIGV2ZW50cyBpZiBuZWNlc3NhcnlcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgX2VuZm9yY2VNYXhFdmVudHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZXZlbnRzOiBBcnJheTx7IGV2ZW50OiBFdmVudDsgY2FjaGVLZXk6IHN0cmluZyB9PiA9IFtdO1xuXG4gICAgcmV0dXJuIHRoaXMub2ZmbGluZUV2ZW50U3RvcmVcbiAgICAgIC5pdGVyYXRlPEV2ZW50LCB2b2lkPigoZXZlbnQ6IEV2ZW50LCBjYWNoZUtleTogc3RyaW5nLCBfaW5kZXg6IG51bWJlcik6IHZvaWQgPT4ge1xuICAgICAgICAvLyBhZ2dyZWdhdGUgZXZlbnRzXG4gICAgICAgIGV2ZW50cy5wdXNoKHsgY2FjaGVLZXksIGV2ZW50IH0pO1xuICAgICAgfSlcbiAgICAgIC50aGVuKFxuICAgICAgICAoKTogUHJvbWlzZTx2b2lkPiA9PlxuICAgICAgICAgIC8vIHRoaXMgcHJvbWlzZSByZXNvbHZlcyB3aGVuIHRoZSBpdGVyYXRpb24gaXMgZmluaXNoZWRcbiAgICAgICAgICB0aGlzLl9wdXJnZUV2ZW50cyhcbiAgICAgICAgICAgIC8vIHB1cmdlIGFsbCBldmVudHMgcGFzdCBtYXhTdG9yZWRFdmVudHMgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyXG4gICAgICAgICAgICBldmVudHNcbiAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IChiLmV2ZW50LnRpbWVzdGFtcCB8fCAwKSAtIChhLmV2ZW50LnRpbWVzdGFtcCB8fCAwKSlcbiAgICAgICAgICAgICAgLnNsaWNlKHRoaXMubWF4U3RvcmVkRXZlbnRzIDwgZXZlbnRzLmxlbmd0aCA/IHRoaXMubWF4U3RvcmVkRXZlbnRzIDogZXZlbnRzLmxlbmd0aClcbiAgICAgICAgICAgICAgLm1hcChldmVudCA9PiBldmVudC5jYWNoZUtleSksXG4gICAgICAgICAgKSxcbiAgICAgIClcbiAgICAgIC5jYXRjaCgoX2Vycm9yKTogdm9pZCA9PiB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdjb3VsZCBub3QgZW5mb3JjZSBtYXggZXZlbnRzJyk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBwdXJnZSBldmVudCBmcm9tIGNhY2hlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIF9wdXJnZUV2ZW50KGNhY2hlS2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5vZmZsaW5lRXZlbnRTdG9yZS5yZW1vdmVJdGVtKGNhY2hlS2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBwdXJnZSBldmVudHMgZnJvbSBjYWNoZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBfcHVyZ2VFdmVudHMoY2FjaGVLZXlzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIHRyYWlsIHdpdGggLnRoZW4gdG8gZW5zdXJlIHRoZSByZXR1cm4gdHlwZSBhcyB2b2lkIGFuZCBub3Qgdm9pZHx2b2lkW11cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoY2FjaGVLZXlzLm1hcChjYWNoZUtleSA9PiB0aGlzLl9wdXJnZUV2ZW50KGNhY2hlS2V5KSkpLnRoZW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZW5kIGFsbCBldmVudHNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgX3NlbmRFdmVudHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMub2ZmbGluZUV2ZW50U3RvcmUuaXRlcmF0ZTxFdmVudCwgdm9pZD4oKGV2ZW50OiBFdmVudCwgY2FjaGVLZXk6IHN0cmluZywgX2luZGV4OiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0aGlzLmh1Yikge1xuICAgICAgICB0aGlzLmh1Yi5jYXB0dXJlRXZlbnQoZXZlbnQpO1xuXG4gICAgICAgIHZvaWQgdGhpcy5fcHVyZ2VFdmVudChjYWNoZUtleSkuY2F0Y2goKF9lcnJvcik6IHZvaWQgPT4ge1xuICAgICAgICAgIGxvZ2dlci53YXJuKCdjb3VsZCBub3QgcHVyZ2UgZXZlbnQgZnJvbSBjYWNoZScpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdubyBodWIgZm91bmQgLSBjb3VsZCBub3Qgc2VuZCBjYWNoZWQgZXZlbnQnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwgIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEV2ZW50UHJvY2Vzc29yLCBIdWIsIEludGVncmF0aW9uIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QsIHN1cHBvcnRzUmVwb3J0aW5nT2JzZXJ2ZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuLyoqIEpTRG9jICovXG5pbnRlcmZhY2UgUmVwb3J0IHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xuICB0eXBlOiBSZXBvcnRUeXBlcztcbiAgdXJsOiBzdHJpbmc7XG4gIGJvZHk/OiBSZXBvcnRCb2R5O1xufVxuXG4vKiogSlNEb2MgKi9cbmNvbnN0IGVudW0gUmVwb3J0VHlwZXMge1xuICAvKiogSlNEb2MgKi9cbiAgQ3Jhc2ggPSAnY3Jhc2gnLFxuICAvKiogSlNEb2MgKi9cbiAgRGVwcmVjYXRpb24gPSAnZGVwcmVjYXRpb24nLFxuICAvKiogSlNEb2MgKi9cbiAgSW50ZXJ2ZW50aW9uID0gJ2ludGVydmVudGlvbicsXG59XG5cbi8qKiBKU0RvYyAqL1xudHlwZSBSZXBvcnRCb2R5ID0gQ3Jhc2hSZXBvcnRCb2R5IHwgRGVwcmVjYXRpb25SZXBvcnRCb2R5IHwgSW50ZXJ2ZW50aW9uUmVwb3J0Qm9keTtcblxuLyoqIEpTRG9jICovXG5pbnRlcmZhY2UgQ3Jhc2hSZXBvcnRCb2R5IHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xuICBjcmFzaElkOiBzdHJpbmc7XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuLyoqIEpTRG9jICovXG5pbnRlcmZhY2UgRGVwcmVjYXRpb25SZXBvcnRCb2R5IHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xuICBpZDogc3RyaW5nO1xuICBhbnRpY2lwYXRlZFJlbW92YWw/OiBEYXRlO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHNvdXJjZUZpbGU/OiBzdHJpbmc7XG4gIGxpbmVOdW1iZXI/OiBudW1iZXI7XG4gIGNvbHVtbk51bWJlcj86IG51bWJlcjtcbn1cblxuLyoqIEpTRG9jICovXG5pbnRlcmZhY2UgSW50ZXJ2ZW50aW9uUmVwb3J0Qm9keSB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbiAgaWQ6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBzb3VyY2VGaWxlPzogc3RyaW5nO1xuICBsaW5lTnVtYmVyPzogbnVtYmVyO1xuICBjb2x1bW5OdW1iZXI/OiBudW1iZXI7XG59XG5cbi8qKiBSZXBvcnRpbmcgQVBJIGludGVncmF0aW9uIC0gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3JlcG9ydGluZy8gKi9cbmV4cG9ydCBjbGFzcyBSZXBvcnRpbmdPYnNlcnZlciBpbXBsZW1lbnRzIEludGVncmF0aW9uIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlkOiBzdHJpbmcgPSAnUmVwb3J0aW5nT2JzZXJ2ZXInO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZyA9IFJlcG9ydGluZ09ic2VydmVyLmlkO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGN1cnJlbnQgaHViLlxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0Q3VycmVudEh1Yj86ICgpID0+IEh1YjtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiB7XG4gICAgICB0eXBlcz86IFJlcG9ydFR5cGVzW107XG4gICAgfSA9IHtcbiAgICAgIHR5cGVzOiBbUmVwb3J0VHlwZXMuQ3Jhc2gsIFJlcG9ydFR5cGVzLkRlcHJlY2F0aW9uLCBSZXBvcnRUeXBlcy5JbnRlcnZlbnRpb25dLFxuICAgIH0sXG4gICkge31cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXR1cE9uY2UoXzogKGNhbGxiYWNrOiBFdmVudFByb2Nlc3NvcikgPT4gdm9pZCwgZ2V0Q3VycmVudEh1YjogKCkgPT4gSHViKTogdm9pZCB7XG4gICAgaWYgKCFzdXBwb3J0c1JlcG9ydGluZ09ic2VydmVyKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9nZXRDdXJyZW50SHViID0gZ2V0Q3VycmVudEh1YjtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyAoZ2V0R2xvYmFsT2JqZWN0PGFueT4oKS5SZXBvcnRpbmdPYnNlcnZlcikodGhpcy5oYW5kbGVyLmJpbmQodGhpcyksIHtcbiAgICAgIGJ1ZmZlcmVkOiB0cnVlLFxuICAgICAgdHlwZXM6IHRoaXMuX29wdGlvbnMudHlwZXMsXG4gICAgfSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgaGFuZGxlcihyZXBvcnRzOiBSZXBvcnRbXSk6IHZvaWQge1xuICAgIGNvbnN0IGh1YiA9IHRoaXMuX2dldEN1cnJlbnRIdWIgJiYgdGhpcy5fZ2V0Q3VycmVudEh1YigpO1xuICAgIGlmICghaHViIHx8ICFodWIuZ2V0SW50ZWdyYXRpb24oUmVwb3J0aW5nT2JzZXJ2ZXIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgcmVwb3J0IG9mIHJlcG9ydHMpIHtcbiAgICAgIGh1Yi53aXRoU2NvcGUoc2NvcGUgPT4ge1xuICAgICAgICBzY29wZS5zZXRFeHRyYSgndXJsJywgcmVwb3J0LnVybCk7XG5cbiAgICAgICAgY29uc3QgbGFiZWwgPSBgUmVwb3J0aW5nT2JzZXJ2ZXIgWyR7cmVwb3J0LnR5cGV9XWA7XG4gICAgICAgIGxldCBkZXRhaWxzID0gJ05vIGRldGFpbHMgYXZhaWxhYmxlJztcblxuICAgICAgICBpZiAocmVwb3J0LmJvZHkpIHtcbiAgICAgICAgICAvLyBPYmplY3Qua2V5cyBkb2Vzbid0IHdvcmsgb24gUmVwb3J0Qm9keSwgYXMgYWxsIHByb3BlcnRpZXMgYXJlIGluaGVpcnRlZFxuICAgICAgICAgIGNvbnN0IHBsYWluQm9keToge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICAgIH0gPSB7fTtcblxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBndWFyZC1mb3ItaW5cbiAgICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gcmVwb3J0LmJvZHkpIHtcbiAgICAgICAgICAgIHBsYWluQm9keVtwcm9wXSA9IHJlcG9ydC5ib2R5W3Byb3BdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNjb3BlLnNldEV4dHJhKCdib2R5JywgcGxhaW5Cb2R5KTtcblxuICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gUmVwb3J0VHlwZXMuQ3Jhc2gpIHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSByZXBvcnQuYm9keSBhcyBDcmFzaFJlcG9ydEJvZHk7XG4gICAgICAgICAgICAvLyBBIGZhbmN5IHdheSB0byBjcmVhdGUgYSBtZXNzYWdlIG91dCBvZiBjcmFzaElkIE9SIHJlYXNvbiBPUiBib3RoIE9SIGZhbGxiYWNrXG4gICAgICAgICAgICBkZXRhaWxzID0gW2JvZHkuY3Jhc2hJZCB8fCAnJywgYm9keS5yZWFzb24gfHwgJyddLmpvaW4oJyAnKS50cmltKCkgfHwgZGV0YWlscztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IHJlcG9ydC5ib2R5IGFzIERlcHJlY2F0aW9uUmVwb3J0Qm9keSB8IEludGVydmVudGlvblJlcG9ydEJvZHk7XG4gICAgICAgICAgICBkZXRhaWxzID0gYm9keS5tZXNzYWdlIHx8IGRldGFpbHM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaHViLmNhcHR1cmVNZXNzYWdlKGAke2xhYmVsfTogJHtkZXRhaWxzfWApO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgRXZlbnQsIEV2ZW50UHJvY2Vzc29yLCBIdWIsIEludGVncmF0aW9uLCBTdGFja0ZyYW1lLCBTdGFja3RyYWNlIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBiYXNlbmFtZSwgcmVsYXRpdmUgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxudHlwZSBTdGFja0ZyYW1lSXRlcmF0ZWUgPSAoZnJhbWU6IFN0YWNrRnJhbWUpID0+IFN0YWNrRnJhbWU7XG5cbi8qKiBSZXdyaXRlIGV2ZW50IGZyYW1lcyBwYXRocyAqL1xuZXhwb3J0IGNsYXNzIFJld3JpdGVGcmFtZXMgaW1wbGVtZW50cyBJbnRlZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpZDogc3RyaW5nID0gJ1Jld3JpdGVGcmFtZXMnO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIG5hbWU6IHN0cmluZyA9IFJld3JpdGVGcmFtZXMuaWQ7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9yb290Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfcHJlZml4OiBzdHJpbmcgPSAnYXBwOi8vLyc7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogeyByb290Pzogc3RyaW5nOyBwcmVmaXg/OiBzdHJpbmc7IGl0ZXJhdGVlPzogU3RhY2tGcmFtZUl0ZXJhdGVlIH0gPSB7fSkge1xuICAgIGlmIChvcHRpb25zLnJvb3QpIHtcbiAgICAgIHRoaXMuX3Jvb3QgPSBvcHRpb25zLnJvb3Q7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnByZWZpeCkge1xuICAgICAgdGhpcy5fcHJlZml4ID0gb3B0aW9ucy5wcmVmaXg7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLml0ZXJhdGVlKSB7XG4gICAgICB0aGlzLl9pdGVyYXRlZSA9IG9wdGlvbnMuaXRlcmF0ZWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0dXBPbmNlKGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yOiAoY2FsbGJhY2s6IEV2ZW50UHJvY2Vzc29yKSA9PiB2b2lkLCBnZXRDdXJyZW50SHViOiAoKSA9PiBIdWIpOiB2b2lkIHtcbiAgICBhZGRHbG9iYWxFdmVudFByb2Nlc3NvcihldmVudCA9PiB7XG4gICAgICBjb25zdCBzZWxmID0gZ2V0Q3VycmVudEh1YigpLmdldEludGVncmF0aW9uKFJld3JpdGVGcmFtZXMpO1xuICAgICAgaWYgKHNlbGYpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYucHJvY2VzcyhldmVudCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfSk7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHVibGljIHByb2Nlc3Mob3JpZ2luYWxFdmVudDogRXZlbnQpOiBFdmVudCB7XG4gICAgbGV0IHByb2Nlc3NlZEV2ZW50ID0gb3JpZ2luYWxFdmVudDtcblxuICAgIGlmIChvcmlnaW5hbEV2ZW50LmV4Y2VwdGlvbiAmJiBBcnJheS5pc0FycmF5KG9yaWdpbmFsRXZlbnQuZXhjZXB0aW9uLnZhbHVlcykpIHtcbiAgICAgIHByb2Nlc3NlZEV2ZW50ID0gdGhpcy5fcHJvY2Vzc0V4Y2VwdGlvbnNFdmVudChwcm9jZXNzZWRFdmVudCk7XG4gICAgfVxuXG4gICAgaWYgKG9yaWdpbmFsRXZlbnQuc3RhY2t0cmFjZSkge1xuICAgICAgcHJvY2Vzc2VkRXZlbnQgPSB0aGlzLl9wcm9jZXNzU3RhY2t0cmFjZUV2ZW50KHByb2Nlc3NlZEV2ZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2Vzc2VkRXZlbnQ7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2l0ZXJhdGVlOiBTdGFja0ZyYW1lSXRlcmF0ZWUgPSAoZnJhbWU6IFN0YWNrRnJhbWUpID0+IHtcbiAgICBpZiAoIWZyYW1lLmZpbGVuYW1lKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICAgIC8vIENoZWNrIGlmIHRoZSBmcmFtZSBmaWxlbmFtZSBiZWdpbnMgd2l0aCBgL2Agb3IgYSBXaW5kb3dzLXN0eWxlIHByZWZpeCBzdWNoIGFzIGBDOlxcYFxuICAgIGNvbnN0IGlzV2luZG93c0ZyYW1lID0gL15bQS1aXTpcXFxcLy50ZXN0KGZyYW1lLmZpbGVuYW1lKTtcbiAgICBjb25zdCBzdGFydHNXaXRoU2xhc2ggPSAvXlxcLy8udGVzdChmcmFtZS5maWxlbmFtZSk7XG4gICAgaWYgKGlzV2luZG93c0ZyYW1lIHx8IHN0YXJ0c1dpdGhTbGFzaCkge1xuICAgICAgY29uc3QgZmlsZW5hbWUgPSBpc1dpbmRvd3NGcmFtZVxuICAgICAgICA/IGZyYW1lLmZpbGVuYW1lXG4gICAgICAgICAgICAucmVwbGFjZSgvXltBLVpdOi8sICcnKSAvLyByZW1vdmUgV2luZG93cy1zdHlsZSBwcmVmaXhcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcL2csICcvJykgLy8gcmVwbGFjZSBhbGwgYFxcXFxgIGluc3RhbmNlcyB3aXRoIGAvYFxuICAgICAgICA6IGZyYW1lLmZpbGVuYW1lO1xuICAgICAgY29uc3QgYmFzZSA9IHRoaXMuX3Jvb3QgPyByZWxhdGl2ZSh0aGlzLl9yb290LCBmaWxlbmFtZSkgOiBiYXNlbmFtZShmaWxlbmFtZSk7XG4gICAgICBmcmFtZS5maWxlbmFtZSA9IGAke3RoaXMuX3ByZWZpeH0ke2Jhc2V9YDtcbiAgICB9XG4gICAgcmV0dXJuIGZyYW1lO1xuICB9O1xuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIF9wcm9jZXNzRXhjZXB0aW9uc0V2ZW50KGV2ZW50OiBFdmVudCk6IEV2ZW50IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgIGV4Y2VwdGlvbjoge1xuICAgICAgICAgIC4uLmV2ZW50LmV4Y2VwdGlvbixcbiAgICAgICAgICAvLyBUaGUgY2hlY2sgZm9yIHRoaXMgaXMgcGVyZm9ybWVkIGluc2lkZSBgcHJvY2Vzc2AgY2FsbCBpdHNlbGYsIHNhZmUgdG8gc2tpcCBoZXJlXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICB2YWx1ZXM6IGV2ZW50LmV4Y2VwdGlvbiEudmFsdWVzIS5tYXAodmFsdWUgPT4gKHtcbiAgICAgICAgICAgIC4uLnZhbHVlLFxuICAgICAgICAgICAgc3RhY2t0cmFjZTogdGhpcy5fcHJvY2Vzc1N0YWNrdHJhY2UodmFsdWUuc3RhY2t0cmFjZSksXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChfb08pIHtcbiAgICAgIHJldHVybiBldmVudDtcbiAgICB9XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSBfcHJvY2Vzc1N0YWNrdHJhY2VFdmVudChldmVudDogRXZlbnQpOiBFdmVudCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmV2ZW50LFxuICAgICAgICBzdGFja3RyYWNlOiB0aGlzLl9wcm9jZXNzU3RhY2t0cmFjZShldmVudC5zdGFja3RyYWNlKSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoX29PKSB7XG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgX3Byb2Nlc3NTdGFja3RyYWNlKHN0YWNrdHJhY2U/OiBTdGFja3RyYWNlKTogU3RhY2t0cmFjZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YWNrdHJhY2UsXG4gICAgICBmcmFtZXM6IHN0YWNrdHJhY2UgJiYgc3RhY2t0cmFjZS5mcmFtZXMgJiYgc3RhY2t0cmFjZS5mcmFtZXMubWFwKGYgPT4gdGhpcy5faXRlcmF0ZWUoZikpLFxuICAgIH07XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBFdmVudCwgRXZlbnRQcm9jZXNzb3IsIEh1YiwgSW50ZWdyYXRpb24gfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcblxuLyoqIFRoaXMgZnVuY3Rpb24gYWRkcyBkdXJhdGlvbiBzaW5jZSBTZW50cnkgd2FzIGluaXRpYWxpemVkIHRpbGwgdGhlIHRpbWUgZXZlbnQgd2FzIHNlbnQgKi9cbmV4cG9ydCBjbGFzcyBTZXNzaW9uVGltaW5nIGltcGxlbWVudHMgSW50ZWdyYXRpb24ge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaWQ6IHN0cmluZyA9ICdTZXNzaW9uVGltaW5nJztcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSBTZXNzaW9uVGltaW5nLmlkO1xuXG4gIC8qKiBFeGFjdCB0aW1lIENsaWVudCB3YXMgaW5pdGlhbGl6ZWQgZXhwcmVzc2VkIGluIG1pbGxpc2Vjb25kcyBzaW5jZSBVbml4IEVwb2NoLiAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3N0YXJ0VGltZTogbnVtYmVyID0gRGF0ZS5ub3coKTtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXR1cE9uY2UoYWRkR2xvYmFsRXZlbnRQcm9jZXNzb3I6IChjYWxsYmFjazogRXZlbnRQcm9jZXNzb3IpID0+IHZvaWQsIGdldEN1cnJlbnRIdWI6ICgpID0+IEh1Yik6IHZvaWQge1xuICAgIGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yKGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHNlbGYgPSBnZXRDdXJyZW50SHViKCkuZ2V0SW50ZWdyYXRpb24oU2Vzc2lvblRpbWluZyk7XG4gICAgICBpZiAoc2VsZikge1xuICAgICAgICByZXR1cm4gc2VsZi5wcm9jZXNzKGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBldmVudDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHByb2Nlc3MoZXZlbnQ6IEV2ZW50KTogRXZlbnQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZXZlbnQsXG4gICAgICBleHRyYToge1xuICAgICAgICAuLi5ldmVudC5leHRyYSxcbiAgICAgICAgWydzZXNzaW9uOnN0YXJ0J106IHRoaXMuX3N0YXJ0VGltZSxcbiAgICAgICAgWydzZXNzaW9uOmR1cmF0aW9uJ106IG5vdyAtIHRoaXMuX3N0YXJ0VGltZSxcbiAgICAgICAgWydzZXNzaW9uOmVuZCddOiBub3csXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBFdmVudCwgRXZlbnRQcm9jZXNzb3IsIEh1YiwgSW50ZWdyYXRpb24sIFN0YWNrRnJhbWUgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcblxuLyoqIEFkZCBub2RlIHRyYW5zYWN0aW9uIHRvIHRoZSBldmVudCAqL1xuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uIGltcGxlbWVudHMgSW50ZWdyYXRpb24ge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaWQ6IHN0cmluZyA9ICdUcmFuc2FjdGlvbic7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgbmFtZTogc3RyaW5nID0gVHJhbnNhY3Rpb24uaWQ7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0dXBPbmNlKGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yOiAoY2FsbGJhY2s6IEV2ZW50UHJvY2Vzc29yKSA9PiB2b2lkLCBnZXRDdXJyZW50SHViOiAoKSA9PiBIdWIpOiB2b2lkIHtcbiAgICBhZGRHbG9iYWxFdmVudFByb2Nlc3NvcihldmVudCA9PiB7XG4gICAgICBjb25zdCBzZWxmID0gZ2V0Q3VycmVudEh1YigpLmdldEludGVncmF0aW9uKFRyYW5zYWN0aW9uKTtcbiAgICAgIGlmIChzZWxmKSB7XG4gICAgICAgIHJldHVybiBzZWxmLnByb2Nlc3MoZXZlbnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV2ZW50O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgcHJvY2VzcyhldmVudDogRXZlbnQpOiBFdmVudCB7XG4gICAgY29uc3QgZnJhbWVzID0gdGhpcy5fZ2V0RnJhbWVzRnJvbUV2ZW50KGV2ZW50KTtcblxuICAgIC8vIHVzZSBmb3IgbG9vcCBzbyB3ZSBkb24ndCBoYXZlIHRvIHJldmVyc2Ugd2hvbGUgZnJhbWVzIGFycmF5XG4gICAgZm9yIChsZXQgaSA9IGZyYW1lcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgZnJhbWUgPSBmcmFtZXNbaV07XG5cbiAgICAgIGlmIChmcmFtZS5pbl9hcHAgPT09IHRydWUpIHtcbiAgICAgICAgZXZlbnQudHJhbnNhY3Rpb24gPSB0aGlzLl9nZXRUcmFuc2FjdGlvbihmcmFtZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBldmVudDtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIF9nZXRGcmFtZXNGcm9tRXZlbnQoZXZlbnQ6IEV2ZW50KTogU3RhY2tGcmFtZVtdIHtcbiAgICBjb25zdCBleGNlcHRpb24gPSBldmVudC5leGNlcHRpb24gJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlcyAmJiBldmVudC5leGNlcHRpb24udmFsdWVzWzBdO1xuICAgIHJldHVybiAoZXhjZXB0aW9uICYmIGV4Y2VwdGlvbi5zdGFja3RyYWNlICYmIGV4Y2VwdGlvbi5zdGFja3RyYWNlLmZyYW1lcykgfHwgW107XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSBfZ2V0VHJhbnNhY3Rpb24oZnJhbWU6IFN0YWNrRnJhbWUpOiBzdHJpbmcge1xuICAgIHJldHVybiBmcmFtZS5tb2R1bGUgfHwgZnJhbWUuZnVuY3Rpb24gPyBgJHtmcmFtZS5tb2R1bGUgfHwgJz8nfS8ke2ZyYW1lLmZ1bmN0aW9uIHx8ICc/J31gIDogJzx1bmtub3duPic7XG4gIH1cbn1cbiIsICIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGluZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEV2ZW50UHJvY2Vzc29yLCBIdWIsIEludGVncmF0aW9uLCBJbnRlZ3JhdGlvbkNsYXNzLCBTY29wZSwgU3BhbiwgVHJhbnNhY3Rpb24gfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGJhc2VuYW1lLCBnZXRHbG9iYWxPYmplY3QsIGxvZ2dlciwgdGltZXN0YW1wV2l0aE1zIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbi8qKlxuICogVXNlZCB0byBleHRyYWN0IFRyYWNpbmcgaW50ZWdyYXRpb24gZnJvbSB0aGUgY3VycmVudCBjbGllbnQsXG4gKiB3aXRob3V0IHRoZSBuZWVkIHRvIGltcG9ydCBgVHJhY2luZ2AgaXRzZWxmIGZyb20gdGhlIEBzZW50cnkvYXBtIHBhY2thZ2UuXG4gKiBAZGVwcmVjYXRlZCBhcyBAc2VudHJ5L3RyYWNpbmcgc2hvdWxkIGJlIHVzZWQgb3ZlciBAc2VudHJ5L2FwbS5cbiAqL1xuY29uc3QgVFJBQ0lOR19HRVRURVIgPSAoe1xuICBpZDogJ1RyYWNpbmcnLFxufSBhcyBhbnkpIGFzIEludGVncmF0aW9uQ2xhc3M8SW50ZWdyYXRpb24+O1xuXG4vKipcbiAqIFVzZWQgdG8gZXh0cmFjdCBCcm93c2VyVHJhY2luZyBpbnRlZ3JhdGlvbiBmcm9tIEBzZW50cnkvdHJhY2luZ1xuICovXG5jb25zdCBCUk9XU0VSX1RSQUNJTkdfR0VUVEVSID0gKHtcbiAgaWQ6ICdCcm93c2VyVHJhY2luZycsXG59IGFzIGFueSkgYXMgSW50ZWdyYXRpb25DbGFzczxJbnRlZ3JhdGlvbj47XG5cbmNvbnN0IFZVRV9PUCA9ICd1aS52dWUnO1xuXG4vKiogR2xvYmFsIFZ1ZSBvYmplY3QgbGltaXRlZCB0byB0aGUgbWV0aG9kcy9hdHRyaWJ1dGVzIHdlIHJlcXVpcmUgKi9cbmludGVyZmFjZSBWdWVJbnN0YW5jZSB7XG4gIGNvbmZpZzoge1xuICAgIGVycm9ySGFuZGxlcj8oZXJyb3I6IEVycm9yLCB2bT86IFZpZXdNb2RlbCwgaW5mbz86IHN0cmluZyk6IHZvaWQ7XG4gIH07XG4gIHV0aWw/OiB7XG4gICAgd2FybiguLi5pbnB1dDogYW55KTogdm9pZDtcbiAgfTtcbiAgbWl4aW4oaG9va3M6IHsgW2tleTogc3RyaW5nXTogKCkgPT4gdm9pZCB9KTogdm9pZDtcbn1cblxuLyoqIFJlcHJlc2VudGF0aW9uIG9mIFZ1ZSBjb21wb25lbnQgaW50ZXJuYWxzICovXG5pbnRlcmZhY2UgVmlld01vZGVsIHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuICAkcm9vdDogb2JqZWN0O1xuICAkb3B0aW9uczoge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIHByb3BzRGF0YT86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gICAgX2NvbXBvbmVudFRhZz86IHN0cmluZztcbiAgICBfX2ZpbGU/OiBzdHJpbmc7XG4gICAgJF9zZW50cnlQZXJmSG9vaz86IGJvb2xlYW47XG4gIH07XG4gICRvbmNlKGhvb2s6IHN0cmluZywgY2I6ICgpID0+IHZvaWQpOiB2b2lkO1xufVxuXG4vKiogVnVlIEludGVncmF0aW9uIGNvbmZpZ3VyYXRpb24gKi9cbmludGVyZmFjZSBJbnRlZ3JhdGlvbk9wdGlvbnMge1xuICAvKiogVnVlIGluc3RhbmNlIHRvIGJlIHVzZWQgaW5zaWRlIHRoZSBpbnRlZ3JhdGlvbiAqL1xuICBWdWU6IFZ1ZUluc3RhbmNlO1xuXG4gIC8qKlxuICAgKiBXaGVuIHNldCB0byBgZmFsc2VgLCBTZW50cnkgd2lsbCBzdXBwcmVzcyByZXBvcnRpbmcgb2YgYWxsIHByb3BzIGRhdGFcbiAgICogZnJvbSB5b3VyIFZ1ZSBjb21wb25lbnRzIGZvciBwcml2YWN5IGNvbmNlcm5zLlxuICAgKi9cbiAgYXR0YWNoUHJvcHM6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAsIG9yaWdpbmFsIFZ1ZSdzIGBsb2dFcnJvcmAgd2lsbCBiZSBjYWxsZWQgYXMgd2VsbC5cbiAgICogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9ibG9iL2MyYjFjZmU5Y2NkMDg4MzVmMmQ5OWY2Y2U2MGY2N2I0ZGU1NTE4N2Yvc3JjL2NvcmUvdXRpbC9lcnJvci5qcyNMMzgtTDQ4XG4gICAqL1xuICBsb2dFcnJvcnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIGB0cnVlYCwgZW5hYmxlcyB0cmFja2luZyBvZiBjb21wb25lbnRzIGxpZmVjeWNsZSBwZXJmb3JtYW5jZS5cbiAgICogSXQgcmVxdWlyZXMgYFRyYWNpbmdgIGludGVncmF0aW9uIHRvIGJlIGFsc28gZW5hYmxlZC5cbiAgICovXG4gIHRyYWNpbmc6IGJvb2xlYW47XG5cbiAgLyoqIHtAbGluayBUcmFjaW5nT3B0aW9uc30gKi9cbiAgdHJhY2luZ09wdGlvbnM6IFRyYWNpbmdPcHRpb25zO1xufVxuXG4vKiogVnVlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIFRyYWNpbmcgSW50ZWdyYXRpb24gICovXG5pbnRlcmZhY2UgVHJhY2luZ09wdGlvbnMge1xuICAvKipcbiAgICogRGVjaWRlcyB3aGV0aGVyIHRvIHRyYWNrIGNvbXBvbmVudHMgYnkgaG9va2luZyBpbnRvIGl0cyBsaWZlY3ljbGUgbWV0aG9kcy5cbiAgICogQ2FuIGJlIGVpdGhlciBzZXQgdG8gYGJvb2xlYW5gIHRvIGVuYWJsZS9kaXNhYmxlIHRyYWNraW5nIGZvciBhbGwgb2YgdGhlbS5cbiAgICogT3IgdG8gYW4gYXJyYXkgb2Ygc3BlY2lmaWMgY29tcG9uZW50IG5hbWVzIChjYXNlLXNlbnNpdGl2ZSkuXG4gICAqL1xuICB0cmFja0NvbXBvbmVudHM6IGJvb2xlYW4gfCBzdHJpbmdbXTtcbiAgLyoqIEhvdyBsb25nIHRvIHdhaXQgdW50aWwgdGhlIHRyYWNrZWQgcm9vdCBhY3Rpdml0eSBpcyBtYXJrZWQgYXMgZmluaXNoZWQgYW5kIHNlbnQgb2YgdG8gU2VudHJ5ICovXG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIExpc3Qgb2YgaG9va3MgdG8ga2VlcCB0cmFjayBvZiBkdXJpbmcgY29tcG9uZW50IGxpZmVjeWNsZS5cbiAgICogQXZhaWxhYmxlIGhvb2tzOiAnYWN0aXZhdGUnIHwgJ2NyZWF0ZScgfCAnZGVzdHJveScgfCAnbW91bnQnIHwgJ3VwZGF0ZSdcbiAgICogQmFzZWQgb24gaHR0cHM6Ly92dWVqcy5vcmcvdjIvYXBpLyNPcHRpb25zLUxpZmVjeWNsZS1Ib29rc1xuICAgKi9cbiAgaG9va3M6IE9wZXJhdGlvbltdO1xufVxuXG4vKiogT3B0aW9uYWwgbWV0YWRhdGEgYXR0YWNoZWQgdG8gU2VudHJ5IEV2ZW50ICovXG5pbnRlcmZhY2UgTWV0YWRhdGEge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIGNvbXBvbmVudE5hbWU/OiBzdHJpbmc7XG4gIHByb3BzRGF0YT86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gIGxpZmVjeWNsZUhvb2s/OiBzdHJpbmc7XG59XG5cbi8vIGh0dHBzOi8vdnVlanMub3JnL3YyL2FwaS8jT3B0aW9ucy1MaWZlY3ljbGUtSG9va3NcbnR5cGUgSG9vayA9XG4gIHwgJ2FjdGl2YXRlZCdcbiAgfCAnYmVmb3JlQ3JlYXRlJ1xuICB8ICdiZWZvcmVEZXN0cm95J1xuICB8ICdiZWZvcmVNb3VudCdcbiAgfCAnYmVmb3JlVXBkYXRlJ1xuICB8ICdjcmVhdGVkJ1xuICB8ICdkZWFjdGl2YXRlZCdcbiAgfCAnZGVzdHJveWVkJ1xuICB8ICdtb3VudGVkJ1xuICB8ICd1cGRhdGVkJztcblxudHlwZSBPcGVyYXRpb24gPSAnYWN0aXZhdGUnIHwgJ2NyZWF0ZScgfCAnZGVzdHJveScgfCAnbW91bnQnIHwgJ3VwZGF0ZSc7XG5cbi8vIE1hcHBpbmdzIGZyb20gb3BlcmF0aW9uIHRvIGNvcnJlc3BvbmRpbmcgbGlmZWN5Y2xlIGhvb2suXG5jb25zdCBIT09LUzogeyBba2V5IGluIE9wZXJhdGlvbl06IEhvb2tbXSB9ID0ge1xuICBhY3RpdmF0ZTogWydhY3RpdmF0ZWQnLCAnZGVhY3RpdmF0ZWQnXSxcbiAgY3JlYXRlOiBbJ2JlZm9yZUNyZWF0ZScsICdjcmVhdGVkJ10sXG4gIGRlc3Ryb3k6IFsnYmVmb3JlRGVzdHJveScsICdkZXN0cm95ZWQnXSxcbiAgbW91bnQ6IFsnYmVmb3JlTW91bnQnLCAnbW91bnRlZCddLFxuICB1cGRhdGU6IFsnYmVmb3JlVXBkYXRlJywgJ3VwZGF0ZWQnXSxcbn07XG5cbmNvbnN0IENPTVBPTkVOVF9OQU1FX1JFR0VYUCA9IC8oPzpefFstXy9dKShcXHcpL2c7XG5jb25zdCBST09UX0NPTVBPTkVOVF9OQU1FID0gJ3Jvb3QnO1xuY29uc3QgQU5PTllNT1VTX0NPTVBPTkVOVF9OQU1FID0gJ2Fub255bW91cyBjb21wb25lbnQnO1xuXG4vKiogSlNEb2MgKi9cbmV4cG9ydCBjbGFzcyBWdWUgaW1wbGVtZW50cyBJbnRlZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpZDogc3RyaW5nID0gJ1Z1ZSc7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgbmFtZTogc3RyaW5nID0gVnVlLmlkO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IEludGVncmF0aW9uT3B0aW9ucztcblxuICAvKipcbiAgICogQ2FjaGUgaG9sZGluZyBhbHJlYWR5IHByb2Nlc3NlZCBjb21wb25lbnQgbmFtZXNcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbXBvbmVudHNDYWNoZTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICBwcml2YXRlIF9yb290U3Bhbj86IFNwYW47XG4gIHByaXZhdGUgX3Jvb3RTcGFuVGltZXI/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgcHJpdmF0ZSBfdHJhY2luZ0FjdGl2aXR5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIG9wdGlvbnM6IFBhcnRpYWw8T21pdDxJbnRlZ3JhdGlvbk9wdGlvbnMsICd0cmFjaW5nT3B0aW9ucyc+ICYgeyB0cmFjaW5nT3B0aW9uczogUGFydGlhbDxUcmFjaW5nT3B0aW9ucz4gfT4sXG4gICkge1xuICAgIGxvZ2dlci5sb2coJ1lvdSBhcmUgc3RpbGwgdXNpbmcgdGhlIFZ1ZS5qcyBpbnRlZ3JhdGlvbiwgY29uc2lkZXIgbW92aW5nIHRvIEBzZW50cnkvdnVlJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgIFZ1ZTogZ2V0R2xvYmFsT2JqZWN0PGFueT4oKS5WdWUsXG4gICAgICBhdHRhY2hQcm9wczogdHJ1ZSxcbiAgICAgIGxvZ0Vycm9yczogZmFsc2UsXG4gICAgICB0cmFjaW5nOiBmYWxzZSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB0cmFjaW5nT3B0aW9uczoge1xuICAgICAgICBob29rczogWydtb3VudCcsICd1cGRhdGUnXSxcbiAgICAgICAgdGltZW91dDogMjAwMCxcbiAgICAgICAgdHJhY2tDb21wb25lbnRzOiBmYWxzZSxcbiAgICAgICAgLi4ub3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldHVwT25jZShfOiAoY2FsbGJhY2s6IEV2ZW50UHJvY2Vzc29yKSA9PiB2b2lkLCBnZXRDdXJyZW50SHViOiAoKSA9PiBIdWIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX29wdGlvbnMuVnVlKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1Z1ZSBpbnRlZ3JhdGlvbiBpcyBtaXNzaW5nIGEgVnVlIGluc3RhbmNlJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fYXR0YWNoRXJyb3JIYW5kbGVyKGdldEN1cnJlbnRIdWIpO1xuXG4gICAgaWYgKHRoaXMuX29wdGlvbnMudHJhY2luZykge1xuICAgICAgdGhpcy5fc3RhcnRUcmFjaW5nKGdldEN1cnJlbnRIdWIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IGNvbXBvbmVudCBuYW1lIGZyb20gdGhlIFZpZXdNb2RlbFxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0Q29tcG9uZW50TmFtZSh2bTogVmlld01vZGVsKTogc3RyaW5nIHtcbiAgICAvLyBTdWNoIGxldmVsIG9mIGdyYW51bGFyaXR5IGlzIG1vc3QgbGlrZWx5IG5vdCBuZWNlc3NhcnksIGJ1dCBiZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LiBcdTIwMTQgS2FtaWxcbiAgICBpZiAoIXZtKSB7XG4gICAgICByZXR1cm4gQU5PTllNT1VTX0NPTVBPTkVOVF9OQU1FO1xuICAgIH1cblxuICAgIGlmICh2bS4kcm9vdCA9PT0gdm0pIHtcbiAgICAgIHJldHVybiBST09UX0NPTVBPTkVOVF9OQU1FO1xuICAgIH1cblxuICAgIGlmICghdm0uJG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBBTk9OWU1PVVNfQ09NUE9ORU5UX05BTUU7XG4gICAgfVxuXG4gICAgaWYgKHZtLiRvcHRpb25zLm5hbWUpIHtcbiAgICAgIHJldHVybiB2bS4kb3B0aW9ucy5uYW1lO1xuICAgIH1cblxuICAgIGlmICh2bS4kb3B0aW9ucy5fY29tcG9uZW50VGFnKSB7XG4gICAgICByZXR1cm4gdm0uJG9wdGlvbnMuX2NvbXBvbmVudFRhZztcbiAgICB9XG5cbiAgICAvLyBpbmplY3RlZCBieSB2dWUtbG9hZGVyXG4gICAgaWYgKHZtLiRvcHRpb25zLl9fZmlsZSkge1xuICAgICAgY29uc3QgdW5pZmllZEZpbGUgPSB2bS4kb3B0aW9ucy5fX2ZpbGUucmVwbGFjZSgvXlthLXpBLVpdOi8sICcnKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IGJhc2VuYW1lKHVuaWZpZWRGaWxlLCAnLnZ1ZScpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5fY29tcG9uZW50c0NhY2hlW2ZpbGVuYW1lXSB8fFxuICAgICAgICAodGhpcy5fY29tcG9uZW50c0NhY2hlW2ZpbGVuYW1lXSA9IGZpbGVuYW1lLnJlcGxhY2UoQ09NUE9ORU5UX05BTUVfUkVHRVhQLCAoXywgYzogc3RyaW5nKSA9PlxuICAgICAgICAgIGMgPyBjLnRvVXBwZXJDYXNlKCkgOiAnJyxcbiAgICAgICAgKSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEFOT05ZTU9VU19DT01QT05FTlRfTkFNRTtcbiAgfVxuXG4gIC8qKiBLZWVwIGl0IGFzIGF0dHJpYnV0ZSBmdW5jdGlvbiwgdG8ga2VlcCBjb3JyZWN0IGB0aGlzYCBiaW5kaW5nIGluc2lkZSB0aGUgaG9va3MgY2FsbGJhY2tzICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3R5cGVkZWZcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwbHlUcmFjaW5nSG9va3MgPSAodm06IFZpZXdNb2RlbCwgZ2V0Q3VycmVudEh1YjogKCkgPT4gSHViKTogdm9pZCA9PiB7XG4gICAgLy8gRG9uJ3QgYXR0YWNoIHR3aWNlLCBqdXN0IGluIGNhc2VcbiAgICBpZiAodm0uJG9wdGlvbnMuJF9zZW50cnlQZXJmSG9vaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2bS4kb3B0aW9ucy4kX3NlbnRyeVBlcmZIb29rID0gdHJ1ZTtcblxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9nZXRDb21wb25lbnROYW1lKHZtKTtcbiAgICBjb25zdCByb290TW91bnQgPSBuYW1lID09PSBST09UX0NPTVBPTkVOVF9OQU1FO1xuICAgIGNvbnN0IHNwYW5zOiB7IFtrZXk6IHN0cmluZ106IFNwYW4gfSA9IHt9O1xuXG4gICAgLy8gUmVuZGVyIGhvb2sgc3RhcnRzIGFmdGVyIG9uY2UgZXZlbnQgaXMgZW1pdHRlZCxcbiAgICAvLyBidXQgaXQgZW5kcyBiZWZvcmUgdGhlIHNlY29uZCBldmVudCBvZiB0aGUgc2FtZSB0eXBlLlxuICAgIC8vXG4gICAgLy8gQmVjYXVzZSBvZiB0aGlzLCB3ZSBzdGFydCBtZWFzdXJpbmcgaW5zaWRlIHRoZSBmaXJzdCBldmVudCxcbiAgICAvLyBidXQgZmluaXNoIGl0IGJlZm9yZSBpdCB0cmlnZ2VycywgdG8gc2tpcCB0aGUgZXZlbnQgZW1pdHRlciB0aW1pbmcgaXRzZWxmLlxuICAgIGNvbnN0IHJvb3RIYW5kbGVyID0gKGhvb2s6IEhvb2spOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IG5vdyA9IHRpbWVzdGFtcFdpdGhNcygpO1xuXG4gICAgICAvLyBPbiB0aGUgZmlyc3QgaGFuZGxlciBjYWxsIChiZWZvcmUpLCBpdCdsbCBiZSB1bmRlZmluZWQsIGFzIGAkb25jZWAgd2lsbCBhZGQgaXQgaW4gdGhlIGZ1dHVyZS5cbiAgICAgIC8vIEhvd2V2ZXIsIG9uIHRoZSBzZWNvbmQgY2FsbCAoYWZ0ZXIpLCBpdCdsbCBiZSBhbHJlYWR5IGluIHBsYWNlLlxuICAgICAgaWYgKHRoaXMuX3Jvb3RTcGFuKSB7XG4gICAgICAgIHRoaXMuX2ZpbmlzaFJvb3RTcGFuKG5vdywgZ2V0Q3VycmVudEh1Yik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bS4kb25jZShgaG9vazoke2hvb2t9YCwgKCkgPT4ge1xuICAgICAgICAgIC8vIENyZWF0ZSBhbiBhY3Rpdml0eSBvbiB0aGUgZmlyc3QgZXZlbnQgY2FsbC4gVGhlcmUnbGwgYmUgbm8gc2Vjb25kIGNhbGwsIGFzIHJvb3RTcGFuIHdpbGwgYmUgaW4gcGxhY2UsXG4gICAgICAgICAgLy8gdGh1cyBuZXcgZXZlbnQgaGFuZGxlciB3b24ndCBiZSBhdHRhY2hlZC5cblxuICAgICAgICAgIC8vIFdlIGRvIHRoaXMgd2hvbGUgZGFuY2Ugd2l0aCBgVFJBQ0lOR19HRVRURVJgIHRvIHByZXZlbnQgYEBzZW50cnkvYXBtYCBmcm9tIGJlY29taW5nIGEgcGVlckRlcGVuZGVuY3kuXG4gICAgICAgICAgLy8gV2UgYWxzbyBuZWVkIHRvIGFzayBmb3IgdGhlIGAuY29uc3RydWN0b3JgLCBhcyBgcHVzaEFjdGl2aXR5YCBhbmQgYHBvcEFjdGl2aXR5YCBhcmUgc3RhdGljLCBub3QgaW5zdGFuY2UgbWV0aG9kcy5cbiAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi9cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgICBjb25zdCB0cmFjaW5nSW50ZWdyYXRpb24gPSBnZXRDdXJyZW50SHViKCkuZ2V0SW50ZWdyYXRpb24oVFJBQ0lOR19HRVRURVIpO1xuICAgICAgICAgIGlmICh0cmFjaW5nSW50ZWdyYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX3RyYWNpbmdBY3Rpdml0eSA9ICh0cmFjaW5nSW50ZWdyYXRpb24gYXMgYW55KS5jb25zdHJ1Y3Rvci5wdXNoQWN0aXZpdHkoJ1Z1ZSBBcHBsaWNhdGlvbiBSZW5kZXInKTtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gKHRyYWNpbmdJbnRlZ3JhdGlvbiBhcyBhbnkpLmNvbnN0cnVjdG9yLmdldFRyYW5zYWN0aW9uKCk7XG4gICAgICAgICAgICBpZiAodHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgdGhpcy5fcm9vdFNwYW4gPSB0cmFuc2FjdGlvbi5zdGFydENoaWxkKHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0FwcGxpY2F0aW9uIFJlbmRlcicsXG4gICAgICAgICAgICAgICAgb3A6IFZVRV9PUCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBVc2UgZnVuY3Rpb25hbGl0eSBmcm9tIEBzZW50cnkvdHJhY2luZ1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhY3RpdmVUcmFuc2FjdGlvbiA9IGdldEFjdGl2ZVRyYW5zYWN0aW9uKGdldEN1cnJlbnRIdWIoKSk7XG4gICAgICAgICAgICBpZiAoYWN0aXZlVHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgdGhpcy5fcm9vdFNwYW4gPSBhY3RpdmVUcmFuc2FjdGlvbi5zdGFydENoaWxkKHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0FwcGxpY2F0aW9uIFJlbmRlcicsXG4gICAgICAgICAgICAgICAgb3A6IFZVRV9PUCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjaGlsZEhhbmRsZXIgPSAoaG9vazogSG9vaywgb3BlcmF0aW9uOiBPcGVyYXRpb24pOiB2b2lkID0+IHtcbiAgICAgIC8vIFNraXAgY29tcG9uZW50cyB0aGF0IHdlIGRvbid0IHdhbnQgdG8gdHJhY2sgdG8gbWluaW1pemUgdGhlIG5vaXNlIGFuZCBnaXZlIGEgbW9yZSBncmFudWxhciBjb250cm9sIHRvIHRoZSB1c2VyXG4gICAgICBjb25zdCBzaG91bGRUcmFjayA9IEFycmF5LmlzQXJyYXkodGhpcy5fb3B0aW9ucy50cmFjaW5nT3B0aW9ucy50cmFja0NvbXBvbmVudHMpXG4gICAgICAgID8gdGhpcy5fb3B0aW9ucy50cmFjaW5nT3B0aW9ucy50cmFja0NvbXBvbmVudHMuaW5kZXhPZihuYW1lKSA+IC0xXG4gICAgICAgIDogdGhpcy5fb3B0aW9ucy50cmFjaW5nT3B0aW9ucy50cmFja0NvbXBvbmVudHM7XG5cbiAgICAgIGlmICghdGhpcy5fcm9vdFNwYW4gfHwgIXNob3VsZFRyYWNrKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm93ID0gdGltZXN0YW1wV2l0aE1zKCk7XG4gICAgICBjb25zdCBzcGFuID0gc3BhbnNbb3BlcmF0aW9uXTtcblxuICAgICAgLy8gT24gdGhlIGZpcnN0IGhhbmRsZXIgY2FsbCAoYmVmb3JlKSwgaXQnbGwgYmUgdW5kZWZpbmVkLCBhcyBgJG9uY2VgIHdpbGwgYWRkIGl0IGluIHRoZSBmdXR1cmUuXG4gICAgICAvLyBIb3dldmVyLCBvbiB0aGUgc2Vjb25kIGNhbGwgKGFmdGVyKSwgaXQnbGwgYmUgYWxyZWFkeSBpbiBwbGFjZS5cbiAgICAgIGlmIChzcGFuKSB7XG4gICAgICAgIHNwYW4uZmluaXNoKCk7XG4gICAgICAgIHRoaXMuX2ZpbmlzaFJvb3RTcGFuKG5vdywgZ2V0Q3VycmVudEh1Yik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bS4kb25jZShgaG9vazoke2hvb2t9YCwgKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9yb290U3Bhbikge1xuICAgICAgICAgICAgc3BhbnNbb3BlcmF0aW9uXSA9IHRoaXMuX3Jvb3RTcGFuLnN0YXJ0Q2hpbGQoe1xuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYFZ1ZSA8JHtuYW1lfT5gLFxuICAgICAgICAgICAgICBvcDogYCR7VlVFX09QfS4ke29wZXJhdGlvbn1gLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gRWFjaCBjb21wb25lbnQgaGFzIGl0J3Mgb3duIHNjb3BlLCBzbyBhbGwgYWN0aXZpdGllcyBhcmUgb25seSByZWxhdGVkIHRvIG9uZSBvZiB0aGVtXG4gICAgdGhpcy5fb3B0aW9ucy50cmFjaW5nT3B0aW9ucy5ob29rcy5mb3JFYWNoKG9wZXJhdGlvbiA9PiB7XG4gICAgICAvLyBSZXRyaWV2ZSBjb3JyZXNwb25kaW5nIGhvb2tzIGZyb20gVnVlIGxpZmVjeWNsZS5cbiAgICAgIC8vIGVnLiBtb3VudCA9PiBbJ2JlZm9yZU1vdW50JywgJ21vdW50ZWQnXVxuICAgICAgY29uc3QgaW50ZXJuYWxIb29rcyA9IEhPT0tTW29wZXJhdGlvbl07XG5cbiAgICAgIGlmICghaW50ZXJuYWxIb29rcykge1xuICAgICAgICBsb2dnZXIud2FybihgVW5rbm93biBob29rOiAke29wZXJhdGlvbn1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpbnRlcm5hbEhvb2tzLmZvckVhY2goaW50ZXJuYWxIb29rID0+IHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHJvb3RNb3VudFxuICAgICAgICAgID8gcm9vdEhhbmRsZXIuYmluZCh0aGlzLCBpbnRlcm5hbEhvb2spXG4gICAgICAgICAgOiBjaGlsZEhhbmRsZXIuYmluZCh0aGlzLCBpbnRlcm5hbEhvb2ssIG9wZXJhdGlvbik7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHZtLiRvcHRpb25zW2ludGVybmFsSG9va107XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSkge1xuICAgICAgICAgIHZtLiRvcHRpb25zW2ludGVybmFsSG9va10gPSBbaGFuZGxlciwgLi4uY3VycmVudFZhbHVlXTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY3VycmVudFZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdm0uJG9wdGlvbnNbaW50ZXJuYWxIb29rXSA9IFtoYW5kbGVyLCBjdXJyZW50VmFsdWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZtLiRvcHRpb25zW2ludGVybmFsSG9va10gPSBbaGFuZGxlcl07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKiBGaW5pc2ggdG9wLWxldmVsIHNwYW4gYW5kIGFjdGl2aXR5IHdpdGggYSBkZWJvdW5jZSBjb25maWd1cmVkIHVzaW5nIGB0aW1lb3V0YCBvcHRpb24gKi9cbiAgcHJpdmF0ZSBfZmluaXNoUm9vdFNwYW4odGltZXN0YW1wOiBudW1iZXIsIGdldEN1cnJlbnRIdWI6ICgpID0+IEh1Yik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9yb290U3BhblRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fcm9vdFNwYW5UaW1lcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcm9vdFNwYW5UaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX3RyYWNpbmdBY3Rpdml0eSkge1xuICAgICAgICAvLyBXZSBkbyB0aGlzIHdob2xlIGRhbmNlIHdpdGggYFRSQUNJTkdfR0VUVEVSYCB0byBwcmV2ZW50IGBAc2VudHJ5L2FwbWAgZnJvbSBiZWNvbWluZyBhIHBlZXJEZXBlbmRlbmN5LlxuICAgICAgICAvLyBXZSBhbHNvIG5lZWQgdG8gYXNrIGZvciB0aGUgYC5jb25zdHJ1Y3RvcmAsIGFzIGBwdXNoQWN0aXZpdHlgIGFuZCBgcG9wQWN0aXZpdHlgIGFyZSBzdGF0aWMsIG5vdCBpbnN0YW5jZSBtZXRob2RzLlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgY29uc3QgdHJhY2luZ0ludGVncmF0aW9uID0gZ2V0Q3VycmVudEh1YigpLmdldEludGVncmF0aW9uKFRSQUNJTkdfR0VUVEVSKTtcbiAgICAgICAgaWYgKHRyYWNpbmdJbnRlZ3JhdGlvbikge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgICAodHJhY2luZ0ludGVncmF0aW9uIGFzIGFueSkuY29uc3RydWN0b3IucG9wQWN0aXZpdHkodGhpcy5fdHJhY2luZ0FjdGl2aXR5KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBXZSBzaG91bGQgYWx3YXlzIGZpbmlzaCB0aGUgc3Bhbiwgb25seSBzaG91bGQgcG9wIGFjdGl2aXR5IGlmIHVzaW5nIEBzZW50cnkvYXBtXG4gICAgICBpZiAodGhpcy5fcm9vdFNwYW4pIHtcbiAgICAgICAgdGhpcy5fcm9vdFNwYW4uZmluaXNoKHRpbWVzdGFtcCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5fb3B0aW9ucy50cmFjaW5nT3B0aW9ucy50aW1lb3V0KTtcbiAgfVxuXG4gIC8qKiBJbmplY3QgY29uZmlndXJlZCB0cmFjaW5nIGhvb2tzIGludG8gVnVlJ3MgY29tcG9uZW50IGxpZmVjeWNsZXMgKi9cbiAgcHJpdmF0ZSBfc3RhcnRUcmFjaW5nKGdldEN1cnJlbnRIdWI6ICgpID0+IEh1Yik6IHZvaWQge1xuICAgIGNvbnN0IGFwcGx5VHJhY2luZ0hvb2tzID0gdGhpcy5fYXBwbHlUcmFjaW5nSG9va3M7XG5cbiAgICB0aGlzLl9vcHRpb25zLlZ1ZS5taXhpbih7XG4gICAgICBiZWZvcmVDcmVhdGUodGhpczogVmlld01vZGVsKTogdm9pZCB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgICBpZiAoZ2V0Q3VycmVudEh1YigpLmdldEludGVncmF0aW9uKFRSQUNJTkdfR0VUVEVSKSB8fCBnZXRDdXJyZW50SHViKCkuZ2V0SW50ZWdyYXRpb24oQlJPV1NFUl9UUkFDSU5HX0dFVFRFUikpIHtcbiAgICAgICAgICAvLyBgdGhpc2AgcG9pbnRzIHRvIGN1cnJlbnRseSByZW5kZXJlZCBjb21wb25lbnRcbiAgICAgICAgICBhcHBseVRyYWNpbmdIb29rcyh0aGlzLCBnZXRDdXJyZW50SHViKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1Z1ZSBpbnRlZ3JhdGlvbiBoYXMgdHJhY2luZyBlbmFibGVkLCBidXQgVHJhY2luZyBpbnRlZ3JhdGlvbiBpcyBub3QgY29uZmlndXJlZCcpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEluamVjdCBTZW50cnkncyBoYW5kbGVyIGludG8gb3ducyBWdWUncyBlcnJvciBoYW5kbGVyICAqL1xuICBwcml2YXRlIF9hdHRhY2hFcnJvckhhbmRsZXIoZ2V0Q3VycmVudEh1YjogKCkgPT4gSHViKTogdm9pZCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICAgIGNvbnN0IGN1cnJlbnRFcnJvckhhbmRsZXIgPSB0aGlzLl9vcHRpb25zLlZ1ZS5jb25maWcuZXJyb3JIYW5kbGVyO1xuXG4gICAgdGhpcy5fb3B0aW9ucy5WdWUuY29uZmlnLmVycm9ySGFuZGxlciA9IChlcnJvcjogRXJyb3IsIHZtPzogVmlld01vZGVsLCBpbmZvPzogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBtZXRhZGF0YTogTWV0YWRhdGEgPSB7fTtcblxuICAgICAgaWYgKHZtKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbWV0YWRhdGEuY29tcG9uZW50TmFtZSA9IHRoaXMuX2dldENvbXBvbmVudE5hbWUodm0pO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuYXR0YWNoUHJvcHMpIHtcbiAgICAgICAgICAgIG1ldGFkYXRhLnByb3BzRGF0YSA9IHZtLiRvcHRpb25zLnByb3BzRGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKF9vTykge1xuICAgICAgICAgIGxvZ2dlci53YXJuKCdVbmFibGUgdG8gZXh0cmFjdCBtZXRhZGF0YSBmcm9tIFZ1ZSBjb21wb25lbnQuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGluZm8pIHtcbiAgICAgICAgbWV0YWRhdGEubGlmZWN5Y2xlSG9vayA9IGluZm87XG4gICAgICB9XG5cbiAgICAgIGlmIChnZXRDdXJyZW50SHViKCkuZ2V0SW50ZWdyYXRpb24oVnVlKSkge1xuICAgICAgICAvLyBDYXB0dXJlIGV4Y2VwdGlvbiBpbiB0aGUgbmV4dCBldmVudCBsb29wLCB0byBtYWtlIHN1cmUgdGhhdCBhbGwgYnJlYWRjcnVtYnMgYXJlIHJlY29yZGVkIGluIHRpbWUuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGdldEN1cnJlbnRIdWIoKS53aXRoU2NvcGUoc2NvcGUgPT4ge1xuICAgICAgICAgICAgc2NvcGUuc2V0Q29udGV4dCgndnVlJywgbWV0YWRhdGEpO1xuICAgICAgICAgICAgZ2V0Q3VycmVudEh1YigpLmNhcHR1cmVFeGNlcHRpb24oZXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBjdXJyZW50RXJyb3JIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGN1cnJlbnRFcnJvckhhbmRsZXIuY2FsbCh0aGlzLl9vcHRpb25zLlZ1ZSwgZXJyb3IsIHZtLCBpbmZvKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX29wdGlvbnMubG9nRXJyb3JzKSB7XG4gICAgICAgIGlmICh0aGlzLl9vcHRpb25zLlZ1ZS51dGlsKSB7XG4gICAgICAgICAgdGhpcy5fb3B0aW9ucy5WdWUudXRpbC53YXJuKGBFcnJvciBpbiAke2luZm99OiBcIiR7ZXJyb3IgJiYgZXJyb3IudG9TdHJpbmcoKX1cImAsIHZtKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbmludGVyZmFjZSBIdWJUeXBlIGV4dGVuZHMgSHViIHtcbiAgZ2V0U2NvcGU/KCk6IFNjb3BlIHwgdW5kZWZpbmVkO1xufVxuXG4vKiogR3JhYnMgYWN0aXZlIHRyYW5zYWN0aW9uIG9mZiBzY29wZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFjdGl2ZVRyYW5zYWN0aW9uPFQgZXh0ZW5kcyBUcmFuc2FjdGlvbj4oaHViOiBIdWJUeXBlKTogVCB8IHVuZGVmaW5lZCB7XG4gIGlmIChodWIgJiYgaHViLmdldFNjb3BlKSB7XG4gICAgY29uc3Qgc2NvcGUgPSBodWIuZ2V0U2NvcGUoKSBhcyBTY29wZTtcbiAgICBpZiAoc2NvcGUpIHtcbiAgICAgIHJldHVybiBzY29wZS5nZXRUcmFuc2FjdGlvbigpIGFzIFQgfCB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiIsICJleHBvcnQgeyBBbmd1bGFyIH0gZnJvbSAnLi9hbmd1bGFyJztcbmV4cG9ydCB7IENhcHR1cmVDb25zb2xlIH0gZnJvbSAnLi9jYXB0dXJlY29uc29sZSc7XG5leHBvcnQgeyBEZWJ1ZyB9IGZyb20gJy4vZGVidWcnO1xuZXhwb3J0IHsgRGVkdXBlIH0gZnJvbSAnLi9kZWR1cGUnO1xuZXhwb3J0IHsgRW1iZXIgfSBmcm9tICcuL2VtYmVyJztcbmV4cG9ydCB7IEV4dHJhRXJyb3JEYXRhIH0gZnJvbSAnLi9leHRyYWVycm9yZGF0YSc7XG5leHBvcnQgeyBPZmZsaW5lIH0gZnJvbSAnLi9vZmZsaW5lJztcbmV4cG9ydCB7IFJlcG9ydGluZ09ic2VydmVyIH0gZnJvbSAnLi9yZXBvcnRpbmdvYnNlcnZlcic7XG5leHBvcnQgeyBSZXdyaXRlRnJhbWVzIH0gZnJvbSAnLi9yZXdyaXRlZnJhbWVzJztcbmV4cG9ydCB7IFNlc3Npb25UaW1pbmcgfSBmcm9tICcuL3Nlc3Npb250aW1pbmcnO1xuZXhwb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmV4cG9ydCB7IFZ1ZSB9IGZyb20gJy4vdnVlJztcbiIsICIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBpbnRUb0NoYXJNYXAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycuc3BsaXQoJycpO1xuXG4vKipcbiAqIEVuY29kZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBvZiAwIHRvIDYzIHRvIGEgc2luZ2xlIGJhc2UgNjQgZGlnaXQuXG4gKi9cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gKG51bWJlcikge1xuICBpZiAoMCA8PSBudW1iZXIgJiYgbnVtYmVyIDwgaW50VG9DaGFyTWFwLmxlbmd0aCkge1xuICAgIHJldHVybiBpbnRUb0NoYXJNYXBbbnVtYmVyXTtcbiAgfVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYzOiBcIiArIG51bWJlcik7XG59O1xuXG4vKipcbiAqIERlY29kZSBhIHNpbmdsZSBiYXNlIDY0IGNoYXJhY3RlciBjb2RlIGRpZ2l0IHRvIGFuIGludGVnZXIuIFJldHVybnMgLTEgb25cbiAqIGZhaWx1cmUuXG4gKi9cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gKGNoYXJDb2RlKSB7XG4gIHZhciBiaWdBID0gNjU7ICAgICAvLyAnQSdcbiAgdmFyIGJpZ1ogPSA5MDsgICAgIC8vICdaJ1xuXG4gIHZhciBsaXR0bGVBID0gOTc7ICAvLyAnYSdcbiAgdmFyIGxpdHRsZVogPSAxMjI7IC8vICd6J1xuXG4gIHZhciB6ZXJvID0gNDg7ICAgICAvLyAnMCdcbiAgdmFyIG5pbmUgPSA1NzsgICAgIC8vICc5J1xuXG4gIHZhciBwbHVzID0gNDM7ICAgICAvLyAnKydcbiAgdmFyIHNsYXNoID0gNDc7ICAgIC8vICcvJ1xuXG4gIHZhciBsaXR0bGVPZmZzZXQgPSAyNjtcbiAgdmFyIG51bWJlck9mZnNldCA9IDUyO1xuXG4gIC8vIDAgLSAyNTogQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcbiAgaWYgKGJpZ0EgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gYmlnWikge1xuICAgIHJldHVybiAoY2hhckNvZGUgLSBiaWdBKTtcbiAgfVxuXG4gIC8vIDI2IC0gNTE6IGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XG4gIGlmIChsaXR0bGVBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGxpdHRsZVopIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gbGl0dGxlQSArIGxpdHRsZU9mZnNldCk7XG4gIH1cblxuICAvLyA1MiAtIDYxOiAwMTIzNDU2Nzg5XG4gIGlmICh6ZXJvIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IG5pbmUpIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gemVybyArIG51bWJlck9mZnNldCk7XG4gIH1cblxuICAvLyA2MjogK1xuICBpZiAoY2hhckNvZGUgPT0gcGx1cykge1xuICAgIHJldHVybiA2MjtcbiAgfVxuXG4gIC8vIDYzOiAvXG4gIGlmIChjaGFyQ29kZSA9PSBzbGFzaCkge1xuICAgIHJldHVybiA2MztcbiAgfVxuXG4gIC8vIEludmFsaWQgYmFzZTY0IGRpZ2l0LlxuICByZXR1cm4gLTE7XG59O1xuIiwgIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKlxuICogQmFzZWQgb24gdGhlIEJhc2UgNjQgVkxRIGltcGxlbWVudGF0aW9uIGluIENsb3N1cmUgQ29tcGlsZXI6XG4gKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nsb3N1cmUtY29tcGlsZXIvc291cmNlL2Jyb3dzZS90cnVuay9zcmMvY29tL2dvb2dsZS9kZWJ1Z2dpbmcvc291cmNlbWFwL0Jhc2U2NFZMUS5qYXZhXG4gKlxuICogQ29weXJpZ2h0IDIwMTEgVGhlIENsb3N1cmUgQ29tcGlsZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuICogbWV0OlxuICpcbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZ1xuICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXG4gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWRcbiAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4gKiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXG4gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcbiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcbiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0Jyk7XG5cbi8vIEEgc2luZ2xlIGJhc2UgNjQgZGlnaXQgY2FuIGNvbnRhaW4gNiBiaXRzIG9mIGRhdGEuIEZvciB0aGUgYmFzZSA2NCB2YXJpYWJsZVxuLy8gbGVuZ3RoIHF1YW50aXRpZXMgd2UgdXNlIGluIHRoZSBzb3VyY2UgbWFwIHNwZWMsIHRoZSBmaXJzdCBiaXQgaXMgdGhlIHNpZ24sXG4vLyB0aGUgbmV4dCBmb3VyIGJpdHMgYXJlIHRoZSBhY3R1YWwgdmFsdWUsIGFuZCB0aGUgNnRoIGJpdCBpcyB0aGVcbi8vIGNvbnRpbnVhdGlvbiBiaXQuIFRoZSBjb250aW51YXRpb24gYml0IHRlbGxzIHVzIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmVcbi8vIGRpZ2l0cyBpbiB0aGlzIHZhbHVlIGZvbGxvd2luZyB0aGlzIGRpZ2l0LlxuLy9cbi8vICAgQ29udGludWF0aW9uXG4vLyAgIHwgICAgU2lnblxuLy8gICB8ICAgIHxcbi8vICAgViAgICBWXG4vLyAgIDEwMTAxMVxuXG52YXIgVkxRX0JBU0VfU0hJRlQgPSA1O1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9CQVNFID0gMSA8PCBWTFFfQkFTRV9TSElGVDtcblxuLy8gYmluYXJ5OiAwMTExMTFcbnZhciBWTFFfQkFTRV9NQVNLID0gVkxRX0JBU0UgLSAxO1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9DT05USU5VQVRJT05fQklUID0gVkxRX0JBU0U7XG5cbi8qKlxuICogQ29udmVydHMgZnJvbSBhIHR3by1jb21wbGVtZW50IHZhbHVlIHRvIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMSBiZWNvbWVzIDIgKDEwIGJpbmFyeSksIC0xIGJlY29tZXMgMyAoMTEgYmluYXJ5KVxuICogICAyIGJlY29tZXMgNCAoMTAwIGJpbmFyeSksIC0yIGJlY29tZXMgNSAoMTAxIGJpbmFyeSlcbiAqL1xuZnVuY3Rpb24gdG9WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHJldHVybiBhVmFsdWUgPCAwXG4gICAgPyAoKC1hVmFsdWUpIDw8IDEpICsgMVxuICAgIDogKGFWYWx1ZSA8PCAxKSArIDA7XG59XG5cbi8qKlxuICogQ29udmVydHMgdG8gYSB0d28tY29tcGxlbWVudCB2YWx1ZSBmcm9tIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMiAoMTAgYmluYXJ5KSBiZWNvbWVzIDEsIDMgKDExIGJpbmFyeSkgYmVjb21lcyAtMVxuICogICA0ICgxMDAgYmluYXJ5KSBiZWNvbWVzIDIsIDUgKDEwMSBiaW5hcnkpIGJlY29tZXMgLTJcbiAqL1xuZnVuY3Rpb24gZnJvbVZMUVNpZ25lZChhVmFsdWUpIHtcbiAgdmFyIGlzTmVnYXRpdmUgPSAoYVZhbHVlICYgMSkgPT09IDE7XG4gIHZhciBzaGlmdGVkID0gYVZhbHVlID4+IDE7XG4gIHJldHVybiBpc05lZ2F0aXZlXG4gICAgPyAtc2hpZnRlZFxuICAgIDogc2hpZnRlZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBiYXNlIDY0IFZMUSBlbmNvZGVkIHZhbHVlLlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9lbmNvZGUoYVZhbHVlKSB7XG4gIHZhciBlbmNvZGVkID0gXCJcIjtcbiAgdmFyIGRpZ2l0O1xuXG4gIHZhciB2bHEgPSB0b1ZMUVNpZ25lZChhVmFsdWUpO1xuXG4gIGRvIHtcbiAgICBkaWdpdCA9IHZscSAmIFZMUV9CQVNFX01BU0s7XG4gICAgdmxxID4+Pj0gVkxRX0JBU0VfU0hJRlQ7XG4gICAgaWYgKHZscSA+IDApIHtcbiAgICAgIC8vIFRoZXJlIGFyZSBzdGlsbCBtb3JlIGRpZ2l0cyBpbiB0aGlzIHZhbHVlLCBzbyB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGVcbiAgICAgIC8vIGNvbnRpbnVhdGlvbiBiaXQgaXMgbWFya2VkLlxuICAgICAgZGlnaXQgfD0gVkxRX0NPTlRJTlVBVElPTl9CSVQ7XG4gICAgfVxuICAgIGVuY29kZWQgKz0gYmFzZTY0LmVuY29kZShkaWdpdCk7XG4gIH0gd2hpbGUgKHZscSA+IDApO1xuXG4gIHJldHVybiBlbmNvZGVkO1xufTtcblxuLyoqXG4gKiBEZWNvZGVzIHRoZSBuZXh0IGJhc2UgNjQgVkxRIHZhbHVlIGZyb20gdGhlIGdpdmVuIHN0cmluZyBhbmQgcmV0dXJucyB0aGVcbiAqIHZhbHVlIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIHZpYSB0aGUgb3V0IHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZGVjb2RlKGFTdHIsIGFJbmRleCwgYU91dFBhcmFtKSB7XG4gIHZhciBzdHJMZW4gPSBhU3RyLmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IDA7XG4gIHZhciBzaGlmdCA9IDA7XG4gIHZhciBjb250aW51YXRpb24sIGRpZ2l0O1xuXG4gIGRvIHtcbiAgICBpZiAoYUluZGV4ID49IHN0ckxlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbW9yZSBkaWdpdHMgaW4gYmFzZSA2NCBWTFEgdmFsdWUuXCIpO1xuICAgIH1cblxuICAgIGRpZ2l0ID0gYmFzZTY0LmRlY29kZShhU3RyLmNoYXJDb2RlQXQoYUluZGV4KyspKTtcbiAgICBpZiAoZGlnaXQgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBkaWdpdDogXCIgKyBhU3RyLmNoYXJBdChhSW5kZXggLSAxKSk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uID0gISEoZGlnaXQgJiBWTFFfQ09OVElOVUFUSU9OX0JJVCk7XG4gICAgZGlnaXQgJj0gVkxRX0JBU0VfTUFTSztcbiAgICByZXN1bHQgPSByZXN1bHQgKyAoZGlnaXQgPDwgc2hpZnQpO1xuICAgIHNoaWZ0ICs9IFZMUV9CQVNFX1NISUZUO1xuICB9IHdoaWxlIChjb250aW51YXRpb24pO1xuXG4gIGFPdXRQYXJhbS52YWx1ZSA9IGZyb21WTFFTaWduZWQocmVzdWx0KTtcbiAgYU91dFBhcmFtLnJlc3QgPSBhSW5kZXg7XG59O1xuIiwgIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuLyoqXG4gKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBnZXR0aW5nIHZhbHVlcyBmcm9tIHBhcmFtZXRlci9vcHRpb25zXG4gKiBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBhcmdzIFRoZSBvYmplY3Qgd2UgYXJlIGV4dHJhY3RpbmcgdmFsdWVzIGZyb21cbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB3ZSBhcmUgZ2V0dGluZy5cbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgQW4gb3B0aW9uYWwgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nXG4gKiBmcm9tIHRoZSBvYmplY3QuIElmIHRoaXMgaXMgbm90IHNwZWNpZmllZCBhbmQgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmcsIGFuXG4gKiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAqL1xuZnVuY3Rpb24gZ2V0QXJnKGFBcmdzLCBhTmFtZSwgYURlZmF1bHRWYWx1ZSkge1xuICBpZiAoYU5hbWUgaW4gYUFyZ3MpIHtcbiAgICByZXR1cm4gYUFyZ3NbYU5hbWVdO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICByZXR1cm4gYURlZmF1bHRWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFOYW1lICsgJ1wiIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQuJyk7XG4gIH1cbn1cbmV4cG9ydHMuZ2V0QXJnID0gZ2V0QXJnO1xuXG52YXIgdXJsUmVnZXhwID0gL14oPzooW1xcdytcXC0uXSspOik/XFwvXFwvKD86KFxcdys6XFx3KylAKT8oW1xcdy4tXSopKD86OihcXGQrKSk/KC4qKSQvO1xudmFyIGRhdGFVcmxSZWdleHAgPSAvXmRhdGE6LitcXCwuKyQvO1xuXG5mdW5jdGlvbiB1cmxQYXJzZShhVXJsKSB7XG4gIHZhciBtYXRjaCA9IGFVcmwubWF0Y2godXJsUmVnZXhwKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiB7XG4gICAgc2NoZW1lOiBtYXRjaFsxXSxcbiAgICBhdXRoOiBtYXRjaFsyXSxcbiAgICBob3N0OiBtYXRjaFszXSxcbiAgICBwb3J0OiBtYXRjaFs0XSxcbiAgICBwYXRoOiBtYXRjaFs1XVxuICB9O1xufVxuZXhwb3J0cy51cmxQYXJzZSA9IHVybFBhcnNlO1xuXG5mdW5jdGlvbiB1cmxHZW5lcmF0ZShhUGFyc2VkVXJsKSB7XG4gIHZhciB1cmwgPSAnJztcbiAgaWYgKGFQYXJzZWRVcmwuc2NoZW1lKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuc2NoZW1lICsgJzonO1xuICB9XG4gIHVybCArPSAnLy8nO1xuICBpZiAoYVBhcnNlZFVybC5hdXRoKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuYXV0aCArICdAJztcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5ob3N0KSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuaG9zdDtcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5wb3J0KSB7XG4gICAgdXJsICs9IFwiOlwiICsgYVBhcnNlZFVybC5wb3J0XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucGF0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnBhdGg7XG4gIH1cbiAgcmV0dXJuIHVybDtcbn1cbmV4cG9ydHMudXJsR2VuZXJhdGUgPSB1cmxHZW5lcmF0ZTtcblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgcGF0aCwgb3IgdGhlIHBhdGggcG9ydGlvbiBvZiBhIFVSTDpcbiAqXG4gKiAtIFJlcGxhY2VzIGNvbnNlY3V0aXZlIHNsYXNoZXMgd2l0aCBvbmUgc2xhc2guXG4gKiAtIFJlbW92ZXMgdW5uZWNlc3NhcnkgJy4nIHBhcnRzLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICc8ZGlyPi8uLicgcGFydHMuXG4gKlxuICogQmFzZWQgb24gY29kZSBpbiB0aGUgTm9kZS5qcyAncGF0aCcgY29yZSBtb2R1bGUuXG4gKlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIHVybCB0byBub3JtYWxpemUuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZShhUGF0aCkge1xuICB2YXIgcGF0aCA9IGFQYXRoO1xuICB2YXIgdXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICBpZiAodXJsKSB7XG4gICAgaWYgKCF1cmwucGF0aCkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cbiAgICBwYXRoID0gdXJsLnBhdGg7XG4gIH1cbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCk7XG5cbiAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgvXFwvKy8pO1xuICBmb3IgKHZhciBwYXJ0LCB1cCA9IDAsIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHBhcnQgPSBwYXJ0c1tpXTtcbiAgICBpZiAocGFydCA9PT0gJy4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXAgPiAwKSB7XG4gICAgICBpZiAocGFydCA9PT0gJycpIHtcbiAgICAgICAgLy8gVGhlIGZpcnN0IHBhcnQgaXMgYmxhbmsgaWYgdGhlIHBhdGggaXMgYWJzb2x1dGUuIFRyeWluZyB0byBnb1xuICAgICAgICAvLyBhYm92ZSB0aGUgcm9vdCBpcyBhIG5vLW9wLiBUaGVyZWZvcmUgd2UgY2FuIHJlbW92ZSBhbGwgJy4uJyBwYXJ0c1xuICAgICAgICAvLyBkaXJlY3RseSBhZnRlciB0aGUgcm9vdC5cbiAgICAgICAgcGFydHMuc3BsaWNlKGkgKyAxLCB1cCk7XG4gICAgICAgIHVwID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzLnNwbGljZShpLCAyKTtcbiAgICAgICAgdXAtLTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcGF0aCA9IHBhcnRzLmpvaW4oJy8nKTtcblxuICBpZiAocGF0aCA9PT0gJycpIHtcbiAgICBwYXRoID0gaXNBYnNvbHV0ZSA/ICcvJyA6ICcuJztcbiAgfVxuXG4gIGlmICh1cmwpIHtcbiAgICB1cmwucGF0aCA9IHBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKHVybCk7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG5leHBvcnRzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcblxuLyoqXG4gKiBKb2lucyB0d28gcGF0aHMvVVJMcy5cbiAqXG4gKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIGpvaW5lZCB3aXRoIHRoZSByb290LlxuICpcbiAqIC0gSWYgYVBhdGggaXMgYSBVUkwgb3IgYSBkYXRhIFVSSSwgYVBhdGggaXMgcmV0dXJuZWQsIHVubGVzcyBhUGF0aCBpcyBhXG4gKiAgIHNjaGVtZS1yZWxhdGl2ZSBVUkw6IFRoZW4gdGhlIHNjaGVtZSBvZiBhUm9vdCwgaWYgYW55LCBpcyBwcmVwZW5kZWRcbiAqICAgZmlyc3QuXG4gKiAtIE90aGVyd2lzZSBhUGF0aCBpcyBhIHBhdGguIElmIGFSb290IGlzIGEgVVJMLCB0aGVuIGl0cyBwYXRoIHBvcnRpb25cbiAqICAgaXMgdXBkYXRlZCB3aXRoIHRoZSByZXN1bHQgYW5kIGFSb290IGlzIHJldHVybmVkLiBPdGhlcndpc2UgdGhlIHJlc3VsdFxuICogICBpcyByZXR1cm5lZC5cbiAqICAgLSBJZiBhUGF0aCBpcyBhYnNvbHV0ZSwgdGhlIHJlc3VsdCBpcyBhUGF0aC5cbiAqICAgLSBPdGhlcndpc2UgdGhlIHR3byBwYXRocyBhcmUgam9pbmVkIHdpdGggYSBzbGFzaC5cbiAqIC0gSm9pbmluZyBmb3IgZXhhbXBsZSAnaHR0cDovLycgYW5kICd3d3cuZXhhbXBsZS5jb20nIGlzIGFsc28gc3VwcG9ydGVkLlxuICovXG5mdW5jdGlvbiBqb2luKGFSb290LCBhUGF0aCkge1xuICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICBhUm9vdCA9IFwiLlwiO1xuICB9XG4gIGlmIChhUGF0aCA9PT0gXCJcIikge1xuICAgIGFQYXRoID0gXCIuXCI7XG4gIH1cbiAgdmFyIGFQYXRoVXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICB2YXIgYVJvb3RVcmwgPSB1cmxQYXJzZShhUm9vdCk7XG4gIGlmIChhUm9vdFVybCkge1xuICAgIGFSb290ID0gYVJvb3RVcmwucGF0aCB8fCAnLyc7XG4gIH1cblxuICAvLyBgam9pbihmb28sICcvL3d3dy5leGFtcGxlLm9yZycpYFxuICBpZiAoYVBhdGhVcmwgJiYgIWFQYXRoVXJsLnNjaGVtZSkge1xuICAgIGlmIChhUm9vdFVybCkge1xuICAgICAgYVBhdGhVcmwuc2NoZW1lID0gYVJvb3RVcmwuc2NoZW1lO1xuICAgIH1cbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVBhdGhVcmwpO1xuICB9XG5cbiAgaWYgKGFQYXRoVXJsIHx8IGFQYXRoLm1hdGNoKGRhdGFVcmxSZWdleHApKSB7XG4gICAgcmV0dXJuIGFQYXRoO1xuICB9XG5cbiAgLy8gYGpvaW4oJ2h0dHA6Ly8nLCAnd3d3LmV4YW1wbGUuY29tJylgXG4gIGlmIChhUm9vdFVybCAmJiAhYVJvb3RVcmwuaG9zdCAmJiAhYVJvb3RVcmwucGF0aCkge1xuICAgIGFSb290VXJsLmhvc3QgPSBhUGF0aDtcbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVJvb3RVcmwpO1xuICB9XG5cbiAgdmFyIGpvaW5lZCA9IGFQYXRoLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgPyBhUGF0aFxuICAgIDogbm9ybWFsaXplKGFSb290LnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgYVBhdGgpO1xuXG4gIGlmIChhUm9vdFVybCkge1xuICAgIGFSb290VXJsLnBhdGggPSBqb2luZWQ7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuICByZXR1cm4gam9pbmVkO1xufVxuZXhwb3J0cy5qb2luID0gam9pbjtcblxuZXhwb3J0cy5pc0Fic29sdXRlID0gZnVuY3Rpb24gKGFQYXRoKSB7XG4gIHJldHVybiBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJyB8fCB1cmxSZWdleHAudGVzdChhUGF0aCk7XG59O1xuXG4vKipcbiAqIE1ha2UgYSBwYXRoIHJlbGF0aXZlIHRvIGEgVVJMIG9yIGFub3RoZXIgcGF0aC5cbiAqXG4gKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIG1hZGUgcmVsYXRpdmUgdG8gYVJvb3QuXG4gKi9cbmZ1bmN0aW9uIHJlbGF0aXZlKGFSb290LCBhUGF0aCkge1xuICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICBhUm9vdCA9IFwiLlwiO1xuICB9XG5cbiAgYVJvb3QgPSBhUm9vdC5yZXBsYWNlKC9cXC8kLywgJycpO1xuXG4gIC8vIEl0IGlzIHBvc3NpYmxlIGZvciB0aGUgcGF0aCB0byBiZSBhYm92ZSB0aGUgcm9vdC4gSW4gdGhpcyBjYXNlLCBzaW1wbHlcbiAgLy8gY2hlY2tpbmcgd2hldGhlciB0aGUgcm9vdCBpcyBhIHByZWZpeCBvZiB0aGUgcGF0aCB3b24ndCB3b3JrLiBJbnN0ZWFkLCB3ZVxuICAvLyBuZWVkIHRvIHJlbW92ZSBjb21wb25lbnRzIGZyb20gdGhlIHJvb3Qgb25lIGJ5IG9uZSwgdW50aWwgZWl0aGVyIHdlIGZpbmRcbiAgLy8gYSBwcmVmaXggdGhhdCBmaXRzLCBvciB3ZSBydW4gb3V0IG9mIGNvbXBvbmVudHMgdG8gcmVtb3ZlLlxuICB2YXIgbGV2ZWwgPSAwO1xuICB3aGlsZSAoYVBhdGguaW5kZXhPZihhUm9vdCArICcvJykgIT09IDApIHtcbiAgICB2YXIgaW5kZXggPSBhUm9vdC5sYXN0SW5kZXhPZihcIi9cIik7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBvbmx5IHBhcnQgb2YgdGhlIHJvb3QgdGhhdCBpcyBsZWZ0IGlzIHRoZSBzY2hlbWUgKGkuZS4gaHR0cDovLyxcbiAgICAvLyBmaWxlOi8vLywgZXRjLiksIG9uZSBvciBtb3JlIHNsYXNoZXMgKC8pLCBvciBzaW1wbHkgbm90aGluZyBhdCBhbGwsIHdlXG4gICAgLy8gaGF2ZSBleGhhdXN0ZWQgYWxsIGNvbXBvbmVudHMsIHNvIHRoZSBwYXRoIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcm9vdC5cbiAgICBhUm9vdCA9IGFSb290LnNsaWNlKDAsIGluZGV4KTtcbiAgICBpZiAoYVJvb3QubWF0Y2goL14oW15cXC9dKzpcXC8pP1xcLyokLykpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICArK2xldmVsO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHdlIGFkZCBhIFwiLi4vXCIgZm9yIGVhY2ggY29tcG9uZW50IHdlIHJlbW92ZWQgZnJvbSB0aGUgcm9vdC5cbiAgcmV0dXJuIEFycmF5KGxldmVsICsgMSkuam9pbihcIi4uL1wiKSArIGFQYXRoLnN1YnN0cihhUm9vdC5sZW5ndGggKyAxKTtcbn1cbmV4cG9ydHMucmVsYXRpdmUgPSByZWxhdGl2ZTtcblxudmFyIHN1cHBvcnRzTnVsbFByb3RvID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiAhKCdfX3Byb3RvX18nIGluIG9iaik7XG59KCkpO1xuXG5mdW5jdGlvbiBpZGVudGl0eSAocykge1xuICByZXR1cm4gcztcbn1cblxuLyoqXG4gKiBCZWNhdXNlIGJlaGF2aW9yIGdvZXMgd2Fja3kgd2hlbiB5b3Ugc2V0IGBfX3Byb3RvX19gIG9uIG9iamVjdHMsIHdlXG4gKiBoYXZlIHRvIHByZWZpeCBhbGwgdGhlIHN0cmluZ3MgaW4gb3VyIHNldCB3aXRoIGFuIGFyYml0cmFyeSBjaGFyYWN0ZXIuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvcHVsbC8zMSBhbmRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvaXNzdWVzLzMwXG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbmZ1bmN0aW9uIHRvU2V0U3RyaW5nKGFTdHIpIHtcbiAgaWYgKGlzUHJvdG9TdHJpbmcoYVN0cikpIHtcbiAgICByZXR1cm4gJyQnICsgYVN0cjtcbiAgfVxuXG4gIHJldHVybiBhU3RyO1xufVxuZXhwb3J0cy50b1NldFN0cmluZyA9IHN1cHBvcnRzTnVsbFByb3RvID8gaWRlbnRpdHkgOiB0b1NldFN0cmluZztcblxuZnVuY3Rpb24gZnJvbVNldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuIGFTdHIuc2xpY2UoMSk7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMuZnJvbVNldFN0cmluZyA9IHN1cHBvcnRzTnVsbFByb3RvID8gaWRlbnRpdHkgOiBmcm9tU2V0U3RyaW5nO1xuXG5mdW5jdGlvbiBpc1Byb3RvU3RyaW5nKHMpIHtcbiAgaWYgKCFzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGxlbmd0aCA9IHMubGVuZ3RoO1xuXG4gIGlmIChsZW5ndGggPCA5IC8qIFwiX19wcm90b19fXCIubGVuZ3RoICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHMuY2hhckNvZGVBdChsZW5ndGggLSAxKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDIpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMykgIT09IDExMSAvKiAnbycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA0KSAhPT0gMTE2IC8qICd0JyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDUpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNikgIT09IDExNCAvKiAncicgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA3KSAhPT0gMTEyIC8qICdwJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDgpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gOSkgIT09IDk1ICAvKiAnXycgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKHZhciBpID0gbGVuZ3RoIC0gMTA7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKHMuY2hhckNvZGVBdChpKSAhPT0gMzYgLyogJyQnICovKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aGVyZSB0aGUgb3JpZ2luYWwgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqXG4gKiBPcHRpb25hbGx5IHBhc3MgaW4gYHRydWVgIGFzIGBvbmx5Q29tcGFyZUdlbmVyYXRlZGAgdG8gY29uc2lkZXIgdHdvXG4gKiBtYXBwaW5ncyB3aXRoIHRoZSBzYW1lIG9yaWdpbmFsIHNvdXJjZS9saW5lL2NvbHVtbiwgYnV0IGRpZmZlcmVudCBnZW5lcmF0ZWRcbiAqIGxpbmUgYW5kIGNvbHVtbiB0aGUgc2FtZS4gVXNlZnVsIHdoZW4gc2VhcmNoaW5nIGZvciBhIG1hcHBpbmcgd2l0aCBhXG4gKiBzdHViYmVkIG91dCBtYXBwaW5nLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyhtYXBwaW5nQSwgbWFwcGluZ0IsIG9ubHlDb21wYXJlT3JpZ2luYWwpIHtcbiAgdmFyIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDAgfHwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMgPSBjb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucztcblxuLyoqXG4gKiBDb21wYXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdzIHdpdGggZGVmbGF0ZWQgc291cmNlIGFuZCBuYW1lIGluZGljZXMgd2hlcmVcbiAqIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqXG4gKiBPcHRpb25hbGx5IHBhc3MgaW4gYHRydWVgIGFzIGBvbmx5Q29tcGFyZUdlbmVyYXRlZGAgdG8gY29uc2lkZXIgdHdvXG4gKiBtYXBwaW5ncyB3aXRoIHRoZSBzYW1lIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4sIGJ1dCBkaWZmZXJlbnRcbiAqIHNvdXJjZS9uYW1lL29yaWdpbmFsIGxpbmUgYW5kIGNvbHVtbiB0aGUgc2FtZS4gVXNlZnVsIHdoZW4gc2VhcmNoaW5nIGZvciBhXG4gKiBtYXBwaW5nIHdpdGggYSBzdHViYmVkIG91dCBtYXBwaW5nLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZChtYXBwaW5nQSwgbWFwcGluZ0IsIG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDAgfHwgb25seUNvbXBhcmVHZW5lcmF0ZWQpIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gc3RyY21wKG1hcHBpbmdBLnNvdXJjZSwgbWFwcGluZ0Iuc291cmNlKTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gc3RyY21wKG1hcHBpbmdBLm5hbWUsIG1hcHBpbmdCLm5hbWUpO1xufVxuZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCA9IGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkO1xuXG5mdW5jdGlvbiBzdHJjbXAoYVN0cjEsIGFTdHIyKSB7XG4gIGlmIChhU3RyMSA9PT0gYVN0cjIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmIChhU3RyMSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAxOyAvLyBhU3RyMiAhPT0gbnVsbFxuICB9XG5cbiAgaWYgKGFTdHIyID09PSBudWxsKSB7XG4gICAgcmV0dXJuIC0xOyAvLyBhU3RyMSAhPT0gbnVsbFxuICB9XG5cbiAgaWYgKGFTdHIxID4gYVN0cjIpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuLyoqXG4gKiBDb21wYXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdzIHdpdGggaW5mbGF0ZWQgc291cmNlIGFuZCBuYW1lIHN0cmluZ3Mgd2hlcmVcbiAqIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gc3RyY21wKG1hcHBpbmdBLnNvdXJjZSwgbWFwcGluZ0Iuc291cmNlKTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gc3RyY21wKG1hcHBpbmdBLm5hbWUsIG1hcHBpbmdCLm5hbWUpO1xufVxuZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCA9IGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkO1xuXG4vKipcbiAqIFN0cmlwIGFueSBKU09OIFhTU0kgYXZvaWRhbmNlIHByZWZpeCBmcm9tIHRoZSBzdHJpbmcgKGFzIGRvY3VtZW50ZWRcbiAqIGluIHRoZSBzb3VyY2UgbWFwcyBzcGVjaWZpY2F0aW9uKSwgYW5kIHRoZW4gcGFyc2UgdGhlIHN0cmluZyBhc1xuICogSlNPTi5cbiAqL1xuZnVuY3Rpb24gcGFyc2VTb3VyY2VNYXBJbnB1dChzdHIpIHtcbiAgcmV0dXJuIEpTT04ucGFyc2Uoc3RyLnJlcGxhY2UoL15cXCldfSdbXlxcbl0qXFxuLywgJycpKTtcbn1cbmV4cG9ydHMucGFyc2VTb3VyY2VNYXBJbnB1dCA9IHBhcnNlU291cmNlTWFwSW5wdXQ7XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgVVJMIG9mIGEgc291cmNlIGdpdmVuIHRoZSB0aGUgc291cmNlIHJvb3QsIHRoZSBzb3VyY2Unc1xuICogVVJMLCBhbmQgdGhlIHNvdXJjZSBtYXAncyBVUkwuXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVTb3VyY2VVUkwoc291cmNlUm9vdCwgc291cmNlVVJMLCBzb3VyY2VNYXBVUkwpIHtcbiAgc291cmNlVVJMID0gc291cmNlVVJMIHx8ICcnO1xuXG4gIGlmIChzb3VyY2VSb290KSB7XG4gICAgLy8gVGhpcyBmb2xsb3dzIHdoYXQgQ2hyb21lIGRvZXMuXG4gICAgaWYgKHNvdXJjZVJvb3Rbc291cmNlUm9vdC5sZW5ndGggLSAxXSAhPT0gJy8nICYmIHNvdXJjZVVSTFswXSAhPT0gJy8nKSB7XG4gICAgICBzb3VyY2VSb290ICs9ICcvJztcbiAgICB9XG4gICAgLy8gVGhlIHNwZWMgc2F5czpcbiAgICAvLyAgIExpbmUgNDogQW4gb3B0aW9uYWwgc291cmNlIHJvb3QsIHVzZWZ1bCBmb3IgcmVsb2NhdGluZyBzb3VyY2VcbiAgICAvLyAgIGZpbGVzIG9uIGEgc2VydmVyIG9yIHJlbW92aW5nIHJlcGVhdGVkIHZhbHVlcyBpbiB0aGVcbiAgICAvLyAgIFx1MjAxQ3NvdXJjZXNcdTIwMUQgZW50cnkuICBUaGlzIHZhbHVlIGlzIHByZXBlbmRlZCB0byB0aGUgaW5kaXZpZHVhbFxuICAgIC8vICAgZW50cmllcyBpbiB0aGUgXHUyMDFDc291cmNlXHUyMDFEIGZpZWxkLlxuICAgIHNvdXJjZVVSTCA9IHNvdXJjZVJvb3QgKyBzb3VyY2VVUkw7XG4gIH1cblxuICAvLyBIaXN0b3JpY2FsbHksIFNvdXJjZU1hcENvbnN1bWVyIGRpZCBub3QgdGFrZSB0aGUgc291cmNlTWFwVVJMIGFzXG4gIC8vIGEgcGFyYW1ldGVyLiAgVGhpcyBtb2RlIGlzIHN0aWxsIHNvbWV3aGF0IHN1cHBvcnRlZCwgd2hpY2ggaXMgd2h5XG4gIC8vIHRoaXMgY29kZSBibG9jayBpcyBjb25kaXRpb25hbC4gIEhvd2V2ZXIsIGl0J3MgcHJlZmVyYWJsZSB0byBwYXNzXG4gIC8vIHRoZSBzb3VyY2UgbWFwIFVSTCB0byBTb3VyY2VNYXBDb25zdW1lciwgc28gdGhhdCB0aGlzIGZ1bmN0aW9uXG4gIC8vIGNhbiBpbXBsZW1lbnQgdGhlIHNvdXJjZSBVUkwgcmVzb2x1dGlvbiBhbGdvcml0aG0gYXMgb3V0bGluZWQgaW5cbiAgLy8gdGhlIHNwZWMuICBUaGlzIGJsb2NrIGlzIGJhc2ljYWxseSB0aGUgZXF1aXZhbGVudCBvZjpcbiAgLy8gICAgbmV3IFVSTChzb3VyY2VVUkwsIHNvdXJjZU1hcFVSTCkudG9TdHJpbmcoKVxuICAvLyAuLi4gZXhjZXB0IGl0IGF2b2lkcyB1c2luZyBVUkwsIHdoaWNoIHdhc24ndCBhdmFpbGFibGUgaW4gdGhlXG4gIC8vIG9sZGVyIHJlbGVhc2VzIG9mIG5vZGUgc3RpbGwgc3VwcG9ydGVkIGJ5IHRoaXMgbGlicmFyeS5cbiAgLy9cbiAgLy8gVGhlIHNwZWMgc2F5czpcbiAgLy8gICBJZiB0aGUgc291cmNlcyBhcmUgbm90IGFic29sdXRlIFVSTHMgYWZ0ZXIgcHJlcGVuZGluZyBvZiB0aGVcbiAgLy8gICBcdTIwMUNzb3VyY2VSb290XHUyMDFELCB0aGUgc291cmNlcyBhcmUgcmVzb2x2ZWQgcmVsYXRpdmUgdG8gdGhlXG4gIC8vICAgU291cmNlTWFwIChsaWtlIHJlc29sdmluZyBzY3JpcHQgc3JjIGluIGEgaHRtbCBkb2N1bWVudCkuXG4gIGlmIChzb3VyY2VNYXBVUkwpIHtcbiAgICB2YXIgcGFyc2VkID0gdXJsUGFyc2Uoc291cmNlTWFwVVJMKTtcbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwic291cmNlTWFwVVJMIGNvdWxkIG5vdCBiZSBwYXJzZWRcIik7XG4gICAgfVxuICAgIGlmIChwYXJzZWQucGF0aCkge1xuICAgICAgLy8gU3RyaXAgdGhlIGxhc3QgcGF0aCBjb21wb25lbnQsIGJ1dCBrZWVwIHRoZSBcIi9cIi5cbiAgICAgIHZhciBpbmRleCA9IHBhcnNlZC5wYXRoLmxhc3RJbmRleE9mKCcvJyk7XG4gICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICBwYXJzZWQucGF0aCA9IHBhcnNlZC5wYXRoLnN1YnN0cmluZygwLCBpbmRleCArIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VVUkwgPSBqb2luKHVybEdlbmVyYXRlKHBhcnNlZCksIHNvdXJjZVVSTCk7XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplKHNvdXJjZVVSTCk7XG59XG5leHBvcnRzLmNvbXB1dGVTb3VyY2VVUkwgPSBjb21wdXRlU291cmNlVVJMO1xuIiwgIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIGhhc05hdGl2ZU1hcCA9IHR5cGVvZiBNYXAgIT09IFwidW5kZWZpbmVkXCI7XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB3aGljaCBpcyBhIGNvbWJpbmF0aW9uIG9mIGFuIGFycmF5IGFuZCBhIHNldC4gQWRkaW5nIGEgbmV3XG4gKiBtZW1iZXIgaXMgTygxKSwgdGVzdGluZyBmb3IgbWVtYmVyc2hpcCBpcyBPKDEpLCBhbmQgZmluZGluZyB0aGUgaW5kZXggb2YgYW5cbiAqIGVsZW1lbnQgaXMgTygxKS4gUmVtb3ZpbmcgZWxlbWVudHMgZnJvbSB0aGUgc2V0IGlzIG5vdCBzdXBwb3J0ZWQuIE9ubHlcbiAqIHN0cmluZ3MgYXJlIHN1cHBvcnRlZCBmb3IgbWVtYmVyc2hpcC5cbiAqL1xuZnVuY3Rpb24gQXJyYXlTZXQoKSB7XG4gIHRoaXMuX2FycmF5ID0gW107XG4gIHRoaXMuX3NldCA9IGhhc05hdGl2ZU1hcCA/IG5ldyBNYXAoKSA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG59XG5cbi8qKlxuICogU3RhdGljIG1ldGhvZCBmb3IgY3JlYXRpbmcgQXJyYXlTZXQgaW5zdGFuY2VzIGZyb20gYW4gZXhpc3RpbmcgYXJyYXkuXG4gKi9cbkFycmF5U2V0LmZyb21BcnJheSA9IGZ1bmN0aW9uIEFycmF5U2V0X2Zyb21BcnJheShhQXJyYXksIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgdmFyIHNldCA9IG5ldyBBcnJheVNldCgpO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYUFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgc2V0LmFkZChhQXJyYXlbaV0sIGFBbGxvd0R1cGxpY2F0ZXMpO1xuICB9XG4gIHJldHVybiBzZXQ7XG59O1xuXG4vKipcbiAqIFJldHVybiBob3cgbWFueSB1bmlxdWUgaXRlbXMgYXJlIGluIHRoaXMgQXJyYXlTZXQuIElmIGR1cGxpY2F0ZXMgaGF2ZSBiZWVuXG4gKiBhZGRlZCwgdGhhbiB0aG9zZSBkbyBub3QgY291bnQgdG93YXJkcyB0aGUgc2l6ZS5cbiAqXG4gKiBAcmV0dXJucyBOdW1iZXJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiBBcnJheVNldF9zaXplKCkge1xuICByZXR1cm4gaGFzTmF0aXZlTWFwID8gdGhpcy5fc2V0LnNpemUgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLl9zZXQpLmxlbmd0aDtcbn07XG5cbi8qKlxuICogQWRkIHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhpcyBzZXQuXG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBBcnJheVNldF9hZGQoYVN0ciwgYUFsbG93RHVwbGljYXRlcykge1xuICB2YXIgc1N0ciA9IGhhc05hdGl2ZU1hcCA/IGFTdHIgOiB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICB2YXIgaXNEdXBsaWNhdGUgPSBoYXNOYXRpdmVNYXAgPyB0aGlzLmhhcyhhU3RyKSA6IGhhcy5jYWxsKHRoaXMuX3NldCwgc1N0cik7XG4gIHZhciBpZHggPSB0aGlzLl9hcnJheS5sZW5ndGg7XG4gIGlmICghaXNEdXBsaWNhdGUgfHwgYUFsbG93RHVwbGljYXRlcykge1xuICAgIHRoaXMuX2FycmF5LnB1c2goYVN0cik7XG4gIH1cbiAgaWYgKCFpc0R1cGxpY2F0ZSkge1xuICAgIGlmIChoYXNOYXRpdmVNYXApIHtcbiAgICAgIHRoaXMuX3NldC5zZXQoYVN0ciwgaWR4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2V0W3NTdHJdID0gaWR4O1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBJcyB0aGUgZ2l2ZW4gc3RyaW5nIGEgbWVtYmVyIG9mIHRoaXMgc2V0P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gQXJyYXlTZXRfaGFzKGFTdHIpIHtcbiAgaWYgKGhhc05hdGl2ZU1hcCkge1xuICAgIHJldHVybiB0aGlzLl9zZXQuaGFzKGFTdHIpO1xuICB9IGVsc2Uge1xuICAgIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgICByZXR1cm4gaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKTtcbiAgfVxufTtcblxuLyoqXG4gKiBXaGF0IGlzIHRoZSBpbmRleCBvZiB0aGUgZ2l2ZW4gc3RyaW5nIGluIHRoZSBhcnJheT9cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBBcnJheVNldF9pbmRleE9mKGFTdHIpIHtcbiAgaWYgKGhhc05hdGl2ZU1hcCkge1xuICAgIHZhciBpZHggPSB0aGlzLl9zZXQuZ2V0KGFTdHIpO1xuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICByZXR1cm4gaWR4O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gICAgaWYgKGhhcy5jYWxsKHRoaXMuX3NldCwgc1N0cikpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZXRbc1N0cl07XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU3RyICsgJ1wiIGlzIG5vdCBpbiB0aGUgc2V0LicpO1xufTtcblxuLyoqXG4gKiBXaGF0IGlzIHRoZSBlbGVtZW50IGF0IHRoZSBnaXZlbiBpbmRleD9cbiAqXG4gKiBAcGFyYW0gTnVtYmVyIGFJZHhcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmF0ID0gZnVuY3Rpb24gQXJyYXlTZXRfYXQoYUlkeCkge1xuICBpZiAoYUlkeCA+PSAwICYmIGFJZHggPCB0aGlzLl9hcnJheS5sZW5ndGgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJyYXlbYUlkeF07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdObyBlbGVtZW50IGluZGV4ZWQgYnkgJyArIGFJZHgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhcnJheSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNldCAod2hpY2ggaGFzIHRoZSBwcm9wZXIgaW5kaWNlc1xuICogaW5kaWNhdGVkIGJ5IGluZGV4T2YpLiBOb3RlIHRoYXQgdGhpcyBpcyBhIGNvcHkgb2YgdGhlIGludGVybmFsIGFycmF5IHVzZWRcbiAqIGZvciBzdG9yaW5nIHRoZSBtZW1iZXJzIHNvIHRoYXQgbm8gb25lIGNhbiBtZXNzIHdpdGggaW50ZXJuYWwgc3RhdGUuXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfdG9BcnJheSgpIHtcbiAgcmV0dXJuIHRoaXMuX2FycmF5LnNsaWNlKCk7XG59O1xuXG5leHBvcnRzLkFycmF5U2V0ID0gQXJyYXlTZXQ7XG4iLCAiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDE0IE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG4vKipcbiAqIERldGVybWluZSB3aGV0aGVyIG1hcHBpbmdCIGlzIGFmdGVyIG1hcHBpbmdBIHdpdGggcmVzcGVjdCB0byBnZW5lcmF0ZWRcbiAqIHBvc2l0aW9uLlxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZWRQb3NpdGlvbkFmdGVyKG1hcHBpbmdBLCBtYXBwaW5nQikge1xuICAvLyBPcHRpbWl6ZWQgZm9yIG1vc3QgY29tbW9uIGNhc2VcbiAgdmFyIGxpbmVBID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZTtcbiAgdmFyIGxpbmVCID0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgdmFyIGNvbHVtbkEgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW47XG4gIHZhciBjb2x1bW5CID0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICByZXR1cm4gbGluZUIgPiBsaW5lQSB8fCBsaW5lQiA9PSBsaW5lQSAmJiBjb2x1bW5CID49IGNvbHVtbkEgfHxcbiAgICAgICAgIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCKSA8PSAwO1xufVxuXG4vKipcbiAqIEEgZGF0YSBzdHJ1Y3R1cmUgdG8gcHJvdmlkZSBhIHNvcnRlZCB2aWV3IG9mIGFjY3VtdWxhdGVkIG1hcHBpbmdzIGluIGFcbiAqIHBlcmZvcm1hbmNlIGNvbnNjaW91cyBtYW5uZXIuIEl0IHRyYWRlcyBhIG5lZ2xpYmFibGUgb3ZlcmhlYWQgaW4gZ2VuZXJhbFxuICogY2FzZSBmb3IgYSBsYXJnZSBzcGVlZHVwIGluIGNhc2Ugb2YgbWFwcGluZ3MgYmVpbmcgYWRkZWQgaW4gb3JkZXIuXG4gKi9cbmZ1bmN0aW9uIE1hcHBpbmdMaXN0KCkge1xuICB0aGlzLl9hcnJheSA9IFtdO1xuICB0aGlzLl9zb3J0ZWQgPSB0cnVlO1xuICAvLyBTZXJ2ZXMgYXMgaW5maW11bVxuICB0aGlzLl9sYXN0ID0ge2dlbmVyYXRlZExpbmU6IC0xLCBnZW5lcmF0ZWRDb2x1bW46IDB9O1xufVxuXG4vKipcbiAqIEl0ZXJhdGUgdGhyb3VnaCBpbnRlcm5hbCBpdGVtcy4gVGhpcyBtZXRob2QgdGFrZXMgdGhlIHNhbWUgYXJndW1lbnRzIHRoYXRcbiAqIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgdGFrZXMuXG4gKlxuICogTk9URTogVGhlIG9yZGVyIG9mIHRoZSBtYXBwaW5ncyBpcyBOT1QgZ3VhcmFudGVlZC5cbiAqL1xuTWFwcGluZ0xpc3QucHJvdG90eXBlLnVuc29ydGVkRm9yRWFjaCA9XG4gIGZ1bmN0aW9uIE1hcHBpbmdMaXN0X2ZvckVhY2goYUNhbGxiYWNrLCBhVGhpc0FyZykge1xuICAgIHRoaXMuX2FycmF5LmZvckVhY2goYUNhbGxiYWNrLCBhVGhpc0FyZyk7XG4gIH07XG5cbi8qKlxuICogQWRkIHRoZSBnaXZlbiBzb3VyY2UgbWFwcGluZy5cbiAqXG4gKiBAcGFyYW0gT2JqZWN0IGFNYXBwaW5nXG4gKi9cbk1hcHBpbmdMaXN0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBNYXBwaW5nTGlzdF9hZGQoYU1hcHBpbmcpIHtcbiAgaWYgKGdlbmVyYXRlZFBvc2l0aW9uQWZ0ZXIodGhpcy5fbGFzdCwgYU1hcHBpbmcpKSB7XG4gICAgdGhpcy5fbGFzdCA9IGFNYXBwaW5nO1xuICAgIHRoaXMuX2FycmF5LnB1c2goYU1hcHBpbmcpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX3NvcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2FycmF5LnB1c2goYU1hcHBpbmcpO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGZsYXQsIHNvcnRlZCBhcnJheSBvZiBtYXBwaW5ncy4gVGhlIG1hcHBpbmdzIGFyZSBzb3J0ZWQgYnlcbiAqIGdlbmVyYXRlZCBwb3NpdGlvbi5cbiAqXG4gKiBXQVJOSU5HOiBUaGlzIG1ldGhvZCByZXR1cm5zIGludGVybmFsIGRhdGEgd2l0aG91dCBjb3B5aW5nLCBmb3JcbiAqIHBlcmZvcm1hbmNlLiBUaGUgcmV0dXJuIHZhbHVlIG11c3QgTk9UIGJlIG11dGF0ZWQsIGFuZCBzaG91bGQgYmUgdHJlYXRlZCBhc1xuICogYW4gaW1tdXRhYmxlIGJvcnJvdy4gSWYgeW91IHdhbnQgdG8gdGFrZSBvd25lcnNoaXAsIHlvdSBtdXN0IG1ha2UgeW91ciBvd25cbiAqIGNvcHkuXG4gKi9cbk1hcHBpbmdMaXN0LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gTWFwcGluZ0xpc3RfdG9BcnJheSgpIHtcbiAgaWYgKCF0aGlzLl9zb3J0ZWQpIHtcbiAgICB0aGlzLl9hcnJheS5zb3J0KHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQpO1xuICAgIHRoaXMuX3NvcnRlZCA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIHRoaXMuX2FycmF5O1xufTtcblxuZXhwb3J0cy5NYXBwaW5nTGlzdCA9IE1hcHBpbmdMaXN0O1xuIiwgIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxudmFyIGJhc2U2NFZMUSA9IHJlcXVpcmUoJy4vYmFzZTY0LXZscScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcbnZhciBBcnJheVNldCA9IHJlcXVpcmUoJy4vYXJyYXktc2V0JykuQXJyYXlTZXQ7XG52YXIgTWFwcGluZ0xpc3QgPSByZXF1aXJlKCcuL21hcHBpbmctbGlzdCcpLk1hcHBpbmdMaXN0O1xuXG4vKipcbiAqIEFuIGluc3RhbmNlIG9mIHRoZSBTb3VyY2VNYXBHZW5lcmF0b3IgcmVwcmVzZW50cyBhIHNvdXJjZSBtYXAgd2hpY2ggaXNcbiAqIGJlaW5nIGJ1aWx0IGluY3JlbWVudGFsbHkuIFlvdSBtYXkgcGFzcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nXG4gKiBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBmaWxlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gc291cmNlUm9vdDogQSByb290IGZvciBhbGwgcmVsYXRpdmUgVVJMcyBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKi9cbmZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcihhQXJncykge1xuICBpZiAoIWFBcmdzKSB7XG4gICAgYUFyZ3MgPSB7fTtcbiAgfVxuICB0aGlzLl9maWxlID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdmaWxlJywgbnVsbCk7XG4gIHRoaXMuX3NvdXJjZVJvb3QgPSB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZVJvb3QnLCBudWxsKTtcbiAgdGhpcy5fc2tpcFZhbGlkYXRpb24gPSB1dGlsLmdldEFyZyhhQXJncywgJ3NraXBWYWxpZGF0aW9uJywgZmFsc2UpO1xuICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX21hcHBpbmdzID0gbmV3IE1hcHBpbmdMaXN0KCk7XG4gIHRoaXMuX3NvdXJjZXNDb250ZW50cyA9IG51bGw7XG59XG5cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgU291cmNlTWFwR2VuZXJhdG9yIGJhc2VkIG9uIGEgU291cmNlTWFwQ29uc3VtZXJcbiAqXG4gKiBAcGFyYW0gYVNvdXJjZU1hcENvbnN1bWVyIFRoZSBTb3VyY2VNYXAuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5mcm9tU291cmNlTWFwID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX2Zyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcENvbnN1bWVyKSB7XG4gICAgdmFyIHNvdXJjZVJvb3QgPSBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlUm9vdDtcbiAgICB2YXIgZ2VuZXJhdG9yID0gbmV3IFNvdXJjZU1hcEdlbmVyYXRvcih7XG4gICAgICBmaWxlOiBhU291cmNlTWFwQ29uc3VtZXIuZmlsZSxcbiAgICAgIHNvdXJjZVJvb3Q6IHNvdXJjZVJvb3RcbiAgICB9KTtcbiAgICBhU291cmNlTWFwQ29uc3VtZXIuZWFjaE1hcHBpbmcoZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICAgIHZhciBuZXdNYXBwaW5nID0ge1xuICAgICAgICBnZW5lcmF0ZWQ6IHtcbiAgICAgICAgICBsaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgICAgY29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtblxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICBuZXdNYXBwaW5nLnNvdXJjZSA9IG1hcHBpbmcuc291cmNlO1xuICAgICAgICBpZiAoc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgbmV3TWFwcGluZy5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIG5ld01hcHBpbmcuc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5ld01hcHBpbmcub3JpZ2luYWwgPSB7XG4gICAgICAgICAgbGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgY29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG1hcHBpbmcubmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgbmV3TWFwcGluZy5uYW1lID0gbWFwcGluZy5uYW1lO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGdlbmVyYXRvci5hZGRNYXBwaW5nKG5ld01hcHBpbmcpO1xuICAgIH0pO1xuICAgIGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZUZpbGUpIHtcbiAgICAgIHZhciBzb3VyY2VSZWxhdGl2ZSA9IHNvdXJjZUZpbGU7XG4gICAgICBpZiAoc291cmNlUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICBzb3VyY2VSZWxhdGl2ZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlRmlsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghZ2VuZXJhdG9yLl9zb3VyY2VzLmhhcyhzb3VyY2VSZWxhdGl2ZSkpIHtcbiAgICAgICAgZ2VuZXJhdG9yLl9zb3VyY2VzLmFkZChzb3VyY2VSZWxhdGl2ZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZW50ID0gYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3Ioc291cmNlRmlsZSk7XG4gICAgICBpZiAoY29udGVudCAhPSBudWxsKSB7XG4gICAgICAgIGdlbmVyYXRvci5zZXRTb3VyY2VDb250ZW50KHNvdXJjZUZpbGUsIGNvbnRlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH07XG5cbi8qKlxuICogQWRkIGEgc2luZ2xlIG1hcHBpbmcgZnJvbSBvcmlnaW5hbCBzb3VyY2UgbGluZSBhbmQgY29sdW1uIHRvIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBmb3IgdGhpcyBzb3VyY2UgbWFwIGJlaW5nIGNyZWF0ZWQuIFRoZSBtYXBwaW5nXG4gKiBvYmplY3Qgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBnZW5lcmF0ZWQ6IEFuIG9iamVjdCB3aXRoIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucy5cbiAqICAgLSBvcmlnaW5hbDogQW4gb2JqZWN0IHdpdGggdGhlIG9yaWdpbmFsIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMuXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUgKHJlbGF0aXZlIHRvIHRoZSBzb3VyY2VSb290KS5cbiAqICAgLSBuYW1lOiBBbiBvcHRpb25hbCBvcmlnaW5hbCB0b2tlbiBuYW1lIGZvciB0aGlzIG1hcHBpbmcuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuYWRkTWFwcGluZyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9hZGRNYXBwaW5nKGFBcmdzKSB7XG4gICAgdmFyIGdlbmVyYXRlZCA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnZ2VuZXJhdGVkJyk7XG4gICAgdmFyIG9yaWdpbmFsID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdvcmlnaW5hbCcsIG51bGwpO1xuICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScsIG51bGwpO1xuICAgIHZhciBuYW1lID0gdXRpbC5nZXRBcmcoYUFyZ3MsICduYW1lJywgbnVsbCk7XG5cbiAgICBpZiAoIXRoaXMuX3NraXBWYWxpZGF0aW9uKSB7XG4gICAgICB0aGlzLl92YWxpZGF0ZU1hcHBpbmcoZ2VuZXJhdGVkLCBvcmlnaW5hbCwgc291cmNlLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoc291cmNlICE9IG51bGwpIHtcbiAgICAgIHNvdXJjZSA9IFN0cmluZyhzb3VyY2UpO1xuICAgICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICAgIHRoaXMuX3NvdXJjZXMuYWRkKHNvdXJjZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5hbWUgIT0gbnVsbCkge1xuICAgICAgbmFtZSA9IFN0cmluZyhuYW1lKTtcbiAgICAgIGlmICghdGhpcy5fbmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgICAgIHRoaXMuX25hbWVzLmFkZChuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9tYXBwaW5ncy5hZGQoe1xuICAgICAgZ2VuZXJhdGVkTGluZTogZ2VuZXJhdGVkLmxpbmUsXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IGdlbmVyYXRlZC5jb2x1bW4sXG4gICAgICBvcmlnaW5hbExpbmU6IG9yaWdpbmFsICE9IG51bGwgJiYgb3JpZ2luYWwubGluZSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiBvcmlnaW5hbCAhPSBudWxsICYmIG9yaWdpbmFsLmNvbHVtbixcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgbmFtZTogbmFtZVxuICAgIH0pO1xuICB9O1xuXG4vKipcbiAqIFNldCB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGEgc291cmNlIGZpbGUuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuc2V0U291cmNlQ29udGVudCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9zZXRTb3VyY2VDb250ZW50KGFTb3VyY2VGaWxlLCBhU291cmNlQ29udGVudCkge1xuICAgIHZhciBzb3VyY2UgPSBhU291cmNlRmlsZTtcbiAgICBpZiAodGhpcy5fc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuX3NvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgfVxuXG4gICAgaWYgKGFTb3VyY2VDb250ZW50ICE9IG51bGwpIHtcbiAgICAgIC8vIEFkZCB0aGUgc291cmNlIGNvbnRlbnQgdG8gdGhlIF9zb3VyY2VzQ29udGVudHMgbWFwLlxuICAgICAgLy8gQ3JlYXRlIGEgbmV3IF9zb3VyY2VzQ29udGVudHMgbWFwIGlmIHRoZSBwcm9wZXJ0eSBpcyBudWxsLlxuICAgICAgaWYgKCF0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgICAgdGhpcy5fc291cmNlc0NvbnRlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3NvdXJjZXNDb250ZW50c1t1dGlsLnRvU2V0U3RyaW5nKHNvdXJjZSldID0gYVNvdXJjZUNvbnRlbnQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgIC8vIFJlbW92ZSB0aGUgc291cmNlIGZpbGUgZnJvbSB0aGUgX3NvdXJjZXNDb250ZW50cyBtYXAuXG4gICAgICAvLyBJZiB0aGUgX3NvdXJjZXNDb250ZW50cyBtYXAgaXMgZW1wdHksIHNldCB0aGUgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgIGRlbGV0ZSB0aGlzLl9zb3VyY2VzQ29udGVudHNbdXRpbC50b1NldFN0cmluZyhzb3VyY2UpXTtcbiAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl9zb3VyY2VzQ29udGVudHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLl9zb3VyY2VzQ29udGVudHMgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBtYXBwaW5ncyBvZiBhIHN1Yi1zb3VyY2UtbWFwIGZvciBhIHNwZWNpZmljIHNvdXJjZSBmaWxlIHRvIHRoZVxuICogc291cmNlIG1hcCBiZWluZyBnZW5lcmF0ZWQuIEVhY2ggbWFwcGluZyB0byB0aGUgc3VwcGxpZWQgc291cmNlIGZpbGUgaXNcbiAqIHJld3JpdHRlbiB1c2luZyB0aGUgc3VwcGxpZWQgc291cmNlIG1hcC4gTm90ZTogVGhlIHJlc29sdXRpb24gZm9yIHRoZVxuICogcmVzdWx0aW5nIG1hcHBpbmdzIGlzIHRoZSBtaW5pbWl1bSBvZiB0aGlzIG1hcCBhbmQgdGhlIHN1cHBsaWVkIG1hcC5cbiAqXG4gKiBAcGFyYW0gYVNvdXJjZU1hcENvbnN1bWVyIFRoZSBzb3VyY2UgbWFwIHRvIGJlIGFwcGxpZWQuXG4gKiBAcGFyYW0gYVNvdXJjZUZpbGUgT3B0aW9uYWwuIFRoZSBmaWxlbmFtZSBvZiB0aGUgc291cmNlIGZpbGUuXG4gKiAgICAgICAgSWYgb21pdHRlZCwgU291cmNlTWFwQ29uc3VtZXIncyBmaWxlIHByb3BlcnR5IHdpbGwgYmUgdXNlZC5cbiAqIEBwYXJhbSBhU291cmNlTWFwUGF0aCBPcHRpb25hbC4gVGhlIGRpcm5hbWUgb2YgdGhlIHBhdGggdG8gdGhlIHNvdXJjZSBtYXBcbiAqICAgICAgICB0byBiZSBhcHBsaWVkLiBJZiByZWxhdGl2ZSwgaXQgaXMgcmVsYXRpdmUgdG8gdGhlIFNvdXJjZU1hcENvbnN1bWVyLlxuICogICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIG5lZWRlZCB3aGVuIHRoZSB0d28gc291cmNlIG1hcHMgYXJlbid0IGluIHRoZSBzYW1lXG4gKiAgICAgICAgZGlyZWN0b3J5LCBhbmQgdGhlIHNvdXJjZSBtYXAgdG8gYmUgYXBwbGllZCBjb250YWlucyByZWxhdGl2ZSBzb3VyY2VcbiAqICAgICAgICBwYXRocy4gSWYgc28sIHRob3NlIHJlbGF0aXZlIHNvdXJjZSBwYXRocyBuZWVkIHRvIGJlIHJld3JpdHRlblxuICogICAgICAgIHJlbGF0aXZlIHRvIHRoZSBTb3VyY2VNYXBHZW5lcmF0b3IuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuYXBwbHlTb3VyY2VNYXAgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfYXBwbHlTb3VyY2VNYXAoYVNvdXJjZU1hcENvbnN1bWVyLCBhU291cmNlRmlsZSwgYVNvdXJjZU1hcFBhdGgpIHtcbiAgICB2YXIgc291cmNlRmlsZSA9IGFTb3VyY2VGaWxlO1xuICAgIC8vIElmIGFTb3VyY2VGaWxlIGlzIG9taXR0ZWQsIHdlIHdpbGwgdXNlIHRoZSBmaWxlIHByb3BlcnR5IG9mIHRoZSBTb3VyY2VNYXBcbiAgICBpZiAoYVNvdXJjZUZpbGUgPT0gbnVsbCkge1xuICAgICAgaWYgKGFTb3VyY2VNYXBDb25zdW1lci5maWxlID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLmFwcGx5U291cmNlTWFwIHJlcXVpcmVzIGVpdGhlciBhbiBleHBsaWNpdCBzb3VyY2UgZmlsZSwgJyArXG4gICAgICAgICAgJ29yIHRoZSBzb3VyY2UgbWFwXFwncyBcImZpbGVcIiBwcm9wZXJ0eS4gQm90aCB3ZXJlIG9taXR0ZWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc291cmNlRmlsZSA9IGFTb3VyY2VNYXBDb25zdW1lci5maWxlO1xuICAgIH1cbiAgICB2YXIgc291cmNlUm9vdCA9IHRoaXMuX3NvdXJjZVJvb3Q7XG4gICAgLy8gTWFrZSBcInNvdXJjZUZpbGVcIiByZWxhdGl2ZSBpZiBhbiBhYnNvbHV0ZSBVcmwgaXMgcGFzc2VkLlxuICAgIGlmIChzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIHNvdXJjZUZpbGUgPSB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIHNvdXJjZUZpbGUpO1xuICAgIH1cbiAgICAvLyBBcHBseWluZyB0aGUgU291cmNlTWFwIGNhbiBhZGQgYW5kIHJlbW92ZSBpdGVtcyBmcm9tIHRoZSBzb3VyY2VzIGFuZFxuICAgIC8vIHRoZSBuYW1lcyBhcnJheS5cbiAgICB2YXIgbmV3U291cmNlcyA9IG5ldyBBcnJheVNldCgpO1xuICAgIHZhciBuZXdOYW1lcyA9IG5ldyBBcnJheVNldCgpO1xuXG4gICAgLy8gRmluZCBtYXBwaW5ncyBmb3IgdGhlIFwic291cmNlRmlsZVwiXG4gICAgdGhpcy5fbWFwcGluZ3MudW5zb3J0ZWRGb3JFYWNoKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgPT09IHNvdXJjZUZpbGUgJiYgbWFwcGluZy5vcmlnaW5hbExpbmUgIT0gbnVsbCkge1xuICAgICAgICAvLyBDaGVjayBpZiBpdCBjYW4gYmUgbWFwcGVkIGJ5IHRoZSBzb3VyY2UgbWFwLCB0aGVuIHVwZGF0ZSB0aGUgbWFwcGluZy5cbiAgICAgICAgdmFyIG9yaWdpbmFsID0gYVNvdXJjZU1hcENvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgICAgIGxpbmU6IG1hcHBpbmcub3JpZ2luYWxMaW5lLFxuICAgICAgICAgIGNvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtblxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG9yaWdpbmFsLnNvdXJjZSAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gQ29weSBtYXBwaW5nXG4gICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSBvcmlnaW5hbC5zb3VyY2U7XG4gICAgICAgICAgaWYgKGFTb3VyY2VNYXBQYXRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gdXRpbC5qb2luKGFTb3VyY2VNYXBQYXRoLCBtYXBwaW5nLnNvdXJjZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPSBvcmlnaW5hbC5saW5lO1xuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPSBvcmlnaW5hbC5jb2x1bW47XG4gICAgICAgICAgaWYgKG9yaWdpbmFsLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gb3JpZ2luYWwubmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlO1xuICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmICFuZXdTb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICAgIG5ld1NvdXJjZXMuYWRkKHNvdXJjZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBuYW1lID0gbWFwcGluZy5uYW1lO1xuICAgICAgaWYgKG5hbWUgIT0gbnVsbCAmJiAhbmV3TmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgICAgIG5ld05hbWVzLmFkZChuYW1lKTtcbiAgICAgIH1cblxuICAgIH0sIHRoaXMpO1xuICAgIHRoaXMuX3NvdXJjZXMgPSBuZXdTb3VyY2VzO1xuICAgIHRoaXMuX25hbWVzID0gbmV3TmFtZXM7XG5cbiAgICAvLyBDb3B5IHNvdXJjZXNDb250ZW50cyBvZiBhcHBsaWVkIG1hcC5cbiAgICBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2VGaWxlKSB7XG4gICAgICB2YXIgY29udGVudCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpO1xuICAgICAgaWYgKGNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoYVNvdXJjZU1hcFBhdGggIT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZUZpbGUgPSB1dGlsLmpvaW4oYVNvdXJjZU1hcFBhdGgsIHNvdXJjZUZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2VGaWxlID0gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBzb3VyY2VGaWxlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICB9XG4gICAgfSwgdGhpcyk7XG4gIH07XG5cbi8qKlxuICogQSBtYXBwaW5nIGNhbiBoYXZlIG9uZSBvZiB0aGUgdGhyZWUgbGV2ZWxzIG9mIGRhdGE6XG4gKlxuICogICAxLiBKdXN0IHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24uXG4gKiAgIDIuIFRoZSBHZW5lcmF0ZWQgcG9zaXRpb24sIG9yaWdpbmFsIHBvc2l0aW9uLCBhbmQgb3JpZ2luYWwgc291cmNlLlxuICogICAzLiBHZW5lcmF0ZWQgYW5kIG9yaWdpbmFsIHBvc2l0aW9uLCBvcmlnaW5hbCBzb3VyY2UsIGFzIHdlbGwgYXMgYSBuYW1lXG4gKiAgICAgIHRva2VuLlxuICpcbiAqIFRvIG1haW50YWluIGNvbnNpc3RlbmN5LCB3ZSB2YWxpZGF0ZSB0aGF0IGFueSBuZXcgbWFwcGluZyBiZWluZyBhZGRlZCBmYWxsc1xuICogaW4gdG8gb25lIG9mIHRoZXNlIGNhdGVnb3JpZXMuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuX3ZhbGlkYXRlTWFwcGluZyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl92YWxpZGF0ZU1hcHBpbmcoYUdlbmVyYXRlZCwgYU9yaWdpbmFsLCBhU291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFOYW1lKSB7XG4gICAgLy8gV2hlbiBhT3JpZ2luYWwgaXMgdHJ1dGh5IGJ1dCBoYXMgZW1wdHkgdmFsdWVzIGZvciAubGluZSBhbmQgLmNvbHVtbixcbiAgICAvLyBpdCBpcyBtb3N0IGxpa2VseSBhIHByb2dyYW1tZXIgZXJyb3IuIEluIHRoaXMgY2FzZSB3ZSB0aHJvdyBhIHZlcnlcbiAgICAvLyBzcGVjaWZpYyBlcnJvciBtZXNzYWdlIHRvIHRyeSB0byBndWlkZSB0aGVtIHRoZSByaWdodCB3YXkuXG4gICAgLy8gRm9yIGV4YW1wbGU6IGh0dHBzOi8vZ2l0aHViLmNvbS9Qb2x5bWVyL3BvbHltZXItYnVuZGxlci9wdWxsLzUxOVxuICAgIGlmIChhT3JpZ2luYWwgJiYgdHlwZW9mIGFPcmlnaW5hbC5saW5lICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgYU9yaWdpbmFsLmNvbHVtbiAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ29yaWdpbmFsLmxpbmUgYW5kIG9yaWdpbmFsLmNvbHVtbiBhcmUgbm90IG51bWJlcnMgLS0geW91IHByb2JhYmx5IG1lYW50IHRvIG9taXQgJyArXG4gICAgICAgICAgICAndGhlIG9yaWdpbmFsIG1hcHBpbmcgZW50aXJlbHkgYW5kIG9ubHkgbWFwIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24uIElmIHNvLCBwYXNzICcgK1xuICAgICAgICAgICAgJ251bGwgZm9yIHRoZSBvcmlnaW5hbCBtYXBwaW5nIGluc3RlYWQgb2YgYW4gb2JqZWN0IHdpdGggZW1wdHkgb3IgbnVsbCB2YWx1ZXMuJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChhR2VuZXJhdGVkICYmICdsaW5lJyBpbiBhR2VuZXJhdGVkICYmICdjb2x1bW4nIGluIGFHZW5lcmF0ZWRcbiAgICAgICAgJiYgYUdlbmVyYXRlZC5saW5lID4gMCAmJiBhR2VuZXJhdGVkLmNvbHVtbiA+PSAwXG4gICAgICAgICYmICFhT3JpZ2luYWwgJiYgIWFTb3VyY2UgJiYgIWFOYW1lKSB7XG4gICAgICAvLyBDYXNlIDEuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2UgaWYgKGFHZW5lcmF0ZWQgJiYgJ2xpbmUnIGluIGFHZW5lcmF0ZWQgJiYgJ2NvbHVtbicgaW4gYUdlbmVyYXRlZFxuICAgICAgICAgICAgICYmIGFPcmlnaW5hbCAmJiAnbGluZScgaW4gYU9yaWdpbmFsICYmICdjb2x1bW4nIGluIGFPcmlnaW5hbFxuICAgICAgICAgICAgICYmIGFHZW5lcmF0ZWQubGluZSA+IDAgJiYgYUdlbmVyYXRlZC5jb2x1bW4gPj0gMFxuICAgICAgICAgICAgICYmIGFPcmlnaW5hbC5saW5lID4gMCAmJiBhT3JpZ2luYWwuY29sdW1uID49IDBcbiAgICAgICAgICAgICAmJiBhU291cmNlKSB7XG4gICAgICAvLyBDYXNlcyAyIGFuZCAzLlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtYXBwaW5nOiAnICsgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBnZW5lcmF0ZWQ6IGFHZW5lcmF0ZWQsXG4gICAgICAgIHNvdXJjZTogYVNvdXJjZSxcbiAgICAgICAgb3JpZ2luYWw6IGFPcmlnaW5hbCxcbiAgICAgICAgbmFtZTogYU5hbWVcbiAgICAgIH0pKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogU2VyaWFsaXplIHRoZSBhY2N1bXVsYXRlZCBtYXBwaW5ncyBpbiB0byB0aGUgc3RyZWFtIG9mIGJhc2UgNjQgVkxRc1xuICogc3BlY2lmaWVkIGJ5IHRoZSBzb3VyY2UgbWFwIGZvcm1hdC5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fc2VyaWFsaXplTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3Jfc2VyaWFsaXplTWFwcGluZ3MoKSB7XG4gICAgdmFyIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICB2YXIgcHJldmlvdXNHZW5lcmF0ZWRMaW5lID0gMTtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICB2YXIgcHJldmlvdXNTb3VyY2UgPSAwO1xuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB2YXIgbmV4dDtcbiAgICB2YXIgbWFwcGluZztcbiAgICB2YXIgbmFtZUlkeDtcbiAgICB2YXIgc291cmNlSWR4O1xuXG4gICAgdmFyIG1hcHBpbmdzID0gdGhpcy5fbWFwcGluZ3MudG9BcnJheSgpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBtYXBwaW5ncy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgbWFwcGluZyA9IG1hcHBpbmdzW2ldO1xuICAgICAgbmV4dCA9ICcnXG5cbiAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgIT09IHByZXZpb3VzR2VuZXJhdGVkTGluZSkge1xuICAgICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICAgIHdoaWxlIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgIT09IHByZXZpb3VzR2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgIG5leHQgKz0gJzsnO1xuICAgICAgICAgIHByZXZpb3VzR2VuZXJhdGVkTGluZSsrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgaWYgKCF1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmcsIG1hcHBpbmdzW2kgLSAxXSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBuZXh0ICs9ICcsJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBuZXh0ICs9IGJhc2U2NFZMUS5lbmNvZGUobWFwcGluZy5nZW5lcmF0ZWRDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKG1hcHBpbmcuc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgc291cmNlSWR4ID0gdGhpcy5fc291cmNlcy5pbmRleE9mKG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgbmV4dCArPSBiYXNlNjRWTFEuZW5jb2RlKHNvdXJjZUlkeCAtIHByZXZpb3VzU291cmNlKTtcbiAgICAgICAgcHJldmlvdXNTb3VyY2UgPSBzb3VyY2VJZHg7XG5cbiAgICAgICAgLy8gbGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkIGluIFNvdXJjZU1hcCBzcGVjIHZlcnNpb24gM1xuICAgICAgICBuZXh0ICs9IGJhc2U2NFZMUS5lbmNvZGUobWFwcGluZy5vcmlnaW5hbExpbmUgLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcHJldmlvdXNPcmlnaW5hbExpbmUpO1xuICAgICAgICBwcmV2aW91c09yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lIC0gMTtcblxuICAgICAgICBuZXh0ICs9IGJhc2U2NFZMUS5lbmNvZGUobWFwcGluZy5vcmlnaW5hbENvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4pO1xuICAgICAgICBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICBpZiAobWFwcGluZy5uYW1lICE9IG51bGwpIHtcbiAgICAgICAgICBuYW1lSWR4ID0gdGhpcy5fbmFtZXMuaW5kZXhPZihtYXBwaW5nLm5hbWUpO1xuICAgICAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShuYW1lSWR4IC0gcHJldmlvdXNOYW1lKTtcbiAgICAgICAgICBwcmV2aW91c05hbWUgPSBuYW1lSWR4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdCArPSBuZXh0O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfZ2VuZXJhdGVTb3VyY2VzQ29udGVudChhU291cmNlcywgYVNvdXJjZVJvb3QpIHtcbiAgICByZXR1cm4gYVNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIGlmICghdGhpcy5fc291cmNlc0NvbnRlbnRzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKGFTb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgc291cmNlID0gdXRpbC5yZWxhdGl2ZShhU291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgIH1cbiAgICAgIHZhciBrZXkgPSB1dGlsLnRvU2V0U3RyaW5nKHNvdXJjZSk7XG4gICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX3NvdXJjZXNDb250ZW50cywga2V5KVxuICAgICAgICA/IHRoaXMuX3NvdXJjZXNDb250ZW50c1trZXldXG4gICAgICAgIDogbnVsbDtcbiAgICB9LCB0aGlzKTtcbiAgfTtcblxuLyoqXG4gKiBFeHRlcm5hbGl6ZSB0aGUgc291cmNlIG1hcC5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS50b0pTT04gPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfdG9KU09OKCkge1xuICAgIHZhciBtYXAgPSB7XG4gICAgICB2ZXJzaW9uOiB0aGlzLl92ZXJzaW9uLFxuICAgICAgc291cmNlczogdGhpcy5fc291cmNlcy50b0FycmF5KCksXG4gICAgICBuYW1lczogdGhpcy5fbmFtZXMudG9BcnJheSgpLFxuICAgICAgbWFwcGluZ3M6IHRoaXMuX3NlcmlhbGl6ZU1hcHBpbmdzKClcbiAgICB9O1xuICAgIGlmICh0aGlzLl9maWxlICE9IG51bGwpIHtcbiAgICAgIG1hcC5maWxlID0gdGhpcy5fZmlsZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3NvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgbWFwLnNvdXJjZVJvb3QgPSB0aGlzLl9zb3VyY2VSb290O1xuICAgIH1cbiAgICBpZiAodGhpcy5fc291cmNlc0NvbnRlbnRzKSB7XG4gICAgICBtYXAuc291cmNlc0NvbnRlbnQgPSB0aGlzLl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KG1hcC5zb3VyY2VzLCBtYXAuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcDtcbiAgfTtcblxuLyoqXG4gKiBSZW5kZXIgdGhlIHNvdXJjZSBtYXAgYmVpbmcgZ2VuZXJhdGVkIHRvIGEgc3RyaW5nLlxuICovXG5Tb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLnRvU3RyaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3RvU3RyaW5nKCkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnRvSlNPTigpKTtcbiAgfTtcblxuZXhwb3J0cy5Tb3VyY2VNYXBHZW5lcmF0b3IgPSBTb3VyY2VNYXBHZW5lcmF0b3I7XG4iLCAiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG5leHBvcnRzLkdSRUFURVNUX0xPV0VSX0JPVU5EID0gMTtcbmV4cG9ydHMuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIFJlY3Vyc2l2ZSBpbXBsZW1lbnRhdGlvbiBvZiBiaW5hcnkgc2VhcmNoLlxuICpcbiAqIEBwYXJhbSBhTG93IEluZGljZXMgaGVyZSBhbmQgbG93ZXIgZG8gbm90IGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAqIEBwYXJhbSBhSGlnaCBJbmRpY2VzIGhlcmUgYW5kIGhpZ2hlciBkbyBub3QgY29udGFpbiB0aGUgbmVlZGxlLlxuICogQHBhcmFtIGFOZWVkbGUgVGhlIGVsZW1lbnQgYmVpbmcgc2VhcmNoZWQgZm9yLlxuICogQHBhcmFtIGFIYXlzdGFjayBUaGUgbm9uLWVtcHR5IGFycmF5IGJlaW5nIHNlYXJjaGVkLlxuICogQHBhcmFtIGFDb21wYXJlIEZ1bmN0aW9uIHdoaWNoIHRha2VzIHR3byBlbGVtZW50cyBhbmQgcmV0dXJucyAtMSwgMCwgb3IgMS5cbiAqIEBwYXJhbSBhQmlhcyBFaXRoZXIgJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqL1xuZnVuY3Rpb24gcmVjdXJzaXZlU2VhcmNoKGFMb3csIGFIaWdoLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcykge1xuICAvLyBUaGlzIGZ1bmN0aW9uIHRlcm1pbmF0ZXMgd2hlbiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOlxuICAvL1xuICAvLyAgIDEuIFdlIGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQgd2UgYXJlIGxvb2tpbmcgZm9yLlxuICAvL1xuICAvLyAgIDIuIFdlIGRpZCBub3QgZmluZCB0aGUgZXhhY3QgZWxlbWVudCwgYnV0IHdlIGNhbiByZXR1cm4gdGhlIGluZGV4IG9mXG4gIC8vICAgICAgdGhlIG5leHQtY2xvc2VzdCBlbGVtZW50LlxuICAvL1xuICAvLyAgIDMuIFdlIGRpZCBub3QgZmluZCB0aGUgZXhhY3QgZWxlbWVudCwgYW5kIHRoZXJlIGlzIG5vIG5leHQtY2xvc2VzdFxuICAvLyAgICAgIGVsZW1lbnQgdGhhbiB0aGUgb25lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLCBzbyB3ZSByZXR1cm4gLTEuXG4gIHZhciBtaWQgPSBNYXRoLmZsb29yKChhSGlnaCAtIGFMb3cpIC8gMikgKyBhTG93O1xuICB2YXIgY21wID0gYUNvbXBhcmUoYU5lZWRsZSwgYUhheXN0YWNrW21pZF0sIHRydWUpO1xuICBpZiAoY21wID09PSAwKSB7XG4gICAgLy8gRm91bmQgdGhlIGVsZW1lbnQgd2UgYXJlIGxvb2tpbmcgZm9yLlxuICAgIHJldHVybiBtaWQ7XG4gIH1cbiAgZWxzZSBpZiAoY21wID4gMCkge1xuICAgIC8vIE91ciBuZWVkbGUgaXMgZ3JlYXRlciB0aGFuIGFIYXlzdGFja1ttaWRdLlxuICAgIGlmIChhSGlnaCAtIG1pZCA+IDEpIHtcbiAgICAgIC8vIFRoZSBlbGVtZW50IGlzIGluIHRoZSB1cHBlciBoYWxmLlxuICAgICAgcmV0dXJuIHJlY3Vyc2l2ZVNlYXJjaChtaWQsIGFIaWdoLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcyk7XG4gICAgfVxuXG4gICAgLy8gVGhlIGV4YWN0IG5lZWRsZSBlbGVtZW50IHdhcyBub3QgZm91bmQgaW4gdGhpcyBoYXlzdGFjay4gRGV0ZXJtaW5lIGlmXG4gICAgLy8gd2UgYXJlIGluIHRlcm1pbmF0aW9uIGNhc2UgKDMpIG9yICgyKSBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0aGluZy5cbiAgICBpZiAoYUJpYXMgPT0gZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCkge1xuICAgICAgcmV0dXJuIGFIaWdoIDwgYUhheXN0YWNrLmxlbmd0aCA/IGFIaWdoIDogLTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtaWQ7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIC8vIE91ciBuZWVkbGUgaXMgbGVzcyB0aGFuIGFIYXlzdGFja1ttaWRdLlxuICAgIGlmIChtaWQgLSBhTG93ID4gMSkge1xuICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIGxvd2VyIGhhbGYuXG4gICAgICByZXR1cm4gcmVjdXJzaXZlU2VhcmNoKGFMb3csIG1pZCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpO1xuICAgIH1cblxuICAgIC8vIHdlIGFyZSBpbiB0ZXJtaW5hdGlvbiBjYXNlICgzKSBvciAoMikgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgdGhpbmcuXG4gICAgaWYgKGFCaWFzID09IGV4cG9ydHMuTEVBU1RfVVBQRVJfQk9VTkQpIHtcbiAgICAgIHJldHVybiBtaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBhTG93IDwgMCA/IC0xIDogYUxvdztcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2ggd2hpY2ggd2lsbCBhbHdheXMgdHJ5IGFuZCByZXR1cm5cbiAqIHRoZSBpbmRleCBvZiB0aGUgY2xvc2VzdCBlbGVtZW50IGlmIHRoZXJlIGlzIG5vIGV4YWN0IGhpdC4gVGhpcyBpcyBiZWNhdXNlXG4gKiBtYXBwaW5ncyBiZXR3ZWVuIG9yaWdpbmFsIGFuZCBnZW5lcmF0ZWQgbGluZS9jb2wgcGFpcnMgYXJlIHNpbmdsZSBwb2ludHMsXG4gKiBhbmQgdGhlcmUgaXMgYW4gaW1wbGljaXQgcmVnaW9uIGJldHdlZW4gZWFjaCBvZiB0aGVtLCBzbyBhIG1pc3MganVzdCBtZWFuc1xuICogdGhhdCB5b3UgYXJlbid0IG9uIHRoZSB2ZXJ5IHN0YXJ0IG9mIGEgcmVnaW9uLlxuICpcbiAqIEBwYXJhbSBhTmVlZGxlIFRoZSBlbGVtZW50IHlvdSBhcmUgbG9va2luZyBmb3IuXG4gKiBAcGFyYW0gYUhheXN0YWNrIFRoZSBhcnJheSB0aGF0IGlzIGJlaW5nIHNlYXJjaGVkLlxuICogQHBhcmFtIGFDb21wYXJlIEEgZnVuY3Rpb24gd2hpY2ggdGFrZXMgdGhlIG5lZWRsZSBhbmQgYW4gZWxlbWVudCBpbiB0aGVcbiAqICAgICBhcnJheSBhbmQgcmV0dXJucyAtMSwgMCwgb3IgMSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgbmVlZGxlIGlzIGxlc3NcbiAqICAgICB0aGFuLCBlcXVhbCB0bywgb3IgZ3JlYXRlciB0aGFuIHRoZSBlbGVtZW50LCByZXNwZWN0aXZlbHkuXG4gKiBAcGFyYW0gYUJpYXMgRWl0aGVyICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ2JpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKiAgICAgRGVmYXVsdHMgdG8gJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKi9cbmV4cG9ydHMuc2VhcmNoID0gZnVuY3Rpb24gc2VhcmNoKGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKSB7XG4gIGlmIChhSGF5c3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgdmFyIGluZGV4ID0gcmVjdXJzaXZlU2VhcmNoKC0xLCBhSGF5c3RhY2subGVuZ3RoLCBhTmVlZGxlLCBhSGF5c3RhY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQ29tcGFyZSwgYUJpYXMgfHwgZXhwb3J0cy5HUkVBVEVTVF9MT1dFUl9CT1VORCk7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICAvLyBXZSBoYXZlIGZvdW5kIGVpdGhlciB0aGUgZXhhY3QgZWxlbWVudCwgb3IgdGhlIG5leHQtY2xvc2VzdCBlbGVtZW50IHRoYW5cbiAgLy8gdGhlIG9uZSB3ZSBhcmUgc2VhcmNoaW5nIGZvci4gSG93ZXZlciwgdGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgc3VjaFxuICAvLyBlbGVtZW50LiBNYWtlIHN1cmUgd2UgYWx3YXlzIHJldHVybiB0aGUgc21hbGxlc3Qgb2YgdGhlc2UuXG4gIHdoaWxlIChpbmRleCAtIDEgPj0gMCkge1xuICAgIGlmIChhQ29tcGFyZShhSGF5c3RhY2tbaW5kZXhdLCBhSGF5c3RhY2tbaW5kZXggLSAxXSwgdHJ1ZSkgIT09IDApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAtLWluZGV4O1xuICB9XG5cbiAgcmV0dXJuIGluZGV4O1xufTtcbiIsICIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8vIEl0IHR1cm5zIG91dCB0aGF0IHNvbWUgKG1vc3Q/KSBKYXZhU2NyaXB0IGVuZ2luZXMgZG9uJ3Qgc2VsZi1ob3N0XG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgLiBUaGlzIG1ha2VzIHNlbnNlIGJlY2F1c2UgQysrIHdpbGwgbGlrZWx5IHJlbWFpblxuLy8gZmFzdGVyIHRoYW4gSlMgd2hlbiBkb2luZyByYXcgQ1BVLWludGVuc2l2ZSBzb3J0aW5nLiBIb3dldmVyLCB3aGVuIHVzaW5nIGFcbi8vIGN1c3RvbSBjb21wYXJhdG9yIGZ1bmN0aW9uLCBjYWxsaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIFZNJ3MgQysrIGFuZFxuLy8gSklUJ2QgSlMgaXMgcmF0aGVyIHNsb3cgKmFuZCogbG9zZXMgSklUIHR5cGUgaW5mb3JtYXRpb24sIHJlc3VsdGluZyBpblxuLy8gd29yc2UgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRoYW4gd291bGQgYmUgb3B0aW1hbC4gSW5cbi8vIGZhY3QsIHdoZW4gc29ydGluZyB3aXRoIGEgY29tcGFyYXRvciwgdGhlc2UgY29zdHMgb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIG9mXG4vLyBzb3J0aW5nIGluIEMrKy4gQnkgdXNpbmcgb3VyIG93biBKUy1pbXBsZW1lbnRlZCBRdWljayBTb3J0IChiZWxvdyksIHdlIGdldFxuLy8gYSB+MzUwMG1zIG1lYW4gc3BlZWQtdXAgaW4gYGJlbmNoL2JlbmNoLmh0bWxgLlxuXG4vKipcbiAqIFN3YXAgdGhlIGVsZW1lbnRzIGluZGV4ZWQgYnkgYHhgIGFuZCBgeWAgaW4gdGhlIGFycmF5IGBhcnlgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIFRoZSBhcnJheS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBpdGVtLlxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNlY29uZCBpdGVtLlxuICovXG5mdW5jdGlvbiBzd2FwKGFyeSwgeCwgeSkge1xuICB2YXIgdGVtcCA9IGFyeVt4XTtcbiAgYXJ5W3hdID0gYXJ5W3ldO1xuICBhcnlbeV0gPSB0ZW1wO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gaW50ZWdlciB3aXRoaW4gdGhlIHJhbmdlIGBsb3cgLi4gaGlnaGAgaW5jbHVzaXZlLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBsb3dcbiAqICAgICAgICBUaGUgbG93ZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICogQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcbiAqICAgICAgICBUaGUgdXBwZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICovXG5mdW5jdGlvbiByYW5kb21JbnRJblJhbmdlKGxvdywgaGlnaCkge1xuICByZXR1cm4gTWF0aC5yb3VuZChsb3cgKyAoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSkpO1xufVxuXG4vKipcbiAqIFRoZSBRdWljayBTb3J0IGFsZ29yaXRobS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBwXG4gKiAgICAgICAgU3RhcnQgaW5kZXggb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gclxuICogICAgICAgIEVuZCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCByKSB7XG4gIC8vIElmIG91ciBsb3dlciBib3VuZCBpcyBsZXNzIHRoYW4gb3VyIHVwcGVyIGJvdW5kLCB3ZSAoMSkgcGFydGl0aW9uIHRoZVxuICAvLyBhcnJheSBpbnRvIHR3byBwaWVjZXMgYW5kICgyKSByZWN1cnNlIG9uIGVhY2ggaGFsZi4gSWYgaXQgaXMgbm90LCB0aGlzIGlzXG4gIC8vIHRoZSBlbXB0eSBhcnJheSBhbmQgb3VyIGJhc2UgY2FzZS5cblxuICBpZiAocCA8IHIpIHtcbiAgICAvLyAoMSkgUGFydGl0aW9uaW5nLlxuICAgIC8vXG4gICAgLy8gVGhlIHBhcnRpdGlvbmluZyBjaG9vc2VzIGEgcGl2b3QgYmV0d2VlbiBgcGAgYW5kIGByYCBhbmQgbW92ZXMgYWxsXG4gICAgLy8gZWxlbWVudHMgdGhhdCBhcmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdCB0byB0aGUgYmVmb3JlIGl0LCBhbmRcbiAgICAvLyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBpdCBhZnRlciBpdC4gVGhlIGVmZmVjdCBpcyB0aGF0XG4gICAgLy8gb25jZSBwYXJ0aXRpb24gaXMgZG9uZSwgdGhlIHBpdm90IGlzIGluIHRoZSBleGFjdCBwbGFjZSBpdCB3aWxsIGJlIHdoZW5cbiAgICAvLyB0aGUgYXJyYXkgaXMgcHV0IGluIHNvcnRlZCBvcmRlciwgYW5kIGl0IHdpbGwgbm90IG5lZWQgdG8gYmUgbW92ZWRcbiAgICAvLyBhZ2Fpbi4gVGhpcyBydW5zIGluIE8obikgdGltZS5cblxuICAgIC8vIEFsd2F5cyBjaG9vc2UgYSByYW5kb20gcGl2b3Qgc28gdGhhdCBhbiBpbnB1dCBhcnJheSB3aGljaCBpcyByZXZlcnNlXG4gICAgLy8gc29ydGVkIGRvZXMgbm90IGNhdXNlIE8obl4yKSBydW5uaW5nIHRpbWUuXG4gICAgdmFyIHBpdm90SW5kZXggPSByYW5kb21JbnRJblJhbmdlKHAsIHIpO1xuICAgIHZhciBpID0gcCAtIDE7XG5cbiAgICBzd2FwKGFyeSwgcGl2b3RJbmRleCwgcik7XG4gICAgdmFyIHBpdm90ID0gYXJ5W3JdO1xuXG4gICAgLy8gSW1tZWRpYXRlbHkgYWZ0ZXIgYGpgIGlzIGluY3JlbWVudGVkIGluIHRoaXMgbG9vcCwgdGhlIGZvbGxvd2luZyBob2xkXG4gICAgLy8gdHJ1ZTpcbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbcCAuLiBpXWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdC5cbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbaSsxIC4uIGotMV1gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcGl2b3QuXG4gICAgZm9yICh2YXIgaiA9IHA7IGogPCByOyBqKyspIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKGFyeVtqXSwgcGl2b3QpIDw9IDApIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBzd2FwKGFyeSwgaSwgaik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dhcChhcnksIGkgKyAxLCBqKTtcbiAgICB2YXIgcSA9IGkgKyAxO1xuXG4gICAgLy8gKDIpIFJlY3Vyc2Ugb24gZWFjaCBoYWxmLlxuXG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCBxIC0gMSk7XG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBxICsgMSwgcik7XG4gIH1cbn1cblxuLyoqXG4gKiBTb3J0IHRoZSBnaXZlbiBhcnJheSBpbi1wbGFjZSB3aXRoIHRoZSBnaXZlbiBjb21wYXJhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICovXG5leHBvcnRzLnF1aWNrU29ydCA9IGZ1bmN0aW9uIChhcnksIGNvbXBhcmF0b3IpIHtcbiAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCAwLCBhcnkubGVuZ3RoIC0gMSk7XG59O1xuIiwgIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcbnZhciBiaW5hcnlTZWFyY2ggPSByZXF1aXJlKCcuL2JpbmFyeS1zZWFyY2gnKTtcbnZhciBBcnJheVNldCA9IHJlcXVpcmUoJy4vYXJyYXktc2V0JykuQXJyYXlTZXQ7XG52YXIgYmFzZTY0VkxRID0gcmVxdWlyZSgnLi9iYXNlNjQtdmxxJyk7XG52YXIgcXVpY2tTb3J0ID0gcmVxdWlyZSgnLi9xdWljay1zb3J0JykucXVpY2tTb3J0O1xuXG5mdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcihhU291cmNlTWFwLCBhU291cmNlTWFwVVJMKSB7XG4gIHZhciBzb3VyY2VNYXAgPSBhU291cmNlTWFwO1xuICBpZiAodHlwZW9mIGFTb3VyY2VNYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgc291cmNlTWFwID0gdXRpbC5wYXJzZVNvdXJjZU1hcElucHV0KGFTb3VyY2VNYXApO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZU1hcC5zZWN0aW9ucyAhPSBudWxsXG4gICAgPyBuZXcgSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcCwgYVNvdXJjZU1hcFVSTClcbiAgICA6IG5ldyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcCwgYVNvdXJjZU1hcFVSTCk7XG59XG5cblNvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPSBmdW5jdGlvbihhU291cmNlTWFwLCBhU291cmNlTWFwVVJMKSB7XG4gIHJldHVybiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCwgYVNvdXJjZU1hcFVSTCk7XG59XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vLyBgX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kIGBfX29yaWdpbmFsTWFwcGluZ3NgIGFyZSBhcnJheXMgdGhhdCBob2xkIHRoZVxuLy8gcGFyc2VkIG1hcHBpbmcgY29vcmRpbmF0ZXMgZnJvbSB0aGUgc291cmNlIG1hcCdzIFwibWFwcGluZ3NcIiBhdHRyaWJ1dGUuIFRoZXlcbi8vIGFyZSBsYXppbHkgaW5zdGFudGlhdGVkLCBhY2Nlc3NlZCB2aWEgdGhlIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBnZXR0ZXJzIHJlc3BlY3RpdmVseSwgYW5kIHdlIG9ubHkgcGFyc2UgdGhlIG1hcHBpbmdzXG4vLyBhbmQgY3JlYXRlIHRoZXNlIGFycmF5cyBvbmNlIHF1ZXJpZWQgZm9yIGEgc291cmNlIGxvY2F0aW9uLiBXZSBqdW1wIHRocm91Z2hcbi8vIHRoZXNlIGhvb3BzIGJlY2F1c2UgdGhlcmUgY2FuIGJlIG1hbnkgdGhvdXNhbmRzIG9mIG1hcHBpbmdzLCBhbmQgcGFyc2luZ1xuLy8gdGhlbSBpcyBleHBlbnNpdmUsIHNvIHdlIG9ubHkgd2FudCB0byBkbyBpdCBpZiB3ZSBtdXN0LlxuLy9cbi8vIEVhY2ggb2JqZWN0IGluIHRoZSBhcnJheXMgaXMgb2YgdGhlIGZvcm06XG4vL1xuLy8gICAgIHtcbi8vICAgICAgIGdlbmVyYXRlZExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBnZW5lcmF0ZWRDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIHNvdXJjZTogVGhlIHBhdGggdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoYXQgZ2VuZXJhdGVkIHRoaXNcbi8vICAgICAgICAgICAgICAgY2h1bmsgb2YgY29kZSxcbi8vICAgICAgIG9yaWdpbmFsTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgc3ltYm9sIHdoaWNoIGdlbmVyYXRlZCB0aGlzIGNodW5rIG9mXG4vLyAgICAgICAgICAgICBjb2RlLlxuLy8gICAgIH1cbi8vXG4vLyBBbGwgcHJvcGVydGllcyBleGNlcHQgZm9yIGBnZW5lcmF0ZWRMaW5lYCBhbmQgYGdlbmVyYXRlZENvbHVtbmAgY2FuIGJlXG4vLyBgbnVsbGAuXG4vL1xuLy8gYF9nZW5lcmF0ZWRNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucy5cbi8vXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucy5cblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19nZW5lcmF0ZWRNYXBwaW5ncycsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncykge1xuICAgICAgdGhpcy5fcGFyc2VNYXBwaW5ncyh0aGlzLl9tYXBwaW5ncywgdGhpcy5zb3VyY2VSb290KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzO1xuICB9XG59KTtcblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG51bGw7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnX29yaWdpbmFsTWFwcGluZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncykge1xuICAgICAgdGhpcy5fcGFyc2VNYXBwaW5ncyh0aGlzLl9tYXBwaW5ncywgdGhpcy5zb3VyY2VSb290KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fX29yaWdpbmFsTWFwcGluZ3M7XG4gIH1cbn0pO1xuXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGluZGV4KSB7XG4gICAgdmFyIGMgPSBhU3RyLmNoYXJBdChpbmRleCk7XG4gICAgcmV0dXJuIGMgPT09IFwiO1wiIHx8IGMgPT09IFwiLFwiO1xuICB9O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgX3BhcnNlTWFwcGluZ3NcIik7XG4gIH07XG5cblNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUiA9IDE7XG5Tb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUiA9IDI7XG5cblNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EID0gMjtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgZWFjaCBtYXBwaW5nIGJldHdlZW4gYW4gb3JpZ2luYWwgc291cmNlL2xpbmUvY29sdW1uIGFuZCBhXG4gKiBnZW5lcmF0ZWQgbGluZS9jb2x1bW4gaW4gdGhpcyBzb3VyY2UgbWFwLlxuICpcbiAqIEBwYXJhbSBGdW5jdGlvbiBhQ2FsbGJhY2tcbiAqICAgICAgICBUaGUgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBlYWNoIG1hcHBpbmcuXG4gKiBAcGFyYW0gT2JqZWN0IGFDb250ZXh0XG4gKiAgICAgICAgT3B0aW9uYWwuIElmIHNwZWNpZmllZCwgdGhpcyBvYmplY3Qgd2lsbCBiZSB0aGUgdmFsdWUgb2YgYHRoaXNgIGV2ZXJ5XG4gKiAgICAgICAgdGltZSB0aGF0IGBhQ2FsbGJhY2tgIGlzIGNhbGxlZC5cbiAqIEBwYXJhbSBhT3JkZXJcbiAqICAgICAgICBFaXRoZXIgYFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUmAgb3JcbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVJgLiBTcGVjaWZpZXMgd2hldGhlciB5b3Ugd2FudCB0b1xuICogICAgICAgIGl0ZXJhdGUgb3ZlciB0aGUgbWFwcGluZ3Mgc29ydGVkIGJ5IHRoZSBnZW5lcmF0ZWQgZmlsZSdzIGxpbmUvY29sdW1uXG4gKiAgICAgICAgb3JkZXIgb3IgdGhlIG9yaWdpbmFsJ3Mgc291cmNlL2xpbmUvY29sdW1uIG9yZGVyLCByZXNwZWN0aXZlbHkuIERlZmF1bHRzIHRvXG4gKiAgICAgICAgYFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUmAuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5lYWNoTWFwcGluZyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2VhY2hNYXBwaW5nKGFDYWxsYmFjaywgYUNvbnRleHQsIGFPcmRlcikge1xuICAgIHZhciBjb250ZXh0ID0gYUNvbnRleHQgfHwgbnVsbDtcbiAgICB2YXIgb3JkZXIgPSBhT3JkZXIgfHwgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSO1xuXG4gICAgdmFyIG1hcHBpbmdzO1xuICAgIHN3aXRjaCAob3JkZXIpIHtcbiAgICBjYXNlIFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUjpcbiAgICAgIG1hcHBpbmdzID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gb3JkZXIgb2YgaXRlcmF0aW9uLlwiKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlUm9vdCA9IHRoaXMuc291cmNlUm9vdDtcbiAgICBtYXBwaW5ncy5tYXAoZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBtYXBwaW5nLnNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiB0aGlzLl9zb3VyY2VzLmF0KG1hcHBpbmcuc291cmNlKTtcbiAgICAgIHNvdXJjZSA9IHV0aWwuY29tcHV0ZVNvdXJjZVVSTChzb3VyY2VSb290LCBzb3VyY2UsIHRoaXMuX3NvdXJjZU1hcFVSTCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uLFxuICAgICAgICBvcmlnaW5hbExpbmU6IG1hcHBpbmcub3JpZ2luYWxMaW5lLFxuICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgbmFtZTogbWFwcGluZy5uYW1lID09PSBudWxsID8gbnVsbCA6IHRoaXMuX25hbWVzLmF0KG1hcHBpbmcubmFtZSlcbiAgICAgIH07XG4gICAgfSwgdGhpcykuZm9yRWFjaChhQ2FsbGJhY2ssIGNvbnRleHQpO1xuICB9O1xuXG4vKipcbiAqIFJldHVybnMgYWxsIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBvcmlnaW5hbCBzb3VyY2UsXG4gKiBsaW5lLCBhbmQgY29sdW1uIHByb3ZpZGVkLiBJZiBubyBjb2x1bW4gaXMgcHJvdmlkZWQsIHJldHVybnMgYWxsIG1hcHBpbmdzXG4gKiBjb3JyZXNwb25kaW5nIHRvIGEgZWl0aGVyIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yIG9yIHRoZSBuZXh0XG4gKiBjbG9zZXN0IGxpbmUgdGhhdCBoYXMgYW55IG1hcHBpbmdzLiBPdGhlcndpc2UsIHJldHVybnMgYWxsIG1hcHBpbmdzXG4gKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBsaW5lIGFuZCBlaXRoZXIgdGhlIGNvbHVtbiB3ZSBhcmUgc2VhcmNoaW5nIGZvclxuICogb3IgdGhlIG5leHQgY2xvc2VzdCBjb2x1bW4gdGhhdCBoYXMgYW55IG9mZnNldHMuXG4gKlxuICogVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLiAgVGhlIGxpbmUgbnVtYmVyIGlzIDEtYmFzZWQuXG4gKiAgIC0gY29sdW1uOiBPcHRpb25hbC4gdGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgIFRoZSBjb2x1bW4gbnVtYmVyIGlzIDAtYmFzZWQuXG4gKlxuICogYW5kIGFuIGFycmF5IG9mIG9iamVjdHMgaXMgcmV0dXJuZWQsIGVhY2ggd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC4gIFRoZVxuICogICAgbGluZSBudW1iZXIgaXMgMS1iYXNlZC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAgVGhlIGNvbHVtbiBudW1iZXIgaXMgMC1iYXNlZC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmFsbEdlbmVyYXRlZFBvc2l0aW9uc0ZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2FsbEdlbmVyYXRlZFBvc2l0aW9uc0ZvcihhQXJncykge1xuICAgIHZhciBsaW5lID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyk7XG5cbiAgICAvLyBXaGVuIHRoZXJlIGlzIG5vIGV4YWN0IG1hdGNoLCBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmdcbiAgICAvLyByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgY2xvc2VzdCBtYXBwaW5nIGxlc3MgdGhhbiB0aGUgbmVlZGxlLiBCeVxuICAgIC8vIHNldHRpbmcgbmVlZGxlLm9yaWdpbmFsQ29sdW1uIHRvIDAsIHdlIHRodXMgZmluZCB0aGUgbGFzdCBtYXBwaW5nIGZvclxuICAgIC8vIHRoZSBnaXZlbiBsaW5lLCBwcm92aWRlZCBzdWNoIGEgbWFwcGluZyBleGlzdHMuXG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIHNvdXJjZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnKSxcbiAgICAgIG9yaWdpbmFsTGluZTogbGluZSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicsIDApXG4gICAgfTtcblxuICAgIG5lZWRsZS5zb3VyY2UgPSB0aGlzLl9maW5kU291cmNlSW5kZXgobmVlZGxlLnNvdXJjZSk7XG4gICAgaWYgKG5lZWRsZS5zb3VyY2UgPCAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgdmFyIG1hcHBpbmdzID0gW107XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhuZWVkbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsTGluZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3JpZ2luYWxDb2x1bW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCk7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChhQXJncy5jb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgb3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG5cbiAgICAgICAgLy8gSXRlcmF0ZSB1bnRpbCBlaXRoZXIgd2UgcnVuIG91dCBvZiBtYXBwaW5ncywgb3Igd2UgcnVuIGludG9cbiAgICAgICAgLy8gYSBtYXBwaW5nIGZvciBhIGRpZmZlcmVudCBsaW5lIHRoYW4gdGhlIG9uZSB3ZSBmb3VuZC4gU2luY2VcbiAgICAgICAgLy8gbWFwcGluZ3MgYXJlIHNvcnRlZCwgdGhpcyBpcyBndWFyYW50ZWVkIHRvIGZpbmQgYWxsIG1hcHBpbmdzIGZvclxuICAgICAgICAvLyB0aGUgbGluZSB3ZSBmb3VuZC5cbiAgICAgICAgd2hpbGUgKG1hcHBpbmcgJiYgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09IG9yaWdpbmFsTGluZSkge1xuICAgICAgICAgIG1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZExpbmUnLCBudWxsKSxcbiAgICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgICAgbGFzdENvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2xhc3RHZW5lcmF0ZWRDb2x1bW4nLCBudWxsKVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbKytpbmRleF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBvcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgLy8gSXRlcmF0ZSB1bnRpbCBlaXRoZXIgd2UgcnVuIG91dCBvZiBtYXBwaW5ncywgb3Igd2UgcnVuIGludG9cbiAgICAgICAgLy8gYSBtYXBwaW5nIGZvciBhIGRpZmZlcmVudCBsaW5lIHRoYW4gdGhlIG9uZSB3ZSB3ZXJlIHNlYXJjaGluZyBmb3IuXG4gICAgICAgIC8vIFNpbmNlIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgLy8gdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IuXG4gICAgICAgIHdoaWxlIChtYXBwaW5nICYmXG4gICAgICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gbGluZSAmJlxuICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbiA9PSBvcmlnaW5hbENvbHVtbikge1xuICAgICAgICAgIG1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZExpbmUnLCBudWxsKSxcbiAgICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgICAgbGFzdENvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2xhc3RHZW5lcmF0ZWRDb2x1bW4nLCBudWxsKVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbKytpbmRleF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWFwcGluZ3M7XG4gIH07XG5cbmV4cG9ydHMuU291cmNlTWFwQ29uc3VtZXIgPSBTb3VyY2VNYXBDb25zdW1lcjtcblxuLyoqXG4gKiBBIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgaW5zdGFuY2UgcmVwcmVzZW50cyBhIHBhcnNlZCBzb3VyY2UgbWFwIHdoaWNoIHdlIGNhblxuICogcXVlcnkgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcmlnaW5hbCBmaWxlIHBvc2l0aW9ucyBieSBnaXZpbmcgaXQgYSBmaWxlXG4gKiBwb3NpdGlvbiBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqXG4gKiBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIHRoZSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yXG4gKiBhbHJlYWR5IHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNvdXJjZSBtYXBzIGhhdmUgdGhlXG4gKiBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqXG4gKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqICAgLSBzb3VyY2VzOiBBbiBhcnJheSBvZiBVUkxzIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbmFtZXM6IEFuIGFycmF5IG9mIGlkZW50aWZpZXJzIHdoaWNoIGNhbiBiZSByZWZlcnJlbmNlZCBieSBpbmRpdmlkdWFsIG1hcHBpbmdzLlxuICogICAtIHNvdXJjZVJvb3Q6IE9wdGlvbmFsLiBUaGUgVVJMIHJvb3QgZnJvbSB3aGljaCBhbGwgc291cmNlcyBhcmUgcmVsYXRpdmUuXG4gKiAgIC0gc291cmNlc0NvbnRlbnQ6IE9wdGlvbmFsLiBBbiBhcnJheSBvZiBjb250ZW50cyBvZiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogICAtIG1hcHBpbmdzOiBBIHN0cmluZyBvZiBiYXNlNjQgVkxRcyB3aGljaCBjb250YWluIHRoZSBhY3R1YWwgbWFwcGluZ3MuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICpcbiAqIEhlcmUgaXMgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF06XG4gKlxuICogICAgIHtcbiAqICAgICAgIHZlcnNpb24gOiAzLFxuICogICAgICAgZmlsZTogXCJvdXQuanNcIixcbiAqICAgICAgIHNvdXJjZVJvb3QgOiBcIlwiLFxuICogICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICogICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICBtYXBwaW5nczogXCJBQSxBQjs7QUJDREU7XCJcbiAqICAgICB9XG4gKlxuICogVGhlIHNlY29uZCBwYXJhbWV0ZXIsIGlmIGdpdmVuLCBpcyBhIHN0cmluZyB3aG9zZSB2YWx1ZSBpcyB0aGUgVVJMXG4gKiBhdCB3aGljaCB0aGUgc291cmNlIG1hcCB3YXMgZm91bmQuICBUaGlzIFVSTCBpcyB1c2VkIHRvIGNvbXB1dGUgdGhlXG4gKiBzb3VyY2VzIGFycmF5LlxuICpcbiAqIFswXTogaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xVTFSR0FlaFF3UnlwVVRvdkYxS1JscGlPRnplMGItXzJnYzZmQUgwS1kway9lZGl0P3BsaT0xI1xuICovXG5mdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXAsIGFTb3VyY2VNYXBVUkwpIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSB1dGlsLnBhcnNlU291cmNlTWFwSW5wdXQoYVNvdXJjZU1hcCk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNvdXJjZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzJyk7XG4gIC8vIFNhc3MgMy4zIGxlYXZlcyBvdXQgdGhlICduYW1lcycgYXJyYXksIHNvIHdlIGRldmlhdGUgZnJvbSB0aGUgc3BlYyAod2hpY2hcbiAgLy8gcmVxdWlyZXMgdGhlIGFycmF5KSB0byBwbGF5IG5pY2UgaGVyZS5cbiAgdmFyIG5hbWVzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbmFtZXMnLCBbXSk7XG4gIHZhciBzb3VyY2VSb290ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB2YXIgc291cmNlc0NvbnRlbnQgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzQ29udGVudCcsIG51bGwpO1xuICB2YXIgbWFwcGluZ3MgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdtYXBwaW5ncycpO1xuICB2YXIgZmlsZSA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ2ZpbGUnLCBudWxsKTtcblxuICAvLyBPbmNlIGFnYWluLCBTYXNzIGRldmlhdGVzIGZyb20gdGhlIHNwZWMgYW5kIHN1cHBsaWVzIHRoZSB2ZXJzaW9uIGFzIGFcbiAgLy8gc3RyaW5nIHJhdGhlciB0aGFuIGEgbnVtYmVyLCBzbyB3ZSB1c2UgbG9vc2UgZXF1YWxpdHkgY2hlY2tpbmcgaGVyZS5cbiAgaWYgKHZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICB9XG5cbiAgaWYgKHNvdXJjZVJvb3QpIHtcbiAgICBzb3VyY2VSb290ID0gdXRpbC5ub3JtYWxpemUoc291cmNlUm9vdCk7XG4gIH1cblxuICBzb3VyY2VzID0gc291cmNlc1xuICAgIC5tYXAoU3RyaW5nKVxuICAgIC8vIFNvbWUgc291cmNlIG1hcHMgcHJvZHVjZSByZWxhdGl2ZSBzb3VyY2UgcGF0aHMgbGlrZSBcIi4vZm9vLmpzXCIgaW5zdGVhZCBvZlxuICAgIC8vIFwiZm9vLmpzXCIuICBOb3JtYWxpemUgdGhlc2UgZmlyc3Qgc28gdGhhdCBmdXR1cmUgY29tcGFyaXNvbnMgd2lsbCBzdWNjZWVkLlxuICAgIC8vIFNlZSBidWd6aWwubGEvMTA5MDc2OC5cbiAgICAubWFwKHV0aWwubm9ybWFsaXplKVxuICAgIC8vIEFsd2F5cyBlbnN1cmUgdGhhdCBhYnNvbHV0ZSBzb3VyY2VzIGFyZSBpbnRlcm5hbGx5IHN0b3JlZCByZWxhdGl2ZSB0b1xuICAgIC8vIHRoZSBzb3VyY2Ugcm9vdCwgaWYgdGhlIHNvdXJjZSByb290IGlzIGFic29sdXRlLiBOb3QgZG9pbmcgdGhpcyB3b3VsZFxuICAgIC8vIGJlIHBhcnRpY3VsYXJseSBwcm9ibGVtYXRpYyB3aGVuIHRoZSBzb3VyY2Ugcm9vdCBpcyBhIHByZWZpeCBvZiB0aGVcbiAgICAvLyBzb3VyY2UgKHZhbGlkLCBidXQgd2h5Pz8pLiBTZWUgZ2l0aHViIGlzc3VlICMxOTkgYW5kIGJ1Z3ppbC5sYS8xMTg4OTgyLlxuICAgIC5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIHNvdXJjZVJvb3QgJiYgdXRpbC5pc0Fic29sdXRlKHNvdXJjZVJvb3QpICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2UpXG4gICAgICAgID8gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBzb3VyY2UpXG4gICAgICAgIDogc291cmNlO1xuICAgIH0pO1xuXG4gIC8vIFBhc3MgYHRydWVgIGJlbG93IHRvIGFsbG93IGR1cGxpY2F0ZSBuYW1lcyBhbmQgc291cmNlcy4gV2hpbGUgc291cmNlIG1hcHNcbiAgLy8gYXJlIGludGVuZGVkIHRvIGJlIGNvbXByZXNzZWQgYW5kIGRlZHVwbGljYXRlZCwgdGhlIFR5cGVTY3JpcHQgY29tcGlsZXJcbiAgLy8gc29tZXRpbWVzIGdlbmVyYXRlcyBzb3VyY2UgbWFwcyB3aXRoIGR1cGxpY2F0ZXMgaW4gdGhlbS4gU2VlIEdpdGh1YiBpc3N1ZVxuICAvLyAjNzIgYW5kIGJ1Z3ppbC5sYS84ODk0OTIuXG4gIHRoaXMuX25hbWVzID0gQXJyYXlTZXQuZnJvbUFycmF5KG5hbWVzLm1hcChTdHJpbmcpLCB0cnVlKTtcbiAgdGhpcy5fc291cmNlcyA9IEFycmF5U2V0LmZyb21BcnJheShzb3VyY2VzLCB0cnVlKTtcblxuICB0aGlzLl9hYnNvbHV0ZVNvdXJjZXMgPSB0aGlzLl9zb3VyY2VzLnRvQXJyYXkoKS5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICByZXR1cm4gdXRpbC5jb21wdXRlU291cmNlVVJMKHNvdXJjZVJvb3QsIHMsIGFTb3VyY2VNYXBVUkwpO1xuICB9KTtcblxuICB0aGlzLnNvdXJjZVJvb3QgPSBzb3VyY2VSb290O1xuICB0aGlzLnNvdXJjZXNDb250ZW50ID0gc291cmNlc0NvbnRlbnQ7XG4gIHRoaXMuX21hcHBpbmdzID0gbWFwcGluZ3M7XG4gIHRoaXMuX3NvdXJjZU1hcFVSTCA9IGFTb3VyY2VNYXBVUkw7XG4gIHRoaXMuZmlsZSA9IGZpbGU7XG59XG5cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuY29uc3VtZXIgPSBTb3VyY2VNYXBDb25zdW1lcjtcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGluZGV4IG9mIGEgc291cmNlLiAgUmV0dXJucyAtMSBpZiBub3RcbiAqIGZvdW5kLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZFNvdXJjZUluZGV4ID0gZnVuY3Rpb24oYVNvdXJjZSkge1xuICB2YXIgcmVsYXRpdmVTb3VyY2UgPSBhU291cmNlO1xuICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICByZWxhdGl2ZVNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LCByZWxhdGl2ZVNvdXJjZSk7XG4gIH1cblxuICBpZiAodGhpcy5fc291cmNlcy5oYXMocmVsYXRpdmVTb3VyY2UpKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZXMuaW5kZXhPZihyZWxhdGl2ZVNvdXJjZSk7XG4gIH1cblxuICAvLyBNYXliZSBhU291cmNlIGlzIGFuIGFic29sdXRlIFVSTCBhcyByZXR1cm5lZCBieSB8c291cmNlc3wuICBJblxuICAvLyB0aGlzIGNhc2Ugd2UgY2FuJ3Qgc2ltcGx5IHVuZG8gdGhlIHRyYW5zZm9ybS5cbiAgdmFyIGk7XG4gIGZvciAoaSA9IDA7IGkgPCB0aGlzLl9hYnNvbHV0ZVNvdXJjZXMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAodGhpcy5fYWJzb2x1dGVTb3VyY2VzW2ldID09IGFTb3VyY2UpIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBmcm9tIGEgU291cmNlTWFwR2VuZXJhdG9yLlxuICpcbiAqIEBwYXJhbSBTb3VyY2VNYXBHZW5lcmF0b3IgYVNvdXJjZU1hcFxuICogICAgICAgIFRoZSBzb3VyY2UgbWFwIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbiAqIEBwYXJhbSBTdHJpbmcgYVNvdXJjZU1hcFVSTFxuICogICAgICAgIFRoZSBVUkwgYXQgd2hpY2ggdGhlIHNvdXJjZSBtYXAgY2FuIGJlIGZvdW5kIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEJhc2ljU291cmNlTWFwQ29uc3VtZXJcbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwLCBhU291cmNlTWFwVVJMKSB7XG4gICAgdmFyIHNtYyA9IE9iamVjdC5jcmVhdGUoQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuXG4gICAgdmFyIG5hbWVzID0gc21jLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9uYW1lcy50b0FycmF5KCksIHRydWUpO1xuICAgIHZhciBzb3VyY2VzID0gc21jLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX3NvdXJjZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICBzbWMuc291cmNlUm9vdCA9IGFTb3VyY2VNYXAuX3NvdXJjZVJvb3Q7XG4gICAgc21jLnNvdXJjZXNDb250ZW50ID0gYVNvdXJjZU1hcC5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChzbWMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21jLnNvdXJjZVJvb3QpO1xuICAgIHNtYy5maWxlID0gYVNvdXJjZU1hcC5fZmlsZTtcbiAgICBzbWMuX3NvdXJjZU1hcFVSTCA9IGFTb3VyY2VNYXBVUkw7XG4gICAgc21jLl9hYnNvbHV0ZVNvdXJjZXMgPSBzbWMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHV0aWwuY29tcHV0ZVNvdXJjZVVSTChzbWMuc291cmNlUm9vdCwgcywgYVNvdXJjZU1hcFVSTCk7XG4gICAgfSk7XG5cbiAgICAvLyBCZWNhdXNlIHdlIGFyZSBtb2RpZnlpbmcgdGhlIGVudHJpZXMgKGJ5IGNvbnZlcnRpbmcgc3RyaW5nIHNvdXJjZXMgYW5kXG4gICAgLy8gbmFtZXMgdG8gaW5kaWNlcyBpbnRvIHRoZSBzb3VyY2VzIGFuZCBuYW1lcyBBcnJheVNldHMpLCB3ZSBoYXZlIHRvIG1ha2VcbiAgICAvLyBhIGNvcHkgb2YgdGhlIGVudHJ5IG9yIGVsc2UgYmFkIHRoaW5ncyBoYXBwZW4uIFNoYXJlZCBtdXRhYmxlIHN0YXRlXG4gICAgLy8gc3RyaWtlcyBhZ2FpbiEgU2VlIGdpdGh1YiBpc3N1ZSAjMTkxLlxuXG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gYVNvdXJjZU1hcC5fbWFwcGluZ3MudG9BcnJheSgpLnNsaWNlKCk7XG4gICAgdmFyIGRlc3RHZW5lcmF0ZWRNYXBwaW5ncyA9IHNtYy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIGRlc3RPcmlnaW5hbE1hcHBpbmdzID0gc21jLl9fb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc3JjTWFwcGluZyA9IGdlbmVyYXRlZE1hcHBpbmdzW2ldO1xuICAgICAgdmFyIGRlc3RNYXBwaW5nID0gbmV3IE1hcHBpbmc7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gc3JjTWFwcGluZy5nZW5lcmF0ZWRMaW5lO1xuICAgICAgZGVzdE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uID0gc3JjTWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG5cbiAgICAgIGlmIChzcmNNYXBwaW5nLnNvdXJjZSkge1xuICAgICAgICBkZXN0TWFwcGluZy5zb3VyY2UgPSBzb3VyY2VzLmluZGV4T2Yoc3JjTWFwcGluZy5zb3VyY2UpO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbExpbmUgPSBzcmNNYXBwaW5nLm9yaWdpbmFsTGluZTtcbiAgICAgICAgZGVzdE1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPSBzcmNNYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIGlmIChzcmNNYXBwaW5nLm5hbWUpIHtcbiAgICAgICAgICBkZXN0TWFwcGluZy5uYW1lID0gbmFtZXMuaW5kZXhPZihzcmNNYXBwaW5nLm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVzdE9yaWdpbmFsTWFwcGluZ3MucHVzaChkZXN0TWFwcGluZyk7XG4gICAgICB9XG5cbiAgICAgIGRlc3RHZW5lcmF0ZWRNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICB9XG5cbiAgICBxdWlja1NvcnQoc21jLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG5cbiAgICByZXR1cm4gc21jO1xuICB9O1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vKipcbiAqIFRoZSBsaXN0IG9mIG9yaWdpbmFsIHNvdXJjZXMuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ3NvdXJjZXMnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9hYnNvbHV0ZVNvdXJjZXMuc2xpY2UoKTtcbiAgfVxufSk7XG5cbi8qKlxuICogUHJvdmlkZSB0aGUgSklUIHdpdGggYSBuaWNlIHNoYXBlIC8gaGlkZGVuIGNsYXNzLlxuICovXG5mdW5jdGlvbiBNYXBwaW5nKCkge1xuICB0aGlzLmdlbmVyYXRlZExpbmUgPSAwO1xuICB0aGlzLmdlbmVyYXRlZENvbHVtbiA9IDA7XG4gIHRoaXMuc291cmNlID0gbnVsbDtcbiAgdGhpcy5vcmlnaW5hbExpbmUgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsQ29sdW1uID0gbnVsbDtcbiAgdGhpcy5uYW1lID0gbnVsbDtcbn1cblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHZhciBnZW5lcmF0ZWRMaW5lID0gMTtcbiAgICB2YXIgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgIHZhciBwcmV2aW91c09yaWdpbmFsTGluZSA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gPSAwO1xuICAgIHZhciBwcmV2aW91c1NvdXJjZSA9IDA7XG4gICAgdmFyIHByZXZpb3VzTmFtZSA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGFTdHIubGVuZ3RoO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNhY2hlZFNlZ21lbnRzID0ge307XG4gICAgdmFyIHRlbXAgPSB7fTtcbiAgICB2YXIgb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuICAgIHZhciBnZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHZhciBtYXBwaW5nLCBzdHIsIHNlZ21lbnQsIGVuZCwgdmFsdWU7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChhU3RyLmNoYXJBdChpbmRleCkgPT09ICc7Jykge1xuICAgICAgICBnZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJywnKSB7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgbWFwcGluZyA9IG5ldyBNYXBwaW5nKCk7XG4gICAgICAgIG1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9IGdlbmVyYXRlZExpbmU7XG5cbiAgICAgICAgLy8gQmVjYXVzZSBlYWNoIG9mZnNldCBpcyBlbmNvZGVkIHJlbGF0aXZlIHRvIHRoZSBwcmV2aW91cyBvbmUsXG4gICAgICAgIC8vIG1hbnkgc2VnbWVudHMgb2Z0ZW4gaGF2ZSB0aGUgc2FtZSBlbmNvZGluZy4gV2UgY2FuIGV4cGxvaXQgdGhpc1xuICAgICAgICAvLyBmYWN0IGJ5IGNhY2hpbmcgdGhlIHBhcnNlZCB2YXJpYWJsZSBsZW5ndGggZmllbGRzIG9mIGVhY2ggc2VnbWVudCxcbiAgICAgICAgLy8gYWxsb3dpbmcgdXMgdG8gYXZvaWQgYSBzZWNvbmQgcGFyc2UgaWYgd2UgZW5jb3VudGVyIHRoZSBzYW1lXG4gICAgICAgIC8vIHNlZ21lbnQgYWdhaW4uXG4gICAgICAgIGZvciAoZW5kID0gaW5kZXg7IGVuZCA8IGxlbmd0aDsgZW5kKyspIHtcbiAgICAgICAgICBpZiAodGhpcy5fY2hhcklzTWFwcGluZ1NlcGFyYXRvcihhU3RyLCBlbmQpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RyID0gYVN0ci5zbGljZShpbmRleCwgZW5kKTtcblxuICAgICAgICBzZWdtZW50ID0gY2FjaGVkU2VnbWVudHNbc3RyXTtcbiAgICAgICAgaWYgKHNlZ21lbnQpIHtcbiAgICAgICAgICBpbmRleCArPSBzdHIubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlZ21lbnQgPSBbXTtcbiAgICAgICAgICB3aGlsZSAoaW5kZXggPCBlbmQpIHtcbiAgICAgICAgICAgIGJhc2U2NFZMUS5kZWNvZGUoYVN0ciwgaW5kZXgsIHRlbXApO1xuICAgICAgICAgICAgdmFsdWUgPSB0ZW1wLnZhbHVlO1xuICAgICAgICAgICAgaW5kZXggPSB0ZW1wLnJlc3Q7XG4gICAgICAgICAgICBzZWdtZW50LnB1c2godmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCBhIHNvdXJjZSwgYnV0IG5vIGxpbmUgYW5kIGNvbHVtbicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCBhIHNvdXJjZSBhbmQgbGluZSwgYnV0IG5vIGNvbHVtbicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhY2hlZFNlZ21lbnRzW3N0cl0gPSBzZWdtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2VuZXJhdGVkIGNvbHVtbi5cbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiArIHNlZ21lbnRbMF07XG4gICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG5cbiAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID4gMSkge1xuICAgICAgICAgIC8vIE9yaWdpbmFsIHNvdXJjZS5cbiAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IHByZXZpb3VzU291cmNlICsgc2VnbWVudFsxXTtcbiAgICAgICAgICBwcmV2aW91c1NvdXJjZSArPSBzZWdtZW50WzFdO1xuXG4gICAgICAgICAgLy8gT3JpZ2luYWwgbGluZS5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSA9IHByZXZpb3VzT3JpZ2luYWxMaW5lICsgc2VnbWVudFsyXTtcbiAgICAgICAgICBwcmV2aW91c09yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICAgIC8vIExpbmVzIGFyZSBzdG9yZWQgMC1iYXNlZFxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lICs9IDE7XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBjb2x1bW4uXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gKyBzZWdtZW50WzNdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID4gNCkge1xuICAgICAgICAgICAgLy8gT3JpZ2luYWwgbmFtZS5cbiAgICAgICAgICAgIG1hcHBpbmcubmFtZSA9IHByZXZpb3VzTmFtZSArIHNlZ21lbnRbNF07XG4gICAgICAgICAgICBwcmV2aW91c05hbWUgKz0gc2VnbWVudFs0XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnZW5lcmF0ZWRNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICBpZiAodHlwZW9mIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG9yaWdpbmFsTWFwcGluZ3MucHVzaChtYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydChnZW5lcmF0ZWRNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCk7XG4gICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gZ2VuZXJhdGVkTWFwcGluZ3M7XG5cbiAgICBxdWlja1NvcnQob3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MgPSBvcmlnaW5hbE1hcHBpbmdzO1xuICB9O1xuXG4vKipcbiAqIEZpbmQgdGhlIG1hcHBpbmcgdGhhdCBiZXN0IG1hdGNoZXMgdGhlIGh5cG90aGV0aWNhbCBcIm5lZWRsZVwiIG1hcHBpbmcgdGhhdFxuICogd2UgYXJlIHNlYXJjaGluZyBmb3IgaW4gdGhlIGdpdmVuIFwiaGF5c3RhY2tcIiBvZiBtYXBwaW5ncy5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZmluZE1hcHBpbmcoYU5lZWRsZSwgYU1hcHBpbmdzLCBhTGluZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb2x1bW5OYW1lLCBhQ29tcGFyYXRvciwgYUJpYXMpIHtcbiAgICAvLyBUbyByZXR1cm4gdGhlIHBvc2l0aW9uIHdlIGFyZSBzZWFyY2hpbmcgZm9yLCB3ZSBtdXN0IGZpcnN0IGZpbmQgdGhlXG4gICAgLy8gbWFwcGluZyBmb3IgdGhlIGdpdmVuIHBvc2l0aW9uIGFuZCB0aGVuIHJldHVybiB0aGUgb3Bwb3NpdGUgcG9zaXRpb24gaXRcbiAgICAvLyBwb2ludHMgdG8uIEJlY2F1c2UgdGhlIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHdlIGNhbiB1c2UgYmluYXJ5IHNlYXJjaCB0b1xuICAgIC8vIGZpbmQgdGhlIGJlc3QgbWFwcGluZy5cblxuICAgIGlmIChhTmVlZGxlW2FMaW5lTmFtZV0gPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTGluZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxLCBnb3QgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICArIGFOZWVkbGVbYUxpbmVOYW1lXSk7XG4gICAgfVxuICAgIGlmIChhTmVlZGxlW2FDb2x1bW5OYW1lXSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvbHVtbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwLCBnb3QgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICArIGFOZWVkbGVbYUNvbHVtbk5hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmluYXJ5U2VhcmNoLnNlYXJjaChhTmVlZGxlLCBhTWFwcGluZ3MsIGFDb21wYXJhdG9yLCBhQmlhcyk7XG4gIH07XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgbGFzdCBjb2x1bW4gZm9yIGVhY2ggZ2VuZXJhdGVkIG1hcHBpbmcuIFRoZSBsYXN0IGNvbHVtbiBpc1xuICogaW5jbHVzaXZlLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb21wdXRlQ29sdW1uU3BhbnMgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9jb21wdXRlQ29sdW1uU3BhbnMoKSB7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aDsgKytpbmRleCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIC8vIE1hcHBpbmdzIGRvIG5vdCBjb250YWluIGEgZmllbGQgZm9yIHRoZSBsYXN0IGdlbmVyYXRlZCBjb2x1bW50LiBXZVxuICAgICAgLy8gY2FuIGNvbWUgdXAgd2l0aCBhbiBvcHRpbWlzdGljIGVzdGltYXRlLCBob3dldmVyLCBieSBhc3N1bWluZyB0aGF0XG4gICAgICAvLyBtYXBwaW5ncyBhcmUgY29udGlndW91cyAoaS5lLiBnaXZlbiB0d28gY29uc2VjdXRpdmUgbWFwcGluZ3MsIHRoZVxuICAgICAgLy8gZmlyc3QgbWFwcGluZyBlbmRzIHdoZXJlIHRoZSBzZWNvbmQgb25lIHN0YXJ0cykuXG4gICAgICBpZiAoaW5kZXggKyAxIDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoKSB7XG4gICAgICAgIHZhciBuZXh0TWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4ICsgMV07XG5cbiAgICAgICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9PT0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgIG1hcHBpbmcubGFzdEdlbmVyYXRlZENvbHVtbiA9IG5leHRNYXBwaW5nLmdlbmVyYXRlZENvbHVtbiAtIDE7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGxhc3QgbWFwcGluZyBmb3IgZWFjaCBsaW5lIHNwYW5zIHRoZSBlbnRpcmUgbGluZS5cbiAgICAgIG1hcHBpbmcubGFzdEdlbmVyYXRlZENvbHVtbiA9IEluZmluaXR5O1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS4gIFRoZSBsaW5lIG51bWJlclxuICogICAgIGlzIDEtYmFzZWQuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS4gIFRoZSBjb2x1bW5cbiAqICAgICBudW1iZXIgaXMgMC1iYXNlZC5cbiAqICAgLSBiaWFzOiBFaXRoZXIgJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdTb3VyY2VNYXBDb25zdW1lci5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKiAgICAgRGVmYXVsdHMgdG8gJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSwgb3IgbnVsbC5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC4gIFRoZVxuICogICAgIGxpbmUgbnVtYmVyIGlzIDEtYmFzZWQuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLiAgVGhlXG4gKiAgICAgY29sdW1uIG51bWJlciBpcyAwLWJhc2VkLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLFxuICAgICAgXCJnZW5lcmF0ZWRMaW5lXCIsXG4gICAgICBcImdlbmVyYXRlZENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnc291cmNlJywgbnVsbCk7XG4gICAgICAgIGlmIChzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmF0KHNvdXJjZSk7XG4gICAgICAgICAgc291cmNlID0gdXRpbC5jb21wdXRlU291cmNlVVJMKHRoaXMuc291cmNlUm9vdCwgc291cmNlLCB0aGlzLl9zb3VyY2VNYXBVUkwpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBuYW1lID0gdXRpbC5nZXRBcmcobWFwcGluZywgJ25hbWUnLCBudWxsKTtcbiAgICAgICAgaWYgKG5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgICBuYW1lID0gdGhpcy5fbmFtZXMuYXQobmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnb3JpZ2luYWxMaW5lJywgbnVsbCksXG4gICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnb3JpZ2luYWxDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgIGxpbmU6IG51bGwsXG4gICAgICBjb2x1bW46IG51bGwsXG4gICAgICBuYW1lOiBudWxsXG4gICAgfTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBoYXZlIHRoZSBzb3VyY2UgY29udGVudCBmb3IgZXZlcnkgc291cmNlIGluIHRoZSBzb3VyY2VcbiAqIG1hcCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gIGZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXJfaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKSB7XG4gICAgaWYgKCF0aGlzLnNvdXJjZXNDb250ZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50Lmxlbmd0aCA+PSB0aGlzLl9zb3VyY2VzLnNpemUoKSAmJlxuICAgICAgIXRoaXMuc291cmNlc0NvbnRlbnQuc29tZShmdW5jdGlvbiAoc2MpIHsgcmV0dXJuIHNjID09IG51bGw7IH0pO1xuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50LiBUaGUgb25seSBhcmd1bWVudCBpcyB0aGUgdXJsIG9mIHRoZVxuICogb3JpZ2luYWwgc291cmNlIGZpbGUuIFJldHVybnMgbnVsbCBpZiBubyBvcmlnaW5hbCBzb3VyY2UgY29udGVudCBpc1xuICogYXZhaWxhYmxlLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfc291cmNlQ29udGVudEZvcihhU291cmNlLCBudWxsT25NaXNzaW5nKSB7XG4gICAgaWYgKCF0aGlzLnNvdXJjZXNDb250ZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kU291cmNlSW5kZXgoYVNvdXJjZSk7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W2luZGV4XTtcbiAgICB9XG5cbiAgICB2YXIgcmVsYXRpdmVTb3VyY2UgPSBhU291cmNlO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgcmVsYXRpdmVTb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgcmVsYXRpdmVTb3VyY2UpO1xuICAgIH1cblxuICAgIHZhciB1cmw7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsXG4gICAgICAgICYmICh1cmwgPSB1dGlsLnVybFBhcnNlKHRoaXMuc291cmNlUm9vdCkpKSB7XG4gICAgICAvLyBYWFg6IGZpbGU6Ly8gVVJJcyBhbmQgYWJzb2x1dGUgcGF0aHMgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGZvclxuICAgICAgLy8gbWFueSB1c2Vycy4gV2UgY2FuIGhlbHAgdGhlbSBvdXQgd2hlbiB0aGV5IGV4cGVjdCBmaWxlOi8vIFVSSXMgdG9cbiAgICAgIC8vIGJlaGF2ZSBsaWtlIGl0IHdvdWxkIGlmIHRoZXkgd2VyZSBydW5uaW5nIGEgbG9jYWwgSFRUUCBzZXJ2ZXIuIFNlZVxuICAgICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg1NTk3LlxuICAgICAgdmFyIGZpbGVVcmlBYnNQYXRoID0gcmVsYXRpdmVTb3VyY2UucmVwbGFjZSgvXmZpbGU6XFwvXFwvLywgXCJcIik7XG4gICAgICBpZiAodXJsLnNjaGVtZSA9PSBcImZpbGVcIlxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKGZpbGVVcmlBYnNQYXRoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoZmlsZVVyaUFic1BhdGgpXVxuICAgICAgfVxuXG4gICAgICBpZiAoKCF1cmwucGF0aCB8fCB1cmwucGF0aCA9PSBcIi9cIilcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhcIi9cIiArIHJlbGF0aXZlU291cmNlKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoXCIvXCIgKyByZWxhdGl2ZVNvdXJjZSldO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCByZWN1cnNpdmVseSBmcm9tXG4gICAgLy8gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yLiBJbiB0aGF0IGNhc2UsIHdlXG4gICAgLy8gZG9uJ3Qgd2FudCB0byB0aHJvdyBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBzb3VyY2UgLSB3ZSBqdXN0IHdhbnQgdG9cbiAgICAvLyByZXR1cm4gbnVsbCwgc28gd2UgcHJvdmlkZSBhIGZsYWcgdG8gZXhpdCBncmFjZWZ1bGx5LlxuICAgIGlmIChudWxsT25NaXNzaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIHJlbGF0aXZlU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuICBUaGUgbGluZSBudW1iZXJcbiAqICAgICBpcyAxLWJhc2VkLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS4gIFRoZSBjb2x1bW5cbiAqICAgICBudW1iZXIgaXMgMC1iYXNlZC5cbiAqICAgLSBiaWFzOiBFaXRoZXIgJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdTb3VyY2VNYXBDb25zdW1lci5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKiAgICAgRGVmYXVsdHMgdG8gJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuICBUaGVcbiAqICAgICBsaW5lIG51bWJlciBpcyAxLWJhc2VkLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgICAgVGhlIGNvbHVtbiBudW1iZXIgaXMgMC1iYXNlZC5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuZ2VuZXJhdGVkUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9nZW5lcmF0ZWRQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpO1xuICAgIHNvdXJjZSA9IHRoaXMuX2ZpbmRTb3VyY2VJbmRleChzb3VyY2UpO1xuICAgIGlmIChzb3VyY2UgPCAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgb3JpZ2luYWxMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgPT09IG5lZWRsZS5zb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG5leHBvcnRzLkJhc2ljU291cmNlTWFwQ29uc3VtZXIgPSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEFuIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2hcbiAqIHdlIGNhbiBxdWVyeSBmb3IgaW5mb3JtYXRpb24uIEl0IGRpZmZlcnMgZnJvbSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluXG4gKiB0aGF0IGl0IHRha2VzIFwiaW5kZXhlZFwiIHNvdXJjZSBtYXBzIChpLmUuIG9uZXMgd2l0aCBhIFwic2VjdGlvbnNcIiBmaWVsZCkgYXNcbiAqIGlucHV0LlxuICpcbiAqIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgYSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yIGFscmVhZHlcbiAqIHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMgZm9yIGluZGV4ZWQgc291cmNlIG1hcHMsIHRoZXlcbiAqIGhhdmUgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICpcbiAqICAgLSB2ZXJzaW9uOiBXaGljaCB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwIHNwZWMgdGhpcyBtYXAgaXMgZm9sbG93aW5nLlxuICogICAtIGZpbGU6IE9wdGlvbmFsLiBUaGUgZ2VuZXJhdGVkIGZpbGUgdGhpcyBzb3VyY2UgbWFwIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAqICAgLSBzZWN0aW9uczogQSBsaXN0IG9mIHNlY3Rpb24gZGVmaW5pdGlvbnMuXG4gKlxuICogRWFjaCB2YWx1ZSB1bmRlciB0aGUgXCJzZWN0aW9uc1wiIGZpZWxkIGhhcyB0d28gZmllbGRzOlxuICogICAtIG9mZnNldDogVGhlIG9mZnNldCBpbnRvIHRoZSBvcmlnaW5hbCBzcGVjaWZpZWQgYXQgd2hpY2ggdGhpcyBzZWN0aW9uXG4gKiAgICAgICBiZWdpbnMgdG8gYXBwbHksIGRlZmluZWQgYXMgYW4gb2JqZWN0IHdpdGggYSBcImxpbmVcIiBhbmQgXCJjb2x1bW5cIlxuICogICAgICAgZmllbGQuXG4gKiAgIC0gbWFwOiBBIHNvdXJjZSBtYXAgZGVmaW5pdGlvbi4gVGhpcyBzb3VyY2UgbWFwIGNvdWxkIGFsc28gYmUgaW5kZXhlZCxcbiAqICAgICAgIGJ1dCBkb2Vzbid0IGhhdmUgdG8gYmUuXG4gKlxuICogSW5zdGVhZCBvZiB0aGUgXCJtYXBcIiBmaWVsZCwgaXQncyBhbHNvIHBvc3NpYmxlIHRvIGhhdmUgYSBcInVybFwiIGZpZWxkXG4gKiBzcGVjaWZ5aW5nIGEgVVJMIHRvIHJldHJpZXZlIGEgc291cmNlIG1hcCBmcm9tLCBidXQgdGhhdCdzIGN1cnJlbnRseVxuICogdW5zdXBwb3J0ZWQuXG4gKlxuICogSGVyZSdzIGFuIGV4YW1wbGUgc291cmNlIG1hcCwgdGFrZW4gZnJvbSB0aGUgc291cmNlIG1hcCBzcGVjWzBdLCBidXRcbiAqIG1vZGlmaWVkIHRvIG9taXQgYSBzZWN0aW9uIHdoaWNoIHVzZXMgdGhlIFwidXJsXCIgZmllbGQuXG4gKlxuICogIHtcbiAqICAgIHZlcnNpb24gOiAzLFxuICogICAgZmlsZTogXCJhcHAuanNcIixcbiAqICAgIHNlY3Rpb25zOiBbe1xuICogICAgICBvZmZzZXQ6IHtsaW5lOjEwMCwgY29sdW1uOjEwfSxcbiAqICAgICAgbWFwOiB7XG4gKiAgICAgICAgdmVyc2lvbiA6IDMsXG4gKiAgICAgICAgZmlsZTogXCJzZWN0aW9uLmpzXCIsXG4gKiAgICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICogICAgICAgIG5hbWVzOiBbXCJzcmNcIiwgXCJtYXBzXCIsIFwiYXJlXCIsIFwiZnVuXCJdLFxuICogICAgICAgIG1hcHBpbmdzOiBcIkFBQUEsRTs7QUJDREU7XCJcbiAqICAgICAgfVxuICogICAgfV0sXG4gKiAgfVxuICpcbiAqIFRoZSBzZWNvbmQgcGFyYW1ldGVyLCBpZiBnaXZlbiwgaXMgYSBzdHJpbmcgd2hvc2UgdmFsdWUgaXMgdGhlIFVSTFxuICogYXQgd2hpY2ggdGhlIHNvdXJjZSBtYXAgd2FzIGZvdW5kLiAgVGhpcyBVUkwgaXMgdXNlZCB0byBjb21wdXRlIHRoZVxuICogc291cmNlcyBhcnJheS5cbiAqXG4gKiBbMF06IGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMVUxUkdBZWhRd1J5cFVUb3ZGMUtSbHBpT0Z6ZTBiLV8yZ2M2ZkFIMEtZMGsvZWRpdCNoZWFkaW5nPWguNTM1ZXMzeGVwcmd0XG4gKi9cbmZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcihhU291cmNlTWFwLCBhU291cmNlTWFwVVJMKSB7XG4gIHZhciBzb3VyY2VNYXAgPSBhU291cmNlTWFwO1xuICBpZiAodHlwZW9mIGFTb3VyY2VNYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgc291cmNlTWFwID0gdXRpbC5wYXJzZVNvdXJjZU1hcElucHV0KGFTb3VyY2VNYXApO1xuICB9XG5cbiAgdmFyIHZlcnNpb24gPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICd2ZXJzaW9uJyk7XG4gIHZhciBzZWN0aW9ucyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NlY3Rpb25zJyk7XG5cbiAgaWYgKHZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICB9XG5cbiAgdGhpcy5fc291cmNlcyA9IG5ldyBBcnJheVNldCgpO1xuICB0aGlzLl9uYW1lcyA9IG5ldyBBcnJheVNldCgpO1xuXG4gIHZhciBsYXN0T2Zmc2V0ID0ge1xuICAgIGxpbmU6IC0xLFxuICAgIGNvbHVtbjogMFxuICB9O1xuICB0aGlzLl9zZWN0aW9ucyA9IHNlY3Rpb25zLm1hcChmdW5jdGlvbiAocykge1xuICAgIGlmIChzLnVybCkge1xuICAgICAgLy8gVGhlIHVybCBmaWVsZCB3aWxsIHJlcXVpcmUgc3VwcG9ydCBmb3IgYXN5bmNocm9uaWNpdHkuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc291cmNlLW1hcC9pc3N1ZXMvMTZcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3VwcG9ydCBmb3IgdXJsIGZpZWxkIGluIHNlY3Rpb25zIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgICB9XG4gICAgdmFyIG9mZnNldCA9IHV0aWwuZ2V0QXJnKHMsICdvZmZzZXQnKTtcbiAgICB2YXIgb2Zmc2V0TGluZSA9IHV0aWwuZ2V0QXJnKG9mZnNldCwgJ2xpbmUnKTtcbiAgICB2YXIgb2Zmc2V0Q29sdW1uID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnY29sdW1uJyk7XG5cbiAgICBpZiAob2Zmc2V0TGluZSA8IGxhc3RPZmZzZXQubGluZSB8fFxuICAgICAgICAob2Zmc2V0TGluZSA9PT0gbGFzdE9mZnNldC5saW5lICYmIG9mZnNldENvbHVtbiA8IGxhc3RPZmZzZXQuY29sdW1uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZWN0aW9uIG9mZnNldHMgbXVzdCBiZSBvcmRlcmVkIGFuZCBub24tb3ZlcmxhcHBpbmcuJyk7XG4gICAgfVxuICAgIGxhc3RPZmZzZXQgPSBvZmZzZXQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ2VuZXJhdGVkT2Zmc2V0OiB7XG4gICAgICAgIC8vIFRoZSBvZmZzZXQgZmllbGRzIGFyZSAwLWJhc2VkLCBidXQgd2UgdXNlIDEtYmFzZWQgaW5kaWNlcyB3aGVuXG4gICAgICAgIC8vIGVuY29kaW5nL2RlY29kaW5nIGZyb20gVkxRLlxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBvZmZzZXRMaW5lICsgMSxcbiAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBvZmZzZXRDb2x1bW4gKyAxXG4gICAgICB9LFxuICAgICAgY29uc3VtZXI6IG5ldyBTb3VyY2VNYXBDb25zdW1lcih1dGlsLmdldEFyZyhzLCAnbWFwJyksIGFTb3VyY2VNYXBVUkwpXG4gICAgfVxuICB9KTtcbn1cblxuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTb3VyY2VNYXBDb25zdW1lcjtcblxuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcHBpbmcgc3BlYyB0aGF0IHdlIGFyZSBjb25zdW1pbmcuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vKipcbiAqIFRoZSBsaXN0IG9mIG9yaWdpbmFsIHNvdXJjZXMuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3NlY3Rpb25zW2ldLmNvbnN1bWVyLnNvdXJjZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgc291cmNlcy5wdXNoKHRoaXMuX3NlY3Rpb25zW2ldLmNvbnN1bWVyLnNvdXJjZXNbal0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc291cmNlcztcbiAgfVxufSk7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlLCBsaW5lLCBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgZ2VuZXJhdGVkXG4gKiBzb3VyY2UncyBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3RcbiAqIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuICBUaGUgbGluZSBudW1iZXJcbiAqICAgICBpcyAxLWJhc2VkLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuICBUaGUgY29sdW1uXG4gKiAgICAgbnVtYmVyIGlzIDAtYmFzZWQuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuICBUaGVcbiAqICAgICBsaW5lIG51bWJlciBpcyAxLWJhc2VkLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC4gIFRoZVxuICogICAgIGNvbHVtbiBudW1iZXIgaXMgMC1iYXNlZC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgLy8gRmluZCB0aGUgc2VjdGlvbiBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24gd2UncmUgdHJ5aW5nIHRvIG1hcFxuICAgIC8vIHRvIGFuIG9yaWdpbmFsIHBvc2l0aW9uLlxuICAgIHZhciBzZWN0aW9uSW5kZXggPSBiaW5hcnlTZWFyY2guc2VhcmNoKG5lZWRsZSwgdGhpcy5fc2VjdGlvbnMsXG4gICAgICBmdW5jdGlvbihuZWVkbGUsIHNlY3Rpb24pIHtcbiAgICAgICAgdmFyIGNtcCA9IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC0gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZTtcbiAgICAgICAgaWYgKGNtcCkge1xuICAgICAgICAgIHJldHVybiBjbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbik7XG4gICAgICB9KTtcbiAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW3NlY3Rpb25JbmRleF07XG5cbiAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBuYW1lOiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBzZWN0aW9uLmNvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgbGluZTogbmVlZGxlLmdlbmVyYXRlZExpbmUgLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgY29sdW1uOiBuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgIDogMCksXG4gICAgICBiaWFzOiBhQXJncy5iaWFzXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnMuZXZlcnkoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLmNvbnN1bWVyLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCk7XG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICB2YXIgY29udGVudCA9IHNlY3Rpb24uY29uc3VtZXIuc291cmNlQ29udGVudEZvcihhU291cmNlLCB0cnVlKTtcbiAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuICBUaGUgbGluZSBudW1iZXJcbiAqICAgICBpcyAxLWJhc2VkLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS4gIFRoZSBjb2x1bW5cbiAqICAgICBudW1iZXIgaXMgMC1iYXNlZC5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuICBUaGVcbiAqICAgICBsaW5lIG51bWJlciBpcyAxLWJhc2VkLiBcbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAgIFRoZSBjb2x1bW4gbnVtYmVyIGlzIDAtYmFzZWQuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuZ2VuZXJhdGVkUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICAvLyBPbmx5IGNvbnNpZGVyIHRoaXMgc2VjdGlvbiBpZiB0aGUgcmVxdWVzdGVkIHNvdXJjZSBpcyBpbiB0aGUgbGlzdCBvZlxuICAgICAgLy8gc291cmNlcyBvZiB0aGUgY29uc3VtZXIuXG4gICAgICBpZiAoc2VjdGlvbi5jb25zdW1lci5fZmluZFNvdXJjZUluZGV4KHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJykpID09PSAtMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBnZW5lcmF0ZWRQb3NpdGlvbiA9IHNlY3Rpb24uY29uc3VtZXIuZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpO1xuICAgICAgaWYgKGdlbmVyYXRlZFBvc2l0aW9uKSB7XG4gICAgICAgIHZhciByZXQgPSB7XG4gICAgICAgICAgbGluZTogZ2VuZXJhdGVkUG9zaXRpb24ubGluZSArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkUG9zaXRpb24uY29sdW1uICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lXG4gICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICAgOiAwKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcbiAgICAgIHZhciBzZWN0aW9uTWFwcGluZ3MgPSBzZWN0aW9uLmNvbnN1bWVyLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VjdGlvbk1hcHBpbmdzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gc2VjdGlvbk1hcHBpbmdzW2pdO1xuXG4gICAgICAgIHZhciBzb3VyY2UgPSBzZWN0aW9uLmNvbnN1bWVyLl9zb3VyY2VzLmF0KG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgc291cmNlID0gdXRpbC5jb21wdXRlU291cmNlVVJMKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCwgc291cmNlLCB0aGlzLl9zb3VyY2VNYXBVUkwpO1xuICAgICAgICB0aGlzLl9zb3VyY2VzLmFkZChzb3VyY2UpO1xuICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcblxuICAgICAgICB2YXIgbmFtZSA9IG51bGw7XG4gICAgICAgIGlmIChtYXBwaW5nLm5hbWUpIHtcbiAgICAgICAgICBuYW1lID0gc2VjdGlvbi5jb25zdW1lci5fbmFtZXMuYXQobWFwcGluZy5uYW1lKTtcbiAgICAgICAgICB0aGlzLl9uYW1lcy5hZGQobmFtZSk7XG4gICAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgbWFwcGluZ3MgY29taW5nIGZyb20gdGhlIGNvbnN1bWVyIGZvciB0aGUgc2VjdGlvbiBoYXZlXG4gICAgICAgIC8vIGdlbmVyYXRlZCBwb3NpdGlvbnMgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzZWN0aW9uLCBzbyB3ZVxuICAgICAgICAvLyBuZWVkIHRvIG9mZnNldCB0aGVtIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgY29uY2F0ZW5hdGVkXG4gICAgICAgIC8vIGdlbmVyYXRlZCBmaWxlLlxuICAgICAgICB2YXIgYWRqdXN0ZWRNYXBwaW5nID0ge1xuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgIGdlbmVyYXRlZExpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG1hcHBpbmcuZ2VuZXJhdGVkTGluZVxuICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICA6IDApLFxuICAgICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgb3JpZ2luYWxDb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW4sXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncy5wdXNoKGFkanVzdGVkTWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgYWRqdXN0ZWRNYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncy5wdXNoKGFkanVzdGVkTWFwcGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBxdWlja1NvcnQodGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICBxdWlja1NvcnQodGhpcy5fX29yaWdpbmFsTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpO1xuICB9O1xuXG5leHBvcnRzLkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciA9IEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcjtcbiIsICIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBTb3VyY2VNYXBHZW5lcmF0b3IgPSByZXF1aXJlKCcuL3NvdXJjZS1tYXAtZ2VuZXJhdG9yJykuU291cmNlTWFwR2VuZXJhdG9yO1xudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuLy8gTWF0Y2hlcyBhIFdpbmRvd3Mtc3R5bGUgYFxcclxcbmAgbmV3bGluZSBvciBhIGBcXG5gIG5ld2xpbmUgdXNlZCBieSBhbGwgb3RoZXJcbi8vIG9wZXJhdGluZyBzeXN0ZW1zIHRoZXNlIGRheXMgKGNhcHR1cmluZyB0aGUgcmVzdWx0KS5cbnZhciBSRUdFWF9ORVdMSU5FID0gLyhcXHI/XFxuKS87XG5cbi8vIE5ld2xpbmUgY2hhcmFjdGVyIGNvZGUgZm9yIGNoYXJDb2RlQXQoKSBjb21wYXJpc29uc1xudmFyIE5FV0xJTkVfQ09ERSA9IDEwO1xuXG4vLyBQcml2YXRlIHN5bWJvbCBmb3IgaWRlbnRpZnlpbmcgYFNvdXJjZU5vZGVgcyB3aGVuIG11bHRpcGxlIHZlcnNpb25zIG9mXG4vLyB0aGUgc291cmNlLW1hcCBsaWJyYXJ5IGFyZSBsb2FkZWQuIFRoaXMgTVVTVCBOT1QgQ0hBTkdFIGFjcm9zc1xuLy8gdmVyc2lvbnMhXG52YXIgaXNTb3VyY2VOb2RlID0gXCIkJCRpc1NvdXJjZU5vZGUkJCRcIjtcblxuLyoqXG4gKiBTb3VyY2VOb2RlcyBwcm92aWRlIGEgd2F5IHRvIGFic3RyYWN0IG92ZXIgaW50ZXJwb2xhdGluZy9jb25jYXRlbmF0aW5nXG4gKiBzbmlwcGV0cyBvZiBnZW5lcmF0ZWQgSmF2YVNjcmlwdCBzb3VyY2UgY29kZSB3aGlsZSBtYWludGFpbmluZyB0aGUgbGluZSBhbmRcbiAqIGNvbHVtbiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwYXJhbSBhTGluZSBUaGUgb3JpZ2luYWwgbGluZSBudW1iZXIuXG4gKiBAcGFyYW0gYUNvbHVtbiBUaGUgb3JpZ2luYWwgY29sdW1uIG51bWJlci5cbiAqIEBwYXJhbSBhU291cmNlIFRoZSBvcmlnaW5hbCBzb3VyY2UncyBmaWxlbmFtZS5cbiAqIEBwYXJhbSBhQ2h1bmtzIE9wdGlvbmFsLiBBbiBhcnJheSBvZiBzdHJpbmdzIHdoaWNoIGFyZSBzbmlwcGV0cyBvZlxuICogICAgICAgIGdlbmVyYXRlZCBKUywgb3Igb3RoZXIgU291cmNlTm9kZXMuXG4gKiBAcGFyYW0gYU5hbWUgVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIuXG4gKi9cbmZ1bmN0aW9uIFNvdXJjZU5vZGUoYUxpbmUsIGFDb2x1bW4sIGFTb3VyY2UsIGFDaHVua3MsIGFOYW1lKSB7XG4gIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgdGhpcy5zb3VyY2VDb250ZW50cyA9IHt9O1xuICB0aGlzLmxpbmUgPSBhTGluZSA9PSBudWxsID8gbnVsbCA6IGFMaW5lO1xuICB0aGlzLmNvbHVtbiA9IGFDb2x1bW4gPT0gbnVsbCA/IG51bGwgOiBhQ29sdW1uO1xuICB0aGlzLnNvdXJjZSA9IGFTb3VyY2UgPT0gbnVsbCA/IG51bGwgOiBhU291cmNlO1xuICB0aGlzLm5hbWUgPSBhTmFtZSA9PSBudWxsID8gbnVsbCA6IGFOYW1lO1xuICB0aGlzW2lzU291cmNlTm9kZV0gPSB0cnVlO1xuICBpZiAoYUNodW5rcyAhPSBudWxsKSB0aGlzLmFkZChhQ2h1bmtzKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgU291cmNlTm9kZSBmcm9tIGdlbmVyYXRlZCBjb2RlIGFuZCBhIFNvdXJjZU1hcENvbnN1bWVyLlxuICpcbiAqIEBwYXJhbSBhR2VuZXJhdGVkQ29kZSBUaGUgZ2VuZXJhdGVkIGNvZGVcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIFNvdXJjZU1hcCBmb3IgdGhlIGdlbmVyYXRlZCBjb2RlXG4gKiBAcGFyYW0gYVJlbGF0aXZlUGF0aCBPcHRpb25hbC4gVGhlIHBhdGggdGhhdCByZWxhdGl2ZSBzb3VyY2VzIGluIHRoZVxuICogICAgICAgIFNvdXJjZU1hcENvbnN1bWVyIHNob3VsZCBiZSByZWxhdGl2ZSB0by5cbiAqL1xuU291cmNlTm9kZS5mcm9tU3RyaW5nV2l0aFNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU5vZGVfZnJvbVN0cmluZ1dpdGhTb3VyY2VNYXAoYUdlbmVyYXRlZENvZGUsIGFTb3VyY2VNYXBDb25zdW1lciwgYVJlbGF0aXZlUGF0aCkge1xuICAgIC8vIFRoZSBTb3VyY2VOb2RlIHdlIHdhbnQgdG8gZmlsbCB3aXRoIHRoZSBnZW5lcmF0ZWQgY29kZVxuICAgIC8vIGFuZCB0aGUgU291cmNlTWFwXG4gICAgdmFyIG5vZGUgPSBuZXcgU291cmNlTm9kZSgpO1xuXG4gICAgLy8gQWxsIGV2ZW4gaW5kaWNlcyBvZiB0aGlzIGFycmF5IGFyZSBvbmUgbGluZSBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4gICAgLy8gd2hpbGUgYWxsIG9kZCBpbmRpY2VzIGFyZSB0aGUgbmV3bGluZXMgYmV0d2VlbiB0d28gYWRqYWNlbnQgbGluZXNcbiAgICAvLyAoc2luY2UgYFJFR0VYX05FV0xJTkVgIGNhcHR1cmVzIGl0cyBtYXRjaCkuXG4gICAgLy8gUHJvY2Vzc2VkIGZyYWdtZW50cyBhcmUgYWNjZXNzZWQgYnkgY2FsbGluZyBgc2hpZnROZXh0TGluZWAuXG4gICAgdmFyIHJlbWFpbmluZ0xpbmVzID0gYUdlbmVyYXRlZENvZGUuc3BsaXQoUkVHRVhfTkVXTElORSk7XG4gICAgdmFyIHJlbWFpbmluZ0xpbmVzSW5kZXggPSAwO1xuICAgIHZhciBzaGlmdE5leHRMaW5lID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGluZUNvbnRlbnRzID0gZ2V0TmV4dExpbmUoKTtcbiAgICAgIC8vIFRoZSBsYXN0IGxpbmUgb2YgYSBmaWxlIG1pZ2h0IG5vdCBoYXZlIGEgbmV3bGluZS5cbiAgICAgIHZhciBuZXdMaW5lID0gZ2V0TmV4dExpbmUoKSB8fCBcIlwiO1xuICAgICAgcmV0dXJuIGxpbmVDb250ZW50cyArIG5ld0xpbmU7XG5cbiAgICAgIGZ1bmN0aW9uIGdldE5leHRMaW5lKCkge1xuICAgICAgICByZXR1cm4gcmVtYWluaW5nTGluZXNJbmRleCA8IHJlbWFpbmluZ0xpbmVzLmxlbmd0aCA/XG4gICAgICAgICAgICByZW1haW5pbmdMaW5lc1tyZW1haW5pbmdMaW5lc0luZGV4KytdIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBXZSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBwb3NpdGlvbiBvZiBcInJlbWFpbmluZ0xpbmVzXCJcbiAgICB2YXIgbGFzdEdlbmVyYXRlZExpbmUgPSAxLCBsYXN0R2VuZXJhdGVkQ29sdW1uID0gMDtcblxuICAgIC8vIFRoZSBnZW5lcmF0ZSBTb3VyY2VOb2RlcyB3ZSBuZWVkIGEgY29kZSByYW5nZS5cbiAgICAvLyBUbyBleHRyYWN0IGl0IGN1cnJlbnQgYW5kIGxhc3QgbWFwcGluZyBpcyB1c2VkLlxuICAgIC8vIEhlcmUgd2Ugc3RvcmUgdGhlIGxhc3QgbWFwcGluZy5cbiAgICB2YXIgbGFzdE1hcHBpbmcgPSBudWxsO1xuXG4gICAgYVNvdXJjZU1hcENvbnN1bWVyLmVhY2hNYXBwaW5nKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICBpZiAobGFzdE1hcHBpbmcgIT09IG51bGwpIHtcbiAgICAgICAgLy8gV2UgYWRkIHRoZSBjb2RlIGZyb20gXCJsYXN0TWFwcGluZ1wiIHRvIFwibWFwcGluZ1wiOlxuICAgICAgICAvLyBGaXJzdCBjaGVjayBpZiB0aGVyZSBpcyBhIG5ldyBsaW5lIGluIGJldHdlZW4uXG4gICAgICAgIGlmIChsYXN0R2VuZXJhdGVkTGluZSA8IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgIC8vIEFzc29jaWF0ZSBmaXJzdCBsaW5lIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBzaGlmdE5leHRMaW5lKCkpO1xuICAgICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgICAgbGFzdEdlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICAgICAgLy8gVGhlIHJlbWFpbmluZyBjb2RlIGlzIGFkZGVkIHdpdGhvdXQgbWFwcGluZ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5ldyBsaW5lIGluIGJldHdlZW4uXG4gICAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSBjb2RlIGJldHdlZW4gXCJsYXN0R2VuZXJhdGVkQ29sdW1uXCIgYW5kXG4gICAgICAgICAgLy8gXCJtYXBwaW5nLmdlbmVyYXRlZENvbHVtblwiIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgdmFyIG5leHRMaW5lID0gcmVtYWluaW5nTGluZXNbcmVtYWluaW5nTGluZXNJbmRleF0gfHwgJyc7XG4gICAgICAgICAgdmFyIGNvZGUgPSBuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RHZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICAgIHJlbWFpbmluZ0xpbmVzW3JlbWFpbmluZ0xpbmVzSW5kZXhdID0gbmV4dExpbmUuc3Vic3RyKG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBjb2RlKTtcbiAgICAgICAgICAvLyBObyBtb3JlIHJlbWFpbmluZyBjb2RlLCBjb250aW51ZVxuICAgICAgICAgIGxhc3RNYXBwaW5nID0gbWFwcGluZztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFdlIGFkZCB0aGUgZ2VuZXJhdGVkIGNvZGUgdW50aWwgdGhlIGZpcnN0IG1hcHBpbmdcbiAgICAgIC8vIHRvIHRoZSBTb3VyY2VOb2RlIHdpdGhvdXQgYW55IG1hcHBpbmcuXG4gICAgICAvLyBFYWNoIGxpbmUgaXMgYWRkZWQgYXMgc2VwYXJhdGUgc3RyaW5nLlxuICAgICAgd2hpbGUgKGxhc3RHZW5lcmF0ZWRMaW5lIDwgbWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIG5vZGUuYWRkKHNoaWZ0TmV4dExpbmUoKSk7XG4gICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICB9XG4gICAgICBpZiAobGFzdEdlbmVyYXRlZENvbHVtbiA8IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uKSB7XG4gICAgICAgIHZhciBuZXh0TGluZSA9IHJlbWFpbmluZ0xpbmVzW3JlbWFpbmluZ0xpbmVzSW5kZXhdIHx8ICcnO1xuICAgICAgICBub2RlLmFkZChuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pKTtcbiAgICAgICAgcmVtYWluaW5nTGluZXNbcmVtYWluaW5nTGluZXNJbmRleF0gPSBuZXh0TGluZS5zdWJzdHIobWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICB9XG4gICAgICBsYXN0TWFwcGluZyA9IG1hcHBpbmc7XG4gICAgfSwgdGhpcyk7XG4gICAgLy8gV2UgaGF2ZSBwcm9jZXNzZWQgYWxsIG1hcHBpbmdzLlxuICAgIGlmIChyZW1haW5pbmdMaW5lc0luZGV4IDwgcmVtYWluaW5nTGluZXMubGVuZ3RoKSB7XG4gICAgICBpZiAobGFzdE1hcHBpbmcpIHtcbiAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSByZW1haW5pbmcgY29kZSBpbiB0aGUgY3VycmVudCBsaW5lIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgIGFkZE1hcHBpbmdXaXRoQ29kZShsYXN0TWFwcGluZywgc2hpZnROZXh0TGluZSgpKTtcbiAgICAgIH1cbiAgICAgIC8vIGFuZCBhZGQgdGhlIHJlbWFpbmluZyBsaW5lcyB3aXRob3V0IGFueSBtYXBwaW5nXG4gICAgICBub2RlLmFkZChyZW1haW5pbmdMaW5lcy5zcGxpY2UocmVtYWluaW5nTGluZXNJbmRleCkuam9pbihcIlwiKSk7XG4gICAgfVxuXG4gICAgLy8gQ29weSBzb3VyY2VzQ29udGVudCBpbnRvIFNvdXJjZU5vZGVcbiAgICBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2VGaWxlKSB7XG4gICAgICB2YXIgY29udGVudCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpO1xuICAgICAgaWYgKGNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoYVJlbGF0aXZlUGF0aCAhPSBudWxsKSB7XG4gICAgICAgICAgc291cmNlRmlsZSA9IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBzb3VyY2VGaWxlKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm9kZTtcblxuICAgIGZ1bmN0aW9uIGFkZE1hcHBpbmdXaXRoQ29kZShtYXBwaW5nLCBjb2RlKSB7XG4gICAgICBpZiAobWFwcGluZyA9PT0gbnVsbCB8fCBtYXBwaW5nLnNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGUuYWRkKGNvZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFSZWxhdGl2ZVBhdGhcbiAgICAgICAgICA/IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBtYXBwaW5nLnNvdXJjZSlcbiAgICAgICAgICA6IG1hcHBpbmcuc291cmNlO1xuICAgICAgICBub2RlLmFkZChuZXcgU291cmNlTm9kZShtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbi8qKlxuICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoaXMgc291cmNlIG5vZGUuXG4gKlxuICogQHBhcmFtIGFDaHVuayBBIHN0cmluZyBzbmlwcGV0IG9mIGdlbmVyYXRlZCBKUyBjb2RlLCBhbm90aGVyIGluc3RhbmNlIG9mXG4gKiAgICAgICAgU291cmNlTm9kZSwgb3IgYW4gYXJyYXkgd2hlcmUgZWFjaCBtZW1iZXIgaXMgb25lIG9mIHRob3NlIHRoaW5ncy5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gU291cmNlTm9kZV9hZGQoYUNodW5rKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFDaHVuaykpIHtcbiAgICBhQ2h1bmsuZm9yRWFjaChmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgIHRoaXMuYWRkKGNodW5rKTtcbiAgICB9LCB0aGlzKTtcbiAgfVxuICBlbHNlIGlmIChhQ2h1bmtbaXNTb3VyY2VOb2RlXSB8fCB0eXBlb2YgYUNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgaWYgKGFDaHVuaykge1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGFDaHVuayk7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBcIkV4cGVjdGVkIGEgU291cmNlTm9kZSwgc3RyaW5nLCBvciBhbiBhcnJheSBvZiBTb3VyY2VOb2RlcyBhbmQgc3RyaW5ncy4gR290IFwiICsgYUNodW5rXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBzb3VyY2Ugbm9kZS5cbiAqXG4gKiBAcGFyYW0gYUNodW5rIEEgc3RyaW5nIHNuaXBwZXQgb2YgZ2VuZXJhdGVkIEpTIGNvZGUsIGFub3RoZXIgaW5zdGFuY2Ugb2ZcbiAqICAgICAgICBTb3VyY2VOb2RlLCBvciBhbiBhcnJheSB3aGVyZSBlYWNoIG1lbWJlciBpcyBvbmUgb2YgdGhvc2UgdGhpbmdzLlxuICovXG5Tb3VyY2VOb2RlLnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24gU291cmNlTm9kZV9wcmVwZW5kKGFDaHVuaykge1xuICBpZiAoQXJyYXkuaXNBcnJheShhQ2h1bmspKSB7XG4gICAgZm9yICh2YXIgaSA9IGFDaHVuay5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMucHJlcGVuZChhQ2h1bmtbaV0pO1xuICAgIH1cbiAgfVxuICBlbHNlIGlmIChhQ2h1bmtbaXNTb3VyY2VOb2RlXSB8fCB0eXBlb2YgYUNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgdGhpcy5jaGlsZHJlbi51bnNoaWZ0KGFDaHVuayk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIFwiRXhwZWN0ZWQgYSBTb3VyY2VOb2RlLCBzdHJpbmcsIG9yIGFuIGFycmF5IG9mIFNvdXJjZU5vZGVzIGFuZCBzdHJpbmdzLiBHb3QgXCIgKyBhQ2h1bmtcbiAgICApO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXYWxrIG92ZXIgdGhlIHRyZWUgb2YgSlMgc25pcHBldHMgaW4gdGhpcyBub2RlIGFuZCBpdHMgY2hpbGRyZW4uIFRoZVxuICogd2Fsa2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBzbmlwcGV0IG9mIEpTIGFuZCBpcyBwYXNzZWQgdGhhdFxuICogc25pcHBldCBhbmQgdGhlIGl0cyBvcmlnaW5hbCBhc3NvY2lhdGVkIHNvdXJjZSdzIGxpbmUvY29sdW1uIGxvY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUud2FsayA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfd2FsayhhRm4pIHtcbiAgdmFyIGNodW5rO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGNodW5rID0gdGhpcy5jaGlsZHJlbltpXTtcbiAgICBpZiAoY2h1bmtbaXNTb3VyY2VOb2RlXSkge1xuICAgICAgY2h1bmsud2FsayhhRm4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChjaHVuayAhPT0gJycpIHtcbiAgICAgICAgYUZuKGNodW5rLCB7IHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBMaWtlIGBTdHJpbmcucHJvdG90eXBlLmpvaW5gIGV4Y2VwdCBmb3IgU291cmNlTm9kZXMuIEluc2VydHMgYGFTdHJgIGJldHdlZW5cbiAqIGVhY2ggb2YgYHRoaXMuY2hpbGRyZW5gLlxuICpcbiAqIEBwYXJhbSBhU2VwIFRoZSBzZXBhcmF0b3IuXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLmpvaW4gPSBmdW5jdGlvbiBTb3VyY2VOb2RlX2pvaW4oYVNlcCkge1xuICB2YXIgbmV3Q2hpbGRyZW47XG4gIHZhciBpO1xuICB2YXIgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gIGlmIChsZW4gPiAwKSB7XG4gICAgbmV3Q2hpbGRyZW4gPSBbXTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuLTE7IGkrKykge1xuICAgICAgbmV3Q2hpbGRyZW4ucHVzaCh0aGlzLmNoaWxkcmVuW2ldKTtcbiAgICAgIG5ld0NoaWxkcmVuLnB1c2goYVNlcCk7XG4gICAgfVxuICAgIG5ld0NoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlbltpXSk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IG5ld0NoaWxkcmVuO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSBvbiB0aGUgdmVyeSByaWdodC1tb3N0IHNvdXJjZSBzbmlwcGV0LiBVc2VmdWxcbiAqIGZvciB0cmltbWluZyB3aGl0ZXNwYWNlIGZyb20gdGhlIGVuZCBvZiBhIHNvdXJjZSBub2RlLCBldGMuXG4gKlxuICogQHBhcmFtIGFQYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIHJlcGxhY2UuXG4gKiBAcGFyYW0gYVJlcGxhY2VtZW50IFRoZSB0aGluZyB0byByZXBsYWNlIHRoZSBwYXR0ZXJuIHdpdGguXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLnJlcGxhY2VSaWdodCA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfcmVwbGFjZVJpZ2h0KGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpIHtcbiAgdmFyIGxhc3RDaGlsZCA9IHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgaWYgKGxhc3RDaGlsZFtpc1NvdXJjZU5vZGVdKSB7XG4gICAgbGFzdENoaWxkLnJlcGxhY2VSaWdodChhUGF0dGVybiwgYVJlcGxhY2VtZW50KTtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2YgbGFzdENoaWxkID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXSA9IGxhc3RDaGlsZC5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpO1xuICB9XG4gIGVsc2Uge1xuICAgIHRoaXMuY2hpbGRyZW4ucHVzaCgnJy5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBzb3VyY2UgZmlsZS4gVGhpcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBTb3VyY2VNYXBHZW5lcmF0b3JcbiAqIGluIHRoZSBzb3VyY2VzQ29udGVudCBmaWVsZC5cbiAqXG4gKiBAcGFyYW0gYVNvdXJjZUZpbGUgVGhlIGZpbGVuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZVxuICogQHBhcmFtIGFTb3VyY2VDb250ZW50IFRoZSBjb250ZW50IG9mIHRoZSBzb3VyY2UgZmlsZVxuICovXG5Tb3VyY2VOb2RlLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50ID1cbiAgZnVuY3Rpb24gU291cmNlTm9kZV9zZXRTb3VyY2VDb250ZW50KGFTb3VyY2VGaWxlLCBhU291cmNlQ29udGVudCkge1xuICAgIHRoaXMuc291cmNlQ29udGVudHNbdXRpbC50b1NldFN0cmluZyhhU291cmNlRmlsZSldID0gYVNvdXJjZUNvbnRlbnQ7XG4gIH07XG5cbi8qKlxuICogV2FsayBvdmVyIHRoZSB0cmVlIG9mIFNvdXJjZU5vZGVzLiBUaGUgd2Fsa2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGVhY2hcbiAqIHNvdXJjZSBmaWxlIGNvbnRlbnQgYW5kIGlzIHBhc3NlZCB0aGUgZmlsZW5hbWUgYW5kIHNvdXJjZSBjb250ZW50LlxuICpcbiAqIEBwYXJhbSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUud2Fsa1NvdXJjZUNvbnRlbnRzID1cbiAgZnVuY3Rpb24gU291cmNlTm9kZV93YWxrU291cmNlQ29udGVudHMoYUZuKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldW2lzU291cmNlTm9kZV0pIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS53YWxrU291cmNlQ29udGVudHMoYUZuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc291cmNlcyA9IE9iamVjdC5rZXlzKHRoaXMuc291cmNlQ29udGVudHMpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzb3VyY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhRm4odXRpbC5mcm9tU2V0U3RyaW5nKHNvdXJjZXNbaV0pLCB0aGlzLnNvdXJjZUNvbnRlbnRzW3NvdXJjZXNbaV1dKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzb3VyY2Ugbm9kZS4gV2Fsa3Mgb3ZlciB0aGUgdHJlZVxuICogYW5kIGNvbmNhdGVuYXRlcyBhbGwgdGhlIHZhcmlvdXMgc25pcHBldHMgdG9nZXRoZXIgdG8gb25lIHN0cmluZy5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiBTb3VyY2VOb2RlX3RvU3RyaW5nKCkge1xuICB2YXIgc3RyID0gXCJcIjtcbiAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaykge1xuICAgIHN0ciArPSBjaHVuaztcbiAgfSk7XG4gIHJldHVybiBzdHI7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNvdXJjZSBub2RlIGFsb25nIHdpdGggYSBzb3VyY2VcbiAqIG1hcC5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmdXaXRoU291cmNlTWFwID0gZnVuY3Rpb24gU291cmNlTm9kZV90b1N0cmluZ1dpdGhTb3VyY2VNYXAoYUFyZ3MpIHtcbiAgdmFyIGdlbmVyYXRlZCA9IHtcbiAgICBjb2RlOiBcIlwiLFxuICAgIGxpbmU6IDEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHZhciBtYXAgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKGFBcmdzKTtcbiAgdmFyIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgdmFyIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gIHZhciBsYXN0T3JpZ2luYWxMaW5lID0gbnVsbDtcbiAgdmFyIGxhc3RPcmlnaW5hbENvbHVtbiA9IG51bGw7XG4gIHZhciBsYXN0T3JpZ2luYWxOYW1lID0gbnVsbDtcbiAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaywgb3JpZ2luYWwpIHtcbiAgICBnZW5lcmF0ZWQuY29kZSArPSBjaHVuaztcbiAgICBpZiAob3JpZ2luYWwuc291cmNlICE9PSBudWxsXG4gICAgICAgICYmIG9yaWdpbmFsLmxpbmUgIT09IG51bGxcbiAgICAgICAgJiYgb3JpZ2luYWwuY29sdW1uICE9PSBudWxsKSB7XG4gICAgICBpZihsYXN0T3JpZ2luYWxTb3VyY2UgIT09IG9yaWdpbmFsLnNvdXJjZVxuICAgICAgICAgfHwgbGFzdE9yaWdpbmFsTGluZSAhPT0gb3JpZ2luYWwubGluZVxuICAgICAgICAgfHwgbGFzdE9yaWdpbmFsQ29sdW1uICE9PSBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgIHx8IGxhc3RPcmlnaW5hbE5hbWUgIT09IG9yaWdpbmFsLm5hbWUpIHtcbiAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgIHNvdXJjZTogb3JpZ2luYWwuc291cmNlLFxuICAgICAgICAgIG9yaWdpbmFsOiB7XG4gICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgY29sdW1uOiBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgbGluZTogZ2VuZXJhdGVkLmxpbmUsXG4gICAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZC5jb2x1bW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIG5hbWU6IG9yaWdpbmFsLm5hbWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBvcmlnaW5hbC5zb3VyY2U7XG4gICAgICBsYXN0T3JpZ2luYWxMaW5lID0gb3JpZ2luYWwubGluZTtcbiAgICAgIGxhc3RPcmlnaW5hbENvbHVtbiA9IG9yaWdpbmFsLmNvbHVtbjtcbiAgICAgIGxhc3RPcmlnaW5hbE5hbWUgPSBvcmlnaW5hbC5uYW1lO1xuICAgICAgc291cmNlTWFwcGluZ0FjdGl2ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICBtYXAuYWRkTWFwcGluZyh7XG4gICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgIGxpbmU6IGdlbmVyYXRlZC5saW5lLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkLmNvbHVtblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gICAgICBzb3VyY2VNYXBwaW5nQWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGlkeCA9IDAsIGxlbmd0aCA9IGNodW5rLmxlbmd0aDsgaWR4IDwgbGVuZ3RoOyBpZHgrKykge1xuICAgICAgaWYgKGNodW5rLmNoYXJDb2RlQXQoaWR4KSA9PT0gTkVXTElORV9DT0RFKSB7XG4gICAgICAgIGdlbmVyYXRlZC5saW5lKys7XG4gICAgICAgIGdlbmVyYXRlZC5jb2x1bW4gPSAwO1xuICAgICAgICAvLyBNYXBwaW5ncyBlbmQgYXQgZW9sXG4gICAgICAgIGlmIChpZHggKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBudWxsO1xuICAgICAgICAgIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgICAgc291cmNlOiBvcmlnaW5hbC5zb3VyY2UsXG4gICAgICAgICAgICBvcmlnaW5hbDoge1xuICAgICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgICBjb2x1bW46IG9yaWdpbmFsLmNvbHVtblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWQuY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZTogb3JpZ2luYWwubmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZW5lcmF0ZWQuY29sdW1uKys7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdGhpcy53YWxrU291cmNlQ29udGVudHMoZnVuY3Rpb24gKHNvdXJjZUZpbGUsIHNvdXJjZUNvbnRlbnQpIHtcbiAgICBtYXAuc2V0U291cmNlQ29udGVudChzb3VyY2VGaWxlLCBzb3VyY2VDb250ZW50KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgY29kZTogZ2VuZXJhdGVkLmNvZGUsIG1hcDogbWFwIH07XG59O1xuXG5leHBvcnRzLlNvdXJjZU5vZGUgPSBTb3VyY2VOb2RlO1xuIiwgIi8qXG4gKiBDb3B5cmlnaHQgMjAwOS0yMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRS50eHQgb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cbmV4cG9ydHMuU291cmNlTWFwR2VuZXJhdG9yID0gcmVxdWlyZSgnLi9saWIvc291cmNlLW1hcC1nZW5lcmF0b3InKS5Tb3VyY2VNYXBHZW5lcmF0b3I7XG5leHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gcmVxdWlyZSgnLi9saWIvc291cmNlLW1hcC1jb25zdW1lcicpLlNvdXJjZU1hcENvbnN1bWVyO1xuZXhwb3J0cy5Tb3VyY2VOb2RlID0gcmVxdWlyZSgnLi9saWIvc291cmNlLW5vZGUnKS5Tb3VyY2VOb2RlO1xuIiwgIi8qIGVzbGludC1kaXNhYmxlIG5vZGUvbm8tZGVwcmVjYXRlZC1hcGkgKi9cblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ1xuXG52YXIgaXNNb2Rlcm4gPSAoXG4gIHR5cGVvZiBCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gIHR5cGVvZiBCdWZmZXIuYWxsb2MgPT09ICdmdW5jdGlvbicgJiZcbiAgdHlwZW9mIEJ1ZmZlci5hbGxvY1Vuc2FmZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICB0eXBlb2YgQnVmZmVyLmZyb20gPT09ICdmdW5jdGlvbidcbilcblxuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlciAoaW5wdXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaW5wdXQpLnNsaWNlKDgsIC0xKSA9PT0gJ0FycmF5QnVmZmVyJ1xufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKG9iaiwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIGJ5dGVPZmZzZXQgPj4+PSAwXG5cbiAgdmFyIG1heExlbmd0aCA9IG9iai5ieXRlTGVuZ3RoIC0gYnl0ZU9mZnNldFxuXG4gIGlmIChtYXhMZW5ndGggPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzXCIpXG4gIH1cblxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSBtYXhMZW5ndGhcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPj4+PSAwXG5cbiAgICBpZiAobGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHNcIilcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXNNb2Rlcm5cbiAgICA/IEJ1ZmZlci5mcm9tKG9iai5zbGljZShieXRlT2Zmc2V0LCBieXRlT2Zmc2V0ICsgbGVuZ3RoKSlcbiAgICA6IG5ldyBCdWZmZXIobmV3IFVpbnQ4QXJyYXkob2JqLnNsaWNlKGJ5dGVPZmZzZXQsIGJ5dGVPZmZzZXQgKyBsZW5ndGgpKSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImVuY29kaW5nXCIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpXG4gIH1cblxuICByZXR1cm4gaXNNb2Rlcm5cbiAgICA/IEJ1ZmZlci5mcm9tKHN0cmluZywgZW5jb2RpbmcpXG4gICAgOiBuZXcgQnVmZmVyKHN0cmluZywgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGJ1ZmZlckZyb20gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKVxuICB9XG5cbiAgaWYgKGlzQXJyYXlCdWZmZXIodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIHJldHVybiBpc01vZGVyblxuICAgID8gQnVmZmVyLmZyb20odmFsdWUpXG4gICAgOiBuZXcgQnVmZmVyKHZhbHVlKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1ZmZlckZyb21cbiIsICJ2YXIgU291cmNlTWFwQ29uc3VtZXIgPSByZXF1aXJlKCdzb3VyY2UtbWFwJykuU291cmNlTWFwQ29uc3VtZXI7XG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblxudmFyIGZzO1xudHJ5IHtcbiAgZnMgPSByZXF1aXJlKCdmcycpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMgfHwgIWZzLnJlYWRGaWxlU3luYykge1xuICAgIC8vIGZzIGRvZXNuJ3QgaGF2ZSBhbGwgbWV0aG9kcyB3ZSBuZWVkXG4gICAgZnMgPSBudWxsO1xuICB9XG59IGNhdGNoIChlcnIpIHtcbiAgLyogbm9wICovXG59XG5cbnZhciBidWZmZXJGcm9tID0gcmVxdWlyZSgnYnVmZmVyLWZyb20nKTtcblxuLyoqXG4gKiBSZXF1aXJlcyBhIG1vZHVsZSB3aGljaCBpcyBwcm90ZWN0ZWQgYWdhaW5zdCBidW5kbGVyIG1pbmlmaWNhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge05vZGVNb2R1bGV9IG1vZFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RcbiAqL1xuZnVuY3Rpb24gZHluYW1pY1JlcXVpcmUobW9kLCByZXF1ZXN0KSB7XG4gIHJldHVybiBtb2QucmVxdWlyZShyZXF1ZXN0KTtcbn1cblxuLy8gT25seSBpbnN0YWxsIG9uY2UgaWYgY2FsbGVkIG11bHRpcGxlIHRpbWVzXG52YXIgZXJyb3JGb3JtYXR0ZXJJbnN0YWxsZWQgPSBmYWxzZTtcbnZhciB1bmNhdWdodFNoaW1JbnN0YWxsZWQgPSBmYWxzZTtcblxuLy8gSWYgdHJ1ZSwgdGhlIGNhY2hlcyBhcmUgcmVzZXQgYmVmb3JlIGEgc3RhY2sgdHJhY2UgZm9ybWF0dGluZyBvcGVyYXRpb25cbnZhciBlbXB0eUNhY2hlQmV0d2Vlbk9wZXJhdGlvbnMgPSBmYWxzZTtcblxuLy8gU3VwcG9ydHMge2Jyb3dzZXIsIG5vZGUsIGF1dG99XG52YXIgZW52aXJvbm1lbnQgPSBcImF1dG9cIjtcblxuLy8gTWFwcyBhIGZpbGUgcGF0aCB0byBhIHN0cmluZyBjb250YWluaW5nIHRoZSBmaWxlIGNvbnRlbnRzXG52YXIgZmlsZUNvbnRlbnRzQ2FjaGUgPSB7fTtcblxuLy8gTWFwcyBhIGZpbGUgcGF0aCB0byBhIHNvdXJjZSBtYXAgZm9yIHRoYXQgZmlsZVxudmFyIHNvdXJjZU1hcENhY2hlID0ge307XG5cbi8vIFJlZ2V4IGZvciBkZXRlY3Rpbmcgc291cmNlIG1hcHNcbnZhciByZVNvdXJjZU1hcCA9IC9eZGF0YTphcHBsaWNhdGlvblxcL2pzb25bXixdK2Jhc2U2NCwvO1xuXG4vLyBQcmlvcml0eSBsaXN0IG9mIHJldHJpZXZlIGhhbmRsZXJzXG52YXIgcmV0cmlldmVGaWxlSGFuZGxlcnMgPSBbXTtcbnZhciByZXRyaWV2ZU1hcEhhbmRsZXJzID0gW107XG5cbmZ1bmN0aW9uIGlzSW5Ccm93c2VyKCkge1xuICBpZiAoZW52aXJvbm1lbnQgPT09IFwiYnJvd3NlclwiKVxuICAgIHJldHVybiB0cnVlO1xuICBpZiAoZW52aXJvbm1lbnQgPT09IFwibm9kZVwiKVxuICAgIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuICgodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpICYmICh0eXBlb2YgWE1MSHR0cFJlcXVlc3QgPT09ICdmdW5jdGlvbicpICYmICEod2luZG93LnJlcXVpcmUgJiYgd2luZG93Lm1vZHVsZSAmJiB3aW5kb3cucHJvY2VzcyAmJiB3aW5kb3cucHJvY2Vzcy50eXBlID09PSBcInJlbmRlcmVyXCIpKTtcbn1cblxuZnVuY3Rpb24gaGFzR2xvYmFsUHJvY2Vzc0V2ZW50RW1pdHRlcigpIHtcbiAgcmV0dXJuICgodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnKSAmJiAocHJvY2VzcyAhPT0gbnVsbCkgJiYgKHR5cGVvZiBwcm9jZXNzLm9uID09PSAnZnVuY3Rpb24nKSk7XG59XG5cbmZ1bmN0aW9uIGdsb2JhbFByb2Nlc3NWZXJzaW9uKCkge1xuICBpZiAoKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JykgJiYgKHByb2Nlc3MgIT09IG51bGwpKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MudmVyc2lvbjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2xvYmFsUHJvY2Vzc1N0ZGVycigpIHtcbiAgaWYgKCh0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcpICYmIChwcm9jZXNzICE9PSBudWxsKSkge1xuICAgIHJldHVybiBwcm9jZXNzLnN0ZGVycjtcbiAgfVxufVxuXG5mdW5jdGlvbiBnbG9iYWxQcm9jZXNzRXhpdChjb2RlKSB7XG4gIGlmICgodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnKSAmJiAocHJvY2VzcyAhPT0gbnVsbCkgJiYgKHR5cGVvZiBwcm9jZXNzLmV4aXQgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZXhpdChjb2RlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVyRXhlYyhsaXN0KSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByZXQgPSBsaXN0W2ldKGFyZyk7XG4gICAgICBpZiAocmV0KSB7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xufVxuXG52YXIgcmV0cmlldmVGaWxlID0gaGFuZGxlckV4ZWMocmV0cmlldmVGaWxlSGFuZGxlcnMpO1xuXG5yZXRyaWV2ZUZpbGVIYW5kbGVycy5wdXNoKGZ1bmN0aW9uKHBhdGgpIHtcbiAgLy8gVHJpbSB0aGUgcGF0aCB0byBtYWtlIHN1cmUgdGhlcmUgaXMgbm8gZXh0cmEgd2hpdGVzcGFjZS5cbiAgcGF0aCA9IHBhdGgudHJpbSgpO1xuICBpZiAoL15maWxlOi8udGVzdChwYXRoKSkge1xuICAgIC8vIGV4aXN0c1N5bmMvcmVhZEZpbGVTeW5jIGNhbid0IGhhbmRsZSBmaWxlIHByb3RvY29sLCBidXQgb25jZSBzdHJpcHBlZCwgaXQgd29ya3NcbiAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9maWxlOlxcL1xcL1xcLyhcXHc6KT8vLCBmdW5jdGlvbihwcm90b2NvbCwgZHJpdmUpIHtcbiAgICAgIHJldHVybiBkcml2ZSA/XG4gICAgICAgICcnIDogLy8gZmlsZTovLy9DOi9kaXIvZmlsZSAtPiBDOi9kaXIvZmlsZVxuICAgICAgICAnLyc7IC8vIGZpbGU6Ly8vcm9vdC1kaXIvZmlsZSAtPiAvcm9vdC1kaXIvZmlsZVxuICAgIH0pO1xuICB9XG4gIGlmIChwYXRoIGluIGZpbGVDb250ZW50c0NhY2hlKSB7XG4gICAgcmV0dXJuIGZpbGVDb250ZW50c0NhY2hlW3BhdGhdO1xuICB9XG5cbiAgdmFyIGNvbnRlbnRzID0gJyc7XG4gIHRyeSB7XG4gICAgaWYgKCFmcykge1xuICAgICAgLy8gVXNlIFNKQVggaWYgd2UgYXJlIGluIHRoZSBicm93c2VyXG4gICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICB4aHIub3BlbignR0VUJywgcGF0aCwgLyoqIGFzeW5jICovIGZhbHNlKTtcbiAgICAgIHhoci5zZW5kKG51bGwpO1xuICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0ICYmIHhoci5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICBjb250ZW50cyA9IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmcy5leGlzdHNTeW5jKHBhdGgpKSB7XG4gICAgICAvLyBPdGhlcndpc2UsIHVzZSB0aGUgZmlsZXN5c3RlbVxuICAgICAgY29udGVudHMgPSBmcy5yZWFkRmlsZVN5bmMocGF0aCwgJ3V0ZjgnKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVyKSB7XG4gICAgLyogaWdub3JlIGFueSBlcnJvcnMgKi9cbiAgfVxuXG4gIHJldHVybiBmaWxlQ29udGVudHNDYWNoZVtwYXRoXSA9IGNvbnRlbnRzO1xufSk7XG5cbi8vIFN1cHBvcnQgVVJMcyByZWxhdGl2ZSB0byBhIGRpcmVjdG9yeSwgYnV0IGJlIGNhcmVmdWwgYWJvdXQgYSBwcm90b2NvbCBwcmVmaXhcbi8vIGluIGNhc2Ugd2UgYXJlIGluIHRoZSBicm93c2VyIChpLmUuIGRpcmVjdG9yaWVzIG1heSBzdGFydCB3aXRoIFwiaHR0cDovL1wiIG9yIFwiZmlsZTovLy9cIilcbmZ1bmN0aW9uIHN1cHBvcnRSZWxhdGl2ZVVSTChmaWxlLCB1cmwpIHtcbiAgaWYgKCFmaWxlKSByZXR1cm4gdXJsO1xuICB2YXIgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpO1xuICB2YXIgbWF0Y2ggPSAvXlxcdys6XFwvXFwvW15cXC9dKi8uZXhlYyhkaXIpO1xuICB2YXIgcHJvdG9jb2wgPSBtYXRjaCA/IG1hdGNoWzBdIDogJyc7XG4gIHZhciBzdGFydFBhdGggPSBkaXIuc2xpY2UocHJvdG9jb2wubGVuZ3RoKTtcbiAgaWYgKHByb3RvY29sICYmIC9eXFwvXFx3XFw6Ly50ZXN0KHN0YXJ0UGF0aCkpIHtcbiAgICAvLyBoYW5kbGUgZmlsZTovLy9DOi8gcGF0aHNcbiAgICBwcm90b2NvbCArPSAnLyc7XG4gICAgcmV0dXJuIHByb3RvY29sICsgcGF0aC5yZXNvbHZlKGRpci5zbGljZShwcm90b2NvbC5sZW5ndGgpLCB1cmwpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgfVxuICByZXR1cm4gcHJvdG9jb2wgKyBwYXRoLnJlc29sdmUoZGlyLnNsaWNlKHByb3RvY29sLmxlbmd0aCksIHVybCk7XG59XG5cbmZ1bmN0aW9uIHJldHJpZXZlU291cmNlTWFwVVJMKHNvdXJjZSkge1xuICB2YXIgZmlsZURhdGE7XG5cbiAgaWYgKGlzSW5Ccm93c2VyKCkpIHtcbiAgICAgdHJ5IHtcbiAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgeGhyLm9wZW4oJ0dFVCcsIHNvdXJjZSwgZmFsc2UpO1xuICAgICAgIHhoci5zZW5kKG51bGwpO1xuICAgICAgIGZpbGVEYXRhID0geGhyLnJlYWR5U3RhdGUgPT09IDQgPyB4aHIucmVzcG9uc2VUZXh0IDogbnVsbDtcblxuICAgICAgIC8vIFN1cHBvcnQgcHJvdmlkaW5nIGEgc291cmNlTWFwcGluZ1VSTCB2aWEgdGhlIFNvdXJjZU1hcCBoZWFkZXJcbiAgICAgICB2YXIgc291cmNlTWFwSGVhZGVyID0geGhyLmdldFJlc3BvbnNlSGVhZGVyKFwiU291cmNlTWFwXCIpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5nZXRSZXNwb25zZUhlYWRlcihcIlgtU291cmNlTWFwXCIpO1xuICAgICAgIGlmIChzb3VyY2VNYXBIZWFkZXIpIHtcbiAgICAgICAgIHJldHVybiBzb3VyY2VNYXBIZWFkZXI7XG4gICAgICAgfVxuICAgICB9IGNhdGNoIChlKSB7XG4gICAgIH1cbiAgfVxuXG4gIC8vIEdldCB0aGUgVVJMIG9mIHRoZSBzb3VyY2UgbWFwXG4gIGZpbGVEYXRhID0gcmV0cmlldmVGaWxlKHNvdXJjZSk7XG4gIHZhciByZSA9IC8oPzpcXC9cXC9bQCNdW1xcc10qc291cmNlTWFwcGluZ1VSTD0oW15cXHMnXCJdKylbXFxzXSokKXwoPzpcXC9cXCpbQCNdW1xcc10qc291cmNlTWFwcGluZ1VSTD0oW15cXHMqJ1wiXSspW1xcc10qKD86XFwqXFwvKVtcXHNdKiQpL21nO1xuICAvLyBLZWVwIGV4ZWN1dGluZyB0aGUgc2VhcmNoIHRvIGZpbmQgdGhlICpsYXN0KiBzb3VyY2VNYXBwaW5nVVJMIHRvIGF2b2lkXG4gIC8vIHBpY2tpbmcgdXAgc291cmNlTWFwcGluZ1VSTHMgZnJvbSBjb21tZW50cywgc3RyaW5ncywgZXRjLlxuICB2YXIgbGFzdE1hdGNoLCBtYXRjaDtcbiAgd2hpbGUgKG1hdGNoID0gcmUuZXhlYyhmaWxlRGF0YSkpIGxhc3RNYXRjaCA9IG1hdGNoO1xuICBpZiAoIWxhc3RNYXRjaCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBsYXN0TWF0Y2hbMV07XG59O1xuXG4vLyBDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgcmV0cmlldmVTb3VyY2VNYXAgb3B0aW9uIHRvIGluc3RhbGwuIFRha2VzIGFcbi8vIGdlbmVyYXRlZCBzb3VyY2UgZmlsZW5hbWU7IHJldHVybnMgYSB7bWFwLCBvcHRpb25hbCB1cmx9IG9iamVjdCwgb3IgbnVsbCBpZlxuLy8gdGhlcmUgaXMgbm8gc291cmNlIG1hcC4gIFRoZSBtYXAgZmllbGQgbWF5IGJlIGVpdGhlciBhIHN0cmluZyBvciB0aGUgcGFyc2VkXG4vLyBKU09OIG9iamVjdCAoaWUsIGl0IG11c3QgYmUgYSB2YWxpZCBhcmd1bWVudCB0byB0aGUgU291cmNlTWFwQ29uc3VtZXJcbi8vIGNvbnN0cnVjdG9yKS5cbnZhciByZXRyaWV2ZVNvdXJjZU1hcCA9IGhhbmRsZXJFeGVjKHJldHJpZXZlTWFwSGFuZGxlcnMpO1xucmV0cmlldmVNYXBIYW5kbGVycy5wdXNoKGZ1bmN0aW9uKHNvdXJjZSkge1xuICB2YXIgc291cmNlTWFwcGluZ1VSTCA9IHJldHJpZXZlU291cmNlTWFwVVJMKHNvdXJjZSk7XG4gIGlmICghc291cmNlTWFwcGluZ1VSTCkgcmV0dXJuIG51bGw7XG5cbiAgLy8gUmVhZCB0aGUgY29udGVudHMgb2YgdGhlIHNvdXJjZSBtYXBcbiAgdmFyIHNvdXJjZU1hcERhdGE7XG4gIGlmIChyZVNvdXJjZU1hcC50ZXN0KHNvdXJjZU1hcHBpbmdVUkwpKSB7XG4gICAgLy8gU3VwcG9ydCBzb3VyY2UgbWFwIFVSTCBhcyBhIGRhdGEgdXJsXG4gICAgdmFyIHJhd0RhdGEgPSBzb3VyY2VNYXBwaW5nVVJMLnNsaWNlKHNvdXJjZU1hcHBpbmdVUkwuaW5kZXhPZignLCcpICsgMSk7XG4gICAgc291cmNlTWFwRGF0YSA9IGJ1ZmZlckZyb20ocmF3RGF0YSwgXCJiYXNlNjRcIikudG9TdHJpbmcoKTtcbiAgICBzb3VyY2VNYXBwaW5nVVJMID0gc291cmNlO1xuICB9IGVsc2Uge1xuICAgIC8vIFN1cHBvcnQgc291cmNlIG1hcCBVUkxzIHJlbGF0aXZlIHRvIHRoZSBzb3VyY2UgVVJMXG4gICAgc291cmNlTWFwcGluZ1VSTCA9IHN1cHBvcnRSZWxhdGl2ZVVSTChzb3VyY2UsIHNvdXJjZU1hcHBpbmdVUkwpO1xuICAgIHNvdXJjZU1hcERhdGEgPSByZXRyaWV2ZUZpbGUoc291cmNlTWFwcGluZ1VSTCk7XG4gIH1cblxuICBpZiAoIXNvdXJjZU1hcERhdGEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdXJsOiBzb3VyY2VNYXBwaW5nVVJMLFxuICAgIG1hcDogc291cmNlTWFwRGF0YVxuICB9O1xufSk7XG5cbmZ1bmN0aW9uIG1hcFNvdXJjZVBvc2l0aW9uKHBvc2l0aW9uKSB7XG4gIHZhciBzb3VyY2VNYXAgPSBzb3VyY2VNYXBDYWNoZVtwb3NpdGlvbi5zb3VyY2VdO1xuICBpZiAoIXNvdXJjZU1hcCkge1xuICAgIC8vIENhbGwgdGhlIChvdmVycmlkZWFibGUpIHJldHJpZXZlU291cmNlTWFwIGZ1bmN0aW9uIHRvIGdldCB0aGUgc291cmNlIG1hcC5cbiAgICB2YXIgdXJsQW5kTWFwID0gcmV0cmlldmVTb3VyY2VNYXAocG9zaXRpb24uc291cmNlKTtcbiAgICBpZiAodXJsQW5kTWFwKSB7XG4gICAgICBzb3VyY2VNYXAgPSBzb3VyY2VNYXBDYWNoZVtwb3NpdGlvbi5zb3VyY2VdID0ge1xuICAgICAgICB1cmw6IHVybEFuZE1hcC51cmwsXG4gICAgICAgIG1hcDogbmV3IFNvdXJjZU1hcENvbnN1bWVyKHVybEFuZE1hcC5tYXApXG4gICAgICB9O1xuXG4gICAgICAvLyBMb2FkIGFsbCBzb3VyY2VzIHN0b3JlZCBpbmxpbmUgd2l0aCB0aGUgc291cmNlIG1hcCBpbnRvIHRoZSBmaWxlIGNhY2hlXG4gICAgICAvLyB0byBwcmV0ZW5kIGxpa2UgdGhleSBhcmUgYWxyZWFkeSBsb2FkZWQuIFRoZXkgbWF5IG5vdCBleGlzdCBvbiBkaXNrLlxuICAgICAgaWYgKHNvdXJjZU1hcC5tYXAuc291cmNlc0NvbnRlbnQpIHtcbiAgICAgICAgc291cmNlTWFwLm1hcC5zb3VyY2VzLmZvckVhY2goZnVuY3Rpb24oc291cmNlLCBpKSB7XG4gICAgICAgICAgdmFyIGNvbnRlbnRzID0gc291cmNlTWFwLm1hcC5zb3VyY2VzQ29udGVudFtpXTtcbiAgICAgICAgICBpZiAoY29udGVudHMpIHtcbiAgICAgICAgICAgIHZhciB1cmwgPSBzdXBwb3J0UmVsYXRpdmVVUkwoc291cmNlTWFwLnVybCwgc291cmNlKTtcbiAgICAgICAgICAgIGZpbGVDb250ZW50c0NhY2hlW3VybF0gPSBjb250ZW50cztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzb3VyY2VNYXAgPSBzb3VyY2VNYXBDYWNoZVtwb3NpdGlvbi5zb3VyY2VdID0ge1xuICAgICAgICB1cmw6IG51bGwsXG4gICAgICAgIG1hcDogbnVsbFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXNvbHZlIHRoZSBzb3VyY2UgVVJMIHJlbGF0aXZlIHRvIHRoZSBVUkwgb2YgdGhlIHNvdXJjZSBtYXBcbiAgaWYgKHNvdXJjZU1hcCAmJiBzb3VyY2VNYXAubWFwICYmIHR5cGVvZiBzb3VyY2VNYXAubWFwLm9yaWdpbmFsUG9zaXRpb25Gb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgb3JpZ2luYWxQb3NpdGlvbiA9IHNvdXJjZU1hcC5tYXAub3JpZ2luYWxQb3NpdGlvbkZvcihwb3NpdGlvbik7XG5cbiAgICAvLyBPbmx5IHJldHVybiB0aGUgb3JpZ2luYWwgcG9zaXRpb24gaWYgYSBtYXRjaGluZyBsaW5lIHdhcyBmb3VuZC4gSWYgbm9cbiAgICAvLyBtYXRjaGluZyBsaW5lIGlzIGZvdW5kIHRoZW4gd2UgcmV0dXJuIHBvc2l0aW9uIGluc3RlYWQsIHdoaWNoIHdpbGwgY2F1c2VcbiAgICAvLyB0aGUgc3RhY2sgdHJhY2UgdG8gcHJpbnQgdGhlIHBhdGggYW5kIGxpbmUgZm9yIHRoZSBjb21waWxlZCBmaWxlLiBJdCBpc1xuICAgIC8vIGJldHRlciB0byBnaXZlIGEgcHJlY2lzZSBsb2NhdGlvbiBpbiB0aGUgY29tcGlsZWQgZmlsZSB0aGFuIGEgdmFndWVcbiAgICAvLyBsb2NhdGlvbiBpbiB0aGUgb3JpZ2luYWwgZmlsZS5cbiAgICBpZiAob3JpZ2luYWxQb3NpdGlvbi5zb3VyY2UgIT09IG51bGwpIHtcbiAgICAgIG9yaWdpbmFsUG9zaXRpb24uc291cmNlID0gc3VwcG9ydFJlbGF0aXZlVVJMKFxuICAgICAgICBzb3VyY2VNYXAudXJsLCBvcmlnaW5hbFBvc2l0aW9uLnNvdXJjZSk7XG4gICAgICByZXR1cm4gb3JpZ2luYWxQb3NpdGlvbjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcG9zaXRpb247XG59XG5cbi8vIFBhcnNlcyBjb2RlIGdlbmVyYXRlZCBieSBGb3JtYXRFdmFsT3JpZ2luKCksIGEgZnVuY3Rpb24gaW5zaWRlIFY4OlxuLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9zb3VyY2UvYnJvd3NlL3RydW5rL3NyYy9tZXNzYWdlcy5qc1xuZnVuY3Rpb24gbWFwRXZhbE9yaWdpbihvcmlnaW4pIHtcbiAgLy8gTW9zdCBldmFsKCkgY2FsbHMgYXJlIGluIHRoaXMgZm9ybWF0XG4gIHZhciBtYXRjaCA9IC9eZXZhbCBhdCAoW14oXSspIFxcKCguKyk6KFxcZCspOihcXGQrKVxcKSQvLmV4ZWMob3JpZ2luKTtcbiAgaWYgKG1hdGNoKSB7XG4gICAgdmFyIHBvc2l0aW9uID0gbWFwU291cmNlUG9zaXRpb24oe1xuICAgICAgc291cmNlOiBtYXRjaFsyXSxcbiAgICAgIGxpbmU6ICttYXRjaFszXSxcbiAgICAgIGNvbHVtbjogbWF0Y2hbNF0gLSAxXG4gICAgfSk7XG4gICAgcmV0dXJuICdldmFsIGF0ICcgKyBtYXRjaFsxXSArICcgKCcgKyBwb3NpdGlvbi5zb3VyY2UgKyAnOicgK1xuICAgICAgcG9zaXRpb24ubGluZSArICc6JyArIChwb3NpdGlvbi5jb2x1bW4gKyAxKSArICcpJztcbiAgfVxuXG4gIC8vIFBhcnNlIG5lc3RlZCBldmFsKCkgY2FsbHMgdXNpbmcgcmVjdXJzaW9uXG4gIG1hdGNoID0gL15ldmFsIGF0IChbXihdKykgXFwoKC4rKVxcKSQvLmV4ZWMob3JpZ2luKTtcbiAgaWYgKG1hdGNoKSB7XG4gICAgcmV0dXJuICdldmFsIGF0ICcgKyBtYXRjaFsxXSArICcgKCcgKyBtYXBFdmFsT3JpZ2luKG1hdGNoWzJdKSArICcpJztcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBzdGlsbCByZXR1cm4gdXNlZnVsIGluZm9ybWF0aW9uIGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nXG4gIHJldHVybiBvcmlnaW47XG59XG5cbi8vIFRoaXMgaXMgY29waWVkIGFsbW9zdCB2ZXJiYXRpbSBmcm9tIHRoZSBWOCBzb3VyY2UgY29kZSBhdFxuLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9zb3VyY2UvYnJvd3NlL3RydW5rL3NyYy9tZXNzYWdlcy5qcy4gVGhlXG4vLyBpbXBsZW1lbnRhdGlvbiBvZiB3cmFwQ2FsbFNpdGUoKSB1c2VkIHRvIGp1c3QgZm9yd2FyZCB0byB0aGUgYWN0dWFsIHNvdXJjZVxuLy8gY29kZSBvZiBDYWxsU2l0ZS5wcm90b3R5cGUudG9TdHJpbmcgYnV0IHVuZm9ydHVuYXRlbHkgYSBuZXcgcmVsZWFzZSBvZiBWOFxuLy8gZGlkIHNvbWV0aGluZyB0byB0aGUgcHJvdG90eXBlIGNoYWluIGFuZCBicm9rZSB0aGUgc2hpbS4gVGhlIG9ubHkgZml4IElcbi8vIGNvdWxkIGZpbmQgd2FzIGNvcHkvcGFzdGUuXG5mdW5jdGlvbiBDYWxsU2l0ZVRvU3RyaW5nKCkge1xuICB2YXIgZmlsZU5hbWU7XG4gIHZhciBmaWxlTG9jYXRpb24gPSBcIlwiO1xuICBpZiAodGhpcy5pc05hdGl2ZSgpKSB7XG4gICAgZmlsZUxvY2F0aW9uID0gXCJuYXRpdmVcIjtcbiAgfSBlbHNlIHtcbiAgICBmaWxlTmFtZSA9IHRoaXMuZ2V0U2NyaXB0TmFtZU9yU291cmNlVVJMKCk7XG4gICAgaWYgKCFmaWxlTmFtZSAmJiB0aGlzLmlzRXZhbCgpKSB7XG4gICAgICBmaWxlTG9jYXRpb24gPSB0aGlzLmdldEV2YWxPcmlnaW4oKTtcbiAgICAgIGZpbGVMb2NhdGlvbiArPSBcIiwgXCI7ICAvLyBFeHBlY3Rpbmcgc291cmNlIHBvc2l0aW9uIHRvIGZvbGxvdy5cbiAgICB9XG5cbiAgICBpZiAoZmlsZU5hbWUpIHtcbiAgICAgIGZpbGVMb2NhdGlvbiArPSBmaWxlTmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU291cmNlIGNvZGUgZG9lcyBub3Qgb3JpZ2luYXRlIGZyb20gYSBmaWxlIGFuZCBpcyBub3QgbmF0aXZlLCBidXQgd2VcbiAgICAgIC8vIGNhbiBzdGlsbCBnZXQgdGhlIHNvdXJjZSBwb3NpdGlvbiBpbnNpZGUgdGhlIHNvdXJjZSBzdHJpbmcsIGUuZy4gaW5cbiAgICAgIC8vIGFuIGV2YWwgc3RyaW5nLlxuICAgICAgZmlsZUxvY2F0aW9uICs9IFwiPGFub255bW91cz5cIjtcbiAgICB9XG4gICAgdmFyIGxpbmVOdW1iZXIgPSB0aGlzLmdldExpbmVOdW1iZXIoKTtcbiAgICBpZiAobGluZU51bWJlciAhPSBudWxsKSB7XG4gICAgICBmaWxlTG9jYXRpb24gKz0gXCI6XCIgKyBsaW5lTnVtYmVyO1xuICAgICAgdmFyIGNvbHVtbk51bWJlciA9IHRoaXMuZ2V0Q29sdW1uTnVtYmVyKCk7XG4gICAgICBpZiAoY29sdW1uTnVtYmVyKSB7XG4gICAgICAgIGZpbGVMb2NhdGlvbiArPSBcIjpcIiArIGNvbHVtbk51bWJlcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgbGluZSA9IFwiXCI7XG4gIHZhciBmdW5jdGlvbk5hbWUgPSB0aGlzLmdldEZ1bmN0aW9uTmFtZSgpO1xuICB2YXIgYWRkU3VmZml4ID0gdHJ1ZTtcbiAgdmFyIGlzQ29uc3RydWN0b3IgPSB0aGlzLmlzQ29uc3RydWN0b3IoKTtcbiAgdmFyIGlzTWV0aG9kQ2FsbCA9ICEodGhpcy5pc1RvcGxldmVsKCkgfHwgaXNDb25zdHJ1Y3Rvcik7XG4gIGlmIChpc01ldGhvZENhbGwpIHtcbiAgICB2YXIgdHlwZU5hbWUgPSB0aGlzLmdldFR5cGVOYW1lKCk7XG4gICAgLy8gRml4ZXMgc2hpbSB0byBiZSBiYWNrd2FyZCBjb21wYXRhYmxlIHdpdGggTm9kZSB2MCB0byB2NFxuICAgIGlmICh0eXBlTmFtZSA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIikge1xuICAgICAgdHlwZU5hbWUgPSBcIm51bGxcIjtcbiAgICB9XG4gICAgdmFyIG1ldGhvZE5hbWUgPSB0aGlzLmdldE1ldGhvZE5hbWUoKTtcbiAgICBpZiAoZnVuY3Rpb25OYW1lKSB7XG4gICAgICBpZiAodHlwZU5hbWUgJiYgZnVuY3Rpb25OYW1lLmluZGV4T2YodHlwZU5hbWUpICE9IDApIHtcbiAgICAgICAgbGluZSArPSB0eXBlTmFtZSArIFwiLlwiO1xuICAgICAgfVxuICAgICAgbGluZSArPSBmdW5jdGlvbk5hbWU7XG4gICAgICBpZiAobWV0aG9kTmFtZSAmJiBmdW5jdGlvbk5hbWUuaW5kZXhPZihcIi5cIiArIG1ldGhvZE5hbWUpICE9IGZ1bmN0aW9uTmFtZS5sZW5ndGggLSBtZXRob2ROYW1lLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgbGluZSArPSBcIiBbYXMgXCIgKyBtZXRob2ROYW1lICsgXCJdXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmUgKz0gdHlwZU5hbWUgKyBcIi5cIiArIChtZXRob2ROYW1lIHx8IFwiPGFub255bW91cz5cIik7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzQ29uc3RydWN0b3IpIHtcbiAgICBsaW5lICs9IFwibmV3IFwiICsgKGZ1bmN0aW9uTmFtZSB8fCBcIjxhbm9ueW1vdXM+XCIpO1xuICB9IGVsc2UgaWYgKGZ1bmN0aW9uTmFtZSkge1xuICAgIGxpbmUgKz0gZnVuY3Rpb25OYW1lO1xuICB9IGVsc2Uge1xuICAgIGxpbmUgKz0gZmlsZUxvY2F0aW9uO1xuICAgIGFkZFN1ZmZpeCA9IGZhbHNlO1xuICB9XG4gIGlmIChhZGRTdWZmaXgpIHtcbiAgICBsaW5lICs9IFwiIChcIiArIGZpbGVMb2NhdGlvbiArIFwiKVwiO1xuICB9XG4gIHJldHVybiBsaW5lO1xufVxuXG5mdW5jdGlvbiBjbG9uZUNhbGxTaXRlKGZyYW1lKSB7XG4gIHZhciBvYmplY3QgPSB7fTtcbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoT2JqZWN0LmdldFByb3RvdHlwZU9mKGZyYW1lKSkuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgb2JqZWN0W25hbWVdID0gL14oPzppc3xnZXQpLy50ZXN0KG5hbWUpID8gZnVuY3Rpb24oKSB7IHJldHVybiBmcmFtZVtuYW1lXS5jYWxsKGZyYW1lKTsgfSA6IGZyYW1lW25hbWVdO1xuICB9KTtcbiAgb2JqZWN0LnRvU3RyaW5nID0gQ2FsbFNpdGVUb1N0cmluZztcbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuZnVuY3Rpb24gd3JhcENhbGxTaXRlKGZyYW1lLCBzdGF0ZSkge1xuICAvLyBwcm92aWRlcyBpbnRlcmZhY2UgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICBpZiAoc3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXRlID0geyBuZXh0UG9zaXRpb246IG51bGwsIGN1clBvc2l0aW9uOiBudWxsIH1cbiAgfVxuICBpZihmcmFtZS5pc05hdGl2ZSgpKSB7XG4gICAgc3RhdGUuY3VyUG9zaXRpb24gPSBudWxsO1xuICAgIHJldHVybiBmcmFtZTtcbiAgfVxuXG4gIC8vIE1vc3QgY2FsbCBzaXRlcyB3aWxsIHJldHVybiB0aGUgc291cmNlIGZpbGUgZnJvbSBnZXRGaWxlTmFtZSgpLCBidXQgY29kZVxuICAvLyBwYXNzZWQgdG8gZXZhbCgpIGVuZGluZyBpbiBcIi8vIyBzb3VyY2VVUkw9Li4uXCIgd2lsbCByZXR1cm4gdGhlIHNvdXJjZSBmaWxlXG4gIC8vIGZyb20gZ2V0U2NyaXB0TmFtZU9yU291cmNlVVJMKCkgaW5zdGVhZFxuICB2YXIgc291cmNlID0gZnJhbWUuZ2V0RmlsZU5hbWUoKSB8fCBmcmFtZS5nZXRTY3JpcHROYW1lT3JTb3VyY2VVUkwoKTtcbiAgaWYgKHNvdXJjZSkge1xuICAgIHZhciBsaW5lID0gZnJhbWUuZ2V0TGluZU51bWJlcigpO1xuICAgIHZhciBjb2x1bW4gPSBmcmFtZS5nZXRDb2x1bW5OdW1iZXIoKSAtIDE7XG5cbiAgICAvLyBGaXggcG9zaXRpb24gaW4gTm9kZSB3aGVyZSBzb21lIChpbnRlcm5hbCkgY29kZSBpcyBwcmVwZW5kZWQuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9ub2RlLXNvdXJjZS1tYXAtc3VwcG9ydC9pc3N1ZXMvMzZcbiAgICAvLyBIZWFkZXIgcmVtb3ZlZCBpbiBub2RlIGF0IF4xMC4xNiB8fCA+PTExLjExLjBcbiAgICAvLyB2MTEgaXMgbm90IGFuIExUUyBjYW5kaWRhdGUsIHdlIGNhbiBqdXN0IHRlc3QgdGhlIG9uZSB2ZXJzaW9uIHdpdGggaXQuXG4gICAgLy8gVGVzdCBub2RlIHZlcnNpb25zIGZvcjogMTAuMTYtMTksIDEwLjIwKywgMTItMTksIDIwLTk5LCAxMDArLCBvciAxMS4xMVxuICAgIHZhciBub0hlYWRlciA9IC9edigxMFxcLjFbNi05XXwxMFxcLlsyLTldWzAtOV18MTBcXC5bMC05XXszLH18MVsyLTldXFxkKnxbMi05XVxcZHxcXGR7Myx9fDExXFwuMTEpLztcbiAgICB2YXIgaGVhZGVyTGVuZ3RoID0gbm9IZWFkZXIudGVzdChnbG9iYWxQcm9jZXNzVmVyc2lvbigpKSA/IDAgOiA2MjtcbiAgICBpZiAobGluZSA9PT0gMSAmJiBjb2x1bW4gPiBoZWFkZXJMZW5ndGggJiYgIWlzSW5Ccm93c2VyKCkgJiYgIWZyYW1lLmlzRXZhbCgpKSB7XG4gICAgICBjb2x1bW4gLT0gaGVhZGVyTGVuZ3RoO1xuICAgIH1cblxuICAgIHZhciBwb3NpdGlvbiA9IG1hcFNvdXJjZVBvc2l0aW9uKHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgbGluZTogbGluZSxcbiAgICAgIGNvbHVtbjogY29sdW1uXG4gICAgfSk7XG4gICAgc3RhdGUuY3VyUG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICBmcmFtZSA9IGNsb25lQ2FsbFNpdGUoZnJhbWUpO1xuICAgIHZhciBvcmlnaW5hbEZ1bmN0aW9uTmFtZSA9IGZyYW1lLmdldEZ1bmN0aW9uTmFtZTtcbiAgICBmcmFtZS5nZXRGdW5jdGlvbk5hbWUgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChzdGF0ZS5uZXh0UG9zaXRpb24gPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gb3JpZ2luYWxGdW5jdGlvbk5hbWUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZS5uZXh0UG9zaXRpb24ubmFtZSB8fCBvcmlnaW5hbEZ1bmN0aW9uTmFtZSgpO1xuICAgIH07XG4gICAgZnJhbWUuZ2V0RmlsZU5hbWUgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHBvc2l0aW9uLnNvdXJjZTsgfTtcbiAgICBmcmFtZS5nZXRMaW5lTnVtYmVyID0gZnVuY3Rpb24oKSB7IHJldHVybiBwb3NpdGlvbi5saW5lOyB9O1xuICAgIGZyYW1lLmdldENvbHVtbk51bWJlciA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gcG9zaXRpb24uY29sdW1uICsgMTsgfTtcbiAgICBmcmFtZS5nZXRTY3JpcHROYW1lT3JTb3VyY2VVUkwgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHBvc2l0aW9uLnNvdXJjZTsgfTtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cblxuICAvLyBDb2RlIGNhbGxlZCB1c2luZyBldmFsKCkgbmVlZHMgc3BlY2lhbCBoYW5kbGluZ1xuICB2YXIgb3JpZ2luID0gZnJhbWUuaXNFdmFsKCkgJiYgZnJhbWUuZ2V0RXZhbE9yaWdpbigpO1xuICBpZiAob3JpZ2luKSB7XG4gICAgb3JpZ2luID0gbWFwRXZhbE9yaWdpbihvcmlnaW4pO1xuICAgIGZyYW1lID0gY2xvbmVDYWxsU2l0ZShmcmFtZSk7XG4gICAgZnJhbWUuZ2V0RXZhbE9yaWdpbiA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gb3JpZ2luOyB9O1xuICAgIHJldHVybiBmcmFtZTtcbiAgfVxuXG4gIC8vIElmIHdlIGdldCBoZXJlIHRoZW4gd2Ugd2VyZSB1bmFibGUgdG8gY2hhbmdlIHRoZSBzb3VyY2UgcG9zaXRpb25cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlIFY4IHN0YWNrIHRyYWNlIEFQSSwgZm9yIG1vcmUgaW5mbyBzZWU6XG4vLyBodHRwczovL3Y4LmRldi9kb2NzL3N0YWNrLXRyYWNlLWFwaVxuZnVuY3Rpb24gcHJlcGFyZVN0YWNrVHJhY2UoZXJyb3IsIHN0YWNrKSB7XG4gIGlmIChlbXB0eUNhY2hlQmV0d2Vlbk9wZXJhdGlvbnMpIHtcbiAgICBmaWxlQ29udGVudHNDYWNoZSA9IHt9O1xuICAgIHNvdXJjZU1hcENhY2hlID0ge307XG4gIH1cblxuICB2YXIgbmFtZSA9IGVycm9yLm5hbWUgfHwgJ0Vycm9yJztcbiAgdmFyIG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlIHx8ICcnO1xuICB2YXIgZXJyb3JTdHJpbmcgPSBuYW1lICsgXCI6IFwiICsgbWVzc2FnZTtcblxuICB2YXIgc3RhdGUgPSB7IG5leHRQb3NpdGlvbjogbnVsbCwgY3VyUG9zaXRpb246IG51bGwgfTtcbiAgdmFyIHByb2Nlc3NlZFN0YWNrID0gW107XG4gIGZvciAodmFyIGkgPSBzdGFjay5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHByb2Nlc3NlZFN0YWNrLnB1c2goJ1xcbiAgICBhdCAnICsgd3JhcENhbGxTaXRlKHN0YWNrW2ldLCBzdGF0ZSkpO1xuICAgIHN0YXRlLm5leHRQb3NpdGlvbiA9IHN0YXRlLmN1clBvc2l0aW9uO1xuICB9XG4gIHN0YXRlLmN1clBvc2l0aW9uID0gc3RhdGUubmV4dFBvc2l0aW9uID0gbnVsbDtcbiAgcmV0dXJuIGVycm9yU3RyaW5nICsgcHJvY2Vzc2VkU3RhY2sucmV2ZXJzZSgpLmpvaW4oJycpO1xufVxuXG4vLyBHZW5lcmF0ZSBwb3NpdGlvbiBhbmQgc25pcHBldCBvZiBvcmlnaW5hbCBzb3VyY2Ugd2l0aCBwb2ludGVyXG5mdW5jdGlvbiBnZXRFcnJvclNvdXJjZShlcnJvcikge1xuICB2YXIgbWF0Y2ggPSAvXFxuICAgIGF0IFteKF0rIFxcKCguKik6KFxcZCspOihcXGQrKVxcKS8uZXhlYyhlcnJvci5zdGFjayk7XG4gIGlmIChtYXRjaCkge1xuICAgIHZhciBzb3VyY2UgPSBtYXRjaFsxXTtcbiAgICB2YXIgbGluZSA9ICttYXRjaFsyXTtcbiAgICB2YXIgY29sdW1uID0gK21hdGNoWzNdO1xuXG4gICAgLy8gU3VwcG9ydCB0aGUgaW5saW5lIHNvdXJjZUNvbnRlbnRzIGluc2lkZSB0aGUgc291cmNlIG1hcFxuICAgIHZhciBjb250ZW50cyA9IGZpbGVDb250ZW50c0NhY2hlW3NvdXJjZV07XG5cbiAgICAvLyBTdXBwb3J0IGZpbGVzIG9uIGRpc2tcbiAgICBpZiAoIWNvbnRlbnRzICYmIGZzICYmIGZzLmV4aXN0c1N5bmMoc291cmNlKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29udGVudHMgPSBmcy5yZWFkRmlsZVN5bmMoc291cmNlLCAndXRmOCcpO1xuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgY29udGVudHMgPSAnJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGb3JtYXQgdGhlIGxpbmUgZnJvbSB0aGUgb3JpZ2luYWwgc291cmNlIGNvZGUgbGlrZSBub2RlIGRvZXNcbiAgICBpZiAoY29udGVudHMpIHtcbiAgICAgIHZhciBjb2RlID0gY29udGVudHMuc3BsaXQoLyg/OlxcclxcbnxcXHJ8XFxuKS8pW2xpbmUgLSAxXTtcbiAgICAgIGlmIChjb2RlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UgKyAnOicgKyBsaW5lICsgJ1xcbicgKyBjb2RlICsgJ1xcbicgK1xuICAgICAgICAgIG5ldyBBcnJheShjb2x1bW4pLmpvaW4oJyAnKSArICdeJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHByaW50RXJyb3JBbmRFeGl0IChlcnJvcikge1xuICB2YXIgc291cmNlID0gZ2V0RXJyb3JTb3VyY2UoZXJyb3IpO1xuXG4gIC8vIEVuc3VyZSBlcnJvciBpcyBwcmludGVkIHN5bmNocm9ub3VzbHkgYW5kIG5vdCB0cnVuY2F0ZWRcbiAgdmFyIHN0ZGVyciA9IGdsb2JhbFByb2Nlc3NTdGRlcnIoKTtcbiAgaWYgKHN0ZGVyciAmJiBzdGRlcnIuX2hhbmRsZSAmJiBzdGRlcnIuX2hhbmRsZS5zZXRCbG9ja2luZykge1xuICAgIHN0ZGVyci5faGFuZGxlLnNldEJsb2NraW5nKHRydWUpO1xuICB9XG5cbiAgaWYgKHNvdXJjZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoKTtcbiAgICBjb25zb2xlLmVycm9yKHNvdXJjZSk7XG4gIH1cblxuICBjb25zb2xlLmVycm9yKGVycm9yLnN0YWNrKTtcbiAgZ2xvYmFsUHJvY2Vzc0V4aXQoMSk7XG59XG5cbmZ1bmN0aW9uIHNoaW1FbWl0VW5jYXVnaHRFeGNlcHRpb24gKCkge1xuICB2YXIgb3JpZ0VtaXQgPSBwcm9jZXNzLmVtaXQ7XG5cbiAgcHJvY2Vzcy5lbWl0ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ3VuY2F1Z2h0RXhjZXB0aW9uJykge1xuICAgICAgdmFyIGhhc1N0YWNrID0gKGFyZ3VtZW50c1sxXSAmJiBhcmd1bWVudHNbMV0uc3RhY2spO1xuICAgICAgdmFyIGhhc0xpc3RlbmVycyA9ICh0aGlzLmxpc3RlbmVycyh0eXBlKS5sZW5ndGggPiAwKTtcblxuICAgICAgaWYgKGhhc1N0YWNrICYmICFoYXNMaXN0ZW5lcnMpIHtcbiAgICAgICAgcmV0dXJuIHByaW50RXJyb3JBbmRFeGl0KGFyZ3VtZW50c1sxXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9yaWdFbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbnZhciBvcmlnaW5hbFJldHJpZXZlRmlsZUhhbmRsZXJzID0gcmV0cmlldmVGaWxlSGFuZGxlcnMuc2xpY2UoMCk7XG52YXIgb3JpZ2luYWxSZXRyaWV2ZU1hcEhhbmRsZXJzID0gcmV0cmlldmVNYXBIYW5kbGVycy5zbGljZSgwKTtcblxuZXhwb3J0cy53cmFwQ2FsbFNpdGUgPSB3cmFwQ2FsbFNpdGU7XG5leHBvcnRzLmdldEVycm9yU291cmNlID0gZ2V0RXJyb3JTb3VyY2U7XG5leHBvcnRzLm1hcFNvdXJjZVBvc2l0aW9uID0gbWFwU291cmNlUG9zaXRpb247XG5leHBvcnRzLnJldHJpZXZlU291cmNlTWFwID0gcmV0cmlldmVTb3VyY2VNYXA7XG5cbmV4cG9ydHMuaW5zdGFsbCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgaWYgKG9wdGlvbnMuZW52aXJvbm1lbnQpIHtcbiAgICBlbnZpcm9ubWVudCA9IG9wdGlvbnMuZW52aXJvbm1lbnQ7XG4gICAgaWYgKFtcIm5vZGVcIiwgXCJicm93c2VyXCIsIFwiYXV0b1wiXS5pbmRleE9mKGVudmlyb25tZW50KSA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImVudmlyb25tZW50IFwiICsgZW52aXJvbm1lbnQgKyBcIiB3YXMgdW5rbm93bi4gQXZhaWxhYmxlIG9wdGlvbnMgYXJlIHthdXRvLCBicm93c2VyLCBub2RlfVwiKVxuICAgIH1cbiAgfVxuXG4gIC8vIEFsbG93IHNvdXJjZXMgdG8gYmUgZm91bmQgYnkgbWV0aG9kcyBvdGhlciB0aGFuIHJlYWRpbmcgdGhlIGZpbGVzXG4gIC8vIGRpcmVjdGx5IGZyb20gZGlzay5cbiAgaWYgKG9wdGlvbnMucmV0cmlldmVGaWxlKSB7XG4gICAgaWYgKG9wdGlvbnMub3ZlcnJpZGVSZXRyaWV2ZUZpbGUpIHtcbiAgICAgIHJldHJpZXZlRmlsZUhhbmRsZXJzLmxlbmd0aCA9IDA7XG4gICAgfVxuXG4gICAgcmV0cmlldmVGaWxlSGFuZGxlcnMudW5zaGlmdChvcHRpb25zLnJldHJpZXZlRmlsZSk7XG4gIH1cblxuICAvLyBBbGxvdyBzb3VyY2UgbWFwcyB0byBiZSBmb3VuZCBieSBtZXRob2RzIG90aGVyIHRoYW4gcmVhZGluZyB0aGUgZmlsZXNcbiAgLy8gZGlyZWN0bHkgZnJvbSBkaXNrLlxuICBpZiAob3B0aW9ucy5yZXRyaWV2ZVNvdXJjZU1hcCkge1xuICAgIGlmIChvcHRpb25zLm92ZXJyaWRlUmV0cmlldmVTb3VyY2VNYXApIHtcbiAgICAgIHJldHJpZXZlTWFwSGFuZGxlcnMubGVuZ3RoID0gMDtcbiAgICB9XG5cbiAgICByZXRyaWV2ZU1hcEhhbmRsZXJzLnVuc2hpZnQob3B0aW9ucy5yZXRyaWV2ZVNvdXJjZU1hcCk7XG4gIH1cblxuICAvLyBTdXBwb3J0IHJ1bnRpbWUgdHJhbnNwaWxlcnMgdGhhdCBpbmNsdWRlIGlubGluZSBzb3VyY2UgbWFwc1xuICBpZiAob3B0aW9ucy5ob29rUmVxdWlyZSAmJiAhaXNJbkJyb3dzZXIoKSkge1xuICAgIC8vIFVzZSBkeW5hbWljUmVxdWlyZSB0byBhdm9pZCBpbmNsdWRpbmcgaW4gYnJvd3NlciBidW5kbGVzXG4gICAgdmFyIE1vZHVsZSA9IGR5bmFtaWNSZXF1aXJlKG1vZHVsZSwgJ21vZHVsZScpO1xuICAgIHZhciAkY29tcGlsZSA9IE1vZHVsZS5wcm90b3R5cGUuX2NvbXBpbGU7XG5cbiAgICBpZiAoISRjb21waWxlLl9fc291cmNlTWFwU3VwcG9ydCkge1xuICAgICAgTW9kdWxlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uKGNvbnRlbnQsIGZpbGVuYW1lKSB7XG4gICAgICAgIGZpbGVDb250ZW50c0NhY2hlW2ZpbGVuYW1lXSA9IGNvbnRlbnQ7XG4gICAgICAgIHNvdXJjZU1hcENhY2hlW2ZpbGVuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuICRjb21waWxlLmNhbGwodGhpcywgY29udGVudCwgZmlsZW5hbWUpO1xuICAgICAgfTtcblxuICAgICAgTW9kdWxlLnByb3RvdHlwZS5fY29tcGlsZS5fX3NvdXJjZU1hcFN1cHBvcnQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvbmZpZ3VyZSBvcHRpb25zXG4gIGlmICghZW1wdHlDYWNoZUJldHdlZW5PcGVyYXRpb25zKSB7XG4gICAgZW1wdHlDYWNoZUJldHdlZW5PcGVyYXRpb25zID0gJ2VtcHR5Q2FjaGVCZXR3ZWVuT3BlcmF0aW9ucycgaW4gb3B0aW9ucyA/XG4gICAgICBvcHRpb25zLmVtcHR5Q2FjaGVCZXR3ZWVuT3BlcmF0aW9ucyA6IGZhbHNlO1xuICB9XG5cbiAgLy8gSW5zdGFsbCB0aGUgZXJyb3IgcmVmb3JtYXR0ZXJcbiAgaWYgKCFlcnJvckZvcm1hdHRlckluc3RhbGxlZCkge1xuICAgIGVycm9yRm9ybWF0dGVySW5zdGFsbGVkID0gdHJ1ZTtcbiAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXBhcmVTdGFja1RyYWNlO1xuICB9XG5cbiAgaWYgKCF1bmNhdWdodFNoaW1JbnN0YWxsZWQpIHtcbiAgICB2YXIgaW5zdGFsbEhhbmRsZXIgPSAnaGFuZGxlVW5jYXVnaHRFeGNlcHRpb25zJyBpbiBvcHRpb25zID9cbiAgICAgIG9wdGlvbnMuaGFuZGxlVW5jYXVnaHRFeGNlcHRpb25zIDogdHJ1ZTtcblxuICAgIC8vIERvIG5vdCBvdmVycmlkZSAndW5jYXVnaHRFeGNlcHRpb24nIHdpdGggb3VyIG93biBoYW5kbGVyIGluIE5vZGUuanNcbiAgICAvLyBXb3JrZXIgdGhyZWFkcy4gV29ya2VycyBwYXNzIHRoZSBlcnJvciB0byB0aGUgbWFpbiB0aHJlYWQgYXMgYW4gZXZlbnQsXG4gICAgLy8gcmF0aGVyIHRoYW4gcHJpbnRpbmcgc29tZXRoaW5nIHRvIHN0ZGVyciBhbmQgZXhpdGluZy5cbiAgICB0cnkge1xuICAgICAgLy8gV2UgbmVlZCB0byB1c2UgYGR5bmFtaWNSZXF1aXJlYCBiZWNhdXNlIGByZXF1aXJlYCBvbiBpdCdzIG93biB3aWxsIGJlIG9wdGltaXplZCBieSBXZWJQYWNrL0Jyb3dzZXJpZnkuXG4gICAgICB2YXIgd29ya2VyX3RocmVhZHMgPSBkeW5hbWljUmVxdWlyZShtb2R1bGUsICd3b3JrZXJfdGhyZWFkcycpO1xuICAgICAgaWYgKHdvcmtlcl90aHJlYWRzLmlzTWFpblRocmVhZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgaW5zdGFsbEhhbmRsZXIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGNhdGNoKGUpIHt9XG5cbiAgICAvLyBQcm92aWRlIHRoZSBvcHRpb24gdG8gbm90IGluc3RhbGwgdGhlIHVuY2F1Z2h0IGV4Y2VwdGlvbiBoYW5kbGVyLiBUaGlzIGlzXG4gICAgLy8gdG8gc3VwcG9ydCBvdGhlciB1bmNhdWdodCBleGNlcHRpb24gaGFuZGxlcnMgKGluIHRlc3QgZnJhbWV3b3JrcywgZm9yXG4gICAgLy8gZXhhbXBsZSkuIElmIHRoaXMgaGFuZGxlciBpcyBub3QgaW5zdGFsbGVkIGFuZCB0aGVyZSBhcmUgbm8gb3RoZXIgdW5jYXVnaHRcbiAgICAvLyBleGNlcHRpb24gaGFuZGxlcnMsIHVuY2F1Z2h0IGV4Y2VwdGlvbnMgd2lsbCBiZSBjYXVnaHQgYnkgbm9kZSdzIGJ1aWx0LWluXG4gICAgLy8gZXhjZXB0aW9uIGhhbmRsZXIgYW5kIHRoZSBwcm9jZXNzIHdpbGwgc3RpbGwgYmUgdGVybWluYXRlZC4gSG93ZXZlciwgdGhlXG4gICAgLy8gZ2VuZXJhdGVkIEphdmFTY3JpcHQgY29kZSB3aWxsIGJlIHNob3duIGFib3ZlIHRoZSBzdGFjayB0cmFjZSBpbnN0ZWFkIG9mXG4gICAgLy8gdGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlLlxuICAgIGlmIChpbnN0YWxsSGFuZGxlciAmJiBoYXNHbG9iYWxQcm9jZXNzRXZlbnRFbWl0dGVyKCkpIHtcbiAgICAgIHVuY2F1Z2h0U2hpbUluc3RhbGxlZCA9IHRydWU7XG4gICAgICBzaGltRW1pdFVuY2F1Z2h0RXhjZXB0aW9uKCk7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnRzLnJlc2V0UmV0cmlldmVIYW5kbGVycyA9IGZ1bmN0aW9uKCkge1xuICByZXRyaWV2ZUZpbGVIYW5kbGVycy5sZW5ndGggPSAwO1xuICByZXRyaWV2ZU1hcEhhbmRsZXJzLmxlbmd0aCA9IDA7XG5cbiAgcmV0cmlldmVGaWxlSGFuZGxlcnMgPSBvcmlnaW5hbFJldHJpZXZlRmlsZUhhbmRsZXJzLnNsaWNlKDApO1xuICByZXRyaWV2ZU1hcEhhbmRsZXJzID0gb3JpZ2luYWxSZXRyaWV2ZU1hcEhhbmRsZXJzLnNsaWNlKDApO1xuXG4gIHJldHJpZXZlU291cmNlTWFwID0gaGFuZGxlckV4ZWMocmV0cmlldmVNYXBIYW5kbGVycyk7XG4gIHJldHJpZXZlRmlsZSA9IGhhbmRsZXJFeGVjKHJldHJpZXZlRmlsZUhhbmRsZXJzKTtcbn1cbiIsICIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCBwcm9ncmFtIGZyb20gJ2NvbW1hbmRlcidcblxuaW1wb3J0IHsgZ2V0Q291bnRyeUZsYWcgfSBmcm9tICcuL2luZGV4J1xuaW1wb3J0ICogYXMgU2VudHJ5IGZyb20gXCJAc2VudHJ5L25vZGVcIjtcblxuLy8gSW1wb3J0aW5nIEBzZW50cnkvdHJhY2luZyBwYXRjaGVzIHRoZSBnbG9iYWwgaHViIGZvciB0cmFjaW5nIHRvIHdvcmsuXG5pbXBvcnQgKiBhcyBUcmFjaW5nIGZyb20gXCJAc2VudHJ5L3RyYWNpbmdcIjtcbmltcG9ydCB7IFJld3JpdGVGcmFtZXMgfSBmcm9tICdAc2VudHJ5L2ludGVncmF0aW9ucyc7XG5pbXBvcnQgJ3NvdXJjZS1tYXAtc3VwcG9ydC9yZWdpc3Rlcic7XG5cblNlbnRyeS5pbml0KHtcbiAgZHNuOiBcImh0dHBzOi8vYWVjMDg3M2U3NTBjNDliMDgyZmUzNTk0ZGVmMTVhZjFAbzExMTYxMzIuaW5nZXN0LnNlbnRyeS5pby82MTQ5MjgwXCIsXG5cbiAgLy8gV2UgcmVjb21tZW5kIGFkanVzdGluZyB0aGlzIHZhbHVlIGluIHByb2R1Y3Rpb24sIG9yIHVzaW5nIHRyYWNlc1NhbXBsZXJcbiAgLy8gZm9yIGZpbmVyIGNvbnRyb2xcbiAgdHJhY2VzU2FtcGxlUmF0ZTogMS4wLFxuICBpbnRlZ3JhdGlvbnM6IFtuZXcgUmV3cml0ZUZyYW1lcyh7cm9vdDogZ2xvYmFsLl9fcm9vdGRpcl9ffSldXG59KTtcblxucHJvZ3JhbVxuICAudmVyc2lvbignMC4xLjAnKVxuICAubmFtZSgnY291bnRyeS1mbGFnLWNsaScpXG4gIC5jb21tYW5kKCdnZXQgPGZsYWc+JylcbiAgLmFjdGlvbigoZmxhZykgPT4ge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gU2VudHJ5LnN0YXJ0VHJhbnNhY3Rpb24oe1xuICAgICAgb3A6IFwiZ2V0IGZsYWcgZnJvbSAyIGFscGhhIGNvZGVcIixcbiAgICAgIG5hbWU6IFwiR0VUIGZsYWcgZnJvbSAyIGFscGhhIGNvZGVcIlxuICAgIH0pXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldENvdW50cnlGbGFnKGZsYWcpO1xuICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoYEZsYWc6ICR7ZmxhZ30gXFxuUmVzdWx0OiAke3Jlc3VsdH1cXG5gKVxuICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgU2VudHJ5LmNhcHR1cmVFeGNlcHRpb24oZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyYW5zYWN0aW9uLmZpbmlzaCgpXG4gICAgfVxuICB9KVxuXG5wcm9ncmFtLnBhcnNlKHByb2Nlc3MuYXJndilcbiIsICJleHBvcnQgZnVuY3Rpb24gZ2V0Q291bnRyeUZsYWcgKGNvdW50cnlDb2RlOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoY291bnRyeUNvZGUubGVuZ3RoICE9IDIpIHsgcmV0dXJuIHVuZGVmaW5lZH1cbiAgcmV0dXJuIGNvdW50cnlDb2RlLnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvLi9nLCBjaGFyID0+IFxuICAgICAgU3RyaW5nLmZyb21Db2RlUG9pbnQoMTI3Mzk3ICsgY2hhci5jaGFyQ29kZUF0KDApKSk7XG59XG4gICIsICJyZXF1aXJlKCcuLycpLmluc3RhbGwoKTtcbiJdLAogICJtYXBwaW5ncyI6ICI7cW1CQUFBLG1CQUlBLEdBQUksSUFBZSxRQUFRLFVBQVUsYUFDakMsR0FBUSxRQUFRLGlCQUFpQixNQUNqQyxHQUFPLFFBQVEsUUFDZixHQUFVLEdBQUssUUFDZixHQUFXLEdBQUssU0FDaEIsR0FBSyxRQUFRLE1BTWpCLFFBQVEsUUFBUSxTQUFTLEVBQVMsSUFNbEMsR0FBVSxHQUFPLFFBQVUsR0FBSSxHQU0vQixHQUFRLFFBQVUsRUFNbEIsR0FBUSxPQUFTLEdBVWpCLFlBQWdCLEVBQU8sRUFBYSxDQUNsQyxLQUFLLE1BQVEsRUFDYixLQUFLLFNBQVcsRUFBTSxRQUFRLE1BQVEsRUFDdEMsS0FBSyxTQUFXLEVBQU0sUUFBUSxNQUFRLEVBQ3RDLEtBQUssS0FBTyxFQUFNLFFBQVEsVUFBWSxHQUN0QyxFQUFRLEVBQU0sTUFBTSxVQUNoQixFQUFNLE9BQVMsR0FBSyxDQUFDLFFBQVEsS0FBSyxFQUFNLEtBQUssTUFBSyxNQUFRLEVBQU0sU0FDcEUsS0FBSyxLQUFPLEVBQU0sUUFDbEIsS0FBSyxZQUFjLEdBQWUsR0FVcEMsR0FBTyxVQUFVLEtBQU8sVUFBVyxDQUNqQyxNQUFPLE1BQUssS0FDVCxRQUFRLEtBQU0sSUFDZCxRQUFRLE1BQU8sS0FXcEIsR0FBTyxVQUFVLGNBQWdCLFVBQVcsQ0FDMUMsTUFBTyxJQUFVLEtBQUssU0FXeEIsR0FBTyxVQUFVLEdBQUssU0FBUyxFQUFLLENBQ2xDLE1BQU8sTUFBSyxRQUFVLEdBQU8sS0FBSyxPQUFTLEdBVTdDLFdBQWlCLEVBQU0sQ0FDckIsS0FBSyxTQUFXLEdBQ2hCLEtBQUssUUFBVSxHQUNmLEtBQUssT0FBUyxHQUNkLEtBQUssb0JBQXNCLEdBQzNCLEtBQUssTUFBUSxHQUNiLEtBQUssTUFBUSxHQUFRLEdB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