pup-recorder 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/app.cjs +11 -11
- package/dist/cjs/cli.cjs +2 -2
- package/dist/cjs/index.cjs +2 -2
- package/dist/cli.js +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/package.json +1 -1
- package/src/app.ts +8 -16
- package/src/base/electron.ts +10 -11
- package/src/base/ffmpeg.ts +2 -2
- package/src/base/hwaccel.ts +32 -5
- package/src/base/limiter.ts +21 -18
- package/src/base/network.ts +126 -0
- package/src/base/waitable_event.ts +34 -0
- package/src/base/window.ts +10 -25
- package/src/common.ts +2 -2
- package/src/pup.ts +5 -0
- package/src/rust/lib.ts +2 -3
- package/src/base/proxy.ts +0 -42
package/dist/cjs/app.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';require('source-map-support/register.js');var electron=require('electron'),fs=require('fs'),path=require('path'),url=require('url'),
|
|
1
|
+
'use strict';require('source-map-support/register.js');var electron=require('electron'),fs=require('fs'),path=require('path'),url=require('url'),promises=require('fs/promises'),os=require('os'),crypto=require('crypto'),promises$1=require('timers/promises'),commander=require('commander'),_=require('zod');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var ___default=/*#__PURE__*/_interopDefault(_);var it=Object.create;var Z=Object.defineProperty;var st=Object.getOwnPropertyDescriptor;var Re=(t,e)=>(e=Symbol[t])?e:Symbol.for("Symbol."+t),D=t=>{throw TypeError(t)};var ve=(t,e,r)=>e in t?Z(t,e,{enumerable:true,configurable:true,writable:true,value:r}):t[e]=r;var Te=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var Pe=t=>[,,,it(null)],Ae=["class","method","getter","setter","accessor","field","value","get","set"],k=t=>t!==void 0&&typeof t!="function"?D("Function expected"):t,at=(t,e,r,o,i)=>({kind:Ae[t],name:e,metadata:o,addInitializer:n=>r._?D("Already initialized"):i.push(k(n||null))}),ee=(t,e)=>ve(e,Re("metadata"),t[3]),Ce=(t,e,r,o)=>{for(var i=0,n=t[e>>1],u=n&&n.length;i<u;i++)n[i].call(r);return o},I=(t,e,r,o,i,n)=>{var a,s,p,d,c=e&7,g=false,h=false,y=2,U=Ae[c+5],x=t[y]||(t[y]=[]),w=((i=i.prototype),st(i,r));for(var R=o.length-1;R>=0;R--)p=at(c,r,s={},t[3],x),(p.static=g,p.private=h,d=p.access={has:l=>r in l},(d.get=l=>l[r]),c>2),a=(0, o[R])(w[U],p),s._=1,k(a)&&(w[U]=a);return w&&Z(i,r,w),i},Ee=(t,e,r)=>ve(t,e+"",r);var pt=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,m=pt();var v=path.dirname(url.fileURLToPath(m));function Ie(t,e,r){try{return e(process.env[t])}catch{return r}}function T(t){if(typeof t=="number")return t;let e=Number(t);if(Number.isNaN(e))throw new Error(`Value ${t} is not a valid number`);return e}var ft=[path.join(v,"cjs/app.cjs"),path.join(v,"app.cjs"),path.join(v,"../../cjs/app.cjs")];ft.find(fs.existsSync);var oe=process.env,L=Ie("PUP_LOG_LEVEL",T,2),ne=oe.PUP_USE_INNER_PROXY==="1";oe.PUP_FFMPEG_PATH??"ffmpeg";oe.PUP_DISABLE_GPU==="1";var ie="<pup@debug>",se="<pup@info>",ae="<pup@warn>",ce="<pup@error>",ue="<pup@fatal>";function W(t,e){return function(...r){let o=r.map(i=>i instanceof Error?i.stack??String(i):i);return t.call(this,...o)}}var Se,Fe,ke,De,Le,P;Le=[W],De=[W],ke=[W],Fe=[W],Se=[W];var b=class{constructor(){Ce(P,5,this);Ee(this,"_impl");this.impl=console;}get impl(){return this._impl}set impl(e){let r=e.debug??console.debug,o=e.info??console.info,i=e.warn??console.warn,n=e.error??console.error;this._impl={debug:L>=3?r:void 0,info:L>=2?o:void 0,warn:L>=1?i:void 0,error:L>=0?n:void 0};}debug(...e){this.impl?.debug?.(ie,...e);}info(...e){this.impl?.info?.(se,...e);}warn(...e){this.impl?.warn?.(ae,...e);}error(...e){this.impl?.error?.(ce,...e);}fatal(...e){this.impl?.error?.(ue,...e),process.exit(1);}dispatch(e){e.startsWith(ie)?this.debug(e.slice(ie.length+1)):e.startsWith(se)?this.info(e.slice(se.length+1)):e.startsWith(ae)?this.warn(e.slice(ae.length+1)):e.startsWith(ce)?this.error(e.slice(ce.length+1)):this.info(e);}attach(e,r){return new Promise((o,i)=>{this.debug(`${r}.attach`);let n="",u=a=>{let s=a.toString();s.startsWith(ue)?n+=s.slice(ue.length+1):this.dispatch(s);};e.stderr?.on("data",u),e.stdout?.on("data",u),e.on("message",u).on("error",a=>{n+=a.message,e.kill();}).once("close",(a,s)=>{a||s||n?(n||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${r}.close`,{code:a,signal:s,fatal:n}),i(new Error(n))):(this.debug(`${r}.close`),o());}).on("unhandledRejection",a=>{this.error(`${r}.unhandled`,a);}).on("uncaughtExceptionMonitor",a=>{this.error(`${r}.unhandled`,a);});})}};P=Pe(),I(P,1,"debug",Le,b),I(P,1,"info",De,b),I(P,1,"warn",ke,b),I(P,1,"error",Fe,b),I(P,1,"fatal",Se,b),ee(P,b);var f=new b;var $e=`rust/${os.platform()}-${os.arch()}.node`,xt=[path.join(v,`../../${$e}`),path.join(v,`../${$e}`)],bt=Te(xt.find(fs.existsSync)),M=bt.FixedBufferWriter;var Pt=`
|
|
2
2
|
(function() {
|
|
3
3
|
if (window.__pup_audio_capturing__) return;
|
|
4
4
|
window.__pup_audio_capturing__ = true;
|
|
@@ -70,27 +70,27 @@
|
|
|
70
70
|
return origPlay.call(this);
|
|
71
71
|
};
|
|
72
72
|
})();
|
|
73
|
-
`;async function
|
|
73
|
+
`;async function Oe(t){let e=path.join(os.tmpdir(),`pup_audio_preload_${crypto.randomUUID()}.js`);await promises.writeFile(e,Pt),electron.session.defaultSession.registerPreloadScript({type:"frame",id:"pup-audio",filePath:e});let r=new M(t,4096*2*4),o={sampleRate:void 0,async teardown(){electron.ipcMain.removeAllListeners("audio-chunk"),electron.ipcMain.removeAllListeners("audio-meta"),await r.close(),electron.session.defaultSession.unregisterPreloadScript("pup-audio"),await promises.rm(e,{force:true});}};return electron.ipcMain.once("audio-meta",(i,n)=>{o.sampleRate=n.sampleRate;}),electron.ipcMain.on("audio-chunk",(i,n)=>{r.write(n);}),o}function Me(t,e){let{width:r,height:o}=e;return `<!DOCTYPE html>
|
|
74
74
|
<html>
|
|
75
75
|
<head>
|
|
76
76
|
<meta charset="UTF-8">
|
|
77
77
|
<style>
|
|
78
78
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
79
|
-
html, body { width: ${
|
|
79
|
+
html, body { width: ${r}px; height: ${o+1}px; overflow: hidden; }
|
|
80
80
|
#target {
|
|
81
81
|
position: absolute;
|
|
82
82
|
top: 0;
|
|
83
83
|
left: 0;
|
|
84
|
-
width: ${
|
|
85
|
-
height: ${
|
|
84
|
+
width: ${r}px;
|
|
85
|
+
height: ${o}px;
|
|
86
86
|
border: none;
|
|
87
87
|
display: block;
|
|
88
88
|
}
|
|
89
89
|
#stego {
|
|
90
90
|
position: absolute;
|
|
91
|
-
top: ${
|
|
91
|
+
top: ${o}px;
|
|
92
92
|
left: 0;
|
|
93
|
-
width: ${
|
|
93
|
+
width: ${r}px;
|
|
94
94
|
height: 1px;
|
|
95
95
|
display: block;
|
|
96
96
|
image-rendering: pixelated;
|
|
@@ -99,10 +99,10 @@
|
|
|
99
99
|
</head>
|
|
100
100
|
<body>
|
|
101
101
|
<iframe id="target" src="${t}"></iframe>
|
|
102
|
-
<canvas id="stego" width="${
|
|
102
|
+
<canvas id="stego" width="${r}" height="1"></canvas>
|
|
103
103
|
<script>
|
|
104
104
|
(function() {
|
|
105
|
-
const WIDTH = ${
|
|
105
|
+
const WIDTH = ${r};
|
|
106
106
|
const MARKER_WIDTH = 32;
|
|
107
107
|
const canvas = document.getElementById('stego');
|
|
108
108
|
const ctx = canvas.getContext('2d', { willReadFrequently: true });
|
|
@@ -158,6 +158,6 @@
|
|
|
158
158
|
})();
|
|
159
159
|
</script>
|
|
160
160
|
</body>
|
|
161
|
-
</html>`}function
|
|
161
|
+
</html>`}function Ne(t,e){let{width:r,height:o}=e;if(r<32||o<2)return;let i=o-1,n=0;for(let u=0;u<32;u++){let a=(i*r+u)*4,p=(t[a]??0)>127?1:0;n=n<<1|p;}if(n=n>>>0,!(!Number.isFinite(n)||n<0||n>1e7))return n}function Be(t){return t.sendCommand("Runtime.evaluate",{expression:"window.__pup_start_recording__()"})}function He(t){return t.sendCommand("Runtime.evaluate",{expression:"window.__pup_stop_recording__()"})}function je(t){let e=t.getSize();return e.width===0||e.height===0?true:t.isEmpty()}var pe=["file:","http:","https:","data:"],At=/^(file:|https?:|data:)/;function qe(t){if(At.test(t))return;let e=t.split(":")[0]+":",r=pe.includes(e)?`unsupported protocol: ${e}, expected ${pe.join(", ")}`:`invalid source format, expected ${pe.join(", ")}`;throw new Error(r)}var B=class{constructor(e){this.maxConcurrency=e;}_active=0;_queue=[];_ended=false;get active(){return this._active}get pending(){return this._queue.length}get stats(){return `active: ${this.active}, pending: ${this.pending}`}async schedule(e){if(this._ended)throw new Error("ended");return new Promise((r,o)=>{let i=()=>{this._active++,e().then(n=>{this._active--,r(n),this.next();}).catch(n=>{this._active--,o(n),this.next();});};this._queue.push(i),this.next();})}async end(){if(!this._ended)for(this._ended=true;this._active>0||this.pending>0;)await new Promise(e=>setTimeout(e,50));}next(){this._active<this.maxConcurrency&&this._queue.shift()?.();}};var H=class{_promise;_resolve;_timeoutToken;wait(e){if(this._promise)throw new Error("already waiting");return this._promise=new Promise(r=>{this._resolve=r,e?.timeout!==void 0&&(this._timeoutToken=setTimeout(()=>{e.onTimeout?.(),r();},e.timeout));}),this._promise}signal(){clearTimeout(this._timeoutToken),this._promise=void 0,this._resolve?.();}};var j="[Network]",Et=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]);function de(t){if(!t.startsWith("http"))return t;let e=new url.URL(t),r=Et.get(e.hostname);return r?(e.hostname=r,e.protocol="http:",e.toString()):t}function ze({source:t,window:e,useInnerProxy:r}){let o=e.webContents.session.webRequest,i=new B(10),n=new Map;async function u(s,p){let d=new H;n.set(s,d),await d.wait({timeout:1e4,onTimeout:p}).finally(()=>n.delete(s));}function a(s){n.get(s)?.signal();}o.onBeforeRequest((s,p)=>{let d=s.url,c=r?de(d):d;i.schedule(()=>{let g=`${e.id}_${s.id}`;return f.debug(j,"start:",{key:g,url:d,proxied:c,method:s.method,source:t,stats:i.stats}),p(c===d?{cancel:false}:{cancel:false,redirectURL:c}),u(g,()=>{f.warn(j,"maybe timeout:",{key:g,url:d,proxied:c,method:s.method,source:t});})});}),o.onHeadersReceived(({responseHeaders:s},p)=>{delete s?.["x-frame-options"],delete s?.["X-Frame-Options"],delete s?.["content-security-policy"],delete s?.["Content-Security-Policy"],p({cancel:false,responseHeaders:s});}),o.onCompleted(s=>{let p=`${e.id}_${s.id}`;a(p),f.debug(j,"completed:",{key:p,url:s.url,method:s.method,statusCode:s.statusCode,source:t});}),o.onErrorOccurred(s=>{let p=`${e.id}_${s.id}`;a(p),f.error(j,"error:",{key:p,url:s.url,method:s.method,error:s.error,source:t});});}function Ge(t){let e=t.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}function Ke(t){return new Promise(e=>setTimeout(e,t))}function Ve({fn:t,maxAttempts:e=3,timeout:r}){let o=new Error(`timeout over ${r}ms`);return async function(...i){let n=0;for(;;)try{let u=[t(...i)];return r&&u.push(promises$1.setTimeout(r).then(()=>{throw o})),await Promise.race(u)}catch(u){if(n++,n>=e)throw u;await Ke(Math.pow(2,n)*100+Math.random()*100);}}}var Ye="[Window]";function Je(t,e){return new Promise((r,o)=>{let i=setTimeout(()=>o(new Error("load window timeout")),3e4),n=u=>{clearTimeout(i),u?o(u):r();};t.webContents.once("did-finish-load",()=>n()),t.webContents.once("did-fail-load",(u,a,s,p)=>n(new Error(`failed to load ${p}: [${a}] ${s}`))),t.webContents.once("render-process-gone",(u,{exitCode:a,reason:s})=>n(new Error(`renderer crashed: ${a}, ${s}`))),e();})}async function Ft(t,e,r){qe(e);let{width:o,height:i,useInnerProxy:n}=r,u=e;n&&(u=de(e)),t.forEach(d=>{d.webContents.removeAllListeners(),Ge(d),f.debug(Ye,"destroy window:",d.id);});let a=new electron.BrowserWindow({width:o,height:i+1,show:false,transparent:true,backgroundColor:void 0,webPreferences:{offscreen:true,backgroundThrottling:false,nodeIntegration:true,nodeIntegrationInSubFrames:true,nodeIntegrationInWorker:true,contextIsolation:false,webSecurity:false,allowRunningInsecureContent:true,experimentalFeatures:true}});ze({source:e,window:a,useInnerProxy:n}),t.splice(0).forEach(d=>d.destroy()),t.push(a),a.webContents.on("console-message",({level:d,message:c,lineNumber:g,sourceId:h})=>{d==="error"&&f.error(Ye,"console:",{message:c,lineNumber:g,sourceId:h,source:e});});let s=Me(u,{width:o,height:i}),p=`data:text/html;charset=utf-8,${encodeURIComponent(s)}`;return await Je(a,()=>a.loadURL(p)),a}async function Xe(t,e){try{let r=[],o=await Ve({fn:Ft,maxAttempts:2})(r,t,e);return await Je(o,()=>o.reload()),o}catch(r){let{message:o,stack:i}=r,n={source:t,message:o,stack:i};throw new Error(`failed to load window: ${JSON.stringify(n)}`)}}var le="[Record]";async function Qe(t,e){f.info(le,"progress: 0%");let{outDir:r,fps:o,width:i,height:n,duration:u,withAudio:a}=e;await promises.mkdir(r,{recursive:true});let s=path.join(r,"output.pcm"),p=a?await Oe(s):void 0,d=await Xe(t,e),c=d.webContents.debugger;c.attach("1.3"),d.webContents.setFrameRate(o),d.webContents.isPainting()||d.webContents.startPainting();let g=path.join(r,"output.bgra"),h=Math.ceil(o*u),y=1e3/o,U=i*n*4,F=new M(g,U,o),x=0,w,R=0,l,A,fe,Y=C=>{x++;try{F.write(C);}catch(E){l??=E;}},he=(C,E,J)=>{if(l){fe?.(l);return}if(x>=h){A?.();return}if(je(J))return;let we=J.toBitmap(),O=Ne(we,J.getSize());if(O===void 0){l??=new Error(`no timestamp @ ${x}`);return}let ot=i*4,X=we.subarray(0,n*ot);if(w===void 0){Y(X),w=O;return}let Q=O-w;if(Q<y*.8)return;if(Q<=y*1.2)Y(X);else {let nt=Math.round(Q/y);for(let xe=0;xe<nt&&x<h;xe++)Y(X);}w=O;let ge=Math.floor(x/h*100);Math.abs(ge-R)>10&&(R=ge,f.info(le,`progress: ${Math.round(R)}%`));};d.webContents.on("paint",he),await Be(c);try{await new Promise((C,E)=>[A,fe]=[C,E]);}finally{await He(c),d.webContents.off("paint",he),await F.close(),await p?.teardown();}if(l||x===0)throw l??new Error("no frames captured");try{let C=p?.sampleRate?{pcmPath:s,sampleRate:p.sampleRate}:void 0,E={options:e,written:x,bgra:g,audio:C};await promises.writeFile(path.join(r,"record.json"),JSON.stringify(E)),f.info(le,`progress: 100%, ${x} frames written`);}finally{d.close();}}function $(t,e){return (...r)=>{try{let o=t(...r);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var Lt="--pup-priv-args";function Ze(){let t=process.argv,e=t.find(o=>o.startsWith(Lt));if(!e)return f.debug("procargv",t),process.argv;let r=["exec",...t.slice(-1)];return e=Buffer.from(e.split("=")[1],"base64").toString(),r.push(...JSON.parse(e)),f.debug("pupargs",r),r}var q=1920,z=1080,G=30,K=5,V="out";___default.default.object({duration:___default.default.number().optional().default(K).describe("Recording duration in seconds"),width:___default.default.number().optional().default(q).describe("Video width"),height:___default.default.number().optional().default(z).describe("Video height"),fps:___default.default.number().optional().default(G).describe("Frames per second"),withAlphaChannel:___default.default.boolean().optional().default(false).describe("Output with alpha channel"),withAudio:___default.default.boolean().optional().default(false).describe("Capture and encode audio"),outDir:___default.default.string().optional().default(V).describe("Output directory"),useInnerProxy:___default.default.boolean().optional().default(false).describe("Use bilibili inner proxy for resource access")});async function tt(t,e){commander.program.name(t).argument("<source>","file://, http(s)://, \u6216 data: URI").option("-w, --width <number>","\u89C6\u9891\u5BBD\u5EA6",`${q}`).option("-h, --height <number>","\u89C6\u9891\u9AD8\u5EA6",`${z}`).option("-f, --fps <number>","\u5E27\u7387",`${G}`).option("-t, --duration <number>","\u5F55\u5236\u65F6\u957F\uFF08\u79D2\uFF09",`${K}`).option("-o, --out-dir <path>","\u8F93\u51FA\u76EE\u5F55",`${V}`).option("-a, --with-alpha-channel","\u8F93\u51FA\u5305\u542B alpha \u901A\u9053\u7684\u89C6\u9891",false).option("-s, --with-audio","\u6355\u83B7\u5E76\u6DF7\u5165\u97F3\u9891",false).option("--use-inner-proxy","\u4F7F\u7528 B \u7AD9\u5185\u7F51\u4EE3\u7406\u52A0\u901F\u8D44\u6E90\u8BBF\u95EE",ne).action(async(r,o)=>{try{await e(r,{width:$(T,q)(o.width),height:$(T,z)(o.height),fps:$(T,G)(o.fps),duration:$(T,K)(o.duration),outDir:o.outDir??V,withAlphaChannel:o.withAlphaChannel??!1,withAudio:o.withAudio??!1,useInnerProxy:o.useInnerProxy??ne});}catch(i){f.fatal(i);}}),await commander.program.parseAsync(Ze());}process.once("exit",()=>electron.app.quit());var Wt="[App]";function rt(){f.debug(Wt,"gpu features:",electron.app.getGPUFeatureStatus());}electron.app.dock?.hide();tt("app",async(t,e)=>{try{electron.app.on("gpu-info-update",rt),await electron.app.whenReady(),rt(),await Qe(t,e);}finally{electron.app.quit();}});
|
|
162
162
|
//# sourceMappingURL=app.cjs.map
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErMzNlMjQ2NTBmNWFlZDE3YS9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vLi4vc3JjL2Jhc2UvYmFzZWRpci50cyIsIi4uLy4uL3NyYy9iYXNlL2Vudi50cyIsIi4uLy4uL3NyYy9iYXNlL3BhcnNlci50cyIsIi4uLy4uL3NyYy9iYXNlL2NvbnN0YW50cy50cyIsIi4uLy4uL3NyYy9iYXNlL2xvZ2dpbmcudHMiLCIuLi8uLi9zcmMvYmFzZS9od2FjY2VsLnRzIiwiLi4vLi4vc3JjL2Jhc2UvcHJvY2Vzcy50cyIsIi4uLy4uL3NyYy9iYXNlL2VsZWN0cm9uLnRzIiwiLi4vLi4vc3JjL3J1c3QvbGliLnRzIiwiLi4vLi4vc3JjL2Jhc2UvYXVkaW9fY2FwdHVyZS50cyIsIi4uLy4uL3NyYy9iYXNlL2ZyYW1lX3N5bmMudHMiLCIuLi8uLi9zcmMvYmFzZS9pbWFnZS50cyIsIi4uLy4uL3NyYy9iYXNlL2h0bWxfY2hlY2sudHMiLCIuLi8uLi9zcmMvYmFzZS9wcm94eS50cyIsIi4uLy4uL3NyYy9iYXNlL3RpbWluZy50cyIsIi4uLy4uL3NyYy9iYXNlL3JldHJ5LnRzIiwiLi4vLi4vc3JjL2Jhc2Uvd2luZG93LnRzIiwiLi4vLi4vc3JjL2Jhc2UvcmVjb3JkLnRzIiwiLi4vLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi8uLi9zcmMvYmFzZS9zY2hlbWEudHMiLCIuLi8uLi9zcmMvY29tbW9uLnRzIiwiLi4vLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6WyJnZXRJbXBvcnRNZXRhVXJsIiwiaW1wb3J0TWV0YVVybCIsImJhc2VkaXIiLCJkaXJuYW1lIiwiZmlsZVVSTFRvUGF0aCIsInBlbnYiLCJuYW1lIiwicGFyc2VyIiwiZGVmYXVsdFZhbHVlIiwicGFyc2VOdW1iZXIiLCJ2YWx1ZSIsIm51bSIsInB1cEFwcFNlYXJjaFBhdGhzIiwiam9pbiIsImV4aXN0c1N5bmMiLCJlbnYiLCJwdXBMb2dMZXZlbCIsInB1cFVzZUlubmVyUHJveHkiLCJwdXBEaXNhYmxlR1BVIiwiREVCVUciLCJJTkZPIiwiV0FSTiIsIkVSUk9SIiwiRkFUQUwiLCJzdGFja0hvb2siLCJ0YXJnZXQiLCJfY29udGV4dCIsIm1lc3NhZ2VzIiwicHJvY2Vzc2VkIiwibXNnIiwiX2ZhdGFsX2RlYyIsIl9lcnJvcl9kZWMiLCJfd2Fybl9kZWMiLCJfaW5mb19kZWMiLCJfZGVidWdfZGVjIiwiX2luaXQiLCJMb2dnZXIiLCJfX3J1bkluaXRpYWxpemVycyIsIl9fcHVibGljRmllbGQiLCJkZWJ1ZyIsImluZm8iLCJ3YXJuIiwiZXJyb3IiLCJtZXNzYWdlIiwicHJvYyIsInJlc29sdmUiLCJyZWplY3QiLCJmYXRhbCIsImRpc3BhdGNoIiwiZGF0YSIsImVyciIsImNvZGUiLCJzaWduYWwiLCJyZWFzb24iLCJfX2RlY29yYXRvclN0YXJ0IiwiX19kZWNvcmF0ZUVsZW1lbnQiLCJfX2RlY29yYXRvck1ldGFkYXRhIiwibG9nZ2VyIiwiVEFHIiwiZGV0ZWN0IiwiY29udHJvbGxlcnMiLCJncmFwaGljcyIsImMiLCJoYXNHcHUiLCJncHUiLCJQVVBfQVJHU19LRVkiLCJwYXJncyIsImFyZ3YiLCJwcml2IiwiYXJnIiwiYXJncyIsImVsZWN0cm9uT3B0cyIsIm9wdHMiLCJwbGF0Zm9ybSIsImFyY2giLCJydXN0UGF0aCIsIm5hdGl2ZVNlYXJjaFBhdGhzIiwibW9kIiwiX19yZXF1aXJlIiwiRml4ZWRCdWZmZXJXcml0ZXIiLCJBVURJT19DQVBUVVJFX1NDUklQVCIsInNldHVwQXVkaW9DYXB0dXJlIiwicGNtUGF0aCIsInByZWxvYWRQYXRoIiwidG1wZGlyIiwicmFuZG9tVVVJRCIsIndyaXRlRmlsZSIsInNlc3Npb24iLCJ3cml0ZXIiLCJjYXB0dXJlIiwiaXBjTWFpbiIsInJtIiwiX2UiLCJidWZmZXIiLCJidWlsZFdyYXBwZXJIVE1MIiwidGFyZ2V0VVJMIiwic2l6ZSIsIndpZHRoIiwiaGVpZ2h0IiwiZGVjb2RlVGltZXN0YW1wIiwiYml0bWFwIiwibWFya2VyUm93IiwidGltZXN0YW1wIiwiaSIsInBpeGVsSWR4IiwiYml0Iiwic3RhcnRTeW5jIiwiY2RwIiwic3RvcFN5bmMiLCJpc0VtcHR5IiwiaW1hZ2UiLCJTVVBQT1JURURfUFJPVE9DT0xTIiwiU09VUkNFX1BBVFRFUk4iLCJjaGVja0hUTUwiLCJzb3VyY2UiLCJwcm90b2NvbCIsIm1hcCIsInByb3hpZWRVcmwiLCJ1cmwiLCJwYXJzZWQiLCJVUkwiLCJlbmFibGVQcm94eSIsImRldGFpbHMiLCJjYWxsYmFjayIsInByb3hpZWQiLCJzbGVlcCIsIm1zIiwidXNlUmV0cnkiLCJmbiIsIm1heEF0dGVtcHRzIiwidGltZW91dCIsInRpbWVvdXRFcnJvciIsImF0dGVtcHQiLCJwcm9taXNlcyIsInNldFRpbWVvdXQiLCJlIiwid2FpdEZvckZpbmlzaCIsIndpbiIsImFjdGlvbiIsImRvbmUiLCJkZXNjIiwiZXhpdENvZGUiLCJvcGVuV2luZG93Iiwid2lucyIsIm9wdGlvbnMiLCJ1c2VJbm5lclByb3h5IiwicmVzcG9uc2VIZWFkZXJzIiwibWV0aG9kIiwic3JjIiwiQnJvd3NlcldpbmRvdyIsInciLCJsZXZlbCIsImxpbmVOdW1iZXIiLCJzb3VyY2VJZCIsIndyYXBwZXJIVE1MIiwiZGF0YVVSTCIsImxvYWRXaW5kb3ciLCJzdGFjayIsInJlY29yZCIsIm91dERpciIsImZwcyIsImR1cmF0aW9uIiwid2l0aEF1ZGlvIiwibWtkaXIiLCJhdWRpb0NhcHR1cmUiLCJiZ3JhIiwidG90YWwiLCJmcmFtZUludGVydmFsIiwiYnVmZmVyU2l6ZSIsIndyaXR0ZW4iLCJsYXN0V3JpdHRlblRpbWUiLCJwcm9ncmVzcyIsImZyYW1lRXJyb3IiLCJyZXNvbHZlciIsInJlamVjdGVyIiwic2NoZWR1bGVXcml0ZSIsInBhaW50IiwiX3IiLCJjdXJyZW50VGltZSIsImJ5dGVzUGVyUm93IiwiY3JvcHBlZCIsInRpbWVTaW5jZUxhc3RGcmFtZSIsImZyYW1lc1RvSW5zZXJ0IiwibmV3UHJvZ3Jlc3MiLCJyIiwiaiIsImF1ZGlvIiwicmVzdWx0Iiwibm9lcnIiLCJyZXQiLCJERUZBVUxUX1dJRFRIIiwiREVGQVVMVF9IRUlHSFQiLCJERUZBVUxUX0ZQUyIsIkRFRkFVTFRfRFVSQVRJT04iLCJERUZBVUxUX09VVF9ESVIiLCJ6IiwibWFrZUNMSSIsInByb2dyYW0iLCJhcHAiLCJvIiwiZXEiLCJrZXkiXSwibWFwcGluZ3MiOiJtcURBS0EsSUFBTUEsRUFBQUEsQ0FBbUIsSUFDdkIsT0FBTyxRQUFBLENBQWEsSUFDaEIsSUFBSSxHQUFBLENBQUksQ0FBQSxLQUFBLEVBQVEsVUFBVSxDQUFBLENBQUUsQ0FBQSxDQUFFLEtBQzdCLFFBQUEsQ0FBUyxhQUFBLEVBQWlCLFNBQVMsYUFBQSxDQUFjLE9BQUEsQ0FBUSxhQUFZLEdBQU0sUUFBQSxDQUMxRSxRQUFBLENBQVMsYUFBQSxDQUFjLEdBQUEsQ0FDdkIsSUFBSSxJQUFJLFNBQUEsQ0FBVyxRQUFBLENBQVMsT0FBTyxDQUFBLENBQUUsSUFBQSxDQUVoQ0MsRUFBZ0NELEVBQUFBLEVBQWlCLENDUHZELElBQU1FLEVBQVVDLFlBQUFBLENBQVFDLGlCQUFBQSxDQUFjSCxDQUFlLENBQUMsQ0FBQSxDQ0t0RCxTQUFTSSxHQUNkQyxDQUFBQSxDQUNBQyxDQUFBQSxDQUNBQyxDQUFBQSxDQUNlLENBQ2YsR0FBSSxDQUNGLE9BQU9ELENBQUFBLENBQU8sT0FBQSxDQUFRLEdBQUEsQ0FBSUQsQ0FBSSxDQUFDLENBQ2pDLE1BQVEsQ0FDTixPQUFPRSxDQUNULENBQ0YsQ0NsQk8sU0FBU0MsQ0FBQUEsQ0FBWUMsQ0FBQUEsQ0FBd0IsQ0FDbEQsR0FBSSxPQUFPQSxDQUFBQSxFQUFVLFNBQ25CLE9BQU9BLENBQUFBLENBRVQsSUFBTUMsQ0FBQUEsQ0FBTSxNQUFBLENBQU9ELENBQUssRUFDeEIsR0FBSSxNQUFBLENBQU8sS0FBQSxDQUFNQyxDQUFHLENBQUEsQ0FDbEIsTUFBTSxJQUFJLEtBQUEsQ0FBTSxDQUFBLE1BQUEsRUFBU0QsQ0FB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RUFDOUIsQ0FBQSxPQUFFLENBQ0FzRCxZQUFBQSxDQUFJLElBQUEsR0FDTixDQUNGLENBQUMsQ0FBQSIsImZpbGUiOiJhcHAuY2pzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU2hpbSBnbG9iYWxzIGluIGNqcyBidW5kbGVcbi8vIFRoZXJlJ3MgYSB3ZWlyZCBidWcgdGhhdCBlc2J1aWxkIHdpbGwgYWx3YXlzIGluamVjdCBpbXBvcnRNZXRhVXJsXG4vLyBpZiB3ZSBleHBvcnQgaXQgYXMgYGNvbnN0IGltcG9ydE1ldGFVcmwgPSAuLi4gX19maWxlbmFtZSAuLi5gXG4vLyBCdXQgdXNpbmcgYSBmdW5jdGlvbiB3aWxsIG5vdCBjYXVzZSB0aGlzIGlzc3VlXG5cbmNvbnN0IGdldEltcG9ydE1ldGFVcmwgPSAoKSA9PiBcbiAgdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiIFxuICAgID8gbmV3IFVSTChgZmlsZToke19fZmlsZW5hbWV9YCkuaHJlZiBcbiAgICA6IChkb2N1bWVudC5jdXJyZW50U2NyaXB0ICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnU0NSSVBUJykgXG4gICAgICA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjIFxuICAgICAgOiBuZXcgVVJMKFwibWFpbi5qc1wiLCBkb2N1bWVudC5iYXNlVVJJKS5ocmVmO1xuXG5leHBvcnQgY29uc3QgaW1wb3J0TWV0YVVybCA9IC8qIEBfX1BVUkVfXyAqLyBnZXRJbXBvcnRNZXRhVXJsKClcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjUuXG5cbmltcG9ydCB7IGRpcm5hbWUgfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gXCJ1cmxcIjtcblxuZXhwb3J0IGNvbnN0IGJhc2VkaXIgPSBkaXJuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSk7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI1LlxuXG5leHBvcnQgdHlwZSBFbnZQYXJzZXI8VD4gPSAodmFsdWU6IHVua25vd24pID0+IFQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZTogVCk6IFQ7XG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihcbiAgbmFtZTogc3RyaW5nLFxuICBwYXJzZXI6IEVudlBhcnNlcjxUPixcbiAgZGVmYXVsdFZhbHVlPzogVCxcbik6IFQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihcbiAgbmFtZTogc3RyaW5nLFxuICBwYXJzZXI6IEVudlBhcnNlcjxUPixcbiAgZGVmYXVsdFZhbHVlPzogVCxcbik6IFQgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiBwYXJzZXIocHJvY2Vzcy5lbnZbbmFtZV0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXIodmFsdWU6IHVua25vd24pOiBudW1iZXIge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGNvbnN0IG51bSA9IE51bWJlcih2YWx1ZSk7XG4gIGlmIChOdW1iZXIuaXNOYU4obnVtKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgJHt2YWx1ZX0gaXMgbm90IGEgdmFsaWQgbnVtYmVyYCk7XG4gIH1cbiAgcmV0dXJuIG51bTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgYmFzZWRpciB9IGZyb20gXCIuL2Jhc2VkaXJcIjtcbmltcG9ydCB7IHBlbnYgfSBmcm9tIFwiLi9lbnZcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmNvbnN0IHB1cEFwcFNlYXJjaFBhdGhzID0gW1xuICBqb2luKGJhc2VkaXIsIFwiY2pzL2FwcC5janNcIiksIC8vIHByb2Nlc3MgZnJvbSBkaXN0XG4gIGpvaW4oYmFzZWRpciwgXCJhcHAuY2pzXCIpLCAvLyBwcm9jZXNzIGZyb20gZGlzdC9janNcbiAgam9pbihiYXNlZGlyLCBcIi4uLy4uL2Nqcy9hcHAuY2pzXCIpLCAvLyBwcm9jZXNzIGZyb20gc3JjXG5dO1xuZXhwb3J0IGNvbnN0IHB1cEFwcFBhdGggPSBwdXBBcHBTZWFyY2hQYXRocy5maW5kKGV4aXN0c1N5bmMpITtcblxuY29uc3QgZW52ID0gcHJvY2Vzcy5lbnY7XG5leHBvcnQgY29uc3QgcHVwTG9nTGV2ZWwgPSBwZW52KFwiUFVQX0xPR19MRVZFTFwiLCBwYXJzZU51bWJlciwgMik7XG5leHBvcnQgY29uc3QgcHVwVXNlSW5uZXJQcm94eSA9IGVudltcIlBVUF9VU0VfSU5ORVJfUFJPWFlcIl0gPT09IFwiMVwiO1xuZXhwb3J0IGNvbnN0IHB1cEZGbXBlZ1BhdGggPSBlbnZbXCJQVVBfRkZNUEVHX1BBVEhcIl0gPz8gYGZmbXBlZ2A7XG5leHBvcnQgY29uc3QgcHVwRGlzYWJsZUdQVSA9IGVudltcIlBVUF9ESVNBQkxFX0dQVVwiXSA9PT0gXCIxXCI7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgeyBDaGlsZFByb2Nlc3MsIHR5cGUgU2VyaWFsaXphYmxlIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IHB1cExvZ0xldmVsIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nZ2VyTGlrZSB7XG4gIGRlYnVnPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICBpbmZvPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICB3YXJuPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICBlcnJvcj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG59XG5cbmNvbnN0IERFQlVHID0gXCI8cHVwQGRlYnVnPlwiO1xuY29uc3QgSU5GTyA9IFwiPHB1cEBpbmZvPlwiO1xuY29uc3QgV0FSTiA9IFwiPHB1cEB3YXJuPlwiO1xuY29uc3QgRVJST1IgPSBcIjxwdXBAZXJyb3I+XCI7XG5jb25zdCBGQVRBTCA9IFwiPHB1cEBmYXRhbD5cIjtcblxuZnVuY3Rpb24gc3RhY2tIb29rKHRhcmdldDogRnVuY3Rpb24sIF9jb250ZXh0OiBDbGFzc01ldGhvZERlY29yYXRvckNvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGlzOiBMb2dnZXIsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pIHtcbiAgICBjb25zdCBwcm9jZXNzZWQgPSBtZXNzYWdlcy5tYXAoKG1zZykgPT4ge1xuICAgICAgcmV0dXJuIG1zZyBpbnN0YW5jZW9mIEVycm9yID8gKG1zZy5zdGFjayA/PyBTdHJpbmcobXNnKSkgOiBtc2c7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRhcmdldC5jYWxsKHRoaXMsIC4uLnByb2Nlc3NlZCk7XG4gIH07XG59XG5cbmNsYXNzIExvZ2dlciBpbXBsZW1lbnRzIExvZ2dlckxpa2Uge1xuICBwcml2YXRlIF9pbXBsPzogTG9nZ2VyTGlrZTtcblxuICBnZXQgaW1wbCgpOiBMb2dnZXJMaWtlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW1wbDtcbiAgfVxuXG4gIHNldCBpbXBsKHZhbHVlOiBMb2dnZXJMaWtlKSB7XG4gICAgY29uc3QgZGVidWcgPSB2YWx1ZS5kZWJ1ZyA/PyBjb25zb2xlLmRlYnVnO1xuICAgIGNvbnN0IGluZm8gPSB2YWx1ZS5pbmZvID8/IGNvbnNvbGUuaW5mbztcbiAgICBjb25zdCB3YXJuID0gdmFsdWUud2FybiA/PyBjb25zb2xlLndhcm47XG4gICAgY29uc3QgZXJyb3IgPSB2YWx1ZS5lcnJvciA/PyBjb25zb2xlLmVycm9yO1xuICAgIHRoaXMuX2ltcGwgPSB7XG4gICAgICBkZWJ1ZzogcHVwTG9nTGV2ZWwgPj0gMyA/IGRlYnVnIDogdW5kZWZpbmVkLFxuICAgICAgaW5mbzogcHVwTG9nTGV2ZWwgPj0gMiA/IGluZm8gOiB1bmRlZmluZWQsXG4gICAgICB3YXJuOiBwdXBMb2dMZXZlbCA+PSAxID8gd2FybiA6IHVuZGVmaW5lZCxcbiAgICAgIGVycm9yOiBwdXBMb2dMZXZlbCA+PSAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaW1wbCA9IGNvbnNvbGU7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGRlYnVnKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmRlYnVnPy4oREVCVUcsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgaW5mbyguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5pbmZvPy4oSU5GTywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICB3YXJuKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/Lndhcm4/LihXQVJOLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGVycm9yKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmVycm9yPy4oRVJST1IsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZmF0YWwoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihGQVRBTCwgLi4ubWVzc2FnZXMpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2gobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgaWYgKG1lc3NhZ2Uuc3RhcnRzV2l0aChERUJVRykpIHtcbiAgICAgIHRoaXMuZGVidWcobWVzc2FnZS5zbGljZShERUJVRy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoSU5GTykpIHtcbiAgICAgIHRoaXMuaW5mbyhtZXNzYWdlLnNsaWNlKElORk8ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobWVzc2FnZS5zdGFydHNXaXRoKFdBUk4pKSB7XG4gICAgICB0aGlzLndhcm4obWVzc2FnZS5zbGljZShXQVJOLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1lc3NhZ2Uuc3RhcnRzV2l0aChFUlJPUikpIHtcbiAgICAgIHRoaXMuZXJyb3IobWVzc2FnZS5zbGljZShFUlJPUi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5mbyhtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBhdHRhY2gocHJvYzogQ2hpbGRQcm9jZXNzLCBuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5hdHRhY2hgKTtcbiAgICAgIGxldCBmYXRhbDogc3RyaW5nID0gXCJcIjtcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gKGRhdGE6IEJ1ZmZlciB8IFNlcmlhbGl6YWJsZSkgPT4ge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICBpZiAobWVzc2FnZS5zdGFydHNXaXRoKEZBVEFMKSkge1xuICAgICAgICAgIGZhdGFsICs9IG1lc3NhZ2Uuc2xpY2UoRkFUQUwubGVuZ3RoICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaChtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHByb2Muc3RkZXJyPy5vbihcImRhdGFcIiwgZGlzcGF0Y2gpO1xuICAgICAgcHJvYy5zdGRvdXQ/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jXG4gICAgICAgIC5vbihcIm1lc3NhZ2VcIiwgZGlzcGF0Y2gpXG4gICAgICAgIC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICBmYXRhbCArPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICBwcm9jLmtpbGwoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uY2UoXCJjbG9zZVwiLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgICAgaWYgKGNvZGUgfHwgc2lnbmFsIHx8IGZhdGFsKSB7XG4gICAgICAgICAgICBmYXRhbCB8fD0gYGNvbW1hbmQgZmFpbGVkOiAke3Byb2Muc3Bhd25hcmdzLmpvaW4oXCIgXCIpfWA7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCwgeyBjb2RlLCBzaWduYWwsIGZhdGFsIH0pO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihmYXRhbCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmhhbmRsZWRSZWplY3Rpb25cIiwgKHJlYXNvbikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgcmVhc29uKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwidW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yKGAke25hbWV9LnVuaGFuZGxlZGAsIGVycik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoKTtcblxuZXhwb3J0IHsgbG9nZ2VyIH07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI3LlxuXG5pbXBvcnQgeyBncmFwaGljcyB9IGZyb20gXCJzeXN0ZW1pbmZvcm1hdGlvblwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltIV0FjY2VsXVwiO1xuXG5hc3luYyBmdW5jdGlvbiBkZXRlY3QoKSB7XG4gIGNvbnN0IHsgY29udHJvbGxlcnMgfSA9IGF3YWl0IGdyYXBoaWNzKCk7XG4gIHJldHVybiBjb250cm9sbGVycy5zb21lKChjKSA9PiBjLnZlbmRvci5sZW5ndGgpO1xufVxuXG5leHBvcnQgY29uc3QgaGFzR3B1ID0gZGV0ZWN0KCkudGhlbigoZ3B1KSA9PiB7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiR1BVIGRldGVjdGVkOlwiLCBncHUpO1xuICByZXR1cm4gZ3B1O1xufSk7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbXBvcnQgeyBzcGF3biwgdHlwZSBDaGlsZFByb2Nlc3MsIHR5cGUgU3Bhd25PcHRpb25zIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuZXhwb3J0IGNvbnN0IFBVUF9BUkdTX0tFWSA9IFwiLS1wdXAtcHJpdi1hcmdzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJncygpIHtcbiAgY29uc3QgYXJndiA9IHByb2Nlc3MuYXJndjtcbiAgbGV0IHByaXYgPSBhcmd2LmZpbmQoKGFyZykgPT4gYXJnLnN0YXJ0c1dpdGgoUFVQX0FSR1NfS0VZKSk7XG4gIGlmICghcHJpdikge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInByb2Nhcmd2XCIsIGFyZ3YpO1xuICAgIHJldHVybiBwcm9jZXNzLmFyZ3Y7XG4gIH1cbiAgY29uc3QgYXJncyA9IFtcImV4ZWNcIiwgLi4uYXJndi5zbGljZSgtMSldO1xuICBwcml2ID0gQnVmZmVyLmZyb20ocHJpdi5zcGxpdChcIj1cIilbMV0hLCBcImJhc2U2NFwiKS50b1N0cmluZygpO1xuICBhcmdzLnB1c2goLi4uSlNPTi5wYXJzZShwcml2KSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInB1cGFyZ3NcIiwgYXJncyk7XG4gIHJldHVybiBhcmdzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NIYW5kbGUge1xuICBwcm9jZXNzOiBDaGlsZFByb2Nlc3M7XG4gIHdhaXQ6IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGVjKGNtZDogc3RyaW5nLCBvcHRpb25zPzogU3Bhd25PcHRpb25zKTogUHJvY2Vzc0hhbmRsZSB7XG4gIGNvbnN0IHBhcnRzID0gY21kLnNwbGl0KFwiIFwiKS5maWx0ZXIoKHMpID0+IHMubGVuZ3RoKTtcbiAgY29uc3QgW2NvbW1hbmQsIC4uLmFyZ3NdID0gcGFydHM7XG4gIGlmICghY29tbWFuZCkgdGhyb3cgbmV3IEVycm9yKFwiZW1wdHkgY29tbWFuZFwiKTtcbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmQsIGFyZ3MsIHtcbiAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG4gIHJldHVybiB7IHByb2Nlc3M6IHByb2MsIHdhaXQ6IGxvZ2dlci5hdHRhY2gocHJvYywgY29tbWFuZCkgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjUuXG5cbmltcG9ydCBlbGVjdHJvbiwgeyB0eXBlIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHBsYXRmb3JtIH0gZnJvbSBcInByb2Nlc3NcIjtcbmltcG9ydCB7IHB1cERpc2FibGVHUFUsIHB1cExvZ0xldmVsIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBoYXNHcHUgfSBmcm9tIFwiLi9od2FjY2VsXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5pbXBvcnQgeyBleGVjLCBQVVBfQVJHU19LRVkgfSBmcm9tIFwiLi9wcm9jZXNzXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbGVjdHJvbk9wdHMoKSB7XG4gIGNvbnN0IG9wdHMgPSBbXG4gICAgLy8g5a655Zmo5rKZ566xXG4gICAgXCJuby1zYW5kYm94XCIsXG4gICAgXCJkaXNhYmxlLWRldi1zaG0tdXNhZ2VcIixcbiAgICAvLyDot6jln58v5a6J5YWo77yI5b2V5Yi25Zy65pmv6ZyA6KaB5Yqg6L295Lu75oSP6LWE5rqQ77yJXG4gICAgXCJkaXNhYmxlLXdlYi1zZWN1cml0eVwiLFxuICAgIFwiZGlzYWJsZS1zaXRlLWlzb2xhdGlvbi10cmlhbHNcIixcbiAgICBcImlnbm9yZS1jZXJ0aWZpY2F0ZS1lcnJvcnNcIixcbiAgICAvLyDlvZXliLbooYzkuLpcbiAgICBcImRpc2FibGUtYmxpbmstZmVhdHVyZXM9QXV0b21hdGlvbkNvbnRyb2xsZWRcIixcbiAgICBcIm11dGUtYXVkaW9cIixcbiAgICBcImF1dG9wbGF5LXBvbGljeT1uby11c2VyLWdlc3R1cmUtcmVxdWlyZWRcIixcbiAgICBcImRpc2FibGUtZXh0ZW5zaW9uc1wiLFxuICAgIC8vIOa4suafk1xuICAgIFwiaGVhZGxlc3M9bmV3XCIsXG4gICAgXCJmb3JjZS1kZXZpY2Utc2NhbGUtZmFjdG9yPTFcIixcbiAgICBcImZvcmNlLWNvbG9yLXByb2ZpbGU9c3JnYlwiLFxuICAgIFwiaWdub3JlLWdwdS1ibG9ja2xpc3RcIixcbiAgICBcInVzZS1nbD1hbmdsZVwiLFxuICBdO1xuICBpZiAocHVwTG9nTGV2ZWwgPCAzKSB7XG4gICAgb3B0cy5wdXNoKFwibG9nLWxldmVsPTNcIik7XG4gIH1cblxuICBjb25zdCBlbmFibGVHcHUgPSAoYXdhaXQgaGFzR3B1KSAmJiAhcHVwRGlzYWJsZUdQVTtcbiAgaWYgKCFlbmFibGVHcHUpIHtcbiAgICBvcHRzLnB1c2goXCJ1c2UtYW5nbGU9c3dpZnRzaGFkZXJcIiwgXCJlbmFibGUtdW5zYWZlLXN3aWZ0c2hhZGVyXCIpO1xuICAgIHJldHVybiBvcHRzO1xuICB9XG5cbiAgb3B0cy5wdXNoKFwiZGlzYWJsZS1ncHUtc2FuZGJveFwiLCBcImVuYWJsZS11bnNhZmUtd2ViZ3B1XCIpO1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJkYXJ3aW5cIikge1xuICAgIG9wdHMucHVzaChcInVzZS1hbmdsZT1tZXRhbFwiKTtcbiAgfSBlbHNlIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCIpIHtcbiAgICBvcHRzLnB1c2goXCJ1c2UtYW5nbGU9ZDNkMTFcIik7XG4gIH0gZWxzZSB7XG4gICAgb3B0cy5wdXNoKFxuICAgICAgXCJ1c2UtYW5nbGU9dnVsa2FuXCIsXG4gICAgICBcImVuYWJsZS1mZWF0dXJlcz1WdWxrYW5cIixcbiAgICAgIFwiZGlzYWJsZS12dWxrYW4tc3VyZmFjZVwiLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG9wdHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWxlY3Ryb25BcHBPcHRpb25zIHtcbiAgc2l6ZTogU2l6ZTtcbiAgYXBwOiB1bmtub3duO1xuICBhcmdzOiB1bmtub3duW107XG59XG5cbmNvbnN0IFRBRyA9IFwiW0VsZWN0cm9uXVwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuRWxlY3Ryb25BcHAob3B0aW9uczogRWxlY3Ryb25BcHBPcHRpb25zKSB7XG4gIGNvbnN0IHsgYXBwLCBhcmdzLCBzaXplIH0gPSBvcHRpb25zO1xuICBjb25zdCBjbWRQYXJ0czogdW5rbm93bltdID0gW107XG4gIGlmIChwbGF0Zm9ybSA9PT0gXCJsaW51eFwiKSB7XG4gICAgY21kUGFydHMucHVzaChcbiAgICAgIGB4dmZiLXJ1bmAsXG4gICAgICBgLS1hdXRvLXNlcnZlcm51bWAsXG4gICAgICBgLS1zZXJ2ZXItYXJncz1cIi1zY3JlZW4gMCAke3NpemUud2lkdGh9eCR7c2l6ZS5oZWlnaHR9eDI0XCJgLFxuICAgICk7XG4gIH1cbiAgY29uc3Qgb3B0cyA9IGF3YWl0IGVsZWN0cm9uT3B0cygpO1xuICBjb25zdCBlbGVjdHJvbkFyZ3MgPSBvcHRzLm1hcCgoYSkgPT4gYC0tJHthfWApO1xuICBjb25zdCBiYXNlNjRBcmdzID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoYXJncykpLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuICBlbGVjdHJvbkFyZ3MucHVzaChgJHtQVVBfQVJHU19LRVl9PSR7YmFzZTY0QXJnc31gKTtcbiAgY21kUGFydHMucHVzaChlbGVjdHJvbiwgLi4uZWxlY3Ryb25BcmdzLCBhcHApO1xuICBjb25zdCBjbWQgPSBjbWRQYXJ0cy5qb2luKFwiIFwiKTtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgY21kKTtcbiAgcmV0dXJuIGV4ZWMoY21kLCB7XG4gICAgc3RkaW86IFtcImlnbm9yZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgIHNoZWxsOiBwbGF0Zm9ybSA9PT0gXCJsaW51eFwiLFxuICAgIGVudjoge1xuICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICBSVVNUX0JBQ0tUUkFDRTogXCJmdWxsXCIsXG4gICAgfSxcbiAgfSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzEwLlxuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGJhc2VkaXIgfSBmcm9tIFwiLi4vYmFzZS9iYXNlZGlyXCI7XG5cbmNvbnN0IHsgcGxhdGZvcm0sIGFyY2ggfSA9IHByb2Nlc3M7XG5cbmNvbnN0IHJ1c3RQYXRoID0gYHJ1c3QvJHtwbGF0Zm9ybX0tJHthcmNofS5ub2RlYDtcblxuY29uc3QgbmF0aXZlU2VhcmNoUGF0aHMgPSBbXG4gIGpvaW4oYmFzZWRpciwgYC4uLy4uLyR7cnVzdFBhdGh9YCksIC8vIHByb2Nlc3Mgc3RhcnQgZnJvbSBzcmNcbiAgam9pbihiYXNlZGlyLCBgLi4vJHtydXN0UGF0aH1gKSwgLy8gcHJvY2VzcyBzdGFydCBmcm9tIGRpc3Rcbl07XG5jb25zdCBtb2QgPSByZXF1aXJlKG5hdGl2ZVNlYXJjaFBhdGhzLmZpbmQoZXhpc3RzU3luYykhKTtcblxuZXhwb3J0IGludGVyZmFjZSBGaXhlZEJ1ZmZlcldyaXRlciB7XG4gIG5ldyAoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGJ1ZmZlclNpemU6IG51bWJlcixcbiAgICBxdWV1ZURlcHRoPzogbnVtYmVyLFxuICApOiBGaXhlZEJ1ZmZlcldyaXRlcjtcblxuICB3cml0ZShidWZmZXI6IEJ1ZmZlcik6IHZvaWQ7XG5cbiAgY2xvc2UoKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGNvbnN0IEZpeGVkQnVmZmVyV3JpdGVyID0gbW9kLkZpeGVkQnVmZmVyV3JpdGVyIGFzIEZpeGVkQnVmZmVyV3JpdGVyO1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8wMi5cblxuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IGlwY01haW4sIHNlc3Npb24gfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHJtLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJvc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBGaXhlZEJ1ZmZlcldyaXRlciB9IGZyb20gXCIuLi9ydXN0L2xpYlwiO1xuXG5jb25zdCBBVURJT19DQVBUVVJFX1NDUklQVCA9IGBcbihmdW5jdGlvbigpIHtcbiAgaWYgKHdpbmRvdy5fX3B1cF9hdWRpb19jYXB0dXJpbmdfXykgcmV0dXJuO1xuICB3aW5kb3cuX19wdXBfYXVkaW9fY2FwdHVyaW5nX18gPSB0cnVlO1xuXG4gIGNvbnN0IHsgaXBjUmVuZGVyZXIgfSA9IHJlcXVpcmUoJ2VsZWN0cm9uJyk7XG4gIGNvbnN0IGNhcHR1cmVkQ29udGV4dHMgPSBuZXcgV2Vha1NldCgpO1xuICBjb25zdCBzb3VyY2VkRWxlbWVudHMgPSBuZXcgV2Vha1NldCgpO1xuICBsZXQgbWV0YVNlbnQgPSBmYWxzZTtcblxuICBjb25zdCBvcmlnQ3JlYXRlTUVTID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2U7XG4gIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlID0gZnVuY3Rpb24oZWwpIHtcbiAgICBzb3VyY2VkRWxlbWVudHMuYWRkKGVsKTtcbiAgICByZXR1cm4gb3JpZ0NyZWF0ZU1FUy5jYWxsKHRoaXMsIGVsKTtcbiAgfTtcblxuICBjb25zdCBvcmlnQ29ubmVjdCA9IEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdDtcbiAgQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24oZGVzdCwgb3V0SWR4LCBpbklkeCkge1xuICAgIGNvbnN0IGNhcHR1cmVOb2RlID0gZGVzdD8uY29udGV4dD8uX19wdXBfY2FwdHVyZU5vZGVfXztcbiAgICBpZiAoY2FwdHVyZU5vZGUgJiYgZGVzdCA9PT0gZGVzdC5jb250ZXh0LmRlc3RpbmF0aW9uICYmIHRoaXMgIT09IGNhcHR1cmVOb2RlKSB7XG4gICAgICBvcmlnQ29ubmVjdC5jYWxsKHRoaXMsIGNhcHR1cmVOb2RlLCBvdXRJZHgsIGluSWR4KTtcbiAgICB9XG4gICAgcmV0dXJuIG9yaWdDb25uZWN0LmNhbGwodGhpcywgZGVzdCwgb3V0SWR4LCBpbklkeCk7XG4gIH07XG5cbiAgY29uc3QgT3JpZ0FDID0gd2luZG93LkF1ZGlvQ29udGV4dCB8fCB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0O1xuICBpZiAoIU9yaWdBQykgcmV0dXJuO1xuXG4gIGZ1bmN0aW9uIFBhdGNoZWRBQygpIHtcbiAgICBjb25zdCBjdHggPSBuZXcgT3JpZ0FDKC4uLmFyZ3VtZW50cyk7XG4gICAgaWYgKCFjYXB0dXJlZENvbnRleHRzLmhhcyhjdHgpKSB7XG4gICAgICBjYXB0dXJlZENvbnRleHRzLmFkZChjdHgpO1xuICAgICAgaWYgKCFtZXRhU2VudCkge1xuICAgICAgICBtZXRhU2VudCA9IHRydWU7XG4gICAgICAgIGlwY1JlbmRlcmVyLnNlbmQoJ2F1ZGlvLW1ldGEnLCB7IHNhbXBsZVJhdGU6IGN0eC5zYW1wbGVSYXRlIH0pO1xuICAgICAgfVxuICAgICAgY29uc3Qgbm9kZSA9IGN0eC5jcmVhdGVTY3JpcHRQcm9jZXNzb3IoNDA5NiwgMiwgMik7XG4gICAgICBub2RlLm9uYXVkaW9wcm9jZXNzID0gKGUpID0+IHtcbiAgICAgICAgY29uc3QgTCA9IGUuaW5wdXRCdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7XG4gICAgICAgIGNvbnN0IFIgPSBlLmlucHV0QnVmZmVyLmdldENoYW5uZWxEYXRhKDEpO1xuICAgICAgICBjb25zdCBvdXQgPSBuZXcgRmxvYXQzMkFycmF5KEwubGVuZ3RoICogMik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIG91dFtpICogMl0gPSBMW2ldO1xuICAgICAgICAgIG91dFtpICogMiArIDFdID0gUltpXTtcbiAgICAgICAgfVxuICAgICAgICBpcGNSZW5kZXJlci5zZW5kKCdhdWRpby1jaHVuaycsIEJ1ZmZlci5mcm9tKG91dC5idWZmZXIpKTtcbiAgICAgIH07XG4gICAgICBub2RlLmNvbm5lY3QoY3R4LmRlc3RpbmF0aW9uKTtcbiAgICAgIGN0eC5fX3B1cF9jYXB0dXJlTm9kZV9fID0gbm9kZTtcbiAgICB9XG4gICAgcmV0dXJuIGN0eDtcbiAgfVxuICBQYXRjaGVkQUMucHJvdG90eXBlID0gT3JpZ0FDLnByb3RvdHlwZTtcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKFBhdGNoZWRBQywgT3JpZ0FDKTtcbiAgd2luZG93LkF1ZGlvQ29udGV4dCA9IFBhdGNoZWRBQztcbiAgaWYgKCd3ZWJraXRBdWRpb0NvbnRleHQnIGluIHdpbmRvdykgd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCA9IFBhdGNoZWRBQztcblxuICBjb25zdCBvcmlnUGxheSA9IEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLnBsYXk7XG4gIEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuX19wdXBfY2FwdHVyZWRfXykge1xuICAgICAgdGhpcy5fX3B1cF9jYXB0dXJlZF9fID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGVsID0gdGhpcztcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAoIXNvdXJjZWRFbGVtZW50cy5oYXMoZWwpKSB7XG4gICAgICAgICAgY29uc3QgY3R4ID0gbmV3IFBhdGNoZWRBQygpO1xuICAgICAgICAgIGN0eC5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UoZWwpLmNvbm5lY3QoY3R4LmRlc3RpbmF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBvcmlnUGxheS5jYWxsKHRoaXMpO1xuICB9O1xufSkoKTtcbmA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9DYXB0dXJlIHtcbiAgc2FtcGxlUmF0ZT86IG51bWJlcjtcbiAgdGVhcmRvd24oKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwQXVkaW9DYXB0dXJlKFxuICBwY21QYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPEF1ZGlvQ2FwdHVyZT4ge1xuICBjb25zdCBwcmVsb2FkUGF0aCA9IGpvaW4odG1wZGlyKCksIGBwdXBfYXVkaW9fcHJlbG9hZF8ke3JhbmRvbVVVSUQoKX0uanNgKTtcbiAgYXdhaXQgd3JpdGVGaWxlKHByZWxvYWRQYXRoLCBBVURJT19DQVBUVVJFX1NDUklQVCk7XG4gIHNlc3Npb24uZGVmYXVsdFNlc3Npb24ucmVnaXN0ZXJQcmVsb2FkU2NyaXB0KHtcbiAgICB0eXBlOiBcImZyYW1lXCIsXG4gICAgaWQ6IFwicHVwLWF1ZGlvXCIsXG4gICAgZmlsZVBhdGg6IHByZWxvYWRQYXRoLFxuICB9KTtcblxuICBjb25zdCB3cml0ZXIgPSBuZXcgRml4ZWRCdWZmZXJXcml0ZXIocGNtUGF0aCwgNDA5NiAqIDIgKiA0KTtcbiAgY29uc3QgY2FwdHVyZTogQXVkaW9DYXB0dXJlID0ge1xuICAgIHNhbXBsZVJhdGU6IHVuZGVmaW5lZCxcbiAgICBhc3luYyB0ZWFyZG93bigpIHtcbiAgICAgIGlwY01haW4ucmVtb3ZlQWxsTGlzdGVuZXJzKFwiYXVkaW8tY2h1bmtcIik7XG4gICAgICBpcGNNYWluLnJlbW92ZUFsbExpc3RlbmVycyhcImF1ZGlvLW1ldGFcIik7XG4gICAgICBhd2FpdCB3cml0ZXIuY2xvc2UoKTtcbiAgICAgIHNlc3Npb24uZGVmYXVsdFNlc3Npb24udW5yZWdpc3RlclByZWxvYWRTY3JpcHQoXCJwdXAtYXVkaW9cIik7XG4gICAgICBhd2FpdCBybShwcmVsb2FkUGF0aCwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9LFxuICB9O1xuXG4gIGlwY01haW4ub25jZShcImF1ZGlvLW1ldGFcIiwgKF9lLCBkYXRhOiB7IHNhbXBsZVJhdGU6IG51bWJlciB9KSA9PiB7XG4gICAgY2FwdHVyZS5zYW1wbGVSYXRlID0gZGF0YS5zYW1wbGVSYXRlO1xuICB9KTtcbiAgaXBjTWFpbi5vbihcImF1ZGlvLWNodW5rXCIsIChfZSwgYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICB3cml0ZXIud3JpdGUoYnVmZmVyKTtcbiAgfSk7XG4gIHJldHVybiBjYXB0dXJlO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHR5cGUgeyBEZWJ1Z2dlciwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5leHBvcnQgY29uc3QgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEggPSAzMjtcbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9IRUlHSFQgPSAxO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRXcmFwcGVySFRNTCh0YXJnZXRVUkw6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gc2l6ZTtcbiAgcmV0dXJuIGA8IURPQ1RZUEUgaHRtbD5cbjxodG1sPlxuPGhlYWQ+XG4gIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiPlxuICA8c3R5bGU+XG4gICAgKiB7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxuICAgIGh0bWwsIGJvZHkgeyB3aWR0aDogJHt3aWR0aH1weDsgaGVpZ2h0OiAke2hlaWdodCArIDF9cHg7IG92ZXJmbG93OiBoaWRkZW47IH1cbiAgICAjdGFyZ2V0IHsgXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IFxuICAgICAgdG9wOiAwOyBcbiAgICAgIGxlZnQ6IDA7IFxuICAgICAgd2lkdGg6ICR7d2lkdGh9cHg7IFxuICAgICAgaGVpZ2h0OiAke2hlaWdodH1weDsgXG4gICAgICBib3JkZXI6IG5vbmU7IFxuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgICNzdGVnbyB7IFxuICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgIHRvcDogJHtoZWlnaHR9cHg7IFxuICAgICAgbGVmdDogMDsgXG4gICAgICB3aWR0aDogJHt3aWR0aH1weDsgXG4gICAgICBoZWlnaHQ6IDFweDsgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGltYWdlLXJlbmRlcmluZzogcGl4ZWxhdGVkO1xuICAgIH1cbiAgPC9zdHlsZT5cbjwvaGVhZD5cbjxib2R5PlxuICA8aWZyYW1lIGlkPVwidGFyZ2V0XCIgc3JjPVwiJHt0YXJnZXRVUkx9XCI+PC9pZnJhbWU+XG4gIDxjYW52YXMgaWQ9XCJzdGVnb1wiIHdpZHRoPVwiJHt3aWR0aH1cIiBoZWlnaHQ9XCIxXCI+PC9jYW52YXM+XG4gIDxzY3JpcHQ+XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgV0lEVEggPSAke3dpZHRofTtcbiAgICAgIGNvbnN0IE1BUktFUl9XSURUSCA9ICR7RlJBTUVfU1lOQ19NQVJLRVJfV0lEVEh9O1xuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ZWdvJyk7XG4gICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnLCB7IHdpbGxSZWFkRnJlcXVlbnRseTogdHJ1ZSB9KTtcbiAgICAgIGxldCBzdGFydFRpbWUgPSBudWxsO1xuICAgICAgbGV0IHJhZklkID0gbnVsbDtcblxuICAgICAgZnVuY3Rpb24gZW5jb2RlVGltZXN0YW1wKHRpbWVzdGFtcE1zKSB7XG4gICAgICAgIGNvbnN0IGltYWdlRGF0YSA9IGN0eC5jcmVhdGVJbWFnZURhdGEoV0lEVEgsIDEpO1xuICAgICAgICBjb25zdCBkYXRhID0gaW1hZ2VEYXRhLmRhdGE7XG4gICAgICAgIFxuICAgICAgICBjb25zdCB0aW1lc3RhbXBJbnQgPSBNYXRoLmZsb29yKHRpbWVzdGFtcE1zKSA+Pj4gMDtcbiAgICAgICAgXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTUFSS0VSX1dJRFRIOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBiaXQgPSAodGltZXN0YW1wSW50ID4+PiAoTUFSS0VSX1dJRFRIIC0gMSAtIGkpKSAmIDE7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBiaXQgPyAyNTUgOiAwO1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMV0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgZm9yIChsZXQgaSA9IE1BUktFUl9XSURUSDsgaSA8IFdJRFRIOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZHggPSBpICogNDtcbiAgICAgICAgICBkYXRhW2lkeF0gPSAwO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMV0gPSAwO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMl0gPSAwO1xuICAgICAgICAgIGRhdGFbaWR4ICsgM10gPSAyNTU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGN0eC5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCAwLCAwKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdXBkYXRlTG9vcCgpIHtcbiAgICAgICAgaWYgKHN0YXJ0VGltZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBlbGFwc2VkID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcChlbGFwc2VkKTtcbiAgICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdGFydF9yZWNvcmRpbmdfXyA9ICgpID0+IHtcbiAgICAgICAgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcCgwKTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUxvb3ApO1xuICAgICAgfTtcblxuICAgICAgd2luZG93Ll9fcHVwX3N0b3BfcmVjb3JkaW5nX18gPSAoKSA9PiB7XG4gICAgICAgIGlmIChyYWZJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcbiAgICAgICAgICByYWZJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKTtcbiAgPC9zY3JpcHQ+XG48L2JvZHk+XG48L2h0bWw+YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVRpbWVzdGFtcChcbiAgYml0bWFwOiBCdWZmZXIsXG4gIHNpemU6IFNpemUsXG4pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIGlmICh3aWR0aCA8IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIIHx8IGhlaWdodCA8IDIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgbWFya2VyUm93ID0gaGVpZ2h0IC0gMTtcblxuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSDsgaSsrKSB7XG4gICAgY29uc3QgcGl4ZWxJZHggPSAobWFya2VyUm93ICogd2lkdGggKyBpKSAqIDQ7XG4gICAgY29uc3QgciA9IGJpdG1hcFtwaXhlbElkeF0gPz8gMDtcbiAgICBjb25zdCBiaXQgPSByID4gMTI3ID8gMSA6IDA7XG4gICAgdGltZXN0YW1wID0gKHRpbWVzdGFtcCA8PCAxKSB8IGJpdDtcbiAgfVxuXG4gIHRpbWVzdGFtcCA9IHRpbWVzdGFtcCA+Pj4gMDtcblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0aW1lc3RhbXApIHx8IHRpbWVzdGFtcCA8IDAgfHwgdGltZXN0YW1wID4gMWU3KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB0aW1lc3RhbXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFN5bmMoY2RwOiBEZWJ1Z2dlcikge1xuICByZXR1cm4gY2RwLnNlbmRDb21tYW5kKFwiUnVudGltZS5ldmFsdWF0ZVwiLCB7XG4gICAgZXhwcmVzc2lvbjogYHdpbmRvdy5fX3B1cF9zdGFydF9yZWNvcmRpbmdfXygpYCxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wU3luYyhjZHA6IERlYnVnZ2VyKSB7XG4gIHJldHVybiBjZHAuc2VuZENvbW1hbmQoXCJSdW50aW1lLmV2YWx1YXRlXCIsIHtcbiAgICBleHByZXNzaW9uOiBgd2luZG93Ll9fcHVwX3N0b3BfcmVjb3JkaW5nX18oKWAsXG4gIH0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHR5cGUgeyBOYXRpdmVJbWFnZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eShpbWFnZTogTmF0aXZlSW1hZ2UpIHtcbiAgY29uc3Qgc2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgaWYgKHNpemUud2lkdGggPT09IDAgfHwgc2l6ZS5oZWlnaHQgPT09IDApIHJldHVybiB0cnVlO1xuICByZXR1cm4gaW1hZ2UuaXNFbXB0eSgpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuY29uc3QgU1VQUE9SVEVEX1BST1RPQ09MUyA9IFtcImZpbGU6XCIsIFwiaHR0cDpcIiwgXCJodHRwczpcIiwgXCJkYXRhOlwiXTtcbmNvbnN0IFNPVVJDRV9QQVRURVJOID0gL14oZmlsZTp8aHR0cHM/OnxkYXRhOikvO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tIVE1MKHNvdXJjZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChTT1VSQ0VfUEFUVEVSTi50ZXN0KHNvdXJjZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwcm90b2NvbCA9IHNvdXJjZS5zcGxpdChcIjpcIilbMF0gKyBcIjpcIjtcbiAgY29uc3QgbWVzc2FnZSA9IFNVUFBPUlRFRF9QUk9UT0NPTFMuaW5jbHVkZXMocHJvdG9jb2wpXG4gICAgPyBgdW5zdXBwb3J0ZWQgcHJvdG9jb2w6ICR7cHJvdG9jb2x9LCBleHBlY3RlZCAke1NVUFBPUlRFRF9QUk9UT0NPTFMuam9pbihcIiwgXCIpfWBcbiAgICA6IGBpbnZhbGlkIHNvdXJjZSBmb3JtYXQsIGV4cGVjdGVkICR7U1VQUE9SVEVEX1BST1RPQ09MUy5qb2luKFwiLCBcIil9YDtcblxuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBzZXNzaW9uIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBVUkwgfSBmcm9tIFwidXJsXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW1Byb3h5XVwiO1xuXG5jb25zdCBtYXAgPSBuZXcgTWFwKFtcbiAgW2Bqc3N6LWJvc3MuaGRzbGIuY29tYCwgYGpzc3otYm9zcy5iaWxpYmlsaS5jb2BdLCAvL1xuICBbYGJvc3MuaGRzbGIuY29tYCwgYHNoamQtYm9zcy5iaWxpYmlsaS5jb2BdLFxuXSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm94aWVkVXJsKHVybDogc3RyaW5nKSB7XG4gIGlmICghdXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gIGNvbnN0IHRhcmdldCA9IG1hcC5nZXQocGFyc2VkLmhvc3RuYW1lKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIHBhcnNlZC5ob3N0bmFtZSA9IHRhcmdldDtcbiAgcGFyc2VkLnByb3RvY29sID0gXCJodHRwOlwiO1xuICByZXR1cm4gcGFyc2VkLnRvU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVQcm94eSgpIHtcbiAgc2Vzc2lvbi5kZWZhdWx0U2Vzc2lvbi53ZWJSZXF1ZXN0Lm9uQmVmb3JlUmVxdWVzdCgoZGV0YWlscywgY2FsbGJhY2spID0+IHtcbiAgICBjb25zdCB1cmwgPSBkZXRhaWxzLnVybDtcbiAgICBjb25zdCBwcm94aWVkID0gcHJveGllZFVybCh1cmwpO1xuICAgIGlmIChwcm94aWVkID09PSB1cmwpIHtcbiAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgYCR7dXJsfSAtPiAke3Byb3hpZWR9YCk7XG4gICAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UsIHJlZGlyZWN0VVJMOiBwcm94aWVkIH0pO1xuICAgIH1cbiAgICBmZXRjaChwcm94aWVkKS5jYXRjaCgoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBgZmV0Y2hAJHtkZXRhaWxzLm1ldGhvZH0gXCIke3VybH1cIiBtYXkgZmFpbGApO1xuICAgIH0pO1xuICB9KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGVyaW9kaWNhbChcbiAgY2FsbGJhY2s6IChjb3VudDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZCxcbiAgbXM6IG51bWJlcixcbikge1xuICBsZXQgdG9rZW46IE5vZGVKUy5UaW1lb3V0O1xuICBsZXQgY2xvc2VkID0gZmFsc2U7XG4gIGFzeW5jIGZ1bmN0aW9uIHRpY2soY291bnQ6IG51bWJlcikge1xuICAgIGF3YWl0IGNhbGxiYWNrKGNvdW50KTtcbiAgICBpZiAoY2xvc2VkKSByZXR1cm47XG4gICAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soY291bnQgKyAxKSwgbXMpO1xuICB9XG4gIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKDApLCBtcyk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZTtcbiAgICBjbGVhclRpbWVvdXQodG9rZW4pO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNS5cblxuaW1wb3J0IHsgc2V0VGltZW91dCB9IGZyb20gXCJ0aW1lcnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIi4vdGltaW5nXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlPcHRpb25zPEFyZ3MgZXh0ZW5kcyBhbnlbXSwgUmV0PiB7XG4gIGZuOiAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzZTxSZXQ+O1xuICBtYXhBdHRlbXB0cz86IG51bWJlcjtcbiAgdGltZW91dD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJldHJ5PEFyZ3MgZXh0ZW5kcyBhbnlbXSwgUmV0Pih7XG4gIGZuLFxuICBtYXhBdHRlbXB0cyA9IDMsXG4gIHRpbWVvdXQsXG59OiBSZXRyeU9wdGlvbnM8QXJncywgUmV0Pikge1xuICBjb25zdCB0aW1lb3V0RXJyb3IgPSBuZXcgRXJyb3IoYHRpbWVvdXQgb3ZlciAke3RpbWVvdXR9bXNgKTtcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uICguLi5hcmdzOiBBcmdzKSB7XG4gICAgbGV0IGF0dGVtcHQgPSAwO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtmbiguLi5hcmdzKV07XG4gICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgIHNldFRpbWVvdXQodGltZW91dCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRocm93IHRpbWVvdXRFcnJvcjtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IFByb21pc2UucmFjZShwcm9taXNlcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgaWYgKGF0dGVtcHQgPj0gbWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHNsZWVwKE1hdGgucG93KDIsIGF0dGVtcHQpICogMTAwICsgTWF0aC5yYW5kb20oKSAqIDEwMCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNy5cblxuaW1wb3J0IHsgQnJvd3NlcldpbmRvdywgc2Vzc2lvbiB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgYnVpbGRXcmFwcGVySFRNTCB9IGZyb20gXCIuL2ZyYW1lX3N5bmNcIjtcbmltcG9ydCB7IGNoZWNrSFRNTCB9IGZyb20gXCIuL2h0bWxfY2hlY2tcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcbmltcG9ydCB7IGVuYWJsZVByb3h5LCBwcm94aWVkVXJsIH0gZnJvbSBcIi4vcHJveHlcIjtcbmltcG9ydCB7IHVzZVJldHJ5IH0gZnJvbSBcIi4vcmV0cnlcIjtcbmltcG9ydCB0eXBlIHsgUmVjb3JkT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuXG5jb25zdCBUQUcgPSBcIltXaW5kb3ddXCI7XG5cbmZ1bmN0aW9uIHdhaXRGb3JGaW5pc2god2luOiBCcm93c2VyV2luZG93LCBhY3Rpb246ICgpID0+IHZvaWQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dChcbiAgICAgICgpID0+IHJlamVjdChuZXcgRXJyb3IoXCJsb2FkIHdpbmRvdyB0aW1lb3V0XCIpKSxcbiAgICAgIDIwXzAwMCxcbiAgICApO1xuICAgIGNvbnN0IGRvbmUgPSAoZXJyPzogRXJyb3IpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZSgpO1xuICAgIH07XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtZmluaXNoLWxvYWRcIiwgKCkgPT4gZG9uZSgpKTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1mYWlsLWxvYWRcIiwgKF9lLCBjb2RlLCBkZXNjLCB1cmwpID0+XG4gICAgICBkb25lKG5ldyBFcnJvcihgZmFpbGVkIHRvIGxvYWQgJHt1cmx9OiBbJHtjb2RlfV0gJHtkZXNjfWApKSxcbiAgICApO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwicmVuZGVyLXByb2Nlc3MtZ29uZVwiLCAoX2UsIHsgZXhpdENvZGUsIHJlYXNvbiB9KSA9PlxuICAgICAgZG9uZShuZXcgRXJyb3IoYHJlbmRlcmVyIGNyYXNoZWQ6ICR7ZXhpdENvZGV9LCAke3JlYXNvbn1gKSksXG4gICAgKTtcbiAgICBhY3Rpb24oKTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9wZW5XaW5kb3coXG4gIHdpbnM6IEJyb3dzZXJXaW5kb3dbXSxcbiAgc291cmNlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlY29yZE9wdGlvbnMsXG4pOiBQcm9taXNlPEJyb3dzZXJXaW5kb3c+IHtcbiAgY2hlY2tIVE1MKHNvdXJjZSk7XG5cbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB1c2VJbm5lclByb3h5IH0gPSBvcHRpb25zO1xuXG4gIHNlc3Npb24uZGVmYXVsdFNlc3Npb24ud2ViUmVxdWVzdC5vbkhlYWRlcnNSZWNlaXZlZChcbiAgICAoeyByZXNwb25zZUhlYWRlcnMgfSwgY2FsbGJhY2spID0+IHtcbiAgICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIngtZnJhbWUtb3B0aW9uc1wiXTtcbiAgICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIlgtRnJhbWUtT3B0aW9uc1wiXTtcbiAgICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcImNvbnRlbnQtc2VjdXJpdHktcG9saWN5XCJdO1xuICAgICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiQ29udGVudC1TZWN1cml0eS1Qb2xpY3lcIl07XG4gICAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UsIHJlc3BvbnNlSGVhZGVycyB9KTtcbiAgICB9LFxuICApO1xuXG4gIHNlc3Npb24uZGVmYXVsdFNlc3Npb24ud2ViUmVxdWVzdC5vbkVycm9yT2NjdXJyZWQoXG4gICAgKHsgbWV0aG9kLCB1cmwsIGVycm9yIH0pID0+IHtcbiAgICAgIGxvZ2dlci5lcnJvcihUQUcsIGByZXF1ZXN0OmAsIHtcbiAgICAgICAgdXJsLFxuICAgICAgICBtZXRob2QsXG4gICAgICAgIGVycm9yLFxuICAgICAgICBzb3VyY2UsXG4gICAgICB9KTtcbiAgICB9LFxuICApO1xuXG4gIGxldCBzcmMgPSBzb3VyY2U7XG4gIGlmICh1c2VJbm5lclByb3h5KSB7XG4gICAgc3JjID0gcHJveGllZFVybChzb3VyY2UpO1xuICAgIGVuYWJsZVByb3h5KCk7XG4gIH1cblxuICBjb25zdCB3aW4gPSBuZXcgQnJvd3NlcldpbmRvdyh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIHNob3c6IGZhbHNlLFxuICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgIGJhY2tncm91bmRDb2xvcjogdW5kZWZpbmVkLFxuICAgIHdlYlByZWZlcmVuY2VzOiB7XG4gICAgICBvZmZzY3JlZW46IHRydWUsXG4gICAgICBiYWNrZ3JvdW5kVGhyb3R0bGluZzogZmFsc2UsXG4gICAgICBub2RlSW50ZWdyYXRpb246IHRydWUsXG4gICAgICBub2RlSW50ZWdyYXRpb25JblN1YkZyYW1lczogdHJ1ZSxcbiAgICAgIGNvbnRleHRJc29sYXRpb246IGZhbHNlLFxuICAgICAgd2ViU2VjdXJpdHk6IGZhbHNlLFxuICAgICAgYWxsb3dSdW5uaW5nSW5zZWN1cmVDb250ZW50OiB0cnVlLFxuICAgICAgZXhwZXJpbWVudGFsRmVhdHVyZXM6IHRydWUsXG4gICAgfSxcbiAgfSk7XG4gIHdpbnMuc3BsaWNlKDApLmZvckVhY2goKHcpID0+IHcuZGVzdHJveSgpKTtcbiAgd2lucy5wdXNoKHdpbik7XG5cbiAgd2luLndlYkNvbnRlbnRzLm9uKFxuICAgIFwiY29uc29sZS1tZXNzYWdlXCIsXG4gICAgKHsgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkIH0pID0+IHtcbiAgICAgIGlmIChsZXZlbCA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihUQUcsIFwiY29uc29sZTpcIiwge1xuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgbGluZU51bWJlcixcbiAgICAgICAgICBzb3VyY2VJZCxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICk7XG5cbiAgY29uc3Qgd3JhcHBlckhUTUwgPSBidWlsZFdyYXBwZXJIVE1MKHNyYywgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICBjb25zdCBkYXRhVVJMID0gYGRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgsJHtlbmNvZGVVUklDb21wb25lbnQod3JhcHBlckhUTUwpfWA7XG4gIGF3YWl0IHdhaXRGb3JGaW5pc2god2luLCAoKSA9PiB3aW4ubG9hZFVSTChkYXRhVVJMKSk7XG5cbiAgcmV0dXJuIHdpbjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRXaW5kb3coXG4gIHNvdXJjZTogc3RyaW5nLFxuICBvcHRpb25zOiBSZWNvcmRPcHRpb25zLFxuKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgd2luczogQnJvd3NlcldpbmRvd1tdID0gW107XG4gICAgY29uc3Qgd2luID0gYXdhaXQgdXNlUmV0cnkoeyBmbjogb3BlbldpbmRvdywgbWF4QXR0ZW1wdHM6IDIgfSkoXG4gICAgICB3aW5zLFxuICAgICAgc291cmNlLFxuICAgICAgb3B0aW9ucyxcbiAgICApO1xuICAgIGF3YWl0IHdhaXRGb3JGaW5pc2god2luLCAoKSA9PiB3aW4ucmVsb2FkKCkpO1xuICAgIHJldHVybiB3aW47XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBlIGFzIEVycm9yO1xuICAgIGNvbnN0IGRlc2MgPSB7IHNvdXJjZSwgbWVzc2FnZSwgc3RhY2sgfTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byBsb2FkIHdpbmRvdzogJHtKU09OLnN0cmluZ2lmeShkZXNjKX1gKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgdHlwZSBOYXRpdmVJbWFnZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbWtkaXIsIHdyaXRlRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBGaXhlZEJ1ZmZlcldyaXRlciB9IGZyb20gXCIuLi9ydXN0L2xpYlwiO1xuaW1wb3J0IHsgc2V0dXBBdWRpb0NhcHR1cmUgfSBmcm9tIFwiLi9hdWRpb19jYXB0dXJlXCI7XG5pbXBvcnQgeyBkZWNvZGVUaW1lc3RhbXAsIHN0YXJ0U3luYywgc3RvcFN5bmMgfSBmcm9tIFwiLi9mcmFtZV9zeW5jXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4vaW1hZ2VcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcbmltcG9ydCB0eXBlIHsgUmVjb3JkT3B0aW9ucywgUmVjb3JkUmVzdWx0IH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmNvbnN0IFRBRyA9IFwiW1JlY29yZF1cIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlY29yZChcbiAgc291cmNlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlY29yZE9wdGlvbnMsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgbG9nZ2VyLmluZm8oVEFHLCBgcHJvZ3Jlc3M6IDAlYCk7XG4gIGNvbnN0IHsgb3V0RGlyLCBmcHMsIHdpZHRoLCBoZWlnaHQsIGR1cmF0aW9uLCB3aXRoQXVkaW8gfSA9IG9wdGlvbnM7XG5cbiAgYXdhaXQgbWtkaXIob3V0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBjb25zdCBwY21QYXRoID0gam9pbihvdXREaXIsIFwib3V0cHV0LnBjbVwiKTtcbiAgY29uc3QgYXVkaW9DYXB0dXJlID0gd2l0aEF1ZGlvID8gYXdhaXQgc2V0dXBBdWRpb0NhcHR1cmUocGNtUGF0aCkgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3Qgd2luID0gYXdhaXQgbG9hZFdpbmRvdyhzb3VyY2UsIG9wdGlvbnMpO1xuXG4gIGNvbnN0IGNkcCA9IHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlcjtcbiAgY2RwLmF0dGFjaChcIjEuM1wiKTtcblxuICB3aW4ud2ViQ29udGVudHMuc2V0RnJhbWVSYXRlKGZwcyk7XG4gIGlmICghd2luLndlYkNvbnRlbnRzLmlzUGFpbnRpbmcoKSkge1xuICAgIHdpbi53ZWJDb250ZW50cy5zdGFydFBhaW50aW5nKCk7XG4gIH1cblxuICBjb25zdCBiZ3JhID0gam9pbihvdXREaXIsIFwib3V0cHV0LmJncmFcIik7XG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG4gIGNvbnN0IGJ1ZmZlclNpemUgPSB3aWR0aCAqIGhlaWdodCAqIDQ7XG5cbiAgY29uc3Qgd3JpdGVyID0gbmV3IEZpeGVkQnVmZmVyV3JpdGVyKGJncmEsIGJ1ZmZlclNpemUsIGZwcyk7XG5cbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgbGFzdFdyaXR0ZW5UaW1lOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGxldCBwcm9ncmVzcyA9IDA7XG4gIGxldCBmcmFtZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlc29sdmVyOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCByZWplY3RlcjogKChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcblxuICBjb25zdCBzY2hlZHVsZVdyaXRlID0gKGJ1ZmZlcjogQnVmZmVyKSA9PiB7XG4gICAgd3JpdHRlbisrO1xuICAgIHRyeSB7XG4gICAgICB3cml0ZXIud3JpdGUoYnVmZmVyKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZnJhbWVFcnJvciA/Pz0gZXJyb3IgYXMgRXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHBhaW50ID0gKF9lOiB1bmtub3duLCBfcjogdW5rbm93biwgaW1hZ2U6IE5hdGl2ZUltYWdlKSA9PiB7XG4gICAgaWYgKGZyYW1lRXJyb3IpIHtcbiAgICAgIHJlamVjdGVyPy4oZnJhbWVFcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHdyaXR0ZW4gPj0gdG90YWwpIHtcbiAgICAgIHJlc29sdmVyPy4oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNFbXB0eShpbWFnZSkpIHJldHVybjtcblxuICAgIGNvbnN0IGJpdG1hcCA9IGltYWdlLnRvQml0bWFwKCk7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBkZWNvZGVUaW1lc3RhbXAoYml0bWFwLCBpbWFnZS5nZXRTaXplKCkpO1xuICAgIGlmIChjdXJyZW50VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmcmFtZUVycm9yID8/PSBuZXcgRXJyb3IoYG5vIHRpbWVzdGFtcCBAICR7d3JpdHRlbn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBieXRlc1BlclJvdyA9IHdpZHRoICogNDtcbiAgICBjb25zdCBjcm9wcGVkID0gYml0bWFwLnN1YmFycmF5KDAsIGhlaWdodCAqIGJ5dGVzUGVyUm93KTtcblxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZWR1bGVXcml0ZShjcm9wcGVkKTtcbiAgICAgIGxhc3RXcml0dGVuVGltZSA9IGN1cnJlbnRUaW1lO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVTaW5jZUxhc3RGcmFtZSA9IGN1cnJlbnRUaW1lIC0gbGFzdFdyaXR0ZW5UaW1lO1xuICAgIGlmICh0aW1lU2luY2VMYXN0RnJhbWUgPCBmcmFtZUludGVydmFsICogMC44KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRpbWVTaW5jZUxhc3RGcmFtZSA8PSBmcmFtZUludGVydmFsICogMS4yKSB7XG4gICAgICBzY2hlZHVsZVdyaXRlKGNyb3BwZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmcmFtZXNUb0luc2VydCA9IE1hdGgucm91bmQodGltZVNpbmNlTGFzdEZyYW1lIC8gZnJhbWVJbnRlcnZhbCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyYW1lc1RvSW5zZXJ0ICYmIHdyaXR0ZW4gPCB0b3RhbDsgaSsrKSB7XG4gICAgICAgIHNjaGVkdWxlV3JpdGUoY3JvcHBlZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGxhc3RXcml0dGVuVGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICBpZiAoTWF0aC5hYnMobmV3UHJvZ3Jlc3MgLSBwcm9ncmVzcykgPiAxMCkge1xuICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgIGxvZ2dlci5pbmZvKFRBRywgYHByb2dyZXNzOiAke01hdGgucm91bmQocHJvZ3Jlc3MpfSVgKTtcbiAgICB9XG4gIH07XG5cbiAgd2luLndlYkNvbnRlbnRzLm9uKFwicGFpbnRcIiwgcGFpbnQpO1xuICBhd2FpdCBzdGFydFN5bmMoY2RwKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigociwgaikgPT4gKFtyZXNvbHZlciwgcmVqZWN0ZXJdID0gW3IsIGpdKSk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgc3RvcFN5bmMoY2RwKTtcbiAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgcGFpbnQpO1xuICAgIGF3YWl0IHdyaXRlci5jbG9zZSgpO1xuICAgIGF3YWl0IGF1ZGlvQ2FwdHVyZT8udGVhcmRvd24oKTtcbiAgfVxuXG4gIGlmIChmcmFtZUVycm9yIHx8IHdyaXR0ZW4gPT09IDApIHtcbiAgICB0aHJvdyBmcmFtZUVycm9yID8/IG5ldyBFcnJvcihcIm5vIGZyYW1lcyBjYXB0dXJlZFwiKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgYXVkaW8gPSBhdWRpb0NhcHR1cmU/LnNhbXBsZVJhdGVcbiAgICAgID8geyBwY21QYXRoLCBzYW1wbGVSYXRlOiBhdWRpb0NhcHR1cmUuc2FtcGxlUmF0ZSB9XG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZFJlc3VsdCA9IHsgb3B0aW9ucywgd3JpdHRlbiwgYmdyYSwgYXVkaW8gfTtcbiAgICBhd2FpdCB3cml0ZUZpbGUoam9pbihvdXREaXIsIFwicmVjb3JkLmpzb25cIiksIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpO1xuICAgIGxvZ2dlci5pbmZvKFRBRywgYHByb2dyZXNzOiAxMDAlLCAke3dyaXR0ZW59IGZyYW1lcyB3cml0dGVuYCk7XG4gIH0gZmluYWxseSB7XG4gICAgd2luLmNsb3NlKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjQuXG5cbmV4cG9ydCBmdW5jdGlvbiBub2VycjxGbiBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55LCBEPihcbiAgZm46IEZuLFxuICBkZWZhdWx0VmFsdWU6IEQsXG4pOiAoLi4uYXJnczogUGFyYW1ldGVyczxGbj4pID0+IFJldHVyblR5cGU8Rm4+IHwgRCB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXQgPSBmbiguLi5hcmdzKTtcbiAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiByZXQuY2F0Y2goKCkgPT4gZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHogZnJvbSBcInpvZFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvU3BlYyB7XG4gIGZwczogbnVtYmVyO1xuICBmcmFtZXM6IG51bWJlcjtcbiAgc2l6ZTogU2l6ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0ZpbGVzIHtcbiAgbXA0Pzogc3RyaW5nO1xuICB3ZWJtPzogc3RyaW5nO1xuICBtb3Y/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9GaWxlc1dpdGhDb3ZlciBleHRlbmRzIFZpZGVvRmlsZXMge1xuICBjb3Zlcjogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9XSURUSCA9IDE5MjA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9IRUlHSFQgPSAxMDgwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRlBTID0gMzA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9EVVJBVElPTiA9IDU7XG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRfRElSID0gXCJvdXRcIjtcblxuZXhwb3J0IGNvbnN0IFJlY29yZFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZHVyYXRpb246IHpcbiAgICAubnVtYmVyKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZWZhdWx0KERFRkFVTFRfRFVSQVRJT04pXG4gICAgLmRlc2NyaWJlKFwiUmVjb3JkaW5nIGR1cmF0aW9uIGluIHNlY29uZHNcIiksXG4gIHdpZHRoOiB6Lm51bWJlcigpLm9wdGlvbmFsKCkuZGVmYXVsdChERUZBVUxUX1dJRFRIKS5kZXNjcmliZShcIlZpZGVvIHdpZHRoXCIpLFxuICBoZWlnaHQ6IHpcbiAgICAubnVtYmVyKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZWZhdWx0KERFRkFVTFRfSEVJR0hUKVxuICAgIC5kZXNjcmliZShcIlZpZGVvIGhlaWdodFwiKSxcbiAgZnBzOiB6Lm51bWJlcigpLm9wdGlvbmFsKCkuZGVmYXVsdChERUZBVUxUX0ZQUykuZGVzY3JpYmUoXCJGcmFtZXMgcGVyIHNlY29uZFwiKSxcbiAgd2l0aEFscGhhQ2hhbm5lbDogelxuICAgIC5ib29sZWFuKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZWZhdWx0KGZhbHNlKVxuICAgIC5kZXNjcmliZShcIk91dHB1dCB3aXRoIGFscGhhIGNoYW5uZWxcIiksXG4gIHdpdGhBdWRpbzogelxuICAgIC5ib29sZWFuKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZWZhdWx0KGZhbHNlKVxuICAgIC5kZXNjcmliZShcIkNhcHR1cmUgYW5kIGVuY29kZSBhdWRpb1wiKSxcbiAgb3V0RGlyOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVmYXVsdChERUZBVUxUX09VVF9ESVIpXG4gICAgLmRlc2NyaWJlKFwiT3V0cHV0IGRpcmVjdG9yeVwiKSxcbiAgdXNlSW5uZXJQcm94eTogelxuICAgIC5ib29sZWFuKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZWZhdWx0KGZhbHNlKVxuICAgIC5kZXNjcmliZShcIlVzZSBiaWxpYmlsaSBpbm5lciBwcm94eSBmb3IgcmVzb3VyY2UgYWNjZXNzXCIpLFxufSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkT3B0aW9ucyB7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgd2l0aEFscGhhQ2hhbm5lbDogYm9vbGVhbjtcbiAgd2l0aEF1ZGlvOiBib29sZWFuO1xuICBvdXREaXI6IHN0cmluZztcbiAgdXNlSW5uZXJQcm94eTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb1NwZWMge1xuICBwY21QYXRoOiBzdHJpbmc7XG4gIHNhbXBsZVJhdGU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRSZXN1bHQge1xuICBvcHRpb25zOiBSZWNvcmRPcHRpb25zO1xuICB3cml0dGVuOiBudW1iZXI7XG4gIGJncmE6IHN0cmluZztcbiAgYXVkaW8/OiBBdWRpb1NwZWM7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBwcm9ncmFtIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgcHVwVXNlSW5uZXJQcm94eSB9IGZyb20gXCIuL2Jhc2UvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IG5vZXJyIH0gZnJvbSBcIi4vYmFzZS9ub2VyclwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9iYXNlL3BhcnNlclwiO1xuaW1wb3J0IHsgcGFyZ3MgfSBmcm9tIFwiLi9iYXNlL3Byb2Nlc3NcIjtcbmltcG9ydCB7XG4gIERFRkFVTFRfRFVSQVRJT04sXG4gIERFRkFVTFRfRlBTLFxuICBERUZBVUxUX0hFSUdIVCxcbiAgREVGQVVMVF9PVVRfRElSLFxuICBERUZBVUxUX1dJRFRILFxuICB0eXBlIFJlY29yZE9wdGlvbnMsXG59IGZyb20gXCIuL2Jhc2Uvc2NoZW1hXCI7XG5cbmV4cG9ydCB0eXBlIENMSUNhbGxiYWNrID0gKFxuICBzb3VyY2U6IHN0cmluZyxcbiAgb3B0aW9uczogUmVjb3JkT3B0aW9ucyxcbikgPT4gUHJvbWlzZTx1bmtub3duPjtcblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VDTEkobmFtZTogc3RyaW5nLCBjYWxsYmFjazogQ0xJQ2FsbGJhY2spIHtcbiAgcHJvZ3JhbVxuICAgIC5uYW1lKG5hbWUpXG4gICAgLmFyZ3VtZW50KFwiPHNvdXJjZT5cIiwgXCJmaWxlOi8vLCBodHRwKHMpOi8vLCDmiJYgZGF0YTogVVJJXCIpXG4gICAgLm9wdGlvbihcIi13LCAtLXdpZHRoIDxudW1iZXI+XCIsIFwi6KeG6aKR5a695bqmXCIsIGAke0RFRkFVTFRfV0lEVEh9YClcbiAgICAub3B0aW9uKFwiLWgsIC0taGVpZ2h0IDxudW1iZXI+XCIsIFwi6KeG6aKR6auY5bqmXCIsIGAke0RFRkFVTFRfSEVJR0hUfWApXG4gICAgLm9wdGlvbihcIi1mLCAtLWZwcyA8bnVtYmVyPlwiLCBcIuW4p+eOh1wiLCBgJHtERUZBVUxUX0ZQU31gKVxuICAgIC5vcHRpb24oXCItdCwgLS1kdXJhdGlvbiA8bnVtYmVyPlwiLCBcIuW9leWItuaXtumVv++8iOenku+8iVwiLCBgJHtERUZBVUxUX0RVUkFUSU9OfWApXG4gICAgLm9wdGlvbihcIi1vLCAtLW91dC1kaXIgPHBhdGg+XCIsIFwi6L6T5Ye655uu5b2VXCIsIGAke0RFRkFVTFRfT1VUX0RJUn1gKVxuICAgIC5vcHRpb24oXCItYSwgLS13aXRoLWFscGhhLWNoYW5uZWxcIiwgXCLovpPlh7rljIXlkKsgYWxwaGEg6YCa6YGT55qE6KeG6aKRXCIsIGZhbHNlKVxuICAgIC5vcHRpb24oXCItcywgLS13aXRoLWF1ZGlvXCIsIFwi5o2V6I635bm25re35YWl6Z+z6aKRXCIsIGZhbHNlKVxuICAgIC5vcHRpb24oXG4gICAgICBcIi0tdXNlLWlubmVyLXByb3h5XCIsXG4gICAgICBcIuS9v+eUqCBCIOermeWGhee9keS7o+eQhuWKoOmAn+i1hOa6kOiuv+mXrlwiLFxuICAgICAgcHVwVXNlSW5uZXJQcm94eSxcbiAgICApXG4gICAgLmFjdGlvbihhc3luYyAoc291cmNlOiBzdHJpbmcsIG9wdHMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGNhbGxiYWNrKHNvdXJjZSwge1xuICAgICAgICAgIHdpZHRoOiBub2VycihwYXJzZU51bWJlciwgREVGQVVMVF9XSURUSCkob3B0cy53aWR0aCksXG4gICAgICAgICAgaGVpZ2h0OiBub2VycihwYXJzZU51bWJlciwgREVGQVVMVF9IRUlHSFQpKG9wdHMuaGVpZ2h0KSxcbiAgICAgICAgICBmcHM6IG5vZXJyKHBhcnNlTnVtYmVyLCBERUZBVUxUX0ZQUykob3B0cy5mcHMpLFxuICAgICAgICAgIGR1cmF0aW9uOiBub2VycihwYXJzZU51bWJlciwgREVGQVVMVF9EVVJBVElPTikob3B0cy5kdXJhdGlvbiksXG4gICAgICAgICAgb3V0RGlyOiBvcHRzLm91dERpciA/PyBERUZBVUxUX09VVF9ESVIsXG4gICAgICAgICAgd2l0aEFscGhhQ2hhbm5lbDogb3B0cy53aXRoQWxwaGFDaGFubmVsID8/IGZhbHNlLFxuICAgICAgICAgIHdpdGhBdWRpbzogb3B0cy53aXRoQXVkaW8gPz8gZmFsc2UsXG4gICAgICAgICAgdXNlSW5uZXJQcm94eTogb3B0cy51c2VJbm5lclByb3h5ID8/IHB1cFVzZUlubmVyUHJveHksXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZmF0YWwoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIHByb2dyYW0ucGFyc2UocGFyZ3MoKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbXBvcnQgeyBhcHAgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGVsZWN0cm9uT3B0cyB9IGZyb20gXCIuL2Jhc2UvZWxlY3Ryb25cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgcmVjb3JkIH0gZnJvbSBcIi4vYmFzZS9yZWNvcmRcIjtcbmltcG9ydCB7IG1ha2VDTEkgfSBmcm9tIFwiLi9jb21tb25cIjtcblxucHJvY2Vzcy5vbmNlKFwiZXhpdFwiLCAoKSA9PiBhcHAucXVpdCgpKTtcblxuY29uc3QgVEFHID0gXCJbQXBwXVwiO1xuXG5tYWtlQ0xJKFwiYXBwXCIsIGFzeW5jIChzb3VyY2UsIG9wdGlvbnMpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBvcHRzID0gYXdhaXQgZWxlY3Ryb25PcHRzKCk7XG4gICAgb3B0cy5mb3JFYWNoKChvKSA9PiB7XG4gICAgICBjb25zdCBlcSA9IG8uaW5kZXhPZihcIj1cIik7XG4gICAgICBpZiAoZXEgPCAwKSB7XG4gICAgICAgIGFwcC5jb21tYW5kTGluZS5hcHBlbmRTd2l0Y2gobyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBrZXkgPSBvLnNsaWNlKDAsIGVxKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBvLnNsaWNlKGVxICsgMSk7XG4gICAgICAgIGFwcC5jb21tYW5kTGluZS5hcHBlbmRTd2l0Y2goa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgYXBwLmRvY2s/LmhpZGUoKTtcbiAgICBhd2FpdCBhcHAud2hlblJlYWR5KCk7XG4gICAgYXBwLm9uY2UoXCJncHUtaW5mby11cGRhdGVcIiwgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJncHU6XCIsIGFwcC5nZXRHUFVGZWF0dXJlU3RhdHVzKCkpO1xuICAgIH0pO1xuICAgIGF3YWl0IHJlY29yZChzb3VyY2UsIG9wdGlvbnMpO1xuICB9IGZpbmFsbHkge1xuICAgIGFwcC5xdWl0KCk7XG4gIH1cbn0pO1xuIl19
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErMzNlMjQ2NTBmNWFlZDE3YS9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vLi4vc3JjL2Jhc2UvYmFzZWRpci50cyIsIi4uLy4uL3NyYy9iYXNlL2Vudi50cyIsIi4uLy4uL3NyYy9iYXNlL3BhcnNlci50cyIsIi4uLy4uL3NyYy9iYXNlL2NvbnN0YW50cy50cyIsIi4uLy4uL3NyYy9iYXNlL2xvZ2dpbmcudHMiLCIuLi8uLi9zcmMvcnVzdC9saWIudHMiLCIuLi8uLi9zcmMvYmFzZS9hdWRpb19jYXB0dXJlLnRzIiwiLi4vLi4vc3JjL2Jhc2UvZnJhbWVfc3luYy50cyIsIi4uLy4uL3NyYy9iYXNlL2ltYWdlLnRzIiwiLi4vLi4vc3JjL2Jhc2UvaHRtbF9jaGVjay50cyIsIi4uLy4uL3NyYy9iYXNlL2xpbWl0ZXIudHMiLCIuLi8uLi9zcmMvYmFzZS93YWl0YWJsZV9ldmVudC50cyIsIi4uLy4uL3NyYy9iYXNlL25ldHdvcmsudHMiLCIuLi8uLi9zcmMvYmFzZS90aW1pbmcudHMiLCIuLi8uLi9zcmMvYmFzZS9yZXRyeS50cyIsIi4uLy4uL3NyYy9iYXNlL3dpbmRvdy50cyIsIi4uLy4uL3NyYy9iYXNlL3JlY29yZC50cyIsIi4uLy4uL3NyYy9iYXNlL25vZXJyLnRzIiwiLi4vLi4vc3JjL2Jhc2UvcHJvY2Vzcy50cyIsIi4uLy4uL3NyYy9iYXNlL3NjaGVtYS50cyIsIi4uLy4uL3NyYy9jb21tb24udHMiLCIuLi8uLi9zcmMvYXBwLnRzIl0sIm5hbWVzIjpbImdldEltcG9ydE1ldGFVcmwiLCJpbXBvcnRNZXRhVXJsIiwiYmFzZWRpciIsImRpcm5hbWUiLCJmaWxlVVJMVG9QYXRoIiwicGVudiIsIm5hbWUiLCJwYXJzZXIiLCJkZWZhdWx0VmFsdWUiLCJwYXJzZU51bWJlciIsInZhbHVlIiwibnVtIiwicHVwQXBwU2VhcmNoUGF0aHMiLCJqb2luIiwiZXhpc3RzU3luYyIsImVudiIsInB1cExvZ0xldmVsIiwicHVwVXNlSW5uZXJQcm94eSIsIkRFQlVHIiwiSU5GTyIsIldBUk4iLCJFUlJPUiIsIkZBVEFMIiwic3RhY2tIb29rIiwidGFyZ2V0IiwiX2NvbnRleHQiLCJtZXNzYWdlcyIsInByb2Nlc3NlZCIsIm1zZyIsIl9mYXRhbF9kZWMiLCJfZXJyb3JfZGVjIiwiX3dhcm5fZGVjIiwiX2luZm9fZGVjIiwiX2RlYnVnX2RlYyIsIl9pbml0IiwiTG9nZ2VyIiwiX19ydW5Jbml0aWFsaXplcnMiLCJfX3B1YmxpY0ZpZWxkIiwiZGVidWciLCJpbmZvIiwid2FybiIsImVycm9yIiwibWVzc2FnZSIsInByb2MiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmF0YWwiLCJkaXNwYXRjaCIsImRhdGEiLCJlcnIiLCJjb2RlIiwic2lnbmFsIiwicmVhc29uIiwiX19kZWNvcmF0b3JTdGFydCIsIl9fZGVjb3JhdGVFbGVtZW50IiwiX19kZWNvcmF0b3JNZXRhZGF0YSIsImxvZ2dlciIsInJ1c3RQYXRoIiwicGxhdGZvcm0iLCJhcmNoIiwibmF0aXZlU2VhcmNoUGF0aHMiLCJtb2QiLCJfX3JlcXVpcmUiLCJGaXhlZEJ1ZmZlcldyaXRlciIsIkFVRElPX0NBUFRVUkVfU0NSSVBUIiwic2V0dXBBdWRpb0NhcHR1cmUiLCJwY21QYXRoIiwicHJlbG9hZFBhdGgiLCJ0bXBkaXIiLCJyYW5kb21VVUlEIiwid3JpdGVGaWxlIiwic2Vzc2lvbiIsIndyaXRlciIsImNhcHR1cmUiLCJpcGNNYWluIiwicm0iLCJfZSIsImJ1ZmZlciIsImJ1aWxkV3JhcHBlckhUTUwiLCJ0YXJnZXRVUkwiLCJzaXplIiwid2lkdGgiLCJoZWlnaHQiLCJkZWNvZGVUaW1lc3RhbXAiLCJiaXRtYXAiLCJtYXJrZXJSb3ciLCJ0aW1lc3RhbXAiLCJpIiwicGl4ZWxJZHgiLCJiaXQiLCJzdGFydFN5bmMiLCJjZHAiLCJzdG9wU3luYyIsImlzRW1wdHkiLCJpbWFnZSIsIlNVUFBPUlRFRF9QUk9UT0NPTFMiLCJTT1VSQ0VfUEFUVEVSTiIsImNoZWNrSFRNTCIsInNvdXJjZSIsInByb3RvY29sIiwiQ29uY3VycmVuY3lMaW1pdGVyIiwibWF4Q29uY3VycmVuY3kiLCJmbiIsInJ1biIsInYiLCJlIiwiciIsIldhaXRhYmxlRXZlbnQiLCJvcHRpb25zIiwiVEFHIiwibWFwIiwicHJveGllZFVybCIsInVybCIsInBhcnNlZCIsIlVSTCIsInNldEludGVyY2VwdG9yIiwid2luZG93IiwidXNlSW5uZXJQcm94eSIsInJlcSIsImxpbWl0ZXIiLCJldmVudHMiLCJ3YWl0Iiwia2V5Iiwib25UaW1lb3V0IiwiZXZlbnQiLCJkZXRhaWxzIiwiY2FsbGJhY2siLCJwcm94aWVkIiwicmVzcG9uc2VIZWFkZXJzIiwidW5zZXRJbnRlcmNlcHRvciIsInNsZWVwIiwibXMiLCJ1c2VSZXRyeSIsIm1heEF0dGVtcHRzIiwidGltZW91dCIsInRpbWVvdXRFcnJvciIsImFyZ3MiLCJhdHRlbXB0IiwicHJvbWlzZXMiLCJzZXRUaW1lb3V0Iiwid2FpdEZvckZpbmlzaCIsIndpbiIsImFjdGlvbiIsImRvbmUiLCJkZXNjIiwiZXhpdENvZGUiLCJvcGVuV2luZG93Iiwid2lucyIsInNyYyIsInciLCJCcm93c2VyV2luZG93IiwibGV2ZWwiLCJsaW5lTnVtYmVyIiwic291cmNlSWQiLCJ3cmFwcGVySFRNTCIsImRhdGFVUkwiLCJsb2FkV2luZG93Iiwic3RhY2siLCJyZWNvcmQiLCJvdXREaXIiLCJmcHMiLCJkdXJhdGlvbiIsIndpdGhBdWRpbyIsIm1rZGlyIiwiYXVkaW9DYXB0dXJlIiwiYmdyYSIsInRvdGFsIiwiZnJhbWVJbnRlcnZhbCIsImJ1ZmZlclNpemUiLCJ3cml0dGVuIiwibGFzdFdyaXR0ZW5UaW1lIiwicHJvZ3Jlc3MiLCJmcmFtZUVycm9yIiwicmVzb2x2ZXIiLCJyZWplY3RlciIsInNjaGVkdWxlV3JpdGUiLCJwYWludCIsIl9yIiwiY3VycmVudFRpbWUiLCJieXRlc1BlclJvdyIsImNyb3BwZWQiLCJ0aW1lU2luY2VMYXN0RnJhbWUiLCJmcmFtZXNUb0luc2VydCIsIm5ld1Byb2dyZXNzIiwiaiIsImF1ZGlvIiwicmVzdWx0Iiwibm9lcnIiLCJyZXQiLCJQVVBfQVJHU19LRVkiLCJwYXJncyIsImFyZ3YiLCJwcml2IiwiYXJnIiwiREVGQVVMVF9XSURUSCIsIkRFRkFVTFRfSEVJR0hUIiwiREVGQVVMVF9GUFMiLCJERUZBVUxUX0RVUkFUSU9OIiwiREVGQVVMVF9PVVRfRElSIiwieiIsIm1ha2VDTEkiLCJwcm9ncmFtIiwib3B0cyIsImFwcCIsInByaW50RmVhdHVyZXMiXSwibWFwcGluZ3MiOiJpYUFLQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxjQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsTUFBQSxDQUFBLHdCQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsTUFBQSxDQUFBLEdBQUEsQ0FBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLE1BQUEsU0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsVUFBQSxDQUFBLElBQUEsQ0FBQSxZQUFBLENBQUEsSUFBQSxDQUFBLFFBQUEsQ0FBQSxJQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxPQUFBLE9BQUEsQ0FBQSxHQUFBLENBQUEsT0FBQSxDQUFBLE9BQUEsS0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsT0FBQSxPQUFBLENBQUEsR0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsT0FBQSxPQUFBLENBQUEsR0FBQSxDQUFBLE9BQUEsT0FBQSxDQUFBLEtBQUEsQ0FBQSxJQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsTUFBQSxLQUFBLENBQUEsc0JBQUEsQ0FBQSxDQUFBLENBQUEsb0JBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxFQUFBLElBQUEsRUFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsT0FBQSxDQUFBLFFBQUEsQ0FBQSxRQUFBLENBQUEsUUFBQSxDQUFBLFVBQUEsQ0FBQSxPQUFBLENBQUEsT0FBQSxDQUFBLEtBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsR0FBQSxNQUFBLEVBQUEsT0FBQSxDQUFBLEVBQUEsVUFBQSxDQUFBLENBQUEsQ0FBQSxtQkFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxJQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsUUFBQSxDQUFBLENBQUEsQ0FBQSxjQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLHFCQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxVQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxJQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQU1BLEdBQW1CLElBQ3ZCLE9BQU8sUUFBQSxDQUFhLEdBQUEsQ0FDaEIsSUFBSSxHQUFBLENBQUksQ0FBQSxLQUFBLEVBQVEsVUFBVSxDQUFBLENBQUUsRUFBRSxJQUFBLENBQzdCLFFBQUEsQ0FBUyxlQUFpQixRQUFBLENBQVMsYUFBQSxDQUFjLFFBQVEsV0FBQSxFQUFZLEdBQU0sUUFBQSxDQUMxRSxRQUFBLENBQVMsY0FBYyxHQUFBLENBQ3ZCLElBQUksR0FBQSxDQUFJLFNBQUEsQ0FBVyxTQUFTLE9BQU8sQ0FBQSxDQUFFLElBQUEsQ0FFaENDLENBQUFB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QUEsQ0FBSyxTQUFBLEVBQWEsQ0FBQSxDQUFBLENBQzdCLGFBQUEsQ0FBZUEsQ0FBQUEsQ0FBSyxhQUFBLEVBQWlCekwsRUFDdkMsQ0FBQyxFQUNILENBQUEsTUFBU3dGLENBQUFBLENBQUcsQ0FDVmpELENBQUFBLENBQU8sS0FBQSxDQUFNaUQsQ0FBQyxFQUNoQixDQUNGLENBQUMsQ0FBQSxDQUNILE1BQU1nRyxpQkFBQUEsQ0FBUSxVQUFBLENBQVdYLEVBQUFBLEVBQU8sRUFDbEMsQ0NoREEsT0FBQSxDQUFRLElBQUEsQ0FBSyxNQUFBLENBQVEsSUFBTWEsWUFBQUEsQ0FBSSxJQUFBLEVBQU0sQ0FBQSxDQUVyQyxJQUFNOUYsRUFBQUEsQ0FBTSxPQUFBLENBRVosU0FBUytGLEVBQUFBLEVBQWdCLENBQ3ZCcEosQ0FBQUEsQ0FBTyxLQUFBLENBQU1xRCxFQUFBQSxDQUFLLGVBQUEsQ0FBaUI4RixZQUFBQSxDQUFJLG1CQUFBLEVBQXFCLEVBQzlELENBRUFBLFlBQUFBLENBQUksSUFBQSxFQUFNLElBQUEsRUFBSyxDQUVmSCxFQUFBQSxDQUFRLE1BQU8sTUFBT3RHLENBQUFBLENBQVFVLENBQUFBLEdBQVksQ0FDeEMsR0FBSSxDQUNGK0YsWUFBQUEsQ0FBSSxFQUFBLENBQUcsaUJBQUEsQ0FBbUJDLEVBQWEsQ0FBQSxDQUN2QyxNQUFNRCxZQUFBQSxDQUFJLFNBQUEsRUFBVSxDQUNwQkMsRUFBQUEsRUFBYyxDQUNkLE1BQU05QyxFQUFBQSxDQUFPNUQsQ0FBQUEsQ0FBUVUsQ0FBTyxFQUM5QixDQUFBLE9BQUUsQ0FDQStGLFlBQUFBLENBQUksSUFBQSxHQUNOLENBQ0YsQ0FBQyxDQUFBIiwiZmlsZSI6ImFwcC5janMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTaGltIGdsb2JhbHMgaW4gY2pzIGJ1bmRsZVxuLy8gVGhlcmUncyBhIHdlaXJkIGJ1ZyB0aGF0IGVzYnVpbGQgd2lsbCBhbHdheXMgaW5qZWN0IGltcG9ydE1ldGFVcmxcbi8vIGlmIHdlIGV4cG9ydCBpdCBhcyBgY29uc3QgaW1wb3J0TWV0YVVybCA9IC4uLiBfX2ZpbGVuYW1lIC4uLmBcbi8vIEJ1dCB1c2luZyBhIGZ1bmN0aW9uIHdpbGwgbm90IGNhdXNlIHRoaXMgaXNzdWVcblxuY29uc3QgZ2V0SW1wb3J0TWV0YVVybCA9ICgpID0+IFxuICB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIgXG4gICAgPyBuZXcgVVJMKGBmaWxlOiR7X19maWxlbmFtZX1gKS5ocmVmIFxuICAgIDogKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdTQ1JJUFQnKSBcbiAgICAgID8gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMgXG4gICAgICA6IG5ldyBVUkwoXCJtYWluLmpzXCIsIGRvY3VtZW50LmJhc2VVUkkpLmhyZWY7XG5cbmV4cG9ydCBjb25zdCBpbXBvcnRNZXRhVXJsID0gLyogQF9fUFVSRV9fICovIGdldEltcG9ydE1ldGFVcmwoKVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNS5cblxuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSBcInVybFwiO1xuXG5leHBvcnQgY29uc3QgYmFzZWRpciA9IGRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjUuXG5cbmV4cG9ydCB0eXBlIEVudlBhcnNlcjxUPiA9ICh2YWx1ZTogdW5rbm93bikgPT4gVDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlOiBUKTogVDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KFxuICBuYW1lOiBzdHJpbmcsXG4gIHBhcnNlcjogRW52UGFyc2VyPFQ+LFxuICBkZWZhdWx0VmFsdWU/OiBULFxuKTogVCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KFxuICBuYW1lOiBzdHJpbmcsXG4gIHBhcnNlcjogRW52UGFyc2VyPFQ+LFxuICBkZWZhdWx0VmFsdWU/OiBULFxuKTogVCB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHBhcnNlcihwcm9jZXNzLmVudltuYW1lXSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlcih2YWx1ZTogdW5rbm93bik6IG51bWJlciB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgaWYgKE51bWJlci5pc05hTihudW0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSAke3ZhbHVlfSBpcyBub3QgYSB2YWxpZCBudW1iZXJgKTtcbiAgfVxuICByZXR1cm4gbnVtO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBiYXNlZGlyIH0gZnJvbSBcIi4vYmFzZWRpclwiO1xuaW1wb3J0IHsgcGVudiB9IGZyb20gXCIuL2VudlwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuY29uc3QgcHVwQXBwU2VhcmNoUGF0aHMgPSBbXG4gIGpvaW4oYmFzZWRpciwgXCJjanMvYXBwLmNqc1wiKSwgLy8gcHJvY2VzcyBmcm9tIGRpc3RcbiAgam9pbihiYXNlZGlyLCBcImFwcC5janNcIiksIC8vIHByb2Nlc3MgZnJvbSBkaXN0L2Nqc1xuICBqb2luKGJhc2VkaXIsIFwiLi4vLi4vY2pzL2FwcC5janNcIiksIC8vIHByb2Nlc3MgZnJvbSBzcmNcbl07XG5leHBvcnQgY29uc3QgcHVwQXBwUGF0aCA9IHB1cEFwcFNlYXJjaFBhdGhzLmZpbmQoZXhpc3RzU3luYykhO1xuXG5jb25zdCBlbnYgPSBwcm9jZXNzLmVudjtcbmV4cG9ydCBjb25zdCBwdXBMb2dMZXZlbCA9IHBlbnYoXCJQVVBfTE9HX0xFVkVMXCIsIHBhcnNlTnVtYmVyLCAyKTtcbmV4cG9ydCBjb25zdCBwdXBVc2VJbm5lclByb3h5ID0gZW52W1wiUFVQX1VTRV9JTk5FUl9QUk9YWVwiXSA9PT0gXCIxXCI7XG5leHBvcnQgY29uc3QgcHVwRkZtcGVnUGF0aCA9IGVudltcIlBVUF9GRk1QRUdfUEFUSFwiXSA/PyBgZmZtcGVnYDtcbmV4cG9ydCBjb25zdCBwdXBEaXNhYmxlR1BVID0gZW52W1wiUFVQX0RJU0FCTEVfR1BVXCJdID09PSBcIjFcIjtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB7IENoaWxkUHJvY2VzcywgdHlwZSBTZXJpYWxpemFibGUgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgcHVwTG9nTGV2ZWwgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXJMaWtlIHtcbiAgZGVidWc/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGluZm8/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIHdhcm4/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGVycm9yPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcbn1cblxuY29uc3QgREVCVUcgPSBcIjxwdXBAZGVidWc+XCI7XG5jb25zdCBJTkZPID0gXCI8cHVwQGluZm8+XCI7XG5jb25zdCBXQVJOID0gXCI8cHVwQHdhcm4+XCI7XG5jb25zdCBFUlJPUiA9IFwiPHB1cEBlcnJvcj5cIjtcbmNvbnN0IEZBVEFMID0gXCI8cHVwQGZhdGFsPlwiO1xuXG5mdW5jdGlvbiBzdGFja0hvb2sodGFyZ2V0OiBGdW5jdGlvbiwgX2NvbnRleHQ6IENsYXNzTWV0aG9kRGVjb3JhdG9yQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IExvZ2dlciwgLi4ubWVzc2FnZXM6IHVua25vd25bXSkge1xuICAgIGNvbnN0IHByb2Nlc3NlZCA9IG1lc3NhZ2VzLm1hcCgobXNnKSA9PiB7XG4gICAgICByZXR1cm4gbXNnIGluc3RhbmNlb2YgRXJyb3IgPyAobXNnLnN0YWNrID8/IFN0cmluZyhtc2cpKSA6IG1zZztcbiAgICB9KTtcbiAgICByZXR1cm4gdGFyZ2V0LmNhbGwodGhpcywgLi4ucHJvY2Vzc2VkKTtcbiAgfTtcbn1cblxuY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyTGlrZSB7XG4gIHByaXZhdGUgX2ltcGw/OiBMb2dnZXJMaWtlO1xuXG4gIGdldCBpbXBsKCk6IExvZ2dlckxpa2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbXBsO1xuICB9XG5cbiAgc2V0IGltcGwodmFsdWU6IExvZ2dlckxpa2UpIHtcbiAgICBjb25zdCBkZWJ1ZyA9IHZhbHVlLmRlYnVnID8/IGNvbnNvbGUuZGVidWc7XG4gICAgY29uc3QgaW5mbyA9IHZhbHVlLmluZm8gPz8gY29uc29sZS5pbmZvO1xuICAgIGNvbnN0IHdhcm4gPSB2YWx1ZS53YXJuID8/IGNvbnNvbGUud2FybjtcbiAgICBjb25zdCBlcnJvciA9IHZhbHVlLmVycm9yID8/IGNvbnNvbGUuZXJyb3I7XG4gICAgdGhpcy5faW1wbCA9IHtcbiAgICAgIGRlYnVnOiBwdXBMb2dMZXZlbCA+PSAzID8gZGVidWcgOiB1bmRlZmluZWQsXG4gICAgICBpbmZvOiBwdXBMb2dMZXZlbCA+PSAyID8gaW5mbyA6IHVuZGVmaW5lZCxcbiAgICAgIHdhcm46IHB1cExvZ0xldmVsID49IDEgPyB3YXJuIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3I6IHB1cExvZ0xldmVsID49IDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pbXBsID0gY29uc29sZTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZGVidWcoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZGVidWc/LihERUJVRywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBpbmZvKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmluZm8/LihJTkZPLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIHdhcm4oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8ud2Fybj8uKFdBUk4sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZXJyb3IoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihFUlJPUiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBmYXRhbCguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEZBVEFMLCAuLi5tZXNzYWdlcyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBpZiAobWVzc2FnZS5zdGFydHNXaXRoKERFQlVHKSkge1xuICAgICAgdGhpcy5kZWJ1ZyhtZXNzYWdlLnNsaWNlKERFQlVHLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1lc3NhZ2Uuc3RhcnRzV2l0aChJTkZPKSkge1xuICAgICAgdGhpcy5pbmZvKG1lc3NhZ2Uuc2xpY2UoSU5GTy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoV0FSTikpIHtcbiAgICAgIHRoaXMud2FybihtZXNzYWdlLnNsaWNlKFdBUk4ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobWVzc2FnZS5zdGFydHNXaXRoKEVSUk9SKSkge1xuICAgICAgdGhpcy5lcnJvcihtZXNzYWdlLnNsaWNlKEVSUk9SLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmZvKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIGF0dGFjaChwcm9jOiBDaGlsZFByb2Nlc3MsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmF0dGFjaGApO1xuICAgICAgbGV0IGZhdGFsOiBzdHJpbmcgPSBcIlwiO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoZGF0YTogQnVmZmVyIHwgU2VyaWFsaXphYmxlKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoRkFUQUwpKSB7XG4gICAgICAgICAgZmF0YWwgKz0gbWVzc2FnZS5zbGljZShGQVRBTC5sZW5ndGggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcHJvYy5zdGRlcnI/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jLnN0ZG91dD8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2NcbiAgICAgICAgLm9uKFwibWVzc2FnZVwiLCBkaXNwYXRjaClcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIGZhdGFsICs9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHByb2Mua2lsbCgpO1xuICAgICAgICB9KVxuICAgICAgICAub25jZShcImNsb3NlXCIsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgICBpZiAoY29kZSB8fCBzaWduYWwgfHwgZmF0YWwpIHtcbiAgICAgICAgICAgIGZhdGFsIHx8PSBgY29tbWFuZCBmYWlsZWQ6ICR7cHJvYy5zcGF3bmFyZ3Muam9pbihcIiBcIil9YDtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgLCB7IGNvZGUsIHNpZ25hbCwgZmF0YWwgfSk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGZhdGFsKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuaGFuZGxlZFJlamVjdGlvblwiLCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCByZWFzb24pO1xuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG5leHBvcnQgeyBsb2dnZXIgfTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMTAuXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IGFyY2gsIHBsYXRmb3JtIH0gZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGJhc2VkaXIgfSBmcm9tIFwiLi4vYmFzZS9iYXNlZGlyXCI7XG5cbmNvbnN0IHJ1c3RQYXRoID0gYHJ1c3QvJHtwbGF0Zm9ybSgpfS0ke2FyY2goKX0ubm9kZWA7XG5cbmNvbnN0IG5hdGl2ZVNlYXJjaFBhdGhzID0gW1xuICBqb2luKGJhc2VkaXIsIGAuLi8uLi8ke3J1c3RQYXRofWApLCAvLyBwcm9jZXNzIHN0YXJ0IGZyb20gc3JjXG4gIGpvaW4oYmFzZWRpciwgYC4uLyR7cnVzdFBhdGh9YCksIC8vIHByb2Nlc3Mgc3RhcnQgZnJvbSBkaXN0XG5dO1xuY29uc3QgbW9kID0gcmVxdWlyZShuYXRpdmVTZWFyY2hQYXRocy5maW5kKGV4aXN0c1N5bmMpISk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRml4ZWRCdWZmZXJXcml0ZXIge1xuICBuZXcgKFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBidWZmZXJTaXplOiBudW1iZXIsXG4gICAgcXVldWVEZXB0aD86IG51bWJlcixcbiAgKTogRml4ZWRCdWZmZXJXcml0ZXI7XG5cbiAgd3JpdGUoYnVmZmVyOiBCdWZmZXIpOiB2b2lkO1xuXG4gIGNsb3NlKCk6IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBjb25zdCBGaXhlZEJ1ZmZlcldyaXRlciA9IG1vZC5GaXhlZEJ1ZmZlcldyaXRlciBhcyBGaXhlZEJ1ZmZlcldyaXRlcjtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMDIuXG5cbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgeyBpcGNNYWluLCBzZXNzaW9uIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBybSwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tIFwib3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgRml4ZWRCdWZmZXJXcml0ZXIgfSBmcm9tIFwiLi4vcnVzdC9saWJcIjtcblxuY29uc3QgQVVESU9fQ0FQVFVSRV9TQ1JJUFQgPSBgXG4oZnVuY3Rpb24oKSB7XG4gIGlmICh3aW5kb3cuX19wdXBfYXVkaW9fY2FwdHVyaW5nX18pIHJldHVybjtcbiAgd2luZG93Ll9fcHVwX2F1ZGlvX2NhcHR1cmluZ19fID0gdHJ1ZTtcblxuICBjb25zdCB7IGlwY1JlbmRlcmVyIH0gPSByZXF1aXJlKCdlbGVjdHJvbicpO1xuICBjb25zdCBjYXB0dXJlZENvbnRleHRzID0gbmV3IFdlYWtTZXQoKTtcbiAgY29uc3Qgc291cmNlZEVsZW1lbnRzID0gbmV3IFdlYWtTZXQoKTtcbiAgbGV0IG1ldGFTZW50ID0gZmFsc2U7XG5cbiAgY29uc3Qgb3JpZ0NyZWF0ZU1FUyA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlO1xuICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZSA9IGZ1bmN0aW9uKGVsKSB7XG4gICAgc291cmNlZEVsZW1lbnRzLmFkZChlbCk7XG4gICAgcmV0dXJuIG9yaWdDcmVhdGVNRVMuY2FsbCh0aGlzLCBlbCk7XG4gIH07XG5cbiAgY29uc3Qgb3JpZ0Nvbm5lY3QgPSBBdWRpb05vZGUucHJvdG90eXBlLmNvbm5lY3Q7XG4gIEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uKGRlc3QsIG91dElkeCwgaW5JZHgpIHtcbiAgICBjb25zdCBjYXB0dXJlTm9kZSA9IGRlc3Q/LmNvbnRleHQ/Ll9fcHVwX2NhcHR1cmVOb2RlX187XG4gICAgaWYgKGNhcHR1cmVOb2RlICYmIGRlc3QgPT09IGRlc3QuY29udGV4dC5kZXN0aW5hdGlvbiAmJiB0aGlzICE9PSBjYXB0dXJlTm9kZSkge1xuICAgICAgb3JpZ0Nvbm5lY3QuY2FsbCh0aGlzLCBjYXB0dXJlTm9kZSwgb3V0SWR4LCBpbklkeCk7XG4gICAgfVxuICAgIHJldHVybiBvcmlnQ29ubmVjdC5jYWxsKHRoaXMsIGRlc3QsIG91dElkeCwgaW5JZHgpO1xuICB9O1xuXG4gIGNvbnN0IE9yaWdBQyA9IHdpbmRvdy5BdWRpb0NvbnRleHQgfHwgd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dDtcbiAgaWYgKCFPcmlnQUMpIHJldHVybjtcblxuICBmdW5jdGlvbiBQYXRjaGVkQUMoKSB7XG4gICAgY29uc3QgY3R4ID0gbmV3IE9yaWdBQyguLi5hcmd1bWVudHMpO1xuICAgIGlmICghY2FwdHVyZWRDb250ZXh0cy5oYXMoY3R4KSkge1xuICAgICAgY2FwdHVyZWRDb250ZXh0cy5hZGQoY3R4KTtcbiAgICAgIGlmICghbWV0YVNlbnQpIHtcbiAgICAgICAgbWV0YVNlbnQgPSB0cnVlO1xuICAgICAgICBpcGNSZW5kZXJlci5zZW5kKCdhdWRpby1tZXRhJywgeyBzYW1wbGVSYXRlOiBjdHguc2FtcGxlUmF0ZSB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5vZGUgPSBjdHguY3JlYXRlU2NyaXB0UHJvY2Vzc29yKDQwOTYsIDIsIDIpO1xuICAgICAgbm9kZS5vbmF1ZGlvcHJvY2VzcyA9IChlKSA9PiB7XG4gICAgICAgIGNvbnN0IEwgPSBlLmlucHV0QnVmZmVyLmdldENoYW5uZWxEYXRhKDApO1xuICAgICAgICBjb25zdCBSID0gZS5pbnB1dEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgxKTtcbiAgICAgICAgY29uc3Qgb3V0ID0gbmV3IEZsb2F0MzJBcnJheShMLmxlbmd0aCAqIDIpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IEwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBvdXRbaSAqIDJdID0gTFtpXTtcbiAgICAgICAgICBvdXRbaSAqIDIgKyAxXSA9IFJbaV07XG4gICAgICAgIH1cbiAgICAgICAgaXBjUmVuZGVyZXIuc2VuZCgnYXVkaW8tY2h1bmsnLCBCdWZmZXIuZnJvbShvdXQuYnVmZmVyKSk7XG4gICAgICB9O1xuICAgICAgbm9kZS5jb25uZWN0KGN0eC5kZXN0aW5hdGlvbik7XG4gICAgICBjdHguX19wdXBfY2FwdHVyZU5vZGVfXyA9IG5vZGU7XG4gICAgfVxuICAgIHJldHVybiBjdHg7XG4gIH1cbiAgUGF0Y2hlZEFDLnByb3RvdHlwZSA9IE9yaWdBQy5wcm90b3R5cGU7XG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihQYXRjaGVkQUMsIE9yaWdBQyk7XG4gIHdpbmRvdy5BdWRpb0NvbnRleHQgPSBQYXRjaGVkQUM7XG4gIGlmICgnd2Via2l0QXVkaW9Db250ZXh0JyBpbiB3aW5kb3cpIHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQgPSBQYXRjaGVkQUM7XG5cbiAgY29uc3Qgb3JpZ1BsYXkgPSBIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5wbGF5O1xuICBIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLl9fcHVwX2NhcHR1cmVkX18pIHtcbiAgICAgIHRoaXMuX19wdXBfY2FwdHVyZWRfXyA9IHRydWU7XG4gICAgICBjb25zdCBlbCA9IHRoaXM7XG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKCFzb3VyY2VkRWxlbWVudHMuaGFzKGVsKSkge1xuICAgICAgICAgIGNvbnN0IGN0eCA9IG5ldyBQYXRjaGVkQUMoKTtcbiAgICAgICAgICBjdHguY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKGVsKS5jb25uZWN0KGN0eC5kZXN0aW5hdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gb3JpZ1BsYXkuY2FsbCh0aGlzKTtcbiAgfTtcbn0pKCk7XG5gO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvQ2FwdHVyZSB7XG4gIHNhbXBsZVJhdGU/OiBudW1iZXI7XG4gIHRlYXJkb3duKCk6IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXR1cEF1ZGlvQ2FwdHVyZShcbiAgcGNtUGF0aDogc3RyaW5nLFxuKTogUHJvbWlzZTxBdWRpb0NhcHR1cmU+IHtcbiAgY29uc3QgcHJlbG9hZFBhdGggPSBqb2luKHRtcGRpcigpLCBgcHVwX2F1ZGlvX3ByZWxvYWRfJHtyYW5kb21VVUlEKCl9LmpzYCk7XG4gIGF3YWl0IHdyaXRlRmlsZShwcmVsb2FkUGF0aCwgQVVESU9fQ0FQVFVSRV9TQ1JJUFQpO1xuICBzZXNzaW9uLmRlZmF1bHRTZXNzaW9uLnJlZ2lzdGVyUHJlbG9hZFNjcmlwdCh7XG4gICAgdHlwZTogXCJmcmFtZVwiLFxuICAgIGlkOiBcInB1cC1hdWRpb1wiLFxuICAgIGZpbGVQYXRoOiBwcmVsb2FkUGF0aCxcbiAgfSk7XG5cbiAgY29uc3Qgd3JpdGVyID0gbmV3IEZpeGVkQnVmZmVyV3JpdGVyKHBjbVBhdGgsIDQwOTYgKiAyICogNCk7XG4gIGNvbnN0IGNhcHR1cmU6IEF1ZGlvQ2FwdHVyZSA9IHtcbiAgICBzYW1wbGVSYXRlOiB1bmRlZmluZWQsXG4gICAgYXN5bmMgdGVhcmRvd24oKSB7XG4gICAgICBpcGNNYWluLnJlbW92ZUFsbExpc3RlbmVycyhcImF1ZGlvLWNodW5rXCIpO1xuICAgICAgaXBjTWFpbi5yZW1vdmVBbGxMaXN0ZW5lcnMoXCJhdWRpby1tZXRhXCIpO1xuICAgICAgYXdhaXQgd3JpdGVyLmNsb3NlKCk7XG4gICAgICBzZXNzaW9uLmRlZmF1bHRTZXNzaW9uLnVucmVnaXN0ZXJQcmVsb2FkU2NyaXB0KFwicHVwLWF1ZGlvXCIpO1xuICAgICAgYXdhaXQgcm0ocHJlbG9hZFBhdGgsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgfSxcbiAgfTtcblxuICBpcGNNYWluLm9uY2UoXCJhdWRpby1tZXRhXCIsIChfZSwgZGF0YTogeyBzYW1wbGVSYXRlOiBudW1iZXIgfSkgPT4ge1xuICAgIGNhcHR1cmUuc2FtcGxlUmF0ZSA9IGRhdGEuc2FtcGxlUmF0ZTtcbiAgfSk7XG4gIGlwY01haW4ub24oXCJhdWRpby1jaHVua1wiLCAoX2UsIGJ1ZmZlcjogQnVmZmVyKSA9PiB7XG4gICAgd3JpdGVyLndyaXRlKGJ1ZmZlcik7XG4gIH0pO1xuICByZXR1cm4gY2FwdHVyZTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB0eXBlIHsgRGVidWdnZXIsIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcblxuZXhwb3J0IGNvbnN0IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIID0gMzI7XG5leHBvcnQgY29uc3QgRlJBTUVfU1lOQ19NQVJLRVJfSEVJR0hUID0gMTtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkV3JhcHBlckhUTUwodGFyZ2V0VVJMOiBzdHJpbmcsIHNpemU6IFNpemUpOiBzdHJpbmcge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIHJldHVybiBgPCFET0NUWVBFIGh0bWw+XG48aHRtbD5cbjxoZWFkPlxuICA8bWV0YSBjaGFyc2V0PVwiVVRGLThcIj5cbiAgPHN0eWxlPlxuICAgICogeyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cbiAgICBodG1sLCBib2R5IHsgd2lkdGg6ICR7d2lkdGh9cHg7IGhlaWdodDogJHtoZWlnaHQgKyAxfXB4OyBvdmVyZmxvdzogaGlkZGVuOyB9XG4gICAgI3RhcmdldCB7IFxuICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgIHRvcDogMDsgXG4gICAgICBsZWZ0OiAwOyBcbiAgICAgIHdpZHRoOiAke3dpZHRofXB4OyBcbiAgICAgIGhlaWdodDogJHtoZWlnaHR9cHg7IFxuICAgICAgYm9yZGVyOiBub25lOyBcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAjc3RlZ28geyBcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgXG4gICAgICB0b3A6ICR7aGVpZ2h0fXB4OyBcbiAgICAgIGxlZnQ6IDA7IFxuICAgICAgd2lkdGg6ICR7d2lkdGh9cHg7IFxuICAgICAgaGVpZ2h0OiAxcHg7IFxuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDtcbiAgICB9XG4gIDwvc3R5bGU+XG48L2hlYWQ+XG48Ym9keT5cbiAgPGlmcmFtZSBpZD1cInRhcmdldFwiIHNyYz1cIiR7dGFyZ2V0VVJMfVwiPjwvaWZyYW1lPlxuICA8Y2FudmFzIGlkPVwic3RlZ29cIiB3aWR0aD1cIiR7d2lkdGh9XCIgaGVpZ2h0PVwiMVwiPjwvY2FudmFzPlxuICA8c2NyaXB0PlxuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IFdJRFRIID0gJHt3aWR0aH07XG4gICAgICBjb25zdCBNQVJLRVJfV0lEVEggPSAke0ZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIfTtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVnbycpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJywgeyB3aWxsUmVhZEZyZXF1ZW50bHk6IHRydWUgfSk7XG4gICAgICBsZXQgc3RhcnRUaW1lID0gbnVsbDtcbiAgICAgIGxldCByYWZJZCA9IG51bGw7XG5cbiAgICAgIGZ1bmN0aW9uIGVuY29kZVRpbWVzdGFtcCh0aW1lc3RhbXBNcykge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKFdJRFRILCAxKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGltYWdlRGF0YS5kYXRhO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgdGltZXN0YW1wSW50ID0gTWF0aC5mbG9vcih0aW1lc3RhbXBNcykgPj4+IDA7XG4gICAgICAgIFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1BUktFUl9XSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgYml0ID0gKHRpbWVzdGFtcEludCA+Pj4gKE1BUktFUl9XSURUSCAtIDEgLSBpKSkgJiAxO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gYml0ID8gMjU1IDogMDtcbiAgICAgICAgICBjb25zdCBpZHggPSBpICogNDtcbiAgICAgICAgICBkYXRhW2lkeF0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAyXSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgM10gPSAyNTU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGZvciAobGV0IGkgPSBNQVJLRVJfV0lEVEg7IGkgPCBXSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWR4ID0gaSAqIDQ7XG4gICAgICAgICAgZGF0YVtpZHhdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDNdID0gMjU1O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjdHgucHV0SW1hZ2VEYXRhKGltYWdlRGF0YSwgMCwgMCk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUxvb3AoKSB7XG4gICAgICAgIGlmIChzdGFydFRpbWUgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgY29uc3QgZWxhcHNlZCA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAoZWxhcHNlZCk7XG4gICAgICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUxvb3ApO1xuICAgICAgfVxuXG4gICAgICB3aW5kb3cuX19wdXBfc3RhcnRfcmVjb3JkaW5nX18gPSAoKSA9PiB7XG4gICAgICAgIHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAoMCk7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGVMb29wKTtcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdG9wX3JlY29yZGluZ19fID0gKCkgPT4ge1xuICAgICAgICBpZiAocmFmSWQgIT09IG51bGwpIHtcbiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZCk7XG4gICAgICAgICAgcmFmSWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pKCk7XG4gIDwvc2NyaXB0PlxuPC9ib2R5PlxuPC9odG1sPmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVUaW1lc3RhbXAoXG4gIGJpdG1hcDogQnVmZmVyLFxuICBzaXplOiBTaXplLFxuKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaXplO1xuICBpZiAod2lkdGggPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCB8fCBoZWlnaHQgPCAyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG1hcmtlclJvdyA9IGhlaWdodCAtIDE7XG5cbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEg7IGkrKykge1xuICAgIGNvbnN0IHBpeGVsSWR4ID0gKG1hcmtlclJvdyAqIHdpZHRoICsgaSkgKiA0O1xuICAgIGNvbnN0IHIgPSBiaXRtYXBbcGl4ZWxJZHhdID8/IDA7XG4gICAgY29uc3QgYml0ID0gciA+IDEyNyA/IDEgOiAwO1xuICAgIHRpbWVzdGFtcCA9ICh0aW1lc3RhbXAgPDwgMSkgfCBiaXQ7XG4gIH1cblxuICB0aW1lc3RhbXAgPSB0aW1lc3RhbXAgPj4+IDA7XG5cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodGltZXN0YW1wKSB8fCB0aW1lc3RhbXAgPCAwIHx8IHRpbWVzdGFtcCA+IDFlNykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gdGltZXN0YW1wO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRTeW5jKGNkcDogRGVidWdnZXIpIHtcbiAgcmV0dXJuIGNkcC5zZW5kQ29tbWFuZChcIlJ1bnRpbWUuZXZhbHVhdGVcIiwge1xuICAgIGV4cHJlc3Npb246IGB3aW5kb3cuX19wdXBfc3RhcnRfcmVjb3JkaW5nX18oKWAsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RvcFN5bmMoY2RwOiBEZWJ1Z2dlcikge1xuICByZXR1cm4gY2RwLnNlbmRDb21tYW5kKFwiUnVudGltZS5ldmFsdWF0ZVwiLCB7XG4gICAgZXhwcmVzc2lvbjogYHdpbmRvdy5fX3B1cF9zdG9wX3JlY29yZGluZ19fKClgLFxuICB9KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgTmF0aXZlSW1hZ2UgfSBmcm9tIFwiZWxlY3Ryb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkoaW1hZ2U6IE5hdGl2ZUltYWdlKSB7XG4gIGNvbnN0IHNpemUgPSBpbWFnZS5nZXRTaXplKCk7XG4gIGlmIChzaXplLndpZHRoID09PSAwIHx8IHNpemUuaGVpZ2h0ID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGltYWdlLmlzRW1wdHkoKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmNvbnN0IFNVUFBPUlRFRF9QUk9UT0NPTFMgPSBbXCJmaWxlOlwiLCBcImh0dHA6XCIsIFwiaHR0cHM6XCIsIFwiZGF0YTpcIl07XG5jb25zdCBTT1VSQ0VfUEFUVEVSTiA9IC9eKGZpbGU6fGh0dHBzPzp8ZGF0YTopLztcblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSFRNTChzb3VyY2U6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoU09VUkNFX1BBVFRFUk4udGVzdChzb3VyY2UpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcHJvdG9jb2wgPSBzb3VyY2Uuc3BsaXQoXCI6XCIpWzBdICsgXCI6XCI7XG4gIGNvbnN0IG1lc3NhZ2UgPSBTVVBQT1JURURfUFJPVE9DT0xTLmluY2x1ZGVzKHByb3RvY29sKVxuICAgID8gYHVuc3VwcG9ydGVkIHByb3RvY29sOiAke3Byb3RvY29sfSwgZXhwZWN0ZWQgJHtTVVBQT1JURURfUFJPVE9DT0xTLmpvaW4oXCIsIFwiKX1gXG4gICAgOiBgaW52YWxpZCBzb3VyY2UgZm9ybWF0LCBleHBlY3RlZCAke1NVUFBPUlRFRF9QUk9UT0NPTFMuam9pbihcIiwgXCIpfWA7XG5cbiAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuZXhwb3J0IGNsYXNzIENvbmN1cnJlbmN5TGltaXRlciB7XG4gIHByaXZhdGUgX2FjdGl2ZSA9IDA7XG4gIHByaXZhdGUgX3F1ZXVlOiBWb2lkRnVuY3Rpb25bXSA9IFtdO1xuICBwcml2YXRlIF9lbmRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1heENvbmN1cnJlbmN5OiBudW1iZXIpIHt9XG5cbiAgZ2V0IGFjdGl2ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gIH1cblxuICBnZXQgcGVuZGluZygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9xdWV1ZS5sZW5ndGg7XG4gIH1cblxuICBnZXQgc3RhdHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGFjdGl2ZTogJHt0aGlzLmFjdGl2ZX0sIHBlbmRpbmc6ICR7dGhpcy5wZW5kaW5nfWA7XG4gIH1cblxuICBhc3luYyBzY2hlZHVsZTxUPihmbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIGlmICh0aGlzLl9lbmRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZW5kZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBydW4gPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSsrO1xuICAgICAgICBmbigpXG4gICAgICAgICAgLnRoZW4oKHYpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgcmVzb2x2ZSh2KTtcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2gocnVuKTtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5kKCkge1xuICAgIGlmICh0aGlzLl9lbmRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9lbmRlZCA9IHRydWU7XG4gICAgd2hpbGUgKHRoaXMuX2FjdGl2ZSA+IDAgfHwgdGhpcy5wZW5kaW5nID4gMCkge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgNTApKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA8IHRoaXMubWF4Q29uY3VycmVuY3kpIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnNoaWZ0KCk/LigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMC5cblxuZXhwb3J0IGludGVyZmFjZSBXYWl0T3B0aW9ucyB7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgb25UaW1lb3V0PzogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIFdhaXRhYmxlRXZlbnQge1xuICBwcml2YXRlIF9wcm9taXNlPzogUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBfcmVzb2x2ZT86ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX3RpbWVvdXRUb2tlbj86IE5vZGVKUy5UaW1lb3V0O1xuXG4gIHdhaXQob3B0aW9ucz86IFdhaXRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3Byb21pc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImFscmVhZHkgd2FpdGluZ1wiKTtcbiAgICB9XG4gICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIGlmIChvcHRpb25zPy50aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fdGltZW91dFRva2VuID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgb3B0aW9ucy5vblRpbWVvdXQ/LigpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcbiAgfVxuXG4gIHNpZ25hbCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dFRva2VuKTtcbiAgICB0aGlzLl9wcm9taXNlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBCcm93c2VyV2luZG93IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBVUkwgfSBmcm9tIFwidXJsXCI7XG5pbXBvcnQgeyBDb25jdXJyZW5jeUxpbWl0ZXIgfSBmcm9tIFwiLi9saW1pdGVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5pbXBvcnQgeyBXYWl0YWJsZUV2ZW50IH0gZnJvbSBcIi4vd2FpdGFibGVfZXZlbnRcIjtcblxuY29uc3QgVEFHID0gXCJbTmV0d29ya11cIjtcblxuY29uc3QgbWFwID0gbmV3IE1hcChbXG4gIFtganNzei1ib3NzLmhkc2xiLmNvbWAsIGBqc3N6LWJvc3MuYmlsaWJpbGkuY29gXSwgLy9cbiAgW2Bib3NzLmhkc2xiLmNvbWAsIGBzaGpkLWJvc3MuYmlsaWJpbGkuY29gXSxcbl0pO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJveGllZFVybCh1cmw6IHN0cmluZykge1xuICBpZiAoIXVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgY29uc3QgcGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICBjb25zdCB0YXJnZXQgPSBtYXAuZ2V0KHBhcnNlZC5ob3N0bmFtZSk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBwYXJzZWQuaG9zdG5hbWUgPSB0YXJnZXQ7XG4gIHBhcnNlZC5wcm90b2NvbCA9IFwiaHR0cDpcIjtcbiAgcmV0dXJuIHBhcnNlZC50b1N0cmluZygpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbmRvdzogQnJvd3NlcldpbmRvdztcbiAgdXNlSW5uZXJQcm94eT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbnRlcmNlcHRvcih7XG4gIHNvdXJjZSxcbiAgd2luZG93LFxuICB1c2VJbm5lclByb3h5LFxufTogTmV0d29ya09wdGlvbnMpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgY29uc3QgbGltaXRlciA9IG5ldyBDb25jdXJyZW5jeUxpbWl0ZXIoMTApO1xuICBjb25zdCBldmVudHMgPSBuZXcgTWFwPHN0cmluZywgV2FpdGFibGVFdmVudD4oKTtcblxuICBhc3luYyBmdW5jdGlvbiB3YWl0KGtleTogc3RyaW5nLCBvblRpbWVvdXQ/OiAoKSA9PiB2b2lkKSB7XG4gICAgY29uc3QgZXZlbnQgPSBuZXcgV2FpdGFibGVFdmVudCgpO1xuICAgIGV2ZW50cy5zZXQoa2V5LCBldmVudCk7XG4gICAgYXdhaXQgZXZlbnRcbiAgICAgIC53YWl0KHsgdGltZW91dDogMTBfMDAwLCBvblRpbWVvdXQgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IGV2ZW50cy5kZWxldGUoa2V5KSk7XG4gIH1cblxuICBmdW5jdGlvbiBzaWduYWwoa2V5OiBzdHJpbmcpIHtcbiAgICBldmVudHMuZ2V0KGtleSk/LnNpZ25hbCgpO1xuICB9XG5cbiAgcmVxLm9uQmVmb3JlUmVxdWVzdCgoZGV0YWlscywgY2FsbGJhY2spID0+IHtcbiAgICBjb25zdCB1cmwgPSBkZXRhaWxzLnVybDtcbiAgICBjb25zdCBwcm94aWVkID0gdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwodXJsKSA6IHVybDtcbiAgICBsaW1pdGVyLnNjaGVkdWxlKCgpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBgc3RhcnQ6YCwge1xuICAgICAgICBrZXksXG4gICAgICAgIHVybCxcbiAgICAgICAgcHJveGllZCxcbiAgICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBzdGF0czogbGltaXRlci5zdGF0cyxcbiAgICAgIH0pO1xuICAgICAgaWYgKHByb3hpZWQgPT09IHVybCkge1xuICAgICAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UsIHJlZGlyZWN0VVJMOiBwcm94aWVkIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdhaXQoa2V5LCAoKSA9PiB7XG4gICAgICAgIGxvZ2dlci53YXJuKFRBRywgYG1heWJlIHRpbWVvdXQ6YCwge1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcHJveGllZCxcbiAgICAgICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVxLm9uSGVhZGVyc1JlY2VpdmVkKCh7IHJlc3BvbnNlSGVhZGVycyB9LCBjYWxsYmFjaykgPT4ge1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIngtZnJhbWUtb3B0aW9uc1wiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJYLUZyYW1lLU9wdGlvbnNcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiY29udGVudC1zZWN1cml0eS1wb2xpY3lcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiQ29udGVudC1TZWN1cml0eS1Qb2xpY3lcIl07XG4gICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZXNwb25zZUhlYWRlcnMgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkNvbXBsZXRlZCgoZGV0YWlscykgPT4ge1xuICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgc2lnbmFsKGtleSk7XG4gICAgbG9nZ2VyLmRlYnVnKFRBRywgYGNvbXBsZXRlZDpgLCB7XG4gICAgICBrZXksXG4gICAgICB1cmw6IGRldGFpbHMudXJsLFxuICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgIHN0YXR1c0NvZGU6IGRldGFpbHMuc3RhdHVzQ29kZSxcbiAgICAgIHNvdXJjZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVxLm9uRXJyb3JPY2N1cnJlZCgoZGV0YWlscykgPT4ge1xuICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgc2lnbmFsKGtleSk7XG4gICAgbG9nZ2VyLmVycm9yKFRBRywgYGVycm9yOmAsIHtcbiAgICAgIGtleSxcbiAgICAgIHVybDogZGV0YWlscy51cmwsXG4gICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgZXJyb3I6IGRldGFpbHMuZXJyb3IsXG4gICAgICBzb3VyY2UsXG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5zZXRJbnRlcmNlcHRvcih3aW5kb3c6IEJyb3dzZXJXaW5kb3cpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgcmVxLm9uQmVmb3JlUmVxdWVzdChudWxsKTtcbiAgcmVxLm9uSGVhZGVyc1JlY2VpdmVkKG51bGwpO1xuICByZXEub25Db21wbGV0ZWQobnVsbCk7XG4gIHJlcS5vbkVycm9yT2NjdXJyZWQobnVsbCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5leHBvcnQgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcikge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcmlvZGljYWwoXG4gIGNhbGxiYWNrOiAoY291bnQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQsXG4gIG1zOiBudW1iZXIsXG4pIHtcbiAgbGV0IHRva2VuOiBOb2RlSlMuVGltZW91dDtcbiAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuICBhc3luYyBmdW5jdGlvbiB0aWNrKGNvdW50OiBudW1iZXIpIHtcbiAgICBhd2FpdCBjYWxsYmFjayhjb3VudCk7XG4gICAgaWYgKGNsb3NlZCkgcmV0dXJuO1xuICAgIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKGNvdW50ICsgMSksIG1zKTtcbiAgfVxuICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljaygwKSwgbXMpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsb3NlZCA9IHRydWU7XG4gICAgY2xlYXJUaW1lb3V0KHRva2VuKTtcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDUuXG5cbmltcG9ydCB7IHNldFRpbWVvdXQgfSBmcm9tIFwidGltZXJzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9uczxBcmdzIGV4dGVuZHMgYW55W10sIFJldD4ge1xuICBmbjogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8UmV0PjtcbiAgbWF4QXR0ZW1wdHM/OiBudW1iZXI7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXRyeTxBcmdzIGV4dGVuZHMgYW55W10sIFJldD4oe1xuICBmbixcbiAgbWF4QXR0ZW1wdHMgPSAzLFxuICB0aW1lb3V0LFxufTogUmV0cnlPcHRpb25zPEFyZ3MsIFJldD4pIHtcbiAgY29uc3QgdGltZW91dEVycm9yID0gbmV3IEVycm9yKGB0aW1lb3V0IG92ZXIgJHt0aW1lb3V0fW1zYCk7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiAoLi4uYXJnczogQXJncykge1xuICAgIGxldCBhdHRlbXB0ID0gMDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbZm4oLi4uYXJncyldO1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHRpbWVvdXQpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyB0aW1lb3V0RXJyb3I7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJhY2UocHJvbWlzZXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgIGlmIChhdHRlbXB0ID49IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBzbGVlcChNYXRoLnBvdygyLCBhdHRlbXB0KSAqIDEwMCArIE1hdGgucmFuZG9tKCkgKiAxMDApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjcuXG5cbmltcG9ydCB7IEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGJ1aWxkV3JhcHBlckhUTUwgfSBmcm9tIFwiLi9mcmFtZV9zeW5jXCI7XG5pbXBvcnQgeyBjaGVja0hUTUwgfSBmcm9tIFwiLi9odG1sX2NoZWNrXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5pbXBvcnQgeyBwcm94aWVkVXJsLCBzZXRJbnRlcmNlcHRvciwgdW5zZXRJbnRlcmNlcHRvciB9IGZyb20gXCIuL25ldHdvcmtcIjtcbmltcG9ydCB7IHVzZVJldHJ5IH0gZnJvbSBcIi4vcmV0cnlcIjtcbmltcG9ydCB0eXBlIHsgUmVjb3JkT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuXG5jb25zdCBUQUcgPSBcIltXaW5kb3ddXCI7XG5cbmZ1bmN0aW9uIHdhaXRGb3JGaW5pc2god2luOiBCcm93c2VyV2luZG93LCBhY3Rpb246ICgpID0+IHZvaWQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dChcbiAgICAgICgpID0+IHJlamVjdChuZXcgRXJyb3IoXCJsb2FkIHdpbmRvdyB0aW1lb3V0XCIpKSxcbiAgICAgIDMwXzAwMCxcbiAgICApO1xuICAgIGNvbnN0IGRvbmUgPSAoZXJyPzogRXJyb3IpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZSgpO1xuICAgIH07XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtZmluaXNoLWxvYWRcIiwgKCkgPT4gZG9uZSgpKTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1mYWlsLWxvYWRcIiwgKF9lLCBjb2RlLCBkZXNjLCB1cmwpID0+XG4gICAgICBkb25lKG5ldyBFcnJvcihgZmFpbGVkIHRvIGxvYWQgJHt1cmx9OiBbJHtjb2RlfV0gJHtkZXNjfWApKSxcbiAgICApO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwicmVuZGVyLXByb2Nlc3MtZ29uZVwiLCAoX2UsIHsgZXhpdENvZGUsIHJlYXNvbiB9KSA9PlxuICAgICAgZG9uZShuZXcgRXJyb3IoYHJlbmRlcmVyIGNyYXNoZWQ6ICR7ZXhpdENvZGV9LCAke3JlYXNvbn1gKSksXG4gICAgKTtcbiAgICBhY3Rpb24oKTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9wZW5XaW5kb3coXG4gIHdpbnM6IEJyb3dzZXJXaW5kb3dbXSxcbiAgc291cmNlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlY29yZE9wdGlvbnMsXG4pOiBQcm9taXNlPEJyb3dzZXJXaW5kb3c+IHtcbiAgY2hlY2tIVE1MKHNvdXJjZSk7XG5cbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB1c2VJbm5lclByb3h5IH0gPSBvcHRpb25zO1xuXG4gIGxldCBzcmMgPSBzb3VyY2U7XG4gIGlmICh1c2VJbm5lclByb3h5KSB7XG4gICAgc3JjID0gcHJveGllZFVybChzb3VyY2UpO1xuICB9XG5cbiAgd2lucy5mb3JFYWNoKCh3KSA9PiB7XG4gICAgdy53ZWJDb250ZW50cy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICB1bnNldEludGVyY2VwdG9yKHcpO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBkZXN0cm95IHdpbmRvdzpgLCB3LmlkKTtcbiAgfSk7XG4gIGNvbnN0IHdpbiA9IG5ldyBCcm93c2VyV2luZG93KHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgc2hvdzogZmFsc2UsXG4gICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgYmFja2dyb3VuZENvbG9yOiB1bmRlZmluZWQsXG4gICAgd2ViUHJlZmVyZW5jZXM6IHtcbiAgICAgIG9mZnNjcmVlbjogdHJ1ZSxcbiAgICAgIGJhY2tncm91bmRUaHJvdHRsaW5nOiBmYWxzZSxcbiAgICAgIG5vZGVJbnRlZ3JhdGlvbjogdHJ1ZSxcbiAgICAgIG5vZGVJbnRlZ3JhdGlvbkluU3ViRnJhbWVzOiB0cnVlLFxuICAgICAgbm9kZUludGVncmF0aW9uSW5Xb3JrZXI6IHRydWUsXG4gICAgICBjb250ZXh0SXNvbGF0aW9uOiBmYWxzZSxcbiAgICAgIHdlYlNlY3VyaXR5OiBmYWxzZSxcbiAgICAgIGFsbG93UnVubmluZ0luc2VjdXJlQ29udGVudDogdHJ1ZSxcbiAgICAgIGV4cGVyaW1lbnRhbEZlYXR1cmVzOiB0cnVlLFxuICAgIH0sXG4gIH0pO1xuICBzZXRJbnRlcmNlcHRvcih7IHNvdXJjZSwgd2luZG93OiB3aW4sIHVzZUlubmVyUHJveHkgfSk7XG4gIHdpbnMuc3BsaWNlKDApLmZvckVhY2goKHcpID0+IHcuZGVzdHJveSgpKTtcbiAgd2lucy5wdXNoKHdpbik7XG5cbiAgd2luLndlYkNvbnRlbnRzLm9uKFxuICAgIFwiY29uc29sZS1tZXNzYWdlXCIsXG4gICAgKHsgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkIH0pID0+IHtcbiAgICAgIGlmIChsZXZlbCA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihUQUcsIFwiY29uc29sZTpcIiwge1xuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgbGluZU51bWJlcixcbiAgICAgICAgICBzb3VyY2VJZCxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICk7XG5cbiAgY29uc3Qgd3JhcHBlckhUTUwgPSBidWlsZFdyYXBwZXJIVE1MKHNyYywgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICBjb25zdCBkYXRhVVJMID0gYGRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgsJHtlbmNvZGVVUklDb21wb25lbnQod3JhcHBlckhUTUwpfWA7XG4gIGF3YWl0IHdhaXRGb3JGaW5pc2god2luLCAoKSA9PiB3aW4ubG9hZFVSTChkYXRhVVJMKSk7XG5cbiAgcmV0dXJuIHdpbjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRXaW5kb3coXG4gIHNvdXJjZTogc3RyaW5nLFxuICBvcHRpb25zOiBSZWNvcmRPcHRpb25zLFxuKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgd2luczogQnJvd3NlcldpbmRvd1tdID0gW107XG4gICAgY29uc3Qgd2luID0gYXdhaXQgdXNlUmV0cnkoeyBmbjogb3BlbldpbmRvdywgbWF4QXR0ZW1wdHM6IDIgfSkoXG4gICAgICB3aW5zLFxuICAgICAgc291cmNlLFxuICAgICAgb3B0aW9ucyxcbiAgICApO1xuICAgIGF3YWl0IHdhaXRGb3JGaW5pc2god2luLCAoKSA9PiB3aW4ucmVsb2FkKCkpO1xuICAgIHJldHVybiB3aW47XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBlIGFzIEVycm9yO1xuICAgIGNvbnN0IGRlc2MgPSB7IHNvdXJjZSwgbWVzc2FnZSwgc3RhY2sgfTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byBsb2FkIHdpbmRvdzogJHtKU09OLnN0cmluZ2lmeShkZXNjKX1gKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgdHlwZSBOYXRpdmVJbWFnZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbWtkaXIsIHdyaXRlRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBGaXhlZEJ1ZmZlcldyaXRlciB9IGZyb20gXCIuLi9ydXN0L2xpYlwiO1xuaW1wb3J0IHsgc2V0dXBBdWRpb0NhcHR1cmUgfSBmcm9tIFwiLi9hdWRpb19jYXB0dXJlXCI7XG5pbXBvcnQgeyBkZWNvZGVUaW1lc3RhbXAsIHN0YXJ0U3luYywgc3RvcFN5bmMgfSBmcm9tIFwiLi9mcmFtZV9zeW5jXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4vaW1hZ2VcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcbmltcG9ydCB0eXBlIHsgUmVjb3JkT3B0aW9ucywgUmVjb3JkUmVzdWx0IH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmNvbnN0IFRBRyA9IFwiW1JlY29yZF1cIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlY29yZChcbiAgc291cmNlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlY29yZE9wdGlvbnMsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgbG9nZ2VyLmluZm8oVEFHLCBgcHJvZ3Jlc3M6IDAlYCk7XG4gIGNvbnN0IHsgb3V0RGlyLCBmcHMsIHdpZHRoLCBoZWlnaHQsIGR1cmF0aW9uLCB3aXRoQXVkaW8gfSA9IG9wdGlvbnM7XG5cbiAgYXdhaXQgbWtkaXIob3V0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBjb25zdCBwY21QYXRoID0gam9pbihvdXREaXIsIFwib3V0cHV0LnBjbVwiKTtcbiAgY29uc3QgYXVkaW9DYXB0dXJlID0gd2l0aEF1ZGlvID8gYXdhaXQgc2V0dXBBdWRpb0NhcHR1cmUocGNtUGF0aCkgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3Qgd2luID0gYXdhaXQgbG9hZFdpbmRvdyhzb3VyY2UsIG9wdGlvbnMpO1xuXG4gIGNvbnN0IGNkcCA9IHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlcjtcbiAgY2RwLmF0dGFjaChcIjEuM1wiKTtcblxuICB3aW4ud2ViQ29udGVudHMuc2V0RnJhbWVSYXRlKGZwcyk7XG4gIGlmICghd2luLndlYkNvbnRlbnRzLmlzUGFpbnRpbmcoKSkge1xuICAgIHdpbi53ZWJDb250ZW50cy5zdGFydFBhaW50aW5nKCk7XG4gIH1cblxuICBjb25zdCBiZ3JhID0gam9pbihvdXREaXIsIFwib3V0cHV0LmJncmFcIik7XG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG4gIGNvbnN0IGJ1ZmZlclNpemUgPSB3aWR0aCAqIGhlaWdodCAqIDQ7XG5cbiAgY29uc3Qgd3JpdGVyID0gbmV3IEZpeGVkQnVmZmVyV3JpdGVyKGJncmEsIGJ1ZmZlclNpemUsIGZwcyk7XG5cbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgbGFzdFdyaXR0ZW5UaW1lOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGxldCBwcm9ncmVzcyA9IDA7XG4gIGxldCBmcmFtZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlc29sdmVyOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCByZWplY3RlcjogKChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcblxuICBjb25zdCBzY2hlZHVsZVdyaXRlID0gKGJ1ZmZlcjogQnVmZmVyKSA9PiB7XG4gICAgd3JpdHRlbisrO1xuICAgIHRyeSB7XG4gICAgICB3cml0ZXIud3JpdGUoYnVmZmVyKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZnJhbWVFcnJvciA/Pz0gZXJyb3IgYXMgRXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHBhaW50ID0gKF9lOiB1bmtub3duLCBfcjogdW5rbm93biwgaW1hZ2U6IE5hdGl2ZUltYWdlKSA9PiB7XG4gICAgaWYgKGZyYW1lRXJyb3IpIHtcbiAgICAgIHJlamVjdGVyPy4oZnJhbWVFcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHdyaXR0ZW4gPj0gdG90YWwpIHtcbiAgICAgIHJlc29sdmVyPy4oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNFbXB0eShpbWFnZSkpIHJldHVybjtcblxuICAgIGNvbnN0IGJpdG1hcCA9IGltYWdlLnRvQml0bWFwKCk7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBkZWNvZGVUaW1lc3RhbXAoYml0bWFwLCBpbWFnZS5nZXRTaXplKCkpO1xuICAgIGlmIChjdXJyZW50VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmcmFtZUVycm9yID8/PSBuZXcgRXJyb3IoYG5vIHRpbWVzdGFtcCBAICR7d3JpdHRlbn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBieXRlc1BlclJvdyA9IHdpZHRoICogNDtcbiAgICBjb25zdCBjcm9wcGVkID0gYml0bWFwLnN1YmFycmF5KDAsIGhlaWdodCAqIGJ5dGVzUGVyUm93KTtcblxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZWR1bGVXcml0ZShjcm9wcGVkKTtcbiAgICAgIGxhc3RXcml0dGVuVGltZSA9IGN1cnJlbnRUaW1lO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVTaW5jZUxhc3RGcmFtZSA9IGN1cnJlbnRUaW1lIC0gbGFzdFdyaXR0ZW5UaW1lO1xuICAgIGlmICh0aW1lU2luY2VMYXN0RnJhbWUgPCBmcmFtZUludGVydmFsICogMC44KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRpbWVTaW5jZUxhc3RGcmFtZSA8PSBmcmFtZUludGVydmFsICogMS4yKSB7XG4gICAgICBzY2hlZHVsZVdyaXRlKGNyb3BwZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmcmFtZXNUb0luc2VydCA9IE1hdGgucm91bmQodGltZVNpbmNlTGFzdEZyYW1lIC8gZnJhbWVJbnRlcnZhbCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyYW1lc1RvSW5zZXJ0ICYmIHdyaXR0ZW4gPCB0b3RhbDsgaSsrKSB7XG4gICAgICAgIHNjaGVkdWxlV3JpdGUoY3JvcHBlZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGxhc3RXcml0dGVuVGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICBpZiAoTWF0aC5hYnMobmV3UHJvZ3Jlc3MgLSBwcm9ncmVzcykgPiAxMCkge1xuICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgIGxvZ2dlci5pbmZvKFRBRywgYHByb2dyZXNzOiAke01hdGgucm91bmQocHJvZ3Jlc3MpfSVgKTtcbiAgICB9XG4gIH07XG5cbiAgd2luLndlYkNvbnRlbnRzLm9uKFwicGFpbnRcIiwgcGFpbnQpO1xuICBhd2FpdCBzdGFydFN5bmMoY2RwKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigociwgaikgPT4gKFtyZXNvbHZlciwgcmVqZWN0ZXJdID0gW3IsIGpdKSk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgc3RvcFN5bmMoY2RwKTtcbiAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgcGFpbnQpO1xuICAgIGF3YWl0IHdyaXRlci5jbG9zZSgpO1xuICAgIGF3YWl0IGF1ZGlvQ2FwdHVyZT8udGVhcmRvd24oKTtcbiAgfVxuXG4gIGlmIChmcmFtZUVycm9yIHx8IHdyaXR0ZW4gPT09IDApIHtcbiAgICB0aHJvdyBmcmFtZUVycm9yID8/IG5ldyBFcnJvcihcIm5vIGZyYW1lcyBjYXB0dXJlZFwiKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgYXVkaW8gPSBhdWRpb0NhcHR1cmU/LnNhbXBsZVJhdGVcbiAgICAgID8geyBwY21QYXRoLCBzYW1wbGVSYXRlOiBhdWRpb0NhcHR1cmUuc2FtcGxlUmF0ZSB9XG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZFJlc3VsdCA9IHsgb3B0aW9ucywgd3JpdHRlbiwgYmdyYSwgYXVkaW8gfTtcbiAgICBhd2FpdCB3cml0ZUZpbGUoam9pbihvdXREaXIsIFwicmVjb3JkLmpzb25cIiksIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpO1xuICAgIGxvZ2dlci5pbmZvKFRBRywgYHByb2dyZXNzOiAxMDAlLCAke3dyaXR0ZW59IGZyYW1lcyB3cml0dGVuYCk7XG4gIH0gZmluYWxseSB7XG4gICAgd2luLmNsb3NlKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjQuXG5cbmV4cG9ydCBmdW5jdGlvbiBub2VycjxGbiBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55LCBEPihcbiAgZm46IEZuLFxuICBkZWZhdWx0VmFsdWU6IEQsXG4pOiAoLi4uYXJnczogUGFyYW1ldGVyczxGbj4pID0+IFJldHVyblR5cGU8Rm4+IHwgRCB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXQgPSBmbiguLi5hcmdzKTtcbiAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiByZXQuY2F0Y2goKCkgPT4gZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IHNwYXduLCB0eXBlIENoaWxkUHJvY2VzcywgdHlwZSBTcGF3bk9wdGlvbnMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5leHBvcnQgY29uc3QgUFVQX0FSR1NfS0VZID0gXCItLXB1cC1wcml2LWFyZ3NcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmdzKCkge1xuICBjb25zdCBhcmd2ID0gcHJvY2Vzcy5hcmd2O1xuICBsZXQgcHJpdiA9IGFyZ3YuZmluZCgoYXJnKSA9PiBhcmcuc3RhcnRzV2l0aChQVVBfQVJHU19LRVkpKTtcbiAgaWYgKCFwcml2KSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwicHJvY2FyZ3ZcIiwgYXJndik7XG4gICAgcmV0dXJuIHByb2Nlc3MuYXJndjtcbiAgfVxuICBjb25zdCBhcmdzID0gW1wiZXhlY1wiLCAuLi5hcmd2LnNsaWNlKC0xKV07XG4gIHByaXYgPSBCdWZmZXIuZnJvbShwcml2LnNwbGl0KFwiPVwiKVsxXSEsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKCk7XG4gIGFyZ3MucHVzaCguLi5KU09OLnBhcnNlKHByaXYpKTtcbiAgbG9nZ2VyLmRlYnVnKFwicHVwYXJnc1wiLCBhcmdzKTtcbiAgcmV0dXJuIGFyZ3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc0hhbmRsZSB7XG4gIHByb2Nlc3M6IENoaWxkUHJvY2VzcztcbiAgd2FpdDogUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY21kOiBzdHJpbmcsIG9wdGlvbnM/OiBTcGF3bk9wdGlvbnMpOiBQcm9jZXNzSGFuZGxlIHtcbiAgY29uc3QgcGFydHMgPSBjbWQuc3BsaXQoXCIgXCIpLmZpbHRlcigocykgPT4gcy5sZW5ndGgpO1xuICBjb25zdCBbY29tbWFuZCwgLi4uYXJnc10gPSBwYXJ0cztcbiAgaWYgKCFjb21tYW5kKSB0aHJvdyBuZXcgRXJyb3IoXCJlbXB0eSBjb21tYW5kXCIpO1xuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZCwgYXJncywge1xuICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbiAgcmV0dXJuIHsgcHJvY2VzczogcHJvYywgd2FpdDogbG9nZ2VyLmF0dGFjaChwcm9jLCBjb21tYW5kKSB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHR5cGUgeyBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeiBmcm9tIFwiem9kXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9TcGVjIHtcbiAgZnBzOiBudW1iZXI7XG4gIGZyYW1lczogbnVtYmVyO1xuICBzaXplOiBTaXplO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRmlsZXMge1xuICBtcDQ/OiBzdHJpbmc7XG4gIHdlYm0/OiBzdHJpbmc7XG4gIG1vdj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0ZpbGVzV2l0aENvdmVyIGV4dGVuZHMgVmlkZW9GaWxlcyB7XG4gIGNvdmVyOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1dJRFRIID0gMTkyMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFSUdIVCA9IDEwODA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9GUFMgPSAzMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0RVUkFUSU9OID0gNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVF9ESVIgPSBcIm91dFwiO1xuXG5leHBvcnQgY29uc3QgUmVjb3JkU2NoZW1hID0gei5vYmplY3Qoe1xuICBkdXJhdGlvbjogelxuICAgIC5udW1iZXIoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlZmF1bHQoREVGQVVMVF9EVVJBVElPTilcbiAgICAuZGVzY3JpYmUoXCJSZWNvcmRpbmcgZHVyYXRpb24gaW4gc2Vjb25kc1wiKSxcbiAgd2lkdGg6IHoubnVtYmVyKCkub3B0aW9uYWwoKS5kZWZhdWx0KERFRkFVTFRfV0lEVEgpLmRlc2NyaWJlKFwiVmlkZW8gd2lkdGhcIiksXG4gIGhlaWdodDogelxuICAgIC5udW1iZXIoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlZmF1bHQoREVGQVVMVF9IRUlHSFQpXG4gICAgLmRlc2NyaWJlKFwiVmlkZW8gaGVpZ2h0XCIpLFxuICBmcHM6IHoubnVtYmVyKCkub3B0aW9uYWwoKS5kZWZhdWx0KERFRkFVTFRfRlBTKS5kZXNjcmliZShcIkZyYW1lcyBwZXIgc2Vjb25kXCIpLFxuICB3aXRoQWxwaGFDaGFubmVsOiB6XG4gICAgLmJvb2xlYW4oKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlZmF1bHQoZmFsc2UpXG4gICAgLmRlc2NyaWJlKFwiT3V0cHV0IHdpdGggYWxwaGEgY2hhbm5lbFwiKSxcbiAgd2l0aEF1ZGlvOiB6XG4gICAgLmJvb2xlYW4oKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlZmF1bHQoZmFsc2UpXG4gICAgLmRlc2NyaWJlKFwiQ2FwdHVyZSBhbmQgZW5jb2RlIGF1ZGlvXCIpLFxuICBvdXREaXI6IHpcbiAgICAuc3RyaW5nKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZWZhdWx0KERFRkFVTFRfT1VUX0RJUilcbiAgICAuZGVzY3JpYmUoXCJPdXRwdXQgZGlyZWN0b3J5XCIpLFxuICB1c2VJbm5lclByb3h5OiB6XG4gICAgLmJvb2xlYW4oKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlZmF1bHQoZmFsc2UpXG4gICAgLmRlc2NyaWJlKFwiVXNlIGJpbGliaWxpIGlubmVyIHByb3h5IGZvciByZXNvdXJjZSBhY2Nlc3NcIiksXG59KTtcblxuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRPcHRpb25zIHtcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICB3aXRoQWxwaGFDaGFubmVsOiBib29sZWFuO1xuICB3aXRoQXVkaW86IGJvb2xlYW47XG4gIG91dERpcjogc3RyaW5nO1xuICB1c2VJbm5lclByb3h5OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvU3BlYyB7XG4gIHBjbVBhdGg6IHN0cmluZztcbiAgc2FtcGxlUmF0ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZFJlc3VsdCB7XG4gIG9wdGlvbnM6IFJlY29yZE9wdGlvbnM7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgYmdyYTogc3RyaW5nO1xuICBhdWRpbz86IEF1ZGlvU3BlYztcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IHByb2dyYW0gfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgeyBwdXBVc2VJbm5lclByb3h5IH0gZnJvbSBcIi4vYmFzZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgbm9lcnIgfSBmcm9tIFwiLi9iYXNlL25vZXJyXCI7XG5pbXBvcnQgeyBwYXJzZU51bWJlciB9IGZyb20gXCIuL2Jhc2UvcGFyc2VyXCI7XG5pbXBvcnQgeyBwYXJncyB9IGZyb20gXCIuL2Jhc2UvcHJvY2Vzc1wiO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9EVVJBVElPTixcbiAgREVGQVVMVF9GUFMsXG4gIERFRkFVTFRfSEVJR0hULFxuICBERUZBVUxUX09VVF9ESVIsXG4gIERFRkFVTFRfV0lEVEgsXG4gIHR5cGUgUmVjb3JkT3B0aW9ucyxcbn0gZnJvbSBcIi4vYmFzZS9zY2hlbWFcIjtcblxuZXhwb3J0IHR5cGUgQ0xJQ2FsbGJhY2sgPSAoXG4gIHNvdXJjZTogc3RyaW5nLFxuICBvcHRpb25zOiBSZWNvcmRPcHRpb25zLFxuKSA9PiBQcm9taXNlPHVua25vd24+O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFrZUNMSShuYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiBDTElDYWxsYmFjaykge1xuICBwcm9ncmFtXG4gICAgLm5hbWUobmFtZSlcbiAgICAuYXJndW1lbnQoXCI8c291cmNlPlwiLCBcImZpbGU6Ly8sIGh0dHAocyk6Ly8sIOaIliBkYXRhOiBVUklcIilcbiAgICAub3B0aW9uKFwiLXcsIC0td2lkdGggPG51bWJlcj5cIiwgXCLop4bpopHlrr3luqZcIiwgYCR7REVGQVVMVF9XSURUSH1gKVxuICAgIC5vcHRpb24oXCItaCwgLS1oZWlnaHQgPG51bWJlcj5cIiwgXCLop4bpopHpq5jluqZcIiwgYCR7REVGQVVMVF9IRUlHSFR9YClcbiAgICAub3B0aW9uKFwiLWYsIC0tZnBzIDxudW1iZXI+XCIsIFwi5bin546HXCIsIGAke0RFRkFVTFRfRlBTfWApXG4gICAgLm9wdGlvbihcIi10LCAtLWR1cmF0aW9uIDxudW1iZXI+XCIsIFwi5b2V5Yi25pe26ZW/77yI56eS77yJXCIsIGAke0RFRkFVTFRfRFVSQVRJT059YClcbiAgICAub3B0aW9uKFwiLW8sIC0tb3V0LWRpciA8cGF0aD5cIiwgXCLovpPlh7rnm67lvZVcIiwgYCR7REVGQVVMVF9PVVRfRElSfWApXG4gICAgLm9wdGlvbihcIi1hLCAtLXdpdGgtYWxwaGEtY2hhbm5lbFwiLCBcIui+k+WHuuWMheWQqyBhbHBoYSDpgJrpgZPnmoTop4bpopFcIiwgZmFsc2UpXG4gICAgLm9wdGlvbihcIi1zLCAtLXdpdGgtYXVkaW9cIiwgXCLmjZXojrflubbmt7flhaXpn7PpopFcIiwgZmFsc2UpXG4gICAgLm9wdGlvbihcbiAgICAgIFwiLS11c2UtaW5uZXItcHJveHlcIixcbiAgICAgIFwi5L2/55SoIEIg56uZ5YaF572R5Luj55CG5Yqg6YCf6LWE5rqQ6K6/6ZeuXCIsXG4gICAgICBwdXBVc2VJbm5lclByb3h5LFxuICAgIClcbiAgICAuYWN0aW9uKGFzeW5jIChzb3VyY2U6IHN0cmluZywgb3B0cykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY2FsbGJhY2soc291cmNlLCB7XG4gICAgICAgICAgd2lkdGg6IG5vZXJyKHBhcnNlTnVtYmVyLCBERUZBVUxUX1dJRFRIKShvcHRzLndpZHRoKSxcbiAgICAgICAgICBoZWlnaHQ6IG5vZXJyKHBhcnNlTnVtYmVyLCBERUZBVUxUX0hFSUdIVCkob3B0cy5oZWlnaHQpLFxuICAgICAgICAgIGZwczogbm9lcnIocGFyc2VOdW1iZXIsIERFRkFVTFRfRlBTKShvcHRzLmZwcyksXG4gICAgICAgICAgZHVyYXRpb246IG5vZXJyKHBhcnNlTnVtYmVyLCBERUZBVUxUX0RVUkFUSU9OKShvcHRzLmR1cmF0aW9uKSxcbiAgICAgICAgICBvdXREaXI6IG9wdHMub3V0RGlyID8/IERFRkFVTFRfT1VUX0RJUixcbiAgICAgICAgICB3aXRoQWxwaGFDaGFubmVsOiBvcHRzLndpdGhBbHBoYUNoYW5uZWwgPz8gZmFsc2UsXG4gICAgICAgICAgd2l0aEF1ZGlvOiBvcHRzLndpdGhBdWRpbyA/PyBmYWxzZSxcbiAgICAgICAgICB1c2VJbm5lclByb3h5OiBvcHRzLnVzZUlubmVyUHJveHkgPz8gcHVwVXNlSW5uZXJQcm94eSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5mYXRhbChlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHBhcmdzKCkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgYXBwIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IHJlY29yZCB9IGZyb20gXCIuL2Jhc2UvcmVjb3JkXCI7XG5pbXBvcnQgeyBtYWtlQ0xJIH0gZnJvbSBcIi4vY29tbW9uXCI7XG5cbnByb2Nlc3Mub25jZShcImV4aXRcIiwgKCkgPT4gYXBwLnF1aXQoKSk7XG5cbmNvbnN0IFRBRyA9IFwiW0FwcF1cIjtcblxuZnVuY3Rpb24gcHJpbnRGZWF0dXJlcygpIHtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJncHUgZmVhdHVyZXM6XCIsIGFwcC5nZXRHUFVGZWF0dXJlU3RhdHVzKCkpO1xufVxuXG5hcHAuZG9jaz8uaGlkZSgpO1xuXG5tYWtlQ0xJKFwiYXBwXCIsIGFzeW5jIChzb3VyY2UsIG9wdGlvbnMpID0+IHtcbiAgdHJ5IHtcbiAgICBhcHAub24oXCJncHUtaW5mby11cGRhdGVcIiwgcHJpbnRGZWF0dXJlcyk7XG4gICAgYXdhaXQgYXBwLndoZW5SZWFkeSgpO1xuICAgIHByaW50RmVhdHVyZXMoKTtcbiAgICBhd2FpdCByZWNvcmQoc291cmNlLCBvcHRpb25zKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhcHAucXVpdCgpO1xuICB9XG59KTtcbiJdfQ==
|