@ampt/cli 1.1.21 → 1.1.22

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/cli.js CHANGED
@@ -1,4 +1,4 @@
1
- var bPe=Object.create;var _m=Object.defineProperty;var IPe=Object.getOwnPropertyDescriptor;var _Pe=Object.getOwnPropertyNames;var CPe=Object.getPrototypeOf,xPe=Object.prototype.hasOwnProperty;var SPe=(e,t,r)=>t in e?_m(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var ae=(e,t)=>()=>(e&&(t=e(e=0)),t);var y=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),XR=(e,t)=>{for(var r in t)_m(e,r,{get:t[r],enumerable:!0})},YM=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of _Pe(t))!xPe.call(e,i)&&i!==r&&_m(e,i,{get:()=>t[i],enumerable:!(n=IPe(t,i))||n.enumerable});return e};var xe=(e,t,r)=>(r=e!=null?bPe(CPe(e)):{},YM(t||!e||!e.__esModule?_m(r,"default",{value:e,enumerable:!0}):r,e)),YR=e=>YM(_m({},"__esModule",{value:!0}),e);var Cr=(e,t,r)=>(SPe(e,typeof t!="symbol"?t+"":t,r),r),KM=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)};var To=(e,t,r)=>(KM(e,t,"read from private field"),r?r.call(e):t.get(e)),Cm=(e,t,r)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,r)},KR=(e,t,r,n)=>(KM(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r);var wPe,c=ae(()=>{wPe=typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};wPe.SENTRY_RELEASE={id:"1.1.21"}});var wI=y((zR,JR)=>{c();(function(e,t){typeof zR=="object"&&typeof JR<"u"?JR.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs=t()})(zR,function(){"use strict";var e=1e3,t=6e4,r=36e5,n="millisecond",i="second",s="minute",o="hour",a="day",u="week",p="month",d="quarter",h="year",m="date",g="Invalid Date",v=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,I=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,x={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(B){var M=["th","st","nd","rd"],Y=B%100;return"["+B+(M[(Y-20)%10]||M[Y]||M[0])+"]"}},_=function(B,M,Y){var V=String(B);return!V||V.length>=M?B:""+Array(M+1-V.length).join(Y)+B},A={s:_,z:function(B){var M=-B.utcOffset(),Y=Math.abs(M),V=Math.floor(Y/60),q=Y%60;return(M<=0?"+":"-")+_(V,2,"0")+":"+_(q,2,"0")},m:function B(M,Y){if(M.date()<Y.date())return-B(Y,M);var V=12*(Y.year()-M.year())+(Y.month()-M.month()),q=M.clone().add(V,p),te=Y-q<0,z=M.clone().add(V+(te?-1:1),p);return+(-(V+(Y-q)/(te?q-z:z-q))||0)},a:function(B){return B<0?Math.ceil(B)||0:Math.floor(B)},p:function(B){return{M:p,y:h,w:u,d:a,D:m,h:o,m:s,s:i,ms:n,Q:d}[B]||String(B||"").toLowerCase().replace(/s$/,"")},u:function(B){return B===void 0}},E="en",S={};S[E]=x;var w="$isDayjsObject",T=function(B){return B instanceof k||!(!B||!B[w])},D=function B(M,Y,V){var q;if(!M)return E;if(typeof M=="string"){var te=M.toLowerCase();S[te]&&(q=te),Y&&(S[te]=Y,q=te);var z=M.split("-");if(!q&&z.length>1)return B(z[0])}else{var he=M.name;S[he]=M,q=he}return!V&&q&&(E=q),q||!V&&E},L=function(B,M){if(T(B))return B.clone();var Y=typeof M=="object"?M:{};return Y.date=B,Y.args=arguments,new k(Y)},W=A;W.l=D,W.i=T,W.w=function(B,M){return L(B,{locale:M.$L,utc:M.$u,x:M.$x,$offset:M.$offset})};var k=function(){function B(Y){this.$L=D(Y.locale,null,!0),this.parse(Y),this.$x=this.$x||Y.x||{},this[w]=!0}var M=B.prototype;return M.parse=function(Y){this.$d=function(V){var q=V.date,te=V.utc;if(q===null)return new Date(NaN);if(W.u(q))return new Date;if(q instanceof Date)return new Date(q);if(typeof q=="string"&&!/Z$/i.test(q)){var z=q.match(v);if(z){var he=z[2]-1||0,fe=(z[7]||"0").substring(0,3);return te?new Date(Date.UTC(z[1],he,z[3]||1,z[4]||0,z[5]||0,z[6]||0,fe)):new Date(z[1],he,z[3]||1,z[4]||0,z[5]||0,z[6]||0,fe)}}return new Date(q)}(Y),this.init()},M.init=function(){var Y=this.$d;this.$y=Y.getFullYear(),this.$M=Y.getMonth(),this.$D=Y.getDate(),this.$W=Y.getDay(),this.$H=Y.getHours(),this.$m=Y.getMinutes(),this.$s=Y.getSeconds(),this.$ms=Y.getMilliseconds()},M.$utils=function(){return W},M.isValid=function(){return this.$d.toString()!==g},M.isSame=function(Y,V){var q=L(Y);return this.startOf(V)<=q&&q<=this.endOf(V)},M.isAfter=function(Y,V){return L(Y)<this.startOf(V)},M.isBefore=function(Y,V){return this.endOf(V)<L(Y)},M.$g=function(Y,V,q){return W.u(Y)?this[V]:this.set(q,Y)},M.unix=function(){return Math.floor(this.valueOf()/1e3)},M.valueOf=function(){return this.$d.getTime()},M.startOf=function(Y,V){var q=this,te=!!W.u(V)||V,z=W.p(Y),he=function(gt,lt){var Ce=W.w(q.$u?Date.UTC(q.$y,lt,gt):new Date(q.$y,lt,gt),q);return te?Ce:Ce.endOf(a)},fe=function(gt,lt){return W.w(q.toDate()[gt].apply(q.toDate("s"),(te?[0,0,0,0]:[23,59,59,999]).slice(lt)),q)},we=this.$W,De=this.$M,Oe=this.$D,Xe="set"+(this.$u?"UTC":"");switch(z){case h:return te?he(1,0):he(31,11);case p:return te?he(1,De):he(0,De+1);case u:var Ze=this.$locale().weekStart||0,Re=(we<Ze?we+7:we)-Ze;return he(te?Oe-Re:Oe+(6-Re),De);case a:case m:return fe(Xe+"Hours",0);case o:return fe(Xe+"Minutes",1);case s:return fe(Xe+"Seconds",2);case i:return fe(Xe+"Milliseconds",3);default:return this.clone()}},M.endOf=function(Y){return this.startOf(Y,!1)},M.$set=function(Y,V){var q,te=W.p(Y),z="set"+(this.$u?"UTC":""),he=(q={},q[a]=z+"Date",q[m]=z+"Date",q[p]=z+"Month",q[h]=z+"FullYear",q[o]=z+"Hours",q[s]=z+"Minutes",q[i]=z+"Seconds",q[n]=z+"Milliseconds",q)[te],fe=te===a?this.$D+(V-this.$W):V;if(te===p||te===h){var we=this.clone().set(m,1);we.$d[he](fe),we.init(),this.$d=we.set(m,Math.min(this.$D,we.daysInMonth())).$d}else he&&this.$d[he](fe);return this.init(),this},M.set=function(Y,V){return this.clone().$set(Y,V)},M.get=function(Y){return this[W.p(Y)]()},M.add=function(Y,V){var q,te=this;Y=Number(Y);var z=W.p(V),he=function(De){var Oe=L(te);return W.w(Oe.date(Oe.date()+Math.round(De*Y)),te)};if(z===p)return this.set(p,this.$M+Y);if(z===h)return this.set(h,this.$y+Y);if(z===a)return he(1);if(z===u)return he(7);var fe=(q={},q[s]=t,q[o]=r,q[i]=e,q)[z]||1,we=this.$d.getTime()+Y*fe;return W.w(we,this)},M.subtract=function(Y,V){return this.add(-1*Y,V)},M.format=function(Y){var V=this,q=this.$locale();if(!this.isValid())return q.invalidDate||g;var te=Y||"YYYY-MM-DDTHH:mm:ssZ",z=W.z(this),he=this.$H,fe=this.$m,we=this.$M,De=q.weekdays,Oe=q.months,Xe=q.meridiem,Ze=function(lt,Ce,Z,R){return lt&&(lt[Ce]||lt(V,te))||Z[Ce].slice(0,R)},Re=function(lt){return W.s(he%12||12,lt,"0")},gt=Xe||function(lt,Ce,Z){var R=lt<12?"AM":"PM";return Z?R.toLowerCase():R};return te.replace(I,function(lt,Ce){return Ce||function(Z){switch(Z){case"YY":return String(V.$y).slice(-2);case"YYYY":return W.s(V.$y,4,"0");case"M":return we+1;case"MM":return W.s(we+1,2,"0");case"MMM":return Ze(q.monthsShort,we,Oe,3);case"MMMM":return Ze(Oe,we);case"D":return V.$D;case"DD":return W.s(V.$D,2,"0");case"d":return String(V.$W);case"dd":return Ze(q.weekdaysMin,V.$W,De,2);case"ddd":return Ze(q.weekdaysShort,V.$W,De,3);case"dddd":return De[V.$W];case"H":return String(he);case"HH":return W.s(he,2,"0");case"h":return Re(1);case"hh":return Re(2);case"a":return gt(he,fe,!0);case"A":return gt(he,fe,!1);case"m":return String(fe);case"mm":return W.s(fe,2,"0");case"s":return String(V.$s);case"ss":return W.s(V.$s,2,"0");case"SSS":return W.s(V.$ms,3,"0");case"Z":return z}return null}(lt)||z.replace(":","")})},M.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},M.diff=function(Y,V,q){var te,z=this,he=W.p(V),fe=L(Y),we=(fe.utcOffset()-this.utcOffset())*t,De=this-fe,Oe=function(){return W.m(z,fe)};switch(he){case h:te=Oe()/12;break;case p:te=Oe();break;case d:te=Oe()/3;break;case u:te=(De-we)/6048e5;break;case a:te=(De-we)/864e5;break;case o:te=De/r;break;case s:te=De/t;break;case i:te=De/e;break;default:te=De}return q?te:W.a(te)},M.daysInMonth=function(){return this.endOf(p).$D},M.$locale=function(){return S[this.$L]},M.locale=function(Y,V){if(!Y)return this.$L;var q=this.clone(),te=D(Y,V,!0);return te&&(q.$L=te),q},M.clone=function(){return W.w(this.$d,this)},M.toDate=function(){return new Date(this.valueOf())},M.toJSON=function(){return this.isValid()?this.toISOString():null},M.toISOString=function(){return this.$d.toISOString()},M.toString=function(){return this.$d.toUTCString()},B}(),F=k.prototype;return L.prototype=F,[["$ms",n],["$s",i],["$m",s],["$H",o],["$W",a],["$M",p],["$y",h],["$D",m]].forEach(function(B){F[B[1]]=function(M){return this.$g(M,B[0],B[1])}}),L.extend=function(B,M){return B.$i||(B(M,k,L),B.$i=!0),L},L.locale=D,L.isDayjs=T,L.unix=function(B){return L(1e3*B)},L.en=S[E],L.Ls=S,L.p={},L})});var zM=y(($R,QR)=>{c();(function(e,t){typeof $R=="object"&&typeof QR<"u"?QR.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_relativeTime=t()})($R,function(){"use strict";return function(e,t,r){e=e||{};var n=t.prototype,i={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function s(a,u,p,d){return n.fromToBase(a,u,p,d)}r.en.relativeTime=i,n.fromToBase=function(a,u,p,d,h){for(var m,g,v,I=p.$locale().relativeTime||i,x=e.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],_=x.length,A=0;A<_;A+=1){var E=x[A];E.d&&(m=d?r(a).diff(p,E.d,!0):p.diff(a,E.d,!0));var S=(e.rounding||Math.round)(Math.abs(m));if(v=m>0,S<=E.r||!E.r){S<=1&&A>0&&(E=x[A-1]);var w=I[E.l];h&&(S=h(""+S)),g=typeof w=="string"?w.replace("%d",S):w(S,u,E.l,v);break}}if(u)return g;var T=v?I.future:I.past;return typeof T=="function"?T(g):T.replace("%s",g)},n.to=function(a,u){return s(a,u,this,!0)},n.from=function(a,u){return s(a,u,this)};var o=function(a){return a.$u?r.utc():r()};n.toNow=function(a){return this.to(o(this),a)},n.fromNow=function(a){return this.from(o(this),a)}}})});var JM=y((eT,tT)=>{c();(function(e,t){typeof eT=="object"&&typeof tT<"u"?tT.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_updateLocale=t()})(eT,function(){"use strict";return function(e,t,r){r.updateLocale=function(n,i){var s=r.Ls[n];if(s)return(i?Object.keys(i):[]).forEach(function(o){s[o]=i[o]}),s}}})});var QM=y((uUt,$M)=>{"use strict";c();var EPe=/[|\\{}()[\]^$+*?.]/g;$M.exports=function(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(EPe,"\\$&")}});var rU=y((pUt,AI)=>{"use strict";c();var APe=QM(),{platform:eU}=process,No={tick:"\u2714",cross:"\u2716",star:"\u2605",square:"\u2587",squareSmall:"\u25FB",squareSmallFilled:"\u25FC",play:"\u25B6",circle:"\u25EF",circleFilled:"\u25C9",circleDotted:"\u25CC",circleDouble:"\u25CE",circleCircle:"\u24DE",circleCross:"\u24E7",circlePipe:"\u24BE",circleQuestionMark:"?\u20DD",bullet:"\u25CF",dot:"\u2024",line:"\u2500",ellipsis:"\u2026",pointer:"\u276F",pointerSmall:"\u203A",info:"\u2139",warning:"\u26A0",hamburger:"\u2630",smiley:"\u32E1",mustache:"\u0DF4",heart:"\u2665",nodejs:"\u2B22",arrowUp:"\u2191",arrowDown:"\u2193",arrowLeft:"\u2190",arrowRight:"\u2192",radioOn:"\u25C9",radioOff:"\u25EF",checkboxOn:"\u2612",checkboxOff:"\u2610",checkboxCircleOn:"\u24E7",checkboxCircleOff:"\u24BE",questionMarkPrefix:"?\u20DD",oneHalf:"\xBD",oneThird:"\u2153",oneQuarter:"\xBC",oneFifth:"\u2155",oneSixth:"\u2159",oneSeventh:"\u2150",oneEighth:"\u215B",oneNinth:"\u2151",oneTenth:"\u2152",twoThirds:"\u2154",twoFifths:"\u2156",threeQuarters:"\xBE",threeFifths:"\u2157",threeEighths:"\u215C",fourFifths:"\u2158",fiveSixths:"\u215A",fiveEighths:"\u215D",sevenEighths:"\u215E"},tU={tick:"\u221A",cross:"\xD7",star:"*",square:"\u2588",squareSmall:"[ ]",squareSmallFilled:"[\u2588]",play:"\u25BA",circle:"( )",circleFilled:"(*)",circleDotted:"( )",circleDouble:"( )",circleCircle:"(\u25CB)",circleCross:"(\xD7)",circlePipe:"(\u2502)",circleQuestionMark:"(?)",bullet:"*",dot:".",line:"\u2500",ellipsis:"...",pointer:">",pointerSmall:"\xBB",info:"i",warning:"\u203C",hamburger:"\u2261",smiley:"\u263A",mustache:"\u250C\u2500\u2510",heart:No.heart,nodejs:"\u2666",arrowUp:No.arrowUp,arrowDown:No.arrowDown,arrowLeft:No.arrowLeft,arrowRight:No.arrowRight,radioOn:"(*)",radioOff:"( )",checkboxOn:"[\xD7]",checkboxOff:"[ ]",checkboxCircleOn:"(\xD7)",checkboxCircleOff:"( )",questionMarkPrefix:"\uFF1F",oneHalf:"1/2",oneThird:"1/3",oneQuarter:"1/4",oneFifth:"1/5",oneSixth:"1/6",oneSeventh:"1/7",oneEighth:"1/8",oneNinth:"1/9",oneTenth:"1/10",twoThirds:"2/3",twoFifths:"2/5",threeQuarters:"3/4",threeFifths:"3/5",threeEighths:"3/8",fourFifths:"4/5",fiveSixths:"5/6",fiveEighths:"5/8",sevenEighths:"7/8"};eU==="linux"&&(No.questionMarkPrefix="?");var EI=eU==="win32"?tU:No,RPe=e=>{if(EI===No)return e;for(let[t,r]of Object.entries(No))r!==EI[t]&&(e=e.replace(new RegExp(APe(r),"g"),EI[t]));return e};AI.exports=Object.assign(RPe,EI);AI.exports.main=No;AI.exports.windows=tU});var nT=y((fUt,iU)=>{"use strict";c();var nU=require("fs"),rT;function TPe(){try{return nU.statSync("/.dockerenv"),!0}catch{return!1}}function NPe(){try{return nU.readFileSync("/proc/self/cgroup","utf8").includes("docker")}catch{return!1}}iU.exports=()=>(rT===void 0&&(rT=TPe()||NPe()),rT)});var aU=y((mUt,iT)=>{"use strict";c();var BPe=require("os"),kPe=require("fs"),sU=nT(),oU=()=>{if(process.platform!=="linux")return!1;if(BPe.release().toLowerCase().includes("microsoft"))return!sU();try{return kPe.readFileSync("/proc/version","utf8").toLowerCase().includes("microsoft")?!sU():!1}catch{return!1}};process.env.__IS_WSL_TEST__?iT.exports=oU:iT.exports=oU()});var uU=y((yUt,cU)=>{"use strict";c();cU.exports=(e,t,r)=>{let n=i=>Object.defineProperty(e,t,{value:i,enumerable:!0,writable:!0});return Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get(){let i=r();return n(i),i},set(i){n(i)}}),e}});var gU=y((bUt,mU)=>{c();var OPe=require("path"),GPe=require("child_process"),{promises:TI,constants:hU}=require("fs"),RI=aU(),FPe=nT(),oT=uU(),lU=OPe.join(__dirname,"xdg-open"),{platform:dd,arch:pU}=process,LPe=()=>{try{return TI.statSync("/run/.containerenv"),!0}catch{return!1}},sT;function ZPe(){return sT===void 0&&(sT=LPe()||FPe()),sT}var PPe=(()=>{let e="/mnt/",t;return async function(){if(t)return t;let r="/etc/wsl.conf",n=!1;try{await TI.access(r,hU.F_OK),n=!0}catch{}if(!n)return e;let i=await TI.readFile(r,{encoding:"utf8"}),s=/(?<!#.*)root\s*=\s*(?<mountPoint>.*)/g.exec(i);return s?(t=s.groups.mountPoint.trim(),t=t.endsWith("/")?t:`${t}/`,t):e}})(),dU=async(e,t)=>{let r;for(let n of e)try{return await t(n)}catch(i){r=i}throw r},NI=async e=>{if(e={wait:!1,background:!1,newInstance:!1,allowNonzeroExitCode:!1,...e},Array.isArray(e.app))return dU(e.app,a=>NI({...e,app:a}));let{name:t,arguments:r=[]}=e.app||{};if(r=[...r],Array.isArray(t))return dU(t,a=>NI({...e,app:{name:a,arguments:r}}));let n,i=[],s={};if(dd==="darwin")n="open",e.wait&&i.push("--wait-apps"),e.background&&i.push("--background"),e.newInstance&&i.push("--new"),t&&i.push("-a",t);else if(dd==="win32"||RI&&!ZPe()&&!t){let a=await PPe();n=RI?`${a}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`:`${process.env.SYSTEMROOT}\\System32\\WindowsPowerShell\\v1.0\\powershell`,i.push("-NoProfile","-NonInteractive","\u2013ExecutionPolicy","Bypass","-EncodedCommand"),RI||(s.windowsVerbatimArguments=!0);let u=["Start"];e.wait&&u.push("-Wait"),t?(u.push(`"\`"${t}\`""`,"-ArgumentList"),e.target&&r.unshift(e.target)):e.target&&u.push(`"${e.target}"`),r.length>0&&(r=r.map(p=>`"\`"${p}\`""`),u.push(r.join(","))),e.target=Buffer.from(u.join(" "),"utf16le").toString("base64")}else{if(t)n=t;else{let a=!__dirname||__dirname==="/",u=!1;try{await TI.access(lU,hU.X_OK),u=!0}catch{}n=process.versions.electron||dd==="android"||a||!u?"xdg-open":lU}r.length>0&&i.push(...r),e.wait||(s.stdio="ignore",s.detached=!0)}e.target&&i.push(e.target),dd==="darwin"&&r.length>0&&i.push("--args",...r);let o=GPe.spawn(n,i,s);return e.wait?new Promise((a,u)=>{o.once("error",u),o.once("close",p=>{if(!e.allowNonzeroExitCode&&p>0){u(new Error(`Exited with code ${p}`));return}a(o)})}):(o.unref(),o)},aT=(e,t)=>{if(typeof e!="string")throw new TypeError("Expected a `target`");return NI({...t,target:e})},WPe=(e,t)=>{if(typeof e!="string")throw new TypeError("Expected a `name`");let{arguments:r=[]}=t||{};if(r!=null&&!Array.isArray(r))throw new TypeError("Expected `appArguments` as Array type");return NI({...t,app:{name:e,arguments:r}})};function fU(e){if(typeof e=="string"||Array.isArray(e))return e;let{[pU]:t}=e;if(!t)throw new Error(`${pU} is not supported`);return t}function cT({[dd]:e},{wsl:t}){if(t&&RI)return fU(t);if(!e)throw new Error(`${dd} is not supported`);return fU(e)}var BI={};oT(BI,"chrome",()=>cT({darwin:"google chrome",win32:"chrome",linux:["google-chrome","google-chrome-stable","chromium"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe",x64:["/mnt/c/Program Files/Google/Chrome/Application/chrome.exe","/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"]}}));oT(BI,"firefox",()=>cT({darwin:"firefox",win32:"C:\\Program Files\\Mozilla Firefox\\firefox.exe",linux:"firefox"},{wsl:"/mnt/c/Program Files/Mozilla Firefox/firefox.exe"}));oT(BI,"edge",()=>cT({darwin:"microsoft edge",win32:"msedge",linux:["microsoft-edge","microsoft-edge-dev"]},{wsl:"/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"}));aT.apps=BI;aT.openApp=WPe;mU.exports=aT});var vU=y((_Ut,yU)=>{"use strict";c();yU.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var uT=y((xUt,IU)=>{c();var xm=vU(),bU={};for(let e of Object.keys(xm))bU[xm[e]]=e;var qe={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};IU.exports=qe;for(let e of Object.keys(qe)){if(!("channels"in qe[e]))throw new Error("missing channels property: "+e);if(!("labels"in qe[e]))throw new Error("missing channel labels property: "+e);if(qe[e].labels.length!==qe[e].channels)throw new Error("channel and label counts mismatch: "+e);let{channels:t,labels:r}=qe[e];delete qe[e].channels,delete qe[e].labels,Object.defineProperty(qe[e],"channels",{value:t}),Object.defineProperty(qe[e],"labels",{value:r})}qe.rgb.hsl=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255,i=Math.min(t,r,n),s=Math.max(t,r,n),o=s-i,a,u;s===i?a=0:t===s?a=(r-n)/o:r===s?a=2+(n-t)/o:n===s&&(a=4+(t-r)/o),a=Math.min(a*60,360),a<0&&(a+=360);let p=(i+s)/2;return s===i?u=0:p<=.5?u=o/(s+i):u=o/(2-s-i),[a,u*100,p*100]};qe.rgb.hsv=function(e){let t,r,n,i,s,o=e[0]/255,a=e[1]/255,u=e[2]/255,p=Math.max(o,a,u),d=p-Math.min(o,a,u),h=function(m){return(p-m)/6/d+1/2};return d===0?(i=0,s=0):(s=d/p,t=h(o),r=h(a),n=h(u),o===p?i=n-r:a===p?i=1/3+t-n:u===p&&(i=2/3+r-t),i<0?i+=1:i>1&&(i-=1)),[i*360,s*100,p*100]};qe.rgb.hwb=function(e){let t=e[0],r=e[1],n=e[2],i=qe.rgb.hsl(e)[0],s=1/255*Math.min(t,Math.min(r,n));return n=1-1/255*Math.max(t,Math.max(r,n)),[i,s*100,n*100]};qe.rgb.cmyk=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255,i=Math.min(1-t,1-r,1-n),s=(1-t-i)/(1-i)||0,o=(1-r-i)/(1-i)||0,a=(1-n-i)/(1-i)||0;return[s*100,o*100,a*100,i*100]};function DPe(e,t){return(e[0]-t[0])**2+(e[1]-t[1])**2+(e[2]-t[2])**2}qe.rgb.keyword=function(e){let t=bU[e];if(t)return t;let r=1/0,n;for(let i of Object.keys(xm)){let s=xm[i],o=DPe(e,s);o<r&&(r=o,n=i)}return n};qe.keyword.rgb=function(e){return xm[e]};qe.rgb.xyz=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255;t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,n=n>.04045?((n+.055)/1.055)**2.4:n/12.92;let i=t*.4124+r*.3576+n*.1805,s=t*.2126+r*.7152+n*.0722,o=t*.0193+r*.1192+n*.9505;return[i*100,s*100,o*100]};qe.rgb.lab=function(e){let t=qe.rgb.xyz(e),r=t[0],n=t[1],i=t[2];r/=95.047,n/=100,i/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,n=n>.008856?n**(1/3):7.787*n+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;let s=116*n-16,o=500*(r-n),a=200*(n-i);return[s,o,a]};qe.hsl.rgb=function(e){let t=e[0]/360,r=e[1]/100,n=e[2]/100,i,s,o;if(r===0)return o=n*255,[o,o,o];n<.5?i=n*(1+r):i=n+r-n*r;let a=2*n-i,u=[0,0,0];for(let p=0;p<3;p++)s=t+1/3*-(p-1),s<0&&s++,s>1&&s--,6*s<1?o=a+(i-a)*6*s:2*s<1?o=i:3*s<2?o=a+(i-a)*(2/3-s)*6:o=a,u[p]=o*255;return u};qe.hsl.hsv=function(e){let t=e[0],r=e[1]/100,n=e[2]/100,i=r,s=Math.max(n,.01);n*=2,r*=n<=1?n:2-n,i*=s<=1?s:2-s;let o=(n+r)/2,a=n===0?2*i/(s+i):2*r/(n+r);return[t,a*100,o*100]};qe.hsv.rgb=function(e){let t=e[0]/60,r=e[1]/100,n=e[2]/100,i=Math.floor(t)%6,s=t-Math.floor(t),o=255*n*(1-r),a=255*n*(1-r*s),u=255*n*(1-r*(1-s));switch(n*=255,i){case 0:return[n,u,o];case 1:return[a,n,o];case 2:return[o,n,u];case 3:return[o,a,n];case 4:return[u,o,n];case 5:return[n,o,a]}};qe.hsv.hsl=function(e){let t=e[0],r=e[1]/100,n=e[2]/100,i=Math.max(n,.01),s,o;o=(2-r)*n;let a=(2-r)*i;return s=r*i,s/=a<=1?a:2-a,s=s||0,o/=2,[t,s*100,o*100]};qe.hwb.rgb=function(e){let t=e[0]/360,r=e[1]/100,n=e[2]/100,i=r+n,s;i>1&&(r/=i,n/=i);let o=Math.floor(6*t),a=1-n;s=6*t-o,o&1&&(s=1-s);let u=r+s*(a-r),p,d,h;switch(o){default:case 6:case 0:p=a,d=u,h=r;break;case 1:p=u,d=a,h=r;break;case 2:p=r,d=a,h=u;break;case 3:p=r,d=u,h=a;break;case 4:p=u,d=r,h=a;break;case 5:p=a,d=r,h=u;break}return[p*255,d*255,h*255]};qe.cmyk.rgb=function(e){let t=e[0]/100,r=e[1]/100,n=e[2]/100,i=e[3]/100,s=1-Math.min(1,t*(1-i)+i),o=1-Math.min(1,r*(1-i)+i),a=1-Math.min(1,n*(1-i)+i);return[s*255,o*255,a*255]};qe.xyz.rgb=function(e){let t=e[0]/100,r=e[1]/100,n=e[2]/100,i,s,o;return i=t*3.2406+r*-1.5372+n*-.4986,s=t*-.9689+r*1.8758+n*.0415,o=t*.0557+r*-.204+n*1.057,i=i>.0031308?1.055*i**(1/2.4)-.055:i*12.92,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,i=Math.min(Math.max(0,i),1),s=Math.min(Math.max(0,s),1),o=Math.min(Math.max(0,o),1),[i*255,s*255,o*255]};qe.xyz.lab=function(e){let t=e[0],r=e[1],n=e[2];t/=95.047,r/=100,n/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,n=n>.008856?n**(1/3):7.787*n+16/116;let i=116*r-16,s=500*(t-r),o=200*(r-n);return[i,s,o]};qe.lab.xyz=function(e){let t=e[0],r=e[1],n=e[2],i,s,o;s=(t+16)/116,i=r/500+s,o=s-n/200;let a=s**3,u=i**3,p=o**3;return s=a>.008856?a:(s-16/116)/7.787,i=u>.008856?u:(i-16/116)/7.787,o=p>.008856?p:(o-16/116)/7.787,i*=95.047,s*=100,o*=108.883,[i,s,o]};qe.lab.lch=function(e){let t=e[0],r=e[1],n=e[2],i;i=Math.atan2(n,r)*360/2/Math.PI,i<0&&(i+=360);let o=Math.sqrt(r*r+n*n);return[t,o,i]};qe.lch.lab=function(e){let t=e[0],r=e[1],i=e[2]/360*2*Math.PI,s=r*Math.cos(i),o=r*Math.sin(i);return[t,s,o]};qe.rgb.ansi16=function(e,t=null){let[r,n,i]=e,s=t===null?qe.rgb.hsv(e)[2]:t;if(s=Math.round(s/50),s===0)return 30;let o=30+(Math.round(i/255)<<2|Math.round(n/255)<<1|Math.round(r/255));return s===2&&(o+=60),o};qe.hsv.ansi16=function(e){return qe.rgb.ansi16(qe.hsv.rgb(e),e[2])};qe.rgb.ansi256=function(e){let t=e[0],r=e[1],n=e[2];return t===r&&r===n?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(r/255*5)+Math.round(n/255*5)};qe.ansi16.rgb=function(e){let t=e%10;if(t===0||t===7)return e>50&&(t+=3.5),t=t/10.5*255,[t,t,t];let r=(~~(e>50)+1)*.5,n=(t&1)*r*255,i=(t>>1&1)*r*255,s=(t>>2&1)*r*255;return[n,i,s]};qe.ansi256.rgb=function(e){if(e>=232){let s=(e-232)*10+8;return[s,s,s]}e-=16;let t,r=Math.floor(e/36)/5*255,n=Math.floor((t=e%36)/6)/5*255,i=t%6/5*255;return[r,n,i]};qe.rgb.hex=function(e){let r=(((Math.round(e[0])&255)<<16)+((Math.round(e[1])&255)<<8)+(Math.round(e[2])&255)).toString(16).toUpperCase();return"000000".substring(r.length)+r};qe.hex.rgb=function(e){let t=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!t)return[0,0,0];let r=t[0];t[0].length===3&&(r=r.split("").map(a=>a+a).join(""));let n=parseInt(r,16),i=n>>16&255,s=n>>8&255,o=n&255;return[i,s,o]};qe.rgb.hcg=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255,i=Math.max(Math.max(t,r),n),s=Math.min(Math.min(t,r),n),o=i-s,a,u;return o<1?a=s/(1-o):a=0,o<=0?u=0:i===t?u=(r-n)/o%6:i===r?u=2+(n-t)/o:u=4+(t-r)/o,u/=6,u%=1,[u*360,o*100,a*100]};qe.hsl.hcg=function(e){let t=e[1]/100,r=e[2]/100,n=r<.5?2*t*r:2*t*(1-r),i=0;return n<1&&(i=(r-.5*n)/(1-n)),[e[0],n*100,i*100]};qe.hsv.hcg=function(e){let t=e[1]/100,r=e[2]/100,n=t*r,i=0;return n<1&&(i=(r-n)/(1-n)),[e[0],n*100,i*100]};qe.hcg.rgb=function(e){let t=e[0]/360,r=e[1]/100,n=e[2]/100;if(r===0)return[n*255,n*255,n*255];let i=[0,0,0],s=t%1*6,o=s%1,a=1-o,u=0;switch(Math.floor(s)){case 0:i[0]=1,i[1]=o,i[2]=0;break;case 1:i[0]=a,i[1]=1,i[2]=0;break;case 2:i[0]=0,i[1]=1,i[2]=o;break;case 3:i[0]=0,i[1]=a,i[2]=1;break;case 4:i[0]=o,i[1]=0,i[2]=1;break;default:i[0]=1,i[1]=0,i[2]=a}return u=(1-r)*n,[(r*i[0]+u)*255,(r*i[1]+u)*255,(r*i[2]+u)*255]};qe.hcg.hsv=function(e){let t=e[1]/100,r=e[2]/100,n=t+r*(1-t),i=0;return n>0&&(i=t/n),[e[0],i*100,n*100]};qe.hcg.hsl=function(e){let t=e[1]/100,n=e[2]/100*(1-t)+.5*t,i=0;return n>0&&n<.5?i=t/(2*n):n>=.5&&n<1&&(i=t/(2*(1-n))),[e[0],i*100,n*100]};qe.hcg.hwb=function(e){let t=e[1]/100,r=e[2]/100,n=t+r*(1-t);return[e[0],(n-t)*100,(1-n)*100]};qe.hwb.hcg=function(e){let t=e[1]/100,n=1-e[2]/100,i=n-t,s=0;return i<1&&(s=(n-i)/(1-i)),[e[0],i*100,s*100]};qe.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]};qe.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]};qe.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]};qe.gray.hsl=function(e){return[0,0,e[0]]};qe.gray.hsv=qe.gray.hsl;qe.gray.hwb=function(e){return[0,100,e[0]]};qe.gray.cmyk=function(e){return[0,0,0,e[0]]};qe.gray.lab=function(e){return[e[0],0,0]};qe.gray.hex=function(e){let t=Math.round(e[0]/100*255)&255,n=((t<<16)+(t<<8)+t).toString(16).toUpperCase();return"000000".substring(n.length)+n};qe.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}});var CU=y((wUt,_U)=>{c();var kI=uT();function qPe(){let e={},t=Object.keys(kI);for(let r=t.length,n=0;n<r;n++)e[t[n]]={distance:-1,parent:null};return e}function VPe(e){let t=qPe(),r=[e];for(t[e].distance=0;r.length;){let n=r.pop(),i=Object.keys(kI[n]);for(let s=i.length,o=0;o<s;o++){let a=i[o],u=t[a];u.distance===-1&&(u.distance=t[n].distance+1,u.parent=n,r.unshift(a))}}return t}function HPe(e,t){return function(r){return t(e(r))}}function MPe(e,t){let r=[t[e].parent,e],n=kI[t[e].parent][e],i=t[e].parent;for(;t[i].parent;)r.unshift(t[i].parent),n=HPe(kI[t[i].parent][i],n),i=t[i].parent;return n.conversion=r,n}_U.exports=function(e){let t=VPe(e),r={},n=Object.keys(t);for(let i=n.length,s=0;s<i;s++){let o=n[s];t[o].parent!==null&&(r[o]=MPe(o,t))}return r}});var SU=y((AUt,xU)=>{c();var lT=uT(),UPe=CU(),fd={},jPe=Object.keys(lT);function XPe(e){let t=function(...r){let n=r[0];return n==null?n:(n.length>1&&(r=n),e(r))};return"conversion"in e&&(t.conversion=e.conversion),t}function YPe(e){let t=function(...r){let n=r[0];if(n==null)return n;n.length>1&&(r=n);let i=e(r);if(typeof i=="object")for(let s=i.length,o=0;o<s;o++)i[o]=Math.round(i[o]);return i};return"conversion"in e&&(t.conversion=e.conversion),t}jPe.forEach(e=>{fd[e]={},Object.defineProperty(fd[e],"channels",{value:lT[e].channels}),Object.defineProperty(fd[e],"labels",{value:lT[e].labels});let t=UPe(e);Object.keys(t).forEach(n=>{let i=t[n];fd[e][n]=YPe(i),fd[e][n].raw=XPe(i)})});xU.exports=fd});var NU=y((TUt,TU)=>{"use strict";c();var wU=(e,t)=>(...r)=>`\x1B[${e(...r)+t}m`,EU=(e,t)=>(...r)=>{let n=e(...r);return`\x1B[${38+t};5;${n}m`},AU=(e,t)=>(...r)=>{let n=e(...r);return`\x1B[${38+t};2;${n[0]};${n[1]};${n[2]}m`},OI=e=>e,RU=(e,t,r)=>[e,t,r],hd=(e,t,r)=>{Object.defineProperty(e,t,{get:()=>{let n=r();return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0}),n},enumerable:!0,configurable:!0})},pT,md=(e,t,r,n)=>{pT===void 0&&(pT=SU());let i=n?10:0,s={};for(let[o,a]of Object.entries(pT)){let u=o==="ansi16"?"ansi":o;o===t?s[u]=e(r,i):typeof a=="object"&&(s[u]=e(a[t],i))}return s};function KPe(){let e=new Map,t={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};t.color.gray=t.color.blackBright,t.bgColor.bgGray=t.bgColor.bgBlackBright,t.color.grey=t.color.blackBright,t.bgColor.bgGrey=t.bgColor.bgBlackBright;for(let[r,n]of Object.entries(t)){for(let[i,s]of Object.entries(n))t[i]={open:`\x1B[${s[0]}m`,close:`\x1B[${s[1]}m`},n[i]=t[i],e.set(s[0],s[1]);Object.defineProperty(t,r,{value:n,enumerable:!1})}return Object.defineProperty(t,"codes",{value:e,enumerable:!1}),t.color.close="\x1B[39m",t.bgColor.close="\x1B[49m",hd(t.color,"ansi",()=>md(wU,"ansi16",OI,!1)),hd(t.color,"ansi256",()=>md(EU,"ansi256",OI,!1)),hd(t.color,"ansi16m",()=>md(AU,"rgb",RU,!1)),hd(t.bgColor,"ansi",()=>md(wU,"ansi16",OI,!0)),hd(t.bgColor,"ansi256",()=>md(EU,"ansi256",OI,!0)),hd(t.bgColor,"ansi16m",()=>md(AU,"rgb",RU,!0)),t}Object.defineProperty(TU,"exports",{enumerable:!0,get:KPe})});var kU=y((BUt,BU)=>{"use strict";c();BU.exports=(e,t=process.argv)=>{let r=e.startsWith("-")?"":e.length===1?"-":"--",n=t.indexOf(r+e),i=t.indexOf("--");return n!==-1&&(i===-1||n<i)}});var hT=y((OUt,GU)=>{"use strict";c();var zPe=require("os"),OU=require("tty"),ys=kU(),{env:hn}=process,Hc;ys("no-color")||ys("no-colors")||ys("color=false")||ys("color=never")?Hc=0:(ys("color")||ys("colors")||ys("color=true")||ys("color=always"))&&(Hc=1);"FORCE_COLOR"in hn&&(hn.FORCE_COLOR==="true"?Hc=1:hn.FORCE_COLOR==="false"?Hc=0:Hc=hn.FORCE_COLOR.length===0?1:Math.min(parseInt(hn.FORCE_COLOR,10),3));function dT(e){return e===0?!1:{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function fT(e,t){if(Hc===0)return 0;if(ys("color=16m")||ys("color=full")||ys("color=truecolor"))return 3;if(ys("color=256"))return 2;if(e&&!t&&Hc===void 0)return 0;let r=Hc||0;if(hn.TERM==="dumb")return r;if(process.platform==="win32"){let n=zPe.release().split(".");return Number(n[0])>=10&&Number(n[2])>=10586?Number(n[2])>=14931?3:2:1}if("CI"in hn)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(n=>n in hn)||hn.CI_NAME==="codeship"?1:r;if("TEAMCITY_VERSION"in hn)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(hn.TEAMCITY_VERSION)?1:0;if(hn.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in hn){let n=parseInt((hn.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(hn.TERM_PROGRAM){case"iTerm.app":return n>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(hn.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(hn.TERM)||"COLORTERM"in hn?1:r}function JPe(e){let t=fT(e,e&&e.isTTY);return dT(t)}GU.exports={supportsColor:JPe,stdout:dT(fT(!0,OU.isatty(1))),stderr:dT(fT(!0,OU.isatty(2)))}});var LU=y((FUt,FU)=>{"use strict";c();var $Pe=(e,t,r)=>{let n=e.indexOf(t);if(n===-1)return e;let i=t.length,s=0,o="";do o+=e.substr(s,n-s)+t+r,s=n+i,n=e.indexOf(t,s);while(n!==-1);return o+=e.substr(s),o},QPe=(e,t,r,n)=>{let i=0,s="";do{let o=e[n-1]==="\r";s+=e.substr(i,(o?n-1:n)-i)+t+(o?`\r
1
+ var bPe=Object.create;var _m=Object.defineProperty;var IPe=Object.getOwnPropertyDescriptor;var _Pe=Object.getOwnPropertyNames;var CPe=Object.getPrototypeOf,xPe=Object.prototype.hasOwnProperty;var SPe=(e,t,r)=>t in e?_m(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var ae=(e,t)=>()=>(e&&(t=e(e=0)),t);var y=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),XR=(e,t)=>{for(var r in t)_m(e,r,{get:t[r],enumerable:!0})},YM=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of _Pe(t))!xPe.call(e,i)&&i!==r&&_m(e,i,{get:()=>t[i],enumerable:!(n=IPe(t,i))||n.enumerable});return e};var xe=(e,t,r)=>(r=e!=null?bPe(CPe(e)):{},YM(t||!e||!e.__esModule?_m(r,"default",{value:e,enumerable:!0}):r,e)),YR=e=>YM(_m({},"__esModule",{value:!0}),e);var Cr=(e,t,r)=>(SPe(e,typeof t!="symbol"?t+"":t,r),r),KM=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)};var To=(e,t,r)=>(KM(e,t,"read from private field"),r?r.call(e):t.get(e)),Cm=(e,t,r)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,r)},KR=(e,t,r,n)=>(KM(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r);var wPe,c=ae(()=>{wPe=typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};wPe.SENTRY_RELEASE={id:"1.1.22"}});var wI=y((zR,JR)=>{c();(function(e,t){typeof zR=="object"&&typeof JR<"u"?JR.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs=t()})(zR,function(){"use strict";var e=1e3,t=6e4,r=36e5,n="millisecond",i="second",s="minute",o="hour",a="day",u="week",p="month",d="quarter",h="year",m="date",g="Invalid Date",v=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,I=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,x={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(B){var M=["th","st","nd","rd"],Y=B%100;return"["+B+(M[(Y-20)%10]||M[Y]||M[0])+"]"}},_=function(B,M,Y){var V=String(B);return!V||V.length>=M?B:""+Array(M+1-V.length).join(Y)+B},A={s:_,z:function(B){var M=-B.utcOffset(),Y=Math.abs(M),V=Math.floor(Y/60),q=Y%60;return(M<=0?"+":"-")+_(V,2,"0")+":"+_(q,2,"0")},m:function B(M,Y){if(M.date()<Y.date())return-B(Y,M);var V=12*(Y.year()-M.year())+(Y.month()-M.month()),q=M.clone().add(V,p),te=Y-q<0,z=M.clone().add(V+(te?-1:1),p);return+(-(V+(Y-q)/(te?q-z:z-q))||0)},a:function(B){return B<0?Math.ceil(B)||0:Math.floor(B)},p:function(B){return{M:p,y:h,w:u,d:a,D:m,h:o,m:s,s:i,ms:n,Q:d}[B]||String(B||"").toLowerCase().replace(/s$/,"")},u:function(B){return B===void 0}},E="en",S={};S[E]=x;var w="$isDayjsObject",T=function(B){return B instanceof k||!(!B||!B[w])},D=function B(M,Y,V){var q;if(!M)return E;if(typeof M=="string"){var te=M.toLowerCase();S[te]&&(q=te),Y&&(S[te]=Y,q=te);var z=M.split("-");if(!q&&z.length>1)return B(z[0])}else{var he=M.name;S[he]=M,q=he}return!V&&q&&(E=q),q||!V&&E},L=function(B,M){if(T(B))return B.clone();var Y=typeof M=="object"?M:{};return Y.date=B,Y.args=arguments,new k(Y)},W=A;W.l=D,W.i=T,W.w=function(B,M){return L(B,{locale:M.$L,utc:M.$u,x:M.$x,$offset:M.$offset})};var k=function(){function B(Y){this.$L=D(Y.locale,null,!0),this.parse(Y),this.$x=this.$x||Y.x||{},this[w]=!0}var M=B.prototype;return M.parse=function(Y){this.$d=function(V){var q=V.date,te=V.utc;if(q===null)return new Date(NaN);if(W.u(q))return new Date;if(q instanceof Date)return new Date(q);if(typeof q=="string"&&!/Z$/i.test(q)){var z=q.match(v);if(z){var he=z[2]-1||0,fe=(z[7]||"0").substring(0,3);return te?new Date(Date.UTC(z[1],he,z[3]||1,z[4]||0,z[5]||0,z[6]||0,fe)):new Date(z[1],he,z[3]||1,z[4]||0,z[5]||0,z[6]||0,fe)}}return new Date(q)}(Y),this.init()},M.init=function(){var Y=this.$d;this.$y=Y.getFullYear(),this.$M=Y.getMonth(),this.$D=Y.getDate(),this.$W=Y.getDay(),this.$H=Y.getHours(),this.$m=Y.getMinutes(),this.$s=Y.getSeconds(),this.$ms=Y.getMilliseconds()},M.$utils=function(){return W},M.isValid=function(){return this.$d.toString()!==g},M.isSame=function(Y,V){var q=L(Y);return this.startOf(V)<=q&&q<=this.endOf(V)},M.isAfter=function(Y,V){return L(Y)<this.startOf(V)},M.isBefore=function(Y,V){return this.endOf(V)<L(Y)},M.$g=function(Y,V,q){return W.u(Y)?this[V]:this.set(q,Y)},M.unix=function(){return Math.floor(this.valueOf()/1e3)},M.valueOf=function(){return this.$d.getTime()},M.startOf=function(Y,V){var q=this,te=!!W.u(V)||V,z=W.p(Y),he=function(gt,lt){var Ce=W.w(q.$u?Date.UTC(q.$y,lt,gt):new Date(q.$y,lt,gt),q);return te?Ce:Ce.endOf(a)},fe=function(gt,lt){return W.w(q.toDate()[gt].apply(q.toDate("s"),(te?[0,0,0,0]:[23,59,59,999]).slice(lt)),q)},we=this.$W,De=this.$M,Oe=this.$D,Xe="set"+(this.$u?"UTC":"");switch(z){case h:return te?he(1,0):he(31,11);case p:return te?he(1,De):he(0,De+1);case u:var Ze=this.$locale().weekStart||0,Re=(we<Ze?we+7:we)-Ze;return he(te?Oe-Re:Oe+(6-Re),De);case a:case m:return fe(Xe+"Hours",0);case o:return fe(Xe+"Minutes",1);case s:return fe(Xe+"Seconds",2);case i:return fe(Xe+"Milliseconds",3);default:return this.clone()}},M.endOf=function(Y){return this.startOf(Y,!1)},M.$set=function(Y,V){var q,te=W.p(Y),z="set"+(this.$u?"UTC":""),he=(q={},q[a]=z+"Date",q[m]=z+"Date",q[p]=z+"Month",q[h]=z+"FullYear",q[o]=z+"Hours",q[s]=z+"Minutes",q[i]=z+"Seconds",q[n]=z+"Milliseconds",q)[te],fe=te===a?this.$D+(V-this.$W):V;if(te===p||te===h){var we=this.clone().set(m,1);we.$d[he](fe),we.init(),this.$d=we.set(m,Math.min(this.$D,we.daysInMonth())).$d}else he&&this.$d[he](fe);return this.init(),this},M.set=function(Y,V){return this.clone().$set(Y,V)},M.get=function(Y){return this[W.p(Y)]()},M.add=function(Y,V){var q,te=this;Y=Number(Y);var z=W.p(V),he=function(De){var Oe=L(te);return W.w(Oe.date(Oe.date()+Math.round(De*Y)),te)};if(z===p)return this.set(p,this.$M+Y);if(z===h)return this.set(h,this.$y+Y);if(z===a)return he(1);if(z===u)return he(7);var fe=(q={},q[s]=t,q[o]=r,q[i]=e,q)[z]||1,we=this.$d.getTime()+Y*fe;return W.w(we,this)},M.subtract=function(Y,V){return this.add(-1*Y,V)},M.format=function(Y){var V=this,q=this.$locale();if(!this.isValid())return q.invalidDate||g;var te=Y||"YYYY-MM-DDTHH:mm:ssZ",z=W.z(this),he=this.$H,fe=this.$m,we=this.$M,De=q.weekdays,Oe=q.months,Xe=q.meridiem,Ze=function(lt,Ce,Z,R){return lt&&(lt[Ce]||lt(V,te))||Z[Ce].slice(0,R)},Re=function(lt){return W.s(he%12||12,lt,"0")},gt=Xe||function(lt,Ce,Z){var R=lt<12?"AM":"PM";return Z?R.toLowerCase():R};return te.replace(I,function(lt,Ce){return Ce||function(Z){switch(Z){case"YY":return String(V.$y).slice(-2);case"YYYY":return W.s(V.$y,4,"0");case"M":return we+1;case"MM":return W.s(we+1,2,"0");case"MMM":return Ze(q.monthsShort,we,Oe,3);case"MMMM":return Ze(Oe,we);case"D":return V.$D;case"DD":return W.s(V.$D,2,"0");case"d":return String(V.$W);case"dd":return Ze(q.weekdaysMin,V.$W,De,2);case"ddd":return Ze(q.weekdaysShort,V.$W,De,3);case"dddd":return De[V.$W];case"H":return String(he);case"HH":return W.s(he,2,"0");case"h":return Re(1);case"hh":return Re(2);case"a":return gt(he,fe,!0);case"A":return gt(he,fe,!1);case"m":return String(fe);case"mm":return W.s(fe,2,"0");case"s":return String(V.$s);case"ss":return W.s(V.$s,2,"0");case"SSS":return W.s(V.$ms,3,"0");case"Z":return z}return null}(lt)||z.replace(":","")})},M.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},M.diff=function(Y,V,q){var te,z=this,he=W.p(V),fe=L(Y),we=(fe.utcOffset()-this.utcOffset())*t,De=this-fe,Oe=function(){return W.m(z,fe)};switch(he){case h:te=Oe()/12;break;case p:te=Oe();break;case d:te=Oe()/3;break;case u:te=(De-we)/6048e5;break;case a:te=(De-we)/864e5;break;case o:te=De/r;break;case s:te=De/t;break;case i:te=De/e;break;default:te=De}return q?te:W.a(te)},M.daysInMonth=function(){return this.endOf(p).$D},M.$locale=function(){return S[this.$L]},M.locale=function(Y,V){if(!Y)return this.$L;var q=this.clone(),te=D(Y,V,!0);return te&&(q.$L=te),q},M.clone=function(){return W.w(this.$d,this)},M.toDate=function(){return new Date(this.valueOf())},M.toJSON=function(){return this.isValid()?this.toISOString():null},M.toISOString=function(){return this.$d.toISOString()},M.toString=function(){return this.$d.toUTCString()},B}(),F=k.prototype;return L.prototype=F,[["$ms",n],["$s",i],["$m",s],["$H",o],["$W",a],["$M",p],["$y",h],["$D",m]].forEach(function(B){F[B[1]]=function(M){return this.$g(M,B[0],B[1])}}),L.extend=function(B,M){return B.$i||(B(M,k,L),B.$i=!0),L},L.locale=D,L.isDayjs=T,L.unix=function(B){return L(1e3*B)},L.en=S[E],L.Ls=S,L.p={},L})});var zM=y(($R,QR)=>{c();(function(e,t){typeof $R=="object"&&typeof QR<"u"?QR.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_relativeTime=t()})($R,function(){"use strict";return function(e,t,r){e=e||{};var n=t.prototype,i={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function s(a,u,p,d){return n.fromToBase(a,u,p,d)}r.en.relativeTime=i,n.fromToBase=function(a,u,p,d,h){for(var m,g,v,I=p.$locale().relativeTime||i,x=e.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],_=x.length,A=0;A<_;A+=1){var E=x[A];E.d&&(m=d?r(a).diff(p,E.d,!0):p.diff(a,E.d,!0));var S=(e.rounding||Math.round)(Math.abs(m));if(v=m>0,S<=E.r||!E.r){S<=1&&A>0&&(E=x[A-1]);var w=I[E.l];h&&(S=h(""+S)),g=typeof w=="string"?w.replace("%d",S):w(S,u,E.l,v);break}}if(u)return g;var T=v?I.future:I.past;return typeof T=="function"?T(g):T.replace("%s",g)},n.to=function(a,u){return s(a,u,this,!0)},n.from=function(a,u){return s(a,u,this)};var o=function(a){return a.$u?r.utc():r()};n.toNow=function(a){return this.to(o(this),a)},n.fromNow=function(a){return this.from(o(this),a)}}})});var JM=y((eT,tT)=>{c();(function(e,t){typeof eT=="object"&&typeof tT<"u"?tT.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_updateLocale=t()})(eT,function(){"use strict";return function(e,t,r){r.updateLocale=function(n,i){var s=r.Ls[n];if(s)return(i?Object.keys(i):[]).forEach(function(o){s[o]=i[o]}),s}}})});var QM=y((uUt,$M)=>{"use strict";c();var EPe=/[|\\{}()[\]^$+*?.]/g;$M.exports=function(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(EPe,"\\$&")}});var rU=y((pUt,AI)=>{"use strict";c();var APe=QM(),{platform:eU}=process,No={tick:"\u2714",cross:"\u2716",star:"\u2605",square:"\u2587",squareSmall:"\u25FB",squareSmallFilled:"\u25FC",play:"\u25B6",circle:"\u25EF",circleFilled:"\u25C9",circleDotted:"\u25CC",circleDouble:"\u25CE",circleCircle:"\u24DE",circleCross:"\u24E7",circlePipe:"\u24BE",circleQuestionMark:"?\u20DD",bullet:"\u25CF",dot:"\u2024",line:"\u2500",ellipsis:"\u2026",pointer:"\u276F",pointerSmall:"\u203A",info:"\u2139",warning:"\u26A0",hamburger:"\u2630",smiley:"\u32E1",mustache:"\u0DF4",heart:"\u2665",nodejs:"\u2B22",arrowUp:"\u2191",arrowDown:"\u2193",arrowLeft:"\u2190",arrowRight:"\u2192",radioOn:"\u25C9",radioOff:"\u25EF",checkboxOn:"\u2612",checkboxOff:"\u2610",checkboxCircleOn:"\u24E7",checkboxCircleOff:"\u24BE",questionMarkPrefix:"?\u20DD",oneHalf:"\xBD",oneThird:"\u2153",oneQuarter:"\xBC",oneFifth:"\u2155",oneSixth:"\u2159",oneSeventh:"\u2150",oneEighth:"\u215B",oneNinth:"\u2151",oneTenth:"\u2152",twoThirds:"\u2154",twoFifths:"\u2156",threeQuarters:"\xBE",threeFifths:"\u2157",threeEighths:"\u215C",fourFifths:"\u2158",fiveSixths:"\u215A",fiveEighths:"\u215D",sevenEighths:"\u215E"},tU={tick:"\u221A",cross:"\xD7",star:"*",square:"\u2588",squareSmall:"[ ]",squareSmallFilled:"[\u2588]",play:"\u25BA",circle:"( )",circleFilled:"(*)",circleDotted:"( )",circleDouble:"( )",circleCircle:"(\u25CB)",circleCross:"(\xD7)",circlePipe:"(\u2502)",circleQuestionMark:"(?)",bullet:"*",dot:".",line:"\u2500",ellipsis:"...",pointer:">",pointerSmall:"\xBB",info:"i",warning:"\u203C",hamburger:"\u2261",smiley:"\u263A",mustache:"\u250C\u2500\u2510",heart:No.heart,nodejs:"\u2666",arrowUp:No.arrowUp,arrowDown:No.arrowDown,arrowLeft:No.arrowLeft,arrowRight:No.arrowRight,radioOn:"(*)",radioOff:"( )",checkboxOn:"[\xD7]",checkboxOff:"[ ]",checkboxCircleOn:"(\xD7)",checkboxCircleOff:"( )",questionMarkPrefix:"\uFF1F",oneHalf:"1/2",oneThird:"1/3",oneQuarter:"1/4",oneFifth:"1/5",oneSixth:"1/6",oneSeventh:"1/7",oneEighth:"1/8",oneNinth:"1/9",oneTenth:"1/10",twoThirds:"2/3",twoFifths:"2/5",threeQuarters:"3/4",threeFifths:"3/5",threeEighths:"3/8",fourFifths:"4/5",fiveSixths:"5/6",fiveEighths:"5/8",sevenEighths:"7/8"};eU==="linux"&&(No.questionMarkPrefix="?");var EI=eU==="win32"?tU:No,RPe=e=>{if(EI===No)return e;for(let[t,r]of Object.entries(No))r!==EI[t]&&(e=e.replace(new RegExp(APe(r),"g"),EI[t]));return e};AI.exports=Object.assign(RPe,EI);AI.exports.main=No;AI.exports.windows=tU});var nT=y((fUt,iU)=>{"use strict";c();var nU=require("fs"),rT;function TPe(){try{return nU.statSync("/.dockerenv"),!0}catch{return!1}}function NPe(){try{return nU.readFileSync("/proc/self/cgroup","utf8").includes("docker")}catch{return!1}}iU.exports=()=>(rT===void 0&&(rT=TPe()||NPe()),rT)});var aU=y((mUt,iT)=>{"use strict";c();var BPe=require("os"),kPe=require("fs"),sU=nT(),oU=()=>{if(process.platform!=="linux")return!1;if(BPe.release().toLowerCase().includes("microsoft"))return!sU();try{return kPe.readFileSync("/proc/version","utf8").toLowerCase().includes("microsoft")?!sU():!1}catch{return!1}};process.env.__IS_WSL_TEST__?iT.exports=oU:iT.exports=oU()});var uU=y((yUt,cU)=>{"use strict";c();cU.exports=(e,t,r)=>{let n=i=>Object.defineProperty(e,t,{value:i,enumerable:!0,writable:!0});return Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get(){let i=r();return n(i),i},set(i){n(i)}}),e}});var gU=y((bUt,mU)=>{c();var OPe=require("path"),GPe=require("child_process"),{promises:TI,constants:hU}=require("fs"),RI=aU(),FPe=nT(),oT=uU(),lU=OPe.join(__dirname,"xdg-open"),{platform:dd,arch:pU}=process,LPe=()=>{try{return TI.statSync("/run/.containerenv"),!0}catch{return!1}},sT;function ZPe(){return sT===void 0&&(sT=LPe()||FPe()),sT}var PPe=(()=>{let e="/mnt/",t;return async function(){if(t)return t;let r="/etc/wsl.conf",n=!1;try{await TI.access(r,hU.F_OK),n=!0}catch{}if(!n)return e;let i=await TI.readFile(r,{encoding:"utf8"}),s=/(?<!#.*)root\s*=\s*(?<mountPoint>.*)/g.exec(i);return s?(t=s.groups.mountPoint.trim(),t=t.endsWith("/")?t:`${t}/`,t):e}})(),dU=async(e,t)=>{let r;for(let n of e)try{return await t(n)}catch(i){r=i}throw r},NI=async e=>{if(e={wait:!1,background:!1,newInstance:!1,allowNonzeroExitCode:!1,...e},Array.isArray(e.app))return dU(e.app,a=>NI({...e,app:a}));let{name:t,arguments:r=[]}=e.app||{};if(r=[...r],Array.isArray(t))return dU(t,a=>NI({...e,app:{name:a,arguments:r}}));let n,i=[],s={};if(dd==="darwin")n="open",e.wait&&i.push("--wait-apps"),e.background&&i.push("--background"),e.newInstance&&i.push("--new"),t&&i.push("-a",t);else if(dd==="win32"||RI&&!ZPe()&&!t){let a=await PPe();n=RI?`${a}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`:`${process.env.SYSTEMROOT}\\System32\\WindowsPowerShell\\v1.0\\powershell`,i.push("-NoProfile","-NonInteractive","\u2013ExecutionPolicy","Bypass","-EncodedCommand"),RI||(s.windowsVerbatimArguments=!0);let u=["Start"];e.wait&&u.push("-Wait"),t?(u.push(`"\`"${t}\`""`,"-ArgumentList"),e.target&&r.unshift(e.target)):e.target&&u.push(`"${e.target}"`),r.length>0&&(r=r.map(p=>`"\`"${p}\`""`),u.push(r.join(","))),e.target=Buffer.from(u.join(" "),"utf16le").toString("base64")}else{if(t)n=t;else{let a=!__dirname||__dirname==="/",u=!1;try{await TI.access(lU,hU.X_OK),u=!0}catch{}n=process.versions.electron||dd==="android"||a||!u?"xdg-open":lU}r.length>0&&i.push(...r),e.wait||(s.stdio="ignore",s.detached=!0)}e.target&&i.push(e.target),dd==="darwin"&&r.length>0&&i.push("--args",...r);let o=GPe.spawn(n,i,s);return e.wait?new Promise((a,u)=>{o.once("error",u),o.once("close",p=>{if(!e.allowNonzeroExitCode&&p>0){u(new Error(`Exited with code ${p}`));return}a(o)})}):(o.unref(),o)},aT=(e,t)=>{if(typeof e!="string")throw new TypeError("Expected a `target`");return NI({...t,target:e})},WPe=(e,t)=>{if(typeof e!="string")throw new TypeError("Expected a `name`");let{arguments:r=[]}=t||{};if(r!=null&&!Array.isArray(r))throw new TypeError("Expected `appArguments` as Array type");return NI({...t,app:{name:e,arguments:r}})};function fU(e){if(typeof e=="string"||Array.isArray(e))return e;let{[pU]:t}=e;if(!t)throw new Error(`${pU} is not supported`);return t}function cT({[dd]:e},{wsl:t}){if(t&&RI)return fU(t);if(!e)throw new Error(`${dd} is not supported`);return fU(e)}var BI={};oT(BI,"chrome",()=>cT({darwin:"google chrome",win32:"chrome",linux:["google-chrome","google-chrome-stable","chromium"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe",x64:["/mnt/c/Program Files/Google/Chrome/Application/chrome.exe","/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"]}}));oT(BI,"firefox",()=>cT({darwin:"firefox",win32:"C:\\Program Files\\Mozilla Firefox\\firefox.exe",linux:"firefox"},{wsl:"/mnt/c/Program Files/Mozilla Firefox/firefox.exe"}));oT(BI,"edge",()=>cT({darwin:"microsoft edge",win32:"msedge",linux:["microsoft-edge","microsoft-edge-dev"]},{wsl:"/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"}));aT.apps=BI;aT.openApp=WPe;mU.exports=aT});var vU=y((_Ut,yU)=>{"use strict";c();yU.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var uT=y((xUt,IU)=>{c();var xm=vU(),bU={};for(let e of Object.keys(xm))bU[xm[e]]=e;var qe={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};IU.exports=qe;for(let e of Object.keys(qe)){if(!("channels"in qe[e]))throw new Error("missing channels property: "+e);if(!("labels"in qe[e]))throw new Error("missing channel labels property: "+e);if(qe[e].labels.length!==qe[e].channels)throw new Error("channel and label counts mismatch: "+e);let{channels:t,labels:r}=qe[e];delete qe[e].channels,delete qe[e].labels,Object.defineProperty(qe[e],"channels",{value:t}),Object.defineProperty(qe[e],"labels",{value:r})}qe.rgb.hsl=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255,i=Math.min(t,r,n),s=Math.max(t,r,n),o=s-i,a,u;s===i?a=0:t===s?a=(r-n)/o:r===s?a=2+(n-t)/o:n===s&&(a=4+(t-r)/o),a=Math.min(a*60,360),a<0&&(a+=360);let p=(i+s)/2;return s===i?u=0:p<=.5?u=o/(s+i):u=o/(2-s-i),[a,u*100,p*100]};qe.rgb.hsv=function(e){let t,r,n,i,s,o=e[0]/255,a=e[1]/255,u=e[2]/255,p=Math.max(o,a,u),d=p-Math.min(o,a,u),h=function(m){return(p-m)/6/d+1/2};return d===0?(i=0,s=0):(s=d/p,t=h(o),r=h(a),n=h(u),o===p?i=n-r:a===p?i=1/3+t-n:u===p&&(i=2/3+r-t),i<0?i+=1:i>1&&(i-=1)),[i*360,s*100,p*100]};qe.rgb.hwb=function(e){let t=e[0],r=e[1],n=e[2],i=qe.rgb.hsl(e)[0],s=1/255*Math.min(t,Math.min(r,n));return n=1-1/255*Math.max(t,Math.max(r,n)),[i,s*100,n*100]};qe.rgb.cmyk=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255,i=Math.min(1-t,1-r,1-n),s=(1-t-i)/(1-i)||0,o=(1-r-i)/(1-i)||0,a=(1-n-i)/(1-i)||0;return[s*100,o*100,a*100,i*100]};function DPe(e,t){return(e[0]-t[0])**2+(e[1]-t[1])**2+(e[2]-t[2])**2}qe.rgb.keyword=function(e){let t=bU[e];if(t)return t;let r=1/0,n;for(let i of Object.keys(xm)){let s=xm[i],o=DPe(e,s);o<r&&(r=o,n=i)}return n};qe.keyword.rgb=function(e){return xm[e]};qe.rgb.xyz=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255;t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,n=n>.04045?((n+.055)/1.055)**2.4:n/12.92;let i=t*.4124+r*.3576+n*.1805,s=t*.2126+r*.7152+n*.0722,o=t*.0193+r*.1192+n*.9505;return[i*100,s*100,o*100]};qe.rgb.lab=function(e){let t=qe.rgb.xyz(e),r=t[0],n=t[1],i=t[2];r/=95.047,n/=100,i/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,n=n>.008856?n**(1/3):7.787*n+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;let s=116*n-16,o=500*(r-n),a=200*(n-i);return[s,o,a]};qe.hsl.rgb=function(e){let t=e[0]/360,r=e[1]/100,n=e[2]/100,i,s,o;if(r===0)return o=n*255,[o,o,o];n<.5?i=n*(1+r):i=n+r-n*r;let a=2*n-i,u=[0,0,0];for(let p=0;p<3;p++)s=t+1/3*-(p-1),s<0&&s++,s>1&&s--,6*s<1?o=a+(i-a)*6*s:2*s<1?o=i:3*s<2?o=a+(i-a)*(2/3-s)*6:o=a,u[p]=o*255;return u};qe.hsl.hsv=function(e){let t=e[0],r=e[1]/100,n=e[2]/100,i=r,s=Math.max(n,.01);n*=2,r*=n<=1?n:2-n,i*=s<=1?s:2-s;let o=(n+r)/2,a=n===0?2*i/(s+i):2*r/(n+r);return[t,a*100,o*100]};qe.hsv.rgb=function(e){let t=e[0]/60,r=e[1]/100,n=e[2]/100,i=Math.floor(t)%6,s=t-Math.floor(t),o=255*n*(1-r),a=255*n*(1-r*s),u=255*n*(1-r*(1-s));switch(n*=255,i){case 0:return[n,u,o];case 1:return[a,n,o];case 2:return[o,n,u];case 3:return[o,a,n];case 4:return[u,o,n];case 5:return[n,o,a]}};qe.hsv.hsl=function(e){let t=e[0],r=e[1]/100,n=e[2]/100,i=Math.max(n,.01),s,o;o=(2-r)*n;let a=(2-r)*i;return s=r*i,s/=a<=1?a:2-a,s=s||0,o/=2,[t,s*100,o*100]};qe.hwb.rgb=function(e){let t=e[0]/360,r=e[1]/100,n=e[2]/100,i=r+n,s;i>1&&(r/=i,n/=i);let o=Math.floor(6*t),a=1-n;s=6*t-o,o&1&&(s=1-s);let u=r+s*(a-r),p,d,h;switch(o){default:case 6:case 0:p=a,d=u,h=r;break;case 1:p=u,d=a,h=r;break;case 2:p=r,d=a,h=u;break;case 3:p=r,d=u,h=a;break;case 4:p=u,d=r,h=a;break;case 5:p=a,d=r,h=u;break}return[p*255,d*255,h*255]};qe.cmyk.rgb=function(e){let t=e[0]/100,r=e[1]/100,n=e[2]/100,i=e[3]/100,s=1-Math.min(1,t*(1-i)+i),o=1-Math.min(1,r*(1-i)+i),a=1-Math.min(1,n*(1-i)+i);return[s*255,o*255,a*255]};qe.xyz.rgb=function(e){let t=e[0]/100,r=e[1]/100,n=e[2]/100,i,s,o;return i=t*3.2406+r*-1.5372+n*-.4986,s=t*-.9689+r*1.8758+n*.0415,o=t*.0557+r*-.204+n*1.057,i=i>.0031308?1.055*i**(1/2.4)-.055:i*12.92,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,i=Math.min(Math.max(0,i),1),s=Math.min(Math.max(0,s),1),o=Math.min(Math.max(0,o),1),[i*255,s*255,o*255]};qe.xyz.lab=function(e){let t=e[0],r=e[1],n=e[2];t/=95.047,r/=100,n/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,n=n>.008856?n**(1/3):7.787*n+16/116;let i=116*r-16,s=500*(t-r),o=200*(r-n);return[i,s,o]};qe.lab.xyz=function(e){let t=e[0],r=e[1],n=e[2],i,s,o;s=(t+16)/116,i=r/500+s,o=s-n/200;let a=s**3,u=i**3,p=o**3;return s=a>.008856?a:(s-16/116)/7.787,i=u>.008856?u:(i-16/116)/7.787,o=p>.008856?p:(o-16/116)/7.787,i*=95.047,s*=100,o*=108.883,[i,s,o]};qe.lab.lch=function(e){let t=e[0],r=e[1],n=e[2],i;i=Math.atan2(n,r)*360/2/Math.PI,i<0&&(i+=360);let o=Math.sqrt(r*r+n*n);return[t,o,i]};qe.lch.lab=function(e){let t=e[0],r=e[1],i=e[2]/360*2*Math.PI,s=r*Math.cos(i),o=r*Math.sin(i);return[t,s,o]};qe.rgb.ansi16=function(e,t=null){let[r,n,i]=e,s=t===null?qe.rgb.hsv(e)[2]:t;if(s=Math.round(s/50),s===0)return 30;let o=30+(Math.round(i/255)<<2|Math.round(n/255)<<1|Math.round(r/255));return s===2&&(o+=60),o};qe.hsv.ansi16=function(e){return qe.rgb.ansi16(qe.hsv.rgb(e),e[2])};qe.rgb.ansi256=function(e){let t=e[0],r=e[1],n=e[2];return t===r&&r===n?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(r/255*5)+Math.round(n/255*5)};qe.ansi16.rgb=function(e){let t=e%10;if(t===0||t===7)return e>50&&(t+=3.5),t=t/10.5*255,[t,t,t];let r=(~~(e>50)+1)*.5,n=(t&1)*r*255,i=(t>>1&1)*r*255,s=(t>>2&1)*r*255;return[n,i,s]};qe.ansi256.rgb=function(e){if(e>=232){let s=(e-232)*10+8;return[s,s,s]}e-=16;let t,r=Math.floor(e/36)/5*255,n=Math.floor((t=e%36)/6)/5*255,i=t%6/5*255;return[r,n,i]};qe.rgb.hex=function(e){let r=(((Math.round(e[0])&255)<<16)+((Math.round(e[1])&255)<<8)+(Math.round(e[2])&255)).toString(16).toUpperCase();return"000000".substring(r.length)+r};qe.hex.rgb=function(e){let t=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!t)return[0,0,0];let r=t[0];t[0].length===3&&(r=r.split("").map(a=>a+a).join(""));let n=parseInt(r,16),i=n>>16&255,s=n>>8&255,o=n&255;return[i,s,o]};qe.rgb.hcg=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255,i=Math.max(Math.max(t,r),n),s=Math.min(Math.min(t,r),n),o=i-s,a,u;return o<1?a=s/(1-o):a=0,o<=0?u=0:i===t?u=(r-n)/o%6:i===r?u=2+(n-t)/o:u=4+(t-r)/o,u/=6,u%=1,[u*360,o*100,a*100]};qe.hsl.hcg=function(e){let t=e[1]/100,r=e[2]/100,n=r<.5?2*t*r:2*t*(1-r),i=0;return n<1&&(i=(r-.5*n)/(1-n)),[e[0],n*100,i*100]};qe.hsv.hcg=function(e){let t=e[1]/100,r=e[2]/100,n=t*r,i=0;return n<1&&(i=(r-n)/(1-n)),[e[0],n*100,i*100]};qe.hcg.rgb=function(e){let t=e[0]/360,r=e[1]/100,n=e[2]/100;if(r===0)return[n*255,n*255,n*255];let i=[0,0,0],s=t%1*6,o=s%1,a=1-o,u=0;switch(Math.floor(s)){case 0:i[0]=1,i[1]=o,i[2]=0;break;case 1:i[0]=a,i[1]=1,i[2]=0;break;case 2:i[0]=0,i[1]=1,i[2]=o;break;case 3:i[0]=0,i[1]=a,i[2]=1;break;case 4:i[0]=o,i[1]=0,i[2]=1;break;default:i[0]=1,i[1]=0,i[2]=a}return u=(1-r)*n,[(r*i[0]+u)*255,(r*i[1]+u)*255,(r*i[2]+u)*255]};qe.hcg.hsv=function(e){let t=e[1]/100,r=e[2]/100,n=t+r*(1-t),i=0;return n>0&&(i=t/n),[e[0],i*100,n*100]};qe.hcg.hsl=function(e){let t=e[1]/100,n=e[2]/100*(1-t)+.5*t,i=0;return n>0&&n<.5?i=t/(2*n):n>=.5&&n<1&&(i=t/(2*(1-n))),[e[0],i*100,n*100]};qe.hcg.hwb=function(e){let t=e[1]/100,r=e[2]/100,n=t+r*(1-t);return[e[0],(n-t)*100,(1-n)*100]};qe.hwb.hcg=function(e){let t=e[1]/100,n=1-e[2]/100,i=n-t,s=0;return i<1&&(s=(n-i)/(1-i)),[e[0],i*100,s*100]};qe.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]};qe.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]};qe.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]};qe.gray.hsl=function(e){return[0,0,e[0]]};qe.gray.hsv=qe.gray.hsl;qe.gray.hwb=function(e){return[0,100,e[0]]};qe.gray.cmyk=function(e){return[0,0,0,e[0]]};qe.gray.lab=function(e){return[e[0],0,0]};qe.gray.hex=function(e){let t=Math.round(e[0]/100*255)&255,n=((t<<16)+(t<<8)+t).toString(16).toUpperCase();return"000000".substring(n.length)+n};qe.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}});var CU=y((wUt,_U)=>{c();var kI=uT();function qPe(){let e={},t=Object.keys(kI);for(let r=t.length,n=0;n<r;n++)e[t[n]]={distance:-1,parent:null};return e}function VPe(e){let t=qPe(),r=[e];for(t[e].distance=0;r.length;){let n=r.pop(),i=Object.keys(kI[n]);for(let s=i.length,o=0;o<s;o++){let a=i[o],u=t[a];u.distance===-1&&(u.distance=t[n].distance+1,u.parent=n,r.unshift(a))}}return t}function HPe(e,t){return function(r){return t(e(r))}}function MPe(e,t){let r=[t[e].parent,e],n=kI[t[e].parent][e],i=t[e].parent;for(;t[i].parent;)r.unshift(t[i].parent),n=HPe(kI[t[i].parent][i],n),i=t[i].parent;return n.conversion=r,n}_U.exports=function(e){let t=VPe(e),r={},n=Object.keys(t);for(let i=n.length,s=0;s<i;s++){let o=n[s];t[o].parent!==null&&(r[o]=MPe(o,t))}return r}});var SU=y((AUt,xU)=>{c();var lT=uT(),UPe=CU(),fd={},jPe=Object.keys(lT);function XPe(e){let t=function(...r){let n=r[0];return n==null?n:(n.length>1&&(r=n),e(r))};return"conversion"in e&&(t.conversion=e.conversion),t}function YPe(e){let t=function(...r){let n=r[0];if(n==null)return n;n.length>1&&(r=n);let i=e(r);if(typeof i=="object")for(let s=i.length,o=0;o<s;o++)i[o]=Math.round(i[o]);return i};return"conversion"in e&&(t.conversion=e.conversion),t}jPe.forEach(e=>{fd[e]={},Object.defineProperty(fd[e],"channels",{value:lT[e].channels}),Object.defineProperty(fd[e],"labels",{value:lT[e].labels});let t=UPe(e);Object.keys(t).forEach(n=>{let i=t[n];fd[e][n]=YPe(i),fd[e][n].raw=XPe(i)})});xU.exports=fd});var NU=y((TUt,TU)=>{"use strict";c();var wU=(e,t)=>(...r)=>`\x1B[${e(...r)+t}m`,EU=(e,t)=>(...r)=>{let n=e(...r);return`\x1B[${38+t};5;${n}m`},AU=(e,t)=>(...r)=>{let n=e(...r);return`\x1B[${38+t};2;${n[0]};${n[1]};${n[2]}m`},OI=e=>e,RU=(e,t,r)=>[e,t,r],hd=(e,t,r)=>{Object.defineProperty(e,t,{get:()=>{let n=r();return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0}),n},enumerable:!0,configurable:!0})},pT,md=(e,t,r,n)=>{pT===void 0&&(pT=SU());let i=n?10:0,s={};for(let[o,a]of Object.entries(pT)){let u=o==="ansi16"?"ansi":o;o===t?s[u]=e(r,i):typeof a=="object"&&(s[u]=e(a[t],i))}return s};function KPe(){let e=new Map,t={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};t.color.gray=t.color.blackBright,t.bgColor.bgGray=t.bgColor.bgBlackBright,t.color.grey=t.color.blackBright,t.bgColor.bgGrey=t.bgColor.bgBlackBright;for(let[r,n]of Object.entries(t)){for(let[i,s]of Object.entries(n))t[i]={open:`\x1B[${s[0]}m`,close:`\x1B[${s[1]}m`},n[i]=t[i],e.set(s[0],s[1]);Object.defineProperty(t,r,{value:n,enumerable:!1})}return Object.defineProperty(t,"codes",{value:e,enumerable:!1}),t.color.close="\x1B[39m",t.bgColor.close="\x1B[49m",hd(t.color,"ansi",()=>md(wU,"ansi16",OI,!1)),hd(t.color,"ansi256",()=>md(EU,"ansi256",OI,!1)),hd(t.color,"ansi16m",()=>md(AU,"rgb",RU,!1)),hd(t.bgColor,"ansi",()=>md(wU,"ansi16",OI,!0)),hd(t.bgColor,"ansi256",()=>md(EU,"ansi256",OI,!0)),hd(t.bgColor,"ansi16m",()=>md(AU,"rgb",RU,!0)),t}Object.defineProperty(TU,"exports",{enumerable:!0,get:KPe})});var kU=y((BUt,BU)=>{"use strict";c();BU.exports=(e,t=process.argv)=>{let r=e.startsWith("-")?"":e.length===1?"-":"--",n=t.indexOf(r+e),i=t.indexOf("--");return n!==-1&&(i===-1||n<i)}});var hT=y((OUt,GU)=>{"use strict";c();var zPe=require("os"),OU=require("tty"),ys=kU(),{env:hn}=process,Hc;ys("no-color")||ys("no-colors")||ys("color=false")||ys("color=never")?Hc=0:(ys("color")||ys("colors")||ys("color=true")||ys("color=always"))&&(Hc=1);"FORCE_COLOR"in hn&&(hn.FORCE_COLOR==="true"?Hc=1:hn.FORCE_COLOR==="false"?Hc=0:Hc=hn.FORCE_COLOR.length===0?1:Math.min(parseInt(hn.FORCE_COLOR,10),3));function dT(e){return e===0?!1:{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function fT(e,t){if(Hc===0)return 0;if(ys("color=16m")||ys("color=full")||ys("color=truecolor"))return 3;if(ys("color=256"))return 2;if(e&&!t&&Hc===void 0)return 0;let r=Hc||0;if(hn.TERM==="dumb")return r;if(process.platform==="win32"){let n=zPe.release().split(".");return Number(n[0])>=10&&Number(n[2])>=10586?Number(n[2])>=14931?3:2:1}if("CI"in hn)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(n=>n in hn)||hn.CI_NAME==="codeship"?1:r;if("TEAMCITY_VERSION"in hn)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(hn.TEAMCITY_VERSION)?1:0;if(hn.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in hn){let n=parseInt((hn.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(hn.TERM_PROGRAM){case"iTerm.app":return n>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(hn.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(hn.TERM)||"COLORTERM"in hn?1:r}function JPe(e){let t=fT(e,e&&e.isTTY);return dT(t)}GU.exports={supportsColor:JPe,stdout:dT(fT(!0,OU.isatty(1))),stderr:dT(fT(!0,OU.isatty(2)))}});var LU=y((FUt,FU)=>{"use strict";c();var $Pe=(e,t,r)=>{let n=e.indexOf(t);if(n===-1)return e;let i=t.length,s=0,o="";do o+=e.substr(s,n-s)+t+r,s=n+i,n=e.indexOf(t,s);while(n!==-1);return o+=e.substr(s),o},QPe=(e,t,r,n)=>{let i=0,s="";do{let o=e[n-1]==="\r";s+=e.substr(i,(o?n-1:n)-i)+t+(o?`\r
2
2
  `:`
3
3
  `)+r,i=n+1,n=e.indexOf(`
4
4
  `,i)}while(n!==-1);return s+=e.substr(i),s};FU.exports={stringReplaceAll:$Pe,stringEncaseCRLFWithFirstIndex:QPe}});var qU=y((ZUt,DU)=>{"use strict";c();var eWe=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,ZU=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,tWe=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,rWe=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,nWe=new Map([["n",`
@@ -149,7 +149,7 @@ Error:`,i)}}function cit(){return $nt.onCLS(e=>{ry("cls",{metric:e}),V7=e})}func
149
149
  `;let u=Sst.parseProxyResponse(i);i.write(`${a}\r
150
150
  `);let{connect:p,buffered:d}=await u;if(t.emit("proxyConnect",p),this.emit("proxyConnect",p,t),p.statusCode===200){if(t.once("socket",wst),r.secureEndpoint){dy("Upgrading socket connection to TLS");let m=r.servername||r.host;return Eee.connect({...Aee(r,"host","path","port"),socket:i,servername:py.isIP(m)?void 0:m})}return i}i.destroy();let h=new py.Socket({writable:!1});return h.readable=!0,t.once("socket",m=>{dy("Replaying proxy buffer for failed request"),m.push(d),m.push(null)}),h}};ux.__initStatic();function wst(e){e.resume()}function Aee(e,...t){let r={},n;for(n in e)t.includes(n)||(r[n]=e[n]);return r}cG.HttpsProxyAgent=ux});var pG=y(lG=>{c();var{_nullishCoalesce:uG}=ge();Object.defineProperty(lG,"__esModule",{value:!0});var Est=require("http"),Ast=require("https"),Rst=require("stream"),Nee=require("url"),Tst=require("zlib"),Tee=Ct(),Nst=ge(),Bst=Ree(),kst=1024*32;function Ost(e){return new Rst.Readable({read(){this.push(e),this.push(null)}})}function Gst(e){let t;try{t=new Nee.URL(e.url)}catch{return Nst.consoleSandbox(()=>{console.warn("[@sentry/node]: Invalid dsn or tunnel option, will not send any events. The tunnel option must be a full URL when used.")}),Tee.createTransport(e,()=>Promise.resolve({}))}let r=t.protocol==="https:",n=Fst(t,e.proxy||(r?process.env.https_proxy:void 0)||process.env.http_proxy),i=r?Ast:Est,s=e.keepAlive===void 0?!1:e.keepAlive,o=n?new Bst.HttpsProxyAgent(n):new i.Agent({keepAlive:s,maxSockets:30,timeout:2e3}),a=Lst(e,uG(e.httpModule,()=>i),o);return Tee.createTransport(e,a)}function Fst(e,t){let{no_proxy:r}=process.env;if(!(r&&r.split(",").some(i=>e.host.endsWith(i)||e.hostname.endsWith(i))))return t}function Lst(e,t,r){let{hostname:n,pathname:i,port:s,protocol:o,search:a}=new Nee.URL(e.url);return function(p){return new Promise((d,h)=>{let m=Ost(p.body),g={...e.headers};p.body.length>kst&&(g["content-encoding"]="gzip",m=m.pipe(Tst.createGzip()));let v=t.request({method:"POST",agent:r,headers:g,hostname:n,path:`${i}${a}`,port:s,protocol:o,ca:e.caCerts},I=>{I.on("data",()=>{}),I.on("end",()=>{}),I.setEncoding("utf8");let x=uG(I.headers["retry-after"],()=>null),_=uG(I.headers["x-sentry-rate-limits"],()=>null);d({statusCode:I.statusCode,headers:{"retry-after":x,"x-sentry-rate-limits":Array.isArray(_)?_[0]:_}})});v.on("error",h),m.pipe(v)})}}lG.makeNodeTransport=Gst});var Ql=y(dG=>{c();Object.defineProperty(dG,"__esModule",{value:!0});var Zst=ge(),Pst=Zst.parseSemver(process.versions.node);dG.NODE_VERSION=Pst});var Oee=y(fG=>{c();var{_optionalChain:Wst}=ge();Object.defineProperty(fG,"__esModule",{value:!0});var Bee=require("domain"),ep=Ct();function kee(){return Bee.active}function Dst(){let e=kee();if(e)return ep.ensureHubOnCarrier(e),ep.getHubFromCarrier(e)}function qst(e){let t={};return ep.ensureHubOnCarrier(t,e),ep.getHubFromCarrier(t)}function Vst(e,t){let r=kee();if(r&&Wst([t,"optionalAccess",o=>o.reuseExisting]))return e();let n=Bee.create(),i=r?ep.getHubFromCarrier(r):void 0,s=qst(i);return ep.setHubOnCarrier(n,s),n.bind(()=>e())()}function Hst(){ep.setAsyncContextStrategy({getCurrentHub:Dst,runWithAsyncContext:Vst})}fG.setDomainAsyncContextStrategy=Hst});var Gee=y(mG=>{c();var{_optionalChain:Mst}=ge();Object.defineProperty(mG,"__esModule",{value:!0});var hG=Ct(),Ust=require("async_hooks"),lx;function jst(){lx||(lx=new Ust.AsyncLocalStorage);function e(){return lx.getStore()}function t(n){let i={};return hG.ensureHubOnCarrier(i,n),hG.getHubFromCarrier(i)}function r(n,i){let s=e();if(s&&Mst([i,"optionalAccess",a=>a.reuseExisting]))return n();let o=t(s);return lx.run(o,()=>n())}hG.setAsyncContextStrategy({getCurrentHub:e,runWithAsyncContext:r})}mG.setHooksAsyncContextStrategy=jst});var Fee=y(gG=>{c();Object.defineProperty(gG,"__esModule",{value:!0});var Xst=Ql(),Yst=Oee(),Kst=Gee();function zst(){Xst.NODE_VERSION.major>=14?Kst.setHooksAsyncContextStrategy():Yst.setDomainAsyncContextStrategy()}gG.setNodeAsyncContextStrategy=zst});var fx=y(dx=>{c();Object.defineProperty(dx,"__esModule",{value:!0});var Jst=require("util"),px=Ct(),Lee=ge(),Zee="Console",$st=()=>({name:Zee,setupOnce(){},setup(e){Lee.addConsoleInstrumentationHandler(({args:t,level:r})=>{px.getClient()===e&&px.addBreadcrumb({category:"console",level:Lee.severityLevelFromString(r),message:Jst.format.apply(void 0,t)},{input:[...t],level:r})})}}),Pee=px.defineIntegration($st),Qst=px.convertIntegrationFnToClass(Zee,Pee);dx.Console=Qst;dx.consoleIntegration=Pee});var hx=y(rp=>{c();var{_optionalChain:tp}=ge();Object.defineProperty(rp,"__esModule",{value:!0});var eot=require("child_process"),Dee=require("fs"),Ns=require("os"),tot=require("path"),qee=require("util"),Vee=Ct(),Hee=qee.promisify(Dee.readFile),Mee=qee.promisify(Dee.readdir),Uee="Context",rot=(e={})=>{let t,r={app:!0,os:!0,device:!0,culture:!0,cloudResource:!0,...e};async function n(s){t===void 0&&(t=i());let o=iot(await t);return s.contexts={...s.contexts,app:{...o.app,...tp([s,"access",a=>a.contexts,"optionalAccess",a=>a.app])},os:{...o.os,...tp([s,"access",a=>a.contexts,"optionalAccess",a=>a.os])},device:{...o.device,...tp([s,"access",a=>a.contexts,"optionalAccess",a=>a.device])},culture:{...o.culture,...tp([s,"access",a=>a.contexts,"optionalAccess",a=>a.culture])},cloud_resource:{...o.cloud_resource,...tp([s,"access",a=>a.contexts,"optionalAccess",a=>a.cloud_resource])}},s}async function i(){let s={};if(r.os&&(s.os=await sot()),r.app&&(s.app=aot()),r.device&&(s.device=Xee(r.device)),r.culture){let o=oot();o&&(s.culture=o)}return r.cloudResource&&(s.cloud_resource=fot()),s}return{name:Uee,setupOnce(){},processEvent(s){return n(s)}}},jee=Vee.defineIntegration(rot),not=Vee.convertIntegrationFnToClass(Uee,jee);function iot(e){return tp([e,"optionalAccess",t=>t.app,"optionalAccess",t=>t.app_memory])&&(e.app.app_memory=process.memoryUsage().rss),tp([e,"optionalAccess",t=>t.device,"optionalAccess",t=>t.free_memory])&&(e.device.free_memory=Ns.freemem()),e}async function sot(){let e=Ns.platform();switch(e){case"darwin":return pot();case"linux":return dot();default:return{name:cot[e]||e,version:Ns.release()}}}function oot(){try{if(typeof process.versions.icu!="string")return;let e=new Date(9e8);if(new Intl.DateTimeFormat("es",{month:"long"}).format(e)==="enero"){let r=Intl.DateTimeFormat().resolvedOptions();return{locale:r.locale,timezone:r.timeZone}}}catch{}}function aot(){let e=process.memoryUsage().rss;return{app_start_time:new Date(Date.now()-process.uptime()*1e3).toISOString(),app_memory:e}}function Xee(e){let t={},r;try{r=Ns.uptime&&Ns.uptime()}catch{}if(typeof r=="number"&&(t.boot_time=new Date(Date.now()-r*1e3).toISOString()),t.arch=Ns.arch(),(e===!0||e.memory)&&(t.memory_size=Ns.totalmem(),t.free_memory=Ns.freemem()),e===!0||e.cpu){let n=Ns.cpus();if(n&&n.length){let i=n[0];t.processor_count=n.length,t.cpu_description=i.model,t.processor_frequency=i.speed}}return t}var cot={aix:"IBM AIX",freebsd:"FreeBSD",openbsd:"OpenBSD",sunos:"SunOS",win32:"Windows"},uot=[{name:"fedora-release",distros:["Fedora"]},{name:"redhat-release",distros:["Red Hat Linux","Centos"]},{name:"redhat_version",distros:["Red Hat Linux"]},{name:"SuSE-release",distros:["SUSE Linux"]},{name:"lsb-release",distros:["Ubuntu Linux","Arch Linux"]},{name:"debian_version",distros:["Debian"]},{name:"debian_release",distros:["Debian"]},{name:"arch-release",distros:["Arch Linux"]},{name:"gentoo-release",distros:["Gentoo Linux"]},{name:"novell-release",distros:["SUSE Linux"]},{name:"alpine-release",distros:["Alpine Linux"]}],lot={alpine:e=>e,arch:e=>ta(/distrib_release=(.*)/,e),centos:e=>ta(/release ([^ ]+)/,e),debian:e=>e,fedora:e=>ta(/release (..)/,e),mint:e=>ta(/distrib_release=(.*)/,e),red:e=>ta(/release ([^ ]+)/,e),suse:e=>ta(/VERSION = (.*)\n/,e),ubuntu:e=>ta(/distrib_release=(.*)/,e)};function ta(e,t){let r=e.exec(t);return r?r[1]:void 0}async function pot(){let e={kernel_version:Ns.release(),name:"Mac OS X",version:`10.${Number(Ns.release().split(".")[0])-4}`};try{let t=await new Promise((r,n)=>{eot.execFile("/usr/bin/sw_vers",(i,s)=>{if(i){n(i);return}r(s)})});e.name=ta(/^ProductName:\s+(.*)$/m,t),e.version=ta(/^ProductVersion:\s+(.*)$/m,t),e.build=ta(/^BuildVersion:\s+(.*)$/m,t)}catch{}return e}function Wee(e){return e.split(" ")[0].toLowerCase()}async function dot(){let e={kernel_version:Ns.release(),name:"Linux"};try{let t=await Mee("/etc"),r=uot.find(a=>t.includes(a.name));if(!r)return e;let n=tot.join("/etc",r.name),i=(await Hee(n,{encoding:"utf-8"})).toLowerCase(),{distros:s}=r;e.name=s.find(a=>i.indexOf(Wee(a))>=0)||s[0];let o=Wee(e.name);e.version=lot[o](i)}catch{}return e}function fot(){return process.env.VERCEL?{"cloud.provider":"vercel","cloud.region":process.env.VERCEL_REGION}:process.env.AWS_REGION?{"cloud.provider":"aws","cloud.region":process.env.AWS_REGION,"cloud.platform":process.env.AWS_EXECUTION_ENV}:process.env.GCP_PROJECT?{"cloud.provider":"gcp"}:process.env.ALIYUN_REGION_ID?{"cloud.provider":"alibaba_cloud","cloud.region":process.env.ALIYUN_REGION_ID}:process.env.WEBSITE_SITE_NAME&&process.env.REGION_NAME?{"cloud.provider":"azure","cloud.region":process.env.REGION_NAME}:process.env.IBM_CLOUD_REGION?{"cloud.provider":"ibm_cloud","cloud.region":process.env.IBM_CLOUD_REGION}:process.env.TENCENTCLOUD_REGION?{"cloud.provider":"tencent_cloud","cloud.region":process.env.TENCENTCLOUD_REGION,"cloud.account.id":process.env.TENCENTCLOUD_APPID,"cloud.availability_zone":process.env.TENCENTCLOUD_ZONE}:process.env.NETLIFY?{"cloud.provider":"netlify"}:process.env.FLY_REGION?{"cloud.provider":"fly.io","cloud.region":process.env.FLY_REGION}:process.env.DYNO?{"cloud.provider":"heroku"}:void 0}rp.Context=not;rp.getDeviceContext=Xee;rp.nodeContextIntegration=jee;rp.readDirAsync=Mee;rp.readFileAsync=Hee});var yx=y(gx=>{c();var{_optionalChain:yG}=ge();Object.defineProperty(gx,"__esModule",{value:!0});var hot=require("fs"),Yee=Ct(),Kee=ge(),mx=new Kee.LRUMap(100),mot=7,zee="ContextLines";function got(e){return new Promise((t,r)=>{hot.readFile(e,"utf8",(n,i)=>{n?r(n):t(i)})})}var yot=(e={})=>{let t=e.frameContextLines!==void 0?e.frameContextLines:mot;return{name:zee,setupOnce(){},processEvent(r){return bot(r,t)}}},Jee=Yee.defineIntegration(yot),vot=Yee.convertIntegrationFnToClass(zee,Jee);async function bot(e,t){let r={},n=[];if(t>0&&yG([e,"access",i=>i.exception,"optionalAccess",i=>i.values])){for(let i of e.exception.values)if(yG([i,"access",s=>s.stacktrace,"optionalAccess",s=>s.frames]))for(let s=i.stacktrace.frames.length-1;s>=0;s--){let o=i.stacktrace.frames[s];o.filename&&!r[o.filename]&&!mx.get(o.filename)&&(n.push(_ot(o.filename)),r[o.filename]=1)}}if(n.length>0&&await Promise.all(n),t>0&&yG([e,"access",i=>i.exception,"optionalAccess",i=>i.values]))for(let i of e.exception.values)i.stacktrace&&i.stacktrace.frames&&await Iot(i.stacktrace.frames,t);return e}function Iot(e,t){for(let r of e)if(r.filename&&r.context_line===void 0){let n=mx.get(r.filename);if(n)try{Kee.addContextToFrame(n,r,t)}catch{}}}async function _ot(e){let t=mx.get(e);if(t===null)return null;if(t!==void 0)return t;let r=null;try{r=(await got(e)).split(`
151
151
  `)}catch{}return mx.set(e,r),r}gx.ContextLines=vot;gx.contextLinesIntegration=Jee});var fy=y(vG=>{c();Object.defineProperty(vG,"__esModule",{value:!0});var Cot=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__;vG.DEBUG_BUILD=Cot});var ete=y(np=>{c();var{_optionalChain:ra}=ge();Object.defineProperty(np,"__esModule",{value:!0});var bG=require("url"),xot=Ql();function Sot(e){let{protocol:t,hostname:r,port:n}=Qee(e),i=e.path?e.path:"/";return`${t}//${r}${n}${i}`}function $ee(e){let{protocol:t,hostname:r,port:n}=Qee(e),i=e.pathname||"/",s=e.auth?wot(e.auth):"";return`${t}//${s}${r}${n}${i}`}function wot(e){let[t,r]=e.split(":");return`${t?"[Filtered]":""}:${r?"[Filtered]":""}@`}function Eot(e,t,r){if(!e)return e;let[n,i]=e.split(" ");return t.host&&!t.protocol&&(t.protocol=ra([r,"optionalAccess",s=>s.agent,"optionalAccess",s=>s.protocol]),i=$ee(t)),ra([i,"optionalAccess",s=>s.startsWith,"call",s=>s("///")])&&(i=i.slice(2)),`${n} ${i}`}function IG(e){let t={protocol:e.protocol,hostname:typeof e.hostname=="string"&&e.hostname.startsWith("[")?e.hostname.slice(1,-1):e.hostname,hash:e.hash,search:e.search,pathname:e.pathname,path:`${e.pathname||""}${e.search||""}`,href:e.href};return e.port!==""&&(t.port=Number(e.port)),(e.username||e.password)&&(t.auth=`${e.username}:${e.password}`),t}function Aot(e,t){let r,n;if(typeof t[t.length-1]=="function"&&(r=t.pop()),typeof t[0]=="string")n=IG(new bG.URL(t[0]));else if(t[0]instanceof bG.URL)n=IG(t[0]);else{n=t[0];try{let i=new bG.URL(n.path||"",`${n.protocol||"http:"}//${n.hostname}`);n={pathname:i.pathname,search:i.search,hash:i.hash,...n}}catch{}}return t.length===2&&(n={...n,...t[1]}),n.protocol===void 0&&(xot.NODE_VERSION.major>8?n.protocol=ra([ra([e,"optionalAccess",i=>i.globalAgent]),"optionalAccess",i=>i.protocol])||ra([n.agent,"optionalAccess",i=>i.protocol])||ra([n._defaultAgent,"optionalAccess",i=>i.protocol]):n.protocol=ra([n.agent,"optionalAccess",i=>i.protocol])||ra([n._defaultAgent,"optionalAccess",i=>i.protocol])||ra([ra([e,"optionalAccess",i=>i.globalAgent]),"optionalAccess",i=>i.protocol])),r?[n,r]:[n]}function Qee(e){let t=e.protocol||"",r=e.hostname||e.host||"",n=!e.port||e.port===80||e.port===443||/^(.*):(\d+)$/.test(r)?"":`:${e.port}`;return{protocol:t,hostname:r,port:n}}np.cleanSpanDescription=Eot;np.extractRawUrl=Sot;np.extractUrl=$ee;np.normalizeRequestArgs=Aot;np.urlToOptions=IG});var vx=y(Wf=>{c();var{_optionalChain:Zf}=ge();Object.defineProperty(Wf,"__esModule",{value:!0});var Xn=Ct(),$i=ge(),_G=fy(),Rot=Ql(),hy=ete(),Tot=(e={})=>{let{breadcrumbs:t,tracing:r,shouldCreateSpanForRequest:n}=e,i={breadcrumbs:t,tracing:r===!1?!1:$i.dropUndefinedKeys({enableIfHasTracingEnabled:r===!0?void 0:!0,shouldCreateSpanForRequest:n})};return new Pf(i)},Not=Xn.defineIntegration(Tot),Pf=class e{static __initStatic(){this.id="Http"}__init(){this.name=e.id}constructor(t={}){e.prototype.__init.call(this),this._breadcrumbs=typeof t.breadcrumbs>"u"?!0:t.breadcrumbs,this._tracing=t.tracing?t.tracing===!0?{}:t.tracing:void 0}setupOnce(t,r){let n=Zf([r,"call",p=>p(),"access",p=>p.getClient,"call",p=>p(),"optionalAccess",p=>p.getOptions,"call",p=>p()]),i=rte(this._tracing,n);if(!this._breadcrumbs&&!i)return;if(n&&n.instrumenter!=="sentry"){_G.DEBUG_BUILD&&$i.logger.log("HTTP Integration is skipped because of instrumenter configuration.");return}let s=nte(i,this._tracing,n),o=Zf([n,"optionalAccess",p=>p.tracePropagationTargets])||Zf([this,"access",p=>p._tracing,"optionalAccess",p=>p.tracePropagationTargets]),a=require("http"),u=tte(a,this._breadcrumbs,s,o);if($i.fill(a,"get",u),$i.fill(a,"request",u),Rot.NODE_VERSION.major>8){let p=require("https"),d=tte(p,this._breadcrumbs,s,o);$i.fill(p,"get",d),$i.fill(p,"request",d)}}};Pf.__initStatic();function tte(e,t,r,n){let i=new $i.LRUMap(100),s=new $i.LRUMap(100),o=p=>{if(r===void 0)return!0;let d=i.get(p);if(d!==void 0)return d;let h=r(p);return i.set(p,h),h},a=p=>{if(n===void 0)return!0;let d=s.get(p);if(d!==void 0)return d;let h=$i.stringMatchesSomePattern(p,n);return s.set(p,h),h};function u(p,d,h,m){Xn.getCurrentHub().getIntegration(Pf)&&Xn.addBreadcrumb({category:"http",data:{status_code:m&&m.statusCode,...d},type:"http"},{event:p,request:h,response:m})}return function(d){return function(...m){let g=hy.normalizeRequestArgs(e,m),v=g[0],I=hy.extractRawUrl(v),x=hy.extractUrl(v),_=Xn.getClient();if(Xn.isSentryRequestUrl(x,_))return d.apply(e,g);let A=Xn.getCurrentScope(),E=Xn.getIsolationScope(),S=Xn.getActiveSpan(),w=kot(x,v),T=o(I)?Zf([S,"optionalAccess",D=>D.startChild,"call",D=>D({op:"http.client",origin:"auto.http.node.http",description:`${w["http.method"]} ${w.url}`,data:w})]):void 0;if(_&&a(I)){let{traceId:D,spanId:L,sampled:W,dsc:k}={...E.getPropagationContext(),...A.getPropagationContext()},F=T?Xn.spanToTraceHeader(T):$i.generateSentryTraceHeader(D,L,W),B=$i.dynamicSamplingContextToSentryBaggageHeader(k||(T?Xn.getDynamicSamplingContextFromSpan(T):Xn.getDynamicSamplingContextFromClient(D,_,A)));Bot(v,x,F,B)}else _G.DEBUG_BUILD&&$i.logger.log(`[Tracing] Not adding sentry-trace header to outgoing request (${x}) due to mismatching tracePropagationTargets option.`);return d.apply(e,g).once("response",function(D){let L=this;t&&u("response",w,L,D),T&&(D.statusCode&&Xn.setHttpStatus(T,D.statusCode),T.updateName(hy.cleanSpanDescription(Xn.spanToJSON(T).description||"",v,L)||""),T.end())}).once("error",function(){let D=this;t&&u("error",w,D),T&&(Xn.setHttpStatus(T,500),T.updateName(hy.cleanSpanDescription(Xn.spanToJSON(T).description||"",v,D)||""),T.end())})}}}function Bot(e,t,r,n){(e.headers||{})["sentry-trace"]||(_G.DEBUG_BUILD&&$i.logger.log(`[Tracing] Adding sentry-trace header ${r} to outgoing request to "${t}": `),e.headers={...e.headers,"sentry-trace":r,...n&&n.length>0&&{baggage:Oot(e,n)}})}function kot(e,t){let r=t.method||"GET",n={url:e,"http.method":r};return t.hash&&(n["http.fragment"]=t.hash.substring(1)),t.search&&(n["http.query"]=t.search.substring(1)),n}function Oot(e,t){if(!e.headers||!e.headers.baggage)return t;if(t){if(Array.isArray(e.headers.baggage))return[...e.headers.baggage,t]}else return e.headers.baggage;return[e.headers.baggage,t]}function rte(e,t){return e===void 0?!1:e.enableIfHasTracingEnabled?Xn.hasTracingEnabled(t):!0}function nte(e,t,r){return e?Zf([t,"optionalAccess",i=>i.shouldCreateSpanForRequest])||Zf([r,"optionalAccess",i=>i.shouldCreateSpanForRequest]):()=>!1}Wf.Http=Pf;Wf._getShouldCreateSpanForRequest=nte;Wf._shouldCreateSpans=rte;Wf.httpIntegration=Not});var ste=y(ip=>{c();Object.defineProperty(ip,"__esModule",{value:!0});function Got(e,t,r){let n=0,i=5,s=0;return setInterval(()=>{s===0?n>e&&(i*=2,r(i),i>86400&&(i=86400),s=i):(s-=1,s===0&&t()),n=0},1e3).unref(),()=>{n+=1}}function CG(e){return e!==void 0&&(e.length===0||e==="?"||e==="<anonymous>")}function Fot(e,t){return e===t||CG(e)&&CG(t)}function ite(e){if(e!==void 0)return e.slice(-10).reduce((t,r)=>`${t},${r.function},${r.lineno},${r.colno}`,"")}function Lot(e,t){if(t!==void 0)return ite(e(t,1))}ip.createRateLimiter=Got;ip.functionNamesMatch=Fot;ip.hashFrames=ite;ip.hashFromStack=Lot;ip.isAnonymous=CG});var cte=y(my=>{c();var{_optionalChain:Sr}=ge();Object.defineProperty(my,"__esModule",{value:!0});var SG=Ct(),bx=ge(),Zot=Ql(),Ix=ste();function wG(e){let t=[],r=!1;function n(o){t=[],!r&&(r=!0,e(o))}t.push(n);function i(o){t.push(o)}function s(o){let a=t.pop()||n;try{a(o)}catch{n(o)}}return{add:i,next:s}}var xG=class{constructor(){let{Session:t}=require("inspector");this._session=new t}configureAndConnect(t,r){this._session.connect(),this._session.on("Debugger.paused",n=>{t(n,()=>{this._session.post("Debugger.resume")})}),this._session.post("Debugger.enable"),this._session.post("Debugger.setPauseOnExceptions",{state:r?"all":"uncaught"})}setPauseOnExceptions(t){this._session.post("Debugger.setPauseOnExceptions",{state:t?"all":"uncaught"})}getLocalVariables(t,r){this._getProperties(t,n=>{let{add:i,next:s}=wG(r);for(let o of n)if(Sr([o,"optionalAccess",a=>a.value,"optionalAccess",a=>a.objectId])&&Sr([o,"optionalAccess",a=>a.value,"access",a=>a.className])==="Array"){let a=o.value.objectId;i(u=>this._unrollArray(a,o.name,u,s))}else if(Sr([o,"optionalAccess",a=>a.value,"optionalAccess",a=>a.objectId])&&Sr([o,"optionalAccess",a=>a.value,"optionalAccess",a=>a.className])==="Object"){let a=o.value.objectId;i(u=>this._unrollObject(a,o.name,u,s))}else(Sr([o,"optionalAccess",a=>a.value,"optionalAccess",a=>a.value])||Sr([o,"optionalAccess",a=>a.value,"optionalAccess",a=>a.description]))&&i(a=>this._unrollOther(o,a,s));s({})})}_getProperties(t,r){this._session.post("Runtime.getProperties",{objectId:t,ownProperties:!0},(n,i)=>{r(n?[]:i.result)})}_unrollArray(t,r,n,i){this._getProperties(t,s=>{n[r]=s.filter(o=>o.name!=="length"&&!isNaN(parseInt(o.name,10))).sort((o,a)=>parseInt(o.name,10)-parseInt(a.name,10)).map(o=>Sr([o,"optionalAccess",a=>a.value,"optionalAccess",a=>a.value])),i(n)})}_unrollObject(t,r,n,i){this._getProperties(t,s=>{n[r]=s.map(o=>[o.name,Sr([o,"optionalAccess",a=>a.value,"optionalAccess",a=>a.value])]).reduce((o,[a,u])=>(o[a]=u,o),{}),i(n)})}_unrollOther(t,r,n){Sr([t,"optionalAccess",i=>i.value,"optionalAccess",i=>i.value])?r[t.name]=t.value.value:Sr([t,"optionalAccess",i=>i.value,"optionalAccess",i=>i.description])&&Sr([t,"optionalAccess",i=>i.value,"optionalAccess",i=>i.type])!=="function"&&(r[t.name]=`<${t.value.description}>`),n(r)}};function Pot(){try{return new xG}catch{return}}var ote="LocalVariables",Wot=(e={},t=Pot())=>{let r=new bx.LRUMap(20),n,i=!1;function s(u,{params:{reason:p,data:d,callFrames:h}},m){if(p!=="exception"&&p!=="promiseRejection"){m();return}Sr([n,"optionalCall",x=>x()]);let g=Ix.hashFromStack(u,Sr([d,"optionalAccess",x=>x.description]));if(g==null){m();return}let{add:v,next:I}=wG(x=>{r.set(g,x),m()});for(let x=0;x<Math.min(h.length,5);x++){let{scopeChain:_,functionName:A,this:E}=h[x],S=_.find(T=>T.type==="local"),w=E.className==="global"||!E.className?A:`${E.className}.${A}`;if(Sr([S,"optionalAccess",T=>T.object,"access",T=>T.objectId])===void 0)v(T=>{T[x]={function:w},I(T)});else{let T=S.object.objectId;v(D=>Sr([t,"optionalAccess",L=>L.getLocalVariables,"call",L=>L(T,W=>{D[x]={function:w,vars:W},I(D)})]))}}I([])}function o(u){let p=Ix.hashFrames(Sr([u,"optionalAccess",m=>m.stacktrace,"optionalAccess",m=>m.frames]));if(p===void 0)return;let d=r.remove(p);if(d===void 0)return;let h=Sr([u,"access",m=>m.stacktrace,"optionalAccess",m=>m.frames,"optionalAccess",m=>m.length])||0;for(let m=0;m<h;m++){let g=h-m-1;if(!Sr([u,"optionalAccess",v=>v.stacktrace,"optionalAccess",v=>v.frames,"optionalAccess",v=>v[g]])||!d[m])break;d[m].vars===void 0||u.stacktrace.frames[g].in_app===!1||!Ix.functionNamesMatch(u.stacktrace.frames[g].function,d[m].function)||(u.stacktrace.frames[g].vars=d[m].vars)}}function a(u){for(let p of Sr([u,"optionalAccess",d=>d.exception,"optionalAccess",d=>d.values])||[])o(p);return u}return{name:ote,setupOnce(){let u=SG.getClient(),p=Sr([u,"optionalAccess",d=>d.getOptions,"call",d=>d()]);if(t&&Sr([p,"optionalAccess",d=>d.includeLocalVariables])){if(Zot.NODE_VERSION.major<18){bx.logger.log("The `LocalVariables` integration is only supported on Node >= v18.");return}let h=e.captureAllExceptions!==!1;if(t.configureAndConnect((m,g)=>s(p.stackParser,m,g),h),h){let m=e.maxExceptionsPerSecond||50;n=Ix.createRateLimiter(m,()=>{bx.logger.log("Local variables rate-limit lifted."),Sr([t,"optionalAccess",g=>g.setPauseOnExceptions,"call",g=>g(!0)])},g=>{bx.logger.log(`Local variables rate-limit exceeded. Disabling capturing of caught exceptions for ${g} seconds.`),Sr([t,"optionalAccess",v=>v.setPauseOnExceptions,"call",v=>v(!1)])})}i=!0}},processEvent(u){return i?a(u):u},_getCachedFramesCount(){return r.size},_getFirstCachedFrame(){return r.values()[0]}}},ate=SG.defineIntegration(Wot),Dot=SG.convertIntegrationFnToClass(ote,ate);my.LocalVariablesSync=Dot;my.createCallbackList=wG;my.localVariablesSyncIntegration=ate});var Cx=y(_x=>{c();Object.defineProperty(_x,"__esModule",{value:!0});var ute=cte(),qot=ute.LocalVariablesSync,Vot=ute.localVariablesSyncIntegration;_x.LocalVariables=qot;_x.localVariablesIntegration=Vot});var Sx=y(xx=>{c();Object.defineProperty(xx,"__esModule",{value:!0});var lte=require("fs"),pte=require("path"),dte=Ct(),EG,fte="Modules";function Hot(){try{return require.cache?Object.keys(require.cache):[]}catch{return[]}}function Mot(){let e=require.main&&require.main.paths||[],t=Hot(),r={},n={};return t.forEach(i=>{let s=i,o=()=>{let a=s;if(s=pte.dirname(a),!s||a===s||n[a])return;if(e.indexOf(s)<0)return o();let u=pte.join(a,"package.json");if(n[a]=!0,!lte.existsSync(u))return o();try{let p=JSON.parse(lte.readFileSync(u,"utf8"));r[p.name]=p.version}catch{}};o()}),r}function Uot(){return EG||(EG=Mot()),EG}var jot=()=>({name:fte,setupOnce(){},processEvent(e){return e.modules={...e.modules,...Uot()},e}}),hte=dte.defineIntegration(jot),Xot=dte.convertIntegrationFnToClass(fte,hte);xx.Modules=Xot;xx.modulesIntegration=hte});var TG=y(RG=>{c();Object.defineProperty(RG,"__esModule",{value:!0});var Yot=Ct(),wx=ge(),AG=fy(),Kot=2e3;function zot(e){wx.consoleSandbox(()=>{console.error(e)});let t=Yot.getClient();t===void 0&&(AG.DEBUG_BUILD&&wx.logger.warn("No NodeClient was defined, we are exiting the process now."),global.process.exit(1));let r=t.getOptions(),n=r&&r.shutdownTimeout&&r.shutdownTimeout>0&&r.shutdownTimeout||Kot;t.close(n).then(i=>{i||AG.DEBUG_BUILD&&wx.logger.warn("We reached the timeout for emptying the request buffer, still exiting now!"),global.process.exit(1)},i=>{AG.DEBUG_BUILD&&wx.logger.error(i)})}RG.logAndExitProcess=zot});var Ax=y(gy=>{c();Object.defineProperty(gy,"__esModule",{value:!0});var Ex=Ct(),Jot=ge(),$ot=fy(),mte=TG(),gte="OnUncaughtException",Qot=(e={})=>{let t={exitEvenIfOtherHandlersAreRegistered:!0,...e};return{name:gte,setupOnce(){},setup(r){global.process.on("uncaughtException",vte(r,t))}}},yte=Ex.defineIntegration(Qot),eat=Ex.convertIntegrationFnToClass(gte,yte);function vte(e,t){let n=!1,i=!1,s=!1,o,a=e.getOptions();return Object.assign(u=>{let p=mte.logAndExitProcess;t.onFatalError?p=t.onFatalError:a.onFatalError&&(p=a.onFatalError);let h=global.process.listeners("uncaughtException").reduce((g,v)=>v.name==="domainUncaughtExceptionClear"||v.tag&&v.tag==="sentry_tracingErrorCallback"||v._errorHandler?g:g+1,0)===0,m=t.exitEvenIfOtherHandlersAreRegistered||h;n?m&&(s?($ot.DEBUG_BUILD&&Jot.logger.warn("uncaught exception after calling fatal error shutdown callback - this is bad! forcing shutdown"),mte.logAndExitProcess(u)):i||(i=!0,setTimeout(()=>{s||(s=!0,p(o,u))},2e3))):(o=u,n=!0,Ex.getClient()===e&&Ex.captureException(u,{originalException:u,captureContext:{level:"fatal"},mechanism:{handled:!1,type:"onuncaughtexception"}}),!s&&m&&(s=!0,p(u)))},{_errorHandler:!0})}gy.OnUncaughtException=eat;gy.makeErrorHandler=vte;gy.onUncaughtExceptionIntegration=yte});var Tx=y(yy=>{c();Object.defineProperty(yy,"__esModule",{value:!0});var Rx=Ct(),bte=ge(),tat=TG(),Ite="OnUnhandledRejection",rat=(e={})=>{let t=e.mode||"warn";return{name:Ite,setupOnce(){},setup(r){global.process.on("unhandledRejection",Cte(r,{mode:t}))}}},_te=Rx.defineIntegration(rat),nat=Rx.convertIntegrationFnToClass(Ite,_te);function Cte(e,t){return function(n,i){Rx.getClient()===e&&(Rx.captureException(n,{originalException:i,captureContext:{extra:{unhandledPromiseRejection:!0}},mechanism:{handled:!1,type:"onunhandledrejection"}}),iat(n,t))}}function iat(e,t){let r="This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason:";t.mode==="warn"?bte.consoleSandbox(()=>{console.warn(r),console.error(e&&e.stack?e.stack:e)}):t.mode==="strict"&&(bte.consoleSandbox(()=>{console.warn(r)}),tat.logAndExitProcess(e))}yy.OnUnhandledRejection=nat;yy.makeUnhandledPromiseHandler=Cte;yy.onUnhandledRejectionIntegration=_te});var Nx=y(vy=>{c();Object.defineProperty(vy,"__esModule",{value:!0});var sat=require("http"),oat=require("url"),xte=Ct(),Df=ge(),Ste="Spotlight",aat=(e={})=>{let t={sidecarUrl:e.sidecarUrl||"http://localhost:8969/stream"};return{name:Ste,setupOnce(){},setup(r){typeof process=="object"&&process.env&&process.env.NODE_ENV!=="development"&&Df.logger.warn("[Spotlight] It seems you're not in dev mode. Do you really want to have Spotlight enabled?"),uat(r,t)}}},wte=xte.defineIntegration(aat),cat=xte.convertIntegrationFnToClass(Ste,wte);function uat(e,t){let r=lat(t.sidecarUrl);if(!r)return;let n=0;if(typeof e.on!="function"){Df.logger.warn("[Spotlight] Cannot connect to spotlight due to missing method on SDK client (`client.on`)");return}e.on("beforeEnvelope",i=>{if(n>3){Df.logger.warn("[Spotlight] Disabled Sentry -> Spotlight integration due to too many failed requests");return}let s=Df.serializeEnvelope(i),a=Ete()({method:"POST",path:r.pathname,hostname:r.hostname,port:r.port,headers:{"Content-Type":"application/x-sentry-envelope"}},u=>{u.on("data",()=>{}),u.on("end",()=>{}),u.setEncoding("utf8")});a.on("error",()=>{n++,Df.logger.warn("[Spotlight] Failed to send envelope to Spotlight Sidecar")}),a.write(s),a.end()})}function lat(e){try{return new oat.URL(`${e}`)}catch{Df.logger.warn(`[Spotlight] Invalid sidecar URL: ${e}`);return}}function Ete(){let{request:e}=sat;return pat(e)?e.__sentry_original__:e}function pat(e){return"__sentry_original__"in e}vy.Spotlight=cat;vy.getNativeHttpRequest=Ete;vy.spotlightIntegration=wte});var kx=y(na=>{c();var{_optionalChain:Bx}=ge();Object.defineProperty(na,"__esModule",{value:!0});var Jr=Ct(),sp=ge(),dat=Ql();na.ChannelName=void 0;(function(e){let t="undici:request:create";e.RequestCreate=t;let r="undici:request:headers";e.RequestEnd=r;let n="undici:request:error";e.RequestError=n})(na.ChannelName||(na.ChannelName={}));var fat=e=>new by(e),hat=Jr.defineIntegration(fat),by=class e{static __initStatic(){this.id="Undici"}__init(){this.name=e.id}__init2(){this._createSpanUrlMap=new sp.LRUMap(100)}__init3(){this._headersUrlMap=new sp.LRUMap(100)}constructor(t={}){e.prototype.__init.call(this),e.prototype.__init2.call(this),e.prototype.__init3.call(this),e.prototype.__init4.call(this),e.prototype.__init5.call(this),e.prototype.__init6.call(this),this._options={breadcrumbs:t.breadcrumbs===void 0?!0:t.breadcrumbs,tracing:t.tracing,shouldCreateSpanForRequest:t.shouldCreateSpanForRequest}}setupOnce(t){if(dat.NODE_VERSION.major<16)return;let r;try{r=require("diagnostics_channel")}catch{}!r||!r.subscribe||(r.subscribe(na.ChannelName.RequestCreate,this._onRequestCreate),r.subscribe(na.ChannelName.RequestEnd,this._onRequestEnd),r.subscribe(na.ChannelName.RequestError,this._onRequestError))}_shouldCreateSpan(t){if(this._options.tracing===!1||this._options.tracing===void 0&&!Jr.hasTracingEnabled())return!1;if(this._options.shouldCreateSpanForRequest===void 0)return!0;let r=this._createSpanUrlMap.get(t);if(r!==void 0)return r;let n=this._options.shouldCreateSpanForRequest(t);return this._createSpanUrlMap.set(t,n),n}__init4(){this._onRequestCreate=t=>{if(!Bx([Jr.getClient,"call",h=>h(),"optionalAccess",h=>h.getIntegration,"call",h=>h(e)]))return;let{request:r}=t,n=r.origin?r.origin.toString()+r.path:r.path,i=Jr.getClient();if(!i||Jr.isSentryRequestUrl(n,i)||r.__sentry_span__!==void 0)return;let s=i.getOptions(),o=Jr.getCurrentScope(),a=Jr.getIsolationScope(),u=Jr.getActiveSpan(),p=this._shouldCreateSpan(n)?gat(u,r,n):void 0;if(p&&(r.__sentry_span__=p),(h=>{if(s.tracePropagationTargets===void 0)return!0;let m=this._headersUrlMap.get(h);if(m!==void 0)return m;let g=sp.stringMatchesSomePattern(h,s.tracePropagationTargets);return this._headersUrlMap.set(h,g),g})(n)){let{traceId:h,spanId:m,sampled:g,dsc:v}={...a.getPropagationContext(),...o.getPropagationContext()},I=p?Jr.spanToTraceHeader(p):sp.generateSentryTraceHeader(h,m,g),x=sp.dynamicSamplingContextToSentryBaggageHeader(v||(p?Jr.getDynamicSamplingContextFromSpan(p):Jr.getDynamicSamplingContextFromClient(h,i,o)));mat(r,I,x)}}}__init5(){this._onRequestEnd=t=>{if(!Bx([Jr.getClient,"call",o=>o(),"optionalAccess",o=>o.getIntegration,"call",o=>o(e)]))return;let{request:r,response:n}=t,i=r.origin?r.origin.toString()+r.path:r.path;if(Jr.isSentryRequestUrl(i,Jr.getClient()))return;let s=r.__sentry_span__;s&&(Jr.setHttpStatus(s,n.statusCode),s.end()),this._options.breadcrumbs&&Jr.addBreadcrumb({category:"http",data:{method:r.method,status_code:n.statusCode,url:i},type:"http"},{event:"response",request:r,response:n})}}__init6(){this._onRequestError=t=>{if(!Bx([Jr.getClient,"call",s=>s(),"optionalAccess",s=>s.getIntegration,"call",s=>s(e)]))return;let{request:r}=t,n=r.origin?r.origin.toString()+r.path:r.path;if(Jr.isSentryRequestUrl(n,Jr.getClient()))return;let i=r.__sentry_span__;i&&(i.setStatus("internal_error"),i.end()),this._options.breadcrumbs&&Jr.addBreadcrumb({category:"http",data:{method:r.method,url:n},level:"error",type:"http"},{event:"error",request:r})}}};by.__initStatic();function mat(e,t,r){let n;Array.isArray(e.headers)?n=e.headers.some(i=>i==="sentry-trace"):n=e.headers.split(`\r
152
- `).some(s=>s.startsWith("sentry-trace:")),!n&&(e.addHeader("sentry-trace",t),r&&e.addHeader("baggage",r))}function gat(e,t,r){let n=sp.parseUrl(r),i=t.method||"GET",s={"http.method":i};return n.search&&(s["http.query"]=n.search),n.hash&&(s["http.fragment"]=n.hash),Bx([e,"optionalAccess",o=>o.startChild,"call",o=>o({op:"http.client",origin:"auto.http.node.undici",description:`${i} ${sp.getSanitizedUrlString(n)}`,data:s})])}na.Undici=by;na.nativeNodeFetchintegration=hat});var BG=y(NG=>{c();Object.defineProperty(NG,"__esModule",{value:!0});var Ate=require("path"),yat=ge();function Rte(e){return e.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}function vat(e=process.argv[1]?yat.dirname(process.argv[1]):process.cwd(),t=Ate.sep==="\\"){let r=t?Rte(e):e;return n=>{if(!n)return;let i=t?Rte(n):n,{dir:s,base:o,ext:a}=Ate.posix.parse(i);(a===".js"||a===".mjs"||a===".cjs")&&(o=o.slice(0,a.length*-1)),s||(s=".");let u=s.lastIndexOf("/node_modules");if(u>-1)return`${s.slice(u+14).replace(/\//g,".")}:${o}`;if(s.startsWith(r)){let p=s.slice(r.length+1).replace(/\//g,".");return p&&(p+=":"),p+=o,p}return o}}NG.createGetModuleFromFilename=vat});var kG=y(bu=>{c();var{_optionalChain:bat}=ge();Object.defineProperty(bu,"__esModule",{value:!0});var Bs=Ct(),op=ge(),Iat=Fee(),_at=iG(),Cat=fx(),xat=hx(),Sat=yx(),wat=vx(),Eat=Cx(),Aat=Sx(),Rat=Ax(),Tat=Tx(),Nat=Nx(),Bat=kx(),kat=BG(),Oat=pG(),Tte=[Bs.inboundFiltersIntegration(),Bs.functionToStringIntegration(),Bs.linkedErrorsIntegration(),Bs.requestDataIntegration(),Cat.consoleIntegration(),wat.httpIntegration(),Bat.nativeNodeFetchintegration(),Rat.onUncaughtExceptionIntegration(),Tat.onUnhandledRejectionIntegration(),Sat.contextLinesIntegration(),Eat.localVariablesIntegration(),xat.nodeContextIntegration(),Aat.modulesIntegration()];function Nte(e){let t=Bs.getMainCarrier(),r=bat([t,"access",n=>n.__SENTRY__,"optionalAccess",n=>n.integrations])||[];return[...Tte,...r]}function Gat(e={}){Iat.setNodeAsyncContextStrategy(),e.defaultIntegrations===void 0&&(e.defaultIntegrations=Nte()),e.dsn===void 0&&process.env.SENTRY_DSN&&(e.dsn=process.env.SENTRY_DSN);let t=process.env.SENTRY_TRACES_SAMPLE_RATE;if(e.tracesSampleRate===void 0&&t){let n=parseFloat(t);isFinite(n)&&(e.tracesSampleRate=n)}if(e.release===void 0){let n=Bte();n!==void 0?e.release=n:e.autoSessionTracking=!1}e.environment===void 0&&process.env.SENTRY_ENVIRONMENT&&(e.environment=process.env.SENTRY_ENVIRONMENT),e.autoSessionTracking===void 0&&e.dsn!==void 0&&(e.autoSessionTracking=!0),e.instrumenter===void 0&&(e.instrumenter="sentry");let r={...e,stackParser:op.stackParserFromStackParserOptions(e.stackParser||kte),integrations:Bs.getIntegrationsToSetup(e),transport:e.transport||Oat.makeNodeTransport};if(Bs.initAndBind(e.clientClass||_at.NodeClient,r),e.autoSessionTracking&&Lat(),Zat(),e.spotlight){let n=Bs.getClient();if(n&&n.addIntegration){let i=n.getOptions().integrations;for(let s of i)n.addIntegration(s);n.addIntegration(Nat.spotlightIntegration({sidecarUrl:typeof e.spotlight=="string"?e.spotlight:void 0}))}}}function Fat(e){if(e===void 0)return!1;let t=e&&e.getOptions();return t&&t.autoSessionTracking!==void 0?t.autoSessionTracking:!1}function Bte(e){return process.env.SENTRY_RELEASE?process.env.SENTRY_RELEASE:op.GLOBAL_OBJ.SENTRY_RELEASE&&op.GLOBAL_OBJ.SENTRY_RELEASE.id?op.GLOBAL_OBJ.SENTRY_RELEASE.id:process.env.GITHUB_SHA||process.env.COMMIT_REF||process.env.VERCEL_GIT_COMMIT_SHA||process.env.VERCEL_GITHUB_COMMIT_SHA||process.env.VERCEL_GITLAB_COMMIT_SHA||process.env.VERCEL_BITBUCKET_COMMIT_SHA||process.env.ZEIT_GITHUB_COMMIT_SHA||process.env.ZEIT_GITLAB_COMMIT_SHA||process.env.ZEIT_BITBUCKET_COMMIT_SHA||process.env.CF_PAGES_COMMIT_SHA||e}var kte=op.createStackParser(op.nodeStackLineParser(kat.createGetModuleFromFilename()));function Lat(){Bs.startSession(),process.on("beforeExit",()=>{let e=Bs.getIsolationScope().getSession();e&&!["exited","crashed"].includes(e.status)&&Bs.endSession()})}function Zat(){let e=(process.env.SENTRY_USE_ENVIRONMENT||"").toLowerCase();if(!["false","n","no","off","0"].includes(e)){let t=process.env.SENTRY_TRACE,r=process.env.SENTRY_BAGGAGE,n=op.propagationContextFromHeaders(t,r);Bs.getCurrentScope().setPropagationContext(n)}}bu.defaultIntegrations=Tte;bu.defaultStackParser=kte;bu.getDefaultIntegrations=Nte;bu.getSentryRelease=Bte;bu.init=Gat;bu.isAutoSessionTrackingEnabled=Fat});var Ote=y(GG=>{c();Object.defineProperty(GG,"__esModule",{value:!0});var Ox=require("fs"),OG=require("path");function Pat(e){let t=OG.resolve(e);if(!Ox.existsSync(t))throw new Error(`Cannot read contents of ${t}. Directory does not exist.`);if(!Ox.statSync(t).isDirectory())throw new Error(`Cannot read contents of ${t}, because it is not a directory.`);let r=n=>Ox.readdirSync(n).reduce((i,s)=>{let o=OG.join(n,s);return Ox.statSync(o).isDirectory()?i.concat(r(o)):(i.push(o),i)},[]);return r(t).map(n=>OG.relative(t,n))}GG.deepReadDirSync=Pat});var Fte=y(Gte=>{c();Gte.base64WorkerScript="aW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gJ2luc3BlY3Rvcic7CmltcG9ydCB7IHdvcmtlckRhdGEsIHBhcmVudFBvcnQgfSBmcm9tICd3b3JrZXJfdGhyZWFkcyc7CmltcG9ydCB7IHBvc2l4LCBzZXAgfSBmcm9tICdwYXRoJzsKaW1wb3J0ICogYXMgaHR0cCBmcm9tICdodHRwJzsKaW1wb3J0ICogYXMgaHR0cHMgZnJvbSAnaHR0cHMnOwppbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7CmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCc7CmltcG9ydCB7IGNyZWF0ZUd6aXAgfSBmcm9tICd6bGliJzsKaW1wb3J0ICogYXMgbmV0IGZyb20gJ25ldCc7CmltcG9ydCAqIGFzIHRscyBmcm9tICd0bHMnOwoKLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZApjb25zdCBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIG9uZSBvZiBhIGZldyBFcnJvciBvciBFcnJvci1saWtlCiAqIHtAbGluayBpc0Vycm9yfS4KICoKICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuCiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC4KICovCmZ1bmN0aW9uIGlzRXJyb3Iod2F0KSB7CiAgc3dpdGNoIChvYmplY3RUb1N0cmluZy5jYWxsKHdhdCkpIHsKICAgIGNhc2UgJ1tvYmplY3QgRXJyb3JdJzoKICAgIGNhc2UgJ1tvYmplY3QgRXhjZXB0aW9uXSc6CiAgICBjYXNlICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nOgogICAgICByZXR1cm4gdHJ1ZTsKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiBpc0luc3RhbmNlT2Yod2F0LCBFcnJvcik7CiAgfQp9Ci8qKgogKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gYnVpbHQtaW4gY2xhc3MuCiAqCiAqIEBwYXJhbSB3YXQgVGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQKICogQHBhcmFtIGNsYXNzTmFtZQogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc0J1aWx0aW4od2F0LCBjbGFzc05hbWUpIHsKICByZXR1cm4gb2JqZWN0VG9TdHJpbmcuY2FsbCh3YXQpID09PSBgW29iamVjdCAke2NsYXNzTmFtZX1dYDsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIHN0cmluZwogKiB7QGxpbmsgaXNTdHJpbmd9LgogKgogKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNTdHJpbmcod2F0KSB7CiAgcmV0dXJuIGlzQnVpbHRpbih3YXQsICdTdHJpbmcnKTsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBvYmplY3QgbGl0ZXJhbCwgb3IgYSBjbGFzcyBpbnN0YW5jZS4KICoge0BsaW5rIGlzUGxhaW5PYmplY3R9LgogKgogKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh3YXQpIHsKICByZXR1cm4gaXNCdWlsdGluKHdhdCwgJ09iamVjdCcpOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEV2ZW50IGluc3RhbmNlCiAqIHtAbGluayBpc0V2ZW50fS4KICoKICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuCiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC4KICovCmZ1bmN0aW9uIGlzRXZlbnQod2F0KSB7CiAgcmV0dXJuIHR5cGVvZiBFdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHdhdCwgRXZlbnQpOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEVsZW1lbnQgaW5zdGFuY2UKICoge0BsaW5rIGlzRWxlbWVudH0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc0VsZW1lbnQod2F0KSB7CiAgcmV0dXJuIHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpc0luc3RhbmNlT2Yod2F0LCBFbGVtZW50KTsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlIGhhcyBhIHRoZW4gZnVuY3Rpb24uCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKi8KZnVuY3Rpb24gaXNUaGVuYWJsZSh3YXQpIHsKICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzCiAgcmV0dXJuIEJvb2xlYW4od2F0ICYmIHdhdC50aGVuICYmIHR5cGVvZiB3YXQudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7Cn0KCi8qKgogKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYSBTeW50aGV0aWNFdmVudAogKiB7QGxpbmsgaXNTeW50aGV0aWNFdmVudH0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KHdhdCkgewogIHJldHVybiBpc1BsYWluT2JqZWN0KHdhdCkgJiYgJ25hdGl2ZUV2ZW50JyBpbiB3YXQgJiYgJ3ByZXZlbnREZWZhdWx0JyBpbiB3YXQgJiYgJ3N0b3BQcm9wYWdhdGlvbicgaW4gd2F0Owp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUgaXMgTmFOCiAqIHtAbGluayBpc05hTn0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc05hTiQxKHdhdCkgewogIHJldHVybiB0eXBlb2Ygd2F0ID09PSAnbnVtYmVyJyAmJiB3YXQgIT09IHdhdDsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBpbnN0YW5jZSBvZiBwcm92aWRlZCBjb25zdHJ1Y3Rvci4KICoge0BsaW5rIGlzSW5zdGFuY2VPZn0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcGFyYW0gYmFzZSBBIGNvbnN0cnVjdG9yIHRvIGJlIHVzZWQgaW4gYSBjaGVjay4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNJbnN0YW5jZU9mKHdhdCwgYmFzZSkgewogIHRyeSB7CiAgICByZXR1cm4gd2F0IGluc3RhbmNlb2YgYmFzZTsKICB9IGNhdGNoIChfZSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIFZ1ZSBWaWV3TW9kZWwuCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc1Z1ZVZpZXdNb2RlbCh3YXQpIHsKICAvLyBOb3QgdXNpbmcgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyBiZWNhdXNlIGluIFZ1ZSAzIGl0IHdvdWxkIHJlYWQgdGhlIGluc3RhbmNlJ3MgU3ltYm9sKFN5bWJvbC50b1N0cmluZ1RhZykgcHJvcGVydHkuCiAgcmV0dXJuICEhKHR5cGVvZiB3YXQgPT09ICdvYmplY3QnICYmIHdhdCAhPT0gbnVsbCAmJiAoKHdhdCApLl9faXNWdWUgfHwgKHdhdCApLl9pc1Z1ZSkpOwp9CgovKiogSW50ZXJuYWwgZ2xvYmFsIHdpdGggY29tbW9uIHByb3BlcnRpZXMgYW5kIFNlbnRyeSBleHRlbnNpb25zICAqLwoKLy8gVGhlIGNvZGUgYmVsb3cgZm9yICdpc0dsb2JhbE9iaicgYW5kICdHTE9CQUxfT0JKJyB3YXMgY29waWVkIGZyb20gY29yZS1qcyBiZWZvcmUgbW9kaWZpY2F0aW9uCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvMWI5NDRkZjU1MjgyY2RjOTljOTBkYjVmNDllYjBiNmVkYTJjYzBhMy9wYWNrYWdlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMKLy8gY29yZS1qcyBoYXMgdGhlIGZvbGxvd2luZyBsaWNlbmNlOgovLwovLyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAyMiBEZW5pcyBQdXNoa2FyZXYKLy8KLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQovLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAovLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci8vCi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgovLwovLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgovLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgovLyBUSEUgU09GVFdBUkUuCgovKiogUmV0dXJucyAnb2JqJyBpZiBpdCdzIHRoZSBnbG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgcmV0dXJucyB1bmRlZmluZWQgKi8KZnVuY3Rpb24gaXNHbG9iYWxPYmoob2JqKSB7CiAgcmV0dXJuIG9iaiAmJiBvYmouTWF0aCA9PSBNYXRoID8gb2JqIDogdW5kZWZpbmVkOwp9CgovKiogR2V0J3MgdGhlIGdsb2JhbCBvYmplY3QgZm9yIHRoZSBjdXJyZW50IEphdmFTY3JpcHQgcnVudGltZSAqLwpjb25zdCBHTE9CQUxfT0JKID0KICAodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgaXNHbG9iYWxPYmooZ2xvYmFsVGhpcykpIHx8CiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscwogICh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKHdpbmRvdykpIHx8CiAgKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKHNlbGYpKSB8fAogICh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKGdsb2JhbCkpIHx8CiAgKGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB0aGlzOwogIH0pKCkgfHwKICB7fTsKCi8qKgogKiBAZGVwcmVjYXRlZCBVc2UgR0xPQkFMX09CSiBpbnN0ZWFkIG9yIFdJTkRPVyBmcm9tIEBzZW50cnkvYnJvd3Nlci4gVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjgKICovCmZ1bmN0aW9uIGdldEdsb2JhbE9iamVjdCgpIHsKICByZXR1cm4gR0xPQkFMX09CSiA7Cn0KCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpjb25zdCBXSU5ET1cgPSBnZXRHbG9iYWxPYmplY3QoKTsKCmNvbnN0IERFRkFVTFRfTUFYX1NUUklOR19MRU5HVEggPSA4MDsKCi8qKgogKiBHaXZlbiBhIGNoaWxkIERPTSBlbGVtZW50LCByZXR1cm5zIGEgcXVlcnktc2VsZWN0b3Igc3RhdGVtZW50IGRlc2NyaWJpbmcgdGhhdAogKiBhbmQgaXRzIGFuY2VzdG9ycwogKiBlLmcuIFtIVE1MRWxlbWVudF0gPT4gYm9keSA+IGRpdiA+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdCiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aAogKi8KZnVuY3Rpb24gaHRtbFRyZWVBc1N0cmluZygKICBlbGVtLAogIG9wdGlvbnMgPSB7fSwKKSB7CiAgaWYgKCFlbGVtKSB7CiAgICByZXR1cm4gJzx1bmtub3duPic7CiAgfQoKICAvLyB0cnkvY2F0Y2ggYm90aDoKICAvLyAtIGFjY2Vzc2luZyBldmVudC50YXJnZXQgKHNlZSBnZXRzZW50cnkvcmF2ZW4tanMjODM4LCAjNzY4KQogIC8vIC0gYGh0bWxUcmVlQXNTdHJpbmdgIGJlY2F1c2UgaXQncyBjb21wbGV4LCBhbmQganVzdCBhY2Nlc3NpbmcgdGhlIERPTSBpbmNvcnJlY3RseQogIC8vIC0gY2FuIHRocm93IGFuIGV4Y2VwdGlvbiBpbiBzb21lIGNpcmN1bXN0YW5jZXMuCiAgdHJ5IHsKICAgIGxldCBjdXJyZW50RWxlbSA9IGVsZW0gOwogICAgY29uc3QgTUFYX1RSQVZFUlNFX0hFSUdIVCA9IDU7CiAgICBjb25zdCBvdXQgPSBbXTsKICAgIGxldCBoZWlnaHQgPSAwOwogICAgbGV0IGxlbiA9IDA7CiAgICBjb25zdCBzZXBhcmF0b3IgPSAnID4gJzsKICAgIGNvbnN0IHNlcExlbmd0aCA9IHNlcGFyYXRvci5sZW5ndGg7CiAgICBsZXQgbmV4dFN0cjsKICAgIGNvbnN0IGtleUF0dHJzID0gQXJyYXkuaXNBcnJheShvcHRpb25zKSA/IG9wdGlvbnMgOiBvcHRpb25zLmtleUF0dHJzOwogICAgY29uc3QgbWF4U3RyaW5nTGVuZ3RoID0gKCFBcnJheS5pc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMubWF4U3RyaW5nTGVuZ3RoKSB8fCBERUZBVUxUX01BWF9TVFJJTkdfTEVOR1RIOwoKICAgIHdoaWxlIChjdXJyZW50RWxlbSAmJiBoZWlnaHQrKyA8IE1BWF9UUkFWRVJTRV9IRUlHSFQpIHsKICAgICAgbmV4dFN0ciA9IF9odG1sRWxlbWVudEFzU3RyaW5nKGN1cnJlbnRFbGVtLCBrZXlBdHRycyk7CiAgICAgIC8vIGJhaWwgb3V0IGlmCiAgICAgIC8vIC0gbmV4dFN0ciBpcyB0aGUgJ2h0bWwnIGVsZW1lbnQKICAgICAgLy8gLSB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgdGhhdCB3b3VsZCBiZSBjcmVhdGVkIGV4Y2VlZHMgbWF4U3RyaW5nTGVuZ3RoCiAgICAgIC8vICAgKGlnbm9yZSB0aGlzIGxpbWl0IGlmIHdlIGFyZSBvbiB0aGUgZmlyc3QgaXRlcmF0aW9uKQogICAgICBpZiAobmV4dFN0ciA9PT0gJ2h0bWwnIHx8IChoZWlnaHQgPiAxICYmIGxlbiArIG91dC5sZW5ndGggKiBzZXBMZW5ndGggKyBuZXh0U3RyLmxlbmd0aCA+PSBtYXhTdHJpbmdMZW5ndGgpKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIG91dC5wdXNoKG5leHRTdHIpOwoKICAgICAgbGVuICs9IG5leHRTdHIubGVuZ3RoOwogICAgICBjdXJyZW50RWxlbSA9IGN1cnJlbnRFbGVtLnBhcmVudE5vZGU7CiAgICB9CgogICAgcmV0dXJuIG91dC5yZXZlcnNlKCkuam9pbihzZXBhcmF0b3IpOwogIH0gY2F0Y2ggKF9vTykgewogICAgcmV0dXJuICc8dW5rbm93bj4nOwogIH0KfQoKLyoqCiAqIFJldHVybnMgYSBzaW1wbGUsIHF1ZXJ5LXNlbGVjdG9yIHJlcHJlc2VudGF0aW9uIG9mIGEgRE9NIGVsZW1lbnQKICogZS5nLiBbSFRNTEVsZW1lbnRdID0+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdCiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aAogKi8KZnVuY3Rpb24gX2h0bWxFbGVtZW50QXNTdHJpbmcoZWwsIGtleUF0dHJzKSB7CiAgY29uc3QgZWxlbSA9IGVsCgo7CgogIGNvbnN0IG91dCA9IFtdOwogIGxldCBjbGFzc05hbWU7CiAgbGV0IGNsYXNzZXM7CiAgbGV0IGtleTsKICBsZXQgYXR0cjsKICBsZXQgaTsKCiAgaWYgKCFlbGVtIHx8ICFlbGVtLnRhZ05hbWUpIHsKICAgIHJldHVybiAnJzsKICB9CgogIC8vIEB0cy1leHBlY3QtZXJyb3IgV0lORE9XIGhhcyBIVE1MRWxlbWVudAogIGlmIChXSU5ET1cuSFRNTEVsZW1lbnQpIHsKICAgIC8vIElmIHVzaW5nIHRoZSBjb21wb25lbnQgbmFtZSBhbm5vdGF0aW9uIHBsdWdpbiwgdGhpcyB2YWx1ZSBtYXkgYmUgYXZhaWxhYmxlIG9uIHRoZSBET00gbm9kZQogICAgaWYgKGVsZW0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbGVtLmRhdGFzZXQgJiYgZWxlbS5kYXRhc2V0WydzZW50cnlDb21wb25lbnQnXSkgewogICAgICByZXR1cm4gZWxlbS5kYXRhc2V0WydzZW50cnlDb21wb25lbnQnXTsKICAgIH0KICB9CgogIG91dC5wdXNoKGVsZW0udGFnTmFtZS50b0xvd2VyQ2FzZSgpKTsKCiAgLy8gUGFpcnMgb2YgYXR0cmlidXRlIGtleXMgZGVmaW5lZCBpbiBgc2VyaWFsaXplQXR0cmlidXRlYCBhbmQgdGhlaXIgdmFsdWVzIG9uIGVsZW1lbnQuCiAgY29uc3Qga2V5QXR0clBhaXJzID0KICAgIGtleUF0dHJzICYmIGtleUF0dHJzLmxlbmd0aAogICAgICA/IGtleUF0dHJzLmZpbHRlcihrZXlBdHRyID0+IGVsZW0uZ2V0QXR0cmlidXRlKGtleUF0dHIpKS5tYXAoa2V5QXR0ciA9PiBba2V5QXR0ciwgZWxlbS5nZXRBdHRyaWJ1dGUoa2V5QXR0cildKQogICAgICA6IG51bGw7CgogIGlmIChrZXlBdHRyUGFpcnMgJiYga2V5QXR0clBhaXJzLmxlbmd0aCkgewogICAga2V5QXR0clBhaXJzLmZvckVhY2goa2V5QXR0clBhaXIgPT4gewogICAgICBvdXQucHVzaChgWyR7a2V5QXR0clBhaXJbMF19PSIke2tleUF0dHJQYWlyWzFdfSJdYCk7CiAgICB9KTsKICB9IGVsc2UgewogICAgaWYgKGVsZW0uaWQpIHsKICAgICAgb3V0LnB1c2goYCMke2VsZW0uaWR9YCk7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdAogICAgY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWU7CiAgICBpZiAoY2xhc3NOYW1lICYmIGlzU3RyaW5nKGNsYXNzTmFtZSkpIHsKICAgICAgY2xhc3NlcyA9IGNsYXNzTmFtZS5zcGxpdCgvXHMrLyk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgb3V0LnB1c2goYC4ke2NsYXNzZXNbaV19YCk7CiAgICAgIH0KICAgIH0KICB9CiAgY29uc3QgYWxsb3dlZEF0dHJzID0gWydhcmlhLWxhYmVsJywgJ3R5cGUnLCAnbmFtZScsICd0aXRsZScsICdhbHQnXTsKICBmb3IgKGkgPSAwOyBpIDwgYWxsb3dlZEF0dHJzLmxlbmd0aDsgaSsrKSB7CiAgICBrZXkgPSBhbGxvd2VkQXR0cnNbaV07CiAgICBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoa2V5KTsKICAgIGlmIChhdHRyKSB7CiAgICAgIG91dC5wdXNoKGBbJHtrZXl9PSIke2F0dHJ9Il1gKTsKICAgIH0KICB9CiAgcmV0dXJuIG91dC5qb2luKCcnKTsKfQoKLyoqCiAqIFRoaXMgc2VydmVzIGFzIGEgYnVpbGQgdGltZSBmbGFnIHRoYXQgd2lsbCBiZSB0cnVlIGJ5IGRlZmF1bHQsIGJ1dCBmYWxzZSBpbiBub24tZGVidWcgYnVpbGRzIG9yIGlmIHVzZXJzIHJlcGxhY2UgYF9fU0VOVFJZX0RFQlVHX19gIGluIHRoZWlyIGdlbmVyYXRlZCBjb2RlLgogKgogKiBBVFRFTlRJT046IFRoaXMgY29uc3RhbnQgbXVzdCBuZXZlciBjcm9zcyBwYWNrYWdlIGJvdW5kYXJpZXMgKGkuZS4gYmUgZXhwb3J0ZWQpIHRvIGd1YXJhbnRlZSB0aGF0IGl0IGNhbiBiZSB1c2VkIGZvciB0cmVlIHNoYWtpbmcuCiAqLwpjb25zdCBERUJVR19CVUlMRCQxID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTsKCi8qKiBQcmVmaXggZm9yIGxvZ2dpbmcgc3RyaW5ncyAqLwpjb25zdCBQUkVGSVggPSAnU2VudHJ5IExvZ2dlciAnOwoKY29uc3QgQ09OU09MRV9MRVZFTFMgPSBbCiAgJ2RlYnVnJywKICAnaW5mbycsCiAgJ3dhcm4nLAogICdlcnJvcicsCiAgJ2xvZycsCiAgJ2Fzc2VydCcsCiAgJ3RyYWNlJywKXSA7CgovKiogVGhpcyBtYXkgYmUgbXV0YXRlZCBieSB0aGUgY29uc29sZSBpbnN0cnVtZW50YXRpb24uICovCmNvbnN0IG9yaWdpbmFsQ29uc29sZU1ldGhvZHMKCiA9IHt9OwoKLyoqIEpTRG9jICovCgovKioKICogVGVtcG9yYXJpbHkgZGlzYWJsZSBzZW50cnkgY29uc29sZSBpbnN0cnVtZW50YXRpb25zLgogKgogKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIHJ1biBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBgY29uc29sZWAgbWVzc2FnZXMKICogQHJldHVybnMgVGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrCiAqLwpmdW5jdGlvbiBjb25zb2xlU2FuZGJveChjYWxsYmFjaykgewogIGlmICghKCdjb25zb2xlJyBpbiBHTE9CQUxfT0JKKSkgewogICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgfQoKICBjb25zdCBjb25zb2xlID0gR0xPQkFMX09CSi5jb25zb2xlIDsKICBjb25zdCB3cmFwcGVkRnVuY3MgPSB7fTsKCiAgY29uc3Qgd3JhcHBlZExldmVscyA9IE9iamVjdC5rZXlzKG9yaWdpbmFsQ29uc29sZU1ldGhvZHMpIDsKCiAgLy8gUmVzdG9yZSBhbGwgd3JhcHBlZCBjb25zb2xlIG1ldGhvZHMKICB3cmFwcGVkTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4gewogICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlTWV0aG9kID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kc1tsZXZlbF0gOwogICAgd3JhcHBlZEZ1bmNzW2xldmVsXSA9IGNvbnNvbGVbbGV2ZWxdIDsKICAgIGNvbnNvbGVbbGV2ZWxdID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kOwogIH0pOwoKICB0cnkgewogICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgfSBmaW5hbGx5IHsKICAgIC8vIFJldmVydCByZXN0b3JhdGlvbiB0byB3cmFwcGVkIHN0YXRlCiAgICB3cmFwcGVkTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4gewogICAgICBjb25zb2xlW2xldmVsXSA9IHdyYXBwZWRGdW5jc1tsZXZlbF0gOwogICAgfSk7CiAgfQp9CgpmdW5jdGlvbiBtYWtlTG9nZ2VyKCkgewogIGxldCBlbmFibGVkID0gZmFsc2U7CiAgY29uc3QgbG9nZ2VyID0gewogICAgZW5hYmxlOiAoKSA9PiB7CiAgICAgIGVuYWJsZWQgPSB0cnVlOwogICAgfSwKICAgIGRpc2FibGU6ICgpID0+IHsKICAgICAgZW5hYmxlZCA9IGZhbHNlOwogICAgfSwKICAgIGlzRW5hYmxlZDogKCkgPT4gZW5hYmxlZCwKICB9OwoKICBpZiAoREVCVUdfQlVJTEQkMSkgewogICAgQ09OU09MRV9MRVZFTFMuZm9yRWFjaChuYW1lID0+IHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkKICAgICAgbG9nZ2VyW25hbWVdID0gKC4uLmFyZ3MpID0+IHsKICAgICAgICBpZiAoZW5hYmxlZCkgewogICAgICAgICAgY29uc29sZVNhbmRib3goKCkgPT4gewogICAgICAgICAgICBHTE9CQUxfT0JKLmNvbnNvbGVbbmFtZV0oYCR7UFJFRklYfVske25hbWV9XTpgLCAuLi5hcmdzKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0pOwogIH0gZWxzZSB7CiAgICBDT05TT0xFX0xFVkVMUy5mb3JFYWNoKG5hbWUgPT4gewogICAgICBsb2dnZXJbbmFtZV0gPSAoKSA9PiB1bmRlZmluZWQ7CiAgICB9KTsKICB9CgogIHJldHVybiBsb2dnZXIgOwp9Cgpjb25zdCBsb2dnZXIgPSBtYWtlTG9nZ2VyKCk7CgovKioKICogUmVuZGVycyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHNuLgogKgogKiBCeSBkZWZhdWx0LCB0aGlzIHdpbGwgcmVuZGVyIHRoZSBwdWJsaWMgcmVwcmVzZW50YXRpb24gd2l0aG91dCB0aGUgcGFzc3dvcmQKICogY29tcG9uZW50LiBUbyBnZXQgdGhlIGRlcHJlY2F0ZWQgcHJpdmF0ZSByZXByZXNlbnRhdGlvbiwgc2V0IGB3aXRoUGFzc3dvcmRgCiAqIHRvIHRydWUuCiAqCiAqIEBwYXJhbSB3aXRoUGFzc3dvcmQgV2hlbiBzZXQgdG8gdHJ1ZSwgdGhlIHBhc3N3b3JkIHdpbGwgYmUgaW5jbHVkZWQuCiAqLwpmdW5jdGlvbiBkc25Ub1N0cmluZyhkc24sIHdpdGhQYXNzd29yZCA9IGZhbHNlKSB7CiAgY29uc3QgeyBob3N0LCBwYXRoLCBwYXNzLCBwb3J0LCBwcm9qZWN0SWQsIHByb3RvY29sLCBwdWJsaWNLZXkgfSA9IGRzbjsKICByZXR1cm4gKAogICAgYCR7cHJvdG9jb2x9Oi8vJHtwdWJsaWNLZXl9JHt3aXRoUGFzc3dvcmQgJiYgcGFzcyA/IGA6JHtwYXNzfWAgOiAnJ31gICsKICAgIGBAJHtob3N0fSR7cG9ydCA/IGA6JHtwb3J0fWAgOiAnJ30vJHtwYXRoID8gYCR7cGF0aH0vYCA6IHBhdGh9JHtwcm9qZWN0SWR9YAogICk7Cn0KCi8qKiBBbiBlcnJvciBlbWl0dGVkIGJ5IFNlbnRyeSBTREtzIGFuZCByZWxhdGVkIHV0aWxpdGllcy4gKi8KY2xhc3MgU2VudHJ5RXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgLyoqIERpc3BsYXkgbmFtZSBvZiB0aGlzIGVycm9yIGluc3RhbmNlLiAqLwoKICAgY29uc3RydWN0b3IoIG1lc3NhZ2UsIGxvZ0xldmVsID0gJ3dhcm4nKSB7CiAgICBzdXBlcihtZXNzYWdlKTt0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwogICAgdGhpcy5uYW1lID0gbmV3LnRhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZTsKICAgIC8vIFRoaXMgc2V0cyB0aGUgcHJvdG90eXBlIHRvIGJlIGBFcnJvcmAsIG5vdCBgU2VudHJ5RXJyb3JgLiBJdCdzIHVuY2xlYXIgd2h5IHdlIGRvIHRoaXMsIGJ1dCBjb21tZW50aW5nIHRoaXMgbGluZQogICAgLy8gb3V0IGNhdXNlcyB2YXJpb3VzIChzZWVtaW5nbHkgdG90YWxseSB1bnJlbGF0ZWQpIHBsYXl3cmlnaHQgdGVzdHMgY29uc2lzdGVudGx5IHRpbWUgb3V0LiBGWUksIHRoaXMgbWFrZXMKICAgIC8vIGluc3RhbmNlcyBvZiBgU2VudHJ5RXJyb3JgIGZhaWwgYG9iaiBpbnN0YW5jZW9mIFNlbnRyeUVycm9yYCBjaGVja3MuCiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgbmV3LnRhcmdldC5wcm90b3R5cGUpOwogICAgdGhpcy5sb2dMZXZlbCA9IGxvZ0xldmVsOwogIH0KfQoKLyoqCiAqIEVuY29kZXMgZ2l2ZW4gb2JqZWN0IGludG8gdXJsLWZyaWVuZGx5IGZvcm1hdAogKgogKiBAcGFyYW0gb2JqZWN0IEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHNlcmlhbGl6YWJsZSB2YWx1ZXMKICogQHJldHVybnMgc3RyaW5nIEVuY29kZWQKICovCmZ1bmN0aW9uIHVybEVuY29kZShvYmplY3QpIHsKICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KQogICAgLm1hcChrZXkgPT4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KG9iamVjdFtrZXldKX1gKQogICAgLmpvaW4oJyYnKTsKfQoKLyoqCiAqIFRyYW5zZm9ybXMgYW55IGBFcnJvcmAgb3IgYEV2ZW50YCBpbnRvIGEgcGxhaW4gb2JqZWN0IHdpdGggYWxsIG9mIHRoZWlyIGVudW1lcmFibGUgcHJvcGVydGllcywgYW5kIHNvbWUgb2YgdGhlaXIKICogbm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBhdHRhY2hlZC4KICoKICogQHBhcmFtIHZhbHVlIEluaXRpYWwgc291cmNlIHRoYXQgd2UgaGF2ZSB0byB0cmFuc2Zvcm0gaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHVzYWJsZSBieSB0aGUgc2VyaWFsaXplcgogKiBAcmV0dXJucyBBbiBFdmVudCBvciBFcnJvciB0dXJuZWQgaW50byBhbiBvYmplY3QgLSBvciB0aGUgdmFsdWUgYXJndXJtZW50IGl0c2VsZiwgd2hlbiB2YWx1ZSBpcyBuZWl0aGVyIGFuIEV2ZW50IG5vcgogKiAgYW4gRXJyb3IuCiAqLwpmdW5jdGlvbiBjb252ZXJ0VG9QbGFpbk9iamVjdCgKICB2YWx1ZSwKKQoKIHsKICBpZiAoaXNFcnJvcih2YWx1ZSkpIHsKICAgIHJldHVybiB7CiAgICAgIG1lc3NhZ2U6IHZhbHVlLm1lc3NhZ2UsCiAgICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAgIHN0YWNrOiB2YWx1ZS5zdGFjaywKICAgICAgLi4uZ2V0T3duUHJvcGVydGllcyh2YWx1ZSksCiAgICB9OwogIH0gZWxzZSBpZiAoaXNFdmVudCh2YWx1ZSkpIHsKICAgIGNvbnN0IG5ld09iagoKID0gewogICAgICB0eXBlOiB2YWx1ZS50eXBlLAogICAgICB0YXJnZXQ6IHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHZhbHVlLnRhcmdldCksCiAgICAgIGN1cnJlbnRUYXJnZXQ6IHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHZhbHVlLmN1cnJlbnRUYXJnZXQpLAogICAgICAuLi5nZXRPd25Qcm9wZXJ0aWVzKHZhbHVlKSwKICAgIH07CgogICAgaWYgKHR5cGVvZiBDdXN0b21FdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHZhbHVlLCBDdXN0b21FdmVudCkpIHsKICAgICAgbmV3T2JqLmRldGFpbCA9IHZhbHVlLmRldGFpbDsKICAgIH0KCiAgICByZXR1cm4gbmV3T2JqOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdmFsdWU7CiAgfQp9CgovKiogQ3JlYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGFyZ2V0IG9mIGFuIGBFdmVudGAgb2JqZWN0ICovCmZ1bmN0aW9uIHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHRhcmdldCkgewogIHRyeSB7CiAgICByZXR1cm4gaXNFbGVtZW50KHRhcmdldCkgPyBodG1sVHJlZUFzU3RyaW5nKHRhcmdldCkgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGFyZ2V0KTsKICB9IGNhdGNoIChfb08pIHsKICAgIHJldHVybiAnPHVua25vd24+JzsKICB9Cn0KCi8qKiBGaWx0ZXJzIG91dCBhbGwgYnV0IGFuIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzICovCmZ1bmN0aW9uIGdldE93blByb3BlcnRpZXMob2JqKSB7CiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkgewogICAgY29uc3QgZXh0cmFjdGVkUHJvcHMgPSB7fTsKICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gb2JqKSB7CiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wZXJ0eSkpIHsKICAgICAgICBleHRyYWN0ZWRQcm9wc1twcm9wZXJ0eV0gPSAob2JqIClbcHJvcGVydHldOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZXh0cmFjdGVkUHJvcHM7CiAgfSBlbHNlIHsKICAgIHJldHVybiB7fTsKICB9Cn0KCi8qKgogKiBHaXZlbiBhbnkgb2JqZWN0LCByZXR1cm4gYSBuZXcgb2JqZWN0IGhhdmluZyByZW1vdmVkIGFsbCBmaWVsZHMgd2hvc2UgdmFsdWUgd2FzIGB1bmRlZmluZWRgLgogKiBXb3JrcyByZWN1cnNpdmVseSBvbiBvYmplY3RzIGFuZCBhcnJheXMuCiAqCiAqIEF0dGVudGlvbjogVGhpcyBmdW5jdGlvbiBrZWVwcyBjaXJjdWxhciByZWZlcmVuY2VzIGluIHRoZSByZXR1cm5lZCBvYmplY3QuCiAqLwpmdW5jdGlvbiBkcm9wVW5kZWZpbmVkS2V5cyhpbnB1dFZhbHVlKSB7CiAgLy8gVGhpcyBtYXAga2VlcHMgdHJhY2sgb2Ygd2hhdCBhbHJlYWR5IHZpc2l0ZWQgbm9kZXMgbWFwIHRvLgogIC8vIE91ciBTZXQgLSBiYXNlZCBtZW1vQnVpbGRlciBkb2Vzbid0IHdvcmsgaGVyZSBiZWNhdXNlIHdlIHdhbnQgdG8gdGhlIG91dHB1dCBvYmplY3QgdG8gaGF2ZSB0aGUgc2FtZSBjaXJjdWxhcgogIC8vIHJlZmVyZW5jZXMgYXMgdGhlIGlucHV0IG9iamVjdC4KICBjb25zdCBtZW1vaXphdGlvbk1hcCA9IG5ldyBNYXAoKTsKCiAgLy8gVGhpcyBmdW5jdGlvbiBqdXN0IHByb3hpZXMgYF9kcm9wVW5kZWZpbmVkS2V5c2AgdG8ga2VlcCB0aGUgYG1lbW9CdWlsZGVyYCBvdXQgb2YgdGhpcyBmdW5jdGlvbidzIEFQSQogIHJldHVybiBfZHJvcFVuZGVmaW5lZEtleXMoaW5wdXRWYWx1ZSwgbWVtb2l6YXRpb25NYXApOwp9CgpmdW5jdGlvbiBfZHJvcFVuZGVmaW5lZEtleXMoaW5wdXRWYWx1ZSwgbWVtb2l6YXRpb25NYXApIHsKICBpZiAoaXNQb2pvKGlucHV0VmFsdWUpKSB7CiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGR1ZSB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBvYmplY3QgaXQgd2FzIG1hcHBlZCB0byBpbiB0aGUgbmV3IG9iamVjdAogICAgY29uc3QgbWVtb1ZhbCA9IG1lbW9pemF0aW9uTWFwLmdldChpbnB1dFZhbHVlKTsKICAgIGlmIChtZW1vVmFsICE9PSB1bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIG1lbW9WYWwgOwogICAgfQoKICAgIGNvbnN0IHJldHVyblZhbHVlID0ge307CiAgICAvLyBTdG9yZSB0aGUgbWFwcGluZyBvZiB0aGlzIHZhbHVlIGluIGNhc2Ugd2UgdmlzaXQgaXQgYWdhaW4sIGluIGNhc2Ugb2YgY2lyY3VsYXIgZGF0YQogICAgbWVtb2l6YXRpb25NYXAuc2V0KGlucHV0VmFsdWUsIHJldHVyblZhbHVlKTsKCiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhpbnB1dFZhbHVlKSkgewogICAgICBpZiAodHlwZW9mIGlucHV0VmFsdWVba2V5XSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICByZXR1cm5WYWx1ZVtrZXldID0gX2Ryb3BVbmRlZmluZWRLZXlzKGlucHV0VmFsdWVba2V5XSwgbWVtb2l6YXRpb25NYXApOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJldHVyblZhbHVlIDsKICB9CgogIGlmIChBcnJheS5pc0FycmF5KGlucHV0VmFsdWUpKSB7CiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGR1ZSB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBhcnJheSBpdCB3YXMgbWFwcGVkIHRvIGluIHRoZSBuZXcgb2JqZWN0CiAgICBjb25zdCBtZW1vVmFsID0gbWVtb2l6YXRpb25NYXAuZ2V0KGlucHV0VmFsdWUpOwogICAgaWYgKG1lbW9WYWwgIT09IHVuZGVmaW5lZCkgewogICAgICByZXR1cm4gbWVtb1ZhbCA7CiAgICB9CgogICAgY29uc3QgcmV0dXJuVmFsdWUgPSBbXTsKICAgIC8vIFN0b3JlIHRoZSBtYXBwaW5nIG9mIHRoaXMgdmFsdWUgaW4gY2FzZSB3ZSB2aXNpdCBpdCBhZ2FpbiwgaW4gY2FzZSBvZiBjaXJjdWxhciBkYXRhCiAgICBtZW1vaXphdGlvbk1hcC5zZXQoaW5wdXRWYWx1ZSwgcmV0dXJuVmFsdWUpOwoKICAgIGlucHV0VmFsdWUuZm9yRWFjaCgoaXRlbSkgPT4gewogICAgICByZXR1cm5WYWx1ZS5wdXNoKF9kcm9wVW5kZWZpbmVkS2V5cyhpdGVtLCBtZW1vaXphdGlvbk1hcCkpOwogICAgfSk7CgogICAgcmV0dXJuIHJldHVyblZhbHVlIDsKICB9CgogIHJldHVybiBpbnB1dFZhbHVlOwp9CgpmdW5jdGlvbiBpc1Bvam8oaW5wdXQpIHsKICBpZiAoIWlzUGxhaW5PYmplY3QoaW5wdXQpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB0cnkgewogICAgY29uc3QgbmFtZSA9IChPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5wdXQpICkuY29uc3RydWN0b3IubmFtZTsKICAgIHJldHVybiAhbmFtZSB8fCBuYW1lID09PSAnT2JqZWN0JzsKICB9IGNhdGNoIChlKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCi8qKgogKiBEb2VzIHRoaXMgZmlsZW5hbWUgbG9vayBsaWtlIGl0J3MgcGFydCBvZiB0aGUgYXBwIGNvZGU/CiAqLwpmdW5jdGlvbiBmaWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUsIGlzTmF0aXZlID0gZmFsc2UpIHsKICBjb25zdCBpc0ludGVybmFsID0KICAgIGlzTmF0aXZlIHx8CiAgICAoZmlsZW5hbWUgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgaXQncyBhbiBhYnNvbHV0ZSBsaW51eCBwYXRoCiAgICAgICFmaWxlbmFtZS5zdGFydHNXaXRoKCcvJykgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgaXQncyBhbiBhYnNvbHV0ZSB3aW5kb3dzIHBhdGgKICAgICAgIWZpbGVuYW1lLm1hdGNoKC9eW0EtWl06LykgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgdGhlIHBhdGggaXMgc3RhcnRpbmcgd2l0aCBhIGRvdAogICAgICAhZmlsZW5hbWUuc3RhcnRzV2l0aCgnLicpICYmCiAgICAgIC8vIEl0J3Mgbm90IGludGVybmFsIGlmIHRoZSBmcmFtZSBoYXMgYSBwcm90b2NvbC4gSW4gbm9kZSwgdGhpcyBpcyB1c3VhbGx5IHRoZSBjYXNlIGlmIHRoZSBmaWxlIGdvdCBwcmUtcHJvY2Vzc2VkIHdpdGggYSBidW5kbGVyIGxpa2Ugd2VicGFjawogICAgICAhZmlsZW5hbWUubWF0Y2goL15bYS16QS1aXShbYS16QS1aMC05LlwtK10pKjpcL1wvLykpOyAvLyBTY2hlbWEgZnJvbTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM2NDE3ODIKCiAgLy8gaW5fYXBwIGlzIGFsbCB0aGF0J3Mgbm90IGFuIGludGVybmFsIE5vZGUgZnVuY3Rpb24gb3IgYSBtb2R1bGUgd2l0aGluIG5vZGVfbW9kdWxlcwogIC8vIG5vdGUgdGhhdCBpc05hdGl2ZSBhcHBlYXJzIHRvIHJldHVybiB0cnVlIGV2ZW4gZm9yIG5vZGUgY29yZSBsaWJyYXJpZXMKICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9yYXZlbi1ub2RlL2lzc3Vlcy8xNzYKCiAgcmV0dXJuICFpc0ludGVybmFsICYmIGZpbGVuYW1lICE9PSB1bmRlZmluZWQgJiYgIWZpbGVuYW1lLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvJyk7Cn0KCmNvbnN0IFNUQUNLVFJBQ0VfRlJBTUVfTElNSVQgPSA1MDsKY29uc3QgU1RSSVBfRlJBTUVfUkVHRVhQID0gL2NhcHR1cmVNZXNzYWdlfGNhcHR1cmVFeGNlcHRpb24vOwoKLyoqCiAqIFJlbW92ZXMgU2VudHJ5IGZyYW1lcyBmcm9tIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgc3RhY2sgaWYgcHJlc2VudCBhbmQgZW5mb3JjZXMgYSBsaW1pdCBvZiBtYXggbnVtYmVyIG9mIGZyYW1lcy4KICogQXNzdW1lcyBzdGFjayBpbnB1dCBpcyBvcmRlcmVkIGZyb20gdG9wIHRvIGJvdHRvbSBhbmQgcmV0dXJucyB0aGUgcmV2ZXJzZSByZXByZXNlbnRhdGlvbiBzbyBjYWxsIHNpdGUgb2YgdGhlCiAqIGZ1bmN0aW9uIHRoYXQgY2F1c2VkIHRoZSBjcmFzaCBpcyB0aGUgbGFzdCBmcmFtZSBpbiB0aGUgYXJyYXkuCiAqIEBoaWRkZW4KICovCmZ1bmN0aW9uIHN0cmlwU2VudHJ5RnJhbWVzQW5kUmV2ZXJzZShzdGFjaykgewogIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICByZXR1cm4gW107CiAgfQoKICBjb25zdCBsb2NhbFN0YWNrID0gQXJyYXkuZnJvbShzdGFjayk7CgogIC8vIElmIHN0YWNrIHN0YXJ0cyB3aXRoIG9uZSBvZiBvdXIgQVBJIGNhbGxzLCByZW1vdmUgaXQgKHN0YXJ0cywgbWVhbmluZyBpdCdzIHRoZSB0b3Agb2YgdGhlIHN0YWNrIC0gYWthIGxhc3QgY2FsbCkKICBpZiAoL3NlbnRyeVdyYXBwZWQvLnRlc3QobG9jYWxTdGFja1tsb2NhbFN0YWNrLmxlbmd0aCAtIDFdLmZ1bmN0aW9uIHx8ICcnKSkgewogICAgbG9jYWxTdGFjay5wb3AoKTsKICB9CgogIC8vIFJldmVyc2luZyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwcm9jZWR1cmUgYWxsb3dzIHVzIHRvIGp1c3QgcG9wIHRoZSB2YWx1ZXMgb2ZmIHRoZSBzdGFjawogIGxvY2FsU3RhY2sucmV2ZXJzZSgpOwoKICAvLyBJZiBzdGFjayBlbmRzIHdpdGggb25lIG9mIG91ciBpbnRlcm5hbCBBUEkgY2FsbHMsIHJlbW92ZSBpdCAoZW5kcywgbWVhbmluZyBpdCdzIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrIC0gYWthIHRvcC1tb3N0IGNhbGwpCiAgaWYgKFNUUklQX0ZSQU1FX1JFR0VYUC50ZXN0KGxvY2FsU3RhY2tbbG9jYWxTdGFjay5sZW5ndGggLSAxXS5mdW5jdGlvbiB8fCAnJykpIHsKICAgIGxvY2FsU3RhY2sucG9wKCk7CgogICAgLy8gV2hlbiB1c2luZyBzeW50aGV0aWMgZXZlbnRzLCB3ZSB3aWxsIGhhdmUgYSAyIGxldmVscyBkZWVwIHN0YWNrLCBhcyBgbmV3IEVycm9yKCdTZW50cnkgc3ludGhldGljRXhjZXB0aW9uJylgCiAgICAvLyBpcyBwcm9kdWNlZCB3aXRoaW4gdGhlIGh1YiBpdHNlbGYsIG1ha2luZyBpdDoKICAgIC8vCiAgICAvLyAgIFNlbnRyeS5jYXB0dXJlRXhjZXB0aW9uKCkKICAgIC8vICAgZ2V0Q3VycmVudEh1YigpLmNhcHR1cmVFeGNlcHRpb24oKQogICAgLy8KICAgIC8vIGluc3RlYWQgb2YganVzdCB0aGUgdG9wIGBTZW50cnlgIGNhbGwgaXRzZWxmLgogICAgLy8gVGhpcyBmb3JjZXMgdXMgdG8gcG9zc2libHkgc3RyaXAgYW4gYWRkaXRpb25hbCBmcmFtZSBpbiB0aGUgZXhhY3Qgc2FtZSB3YXMgYXMgYWJvdmUuCiAgICBpZiAoU1RSSVBfRlJBTUVfUkVHRVhQLnRlc3QobG9jYWxTdGFja1tsb2NhbFN0YWNrLmxlbmd0aCAtIDFdLmZ1bmN0aW9uIHx8ICcnKSkgewogICAgICBsb2NhbFN0YWNrLnBvcCgpOwogICAgfQogIH0KCiAgcmV0dXJuIGxvY2FsU3RhY2suc2xpY2UoMCwgU1RBQ0tUUkFDRV9GUkFNRV9MSU1JVCkubWFwKGZyYW1lID0+ICh7CiAgICAuLi5mcmFtZSwKICAgIGZpbGVuYW1lOiBmcmFtZS5maWxlbmFtZSB8fCBsb2NhbFN0YWNrW2xvY2FsU3RhY2subGVuZ3RoIC0gMV0uZmlsZW5hbWUsCiAgICBmdW5jdGlvbjogZnJhbWUuZnVuY3Rpb24gfHwgJz8nLAogIH0pKTsKfQoKY29uc3QgZGVmYXVsdEZ1bmN0aW9uTmFtZSA9ICc8YW5vbnltb3VzPic7CgovKioKICogU2FmZWx5IGV4dHJhY3QgZnVuY3Rpb24gbmFtZSBmcm9tIGl0c2VsZgogKi8KZnVuY3Rpb24gZ2V0RnVuY3Rpb25OYW1lKGZuKSB7CiAgdHJ5IHsKICAgIGlmICghZm4gfHwgdHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7CiAgICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lOwogICAgfQogICAgcmV0dXJuIGZuLm5hbWUgfHwgZGVmYXVsdEZ1bmN0aW9uTmFtZTsKICB9IGNhdGNoIChlKSB7CiAgICAvLyBKdXN0IGFjY2Vzc2luZyBjdXN0b20gcHJvcHMgaW4gc29tZSBTZWxlbml1bSBlbnZpcm9ubWVudHMKICAgIC8vIGNhbiBjYXVzZSBhICJQZXJtaXNzaW9uIGRlbmllZCIgZXhjZXB0aW9uIChzZWUgcmF2ZW4tanMjNDk1KS4KICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lOwogIH0KfQoKLyoqCiAqIFVVSUQ0IGdlbmVyYXRvcgogKgogKiBAcmV0dXJucyBzdHJpbmcgR2VuZXJhdGVkIFVVSUQ0LgogKi8KZnVuY3Rpb24gdXVpZDQoKSB7CiAgY29uc3QgZ2JsID0gR0xPQkFMX09CSiA7CiAgY29uc3QgY3J5cHRvID0gZ2JsLmNyeXB0byB8fCBnYmwubXNDcnlwdG87CgogIGxldCBnZXRSYW5kb21CeXRlID0gKCkgPT4gTWF0aC5yYW5kb20oKSAqIDE2OwogIHRyeSB7CiAgICBpZiAoY3J5cHRvICYmIGNyeXB0by5yYW5kb21VVUlEKSB7CiAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpLnJlcGxhY2UoLy0vZywgJycpOwogICAgfQogICAgaWYgKGNyeXB0byAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7CiAgICAgIGdldFJhbmRvbUJ5dGUgPSAoKSA9PiB7CiAgICAgICAgLy8gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyBtaWdodCByZXR1cm4gdW5kZWZpbmVkIGluc3RlYWQgb2YgdGhlIHR5cGVkIGFycmF5CiAgICAgICAgLy8gaW4gb2xkIENocm9taXVtIHZlcnNpb25zIChlLmcuIDIzLjAuMTIzNS4wICgxNTE0MjIpKQogICAgICAgIC8vIEhvd2V2ZXIsIGB0eXBlZEFycmF5YCBpcyBzdGlsbCBmaWxsZWQgaW4tcGxhY2UuCiAgICAgICAgLy8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3J5cHRvL2dldFJhbmRvbVZhbHVlcyN0eXBlZGFycmF5CiAgICAgICAgY29uc3QgdHlwZWRBcnJheSA9IG5ldyBVaW50OEFycmF5KDEpOwogICAgICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXModHlwZWRBcnJheSk7CiAgICAgICAgcmV0dXJuIHR5cGVkQXJyYXlbMF07CiAgICAgIH07CiAgICB9CiAgfSBjYXRjaCAoXykgewogICAgLy8gc29tZSBydW50aW1lcyBjYW4gY3Jhc2ggaW52b2tpbmcgY3J5cHRvCiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy84OTM1CiAgfQoKICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTAzNC9ob3ctdG8tY3JlYXRlLWEtZ3VpZC11dWlkLWluLWphdmFzY3JpcHQvMjExNzUyMyMyMTE3NTIzCiAgLy8gQ29uY2F0ZW5hdGluZyB0aGUgZm9sbG93aW5nIG51bWJlcnMgYXMgc3RyaW5ncyByZXN1bHRzIGluICcxMDAwMDAwMDEwMDA0MDAwODAwMDEwMDAwMDAwMDAwMCcKICByZXR1cm4gKChbMWU3XSApICsgMWUzICsgNGUzICsgOGUzICsgMWUxMSkucmVwbGFjZSgvWzAxOF0vZywgYyA9PgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2UKICAgICgoYyApIF4gKChnZXRSYW5kb21CeXRlKCkgJiAxNSkgPj4gKChjICkgLyA0KSkpLnRvU3RyaW5nKDE2KSwKICApOwp9CgovKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi8KLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqLwoKLyoqCiAqIEhlbHBlciB0byBkZWN5Y2xlIGpzb24gb2JqZWN0cwogKi8KZnVuY3Rpb24gbWVtb0J1aWxkZXIoKSB7CiAgY29uc3QgaGFzV2Vha1NldCA9IHR5cGVvZiBXZWFrU2V0ID09PSAnZnVuY3Rpb24nOwogIGNvbnN0IGlubmVyID0gaGFzV2Vha1NldCA/IG5ldyBXZWFrU2V0KCkgOiBbXTsKICBmdW5jdGlvbiBtZW1vaXplKG9iaikgewogICAgaWYgKGhhc1dlYWtTZXQpIHsKICAgICAgaWYgKGlubmVyLmhhcyhvYmopKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgaW5uZXIuYWRkKG9iaik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLWZvci1vZgogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbm5lci5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCB2YWx1ZSA9IGlubmVyW2ldOwogICAgICBpZiAodmFsdWUgPT09IG9iaikgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICBpbm5lci5wdXNoKG9iaik7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBmdW5jdGlvbiB1bm1lbW9pemUob2JqKSB7CiAgICBpZiAoaGFzV2Vha1NldCkgewogICAgICBpbm5lci5kZWxldGUob2JqKTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5uZXIubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoaW5uZXJbaV0gPT09IG9iaikgewogICAgICAgICAgaW5uZXIuc3BsaWNlKGksIDEpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIHJldHVybiBbbWVtb2l6ZSwgdW5tZW1vaXplXTsKfQoKLyoqCiAqIFJlY3Vyc2l2ZWx5IG5vcm1hbGl6ZXMgdGhlIGdpdmVuIG9iamVjdC4KICoKICogLSBDcmVhdGVzIGEgY29weSB0byBwcmV2ZW50IG9yaWdpbmFsIGlucHV0IG11dGF0aW9uCiAqIC0gU2tpcHMgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcwogKiAtIFdoZW4gc3RyaW5naWZ5aW5nLCBjYWxscyBgdG9KU09OYCBpZiBpbXBsZW1lbnRlZAogKiAtIFJlbW92ZXMgY2lyY3VsYXIgcmVmZXJlbmNlcwogKiAtIFRyYW5zbGF0ZXMgbm9uLXNlcmlhbGl6YWJsZSB2YWx1ZXMgKGB1bmRlZmluZWRgL2BOYU5gL2Z1bmN0aW9ucykgdG8gc2VyaWFsaXphYmxlIGZvcm1hdAogKiAtIFRyYW5zbGF0ZXMga25vd24gZ2xvYmFsIG9iamVjdHMvY2xhc3NlcyB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbnMKICogLSBUYWtlcyBjYXJlIG9mIGBFcnJvcmAgb2JqZWN0IHNlcmlhbGl6YXRpb24KICogLSBPcHRpb25hbGx5IGxpbWl0cyBkZXB0aCBvZiBmaW5hbCBvdXRwdXQKICogLSBPcHRpb25hbGx5IGxpbWl0cyBudW1iZXIgb2YgcHJvcGVydGllcy9lbGVtZW50cyBpbmNsdWRlZCBpbiBhbnkgc2luZ2xlIG9iamVjdC9hcnJheQogKgogKiBAcGFyYW0gaW5wdXQgVGhlIG9iamVjdCB0byBiZSBub3JtYWxpemVkLgogKiBAcGFyYW0gZGVwdGggVGhlIG1heCBkZXB0aCB0byB3aGljaCB0byBub3JtYWxpemUgdGhlIG9iamVjdC4gKEFueXRoaW5nIGRlZXBlciBzdHJpbmdpZmllZCB3aG9sZS4pCiAqIEBwYXJhbSBtYXhQcm9wZXJ0aWVzIFRoZSBtYXggbnVtYmVyIG9mIGVsZW1lbnRzIG9yIHByb3BlcnRpZXMgdG8gYmUgaW5jbHVkZWQgaW4gYW55IHNpbmdsZSBhcnJheSBvcgogKiBvYmplY3QgaW4gdGhlIG5vcm1hbGxpemVkIG91dHB1dC4KICogQHJldHVybnMgQSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhlIG9iamVjdCwgb3IgYCIqKm5vbi1zZXJpYWxpemFibGUqKiJgIGlmIGFueSBlcnJvcnMgYXJlIHRocm93biBkdXJpbmcgbm9ybWFsaXphdGlvbi4KICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55CmZ1bmN0aW9uIG5vcm1hbGl6ZShpbnB1dCwgZGVwdGggPSAxMDAsIG1heFByb3BlcnRpZXMgPSArSW5maW5pdHkpIHsKICB0cnkgewogICAgLy8gc2luY2Ugd2UncmUgYXQgdGhlIG91dGVybW9zdCBsZXZlbCwgd2UgZG9uJ3QgcHJvdmlkZSBhIGtleQogICAgcmV0dXJuIHZpc2l0KCcnLCBpbnB1dCwgZGVwdGgsIG1heFByb3BlcnRpZXMpOwogIH0gY2F0Y2ggKGVycikgewogICAgcmV0dXJuIHsgRVJST1I6IGAqKm5vbi1zZXJpYWxpemFibGUqKiAoJHtlcnJ9KWAgfTsKICB9Cn0KCi8qKgogKiBWaXNpdHMgYSBub2RlIHRvIHBlcmZvcm0gbm9ybWFsaXphdGlvbiBvbiBpdAogKgogKiBAcGFyYW0ga2V5IFRoZSBrZXkgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gbm9kZQogKiBAcGFyYW0gdmFsdWUgVGhlIG5vZGUgdG8gYmUgdmlzaXRlZAogKiBAcGFyYW0gZGVwdGggT3B0aW9uYWwgbnVtYmVyIGluZGljYXRpbmcgdGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoCiAqIEBwYXJhbSBtYXhQcm9wZXJ0aWVzIE9wdGlvbmFsIG1heGltdW0gbnVtYmVyIG9mIHByb3BlcnRpZXMvZWxlbWVudHMgaW5jbHVkZWQgaW4gYW55IHNpbmdsZSBvYmplY3QvYXJyYXkKICogQHBhcmFtIG1lbW8gT3B0aW9uYWwgTWVtbyBjbGFzcyBoYW5kbGluZyBkZWN5Y2xpbmcKICovCmZ1bmN0aW9uIHZpc2l0KAogIGtleSwKICB2YWx1ZSwKICBkZXB0aCA9ICtJbmZpbml0eSwKICBtYXhQcm9wZXJ0aWVzID0gK0luZmluaXR5LAogIG1lbW8gPSBtZW1vQnVpbGRlcigpLAopIHsKICBjb25zdCBbbWVtb2l6ZSwgdW5tZW1vaXplXSA9IG1lbW87CgogIC8vIEdldCB0aGUgc2ltcGxlIGNhc2VzIG91dCBvZiB0aGUgd2F5IGZpcnN0CiAgaWYgKAogICAgdmFsdWUgPT0gbnVsbCB8fCAvLyB0aGlzIG1hdGNoZXMgbnVsbCBhbmQgdW5kZWZpbmVkIC0+IGVxZXEgbm90IGVxZXFlcQogICAgKFsnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnc3RyaW5nJ10uaW5jbHVkZXModHlwZW9mIHZhbHVlKSAmJiAhaXNOYU4kMSh2YWx1ZSkpCiAgKSB7CiAgICByZXR1cm4gdmFsdWUgOwogIH0KCiAgY29uc3Qgc3RyaW5naWZpZWQgPSBzdHJpbmdpZnlWYWx1ZShrZXksIHZhbHVlKTsKCiAgLy8gQW55dGhpbmcgd2UgY291bGQgcG90ZW50aWFsbHkgZGlnIGludG8gbW9yZSAob2JqZWN0cyBvciBhcnJheXMpIHdpbGwgaGF2ZSBjb21lIGJhY2sgYXMgYCJbb2JqZWN0IFhYWFhdImAuCiAgLy8gRXZlcnl0aGluZyBlbHNlIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gc2VyaWFsaXplZCwgc28gaWYgd2UgZG9uJ3Qgc2VlIHRoYXQgcGF0dGVybiwgd2UncmUgZG9uZS4KICBpZiAoIXN0cmluZ2lmaWVkLnN0YXJ0c1dpdGgoJ1tvYmplY3QgJykpIHsKICAgIHJldHVybiBzdHJpbmdpZmllZDsKICB9CgogIC8vIEZyb20gaGVyZSBvbiwgd2UgY2FuIGFzc2VydCB0aGF0IGB2YWx1ZWAgaXMgZWl0aGVyIGFuIG9iamVjdCBvciBhbiBhcnJheS4KCiAgLy8gRG8gbm90IG5vcm1hbGl6ZSBvYmplY3RzIHRoYXQgd2Uga25vdyBoYXZlIGFscmVhZHkgYmVlbiBub3JtYWxpemVkLiBBcyBhIGdlbmVyYWwgcnVsZSwgdGhlCiAgLy8gIl9fc2VudHJ5X3NraXBfbm9ybWFsaXphdGlvbl9fIiBwcm9wZXJ0eSBzaG91bGQgb25seSBiZSB1c2VkIHNwYXJpbmdseSBhbmQgb25seSBzaG91bGQgb25seSBiZSBzZXQgb24gb2JqZWN0cyB0aGF0CiAgLy8gaGF2ZSBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZC4KICBpZiAoKHZhbHVlIClbJ19fc2VudHJ5X3NraXBfbm9ybWFsaXphdGlvbl9fJ10pIHsKICAgIHJldHVybiB2YWx1ZSA7CiAgfQoKICAvLyBXZSBjYW4gc2V0IGBfX3NlbnRyeV9vdmVycmlkZV9ub3JtYWxpemF0aW9uX2RlcHRoX19gIG9uIGFuIG9iamVjdCB0byBlbnN1cmUgdGhhdCBmcm9tIHRoZXJlCiAgLy8gV2Uga2VlcCBhIGNlcnRhaW4gYW1vdW50IG9mIGRlcHRoLgogIC8vIFRoaXMgc2hvdWxkIGJlIHVzZWQgc3BhcmluZ2x5LCBlLmcuIHdlIHVzZSBpdCBmb3IgdGhlIHJlZHV4IGludGVncmF0aW9uIHRvIGVuc3VyZSB3ZSBnZXQgYSBjZXJ0YWluIGFtb3VudCBvZiBzdGF0ZS4KICBjb25zdCByZW1haW5pbmdEZXB0aCA9CiAgICB0eXBlb2YgKHZhbHVlIClbJ19fc2VudHJ5X292ZXJyaWRlX25vcm1hbGl6YXRpb25fZGVwdGhfXyddID09PSAnbnVtYmVyJwogICAgICA/ICgodmFsdWUgKVsnX19zZW50cnlfb3ZlcnJpZGVfbm9ybWFsaXphdGlvbl9kZXB0aF9fJ10gKQogICAgICA6IGRlcHRoOwoKICAvLyBXZSdyZSBhbHNvIGRvbmUgaWYgd2UndmUgcmVhY2hlZCB0aGUgbWF4IGRlcHRoCiAgaWYgKHJlbWFpbmluZ0RlcHRoID09PSAwKSB7CiAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgYHNlcmlhbGl6ZWRgIGlzIGEgc3RyaW5nIG9mIHRoZSBmb3JtIGAiW29iamVjdCBYWFhYXSJgLiBDbGVhbiBpdCB1cCBzbyBpdCdzIGp1c3QgYCJbWFhYWF0iYC4KICAgIHJldHVybiBzdHJpbmdpZmllZC5yZXBsYWNlKCdvYmplY3QgJywgJycpOwogIH0KCiAgLy8gSWYgd2UndmUgYWxyZWFkeSB2aXNpdGVkIHRoaXMgYnJhbmNoLCBiYWlsIG91dCwgYXMgaXQncyBjaXJjdWxhciByZWZlcmVuY2UuIElmIG5vdCwgbm90ZSB0aGF0IHdlJ3JlIHNlZWluZyBpdCBub3cuCiAgaWYgKG1lbW9pemUodmFsdWUpKSB7CiAgICByZXR1cm4gJ1tDaXJjdWxhciB+XSc7CiAgfQoKICAvLyBJZiB0aGUgdmFsdWUgaGFzIGEgYHRvSlNPTmAgbWV0aG9kLCB3ZSBjYWxsIGl0IHRvIGV4dHJhY3QgbW9yZSBpbmZvcm1hdGlvbgogIGNvbnN0IHZhbHVlV2l0aFRvSlNPTiA9IHZhbHVlIDsKICBpZiAodmFsdWVXaXRoVG9KU09OICYmIHR5cGVvZiB2YWx1ZVdpdGhUb0pTT04udG9KU09OID09PSAnZnVuY3Rpb24nKSB7CiAgICB0cnkgewogICAgICBjb25zdCBqc29uVmFsdWUgPSB2YWx1ZVdpdGhUb0pTT04udG9KU09OKCk7CiAgICAgIC8vIFdlIG5lZWQgdG8gbm9ybWFsaXplIHRoZSByZXR1cm4gdmFsdWUgb2YgYC50b0pTT04oKWAgaW4gY2FzZSBpdCBoYXMgY2lyY3VsYXIgcmVmZXJlbmNlcwogICAgICByZXR1cm4gdmlzaXQoJycsIGpzb25WYWx1ZSwgcmVtYWluaW5nRGVwdGggLSAxLCBtYXhQcm9wZXJ0aWVzLCBtZW1vKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICAvLyBwYXNzIChUaGUgYnVpbHQtaW4gYHRvSlNPTmAgZmFpbGVkLCBidXQgd2UgY2FuIHN0aWxsIHRyeSB0byBkbyBpdCBvdXJzZWx2ZXMpCiAgICB9CiAgfQoKICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgd2UgZWl0aGVyIGhhdmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5LCB3ZSBoYXZlbid0IHNlZW4gaXQgYmVmb3JlLCBhbmQgd2UncmUgZ29pbmcgdG8gcmVjdXJzZQogIC8vIGJlY2F1c2Ugd2UgaGF2ZW4ndCB5ZXQgcmVhY2hlZCB0aGUgbWF4IGRlcHRoLiBDcmVhdGUgYW4gYWNjdW11bGF0b3IgdG8gaG9sZCB0aGUgcmVzdWx0cyBvZiB2aXNpdGluZyBlYWNoCiAgLy8gcHJvcGVydHkvZW50cnksIGFuZCBrZWVwIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgaXRlbXMgd2UgYWRkIHRvIGl0LgogIGNvbnN0IG5vcm1hbGl6ZWQgPSAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbXSA6IHt9KSA7CiAgbGV0IG51bUFkZGVkID0gMDsKCiAgLy8gQmVmb3JlIHdlIGJlZ2luLCBjb252ZXJ0YEVycm9yYCBhbmRgRXZlbnRgIGluc3RhbmNlcyBpbnRvIHBsYWluIG9iamVjdHMsIHNpbmNlIHNvbWUgb2YgZWFjaCBvZiB0aGVpciByZWxldmFudAogIC8vIHByb3BlcnRpZXMgYXJlIG5vbi1lbnVtZXJhYmxlIGFuZCBvdGhlcndpc2Ugd291bGQgZ2V0IG1pc3NlZC4KICBjb25zdCB2aXNpdGFibGUgPSBjb252ZXJ0VG9QbGFpbk9iamVjdCh2YWx1ZSApOwoKICBmb3IgKGNvbnN0IHZpc2l0S2V5IGluIHZpc2l0YWJsZSkgewogICAgLy8gQXZvaWQgaXRlcmF0aW5nIG92ZXIgZmllbGRzIGluIHRoZSBwcm90b3R5cGUgaWYgdGhleSd2ZSBzb21laG93IGJlZW4gZXhwb3NlZCB0byBlbnVtZXJhdGlvbi4KICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZpc2l0YWJsZSwgdmlzaXRLZXkpKSB7CiAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIGlmIChudW1BZGRlZCA+PSBtYXhQcm9wZXJ0aWVzKSB7CiAgICAgIG5vcm1hbGl6ZWRbdmlzaXRLZXldID0gJ1tNYXhQcm9wZXJ0aWVzIH5dJzsKICAgICAgYnJlYWs7CiAgICB9CgogICAgLy8gUmVjdXJzaXZlbHkgdmlzaXQgYWxsIHRoZSBjaGlsZCBub2RlcwogICAgY29uc3QgdmlzaXRWYWx1ZSA9IHZpc2l0YWJsZVt2aXNpdEtleV07CiAgICBub3JtYWxpemVkW3Zpc2l0S2V5XSA9IHZpc2l0KHZpc2l0S2V5LCB2aXNpdFZhbHVlLCByZW1haW5pbmdEZXB0aCAtIDEsIG1heFByb3BlcnRpZXMsIG1lbW8pOwoKICAgIG51bUFkZGVkKys7CiAgfQoKICAvLyBPbmNlIHdlJ3ZlIHZpc2l0ZWQgYWxsIHRoZSBicmFuY2hlcywgcmVtb3ZlIHRoZSBwYXJlbnQgZnJvbSBtZW1vIHN0b3JhZ2UKICB1bm1lbW9pemUodmFsdWUpOwoKICAvLyBSZXR1cm4gYWNjdW11bGF0ZWQgdmFsdWVzCiAgcmV0dXJuIG5vcm1hbGl6ZWQ7Cn0KCi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi8KLyoqCiAqIFN0cmluZ2lmeSB0aGUgZ2l2ZW4gdmFsdWUuIEhhbmRsZXMgdmFyaW91cyBrbm93biBzcGVjaWFsIHZhbHVlcyBhbmQgdHlwZXMuCiAqCiAqIE5vdCBtZWFudCB0byBiZSB1c2VkIG9uIHNpbXBsZSBwcmltaXRpdmVzIHdoaWNoIGFscmVhZHkgaGF2ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiwgYXMgaXQgd2lsbCwgZm9yIGV4YW1wbGUsIHR1cm4KICogdGhlIG51bWJlciAxMjMxIGludG8gIltPYmplY3QgTnVtYmVyXSIsIG5vciBvbiBgbnVsbGAsIGFzIGl0IHdpbGwgdGhyb3cuCiAqCiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gc3RyaW5naWZ5CiAqIEByZXR1cm5zIEEgc3RyaW5naWZpZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIHZhbHVlCiAqLwpmdW5jdGlvbiBzdHJpbmdpZnlWYWx1ZSgKICBrZXksCiAgLy8gdGhpcyB0eXBlIGlzIGEgdGlueSBiaXQgb2YgYSBjaGVhdCwgc2luY2UgdGhpcyBmdW5jdGlvbiBkb2VzIGhhbmRsZSBOYU4gKHdoaWNoIGlzIHRlY2huaWNhbGx5IGEgbnVtYmVyKSwgYnV0IGZvcgogIC8vIG91ciBpbnRlcm5hbCB1c2UsIGl0J2xsIGRvCiAgdmFsdWUsCikgewogIHRyeSB7CiAgICBpZiAoa2V5ID09PSAnZG9tYWluJyAmJiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICh2YWx1ZSApLl9ldmVudHMpIHsKICAgICAgcmV0dXJuICdbRG9tYWluXSc7CiAgICB9CgogICAgaWYgKGtleSA9PT0gJ2RvbWFpbkVtaXR0ZXInKSB7CiAgICAgIHJldHVybiAnW0RvbWFpbkVtaXR0ZXJdJzsKICAgIH0KCiAgICAvLyBJdCdzIHNhZmUgdG8gdXNlIGBnbG9iYWxgLCBgd2luZG93YCwgYW5kIGBkb2N1bWVudGAgaGVyZSBpbiB0aGlzIG1hbm5lciwgYXMgd2UgYXJlIGFzc2VydGluZyB1c2luZyBgdHlwZW9mYCBmaXJzdAogICAgLy8gd2hpY2ggd29uJ3QgdGhyb3cgaWYgdGhleSBhcmUgbm90IHByZXNlbnQuCgogICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlID09PSBnbG9iYWwpIHsKICAgICAgcmV0dXJuICdbR2xvYmFsXSc7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscwogICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlID09PSB3aW5kb3cpIHsKICAgICAgcmV0dXJuICdbV2luZG93XSc7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscwogICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgPT09IGRvY3VtZW50KSB7CiAgICAgIHJldHVybiAnW0RvY3VtZW50XSc7CiAgICB9CgogICAgaWYgKGlzVnVlVmlld01vZGVsKHZhbHVlKSkgewogICAgICByZXR1cm4gJ1tWdWVWaWV3TW9kZWxdJzsKICAgIH0KCiAgICAvLyBSZWFjdCdzIFN5bnRoZXRpY0V2ZW50IHRoaW5neQogICAgaWYgKGlzU3ludGhldGljRXZlbnQodmFsdWUpKSB7CiAgICAgIHJldHVybiAnW1N5bnRoZXRpY0V2ZW50XSc7CiAgICB9CgogICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHZhbHVlKSB7CiAgICAgIHJldHVybiAnW05hTl0nOwogICAgfQoKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHsKICAgICAgcmV0dXJuIGBbRnVuY3Rpb246ICR7Z2V0RnVuY3Rpb25OYW1lKHZhbHVlKX1dYDsKICAgIH0KCiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykgewogICAgICByZXR1cm4gYFske1N0cmluZyh2YWx1ZSl9XWA7CiAgICB9CgogICAgLy8gc3RyaW5naWZpZWQgQmlnSW50cyBhcmUgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSByZWd1bGFyIG51bWJlcnMsIHNvIHdlIG5lZWQgdG8gbGFiZWwgdGhlbSB0byBhdm9pZCBjb25mdXNpb24KICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnKSB7CiAgICAgIHJldHVybiBgW0JpZ0ludDogJHtTdHJpbmcodmFsdWUpfV1gOwogICAgfQoKICAgIC8vIE5vdyB0aGF0IHdlJ3ZlIGtub2NrZWQgb3V0IGFsbCB0aGUgc3BlY2lhbCBjYXNlcyBhbmQgdGhlIHByaW1pdGl2ZXMsIGFsbCB3ZSBoYXZlIGxlZnQgYXJlIG9iamVjdHMuIFNpbXBseSBjYXN0aW5nCiAgICAvLyB0aGVtIHRvIHN0cmluZ3MgbWVhbnMgdGhhdCBpbnN0YW5jZXMgb2YgY2xhc3NlcyB3aGljaCBoYXZlbid0IGRlZmluZWQgdGhlaXIgYHRvU3RyaW5nVGFnYCB3aWxsIGp1c3QgY29tZSBvdXQgYXMKICAgIC8vIGAiW29iamVjdCBPYmplY3RdImAuIElmIHdlIGluc3RlYWQgbG9vayBhdCB0aGUgY29uc3RydWN0b3IncyBuYW1lICh3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MpLAogICAgLy8gd2UgY2FuIG1ha2Ugc3VyZSB0aGF0IG9ubHkgcGxhaW4gb2JqZWN0cyBjb21lIG91dCB0aGF0IHdheS4KICAgIGNvbnN0IG9iak5hbWUgPSBnZXRDb25zdHJ1Y3Rvck5hbWUodmFsdWUpOwoKICAgIC8vIEhhbmRsZSBIVE1MIEVsZW1lbnRzCiAgICBpZiAoL15IVE1MKFx3KilFbGVtZW50JC8udGVzdChvYmpOYW1lKSkgewogICAgICByZXR1cm4gYFtIVE1MRWxlbWVudDogJHtvYmpOYW1lfV1gOwogICAgfQoKICAgIHJldHVybiBgW29iamVjdCAke29iak5hbWV9XWA7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICByZXR1cm4gYCoqbm9uLXNlcmlhbGl6YWJsZSoqICgke2Vycn0pYDsKICB9Cn0KLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovCgpmdW5jdGlvbiBnZXRDb25zdHJ1Y3Rvck5hbWUodmFsdWUpIHsKICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpOwoKICByZXR1cm4gcHJvdG90eXBlID8gcHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWUgOiAnbnVsbCBwcm90b3R5cGUnOwp9CgovKioKICogTm9ybWFsaXplcyBVUkxzIGluIGV4Y2VwdGlvbnMgYW5kIHN0YWNrdHJhY2VzIHRvIGEgYmFzZSBwYXRoIHNvIFNlbnRyeSBjYW4gZmluZ2VycHJpbnQKICogYWNyb3NzIHBsYXRmb3JtcyBhbmQgd29ya2luZyBkaXJlY3RvcnkuCiAqCiAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0byBiZSBub3JtYWxpemVkLgogKiBAcGFyYW0gYmFzZVBhdGggVGhlIGFwcGxpY2F0aW9uIGJhc2UgcGF0aC4KICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgVVJMLgogKi8KZnVuY3Rpb24gbm9ybWFsaXplVXJsVG9CYXNlKHVybCwgYmFzZVBhdGgpIHsKICBjb25zdCBlc2NhcGVkQmFzZSA9IGJhc2VQYXRoCiAgICAvLyBCYWNrc2xhc2ggdG8gZm9yd2FyZAogICAgLnJlcGxhY2UoL1xcL2csICcvJykKICAgIC8vIEVzY2FwZSBSZWdFeHAgc3BlY2lhbCBjaGFyYWN0ZXJzCiAgICAucmVwbGFjZSgvW3xcXHt9KClbXF1eJCsqPy5dL2csICdcXCQmJyk7CgogIGxldCBuZXdVcmwgPSB1cmw7CiAgdHJ5IHsKICAgIG5ld1VybCA9IGRlY29kZVVSSSh1cmwpOwogIH0gY2F0Y2ggKF9PbykgewogICAgLy8gU29tZXRpbWUgdGhpcyBicmVha3MKICB9CiAgcmV0dXJuICgKICAgIG5ld1VybAogICAgICAucmVwbGFjZSgvXFwvZywgJy8nKQogICAgICAucmVwbGFjZSgvd2VicGFjazpcLz8vZywgJycpIC8vIFJlbW92ZSBpbnRlcm1lZGlhdGUgYmFzZSBwYXRoCiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc2VudHJ5LWludGVybmFsL3Nkay9uby1yZWdleHAtY29uc3RydWN0b3IKICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cChgKGZpbGU6Ly8pPy8qJHtlc2NhcGVkQmFzZX0vKmAsICdpZycpLCAnYXBwOi8vLycpCiAgKTsKfQoKLy8gU2xpZ2h0bHkgbW9kaWZpZWQgKG5vIElFOCBzdXBwb3J0LCBFUzYpIGFuZCB0cmFuc2NyaWJlZCB0byBUeXBlU2NyaXB0CgovLyBTcGxpdCBhIGZpbGVuYW1lIGludG8gW3Jvb3QsIGRpciwgYmFzZW5hbWUsIGV4dF0sIHVuaXggdmVyc2lvbgovLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLgpjb25zdCBzcGxpdFBhdGhSZSA9IC9eKFxTKzpcXHxcLz8pKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteL1xcXSs/fCkoXC5bXi4vXFxdKnwpKSg/OlsvXFxdKikkLzsKLyoqIEpTRG9jICovCmZ1bmN0aW9uIHNwbGl0UGF0aChmaWxlbmFtZSkgewogIC8vIFRydW5jYXRlIGZpbGVzIG5hbWVzIGdyZWF0ZXIgdGhhbiAxMDI0IGNoYXJhY3RlcnMgdG8gYXZvaWQgcmVnZXggZG9zCiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9wdWxsLzg3MzcjZGlzY3Vzc2lvbl9yMTI4NTcxOTE3MgogIGNvbnN0IHRydW5jYXRlZCA9IGZpbGVuYW1lLmxlbmd0aCA+IDEwMjQgPyBgPHRydW5jYXRlZD4ke2ZpbGVuYW1lLnNsaWNlKC0xMDI0KX1gIDogZmlsZW5hbWU7CiAgY29uc3QgcGFydHMgPSBzcGxpdFBhdGhSZS5leGVjKHRydW5jYXRlZCk7CiAgcmV0dXJuIHBhcnRzID8gcGFydHMuc2xpY2UoMSkgOiBbXTsKfQoKLyoqIEpTRG9jICovCmZ1bmN0aW9uIGRpcm5hbWUocGF0aCkgewogIGNvbnN0IHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKTsKICBjb25zdCByb290ID0gcmVzdWx0WzBdOwogIGxldCBkaXIgPSByZXN1bHRbMV07CgogIGlmICghcm9vdCAmJiAhZGlyKSB7CiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXIKICAgIHJldHVybiAnLic7CiAgfQoKICBpZiAoZGlyKSB7CiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaAogICAgZGlyID0gZGlyLnNsaWNlKDAsIGRpci5sZW5ndGggLSAxKTsKICB9CgogIHJldHVybiByb290ICsgZGlyOwp9CgovKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUgKi8KCi8qKiBTeW5jUHJvbWlzZSBpbnRlcm5hbCBzdGF0ZXMgKi8KdmFyIFN0YXRlczsgKGZ1bmN0aW9uIChTdGF0ZXMpIHsKICAvKiogUGVuZGluZyAqLwogIGNvbnN0IFBFTkRJTkcgPSAwOyBTdGF0ZXNbU3RhdGVzWyJQRU5ESU5HIl0gPSBQRU5ESU5HXSA9ICJQRU5ESU5HIjsKICAvKiogUmVzb2x2ZWQgLyBPSyAqLwogIGNvbnN0IFJFU09MVkVEID0gMTsgU3RhdGVzW1N0YXRlc1siUkVTT0xWRUQiXSA9IFJFU09MVkVEXSA9ICJSRVNPTFZFRCI7CiAgLyoqIFJlamVjdGVkIC8gRXJyb3IgKi8KICBjb25zdCBSRUpFQ1RFRCA9IDI7IFN0YXRlc1tTdGF0ZXNbIlJFSkVDVEVEIl0gPSBSRUpFQ1RFRF0gPSAiUkVKRUNURUQiOwp9KShTdGF0ZXMgfHwgKFN0YXRlcyA9IHt9KSk7CgovLyBPdmVybG9hZHMgc28gd2UgY2FuIGNhbGwgcmVzb2x2ZWRTeW5jUHJvbWlzZSB3aXRob3V0IGFyZ3VtZW50cyBhbmQgZ2VuZXJpYyBhcmd1bWVudAoKLyoqCiAqIENyZWF0ZXMgYSByZXNvbHZlZCBzeW5jIHByb21pc2UuCiAqCiAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gcmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRoCiAqIEByZXR1cm5zIHRoZSByZXNvbHZlZCBzeW5jIHByb21pc2UKICovCmZ1bmN0aW9uIHJlc29sdmVkU3luY1Byb21pc2UodmFsdWUpIHsKICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKHJlc29sdmUgPT4gewogICAgcmVzb2x2ZSh2YWx1ZSk7CiAgfSk7Cn0KCi8qKgogKiBDcmVhdGVzIGEgcmVqZWN0ZWQgc3luYyBwcm9taXNlLgogKgogKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIHJlamVjdCB0aGUgcHJvbWlzZSB3aXRoCiAqIEByZXR1cm5zIHRoZSByZWplY3RlZCBzeW5jIHByb21pc2UKICovCmZ1bmN0aW9uIHJlamVjdGVkU3luY1Byb21pc2UocmVhc29uKSB7CiAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7CiAgICByZWplY3QocmVhc29uKTsKICB9KTsKfQoKLyoqCiAqIFRoZW5hYmxlIGNsYXNzIHRoYXQgYmVoYXZlcyBsaWtlIGEgUHJvbWlzZSBhbmQgZm9sbG93cyBpdCdzIGludGVyZmFjZQogKiBidXQgaXMgbm90IGFzeW5jIGludGVybmFsbHkKICovCmNsYXNzIFN5bmNQcm9taXNlIHsKCiAgIGNvbnN0cnVjdG9yKAogICAgZXhlY3V0b3IsCiAgKSB7U3luY1Byb21pc2UucHJvdG90eXBlLl9faW5pdC5jYWxsKHRoaXMpO1N5bmNQcm9taXNlLnByb3RvdHlwZS5fX2luaXQyLmNhbGwodGhpcyk7U3luY1Byb21pc2UucHJvdG90eXBlLl9faW5pdDMuY2FsbCh0aGlzKTtTeW5jUHJvbWlzZS5wcm90b3R5cGUuX19pbml0NC5jYWxsKHRoaXMpOwogICAgdGhpcy5fc3RhdGUgPSBTdGF0ZXMuUEVORElORzsKICAgIHRoaXMuX2hhbmRsZXJzID0gW107CgogICAgdHJ5IHsKICAgICAgZXhlY3V0b3IodGhpcy5fcmVzb2x2ZSwgdGhpcy5fcmVqZWN0KTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgdGhpcy5fcmVqZWN0KGUpOwogICAgfQogIH0KCiAgLyoqIEpTRG9jICovCiAgIHRoZW4oCiAgICBvbmZ1bGZpbGxlZCwKICAgIG9ucmVqZWN0ZWQsCiAgKSB7CiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgdGhpcy5faGFuZGxlcnMucHVzaChbCiAgICAgICAgZmFsc2UsCiAgICAgICAgcmVzdWx0ID0+IHsKICAgICAgICAgIGlmICghb25mdWxmaWxsZWQpIHsKICAgICAgICAgICAgLy8gVE9ETzogwq9cXyjjg4QpXy/CrwogICAgICAgICAgICAvLyBUT0RPOiBGSVhNRQogICAgICAgICAgICByZXNvbHZlKHJlc3VsdCApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICByZXNvbHZlKG9uZnVsZmlsbGVkKHJlc3VsdCkpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICByZWFzb24gPT4gewogICAgICAgICAgaWYgKCFvbnJlamVjdGVkKSB7CiAgICAgICAgICAgIHJlamVjdChyZWFzb24pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICByZXNvbHZlKG9ucmVqZWN0ZWQocmVhc29uKSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICByZWplY3QoZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICBdKTsKICAgICAgdGhpcy5fZXhlY3V0ZUhhbmRsZXJzKCk7CiAgICB9KTsKICB9CgogIC8qKiBKU0RvYyAqLwogICBjYXRjaCgKICAgIG9ucmVqZWN0ZWQsCiAgKSB7CiAgICByZXR1cm4gdGhpcy50aGVuKHZhbCA9PiB2YWwsIG9ucmVqZWN0ZWQpOwogIH0KCiAgLyoqIEpTRG9jICovCiAgIGZpbmFsbHkob25maW5hbGx5KSB7CiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgbGV0IHZhbDsKICAgICAgbGV0IGlzUmVqZWN0ZWQ7CgogICAgICByZXR1cm4gdGhpcy50aGVuKAogICAgICAgIHZhbHVlID0+IHsKICAgICAgICAgIGlzUmVqZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgIHZhbCA9IHZhbHVlOwogICAgICAgICAgaWYgKG9uZmluYWxseSkgewogICAgICAgICAgICBvbmZpbmFsbHkoKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHJlYXNvbiA9PiB7CiAgICAgICAgICBpc1JlamVjdGVkID0gdHJ1ZTsKICAgICAgICAgIHZhbCA9IHJlYXNvbjsKICAgICAgICAgIGlmIChvbmZpbmFsbHkpIHsKICAgICAgICAgICAgb25maW5hbGx5KCk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgKS50aGVuKCgpID0+IHsKICAgICAgICBpZiAoaXNSZWplY3RlZCkgewogICAgICAgICAgcmVqZWN0KHZhbCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICByZXNvbHZlKHZhbCApOwogICAgICB9KTsKICAgIH0pOwogIH0KCiAgLyoqIEpTRG9jICovCiAgICBfX2luaXQoKSB7dGhpcy5fcmVzb2x2ZSA9ICh2YWx1ZSkgPT4gewogICAgdGhpcy5fc2V0UmVzdWx0KFN0YXRlcy5SRVNPTFZFRCwgdmFsdWUpOwogIH07fQoKICAvKiogSlNEb2MgKi8KICAgIF9faW5pdDIoKSB7dGhpcy5fcmVqZWN0ID0gKHJlYXNvbikgPT4gewogICAgdGhpcy5fc2V0UmVzdWx0KFN0YXRlcy5SRUpFQ1RFRCwgcmVhc29uKTsKICB9O30KCiAgLyoqIEpTRG9jICovCiAgICBfX2luaXQzKCkge3RoaXMuX3NldFJlc3VsdCA9IChzdGF0ZSwgdmFsdWUpID0+IHsKICAgIGlmICh0aGlzLl9zdGF0ZSAhPT0gU3RhdGVzLlBFTkRJTkcpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChpc1RoZW5hYmxlKHZhbHVlKSkgewogICAgICB2b2lkICh2YWx1ZSApLnRoZW4odGhpcy5fcmVzb2x2ZSwgdGhpcy5fcmVqZWN0KTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHRoaXMuX3N0YXRlID0gc3RhdGU7CiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlOwoKICAgIHRoaXMuX2V4ZWN1dGVIYW5kbGVycygpOwogIH07fQoKICAvKiogSlNEb2MgKi8KICAgIF9faW5pdDQoKSB7dGhpcy5fZXhlY3V0ZUhhbmRsZXJzID0gKCkgPT4gewogICAgaWYgKHRoaXMuX3N0YXRlID09PSBTdGF0ZXMuUEVORElORykgewogICAgICByZXR1cm47CiAgICB9CgogICAgY29uc3QgY2FjaGVkSGFuZGxlcnMgPSB0aGlzLl9oYW5kbGVycy5zbGljZSgpOwogICAgdGhpcy5faGFuZGxlcnMgPSBbXTsKCiAgICBjYWNoZWRIYW5kbGVycy5mb3JFYWNoKGhhbmRsZXIgPT4gewogICAgICBpZiAoaGFuZGxlclswXSkgewogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSBTdGF0ZXMuUkVTT0xWRUQpIHsKICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzCiAgICAgICAgaGFuZGxlclsxXSh0aGlzLl92YWx1ZSApOwogICAgICB9CgogICAgICBpZiAodGhpcy5fc3RhdGUgPT09IFN0YXRlcy5SRUpFQ1RFRCkgewogICAgICAgIGhhbmRsZXJbMl0odGhpcy5fdmFsdWUpOwogICAgICB9CgogICAgICBoYW5kbGVyWzBdID0gdHJ1ZTsKICAgIH0pOwogIH07fQp9CgovKioKICogQ3JlYXRlcyBhbiBuZXcgUHJvbWlzZUJ1ZmZlciBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIGxpbWl0CiAqIEBwYXJhbSBsaW1pdCBtYXggbnVtYmVyIG9mIHByb21pc2VzIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgYnVmZmVyCiAqLwpmdW5jdGlvbiBtYWtlUHJvbWlzZUJ1ZmZlcihsaW1pdCkgewogIGNvbnN0IGJ1ZmZlciA9IFtdOwoKICBmdW5jdGlvbiBpc1JlYWR5KCkgewogICAgcmV0dXJuIGxpbWl0ID09PSB1bmRlZmluZWQgfHwgYnVmZmVyLmxlbmd0aCA8IGxpbWl0OwogIH0KCiAgLyoqCiAgICogUmVtb3ZlIGEgcHJvbWlzZSBmcm9tIHRoZSBxdWV1ZS4KICAgKgogICAqIEBwYXJhbSB0YXNrIENhbiBiZSBhbnkgUHJvbWlzZUxpa2U8VD4KICAgKiBAcmV0dXJucyBSZW1vdmVkIHByb21pc2UuCiAgICovCiAgZnVuY3Rpb24gcmVtb3ZlKHRhc2spIHsKICAgIHJldHVybiBidWZmZXIuc3BsaWNlKGJ1ZmZlci5pbmRleE9mKHRhc2spLCAxKVswXTsKICB9CgogIC8qKgogICAqIEFkZCBhIHByb21pc2UgKHJlcHJlc2VudGluZyBhbiBpbi1mbGlnaHQgYWN0aW9uKSB0byB0aGUgcXVldWUsIGFuZCBzZXQgaXQgdG8gcmVtb3ZlIGl0c2VsZiBvbiBmdWxmaWxsbWVudC4KICAgKgogICAqIEBwYXJhbSB0YXNrUHJvZHVjZXIgQSBmdW5jdGlvbiBwcm9kdWNpbmcgYW55IFByb21pc2VMaWtlPFQ+OyBJbiBwcmV2aW91cyB2ZXJzaW9ucyB0aGlzIHVzZWQgdG8gYmUgYHRhc2s6CiAgICogICAgICAgIFByb21pc2VMaWtlPFQ+YCwgYnV0IHVuZGVyIHRoYXQgbW9kZWwsIFByb21pc2VzIHdlcmUgaW5zdGFudGx5IGNyZWF0ZWQgb24gdGhlIGNhbGwtc2l0ZSBhbmQgdGhlaXIgZXhlY3V0b3IKICAgKiAgICAgICAgZnVuY3Rpb25zIHRoZXJlZm9yZSByYW4gaW1tZWRpYXRlbHkuIFRodXMsIGV2ZW4gaWYgdGhlIGJ1ZmZlciB3YXMgZnVsbCwgdGhlIGFjdGlvbiBzdGlsbCBoYXBwZW5lZC4gQnkKICAgKiAgICAgICAgcmVxdWlyaW5nIHRoZSBwcm9taXNlIHRvIGJlIHdyYXBwZWQgaW4gYSBmdW5jdGlvbiwgd2UgY2FuIGRlZmVyIHByb21pc2UgY3JlYXRpb24gdW50aWwgYWZ0ZXIgdGhlIGJ1ZmZlcgogICAqICAgICAgICBsaW1pdCBjaGVjay4KICAgKiBAcmV0dXJucyBUaGUgb3JpZ2luYWwgcHJvbWlzZS4KICAgKi8KICBmdW5jdGlvbiBhZGQodGFza1Byb2R1Y2VyKSB7CiAgICBpZiAoIWlzUmVhZHkoKSkgewogICAgICByZXR1cm4gcmVqZWN0ZWRTeW5jUHJvbWlzZShuZXcgU2VudHJ5RXJyb3IoJ05vdCBhZGRpbmcgUHJvbWlzZSBiZWNhdXNlIGJ1ZmZlciBsaW1pdCB3YXMgcmVhY2hlZC4nKSk7CiAgICB9CgogICAgLy8gc3RhcnQgdGhlIHRhc2sgYW5kIGFkZCBpdHMgcHJvbWlzZSB0byB0aGUgcXVldWUKICAgIGNvbnN0IHRhc2sgPSB0YXNrUHJvZHVjZXIoKTsKICAgIGlmIChidWZmZXIuaW5kZXhPZih0YXNrKSA9PT0gLTEpIHsKICAgICAgYnVmZmVyLnB1c2godGFzayk7CiAgICB9CiAgICB2b2lkIHRhc2sKICAgICAgLnRoZW4oKCkgPT4gcmVtb3ZlKHRhc2spKQogICAgICAvLyBVc2UgYHRoZW4obnVsbCwgcmVqZWN0aW9uSGFuZGxlcilgIHJhdGhlciB0aGFuIGBjYXRjaChyZWplY3Rpb25IYW5kbGVyKWAgc28gdGhhdCB3ZSBjYW4gdXNlIGBQcm9taXNlTGlrZWAKICAgICAgLy8gcmF0aGVyIHRoYW4gYFByb21pc2VgLiBgUHJvbWlzZUxpa2VgIGRvZXNuJ3QgaGF2ZSBhIGAuY2F0Y2hgIG1ldGhvZCwgbWFraW5nIGl0cyBwb2x5ZmlsbCBzbWFsbGVyLiAoRVM1IGRpZG4ndAogICAgICAvLyBoYXZlIHByb21pc2VzLCBzbyBUUyBoYXMgdG8gcG9seWZpbGwgd2hlbiBkb3duLWNvbXBpbGluZy4pCiAgICAgIC50aGVuKG51bGwsICgpID0+CiAgICAgICAgcmVtb3ZlKHRhc2spLnRoZW4obnVsbCwgKCkgPT4gewogICAgICAgICAgLy8gV2UgaGF2ZSB0byBhZGQgYW5vdGhlciBjYXRjaCBoZXJlIGJlY2F1c2UgYHJlbW92ZSgpYCBzdGFydHMgYSBuZXcgcHJvbWlzZSBjaGFpbi4KICAgICAgICB9KSwKICAgICAgKTsKICAgIHJldHVybiB0YXNrOwogIH0KCiAgLyoqCiAgICogV2FpdCBmb3IgYWxsIHByb21pc2VzIGluIHRoZSBxdWV1ZSB0byByZXNvbHZlIG9yIGZvciB0aW1lb3V0IHRvIGV4cGlyZSwgd2hpY2hldmVyIGNvbWVzIGZpcnN0LgogICAqCiAgICogQHBhcmFtIHRpbWVvdXQgVGhlIHRpbWUsIGluIG1zLCBhZnRlciB3aGljaCB0byByZXNvbHZlIHRvIGBmYWxzZWAgaWYgdGhlIHF1ZXVlIGlzIHN0aWxsIG5vbi1lbXB0eS4gUGFzc2luZyBgMGAgKG9yCiAgICogbm90IHBhc3NpbmcgYW55dGhpbmcpIHdpbGwgbWFrZSB0aGUgcHJvbWlzZSB3YWl0IGFzIGxvbmcgYXMgaXQgdGFrZXMgZm9yIHRoZSBxdWV1ZSB0byBkcmFpbiBiZWZvcmUgcmVzb2x2aW5nIHRvCiAgICogYHRydWVgLgogICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCB3aWxsIHJlc29sdmUgdG8gYHRydWVgIGlmIHRoZSBxdWV1ZSBpcyBhbHJlYWR5IGVtcHR5IG9yIGRyYWlucyBiZWZvcmUgdGhlIHRpbWVvdXQsIGFuZAogICAqIGBmYWxzZWAgb3RoZXJ3aXNlCiAgICovCiAgZnVuY3Rpb24gZHJhaW4odGltZW91dCkgewogICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIGxldCBjb3VudGVyID0gYnVmZmVyLmxlbmd0aDsKCiAgICAgIGlmICghY291bnRlcikgewogICAgICAgIHJldHVybiByZXNvbHZlKHRydWUpOwogICAgICB9CgogICAgICAvLyB3YWl0IGZvciBgdGltZW91dGAgbXMgYW5kIHRoZW4gcmVzb2x2ZSB0byBgZmFsc2VgIChpZiBub3QgY2FuY2VsbGVkIGZpcnN0KQogICAgICBjb25zdCBjYXB0dXJlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICBpZiAodGltZW91dCAmJiB0aW1lb3V0ID4gMCkgewogICAgICAgICAgcmVzb2x2ZShmYWxzZSk7CiAgICAgICAgfQogICAgICB9LCB0aW1lb3V0KTsKCiAgICAgIC8vIGlmIGFsbCBwcm9taXNlcyByZXNvbHZlIGluIHRpbWUsIGNhbmNlbCB0aGUgdGltZXIgYW5kIHJlc29sdmUgdG8gYHRydWVgCiAgICAgIGJ1ZmZlci5mb3JFYWNoKGl0ZW0gPT4gewogICAgICAgIHZvaWQgcmVzb2x2ZWRTeW5jUHJvbWlzZShpdGVtKS50aGVuKCgpID0+IHsKICAgICAgICAgIGlmICghLS1jb3VudGVyKSB7CiAgICAgICAgICAgIGNsZWFyVGltZW91dChjYXB0dXJlZFNldFRpbWVvdXQpOwogICAgICAgICAgICByZXNvbHZlKHRydWUpOwogICAgICAgICAgfQogICAgICAgIH0sIHJlamVjdCk7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICByZXR1cm4gewogICAgJDogYnVmZmVyLAogICAgYWRkLAogICAgZHJhaW4sCiAgfTsKfQoKY29uc3QgT05FX1NFQ09ORF9JTl9NUyA9IDEwMDA7CgovKioKICogQSBwYXJ0aWFsIGRlZmluaXRpb24gb2YgdGhlIFtQZXJmb3JtYW5jZSBXZWIgQVBJXXtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUGVyZm9ybWFuY2V9CiAqIGZvciBhY2Nlc3NpbmcgYSBoaWdoLXJlc29sdXRpb24gbW9ub3RvbmljIGNsb2NrLgogKi8KCi8qKgogKiBSZXR1cm5zIGEgdGltZXN0YW1wIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2ggdXNpbmcgdGhlIERhdGUgQVBJLgogKgogKiBUT0RPKHY4KTogUmV0dXJuIHR5cGUgc2hvdWxkIGJlIHJvdW5kZWQuCiAqLwpmdW5jdGlvbiBkYXRlVGltZXN0YW1wSW5TZWNvbmRzKCkgewogIHJldHVybiBEYXRlLm5vdygpIC8gT05FX1NFQ09ORF9JTl9NUzsKfQoKLyoqCiAqIFJldHVybnMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIFBlcmZvcm1hbmNlIEFQSSBicm93c2VyIGltcGxlbWVudGF0aW9uLCBvciB1bmRlZmluZWQgZm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90CiAqIHN1cHBvcnQgdGhlIEFQSS4KICoKICogV3JhcHBpbmcgdGhlIG5hdGl2ZSBBUEkgd29ya3MgYXJvdW5kIGRpZmZlcmVuY2VzIGluIGJlaGF2aW9yIGZyb20gZGlmZmVyZW50IGJyb3dzZXJzLgogKi8KZnVuY3Rpb24gY3JlYXRlVW5peFRpbWVzdGFtcEluU2Vjb25kc0Z1bmMoKSB7CiAgY29uc3QgeyBwZXJmb3JtYW5jZSB9ID0gR0xPQkFMX09CSiA7CiAgaWYgKCFwZXJmb3JtYW5jZSB8fCAhcGVyZm9ybWFuY2Uubm93KSB7CiAgICByZXR1cm4gZGF0ZVRpbWVzdGFtcEluU2Vjb25kczsKICB9CgogIC8vIFNvbWUgYnJvd3NlciBhbmQgZW52aXJvbm1lbnRzIGRvbid0IGhhdmUgYSB0aW1lT3JpZ2luLCBzbyB3ZSBmYWxsYmFjayB0bwogIC8vIHVzaW5nIERhdGUubm93KCkgdG8gY29tcHV0ZSB0aGUgc3RhcnRpbmcgdGltZS4KICBjb25zdCBhcHByb3hTdGFydGluZ1RpbWVPcmlnaW4gPSBEYXRlLm5vdygpIC0gcGVyZm9ybWFuY2Uubm93KCk7CiAgY29uc3QgdGltZU9yaWdpbiA9IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gPT0gdW5kZWZpbmVkID8gYXBwcm94U3RhcnRpbmdUaW1lT3JpZ2luIDogcGVyZm9ybWFuY2UudGltZU9yaWdpbjsKCiAgLy8gcGVyZm9ybWFuY2Uubm93KCkgaXMgYSBtb25vdG9uaWMgY2xvY2ssIHdoaWNoIG1lYW5zIGl0IHN0YXJ0cyBhdCAwIHdoZW4gdGhlIHByb2Nlc3MgYmVnaW5zLiBUbyBnZXQgdGhlIGN1cnJlbnQKICAvLyB3YWxsIGNsb2NrIHRpbWUgKGFjdHVhbCBVTklYIHRpbWVzdGFtcCksIHdlIG5lZWQgdG8gYWRkIHRoZSBzdGFydGluZyB0aW1lIG9yaWdpbiBhbmQgdGhlIGN1cnJlbnQgdGltZSBlbGFwc2VkLgogIC8vCiAgLy8gVE9ETzogVGhpcyBkb2VzIG5vdCBhY2NvdW50IGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgbW9ub3RvbmljIGNsb2NrIHRoYXQgcG93ZXJzIHBlcmZvcm1hbmNlLm5vdygpIGRyaWZ0cyBmcm9tIHRoZQogIC8vIHdhbGwgY2xvY2sgdGltZSwgd2hpY2ggY2F1c2VzIHRoZSByZXR1cm5lZCB0aW1lc3RhbXAgdG8gYmUgaW5hY2N1cmF0ZS4gV2Ugc2hvdWxkIGludmVzdGlnYXRlIGhvdyB0byBkZXRlY3QgYW5kCiAgLy8gY29ycmVjdCBmb3IgdGhpcy4KICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1OTAKICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tZG4vY29udGVudC9pc3N1ZXMvNDcxMwogIC8vIFNlZTogaHR0cHM6Ly9kZXYudG8vbm9hbXIvd2hlbi1hLW1pbGxpc2Vjb25kLWlzLW5vdC1hLW1pbGxpc2Vjb25kLTNoNgogIHJldHVybiAoKSA9PiB7CiAgICByZXR1cm4gKHRpbWVPcmlnaW4gKyBwZXJmb3JtYW5jZS5ub3coKSkgLyBPTkVfU0VDT05EX0lOX01TOwogIH07Cn0KCi8qKgogKiBSZXR1cm5zIGEgdGltZXN0YW1wIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2ggdXNpbmcgZWl0aGVyIHRoZSBQZXJmb3JtYW5jZSBvciBEYXRlIEFQSXMsIGRlcGVuZGluZyBvbiB0aGUKICogYXZhaWxhYmlsaXR5IG9mIHRoZSBQZXJmb3JtYW5jZSBBUEkuCiAqCiAqIEJVRzogTm90ZSB0aGF0IGJlY2F1c2Ugb2YgaG93IGJyb3dzZXJzIGltcGxlbWVudCB0aGUgUGVyZm9ybWFuY2UgQVBJLCB0aGUgY2xvY2sgbWlnaHQgc3RvcCB3aGVuIHRoZSBjb21wdXRlciBpcwogKiBhc2xlZXAuIFRoaXMgY3JlYXRlcyBhIHNrZXcgYmV0d2VlbiBgZGF0ZVRpbWVzdGFtcEluU2Vjb25kc2AgYW5kIGB0aW1lc3RhbXBJblNlY29uZHNgLiBUaGUKICogc2tldyBjYW4gZ3JvdyB0byBhcmJpdHJhcnkgYW1vdW50cyBsaWtlIGRheXMsIHdlZWtzIG9yIG1vbnRocy4KICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1OTAuCiAqLwpjb25zdCB0aW1lc3RhbXBJblNlY29uZHMgPSBjcmVhdGVVbml4VGltZXN0YW1wSW5TZWNvbmRzRnVuYygpOwoKLyoqCiAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoLiBUaGlzIHZhbHVlIGlzIG9ubHkgdXNhYmxlIGluIGEgYnJvd3NlciwgYW5kIG9ubHkgd2hlbiB0aGUKICogcGVyZm9ybWFuY2UgQVBJIGlzIGF2YWlsYWJsZS4KICovCigoKSA9PiB7CiAgLy8gVW5mb3J0dW5hdGVseSBicm93c2VycyBtYXkgcmVwb3J0IGFuIGluYWNjdXJhdGUgdGltZSBvcmlnaW4gZGF0YSwgdGhyb3VnaCBlaXRoZXIgcGVyZm9ybWFuY2UudGltZU9yaWdpbiBvcgogIC8vIHBlcmZvcm1hbmNlLnRpbWluZy5uYXZpZ2F0aW9uU3RhcnQsIHdoaWNoIHJlc3VsdHMgaW4gcG9vciByZXN1bHRzIGluIHBlcmZvcm1hbmNlIGRhdGEuIFdlIG9ubHkgdHJlYXQgdGltZSBvcmlnaW4KICAvLyBkYXRhIGFzIHJlbGlhYmxlIGlmIHRoZXkgYXJlIHdpdGhpbiBhIHJlYXNvbmFibGUgdGhyZXNob2xkIG9mIHRoZSBjdXJyZW50IHRpbWUuCgogIGNvbnN0IHsgcGVyZm9ybWFuY2UgfSA9IEdMT0JBTF9PQkogOwogIGlmICghcGVyZm9ybWFuY2UgfHwgIXBlcmZvcm1hbmNlLm5vdykgewogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CgogIGNvbnN0IHRocmVzaG9sZCA9IDM2MDAgKiAxMDAwOwogIGNvbnN0IHBlcmZvcm1hbmNlTm93ID0gcGVyZm9ybWFuY2Uubm93KCk7CiAgY29uc3QgZGF0ZU5vdyA9IERhdGUubm93KCk7CgogIC8vIGlmIHRpbWVPcmlnaW4gaXNuJ3QgYXZhaWxhYmxlIHNldCBkZWx0YSB0byB0aHJlc2hvbGQgc28gaXQgaXNuJ3QgdXNlZAogIGNvbnN0IHRpbWVPcmlnaW5EZWx0YSA9IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4KICAgID8gTWF0aC5hYnMocGVyZm9ybWFuY2UudGltZU9yaWdpbiArIHBlcmZvcm1hbmNlTm93IC0gZGF0ZU5vdykKICAgIDogdGhyZXNob2xkOwogIGNvbnN0IHRpbWVPcmlnaW5Jc1JlbGlhYmxlID0gdGltZU9yaWdpbkRlbHRhIDwgdGhyZXNob2xkOwoKICAvLyBXaGlsZSBwZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0IGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgcGVyZm9ybWFuY2UudGltZU9yaWdpbiwgcGVyZm9ybWFuY2UudGltZU9yaWdpbgogIC8vIGlzIG5vdCBhcyB3aWRlbHkgc3VwcG9ydGVkLiBOYW1lbHksIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gaXMgdW5kZWZpbmVkIGluIFNhZmFyaSBhcyBvZiB3cml0aW5nLgogIC8vIEFsc28gYXMgb2Ygd3JpdGluZywgcGVyZm9ybWFuY2UudGltaW5nIGlzIG5vdCBhdmFpbGFibGUgaW4gV2ViIFdvcmtlcnMgaW4gbWFpbnN0cmVhbSBicm93c2Vycywgc28gaXQgaXMgbm90IGFsd2F5cwogIC8vIGEgdmFsaWQgZmFsbGJhY2suIEluIHRoZSBhYnNlbmNlIG9mIGFuIGluaXRpYWwgdGltZSBwcm92aWRlZCBieSB0aGUgYnJvd3NlciwgZmFsbGJhY2sgdG8gdGhlIGN1cnJlbnQgdGltZSBmcm9tIHRoZQogIC8vIERhdGUgQVBJLgogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIGNvbnN0IG5hdmlnYXRpb25TdGFydCA9IHBlcmZvcm1hbmNlLnRpbWluZyAmJiBwZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0OwogIGNvbnN0IGhhc05hdmlnYXRpb25TdGFydCA9IHR5cGVvZiBuYXZpZ2F0aW9uU3RhcnQgPT09ICdudW1iZXInOwogIC8vIGlmIG5hdmlnYXRpb25TdGFydCBpc24ndCBhdmFpbGFibGUgc2V0IGRlbHRhIHRvIHRocmVzaG9sZCBzbyBpdCBpc24ndCB1c2VkCiAgY29uc3QgbmF2aWdhdGlvblN0YXJ0RGVsdGEgPSBoYXNOYXZpZ2F0aW9uU3RhcnQgPyBNYXRoLmFicyhuYXZpZ2F0aW9uU3RhcnQgKyBwZXJmb3JtYW5jZU5vdyAtIGRhdGVOb3cpIDogdGhyZXNob2xkOwogIGNvbnN0IG5hdmlnYXRpb25TdGFydElzUmVsaWFibGUgPSBuYXZpZ2F0aW9uU3RhcnREZWx0YSA8IHRocmVzaG9sZDsKCiAgaWYgKHRpbWVPcmlnaW5Jc1JlbGlhYmxlIHx8IG5hdmlnYXRpb25TdGFydElzUmVsaWFibGUpIHsKICAgIC8vIFVzZSB0aGUgbW9yZSByZWxpYWJsZSB0aW1lIG9yaWdpbgogICAgaWYgKHRpbWVPcmlnaW5EZWx0YSA8PSBuYXZpZ2F0aW9uU3RhcnREZWx0YSkgewogICAgICByZXR1cm4gcGVyZm9ybWFuY2UudGltZU9yaWdpbjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuYXZpZ2F0aW9uU3RhcnQ7CiAgICB9CiAgfQogIHJldHVybiBkYXRlTm93Owp9KSgpOwoKLyoqCiAqIENyZWF0ZXMgYW4gZW52ZWxvcGUuCiAqIE1ha2Ugc3VyZSB0byBhbHdheXMgZXhwbGljaXRseSBwcm92aWRlIHRoZSBnZW5lcmljIHRvIHRoaXMgZnVuY3Rpb24KICogc28gdGhhdCB0aGUgZW52ZWxvcGUgdHlwZXMgcmVzb2x2ZSBjb3JyZWN0bHkuCiAqLwpmdW5jdGlvbiBjcmVhdGVFbnZlbG9wZShoZWFkZXJzLCBpdGVtcyA9IFtdKSB7CiAgcmV0dXJuIFtoZWFkZXJzLCBpdGVtc10gOwp9CgovKioKICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gbG9vcCB0aHJvdWdoIHRoZSBpdGVtcyBhbmQgaXRlbSB0eXBlcyBvZiBhbiBlbnZlbG9wZS4KICogKFRoaXMgZnVuY3Rpb24gd2FzIG1vc3RseSBjcmVhdGVkIGJlY2F1c2Ugd29ya2luZyB3aXRoIGVudmVsb3BlIHR5cGVzIGlzIHBhaW5mdWwgYXQgdGhlIG1vbWVudCkKICoKICogSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSwgdGhlIHJlc3Qgb2YgdGhlIGl0ZW1zIHdpbGwgYmUgc2tpcHBlZC4KICovCmZ1bmN0aW9uIGZvckVhY2hFbnZlbG9wZUl0ZW0oCiAgZW52ZWxvcGUsCiAgY2FsbGJhY2ssCikgewogIGNvbnN0IGVudmVsb3BlSXRlbXMgPSBlbnZlbG9wZVsxXTsKCiAgZm9yIChjb25zdCBlbnZlbG9wZUl0ZW0gb2YgZW52ZWxvcGVJdGVtcykgewogICAgY29uc3QgZW52ZWxvcGVJdGVtVHlwZSA9IGVudmVsb3BlSXRlbVswXS50eXBlOwogICAgY29uc3QgcmVzdWx0ID0gY2FsbGJhY2soZW52ZWxvcGVJdGVtLCBlbnZlbG9wZUl0ZW1UeXBlKTsKCiAgICBpZiAocmVzdWx0KSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KCiAgcmV0dXJuIGZhbHNlOwp9CgovKioKICogRW5jb2RlIGEgc3RyaW5nIHRvIFVURjguCiAqLwpmdW5jdGlvbiBlbmNvZGVVVEY4KGlucHV0LCB0ZXh0RW5jb2RlcikgewogIGNvbnN0IHV0ZjggPSB0ZXh0RW5jb2RlciB8fCBuZXcgVGV4dEVuY29kZXIoKTsKICByZXR1cm4gdXRmOC5lbmNvZGUoaW5wdXQpOwp9CgovKioKICogU2VyaWFsaXplcyBhbiBlbnZlbG9wZS4KICovCmZ1bmN0aW9uIHNlcmlhbGl6ZUVudmVsb3BlKGVudmVsb3BlLCB0ZXh0RW5jb2RlcikgewogIGNvbnN0IFtlbnZIZWFkZXJzLCBpdGVtc10gPSBlbnZlbG9wZTsKCiAgLy8gSW5pdGlhbGx5IHdlIGNvbnN0cnVjdCBvdXIgZW52ZWxvcGUgYXMgYSBzdHJpbmcgYW5kIG9ubHkgY29udmVydCB0byBiaW5hcnkgY2h1bmtzIGlmIHdlIGVuY291bnRlciBiaW5hcnkgZGF0YQogIGxldCBwYXJ0cyA9IEpTT04uc3RyaW5naWZ5KGVudkhlYWRlcnMpOwoKICBmdW5jdGlvbiBhcHBlbmQobmV4dCkgewogICAgaWYgKHR5cGVvZiBwYXJ0cyA9PT0gJ3N0cmluZycpIHsKICAgICAgcGFydHMgPSB0eXBlb2YgbmV4dCA9PT0gJ3N0cmluZycgPyBwYXJ0cyArIG5leHQgOiBbZW5jb2RlVVRGOChwYXJ0cywgdGV4dEVuY29kZXIpLCBuZXh0XTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnRzLnB1c2godHlwZW9mIG5leHQgPT09ICdzdHJpbmcnID8gZW5jb2RlVVRGOChuZXh0LCB0ZXh0RW5jb2RlcikgOiBuZXh0KTsKICAgIH0KICB9CgogIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykgewogICAgY29uc3QgW2l0ZW1IZWFkZXJzLCBwYXlsb2FkXSA9IGl0ZW07CgogICAgYXBwZW5kKGBcbiR7SlNPTi5zdHJpbmdpZnkoaXRlbUhlYWRlcnMpfVxuYCk7CgogICAgaWYgKHR5cGVvZiBwYXlsb2FkID09PSAnc3RyaW5nJyB8fCBwYXlsb2FkIGluc3RhbmNlb2YgVWludDhBcnJheSkgewogICAgICBhcHBlbmQocGF5bG9hZCk7CiAgICB9IGVsc2UgewogICAgICBsZXQgc3RyaW5naWZpZWRQYXlsb2FkOwogICAgICB0cnkgewogICAgICAgIHN0cmluZ2lmaWVkUGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgLy8gSW4gY2FzZSwgZGVzcGl0ZSBhbGwgb3VyIGVmZm9ydHMgdG8ga2VlcCBgcGF5bG9hZGAgY2lyY3VsYXItZGVwZW5kZW5jeS1mcmVlLCBgSlNPTi5zdHJpbmlmeSgpYCBzdGlsbAogICAgICAgIC8vIGZhaWxzLCB3ZSB0cnkgYWdhaW4gYWZ0ZXIgbm9ybWFsaXppbmcgaXQgYWdhaW4gd2l0aCBpbmZpbml0ZSBub3JtYWxpemF0aW9uIGRlcHRoLiBUaGlzIG9mIGNvdXJzZSBoYXMgYQogICAgICAgIC8vIHBlcmZvcm1hbmNlIGltcGFjdCBidXQgaW4gdGhpcyBjYXNlIGEgcGVyZm9ybWFuY2UgaGl0IGlzIGJldHRlciB0aGFuIHRocm93aW5nLgogICAgICAgIHN0cmluZ2lmaWVkUGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KG5vcm1hbGl6ZShwYXlsb2FkKSk7CiAgICAgIH0KICAgICAgYXBwZW5kKHN0cmluZ2lmaWVkUGF5bG9hZCk7CiAgICB9CiAgfQoKICByZXR1cm4gdHlwZW9mIHBhcnRzID09PSAnc3RyaW5nJyA/IHBhcnRzIDogY29uY2F0QnVmZmVycyhwYXJ0cyk7Cn0KCmZ1bmN0aW9uIGNvbmNhdEJ1ZmZlcnMoYnVmZmVycykgewogIGNvbnN0IHRvdGFsTGVuZ3RoID0gYnVmZmVycy5yZWR1Y2UoKGFjYywgYnVmKSA9PiBhY2MgKyBidWYubGVuZ3RoLCAwKTsKCiAgY29uc3QgbWVyZ2VkID0gbmV3IFVpbnQ4QXJyYXkodG90YWxMZW5ndGgpOwogIGxldCBvZmZzZXQgPSAwOwogIGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnMpIHsKICAgIG1lcmdlZC5zZXQoYnVmZmVyLCBvZmZzZXQpOwogICAgb2Zmc2V0ICs9IGJ1ZmZlci5sZW5ndGg7CiAgfQoKICByZXR1cm4gbWVyZ2VkOwp9Cgpjb25zdCBJVEVNX1RZUEVfVE9fREFUQV9DQVRFR09SWV9NQVAgPSB7CiAgc2Vzc2lvbjogJ3Nlc3Npb24nLAogIHNlc3Npb25zOiAnc2Vzc2lvbicsCiAgYXR0YWNobWVudDogJ2F0dGFjaG1lbnQnLAogIHRyYW5zYWN0aW9uOiAndHJhbnNhY3Rpb24nLAogIGV2ZW50OiAnZXJyb3InLAogIGNsaWVudF9yZXBvcnQ6ICdpbnRlcm5hbCcsCiAgdXNlcl9yZXBvcnQ6ICdkZWZhdWx0JywKICBwcm9maWxlOiAncHJvZmlsZScsCiAgcmVwbGF5X2V2ZW50OiAncmVwbGF5JywKICByZXBsYXlfcmVjb3JkaW5nOiAncmVwbGF5JywKICBjaGVja19pbjogJ21vbml0b3InLAogIGZlZWRiYWNrOiAnZmVlZGJhY2snLAogIHNwYW46ICdzcGFuJywKICAvLyBUT0RPOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgdW50aWwgd2UgaGF2ZSBhIHByb3BlciBkYXRhIGNhdGVnb3J5IGZvciBtZXRyaWNzCiAgc3RhdHNkOiAndW5rbm93bicsCn07CgovKioKICogTWFwcyB0aGUgdHlwZSBvZiBhbiBlbnZlbG9wZSBpdGVtIHRvIGEgZGF0YSBjYXRlZ29yeS4KICovCmZ1bmN0aW9uIGVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSh0eXBlKSB7CiAgcmV0dXJuIElURU1fVFlQRV9UT19EQVRBX0NBVEVHT1JZX01BUFt0eXBlXTsKfQoKLyoqIEV4dHJhY3RzIHRoZSBtaW5pbWFsIFNESyBpbmZvIGZyb20gZnJvbSB0aGUgbWV0YWRhdGEgb3IgYW4gZXZlbnRzICovCmZ1bmN0aW9uIGdldFNka01ldGFkYXRhRm9yRW52ZWxvcGVIZWFkZXIobWV0YWRhdGFPckV2ZW50KSB7CiAgaWYgKCFtZXRhZGF0YU9yRXZlbnQgfHwgIW1ldGFkYXRhT3JFdmVudC5zZGspIHsKICAgIHJldHVybjsKICB9CiAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uIH0gPSBtZXRhZGF0YU9yRXZlbnQuc2RrOwogIHJldHVybiB7IG5hbWUsIHZlcnNpb24gfTsKfQoKLyoqCiAqIENyZWF0ZXMgZXZlbnQgZW52ZWxvcGUgaGVhZGVycywgYmFzZWQgb24gZXZlbnQsIHNkayBpbmZvIGFuZCB0dW5uZWwKICogTm90ZTogVGhpcyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGZyb20gdGhlIGNvcmUgcGFja2FnZSB0byBtYWtlIGl0IGF2YWlsYWJsZSBpbiBSZXBsYXkKICovCmZ1bmN0aW9uIGNyZWF0ZUV2ZW50RW52ZWxvcGVIZWFkZXJzKAogIGV2ZW50LAogIHNka0luZm8sCiAgdHVubmVsLAogIGRzbiwKKSB7CiAgY29uc3QgZHluYW1pY1NhbXBsaW5nQ29udGV4dCA9IGV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YSAmJiBldmVudC5zZGtQcm9jZXNzaW5nTWV0YWRhdGEuZHluYW1pY1NhbXBsaW5nQ29udGV4dDsKICByZXR1cm4gewogICAgZXZlbnRfaWQ6IGV2ZW50LmV2ZW50X2lkICwKICAgIHNlbnRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwKICAgIC4uLihzZGtJbmZvICYmIHsgc2RrOiBzZGtJbmZvIH0pLAogICAgLi4uKCEhdHVubmVsICYmIGRzbiAmJiB7IGRzbjogZHNuVG9TdHJpbmcoZHNuKSB9KSwKICAgIC4uLihkeW5hbWljU2FtcGxpbmdDb250ZXh0ICYmIHsKICAgICAgdHJhY2U6IGRyb3BVbmRlZmluZWRLZXlzKHsgLi4uZHluYW1pY1NhbXBsaW5nQ29udGV4dCB9KSwKICAgIH0pLAogIH07Cn0KCi8vIEludGVudGlvbmFsbHkga2VlcGluZyB0aGUga2V5IGJyb2FkLCBhcyB3ZSBkb24ndCBrbm93IGZvciBzdXJlIHdoYXQgcmF0ZSBsaW1pdCBoZWFkZXJzIGdldCByZXR1cm5lZCBmcm9tIGJhY2tlbmQKCmNvbnN0IERFRkFVTFRfUkVUUllfQUZURVIgPSA2MCAqIDEwMDA7IC8vIDYwIHNlY29uZHMKCi8qKgogKiBFeHRyYWN0cyBSZXRyeS1BZnRlciB2YWx1ZSBmcm9tIHRoZSByZXF1ZXN0IGhlYWRlciBvciByZXR1cm5zIGRlZmF1bHQgdmFsdWUKICogQHBhcmFtIGhlYWRlciBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgJ1JldHJ5LUFmdGVyJyBoZWFkZXIKICogQHBhcmFtIG5vdyBjdXJyZW50IHVuaXggdGltZXN0YW1wCiAqCiAqLwpmdW5jdGlvbiBwYXJzZVJldHJ5QWZ0ZXJIZWFkZXIoaGVhZGVyLCBub3cgPSBEYXRlLm5vdygpKSB7CiAgY29uc3QgaGVhZGVyRGVsYXkgPSBwYXJzZUludChgJHtoZWFkZXJ9YCwgMTApOwogIGlmICghaXNOYU4oaGVhZGVyRGVsYXkpKSB7CiAgICByZXR1cm4gaGVhZGVyRGVsYXkgKiAxMDAwOwogIH0KCiAgY29uc3QgaGVhZGVyRGF0ZSA9IERhdGUucGFyc2UoYCR7aGVhZGVyfWApOwogIGlmICghaXNOYU4oaGVhZGVyRGF0ZSkpIHsKICAgIHJldHVybiBoZWFkZXJEYXRlIC0gbm93OwogIH0KCiAgcmV0dXJuIERFRkFVTFRfUkVUUllfQUZURVI7Cn0KCi8qKgogKiBHZXRzIHRoZSB0aW1lIHRoYXQgdGhlIGdpdmVuIGNhdGVnb3J5IGlzIGRpc2FibGVkIHVudGlsIGZvciByYXRlIGxpbWl0aW5nLgogKiBJbiBjYXNlIG5vIGNhdGVnb3J5LXNwZWNpZmljIGxpbWl0IGlzIHNldCBidXQgYSBnZW5lcmFsIHJhdGUgbGltaXQgYWNyb3NzIGFsbCBjYXRlZ29yaWVzIGlzIGFjdGl2ZSwKICogdGhhdCB0aW1lIGlzIHJldHVybmVkLgogKgogKiBAcmV0dXJuIHRoZSB0aW1lIGluIG1zIHRoYXQgdGhlIGNhdGVnb3J5IGlzIGRpc2FibGVkIHVudGlsIG9yIDAgaWYgdGhlcmUncyBubyBhY3RpdmUgcmF0ZSBsaW1pdC4KICovCmZ1bmN0aW9uIGRpc2FibGVkVW50aWwobGltaXRzLCBjYXRlZ29yeSkgewogIHJldHVybiBsaW1pdHNbY2F0ZWdvcnldIHx8IGxpbWl0cy5hbGwgfHwgMDsKfQoKLyoqCiAqIENoZWNrcyBpZiBhIGNhdGVnb3J5IGlzIHJhdGUgbGltaXRlZAogKi8KZnVuY3Rpb24gaXNSYXRlTGltaXRlZChsaW1pdHMsIGNhdGVnb3J5LCBub3cgPSBEYXRlLm5vdygpKSB7CiAgcmV0dXJuIGRpc2FibGVkVW50aWwobGltaXRzLCBjYXRlZ29yeSkgPiBub3c7Cn0KCi8qKgogKiBVcGRhdGUgcmF0ZWxpbWl0cyBmcm9tIGluY29taW5nIGhlYWRlcnMuCiAqCiAqIEByZXR1cm4gdGhlIHVwZGF0ZWQgUmF0ZUxpbWl0cyBvYmplY3QuCiAqLwpmdW5jdGlvbiB1cGRhdGVSYXRlTGltaXRzKAogIGxpbWl0cywKICB7IHN0YXR1c0NvZGUsIGhlYWRlcnMgfSwKICBub3cgPSBEYXRlLm5vdygpLAopIHsKICBjb25zdCB1cGRhdGVkUmF0ZUxpbWl0cyA9IHsKICAgIC4uLmxpbWl0cywKICB9OwoKICAvLyAiVGhlIG5hbWUgaXMgY2FzZS1pbnNlbnNpdGl2ZS4iCiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hlYWRlcnMvZ2V0CiAgY29uc3QgcmF0ZUxpbWl0SGVhZGVyID0gaGVhZGVycyAmJiBoZWFkZXJzWyd4LXNlbnRyeS1yYXRlLWxpbWl0cyddOwogIGNvbnN0IHJldHJ5QWZ0ZXJIZWFkZXIgPSBoZWFkZXJzICYmIGhlYWRlcnNbJ3JldHJ5LWFmdGVyJ107CgogIGlmIChyYXRlTGltaXRIZWFkZXIpIHsKICAgIC8qKgogICAgICogcmF0ZSBsaW1pdCBoZWFkZXJzIGFyZSBvZiB0aGUgZm9ybQogICAgICogICAgIDxoZWFkZXI+LDxoZWFkZXI+LC4uCiAgICAgKiB3aGVyZSBlYWNoIDxoZWFkZXI+IGlzIG9mIHRoZSBmb3JtCiAgICAgKiAgICAgPHJldHJ5X2FmdGVyPjogPGNhdGVnb3JpZXM+OiA8c2NvcGU+OiA8cmVhc29uX2NvZGU+CiAgICAgKiB3aGVyZQogICAgICogICAgIDxyZXRyeV9hZnRlcj4gaXMgYSBkZWxheSBpbiBzZWNvbmRzCiAgICAgKiAgICAgPGNhdGVnb3JpZXM+IGlzIHRoZSBldmVudCB0eXBlKHMpIChlcnJvciwgdHJhbnNhY3Rpb24sIGV0YykgYmVpbmcgcmF0ZSBsaW1pdGVkIGFuZCBpcyBvZiB0aGUgZm9ybQogICAgICogICAgICAgICA8Y2F0ZWdvcnk+OzxjYXRlZ29yeT47Li4uCiAgICAgKiAgICAgPHNjb3BlPiBpcyB3aGF0J3MgYmVpbmcgbGltaXRlZCAob3JnLCBwcm9qZWN0LCBvciBrZXkpIC0gaWdub3JlZCBieSBTREsKICAgICAqICAgICA8cmVhc29uX2NvZGU+IGlzIGFuIGFyYml0cmFyeSBzdHJpbmcgbGlrZSAib3JnX3F1b3RhIiAtIGlnbm9yZWQgYnkgU0RLCiAgICAgKi8KICAgIGZvciAoY29uc3QgbGltaXQgb2YgcmF0ZUxpbWl0SGVhZGVyLnRyaW0oKS5zcGxpdCgnLCcpKSB7CiAgICAgIGNvbnN0IFtyZXRyeUFmdGVyLCBjYXRlZ29yaWVzXSA9IGxpbWl0LnNwbGl0KCc6JywgMik7CiAgICAgIGNvbnN0IGhlYWRlckRlbGF5ID0gcGFyc2VJbnQocmV0cnlBZnRlciwgMTApOwogICAgICBjb25zdCBkZWxheSA9ICghaXNOYU4oaGVhZGVyRGVsYXkpID8gaGVhZGVyRGVsYXkgOiA2MCkgKiAxMDAwOyAvLyA2MHNlYyBkZWZhdWx0CiAgICAgIGlmICghY2F0ZWdvcmllcykgewogICAgICAgIHVwZGF0ZWRSYXRlTGltaXRzLmFsbCA9IG5vdyArIGRlbGF5OwogICAgICB9IGVsc2UgewogICAgICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllcy5zcGxpdCgnOycpKSB7CiAgICAgICAgICB1cGRhdGVkUmF0ZUxpbWl0c1tjYXRlZ29yeV0gPSBub3cgKyBkZWxheTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9IGVsc2UgaWYgKHJldHJ5QWZ0ZXJIZWFkZXIpIHsKICAgIHVwZGF0ZWRSYXRlTGltaXRzLmFsbCA9IG5vdyArIHBhcnNlUmV0cnlBZnRlckhlYWRlcihyZXRyeUFmdGVySGVhZGVyLCBub3cpOwogIH0gZWxzZSBpZiAoc3RhdHVzQ29kZSA9PT0gNDI5KSB7CiAgICB1cGRhdGVkUmF0ZUxpbWl0cy5hbGwgPSBub3cgKyA2MCAqIDEwMDA7CiAgfQoKICByZXR1cm4gdXBkYXRlZFJhdGVMaW1pdHM7Cn0KCi8qKgogKiBBIG5vZGUuanMgd2F0Y2hkb2cgdGltZXIKICogQHBhcmFtIHBvbGxJbnRlcnZhbCBUaGUgaW50ZXJ2YWwgdGhhdCB3ZSBleHBlY3QgdG8gZ2V0IHBvbGxlZCBhdAogKiBAcGFyYW0gYW5yVGhyZXNob2xkIFRoZSB0aHJlc2hvbGQgZm9yIHdoZW4gd2UgY29uc2lkZXIgQU5SCiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gY2FsbCBmb3IgQU5SCiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGBwb2xsYCBhbmQgYGVuYWJsZWRgIGZ1bmN0aW9ucyB7QGxpbmsgV2F0Y2hkb2dSZXR1cm59CiAqLwpmdW5jdGlvbiB3YXRjaGRvZ1RpbWVyKAogIGNyZWF0ZVRpbWVyLAogIHBvbGxJbnRlcnZhbCwKICBhbnJUaHJlc2hvbGQsCiAgY2FsbGJhY2ssCikgewogIGNvbnN0IHRpbWVyID0gY3JlYXRlVGltZXIoKTsKICBsZXQgdHJpZ2dlcmVkID0gZmFsc2U7CiAgbGV0IGVuYWJsZWQgPSB0cnVlOwoKICBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICBjb25zdCBkaWZmTXMgPSB0aW1lci5nZXRUaW1lTXMoKTsKCiAgICBpZiAodHJpZ2dlcmVkID09PSBmYWxzZSAmJiBkaWZmTXMgPiBwb2xsSW50ZXJ2YWwgKyBhbnJUaHJlc2hvbGQpIHsKICAgICAgdHJpZ2dlcmVkID0gdHJ1ZTsKICAgICAgaWYgKGVuYWJsZWQpIHsKICAgICAgICBjYWxsYmFjaygpOwogICAgICB9CiAgICB9CgogICAgaWYgKGRpZmZNcyA8IHBvbGxJbnRlcnZhbCArIGFuclRocmVzaG9sZCkgewogICAgICB0cmlnZ2VyZWQgPSBmYWxzZTsKICAgIH0KICB9LCAyMCk7CgogIHJldHVybiB7CiAgICBwb2xsOiAoKSA9PiB7CiAgICAgIHRpbWVyLnJlc2V0KCk7CiAgICB9LAogICAgZW5hYmxlZDogKHN0YXRlKSA9PiB7CiAgICAgIGVuYWJsZWQgPSBzdGF0ZTsKICAgIH0sCiAgfTsKfQoKLy8gdHlwZXMgY29waWVkIGZyb20gaW5zcGVjdG9yLmQudHMKCi8qKgogKiBDb252ZXJ0cyBEZWJ1Z2dlci5DYWxsRnJhbWUgdG8gU2VudHJ5IFN0YWNrRnJhbWUKICovCmZ1bmN0aW9uIGNhbGxGcmFtZVRvU3RhY2tGcmFtZSgKICBmcmFtZSwKICB1cmwsCiAgZ2V0TW9kdWxlRnJvbUZpbGVuYW1lLAopIHsKICBjb25zdCBmaWxlbmFtZSA9IHVybCA/IHVybC5yZXBsYWNlKC9eZmlsZTpcL1wvLywgJycpIDogdW5kZWZpbmVkOwoKICAvLyBDYWxsRnJhbWUgcm93L2NvbCBhcmUgMCBiYXNlZCwgd2hlcmVhcyBTdGFja0ZyYW1lIGFyZSAxIGJhc2VkCiAgY29uc3QgY29sbm8gPSBmcmFtZS5sb2NhdGlvbi5jb2x1bW5OdW1iZXIgPyBmcmFtZS5sb2NhdGlvbi5jb2x1bW5OdW1iZXIgKyAxIDogdW5kZWZpbmVkOwogIGNvbnN0IGxpbmVubyA9IGZyYW1lLmxvY2F0aW9uLmxpbmVOdW1iZXIgPyBmcmFtZS5sb2NhdGlvbi5saW5lTnVtYmVyICsgMSA6IHVuZGVmaW5lZDsKCiAgcmV0dXJuIGRyb3BVbmRlZmluZWRLZXlzKHsKICAgIGZpbGVuYW1lLAogICAgbW9kdWxlOiBnZXRNb2R1bGVGcm9tRmlsZW5hbWUoZmlsZW5hbWUpLAogICAgZnVuY3Rpb246IGZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnPycsCiAgICBjb2xubywKICAgIGxpbmVubywKICAgIGluX2FwcDogZmlsZW5hbWUgPyBmaWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUpIDogdW5kZWZpbmVkLAogIH0pOwp9CgovKioKICogVGhpcyBzZXJ2ZXMgYXMgYSBidWlsZCB0aW1lIGZsYWcgdGhhdCB3aWxsIGJlIHRydWUgYnkgZGVmYXVsdCwgYnV0IGZhbHNlIGluIG5vbi1kZWJ1ZyBidWlsZHMgb3IgaWYgdXNlcnMgcmVwbGFjZSBgX19TRU5UUllfREVCVUdfX2AgaW4gdGhlaXIgZ2VuZXJhdGVkIGNvZGUuCiAqCiAqIEFUVEVOVElPTjogVGhpcyBjb25zdGFudCBtdXN0IG5ldmVyIGNyb3NzIHBhY2thZ2UgYm91bmRhcmllcyAoaS5lLiBiZSBleHBvcnRlZCkgdG8gZ3VhcmFudGVlIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIHRyZWUgc2hha2luZy4KICovCmNvbnN0IERFQlVHX0JVSUxEID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTsKCi8qKgogKiBDcmVhdGVzIGEgbmV3IGBTZXNzaW9uYCBvYmplY3QgYnkgc2V0dGluZyBjZXJ0YWluIGRlZmF1bHQgcGFyYW1ldGVycy4gSWYgb3B0aW9uYWwgQHBhcmFtIGNvbnRleHQKICogaXMgcGFzc2VkLCB0aGUgcGFzc2VkIHByb3BlcnRpZXMgYXJlIGFwcGxpZWQgdG8gdGhlIHNlc3Npb24gb2JqZWN0LgogKgogKiBAcGFyYW0gY29udGV4dCAob3B0aW9uYWwpIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhcHBsaWVkIHRvIHRoZSByZXR1cm5lZCBzZXNzaW9uIG9iamVjdAogKgogKiBAcmV0dXJucyBhIG5ldyBgU2Vzc2lvbmAgb2JqZWN0CiAqLwpmdW5jdGlvbiBtYWtlU2Vzc2lvbihjb250ZXh0KSB7CiAgLy8gQm90aCB0aW1lc3RhbXAgYW5kIHN0YXJ0ZWQgYXJlIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2guCiAgY29uc3Qgc3RhcnRpbmdUaW1lID0gdGltZXN0YW1wSW5TZWNvbmRzKCk7CgogIGNvbnN0IHNlc3Npb24gPSB7CiAgICBzaWQ6IHV1aWQ0KCksCiAgICBpbml0OiB0cnVlLAogICAgdGltZXN0YW1wOiBzdGFydGluZ1RpbWUsCiAgICBzdGFydGVkOiBzdGFydGluZ1RpbWUsCiAgICBkdXJhdGlvbjogMCwKICAgIHN0YXR1czogJ29rJywKICAgIGVycm9yczogMCwKICAgIGlnbm9yZUR1cmF0aW9uOiBmYWxzZSwKICAgIHRvSlNPTjogKCkgPT4gc2Vzc2lvblRvSlNPTihzZXNzaW9uKSwKICB9OwoKICBpZiAoY29udGV4dCkgewogICAgdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0KTsKICB9CgogIHJldHVybiBzZXNzaW9uOwp9CgovKioKICogVXBkYXRlcyBhIHNlc3Npb24gb2JqZWN0IHdpdGggdGhlIHByb3BlcnRpZXMgcGFzc2VkIGluIHRoZSBjb250ZXh0LgogKgogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBtdXRhdGVzIHRoZSBwYXNzZWQgb2JqZWN0IGFuZCByZXR1cm5zIHZvaWQuCiAqIChIYWQgdG8gZG8gdGhpcyBpbnN0ZWFkIG9mIHJldHVybmluZyBhIG5ldyBhbmQgdXBkYXRlZCBzZXNzaW9uIGJlY2F1c2UgY2xvc2luZyBhbmQgc2VuZGluZyBhIHNlc3Npb24KICogbWFrZXMgYW4gdXBkYXRlIHRvIHRoZSBzZXNzaW9uIGFmdGVyIGl0IHdhcyBwYXNzZWQgdG8gdGhlIHNlbmRpbmcgbG9naWMuCiAqIEBzZWUgQmFzZUNsaWVudC5jYXB0dXJlU2Vzc2lvbiApCiAqCiAqIEBwYXJhbSBzZXNzaW9uIHRoZSBgU2Vzc2lvbmAgdG8gdXBkYXRlCiAqIEBwYXJhbSBjb250ZXh0IHRoZSBgU2Vzc2lvbkNvbnRleHRgIGhvbGRpbmcgdGhlIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmUgdXBkYXRlZCBpbiBAcGFyYW0gc2Vzc2lvbgogKi8KLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHkKZnVuY3Rpb24gdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0ID0ge30pIHsKICBpZiAoY29udGV4dC51c2VyKSB7CiAgICBpZiAoIXNlc3Npb24uaXBBZGRyZXNzICYmIGNvbnRleHQudXNlci5pcF9hZGRyZXNzKSB7CiAgICAgIHNlc3Npb24uaXBBZGRyZXNzID0gY29udGV4dC51c2VyLmlwX2FkZHJlc3M7CiAgICB9CgogICAgaWYgKCFzZXNzaW9uLmRpZCAmJiAhY29udGV4dC5kaWQpIHsKICAgICAgc2Vzc2lvbi5kaWQgPSBjb250ZXh0LnVzZXIuaWQgfHwgY29udGV4dC51c2VyLmVtYWlsIHx8IGNvbnRleHQudXNlci51c2VybmFtZTsKICAgIH0KICB9CgogIHNlc3Npb24udGltZXN0YW1wID0gY29udGV4dC50aW1lc3RhbXAgfHwgdGltZXN0YW1wSW5TZWNvbmRzKCk7CgogIGlmIChjb250ZXh0LmFibm9ybWFsX21lY2hhbmlzbSkgewogICAgc2Vzc2lvbi5hYm5vcm1hbF9tZWNoYW5pc20gPSBjb250ZXh0LmFibm9ybWFsX21lY2hhbmlzbTsKICB9CgogIGlmIChjb250ZXh0Lmlnbm9yZUR1cmF0aW9uKSB7CiAgICBzZXNzaW9uLmlnbm9yZUR1cmF0aW9uID0gY29udGV4dC5pZ25vcmVEdXJhdGlvbjsKICB9CiAgaWYgKGNvbnRleHQuc2lkKSB7CiAgICAvLyBHb29kIGVub3VnaCB1dWlkIHZhbGlkYXRpb24uIOKAlCBLYW1pbAogICAgc2Vzc2lvbi5zaWQgPSBjb250ZXh0LnNpZC5sZW5ndGggPT09IDMyID8gY29udGV4dC5zaWQgOiB1dWlkNCgpOwogIH0KICBpZiAoY29udGV4dC5pbml0ICE9PSB1bmRlZmluZWQpIHsKICAgIHNlc3Npb24uaW5pdCA9IGNvbnRleHQuaW5pdDsKICB9CiAgaWYgKCFzZXNzaW9uLmRpZCAmJiBjb250ZXh0LmRpZCkgewogICAgc2Vzc2lvbi5kaWQgPSBgJHtjb250ZXh0LmRpZH1gOwogIH0KICBpZiAodHlwZW9mIGNvbnRleHQuc3RhcnRlZCA9PT0gJ251bWJlcicpIHsKICAgIHNlc3Npb24uc3RhcnRlZCA9IGNvbnRleHQuc3RhcnRlZDsKICB9CiAgaWYgKHNlc3Npb24uaWdub3JlRHVyYXRpb24pIHsKICAgIHNlc3Npb24uZHVyYXRpb24gPSB1bmRlZmluZWQ7CiAgfSBlbHNlIGlmICh0eXBlb2YgY29udGV4dC5kdXJhdGlvbiA9PT0gJ251bWJlcicpIHsKICAgIHNlc3Npb24uZHVyYXRpb24gPSBjb250ZXh0LmR1cmF0aW9uOwogIH0gZWxzZSB7CiAgICBjb25zdCBkdXJhdGlvbiA9IHNlc3Npb24udGltZXN0YW1wIC0gc2Vzc2lvbi5zdGFydGVkOwogICAgc2Vzc2lvbi5kdXJhdGlvbiA9IGR1cmF0aW9uID49IDAgPyBkdXJhdGlvbiA6IDA7CiAgfQogIGlmIChjb250ZXh0LnJlbGVhc2UpIHsKICAgIHNlc3Npb24ucmVsZWFzZSA9IGNvbnRleHQucmVsZWFzZTsKICB9CiAgaWYgKGNvbnRleHQuZW52aXJvbm1lbnQpIHsKICAgIHNlc3Npb24uZW52aXJvbm1lbnQgPSBjb250ZXh0LmVudmlyb25tZW50OwogIH0KICBpZiAoIXNlc3Npb24uaXBBZGRyZXNzICYmIGNvbnRleHQuaXBBZGRyZXNzKSB7CiAgICBzZXNzaW9uLmlwQWRkcmVzcyA9IGNvbnRleHQuaXBBZGRyZXNzOwogIH0KICBpZiAoIXNlc3Npb24udXNlckFnZW50ICYmIGNvbnRleHQudXNlckFnZW50KSB7CiAgICBzZXNzaW9uLnVzZXJBZ2VudCA9IGNvbnRleHQudXNlckFnZW50OwogIH0KICBpZiAodHlwZW9mIGNvbnRleHQuZXJyb3JzID09PSAnbnVtYmVyJykgewogICAgc2Vzc2lvbi5lcnJvcnMgPSBjb250ZXh0LmVycm9yczsKICB9CiAgaWYgKGNvbnRleHQuc3RhdHVzKSB7CiAgICBzZXNzaW9uLnN0YXR1cyA9IGNvbnRleHQuc3RhdHVzOwogIH0KfQoKLyoqCiAqIFNlcmlhbGl6ZXMgYSBwYXNzZWQgc2Vzc2lvbiBvYmplY3QgdG8gYSBKU09OIG9iamVjdCB3aXRoIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHN0cnVjdHVyZS4KICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgU2VudHJ5IGJhY2tlbmQgcmVxdWlyZXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgc2NoZW1hIG9mIGEgc2Vzc2lvbgogKiB0aGFuIHRoZSBvbmUgdGhlIEpTIFNES3MgdXNlIGludGVybmFsbHkuCiAqCiAqIEBwYXJhbSBzZXNzaW9uIHRoZSBzZXNzaW9uIHRvIGJlIGNvbnZlcnRlZAogKgogKiBAcmV0dXJucyBhIEpTT04gb2JqZWN0IG9mIHRoZSBwYXNzZWQgc2Vzc2lvbgogKi8KZnVuY3Rpb24gc2Vzc2lvblRvSlNPTihzZXNzaW9uKSB7CiAgcmV0dXJuIGRyb3BVbmRlZmluZWRLZXlzKHsKICAgIHNpZDogYCR7c2Vzc2lvbi5zaWR9YCwKICAgIGluaXQ6IHNlc3Npb24uaW5pdCwKICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHNlYyBpcyBjb252ZXJ0ZWQgdG8gbXMgZm9yIGRhdGUgY29uc3RydWN0b3IKICAgIHN0YXJ0ZWQ6IG5ldyBEYXRlKHNlc3Npb24uc3RhcnRlZCAqIDEwMDApLnRvSVNPU3RyaW5nKCksCiAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKHNlc3Npb24udGltZXN0YW1wICogMTAwMCkudG9JU09TdHJpbmcoKSwKICAgIHN0YXR1czogc2Vzc2lvbi5zdGF0dXMsCiAgICBlcnJvcnM6IHNlc3Npb24uZXJyb3JzLAogICAgZGlkOiB0eXBlb2Ygc2Vzc2lvbi5kaWQgPT09ICdudW1iZXInIHx8IHR5cGVvZiBzZXNzaW9uLmRpZCA9PT0gJ3N0cmluZycgPyBgJHtzZXNzaW9uLmRpZH1gIDogdW5kZWZpbmVkLAogICAgZHVyYXRpb246IHNlc3Npb24uZHVyYXRpb24sCiAgICBhYm5vcm1hbF9tZWNoYW5pc206IHNlc3Npb24uYWJub3JtYWxfbWVjaGFuaXNtLAogICAgYXR0cnM6IHsKICAgICAgcmVsZWFzZTogc2Vzc2lvbi5yZWxlYXNlLAogICAgICBlbnZpcm9ubWVudDogc2Vzc2lvbi5lbnZpcm9ubWVudCwKICAgICAgaXBfYWRkcmVzczogc2Vzc2lvbi5pcEFkZHJlc3MsCiAgICAgIHVzZXJfYWdlbnQ6IHNlc3Npb24udXNlckFnZW50LAogICAgfSwKICB9KTsKfQoKLyoqCiAqIEFwcGx5IFNka0luZm8gKG5hbWUsIHZlcnNpb24sIHBhY2thZ2VzLCBpbnRlZ3JhdGlvbnMpIHRvIHRoZSBjb3JyZXNwb25kaW5nIGV2ZW50IGtleS4KICogTWVyZ2Ugd2l0aCBleGlzdGluZyBkYXRhIGlmIGFueS4KICoqLwpmdW5jdGlvbiBlbmhhbmNlRXZlbnRXaXRoU2RrSW5mbyhldmVudCwgc2RrSW5mbykgewogIGlmICghc2RrSW5mbykgewogICAgcmV0dXJuIGV2ZW50OwogIH0KICBldmVudC5zZGsgPSBldmVudC5zZGsgfHwge307CiAgZXZlbnQuc2RrLm5hbWUgPSBldmVudC5zZGsubmFtZSB8fCBzZGtJbmZvLm5hbWU7CiAgZXZlbnQuc2RrLnZlcnNpb24gPSBldmVudC5zZGsudmVyc2lvbiB8fCBzZGtJbmZvLnZlcnNpb247CiAgZXZlbnQuc2RrLmludGVncmF0aW9ucyA9IFsuLi4oZXZlbnQuc2RrLmludGVncmF0aW9ucyB8fCBbXSksIC4uLihzZGtJbmZvLmludGVncmF0aW9ucyB8fCBbXSldOwogIGV2ZW50LnNkay5wYWNrYWdlcyA9IFsuLi4oZXZlbnQuc2RrLnBhY2thZ2VzIHx8IFtdKSwgLi4uKHNka0luZm8ucGFja2FnZXMgfHwgW10pXTsKICByZXR1cm4gZXZlbnQ7Cn0KCi8qKiBDcmVhdGVzIGFuIGVudmVsb3BlIGZyb20gYSBTZXNzaW9uICovCmZ1bmN0aW9uIGNyZWF0ZVNlc3Npb25FbnZlbG9wZSgKICBzZXNzaW9uLAogIGRzbiwKICBtZXRhZGF0YSwKICB0dW5uZWwsCikgewogIGNvbnN0IHNka0luZm8gPSBnZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyKG1ldGFkYXRhKTsKICBjb25zdCBlbnZlbG9wZUhlYWRlcnMgPSB7CiAgICBzZW50X2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksCiAgICAuLi4oc2RrSW5mbyAmJiB7IHNkazogc2RrSW5mbyB9KSwKICAgIC4uLighIXR1bm5lbCAmJiBkc24gJiYgeyBkc246IGRzblRvU3RyaW5nKGRzbikgfSksCiAgfTsKCiAgY29uc3QgZW52ZWxvcGVJdGVtID0KICAgICdhZ2dyZWdhdGVzJyBpbiBzZXNzaW9uID8gW3sgdHlwZTogJ3Nlc3Npb25zJyB9LCBzZXNzaW9uXSA6IFt7IHR5cGU6ICdzZXNzaW9uJyB9LCBzZXNzaW9uLnRvSlNPTigpXTsKCiAgcmV0dXJuIGNyZWF0ZUVudmVsb3BlKGVudmVsb3BlSGVhZGVycywgW2VudmVsb3BlSXRlbV0pOwp9CgovKioKICogQ3JlYXRlIGFuIEVudmVsb3BlIGZyb20gYW4gZXZlbnQuCiAqLwpmdW5jdGlvbiBjcmVhdGVFdmVudEVudmVsb3BlKAogIGV2ZW50LAogIGRzbiwKICBtZXRhZGF0YSwKICB0dW5uZWwsCikgewogIGNvbnN0IHNka0luZm8gPSBnZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyKG1ldGFkYXRhKTsKCiAgLyoKICAgIE5vdGU6IER1ZSB0byBUUywgZXZlbnQudHlwZSBtYXkgYmUgYHJlcGxheV9ldmVudGAsIHRoZW9yZXRpY2FsbHkuCiAgICBJbiBwcmFjdGljZSwgd2UgbmV2ZXIgY2FsbCBgY3JlYXRlRXZlbnRFbnZlbG9wZWAgd2l0aCBgcmVwbGF5X2V2ZW50YCB0eXBlLAogICAgYW5kIHdlJ2QgaGF2ZSB0byBhZGp1dCBhIGxvb290IG9mIHR5cGVzIHRvIG1ha2UgdGhpcyB3b3JrIHByb3Blcmx5LgogICAgV2Ugd2FudCB0byBhdm9pZCBjYXN0aW5nIHRoaXMgYXJvdW5kLCBhcyB0aGF0IGNvdWxkIGxlYWQgdG8gYnVncyAoZS5nLiB3aGVuIHdlIGFkZCBhbm90aGVyIHR5cGUpCiAgICBTbyB0aGUgc2FmZSBjaG9pY2UgaXMgdG8gcmVhbGx5IGd1YXJkIGFnYWluc3QgdGhlIHJlcGxheV9ldmVudCB0eXBlIGhlcmUuCiAgKi8KICBjb25zdCBldmVudFR5cGUgPSBldmVudC50eXBlICYmIGV2ZW50LnR5cGUgIT09ICdyZXBsYXlfZXZlbnQnID8gZXZlbnQudHlwZSA6ICdldmVudCc7CgogIGVuaGFuY2VFdmVudFdpdGhTZGtJbmZvKGV2ZW50LCBtZXRhZGF0YSAmJiBtZXRhZGF0YS5zZGspOwoKICBjb25zdCBlbnZlbG9wZUhlYWRlcnMgPSBjcmVhdGVFdmVudEVudmVsb3BlSGVhZGVycyhldmVudCwgc2RrSW5mbywgdHVubmVsLCBkc24pOwoKICAvLyBQcmV2ZW50IHRoaXMgZGF0YSAod2hpY2gsIGlmIGl0IGV4aXN0cywgd2FzIHVzZWQgaW4gZWFybGllciBzdGVwcyBpbiB0aGUgcHJvY2Vzc2luZyBwaXBlbGluZSkgZnJvbSBiZWluZyBzZW50IHRvCiAgLy8gc2VudHJ5LiAoTm90ZTogT3VyIHVzZSBvZiB0aGlzIHByb3BlcnR5IGNvbWVzIGFuZCBnb2VzIHdpdGggd2hhdGV2ZXIgd2UgbWlnaHQgYmUgZGVidWdnaW5nLCB3aGF0ZXZlciBoYWNrcyB3ZSBtYXkKICAvLyBoYXZlIHRlbXBvcmFyaWx5IGFkZGVkLCBldGMuIEV2ZW4gaWYgd2UgZG9uJ3QgaGFwcGVuIHRvIGJlIHVzaW5nIGl0IGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwgbGV0J3Mgbm90IGdldCByaWQKICAvLyBvZiB0aGlzIGBkZWxldGVgLCBsZXN0IHdlIG1pc3MgcHV0dGluZyBpdCBiYWNrIGluIHRoZSBuZXh0IHRpbWUgdGhlIHByb3BlcnR5IGlzIGluIHVzZS4pCiAgZGVsZXRlIGV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YTsKCiAgY29uc3QgZXZlbnRJdGVtID0gW3sgdHlwZTogZXZlbnRUeXBlIH0sIGV2ZW50XTsKICByZXR1cm4gY3JlYXRlRW52ZWxvcGUoZW52ZWxvcGVIZWFkZXJzLCBbZXZlbnRJdGVtXSk7Cn0KCmNvbnN0IFNFTlRSWV9BUElfVkVSU0lPTiA9ICc3JzsKCi8qKiBSZXR1cm5zIHRoZSBwcmVmaXggdG8gY29uc3RydWN0IFNlbnRyeSBpbmdlc3Rpb24gQVBJIGVuZHBvaW50cy4gKi8KZnVuY3Rpb24gZ2V0QmFzZUFwaUVuZHBvaW50KGRzbikgewogIGNvbnN0IHByb3RvY29sID0gZHNuLnByb3RvY29sID8gYCR7ZHNuLnByb3RvY29sfTpgIDogJyc7CiAgY29uc3QgcG9ydCA9IGRzbi5wb3J0ID8gYDoke2Rzbi5wb3J0fWAgOiAnJzsKICByZXR1cm4gYCR7cHJvdG9jb2x9Ly8ke2Rzbi5ob3N0fSR7cG9ydH0ke2Rzbi5wYXRoID8gYC8ke2Rzbi5wYXRofWAgOiAnJ30vYXBpL2A7Cn0KCi8qKiBSZXR1cm5zIHRoZSBpbmdlc3QgQVBJIGVuZHBvaW50IGZvciB0YXJnZXQuICovCmZ1bmN0aW9uIF9nZXRJbmdlc3RFbmRwb2ludChkc24pIHsKICByZXR1cm4gYCR7Z2V0QmFzZUFwaUVuZHBvaW50KGRzbil9JHtkc24ucHJvamVjdElkfS9lbnZlbG9wZS9gOwp9CgovKiogUmV0dXJucyBhIFVSTC1lbmNvZGVkIHN0cmluZyB3aXRoIGF1dGggY29uZmlnIHN1aXRhYmxlIGZvciBhIHF1ZXJ5IHN0cmluZy4gKi8KZnVuY3Rpb24gX2VuY29kZWRBdXRoKGRzbiwgc2RrSW5mbykgewogIHJldHVybiB1cmxFbmNvZGUoewogICAgLy8gV2Ugc2VuZCBvbmx5IHRoZSBtaW5pbXVtIHNldCBvZiByZXF1aXJlZCBpbmZvcm1hdGlvbi4gU2VlCiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8yNTcyLgogICAgc2VudHJ5X2tleTogZHNuLnB1YmxpY0tleSwKICAgIHNlbnRyeV92ZXJzaW9uOiBTRU5UUllfQVBJX1ZFUlNJT04sCiAgICAuLi4oc2RrSW5mbyAmJiB7IHNlbnRyeV9jbGllbnQ6IGAke3Nka0luZm8ubmFtZX0vJHtzZGtJbmZvLnZlcnNpb259YCB9KSwKICB9KTsKfQoKLyoqCiAqIFJldHVybnMgdGhlIGVudmVsb3BlIGVuZHBvaW50IFVSTCB3aXRoIGF1dGggaW4gdGhlIHF1ZXJ5IHN0cmluZy4KICoKICogU2VuZGluZyBhdXRoIGFzIHBhcnQgb2YgdGhlIHF1ZXJ5IHN0cmluZyBhbmQgbm90IGFzIGN1c3RvbSBIVFRQIGhlYWRlcnMgYXZvaWRzIENPUlMgcHJlZmxpZ2h0IHJlcXVlc3RzLgogKi8KZnVuY3Rpb24gZ2V0RW52ZWxvcGVFbmRwb2ludFdpdGhVcmxFbmNvZGVkQXV0aCgKICBkc24sCiAgLy8gVE9ETyAodjgpOiBSZW1vdmUgYHR1bm5lbE9yT3B0aW9uc2AgaW4gZmF2b3Igb2YgYG9wdGlvbnNgLCBhbmQgdXNlIHRoZSBzdWJzdGl0dXRlIGNvZGUgYmVsb3cKICAvLyBvcHRpb25zOiBDbGllbnRPcHRpb25zID0ge30gYXMgQ2xpZW50T3B0aW9ucywKICB0dW5uZWxPck9wdGlvbnMgPSB7fSAsCikgewogIC8vIFRPRE8gKHY4KTogVXNlIHRoaXMgY29kZSBpbnN0ZWFkCiAgLy8gY29uc3QgeyB0dW5uZWwsIF9tZXRhZGF0YSA9IHt9IH0gPSBvcHRpb25zOwogIC8vIHJldHVybiB0dW5uZWwgPyB0dW5uZWwgOiBgJHtfZ2V0SW5nZXN0RW5kcG9pbnQoZHNuKX0/JHtfZW5jb2RlZEF1dGgoZHNuLCBfbWV0YWRhdGEuc2RrKX1gOwoKICBjb25zdCB0dW5uZWwgPSB0eXBlb2YgdHVubmVsT3JPcHRpb25zID09PSAnc3RyaW5nJyA/IHR1bm5lbE9yT3B0aW9ucyA6IHR1bm5lbE9yT3B0aW9ucy50dW5uZWw7CiAgY29uc3Qgc2RrSW5mbyA9CiAgICB0eXBlb2YgdHVubmVsT3JPcHRpb25zID09PSAnc3RyaW5nJyB8fCAhdHVubmVsT3JPcHRpb25zLl9tZXRhZGF0YSA/IHVuZGVmaW5lZCA6IHR1bm5lbE9yT3B0aW9ucy5fbWV0YWRhdGEuc2RrOwoKICByZXR1cm4gdHVubmVsID8gdHVubmVsIDogYCR7X2dldEluZ2VzdEVuZHBvaW50KGRzbil9PyR7X2VuY29kZWRBdXRoKGRzbiwgc2RrSW5mbyl9YDsKfQoKY29uc3QgREVGQVVMVF9UUkFOU1BPUlRfQlVGRkVSX1NJWkUgPSAzMDsKCi8qKgogKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIGEgU2VudHJ5IGBUcmFuc3BvcnRgCiAqCiAqIEBwYXJhbSBvcHRpb25zCiAqIEBwYXJhbSBtYWtlUmVxdWVzdAogKi8KZnVuY3Rpb24gY3JlYXRlVHJhbnNwb3J0KAogIG9wdGlvbnMsCiAgbWFrZVJlcXVlc3QsCiAgYnVmZmVyID0gbWFrZVByb21pc2VCdWZmZXIoCiAgICBvcHRpb25zLmJ1ZmZlclNpemUgfHwgREVGQVVMVF9UUkFOU1BPUlRfQlVGRkVSX1NJWkUsCiAgKSwKKSB7CiAgbGV0IHJhdGVMaW1pdHMgPSB7fTsKICBjb25zdCBmbHVzaCA9ICh0aW1lb3V0KSA9PiBidWZmZXIuZHJhaW4odGltZW91dCk7CgogIGZ1bmN0aW9uIHNlbmQoZW52ZWxvcGUpIHsKICAgIGNvbnN0IGZpbHRlcmVkRW52ZWxvcGVJdGVtcyA9IFtdOwoKICAgIC8vIERyb3AgcmF0ZSBsaW1pdGVkIGl0ZW1zIGZyb20gZW52ZWxvcGUKICAgIGZvckVhY2hFbnZlbG9wZUl0ZW0oZW52ZWxvcGUsIChpdGVtLCB0eXBlKSA9PiB7CiAgICAgIGNvbnN0IGVudmVsb3BlSXRlbURhdGFDYXRlZ29yeSA9IGVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSh0eXBlKTsKICAgICAgaWYgKGlzUmF0ZUxpbWl0ZWQocmF0ZUxpbWl0cywgZW52ZWxvcGVJdGVtRGF0YUNhdGVnb3J5KSkgewogICAgICAgIGNvbnN0IGV2ZW50ID0gZ2V0RXZlbnRGb3JFbnZlbG9wZUl0ZW0oaXRlbSwgdHlwZSk7CiAgICAgICAgb3B0aW9ucy5yZWNvcmREcm9wcGVkRXZlbnQoJ3JhdGVsaW1pdF9iYWNrb2ZmJywgZW52ZWxvcGVJdGVtRGF0YUNhdGVnb3J5LCBldmVudCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZmlsdGVyZWRFbnZlbG9wZUl0ZW1zLnB1c2goaXRlbSk7CiAgICAgIH0KICAgIH0pOwoKICAgIC8vIFNraXAgc2VuZGluZyBpZiBlbnZlbG9wZSBpcyBlbXB0eSBhZnRlciBmaWx0ZXJpbmcgb3V0IHJhdGUgbGltaXRlZCBldmVudHMKICAgIGlmIChmaWx0ZXJlZEVudmVsb3BlSXRlbXMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiByZXNvbHZlZFN5bmNQcm9taXNlKCk7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkKICAgIGNvbnN0IGZpbHRlcmVkRW52ZWxvcGUgPSBjcmVhdGVFbnZlbG9wZShlbnZlbG9wZVswXSwgZmlsdGVyZWRFbnZlbG9wZUl0ZW1zICk7CgogICAgLy8gQ3JlYXRlcyBjbGllbnQgcmVwb3J0IGZvciBlYWNoIGl0ZW0gaW4gYW4gZW52ZWxvcGUKICAgIGNvbnN0IHJlY29yZEVudmVsb3BlTG9zcyA9IChyZWFzb24pID0+IHsKICAgICAgZm9yRWFjaEVudmVsb3BlSXRlbShmaWx0ZXJlZEVudmVsb3BlLCAoaXRlbSwgdHlwZSkgPT4gewogICAgICAgIGNvbnN0IGV2ZW50ID0gZ2V0RXZlbnRGb3JFbnZlbG9wZUl0ZW0oaXRlbSwgdHlwZSk7CiAgICAgICAgb3B0aW9ucy5yZWNvcmREcm9wcGVkRXZlbnQocmVhc29uLCBlbnZlbG9wZUl0ZW1UeXBlVG9EYXRhQ2F0ZWdvcnkodHlwZSksIGV2ZW50KTsKICAgICAgfSk7CiAgICB9OwoKICAgIGNvbnN0IHJlcXVlc3RUYXNrID0gKCkgPT4KICAgICAgbWFrZVJlcXVlc3QoeyBib2R5OiBzZXJpYWxpemVFbnZlbG9wZShmaWx0ZXJlZEVudmVsb3BlLCBvcHRpb25zLnRleHRFbmNvZGVyKSB9KS50aGVuKAogICAgICAgIHJlc3BvbnNlID0+IHsKICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gdGhyb3cgb24gTk9LIHJlc3BvbnNlcywgYnV0IHdlIHdhbnQgdG8gYXQgbGVhc3QgbG9nIHRoZW0KICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9PSB1bmRlZmluZWQgJiYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgPCAyMDAgfHwgcmVzcG9uc2Uuc3RhdHVzQ29kZSA+PSAzMDApKSB7CiAgICAgICAgICAgIERFQlVHX0JVSUxEICYmIGxvZ2dlci53YXJuKGBTZW50cnkgcmVzcG9uZGVkIHdpdGggc3RhdHVzIGNvZGUgJHtyZXNwb25zZS5zdGF0dXNDb2RlfSB0byBzZW50IGV2ZW50LmApOwogICAgICAgICAgfQoKICAgICAgICAgIHJhdGVMaW1pdHMgPSB1cGRhdGVSYXRlTGltaXRzKHJhdGVMaW1pdHMsIHJlc3BvbnNlKTsKICAgICAgICAgIHJldHVybiByZXNwb25zZTsKICAgICAgICB9LAogICAgICAgIGVycm9yID0+IHsKICAgICAgICAgIHJlY29yZEVudmVsb3BlTG9zcygnbmV0d29ya19lcnJvcicpOwogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgfSwKICAgICAgKTsKCiAgICByZXR1cm4gYnVmZmVyLmFkZChyZXF1ZXN0VGFzaykudGhlbigKICAgICAgcmVzdWx0ID0+IHJlc3VsdCwKICAgICAgZXJyb3IgPT4gewogICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFNlbnRyeUVycm9yKSB7CiAgICAgICAgICBERUJVR19CVUlMRCAmJiBsb2dnZXIuZXJyb3IoJ1NraXBwZWQgc2VuZGluZyBldmVudCBiZWNhdXNlIGJ1ZmZlciBpcyBmdWxsLicpOwogICAgICAgICAgcmVjb3JkRW52ZWxvcGVMb3NzKCdxdWV1ZV9vdmVyZmxvdycpOwogICAgICAgICAgcmV0dXJuIHJlc29sdmVkU3luY1Byb21pc2UoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgfQogICAgICB9LAogICAgKTsKICB9CgogIC8vIFdlIHVzZSB0aGlzIHRvIGlkZW50aWZpZnkgaWYgdGhlIHRyYW5zcG9ydCBpcyB0aGUgYmFzZSB0cmFuc3BvcnQKICAvLyBUT0RPICh2OCk6IFJlbW92ZSB0aGlzIGFnYWluIGFzIHdlJ2xsIG5vIGxvbmdlciBuZWVkIGl0CiAgc2VuZC5fX3NlbnRyeV9fYmFzZVRyYW5zcG9ydF9fID0gdHJ1ZTsKCiAgcmV0dXJuIHsKICAgIHNlbmQsCiAgICBmbHVzaCwKICB9Owp9CgpmdW5jdGlvbiBnZXRFdmVudEZvckVudmVsb3BlSXRlbShpdGVtLCB0eXBlKSB7CiAgaWYgKHR5cGUgIT09ICdldmVudCcgJiYgdHlwZSAhPT0gJ3RyYW5zYWN0aW9uJykgewogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CgogIHJldHVybiBBcnJheS5pc0FycmF5KGl0ZW0pID8gKGl0ZW0gKVsxXSA6IHVuZGVmaW5lZDsKfQoKLyoqIG5vcm1hbGl6ZXMgV2luZG93cyBwYXRocyAqLwpmdW5jdGlvbiBub3JtYWxpemVXaW5kb3dzUGF0aChwYXRoKSB7CiAgcmV0dXJuIHBhdGgKICAgIC5yZXBsYWNlKC9eW0EtWl06LywgJycpIC8vIHJlbW92ZSBXaW5kb3dzLXN0eWxlIHByZWZpeAogICAgLnJlcGxhY2UoL1xcL2csICcvJyk7IC8vIHJlcGxhY2UgYWxsIGBcYCBpbnN0YW5jZXMgd2l0aCBgL2AKfQoKLyoqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgdGhlIG1vZHVsZSBuYW1lIGZyb20gYSBmaWxlbmFtZSAqLwpmdW5jdGlvbiBjcmVhdGVHZXRNb2R1bGVGcm9tRmlsZW5hbWUoCiAgYmFzZVBhdGggPSBwcm9jZXNzLmFyZ3ZbMV0gPyBkaXJuYW1lKHByb2Nlc3MuYXJndlsxXSkgOiBwcm9jZXNzLmN3ZCgpLAogIGlzV2luZG93cyA9IHNlcCA9PT0gJ1xcJywKKSB7CiAgY29uc3Qgbm9ybWFsaXplZEJhc2UgPSBpc1dpbmRvd3MgPyBub3JtYWxpemVXaW5kb3dzUGF0aChiYXNlUGF0aCkgOiBiYXNlUGF0aDsKCiAgcmV0dXJuIChmaWxlbmFtZSkgPT4gewogICAgaWYgKCFmaWxlbmFtZSkgewogICAgICByZXR1cm47CiAgICB9CgogICAgY29uc3Qgbm9ybWFsaXplZEZpbGVuYW1lID0gaXNXaW5kb3dzID8gbm9ybWFsaXplV2luZG93c1BhdGgoZmlsZW5hbWUpIDogZmlsZW5hbWU7CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdAogICAgbGV0IHsgZGlyLCBiYXNlOiBmaWxlLCBleHQgfSA9IHBvc2l4LnBhcnNlKG5vcm1hbGl6ZWRGaWxlbmFtZSk7CgogICAgaWYgKGV4dCA9PT0gJy5qcycgfHwgZXh0ID09PSAnLm1qcycgfHwgZXh0ID09PSAnLmNqcycpIHsKICAgICAgZmlsZSA9IGZpbGUuc2xpY2UoMCwgZXh0Lmxlbmd0aCAqIC0xKTsKICAgIH0KCiAgICBpZiAoIWRpcikgewogICAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXIKICAgICAgZGlyID0gJy4nOwogICAgfQoKICAgIGNvbnN0IG4gPSBkaXIubGFzdEluZGV4T2YoJy9ub2RlX21vZHVsZXMnKTsKICAgIGlmIChuID4gLTEpIHsKICAgICAgcmV0dXJuIGAke2Rpci5zbGljZShuICsgMTQpLnJlcGxhY2UoL1wvL2csICcuJyl9OiR7ZmlsZX1gOwogICAgfQoKICAgIC8vIExldCdzIHNlZSBpZiBpdCdzIGEgcGFydCBvZiB0aGUgbWFpbiBtb2R1bGUKICAgIC8vIFRvIGJlIGEgcGFydCBvZiBtYWluIG1vZHVsZSwgaXQgaGFzIHRvIHNoYXJlIHRoZSBzYW1lIGJhc2UKICAgIGlmIChkaXIuc3RhcnRzV2l0aChub3JtYWxpemVkQmFzZSkpIHsKICAgICAgbGV0IG1vZHVsZU5hbWUgPSBkaXIuc2xpY2Uobm9ybWFsaXplZEJhc2UubGVuZ3RoICsgMSkucmVwbGFjZSgvXC8vZywgJy4nKTsKCiAgICAgIGlmIChtb2R1bGVOYW1lKSB7CiAgICAgICAgbW9kdWxlTmFtZSArPSAnOic7CiAgICAgIH0KICAgICAgbW9kdWxlTmFtZSArPSBmaWxlOwoKICAgICAgcmV0dXJuIG1vZHVsZU5hbWU7CiAgICB9CgogICAgcmV0dXJuIGZpbGU7CiAgfTsKfQoKZnVuY3Rpb24gX251bGxpc2hDb2FsZXNjZSQyKGxocywgcmhzRm4pIHsgaWYgKGxocyAhPSBudWxsKSB7IHJldHVybiBsaHM7IH0gZWxzZSB7IHJldHVybiByaHNGbigpOyB9IH0vKioKICogVGhpcyBjb2RlIHdhcyBvcmlnaW5hbGx5IGZvcmtlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9Ub29UYWxsTmF0ZS9wcm94eS1hZ2VudHMvdHJlZS9iMTMzMjk1ZmQxNmY2NDc1NTc4YjZiMTViZDliNGUzM2VjYjBkMGI3CiAqIFdpdGggdGhlIGZvbGxvd2luZyBsaWNlbmNlOgogKgogKiAoVGhlIE1JVCBMaWNlbnNlKQogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTMgTmF0aGFuIFJhamxpY2ggPG5hdGhhbkB0b290YWxsbmF0ZS5uZXQ+KgogKgogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCiAqICdTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAogKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCiAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoqCiAqCiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCiAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLioKICoKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCiAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgogKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCiAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCiAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCiAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCiAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogKi8KCmNvbnN0IElOVEVSTkFMID0gU3ltYm9sKCdBZ2VudEJhc2VJbnRlcm5hbFN0YXRlJyk7CgpjbGFzcyBBZ2VudCBleHRlbmRzIGh0dHAuQWdlbnQgewoKICAvLyBTZXQgYnkgYGh0dHAuQWdlbnRgIC0gbWlzc2luZyBmcm9tIGBAdHlwZXMvbm9kZWAKCiAgY29uc3RydWN0b3Iob3B0cykgewogICAgc3VwZXIob3B0cyk7CiAgICB0aGlzW0lOVEVSTkFMXSA9IHt9OwogIH0KCiAgLyoqCiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhbiBgaHR0cGAgb3IgYGh0dHBzYCByZXF1ZXN0LgogICAqLwogIGlzU2VjdXJlRW5kcG9pbnQob3B0aW9ucykgewogICAgaWYgKG9wdGlvbnMpIHsKICAgICAgLy8gRmlyc3QgY2hlY2sgdGhlIGBzZWN1cmVFbmRwb2ludGAgcHJvcGVydHkgZXhwbGljaXRseSwgc2luY2UgdGhpcwogICAgICAvLyBtZWFucyB0aGF0IGEgcGFyZW50IGBBZ2VudGAgaXMgInBhc3NpbmcgdGhyb3VnaCIgdG8gdGhpcyBpbnN0YW5jZS4KICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcwogICAgICBpZiAodHlwZW9mIChvcHRpb25zICkuc2VjdXJlRW5kcG9pbnQgPT09ICdib29sZWFuJykgewogICAgICAgIHJldHVybiBvcHRpb25zLnNlY3VyZUVuZHBvaW50OwogICAgICB9CgogICAgICAvLyBJZiBubyBleHBsaWNpdCBgc2VjdXJlYCBlbmRwb2ludCwgY2hlY2sgaWYgYHByb3RvY29sYCBwcm9wZXJ0eSBpcwogICAgICAvLyBzZXQuIFRoaXMgd2lsbCB1c3VhbGx5IGJlIHRoZSBjYXNlIHNpbmNlIHVzaW5nIGEgZnVsbCBzdHJpbmcgVVJMCiAgICAgIC8vIG9yIGBVUkxgIGluc3RhbmNlIHNob3VsZCBiZSB0aGUgbW9zdCBjb21tb24gdXNhZ2UuCiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wcm90b2NvbCA9PT0gJ3N0cmluZycpIHsKICAgICAgICByZXR1cm4gb3B0aW9ucy5wcm90b2NvbCA9PT0gJ2h0dHBzOic7CiAgICAgIH0KICAgIH0KCiAgICAvLyBGaW5hbGx5LCBpZiBubyBgcHJvdG9jb2xgIHByb3BlcnR5IHdhcyBzZXQsIHRoZW4gZmFsbCBiYWNrIHRvCiAgICAvLyBjaGVja2luZyB0aGUgc3RhY2sgdHJhY2Ugb2YgdGhlIGN1cnJlbnQgY2FsbCBzdGFjaywgYW5kIHRyeSB0bwogICAgLy8gZGV0ZWN0IHRoZSAiaHR0cHMiIG1vZHVsZS4KICAgIGNvbnN0IHsgc3RhY2sgfSA9IG5ldyBFcnJvcigpOwogICAgaWYgKHR5cGVvZiBzdGFjayAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBzdGFjay5zcGxpdCgnXG4nKS5zb21lKGwgPT4gbC5pbmRleE9mKCcoaHR0cHMuanM6JykgIT09IC0xIHx8IGwuaW5kZXhPZignbm9kZTpodHRwczonKSAhPT0gLTEpOwogIH0KCiAgY3JlYXRlU29ja2V0KHJlcSwgb3B0aW9ucywgY2IpIHsKICAgIGNvbnN0IGNvbm5lY3RPcHRzID0gewogICAgICAuLi5vcHRpb25zLAogICAgICBzZWN1cmVFbmRwb2ludDogdGhpcy5pc1NlY3VyZUVuZHBvaW50KG9wdGlvbnMpLAogICAgfTsKICAgIFByb21pc2UucmVzb2x2ZSgpCiAgICAgIC50aGVuKCgpID0+IHRoaXMuY29ubmVjdChyZXEsIGNvbm5lY3RPcHRzKSkKICAgICAgLnRoZW4oc29ja2V0ID0+IHsKICAgICAgICBpZiAoc29ja2V0IGluc3RhbmNlb2YgaHR0cC5BZ2VudCkgewogICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgYWRkUmVxdWVzdCgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWAKICAgICAgICAgIHJldHVybiBzb2NrZXQuYWRkUmVxdWVzdChyZXEsIGNvbm5lY3RPcHRzKTsKICAgICAgICB9CiAgICAgICAgdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldCA9IHNvY2tldDsKICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBjcmVhdGVTb2NrZXQoKWAgaXNuJ3QgZGVmaW5lZCBpbiBgQHR5cGVzL25vZGVgCiAgICAgICAgc3VwZXIuY3JlYXRlU29ja2V0KHJlcSwgb3B0aW9ucywgY2IpOwogICAgICB9LCBjYik7CiAgfQoKICBjcmVhdGVDb25uZWN0aW9uKCkgewogICAgY29uc3Qgc29ja2V0ID0gdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldDsKICAgIHRoaXNbSU5URVJOQUxdLmN1cnJlbnRTb2NrZXQgPSB1bmRlZmluZWQ7CiAgICBpZiAoIXNvY2tldCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNvY2tldCB3YXMgcmV0dXJuZWQgaW4gdGhlIGBjb25uZWN0KClgIGZ1bmN0aW9uJyk7CiAgICB9CiAgICByZXR1cm4gc29ja2V0OwogIH0KCiAgZ2V0IGRlZmF1bHRQb3J0KCkgewogICAgcmV0dXJuIF9udWxsaXNoQ29hbGVzY2UkMih0aGlzW0lOVEVSTkFMXS5kZWZhdWx0UG9ydCwgKCkgPT4gKCAodGhpcy5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MCkpKTsKICB9CgogIHNldCBkZWZhdWx0UG9ydCh2KSB7CiAgICBpZiAodGhpc1tJTlRFUk5BTF0pIHsKICAgICAgdGhpc1tJTlRFUk5BTF0uZGVmYXVsdFBvcnQgPSB2OwogICAgfQogIH0KCiAgZ2V0IHByb3RvY29sKCkgewogICAgcmV0dXJuIF9udWxsaXNoQ29hbGVzY2UkMih0aGlzW0lOVEVSTkFMXS5wcm90b2NvbCwgKCkgPT4gKCAodGhpcy5pc1NlY3VyZUVuZHBvaW50KCkgPyAnaHR0cHM6JyA6ICdodHRwOicpKSk7CiAgfQoKICBzZXQgcHJvdG9jb2wodikgewogICAgaWYgKHRoaXNbSU5URVJOQUxdKSB7CiAgICAgIHRoaXNbSU5URVJOQUxdLnByb3RvY29sID0gdjsKICAgIH0KICB9Cn0KCmZ1bmN0aW9uIGRlYnVnJDEoLi4uYXJncykgewogIGxvZ2dlci5sb2coJ1todHRwcy1wcm94eS1hZ2VudDpwYXJzZS1wcm94eS1yZXNwb25zZV0nLCAuLi5hcmdzKTsKfQoKZnVuY3Rpb24gcGFyc2VQcm94eVJlc3BvbnNlKHNvY2tldCkgewogIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAvLyB3ZSBuZWVkIHRvIGJ1ZmZlciBhbnkgSFRUUCB0cmFmZmljIHRoYXQgaGFwcGVucyB3aXRoIHRoZSBwcm94eSBiZWZvcmUgd2UgZ2V0CiAgICAvLyB0aGUgQ09OTkVDVCByZXNwb25zZSwgc28gdGhhdCBpZiB0aGUgcmVzcG9uc2UgaXMgYW55dGhpbmcgb3RoZXIgdGhhbiBhbiAiMjAwIgogICAgLy8gcmVzcG9uc2UgY29kZSwgdGhlbiB3ZSBjYW4gcmUtcGxheSB0aGUgImRhdGEiIGV2ZW50cyBvbiB0aGUgc29ja2V0IG9uY2UgdGhlCiAgICAvLyBIVFRQIHBhcnNlciBpcyBob29rZWQgdXAuLi4KICAgIGxldCBidWZmZXJzTGVuZ3RoID0gMDsKICAgIGNvbnN0IGJ1ZmZlcnMgPSBbXTsKCiAgICBmdW5jdGlvbiByZWFkKCkgewogICAgICBjb25zdCBiID0gc29ja2V0LnJlYWQoKTsKICAgICAgaWYgKGIpIG9uZGF0YShiKTsKICAgICAgZWxzZSBzb2NrZXQub25jZSgncmVhZGFibGUnLCByZWFkKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjbGVhbnVwKCkgewogICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKTsKICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpOwogICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ3JlYWRhYmxlJywgcmVhZCk7CiAgICB9CgogICAgZnVuY3Rpb24gb25lbmQoKSB7CiAgICAgIGNsZWFudXAoKTsKICAgICAgZGVidWckMSgnb25lbmQnKTsKICAgICAgcmVqZWN0KG5ldyBFcnJvcignUHJveHkgY29ubmVjdGlvbiBlbmRlZCBiZWZvcmUgcmVjZWl2aW5nIENPTk5FQ1QgcmVzcG9uc2UnKSk7CiAgICB9CgogICAgZnVuY3Rpb24gb25lcnJvcihlcnIpIHsKICAgICAgY2xlYW51cCgpOwogICAgICBkZWJ1ZyQxKCdvbmVycm9yICVvJywgZXJyKTsKICAgICAgcmVqZWN0KGVycik7CiAgICB9CgogICAgZnVuY3Rpb24gb25kYXRhKGIpIHsKICAgICAgYnVmZmVycy5wdXNoKGIpOwogICAgICBidWZmZXJzTGVuZ3RoICs9IGIubGVuZ3RoOwoKICAgICAgY29uc3QgYnVmZmVyZWQgPSBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMsIGJ1ZmZlcnNMZW5ndGgpOwogICAgICBjb25zdCBlbmRPZkhlYWRlcnMgPSBidWZmZXJlZC5pbmRleE9mKCdcclxuXHJcbicpOwoKICAgICAgaWYgKGVuZE9mSGVhZGVycyA9PT0gLTEpIHsKICAgICAgICAvLyBrZWVwIGJ1ZmZlcmluZwogICAgICAgIGRlYnVnJDEoJ2hhdmUgbm90IHJlY2VpdmVkIGVuZCBvZiBIVFRQIGhlYWRlcnMgeWV0Li4uJyk7CiAgICAgICAgcmVhZCgpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgY29uc3QgaGVhZGVyUGFydHMgPSBidWZmZXJlZC5zbGljZSgwLCBlbmRPZkhlYWRlcnMpLnRvU3RyaW5nKCdhc2NpaScpLnNwbGl0KCdcclxuJyk7CiAgICAgIGNvbnN0IGZpcnN0TGluZSA9IGhlYWRlclBhcnRzLnNoaWZ0KCk7CiAgICAgIGlmICghZmlyc3RMaW5lKSB7CiAgICAgICAgc29ja2V0LmRlc3Ryb3koKTsKICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignTm8gaGVhZGVyIHJlY2VpdmVkIGZyb20gcHJveHkgQ09OTkVDVCByZXNwb25zZScpKTsKICAgICAgfQogICAgICBjb25zdCBmaXJzdExpbmVQYXJ0cyA9IGZpcnN0TGluZS5zcGxpdCgnICcpOwogICAgICBjb25zdCBzdGF0dXNDb2RlID0gK2ZpcnN0TGluZVBhcnRzWzFdOwogICAgICBjb25zdCBzdGF0dXNUZXh0ID0gZmlyc3RMaW5lUGFydHMuc2xpY2UoMikuam9pbignICcpOwogICAgICBjb25zdCBoZWFkZXJzID0ge307CiAgICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIGhlYWRlclBhcnRzKSB7CiAgICAgICAgaWYgKCFoZWFkZXIpIGNvbnRpbnVlOwogICAgICAgIGNvbnN0IGZpcnN0Q29sb24gPSBoZWFkZXIuaW5kZXhPZignOicpOwogICAgICAgIGlmIChmaXJzdENvbG9uID09PSAtMSkgewogICAgICAgICAgc29ja2V0LmRlc3Ryb3koKTsKICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKGBJbnZhbGlkIGhlYWRlciBmcm9tIHByb3h5IENPTk5FQ1QgcmVzcG9uc2U6ICIke2hlYWRlcn0iYCkpOwogICAgICAgIH0KICAgICAgICBjb25zdCBrZXkgPSBoZWFkZXIuc2xpY2UoMCwgZmlyc3RDb2xvbikudG9Mb3dlckNhc2UoKTsKICAgICAgICBjb25zdCB2YWx1ZSA9IGhlYWRlci5zbGljZShmaXJzdENvbG9uICsgMSkudHJpbVN0YXJ0KCk7CiAgICAgICAgY29uc3QgY3VycmVudCA9IGhlYWRlcnNba2V5XTsKICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnQgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICBoZWFkZXJzW2tleV0gPSBbY3VycmVudCwgdmFsdWVdOwogICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50KSkgewogICAgICAgICAgY3VycmVudC5wdXNoKHZhbHVlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaGVhZGVyc1trZXldID0gdmFsdWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGRlYnVnJDEoJ2dvdCBwcm94eSBzZXJ2ZXIgcmVzcG9uc2U6ICVvICVvJywgZmlyc3RMaW5lLCBoZWFkZXJzKTsKICAgICAgY2xlYW51cCgpOwogICAgICByZXNvbHZlKHsKICAgICAgICBjb25uZWN0OiB7CiAgICAgICAgICBzdGF0dXNDb2RlLAogICAgICAgICAgc3RhdHVzVGV4dCwKICAgICAgICAgIGhlYWRlcnMsCiAgICAgICAgfSwKICAgICAgICBidWZmZXJlZCwKICAgICAgfSk7CiAgICB9CgogICAgc29ja2V0Lm9uKCdlcnJvcicsIG9uZXJyb3IpOwogICAgc29ja2V0Lm9uKCdlbmQnLCBvbmVuZCk7CgogICAgcmVhZCgpOwogIH0pOwp9CgpmdW5jdGlvbiBfbnVsbGlzaENvYWxlc2NlJDEobGhzLCByaHNGbikgeyBpZiAobGhzICE9IG51bGwpIHsgcmV0dXJuIGxoczsgfSBlbHNlIHsgcmV0dXJuIHJoc0ZuKCk7IH0gfSBmdW5jdGlvbiBfb3B0aW9uYWxDaGFpbiQxKG9wcykgeyBsZXQgbGFzdEFjY2Vzc0xIUyA9IHVuZGVmaW5lZDsgbGV0IHZhbHVlID0gb3BzWzBdOyBsZXQgaSA9IDE7IHdoaWxlIChpIDwgb3BzLmxlbmd0aCkgeyBjb25zdCBvcCA9IG9wc1tpXTsgY29uc3QgZm4gPSBvcHNbaSArIDFdOyBpICs9IDI7IGlmICgob3AgPT09ICdvcHRpb25hbEFjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSAmJiB2YWx1ZSA9PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gaWYgKG9wID09PSAnYWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJykgeyBsYXN0QWNjZXNzTEhTID0gdmFsdWU7IHZhbHVlID0gZm4odmFsdWUpOyB9IGVsc2UgaWYgKG9wID09PSAnY2FsbCcgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSB7IHZhbHVlID0gZm4oKC4uLmFyZ3MpID0+IHZhbHVlLmNhbGwobGFzdEFjY2Vzc0xIUywgLi4uYXJncykpOyBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkOyB9IH0gcmV0dXJuIHZhbHVlOyB9CgpmdW5jdGlvbiBkZWJ1ZyguLi5hcmdzKSB7CiAgbG9nZ2VyLmxvZygnW2h0dHBzLXByb3h5LWFnZW50XScsIC4uLmFyZ3MpOwp9CgovKioKICogVGhlIGBIdHRwc1Byb3h5QWdlbnRgIGltcGxlbWVudHMgYW4gSFRUUCBBZ2VudCBzdWJjbGFzcyB0aGF0IGNvbm5lY3RzIHRvCiAqIHRoZSBzcGVjaWZpZWQgIkhUVFAocykgcHJveHkgc2VydmVyIiBpbiBvcmRlciB0byBwcm94eSBIVFRQUyByZXF1ZXN0cy4KICoKICogT3V0Z29pbmcgSFRUUCByZXF1ZXN0cyBhcmUgZmlyc3QgdHVubmVsZWQgdGhyb3VnaCB0aGUgcHJveHkgc2VydmVyIHVzaW5nIHRoZQogKiBgQ09OTkVDVGAgSFRUUCByZXF1ZXN0IG1ldGhvZCB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBzZXJ2ZXIsCiAqIGFuZCB0aGVuIHRoZSBwcm94eSBzZXJ2ZXIgY29ubmVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIHRhcmdldCBhbmQgaXNzdWVzIHRoZQogKiBIVFRQIHJlcXVlc3QgZnJvbSB0aGUgcHJveHkgc2VydmVyLgogKgogKiBgaHR0cHM6YCByZXF1ZXN0cyBoYXZlIHRoZWlyIHNvY2tldCBjb25uZWN0aW9uIHVwZ3JhZGVkIHRvIFRMUyBvbmNlCiAqIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBzZXJ2ZXIgaGFzIGJlZW4gZXN0YWJsaXNoZWQuCiAqLwpjbGFzcyBIdHRwc1Byb3h5QWdlbnQgZXh0ZW5kcyBBZ2VudCB7CiAgc3RhdGljIF9faW5pdFN0YXRpYygpIHt0aGlzLnByb3RvY29scyA9IFsnaHR0cCcsICdodHRwcyddOyB9CgogIGNvbnN0cnVjdG9yKHByb3h5LCBvcHRzKSB7CiAgICBzdXBlcihvcHRzKTsKICAgIHRoaXMub3B0aW9ucyA9IHt9OwogICAgdGhpcy5wcm94eSA9IHR5cGVvZiBwcm94eSA9PT0gJ3N0cmluZycgPyBuZXcgVVJMKHByb3h5KSA6IHByb3h5OwogICAgdGhpcy5wcm94eUhlYWRlcnMgPSBfbnVsbGlzaENvYWxlc2NlJDEoX29wdGlvbmFsQ2hhaW4kMShbb3B0cywgJ29wdGlvbmFsQWNjZXNzJywgXzIgPT4gXzIuaGVhZGVyc10pLCAoKSA9PiAoIHt9KSk7CiAgICBkZWJ1ZygnQ3JlYXRpbmcgbmV3IEh0dHBzUHJveHlBZ2VudCBpbnN0YW5jZTogJW8nLCB0aGlzLnByb3h5LmhyZWYpOwoKICAgIC8vIFRyaW0gb2ZmIHRoZSBicmFja2V0cyBmcm9tIElQdjYgYWRkcmVzc2VzCiAgICBjb25zdCBob3N0ID0gKHRoaXMucHJveHkuaG9zdG5hbWUgfHwgdGhpcy5wcm94eS5ob3N0KS5yZXBsYWNlKC9eXFt8XF0kL2csICcnKTsKICAgIGNvbnN0IHBvcnQgPSB0aGlzLnByb3h5LnBvcnQgPyBwYXJzZUludCh0aGlzLnByb3h5LnBvcnQsIDEwKSA6IHRoaXMucHJveHkucHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODA7CiAgICB0aGlzLmNvbm5lY3RPcHRzID0gewogICAgICAvLyBBdHRlbXB0IHRvIG5lZ290aWF0ZSBodHRwLzEuMSBmb3IgcHJveHkgc2VydmVycyB0aGF0IHN1cHBvcnQgaHR0cC8yCiAgICAgIEFMUE5Qcm90b2NvbHM6IFsnaHR0cC8xLjEnXSwKICAgICAgLi4uKG9wdHMgPyBvbWl0KG9wdHMsICdoZWFkZXJzJykgOiBudWxsKSwKICAgICAgaG9zdCwKICAgICAgcG9ydCwKICAgIH07CiAgfQoKICAvKioKICAgKiBDYWxsZWQgd2hlbiB0aGUgbm9kZS1jb3JlIEhUVFAgY2xpZW50IGxpYnJhcnkgaXMgY3JlYXRpbmcgYQogICAqIG5ldyBIVFRQIHJlcXVlc3QuCiAgICovCiAgYXN5bmMgY29ubmVjdChyZXEsIG9wdHMpIHsKICAgIGNvbnN0IHsgcHJveHkgfSA9IHRoaXM7CgogICAgaWYgKCFvcHRzLmhvc3QpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gImhvc3QiIHByb3ZpZGVkJyk7CiAgICB9CgogICAgLy8gQ3JlYXRlIGEgc29ja2V0IGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlci4KICAgIGxldCBzb2NrZXQ7CiAgICBpZiAocHJveHkucHJvdG9jb2wgPT09ICdodHRwczonKSB7CiAgICAgIGRlYnVnKCdDcmVhdGluZyBgdGxzLlNvY2tldGA6ICVvJywgdGhpcy5jb25uZWN0T3B0cyk7CiAgICAgIGNvbnN0IHNlcnZlcm5hbWUgPSB0aGlzLmNvbm5lY3RPcHRzLnNlcnZlcm5hbWUgfHwgdGhpcy5jb25uZWN0T3B0cy5ob3N0OwogICAgICBzb2NrZXQgPSB0bHMuY29ubmVjdCh7CiAgICAgICAgLi4udGhpcy5jb25uZWN0T3B0cywKICAgICAgICBzZXJ2ZXJuYW1lOiBzZXJ2ZXJuYW1lICYmIG5ldC5pc0lQKHNlcnZlcm5hbWUpID8gdW5kZWZpbmVkIDogc2VydmVybmFtZSwKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBkZWJ1ZygnQ3JlYXRpbmcgYG5ldC5Tb2NrZXRgOiAlbycsIHRoaXMuY29ubmVjdE9wdHMpOwogICAgICBzb2NrZXQgPSBuZXQuY29ubmVjdCh0aGlzLmNvbm5lY3RPcHRzKTsKICAgIH0KCiAgICBjb25zdCBoZWFkZXJzID0KICAgICAgdHlwZW9mIHRoaXMucHJveHlIZWFkZXJzID09PSAnZnVuY3Rpb24nID8gdGhpcy5wcm94eUhlYWRlcnMoKSA6IHsgLi4udGhpcy5wcm94eUhlYWRlcnMgfTsKICAgIGNvbnN0IGhvc3QgPSBuZXQuaXNJUHY2KG9wdHMuaG9zdCkgPyBgWyR7b3B0cy5ob3N0fV1gIDogb3B0cy5ob3N0OwogICAgbGV0IHBheWxvYWQgPSBgQ09OTkVDVCAke2hvc3R9OiR7b3B0cy5wb3J0fSBIVFRQLzEuMVxyXG5gOwoKICAgIC8vIEluamVjdCB0aGUgYFByb3h5LUF1dGhvcml6YXRpb25gIGhlYWRlciBpZiBuZWNlc3NhcnkuCiAgICBpZiAocHJveHkudXNlcm5hbWUgfHwgcHJveHkucGFzc3dvcmQpIHsKICAgICAgY29uc3QgYXV0aCA9IGAke2RlY29kZVVSSUNvbXBvbmVudChwcm94eS51c2VybmFtZSl9OiR7ZGVjb2RlVVJJQ29tcG9uZW50KHByb3h5LnBhc3N3b3JkKX1gOwogICAgICBoZWFkZXJzWydQcm94eS1BdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShhdXRoKS50b1N0cmluZygnYmFzZTY0Jyl9YDsKICAgIH0KCiAgICBoZWFkZXJzLkhvc3QgPSBgJHtob3N0fToke29wdHMucG9ydH1gOwoKICAgIGlmICghaGVhZGVyc1snUHJveHktQ29ubmVjdGlvbiddKSB7CiAgICAgIGhlYWRlcnNbJ1Byb3h5LUNvbm5lY3Rpb24nXSA9IHRoaXMua2VlcEFsaXZlID8gJ0tlZXAtQWxpdmUnIDogJ2Nsb3NlJzsKICAgIH0KICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKSkgewogICAgICBwYXlsb2FkICs9IGAke25hbWV9OiAke2hlYWRlcnNbbmFtZV19XHJcbmA7CiAgICB9CgogICAgY29uc3QgcHJveHlSZXNwb25zZVByb21pc2UgPSBwYXJzZVByb3h5UmVzcG9uc2Uoc29ja2V0KTsKCiAgICBzb2NrZXQud3JpdGUoYCR7cGF5bG9hZH1cclxuYCk7CgogICAgY29uc3QgeyBjb25uZWN0LCBidWZmZXJlZCB9ID0gYXdhaXQgcHJveHlSZXNwb25zZVByb21pc2U7CiAgICByZXEuZW1pdCgncHJveHlDb25uZWN0JywgY29ubmVjdCk7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50CiAgICAvLyBAdHMtaWdub3JlIE5vdCBFdmVudEVtaXR0ZXIgaW4gTm9kZSB0eXBlcwogICAgdGhpcy5lbWl0KCdwcm94eUNvbm5lY3QnLCBjb25uZWN0LCByZXEpOwoKICAgIGlmIChjb25uZWN0LnN0YXR1c0NvZGUgPT09IDIwMCkgewogICAgICByZXEub25jZSgnc29ja2V0JywgcmVzdW1lKTsKCiAgICAgIGlmIChvcHRzLnNlY3VyZUVuZHBvaW50KSB7CiAgICAgICAgLy8gVGhlIHByb3h5IGlzIGNvbm5lY3RpbmcgdG8gYSBUTFMgc2VydmVyLCBzbyB1cGdyYWRlCiAgICAgICAgLy8gdGhpcyBzb2NrZXQgY29ubmVjdGlvbiB0byBhIFRMUyBjb25uZWN0aW9uLgogICAgICAgIGRlYnVnKCdVcGdyYWRpbmcgc29ja2V0IGNvbm5lY3Rpb24gdG8gVExTJyk7CiAgICAgICAgY29uc3Qgc2VydmVybmFtZSA9IG9wdHMuc2VydmVybmFtZSB8fCBvcHRzLmhvc3Q7CiAgICAgICAgcmV0dXJuIHRscy5jb25uZWN0KHsKICAgICAgICAgIC4uLm9taXQob3B0cywgJ2hvc3QnLCAncGF0aCcsICdwb3J0JyksCiAgICAgICAgICBzb2NrZXQsCiAgICAgICAgICBzZXJ2ZXJuYW1lOiBuZXQuaXNJUChzZXJ2ZXJuYW1lKSA/IHVuZGVmaW5lZCA6IHNlcnZlcm5hbWUsCiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIHJldHVybiBzb2NrZXQ7CiAgICB9CgogICAgLy8gU29tZSBvdGhlciBzdGF0dXMgY29kZSB0aGF0J3Mgbm90IDIwMC4uLiBuZWVkIHRvIHJlLXBsYXkgdGhlIEhUVFAKICAgIC8vIGhlYWRlciAiZGF0YSIgZXZlbnRzIG9udG8gdGhlIHNvY2tldCBvbmNlIHRoZSBIVFRQIG1hY2hpbmVyeSBpcwogICAgLy8gYXR0YWNoZWQgc28gdGhhdCB0aGUgbm9kZSBjb3JlIGBodHRwYCBjYW4gcGFyc2UgYW5kIGhhbmRsZSB0aGUKICAgIC8vIGVycm9yIHN0YXR1cyBjb2RlLgoKICAgIC8vIENsb3NlIHRoZSBvcmlnaW5hbCBzb2NrZXQsIGFuZCBhIG5ldyAiZmFrZSIgc29ja2V0IGlzIHJldHVybmVkCiAgICAvLyBpbnN0ZWFkLCBzbyB0aGF0IHRoZSBwcm94eSBkb2Vzbid0IGdldCB0aGUgSFRUUCByZXF1ZXN0CiAgICAvLyB3cml0dGVuIHRvIGl0ICh3aGljaCBtYXkgY29udGFpbiBgQXV0aG9yaXphdGlvbmAgaGVhZGVycyBvciBvdGhlcgogICAgLy8gc2Vuc2l0aXZlIGRhdGEpLgogICAgLy8KICAgIC8vIFNlZTogaHR0cHM6Ly9oYWNrZXJvbmUuY29tL3JlcG9ydHMvNTQxNTAyCiAgICBzb2NrZXQuZGVzdHJveSgpOwoKICAgIGNvbnN0IGZha2VTb2NrZXQgPSBuZXcgbmV0LlNvY2tldCh7IHdyaXRhYmxlOiBmYWxzZSB9KTsKICAgIGZha2VTb2NrZXQucmVhZGFibGUgPSB0cnVlOwoKICAgIC8vIE5lZWQgdG8gd2FpdCBmb3IgdGhlICJzb2NrZXQiIGV2ZW50IHRvIHJlLXBsYXkgdGhlICJkYXRhIiBldmVudHMuCiAgICByZXEub25jZSgnc29ja2V0JywgKHMpID0+IHsKICAgICAgZGVidWcoJ1JlcGxheWluZyBwcm94eSBidWZmZXIgZm9yIGZhaWxlZCByZXF1ZXN0Jyk7CiAgICAgIC8vIFJlcGxheSB0aGUgImJ1ZmZlcmVkIiBCdWZmZXIgb250byB0aGUgZmFrZSBgc29ja2V0YCwgc2luY2UgYXQKICAgICAgLy8gdGhpcyBwb2ludCB0aGUgSFRUUCBtb2R1bGUgbWFjaGluZXJ5IGhhcyBiZWVuIGhvb2tlZCB1cCBmb3IKICAgICAgLy8gdGhlIHVzZXIuCiAgICAgIHMucHVzaChidWZmZXJlZCk7CiAgICAgIHMucHVzaChudWxsKTsKICAgIH0pOwoKICAgIHJldHVybiBmYWtlU29ja2V0OwogIH0KfSBIdHRwc1Byb3h5QWdlbnQuX19pbml0U3RhdGljKCk7CgpmdW5jdGlvbiByZXN1bWUoc29ja2V0KSB7CiAgc29ja2V0LnJlc3VtZSgpOwp9CgpmdW5jdGlvbiBvbWl0KAogIG9iaiwKICAuLi5rZXlzCikKCiB7CiAgY29uc3QgcmV0ID0ge30KCjsKICBsZXQga2V5OwogIGZvciAoa2V5IGluIG9iaikgewogICAgaWYgKCFrZXlzLmluY2x1ZGVzKGtleSkpIHsKICAgICAgcmV0W2tleV0gPSBvYmpba2V5XTsKICAgIH0KICB9CiAgcmV0dXJuIHJldDsKfQoKZnVuY3Rpb24gX251bGxpc2hDb2FsZXNjZShsaHMsIHJoc0ZuKSB7IGlmIChsaHMgIT0gbnVsbCkgeyByZXR1cm4gbGhzOyB9IGVsc2UgeyByZXR1cm4gcmhzRm4oKTsgfSB9Ci8vIEVzdGltYXRlZCBtYXhpbXVtIHNpemUgZm9yIHJlYXNvbmFibGUgc3RhbmRhbG9uZSBldmVudApjb25zdCBHWklQX1RIUkVTSE9MRCA9IDEwMjQgKiAzMjsKCi8qKgogKiBHZXRzIGEgc3RyZWFtIGZyb20gYSBVaW50OEFycmF5IG9yIHN0cmluZwogKiBSZWFkYWJsZS5mcm9tIGlzIGlkZWFsIGJ1dCB3YXMgYWRkZWQgaW4gbm9kZS5qcyB2MTIuMy4wIGFuZCB2MTAuMTcuMAogKi8KZnVuY3Rpb24gc3RyZWFtRnJvbUJvZHkoYm9keSkgewogIHJldHVybiBuZXcgUmVhZGFibGUoewogICAgcmVhZCgpIHsKICAgICAgdGhpcy5wdXNoKGJvZHkpOwogICAgICB0aGlzLnB1c2gobnVsbCk7CiAgICB9LAogIH0pOwp9CgovKioKICogQ3JlYXRlcyBhIFRyYW5zcG9ydCB0aGF0IHVzZXMgbmF0aXZlIHRoZSBuYXRpdmUgJ2h0dHAnIGFuZCAnaHR0cHMnIG1vZHVsZXMgdG8gc2VuZCBldmVudHMgdG8gU2VudHJ5LgogKi8KZnVuY3Rpb24gbWFrZU5vZGVUcmFuc3BvcnQob3B0aW9ucykgewogIGxldCB1cmxTZWdtZW50czsKCiAgdHJ5IHsKICAgIHVybFNlZ21lbnRzID0gbmV3IFVSTChvcHRpb25zLnVybCk7CiAgfSBjYXRjaCAoZSkgewogICAgY29uc29sZVNhbmRib3goKCkgPT4gewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZQogICAgICBjb25zb2xlLndhcm4oCiAgICAgICAgJ1tAc2VudHJ5L25vZGVdOiBJbnZhbGlkIGRzbiBvciB0dW5uZWwgb3B0aW9uLCB3aWxsIG5vdCBzZW5kIGFueSBldmVudHMuIFRoZSB0dW5uZWwgb3B0aW9uIG11c3QgYmUgYSBmdWxsIFVSTCB3aGVuIHVzZWQuJywKICAgICAgKTsKICAgIH0pOwogICAgcmV0dXJuIGNyZWF0ZVRyYW5zcG9ydChvcHRpb25zLCAoKSA9PiBQcm9taXNlLnJlc29sdmUoe30pKTsKICB9CgogIGNvbnN0IGlzSHR0cHMgPSB1cmxTZWdtZW50cy5wcm90b2NvbCA9PT0gJ2h0dHBzOic7CgogIC8vIFByb3h5IHByaW9yaXRpemF0aW9uOiBodHRwID0+IGBvcHRpb25zLnByb3h5YCB8IGBwcm9jZXNzLmVudi5odHRwX3Byb3h5YAogIC8vIFByb3h5IHByaW9yaXRpemF0aW9uOiBodHRwcyA9PiBgb3B0aW9ucy5wcm94eWAgfCBgcHJvY2Vzcy5lbnYuaHR0cHNfcHJveHlgIHwgYHByb2Nlc3MuZW52Lmh0dHBfcHJveHlgCiAgY29uc3QgcHJveHkgPSBhcHBseU5vUHJveHlPcHRpb24oCiAgICB1cmxTZWdtZW50cywKICAgIG9wdGlvbnMucHJveHkgfHwgKGlzSHR0cHMgPyBwcm9jZXNzLmVudi5odHRwc19wcm94eSA6IHVuZGVmaW5lZCkgfHwgcHJvY2Vzcy5lbnYuaHR0cF9wcm94eSwKICApOwoKICBjb25zdCBuYXRpdmVIdHRwTW9kdWxlID0gaXNIdHRwcyA/IGh0dHBzIDogaHR0cDsKICBjb25zdCBrZWVwQWxpdmUgPSBvcHRpb25zLmtlZXBBbGl2ZSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBvcHRpb25zLmtlZXBBbGl2ZTsKCiAgLy8gVE9ETyh2Nyk6IEV2YWx1YXRlIGlmIHdlIGNhbiBzZXQga2VlcEFsaXZlIHRvIHRydWUuIFRoaXMgd291bGQgaW52b2x2ZSB0ZXN0aW5nIGZvciBtZW1vcnkgbGVha3MgaW4gb2xkZXIgbm9kZQogIC8vIHZlcnNpb25zKD49IDgpIGFzIHRoZXkgaGFkIG1lbW9yeSBsZWFrcyB3aGVuIHVzaW5nIGl0OiAjMjU1NQogIGNvbnN0IGFnZW50ID0gcHJveHkKICAgID8gKG5ldyBIdHRwc1Byb3h5QWdlbnQocHJveHkpICkKICAgIDogbmV3IG5hdGl2ZUh0dHBNb2R1bGUuQWdlbnQoeyBrZWVwQWxpdmUsIG1heFNvY2tldHM6IDMwLCB0aW1lb3V0OiAyMDAwIH0pOwoKICBjb25zdCByZXF1ZXN0RXhlY3V0b3IgPSBjcmVhdGVSZXF1ZXN0RXhlY3V0b3Iob3B0aW9ucywgX251bGxpc2hDb2FsZXNjZShvcHRpb25zLmh0dHBNb2R1bGUsICgpID0+ICggbmF0aXZlSHR0cE1vZHVsZSkpLCBhZ2VudCk7CiAgcmV0dXJuIGNyZWF0ZVRyYW5zcG9ydChvcHRpb25zLCByZXF1ZXN0RXhlY3V0b3IpOwp9CgovKioKICogSG9ub3JzIHRoZSBgbm9fcHJveHlgIGVudiB2YXJpYWJsZSB3aXRoIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRvIGFsbG93IGZvciBob3N0cyBleGNsdXNpb24uCiAqCiAqIEBwYXJhbSB0cmFuc3BvcnRVcmwgVGhlIFVSTCB0aGUgdHJhbnNwb3J0IGludGVuZHMgdG8gc2VuZCBldmVudHMgdG8uCiAqIEBwYXJhbSBwcm94eSBUaGUgY2xpZW50IGNvbmZpZ3VyZWQgcHJveHkuCiAqIEByZXR1cm5zIEEgcHJveHkgdGhlIHRyYW5zcG9ydCBzaG91bGQgdXNlLgogKi8KZnVuY3Rpb24gYXBwbHlOb1Byb3h5T3B0aW9uKHRyYW5zcG9ydFVybFNlZ21lbnRzLCBwcm94eSkgewogIGNvbnN0IHsgbm9fcHJveHkgfSA9IHByb2Nlc3MuZW52OwoKICBjb25zdCB1cmxJc0V4ZW1wdEZyb21Qcm94eSA9CiAgICBub19wcm94eSAmJgogICAgbm9fcHJveHkKICAgICAgLnNwbGl0KCcsJykKICAgICAgLnNvbWUoCiAgICAgICAgZXhlbXB0aW9uID0+IHRyYW5zcG9ydFVybFNlZ21lbnRzLmhvc3QuZW5kc1dpdGgoZXhlbXB0aW9uKSB8fCB0cmFuc3BvcnRVcmxTZWdtZW50cy5ob3N0bmFtZS5lbmRzV2l0aChleGVtcHRpb24pLAogICAgICApOwoKICBpZiAodXJsSXNFeGVtcHRGcm9tUHJveHkpIHsKICAgIHJldHVybiB1bmRlZmluZWQ7CiAgfSBlbHNlIHsKICAgIHJldHVybiBwcm94eTsKICB9Cn0KCi8qKgogKiBDcmVhdGVzIGEgUmVxdWVzdEV4ZWN1dG9yIHRvIGJlIHVzZWQgd2l0aCBgY3JlYXRlVHJhbnNwb3J0YC4KICovCmZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3RFeGVjdXRvcigKICBvcHRpb25zLAogIGh0dHBNb2R1bGUsCiAgYWdlbnQsCikgewogIGNvbnN0IHsgaG9zdG5hbWUsIHBhdGhuYW1lLCBwb3J0LCBwcm90b2NvbCwgc2VhcmNoIH0gPSBuZXcgVVJMKG9wdGlvbnMudXJsKTsKICByZXR1cm4gZnVuY3Rpb24gbWFrZVJlcXVlc3QocmVxdWVzdCkgewogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgbGV0IGJvZHkgPSBzdHJlYW1Gcm9tQm9keShyZXF1ZXN0LmJvZHkpOwoKICAgICAgY29uc3QgaGVhZGVycyA9IHsgLi4ub3B0aW9ucy5oZWFkZXJzIH07CgogICAgICBpZiAocmVxdWVzdC5ib2R5Lmxlbmd0aCA+IEdaSVBfVEhSRVNIT0xEKSB7CiAgICAgICAgaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddID0gJ2d6aXAnOwogICAgICAgIGJvZHkgPSBib2R5LnBpcGUoY3JlYXRlR3ppcCgpKTsKICAgICAgfQoKICAgICAgY29uc3QgcmVxID0gaHR0cE1vZHVsZS5yZXF1ZXN0KAogICAgICAgIHsKICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAogICAgICAgICAgYWdlbnQsCiAgICAgICAgICBoZWFkZXJzLAogICAgICAgICAgaG9zdG5hbWUsCiAgICAgICAgICBwYXRoOiBgJHtwYXRobmFtZX0ke3NlYXJjaH1gLAogICAgICAgICAgcG9ydCwKICAgICAgICAgIHByb3RvY29sLAogICAgICAgICAgY2E6IG9wdGlvbnMuY2FDZXJ0cywKICAgICAgICB9LAogICAgICAgIHJlcyA9PiB7CiAgICAgICAgICByZXMub24oJ2RhdGEnLCAoKSA9PiB7CiAgICAgICAgICAgIC8vIERyYWluIHNvY2tldAogICAgICAgICAgfSk7CgogICAgICAgICAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7CiAgICAgICAgICAgIC8vIERyYWluIHNvY2tldAogICAgICAgICAgfSk7CgogICAgICAgICAgcmVzLnNldEVuY29kaW5nKCd1dGY4Jyk7CgogICAgICAgICAgLy8gIktleS12YWx1ZSBwYWlycyBvZiBoZWFkZXIgbmFtZXMgYW5kIHZhbHVlcy4gSGVhZGVyIG5hbWVzIGFyZSBsb3dlci1jYXNlZC4iCiAgICAgICAgICAvLyBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVycwogICAgICAgICAgY29uc3QgcmV0cnlBZnRlckhlYWRlciA9IF9udWxsaXNoQ29hbGVzY2UocmVzLmhlYWRlcnNbJ3JldHJ5LWFmdGVyJ10sICgpID0+ICggbnVsbCkpOwogICAgICAgICAgY29uc3QgcmF0ZUxpbWl0c0hlYWRlciA9IF9udWxsaXNoQ29hbGVzY2UocmVzLmhlYWRlcnNbJ3gtc2VudHJ5LXJhdGUtbGltaXRzJ10sICgpID0+ICggbnVsbCkpOwoKICAgICAgICAgIHJlc29sdmUoewogICAgICAgICAgICBzdGF0dXNDb2RlOiByZXMuc3RhdHVzQ29kZSwKICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICdyZXRyeS1hZnRlcic6IHJldHJ5QWZ0ZXJIZWFkZXIsCiAgICAgICAgICAgICAgJ3gtc2VudHJ5LXJhdGUtbGltaXRzJzogQXJyYXkuaXNBcnJheShyYXRlTGltaXRzSGVhZGVyKSA/IHJhdGVMaW1pdHNIZWFkZXJbMF0gOiByYXRlTGltaXRzSGVhZGVyLAogICAgICAgICAgICB9LAogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgKTsKCiAgICAgIHJlcS5vbignZXJyb3InLCByZWplY3QpOwogICAgICBib2R5LnBpcGUocmVxKTsKICAgIH0pOwogIH07Cn0KCmZ1bmN0aW9uIF9vcHRpb25hbENoYWluKG9wcykgeyBsZXQgbGFzdEFjY2Vzc0xIUyA9IHVuZGVmaW5lZDsgbGV0IHZhbHVlID0gb3BzWzBdOyBsZXQgaSA9IDE7IHdoaWxlIChpIDwgb3BzLmxlbmd0aCkgeyBjb25zdCBvcCA9IG9wc1tpXTsgY29uc3QgZm4gPSBvcHNbaSArIDFdOyBpICs9IDI7IGlmICgob3AgPT09ICdvcHRpb25hbEFjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSAmJiB2YWx1ZSA9PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gaWYgKG9wID09PSAnYWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJykgeyBsYXN0QWNjZXNzTEhTID0gdmFsdWU7IHZhbHVlID0gZm4odmFsdWUpOyB9IGVsc2UgaWYgKG9wID09PSAnY2FsbCcgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSB7IHZhbHVlID0gZm4oKC4uLmFyZ3MpID0+IHZhbHVlLmNhbGwobGFzdEFjY2Vzc0xIUywgLi4uYXJncykpOyBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkOyB9IH0gcmV0dXJuIHZhbHVlOyB9CmNvbnN0IG9wdGlvbnMgPSB3b3JrZXJEYXRhOwpsZXQgc2Vzc2lvbjsKbGV0IGhhc1NlbnRBbnJFdmVudCA9IGZhbHNlOwoKZnVuY3Rpb24gbG9nKG1zZykgewogIGlmIChvcHRpb25zLmRlYnVnKSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZQogICAgY29uc29sZS5sb2coYFtBTlIgV29ya2VyXSAke21zZ31gKTsKICB9Cn0KCmNvbnN0IHVybCA9IGdldEVudmVsb3BlRW5kcG9pbnRXaXRoVXJsRW5jb2RlZEF1dGgob3B0aW9ucy5kc24pOwpjb25zdCB0cmFuc3BvcnQgPSBtYWtlTm9kZVRyYW5zcG9ydCh7CiAgdXJsLAogIHJlY29yZERyb3BwZWRFdmVudDogKCkgPT4gewogICAgLy8KICB9LAp9KTsKCmFzeW5jIGZ1bmN0aW9uIHNlbmRBYm5vcm1hbFNlc3Npb24oKSB7CiAgLy8gb2Ygd2UgaGF2ZSBhbiBleGlzdGluZyBzZXNzaW9uIHBhc3NlZCBmcm9tIHRoZSBtYWluIHRocmVhZCwgc2VuZCBpdCBhcyBhYm5vcm1hbAogIGlmIChzZXNzaW9uKSB7CiAgICBsb2coJ1NlbmRpbmcgYWJub3JtYWwgc2Vzc2lvbicpOwogICAgdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCB7IHN0YXR1czogJ2Fibm9ybWFsJywgYWJub3JtYWxfbWVjaGFuaXNtOiAnYW5yX2ZvcmVncm91bmQnIH0pOwoKICAgIGNvbnN0IGVudmVsb3BlID0gY3JlYXRlU2Vzc2lvbkVudmVsb3BlKHNlc3Npb24sIG9wdGlvbnMuZHNuLCBvcHRpb25zLnNka01ldGFkYXRhKTsKICAgIC8vIExvZyB0aGUgZW52ZWxvcGUgc28gdG8gYWlkIGluIHRlc3RpbmcKICAgIGxvZyhKU09OLnN0cmluZ2lmeShlbnZlbG9wZSkpOwoKICAgIGF3YWl0IHRyYW5zcG9ydC5zZW5kKGVudmVsb3BlKTsKCiAgICB0cnkgewogICAgICAvLyBOb3RpZnkgdGhlIG1haW4gcHJvY2VzcyB0aGF0IHRoZSBzZXNzaW9uIGhhcyBlbmRlZCBzbyB0aGUgc2Vzc2lvbiBjYW4gYmUgY2xlYXJlZCBmcm9tIHRoZSBzY29wZQogICAgICBfb3B0aW9uYWxDaGFpbihbcGFyZW50UG9ydCwgJ29wdGlvbmFsQWNjZXNzJywgXzIgPT4gXzIucG9zdE1lc3NhZ2UsICdjYWxsJywgXzMgPT4gXzMoJ3Nlc3Npb24tZW5kZWQnKV0pOwogICAgfSBjYXRjaCAoXykgewogICAgICAvLyBpZ25vcmUKICAgIH0KICB9Cn0KCmxvZygnU3RhcnRlZCcpOwoKZnVuY3Rpb24gcHJlcGFyZVN0YWNrRnJhbWVzKHN0YWNrRnJhbWVzKSB7CiAgaWYgKCFzdGFja0ZyYW1lcykgewogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CgogIC8vIFN0cmlwIFNlbnRyeSBmcmFtZXMgYW5kIHJldmVyc2UgdGhlIHN0YWNrIGZyYW1lcyBzbyB0aGV5IGFyZSBpbiB0aGUgY29ycmVjdCBvcmRlcgogIGNvbnN0IHN0cmlwcGVkRnJhbWVzID0gc3RyaXBTZW50cnlGcmFtZXNBbmRSZXZlcnNlKHN0YWNrRnJhbWVzKTsKCiAgLy8gSWYgd2UgaGF2ZSBhbiBhcHAgcm9vdCBwYXRoLCByZXdyaXRlIHRoZSBmaWxlbmFtZXMgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIGFwcCByb290CiAgaWYgKG9wdGlvbnMuYXBwUm9vdFBhdGgpIHsKICAgIGZvciAoY29uc3QgZnJhbWUgb2Ygc3RyaXBwZWRGcmFtZXMpIHsKICAgICAgaWYgKCFmcmFtZS5maWxlbmFtZSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CgogICAgICBmcmFtZS5maWxlbmFtZSA9IG5vcm1hbGl6ZVVybFRvQmFzZShmcmFtZS5maWxlbmFtZSwgb3B0aW9ucy5hcHBSb290UGF0aCk7CiAgICB9CiAgfQoKICByZXR1cm4gc3RyaXBwZWRGcmFtZXM7Cn0KCmFzeW5jIGZ1bmN0aW9uIHNlbmRBbnJFdmVudChmcmFtZXMsIHRyYWNlQ29udGV4dCkgewogIGlmIChoYXNTZW50QW5yRXZlbnQpIHsKICAgIHJldHVybjsKICB9CgogIGhhc1NlbnRBbnJFdmVudCA9IHRydWU7CgogIGF3YWl0IHNlbmRBYm5vcm1hbFNlc3Npb24oKTsKCiAgbG9nKCdTZW5kaW5nIGV2ZW50Jyk7CgogIGNvbnN0IGV2ZW50ID0gewogICAgZXZlbnRfaWQ6IHV1aWQ0KCksCiAgICBjb250ZXh0czogeyAuLi5vcHRpb25zLmNvbnRleHRzLCB0cmFjZTogdHJhY2VDb250ZXh0IH0sCiAgICByZWxlYXNlOiBvcHRpb25zLnJlbGVhc2UsCiAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCwKICAgIGRpc3Q6IG9wdGlvbnMuZGlzdCwKICAgIHBsYXRmb3JtOiAnbm9kZScsCiAgICBsZXZlbDogJ2Vycm9yJywKICAgIGV4Y2VwdGlvbjogewogICAgICB2YWx1ZXM6IFsKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAnQXBwbGljYXRpb25Ob3RSZXNwb25kaW5nJywKICAgICAgICAgIHZhbHVlOiBgQXBwbGljYXRpb24gTm90IFJlc3BvbmRpbmcgZm9yIGF0IGxlYXN0ICR7b3B0aW9ucy5hbnJUaHJlc2hvbGR9IG1zYCwKICAgICAgICAgIHN0YWNrdHJhY2U6IHsgZnJhbWVzOiBwcmVwYXJlU3RhY2tGcmFtZXMoZnJhbWVzKSB9LAogICAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBVSSBkb2Vzbid0IHNheSAnQ3Jhc2hlZCBpbicgZm9yIHRoZSBzdGFjayB0cmFjZQogICAgICAgICAgbWVjaGFuaXNtOiB7IHR5cGU6ICdBTlInIH0sCiAgICAgICAgfSwKICAgICAgXSwKICAgIH0sCiAgICB0YWdzOiBvcHRpb25zLnN0YXRpY1RhZ3MsCiAgfTsKCiAgY29uc3QgZW52ZWxvcGUgPSBjcmVhdGVFdmVudEVudmVsb3BlKGV2ZW50LCBvcHRpb25zLmRzbiwgb3B0aW9ucy5zZGtNZXRhZGF0YSk7CiAgLy8gTG9nIHRoZSBlbnZlbG9wZSBzbyB0byBhaWQgaW4gdGVzdGluZwogIGxvZyhKU09OLnN0cmluZ2lmeShlbnZlbG9wZSkpOwoKICBhd2FpdCB0cmFuc3BvcnQuc2VuZChlbnZlbG9wZSk7CiAgYXdhaXQgdHJhbnNwb3J0LmZsdXNoKDIwMDApOwoKICAvLyBEZWxheSBmb3IgNSBzZWNvbmRzIHNvIHRoYXQgc3RkaW8gY2FuIGZsdXNoIGluIHRoZSBtYWluIGV2ZW50IGxvb3AgZXZlciByZXN0YXJ0cy4KICAvLyBUaGlzIGlzIG1haW5seSBmb3IgdGhlIGJlbmVmaXQgb2YgbG9nZ2luZy9kZWJ1Z2dpbmcgaXNzdWVzLgogIHNldFRpbWVvdXQoKCkgPT4gewogICAgcHJvY2Vzcy5leGl0KDApOwogIH0sIDUwMDApOwp9CgpsZXQgZGVidWdnZXJQYXVzZTsKCmlmIChvcHRpb25zLmNhcHR1cmVTdGFja1RyYWNlKSB7CiAgbG9nKCdDb25uZWN0aW5nIHRvIGRlYnVnZ2VyJyk7CgogIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbigpIDsKICBzZXNzaW9uLmNvbm5lY3RUb01haW5UaHJlYWQoKTsKCiAgbG9nKCdDb25uZWN0ZWQgdG8gZGVidWdnZXInKTsKCiAgLy8gQ29sbGVjdCBzY3JpcHRJZCAtPiB1cmwgbWFwIHNvIHdlIGNhbiBsb29rIHVwIHRoZSBmaWxlbmFtZXMgbGF0ZXIKICBjb25zdCBzY3JpcHRzID0gbmV3IE1hcCgpOwoKICBzZXNzaW9uLm9uKCdEZWJ1Z2dlci5zY3JpcHRQYXJzZWQnLCBldmVudCA9PiB7CiAgICBzY3JpcHRzLnNldChldmVudC5wYXJhbXMuc2NyaXB0SWQsIGV2ZW50LnBhcmFtcy51cmwpOwogIH0pOwoKICBzZXNzaW9uLm9uKCdEZWJ1Z2dlci5wYXVzZWQnLCBldmVudCA9PiB7CiAgICBpZiAoZXZlbnQucGFyYW1zLnJlYXNvbiAhPT0gJ290aGVyJykgewogICAgICByZXR1cm47CiAgICB9CgogICAgdHJ5IHsKICAgICAgbG9nKCdEZWJ1Z2dlciBwYXVzZWQnKTsKCiAgICAgIC8vIGNvcHkgdGhlIGZyYW1lcwogICAgICBjb25zdCBjYWxsRnJhbWVzID0gWy4uLmV2ZW50LnBhcmFtcy5jYWxsRnJhbWVzXTsKCiAgICAgIGNvbnN0IGdldE1vZHVsZU5hbWUgPSBvcHRpb25zLmFwcFJvb3RQYXRoID8gY3JlYXRlR2V0TW9kdWxlRnJvbUZpbGVuYW1lKG9wdGlvbnMuYXBwUm9vdFBhdGgpIDogKCkgPT4gdW5kZWZpbmVkOwogICAgICBjb25zdCBzdGFja0ZyYW1lcyA9IGNhbGxGcmFtZXMubWFwKGZyYW1lID0+CiAgICAgICAgY2FsbEZyYW1lVG9TdGFja0ZyYW1lKGZyYW1lLCBzY3JpcHRzLmdldChmcmFtZS5sb2NhdGlvbi5zY3JpcHRJZCksIGdldE1vZHVsZU5hbWUpLAogICAgICApOwoKICAgICAgLy8gRXZhbHVhdGUgYSBzY3JpcHQgaW4gdGhlIGN1cnJlbnRseSBwYXVzZWQgY29udGV4dAogICAgICBzZXNzaW9uLnBvc3QoCiAgICAgICAgJ1J1bnRpbWUuZXZhbHVhdGUnLAogICAgICAgIHsKICAgICAgICAgIC8vIEdyYWIgdGhlIHRyYWNlIGNvbnRleHQgZnJvbSB0aGUgY3VycmVudCBzY29wZQogICAgICAgICAgZXhwcmVzc2lvbjoKICAgICAgICAgICAgJ2NvbnN0IGN0eCA9IF9fU0VOVFJZX18uaHViLmdldFNjb3BlKCkuZ2V0UHJvcGFnYXRpb25Db250ZXh0KCk7IGN0eC50cmFjZUlkICsgIi0iICsgY3R4LnNwYW5JZCArICItIiArIGN0eC5wYXJlbnRTcGFuSWQnLAogICAgICAgICAgLy8gRG9uJ3QgcmUtdHJpZ2dlciB0aGUgZGVidWdnZXIgaWYgdGhpcyBjYXVzZXMgYW4gZXJyb3IKICAgICAgICAgIHNpbGVudDogdHJ1ZSwKICAgICAgICB9LAogICAgICAgIChfLCBwYXJhbSkgPT4gewogICAgICAgICAgY29uc3QgdHJhY2VJZCA9IHBhcmFtICYmIHBhcmFtLnJlc3VsdCA/IChwYXJhbS5yZXN1bHQudmFsdWUgKSA6ICctLSc7CiAgICAgICAgICBjb25zdCBbdHJhY2VfaWQsIHNwYW5faWQsIHBhcmVudF9zcGFuX2lkXSA9IHRyYWNlSWQuc3BsaXQoJy0nKSA7CgogICAgICAgICAgc2Vzc2lvbi5wb3N0KCdEZWJ1Z2dlci5yZXN1bWUnKTsKICAgICAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIuZGlzYWJsZScpOwoKICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBfb3B0aW9uYWxDaGFpbihbdHJhY2VfaWQsICdvcHRpb25hbEFjY2VzcycsIF80ID0+IF80Lmxlbmd0aF0pICYmIF9vcHRpb25hbENoYWluKFtzcGFuX2lkLCAnb3B0aW9uYWxBY2Nlc3MnLCBfNSA9PiBfNS5sZW5ndGhdKSA/IHsgdHJhY2VfaWQsIHNwYW5faWQsIHBhcmVudF9zcGFuX2lkIH0gOiB1bmRlZmluZWQ7CiAgICAgICAgICBzZW5kQW5yRXZlbnQoc3RhY2tGcmFtZXMsIGNvbnRleHQpLnRoZW4obnVsbCwgKCkgPT4gewogICAgICAgICAgICBsb2coJ1NlbmRpbmcgQU5SIGV2ZW50IGZhaWxlZC4nKTsKICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIucmVzdW1lJyk7CiAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIuZGlzYWJsZScpOwogICAgICB0aHJvdyBlOwogICAgfQogIH0pOwoKICBkZWJ1Z2dlclBhdXNlID0gKCkgPT4gewogICAgdHJ5IHsKICAgICAgc2Vzc2lvbi5wb3N0KCdEZWJ1Z2dlci5lbmFibGUnLCAoKSA9PiB7CiAgICAgICAgc2Vzc2lvbi5wb3N0KCdEZWJ1Z2dlci5wYXVzZScpOwogICAgICB9KTsKICAgIH0gY2F0Y2ggKF8pIHsKICAgICAgLy8KICAgIH0KICB9Owp9CgpmdW5jdGlvbiBjcmVhdGVIclRpbWVyKCkgewogIC8vIFRPRE8gKHY4KTogV2UgY2FuIHVzZSBwcm9jZXNzLmhydGltZS5iaWdpbnQoKSBhZnRlciB3ZSBkcm9wIG5vZGUgdjgKICBsZXQgbGFzdFBvbGwgPSBwcm9jZXNzLmhydGltZSgpOwoKICByZXR1cm4gewogICAgZ2V0VGltZU1zOiAoKSA9PiB7CiAgICAgIGNvbnN0IFtzZWNvbmRzLCBuYW5vU2Vjb25kc10gPSBwcm9jZXNzLmhydGltZShsYXN0UG9sbCk7CiAgICAgIHJldHVybiBNYXRoLmZsb29yKHNlY29uZHMgKiAxZTMgKyBuYW5vU2Vjb25kcyAvIDFlNik7CiAgICB9LAogICAgcmVzZXQ6ICgpID0+IHsKICAgICAgbGFzdFBvbGwgPSBwcm9jZXNzLmhydGltZSgpOwogICAgfSwKICB9Owp9CgpmdW5jdGlvbiB3YXRjaGRvZ1RpbWVvdXQoKSB7CiAgbG9nKCdXYXRjaGRvZyB0aW1lb3V0Jyk7CgogIGlmIChkZWJ1Z2dlclBhdXNlKSB7CiAgICBsb2coJ1BhdXNpbmcgZGVidWdnZXIgdG8gY2FwdHVyZSBzdGFjayB0cmFjZScpOwogICAgZGVidWdnZXJQYXVzZSgpOwogIH0gZWxzZSB7CiAgICBsb2coJ0NhcHR1cmluZyBldmVudCB3aXRob3V0IGEgc3RhY2sgdHJhY2UnKTsKICAgIHNlbmRBbnJFdmVudCgpLnRoZW4obnVsbCwgKCkgPT4gewogICAgICBsb2coJ1NlbmRpbmcgQU5SIGV2ZW50IGZhaWxlZCBvbiB3YXRjaGRvZyB0aW1lb3V0LicpOwogICAgfSk7CiAgfQp9Cgpjb25zdCB7IHBvbGwgfSA9IHdhdGNoZG9nVGltZXIoY3JlYXRlSHJUaW1lciwgb3B0aW9ucy5wb2xsSW50ZXJ2YWwsIG9wdGlvbnMuYW5yVGhyZXNob2xkLCB3YXRjaGRvZ1RpbWVvdXQpOwoKX29wdGlvbmFsQ2hhaW4oW3BhcmVudFBvcnQsICdvcHRpb25hbEFjY2VzcycsIF82ID0+IF82Lm9uLCAnY2FsbCcsIF83ID0+IF83KCdtZXNzYWdlJywgKG1zZykgPT4gewogIGlmIChtc2cuc2Vzc2lvbikgewogICAgc2Vzc2lvbiA9IG1ha2VTZXNzaW9uKG1zZy5zZXNzaW9uKTsKICB9CgogIHBvbGwoKTsKfSldKTs="});var Lx=y((Fx,Wte)=>{c();var{_optionalChain:Wat,_optionalChainDelete:Lte}=ge();Object.defineProperty(Fx,"__esModule",{value:!0});var Dat=require("url"),Gx=Ct(),ZG=ge(),FG=Ql(),qat=Fte(),Vat=50,Hat=5e3;function LG(e,...t){ZG.logger.log(`[ANR] ${e}`,...t)}function Mat(){return ZG.dynamicRequire(Wte,"worker_threads")}async function Uat(e){let t={message:"ANR"},r={};for(let n of e.getEventProcessors()){if(t===null)break;t=await n(t,r)}return Wat([t,"optionalAccess",n=>n.contexts])||{}}var Zte="Anr",jat=(e={})=>({name:Zte,setupOnce(){},setup(t){if(FG.NODE_VERSION.major<16||FG.NODE_VERSION.major===16&&FG.NODE_VERSION.minor<17)throw new Error("ANR detection requires Node 16.17.0 or later");setImmediate(()=>Yat(t,e))}}),Pte=Gx.defineIntegration(jat),Xat=Gx.convertIntegrationFnToClass(Zte,Pte);async function Yat(e,t){let r=await Uat(e),n=e.getDsn();if(!n)return;Lte([r,"access",d=>d.app,"optionalAccess",d=>delete d.app_memory]),Lte([r,"access",d=>d.device,"optionalAccess",d=>delete d.free_memory]);let i=e.getOptions(),s=e.getSdkMetadata()||{};s.sdk&&(s.sdk.integrations=i.integrations.map(d=>d.name));let o={debug:ZG.logger.isEnabled(),dsn:n,environment:i.environment||"production",release:i.release,dist:i.dist,sdkMetadata:s,appRootPath:t.appRootPath,pollInterval:t.pollInterval||Vat,anrThreshold:t.anrThreshold||Hat,captureStackTrace:!!t.captureStackTrace,staticTags:t.staticTags||{},contexts:r};if(o.captureStackTrace){let d=require("inspector");d.url()||d.open(0)}let{Worker:a}=Mat(),u=new a(new Dat.URL(`data:application/javascript;base64,${qat.base64WorkerScript}`),{workerData:o});process.on("exit",()=>{u.terminate()});let p=setInterval(()=>{try{let d=Gx.getCurrentScope().getSession(),h=d?{...d,toJSON:void 0}:void 0;u.postMessage({session:h})}catch{}},o.pollInterval);p.unref(),u.on("message",d=>{d==="session-ended"&&(LG("ANR event sent from ANR worker. Clearing session in this thread."),Gx.getCurrentScope().setSession(void 0))}),u.once("error",d=>{clearInterval(p),LG("ANR worker error",d)}),u.once("exit",d=>{clearInterval(p),LG("ANR worker exit",d)}),u.unref()}Fx.Anr=Xat;Fx.anrIntegration=Pte});var Dte=y(PG=>{c();Object.defineProperty(PG,"__esModule",{value:!0});var Kat=Ct(),zat=Lx();function Jat(e){let t=Kat.getClient();return new zat.Anr(e).setup(t),Promise.resolve()}PG.enableAnrDetection=Jat});var Vte=y(Zx=>{c();Object.defineProperty(Zx,"__esModule",{value:!0});var qte=ge();function $at(e,t){return qte.extractRequestData(e,{include:t})}function Qat(e,t,r={}){return qte.addRequestDataToEvent(e,t,{include:r})}Zx.extractRequestData=$at;Zx.parseRequest=Qat});var Mte=y(_u=>{c();var{_optionalChain:qf}=ge();Object.defineProperty(_u,"__esModule",{value:!0});var pr=Ct(),Iu=ge(),ect=fy(),Px=kG(),Hte=Vte();function tct(){return function(t,r,n){let i=qf([pr.getClient,"call",d=>d(),"optionalAccess",d=>d.getOptions,"call",d=>d()]);if(!i||i.instrumenter!=="sentry"||qf([t,"access",d=>d.method,"optionalAccess",d=>d.toUpperCase,"call",d=>d()])==="OPTIONS"||qf([t,"access",d=>d.method,"optionalAccess",d=>d.toUpperCase,"call",d=>d()])==="HEAD")return n();let s=t.headers&&Iu.isString(t.headers["sentry-trace"])?t.headers["sentry-trace"]:void 0,o=qf([t,"access",d=>d.headers,"optionalAccess",d=>d.baggage]);if(!pr.hasTracingEnabled(i))return n();let[a,u]=Iu.extractPathForTransaction(t,{path:!0,method:!0}),p=pr.continueTrace({sentryTrace:s,baggage:o},d=>pr.startTransaction({name:a,op:"http.server",origin:"auto.http.node.tracingHandler",...d,data:{[pr.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]:u},metadata:{...d.metadata,request:t}},{request:Iu.extractRequestData(t)}));pr.getCurrentScope().setSpan(p),r.__sentry_transaction=p,r.once("finish",()=>{setImmediate(()=>{Iu.addRequestDataToTransaction(p,t),pr.setHttpStatus(p,r.statusCode),p.end()})}),n()}}function rct(e={}){let t;if("include"in e)t={include:e.include};else{let{ip:r,request:n,transaction:i,user:s}=e;(r||n||i||s)&&(t={include:Iu.dropUndefinedKeys({ip:r,request:n,transaction:i,user:s})})}return t}function nct(e){let t=rct(e),r=pr.getClient();if(r&&Px.isAutoSessionTrackingEnabled(r)){r.initSessionFlusher();let n=pr.getCurrentScope();n.getSession()&&n.setSession()}return function(i,s,o){if(e&&e.flushTimeout&&e.flushTimeout>0){let a=s.end;s.end=function(u,p,d){pr.flush(e.flushTimeout).then(()=>{a.call(this,u,p,d)}).then(null,h=>{ect.DEBUG_BUILD&&Iu.logger.error(h),a.call(this,u,p,d)})}}pr.runWithAsyncContext(()=>{let a=pr.getCurrentScope();a.setSDKProcessingMetadata({request:i,requestDataOptionsFromExpressHandler:t});let u=pr.getClient();Px.isAutoSessionTrackingEnabled(u)&&a.setRequestSession({status:"ok"}),s.once("finish",()=>{let p=pr.getClient();Px.isAutoSessionTrackingEnabled(p)&&setImmediate(()=>{p&&p._captureRequestSession&&p._captureRequestSession()})}),o()})}}function ict(e){let t=e.status||e.statusCode||e.status_code||e.output&&e.output.statusCode;return t?parseInt(t,10):500}function sct(e){return ict(e)>=500}function oct(e){return function(r,n,i,s){if((e&&e.shouldHandleError||sct)(r)){pr.withScope(a=>{a.setSDKProcessingMetadata({request:n});let u=i.__sentry_transaction;u&&!pr.getActiveSpan()&&a.setSpan(u);let p=pr.getClient();if(p&&Px.isAutoSessionTrackingEnabled(p)&&p._sessionFlusher!==void 0){let m=a.getRequestSession();m&&m.status!==void 0&&(m.status="crashed")}let d=pr.captureException(r,{mechanism:{type:"middleware",handled:!1}});i.sentry=d,s(r)});return}s(r)}}function act(e={}){return function({path:t,type:r,next:n,rawInput:i}){let s=qf([pr.getClient,"call",p=>p(),"optionalAccess",p=>p.getOptions,"call",p=>p()]),o=pr.getCurrentScope().getTransaction();if(o){o.updateName(`trpc/${t}`),o.setAttribute(pr.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,"route"),o.op="rpc.server";let p={procedure_type:r};(e.attachRpcInput!==void 0?e.attachRpcInput:qf([s,"optionalAccess",d=>d.sendDefaultPii]))&&(p.input=Iu.normalize(i)),o.setContext("trpc",p)}function a(p){p.ok||pr.captureException(p.error,{mechanism:{handled:!1,data:{function:"trpcMiddleware"}}})}let u;try{u=n()}catch(p){throw pr.captureException(p,{mechanism:{handled:!1,data:{function:"trpcMiddleware"}}}),p}return Iu.isThenable(u)?Promise.resolve(u).then(p=>{a(p)},p=>{pr.captureException(p,{mechanism:{handled:!1,data:{function:"trpcMiddleware"}}})}):a(u),u}}_u.extractRequestData=Hte.extractRequestData;_u.parseRequest=Hte.parseRequest;_u.errorHandler=oct;_u.requestHandler=nct;_u.tracingHandler=tct;_u.trpcMiddleware=act});var WG=y(Vf=>{c();Object.defineProperty(Vf,"__esModule",{value:!0});var Bi=Ct(),Xte=ge();function Ute(e){return e&&e.statusCode!==void 0}function cct(e){return e&&e.isBoom!==void 0}function uct(e){return e&&e.error!==void 0}function jte(e){Bi.captureException(e,{mechanism:{type:"hapi",handled:!1,data:{function:"hapiErrorPlugin"}}})}var Yte={name:"SentryHapiErrorPlugin",version:Bi.SDK_VERSION,register:async function(e){e.events.on("request",(r,n)=>{let i=Bi.getActiveTransaction();r.response&&cct(r.response)?jte(r.response):uct(n)&&jte(n.error),i&&(i.setStatus("internal_error"),i.end())})}},Kte={name:"SentryHapiTracingPlugin",version:Bi.SDK_VERSION,register:async function(e){let t=e;t.ext("onPreHandler",(r,n)=>{let i=Bi.continueTrace({sentryTrace:r.headers["sentry-trace"]||void 0,baggage:r.headers.baggage||void 0},s=>Bi.startTransaction({...s,op:"hapi.request",name:r.route.path,description:`${r.route.method} ${r.path}`}));return Bi.getCurrentScope().setSpan(i),n.continue}),t.ext("onPreResponse",(r,n)=>{let i=Bi.getActiveTransaction();if(r.response&&Ute(r.response)&&i){let s=r.response;s.header("sentry-trace",Bi.spanToTraceHeader(i));let o=Xte.dynamicSamplingContextToSentryBaggageHeader(Bi.getDynamicSamplingContextFromSpan(i));o&&s.header("baggage",o)}return n.continue}),t.ext("onPostHandler",(r,n)=>{let i=Bi.getActiveTransaction();return i&&(r.response&&Ute(r.response)&&Bi.setHttpStatus(i,r.response.statusCode),i.end()),n.continue})}},zte="Hapi",lct=(e={})=>{let t=e.server;return{name:zte,setupOnce(){t&&Xte.fill(t,"start",r=>async function(){return await this.register(Kte),await this.register(Yte),r.apply(this)})}}},Jte=Bi.defineIntegration(lct),pct=Bi.convertIntegrationFnToClass(zte,Jte);Vf.Hapi=pct;Vf.hapiErrorPlugin=Yte;Vf.hapiIntegration=Jte;Vf.hapiTracingPlugin=Kte});var $te=y(ai=>{c();Object.defineProperty(ai,"__esModule",{value:!0});var dct=fx(),fct=vx(),hct=Ax(),mct=Tx(),gct=Sx(),yct=yx(),vct=hx(),bct=Ct(),Ict=Cx(),_ct=kx(),Cct=Nx(),xct=Lx(),Sct=WG();ai.Console=dct.Console;ai.Http=fct.Http;ai.OnUncaughtException=hct.OnUncaughtException;ai.OnUnhandledRejection=mct.OnUnhandledRejection;ai.Modules=gct.Modules;ai.ContextLines=yct.ContextLines;ai.Context=vct.Context;ai.RequestData=bct.RequestData;ai.LocalVariables=Ict.LocalVariables;ai.Undici=_ct.Undici;ai.Spotlight=Cct.Spotlight;ai.Anr=xct.Anr;ai.Hapi=Sct.Hapi});var Qte=y(oc=>{c();Object.defineProperty(oc,"__esModule",{value:!0});var ap=eG();oc.Apollo=ap.Apollo;oc.Express=ap.Express;oc.GraphQL=ap.GraphQL;oc.Mongo=ap.Mongo;oc.Mysql=ap.Mysql;oc.Postgres=ap.Postgres;oc.Prisma=ap.Prisma});var Wx=y(DG=>{c();Object.defineProperty(DG,"__esModule",{value:!0});var wct=[["january","1"],["february","2"],["march","3"],["april","4"],["may","5"],["june","6"],["july","7"],["august","8"],["september","9"],["october","10"],["november","11"],["december","12"],["jan","1"],["feb","2"],["mar","3"],["apr","4"],["may","5"],["jun","6"],["jul","7"],["aug","8"],["sep","9"],["oct","10"],["nov","11"],["dec","12"],["sunday","0"],["monday","1"],["tuesday","2"],["wednesday","3"],["thursday","4"],["friday","5"],["saturday","6"],["sun","0"],["mon","1"],["tue","2"],["wed","3"],["thu","4"],["fri","5"],["sat","6"]];function Ect(e){return wct.reduce((t,[r,n])=>t.replace(new RegExp(r,"gi"),n),e)}DG.replaceCronNames=Ect});var nre=y(qG=>{c();Object.defineProperty(qG,"__esModule",{value:!0});var ere=Ct(),tre=Wx(),rre="Automatic instrumentation of CronJob only supports crontab string";function Act(e,t){let r=!1;return new Proxy(e,{construct(n,i){let[s,o,a,u,p,...d]=i;if(typeof s!="string")throw new Error(rre);if(r)throw new Error(`A job named '${t}' has already been scheduled`);r=!0;let h=tre.replaceCronNames(s);function m(g,v){return ere.withMonitor(t,()=>o(g,v),{schedule:{type:"crontab",value:h},...p?{timeZone:p}:{}})}return new n(s,m,a,u,p,...d)},get(n,i){return i==="from"?s=>{let{cronTime:o,onTick:a,timeZone:u}=s;if(typeof o!="string")throw new Error(rre);if(r)throw new Error(`A job named '${t}' has already been scheduled`);r=!0;let p=tre.replaceCronNames(o);return s.onTick=(d,h)=>ere.withMonitor(t,()=>a(d,h),{schedule:{type:"crontab",value:p},...u?{timeZone:u}:{}}),n.from(s)}:n[i]}})}qG.instrumentCron=Act});var sre=y(VG=>{c();var{_optionalChain:ire}=ge();Object.defineProperty(VG,"__esModule",{value:!0});var Rct=Ct(),Tct=Wx();function Nct(e){return new Proxy(e,{get(t,r){return r==="schedule"&&t.schedule?new Proxy(t.schedule,{apply(n,i,s){let[o,,a]=s;if(!ire([a,"optionalAccess",u=>u.name]))throw new Error('Missing "name" for scheduled job. A name is required for Sentry check-in monitoring.');return Rct.withMonitor(a.name,()=>n.apply(i,s),{schedule:{type:"crontab",value:Tct.replaceCronNames(o)},timezone:ire([a,"optionalAccess",u=>u.timezone])})}}):t[r]}})}VG.instrumentNodeCron=Nct});var ore=y(HG=>{c();Object.defineProperty(HG,"__esModule",{value:!0});var Bct=Ct(),kct=Wx();function Oct(e){return new Proxy(e,{get(t,r){return r==="scheduleJob"?new Proxy(t.scheduleJob,{apply(n,i,s){let[o,a]=s;if(typeof o!="string"||typeof a!="string")throw new Error("Automatic instrumentation of 'node-schedule' requires the first parameter of 'scheduleJob' to be a job name string and the second parameter to be a crontab string");let u=o,p=a;return Bct.withMonitor(u,()=>n.apply(i,s),{schedule:{type:"crontab",value:kct.replaceCronNames(p)}})}}):t[r]}})}HG.instrumentNodeSchedule=Oct});var pre=y(ve=>{c();Object.defineProperty(ve,"__esModule",{value:!0});var Fe=Ct(),Gct=Iee(),Fct=iG(),Lct=pG(),Iy=kG(),MG=ge(),Zct=Ote(),are=BG(),Pct=Dte(),Wct=Mte(),Dct=$te(),qct=Qte(),Vct=fx(),Hct=Ax(),Mct=Tx(),Uct=Sx(),jct=yx(),Xct=hx(),Yct=Cx(),Kct=Nx(),zct=Lx(),cre=WG(),ure=kx(),lre=vx(),Jct=nre(),$ct=sre(),Qct=ore(),eut=are.createGetModuleFromFilename(),tut={...Fe.Integrations,...Dct,...qct},rut={instrumentCron:Jct.instrumentCron,instrumentNodeCron:$ct.instrumentNodeCron,instrumentNodeSchedule:Qct.instrumentNodeSchedule};ve.Hub=Fe.Hub;ve.SDK_VERSION=Fe.SDK_VERSION;ve.SEMANTIC_ATTRIBUTE_SENTRY_OP=Fe.SEMANTIC_ATTRIBUTE_SENTRY_OP;ve.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN=Fe.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN;ve.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE=Fe.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE;ve.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE=Fe.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE;ve.Scope=Fe.Scope;ve.addBreadcrumb=Fe.addBreadcrumb;ve.addEventProcessor=Fe.addEventProcessor;ve.addGlobalEventProcessor=Fe.addGlobalEventProcessor;ve.addIntegration=Fe.addIntegration;ve.captureCheckIn=Fe.captureCheckIn;ve.captureEvent=Fe.captureEvent;ve.captureException=Fe.captureException;ve.captureMessage=Fe.captureMessage;ve.captureSession=Fe.captureSession;ve.close=Fe.close;ve.configureScope=Fe.configureScope;ve.continueTrace=Fe.continueTrace;ve.createTransport=Fe.createTransport;ve.endSession=Fe.endSession;ve.extractTraceparentData=Fe.extractTraceparentData;ve.flush=Fe.flush;ve.functionToStringIntegration=Fe.functionToStringIntegration;ve.getActiveSpan=Fe.getActiveSpan;ve.getActiveTransaction=Fe.getActiveTransaction;ve.getClient=Fe.getClient;ve.getCurrentHub=Fe.getCurrentHub;ve.getCurrentScope=Fe.getCurrentScope;ve.getGlobalScope=Fe.getGlobalScope;ve.getHubFromCarrier=Fe.getHubFromCarrier;ve.getIsolationScope=Fe.getIsolationScope;ve.getSpanStatusFromHttpCode=Fe.getSpanStatusFromHttpCode;ve.inboundFiltersIntegration=Fe.inboundFiltersIntegration;ve.isInitialized=Fe.isInitialized;ve.lastEventId=Fe.lastEventId;ve.linkedErrorsIntegration=Fe.linkedErrorsIntegration;ve.makeMain=Fe.makeMain;ve.metrics=Fe.metrics;ve.parameterize=Fe.parameterize;ve.requestDataIntegration=Fe.requestDataIntegration;ve.runWithAsyncContext=Fe.runWithAsyncContext;ve.setContext=Fe.setContext;ve.setCurrentClient=Fe.setCurrentClient;ve.setExtra=Fe.setExtra;ve.setExtras=Fe.setExtras;ve.setHttpStatus=Fe.setHttpStatus;ve.setMeasurement=Fe.setMeasurement;ve.setTag=Fe.setTag;ve.setTags=Fe.setTags;ve.setUser=Fe.setUser;ve.spanStatusfromHttpCode=Fe.spanStatusfromHttpCode;ve.startActiveSpan=Fe.startActiveSpan;ve.startInactiveSpan=Fe.startInactiveSpan;ve.startSession=Fe.startSession;ve.startSpan=Fe.startSpan;ve.startSpanManual=Fe.startSpanManual;ve.startTransaction=Fe.startTransaction;ve.trace=Fe.trace;ve.withActiveSpan=Fe.withActiveSpan;ve.withIsolationScope=Fe.withIsolationScope;ve.withMonitor=Fe.withMonitor;ve.withScope=Fe.withScope;ve.autoDiscoverNodePerformanceMonitoringIntegrations=Gct.autoDiscoverNodePerformanceMonitoringIntegrations;ve.NodeClient=Fct.NodeClient;ve.makeNodeTransport=Lct.makeNodeTransport;ve.defaultIntegrations=Iy.defaultIntegrations;ve.defaultStackParser=Iy.defaultStackParser;ve.getDefaultIntegrations=Iy.getDefaultIntegrations;ve.getSentryRelease=Iy.getSentryRelease;ve.init=Iy.init;ve.DEFAULT_USER_INCLUDES=MG.DEFAULT_USER_INCLUDES;ve.addRequestDataToEvent=MG.addRequestDataToEvent;ve.extractRequestData=MG.extractRequestData;ve.deepReadDirSync=Zct.deepReadDirSync;ve.createGetModuleFromFilename=are.createGetModuleFromFilename;ve.enableAnrDetection=Pct.enableAnrDetection;ve.Handlers=Wct;ve.consoleIntegration=Vct.consoleIntegration;ve.onUncaughtExceptionIntegration=Hct.onUncaughtExceptionIntegration;ve.onUnhandledRejectionIntegration=Mct.onUnhandledRejectionIntegration;ve.modulesIntegration=Uct.modulesIntegration;ve.contextLinesIntegration=jct.contextLinesIntegration;ve.nodeContextIntegration=Xct.nodeContextIntegration;ve.localVariablesIntegration=Yct.localVariablesIntegration;ve.spotlightIntegration=Kct.spotlightIntegration;ve.anrIntegration=zct.anrIntegration;ve.hapiErrorPlugin=cre.hapiErrorPlugin;ve.hapiIntegration=cre.hapiIntegration;ve.Undici=ure.Undici;ve.nativeNodeFetchintegration=ure.nativeNodeFetchintegration;ve.Http=lre.Http;ve.httpIntegration=lre.httpIntegration;ve.Integrations=tut;ve.cron=rut;ve.getModuleFromFilename=eut});var Hf=y((vrr,nut)=>{nut.exports={name:"@ampt/cli",version:"1.1.21",description:"Ampt command line interface",main:"./dist/index.js",types:"./types/index.d.ts",engines:{node:">=18.0.0 <25.0.0"},publishConfig:{access:"public"},bin:{ampt:"./bin/bin"},scripts:{prepublishOnly:"npm run build",build:"node esbuild.mjs",watch:"node esbuild.mjs --watch",test:'LOG_LEVEL=silent AWS_REGION=us-east-1 NODE_OPTIONS="--no-warnings --experimental-vm-modules" jest',eslint:"eslint .",prettier:"prettier --check .",typecheck:"tsc -b ."},author:"Ampt Inc <hello@getampt.com>",license:"Apache-2.0",optionalDependencies:{fsevents:"~2.3.2"},babel:{presets:["@babel/preset-typescript"]},devDependencies:{"@astrojs/webapi":"^1.1.1","@sentry/esbuild-plugin":"^2.16.0","@sentry/node":"^7.107.0","@types/express":"^4.17.13","@types/http-proxy":"^1.17.8","@types/write-file-atomic":"^4.0.0","@types/ws":"^8.5.3","adm-zip":"^0.5.5","ansi-escapes":"^4.3.1",axios:"^1.6.5","axios-retry":"^4.0.0",chalk:"^4.1.0","child-process-ext":"^2.1.1",chokidar:"^3.5.0",chunk:"^0.0.3",dayjs:"^1.10.4",debounce:"^1.2.1",del:"^6.0.0",figures:"^3.2.0","fs-extra":"^9.0.1","get-port":"^5.0.0","git-list-updated":"^1.2.1","github-release-from-cc-changelog":"^2.2.0","http-proxy":"^1.18.1",ignore:"^5.2.0","is-git-url":"^1.0.0","is-installed-globally":"^0.4.0","it-parallel":"^2.0.1","jwt-decode":"^3.1.2",keypress:"^0.2.1","lz4-wasm-nodejs":"^0.9.2",minimist:"^1.2.5","node-emoji":"^1.10.0","node-resolve":"^1.3.4","normalize-path":"^3.0.0",open:"^8.2.0","parse-packagejson-name":"^1.0.1",pluralize:"^8.0.0",ramda:"^0.27.2",semver:"^5.7.1","strip-ansi":"^6.0.0",terminate:"^2.5.0","tree-kill":"^1.2.2",ulid:"^2.3.0",which:"^2.0.2","write-file-atomic":"^4.0.2"},dependencies:{esbuild:"^0.19.5",joycon:"^3.1.1",pirates:"^4.0.6","source-map-support":"^0.5.21","tsconfig-paths":"^4.2.0"}}});var dre,An,iut,sut,_y,UG,Pt,sa=ae(()=>{"use strict";c();dre=xe(o$()),An=xe(pre());dr();Mf();({version:iut}=Hf()),sut=()=>{var e;return(process.env.AMPT_STAGE==="prod"||((e=process.env.AMPT_ENDPOINT)==null?void 0:e.endsWith("ampt.dev")))&&!process.env.JEST_WORKER_ID};sut()&&An.init({release:iut,dsn:"https://5f27cbf3265a475abff6b7999ae73179@o1265020.ingest.us.sentry.io/6448443",tracesSampleRate:.5});UG=class{constructor(){Cr(this,"orgName");Cr(this,"user");Cr(this,"config");Cm(this,_y,(0,dre.ulid)());Cr(this,"auth");Cr(this,"captureException",t=>{ia.error({err:t},"captureException"),An==null||An.captureException(t)})}getSessionId(){return To(this,_y)}loadAmptConfig(){this.config=jG(),ia.debug({config:this.config},"loadAmptConfig")}getLoggedInUser(){var t;if(this.config||this.loadAmptConfig(),this.config&&((t=this.config)!=null&&t.userId)){let{sessions:r}=this.config,n=r==null?void 0:r[this.config.userId];if(n!=null&&n.accessToken&&(this.auth={accessToken:n.accessToken}),n&&n.username&&n.refreshToken)return{userId:this.config.userId,username:n.username,name:n.name,email:n.email,expiresAt:n.expiresAt,refreshToken:n.refreshToken,accessToken:n.accessToken}}return null}saveConfig(t){this.config={...this.config,...t},XG(this.config)}updateLogin(t){if(this.config){let r=this.getLoggedInUser();if(r&&r.userId){let n=Date.now()+t.expiresIn*1e3,{userId:i,username:s,name:o,email:a,refreshToken:u}=r;this.saveConfig({userId:i,sessions:{[i]:{userId:i,username:s,name:o,email:a,refreshToken:u,accessToken:t.accessToken,expiresAt:n}}})}}}storeToken(t,r){this.auth={accessToken:t},this.updateLogin({accessToken:t,expiresIn:r})}writeUpdateCheck(){let t=Math.round(Date.now()/1e3);this.config&&this.saveConfig({...this.config,meta:{...this.config.meta,last_update_check:t}})}shouldCheckForCliUpdate(){var t;if(this.config){let r=(t=this.config.meta)==null?void 0:t.last_update_check,n=Math.round(Date.now()/1e3);return!r||n-r>60*60*24*7}return!0}setUser(t){this.user=t,An==null||An.setUser({userId:t.userId,username:t.username,email:t.email,fullName:t.name,userAgeDays:t.userAgeDays,auth0Id:t.auth0Id})}onLogin(t,r){if(t){let{refreshToken:n,accessToken:i,expiresIn:s}=r,o=Date.now()+s*1e3;this.saveConfig({userId:t.userId,meta:{created_at:Math.round(Date.now()/1e3)},sessions:{[t.userId]:{userId:t.userId,username:t.username,name:t.name,email:t.email,refreshToken:n,accessToken:i,expiresAt:o}}}),ia.debug({userName:t.username},"saved config file"),this.setUser(t),ia.debug({userName:t.username},"set user in session")}}shouldPromptTutorial(){var t,r,n,i,s,o,a,u,p;if((t=this.user)!=null&&t.preferences){let d=((n=(r=this.user)==null?void 0:r.preferences)==null?void 0:n.connectedCount)>=3,h=((i=this.user)==null?void 0:i.userAgeDays)&&((s=this.user)==null?void 0:s.userAgeDays)>30;return{showTutorial:((a=(o=this.user)==null?void 0:o.preferences)==null?void 0:a.showTutorial)===void 0?!0:(p=(u=this.user)==null?void 0:u.preferences)==null?void 0:p.showTutorial,allowDismiss:h?!0:d}}return{showTutorial:!1,allowDismiss:!1}}setSentryContext(t){let r={...t,sessionId:To(this,_y)};An==null||An.setTags(r),An==null||An.setContext("cli-session",r)}async flushSentry(){return An==null?void 0:An.flush()}};_y=new WeakMap;Pt=new UG});var Dx,qx,Cu,YG,_e,ia,Mf=ae(()=>{"use strict";c();Dx=xe(i$()),qx=xe(require("path")),Cu=xe(cl());sa();YG=class{logger;enabled;logFilePath;logToConsole;pinoArgs;pinoDestination;initLogDestination(){try{(0,Cu.removeSync)(this.logFilePath)}catch(t){process.env.AMPT_DEBUG&&console.error("Error removing log file: ",t)}finally{if(this.enabled)try{(0,Cu.ensureFileSync)(this.logFilePath)}catch{this.enabled=!1}}this.pinoDestination=this.enabled&&!this.logToConsole?Dx.default.destination({dest:this.logFilePath,sync:process.platform!=="win32"}):void 0}constructor(){this.enabled=!process.env.AMPT_DISABLE_LOGS,this.logFilePath=process.env.AMPT_LOG_DIR||qx.default.join(process.cwd(),".ampt","logs"),this.logToConsole=process.env.AMPT_LOG_TO_CONSOLE==="true",this.initLogDestination(),this.pinoArgs={enabled:this.enabled,level:process.env.AMPT_LOG_LEVEL||"info",mixin:()=>({sessionId:Pt.getSessionId()}),redact:{remove:!0,paths:["credentials","accessKey","token","idToken","refreshToken","accessToken"]}},this.logger=(0,Dx.default)(this.pinoArgs,this.pinoDestination)}disable(){this.enabled=!1}enable(){this.enabled=!0;let t=qx.default.join(process.cwd(),".ampt");this.logFilePath=process.env.AMPT_LOG_DIR||qx.default.join(t,"logs"),(0,Cu.existsSync)(t)||(0,Cu.mkdirSync)(t),this.initLogDestination(),this.pinoArgs={...this.pinoArgs,enabled:this.enabled},this.logger=(0,Dx.default)(this.pinoArgs,this.pinoDestination)}child(t){return this.logger.child(t)}debug(...t){this.enabled&&this.logger.debug(...t)}warn(...t){this.enabled&&this.logger.warn(...t)}error(...t){this.enabled&&this.logger.error(...t)}info(...t){this.enabled&&this.logger.info(...t)}fatal(...t){this.enabled&&this.logger.fatal(...t)}trace(...t){this.enabled&&this.logger.trace(...t)}},_e=new YG,ia=_e});var hre,fre,out,KG,zG,ze,Grr,JG=ae(()=>{"use strict";c();hre=xe(require("https"));W_();Xz();Mf();sa();({version:fre}=Hf()),out=new hre.default.Agent({keepAlive:!0}),KG=class e{axios;static config(){return{apiEndpoint:process.env.AMPT_ENDPOINT,apiKey:process.env.AMPT_API_KEY}}constructor(){this.axios=Go.create({httpsAgent:out}),D_(this.axios,{retries:10,retryDelay:D_.exponentialDelay,retryCondition:t=>{var s;let r=t.response&&t.response.status||"unknown",n=t.response&&t.response.data&&t.response.data.message||"unknown",i=D_.isNetworkOrIdempotentRequestError(t)&&r!==500||r===429||r===503;return i&&ia.debug({status:r,message:n,response:(s=t.response)==null?void 0:s.data},"retryable request error"),i}}),this.axios.defaults.headers.common={},this.axios.defaults.headers.put={},this.axios.defaults.headers.get={}}async request(t={}){var I,x,_,A,E,S,w,T,D,L,W,k,F,B;let{apiEndpoint:r,apiKey:n}=e.config(),i=t.root||r,s=(I=Pt.auth)==null?void 0:I.accessToken,{method:o="POST",params:a,headers:u={},body:p,endpoint:d}=t,{url:h=`${i}${d}`,responseType:m}=t;n&&h.startsWith(r)?u.Authorization=`Basic ${n}`:s&&h.startsWith(r)&&(u.Authorization=`Bearer ${s}`),p&&d&&(u["Content-Type"]="application/json");let g=Pt.getSessionId();d&&(u["User-Agent"]=`ampt-cli/${fre}`,u["ampt-version"]=fre,u["ampt-session-id"]=g);let v={url:h,method:o,headers:u,params:a,data:p,maxContentLength:1/0,maxBodyLength:1/0,onUploadProgress:t.onUploadProgress};m&&(v.responseType=m);try{return ia.debug({method:o,url:h,sessionId:g},"request"),(await this.axios(v)).data}catch(M){if(((x=M.response)==null?void 0:x.status)===403&&((A=(_=M.response)==null?void 0:_.data)==null?void 0:A.code)==="EXPIRED_TOKEN")return ia.debug({status:M.response.status,code:M.response.data.code},"Token expired, refreshing"),await((E=Pt.user)==null?void 0:E.refreshAccessToken()),this.request(t);if(((S=M.response)==null?void 0:S.status)===403){let Y=new Error("Forbidden");throw Y.message="You do not have permission to access this resource.",Y.name="ForbiddenError",Y}if(((w=M.response)==null?void 0:w.status)===404)return;if(((T=M.response)==null?void 0:T.status)===409){let Y=new Error("Conflict");throw Y.message="Conflict",Y.name="ConflictError",Y}if(ia.error({status:(D=M.response)==null?void 0:D.status,data:(L=M.response)==null?void 0:L.data},"request error"),M.response&&M.response.data){let Y=new Error(M.response.data.message||M.response.data);throw(W=M.response.data.message)!=null&&W.includes("Request Entity Too Large")?(Y.message="Your code size is too large. Try reducing it by adding to .deployignore",Y.name="EntityTooLargeError"):(k=M.response.data.message)!=null&&k.includes("User disabled")?(Y.message=M.response.data.detail||"Your account has been disabled. Please contact support@getampt.com for more information.",Y.name="UserDisabledError"):(F=M.response.data.message)!=null&&F.includes("App limit reached")?(Y.message="You have reached your Organization's app limit. Please upgrade your plan or delete an app.",Y.name="AppLimitReachedError"):(B=M.response.data.message)!=null&&B.includes("Instance limit reached")?(Y.message="You have reached your Organization's environment limit. Please upgrade your plan or delete an environment.",Y.name="EnvironmentLimitReachedError"):Y.name=M.response.data.name||null,Y.statusCode=M.response.data.statusCode||M.response.status||null,Y}throw M}}},zG=new KG,ze=zG.request.bind(zG),Grr=zG.request});var mre,gre=ae(()=>{"use strict";c();mre=async(e,t)=>{let r,n=new Promise(i=>{r=setTimeout(()=>i(null),t)});return Promise.race([e,n]).then(i=>(clearTimeout(r),i))}});var Vx,yre=ae(()=>{"use strict";c();Vx=e=>e?e===0?"less than a second":e===1?"1 second":`${e} seconds`:"a few seconds"});var xu,$G=ae(()=>{"use strict";c();xu=async e=>new Promise(t=>setTimeout(t,e).unref())});var fr,QG,eF=ae(()=>{"use strict";c();dr();sa();fr=e=>{(async()=>{let{eventName:t,eventData:r={}}=e,n=Pt.orgName;if(!n){_e.warn({eventName:t},"Could not send report - no org name found");return}try{await ze({method:"POST",body:{eventName:t,eventData:{...r,shell:!0}},endpoint:`/orgs/${n}/analytics`})}catch(i){Pt.captureException(i),process.env.AMPT_DEBUG&&console.error(i)}})()},QG=fr});async function Hx(e){try{let t="https://ampt.dev/public/templates/manifest-tags.json",{data:r}=await Go.get(t);return r.filter(n=>n.tags.includes("starter"))}catch(t){return process.env.AMPT_DEBUG&&e.logError(t),[]}}var tF=ae(()=>{"use strict";c();W_()});var rF,vre,nF=ae(()=>{"use strict";c();rF=e=>{try{return process.kill(e,0)}catch(t){return t.code==="EPERM"}},vre=rF});async function Mx(e,t){let r=e.eventNames(),n=new Map;for(let i of r)n.set(i,e.listeners(i));try{return await t()}finally{e.removeAllListeners();for(let i of r)for(let s of n.get(i))e.on(i,s)}}var bre=ae(()=>{"use strict";c()});function Ire(e){e=e.trim();let t=0,r=null,n=null,i=null,s=[];for(let o=0;o<e.length;o++){if(r=n,n=e.charAt(o),n===" "&&!i){r!==" "&&t++;continue}if(n===i){i=null;continue}else if((n==="'"||n==='"')&&!i){i=n;continue}s[t]||(s[t]=""),s[t]+=n}return s}var _re=ae(()=>{"use strict";c()});var Cre=ae(()=>{"use strict";c()});var xre=y((Uf,Cy)=>{c();(function(){var e,t="4.17.21",r=200,n="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",i="Expected a function",s="Invalid `variable` option passed into `_.template`",o="__lodash_hash_undefined__",a=500,u="__lodash_placeholder__",p=1,d=2,h=4,m=1,g=2,v=1,I=2,x=4,_=8,A=16,E=32,S=64,w=128,T=256,D=512,L=30,W="...",k=800,F=16,B=1,M=2,Y=3,V=1/0,q=9007199254740991,te=17976931348623157e292,z=0/0,he=4294967295,fe=he-1,we=he>>>1,De=[["ary",w],["bind",v],["bindKey",I],["curry",_],["curryRight",A],["flip",D],["partial",E],["partialRight",S],["rearg",T]],Oe="[object Arguments]",Xe="[object Array]",Ze="[object AsyncFunction]",Re="[object Boolean]",gt="[object Date]",lt="[object DOMException]",Ce="[object Error]",Z="[object Function]",R="[object GeneratorFunction]",ne="[object Map]",J="[object Number]",rt="[object Null]",Je="[object Object]",Yt="[object Promise]",Ir="[object Proxy]",Yr="[object RegExp]",Pe="[object Set]",$t="[object String]",xn="[object Symbol]",zp="[object Undefined]",So="[object WeakMap]",Xu="[object WeakSet]",wo="[object ArrayBuffer]",G="[object DataView]",j="[object Float32Array]",K="[object Float64Array]",oe="[object Int8Array]",pe="[object Int16Array]",Te="[object Int32Array]",st="[object Uint8Array]",bt="[object Uint8ClampedArray]",tn="[object Uint16Array]",Wi="[object Uint32Array]",Gr=/\b__p \+= '';/g,Qe=/\b(__p \+=) '' \+/g,Ks=/(__e\(.*?\)|\b__t\)) \+\n'';/g,Bb=/&(?:amp|lt|gt|quot|#39);/g,Jp=/[&<>"']/g,kb=RegExp(Bb.source),Ob=RegExp(Jp.source),rm=/<%-([\s\S]+?)%>/g,Di=/<%([\s\S]+?)%>/g,nm=/<%=([\s\S]+?)%>/g,im=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Gb=/^\w*$/,sm=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Yu=/[\\^$.*+?()[\]{}|]/g,$p=RegExp(Yu.source),Ku=/^\s+/,Fb=/\s/,Lb=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Q1e=/\{\n\/\* \[wrapped with (.+)\] \*/,e2e=/,? & /,t2e=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,r2e=/[()=,{}\[\]\/\s]/,n2e=/\\(\\)?/g,i2e=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,CV=/\w*$/,s2e=/^[-+]0x[0-9a-f]+$/i,o2e=/^0b[01]+$/i,a2e=/^\[object .+?Constructor\]$/,c2e=/^0o[0-7]+$/i,u2e=/^(?:0|[1-9]\d*)$/,l2e=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Zb=/($^)/,p2e=/['\n\r\u2028\u2029\\]/g,Pb="\\ud800-\\udfff",d2e="\\u0300-\\u036f",f2e="\\ufe20-\\ufe2f",h2e="\\u20d0-\\u20ff",xV=d2e+f2e+h2e,SV="\\u2700-\\u27bf",wV="a-z\\xdf-\\xf6\\xf8-\\xff",m2e="\\xac\\xb1\\xd7\\xf7",g2e="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",y2e="\\u2000-\\u206f",v2e=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",EV="A-Z\\xc0-\\xd6\\xd8-\\xde",AV="\\ufe0e\\ufe0f",RV=m2e+g2e+y2e+v2e,ZA="['\u2019]",b2e="["+Pb+"]",TV="["+RV+"]",Wb="["+xV+"]",NV="\\d+",I2e="["+SV+"]",BV="["+wV+"]",kV="[^"+Pb+RV+NV+SV+wV+EV+"]",PA="\\ud83c[\\udffb-\\udfff]",_2e="(?:"+Wb+"|"+PA+")",OV="[^"+Pb+"]",WA="(?:\\ud83c[\\udde6-\\uddff]){2}",DA="[\\ud800-\\udbff][\\udc00-\\udfff]",Qp="["+EV+"]",GV="\\u200d",FV="(?:"+BV+"|"+kV+")",C2e="(?:"+Qp+"|"+kV+")",LV="(?:"+ZA+"(?:d|ll|m|re|s|t|ve))?",ZV="(?:"+ZA+"(?:D|LL|M|RE|S|T|VE))?",PV=_2e+"?",WV="["+AV+"]?",x2e="(?:"+GV+"(?:"+[OV,WA,DA].join("|")+")"+WV+PV+")*",S2e="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",w2e="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",DV=WV+PV+x2e,E2e="(?:"+[I2e,WA,DA].join("|")+")"+DV,A2e="(?:"+[OV+Wb+"?",Wb,WA,DA,b2e].join("|")+")",R2e=RegExp(ZA,"g"),T2e=RegExp(Wb,"g"),qA=RegExp(PA+"(?="+PA+")|"+A2e+DV,"g"),N2e=RegExp([Qp+"?"+BV+"+"+LV+"(?="+[TV,Qp,"$"].join("|")+")",C2e+"+"+ZV+"(?="+[TV,Qp+FV,"$"].join("|")+")",Qp+"?"+FV+"+"+LV,Qp+"+"+ZV,w2e,S2e,NV,E2e].join("|"),"g"),B2e=RegExp("["+GV+Pb+xV+AV+"]"),k2e=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,O2e=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],G2e=-1,ar={};ar[j]=ar[K]=ar[oe]=ar[pe]=ar[Te]=ar[st]=ar[bt]=ar[tn]=ar[Wi]=!0,ar[Oe]=ar[Xe]=ar[wo]=ar[Re]=ar[G]=ar[gt]=ar[Ce]=ar[Z]=ar[ne]=ar[J]=ar[Je]=ar[Yr]=ar[Pe]=ar[$t]=ar[So]=!1;var nr={};nr[Oe]=nr[Xe]=nr[wo]=nr[G]=nr[Re]=nr[gt]=nr[j]=nr[K]=nr[oe]=nr[pe]=nr[Te]=nr[ne]=nr[J]=nr[Je]=nr[Yr]=nr[Pe]=nr[$t]=nr[xn]=nr[st]=nr[bt]=nr[tn]=nr[Wi]=!0,nr[Ce]=nr[Z]=nr[So]=!1;var F2e={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"s"},L2e={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},Z2e={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"},P2e={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},W2e=parseFloat,D2e=parseInt,qV=typeof global=="object"&&global&&global.Object===Object&&global,q2e=typeof self=="object"&&self&&self.Object===Object&&self,dn=qV||q2e||Function("return this")(),VA=typeof Uf=="object"&&Uf&&!Uf.nodeType&&Uf,zu=VA&&typeof Cy=="object"&&Cy&&!Cy.nodeType&&Cy,VV=zu&&zu.exports===VA,HA=VV&&qV.process,us=function(){try{var $=zu&&zu.require&&zu.require("util").types;return $||HA&&HA.binding&&HA.binding("util")}catch{}}(),HV=us&&us.isArrayBuffer,MV=us&&us.isDate,UV=us&&us.isMap,jV=us&&us.isRegExp,XV=us&&us.isSet,YV=us&&us.isTypedArray;function qi($,ce,se){switch(se.length){case 0:return $.call(ce);case 1:return $.call(ce,se[0]);case 2:return $.call(ce,se[0],se[1]);case 3:return $.call(ce,se[0],se[1],se[2])}return $.apply(ce,se)}function V2e($,ce,se,Be){for(var ot=-1,Ft=$==null?0:$.length;++ot<Ft;){var rn=$[ot];ce(Be,rn,se(rn),$)}return Be}function ls($,ce){for(var se=-1,Be=$==null?0:$.length;++se<Be&&ce($[se],se,$)!==!1;);return $}function H2e($,ce){for(var se=$==null?0:$.length;se--&&ce($[se],se,$)!==!1;);return $}function KV($,ce){for(var se=-1,Be=$==null?0:$.length;++se<Be;)if(!ce($[se],se,$))return!1;return!0}function Oc($,ce){for(var se=-1,Be=$==null?0:$.length,ot=0,Ft=[];++se<Be;){var rn=$[se];ce(rn,se,$)&&(Ft[ot++]=rn)}return Ft}function Db($,ce){var se=$==null?0:$.length;return!!se&&ed($,ce,0)>-1}function MA($,ce,se){for(var Be=-1,ot=$==null?0:$.length;++Be<ot;)if(se(ce,$[Be]))return!0;return!1}function ur($,ce){for(var se=-1,Be=$==null?0:$.length,ot=Array(Be);++se<Be;)ot[se]=ce($[se],se,$);return ot}function Gc($,ce){for(var se=-1,Be=ce.length,ot=$.length;++se<Be;)$[ot+se]=ce[se];return $}function UA($,ce,se,Be){var ot=-1,Ft=$==null?0:$.length;for(Be&&Ft&&(se=$[++ot]);++ot<Ft;)se=ce(se,$[ot],ot,$);return se}function M2e($,ce,se,Be){var ot=$==null?0:$.length;for(Be&&ot&&(se=$[--ot]);ot--;)se=ce(se,$[ot],ot,$);return se}function jA($,ce){for(var se=-1,Be=$==null?0:$.length;++se<Be;)if(ce($[se],se,$))return!0;return!1}var U2e=XA("length");function j2e($){return $.split("")}function X2e($){return $.match(t2e)||[]}function zV($,ce,se){var Be;return se($,function(ot,Ft,rn){if(ce(ot,Ft,rn))return Be=Ft,!1}),Be}function qb($,ce,se,Be){for(var ot=$.length,Ft=se+(Be?1:-1);Be?Ft--:++Ft<ot;)if(ce($[Ft],Ft,$))return Ft;return-1}function ed($,ce,se){return ce===ce?ske($,ce,se):qb($,JV,se)}function Y2e($,ce,se,Be){for(var ot=se-1,Ft=$.length;++ot<Ft;)if(Be($[ot],ce))return ot;return-1}function JV($){return $!==$}function $V($,ce){var se=$==null?0:$.length;return se?KA($,ce)/se:z}function XA($){return function(ce){return ce==null?e:ce[$]}}function YA($){return function(ce){return $==null?e:$[ce]}}function QV($,ce,se,Be,ot){return ot($,function(Ft,rn,Qt){se=Be?(Be=!1,Ft):ce(se,Ft,rn,Qt)}),se}function K2e($,ce){var se=$.length;for($.sort(ce);se--;)$[se]=$[se].value;return $}function KA($,ce){for(var se,Be=-1,ot=$.length;++Be<ot;){var Ft=ce($[Be]);Ft!==e&&(se=se===e?Ft:se+Ft)}return se}function zA($,ce){for(var se=-1,Be=Array($);++se<$;)Be[se]=ce(se);return Be}function z2e($,ce){return ur(ce,function(se){return[se,$[se]]})}function eH($){return $&&$.slice(0,iH($)+1).replace(Ku,"")}function Vi($){return function(ce){return $(ce)}}function JA($,ce){return ur(ce,function(se){return $[se]})}function om($,ce){return $.has(ce)}function tH($,ce){for(var se=-1,Be=$.length;++se<Be&&ed(ce,$[se],0)>-1;);return se}function rH($,ce){for(var se=$.length;se--&&ed(ce,$[se],0)>-1;);return se}function J2e($,ce){for(var se=$.length,Be=0;se--;)$[se]===ce&&++Be;return Be}var $2e=YA(F2e),Q2e=YA(L2e);function eke($){return"\\"+P2e[$]}function tke($,ce){return $==null?e:$[ce]}function td($){return B2e.test($)}function rke($){return k2e.test($)}function nke($){for(var ce,se=[];!(ce=$.next()).done;)se.push(ce.value);return se}function $A($){var ce=-1,se=Array($.size);return $.forEach(function(Be,ot){se[++ce]=[ot,Be]}),se}function nH($,ce){return function(se){return $(ce(se))}}function Fc($,ce){for(var se=-1,Be=$.length,ot=0,Ft=[];++se<Be;){var rn=$[se];(rn===ce||rn===u)&&($[se]=u,Ft[ot++]=se)}return Ft}function Vb($){var ce=-1,se=Array($.size);return $.forEach(function(Be){se[++ce]=Be}),se}function ike($){var ce=-1,se=Array($.size);return $.forEach(function(Be){se[++ce]=[Be,Be]}),se}function ske($,ce,se){for(var Be=se-1,ot=$.length;++Be<ot;)if($[Be]===ce)return Be;return-1}function oke($,ce,se){for(var Be=se+1;Be--;)if($[Be]===ce)return Be;return Be}function rd($){return td($)?cke($):U2e($)}function zs($){return td($)?uke($):j2e($)}function iH($){for(var ce=$.length;ce--&&Fb.test($.charAt(ce)););return ce}var ake=YA(Z2e);function cke($){for(var ce=qA.lastIndex=0;qA.test($);)++ce;return ce}function uke($){return $.match(qA)||[]}function lke($){return $.match(N2e)||[]}var pke=function $(ce){ce=ce==null?dn:Lc.defaults(dn.Object(),ce,Lc.pick(dn,O2e));var se=ce.Array,Be=ce.Date,ot=ce.Error,Ft=ce.Function,rn=ce.Math,Qt=ce.Object,QA=ce.RegExp,dke=ce.String,ps=ce.TypeError,Hb=se.prototype,fke=Ft.prototype,nd=Qt.prototype,Mb=ce["__core-js_shared__"],Ub=fke.toString,Dt=nd.hasOwnProperty,hke=0,sH=function(){var l=/[^.]+$/.exec(Mb&&Mb.keys&&Mb.keys.IE_PROTO||"");return l?"Symbol(src)_1."+l:""}(),jb=nd.toString,mke=Ub.call(Qt),gke=dn._,yke=QA("^"+Ub.call(Dt).replace(Yu,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Xb=VV?ce.Buffer:e,Zc=ce.Symbol,Yb=ce.Uint8Array,oH=Xb?Xb.allocUnsafe:e,Kb=nH(Qt.getPrototypeOf,Qt),aH=Qt.create,cH=nd.propertyIsEnumerable,zb=Hb.splice,uH=Zc?Zc.isConcatSpreadable:e,am=Zc?Zc.iterator:e,Ju=Zc?Zc.toStringTag:e,Jb=function(){try{var l=rl(Qt,"defineProperty");return l({},"",{}),l}catch{}}(),vke=ce.clearTimeout!==dn.clearTimeout&&ce.clearTimeout,bke=Be&&Be.now!==dn.Date.now&&Be.now,Ike=ce.setTimeout!==dn.setTimeout&&ce.setTimeout,$b=rn.ceil,Qb=rn.floor,eR=Qt.getOwnPropertySymbols,_ke=Xb?Xb.isBuffer:e,lH=ce.isFinite,Cke=Hb.join,xke=nH(Qt.keys,Qt),nn=rn.max,Pn=rn.min,Ske=Be.now,wke=ce.parseInt,pH=rn.random,Eke=Hb.reverse,tR=rl(ce,"DataView"),cm=rl(ce,"Map"),rR=rl(ce,"Promise"),id=rl(ce,"Set"),um=rl(ce,"WeakMap"),lm=rl(Qt,"create"),eI=um&&new um,sd={},Ake=nl(tR),Rke=nl(cm),Tke=nl(rR),Nke=nl(id),Bke=nl(um),tI=Zc?Zc.prototype:e,pm=tI?tI.valueOf:e,dH=tI?tI.toString:e;function O(l){if(Rr(l)&&!pt(l)&&!(l instanceof _t)){if(l instanceof ds)return l;if(Dt.call(l,"__wrapped__"))return fM(l)}return new ds(l)}var od=function(){function l(){}return function(f){if(!_r(f))return{};if(aH)return aH(f);l.prototype=f;var b=new l;return l.prototype=e,b}}();function rI(){}function ds(l,f){this.__wrapped__=l,this.__actions__=[],this.__chain__=!!f,this.__index__=0,this.__values__=e}O.templateSettings={escape:rm,evaluate:Di,interpolate:nm,variable:"",imports:{_:O}},O.prototype=rI.prototype,O.prototype.constructor=O,ds.prototype=od(rI.prototype),ds.prototype.constructor=ds;function _t(l){this.__wrapped__=l,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=he,this.__views__=[]}function kke(){var l=new _t(this.__wrapped__);return l.__actions__=mi(this.__actions__),l.__dir__=this.__dir__,l.__filtered__=this.__filtered__,l.__iteratees__=mi(this.__iteratees__),l.__takeCount__=this.__takeCount__,l.__views__=mi(this.__views__),l}function Oke(){if(this.__filtered__){var l=new _t(this);l.__dir__=-1,l.__filtered__=!0}else l=this.clone(),l.__dir__*=-1;return l}function Gke(){var l=this.__wrapped__.value(),f=this.__dir__,b=pt(l),C=f<0,N=b?l.length:0,P=jOe(0,N,this.__views__),U=P.start,X=P.end,Q=X-U,le=C?X:U-1,de=this.__iteratees__,ye=de.length,Ae=0,He=Pn(Q,this.__takeCount__);if(!b||!C&&N==Q&&He==Q)return LH(l,this.__actions__);var et=[];e:for(;Q--&&Ae<He;){le+=f;for(var mt=-1,tt=l[le];++mt<ye;){var It=de[mt],Et=It.iteratee,Ui=It.type,ri=Et(tt);if(Ui==M)tt=ri;else if(!ri){if(Ui==B)continue e;break e}}et[Ae++]=tt}return et}_t.prototype=od(rI.prototype),_t.prototype.constructor=_t;function $u(l){var f=-1,b=l==null?0:l.length;for(this.clear();++f<b;){var C=l[f];this.set(C[0],C[1])}}function Fke(){this.__data__=lm?lm(null):{},this.size=0}function Lke(l){var f=this.has(l)&&delete this.__data__[l];return this.size-=f?1:0,f}function Zke(l){var f=this.__data__;if(lm){var b=f[l];return b===o?e:b}return Dt.call(f,l)?f[l]:e}function Pke(l){var f=this.__data__;return lm?f[l]!==e:Dt.call(f,l)}function Wke(l,f){var b=this.__data__;return this.size+=this.has(l)?0:1,b[l]=lm&&f===e?o:f,this}$u.prototype.clear=Fke,$u.prototype.delete=Lke,$u.prototype.get=Zke,$u.prototype.has=Pke,$u.prototype.set=Wke;function Ea(l){var f=-1,b=l==null?0:l.length;for(this.clear();++f<b;){var C=l[f];this.set(C[0],C[1])}}function Dke(){this.__data__=[],this.size=0}function qke(l){var f=this.__data__,b=nI(f,l);if(b<0)return!1;var C=f.length-1;return b==C?f.pop():zb.call(f,b,1),--this.size,!0}function Vke(l){var f=this.__data__,b=nI(f,l);return b<0?e:f[b][1]}function Hke(l){return nI(this.__data__,l)>-1}function Mke(l,f){var b=this.__data__,C=nI(b,l);return C<0?(++this.size,b.push([l,f])):b[C][1]=f,this}Ea.prototype.clear=Dke,Ea.prototype.delete=qke,Ea.prototype.get=Vke,Ea.prototype.has=Hke,Ea.prototype.set=Mke;function Aa(l){var f=-1,b=l==null?0:l.length;for(this.clear();++f<b;){var C=l[f];this.set(C[0],C[1])}}function Uke(){this.size=0,this.__data__={hash:new $u,map:new(cm||Ea),string:new $u}}function jke(l){var f=mI(this,l).delete(l);return this.size-=f?1:0,f}function Xke(l){return mI(this,l).get(l)}function Yke(l){return mI(this,l).has(l)}function Kke(l,f){var b=mI(this,l),C=b.size;return b.set(l,f),this.size+=b.size==C?0:1,this}Aa.prototype.clear=Uke,Aa.prototype.delete=jke,Aa.prototype.get=Xke,Aa.prototype.has=Yke,Aa.prototype.set=Kke;function Qu(l){var f=-1,b=l==null?0:l.length;for(this.__data__=new Aa;++f<b;)this.add(l[f])}function zke(l){return this.__data__.set(l,o),this}function Jke(l){return this.__data__.has(l)}Qu.prototype.add=Qu.prototype.push=zke,Qu.prototype.has=Jke;function Js(l){var f=this.__data__=new Ea(l);this.size=f.size}function $ke(){this.__data__=new Ea,this.size=0}function Qke(l){var f=this.__data__,b=f.delete(l);return this.size=f.size,b}function eOe(l){return this.__data__.get(l)}function tOe(l){return this.__data__.has(l)}function rOe(l,f){var b=this.__data__;if(b instanceof Ea){var C=b.__data__;if(!cm||C.length<r-1)return C.push([l,f]),this.size=++b.size,this;b=this.__data__=new Aa(C)}return b.set(l,f),this.size=b.size,this}Js.prototype.clear=$ke,Js.prototype.delete=Qke,Js.prototype.get=eOe,Js.prototype.has=tOe,Js.prototype.set=rOe;function fH(l,f){var b=pt(l),C=!b&&il(l),N=!b&&!C&&Vc(l),P=!b&&!C&&!N&&ld(l),U=b||C||N||P,X=U?zA(l.length,dke):[],Q=X.length;for(var le in l)(f||Dt.call(l,le))&&!(U&&(le=="length"||N&&(le=="offset"||le=="parent")||P&&(le=="buffer"||le=="byteLength"||le=="byteOffset")||Ba(le,Q)))&&X.push(le);return X}function hH(l){var f=l.length;return f?l[fR(0,f-1)]:e}function nOe(l,f){return gI(mi(l),el(f,0,l.length))}function iOe(l){return gI(mi(l))}function nR(l,f,b){(b!==e&&!$s(l[f],b)||b===e&&!(f in l))&&Ra(l,f,b)}function dm(l,f,b){var C=l[f];(!(Dt.call(l,f)&&$s(C,b))||b===e&&!(f in l))&&Ra(l,f,b)}function nI(l,f){for(var b=l.length;b--;)if($s(l[b][0],f))return b;return-1}function sOe(l,f,b,C){return Pc(l,function(N,P,U){f(C,N,b(N),U)}),C}function mH(l,f){return l&&Ao(f,fn(f),l)}function oOe(l,f){return l&&Ao(f,yi(f),l)}function Ra(l,f,b){f=="__proto__"&&Jb?Jb(l,f,{configurable:!0,enumerable:!0,value:b,writable:!0}):l[f]=b}function iR(l,f){for(var b=-1,C=f.length,N=se(C),P=l==null;++b<C;)N[b]=P?e:PR(l,f[b]);return N}function el(l,f,b){return l===l&&(b!==e&&(l=l<=b?l:b),f!==e&&(l=l>=f?l:f)),l}function fs(l,f,b,C,N,P){var U,X=f&p,Q=f&d,le=f&h;if(b&&(U=N?b(l,C,N,P):b(l)),U!==e)return U;if(!_r(l))return l;var de=pt(l);if(de){if(U=YOe(l),!X)return mi(l,U)}else{var ye=Wn(l),Ae=ye==Z||ye==R;if(Vc(l))return WH(l,X);if(ye==Je||ye==Oe||Ae&&!N){if(U=Q||Ae?{}:iM(l),!X)return Q?ZOe(l,oOe(U,l)):LOe(l,mH(U,l))}else{if(!nr[ye])return N?l:{};U=KOe(l,ye,X)}}P||(P=new Js);var He=P.get(l);if(He)return He;P.set(l,U),OM(l)?l.forEach(function(tt){U.add(fs(tt,f,b,tt,l,P))}):BM(l)&&l.forEach(function(tt,It){U.set(It,fs(tt,f,b,It,l,P))});var et=le?Q?SR:xR:Q?yi:fn,mt=de?e:et(l);return ls(mt||l,function(tt,It){mt&&(It=tt,tt=l[It]),dm(U,It,fs(tt,f,b,It,l,P))}),U}function aOe(l){var f=fn(l);return function(b){return gH(b,l,f)}}function gH(l,f,b){var C=b.length;if(l==null)return!C;for(l=Qt(l);C--;){var N=b[C],P=f[N],U=l[N];if(U===e&&!(N in l)||!P(U))return!1}return!0}function yH(l,f,b){if(typeof l!="function")throw new ps(i);return bm(function(){l.apply(e,b)},f)}function fm(l,f,b,C){var N=-1,P=Db,U=!0,X=l.length,Q=[],le=f.length;if(!X)return Q;b&&(f=ur(f,Vi(b))),C?(P=MA,U=!1):f.length>=r&&(P=om,U=!1,f=new Qu(f));e:for(;++N<X;){var de=l[N],ye=b==null?de:b(de);if(de=C||de!==0?de:0,U&&ye===ye){for(var Ae=le;Ae--;)if(f[Ae]===ye)continue e;Q.push(de)}else P(f,ye,C)||Q.push(de)}return Q}var Pc=MH(Eo),vH=MH(oR,!0);function cOe(l,f){var b=!0;return Pc(l,function(C,N,P){return b=!!f(C,N,P),b}),b}function iI(l,f,b){for(var C=-1,N=l.length;++C<N;){var P=l[C],U=f(P);if(U!=null&&(X===e?U===U&&!Mi(U):b(U,X)))var X=U,Q=P}return Q}function uOe(l,f,b,C){var N=l.length;for(b=ht(b),b<0&&(b=-b>N?0:N+b),C=C===e||C>N?N:ht(C),C<0&&(C+=N),C=b>C?0:FM(C);b<C;)l[b++]=f;return l}function bH(l,f){var b=[];return Pc(l,function(C,N,P){f(C,N,P)&&b.push(C)}),b}function Sn(l,f,b,C,N){var P=-1,U=l.length;for(b||(b=JOe),N||(N=[]);++P<U;){var X=l[P];f>0&&b(X)?f>1?Sn(X,f-1,b,C,N):Gc(N,X):C||(N[N.length]=X)}return N}var sR=UH(),IH=UH(!0);function Eo(l,f){return l&&sR(l,f,fn)}function oR(l,f){return l&&IH(l,f,fn)}function sI(l,f){return Oc(f,function(b){return ka(l[b])})}function tl(l,f){f=Dc(f,l);for(var b=0,C=f.length;l!=null&&b<C;)l=l[Ro(f[b++])];return b&&b==C?l:e}function _H(l,f,b){var C=f(l);return pt(l)?C:Gc(C,b(l))}function ei(l){return l==null?l===e?zp:rt:Ju&&Ju in Qt(l)?UOe(l):iGe(l)}function aR(l,f){return l>f}function lOe(l,f){return l!=null&&Dt.call(l,f)}function pOe(l,f){return l!=null&&f in Qt(l)}function dOe(l,f,b){return l>=Pn(f,b)&&l<nn(f,b)}function cR(l,f,b){for(var C=b?MA:Db,N=l[0].length,P=l.length,U=P,X=se(P),Q=1/0,le=[];U--;){var de=l[U];U&&f&&(de=ur(de,Vi(f))),Q=Pn(de.length,Q),X[U]=!b&&(f||N>=120&&de.length>=120)?new Qu(U&&de):e}de=l[0];var ye=-1,Ae=X[0];e:for(;++ye<N&&le.length<Q;){var He=de[ye],et=f?f(He):He;if(He=b||He!==0?He:0,!(Ae?om(Ae,et):C(le,et,b))){for(U=P;--U;){var mt=X[U];if(!(mt?om(mt,et):C(l[U],et,b)))continue e}Ae&&Ae.push(et),le.push(He)}}return le}function fOe(l,f,b,C){return Eo(l,function(N,P,U){f(C,b(N),P,U)}),C}function hm(l,f,b){f=Dc(f,l),l=cM(l,f);var C=l==null?l:l[Ro(ms(f))];return C==null?e:qi(C,l,b)}function CH(l){return Rr(l)&&ei(l)==Oe}function hOe(l){return Rr(l)&&ei(l)==wo}function mOe(l){return Rr(l)&&ei(l)==gt}function mm(l,f,b,C,N){return l===f?!0:l==null||f==null||!Rr(l)&&!Rr(f)?l!==l&&f!==f:gOe(l,f,b,C,mm,N)}function gOe(l,f,b,C,N,P){var U=pt(l),X=pt(f),Q=U?Xe:Wn(l),le=X?Xe:Wn(f);Q=Q==Oe?Je:Q,le=le==Oe?Je:le;var de=Q==Je,ye=le==Je,Ae=Q==le;if(Ae&&Vc(l)){if(!Vc(f))return!1;U=!0,de=!1}if(Ae&&!de)return P||(P=new Js),U||ld(l)?tM(l,f,b,C,N,P):HOe(l,f,Q,b,C,N,P);if(!(b&m)){var He=de&&Dt.call(l,"__wrapped__"),et=ye&&Dt.call(f,"__wrapped__");if(He||et){var mt=He?l.value():l,tt=et?f.value():f;return P||(P=new Js),N(mt,tt,b,C,P)}}return Ae?(P||(P=new Js),MOe(l,f,b,C,N,P)):!1}function yOe(l){return Rr(l)&&Wn(l)==ne}function uR(l,f,b,C){var N=b.length,P=N,U=!C;if(l==null)return!P;for(l=Qt(l);N--;){var X=b[N];if(U&&X[2]?X[1]!==l[X[0]]:!(X[0]in l))return!1}for(;++N<P;){X=b[N];var Q=X[0],le=l[Q],de=X[1];if(U&&X[2]){if(le===e&&!(Q in l))return!1}else{var ye=new Js;if(C)var Ae=C(le,de,Q,l,f,ye);if(!(Ae===e?mm(de,le,m|g,C,ye):Ae))return!1}}return!0}function xH(l){if(!_r(l)||QOe(l))return!1;var f=ka(l)?yke:a2e;return f.test(nl(l))}function vOe(l){return Rr(l)&&ei(l)==Yr}function bOe(l){return Rr(l)&&Wn(l)==Pe}function IOe(l){return Rr(l)&&CI(l.length)&&!!ar[ei(l)]}function SH(l){return typeof l=="function"?l:l==null?vi:typeof l=="object"?pt(l)?AH(l[0],l[1]):EH(l):jM(l)}function lR(l){if(!vm(l))return xke(l);var f=[];for(var b in Qt(l))Dt.call(l,b)&&b!="constructor"&&f.push(b);return f}function _Oe(l){if(!_r(l))return nGe(l);var f=vm(l),b=[];for(var C in l)C=="constructor"&&(f||!Dt.call(l,C))||b.push(C);return b}function pR(l,f){return l<f}function wH(l,f){var b=-1,C=gi(l)?se(l.length):[];return Pc(l,function(N,P,U){C[++b]=f(N,P,U)}),C}function EH(l){var f=ER(l);return f.length==1&&f[0][2]?oM(f[0][0],f[0][1]):function(b){return b===l||uR(b,l,f)}}function AH(l,f){return RR(l)&&sM(f)?oM(Ro(l),f):function(b){var C=PR(b,l);return C===e&&C===f?WR(b,l):mm(f,C,m|g)}}function oI(l,f,b,C,N){l!==f&&sR(f,function(P,U){if(N||(N=new Js),_r(P))COe(l,f,U,b,oI,C,N);else{var X=C?C(NR(l,U),P,U+"",l,f,N):e;X===e&&(X=P),nR(l,U,X)}},yi)}function COe(l,f,b,C,N,P,U){var X=NR(l,b),Q=NR(f,b),le=U.get(Q);if(le){nR(l,b,le);return}var de=P?P(X,Q,b+"",l,f,U):e,ye=de===e;if(ye){var Ae=pt(Q),He=!Ae&&Vc(Q),et=!Ae&&!He&&ld(Q);de=Q,Ae||He||et?pt(X)?de=X:Fr(X)?de=mi(X):He?(ye=!1,de=WH(Q,!0)):et?(ye=!1,de=DH(Q,!0)):de=[]:Im(Q)||il(Q)?(de=X,il(X)?de=LM(X):(!_r(X)||ka(X))&&(de=iM(Q))):ye=!1}ye&&(U.set(Q,de),N(de,Q,C,P,U),U.delete(Q)),nR(l,b,de)}function RH(l,f){var b=l.length;if(b)return f+=f<0?b:0,Ba(f,b)?l[f]:e}function TH(l,f,b){f.length?f=ur(f,function(P){return pt(P)?function(U){return tl(U,P.length===1?P[0]:P)}:P}):f=[vi];var C=-1;f=ur(f,Vi($e()));var N=wH(l,function(P,U,X){var Q=ur(f,function(le){return le(P)});return{criteria:Q,index:++C,value:P}});return K2e(N,function(P,U){return FOe(P,U,b)})}function xOe(l,f){return NH(l,f,function(b,C){return WR(l,C)})}function NH(l,f,b){for(var C=-1,N=f.length,P={};++C<N;){var U=f[C],X=tl(l,U);b(X,U)&&gm(P,Dc(U,l),X)}return P}function SOe(l){return function(f){return tl(f,l)}}function dR(l,f,b,C){var N=C?Y2e:ed,P=-1,U=f.length,X=l;for(l===f&&(f=mi(f)),b&&(X=ur(l,Vi(b)));++P<U;)for(var Q=0,le=f[P],de=b?b(le):le;(Q=N(X,de,Q,C))>-1;)X!==l&&zb.call(X,Q,1),zb.call(l,Q,1);return l}function BH(l,f){for(var b=l?f.length:0,C=b-1;b--;){var N=f[b];if(b==C||N!==P){var P=N;Ba(N)?zb.call(l,N,1):gR(l,N)}}return l}function fR(l,f){return l+Qb(pH()*(f-l+1))}function wOe(l,f,b,C){for(var N=-1,P=nn($b((f-l)/(b||1)),0),U=se(P);P--;)U[C?P:++N]=l,l+=b;return U}function hR(l,f){var b="";if(!l||f<1||f>q)return b;do f%2&&(b+=l),f=Qb(f/2),f&&(l+=l);while(f);return b}function yt(l,f){return BR(aM(l,f,vi),l+"")}function EOe(l){return hH(pd(l))}function AOe(l,f){var b=pd(l);return gI(b,el(f,0,b.length))}function gm(l,f,b,C){if(!_r(l))return l;f=Dc(f,l);for(var N=-1,P=f.length,U=P-1,X=l;X!=null&&++N<P;){var Q=Ro(f[N]),le=b;if(Q==="__proto__"||Q==="constructor"||Q==="prototype")return l;if(N!=U){var de=X[Q];le=C?C(de,Q,X):e,le===e&&(le=_r(de)?de:Ba(f[N+1])?[]:{})}dm(X,Q,le),X=X[Q]}return l}var kH=eI?function(l,f){return eI.set(l,f),l}:vi,ROe=Jb?function(l,f){return Jb(l,"toString",{configurable:!0,enumerable:!1,value:qR(f),writable:!0})}:vi;function TOe(l){return gI(pd(l))}function hs(l,f,b){var C=-1,N=l.length;f<0&&(f=-f>N?0:N+f),b=b>N?N:b,b<0&&(b+=N),N=f>b?0:b-f>>>0,f>>>=0;for(var P=se(N);++C<N;)P[C]=l[C+f];return P}function NOe(l,f){var b;return Pc(l,function(C,N,P){return b=f(C,N,P),!b}),!!b}function aI(l,f,b){var C=0,N=l==null?C:l.length;if(typeof f=="number"&&f===f&&N<=we){for(;C<N;){var P=C+N>>>1,U=l[P];U!==null&&!Mi(U)&&(b?U<=f:U<f)?C=P+1:N=P}return N}return mR(l,f,vi,b)}function mR(l,f,b,C){var N=0,P=l==null?0:l.length;if(P===0)return 0;f=b(f);for(var U=f!==f,X=f===null,Q=Mi(f),le=f===e;N<P;){var de=Qb((N+P)/2),ye=b(l[de]),Ae=ye!==e,He=ye===null,et=ye===ye,mt=Mi(ye);if(U)var tt=C||et;else le?tt=et&&(C||Ae):X?tt=et&&Ae&&(C||!He):Q?tt=et&&Ae&&!He&&(C||!mt):He||mt?tt=!1:tt=C?ye<=f:ye<f;tt?N=de+1:P=de}return Pn(P,fe)}function OH(l,f){for(var b=-1,C=l.length,N=0,P=[];++b<C;){var U=l[b],X=f?f(U):U;if(!b||!$s(X,Q)){var Q=X;P[N++]=U===0?0:U}}return P}function GH(l){return typeof l=="number"?l:Mi(l)?z:+l}function Hi(l){if(typeof l=="string")return l;if(pt(l))return ur(l,Hi)+"";if(Mi(l))return dH?dH.call(l):"";var f=l+"";return f=="0"&&1/l==-V?"-0":f}function Wc(l,f,b){var C=-1,N=Db,P=l.length,U=!0,X=[],Q=X;if(b)U=!1,N=MA;else if(P>=r){var le=f?null:qOe(l);if(le)return Vb(le);U=!1,N=om,Q=new Qu}else Q=f?[]:X;e:for(;++C<P;){var de=l[C],ye=f?f(de):de;if(de=b||de!==0?de:0,U&&ye===ye){for(var Ae=Q.length;Ae--;)if(Q[Ae]===ye)continue e;f&&Q.push(ye),X.push(de)}else N(Q,ye,b)||(Q!==X&&Q.push(ye),X.push(de))}return X}function gR(l,f){return f=Dc(f,l),l=cM(l,f),l==null||delete l[Ro(ms(f))]}function FH(l,f,b,C){return gm(l,f,b(tl(l,f)),C)}function cI(l,f,b,C){for(var N=l.length,P=C?N:-1;(C?P--:++P<N)&&f(l[P],P,l););return b?hs(l,C?0:P,C?P+1:N):hs(l,C?P+1:0,C?N:P)}function LH(l,f){var b=l;return b instanceof _t&&(b=b.value()),UA(f,function(C,N){return N.func.apply(N.thisArg,Gc([C],N.args))},b)}function yR(l,f,b){var C=l.length;if(C<2)return C?Wc(l[0]):[];for(var N=-1,P=se(C);++N<C;)for(var U=l[N],X=-1;++X<C;)X!=N&&(P[N]=fm(P[N]||U,l[X],f,b));return Wc(Sn(P,1),f,b)}function ZH(l,f,b){for(var C=-1,N=l.length,P=f.length,U={};++C<N;){var X=C<P?f[C]:e;b(U,l[C],X)}return U}function vR(l){return Fr(l)?l:[]}function bR(l){return typeof l=="function"?l:vi}function Dc(l,f){return pt(l)?l:RR(l,f)?[l]:dM(Zt(l))}var BOe=yt;function qc(l,f,b){var C=l.length;return b=b===e?C:b,!f&&b>=C?l:hs(l,f,b)}var PH=vke||function(l){return dn.clearTimeout(l)};function WH(l,f){if(f)return l.slice();var b=l.length,C=oH?oH(b):new l.constructor(b);return l.copy(C),C}function IR(l){var f=new l.constructor(l.byteLength);return new Yb(f).set(new Yb(l)),f}function kOe(l,f){var b=f?IR(l.buffer):l.buffer;return new l.constructor(b,l.byteOffset,l.byteLength)}function OOe(l){var f=new l.constructor(l.source,CV.exec(l));return f.lastIndex=l.lastIndex,f}function GOe(l){return pm?Qt(pm.call(l)):{}}function DH(l,f){var b=f?IR(l.buffer):l.buffer;return new l.constructor(b,l.byteOffset,l.length)}function qH(l,f){if(l!==f){var b=l!==e,C=l===null,N=l===l,P=Mi(l),U=f!==e,X=f===null,Q=f===f,le=Mi(f);if(!X&&!le&&!P&&l>f||P&&U&&Q&&!X&&!le||C&&U&&Q||!b&&Q||!N)return 1;if(!C&&!P&&!le&&l<f||le&&b&&N&&!C&&!P||X&&b&&N||!U&&N||!Q)return-1}return 0}function FOe(l,f,b){for(var C=-1,N=l.criteria,P=f.criteria,U=N.length,X=b.length;++C<U;){var Q=qH(N[C],P[C]);if(Q){if(C>=X)return Q;var le=b[C];return Q*(le=="desc"?-1:1)}}return l.index-f.index}function VH(l,f,b,C){for(var N=-1,P=l.length,U=b.length,X=-1,Q=f.length,le=nn(P-U,0),de=se(Q+le),ye=!C;++X<Q;)de[X]=f[X];for(;++N<U;)(ye||N<P)&&(de[b[N]]=l[N]);for(;le--;)de[X++]=l[N++];return de}function HH(l,f,b,C){for(var N=-1,P=l.length,U=-1,X=b.length,Q=-1,le=f.length,de=nn(P-X,0),ye=se(de+le),Ae=!C;++N<de;)ye[N]=l[N];for(var He=N;++Q<le;)ye[He+Q]=f[Q];for(;++U<X;)(Ae||N<P)&&(ye[He+b[U]]=l[N++]);return ye}function mi(l,f){var b=-1,C=l.length;for(f||(f=se(C));++b<C;)f[b]=l[b];return f}function Ao(l,f,b,C){var N=!b;b||(b={});for(var P=-1,U=f.length;++P<U;){var X=f[P],Q=C?C(b[X],l[X],X,b,l):e;Q===e&&(Q=l[X]),N?Ra(b,X,Q):dm(b,X,Q)}return b}function LOe(l,f){return Ao(l,AR(l),f)}function ZOe(l,f){return Ao(l,rM(l),f)}function uI(l,f){return function(b,C){var N=pt(b)?V2e:sOe,P=f?f():{};return N(b,l,$e(C,2),P)}}function ad(l){return yt(function(f,b){var C=-1,N=b.length,P=N>1?b[N-1]:e,U=N>2?b[2]:e;for(P=l.length>3&&typeof P=="function"?(N--,P):e,U&&ti(b[0],b[1],U)&&(P=N<3?e:P,N=1),f=Qt(f);++C<N;){var X=b[C];X&&l(f,X,C,P)}return f})}function MH(l,f){return function(b,C){if(b==null)return b;if(!gi(b))return l(b,C);for(var N=b.length,P=f?N:-1,U=Qt(b);(f?P--:++P<N)&&C(U[P],P,U)!==!1;);return b}}function UH(l){return function(f,b,C){for(var N=-1,P=Qt(f),U=C(f),X=U.length;X--;){var Q=U[l?X:++N];if(b(P[Q],Q,P)===!1)break}return f}}function POe(l,f,b){var C=f&v,N=ym(l);function P(){var U=this&&this!==dn&&this instanceof P?N:l;return U.apply(C?b:this,arguments)}return P}function jH(l){return function(f){f=Zt(f);var b=td(f)?zs(f):e,C=b?b[0]:f.charAt(0),N=b?qc(b,1).join(""):f.slice(1);return C[l]()+N}}function cd(l){return function(f){return UA(MM(HM(f).replace(R2e,"")),l,"")}}function ym(l){return function(){var f=arguments;switch(f.length){case 0:return new l;case 1:return new l(f[0]);case 2:return new l(f[0],f[1]);case 3:return new l(f[0],f[1],f[2]);case 4:return new l(f[0],f[1],f[2],f[3]);case 5:return new l(f[0],f[1],f[2],f[3],f[4]);case 6:return new l(f[0],f[1],f[2],f[3],f[4],f[5]);case 7:return new l(f[0],f[1],f[2],f[3],f[4],f[5],f[6])}var b=od(l.prototype),C=l.apply(b,f);return _r(C)?C:b}}function WOe(l,f,b){var C=ym(l);function N(){for(var P=arguments.length,U=se(P),X=P,Q=ud(N);X--;)U[X]=arguments[X];var le=P<3&&U[0]!==Q&&U[P-1]!==Q?[]:Fc(U,Q);if(P-=le.length,P<b)return JH(l,f,lI,N.placeholder,e,U,le,e,e,b-P);var de=this&&this!==dn&&this instanceof N?C:l;return qi(de,this,U)}return N}function XH(l){return function(f,b,C){var N=Qt(f);if(!gi(f)){var P=$e(b,3);f=fn(f),b=function(X){return P(N[X],X,N)}}var U=l(f,b,C);return U>-1?N[P?f[U]:U]:e}}function YH(l){return Na(function(f){var b=f.length,C=b,N=ds.prototype.thru;for(l&&f.reverse();C--;){var P=f[C];if(typeof P!="function")throw new ps(i);if(N&&!U&&hI(P)=="wrapper")var U=new ds([],!0)}for(C=U?C:b;++C<b;){P=f[C];var X=hI(P),Q=X=="wrapper"?wR(P):e;Q&&TR(Q[0])&&Q[1]==(w|_|E|T)&&!Q[4].length&&Q[9]==1?U=U[hI(Q[0])].apply(U,Q[3]):U=P.length==1&&TR(P)?U[X]():U.thru(P)}return function(){var le=arguments,de=le[0];if(U&&le.length==1&&pt(de))return U.plant(de).value();for(var ye=0,Ae=b?f[ye].apply(this,le):de;++ye<b;)Ae=f[ye].call(this,Ae);return Ae}})}function lI(l,f,b,C,N,P,U,X,Q,le){var de=f&w,ye=f&v,Ae=f&I,He=f&(_|A),et=f&D,mt=Ae?e:ym(l);function tt(){for(var It=arguments.length,Et=se(It),Ui=It;Ui--;)Et[Ui]=arguments[Ui];if(He)var ri=ud(tt),ji=J2e(Et,ri);if(C&&(Et=VH(Et,C,N,He)),P&&(Et=HH(Et,P,U,He)),It-=ji,He&&It<le){var Lr=Fc(Et,ri);return JH(l,f,lI,tt.placeholder,b,Et,Lr,X,Q,le-It)}var Qs=ye?b:this,Ga=Ae?Qs[l]:l;return It=Et.length,X?Et=sGe(Et,X):et&&It>1&&Et.reverse(),de&&Q<It&&(Et.length=Q),this&&this!==dn&&this instanceof tt&&(Ga=mt||ym(Ga)),Ga.apply(Qs,Et)}return tt}function KH(l,f){return function(b,C){return fOe(b,l,f(C),{})}}function pI(l,f){return function(b,C){var N;if(b===e&&C===e)return f;if(b!==e&&(N=b),C!==e){if(N===e)return C;typeof b=="string"||typeof C=="string"?(b=Hi(b),C=Hi(C)):(b=GH(b),C=GH(C)),N=l(b,C)}return N}}function _R(l){return Na(function(f){return f=ur(f,Vi($e())),yt(function(b){var C=this;return l(f,function(N){return qi(N,C,b)})})})}function dI(l,f){f=f===e?" ":Hi(f);var b=f.length;if(b<2)return b?hR(f,l):f;var C=hR(f,$b(l/rd(f)));return td(f)?qc(zs(C),0,l).join(""):C.slice(0,l)}function DOe(l,f,b,C){var N=f&v,P=ym(l);function U(){for(var X=-1,Q=arguments.length,le=-1,de=C.length,ye=se(de+Q),Ae=this&&this!==dn&&this instanceof U?P:l;++le<de;)ye[le]=C[le];for(;Q--;)ye[le++]=arguments[++X];return qi(Ae,N?b:this,ye)}return U}function zH(l){return function(f,b,C){return C&&typeof C!="number"&&ti(f,b,C)&&(b=C=e),f=Oa(f),b===e?(b=f,f=0):b=Oa(b),C=C===e?f<b?1:-1:Oa(C),wOe(f,b,C,l)}}function fI(l){return function(f,b){return typeof f=="string"&&typeof b=="string"||(f=gs(f),b=gs(b)),l(f,b)}}function JH(l,f,b,C,N,P,U,X,Q,le){var de=f&_,ye=de?U:e,Ae=de?e:U,He=de?P:e,et=de?e:P;f|=de?E:S,f&=~(de?S:E),f&x||(f&=~(v|I));var mt=[l,f,N,He,ye,et,Ae,X,Q,le],tt=b.apply(e,mt);return TR(l)&&uM(tt,mt),tt.placeholder=C,lM(tt,l,f)}function CR(l){var f=rn[l];return function(b,C){if(b=gs(b),C=C==null?0:Pn(ht(C),292),C&&lH(b)){var N=(Zt(b)+"e").split("e"),P=f(N[0]+"e"+(+N[1]+C));return N=(Zt(P)+"e").split("e"),+(N[0]+"e"+(+N[1]-C))}return f(b)}}var qOe=id&&1/Vb(new id([,-0]))[1]==V?function(l){return new id(l)}:MR;function $H(l){return function(f){var b=Wn(f);return b==ne?$A(f):b==Pe?ike(f):z2e(f,l(f))}}function Ta(l,f,b,C,N,P,U,X){var Q=f&I;if(!Q&&typeof l!="function")throw new ps(i);var le=C?C.length:0;if(le||(f&=~(E|S),C=N=e),U=U===e?U:nn(ht(U),0),X=X===e?X:ht(X),le-=N?N.length:0,f&S){var de=C,ye=N;C=N=e}var Ae=Q?e:wR(l),He=[l,f,b,C,N,de,ye,P,U,X];if(Ae&&rGe(He,Ae),l=He[0],f=He[1],b=He[2],C=He[3],N=He[4],X=He[9]=He[9]===e?Q?0:l.length:nn(He[9]-le,0),!X&&f&(_|A)&&(f&=~(_|A)),!f||f==v)var et=POe(l,f,b);else f==_||f==A?et=WOe(l,f,X):(f==E||f==(v|E))&&!N.length?et=DOe(l,f,b,C):et=lI.apply(e,He);var mt=Ae?kH:uM;return lM(mt(et,He),l,f)}function QH(l,f,b,C){return l===e||$s(l,nd[b])&&!Dt.call(C,b)?f:l}function eM(l,f,b,C,N,P){return _r(l)&&_r(f)&&(P.set(f,l),oI(l,f,e,eM,P),P.delete(f)),l}function VOe(l){return Im(l)?e:l}function tM(l,f,b,C,N,P){var U=b&m,X=l.length,Q=f.length;if(X!=Q&&!(U&&Q>X))return!1;var le=P.get(l),de=P.get(f);if(le&&de)return le==f&&de==l;var ye=-1,Ae=!0,He=b&g?new Qu:e;for(P.set(l,f),P.set(f,l);++ye<X;){var et=l[ye],mt=f[ye];if(C)var tt=U?C(mt,et,ye,f,l,P):C(et,mt,ye,l,f,P);if(tt!==e){if(tt)continue;Ae=!1;break}if(He){if(!jA(f,function(It,Et){if(!om(He,Et)&&(et===It||N(et,It,b,C,P)))return He.push(Et)})){Ae=!1;break}}else if(!(et===mt||N(et,mt,b,C,P))){Ae=!1;break}}return P.delete(l),P.delete(f),Ae}function HOe(l,f,b,C,N,P,U){switch(b){case G:if(l.byteLength!=f.byteLength||l.byteOffset!=f.byteOffset)return!1;l=l.buffer,f=f.buffer;case wo:return!(l.byteLength!=f.byteLength||!P(new Yb(l),new Yb(f)));case Re:case gt:case J:return $s(+l,+f);case Ce:return l.name==f.name&&l.message==f.message;case Yr:case $t:return l==f+"";case ne:var X=$A;case Pe:var Q=C&m;if(X||(X=Vb),l.size!=f.size&&!Q)return!1;var le=U.get(l);if(le)return le==f;C|=g,U.set(l,f);var de=tM(X(l),X(f),C,N,P,U);return U.delete(l),de;case xn:if(pm)return pm.call(l)==pm.call(f)}return!1}function MOe(l,f,b,C,N,P){var U=b&m,X=xR(l),Q=X.length,le=xR(f),de=le.length;if(Q!=de&&!U)return!1;for(var ye=Q;ye--;){var Ae=X[ye];if(!(U?Ae in f:Dt.call(f,Ae)))return!1}var He=P.get(l),et=P.get(f);if(He&&et)return He==f&&et==l;var mt=!0;P.set(l,f),P.set(f,l);for(var tt=U;++ye<Q;){Ae=X[ye];var It=l[Ae],Et=f[Ae];if(C)var Ui=U?C(Et,It,Ae,f,l,P):C(It,Et,Ae,l,f,P);if(!(Ui===e?It===Et||N(It,Et,b,C,P):Ui)){mt=!1;break}tt||(tt=Ae=="constructor")}if(mt&&!tt){var ri=l.constructor,ji=f.constructor;ri!=ji&&"constructor"in l&&"constructor"in f&&!(typeof ri=="function"&&ri instanceof ri&&typeof ji=="function"&&ji instanceof ji)&&(mt=!1)}return P.delete(l),P.delete(f),mt}function Na(l){return BR(aM(l,e,gM),l+"")}function xR(l){return _H(l,fn,AR)}function SR(l){return _H(l,yi,rM)}var wR=eI?function(l){return eI.get(l)}:MR;function hI(l){for(var f=l.name+"",b=sd[f],C=Dt.call(sd,f)?b.length:0;C--;){var N=b[C],P=N.func;if(P==null||P==l)return N.name}return f}function ud(l){var f=Dt.call(O,"placeholder")?O:l;return f.placeholder}function $e(){var l=O.iteratee||VR;return l=l===VR?SH:l,arguments.length?l(arguments[0],arguments[1]):l}function mI(l,f){var b=l.__data__;return $Oe(f)?b[typeof f=="string"?"string":"hash"]:b.map}function ER(l){for(var f=fn(l),b=f.length;b--;){var C=f[b],N=l[C];f[b]=[C,N,sM(N)]}return f}function rl(l,f){var b=tke(l,f);return xH(b)?b:e}function UOe(l){var f=Dt.call(l,Ju),b=l[Ju];try{l[Ju]=e;var C=!0}catch{}var N=jb.call(l);return C&&(f?l[Ju]=b:delete l[Ju]),N}var AR=eR?function(l){return l==null?[]:(l=Qt(l),Oc(eR(l),function(f){return cH.call(l,f)}))}:UR,rM=eR?function(l){for(var f=[];l;)Gc(f,AR(l)),l=Kb(l);return f}:UR,Wn=ei;(tR&&Wn(new tR(new ArrayBuffer(1)))!=G||cm&&Wn(new cm)!=ne||rR&&Wn(rR.resolve())!=Yt||id&&Wn(new id)!=Pe||um&&Wn(new um)!=So)&&(Wn=function(l){var f=ei(l),b=f==Je?l.constructor:e,C=b?nl(b):"";if(C)switch(C){case Ake:return G;case Rke:return ne;case Tke:return Yt;case Nke:return Pe;case Bke:return So}return f});function jOe(l,f,b){for(var C=-1,N=b.length;++C<N;){var P=b[C],U=P.size;switch(P.type){case"drop":l+=U;break;case"dropRight":f-=U;break;case"take":f=Pn(f,l+U);break;case"takeRight":l=nn(l,f-U);break}}return{start:l,end:f}}function XOe(l){var f=l.match(Q1e);return f?f[1].split(e2e):[]}function nM(l,f,b){f=Dc(f,l);for(var C=-1,N=f.length,P=!1;++C<N;){var U=Ro(f[C]);if(!(P=l!=null&&b(l,U)))break;l=l[U]}return P||++C!=N?P:(N=l==null?0:l.length,!!N&&CI(N)&&Ba(U,N)&&(pt(l)||il(l)))}function YOe(l){var f=l.length,b=new l.constructor(f);return f&&typeof l[0]=="string"&&Dt.call(l,"index")&&(b.index=l.index,b.input=l.input),b}function iM(l){return typeof l.constructor=="function"&&!vm(l)?od(Kb(l)):{}}function KOe(l,f,b){var C=l.constructor;switch(f){case wo:return IR(l);case Re:case gt:return new C(+l);case G:return kOe(l,b);case j:case K:case oe:case pe:case Te:case st:case bt:case tn:case Wi:return DH(l,b);case ne:return new C;case J:case $t:return new C(l);case Yr:return OOe(l);case Pe:return new C;case xn:return GOe(l)}}function zOe(l,f){var b=f.length;if(!b)return l;var C=b-1;return f[C]=(b>1?"& ":"")+f[C],f=f.join(b>2?", ":" "),l.replace(Lb,`{
152
+ `).some(s=>s.startsWith("sentry-trace:")),!n&&(e.addHeader("sentry-trace",t),r&&e.addHeader("baggage",r))}function gat(e,t,r){let n=sp.parseUrl(r),i=t.method||"GET",s={"http.method":i};return n.search&&(s["http.query"]=n.search),n.hash&&(s["http.fragment"]=n.hash),Bx([e,"optionalAccess",o=>o.startChild,"call",o=>o({op:"http.client",origin:"auto.http.node.undici",description:`${i} ${sp.getSanitizedUrlString(n)}`,data:s})])}na.Undici=by;na.nativeNodeFetchintegration=hat});var BG=y(NG=>{c();Object.defineProperty(NG,"__esModule",{value:!0});var Ate=require("path"),yat=ge();function Rte(e){return e.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}function vat(e=process.argv[1]?yat.dirname(process.argv[1]):process.cwd(),t=Ate.sep==="\\"){let r=t?Rte(e):e;return n=>{if(!n)return;let i=t?Rte(n):n,{dir:s,base:o,ext:a}=Ate.posix.parse(i);(a===".js"||a===".mjs"||a===".cjs")&&(o=o.slice(0,a.length*-1)),s||(s=".");let u=s.lastIndexOf("/node_modules");if(u>-1)return`${s.slice(u+14).replace(/\//g,".")}:${o}`;if(s.startsWith(r)){let p=s.slice(r.length+1).replace(/\//g,".");return p&&(p+=":"),p+=o,p}return o}}NG.createGetModuleFromFilename=vat});var kG=y(bu=>{c();var{_optionalChain:bat}=ge();Object.defineProperty(bu,"__esModule",{value:!0});var Bs=Ct(),op=ge(),Iat=Fee(),_at=iG(),Cat=fx(),xat=hx(),Sat=yx(),wat=vx(),Eat=Cx(),Aat=Sx(),Rat=Ax(),Tat=Tx(),Nat=Nx(),Bat=kx(),kat=BG(),Oat=pG(),Tte=[Bs.inboundFiltersIntegration(),Bs.functionToStringIntegration(),Bs.linkedErrorsIntegration(),Bs.requestDataIntegration(),Cat.consoleIntegration(),wat.httpIntegration(),Bat.nativeNodeFetchintegration(),Rat.onUncaughtExceptionIntegration(),Tat.onUnhandledRejectionIntegration(),Sat.contextLinesIntegration(),Eat.localVariablesIntegration(),xat.nodeContextIntegration(),Aat.modulesIntegration()];function Nte(e){let t=Bs.getMainCarrier(),r=bat([t,"access",n=>n.__SENTRY__,"optionalAccess",n=>n.integrations])||[];return[...Tte,...r]}function Gat(e={}){Iat.setNodeAsyncContextStrategy(),e.defaultIntegrations===void 0&&(e.defaultIntegrations=Nte()),e.dsn===void 0&&process.env.SENTRY_DSN&&(e.dsn=process.env.SENTRY_DSN);let t=process.env.SENTRY_TRACES_SAMPLE_RATE;if(e.tracesSampleRate===void 0&&t){let n=parseFloat(t);isFinite(n)&&(e.tracesSampleRate=n)}if(e.release===void 0){let n=Bte();n!==void 0?e.release=n:e.autoSessionTracking=!1}e.environment===void 0&&process.env.SENTRY_ENVIRONMENT&&(e.environment=process.env.SENTRY_ENVIRONMENT),e.autoSessionTracking===void 0&&e.dsn!==void 0&&(e.autoSessionTracking=!0),e.instrumenter===void 0&&(e.instrumenter="sentry");let r={...e,stackParser:op.stackParserFromStackParserOptions(e.stackParser||kte),integrations:Bs.getIntegrationsToSetup(e),transport:e.transport||Oat.makeNodeTransport};if(Bs.initAndBind(e.clientClass||_at.NodeClient,r),e.autoSessionTracking&&Lat(),Zat(),e.spotlight){let n=Bs.getClient();if(n&&n.addIntegration){let i=n.getOptions().integrations;for(let s of i)n.addIntegration(s);n.addIntegration(Nat.spotlightIntegration({sidecarUrl:typeof e.spotlight=="string"?e.spotlight:void 0}))}}}function Fat(e){if(e===void 0)return!1;let t=e&&e.getOptions();return t&&t.autoSessionTracking!==void 0?t.autoSessionTracking:!1}function Bte(e){return process.env.SENTRY_RELEASE?process.env.SENTRY_RELEASE:op.GLOBAL_OBJ.SENTRY_RELEASE&&op.GLOBAL_OBJ.SENTRY_RELEASE.id?op.GLOBAL_OBJ.SENTRY_RELEASE.id:process.env.GITHUB_SHA||process.env.COMMIT_REF||process.env.VERCEL_GIT_COMMIT_SHA||process.env.VERCEL_GITHUB_COMMIT_SHA||process.env.VERCEL_GITLAB_COMMIT_SHA||process.env.VERCEL_BITBUCKET_COMMIT_SHA||process.env.ZEIT_GITHUB_COMMIT_SHA||process.env.ZEIT_GITLAB_COMMIT_SHA||process.env.ZEIT_BITBUCKET_COMMIT_SHA||process.env.CF_PAGES_COMMIT_SHA||e}var kte=op.createStackParser(op.nodeStackLineParser(kat.createGetModuleFromFilename()));function Lat(){Bs.startSession(),process.on("beforeExit",()=>{let e=Bs.getIsolationScope().getSession();e&&!["exited","crashed"].includes(e.status)&&Bs.endSession()})}function Zat(){let e=(process.env.SENTRY_USE_ENVIRONMENT||"").toLowerCase();if(!["false","n","no","off","0"].includes(e)){let t=process.env.SENTRY_TRACE,r=process.env.SENTRY_BAGGAGE,n=op.propagationContextFromHeaders(t,r);Bs.getCurrentScope().setPropagationContext(n)}}bu.defaultIntegrations=Tte;bu.defaultStackParser=kte;bu.getDefaultIntegrations=Nte;bu.getSentryRelease=Bte;bu.init=Gat;bu.isAutoSessionTrackingEnabled=Fat});var Ote=y(GG=>{c();Object.defineProperty(GG,"__esModule",{value:!0});var Ox=require("fs"),OG=require("path");function Pat(e){let t=OG.resolve(e);if(!Ox.existsSync(t))throw new Error(`Cannot read contents of ${t}. Directory does not exist.`);if(!Ox.statSync(t).isDirectory())throw new Error(`Cannot read contents of ${t}, because it is not a directory.`);let r=n=>Ox.readdirSync(n).reduce((i,s)=>{let o=OG.join(n,s);return Ox.statSync(o).isDirectory()?i.concat(r(o)):(i.push(o),i)},[]);return r(t).map(n=>OG.relative(t,n))}GG.deepReadDirSync=Pat});var Fte=y(Gte=>{c();Gte.base64WorkerScript="aW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gJ2luc3BlY3Rvcic7CmltcG9ydCB7IHdvcmtlckRhdGEsIHBhcmVudFBvcnQgfSBmcm9tICd3b3JrZXJfdGhyZWFkcyc7CmltcG9ydCB7IHBvc2l4LCBzZXAgfSBmcm9tICdwYXRoJzsKaW1wb3J0ICogYXMgaHR0cCBmcm9tICdodHRwJzsKaW1wb3J0ICogYXMgaHR0cHMgZnJvbSAnaHR0cHMnOwppbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7CmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCc7CmltcG9ydCB7IGNyZWF0ZUd6aXAgfSBmcm9tICd6bGliJzsKaW1wb3J0ICogYXMgbmV0IGZyb20gJ25ldCc7CmltcG9ydCAqIGFzIHRscyBmcm9tICd0bHMnOwoKLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZApjb25zdCBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIG9uZSBvZiBhIGZldyBFcnJvciBvciBFcnJvci1saWtlCiAqIHtAbGluayBpc0Vycm9yfS4KICoKICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuCiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC4KICovCmZ1bmN0aW9uIGlzRXJyb3Iod2F0KSB7CiAgc3dpdGNoIChvYmplY3RUb1N0cmluZy5jYWxsKHdhdCkpIHsKICAgIGNhc2UgJ1tvYmplY3QgRXJyb3JdJzoKICAgIGNhc2UgJ1tvYmplY3QgRXhjZXB0aW9uXSc6CiAgICBjYXNlICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nOgogICAgICByZXR1cm4gdHJ1ZTsKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiBpc0luc3RhbmNlT2Yod2F0LCBFcnJvcik7CiAgfQp9Ci8qKgogKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gYnVpbHQtaW4gY2xhc3MuCiAqCiAqIEBwYXJhbSB3YXQgVGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQKICogQHBhcmFtIGNsYXNzTmFtZQogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc0J1aWx0aW4od2F0LCBjbGFzc05hbWUpIHsKICByZXR1cm4gb2JqZWN0VG9TdHJpbmcuY2FsbCh3YXQpID09PSBgW29iamVjdCAke2NsYXNzTmFtZX1dYDsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIHN0cmluZwogKiB7QGxpbmsgaXNTdHJpbmd9LgogKgogKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNTdHJpbmcod2F0KSB7CiAgcmV0dXJuIGlzQnVpbHRpbih3YXQsICdTdHJpbmcnKTsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBvYmplY3QgbGl0ZXJhbCwgb3IgYSBjbGFzcyBpbnN0YW5jZS4KICoge0BsaW5rIGlzUGxhaW5PYmplY3R9LgogKgogKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh3YXQpIHsKICByZXR1cm4gaXNCdWlsdGluKHdhdCwgJ09iamVjdCcpOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEV2ZW50IGluc3RhbmNlCiAqIHtAbGluayBpc0V2ZW50fS4KICoKICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuCiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC4KICovCmZ1bmN0aW9uIGlzRXZlbnQod2F0KSB7CiAgcmV0dXJuIHR5cGVvZiBFdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHdhdCwgRXZlbnQpOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEVsZW1lbnQgaW5zdGFuY2UKICoge0BsaW5rIGlzRWxlbWVudH0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc0VsZW1lbnQod2F0KSB7CiAgcmV0dXJuIHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpc0luc3RhbmNlT2Yod2F0LCBFbGVtZW50KTsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlIGhhcyBhIHRoZW4gZnVuY3Rpb24uCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKi8KZnVuY3Rpb24gaXNUaGVuYWJsZSh3YXQpIHsKICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzCiAgcmV0dXJuIEJvb2xlYW4od2F0ICYmIHdhdC50aGVuICYmIHR5cGVvZiB3YXQudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7Cn0KCi8qKgogKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYSBTeW50aGV0aWNFdmVudAogKiB7QGxpbmsgaXNTeW50aGV0aWNFdmVudH0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KHdhdCkgewogIHJldHVybiBpc1BsYWluT2JqZWN0KHdhdCkgJiYgJ25hdGl2ZUV2ZW50JyBpbiB3YXQgJiYgJ3ByZXZlbnREZWZhdWx0JyBpbiB3YXQgJiYgJ3N0b3BQcm9wYWdhdGlvbicgaW4gd2F0Owp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUgaXMgTmFOCiAqIHtAbGluayBpc05hTn0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc05hTiQxKHdhdCkgewogIHJldHVybiB0eXBlb2Ygd2F0ID09PSAnbnVtYmVyJyAmJiB3YXQgIT09IHdhdDsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBpbnN0YW5jZSBvZiBwcm92aWRlZCBjb25zdHJ1Y3Rvci4KICoge0BsaW5rIGlzSW5zdGFuY2VPZn0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcGFyYW0gYmFzZSBBIGNvbnN0cnVjdG9yIHRvIGJlIHVzZWQgaW4gYSBjaGVjay4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNJbnN0YW5jZU9mKHdhdCwgYmFzZSkgewogIHRyeSB7CiAgICByZXR1cm4gd2F0IGluc3RhbmNlb2YgYmFzZTsKICB9IGNhdGNoIChfZSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIFZ1ZSBWaWV3TW9kZWwuCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc1Z1ZVZpZXdNb2RlbCh3YXQpIHsKICAvLyBOb3QgdXNpbmcgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyBiZWNhdXNlIGluIFZ1ZSAzIGl0IHdvdWxkIHJlYWQgdGhlIGluc3RhbmNlJ3MgU3ltYm9sKFN5bWJvbC50b1N0cmluZ1RhZykgcHJvcGVydHkuCiAgcmV0dXJuICEhKHR5cGVvZiB3YXQgPT09ICdvYmplY3QnICYmIHdhdCAhPT0gbnVsbCAmJiAoKHdhdCApLl9faXNWdWUgfHwgKHdhdCApLl9pc1Z1ZSkpOwp9CgovKiogSW50ZXJuYWwgZ2xvYmFsIHdpdGggY29tbW9uIHByb3BlcnRpZXMgYW5kIFNlbnRyeSBleHRlbnNpb25zICAqLwoKLy8gVGhlIGNvZGUgYmVsb3cgZm9yICdpc0dsb2JhbE9iaicgYW5kICdHTE9CQUxfT0JKJyB3YXMgY29waWVkIGZyb20gY29yZS1qcyBiZWZvcmUgbW9kaWZpY2F0aW9uCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvMWI5NDRkZjU1MjgyY2RjOTljOTBkYjVmNDllYjBiNmVkYTJjYzBhMy9wYWNrYWdlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMKLy8gY29yZS1qcyBoYXMgdGhlIGZvbGxvd2luZyBsaWNlbmNlOgovLwovLyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAyMiBEZW5pcyBQdXNoa2FyZXYKLy8KLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQovLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAovLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci8vCi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgovLwovLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgovLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgovLyBUSEUgU09GVFdBUkUuCgovKiogUmV0dXJucyAnb2JqJyBpZiBpdCdzIHRoZSBnbG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgcmV0dXJucyB1bmRlZmluZWQgKi8KZnVuY3Rpb24gaXNHbG9iYWxPYmoob2JqKSB7CiAgcmV0dXJuIG9iaiAmJiBvYmouTWF0aCA9PSBNYXRoID8gb2JqIDogdW5kZWZpbmVkOwp9CgovKiogR2V0J3MgdGhlIGdsb2JhbCBvYmplY3QgZm9yIHRoZSBjdXJyZW50IEphdmFTY3JpcHQgcnVudGltZSAqLwpjb25zdCBHTE9CQUxfT0JKID0KICAodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgaXNHbG9iYWxPYmooZ2xvYmFsVGhpcykpIHx8CiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscwogICh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKHdpbmRvdykpIHx8CiAgKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKHNlbGYpKSB8fAogICh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKGdsb2JhbCkpIHx8CiAgKGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB0aGlzOwogIH0pKCkgfHwKICB7fTsKCi8qKgogKiBAZGVwcmVjYXRlZCBVc2UgR0xPQkFMX09CSiBpbnN0ZWFkIG9yIFdJTkRPVyBmcm9tIEBzZW50cnkvYnJvd3Nlci4gVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjgKICovCmZ1bmN0aW9uIGdldEdsb2JhbE9iamVjdCgpIHsKICByZXR1cm4gR0xPQkFMX09CSiA7Cn0KCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpjb25zdCBXSU5ET1cgPSBnZXRHbG9iYWxPYmplY3QoKTsKCmNvbnN0IERFRkFVTFRfTUFYX1NUUklOR19MRU5HVEggPSA4MDsKCi8qKgogKiBHaXZlbiBhIGNoaWxkIERPTSBlbGVtZW50LCByZXR1cm5zIGEgcXVlcnktc2VsZWN0b3Igc3RhdGVtZW50IGRlc2NyaWJpbmcgdGhhdAogKiBhbmQgaXRzIGFuY2VzdG9ycwogKiBlLmcuIFtIVE1MRWxlbWVudF0gPT4gYm9keSA+IGRpdiA+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdCiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aAogKi8KZnVuY3Rpb24gaHRtbFRyZWVBc1N0cmluZygKICBlbGVtLAogIG9wdGlvbnMgPSB7fSwKKSB7CiAgaWYgKCFlbGVtKSB7CiAgICByZXR1cm4gJzx1bmtub3duPic7CiAgfQoKICAvLyB0cnkvY2F0Y2ggYm90aDoKICAvLyAtIGFjY2Vzc2luZyBldmVudC50YXJnZXQgKHNlZSBnZXRzZW50cnkvcmF2ZW4tanMjODM4LCAjNzY4KQogIC8vIC0gYGh0bWxUcmVlQXNTdHJpbmdgIGJlY2F1c2UgaXQncyBjb21wbGV4LCBhbmQganVzdCBhY2Nlc3NpbmcgdGhlIERPTSBpbmNvcnJlY3RseQogIC8vIC0gY2FuIHRocm93IGFuIGV4Y2VwdGlvbiBpbiBzb21lIGNpcmN1bXN0YW5jZXMuCiAgdHJ5IHsKICAgIGxldCBjdXJyZW50RWxlbSA9IGVsZW0gOwogICAgY29uc3QgTUFYX1RSQVZFUlNFX0hFSUdIVCA9IDU7CiAgICBjb25zdCBvdXQgPSBbXTsKICAgIGxldCBoZWlnaHQgPSAwOwogICAgbGV0IGxlbiA9IDA7CiAgICBjb25zdCBzZXBhcmF0b3IgPSAnID4gJzsKICAgIGNvbnN0IHNlcExlbmd0aCA9IHNlcGFyYXRvci5sZW5ndGg7CiAgICBsZXQgbmV4dFN0cjsKICAgIGNvbnN0IGtleUF0dHJzID0gQXJyYXkuaXNBcnJheShvcHRpb25zKSA/IG9wdGlvbnMgOiBvcHRpb25zLmtleUF0dHJzOwogICAgY29uc3QgbWF4U3RyaW5nTGVuZ3RoID0gKCFBcnJheS5pc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMubWF4U3RyaW5nTGVuZ3RoKSB8fCBERUZBVUxUX01BWF9TVFJJTkdfTEVOR1RIOwoKICAgIHdoaWxlIChjdXJyZW50RWxlbSAmJiBoZWlnaHQrKyA8IE1BWF9UUkFWRVJTRV9IRUlHSFQpIHsKICAgICAgbmV4dFN0ciA9IF9odG1sRWxlbWVudEFzU3RyaW5nKGN1cnJlbnRFbGVtLCBrZXlBdHRycyk7CiAgICAgIC8vIGJhaWwgb3V0IGlmCiAgICAgIC8vIC0gbmV4dFN0ciBpcyB0aGUgJ2h0bWwnIGVsZW1lbnQKICAgICAgLy8gLSB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgdGhhdCB3b3VsZCBiZSBjcmVhdGVkIGV4Y2VlZHMgbWF4U3RyaW5nTGVuZ3RoCiAgICAgIC8vICAgKGlnbm9yZSB0aGlzIGxpbWl0IGlmIHdlIGFyZSBvbiB0aGUgZmlyc3QgaXRlcmF0aW9uKQogICAgICBpZiAobmV4dFN0ciA9PT0gJ2h0bWwnIHx8IChoZWlnaHQgPiAxICYmIGxlbiArIG91dC5sZW5ndGggKiBzZXBMZW5ndGggKyBuZXh0U3RyLmxlbmd0aCA+PSBtYXhTdHJpbmdMZW5ndGgpKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIG91dC5wdXNoKG5leHRTdHIpOwoKICAgICAgbGVuICs9IG5leHRTdHIubGVuZ3RoOwogICAgICBjdXJyZW50RWxlbSA9IGN1cnJlbnRFbGVtLnBhcmVudE5vZGU7CiAgICB9CgogICAgcmV0dXJuIG91dC5yZXZlcnNlKCkuam9pbihzZXBhcmF0b3IpOwogIH0gY2F0Y2ggKF9vTykgewogICAgcmV0dXJuICc8dW5rbm93bj4nOwogIH0KfQoKLyoqCiAqIFJldHVybnMgYSBzaW1wbGUsIHF1ZXJ5LXNlbGVjdG9yIHJlcHJlc2VudGF0aW9uIG9mIGEgRE9NIGVsZW1lbnQKICogZS5nLiBbSFRNTEVsZW1lbnRdID0+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdCiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aAogKi8KZnVuY3Rpb24gX2h0bWxFbGVtZW50QXNTdHJpbmcoZWwsIGtleUF0dHJzKSB7CiAgY29uc3QgZWxlbSA9IGVsCgo7CgogIGNvbnN0IG91dCA9IFtdOwogIGxldCBjbGFzc05hbWU7CiAgbGV0IGNsYXNzZXM7CiAgbGV0IGtleTsKICBsZXQgYXR0cjsKICBsZXQgaTsKCiAgaWYgKCFlbGVtIHx8ICFlbGVtLnRhZ05hbWUpIHsKICAgIHJldHVybiAnJzsKICB9CgogIC8vIEB0cy1leHBlY3QtZXJyb3IgV0lORE9XIGhhcyBIVE1MRWxlbWVudAogIGlmIChXSU5ET1cuSFRNTEVsZW1lbnQpIHsKICAgIC8vIElmIHVzaW5nIHRoZSBjb21wb25lbnQgbmFtZSBhbm5vdGF0aW9uIHBsdWdpbiwgdGhpcyB2YWx1ZSBtYXkgYmUgYXZhaWxhYmxlIG9uIHRoZSBET00gbm9kZQogICAgaWYgKGVsZW0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbGVtLmRhdGFzZXQgJiYgZWxlbS5kYXRhc2V0WydzZW50cnlDb21wb25lbnQnXSkgewogICAgICByZXR1cm4gZWxlbS5kYXRhc2V0WydzZW50cnlDb21wb25lbnQnXTsKICAgIH0KICB9CgogIG91dC5wdXNoKGVsZW0udGFnTmFtZS50b0xvd2VyQ2FzZSgpKTsKCiAgLy8gUGFpcnMgb2YgYXR0cmlidXRlIGtleXMgZGVmaW5lZCBpbiBgc2VyaWFsaXplQXR0cmlidXRlYCBhbmQgdGhlaXIgdmFsdWVzIG9uIGVsZW1lbnQuCiAgY29uc3Qga2V5QXR0clBhaXJzID0KICAgIGtleUF0dHJzICYmIGtleUF0dHJzLmxlbmd0aAogICAgICA/IGtleUF0dHJzLmZpbHRlcihrZXlBdHRyID0+IGVsZW0uZ2V0QXR0cmlidXRlKGtleUF0dHIpKS5tYXAoa2V5QXR0ciA9PiBba2V5QXR0ciwgZWxlbS5nZXRBdHRyaWJ1dGUoa2V5QXR0cildKQogICAgICA6IG51bGw7CgogIGlmIChrZXlBdHRyUGFpcnMgJiYga2V5QXR0clBhaXJzLmxlbmd0aCkgewogICAga2V5QXR0clBhaXJzLmZvckVhY2goa2V5QXR0clBhaXIgPT4gewogICAgICBvdXQucHVzaChgWyR7a2V5QXR0clBhaXJbMF19PSIke2tleUF0dHJQYWlyWzFdfSJdYCk7CiAgICB9KTsKICB9IGVsc2UgewogICAgaWYgKGVsZW0uaWQpIHsKICAgICAgb3V0LnB1c2goYCMke2VsZW0uaWR9YCk7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdAogICAgY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWU7CiAgICBpZiAoY2xhc3NOYW1lICYmIGlzU3RyaW5nKGNsYXNzTmFtZSkpIHsKICAgICAgY2xhc3NlcyA9IGNsYXNzTmFtZS5zcGxpdCgvXHMrLyk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgb3V0LnB1c2goYC4ke2NsYXNzZXNbaV19YCk7CiAgICAgIH0KICAgIH0KICB9CiAgY29uc3QgYWxsb3dlZEF0dHJzID0gWydhcmlhLWxhYmVsJywgJ3R5cGUnLCAnbmFtZScsICd0aXRsZScsICdhbHQnXTsKICBmb3IgKGkgPSAwOyBpIDwgYWxsb3dlZEF0dHJzLmxlbmd0aDsgaSsrKSB7CiAgICBrZXkgPSBhbGxvd2VkQXR0cnNbaV07CiAgICBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoa2V5KTsKICAgIGlmIChhdHRyKSB7CiAgICAgIG91dC5wdXNoKGBbJHtrZXl9PSIke2F0dHJ9Il1gKTsKICAgIH0KICB9CiAgcmV0dXJuIG91dC5qb2luKCcnKTsKfQoKLyoqCiAqIFRoaXMgc2VydmVzIGFzIGEgYnVpbGQgdGltZSBmbGFnIHRoYXQgd2lsbCBiZSB0cnVlIGJ5IGRlZmF1bHQsIGJ1dCBmYWxzZSBpbiBub24tZGVidWcgYnVpbGRzIG9yIGlmIHVzZXJzIHJlcGxhY2UgYF9fU0VOVFJZX0RFQlVHX19gIGluIHRoZWlyIGdlbmVyYXRlZCBjb2RlLgogKgogKiBBVFRFTlRJT046IFRoaXMgY29uc3RhbnQgbXVzdCBuZXZlciBjcm9zcyBwYWNrYWdlIGJvdW5kYXJpZXMgKGkuZS4gYmUgZXhwb3J0ZWQpIHRvIGd1YXJhbnRlZSB0aGF0IGl0IGNhbiBiZSB1c2VkIGZvciB0cmVlIHNoYWtpbmcuCiAqLwpjb25zdCBERUJVR19CVUlMRCQxID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTsKCi8qKiBQcmVmaXggZm9yIGxvZ2dpbmcgc3RyaW5ncyAqLwpjb25zdCBQUkVGSVggPSAnU2VudHJ5IExvZ2dlciAnOwoKY29uc3QgQ09OU09MRV9MRVZFTFMgPSBbCiAgJ2RlYnVnJywKICAnaW5mbycsCiAgJ3dhcm4nLAogICdlcnJvcicsCiAgJ2xvZycsCiAgJ2Fzc2VydCcsCiAgJ3RyYWNlJywKXSA7CgovKiogVGhpcyBtYXkgYmUgbXV0YXRlZCBieSB0aGUgY29uc29sZSBpbnN0cnVtZW50YXRpb24uICovCmNvbnN0IG9yaWdpbmFsQ29uc29sZU1ldGhvZHMKCiA9IHt9OwoKLyoqIEpTRG9jICovCgovKioKICogVGVtcG9yYXJpbHkgZGlzYWJsZSBzZW50cnkgY29uc29sZSBpbnN0cnVtZW50YXRpb25zLgogKgogKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIHJ1biBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBgY29uc29sZWAgbWVzc2FnZXMKICogQHJldHVybnMgVGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrCiAqLwpmdW5jdGlvbiBjb25zb2xlU2FuZGJveChjYWxsYmFjaykgewogIGlmICghKCdjb25zb2xlJyBpbiBHTE9CQUxfT0JKKSkgewogICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgfQoKICBjb25zdCBjb25zb2xlID0gR0xPQkFMX09CSi5jb25zb2xlIDsKICBjb25zdCB3cmFwcGVkRnVuY3MgPSB7fTsKCiAgY29uc3Qgd3JhcHBlZExldmVscyA9IE9iamVjdC5rZXlzKG9yaWdpbmFsQ29uc29sZU1ldGhvZHMpIDsKCiAgLy8gUmVzdG9yZSBhbGwgd3JhcHBlZCBjb25zb2xlIG1ldGhvZHMKICB3cmFwcGVkTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4gewogICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlTWV0aG9kID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kc1tsZXZlbF0gOwogICAgd3JhcHBlZEZ1bmNzW2xldmVsXSA9IGNvbnNvbGVbbGV2ZWxdIDsKICAgIGNvbnNvbGVbbGV2ZWxdID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kOwogIH0pOwoKICB0cnkgewogICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgfSBmaW5hbGx5IHsKICAgIC8vIFJldmVydCByZXN0b3JhdGlvbiB0byB3cmFwcGVkIHN0YXRlCiAgICB3cmFwcGVkTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4gewogICAgICBjb25zb2xlW2xldmVsXSA9IHdyYXBwZWRGdW5jc1tsZXZlbF0gOwogICAgfSk7CiAgfQp9CgpmdW5jdGlvbiBtYWtlTG9nZ2VyKCkgewogIGxldCBlbmFibGVkID0gZmFsc2U7CiAgY29uc3QgbG9nZ2VyID0gewogICAgZW5hYmxlOiAoKSA9PiB7CiAgICAgIGVuYWJsZWQgPSB0cnVlOwogICAgfSwKICAgIGRpc2FibGU6ICgpID0+IHsKICAgICAgZW5hYmxlZCA9IGZhbHNlOwogICAgfSwKICAgIGlzRW5hYmxlZDogKCkgPT4gZW5hYmxlZCwKICB9OwoKICBpZiAoREVCVUdfQlVJTEQkMSkgewogICAgQ09OU09MRV9MRVZFTFMuZm9yRWFjaChuYW1lID0+IHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkKICAgICAgbG9nZ2VyW25hbWVdID0gKC4uLmFyZ3MpID0+IHsKICAgICAgICBpZiAoZW5hYmxlZCkgewogICAgICAgICAgY29uc29sZVNhbmRib3goKCkgPT4gewogICAgICAgICAgICBHTE9CQUxfT0JKLmNvbnNvbGVbbmFtZV0oYCR7UFJFRklYfVske25hbWV9XTpgLCAuLi5hcmdzKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0pOwogIH0gZWxzZSB7CiAgICBDT05TT0xFX0xFVkVMUy5mb3JFYWNoKG5hbWUgPT4gewogICAgICBsb2dnZXJbbmFtZV0gPSAoKSA9PiB1bmRlZmluZWQ7CiAgICB9KTsKICB9CgogIHJldHVybiBsb2dnZXIgOwp9Cgpjb25zdCBsb2dnZXIgPSBtYWtlTG9nZ2VyKCk7CgovKioKICogUmVuZGVycyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHNuLgogKgogKiBCeSBkZWZhdWx0LCB0aGlzIHdpbGwgcmVuZGVyIHRoZSBwdWJsaWMgcmVwcmVzZW50YXRpb24gd2l0aG91dCB0aGUgcGFzc3dvcmQKICogY29tcG9uZW50LiBUbyBnZXQgdGhlIGRlcHJlY2F0ZWQgcHJpdmF0ZSByZXByZXNlbnRhdGlvbiwgc2V0IGB3aXRoUGFzc3dvcmRgCiAqIHRvIHRydWUuCiAqCiAqIEBwYXJhbSB3aXRoUGFzc3dvcmQgV2hlbiBzZXQgdG8gdHJ1ZSwgdGhlIHBhc3N3b3JkIHdpbGwgYmUgaW5jbHVkZWQuCiAqLwpmdW5jdGlvbiBkc25Ub1N0cmluZyhkc24sIHdpdGhQYXNzd29yZCA9IGZhbHNlKSB7CiAgY29uc3QgeyBob3N0LCBwYXRoLCBwYXNzLCBwb3J0LCBwcm9qZWN0SWQsIHByb3RvY29sLCBwdWJsaWNLZXkgfSA9IGRzbjsKICByZXR1cm4gKAogICAgYCR7cHJvdG9jb2x9Oi8vJHtwdWJsaWNLZXl9JHt3aXRoUGFzc3dvcmQgJiYgcGFzcyA/IGA6JHtwYXNzfWAgOiAnJ31gICsKICAgIGBAJHtob3N0fSR7cG9ydCA/IGA6JHtwb3J0fWAgOiAnJ30vJHtwYXRoID8gYCR7cGF0aH0vYCA6IHBhdGh9JHtwcm9qZWN0SWR9YAogICk7Cn0KCi8qKiBBbiBlcnJvciBlbWl0dGVkIGJ5IFNlbnRyeSBTREtzIGFuZCByZWxhdGVkIHV0aWxpdGllcy4gKi8KY2xhc3MgU2VudHJ5RXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgLyoqIERpc3BsYXkgbmFtZSBvZiB0aGlzIGVycm9yIGluc3RhbmNlLiAqLwoKICAgY29uc3RydWN0b3IoIG1lc3NhZ2UsIGxvZ0xldmVsID0gJ3dhcm4nKSB7CiAgICBzdXBlcihtZXNzYWdlKTt0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwogICAgdGhpcy5uYW1lID0gbmV3LnRhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZTsKICAgIC8vIFRoaXMgc2V0cyB0aGUgcHJvdG90eXBlIHRvIGJlIGBFcnJvcmAsIG5vdCBgU2VudHJ5RXJyb3JgLiBJdCdzIHVuY2xlYXIgd2h5IHdlIGRvIHRoaXMsIGJ1dCBjb21tZW50aW5nIHRoaXMgbGluZQogICAgLy8gb3V0IGNhdXNlcyB2YXJpb3VzIChzZWVtaW5nbHkgdG90YWxseSB1bnJlbGF0ZWQpIHBsYXl3cmlnaHQgdGVzdHMgY29uc2lzdGVudGx5IHRpbWUgb3V0LiBGWUksIHRoaXMgbWFrZXMKICAgIC8vIGluc3RhbmNlcyBvZiBgU2VudHJ5RXJyb3JgIGZhaWwgYG9iaiBpbnN0YW5jZW9mIFNlbnRyeUVycm9yYCBjaGVja3MuCiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgbmV3LnRhcmdldC5wcm90b3R5cGUpOwogICAgdGhpcy5sb2dMZXZlbCA9IGxvZ0xldmVsOwogIH0KfQoKLyoqCiAqIEVuY29kZXMgZ2l2ZW4gb2JqZWN0IGludG8gdXJsLWZyaWVuZGx5IGZvcm1hdAogKgogKiBAcGFyYW0gb2JqZWN0IEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHNlcmlhbGl6YWJsZSB2YWx1ZXMKICogQHJldHVybnMgc3RyaW5nIEVuY29kZWQKICovCmZ1bmN0aW9uIHVybEVuY29kZShvYmplY3QpIHsKICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KQogICAgLm1hcChrZXkgPT4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KG9iamVjdFtrZXldKX1gKQogICAgLmpvaW4oJyYnKTsKfQoKLyoqCiAqIFRyYW5zZm9ybXMgYW55IGBFcnJvcmAgb3IgYEV2ZW50YCBpbnRvIGEgcGxhaW4gb2JqZWN0IHdpdGggYWxsIG9mIHRoZWlyIGVudW1lcmFibGUgcHJvcGVydGllcywgYW5kIHNvbWUgb2YgdGhlaXIKICogbm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBhdHRhY2hlZC4KICoKICogQHBhcmFtIHZhbHVlIEluaXRpYWwgc291cmNlIHRoYXQgd2UgaGF2ZSB0byB0cmFuc2Zvcm0gaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHVzYWJsZSBieSB0aGUgc2VyaWFsaXplcgogKiBAcmV0dXJucyBBbiBFdmVudCBvciBFcnJvciB0dXJuZWQgaW50byBhbiBvYmplY3QgLSBvciB0aGUgdmFsdWUgYXJndXJtZW50IGl0c2VsZiwgd2hlbiB2YWx1ZSBpcyBuZWl0aGVyIGFuIEV2ZW50IG5vcgogKiAgYW4gRXJyb3IuCiAqLwpmdW5jdGlvbiBjb252ZXJ0VG9QbGFpbk9iamVjdCgKICB2YWx1ZSwKKQoKIHsKICBpZiAoaXNFcnJvcih2YWx1ZSkpIHsKICAgIHJldHVybiB7CiAgICAgIG1lc3NhZ2U6IHZhbHVlLm1lc3NhZ2UsCiAgICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAgIHN0YWNrOiB2YWx1ZS5zdGFjaywKICAgICAgLi4uZ2V0T3duUHJvcGVydGllcyh2YWx1ZSksCiAgICB9OwogIH0gZWxzZSBpZiAoaXNFdmVudCh2YWx1ZSkpIHsKICAgIGNvbnN0IG5ld09iagoKID0gewogICAgICB0eXBlOiB2YWx1ZS50eXBlLAogICAgICB0YXJnZXQ6IHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHZhbHVlLnRhcmdldCksCiAgICAgIGN1cnJlbnRUYXJnZXQ6IHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHZhbHVlLmN1cnJlbnRUYXJnZXQpLAogICAgICAuLi5nZXRPd25Qcm9wZXJ0aWVzKHZhbHVlKSwKICAgIH07CgogICAgaWYgKHR5cGVvZiBDdXN0b21FdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHZhbHVlLCBDdXN0b21FdmVudCkpIHsKICAgICAgbmV3T2JqLmRldGFpbCA9IHZhbHVlLmRldGFpbDsKICAgIH0KCiAgICByZXR1cm4gbmV3T2JqOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdmFsdWU7CiAgfQp9CgovKiogQ3JlYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGFyZ2V0IG9mIGFuIGBFdmVudGAgb2JqZWN0ICovCmZ1bmN0aW9uIHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHRhcmdldCkgewogIHRyeSB7CiAgICByZXR1cm4gaXNFbGVtZW50KHRhcmdldCkgPyBodG1sVHJlZUFzU3RyaW5nKHRhcmdldCkgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGFyZ2V0KTsKICB9IGNhdGNoIChfb08pIHsKICAgIHJldHVybiAnPHVua25vd24+JzsKICB9Cn0KCi8qKiBGaWx0ZXJzIG91dCBhbGwgYnV0IGFuIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzICovCmZ1bmN0aW9uIGdldE93blByb3BlcnRpZXMob2JqKSB7CiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkgewogICAgY29uc3QgZXh0cmFjdGVkUHJvcHMgPSB7fTsKICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gb2JqKSB7CiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wZXJ0eSkpIHsKICAgICAgICBleHRyYWN0ZWRQcm9wc1twcm9wZXJ0eV0gPSAob2JqIClbcHJvcGVydHldOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZXh0cmFjdGVkUHJvcHM7CiAgfSBlbHNlIHsKICAgIHJldHVybiB7fTsKICB9Cn0KCi8qKgogKiBHaXZlbiBhbnkgb2JqZWN0LCByZXR1cm4gYSBuZXcgb2JqZWN0IGhhdmluZyByZW1vdmVkIGFsbCBmaWVsZHMgd2hvc2UgdmFsdWUgd2FzIGB1bmRlZmluZWRgLgogKiBXb3JrcyByZWN1cnNpdmVseSBvbiBvYmplY3RzIGFuZCBhcnJheXMuCiAqCiAqIEF0dGVudGlvbjogVGhpcyBmdW5jdGlvbiBrZWVwcyBjaXJjdWxhciByZWZlcmVuY2VzIGluIHRoZSByZXR1cm5lZCBvYmplY3QuCiAqLwpmdW5jdGlvbiBkcm9wVW5kZWZpbmVkS2V5cyhpbnB1dFZhbHVlKSB7CiAgLy8gVGhpcyBtYXAga2VlcHMgdHJhY2sgb2Ygd2hhdCBhbHJlYWR5IHZpc2l0ZWQgbm9kZXMgbWFwIHRvLgogIC8vIE91ciBTZXQgLSBiYXNlZCBtZW1vQnVpbGRlciBkb2Vzbid0IHdvcmsgaGVyZSBiZWNhdXNlIHdlIHdhbnQgdG8gdGhlIG91dHB1dCBvYmplY3QgdG8gaGF2ZSB0aGUgc2FtZSBjaXJjdWxhcgogIC8vIHJlZmVyZW5jZXMgYXMgdGhlIGlucHV0IG9iamVjdC4KICBjb25zdCBtZW1vaXphdGlvbk1hcCA9IG5ldyBNYXAoKTsKCiAgLy8gVGhpcyBmdW5jdGlvbiBqdXN0IHByb3hpZXMgYF9kcm9wVW5kZWZpbmVkS2V5c2AgdG8ga2VlcCB0aGUgYG1lbW9CdWlsZGVyYCBvdXQgb2YgdGhpcyBmdW5jdGlvbidzIEFQSQogIHJldHVybiBfZHJvcFVuZGVmaW5lZEtleXMoaW5wdXRWYWx1ZSwgbWVtb2l6YXRpb25NYXApOwp9CgpmdW5jdGlvbiBfZHJvcFVuZGVmaW5lZEtleXMoaW5wdXRWYWx1ZSwgbWVtb2l6YXRpb25NYXApIHsKICBpZiAoaXNQb2pvKGlucHV0VmFsdWUpKSB7CiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGR1ZSB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBvYmplY3QgaXQgd2FzIG1hcHBlZCB0byBpbiB0aGUgbmV3IG9iamVjdAogICAgY29uc3QgbWVtb1ZhbCA9IG1lbW9pemF0aW9uTWFwLmdldChpbnB1dFZhbHVlKTsKICAgIGlmIChtZW1vVmFsICE9PSB1bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIG1lbW9WYWwgOwogICAgfQoKICAgIGNvbnN0IHJldHVyblZhbHVlID0ge307CiAgICAvLyBTdG9yZSB0aGUgbWFwcGluZyBvZiB0aGlzIHZhbHVlIGluIGNhc2Ugd2UgdmlzaXQgaXQgYWdhaW4sIGluIGNhc2Ugb2YgY2lyY3VsYXIgZGF0YQogICAgbWVtb2l6YXRpb25NYXAuc2V0KGlucHV0VmFsdWUsIHJldHVyblZhbHVlKTsKCiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhpbnB1dFZhbHVlKSkgewogICAgICBpZiAodHlwZW9mIGlucHV0VmFsdWVba2V5XSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICByZXR1cm5WYWx1ZVtrZXldID0gX2Ryb3BVbmRlZmluZWRLZXlzKGlucHV0VmFsdWVba2V5XSwgbWVtb2l6YXRpb25NYXApOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJldHVyblZhbHVlIDsKICB9CgogIGlmIChBcnJheS5pc0FycmF5KGlucHV0VmFsdWUpKSB7CiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGR1ZSB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBhcnJheSBpdCB3YXMgbWFwcGVkIHRvIGluIHRoZSBuZXcgb2JqZWN0CiAgICBjb25zdCBtZW1vVmFsID0gbWVtb2l6YXRpb25NYXAuZ2V0KGlucHV0VmFsdWUpOwogICAgaWYgKG1lbW9WYWwgIT09IHVuZGVmaW5lZCkgewogICAgICByZXR1cm4gbWVtb1ZhbCA7CiAgICB9CgogICAgY29uc3QgcmV0dXJuVmFsdWUgPSBbXTsKICAgIC8vIFN0b3JlIHRoZSBtYXBwaW5nIG9mIHRoaXMgdmFsdWUgaW4gY2FzZSB3ZSB2aXNpdCBpdCBhZ2FpbiwgaW4gY2FzZSBvZiBjaXJjdWxhciBkYXRhCiAgICBtZW1vaXphdGlvbk1hcC5zZXQoaW5wdXRWYWx1ZSwgcmV0dXJuVmFsdWUpOwoKICAgIGlucHV0VmFsdWUuZm9yRWFjaCgoaXRlbSkgPT4gewogICAgICByZXR1cm5WYWx1ZS5wdXNoKF9kcm9wVW5kZWZpbmVkS2V5cyhpdGVtLCBtZW1vaXphdGlvbk1hcCkpOwogICAgfSk7CgogICAgcmV0dXJuIHJldHVyblZhbHVlIDsKICB9CgogIHJldHVybiBpbnB1dFZhbHVlOwp9CgpmdW5jdGlvbiBpc1Bvam8oaW5wdXQpIHsKICBpZiAoIWlzUGxhaW5PYmplY3QoaW5wdXQpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB0cnkgewogICAgY29uc3QgbmFtZSA9IChPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5wdXQpICkuY29uc3RydWN0b3IubmFtZTsKICAgIHJldHVybiAhbmFtZSB8fCBuYW1lID09PSAnT2JqZWN0JzsKICB9IGNhdGNoIChlKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCi8qKgogKiBEb2VzIHRoaXMgZmlsZW5hbWUgbG9vayBsaWtlIGl0J3MgcGFydCBvZiB0aGUgYXBwIGNvZGU/CiAqLwpmdW5jdGlvbiBmaWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUsIGlzTmF0aXZlID0gZmFsc2UpIHsKICBjb25zdCBpc0ludGVybmFsID0KICAgIGlzTmF0aXZlIHx8CiAgICAoZmlsZW5hbWUgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgaXQncyBhbiBhYnNvbHV0ZSBsaW51eCBwYXRoCiAgICAgICFmaWxlbmFtZS5zdGFydHNXaXRoKCcvJykgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgaXQncyBhbiBhYnNvbHV0ZSB3aW5kb3dzIHBhdGgKICAgICAgIWZpbGVuYW1lLm1hdGNoKC9eW0EtWl06LykgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgdGhlIHBhdGggaXMgc3RhcnRpbmcgd2l0aCBhIGRvdAogICAgICAhZmlsZW5hbWUuc3RhcnRzV2l0aCgnLicpICYmCiAgICAgIC8vIEl0J3Mgbm90IGludGVybmFsIGlmIHRoZSBmcmFtZSBoYXMgYSBwcm90b2NvbC4gSW4gbm9kZSwgdGhpcyBpcyB1c3VhbGx5IHRoZSBjYXNlIGlmIHRoZSBmaWxlIGdvdCBwcmUtcHJvY2Vzc2VkIHdpdGggYSBidW5kbGVyIGxpa2Ugd2VicGFjawogICAgICAhZmlsZW5hbWUubWF0Y2goL15bYS16QS1aXShbYS16QS1aMC05LlwtK10pKjpcL1wvLykpOyAvLyBTY2hlbWEgZnJvbTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM2NDE3ODIKCiAgLy8gaW5fYXBwIGlzIGFsbCB0aGF0J3Mgbm90IGFuIGludGVybmFsIE5vZGUgZnVuY3Rpb24gb3IgYSBtb2R1bGUgd2l0aGluIG5vZGVfbW9kdWxlcwogIC8vIG5vdGUgdGhhdCBpc05hdGl2ZSBhcHBlYXJzIHRvIHJldHVybiB0cnVlIGV2ZW4gZm9yIG5vZGUgY29yZSBsaWJyYXJpZXMKICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9yYXZlbi1ub2RlL2lzc3Vlcy8xNzYKCiAgcmV0dXJuICFpc0ludGVybmFsICYmIGZpbGVuYW1lICE9PSB1bmRlZmluZWQgJiYgIWZpbGVuYW1lLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvJyk7Cn0KCmNvbnN0IFNUQUNLVFJBQ0VfRlJBTUVfTElNSVQgPSA1MDsKY29uc3QgU1RSSVBfRlJBTUVfUkVHRVhQID0gL2NhcHR1cmVNZXNzYWdlfGNhcHR1cmVFeGNlcHRpb24vOwoKLyoqCiAqIFJlbW92ZXMgU2VudHJ5IGZyYW1lcyBmcm9tIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgc3RhY2sgaWYgcHJlc2VudCBhbmQgZW5mb3JjZXMgYSBsaW1pdCBvZiBtYXggbnVtYmVyIG9mIGZyYW1lcy4KICogQXNzdW1lcyBzdGFjayBpbnB1dCBpcyBvcmRlcmVkIGZyb20gdG9wIHRvIGJvdHRvbSBhbmQgcmV0dXJucyB0aGUgcmV2ZXJzZSByZXByZXNlbnRhdGlvbiBzbyBjYWxsIHNpdGUgb2YgdGhlCiAqIGZ1bmN0aW9uIHRoYXQgY2F1c2VkIHRoZSBjcmFzaCBpcyB0aGUgbGFzdCBmcmFtZSBpbiB0aGUgYXJyYXkuCiAqIEBoaWRkZW4KICovCmZ1bmN0aW9uIHN0cmlwU2VudHJ5RnJhbWVzQW5kUmV2ZXJzZShzdGFjaykgewogIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICByZXR1cm4gW107CiAgfQoKICBjb25zdCBsb2NhbFN0YWNrID0gQXJyYXkuZnJvbShzdGFjayk7CgogIC8vIElmIHN0YWNrIHN0YXJ0cyB3aXRoIG9uZSBvZiBvdXIgQVBJIGNhbGxzLCByZW1vdmUgaXQgKHN0YXJ0cywgbWVhbmluZyBpdCdzIHRoZSB0b3Agb2YgdGhlIHN0YWNrIC0gYWthIGxhc3QgY2FsbCkKICBpZiAoL3NlbnRyeVdyYXBwZWQvLnRlc3QobG9jYWxTdGFja1tsb2NhbFN0YWNrLmxlbmd0aCAtIDFdLmZ1bmN0aW9uIHx8ICcnKSkgewogICAgbG9jYWxTdGFjay5wb3AoKTsKICB9CgogIC8vIFJldmVyc2luZyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwcm9jZWR1cmUgYWxsb3dzIHVzIHRvIGp1c3QgcG9wIHRoZSB2YWx1ZXMgb2ZmIHRoZSBzdGFjawogIGxvY2FsU3RhY2sucmV2ZXJzZSgpOwoKICAvLyBJZiBzdGFjayBlbmRzIHdpdGggb25lIG9mIG91ciBpbnRlcm5hbCBBUEkgY2FsbHMsIHJlbW92ZSBpdCAoZW5kcywgbWVhbmluZyBpdCdzIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrIC0gYWthIHRvcC1tb3N0IGNhbGwpCiAgaWYgKFNUUklQX0ZSQU1FX1JFR0VYUC50ZXN0KGxvY2FsU3RhY2tbbG9jYWxTdGFjay5sZW5ndGggLSAxXS5mdW5jdGlvbiB8fCAnJykpIHsKICAgIGxvY2FsU3RhY2sucG9wKCk7CgogICAgLy8gV2hlbiB1c2luZyBzeW50aGV0aWMgZXZlbnRzLCB3ZSB3aWxsIGhhdmUgYSAyIGxldmVscyBkZWVwIHN0YWNrLCBhcyBgbmV3IEVycm9yKCdTZW50cnkgc3ludGhldGljRXhjZXB0aW9uJylgCiAgICAvLyBpcyBwcm9kdWNlZCB3aXRoaW4gdGhlIGh1YiBpdHNlbGYsIG1ha2luZyBpdDoKICAgIC8vCiAgICAvLyAgIFNlbnRyeS5jYXB0dXJlRXhjZXB0aW9uKCkKICAgIC8vICAgZ2V0Q3VycmVudEh1YigpLmNhcHR1cmVFeGNlcHRpb24oKQogICAgLy8KICAgIC8vIGluc3RlYWQgb2YganVzdCB0aGUgdG9wIGBTZW50cnlgIGNhbGwgaXRzZWxmLgogICAgLy8gVGhpcyBmb3JjZXMgdXMgdG8gcG9zc2libHkgc3RyaXAgYW4gYWRkaXRpb25hbCBmcmFtZSBpbiB0aGUgZXhhY3Qgc2FtZSB3YXMgYXMgYWJvdmUuCiAgICBpZiAoU1RSSVBfRlJBTUVfUkVHRVhQLnRlc3QobG9jYWxTdGFja1tsb2NhbFN0YWNrLmxlbmd0aCAtIDFdLmZ1bmN0aW9uIHx8ICcnKSkgewogICAgICBsb2NhbFN0YWNrLnBvcCgpOwogICAgfQogIH0KCiAgcmV0dXJuIGxvY2FsU3RhY2suc2xpY2UoMCwgU1RBQ0tUUkFDRV9GUkFNRV9MSU1JVCkubWFwKGZyYW1lID0+ICh7CiAgICAuLi5mcmFtZSwKICAgIGZpbGVuYW1lOiBmcmFtZS5maWxlbmFtZSB8fCBsb2NhbFN0YWNrW2xvY2FsU3RhY2subGVuZ3RoIC0gMV0uZmlsZW5hbWUsCiAgICBmdW5jdGlvbjogZnJhbWUuZnVuY3Rpb24gfHwgJz8nLAogIH0pKTsKfQoKY29uc3QgZGVmYXVsdEZ1bmN0aW9uTmFtZSA9ICc8YW5vbnltb3VzPic7CgovKioKICogU2FmZWx5IGV4dHJhY3QgZnVuY3Rpb24gbmFtZSBmcm9tIGl0c2VsZgogKi8KZnVuY3Rpb24gZ2V0RnVuY3Rpb25OYW1lKGZuKSB7CiAgdHJ5IHsKICAgIGlmICghZm4gfHwgdHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7CiAgICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lOwogICAgfQogICAgcmV0dXJuIGZuLm5hbWUgfHwgZGVmYXVsdEZ1bmN0aW9uTmFtZTsKICB9IGNhdGNoIChlKSB7CiAgICAvLyBKdXN0IGFjY2Vzc2luZyBjdXN0b20gcHJvcHMgaW4gc29tZSBTZWxlbml1bSBlbnZpcm9ubWVudHMKICAgIC8vIGNhbiBjYXVzZSBhICJQZXJtaXNzaW9uIGRlbmllZCIgZXhjZXB0aW9uIChzZWUgcmF2ZW4tanMjNDk1KS4KICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lOwogIH0KfQoKLyoqCiAqIFVVSUQ0IGdlbmVyYXRvcgogKgogKiBAcmV0dXJucyBzdHJpbmcgR2VuZXJhdGVkIFVVSUQ0LgogKi8KZnVuY3Rpb24gdXVpZDQoKSB7CiAgY29uc3QgZ2JsID0gR0xPQkFMX09CSiA7CiAgY29uc3QgY3J5cHRvID0gZ2JsLmNyeXB0byB8fCBnYmwubXNDcnlwdG87CgogIGxldCBnZXRSYW5kb21CeXRlID0gKCkgPT4gTWF0aC5yYW5kb20oKSAqIDE2OwogIHRyeSB7CiAgICBpZiAoY3J5cHRvICYmIGNyeXB0by5yYW5kb21VVUlEKSB7CiAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpLnJlcGxhY2UoLy0vZywgJycpOwogICAgfQogICAgaWYgKGNyeXB0byAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7CiAgICAgIGdldFJhbmRvbUJ5dGUgPSAoKSA9PiB7CiAgICAgICAgLy8gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyBtaWdodCByZXR1cm4gdW5kZWZpbmVkIGluc3RlYWQgb2YgdGhlIHR5cGVkIGFycmF5CiAgICAgICAgLy8gaW4gb2xkIENocm9taXVtIHZlcnNpb25zIChlLmcuIDIzLjAuMTIzNS4wICgxNTE0MjIpKQogICAgICAgIC8vIEhvd2V2ZXIsIGB0eXBlZEFycmF5YCBpcyBzdGlsbCBmaWxsZWQgaW4tcGxhY2UuCiAgICAgICAgLy8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3J5cHRvL2dldFJhbmRvbVZhbHVlcyN0eXBlZGFycmF5CiAgICAgICAgY29uc3QgdHlwZWRBcnJheSA9IG5ldyBVaW50OEFycmF5KDEpOwogICAgICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXModHlwZWRBcnJheSk7CiAgICAgICAgcmV0dXJuIHR5cGVkQXJyYXlbMF07CiAgICAgIH07CiAgICB9CiAgfSBjYXRjaCAoXykgewogICAgLy8gc29tZSBydW50aW1lcyBjYW4gY3Jhc2ggaW52b2tpbmcgY3J5cHRvCiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy84OTM1CiAgfQoKICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTAzNC9ob3ctdG8tY3JlYXRlLWEtZ3VpZC11dWlkLWluLWphdmFzY3JpcHQvMjExNzUyMyMyMTE3NTIzCiAgLy8gQ29uY2F0ZW5hdGluZyB0aGUgZm9sbG93aW5nIG51bWJlcnMgYXMgc3RyaW5ncyByZXN1bHRzIGluICcxMDAwMDAwMDEwMDA0MDAwODAwMDEwMDAwMDAwMDAwMCcKICByZXR1cm4gKChbMWU3XSApICsgMWUzICsgNGUzICsgOGUzICsgMWUxMSkucmVwbGFjZSgvWzAxOF0vZywgYyA9PgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2UKICAgICgoYyApIF4gKChnZXRSYW5kb21CeXRlKCkgJiAxNSkgPj4gKChjICkgLyA0KSkpLnRvU3RyaW5nKDE2KSwKICApOwp9CgovKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi8KLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqLwoKLyoqCiAqIEhlbHBlciB0byBkZWN5Y2xlIGpzb24gb2JqZWN0cwogKi8KZnVuY3Rpb24gbWVtb0J1aWxkZXIoKSB7CiAgY29uc3QgaGFzV2Vha1NldCA9IHR5cGVvZiBXZWFrU2V0ID09PSAnZnVuY3Rpb24nOwogIGNvbnN0IGlubmVyID0gaGFzV2Vha1NldCA/IG5ldyBXZWFrU2V0KCkgOiBbXTsKICBmdW5jdGlvbiBtZW1vaXplKG9iaikgewogICAgaWYgKGhhc1dlYWtTZXQpIHsKICAgICAgaWYgKGlubmVyLmhhcyhvYmopKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgaW5uZXIuYWRkKG9iaik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLWZvci1vZgogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbm5lci5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCB2YWx1ZSA9IGlubmVyW2ldOwogICAgICBpZiAodmFsdWUgPT09IG9iaikgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICBpbm5lci5wdXNoKG9iaik7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBmdW5jdGlvbiB1bm1lbW9pemUob2JqKSB7CiAgICBpZiAoaGFzV2Vha1NldCkgewogICAgICBpbm5lci5kZWxldGUob2JqKTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5uZXIubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoaW5uZXJbaV0gPT09IG9iaikgewogICAgICAgICAgaW5uZXIuc3BsaWNlKGksIDEpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIHJldHVybiBbbWVtb2l6ZSwgdW5tZW1vaXplXTsKfQoKLyoqCiAqIFJlY3Vyc2l2ZWx5IG5vcm1hbGl6ZXMgdGhlIGdpdmVuIG9iamVjdC4KICoKICogLSBDcmVhdGVzIGEgY29weSB0byBwcmV2ZW50IG9yaWdpbmFsIGlucHV0IG11dGF0aW9uCiAqIC0gU2tpcHMgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcwogKiAtIFdoZW4gc3RyaW5naWZ5aW5nLCBjYWxscyBgdG9KU09OYCBpZiBpbXBsZW1lbnRlZAogKiAtIFJlbW92ZXMgY2lyY3VsYXIgcmVmZXJlbmNlcwogKiAtIFRyYW5zbGF0ZXMgbm9uLXNlcmlhbGl6YWJsZSB2YWx1ZXMgKGB1bmRlZmluZWRgL2BOYU5gL2Z1bmN0aW9ucykgdG8gc2VyaWFsaXphYmxlIGZvcm1hdAogKiAtIFRyYW5zbGF0ZXMga25vd24gZ2xvYmFsIG9iamVjdHMvY2xhc3NlcyB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbnMKICogLSBUYWtlcyBjYXJlIG9mIGBFcnJvcmAgb2JqZWN0IHNlcmlhbGl6YXRpb24KICogLSBPcHRpb25hbGx5IGxpbWl0cyBkZXB0aCBvZiBmaW5hbCBvdXRwdXQKICogLSBPcHRpb25hbGx5IGxpbWl0cyBudW1iZXIgb2YgcHJvcGVydGllcy9lbGVtZW50cyBpbmNsdWRlZCBpbiBhbnkgc2luZ2xlIG9iamVjdC9hcnJheQogKgogKiBAcGFyYW0gaW5wdXQgVGhlIG9iamVjdCB0byBiZSBub3JtYWxpemVkLgogKiBAcGFyYW0gZGVwdGggVGhlIG1heCBkZXB0aCB0byB3aGljaCB0byBub3JtYWxpemUgdGhlIG9iamVjdC4gKEFueXRoaW5nIGRlZXBlciBzdHJpbmdpZmllZCB3aG9sZS4pCiAqIEBwYXJhbSBtYXhQcm9wZXJ0aWVzIFRoZSBtYXggbnVtYmVyIG9mIGVsZW1lbnRzIG9yIHByb3BlcnRpZXMgdG8gYmUgaW5jbHVkZWQgaW4gYW55IHNpbmdsZSBhcnJheSBvcgogKiBvYmplY3QgaW4gdGhlIG5vcm1hbGxpemVkIG91dHB1dC4KICogQHJldHVybnMgQSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhlIG9iamVjdCwgb3IgYCIqKm5vbi1zZXJpYWxpemFibGUqKiJgIGlmIGFueSBlcnJvcnMgYXJlIHRocm93biBkdXJpbmcgbm9ybWFsaXphdGlvbi4KICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55CmZ1bmN0aW9uIG5vcm1hbGl6ZShpbnB1dCwgZGVwdGggPSAxMDAsIG1heFByb3BlcnRpZXMgPSArSW5maW5pdHkpIHsKICB0cnkgewogICAgLy8gc2luY2Ugd2UncmUgYXQgdGhlIG91dGVybW9zdCBsZXZlbCwgd2UgZG9uJ3QgcHJvdmlkZSBhIGtleQogICAgcmV0dXJuIHZpc2l0KCcnLCBpbnB1dCwgZGVwdGgsIG1heFByb3BlcnRpZXMpOwogIH0gY2F0Y2ggKGVycikgewogICAgcmV0dXJuIHsgRVJST1I6IGAqKm5vbi1zZXJpYWxpemFibGUqKiAoJHtlcnJ9KWAgfTsKICB9Cn0KCi8qKgogKiBWaXNpdHMgYSBub2RlIHRvIHBlcmZvcm0gbm9ybWFsaXphdGlvbiBvbiBpdAogKgogKiBAcGFyYW0ga2V5IFRoZSBrZXkgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gbm9kZQogKiBAcGFyYW0gdmFsdWUgVGhlIG5vZGUgdG8gYmUgdmlzaXRlZAogKiBAcGFyYW0gZGVwdGggT3B0aW9uYWwgbnVtYmVyIGluZGljYXRpbmcgdGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoCiAqIEBwYXJhbSBtYXhQcm9wZXJ0aWVzIE9wdGlvbmFsIG1heGltdW0gbnVtYmVyIG9mIHByb3BlcnRpZXMvZWxlbWVudHMgaW5jbHVkZWQgaW4gYW55IHNpbmdsZSBvYmplY3QvYXJyYXkKICogQHBhcmFtIG1lbW8gT3B0aW9uYWwgTWVtbyBjbGFzcyBoYW5kbGluZyBkZWN5Y2xpbmcKICovCmZ1bmN0aW9uIHZpc2l0KAogIGtleSwKICB2YWx1ZSwKICBkZXB0aCA9ICtJbmZpbml0eSwKICBtYXhQcm9wZXJ0aWVzID0gK0luZmluaXR5LAogIG1lbW8gPSBtZW1vQnVpbGRlcigpLAopIHsKICBjb25zdCBbbWVtb2l6ZSwgdW5tZW1vaXplXSA9IG1lbW87CgogIC8vIEdldCB0aGUgc2ltcGxlIGNhc2VzIG91dCBvZiB0aGUgd2F5IGZpcnN0CiAgaWYgKAogICAgdmFsdWUgPT0gbnVsbCB8fCAvLyB0aGlzIG1hdGNoZXMgbnVsbCBhbmQgdW5kZWZpbmVkIC0+IGVxZXEgbm90IGVxZXFlcQogICAgKFsnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnc3RyaW5nJ10uaW5jbHVkZXModHlwZW9mIHZhbHVlKSAmJiAhaXNOYU4kMSh2YWx1ZSkpCiAgKSB7CiAgICByZXR1cm4gdmFsdWUgOwogIH0KCiAgY29uc3Qgc3RyaW5naWZpZWQgPSBzdHJpbmdpZnlWYWx1ZShrZXksIHZhbHVlKTsKCiAgLy8gQW55dGhpbmcgd2UgY291bGQgcG90ZW50aWFsbHkgZGlnIGludG8gbW9yZSAob2JqZWN0cyBvciBhcnJheXMpIHdpbGwgaGF2ZSBjb21lIGJhY2sgYXMgYCJbb2JqZWN0IFhYWFhdImAuCiAgLy8gRXZlcnl0aGluZyBlbHNlIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gc2VyaWFsaXplZCwgc28gaWYgd2UgZG9uJ3Qgc2VlIHRoYXQgcGF0dGVybiwgd2UncmUgZG9uZS4KICBpZiAoIXN0cmluZ2lmaWVkLnN0YXJ0c1dpdGgoJ1tvYmplY3QgJykpIHsKICAgIHJldHVybiBzdHJpbmdpZmllZDsKICB9CgogIC8vIEZyb20gaGVyZSBvbiwgd2UgY2FuIGFzc2VydCB0aGF0IGB2YWx1ZWAgaXMgZWl0aGVyIGFuIG9iamVjdCBvciBhbiBhcnJheS4KCiAgLy8gRG8gbm90IG5vcm1hbGl6ZSBvYmplY3RzIHRoYXQgd2Uga25vdyBoYXZlIGFscmVhZHkgYmVlbiBub3JtYWxpemVkLiBBcyBhIGdlbmVyYWwgcnVsZSwgdGhlCiAgLy8gIl9fc2VudHJ5X3NraXBfbm9ybWFsaXphdGlvbl9fIiBwcm9wZXJ0eSBzaG91bGQgb25seSBiZSB1c2VkIHNwYXJpbmdseSBhbmQgb25seSBzaG91bGQgb25seSBiZSBzZXQgb24gb2JqZWN0cyB0aGF0CiAgLy8gaGF2ZSBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZC4KICBpZiAoKHZhbHVlIClbJ19fc2VudHJ5X3NraXBfbm9ybWFsaXphdGlvbl9fJ10pIHsKICAgIHJldHVybiB2YWx1ZSA7CiAgfQoKICAvLyBXZSBjYW4gc2V0IGBfX3NlbnRyeV9vdmVycmlkZV9ub3JtYWxpemF0aW9uX2RlcHRoX19gIG9uIGFuIG9iamVjdCB0byBlbnN1cmUgdGhhdCBmcm9tIHRoZXJlCiAgLy8gV2Uga2VlcCBhIGNlcnRhaW4gYW1vdW50IG9mIGRlcHRoLgogIC8vIFRoaXMgc2hvdWxkIGJlIHVzZWQgc3BhcmluZ2x5LCBlLmcuIHdlIHVzZSBpdCBmb3IgdGhlIHJlZHV4IGludGVncmF0aW9uIHRvIGVuc3VyZSB3ZSBnZXQgYSBjZXJ0YWluIGFtb3VudCBvZiBzdGF0ZS4KICBjb25zdCByZW1haW5pbmdEZXB0aCA9CiAgICB0eXBlb2YgKHZhbHVlIClbJ19fc2VudHJ5X292ZXJyaWRlX25vcm1hbGl6YXRpb25fZGVwdGhfXyddID09PSAnbnVtYmVyJwogICAgICA/ICgodmFsdWUgKVsnX19zZW50cnlfb3ZlcnJpZGVfbm9ybWFsaXphdGlvbl9kZXB0aF9fJ10gKQogICAgICA6IGRlcHRoOwoKICAvLyBXZSdyZSBhbHNvIGRvbmUgaWYgd2UndmUgcmVhY2hlZCB0aGUgbWF4IGRlcHRoCiAgaWYgKHJlbWFpbmluZ0RlcHRoID09PSAwKSB7CiAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgYHNlcmlhbGl6ZWRgIGlzIGEgc3RyaW5nIG9mIHRoZSBmb3JtIGAiW29iamVjdCBYWFhYXSJgLiBDbGVhbiBpdCB1cCBzbyBpdCdzIGp1c3QgYCJbWFhYWF0iYC4KICAgIHJldHVybiBzdHJpbmdpZmllZC5yZXBsYWNlKCdvYmplY3QgJywgJycpOwogIH0KCiAgLy8gSWYgd2UndmUgYWxyZWFkeSB2aXNpdGVkIHRoaXMgYnJhbmNoLCBiYWlsIG91dCwgYXMgaXQncyBjaXJjdWxhciByZWZlcmVuY2UuIElmIG5vdCwgbm90ZSB0aGF0IHdlJ3JlIHNlZWluZyBpdCBub3cuCiAgaWYgKG1lbW9pemUodmFsdWUpKSB7CiAgICByZXR1cm4gJ1tDaXJjdWxhciB+XSc7CiAgfQoKICAvLyBJZiB0aGUgdmFsdWUgaGFzIGEgYHRvSlNPTmAgbWV0aG9kLCB3ZSBjYWxsIGl0IHRvIGV4dHJhY3QgbW9yZSBpbmZvcm1hdGlvbgogIGNvbnN0IHZhbHVlV2l0aFRvSlNPTiA9IHZhbHVlIDsKICBpZiAodmFsdWVXaXRoVG9KU09OICYmIHR5cGVvZiB2YWx1ZVdpdGhUb0pTT04udG9KU09OID09PSAnZnVuY3Rpb24nKSB7CiAgICB0cnkgewogICAgICBjb25zdCBqc29uVmFsdWUgPSB2YWx1ZVdpdGhUb0pTT04udG9KU09OKCk7CiAgICAgIC8vIFdlIG5lZWQgdG8gbm9ybWFsaXplIHRoZSByZXR1cm4gdmFsdWUgb2YgYC50b0pTT04oKWAgaW4gY2FzZSBpdCBoYXMgY2lyY3VsYXIgcmVmZXJlbmNlcwogICAgICByZXR1cm4gdmlzaXQoJycsIGpzb25WYWx1ZSwgcmVtYWluaW5nRGVwdGggLSAxLCBtYXhQcm9wZXJ0aWVzLCBtZW1vKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICAvLyBwYXNzIChUaGUgYnVpbHQtaW4gYHRvSlNPTmAgZmFpbGVkLCBidXQgd2UgY2FuIHN0aWxsIHRyeSB0byBkbyBpdCBvdXJzZWx2ZXMpCiAgICB9CiAgfQoKICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgd2UgZWl0aGVyIGhhdmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5LCB3ZSBoYXZlbid0IHNlZW4gaXQgYmVmb3JlLCBhbmQgd2UncmUgZ29pbmcgdG8gcmVjdXJzZQogIC8vIGJlY2F1c2Ugd2UgaGF2ZW4ndCB5ZXQgcmVhY2hlZCB0aGUgbWF4IGRlcHRoLiBDcmVhdGUgYW4gYWNjdW11bGF0b3IgdG8gaG9sZCB0aGUgcmVzdWx0cyBvZiB2aXNpdGluZyBlYWNoCiAgLy8gcHJvcGVydHkvZW50cnksIGFuZCBrZWVwIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgaXRlbXMgd2UgYWRkIHRvIGl0LgogIGNvbnN0IG5vcm1hbGl6ZWQgPSAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbXSA6IHt9KSA7CiAgbGV0IG51bUFkZGVkID0gMDsKCiAgLy8gQmVmb3JlIHdlIGJlZ2luLCBjb252ZXJ0YEVycm9yYCBhbmRgRXZlbnRgIGluc3RhbmNlcyBpbnRvIHBsYWluIG9iamVjdHMsIHNpbmNlIHNvbWUgb2YgZWFjaCBvZiB0aGVpciByZWxldmFudAogIC8vIHByb3BlcnRpZXMgYXJlIG5vbi1lbnVtZXJhYmxlIGFuZCBvdGhlcndpc2Ugd291bGQgZ2V0IG1pc3NlZC4KICBjb25zdCB2aXNpdGFibGUgPSBjb252ZXJ0VG9QbGFpbk9iamVjdCh2YWx1ZSApOwoKICBmb3IgKGNvbnN0IHZpc2l0S2V5IGluIHZpc2l0YWJsZSkgewogICAgLy8gQXZvaWQgaXRlcmF0aW5nIG92ZXIgZmllbGRzIGluIHRoZSBwcm90b3R5cGUgaWYgdGhleSd2ZSBzb21laG93IGJlZW4gZXhwb3NlZCB0byBlbnVtZXJhdGlvbi4KICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZpc2l0YWJsZSwgdmlzaXRLZXkpKSB7CiAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIGlmIChudW1BZGRlZCA+PSBtYXhQcm9wZXJ0aWVzKSB7CiAgICAgIG5vcm1hbGl6ZWRbdmlzaXRLZXldID0gJ1tNYXhQcm9wZXJ0aWVzIH5dJzsKICAgICAgYnJlYWs7CiAgICB9CgogICAgLy8gUmVjdXJzaXZlbHkgdmlzaXQgYWxsIHRoZSBjaGlsZCBub2RlcwogICAgY29uc3QgdmlzaXRWYWx1ZSA9IHZpc2l0YWJsZVt2aXNpdEtleV07CiAgICBub3JtYWxpemVkW3Zpc2l0S2V5XSA9IHZpc2l0KHZpc2l0S2V5LCB2aXNpdFZhbHVlLCByZW1haW5pbmdEZXB0aCAtIDEsIG1heFByb3BlcnRpZXMsIG1lbW8pOwoKICAgIG51bUFkZGVkKys7CiAgfQoKICAvLyBPbmNlIHdlJ3ZlIHZpc2l0ZWQgYWxsIHRoZSBicmFuY2hlcywgcmVtb3ZlIHRoZSBwYXJlbnQgZnJvbSBtZW1vIHN0b3JhZ2UKICB1bm1lbW9pemUodmFsdWUpOwoKICAvLyBSZXR1cm4gYWNjdW11bGF0ZWQgdmFsdWVzCiAgcmV0dXJuIG5vcm1hbGl6ZWQ7Cn0KCi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi8KLyoqCiAqIFN0cmluZ2lmeSB0aGUgZ2l2ZW4gdmFsdWUuIEhhbmRsZXMgdmFyaW91cyBrbm93biBzcGVjaWFsIHZhbHVlcyBhbmQgdHlwZXMuCiAqCiAqIE5vdCBtZWFudCB0byBiZSB1c2VkIG9uIHNpbXBsZSBwcmltaXRpdmVzIHdoaWNoIGFscmVhZHkgaGF2ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiwgYXMgaXQgd2lsbCwgZm9yIGV4YW1wbGUsIHR1cm4KICogdGhlIG51bWJlciAxMjMxIGludG8gIltPYmplY3QgTnVtYmVyXSIsIG5vciBvbiBgbnVsbGAsIGFzIGl0IHdpbGwgdGhyb3cuCiAqCiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gc3RyaW5naWZ5CiAqIEByZXR1cm5zIEEgc3RyaW5naWZpZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIHZhbHVlCiAqLwpmdW5jdGlvbiBzdHJpbmdpZnlWYWx1ZSgKICBrZXksCiAgLy8gdGhpcyB0eXBlIGlzIGEgdGlueSBiaXQgb2YgYSBjaGVhdCwgc2luY2UgdGhpcyBmdW5jdGlvbiBkb2VzIGhhbmRsZSBOYU4gKHdoaWNoIGlzIHRlY2huaWNhbGx5IGEgbnVtYmVyKSwgYnV0IGZvcgogIC8vIG91ciBpbnRlcm5hbCB1c2UsIGl0J2xsIGRvCiAgdmFsdWUsCikgewogIHRyeSB7CiAgICBpZiAoa2V5ID09PSAnZG9tYWluJyAmJiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICh2YWx1ZSApLl9ldmVudHMpIHsKICAgICAgcmV0dXJuICdbRG9tYWluXSc7CiAgICB9CgogICAgaWYgKGtleSA9PT0gJ2RvbWFpbkVtaXR0ZXInKSB7CiAgICAgIHJldHVybiAnW0RvbWFpbkVtaXR0ZXJdJzsKICAgIH0KCiAgICAvLyBJdCdzIHNhZmUgdG8gdXNlIGBnbG9iYWxgLCBgd2luZG93YCwgYW5kIGBkb2N1bWVudGAgaGVyZSBpbiB0aGlzIG1hbm5lciwgYXMgd2UgYXJlIGFzc2VydGluZyB1c2luZyBgdHlwZW9mYCBmaXJzdAogICAgLy8gd2hpY2ggd29uJ3QgdGhyb3cgaWYgdGhleSBhcmUgbm90IHByZXNlbnQuCgogICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlID09PSBnbG9iYWwpIHsKICAgICAgcmV0dXJuICdbR2xvYmFsXSc7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscwogICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlID09PSB3aW5kb3cpIHsKICAgICAgcmV0dXJuICdbV2luZG93XSc7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscwogICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgPT09IGRvY3VtZW50KSB7CiAgICAgIHJldHVybiAnW0RvY3VtZW50XSc7CiAgICB9CgogICAgaWYgKGlzVnVlVmlld01vZGVsKHZhbHVlKSkgewogICAgICByZXR1cm4gJ1tWdWVWaWV3TW9kZWxdJzsKICAgIH0KCiAgICAvLyBSZWFjdCdzIFN5bnRoZXRpY0V2ZW50IHRoaW5neQogICAgaWYgKGlzU3ludGhldGljRXZlbnQodmFsdWUpKSB7CiAgICAgIHJldHVybiAnW1N5bnRoZXRpY0V2ZW50XSc7CiAgICB9CgogICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHZhbHVlKSB7CiAgICAgIHJldHVybiAnW05hTl0nOwogICAgfQoKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHsKICAgICAgcmV0dXJuIGBbRnVuY3Rpb246ICR7Z2V0RnVuY3Rpb25OYW1lKHZhbHVlKX1dYDsKICAgIH0KCiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykgewogICAgICByZXR1cm4gYFske1N0cmluZyh2YWx1ZSl9XWA7CiAgICB9CgogICAgLy8gc3RyaW5naWZpZWQgQmlnSW50cyBhcmUgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSByZWd1bGFyIG51bWJlcnMsIHNvIHdlIG5lZWQgdG8gbGFiZWwgdGhlbSB0byBhdm9pZCBjb25mdXNpb24KICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnKSB7CiAgICAgIHJldHVybiBgW0JpZ0ludDogJHtTdHJpbmcodmFsdWUpfV1gOwogICAgfQoKICAgIC8vIE5vdyB0aGF0IHdlJ3ZlIGtub2NrZWQgb3V0IGFsbCB0aGUgc3BlY2lhbCBjYXNlcyBhbmQgdGhlIHByaW1pdGl2ZXMsIGFsbCB3ZSBoYXZlIGxlZnQgYXJlIG9iamVjdHMuIFNpbXBseSBjYXN0aW5nCiAgICAvLyB0aGVtIHRvIHN0cmluZ3MgbWVhbnMgdGhhdCBpbnN0YW5jZXMgb2YgY2xhc3NlcyB3aGljaCBoYXZlbid0IGRlZmluZWQgdGhlaXIgYHRvU3RyaW5nVGFnYCB3aWxsIGp1c3QgY29tZSBvdXQgYXMKICAgIC8vIGAiW29iamVjdCBPYmplY3RdImAuIElmIHdlIGluc3RlYWQgbG9vayBhdCB0aGUgY29uc3RydWN0b3IncyBuYW1lICh3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MpLAogICAgLy8gd2UgY2FuIG1ha2Ugc3VyZSB0aGF0IG9ubHkgcGxhaW4gb2JqZWN0cyBjb21lIG91dCB0aGF0IHdheS4KICAgIGNvbnN0IG9iak5hbWUgPSBnZXRDb25zdHJ1Y3Rvck5hbWUodmFsdWUpOwoKICAgIC8vIEhhbmRsZSBIVE1MIEVsZW1lbnRzCiAgICBpZiAoL15IVE1MKFx3KilFbGVtZW50JC8udGVzdChvYmpOYW1lKSkgewogICAgICByZXR1cm4gYFtIVE1MRWxlbWVudDogJHtvYmpOYW1lfV1gOwogICAgfQoKICAgIHJldHVybiBgW29iamVjdCAke29iak5hbWV9XWA7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICByZXR1cm4gYCoqbm9uLXNlcmlhbGl6YWJsZSoqICgke2Vycn0pYDsKICB9Cn0KLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovCgpmdW5jdGlvbiBnZXRDb25zdHJ1Y3Rvck5hbWUodmFsdWUpIHsKICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpOwoKICByZXR1cm4gcHJvdG90eXBlID8gcHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWUgOiAnbnVsbCBwcm90b3R5cGUnOwp9CgovKioKICogTm9ybWFsaXplcyBVUkxzIGluIGV4Y2VwdGlvbnMgYW5kIHN0YWNrdHJhY2VzIHRvIGEgYmFzZSBwYXRoIHNvIFNlbnRyeSBjYW4gZmluZ2VycHJpbnQKICogYWNyb3NzIHBsYXRmb3JtcyBhbmQgd29ya2luZyBkaXJlY3RvcnkuCiAqCiAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0byBiZSBub3JtYWxpemVkLgogKiBAcGFyYW0gYmFzZVBhdGggVGhlIGFwcGxpY2F0aW9uIGJhc2UgcGF0aC4KICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgVVJMLgogKi8KZnVuY3Rpb24gbm9ybWFsaXplVXJsVG9CYXNlKHVybCwgYmFzZVBhdGgpIHsKICBjb25zdCBlc2NhcGVkQmFzZSA9IGJhc2VQYXRoCiAgICAvLyBCYWNrc2xhc2ggdG8gZm9yd2FyZAogICAgLnJlcGxhY2UoL1xcL2csICcvJykKICAgIC8vIEVzY2FwZSBSZWdFeHAgc3BlY2lhbCBjaGFyYWN0ZXJzCiAgICAucmVwbGFjZSgvW3xcXHt9KClbXF1eJCsqPy5dL2csICdcXCQmJyk7CgogIGxldCBuZXdVcmwgPSB1cmw7CiAgdHJ5IHsKICAgIG5ld1VybCA9IGRlY29kZVVSSSh1cmwpOwogIH0gY2F0Y2ggKF9PbykgewogICAgLy8gU29tZXRpbWUgdGhpcyBicmVha3MKICB9CiAgcmV0dXJuICgKICAgIG5ld1VybAogICAgICAucmVwbGFjZSgvXFwvZywgJy8nKQogICAgICAucmVwbGFjZSgvd2VicGFjazpcLz8vZywgJycpIC8vIFJlbW92ZSBpbnRlcm1lZGlhdGUgYmFzZSBwYXRoCiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc2VudHJ5LWludGVybmFsL3Nkay9uby1yZWdleHAtY29uc3RydWN0b3IKICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cChgKGZpbGU6Ly8pPy8qJHtlc2NhcGVkQmFzZX0vKmAsICdpZycpLCAnYXBwOi8vLycpCiAgKTsKfQoKLy8gU2xpZ2h0bHkgbW9kaWZpZWQgKG5vIElFOCBzdXBwb3J0LCBFUzYpIGFuZCB0cmFuc2NyaWJlZCB0byBUeXBlU2NyaXB0CgovLyBTcGxpdCBhIGZpbGVuYW1lIGludG8gW3Jvb3QsIGRpciwgYmFzZW5hbWUsIGV4dF0sIHVuaXggdmVyc2lvbgovLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLgpjb25zdCBzcGxpdFBhdGhSZSA9IC9eKFxTKzpcXHxcLz8pKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteL1xcXSs/fCkoXC5bXi4vXFxdKnwpKSg/OlsvXFxdKikkLzsKLyoqIEpTRG9jICovCmZ1bmN0aW9uIHNwbGl0UGF0aChmaWxlbmFtZSkgewogIC8vIFRydW5jYXRlIGZpbGVzIG5hbWVzIGdyZWF0ZXIgdGhhbiAxMDI0IGNoYXJhY3RlcnMgdG8gYXZvaWQgcmVnZXggZG9zCiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9wdWxsLzg3MzcjZGlzY3Vzc2lvbl9yMTI4NTcxOTE3MgogIGNvbnN0IHRydW5jYXRlZCA9IGZpbGVuYW1lLmxlbmd0aCA+IDEwMjQgPyBgPHRydW5jYXRlZD4ke2ZpbGVuYW1lLnNsaWNlKC0xMDI0KX1gIDogZmlsZW5hbWU7CiAgY29uc3QgcGFydHMgPSBzcGxpdFBhdGhSZS5leGVjKHRydW5jYXRlZCk7CiAgcmV0dXJuIHBhcnRzID8gcGFydHMuc2xpY2UoMSkgOiBbXTsKfQoKLyoqIEpTRG9jICovCmZ1bmN0aW9uIGRpcm5hbWUocGF0aCkgewogIGNvbnN0IHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKTsKICBjb25zdCByb290ID0gcmVzdWx0WzBdOwogIGxldCBkaXIgPSByZXN1bHRbMV07CgogIGlmICghcm9vdCAmJiAhZGlyKSB7CiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXIKICAgIHJldHVybiAnLic7CiAgfQoKICBpZiAoZGlyKSB7CiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaAogICAgZGlyID0gZGlyLnNsaWNlKDAsIGRpci5sZW5ndGggLSAxKTsKICB9CgogIHJldHVybiByb290ICsgZGlyOwp9CgovKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUgKi8KCi8qKiBTeW5jUHJvbWlzZSBpbnRlcm5hbCBzdGF0ZXMgKi8KdmFyIFN0YXRlczsgKGZ1bmN0aW9uIChTdGF0ZXMpIHsKICAvKiogUGVuZGluZyAqLwogIGNvbnN0IFBFTkRJTkcgPSAwOyBTdGF0ZXNbU3RhdGVzWyJQRU5ESU5HIl0gPSBQRU5ESU5HXSA9ICJQRU5ESU5HIjsKICAvKiogUmVzb2x2ZWQgLyBPSyAqLwogIGNvbnN0IFJFU09MVkVEID0gMTsgU3RhdGVzW1N0YXRlc1siUkVTT0xWRUQiXSA9IFJFU09MVkVEXSA9ICJSRVNPTFZFRCI7CiAgLyoqIFJlamVjdGVkIC8gRXJyb3IgKi8KICBjb25zdCBSRUpFQ1RFRCA9IDI7IFN0YXRlc1tTdGF0ZXNbIlJFSkVDVEVEIl0gPSBSRUpFQ1RFRF0gPSAiUkVKRUNURUQiOwp9KShTdGF0ZXMgfHwgKFN0YXRlcyA9IHt9KSk7CgovLyBPdmVybG9hZHMgc28gd2UgY2FuIGNhbGwgcmVzb2x2ZWRTeW5jUHJvbWlzZSB3aXRob3V0IGFyZ3VtZW50cyBhbmQgZ2VuZXJpYyBhcmd1bWVudAoKLyoqCiAqIENyZWF0ZXMgYSByZXNvbHZlZCBzeW5jIHByb21pc2UuCiAqCiAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gcmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRoCiAqIEByZXR1cm5zIHRoZSByZXNvbHZlZCBzeW5jIHByb21pc2UKICovCmZ1bmN0aW9uIHJlc29sdmVkU3luY1Byb21pc2UodmFsdWUpIHsKICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKHJlc29sdmUgPT4gewogICAgcmVzb2x2ZSh2YWx1ZSk7CiAgfSk7Cn0KCi8qKgogKiBDcmVhdGVzIGEgcmVqZWN0ZWQgc3luYyBwcm9taXNlLgogKgogKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIHJlamVjdCB0aGUgcHJvbWlzZSB3aXRoCiAqIEByZXR1cm5zIHRoZSByZWplY3RlZCBzeW5jIHByb21pc2UKICovCmZ1bmN0aW9uIHJlamVjdGVkU3luY1Byb21pc2UocmVhc29uKSB7CiAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7CiAgICByZWplY3QocmVhc29uKTsKICB9KTsKfQoKLyoqCiAqIFRoZW5hYmxlIGNsYXNzIHRoYXQgYmVoYXZlcyBsaWtlIGEgUHJvbWlzZSBhbmQgZm9sbG93cyBpdCdzIGludGVyZmFjZQogKiBidXQgaXMgbm90IGFzeW5jIGludGVybmFsbHkKICovCmNsYXNzIFN5bmNQcm9taXNlIHsKCiAgIGNvbnN0cnVjdG9yKAogICAgZXhlY3V0b3IsCiAgKSB7U3luY1Byb21pc2UucHJvdG90eXBlLl9faW5pdC5jYWxsKHRoaXMpO1N5bmNQcm9taXNlLnByb3RvdHlwZS5fX2luaXQyLmNhbGwodGhpcyk7U3luY1Byb21pc2UucHJvdG90eXBlLl9faW5pdDMuY2FsbCh0aGlzKTtTeW5jUHJvbWlzZS5wcm90b3R5cGUuX19pbml0NC5jYWxsKHRoaXMpOwogICAgdGhpcy5fc3RhdGUgPSBTdGF0ZXMuUEVORElORzsKICAgIHRoaXMuX2hhbmRsZXJzID0gW107CgogICAgdHJ5IHsKICAgICAgZXhlY3V0b3IodGhpcy5fcmVzb2x2ZSwgdGhpcy5fcmVqZWN0KTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgdGhpcy5fcmVqZWN0KGUpOwogICAgfQogIH0KCiAgLyoqIEpTRG9jICovCiAgIHRoZW4oCiAgICBvbmZ1bGZpbGxlZCwKICAgIG9ucmVqZWN0ZWQsCiAgKSB7CiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgdGhpcy5faGFuZGxlcnMucHVzaChbCiAgICAgICAgZmFsc2UsCiAgICAgICAgcmVzdWx0ID0+IHsKICAgICAgICAgIGlmICghb25mdWxmaWxsZWQpIHsKICAgICAgICAgICAgLy8gVE9ETzogwq9cXyjjg4QpXy/CrwogICAgICAgICAgICAvLyBUT0RPOiBGSVhNRQogICAgICAgICAgICByZXNvbHZlKHJlc3VsdCApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICByZXNvbHZlKG9uZnVsZmlsbGVkKHJlc3VsdCkpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICByZWFzb24gPT4gewogICAgICAgICAgaWYgKCFvbnJlamVjdGVkKSB7CiAgICAgICAgICAgIHJlamVjdChyZWFzb24pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICByZXNvbHZlKG9ucmVqZWN0ZWQocmVhc29uKSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICByZWplY3QoZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICBdKTsKICAgICAgdGhpcy5fZXhlY3V0ZUhhbmRsZXJzKCk7CiAgICB9KTsKICB9CgogIC8qKiBKU0RvYyAqLwogICBjYXRjaCgKICAgIG9ucmVqZWN0ZWQsCiAgKSB7CiAgICByZXR1cm4gdGhpcy50aGVuKHZhbCA9PiB2YWwsIG9ucmVqZWN0ZWQpOwogIH0KCiAgLyoqIEpTRG9jICovCiAgIGZpbmFsbHkob25maW5hbGx5KSB7CiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgbGV0IHZhbDsKICAgICAgbGV0IGlzUmVqZWN0ZWQ7CgogICAgICByZXR1cm4gdGhpcy50aGVuKAogICAgICAgIHZhbHVlID0+IHsKICAgICAgICAgIGlzUmVqZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgIHZhbCA9IHZhbHVlOwogICAgICAgICAgaWYgKG9uZmluYWxseSkgewogICAgICAgICAgICBvbmZpbmFsbHkoKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHJlYXNvbiA9PiB7CiAgICAgICAgICBpc1JlamVjdGVkID0gdHJ1ZTsKICAgICAgICAgIHZhbCA9IHJlYXNvbjsKICAgICAgICAgIGlmIChvbmZpbmFsbHkpIHsKICAgICAgICAgICAgb25maW5hbGx5KCk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgKS50aGVuKCgpID0+IHsKICAgICAgICBpZiAoaXNSZWplY3RlZCkgewogICAgICAgICAgcmVqZWN0KHZhbCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICByZXNvbHZlKHZhbCApOwogICAgICB9KTsKICAgIH0pOwogIH0KCiAgLyoqIEpTRG9jICovCiAgICBfX2luaXQoKSB7dGhpcy5fcmVzb2x2ZSA9ICh2YWx1ZSkgPT4gewogICAgdGhpcy5fc2V0UmVzdWx0KFN0YXRlcy5SRVNPTFZFRCwgdmFsdWUpOwogIH07fQoKICAvKiogSlNEb2MgKi8KICAgIF9faW5pdDIoKSB7dGhpcy5fcmVqZWN0ID0gKHJlYXNvbikgPT4gewogICAgdGhpcy5fc2V0UmVzdWx0KFN0YXRlcy5SRUpFQ1RFRCwgcmVhc29uKTsKICB9O30KCiAgLyoqIEpTRG9jICovCiAgICBfX2luaXQzKCkge3RoaXMuX3NldFJlc3VsdCA9IChzdGF0ZSwgdmFsdWUpID0+IHsKICAgIGlmICh0aGlzLl9zdGF0ZSAhPT0gU3RhdGVzLlBFTkRJTkcpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChpc1RoZW5hYmxlKHZhbHVlKSkgewogICAgICB2b2lkICh2YWx1ZSApLnRoZW4odGhpcy5fcmVzb2x2ZSwgdGhpcy5fcmVqZWN0KTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHRoaXMuX3N0YXRlID0gc3RhdGU7CiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlOwoKICAgIHRoaXMuX2V4ZWN1dGVIYW5kbGVycygpOwogIH07fQoKICAvKiogSlNEb2MgKi8KICAgIF9faW5pdDQoKSB7dGhpcy5fZXhlY3V0ZUhhbmRsZXJzID0gKCkgPT4gewogICAgaWYgKHRoaXMuX3N0YXRlID09PSBTdGF0ZXMuUEVORElORykgewogICAgICByZXR1cm47CiAgICB9CgogICAgY29uc3QgY2FjaGVkSGFuZGxlcnMgPSB0aGlzLl9oYW5kbGVycy5zbGljZSgpOwogICAgdGhpcy5faGFuZGxlcnMgPSBbXTsKCiAgICBjYWNoZWRIYW5kbGVycy5mb3JFYWNoKGhhbmRsZXIgPT4gewogICAgICBpZiAoaGFuZGxlclswXSkgewogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSBTdGF0ZXMuUkVTT0xWRUQpIHsKICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzCiAgICAgICAgaGFuZGxlclsxXSh0aGlzLl92YWx1ZSApOwogICAgICB9CgogICAgICBpZiAodGhpcy5fc3RhdGUgPT09IFN0YXRlcy5SRUpFQ1RFRCkgewogICAgICAgIGhhbmRsZXJbMl0odGhpcy5fdmFsdWUpOwogICAgICB9CgogICAgICBoYW5kbGVyWzBdID0gdHJ1ZTsKICAgIH0pOwogIH07fQp9CgovKioKICogQ3JlYXRlcyBhbiBuZXcgUHJvbWlzZUJ1ZmZlciBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIGxpbWl0CiAqIEBwYXJhbSBsaW1pdCBtYXggbnVtYmVyIG9mIHByb21pc2VzIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgYnVmZmVyCiAqLwpmdW5jdGlvbiBtYWtlUHJvbWlzZUJ1ZmZlcihsaW1pdCkgewogIGNvbnN0IGJ1ZmZlciA9IFtdOwoKICBmdW5jdGlvbiBpc1JlYWR5KCkgewogICAgcmV0dXJuIGxpbWl0ID09PSB1bmRlZmluZWQgfHwgYnVmZmVyLmxlbmd0aCA8IGxpbWl0OwogIH0KCiAgLyoqCiAgICogUmVtb3ZlIGEgcHJvbWlzZSBmcm9tIHRoZSBxdWV1ZS4KICAgKgogICAqIEBwYXJhbSB0YXNrIENhbiBiZSBhbnkgUHJvbWlzZUxpa2U8VD4KICAgKiBAcmV0dXJucyBSZW1vdmVkIHByb21pc2UuCiAgICovCiAgZnVuY3Rpb24gcmVtb3ZlKHRhc2spIHsKICAgIHJldHVybiBidWZmZXIuc3BsaWNlKGJ1ZmZlci5pbmRleE9mKHRhc2spLCAxKVswXTsKICB9CgogIC8qKgogICAqIEFkZCBhIHByb21pc2UgKHJlcHJlc2VudGluZyBhbiBpbi1mbGlnaHQgYWN0aW9uKSB0byB0aGUgcXVldWUsIGFuZCBzZXQgaXQgdG8gcmVtb3ZlIGl0c2VsZiBvbiBmdWxmaWxsbWVudC4KICAgKgogICAqIEBwYXJhbSB0YXNrUHJvZHVjZXIgQSBmdW5jdGlvbiBwcm9kdWNpbmcgYW55IFByb21pc2VMaWtlPFQ+OyBJbiBwcmV2aW91cyB2ZXJzaW9ucyB0aGlzIHVzZWQgdG8gYmUgYHRhc2s6CiAgICogICAgICAgIFByb21pc2VMaWtlPFQ+YCwgYnV0IHVuZGVyIHRoYXQgbW9kZWwsIFByb21pc2VzIHdlcmUgaW5zdGFudGx5IGNyZWF0ZWQgb24gdGhlIGNhbGwtc2l0ZSBhbmQgdGhlaXIgZXhlY3V0b3IKICAgKiAgICAgICAgZnVuY3Rpb25zIHRoZXJlZm9yZSByYW4gaW1tZWRpYXRlbHkuIFRodXMsIGV2ZW4gaWYgdGhlIGJ1ZmZlciB3YXMgZnVsbCwgdGhlIGFjdGlvbiBzdGlsbCBoYXBwZW5lZC4gQnkKICAgKiAgICAgICAgcmVxdWlyaW5nIHRoZSBwcm9taXNlIHRvIGJlIHdyYXBwZWQgaW4gYSBmdW5jdGlvbiwgd2UgY2FuIGRlZmVyIHByb21pc2UgY3JlYXRpb24gdW50aWwgYWZ0ZXIgdGhlIGJ1ZmZlcgogICAqICAgICAgICBsaW1pdCBjaGVjay4KICAgKiBAcmV0dXJucyBUaGUgb3JpZ2luYWwgcHJvbWlzZS4KICAgKi8KICBmdW5jdGlvbiBhZGQodGFza1Byb2R1Y2VyKSB7CiAgICBpZiAoIWlzUmVhZHkoKSkgewogICAgICByZXR1cm4gcmVqZWN0ZWRTeW5jUHJvbWlzZShuZXcgU2VudHJ5RXJyb3IoJ05vdCBhZGRpbmcgUHJvbWlzZSBiZWNhdXNlIGJ1ZmZlciBsaW1pdCB3YXMgcmVhY2hlZC4nKSk7CiAgICB9CgogICAgLy8gc3RhcnQgdGhlIHRhc2sgYW5kIGFkZCBpdHMgcHJvbWlzZSB0byB0aGUgcXVldWUKICAgIGNvbnN0IHRhc2sgPSB0YXNrUHJvZHVjZXIoKTsKICAgIGlmIChidWZmZXIuaW5kZXhPZih0YXNrKSA9PT0gLTEpIHsKICAgICAgYnVmZmVyLnB1c2godGFzayk7CiAgICB9CiAgICB2b2lkIHRhc2sKICAgICAgLnRoZW4oKCkgPT4gcmVtb3ZlKHRhc2spKQogICAgICAvLyBVc2UgYHRoZW4obnVsbCwgcmVqZWN0aW9uSGFuZGxlcilgIHJhdGhlciB0aGFuIGBjYXRjaChyZWplY3Rpb25IYW5kbGVyKWAgc28gdGhhdCB3ZSBjYW4gdXNlIGBQcm9taXNlTGlrZWAKICAgICAgLy8gcmF0aGVyIHRoYW4gYFByb21pc2VgLiBgUHJvbWlzZUxpa2VgIGRvZXNuJ3QgaGF2ZSBhIGAuY2F0Y2hgIG1ldGhvZCwgbWFraW5nIGl0cyBwb2x5ZmlsbCBzbWFsbGVyLiAoRVM1IGRpZG4ndAogICAgICAvLyBoYXZlIHByb21pc2VzLCBzbyBUUyBoYXMgdG8gcG9seWZpbGwgd2hlbiBkb3duLWNvbXBpbGluZy4pCiAgICAgIC50aGVuKG51bGwsICgpID0+CiAgICAgICAgcmVtb3ZlKHRhc2spLnRoZW4obnVsbCwgKCkgPT4gewogICAgICAgICAgLy8gV2UgaGF2ZSB0byBhZGQgYW5vdGhlciBjYXRjaCBoZXJlIGJlY2F1c2UgYHJlbW92ZSgpYCBzdGFydHMgYSBuZXcgcHJvbWlzZSBjaGFpbi4KICAgICAgICB9KSwKICAgICAgKTsKICAgIHJldHVybiB0YXNrOwogIH0KCiAgLyoqCiAgICogV2FpdCBmb3IgYWxsIHByb21pc2VzIGluIHRoZSBxdWV1ZSB0byByZXNvbHZlIG9yIGZvciB0aW1lb3V0IHRvIGV4cGlyZSwgd2hpY2hldmVyIGNvbWVzIGZpcnN0LgogICAqCiAgICogQHBhcmFtIHRpbWVvdXQgVGhlIHRpbWUsIGluIG1zLCBhZnRlciB3aGljaCB0byByZXNvbHZlIHRvIGBmYWxzZWAgaWYgdGhlIHF1ZXVlIGlzIHN0aWxsIG5vbi1lbXB0eS4gUGFzc2luZyBgMGAgKG9yCiAgICogbm90IHBhc3NpbmcgYW55dGhpbmcpIHdpbGwgbWFrZSB0aGUgcHJvbWlzZSB3YWl0IGFzIGxvbmcgYXMgaXQgdGFrZXMgZm9yIHRoZSBxdWV1ZSB0byBkcmFpbiBiZWZvcmUgcmVzb2x2aW5nIHRvCiAgICogYHRydWVgLgogICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCB3aWxsIHJlc29sdmUgdG8gYHRydWVgIGlmIHRoZSBxdWV1ZSBpcyBhbHJlYWR5IGVtcHR5IG9yIGRyYWlucyBiZWZvcmUgdGhlIHRpbWVvdXQsIGFuZAogICAqIGBmYWxzZWAgb3RoZXJ3aXNlCiAgICovCiAgZnVuY3Rpb24gZHJhaW4odGltZW91dCkgewogICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIGxldCBjb3VudGVyID0gYnVmZmVyLmxlbmd0aDsKCiAgICAgIGlmICghY291bnRlcikgewogICAgICAgIHJldHVybiByZXNvbHZlKHRydWUpOwogICAgICB9CgogICAgICAvLyB3YWl0IGZvciBgdGltZW91dGAgbXMgYW5kIHRoZW4gcmVzb2x2ZSB0byBgZmFsc2VgIChpZiBub3QgY2FuY2VsbGVkIGZpcnN0KQogICAgICBjb25zdCBjYXB0dXJlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICBpZiAodGltZW91dCAmJiB0aW1lb3V0ID4gMCkgewogICAgICAgICAgcmVzb2x2ZShmYWxzZSk7CiAgICAgICAgfQogICAgICB9LCB0aW1lb3V0KTsKCiAgICAgIC8vIGlmIGFsbCBwcm9taXNlcyByZXNvbHZlIGluIHRpbWUsIGNhbmNlbCB0aGUgdGltZXIgYW5kIHJlc29sdmUgdG8gYHRydWVgCiAgICAgIGJ1ZmZlci5mb3JFYWNoKGl0ZW0gPT4gewogICAgICAgIHZvaWQgcmVzb2x2ZWRTeW5jUHJvbWlzZShpdGVtKS50aGVuKCgpID0+IHsKICAgICAgICAgIGlmICghLS1jb3VudGVyKSB7CiAgICAgICAgICAgIGNsZWFyVGltZW91dChjYXB0dXJlZFNldFRpbWVvdXQpOwogICAgICAgICAgICByZXNvbHZlKHRydWUpOwogICAgICAgICAgfQogICAgICAgIH0sIHJlamVjdCk7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICByZXR1cm4gewogICAgJDogYnVmZmVyLAogICAgYWRkLAogICAgZHJhaW4sCiAgfTsKfQoKY29uc3QgT05FX1NFQ09ORF9JTl9NUyA9IDEwMDA7CgovKioKICogQSBwYXJ0aWFsIGRlZmluaXRpb24gb2YgdGhlIFtQZXJmb3JtYW5jZSBXZWIgQVBJXXtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUGVyZm9ybWFuY2V9CiAqIGZvciBhY2Nlc3NpbmcgYSBoaWdoLXJlc29sdXRpb24gbW9ub3RvbmljIGNsb2NrLgogKi8KCi8qKgogKiBSZXR1cm5zIGEgdGltZXN0YW1wIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2ggdXNpbmcgdGhlIERhdGUgQVBJLgogKgogKiBUT0RPKHY4KTogUmV0dXJuIHR5cGUgc2hvdWxkIGJlIHJvdW5kZWQuCiAqLwpmdW5jdGlvbiBkYXRlVGltZXN0YW1wSW5TZWNvbmRzKCkgewogIHJldHVybiBEYXRlLm5vdygpIC8gT05FX1NFQ09ORF9JTl9NUzsKfQoKLyoqCiAqIFJldHVybnMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIFBlcmZvcm1hbmNlIEFQSSBicm93c2VyIGltcGxlbWVudGF0aW9uLCBvciB1bmRlZmluZWQgZm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90CiAqIHN1cHBvcnQgdGhlIEFQSS4KICoKICogV3JhcHBpbmcgdGhlIG5hdGl2ZSBBUEkgd29ya3MgYXJvdW5kIGRpZmZlcmVuY2VzIGluIGJlaGF2aW9yIGZyb20gZGlmZmVyZW50IGJyb3dzZXJzLgogKi8KZnVuY3Rpb24gY3JlYXRlVW5peFRpbWVzdGFtcEluU2Vjb25kc0Z1bmMoKSB7CiAgY29uc3QgeyBwZXJmb3JtYW5jZSB9ID0gR0xPQkFMX09CSiA7CiAgaWYgKCFwZXJmb3JtYW5jZSB8fCAhcGVyZm9ybWFuY2Uubm93KSB7CiAgICByZXR1cm4gZGF0ZVRpbWVzdGFtcEluU2Vjb25kczsKICB9CgogIC8vIFNvbWUgYnJvd3NlciBhbmQgZW52aXJvbm1lbnRzIGRvbid0IGhhdmUgYSB0aW1lT3JpZ2luLCBzbyB3ZSBmYWxsYmFjayB0bwogIC8vIHVzaW5nIERhdGUubm93KCkgdG8gY29tcHV0ZSB0aGUgc3RhcnRpbmcgdGltZS4KICBjb25zdCBhcHByb3hTdGFydGluZ1RpbWVPcmlnaW4gPSBEYXRlLm5vdygpIC0gcGVyZm9ybWFuY2Uubm93KCk7CiAgY29uc3QgdGltZU9yaWdpbiA9IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gPT0gdW5kZWZpbmVkID8gYXBwcm94U3RhcnRpbmdUaW1lT3JpZ2luIDogcGVyZm9ybWFuY2UudGltZU9yaWdpbjsKCiAgLy8gcGVyZm9ybWFuY2Uubm93KCkgaXMgYSBtb25vdG9uaWMgY2xvY2ssIHdoaWNoIG1lYW5zIGl0IHN0YXJ0cyBhdCAwIHdoZW4gdGhlIHByb2Nlc3MgYmVnaW5zLiBUbyBnZXQgdGhlIGN1cnJlbnQKICAvLyB3YWxsIGNsb2NrIHRpbWUgKGFjdHVhbCBVTklYIHRpbWVzdGFtcCksIHdlIG5lZWQgdG8gYWRkIHRoZSBzdGFydGluZyB0aW1lIG9yaWdpbiBhbmQgdGhlIGN1cnJlbnQgdGltZSBlbGFwc2VkLgogIC8vCiAgLy8gVE9ETzogVGhpcyBkb2VzIG5vdCBhY2NvdW50IGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgbW9ub3RvbmljIGNsb2NrIHRoYXQgcG93ZXJzIHBlcmZvcm1hbmNlLm5vdygpIGRyaWZ0cyBmcm9tIHRoZQogIC8vIHdhbGwgY2xvY2sgdGltZSwgd2hpY2ggY2F1c2VzIHRoZSByZXR1cm5lZCB0aW1lc3RhbXAgdG8gYmUgaW5hY2N1cmF0ZS4gV2Ugc2hvdWxkIGludmVzdGlnYXRlIGhvdyB0byBkZXRlY3QgYW5kCiAgLy8gY29ycmVjdCBmb3IgdGhpcy4KICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1OTAKICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tZG4vY29udGVudC9pc3N1ZXMvNDcxMwogIC8vIFNlZTogaHR0cHM6Ly9kZXYudG8vbm9hbXIvd2hlbi1hLW1pbGxpc2Vjb25kLWlzLW5vdC1hLW1pbGxpc2Vjb25kLTNoNgogIHJldHVybiAoKSA9PiB7CiAgICByZXR1cm4gKHRpbWVPcmlnaW4gKyBwZXJmb3JtYW5jZS5ub3coKSkgLyBPTkVfU0VDT05EX0lOX01TOwogIH07Cn0KCi8qKgogKiBSZXR1cm5zIGEgdGltZXN0YW1wIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2ggdXNpbmcgZWl0aGVyIHRoZSBQZXJmb3JtYW5jZSBvciBEYXRlIEFQSXMsIGRlcGVuZGluZyBvbiB0aGUKICogYXZhaWxhYmlsaXR5IG9mIHRoZSBQZXJmb3JtYW5jZSBBUEkuCiAqCiAqIEJVRzogTm90ZSB0aGF0IGJlY2F1c2Ugb2YgaG93IGJyb3dzZXJzIGltcGxlbWVudCB0aGUgUGVyZm9ybWFuY2UgQVBJLCB0aGUgY2xvY2sgbWlnaHQgc3RvcCB3aGVuIHRoZSBjb21wdXRlciBpcwogKiBhc2xlZXAuIFRoaXMgY3JlYXRlcyBhIHNrZXcgYmV0d2VlbiBgZGF0ZVRpbWVzdGFtcEluU2Vjb25kc2AgYW5kIGB0aW1lc3RhbXBJblNlY29uZHNgLiBUaGUKICogc2tldyBjYW4gZ3JvdyB0byBhcmJpdHJhcnkgYW1vdW50cyBsaWtlIGRheXMsIHdlZWtzIG9yIG1vbnRocy4KICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1OTAuCiAqLwpjb25zdCB0aW1lc3RhbXBJblNlY29uZHMgPSBjcmVhdGVVbml4VGltZXN0YW1wSW5TZWNvbmRzRnVuYygpOwoKLyoqCiAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoLiBUaGlzIHZhbHVlIGlzIG9ubHkgdXNhYmxlIGluIGEgYnJvd3NlciwgYW5kIG9ubHkgd2hlbiB0aGUKICogcGVyZm9ybWFuY2UgQVBJIGlzIGF2YWlsYWJsZS4KICovCigoKSA9PiB7CiAgLy8gVW5mb3J0dW5hdGVseSBicm93c2VycyBtYXkgcmVwb3J0IGFuIGluYWNjdXJhdGUgdGltZSBvcmlnaW4gZGF0YSwgdGhyb3VnaCBlaXRoZXIgcGVyZm9ybWFuY2UudGltZU9yaWdpbiBvcgogIC8vIHBlcmZvcm1hbmNlLnRpbWluZy5uYXZpZ2F0aW9uU3RhcnQsIHdoaWNoIHJlc3VsdHMgaW4gcG9vciByZXN1bHRzIGluIHBlcmZvcm1hbmNlIGRhdGEuIFdlIG9ubHkgdHJlYXQgdGltZSBvcmlnaW4KICAvLyBkYXRhIGFzIHJlbGlhYmxlIGlmIHRoZXkgYXJlIHdpdGhpbiBhIHJlYXNvbmFibGUgdGhyZXNob2xkIG9mIHRoZSBjdXJyZW50IHRpbWUuCgogIGNvbnN0IHsgcGVyZm9ybWFuY2UgfSA9IEdMT0JBTF9PQkogOwogIGlmICghcGVyZm9ybWFuY2UgfHwgIXBlcmZvcm1hbmNlLm5vdykgewogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CgogIGNvbnN0IHRocmVzaG9sZCA9IDM2MDAgKiAxMDAwOwogIGNvbnN0IHBlcmZvcm1hbmNlTm93ID0gcGVyZm9ybWFuY2Uubm93KCk7CiAgY29uc3QgZGF0ZU5vdyA9IERhdGUubm93KCk7CgogIC8vIGlmIHRpbWVPcmlnaW4gaXNuJ3QgYXZhaWxhYmxlIHNldCBkZWx0YSB0byB0aHJlc2hvbGQgc28gaXQgaXNuJ3QgdXNlZAogIGNvbnN0IHRpbWVPcmlnaW5EZWx0YSA9IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4KICAgID8gTWF0aC5hYnMocGVyZm9ybWFuY2UudGltZU9yaWdpbiArIHBlcmZvcm1hbmNlTm93IC0gZGF0ZU5vdykKICAgIDogdGhyZXNob2xkOwogIGNvbnN0IHRpbWVPcmlnaW5Jc1JlbGlhYmxlID0gdGltZU9yaWdpbkRlbHRhIDwgdGhyZXNob2xkOwoKICAvLyBXaGlsZSBwZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0IGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgcGVyZm9ybWFuY2UudGltZU9yaWdpbiwgcGVyZm9ybWFuY2UudGltZU9yaWdpbgogIC8vIGlzIG5vdCBhcyB3aWRlbHkgc3VwcG9ydGVkLiBOYW1lbHksIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gaXMgdW5kZWZpbmVkIGluIFNhZmFyaSBhcyBvZiB3cml0aW5nLgogIC8vIEFsc28gYXMgb2Ygd3JpdGluZywgcGVyZm9ybWFuY2UudGltaW5nIGlzIG5vdCBhdmFpbGFibGUgaW4gV2ViIFdvcmtlcnMgaW4gbWFpbnN0cmVhbSBicm93c2Vycywgc28gaXQgaXMgbm90IGFsd2F5cwogIC8vIGEgdmFsaWQgZmFsbGJhY2suIEluIHRoZSBhYnNlbmNlIG9mIGFuIGluaXRpYWwgdGltZSBwcm92aWRlZCBieSB0aGUgYnJvd3NlciwgZmFsbGJhY2sgdG8gdGhlIGN1cnJlbnQgdGltZSBmcm9tIHRoZQogIC8vIERhdGUgQVBJLgogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIGNvbnN0IG5hdmlnYXRpb25TdGFydCA9IHBlcmZvcm1hbmNlLnRpbWluZyAmJiBwZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0OwogIGNvbnN0IGhhc05hdmlnYXRpb25TdGFydCA9IHR5cGVvZiBuYXZpZ2F0aW9uU3RhcnQgPT09ICdudW1iZXInOwogIC8vIGlmIG5hdmlnYXRpb25TdGFydCBpc24ndCBhdmFpbGFibGUgc2V0IGRlbHRhIHRvIHRocmVzaG9sZCBzbyBpdCBpc24ndCB1c2VkCiAgY29uc3QgbmF2aWdhdGlvblN0YXJ0RGVsdGEgPSBoYXNOYXZpZ2F0aW9uU3RhcnQgPyBNYXRoLmFicyhuYXZpZ2F0aW9uU3RhcnQgKyBwZXJmb3JtYW5jZU5vdyAtIGRhdGVOb3cpIDogdGhyZXNob2xkOwogIGNvbnN0IG5hdmlnYXRpb25TdGFydElzUmVsaWFibGUgPSBuYXZpZ2F0aW9uU3RhcnREZWx0YSA8IHRocmVzaG9sZDsKCiAgaWYgKHRpbWVPcmlnaW5Jc1JlbGlhYmxlIHx8IG5hdmlnYXRpb25TdGFydElzUmVsaWFibGUpIHsKICAgIC8vIFVzZSB0aGUgbW9yZSByZWxpYWJsZSB0aW1lIG9yaWdpbgogICAgaWYgKHRpbWVPcmlnaW5EZWx0YSA8PSBuYXZpZ2F0aW9uU3RhcnREZWx0YSkgewogICAgICByZXR1cm4gcGVyZm9ybWFuY2UudGltZU9yaWdpbjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuYXZpZ2F0aW9uU3RhcnQ7CiAgICB9CiAgfQogIHJldHVybiBkYXRlTm93Owp9KSgpOwoKLyoqCiAqIENyZWF0ZXMgYW4gZW52ZWxvcGUuCiAqIE1ha2Ugc3VyZSB0byBhbHdheXMgZXhwbGljaXRseSBwcm92aWRlIHRoZSBnZW5lcmljIHRvIHRoaXMgZnVuY3Rpb24KICogc28gdGhhdCB0aGUgZW52ZWxvcGUgdHlwZXMgcmVzb2x2ZSBjb3JyZWN0bHkuCiAqLwpmdW5jdGlvbiBjcmVhdGVFbnZlbG9wZShoZWFkZXJzLCBpdGVtcyA9IFtdKSB7CiAgcmV0dXJuIFtoZWFkZXJzLCBpdGVtc10gOwp9CgovKioKICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gbG9vcCB0aHJvdWdoIHRoZSBpdGVtcyBhbmQgaXRlbSB0eXBlcyBvZiBhbiBlbnZlbG9wZS4KICogKFRoaXMgZnVuY3Rpb24gd2FzIG1vc3RseSBjcmVhdGVkIGJlY2F1c2Ugd29ya2luZyB3aXRoIGVudmVsb3BlIHR5cGVzIGlzIHBhaW5mdWwgYXQgdGhlIG1vbWVudCkKICoKICogSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSwgdGhlIHJlc3Qgb2YgdGhlIGl0ZW1zIHdpbGwgYmUgc2tpcHBlZC4KICovCmZ1bmN0aW9uIGZvckVhY2hFbnZlbG9wZUl0ZW0oCiAgZW52ZWxvcGUsCiAgY2FsbGJhY2ssCikgewogIGNvbnN0IGVudmVsb3BlSXRlbXMgPSBlbnZlbG9wZVsxXTsKCiAgZm9yIChjb25zdCBlbnZlbG9wZUl0ZW0gb2YgZW52ZWxvcGVJdGVtcykgewogICAgY29uc3QgZW52ZWxvcGVJdGVtVHlwZSA9IGVudmVsb3BlSXRlbVswXS50eXBlOwogICAgY29uc3QgcmVzdWx0ID0gY2FsbGJhY2soZW52ZWxvcGVJdGVtLCBlbnZlbG9wZUl0ZW1UeXBlKTsKCiAgICBpZiAocmVzdWx0KSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KCiAgcmV0dXJuIGZhbHNlOwp9CgovKioKICogRW5jb2RlIGEgc3RyaW5nIHRvIFVURjguCiAqLwpmdW5jdGlvbiBlbmNvZGVVVEY4KGlucHV0LCB0ZXh0RW5jb2RlcikgewogIGNvbnN0IHV0ZjggPSB0ZXh0RW5jb2RlciB8fCBuZXcgVGV4dEVuY29kZXIoKTsKICByZXR1cm4gdXRmOC5lbmNvZGUoaW5wdXQpOwp9CgovKioKICogU2VyaWFsaXplcyBhbiBlbnZlbG9wZS4KICovCmZ1bmN0aW9uIHNlcmlhbGl6ZUVudmVsb3BlKGVudmVsb3BlLCB0ZXh0RW5jb2RlcikgewogIGNvbnN0IFtlbnZIZWFkZXJzLCBpdGVtc10gPSBlbnZlbG9wZTsKCiAgLy8gSW5pdGlhbGx5IHdlIGNvbnN0cnVjdCBvdXIgZW52ZWxvcGUgYXMgYSBzdHJpbmcgYW5kIG9ubHkgY29udmVydCB0byBiaW5hcnkgY2h1bmtzIGlmIHdlIGVuY291bnRlciBiaW5hcnkgZGF0YQogIGxldCBwYXJ0cyA9IEpTT04uc3RyaW5naWZ5KGVudkhlYWRlcnMpOwoKICBmdW5jdGlvbiBhcHBlbmQobmV4dCkgewogICAgaWYgKHR5cGVvZiBwYXJ0cyA9PT0gJ3N0cmluZycpIHsKICAgICAgcGFydHMgPSB0eXBlb2YgbmV4dCA9PT0gJ3N0cmluZycgPyBwYXJ0cyArIG5leHQgOiBbZW5jb2RlVVRGOChwYXJ0cywgdGV4dEVuY29kZXIpLCBuZXh0XTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnRzLnB1c2godHlwZW9mIG5leHQgPT09ICdzdHJpbmcnID8gZW5jb2RlVVRGOChuZXh0LCB0ZXh0RW5jb2RlcikgOiBuZXh0KTsKICAgIH0KICB9CgogIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykgewogICAgY29uc3QgW2l0ZW1IZWFkZXJzLCBwYXlsb2FkXSA9IGl0ZW07CgogICAgYXBwZW5kKGBcbiR7SlNPTi5zdHJpbmdpZnkoaXRlbUhlYWRlcnMpfVxuYCk7CgogICAgaWYgKHR5cGVvZiBwYXlsb2FkID09PSAnc3RyaW5nJyB8fCBwYXlsb2FkIGluc3RhbmNlb2YgVWludDhBcnJheSkgewogICAgICBhcHBlbmQocGF5bG9hZCk7CiAgICB9IGVsc2UgewogICAgICBsZXQgc3RyaW5naWZpZWRQYXlsb2FkOwogICAgICB0cnkgewogICAgICAgIHN0cmluZ2lmaWVkUGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgLy8gSW4gY2FzZSwgZGVzcGl0ZSBhbGwgb3VyIGVmZm9ydHMgdG8ga2VlcCBgcGF5bG9hZGAgY2lyY3VsYXItZGVwZW5kZW5jeS1mcmVlLCBgSlNPTi5zdHJpbmlmeSgpYCBzdGlsbAogICAgICAgIC8vIGZhaWxzLCB3ZSB0cnkgYWdhaW4gYWZ0ZXIgbm9ybWFsaXppbmcgaXQgYWdhaW4gd2l0aCBpbmZpbml0ZSBub3JtYWxpemF0aW9uIGRlcHRoLiBUaGlzIG9mIGNvdXJzZSBoYXMgYQogICAgICAgIC8vIHBlcmZvcm1hbmNlIGltcGFjdCBidXQgaW4gdGhpcyBjYXNlIGEgcGVyZm9ybWFuY2UgaGl0IGlzIGJldHRlciB0aGFuIHRocm93aW5nLgogICAgICAgIHN0cmluZ2lmaWVkUGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KG5vcm1hbGl6ZShwYXlsb2FkKSk7CiAgICAgIH0KICAgICAgYXBwZW5kKHN0cmluZ2lmaWVkUGF5bG9hZCk7CiAgICB9CiAgfQoKICByZXR1cm4gdHlwZW9mIHBhcnRzID09PSAnc3RyaW5nJyA/IHBhcnRzIDogY29uY2F0QnVmZmVycyhwYXJ0cyk7Cn0KCmZ1bmN0aW9uIGNvbmNhdEJ1ZmZlcnMoYnVmZmVycykgewogIGNvbnN0IHRvdGFsTGVuZ3RoID0gYnVmZmVycy5yZWR1Y2UoKGFjYywgYnVmKSA9PiBhY2MgKyBidWYubGVuZ3RoLCAwKTsKCiAgY29uc3QgbWVyZ2VkID0gbmV3IFVpbnQ4QXJyYXkodG90YWxMZW5ndGgpOwogIGxldCBvZmZzZXQgPSAwOwogIGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnMpIHsKICAgIG1lcmdlZC5zZXQoYnVmZmVyLCBvZmZzZXQpOwogICAgb2Zmc2V0ICs9IGJ1ZmZlci5sZW5ndGg7CiAgfQoKICByZXR1cm4gbWVyZ2VkOwp9Cgpjb25zdCBJVEVNX1RZUEVfVE9fREFUQV9DQVRFR09SWV9NQVAgPSB7CiAgc2Vzc2lvbjogJ3Nlc3Npb24nLAogIHNlc3Npb25zOiAnc2Vzc2lvbicsCiAgYXR0YWNobWVudDogJ2F0dGFjaG1lbnQnLAogIHRyYW5zYWN0aW9uOiAndHJhbnNhY3Rpb24nLAogIGV2ZW50OiAnZXJyb3InLAogIGNsaWVudF9yZXBvcnQ6ICdpbnRlcm5hbCcsCiAgdXNlcl9yZXBvcnQ6ICdkZWZhdWx0JywKICBwcm9maWxlOiAncHJvZmlsZScsCiAgcmVwbGF5X2V2ZW50OiAncmVwbGF5JywKICByZXBsYXlfcmVjb3JkaW5nOiAncmVwbGF5JywKICBjaGVja19pbjogJ21vbml0b3InLAogIGZlZWRiYWNrOiAnZmVlZGJhY2snLAogIHNwYW46ICdzcGFuJywKICAvLyBUT0RPOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgdW50aWwgd2UgaGF2ZSBhIHByb3BlciBkYXRhIGNhdGVnb3J5IGZvciBtZXRyaWNzCiAgc3RhdHNkOiAndW5rbm93bicsCn07CgovKioKICogTWFwcyB0aGUgdHlwZSBvZiBhbiBlbnZlbG9wZSBpdGVtIHRvIGEgZGF0YSBjYXRlZ29yeS4KICovCmZ1bmN0aW9uIGVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSh0eXBlKSB7CiAgcmV0dXJuIElURU1fVFlQRV9UT19EQVRBX0NBVEVHT1JZX01BUFt0eXBlXTsKfQoKLyoqIEV4dHJhY3RzIHRoZSBtaW5pbWFsIFNESyBpbmZvIGZyb20gZnJvbSB0aGUgbWV0YWRhdGEgb3IgYW4gZXZlbnRzICovCmZ1bmN0aW9uIGdldFNka01ldGFkYXRhRm9yRW52ZWxvcGVIZWFkZXIobWV0YWRhdGFPckV2ZW50KSB7CiAgaWYgKCFtZXRhZGF0YU9yRXZlbnQgfHwgIW1ldGFkYXRhT3JFdmVudC5zZGspIHsKICAgIHJldHVybjsKICB9CiAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uIH0gPSBtZXRhZGF0YU9yRXZlbnQuc2RrOwogIHJldHVybiB7IG5hbWUsIHZlcnNpb24gfTsKfQoKLyoqCiAqIENyZWF0ZXMgZXZlbnQgZW52ZWxvcGUgaGVhZGVycywgYmFzZWQgb24gZXZlbnQsIHNkayBpbmZvIGFuZCB0dW5uZWwKICogTm90ZTogVGhpcyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGZyb20gdGhlIGNvcmUgcGFja2FnZSB0byBtYWtlIGl0IGF2YWlsYWJsZSBpbiBSZXBsYXkKICovCmZ1bmN0aW9uIGNyZWF0ZUV2ZW50RW52ZWxvcGVIZWFkZXJzKAogIGV2ZW50LAogIHNka0luZm8sCiAgdHVubmVsLAogIGRzbiwKKSB7CiAgY29uc3QgZHluYW1pY1NhbXBsaW5nQ29udGV4dCA9IGV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YSAmJiBldmVudC5zZGtQcm9jZXNzaW5nTWV0YWRhdGEuZHluYW1pY1NhbXBsaW5nQ29udGV4dDsKICByZXR1cm4gewogICAgZXZlbnRfaWQ6IGV2ZW50LmV2ZW50X2lkICwKICAgIHNlbnRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwKICAgIC4uLihzZGtJbmZvICYmIHsgc2RrOiBzZGtJbmZvIH0pLAogICAgLi4uKCEhdHVubmVsICYmIGRzbiAmJiB7IGRzbjogZHNuVG9TdHJpbmcoZHNuKSB9KSwKICAgIC4uLihkeW5hbWljU2FtcGxpbmdDb250ZXh0ICYmIHsKICAgICAgdHJhY2U6IGRyb3BVbmRlZmluZWRLZXlzKHsgLi4uZHluYW1pY1NhbXBsaW5nQ29udGV4dCB9KSwKICAgIH0pLAogIH07Cn0KCi8vIEludGVudGlvbmFsbHkga2VlcGluZyB0aGUga2V5IGJyb2FkLCBhcyB3ZSBkb24ndCBrbm93IGZvciBzdXJlIHdoYXQgcmF0ZSBsaW1pdCBoZWFkZXJzIGdldCByZXR1cm5lZCBmcm9tIGJhY2tlbmQKCmNvbnN0IERFRkFVTFRfUkVUUllfQUZURVIgPSA2MCAqIDEwMDA7IC8vIDYwIHNlY29uZHMKCi8qKgogKiBFeHRyYWN0cyBSZXRyeS1BZnRlciB2YWx1ZSBmcm9tIHRoZSByZXF1ZXN0IGhlYWRlciBvciByZXR1cm5zIGRlZmF1bHQgdmFsdWUKICogQHBhcmFtIGhlYWRlciBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgJ1JldHJ5LUFmdGVyJyBoZWFkZXIKICogQHBhcmFtIG5vdyBjdXJyZW50IHVuaXggdGltZXN0YW1wCiAqCiAqLwpmdW5jdGlvbiBwYXJzZVJldHJ5QWZ0ZXJIZWFkZXIoaGVhZGVyLCBub3cgPSBEYXRlLm5vdygpKSB7CiAgY29uc3QgaGVhZGVyRGVsYXkgPSBwYXJzZUludChgJHtoZWFkZXJ9YCwgMTApOwogIGlmICghaXNOYU4oaGVhZGVyRGVsYXkpKSB7CiAgICByZXR1cm4gaGVhZGVyRGVsYXkgKiAxMDAwOwogIH0KCiAgY29uc3QgaGVhZGVyRGF0ZSA9IERhdGUucGFyc2UoYCR7aGVhZGVyfWApOwogIGlmICghaXNOYU4oaGVhZGVyRGF0ZSkpIHsKICAgIHJldHVybiBoZWFkZXJEYXRlIC0gbm93OwogIH0KCiAgcmV0dXJuIERFRkFVTFRfUkVUUllfQUZURVI7Cn0KCi8qKgogKiBHZXRzIHRoZSB0aW1lIHRoYXQgdGhlIGdpdmVuIGNhdGVnb3J5IGlzIGRpc2FibGVkIHVudGlsIGZvciByYXRlIGxpbWl0aW5nLgogKiBJbiBjYXNlIG5vIGNhdGVnb3J5LXNwZWNpZmljIGxpbWl0IGlzIHNldCBidXQgYSBnZW5lcmFsIHJhdGUgbGltaXQgYWNyb3NzIGFsbCBjYXRlZ29yaWVzIGlzIGFjdGl2ZSwKICogdGhhdCB0aW1lIGlzIHJldHVybmVkLgogKgogKiBAcmV0dXJuIHRoZSB0aW1lIGluIG1zIHRoYXQgdGhlIGNhdGVnb3J5IGlzIGRpc2FibGVkIHVudGlsIG9yIDAgaWYgdGhlcmUncyBubyBhY3RpdmUgcmF0ZSBsaW1pdC4KICovCmZ1bmN0aW9uIGRpc2FibGVkVW50aWwobGltaXRzLCBjYXRlZ29yeSkgewogIHJldHVybiBsaW1pdHNbY2F0ZWdvcnldIHx8IGxpbWl0cy5hbGwgfHwgMDsKfQoKLyoqCiAqIENoZWNrcyBpZiBhIGNhdGVnb3J5IGlzIHJhdGUgbGltaXRlZAogKi8KZnVuY3Rpb24gaXNSYXRlTGltaXRlZChsaW1pdHMsIGNhdGVnb3J5LCBub3cgPSBEYXRlLm5vdygpKSB7CiAgcmV0dXJuIGRpc2FibGVkVW50aWwobGltaXRzLCBjYXRlZ29yeSkgPiBub3c7Cn0KCi8qKgogKiBVcGRhdGUgcmF0ZWxpbWl0cyBmcm9tIGluY29taW5nIGhlYWRlcnMuCiAqCiAqIEByZXR1cm4gdGhlIHVwZGF0ZWQgUmF0ZUxpbWl0cyBvYmplY3QuCiAqLwpmdW5jdGlvbiB1cGRhdGVSYXRlTGltaXRzKAogIGxpbWl0cywKICB7IHN0YXR1c0NvZGUsIGhlYWRlcnMgfSwKICBub3cgPSBEYXRlLm5vdygpLAopIHsKICBjb25zdCB1cGRhdGVkUmF0ZUxpbWl0cyA9IHsKICAgIC4uLmxpbWl0cywKICB9OwoKICAvLyAiVGhlIG5hbWUgaXMgY2FzZS1pbnNlbnNpdGl2ZS4iCiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hlYWRlcnMvZ2V0CiAgY29uc3QgcmF0ZUxpbWl0SGVhZGVyID0gaGVhZGVycyAmJiBoZWFkZXJzWyd4LXNlbnRyeS1yYXRlLWxpbWl0cyddOwogIGNvbnN0IHJldHJ5QWZ0ZXJIZWFkZXIgPSBoZWFkZXJzICYmIGhlYWRlcnNbJ3JldHJ5LWFmdGVyJ107CgogIGlmIChyYXRlTGltaXRIZWFkZXIpIHsKICAgIC8qKgogICAgICogcmF0ZSBsaW1pdCBoZWFkZXJzIGFyZSBvZiB0aGUgZm9ybQogICAgICogICAgIDxoZWFkZXI+LDxoZWFkZXI+LC4uCiAgICAgKiB3aGVyZSBlYWNoIDxoZWFkZXI+IGlzIG9mIHRoZSBmb3JtCiAgICAgKiAgICAgPHJldHJ5X2FmdGVyPjogPGNhdGVnb3JpZXM+OiA8c2NvcGU+OiA8cmVhc29uX2NvZGU+CiAgICAgKiB3aGVyZQogICAgICogICAgIDxyZXRyeV9hZnRlcj4gaXMgYSBkZWxheSBpbiBzZWNvbmRzCiAgICAgKiAgICAgPGNhdGVnb3JpZXM+IGlzIHRoZSBldmVudCB0eXBlKHMpIChlcnJvciwgdHJhbnNhY3Rpb24sIGV0YykgYmVpbmcgcmF0ZSBsaW1pdGVkIGFuZCBpcyBvZiB0aGUgZm9ybQogICAgICogICAgICAgICA8Y2F0ZWdvcnk+OzxjYXRlZ29yeT47Li4uCiAgICAgKiAgICAgPHNjb3BlPiBpcyB3aGF0J3MgYmVpbmcgbGltaXRlZCAob3JnLCBwcm9qZWN0LCBvciBrZXkpIC0gaWdub3JlZCBieSBTREsKICAgICAqICAgICA8cmVhc29uX2NvZGU+IGlzIGFuIGFyYml0cmFyeSBzdHJpbmcgbGlrZSAib3JnX3F1b3RhIiAtIGlnbm9yZWQgYnkgU0RLCiAgICAgKi8KICAgIGZvciAoY29uc3QgbGltaXQgb2YgcmF0ZUxpbWl0SGVhZGVyLnRyaW0oKS5zcGxpdCgnLCcpKSB7CiAgICAgIGNvbnN0IFtyZXRyeUFmdGVyLCBjYXRlZ29yaWVzXSA9IGxpbWl0LnNwbGl0KCc6JywgMik7CiAgICAgIGNvbnN0IGhlYWRlckRlbGF5ID0gcGFyc2VJbnQocmV0cnlBZnRlciwgMTApOwogICAgICBjb25zdCBkZWxheSA9ICghaXNOYU4oaGVhZGVyRGVsYXkpID8gaGVhZGVyRGVsYXkgOiA2MCkgKiAxMDAwOyAvLyA2MHNlYyBkZWZhdWx0CiAgICAgIGlmICghY2F0ZWdvcmllcykgewogICAgICAgIHVwZGF0ZWRSYXRlTGltaXRzLmFsbCA9IG5vdyArIGRlbGF5OwogICAgICB9IGVsc2UgewogICAgICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllcy5zcGxpdCgnOycpKSB7CiAgICAgICAgICB1cGRhdGVkUmF0ZUxpbWl0c1tjYXRlZ29yeV0gPSBub3cgKyBkZWxheTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9IGVsc2UgaWYgKHJldHJ5QWZ0ZXJIZWFkZXIpIHsKICAgIHVwZGF0ZWRSYXRlTGltaXRzLmFsbCA9IG5vdyArIHBhcnNlUmV0cnlBZnRlckhlYWRlcihyZXRyeUFmdGVySGVhZGVyLCBub3cpOwogIH0gZWxzZSBpZiAoc3RhdHVzQ29kZSA9PT0gNDI5KSB7CiAgICB1cGRhdGVkUmF0ZUxpbWl0cy5hbGwgPSBub3cgKyA2MCAqIDEwMDA7CiAgfQoKICByZXR1cm4gdXBkYXRlZFJhdGVMaW1pdHM7Cn0KCi8qKgogKiBBIG5vZGUuanMgd2F0Y2hkb2cgdGltZXIKICogQHBhcmFtIHBvbGxJbnRlcnZhbCBUaGUgaW50ZXJ2YWwgdGhhdCB3ZSBleHBlY3QgdG8gZ2V0IHBvbGxlZCBhdAogKiBAcGFyYW0gYW5yVGhyZXNob2xkIFRoZSB0aHJlc2hvbGQgZm9yIHdoZW4gd2UgY29uc2lkZXIgQU5SCiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gY2FsbCBmb3IgQU5SCiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGBwb2xsYCBhbmQgYGVuYWJsZWRgIGZ1bmN0aW9ucyB7QGxpbmsgV2F0Y2hkb2dSZXR1cm59CiAqLwpmdW5jdGlvbiB3YXRjaGRvZ1RpbWVyKAogIGNyZWF0ZVRpbWVyLAogIHBvbGxJbnRlcnZhbCwKICBhbnJUaHJlc2hvbGQsCiAgY2FsbGJhY2ssCikgewogIGNvbnN0IHRpbWVyID0gY3JlYXRlVGltZXIoKTsKICBsZXQgdHJpZ2dlcmVkID0gZmFsc2U7CiAgbGV0IGVuYWJsZWQgPSB0cnVlOwoKICBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICBjb25zdCBkaWZmTXMgPSB0aW1lci5nZXRUaW1lTXMoKTsKCiAgICBpZiAodHJpZ2dlcmVkID09PSBmYWxzZSAmJiBkaWZmTXMgPiBwb2xsSW50ZXJ2YWwgKyBhbnJUaHJlc2hvbGQpIHsKICAgICAgdHJpZ2dlcmVkID0gdHJ1ZTsKICAgICAgaWYgKGVuYWJsZWQpIHsKICAgICAgICBjYWxsYmFjaygpOwogICAgICB9CiAgICB9CgogICAgaWYgKGRpZmZNcyA8IHBvbGxJbnRlcnZhbCArIGFuclRocmVzaG9sZCkgewogICAgICB0cmlnZ2VyZWQgPSBmYWxzZTsKICAgIH0KICB9LCAyMCk7CgogIHJldHVybiB7CiAgICBwb2xsOiAoKSA9PiB7CiAgICAgIHRpbWVyLnJlc2V0KCk7CiAgICB9LAogICAgZW5hYmxlZDogKHN0YXRlKSA9PiB7CiAgICAgIGVuYWJsZWQgPSBzdGF0ZTsKICAgIH0sCiAgfTsKfQoKLy8gdHlwZXMgY29waWVkIGZyb20gaW5zcGVjdG9yLmQudHMKCi8qKgogKiBDb252ZXJ0cyBEZWJ1Z2dlci5DYWxsRnJhbWUgdG8gU2VudHJ5IFN0YWNrRnJhbWUKICovCmZ1bmN0aW9uIGNhbGxGcmFtZVRvU3RhY2tGcmFtZSgKICBmcmFtZSwKICB1cmwsCiAgZ2V0TW9kdWxlRnJvbUZpbGVuYW1lLAopIHsKICBjb25zdCBmaWxlbmFtZSA9IHVybCA/IHVybC5yZXBsYWNlKC9eZmlsZTpcL1wvLywgJycpIDogdW5kZWZpbmVkOwoKICAvLyBDYWxsRnJhbWUgcm93L2NvbCBhcmUgMCBiYXNlZCwgd2hlcmVhcyBTdGFja0ZyYW1lIGFyZSAxIGJhc2VkCiAgY29uc3QgY29sbm8gPSBmcmFtZS5sb2NhdGlvbi5jb2x1bW5OdW1iZXIgPyBmcmFtZS5sb2NhdGlvbi5jb2x1bW5OdW1iZXIgKyAxIDogdW5kZWZpbmVkOwogIGNvbnN0IGxpbmVubyA9IGZyYW1lLmxvY2F0aW9uLmxpbmVOdW1iZXIgPyBmcmFtZS5sb2NhdGlvbi5saW5lTnVtYmVyICsgMSA6IHVuZGVmaW5lZDsKCiAgcmV0dXJuIGRyb3BVbmRlZmluZWRLZXlzKHsKICAgIGZpbGVuYW1lLAogICAgbW9kdWxlOiBnZXRNb2R1bGVGcm9tRmlsZW5hbWUoZmlsZW5hbWUpLAogICAgZnVuY3Rpb246IGZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnPycsCiAgICBjb2xubywKICAgIGxpbmVubywKICAgIGluX2FwcDogZmlsZW5hbWUgPyBmaWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUpIDogdW5kZWZpbmVkLAogIH0pOwp9CgovKioKICogVGhpcyBzZXJ2ZXMgYXMgYSBidWlsZCB0aW1lIGZsYWcgdGhhdCB3aWxsIGJlIHRydWUgYnkgZGVmYXVsdCwgYnV0IGZhbHNlIGluIG5vbi1kZWJ1ZyBidWlsZHMgb3IgaWYgdXNlcnMgcmVwbGFjZSBgX19TRU5UUllfREVCVUdfX2AgaW4gdGhlaXIgZ2VuZXJhdGVkIGNvZGUuCiAqCiAqIEFUVEVOVElPTjogVGhpcyBjb25zdGFudCBtdXN0IG5ldmVyIGNyb3NzIHBhY2thZ2UgYm91bmRhcmllcyAoaS5lLiBiZSBleHBvcnRlZCkgdG8gZ3VhcmFudGVlIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIHRyZWUgc2hha2luZy4KICovCmNvbnN0IERFQlVHX0JVSUxEID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTsKCi8qKgogKiBDcmVhdGVzIGEgbmV3IGBTZXNzaW9uYCBvYmplY3QgYnkgc2V0dGluZyBjZXJ0YWluIGRlZmF1bHQgcGFyYW1ldGVycy4gSWYgb3B0aW9uYWwgQHBhcmFtIGNvbnRleHQKICogaXMgcGFzc2VkLCB0aGUgcGFzc2VkIHByb3BlcnRpZXMgYXJlIGFwcGxpZWQgdG8gdGhlIHNlc3Npb24gb2JqZWN0LgogKgogKiBAcGFyYW0gY29udGV4dCAob3B0aW9uYWwpIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhcHBsaWVkIHRvIHRoZSByZXR1cm5lZCBzZXNzaW9uIG9iamVjdAogKgogKiBAcmV0dXJucyBhIG5ldyBgU2Vzc2lvbmAgb2JqZWN0CiAqLwpmdW5jdGlvbiBtYWtlU2Vzc2lvbihjb250ZXh0KSB7CiAgLy8gQm90aCB0aW1lc3RhbXAgYW5kIHN0YXJ0ZWQgYXJlIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2guCiAgY29uc3Qgc3RhcnRpbmdUaW1lID0gdGltZXN0YW1wSW5TZWNvbmRzKCk7CgogIGNvbnN0IHNlc3Npb24gPSB7CiAgICBzaWQ6IHV1aWQ0KCksCiAgICBpbml0OiB0cnVlLAogICAgdGltZXN0YW1wOiBzdGFydGluZ1RpbWUsCiAgICBzdGFydGVkOiBzdGFydGluZ1RpbWUsCiAgICBkdXJhdGlvbjogMCwKICAgIHN0YXR1czogJ29rJywKICAgIGVycm9yczogMCwKICAgIGlnbm9yZUR1cmF0aW9uOiBmYWxzZSwKICAgIHRvSlNPTjogKCkgPT4gc2Vzc2lvblRvSlNPTihzZXNzaW9uKSwKICB9OwoKICBpZiAoY29udGV4dCkgewogICAgdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0KTsKICB9CgogIHJldHVybiBzZXNzaW9uOwp9CgovKioKICogVXBkYXRlcyBhIHNlc3Npb24gb2JqZWN0IHdpdGggdGhlIHByb3BlcnRpZXMgcGFzc2VkIGluIHRoZSBjb250ZXh0LgogKgogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBtdXRhdGVzIHRoZSBwYXNzZWQgb2JqZWN0IGFuZCByZXR1cm5zIHZvaWQuCiAqIChIYWQgdG8gZG8gdGhpcyBpbnN0ZWFkIG9mIHJldHVybmluZyBhIG5ldyBhbmQgdXBkYXRlZCBzZXNzaW9uIGJlY2F1c2UgY2xvc2luZyBhbmQgc2VuZGluZyBhIHNlc3Npb24KICogbWFrZXMgYW4gdXBkYXRlIHRvIHRoZSBzZXNzaW9uIGFmdGVyIGl0IHdhcyBwYXNzZWQgdG8gdGhlIHNlbmRpbmcgbG9naWMuCiAqIEBzZWUgQmFzZUNsaWVudC5jYXB0dXJlU2Vzc2lvbiApCiAqCiAqIEBwYXJhbSBzZXNzaW9uIHRoZSBgU2Vzc2lvbmAgdG8gdXBkYXRlCiAqIEBwYXJhbSBjb250ZXh0IHRoZSBgU2Vzc2lvbkNvbnRleHRgIGhvbGRpbmcgdGhlIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmUgdXBkYXRlZCBpbiBAcGFyYW0gc2Vzc2lvbgogKi8KLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHkKZnVuY3Rpb24gdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0ID0ge30pIHsKICBpZiAoY29udGV4dC51c2VyKSB7CiAgICBpZiAoIXNlc3Npb24uaXBBZGRyZXNzICYmIGNvbnRleHQudXNlci5pcF9hZGRyZXNzKSB7CiAgICAgIHNlc3Npb24uaXBBZGRyZXNzID0gY29udGV4dC51c2VyLmlwX2FkZHJlc3M7CiAgICB9CgogICAgaWYgKCFzZXNzaW9uLmRpZCAmJiAhY29udGV4dC5kaWQpIHsKICAgICAgc2Vzc2lvbi5kaWQgPSBjb250ZXh0LnVzZXIuaWQgfHwgY29udGV4dC51c2VyLmVtYWlsIHx8IGNvbnRleHQudXNlci51c2VybmFtZTsKICAgIH0KICB9CgogIHNlc3Npb24udGltZXN0YW1wID0gY29udGV4dC50aW1lc3RhbXAgfHwgdGltZXN0YW1wSW5TZWNvbmRzKCk7CgogIGlmIChjb250ZXh0LmFibm9ybWFsX21lY2hhbmlzbSkgewogICAgc2Vzc2lvbi5hYm5vcm1hbF9tZWNoYW5pc20gPSBjb250ZXh0LmFibm9ybWFsX21lY2hhbmlzbTsKICB9CgogIGlmIChjb250ZXh0Lmlnbm9yZUR1cmF0aW9uKSB7CiAgICBzZXNzaW9uLmlnbm9yZUR1cmF0aW9uID0gY29udGV4dC5pZ25vcmVEdXJhdGlvbjsKICB9CiAgaWYgKGNvbnRleHQuc2lkKSB7CiAgICAvLyBHb29kIGVub3VnaCB1dWlkIHZhbGlkYXRpb24uIOKAlCBLYW1pbAogICAgc2Vzc2lvbi5zaWQgPSBjb250ZXh0LnNpZC5sZW5ndGggPT09IDMyID8gY29udGV4dC5zaWQgOiB1dWlkNCgpOwogIH0KICBpZiAoY29udGV4dC5pbml0ICE9PSB1bmRlZmluZWQpIHsKICAgIHNlc3Npb24uaW5pdCA9IGNvbnRleHQuaW5pdDsKICB9CiAgaWYgKCFzZXNzaW9uLmRpZCAmJiBjb250ZXh0LmRpZCkgewogICAgc2Vzc2lvbi5kaWQgPSBgJHtjb250ZXh0LmRpZH1gOwogIH0KICBpZiAodHlwZW9mIGNvbnRleHQuc3RhcnRlZCA9PT0gJ251bWJlcicpIHsKICAgIHNlc3Npb24uc3RhcnRlZCA9IGNvbnRleHQuc3RhcnRlZDsKICB9CiAgaWYgKHNlc3Npb24uaWdub3JlRHVyYXRpb24pIHsKICAgIHNlc3Npb24uZHVyYXRpb24gPSB1bmRlZmluZWQ7CiAgfSBlbHNlIGlmICh0eXBlb2YgY29udGV4dC5kdXJhdGlvbiA9PT0gJ251bWJlcicpIHsKICAgIHNlc3Npb24uZHVyYXRpb24gPSBjb250ZXh0LmR1cmF0aW9uOwogIH0gZWxzZSB7CiAgICBjb25zdCBkdXJhdGlvbiA9IHNlc3Npb24udGltZXN0YW1wIC0gc2Vzc2lvbi5zdGFydGVkOwogICAgc2Vzc2lvbi5kdXJhdGlvbiA9IGR1cmF0aW9uID49IDAgPyBkdXJhdGlvbiA6IDA7CiAgfQogIGlmIChjb250ZXh0LnJlbGVhc2UpIHsKICAgIHNlc3Npb24ucmVsZWFzZSA9IGNvbnRleHQucmVsZWFzZTsKICB9CiAgaWYgKGNvbnRleHQuZW52aXJvbm1lbnQpIHsKICAgIHNlc3Npb24uZW52aXJvbm1lbnQgPSBjb250ZXh0LmVudmlyb25tZW50OwogIH0KICBpZiAoIXNlc3Npb24uaXBBZGRyZXNzICYmIGNvbnRleHQuaXBBZGRyZXNzKSB7CiAgICBzZXNzaW9uLmlwQWRkcmVzcyA9IGNvbnRleHQuaXBBZGRyZXNzOwogIH0KICBpZiAoIXNlc3Npb24udXNlckFnZW50ICYmIGNvbnRleHQudXNlckFnZW50KSB7CiAgICBzZXNzaW9uLnVzZXJBZ2VudCA9IGNvbnRleHQudXNlckFnZW50OwogIH0KICBpZiAodHlwZW9mIGNvbnRleHQuZXJyb3JzID09PSAnbnVtYmVyJykgewogICAgc2Vzc2lvbi5lcnJvcnMgPSBjb250ZXh0LmVycm9yczsKICB9CiAgaWYgKGNvbnRleHQuc3RhdHVzKSB7CiAgICBzZXNzaW9uLnN0YXR1cyA9IGNvbnRleHQuc3RhdHVzOwogIH0KfQoKLyoqCiAqIFNlcmlhbGl6ZXMgYSBwYXNzZWQgc2Vzc2lvbiBvYmplY3QgdG8gYSBKU09OIG9iamVjdCB3aXRoIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHN0cnVjdHVyZS4KICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgU2VudHJ5IGJhY2tlbmQgcmVxdWlyZXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgc2NoZW1hIG9mIGEgc2Vzc2lvbgogKiB0aGFuIHRoZSBvbmUgdGhlIEpTIFNES3MgdXNlIGludGVybmFsbHkuCiAqCiAqIEBwYXJhbSBzZXNzaW9uIHRoZSBzZXNzaW9uIHRvIGJlIGNvbnZlcnRlZAogKgogKiBAcmV0dXJucyBhIEpTT04gb2JqZWN0IG9mIHRoZSBwYXNzZWQgc2Vzc2lvbgogKi8KZnVuY3Rpb24gc2Vzc2lvblRvSlNPTihzZXNzaW9uKSB7CiAgcmV0dXJuIGRyb3BVbmRlZmluZWRLZXlzKHsKICAgIHNpZDogYCR7c2Vzc2lvbi5zaWR9YCwKICAgIGluaXQ6IHNlc3Npb24uaW5pdCwKICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHNlYyBpcyBjb252ZXJ0ZWQgdG8gbXMgZm9yIGRhdGUgY29uc3RydWN0b3IKICAgIHN0YXJ0ZWQ6IG5ldyBEYXRlKHNlc3Npb24uc3RhcnRlZCAqIDEwMDApLnRvSVNPU3RyaW5nKCksCiAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKHNlc3Npb24udGltZXN0YW1wICogMTAwMCkudG9JU09TdHJpbmcoKSwKICAgIHN0YXR1czogc2Vzc2lvbi5zdGF0dXMsCiAgICBlcnJvcnM6IHNlc3Npb24uZXJyb3JzLAogICAgZGlkOiB0eXBlb2Ygc2Vzc2lvbi5kaWQgPT09ICdudW1iZXInIHx8IHR5cGVvZiBzZXNzaW9uLmRpZCA9PT0gJ3N0cmluZycgPyBgJHtzZXNzaW9uLmRpZH1gIDogdW5kZWZpbmVkLAogICAgZHVyYXRpb246IHNlc3Npb24uZHVyYXRpb24sCiAgICBhYm5vcm1hbF9tZWNoYW5pc206IHNlc3Npb24uYWJub3JtYWxfbWVjaGFuaXNtLAogICAgYXR0cnM6IHsKICAgICAgcmVsZWFzZTogc2Vzc2lvbi5yZWxlYXNlLAogICAgICBlbnZpcm9ubWVudDogc2Vzc2lvbi5lbnZpcm9ubWVudCwKICAgICAgaXBfYWRkcmVzczogc2Vzc2lvbi5pcEFkZHJlc3MsCiAgICAgIHVzZXJfYWdlbnQ6IHNlc3Npb24udXNlckFnZW50LAogICAgfSwKICB9KTsKfQoKLyoqCiAqIEFwcGx5IFNka0luZm8gKG5hbWUsIHZlcnNpb24sIHBhY2thZ2VzLCBpbnRlZ3JhdGlvbnMpIHRvIHRoZSBjb3JyZXNwb25kaW5nIGV2ZW50IGtleS4KICogTWVyZ2Ugd2l0aCBleGlzdGluZyBkYXRhIGlmIGFueS4KICoqLwpmdW5jdGlvbiBlbmhhbmNlRXZlbnRXaXRoU2RrSW5mbyhldmVudCwgc2RrSW5mbykgewogIGlmICghc2RrSW5mbykgewogICAgcmV0dXJuIGV2ZW50OwogIH0KICBldmVudC5zZGsgPSBldmVudC5zZGsgfHwge307CiAgZXZlbnQuc2RrLm5hbWUgPSBldmVudC5zZGsubmFtZSB8fCBzZGtJbmZvLm5hbWU7CiAgZXZlbnQuc2RrLnZlcnNpb24gPSBldmVudC5zZGsudmVyc2lvbiB8fCBzZGtJbmZvLnZlcnNpb247CiAgZXZlbnQuc2RrLmludGVncmF0aW9ucyA9IFsuLi4oZXZlbnQuc2RrLmludGVncmF0aW9ucyB8fCBbXSksIC4uLihzZGtJbmZvLmludGVncmF0aW9ucyB8fCBbXSldOwogIGV2ZW50LnNkay5wYWNrYWdlcyA9IFsuLi4oZXZlbnQuc2RrLnBhY2thZ2VzIHx8IFtdKSwgLi4uKHNka0luZm8ucGFja2FnZXMgfHwgW10pXTsKICByZXR1cm4gZXZlbnQ7Cn0KCi8qKiBDcmVhdGVzIGFuIGVudmVsb3BlIGZyb20gYSBTZXNzaW9uICovCmZ1bmN0aW9uIGNyZWF0ZVNlc3Npb25FbnZlbG9wZSgKICBzZXNzaW9uLAogIGRzbiwKICBtZXRhZGF0YSwKICB0dW5uZWwsCikgewogIGNvbnN0IHNka0luZm8gPSBnZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyKG1ldGFkYXRhKTsKICBjb25zdCBlbnZlbG9wZUhlYWRlcnMgPSB7CiAgICBzZW50X2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksCiAgICAuLi4oc2RrSW5mbyAmJiB7IHNkazogc2RrSW5mbyB9KSwKICAgIC4uLighIXR1bm5lbCAmJiBkc24gJiYgeyBkc246IGRzblRvU3RyaW5nKGRzbikgfSksCiAgfTsKCiAgY29uc3QgZW52ZWxvcGVJdGVtID0KICAgICdhZ2dyZWdhdGVzJyBpbiBzZXNzaW9uID8gW3sgdHlwZTogJ3Nlc3Npb25zJyB9LCBzZXNzaW9uXSA6IFt7IHR5cGU6ICdzZXNzaW9uJyB9LCBzZXNzaW9uLnRvSlNPTigpXTsKCiAgcmV0dXJuIGNyZWF0ZUVudmVsb3BlKGVudmVsb3BlSGVhZGVycywgW2VudmVsb3BlSXRlbV0pOwp9CgovKioKICogQ3JlYXRlIGFuIEVudmVsb3BlIGZyb20gYW4gZXZlbnQuCiAqLwpmdW5jdGlvbiBjcmVhdGVFdmVudEVudmVsb3BlKAogIGV2ZW50LAogIGRzbiwKICBtZXRhZGF0YSwKICB0dW5uZWwsCikgewogIGNvbnN0IHNka0luZm8gPSBnZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyKG1ldGFkYXRhKTsKCiAgLyoKICAgIE5vdGU6IER1ZSB0byBUUywgZXZlbnQudHlwZSBtYXkgYmUgYHJlcGxheV9ldmVudGAsIHRoZW9yZXRpY2FsbHkuCiAgICBJbiBwcmFjdGljZSwgd2UgbmV2ZXIgY2FsbCBgY3JlYXRlRXZlbnRFbnZlbG9wZWAgd2l0aCBgcmVwbGF5X2V2ZW50YCB0eXBlLAogICAgYW5kIHdlJ2QgaGF2ZSB0byBhZGp1dCBhIGxvb290IG9mIHR5cGVzIHRvIG1ha2UgdGhpcyB3b3JrIHByb3Blcmx5LgogICAgV2Ugd2FudCB0byBhdm9pZCBjYXN0aW5nIHRoaXMgYXJvdW5kLCBhcyB0aGF0IGNvdWxkIGxlYWQgdG8gYnVncyAoZS5nLiB3aGVuIHdlIGFkZCBhbm90aGVyIHR5cGUpCiAgICBTbyB0aGUgc2FmZSBjaG9pY2UgaXMgdG8gcmVhbGx5IGd1YXJkIGFnYWluc3QgdGhlIHJlcGxheV9ldmVudCB0eXBlIGhlcmUuCiAgKi8KICBjb25zdCBldmVudFR5cGUgPSBldmVudC50eXBlICYmIGV2ZW50LnR5cGUgIT09ICdyZXBsYXlfZXZlbnQnID8gZXZlbnQudHlwZSA6ICdldmVudCc7CgogIGVuaGFuY2VFdmVudFdpdGhTZGtJbmZvKGV2ZW50LCBtZXRhZGF0YSAmJiBtZXRhZGF0YS5zZGspOwoKICBjb25zdCBlbnZlbG9wZUhlYWRlcnMgPSBjcmVhdGVFdmVudEVudmVsb3BlSGVhZGVycyhldmVudCwgc2RrSW5mbywgdHVubmVsLCBkc24pOwoKICAvLyBQcmV2ZW50IHRoaXMgZGF0YSAod2hpY2gsIGlmIGl0IGV4aXN0cywgd2FzIHVzZWQgaW4gZWFybGllciBzdGVwcyBpbiB0aGUgcHJvY2Vzc2luZyBwaXBlbGluZSkgZnJvbSBiZWluZyBzZW50IHRvCiAgLy8gc2VudHJ5LiAoTm90ZTogT3VyIHVzZSBvZiB0aGlzIHByb3BlcnR5IGNvbWVzIGFuZCBnb2VzIHdpdGggd2hhdGV2ZXIgd2UgbWlnaHQgYmUgZGVidWdnaW5nLCB3aGF0ZXZlciBoYWNrcyB3ZSBtYXkKICAvLyBoYXZlIHRlbXBvcmFyaWx5IGFkZGVkLCBldGMuIEV2ZW4gaWYgd2UgZG9uJ3QgaGFwcGVuIHRvIGJlIHVzaW5nIGl0IGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwgbGV0J3Mgbm90IGdldCByaWQKICAvLyBvZiB0aGlzIGBkZWxldGVgLCBsZXN0IHdlIG1pc3MgcHV0dGluZyBpdCBiYWNrIGluIHRoZSBuZXh0IHRpbWUgdGhlIHByb3BlcnR5IGlzIGluIHVzZS4pCiAgZGVsZXRlIGV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YTsKCiAgY29uc3QgZXZlbnRJdGVtID0gW3sgdHlwZTogZXZlbnRUeXBlIH0sIGV2ZW50XTsKICByZXR1cm4gY3JlYXRlRW52ZWxvcGUoZW52ZWxvcGVIZWFkZXJzLCBbZXZlbnRJdGVtXSk7Cn0KCmNvbnN0IFNFTlRSWV9BUElfVkVSU0lPTiA9ICc3JzsKCi8qKiBSZXR1cm5zIHRoZSBwcmVmaXggdG8gY29uc3RydWN0IFNlbnRyeSBpbmdlc3Rpb24gQVBJIGVuZHBvaW50cy4gKi8KZnVuY3Rpb24gZ2V0QmFzZUFwaUVuZHBvaW50KGRzbikgewogIGNvbnN0IHByb3RvY29sID0gZHNuLnByb3RvY29sID8gYCR7ZHNuLnByb3RvY29sfTpgIDogJyc7CiAgY29uc3QgcG9ydCA9IGRzbi5wb3J0ID8gYDoke2Rzbi5wb3J0fWAgOiAnJzsKICByZXR1cm4gYCR7cHJvdG9jb2x9Ly8ke2Rzbi5ob3N0fSR7cG9ydH0ke2Rzbi5wYXRoID8gYC8ke2Rzbi5wYXRofWAgOiAnJ30vYXBpL2A7Cn0KCi8qKiBSZXR1cm5zIHRoZSBpbmdlc3QgQVBJIGVuZHBvaW50IGZvciB0YXJnZXQuICovCmZ1bmN0aW9uIF9nZXRJbmdlc3RFbmRwb2ludChkc24pIHsKICByZXR1cm4gYCR7Z2V0QmFzZUFwaUVuZHBvaW50KGRzbil9JHtkc24ucHJvamVjdElkfS9lbnZlbG9wZS9gOwp9CgovKiogUmV0dXJucyBhIFVSTC1lbmNvZGVkIHN0cmluZyB3aXRoIGF1dGggY29uZmlnIHN1aXRhYmxlIGZvciBhIHF1ZXJ5IHN0cmluZy4gKi8KZnVuY3Rpb24gX2VuY29kZWRBdXRoKGRzbiwgc2RrSW5mbykgewogIHJldHVybiB1cmxFbmNvZGUoewogICAgLy8gV2Ugc2VuZCBvbmx5IHRoZSBtaW5pbXVtIHNldCBvZiByZXF1aXJlZCBpbmZvcm1hdGlvbi4gU2VlCiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8yNTcyLgogICAgc2VudHJ5X2tleTogZHNuLnB1YmxpY0tleSwKICAgIHNlbnRyeV92ZXJzaW9uOiBTRU5UUllfQVBJX1ZFUlNJT04sCiAgICAuLi4oc2RrSW5mbyAmJiB7IHNlbnRyeV9jbGllbnQ6IGAke3Nka0luZm8ubmFtZX0vJHtzZGtJbmZvLnZlcnNpb259YCB9KSwKICB9KTsKfQoKLyoqCiAqIFJldHVybnMgdGhlIGVudmVsb3BlIGVuZHBvaW50IFVSTCB3aXRoIGF1dGggaW4gdGhlIHF1ZXJ5IHN0cmluZy4KICoKICogU2VuZGluZyBhdXRoIGFzIHBhcnQgb2YgdGhlIHF1ZXJ5IHN0cmluZyBhbmQgbm90IGFzIGN1c3RvbSBIVFRQIGhlYWRlcnMgYXZvaWRzIENPUlMgcHJlZmxpZ2h0IHJlcXVlc3RzLgogKi8KZnVuY3Rpb24gZ2V0RW52ZWxvcGVFbmRwb2ludFdpdGhVcmxFbmNvZGVkQXV0aCgKICBkc24sCiAgLy8gVE9ETyAodjgpOiBSZW1vdmUgYHR1bm5lbE9yT3B0aW9uc2AgaW4gZmF2b3Igb2YgYG9wdGlvbnNgLCBhbmQgdXNlIHRoZSBzdWJzdGl0dXRlIGNvZGUgYmVsb3cKICAvLyBvcHRpb25zOiBDbGllbnRPcHRpb25zID0ge30gYXMgQ2xpZW50T3B0aW9ucywKICB0dW5uZWxPck9wdGlvbnMgPSB7fSAsCikgewogIC8vIFRPRE8gKHY4KTogVXNlIHRoaXMgY29kZSBpbnN0ZWFkCiAgLy8gY29uc3QgeyB0dW5uZWwsIF9tZXRhZGF0YSA9IHt9IH0gPSBvcHRpb25zOwogIC8vIHJldHVybiB0dW5uZWwgPyB0dW5uZWwgOiBgJHtfZ2V0SW5nZXN0RW5kcG9pbnQoZHNuKX0/JHtfZW5jb2RlZEF1dGgoZHNuLCBfbWV0YWRhdGEuc2RrKX1gOwoKICBjb25zdCB0dW5uZWwgPSB0eXBlb2YgdHVubmVsT3JPcHRpb25zID09PSAnc3RyaW5nJyA/IHR1bm5lbE9yT3B0aW9ucyA6IHR1bm5lbE9yT3B0aW9ucy50dW5uZWw7CiAgY29uc3Qgc2RrSW5mbyA9CiAgICB0eXBlb2YgdHVubmVsT3JPcHRpb25zID09PSAnc3RyaW5nJyB8fCAhdHVubmVsT3JPcHRpb25zLl9tZXRhZGF0YSA/IHVuZGVmaW5lZCA6IHR1bm5lbE9yT3B0aW9ucy5fbWV0YWRhdGEuc2RrOwoKICByZXR1cm4gdHVubmVsID8gdHVubmVsIDogYCR7X2dldEluZ2VzdEVuZHBvaW50KGRzbil9PyR7X2VuY29kZWRBdXRoKGRzbiwgc2RrSW5mbyl9YDsKfQoKY29uc3QgREVGQVVMVF9UUkFOU1BPUlRfQlVGRkVSX1NJWkUgPSAzMDsKCi8qKgogKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIGEgU2VudHJ5IGBUcmFuc3BvcnRgCiAqCiAqIEBwYXJhbSBvcHRpb25zCiAqIEBwYXJhbSBtYWtlUmVxdWVzdAogKi8KZnVuY3Rpb24gY3JlYXRlVHJhbnNwb3J0KAogIG9wdGlvbnMsCiAgbWFrZVJlcXVlc3QsCiAgYnVmZmVyID0gbWFrZVByb21pc2VCdWZmZXIoCiAgICBvcHRpb25zLmJ1ZmZlclNpemUgfHwgREVGQVVMVF9UUkFOU1BPUlRfQlVGRkVSX1NJWkUsCiAgKSwKKSB7CiAgbGV0IHJhdGVMaW1pdHMgPSB7fTsKICBjb25zdCBmbHVzaCA9ICh0aW1lb3V0KSA9PiBidWZmZXIuZHJhaW4odGltZW91dCk7CgogIGZ1bmN0aW9uIHNlbmQoZW52ZWxvcGUpIHsKICAgIGNvbnN0IGZpbHRlcmVkRW52ZWxvcGVJdGVtcyA9IFtdOwoKICAgIC8vIERyb3AgcmF0ZSBsaW1pdGVkIGl0ZW1zIGZyb20gZW52ZWxvcGUKICAgIGZvckVhY2hFbnZlbG9wZUl0ZW0oZW52ZWxvcGUsIChpdGVtLCB0eXBlKSA9PiB7CiAgICAgIGNvbnN0IGVudmVsb3BlSXRlbURhdGFDYXRlZ29yeSA9IGVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSh0eXBlKTsKICAgICAgaWYgKGlzUmF0ZUxpbWl0ZWQocmF0ZUxpbWl0cywgZW52ZWxvcGVJdGVtRGF0YUNhdGVnb3J5KSkgewogICAgICAgIGNvbnN0IGV2ZW50ID0gZ2V0RXZlbnRGb3JFbnZlbG9wZUl0ZW0oaXRlbSwgdHlwZSk7CiAgICAgICAgb3B0aW9ucy5yZWNvcmREcm9wcGVkRXZlbnQoJ3JhdGVsaW1pdF9iYWNrb2ZmJywgZW52ZWxvcGVJdGVtRGF0YUNhdGVnb3J5LCBldmVudCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZmlsdGVyZWRFbnZlbG9wZUl0ZW1zLnB1c2goaXRlbSk7CiAgICAgIH0KICAgIH0pOwoKICAgIC8vIFNraXAgc2VuZGluZyBpZiBlbnZlbG9wZSBpcyBlbXB0eSBhZnRlciBmaWx0ZXJpbmcgb3V0IHJhdGUgbGltaXRlZCBldmVudHMKICAgIGlmIChmaWx0ZXJlZEVudmVsb3BlSXRlbXMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiByZXNvbHZlZFN5bmNQcm9taXNlKCk7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkKICAgIGNvbnN0IGZpbHRlcmVkRW52ZWxvcGUgPSBjcmVhdGVFbnZlbG9wZShlbnZlbG9wZVswXSwgZmlsdGVyZWRFbnZlbG9wZUl0ZW1zICk7CgogICAgLy8gQ3JlYXRlcyBjbGllbnQgcmVwb3J0IGZvciBlYWNoIGl0ZW0gaW4gYW4gZW52ZWxvcGUKICAgIGNvbnN0IHJlY29yZEVudmVsb3BlTG9zcyA9IChyZWFzb24pID0+IHsKICAgICAgZm9yRWFjaEVudmVsb3BlSXRlbShmaWx0ZXJlZEVudmVsb3BlLCAoaXRlbSwgdHlwZSkgPT4gewogICAgICAgIGNvbnN0IGV2ZW50ID0gZ2V0RXZlbnRGb3JFbnZlbG9wZUl0ZW0oaXRlbSwgdHlwZSk7CiAgICAgICAgb3B0aW9ucy5yZWNvcmREcm9wcGVkRXZlbnQocmVhc29uLCBlbnZlbG9wZUl0ZW1UeXBlVG9EYXRhQ2F0ZWdvcnkodHlwZSksIGV2ZW50KTsKICAgICAgfSk7CiAgICB9OwoKICAgIGNvbnN0IHJlcXVlc3RUYXNrID0gKCkgPT4KICAgICAgbWFrZVJlcXVlc3QoeyBib2R5OiBzZXJpYWxpemVFbnZlbG9wZShmaWx0ZXJlZEVudmVsb3BlLCBvcHRpb25zLnRleHRFbmNvZGVyKSB9KS50aGVuKAogICAgICAgIHJlc3BvbnNlID0+IHsKICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gdGhyb3cgb24gTk9LIHJlc3BvbnNlcywgYnV0IHdlIHdhbnQgdG8gYXQgbGVhc3QgbG9nIHRoZW0KICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9PSB1bmRlZmluZWQgJiYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgPCAyMDAgfHwgcmVzcG9uc2Uuc3RhdHVzQ29kZSA+PSAzMDApKSB7CiAgICAgICAgICAgIERFQlVHX0JVSUxEICYmIGxvZ2dlci53YXJuKGBTZW50cnkgcmVzcG9uZGVkIHdpdGggc3RhdHVzIGNvZGUgJHtyZXNwb25zZS5zdGF0dXNDb2RlfSB0byBzZW50IGV2ZW50LmApOwogICAgICAgICAgfQoKICAgICAgICAgIHJhdGVMaW1pdHMgPSB1cGRhdGVSYXRlTGltaXRzKHJhdGVMaW1pdHMsIHJlc3BvbnNlKTsKICAgICAgICAgIHJldHVybiByZXNwb25zZTsKICAgICAgICB9LAogICAgICAgIGVycm9yID0+IHsKICAgICAgICAgIHJlY29yZEVudmVsb3BlTG9zcygnbmV0d29ya19lcnJvcicpOwogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgfSwKICAgICAgKTsKCiAgICByZXR1cm4gYnVmZmVyLmFkZChyZXF1ZXN0VGFzaykudGhlbigKICAgICAgcmVzdWx0ID0+IHJlc3VsdCwKICAgICAgZXJyb3IgPT4gewogICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFNlbnRyeUVycm9yKSB7CiAgICAgICAgICBERUJVR19CVUlMRCAmJiBsb2dnZXIuZXJyb3IoJ1NraXBwZWQgc2VuZGluZyBldmVudCBiZWNhdXNlIGJ1ZmZlciBpcyBmdWxsLicpOwogICAgICAgICAgcmVjb3JkRW52ZWxvcGVMb3NzKCdxdWV1ZV9vdmVyZmxvdycpOwogICAgICAgICAgcmV0dXJuIHJlc29sdmVkU3luY1Byb21pc2UoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgfQogICAgICB9LAogICAgKTsKICB9CgogIC8vIFdlIHVzZSB0aGlzIHRvIGlkZW50aWZpZnkgaWYgdGhlIHRyYW5zcG9ydCBpcyB0aGUgYmFzZSB0cmFuc3BvcnQKICAvLyBUT0RPICh2OCk6IFJlbW92ZSB0aGlzIGFnYWluIGFzIHdlJ2xsIG5vIGxvbmdlciBuZWVkIGl0CiAgc2VuZC5fX3NlbnRyeV9fYmFzZVRyYW5zcG9ydF9fID0gdHJ1ZTsKCiAgcmV0dXJuIHsKICAgIHNlbmQsCiAgICBmbHVzaCwKICB9Owp9CgpmdW5jdGlvbiBnZXRFdmVudEZvckVudmVsb3BlSXRlbShpdGVtLCB0eXBlKSB7CiAgaWYgKHR5cGUgIT09ICdldmVudCcgJiYgdHlwZSAhPT0gJ3RyYW5zYWN0aW9uJykgewogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CgogIHJldHVybiBBcnJheS5pc0FycmF5KGl0ZW0pID8gKGl0ZW0gKVsxXSA6IHVuZGVmaW5lZDsKfQoKLyoqIG5vcm1hbGl6ZXMgV2luZG93cyBwYXRocyAqLwpmdW5jdGlvbiBub3JtYWxpemVXaW5kb3dzUGF0aChwYXRoKSB7CiAgcmV0dXJuIHBhdGgKICAgIC5yZXBsYWNlKC9eW0EtWl06LywgJycpIC8vIHJlbW92ZSBXaW5kb3dzLXN0eWxlIHByZWZpeAogICAgLnJlcGxhY2UoL1xcL2csICcvJyk7IC8vIHJlcGxhY2UgYWxsIGBcYCBpbnN0YW5jZXMgd2l0aCBgL2AKfQoKLyoqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgdGhlIG1vZHVsZSBuYW1lIGZyb20gYSBmaWxlbmFtZSAqLwpmdW5jdGlvbiBjcmVhdGVHZXRNb2R1bGVGcm9tRmlsZW5hbWUoCiAgYmFzZVBhdGggPSBwcm9jZXNzLmFyZ3ZbMV0gPyBkaXJuYW1lKHByb2Nlc3MuYXJndlsxXSkgOiBwcm9jZXNzLmN3ZCgpLAogIGlzV2luZG93cyA9IHNlcCA9PT0gJ1xcJywKKSB7CiAgY29uc3Qgbm9ybWFsaXplZEJhc2UgPSBpc1dpbmRvd3MgPyBub3JtYWxpemVXaW5kb3dzUGF0aChiYXNlUGF0aCkgOiBiYXNlUGF0aDsKCiAgcmV0dXJuIChmaWxlbmFtZSkgPT4gewogICAgaWYgKCFmaWxlbmFtZSkgewogICAgICByZXR1cm47CiAgICB9CgogICAgY29uc3Qgbm9ybWFsaXplZEZpbGVuYW1lID0gaXNXaW5kb3dzID8gbm9ybWFsaXplV2luZG93c1BhdGgoZmlsZW5hbWUpIDogZmlsZW5hbWU7CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdAogICAgbGV0IHsgZGlyLCBiYXNlOiBmaWxlLCBleHQgfSA9IHBvc2l4LnBhcnNlKG5vcm1hbGl6ZWRGaWxlbmFtZSk7CgogICAgaWYgKGV4dCA9PT0gJy5qcycgfHwgZXh0ID09PSAnLm1qcycgfHwgZXh0ID09PSAnLmNqcycpIHsKICAgICAgZmlsZSA9IGZpbGUuc2xpY2UoMCwgZXh0Lmxlbmd0aCAqIC0xKTsKICAgIH0KCiAgICBpZiAoIWRpcikgewogICAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXIKICAgICAgZGlyID0gJy4nOwogICAgfQoKICAgIGNvbnN0IG4gPSBkaXIubGFzdEluZGV4T2YoJy9ub2RlX21vZHVsZXMnKTsKICAgIGlmIChuID4gLTEpIHsKICAgICAgcmV0dXJuIGAke2Rpci5zbGljZShuICsgMTQpLnJlcGxhY2UoL1wvL2csICcuJyl9OiR7ZmlsZX1gOwogICAgfQoKICAgIC8vIExldCdzIHNlZSBpZiBpdCdzIGEgcGFydCBvZiB0aGUgbWFpbiBtb2R1bGUKICAgIC8vIFRvIGJlIGEgcGFydCBvZiBtYWluIG1vZHVsZSwgaXQgaGFzIHRvIHNoYXJlIHRoZSBzYW1lIGJhc2UKICAgIGlmIChkaXIuc3RhcnRzV2l0aChub3JtYWxpemVkQmFzZSkpIHsKICAgICAgbGV0IG1vZHVsZU5hbWUgPSBkaXIuc2xpY2Uobm9ybWFsaXplZEJhc2UubGVuZ3RoICsgMSkucmVwbGFjZSgvXC8vZywgJy4nKTsKCiAgICAgIGlmIChtb2R1bGVOYW1lKSB7CiAgICAgICAgbW9kdWxlTmFtZSArPSAnOic7CiAgICAgIH0KICAgICAgbW9kdWxlTmFtZSArPSBmaWxlOwoKICAgICAgcmV0dXJuIG1vZHVsZU5hbWU7CiAgICB9CgogICAgcmV0dXJuIGZpbGU7CiAgfTsKfQoKZnVuY3Rpb24gX251bGxpc2hDb2FsZXNjZSQyKGxocywgcmhzRm4pIHsgaWYgKGxocyAhPSBudWxsKSB7IHJldHVybiBsaHM7IH0gZWxzZSB7IHJldHVybiByaHNGbigpOyB9IH0vKioKICogVGhpcyBjb2RlIHdhcyBvcmlnaW5hbGx5IGZvcmtlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9Ub29UYWxsTmF0ZS9wcm94eS1hZ2VudHMvdHJlZS9iMTMzMjk1ZmQxNmY2NDc1NTc4YjZiMTViZDliNGUzM2VjYjBkMGI3CiAqIFdpdGggdGhlIGZvbGxvd2luZyBsaWNlbmNlOgogKgogKiAoVGhlIE1JVCBMaWNlbnNlKQogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTMgTmF0aGFuIFJhamxpY2ggPG5hdGhhbkB0b290YWxsbmF0ZS5uZXQ+KgogKgogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCiAqICdTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAogKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCiAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoqCiAqCiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCiAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLioKICoKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCiAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgogKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCiAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCiAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCiAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCiAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogKi8KCmNvbnN0IElOVEVSTkFMID0gU3ltYm9sKCdBZ2VudEJhc2VJbnRlcm5hbFN0YXRlJyk7CgpjbGFzcyBBZ2VudCBleHRlbmRzIGh0dHAuQWdlbnQgewoKICAvLyBTZXQgYnkgYGh0dHAuQWdlbnRgIC0gbWlzc2luZyBmcm9tIGBAdHlwZXMvbm9kZWAKCiAgY29uc3RydWN0b3Iob3B0cykgewogICAgc3VwZXIob3B0cyk7CiAgICB0aGlzW0lOVEVSTkFMXSA9IHt9OwogIH0KCiAgLyoqCiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhbiBgaHR0cGAgb3IgYGh0dHBzYCByZXF1ZXN0LgogICAqLwogIGlzU2VjdXJlRW5kcG9pbnQob3B0aW9ucykgewogICAgaWYgKG9wdGlvbnMpIHsKICAgICAgLy8gRmlyc3QgY2hlY2sgdGhlIGBzZWN1cmVFbmRwb2ludGAgcHJvcGVydHkgZXhwbGljaXRseSwgc2luY2UgdGhpcwogICAgICAvLyBtZWFucyB0aGF0IGEgcGFyZW50IGBBZ2VudGAgaXMgInBhc3NpbmcgdGhyb3VnaCIgdG8gdGhpcyBpbnN0YW5jZS4KICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcwogICAgICBpZiAodHlwZW9mIChvcHRpb25zICkuc2VjdXJlRW5kcG9pbnQgPT09ICdib29sZWFuJykgewogICAgICAgIHJldHVybiBvcHRpb25zLnNlY3VyZUVuZHBvaW50OwogICAgICB9CgogICAgICAvLyBJZiBubyBleHBsaWNpdCBgc2VjdXJlYCBlbmRwb2ludCwgY2hlY2sgaWYgYHByb3RvY29sYCBwcm9wZXJ0eSBpcwogICAgICAvLyBzZXQuIFRoaXMgd2lsbCB1c3VhbGx5IGJlIHRoZSBjYXNlIHNpbmNlIHVzaW5nIGEgZnVsbCBzdHJpbmcgVVJMCiAgICAgIC8vIG9yIGBVUkxgIGluc3RhbmNlIHNob3VsZCBiZSB0aGUgbW9zdCBjb21tb24gdXNhZ2UuCiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wcm90b2NvbCA9PT0gJ3N0cmluZycpIHsKICAgICAgICByZXR1cm4gb3B0aW9ucy5wcm90b2NvbCA9PT0gJ2h0dHBzOic7CiAgICAgIH0KICAgIH0KCiAgICAvLyBGaW5hbGx5LCBpZiBubyBgcHJvdG9jb2xgIHByb3BlcnR5IHdhcyBzZXQsIHRoZW4gZmFsbCBiYWNrIHRvCiAgICAvLyBjaGVja2luZyB0aGUgc3RhY2sgdHJhY2Ugb2YgdGhlIGN1cnJlbnQgY2FsbCBzdGFjaywgYW5kIHRyeSB0bwogICAgLy8gZGV0ZWN0IHRoZSAiaHR0cHMiIG1vZHVsZS4KICAgIGNvbnN0IHsgc3RhY2sgfSA9IG5ldyBFcnJvcigpOwogICAgaWYgKHR5cGVvZiBzdGFjayAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBzdGFjay5zcGxpdCgnXG4nKS5zb21lKGwgPT4gbC5pbmRleE9mKCcoaHR0cHMuanM6JykgIT09IC0xIHx8IGwuaW5kZXhPZignbm9kZTpodHRwczonKSAhPT0gLTEpOwogIH0KCiAgY3JlYXRlU29ja2V0KHJlcSwgb3B0aW9ucywgY2IpIHsKICAgIGNvbnN0IGNvbm5lY3RPcHRzID0gewogICAgICAuLi5vcHRpb25zLAogICAgICBzZWN1cmVFbmRwb2ludDogdGhpcy5pc1NlY3VyZUVuZHBvaW50KG9wdGlvbnMpLAogICAgfTsKICAgIFByb21pc2UucmVzb2x2ZSgpCiAgICAgIC50aGVuKCgpID0+IHRoaXMuY29ubmVjdChyZXEsIGNvbm5lY3RPcHRzKSkKICAgICAgLnRoZW4oc29ja2V0ID0+IHsKICAgICAgICBpZiAoc29ja2V0IGluc3RhbmNlb2YgaHR0cC5BZ2VudCkgewogICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgYWRkUmVxdWVzdCgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWAKICAgICAgICAgIHJldHVybiBzb2NrZXQuYWRkUmVxdWVzdChyZXEsIGNvbm5lY3RPcHRzKTsKICAgICAgICB9CiAgICAgICAgdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldCA9IHNvY2tldDsKICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBjcmVhdGVTb2NrZXQoKWAgaXNuJ3QgZGVmaW5lZCBpbiBgQHR5cGVzL25vZGVgCiAgICAgICAgc3VwZXIuY3JlYXRlU29ja2V0KHJlcSwgb3B0aW9ucywgY2IpOwogICAgICB9LCBjYik7CiAgfQoKICBjcmVhdGVDb25uZWN0aW9uKCkgewogICAgY29uc3Qgc29ja2V0ID0gdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldDsKICAgIHRoaXNbSU5URVJOQUxdLmN1cnJlbnRTb2NrZXQgPSB1bmRlZmluZWQ7CiAgICBpZiAoIXNvY2tldCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNvY2tldCB3YXMgcmV0dXJuZWQgaW4gdGhlIGBjb25uZWN0KClgIGZ1bmN0aW9uJyk7CiAgICB9CiAgICByZXR1cm4gc29ja2V0OwogIH0KCiAgZ2V0IGRlZmF1bHRQb3J0KCkgewogICAgcmV0dXJuIF9udWxsaXNoQ29hbGVzY2UkMih0aGlzW0lOVEVSTkFMXS5kZWZhdWx0UG9ydCwgKCkgPT4gKCAodGhpcy5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MCkpKTsKICB9CgogIHNldCBkZWZhdWx0UG9ydCh2KSB7CiAgICBpZiAodGhpc1tJTlRFUk5BTF0pIHsKICAgICAgdGhpc1tJTlRFUk5BTF0uZGVmYXVsdFBvcnQgPSB2OwogICAgfQogIH0KCiAgZ2V0IHByb3RvY29sKCkgewogICAgcmV0dXJuIF9udWxsaXNoQ29hbGVzY2UkMih0aGlzW0lOVEVSTkFMXS5wcm90b2NvbCwgKCkgPT4gKCAodGhpcy5pc1NlY3VyZUVuZHBvaW50KCkgPyAnaHR0cHM6JyA6ICdodHRwOicpKSk7CiAgfQoKICBzZXQgcHJvdG9jb2wodikgewogICAgaWYgKHRoaXNbSU5URVJOQUxdKSB7CiAgICAgIHRoaXNbSU5URVJOQUxdLnByb3RvY29sID0gdjsKICAgIH0KICB9Cn0KCmZ1bmN0aW9uIGRlYnVnJDEoLi4uYXJncykgewogIGxvZ2dlci5sb2coJ1todHRwcy1wcm94eS1hZ2VudDpwYXJzZS1wcm94eS1yZXNwb25zZV0nLCAuLi5hcmdzKTsKfQoKZnVuY3Rpb24gcGFyc2VQcm94eVJlc3BvbnNlKHNvY2tldCkgewogIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAvLyB3ZSBuZWVkIHRvIGJ1ZmZlciBhbnkgSFRUUCB0cmFmZmljIHRoYXQgaGFwcGVucyB3aXRoIHRoZSBwcm94eSBiZWZvcmUgd2UgZ2V0CiAgICAvLyB0aGUgQ09OTkVDVCByZXNwb25zZSwgc28gdGhhdCBpZiB0aGUgcmVzcG9uc2UgaXMgYW55dGhpbmcgb3RoZXIgdGhhbiBhbiAiMjAwIgogICAgLy8gcmVzcG9uc2UgY29kZSwgdGhlbiB3ZSBjYW4gcmUtcGxheSB0aGUgImRhdGEiIGV2ZW50cyBvbiB0aGUgc29ja2V0IG9uY2UgdGhlCiAgICAvLyBIVFRQIHBhcnNlciBpcyBob29rZWQgdXAuLi4KICAgIGxldCBidWZmZXJzTGVuZ3RoID0gMDsKICAgIGNvbnN0IGJ1ZmZlcnMgPSBbXTsKCiAgICBmdW5jdGlvbiByZWFkKCkgewogICAgICBjb25zdCBiID0gc29ja2V0LnJlYWQoKTsKICAgICAgaWYgKGIpIG9uZGF0YShiKTsKICAgICAgZWxzZSBzb2NrZXQub25jZSgncmVhZGFibGUnLCByZWFkKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjbGVhbnVwKCkgewogICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKTsKICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpOwogICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ3JlYWRhYmxlJywgcmVhZCk7CiAgICB9CgogICAgZnVuY3Rpb24gb25lbmQoKSB7CiAgICAgIGNsZWFudXAoKTsKICAgICAgZGVidWckMSgnb25lbmQnKTsKICAgICAgcmVqZWN0KG5ldyBFcnJvcignUHJveHkgY29ubmVjdGlvbiBlbmRlZCBiZWZvcmUgcmVjZWl2aW5nIENPTk5FQ1QgcmVzcG9uc2UnKSk7CiAgICB9CgogICAgZnVuY3Rpb24gb25lcnJvcihlcnIpIHsKICAgICAgY2xlYW51cCgpOwogICAgICBkZWJ1ZyQxKCdvbmVycm9yICVvJywgZXJyKTsKICAgICAgcmVqZWN0KGVycik7CiAgICB9CgogICAgZnVuY3Rpb24gb25kYXRhKGIpIHsKICAgICAgYnVmZmVycy5wdXNoKGIpOwogICAgICBidWZmZXJzTGVuZ3RoICs9IGIubGVuZ3RoOwoKICAgICAgY29uc3QgYnVmZmVyZWQgPSBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMsIGJ1ZmZlcnNMZW5ndGgpOwogICAgICBjb25zdCBlbmRPZkhlYWRlcnMgPSBidWZmZXJlZC5pbmRleE9mKCdcclxuXHJcbicpOwoKICAgICAgaWYgKGVuZE9mSGVhZGVycyA9PT0gLTEpIHsKICAgICAgICAvLyBrZWVwIGJ1ZmZlcmluZwogICAgICAgIGRlYnVnJDEoJ2hhdmUgbm90IHJlY2VpdmVkIGVuZCBvZiBIVFRQIGhlYWRlcnMgeWV0Li4uJyk7CiAgICAgICAgcmVhZCgpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgY29uc3QgaGVhZGVyUGFydHMgPSBidWZmZXJlZC5zbGljZSgwLCBlbmRPZkhlYWRlcnMpLnRvU3RyaW5nKCdhc2NpaScpLnNwbGl0KCdcclxuJyk7CiAgICAgIGNvbnN0IGZpcnN0TGluZSA9IGhlYWRlclBhcnRzLnNoaWZ0KCk7CiAgICAgIGlmICghZmlyc3RMaW5lKSB7CiAgICAgICAgc29ja2V0LmRlc3Ryb3koKTsKICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignTm8gaGVhZGVyIHJlY2VpdmVkIGZyb20gcHJveHkgQ09OTkVDVCByZXNwb25zZScpKTsKICAgICAgfQogICAgICBjb25zdCBmaXJzdExpbmVQYXJ0cyA9IGZpcnN0TGluZS5zcGxpdCgnICcpOwogICAgICBjb25zdCBzdGF0dXNDb2RlID0gK2ZpcnN0TGluZVBhcnRzWzFdOwogICAgICBjb25zdCBzdGF0dXNUZXh0ID0gZmlyc3RMaW5lUGFydHMuc2xpY2UoMikuam9pbignICcpOwogICAgICBjb25zdCBoZWFkZXJzID0ge307CiAgICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIGhlYWRlclBhcnRzKSB7CiAgICAgICAgaWYgKCFoZWFkZXIpIGNvbnRpbnVlOwogICAgICAgIGNvbnN0IGZpcnN0Q29sb24gPSBoZWFkZXIuaW5kZXhPZignOicpOwogICAgICAgIGlmIChmaXJzdENvbG9uID09PSAtMSkgewogICAgICAgICAgc29ja2V0LmRlc3Ryb3koKTsKICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKGBJbnZhbGlkIGhlYWRlciBmcm9tIHByb3h5IENPTk5FQ1QgcmVzcG9uc2U6ICIke2hlYWRlcn0iYCkpOwogICAgICAgIH0KICAgICAgICBjb25zdCBrZXkgPSBoZWFkZXIuc2xpY2UoMCwgZmlyc3RDb2xvbikudG9Mb3dlckNhc2UoKTsKICAgICAgICBjb25zdCB2YWx1ZSA9IGhlYWRlci5zbGljZShmaXJzdENvbG9uICsgMSkudHJpbVN0YXJ0KCk7CiAgICAgICAgY29uc3QgY3VycmVudCA9IGhlYWRlcnNba2V5XTsKICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnQgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICBoZWFkZXJzW2tleV0gPSBbY3VycmVudCwgdmFsdWVdOwogICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50KSkgewogICAgICAgICAgY3VycmVudC5wdXNoKHZhbHVlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaGVhZGVyc1trZXldID0gdmFsdWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGRlYnVnJDEoJ2dvdCBwcm94eSBzZXJ2ZXIgcmVzcG9uc2U6ICVvICVvJywgZmlyc3RMaW5lLCBoZWFkZXJzKTsKICAgICAgY2xlYW51cCgpOwogICAgICByZXNvbHZlKHsKICAgICAgICBjb25uZWN0OiB7CiAgICAgICAgICBzdGF0dXNDb2RlLAogICAgICAgICAgc3RhdHVzVGV4dCwKICAgICAgICAgIGhlYWRlcnMsCiAgICAgICAgfSwKICAgICAgICBidWZmZXJlZCwKICAgICAgfSk7CiAgICB9CgogICAgc29ja2V0Lm9uKCdlcnJvcicsIG9uZXJyb3IpOwogICAgc29ja2V0Lm9uKCdlbmQnLCBvbmVuZCk7CgogICAgcmVhZCgpOwogIH0pOwp9CgpmdW5jdGlvbiBfbnVsbGlzaENvYWxlc2NlJDEobGhzLCByaHNGbikgeyBpZiAobGhzICE9IG51bGwpIHsgcmV0dXJuIGxoczsgfSBlbHNlIHsgcmV0dXJuIHJoc0ZuKCk7IH0gfSBmdW5jdGlvbiBfb3B0aW9uYWxDaGFpbiQxKG9wcykgeyBsZXQgbGFzdEFjY2Vzc0xIUyA9IHVuZGVmaW5lZDsgbGV0IHZhbHVlID0gb3BzWzBdOyBsZXQgaSA9IDE7IHdoaWxlIChpIDwgb3BzLmxlbmd0aCkgeyBjb25zdCBvcCA9IG9wc1tpXTsgY29uc3QgZm4gPSBvcHNbaSArIDFdOyBpICs9IDI7IGlmICgob3AgPT09ICdvcHRpb25hbEFjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSAmJiB2YWx1ZSA9PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gaWYgKG9wID09PSAnYWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJykgeyBsYXN0QWNjZXNzTEhTID0gdmFsdWU7IHZhbHVlID0gZm4odmFsdWUpOyB9IGVsc2UgaWYgKG9wID09PSAnY2FsbCcgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSB7IHZhbHVlID0gZm4oKC4uLmFyZ3MpID0+IHZhbHVlLmNhbGwobGFzdEFjY2Vzc0xIUywgLi4uYXJncykpOyBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkOyB9IH0gcmV0dXJuIHZhbHVlOyB9CgpmdW5jdGlvbiBkZWJ1ZyguLi5hcmdzKSB7CiAgbG9nZ2VyLmxvZygnW2h0dHBzLXByb3h5LWFnZW50XScsIC4uLmFyZ3MpOwp9CgovKioKICogVGhlIGBIdHRwc1Byb3h5QWdlbnRgIGltcGxlbWVudHMgYW4gSFRUUCBBZ2VudCBzdWJjbGFzcyB0aGF0IGNvbm5lY3RzIHRvCiAqIHRoZSBzcGVjaWZpZWQgIkhUVFAocykgcHJveHkgc2VydmVyIiBpbiBvcmRlciB0byBwcm94eSBIVFRQUyByZXF1ZXN0cy4KICoKICogT3V0Z29pbmcgSFRUUCByZXF1ZXN0cyBhcmUgZmlyc3QgdHVubmVsZWQgdGhyb3VnaCB0aGUgcHJveHkgc2VydmVyIHVzaW5nIHRoZQogKiBgQ09OTkVDVGAgSFRUUCByZXF1ZXN0IG1ldGhvZCB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBzZXJ2ZXIsCiAqIGFuZCB0aGVuIHRoZSBwcm94eSBzZXJ2ZXIgY29ubmVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIHRhcmdldCBhbmQgaXNzdWVzIHRoZQogKiBIVFRQIHJlcXVlc3QgZnJvbSB0aGUgcHJveHkgc2VydmVyLgogKgogKiBgaHR0cHM6YCByZXF1ZXN0cyBoYXZlIHRoZWlyIHNvY2tldCBjb25uZWN0aW9uIHVwZ3JhZGVkIHRvIFRMUyBvbmNlCiAqIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBzZXJ2ZXIgaGFzIGJlZW4gZXN0YWJsaXNoZWQuCiAqLwpjbGFzcyBIdHRwc1Byb3h5QWdlbnQgZXh0ZW5kcyBBZ2VudCB7CiAgc3RhdGljIF9faW5pdFN0YXRpYygpIHt0aGlzLnByb3RvY29scyA9IFsnaHR0cCcsICdodHRwcyddOyB9CgogIGNvbnN0cnVjdG9yKHByb3h5LCBvcHRzKSB7CiAgICBzdXBlcihvcHRzKTsKICAgIHRoaXMub3B0aW9ucyA9IHt9OwogICAgdGhpcy5wcm94eSA9IHR5cGVvZiBwcm94eSA9PT0gJ3N0cmluZycgPyBuZXcgVVJMKHByb3h5KSA6IHByb3h5OwogICAgdGhpcy5wcm94eUhlYWRlcnMgPSBfbnVsbGlzaENvYWxlc2NlJDEoX29wdGlvbmFsQ2hhaW4kMShbb3B0cywgJ29wdGlvbmFsQWNjZXNzJywgXzIgPT4gXzIuaGVhZGVyc10pLCAoKSA9PiAoIHt9KSk7CiAgICBkZWJ1ZygnQ3JlYXRpbmcgbmV3IEh0dHBzUHJveHlBZ2VudCBpbnN0YW5jZTogJW8nLCB0aGlzLnByb3h5LmhyZWYpOwoKICAgIC8vIFRyaW0gb2ZmIHRoZSBicmFja2V0cyBmcm9tIElQdjYgYWRkcmVzc2VzCiAgICBjb25zdCBob3N0ID0gKHRoaXMucHJveHkuaG9zdG5hbWUgfHwgdGhpcy5wcm94eS5ob3N0KS5yZXBsYWNlKC9eXFt8XF0kL2csICcnKTsKICAgIGNvbnN0IHBvcnQgPSB0aGlzLnByb3h5LnBvcnQgPyBwYXJzZUludCh0aGlzLnByb3h5LnBvcnQsIDEwKSA6IHRoaXMucHJveHkucHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODA7CiAgICB0aGlzLmNvbm5lY3RPcHRzID0gewogICAgICAvLyBBdHRlbXB0IHRvIG5lZ290aWF0ZSBodHRwLzEuMSBmb3IgcHJveHkgc2VydmVycyB0aGF0IHN1cHBvcnQgaHR0cC8yCiAgICAgIEFMUE5Qcm90b2NvbHM6IFsnaHR0cC8xLjEnXSwKICAgICAgLi4uKG9wdHMgPyBvbWl0KG9wdHMsICdoZWFkZXJzJykgOiBudWxsKSwKICAgICAgaG9zdCwKICAgICAgcG9ydCwKICAgIH07CiAgfQoKICAvKioKICAgKiBDYWxsZWQgd2hlbiB0aGUgbm9kZS1jb3JlIEhUVFAgY2xpZW50IGxpYnJhcnkgaXMgY3JlYXRpbmcgYQogICAqIG5ldyBIVFRQIHJlcXVlc3QuCiAgICovCiAgYXN5bmMgY29ubmVjdChyZXEsIG9wdHMpIHsKICAgIGNvbnN0IHsgcHJveHkgfSA9IHRoaXM7CgogICAgaWYgKCFvcHRzLmhvc3QpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gImhvc3QiIHByb3ZpZGVkJyk7CiAgICB9CgogICAgLy8gQ3JlYXRlIGEgc29ja2V0IGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlci4KICAgIGxldCBzb2NrZXQ7CiAgICBpZiAocHJveHkucHJvdG9jb2wgPT09ICdodHRwczonKSB7CiAgICAgIGRlYnVnKCdDcmVhdGluZyBgdGxzLlNvY2tldGA6ICVvJywgdGhpcy5jb25uZWN0T3B0cyk7CiAgICAgIGNvbnN0IHNlcnZlcm5hbWUgPSB0aGlzLmNvbm5lY3RPcHRzLnNlcnZlcm5hbWUgfHwgdGhpcy5jb25uZWN0T3B0cy5ob3N0OwogICAgICBzb2NrZXQgPSB0bHMuY29ubmVjdCh7CiAgICAgICAgLi4udGhpcy5jb25uZWN0T3B0cywKICAgICAgICBzZXJ2ZXJuYW1lOiBzZXJ2ZXJuYW1lICYmIG5ldC5pc0lQKHNlcnZlcm5hbWUpID8gdW5kZWZpbmVkIDogc2VydmVybmFtZSwKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBkZWJ1ZygnQ3JlYXRpbmcgYG5ldC5Tb2NrZXRgOiAlbycsIHRoaXMuY29ubmVjdE9wdHMpOwogICAgICBzb2NrZXQgPSBuZXQuY29ubmVjdCh0aGlzLmNvbm5lY3RPcHRzKTsKICAgIH0KCiAgICBjb25zdCBoZWFkZXJzID0KICAgICAgdHlwZW9mIHRoaXMucHJveHlIZWFkZXJzID09PSAnZnVuY3Rpb24nID8gdGhpcy5wcm94eUhlYWRlcnMoKSA6IHsgLi4udGhpcy5wcm94eUhlYWRlcnMgfTsKICAgIGNvbnN0IGhvc3QgPSBuZXQuaXNJUHY2KG9wdHMuaG9zdCkgPyBgWyR7b3B0cy5ob3N0fV1gIDogb3B0cy5ob3N0OwogICAgbGV0IHBheWxvYWQgPSBgQ09OTkVDVCAke2hvc3R9OiR7b3B0cy5wb3J0fSBIVFRQLzEuMVxyXG5gOwoKICAgIC8vIEluamVjdCB0aGUgYFByb3h5LUF1dGhvcml6YXRpb25gIGhlYWRlciBpZiBuZWNlc3NhcnkuCiAgICBpZiAocHJveHkudXNlcm5hbWUgfHwgcHJveHkucGFzc3dvcmQpIHsKICAgICAgY29uc3QgYXV0aCA9IGAke2RlY29kZVVSSUNvbXBvbmVudChwcm94eS51c2VybmFtZSl9OiR7ZGVjb2RlVVJJQ29tcG9uZW50KHByb3h5LnBhc3N3b3JkKX1gOwogICAgICBoZWFkZXJzWydQcm94eS1BdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShhdXRoKS50b1N0cmluZygnYmFzZTY0Jyl9YDsKICAgIH0KCiAgICBoZWFkZXJzLkhvc3QgPSBgJHtob3N0fToke29wdHMucG9ydH1gOwoKICAgIGlmICghaGVhZGVyc1snUHJveHktQ29ubmVjdGlvbiddKSB7CiAgICAgIGhlYWRlcnNbJ1Byb3h5LUNvbm5lY3Rpb24nXSA9IHRoaXMua2VlcEFsaXZlID8gJ0tlZXAtQWxpdmUnIDogJ2Nsb3NlJzsKICAgIH0KICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKSkgewogICAgICBwYXlsb2FkICs9IGAke25hbWV9OiAke2hlYWRlcnNbbmFtZV19XHJcbmA7CiAgICB9CgogICAgY29uc3QgcHJveHlSZXNwb25zZVByb21pc2UgPSBwYXJzZVByb3h5UmVzcG9uc2Uoc29ja2V0KTsKCiAgICBzb2NrZXQud3JpdGUoYCR7cGF5bG9hZH1cclxuYCk7CgogICAgY29uc3QgeyBjb25uZWN0LCBidWZmZXJlZCB9ID0gYXdhaXQgcHJveHlSZXNwb25zZVByb21pc2U7CiAgICByZXEuZW1pdCgncHJveHlDb25uZWN0JywgY29ubmVjdCk7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50CiAgICAvLyBAdHMtaWdub3JlIE5vdCBFdmVudEVtaXR0ZXIgaW4gTm9kZSB0eXBlcwogICAgdGhpcy5lbWl0KCdwcm94eUNvbm5lY3QnLCBjb25uZWN0LCByZXEpOwoKICAgIGlmIChjb25uZWN0LnN0YXR1c0NvZGUgPT09IDIwMCkgewogICAgICByZXEub25jZSgnc29ja2V0JywgcmVzdW1lKTsKCiAgICAgIGlmIChvcHRzLnNlY3VyZUVuZHBvaW50KSB7CiAgICAgICAgLy8gVGhlIHByb3h5IGlzIGNvbm5lY3RpbmcgdG8gYSBUTFMgc2VydmVyLCBzbyB1cGdyYWRlCiAgICAgICAgLy8gdGhpcyBzb2NrZXQgY29ubmVjdGlvbiB0byBhIFRMUyBjb25uZWN0aW9uLgogICAgICAgIGRlYnVnKCdVcGdyYWRpbmcgc29ja2V0IGNvbm5lY3Rpb24gdG8gVExTJyk7CiAgICAgICAgY29uc3Qgc2VydmVybmFtZSA9IG9wdHMuc2VydmVybmFtZSB8fCBvcHRzLmhvc3Q7CiAgICAgICAgcmV0dXJuIHRscy5jb25uZWN0KHsKICAgICAgICAgIC4uLm9taXQob3B0cywgJ2hvc3QnLCAncGF0aCcsICdwb3J0JyksCiAgICAgICAgICBzb2NrZXQsCiAgICAgICAgICBzZXJ2ZXJuYW1lOiBuZXQuaXNJUChzZXJ2ZXJuYW1lKSA/IHVuZGVmaW5lZCA6IHNlcnZlcm5hbWUsCiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIHJldHVybiBzb2NrZXQ7CiAgICB9CgogICAgLy8gU29tZSBvdGhlciBzdGF0dXMgY29kZSB0aGF0J3Mgbm90IDIwMC4uLiBuZWVkIHRvIHJlLXBsYXkgdGhlIEhUVFAKICAgIC8vIGhlYWRlciAiZGF0YSIgZXZlbnRzIG9udG8gdGhlIHNvY2tldCBvbmNlIHRoZSBIVFRQIG1hY2hpbmVyeSBpcwogICAgLy8gYXR0YWNoZWQgc28gdGhhdCB0aGUgbm9kZSBjb3JlIGBodHRwYCBjYW4gcGFyc2UgYW5kIGhhbmRsZSB0aGUKICAgIC8vIGVycm9yIHN0YXR1cyBjb2RlLgoKICAgIC8vIENsb3NlIHRoZSBvcmlnaW5hbCBzb2NrZXQsIGFuZCBhIG5ldyAiZmFrZSIgc29ja2V0IGlzIHJldHVybmVkCiAgICAvLyBpbnN0ZWFkLCBzbyB0aGF0IHRoZSBwcm94eSBkb2Vzbid0IGdldCB0aGUgSFRUUCByZXF1ZXN0CiAgICAvLyB3cml0dGVuIHRvIGl0ICh3aGljaCBtYXkgY29udGFpbiBgQXV0aG9yaXphdGlvbmAgaGVhZGVycyBvciBvdGhlcgogICAgLy8gc2Vuc2l0aXZlIGRhdGEpLgogICAgLy8KICAgIC8vIFNlZTogaHR0cHM6Ly9oYWNrZXJvbmUuY29tL3JlcG9ydHMvNTQxNTAyCiAgICBzb2NrZXQuZGVzdHJveSgpOwoKICAgIGNvbnN0IGZha2VTb2NrZXQgPSBuZXcgbmV0LlNvY2tldCh7IHdyaXRhYmxlOiBmYWxzZSB9KTsKICAgIGZha2VTb2NrZXQucmVhZGFibGUgPSB0cnVlOwoKICAgIC8vIE5lZWQgdG8gd2FpdCBmb3IgdGhlICJzb2NrZXQiIGV2ZW50IHRvIHJlLXBsYXkgdGhlICJkYXRhIiBldmVudHMuCiAgICByZXEub25jZSgnc29ja2V0JywgKHMpID0+IHsKICAgICAgZGVidWcoJ1JlcGxheWluZyBwcm94eSBidWZmZXIgZm9yIGZhaWxlZCByZXF1ZXN0Jyk7CiAgICAgIC8vIFJlcGxheSB0aGUgImJ1ZmZlcmVkIiBCdWZmZXIgb250byB0aGUgZmFrZSBgc29ja2V0YCwgc2luY2UgYXQKICAgICAgLy8gdGhpcyBwb2ludCB0aGUgSFRUUCBtb2R1bGUgbWFjaGluZXJ5IGhhcyBiZWVuIGhvb2tlZCB1cCBmb3IKICAgICAgLy8gdGhlIHVzZXIuCiAgICAgIHMucHVzaChidWZmZXJlZCk7CiAgICAgIHMucHVzaChudWxsKTsKICAgIH0pOwoKICAgIHJldHVybiBmYWtlU29ja2V0OwogIH0KfSBIdHRwc1Byb3h5QWdlbnQuX19pbml0U3RhdGljKCk7CgpmdW5jdGlvbiByZXN1bWUoc29ja2V0KSB7CiAgc29ja2V0LnJlc3VtZSgpOwp9CgpmdW5jdGlvbiBvbWl0KAogIG9iaiwKICAuLi5rZXlzCikKCiB7CiAgY29uc3QgcmV0ID0ge30KCjsKICBsZXQga2V5OwogIGZvciAoa2V5IGluIG9iaikgewogICAgaWYgKCFrZXlzLmluY2x1ZGVzKGtleSkpIHsKICAgICAgcmV0W2tleV0gPSBvYmpba2V5XTsKICAgIH0KICB9CiAgcmV0dXJuIHJldDsKfQoKZnVuY3Rpb24gX251bGxpc2hDb2FsZXNjZShsaHMsIHJoc0ZuKSB7IGlmIChsaHMgIT0gbnVsbCkgeyByZXR1cm4gbGhzOyB9IGVsc2UgeyByZXR1cm4gcmhzRm4oKTsgfSB9Ci8vIEVzdGltYXRlZCBtYXhpbXVtIHNpemUgZm9yIHJlYXNvbmFibGUgc3RhbmRhbG9uZSBldmVudApjb25zdCBHWklQX1RIUkVTSE9MRCA9IDEwMjQgKiAzMjsKCi8qKgogKiBHZXRzIGEgc3RyZWFtIGZyb20gYSBVaW50OEFycmF5IG9yIHN0cmluZwogKiBSZWFkYWJsZS5mcm9tIGlzIGlkZWFsIGJ1dCB3YXMgYWRkZWQgaW4gbm9kZS5qcyB2MTIuMy4wIGFuZCB2MTAuMTcuMAogKi8KZnVuY3Rpb24gc3RyZWFtRnJvbUJvZHkoYm9keSkgewogIHJldHVybiBuZXcgUmVhZGFibGUoewogICAgcmVhZCgpIHsKICAgICAgdGhpcy5wdXNoKGJvZHkpOwogICAgICB0aGlzLnB1c2gobnVsbCk7CiAgICB9LAogIH0pOwp9CgovKioKICogQ3JlYXRlcyBhIFRyYW5zcG9ydCB0aGF0IHVzZXMgbmF0aXZlIHRoZSBuYXRpdmUgJ2h0dHAnIGFuZCAnaHR0cHMnIG1vZHVsZXMgdG8gc2VuZCBldmVudHMgdG8gU2VudHJ5LgogKi8KZnVuY3Rpb24gbWFrZU5vZGVUcmFuc3BvcnQob3B0aW9ucykgewogIGxldCB1cmxTZWdtZW50czsKCiAgdHJ5IHsKICAgIHVybFNlZ21lbnRzID0gbmV3IFVSTChvcHRpb25zLnVybCk7CiAgfSBjYXRjaCAoZSkgewogICAgY29uc29sZVNhbmRib3goKCkgPT4gewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZQogICAgICBjb25zb2xlLndhcm4oCiAgICAgICAgJ1tAc2VudHJ5L25vZGVdOiBJbnZhbGlkIGRzbiBvciB0dW5uZWwgb3B0aW9uLCB3aWxsIG5vdCBzZW5kIGFueSBldmVudHMuIFRoZSB0dW5uZWwgb3B0aW9uIG11c3QgYmUgYSBmdWxsIFVSTCB3aGVuIHVzZWQuJywKICAgICAgKTsKICAgIH0pOwogICAgcmV0dXJuIGNyZWF0ZVRyYW5zcG9ydChvcHRpb25zLCAoKSA9PiBQcm9taXNlLnJlc29sdmUoe30pKTsKICB9CgogIGNvbnN0IGlzSHR0cHMgPSB1cmxTZWdtZW50cy5wcm90b2NvbCA9PT0gJ2h0dHBzOic7CgogIC8vIFByb3h5IHByaW9yaXRpemF0aW9uOiBodHRwID0+IGBvcHRpb25zLnByb3h5YCB8IGBwcm9jZXNzLmVudi5odHRwX3Byb3h5YAogIC8vIFByb3h5IHByaW9yaXRpemF0aW9uOiBodHRwcyA9PiBgb3B0aW9ucy5wcm94eWAgfCBgcHJvY2Vzcy5lbnYuaHR0cHNfcHJveHlgIHwgYHByb2Nlc3MuZW52Lmh0dHBfcHJveHlgCiAgY29uc3QgcHJveHkgPSBhcHBseU5vUHJveHlPcHRpb24oCiAgICB1cmxTZWdtZW50cywKICAgIG9wdGlvbnMucHJveHkgfHwgKGlzSHR0cHMgPyBwcm9jZXNzLmVudi5odHRwc19wcm94eSA6IHVuZGVmaW5lZCkgfHwgcHJvY2Vzcy5lbnYuaHR0cF9wcm94eSwKICApOwoKICBjb25zdCBuYXRpdmVIdHRwTW9kdWxlID0gaXNIdHRwcyA/IGh0dHBzIDogaHR0cDsKICBjb25zdCBrZWVwQWxpdmUgPSBvcHRpb25zLmtlZXBBbGl2ZSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBvcHRpb25zLmtlZXBBbGl2ZTsKCiAgLy8gVE9ETyh2Nyk6IEV2YWx1YXRlIGlmIHdlIGNhbiBzZXQga2VlcEFsaXZlIHRvIHRydWUuIFRoaXMgd291bGQgaW52b2x2ZSB0ZXN0aW5nIGZvciBtZW1vcnkgbGVha3MgaW4gb2xkZXIgbm9kZQogIC8vIHZlcnNpb25zKD49IDgpIGFzIHRoZXkgaGFkIG1lbW9yeSBsZWFrcyB3aGVuIHVzaW5nIGl0OiAjMjU1NQogIGNvbnN0IGFnZW50ID0gcHJveHkKICAgID8gKG5ldyBIdHRwc1Byb3h5QWdlbnQocHJveHkpICkKICAgIDogbmV3IG5hdGl2ZUh0dHBNb2R1bGUuQWdlbnQoeyBrZWVwQWxpdmUsIG1heFNvY2tldHM6IDMwLCB0aW1lb3V0OiAyMDAwIH0pOwoKICBjb25zdCByZXF1ZXN0RXhlY3V0b3IgPSBjcmVhdGVSZXF1ZXN0RXhlY3V0b3Iob3B0aW9ucywgX251bGxpc2hDb2FsZXNjZShvcHRpb25zLmh0dHBNb2R1bGUsICgpID0+ICggbmF0aXZlSHR0cE1vZHVsZSkpLCBhZ2VudCk7CiAgcmV0dXJuIGNyZWF0ZVRyYW5zcG9ydChvcHRpb25zLCByZXF1ZXN0RXhlY3V0b3IpOwp9CgovKioKICogSG9ub3JzIHRoZSBgbm9fcHJveHlgIGVudiB2YXJpYWJsZSB3aXRoIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRvIGFsbG93IGZvciBob3N0cyBleGNsdXNpb24uCiAqCiAqIEBwYXJhbSB0cmFuc3BvcnRVcmwgVGhlIFVSTCB0aGUgdHJhbnNwb3J0IGludGVuZHMgdG8gc2VuZCBldmVudHMgdG8uCiAqIEBwYXJhbSBwcm94eSBUaGUgY2xpZW50IGNvbmZpZ3VyZWQgcHJveHkuCiAqIEByZXR1cm5zIEEgcHJveHkgdGhlIHRyYW5zcG9ydCBzaG91bGQgdXNlLgogKi8KZnVuY3Rpb24gYXBwbHlOb1Byb3h5T3B0aW9uKHRyYW5zcG9ydFVybFNlZ21lbnRzLCBwcm94eSkgewogIGNvbnN0IHsgbm9fcHJveHkgfSA9IHByb2Nlc3MuZW52OwoKICBjb25zdCB1cmxJc0V4ZW1wdEZyb21Qcm94eSA9CiAgICBub19wcm94eSAmJgogICAgbm9fcHJveHkKICAgICAgLnNwbGl0KCcsJykKICAgICAgLnNvbWUoCiAgICAgICAgZXhlbXB0aW9uID0+IHRyYW5zcG9ydFVybFNlZ21lbnRzLmhvc3QuZW5kc1dpdGgoZXhlbXB0aW9uKSB8fCB0cmFuc3BvcnRVcmxTZWdtZW50cy5ob3N0bmFtZS5lbmRzV2l0aChleGVtcHRpb24pLAogICAgICApOwoKICBpZiAodXJsSXNFeGVtcHRGcm9tUHJveHkpIHsKICAgIHJldHVybiB1bmRlZmluZWQ7CiAgfSBlbHNlIHsKICAgIHJldHVybiBwcm94eTsKICB9Cn0KCi8qKgogKiBDcmVhdGVzIGEgUmVxdWVzdEV4ZWN1dG9yIHRvIGJlIHVzZWQgd2l0aCBgY3JlYXRlVHJhbnNwb3J0YC4KICovCmZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3RFeGVjdXRvcigKICBvcHRpb25zLAogIGh0dHBNb2R1bGUsCiAgYWdlbnQsCikgewogIGNvbnN0IHsgaG9zdG5hbWUsIHBhdGhuYW1lLCBwb3J0LCBwcm90b2NvbCwgc2VhcmNoIH0gPSBuZXcgVVJMKG9wdGlvbnMudXJsKTsKICByZXR1cm4gZnVuY3Rpb24gbWFrZVJlcXVlc3QocmVxdWVzdCkgewogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgbGV0IGJvZHkgPSBzdHJlYW1Gcm9tQm9keShyZXF1ZXN0LmJvZHkpOwoKICAgICAgY29uc3QgaGVhZGVycyA9IHsgLi4ub3B0aW9ucy5oZWFkZXJzIH07CgogICAgICBpZiAocmVxdWVzdC5ib2R5Lmxlbmd0aCA+IEdaSVBfVEhSRVNIT0xEKSB7CiAgICAgICAgaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddID0gJ2d6aXAnOwogICAgICAgIGJvZHkgPSBib2R5LnBpcGUoY3JlYXRlR3ppcCgpKTsKICAgICAgfQoKICAgICAgY29uc3QgcmVxID0gaHR0cE1vZHVsZS5yZXF1ZXN0KAogICAgICAgIHsKICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAogICAgICAgICAgYWdlbnQsCiAgICAgICAgICBoZWFkZXJzLAogICAgICAgICAgaG9zdG5hbWUsCiAgICAgICAgICBwYXRoOiBgJHtwYXRobmFtZX0ke3NlYXJjaH1gLAogICAgICAgICAgcG9ydCwKICAgICAgICAgIHByb3RvY29sLAogICAgICAgICAgY2E6IG9wdGlvbnMuY2FDZXJ0cywKICAgICAgICB9LAogICAgICAgIHJlcyA9PiB7CiAgICAgICAgICByZXMub24oJ2RhdGEnLCAoKSA9PiB7CiAgICAgICAgICAgIC8vIERyYWluIHNvY2tldAogICAgICAgICAgfSk7CgogICAgICAgICAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7CiAgICAgICAgICAgIC8vIERyYWluIHNvY2tldAogICAgICAgICAgfSk7CgogICAgICAgICAgcmVzLnNldEVuY29kaW5nKCd1dGY4Jyk7CgogICAgICAgICAgLy8gIktleS12YWx1ZSBwYWlycyBvZiBoZWFkZXIgbmFtZXMgYW5kIHZhbHVlcy4gSGVhZGVyIG5hbWVzIGFyZSBsb3dlci1jYXNlZC4iCiAgICAgICAgICAvLyBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVycwogICAgICAgICAgY29uc3QgcmV0cnlBZnRlckhlYWRlciA9IF9udWxsaXNoQ29hbGVzY2UocmVzLmhlYWRlcnNbJ3JldHJ5LWFmdGVyJ10sICgpID0+ICggbnVsbCkpOwogICAgICAgICAgY29uc3QgcmF0ZUxpbWl0c0hlYWRlciA9IF9udWxsaXNoQ29hbGVzY2UocmVzLmhlYWRlcnNbJ3gtc2VudHJ5LXJhdGUtbGltaXRzJ10sICgpID0+ICggbnVsbCkpOwoKICAgICAgICAgIHJlc29sdmUoewogICAgICAgICAgICBzdGF0dXNDb2RlOiByZXMuc3RhdHVzQ29kZSwKICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICdyZXRyeS1hZnRlcic6IHJldHJ5QWZ0ZXJIZWFkZXIsCiAgICAgICAgICAgICAgJ3gtc2VudHJ5LXJhdGUtbGltaXRzJzogQXJyYXkuaXNBcnJheShyYXRlTGltaXRzSGVhZGVyKSA/IHJhdGVMaW1pdHNIZWFkZXJbMF0gOiByYXRlTGltaXRzSGVhZGVyLAogICAgICAgICAgICB9LAogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgKTsKCiAgICAgIHJlcS5vbignZXJyb3InLCByZWplY3QpOwogICAgICBib2R5LnBpcGUocmVxKTsKICAgIH0pOwogIH07Cn0KCmZ1bmN0aW9uIF9vcHRpb25hbENoYWluKG9wcykgeyBsZXQgbGFzdEFjY2Vzc0xIUyA9IHVuZGVmaW5lZDsgbGV0IHZhbHVlID0gb3BzWzBdOyBsZXQgaSA9IDE7IHdoaWxlIChpIDwgb3BzLmxlbmd0aCkgeyBjb25zdCBvcCA9IG9wc1tpXTsgY29uc3QgZm4gPSBvcHNbaSArIDFdOyBpICs9IDI7IGlmICgob3AgPT09ICdvcHRpb25hbEFjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSAmJiB2YWx1ZSA9PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gaWYgKG9wID09PSAnYWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJykgeyBsYXN0QWNjZXNzTEhTID0gdmFsdWU7IHZhbHVlID0gZm4odmFsdWUpOyB9IGVsc2UgaWYgKG9wID09PSAnY2FsbCcgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSB7IHZhbHVlID0gZm4oKC4uLmFyZ3MpID0+IHZhbHVlLmNhbGwobGFzdEFjY2Vzc0xIUywgLi4uYXJncykpOyBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkOyB9IH0gcmV0dXJuIHZhbHVlOyB9CmNvbnN0IG9wdGlvbnMgPSB3b3JrZXJEYXRhOwpsZXQgc2Vzc2lvbjsKbGV0IGhhc1NlbnRBbnJFdmVudCA9IGZhbHNlOwoKZnVuY3Rpb24gbG9nKG1zZykgewogIGlmIChvcHRpb25zLmRlYnVnKSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZQogICAgY29uc29sZS5sb2coYFtBTlIgV29ya2VyXSAke21zZ31gKTsKICB9Cn0KCmNvbnN0IHVybCA9IGdldEVudmVsb3BlRW5kcG9pbnRXaXRoVXJsRW5jb2RlZEF1dGgob3B0aW9ucy5kc24pOwpjb25zdCB0cmFuc3BvcnQgPSBtYWtlTm9kZVRyYW5zcG9ydCh7CiAgdXJsLAogIHJlY29yZERyb3BwZWRFdmVudDogKCkgPT4gewogICAgLy8KICB9LAp9KTsKCmFzeW5jIGZ1bmN0aW9uIHNlbmRBYm5vcm1hbFNlc3Npb24oKSB7CiAgLy8gb2Ygd2UgaGF2ZSBhbiBleGlzdGluZyBzZXNzaW9uIHBhc3NlZCBmcm9tIHRoZSBtYWluIHRocmVhZCwgc2VuZCBpdCBhcyBhYm5vcm1hbAogIGlmIChzZXNzaW9uKSB7CiAgICBsb2coJ1NlbmRpbmcgYWJub3JtYWwgc2Vzc2lvbicpOwogICAgdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCB7IHN0YXR1czogJ2Fibm9ybWFsJywgYWJub3JtYWxfbWVjaGFuaXNtOiAnYW5yX2ZvcmVncm91bmQnIH0pOwoKICAgIGNvbnN0IGVudmVsb3BlID0gY3JlYXRlU2Vzc2lvbkVudmVsb3BlKHNlc3Npb24sIG9wdGlvbnMuZHNuLCBvcHRpb25zLnNka01ldGFkYXRhKTsKICAgIC8vIExvZyB0aGUgZW52ZWxvcGUgc28gdG8gYWlkIGluIHRlc3RpbmcKICAgIGxvZyhKU09OLnN0cmluZ2lmeShlbnZlbG9wZSkpOwoKICAgIGF3YWl0IHRyYW5zcG9ydC5zZW5kKGVudmVsb3BlKTsKCiAgICB0cnkgewogICAgICAvLyBOb3RpZnkgdGhlIG1haW4gcHJvY2VzcyB0aGF0IHRoZSBzZXNzaW9uIGhhcyBlbmRlZCBzbyB0aGUgc2Vzc2lvbiBjYW4gYmUgY2xlYXJlZCBmcm9tIHRoZSBzY29wZQogICAgICBfb3B0aW9uYWxDaGFpbihbcGFyZW50UG9ydCwgJ29wdGlvbmFsQWNjZXNzJywgXzIgPT4gXzIucG9zdE1lc3NhZ2UsICdjYWxsJywgXzMgPT4gXzMoJ3Nlc3Npb24tZW5kZWQnKV0pOwogICAgfSBjYXRjaCAoXykgewogICAgICAvLyBpZ25vcmUKICAgIH0KICB9Cn0KCmxvZygnU3RhcnRlZCcpOwoKZnVuY3Rpb24gcHJlcGFyZVN0YWNrRnJhbWVzKHN0YWNrRnJhbWVzKSB7CiAgaWYgKCFzdGFja0ZyYW1lcykgewogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CgogIC8vIFN0cmlwIFNlbnRyeSBmcmFtZXMgYW5kIHJldmVyc2UgdGhlIHN0YWNrIGZyYW1lcyBzbyB0aGV5IGFyZSBpbiB0aGUgY29ycmVjdCBvcmRlcgogIGNvbnN0IHN0cmlwcGVkRnJhbWVzID0gc3RyaXBTZW50cnlGcmFtZXNBbmRSZXZlcnNlKHN0YWNrRnJhbWVzKTsKCiAgLy8gSWYgd2UgaGF2ZSBhbiBhcHAgcm9vdCBwYXRoLCByZXdyaXRlIHRoZSBmaWxlbmFtZXMgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIGFwcCByb290CiAgaWYgKG9wdGlvbnMuYXBwUm9vdFBhdGgpIHsKICAgIGZvciAoY29uc3QgZnJhbWUgb2Ygc3RyaXBwZWRGcmFtZXMpIHsKICAgICAgaWYgKCFmcmFtZS5maWxlbmFtZSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CgogICAgICBmcmFtZS5maWxlbmFtZSA9IG5vcm1hbGl6ZVVybFRvQmFzZShmcmFtZS5maWxlbmFtZSwgb3B0aW9ucy5hcHBSb290UGF0aCk7CiAgICB9CiAgfQoKICByZXR1cm4gc3RyaXBwZWRGcmFtZXM7Cn0KCmFzeW5jIGZ1bmN0aW9uIHNlbmRBbnJFdmVudChmcmFtZXMsIHRyYWNlQ29udGV4dCkgewogIGlmIChoYXNTZW50QW5yRXZlbnQpIHsKICAgIHJldHVybjsKICB9CgogIGhhc1NlbnRBbnJFdmVudCA9IHRydWU7CgogIGF3YWl0IHNlbmRBYm5vcm1hbFNlc3Npb24oKTsKCiAgbG9nKCdTZW5kaW5nIGV2ZW50Jyk7CgogIGNvbnN0IGV2ZW50ID0gewogICAgZXZlbnRfaWQ6IHV1aWQ0KCksCiAgICBjb250ZXh0czogeyAuLi5vcHRpb25zLmNvbnRleHRzLCB0cmFjZTogdHJhY2VDb250ZXh0IH0sCiAgICByZWxlYXNlOiBvcHRpb25zLnJlbGVhc2UsCiAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCwKICAgIGRpc3Q6IG9wdGlvbnMuZGlzdCwKICAgIHBsYXRmb3JtOiAnbm9kZScsCiAgICBsZXZlbDogJ2Vycm9yJywKICAgIGV4Y2VwdGlvbjogewogICAgICB2YWx1ZXM6IFsKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAnQXBwbGljYXRpb25Ob3RSZXNwb25kaW5nJywKICAgICAgICAgIHZhbHVlOiBgQXBwbGljYXRpb24gTm90IFJlc3BvbmRpbmcgZm9yIGF0IGxlYXN0ICR7b3B0aW9ucy5hbnJUaHJlc2hvbGR9IG1zYCwKICAgICAgICAgIHN0YWNrdHJhY2U6IHsgZnJhbWVzOiBwcmVwYXJlU3RhY2tGcmFtZXMoZnJhbWVzKSB9LAogICAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBVSSBkb2Vzbid0IHNheSAnQ3Jhc2hlZCBpbicgZm9yIHRoZSBzdGFjayB0cmFjZQogICAgICAgICAgbWVjaGFuaXNtOiB7IHR5cGU6ICdBTlInIH0sCiAgICAgICAgfSwKICAgICAgXSwKICAgIH0sCiAgICB0YWdzOiBvcHRpb25zLnN0YXRpY1RhZ3MsCiAgfTsKCiAgY29uc3QgZW52ZWxvcGUgPSBjcmVhdGVFdmVudEVudmVsb3BlKGV2ZW50LCBvcHRpb25zLmRzbiwgb3B0aW9ucy5zZGtNZXRhZGF0YSk7CiAgLy8gTG9nIHRoZSBlbnZlbG9wZSBzbyB0byBhaWQgaW4gdGVzdGluZwogIGxvZyhKU09OLnN0cmluZ2lmeShlbnZlbG9wZSkpOwoKICBhd2FpdCB0cmFuc3BvcnQuc2VuZChlbnZlbG9wZSk7CiAgYXdhaXQgdHJhbnNwb3J0LmZsdXNoKDIwMDApOwoKICAvLyBEZWxheSBmb3IgNSBzZWNvbmRzIHNvIHRoYXQgc3RkaW8gY2FuIGZsdXNoIGluIHRoZSBtYWluIGV2ZW50IGxvb3AgZXZlciByZXN0YXJ0cy4KICAvLyBUaGlzIGlzIG1haW5seSBmb3IgdGhlIGJlbmVmaXQgb2YgbG9nZ2luZy9kZWJ1Z2dpbmcgaXNzdWVzLgogIHNldFRpbWVvdXQoKCkgPT4gewogICAgcHJvY2Vzcy5leGl0KDApOwogIH0sIDUwMDApOwp9CgpsZXQgZGVidWdnZXJQYXVzZTsKCmlmIChvcHRpb25zLmNhcHR1cmVTdGFja1RyYWNlKSB7CiAgbG9nKCdDb25uZWN0aW5nIHRvIGRlYnVnZ2VyJyk7CgogIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbigpIDsKICBzZXNzaW9uLmNvbm5lY3RUb01haW5UaHJlYWQoKTsKCiAgbG9nKCdDb25uZWN0ZWQgdG8gZGVidWdnZXInKTsKCiAgLy8gQ29sbGVjdCBzY3JpcHRJZCAtPiB1cmwgbWFwIHNvIHdlIGNhbiBsb29rIHVwIHRoZSBmaWxlbmFtZXMgbGF0ZXIKICBjb25zdCBzY3JpcHRzID0gbmV3IE1hcCgpOwoKICBzZXNzaW9uLm9uKCdEZWJ1Z2dlci5zY3JpcHRQYXJzZWQnLCBldmVudCA9PiB7CiAgICBzY3JpcHRzLnNldChldmVudC5wYXJhbXMuc2NyaXB0SWQsIGV2ZW50LnBhcmFtcy51cmwpOwogIH0pOwoKICBzZXNzaW9uLm9uKCdEZWJ1Z2dlci5wYXVzZWQnLCBldmVudCA9PiB7CiAgICBpZiAoZXZlbnQucGFyYW1zLnJlYXNvbiAhPT0gJ290aGVyJykgewogICAgICByZXR1cm47CiAgICB9CgogICAgdHJ5IHsKICAgICAgbG9nKCdEZWJ1Z2dlciBwYXVzZWQnKTsKCiAgICAgIC8vIGNvcHkgdGhlIGZyYW1lcwogICAgICBjb25zdCBjYWxsRnJhbWVzID0gWy4uLmV2ZW50LnBhcmFtcy5jYWxsRnJhbWVzXTsKCiAgICAgIGNvbnN0IGdldE1vZHVsZU5hbWUgPSBvcHRpb25zLmFwcFJvb3RQYXRoID8gY3JlYXRlR2V0TW9kdWxlRnJvbUZpbGVuYW1lKG9wdGlvbnMuYXBwUm9vdFBhdGgpIDogKCkgPT4gdW5kZWZpbmVkOwogICAgICBjb25zdCBzdGFja0ZyYW1lcyA9IGNhbGxGcmFtZXMubWFwKGZyYW1lID0+CiAgICAgICAgY2FsbEZyYW1lVG9TdGFja0ZyYW1lKGZyYW1lLCBzY3JpcHRzLmdldChmcmFtZS5sb2NhdGlvbi5zY3JpcHRJZCksIGdldE1vZHVsZU5hbWUpLAogICAgICApOwoKICAgICAgLy8gRXZhbHVhdGUgYSBzY3JpcHQgaW4gdGhlIGN1cnJlbnRseSBwYXVzZWQgY29udGV4dAogICAgICBzZXNzaW9uLnBvc3QoCiAgICAgICAgJ1J1bnRpbWUuZXZhbHVhdGUnLAogICAgICAgIHsKICAgICAgICAgIC8vIEdyYWIgdGhlIHRyYWNlIGNvbnRleHQgZnJvbSB0aGUgY3VycmVudCBzY29wZQogICAgICAgICAgZXhwcmVzc2lvbjoKICAgICAgICAgICAgJ2NvbnN0IGN0eCA9IF9fU0VOVFJZX18uaHViLmdldFNjb3BlKCkuZ2V0UHJvcGFnYXRpb25Db250ZXh0KCk7IGN0eC50cmFjZUlkICsgIi0iICsgY3R4LnNwYW5JZCArICItIiArIGN0eC5wYXJlbnRTcGFuSWQnLAogICAgICAgICAgLy8gRG9uJ3QgcmUtdHJpZ2dlciB0aGUgZGVidWdnZXIgaWYgdGhpcyBjYXVzZXMgYW4gZXJyb3IKICAgICAgICAgIHNpbGVudDogdHJ1ZSwKICAgICAgICB9LAogICAgICAgIChfLCBwYXJhbSkgPT4gewogICAgICAgICAgY29uc3QgdHJhY2VJZCA9IHBhcmFtICYmIHBhcmFtLnJlc3VsdCA/IChwYXJhbS5yZXN1bHQudmFsdWUgKSA6ICctLSc7CiAgICAgICAgICBjb25zdCBbdHJhY2VfaWQsIHNwYW5faWQsIHBhcmVudF9zcGFuX2lkXSA9IHRyYWNlSWQuc3BsaXQoJy0nKSA7CgogICAgICAgICAgc2Vzc2lvbi5wb3N0KCdEZWJ1Z2dlci5yZXN1bWUnKTsKICAgICAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIuZGlzYWJsZScpOwoKICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBfb3B0aW9uYWxDaGFpbihbdHJhY2VfaWQsICdvcHRpb25hbEFjY2VzcycsIF80ID0+IF80Lmxlbmd0aF0pICYmIF9vcHRpb25hbENoYWluKFtzcGFuX2lkLCAnb3B0aW9uYWxBY2Nlc3MnLCBfNSA9PiBfNS5sZW5ndGhdKSA/IHsgdHJhY2VfaWQsIHNwYW5faWQsIHBhcmVudF9zcGFuX2lkIH0gOiB1bmRlZmluZWQ7CiAgICAgICAgICBzZW5kQW5yRXZlbnQoc3RhY2tGcmFtZXMsIGNvbnRleHQpLnRoZW4obnVsbCwgKCkgPT4gewogICAgICAgICAgICBsb2coJ1NlbmRpbmcgQU5SIGV2ZW50IGZhaWxlZC4nKTsKICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIucmVzdW1lJyk7CiAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIuZGlzYWJsZScpOwogICAgICB0aHJvdyBlOwogICAgfQogIH0pOwoKICBkZWJ1Z2dlclBhdXNlID0gKCkgPT4gewogICAgdHJ5IHsKICAgICAgc2Vzc2lvbi5wb3N0KCdEZWJ1Z2dlci5lbmFibGUnLCAoKSA9PiB7CiAgICAgICAgc2Vzc2lvbi5wb3N0KCdEZWJ1Z2dlci5wYXVzZScpOwogICAgICB9KTsKICAgIH0gY2F0Y2ggKF8pIHsKICAgICAgLy8KICAgIH0KICB9Owp9CgpmdW5jdGlvbiBjcmVhdGVIclRpbWVyKCkgewogIC8vIFRPRE8gKHY4KTogV2UgY2FuIHVzZSBwcm9jZXNzLmhydGltZS5iaWdpbnQoKSBhZnRlciB3ZSBkcm9wIG5vZGUgdjgKICBsZXQgbGFzdFBvbGwgPSBwcm9jZXNzLmhydGltZSgpOwoKICByZXR1cm4gewogICAgZ2V0VGltZU1zOiAoKSA9PiB7CiAgICAgIGNvbnN0IFtzZWNvbmRzLCBuYW5vU2Vjb25kc10gPSBwcm9jZXNzLmhydGltZShsYXN0UG9sbCk7CiAgICAgIHJldHVybiBNYXRoLmZsb29yKHNlY29uZHMgKiAxZTMgKyBuYW5vU2Vjb25kcyAvIDFlNik7CiAgICB9LAogICAgcmVzZXQ6ICgpID0+IHsKICAgICAgbGFzdFBvbGwgPSBwcm9jZXNzLmhydGltZSgpOwogICAgfSwKICB9Owp9CgpmdW5jdGlvbiB3YXRjaGRvZ1RpbWVvdXQoKSB7CiAgbG9nKCdXYXRjaGRvZyB0aW1lb3V0Jyk7CgogIGlmIChkZWJ1Z2dlclBhdXNlKSB7CiAgICBsb2coJ1BhdXNpbmcgZGVidWdnZXIgdG8gY2FwdHVyZSBzdGFjayB0cmFjZScpOwogICAgZGVidWdnZXJQYXVzZSgpOwogIH0gZWxzZSB7CiAgICBsb2coJ0NhcHR1cmluZyBldmVudCB3aXRob3V0IGEgc3RhY2sgdHJhY2UnKTsKICAgIHNlbmRBbnJFdmVudCgpLnRoZW4obnVsbCwgKCkgPT4gewogICAgICBsb2coJ1NlbmRpbmcgQU5SIGV2ZW50IGZhaWxlZCBvbiB3YXRjaGRvZyB0aW1lb3V0LicpOwogICAgfSk7CiAgfQp9Cgpjb25zdCB7IHBvbGwgfSA9IHdhdGNoZG9nVGltZXIoY3JlYXRlSHJUaW1lciwgb3B0aW9ucy5wb2xsSW50ZXJ2YWwsIG9wdGlvbnMuYW5yVGhyZXNob2xkLCB3YXRjaGRvZ1RpbWVvdXQpOwoKX29wdGlvbmFsQ2hhaW4oW3BhcmVudFBvcnQsICdvcHRpb25hbEFjY2VzcycsIF82ID0+IF82Lm9uLCAnY2FsbCcsIF83ID0+IF83KCdtZXNzYWdlJywgKG1zZykgPT4gewogIGlmIChtc2cuc2Vzc2lvbikgewogICAgc2Vzc2lvbiA9IG1ha2VTZXNzaW9uKG1zZy5zZXNzaW9uKTsKICB9CgogIHBvbGwoKTsKfSldKTs="});var Lx=y((Fx,Wte)=>{c();var{_optionalChain:Wat,_optionalChainDelete:Lte}=ge();Object.defineProperty(Fx,"__esModule",{value:!0});var Dat=require("url"),Gx=Ct(),ZG=ge(),FG=Ql(),qat=Fte(),Vat=50,Hat=5e3;function LG(e,...t){ZG.logger.log(`[ANR] ${e}`,...t)}function Mat(){return ZG.dynamicRequire(Wte,"worker_threads")}async function Uat(e){let t={message:"ANR"},r={};for(let n of e.getEventProcessors()){if(t===null)break;t=await n(t,r)}return Wat([t,"optionalAccess",n=>n.contexts])||{}}var Zte="Anr",jat=(e={})=>({name:Zte,setupOnce(){},setup(t){if(FG.NODE_VERSION.major<16||FG.NODE_VERSION.major===16&&FG.NODE_VERSION.minor<17)throw new Error("ANR detection requires Node 16.17.0 or later");setImmediate(()=>Yat(t,e))}}),Pte=Gx.defineIntegration(jat),Xat=Gx.convertIntegrationFnToClass(Zte,Pte);async function Yat(e,t){let r=await Uat(e),n=e.getDsn();if(!n)return;Lte([r,"access",d=>d.app,"optionalAccess",d=>delete d.app_memory]),Lte([r,"access",d=>d.device,"optionalAccess",d=>delete d.free_memory]);let i=e.getOptions(),s=e.getSdkMetadata()||{};s.sdk&&(s.sdk.integrations=i.integrations.map(d=>d.name));let o={debug:ZG.logger.isEnabled(),dsn:n,environment:i.environment||"production",release:i.release,dist:i.dist,sdkMetadata:s,appRootPath:t.appRootPath,pollInterval:t.pollInterval||Vat,anrThreshold:t.anrThreshold||Hat,captureStackTrace:!!t.captureStackTrace,staticTags:t.staticTags||{},contexts:r};if(o.captureStackTrace){let d=require("inspector");d.url()||d.open(0)}let{Worker:a}=Mat(),u=new a(new Dat.URL(`data:application/javascript;base64,${qat.base64WorkerScript}`),{workerData:o});process.on("exit",()=>{u.terminate()});let p=setInterval(()=>{try{let d=Gx.getCurrentScope().getSession(),h=d?{...d,toJSON:void 0}:void 0;u.postMessage({session:h})}catch{}},o.pollInterval);p.unref(),u.on("message",d=>{d==="session-ended"&&(LG("ANR event sent from ANR worker. Clearing session in this thread."),Gx.getCurrentScope().setSession(void 0))}),u.once("error",d=>{clearInterval(p),LG("ANR worker error",d)}),u.once("exit",d=>{clearInterval(p),LG("ANR worker exit",d)}),u.unref()}Fx.Anr=Xat;Fx.anrIntegration=Pte});var Dte=y(PG=>{c();Object.defineProperty(PG,"__esModule",{value:!0});var Kat=Ct(),zat=Lx();function Jat(e){let t=Kat.getClient();return new zat.Anr(e).setup(t),Promise.resolve()}PG.enableAnrDetection=Jat});var Vte=y(Zx=>{c();Object.defineProperty(Zx,"__esModule",{value:!0});var qte=ge();function $at(e,t){return qte.extractRequestData(e,{include:t})}function Qat(e,t,r={}){return qte.addRequestDataToEvent(e,t,{include:r})}Zx.extractRequestData=$at;Zx.parseRequest=Qat});var Mte=y(_u=>{c();var{_optionalChain:qf}=ge();Object.defineProperty(_u,"__esModule",{value:!0});var pr=Ct(),Iu=ge(),ect=fy(),Px=kG(),Hte=Vte();function tct(){return function(t,r,n){let i=qf([pr.getClient,"call",d=>d(),"optionalAccess",d=>d.getOptions,"call",d=>d()]);if(!i||i.instrumenter!=="sentry"||qf([t,"access",d=>d.method,"optionalAccess",d=>d.toUpperCase,"call",d=>d()])==="OPTIONS"||qf([t,"access",d=>d.method,"optionalAccess",d=>d.toUpperCase,"call",d=>d()])==="HEAD")return n();let s=t.headers&&Iu.isString(t.headers["sentry-trace"])?t.headers["sentry-trace"]:void 0,o=qf([t,"access",d=>d.headers,"optionalAccess",d=>d.baggage]);if(!pr.hasTracingEnabled(i))return n();let[a,u]=Iu.extractPathForTransaction(t,{path:!0,method:!0}),p=pr.continueTrace({sentryTrace:s,baggage:o},d=>pr.startTransaction({name:a,op:"http.server",origin:"auto.http.node.tracingHandler",...d,data:{[pr.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]:u},metadata:{...d.metadata,request:t}},{request:Iu.extractRequestData(t)}));pr.getCurrentScope().setSpan(p),r.__sentry_transaction=p,r.once("finish",()=>{setImmediate(()=>{Iu.addRequestDataToTransaction(p,t),pr.setHttpStatus(p,r.statusCode),p.end()})}),n()}}function rct(e={}){let t;if("include"in e)t={include:e.include};else{let{ip:r,request:n,transaction:i,user:s}=e;(r||n||i||s)&&(t={include:Iu.dropUndefinedKeys({ip:r,request:n,transaction:i,user:s})})}return t}function nct(e){let t=rct(e),r=pr.getClient();if(r&&Px.isAutoSessionTrackingEnabled(r)){r.initSessionFlusher();let n=pr.getCurrentScope();n.getSession()&&n.setSession()}return function(i,s,o){if(e&&e.flushTimeout&&e.flushTimeout>0){let a=s.end;s.end=function(u,p,d){pr.flush(e.flushTimeout).then(()=>{a.call(this,u,p,d)}).then(null,h=>{ect.DEBUG_BUILD&&Iu.logger.error(h),a.call(this,u,p,d)})}}pr.runWithAsyncContext(()=>{let a=pr.getCurrentScope();a.setSDKProcessingMetadata({request:i,requestDataOptionsFromExpressHandler:t});let u=pr.getClient();Px.isAutoSessionTrackingEnabled(u)&&a.setRequestSession({status:"ok"}),s.once("finish",()=>{let p=pr.getClient();Px.isAutoSessionTrackingEnabled(p)&&setImmediate(()=>{p&&p._captureRequestSession&&p._captureRequestSession()})}),o()})}}function ict(e){let t=e.status||e.statusCode||e.status_code||e.output&&e.output.statusCode;return t?parseInt(t,10):500}function sct(e){return ict(e)>=500}function oct(e){return function(r,n,i,s){if((e&&e.shouldHandleError||sct)(r)){pr.withScope(a=>{a.setSDKProcessingMetadata({request:n});let u=i.__sentry_transaction;u&&!pr.getActiveSpan()&&a.setSpan(u);let p=pr.getClient();if(p&&Px.isAutoSessionTrackingEnabled(p)&&p._sessionFlusher!==void 0){let m=a.getRequestSession();m&&m.status!==void 0&&(m.status="crashed")}let d=pr.captureException(r,{mechanism:{type:"middleware",handled:!1}});i.sentry=d,s(r)});return}s(r)}}function act(e={}){return function({path:t,type:r,next:n,rawInput:i}){let s=qf([pr.getClient,"call",p=>p(),"optionalAccess",p=>p.getOptions,"call",p=>p()]),o=pr.getCurrentScope().getTransaction();if(o){o.updateName(`trpc/${t}`),o.setAttribute(pr.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,"route"),o.op="rpc.server";let p={procedure_type:r};(e.attachRpcInput!==void 0?e.attachRpcInput:qf([s,"optionalAccess",d=>d.sendDefaultPii]))&&(p.input=Iu.normalize(i)),o.setContext("trpc",p)}function a(p){p.ok||pr.captureException(p.error,{mechanism:{handled:!1,data:{function:"trpcMiddleware"}}})}let u;try{u=n()}catch(p){throw pr.captureException(p,{mechanism:{handled:!1,data:{function:"trpcMiddleware"}}}),p}return Iu.isThenable(u)?Promise.resolve(u).then(p=>{a(p)},p=>{pr.captureException(p,{mechanism:{handled:!1,data:{function:"trpcMiddleware"}}})}):a(u),u}}_u.extractRequestData=Hte.extractRequestData;_u.parseRequest=Hte.parseRequest;_u.errorHandler=oct;_u.requestHandler=nct;_u.tracingHandler=tct;_u.trpcMiddleware=act});var WG=y(Vf=>{c();Object.defineProperty(Vf,"__esModule",{value:!0});var Bi=Ct(),Xte=ge();function Ute(e){return e&&e.statusCode!==void 0}function cct(e){return e&&e.isBoom!==void 0}function uct(e){return e&&e.error!==void 0}function jte(e){Bi.captureException(e,{mechanism:{type:"hapi",handled:!1,data:{function:"hapiErrorPlugin"}}})}var Yte={name:"SentryHapiErrorPlugin",version:Bi.SDK_VERSION,register:async function(e){e.events.on("request",(r,n)=>{let i=Bi.getActiveTransaction();r.response&&cct(r.response)?jte(r.response):uct(n)&&jte(n.error),i&&(i.setStatus("internal_error"),i.end())})}},Kte={name:"SentryHapiTracingPlugin",version:Bi.SDK_VERSION,register:async function(e){let t=e;t.ext("onPreHandler",(r,n)=>{let i=Bi.continueTrace({sentryTrace:r.headers["sentry-trace"]||void 0,baggage:r.headers.baggage||void 0},s=>Bi.startTransaction({...s,op:"hapi.request",name:r.route.path,description:`${r.route.method} ${r.path}`}));return Bi.getCurrentScope().setSpan(i),n.continue}),t.ext("onPreResponse",(r,n)=>{let i=Bi.getActiveTransaction();if(r.response&&Ute(r.response)&&i){let s=r.response;s.header("sentry-trace",Bi.spanToTraceHeader(i));let o=Xte.dynamicSamplingContextToSentryBaggageHeader(Bi.getDynamicSamplingContextFromSpan(i));o&&s.header("baggage",o)}return n.continue}),t.ext("onPostHandler",(r,n)=>{let i=Bi.getActiveTransaction();return i&&(r.response&&Ute(r.response)&&Bi.setHttpStatus(i,r.response.statusCode),i.end()),n.continue})}},zte="Hapi",lct=(e={})=>{let t=e.server;return{name:zte,setupOnce(){t&&Xte.fill(t,"start",r=>async function(){return await this.register(Kte),await this.register(Yte),r.apply(this)})}}},Jte=Bi.defineIntegration(lct),pct=Bi.convertIntegrationFnToClass(zte,Jte);Vf.Hapi=pct;Vf.hapiErrorPlugin=Yte;Vf.hapiIntegration=Jte;Vf.hapiTracingPlugin=Kte});var $te=y(ai=>{c();Object.defineProperty(ai,"__esModule",{value:!0});var dct=fx(),fct=vx(),hct=Ax(),mct=Tx(),gct=Sx(),yct=yx(),vct=hx(),bct=Ct(),Ict=Cx(),_ct=kx(),Cct=Nx(),xct=Lx(),Sct=WG();ai.Console=dct.Console;ai.Http=fct.Http;ai.OnUncaughtException=hct.OnUncaughtException;ai.OnUnhandledRejection=mct.OnUnhandledRejection;ai.Modules=gct.Modules;ai.ContextLines=yct.ContextLines;ai.Context=vct.Context;ai.RequestData=bct.RequestData;ai.LocalVariables=Ict.LocalVariables;ai.Undici=_ct.Undici;ai.Spotlight=Cct.Spotlight;ai.Anr=xct.Anr;ai.Hapi=Sct.Hapi});var Qte=y(oc=>{c();Object.defineProperty(oc,"__esModule",{value:!0});var ap=eG();oc.Apollo=ap.Apollo;oc.Express=ap.Express;oc.GraphQL=ap.GraphQL;oc.Mongo=ap.Mongo;oc.Mysql=ap.Mysql;oc.Postgres=ap.Postgres;oc.Prisma=ap.Prisma});var Wx=y(DG=>{c();Object.defineProperty(DG,"__esModule",{value:!0});var wct=[["january","1"],["february","2"],["march","3"],["april","4"],["may","5"],["june","6"],["july","7"],["august","8"],["september","9"],["october","10"],["november","11"],["december","12"],["jan","1"],["feb","2"],["mar","3"],["apr","4"],["may","5"],["jun","6"],["jul","7"],["aug","8"],["sep","9"],["oct","10"],["nov","11"],["dec","12"],["sunday","0"],["monday","1"],["tuesday","2"],["wednesday","3"],["thursday","4"],["friday","5"],["saturday","6"],["sun","0"],["mon","1"],["tue","2"],["wed","3"],["thu","4"],["fri","5"],["sat","6"]];function Ect(e){return wct.reduce((t,[r,n])=>t.replace(new RegExp(r,"gi"),n),e)}DG.replaceCronNames=Ect});var nre=y(qG=>{c();Object.defineProperty(qG,"__esModule",{value:!0});var ere=Ct(),tre=Wx(),rre="Automatic instrumentation of CronJob only supports crontab string";function Act(e,t){let r=!1;return new Proxy(e,{construct(n,i){let[s,o,a,u,p,...d]=i;if(typeof s!="string")throw new Error(rre);if(r)throw new Error(`A job named '${t}' has already been scheduled`);r=!0;let h=tre.replaceCronNames(s);function m(g,v){return ere.withMonitor(t,()=>o(g,v),{schedule:{type:"crontab",value:h},...p?{timeZone:p}:{}})}return new n(s,m,a,u,p,...d)},get(n,i){return i==="from"?s=>{let{cronTime:o,onTick:a,timeZone:u}=s;if(typeof o!="string")throw new Error(rre);if(r)throw new Error(`A job named '${t}' has already been scheduled`);r=!0;let p=tre.replaceCronNames(o);return s.onTick=(d,h)=>ere.withMonitor(t,()=>a(d,h),{schedule:{type:"crontab",value:p},...u?{timeZone:u}:{}}),n.from(s)}:n[i]}})}qG.instrumentCron=Act});var sre=y(VG=>{c();var{_optionalChain:ire}=ge();Object.defineProperty(VG,"__esModule",{value:!0});var Rct=Ct(),Tct=Wx();function Nct(e){return new Proxy(e,{get(t,r){return r==="schedule"&&t.schedule?new Proxy(t.schedule,{apply(n,i,s){let[o,,a]=s;if(!ire([a,"optionalAccess",u=>u.name]))throw new Error('Missing "name" for scheduled job. A name is required for Sentry check-in monitoring.');return Rct.withMonitor(a.name,()=>n.apply(i,s),{schedule:{type:"crontab",value:Tct.replaceCronNames(o)},timezone:ire([a,"optionalAccess",u=>u.timezone])})}}):t[r]}})}VG.instrumentNodeCron=Nct});var ore=y(HG=>{c();Object.defineProperty(HG,"__esModule",{value:!0});var Bct=Ct(),kct=Wx();function Oct(e){return new Proxy(e,{get(t,r){return r==="scheduleJob"?new Proxy(t.scheduleJob,{apply(n,i,s){let[o,a]=s;if(typeof o!="string"||typeof a!="string")throw new Error("Automatic instrumentation of 'node-schedule' requires the first parameter of 'scheduleJob' to be a job name string and the second parameter to be a crontab string");let u=o,p=a;return Bct.withMonitor(u,()=>n.apply(i,s),{schedule:{type:"crontab",value:kct.replaceCronNames(p)}})}}):t[r]}})}HG.instrumentNodeSchedule=Oct});var pre=y(ve=>{c();Object.defineProperty(ve,"__esModule",{value:!0});var Fe=Ct(),Gct=Iee(),Fct=iG(),Lct=pG(),Iy=kG(),MG=ge(),Zct=Ote(),are=BG(),Pct=Dte(),Wct=Mte(),Dct=$te(),qct=Qte(),Vct=fx(),Hct=Ax(),Mct=Tx(),Uct=Sx(),jct=yx(),Xct=hx(),Yct=Cx(),Kct=Nx(),zct=Lx(),cre=WG(),ure=kx(),lre=vx(),Jct=nre(),$ct=sre(),Qct=ore(),eut=are.createGetModuleFromFilename(),tut={...Fe.Integrations,...Dct,...qct},rut={instrumentCron:Jct.instrumentCron,instrumentNodeCron:$ct.instrumentNodeCron,instrumentNodeSchedule:Qct.instrumentNodeSchedule};ve.Hub=Fe.Hub;ve.SDK_VERSION=Fe.SDK_VERSION;ve.SEMANTIC_ATTRIBUTE_SENTRY_OP=Fe.SEMANTIC_ATTRIBUTE_SENTRY_OP;ve.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN=Fe.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN;ve.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE=Fe.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE;ve.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE=Fe.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE;ve.Scope=Fe.Scope;ve.addBreadcrumb=Fe.addBreadcrumb;ve.addEventProcessor=Fe.addEventProcessor;ve.addGlobalEventProcessor=Fe.addGlobalEventProcessor;ve.addIntegration=Fe.addIntegration;ve.captureCheckIn=Fe.captureCheckIn;ve.captureEvent=Fe.captureEvent;ve.captureException=Fe.captureException;ve.captureMessage=Fe.captureMessage;ve.captureSession=Fe.captureSession;ve.close=Fe.close;ve.configureScope=Fe.configureScope;ve.continueTrace=Fe.continueTrace;ve.createTransport=Fe.createTransport;ve.endSession=Fe.endSession;ve.extractTraceparentData=Fe.extractTraceparentData;ve.flush=Fe.flush;ve.functionToStringIntegration=Fe.functionToStringIntegration;ve.getActiveSpan=Fe.getActiveSpan;ve.getActiveTransaction=Fe.getActiveTransaction;ve.getClient=Fe.getClient;ve.getCurrentHub=Fe.getCurrentHub;ve.getCurrentScope=Fe.getCurrentScope;ve.getGlobalScope=Fe.getGlobalScope;ve.getHubFromCarrier=Fe.getHubFromCarrier;ve.getIsolationScope=Fe.getIsolationScope;ve.getSpanStatusFromHttpCode=Fe.getSpanStatusFromHttpCode;ve.inboundFiltersIntegration=Fe.inboundFiltersIntegration;ve.isInitialized=Fe.isInitialized;ve.lastEventId=Fe.lastEventId;ve.linkedErrorsIntegration=Fe.linkedErrorsIntegration;ve.makeMain=Fe.makeMain;ve.metrics=Fe.metrics;ve.parameterize=Fe.parameterize;ve.requestDataIntegration=Fe.requestDataIntegration;ve.runWithAsyncContext=Fe.runWithAsyncContext;ve.setContext=Fe.setContext;ve.setCurrentClient=Fe.setCurrentClient;ve.setExtra=Fe.setExtra;ve.setExtras=Fe.setExtras;ve.setHttpStatus=Fe.setHttpStatus;ve.setMeasurement=Fe.setMeasurement;ve.setTag=Fe.setTag;ve.setTags=Fe.setTags;ve.setUser=Fe.setUser;ve.spanStatusfromHttpCode=Fe.spanStatusfromHttpCode;ve.startActiveSpan=Fe.startActiveSpan;ve.startInactiveSpan=Fe.startInactiveSpan;ve.startSession=Fe.startSession;ve.startSpan=Fe.startSpan;ve.startSpanManual=Fe.startSpanManual;ve.startTransaction=Fe.startTransaction;ve.trace=Fe.trace;ve.withActiveSpan=Fe.withActiveSpan;ve.withIsolationScope=Fe.withIsolationScope;ve.withMonitor=Fe.withMonitor;ve.withScope=Fe.withScope;ve.autoDiscoverNodePerformanceMonitoringIntegrations=Gct.autoDiscoverNodePerformanceMonitoringIntegrations;ve.NodeClient=Fct.NodeClient;ve.makeNodeTransport=Lct.makeNodeTransport;ve.defaultIntegrations=Iy.defaultIntegrations;ve.defaultStackParser=Iy.defaultStackParser;ve.getDefaultIntegrations=Iy.getDefaultIntegrations;ve.getSentryRelease=Iy.getSentryRelease;ve.init=Iy.init;ve.DEFAULT_USER_INCLUDES=MG.DEFAULT_USER_INCLUDES;ve.addRequestDataToEvent=MG.addRequestDataToEvent;ve.extractRequestData=MG.extractRequestData;ve.deepReadDirSync=Zct.deepReadDirSync;ve.createGetModuleFromFilename=are.createGetModuleFromFilename;ve.enableAnrDetection=Pct.enableAnrDetection;ve.Handlers=Wct;ve.consoleIntegration=Vct.consoleIntegration;ve.onUncaughtExceptionIntegration=Hct.onUncaughtExceptionIntegration;ve.onUnhandledRejectionIntegration=Mct.onUnhandledRejectionIntegration;ve.modulesIntegration=Uct.modulesIntegration;ve.contextLinesIntegration=jct.contextLinesIntegration;ve.nodeContextIntegration=Xct.nodeContextIntegration;ve.localVariablesIntegration=Yct.localVariablesIntegration;ve.spotlightIntegration=Kct.spotlightIntegration;ve.anrIntegration=zct.anrIntegration;ve.hapiErrorPlugin=cre.hapiErrorPlugin;ve.hapiIntegration=cre.hapiIntegration;ve.Undici=ure.Undici;ve.nativeNodeFetchintegration=ure.nativeNodeFetchintegration;ve.Http=lre.Http;ve.httpIntegration=lre.httpIntegration;ve.Integrations=tut;ve.cron=rut;ve.getModuleFromFilename=eut});var Hf=y((vrr,nut)=>{nut.exports={name:"@ampt/cli",version:"1.1.22",description:"Ampt command line interface",main:"./dist/index.js",types:"./types/index.d.ts",engines:{node:">=18.0.0 <25.0.0"},publishConfig:{access:"public"},bin:{ampt:"./bin/bin"},scripts:{prepublishOnly:"npm run build",build:"node esbuild.mjs",watch:"node esbuild.mjs --watch",pack:"npm run build && npm pack",test:'LOG_LEVEL=silent AWS_REGION=us-east-1 NODE_OPTIONS="--no-warnings --experimental-vm-modules" jest',eslint:"eslint .",prettier:"prettier --check .",typecheck:"tsc -b ."},author:"Ampt Inc <hello@getampt.com>",license:"Apache-2.0",optionalDependencies:{fsevents:"~2.3.2"},babel:{presets:["@babel/preset-typescript"]},devDependencies:{"@astrojs/webapi":"^1.1.1","@sentry/esbuild-plugin":"^2.16.0","@sentry/node":"^7.107.0","@types/express":"^4.17.13","@types/http-proxy":"^1.17.8","@types/write-file-atomic":"^4.0.0","@types/ws":"^8.5.3","adm-zip":"^0.5.5","ansi-escapes":"^4.3.1",axios:"^1.6.5","axios-retry":"^4.0.0",chalk:"^4.1.0","child-process-ext":"^2.1.1",chokidar:"^3.5.0",chunk:"^0.0.3",dayjs:"^1.10.4",debounce:"^1.2.1",del:"^6.0.0",figures:"^3.2.0","fs-extra":"^9.0.1","get-port":"^5.0.0","git-list-updated":"^1.2.1","github-release-from-cc-changelog":"^2.2.0","http-proxy":"^1.18.1",ignore:"^5.2.0","is-git-url":"^1.0.0","is-installed-globally":"^0.4.0","it-parallel":"^2.0.1","jwt-decode":"^3.1.2",keypress:"^0.2.1","lz4-wasm-nodejs":"^0.9.2",minimist:"^1.2.5","node-emoji":"^1.10.0","node-resolve":"^1.3.4","normalize-path":"^3.0.0",open:"^8.2.0","parse-packagejson-name":"^1.0.1",pluralize:"^8.0.0",ramda:"^0.27.2",semver:"^5.7.1","strip-ansi":"^6.0.0",terminate:"^2.5.0","tree-kill":"^1.2.2",ulid:"^2.3.0",which:"^2.0.2","write-file-atomic":"^4.0.2"},dependencies:{esbuild:"^0.19.5",joycon:"^3.1.1",pirates:"^4.0.6","source-map-support":"^0.5.21","tsconfig-paths":"^4.2.0"}}});var dre,An,iut,sut,_y,UG,Pt,sa=ae(()=>{"use strict";c();dre=xe(o$()),An=xe(pre());dr();Mf();({version:iut}=Hf()),sut=()=>{var e;return(process.env.AMPT_STAGE==="prod"||((e=process.env.AMPT_ENDPOINT)==null?void 0:e.endsWith("ampt.dev")))&&!process.env.JEST_WORKER_ID};sut()&&An.init({release:iut,dsn:"https://5f27cbf3265a475abff6b7999ae73179@o1265020.ingest.us.sentry.io/6448443",tracesSampleRate:.5});UG=class{constructor(){Cr(this,"orgName");Cr(this,"user");Cr(this,"config");Cm(this,_y,(0,dre.ulid)());Cr(this,"auth");Cr(this,"captureException",t=>{ia.error({err:t},"captureException"),An==null||An.captureException(t)})}getSessionId(){return To(this,_y)}loadAmptConfig(){this.config=jG(),ia.debug({config:this.config},"loadAmptConfig")}getLoggedInUser(){var t;if(this.config||this.loadAmptConfig(),this.config&&((t=this.config)!=null&&t.userId)){let{sessions:r}=this.config,n=r==null?void 0:r[this.config.userId];if(n!=null&&n.accessToken&&(this.auth={accessToken:n.accessToken}),n&&n.username&&n.refreshToken)return{userId:this.config.userId,username:n.username,name:n.name,email:n.email,expiresAt:n.expiresAt,refreshToken:n.refreshToken,accessToken:n.accessToken}}return null}saveConfig(t){this.config={...this.config,...t},XG(this.config)}updateLogin(t){if(this.config){let r=this.getLoggedInUser();if(r&&r.userId){let n=Date.now()+t.expiresIn*1e3,{userId:i,username:s,name:o,email:a,refreshToken:u}=r;this.saveConfig({userId:i,sessions:{[i]:{userId:i,username:s,name:o,email:a,refreshToken:u,accessToken:t.accessToken,expiresAt:n}}})}}}storeToken(t,r){this.auth={accessToken:t},this.updateLogin({accessToken:t,expiresIn:r})}writeUpdateCheck(){let t=Math.round(Date.now()/1e3);this.config&&this.saveConfig({...this.config,meta:{...this.config.meta,last_update_check:t}})}shouldCheckForCliUpdate(){var t;if(this.config){let r=(t=this.config.meta)==null?void 0:t.last_update_check,n=Math.round(Date.now()/1e3);return!r||n-r>60*60*24*7}return!0}setUser(t){this.user=t,An==null||An.setUser({userId:t.userId,username:t.username,email:t.email,fullName:t.name,userAgeDays:t.userAgeDays,auth0Id:t.auth0Id})}onLogin(t,r){if(t){let{refreshToken:n,accessToken:i,expiresIn:s}=r,o=Date.now()+s*1e3;this.saveConfig({userId:t.userId,meta:{created_at:Math.round(Date.now()/1e3)},sessions:{[t.userId]:{userId:t.userId,username:t.username,name:t.name,email:t.email,refreshToken:n,accessToken:i,expiresAt:o}}}),ia.debug({userName:t.username},"saved config file"),this.setUser(t),ia.debug({userName:t.username},"set user in session")}}shouldPromptTutorial(){var t,r,n,i,s,o,a,u,p;if((t=this.user)!=null&&t.preferences){let d=((n=(r=this.user)==null?void 0:r.preferences)==null?void 0:n.connectedCount)>=3,h=((i=this.user)==null?void 0:i.userAgeDays)&&((s=this.user)==null?void 0:s.userAgeDays)>30;return{showTutorial:((a=(o=this.user)==null?void 0:o.preferences)==null?void 0:a.showTutorial)===void 0?!0:(p=(u=this.user)==null?void 0:u.preferences)==null?void 0:p.showTutorial,allowDismiss:h?!0:d}}return{showTutorial:!1,allowDismiss:!1}}setSentryContext(t){let r={...t,sessionId:To(this,_y)};An==null||An.setTags(r),An==null||An.setContext("cli-session",r)}async flushSentry(){return An==null?void 0:An.flush()}};_y=new WeakMap;Pt=new UG});var Dx,qx,Cu,YG,_e,ia,Mf=ae(()=>{"use strict";c();Dx=xe(i$()),qx=xe(require("path")),Cu=xe(cl());sa();YG=class{logger;enabled;logFilePath;logToConsole;pinoArgs;pinoDestination;initLogDestination(){try{(0,Cu.removeSync)(this.logFilePath)}catch(t){process.env.AMPT_DEBUG&&console.error("Error removing log file: ",t)}finally{if(this.enabled)try{(0,Cu.ensureFileSync)(this.logFilePath)}catch{this.enabled=!1}}this.pinoDestination=this.enabled&&!this.logToConsole?Dx.default.destination({dest:this.logFilePath,sync:process.platform!=="win32"}):void 0}constructor(){this.enabled=!process.env.AMPT_DISABLE_LOGS,this.logFilePath=process.env.AMPT_LOG_DIR||qx.default.join(process.cwd(),".ampt","logs"),this.logToConsole=process.env.AMPT_LOG_TO_CONSOLE==="true",this.initLogDestination(),this.pinoArgs={enabled:this.enabled,level:process.env.AMPT_LOG_LEVEL||"info",mixin:()=>({sessionId:Pt.getSessionId()}),redact:{remove:!0,paths:["credentials","accessKey","token","idToken","refreshToken","accessToken"]}},this.logger=(0,Dx.default)(this.pinoArgs,this.pinoDestination)}disable(){this.enabled=!1}enable(){this.enabled=!0;let t=qx.default.join(process.cwd(),".ampt");this.logFilePath=process.env.AMPT_LOG_DIR||qx.default.join(t,"logs"),(0,Cu.existsSync)(t)||(0,Cu.mkdirSync)(t),this.initLogDestination(),this.pinoArgs={...this.pinoArgs,enabled:this.enabled},this.logger=(0,Dx.default)(this.pinoArgs,this.pinoDestination)}child(t){return this.logger.child(t)}debug(...t){this.enabled&&this.logger.debug(...t)}warn(...t){this.enabled&&this.logger.warn(...t)}error(...t){this.enabled&&this.logger.error(...t)}info(...t){this.enabled&&this.logger.info(...t)}fatal(...t){this.enabled&&this.logger.fatal(...t)}trace(...t){this.enabled&&this.logger.trace(...t)}},_e=new YG,ia=_e});var hre,fre,out,KG,zG,ze,Grr,JG=ae(()=>{"use strict";c();hre=xe(require("https"));W_();Xz();Mf();sa();({version:fre}=Hf()),out=new hre.default.Agent({keepAlive:!0}),KG=class e{axios;static config(){return{apiEndpoint:process.env.AMPT_ENDPOINT,apiKey:process.env.AMPT_API_KEY}}constructor(){this.axios=Go.create({httpsAgent:out}),D_(this.axios,{retries:10,retryDelay:D_.exponentialDelay,retryCondition:t=>{var s;let r=t.response&&t.response.status||"unknown",n=t.response&&t.response.data&&t.response.data.message||"unknown",i=D_.isNetworkOrIdempotentRequestError(t)&&r!==500||r===429||r===503;return i&&ia.debug({status:r,message:n,response:(s=t.response)==null?void 0:s.data},"retryable request error"),i}}),this.axios.defaults.headers.common={},this.axios.defaults.headers.put={},this.axios.defaults.headers.get={}}async request(t={}){var I,x,_,A,E,S,w,T,D,L,W,k,F,B;let{apiEndpoint:r,apiKey:n}=e.config(),i=t.root||r,s=(I=Pt.auth)==null?void 0:I.accessToken,{method:o="POST",params:a,headers:u={},body:p,endpoint:d}=t,{url:h=`${i}${d}`,responseType:m}=t;n&&h.startsWith(r)?u.Authorization=`Basic ${n}`:s&&h.startsWith(r)&&(u.Authorization=`Bearer ${s}`),p&&d&&(u["Content-Type"]="application/json");let g=Pt.getSessionId();d&&(u["User-Agent"]=`ampt-cli/${fre}`,u["ampt-version"]=fre,u["ampt-session-id"]=g);let v={url:h,method:o,headers:u,params:a,data:p,maxContentLength:1/0,maxBodyLength:1/0,onUploadProgress:t.onUploadProgress};m&&(v.responseType=m);try{return ia.debug({method:o,url:h,sessionId:g},"request"),(await this.axios(v)).data}catch(M){if(((x=M.response)==null?void 0:x.status)===403&&((A=(_=M.response)==null?void 0:_.data)==null?void 0:A.code)==="EXPIRED_TOKEN")return ia.debug({status:M.response.status,code:M.response.data.code},"Token expired, refreshing"),await((E=Pt.user)==null?void 0:E.refreshAccessToken()),this.request(t);if(((S=M.response)==null?void 0:S.status)===403){let Y=new Error("Forbidden");throw Y.message="You do not have permission to access this resource.",Y.name="ForbiddenError",Y}if(((w=M.response)==null?void 0:w.status)===404)return;if(((T=M.response)==null?void 0:T.status)===409){let Y=new Error("Conflict");throw Y.message="Conflict",Y.name="ConflictError",Y}if(ia.error({status:(D=M.response)==null?void 0:D.status,data:(L=M.response)==null?void 0:L.data},"request error"),M.response&&M.response.data){let Y=new Error(M.response.data.message||M.response.data);throw(W=M.response.data.message)!=null&&W.includes("Request Entity Too Large")?(Y.message="Your code size is too large. Try reducing it by adding to .deployignore",Y.name="EntityTooLargeError"):(k=M.response.data.message)!=null&&k.includes("User disabled")?(Y.message=M.response.data.detail||"Your account has been disabled. Please contact support@getampt.com for more information.",Y.name="UserDisabledError"):(F=M.response.data.message)!=null&&F.includes("App limit reached")?(Y.message="You have reached your Organization's app limit. Please upgrade your plan or delete an app.",Y.name="AppLimitReachedError"):(B=M.response.data.message)!=null&&B.includes("Instance limit reached")?(Y.message="You have reached your Organization's environment limit. Please upgrade your plan or delete an environment.",Y.name="EnvironmentLimitReachedError"):Y.name=M.response.data.name||null,Y.statusCode=M.response.data.statusCode||M.response.status||null,Y}throw M}}},zG=new KG,ze=zG.request.bind(zG),Grr=zG.request});var mre,gre=ae(()=>{"use strict";c();mre=async(e,t)=>{let r,n=new Promise(i=>{r=setTimeout(()=>i(null),t)});return Promise.race([e,n]).then(i=>(clearTimeout(r),i))}});var Vx,yre=ae(()=>{"use strict";c();Vx=e=>e?e===0?"less than a second":e===1?"1 second":`${e} seconds`:"a few seconds"});var xu,$G=ae(()=>{"use strict";c();xu=async e=>new Promise(t=>setTimeout(t,e).unref())});var fr,QG,eF=ae(()=>{"use strict";c();dr();sa();fr=e=>{(async()=>{let{eventName:t,eventData:r={}}=e,n=Pt.orgName;if(!n){_e.warn({eventName:t},"Could not send report - no org name found");return}try{await ze({method:"POST",body:{eventName:t,eventData:{...r,shell:!0}},endpoint:`/orgs/${n}/analytics`})}catch(i){Pt.captureException(i),process.env.AMPT_DEBUG&&console.error(i)}})()},QG=fr});async function Hx(e){try{let t="https://ampt.dev/public/templates/manifest-tags.json",{data:r}=await Go.get(t);return r.filter(n=>n.tags.includes("starter"))}catch(t){return process.env.AMPT_DEBUG&&e.logError(t),[]}}var tF=ae(()=>{"use strict";c();W_()});var rF,vre,nF=ae(()=>{"use strict";c();rF=e=>{try{return process.kill(e,0)}catch(t){return t.code==="EPERM"}},vre=rF});async function Mx(e,t){let r=e.eventNames(),n=new Map;for(let i of r)n.set(i,e.listeners(i));try{return await t()}finally{e.removeAllListeners();for(let i of r)for(let s of n.get(i))e.on(i,s)}}var bre=ae(()=>{"use strict";c()});function Ire(e){e=e.trim();let t=0,r=null,n=null,i=null,s=[];for(let o=0;o<e.length;o++){if(r=n,n=e.charAt(o),n===" "&&!i){r!==" "&&t++;continue}if(n===i){i=null;continue}else if((n==="'"||n==='"')&&!i){i=n;continue}s[t]||(s[t]=""),s[t]+=n}return s}var _re=ae(()=>{"use strict";c()});var Cre=ae(()=>{"use strict";c()});var xre=y((Uf,Cy)=>{c();(function(){var e,t="4.17.21",r=200,n="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",i="Expected a function",s="Invalid `variable` option passed into `_.template`",o="__lodash_hash_undefined__",a=500,u="__lodash_placeholder__",p=1,d=2,h=4,m=1,g=2,v=1,I=2,x=4,_=8,A=16,E=32,S=64,w=128,T=256,D=512,L=30,W="...",k=800,F=16,B=1,M=2,Y=3,V=1/0,q=9007199254740991,te=17976931348623157e292,z=0/0,he=4294967295,fe=he-1,we=he>>>1,De=[["ary",w],["bind",v],["bindKey",I],["curry",_],["curryRight",A],["flip",D],["partial",E],["partialRight",S],["rearg",T]],Oe="[object Arguments]",Xe="[object Array]",Ze="[object AsyncFunction]",Re="[object Boolean]",gt="[object Date]",lt="[object DOMException]",Ce="[object Error]",Z="[object Function]",R="[object GeneratorFunction]",ne="[object Map]",J="[object Number]",rt="[object Null]",Je="[object Object]",Yt="[object Promise]",Ir="[object Proxy]",Yr="[object RegExp]",Pe="[object Set]",$t="[object String]",xn="[object Symbol]",zp="[object Undefined]",So="[object WeakMap]",Xu="[object WeakSet]",wo="[object ArrayBuffer]",G="[object DataView]",j="[object Float32Array]",K="[object Float64Array]",oe="[object Int8Array]",pe="[object Int16Array]",Te="[object Int32Array]",st="[object Uint8Array]",bt="[object Uint8ClampedArray]",tn="[object Uint16Array]",Wi="[object Uint32Array]",Gr=/\b__p \+= '';/g,Qe=/\b(__p \+=) '' \+/g,Ks=/(__e\(.*?\)|\b__t\)) \+\n'';/g,Bb=/&(?:amp|lt|gt|quot|#39);/g,Jp=/[&<>"']/g,kb=RegExp(Bb.source),Ob=RegExp(Jp.source),rm=/<%-([\s\S]+?)%>/g,Di=/<%([\s\S]+?)%>/g,nm=/<%=([\s\S]+?)%>/g,im=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Gb=/^\w*$/,sm=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Yu=/[\\^$.*+?()[\]{}|]/g,$p=RegExp(Yu.source),Ku=/^\s+/,Fb=/\s/,Lb=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Q1e=/\{\n\/\* \[wrapped with (.+)\] \*/,e2e=/,? & /,t2e=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,r2e=/[()=,{}\[\]\/\s]/,n2e=/\\(\\)?/g,i2e=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,CV=/\w*$/,s2e=/^[-+]0x[0-9a-f]+$/i,o2e=/^0b[01]+$/i,a2e=/^\[object .+?Constructor\]$/,c2e=/^0o[0-7]+$/i,u2e=/^(?:0|[1-9]\d*)$/,l2e=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Zb=/($^)/,p2e=/['\n\r\u2028\u2029\\]/g,Pb="\\ud800-\\udfff",d2e="\\u0300-\\u036f",f2e="\\ufe20-\\ufe2f",h2e="\\u20d0-\\u20ff",xV=d2e+f2e+h2e,SV="\\u2700-\\u27bf",wV="a-z\\xdf-\\xf6\\xf8-\\xff",m2e="\\xac\\xb1\\xd7\\xf7",g2e="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",y2e="\\u2000-\\u206f",v2e=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",EV="A-Z\\xc0-\\xd6\\xd8-\\xde",AV="\\ufe0e\\ufe0f",RV=m2e+g2e+y2e+v2e,ZA="['\u2019]",b2e="["+Pb+"]",TV="["+RV+"]",Wb="["+xV+"]",NV="\\d+",I2e="["+SV+"]",BV="["+wV+"]",kV="[^"+Pb+RV+NV+SV+wV+EV+"]",PA="\\ud83c[\\udffb-\\udfff]",_2e="(?:"+Wb+"|"+PA+")",OV="[^"+Pb+"]",WA="(?:\\ud83c[\\udde6-\\uddff]){2}",DA="[\\ud800-\\udbff][\\udc00-\\udfff]",Qp="["+EV+"]",GV="\\u200d",FV="(?:"+BV+"|"+kV+")",C2e="(?:"+Qp+"|"+kV+")",LV="(?:"+ZA+"(?:d|ll|m|re|s|t|ve))?",ZV="(?:"+ZA+"(?:D|LL|M|RE|S|T|VE))?",PV=_2e+"?",WV="["+AV+"]?",x2e="(?:"+GV+"(?:"+[OV,WA,DA].join("|")+")"+WV+PV+")*",S2e="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",w2e="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",DV=WV+PV+x2e,E2e="(?:"+[I2e,WA,DA].join("|")+")"+DV,A2e="(?:"+[OV+Wb+"?",Wb,WA,DA,b2e].join("|")+")",R2e=RegExp(ZA,"g"),T2e=RegExp(Wb,"g"),qA=RegExp(PA+"(?="+PA+")|"+A2e+DV,"g"),N2e=RegExp([Qp+"?"+BV+"+"+LV+"(?="+[TV,Qp,"$"].join("|")+")",C2e+"+"+ZV+"(?="+[TV,Qp+FV,"$"].join("|")+")",Qp+"?"+FV+"+"+LV,Qp+"+"+ZV,w2e,S2e,NV,E2e].join("|"),"g"),B2e=RegExp("["+GV+Pb+xV+AV+"]"),k2e=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,O2e=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],G2e=-1,ar={};ar[j]=ar[K]=ar[oe]=ar[pe]=ar[Te]=ar[st]=ar[bt]=ar[tn]=ar[Wi]=!0,ar[Oe]=ar[Xe]=ar[wo]=ar[Re]=ar[G]=ar[gt]=ar[Ce]=ar[Z]=ar[ne]=ar[J]=ar[Je]=ar[Yr]=ar[Pe]=ar[$t]=ar[So]=!1;var nr={};nr[Oe]=nr[Xe]=nr[wo]=nr[G]=nr[Re]=nr[gt]=nr[j]=nr[K]=nr[oe]=nr[pe]=nr[Te]=nr[ne]=nr[J]=nr[Je]=nr[Yr]=nr[Pe]=nr[$t]=nr[xn]=nr[st]=nr[bt]=nr[tn]=nr[Wi]=!0,nr[Ce]=nr[Z]=nr[So]=!1;var F2e={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"s"},L2e={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},Z2e={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"},P2e={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},W2e=parseFloat,D2e=parseInt,qV=typeof global=="object"&&global&&global.Object===Object&&global,q2e=typeof self=="object"&&self&&self.Object===Object&&self,dn=qV||q2e||Function("return this")(),VA=typeof Uf=="object"&&Uf&&!Uf.nodeType&&Uf,zu=VA&&typeof Cy=="object"&&Cy&&!Cy.nodeType&&Cy,VV=zu&&zu.exports===VA,HA=VV&&qV.process,us=function(){try{var $=zu&&zu.require&&zu.require("util").types;return $||HA&&HA.binding&&HA.binding("util")}catch{}}(),HV=us&&us.isArrayBuffer,MV=us&&us.isDate,UV=us&&us.isMap,jV=us&&us.isRegExp,XV=us&&us.isSet,YV=us&&us.isTypedArray;function qi($,ce,se){switch(se.length){case 0:return $.call(ce);case 1:return $.call(ce,se[0]);case 2:return $.call(ce,se[0],se[1]);case 3:return $.call(ce,se[0],se[1],se[2])}return $.apply(ce,se)}function V2e($,ce,se,Be){for(var ot=-1,Ft=$==null?0:$.length;++ot<Ft;){var rn=$[ot];ce(Be,rn,se(rn),$)}return Be}function ls($,ce){for(var se=-1,Be=$==null?0:$.length;++se<Be&&ce($[se],se,$)!==!1;);return $}function H2e($,ce){for(var se=$==null?0:$.length;se--&&ce($[se],se,$)!==!1;);return $}function KV($,ce){for(var se=-1,Be=$==null?0:$.length;++se<Be;)if(!ce($[se],se,$))return!1;return!0}function Oc($,ce){for(var se=-1,Be=$==null?0:$.length,ot=0,Ft=[];++se<Be;){var rn=$[se];ce(rn,se,$)&&(Ft[ot++]=rn)}return Ft}function Db($,ce){var se=$==null?0:$.length;return!!se&&ed($,ce,0)>-1}function MA($,ce,se){for(var Be=-1,ot=$==null?0:$.length;++Be<ot;)if(se(ce,$[Be]))return!0;return!1}function ur($,ce){for(var se=-1,Be=$==null?0:$.length,ot=Array(Be);++se<Be;)ot[se]=ce($[se],se,$);return ot}function Gc($,ce){for(var se=-1,Be=ce.length,ot=$.length;++se<Be;)$[ot+se]=ce[se];return $}function UA($,ce,se,Be){var ot=-1,Ft=$==null?0:$.length;for(Be&&Ft&&(se=$[++ot]);++ot<Ft;)se=ce(se,$[ot],ot,$);return se}function M2e($,ce,se,Be){var ot=$==null?0:$.length;for(Be&&ot&&(se=$[--ot]);ot--;)se=ce(se,$[ot],ot,$);return se}function jA($,ce){for(var se=-1,Be=$==null?0:$.length;++se<Be;)if(ce($[se],se,$))return!0;return!1}var U2e=XA("length");function j2e($){return $.split("")}function X2e($){return $.match(t2e)||[]}function zV($,ce,se){var Be;return se($,function(ot,Ft,rn){if(ce(ot,Ft,rn))return Be=Ft,!1}),Be}function qb($,ce,se,Be){for(var ot=$.length,Ft=se+(Be?1:-1);Be?Ft--:++Ft<ot;)if(ce($[Ft],Ft,$))return Ft;return-1}function ed($,ce,se){return ce===ce?ske($,ce,se):qb($,JV,se)}function Y2e($,ce,se,Be){for(var ot=se-1,Ft=$.length;++ot<Ft;)if(Be($[ot],ce))return ot;return-1}function JV($){return $!==$}function $V($,ce){var se=$==null?0:$.length;return se?KA($,ce)/se:z}function XA($){return function(ce){return ce==null?e:ce[$]}}function YA($){return function(ce){return $==null?e:$[ce]}}function QV($,ce,se,Be,ot){return ot($,function(Ft,rn,Qt){se=Be?(Be=!1,Ft):ce(se,Ft,rn,Qt)}),se}function K2e($,ce){var se=$.length;for($.sort(ce);se--;)$[se]=$[se].value;return $}function KA($,ce){for(var se,Be=-1,ot=$.length;++Be<ot;){var Ft=ce($[Be]);Ft!==e&&(se=se===e?Ft:se+Ft)}return se}function zA($,ce){for(var se=-1,Be=Array($);++se<$;)Be[se]=ce(se);return Be}function z2e($,ce){return ur(ce,function(se){return[se,$[se]]})}function eH($){return $&&$.slice(0,iH($)+1).replace(Ku,"")}function Vi($){return function(ce){return $(ce)}}function JA($,ce){return ur(ce,function(se){return $[se]})}function om($,ce){return $.has(ce)}function tH($,ce){for(var se=-1,Be=$.length;++se<Be&&ed(ce,$[se],0)>-1;);return se}function rH($,ce){for(var se=$.length;se--&&ed(ce,$[se],0)>-1;);return se}function J2e($,ce){for(var se=$.length,Be=0;se--;)$[se]===ce&&++Be;return Be}var $2e=YA(F2e),Q2e=YA(L2e);function eke($){return"\\"+P2e[$]}function tke($,ce){return $==null?e:$[ce]}function td($){return B2e.test($)}function rke($){return k2e.test($)}function nke($){for(var ce,se=[];!(ce=$.next()).done;)se.push(ce.value);return se}function $A($){var ce=-1,se=Array($.size);return $.forEach(function(Be,ot){se[++ce]=[ot,Be]}),se}function nH($,ce){return function(se){return $(ce(se))}}function Fc($,ce){for(var se=-1,Be=$.length,ot=0,Ft=[];++se<Be;){var rn=$[se];(rn===ce||rn===u)&&($[se]=u,Ft[ot++]=se)}return Ft}function Vb($){var ce=-1,se=Array($.size);return $.forEach(function(Be){se[++ce]=Be}),se}function ike($){var ce=-1,se=Array($.size);return $.forEach(function(Be){se[++ce]=[Be,Be]}),se}function ske($,ce,se){for(var Be=se-1,ot=$.length;++Be<ot;)if($[Be]===ce)return Be;return-1}function oke($,ce,se){for(var Be=se+1;Be--;)if($[Be]===ce)return Be;return Be}function rd($){return td($)?cke($):U2e($)}function zs($){return td($)?uke($):j2e($)}function iH($){for(var ce=$.length;ce--&&Fb.test($.charAt(ce)););return ce}var ake=YA(Z2e);function cke($){for(var ce=qA.lastIndex=0;qA.test($);)++ce;return ce}function uke($){return $.match(qA)||[]}function lke($){return $.match(N2e)||[]}var pke=function $(ce){ce=ce==null?dn:Lc.defaults(dn.Object(),ce,Lc.pick(dn,O2e));var se=ce.Array,Be=ce.Date,ot=ce.Error,Ft=ce.Function,rn=ce.Math,Qt=ce.Object,QA=ce.RegExp,dke=ce.String,ps=ce.TypeError,Hb=se.prototype,fke=Ft.prototype,nd=Qt.prototype,Mb=ce["__core-js_shared__"],Ub=fke.toString,Dt=nd.hasOwnProperty,hke=0,sH=function(){var l=/[^.]+$/.exec(Mb&&Mb.keys&&Mb.keys.IE_PROTO||"");return l?"Symbol(src)_1."+l:""}(),jb=nd.toString,mke=Ub.call(Qt),gke=dn._,yke=QA("^"+Ub.call(Dt).replace(Yu,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Xb=VV?ce.Buffer:e,Zc=ce.Symbol,Yb=ce.Uint8Array,oH=Xb?Xb.allocUnsafe:e,Kb=nH(Qt.getPrototypeOf,Qt),aH=Qt.create,cH=nd.propertyIsEnumerable,zb=Hb.splice,uH=Zc?Zc.isConcatSpreadable:e,am=Zc?Zc.iterator:e,Ju=Zc?Zc.toStringTag:e,Jb=function(){try{var l=rl(Qt,"defineProperty");return l({},"",{}),l}catch{}}(),vke=ce.clearTimeout!==dn.clearTimeout&&ce.clearTimeout,bke=Be&&Be.now!==dn.Date.now&&Be.now,Ike=ce.setTimeout!==dn.setTimeout&&ce.setTimeout,$b=rn.ceil,Qb=rn.floor,eR=Qt.getOwnPropertySymbols,_ke=Xb?Xb.isBuffer:e,lH=ce.isFinite,Cke=Hb.join,xke=nH(Qt.keys,Qt),nn=rn.max,Pn=rn.min,Ske=Be.now,wke=ce.parseInt,pH=rn.random,Eke=Hb.reverse,tR=rl(ce,"DataView"),cm=rl(ce,"Map"),rR=rl(ce,"Promise"),id=rl(ce,"Set"),um=rl(ce,"WeakMap"),lm=rl(Qt,"create"),eI=um&&new um,sd={},Ake=nl(tR),Rke=nl(cm),Tke=nl(rR),Nke=nl(id),Bke=nl(um),tI=Zc?Zc.prototype:e,pm=tI?tI.valueOf:e,dH=tI?tI.toString:e;function O(l){if(Rr(l)&&!pt(l)&&!(l instanceof _t)){if(l instanceof ds)return l;if(Dt.call(l,"__wrapped__"))return fM(l)}return new ds(l)}var od=function(){function l(){}return function(f){if(!_r(f))return{};if(aH)return aH(f);l.prototype=f;var b=new l;return l.prototype=e,b}}();function rI(){}function ds(l,f){this.__wrapped__=l,this.__actions__=[],this.__chain__=!!f,this.__index__=0,this.__values__=e}O.templateSettings={escape:rm,evaluate:Di,interpolate:nm,variable:"",imports:{_:O}},O.prototype=rI.prototype,O.prototype.constructor=O,ds.prototype=od(rI.prototype),ds.prototype.constructor=ds;function _t(l){this.__wrapped__=l,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=he,this.__views__=[]}function kke(){var l=new _t(this.__wrapped__);return l.__actions__=mi(this.__actions__),l.__dir__=this.__dir__,l.__filtered__=this.__filtered__,l.__iteratees__=mi(this.__iteratees__),l.__takeCount__=this.__takeCount__,l.__views__=mi(this.__views__),l}function Oke(){if(this.__filtered__){var l=new _t(this);l.__dir__=-1,l.__filtered__=!0}else l=this.clone(),l.__dir__*=-1;return l}function Gke(){var l=this.__wrapped__.value(),f=this.__dir__,b=pt(l),C=f<0,N=b?l.length:0,P=jOe(0,N,this.__views__),U=P.start,X=P.end,Q=X-U,le=C?X:U-1,de=this.__iteratees__,ye=de.length,Ae=0,He=Pn(Q,this.__takeCount__);if(!b||!C&&N==Q&&He==Q)return LH(l,this.__actions__);var et=[];e:for(;Q--&&Ae<He;){le+=f;for(var mt=-1,tt=l[le];++mt<ye;){var It=de[mt],Et=It.iteratee,Ui=It.type,ri=Et(tt);if(Ui==M)tt=ri;else if(!ri){if(Ui==B)continue e;break e}}et[Ae++]=tt}return et}_t.prototype=od(rI.prototype),_t.prototype.constructor=_t;function $u(l){var f=-1,b=l==null?0:l.length;for(this.clear();++f<b;){var C=l[f];this.set(C[0],C[1])}}function Fke(){this.__data__=lm?lm(null):{},this.size=0}function Lke(l){var f=this.has(l)&&delete this.__data__[l];return this.size-=f?1:0,f}function Zke(l){var f=this.__data__;if(lm){var b=f[l];return b===o?e:b}return Dt.call(f,l)?f[l]:e}function Pke(l){var f=this.__data__;return lm?f[l]!==e:Dt.call(f,l)}function Wke(l,f){var b=this.__data__;return this.size+=this.has(l)?0:1,b[l]=lm&&f===e?o:f,this}$u.prototype.clear=Fke,$u.prototype.delete=Lke,$u.prototype.get=Zke,$u.prototype.has=Pke,$u.prototype.set=Wke;function Ea(l){var f=-1,b=l==null?0:l.length;for(this.clear();++f<b;){var C=l[f];this.set(C[0],C[1])}}function Dke(){this.__data__=[],this.size=0}function qke(l){var f=this.__data__,b=nI(f,l);if(b<0)return!1;var C=f.length-1;return b==C?f.pop():zb.call(f,b,1),--this.size,!0}function Vke(l){var f=this.__data__,b=nI(f,l);return b<0?e:f[b][1]}function Hke(l){return nI(this.__data__,l)>-1}function Mke(l,f){var b=this.__data__,C=nI(b,l);return C<0?(++this.size,b.push([l,f])):b[C][1]=f,this}Ea.prototype.clear=Dke,Ea.prototype.delete=qke,Ea.prototype.get=Vke,Ea.prototype.has=Hke,Ea.prototype.set=Mke;function Aa(l){var f=-1,b=l==null?0:l.length;for(this.clear();++f<b;){var C=l[f];this.set(C[0],C[1])}}function Uke(){this.size=0,this.__data__={hash:new $u,map:new(cm||Ea),string:new $u}}function jke(l){var f=mI(this,l).delete(l);return this.size-=f?1:0,f}function Xke(l){return mI(this,l).get(l)}function Yke(l){return mI(this,l).has(l)}function Kke(l,f){var b=mI(this,l),C=b.size;return b.set(l,f),this.size+=b.size==C?0:1,this}Aa.prototype.clear=Uke,Aa.prototype.delete=jke,Aa.prototype.get=Xke,Aa.prototype.has=Yke,Aa.prototype.set=Kke;function Qu(l){var f=-1,b=l==null?0:l.length;for(this.__data__=new Aa;++f<b;)this.add(l[f])}function zke(l){return this.__data__.set(l,o),this}function Jke(l){return this.__data__.has(l)}Qu.prototype.add=Qu.prototype.push=zke,Qu.prototype.has=Jke;function Js(l){var f=this.__data__=new Ea(l);this.size=f.size}function $ke(){this.__data__=new Ea,this.size=0}function Qke(l){var f=this.__data__,b=f.delete(l);return this.size=f.size,b}function eOe(l){return this.__data__.get(l)}function tOe(l){return this.__data__.has(l)}function rOe(l,f){var b=this.__data__;if(b instanceof Ea){var C=b.__data__;if(!cm||C.length<r-1)return C.push([l,f]),this.size=++b.size,this;b=this.__data__=new Aa(C)}return b.set(l,f),this.size=b.size,this}Js.prototype.clear=$ke,Js.prototype.delete=Qke,Js.prototype.get=eOe,Js.prototype.has=tOe,Js.prototype.set=rOe;function fH(l,f){var b=pt(l),C=!b&&il(l),N=!b&&!C&&Vc(l),P=!b&&!C&&!N&&ld(l),U=b||C||N||P,X=U?zA(l.length,dke):[],Q=X.length;for(var le in l)(f||Dt.call(l,le))&&!(U&&(le=="length"||N&&(le=="offset"||le=="parent")||P&&(le=="buffer"||le=="byteLength"||le=="byteOffset")||Ba(le,Q)))&&X.push(le);return X}function hH(l){var f=l.length;return f?l[fR(0,f-1)]:e}function nOe(l,f){return gI(mi(l),el(f,0,l.length))}function iOe(l){return gI(mi(l))}function nR(l,f,b){(b!==e&&!$s(l[f],b)||b===e&&!(f in l))&&Ra(l,f,b)}function dm(l,f,b){var C=l[f];(!(Dt.call(l,f)&&$s(C,b))||b===e&&!(f in l))&&Ra(l,f,b)}function nI(l,f){for(var b=l.length;b--;)if($s(l[b][0],f))return b;return-1}function sOe(l,f,b,C){return Pc(l,function(N,P,U){f(C,N,b(N),U)}),C}function mH(l,f){return l&&Ao(f,fn(f),l)}function oOe(l,f){return l&&Ao(f,yi(f),l)}function Ra(l,f,b){f=="__proto__"&&Jb?Jb(l,f,{configurable:!0,enumerable:!0,value:b,writable:!0}):l[f]=b}function iR(l,f){for(var b=-1,C=f.length,N=se(C),P=l==null;++b<C;)N[b]=P?e:PR(l,f[b]);return N}function el(l,f,b){return l===l&&(b!==e&&(l=l<=b?l:b),f!==e&&(l=l>=f?l:f)),l}function fs(l,f,b,C,N,P){var U,X=f&p,Q=f&d,le=f&h;if(b&&(U=N?b(l,C,N,P):b(l)),U!==e)return U;if(!_r(l))return l;var de=pt(l);if(de){if(U=YOe(l),!X)return mi(l,U)}else{var ye=Wn(l),Ae=ye==Z||ye==R;if(Vc(l))return WH(l,X);if(ye==Je||ye==Oe||Ae&&!N){if(U=Q||Ae?{}:iM(l),!X)return Q?ZOe(l,oOe(U,l)):LOe(l,mH(U,l))}else{if(!nr[ye])return N?l:{};U=KOe(l,ye,X)}}P||(P=new Js);var He=P.get(l);if(He)return He;P.set(l,U),OM(l)?l.forEach(function(tt){U.add(fs(tt,f,b,tt,l,P))}):BM(l)&&l.forEach(function(tt,It){U.set(It,fs(tt,f,b,It,l,P))});var et=le?Q?SR:xR:Q?yi:fn,mt=de?e:et(l);return ls(mt||l,function(tt,It){mt&&(It=tt,tt=l[It]),dm(U,It,fs(tt,f,b,It,l,P))}),U}function aOe(l){var f=fn(l);return function(b){return gH(b,l,f)}}function gH(l,f,b){var C=b.length;if(l==null)return!C;for(l=Qt(l);C--;){var N=b[C],P=f[N],U=l[N];if(U===e&&!(N in l)||!P(U))return!1}return!0}function yH(l,f,b){if(typeof l!="function")throw new ps(i);return bm(function(){l.apply(e,b)},f)}function fm(l,f,b,C){var N=-1,P=Db,U=!0,X=l.length,Q=[],le=f.length;if(!X)return Q;b&&(f=ur(f,Vi(b))),C?(P=MA,U=!1):f.length>=r&&(P=om,U=!1,f=new Qu(f));e:for(;++N<X;){var de=l[N],ye=b==null?de:b(de);if(de=C||de!==0?de:0,U&&ye===ye){for(var Ae=le;Ae--;)if(f[Ae]===ye)continue e;Q.push(de)}else P(f,ye,C)||Q.push(de)}return Q}var Pc=MH(Eo),vH=MH(oR,!0);function cOe(l,f){var b=!0;return Pc(l,function(C,N,P){return b=!!f(C,N,P),b}),b}function iI(l,f,b){for(var C=-1,N=l.length;++C<N;){var P=l[C],U=f(P);if(U!=null&&(X===e?U===U&&!Mi(U):b(U,X)))var X=U,Q=P}return Q}function uOe(l,f,b,C){var N=l.length;for(b=ht(b),b<0&&(b=-b>N?0:N+b),C=C===e||C>N?N:ht(C),C<0&&(C+=N),C=b>C?0:FM(C);b<C;)l[b++]=f;return l}function bH(l,f){var b=[];return Pc(l,function(C,N,P){f(C,N,P)&&b.push(C)}),b}function Sn(l,f,b,C,N){var P=-1,U=l.length;for(b||(b=JOe),N||(N=[]);++P<U;){var X=l[P];f>0&&b(X)?f>1?Sn(X,f-1,b,C,N):Gc(N,X):C||(N[N.length]=X)}return N}var sR=UH(),IH=UH(!0);function Eo(l,f){return l&&sR(l,f,fn)}function oR(l,f){return l&&IH(l,f,fn)}function sI(l,f){return Oc(f,function(b){return ka(l[b])})}function tl(l,f){f=Dc(f,l);for(var b=0,C=f.length;l!=null&&b<C;)l=l[Ro(f[b++])];return b&&b==C?l:e}function _H(l,f,b){var C=f(l);return pt(l)?C:Gc(C,b(l))}function ei(l){return l==null?l===e?zp:rt:Ju&&Ju in Qt(l)?UOe(l):iGe(l)}function aR(l,f){return l>f}function lOe(l,f){return l!=null&&Dt.call(l,f)}function pOe(l,f){return l!=null&&f in Qt(l)}function dOe(l,f,b){return l>=Pn(f,b)&&l<nn(f,b)}function cR(l,f,b){for(var C=b?MA:Db,N=l[0].length,P=l.length,U=P,X=se(P),Q=1/0,le=[];U--;){var de=l[U];U&&f&&(de=ur(de,Vi(f))),Q=Pn(de.length,Q),X[U]=!b&&(f||N>=120&&de.length>=120)?new Qu(U&&de):e}de=l[0];var ye=-1,Ae=X[0];e:for(;++ye<N&&le.length<Q;){var He=de[ye],et=f?f(He):He;if(He=b||He!==0?He:0,!(Ae?om(Ae,et):C(le,et,b))){for(U=P;--U;){var mt=X[U];if(!(mt?om(mt,et):C(l[U],et,b)))continue e}Ae&&Ae.push(et),le.push(He)}}return le}function fOe(l,f,b,C){return Eo(l,function(N,P,U){f(C,b(N),P,U)}),C}function hm(l,f,b){f=Dc(f,l),l=cM(l,f);var C=l==null?l:l[Ro(ms(f))];return C==null?e:qi(C,l,b)}function CH(l){return Rr(l)&&ei(l)==Oe}function hOe(l){return Rr(l)&&ei(l)==wo}function mOe(l){return Rr(l)&&ei(l)==gt}function mm(l,f,b,C,N){return l===f?!0:l==null||f==null||!Rr(l)&&!Rr(f)?l!==l&&f!==f:gOe(l,f,b,C,mm,N)}function gOe(l,f,b,C,N,P){var U=pt(l),X=pt(f),Q=U?Xe:Wn(l),le=X?Xe:Wn(f);Q=Q==Oe?Je:Q,le=le==Oe?Je:le;var de=Q==Je,ye=le==Je,Ae=Q==le;if(Ae&&Vc(l)){if(!Vc(f))return!1;U=!0,de=!1}if(Ae&&!de)return P||(P=new Js),U||ld(l)?tM(l,f,b,C,N,P):HOe(l,f,Q,b,C,N,P);if(!(b&m)){var He=de&&Dt.call(l,"__wrapped__"),et=ye&&Dt.call(f,"__wrapped__");if(He||et){var mt=He?l.value():l,tt=et?f.value():f;return P||(P=new Js),N(mt,tt,b,C,P)}}return Ae?(P||(P=new Js),MOe(l,f,b,C,N,P)):!1}function yOe(l){return Rr(l)&&Wn(l)==ne}function uR(l,f,b,C){var N=b.length,P=N,U=!C;if(l==null)return!P;for(l=Qt(l);N--;){var X=b[N];if(U&&X[2]?X[1]!==l[X[0]]:!(X[0]in l))return!1}for(;++N<P;){X=b[N];var Q=X[0],le=l[Q],de=X[1];if(U&&X[2]){if(le===e&&!(Q in l))return!1}else{var ye=new Js;if(C)var Ae=C(le,de,Q,l,f,ye);if(!(Ae===e?mm(de,le,m|g,C,ye):Ae))return!1}}return!0}function xH(l){if(!_r(l)||QOe(l))return!1;var f=ka(l)?yke:a2e;return f.test(nl(l))}function vOe(l){return Rr(l)&&ei(l)==Yr}function bOe(l){return Rr(l)&&Wn(l)==Pe}function IOe(l){return Rr(l)&&CI(l.length)&&!!ar[ei(l)]}function SH(l){return typeof l=="function"?l:l==null?vi:typeof l=="object"?pt(l)?AH(l[0],l[1]):EH(l):jM(l)}function lR(l){if(!vm(l))return xke(l);var f=[];for(var b in Qt(l))Dt.call(l,b)&&b!="constructor"&&f.push(b);return f}function _Oe(l){if(!_r(l))return nGe(l);var f=vm(l),b=[];for(var C in l)C=="constructor"&&(f||!Dt.call(l,C))||b.push(C);return b}function pR(l,f){return l<f}function wH(l,f){var b=-1,C=gi(l)?se(l.length):[];return Pc(l,function(N,P,U){C[++b]=f(N,P,U)}),C}function EH(l){var f=ER(l);return f.length==1&&f[0][2]?oM(f[0][0],f[0][1]):function(b){return b===l||uR(b,l,f)}}function AH(l,f){return RR(l)&&sM(f)?oM(Ro(l),f):function(b){var C=PR(b,l);return C===e&&C===f?WR(b,l):mm(f,C,m|g)}}function oI(l,f,b,C,N){l!==f&&sR(f,function(P,U){if(N||(N=new Js),_r(P))COe(l,f,U,b,oI,C,N);else{var X=C?C(NR(l,U),P,U+"",l,f,N):e;X===e&&(X=P),nR(l,U,X)}},yi)}function COe(l,f,b,C,N,P,U){var X=NR(l,b),Q=NR(f,b),le=U.get(Q);if(le){nR(l,b,le);return}var de=P?P(X,Q,b+"",l,f,U):e,ye=de===e;if(ye){var Ae=pt(Q),He=!Ae&&Vc(Q),et=!Ae&&!He&&ld(Q);de=Q,Ae||He||et?pt(X)?de=X:Fr(X)?de=mi(X):He?(ye=!1,de=WH(Q,!0)):et?(ye=!1,de=DH(Q,!0)):de=[]:Im(Q)||il(Q)?(de=X,il(X)?de=LM(X):(!_r(X)||ka(X))&&(de=iM(Q))):ye=!1}ye&&(U.set(Q,de),N(de,Q,C,P,U),U.delete(Q)),nR(l,b,de)}function RH(l,f){var b=l.length;if(b)return f+=f<0?b:0,Ba(f,b)?l[f]:e}function TH(l,f,b){f.length?f=ur(f,function(P){return pt(P)?function(U){return tl(U,P.length===1?P[0]:P)}:P}):f=[vi];var C=-1;f=ur(f,Vi($e()));var N=wH(l,function(P,U,X){var Q=ur(f,function(le){return le(P)});return{criteria:Q,index:++C,value:P}});return K2e(N,function(P,U){return FOe(P,U,b)})}function xOe(l,f){return NH(l,f,function(b,C){return WR(l,C)})}function NH(l,f,b){for(var C=-1,N=f.length,P={};++C<N;){var U=f[C],X=tl(l,U);b(X,U)&&gm(P,Dc(U,l),X)}return P}function SOe(l){return function(f){return tl(f,l)}}function dR(l,f,b,C){var N=C?Y2e:ed,P=-1,U=f.length,X=l;for(l===f&&(f=mi(f)),b&&(X=ur(l,Vi(b)));++P<U;)for(var Q=0,le=f[P],de=b?b(le):le;(Q=N(X,de,Q,C))>-1;)X!==l&&zb.call(X,Q,1),zb.call(l,Q,1);return l}function BH(l,f){for(var b=l?f.length:0,C=b-1;b--;){var N=f[b];if(b==C||N!==P){var P=N;Ba(N)?zb.call(l,N,1):gR(l,N)}}return l}function fR(l,f){return l+Qb(pH()*(f-l+1))}function wOe(l,f,b,C){for(var N=-1,P=nn($b((f-l)/(b||1)),0),U=se(P);P--;)U[C?P:++N]=l,l+=b;return U}function hR(l,f){var b="";if(!l||f<1||f>q)return b;do f%2&&(b+=l),f=Qb(f/2),f&&(l+=l);while(f);return b}function yt(l,f){return BR(aM(l,f,vi),l+"")}function EOe(l){return hH(pd(l))}function AOe(l,f){var b=pd(l);return gI(b,el(f,0,b.length))}function gm(l,f,b,C){if(!_r(l))return l;f=Dc(f,l);for(var N=-1,P=f.length,U=P-1,X=l;X!=null&&++N<P;){var Q=Ro(f[N]),le=b;if(Q==="__proto__"||Q==="constructor"||Q==="prototype")return l;if(N!=U){var de=X[Q];le=C?C(de,Q,X):e,le===e&&(le=_r(de)?de:Ba(f[N+1])?[]:{})}dm(X,Q,le),X=X[Q]}return l}var kH=eI?function(l,f){return eI.set(l,f),l}:vi,ROe=Jb?function(l,f){return Jb(l,"toString",{configurable:!0,enumerable:!1,value:qR(f),writable:!0})}:vi;function TOe(l){return gI(pd(l))}function hs(l,f,b){var C=-1,N=l.length;f<0&&(f=-f>N?0:N+f),b=b>N?N:b,b<0&&(b+=N),N=f>b?0:b-f>>>0,f>>>=0;for(var P=se(N);++C<N;)P[C]=l[C+f];return P}function NOe(l,f){var b;return Pc(l,function(C,N,P){return b=f(C,N,P),!b}),!!b}function aI(l,f,b){var C=0,N=l==null?C:l.length;if(typeof f=="number"&&f===f&&N<=we){for(;C<N;){var P=C+N>>>1,U=l[P];U!==null&&!Mi(U)&&(b?U<=f:U<f)?C=P+1:N=P}return N}return mR(l,f,vi,b)}function mR(l,f,b,C){var N=0,P=l==null?0:l.length;if(P===0)return 0;f=b(f);for(var U=f!==f,X=f===null,Q=Mi(f),le=f===e;N<P;){var de=Qb((N+P)/2),ye=b(l[de]),Ae=ye!==e,He=ye===null,et=ye===ye,mt=Mi(ye);if(U)var tt=C||et;else le?tt=et&&(C||Ae):X?tt=et&&Ae&&(C||!He):Q?tt=et&&Ae&&!He&&(C||!mt):He||mt?tt=!1:tt=C?ye<=f:ye<f;tt?N=de+1:P=de}return Pn(P,fe)}function OH(l,f){for(var b=-1,C=l.length,N=0,P=[];++b<C;){var U=l[b],X=f?f(U):U;if(!b||!$s(X,Q)){var Q=X;P[N++]=U===0?0:U}}return P}function GH(l){return typeof l=="number"?l:Mi(l)?z:+l}function Hi(l){if(typeof l=="string")return l;if(pt(l))return ur(l,Hi)+"";if(Mi(l))return dH?dH.call(l):"";var f=l+"";return f=="0"&&1/l==-V?"-0":f}function Wc(l,f,b){var C=-1,N=Db,P=l.length,U=!0,X=[],Q=X;if(b)U=!1,N=MA;else if(P>=r){var le=f?null:qOe(l);if(le)return Vb(le);U=!1,N=om,Q=new Qu}else Q=f?[]:X;e:for(;++C<P;){var de=l[C],ye=f?f(de):de;if(de=b||de!==0?de:0,U&&ye===ye){for(var Ae=Q.length;Ae--;)if(Q[Ae]===ye)continue e;f&&Q.push(ye),X.push(de)}else N(Q,ye,b)||(Q!==X&&Q.push(ye),X.push(de))}return X}function gR(l,f){return f=Dc(f,l),l=cM(l,f),l==null||delete l[Ro(ms(f))]}function FH(l,f,b,C){return gm(l,f,b(tl(l,f)),C)}function cI(l,f,b,C){for(var N=l.length,P=C?N:-1;(C?P--:++P<N)&&f(l[P],P,l););return b?hs(l,C?0:P,C?P+1:N):hs(l,C?P+1:0,C?N:P)}function LH(l,f){var b=l;return b instanceof _t&&(b=b.value()),UA(f,function(C,N){return N.func.apply(N.thisArg,Gc([C],N.args))},b)}function yR(l,f,b){var C=l.length;if(C<2)return C?Wc(l[0]):[];for(var N=-1,P=se(C);++N<C;)for(var U=l[N],X=-1;++X<C;)X!=N&&(P[N]=fm(P[N]||U,l[X],f,b));return Wc(Sn(P,1),f,b)}function ZH(l,f,b){for(var C=-1,N=l.length,P=f.length,U={};++C<N;){var X=C<P?f[C]:e;b(U,l[C],X)}return U}function vR(l){return Fr(l)?l:[]}function bR(l){return typeof l=="function"?l:vi}function Dc(l,f){return pt(l)?l:RR(l,f)?[l]:dM(Zt(l))}var BOe=yt;function qc(l,f,b){var C=l.length;return b=b===e?C:b,!f&&b>=C?l:hs(l,f,b)}var PH=vke||function(l){return dn.clearTimeout(l)};function WH(l,f){if(f)return l.slice();var b=l.length,C=oH?oH(b):new l.constructor(b);return l.copy(C),C}function IR(l){var f=new l.constructor(l.byteLength);return new Yb(f).set(new Yb(l)),f}function kOe(l,f){var b=f?IR(l.buffer):l.buffer;return new l.constructor(b,l.byteOffset,l.byteLength)}function OOe(l){var f=new l.constructor(l.source,CV.exec(l));return f.lastIndex=l.lastIndex,f}function GOe(l){return pm?Qt(pm.call(l)):{}}function DH(l,f){var b=f?IR(l.buffer):l.buffer;return new l.constructor(b,l.byteOffset,l.length)}function qH(l,f){if(l!==f){var b=l!==e,C=l===null,N=l===l,P=Mi(l),U=f!==e,X=f===null,Q=f===f,le=Mi(f);if(!X&&!le&&!P&&l>f||P&&U&&Q&&!X&&!le||C&&U&&Q||!b&&Q||!N)return 1;if(!C&&!P&&!le&&l<f||le&&b&&N&&!C&&!P||X&&b&&N||!U&&N||!Q)return-1}return 0}function FOe(l,f,b){for(var C=-1,N=l.criteria,P=f.criteria,U=N.length,X=b.length;++C<U;){var Q=qH(N[C],P[C]);if(Q){if(C>=X)return Q;var le=b[C];return Q*(le=="desc"?-1:1)}}return l.index-f.index}function VH(l,f,b,C){for(var N=-1,P=l.length,U=b.length,X=-1,Q=f.length,le=nn(P-U,0),de=se(Q+le),ye=!C;++X<Q;)de[X]=f[X];for(;++N<U;)(ye||N<P)&&(de[b[N]]=l[N]);for(;le--;)de[X++]=l[N++];return de}function HH(l,f,b,C){for(var N=-1,P=l.length,U=-1,X=b.length,Q=-1,le=f.length,de=nn(P-X,0),ye=se(de+le),Ae=!C;++N<de;)ye[N]=l[N];for(var He=N;++Q<le;)ye[He+Q]=f[Q];for(;++U<X;)(Ae||N<P)&&(ye[He+b[U]]=l[N++]);return ye}function mi(l,f){var b=-1,C=l.length;for(f||(f=se(C));++b<C;)f[b]=l[b];return f}function Ao(l,f,b,C){var N=!b;b||(b={});for(var P=-1,U=f.length;++P<U;){var X=f[P],Q=C?C(b[X],l[X],X,b,l):e;Q===e&&(Q=l[X]),N?Ra(b,X,Q):dm(b,X,Q)}return b}function LOe(l,f){return Ao(l,AR(l),f)}function ZOe(l,f){return Ao(l,rM(l),f)}function uI(l,f){return function(b,C){var N=pt(b)?V2e:sOe,P=f?f():{};return N(b,l,$e(C,2),P)}}function ad(l){return yt(function(f,b){var C=-1,N=b.length,P=N>1?b[N-1]:e,U=N>2?b[2]:e;for(P=l.length>3&&typeof P=="function"?(N--,P):e,U&&ti(b[0],b[1],U)&&(P=N<3?e:P,N=1),f=Qt(f);++C<N;){var X=b[C];X&&l(f,X,C,P)}return f})}function MH(l,f){return function(b,C){if(b==null)return b;if(!gi(b))return l(b,C);for(var N=b.length,P=f?N:-1,U=Qt(b);(f?P--:++P<N)&&C(U[P],P,U)!==!1;);return b}}function UH(l){return function(f,b,C){for(var N=-1,P=Qt(f),U=C(f),X=U.length;X--;){var Q=U[l?X:++N];if(b(P[Q],Q,P)===!1)break}return f}}function POe(l,f,b){var C=f&v,N=ym(l);function P(){var U=this&&this!==dn&&this instanceof P?N:l;return U.apply(C?b:this,arguments)}return P}function jH(l){return function(f){f=Zt(f);var b=td(f)?zs(f):e,C=b?b[0]:f.charAt(0),N=b?qc(b,1).join(""):f.slice(1);return C[l]()+N}}function cd(l){return function(f){return UA(MM(HM(f).replace(R2e,"")),l,"")}}function ym(l){return function(){var f=arguments;switch(f.length){case 0:return new l;case 1:return new l(f[0]);case 2:return new l(f[0],f[1]);case 3:return new l(f[0],f[1],f[2]);case 4:return new l(f[0],f[1],f[2],f[3]);case 5:return new l(f[0],f[1],f[2],f[3],f[4]);case 6:return new l(f[0],f[1],f[2],f[3],f[4],f[5]);case 7:return new l(f[0],f[1],f[2],f[3],f[4],f[5],f[6])}var b=od(l.prototype),C=l.apply(b,f);return _r(C)?C:b}}function WOe(l,f,b){var C=ym(l);function N(){for(var P=arguments.length,U=se(P),X=P,Q=ud(N);X--;)U[X]=arguments[X];var le=P<3&&U[0]!==Q&&U[P-1]!==Q?[]:Fc(U,Q);if(P-=le.length,P<b)return JH(l,f,lI,N.placeholder,e,U,le,e,e,b-P);var de=this&&this!==dn&&this instanceof N?C:l;return qi(de,this,U)}return N}function XH(l){return function(f,b,C){var N=Qt(f);if(!gi(f)){var P=$e(b,3);f=fn(f),b=function(X){return P(N[X],X,N)}}var U=l(f,b,C);return U>-1?N[P?f[U]:U]:e}}function YH(l){return Na(function(f){var b=f.length,C=b,N=ds.prototype.thru;for(l&&f.reverse();C--;){var P=f[C];if(typeof P!="function")throw new ps(i);if(N&&!U&&hI(P)=="wrapper")var U=new ds([],!0)}for(C=U?C:b;++C<b;){P=f[C];var X=hI(P),Q=X=="wrapper"?wR(P):e;Q&&TR(Q[0])&&Q[1]==(w|_|E|T)&&!Q[4].length&&Q[9]==1?U=U[hI(Q[0])].apply(U,Q[3]):U=P.length==1&&TR(P)?U[X]():U.thru(P)}return function(){var le=arguments,de=le[0];if(U&&le.length==1&&pt(de))return U.plant(de).value();for(var ye=0,Ae=b?f[ye].apply(this,le):de;++ye<b;)Ae=f[ye].call(this,Ae);return Ae}})}function lI(l,f,b,C,N,P,U,X,Q,le){var de=f&w,ye=f&v,Ae=f&I,He=f&(_|A),et=f&D,mt=Ae?e:ym(l);function tt(){for(var It=arguments.length,Et=se(It),Ui=It;Ui--;)Et[Ui]=arguments[Ui];if(He)var ri=ud(tt),ji=J2e(Et,ri);if(C&&(Et=VH(Et,C,N,He)),P&&(Et=HH(Et,P,U,He)),It-=ji,He&&It<le){var Lr=Fc(Et,ri);return JH(l,f,lI,tt.placeholder,b,Et,Lr,X,Q,le-It)}var Qs=ye?b:this,Ga=Ae?Qs[l]:l;return It=Et.length,X?Et=sGe(Et,X):et&&It>1&&Et.reverse(),de&&Q<It&&(Et.length=Q),this&&this!==dn&&this instanceof tt&&(Ga=mt||ym(Ga)),Ga.apply(Qs,Et)}return tt}function KH(l,f){return function(b,C){return fOe(b,l,f(C),{})}}function pI(l,f){return function(b,C){var N;if(b===e&&C===e)return f;if(b!==e&&(N=b),C!==e){if(N===e)return C;typeof b=="string"||typeof C=="string"?(b=Hi(b),C=Hi(C)):(b=GH(b),C=GH(C)),N=l(b,C)}return N}}function _R(l){return Na(function(f){return f=ur(f,Vi($e())),yt(function(b){var C=this;return l(f,function(N){return qi(N,C,b)})})})}function dI(l,f){f=f===e?" ":Hi(f);var b=f.length;if(b<2)return b?hR(f,l):f;var C=hR(f,$b(l/rd(f)));return td(f)?qc(zs(C),0,l).join(""):C.slice(0,l)}function DOe(l,f,b,C){var N=f&v,P=ym(l);function U(){for(var X=-1,Q=arguments.length,le=-1,de=C.length,ye=se(de+Q),Ae=this&&this!==dn&&this instanceof U?P:l;++le<de;)ye[le]=C[le];for(;Q--;)ye[le++]=arguments[++X];return qi(Ae,N?b:this,ye)}return U}function zH(l){return function(f,b,C){return C&&typeof C!="number"&&ti(f,b,C)&&(b=C=e),f=Oa(f),b===e?(b=f,f=0):b=Oa(b),C=C===e?f<b?1:-1:Oa(C),wOe(f,b,C,l)}}function fI(l){return function(f,b){return typeof f=="string"&&typeof b=="string"||(f=gs(f),b=gs(b)),l(f,b)}}function JH(l,f,b,C,N,P,U,X,Q,le){var de=f&_,ye=de?U:e,Ae=de?e:U,He=de?P:e,et=de?e:P;f|=de?E:S,f&=~(de?S:E),f&x||(f&=~(v|I));var mt=[l,f,N,He,ye,et,Ae,X,Q,le],tt=b.apply(e,mt);return TR(l)&&uM(tt,mt),tt.placeholder=C,lM(tt,l,f)}function CR(l){var f=rn[l];return function(b,C){if(b=gs(b),C=C==null?0:Pn(ht(C),292),C&&lH(b)){var N=(Zt(b)+"e").split("e"),P=f(N[0]+"e"+(+N[1]+C));return N=(Zt(P)+"e").split("e"),+(N[0]+"e"+(+N[1]-C))}return f(b)}}var qOe=id&&1/Vb(new id([,-0]))[1]==V?function(l){return new id(l)}:MR;function $H(l){return function(f){var b=Wn(f);return b==ne?$A(f):b==Pe?ike(f):z2e(f,l(f))}}function Ta(l,f,b,C,N,P,U,X){var Q=f&I;if(!Q&&typeof l!="function")throw new ps(i);var le=C?C.length:0;if(le||(f&=~(E|S),C=N=e),U=U===e?U:nn(ht(U),0),X=X===e?X:ht(X),le-=N?N.length:0,f&S){var de=C,ye=N;C=N=e}var Ae=Q?e:wR(l),He=[l,f,b,C,N,de,ye,P,U,X];if(Ae&&rGe(He,Ae),l=He[0],f=He[1],b=He[2],C=He[3],N=He[4],X=He[9]=He[9]===e?Q?0:l.length:nn(He[9]-le,0),!X&&f&(_|A)&&(f&=~(_|A)),!f||f==v)var et=POe(l,f,b);else f==_||f==A?et=WOe(l,f,X):(f==E||f==(v|E))&&!N.length?et=DOe(l,f,b,C):et=lI.apply(e,He);var mt=Ae?kH:uM;return lM(mt(et,He),l,f)}function QH(l,f,b,C){return l===e||$s(l,nd[b])&&!Dt.call(C,b)?f:l}function eM(l,f,b,C,N,P){return _r(l)&&_r(f)&&(P.set(f,l),oI(l,f,e,eM,P),P.delete(f)),l}function VOe(l){return Im(l)?e:l}function tM(l,f,b,C,N,P){var U=b&m,X=l.length,Q=f.length;if(X!=Q&&!(U&&Q>X))return!1;var le=P.get(l),de=P.get(f);if(le&&de)return le==f&&de==l;var ye=-1,Ae=!0,He=b&g?new Qu:e;for(P.set(l,f),P.set(f,l);++ye<X;){var et=l[ye],mt=f[ye];if(C)var tt=U?C(mt,et,ye,f,l,P):C(et,mt,ye,l,f,P);if(tt!==e){if(tt)continue;Ae=!1;break}if(He){if(!jA(f,function(It,Et){if(!om(He,Et)&&(et===It||N(et,It,b,C,P)))return He.push(Et)})){Ae=!1;break}}else if(!(et===mt||N(et,mt,b,C,P))){Ae=!1;break}}return P.delete(l),P.delete(f),Ae}function HOe(l,f,b,C,N,P,U){switch(b){case G:if(l.byteLength!=f.byteLength||l.byteOffset!=f.byteOffset)return!1;l=l.buffer,f=f.buffer;case wo:return!(l.byteLength!=f.byteLength||!P(new Yb(l),new Yb(f)));case Re:case gt:case J:return $s(+l,+f);case Ce:return l.name==f.name&&l.message==f.message;case Yr:case $t:return l==f+"";case ne:var X=$A;case Pe:var Q=C&m;if(X||(X=Vb),l.size!=f.size&&!Q)return!1;var le=U.get(l);if(le)return le==f;C|=g,U.set(l,f);var de=tM(X(l),X(f),C,N,P,U);return U.delete(l),de;case xn:if(pm)return pm.call(l)==pm.call(f)}return!1}function MOe(l,f,b,C,N,P){var U=b&m,X=xR(l),Q=X.length,le=xR(f),de=le.length;if(Q!=de&&!U)return!1;for(var ye=Q;ye--;){var Ae=X[ye];if(!(U?Ae in f:Dt.call(f,Ae)))return!1}var He=P.get(l),et=P.get(f);if(He&&et)return He==f&&et==l;var mt=!0;P.set(l,f),P.set(f,l);for(var tt=U;++ye<Q;){Ae=X[ye];var It=l[Ae],Et=f[Ae];if(C)var Ui=U?C(Et,It,Ae,f,l,P):C(It,Et,Ae,l,f,P);if(!(Ui===e?It===Et||N(It,Et,b,C,P):Ui)){mt=!1;break}tt||(tt=Ae=="constructor")}if(mt&&!tt){var ri=l.constructor,ji=f.constructor;ri!=ji&&"constructor"in l&&"constructor"in f&&!(typeof ri=="function"&&ri instanceof ri&&typeof ji=="function"&&ji instanceof ji)&&(mt=!1)}return P.delete(l),P.delete(f),mt}function Na(l){return BR(aM(l,e,gM),l+"")}function xR(l){return _H(l,fn,AR)}function SR(l){return _H(l,yi,rM)}var wR=eI?function(l){return eI.get(l)}:MR;function hI(l){for(var f=l.name+"",b=sd[f],C=Dt.call(sd,f)?b.length:0;C--;){var N=b[C],P=N.func;if(P==null||P==l)return N.name}return f}function ud(l){var f=Dt.call(O,"placeholder")?O:l;return f.placeholder}function $e(){var l=O.iteratee||VR;return l=l===VR?SH:l,arguments.length?l(arguments[0],arguments[1]):l}function mI(l,f){var b=l.__data__;return $Oe(f)?b[typeof f=="string"?"string":"hash"]:b.map}function ER(l){for(var f=fn(l),b=f.length;b--;){var C=f[b],N=l[C];f[b]=[C,N,sM(N)]}return f}function rl(l,f){var b=tke(l,f);return xH(b)?b:e}function UOe(l){var f=Dt.call(l,Ju),b=l[Ju];try{l[Ju]=e;var C=!0}catch{}var N=jb.call(l);return C&&(f?l[Ju]=b:delete l[Ju]),N}var AR=eR?function(l){return l==null?[]:(l=Qt(l),Oc(eR(l),function(f){return cH.call(l,f)}))}:UR,rM=eR?function(l){for(var f=[];l;)Gc(f,AR(l)),l=Kb(l);return f}:UR,Wn=ei;(tR&&Wn(new tR(new ArrayBuffer(1)))!=G||cm&&Wn(new cm)!=ne||rR&&Wn(rR.resolve())!=Yt||id&&Wn(new id)!=Pe||um&&Wn(new um)!=So)&&(Wn=function(l){var f=ei(l),b=f==Je?l.constructor:e,C=b?nl(b):"";if(C)switch(C){case Ake:return G;case Rke:return ne;case Tke:return Yt;case Nke:return Pe;case Bke:return So}return f});function jOe(l,f,b){for(var C=-1,N=b.length;++C<N;){var P=b[C],U=P.size;switch(P.type){case"drop":l+=U;break;case"dropRight":f-=U;break;case"take":f=Pn(f,l+U);break;case"takeRight":l=nn(l,f-U);break}}return{start:l,end:f}}function XOe(l){var f=l.match(Q1e);return f?f[1].split(e2e):[]}function nM(l,f,b){f=Dc(f,l);for(var C=-1,N=f.length,P=!1;++C<N;){var U=Ro(f[C]);if(!(P=l!=null&&b(l,U)))break;l=l[U]}return P||++C!=N?P:(N=l==null?0:l.length,!!N&&CI(N)&&Ba(U,N)&&(pt(l)||il(l)))}function YOe(l){var f=l.length,b=new l.constructor(f);return f&&typeof l[0]=="string"&&Dt.call(l,"index")&&(b.index=l.index,b.input=l.input),b}function iM(l){return typeof l.constructor=="function"&&!vm(l)?od(Kb(l)):{}}function KOe(l,f,b){var C=l.constructor;switch(f){case wo:return IR(l);case Re:case gt:return new C(+l);case G:return kOe(l,b);case j:case K:case oe:case pe:case Te:case st:case bt:case tn:case Wi:return DH(l,b);case ne:return new C;case J:case $t:return new C(l);case Yr:return OOe(l);case Pe:return new C;case xn:return GOe(l)}}function zOe(l,f){var b=f.length;if(!b)return l;var C=b-1;return f[C]=(b>1?"& ":"")+f[C],f=f.join(b>2?", ":" "),l.replace(Lb,`{
153
153
  /* [wrapped with `+f+`] */
154
154
  `)}function JOe(l){return pt(l)||il(l)||!!(uH&&l&&l[uH])}function Ba(l,f){var b=typeof l;return f=f??q,!!f&&(b=="number"||b!="symbol"&&u2e.test(l))&&l>-1&&l%1==0&&l<f}function ti(l,f,b){if(!_r(b))return!1;var C=typeof f;return(C=="number"?gi(b)&&Ba(f,b.length):C=="string"&&f in b)?$s(b[f],l):!1}function RR(l,f){if(pt(l))return!1;var b=typeof l;return b=="number"||b=="symbol"||b=="boolean"||l==null||Mi(l)?!0:Gb.test(l)||!im.test(l)||f!=null&&l in Qt(f)}function $Oe(l){var f=typeof l;return f=="string"||f=="number"||f=="symbol"||f=="boolean"?l!=="__proto__":l===null}function TR(l){var f=hI(l),b=O[f];if(typeof b!="function"||!(f in _t.prototype))return!1;if(l===b)return!0;var C=wR(b);return!!C&&l===C[0]}function QOe(l){return!!sH&&sH in l}var eGe=Mb?ka:jR;function vm(l){var f=l&&l.constructor,b=typeof f=="function"&&f.prototype||nd;return l===b}function sM(l){return l===l&&!_r(l)}function oM(l,f){return function(b){return b==null?!1:b[l]===f&&(f!==e||l in Qt(b))}}function tGe(l){var f=II(l,function(C){return b.size===a&&b.clear(),C}),b=f.cache;return f}function rGe(l,f){var b=l[1],C=f[1],N=b|C,P=N<(v|I|w),U=C==w&&b==_||C==w&&b==T&&l[7].length<=f[8]||C==(w|T)&&f[7].length<=f[8]&&b==_;if(!(P||U))return l;C&v&&(l[2]=f[2],N|=b&v?0:x);var X=f[3];if(X){var Q=l[3];l[3]=Q?VH(Q,X,f[4]):X,l[4]=Q?Fc(l[3],u):f[4]}return X=f[5],X&&(Q=l[5],l[5]=Q?HH(Q,X,f[6]):X,l[6]=Q?Fc(l[5],u):f[6]),X=f[7],X&&(l[7]=X),C&w&&(l[8]=l[8]==null?f[8]:Pn(l[8],f[8])),l[9]==null&&(l[9]=f[9]),l[0]=f[0],l[1]=N,l}function nGe(l){var f=[];if(l!=null)for(var b in Qt(l))f.push(b);return f}function iGe(l){return jb.call(l)}function aM(l,f,b){return f=nn(f===e?l.length-1:f,0),function(){for(var C=arguments,N=-1,P=nn(C.length-f,0),U=se(P);++N<P;)U[N]=C[f+N];N=-1;for(var X=se(f+1);++N<f;)X[N]=C[N];return X[f]=b(U),qi(l,this,X)}}function cM(l,f){return f.length<2?l:tl(l,hs(f,0,-1))}function sGe(l,f){for(var b=l.length,C=Pn(f.length,b),N=mi(l);C--;){var P=f[C];l[C]=Ba(P,b)?N[P]:e}return l}function NR(l,f){if(!(f==="constructor"&&typeof l[f]=="function")&&f!="__proto__")return l[f]}var uM=pM(kH),bm=Ike||function(l,f){return dn.setTimeout(l,f)},BR=pM(ROe);function lM(l,f,b){var C=f+"";return BR(l,zOe(C,oGe(XOe(C),b)))}function pM(l){var f=0,b=0;return function(){var C=Ske(),N=F-(C-b);if(b=C,N>0){if(++f>=k)return arguments[0]}else f=0;return l.apply(e,arguments)}}function gI(l,f){var b=-1,C=l.length,N=C-1;for(f=f===e?C:f;++b<f;){var P=fR(b,N),U=l[P];l[P]=l[b],l[b]=U}return l.length=f,l}var dM=tGe(function(l){var f=[];return l.charCodeAt(0)===46&&f.push(""),l.replace(sm,function(b,C,N,P){f.push(N?P.replace(n2e,"$1"):C||b)}),f});function Ro(l){if(typeof l=="string"||Mi(l))return l;var f=l+"";return f=="0"&&1/l==-V?"-0":f}function nl(l){if(l!=null){try{return Ub.call(l)}catch{}try{return l+""}catch{}}return""}function oGe(l,f){return ls(De,function(b){var C="_."+b[0];f&b[1]&&!Db(l,C)&&l.push(C)}),l.sort()}function fM(l){if(l instanceof _t)return l.clone();var f=new ds(l.__wrapped__,l.__chain__);return f.__actions__=mi(l.__actions__),f.__index__=l.__index__,f.__values__=l.__values__,f}function aGe(l,f,b){(b?ti(l,f,b):f===e)?f=1:f=nn(ht(f),0);var C=l==null?0:l.length;if(!C||f<1)return[];for(var N=0,P=0,U=se($b(C/f));N<C;)U[P++]=hs(l,N,N+=f);return U}function cGe(l){for(var f=-1,b=l==null?0:l.length,C=0,N=[];++f<b;){var P=l[f];P&&(N[C++]=P)}return N}function uGe(){var l=arguments.length;if(!l)return[];for(var f=se(l-1),b=arguments[0],C=l;C--;)f[C-1]=arguments[C];return Gc(pt(b)?mi(b):[b],Sn(f,1))}var lGe=yt(function(l,f){return Fr(l)?fm(l,Sn(f,1,Fr,!0)):[]}),pGe=yt(function(l,f){var b=ms(f);return Fr(b)&&(b=e),Fr(l)?fm(l,Sn(f,1,Fr,!0),$e(b,2)):[]}),dGe=yt(function(l,f){var b=ms(f);return Fr(b)&&(b=e),Fr(l)?fm(l,Sn(f,1,Fr,!0),e,b):[]});function fGe(l,f,b){var C=l==null?0:l.length;return C?(f=b||f===e?1:ht(f),hs(l,f<0?0:f,C)):[]}function hGe(l,f,b){var C=l==null?0:l.length;return C?(f=b||f===e?1:ht(f),f=C-f,hs(l,0,f<0?0:f)):[]}function mGe(l,f){return l&&l.length?cI(l,$e(f,3),!0,!0):[]}function gGe(l,f){return l&&l.length?cI(l,$e(f,3),!0):[]}function yGe(l,f,b,C){var N=l==null?0:l.length;return N?(b&&typeof b!="number"&&ti(l,f,b)&&(b=0,C=N),uOe(l,f,b,C)):[]}function hM(l,f,b){var C=l==null?0:l.length;if(!C)return-1;var N=b==null?0:ht(b);return N<0&&(N=nn(C+N,0)),qb(l,$e(f,3),N)}function mM(l,f,b){var C=l==null?0:l.length;if(!C)return-1;var N=C-1;return b!==e&&(N=ht(b),N=b<0?nn(C+N,0):Pn(N,C-1)),qb(l,$e(f,3),N,!0)}function gM(l){var f=l==null?0:l.length;return f?Sn(l,1):[]}function vGe(l){var f=l==null?0:l.length;return f?Sn(l,V):[]}function bGe(l,f){var b=l==null?0:l.length;return b?(f=f===e?1:ht(f),Sn(l,f)):[]}function IGe(l){for(var f=-1,b=l==null?0:l.length,C={};++f<b;){var N=l[f];C[N[0]]=N[1]}return C}function yM(l){return l&&l.length?l[0]:e}function _Ge(l,f,b){var C=l==null?0:l.length;if(!C)return-1;var N=b==null?0:ht(b);return N<0&&(N=nn(C+N,0)),ed(l,f,N)}function CGe(l){var f=l==null?0:l.length;return f?hs(l,0,-1):[]}var xGe=yt(function(l){var f=ur(l,vR);return f.length&&f[0]===l[0]?cR(f):[]}),SGe=yt(function(l){var f=ms(l),b=ur(l,vR);return f===ms(b)?f=e:b.pop(),b.length&&b[0]===l[0]?cR(b,$e(f,2)):[]}),wGe=yt(function(l){var f=ms(l),b=ur(l,vR);return f=typeof f=="function"?f:e,f&&b.pop(),b.length&&b[0]===l[0]?cR(b,e,f):[]});function EGe(l,f){return l==null?"":Cke.call(l,f)}function ms(l){var f=l==null?0:l.length;return f?l[f-1]:e}function AGe(l,f,b){var C=l==null?0:l.length;if(!C)return-1;var N=C;return b!==e&&(N=ht(b),N=N<0?nn(C+N,0):Pn(N,C-1)),f===f?oke(l,f,N):qb(l,JV,N,!0)}function RGe(l,f){return l&&l.length?RH(l,ht(f)):e}var TGe=yt(vM);function vM(l,f){return l&&l.length&&f&&f.length?dR(l,f):l}function NGe(l,f,b){return l&&l.length&&f&&f.length?dR(l,f,$e(b,2)):l}function BGe(l,f,b){return l&&l.length&&f&&f.length?dR(l,f,e,b):l}var kGe=Na(function(l,f){var b=l==null?0:l.length,C=iR(l,f);return BH(l,ur(f,function(N){return Ba(N,b)?+N:N}).sort(qH)),C});function OGe(l,f){var b=[];if(!(l&&l.length))return b;var C=-1,N=[],P=l.length;for(f=$e(f,3);++C<P;){var U=l[C];f(U,C,l)&&(b.push(U),N.push(C))}return BH(l,N),b}function kR(l){return l==null?l:Eke.call(l)}function GGe(l,f,b){var C=l==null?0:l.length;return C?(b&&typeof b!="number"&&ti(l,f,b)?(f=0,b=C):(f=f==null?0:ht(f),b=b===e?C:ht(b)),hs(l,f,b)):[]}function FGe(l,f){return aI(l,f)}function LGe(l,f,b){return mR(l,f,$e(b,2))}function ZGe(l,f){var b=l==null?0:l.length;if(b){var C=aI(l,f);if(C<b&&$s(l[C],f))return C}return-1}function PGe(l,f){return aI(l,f,!0)}function WGe(l,f,b){return mR(l,f,$e(b,2),!0)}function DGe(l,f){var b=l==null?0:l.length;if(b){var C=aI(l,f,!0)-1;if($s(l[C],f))return C}return-1}function qGe(l){return l&&l.length?OH(l):[]}function VGe(l,f){return l&&l.length?OH(l,$e(f,2)):[]}function HGe(l){var f=l==null?0:l.length;return f?hs(l,1,f):[]}function MGe(l,f,b){return l&&l.length?(f=b||f===e?1:ht(f),hs(l,0,f<0?0:f)):[]}function UGe(l,f,b){var C=l==null?0:l.length;return C?(f=b||f===e?1:ht(f),f=C-f,hs(l,f<0?0:f,C)):[]}function jGe(l,f){return l&&l.length?cI(l,$e(f,3),!1,!0):[]}function XGe(l,f){return l&&l.length?cI(l,$e(f,3)):[]}var YGe=yt(function(l){return Wc(Sn(l,1,Fr,!0))}),KGe=yt(function(l){var f=ms(l);return Fr(f)&&(f=e),Wc(Sn(l,1,Fr,!0),$e(f,2))}),zGe=yt(function(l){var f=ms(l);return f=typeof f=="function"?f:e,Wc(Sn(l,1,Fr,!0),e,f)});function JGe(l){return l&&l.length?Wc(l):[]}function $Ge(l,f){return l&&l.length?Wc(l,$e(f,2)):[]}function QGe(l,f){return f=typeof f=="function"?f:e,l&&l.length?Wc(l,e,f):[]}function OR(l){if(!(l&&l.length))return[];var f=0;return l=Oc(l,function(b){if(Fr(b))return f=nn(b.length,f),!0}),zA(f,function(b){return ur(l,XA(b))})}function bM(l,f){if(!(l&&l.length))return[];var b=OR(l);return f==null?b:ur(b,function(C){return qi(f,e,C)})}var eFe=yt(function(l,f){return Fr(l)?fm(l,f):[]}),tFe=yt(function(l){return yR(Oc(l,Fr))}),rFe=yt(function(l){var f=ms(l);return Fr(f)&&(f=e),yR(Oc(l,Fr),$e(f,2))}),nFe=yt(function(l){var f=ms(l);return f=typeof f=="function"?f:e,yR(Oc(l,Fr),e,f)}),iFe=yt(OR);function sFe(l,f){return ZH(l||[],f||[],dm)}function oFe(l,f){return ZH(l||[],f||[],gm)}var aFe=yt(function(l){var f=l.length,b=f>1?l[f-1]:e;return b=typeof b=="function"?(l.pop(),b):e,bM(l,b)});function IM(l){var f=O(l);return f.__chain__=!0,f}function cFe(l,f){return f(l),l}function yI(l,f){return f(l)}var uFe=Na(function(l){var f=l.length,b=f?l[0]:0,C=this.__wrapped__,N=function(P){return iR(P,l)};return f>1||this.__actions__.length||!(C instanceof _t)||!Ba(b)?this.thru(N):(C=C.slice(b,+b+(f?1:0)),C.__actions__.push({func:yI,args:[N],thisArg:e}),new ds(C,this.__chain__).thru(function(P){return f&&!P.length&&P.push(e),P}))});function lFe(){return IM(this)}function pFe(){return new ds(this.value(),this.__chain__)}function dFe(){this.__values__===e&&(this.__values__=GM(this.value()));var l=this.__index__>=this.__values__.length,f=l?e:this.__values__[this.__index__++];return{done:l,value:f}}function fFe(){return this}function hFe(l){for(var f,b=this;b instanceof rI;){var C=fM(b);C.__index__=0,C.__values__=e,f?N.__wrapped__=C:f=C;var N=C;b=b.__wrapped__}return N.__wrapped__=l,f}function mFe(){var l=this.__wrapped__;if(l instanceof _t){var f=l;return this.__actions__.length&&(f=new _t(this)),f=f.reverse(),f.__actions__.push({func:yI,args:[kR],thisArg:e}),new ds(f,this.__chain__)}return this.thru(kR)}function gFe(){return LH(this.__wrapped__,this.__actions__)}var yFe=uI(function(l,f,b){Dt.call(l,b)?++l[b]:Ra(l,b,1)});function vFe(l,f,b){var C=pt(l)?KV:cOe;return b&&ti(l,f,b)&&(f=e),C(l,$e(f,3))}function bFe(l,f){var b=pt(l)?Oc:bH;return b(l,$e(f,3))}var IFe=XH(hM),_Fe=XH(mM);function CFe(l,f){return Sn(vI(l,f),1)}function xFe(l,f){return Sn(vI(l,f),V)}function SFe(l,f,b){return b=b===e?1:ht(b),Sn(vI(l,f),b)}function _M(l,f){var b=pt(l)?ls:Pc;return b(l,$e(f,3))}function CM(l,f){var b=pt(l)?H2e:vH;return b(l,$e(f,3))}var wFe=uI(function(l,f,b){Dt.call(l,b)?l[b].push(f):Ra(l,b,[f])});function EFe(l,f,b,C){l=gi(l)?l:pd(l),b=b&&!C?ht(b):0;var N=l.length;return b<0&&(b=nn(N+b,0)),xI(l)?b<=N&&l.indexOf(f,b)>-1:!!N&&ed(l,f,b)>-1}var AFe=yt(function(l,f,b){var C=-1,N=typeof f=="function",P=gi(l)?se(l.length):[];return Pc(l,function(U){P[++C]=N?qi(f,U,b):hm(U,f,b)}),P}),RFe=uI(function(l,f,b){Ra(l,b,f)});function vI(l,f){var b=pt(l)?ur:wH;return b(l,$e(f,3))}function TFe(l,f,b,C){return l==null?[]:(pt(f)||(f=f==null?[]:[f]),b=C?e:b,pt(b)||(b=b==null?[]:[b]),TH(l,f,b))}var NFe=uI(function(l,f,b){l[b?0:1].push(f)},function(){return[[],[]]});function BFe(l,f,b){var C=pt(l)?UA:QV,N=arguments.length<3;return C(l,$e(f,4),b,N,Pc)}function kFe(l,f,b){var C=pt(l)?M2e:QV,N=arguments.length<3;return C(l,$e(f,4),b,N,vH)}function OFe(l,f){var b=pt(l)?Oc:bH;return b(l,_I($e(f,3)))}function GFe(l){var f=pt(l)?hH:EOe;return f(l)}function FFe(l,f,b){(b?ti(l,f,b):f===e)?f=1:f=ht(f);var C=pt(l)?nOe:AOe;return C(l,f)}function LFe(l){var f=pt(l)?iOe:TOe;return f(l)}function ZFe(l){if(l==null)return 0;if(gi(l))return xI(l)?rd(l):l.length;var f=Wn(l);return f==ne||f==Pe?l.size:lR(l).length}function PFe(l,f,b){var C=pt(l)?jA:NOe;return b&&ti(l,f,b)&&(f=e),C(l,$e(f,3))}var WFe=yt(function(l,f){if(l==null)return[];var b=f.length;return b>1&&ti(l,f[0],f[1])?f=[]:b>2&&ti(f[0],f[1],f[2])&&(f=[f[0]]),TH(l,Sn(f,1),[])}),bI=bke||function(){return dn.Date.now()};function DFe(l,f){if(typeof f!="function")throw new ps(i);return l=ht(l),function(){if(--l<1)return f.apply(this,arguments)}}function xM(l,f,b){return f=b?e:f,f=l&&f==null?l.length:f,Ta(l,w,e,e,e,e,f)}function SM(l,f){var b;if(typeof f!="function")throw new ps(i);return l=ht(l),function(){return--l>0&&(b=f.apply(this,arguments)),l<=1&&(f=e),b}}var GR=yt(function(l,f,b){var C=v;if(b.length){var N=Fc(b,ud(GR));C|=E}return Ta(l,C,f,b,N)}),wM=yt(function(l,f,b){var C=v|I;if(b.length){var N=Fc(b,ud(wM));C|=E}return Ta(f,C,l,b,N)});function EM(l,f,b){f=b?e:f;var C=Ta(l,_,e,e,e,e,e,f);return C.placeholder=EM.placeholder,C}function AM(l,f,b){f=b?e:f;var C=Ta(l,A,e,e,e,e,e,f);return C.placeholder=AM.placeholder,C}function RM(l,f,b){var C,N,P,U,X,Q,le=0,de=!1,ye=!1,Ae=!0;if(typeof l!="function")throw new ps(i);f=gs(f)||0,_r(b)&&(de=!!b.leading,ye="maxWait"in b,P=ye?nn(gs(b.maxWait)||0,f):P,Ae="trailing"in b?!!b.trailing:Ae);function He(Lr){var Qs=C,Ga=N;return C=N=e,le=Lr,U=l.apply(Ga,Qs),U}function et(Lr){return le=Lr,X=bm(It,f),de?He(Lr):U}function mt(Lr){var Qs=Lr-Q,Ga=Lr-le,XM=f-Qs;return ye?Pn(XM,P-Ga):XM}function tt(Lr){var Qs=Lr-Q,Ga=Lr-le;return Q===e||Qs>=f||Qs<0||ye&&Ga>=P}function It(){var Lr=bI();if(tt(Lr))return Et(Lr);X=bm(It,mt(Lr))}function Et(Lr){return X=e,Ae&&C?He(Lr):(C=N=e,U)}function Ui(){X!==e&&PH(X),le=0,C=Q=N=X=e}function ri(){return X===e?U:Et(bI())}function ji(){var Lr=bI(),Qs=tt(Lr);if(C=arguments,N=this,Q=Lr,Qs){if(X===e)return et(Q);if(ye)return PH(X),X=bm(It,f),He(Q)}return X===e&&(X=bm(It,f)),U}return ji.cancel=Ui,ji.flush=ri,ji}var qFe=yt(function(l,f){return yH(l,1,f)}),VFe=yt(function(l,f,b){return yH(l,gs(f)||0,b)});function HFe(l){return Ta(l,D)}function II(l,f){if(typeof l!="function"||f!=null&&typeof f!="function")throw new ps(i);var b=function(){var C=arguments,N=f?f.apply(this,C):C[0],P=b.cache;if(P.has(N))return P.get(N);var U=l.apply(this,C);return b.cache=P.set(N,U)||P,U};return b.cache=new(II.Cache||Aa),b}II.Cache=Aa;function _I(l){if(typeof l!="function")throw new ps(i);return function(){var f=arguments;switch(f.length){case 0:return!l.call(this);case 1:return!l.call(this,f[0]);case 2:return!l.call(this,f[0],f[1]);case 3:return!l.call(this,f[0],f[1],f[2])}return!l.apply(this,f)}}function MFe(l){return SM(2,l)}var UFe=BOe(function(l,f){f=f.length==1&&pt(f[0])?ur(f[0],Vi($e())):ur(Sn(f,1),Vi($e()));var b=f.length;return yt(function(C){for(var N=-1,P=Pn(C.length,b);++N<P;)C[N]=f[N].call(this,C[N]);return qi(l,this,C)})}),FR=yt(function(l,f){var b=Fc(f,ud(FR));return Ta(l,E,e,f,b)}),TM=yt(function(l,f){var b=Fc(f,ud(TM));return Ta(l,S,e,f,b)}),jFe=Na(function(l,f){return Ta(l,T,e,e,e,f)});function XFe(l,f){if(typeof l!="function")throw new ps(i);return f=f===e?f:ht(f),yt(l,f)}function YFe(l,f){if(typeof l!="function")throw new ps(i);return f=f==null?0:nn(ht(f),0),yt(function(b){var C=b[f],N=qc(b,0,f);return C&&Gc(N,C),qi(l,this,N)})}function KFe(l,f,b){var C=!0,N=!0;if(typeof l!="function")throw new ps(i);return _r(b)&&(C="leading"in b?!!b.leading:C,N="trailing"in b?!!b.trailing:N),RM(l,f,{leading:C,maxWait:f,trailing:N})}function zFe(l){return xM(l,1)}function JFe(l,f){return FR(bR(f),l)}function $Fe(){if(!arguments.length)return[];var l=arguments[0];return pt(l)?l:[l]}function QFe(l){return fs(l,h)}function eLe(l,f){return f=typeof f=="function"?f:e,fs(l,h,f)}function tLe(l){return fs(l,p|h)}function rLe(l,f){return f=typeof f=="function"?f:e,fs(l,p|h,f)}function nLe(l,f){return f==null||gH(l,f,fn(f))}function $s(l,f){return l===f||l!==l&&f!==f}var iLe=fI(aR),sLe=fI(function(l,f){return l>=f}),il=CH(function(){return arguments}())?CH:function(l){return Rr(l)&&Dt.call(l,"callee")&&!cH.call(l,"callee")},pt=se.isArray,oLe=HV?Vi(HV):hOe;function gi(l){return l!=null&&CI(l.length)&&!ka(l)}function Fr(l){return Rr(l)&&gi(l)}function aLe(l){return l===!0||l===!1||Rr(l)&&ei(l)==Re}var Vc=_ke||jR,cLe=MV?Vi(MV):mOe;function uLe(l){return Rr(l)&&l.nodeType===1&&!Im(l)}function lLe(l){if(l==null)return!0;if(gi(l)&&(pt(l)||typeof l=="string"||typeof l.splice=="function"||Vc(l)||ld(l)||il(l)))return!l.length;var f=Wn(l);if(f==ne||f==Pe)return!l.size;if(vm(l))return!lR(l).length;for(var b in l)if(Dt.call(l,b))return!1;return!0}function pLe(l,f){return mm(l,f)}function dLe(l,f,b){b=typeof b=="function"?b:e;var C=b?b(l,f):e;return C===e?mm(l,f,e,b):!!C}function LR(l){if(!Rr(l))return!1;var f=ei(l);return f==Ce||f==lt||typeof l.message=="string"&&typeof l.name=="string"&&!Im(l)}function fLe(l){return typeof l=="number"&&lH(l)}function ka(l){if(!_r(l))return!1;var f=ei(l);return f==Z||f==R||f==Ze||f==Ir}function NM(l){return typeof l=="number"&&l==ht(l)}function CI(l){return typeof l=="number"&&l>-1&&l%1==0&&l<=q}function _r(l){var f=typeof l;return l!=null&&(f=="object"||f=="function")}function Rr(l){return l!=null&&typeof l=="object"}var BM=UV?Vi(UV):yOe;function hLe(l,f){return l===f||uR(l,f,ER(f))}function mLe(l,f,b){return b=typeof b=="function"?b:e,uR(l,f,ER(f),b)}function gLe(l){return kM(l)&&l!=+l}function yLe(l){if(eGe(l))throw new ot(n);return xH(l)}function vLe(l){return l===null}function bLe(l){return l==null}function kM(l){return typeof l=="number"||Rr(l)&&ei(l)==J}function Im(l){if(!Rr(l)||ei(l)!=Je)return!1;var f=Kb(l);if(f===null)return!0;var b=Dt.call(f,"constructor")&&f.constructor;return typeof b=="function"&&b instanceof b&&Ub.call(b)==mke}var ZR=jV?Vi(jV):vOe;function ILe(l){return NM(l)&&l>=-q&&l<=q}var OM=XV?Vi(XV):bOe;function xI(l){return typeof l=="string"||!pt(l)&&Rr(l)&&ei(l)==$t}function Mi(l){return typeof l=="symbol"||Rr(l)&&ei(l)==xn}var ld=YV?Vi(YV):IOe;function _Le(l){return l===e}function CLe(l){return Rr(l)&&Wn(l)==So}function xLe(l){return Rr(l)&&ei(l)==Xu}var SLe=fI(pR),wLe=fI(function(l,f){return l<=f});function GM(l){if(!l)return[];if(gi(l))return xI(l)?zs(l):mi(l);if(am&&l[am])return nke(l[am]());var f=Wn(l),b=f==ne?$A:f==Pe?Vb:pd;return b(l)}function Oa(l){if(!l)return l===0?l:0;if(l=gs(l),l===V||l===-V){var f=l<0?-1:1;return f*te}return l===l?l:0}function ht(l){var f=Oa(l),b=f%1;return f===f?b?f-b:f:0}function FM(l){return l?el(ht(l),0,he):0}function gs(l){if(typeof l=="number")return l;if(Mi(l))return z;if(_r(l)){var f=typeof l.valueOf=="function"?l.valueOf():l;l=_r(f)?f+"":f}if(typeof l!="string")return l===0?l:+l;l=eH(l);var b=o2e.test(l);return b||c2e.test(l)?D2e(l.slice(2),b?2:8):s2e.test(l)?z:+l}function LM(l){return Ao(l,yi(l))}function ELe(l){return l?el(ht(l),-q,q):l===0?l:0}function Zt(l){return l==null?"":Hi(l)}var ALe=ad(function(l,f){if(vm(f)||gi(f)){Ao(f,fn(f),l);return}for(var b in f)Dt.call(f,b)&&dm(l,b,f[b])}),ZM=ad(function(l,f){Ao(f,yi(f),l)}),SI=ad(function(l,f,b,C){Ao(f,yi(f),l,C)}),RLe=ad(function(l,f,b,C){Ao(f,fn(f),l,C)}),TLe=Na(iR);function NLe(l,f){var b=od(l);return f==null?b:mH(b,f)}var BLe=yt(function(l,f){l=Qt(l);var b=-1,C=f.length,N=C>2?f[2]:e;for(N&&ti(f[0],f[1],N)&&(C=1);++b<C;)for(var P=f[b],U=yi(P),X=-1,Q=U.length;++X<Q;){var le=U[X],de=l[le];(de===e||$s(de,nd[le])&&!Dt.call(l,le))&&(l[le]=P[le])}return l}),kLe=yt(function(l){return l.push(e,eM),qi(PM,e,l)});function OLe(l,f){return zV(l,$e(f,3),Eo)}function GLe(l,f){return zV(l,$e(f,3),oR)}function FLe(l,f){return l==null?l:sR(l,$e(f,3),yi)}function LLe(l,f){return l==null?l:IH(l,$e(f,3),yi)}function ZLe(l,f){return l&&Eo(l,$e(f,3))}function PLe(l,f){return l&&oR(l,$e(f,3))}function WLe(l){return l==null?[]:sI(l,fn(l))}function DLe(l){return l==null?[]:sI(l,yi(l))}function PR(l,f,b){var C=l==null?e:tl(l,f);return C===e?b:C}function qLe(l,f){return l!=null&&nM(l,f,lOe)}function WR(l,f){return l!=null&&nM(l,f,pOe)}var VLe=KH(function(l,f,b){f!=null&&typeof f.toString!="function"&&(f=jb.call(f)),l[f]=b},qR(vi)),HLe=KH(function(l,f,b){f!=null&&typeof f.toString!="function"&&(f=jb.call(f)),Dt.call(l,f)?l[f].push(b):l[f]=[b]},$e),MLe=yt(hm);function fn(l){return gi(l)?fH(l):lR(l)}function yi(l){return gi(l)?fH(l,!0):_Oe(l)}function ULe(l,f){var b={};return f=$e(f,3),Eo(l,function(C,N,P){Ra(b,f(C,N,P),C)}),b}function jLe(l,f){var b={};return f=$e(f,3),Eo(l,function(C,N,P){Ra(b,N,f(C,N,P))}),b}var XLe=ad(function(l,f,b){oI(l,f,b)}),PM=ad(function(l,f,b,C){oI(l,f,b,C)}),YLe=Na(function(l,f){var b={};if(l==null)return b;var C=!1;f=ur(f,function(P){return P=Dc(P,l),C||(C=P.length>1),P}),Ao(l,SR(l),b),C&&(b=fs(b,p|d|h,VOe));for(var N=f.length;N--;)gR(b,f[N]);return b});function KLe(l,f){return WM(l,_I($e(f)))}var zLe=Na(function(l,f){return l==null?{}:xOe(l,f)});function WM(l,f){if(l==null)return{};var b=ur(SR(l),function(C){return[C]});return f=$e(f),NH(l,b,function(C,N){return f(C,N[0])})}function JLe(l,f,b){f=Dc(f,l);var C=-1,N=f.length;for(N||(N=1,l=e);++C<N;){var P=l==null?e:l[Ro(f[C])];P===e&&(C=N,P=b),l=ka(P)?P.call(l):P}return l}function $Le(l,f,b){return l==null?l:gm(l,f,b)}function QLe(l,f,b,C){return C=typeof C=="function"?C:e,l==null?l:gm(l,f,b,C)}var DM=$H(fn),qM=$H(yi);function eZe(l,f,b){var C=pt(l),N=C||Vc(l)||ld(l);if(f=$e(f,4),b==null){var P=l&&l.constructor;N?b=C?new P:[]:_r(l)?b=ka(P)?od(Kb(l)):{}:b={}}return(N?ls:Eo)(l,function(U,X,Q){return f(b,U,X,Q)}),b}function tZe(l,f){return l==null?!0:gR(l,f)}function rZe(l,f,b){return l==null?l:FH(l,f,bR(b))}function nZe(l,f,b,C){return C=typeof C=="function"?C:e,l==null?l:FH(l,f,bR(b),C)}function pd(l){return l==null?[]:JA(l,fn(l))}function iZe(l){return l==null?[]:JA(l,yi(l))}function sZe(l,f,b){return b===e&&(b=f,f=e),b!==e&&(b=gs(b),b=b===b?b:0),f!==e&&(f=gs(f),f=f===f?f:0),el(gs(l),f,b)}function oZe(l,f,b){return f=Oa(f),b===e?(b=f,f=0):b=Oa(b),l=gs(l),dOe(l,f,b)}function aZe(l,f,b){if(b&&typeof b!="boolean"&&ti(l,f,b)&&(f=b=e),b===e&&(typeof f=="boolean"?(b=f,f=e):typeof l=="boolean"&&(b=l,l=e)),l===e&&f===e?(l=0,f=1):(l=Oa(l),f===e?(f=l,l=0):f=Oa(f)),l>f){var C=l;l=f,f=C}if(b||l%1||f%1){var N=pH();return Pn(l+N*(f-l+W2e("1e-"+((N+"").length-1))),f)}return fR(l,f)}var cZe=cd(function(l,f,b){return f=f.toLowerCase(),l+(b?VM(f):f)});function VM(l){return DR(Zt(l).toLowerCase())}function HM(l){return l=Zt(l),l&&l.replace(l2e,$2e).replace(T2e,"")}function uZe(l,f,b){l=Zt(l),f=Hi(f);var C=l.length;b=b===e?C:el(ht(b),0,C);var N=b;return b-=f.length,b>=0&&l.slice(b,N)==f}function lZe(l){return l=Zt(l),l&&Ob.test(l)?l.replace(Jp,Q2e):l}function pZe(l){return l=Zt(l),l&&$p.test(l)?l.replace(Yu,"\\$&"):l}var dZe=cd(function(l,f,b){return l+(b?"-":"")+f.toLowerCase()}),fZe=cd(function(l,f,b){return l+(b?" ":"")+f.toLowerCase()}),hZe=jH("toLowerCase");function mZe(l,f,b){l=Zt(l),f=ht(f);var C=f?rd(l):0;if(!f||C>=f)return l;var N=(f-C)/2;return dI(Qb(N),b)+l+dI($b(N),b)}function gZe(l,f,b){l=Zt(l),f=ht(f);var C=f?rd(l):0;return f&&C<f?l+dI(f-C,b):l}function yZe(l,f,b){l=Zt(l),f=ht(f);var C=f?rd(l):0;return f&&C<f?dI(f-C,b)+l:l}function vZe(l,f,b){return b||f==null?f=0:f&&(f=+f),wke(Zt(l).replace(Ku,""),f||0)}function bZe(l,f,b){return(b?ti(l,f,b):f===e)?f=1:f=ht(f),hR(Zt(l),f)}function IZe(){var l=arguments,f=Zt(l[0]);return l.length<3?f:f.replace(l[1],l[2])}var _Ze=cd(function(l,f,b){return l+(b?"_":"")+f.toLowerCase()});function CZe(l,f,b){return b&&typeof b!="number"&&ti(l,f,b)&&(f=b=e),b=b===e?he:b>>>0,b?(l=Zt(l),l&&(typeof f=="string"||f!=null&&!ZR(f))&&(f=Hi(f),!f&&td(l))?qc(zs(l),0,b):l.split(f,b)):[]}var xZe=cd(function(l,f,b){return l+(b?" ":"")+DR(f)});function SZe(l,f,b){return l=Zt(l),b=b==null?0:el(ht(b),0,l.length),f=Hi(f),l.slice(b,b+f.length)==f}function wZe(l,f,b){var C=O.templateSettings;b&&ti(l,f,b)&&(f=e),l=Zt(l),f=SI({},f,C,QH);var N=SI({},f.imports,C.imports,QH),P=fn(N),U=JA(N,P),X,Q,le=0,de=f.interpolate||Zb,ye="__p += '",Ae=QA((f.escape||Zb).source+"|"+de.source+"|"+(de===nm?i2e:Zb).source+"|"+(f.evaluate||Zb).source+"|$","g"),He="//# sourceURL="+(Dt.call(f,"sourceURL")?(f.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++G2e+"]")+`
155
155
  `;l.replace(Ae,function(tt,It,Et,Ui,ri,ji){return Et||(Et=Ui),ye+=l.slice(le,ji).replace(p2e,eke),It&&(X=!0,ye+=`' +
@@ -252,7 +252,7 @@ credential_process=\${AMPT_SANDBOX_CREDENTIALS_PROCESS}
252
252
  `)+`\r
253
253
  \r
254
254
  `+r)),e.removeListener("error",jD),e.destroy()}function IRt(e){return e.trim()}});var r0e=y((ibr,t0e)=>{"use strict";c();var ob=HD();ob.createWebSocketStream=K_e();ob.Server=e0e();ob.Receiver=ND();ob.Sender=kD();t0e.exports=ob});var n0e,ab,Mh,rA=ae(()=>{"use strict";c();n0e=require("events"),ab=xe(r0e());dr();Mh=class extends n0e.EventEmitter{url;socket;pingInterval;pingTimeout;reconnectTimeout;connectionState=0;onlineState=0;constructor(t){super(),this.url=t.url}onClose(){this.pingInterval&&(clearInterval(this.pingInterval),delete this.pingInterval),this.connectionState===2?setImmediate(this._connectInternal.bind(this)):this.connectionState===1&&(this.onlineState==1&&this.emit("offline"),this.onlineState=2,this.connectionState=0,setTimeout(this._connectInternal.bind(this),5e3).unref())}sendEvent(t){var r;return((r=this.socket)==null?void 0:r.readyState)!==ab.default.OPEN?!1:(this.socket.send(JSON.stringify(t)),!0)}onMessage(t){let r;try{r=JSON.parse(t)}catch{this.emit("invalidMessage",new Error(`Unable to parse message: ${t}`));return}this.emit("event",r)}onOpen(){this.connectionState=2,this.pingInterval&&clearInterval(this.pingInterval),this.pingInterval=setInterval(this.ping.bind(this),2e3).unref(),this.emit("connected"),this.onlineState===2&&this.emit("online"),this.onlineState=1}onError(t){this.connectionState===2?setImmediate(this._connectInternal.bind(this)):this.connectionState===1&&(this.onlineState===1&&this.emit("offline"),this.onlineState=2,this.connectionState=0,setTimeout(this._connectInternal.bind(this),5e3).unref()),this.emit("connectionError",new Error(`Received connection error: ${t.message}`))}ping(){var t;this.pingTimeout&&clearTimeout(this.pingTimeout),((t=this.socket)==null?void 0:t.readyState)===ab.default.OPEN&&(this.socket.ping(),this.pingTimeout=setTimeout(this.onPingTimeout.bind(this),1e3).unref())}onPong(){this.pingTimeout&&clearTimeout(this.pingTimeout)}onPingTimeout(){this.socket&&this.socket.terminate(),this.connectionState===2&&setImmediate(this._connectInternal.bind(this))}_connectInternal(){this.connectionState!==1&&(this.connectionState=1,this.socket&&this.socket.removeAllListeners(),this.socket=new ab.default(this.url),this.socket.on("open",this.onOpen.bind(this)),this.socket.on("close",this.onClose.bind(this)),this.socket.on("message",this.onMessage.bind(this)),this.socket.on("pong",this.onPong.bind(this)),this.socket.on("error",this.onError.bind(this)))}async connect(){this._connectInternal(),await this.waitForConnection()}async waitForConnection(){await Mx(this,()=>new Promise((t,r)=>{if(!this.socket){t();return}this.on("connected",t),this.on("connectionError",r),this.on("connectionFailure",r)}))}close(){this.connectionState=0,this.onlineState=0,this.pingInterval&&clearInterval(this.pingInterval),this.pingTimeout&&clearTimeout(this.pingTimeout),this.removeAllListeners(),this.socket&&(this.socket.removeAllListeners(),this.socket.readyState===ab.default.OPEN&&this.socket.close(),this.socket=void 0)}}});var s0e,i0e,nA,XD=ae(()=>{"use strict";c();s0e=require("events");rA();dr();i0e=new Map,nA=class e extends s0e.EventEmitter{instanceWsUrl;cli;connection;static async get(t){let r=i0e.get(t.url);return r||(r=new e,r.cli=t.cli,r.instanceWsUrl=t.url,t.cli&&(r.on("event",n=>o9({cli:t.cli,event:n})),r.on("error",n=>t.cli.logError(`There was an issue initializing the dev session: ${n.message}`))),await r.connect(),i0e.set(t.url,r)),r}async waitForEvent(t){let r=(t==null?void 0:t.eventType)||void 0,n=(t==null?void 0:t.timeout)||1e4;return await Mx(this,()=>Promise.race([new Promise((i,s)=>{this.on("event",o=>{r&&o.event===r?i(o):r||i(o)}),this.on("error",s)}),new Promise((i,s)=>{setTimeout(()=>{s(new Error("waitForEvent timed out"))},n).unref()})]))}async connect(){var t;if(!this.instanceWsUrl){(t=this.cli)==null||t.logError("Unable to initialize developer sandbox. Please try again.");return}if(!this.connection){this.connection=new Mh({url:this.instanceWsUrl}),this.connection.on("event",r=>{this.emit("event",r)}),this.connection.on("offline",()=>{var r;(r=this.cli)==null||r.logError("Sandbox connection offline")}),this.connection.on("online",()=>{var r;(r=this.cli)==null||r.logSuccess("Sandbox connection restored")});try{await this.connection.connect()}catch(r){throw new Error(`Sandbox connection failed. Please quit and try again later. ${r.message}`)}}}close(){this.removeAllListeners(),this.connection&&(this.connection.removeAllListeners(),this.connection.close())}}});var o0e,or,a0e,YD=ae(()=>{"use strict";c();o0e=xe(qIe());dr();XD();or=class{org;service;instanceName;instanceType;url;cli;accountName;systemWsUrl;deploymentState;messenger;region;runtimeName;runtimeChannel;runtimeUpdates;runtimeVersion;buildRuntime;enableSql;enableLambdaContainer;constructor(t={}){this.org=t.org,this.service=t.service,this.instanceName=t.instanceName,this.instanceType=t.instanceType,this.accountName=t.accountName,this.url=t.url,this.region=t.region||"us-east-1",this.enableSql=t.enableSql??!1,this.enableLambdaContainer=t.enableLambdaContainer??!1}async get(){let t={method:"GET",endpoint:`/orgs/${this.org.orgName}/services/${this.service.serviceName}/instances/${this.instanceName}`},r=await ze(t);if(r)return this.url=r.instanceUrl,this.instanceType=r.instanceType,this.systemWsUrl=r.systemWsUrl,this.deploymentState=r.deploymentState,this.accountName=r.accountName,this.region=r.region,this.runtimeName=r.runtimeName,this.runtimeChannel=r.runtimeChannel,this.runtimeUpdates=r.runtimeUpdates,this.runtimeVersion=r.runtimeVersion,this.buildRuntime=r.buildRuntime,this.enableSql=r.enableSql,this.enableLambdaContainer=r.enableLambdaContainer,r}async create(){let t={method:"POST",endpoint:`/orgs/${this.org.orgName}/services/${this.service.serviceName}/instances/${this.instanceName}`,body:{...this.instanceType&&{instanceType:this.instanceType},...this.region&&this.region!=="us-east-1"&&{region:this.region}}},r=await ze(t);return this.url=r.instanceUrl,this.instanceType=r.instanceType,r}async validateRuntimeUpdate(t){let r={method:"POST",endpoint:`/orgs/${this.org.orgName}/services/${this.service.serviceName}/instances/${this.instanceName}/runtime/validate-update`,body:t};try{return await ze(r)}catch(n){throw new Error(n.message)}}async update(t={}){let r={method:"PATCH",endpoint:`/orgs/${this.org.orgName}/services/${this.service.serviceName}/instances/${this.instanceName}`,body:t};return await ze(r)}async delete(){let t={method:"DELETE",endpoint:`/orgs/${this.org.orgName}/services/${this.service.serviceName}/instances/${this.instanceName}`};return await ze(t)}async test(t){let r={method:"POST",endpoint:`/orgs/${this.org.orgName}/services/${this.service.serviceName}/instances/${this.instanceName}/test`,body:{...(t==null?void 0:t.coverage)&&{coverage:t==null?void 0:t.coverage},...(t==null?void 0:t.pattern)&&{pattern:t==null?void 0:t.pattern},...(t==null?void 0:t.workers)&&{workers:t==null?void 0:t.workers}}};return await ze(r)}async getLogs(){let t=[],r;do{let n=r?`?nextToken=${r}`:"",i={method:"GET",endpoint:`/orgs/${this.org.orgName}/services/${this.service.serviceName}/instances/${this.instanceName}/logs${n}`},s=await ze(i);t.push(...s.messages),r=s.nextToken}while(r);return t}async getParams(){let t={method:"GET",endpoint:`/orgs/${this.org.orgName}/services/${this.service.serviceName}/instances/${this.instanceName}/params`},{params:r}=await ze(t);return r}async putParams(t){let r={method:"PATCH",endpoint:`/orgs/${this.org.orgName}/services/${this.service.serviceName}/instances/${this.instanceName}/params`,body:{params:t}},{params:n}=await ze(r);return n}async getDeployments(){let t={method:"GET",endpoint:`/orgs/${this.org.orgName}/services/${this.service.serviceName}/instances/${this.instanceName}/deployments`};return await ze(t)}async getEndpoints(){let t={method:"GET",endpoint:`/orgs/${this.org.orgName}/services/${this.service.serviceName}/instances/${this.instanceName}/endpoints`};return await ze(t)}async getDeploymentLogs(t){let r={method:"GET",endpoint:`/orgs/${this.org.orgName}/services/${this.service.serviceName}/instances/${this.instanceName}/deployments/${t}`};return await ze(r)}async downloadTestCoverage(t){let r={method:"GET",endpoint:`/orgs/${this.org.orgName}/services/${this.service.serviceName}/instances/${this.instanceName}/test/coverage`,responseType:"arraybuffer"},n=await ze(r);new o0e.default(n).extractAllTo(t)}getDashboardDeploymentsUrl(){return`https://${process.env.AMPT_STAGE!=="prod"?"amptlabs.dev":"ampt.dev"}/orgs/${this.org.orgName}/apps/${this.service.serviceName}/environments/${this.instanceName}/deployments`}async connect(t={}){if(!this.systemWsUrl)throw new Error("Could not connect to Sandbox Session.");if(!this.messenger&&(this.messenger=await nA.get({url:this.systemWsUrl,cli:t.cli}),!this.messenger))throw new Error(`Unable to connect to ${this.systemWsUrl}`);return this.messenger}},a0e=or});var c0e,iA,u0e=ae(()=>{"use strict";c();c0e=require("events"),iA=class extends c0e.EventEmitter{constructor(r){super();this._timeoutMs=r;this._timeout=setTimeout(()=>{this.emit("timeout")},this._timeoutMs).unref()}_timeout;_running=!0;stop(){this._timeout&&(clearTimeout(this._timeout),this._timeout=void 0),this._running=!1}kick(){this._running&&(this._timeout&&clearTimeout(this._timeout),this._timeout=setTimeout(()=>{this.emit("timeout")},this._timeoutMs).unref())}}});async function l0e(e,t,r){return Promise.race([new Promise((n,i)=>{let s=o=>(e.off(t,s),e.off("error",s),o?i(o):n(!0));e.once(t,s),e.once("error",s)}),new Promise((n,i)=>setTimeout(()=>i(new Error(`Timed out waiting for event: ${t}`)),r).unref())])}var p0e,sA,d0e=ae(()=>{"use strict";c();p0e=require("events");bs();rA();dr();u0e();sA=class e extends p0e.EventEmitter{operation="DEPLOY";connection;userUid;orgName;appName;instanceName;operationId;eventTypes;cli;failInterval=6e5;connected=!1;subscribed=!1;constructor(t){let{cli:r}=t||{};super(),this.cli=r,this.cli&&this.on("runtimeUpdate",this.handleRuntimeUpdate.bind(this))}async waitForOperation(t){let r=_e.child({class:"OperationMessenger",method:"waitForOperation"});await this.subscribe({operationId:t.operationId,orgName:t.orgName,appName:t.appName});let n=new iA(this.failInterval),i,{success:s,message:o}=await Promise.race([new Promise(a=>{try{this.on("event",u=>{let p=u.event,d=u.message,h=u.data,m=h.id;switch(r.info({event:u},"Got operation event"),n.kick(),p){case"ampt.operation.complete":{h!=null&&h.success||r.error({event:u},"operation failed"),(d!=null&&d.toLowerCase().includes("unzipped size must be smaller")||d!=null&&d.toLowerCase().includes("uncompressed size is greater than"))&&(t.context.logInfo("It looks like your deployment bundle is too large. Check out the ignore docs to exclude unnecessary files."),t.context.logUrl("https://getampt.com/docs/ignores/")),a({success:!!(h!=null&&h.success),message:h!=null&&h.success?d||"":d||"An unexpected error occurred"});break}case"ampt.operation.progress":{if(i&&m&&m<i)return;i=m,d?t.context.updateSpinnerStep(d.toLowerCase()):r.error({event:u},"Got progress event without message");break}default:{r.debug({event:u},"unknown event");break}}})}catch(u){r.error({err:u},"Error waiting for operation"),a({success:!1,message:u.message})}}),new Promise(a=>{n.on("timeout",()=>{r.error({operationId:this.operationId},"operation timed out"),a({success:!1,message:"Timed out waiting for operation to complete."})})})]);return this.removeAllListeners("event"),n.stop(),{success:s,message:o}}handleRuntimeUpdate(t){var r,n,i,s;switch(t.event){case"ampt.runtime.update":(r=this.cli)==null||r.setRuntimeUpdateInProgress(!0);break;case"ampt.runtime.update.complete":(n=this.cli)==null||n.setRuntimeUpdateInProgress(!1),(i=this.cli)==null||i.logSuccess("Runtime update complete"),(s=this.cli)==null||s.viewInput();break;default:break}}async subscribe(t){var i;let r=_e.child({class:"OperationMessenger",method:"subscribe"});if(!this.connection)throw new Error("Messenger Connection is not initialized");this.userUid=t.userUid?t.userUid:this.userUid,this.orgName=t.orgName?t.orgName:this.orgName,this.appName=t.appName?t.appName:this.appName,this.instanceName=t.instanceName?t.instanceName:this.instanceName,this.operationId=t.operationId?t.operationId:this.operationId,this.eventTypes=t.types?t.types:this.eventTypes;let n={event:"subscribe",data:{userUid:this.userUid,orgName:this.orgName,operationId:this.operationId,appName:this.appName,instanceName:this.instanceName,eventTypes:this.eventTypes}};this.on("connected",()=>{var s;this.connected=!0,this.subscribed&&(r.debug("re-subscribing"),(s=this.connection)!=null&&s.sendEvent(n)||r.error("failed to send subscribe request"))}),this.connected||await l0e(this,"connected",3e4),(i=this.connection)!=null&&i.sendEvent(n)||r.error("failed to send subscribe request"),await l0e(this,"subscribed",3e4)}unsubscribe(){var t;(t=this.connection)==null||t.close()}static create(){return new e}async connect(){let t=_e.child({class:"OperationMessenger",method:"connect"});if(!process.env.AMPT_WS_ENDPOINT)throw new Error("AMPT_WS_ENDPOINT is not set");if(this.connection){t.debug("connect() when already connected");return}this.connection=new Mh({url:process.env.AMPT_WS_ENDPOINT}),this.connection.on("event",r=>{if(!(r!=null&&r.event)){t.debug({event:r},"invalid event");return}t.debug({event:r},"Got operation event"),r.event==="SUBSCRIBE_SUCCESS"?(t.debug({operationId:this.operationId},"Subscribed to Events"),this.subscribed=!0,this.emit("subscribed")):r.event==="ampt.runtime.update"||r.event==="ampt.runtime.update.complete"?this.emit("runtimeUpdate",r):(t.debug({event:r},"emitting event"),this.emit("event",r))}),this.connection.on("connected",()=>{t.debug({operationId:this.operationId},"connected"),this.connected=!0,this.emit("connected")}),this.connection.on("offline",()=>{t.debug({operationId:this.operationId},"offline"),this.connected=!1,this.emit("offline")}),this.connection.on("online",()=>{t.debug({operationId:this.operationId},"online"),this.connected=!0,this.emit("online")}),this.connection.on("error",r=>{t.debug({operationId:this.operationId},"error"),this.connected=!1,this.emit("error",r)}),await this.connection.connect(),t.debug({operationId:this.operationId},"Messenger Connection initialized")}isConnected(){var t;return((t=this.connection)==null?void 0:t.connectionState)===2}}});var h0e=y((Nbr,f0e)=>{c();var _Rt=function(){return!1};f0e.exports=_Rt});var g0e=y((kbr,m0e)=>{c();var CRt=function(){return!0};m0e.exports=CRt});var v0e=y((Gbr,y0e)=>{c();y0e.exports={"@@functional/placeholder":!0}});var cb=y((Lbr,b0e)=>{c();var xRt=ie(),SRt=xRt(function(t,r){return Number(t)+Number(r)});b0e.exports=SRt});var Hs=y((Pbr,I0e)=>{c();function wRt(e,t){e=e||[],t=t||[];var r,n=e.length,i=t.length,s=[];for(r=0;r<n;)s[s.length]=e[r],r+=1;for(r=0;r<i;)s[s.length]=t[r],r+=1;return s}I0e.exports=wRt});var Ms=y((Dbr,_0e)=>{c();function ERt(e,t){switch(e){case 0:return function(){return t.apply(this,arguments)};case 1:return function(r){return t.apply(this,arguments)};case 2:return function(r,n){return t.apply(this,arguments)};case 3:return function(r,n,i){return t.apply(this,arguments)};case 4:return function(r,n,i,s){return t.apply(this,arguments)};case 5:return function(r,n,i,s,o){return t.apply(this,arguments)};case 6:return function(r,n,i,s,o,a){return t.apply(this,arguments)};case 7:return function(r,n,i,s,o,a,u){return t.apply(this,arguments)};case 8:return function(r,n,i,s,o,a,u,p){return t.apply(this,arguments)};case 9:return function(r,n,i,s,o,a,u,p,d){return t.apply(this,arguments)};case 10:return function(r,n,i,s,o,a,u,p,d,h){return t.apply(this,arguments)};default:throw new Error("First argument to _arity must be a non-negative integer no greater than ten")}}_0e.exports=ERt});var ub=y((Vbr,S0e)=>{c();var ARt=Ms(),C0e=Xv();function x0e(e,t,r){return function(){for(var n=[],i=0,s=e,o=0;o<t.length||i<arguments.length;){var a;o<t.length&&(!C0e(t[o])||i>=arguments.length)?a=t[o]:(a=arguments[i],i+=1),n[o]=a,C0e(a)||(s-=1),o+=1}return s<=0?r.apply(this,n):ARt(s,x0e(e,n,r))}}S0e.exports=x0e});var Cn=y((Mbr,w0e)=>{c();var RRt=Ms(),TRt=je(),NRt=ie(),BRt=ub(),kRt=NRt(function(t,r){return t===1?TRt(r):RRt(t,BRt(t,[],r))});w0e.exports=kRt});var A0e=y((jbr,E0e)=>{c();var ORt=Hs(),GRt=je(),FRt=Cn(),LRt=GRt(function(t){return FRt(t.length,function(){var r=0,n=arguments[0],i=arguments[arguments.length-1],s=Array.prototype.slice.call(arguments,0);return s[0]=function(){var o=n.apply(this,ORt(arguments,[r,i]));return r+=1,o},t.apply(this,s)})});E0e.exports=LRt});var it=y((Ybr,R0e)=>{c();var oA=je(),Uh=ie(),Ln=Xv();function ZRt(e){return function t(r,n,i){switch(arguments.length){case 0:return t;case 1:return Ln(r)?t:Uh(function(s,o){return e(r,s,o)});case 2:return Ln(r)&&Ln(n)?t:Ln(r)?Uh(function(s,o){return e(s,n,o)}):Ln(n)?Uh(function(s,o){return e(r,s,o)}):oA(function(s){return e(r,n,s)});default:return Ln(r)&&Ln(n)&&Ln(i)?t:Ln(r)&&Ln(n)?Uh(function(s,o){return e(s,o,i)}):Ln(r)&&Ln(i)?Uh(function(s,o){return e(s,n,o)}):Ln(n)&&Ln(i)?Uh(function(s,o){return e(r,s,o)}):Ln(r)?oA(function(s){return e(s,n,i)}):Ln(n)?oA(function(s){return e(r,s,i)}):Ln(i)?oA(function(s){return e(r,n,s)}):e(r,n,i)}}}R0e.exports=ZRt});var KD=y((zbr,T0e)=>{c();var PRt=Hs(),WRt=it(),DRt=WRt(function(t,r,n){if(t>=n.length||t<-n.length)return n;var i=t<0?n.length:0,s=i+t,o=PRt(n);return o[s]=r(n[s]),o});T0e.exports=DRt});var Sa=y(($br,N0e)=>{c();N0e.exports=Array.isArray||function(t){return t!=null&&t.length>=0&&Object.prototype.toString.call(t)==="[object Array]"}});var aA=y((eIr,B0e)=>{c();function qRt(e){return e!=null&&typeof e["@@transducer/step"]=="function"}B0e.exports=qRt});var Xr=y((rIr,k0e)=>{c();var VRt=Sa(),HRt=aA();function MRt(e,t,r){return function(){if(arguments.length===0)return r();var n=Array.prototype.slice.call(arguments,0),i=n.pop();if(!VRt(i)){for(var s=0;s<e.length;){if(typeof i[e[s]]=="function")return i[e[s]].apply(i,n);s+=1}if(HRt(i)){var o=t.apply(null,n);return o(i)}}return r.apply(this,arguments)}}k0e.exports=MRt});var Bc=y((iIr,O0e)=>{c();function URt(e){return e&&e["@@transducer/reduced"]?e:{"@@transducer/value":e,"@@transducer/reduced":!0}}O0e.exports=URt});var en=y((oIr,G0e)=>{c();G0e.exports={init:function(){return this.xf["@@transducer/init"]()},result:function(e){return this.xf["@@transducer/result"](e)}}});var L0e=y((cIr,F0e)=>{c();var jRt=ie(),XRt=Bc(),YRt=en(),KRt=function(){function e(t,r){this.xf=r,this.f=t,this.all=!0}return e.prototype["@@transducer/init"]=YRt.init,e.prototype["@@transducer/result"]=function(t){return this.all&&(t=this.xf["@@transducer/step"](t,!0)),this.xf["@@transducer/result"](t)},e.prototype["@@transducer/step"]=function(t,r){return this.f(r)||(this.all=!1,t=XRt(this.xf["@@transducer/step"](t,!1))),t},e}(),zRt=jRt(function(t,r){return new KRt(t,r)});F0e.exports=zRt});var zD=y((lIr,Z0e)=>{c();var JRt=ie(),$Rt=Xr(),QRt=L0e(),eTt=JRt($Rt(["all"],QRt,function(t,r){for(var n=0;n<r.length;){if(!t(r[n]))return!1;n+=1}return!0}));Z0e.exports=eTt});var jp=y((dIr,P0e)=>{c();var tTt=ie(),rTt=tTt(function(t,r){return r>t?r:t});P0e.exports=rTt});var lb=y((hIr,W0e)=>{c();function nTt(e,t){for(var r=0,n=t.length,i=Array(n);r<n;)i[r]=e(t[r]),r+=1;return i}W0e.exports=nTt});var jh=y((gIr,D0e)=>{c();function iTt(e){return Object.prototype.toString.call(e)==="[object String]"}D0e.exports=iTt});var pb=y((vIr,q0e)=>{c();var sTt=je(),oTt=Sa(),aTt=jh(),cTt=sTt(function(t){return oTt(t)?!0:!t||typeof t!="object"||aTt(t)?!1:t.nodeType===1?!!t.length:t.length===0?!0:t.length>0?t.hasOwnProperty(0)&&t.hasOwnProperty(t.length-1):!1});q0e.exports=cTt});var JD=y((IIr,V0e)=>{c();var uTt=function(){function e(t){this.f=t}return e.prototype["@@transducer/init"]=function(){throw new Error("init not implemented on XWrap")},e.prototype["@@transducer/result"]=function(t){return t},e.prototype["@@transducer/step"]=function(t,r){return this.f(t,r)},e}();function lTt(e){return new uTt(e)}V0e.exports=lTt});var $D=y((CIr,H0e)=>{c();var pTt=Ms(),dTt=ie(),fTt=dTt(function(t,r){return pTt(t.length,function(){return t.apply(r,arguments)})});H0e.exports=fTt});var Zi=y((SIr,X0e)=>{c();var hTt=pb(),mTt=JD(),gTt=$D();function yTt(e,t,r){for(var n=0,i=r.length;n<i;){if(t=e["@@transducer/step"](t,r[n]),t&&t["@@transducer/reduced"]){t=t["@@transducer/value"];break}n+=1}return e["@@transducer/result"](t)}function M0e(e,t,r){for(var n=r.next();!n.done;){if(t=e["@@transducer/step"](t,n.value),t&&t["@@transducer/reduced"]){t=t["@@transducer/value"];break}n=r.next()}return e["@@transducer/result"](t)}function U0e(e,t,r,n){return e["@@transducer/result"](r[n](gTt(e["@@transducer/step"],e),t))}var j0e=typeof Symbol<"u"?Symbol.iterator:"@@iterator";function vTt(e,t,r){if(typeof e=="function"&&(e=mTt(e)),hTt(r))return yTt(e,t,r);if(typeof r["fantasy-land/reduce"]=="function")return U0e(e,t,r,"fantasy-land/reduce");if(r[j0e]!=null)return M0e(e,t,r[j0e]());if(typeof r.next=="function")return M0e(e,t,r);if(typeof r.reduce=="function")return U0e(e,t,r,"reduce");throw new TypeError("reduce: list must be array or iterable")}X0e.exports=vTt});var z0e=y((EIr,K0e)=>{c();var bTt=ie(),Y0e=en(),ITt=function(){function e(t,r){this.xf=r,this.f=t}return e.prototype["@@transducer/init"]=Y0e.init,e.prototype["@@transducer/result"]=Y0e.result,e.prototype["@@transducer/step"]=function(t,r){return this.xf["@@transducer/step"](t,this.f(r))},e}(),_Tt=bTt(function(t,r){return new ITt(t,r)});K0e.exports=_Tt});var Pi=y((RIr,J0e)=>{c();function CTt(e,t){return Object.prototype.hasOwnProperty.call(t,e)}J0e.exports=CTt});var QD=y((NIr,Q0e)=>{c();var xTt=Pi(),$0e=Object.prototype.toString,STt=function(){return $0e.call(arguments)==="[object Arguments]"?function(t){return $0e.call(t)==="[object Arguments]"}:function(t){return xTt("callee",t)}}();Q0e.exports=STt});var Us=y((kIr,iCe)=>{c();var eCe=je(),tCe=Pi(),wTt=QD(),ETt=!{toString:null}.propertyIsEnumerable("toString"),rCe=["constructor","valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],nCe=function(){"use strict";return arguments.propertyIsEnumerable("length")}(),ATt=function(t,r){for(var n=0;n<t.length;){if(t[n]===r)return!0;n+=1}return!1},RTt=eCe(typeof Object.keys=="function"&&!nCe?function(t){return Object(t)!==t?[]:Object.keys(t)}:function(t){if(Object(t)!==t)return[];var r,n,i=[],s=nCe&&wTt(t);for(r in t)tCe(r,t)&&(!s||r!=="length")&&(i[i.length]=r);if(ETt)for(n=rCe.length-1;n>=0;)r=rCe[n],tCe(r,t)&&!ATt(i,r)&&(i[i.length]=r),n-=1;return i});iCe.exports=RTt});var as=y((GIr,sCe)=>{c();var TTt=ie(),NTt=Xr(),BTt=lb(),kTt=Zi(),OTt=z0e(),GTt=Cn(),FTt=Us(),LTt=TTt(NTt(["fantasy-land/map","map"],OTt,function(t,r){switch(Object.prototype.toString.call(r)){case"[object Function]":return GTt(r.length,function(){return t.call(this,r.apply(this,arguments))});case"[object Object]":return kTt(function(n,i){return n[i]=t(r[i]),n},{},FTt(r));default:return BTt(t,r)}}));sCe.exports=LTt});var db=y((LIr,oCe)=>{c();oCe.exports=Number.isInteger||function(t){return t<<0===t}});var Xp=y((PIr,aCe)=>{c();var ZTt=ie(),PTt=jh(),WTt=ZTt(function(t,r){var n=t<0?r.length+t:t;return PTt(r)?r.charAt(n):r[n]});aCe.exports=WTt});var eq=y((DIr,cCe)=>{c();var DTt=ie(),qTt=db(),VTt=Xp(),HTt=DTt(function(t,r){return t.map(function(n){for(var i=r,s=0,o;s<n.length;){if(i==null)return;o=n[s],i=qTt(o)?VTt(o,i):i[o],s+=1}return i})});cCe.exports=HTt});var Uu=y((VIr,uCe)=>{c();var MTt=ie(),UTt=eq(),jTt=MTt(function(t,r){return UTt([t],r)[0]});uCe.exports=jTt});var cA=y((MIr,lCe)=>{c();var XTt=ie(),YTt=Uu(),KTt=XTt(function(t,r){return YTt([t],r)});lCe.exports=KTt});var Xh=y((jIr,pCe)=>{c();var zTt=ie(),JTt=as(),$Tt=cA(),QTt=zTt(function(t,r){return JTt($Tt(t),r)});pCe.exports=QTt});var Co=y((YIr,dCe)=>{c();var eNt=it(),tNt=Zi(),rNt=eNt(tNt);dCe.exports=rNt});var hCe=y((zIr,fCe)=>{c();var nNt=je(),iNt=Cn(),sNt=jp(),oNt=Xh(),aNt=Co(),cNt=nNt(function(t){return iNt(aNt(sNt,0,oNt("length",t)),function(){for(var r=0,n=t.length;r<n;){if(!t[r].apply(this,arguments))return!1;r+=1}return!0})});fCe.exports=cNt});var fb=y(($Ir,mCe)=>{c();var uNt=je(),lNt=uNt(function(t){return function(){return t}});mCe.exports=lNt});var tq=y((e_r,gCe)=>{c();var pNt=ie(),dNt=pNt(function(t,r){return t&&r});gCe.exports=dNt});var vCe=y((r_r,yCe)=>{c();var fNt=ie(),hNt=Bc(),mNt=en(),gNt=function(){function e(t,r){this.xf=r,this.f=t,this.any=!1}return e.prototype["@@transducer/init"]=mNt.init,e.prototype["@@transducer/result"]=function(t){return this.any||(t=this.xf["@@transducer/step"](t,!1)),this.xf["@@transducer/result"](t)},e.prototype["@@transducer/step"]=function(t,r){return this.f(r)&&(this.any=!0,t=hNt(this.xf["@@transducer/step"](t,!0))),t},e}(),yNt=fNt(function(t,r){return new gNt(t,r)});yCe.exports=yNt});var ICe=y((i_r,bCe)=>{c();var vNt=ie(),bNt=Xr(),INt=vCe(),_Nt=vNt(bNt(["any"],INt,function(t,r){for(var n=0;n<r.length;){if(t(r[n]))return!0;n+=1}return!1}));bCe.exports=_Nt});var CCe=y((o_r,_Ce)=>{c();var CNt=je(),xNt=Cn(),SNt=jp(),wNt=Xh(),ENt=Co(),ANt=CNt(function(t){return xNt(ENt(SNt,0,wNt("length",t)),function(){for(var r=0,n=t.length;r<n;){if(t[r].apply(this,arguments))return!0;r+=1}return!1})});_Ce.exports=ANt});var uA=y((c_r,xCe)=>{c();var RNt=Hs(),TNt=ie(),NNt=Zi(),BNt=as(),kNt=TNt(function(t,r){return typeof r["fantasy-land/ap"]=="function"?r["fantasy-land/ap"](t):typeof t.ap=="function"?t.ap(r):typeof t=="function"?function(n){return t(n)(r(n))}:NNt(function(n,i){return RNt(n,BNt(i,r))},[],t)});xCe.exports=kNt});var wCe=y((l_r,SCe)=>{c();function ONt(e,t){for(var r=0,n=t.length-(e-1),i=new Array(n>=0?n:0);r<n;)i[r]=Array.prototype.slice.call(t,r,r+e),r+=1;return i}SCe.exports=ONt});var ACe=y((d_r,ECe)=>{c();var GNt=Hs(),FNt=ie(),LNt=en(),ZNt=function(){function e(t,r){this.xf=r,this.pos=0,this.full=!1,this.acc=new Array(t)}return e.prototype["@@transducer/init"]=LNt.init,e.prototype["@@transducer/result"]=function(t){return this.acc=null,this.xf["@@transducer/result"](t)},e.prototype["@@transducer/step"]=function(t,r){return this.store(r),this.full?this.xf["@@transducer/step"](t,this.getCopy()):t},e.prototype.store=function(t){this.acc[this.pos]=t,this.pos+=1,this.pos===this.acc.length&&(this.pos=0,this.full=!0)},e.prototype.getCopy=function(){return GNt(Array.prototype.slice.call(this.acc,this.pos),Array.prototype.slice.call(this.acc,0,this.pos))},e}(),PNt=FNt(function(t,r){return new ZNt(t,r)});ECe.exports=PNt});var TCe=y((h_r,RCe)=>{c();var WNt=wCe(),DNt=ie(),qNt=Xr(),VNt=ACe(),HNt=DNt(qNt([],VNt,WNt));RCe.exports=HNt});var BCe=y((g_r,NCe)=>{c();var MNt=Hs(),UNt=ie(),jNt=UNt(function(t,r){return MNt(r,[t])});NCe.exports=jNt});var rq=y((v_r,kCe)=>{c();var XNt=ie(),YNt=XNt(function(t,r){return t.apply(this,r)});kCe.exports=YNt});var nq=y((I_r,OCe)=>{c();var KNt=je(),zNt=Us(),JNt=KNt(function(t){for(var r=zNt(t),n=r.length,i=[],s=0;s<n;)i[s]=t[r[s]],s+=1;return i});OCe.exports=JNt});var LCe=y((C_r,FCe)=>{c();var $Nt=je(),QNt=rq(),eBt=Cn(),tBt=jp(),rBt=Xh(),nBt=Co(),iBt=Us(),sBt=nq();function GCe(e,t){return iBt(t).reduce(function(r,n){return r[n]=e(t[n]),r},{})}var oBt=$Nt(function e(t){return t=GCe(function(r){return typeof r=="function"?r:e(r)},t),eBt(nBt(tBt,0,rBt("length",sBt(t))),function(){var r=arguments;return GCe(function(n){return QNt(n,r)},t)})});FCe.exports=oBt});var PCe=y((S_r,ZCe)=>{c();var aBt=ie(),cBt=aBt(function(t,r){return r(t)});ZCe.exports=cBt});var DCe=y((E_r,WCe)=>{c();var uBt=it(),lBt=uBt(function(t,r,n){var i=t(r),s=t(n);return i<s?-1:i>s?1:0});WCe.exports=lBt});var hb=y((R_r,qCe)=>{c();var pBt=it(),dBt=pBt(function(t,r,n){var i={};for(var s in n)i[s]=n[s];return i[t]=r,i});qCe.exports=dBt});var lA=y((N_r,VCe)=>{c();var fBt=je(),hBt=fBt(function(t){return t==null});VCe.exports=hBt});var iq=y((k_r,MCe)=>{c();var mBt=it(),gBt=Pi(),yBt=Sa(),HCe=db(),vBt=hb(),bBt=lA(),IBt=mBt(function e(t,r,n){if(t.length===0)return r;var i=t[0];if(t.length>1){var s=!bBt(n)&&gBt(i,n)?n[i]:HCe(t[1])?[]:{};r=e(Array.prototype.slice.call(t,1),r,s)}if(HCe(i)&&yBt(n)){var o=[].concat(n);return o[i]=r,o}else return vBt(i,r,n)});MCe.exports=IBt});var mb=y((G_r,UCe)=>{c();var _Bt=ie(),CBt=_Bt(function(t,r){switch(t){case 0:return function(){return r.call(this)};case 1:return function(n){return r.call(this,n)};case 2:return function(n,i){return r.call(this,n,i)};case 3:return function(n,i,s){return r.call(this,n,i,s)};case 4:return function(n,i,s,o){return r.call(this,n,i,s,o)};case 5:return function(n,i,s,o,a){return r.call(this,n,i,s,o,a)};case 6:return function(n,i,s,o,a,u){return r.call(this,n,i,s,o,a,u)};case 7:return function(n,i,s,o,a,u,p){return r.call(this,n,i,s,o,a,u,p)};case 8:return function(n,i,s,o,a,u,p,d){return r.call(this,n,i,s,o,a,u,p,d)};case 9:return function(n,i,s,o,a,u,p,d,h){return r.call(this,n,i,s,o,a,u,p,d,h)};case 10:return function(n,i,s,o,a,u,p,d,h,m){return r.call(this,n,i,s,o,a,u,p,d,h,m)};default:throw new Error("First argument to nAry must be a non-negative integer no greater than ten")}});UCe.exports=CBt});var XCe=y((L_r,jCe)=>{c();var xBt=je(),SBt=mb(),wBt=xBt(function(t){return SBt(2,t)});jCe.exports=wBt});var Yh=y((P_r,YCe)=>{c();function EBt(e){var t=Object.prototype.toString.call(e);return t==="[object Function]"||t==="[object AsyncFunction]"||t==="[object GeneratorFunction]"||t==="[object AsyncGeneratorFunction]"}YCe.exports=EBt});var sq=y((D_r,zCe)=>{c();var ABt=ie(),RBt=Zi(),TBt=uA(),KCe=Cn(),NBt=as(),BBt=ABt(function(t,r){var n=KCe(t,r);return KCe(t,function(){return RBt(TBt,NBt(n,arguments[0]),Array.prototype.slice.call(arguments,1))})});zCe.exports=BBt});var gb=y((V_r,JCe)=>{c();var kBt=je(),OBt=sq(),GBt=kBt(function(t){return OBt(t.length,t)});JCe.exports=GBt});var QCe=y((M_r,$Ce)=>{c();var FBt=ie(),LBt=Yh(),ZBt=tq(),PBt=gb(),WBt=FBt(function(t,r){return LBt(t)?function(){return t.apply(this,arguments)&&r.apply(this,arguments)}:PBt(ZBt)(t,r)});$Ce.exports=WBt});var pA=y((j_r,exe)=>{c();var DBt=je(),qBt=Cn(),VBt=DBt(function(t){return qBt(t.length,t)});exe.exports=VBt});var rxe=y((Y_r,txe)=>{c();var HBt=pA(),MBt=HBt(function(t){return t.apply(this,Array.prototype.slice.call(arguments,1))});txe.exports=MBt});var oq=y((z_r,nxe)=>{c();var UBt=pb();function jBt(e){return function t(r){for(var n,i,s,o=[],a=0,u=r.length;a<u;){if(UBt(r[a]))for(n=e?t(r[a]):r[a],s=0,i=n.length;s<i;)o[o.length]=n[s],s+=1;else o[o.length]=r[a];a+=1}return o}}nxe.exports=jBt});var sxe=y(($_r,ixe)=>{c();function XBt(e){return{"@@transducer/value":e,"@@transducer/reduced":!0}}ixe.exports=XBt});var uxe=y((e0r,cxe)=>{c();var YBt=sxe(),KBt=pb(),oxe=Zi(),axe=en(),zBt=function(e){return{"@@transducer/init":axe.init,"@@transducer/result":function(t){return e["@@transducer/result"](t)},"@@transducer/step":function(t,r){var n=e["@@transducer/step"](t,r);return n["@@transducer/reduced"]?YBt(n):n}}},JBt=function(t){var r=zBt(t);return{"@@transducer/init":axe.init,"@@transducer/result":function(n){return r["@@transducer/result"](n)},"@@transducer/step":function(n,i){return KBt(i)?oxe(r,n,i):oxe(r,n,[i])}}};cxe.exports=JBt});var pxe=y((r0r,lxe)=>{c();var $Bt=ie(),QBt=uxe(),e1t=as(),t1t=$Bt(function(t,r){return e1t(t,QBt(r))});lxe.exports=t1t});var dA=y((i0r,dxe)=>{c();var r1t=ie(),n1t=Xr(),i1t=oq(),s1t=pxe(),o1t=as(),a1t=r1t(n1t(["fantasy-land/chain","chain"],s1t,function(t,r){return typeof r=="function"?function(n){return t(r(n))(n)}:i1t(!1)(o1t(t,r))}));dxe.exports=a1t});var hxe=y((o0r,fxe)=>{c();var c1t=it(),u1t=c1t(function(t,r,n){if(t>r)throw new Error("min must not be greater than max in clamp(min, max, value)");return n<t?t:n>r?r:n});fxe.exports=u1t});var aq=y((c0r,mxe)=>{c();function l1t(e){return new RegExp(e.source,(e.global?"g":"")+(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.sticky?"y":"")+(e.unicode?"u":""))}mxe.exports=l1t});var fA=y((l0r,gxe)=>{c();var p1t=je(),d1t=p1t(function(t){return t===null?"Null":t===void 0?"Undefined":Object.prototype.toString.call(t).slice(8,-1)});gxe.exports=d1t});var hA=y((d0r,vxe)=>{c();var f1t=aq(),h1t=fA();function yxe(e,t,r,n){var i=function(o){for(var a=t.length,u=0;u<a;){if(e===t[u])return r[u];u+=1}t[u+1]=e,r[u+1]=o;for(var p in e)o[p]=n?yxe(e[p],t,r,!0):e[p];return o};switch(h1t(e)){case"Object":return i({});case"Array":return i([]);case"Date":return new Date(e.valueOf());case"RegExp":return f1t(e);default:return e}}vxe.exports=yxe});var Ixe=y((h0r,bxe)=>{c();var m1t=hA(),g1t=je(),y1t=g1t(function(t){return t!=null&&typeof t.clone=="function"?t.clone():m1t(t,[],[],!0)});bxe.exports=y1t});var Cxe=y((g0r,_xe)=>{c();var v1t=je(),b1t=v1t(function(t){return function(r,n){return t(r,n)?-1:t(n,r)?1:0}});_xe.exports=b1t});var cq=y((v0r,xxe)=>{c();var I1t=je(),_1t=I1t(function(t){return!t});xxe.exports=_1t});var wxe=y((I0r,Sxe)=>{c();var C1t=gb(),x1t=cq(),S1t=C1t(x1t);Sxe.exports=S1t});var Axe=y((C0r,Exe)=>{c();function w1t(e,t){return function(){return t.call(this,e.apply(this,arguments))}}Exe.exports=w1t});var Kh=y((S0r,Rxe)=>{c();var E1t=Sa();function A1t(e,t){return function(){var r=arguments.length;if(r===0)return t();var n=arguments[r-1];return E1t(n)||typeof n[e]!="function"?t.apply(this,arguments):n[e].apply(n,Array.prototype.slice.call(arguments,0,r-1))}}Rxe.exports=A1t});var js=y((E0r,Txe)=>{c();var R1t=Kh(),T1t=it(),N1t=T1t(R1t("slice",function(t,r,n){return Array.prototype.slice.call(n,t,r)}));Txe.exports=N1t});var yb=y((R0r,Nxe)=>{c();var B1t=Kh(),k1t=je(),O1t=js(),G1t=k1t(B1t("tail",O1t(1,1/0)));Nxe.exports=G1t});var uq=y((N0r,Bxe)=>{c();var F1t=Ms(),L1t=Axe(),Z1t=Co(),P1t=yb();function W1t(){if(arguments.length===0)throw new Error("pipe requires at least one argument");return F1t(arguments[0].length,Z1t(L1t,arguments[0],P1t(arguments)))}Bxe.exports=W1t});var zh=y((k0r,kxe)=>{c();var D1t=je(),q1t=jh(),V1t=D1t(function(t){return q1t(t)?t.split("").reverse().join(""):Array.prototype.slice.call(t,0).reverse()});kxe.exports=V1t});var mA=y((G0r,Oxe)=>{c();var H1t=uq(),M1t=zh();function U1t(){if(arguments.length===0)throw new Error("compose requires at least one argument");return H1t.apply(this,M1t(arguments))}Oxe.exports=U1t});var lq=y((L0r,Fxe)=>{c();var j1t=dA(),Gxe=mA(),X1t=as();function Y1t(){if(arguments.length===0)throw new Error("composeK requires at least one argument");var e=Array.prototype.slice.call(arguments),t=e.pop();return Gxe(Gxe.apply(this,X1t(j1t,e)),t)}Fxe.exports=Y1t});var Zxe=y((P0r,Lxe)=>{c();function K1t(e,t){return function(){var r=this;return e.apply(r,arguments).then(function(n){return t.call(r,n)})}}Lxe.exports=K1t});var pq=y((D0r,Pxe)=>{c();var z1t=Ms(),J1t=Zxe(),$1t=Co(),Q1t=yb();function e2t(){if(arguments.length===0)throw new Error("pipeP requires at least one argument");return z1t(arguments[0].length,$1t(J1t,arguments[0],Q1t(arguments)))}Pxe.exports=e2t});var Dxe=y((V0r,Wxe)=>{c();var t2t=pq(),r2t=zh();function n2t(){if(arguments.length===0)throw new Error("composeP requires at least one argument");return t2t.apply(this,r2t(arguments))}Wxe.exports=n2t});var dq=y((M0r,qxe)=>{c();var i2t=Xp(),s2t=i2t(0);qxe.exports=s2t});var gA=y((j0r,Vxe)=>{c();function o2t(e){return e}Vxe.exports=o2t});var vb=y((Y0r,Hxe)=>{c();var a2t=je(),c2t=gA(),u2t=a2t(c2t);Hxe.exports=u2t});var fq=y((z0r,Mxe)=>{c();var l2t=Ms(),p2t=ie(),d2t=dq(),f2t=Zi(),h2t=yb(),m2t=vb(),g2t=p2t(function(t,r){if(r.length<=0)return m2t;var n=d2t(r),i=h2t(r);return l2t(n.length,function(){return f2t(function(s,o){return t.call(this,o,s)},n.apply(this,arguments),i)})});Mxe.exports=g2t});var jxe=y(($0r,Uxe)=>{c();var y2t=ie(),v2t=fq(),b2t=zh(),I2t=y2t(function(t,r){return v2t.apply(this,[t,b2t(r)])});Uxe.exports=I2t});var Yxe=y((eCr,Xxe)=>{c();function _2t(e){for(var t=[],r;!(r=e.next()).done;)t.push(r.value);return t}Xxe.exports=_2t});var bb=y((rCr,Kxe)=>{c();function C2t(e,t,r){for(var n=0,i=r.length;n<i;){if(e(t,r[n]))return!0;n+=1}return!1}Kxe.exports=C2t});var Jxe=y((iCr,zxe)=>{c();function x2t(e){var t=String(e).match(/^function (\w*)/);return t==null?"":t[1]}zxe.exports=x2t});var hq=y((oCr,$xe)=>{c();function S2t(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}$xe.exports=typeof Object.is=="function"?Object.is:S2t});var sSe=y((cCr,iSe)=>{c();var Qxe=Yxe(),eSe=bb(),w2t=Jxe(),E2t=Pi(),mq=hq(),tSe=Us(),rSe=fA();function nSe(e,t,r,n){var i=Qxe(e),s=Qxe(t);function o(a,u){return gq(a,u,r.slice(),n.slice())}return!eSe(function(a,u){return!eSe(o,u,a)},s,i)}function gq(e,t,r,n){if(mq(e,t))return!0;var i=rSe(e);if(i!==rSe(t)||e==null||t==null)return!1;if(typeof e["fantasy-land/equals"]=="function"||typeof t["fantasy-land/equals"]=="function")return typeof e["fantasy-land/equals"]=="function"&&e["fantasy-land/equals"](t)&&typeof t["fantasy-land/equals"]=="function"&&t["fantasy-land/equals"](e);if(typeof e.equals=="function"||typeof t.equals=="function")return typeof e.equals=="function"&&e.equals(t)&&typeof t.equals=="function"&&t.equals(e);switch(i){case"Arguments":case"Array":case"Object":if(typeof e.constructor=="function"&&w2t(e.constructor)==="Promise")return e===t;break;case"Boolean":case"Number":case"String":if(!(typeof e==typeof t&&mq(e.valueOf(),t.valueOf())))return!1;break;case"Date":if(!mq(e.valueOf(),t.valueOf()))return!1;break;case"Error":return e.name===t.name&&e.message===t.message;case"RegExp":if(!(e.source===t.source&&e.global===t.global&&e.ignoreCase===t.ignoreCase&&e.multiline===t.multiline&&e.sticky===t.sticky&&e.unicode===t.unicode))return!1;break}for(var s=r.length-1;s>=0;){if(r[s]===e)return n[s]===t;s-=1}switch(i){case"Map":return e.size!==t.size?!1:nSe(e.entries(),t.entries(),r.concat([e]),n.concat([t]));case"Set":return e.size!==t.size?!1:nSe(e.values(),t.values(),r.concat([e]),n.concat([t]));case"Arguments":case"Array":case"Object":case"Boolean":case"Number":case"String":case"Date":case"Error":case"RegExp":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"ArrayBuffer":break;default:return!1}var o=tSe(e);if(o.length!==tSe(t).length)return!1;var a=r.concat([e]),u=n.concat([t]);for(s=o.length-1;s>=0;){var p=o[s];if(!(E2t(p,t)&&gq(t[p],e[p],a,u)))return!1;s-=1}return!0}iSe.exports=gq});var cs=y((lCr,oSe)=>{c();var A2t=ie(),R2t=sSe(),T2t=A2t(function(t,r){return R2t(t,r,[],[])});oSe.exports=T2t});var yq=y((dCr,aSe)=>{c();var N2t=cs();function B2t(e,t,r){var n,i;if(typeof e.indexOf=="function")switch(typeof t){case"number":if(t===0){for(n=1/t;r<e.length;){if(i=e[r],i===0&&1/i===n)return r;r+=1}return-1}else if(t!==t){for(;r<e.length;){if(i=e[r],typeof i=="number"&&i!==i)return r;r+=1}return-1}return e.indexOf(t,r);case"string":case"boolean":case"function":case"undefined":return e.indexOf(t,r);case"object":if(t===null)return e.indexOf(t,r)}for(;r<e.length;){if(N2t(e[r],t))return r;r+=1}return-1}aSe.exports=B2t});var Yp=y((hCr,cSe)=>{c();var k2t=yq();function O2t(e,t){return k2t(t,e,0)>=0}cSe.exports=O2t});var lSe=y((gCr,uSe)=>{c();function G2t(e){var t=e.replace(/\\/g,"\\\\").replace(/[\b]/g,"\\b").replace(/\f/g,"\\f").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t").replace(/\v/g,"\\v").replace(/\0/g,"\\0");return'"'+t.replace(/"/g,'\\"')+'"'}uSe.exports=G2t});var dSe=y((vCr,pSe)=>{c();var Ib=function(t){return(t<10?"0":"")+t},F2t=typeof Date.prototype.toISOString=="function"?function(t){return t.toISOString()}:function(t){return t.getUTCFullYear()+"-"+Ib(t.getUTCMonth()+1)+"-"+Ib(t.getUTCDate())+"T"+Ib(t.getUTCHours())+":"+Ib(t.getUTCMinutes())+":"+Ib(t.getUTCSeconds())+"."+(t.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5)+"Z"};pSe.exports=F2t});var vq=y((ICr,fSe)=>{c();function L2t(e){return function(){return!e.apply(this,arguments)}}fSe.exports=L2t});var yA=y((CCr,hSe)=>{c();function Z2t(e,t){for(var r=0,n=t.length,i=[];r<n;)e(t[r])&&(i[i.length]=t[r]),r+=1;return i}hSe.exports=Z2t});var vA=y((SCr,mSe)=>{c();function P2t(e){return Object.prototype.toString.call(e)==="[object Object]"}mSe.exports=P2t});var vSe=y((ECr,ySe)=>{c();var W2t=ie(),gSe=en(),D2t=function(){function e(t,r){this.xf=r,this.f=t}return e.prototype["@@transducer/init"]=gSe.init,e.prototype["@@transducer/result"]=gSe.result,e.prototype["@@transducer/step"]=function(t,r){return this.f(r)?this.xf["@@transducer/step"](t,r):t},e}(),q2t=W2t(function(t,r){return new D2t(t,r)});ySe.exports=q2t});var bA=y((RCr,bSe)=>{c();var V2t=ie(),H2t=Xr(),M2t=yA(),U2t=vA(),j2t=Zi(),X2t=vSe(),Y2t=Us(),K2t=V2t(H2t(["filter"],X2t,function(e,t){return U2t(t)?j2t(function(r,n){return e(t[n])&&(r[n]=t[n]),r},{},Y2t(t)):M2t(e,t)}));bSe.exports=K2t});var _b=y((NCr,ISe)=>{c();var z2t=vq(),J2t=ie(),$2t=bA(),Q2t=J2t(function(t,r){return $2t(z2t(t),r)});ISe.exports=Q2t});var _q=y((kCr,xSe)=>{c();var ekt=Yp(),bq=lb(),Iq=lSe(),tkt=dSe(),_Se=Us(),rkt=_b();function CSe(e,t){var r=function(o){var a=t.concat([e]);return ekt(o,a)?"<Circular>":CSe(o,a)},n=function(s,o){return bq(function(a){return Iq(a)+": "+r(s[a])},o.slice().sort())};switch(Object.prototype.toString.call(e)){case"[object Arguments]":return"(function() { return arguments; }("+bq(r,e).join(", ")+"))";case"[object Array]":return"["+bq(r,e).concat(n(e,rkt(function(s){return/^\d+$/.test(s)},_Se(e)))).join(", ")+"]";case"[object Boolean]":return typeof e=="object"?"new Boolean("+r(e.valueOf())+")":e.toString();case"[object Date]":return"new Date("+(isNaN(e.valueOf())?r(NaN):Iq(tkt(e)))+")";case"[object Null]":return"null";case"[object Number]":return typeof e=="object"?"new Number("+r(e.valueOf())+")":1/e===-1/0?"-0":e.toString(10);case"[object String]":return typeof e=="object"?"new String("+r(e.valueOf())+")":Iq(e);case"[object Undefined]":return"undefined";default:if(typeof e.toString=="function"){var i=e.toString();if(i!=="[object Object]")return i}return"{"+n(e,_Se(e)).join(", ")+"}"}}xSe.exports=CSe});var Cb=y((GCr,SSe)=>{c();var nkt=je(),ikt=_q(),skt=nkt(function(t){return ikt(t,[])});SSe.exports=skt});var IA=y((LCr,RSe)=>{c();var okt=ie(),wSe=Sa(),ESe=Yh(),ASe=jh(),Cq=Cb(),akt=okt(function(t,r){if(wSe(t)){if(wSe(r))return t.concat(r);throw new TypeError(Cq(r)+" is not an array")}if(ASe(t)){if(ASe(r))return t+r;throw new TypeError(Cq(r)+" is not a string")}if(t!=null&&ESe(t["fantasy-land/concat"]))return t["fantasy-land/concat"](r);if(t!=null&&ESe(t.concat))return t.concat(r);throw new TypeError(Cq(t)+' does not have a method named "concat" or "fantasy-land/concat"')});RSe.exports=akt});var NSe=y((PCr,TSe)=>{c();var ckt=Ms(),ukt=je(),lkt=as(),pkt=jp(),dkt=Co(),fkt=ukt(function(t){var r=dkt(pkt,0,lkt(function(n){return n[0].length},t));return ckt(r,function(){for(var n=0;n<t.length;){if(t[n][0].apply(this,arguments))return t[n][1].apply(this,arguments);n+=1}})});TSe.exports=fkt});var xq=y((DCr,BSe)=>{c();var hkt=ie(),mkt=pA(),gkt=mb(),ykt=hkt(function(t,r){if(t>10)throw new Error("Constructor with greater than ten arguments");return t===0?function(){return new r}:mkt(gkt(t,function(n,i,s,o,a,u,p,d,h,m){switch(arguments.length){case 1:return new r(n);case 2:return new r(n,i);case 3:return new r(n,i,s);case 4:return new r(n,i,s,o);case 5:return new r(n,i,s,o,a);case 6:return new r(n,i,s,o,a,u);case 7:return new r(n,i,s,o,a,u,p);case 8:return new r(n,i,s,o,a,u,p,d);case 9:return new r(n,i,s,o,a,u,p,d,h);case 10:return new r(n,i,s,o,a,u,p,d,h,m)}}))});BSe.exports=ykt});var OSe=y((VCr,kSe)=>{c();var vkt=je(),bkt=xq(),Ikt=vkt(function(t){return bkt(t.length,t)});kSe.exports=Ikt});var FSe=y((MCr,GSe)=>{c();var _kt=Yp(),Ckt=ie(),xkt=Ckt(_kt);GSe.exports=xkt});var Sq=y((jCr,LSe)=>{c();var Skt=ie(),wkt=lb(),Ekt=Cn(),Akt=jp(),Rkt=Xh(),Tkt=Co(),Nkt=Skt(function(t,r){return Ekt(Tkt(Akt,0,Rkt("length",r)),function(){var n=arguments,i=this;return t.apply(i,wkt(function(s){return s.apply(i,n)},r))})});LSe.exports=Nkt});var PSe=y((YCr,ZSe)=>{c();var Bkt=ub(),kkt=Pi(),Okt=en(),Gkt=function(){function e(t,r,n,i){this.valueFn=t,this.valueAcc=r,this.keyFn=n,this.xf=i,this.inputs={}}return e.prototype["@@transducer/init"]=Okt.init,e.prototype["@@transducer/result"]=function(t){var r;for(r in this.inputs)if(kkt(r,this.inputs)&&(t=this.xf["@@transducer/step"](t,this.inputs[r]),t["@@transducer/reduced"])){t=t["@@transducer/value"];break}return this.inputs=null,this.xf["@@transducer/result"](t)},e.prototype["@@transducer/step"]=function(t,r){var n=this.keyFn(r);return this.inputs[n]=this.inputs[n]||[n,this.valueAcc],this.inputs[n][1]=this.valueFn(this.inputs[n][1],r),t},e}(),Fkt=Bkt(4,[],function(t,r,n,i){return new Gkt(t,r,n,i)});ZSe.exports=Fkt});var xb=y((zCr,WSe)=>{c();var Lkt=hA(),Zkt=ub(),Pkt=Xr(),Wkt=Pi(),Dkt=Zi(),qkt=PSe(),Vkt=Zkt(4,[],Pkt([],qkt,function(t,r,n,i){return Dkt(function(s,o){var a=n(o);return s[a]=t(Wkt(a,s)?s[a]:Lkt(r,[],[],!1),o),s},{},i)}));WSe.exports=Vkt});var qSe=y(($Cr,DSe)=>{c();var Hkt=xb(),Mkt=Hkt(function(e,t){return e+1},0);DSe.exports=Mkt});var HSe=y((exr,VSe)=>{c();var Ukt=cb(),jkt=Ukt(-1);VSe.exports=jkt});var wq=y((rxr,MSe)=>{c();var Xkt=ie(),Ykt=Xkt(function(t,r){return r==null||r!==r?t:r});MSe.exports=Ykt});var jSe=y((ixr,USe)=>{c();var Kkt=it(),zkt=Kkt(function(t,r,n){var i=t(r),s=t(n);return i>s?-1:i<s?1:0});USe.exports=zkt});var Eq=y((oxr,KSe)=>{c();var XSe=Yp(),Jkt=function(){function e(){this._nativeSet=typeof Set=="function"?new Set:null,this._items={}}return e.prototype.add=function(t){return!YSe(t,!0,this)},e.prototype.has=function(t){return YSe(t,!1,this)},e}();function YSe(e,t,r){var n=typeof e,i,s;switch(n){case"string":case"number":return e===0&&1/e===-1/0?r._items["-0"]?!0:(t&&(r._items["-0"]=!0),!1):r._nativeSet!==null?t?(i=r._nativeSet.size,r._nativeSet.add(e),s=r._nativeSet.size,s===i):r._nativeSet.has(e):n in r._items?e in r._items[n]?!0:(t&&(r._items[n][e]=!0),!1):(t&&(r._items[n]={},r._items[n][e]=!0),!1);case"boolean":if(n in r._items){var o=e?1:0;return r._items[n][o]?!0:(t&&(r._items[n][o]=!0),!1)}else return t&&(r._items[n]=e?[!1,!0]:[!0,!1]),!1;case"function":return r._nativeSet!==null?t?(i=r._nativeSet.size,r._nativeSet.add(e),s=r._nativeSet.size,s===i):r._nativeSet.has(e):n in r._items?XSe(e,r._items[n])?!0:(t&&r._items[n].push(e),!1):(t&&(r._items[n]=[e]),!1);case"undefined":return r._items[n]?!0:(t&&(r._items[n]=!0),!1);case"object":if(e===null)return r._items.null?!0:(t&&(r._items.null=!0),!1);default:return n=Object.prototype.toString.call(e),n in r._items?XSe(e,r._items[n])?!0:(t&&r._items[n].push(e),!1):(t&&(r._items[n]=[e]),!1)}}KSe.exports=Jkt});var Aq=y((cxr,zSe)=>{c();var $kt=ie(),Qkt=Eq(),eOt=$kt(function(t,r){for(var n=[],i=0,s=t.length,o=r.length,a=new Qkt,u=0;u<o;u+=1)a.add(r[u]);for(;i<s;)a.add(t[i])&&(n[n.length]=t[i]),i+=1;return n});zSe.exports=eOt});var Rq=y((lxr,$Se)=>{c();var JSe=bb(),tOt=it(),rOt=tOt(function(t,r,n){for(var i=[],s=0,o=r.length;s<o;)!JSe(t,r[s],n)&&!JSe(t,r[s],i)&&i.push(r[s]),s+=1;return i});$Se.exports=rOt});var Tq=y((dxr,QSe)=>{c();var nOt=ie(),iOt=nOt(function(t,r){var n={};for(var i in r)n[i]=r[i];return delete n[t],n});QSe.exports=iOt});var Nq=y((hxr,ewe)=>{c();var sOt=it(),oOt=sOt(function(t,r,n){var i=Array.prototype.slice.call(n,0);return i.splice(t,r),i});ewe.exports=oOt});var _A=y((gxr,twe)=>{c();var aOt=it(),cOt=KD(),uOt=fb(),lOt=aOt(function(t,r,n){return cOt(t,uOt(r),n)});twe.exports=lOt});var swe=y((vxr,iwe)=>{c();var pOt=ie(),rwe=db(),nwe=Sa(),dOt=hb(),fOt=Tq(),hOt=Nq(),mOt=_A(),gOt=pOt(function e(t,r){switch(t.length){case 0:return r;case 1:return rwe(t[0])&&nwe(r)?hOt(t[0],1,r):fOt(t[0],r);default:var n=t[0],i=Array.prototype.slice.call(t,1);return r[n]==null?r:rwe(n)&&nwe(r)?mOt(n,e(i,r[n]),r):dOt(n,e(i,r[n]),r)}});iwe.exports=gOt});var awe=y((Ixr,owe)=>{c();var yOt=ie(),vOt=yOt(function(t,r){return t/r});owe.exports=vOt});var lwe=y((Cxr,uwe)=>{c();var bOt=ie(),cwe=en(),IOt=function(){function e(t,r){this.xf=r,this.n=t}return e.prototype["@@transducer/init"]=cwe.init,e.prototype["@@transducer/result"]=cwe.result,e.prototype["@@transducer/step"]=function(t,r){return this.n>0?(this.n-=1,t):this.xf["@@transducer/step"](t,r)},e}(),_Ot=bOt(function(t,r){return new IOt(t,r)});uwe.exports=_Ot});var Bq=y((Sxr,pwe)=>{c();var COt=ie(),xOt=Xr(),SOt=lwe(),wOt=js(),EOt=COt(xOt(["drop"],SOt,function(t,r){return wOt(Math.max(0,t),1/0,r)}));pwe.exports=EOt});var hwe=y((Exr,fwe)=>{c();var AOt=ie(),ROt=Bc(),dwe=en(),TOt=function(){function e(t,r){this.xf=r,this.n=t,this.i=0}return e.prototype["@@transducer/init"]=dwe.init,e.prototype["@@transducer/result"]=dwe.result,e.prototype["@@transducer/step"]=function(t,r){this.i+=1;var n=this.n===0?t:this.xf["@@transducer/step"](t,r);return this.n>=0&&this.i>=this.n?ROt(n):n},e}(),NOt=AOt(function(t,r){return new TOt(t,r)});fwe.exports=NOt});var CA=y((Rxr,mwe)=>{c();var BOt=ie(),kOt=Xr(),OOt=hwe(),GOt=js(),FOt=BOt(kOt(["take"],OOt,function(t,r){return GOt(0,t<0?1/0:t,r)}));mwe.exports=FOt});var ywe=y((Nxr,gwe)=>{c();var LOt=CA();function ZOt(e,t){return LOt(e<t.length?t.length-e:0,t)}gwe.exports=ZOt});var bwe=y((kxr,vwe)=>{c();var POt=ie(),WOt=en(),DOt=function(){function e(t,r){this.xf=r,this.pos=0,this.full=!1,this.acc=new Array(t)}return e.prototype["@@transducer/init"]=WOt.init,e.prototype["@@transducer/result"]=function(t){return this.acc=null,this.xf["@@transducer/result"](t)},e.prototype["@@transducer/step"]=function(t,r){return this.full&&(t=this.xf["@@transducer/step"](t,this.acc[this.pos])),this.store(r),t},e.prototype.store=function(t){this.acc[this.pos]=t,this.pos+=1,this.pos===this.acc.length&&(this.pos=0,this.full=!0)},e}(),qOt=POt(function(t,r){return new DOt(t,r)});vwe.exports=qOt});var _we=y((Gxr,Iwe)=>{c();var VOt=ie(),HOt=Xr(),MOt=ywe(),UOt=bwe(),jOt=VOt(HOt([],UOt,MOt));Iwe.exports=jOt});var xwe=y((Lxr,Cwe)=>{c();var XOt=js();function YOt(e,t){for(var r=t.length-1;r>=0&&e(t[r]);)r-=1;return XOt(0,r+1,t)}Cwe.exports=YOt});var wwe=y((Pxr,Swe)=>{c();var KOt=ie(),zOt=Zi(),JOt=en(),$Ot=function(){function e(t,r){this.f=t,this.retained=[],this.xf=r}return e.prototype["@@transducer/init"]=JOt.init,e.prototype["@@transducer/result"]=function(t){return this.retained=null,this.xf["@@transducer/result"](t)},e.prototype["@@transducer/step"]=function(t,r){return this.f(r)?this.retain(t,r):this.flush(t,r)},e.prototype.flush=function(t,r){return t=zOt(this.xf["@@transducer/step"],t,this.retained),this.retained=[],this.xf["@@transducer/step"](t,r)},e.prototype.retain=function(t,r){return this.retained.push(r),t},e}(),QOt=KOt(function(t,r){return new $Ot(t,r)});Swe.exports=QOt});var Awe=y((Dxr,Ewe)=>{c();var eGt=ie(),tGt=Xr(),rGt=xwe(),nGt=wwe(),iGt=eGt(tGt([],nGt,rGt));Ewe.exports=iGt});var kq=y((Vxr,Twe)=>{c();var sGt=ie(),Rwe=en(),oGt=function(){function e(t,r){this.xf=r,this.pred=t,this.lastValue=void 0,this.seenFirstValue=!1}return e.prototype["@@transducer/init"]=Rwe.init,e.prototype["@@transducer/result"]=Rwe.result,e.prototype["@@transducer/step"]=function(t,r){var n=!1;return this.seenFirstValue?this.pred(this.lastValue,r)&&(n=!0):this.seenFirstValue=!0,this.lastValue=r,n?t:this.xf["@@transducer/step"](t,r)},e}(),aGt=sGt(function(t,r){return new oGt(t,r)});Twe.exports=aGt});var Oq=y((Mxr,Nwe)=>{c();var cGt=Xp(),uGt=cGt(-1);Nwe.exports=uGt});var Gq=y((jxr,Bwe)=>{c();var lGt=ie(),pGt=Xr(),dGt=kq(),fGt=Oq(),hGt=lGt(pGt([],dGt,function(t,r){var n=[],i=1,s=r.length;if(s!==0)for(n[0]=r[0];i<s;)t(fGt(n),r[i])||(n[n.length]=r[i]),i+=1;return n}));Bwe.exports=hGt});var Gwe=y((Yxr,Owe)=>{c();var mGt=je(),gGt=Xr(),yGt=kq(),vGt=Gq(),kwe=cs(),bGt=mGt(gGt([],yGt(kwe),vGt(kwe)));Owe.exports=bGt});var Zwe=y((zxr,Lwe)=>{c();var IGt=ie(),Fwe=en(),_Gt=function(){function e(t,r){this.xf=r,this.f=t}return e.prototype["@@transducer/init"]=Fwe.init,e.prototype["@@transducer/result"]=Fwe.result,e.prototype["@@transducer/step"]=function(t,r){if(this.f){if(this.f(r))return t;this.f=null}return this.xf["@@transducer/step"](t,r)},e}(),CGt=IGt(function(t,r){return new _Gt(t,r)});Lwe.exports=CGt});var Wwe=y(($xr,Pwe)=>{c();var xGt=ie(),SGt=Xr(),wGt=Zwe(),EGt=js(),AGt=xGt(SGt(["dropWhile"],wGt,function(t,r){for(var n=0,i=r.length;n<i&&t(r[n]);)n+=1;return EGt(n,1/0,r)}));Pwe.exports=AGt});var Fq=y((eSr,Dwe)=>{c();var RGt=ie(),TGt=RGt(function(t,r){return t||r});Dwe.exports=TGt});var Vwe=y((rSr,qwe)=>{c();var NGt=ie(),BGt=Yh(),kGt=gb(),OGt=Fq(),GGt=NGt(function(t,r){return BGt(t)?function(){return t.apply(this,arguments)||r.apply(this,arguments)}:kGt(OGt)(t,r)});qwe.exports=GGt});var Lq=y((iSr,Hwe)=>{c();var FGt=je(),LGt=QD(),ZGt=Sa(),PGt=vA(),WGt=jh(),DGt=FGt(function(t){return t!=null&&typeof t["fantasy-land/empty"]=="function"?t["fantasy-land/empty"]():t!=null&&t.constructor!=null&&typeof t.constructor["fantasy-land/empty"]=="function"?t.constructor["fantasy-land/empty"]():t!=null&&typeof t.empty=="function"?t.empty():t!=null&&t.constructor!=null&&typeof t.constructor.empty=="function"?t.constructor.empty():ZGt(t)?[]:WGt(t)?"":PGt(t)?{}:LGt(t)?function(){return arguments}():void 0});Hwe.exports=DGt});var Zq=y((oSr,Mwe)=>{c();var qGt=ie(),VGt=Bq(),HGt=qGt(function(t,r){return VGt(t>=0?r.length-t:0,r)});Mwe.exports=HGt});var jwe=y((cSr,Uwe)=>{c();var MGt=ie(),UGt=cs(),jGt=Zq(),XGt=MGt(function(e,t){return UGt(jGt(e.length,t),e)});Uwe.exports=XGt});var Ywe=y((lSr,Xwe)=>{c();var YGt=it(),KGt=cs(),zGt=YGt(function(t,r,n){return KGt(t(r),t(n))});Xwe.exports=zGt});var zwe=y((dSr,Kwe)=>{c();var JGt=it(),$Gt=cs(),QGt=JGt(function(t,r,n){return $Gt(r[t],n[t])});Kwe.exports=QGt});var $we=y((hSr,Jwe)=>{c();var eFt=ie(),tFt=eFt(function e(t,r){var n=r instanceof Array?[]:{},i,s,o;for(s in r)i=t[s],o=typeof i,n[s]=o==="function"?i(r[s]):i&&o==="object"?e(i,r[s]):r[s];return n});Jwe.exports=tFt});var eEe=y((gSr,Qwe)=>{c();var rFt=ie(),nFt=Bc(),iFt=en(),sFt=function(){function e(t,r){this.xf=r,this.f=t,this.found=!1}return e.prototype["@@transducer/init"]=iFt.init,e.prototype["@@transducer/result"]=function(t){return this.found||(t=this.xf["@@transducer/step"](t,void 0)),this.xf["@@transducer/result"](t)},e.prototype["@@transducer/step"]=function(t,r){return this.f(r)&&(this.found=!0,t=nFt(this.xf["@@transducer/step"](t,r))),t},e}(),oFt=rFt(function(t,r){return new sFt(t,r)});Qwe.exports=oFt});var rEe=y((vSr,tEe)=>{c();var aFt=ie(),cFt=Xr(),uFt=eEe(),lFt=aFt(cFt(["find"],uFt,function(t,r){for(var n=0,i=r.length;n<i;){if(t(r[n]))return r[n];n+=1}}));tEe.exports=lFt});var iEe=y((ISr,nEe)=>{c();var pFt=ie(),dFt=Bc(),fFt=en(),hFt=function(){function e(t,r){this.xf=r,this.f=t,this.idx=-1,this.found=!1}return e.prototype["@@transducer/init"]=fFt.init,e.prototype["@@transducer/result"]=function(t){return this.found||(t=this.xf["@@transducer/step"](t,-1)),this.xf["@@transducer/result"](t)},e.prototype["@@transducer/step"]=function(t,r){return this.idx+=1,this.f(r)&&(this.found=!0,t=dFt(this.xf["@@transducer/step"](t,this.idx))),t},e}(),mFt=pFt(function(t,r){return new hFt(t,r)});nEe.exports=mFt});var oEe=y((CSr,sEe)=>{c();var gFt=ie(),yFt=Xr(),vFt=iEe(),bFt=gFt(yFt([],vFt,function(t,r){for(var n=0,i=r.length;n<i;){if(t(r[n]))return n;n+=1}return-1}));sEe.exports=bFt});var cEe=y((SSr,aEe)=>{c();var IFt=ie(),_Ft=en(),CFt=function(){function e(t,r){this.xf=r,this.f=t}return e.prototype["@@transducer/init"]=_Ft.init,e.prototype["@@transducer/result"]=function(t){return this.xf["@@transducer/result"](this.xf["@@transducer/step"](t,this.last))},e.prototype["@@transducer/step"]=function(t,r){return this.f(r)&&(this.last=r),t},e}(),xFt=IFt(function(t,r){return new CFt(t,r)});aEe.exports=xFt});var lEe=y((ESr,uEe)=>{c();var SFt=ie(),wFt=Xr(),EFt=cEe(),AFt=SFt(wFt([],EFt,function(t,r){for(var n=r.length-1;n>=0;){if(t(r[n]))return r[n];n-=1}}));uEe.exports=AFt});var dEe=y((RSr,pEe)=>{c();var RFt=ie(),TFt=en(),NFt=function(){function e(t,r){this.xf=r,this.f=t,this.idx=-1,this.lastIdx=-1}return e.prototype["@@transducer/init"]=TFt.init,e.prototype["@@transducer/result"]=function(t){return this.xf["@@transducer/result"](this.xf["@@transducer/step"](t,this.lastIdx))},e.prototype["@@transducer/step"]=function(t,r){return this.idx+=1,this.f(r)&&(this.lastIdx=this.idx),t},e}(),BFt=RFt(function(t,r){return new NFt(t,r)});pEe.exports=BFt});var hEe=y((NSr,fEe)=>{c();var kFt=ie(),OFt=Xr(),GFt=dEe(),FFt=kFt(OFt([],GFt,function(t,r){for(var n=r.length-1;n>=0;){if(t(r[n]))return n;n-=1}return-1}));fEe.exports=FFt});var gEe=y((kSr,mEe)=>{c();var LFt=je(),ZFt=oq(),PFt=LFt(ZFt(!0));mEe.exports=PFt});var Sb=y((GSr,yEe)=>{c();var WFt=je(),DFt=Cn(),qFt=WFt(function(t){return DFt(t.length,function(r,n){var i=Array.prototype.slice.call(arguments,0);return i[0]=n,i[1]=r,t.apply(this,i)})});yEe.exports=qFt});var bEe=y((LSr,vEe)=>{c();var VFt=Kh(),HFt=ie(),MFt=HFt(VFt("forEach",function(t,r){for(var n=r.length,i=0;i<n;)t(r[i]),i+=1;return r}));vEe.exports=MFt});var _Ee=y((PSr,IEe)=>{c();var UFt=ie(),jFt=Us(),XFt=UFt(function(t,r){for(var n=jFt(r),i=0;i<n.length;){var s=n[i];t(r[s],s,r),i+=1}return r});IEe.exports=XFt});var xEe=y((DSr,CEe)=>{c();var YFt=je(),KFt=YFt(function(t){for(var r={},n=0;n<t.length;)r[t[n][0]]=t[n][1],n+=1;return r});CEe.exports=KFt});var wEe=y((VSr,SEe)=>{c();var zFt=Kh(),JFt=ie(),$Ft=xb(),QFt=JFt(zFt("groupBy",$Ft(function(e,t){return e==null&&(e=[]),e.push(t),e},null)));SEe.exports=QFt});var AEe=y((MSr,EEe)=>{c();var eLt=ie(),tLt=eLt(function(e,t){for(var r=[],n=0,i=t.length;n<i;){for(var s=n+1;s<i&&e(t[s-1],t[s]);)s+=1;r.push(t.slice(n,s)),n=s}return r});EEe.exports=tLt});var TEe=y((jSr,REe)=>{c();var rLt=ie(),nLt=rLt(function(t,r){return t>r});REe.exports=nLt});var BEe=y((YSr,NEe)=>{c();var iLt=ie(),sLt=iLt(function(t,r){return t>=r});NEe.exports=sLt});var Pq=y((zSr,OEe)=>{c();var oLt=ie(),aLt=Pi(),kEe=lA(),cLt=oLt(function(t,r){if(t.length===0||kEe(r))return!1;for(var n=r,i=0;i<t.length;)if(!kEe(n)&&aLt(t[i],n))n=n[t[i]],i+=1;else return!1;return!0});OEe.exports=cLt});var FEe=y(($Sr,GEe)=>{c();var uLt=ie(),lLt=Pq(),pLt=uLt(function(t,r){return lLt([t],r)});GEe.exports=pLt});var ZEe=y((ewr,LEe)=>{c();var dLt=ie(),fLt=dLt(function(t,r){return t in r});LEe.exports=fLt});var WEe=y((rwr,PEe)=>{c();var hLt=hq(),mLt=ie(),gLt=mLt(hLt);PEe.exports=gLt});var qEe=y((iwr,DEe)=>{c();var yLt=it(),vLt=Cn(),bLt=yLt(function(t,r,n){return vLt(Math.max(t.length,r.length,n.length),function(){return t.apply(this,arguments)?r.apply(this,arguments):n.apply(this,arguments)})});DEe.exports=bLt});var HEe=y((owr,VEe)=>{c();var ILt=cb(),_Lt=ILt(1);VEe.exports=_Lt});var UEe=y((cwr,MEe)=>{c();var CLt=Yp(),xLt=ie(),SLt=xLt(CLt);MEe.exports=SLt});var XEe=y((lwr,jEe)=>{c();var wLt=xb(),ELt=wLt(function(e,t){return t},null);jEe.exports=ELt});var KEe=y((dwr,YEe)=>{c();var ALt=ie(),RLt=yq(),TLt=Sa(),NLt=ALt(function(t,r){return typeof r.indexOf=="function"&&!TLt(r)?r.indexOf(t):RLt(r,t,0)});YEe.exports=NLt});var JEe=y((hwr,zEe)=>{c();var BLt=js(),kLt=BLt(0,-1);zEe.exports=kLt});var QEe=y((gwr,$Ee)=>{c();var OLt=bb(),GLt=it(),FLt=yA(),LLt=GLt(function(t,r,n){return FLt(function(i){return OLt(t,i,n)},r)});$Ee.exports=LLt});var tAe=y((vwr,eAe)=>{c();var ZLt=it(),PLt=ZLt(function(t,r,n){t=t<n.length&&t>=0?t:n.length;var i=Array.prototype.slice.call(n,0);return i.splice(t,0,r),i});eAe.exports=PLt});var nAe=y((Iwr,rAe)=>{c();var WLt=it(),DLt=WLt(function(t,r,n){return t=t<n.length&&t>=0?t:n.length,[].concat(Array.prototype.slice.call(n,0,t),r,Array.prototype.slice.call(n,t))});rAe.exports=DLt});var Wq=y((Cwr,iAe)=>{c();var qLt=Eq(),VLt=ie(),HLt=VLt(function(t,r){for(var n=new qLt,i=[],s=0,o,a;s<r.length;)a=r[s],o=t(a),n.add(o)&&i.push(a),s+=1;return i});iAe.exports=HLt});var xA=y((Swr,sAe)=>{c();var MLt=vb(),ULt=Wq(),jLt=ULt(MLt);sAe.exports=jLt});var aAe=y((Ewr,oAe)=>{c();var XLt=Yp(),YLt=ie(),KLt=yA(),zLt=Sb(),JLt=xA(),$Lt=YLt(function(t,r){var n,i;return t.length>r.length?(n=t,i=r):(n=r,i=t),JLt(KLt(zLt(XLt)(n),i))});oAe.exports=$Lt});var uAe=y((Rwr,cAe)=>{c();var QLt=Kh(),eZt=ie(),tZt=eZt(QLt("intersperse",function(t,r){for(var n=[],i=0,s=r.length;i<s;)i===s-1?n.push(r[i]):n.push(r[i],t),i+=1;return n}));cAe.exports=tZt});var Jh=y((Nwr,lAe)=>{c();var rZt=Pi();function nZt(e){if(e==null)throw new TypeError("Cannot convert undefined or null to object");for(var t=Object(e),r=1,n=arguments.length;r<n;){var i=arguments[r];if(i!=null)for(var s in i)rZt(s,i)&&(t[s]=i[s]);r+=1}return t}lAe.exports=typeof Object.assign=="function"?Object.assign:nZt});var Dq=y((kwr,pAe)=>{c();var iZt=ie(),sZt=iZt(function(t,r){var n={};return n[t]=r,n});pAe.exports=sZt});var hAe=y((Gwr,fAe)=>{c();var oZt=Jh(),qq=gA(),dAe=pb(),aZt=aA(),cZt=Dq(),uZt={"@@transducer/init":Array,"@@transducer/step":function(e,t){return e.push(t),e},"@@transducer/result":qq},lZt={"@@transducer/init":String,"@@transducer/step":function(e,t){return e+t},"@@transducer/result":qq},pZt={"@@transducer/init":Object,"@@transducer/step":function(e,t){return oZt(e,dAe(t)?cZt(t[0],t[1]):t)},"@@transducer/result":qq};function dZt(e){if(aZt(e))return e;if(dAe(e))return uZt;if(typeof e=="string")return lZt;if(typeof e=="object")return pZt;throw new Error("Cannot create transformer for "+e)}fAe.exports=dZt});var yAe=y((Lwr,gAe)=>{c();var fZt=hA(),hZt=it(),mZt=aA(),mAe=Zi(),gZt=hAe(),yZt=hZt(function(t,r,n){return mZt(t)?mAe(r(t),t["@@transducer/init"](),n):mAe(r(gZt(t)),fZt(t,[],[],!1),n)});gAe.exports=yZt});var bAe=y((Pwr,vAe)=>{c();var vZt=je(),bZt=Pi(),IZt=Us(),_Zt=vZt(function(t){for(var r=IZt(t),n=r.length,i=0,s={};i<n;){var o=r[i],a=t[o],u=bZt(a,s)?s[a]:s[a]=[];u[u.length]=o,i+=1}return s});vAe.exports=_Zt});var _Ae=y((Dwr,IAe)=>{c();var CZt=je(),xZt=Us(),SZt=CZt(function(t){for(var r=xZt(t),n=r.length,i=0,s={};i<n;){var o=r[i];s[t[o]]=o,i+=1}return s});IAe.exports=SZt});var $h=y((Vwr,CAe)=>{c();var wZt=ie(),EZt=Yh(),AZt=Cn(),RZt=Cb(),TZt=wZt(function(t,r){return AZt(t+1,function(){var n=arguments[t];if(n!=null&&EZt(n[r]))return n[r].apply(n,Array.prototype.slice.call(arguments,0,t));throw new TypeError(RZt(n)+' does not have a method named "'+r+'"')})});CAe.exports=TZt});var Vq=y((Mwr,xAe)=>{c();var NZt=ie(),BZt=NZt(function(t,r){return r!=null&&r.constructor===t||r instanceof t});xAe.exports=BZt});var wAe=y((jwr,SAe)=>{c();var kZt=je(),OZt=Lq(),GZt=cs(),FZt=kZt(function(t){return t!=null&&GZt(t,OZt(t))});SAe.exports=FZt});var AAe=y((Ywr,EAe)=>{c();var LZt=$h(),ZZt=LZt(1,"join");EAe.exports=ZZt});var Hq=y((zwr,RAe)=>{c();var PZt=je(),WZt=Sq(),DZt=PZt(function(t){return WZt(function(){return Array.prototype.slice.call(arguments,0)},t)});RAe.exports=DZt});var NAe=y(($wr,TAe)=>{c();var qZt=je(),VZt=qZt(function(t){var r,n=[];for(r in t)n[n.length]=r;return n});TAe.exports=VZt});var kAe=y((eEr,BAe)=>{c();var HZt=ie(),MZt=Sa(),UZt=cs(),jZt=HZt(function(t,r){if(typeof r.lastIndexOf=="function"&&!MZt(r))return r.lastIndexOf(t);for(var n=r.length-1;n>=0;){if(UZt(r[n],t))return n;n-=1}return-1});BAe.exports=jZt});var Mq=y((rEr,OAe)=>{c();function XZt(e){return Object.prototype.toString.call(e)==="[object Number]"}OAe.exports=XZt});var Uq=y((iEr,GAe)=>{c();var YZt=je(),KZt=Mq(),zZt=YZt(function(t){return t!=null&&KZt(t.length)?t.length:NaN});GAe.exports=zZt});var wb=y((oEr,FAe)=>{c();var JZt=ie(),$Zt=as(),QZt=JZt(function(t,r){return function(n){return function(i){return $Zt(function(s){return r(s,i)},n(t(i)))}}});FAe.exports=QZt});var ZAe=y((cEr,LAe)=>{c();var ePt=je(),tPt=wb(),rPt=Xp(),nPt=_A(),iPt=ePt(function(t){return tPt(rPt(t),nPt(t))});LAe.exports=iPt});var WAe=y((lEr,PAe)=>{c();var sPt=je(),oPt=iq(),aPt=wb(),cPt=Uu(),uPt=sPt(function(t){return aPt(cPt(t),oPt(t))});PAe.exports=uPt});var qAe=y((dEr,DAe)=>{c();var lPt=je(),pPt=hb(),dPt=wb(),fPt=cA(),hPt=lPt(function(t){return dPt(fPt(t),pPt(t))});DAe.exports=hPt});var HAe=y((hEr,VAe)=>{c();var mPt=ie(),gPt=mPt(function(t,r){return t<r});VAe.exports=gPt});var UAe=y((gEr,MAe)=>{c();var yPt=ie(),vPt=yPt(function(t,r){return t<=r});MAe.exports=vPt});var XAe=y((vEr,jAe)=>{c();var bPt=it(),IPt=bPt(function(t,r,n){for(var i=0,s=n.length,o=[],a=[r];i<s;)a=t(a[0],n[i]),o[i]=a[1],i+=1;return[a[0],o]});jAe.exports=IPt});var KAe=y((IEr,YAe)=>{c();var _Pt=it(),CPt=_Pt(function(t,r,n){for(var i=n.length-1,s=[],o=[r];i>=0;)o=t(o[0],n[i]),s[i]=o[1],i-=1;return[o[0],s]});YAe.exports=CPt});var JAe=y((CEr,zAe)=>{c();var xPt=ie(),SPt=Zi(),wPt=Us(),EPt=xPt(function(t,r){return SPt(function(n,i){return n[i]=t(r[i],i,r),n},{},wPt(r))});zAe.exports=EPt});var QAe=y((SEr,$Ae)=>{c();var APt=ie(),RPt=APt(function(t,r){return r.match(t)||[]});$Ae.exports=RPt});var rRe=y((EEr,tRe)=>{c();var TPt=ie(),eRe=db(),NPt=TPt(function(t,r){return eRe(t)?!eRe(r)||r<1?NaN:(t%r+r)%r:NaN});tRe.exports=NPt});var iRe=y((REr,nRe)=>{c();var BPt=it(),kPt=BPt(function(t,r,n){return t(n)>t(r)?n:r});nRe.exports=kPt});var jq=y((NEr,sRe)=>{c();var OPt=cb(),GPt=Co(),FPt=GPt(OPt,0);sRe.exports=FPt});var Xq=y((kEr,oRe)=>{c();var LPt=je(),ZPt=jq(),PPt=LPt(function(t){return ZPt(t)/t.length});oRe.exports=PPt});var cRe=y((GEr,aRe)=>{c();var WPt=je(),DPt=Xq(),qPt=WPt(function(t){var r=t.length;if(r===0)return NaN;var n=2-r%2,i=(r-n)/2;return DPt(Array.prototype.slice.call(t,0).sort(function(s,o){return s<o?-1:s>o?1:0}).slice(i,i+n))});aRe.exports=qPt});var lRe=y((LEr,uRe)=>{c();var VPt=Ms(),HPt=ie(),MPt=Pi(),UPt=HPt(function(t,r){var n={};return VPt(r.length,function(){var i=t.apply(this,arguments);return MPt(i,n)||(n[i]=r.apply(this,arguments)),n[i]})});uRe.exports=UPt});var dRe=y((PEr,pRe)=>{c();var jPt=Jh(),XPt=ie(),YPt=XPt(function(t,r){return jPt({},t,r)});pRe.exports=YPt});var hRe=y((DEr,fRe)=>{c();var KPt=Jh(),zPt=je(),JPt=zPt(function(t){return KPt.apply(null,[{}].concat(t))});fRe.exports=JPt});var wA=y((VEr,mRe)=>{c();var $Pt=it(),SA=Pi(),QPt=$Pt(function(t,r,n){var i={},s;for(s in r)SA(s,r)&&(i[s]=SA(s,n)?t(s,r[s],n[s]):r[s]);for(s in n)SA(s,n)&&!SA(s,i)&&(i[s]=n[s]);return i});mRe.exports=QPt});var Eb=y((MEr,yRe)=>{c();var eWt=it(),gRe=vA(),tWt=wA(),rWt=eWt(function e(t,r,n){return tWt(function(i,s,o){return gRe(s)&&gRe(o)?e(t,s,o):t(i,s,o)},r,n)});yRe.exports=rWt});var bRe=y((jEr,vRe)=>{c();var nWt=ie(),iWt=Eb(),sWt=nWt(function(t,r){return iWt(function(n,i,s){return i},t,r)});vRe.exports=sWt});var _Re=y((YEr,IRe)=>{c();var oWt=ie(),aWt=Eb(),cWt=oWt(function(t,r){return aWt(function(n,i,s){return s},t,r)});IRe.exports=cWt});var xRe=y((zEr,CRe)=>{c();var uWt=it(),lWt=Eb(),pWt=uWt(function(t,r,n){return lWt(function(i,s,o){return t(s,o)},r,n)});CRe.exports=pWt});var wRe=y(($Er,SRe)=>{c();var dWt=Jh(),fWt=ie(),hWt=fWt(function(t,r){return dWt({},r,t)});SRe.exports=hWt});var ARe=y((eAr,ERe)=>{c();var mWt=Jh(),gWt=ie(),yWt=gWt(function(t,r){return mWt({},t,r)});ERe.exports=yWt});var TRe=y((rAr,RRe)=>{c();var vWt=it(),bWt=wA(),IWt=vWt(function(t,r,n){return bWt(function(i,s,o){return t(s,o)},r,n)});RRe.exports=IWt});var BRe=y((iAr,NRe)=>{c();var _Wt=ie(),CWt=_Wt(function(t,r){return r<t?r:t});NRe.exports=CWt});var ORe=y((oAr,kRe)=>{c();var xWt=it(),SWt=xWt(function(t,r,n){return t(n)<t(r)?n:r});kRe.exports=SWt});var FRe=y((cAr,GRe)=>{c();var wWt=ie(),EWt=wWt(function(t,r){return t%r});GRe.exports=EWt});var ZRe=y((lAr,LRe)=>{c();var AWt=it(),RWt=AWt(function(e,t,r){var n=r.length,i=r.slice(),s=e<0?n+e:e,o=t<0?n+t:t,a=i.splice(s,1);return s<0||s>=r.length||o<0||o>=r.length?r:[].concat(i.slice(0,o)).concat(a).concat(i.slice(o,r.length))});LRe.exports=RWt});var Yq=y((dAr,PRe)=>{c();var TWt=ie(),NWt=TWt(function(t,r){return t*r});PRe.exports=NWt});var DRe=y((hAr,WRe)=>{c();var BWt=je(),kWt=BWt(function(t){return-t});WRe.exports=kWt});var VRe=y((gAr,qRe)=>{c();var OWt=vq(),GWt=ie(),FWt=zD(),LWt=GWt(function(t,r){return FWt(OWt(t),r)});qRe.exports=LWt});var MRe=y((vAr,HRe)=>{c();var ZWt=je(),PWt=Cn(),WWt=Xp(),DWt=ZWt(function(t){var r=t<0?1:t+1;return PWt(r,function(){return WWt(t,arguments)})});HRe.exports=DWt});var jRe=y((IAr,URe)=>{c();var qWt=it(),VWt=qWt(function(t,r,n){return t(r(n))});URe.exports=VWt});var YRe=y((CAr,XRe)=>{c();function HWt(e){return[e]}XRe.exports=HWt});var zRe=y((SAr,KRe)=>{c();var MWt=je(),UWt=YRe(),jWt=MWt(UWt);KRe.exports=jWt});var $Re=y((EAr,JRe)=>{c();var XWt=Ms(),YWt=je(),KWt=YWt(function(t){var r=!1,n;return XWt(t.length,function(){return r||(r=!0,n=t.apply(this,arguments)),n})});JRe.exports=KWt});var Kq=y((RAr,QRe)=>{c();var zWt=Yh(),JWt=_q();function $Wt(e,t){if(t==null||!zWt(t.then))throw new TypeError("`"+e+"` expected a Promise, received "+JWt(t,[]))}QRe.exports=$Wt});var tTe=y((NAr,eTe)=>{c();var QWt=ie(),eDt=Kq(),tDt=QWt(function(t,r){return eDt("otherwise",r),r.then(null,t)});eTe.exports=tDt});var zq=y((kAr,nTe)=>{c();var rDt=it(),rTe=function(e){return{value:e,map:function(t){return rTe(t(e))}}},nDt=rDt(function(t,r,n){return t(function(i){return rTe(r(i))})(n).value});nTe.exports=nDt});var sTe=y((GAr,iTe)=>{c();var iDt=ie(),sDt=iDt(function(t,r){return[t,r]});iTe.exports=sDt});var Jq=y((LAr,oTe)=>{c();var oDt=Ms(),aDt=ie();function cDt(e){return aDt(function(t,r){return oDt(Math.max(0,t.length-r.length),function(){return t.apply(this,e(r,arguments))})})}oTe.exports=cDt});var cTe=y((PAr,aTe)=>{c();var uDt=Hs(),lDt=Jq(),pDt=lDt(uDt);aTe.exports=pDt});var lTe=y((DAr,uTe)=>{c();var dDt=Hs(),fDt=Jq(),hDt=Sb(),mDt=fDt(hDt(dDt));uTe.exports=mDt});var dTe=y((VAr,pTe)=>{c();var gDt=bA(),yDt=Hq(),vDt=_b(),bDt=yDt([gDt,vDt]);pTe.exports=bDt});var hTe=y((MAr,fTe)=>{c();var IDt=it(),_Dt=cs(),CDt=Uu(),xDt=IDt(function(t,r,n){return _Dt(CDt(t,n),r)});fTe.exports=xDt});var $q=y((jAr,mTe)=>{c();var SDt=it(),wDt=wq(),EDt=Uu(),ADt=SDt(function(t,r,n){return wDt(t,EDt(r,n))});mTe.exports=ADt});var yTe=y((YAr,gTe)=>{c();var RDt=it(),TDt=Uu(),NDt=RDt(function(t,r,n){return t(TDt(r,n))});gTe.exports=NDt});var bTe=y((zAr,vTe)=>{c();var BDt=ie(),kDt=BDt(function(t,r){for(var n={},i=0;i<t.length;)t[i]in r&&(n[t[i]]=r[t[i]]),i+=1;return n});vTe.exports=kDt});var Qq=y(($Ar,ITe)=>{c();var ODt=ie(),GDt=ODt(function(t,r){for(var n={},i=0,s=t.length;i<s;){var o=t[i];n[o]=r[o],i+=1}return n});ITe.exports=GDt});var CTe=y((eRr,_Te)=>{c();var FDt=ie(),LDt=FDt(function(t,r){var n={};for(var i in r)t(r[i],i,r)&&(n[i]=r[i]);return n});_Te.exports=LDt});var STe=y((rRr,xTe)=>{c();var ZDt=lq(),PDt=zh();function WDt(){if(arguments.length===0)throw new Error("pipeK requires at least one argument");return ZDt.apply(this,PDt(arguments))}xTe.exports=WDt});var eV=y((iRr,wTe)=>{c();var DDt=Hs(),qDt=ie(),VDt=qDt(function(t,r){return DDt([t],r)});wTe.exports=VDt});var ATe=y((oRr,ETe)=>{c();var HDt=Yq(),MDt=Co(),UDt=MDt(HDt,1);ETe.exports=UDt});var tV=y((cRr,RTe)=>{c();var jDt=ie(),XDt=Cn(),YDt=jDt(function(t,r){return XDt(r.length,function(){for(var n=[],i=0;i<r.length;)n.push(r[i].call(this,arguments[i])),i+=1;return t.apply(this,n.concat(Array.prototype.slice.call(arguments,r.length)))})});RTe.exports=YDt});var NTe=y((lRr,TTe)=>{c();var KDt=lb(),zDt=vb(),JDt=Qq(),$Dt=tV(),QDt=$Dt(KDt,[JDt,zDt]);TTe.exports=QDt});var kTe=y((dRr,BTe)=>{c();var eqt=it(),tqt=cs(),rqt=eqt(function(t,r,n){return tqt(r,n[t])});BTe.exports=rqt});var GTe=y((hRr,OTe)=>{c();var nqt=it(),iqt=Vq(),sqt=nqt(function(t,r,n){return iqt(t,n[r])});OTe.exports=sqt});var LTe=y((gRr,FTe)=>{c();var oqt=it(),aqt=$q(),cqt=oqt(function(t,r,n){return aqt(t,[r],n)});FTe.exports=cqt});var PTe=y((vRr,ZTe)=>{c();var uqt=it(),lqt=uqt(function(t,r,n){return t(n[r])});ZTe.exports=lqt});var DTe=y((IRr,WTe)=>{c();var pqt=ie(),dqt=Uu(),fqt=pqt(function(t,r){return t.map(function(n){return dqt([n],r)})});WTe.exports=fqt});var HTe=y((CRr,VTe)=>{c();var hqt=ie(),qTe=Mq(),mqt=hqt(function(t,r){if(!(qTe(t)&&qTe(r)))throw new TypeError("Both arguments to range must be numbers");for(var n=[],i=t;i<r;)n.push(i),i+=1;return n});VTe.exports=mqt});var rV=y((SRr,MTe)=>{c();var gqt=it(),yqt=gqt(function(t,r,n){for(var i=n.length-1;i>=0;)r=t(n[i],r),i-=1;return r});MTe.exports=yqt});var jTe=y((ERr,UTe)=>{c();var vqt=ub(),bqt=Zi(),Iqt=Bc(),_qt=vqt(4,[],function(t,r,n,i){return bqt(function(s,o){return t(s,o)?r(s,o):Iqt(s)},n,i)});UTe.exports=_qt});var YTe=y((RRr,XTe)=>{c();var Cqt=je(),xqt=Bc(),Sqt=Cqt(xqt);XTe.exports=Sqt});var nV=y((NRr,KTe)=>{c();var wqt=ie(),Eqt=wqt(function(t,r){var n=Number(r),i=0,s;if(n<0||isNaN(n))throw new RangeError("n must be a non-negative number");for(s=new Array(n);i<n;)s[i]=t(i),i+=1;return s});KTe.exports=Eqt});var JTe=y((kRr,zTe)=>{c();var Aqt=ie(),Rqt=fb(),Tqt=nV(),Nqt=Aqt(function(t,r){return Tqt(Rqt(t),r)});zTe.exports=Nqt});var QTe=y((GRr,$Te)=>{c();var Bqt=it(),kqt=Bqt(function(t,r,n){return n.replace(t,r)});$Te.exports=kqt});var tNe=y((LRr,eNe)=>{c();var Oqt=it(),Gqt=Oqt(function(t,r,n){for(var i=0,s=n.length,o=[r];i<s;)r=t(r,n[i]),o[i+1]=r,i+=1;return o});eNe.exports=Gqt});var iV=y((PRr,rNe)=>{c();var Fqt=ie(),Lqt=uA(),Zqt=as(),Pqt=eV(),Wqt=rV(),Dqt=Fqt(function(t,r){return typeof r.sequence=="function"?r.sequence(t):Wqt(function(n,i){return Lqt(Zqt(Pqt,n),i)},t([]),r)});rNe.exports=Dqt});var iNe=y((DRr,nNe)=>{c();var qqt=it(),Vqt=fb(),Hqt=zq(),Mqt=qqt(function(t,r,n){return Hqt(t,Vqt(r),n)});nNe.exports=Mqt});var oNe=y((VRr,sNe)=>{c();var Uqt=ie(),jqt=Uqt(function(t,r){return Array.prototype.slice.call(r,0).sort(t)});sNe.exports=jqt});var cNe=y((MRr,aNe)=>{c();var Xqt=ie(),Yqt=Xqt(function(t,r){return Array.prototype.slice.call(r,0).sort(function(n,i){var s=t(n),o=t(i);return s<o?-1:s>o?1:0})});aNe.exports=Yqt});var lNe=y((jRr,uNe)=>{c();var Kqt=ie(),zqt=Kqt(function(t,r){return Array.prototype.slice.call(r,0).sort(function(n,i){for(var s=0,o=0;s===0&&o<t.length;)s=t[o](n,i),o+=1;return s})});uNe.exports=zqt});var dNe=y((YRr,pNe)=>{c();var Jqt=$h(),$qt=Jqt(1,"split");pNe.exports=$qt});var mNe=y((zRr,hNe)=>{c();var Qqt=ie(),eVt=Uq(),fNe=js(),tVt=Qqt(function(t,r){return[fNe(0,t,r),fNe(t,eVt(r),r)]});hNe.exports=tVt});var yNe=y(($Rr,gNe)=>{c();var rVt=ie(),nVt=js(),iVt=rVt(function(t,r){if(t<=0)throw new Error("First argument to splitEvery must be a positive integer");for(var n=[],i=0;i<r.length;)n.push(nVt(i,i+=t,r));return n});gNe.exports=iVt});var bNe=y((eTr,vNe)=>{c();var sVt=ie(),oVt=sVt(function(t,r){for(var n=0,i=r.length,s=[];n<i&&!t(r[n]);)s.push(r[n]),n+=1;return[s,Array.prototype.slice.call(r,n)]});vNe.exports=oVt});var _Ne=y((rTr,INe)=>{c();var aVt=ie(),cVt=cs(),uVt=CA(),lVt=aVt(function(e,t){return cVt(uVt(e.length,t),e)});INe.exports=lVt});var xNe=y((iTr,CNe)=>{c();var pVt=ie(),dVt=pVt(function(t,r){return Number(t)-Number(r)});CNe.exports=dVt});var ENe=y((oTr,wNe)=>{c();var fVt=ie(),hVt=IA(),SNe=Aq(),mVt=fVt(function(t,r){return hVt(SNe(t,r),SNe(r,t))});wNe.exports=mVt});var TNe=y((cTr,RNe)=>{c();var gVt=it(),yVt=IA(),ANe=Rq(),vVt=gVt(function(t,r,n){return yVt(ANe(t,r,n),ANe(t,n,r))});RNe.exports=vVt});var BNe=y((lTr,NNe)=>{c();var bVt=ie(),IVt=js(),_Vt=bVt(function(t,r){for(var n=r.length-1;n>=0&&t(r[n]);)n-=1;return IVt(n+1,1/0,r)});NNe.exports=_Vt});var GNe=y((dTr,ONe)=>{c();var CVt=ie(),xVt=Bc(),kNe=en(),SVt=function(){function e(t,r){this.xf=r,this.f=t}return e.prototype["@@transducer/init"]=kNe.init,e.prototype["@@transducer/result"]=kNe.result,e.prototype["@@transducer/step"]=function(t,r){return this.f(r)?this.xf["@@transducer/step"](t,r):xVt(t)},e}(),wVt=CVt(function(t,r){return new SVt(t,r)});ONe.exports=wVt});var LNe=y((hTr,FNe)=>{c();var EVt=ie(),AVt=Xr(),RVt=GNe(),TVt=js(),NVt=EVt(AVt(["takeWhile"],RVt,function(t,r){for(var n=0,i=r.length;n<i&&t(r[n]);)n+=1;return TVt(0,n,r)}));FNe.exports=NVt});var WNe=y((gTr,PNe)=>{c();var BVt=ie(),ZNe=en(),kVt=function(){function e(t,r){this.xf=r,this.f=t}return e.prototype["@@transducer/init"]=ZNe.init,e.prototype["@@transducer/result"]=ZNe.result,e.prototype["@@transducer/step"]=function(t,r){return this.f(r),this.xf["@@transducer/step"](t,r)},e}(),OVt=BVt(function(t,r){return new kVt(t,r)});PNe.exports=OVt});var qNe=y((vTr,DNe)=>{c();var GVt=ie(),FVt=Xr(),LVt=WNe(),ZVt=GVt(FVt([],LVt,function(t,r){return t(r),r}));DNe.exports=ZVt});var HNe=y((ITr,VNe)=>{c();function PVt(e){return Object.prototype.toString.call(e)==="[object RegExp]"}VNe.exports=PVt});var UNe=y((CTr,MNe)=>{c();var WVt=aq(),DVt=ie(),qVt=HNe(),VVt=Cb(),HVt=DVt(function(t,r){if(!qVt(t))throw new TypeError("\u2018test\u2019 requires a value of type RegExp as its first argument; received "+VVt(t));return WVt(t).test(r)});MNe.exports=HVt});var XNe=y((STr,jNe)=>{c();var MVt=ie(),UVt=Kq(),jVt=MVt(function(t,r){return UVt("andThen",r),r.then(t)});jNe.exports=jVt});var KNe=y((ETr,YNe)=>{c();var XVt=$h(),YVt=XVt(0,"toLowerCase");YNe.exports=YVt});var JNe=y((RTr,zNe)=>{c();var KVt=je(),zVt=Pi(),JVt=KVt(function(t){var r=[];for(var n in t)zVt(n,t)&&(r[r.length]=[n,t[n]]);return r});zNe.exports=JVt});var QNe=y((NTr,$Ne)=>{c();var $Vt=je(),QVt=$Vt(function(t){var r=[];for(var n in t)r[r.length]=[n,t[n]];return r});$Ne.exports=QVt});var tBe=y((kTr,eBe)=>{c();var eHt=$h(),tHt=eHt(0,"toUpperCase");eBe.exports=tHt});var nBe=y((GTr,rBe)=>{c();var rHt=Zi(),nHt=JD(),iHt=Cn(),sHt=iHt(4,function(t,r,n,i){return rHt(t(typeof r=="function"?nHt(r):r),n,i)});rBe.exports=sHt});var sBe=y((LTr,iBe)=>{c();var oHt=je(),aHt=oHt(function(t){for(var r=0,n=[];r<t.length;){for(var i=t[r],s=0;s<i.length;)typeof n[s]>"u"&&(n[s]=[]),n[s].push(i[s]),s+=1;r+=1}return n});iBe.exports=aHt});var aBe=y((PTr,oBe)=>{c();var cHt=it(),uHt=as(),lHt=iV(),pHt=cHt(function(t,r,n){return typeof n["fantasy-land/traverse"]=="function"?n["fantasy-land/traverse"](r,t):lHt(t,uHt(r,n))});oBe.exports=pHt});var lBe=y((DTr,uBe)=>{c();var cBe=je(),Ab=`
255
- \v\f\r \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF`,dHt="\u200B",fHt=typeof String.prototype.trim=="function",hHt=cBe(!fHt||Ab.trim()||!dHt.trim()?function(t){var r=new RegExp("^["+Ab+"]["+Ab+"]*"),n=new RegExp("["+Ab+"]["+Ab+"]*$");return t.replace(r,"").replace(n,"")}:function(t){return t.trim()});uBe.exports=hHt});var dBe=y((VTr,pBe)=>{c();var mHt=Ms(),gHt=Hs(),yHt=ie(),vHt=yHt(function(t,r){return mHt(t.length,function(){try{return t.apply(this,arguments)}catch(n){return r.apply(this,gHt([n],arguments))}})});pBe.exports=vHt});var hBe=y((MTr,fBe)=>{c();var bHt=je(),IHt=bHt(function(t){return function(){return t(Array.prototype.slice.call(arguments,0))}});fBe.exports=IHt});var gBe=y((jTr,mBe)=>{c();var _Ht=je(),CHt=mb(),xHt=_Ht(function(t){return CHt(1,t)});mBe.exports=xHt});var vBe=y((YTr,yBe)=>{c();var SHt=ie(),wHt=Cn(),EHt=SHt(function(t,r){return wHt(t,function(){for(var n=1,i=r,s=0,o;n<=t&&typeof i=="function";)o=n===t?arguments.length:s+i.length,i=i.apply(this,Array.prototype.slice.call(arguments,s,o)),n+=1,s=o;return i})});yBe.exports=EHt});var IBe=y((zTr,bBe)=>{c();var AHt=ie(),RHt=AHt(function(t,r){for(var n=t(r),i=[];n&&n.length;)i[i.length]=n[0],n=t(n[1]);return i});bBe.exports=RHt});var CBe=y(($Tr,_Be)=>{c();var THt=Hs(),NHt=ie(),BHt=mA(),kHt=xA(),OHt=NHt(BHt(kHt,THt));_Be.exports=OHt});var sV=y((eNr,xBe)=>{c();var GHt=bb(),FHt=ie(),LHt=FHt(function(t,r){for(var n=0,i=r.length,s=[],o;n<i;)o=r[n],GHt(t,o,s)||(s[s.length]=o),n+=1;return s});xBe.exports=LHt});var wBe=y((rNr,SBe)=>{c();var ZHt=Hs(),PHt=it(),WHt=sV(),DHt=PHt(function(t,r,n){return WHt(t,ZHt(r,n))});SBe.exports=DHt});var ABe=y((iNr,EBe)=>{c();var qHt=it(),VHt=qHt(function(t,r,n){return t(n)?n:r(n)});EBe.exports=VHt});var TBe=y((oNr,RBe)=>{c();var HHt=gA(),MHt=dA(),UHt=MHt(HHt);RBe.exports=UHt});var BBe=y((cNr,NBe)=>{c();var jHt=it(),XHt=jHt(function(t,r,n){for(var i=n;!t(i);)i=r(i);return i});NBe.exports=XHt});var OBe=y((lNr,kBe)=>{c();var YHt=je(),KHt=YHt(function(t){var r,n=[];for(r in t)n[n.length]=t[r];return n});kBe.exports=KHt});var FBe=y((dNr,GBe)=>{c();var zHt=ie(),JHt=function(e){return{value:e,"fantasy-land/map":function(){return this}}},$Ht=zHt(function(t,r){return t(JHt)(r).value});GBe.exports=$Ht});var ZBe=y((hNr,LBe)=>{c();var QHt=it(),eMt=QHt(function(t,r,n){return t(n)?r(n):n});LBe.exports=eMt});var oV=y((gNr,PBe)=>{c();var tMt=ie(),rMt=Pi(),nMt=tMt(function(t,r){for(var n in t)if(rMt(n,t)&&!t[n](r[n]))return!1;return!0});PBe.exports=nMt});var DBe=y((vNr,WBe)=>{c();var iMt=ie(),sMt=cs(),oMt=as(),aMt=oV(),cMt=iMt(function(t,r){return aMt(oMt(sMt,t),r)});WBe.exports=cMt});var VBe=y((INr,qBe)=>{c();var uMt=Yp(),lMt=ie(),pMt=Sb(),dMt=_b(),fMt=lMt(function(e,t){return dMt(pMt(uMt)(e),t)});qBe.exports=fMt});var MBe=y((CNr,HBe)=>{c();var hMt=ie(),mMt=hMt(function(t,r){return!!(!t^!r)});HBe.exports=mMt});var jBe=y((SNr,UBe)=>{c();var gMt=ie(),yMt=gMt(function(t,r){for(var n=0,i=t.length,s,o=r.length,a=[];n<i;){for(s=0;s<o;)a[a.length]=[t[n],r[s]],s+=1;n+=1}return a});UBe.exports=yMt});var YBe=y((ENr,XBe)=>{c();var vMt=ie(),bMt=vMt(function(t,r){for(var n=[],i=0,s=Math.min(t.length,r.length);i<s;)n[i]=[t[i],r[i]],i+=1;return n});XBe.exports=bMt});var zBe=y((RNr,KBe)=>{c();var IMt=ie(),_Mt=IMt(function(t,r){for(var n=0,i=Math.min(t.length,r.length),s={};n<i;)s[t[n]]=r[n],n+=1;return s});KBe.exports=_Mt});var $Be=y((NNr,JBe)=>{c();var CMt=it(),xMt=CMt(function(t,r,n){for(var i=[],s=0,o=Math.min(r.length,n.length);s<o;)i[s]=t(r[s],n[s]),s+=1;return i});JBe.exports=xMt});var e1e=y((kNr,QBe)=>{c();var SMt=Cn(),wMt=je(),EMt=wMt(function(t){return SMt(t.length,function(){var n=arguments;return function(){return t.apply(this,n)}})});QBe.exports=EMt});var t1e=y((GNr,H)=>{c();H.exports={};H.exports.F=h0e();H.exports.T=g0e();H.exports.__=v0e();H.exports.add=cb();H.exports.addIndex=A0e();H.exports.adjust=KD();H.exports.all=zD();H.exports.allPass=hCe();H.exports.always=fb();H.exports.and=tq();H.exports.any=ICe();H.exports.anyPass=CCe();H.exports.ap=uA();H.exports.aperture=TCe();H.exports.append=BCe();H.exports.apply=rq();H.exports.applySpec=LCe();H.exports.applyTo=PCe();H.exports.ascend=DCe();H.exports.assoc=hb();H.exports.assocPath=iq();H.exports.binary=XCe();H.exports.bind=$D();H.exports.both=QCe();H.exports.call=rxe();H.exports.chain=dA();H.exports.clamp=hxe();H.exports.clone=Ixe();H.exports.comparator=Cxe();H.exports.complement=wxe();H.exports.compose=mA();H.exports.composeK=lq();H.exports.composeP=Dxe();H.exports.composeWith=jxe();H.exports.concat=IA();H.exports.cond=NSe();H.exports.construct=OSe();H.exports.constructN=xq();H.exports.contains=FSe();H.exports.converge=Sq();H.exports.countBy=qSe();H.exports.curry=pA();H.exports.curryN=Cn();H.exports.dec=HSe();H.exports.defaultTo=wq();H.exports.descend=jSe();H.exports.difference=Aq();H.exports.differenceWith=Rq();H.exports.dissoc=Tq();H.exports.dissocPath=swe();H.exports.divide=awe();H.exports.drop=Bq();H.exports.dropLast=_we();H.exports.dropLastWhile=Awe();H.exports.dropRepeats=Gwe();H.exports.dropRepeatsWith=Gq();H.exports.dropWhile=Wwe();H.exports.either=Vwe();H.exports.empty=Lq();H.exports.endsWith=jwe();H.exports.eqBy=Ywe();H.exports.eqProps=zwe();H.exports.equals=cs();H.exports.evolve=$we();H.exports.filter=bA();H.exports.find=rEe();H.exports.findIndex=oEe();H.exports.findLast=lEe();H.exports.findLastIndex=hEe();H.exports.flatten=gEe();H.exports.flip=Sb();H.exports.forEach=bEe();H.exports.forEachObjIndexed=_Ee();H.exports.fromPairs=xEe();H.exports.groupBy=wEe();H.exports.groupWith=AEe();H.exports.gt=TEe();H.exports.gte=BEe();H.exports.has=FEe();H.exports.hasIn=ZEe();H.exports.hasPath=Pq();H.exports.head=dq();H.exports.identical=WEe();H.exports.identity=vb();H.exports.ifElse=qEe();H.exports.inc=HEe();H.exports.includes=UEe();H.exports.indexBy=XEe();H.exports.indexOf=KEe();H.exports.init=JEe();H.exports.innerJoin=QEe();H.exports.insert=tAe();H.exports.insertAll=nAe();H.exports.intersection=aAe();H.exports.intersperse=uAe();H.exports.into=yAe();H.exports.invert=bAe();H.exports.invertObj=_Ae();H.exports.invoker=$h();H.exports.is=Vq();H.exports.isEmpty=wAe();H.exports.isNil=lA();H.exports.join=AAe();H.exports.juxt=Hq();H.exports.keys=Us();H.exports.keysIn=NAe();H.exports.last=Oq();H.exports.lastIndexOf=kAe();H.exports.length=Uq();H.exports.lens=wb();H.exports.lensIndex=ZAe();H.exports.lensPath=WAe();H.exports.lensProp=qAe();H.exports.lift=gb();H.exports.liftN=sq();H.exports.lt=HAe();H.exports.lte=UAe();H.exports.map=as();H.exports.mapAccum=XAe();H.exports.mapAccumRight=KAe();H.exports.mapObjIndexed=JAe();H.exports.match=QAe();H.exports.mathMod=rRe();H.exports.max=jp();H.exports.maxBy=iRe();H.exports.mean=Xq();H.exports.median=cRe();H.exports.memoizeWith=lRe();H.exports.merge=dRe();H.exports.mergeAll=hRe();H.exports.mergeDeepLeft=bRe();H.exports.mergeDeepRight=_Re();H.exports.mergeDeepWith=xRe();H.exports.mergeDeepWithKey=Eb();H.exports.mergeLeft=wRe();H.exports.mergeRight=ARe();H.exports.mergeWith=TRe();H.exports.mergeWithKey=wA();H.exports.min=BRe();H.exports.minBy=ORe();H.exports.modulo=FRe();H.exports.move=ZRe();H.exports.multiply=Yq();H.exports.nAry=mb();H.exports.negate=DRe();H.exports.none=VRe();H.exports.not=cq();H.exports.nth=Xp();H.exports.nthArg=MRe();H.exports.o=jRe();H.exports.objOf=Dq();H.exports.of=zRe();H.exports.omit=QW();H.exports.once=$Re();H.exports.or=Fq();H.exports.otherwise=tTe();H.exports.over=zq();H.exports.pair=sTe();H.exports.partial=cTe();H.exports.partialRight=lTe();H.exports.partition=dTe();H.exports.path=Uu();H.exports.paths=eq();H.exports.pathEq=hTe();H.exports.pathOr=$q();H.exports.pathSatisfies=yTe();H.exports.pick=bTe();H.exports.pickAll=Qq();H.exports.pickBy=CTe();H.exports.pipe=uq();H.exports.pipeK=STe();H.exports.pipeP=pq();H.exports.pipeWith=fq();H.exports.pluck=Xh();H.exports.prepend=eV();H.exports.product=ATe();H.exports.project=NTe();H.exports.prop=cA();H.exports.propEq=kTe();H.exports.propIs=GTe();H.exports.propOr=LTe();H.exports.propSatisfies=PTe();H.exports.props=DTe();H.exports.range=HTe();H.exports.reduce=Co();H.exports.reduceBy=xb();H.exports.reduceRight=rV();H.exports.reduceWhile=jTe();H.exports.reduced=YTe();H.exports.reject=_b();H.exports.remove=Nq();H.exports.repeat=JTe();H.exports.replace=QTe();H.exports.reverse=zh();H.exports.scan=tNe();H.exports.sequence=iV();H.exports.set=iNe();H.exports.slice=js();H.exports.sort=oNe();H.exports.sortBy=cNe();H.exports.sortWith=lNe();H.exports.split=dNe();H.exports.splitAt=mNe();H.exports.splitEvery=yNe();H.exports.splitWhen=bNe();H.exports.startsWith=_Ne();H.exports.subtract=xNe();H.exports.sum=jq();H.exports.symmetricDifference=ENe();H.exports.symmetricDifferenceWith=TNe();H.exports.tail=yb();H.exports.take=CA();H.exports.takeLast=Zq();H.exports.takeLastWhile=BNe();H.exports.takeWhile=LNe();H.exports.tap=qNe();H.exports.test=UNe();H.exports.andThen=XNe();H.exports.times=nV();H.exports.toLower=KNe();H.exports.toPairs=JNe();H.exports.toPairsIn=QNe();H.exports.toString=Cb();H.exports.toUpper=tBe();H.exports.transduce=nBe();H.exports.transpose=sBe();H.exports.traverse=aBe();H.exports.trim=lBe();H.exports.tryCatch=dBe();H.exports.type=fA();H.exports.unapply=hBe();H.exports.unary=gBe();H.exports.uncurryN=vBe();H.exports.unfold=IBe();H.exports.union=CBe();H.exports.unionWith=wBe();H.exports.uniq=xA();H.exports.uniqBy=Wq();H.exports.uniqWith=sV();H.exports.unless=ABe();H.exports.unnest=TBe();H.exports.until=BBe();H.exports.update=_A();H.exports.useWith=tV();H.exports.values=nq();H.exports.valuesIn=OBe();H.exports.view=FBe();H.exports.when=ZBe();H.exports.where=oV();H.exports.whereEq=DBe();H.exports.without=VBe();H.exports.xor=MBe();H.exports.xprod=jBe();H.exports.zip=YBe();H.exports.zipObj=zBe();H.exports.zipWith=$Be();H.exports.thunkify=e1e()});var Wt,EA,AA=ae(()=>{"use strict";c();dr();Wt=class{org;serviceName;constructor(t={}){this.org=t.org,this.serviceName=t.serviceName||"my-app"}async copy(t={}){let r={method:"POST",endpoint:`/orgs/${this.org.orgName}/services/${this.serviceName}/copy`,body:t};return await ze(r)}async create(t={}){let r={method:"POST",endpoint:`/orgs/${this.org.orgName}/services/${this.serviceName}`,body:t};return await ze(r)}async get(){var r;let t={method:"GET",endpoint:`/orgs/${(r=this.org)==null?void 0:r.orgName}/services/${this.serviceName}`};return await ze(t)}async getGitConfig(){var r;let t={method:"GET",endpoint:`/orgs/${(r=this.org)==null?void 0:r.orgName}/services/${this.serviceName}/git`};return await ze(t)}async put(t={}){let r={method:"PATCH",endpoint:`/orgs/${this.org.orgName}/services/${this.serviceName}`,body:t};return await ze(r)}async delete(){let t={method:"DELETE",endpoint:`/orgs/${this.org.orgName}/services/${this.serviceName}`};return await ze(t)}async listInstances(){let t={method:"GET",endpoint:`/orgs/${this.org.orgName}/services/${this.serviceName}/instances`};return await ze(t)}async getParams(){let t={method:"GET",endpoint:`/orgs/${this.org.orgName}/services/${this.serviceName}/params`},{params:r}=await ze(t);return r}async putParams(t){let r={method:"PATCH",endpoint:`/orgs/${this.org.orgName}/services/${this.serviceName}/params`,body:{params:t}},{params:n}=await ze(r);return n}getDashboardUrl(){let t=process.env.AMPT_STAGE||"prod";return process.env.AMPT_DASHBOARD_URL?process.env.AMPT_DASHBOARD_URL:t==="prod"?`https://ampt.dev/orgs/${this.org.orgName}/apps/${this.serviceName}`:`https://amptlabs.dev/orgs/${this.org.orgName}/apps/${this.serviceName}`}},EA=Wt});var RA,Jt,r1e,aV=ae(()=>{"use strict";c();RA=xe(t1e());dr();AA();sa();Jt=class{orgName;plan;constructor(t){this.orgName=t.orgName}update(t={}){this.orgName=t.orgName||this.orgName,Pt.orgName=this.orgName}async validateLimits(){try{let t=await this.getPlan();if(!t)throw new Error("Plan not found");return{serviceExceeded:t.serviceCount>=t.serviceLimit,instanceExceeded:t.instanceCount>=t.instanceLimit,serviceApproachingLimit:t.serviceCount>=t.serviceLimit-2,instanceApproachingLimit:t.instanceCount>=t.instanceLimit-2}}catch(t){return t.message.includes("Plan not found")&&_e.debug({orgName:this.orgName},"plan not found"),{serviceExceeded:!1,instanceExceeded:!1,serviceApproachingLimit:!1,instanceApproachingLimit:!1}}}async isAuthorized(){try{await this._activate()}catch(t){if(t.message.includes("Your credentials do not have access to the Organization"))return _e.debug({orgName:this.orgName},"do not have access to org"),!1}return!0}async listServices(){let t={method:"GET",endpoint:`/orgs/${this.orgName}/services`};return await ze(t)}async listServicesWithInstances(){let t=await this.listServices(),r=await Promise.all(t.map(async n=>{let s=await new EA({org:this,serviceName:n.serviceName}).listInstances();return!s||s.length===0?null:n}));return(0,RA.reject)(RA.isNil,r)}async getPlan(){let t={method:"GET",endpoint:`/orgs/${this.orgName}/plan`},r=await ze(t);if(r)return this.plan=r,r}async getParams(){let t={method:"GET",endpoint:`/orgs/${this.orgName}/params`},{params:r}=await ze(t);return r}async putParams(t){let r={method:"PATCH",endpoint:`/orgs/${this.orgName}/params`,body:{params:t}},{params:n}=await ze(r);return n}async _activate(){let t={method:"GET",endpoint:`/orgs/${this.orgName}/is-activated`};return await ze(t)}async proxy(t){let r={method:"POST",endpoint:`/orgs/${this.orgName}/proxy`,body:t};return await ze(r)}async getUsage(t="total"){let r={method:"GET",endpoint:`/orgs/${this.orgName}/usage?window=${t}`};return await ze(r)}async getRegions(){let t={method:"GET",endpoint:`/orgs/${this.orgName}/regions`};return(await ze(t)).regions}async fetch(){let t={method:"GET",endpoint:`/orgs/${this.orgName}/details`};return await ze(t)}async updateMetadata(t={}){let r={method:"PATCH",endpoint:`/orgs/${this.orgName}`,body:t};return await ze(r)}},r1e=Jt});var AMt,n1e,i1e=ae(()=>{"use strict";c();AMt=e=>e.replace(/([-_][a-z, 0-9])/gi,t=>t.toUpperCase().replace("-","").replace("_","")),n1e=e=>Object.keys(e).reduce((t,r)=>({...t,[AMt(r)]:e[r]}),{})});var TA,Rb,s1e=ae(()=>{"use strict";c();W_();Mf();$G();TA=require("url");i1e();Rb=class e{static auth0Url=process.env.AMPT_STAGE==="prod"?"https://ampt.us.auth0.com":"https://amptdev.us.auth0.com";static clientId=process.env.AMPT_STAGE==="prod"?"sVVRzSWM6OVwWBnnOv3idPqkZvgqKLGm":"soEd8ZHLP6RpLZNGjTlb7J462WtcZjZT";static audience=process.env.AMPT_STAGE==="prod"?"https://api.ampt.dev":"https://api.amptlabs.dev";static logger=_e.child({class:"Auth0"});static async refreshSession(t){var i;let r=e.logger.child({method:"refreshSession"}),n={method:"POST",url:`${e.auth0Url}/oauth/token`,headers:{"Content-Type":"application/x-www-form-urlencoded"},data:new TA.URLSearchParams({grant_type:"refresh_token",refresh_token:t,client_id:e.clientId})};try{let s=await Go.request(n);if(s.data)return{expiresIn:s.data.expires_in,accessToken:s.data.access_token,idToken:s.data.id_token};throw Error("Invalid response from Auth0")}catch(s){throw r.error({err:(i=s==null?void 0:s.toJSON)==null?void 0:i.call(s)}),s}}static async requestDeviceCode(){var n;let t=e.logger.child({method:"requestDeviceCode"}),r={method:"POST",url:`${e.auth0Url}/oauth/device/code`,headers:{"Content-Type":"application/x-www-form-urlencoded"},data:new TA.URLSearchParams({client_id:e.clientId,scope:"openid profile email offline_access",audience:e.audience})};try{let i=await Go.request(r);if(i.data)return{verificationUrl:i.data.verification_uri_complete,deviceCode:i.data.device_code,userCode:i.data.user_code,pollInterval:i.data.interval+1,expiration:i.data.expires_in,loginData:e.pollForToken(i.data.interval,i.data.device_code)};throw Error("Invalid response from Auth0")}catch(i){throw t.error({err:(n=i==null?void 0:i.toJSON)==null?void 0:n.call(i)}),i}}static pollForToken(t,r){let n=t*1e3,i=e.logger.child({method:"pollForToken"}),s={method:"POST",url:`${e.auth0Url}/oauth/token`,headers:{"Content-Type":"application/x-www-form-urlencoded"},data:new TA.URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:r,client_id:this.clientId})};return async()=>{var a;let o;for(;!o;)try{let u=await Go.request(s);if(u.data){o=n1e(u.data);break}}catch(u){if(u.response){let p=(a=u.response.data)==null?void 0:a.error;if(i.trace({errorMessage:p}),p==="authorization_pending")await xu(n);else if(p==="slow_down")await xu(n*2);else throw u}}if(!o)throw new Error("Failed to get login token");return o}}}});var cV,uV,lV,wa,o1e,pV=ae(()=>{"use strict";c();cV=xe(require("assert")),uV=xe(wI());bs();dr();s1e();sa();xh();lV=class extends Error{constructor(t){super(t||"Login failed")}},wa=class e{static preferencesEndpoint="/core/preferences";auth0Id;userId;email;name;username;enabled;createdAt;userAgeDays;accessToken;idToken;refreshToken;orgs=[];defaultOrgName;preferences;_loginData;loggedIn=!1;constructor(){}static async init(){let t=new e;return await t.load(),t}generateSandboxName(){var t;return(t=this.username)==null?void 0:t.replace(/\s/g,"-").toLowerCase()}isLoggedIn(){return process.env.AMPT_API_KEY?!0:this.loggedIn&&this._isValidUserIdSet()}async load(){let t=_e.child({class:"User",method:"load"});if(process.env.AMPT_API_KEY){await this.hydrateUser(),await this.getDefaultOrgName();return}let r=Pt.getLoggedInUser();if(t.debug({func:"load",user:r},"loaded user"),!r||!r.refreshToken){this.loggedIn=!1;return}this.userId=r.userId||void 0,this.username=r.username||void 0,this.refreshToken=r.refreshToken,this.accessToken=r.accessToken||void 0,Pt.setUser(this),(!this.accessToken||r.expiresAt&&r.expiresAt<=Date.now()-1e3)&&await this.refreshAccessToken(),this.loggedIn=!0,await Promise.all([this.hydrateUser(),this.getDefaultOrgName()])}async refreshAccessToken(){(0,cV.default)(!!this.refreshToken,"no refresh token");let t=await Rb.refreshSession(this.refreshToken);this.accessToken=t.accessToken,this.idToken=t.idToken,Pt.storeToken(t.accessToken,t.expiresIn)}async getDefaultOrgName(){var n;let t=_e.child({class:"User",method:"getDefaultOrgName"});(!this.orgs||this.orgs.length===0)&&await this.listOrgs(),(0,cV.default)(!!((n=this.orgs)!=null&&n.length),"no orgs found");let r=this.orgs.find(i=>i.role==="owner");return r?(t.debug({ownedOrg:r},"default org"),Pt.orgName=r.orgName,Pt.orgName):(Pt.orgName=this.orgs[0].orgName,Pt.orgName)}async restoreOrgLogin(t){throw new Error("not implemented")}hasAccessToOrg(t){var r;return((r=this.orgs)==null?void 0:r.some(({orgName:n})=>n===t))||!1}async listOrgs(){try{let t=await ze({endpoint:"/orgs",method:"GET"});this.orgs=t||[]}catch{this.orgs=[]}}async performLogin(t){var i;let{userCode:r,verificationUrl:n}=await this.startLogin();t.logInfo("Your browser should open automatically."),t.logInfo("If not, open the following login url:"),t.logUrl(n),t.logInfo(`Your confirmation code is: ${(i=t.styles)==null?void 0:i.purple.bold(r)}`),t.logWarning("This code will expire in 15 minutes.");try{t.openUrl(n)}catch{}await this.endLogin(),fr({eventName:"ampt.context.login",eventData:{context:"cli"}}),t.isShellActive&&t._clearScreen(),t.logSuccess(`Logged in as ${t.styles.bold(t.styles.darkPurple(this.username))}`)}async startLogin(){let{userCode:t,expiration:r,verificationUrl:n,deviceCode:i,pollInterval:s,loginData:o}=await Rb.requestDeviceCode();return this._loginData=o,{userCode:t,expiration:r,verificationUrl:n,deviceCode:i,pollInterval:s}}async endLogin(){if(!this._loginData)throw new lV("Something went wrong during the login process.");let t=await this._loginData();this.refreshToken=t.refreshToken,this.accessToken=t.accessToken,Pt.setUser(this),await this.hydrateUser(0,()=>{Pt.onLogin(this,t)}),await this.getDefaultOrgName()}logout(){return pF()}async hydrateUser(t=0,r){let i=await ze({method:"GET",endpoint:"/core/me"});if(i!=null&&i.userUid){if(i.enabled===!1)throw pF(),new _h(`User "${i.userName}"'s access has been revoked.`);this.loggedIn=!0,this.name=i.fullName,this.email=i.email,this.userId=i.userUid,this.username=i.userName,this.auth0Id=i.auth0Id,this.createdAt=i.createdAt,this.userAgeDays=(0,uV.default)().diff((0,uV.default)(i.createdAt),"days"),(i.preferences||i.config)&&(this.preferences=i.config||i.preferences),Pt.setUser(this),r&&r()}else{if(t>3)throw new Error("Hydrate user failed");return await xu(500),await this.hydrateUser(t+1,r)}}async updatePreferences(t){try{let r={method:"PATCH",endpoint:e.preferencesEndpoint,body:t};await ze(r),await this.hydrateUser(),Pt.setUser(this)}catch(r){throw new Error(`Failed to update preferences: ${r.message}`)}}_isValidUserIdSet(){return!!this.userId}},o1e=wa});var Zn=ae(()=>{"use strict";c();jW();ebe();pIe();_P();YD();XD();d0e();rA();aV();AA();pV();sa()});async function dV(e){let t=e.fs;await t.read(),(0,a1e.default)(t.serviceFile,"Project info not loaded");let r=t.serviceFile,n=Object.assign({},r.dependencies||{},r.devDependencies||{});if(r.serverless&&(n["@ampt/cloud"]||(e.logWarning(`This looks like a @serverless/cloud project.
255
+ \v\f\r \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF`,dHt="\u200B",fHt=typeof String.prototype.trim=="function",hHt=cBe(!fHt||Ab.trim()||!dHt.trim()?function(t){var r=new RegExp("^["+Ab+"]["+Ab+"]*"),n=new RegExp("["+Ab+"]["+Ab+"]*$");return t.replace(r,"").replace(n,"")}:function(t){return t.trim()});uBe.exports=hHt});var dBe=y((VTr,pBe)=>{c();var mHt=Ms(),gHt=Hs(),yHt=ie(),vHt=yHt(function(t,r){return mHt(t.length,function(){try{return t.apply(this,arguments)}catch(n){return r.apply(this,gHt([n],arguments))}})});pBe.exports=vHt});var hBe=y((MTr,fBe)=>{c();var bHt=je(),IHt=bHt(function(t){return function(){return t(Array.prototype.slice.call(arguments,0))}});fBe.exports=IHt});var gBe=y((jTr,mBe)=>{c();var _Ht=je(),CHt=mb(),xHt=_Ht(function(t){return CHt(1,t)});mBe.exports=xHt});var vBe=y((YTr,yBe)=>{c();var SHt=ie(),wHt=Cn(),EHt=SHt(function(t,r){return wHt(t,function(){for(var n=1,i=r,s=0,o;n<=t&&typeof i=="function";)o=n===t?arguments.length:s+i.length,i=i.apply(this,Array.prototype.slice.call(arguments,s,o)),n+=1,s=o;return i})});yBe.exports=EHt});var IBe=y((zTr,bBe)=>{c();var AHt=ie(),RHt=AHt(function(t,r){for(var n=t(r),i=[];n&&n.length;)i[i.length]=n[0],n=t(n[1]);return i});bBe.exports=RHt});var CBe=y(($Tr,_Be)=>{c();var THt=Hs(),NHt=ie(),BHt=mA(),kHt=xA(),OHt=NHt(BHt(kHt,THt));_Be.exports=OHt});var sV=y((eNr,xBe)=>{c();var GHt=bb(),FHt=ie(),LHt=FHt(function(t,r){for(var n=0,i=r.length,s=[],o;n<i;)o=r[n],GHt(t,o,s)||(s[s.length]=o),n+=1;return s});xBe.exports=LHt});var wBe=y((rNr,SBe)=>{c();var ZHt=Hs(),PHt=it(),WHt=sV(),DHt=PHt(function(t,r,n){return WHt(t,ZHt(r,n))});SBe.exports=DHt});var ABe=y((iNr,EBe)=>{c();var qHt=it(),VHt=qHt(function(t,r,n){return t(n)?n:r(n)});EBe.exports=VHt});var TBe=y((oNr,RBe)=>{c();var HHt=gA(),MHt=dA(),UHt=MHt(HHt);RBe.exports=UHt});var BBe=y((cNr,NBe)=>{c();var jHt=it(),XHt=jHt(function(t,r,n){for(var i=n;!t(i);)i=r(i);return i});NBe.exports=XHt});var OBe=y((lNr,kBe)=>{c();var YHt=je(),KHt=YHt(function(t){var r,n=[];for(r in t)n[n.length]=t[r];return n});kBe.exports=KHt});var FBe=y((dNr,GBe)=>{c();var zHt=ie(),JHt=function(e){return{value:e,"fantasy-land/map":function(){return this}}},$Ht=zHt(function(t,r){return t(JHt)(r).value});GBe.exports=$Ht});var ZBe=y((hNr,LBe)=>{c();var QHt=it(),eMt=QHt(function(t,r,n){return t(n)?r(n):n});LBe.exports=eMt});var oV=y((gNr,PBe)=>{c();var tMt=ie(),rMt=Pi(),nMt=tMt(function(t,r){for(var n in t)if(rMt(n,t)&&!t[n](r[n]))return!1;return!0});PBe.exports=nMt});var DBe=y((vNr,WBe)=>{c();var iMt=ie(),sMt=cs(),oMt=as(),aMt=oV(),cMt=iMt(function(t,r){return aMt(oMt(sMt,t),r)});WBe.exports=cMt});var VBe=y((INr,qBe)=>{c();var uMt=Yp(),lMt=ie(),pMt=Sb(),dMt=_b(),fMt=lMt(function(e,t){return dMt(pMt(uMt)(e),t)});qBe.exports=fMt});var MBe=y((CNr,HBe)=>{c();var hMt=ie(),mMt=hMt(function(t,r){return!!(!t^!r)});HBe.exports=mMt});var jBe=y((SNr,UBe)=>{c();var gMt=ie(),yMt=gMt(function(t,r){for(var n=0,i=t.length,s,o=r.length,a=[];n<i;){for(s=0;s<o;)a[a.length]=[t[n],r[s]],s+=1;n+=1}return a});UBe.exports=yMt});var YBe=y((ENr,XBe)=>{c();var vMt=ie(),bMt=vMt(function(t,r){for(var n=[],i=0,s=Math.min(t.length,r.length);i<s;)n[i]=[t[i],r[i]],i+=1;return n});XBe.exports=bMt});var zBe=y((RNr,KBe)=>{c();var IMt=ie(),_Mt=IMt(function(t,r){for(var n=0,i=Math.min(t.length,r.length),s={};n<i;)s[t[n]]=r[n],n+=1;return s});KBe.exports=_Mt});var $Be=y((NNr,JBe)=>{c();var CMt=it(),xMt=CMt(function(t,r,n){for(var i=[],s=0,o=Math.min(r.length,n.length);s<o;)i[s]=t(r[s],n[s]),s+=1;return i});JBe.exports=xMt});var e1e=y((kNr,QBe)=>{c();var SMt=Cn(),wMt=je(),EMt=wMt(function(t){return SMt(t.length,function(){var n=arguments;return function(){return t.apply(this,n)}})});QBe.exports=EMt});var t1e=y((GNr,H)=>{c();H.exports={};H.exports.F=h0e();H.exports.T=g0e();H.exports.__=v0e();H.exports.add=cb();H.exports.addIndex=A0e();H.exports.adjust=KD();H.exports.all=zD();H.exports.allPass=hCe();H.exports.always=fb();H.exports.and=tq();H.exports.any=ICe();H.exports.anyPass=CCe();H.exports.ap=uA();H.exports.aperture=TCe();H.exports.append=BCe();H.exports.apply=rq();H.exports.applySpec=LCe();H.exports.applyTo=PCe();H.exports.ascend=DCe();H.exports.assoc=hb();H.exports.assocPath=iq();H.exports.binary=XCe();H.exports.bind=$D();H.exports.both=QCe();H.exports.call=rxe();H.exports.chain=dA();H.exports.clamp=hxe();H.exports.clone=Ixe();H.exports.comparator=Cxe();H.exports.complement=wxe();H.exports.compose=mA();H.exports.composeK=lq();H.exports.composeP=Dxe();H.exports.composeWith=jxe();H.exports.concat=IA();H.exports.cond=NSe();H.exports.construct=OSe();H.exports.constructN=xq();H.exports.contains=FSe();H.exports.converge=Sq();H.exports.countBy=qSe();H.exports.curry=pA();H.exports.curryN=Cn();H.exports.dec=HSe();H.exports.defaultTo=wq();H.exports.descend=jSe();H.exports.difference=Aq();H.exports.differenceWith=Rq();H.exports.dissoc=Tq();H.exports.dissocPath=swe();H.exports.divide=awe();H.exports.drop=Bq();H.exports.dropLast=_we();H.exports.dropLastWhile=Awe();H.exports.dropRepeats=Gwe();H.exports.dropRepeatsWith=Gq();H.exports.dropWhile=Wwe();H.exports.either=Vwe();H.exports.empty=Lq();H.exports.endsWith=jwe();H.exports.eqBy=Ywe();H.exports.eqProps=zwe();H.exports.equals=cs();H.exports.evolve=$we();H.exports.filter=bA();H.exports.find=rEe();H.exports.findIndex=oEe();H.exports.findLast=lEe();H.exports.findLastIndex=hEe();H.exports.flatten=gEe();H.exports.flip=Sb();H.exports.forEach=bEe();H.exports.forEachObjIndexed=_Ee();H.exports.fromPairs=xEe();H.exports.groupBy=wEe();H.exports.groupWith=AEe();H.exports.gt=TEe();H.exports.gte=BEe();H.exports.has=FEe();H.exports.hasIn=ZEe();H.exports.hasPath=Pq();H.exports.head=dq();H.exports.identical=WEe();H.exports.identity=vb();H.exports.ifElse=qEe();H.exports.inc=HEe();H.exports.includes=UEe();H.exports.indexBy=XEe();H.exports.indexOf=KEe();H.exports.init=JEe();H.exports.innerJoin=QEe();H.exports.insert=tAe();H.exports.insertAll=nAe();H.exports.intersection=aAe();H.exports.intersperse=uAe();H.exports.into=yAe();H.exports.invert=bAe();H.exports.invertObj=_Ae();H.exports.invoker=$h();H.exports.is=Vq();H.exports.isEmpty=wAe();H.exports.isNil=lA();H.exports.join=AAe();H.exports.juxt=Hq();H.exports.keys=Us();H.exports.keysIn=NAe();H.exports.last=Oq();H.exports.lastIndexOf=kAe();H.exports.length=Uq();H.exports.lens=wb();H.exports.lensIndex=ZAe();H.exports.lensPath=WAe();H.exports.lensProp=qAe();H.exports.lift=gb();H.exports.liftN=sq();H.exports.lt=HAe();H.exports.lte=UAe();H.exports.map=as();H.exports.mapAccum=XAe();H.exports.mapAccumRight=KAe();H.exports.mapObjIndexed=JAe();H.exports.match=QAe();H.exports.mathMod=rRe();H.exports.max=jp();H.exports.maxBy=iRe();H.exports.mean=Xq();H.exports.median=cRe();H.exports.memoizeWith=lRe();H.exports.merge=dRe();H.exports.mergeAll=hRe();H.exports.mergeDeepLeft=bRe();H.exports.mergeDeepRight=_Re();H.exports.mergeDeepWith=xRe();H.exports.mergeDeepWithKey=Eb();H.exports.mergeLeft=wRe();H.exports.mergeRight=ARe();H.exports.mergeWith=TRe();H.exports.mergeWithKey=wA();H.exports.min=BRe();H.exports.minBy=ORe();H.exports.modulo=FRe();H.exports.move=ZRe();H.exports.multiply=Yq();H.exports.nAry=mb();H.exports.negate=DRe();H.exports.none=VRe();H.exports.not=cq();H.exports.nth=Xp();H.exports.nthArg=MRe();H.exports.o=jRe();H.exports.objOf=Dq();H.exports.of=zRe();H.exports.omit=QW();H.exports.once=$Re();H.exports.or=Fq();H.exports.otherwise=tTe();H.exports.over=zq();H.exports.pair=sTe();H.exports.partial=cTe();H.exports.partialRight=lTe();H.exports.partition=dTe();H.exports.path=Uu();H.exports.paths=eq();H.exports.pathEq=hTe();H.exports.pathOr=$q();H.exports.pathSatisfies=yTe();H.exports.pick=bTe();H.exports.pickAll=Qq();H.exports.pickBy=CTe();H.exports.pipe=uq();H.exports.pipeK=STe();H.exports.pipeP=pq();H.exports.pipeWith=fq();H.exports.pluck=Xh();H.exports.prepend=eV();H.exports.product=ATe();H.exports.project=NTe();H.exports.prop=cA();H.exports.propEq=kTe();H.exports.propIs=GTe();H.exports.propOr=LTe();H.exports.propSatisfies=PTe();H.exports.props=DTe();H.exports.range=HTe();H.exports.reduce=Co();H.exports.reduceBy=xb();H.exports.reduceRight=rV();H.exports.reduceWhile=jTe();H.exports.reduced=YTe();H.exports.reject=_b();H.exports.remove=Nq();H.exports.repeat=JTe();H.exports.replace=QTe();H.exports.reverse=zh();H.exports.scan=tNe();H.exports.sequence=iV();H.exports.set=iNe();H.exports.slice=js();H.exports.sort=oNe();H.exports.sortBy=cNe();H.exports.sortWith=lNe();H.exports.split=dNe();H.exports.splitAt=mNe();H.exports.splitEvery=yNe();H.exports.splitWhen=bNe();H.exports.startsWith=_Ne();H.exports.subtract=xNe();H.exports.sum=jq();H.exports.symmetricDifference=ENe();H.exports.symmetricDifferenceWith=TNe();H.exports.tail=yb();H.exports.take=CA();H.exports.takeLast=Zq();H.exports.takeLastWhile=BNe();H.exports.takeWhile=LNe();H.exports.tap=qNe();H.exports.test=UNe();H.exports.andThen=XNe();H.exports.times=nV();H.exports.toLower=KNe();H.exports.toPairs=JNe();H.exports.toPairsIn=QNe();H.exports.toString=Cb();H.exports.toUpper=tBe();H.exports.transduce=nBe();H.exports.transpose=sBe();H.exports.traverse=aBe();H.exports.trim=lBe();H.exports.tryCatch=dBe();H.exports.type=fA();H.exports.unapply=hBe();H.exports.unary=gBe();H.exports.uncurryN=vBe();H.exports.unfold=IBe();H.exports.union=CBe();H.exports.unionWith=wBe();H.exports.uniq=xA();H.exports.uniqBy=Wq();H.exports.uniqWith=sV();H.exports.unless=ABe();H.exports.unnest=TBe();H.exports.until=BBe();H.exports.update=_A();H.exports.useWith=tV();H.exports.values=nq();H.exports.valuesIn=OBe();H.exports.view=FBe();H.exports.when=ZBe();H.exports.where=oV();H.exports.whereEq=DBe();H.exports.without=VBe();H.exports.xor=MBe();H.exports.xprod=jBe();H.exports.zip=YBe();H.exports.zipObj=zBe();H.exports.zipWith=$Be();H.exports.thunkify=e1e()});var Wt,EA,AA=ae(()=>{"use strict";c();dr();Wt=class{org;serviceName;constructor(t={}){this.org=t.org,this.serviceName=t.serviceName||"my-app"}async copy(t={}){let r={method:"POST",endpoint:`/orgs/${this.org.orgName}/services/${this.serviceName}/copy`,body:t};return await ze(r)}async create(t={}){let r={method:"POST",endpoint:`/orgs/${this.org.orgName}/services/${this.serviceName}`,body:t};return await ze(r)}async get(){var r;let t={method:"GET",endpoint:`/orgs/${(r=this.org)==null?void 0:r.orgName}/services/${this.serviceName}`};return await ze(t)}async getGitConfig(){var r;let t={method:"GET",endpoint:`/orgs/${(r=this.org)==null?void 0:r.orgName}/services/${this.serviceName}/git`};return await ze(t)}async put(t={}){let r={method:"PATCH",endpoint:`/orgs/${this.org.orgName}/services/${this.serviceName}`,body:t};return await ze(r)}async delete(){let t={method:"DELETE",endpoint:`/orgs/${this.org.orgName}/services/${this.serviceName}`};return await ze(t)}async listInstances(){let t={method:"GET",endpoint:`/orgs/${this.org.orgName}/services/${this.serviceName}/instances`};return await ze(t)}async getParams(){let t={method:"GET",endpoint:`/orgs/${this.org.orgName}/services/${this.serviceName}/params`},{params:r}=await ze(t);return r}async putParams(t){let r={method:"PATCH",endpoint:`/orgs/${this.org.orgName}/services/${this.serviceName}/params`,body:{params:t}},{params:n}=await ze(r);return n}getDashboardUrl(){let t=process.env.AMPT_STAGE||"prod";return process.env.AMPT_DASHBOARD_URL?process.env.AMPT_DASHBOARD_URL:t==="prod"?`https://ampt.dev/orgs/${this.org.orgName}/apps/${this.serviceName}`:`https://amptlabs.dev/orgs/${this.org.orgName}/apps/${this.serviceName}`}},EA=Wt});var RA,Jt,r1e,aV=ae(()=>{"use strict";c();RA=xe(t1e());dr();AA();sa();Jt=class{orgName;plan;constructor(t){this.orgName=t.orgName}update(t={}){this.orgName=t.orgName||this.orgName,Pt.orgName=this.orgName}async validateLimits(){try{let t=await this.getPlan();if(!t)throw new Error("Plan not found");return{serviceExceeded:t.serviceCount>=t.serviceLimit,instanceExceeded:t.instanceCount>=t.instanceLimit,serviceApproachingLimit:t.serviceCount>=t.serviceLimit-2,instanceApproachingLimit:t.instanceCount>=t.instanceLimit-2}}catch(t){return t.message.includes("Plan not found")&&_e.debug({orgName:this.orgName},"plan not found"),{serviceExceeded:!1,instanceExceeded:!1,serviceApproachingLimit:!1,instanceApproachingLimit:!1}}}async isAuthorized(){try{await this._activate()}catch(t){if(t.message.includes("Your credentials do not have access to the Organization"))return _e.debug({orgName:this.orgName},"do not have access to org"),!1}return!0}async listServices(){let t={method:"GET",endpoint:`/orgs/${this.orgName}/services`};return await ze(t)}async listServicesWithInstances(){let t=await this.listServices(),r=await Promise.all(t.map(async n=>{let s=await new EA({org:this,serviceName:n.serviceName}).listInstances();return!s||s.length===0?null:n}));return(0,RA.reject)(RA.isNil,r)}async getPlan(){let t={method:"GET",endpoint:`/orgs/${this.orgName}/plan`},r=await ze(t);if(r)return this.plan=r,r}async getParams(){let t={method:"GET",endpoint:`/orgs/${this.orgName}/params`},{params:r}=await ze(t);return r}async putParams(t){let r={method:"PATCH",endpoint:`/orgs/${this.orgName}/params`,body:{params:t}},{params:n}=await ze(r);return n}async _activate(){let t={method:"GET",endpoint:`/orgs/${this.orgName}/is-activated`};return await ze(t)}async proxy(t){let r={method:"POST",endpoint:`/orgs/${this.orgName}/proxy`,body:t};return await ze(r)}async getUsage(t="total"){let r={method:"GET",endpoint:`/orgs/${this.orgName}/usage?window=${t}`};return await ze(r)}async getRegions(){let t={method:"GET",endpoint:`/orgs/${this.orgName}/regions`};return(await ze(t)).regions}async fetch(){let t={method:"GET",endpoint:`/orgs/${this.orgName}/details`};return await ze(t)}async updateMetadata(t={}){let r={method:"PATCH",endpoint:`/orgs/${this.orgName}`,body:t};return await ze(r)}},r1e=Jt});var AMt,n1e,i1e=ae(()=>{"use strict";c();AMt=e=>e.replace(/([-_][a-z, 0-9])/gi,t=>t.toUpperCase().replace("-","").replace("_","")),n1e=e=>Object.keys(e).reduce((t,r)=>({...t,[AMt(r)]:e[r]}),{})});var TA,Rb,s1e=ae(()=>{"use strict";c();W_();Mf();$G();TA=require("url");i1e();Rb=class e{static auth0Url=process.env.AMPT_STAGE==="prod"?"https://ampt.us.auth0.com":"https://amptdev.us.auth0.com";static clientId=process.env.AMPT_STAGE==="prod"?"sVVRzSWM6OVwWBnnOv3idPqkZvgqKLGm":"soEd8ZHLP6RpLZNGjTlb7J462WtcZjZT";static audience=process.env.AMPT_STAGE==="prod"?"https://api.ampt.dev":"https://api.amptlabs.dev";static logger=_e.child({class:"Auth0"});static async refreshSession(t){var i;let r=e.logger.child({method:"refreshSession"}),n={method:"POST",url:`${e.auth0Url}/oauth/token`,headers:{"Content-Type":"application/x-www-form-urlencoded"},data:new TA.URLSearchParams({grant_type:"refresh_token",refresh_token:t,client_id:e.clientId})};try{let s=await Go.request(n);if(s.data)return{expiresIn:s.data.expires_in,accessToken:s.data.access_token,idToken:s.data.id_token};throw Error("Invalid response from Auth0")}catch(s){throw r.error({err:(i=s==null?void 0:s.toJSON)==null?void 0:i.call(s)}),s}}static async requestDeviceCode(){var n;let t=e.logger.child({method:"requestDeviceCode"}),r={method:"POST",url:`${e.auth0Url}/oauth/device/code`,headers:{"Content-Type":"application/x-www-form-urlencoded"},data:new TA.URLSearchParams({client_id:e.clientId,scope:"openid profile email offline_access",audience:e.audience})};try{let i=await Go.request(r);if(i.data)return{verificationUrl:i.data.verification_uri_complete,deviceCode:i.data.device_code,userCode:i.data.user_code,pollInterval:i.data.interval+1,expiration:i.data.expires_in,loginData:e.pollForToken(i.data.interval,i.data.device_code)};throw Error("Invalid response from Auth0")}catch(i){throw t.error({err:(n=i==null?void 0:i.toJSON)==null?void 0:n.call(i)}),i}}static pollForToken(t,r){let n=t*1e3,i=e.logger.child({method:"pollForToken"}),s={method:"POST",url:`${e.auth0Url}/oauth/token`,headers:{"Content-Type":"application/x-www-form-urlencoded"},data:new TA.URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:r,client_id:this.clientId})};return async()=>{var a;let o;for(;!o;)try{let u=await Go.request(s);if(u.data){o=n1e(u.data);break}}catch(u){if(u.response){let p=(a=u.response.data)==null?void 0:a.error;if(i.trace({errorMessage:p}),p==="authorization_pending")await xu(n);else if(p==="slow_down")await xu(n*2);else throw u}}if(!o)throw new Error("Failed to get login token");return o}}}});var cV,uV,lV,wa,o1e,pV=ae(()=>{"use strict";c();cV=xe(require("assert")),uV=xe(wI());bs();dr();s1e();sa();xh();lV=class extends Error{constructor(t){super(t||"Login failed")}},wa=class e{static preferencesEndpoint="/core/preferences";auth0Id;userId;email;name;username;enabled;createdAt;userAgeDays;accessToken;idToken;refreshToken;orgs=[];defaultOrgName;preferences;_loginData;loggedIn=!1;constructor(){}static async init(){let t=new e;return await t.load(),t}generateSandboxName(){var t;return(t=this.username)==null?void 0:t.replace(/\s/g,"-").toLowerCase()}isLoggedIn(){return process.env.AMPT_API_KEY?!0:this.loggedIn&&this._isValidUserIdSet()}async load(){let t=_e.child({class:"User",method:"load"});if(process.env.AMPT_API_KEY){await this.hydrateUser(),await this.getDefaultOrgName();return}let r=Pt.getLoggedInUser();if(t.debug({func:"load",user:r},"loaded user"),!r||!r.refreshToken){this.loggedIn=!1;return}this.userId=r.userId||void 0,this.username=r.username||void 0,this.refreshToken=r.refreshToken,this.accessToken=r.accessToken||void 0,Pt.setUser(this),(!this.accessToken||r.expiresAt&&r.expiresAt<=Date.now()-1e3)&&await this.refreshAccessToken(),this.loggedIn=!0,await Promise.all([this.hydrateUser(),this.listOrgs()]),await this.getDefaultOrgName()}async refreshAccessToken(){(0,cV.default)(!!this.refreshToken,"no refresh token");let t=await Rb.refreshSession(this.refreshToken);this.accessToken=t.accessToken,this.idToken=t.idToken,Pt.storeToken(t.accessToken,t.expiresIn)}async getDefaultOrgName(){var n;let t=_e.child({class:"User",method:"getDefaultOrgName"});(!this.orgs||this.orgs.length===0)&&await this.listOrgs(),(0,cV.default)(!!((n=this.orgs)!=null&&n.length),"no orgs found");let r=this.orgs.find(i=>i.role==="owner");return r?(t.debug({ownedOrg:r},"default org"),Pt.orgName=r.orgName,Pt.orgName):(Pt.orgName=this.orgs[0].orgName,Pt.orgName)}async restoreOrgLogin(t){throw new Error("not implemented")}hasAccessToOrg(t){var r;return((r=this.orgs)==null?void 0:r.some(({orgName:n})=>n===t))||!1}async listOrgs(){if(!(this.orgs&&this.orgs.length>0))try{let t=await ze({endpoint:"/orgs",method:"GET"});this.orgs=t||[]}catch{this.orgs=[]}}async performLogin(t){var i;let{userCode:r,verificationUrl:n}=await this.startLogin();t.logInfo("Your browser should open automatically."),t.logInfo("If not, open the following login url:"),t.logUrl(n),t.logInfo(`Your confirmation code is: ${(i=t.styles)==null?void 0:i.purple.bold(r)}`),t.logWarning("This code will expire in 15 minutes.");try{t.openUrl(n)}catch{}await this.endLogin(),fr({eventName:"ampt.context.login",eventData:{context:"cli"}}),t.isShellActive&&t._clearScreen(),t.logSuccess(`Logged in as ${t.styles.bold(t.styles.darkPurple(this.username))}`)}async startLogin(){let{userCode:t,expiration:r,verificationUrl:n,deviceCode:i,pollInterval:s,loginData:o}=await Rb.requestDeviceCode();return this._loginData=o,{userCode:t,expiration:r,verificationUrl:n,deviceCode:i,pollInterval:s}}async endLogin(){if(!this._loginData)throw new lV("Something went wrong during the login process.");let t=await this._loginData();this.refreshToken=t.refreshToken,this.accessToken=t.accessToken,Pt.setUser(this),await this.hydrateUser(0,()=>{Pt.onLogin(this,t)}),await this.getDefaultOrgName()}logout(){return pF()}async hydrateUser(t=0,r){let i=await ze({method:"GET",endpoint:"/core/me"});if(i!=null&&i.userUid){if(i.enabled===!1)throw pF(),new _h(`User "${i.userName}"'s access has been revoked.`);this.loggedIn=!0,this.name=i.fullName,this.email=i.email,this.userId=i.userUid,this.username=i.userName,this.auth0Id=i.auth0Id,this.createdAt=i.createdAt,this.userAgeDays=(0,uV.default)().diff((0,uV.default)(i.createdAt),"days"),(i.preferences||i.config)&&(this.preferences=i.config||i.preferences),Pt.setUser(this),r&&r()}else{if(t>3)throw new Error("Hydrate user failed");return await xu(500),await this.hydrateUser(t+1,r)}}async updatePreferences(t){try{let r={method:"PATCH",endpoint:e.preferencesEndpoint,body:t};await ze(r),await this.hydrateUser(),Pt.setUser(this)}catch(r){throw new Error(`Failed to update preferences: ${r.message}`)}}_isValidUserIdSet(){return!!this.userId}},o1e=wa});var Zn=ae(()=>{"use strict";c();jW();ebe();pIe();_P();YD();XD();d0e();rA();aV();AA();pV();sa()});async function dV(e){let t=e.fs;(0,a1e.default)(t.serviceFile,"Project info not loaded");let r=t.serviceFile,n=Object.assign({},r.dependencies||{},r.devDependencies||{});if(r.serverless&&(n["@ampt/cloud"]||(e.logWarning(`This looks like a @serverless/cloud project.
256
256
 
257
257
  Install @ampt/cloud to allow it to run on Ampt, or migrate
258
258
  your project to use the Ampt SDK.
@@ -288,7 +288,7 @@ your project to use the Ampt SDK.
288
288
  ${r("Documentation:")} https://getampt.com/docs
289
289
  ${r("Discord:")} https://getampt.com/discord
290
290
  `;e.isShellActive&&(n=n.replaceAll("ampt ","")),e.log(n)}});var ZMt,I1e=ae(()=>{"use strict";c();Zn();ZMt=async e=>{e.viewSpinner("Loading");let t=e.args[0],{fs:r,user:n}=e;if(await r.read(),!r.serviceFile)throw new Error("You must be inside an Ampt app directory to run this command.");let i=e.options.overwrite||e.options.o||!1,s=e.options.app||r.serviceFile.ampt.app,o=e.options.org||r.serviceFile.ampt.org,a=e.options.stage||e.options.instance||n.username;o||(o=await e.selectOrg(n)),e.viewSpinner("Loading");let u=new Jt({orgName:o});await u.isAuthorized()||(e.logError(`You don't have access to the "${o}" org.`),o=await e.selectOrg(n)),u.update({orgName:o}),e.viewSpinner("Importing");let p=new Wt({org:u,serviceName:s}),d=new or({org:u,service:p,instanceName:a}),h=new Vu({fs:r,org:u,service:p,instance:d});if(t&&!r.fileExists(t)){e.logError(`File "${t}" not found.`);return}await h.import({dataFileName:t,overwrite:i});let m=`Data imported from "${t||r.dataFileName}"`;e.logSuccess(m)}});var PMt,_1e=ae(()=>{"use strict";c();PMt=async e=>{var n;let t=e.fs;if(await t.read(),!t.serviceFile)throw new Error("You must be inside an Ampt app directory to run this command.");let r=t.servicePackageManager;e.args.length===0?e.viewSpinner(`[${r}] Installing dependencies`):e.args.length===1?e.viewSpinner(`[${r}] Installing ${e.args[0]}`):e.args.length>1&&e.viewSpinner(`[${r}] Installing ${String(e.args.length)} packages`);try{let i=e.args.length===0,s=e.argv.includes("--dev");s&&(e.argv=e.argv.filter(o=>o!=="--dev")),i?await t.installDependenciesIfExists({cleanInstall:!0}):await t.installDependency(e.argv.slice(1),s),e.args.length===0?e.logSuccess("Successfully installed dependencies."):e.args.length===1?e.logSuccess(`Successfully installed the ${(n=e.styles)==null?void 0:n.bold(e.args[0])} package.`):e.args.length>1&&e.logSuccess(`Successfully installed ${String(e.args.length)} packages.`)}catch(i){e.logError(i.message)}}});var WMt,C1e=ae(()=>{"use strict";c();Zn();WMt=async e=>{if(e.user&&e.user.isLoggedIn())return e.logInfo(`Already logged in as ${e.styles.bold(e.user.username)}.`);e.user||(e.user=await wa.init()),await e.user.performLogin(e)}});var DMt,x1e=ae(()=>{"use strict";c();DMt=async e=>{e.viewSpinner("Logging out"),e.user&&e.user.isLoggedIn()?(e.user.logout(),e.logSuccess("Successfully logged out of Ampt CLI."),await e.quit()):e.logInfo("You are already logged out of Ampt CLI.")}});var qMt,S1e=ae(()=>{"use strict";c();Zn();qMt=async e=>{e.viewSpinner("Loading");let t=e.fs;if(await t.read(),!t.serviceFile)throw new Error("You must be inside an Ampt app directory to run this command.");e.viewSpinner("Opening Dashboard");let{user:r}=e,n=t.serviceFile.ampt.org,i=t.serviceFile.ampt.app;n||(n=await e.selectOrg(r)),e.viewSpinner("Loading");let s=new Jt({orgName:n});await s.isAuthorized()||(e.logError(`You don't have access to the "${n}" org.`),n=await e.selectOrg(r)),s.update({orgName:n});let o=new Wt({org:s,serviceName:i});e.logInfo("Your browser should open automatically"),e.logInfo("If not, open the following app page url:");let a=o.getDashboardUrl();e.logUrl(a),e.openUrl(a)}});var VMt,w1e=ae(()=>{"use strict";c();Zn();VMt=async e=>{var S,w;e.viewSpinner("Loading");let t=e.fs;if(await t.read(),!t.serviceFile)throw new Error("You must be inside an Ampt app directory to run this command.");let{user:r}=e,n=e.options.app||t.serviceFile.ampt.app,i=e.options.org||t.serviceFile.ampt.org;i||(i=await e.selectOrg(r)),e.viewSpinner("Loading");let s=new Jt({orgName:i});await s.isAuthorized()||(e.logError(`You don't have access to the "${i}" org.`),i=await e.selectOrg(r)),s.update({orgName:i});let o=new Wt({org:s,serviceName:n}),a=await o.listInstances(),u=(S=e.args)==null?void 0:S[0],p=(w=e.args)==null?void 0:w[1];if(!u){if(!e.isInteractive)throw new Error('Please specify a source stage name: "ampt promote dev"');e.logInfo("Please enter the name of the stage you want to promote."),u=await e.prompt("type a stage name")}if(!p){if(!e.isInteractive)throw new Error('Please specify a target stage name: "ampt promote dev prod"');e.logInfo("Please enter the name of the stage you want to promote to."),p=await e.prompt("type a stage name")}if(u===p)throw new Error("The stage names you specified are identical. Please specify two different stages.");let d=a.find(T=>T.instanceName===u);if(!d)throw new Error(`The specified source instance does not exist: ${u}.`);let h=a.find(T=>T.instanceName===p);if(d&&d.instanceType!=="stage"||h&&h.instanceType!=="stage")throw new Error('One of the instances you specified are not of type "stage". You can only promote between stage environments.');let m=new or({org:s,service:o,instanceName:p}),g=await o.get();if(!g)return e.logWarning(`Unexpected error: App ${n} was not found.`);let[v,I]=await Promise.all([s.fetch(),s.getRegions()]),x=await e.selectRegion({orgInfo:v,instanceInfo:h,serviceInfo:g,regions:I});if(!x)return e.logWarning("Promote cancelled.");e.viewSpinner(`Promoting ${u} to ${p} (${x.name})`),e.updateSpinnerStep("syncing");let{operationId:_}=await o.copy({sourceInstanceName:u,targetInstanceName:p,copyCode:!0,copyData:!1,copyStorage:!1,instanceType:"stage",region:x.code}),{success:A,message:E}=await e.messenger.waitForOperation({operationId:_,context:e,orgName:i,appName:n});if(E&&(A?e.logInfo(E):e.logError(E)),!A){e.logError("Promote command failed");return}await m.get(),e.logSuccess(`Successfully promoted from the "${u}" stage to the "${p} (${x.name})" stage.`),e.logUrl(m.url)}});var E1e,A1e,R1e,T1e,HMt,MMt,N1e=ae(()=>{"use strict";c();Zn();dr();E1e=xe(require("path")),A1e=xe(require("os")),R1e=xe(cl()),T1e=xe(require("assert")),HMt=(e,t)=>E1e.default.join(A1e.default.homedir(),".serverless",`cloud_shell_activity_${e}_${t}.json`),MMt=async e=>{var _,A,E,S;e.viewSpinner("Running");let t,r=e.options.login,n=e.user;if(!n)throw new Error("User not found");r&&(delete e.options.login,t=await n.restoreOrgLogin(r),e.logSuccess("Successfully logged in."));let i=e.fs;if(await i.read(),!i.serviceFile)throw new Error("You must be inside an Ampt app directory to run this command.");t=t||e.options.org||((A=(_=i.serviceFile)==null?void 0:_.ampt)==null?void 0:A.org);let s=e.options.app||((S=(E=i.serviceFile)==null?void 0:E.ampt)==null?void 0:S.app),o=e.args[0];if(o||(e.logInfo("Please specify a script name available in package.json that is prefixed with ampt:{name}, or a path to any TS or JS file."),o=await e.prompt("type a script name")),!e.isInteractive&&o==="dev")throw new Error("dev command not available in non-interactive mode.");t||(fr({eventName:"ampt.dev.prompt",eventData:{promptName:"org"}}),t=await e.selectOrg(n),await i.writeServiceFile({orgName:t})),(0,T1e.default)(t,"orgName is required");let a=new Jt({orgName:t});await a.isAuthorized()||(fr({eventName:"ampt.dev.prompt",eventData:{promptName:"org"}}),e.logError(`You don't have access to the "${t}" org.`),t=await e.selectOrg(n)),a.update({orgName:t}),s||(fr({eventName:"ampt.dev.prompt",eventData:{promptName:"service"}}),s=await e.promptServiceName(i.defaults.app),await i.writeServiceFile({serviceName:s}));let u=e.options["test-env"]||e.options["test-stage"],p=u?`test-${Math.random().toString(36).substring(2,7)}`:e.options.env||e.options.stage||e.options.instance||n.username,d=new Wt({org:a,serviceName:s}),h=new or({org:a,service:d,instanceName:p,instanceType:"test"});if(u)e.viewSpinner(`Starting test stage (${p})`);else if(!await h.get()){e.logError(`Stage "${p}" does not exist. Try running "deploy ${p}" first.`);return}let m=new is({org:a,service:d,instance:h,sandboxMode:!0,cli:e});await m.getUrlsAndMap();let{url:g,region:v}=h,{env:I}=m;e.onQuit(async()=>{(0,R1e.removeSync)(HMt(t,s)),await fi.stop(e,{hasQuit:!0,orgName:t,serviceName:s})}),e.viewSpinner(`Running ${o}`);let x=await fi.start({env:I,region:v,url:g,cli:e,user:n,fs:i,scriptName:o,ifPresent:!1,orgName:t,serviceName:s});return e.setExitCode(x),null}});async function UMt(e){var d,h,m,g;_e.trace("refreshing sandbox credentials");let t=await o1e.init();if(!t.isLoggedIn())throw new Error("You must be logged in");let r=e.fs;await r.read();let n=process.env.AMPT_ORG_NAME||((h=(d=r.serviceFile)==null?void 0:d.ampt)==null?void 0:h.org),i=process.env.AMPT_APP_NAME||process.env.AMPT_SERVICE_NAME||((g=(m=r.serviceFile)==null?void 0:m.ampt)==null?void 0:g.app);if(!n)throw new Error("orgName is required");if(!i)throw new Error("serviceName is required");let s=new r1e({orgName:n});if(!await s.isAuthorized())throw new Error("Not authorized to access this org");let o=new EA({org:s,serviceName:i}),a=process.env.AMPT_ENVIRONMENT_NAME||process.env.AMPT_INSTANCE_NAME||t.username,u=new a0e({org:s,service:o,instanceName:a});await u.get();let p=new Qve({org:s,service:o,instance:u,sandboxMode:!0,cli:e});if(await p.getUrlsAndMap(),!p.credentials)throw new Error("No credentials");_e.trace({expiration:p.credentials.expiration},"refreshed sandbox credentials"),console.log(JSON.stringify({Version:1,AccessKeyId:p.credentials.accessKeyId,SecretAccessKey:p.credentials.secretAccessKey,SessionToken:p.credentials.sessionToken,Expiration:p.credentials.expiration}))}var B1e=ae(()=>{"use strict";c();jW();pV();aV();YD();AA();Mf()});var GA,k1e,O1e,jMt,G1e=ae(()=>{"use strict";c();GA=xe(require("fs")),k1e=xe(require("path")),O1e=require("child_process"),jMt=async e=>{e.pause();let t={js(){throw new Error("Not implemented")},ts(){throw new Error("Not implemented")},json(){throw new Error("Not implemented")},yml(r){return new Promise(n=>{var a,u;let i=GA.default.readFileSync(r);GA.default.writeFileSync("ampt.serverless.yml",i);let s=process.argv.slice(3),o=(0,O1e.spawn)("npx",["serverless","-c","ampt.serverless.yml"].concat(s),{env:{},stdio:"inherit",detached:!0});e.onQuit(()=>{o.kill(),n()}),(a=o.stdout)==null||a.pipe(process.stdout),(u=o.stderr)==null||u.pipe(process.stderr),o.on("exit",()=>{n()})})},yaml(r){return this.yml(r)}};for(let r of Object.keys(t)){let n=k1e.default.join(process.cwd(),`serverless.${r}`);if(GA.default.existsSync(n)){await t[r](n);return}}}});var XMt,F1e=ae(()=>{"use strict";c();Zn();XMt=async e=>{var F;e.viewSpinner("Loading");let t=e.fs;if(await t.read(),!t.serviceFile)throw new Error("You must be inside an Ampt app directory to run this command.");let{user:r}=e,n=e.options.overwrite,i=e.options.container,s=r.username,o=((F=e.args)==null?void 0:F[0])||`${s}-${Math.random().toString(36).substr(2,5)}`,a=e.options.app||t.serviceFile.ampt.app,u=e.options.org||t.serviceFile.ampt.org;u||(u=await e.selectOrg(r)),e.viewSpinner("Loading");let p=new Jt({orgName:u}),[d,h]=await Promise.all([p.isAuthorized(),p.getPlan()]);if(d||(e.logError(`You don't have access to the "${u}" org.`),u=await e.selectOrg(r)),h&&!h.previewsEnabled){e.logWarning("Preview environments are not available on your current plan."),e.logInfo(`You can enable preview environments by upgrading to the ${e.styles.bold(e.styles.darkPurple("Team"))} plan.`),e.logUrl(`https://ampt.dev/orgs/${p.orgName}/settings/billing`);return}p.update({orgName:u});let m=new Wt({org:p,serviceName:a}),v=(await m.listInstances()).find(B=>B.instanceName===o);if(v&&v.instanceType!=="preview")return e.logError(`"${v.instanceName}" already exists as a "${v.instanceType}" environment and cannot be overwritten.`);if(v&&i&&!v.enableLambdaContainer)return e.logError("You cannot change the packaging type of an existing environment."),e.logWarning(`Please create a new preview environment with the ${e.styles.dim("--container")} flag.`);if(v&&!n&&(e.logInfo("This preview environment already exists. Are you sure you want to overwrite it?"),n=await e.confirm(),!n))if(e.isShellActive){await e.logCancelled();return}else await e.quit();let I=r.username,x=new or({org:p,service:m,instanceName:I}),[_,A,E,S]=await Promise.all([m.get().catch(()=>({serviceName:a})),p.fetch(),v?x.get().catch(()=>{}):void 0,p.getRegions()]),w=await e.selectRegion({orgInfo:A,instanceInfo:E,serviceInfo:_,regions:S});if(!w)return e.logWarning("Deployment cancelled.");let T=new is({org:p,service:m,instance:x,fullSync:e.options["full-sync"],cli:e}),D=e.styles.bold(e.styles.blue(o)),L=e.styles.dim(`(${w.code})`),W=n?`Overwriting existing preview environment ${D} ${L}`:`Creating new preview environment ${D} ${L}`;e.viewSpinner(W,{timer:!0}),e.updateSpinnerStep("syncing"),await T.sync();let k=new or({org:p,service:m,instanceName:o});if(s!==o){let{operationId:B}=await m.copy({sourceInstanceName:s,targetInstanceName:o,copyCode:!0,copyData:!0,copyStorage:!0,instanceType:"preview",region:w.code,enableLambdaContainer:i}),{success:M,message:Y}=await e.messenger.waitForOperation({operationId:B,context:e,orgName:u,appName:a});if(Y&&(M?e.logInfo(Y):e.logError(Y)),!M){e.logError("Share command failed"),e.setExitCode(1);return}}await k.get(),e.logSuccess(`Successfully created preview environment ${e.styles.bold(o)} (${w.code}).`),e.logUrl(k.url)}});var YMt,L1e=ae(()=>{"use strict";c();YMt=async e=>{await e.startSession()}});var KMt,Z1e=ae(()=>{"use strict";c();Zn();KMt=async e=>{e.viewSpinner("Loading");let t=e.fs;if(await t.read(),!t.serviceFile||!t.serviceFile.ampt||!t.serviceFile.ampt.app||!t.serviceFile.ampt.org){e.logInfo("This command must be run inside a service directory.");return}let{org:r,app:n}=t.serviceFile.ampt;if(!await fi.isRunning({orgName:r,serviceName:n})){e.logInfo(`There's no dev server running for app "${n}" in org "${r}" at the moment.`);return}await fi.stop(e,{orgName:r,serviceName:n}),e.logSuccess(`Successfully stopped the dev server for app "${n}" in org "${r}".`)}});var zMt,P1e=ae(()=>{"use strict";c();dr();Zn();bs();zMt=async e=>{e.viewSpinner("Loading");let t=new wa,r=e.fs;if(await r.read(),!r.serviceFile)throw new Error("You must be inside an Ampt app directory to run this command.");let n=e.options.org||r.serviceFile.ampt.org,i=e.options.service||r.serviceFile.ampt.app||r.serviceFile.ampt.service,s=e.isShellActive?e.user.username:`test-${Math.random().toString(36).substring(2,7)}`;n||(n=await e.selectOrg(t)),e.viewSpinner("Loading");let o=new Jt({orgName:n});await o.isAuthorized()||(e.logError(`You don't have access to the "${n}" org.`),n=await e.selectOrg(t)),o.update({orgName:n}),e.isShellActive||e.viewSpinner(`Starting test stage (${s})`);let a=new Wt({org:o,serviceName:i}),u=new or({org:o,service:a,instanceType:"test",instanceName:s,cli:e});e.isShellActive||(await new is({org:o,service:a,instance:u,fullSync:e.options["full-sync"],cli:e}).sync(),e.logSuccess(`Test instance started: ${u.url}`)),await u.get();let p=await u.connect({cli:e});try{e.viewSpinner("Running tests");let d=e.options.coverage||e.options.collectCoverage,h=e.args[0],m=e.options.workers,{timeout:g=3e5}=await u.test({coverage:d,pattern:h,workers:m}),v=await(p==null?void 0:p.waitForEvent({eventType:"ampt.test.completed",timeout:g+5e3}));c9(e,v),v.data.coverage&&v.data.coverage.length&&d&&(e.viewSpinner("Collecting test coverage report"),await u.downloadTestCoverage(r.serviceRoot),e.logSuccess("Coverage report saved")),process.exitCode=v.data.results&&v.data.results.success?0:1}catch(d){e.logError(d)}e.isShellActive||(p==null||p.close(),e.viewSpinner("Deleting instance"),await u.delete(),e.logSuccess("Test instance deleted"),e.log(`Exiting with status code ${process.exitCode}`))}});var JMt,W1e=ae(()=>{"use strict";c();JMt=async e=>{var n;let t=e.fs;if(await t.read(),!t.serviceFile)throw new Error("You must be inside an Ampt app directory to run this command.");if(e.args.length===0){e.logInfo("Please enter the name of the npm package you want to uninstall.");let i=await e.prompt("type a package name");e.args.push(i)}let r=t.servicePackageManager;e.args.length===1?e.viewSpinner(`[${r}] Uninstalling ${e.args[0]}`):e.args.length>1&&e.viewSpinner(`[${r}] Uninstalling ${String(e.args.length)} packages`);try{let i=e.argv.includes("--dev");i&&(e.argv=e.argv.filter(s=>s!=="--dev")),await t.removeDependency(e.argv.slice(1),i),e.args.length===1?e.logSuccess(`Successfully uninstalled the ${(n=e.styles)==null?void 0:n.bold(e.args[0])} package.`):e.args.length>1&&e.logSuccess(`Successfully uninstalled ${String(e.args.length)} packages.`)}catch(i){e.session.captureException(i);let s=i.stdBuffer.toString();throw new Error(`Failed to uninstall due to the following error:
291
- ${s}`)}}});var $Mt,D1e=ae(()=>{"use strict";c();Zn();$Mt=async e=>{e.viewSpinner("Loading");let t=e.fs;if(await t.read(),!t.serviceFile)throw new Error("You must be inside an Ampt app directory to run this command.");let{user:r}=e,n=e.options.org||t.serviceFile.ampt.org,i=e.options.app||t.serviceFile.ampt.app,s=e.args[0]||r.username;n||(n=await e.selectOrg(r)),e.viewSpinner("Loading");let o=new Jt({orgName:n});await o.isAuthorized()||(e.logError(`You don't have access to the "${n}" org.`),n=await e.selectOrg(r)),o.update({orgName:n}),e.viewSpinner("Loading");let a=new Wt({org:o,serviceName:i}),u=new or({org:o,service:a,instanceName:s});await u.get(),e.logUrl(u.url)}});var q1e,QMt,V1e=ae(()=>{"use strict";c();q1e=xe(Hf()),QMt=async e=>{e.log(`v${q1e.version}`)}});var gV={};XR(gV,{bash:()=>TMt,clone:()=>NMt,dashboard:()=>BMt,delete:()=>kMt,deploy:()=>OMt,docs:()=>GMt,export:()=>FMt,help:()=>LMt,import:()=>ZMt,install:()=>PMt,login:()=>WMt,logout:()=>DMt,open:()=>qMt,promote:()=>VMt,run:()=>MMt,sandbox:()=>UMt,serverless:()=>jMt,setup:()=>dV,share:()=>XMt,start:()=>YMt,stop:()=>KMt,test:()=>zMt,uninstall:()=>JMt,url:()=>$Mt,version:()=>QMt});var yV=ae(()=>{"use strict";c();l1e();d1e();f1e();h1e();m1e();g1e();y1e();b1e();I1e();_1e();C1e();x1e();S1e();w1e();N1e();B1e();G1e();fV();F1e();L1e();Z1e();P1e();W1e();D1e();V1e()});var nUt={};XR(nUt,{default:()=>rUt});module.exports=YR(nUt);c();c();(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},t=new Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="7216365a-526e-445d-aa6b-0874234c008c",e._sentryDebugIdIdentifier="sentry-dbid-7216365a-526e-445d-aa6b-0874234c008c")}catch{}})();c();c();c();var Nb=xe(require("os")),Xs=xe(require("path")),kc=xe(require("fs")),em=xe(wI()),M1e=xe(zM()),U1e=xe(JM()),Ys=xe(rU()),j1e=xe(gU()),xo=xe(YU()),X1e=xe(JU()),Kp=xe(QU()),Y1e=xe(nj()),vV=xe(aj()),K1e=xe(SX()),bV=xe(DT()),IV=require("child_process"),_V=require("worker_threads"),z1e=xe(DX()),J1e=require("fs/promises"),tm=xe(cl());dr();_P();Zn();xh();c();Zn();dr();bs();c();var c1e=xe(cl()),mV=xe(require("path")),NA=xe(require("assert"));Zn();bs();dr();tF();fV();c();dr();sa();function hV(e){(async()=>{let{orgName:t,serviceName:r,instanceName:n}=e;try{await ze({method:"POST",body:e,endpoint:`/orgs/${t}/services/${r}/instances/${n}/metrics`})}catch(i){Pt.captureException(i),process.env.AMPT_DEBUG&&console.error(i)}})()}var ju=class extends Error{function=null;constructor(t,r){super(t),this.function=r}};var BA=class e{initialized=!1;cli;org;service;instance;data;code;isGitInstalled=!1;isCodeInstalled=!1;isSeedingEnabled=!1;isReseedingEnabled=!1;devModeStart=void 0;messenger;sandboxActive=!1;syncInProgress=!1;queuedFilePaths=new Set;constructor(t){this.cli=t}static async checkIfServiceExists(t){return!!await t.get().catch(()=>{})}async handleGitError(){return this.cli.logWarning(`"${this.cli.styles.bold("git")}" is not installed on this system.`),await this.cli.quit("Please install git and try again.")}async runSystemChecks(){let[t,r]=await Promise.all([this.cli.fs.detectGit(),this.cli.fs.detectVsCode()]);this.isGitInstalled=t,this.isCodeInstalled=r}getSandboxUrl(){if(this.instance)return this.instance.url}getDashboardUrl(){if(this.org&&this.service&&this.instance)return`${process.env.AMPT_DASHBOARD_URL_ROOT}/orgs/${this.org.orgName}/apps/${this.service.serviceName}/environments/${this.instance.instanceName}`}async boot(t){let r=new Set(t);r&&r.size>0?(r.has("analyze")&&await this.analyze(),r.has("detect")&&await this.detect(),r.has("connect")&&await this.connect(),r.has("dev")&&await this.dev()):(await this.analyze(),await this.detect(),await this.connect(),await this.dev())}async selectOrg(){var s,o,a;let t=this.cli,r=t.user;if(!r)return await this.cli.quit("You must be logged in to use this command.");if(await r.listOrgs(),((s=r.orgs)==null?void 0:s.length)===0)return await t.quit("You do not have access to any organizations.");let n=t.options.org;((o=r.orgs)==null?void 0:o.length)===1&&!n?n=r.orgs[0].orgName:((a=r.orgs)==null?void 0:a.length)>1&&!n&&(n=await t.selectOrg(r));let i=new Jt({orgName:n});i.update({orgName:n}),this.org=i}async authorize(){var n,i,s;let t=this.cli.user,r=this.cli.options.org||((i=(n=this.cli.fs.serviceFile)==null?void 0:n.ampt)==null?void 0:i.org);if(r&&!t.hasAccessToOrg(r)&&(this.cli.logWarning(`Org "${r}" has either been deleted, renamed, or you no longer have access to it.`),r=void 0),r?this.org=new Jt({orgName:r}):(fr({eventName:"ampt.dev.prompt",eventData:{promptName:"org"}}),await this.selectOrg(),await this.cli.fs.readServiceFileIfExists({orgName:r||((s=this.org)==null?void 0:s.orgName)})),!this.org)return await this.cli.quit("Ampt Organization is required");await this.org.isAuthorized()||(this.cli.logError(`You don't have access to the "${r}" org.`),await this.selectOrg()),this.cli._activeOrgName=this.org.orgName}async analyze(){this.cli.viewSpinner("Analyzing Project"),await dV(this.cli),await this.cli.checkForAmptPackageUpdates()}async hydrate(){if(!this.org){await this.cli.quit("Ampt Organization is required");return}if(!this.service){await this.cli.quit("Ampt App is required");return}if(!this.instance){await this.cli.quit("Ampt Environment is required");return}let[t,r,n,i]=await Promise.all([this.instance.get().catch(()=>{}),this.service.get().catch(()=>{}),this.org.fetch(),this.org.getRegions()]),s=this.cli.selectRegion({orgInfo:n,serviceInfo:r,instanceInfo:t,regions:i});if(!s){this.cli.logError("No region selected."),await this.cli.quit();return}this.instance.region=s.code}async detect(){var r,n,i;this.cli.viewSpinner("Starting");let t=this.cli.options.app||((n=(r=this.cli.fs.serviceFile)==null?void 0:r.ampt)==null?void 0:n.app);t||(fr({eventName:"ampt.dev.prompt",eventData:{promptName:"service"}}),t=await this.cli.promptServiceName(),this.cli.viewSpinner("Saving"),await this.cli.fs.writeServiceFile({serviceName:t})),this.cli._activeServiceName=t,this.service||(this.service=new Wt({org:this.org,serviceName:t})),this.instance||(this.instance=new or({org:this.org,service:this.service,instanceName:(i=this.cli.user)==null?void 0:i.generateSandboxName()})),await this.hydrate()}async connect(){if((0,NA.default)(this.org,"Org is required"),(0,NA.default)(this.service,"Service is required"),(0,NA.default)(this.instance,"Instance is required"),!this.cli.user)return await this.cli.quit("You must be logged in");let t=this.org.orgName,r=this.service.serviceName;if(this.cli.viewSpinner("Connecting to your personal sandbox environment..."),this.devModeStart=process.hrtime.bigint(),await this.cli.isAmptShellRunning({orgName:t,serviceName:r}))return this.cli.logError(`The Ampt shell for app "${r}" in org "${t}" is already running in another terminal.`),await this.cli.quit();await this.cli.writeAmptShellActivityFile({orgName:t,serviceName:r}),this.cli.bindService({orgName:t,serviceName:r}),this.cli.onQuit(async()=>{var d;(0,c1e.removeSync)(zf(t,r)),await fi.stop(this.cli,{hasQuit:!0,orgName:t,serviceName:r});let u=await this.cli.fs.readJsonFileIfExists(this.cli.fs.serviceFilePath),p=process.hrtime.bigint();(d=this.messenger)==null||d.close(),fr({eventName:"ampt.dev.ended",eventData:{source:this.cli.isGitPod?"gitpod":"local",timeInSeconds:this.devModeStart?Number(p-this.devModeStart)/1e9:0,dependencies:Object.keys((u==null?void 0:u.dependencies)||{}),appName:`${t}:${r}`}})}),this.code=new is({org:this.org,service:this.service,instance:this.instance,user:this.cli.user,fullSync:this.cli.options["full-sync"],cli:this.cli,verbose:this.cli.options.verbose}),this.data=new Vu({fs:this.cli.fs,org:this.org,service:this.service,instance:this.instance}),this.cli.session.setSentryContext({identifier:`${this.org.orgName}:${this.service.serviceName}:${this.instance.instanceName}`,service:this.service.serviceName,instance:this.instance.instanceName,org:this.org.orgName}),this.cli.viewSpinner("Syncing");let i=this.cli.viewSpinner.bind(this.cli),s=u=>i(`Syncing (${u})`),o=await this.code.sync(void 0,s);this.cli.updateLastSyncedAt(Date.now()),hV({...o,source:this.cli.isGitPod?"gitpod":"local",orgName:t,serviceName:this.service.serviceName,instanceName:this.instance.instanceName,appName:`${t}:${r}`,region:this.instance.region}),this.cli.viewSpinner("Connecting to real time logs");let[a]=await Promise.all([this.instance.connect({cli:this.cli}),this.cli.messenger.subscribe({userUid:this.cli.user.userId,orgName:t,appName:r,instanceName:this.instance.instanceName})]);this.messenger=a}async dev(t){var I;let{logDashboard:r=!1}=t||{},n=this.org,i=this.service,s=this.instance,o=this.code,a=n.orgName,u=i.serviceName,p=s.instanceName,d=this.cli.styles.purple(`@${a}`),h=this.cli.styles.blue(u),m=this.cli.styles.green(p),g=this.cli.styles.dim("/"),v=`Connected to ${this.cli.styles.bold(`${d}${g}${h}${g}${m}`)}`;if(this.cli.logSuccess(v),this.cli.logUrl(s.url),r){this.cli.logSpace(),this.cli.logInfo("View your app in the dashboard");let x=`${process.env.AMPT_DASHBOARD_URL_ROOT}/orgs/${a}/apps/${u}/environments/${p}`;this.cli.logUrl(x)}if(this.isReseedingEnabled&&this.cli.logSuccess("Enabled automatic data reseeding"),this.cli.viewInput(),this.cli.options.dev){let{url:x,region:_}=s,{credentials:A,env:E}=o;fi.start({credentials:A,env:E,url:x,cli:this.cli,fs:this.cli.fs,user:this.cli.user,scriptName:"dev",ifPresent:!1,orgName:a,serviceName:u,region:_}).catch(S=>{_e.error({err:S},"Error starting dev server"),this.cli.logError("Something went wrong starting the dev server.")})}fr({eventName:"ampt.dev.enabled",eventData:{dependencies:Object.keys(((I=this.cli.fs.serviceFile)==null?void 0:I.dependencies)||{}),appName:`${a}:${u}`}}),this.isSeedingEnabled&&await this.seed(),this.cli.fs.watch(o.workspaceRoot,this.onFileChange.bind(this)),this.sandboxActive=!0}async onFileChange(t){(async()=>{let r=this.org.orgName,n=this.service.serviceName,i=this.instance.instanceName;if(!this.code)return await this.cli.quit("Sync engine is not active");for(let p of t)this.queuedFilePaths.add(p);let s=this.queuedFilePaths,o=await fi.isRunning({orgName:r,serviceName:n}),a=this.cli.buildRunningInShell;if(this.cli.isCommandRunningInShell&&!o&&(_e.trace("waiting for command to finish"),await this.cli.commandRunningInShellPromise,_e.trace("command finished")),this.syncInProgress){_e.trace("sync in progress, skipping");return}this.syncInProgress=!0;let u;if(a)await this.cli.commandRunningInShellPromise,u=await this.code.sync();else for(;this.queuedFilePaths.size>0;){let p=this.queuedFilePaths;this.queuedFilePaths=new Set,this.isReseedingEnabled&&this.cli.fs.dataFilePath&&p.has(this.cli.fs.dataFilePath)&&(this.cli.viewSpinner("Seeding",{timer:!0}),await this.seed()),(!this.cli.isCommandRunningInShell||o)&&this.cli.spinInput(),_e.trace({size:p.size,queued:this.queuedFilePaths.size},"starting sync"),u=await this.code.sync(p),_e.trace({size:p.size,queued:this.queuedFilePaths.size},"sync complete")}hV({...u,source:this.cli.isGitPod?"gitpod":"local",orgName:r,serviceName:n,instanceName:i,appName:`${r}:${n}`,region:this.instance.region}),this.syncInProgress=!1,this.cli.updateLastSyncedAt(Date.now()),this.cli.isAnimationEnabled||this.cli.logSuccess("Successfully updated your code"),(!this.cli.isCommandRunningInShell||o)&&this.cli.stopSpinningInput(),this.cli.tutorial.inProgress&&await this.cli.tutorial.onSync(s)})().catch(r=>{_e.error({method:"sync-callback",err:r},"Error syncing code"),this.cli.logError("Something went wrong syncing your code. Please try again.")})}async seed(){var t;this.data&&(this.cli.viewSpinner("Seeding"),await this.data.import(),this.cli.logSuccess(`Seeded data from the ${(t=this.cli.styles)==null?void 0:t.bold(this.cli.fs.dataFileName)} file.`),this.cli.viewInput())}async setupApp(t){var p,d,h,m;let{name:r}=t||{},{org:n}=this,{fs:i}=this.cli;if(n||await this.authorize(),!n)return await this.cli.quit("Ampt Organization is required");let s=r||((d=(p=i.serviceFile)==null?void 0:p.ampt)==null?void 0:d.app)||this.cli.options.app,o=await this.cli.promptServiceName(s),a=new Wt({org:n,serviceName:o});if(await e.checkIfServiceExists(a)&&(this.cli.logWarning(`App ${(m=this.cli.styles)==null?void 0:m.purple((h=this.cli.styles)==null?void 0:h.bold(`"${o}"`))} already exists for this org.`),this.cli.logQuestion("Would you like to overwrite it?"),!await this.cli.confirm()))return this.setupApp({name:r});_e.info({serviceName:a.serviceName,orgName:n.orgName},"app init"),this.service=a}async assureServiceDir(){var i;let{fs:t}=this.cli;if(!this.service||!this.service.serviceName)throw new ju("Expected App to be defined","assureServiceDir");let r=!1;if(await t.isCwdEmpty()&&(r=await this.cli.confirm(!0,"Would you like to use the current directory?")),!r){if(t.dirExists(this.service.serviceName)){this.cli.logWarning(`Directory "./${this.service.serviceName}" already exists.`);let s=await this.cli.confirm(!1,"Would you like to overwrite it?"),o=await this.cli.confirm(!1,"Are you sure? This will delete all files in the directory.");if(s&&o)t.deleteServiceDir(this.service.serviceName),_e.debug(`Deleted directory ${this.service.serviceName}`);else return this.assureServiceDir()}t.createServiceDir(this.service.serviceName),this.cli.logSuccess(`Created directory ${this.cli.styles.bold(this.cli.styles.darkPurple(`./${this.service.serviceName}`))}`),await t.read({orgName:(i=this.org)==null?void 0:i.orgName}),_e.debug(`Created directory ${this.service.serviceName}`)}}async setupTemplate(){let{fs:t}=this.cli,{template:r}=this.cli.options;if(!this.org)throw new ju("Expected Org to be defined","setupTemplate");let n=r,[i,s]=await Promise.all([Hx(this.cli),this.org.validateLimits()]);if(_e.trace({templates:i.length,limitResult:s},"setupTemplate"),s.serviceExceeded)return this.cli.handleServiceLimitExceeded();if(s.instanceExceeded)return this.cli.handleInstanceLimitExceeded();if(!this.isGitInstalled)return await this.handleGitError();let o=i.find(a=>a.name===n);if(!o){this.cli.logWarning(`Template "${n}" not found.`),this.cli.logInfo("Please choose a template to generate.");let a=await this.cli.select(i);o=a,n=a.name}if(await this.setupApp({name:n}),await this.assureServiceDir(),!this.service)throw new ju("Expected App to be defined","setupTemplate");if(!t.serviceRoot)throw new ju("Expected serviceRoot to be defined","setupTemplate");await t.initService({orgName:this.org.orgName,serviceName:this.service.serviceName,template:o,existingProject:!1}),await t.installDependenciesIfExists({viewSpinner:this.cli.viewSpinner.bind(this.cli)})}async setup(){let{fs:t}=this.cli;if(this.org||await this.authorize(),!this.org)return await this.cli.quit("Ampt Organization is required");let[r,n]=await Promise.all([t.readJsonFileIfExists(mV.default.join(t.serviceRoot,"package.json")),t.isCwdEmpty()]);if(n&&await this.shouldStartTutorial())return await this.cli.tutorial.initTutorial();if(r&&!r.ampt){if(fr({eventName:"ampt.dev.prompt",eventData:{promptName:"migrateExistingApp"}}),this.cli.logInfo("This directory does not contain an Ampt project."),this.cli.logQuestion("Would you like to initialize it?"),await this.cli.confirm()){if(this.cli.viewSpinner("Migrating project to Ampt"),await this.setupApp({name:r.name||mV.default.basename(t.serviceRoot)}),!this.service||!this.service.serviceName)throw new ju("Expected App to be defined","setup");if(await t.initService({orgName:this.org.orgName,serviceName:this.service.serviceName,existingProject:!0}),this.cli.logInfo(`${this.cli.styles.bold(this.cli.styles.darkPurple(this.service.serviceName))} initialized`),await this.shouldStartTutorial())return await this.cli.tutorial.initTutorial();this.cli.viewSpinner("Installing Dependencies"),await t.installDependenciesIfExists({viewSpinner:this.cli.viewSpinner.bind(this.cli)});return}}else if(r)await t.initService({orgName:this.org.orgName,existingProject:!0});else{if(this.cli.logQuestion("Would you like to create a new app?"),!await this.cli.confirm())return await this.cli.quit("Stopped");this.cli.viewSpinner("Loading");let[s,o]=await Promise.all([Hx(this.cli),this.org.validateLimits()]);if(o.serviceExceeded)return this.cli.handleServiceLimitExceeded();if(o.instanceExceeded)return this.cli.handleInstanceLimitExceeded();if(!this.isGitInstalled)return await this.handleGitError();fr({eventName:"ampt.dev.prompt",eventData:{promptName:"template"}}),this.cli.logInfo("Choose a template to generate.");let a=await this.cli.select(s);if(await this.setupApp({name:a.name}),await this.assureServiceDir(),!this.service||!this.service.serviceName)throw new ju("Expected App to be defined","setup");if(this.cli.viewSpinner("Generating template..."),await t.initService({orgName:this.org.orgName,serviceName:this.service.serviceName,template:a,existingProject:!1}),t.dataFile&&(this.isSeedingEnabled=!0),this.cli._clearScreen(),this.cli.logSuccess(`${this.cli.styles.bold(this.service.serviceName)} initialized`),await this.shouldStartTutorial())return await this.cli.tutorial.initTutorial();await t.installDependenciesIfExists({viewSpinner:this.cli.viewSpinner.bind(this.cli)})}}async shouldStartTutorial(){var s,o;let{cli:t}=this,{session:r}=t,{showTutorial:n,allowDismiss:i}=r.shouldPromptTutorial();if(n){let a=["Yes","Skip for now"];i&&a.push("Don't show again"),t.logQuestion("Would you like to start the tutorial?");let u=await t.select(a);if(u==="Yes")return this.isSeedingEnabled=!0,!0;if(u=="Don't show again"){t.logInfo(`You can always run ${(s=t.styles)==null?void 0:s.bold("ampt tutorial")} to go through the tutorial.`),t.viewSpinner("Saving Preferences");try{await((o=t.user)==null?void 0:o.updatePreferences({showTutorial:!1}))}catch{t.logError("Failed to save preferences")}}}return!1}async init(){let{cli:t}=this,r=t.user;if(!r)return await t.quit("You must be logged in to use this command.");if(!r.orgs||!r.orgs.length)return await t.quit("You do not have access to any organizations.");await t.fs.read();try{await Promise.all([this.authorize(),this.runSystemChecks()]),this.isSeedingEnabled=t.options.seed||t.options.s||!1,this.isReseedingEnabled=t.options.reseed||t.options.rs||!1;let n=t.options.tutorial??!1,i=t.options.template??!1;if(_e.debug({tutorialPassed:n,templatePassed:i},"Project.init"),i&&await this.setupTemplate(),n)return await t.tutorial.initTutorial();await this.setup(),this.initialized=!0}catch(n){return await t.quit(n.message)}}};var H1e=(yV(),YR(gV));var Qh=class extends Error{function=null;constructor(t,r){super(t),this.function=r}},FA=class e{static tutorialGitUrl="https://github.com/ampt-templates/tutorial";static exitCmd="end";static iterationCmds=["skip","next","done"];static fullTutorialSteps=["editor","sandbox","postSandbox","importData","postImportData","staticAssets","postStaticAssets","runningScripts","postRunningScripts","deploy","postDeploy","dashboard"];static basicTutorialSteps=["editor","sandbox","postSandbox","staticAssets","build","postBuild","importData","postImportData","runningScripts","deploy","dashboard"];welcomeMessage=["Welcome to Ampt!","This Ampt CLI tutorial allows you to exit anytime with 'end' and skip steps using 'skip'."];cli;name;type="basic";inProgress=!1;tutorialModeStart=void 0;nextCommand;activeStepIndex=null;stepOrder=e.fullTutorialSteps;steps={editor:async()=>{let t="To begin, let's open the project in a code editor.";return{title:"Open the project in an editor",pre:this.cli.project.isCodeInstalled?[t,'Run `code .` in the terminal to open the project in Visual Studio Code or type "done" to continue']:[t,'Open the project in your favorite code editor and type "done" to continue'],command:"code"}},sandbox:async()=>{var r,n;let t=["The URL above is your developer sandbox. Code changes are synced here in real-time","Your sandbox goes offline when you disconnect from the CLI","Open the URL in your favorite browser to see your app in action"];return this.type==="full"?t.push('Try making a change to "index.tsx", refresh, and see the changes in real-time!'):(t.push("Try making a change to the code, refresh, and see the changes in real-time!"),(n=(r=this.cli.fs.serviceFile)==null?void 0:r.scripts)!=null&&n["ampt:dev"]&&t.push(`Note, if you're building a frontend app, you can use the "dev" command to start the local development server`)),{title:"The Developer Sandbox",pre:t,event:"sync"}},postSandbox:async()=>({title:"Sandbox Synced",pre:["Sandbox synced!","Any logs or errors from your sandbox are displayed here",'The "main" field in your package.json is the entry point to your app, and is the first file that is executed when your app starts.','By default, this is "index.js" or "index.ts" in the root of your project.'],postAction:!0}),staticAssets:async()=>{let t=["The `static` directory is automatically synced and served from your Ampt environment","This is useful for serving images, fonts, and other static assets"];this.type==="full"?t.push('Try moving "test.html" into the "static" directory and see it update in the sandbox'):t.push("Add a file to your static directory, or hit enter to skip");let r=this.type==="full"?"sync":void 0;return{title:"Static Assets",pre:t,event:r}},postStaticAssets:async()=>{let t=this.cli.project.getSandboxUrl();return{postAction:!0,title:"Static Assets Synced",pre:["Static assets synced!",t?`Now, try navigating to ${t}/test.html to see the changes`:"Try navigating to the /test.html route to see the changes"]}},importData:async()=>({title:"Importing Data to @ampt/data",pre:['You can import data into your Ampt environment using the "import" command',"This command is useful for seeding your database with data for development and testing","Try running the import command now by typing `import` into the terminal"],command:"import"}),postImportData:async()=>({title:"Data Imported!",pre:["Data imported!",this.type==="full"?"Now, try refreshing the sandbox to see the changes in the environment":"Data seeded from your data file is now available in your environment"],postAction:!0}),runningScripts:async()=>{let t=["The Ampt shell allows you to run scripts within the context of your app","For scripts within your package.json, prefix them with 'ampt', e.g. 'ampt:test'"];this.type==="full"&&t.push('Try running the test script by typing "run test" into the terminal'),this.type==="basic"&&(t.push('To run a script, just type "run" followed by the script name, e.g. "run test" for "ampt:test"'),t.push('Ampt automatically handles JS or TS files, just provide the path after the "run" command, e.g. "run scripts/list-todos.ts"'));let r=this.type==="full"?"run":void 0,n=this.type==="full"?"test":void 0;return{title:"Running scripts within the Ampt context",pre:t,command:r,runArg:n}},postRunningScripts:()=>Promise.resolve({title:"Scripts Run!",pre:["Nice, you just ran the test script!",'Ampt also automatically handles JS or TS files, just provide the path after the "run" command, e.g. "run scripts/list-todos.ts"'],postAction:!0}),deploy:()=>Promise.resolve({title:"Deploying to a permanent environment",pre:["To deploy your current sandbox, use the 'deploy prod' command to create a new stage environment named 'prod'","Note, this can take a second, as Ampt provisions an entirely new environment for you in a separate AWS account"],post:["Stage deployed!","The URL above is a stage environment, and is always available."],command:"deploy"}),postDeploy:()=>Promise.resolve({title:"Stage Deployed!",pre:["Stage deployed!","The URL above is a stage environment, and is always available",'Updates to the stage environment are made using the "deploy" command, or automatically using Git CI/CD.'],postAction:!0}),dashboard:()=>Promise.resolve({title:"The Ampt Dashboard",pre:["The dashboard is where you can manage your Ampt environments, view logs, data, and more",'Try opening the your dashboard with the "dashboard" command'],command:"dashboard"}),build:()=>Promise.resolve({title:"Building the app",pre:['For projects with a build step, use "build" to execute the "ampt:build" script in package.json',"Build output is automatically synced and is available at your sandbox url"],command:"run",runArg:"build"}),postBuild:()=>Promise.resolve({title:"App built!",pre:["Depending on your project, you might need to configure its output to be served from the 'static' directory","For more details on your specific framework, check out the Ampt documentation at https://getampt.com/docs"],postAction:!0})};constructor(t){if(!t.project)throw new Qh("Project should be set before Tutorial is initialized","constructor");this.cli=t}isExitCmd(t){return t===e.exitCmd}isIterationCmd(t){return e.iterationCmds.includes(t)}async iterateStep(t){let{skip:r=!1}=t||{skip:!1};if(this.inProgress&&this.activeStepIndex!==null){let n=this.activeStepIndex+1;if(this.activeStepIndex===0&&!this.cli.project.sandboxActive&&(this.cli.logSpace(),await this.cli.project.dev({logDashboard:!1})),this.reportAnalytics({exit:!1,step:this.stepOrder[this.activeStepIndex],event:"ampt.tutorial.step_completed"}),n<this.stepOrder.length){this.activeStepIndex=n;let i=await this.steps[this.stepOrder[this.activeStepIndex]]();r&&i.postAction&&n+1<this.stepOrder.length&&(this.activeStepIndex=n+1,i=await this.steps[this.stepOrder[this.activeStepIndex]]()),this.nextCommand=i.command||void 0,this.logStep({step:i}),!i.command&&!i.event&&!i.postAction&&await this.iterateStep()}else await this.complete()}}async onSync(t){if(this.inProgress&&this.activeStepIndex!==null){let r=this.stepOrder[this.activeStepIndex];t.size>0&&(r==="sandbox"||r==="staticAssets"&&Array.from(t).some(n=>n.includes("static")))&&await this.iterateStep()}}async handle(t){var r;if(this.inProgress&&this.activeStepIndex!==null){let n=this.stepOrder[this.activeStepIndex],i=await this.steps[n]();if(this.isExitCmd(t))return this.cli.project.sandboxActive||await this.cli.project.dev(),await this.complete({exit:!0});if(i.postAction&&(this.cli._staticViewInputMsg=void 0),this.isIterationCmd(t))return this.reportAnalytics({exit:!1,step:this.stepOrder[this.activeStepIndex]}),await this.iterateStep({skip:!0});if(i.command==="run"&&t==="run"&&(!this.cli.args[0]||i.runArg&&i.runArg!==this.cli.args[0])){this.cli.logWarning(`Invalid command: "${this.cli.styles.bold(this.cli.styles.red(t))}" - expected "${i.runArg}"`);return}else if(i.command&&t!==i.command){let s=this.cli.styles.purple(n==="build"?"build":i.command);this.cli.logWarning(`Invalid command: "${this.cli.styles.bold(this.cli.styles.red(t))}" - expected "${this.cli.styles.bold(s)}"`);return}else{if(i.command==="deploy"&&t==="deploy"&&!((r=this.cli.names)!=null&&r.instanceName)){this.cli.logWarning('You must provide a stage name to deploy to. Example: "deploy prod"');return}if(n==="editor"&&t==="code")await H1e.bash(this.cli);else{let s=H1e[t];if(t&&i.event==="sync"){this.cli.logWarning("Waiting for changes to sync to the sandbox...");return}if(!s){this.cli.logError(`Command "${t}" not found - expected "${i.command}"`);return}this.cli.logSpace(),await s(this.cli)}try{return this.cli.viewInput(),this.iterateStep()}catch(s){throw new Qh(s.message,"handle")}}}}async initTutorial(){var i,s,o,a,u,p,d,h;if(!this.cli.user)return await this.cli.quit("You must be logged in to start the Ampt tutorial");if(!this.cli.project.org)return await this.cli.quit("Expected Ampt organization to start the Ampt tutorial");this.name=`${(i=this.cli.user)==null?void 0:i.username}-ampt-tutorial`,this.inProgress=!0,this.tutorialModeStart=process.hrtime.bigint(),this.type=this.cli.fs.serviceFile?"basic":"full",_e.debug({type:this.type,name:this.name},"initTutorial");let t=this.cli.project.org;switch(this.type){case"full":{if(!await this.cli.fs.detectGit())return await this.cli.quit("Git is required to start the Ampt tutorial");let m=async()=>{this.name=await this.cli.promptServiceName(this.name);let v=new Wt({org:this.cli.project.org,serviceName:this.name});if(await v.get().catch(()=>{}))return this.cli.logWarning(`App ${this.cli.styles.bold(this.cli.styles.purple(this.name))} already exists in ${this.cli.styles.bold(this.cli.styles.darkPurple(t.orgName))}`),await this.cli.confirm(!0,"Would you like to overwrite it?")?v:m();let x=await this.cli.fs.isCwdEmpty(),_=!1;if(x&&(_=await this.cli.confirm(!0,"Would you like to start the tutorial in the current directory?")),!_){if(this.cli.fs.dirExists(this.name))if(this.cli.logWarning(`Directory "./${this.name}" already exists.`),await this.cli.confirm(!0,"Would you like to overwrite it?"))this.cli.logInfo(`Overwriting directory: ${this.cli.styles.bold(this.name)}`),this.cli.fs.deleteServiceDir(this.name);else return m();this.cli.fs.createServiceDir(this.name),this.cli.logInfo(`Created directory: ${this.cli.styles.bold(this.name)}`)}return v};this.cli.project.service=await m();let g=(s=this.cli.user)==null?void 0:s.generateSandboxName();this.cli.project.instance=new or({org:t,service:this.cli.project.service,instanceName:g,cli:this.cli}),this.cli.viewSpinner("Cloning @ampt-templates/tutorial"),await this.cli.fs.cloneGitRepo({repoUrl:e.tutorialGitUrl}),await this.cli.fs.read({orgName:t.orgName,appName:this.name});break}case"basic":{if((a=(o=this.cli.fs.serviceFile)==null?void 0:o.ampt)!=null&&a.app){this.name=(p=(u=this.cli.fs.serviceFile)==null?void 0:u.ampt)==null?void 0:p.app,await this.cli.fs.read({orgName:t.orgName,appName:this.name}),this.stepOrder=e.basicTutorialSteps;let m=!!this.cli.fs.dataFile,g=(h=(d=this.cli.fs.serviceFile)==null?void 0:d.scripts)==null?void 0:h["ampt:build"],v=this.stepOrder.reduce((I,x)=>(x==="importData"||x==="postImportData")&&!m||(x==="build"||x==="postBuild")&&!g?I:[...I,x],[]);this.stepOrder=v}else return await this.cli.quit("Expected an Ampt app to start the Ampt tutorial");break}default:return await this.cli.quit("Expected a valid Ampt tutorial type")}await this.cli.fs.installDependenciesIfExists({viewSpinner:this.cli.viewSpinner.bind(this.cli)}),await this.cli.project.boot(this.type==="basic"?["analyze","detect","connect"]:["connect"]),this.type==="full"&&this.cli.logSpace(),this.cli.logGroup(this.welcomeMessage),this.activeStepIndex=0;let r=this.stepOrder[this.activeStepIndex],n=await this.steps[r]();this.reportAnalytics({exit:!1,event:"ampt.tutorial.started",step:r}),this.logStep({step:n})}logStep(t){let{step:r}=t;this.cli.logSpace(),r.postAction?(this.cli.logGroup([r.pre].flat(),!0),this.cli._staticViewInputMsg='Type "next" or hit enter to continue',this.cli.viewInput()):this.cli.logGroup([r.title,r.pre].flat(),!0)}setType(t){this.type=t}getDurationMins(){let t=process.hrtime.bigint()-this.tutorialModeStart;return Math.round(Number(t)/6e10)}async complete(t){var i,s;let{exit:r=!1}=t||{exit:!1},n=this.stepOrder[this.activeStepIndex];this.reportAnalytics({exit:r,step:r?n:void 0}),this.inProgress=!1,this.activeStepIndex=null,await((s=(i=this.cli)==null?void 0:i.user)==null?void 0:s.updatePreferences({showTutorial:!1})),this.completeMsg()}reportAnalytics(t){var s,o,a;let{event:r,step:n,exit:i=!1}=t;fr({eventName:r||(i?"ampt.tutorial.skipped":"ampt.tutorial.completed"),eventData:{type:this.type,step:n,durationMinutes:r?void 0:this.getDurationMins(),userName:(s=this.cli.user)==null?void 0:s.username,orgName:(o=this.cli.project.org)==null?void 0:o.orgName,serviceName:(a=this.cli.project.service)==null?void 0:a.serviceName}})}completeMsg(){this.cli.logGroup([this.cli.styles.bold("We hope you enjoy using Ampt!"),"If you have any questions or feedback, join our discord: https://getampt.com/discord","To read up on everything Ampt, check out our docs: https://getampt.com/docs",`You can always re-run this tutorial with the command "${this.cli.styles.bold("tutorial")}"`,`You can clear this output with the command "${this.cli.styles.bold("clear")}"`,"Happy coding! \u{1F680}"])}};em.default.extend(M1e.default);em.default.extend(U1e.default);em.default.updateLocale("en",{relativeTime:{future:"in %s",past:"%s ago",s:(e,t,r,n)=>e<=10?`${e} seconds`:e<=30?"several seconds":e<60?"less than a minute":`${e} seconds`,m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}});var Tb=(yV(),YR(gV)),{version:eUt}=Hf(),tUt={dim:xo.default.dim,darkPurple:xo.default.hex("#B367FF"),purple:xo.default.hex("#F952FF"),yellow:xo.default.hex("#FFC700"),blue:xo.default.hex("#727aff"),red:xo.default.rgb(255,99,99),grey:xo.default.hex("#324f59"),pastel:xo.default.hex("#dbd8ca"),bold:xo.default.bold,green:xo.default.hex("#22b9b7")},LA=class e{static defaultSpinnerFrames=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];session;messenger;version=eUt;installedGlobally=z1e.default;os=process.platform;user;fs;tutorial;project;showLogo=!0;fromClone=!1;inputValue;timer;isShellActive;isInteractive;isDevServerActive;isAnimationEnabled=!1;isCommandRunningInShell;buildRunningInShell;commandRunningInShellPromise;styles;icons;argv;startupOptions;options;args;names;command;orgName;org;service;serviceName;_exitCode=0;isGitPod=!1;isCodeSpaces=!1;isWebIde=!1;isCi=!1;isBeta=!1;_runtimeUpdateInProgress=!1;_lastSyncedAt;_lastSyncedAtInterval;_ciGroupActive=null;_lastSpinnerStep;_staticViewInputMsg;_activeOrgName;_activeServiceName;_allowedInputCharacter;_isLoggedTopPadding;_commandsHistory;_viewType;_viewMessage;_spinnerMessage;_spinnerStep;_isPromptActive;_promptResponse;_timerInterval;_spinnerInterval;_inputSpinnerInterval;_inputSpinnerStartedAt;_inputSpinnerStoppedAt;_tipsInterval;_tipsFrequency;_tipsCollectionIndex;_spinnerFrequency;_spinnerFrames;_spinnerFrameIndex;_selectItems;_selectedItemIndex;_selectedItem;_onQuit;_quitting;_suggestions;_commandsHistoryIndex;_devTipsCollection=["type `dev` to start running the dev server","type `stop` to stop a running dev server"];_cloudScriptsCollection=["add a `ampt:dev` script to package.json to run code within the Ampt context"];_tipsCollection=[];_xdgOpenInstalled=null;constructor(t){process.title="Ampt CLI",this.session=t,this.session.loadAmptConfig(),this.messenger=new sA({cli:this}),this.messenger.on("offline",(0,bV.default)(()=>{this.logError("Event Messenger offline")},1e3,!0)),this.messenger.on("online",(0,bV.default)(()=>{this.logInfo("Event Messenger online")},1e3,!0)),this.inputValue="",this.startupOptions={},this.options={},this.args=[],this.argv=[],this.command=void 0,this.names=void 0,this.icons={},this.commandRunningInShellPromise=null,this._allowedInputCharacter=/^[a-zA-Z0-9 ~:!@#$%^&*()-_=+.<>{}[\]"'/]+$/,this._viewType=null,this._viewMessage=void 0,this._spinnerMessage=null,this._spinnerStep=null,this._isPromptActive=void 0,this._promptResponse=void 0,this._commandsHistory=[],this._spinnerFrequency=100,this._spinnerFrames=e.defaultSpinnerFrames,this._spinnerFrameIndex=0,this.showLogo=!process.env.IS_CHILD_PROCESS&&!this.isGitPod&&this._canRenderBolt(),this.styles=tUt,this._startLastSyncedAtInterval(),this._initIcons(),this._initSuggestions(),process.env.AMPT_IS_GITPOD==="true"&&(this.isGitPod=!0,this.isWebIde=!0),process.env.AMPT_IS_CODESPACES==="true"&&(this.isCodeSpaces=!0,this.isWebIde=!0),this.isWebIde&&(this.isAnimationEnabled=!1),this.isCi=this._detectCiEnvironment(),this.isBeta=this.version.includes("beta"),this.isInteractive=process.stdin.isTTY,this.fs=new xw({session:this.session}),this.project=new BA(this),this.tutorial=new FA(this)}async login(){return new wa}setExitCode(t){this._exitCode=t}setRuntimeUpdateInProgress(t){this._runtimeUpdateInProgress=t}async start(t){let{_:r,...n}=(0,vV.default)(process.argv);if(this.startupOptions=n,this.fs.verbose=this.startupOptions.verbose,this.fromClone=(t==null?void 0:t.fromClone)||!1,this.os==="linux"&&(this._xdgOpenInstalled=await this.fs.detectXdgOpen()),r[2]!=="clone"&&process.platform!=="win32")try{_e.enable()}catch(i){console.error(i)}return this.run()}async run(t){try{if(this._parseCommand(t),this.tutorial.inProgress)return await this.tutorial.handle(this.command);if(this.command==="sandbox")return await Tb.sandbox(this);if(this.command==="git"||this.command==="code")return await Tb.bash(this);this.isShellActive||(this._hideCursor(),this.command!=="run"&&(this._logLogo(),this.viewSpinner("Loading")),(this.command==="start"||this.command==="tutorial")&&await this._autoUpdate()),this._watchKeyboard();let r=["clone"],n=["promote","test"];if((this.command==="start"||this.command==="tutorial")&&(this.isShellActive=!0),this.isShellActive&&r.includes(this.command))throw new Ap(`Command "${this.command}" is currently not supported in the shell`);if(n.includes(this.command))throw new Ap(`Command "${this.command}" is not available.`);if(!Tb[this.command]&&this.command!=="tutorial")throw new Ap(`Command "${this.command}" is not a valid command`);if(!this.user&&(this.user=await wa.init(),!this.user.isLoggedIn())){this.logInfo("You must login to proceeed.");try{await this.user.performLogin(this)}catch(i){if(i.name==="UserDisabledError")return this.logError(i.message||"Your account has been disabled. Please contact support."),this._stop(0);throw i}}await this.messenger.connect(),this.command==="tutorial"&&(this.command="start",this.options.tutorial=!0),this.command==="dashboard"&&(this.command="open"),await Tb[this.command](this),this.options={}}catch(r){if(r instanceof Qh||r instanceof Ap)this.logError(r.message);else{if(r instanceof _h)return this.logError(r.message),this._stop(this._exitCode);if(r.name==="InstancesLimitError"){let n=["share","deploy"].includes(this.command);return this.handleInstanceLimitExceeded({isDeploying:n})}else return r.name==="ServicesLimitError"?this.handleServiceLimitExceeded():(this.session.captureException(r),this.logError(`Something went wrong - please contact support and provide ${this.session.getSessionId()} as a reference ID`),await this.session.flushSentry(),this._stop(1))}}return this.isShellActive?this.viewInput():this._stop(this._exitCode)}handleServiceLimitExceeded(){let t="You have reached your app limit. Please upgrade your plan or delete an app.";return this.quit(t)}handleInstanceLimitExceeded(t){let{isDeploying:r=!1}=t||{},n="You have reached your environment limit. Please upgrade your plan or delete an environment.";if(!r)return this.quit(n);this.logWarning("Deployment failed"),this.logError(n),this.viewInput()}setProject(t){this.project=t}viewInput(t=this._formatLastSyncedAt()){let r=this._runtimeUpdateInProgress?"Runtime update in progress...":t;this._timerInterval=clearInterval(this._timerInterval),this._spinnerInterval=clearInterval(this._spinnerInterval),this._startLastSyncedAtInterval(),this._switchView({viewType:"input",viewMessage:r})}spinInput(){if(this._viewType!=="input"){_e.error({_viewType:this._viewType},"wrong viewType in spinInput");return}this.isAnimationEnabled&&(this._inputSpinnerStartedAt=Date.now(),clearInterval(this._inputSpinnerInterval),this._inputSpinnerInterval=setInterval(()=>this.updateInputSpinner(),this._spinnerFrequency).unref())}viewSpinner(t="Loading",r){let{timer:n=!1}=r||{};if(!this.isInteractive){console.log(t);return}if(!this.isAnimationEnabled){this._switchView({viewType:"spinner",viewMessage:t});return}this._spinnerMessage=t,this._spinnerStep="",clearInterval(this._timerInterval),clearInterval(this._spinnerInterval),clearInterval(this._inputSpinnerInterval),this._timerInterval=void 0,this._spinnerInterval=void 0,this._inputSpinnerInterval=void 0,n&&(this.timer=0,this._timerInterval=setInterval(()=>this.timer=+this.timer+1,1e3).unref()),this._spinnerInterval=setInterval(()=>this._updateSpinner((this._spinnerMessage||"Loading")+(this._spinnerStep?` (${this._spinnerStep})`:""),{timer:n}),this._spinnerFrequency).unref()}updateLastSyncedAt(t){this._lastSyncedAt=t}updateInputSpinner(){this._spinnerFrameIndex=++this._spinnerFrameIndex%this._spinnerFrames.length,this._switchView({viewType:"input"})}stopSpinningInput(){this._inputSpinnerInterval&&(clearInterval(this._inputSpinnerInterval),this._inputSpinnerStoppedAt=Date.now(),this._inputSpinnerInterval=void 0),this.viewInput()}updateSpinnerStep(t){if(!process.stdin.isTTY){process.env.GITHUB_ACTIONS?this._handleGitHubActionsGrouping(t):console.log(t);return}this._spinnerStep=t}_handleGitHubActionsGrouping(t){let r={syncing:"Syncing Code",archiving:"Syncing Code",uploading:"Syncing Code","finishing upload":"Syncing Code",processing:"Syncing Code","installing dependencies":"Building",building:"Building",optimizing:"Building",packaging:"Deploying","building source code archive":"Deploying",deploying:"Deploying"},n=null;for(let[i,s]of Object.entries(r))if(t.toLowerCase().includes(i)){n=s;break}n&&n!==this._ciGroupActive&&(this._ciGroupActive&&console.log("::endgroup::"),this._ciGroupActive=n,console.log(`::group::${n}`)),console.log(t),this._lastSpinnerStep=t}_closeGitHubActionsGroup(){process.env.GITHUB_ACTIONS&&this._ciGroupActive&&(console.log("::endgroup::"),this._ciGroupActive=null)}pause(){this._clearIntervals(),this._switchView({viewType:"pause"}),this._eraseCursorLineAndBelow()}async prompt(t,r={}){for(this._isPromptActive=!0,r.default&&(this.inputValue=r.default),this.viewInput(t);!this._promptResponse;)await xu(50);let n=this._promptResponse;return this.logInfo(`You've entered ${this.styles.bold(n)}.`),this._promptResponse=null,this._isPromptActive=!1,n}async promptServiceName(t=null){let r=await this.prompt("Enter a name for your app",{default:t});return r.match(/^[a-z0-9-]+$/)?r:(this.logError("App name must consist only of lowercase characters and hyphens. Please try again."),await this.promptServiceName())}async confirm(t=!1,r){r&&this.logQuestion(r);let n=["no","yes"],i=await this.select(t?n.reverse():n);return i==="yes"}async select(t=[],r=0){if(clearInterval(this._timerInterval),clearInterval(this._spinnerInterval),clearInterval(this._inputSpinnerInterval),this._timerInterval=void 0,this._spinnerInterval=void 0,this._inputSpinnerInterval=void 0,this._selectItems=t,this._selectedItemIndex=r,this._switchView({viewType:"select"}),this._selectItems.length===1)return this._selectedItem=this._selectItems[0],this._selectedItem;for(;!this._selectedItem;)await xu(50);let n=this._selectedItem;return typeof n=="object"?this.logInfo(`You've selected ${this.styles.bold(n.title)}.`):this.logInfo(`You've selected ${this.styles.bold(n)}.`),this._selectedItem=null,this._selectedItemIndex=null,this._selectItems=[],n}async selectOrg(t,r){this.viewSpinner("Loading");let n,i=(t.orgs||[]).map(s=>s.orgName);return i.length>1?(this.logInfo(r||"Please select an organization."),n=await this.select(i)):n=i[0],n}async selectService(t,r){let n;this.viewSpinner("Loading");let i=(await t.listServicesWithInstances()).map(s=>s.serviceName);return _e.debug({servicesList:i},"select service"),i.length>1?(this.logInfo(r||"Please select a service."),n=await this.select(i)):n=i[0],n}async selectInstance({service:t,instanceType:r,instanceName:n,message:i}){let o=(await(t==null?void 0:t.listInstances().catch(()=>[]))||[]).filter(p=>!r||p.instanceType===r).map(p=>({instanceName:p.instanceName,region:p.region,displayRegion:p.region||"",display:`${p.instanceName} (${p.region})`}));if(n)return o.find(p=>p.instanceName===n)||{instanceName:n,isNewInstance:!0};if(o.length===0)return{instanceName:void 0};if(o.length===1)return{instanceName:o[0].instanceName,isNewInstance:!1};this.logInfo(i||"Please select a stage.");let a=await this.select(o.map(p=>p.display));return{instanceName:o.find(p=>p.display===a).instanceName,isNewInstance:!1}}logSuccess(t,r=0){this._closeGitHubActionsGroup(),this.log(`${this.icons.tick} ${t}`,r)}logError(t,r=0){this._closeGitHubActionsGroup(),this.log(`${this.icons.cross} ${this.styles.bold(this.styles.red(t))}`,r)}logCancelled(){this.logError("Cancelled")}logInfo(t,r=0){this.log(`${this.icons.info} ${t}`,r)}logWarning(t,r=0){this.log(`${this.icons.warning} ${t}`,r)}logQuestion(t,r=0){this.log(`${this.icons.question} ${t}`,r)}logGroup(t,r=!0){t.forEach((n,i)=>{let o=r&&i===0?`${this.icons.arrow} ${this.styles.bold(n)}`:` ${this.icons.dot} ${n}`;this.log(o,i>0?2:0)})}logUrl(t,r=0){this.log(`${this.icons.arrow} ${t}`,r)}logTime(t,r=0){this.log(`${this.styles.dim(`${new Date(Date.now()).toLocaleTimeString()} ${this.icons.line}`)} ${t}`,r)}log(t="",r=0){this._ensureTopPadding(),this._eraseCursorLineAndBelow(),this._log(`${" ".repeat(r)}${t}
291
+ ${s}`)}}});var $Mt,D1e=ae(()=>{"use strict";c();Zn();$Mt=async e=>{e.viewSpinner("Loading");let t=e.fs;if(await t.read(),!t.serviceFile)throw new Error("You must be inside an Ampt app directory to run this command.");let{user:r}=e,n=e.options.org||t.serviceFile.ampt.org,i=e.options.app||t.serviceFile.ampt.app,s=e.args[0]||r.username;n||(n=await e.selectOrg(r)),e.viewSpinner("Loading");let o=new Jt({orgName:n});await o.isAuthorized()||(e.logError(`You don't have access to the "${n}" org.`),n=await e.selectOrg(r)),o.update({orgName:n}),e.viewSpinner("Loading");let a=new Wt({org:o,serviceName:i}),u=new or({org:o,service:a,instanceName:s});await u.get(),e.logUrl(u.url)}});var q1e,QMt,V1e=ae(()=>{"use strict";c();q1e=xe(Hf()),QMt=async e=>{e.log(`v${q1e.version}`)}});var gV={};XR(gV,{bash:()=>TMt,clone:()=>NMt,dashboard:()=>BMt,delete:()=>kMt,deploy:()=>OMt,docs:()=>GMt,export:()=>FMt,help:()=>LMt,import:()=>ZMt,install:()=>PMt,login:()=>WMt,logout:()=>DMt,open:()=>qMt,promote:()=>VMt,run:()=>MMt,sandbox:()=>UMt,serverless:()=>jMt,setup:()=>dV,share:()=>XMt,start:()=>YMt,stop:()=>KMt,test:()=>zMt,uninstall:()=>JMt,url:()=>$Mt,version:()=>QMt});var yV=ae(()=>{"use strict";c();l1e();d1e();f1e();h1e();m1e();g1e();y1e();b1e();I1e();_1e();C1e();x1e();S1e();w1e();N1e();B1e();G1e();fV();F1e();L1e();Z1e();P1e();W1e();D1e();V1e()});var nUt={};XR(nUt,{default:()=>rUt});module.exports=YR(nUt);c();c();(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},t=new Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="0983f948-fd9a-4875-ad7e-2336678f5f9c",e._sentryDebugIdIdentifier="sentry-dbid-0983f948-fd9a-4875-ad7e-2336678f5f9c")}catch{}})();c();c();c();var Nb=xe(require("os")),Xs=xe(require("path")),kc=xe(require("fs")),em=xe(wI()),M1e=xe(zM()),U1e=xe(JM()),Ys=xe(rU()),j1e=xe(gU()),xo=xe(YU()),X1e=xe(JU()),Kp=xe(QU()),Y1e=xe(nj()),vV=xe(aj()),K1e=xe(SX()),bV=xe(DT()),IV=require("child_process"),_V=require("worker_threads"),z1e=xe(DX()),J1e=require("fs/promises"),tm=xe(cl());dr();_P();Zn();xh();c();Zn();dr();bs();c();var c1e=xe(cl()),mV=xe(require("path")),NA=xe(require("assert"));Zn();bs();dr();tF();fV();c();dr();sa();function hV(e){(async()=>{let{orgName:t,serviceName:r,instanceName:n}=e;try{await ze({method:"POST",body:e,endpoint:`/orgs/${t}/services/${r}/instances/${n}/metrics`})}catch(i){Pt.captureException(i),process.env.AMPT_DEBUG&&console.error(i)}})()}var ju=class extends Error{function=null;constructor(t,r){super(t),this.function=r}};var BA=class e{initialized=!1;cli;org;service;instance;data;code;isGitInstalled=!1;isCodeInstalled=!1;isSeedingEnabled=!1;isReseedingEnabled=!1;devModeStart=void 0;messenger;sandboxActive=!1;syncInProgress=!1;queuedFilePaths=new Set;constructor(t){this.cli=t}static async checkIfServiceExists(t){return!!await t.get().catch(()=>{})}async handleGitError(){return this.cli.logWarning(`"${this.cli.styles.bold("git")}" is not installed on this system.`),await this.cli.quit("Please install git and try again.")}async runSystemChecks(){let[t,r]=await Promise.all([this.cli.fs.detectGit(),this.cli.fs.detectVsCode()]);this.isGitInstalled=t,this.isCodeInstalled=r}getSandboxUrl(){if(this.instance)return this.instance.url}getDashboardUrl(){if(this.org&&this.service&&this.instance)return`${process.env.AMPT_DASHBOARD_URL_ROOT}/orgs/${this.org.orgName}/apps/${this.service.serviceName}/environments/${this.instance.instanceName}`}async boot(t){let r=new Set(t);r&&r.size>0?(r.has("analyze")&&await this.analyze(),r.has("detect")&&await this.detect(),r.has("connect")&&await this.connect(),r.has("dev")&&await this.dev()):(await this.analyze(),await this.detect(),await this.connect(),await this.dev())}async selectOrg(){var s,o,a;let t=this.cli,r=t.user;if(!r)return await this.cli.quit("You must be logged in to use this command.");if(await r.listOrgs(),((s=r.orgs)==null?void 0:s.length)===0)return await t.quit("You do not have access to any organizations.");let n=t.options.org;((o=r.orgs)==null?void 0:o.length)===1&&!n?n=r.orgs[0].orgName:((a=r.orgs)==null?void 0:a.length)>1&&!n&&(n=await t.selectOrg(r));let i=new Jt({orgName:n});i.update({orgName:n}),this.org=i}async authorize(){var n,i,s;let t=this.cli.user,r=this.cli.options.org||((i=(n=this.cli.fs.serviceFile)==null?void 0:n.ampt)==null?void 0:i.org);if(r&&!t.hasAccessToOrg(r)&&(this.cli.logWarning(`Org "${r}" has either been deleted, renamed, or you no longer have access to it.`),r=void 0),r?this.org=new Jt({orgName:r}):(fr({eventName:"ampt.dev.prompt",eventData:{promptName:"org"}}),await this.selectOrg(),await this.cli.fs.readServiceFileIfExists({orgName:r||((s=this.org)==null?void 0:s.orgName)})),!this.org)return await this.cli.quit("Ampt Organization is required");await this.org.isAuthorized()||(this.cli.logError(`You don't have access to the "${r}" org.`),await this.selectOrg()),this.cli._activeOrgName=this.org.orgName}async analyze(){this.cli.viewSpinner("Analyzing Project"),await dV(this.cli),await this.cli.checkForAmptPackageUpdates()}async hydrate(){if(!this.org){await this.cli.quit("Ampt Organization is required");return}if(!this.service){await this.cli.quit("Ampt App is required");return}if(!this.instance){await this.cli.quit("Ampt Environment is required");return}let[t,r,n,i]=await Promise.all([this.instance.get().catch(()=>{}),this.service.get().catch(()=>{}),this.org.fetch(),this.org.getRegions()]),s=this.cli.selectRegion({orgInfo:n,serviceInfo:r,instanceInfo:t,regions:i});if(!s){this.cli.logError("No region selected."),await this.cli.quit();return}this.instance.region=s.code}async detect(){var r,n,i;this.cli.viewSpinner("Starting");let t=this.cli.options.app||((n=(r=this.cli.fs.serviceFile)==null?void 0:r.ampt)==null?void 0:n.app);t||(fr({eventName:"ampt.dev.prompt",eventData:{promptName:"service"}}),t=await this.cli.promptServiceName(),this.cli.viewSpinner("Saving"),await this.cli.fs.writeServiceFile({serviceName:t})),this.cli._activeServiceName=t,this.service||(this.service=new Wt({org:this.org,serviceName:t})),this.instance||(this.instance=new or({org:this.org,service:this.service,instanceName:(i=this.cli.user)==null?void 0:i.generateSandboxName()})),await this.hydrate()}async connect(){if((0,NA.default)(this.org,"Org is required"),(0,NA.default)(this.service,"Service is required"),(0,NA.default)(this.instance,"Instance is required"),!this.cli.user)return await this.cli.quit("You must be logged in");let t=this.org.orgName,r=this.service.serviceName;if(this.cli.viewSpinner("Connecting to your personal sandbox environment..."),this.devModeStart=process.hrtime.bigint(),await this.cli.isAmptShellRunning({orgName:t,serviceName:r}))return this.cli.logError(`The Ampt shell for app "${r}" in org "${t}" is already running in another terminal.`),await this.cli.quit();await this.cli.writeAmptShellActivityFile({orgName:t,serviceName:r}),this.cli.bindService({orgName:t,serviceName:r}),this.cli.onQuit(async()=>{var d;(0,c1e.removeSync)(zf(t,r)),await fi.stop(this.cli,{hasQuit:!0,orgName:t,serviceName:r});let u=await this.cli.fs.readJsonFileIfExists(this.cli.fs.serviceFilePath),p=process.hrtime.bigint();(d=this.messenger)==null||d.close(),fr({eventName:"ampt.dev.ended",eventData:{source:this.cli.isGitPod?"gitpod":"local",timeInSeconds:this.devModeStart?Number(p-this.devModeStart)/1e9:0,dependencies:Object.keys((u==null?void 0:u.dependencies)||{}),appName:`${t}:${r}`}})}),this.code=new is({org:this.org,service:this.service,instance:this.instance,user:this.cli.user,fullSync:this.cli.options["full-sync"],cli:this.cli,verbose:this.cli.options.verbose}),this.data=new Vu({fs:this.cli.fs,org:this.org,service:this.service,instance:this.instance}),this.cli.session.setSentryContext({identifier:`${this.org.orgName}:${this.service.serviceName}:${this.instance.instanceName}`,service:this.service.serviceName,instance:this.instance.instanceName,org:this.org.orgName}),this.cli.viewSpinner("Syncing");let i=this.cli.viewSpinner.bind(this.cli),s=u=>i(`Syncing (${u})`),o=await this.code.sync(void 0,s);this.cli.updateLastSyncedAt(Date.now()),hV({...o,source:this.cli.isGitPod?"gitpod":"local",orgName:t,serviceName:this.service.serviceName,instanceName:this.instance.instanceName,appName:`${t}:${r}`,region:this.instance.region}),this.cli.viewSpinner("Connecting to real time logs");let[a]=await Promise.all([this.instance.connect({cli:this.cli}),this.cli.messenger.subscribe({userUid:this.cli.user.userId,orgName:t,appName:r,instanceName:this.instance.instanceName})]);this.messenger=a}async dev(t){var I;let{logDashboard:r=!1}=t||{},n=this.org,i=this.service,s=this.instance,o=this.code,a=n.orgName,u=i.serviceName,p=s.instanceName,d=this.cli.styles.purple(`@${a}`),h=this.cli.styles.blue(u),m=this.cli.styles.green(p),g=this.cli.styles.dim("/"),v=`Connected to ${this.cli.styles.bold(`${d}${g}${h}${g}${m}`)}`;if(this.cli.logSuccess(v),this.cli.logUrl(s.url),r){this.cli.logSpace(),this.cli.logInfo("View your app in the dashboard");let x=`${process.env.AMPT_DASHBOARD_URL_ROOT}/orgs/${a}/apps/${u}/environments/${p}`;this.cli.logUrl(x)}if(this.isReseedingEnabled&&this.cli.logSuccess("Enabled automatic data reseeding"),this.cli.viewInput(),this.cli.options.dev){let{url:x,region:_}=s,{credentials:A,env:E}=o;fi.start({credentials:A,env:E,url:x,cli:this.cli,fs:this.cli.fs,user:this.cli.user,scriptName:"dev",ifPresent:!1,orgName:a,serviceName:u,region:_}).catch(S=>{_e.error({err:S},"Error starting dev server"),this.cli.logError("Something went wrong starting the dev server.")})}fr({eventName:"ampt.dev.enabled",eventData:{dependencies:Object.keys(((I=this.cli.fs.serviceFile)==null?void 0:I.dependencies)||{}),appName:`${a}:${u}`}}),this.isSeedingEnabled&&await this.seed(),this.cli.fs.watch(o.workspaceRoot,this.onFileChange.bind(this)),this.sandboxActive=!0}async onFileChange(t){(async()=>{let r=this.org.orgName,n=this.service.serviceName,i=this.instance.instanceName;if(!this.code)return await this.cli.quit("Sync engine is not active");for(let p of t)this.queuedFilePaths.add(p);let s=this.queuedFilePaths,o=await fi.isRunning({orgName:r,serviceName:n}),a=this.cli.buildRunningInShell;if(this.cli.isCommandRunningInShell&&!o&&(_e.trace("waiting for command to finish"),await this.cli.commandRunningInShellPromise,_e.trace("command finished")),this.syncInProgress){_e.trace("sync in progress, skipping");return}this.syncInProgress=!0;let u;if(a)await this.cli.commandRunningInShellPromise,u=await this.code.sync();else for(;this.queuedFilePaths.size>0;){let p=this.queuedFilePaths;this.queuedFilePaths=new Set,this.isReseedingEnabled&&this.cli.fs.dataFilePath&&p.has(this.cli.fs.dataFilePath)&&(this.cli.viewSpinner("Seeding",{timer:!0}),await this.seed()),(!this.cli.isCommandRunningInShell||o)&&this.cli.spinInput(),_e.trace({size:p.size,queued:this.queuedFilePaths.size},"starting sync"),u=await this.code.sync(p),_e.trace({size:p.size,queued:this.queuedFilePaths.size},"sync complete")}hV({...u,source:this.cli.isGitPod?"gitpod":"local",orgName:r,serviceName:n,instanceName:i,appName:`${r}:${n}`,region:this.instance.region}),this.syncInProgress=!1,this.cli.updateLastSyncedAt(Date.now()),this.cli.isAnimationEnabled||this.cli.logSuccess("Successfully updated your code"),(!this.cli.isCommandRunningInShell||o)&&this.cli.stopSpinningInput(),this.cli.tutorial.inProgress&&await this.cli.tutorial.onSync(s)})().catch(r=>{_e.error({method:"sync-callback",err:r},"Error syncing code"),this.cli.logError("Something went wrong syncing your code. Please try again.")})}async seed(){var t;this.data&&(this.cli.viewSpinner("Seeding"),await this.data.import(),this.cli.logSuccess(`Seeded data from the ${(t=this.cli.styles)==null?void 0:t.bold(this.cli.fs.dataFileName)} file.`),this.cli.viewInput())}async setupApp(t){var p,d,h,m;let{name:r}=t||{},{org:n}=this,{fs:i}=this.cli;if(n||await this.authorize(),!n)return await this.cli.quit("Ampt Organization is required");let s=r||((d=(p=i.serviceFile)==null?void 0:p.ampt)==null?void 0:d.app)||this.cli.options.app,o=await this.cli.promptServiceName(s),a=new Wt({org:n,serviceName:o});if(await e.checkIfServiceExists(a)&&(this.cli.logWarning(`App ${(m=this.cli.styles)==null?void 0:m.purple((h=this.cli.styles)==null?void 0:h.bold(`"${o}"`))} already exists for this org.`),this.cli.logQuestion("Would you like to overwrite it?"),!await this.cli.confirm()))return this.setupApp({name:r});_e.info({serviceName:a.serviceName,orgName:n.orgName},"app init"),this.service=a}async assureServiceDir(){var i;let{fs:t}=this.cli;if(!this.service||!this.service.serviceName)throw new ju("Expected App to be defined","assureServiceDir");let r=!1;if(await t.isCwdEmpty()&&(r=await this.cli.confirm(!0,"Would you like to use the current directory?")),!r){if(t.dirExists(this.service.serviceName)){this.cli.logWarning(`Directory "./${this.service.serviceName}" already exists.`);let s=await this.cli.confirm(!1,"Would you like to overwrite it?"),o=await this.cli.confirm(!1,"Are you sure? This will delete all files in the directory.");if(s&&o)t.deleteServiceDir(this.service.serviceName),_e.debug(`Deleted directory ${this.service.serviceName}`);else return this.assureServiceDir()}t.createServiceDir(this.service.serviceName),this.cli.logSuccess(`Created directory ${this.cli.styles.bold(this.cli.styles.darkPurple(`./${this.service.serviceName}`))}`),await t.read({orgName:(i=this.org)==null?void 0:i.orgName}),_e.debug(`Created directory ${this.service.serviceName}`)}}async setupTemplate(){let{fs:t}=this.cli,{template:r}=this.cli.options;if(!this.org)throw new ju("Expected Org to be defined","setupTemplate");let n=r,[i,s]=await Promise.all([Hx(this.cli),this.org.validateLimits()]);if(_e.trace({templates:i.length,limitResult:s},"setupTemplate"),s.serviceExceeded)return this.cli.handleServiceLimitExceeded();if(s.instanceExceeded)return this.cli.handleInstanceLimitExceeded();if(!this.isGitInstalled)return await this.handleGitError();let o=i.find(a=>a.name===n);if(!o){this.cli.logWarning(`Template "${n}" not found.`),this.cli.logInfo("Please choose a template to generate.");let a=await this.cli.select(i);o=a,n=a.name}if(await this.setupApp({name:n}),await this.assureServiceDir(),!this.service)throw new ju("Expected App to be defined","setupTemplate");if(!t.serviceRoot)throw new ju("Expected serviceRoot to be defined","setupTemplate");await t.initService({orgName:this.org.orgName,serviceName:this.service.serviceName,template:o,existingProject:!1}),await t.installDependenciesIfExists({viewSpinner:this.cli.viewSpinner.bind(this.cli)})}async setup(){let{fs:t}=this.cli;if(this.org||await this.authorize(),!this.org)return await this.cli.quit("Ampt Organization is required");let[r,n]=await Promise.all([t.readJsonFileIfExists(mV.default.join(t.serviceRoot,"package.json")),t.isCwdEmpty()]);if(n&&await this.shouldStartTutorial())return await this.cli.tutorial.initTutorial();if(r&&!r.ampt){if(fr({eventName:"ampt.dev.prompt",eventData:{promptName:"migrateExistingApp"}}),this.cli.logInfo("This directory does not contain an Ampt project."),this.cli.logQuestion("Would you like to initialize it?"),await this.cli.confirm()){if(this.cli.viewSpinner("Migrating project to Ampt"),await this.setupApp({name:r.name||mV.default.basename(t.serviceRoot)}),!this.service||!this.service.serviceName)throw new ju("Expected App to be defined","setup");if(await t.initService({orgName:this.org.orgName,serviceName:this.service.serviceName,existingProject:!0}),this.cli.logInfo(`${this.cli.styles.bold(this.cli.styles.darkPurple(this.service.serviceName))} initialized`),await this.shouldStartTutorial())return await this.cli.tutorial.initTutorial();this.cli.viewSpinner("Installing Dependencies"),await t.installDependenciesIfExists({viewSpinner:this.cli.viewSpinner.bind(this.cli)});return}}else if(r)await t.initService({orgName:this.org.orgName,existingProject:!0});else{if(this.cli.logQuestion("Would you like to create a new app?"),!await this.cli.confirm())return await this.cli.quit("Stopped");this.cli.viewSpinner("Loading");let[s,o]=await Promise.all([Hx(this.cli),this.org.validateLimits()]);if(o.serviceExceeded)return this.cli.handleServiceLimitExceeded();if(o.instanceExceeded)return this.cli.handleInstanceLimitExceeded();if(!this.isGitInstalled)return await this.handleGitError();fr({eventName:"ampt.dev.prompt",eventData:{promptName:"template"}}),this.cli.logInfo("Choose a template to generate.");let a=await this.cli.select(s);if(await this.setupApp({name:a.name}),await this.assureServiceDir(),!this.service||!this.service.serviceName)throw new ju("Expected App to be defined","setup");if(this.cli.viewSpinner("Generating template..."),await t.initService({orgName:this.org.orgName,serviceName:this.service.serviceName,template:a,existingProject:!1}),t.dataFile&&(this.isSeedingEnabled=!0),this.cli._clearScreen(),this.cli.logSuccess(`${this.cli.styles.bold(this.service.serviceName)} initialized`),await this.shouldStartTutorial())return await this.cli.tutorial.initTutorial();await t.installDependenciesIfExists({viewSpinner:this.cli.viewSpinner.bind(this.cli)})}}async shouldStartTutorial(){var s,o;let{cli:t}=this,{session:r}=t,{showTutorial:n,allowDismiss:i}=r.shouldPromptTutorial();if(n){let a=["Yes","Skip for now"];i&&a.push("Don't show again"),t.logQuestion("Would you like to start the tutorial?");let u=await t.select(a);if(u==="Yes")return this.isSeedingEnabled=!0,!0;if(u=="Don't show again"){t.logInfo(`You can always run ${(s=t.styles)==null?void 0:s.bold("ampt tutorial")} to go through the tutorial.`),t.viewSpinner("Saving Preferences");try{await((o=t.user)==null?void 0:o.updatePreferences({showTutorial:!1}))}catch{t.logError("Failed to save preferences")}}}return!1}async init(){let{cli:t}=this,r=t.user;if(!r)return await t.quit("You must be logged in to use this command.");if(!r.orgs||!r.orgs.length)return await t.quit("You do not have access to any organizations.");await t.fs.read();try{await Promise.all([this.authorize(),this.runSystemChecks()]),this.isSeedingEnabled=t.options.seed||t.options.s||!1,this.isReseedingEnabled=t.options.reseed||t.options.rs||!1;let n=t.options.tutorial??!1,i=t.options.template??!1;if(_e.debug({tutorialPassed:n,templatePassed:i},"Project.init"),i&&await this.setupTemplate(),n)return await t.tutorial.initTutorial();await this.setup(),this.initialized=!0}catch(n){return await t.quit(n.message)}}};var H1e=(yV(),YR(gV));var Qh=class extends Error{function=null;constructor(t,r){super(t),this.function=r}},FA=class e{static tutorialGitUrl="https://github.com/ampt-templates/tutorial";static exitCmd="end";static iterationCmds=["skip","next","done"];static fullTutorialSteps=["editor","sandbox","postSandbox","importData","postImportData","staticAssets","postStaticAssets","runningScripts","postRunningScripts","deploy","postDeploy","dashboard"];static basicTutorialSteps=["editor","sandbox","postSandbox","staticAssets","build","postBuild","importData","postImportData","runningScripts","deploy","dashboard"];welcomeMessage=["Welcome to Ampt!","This Ampt CLI tutorial allows you to exit anytime with 'end' and skip steps using 'skip'."];cli;name;type="basic";inProgress=!1;tutorialModeStart=void 0;nextCommand;activeStepIndex=null;stepOrder=e.fullTutorialSteps;steps={editor:async()=>{let t="To begin, let's open the project in a code editor.";return{title:"Open the project in an editor",pre:this.cli.project.isCodeInstalled?[t,'Run `code .` in the terminal to open the project in Visual Studio Code or type "done" to continue']:[t,'Open the project in your favorite code editor and type "done" to continue'],command:"code"}},sandbox:async()=>{var r,n;let t=["The URL above is your developer sandbox. Code changes are synced here in real-time","Your sandbox goes offline when you disconnect from the CLI","Open the URL in your favorite browser to see your app in action"];return this.type==="full"?t.push('Try making a change to "index.tsx", refresh, and see the changes in real-time!'):(t.push("Try making a change to the code, refresh, and see the changes in real-time!"),(n=(r=this.cli.fs.serviceFile)==null?void 0:r.scripts)!=null&&n["ampt:dev"]&&t.push(`Note, if you're building a frontend app, you can use the "dev" command to start the local development server`)),{title:"The Developer Sandbox",pre:t,event:"sync"}},postSandbox:async()=>({title:"Sandbox Synced",pre:["Sandbox synced!","Any logs or errors from your sandbox are displayed here",'The "main" field in your package.json is the entry point to your app, and is the first file that is executed when your app starts.','By default, this is "index.js" or "index.ts" in the root of your project.'],postAction:!0}),staticAssets:async()=>{let t=["The `static` directory is automatically synced and served from your Ampt environment","This is useful for serving images, fonts, and other static assets"];this.type==="full"?t.push('Try moving "test.html" into the "static" directory and see it update in the sandbox'):t.push("Add a file to your static directory, or hit enter to skip");let r=this.type==="full"?"sync":void 0;return{title:"Static Assets",pre:t,event:r}},postStaticAssets:async()=>{let t=this.cli.project.getSandboxUrl();return{postAction:!0,title:"Static Assets Synced",pre:["Static assets synced!",t?`Now, try navigating to ${t}/test.html to see the changes`:"Try navigating to the /test.html route to see the changes"]}},importData:async()=>({title:"Importing Data to @ampt/data",pre:['You can import data into your Ampt environment using the "import" command',"This command is useful for seeding your database with data for development and testing","Try running the import command now by typing `import` into the terminal"],command:"import"}),postImportData:async()=>({title:"Data Imported!",pre:["Data imported!",this.type==="full"?"Now, try refreshing the sandbox to see the changes in the environment":"Data seeded from your data file is now available in your environment"],postAction:!0}),runningScripts:async()=>{let t=["The Ampt shell allows you to run scripts within the context of your app","For scripts within your package.json, prefix them with 'ampt', e.g. 'ampt:test'"];this.type==="full"&&t.push('Try running the test script by typing "run test" into the terminal'),this.type==="basic"&&(t.push('To run a script, just type "run" followed by the script name, e.g. "run test" for "ampt:test"'),t.push('Ampt automatically handles JS or TS files, just provide the path after the "run" command, e.g. "run scripts/list-todos.ts"'));let r=this.type==="full"?"run":void 0,n=this.type==="full"?"test":void 0;return{title:"Running scripts within the Ampt context",pre:t,command:r,runArg:n}},postRunningScripts:()=>Promise.resolve({title:"Scripts Run!",pre:["Nice, you just ran the test script!",'Ampt also automatically handles JS or TS files, just provide the path after the "run" command, e.g. "run scripts/list-todos.ts"'],postAction:!0}),deploy:()=>Promise.resolve({title:"Deploying to a permanent environment",pre:["To deploy your current sandbox, use the 'deploy prod' command to create a new stage environment named 'prod'","Note, this can take a second, as Ampt provisions an entirely new environment for you in a separate AWS account"],post:["Stage deployed!","The URL above is a stage environment, and is always available."],command:"deploy"}),postDeploy:()=>Promise.resolve({title:"Stage Deployed!",pre:["Stage deployed!","The URL above is a stage environment, and is always available",'Updates to the stage environment are made using the "deploy" command, or automatically using Git CI/CD.'],postAction:!0}),dashboard:()=>Promise.resolve({title:"The Ampt Dashboard",pre:["The dashboard is where you can manage your Ampt environments, view logs, data, and more",'Try opening the your dashboard with the "dashboard" command'],command:"dashboard"}),build:()=>Promise.resolve({title:"Building the app",pre:['For projects with a build step, use "build" to execute the "ampt:build" script in package.json',"Build output is automatically synced and is available at your sandbox url"],command:"run",runArg:"build"}),postBuild:()=>Promise.resolve({title:"App built!",pre:["Depending on your project, you might need to configure its output to be served from the 'static' directory","For more details on your specific framework, check out the Ampt documentation at https://getampt.com/docs"],postAction:!0})};constructor(t){if(!t.project)throw new Qh("Project should be set before Tutorial is initialized","constructor");this.cli=t}isExitCmd(t){return t===e.exitCmd}isIterationCmd(t){return e.iterationCmds.includes(t)}async iterateStep(t){let{skip:r=!1}=t||{skip:!1};if(this.inProgress&&this.activeStepIndex!==null){let n=this.activeStepIndex+1;if(this.activeStepIndex===0&&!this.cli.project.sandboxActive&&(this.cli.logSpace(),await this.cli.project.dev({logDashboard:!1})),this.reportAnalytics({exit:!1,step:this.stepOrder[this.activeStepIndex],event:"ampt.tutorial.step_completed"}),n<this.stepOrder.length){this.activeStepIndex=n;let i=await this.steps[this.stepOrder[this.activeStepIndex]]();r&&i.postAction&&n+1<this.stepOrder.length&&(this.activeStepIndex=n+1,i=await this.steps[this.stepOrder[this.activeStepIndex]]()),this.nextCommand=i.command||void 0,this.logStep({step:i}),!i.command&&!i.event&&!i.postAction&&await this.iterateStep()}else await this.complete()}}async onSync(t){if(this.inProgress&&this.activeStepIndex!==null){let r=this.stepOrder[this.activeStepIndex];t.size>0&&(r==="sandbox"||r==="staticAssets"&&Array.from(t).some(n=>n.includes("static")))&&await this.iterateStep()}}async handle(t){var r;if(this.inProgress&&this.activeStepIndex!==null){let n=this.stepOrder[this.activeStepIndex],i=await this.steps[n]();if(this.isExitCmd(t))return this.cli.project.sandboxActive||await this.cli.project.dev(),await this.complete({exit:!0});if(i.postAction&&(this.cli._staticViewInputMsg=void 0),this.isIterationCmd(t))return this.reportAnalytics({exit:!1,step:this.stepOrder[this.activeStepIndex]}),await this.iterateStep({skip:!0});if(i.command==="run"&&t==="run"&&(!this.cli.args[0]||i.runArg&&i.runArg!==this.cli.args[0])){this.cli.logWarning(`Invalid command: "${this.cli.styles.bold(this.cli.styles.red(t))}" - expected "${i.runArg}"`);return}else if(i.command&&t!==i.command){let s=this.cli.styles.purple(n==="build"?"build":i.command);this.cli.logWarning(`Invalid command: "${this.cli.styles.bold(this.cli.styles.red(t))}" - expected "${this.cli.styles.bold(s)}"`);return}else{if(i.command==="deploy"&&t==="deploy"&&!((r=this.cli.names)!=null&&r.instanceName)){this.cli.logWarning('You must provide a stage name to deploy to. Example: "deploy prod"');return}if(n==="editor"&&t==="code")await H1e.bash(this.cli);else{let s=H1e[t];if(t&&i.event==="sync"){this.cli.logWarning("Waiting for changes to sync to the sandbox...");return}if(!s){this.cli.logError(`Command "${t}" not found - expected "${i.command}"`);return}this.cli.logSpace(),await s(this.cli)}try{return this.cli.viewInput(),this.iterateStep()}catch(s){throw new Qh(s.message,"handle")}}}}async initTutorial(){var i,s,o,a,u,p,d,h;if(!this.cli.user)return await this.cli.quit("You must be logged in to start the Ampt tutorial");if(!this.cli.project.org)return await this.cli.quit("Expected Ampt organization to start the Ampt tutorial");this.name=`${(i=this.cli.user)==null?void 0:i.username}-ampt-tutorial`,this.inProgress=!0,this.tutorialModeStart=process.hrtime.bigint(),this.type=this.cli.fs.serviceFile?"basic":"full",_e.debug({type:this.type,name:this.name},"initTutorial");let t=this.cli.project.org;switch(this.type){case"full":{if(!await this.cli.fs.detectGit())return await this.cli.quit("Git is required to start the Ampt tutorial");let m=async()=>{this.name=await this.cli.promptServiceName(this.name);let v=new Wt({org:this.cli.project.org,serviceName:this.name});if(await v.get().catch(()=>{}))return this.cli.logWarning(`App ${this.cli.styles.bold(this.cli.styles.purple(this.name))} already exists in ${this.cli.styles.bold(this.cli.styles.darkPurple(t.orgName))}`),await this.cli.confirm(!0,"Would you like to overwrite it?")?v:m();let x=await this.cli.fs.isCwdEmpty(),_=!1;if(x&&(_=await this.cli.confirm(!0,"Would you like to start the tutorial in the current directory?")),!_){if(this.cli.fs.dirExists(this.name))if(this.cli.logWarning(`Directory "./${this.name}" already exists.`),await this.cli.confirm(!0,"Would you like to overwrite it?"))this.cli.logInfo(`Overwriting directory: ${this.cli.styles.bold(this.name)}`),this.cli.fs.deleteServiceDir(this.name);else return m();this.cli.fs.createServiceDir(this.name),this.cli.logInfo(`Created directory: ${this.cli.styles.bold(this.name)}`)}return v};this.cli.project.service=await m();let g=(s=this.cli.user)==null?void 0:s.generateSandboxName();this.cli.project.instance=new or({org:t,service:this.cli.project.service,instanceName:g,cli:this.cli}),this.cli.viewSpinner("Cloning @ampt-templates/tutorial"),await this.cli.fs.cloneGitRepo({repoUrl:e.tutorialGitUrl}),await this.cli.fs.read({orgName:t.orgName,appName:this.name});break}case"basic":{if((a=(o=this.cli.fs.serviceFile)==null?void 0:o.ampt)!=null&&a.app){this.name=(p=(u=this.cli.fs.serviceFile)==null?void 0:u.ampt)==null?void 0:p.app,await this.cli.fs.read({orgName:t.orgName,appName:this.name}),this.stepOrder=e.basicTutorialSteps;let m=!!this.cli.fs.dataFile,g=(h=(d=this.cli.fs.serviceFile)==null?void 0:d.scripts)==null?void 0:h["ampt:build"],v=this.stepOrder.reduce((I,x)=>(x==="importData"||x==="postImportData")&&!m||(x==="build"||x==="postBuild")&&!g?I:[...I,x],[]);this.stepOrder=v}else return await this.cli.quit("Expected an Ampt app to start the Ampt tutorial");break}default:return await this.cli.quit("Expected a valid Ampt tutorial type")}await this.cli.fs.installDependenciesIfExists({viewSpinner:this.cli.viewSpinner.bind(this.cli)}),await this.cli.project.boot(this.type==="basic"?["analyze","detect","connect"]:["connect"]),this.type==="full"&&this.cli.logSpace(),this.cli.logGroup(this.welcomeMessage),this.activeStepIndex=0;let r=this.stepOrder[this.activeStepIndex],n=await this.steps[r]();this.reportAnalytics({exit:!1,event:"ampt.tutorial.started",step:r}),this.logStep({step:n})}logStep(t){let{step:r}=t;this.cli.logSpace(),r.postAction?(this.cli.logGroup([r.pre].flat(),!0),this.cli._staticViewInputMsg='Type "next" or hit enter to continue',this.cli.viewInput()):this.cli.logGroup([r.title,r.pre].flat(),!0)}setType(t){this.type=t}getDurationMins(){let t=process.hrtime.bigint()-this.tutorialModeStart;return Math.round(Number(t)/6e10)}async complete(t){var i,s;let{exit:r=!1}=t||{exit:!1},n=this.stepOrder[this.activeStepIndex];this.reportAnalytics({exit:r,step:r?n:void 0}),this.inProgress=!1,this.activeStepIndex=null,await((s=(i=this.cli)==null?void 0:i.user)==null?void 0:s.updatePreferences({showTutorial:!1})),this.completeMsg()}reportAnalytics(t){var s,o,a;let{event:r,step:n,exit:i=!1}=t;fr({eventName:r||(i?"ampt.tutorial.skipped":"ampt.tutorial.completed"),eventData:{type:this.type,step:n,durationMinutes:r?void 0:this.getDurationMins(),userName:(s=this.cli.user)==null?void 0:s.username,orgName:(o=this.cli.project.org)==null?void 0:o.orgName,serviceName:(a=this.cli.project.service)==null?void 0:a.serviceName}})}completeMsg(){this.cli.logGroup([this.cli.styles.bold("We hope you enjoy using Ampt!"),"If you have any questions or feedback, join our discord: https://getampt.com/discord","To read up on everything Ampt, check out our docs: https://getampt.com/docs",`You can always re-run this tutorial with the command "${this.cli.styles.bold("tutorial")}"`,`You can clear this output with the command "${this.cli.styles.bold("clear")}"`,"Happy coding! \u{1F680}"])}};em.default.extend(M1e.default);em.default.extend(U1e.default);em.default.updateLocale("en",{relativeTime:{future:"in %s",past:"%s ago",s:(e,t,r,n)=>e<=10?`${e} seconds`:e<=30?"several seconds":e<60?"less than a minute":`${e} seconds`,m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}});var Tb=(yV(),YR(gV)),{version:eUt}=Hf(),tUt={dim:xo.default.dim,darkPurple:xo.default.hex("#B367FF"),purple:xo.default.hex("#F952FF"),yellow:xo.default.hex("#FFC700"),blue:xo.default.hex("#727aff"),red:xo.default.rgb(255,99,99),grey:xo.default.hex("#324f59"),pastel:xo.default.hex("#dbd8ca"),bold:xo.default.bold,green:xo.default.hex("#22b9b7")},LA=class e{static defaultSpinnerFrames=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];session;messenger;version=eUt;installedGlobally=z1e.default;os=process.platform;user;fs;tutorial;project;showLogo=!0;fromClone=!1;inputValue;timer;isShellActive;isInteractive;isDevServerActive;isAnimationEnabled=!1;isCommandRunningInShell;buildRunningInShell;commandRunningInShellPromise;styles;icons;argv;startupOptions;options;args;names;command;orgName;org;service;serviceName;_exitCode=0;isGitPod=!1;isCodeSpaces=!1;isWebIde=!1;isCi=!1;isBeta=!1;_runtimeUpdateInProgress=!1;_lastSyncedAt;_lastSyncedAtInterval;_ciGroupActive=null;_lastSpinnerStep;_staticViewInputMsg;_activeOrgName;_activeServiceName;_allowedInputCharacter;_isLoggedTopPadding;_commandsHistory;_viewType;_viewMessage;_spinnerMessage;_spinnerStep;_isPromptActive;_promptResponse;_timerInterval;_spinnerInterval;_inputSpinnerInterval;_inputSpinnerStartedAt;_inputSpinnerStoppedAt;_tipsInterval;_tipsFrequency;_tipsCollectionIndex;_spinnerFrequency;_spinnerFrames;_spinnerFrameIndex;_selectItems;_selectedItemIndex;_selectedItem;_onQuit;_quitting;_suggestions;_commandsHistoryIndex;_devTipsCollection=["type `dev` to start running the dev server","type `stop` to stop a running dev server"];_cloudScriptsCollection=["add a `ampt:dev` script to package.json to run code within the Ampt context"];_tipsCollection=[];_xdgOpenInstalled=null;constructor(t){process.title="Ampt CLI",this.session=t,this.session.loadAmptConfig(),this.messenger=new sA({cli:this}),this.messenger.on("offline",(0,bV.default)(()=>{this.logError("Event Messenger offline")},1e3,!0)),this.messenger.on("online",(0,bV.default)(()=>{this.logInfo("Event Messenger online")},1e3,!0)),this.inputValue="",this.startupOptions={},this.options={},this.args=[],this.argv=[],this.command=void 0,this.names=void 0,this.icons={},this.commandRunningInShellPromise=null,this._allowedInputCharacter=/^[a-zA-Z0-9 ~:!@#$%^&*()-_=+.<>{}[\]"'/]+$/,this._viewType=null,this._viewMessage=void 0,this._spinnerMessage=null,this._spinnerStep=null,this._isPromptActive=void 0,this._promptResponse=void 0,this._commandsHistory=[],this._spinnerFrequency=100,this._spinnerFrames=e.defaultSpinnerFrames,this._spinnerFrameIndex=0,this.showLogo=!process.env.IS_CHILD_PROCESS&&!this.isGitPod&&this._canRenderBolt(),this.styles=tUt,this._startLastSyncedAtInterval(),this._initIcons(),this._initSuggestions(),process.env.AMPT_IS_GITPOD==="true"&&(this.isGitPod=!0,this.isWebIde=!0),process.env.AMPT_IS_CODESPACES==="true"&&(this.isCodeSpaces=!0,this.isWebIde=!0),this.isWebIde&&(this.isAnimationEnabled=!1),this.isCi=this._detectCiEnvironment(),this.isBeta=this.version.includes("beta"),this.isInteractive=process.stdin.isTTY,this.fs=new xw({session:this.session}),this.project=new BA(this),this.tutorial=new FA(this)}async login(){return new wa}setExitCode(t){this._exitCode=t}setRuntimeUpdateInProgress(t){this._runtimeUpdateInProgress=t}async start(t){let{_:r,...n}=(0,vV.default)(process.argv);if(this.startupOptions=n,this.fs.verbose=this.startupOptions.verbose,this.fromClone=(t==null?void 0:t.fromClone)||!1,this.os==="linux"&&(this._xdgOpenInstalled=await this.fs.detectXdgOpen()),r[2]!=="clone"&&process.platform!=="win32")try{_e.enable()}catch(i){console.error(i)}return this.run()}async run(t){try{if(this._parseCommand(t),this.tutorial.inProgress)return await this.tutorial.handle(this.command);if(this.command==="sandbox")return await Tb.sandbox(this);if(this.command==="git"||this.command==="code")return await Tb.bash(this);this.isShellActive||(this._hideCursor(),this.command!=="run"&&(this._logLogo(),this.viewSpinner("Loading")),(this.command==="start"||this.command==="tutorial")&&await this._autoUpdate()),this._watchKeyboard();let r=["clone"],n=["promote","test"];if((this.command==="start"||this.command==="tutorial")&&(this.isShellActive=!0),this.isShellActive&&r.includes(this.command))throw new Ap(`Command "${this.command}" is currently not supported in the shell`);if(n.includes(this.command))throw new Ap(`Command "${this.command}" is not available.`);if(!Tb[this.command]&&this.command!=="tutorial")throw new Ap(`Command "${this.command}" is not a valid command`);let i=this.messenger.connect();if(!this.user&&(this.user=await wa.init(),!this.user.isLoggedIn())){this.logInfo("You must login to proceeed.");try{await this.user.performLogin(this)}catch(s){if(s.name==="UserDisabledError")return this.logError(s.message||"Your account has been disabled. Please contact support."),this._stop(0);throw s}}await i,this.command==="tutorial"&&(this.command="start",this.options.tutorial=!0),this.command==="dashboard"&&(this.command="open"),await Tb[this.command](this),this.options={}}catch(r){if(r instanceof Qh||r instanceof Ap)this.logError(r.message);else{if(r instanceof _h)return this.logError(r.message),this._stop(this._exitCode);if(r.name==="InstancesLimitError"){let n=["share","deploy"].includes(this.command);return this.handleInstanceLimitExceeded({isDeploying:n})}else return r.name==="ServicesLimitError"?this.handleServiceLimitExceeded():(this.session.captureException(r),this.logError(`Something went wrong - please contact support and provide ${this.session.getSessionId()} as a reference ID`),await this.session.flushSentry(),this._stop(1))}}return this.isShellActive?this.viewInput():this._stop(this._exitCode)}handleServiceLimitExceeded(){let t="You have reached your app limit. Please upgrade your plan or delete an app.";return this.quit(t)}handleInstanceLimitExceeded(t){let{isDeploying:r=!1}=t||{},n="You have reached your environment limit. Please upgrade your plan or delete an environment.";if(!r)return this.quit(n);this.logWarning("Deployment failed"),this.logError(n),this.viewInput()}setProject(t){this.project=t}viewInput(t=this._formatLastSyncedAt()){let r=this._runtimeUpdateInProgress?"Runtime update in progress...":t;this._timerInterval=clearInterval(this._timerInterval),this._spinnerInterval=clearInterval(this._spinnerInterval),this._startLastSyncedAtInterval(),this._switchView({viewType:"input",viewMessage:r})}spinInput(){if(this._viewType!=="input"){_e.error({_viewType:this._viewType},"wrong viewType in spinInput");return}this.isAnimationEnabled&&(this._inputSpinnerStartedAt=Date.now(),clearInterval(this._inputSpinnerInterval),this._inputSpinnerInterval=setInterval(()=>this.updateInputSpinner(),this._spinnerFrequency).unref())}viewSpinner(t="Loading",r){let{timer:n=!1}=r||{};if(!this.isInteractive){console.log(t);return}if(!this.isAnimationEnabled){this._switchView({viewType:"spinner",viewMessage:t});return}this._spinnerMessage=t,this._spinnerStep="",clearInterval(this._timerInterval),clearInterval(this._spinnerInterval),clearInterval(this._inputSpinnerInterval),this._timerInterval=void 0,this._spinnerInterval=void 0,this._inputSpinnerInterval=void 0,n&&(this.timer=0,this._timerInterval=setInterval(()=>this.timer=+this.timer+1,1e3).unref()),this._spinnerInterval=setInterval(()=>this._updateSpinner((this._spinnerMessage||"Loading")+(this._spinnerStep?` (${this._spinnerStep})`:""),{timer:n}),this._spinnerFrequency).unref()}updateLastSyncedAt(t){this._lastSyncedAt=t}updateInputSpinner(){this._spinnerFrameIndex=++this._spinnerFrameIndex%this._spinnerFrames.length,this._switchView({viewType:"input"})}stopSpinningInput(){this._inputSpinnerInterval&&(clearInterval(this._inputSpinnerInterval),this._inputSpinnerStoppedAt=Date.now(),this._inputSpinnerInterval=void 0),this.viewInput()}updateSpinnerStep(t){if(!process.stdin.isTTY){process.env.GITHUB_ACTIONS?this._handleGitHubActionsGrouping(t):console.log(t);return}this._spinnerStep=t}_handleGitHubActionsGrouping(t){let r={syncing:"Syncing Code",archiving:"Syncing Code",uploading:"Syncing Code","finishing upload":"Syncing Code",processing:"Syncing Code","installing dependencies":"Building",building:"Building",optimizing:"Building",packaging:"Deploying","building source code archive":"Deploying",deploying:"Deploying"},n=null;for(let[i,s]of Object.entries(r))if(t.toLowerCase().includes(i)){n=s;break}n&&n!==this._ciGroupActive&&(this._ciGroupActive&&console.log("::endgroup::"),this._ciGroupActive=n,console.log(`::group::${n}`)),console.log(t),this._lastSpinnerStep=t}_closeGitHubActionsGroup(){process.env.GITHUB_ACTIONS&&this._ciGroupActive&&(console.log("::endgroup::"),this._ciGroupActive=null)}pause(){this._clearIntervals(),this._switchView({viewType:"pause"}),this._eraseCursorLineAndBelow()}async prompt(t,r={}){for(this._isPromptActive=!0,r.default&&(this.inputValue=r.default),this.viewInput(t);!this._promptResponse;)await xu(50);let n=this._promptResponse;return this.logInfo(`You've entered ${this.styles.bold(n)}.`),this._promptResponse=null,this._isPromptActive=!1,n}async promptServiceName(t=null){let r=await this.prompt("Enter a name for your app",{default:t});return r.match(/^[a-z0-9-]+$/)?r:(this.logError("App name must consist only of lowercase characters and hyphens. Please try again."),await this.promptServiceName())}async confirm(t=!1,r){r&&this.logQuestion(r);let n=["no","yes"],i=await this.select(t?n.reverse():n);return i==="yes"}async select(t=[],r=0){if(clearInterval(this._timerInterval),clearInterval(this._spinnerInterval),clearInterval(this._inputSpinnerInterval),this._timerInterval=void 0,this._spinnerInterval=void 0,this._inputSpinnerInterval=void 0,this._selectItems=t,this._selectedItemIndex=r,this._switchView({viewType:"select"}),this._selectItems.length===1)return this._selectedItem=this._selectItems[0],this._selectedItem;for(;!this._selectedItem;)await xu(50);let n=this._selectedItem;return typeof n=="object"?this.logInfo(`You've selected ${this.styles.bold(n.title)}.`):this.logInfo(`You've selected ${this.styles.bold(n)}.`),this._selectedItem=null,this._selectedItemIndex=null,this._selectItems=[],n}async selectOrg(t,r){this.viewSpinner("Loading");let n,i=(t.orgs||[]).map(s=>s.orgName);return i.length>1?(this.logInfo(r||"Please select an organization."),n=await this.select(i)):n=i[0],n}async selectService(t,r){let n;this.viewSpinner("Loading");let i=(await t.listServicesWithInstances()).map(s=>s.serviceName);return _e.debug({servicesList:i},"select service"),i.length>1?(this.logInfo(r||"Please select a service."),n=await this.select(i)):n=i[0],n}async selectInstance({service:t,instanceType:r,instanceName:n,message:i}){let o=(await(t==null?void 0:t.listInstances().catch(()=>[]))||[]).filter(p=>!r||p.instanceType===r).map(p=>({instanceName:p.instanceName,region:p.region,displayRegion:p.region||"",display:`${p.instanceName} (${p.region})`}));if(n)return o.find(p=>p.instanceName===n)||{instanceName:n,isNewInstance:!0};if(o.length===0)return{instanceName:void 0};if(o.length===1)return{instanceName:o[0].instanceName,isNewInstance:!1};this.logInfo(i||"Please select a stage.");let a=await this.select(o.map(p=>p.display));return{instanceName:o.find(p=>p.display===a).instanceName,isNewInstance:!1}}logSuccess(t,r=0){this._closeGitHubActionsGroup(),this.log(`${this.icons.tick} ${t}`,r)}logError(t,r=0){this._closeGitHubActionsGroup(),this.log(`${this.icons.cross} ${this.styles.bold(this.styles.red(t))}`,r)}logCancelled(){this.logError("Cancelled")}logInfo(t,r=0){this.log(`${this.icons.info} ${t}`,r)}logWarning(t,r=0){this.log(`${this.icons.warning} ${t}`,r)}logQuestion(t,r=0){this.log(`${this.icons.question} ${t}`,r)}logGroup(t,r=!0){t.forEach((n,i)=>{let o=r&&i===0?`${this.icons.arrow} ${this.styles.bold(n)}`:` ${this.icons.dot} ${n}`;this.log(o,i>0?2:0)})}logUrl(t,r=0){this.log(`${this.icons.arrow} ${t}`,r)}logTime(t,r=0){this.log(`${this.styles.dim(`${new Date(Date.now()).toLocaleTimeString()} ${this.icons.line}`)} ${t}`,r)}log(t="",r=0){this._ensureTopPadding(),this._eraseCursorLineAndBelow(),this._log(`${" ".repeat(r)}${t}
292
292
  `),this._view()}logSpace(){this.log(" ")}write(t="",r){let{error:n=!1,subprocess:i=!1}=r||{};i?this._log(t,{error:n}):(this._ensureTopPadding(),this._eraseCursorLineAndBelow(),this._log(t,{error:n}),this._view())}onQuit(t){this._onQuit=t}async quit(t="Stopped"){return this.inputValue="",this._clearIntervals(),this._quitting||this.logError(t),this._eraseCursorLineAndBelow(),!this._quitting&&this._onQuit&&(this._quitting=!0,await mre(this._onQuit(),1e3)),this.isDevServerActive&&await fi.stop(this,{orgName:this.orgName,serviceName:this.serviceName}),this._stop()}async startSession(){var t;try{await this.project.init()}catch(r){return await this.quit(`Something went wrong while starting the session: ${r.message}`)}if(!this.project)return await this.quit("Project was not initialized");this.tutorial.inProgress&&((t=this._suggestions)==null||t.push("skip","next","done")),this.tutorial.inProgress||await this.project.boot()}async checkForAmptPackageUpdates(){this.fs.shouldCheckForAmptDependencyUpdates()&&!this.isWebIde&&(this._startBackgroundPackageUpdateCheck(),this.fs.writeLastDependencyCheck()),this._displayCachedPackageUpdateNotification()}_startBackgroundPackageUpdateCheck(){try{if(!this.fs.serviceRoot||!this.fs.serviceFile){_e.debug({hasServiceRoot:!!this.fs.serviceRoot,hasServiceFile:!!this.fs.serviceFile},"Skipping background package update check - no service root or service file");return}let t=__dirname.indexOf("/src/context")===-1?Xs.default.resolve(__dirname,"workers","package-update.js"):Xs.default.resolve(__dirname,"..","workers","package-update.mjs"),r=Xs.default.join(this.fs.serviceRoot,".ampt");kc.default.existsSync(r)||kc.default.mkdirSync(r,{recursive:!0}),_e.debug({packageUpdateWorkerPath:t,configDir:r},"Starting background package update check worker");let n=new _V.Worker(t,{execArgv:[]});n.postMessage({packageJsonPath:Xs.default.join(this.fs.serviceRoot,"package.json"),nodeModulesPath:Xs.default.join(this.fs.serviceRoot,"node_modules"),configDir:r}),n.on("message",({err:i,res:s})=>{i?_e.debug({err:i},"Background package update check failed"):_e.debug({res:s},"Background package update check completed"),n.terminate()}),n.on("error",i=>{_e.debug({err:i},"Background package update check error"),n.terminate()})}catch(t){_e.debug({err:t},"Failed to start background package update check")}}_displayCachedPackageUpdateNotification(){try{if(!this.fs.serviceRoot){_e.warn("Cannot display cached package update notification - no service root");return}let t=Xs.default.join(this.fs.serviceRoot,".ampt","package-updates-available.json");if(kc.default.existsSync(t)){let r=kc.default.readFileSync(t,"utf-8"),n=JSON.parse(r);if(n.packages&&n.packages.length>0){this.logInfo(`${this.icons.info} Package updates available:`);for(let i of n.packages){let s=i.majorChange?this.styles.red("(major)"):this.styles.yellow("(minor)");this.logInfo(` ${i.name}: ${this.styles.dim(i.currentVersion)} \u2192 ${this.styles.purple(i.latestVersion)} ${s}`)}this.logInfo(` ${this.styles.dim("Update these packages using your package manager when ready")}`)}}}catch(t){_e.debug({err:t},"Failed to read package update cache")}}async isAmptShellRunning(t){let{orgName:r,serviceName:n}=t;try{let i=zf(r,n),s=JSON.parse(await(0,J1e.readFile)(i,"utf8"));return rF(s.pid)?!0:((0,tm.removeSync)(zf(r,n)),!1)}catch{return!1}}async writeAmptShellActivityFile(t){let{orgName:r,serviceName:n}=t,i=zf(r,n);(0,tm.ensureFileSync)(i),(0,tm.writeFileSync)(i,JSON.stringify({pid:process.pid},null,4))}devServerOn(){this.isDevServerActive=!0,this.viewInput()}devServerOff(){this.isDevServerActive=!1,this.viewInput()}buildRunning(t){this.buildRunningInShell=t}bindService({orgName:t,serviceName:r}){this.orgName=t,this.serviceName=r}_switchView({viewType:t,viewMessage:r}){return t&&(this._viewType=t),typeof r<"u"&&(this._viewMessage=r),this._staticViewInputMsg&&(this._viewMessage=this._staticViewInputMsg),this._view()}_stop(t=0){this._clearIntervals(),process.stdin.pause(),this._eraseCursorLineAndBelow(),t===0&&this._log(`
293
293
  `),this._showCursor();try{if(/^win/.test(process.platform))(0,IV.execSync)(`taskkill /PID ${process.pid} /T /F`);else try{process.kill(-process.pid,"SIGINT")}catch{process.kill(-process.ppid,"SIGINT")}}catch(r){_e.debug({error:r.message},"process.kill failed"),process.env.SLS_DEBUG&&this._log(r.message)}process.exit(t)}_clearIntervals(){clearInterval(this._timerInterval),clearInterval(this._spinnerInterval),clearInterval(this._inputSpinnerInterval),clearInterval(this._tipsInterval),clearInterval(this._lastSyncedAtInterval),this._timerInterval=void 0,this._spinnerInterval=void 0,this._inputSpinnerInterval=void 0,this._tipsInterval=void 0,this._lastSyncedAtInterval=void 0}_parseCommand(t){var a,u;let r=t&&t.length>0?Ire(t):process.argv.slice(2),n=(0,vV.default)(r);this.command=(a=n._[0])==null?void 0:a.toLowerCase(),this.args=(u=n._)==null?void 0:u.slice(1);let{_:i,...s}=n;this.options=Object.assign({},this.startupOptions,s),this.argv=r,(this.options.help||this.options.h)&&(this.command="help"),(this.options.version||this.options.v)&&(this.command="version"),this.names=l9(this.args[0]),this.names.orgName=this.names.orgName||this.options.org,this.names.serviceName=this.names.serviceName||this.options.app,this.names.instanceName=this.names.instanceName||this.options.stage||this.options.env||this.options.instance,this.options.stage&&this.logWarning(`The ${this.styles.bold("--stage")} option is deprecated, and will be removed in a future release. Please use ${this.styles.bold("--env")} instead.`),this.options.instance&&this.logWarning(`The ${this.styles.bold("--instance")} option is deprecated, and will be removed in a future release. Please use ${this.styles.bold("--env")} instead.`),t==="start"&&delete Tb.start,!t&&(!this.command||this.command==="start")&&(this.command="start"),this.command==="dev"&&(this.isShellActive?(this.args[0]=this.command,this.command="run"):(this.command="start",this.options.dev=!0)),this.command==="build"&&(this.args[0]=this.command,this.command="run"),this.command==="npm"&&(this.command=this.args[0],this.args.shift(),this.argv.shift()),this.isAnimationEnabled=this.options.animation!==!1,_e.debug({args:this.args},"cli args"),_e.debug({...this.options},"cli options"),_e.debug({...this.names},"cli names")}_logLogo(){if(!this.showLogo)return;let t=Nb.default.EOL;t+="ampt ",t+=`${this.icons.bolt}`,process.env.AMPT_STAGE!=="prod"&&(t+=`(${process.env.AMPT_STAGE})`),this.isBeta&&(t+=`${this.styles.dim("[beta]")}`),t+=Nb.default.EOL,this._log(t)}_log(t,r){let{error:n=!1}=r||{};n?process.stderr.write(t):process.stdout.write(t)}_showCursor(){this._log(Kp.default.cursorShow)}_hideCursor(){this._log(Kp.default.cursorHide)}_moveCursorLeft(){this._log(Kp.default.cursorLeft)}_moveCursorUp(t){this._log(Kp.default.cursorUp(t))}_eraseCursorLineAndBelow(){this._log(Kp.default.eraseDown)}_restorCursorPosition(t){let r=this._getRelativeVerticalCursorPosition(t);this._moveCursorUp(r),this._moveCursorLeft()}_getRelativeVerticalCursorPosition(t){let n=(0,Y1e.default)(t).split(`
294
294
  `),i=n.length;for(let o of n){let a=Number(o.length),u=Number(process.stdout.columns),p=Math.floor(a/u);i+=p}return 1+i}_view(){this._hideCursor();let t=this._getView();t&&(this._eraseCursorLineAndBelow(),this._log(`