@allbridge/bridge-core-sdk 3.33.0 → 3.34.0-alpha.1
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/browser/index.js +2 -2
- package/dist/browser/index.js.map +3 -3
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/index.js.map +3 -3
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +3 -3
- package/dist/src/services/bridge/evm/index.js +5 -15
- package/dist/src/services/bridge/evm/index.js.map +1 -1
- package/dist/src/services/bridge/sol/bridge-tx-service.js +7 -8
- package/dist/src/services/bridge/sol/bridge-tx-service.js.map +1 -1
- package/dist/src/services/models/abi/CctpBridge.d.ts +11 -9
- package/dist/src/services/models/abi/CctpBridge.js +14 -11
- package/dist/src/services/models/abi/CctpBridge.js.map +1 -1
- package/dist/src/services/models/sol/types/cctp_v2_bridge.d.ts +139 -33
- package/dist/src/services/models/sol/types/cctp_v2_bridge.js.map +1 -1
- package/dist/src/services/models/sol/types/cctp_v2_bridge.json +140 -34
- package/dist/src/services/models/srb/cctp-bridge-contract.d.ts +0 -13
- package/dist/src/services/models/srb/cctp-bridge-contract.js +0 -2
- package/dist/src/services/models/srb/cctp-bridge-contract.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/package.json +1 -1
package/dist/browser/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
var Jr=Object.defineProperty;var Ss=Object.getOwnPropertyDescriptor;var ks=Object.getOwnPropertyNames;var Ls=Object.prototype.hasOwnProperty;var Fn=(o,a)=>{for(var i in a)Jr(o,i,{get:a[i],enumerable:!0})},Hr=(o,a,i,r)=>{if(a&&typeof a=="object"||typeof a=="function")for(let s of ks(a))!Ls.call(o,s)&&s!==i&&Jr(o,s,{get:()=>a[s],enumerable:!(r=Ss(a,s))||r.enumerable});return o},$e=(o,a,i)=>(Hr(o,a,"default"),i&&Hr(i,a,"default"));var Nn={},jr=!1;function Ms(){if(jr)return Nn;jr=!0,Nn.byteLength=l,Nn.toByteArray=b,Nn.fromByteArray=f;for(var o=[],a=[],i=typeof Uint8Array<"u"?Uint8Array:Array,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,d=r.length;s<d;++s)o[s]=r[s],a[r.charCodeAt(s)]=s;a[45]=62,a[95]=63;function A(v){var R=v.length;if(R%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var F=v.indexOf("=");F===-1&&(F=R);var N=F===R?0:4-F%4;return[F,N]}function l(v){var R=A(v),F=R[0],N=R[1];return(F+N)*3/4-N}function u(v,R,F){return(R+F)*3/4-F}function b(v){var R,F=A(v),N=F[0],G=F[1],B=new i(u(v,N,G)),P=0,V=G>0?N-4:N,S;for(S=0;S<V;S+=4)R=a[v.charCodeAt(S)]<<18|a[v.charCodeAt(S+1)]<<12|a[v.charCodeAt(S+2)]<<6|a[v.charCodeAt(S+3)],B[P++]=R>>16&255,B[P++]=R>>8&255,B[P++]=R&255;return G===2&&(R=a[v.charCodeAt(S)]<<2|a[v.charCodeAt(S+1)]>>4,B[P++]=R&255),G===1&&(R=a[v.charCodeAt(S)]<<10|a[v.charCodeAt(S+1)]<<4|a[v.charCodeAt(S+2)]>>2,B[P++]=R>>8&255,B[P++]=R&255),B}function y(v){return o[v>>18&63]+o[v>>12&63]+o[v>>6&63]+o[v&63]}function C(v,R,F){for(var N,G=[],B=R;B<F;B+=3)N=(v[B]<<16&16711680)+(v[B+1]<<8&65280)+(v[B+2]&255),G.push(y(N));return G.join("")}function f(v){for(var R,F=v.length,N=F%3,G=[],B=16383,P=0,V=F-N;P<V;P+=B)G.push(C(v,P,P+B>V?V:P+B));return N===1?(R=v[F-1],G.push(o[R>>2]+o[R<<4&63]+"==")):N===2&&(R=(v[F-2]<<8)+v[F-1],G.push(o[R>>10]+o[R>>4&63]+o[R<<2&63]+"=")),G.join("")}return Nn}var pa={},zr=!1;function xs(){if(zr)return pa;zr=!0;return pa.read=function(o,a,i,r,s){var d,A,l=s*8-r-1,u=(1<<l)-1,b=u>>1,y=-7,C=i?s-1:0,f=i?-1:1,v=o[a+C];for(C+=f,d=v&(1<<-y)-1,v>>=-y,y+=l;y>0;d=d*256+o[a+C],C+=f,y-=8);for(A=d&(1<<-y)-1,d>>=-y,y+=r;y>0;A=A*256+o[a+C],C+=f,y-=8);if(d===0)d=1-b;else{if(d===u)return A?NaN:(v?-1:1)*(1/0);A=A+Math.pow(2,r),d=d-b}return(v?-1:1)*A*Math.pow(2,d-r)},pa.write=function(o,a,i,r,s,d){var A,l,u,b=d*8-s-1,y=(1<<b)-1,C=y>>1,f=s===23?Math.pow(2,-24)-Math.pow(2,-77):0,v=r?0:d-1,R=r?1:-1,F=a<0||a===0&&1/a<0?1:0;for(a=Math.abs(a),isNaN(a)||a===1/0?(l=isNaN(a)?1:0,A=y):(A=Math.floor(Math.log(a)/Math.LN2),a*(u=Math.pow(2,-A))<1&&(A--,u*=2),A+C>=1?a+=f/u:a+=f*Math.pow(2,1-C),a*u>=2&&(A++,u/=2),A+C>=y?(l=0,A=y):A+C>=1?(l=(a*u-1)*Math.pow(2,s),A=A+C):(l=a*Math.pow(2,C-1)*Math.pow(2,s),A=0));s>=8;o[i+v]=l&255,v+=R,l/=256,s-=8);for(A=A<<s|l,b+=s;b>0;o[i+v]=A&255,v+=R,A/=256,b-=8);o[i+v-R]|=F*128},pa}var Jt={},Or=!1;function Qr(){if(Or)return Jt;Or=!0;let o=Ms(),a=xs(),i=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;Jt.Buffer=A,Jt.SlowBuffer=G,Jt.INSPECT_MAX_BYTES=50;let r=2147483647;Jt.kMaxLength=r,A.TYPED_ARRAY_SUPPORT=s(),!A.TYPED_ARRAY_SUPPORT&&typeof console<"u"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function s(){try{let p=new Uint8Array(1),c={foo:function(){return 42}};return Object.setPrototypeOf(c,Uint8Array.prototype),Object.setPrototypeOf(p,c),p.foo()===42}catch{return!1}}Object.defineProperty(A.prototype,"parent",{enumerable:!0,get:function(){if(A.isBuffer(this))return this.buffer}}),Object.defineProperty(A.prototype,"offset",{enumerable:!0,get:function(){if(A.isBuffer(this))return this.byteOffset}});function d(p){if(p>r)throw new RangeError('The value "'+p+'" is invalid for option "size"');let c=new Uint8Array(p);return Object.setPrototypeOf(c,A.prototype),c}function A(p,c,g){if(typeof p=="number"){if(typeof c=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return y(p)}return l(p,c,g)}A.poolSize=8192;function l(p,c,g){if(typeof p=="string")return C(p,c);if(ArrayBuffer.isView(p))return v(p);if(p==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof p);if(lt(p,ArrayBuffer)||p&<(p.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(lt(p,SharedArrayBuffer)||p&<(p.buffer,SharedArrayBuffer)))return R(p,c,g);if(typeof p=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');let m=p.valueOf&&p.valueOf();if(m!=null&&m!==p)return A.from(m,c,g);let h=F(p);if(h)return h;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof p[Symbol.toPrimitive]=="function")return A.from(p[Symbol.toPrimitive]("string"),c,g);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof p)}A.from=function(p,c,g){return l(p,c,g)},Object.setPrototypeOf(A.prototype,Uint8Array.prototype),Object.setPrototypeOf(A,Uint8Array);function u(p){if(typeof p!="number")throw new TypeError('"size" argument must be of type number');if(p<0)throw new RangeError('The value "'+p+'" is invalid for option "size"')}function b(p,c,g){return u(p),p<=0?d(p):c!==void 0?typeof g=="string"?d(p).fill(c,g):d(p).fill(c):d(p)}A.alloc=function(p,c,g){return b(p,c,g)};function y(p){return u(p),d(p<0?0:N(p)|0)}A.allocUnsafe=function(p){return y(p)},A.allocUnsafeSlow=function(p){return y(p)};function C(p,c){if((typeof c!="string"||c==="")&&(c="utf8"),!A.isEncoding(c))throw new TypeError("Unknown encoding: "+c);let g=B(p,c)|0,m=d(g),h=m.write(p,c);return h!==g&&(m=m.slice(0,h)),m}function f(p){let c=p.length<0?0:N(p.length)|0,g=d(c);for(let m=0;m<c;m+=1)g[m]=p[m]&255;return g}function v(p){if(lt(p,Uint8Array)){let c=new Uint8Array(p);return R(c.buffer,c.byteOffset,c.byteLength)}return f(p)}function R(p,c,g){if(c<0||p.byteLength<c)throw new RangeError('"offset" is outside of buffer bounds');if(p.byteLength<c+(g||0))throw new RangeError('"length" is outside of buffer bounds');let m;return c===void 0&&g===void 0?m=new Uint8Array(p):g===void 0?m=new Uint8Array(p,c):m=new Uint8Array(p,c,g),Object.setPrototypeOf(m,A.prototype),m}function F(p){if(A.isBuffer(p)){let c=N(p.length)|0,g=d(c);return g.length===0||p.copy(g,0,0,c),g}if(p.length!==void 0)return typeof p.length!="number"||Hi(p.length)?d(0):f(p);if(p.type==="Buffer"&&Array.isArray(p.data))return f(p.data)}function N(p){if(p>=r)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+r.toString(16)+" bytes");return p|0}function G(p){return+p!=p&&(p=0),A.alloc(+p)}A.isBuffer=function(c){return c!=null&&c._isBuffer===!0&&c!==A.prototype},A.compare=function(c,g){if(lt(c,Uint8Array)&&(c=A.from(c,c.offset,c.byteLength)),lt(g,Uint8Array)&&(g=A.from(g,g.offset,g.byteLength)),!A.isBuffer(c)||!A.isBuffer(g))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(c===g)return 0;let m=c.length,h=g.length;for(let T=0,Z=Math.min(m,h);T<Z;++T)if(c[T]!==g[T]){m=c[T],h=g[T];break}return m<h?-1:h<m?1:0},A.isEncoding=function(c){switch(String(c).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},A.concat=function(c,g){if(!Array.isArray(c))throw new TypeError('"list" argument must be an Array of Buffers');if(c.length===0)return A.alloc(0);let m;if(g===void 0)for(g=0,m=0;m<c.length;++m)g+=c[m].length;let h=A.allocUnsafe(g),T=0;for(m=0;m<c.length;++m){let Z=c[m];if(lt(Z,Uint8Array))T+Z.length>h.length?(A.isBuffer(Z)||(Z=A.from(Z)),Z.copy(h,T)):Uint8Array.prototype.set.call(h,Z,T);else if(A.isBuffer(Z))Z.copy(h,T);else throw new TypeError('"list" argument must be an Array of Buffers');T+=Z.length}return h};function B(p,c){if(A.isBuffer(p))return p.length;if(ArrayBuffer.isView(p)||lt(p,ArrayBuffer))return p.byteLength;if(typeof p!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof p);let g=p.length,m=arguments.length>2&&arguments[2]===!0;if(!m&&g===0)return 0;let h=!1;for(;;)switch(c){case"ascii":case"latin1":case"binary":return g;case"utf8":case"utf-8":return xi(p).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return g*2;case"hex":return g>>>1;case"base64":return xr(p).length;default:if(h)return m?-1:xi(p).length;c=(""+c).toLowerCase(),h=!0}}A.byteLength=B;function P(p,c,g){let m=!1;if((c===void 0||c<0)&&(c=0),c>this.length||((g===void 0||g>this.length)&&(g=this.length),g<=0)||(g>>>=0,c>>>=0,g<=c))return"";for(p||(p="utf8");;)switch(p){case"hex":return Fe(this,c,g);case"utf8":case"utf-8":return ce(this,c,g);case"ascii":return Ie(this,c,g);case"latin1":case"binary":return be(this,c,g);case"base64":return ne(this,c,g);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,c,g);default:if(m)throw new TypeError("Unknown encoding: "+p);p=(p+"").toLowerCase(),m=!0}}A.prototype._isBuffer=!0;function V(p,c,g){let m=p[c];p[c]=p[g],p[g]=m}A.prototype.swap16=function(){let c=this.length;if(c%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let g=0;g<c;g+=2)V(this,g,g+1);return this},A.prototype.swap32=function(){let c=this.length;if(c%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(let g=0;g<c;g+=4)V(this,g,g+3),V(this,g+1,g+2);return this},A.prototype.swap64=function(){let c=this.length;if(c%8!==0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(let g=0;g<c;g+=8)V(this,g,g+7),V(this,g+1,g+6),V(this,g+2,g+5),V(this,g+3,g+4);return this},A.prototype.toString=function(){let c=this.length;return c===0?"":arguments.length===0?ce(this,0,c):P.apply(this,arguments)},A.prototype.toLocaleString=A.prototype.toString,A.prototype.equals=function(c){if(!A.isBuffer(c))throw new TypeError("Argument must be a Buffer");return this===c?!0:A.compare(this,c)===0},A.prototype.inspect=function(){let c="",g=Jt.INSPECT_MAX_BYTES;return c=this.toString("hex",0,g).replace(/(.{2})/g,"$1 ").trim(),this.length>g&&(c+=" ... "),"<Buffer "+c+">"},i&&(A.prototype[i]=A.prototype.inspect),A.prototype.compare=function(c,g,m,h,T){if(lt(c,Uint8Array)&&(c=A.from(c,c.offset,c.byteLength)),!A.isBuffer(c))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof c);if(g===void 0&&(g=0),m===void 0&&(m=c?c.length:0),h===void 0&&(h=0),T===void 0&&(T=this.length),g<0||m>c.length||h<0||T>this.length)throw new RangeError("out of range index");if(h>=T&&g>=m)return 0;if(h>=T)return-1;if(g>=m)return 1;if(g>>>=0,m>>>=0,h>>>=0,T>>>=0,this===c)return 0;let Z=T-h,U=m-g,he=Math.min(Z,U),ye=this.slice(h,T),ve=c.slice(g,m);for(let pe=0;pe<he;++pe)if(ye[pe]!==ve[pe]){Z=ye[pe],U=ve[pe];break}return Z<U?-1:U<Z?1:0};function S(p,c,g,m,h){if(p.length===0)return-1;if(typeof g=="string"?(m=g,g=0):g>2147483647?g=2147483647:g<-2147483648&&(g=-2147483648),g=+g,Hi(g)&&(g=h?0:p.length-1),g<0&&(g=p.length+g),g>=p.length){if(h)return-1;g=p.length-1}else if(g<0)if(h)g=0;else return-1;if(typeof c=="string"&&(c=A.from(c,m)),A.isBuffer(c))return c.length===0?-1:M(p,c,g,m,h);if(typeof c=="number")return c=c&255,typeof Uint8Array.prototype.indexOf=="function"?h?Uint8Array.prototype.indexOf.call(p,c,g):Uint8Array.prototype.lastIndexOf.call(p,c,g):M(p,[c],g,m,h);throw new TypeError("val must be string, number or Buffer")}function M(p,c,g,m,h){let T=1,Z=p.length,U=c.length;if(m!==void 0&&(m=String(m).toLowerCase(),m==="ucs2"||m==="ucs-2"||m==="utf16le"||m==="utf-16le")){if(p.length<2||c.length<2)return-1;T=2,Z/=2,U/=2,g/=2}function he(ve,pe){return T===1?ve[pe]:ve.readUInt16BE(pe*T)}let ye;if(h){let ve=-1;for(ye=g;ye<Z;ye++)if(he(p,ye)===he(c,ve===-1?0:ye-ve)){if(ve===-1&&(ve=ye),ye-ve+1===U)return ve*T}else ve!==-1&&(ye-=ye-ve),ve=-1}else for(g+U>Z&&(g=Z-U),ye=g;ye>=0;ye--){let ve=!0;for(let pe=0;pe<U;pe++)if(he(p,ye+pe)!==he(c,pe)){ve=!1;break}if(ve)return ye}return-1}A.prototype.includes=function(c,g,m){return this.indexOf(c,g,m)!==-1},A.prototype.indexOf=function(c,g,m){return S(this,c,g,m,!0)},A.prototype.lastIndexOf=function(c,g,m){return S(this,c,g,m,!1)};function x(p,c,g,m){g=Number(g)||0;let h=p.length-g;m?(m=Number(m),m>h&&(m=h)):m=h;let T=c.length;m>T/2&&(m=T/2);let Z;for(Z=0;Z<m;++Z){let U=parseInt(c.substr(Z*2,2),16);if(Hi(U))return Z;p[g+Z]=U}return Z}function ae(p,c,g,m){return la(xi(c,p.length-g),p,g,m)}function se(p,c,g,m){return la(Gs(c),p,g,m)}function Ae(p,c,g,m){return la(xr(c),p,g,m)}function ie(p,c,g,m){return la(Vs(c,p.length-g),p,g,m)}A.prototype.write=function(c,g,m,h){if(g===void 0)h="utf8",m=this.length,g=0;else if(m===void 0&&typeof g=="string")h=g,m=this.length,g=0;else if(isFinite(g))g=g>>>0,isFinite(m)?(m=m>>>0,h===void 0&&(h="utf8")):(h=m,m=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let T=this.length-g;if((m===void 0||m>T)&&(m=T),c.length>0&&(m<0||g<0)||g>this.length)throw new RangeError("Attempt to write outside buffer bounds");h||(h="utf8");let Z=!1;for(;;)switch(h){case"hex":return x(this,c,g,m);case"utf8":case"utf-8":return ae(this,c,g,m);case"ascii":case"latin1":case"binary":return se(this,c,g,m);case"base64":return Ae(this,c,g,m);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ie(this,c,g,m);default:if(Z)throw new TypeError("Unknown encoding: "+h);h=(""+h).toLowerCase(),Z=!0}},A.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function ne(p,c,g){return c===0&&g===p.length?o.fromByteArray(p):o.fromByteArray(p.slice(c,g))}function ce(p,c,g){g=Math.min(p.length,g);let m=[],h=c;for(;h<g;){let T=p[h],Z=null,U=T>239?4:T>223?3:T>191?2:1;if(h+U<=g){let he,ye,ve,pe;switch(U){case 1:T<128&&(Z=T);break;case 2:he=p[h+1],(he&192)===128&&(pe=(T&31)<<6|he&63,pe>127&&(Z=pe));break;case 3:he=p[h+1],ye=p[h+2],(he&192)===128&&(ye&192)===128&&(pe=(T&15)<<12|(he&63)<<6|ye&63,pe>2047&&(pe<55296||pe>57343)&&(Z=pe));break;case 4:he=p[h+1],ye=p[h+2],ve=p[h+3],(he&192)===128&&(ye&192)===128&&(ve&192)===128&&(pe=(T&15)<<18|(he&63)<<12|(ye&63)<<6|ve&63,pe>65535&&pe<1114112&&(Z=pe))}}Z===null?(Z=65533,U=1):Z>65535&&(Z-=65536,m.push(Z>>>10&1023|55296),Z=56320|Z&1023),m.push(Z),h+=U}return Ce(m)}let le=4096;function Ce(p){let c=p.length;if(c<=le)return String.fromCharCode.apply(String,p);let g="",m=0;for(;m<c;)g+=String.fromCharCode.apply(String,p.slice(m,m+=le));return g}function Ie(p,c,g){let m="";g=Math.min(p.length,g);for(let h=c;h<g;++h)m+=String.fromCharCode(p[h]&127);return m}function be(p,c,g){let m="";g=Math.min(p.length,g);for(let h=c;h<g;++h)m+=String.fromCharCode(p[h]);return m}function Fe(p,c,g){let m=p.length;(!c||c<0)&&(c=0),(!g||g<0||g>m)&&(g=m);let h="";for(let T=c;T<g;++T)h+=Xs[p[T]];return h}function E(p,c,g){let m=p.slice(c,g),h="";for(let T=0;T<m.length-1;T+=2)h+=String.fromCharCode(m[T]+m[T+1]*256);return h}A.prototype.slice=function(c,g){let m=this.length;c=~~c,g=g===void 0?m:~~g,c<0?(c+=m,c<0&&(c=0)):c>m&&(c=m),g<0?(g+=m,g<0&&(g=0)):g>m&&(g=m),g<c&&(g=c);let h=this.subarray(c,g);return Object.setPrototypeOf(h,A.prototype),h};function Ye(p,c,g){if(p%1!==0||p<0)throw new RangeError("offset is not uint");if(p+c>g)throw new RangeError("Trying to access beyond buffer length")}A.prototype.readUintLE=A.prototype.readUIntLE=function(c,g,m){c=c>>>0,g=g>>>0,m||Ye(c,g,this.length);let h=this[c],T=1,Z=0;for(;++Z<g&&(T*=256);)h+=this[c+Z]*T;return h},A.prototype.readUintBE=A.prototype.readUIntBE=function(c,g,m){c=c>>>0,g=g>>>0,m||Ye(c,g,this.length);let h=this[c+--g],T=1;for(;g>0&&(T*=256);)h+=this[c+--g]*T;return h},A.prototype.readUint8=A.prototype.readUInt8=function(c,g){return c=c>>>0,g||Ye(c,1,this.length),this[c]},A.prototype.readUint16LE=A.prototype.readUInt16LE=function(c,g){return c=c>>>0,g||Ye(c,2,this.length),this[c]|this[c+1]<<8},A.prototype.readUint16BE=A.prototype.readUInt16BE=function(c,g){return c=c>>>0,g||Ye(c,2,this.length),this[c]<<8|this[c+1]},A.prototype.readUint32LE=A.prototype.readUInt32LE=function(c,g){return c=c>>>0,g||Ye(c,4,this.length),(this[c]|this[c+1]<<8|this[c+2]<<16)+this[c+3]*16777216},A.prototype.readUint32BE=A.prototype.readUInt32BE=function(c,g){return c=c>>>0,g||Ye(c,4,this.length),this[c]*16777216+(this[c+1]<<16|this[c+2]<<8|this[c+3])},A.prototype.readBigUInt64LE=Nt(function(c){c=c>>>0,rn(c,"offset");let g=this[c],m=this[c+7];(g===void 0||m===void 0)&&wn(c,this.length-8);let h=g+this[++c]*2**8+this[++c]*2**16+this[++c]*2**24,T=this[++c]+this[++c]*2**8+this[++c]*2**16+m*2**24;return BigInt(h)+(BigInt(T)<<BigInt(32))}),A.prototype.readBigUInt64BE=Nt(function(c){c=c>>>0,rn(c,"offset");let g=this[c],m=this[c+7];(g===void 0||m===void 0)&&wn(c,this.length-8);let h=g*2**24+this[++c]*2**16+this[++c]*2**8+this[++c],T=this[++c]*2**24+this[++c]*2**16+this[++c]*2**8+m;return(BigInt(h)<<BigInt(32))+BigInt(T)}),A.prototype.readIntLE=function(c,g,m){c=c>>>0,g=g>>>0,m||Ye(c,g,this.length);let h=this[c],T=1,Z=0;for(;++Z<g&&(T*=256);)h+=this[c+Z]*T;return T*=128,h>=T&&(h-=Math.pow(2,8*g)),h},A.prototype.readIntBE=function(c,g,m){c=c>>>0,g=g>>>0,m||Ye(c,g,this.length);let h=g,T=1,Z=this[c+--h];for(;h>0&&(T*=256);)Z+=this[c+--h]*T;return T*=128,Z>=T&&(Z-=Math.pow(2,8*g)),Z},A.prototype.readInt8=function(c,g){return c=c>>>0,g||Ye(c,1,this.length),this[c]&128?(255-this[c]+1)*-1:this[c]},A.prototype.readInt16LE=function(c,g){c=c>>>0,g||Ye(c,2,this.length);let m=this[c]|this[c+1]<<8;return m&32768?m|4294901760:m},A.prototype.readInt16BE=function(c,g){c=c>>>0,g||Ye(c,2,this.length);let m=this[c+1]|this[c]<<8;return m&32768?m|4294901760:m},A.prototype.readInt32LE=function(c,g){return c=c>>>0,g||Ye(c,4,this.length),this[c]|this[c+1]<<8|this[c+2]<<16|this[c+3]<<24},A.prototype.readInt32BE=function(c,g){return c=c>>>0,g||Ye(c,4,this.length),this[c]<<24|this[c+1]<<16|this[c+2]<<8|this[c+3]},A.prototype.readBigInt64LE=Nt(function(c){c=c>>>0,rn(c,"offset");let g=this[c],m=this[c+7];(g===void 0||m===void 0)&&wn(c,this.length-8);let h=this[c+4]+this[c+5]*2**8+this[c+6]*2**16+(m<<24);return(BigInt(h)<<BigInt(32))+BigInt(g+this[++c]*2**8+this[++c]*2**16+this[++c]*2**24)}),A.prototype.readBigInt64BE=Nt(function(c){c=c>>>0,rn(c,"offset");let g=this[c],m=this[c+7];(g===void 0||m===void 0)&&wn(c,this.length-8);let h=(g<<24)+this[++c]*2**16+this[++c]*2**8+this[++c];return(BigInt(h)<<BigInt(32))+BigInt(this[++c]*2**24+this[++c]*2**16+this[++c]*2**8+m)}),A.prototype.readFloatLE=function(c,g){return c=c>>>0,g||Ye(c,4,this.length),a.read(this,c,!0,23,4)},A.prototype.readFloatBE=function(c,g){return c=c>>>0,g||Ye(c,4,this.length),a.read(this,c,!1,23,4)},A.prototype.readDoubleLE=function(c,g){return c=c>>>0,g||Ye(c,8,this.length),a.read(this,c,!0,52,8)},A.prototype.readDoubleBE=function(c,g){return c=c>>>0,g||Ye(c,8,this.length),a.read(this,c,!1,52,8)};function He(p,c,g,m,h,T){if(!A.isBuffer(p))throw new TypeError('"buffer" argument must be a Buffer instance');if(c>h||c<T)throw new RangeError('"value" argument is out of bounds');if(g+m>p.length)throw new RangeError("Index out of range")}A.prototype.writeUintLE=A.prototype.writeUIntLE=function(c,g,m,h){if(c=+c,g=g>>>0,m=m>>>0,!h){let U=Math.pow(2,8*m)-1;He(this,c,g,m,U,0)}let T=1,Z=0;for(this[g]=c&255;++Z<m&&(T*=256);)this[g+Z]=c/T&255;return g+m},A.prototype.writeUintBE=A.prototype.writeUIntBE=function(c,g,m,h){if(c=+c,g=g>>>0,m=m>>>0,!h){let U=Math.pow(2,8*m)-1;He(this,c,g,m,U,0)}let T=m-1,Z=1;for(this[g+T]=c&255;--T>=0&&(Z*=256);)this[g+T]=c/Z&255;return g+m},A.prototype.writeUint8=A.prototype.writeUInt8=function(c,g,m){return c=+c,g=g>>>0,m||He(this,c,g,1,255,0),this[g]=c&255,g+1},A.prototype.writeUint16LE=A.prototype.writeUInt16LE=function(c,g,m){return c=+c,g=g>>>0,m||He(this,c,g,2,65535,0),this[g]=c&255,this[g+1]=c>>>8,g+2},A.prototype.writeUint16BE=A.prototype.writeUInt16BE=function(c,g,m){return c=+c,g=g>>>0,m||He(this,c,g,2,65535,0),this[g]=c>>>8,this[g+1]=c&255,g+2},A.prototype.writeUint32LE=A.prototype.writeUInt32LE=function(c,g,m){return c=+c,g=g>>>0,m||He(this,c,g,4,4294967295,0),this[g+3]=c>>>24,this[g+2]=c>>>16,this[g+1]=c>>>8,this[g]=c&255,g+4},A.prototype.writeUint32BE=A.prototype.writeUInt32BE=function(c,g,m){return c=+c,g=g>>>0,m||He(this,c,g,4,4294967295,0),this[g]=c>>>24,this[g+1]=c>>>16,this[g+2]=c>>>8,this[g+3]=c&255,g+4};function Vr(p,c,g,m,h){Mr(c,m,h,p,g,7);let T=Number(c&BigInt(4294967295));p[g++]=T,T=T>>8,p[g++]=T,T=T>>8,p[g++]=T,T=T>>8,p[g++]=T;let Z=Number(c>>BigInt(32)&BigInt(4294967295));return p[g++]=Z,Z=Z>>8,p[g++]=Z,Z=Z>>8,p[g++]=Z,Z=Z>>8,p[g++]=Z,g}function Xr(p,c,g,m,h){Mr(c,m,h,p,g,7);let T=Number(c&BigInt(4294967295));p[g+7]=T,T=T>>8,p[g+6]=T,T=T>>8,p[g+5]=T,T=T>>8,p[g+4]=T;let Z=Number(c>>BigInt(32)&BigInt(4294967295));return p[g+3]=Z,Z=Z>>8,p[g+2]=Z,Z=Z>>8,p[g+1]=Z,Z=Z>>8,p[g]=Z,g+8}A.prototype.writeBigUInt64LE=Nt(function(c,g=0){return Vr(this,c,g,BigInt(0),BigInt("0xffffffffffffffff"))}),A.prototype.writeBigUInt64BE=Nt(function(c,g=0){return Xr(this,c,g,BigInt(0),BigInt("0xffffffffffffffff"))}),A.prototype.writeIntLE=function(c,g,m,h){if(c=+c,g=g>>>0,!h){let he=Math.pow(2,8*m-1);He(this,c,g,m,he-1,-he)}let T=0,Z=1,U=0;for(this[g]=c&255;++T<m&&(Z*=256);)c<0&&U===0&&this[g+T-1]!==0&&(U=1),this[g+T]=(c/Z>>0)-U&255;return g+m},A.prototype.writeIntBE=function(c,g,m,h){if(c=+c,g=g>>>0,!h){let he=Math.pow(2,8*m-1);He(this,c,g,m,he-1,-he)}let T=m-1,Z=1,U=0;for(this[g+T]=c&255;--T>=0&&(Z*=256);)c<0&&U===0&&this[g+T+1]!==0&&(U=1),this[g+T]=(c/Z>>0)-U&255;return g+m},A.prototype.writeInt8=function(c,g,m){return c=+c,g=g>>>0,m||He(this,c,g,1,127,-128),c<0&&(c=255+c+1),this[g]=c&255,g+1},A.prototype.writeInt16LE=function(c,g,m){return c=+c,g=g>>>0,m||He(this,c,g,2,32767,-32768),this[g]=c&255,this[g+1]=c>>>8,g+2},A.prototype.writeInt16BE=function(c,g,m){return c=+c,g=g>>>0,m||He(this,c,g,2,32767,-32768),this[g]=c>>>8,this[g+1]=c&255,g+2},A.prototype.writeInt32LE=function(c,g,m){return c=+c,g=g>>>0,m||He(this,c,g,4,2147483647,-2147483648),this[g]=c&255,this[g+1]=c>>>8,this[g+2]=c>>>16,this[g+3]=c>>>24,g+4},A.prototype.writeInt32BE=function(c,g,m){return c=+c,g=g>>>0,m||He(this,c,g,4,2147483647,-2147483648),c<0&&(c=4294967295+c+1),this[g]=c>>>24,this[g+1]=c>>>16,this[g+2]=c>>>8,this[g+3]=c&255,g+4},A.prototype.writeBigInt64LE=Nt(function(c,g=0){return Vr(this,c,g,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),A.prototype.writeBigInt64BE=Nt(function(c,g=0){return Xr(this,c,g,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function Pr(p,c,g,m,h,T){if(g+m>p.length)throw new RangeError("Index out of range");if(g<0)throw new RangeError("Index out of range")}function Sr(p,c,g,m,h){return c=+c,g=g>>>0,h||Pr(p,c,g,4),a.write(p,c,g,m,23,4),g+4}A.prototype.writeFloatLE=function(c,g,m){return Sr(this,c,g,!0,m)},A.prototype.writeFloatBE=function(c,g,m){return Sr(this,c,g,!1,m)};function kr(p,c,g,m,h){return c=+c,g=g>>>0,h||Pr(p,c,g,8),a.write(p,c,g,m,52,8),g+8}A.prototype.writeDoubleLE=function(c,g,m){return kr(this,c,g,!0,m)},A.prototype.writeDoubleBE=function(c,g,m){return kr(this,c,g,!1,m)},A.prototype.copy=function(c,g,m,h){if(!A.isBuffer(c))throw new TypeError("argument should be a Buffer");if(m||(m=0),!h&&h!==0&&(h=this.length),g>=c.length&&(g=c.length),g||(g=0),h>0&&h<m&&(h=m),h===m||c.length===0||this.length===0)return 0;if(g<0)throw new RangeError("targetStart out of bounds");if(m<0||m>=this.length)throw new RangeError("Index out of range");if(h<0)throw new RangeError("sourceEnd out of bounds");h>this.length&&(h=this.length),c.length-g<h-m&&(h=c.length-g+m);let T=h-m;return this===c&&typeof Uint8Array.prototype.copyWithin=="function"?this.copyWithin(g,m,h):Uint8Array.prototype.set.call(c,this.subarray(m,h),g),T},A.prototype.fill=function(c,g,m,h){if(typeof c=="string"){if(typeof g=="string"?(h=g,g=0,m=this.length):typeof m=="string"&&(h=m,m=this.length),h!==void 0&&typeof h!="string")throw new TypeError("encoding must be a string");if(typeof h=="string"&&!A.isEncoding(h))throw new TypeError("Unknown encoding: "+h);if(c.length===1){let Z=c.charCodeAt(0);(h==="utf8"&&Z<128||h==="latin1")&&(c=Z)}}else typeof c=="number"?c=c&255:typeof c=="boolean"&&(c=Number(c));if(g<0||this.length<g||this.length<m)throw new RangeError("Out of range index");if(m<=g)return this;g=g>>>0,m=m===void 0?this.length:m>>>0,c||(c=0);let T;if(typeof c=="number")for(T=g;T<m;++T)this[T]=c;else{let Z=A.isBuffer(c)?c:A.from(c,h),U=Z.length;if(U===0)throw new TypeError('The value "'+c+'" is invalid for argument "value"');for(T=0;T<m-g;++T)this[T+g]=Z[T%U]}return this};let an={};function Mi(p,c,g){an[p]=class extends g{constructor(){super(),Object.defineProperty(this,"message",{value:c.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${p}]`,this.stack,delete this.name}get code(){return p}set code(h){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:h,writable:!0})}toString(){return`${this.name} [${p}]: ${this.message}`}}}Mi("ERR_BUFFER_OUT_OF_BOUNDS",function(p){return p?`${p} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"},RangeError),Mi("ERR_INVALID_ARG_TYPE",function(p,c){return`The "${p}" argument must be of type number. Received type ${typeof c}`},TypeError),Mi("ERR_OUT_OF_RANGE",function(p,c,g){let m=`The value of "${p}" is out of range.`,h=g;return Number.isInteger(g)&&Math.abs(g)>2**32?h=Lr(String(g)):typeof g=="bigint"&&(h=String(g),(g>BigInt(2)**BigInt(32)||g<-(BigInt(2)**BigInt(32)))&&(h=Lr(h)),h+="n"),m+=` It must be ${c}. Received ${h}`,m},RangeError);function Lr(p){let c="",g=p.length,m=p[0]==="-"?1:0;for(;g>=m+4;g-=3)c=`_${p.slice(g-3,g)}${c}`;return`${p.slice(0,g)}${c}`}function Fs(p,c,g){rn(c,"offset"),(p[c]===void 0||p[c+g]===void 0)&&wn(c,p.length-(g+1))}function Mr(p,c,g,m,h,T){if(p>g||p<c){let Z=typeof c=="bigint"?"n":"",U;throw c===0||c===BigInt(0)?U=`>= 0${Z} and < 2${Z} ** ${(T+1)*8}${Z}`:U=`>= -(2${Z} ** ${(T+1)*8-1}${Z}) and < 2 ** ${(T+1)*8-1}${Z}`,new an.ERR_OUT_OF_RANGE("value",U,p)}Fs(m,h,T)}function rn(p,c){if(typeof p!="number")throw new an.ERR_INVALID_ARG_TYPE(c,"number",p)}function wn(p,c,g){throw Math.floor(p)!==p?(rn(p,g),new an.ERR_OUT_OF_RANGE("offset","an integer",p)):c<0?new an.ERR_BUFFER_OUT_OF_BOUNDS:new an.ERR_OUT_OF_RANGE("offset",`>= 0 and <= ${c}`,p)}let Ns=/[^+/0-9A-Za-z-_]/g;function Zs(p){if(p=p.split("=")[0],p=p.trim().replace(Ns,""),p.length<2)return"";for(;p.length%4!==0;)p=p+"=";return p}function xi(p,c){c=c||1/0;let g,m=p.length,h=null,T=[];for(let Z=0;Z<m;++Z){if(g=p.charCodeAt(Z),g>55295&&g<57344){if(!h){if(g>56319){(c-=3)>-1&&T.push(239,191,189);continue}else if(Z+1===m){(c-=3)>-1&&T.push(239,191,189);continue}h=g;continue}if(g<56320){(c-=3)>-1&&T.push(239,191,189),h=g;continue}g=(h-55296<<10|g-56320)+65536}else h&&(c-=3)>-1&&T.push(239,191,189);if(h=null,g<128){if((c-=1)<0)break;T.push(g)}else if(g<2048){if((c-=2)<0)break;T.push(g>>6|192,g&63|128)}else if(g<65536){if((c-=3)<0)break;T.push(g>>12|224,g>>6&63|128,g&63|128)}else if(g<1114112){if((c-=4)<0)break;T.push(g>>18|240,g>>12&63|128,g>>6&63|128,g&63|128)}else throw new Error("Invalid code point")}return T}function Gs(p){let c=[];for(let g=0;g<p.length;++g)c.push(p.charCodeAt(g)&255);return c}function Vs(p,c){let g,m,h,T=[];for(let Z=0;Z<p.length&&!((c-=2)<0);++Z)g=p.charCodeAt(Z),m=g>>8,h=g%256,T.push(h),T.push(m);return T}function xr(p){return o.toByteArray(Zs(p))}function la(p,c,g,m){let h;for(h=0;h<m&&!(h+g>=c.length||h>=p.length);++h)c[h+g]=p[h];return h}function lt(p,c){return p instanceof c||p!=null&&p.constructor!=null&&p.constructor.name!=null&&p.constructor.name===c.name}function Hi(p){return p!==p}let Xs=(function(){let p="0123456789abcdef",c=new Array(256);for(let g=0;g<16;++g){let m=g*16;for(let h=0;h<16;++h)c[m+h]=p[g]+p[h]}return c})();function Nt(p){return typeof BigInt>"u"?Ps:p}function Ps(){throw new Error("BigInt not supported")}return Jt}var jt=Qr();jt.Buffer;jt.SlowBuffer;jt.INSPECT_MAX_BYTES;jt.kMaxLength;var I=jt.Buffer,vg=jt.INSPECT_MAX_BYTES,fg=jt.kMaxLength;var ua={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"https://lite-api.jup.ag/swap/v1",wormholeMessengerProgramId:"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",solanaLookUpTable:"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj",sorobanNetworkPassphrase:"Public Global Stellar Network ; September 2015",tronJsonRpc:"https://api.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpV2TransmitterProgramId:"CCTPV2Sm4AdWt5296sk4P66VBZ7bEhcARwFaaS9YPbeC",cctpV2TokenMessengerMinter:"CCTPV2vPZJS2u2BBsUoscuikbYjnpFmbFsvVuJdgUMQe",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7,SUI:8}},cachePoolInfoChainSec:20},Fg={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},Ng={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org",SUI:"https://fullnode.mainnet.sui.io",STX:"https://api.hiro.so"};import{AlgorandClient as ns}from"@algorandfoundation/algokit-utils";import{TronWeb as HA}from"tronweb";import{Web3 as JA}from"web3";var fe=class extends Error{errorCode;constructor(a,i){super(i),this.errorCode=a}},w=class extends fe{constructor(a){super("SdkError",a)}},pt=class extends fe{constructor(a){super("InvalidAmountError",a)}},ft=class extends fe{constructor(a){super("AmountNotEnoughError",a)}},Rt=class extends fe{constructor(a){super("InsufficientPoolLiquidityError",a)}},Ve=class extends fe{constructor(a){super("JupiterError",a)}},Zt=class extends fe{constructor(a){super("InvalidGasFeePaymentOptionError",a)}},ma=class extends fe{constructor(a){super("InvalidMessengerOptionError",a)}},K=class extends fe{constructor(a){super("MethodNotSupportedError",a)}},Zn=class extends fe{constructor(a){super("VerifyTxError",a)}},on=class extends fe{constructor(a){super("InvalidTxError",a)}},ba=class extends fe{constructor(a){super("ExtraGasMaxLimitExceededError",a)}},ya=class extends fe{constructor(a,i,r){super("ArgumentInvalidDecimalsError",`Argument '${a}' decimals '${i}' cannot be greater than '${r}'`)}},Gn=class extends fe{constructor(a){super("TimeoutError",a)}},Ca=class extends fe{constructor(a){super("NodeRpcUrlNotInitializedError",`For chain '${a}' Node RPC URL not initialized`)}},We=class extends fe{constructor(a){super("CCTPDoesNotSupportedError",a)}},Xe=class extends fe{constructor(a){super("OFTDoesNotSupportedError",a)}},Ia=class extends fe{constructor(a){super("YieldDoesNotSupportedError",a)}},ha=class extends fe{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},Hs=(B=>(B.SDK_ERROR="SdkError",B.INVALID_AMOUNT_ERROR="InvalidAmountError",B.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",B.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",B.JUPITER_ERROR="JupiterError",B.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",B.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",B.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",B.VERIFY_TX_ERROR="VerifyTxError",B.INVALID_TX_ERROR="InvalidTxError",B.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",B.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",B.TIMEOUT_ERROR="TimeoutError",B.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",B.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",B.OFT_DOES_NOT_SUPPORTED_ERROR="OFTDoesNotSupportedError",B.YIELD_DOES_NOT_SUPPORTED_ERROR="YieldDoesNotSupportedError",B.TX_TOO_LARGE="TxTooLargeError",B))(Hs||{});var qe=(B=>(B.BSC="BSC",B.ETH="ETH",B.BAS="BAS",B.SOL="SOL",B.TRX="TRX",B.POL="POL",B.ARB="ARB",B.CEL="CEL",B.AVA="AVA",B.SRB="SRB",B.STLR="STLR",B.OPT="OPT",B.SUI="SUI",B.SNC="SNC",B.UNI="UNI",B.LIN="LIN",B.ALG="ALG",B.STX="STX",B))(qe||{}),_=(l=>(l.EVM="EVM",l.SOLANA="SOLANA",l.TRX="TRX",l.SRB="SRB",l.SUI="SUI",l.ALG="ALG",l.STX="STX",l))(_||{});var Js={EVM:18,SOLANA:9,TRX:6,SRB:7,SUI:9,ALG:6,STX:6},js={BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SNC:{chainSymbol:"SNC",chainId:"0x92",name:"Sonic",chainType:"EVM"},UNI:{chainSymbol:"UNI",chainId:"0x82",name:"Unichain",chainType:"EVM"},LIN:{chainSymbol:"LIN",chainId:"0xe708",name:"Linea",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"},SUI:{chainSymbol:"SUI",name:"Sui",chainType:"SUI"},ALG:{chainSymbol:"ALG",name:"Algorand",chainType:"ALG"},STX:{chainSymbol:"STX",name:"Stacks",chainType:"STX"}},Q=(()=>{let o={...js};return{addChainsProperties(a){o={...o,...a}},getChainProperty(a){let i=o[a];if(!i)throw new w(`Cannot find chain properties for ${a}`);return i},getChainsProperties(){return o},getChainDecimalsByType(a){return Js[a]}}})();import{Big as Ji}from"big.js";function oe(o,a){throw new Error(a??`Unexpected value: ${o}`)}async function Ze(o,a){return await o.getPoolInfoByKey({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress})}function $(o){if(Ji(o).lte(0))throw new pt("Amount must be greater than zero")}function ji(o){if(Ji(o).lt(0))throw new pt("Amount must be greater or equal than zero")}function D(o,a,i){let r=Ji(a).toFixed(),[s,d]=r.split(".");if(d&&d.length>i)throw new ya(o,d.length,i)}async function va(o,a,i){return await Promise.race([o,new Promise((r,s)=>{setTimeout(()=>s(new Gn(a)),i)})])}async function zi(o,a,i,r){if(i<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${i} was received.`);let s=0;for(;;)try{return await va(o(),a,r)}catch{if(++s>=i)throw new Gn(a)}}async function Ur(o,a,i,r=1.5,s=!1){let d=[],A=0,l=await o();if(d.push(l),!a(l))return d;let u=new Date(Date.now()+i*1e3).valueOf(),b=1e3,y=b;for(;Date.now()<u;){let C=d[d.length-1];if(C===void 0||!a(C))break;A++,s&&console.info(`Waiting ${b}ms before trying again (bringing the total wait time to ${y}ms so far, of total ${i*1e3}ms)`),await new Promise(v=>setTimeout(v,b)),b=b*r,new Date(Date.now()+b).valueOf()>u&&(b=u-Date.now(),s&&console.info(`was gonna wait too long; new waitTime: ${b}ms`)),y=b+y;let f=await o(C);d.push(f),s&&a(f)&&console.info(`${A}. Called ${o.name}; ${d.length} prev attempts. Most recent: ${JSON.stringify(d[d.length-1],null,2)}`)}return d}import{SigningAccount as sd}from"@algorandfoundation/algokit-utils/types/account";import{AlgoAmount as dd}from"@algorandfoundation/algokit-utils/types/amount";import Ad,{Address as ro}from"algosdk";import{getArc56ReturnValue as zs}from"@algorandfoundation/algokit-utils/types/app-arc56";import{AppClient as fa}from"@algorandfoundation/algokit-utils/types/app-client";import{AppFactory as wl}from"@algorandfoundation/algokit-utils/types/app-factory";var Ra={name:"Bridge",structs:{},methods:[{name:"createApplication",args:[{type:"address",name:"owner"},{type:"byte",name:"chainId"},{type:"uint64",name:"messenger"},{type:"uint64",name:"gasOracle"}],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}},{name:"optInAsset",args:[{type:"uint64",name:"asset"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"swapAndBridge",args:[{type:"pay",name:"paymentRef"},{type:"axfer",name:"assetTransferRef"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAA+g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"feeFromNative"},{type:"uint64",name:"feeFromStable"},{type:"uint64",name:"feeStableTokenAmount"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]}],recommendations:{}},{name:"swapAndBridgeWithStable",args:[{type:"axfer",name:"assetTransferRef"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"feeTokenAmount"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAA+g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"feeFromNative"},{type:"uint64",name:"feeFromStable"},{type:"uint64",name:"feeStableTokenAmount"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]}],recommendations:{}},{name:"receiveTokens",args:[{type:"pay",name:"paymentRef"},{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"sourceChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"receiveAmountMin"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"TokensReceived",args:[{type:"uint64",name:"receiveAmount"},{type:"address",name:"recipient"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"},{type:"byte[32]",name:"message"}]}],recommendations:{}},{name:"registerBridge",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"bridgeAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"addBridgeToken",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"tokenAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"removeBridgeToken",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"tokenAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"withdrawGasTokens",args:[{type:"uint64",name:"amount"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"withdrawBridgingFeeInTokens",args:[{type:"uint64",name:"asset"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getBridgingCostInTokens",args:[{type:"byte",name:"destinationChainId"},{type:"uint64",name:"asset"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"hashMessage",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"sourceChainId"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"}],returns:{type:"byte[32]"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"isOtherBridgeTokenSupported",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"token"}],returns:{type:"bool"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getTransactionCost",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getReceiveTokensCost",args:[],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getSendTransactionStorageCost",args:[],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"swap",args:[{type:"axfer",name:"assetTransferRef",desc:"The token to be swapped."},{type:"uint64",name:"receiveAsset",desc:"The token to receive in exchange for the swapped token."},{type:"address",name:"recipient",desc:"The address to receive the tokens."},{type:"uint64",name:"receiveAmountMin",desc:"The minimum amount of tokens required to receive during the swap."},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAA+g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"Swapped",args:[{type:"address",name:"sender"},{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"receiveTokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"receivedAmount"}]}],recommendations:{}},{name:"addPool",args:[{type:"uint64",name:"poolId",desc:"The address of the `Pool` contract."},{type:"uint64",name:"asset",desc:"The address of the token in the liquidity pool."}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"removePool",args:[{type:"uint64",name:"tokenId"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"stopSwap",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"startSwap",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setStopAuthority",args:[{type:"address",name:"stopAuthority"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setRebalancer",args:[{type:"address",name:"rebalancer"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getGasUsage",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"setGasUsage",args:[{type:"byte",name:"chainId"},{type:"uint64",name:"gasAmount"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setGasOracle",args:[{type:"uint64",name:"gasOracle"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getTransactionRelayerCost",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"transferOwnership",args:[{type:"address",name:"newOwner"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}}],arcs:[22,28],networks:{},state:{schema:{global:{ints:3,bytes:4},local:{ints:0,bytes:0}},keys:{global:{chainId:{keyType:"AVMString",valueType:"byte",key:"Y2hhaW5JZA=="},messenger:{keyType:"AVMString",valueType:"AVMUint64",key:"bWVzc2VuZ2Vy"},stopAuthority:{keyType:"AVMString",valueType:"address",key:"c3RvcEF1dGhvcml0eQ=="},rebalancer:{keyType:"AVMString",valueType:"address",key:"cmViYWxhbmNlcg=="},canSwap:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuU3dhcA=="},gasOracle:{keyType:"AVMString",valueType:"AVMUint64",key:"Z2FzT3JhY2xl"},owner:{keyType:"AVMString",valueType:"address",key:"b3duZXI="}},local:{},box:{}},maps:{global:{},local:{},box:{processedMessages:{keyType:"byte[32]",valueType:"byte[0]",prefix:"bQ=="},sentMessages:{keyType:"byte[32]",valueType:"byte[0]",prefix:"cw=="},otherBridges:{keyType:"byte",valueType:"byte[32]",prefix:"Yg=="},otherBridgeTokens:{keyType:"AVMBytes",valueType:"byte[0]",prefix:"dA=="},pools:{keyType:"uint64",valueType:"uint64",prefix:"cA=="},fromGasOracleScalingFactor:{keyType:"uint64",valueType:"uint64",prefix:"ZQ=="},bridgingFeeConversionScalingFactor:{keyType:"uint64",valueType:"uint64",prefix:"Zg=="},gasUsage:{keyType:"byte",valueType:"uint64",prefix:"dQ=="}}}},bareActions:{create:[],call:[]},sourceInfo:{approval:{sourceInfo:[{pc:[431],errorMessage:"Asset must go to app"},{pc:[877,1323,2099,2412,2424],errorMessage:"Box must have value"},{pc:[1835],errorMessage:"Bridge: amount too low for fee"},{pc:[1842],errorMessage:"Bridge: bridge to the zero address"},{pc:[911],errorMessage:"Bridge: message processed"},{pc:[961],errorMessage:"Bridge: no message"},{pc:[853,2063],errorMessage:"Bridge: not enough fee"},{pc:[843],errorMessage:"Bridge: source not registered"},{pc:[1950],errorMessage:"Bridge: tokens already sent"},{pc:[1915],errorMessage:"Bridge: unknown chain or token"},{pc:[1902],errorMessage:"Bridge: wrong destination chain"},{pc:[953,1256,1308,1995,2146,2289,2395,2469],errorMessage:"Bytes has valid prefix"},{pc:[447],errorMessage:"CloseTo not allowed"},{pc:[137],errorMessage:"OnCompletion must be NoOp"},{pc:[2484],errorMessage:"Only owner"},{pc:[439],errorMessage:"Rekey not allowed"},{pc:[1665],errorMessage:"Router: is not stopAuthority"},{pc:[2311],errorMessage:"Router: no pool"},{pc:[2221],errorMessage:"Router: no receive pool"},{pc:[832,1502,1825],errorMessage:"Router: swap prohibited"},{pc:[1166],errorMessage:"account opted into asset"},{pc:[2006,2319],errorMessage:"application exists"},{pc:[1599],errorMessage:"asset exists"},{pc:[831,858,920,1127,1174,1225,1267,1501,1663,1824,1896,1964,2108,2113,2236,2346,2430,2482],errorMessage:"check GlobalState exists"},{pc:[1956],errorMessage:"index access is out of bounds"},{pc:[958],errorMessage:"invalid number of bytes for arc4.bool"},{pc:[504,642,658,666,711,727,735,791,807,818,1040,1069,1098,1349,1373,1381,1406,1475,1686,1703,1803],errorMessage:"invalid number of bytes for arc4.static_array<arc4.uint8, 32>"},{pc:[520,529,561,674,743,752,779,826,1118,1148,1213,1261,1313,1340,1466,1483,1492,1571,1580,1643,1746,1768,2e3,2151,2294,2400,2474],errorMessage:"invalid number of bytes for arc4.uint64"},{pc:[512,650,719,799,1032,1061,1090,1205,1357,1365,1398,1434,1720,1738,1785],errorMessage:"invalid number of bytes for arc4.uint8"},{pc:[899,2205],errorMessage:"invalid size"},{pc:[634,703,1458],errorMessage:"transaction type is axfer"},{pc:[623,771],errorMessage:"transaction type is pay"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDggMzIgMTU3MDAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAiY2FuU3dhcCIgIm93bmVyIiAiZ2FzT3JhY2xlIiAicmViYWxhbmNlciIgImNoYWluSWQiICJtZXNzZW5nZXIiICJ0IiAicCIgInN0b3BBdXRob3JpdHkiIDB4MDEgMHgwMCAidSIgMHg0MzQxN2FhMyAweGY3NDc1YjgyIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAzZDU0IDB4MDY4MTAxCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUyCiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGludGNfMSAvLyAwCiAgICBiemVybwogICAgYnl0ZWMgNCAvLyAicmViYWxhbmNlciIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUzCiAgICAvLyBjYW5Td2FwID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7CiAgICBieXRlY18xIC8vICJjYW5Td2FwIgogICAgaW50Y18wIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAzMwogICAgcHVzaGJ5dGVzcyAweDY1ZjcwNTczIDB4M2UzODAyN2MgMHhhNDYwMGFlZCAweGRlNGNhZDRhIDB4NGViYTA3MjEgMHhjNjE3ZWQ3MyAweDU3NTMxNTYwIDB4NjM4MDgyNzggMHgwNjUwN2M2YSAweGY1Zjk2ZWIzIDB4NGIwNjJjYTAgMHhjM2NkZDkyYSAvLyBtZXRob2QgIm9wdEluQXNzZXQodWludDY0KXZvaWQiLCBtZXRob2QgInN3YXBBbmRCcmlkZ2UocGF5LGF4ZmVyLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0sYnl0ZVszMl0sdWludDY0KXZvaWQiLCBtZXRob2QgInN3YXBBbmRCcmlkZ2VXaXRoU3RhYmxlKGF4ZmVyLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0sYnl0ZVszMl0sdWludDY0LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJyZWNlaXZlVG9rZW5zKHBheSx1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlWzMyXSxieXRlWzMyXSx1aW50NjQpdm9pZCIsIG1ldGhvZCAicmVnaXN0ZXJCcmlkZ2UoYnl0ZSxieXRlWzMyXSl2b2lkIiwgbWV0aG9kICJhZGRCcmlkZ2VUb2tlbihieXRlLGJ5dGVbMzJdKXZvaWQiLCBtZXRob2QgInJlbW92ZUJyaWRnZVRva2VuKGJ5dGUsYnl0ZVszMl0pdm9pZCIsIG1ldGhvZCAid2l0aGRyYXdHYXNUb2tlbnModWludDY0KXZvaWQiLCBtZXRob2QgIndpdGhkcmF3QnJpZGdpbmdGZWVJblRva2Vucyh1aW50NjQpdm9pZCIsIG1ldGhvZCAiZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnMoYnl0ZSx1aW50NjQpdWludDY0IiwgbWV0aG9kICJoYXNoTWVzc2FnZSh1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlLGJ5dGVbMzJdLGJ5dGVbMzJdKWJ5dGVbMzJdIiwgbWV0aG9kICJpc090aGVyQnJpZGdlVG9rZW5TdXBwb3J0ZWQoYnl0ZSxieXRlWzMyXSlib29sIgogICAgYnl0ZWMgMTMgLy8gbWV0aG9kICJnZXRUcmFuc2FjdGlvbkNvc3QoYnl0ZSl1aW50NjQiCiAgICBwdXNoYnl0ZXNzIDB4MDdkZjg0MjkgMHg4MGM1YzcwZiAweDQxMzRkMDY4IDB4ZWYxNWY4NTUgMHg2YjFlZTIyMyAweDE4NzBhNDkyIDB4MzU1NzMyNGQgMHgwNGIxNjFmMSAweGQyYjM1N2ViIC8vIG1ldGhvZCAiZ2V0UmVjZWl2ZVRva2Vuc0Nvc3QoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0U2VuZFRyYW5zYWN0aW9uU3RvcmFnZUNvc3QoKXVpbnQ2NCIsIG1ldGhvZCAic3dhcChheGZlcix1aW50NjQsYWRkcmVzcyx1aW50NjQsdWludDY0KXZvaWQiLCBtZXRob2QgImFkZFBvb2wodWludDY0LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJyZW1vdmVQb29sKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJzdG9wU3dhcCgpdm9pZCIsIG1ldGhvZCAic3RhcnRTd2FwKCl2b2lkIiwgbWV0aG9kICJzZXRTdG9wQXV0aG9yaXR5KGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAic2V0UmViYWxhbmNlcihhZGRyZXNzKXZvaWQiCiAgICBieXRlYyAxNCAvLyBtZXRob2QgImdldEdhc1VzYWdlKGJ5dGUpdWludDY0IgogICAgcHVzaGJ5dGVzcyAweDBjYTVhZTdhIDB4Mjc0NzBmMDcgMHhjYmZjNmQwMiAweGUxN2JhZmI0IC8vIG1ldGhvZCAic2V0R2FzVXNhZ2UoYnl0ZSx1aW50NjQpdm9pZCIsIG1ldGhvZCAic2V0R2FzT3JhY2xlKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJnZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0KGJ5dGUpdWludDY0IiwgbWV0aG9kICJ0cmFuc2Zlck93bmVyc2hpcChhZGRyZXNzKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBvcHRJbkFzc2V0IHN3YXBBbmRCcmlkZ2Ugc3dhcEFuZEJyaWRnZVdpdGhTdGFibGUgcmVjZWl2ZVRva2VucyByZWdpc3RlckJyaWRnZSBhZGRCcmlkZ2VUb2tlbiByZW1vdmVCcmlkZ2VUb2tlbiB3aXRoZHJhd0dhc1Rva2VucyB3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnMgZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnMgaGFzaE1lc3NhZ2UgaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkIGdldFRyYW5zYWN0aW9uQ29zdCBtYWluX2dldFJlY2VpdmVUb2tlbnNDb3N0X3JvdXRlQDE4IG1haW5fZ2V0U2VuZFRyYW5zYWN0aW9uU3RvcmFnZUNvc3Rfcm91dGVAMTkgc3dhcCBhZGRQb29sIHJlbW92ZVBvb2wgc3RvcFN3YXAgc3RhcnRTd2FwIHNldFN0b3BBdXRob3JpdHkgc2V0UmViYWxhbmNlciBnZXRHYXNVc2FnZSBzZXRHYXNVc2FnZSBzZXRHYXNPcmFjbGUgZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdCB0cmFuc2Zlck93bmVyc2hpcAogICAgZXJyCgptYWluX2dldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0X3JvdXRlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNTEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWMgMTUgLy8gMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDNkNTQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRSZWNlaXZlVG9rZW5zQ29zdF9yb3V0ZUAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQ0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjIDE1IC8vIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAzZDU0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fY3JlYXRlX05vT3BAMzM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICBwdXNoYnl0ZXMgMHg2NjRjYTQwNCAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKGFkZHJlc3MsYnl0ZSx1aW50NjQsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGVBcHBsaWNhdGlvbgogICAgZXJyCgoKLy8gX3B1eWFfbGliLnV0aWwuZW5zdXJlX2J1ZGdldChyZXF1aXJlZF9idWRnZXQ6IHVpbnQ2NCwgZmVlX3NvdXJjZTogdWludDY0KSAtPiB2b2lkOgplbnN1cmVfYnVkZ2V0OgogICAgcHJvdG8gMiAwCiAgICBmcmFtZV9kaWcgLTIKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgICsKCmVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDE6CiAgICBmcmFtZV9kaWcgMAogICAgZ2xvYmFsIE9wY29kZUJ1ZGdldAogICAgPgogICAgYnogZW5zdXJlX2J1ZGdldF9hZnRlcl93aGlsZUA2CiAgICBpdHhuX2JlZ2luCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgYnl0ZWMgMTYgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCiAgICBieXRlYyAxNiAvLyAweDA2ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQogICAgZnJhbWVfZGlnIC0xCiAgICBzd2l0Y2ggZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8wQDMgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8xQDQKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA1OgogICAgaXR4bl9zdWJtaXQKICAgIGIgZW5zdXJlX2J1ZGdldF93aGlsZV90b3BAMQoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8xQDQ6CiAgICBnbG9iYWwgTWluVHhuRmVlCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgYiBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANQoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8wQDM6CiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDUKCmVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANjoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo6YW1vdW50RnJvbUFzc2V0VHJhbnNmZXIoYXNzZXRUcmFuc2ZlclR4bjogdWludDY0KSAtPiB1aW50NjQ6CmFtb3VudEZyb21Bc3NldFRyYW5zZmVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjIzCiAgICAvLyBleHBvcnQgZnVuY3Rpb24gYW1vdW50RnJvbUFzc2V0VHJhbnNmZXIoYXNzZXRUcmFuc2ZlclR4bjogZ3R4bi5Bc3NldFRyYW5zZmVyVHhuKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI0CiAgICAvLyBhc3NlcnQoYXNzZXRUcmFuc2ZlclR4bi5hc3NldFJlY2VpdmVyID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywgYEFzc2V0IG11c3QgZ28gdG8gYXBwYCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIEFzc2V0IG11c3QgZ28gdG8gYXBwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjcKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLnJla2V5VG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywgYFJla2V5IG5vdCBhbGxvd2VkYCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFJla2V5VG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBSZWtleSBub3QgYWxsb3dlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI4CiAgICAvLyBhc3NlcnQoYXNzZXRUcmFuc2ZlclR4bi5hc3NldENsb3NlVG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywgYENsb3NlVG8gbm90IGFsbG93ZWRgKTsKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQXNzZXRDbG9zZVRvCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gQ2xvc2VUbyBub3QgYWxsb3dlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI5CiAgICAvLyByZXR1cm4gYXNzZXRUcmFuc2ZlclR4bi5hc3NldEFtb3VudDsKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo6YW1vdW50RnJvbVBheW1lbnQocGF5bWVudFR4bjogdWludDY0KSAtPiB1aW50NjQ6CmFtb3VudEZyb21QYXltZW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjMyCiAgICAvLyBleHBvcnQgZnVuY3Rpb24gYW1vdW50RnJvbVBheW1lbnQocGF5bWVudFR4bjogZ3R4bi5QYXltZW50VHhuKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjMzCiAgICAvLyBpZiAocGF5bWVudFR4bi5yZWNlaXZlciAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHJldHVybiAwOwogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgICE9CiAgICBieiBhbW91bnRGcm9tUGF5bWVudF9hZnRlcl9pZl9lbHNlQDIKICAgIGludGNfMSAvLyAwCiAgICByZXRzdWIKCmFtb3VudEZyb21QYXltZW50X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czozNQogICAgLy8gaWYgKHBheW1lbnRUeG4ucmVrZXlUbyAhPT0gR2xvYmFsLnplcm9BZGRyZXNzKSByZXR1cm4gMDsKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgUmVrZXlUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYnogYW1vdW50RnJvbVBheW1lbnRfYWZ0ZXJfaWZfZWxzZUA0CiAgICBpbnRjXzEgLy8gMAogICAgcmV0c3ViCgphbW91bnRGcm9tUGF5bWVudF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MzYKICAgIC8vIGlmIChwYXltZW50VHhuLmNsb3NlUmVtYWluZGVyVG8gIT09IEdsb2JhbC56ZXJvQWRkcmVzcykgcmV0dXJuIDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIENsb3NlUmVtYWluZGVyVG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIGJ6IGFtb3VudEZyb21QYXltZW50X2FmdGVyX2lmX2Vsc2VANgogICAgaW50Y18xIC8vIDAKICAgIHJldHN1YgoKYW1vdW50RnJvbVBheW1lbnRfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjM4CiAgICAvLyByZXR1cm4gcGF5bWVudFR4bi5hbW91bnQ7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFtb3VudAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmNyZWF0ZUFwcGxpY2F0aW9uW3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlQXBwbGljYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY5CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbihvd25lcjogQWRkcmVzcywgY2hhaW5JZDogQnl0ZSwgbWVzc2VuZ2VyOiBBcHBsaWNhdGlvbiwgZ2FzT3JhY2xlOiBBcHBsaWNhdGlvbik6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBieXRlY18yIC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjkKICAgIC8vIHRoaXMub3duZXIudmFsdWUgPSBvd25lcjsKICAgIGRpZyA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTQKICAgIC8vIHRoaXMuZ2FzT3JhY2xlLnZhbHVlID0gZ2FzT3JhY2xlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NDIKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgOSAvLyAic3RvcEF1dGhvcml0eSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTcKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IG93bmVyOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gY2hhaW5JZCA9IEdsb2JhbFN0YXRlPEJ5dGU+KCk7CiAgICBieXRlYyA1IC8vICJjaGFpbklkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3MQogICAgLy8gdGhpcy5jaGFpbklkLnZhbHVlID0gY2hhaW5JZDsKICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNiAvLyAibWVzc2VuZ2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3MgogICAgLy8gdGhpcy5tZXNzZW5nZXIudmFsdWUgPSBtZXNzZW5nZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIGNoYWluSWQ6IEJ5dGUsIG1lc3NlbmdlcjogQXBwbGljYXRpb24sIGdhc09yYWNsZTogQXBwbGljYXRpb24pOiB2b2lkIHsKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uub3B0SW5Bc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdEluQXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc1CiAgICAvLyBvcHRJbkFzc2V0KGFzc2V0OiBBc3NldCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3NgogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc5LTg1CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6ODIKICAgIC8vIGFzc2V0QW1vdW50OiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc5LTg0CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3OS04NQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIGxvZygnQnJpZGdlOiBvcHQtaW4gY29tcGxldGVkJyk7CiAgICBwdXNoYnl0ZXMgIkJyaWRnZTogb3B0LWluIGNvbXBsZXRlZCIKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3NQogICAgLy8gb3B0SW5Bc3NldChhc3NldDogQXNzZXQpOiB2b2lkIHsKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uuc3dhcEFuZEJyaWRnZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnN3YXBBbmRCcmlkZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjkwCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgcHVzaGludCAyIC8vIDIKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgcHVzaGludCA0IC8vIGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMDAKICAgIC8vIHRoaXMuX3N3YXBBbmRCcmlkZ2UoYW1vdW50RnJvbVBheW1lbnQocGF5bWVudFJlZiksIGFzc2V0VHJhbnNmZXJSZWYsIHJlY2lwaWVudCwgZGVzdGluYXRpb25DaGFpbklkLCByZWNlaXZlVG9rZW4sIG5vbmNlLCAwLCBidWRnZXQpOwogICAgdW5jb3ZlciA2CiAgICBjYWxsc3ViIGFtb3VudEZyb21QYXltZW50CiAgICBjb3ZlciA2CiAgICBjb3ZlciA2CiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciA3CiAgICBjYWxsc3ViIF9zd2FwQW5kQnJpZGdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjkwCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLnN3YXBBbmRCcmlkZ2VXaXRoU3RhYmxlW3JvdXRpbmddKCkgLT4gdm9pZDoKc3dhcEFuZEJyaWRnZVdpdGhTdGFibGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEwMwogICAgLy8gQGFiaW1ldGhvZCh7IGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAxMDAwIH0gfSB9KQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExMwogICAgLy8gdGhpcy5fc3dhcEFuZEJyaWRnZSgwLCBhc3NldFRyYW5zZmVyUmVmLCByZWNpcGllbnQsIGRlc3RpbmF0aW9uQ2hhaW5JZCwgcmVjZWl2ZVRva2VuLCBub25jZSwgZmVlVG9rZW5BbW91bnQsIGJ1ZGdldCk7CiAgICBpbnRjXzEgLy8gMAogICAgY292ZXIgNwogICAgY2FsbHN1YiBfc3dhcEFuZEJyaWRnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGJ1ZGdldDogeyBjb25zdGFudDogMTAwMCB9IH0gfSkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVjZWl2ZVRva2Vuc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlY2VpdmVUb2tlbnM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE5MwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBjb3ZlciA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NjQKICAgIC8vIGFzc2VydCh0aGlzLmNhblN3YXAudmFsdWUsICdSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZCcpOwogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTMKICAgIC8vIGNhblN3YXAgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjY0CiAgICAvLyBhc3NlcnQodGhpcy5jYW5Td2FwLnZhbHVlLCAnUm91dGVyOiBzd2FwIHByb2hpYml0ZWQnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBhc3NlcnQgLy8gUm91dGVyOiBzd2FwIHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIG90aGVyQnJpZGdlcyA9IEJveE1hcDxCeXRlLCBTdGF0aWNCeXRlczwzMj4+KHsga2V5UHJlZml4OiAnYicgfSk7CiAgICBwdXNoYnl0ZXMgImIiCiAgICBkaWcgNAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwNAogICAgLy8gYXNzZXJ0KHRoaXMub3RoZXJCcmlkZ2VzKHNvdXJjZUNoYWluSWQpLmV4aXN0cywgJ0JyaWRnZTogc291cmNlIG5vdCByZWdpc3RlcmVkJyk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEJyaWRnZTogc291cmNlIG5vdCByZWdpc3RlcmVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwNgogICAgLy8gY29uc3QgdmFsdWUgPSBhbW91bnRGcm9tUGF5bWVudChwYXltZW50UmVmKTsKICAgIHVuY292ZXIgNwogICAgY2FsbHN1YiBhbW91bnRGcm9tUGF5bWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMDcKICAgIC8vIGFzc2VydCh2YWx1ZSA+PSBzdG9yYWdlRmVlLCAnQnJpZGdlOiBub3QgZW5vdWdoIGZlZScpOwogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM0OAogICAgLy8gcmV0dXJuIDE1NzAwOwogICAgaW50YyA0IC8vIDE1NzAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwNwogICAgLy8gYXNzZXJ0KHZhbHVlID49IHN0b3JhZ2VGZWUsICdCcmlkZ2U6IG5vdCBlbm91Z2ggZmVlJyk7CiAgICA+PQogICAgYXNzZXJ0IC8vIEJyaWRnZTogbm90IGVub3VnaCBmZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjA5CiAgICAvLyBjb25zdCBtZXNzYWdlID0gdGhpcy5oYXNoTWVzc2FnZShhbW91bnQsIHJlY2lwaWVudCwgc291cmNlQ2hhaW5JZCwgdGhpcy5jaGFpbklkLnZhbHVlLCByZWNlaXZlVG9rZW4sIG5vbmNlKTsKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBjaGFpbklkID0gR2xvYmFsU3RhdGU8Qnl0ZT4oKTsKICAgIGJ5dGVjIDUgLy8gImNoYWluSWQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwOQogICAgLy8gY29uc3QgbWVzc2FnZSA9IHRoaXMuaGFzaE1lc3NhZ2UoYW1vdW50LCByZWNpcGllbnQsIHNvdXJjZUNoYWluSWQsIHRoaXMuY2hhaW5JZC52YWx1ZSwgcmVjZWl2ZVRva2VuLCBub25jZSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDgKICAgIGRpZyA4CiAgICB1bmNvdmVyIDgKICAgIHVuY292ZXIgMwogICAgZGlnIDgKICAgIHVuY292ZXIgOAogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaGFzaE1lc3NhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjEwCiAgICAvLyBjb25zdCBtZXNzYWdlV2l0aFNlbmRlciA9IGhhc2hXaXRoU2VuZGVyQWRkcmVzcyhtZXNzYWdlLCB0aGlzLm90aGVyQnJpZGdlcyhzb3VyY2VDaGFpbklkKS52YWx1ZS5ieXRlcyk7CiAgICB1bmNvdmVyIDIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NTIKICAgIC8vIGNvbnN0IGg6IGJ5dGVzID0gb3Aua2VjY2FrMjU2KG9wLmNvbmNhdChtZXNzYWdlLmJ5dGVzLCBzZW5kZXJBZGRyZXNzKSk7CiAgICBkaWcgMQogICAgc3dhcAogICAgY29uY2F0CiAgICBrZWNjYWsyNTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo1NQogICAgLy8gY29uc3QgZmlyc3QyID0gb3Auc3Vic3RyaW5nKG1lc3NhZ2UuYnl0ZXMsIDAsIDIpOwogICAgc3dhcAogICAgc3Vic3RyaW5nIDAgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjU3CiAgICAvLyBjb25zdCBsYXN0MzAgPSBvcC5zdWJzdHJpbmcoaCwgMiwgMzIpOwogICAgc3dhcAogICAgc3Vic3RyaW5nIDIgMzIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo2MAogICAgLy8gcmV0dXJuIG5ldyBTdGF0aWNCeXRlczwzMj4ob3AuY29uY2F0KGZpcnN0MiwgbGFzdDMwKSk7CiAgICBjb25jYXQKICAgIGR1cAogICAgY292ZXIgNgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHNpemUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIHByb2Nlc3NlZE1lc3NhZ2VzID0gQm94TWFwPFN0YXRpY0J5dGVzPDMyPiwgU3RhdGljQnl0ZXM+KHsga2V5UHJlZml4OiAnbScgfSk7CiAgICBwdXNoYnl0ZXMgIm0iCiAgICBkaWcgMQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxMgogICAgLy8gYXNzZXJ0KCF0aGlzLnByb2Nlc3NlZE1lc3NhZ2VzKG1lc3NhZ2VXaXRoU2VuZGVyKS5leGlzdHMsICdCcmlkZ2U6IG1lc3NhZ2UgcHJvY2Vzc2VkJyk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEJyaWRnZTogbWVzc2FnZSBwcm9jZXNzZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjE0CiAgICAvLyB0aGlzLnByb2Nlc3NlZE1lc3NhZ2VzKG1lc3NhZ2VXaXRoU2VuZGVyKS52YWx1ZSA9IG5ldyBTdGF0aWNCeXRlcygpOwogICAgcHVzaGJ5dGVzIDB4CiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxNy0yMjEKICAgIC8vIGFzc2VydChhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLnJlY2VpdmVkTWVzc2FnZXMsCiAgICAvLyAgIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW21lc3NhZ2VXaXRoU2VuZGVyXSwKICAgIC8vIH0pLnJldHVyblZhbHVlLCAnQnJpZGdlOiBubyBtZXNzYWdlJyk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxOQogICAgLy8gYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNiAvLyAibWVzc2VuZ2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxNy0yMjEKICAgIC8vIGFzc2VydChhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLnJlY2VpdmVkTWVzc2FnZXMsCiAgICAvLyAgIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW21lc3NhZ2VXaXRoU2VuZGVyXSwKICAgIC8vIH0pLnJldHVyblZhbHVlLCAnQnJpZGdlOiBubyBtZXNzYWdlJyk7CiAgICBwdXNoYnl0ZXMgMHgzM2UxNDdhYSAvLyBtZXRob2QgInJlY2VpdmVkTWVzc2FnZXMoYnl0ZVszMl0pYm9vbCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5ib29sCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Yml0CiAgICBhc3NlcnQgLy8gQnJpZGdlOiBubyBtZXNzYWdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIyMwogICAgLy8gY29uc3QgdG9rZW5JZDogdWludDY0ID0gb3AuZXh0cmFjdFVpbnQ2NChyZWNlaXZlVG9rZW4uYnl0ZXMsIDI0KTsKICAgIHVuY292ZXIgMgogICAgcHVzaGludCAyNCAvLyAyNAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjI1LTIzMAogICAgLy8gY29uc3QgcmVjZWl2ZUFtb3VudCA9IHRoaXMucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZCgKICAgIC8vICAgQXNzZXQodG9rZW5JZCksCiAgICAvLyAgIHJlY2lwaWVudEFkZHJlc3MsCiAgICAvLyAgIGFtb3VudCwKICAgIC8vICAgcmVjZWl2ZUFtb3VudE1pbiwKICAgIC8vICk7CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICBjYWxsc3ViIHJlY2VpdmVBbmRTd2FwRnJvbVZVc2QKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQ4CiAgICAvLyByZXR1cm4gMTU3MDA7CiAgICBpbnRjIDQgLy8gMTU3MDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjMzCiAgICAvLyBjb25zdCBleHRyYUdhczogdWludDY0ID0gdmFsdWUgLSBzdG9yYWdlRmVlOwogICAgLQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIzNAogICAgLy8gaWYgKGV4dHJhR2FzID4gMCkgewogICAgYnogcmVjZWl2ZVRva2Vuc19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjM1LTIzOAogICAgLy8gaXR4bi5wYXltZW50KHsKICAgIC8vICAgYW1vdW50OiBleHRyYUdhcywKICAgIC8vICAgcmVjZWl2ZXI6IHJlY2lwaWVudEFkZHJlc3MuYnl0ZXMsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIGRpZyA0CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAoKcmVjZWl2ZVRva2Vuc19hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0MC0yNDYKICAgIC8vIGVtaXQ8VG9rZW5zUmVjZWl2ZWQ+KHsKICAgIC8vICAgcmVjZWl2ZUFtb3VudCwKICAgIC8vICAgcmVjaXBpZW50OiByZWNpcGllbnRBZGRyZXNzLAogICAgLy8gICBub25jZSwKICAgIC8vICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICBtZXNzYWdlOiBtZXNzYWdlV2l0aFNlbmRlciwKICAgIC8vIH0pOwogICAgZGlnIDEKICAgIGl0b2IKICAgIGRpZyA1CiAgICBjb25jYXQKICAgIGRpZyA0CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQ0CiAgICAvLyBtZXNzZW5nZXI6IEFMTEJSSURHRV9NRVNTRU5HRVIsCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0MC0yNDYKICAgIC8vIGVtaXQ8VG9rZW5zUmVjZWl2ZWQ+KHsKICAgIC8vICAgcmVjZWl2ZUFtb3VudCwKICAgIC8vICAgcmVjaXBpZW50OiByZWNpcGllbnRBZGRyZXNzLAogICAgLy8gICBub25jZSwKICAgIC8vICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICBtZXNzYWdlOiBtZXNzYWdlV2l0aFNlbmRlciwKICAgIC8vIH0pOwogICAgY29uY2F0CiAgICBkaWcgMwogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHg0NTgzNmFkNiAvLyBtZXRob2QgIlRva2Vuc1JlY2VpdmVkKHVpbnQ2NCxhZGRyZXNzLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0pIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTkzCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVnaXN0ZXJCcmlkZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgpyZWdpc3RlckJyaWRnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQ5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI1MQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY0CiAgICAvLyBvdGhlckJyaWRnZXMgPSBCb3hNYXA8Qnl0ZSwgU3RhdGljQnl0ZXM8MzI+Pih7IGtleVByZWZpeDogJ2InIH0pOwogICAgcHVzaGJ5dGVzICJiIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjUyCiAgICAvLyB0aGlzLm90aGVyQnJpZGdlcyhjaGFpbklkKS52YWx1ZSA9IGJyaWRnZUFkZHJlc3M7CiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0OQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmFkZEJyaWRnZVRva2VuW3JvdXRpbmddKCkgLT4gdm9pZDoKYWRkQnJpZGdlVG9rZW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI1NQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNTcKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNjEKICAgIC8vIHJldHVybiBjaGFpbklkLmJ5dGVzLmNvbmNhdCh0b2tlbi5ieXRlcyk7CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIG90aGVyQnJpZGdlVG9rZW5zID0gQm94TWFwPGJ5dGVzLCBTdGF0aWNCeXRlcz4oeyBrZXlQcmVmaXg6ICd0JyB9KTsKICAgIGJ5dGVjIDcgLy8gInQiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjU4CiAgICAvLyB0aGlzLm90aGVyQnJpZGdlVG9rZW5zKHRoaXMuX2dldE90aGVyQnJpZGdlVG9rZW5zS2V5KGNoYWluSWQsIHRva2VuQWRkcmVzcykpLnZhbHVlID0gbmV3IFN0YXRpY0J5dGVzKCk7CiAgICBwdXNoYnl0ZXMgMHgKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjU1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVtb3ZlQnJpZGdlVG9rZW5bcm91dGluZ10oKSAtPiB2b2lkOgpyZW1vdmVCcmlkZ2VUb2tlbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjYxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI2MwogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM2MQogICAgLy8gcmV0dXJuIGNoYWluSWQuYnl0ZXMuY29uY2F0KHRva2VuLmJ5dGVzKTsKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2NwogICAgLy8gb3RoZXJCcmlkZ2VUb2tlbnMgPSBCb3hNYXA8Ynl0ZXMsIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ3QnIH0pOwogICAgYnl0ZWMgNyAvLyAidCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIHRoaXMub3RoZXJCcmlkZ2VUb2tlbnModGhpcy5fZ2V0T3RoZXJCcmlkZ2VUb2tlbnNLZXkoY2hhaW5JZCwgdG9rZW5BZGRyZXNzKSkuZGVsZXRlKCk7CiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjYxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uud2l0aGRyYXdHYXNUb2tlbnNbcm91dGluZ10oKSAtPiB2b2lkOgp3aXRoZHJhd0dhc1Rva2VuczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY5CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjcwCiAgICAvLyBpdHhuLnBheW1lbnQoeyBhbW91bnQ6IGFtb3VudCwgcmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMgfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjXzIgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzAKICAgIC8vIGl0eG4ucGF5bWVudCh7IGFtb3VudDogYW1vdW50LCByZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcyB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaW50Y18wIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uud2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zW3JvdXRpbmddKCkgLT4gdm9pZDoKd2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzMKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3NQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3NgogICAgLy8gY29uc3QgYXBwQWNjdDogQWNjb3VudCA9IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzOwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGR1cAogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzcKICAgIC8vIGNvbnN0IGJhbGFuY2UgPSBhc3NldC5iYWxhbmNlKGFwcEFjY3QpOwogICAgc3dhcAogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGFjY291bnQgb3B0ZWQgaW50byBhc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzgKICAgIC8vIGlmIChiYWxhbmNlID4gVWludDY0KDApKSB7CiAgICBieiB3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnNfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3OS0yODQKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHNlbmRlcjogYXBwQWNjdCwKICAgIC8vICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgYXNzZXRBbW91bnQ6IGJhbGFuY2UsCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBieXRlY18yIC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBkaWcgMgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzktMjg0CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICBzZW5kZXI6IGFwcEFjY3QsCiAgICAvLyAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBiYWxhbmNlLAogICAgLy8gICBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAoKd2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjczCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRCcmlkZ2luZ0Nvc3RJblRva2VuczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6Mjg4CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyOTMKICAgIC8vIGNvbnN0IGJyaWRnZUdhc0Ftb3VudDogdWludDY0ID0gdGhpcy5nZXRHYXNVc2FnZShkZXN0aW5hdGlvbkNoYWluSWQpOwogICAgZGlnIDEKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0R2FzVXNhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6Mjk0LTI5OAogICAgLy8gY29uc3QgbWVzc2VuZ2VyR2FzQW1vdW50OiB1aW50NjQgPSBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLmdldEdhc1VzYWdlLAogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI5NgogICAgLy8gYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNiAvLyAibWVzc2VuZ2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyOTYKICAgIC8vIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI5NC0yOTgKICAgIC8vIGNvbnN0IG1lc3Nlbmdlckdhc0Ftb3VudDogdWludDY0ID0gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogTWVzc2VuZ2VyLnByb3RvdHlwZS5nZXRHYXNVc2FnZSwKICAgIC8vICAgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgYnl0ZWMgMTQgLy8gbWV0aG9kICJnZXRHYXNVc2FnZShieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgMwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwMC0zMDQKICAgIC8vIHJldHVybiBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBHYXNPcmFjbGUucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uR2FzQ29zdEluVVNELAogICAgLy8gICBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWQsIGJyaWRnZUdhc0Ftb3VudCArIG1lc3Nlbmdlckdhc0Ftb3VudF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjkKICAgIC8vIGdhc09yYWNsZSA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWNfMyAvLyAiZ2FzT3JhY2xlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIGNvdmVyIDIKICAgICsKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzAwLTMwNAogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5VU0QsCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIC8vIH0pLnJldHVyblZhbHVlIC8gdGhpcy5mcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWU7CiAgICBwdXNoYnl0ZXMgMHg3YmY3ZDUwYyAvLyBtZXRob2QgImdldFRyYW5zYWN0aW9uR2FzQ29zdEluVVNEKGJ5dGUsdWludDY0KXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICB1bmNvdmVyIDMKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzA0CiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozNgogICAgLy8gcHJvdGVjdGVkIGZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yID0gQm94TWFwPEFzc2V0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZScgfSk7CiAgICBwdXNoYnl0ZXMgImUiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzA0CiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlOwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzAwLTMwNAogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5VU0QsCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIC8vIH0pLnJldHVyblZhbHVlIC8gdGhpcy5mcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWU7CiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI4OAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmhhc2hNZXNzYWdlW3JvdXRpbmddKCkgLT4gdm9pZDoKaGFzaE1lc3NhZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwNwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaGFzaE1lc3NhZ2UKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkW3JvdXRpbmddKCkgLT4gdm9pZDoKaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMzQKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyByZXR1cm4gY2hhaW5JZC5ieXRlcy5jb25jYXQodG9rZW4uYnl0ZXMpOwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY3CiAgICAvLyBvdGhlckJyaWRnZVRva2VucyA9IEJveE1hcDxieXRlcywgU3RhdGljQnl0ZXM+KHsga2V5UHJlZml4OiAndCcgfSk7CiAgICBieXRlYyA3IC8vICJ0IgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMzNgogICAgLy8gcmV0dXJuIHRoaXMub3RoZXJCcmlkZ2VUb2tlbnModGhpcy5fZ2V0T3RoZXJCcmlkZ2VUb2tlbnNLZXkoY2hhaW5JZCwgdG9rZW4pKS5leGlzdHM7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzM0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjIDExIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5nZXRUcmFuc2FjdGlvbkNvc3Rbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRUcmFuc2FjdGlvbkNvc3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMzOQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQxCiAgICAvLyByZXR1cm4gdGhpcy5nZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0KGNoYWluSWQpICsgdGhpcy5nZXRTZW5kVHJhbnNhY3Rpb25TdG9yYWdlQ29zdCgpOwogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM1NQogICAgLy8gcmV0dXJuIDE1NzAwOwogICAgaW50YyA0IC8vIDE1NzAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM0MQogICAgLy8gcmV0dXJuIHRoaXMuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdChjaGFpbklkKSArIHRoaXMuZ2V0U2VuZFRyYW5zYWN0aW9uU3RvcmFnZUNvc3QoKTsKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzM5CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3dhcFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnN3YXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjgxCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6ODkKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgaW50Y18xIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo2NAogICAgLy8gYXNzZXJ0KHRoaXMuY2FuU3dhcC52YWx1ZSwgJ1JvdXRlcjogc3dhcCBwcm9oaWJpdGVkJyk7CiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MwogICAgLy8gY2FuU3dhcCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOwogICAgYnl0ZWNfMSAvLyAiY2FuU3dhcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NjQKICAgIC8vIGFzc2VydCh0aGlzLmNhblN3YXAudmFsdWUsICdSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGFzc2VydCAvLyBSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo5MQogICAgLy8gY29uc3Qgc2VuZGVyID0gbmV3IEFkZHJlc3MoVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjkyCiAgICAvLyBjb25zdCBhbW91bnQgPSBhbW91bnRGcm9tQXNzZXRUcmFuc2Zlcihhc3NldFRyYW5zZmVyUmVmKTsKICAgIGRpZyA0CiAgICBjYWxsc3ViIGFtb3VudEZyb21Bc3NldFRyYW5zZmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjkzCiAgICAvLyBjb25zdCB2VXNkQW1vdW50ID0gdGhpcy5zZW5kQW5kU3dhcFRvVlVzZChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldCwgc2VuZGVyLCBhbW91bnQpOwogICAgdW5jb3ZlciA1CiAgICBndHhucyBYZmVyQXNzZXQKICAgIGR1cAogICAgZGlnIDMKICAgIGRpZyAzCiAgICBjYWxsc3ViIHNlbmRBbmRTd2FwVG9WVXNkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjk0CiAgICAvLyBjb25zdCByZWNlaXZlZEFtb3VudCA9IHRoaXMucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZChyZWNlaXZlQXNzZXQsIHJlY2lwaWVudCwgdlVzZEFtb3VudCwgcmVjZWl2ZUFtb3VudE1pbik7CiAgICBkaWcgNgogICAgZGlnIDYKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciA2CiAgICBjYWxsc3ViIHJlY2VpdmVBbmRTd2FwRnJvbVZVc2QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6OTUtMTAyCiAgICAvLyBlbWl0PFN3YXBwZWQ+KHsKICAgIC8vICAgc2VuZGVyLAogICAgLy8gICByZWNpcGllbnQsCiAgICAvLyAgIHRva2VuSWQ6IGFzc2V0VHJhbnNmZXJSZWYueGZlckFzc2V0LmlkLAogICAgLy8gICByZWNlaXZlVG9rZW5JZDogcmVjZWl2ZUFzc2V0LmlkLAogICAgLy8gICBhbW91bnQsCiAgICAvLyAgIHJlY2VpdmVkQW1vdW50LAogICAgLy8gfSk7CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDE1NDA0NGIzIC8vIG1ldGhvZCAiU3dhcHBlZChhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjgxCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLmFkZFBvb2xbcm91dGluZ10oKSAtPiB2b2lkOgphZGRQb29sOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTQKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTUKICAgIC8vIHRoaXMucG9vbHMoYXNzZXQpLnZhbHVlID0gcG9vbElkOwogICAgZHVwCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM0CiAgICAvLyBwb29scyA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE1CiAgICAvLyB0aGlzLnBvb2xzKGFzc2V0KS52YWx1ZSA9IHBvb2xJZDsKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTYKICAgIC8vIGNvbnN0IHRva2VuRGVjaW1hbHMgPSBhc3NldC5kZWNpbWFsczsKICAgIHN3YXAKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTcKICAgIC8vIHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgPSAxMCAqKiAoT1JBQ0xFX1BSSUNFX1BSRUNJU0lPTiAtIHRva2VuRGVjaW1hbHMgKyBDSEFJTl9QUkVDSVNJT04pOwogICAgcHVzaGludCA5IC8vIDkKICAgIHN3YXAKICAgIC0KICAgIGR1cAogICAgcHVzaGludCA2IC8vIDYKICAgICsKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozOQogICAgLy8gcHJvdGVjdGVkIGJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IgPSBCb3hNYXA8QXNzZXQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdmJyB9KTsKICAgIHB1c2hieXRlcyAiZiIKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE3CiAgICAvLyB0aGlzLmJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlID0gMTAgKiogKE9SQUNMRV9QUklDRV9QUkVDSVNJT04gLSB0b2tlbkRlY2ltYWxzICsgQ0hBSU5fUFJFQ0lTSU9OKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yKGFzc2V0KS52YWx1ZSA9IDEwICoqIChPUkFDTEVfUFJJQ0VfUFJFQ0lTSU9OIC0gdG9rZW5EZWNpbWFscyk7CiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICBzd2FwCiAgICBleHAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzYKICAgIC8vIHByb3RlY3RlZCBmcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3RvciA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ2UnIH0pOwogICAgcHVzaGJ5dGVzICJlIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yKGFzc2V0KS52YWx1ZSA9IDEwICoqIChPUkFDTEVfUFJJQ0VfUFJFQ0lTSU9OIC0gdG9rZW5EZWNpbWFscyk7CiAgICBzd2FwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjExMgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnJlbW92ZVBvb2xbcm91dGluZ10oKSAtPiB2b2lkOgpyZW1vdmVQb29sOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjEKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjQKICAgIC8vIHRoaXMucG9vbHModG9rZW5JZCkuZGVsZXRlKCk7CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM0CiAgICAvLyBwb29scyA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjQKICAgIC8vIHRoaXMucG9vbHModG9rZW5JZCkuZGVsZXRlKCk7CiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTIxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3RvcFN3YXBbcm91dGluZ10oKSAtPiB2b2lkOgpzdG9wU3dhcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NzEKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUuYnl0ZXMsICdSb3V0ZXI6IGlzIG5vdCBzdG9wQXV0aG9yaXR5Jyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo0MgogICAgLy8gcHJpdmF0ZSBzdG9wQXV0aG9yaXR5ID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBieXRlYyA5IC8vICJzdG9wQXV0aG9yaXR5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo3MQogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZS5ieXRlcywgJ1JvdXRlcjogaXMgbm90IHN0b3BBdXRob3JpdHknKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFJvdXRlcjogaXMgbm90IHN0b3BBdXRob3JpdHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTMKICAgIC8vIGNhblN3YXAgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzMwogICAgLy8gdGhpcy5jYW5Td2FwLnZhbHVlID0gZmFsc2U7CiAgICBpbnRjXzEgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTMwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3RhcnRTd2FwW3JvdXRpbmddKCkgLT4gdm9pZDoKc3RhcnRTd2FwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNDEKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MwogICAgLy8gY2FuU3dhcCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOwogICAgYnl0ZWNfMSAvLyAiY2FuU3dhcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTQyCiAgICAvLyB0aGlzLmNhblN3YXAudmFsdWUgPSB0cnVlOwogICAgaW50Y18wIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzOQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNldFN0b3BBdXRob3JpdHlbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRTdG9wQXV0aG9yaXR5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNDgKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1MAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjQyCiAgICAvLyBwcml2YXRlIHN0b3BBdXRob3JpdHkgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDkgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1MQogICAgLy8gdGhpcy5zdG9wQXV0aG9yaXR5LnZhbHVlID0gc3RvcEF1dGhvcml0eTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE0OAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNldFJlYmFsYW5jZXJbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRSZWJhbGFuY2VyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNTcKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1OQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUyCiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDQgLy8gInJlYmFsYW5jZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE2MAogICAgLy8gdGhpcy5yZWJhbGFuY2VyLnZhbHVlID0gcmViYWxhbmNlcjsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1NwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0R2FzVXNhZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldEdhc1VzYWdlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2Uuc2V0R2FzVXNhZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI0CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTAKICAgIC8vIGdhc1VzYWdlID0gQm94TWFwPEJ5dGUsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICd1JyB9KTsKICAgIGJ5dGVjIDEyIC8vICJ1IgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjUKICAgIC8vIHRoaXMuZ2FzVXNhZ2UoY2hhaW5JZCkudmFsdWUgPSBnYXNBbW91bnQ7CiAgICBzd2FwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjIyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5zZXRHYXNPcmFjbGVbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRHYXNPcmFjbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzAKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzEKICAgIC8vIHRoaXMuZ2FzT3JhY2xlLnZhbHVlID0gZ2FzT3JhY2xlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjgKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3Rbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozNAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjpPd25hYmxlLnRyYW5zZmVyT3duZXJzaGlwW3JvdXRpbmddKCkgLT4gdm9pZDoKdHJhbnNmZXJPd25lcnNoaXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxNgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE4CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBieXRlY18yIC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE5CiAgICAvLyB0aGlzLm93bmVyLnZhbHVlID0gbmV3T3duZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTYKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5fc3dhcEFuZEJyaWRnZShmZWVGcm9tTmF0aXZlOiB1aW50NjQsIGFzc2V0VHJhbnNmZXJSZWY6IHVpbnQ2NCwgcmVjaXBpZW50OiBieXRlcywgZGVzdGluYXRpb25DaGFpbklkOiBieXRlcywgcmVjZWl2ZVRva2VuOiBieXRlcywgbm9uY2U6IGJ5dGVzLCBmZWVUb2tlbkFtb3VudDogdWludDY0LCBidWRnZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKX3N3YXBBbmRCcmlkZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExNi0xMjUKICAgIC8vIHByaXZhdGUgX3N3YXBBbmRCcmlkZ2UoCiAgICAvLyAgIGZlZUZyb21OYXRpdmU6IHVpbnQ2NCwKICAgIC8vICAgYXNzZXRUcmFuc2ZlclJlZjogZ3R4bi5Bc3NldFRyYW5zZmVyVHhuLAogICAgLy8gICByZWNpcGllbnQ6IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgZGVzdGluYXRpb25DaGFpbklkOiBCeXRlLAogICAgLy8gICByZWNlaXZlVG9rZW46IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgbm9uY2U6IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgZmVlVG9rZW5BbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgYnVkZ2V0OiB1aW50NjQsCiAgICAvLyApOiB2b2lkIHsKICAgIHByb3RvIDggMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMjYKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjY0CiAgICAvLyBhc3NlcnQodGhpcy5jYW5Td2FwLnZhbHVlLCAnUm91dGVyOiBzd2FwIHByb2hpYml0ZWQnKTsKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUzCiAgICAvLyBjYW5Td2FwID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7CiAgICBieXRlY18xIC8vICJjYW5Td2FwIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo2NAogICAgLy8gYXNzZXJ0KHRoaXMuY2FuU3dhcC52YWx1ZSwgJ1JvdXRlcjogc3dhcCBwcm9oaWJpdGVkJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYXNzZXJ0IC8vIFJvdXRlcjogc3dhcCBwcm9oaWJpdGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEyOAogICAgLy8gY29uc3QgYW1vdW50ID0gYW1vdW50RnJvbUFzc2V0VHJhbnNmZXIoYXNzZXRUcmFuc2ZlclJlZik7CiAgICBmcmFtZV9kaWcgLTcKICAgIGNhbGxzdWIgYW1vdW50RnJvbUFzc2V0VHJhbnNmZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMjkKICAgIC8vIGFzc2VydChhbW91bnQgPiBmZWVUb2tlbkFtb3VudCwgJ0JyaWRnZTogYW1vdW50IHRvbyBsb3cgZm9yIGZlZScpOwogICAgZnJhbWVfZGlnIC0yCiAgICA+CiAgICBhc3NlcnQgLy8gQnJpZGdlOiBhbW91bnQgdG9vIGxvdyBmb3IgZmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEzMAogICAgLy8gYXNzZXJ0KCFyZWNpcGllbnQuYnl0ZXMuZXF1YWxzKGJ6ZXJvKDMyKSksICdCcmlkZ2U6IGJyaWRnZSB0byB0aGUgemVybyBhZGRyZXNzJyk7CiAgICBpbnRjXzMgLy8gMzIKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTYKICAgID09CiAgICAhCiAgICBhc3NlcnQgLy8gQnJpZGdlOiBicmlkZ2UgdG8gdGhlIHplcm8gYWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzIKICAgIC8vIGNvbnN0IGZlZUZyb21TdGFibGU6IHVpbnQ2NCA9IHRoaXMuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbihhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldCwgZmVlVG9rZW5BbW91bnQpOwogICAgZnJhbWVfZGlnIC03CiAgICBndHhucyBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY1CiAgICAvLyBpZiAoZmVlVG9rZW5BbW91bnQgPT09IDApIHJldHVybiAwOwogICAgZnJhbWVfZGlnIC0yCiAgICBibnogX3N3YXBBbmRCcmlkZ2VfYWZ0ZXJfaWZfZWxzZUAzCiAgICBpbnRjXzEgLy8gMAoKX3N3YXBBbmRCcmlkZ2VfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbkA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzMKICAgIC8vIGNvbnN0IGJyaWRnaW5nRmVlOiB1aW50NjQgPSBmZWVGcm9tTmF0aXZlICsgZmVlRnJvbVN0YWJsZTsKICAgIGZyYW1lX2RpZyAtOAogICAgZGlnIDEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM0CiAgICAvLyBlbWl0PEJyaWRnaW5nRmVlRnJvbVRva2Vucz4oeyBmZWVGcm9tTmF0aXZlLCBmZWVGcm9tU3RhYmxlLCBmZWVTdGFibGVUb2tlbkFtb3VudDogZmVlVG9rZW5BbW91bnQgfSk7CiAgICBmcmFtZV9kaWcgLTgKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MzZiYWZhZGQgLy8gbWV0aG9kICJCcmlkZ2luZ0ZlZUZyb21Ub2tlbnModWludDY0LHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM2CiAgICAvLyBjb25zdCBhbW91bnRBZnRlckZlZTogdWludDY0ID0gYW1vdW50IC0gZmVlVG9rZW5BbW91bnQ7CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEzOAogICAgLy8gY29uc3QgdlVzZEFtb3VudCA9IHRoaXMuc2VuZEFuZFN3YXBUb1ZVc2QoYXNzZXRUcmFuc2ZlclJlZi54ZmVyQXNzZXQsIHNlbmRlciwgYW1vdW50QWZ0ZXJGZWUpOwogICAgZnJhbWVfZGlnIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM3CiAgICAvLyBjb25zdCBzZW5kZXIgPSBuZXcgQWRkcmVzcyhUeG4uc2VuZGVyKTsKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM4CiAgICAvLyBjb25zdCB2VXNkQW1vdW50ID0gdGhpcy5zZW5kQW5kU3dhcFRvVlVzZChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldCwgc2VuZGVyLCBhbW91bnRBZnRlckZlZSk7CiAgICB1bmNvdmVyIDIKICAgIGNhbGxzdWIgc2VuZEFuZFN3YXBUb1ZVc2QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBhc3NlcnQoZGVzdGluYXRpb25DaGFpbklkICE9PSB0aGlzLmNoYWluSWQudmFsdWUsICdCcmlkZ2U6IHdyb25nIGRlc3RpbmF0aW9uIGNoYWluJyk7CiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gY2hhaW5JZCA9IEdsb2JhbFN0YXRlPEJ5dGU+KCk7CiAgICBieXRlYyA1IC8vICJjaGFpbklkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTAKICAgIC8vIGFzc2VydChkZXN0aW5hdGlvbkNoYWluSWQgIT09IHRoaXMuY2hhaW5JZC52YWx1ZSwgJ0JyaWRnZTogd3JvbmcgZGVzdGluYXRpb24gY2hhaW4nKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTUKICAgIGRpZyAxCiAgICAhPQogICAgYXNzZXJ0IC8vIEJyaWRnZTogd3JvbmcgZGVzdGluYXRpb24gY2hhaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyByZXR1cm4gY2hhaW5JZC5ieXRlcy5jb25jYXQodG9rZW4uYnl0ZXMpOwogICAgZnJhbWVfZGlnIC01CiAgICBmcmFtZV9kaWcgLTQKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2NwogICAgLy8gb3RoZXJCcmlkZ2VUb2tlbnMgPSBCb3hNYXA8Ynl0ZXMsIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ3QnIH0pOwogICAgYnl0ZWMgNyAvLyAidCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTEKICAgIC8vIGFzc2VydCh0aGlzLm90aGVyQnJpZGdlVG9rZW5zKHRoaXMuX2dldE90aGVyQnJpZGdlVG9rZW5zS2V5KGRlc3RpbmF0aW9uQ2hhaW5JZCwgcmVjZWl2ZVRva2VuKSkuZXhpc3RzLCAnQnJpZGdlOiB1bmtub3duIGNoYWluIG9yIHRva2VuJyk7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBCcmlkZ2U6IHVua25vd24gY2hhaW4gb3IgdG9rZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTUzCiAgICAvLyBjb25zdCBtZXNzYWdlID0gdGhpcy5oYXNoTWVzc2FnZShhbW91bnQsIHJlY2lwaWVudCwgdGhpcy5jaGFpbklkLnZhbHVlLCBkZXN0aW5hdGlvbkNoYWluSWQsIHJlY2VpdmVUb2tlbiwgbm9uY2UpOwogICAgZGlnIDEKICAgIGZyYW1lX2RpZyAtNgogICAgdW5jb3ZlciAyCiAgICBmcmFtZV9kaWcgLTUKICAgIGZyYW1lX2RpZyAtNAogICAgZnJhbWVfZGlnIC0zCiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5oYXNoTWVzc2FnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZCkgKyB0aGlzLmdldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0KCk7CiAgICBmcmFtZV9kaWcgLTUKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNTUKICAgIC8vIHJldHVybiAxNTcwMDsKICAgIGludGMgNCAvLyAxNTcwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZCkgKyB0aGlzLmdldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0KCk7CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyBzZW50TWVzc2FnZXMgPSBCb3hNYXA8U3RhdGljQnl0ZXM8MzI+LCBTdGF0aWNCeXRlcz4oeyBrZXlQcmVmaXg6ICdzJyB9KTsKICAgIHB1c2hieXRlcyAicyIKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTcyCiAgICAvLyBhc3NlcnQoIXRoaXMuc2VudE1lc3NhZ2VzKG1lc3NhZ2UpLmV4aXN0cywgJ0JyaWRnZTogdG9rZW5zIGFscmVhZHkgc2VudCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBCcmlkZ2U6IHRva2VucyBhbHJlYWR5IHNlbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc0CiAgICAvLyB0aGlzLnNlbnRNZXNzYWdlcyhtZXNzYWdlKS52YWx1ZSA9IG5ldyBTdGF0aWNCeXRlcygpOwogICAgcHVzaGJ5dGVzIDB4CiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE3NgogICAgLy8gY29uc3QgZGVzdGluYXRpb25DaGFpbklkID0gbWVzc2FnZS5hdCgxKTsKICAgIGRpZyAxCiAgICBleHRyYWN0IDEgMSAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc3LTE4MQogICAgLy8gY29uc3QgbWVzc2FnZUNvc3QgPSBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uQ29zdCwKICAgIC8vICAgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBtZXNzZW5nZXIgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjIDYgLy8gIm1lc3NlbmdlciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc5CiAgICAvLyBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNzctMTgxCiAgICAvLyBjb25zdCBtZXNzYWdlQ29zdCA9IGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IE1lc3Nlbmdlci5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25Db3N0LAogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBieXRlYyAxMyAvLyBtZXRob2QgImdldFRyYW5zYWN0aW9uQ29zdChieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxODUKICAgIC8vIHJlY2VpdmVyOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5hZGRyZXNzLAogICAgZGlnIDEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTg3LTE4OQogICAgLy8gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogTWVzc2VuZ2VyLnByb3RvdHlwZS5zZW5kTWVzc2FnZSwgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLCBhcmdzOiBbcGF5bWVudFBhcmFtcywgbWVzc2FnZV0sCiAgICAvLyB9KTsKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGR1cAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTgzLTE4NgogICAgLy8gY29uc3QgcGF5bWVudFBhcmFtcyA9IGl0eG4ucGF5bWVudCh7CiAgICAvLyAgIGFtb3VudDogbWVzc2FnZUNvc3QsCiAgICAvLyAgIHJlY2VpdmVyOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5hZGRyZXNzLAogICAgLy8gfSk7CiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE4Ny0xODkKICAgIC8vIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IE1lc3Nlbmdlci5wcm90b3R5cGUuc2VuZE1lc3NhZ2UsIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwgYXJnczogW3BheW1lbnRQYXJhbXMsIG1lc3NhZ2VdLAogICAgLy8gfSk7CiAgICBpdHhuX25leHQKICAgIHB1c2hieXRlcyAweGQwMmY1N2Y1IC8vIG1ldGhvZCAic2VuZE1lc3NhZ2UocGF5LGJ5dGVbMzJdKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciAzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTYKICAgIC8vIGVtaXQ8UmVjZWl2ZUZlZT4oeyBicmlkZ2VUcmFuc2FjdGlvbkNvc3QsIG1lc3NhZ2VUcmFuc2FjdGlvbkNvc3QgfSk7CiAgICBkaWcgMQogICAgaXRvYgogICAgZGlnIDEKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4NGI1NTQxOWIgLy8gbWV0aG9kICJSZWNlaXZlRmVlKHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTU3CiAgICAvLyBhc3NlcnQoYnJpZGdpbmdGZWUgPj0gYnJpZGdlVHJhbnNhY3Rpb25Db3N0ICsgbWVzc2FnZVRyYW5zYWN0aW9uQ29zdCwgJ0JyaWRnZTogbm90IGVub3VnaCBmZWUnKTsKICAgICsKICAgIHVuY292ZXIgMgogICAgPD0KICAgIGFzc2VydCAvLyBCcmlkZ2U6IG5vdCBlbm91Z2ggZmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE1OC0xNjUKICAgIC8vIGVtaXQ8VG9rZW5zU2VudD4oewogICAgLy8gICAgIGFtb3VudCwKICAgIC8vICAgICByZWNpcGllbnQsCiAgICAvLyAgICAgZGVzdGluYXRpb25DaGFpbklkLAogICAgLy8gICAgIHJlY2VpdmVUb2tlbiwKICAgIC8vICAgICBub25jZSwKICAgIC8vICAgICBtZXNzZW5nZXI6IEFMTEJSSURHRV9NRVNTRU5HRVIsCiAgICAvLyAgIH0sCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTYKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC01CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTMKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNjQKICAgIC8vIG1lc3NlbmdlcjogQUxMQlJJREdFX01FU1NFTkdFUiwKICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTU4LTE2NQogICAgLy8gZW1pdDxUb2tlbnNTZW50Pih7CiAgICAvLyAgICAgYW1vdW50LAogICAgLy8gICAgIHJlY2lwaWVudCwKICAgIC8vICAgICBkZXN0aW5hdGlvbkNoYWluSWQsCiAgICAvLyAgICAgcmVjZWl2ZVRva2VuLAogICAgLy8gICAgIG5vbmNlLAogICAgLy8gICAgIG1lc3NlbmdlcjogQUxMQlJJREdFX01FU1NFTkdFUiwKICAgIC8vICAgfSwKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTgtMTY2CiAgICAvLyBlbWl0PFRva2Vuc1NlbnQ+KHsKICAgIC8vICAgICBhbW91bnQsCiAgICAvLyAgICAgcmVjaXBpZW50LAogICAgLy8gICAgIGRlc3RpbmF0aW9uQ2hhaW5JZCwKICAgIC8vICAgICByZWNlaXZlVG9rZW4sCiAgICAvLyAgICAgbm9uY2UsCiAgICAvLyAgICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICB9LAogICAgLy8gKTsKICAgIHB1c2hieXRlcyAweDIyOWZiYWVjIC8vIG1ldGhvZCAiVG9rZW5zU2VudCh1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlWzMyXSxieXRlWzMyXSxieXRlKSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCl9zd2FwQW5kQnJpZGdlX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY3CiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoewogICAgZnJhbWVfZGlnIDEKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzkKICAgIC8vIHByb3RlY3RlZCBicmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yID0gQm94TWFwPEFzc2V0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZicgfSk7CiAgICBwdXNoYnl0ZXMgImYiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY3CiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoewogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAtMgogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNjctMzcxCiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0UHJpY2UsCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW3RoaXMuY2hhaW5JZC52YWx1ZV0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY5CiAgICAvLyBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY5CiAgICAvLyBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNzAKICAgIC8vIGFyZ3M6IFt0aGlzLmNoYWluSWQudmFsdWVdLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNoYWluSWQgPSBHbG9iYWxTdGF0ZTxCeXRlPigpOwogICAgYnl0ZWMgNSAvLyAiY2hhaW5JZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzcwCiAgICAvLyBhcmdzOiBbdGhpcy5jaGFpbklkLnZhbHVlXSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM2Ny0zNzEKICAgIC8vIGNvbnN0IGZlZTogdWludDY0ID0gdGhpcy5icmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yKGFzc2V0KS52YWx1ZSAqIGZlZVRva2VuQW1vdW50IC8gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogR2FzT3JhY2xlLnByb3RvdHlwZS5nZXRQcmljZSwKICAgIC8vICAgYXBwSWQ6IHRoaXMuZ2FzT3JhY2xlLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbdGhpcy5jaGFpbklkLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgcHVzaGJ5dGVzIDB4MWRiNzBjZGQgLy8gbWV0aG9kICJnZXRQcmljZShieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTMyCiAgICAvLyBjb25zdCBmZWVGcm9tU3RhYmxlOiB1aW50NjQgPSB0aGlzLl9jb252ZXJ0QnJpZGdpbmdGZWVJblRva2Vuc1RvTmF0aXZlVG9rZW4oYXNzZXRUcmFuc2ZlclJlZi54ZmVyQXNzZXQsIGZlZVRva2VuQW1vdW50KTsKICAgIGIgX3N3YXBBbmRCcmlkZ2VfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbkA1CgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmhhc2hNZXNzYWdlKGFtb3VudDogdWludDY0LCByZWNpcGllbnQ6IGJ5dGVzLCBzb3VyY2VDaGFpbklkOiBieXRlcywgZGVzdGluYXRpb25DaGFpbklkOiBieXRlcywgcmVjZWl2ZVRva2VuOiBieXRlcywgbm9uY2U6IGJ5dGVzKSAtPiBieXRlczoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmhhc2hNZXNzYWdlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDctMzE1CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIGhhc2hNZXNzYWdlKAogICAgLy8gICBhbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjaXBpZW50OiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIHNvdXJjZUNoYWluSWQ6IEJ5dGUsCiAgICAvLyAgIGRlc3RpbmF0aW9uQ2hhaW5JZDogQnl0ZSwKICAgIC8vICAgcmVjZWl2ZVRva2VuOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIG5vbmNlOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyApOiBTdGF0aWNCeXRlczwzMj4gewogICAgcHJvdG8gNiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxNgogICAgLy8gY29uc3QgYW1vdW50MzIgPSBiemVybygyNCkuY29uY2F0KG9wLml0b2IoYW1vdW50KSk7CiAgICBwdXNoaW50IDI0IC8vIDI0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC02CiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzE3CiAgICAvLyBjb25zdCBzb3VyY2VDaGFpbklkMzIgPSBiemVybygzMSkuY29uY2F0KHNvdXJjZUNoYWluSWQuYnl0ZXMpOwogICAgcHVzaGludCAzMSAvLyAzMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxOC0zMTkKICAgIC8vIGNvbnN0IHBhY2tlZCA9IGFtb3VudDMyCiAgICAvLyAgIC5jb25jYXQocmVjaXBpZW50LmJ5dGVzKQogICAgc3dhcAogICAgZnJhbWVfZGlnIC01CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzE4LTMyMAogICAgLy8gY29uc3QgcGFja2VkID0gYW1vdW50MzIKICAgIC8vICAgLmNvbmNhdChyZWNpcGllbnQuYnl0ZXMpCiAgICAvLyAgIC5jb25jYXQoc291cmNlQ2hhaW5JZDMyKQogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxOC0zMjEKICAgIC8vIGNvbnN0IHBhY2tlZCA9IGFtb3VudDMyCiAgICAvLyAgIC5jb25jYXQocmVjaXBpZW50LmJ5dGVzKQogICAgLy8gICAuY29uY2F0KHNvdXJjZUNoYWluSWQzMikKICAgIC8vICAgLmNvbmNhdChyZWNlaXZlVG9rZW4uYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTgtMzIyCiAgICAvLyBjb25zdCBwYWNrZWQgPSBhbW91bnQzMgogICAgLy8gICAuY29uY2F0KHJlY2lwaWVudC5ieXRlcykKICAgIC8vICAgLmNvbmNhdChzb3VyY2VDaGFpbklkMzIpCiAgICAvLyAgIC5jb25jYXQocmVjZWl2ZVRva2VuLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KG5vbmNlLmJ5dGVzKQogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzIzCiAgICAvLyAuY29uY2F0KEFMTEJSSURHRV9NRVNTRU5HRVIuYnl0ZXMpOwogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTgtMzIzCiAgICAvLyBjb25zdCBwYWNrZWQgPSBhbW91bnQzMgogICAgLy8gICAuY29uY2F0KHJlY2lwaWVudC5ieXRlcykKICAgIC8vICAgLmNvbmNhdChzb3VyY2VDaGFpbklkMzIpCiAgICAvLyAgIC5jb25jYXQocmVjZWl2ZVRva2VuLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KG5vbmNlLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KEFMTEJSSURHRV9NRVNTRU5HRVIuYnl0ZXMpOwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyNQogICAgLy8gY29uc3QgaGFzaCA9IG9wLmtlY2NhazI1NihwYWNrZWQpOyAvLyAzMiBieXRlcwogICAga2VjY2FrMjU2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyOAogICAgLy8gY29uc3Qgd2l0aFNyYyA9IG9wLnNldEJ5dGUoaGFzaCwgMCwgb3AuYnRvaShzb3VyY2VDaGFpbklkLmJ5dGVzKSk7CiAgICBmcmFtZV9kaWcgLTQKICAgIGJ0b2kKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCiAgICBzZXRieXRlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyOQogICAgLy8gY29uc3Qgd2l0aERzdCA9IG9wLnNldEJ5dGUod2l0aFNyYywgMSwgb3AuYnRvaShkZXN0aW5hdGlvbkNoYWluSWQuYnl0ZXMpKTsKICAgIGZyYW1lX2RpZyAtMwogICAgYnRvaQogICAgaW50Y18wIC8vIDEKICAgIHN3YXAKICAgIHNldGJ5dGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzMxCiAgICAvLyByZXR1cm4gbmV3IFN0YXRpY0J5dGVzPDMyPih3aXRoRHN0KTsKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBzaXplCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZChhc3NldDogdWludDY0LCByZWNpcGllbnQ6IGJ5dGVzLCB2VXNkQW1vdW50OiB1aW50NjQsIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCkgLT4gdWludDY0OgpyZWNlaXZlQW5kU3dhcEZyb21WVXNkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjMtMTY4CiAgICAvLyBwcm90ZWN0ZWQgcmVjZWl2ZUFuZFN3YXBGcm9tVlVzZCgKICAgIC8vICAgYXNzZXQ6IEFzc2V0LAogICAgLy8gICByZWNpcGllbnQ6IEFkZHJlc3MsCiAgICAvLyAgIHZVc2RBbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjZWl2ZUFtb3VudE1pbjogdWludDY0LAogICAgLy8gKTogdWludDY0IHsKICAgIHByb3RvIDQgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjkKICAgIC8vIGFzc2VydCh0aGlzLnBvb2xzKGFzc2V0KS5leGlzdHMsICdSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbCcpOwogICAgZnJhbWVfZGlnIC00CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM0CiAgICAvLyBwb29scyA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjkKICAgIC8vIGFzc2VydCh0aGlzLnBvb2xzKGFzc2V0KS5leGlzdHMsICdSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzAKICAgIC8vIGNvbnN0IHBvb2xJZCA9IHRoaXMucG9vbHMoYXNzZXQpLnZhbHVlOwogICAgYm94X2dldAogICAgcG9wCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE3MS0xNzUKICAgIC8vIHJldHVybiBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBQb29sLnByb3RvdHlwZS5zd2FwRnJvbVZVc2QsCiAgICAvLyAgIGFwcElkOiBwb29sSWQsCiAgICAvLyAgIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzQKICAgIC8vIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MgogICAgLy8gcHJpdmF0ZSByZWJhbGFuY2VyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oeyBpbml0aWFsVmFsdWU6IG5ldyBBZGRyZXNzKGJ6ZXJvKDApKSB9KTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBieXRlYyA0IC8vICJyZWJhbGFuY2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzQKICAgIC8vIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTMKICAgID09CiAgICBieXRlYyAxMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTcxLTE3NQogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IFBvb2wucHJvdG90eXBlLnN3YXBGcm9tVlVzZCwKICAgIC8vICAgYXBwSWQ6IHBvb2xJZCwKICAgIC8vICAgYXJnczogW3JlY2lwaWVudCwgdlVzZEFtb3VudCwgcmVjZWl2ZUFtb3VudE1pbiwgcmVjaXBpZW50ID09PSB0aGlzLnJlYmFsYW5jZXIudmFsdWVdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBwdXNoYnl0ZXMgMHgwZDFiNGMwNiAvLyBtZXRob2QgInN3YXBGcm9tVlVzZChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsYm9vbCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNlbmRBbmRTd2FwVG9WVXNkKGFzc2V0OiB1aW50NjQsIHVzZXI6IGJ5dGVzLCBhbW91bnQ6IHVpbnQ2NCkgLT4gdWludDY0OgpzZW5kQW5kU3dhcFRvVlVzZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTc5CiAgICAvLyBwcm90ZWN0ZWQgc2VuZEFuZFN3YXBUb1ZVc2QoYXNzZXQ6IEFzc2V0LCB1c2VyOiBBZGRyZXNzLCBhbW91bnQ6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTgwCiAgICAvLyBhc3NlcnQodGhpcy5wb29scyhhc3NldCkuZXhpc3RzLCAnUm91dGVyOiBubyBwb29sJyk7CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzQKICAgIC8vIHBvb2xzID0gQm94TWFwPEFzc2V0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAncCcgfSk7CiAgICBieXRlYyA4IC8vICJwIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE4MAogICAgLy8gYXNzZXJ0KHRoaXMucG9vbHMoYXNzZXQpLmV4aXN0cywgJ1JvdXRlcjogbm8gcG9vbCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBSb3V0ZXI6IG5vIHBvb2wKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTgxCiAgICAvLyBjb25zdCBwb29sSWQgPSB0aGlzLnBvb2xzKGFzc2V0KS52YWx1ZTsKICAgIGJveF9nZXQKICAgIHBvcAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODMtMTg4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE4NgogICAgLy8gYXNzZXRSZWNlaXZlcjogQXBwbGljYXRpb24ocG9vbElkKS5hZGRyZXNzLAogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODMtMTg3CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODMtMTg4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxOTAtMTk0CiAgICAvLyByZXR1cm4gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogUG9vbC5wcm90b3R5cGUuc3dhcFRvVlVzZCwKICAgIC8vICAgYXBwSWQ6IHBvb2xJZCwKICAgIC8vICAgYXJnczogW3VzZXIsIGFtb3VudCwgdXNlciA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxOTMKICAgIC8vIGFyZ3M6IFt1c2VyLCBhbW91bnQsIHVzZXIgPT09IHRoaXMucmViYWxhbmNlci52YWx1ZV0sCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUyCiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDQgLy8gInJlYmFsYW5jZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE5MwogICAgLy8gYXJnczogW3VzZXIsIGFtb3VudCwgdXNlciA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgID09CiAgICBieXRlYyAxMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTkwLTE5NAogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IFBvb2wucHJvdG90eXBlLnN3YXBUb1ZVc2QsCiAgICAvLyAgIGFwcElkOiBwb29sSWQsCiAgICAvLyAgIGFyZ3M6IFt1c2VyLCBhbW91bnQsIHVzZXIgPT09IHRoaXMucmViYWxhbmNlci52YWx1ZV0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIHB1c2hieXRlcyAweGQ5NzhhZDE0IC8vIG1ldGhvZCAic3dhcFRvVlVzZChhZGRyZXNzLHVpbnQ2NCxib29sKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRHYXNVc2FnZShjaGFpbklkOiBieXRlcykgLT4gdWludDY0OgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTctMTgKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gZ2V0R2FzVXNhZ2UoY2hhaW5JZDogQnl0ZSk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTAKICAgIC8vIGdhc1VzYWdlID0gQm94TWFwPEJ5dGUsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICd1JyB9KTsKICAgIGJ5dGVjIDEyIC8vICJ1IgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTkKICAgIC8vIHJldHVybiB0aGlzLmdhc1VzYWdlKGNoYWluSWQpLnZhbHVlOwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZDogYnl0ZXMpIC0+IHVpbnQ2NDoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzQtMzUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdChjaGFpbklkOiBCeXRlKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czoxMAogICAgLy8gZ2FzVXNhZ2UgPSBCb3hNYXA8Qnl0ZSwgdWludDY0Pih7IGtleVByZWZpeDogJ3UnIH0pOwogICAgYnl0ZWMgMTIgLy8gInUiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozNgogICAgLy8gY29uc3QgZ2FzQW1vdW50ID0gdGhpcy5nYXNVc2FnZShjaGFpbklkKS52YWx1ZTsKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjM3LTQxCiAgICAvLyByZXR1cm4gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogR2FzT3JhY2xlLnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbkdhc0Nvc3RJbk5hdGl2ZVRva2VuLAogICAgLy8gICBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtjaGFpbklkLCBnYXNBbW91bnRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjM5CiAgICAvLyBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzkKICAgIC8vIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjQwCiAgICAvLyBhcmdzOiBbY2hhaW5JZCwgZ2FzQW1vdW50XSwKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzctNDEKICAgIC8vIHJldHVybiBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBHYXNPcmFjbGUucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uR2FzQ29zdEluTmF0aXZlVG9rZW4sCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2NoYWluSWQsIGdhc0Ftb3VudF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIHB1c2hieXRlcyAweGMyYWZjY2QxIC8vIG1ldGhvZCAiZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5OYXRpdmVUb2tlbihieXRlLHVpbnQ2NCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo6T3duYWJsZS5vbmx5T3duZXIoKSAtPiB2b2lkOgpvbmx5T3duZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsICdPbmx5IG93bmVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjXzIgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTMKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLCAnT25seSBvd25lcicpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gT25seSBvd25lcgogICAgcmV0c3ViCg==",clear:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CyAFAQAIINR6JhEEFR98dQdjYW5Td2FwBW93bmVyCWdhc09yYWNsZQpyZWJhbGFuY2VyB2NoYWluSWQJbWVzc2VuZ2VyAXQBcA1zdG9wQXV0aG9yaXR5AQEBAAF1BENBeqME90dbggwVH3x1AAAAAAAAPVQDBoEBMRhAAAkjrycETGcpImcxGRREMRhBAM2CDARl9wVzBD44AnwEpGAK7QTeTK1KBE66ByEExhftcwRXUxVgBGOAgngEBlB8agT1+W6zBEsGLKAEw83ZKicNggkEB9+EKQSAxccPBEE00GgE7xX4VQRrHuIjBBhwpJIENVcyTQQEsWHxBNKzV+snDoIEBAylrnoEJ0cPBwTL/G0CBOF7r7Q2GgCOGwDZARQBZAGpArACzQLqAwYDJANdA+QEHgRCAAYAAQRXBMsFEwUoBTYFPgVPBWAFcgWQBaEFswAnD7AiQycPsCJDgARmTKQENhoAjgEAiACKAgCL/oEKCIsAMgwNQQAqsYEGshCBBbIZJxCyHicQsh+L/40CAAsABLNC/9syALIBQv/1I7IBQv/viYoBAYv/OBQyChJEi/84IDIDEkSL/zgVMgMSRIv/OBKJigEBi/84BzIKE0EAAiOJi/84IDIDE0EAAiOJi/84CTIDE0EAAiOJi/84CIk2GgFJFSUSRDYaAkkVIhJENhoDSRUkEkQXNhoESRUkEkQXKksEZytMZycJTwNnJwVPAmcnBkxnIkM2GgFJFSQSRBeIB3exMgqyFCOyErIRgQSyECOyAbOAGEJyaWRnZTogb3B0LWluIGNvbXBsZXRlZLAiQzEWgQIJSTgQIhJEMRYiCUk4EIEEEkQ2GgFJFSUSRDYaAkkVIhJENhoDSRUlEkQ2GgRJFSUSRDYaBUkVJBJEF08GiP8cTgZOBiNPB4gEYSJDMRYiCUk4EIEEEkQ2GgFJFSUSRDYaAkkVIhJENhoDSRUlEkQ2GgRJFSUSRDYaBUkVJBJEFzYaBkkVJBJEFyNOB4gEHCJDMRYiCUk4ECISRDYaAUkVJBJEFzYaAklOA0kVJRJENhoDSRUiEkQ2GgRJFSUSRDYaBUlOBkkVJRJENhoGSRUkEkQXIyllRESAAWJLBFBJvUUBRE8HiP50SSEED0QjJwVlREsISwhPCE8DSwhPCIgFA08CvkRLAUxQAkxRAAJMUQIgUElOBkkVJRJEgAFtSwFQSb1FARREgAC/sSMnBmVEgAQz4UeqshqyGLIagQayECOyAbO0PklXBABMVwAEKBJESRUiEkQjU0RPAoEYW08DTwRPBIgEz0whBAlJQQAPsUsEsgdJsggishAjsgGzSwEWSwVQSwRQJwpQSwNQgARFg2rWTFCwIkM2GgFJFSISRDYaAkkVJRJEiAWZgAFiTwJQTL8iQzYaAUkVIhJENhoCSRUlEkSIBXxQJwdMUIAAvyJDNhoBSRUiEkQ2GgJJFSUSRIgFX1AnB0xQvEgiQzYaAUkVJBJEF4gFSrEjKmVEsgeyCCKyECOyAbMiQzYaAUkVJBJEF0mIBSsyCklOAkxwAExJTwJEQQAasSMqZUSyFEmyEksCshFLAbIAgQSyECOyAbMiQzYaAUkVIhJENhoCSRUkEkQXSwGIBJ+xIycGZUQnDrIaSwOyGrIYgQayECOyAbO0PklXBABMVwAEKBJESRUkEkQXsSMrZUROAggWgAR799UMshpPA7IashqyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF0wWgAFlTFC+RBcKFihMULAiQzYaAUkVJBJEFzYaAkkVJRJENhoDSRUiEkQ2GgRJFSISRDYaBUkVJRJENhoGSRUlEkSIAwQoTFCwIkM2GgFJFSISRDYaAkkVJRJEUCcHTFC9RQEnCyNPAlQoTFCwIkM2GgFJFSISRIgD0SEECBYoTFCwIkMxFiIJSTgQgQQSRDYaAUkVJBJEFzYaAkkVJRJENhoDSRUkEkQXNhoESRUkEkQXI4j7kCMpZUREMQBLBIj7v08FOBFJSwNLA4gDB0sGSwZPAk8GiAKiTwNPBFBPAhZQTwMWUE8CFlBMFlCABBVARLNMULAiQzYaAUkVJBJEFzYaAkkVJBJEF4gDfEkWJwhLAVBPAxa/THEBRIEJTAlJgQYIgQpMlIABZksDUEwWv4EKTJSAAWVPAlBMFr8iQzYaAUkVJBJEF4gDPRYnCExQvEgiQzEAIycJZUQSRCkjZyJDiAMjKSJnIkM2GgFJFSUSRIgDEycJTGciQzYaAUkVJRJEiAMCJwRMZyJDNhoBSRUiEkSIAqcWKExQsCJDNhoBSRUiEkQ2GgJJFSQSRBeIAtYnDE8CUEwWvyJDNhoBSRUkEkQXiALAK0xnIkM2GgFJFSISRIgCchYoTFCwIkM2GgFJFSUSRIgCnipMZyJDiggAi/8jiPpNIyllRESL+Yj6fkmL/g1EJa+L+hIURIv5OBGL/kAA7iOL+EsBCIv4Fk8CFlCL/hZQgAQ2uvrdTFCwiwCL/gmLATEATwKIAZUjJwVlRIv7SwETRIv7i/xQJwdMUL1FAURLAYv6TwKL+4v8i/2IAOKL+4gB3yEECIABc0sCUEm9RQEURIAAv0sBVwEBsSMnBmVEJw2yGkyyGkmyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF0sBcghEsbIHSbIIIrIQI7IBtoAE0C9X9bIaTwOyGkyyGIEGshAjsgGzSwEWSwEWUIAES1VBm0xQsAhPAg5EFov6UIv7UIv8UIv9UCcKUIAEIp+67ExQsImLARaAAWZMUL5EF4v+C7EjK2VEIycFZUSABB23DN2yGrIashiBBrIQI7IBs7Q+SVcEAExXAAQoEkRJFSQSRBcKQv7QigYBgRivi/oWUIEfr4v8UEyL+1BMUIv+UIv/UCcKUAKL/BcjTFaL/RciTFZJFSUSRImKBAGL/BYnCExQSb1FAUS+SBexi/4Wi/8WIycEZUSL/RInCyNPAlSABA0bTAayGov9shpPArIaTLIashqyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF4mKAwGL/RYnCExQSb1FAUS+SBexSXIIRLIUi/+yEov9shGBBLIQI7IBs7GL/xYjJwRlRIv+EicLI08CVIAE2XitFLIai/6yGkyyGrIashiBBrIQI7IBs7Q+SVcEAExXAAQoEkRJFSQSRBeJigEBJwyL/1C+RBeJigEBJwyL/1C+RBexIytlREwWgATCr8zRshqL/7IashqyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF4kxACMqZUQSRIk=",clear:"C4EBQw=="},events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"feeFromNative"},{type:"uint64",name:"feeFromStable"},{type:"uint64",name:"feeStableTokenAmount"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]},{name:"TokensReceived",args:[{type:"uint64",name:"receiveAmount"},{type:"address",name:"recipient"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"},{type:"byte[32]",name:"message"}]},{name:"Swapped",args:[{type:"address",name:"sender"},{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"receiveTokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"receivedAmount"}]}],templateVariables:{}};var X=class o{static get create(){return{_resolveByMethod(a){switch(a.method){case"createApplication":case"createApplication(address,byte,uint64,uint64)void":return o.create.createApplication(a)}throw new Error("Unknown ' + verb + ' method")},createApplication(a){return{...a,method:"createApplication(address,byte,uint64,uint64)void",args:Array.isArray(a.args)?a.args:[a.args.owner,a.args.chainId,a.args.messenger,a.args.gasOracle]}}}}static optInAsset(a){return{...a,method:"optInAsset(uint64)void",args:Array.isArray(a.args)?a.args:[a.args.asset]}}static swapAndBridge(a){return{...a,method:"swapAndBridge(pay,axfer,byte[32],byte,byte[32],byte[32],uint64)void",args:Array.isArray(a.args)?a.args:[a.args.paymentRef,a.args.assetTransferRef,a.args.recipient,a.args.destinationChainId,a.args.receiveToken,a.args.nonce,a.args.budget]}}static swapAndBridgeWithStable(a){return{...a,method:"swapAndBridgeWithStable(axfer,byte[32],byte,byte[32],byte[32],uint64,uint64)void",args:Array.isArray(a.args)?a.args:[a.args.assetTransferRef,a.args.recipient,a.args.destinationChainId,a.args.receiveToken,a.args.nonce,a.args.feeTokenAmount,a.args.budget]}}static receiveTokens(a){return{...a,method:"receiveTokens(pay,uint64,byte[32],byte,byte[32],byte[32],uint64)void",args:Array.isArray(a.args)?a.args:[a.args.paymentRef,a.args.amount,a.args.recipient,a.args.sourceChainId,a.args.receiveToken,a.args.nonce,a.args.receiveAmountMin]}}static registerBridge(a){return{...a,method:"registerBridge(byte,byte[32])void",args:Array.isArray(a.args)?a.args:[a.args.chainId,a.args.bridgeAddress]}}static addBridgeToken(a){return{...a,method:"addBridgeToken(byte,byte[32])void",args:Array.isArray(a.args)?a.args:[a.args.chainId,a.args.tokenAddress]}}static removeBridgeToken(a){return{...a,method:"removeBridgeToken(byte,byte[32])void",args:Array.isArray(a.args)?a.args:[a.args.chainId,a.args.tokenAddress]}}static withdrawGasTokens(a){return{...a,method:"withdrawGasTokens(uint64)void",args:Array.isArray(a.args)?a.args:[a.args.amount]}}static withdrawBridgingFeeInTokens(a){return{...a,method:"withdrawBridgingFeeInTokens(uint64)void",args:Array.isArray(a.args)?a.args:[a.args.asset]}}static getBridgingCostInTokens(a){return{...a,method:"getBridgingCostInTokens(byte,uint64)uint64",args:Array.isArray(a.args)?a.args:[a.args.destinationChainId,a.args.asset]}}static hashMessage(a){return{...a,method:"hashMessage(uint64,byte[32],byte,byte,byte[32],byte[32])byte[32]",args:Array.isArray(a.args)?a.args:[a.args.amount,a.args.recipient,a.args.sourceChainId,a.args.destinationChainId,a.args.receiveToken,a.args.nonce]}}static isOtherBridgeTokenSupported(a){return{...a,method:"isOtherBridgeTokenSupported(byte,byte[32])bool",args:Array.isArray(a.args)?a.args:[a.args.chainId,a.args.token]}}static getTransactionCost(a){return{...a,method:"getTransactionCost(byte)uint64",args:Array.isArray(a.args)?a.args:[a.args.chainId]}}static getReceiveTokensCost(a){return{...a,method:"getReceiveTokensCost()uint64",args:Array.isArray(a.args)?a.args:[]}}static getSendTransactionStorageCost(a){return{...a,method:"getSendTransactionStorageCost()uint64",args:Array.isArray(a.args)?a.args:[]}}static swap(a){return{...a,method:"swap(axfer,uint64,address,uint64,uint64)void",args:Array.isArray(a.args)?a.args:[a.args.assetTransferRef,a.args.receiveAsset,a.args.recipient,a.args.receiveAmountMin,a.args.budget]}}static addPool(a){return{...a,method:"addPool(uint64,uint64)void",args:Array.isArray(a.args)?a.args:[a.args.poolId,a.args.asset]}}static removePool(a){return{...a,method:"removePool(uint64)void",args:Array.isArray(a.args)?a.args:[a.args.tokenId]}}static stopSwap(a){return{...a,method:"stopSwap()void",args:Array.isArray(a.args)?a.args:[]}}static startSwap(a){return{...a,method:"startSwap()void",args:Array.isArray(a.args)?a.args:[]}}static setStopAuthority(a){return{...a,method:"setStopAuthority(address)void",args:Array.isArray(a.args)?a.args:[a.args.stopAuthority]}}static setRebalancer(a){return{...a,method:"setRebalancer(address)void",args:Array.isArray(a.args)?a.args:[a.args.rebalancer]}}static getGasUsage(a){return{...a,method:"getGasUsage(byte)uint64",args:Array.isArray(a.args)?a.args:[a.args.chainId]}}static setGasUsage(a){return{...a,method:"setGasUsage(byte,uint64)void",args:Array.isArray(a.args)?a.args:[a.args.chainId,a.args.gasAmount]}}static setGasOracle(a){return{...a,method:"setGasOracle(uint64)void",args:Array.isArray(a.args)?a.args:[a.args.gasOracle]}}static getTransactionRelayerCost(a){return{...a,method:"getTransactionRelayerCost(byte)uint64",args:Array.isArray(a.args)?a.args:[a.args.chainId]}}static transferOwnership(a){return{...a,method:"transferOwnership(address)void",args:Array.isArray(a.args)?a.args:[a.args.newOwner]}}};var Ba=class o{appClient;constructor(a){this.appClient=a instanceof fa?a:new fa({...a,appSpec:Ra})}decodeReturnValue(a,i){return i!==void 0?zs(i,this.appClient.getABIMethod(a),Ra.structs):void 0}static async fromCreatorAndName(a){return new o(await fa.fromCreatorAndName({...a,appSpec:Ra}))}static async fromNetwork(a){return new o(await fa.fromNetwork({...a,appSpec:Ra}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={clearState:a=>this.appClient.params.bare.clearState(a),optInAsset:a=>this.appClient.params.call(X.optInAsset(a)),swapAndBridge:a=>this.appClient.params.call(X.swapAndBridge(a)),swapAndBridgeWithStable:a=>this.appClient.params.call(X.swapAndBridgeWithStable(a)),receiveTokens:a=>this.appClient.params.call(X.receiveTokens(a)),registerBridge:a=>this.appClient.params.call(X.registerBridge(a)),addBridgeToken:a=>this.appClient.params.call(X.addBridgeToken(a)),removeBridgeToken:a=>this.appClient.params.call(X.removeBridgeToken(a)),withdrawGasTokens:a=>this.appClient.params.call(X.withdrawGasTokens(a)),withdrawBridgingFeeInTokens:a=>this.appClient.params.call(X.withdrawBridgingFeeInTokens(a)),getBridgingCostInTokens:a=>this.appClient.params.call(X.getBridgingCostInTokens(a)),hashMessage:a=>this.appClient.params.call(X.hashMessage(a)),isOtherBridgeTokenSupported:a=>this.appClient.params.call(X.isOtherBridgeTokenSupported(a)),getTransactionCost:a=>this.appClient.params.call(X.getTransactionCost(a)),getReceiveTokensCost:(a={args:[]})=>this.appClient.params.call(X.getReceiveTokensCost(a)),getSendTransactionStorageCost:(a={args:[]})=>this.appClient.params.call(X.getSendTransactionStorageCost(a)),swap:a=>this.appClient.params.call(X.swap(a)),addPool:a=>this.appClient.params.call(X.addPool(a)),removePool:a=>this.appClient.params.call(X.removePool(a)),stopSwap:(a={args:[]})=>this.appClient.params.call(X.stopSwap(a)),startSwap:(a={args:[]})=>this.appClient.params.call(X.startSwap(a)),setStopAuthority:a=>this.appClient.params.call(X.setStopAuthority(a)),setRebalancer:a=>this.appClient.params.call(X.setRebalancer(a)),getGasUsage:a=>this.appClient.params.call(X.getGasUsage(a)),setGasUsage:a=>this.appClient.params.call(X.setGasUsage(a)),setGasOracle:a=>this.appClient.params.call(X.setGasOracle(a)),getTransactionRelayerCost:a=>this.appClient.params.call(X.getTransactionRelayerCost(a)),transferOwnership:a=>this.appClient.params.call(X.transferOwnership(a))};createTransaction={clearState:a=>this.appClient.createTransaction.bare.clearState(a),optInAsset:a=>this.appClient.createTransaction.call(X.optInAsset(a)),swapAndBridge:a=>this.appClient.createTransaction.call(X.swapAndBridge(a)),swapAndBridgeWithStable:a=>this.appClient.createTransaction.call(X.swapAndBridgeWithStable(a)),receiveTokens:a=>this.appClient.createTransaction.call(X.receiveTokens(a)),registerBridge:a=>this.appClient.createTransaction.call(X.registerBridge(a)),addBridgeToken:a=>this.appClient.createTransaction.call(X.addBridgeToken(a)),removeBridgeToken:a=>this.appClient.createTransaction.call(X.removeBridgeToken(a)),withdrawGasTokens:a=>this.appClient.createTransaction.call(X.withdrawGasTokens(a)),withdrawBridgingFeeInTokens:a=>this.appClient.createTransaction.call(X.withdrawBridgingFeeInTokens(a)),getBridgingCostInTokens:a=>this.appClient.createTransaction.call(X.getBridgingCostInTokens(a)),hashMessage:a=>this.appClient.createTransaction.call(X.hashMessage(a)),isOtherBridgeTokenSupported:a=>this.appClient.createTransaction.call(X.isOtherBridgeTokenSupported(a)),getTransactionCost:a=>this.appClient.createTransaction.call(X.getTransactionCost(a)),getReceiveTokensCost:(a={args:[]})=>this.appClient.createTransaction.call(X.getReceiveTokensCost(a)),getSendTransactionStorageCost:(a={args:[]})=>this.appClient.createTransaction.call(X.getSendTransactionStorageCost(a)),swap:a=>this.appClient.createTransaction.call(X.swap(a)),addPool:a=>this.appClient.createTransaction.call(X.addPool(a)),removePool:a=>this.appClient.createTransaction.call(X.removePool(a)),stopSwap:(a={args:[]})=>this.appClient.createTransaction.call(X.stopSwap(a)),startSwap:(a={args:[]})=>this.appClient.createTransaction.call(X.startSwap(a)),setStopAuthority:a=>this.appClient.createTransaction.call(X.setStopAuthority(a)),setRebalancer:a=>this.appClient.createTransaction.call(X.setRebalancer(a)),getGasUsage:a=>this.appClient.createTransaction.call(X.getGasUsage(a)),setGasUsage:a=>this.appClient.createTransaction.call(X.setGasUsage(a)),setGasOracle:a=>this.appClient.createTransaction.call(X.setGasOracle(a)),getTransactionRelayerCost:a=>this.appClient.createTransaction.call(X.getTransactionRelayerCost(a)),transferOwnership:a=>this.appClient.createTransaction.call(X.transferOwnership(a))};send={clearState:a=>this.appClient.send.bare.clearState(a),optInAsset:async a=>{let i=await this.appClient.send.call(X.optInAsset(a));return{...i,return:i.return}},swapAndBridge:async a=>{let i=await this.appClient.send.call(X.swapAndBridge(a));return{...i,return:i.return}},swapAndBridgeWithStable:async a=>{let i=await this.appClient.send.call(X.swapAndBridgeWithStable(a));return{...i,return:i.return}},receiveTokens:async a=>{let i=await this.appClient.send.call(X.receiveTokens(a));return{...i,return:i.return}},registerBridge:async a=>{let i=await this.appClient.send.call(X.registerBridge(a));return{...i,return:i.return}},addBridgeToken:async a=>{let i=await this.appClient.send.call(X.addBridgeToken(a));return{...i,return:i.return}},removeBridgeToken:async a=>{let i=await this.appClient.send.call(X.removeBridgeToken(a));return{...i,return:i.return}},withdrawGasTokens:async a=>{let i=await this.appClient.send.call(X.withdrawGasTokens(a));return{...i,return:i.return}},withdrawBridgingFeeInTokens:async a=>{let i=await this.appClient.send.call(X.withdrawBridgingFeeInTokens(a));return{...i,return:i.return}},getBridgingCostInTokens:async a=>{let i=await this.appClient.send.call(X.getBridgingCostInTokens(a));return{...i,return:i.return}},hashMessage:async a=>{let i=await this.appClient.send.call(X.hashMessage(a));return{...i,return:i.return}},isOtherBridgeTokenSupported:async a=>{let i=await this.appClient.send.call(X.isOtherBridgeTokenSupported(a));return{...i,return:i.return}},getTransactionCost:async a=>{let i=await this.appClient.send.call(X.getTransactionCost(a));return{...i,return:i.return}},getReceiveTokensCost:async(a={args:[]})=>{let i=await this.appClient.send.call(X.getReceiveTokensCost(a));return{...i,return:i.return}},getSendTransactionStorageCost:async(a={args:[]})=>{let i=await this.appClient.send.call(X.getSendTransactionStorageCost(a));return{...i,return:i.return}},swap:async a=>{let i=await this.appClient.send.call(X.swap(a));return{...i,return:i.return}},addPool:async a=>{let i=await this.appClient.send.call(X.addPool(a));return{...i,return:i.return}},removePool:async a=>{let i=await this.appClient.send.call(X.removePool(a));return{...i,return:i.return}},stopSwap:async(a={args:[]})=>{let i=await this.appClient.send.call(X.stopSwap(a));return{...i,return:i.return}},startSwap:async(a={args:[]})=>{let i=await this.appClient.send.call(X.startSwap(a));return{...i,return:i.return}},setStopAuthority:async a=>{let i=await this.appClient.send.call(X.setStopAuthority(a));return{...i,return:i.return}},setRebalancer:async a=>{let i=await this.appClient.send.call(X.setRebalancer(a));return{...i,return:i.return}},getGasUsage:async a=>{let i=await this.appClient.send.call(X.getGasUsage(a));return{...i,return:i.return}},setGasUsage:async a=>{let i=await this.appClient.send.call(X.setGasUsage(a));return{...i,return:i.return}},setGasOracle:async a=>{let i=await this.appClient.send.call(X.setGasOracle(a));return{...i,return:i.return}},getTransactionRelayerCost:async a=>{let i=await this.appClient.send.call(X.getTransactionRelayerCost(a));return{...i,return:i.return}},transferOwnership:async a=>{let i=await this.appClient.send.call(X.transferOwnership(a));return{...i,return:i.return}}};clone(a){return new o(this.appClient.clone(a))}async getBridgingCostInTokens(a){return(await this.appClient.send.call(X.getBridgingCostInTokens(a))).return}async hashMessage(a){return(await this.appClient.send.call(X.hashMessage(a))).return}async isOtherBridgeTokenSupported(a){return(await this.appClient.send.call(X.isOtherBridgeTokenSupported(a))).return}async getTransactionCost(a){return(await this.appClient.send.call(X.getTransactionCost(a))).return}async getReceiveTokensCost(a={args:[]}){return(await this.appClient.send.call(X.getReceiveTokensCost(a))).return}async getSendTransactionStorageCost(a={args:[]}){return(await this.appClient.send.call(X.getSendTransactionStorageCost(a))).return}async getGasUsage(a){return(await this.appClient.send.call(X.getGasUsage(a))).return}async getTransactionRelayerCost(a){return(await this.appClient.send.call(X.getTransactionRelayerCost(a))).return}state={global:{getAll:async()=>{let a=await this.appClient.state.global.getAll();return{chainId:a.chainId,messenger:a.messenger,stopAuthority:a.stopAuthority,rebalancer:a.rebalancer,canSwap:a.canSwap,gasOracle:a.gasOracle,owner:a.owner}},chainId:async()=>await this.appClient.state.global.getValue("chainId"),messenger:async()=>await this.appClient.state.global.getValue("messenger"),stopAuthority:async()=>await this.appClient.state.global.getValue("stopAuthority"),rebalancer:async()=>await this.appClient.state.global.getValue("rebalancer"),canSwap:async()=>await this.appClient.state.global.getValue("canSwap"),gasOracle:async()=>await this.appClient.state.global.getValue("gasOracle"),owner:async()=>await this.appClient.state.global.getValue("owner")},box:{getAll:async()=>{let a=await this.appClient.state.box.getAll();return{}},processedMessages:{getMap:async()=>await this.appClient.state.box.getMap("processedMessages"),value:async a=>await this.appClient.state.box.getMapValue("processedMessages",a)},sentMessages:{getMap:async()=>await this.appClient.state.box.getMap("sentMessages"),value:async a=>await this.appClient.state.box.getMapValue("sentMessages",a)},otherBridges:{getMap:async()=>await this.appClient.state.box.getMap("otherBridges"),value:async a=>await this.appClient.state.box.getMapValue("otherBridges",a)},otherBridgeTokens:{getMap:async()=>await this.appClient.state.box.getMap("otherBridgeTokens"),value:async a=>await this.appClient.state.box.getMapValue("otherBridgeTokens",a)},pools:{getMap:async()=>await this.appClient.state.box.getMap("pools"),value:async a=>await this.appClient.state.box.getMapValue("pools",a)},fromGasOracleScalingFactor:{getMap:async()=>await this.appClient.state.box.getMap("fromGasOracleScalingFactor"),value:async a=>await this.appClient.state.box.getMapValue("fromGasOracleScalingFactor",a)},bridgingFeeConversionScalingFactor:{getMap:async()=>await this.appClient.state.box.getMap("bridgingFeeConversionScalingFactor"),value:async a=>await this.appClient.state.box.getMapValue("bridgingFeeConversionScalingFactor",a)},gasUsage:{getMap:async()=>await this.appClient.state.box.getMap("gasUsage"),value:async a=>await this.appClient.state.box.getMapValue("gasUsage",a)}}};newGroup(){let a=this,i=this.algorand.newGroup(),r=Promise.resolve(),s=[];return{optInAsset(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.optInAsset(d))),s.push(void 0),this},swapAndBridge(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.swapAndBridge(d))),s.push(void 0),this},swapAndBridgeWithStable(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.swapAndBridgeWithStable(d))),s.push(void 0),this},receiveTokens(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.receiveTokens(d))),s.push(void 0),this},registerBridge(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.registerBridge(d))),s.push(void 0),this},addBridgeToken(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.addBridgeToken(d))),s.push(void 0),this},removeBridgeToken(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.removeBridgeToken(d))),s.push(void 0),this},withdrawGasTokens(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.withdrawGasTokens(d))),s.push(void 0),this},withdrawBridgingFeeInTokens(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.withdrawBridgingFeeInTokens(d))),s.push(void 0),this},getBridgingCostInTokens(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.getBridgingCostInTokens(d))),s.push(A=>a.decodeReturnValue("getBridgingCostInTokens(byte,uint64)uint64",A)),this},hashMessage(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.hashMessage(d))),s.push(A=>a.decodeReturnValue("hashMessage(uint64,byte[32],byte,byte,byte[32],byte[32])byte[32]",A)),this},isOtherBridgeTokenSupported(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.isOtherBridgeTokenSupported(d))),s.push(A=>a.decodeReturnValue("isOtherBridgeTokenSupported(byte,byte[32])bool",A)),this},getTransactionCost(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.getTransactionCost(d))),s.push(A=>a.decodeReturnValue("getTransactionCost(byte)uint64",A)),this},getReceiveTokensCost(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.getReceiveTokensCost(d))),s.push(A=>a.decodeReturnValue("getReceiveTokensCost()uint64",A)),this},getSendTransactionStorageCost(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.getSendTransactionStorageCost(d))),s.push(A=>a.decodeReturnValue("getSendTransactionStorageCost()uint64",A)),this},swap(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.swap(d))),s.push(void 0),this},addPool(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.addPool(d))),s.push(void 0),this},removePool(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.removePool(d))),s.push(void 0),this},stopSwap(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.stopSwap(d))),s.push(void 0),this},startSwap(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.startSwap(d))),s.push(void 0),this},setStopAuthority(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.setStopAuthority(d))),s.push(void 0),this},setRebalancer(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.setRebalancer(d))),s.push(void 0),this},getGasUsage(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.getGasUsage(d))),s.push(A=>a.decodeReturnValue("getGasUsage(byte)uint64",A)),this},setGasUsage(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.setGasUsage(d))),s.push(void 0),this},setGasOracle(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.setGasOracle(d))),s.push(void 0),this},getTransactionRelayerCost(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.getTransactionRelayerCost(d))),s.push(A=>a.decodeReturnValue("getTransactionRelayerCost(byte)uint64",A)),this},transferOwnership(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.transferOwnership(d))),s.push(void 0),this},clearState(d){return r=r.then(()=>i.addAppCall(a.params.clearState(d))),this},addTransaction(d,A){return r=r.then(()=>i.addTransaction(d,A)),this},async composer(){return await r,i},async simulate(d){await r;let A=await(d?i.simulate(d):i.simulate());return{...A,returns:A.returns?.map((l,u)=>s[u]!==void 0?s[u](l):l.returnValue)}},async send(d){await r;let A=await i.send(d);return{...A,returns:A.returns?.map((l,u)=>s[u]!==void 0?s[u](l):l.returnValue)}}}}};import{getArc56ReturnValue as Os}from"@algorandfoundation/algokit-utils/types/app-arc56";import{AppClient as Ta}from"@algorandfoundation/algokit-utils/types/app-client";import{AppFactory as _l}from"@algorandfoundation/algokit-utils/types/app-factory";var Ya={name:"PaddingUtil",structs:{},methods:[{name:"createApplication",args:[],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}}],arcs:[22,28],networks:{},state:{schema:{global:{ints:0,bytes:0},local:{ints:0,bytes:0}},keys:{global:{},local:{},box:{}},maps:{global:{},local:{},box:{}}},bareActions:{create:[],call:["NoOp"]},sourceInfo:{approval:{sourceInfo:[{pc:[27],errorMessage:"OnCompletion must be NoOp && can only call when creating"},{pc:[37],errorMessage:"OnCompletion must be NoOp && can only call when not creating"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3BhZGRpbmctdXRpbC5jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBQYWRkaW5nVXRpbCBleHRlbmRzIENvbnRyYWN0IGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9wYWRkaW5nQDUKICAgIHB1c2hieXRlcyAweGI4NDQ3YjM2IC8vIG1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2NyZWF0ZUFwcGxpY2F0aW9uX3JvdXRlQDMKICAgIGVycgoKbWFpbl9jcmVhdGVBcHBsaWNhdGlvbl9yb3V0ZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wYWRkaW5nLXV0aWwuY29udHJhY3QuYWxnby50czo2CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbigpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCgptYWluX3BhZGRpbmdANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcGFkZGluZy11dGlsLmNvbnRyYWN0LmFsZ28udHM6OQogICAgLy8gQGJhcmVtZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgTm9PcCAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==",clear:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CzEbQQAZgAS4RHs2NhoAjgEAAQAxGRQxGBQQRIEBQzEZFDEYEESBAUM=",clear:"C4EBQw=="},events:[],templateVariables:{}};var Wa=class o{appClient;constructor(a){this.appClient=a instanceof Ta?a:new Ta({...a,appSpec:Ya})}decodeReturnValue(a,i){return i!==void 0?Os(i,this.appClient.getABIMethod(a),Ya.structs):void 0}static async fromCreatorAndName(a){return new o(await Ta.fromCreatorAndName({...a,appSpec:Ya}))}static async fromNetwork(a){return new o(await Ta.fromNetwork({...a,appSpec:Ya}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={clearState:a=>this.appClient.params.bare.clearState(a),bare:a=>this.appClient.params.bare.call(a)};createTransaction={clearState:a=>this.appClient.createTransaction.bare.clearState(a),bare:a=>this.appClient.createTransaction.bare.call(a)};send={clearState:a=>this.appClient.send.bare.clearState(a),bare:a=>this.appClient.send.bare.call(a)};clone(a){return new o(this.appClient.clone(a))}state={};newGroup(){let a=this,i=this.algorand.newGroup(),r=Promise.resolve(),s=[];return{bare(d){return r=r.then(()=>i.addAppCall(a.params.bare(d))),this},clearState(d){return r=r.then(()=>i.addAppCall(a.params.clearState(d))),this},addTransaction(d,A){return r=r.then(()=>i.addTransaction(d,A)),this},async composer(){return await r,i},async simulate(d){await r;let A=await(d?i.simulate(d):i.simulate());return{...A,returns:A.returns?.map((l,u)=>s[u]!==void 0?s[u](l):l.returnValue)}},async send(d){await r;let A=await i.send(d);return{...A,returns:A.returns?.map((l,u)=>s[u]!==void 0?s[u](l):l.returnValue)}}}}};import{populateAppCallResources as Qs}from"@algorandfoundation/algokit-utils";import Us,{AtomicTransactionComposer as Ks,makeBasicAccountTransactionSigner as Ds}from"algosdk";function Gt(o){return(o*1e3).microAlgos()}async function Oi(o,a,i){let r=new Ks,s=Ds({addr:a,sk:new Uint8Array(64)});o.forEach(l=>{r.addTransaction({txn:l,signer:s})});let A=(await Qs(r,i)).buildGroup().map(l=>l.txn);return Vt(...A)}function Vt(...o){return o.map(i=>Us.encodeUnsignedTransaction(i)).map(i=>I.from(i).toString("hex"))}async function wa(o,a,i){typeof o=="string"&&(o=BigInt(o));let s=(await i.account.getInformation(a)).assets;return s?s.find(({assetId:A})=>A===o)!==void 0:!1}async function Fa(o,a,i){typeof o=="string"&&(o=BigInt(o));let s=(await i.account.getInformation(a)).appsLocalState;return s?s.find(({id:A})=>A===o)!==void 0:!1}var Pe=class{};import{PublicKey as Es}from"@solana/web3.js";import{createAddress as eo,parseContractId as _s}from"@stacks/transactions";import{Address as $s}from"@stellar/stellar-sdk";import qs,{Address as ed}from"algosdk";import{Big as Ge}from"big.js";import ao from"randombytes";import{utils as to}from"tronweb";import{Web3 as td}from"web3";var Qi=(A=>(A.OK="OK",A.INVALID="INVALID",A.FORBIDDEN="FORBIDDEN",A.UNINITIALIZED="UNINITIALIZED",A.CONTRACT_ADDRESS="CONTRACT_ADDRESS",A.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",A))(Qi||{}),Ui=(A=>(A.ALLBRIDGE="allbridge",A.WORMHOLE="wormhole",A.CCTP="cctp",A.CCTP_V2="cctpV2",A.OFT="oft",A.X_RESERVE="xReserve",A))(Ui||{}),Se=(A=>(A[A.ALLBRIDGE=1]="ALLBRIDGE",A[A.WORMHOLE=2]="WORMHOLE",A[A.CCTP=3]="CCTP",A[A.CCTP_V2=4]="CCTP_V2",A[A.OFT=5]="OFT",A[A.X_RESERVE=6]="X_RESERVE",A))(Se||{});import{Big as L}from"big.js";import Ki from"bn.js";function Di(o,a){return L(100).minus(L(100).times(a).div(o)).toNumber()}function Bt(o,a){return ke(o,a,3).round(0,L.roundDown)}function ze(o,a){return ke(o,3,a)}function ke(o,a,i){let r=L(i).minus(a).toNumber();return L(o).times(Vn(r))}function Vn(o){return L(10).pow(o)}function j(o,a){return L(o).times(Vn(a))}function H(o,a){let i=L(o);return i.eq(0)?L(0):L(i).div(Vn(a))}function Ne(o){return H(L(o.tokenBalance).minus(o.vUsdBalance).toFixed(),3).div(2).toFixed()}function ut(o,{feeShare:a,decimals:i},r){let s=L(o);if(s.lte(0))return"0";let d=s.times(a),A=s.minus(d),l=Bt(A,i),u=L(r.tokenBalance).plus(l),b=mt(u,r.aValue,r.dValue);return L(r.vUsdBalance).minus(b).round(0,L.roundDown).toFixed()}function Xn(o,{feeShare:a,decimals:i},r){let s=L(o);if(s.lte(0))return L(0).toFixed();let d=s.plus(r.vUsdBalance),A=mt(d,r.aValue,r.dValue),l=ze(L(r.tokenBalance).minus(A),i),u=L(l).times(a);return L(l).minus(u).round(0,L.roundDown).toFixed()}function Kr(o,a){let i=L(o);if(i.lte(0))return a;let r=i.plus(a.vUsdBalance),s=mt(r,a.aValue,a.dValue);return{aValue:a.aValue,dValue:a.dValue,tokenBalance:s.toFixed(0),vUsdBalance:r.toFixed(0)}}function Dr(o,{feeShare:a,decimals:i},r){if(L(o).lte(0))return L(0);let s=L(r.vUsdBalance).minus(o);if(s.lte(0))throw new Rt;let d=mt(s,r.aValue,r.dValue),A=L(d).minus(r.tokenBalance),l=ze(A,i),u=L(a).div(L(1).minus(a)),b=L(l).times(u).round(0,L.roundUp);return L(l).plus(b).round(0,L.roundDown)}function Er(o,{feeShare:a,decimals:i},r){if(L(o).lte(0))return L(0);let s=L(a).div(L(1).minus(a)),d=L(o).times(s).round(0,L.roundUp),A=L(o).plus(d),l=Bt(A,i),u=L(r.tokenBalance).minus(l);if(u.lte(0))throw new Rt;let b=mt(u,r.aValue,r.dValue);return L(b).minus(r.vUsdBalance).round(0,L.roundDown)}function mt(o,a,i){let r=L(4).times(a).times(L(i).minus(o)).minus(i),s=L(i).pow(3),d=r.pow(2),A=L(o).times(L(o).times(d).plus(L(4).times(a).times(s))).sqrt().round(0,L.roundDown),l=L(8).times(a).times(o),u=r.times(o).plus(A).div(l).round(0,L.roundDown);return u.eq(0)?L(0):u.plus(1)}function _r(o,a,i,r){let s=new Ki(o),d=new Ki(i),A=new Ki(a);return s.mul(d).shrn(r).sub(A).toString()}function $r(o){return L(o).gt(0)?`${Number(L(o).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function qr(o,a,i){let r=L(a).times(i),s=L(a).plus(i),d=L(8).times(o).times(r).times(s),A=r.times(L(16).times(o).minus(4)).div(3),l=d.times(d),u=A.times(A).times(A),b=l.plus(u),y=L(b).sqrt(),C=L(Math.cbrt(+d.plus(y).toFixed())),f=L(Math.cbrt(+d.minus(y).toFixed()));return C.plus(f).toFixed()}function ot(o,a,i){let r;switch(a){case"EVM":{r=no(o);break}case"SOLANA":{r=new Es(o).toBuffer();break}case"TRX":{r=id(o);break}case"SRB":{r=new $s(o).toBuffer();break}case"SUI":{r=no(o);break}case"ALG":{r=nd(o);break}case"STX":{r=ad(o);break}}switch(i){case"EVM":return"0x"+r.toString("hex");case"SOLANA":return Array.from(r);case"TRX":return r;case"SRB":return r.toJSON().data;case"SUI":return"0x"+r.toString("hex");case"ALG":return r;case"STX":return r}}function st(o){return o.replace(/^0x/i,"")}function Ei(o){return I.from(o.replace(/^0x/i,""),"hex")}function no(o){let i=Ei(o);return I.concat([I.alloc(32-i.length,0),i],32)}function nd(o){if(qs.isValidAddress(o))return I.from(ed.fromString(o).publicKey);if(/^\d+$/.test(o)){let a=BigInt(o).toString(16);return a=a.padStart(64,"0"),I.from(a,"hex")}throw new w(`Unexpected Alg address: ${o}`)}function ad(o){if(o.includes(".")){let[i,r]=_s(o);if(!i||!r)throw new w(`Unexpected Alg address: ${o}`);let s=I.from(eo(i).hash160,"hex"),d=td.utils.keccak256(I.concat([s,I.from(r)]));return Ei(d)}let a=I.from(eo(o).hash160,"hex");return Na(a,32)}function id(o){let a=Pn(o),i=Ei(a);return Na(i,32)}function Pn(o){let a=to.crypto.decodeBase58Address(o);return a?to.bytes.byteArray2hexStr(a).replace(/^41/,"0x"):""}function Na(o,a){if(o.length>=a)return o;let i=I.alloc(a,0);return o.copy(i,a-o.length),i}function bt(){return ao(32)}function yt(){let o=ao(32).readBigInt64BE();return o<0?o*-1n:o}function Ke(o,a){let i={},r=a.sourceToken;switch(i.amount=j(a.amount,r.decimals).toFixed(),i.contractAddress=r.bridgeAddress,i.fromAccountAddress=a.fromAccountAddress,o){case"SUI":{if(!r.originTokenAddress)throw new w("SUI sourceToken must contain 'originTokenAddress'");i.fromTokenAddress=r.originTokenAddress;break}case"ALG":{i.fromTokenAddress=r.tokenAddress;break}default:i.fromTokenAddress=ot(r.tokenAddress,o,o)}switch(i.toAccountAddress=a.toAccountAddress,o){case"SUI":{if(!a.destinationToken.originTokenAddress)throw new w("SUI destinationToken must contain 'originTokenAddress'");i.toTokenAddress=a.destinationToken.originTokenAddress;break}case"ALG":{i.toTokenAddress=a.destinationToken.tokenAddress;break}default:i.toTokenAddress=ot(a.destinationToken.tokenAddress,o,o)}return i.minimumReceiveAmount=a.minimumReceiveAmount?j(a.minimumReceiveAmount,a.destinationToken.decimals).toFixed():"0",i}async function Oe(o,a,i){let r={};r.fromChainId=a.sourceToken.allbridgeChainId,r.fromChainSymbol=a.sourceToken.chainSymbol;let s=Q.getChainProperty(a.destinationToken.chainSymbol).chainType;if(o==="SUI"){if(!a.sourceToken.originTokenAddress)throw new w("SUI token must contain 'originTokenAddress'");r.fromTokenAddress=a.sourceToken.originTokenAddress}else r.fromTokenAddress=a.sourceToken.tokenAddress;if(r.toChainId=a.destinationToken.allbridgeChainId,r.toTokenAddress=a.destinationToken.tokenAddress,r.gasFeePaymentMethod=a.gasFeePaymentMethod??"native",r.gasFeePaymentMethod==="abr"&&!a.sourceToken.abrPayer)throw new w("Source token must contain 'abrPayer' for ABR payment method");let d=a.sourceToken;switch(a.messenger){case 3:if(!d.cctpAddress||!a.destinationToken.cctpAddress)throw new We("Such route does not support CCTP protocol");r.contractAddress=d.cctpAddress;break;case 4:if(!d.cctpV2Address||!a.destinationToken.cctpV2Address)throw new We("Such route does not support CCTP V2 protocol");r.contractAddress=d.cctpV2Address;break;case 5:if(!d.oftBridgeAddress||!a.destinationToken.oftBridgeAddress||d.oftId!==a.destinationToken.oftId)throw new Xe("Such route does not support OFT protocol");r.contractAddress=d.oftBridgeAddress;break;case 6:if(!d.xReserve?.bridgeAddress||!a.destinationToken.xReserve)throw new w("Such route does not support xReserve protocol");r.contractAddress=d.xReserve.bridgeAddress;break;case 1:case 2:r.contractAddress=d.bridgeAddress;break}r.messenger=a.messenger,r.fromAccountAddress=a.fromAccountAddress,r.amount=j(a.amount,d.decimals).toFixed();let{fee:A,feeFormat:l}=a;if(!A){let C=(await _i(a.sourceToken,r.toChainId,r.messenger,i))[r.gasFeePaymentMethod];if(!C)throw new Zt;A=C.int,l="int"}if(l=="float")switch(r.gasFeePaymentMethod){case"native":r.fee=j(A,Q.getChainDecimalsByType(d.chainType)).toFixed(0);break;case"stablecoin":r.fee=j(A,d.decimals).toFixed(0);break;case"abr":if(!d.abrPayer)throw new w("Source token must contain 'abrPayer' for ABR payment method");r.fee=j(A,d.abrPayer.abrToken.decimals).toFixed(0);break;default:return oe(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}else r.fee=A;let{extraGas:u,extraGasFormat:b}=a;if(u&&+u>0){let y=await $i(d,a.destinationToken,r.messenger,i),C,f;switch(r.gasFeePaymentMethod){case"native":C=Q.getChainDecimalsByType(d.chainType),f=Ge(y.exchangeRate);break;case"stablecoin":C=d.decimals,f=Ge(y.exchangeRate).div(y.sourceNativeTokenPrice);break;case"abr":if(!d.abrPayer)throw new w("Source token must contain 'abrPayer' for ABR payment method");if(!y.abrExchangeRate)throw new w("Cannot transfer WITH_ABR option");C=d.abrPayer.abrToken.decimals,f=Ge(y.exchangeRate).div(y.abrExchangeRate);break;default:return oe(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}switch(b??"int"){case"float":{r.extraGas=j(u,C).toFixed(0);let v=f.mul(u);r.extraGasDest=j(v,Q.getChainDecimalsByType(a.destinationToken.chainType)).toFixed(0,Ge.roundDown);break}case"int":{r.extraGas=u;let v=H(r.extraGas,Q.getChainDecimalsByType(d.chainType)),R=f.mul(v);r.extraGasDest=j(R,Q.getChainDecimalsByType(a.destinationToken.chainType)).toFixed(0,Ge.roundDown);break}}od(r.extraGas,r.gasFeePaymentMethod,y)}switch(["SUI","ALG"].includes(o)||(r.fromTokenAddress=ot(r.fromTokenAddress,o,o)),r.toAccountAddress=ot(a.toAccountAddress,s,o),r.toTokenAddress=ot(r.toTokenAddress,s,o),r.gasFeePaymentMethod){case"native":break;case"stablecoin":rd(r.amount,d.decimals,d.symbol,r.fee,r.extraGas);break;case"abr":{let{abrExchangeRate:y}=await i.getReceiveTransactionCost({sourceChainId:r.fromChainId,destinationChainId:r.toChainId,messenger:r.messenger,sourceToken:a.sourceToken.tokenAddress});r.abrExchangeRate=y;break}default:return oe(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}return r}function rd(o,a,i,r,s){let d=Ge(o).minus(r).minus(s??0);if(d.lte(0))throw new ft(`Amount not enough to pay fee, ${H(Ge(d).minus(1).neg(),a).toFixed()} ${i} is missing`)}async function _i(o,a,i,r){let s=await r.getReceiveTransactionCost({sourceChainId:o.allbridgeChainId,destinationChainId:a,messenger:i,sourceToken:o.tokenAddress}),d={native:{int:s.fee,float:H(s.fee,Q.getChainDecimalsByType(o.chainType)).toFixed()},adminFeeShareWithExtras:s.adminFeeShareWithExtras};if(s.sourceNativeTokenPrice){let A=ke(new Ge(s.fee).mul(s.sourceNativeTokenPrice),Q.getChainDecimalsByType(o.chainType),o.decimals).toFixed(0,Ge.roundUp);d.stablecoin={int:A,float:H(A,o.decimals).toFixed()}}if(s.abrExchangeRate&&o.abrPayer&&o.abrPayer.payerAvailability[i]){let A=ke(new Ge(s.fee).mul(s.abrExchangeRate),Q.getChainDecimalsByType(o.chainType),o.abrPayer.abrToken.decimals).toFixed(0,Ge.roundUp);d.abr={int:A,float:H(A,o.abrPayer.abrToken.decimals).toFixed()}}return d}function od(o,a,i){let r=i.extraGasMax[a];if(!r)throw new Zt(`Impossible to pay extra gas by '${a}' payment method`);let s=r.int;if(Ge(o).gt(s))throw new ba(`Extra gas ${o} in int format, exceeded limit ${s} for '${a}' payment method`)}async function $i(o,a,i,r){let s={},d=await r.getReceiveTransactionCost({sourceChainId:o.allbridgeChainId,destinationChainId:a.allbridgeChainId,messenger:i,sourceToken:o.tokenAddress}),A={int:a.txCostAmount.transfer,float:H(a.txCostAmount.transfer,Q.getChainDecimalsByType(a.chainType)).toFixed()},l={int:a.txCostAmount.swap,float:H(a.txCostAmount.swap,Q.getChainDecimalsByType(a.chainType)).toFixed()};if(i===6){let v=()=>({int:"0",float:"0"});return{extraGasMax:{native:v()},destinationChain:{gasAmountMax:v(),swap:l,transfer:A},exchangeRate:d.exchangeRate,sourceNativeTokenPrice:d.sourceNativeTokenPrice}}let u=a.txCostAmount.maxAmount,b=H(u,Q.getChainDecimalsByType(a.chainType)).toFixed(),y=Ge(b).div(d.exchangeRate).toFixed(Q.getChainDecimalsByType(o.chainType),Ge.roundDown),C=j(y,Q.getChainDecimalsByType(o.chainType)).toFixed(0);if(s.native={int:C,float:y},d.sourceNativeTokenPrice){let v=Ge(y).mul(d.sourceNativeTokenPrice).toFixed(o.decimals,Ge.roundDown);s.stablecoin={int:j(v,o.decimals).toFixed(0),float:v}}let f;if(d.abrExchangeRate&&o.abrPayer&&o.abrPayer.payerAvailability[i]){f=!0;let v=Ge(y).mul(d.abrExchangeRate).toFixed(o.abrPayer.abrToken.decimals,Ge.roundDown);s.abr={int:j(v,o.abrPayer.abrToken.decimals).toFixed(0),float:v}}return{extraGasMax:s,destinationChain:{gasAmountMax:{int:u,float:b},swap:l,transfer:A},exchangeRate:d.exchangeRate,abrExchangeRate:f?d.abrExchangeRate:void 0,sourceNativeTokenPrice:d.sourceNativeTokenPrice}}function io(o){return o.sourceToken.chainSymbol!==o.destinationToken.chainSymbol}var Sn=class extends Pe{constructor(i,r){super();this.algorand=i;this.api=r;let s=Ad.generateAccount(),d=new sd(s,s.addr);i.setDefaultSigner(d),i.setDefaultValidityWindow(100)}algorand;api;chainType="ALG";send(i){throw new K}async buildRawTransactionSend(i){let r=await Oe(this.chainType,i,this.api);if(!i.sourceToken.bridgeId)throw new w("ALG sourceToken must contain 'bridgeId'");if(!i.sourceToken.paddingUtilId)throw new w("ALG sourceToken must contain 'paddingUtilId'");let s=BigInt(i.sourceToken.bridgeId),d=this.getBridge(s),A=BigInt(i.sourceToken.paddingUtilId),l=this.getPaddingUtil(A),u=ro.fromString(i.fromAccountAddress),b=BigInt(i.sourceToken.tokenAddress),y=r.toChainId,C=r.toAccountAddress,f=r.toTokenAddress,v=bt(),R=BigInt(r.amount),F=BigInt(r.fee);r.extraGas&&(F=F+BigInt(r.extraGas));let N=this.algorand.newGroup(),G=await this.algorand.createTransaction.assetTransfer({amount:R,assetId:b,receiver:d.appAddress,sender:u});switch(r.gasFeePaymentMethod){case"native":{let S=await this.algorand.createTransaction.payment({amount:dd.MicroAlgo(F),receiver:d.appAddress,sender:u});N.addAppCallMethodCall(await d.params.swapAndBridge({args:{paymentRef:S,assetTransferRef:G,recipient:C,destinationChainId:y,receiveToken:f,nonce:v},sender:u,extraFee:Gt(8)}));break}case"stablecoin":{N.addAppCallMethodCall(await d.params.swapAndBridgeWithStable({args:{assetTransferRef:G,recipient:C,destinationChainId:y,receiveToken:f,nonce:v,feeTokenAmount:F},sender:u,extraFee:Gt(9)}));break}case"abr":throw new w("ALG bridge does not support ABR payment method");default:return oe(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}let B=await this.algorand.createTransaction.appCall({appId:l.appId,sender:u,note:"padding1"});N.addTransaction(B);let P=await this.algorand.createTransaction.appCall({appId:l.appId,sender:u,note:"padding2"});N.addTransaction(P);let{transactions:V}=await N.buildTransactions();return Oi(V,u,this.algorand.client.algod)}async buildRawTransactionSwap(i){let r=Ke(this.chainType,i),s=ro.fromString(i.fromAccountAddress),d=i.toAccountAddress,A=BigInt(i.sourceToken.tokenAddress),l=BigInt(i.destinationToken.tokenAddress),u=BigInt(r.minimumReceiveAmount),b=BigInt(r.amount);if(!i.sourceToken.bridgeId)throw new w("ALG sourceToken must contain 'bridgeId'");if(!i.sourceToken.paddingUtilId)throw new w("ALG sourceToken must contain 'paddingUtilId'");let y=BigInt(i.sourceToken.bridgeId),C=this.getBridge(y),f=BigInt(i.sourceToken.paddingUtilId),v=this.getPaddingUtil(f),R=this.algorand.newGroup();i.fromAccountAddress===d&&(await wa(l,d,this.algorand)||R.addAssetOptIn({sender:s,assetId:l}));let F=this.algorand.createTransaction.assetTransfer({assetId:A,amount:b,sender:s,receiver:C.appAddress});R.addAppCallMethodCall(await C.params.swap({args:{assetTransferRef:F,recipient:d,receiveAsset:l,receiveAmountMin:u},sender:s,extraFee:Gt(4)}));let N=await this.algorand.createTransaction.appCall({appId:v.appId,sender:s});R.addTransaction(N);let{transactions:G}=await R.buildTransactions();return Oi(G,s,this.algorand.client.algod)}getBridge(i){return this.algorand.client.getTypedAppClientById(Ba,{appId:i})}getPaddingUtil(i){return this.algorand.client.getTypedAppClientById(Wa,{appId:i})}};import{createAddress as hd}from"@stacks/transactions";import{Big as Ma}from"big.js";var cd={abi:[{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"},{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"},{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"},{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"gas",type:"uint256"}],name:"BridgingFeeFromTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"bridgeTransactionCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"messageTransactionCost",type:"uint256"}],name:"ReceiveFee",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Received",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"sendToken",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"sendAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receiveAmount",type:"uint256"}],name:"Swapped",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{indexed:!1,internalType:"bytes32",name:"message",type:"bytes32"}],name:"TokensReceived",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"addBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract Pool",name:"pool",type:"address"},{internalType:"bytes32",name:"token",type:"bytes32"}],name:"addPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canSwap",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"address",name:"tokenAddress",type:"address"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageGasUsage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"hasReceivedMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"}],name:"hasSentMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"hashMessage",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"otherBridgeTokens",outputs:[{internalType:"bool",name:"isSupported",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"tokenId",type:"bytes32"}],name:"pools",outputs:[{internalType:"contract Pool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"processedMessages",outputs:[{internalType:"uint256",name:"isProcessed",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],name:"registerBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"removeBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"sentMessages",outputs:[{internalType:"uint256",name:"isSent",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"}],name:"setAllbridgeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_rebalancer",type:"address"}],name:"setRebalancer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"}],name:"setWormholeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"swap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"feeTokenAmount",type:"uint256"}],name:"swapAndBridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"withdrawBridgingFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGasTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},oo=cd;var gd={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"cctpMessenger_",type:"address"},{internalType:"address",name:"cctpTransmitter_",type:"address"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedExtraGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"RecipientReplaced",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"mintRecipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"},{internalType:"bytes",name:"hookData",type:"bytes"}],name:"bridgeWithHook",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"originalMessage",type:"bytes"},{internalType:"bytes",name:"originalAttestation",type:"bytes"},{internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"changeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint64",name:"nonce",type:"uint64"}],name:"isMessageProcessed",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"cctpBridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bytes",name:"message",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},so=gd;var ld={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"uint16",name:"optionType",type:"uint16"}],name:"InvalidOptionType",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"address",name:"tokenAddress",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFeeWithExtraGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"extraGasDestinationToken",type:"uint256"}],name:"OftTokensSent",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"addToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"feeShare",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"},{internalType:"uint256",name:"extraGasInDestinationToken",type:"uint256"},{internalType:"uint256",name:"slippageBP",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"},{internalType:"uint128",name:"extraGasAmount_",type:"uint128"}],name:"extraGasPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getEidByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"oftAddress",outputs:[{internalType:"address",name:"oftAddress",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"eid_",type:"uint32"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"}],name:"relayerFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"removeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"setLzGasLimit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"maxExtraGas_",type:"uint256"}],name:"setMaxExtraGas",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token_",type:"address"}],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount_",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},Ao=ld;var pd={abi:[{inputs:[{internalType:"address",name:"_abrTokenAddress",type:"address"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"abrToken",outputs:[{internalType:"contract IERC20Metadata",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_tokenAddress",type:"address"},{internalType:"address",name:"_bridge",type:"address"}],name:"approveBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"exchangeRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_amount",type:"uint256"}],name:"nativeTokensToAbr",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_id",type:"uint256"},{internalType:"address",name:"_target",type:"address"},{internalType:"string",name:"_signature",type:"string"}],name:"registerTarget",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_newExchangeRate",type:"uint256"}],name:"setExchangeRate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"id",type:"uint256"}],name:"targets",outputs:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes4",name:"selector",type:"bytes4"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_token",type:"address"},{internalType:"uint256",name:"_amount",type:"uint256"},{internalType:"uint256",name:"_abrAmount",type:"uint256"},{internalType:"uint256",name:"_targetId",type:"uint256"},{internalType:"bytes",name:"_params",type:"bytes"}],name:"transferTokensAndCallTarget",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"withdrawTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},co=pd;var ud={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"xReserve_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"maxFee",type:"uint256"}],name:"TokensSent",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[],name:"maxFeeShare",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"maxFeeShare_",type:"uint256"}],name:"setMaxFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},go=ud;import{StrKey as lo}from"@stellar/stellar-sdk";function sn(o){if(!lo.isValidEd25519PublicKey(o)&&!lo.isValidMed25519PublicKey(o))throw new w("Invalid Stellar recipient");let a=I.from(o,"ascii"),i=I.alloc(4+a.length);return i.writeUInt32BE(a.length),a.copy(i,4),i}import*as mo from"@coral-xyz/anchor";import{getAccount as Cd}from"@solana/spl-token";import{PublicKey as uo}from"@solana/web3.js";import*as Le from"@coral-xyz/anchor";import{PublicKey as Je}from"@solana/web3.js";function Qe(o,a){return Le.utils.token.associatedAddress({mint:a,owner:o})}async function nt(o){let[a]=await Je.findProgramAddress([Le.utils.bytes.utf8.encode("config")],o);return a}async function Ga(o,a){let[i]=await Je.findProgramAddress([Le.utils.bytes.utf8.encode("lock"),Uint8Array.from(o)],a);return i}async function Ct(o,a){let[i]=await Je.findProgramAddress([Le.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([o])],a);return i}async function Xt(o){let a=await nt(o),[i]=await Je.findProgramAddress([a.toBuffer()],o);return i}async function Va(o,a){let[i]=await Je.findProgramAddress([o.toBuffer()],a);return i}async function Tt(o,a){let[i]=await Je.findProgramAddress([Le.utils.bytes.utf8.encode("token"),o.toBytes()],a);return i}async function Xa(o,a,i){let[r]=await Je.findProgramAddress([Le.utils.bytes.utf8.encode("other_bridge_token"),I.from([o]),a],i);return r}async function Ot(o,a){let[i]=await Je.findProgramAddress([Le.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([o])],a);return i}async function dn(o,a){let[i]=await Je.findProgramAddress([Le.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([o])],a);return i}async function Pa(o,a){let[i]=await Je.findProgramAddress([Le.utils.bytes.utf8.encode("sent_message"),o],a);return i}async function qi(o,a,i){let[r]=await Je.findProgramAddress([Le.utils.bytes.utf8.encode("user_deposit"),a.toBytes(),o.toBytes()],i);return r}async function Sa(o,a){let[i]=await Je.findProgramAddress([Le.utils.bytes.utf8.encode("cctp_bridge"),o.toBytes()],a);return i}function ka(o,a){let[i]=Je.findProgramAddressSync([Le.utils.bytes.utf8.encode("config"),o.toBytes()],a);return i}async function po(o,a){let[i]=await Je.findProgramAddress([Le.utils.bytes.utf8.encode("token"),o.toBytes()],a);return i}function La(o,a){let[i]=Je.findProgramAddressSync([Le.utils.bytes.utf8.encode("lock"),a.toBuffer()],o);return i}function kn(o,a,i,r){let s=zt("message_transmitter",i),d=zt("token_messenger",r),A=zt("__event_authority",r),l=zt("token_minter",r),u=zt("local_token",r,[a]),b=zt("remote_token_messenger",r,[o.toString()]),y=zt("sender_authority",r);return{messageTransmitterAccount:s,tokenMessenger:d,tokenMessengerEventAuthority:A,tokenMinter:l,localToken:u,remoteTokenMessengerKey:b,authorityPda:y}}function zt(o,a,i=[]){let r=[I.from(Le.utils.bytes.utf8.encode(o))];for(let d of i)typeof d=="string"?r.push(I.from(Le.utils.bytes.utf8.encode(d))):Array.isArray(d)?r.push(I.from(Uint8Array.from(d))):I.isBuffer(d)?r.push(I.from(Uint8Array.from(d))):r.push(I.from(Uint8Array.from(d.toBuffer())));return Je.findProgramAddressSync(r,a)[0]}import{AnchorProvider as md}from"@coral-xyz/anchor";import{Connection as bd,PublicKey as yd}from"@solana/web3.js";function dt(o,a){let i=new bd(o,"confirmed"),r=new yd(a);return new md(i,{publicKey:r},{preflightCommitment:"confirmed",commitment:"confirmed"})}async function An(o,a,i,r){let s,d=new uo(a),A=new uo(i),l=Qe(d,A),u=dt(r,a);mo.setProvider(u);let b=await Cd(u.connection,l);if(b?.owner.equals(d))s=ot(l.toBase58(),"SOLANA",o);else{let y=await u.connection.getTokenAccountsByOwner(d,{mint:A});if(y.value.length===0&&!b)s=ot(l.toBase58(),"SOLANA",o);else if(y.value.length>0){let C=y.value[0];if(!C?.pubkey)throw new w("First token account or its public key is undefined");s=ot(C.pubkey.toBase58(),"SOLANA",o)}else throw new w("Associated account has wrong owner")}return s}var Id={["3:SOLANA"]:6,["4:SOLANA"]:7,["4:SRB"]:1008};function bo(o,a){return Id[`${a}:${o}`]??a}var Ln=class extends Pe{constructor(i,r,s){super();this.web3=i;this.api=r;this.nodeRpcUrlsConfig=s}web3;api;nodeRpcUrlsConfig;chainType="EVM";async send(i){let r=await this.buildRawTransactionSend(i);return this.sendRawTransaction(r)}async buildRawTransactionSwap(i){let r=Ke(this.chainType,i);return await this.buildRawTransactionSwapFromParams(r)}async buildRawTransactionSwapFromParams(i){let{amount:r,contractAddress:s,fromAccountAddress:d,fromTokenAddress:A,toAccountAddress:l,toTokenAddress:u,minimumReceiveAmount:b}=i,C=this.getBridgeContract(s).methods.swap(r,A,u,l,b);return Promise.resolve({from:d,to:s,data:C.encodeABI()})}async buildRawTransactionSend(i){let r=await Oe(this.chainType,i,this.api),{amount:s,contractAddress:d,fromAccountAddress:A,fromTokenAddress:l,toChainId:u,toAccountAddress:b,toTokenAddress:y,messenger:C,fee:f,gasFeePaymentMethod:v,extraGas:R,extraGasDest:F,abrExchangeRate:N}=r,G="0x"+bt().toString("hex"),B,P,V=f;R&&(V=Ma(V).plus(R).toFixed());let S;if(v==="abr"){if(!N)throw new w("Cannot find 'abrExchangeRate' for ABR payment method");if(!i.sourceToken.abrPayer)throw new w("Source token must contain 'abrPayer' for ABR payment method");S=V;let M=Ma(V).div(N);V=ke(M,i.sourceToken.abrPayer.abrToken.decimals,Q.getChainDecimalsByType(i.sourceToken.chainType)).toFixed()}switch(C){case 3:case 4:{let M=await this.buildRawTransactionCctpSend(i,r,V);B=M.sendMethod,P=M.value;break}case 5:{let M=this.buildRawTransactionOftSend(i,r,V,F);B=M.sendMethod,P=M.value;break}case 6:{let M=this.buildRawTransactionXReserveSend(i,r,V,F);B=M.sendMethod,P=M.value;break}case 1:case 2:{let M=this.getBridgeContract(d);switch(v){case"abr":case"native":{B=M.methods.swapAndBridge(l,s,b,u,y,G,C,0),P=V;break}case"stablecoin":{B=M.methods.swapAndBridge(l,s,b,u,y,G,C,V),P="0";break}default:return oe(v,"Unhandled FeePaymentMethod")}}break}if(v==="abr"){if(!i.sourceToken.abrPayer)throw new w("Source token must contain 'abrPayer' for ABR payment method");let M=i.sourceToken.abrPayer.payerAddress;if(!S)throw new w("Failed to calculate totalFeeInAbr");let x=this.getAbrPayerContract(M),se="0x"+B.encodeABI().slice(10),Ae=bo(i.destinationToken.chainType,C);return B=x.methods.transferTokensAndCallTarget(i.sourceToken.tokenAddress,s,S,Ae,se),Promise.resolve({from:A,to:M,value:"0",data:B.encodeABI()})}return Promise.resolve({from:A,to:d,value:P,data:B.encodeABI()})}async buildRawTransactionCctpSend(i,r,s){let{amount:d,contractAddress:A,toChainId:l,toAccountAddress:u,gasFeePaymentMethod:b}=r,y=this.getCctpBridgeContract(A),C,f;if(i.destinationToken.chainType==="SOLANA"){let v=await An(this.chainType,i.toAccountAddress,i.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));switch(b){case"abr":case"native":{C=y.methods.bridgeWithWalletAddress(d,v,u,l,0),f=s;break}case"stablecoin":{C=y.methods.bridgeWithWalletAddress(d,v,u,l,s),f="0";break}default:return oe(b,"Unhandled FeePaymentMethod")}}else if(i.destinationToken.chainType==="SRB"&&i.messenger===4){let v=i.destinationToken.cctpV2Address;if(!v)throw new w("Destination token must contain 'cctpV2Address' for CCTP V2");let R=ot(v,"SRB","EVM"),F=await y.methods.otherBridges(l).call(),N=typeof F=="string"?F:"0x"+I.from(F).toString("hex");if(N.toLowerCase()!==R.toLowerCase())throw new w(`CCTPv2 destination caller mismatch: expected ${R}, received ${N}`);let G="0x"+sn(i.toAccountAddress).toString("hex");switch(b){case"abr":case"native":{C=y.methods.bridgeWithHook(d,R,l,0,G),f=s;break}case"stablecoin":{C=y.methods.bridgeWithHook(d,R,l,s,G),f="0";break}default:return oe(b,"Unhandled FeePaymentMethod")}}else switch(b){case"abr":case"native":{C=y.methods.bridge(d,u,l,0),f=s;break}case"stablecoin":{C=y.methods.bridge(d,u,l,s),f="0";break}default:return oe(b,"Unhandled FeePaymentMethod")}return{sendMethod:C,value:f}}buildRawTransactionOftSend(i,r,s,d){let{amount:A,contractAddress:l,toChainId:u,toAccountAddress:b,gasFeePaymentMethod:y}=r,C=this.getOftBridgeContract(l),f,v;switch(y){case"abr":case"native":{f=C.methods.bridge(i.sourceToken.tokenAddress,A,b,u,0,d??"0","10"),v=s;break}case"stablecoin":{f=C.methods.bridge(i.sourceToken.tokenAddress,A,b,u,s,d??"0","10"),v="0";break}default:return oe(y,"Unhandled FeePaymentMethod")}return{sendMethod:f,value:v}}buildRawTransactionXReserveSend(i,r,s,d){let{amount:A,contractAddress:l,toChainId:u,toAccountAddress:b,gasFeePaymentMethod:y}=r;if(y!=="native")throw new w("xReserve bridge supports only WITH_NATIVE_CURRENCY payment method");if(Ma(s).gt(0)||d&&Ma(d).gt(0))throw new w("xReserve bridge does not support additional bridge fee or extra gas");let C=b;if(i.destinationToken.chainType=="STX"){let{version:v,hash160:R}=hd(i.toAccountAddress),F=Number(v).toString(16),N=I.from(`${F}${R}`,"hex");C="0x"+Na(N,32).toString("hex")}return{sendMethod:this.getXReserveBridgeContract(l).methods.bridge(A,C,u),value:"0"}}async sendRawTransaction(i){let r=await this.web3.eth.estimateGas(i),s={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:d}=await this.web3.eth.sendTransaction({...i,gas:r,...s});return{txId:d.toString()}}getBridgeContract(i){return new this.web3.eth.Contract(oo.abi,i)}getCctpBridgeContract(i){return new this.web3.eth.Contract(so.abi,i)}getOftBridgeContract(i){return new this.web3.eth.Contract(Ao.abi,i)}getAbrPayerContract(i){return new this.web3.eth.Contract(co.abi,i)}getXReserveBridgeContract(i){return new this.web3.eth.Contract(go.abi,i)}};function cn(o,a,i="native"){if(i==="abr"){if(o.abrPayer)return o.abrPayer.payerAddress;throw new w("Token must contain 'abrPayer' for ABR payment method")}switch(a){case 3:if(o.cctpAddress)return o.cctpAddress;throw new We("Such route does not support CCTP protocol");case 4:if(o.cctpV2Address)return o.cctpV2Address;throw new We("Such route does not support CCTP V2 protocol");case 5:if(o.oftBridgeAddress)return o.oftBridgeAddress;throw new Xe("Such route does not support OFT protocol");case 6:if(o.xReserve?.bridgeAddress)return o.xReserve.bridgeAddress;throw new w("Such route does not support xReserve protocol");case 1:case 2:return o.bridgeAddress}}var xa=class{constructor(a,i,r,s){this.api=a;this.nodeRpcUrlsConfig=i;this.params=r;this.tokenService=s}api;nodeRpcUrlsConfig;params;tokenService;async approve(a,i){let r,s;i?(r=a,s=i):s=a;let d=cn(s.token,s.messenger,s.gasFeePaymentMethod);return this.tokenService.buildRawTransactionApprove({...s,spender:d},r)}async send(a,i){return $(a.amount),D("amount",a.amount,a.sourceToken.decimals),io(a)?Ha(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionSend(a):Ha(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionSwap(a)}};import{Connection as pA}from"@solana/web3.js";import{ComputeBudgetInstruction as Co,ComputeBudgetProgram as Ja,Connection as Io,TransactionMessage as vd}from"@solana/web3.js";import{Big as fd}from"big.js";import{AddressLookupTableAccount as yo}from"@solana/web3.js";async function Qt(o,a){return await Promise.all(o.message.addressTableLookups.map(async i=>new yo({key:i.accountKey,state:yo.deserialize(await a.getAccountInfo(i.accountKey).then(r=>{if(!r)throw new w("Cannot get AccountInfo");return r.data}))})))}var er="AUTO";async function gn(o,a,i){let r=new Io(i,"confirmed"),s=(await r.simulateTransaction(o)).value.unitsConsumed;await vo(o.instructions,s,a,r)}async function ho(o,a,i){let r=new Io(i,"confirmed"),s=await Qt(o,r),d=vd.decompile(o.message,{addressLookupTableAccounts:s});if(o.serialize().length>1232)throw new ha;await vo(d.instructions,769230,a,r),o.message=d.compileToV0Message(s)}async function vo(o,a,i,r){if(a<=0)return;let s=Rd(a,o),A=nr(i?.solana)?.fee;if(!A||A===er){await tr(o,r);return}if("pricePerUnitInMicroLamports"in A){await tr(o,r,A.pricePerUnitInMicroLamports);return}let l=fd(A.extraFeeInLamports).div(s).mul(Vn(6)).toFixed(0);await tr(o,r,l)}function nr(o){return o?typeof o!="object"?{fee:o}:"pricePerUnitInMicroLamports"in o||"extraFeeInLamports"in o?{fee:o}:"fee"in o||"payTxFeeWithStablecoinSwap"in o?o:{}:{}}function Rd(o,a){let i=a.findIndex(d=>d.programId.equals(Ja.programId)&&Co.decodeInstructionType(d)==="SetComputeUnitLimit"),r=Number((o*1.3).toFixed(0)),s=Ja.setComputeUnitLimit({units:r});return i>=0?a[i]=s:a.push(s),r.toString()}async function tr(o,a,i){let r=o.findIndex(A=>A.programId.equals(Ja.programId)&&Co.decodeInstructionType(A)==="SetComputeUnitPrice"),s=BigInt(i||await Bd(a)),d=Ja.setComputeUnitPrice({microLamports:s});return r>=0?o[r]=d:o.push(d),s.toString()}async function Bd(o){let a=await o.getRecentPrioritizationFees(),i=0;for(let r of a)i+=r.prioritizationFee;return(i/a.length).toFixed(0)}import{BN as Et,Program as Qa,web3 as _t}from"@coral-xyz/anchor";import{createAssociatedTokenAccountInstruction as Dd,getAssociatedTokenAddressSync as Ed}from"@solana/spl-token";import{Keypair as rr,PublicKey as ge,SystemProgram as _d}from"@solana/web3.js";var Pt={};Fn(Pt,{accounts:()=>wd,address:()=>Td,default:()=>Zd,errors:()=>Fd,instructions:()=>Wd,metadata:()=>Yd,types:()=>Nd});var Td="EmLt85sXNvqjzZo3C6BCq55ZzSuvSNFomVnf6b1PgY8R",Yd={name:"bridge",version:"0.1.0",spec:"0.1.0",description:"Created with Anchor"},Wd=[{name:"add_other_bridge_token",discriminator:[103,180,1,186,219,156,185,114],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"other_bridge_token",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"_chain_id",type:"u8"},{name:"_token_address",type:{array:["u8",32]}}]},{name:"adjust_total_lp_amount",discriminator:[8,190,6,31,121,124,62,241],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"user_token",writable:!0},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"admin"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}],args:[]},{name:"claim_rewards",discriminator:[4,144,132,71,116,23,151,80],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"user_token",writable:!0},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"user"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"deposit",discriminator:[242,35,198,137,82,225,242,182],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"user_token",writable:!0},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"user"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount",type:"u64"}]},{name:"init_deposit_account",discriminator:[136,79,202,206,211,146,182,158],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"mint"},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"user"}]}},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"initialize",discriminator:[175,175,109,31,13,152,155,237],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializeArgs"}}}]},{name:"initialize_pool",discriminator:[95,180,10,172,84,174,232,40],accounts:[{name:"payer",writable:!0,signer:!0},{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"mint"},{name:"token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializePoolArgs"}}}]},{name:"receive_and_swap",discriminator:[49,243,231,17,38,214,140,225],accounts:[{name:"user",writable:!0},{name:"payer",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"received_message_account"},{name:"unlock",writable:!0,pda:{seeds:[{kind:"const",value:[117,110,108,111,99,107]},{kind:"arg",path:"args.hash"}]}},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"},{name:"messenger_program"}],args:[{name:"args",type:{defined:{name:"UnlockArgs"}}}]},{name:"receive_and_swap_wormhole",discriminator:[53,141,209,156,114,7,54,229],accounts:[{name:"user",writable:!0},{name:"payer",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"received_message_account"},{name:"unlock",writable:!0,pda:{seeds:[{kind:"const",value:[117,110,108,111,99,107]},{kind:"arg",path:"args.hash"}]}},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"},{name:"messenger_program"}],args:[{name:"args",type:{defined:{name:"UnlockArgs"}}}]},{name:"register_chain_bridge",discriminator:[239,66,180,165,175,10,49,233],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"chain_bridge",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"RegisterChainBridgeArgs"}}}]},{name:"remove_other_bridge_token",discriminator:[149,232,199,145,241,219,24,154],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"other_bridge_token",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"_chain_id",type:"u8"},{name:"_token_address",type:{array:["u8",32]}}]},{name:"set_admin",discriminator:[251,163,0,52,91,194,187,92],accounts:[{name:"admin",signer:!0},{name:"new_admin"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[]},{name:"set_allbridge_messenger_program_id",discriminator:[168,21,145,139,97,252,84,77],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_balance_ratio_min",discriminator:[210,171,132,168,93,237,9,201],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0}],args:[{name:"balance_ratio_min_bp",type:"u16"}]},{name:"set_gas_oracle_program_id",discriminator:[172,152,29,206,112,239,205,83],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_pool_admin_fee_share",discriminator:[235,219,45,195,124,82,164,230],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0}],args:[{name:"fee_share_bp",type:"u64"}]},{name:"set_pool_fee_share",discriminator:[151,35,220,215,38,227,226,9],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0}],args:[{name:"fee_share_bp",type:"u64"}]},{name:"set_rebalancer",discriminator:[28,161,168,250,215,4,144,154],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"rebalancer"}],args:[]},{name:"set_stop_authority",discriminator:[238,229,235,32,221,191,227,43],accounts:[{name:"admin",signer:!0},{name:"new_authority"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[]},{name:"set_wormhole_messenger_program_id",discriminator:[215,127,198,117,43,17,36,24],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"start_bridge",discriminator:[213,146,40,152,47,121,85,18],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"action_type",type:{defined:{name:"ActionType"}}}]},{name:"stop_bridge",discriminator:[187,52,235,53,245,59,218,1],accounts:[{name:"stop_authority",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"action_type",type:{defined:{name:"ActionType"}}}]},{name:"swap",discriminator:[248,198,158,145,225,117,135,200],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"send_mint"},{name:"receive_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"send_pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"send_mint"}]}},{name:"receive_pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"receive_mint"}]}},{name:"send_bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"send_mint"}]}},{name:"receive_bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"receive_mint"}]}},{name:"send_user_token",writable:!0},{name:"receive_user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}],args:[{name:"amount",type:"u64"},{name:"receive_amount_min",type:"u64"}]},{name:"swap_and_bridge",discriminator:[204,63,169,171,186,125,86,159],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"lock",writable:!0,pda:{seeds:[{kind:"const",value:[108,111,99,107]},{kind:"arg",path:"args.nonce"}]}},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"other_bridge_token",writable:!0},{name:"messenger"},{name:"messenger_config",writable:!0},{name:"sent_message_account",writable:!0},{name:"messenger_gas_usage"},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"BridgeArgs"}}}]},{name:"swap_and_bridge_wormhole",discriminator:[41,91,201,180,150,117,154,65],accounts:[{name:"user",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"lock",writable:!0,pda:{seeds:[{kind:"const",value:[108,111,99,107]},{kind:"arg",path:"args.nonce"}]}},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"other_bridge_token",writable:!0},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"wormhole_messenger"},{name:"wormhole_messenger_config",writable:!0},{name:"wormhole_program"},{name:"bridge",writable:!0},{name:"message",writable:!0,signer:!0},{name:"sequence",writable:!0},{name:"fee_collector",writable:!0},{name:"messenger_gas_usage"},{name:"clock",address:"SysvarC1ock11111111111111111111111111111111"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"BridgeArgs"}}}]},{name:"update_chain_bridge",discriminator:[227,4,133,105,230,88,226,173],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"chain_bridge",writable:!0}],args:[{name:"args",type:{defined:{name:"UpdateChainBridgeArgs"}}}]},{name:"withdraw",discriminator:[183,18,70,156,148,109,161,34],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"user_token",writable:!0},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"user"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount_lp",type:"u64"}]},{name:"withdraw_admin_fee",discriminator:[176,135,230,197,163,130,60,252],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"admin_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"withdraw_gas_token",discriminator:[109,117,140,223,117,175,2,139],accounts:[{name:"admin",signer:!0},{name:"recipient",writable:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"amount",type:"u64"}]}],wd=[{name:"ChainBridge",discriminator:[25,216,147,218,140,42,98,49]},{name:"Config",discriminator:[155,12,170,224,30,250,204,130]},{name:"Lock",discriminator:[8,255,36,202,210,22,57,137]},{name:"OtherBridgeToken",discriminator:[27,112,167,155,2,141,52,167]},{name:"Pool",discriminator:[241,154,109,4,17,177,109,188]},{name:"Price",discriminator:[50,107,127,61,83,36,39,75]},{name:"Unlock",discriminator:[187,122,21,254,7,157,241,10]},{name:"UserDeposit",discriminator:[69,238,23,217,255,137,185,35]}],Fd=[{code:6e3,name:"AccountAlreadyInitialized",msg:"This account has already been initialized"},{code:6001,name:"AdminAuthorityInvalid",msg:"This instruction requires admin authority"},{code:6002,name:"InvalidSignature",msg:"Provided signature has wrong signer or message"},{code:6003,name:"InvalidHash",msg:"Wrong unlock message hash"},{code:6004,name:"PoolOverflow",msg:"Pool overflow"},{code:6005,name:"ReservesExhausted",msg:"Reserves exhausted"},{code:6006,name:"ZeroAmount",msg:"Zero amount"},{code:6007,name:"ZeroChanges",msg:"Zero changes"},{code:6008,name:"HighVusdAmount",msg:"vUSD amount is too high"},{code:6009,name:"BalanceRatioExceeded",msg:"Balance ratio exceeded"},{code:6010,name:"InsufficientReceivedAmount",msg:"Received insufficient amount"},{code:6011,name:"ForbiddenAction",msg:"ForbiddenAction"},{code:6012,name:"ValueTooHigh",msg:"Value is too high"},{code:6013,name:"EmptyRecipient",msg:"Empty recipient"}],Nd=[{name:"ActionType",type:{kind:"enum",variants:[{name:"Deposit"},{name:"Withdraw"},{name:"Swap"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"vusd_amount",type:"u64"}]}},{name:"ChainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"}]}},{name:"Config",type:{kind:"struct",fields:[{name:"admin",type:"pubkey"},{name:"allbridge_messenger_program_id",type:"pubkey"},{name:"wormhole_messenger_program_id",type:"pubkey"},{name:"gas_oracle_program_id",type:"pubkey"},{name:"rebalancer",type:"pubkey"},{name:"stop_authority",type:"pubkey"},{name:"authority_bump_seed",type:"u8"},{name:"can_swap",type:"bool"},{name:"can_deposit",type:"bool"},{name:"can_withdraw",type:"bool"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"allbridge_messenger_program_id",type:"pubkey"},{name:"wormhole_messenger_program_id",type:"pubkey"},{name:"gas_oracle_program_id",type:"pubkey"}]}},{name:"InitializePoolArgs",type:{kind:"struct",fields:[{name:"a",type:"u64"},{name:"fee_share_bp",type:"u64"},{name:"admin_fee_share_bp",type:"u64"},{name:"balance_ratio_min_bp",type:"u16"}]}},{name:"Lock",type:{kind:"struct",fields:[{name:"sender",type:"pubkey"},{name:"sent_token_address",type:"pubkey"},{name:"amount",type:"u64"},{name:"vusd_amount",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"nonce",type:{array:["u8",32]}},{name:"messenger",type:{defined:{name:"Messenger"}}},{name:"slot",type:"u64"},{name:"fee",type:"u64"}]}},{name:"Messenger",type:{kind:"enum",variants:[{name:"None"},{name:"Allbridge"},{name:"Wormhole"}]}},{name:"OtherBridgeToken",type:{kind:"struct",fields:[]}},{name:"Pool",type:{kind:"struct",fields:[{name:"mint",type:"pubkey"},{name:"a",type:"u64"},{name:"d",type:"u64"},{name:"token_balance",type:"u64"},{name:"v_usd_balance",type:"u64"},{name:"reserves",type:"u64"},{name:"decimals",type:"u8"},{name:"total_lp_amount",type:"u64"},{name:"fee_share_bp",type:"u64"},{name:"admin_fee_share_bp",type:"u64"},{name:"acc_reward_per_share_p",type:"u128"},{name:"admin_fee_amount",type:"u64"},{name:"balance_ratio_min_bp",type:"u16"}]}},{name:"Price",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"price",type:"u64"},{name:"gas_price",type:"u64"}]}},{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_bridge_address",type:{array:["u8",32]}},{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"}]}},{name:"Unlock",type:{kind:"struct",fields:[{name:"hash",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"fee",type:"u64"},{name:"v_usd_amount",type:"u64"},{name:"slot",type:"u64"}]}},{name:"UnlockArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"recipient",type:"pubkey"},{name:"source_chain_id",type:"u8"},{name:"receive_token",type:"pubkey"},{name:"messenger",type:{defined:{name:"Messenger"}}},{name:"hash",type:{array:["u8",32]}},{name:"receive_amount_min",type:"u64"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_bridge_address",type:{array:["u8",32]}},{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"}]}},{name:"UserDeposit",type:{kind:"struct",fields:[{name:"user_address",type:"pubkey"},{name:"mint",type:"pubkey"},{name:"lp_amount",type:"u64"},{name:"reward_debt",type:"u64"}]}}],Zd={address:Td,metadata:Yd,instructions:Wd,accounts:wd,errors:Fd,types:Nd};var ar={};Fn(ar,{accounts:()=>Pd,address:()=>Gd,default:()=>Ld,errors:()=>Sd,instructions:()=>Xd,metadata:()=>Vd,types:()=>kd});var Gd="XHXBA5WK4PTaLjjVfhPLttXwjeiq18yLdPsBL42YKaY",Vd={name:"cctp_bridge",version:"0.1.0",spec:"0.1.0",description:"Created with Anchor"},Xd=[{name:"bridge",discriminator:[174,41,120,146,98,218,169,25],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"message_sent_event_data",writable:!0,signer:!0},{name:"lock",writable:!0,pda:{seeds:[{kind:"const",value:[108,111,99,107]},{kind:"account",path:"message_sent_event_data"}]}},{name:"mint",writable:!0},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}},{name:"cctp_messenger"},{name:"message_transmitter_program"},{name:"message_transmitter_account",writable:!0},{name:"token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"remote_token_messenger_key"},{name:"authority_pda"},{name:"event_authority"},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"cctp_bridge"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"BridgeArgs"}}}]},{name:"initialize",discriminator:[175,175,109,31,13,152,155,237],accounts:[{name:"payer",writable:!0,signer:!0},{name:"admin",writable:!0,signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"cctp_bridge"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"system_program",address:"11111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializeArgs"}}}]},{name:"register_chain_bridge",discriminator:[239,66,180,165,175,10,49,233],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"cctp_bridge",pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"arg",path:"args.mint"}]}},{name:"chain_bridge",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"RegisterChainBridgeArgs"}}}]},{name:"set_admin",discriminator:[251,163,0,52,91,194,187,92],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"new_admin"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[]},{name:"set_admin_fee_share",discriminator:[34,2,1,74,101,120,39,19],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[{name:"fee_share_bp",type:"u64"}]},{name:"set_cctp_token_messenger_minter",discriminator:[7,23,157,231,197,83,45,203],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_gas_oracle_program_id",discriminator:[172,152,29,206,112,239,205,83],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"update_chain_bridge",discriminator:[227,4,133,105,230,88,226,173],accounts:[{name:"admin",signer:!0},{name:"cctp_bridge",pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"arg",path:"args.mint"}]}},{name:"chain_bridge",writable:!0}],args:[{name:"args",type:{defined:{name:"UpdateChainBridgeArgs"}}}]},{name:"withdraw_admin_fee",discriminator:[176,135,230,197,163,130,60,252],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"admin_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"cctp_bridge"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"withdraw_gas_token",discriminator:[109,117,140,223,117,175,2,139],accounts:[{name:"admin",signer:!0},{name:"recipient",writable:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[{name:"amount",type:"u64"}]}],Pd=[{name:"CctpBridge",discriminator:[164,2,216,77,99,83,161,159]},{name:"ChainBridge",discriminator:[25,216,147,218,140,42,98,49]},{name:"Lock",discriminator:[8,255,36,202,210,22,57,137]},{name:"Price",discriminator:[50,107,127,61,83,36,39,75]}],Sd=[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}],kd=[{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"CctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"pubkey"},{name:"admin",type:"pubkey"},{name:"cctp_token_messenger_minter",type:"pubkey"},{name:"gas_oracle_program_id",type:"pubkey"},{name:"authority_bump_seed",type:"u8"},{name:"admin_fee_share_bp",type:"u64"},{name:"admin_fee_amount",type:"u64"}]}},{name:"ChainBridge",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gas_oracle_program_id",type:"pubkey"},{name:"cctp_token_messenger_minter",type:"pubkey"},{name:"admin_fee_share_bp",type:"u64"}]}},{name:"Lock",type:{kind:"struct",fields:[{name:"sender",type:"pubkey"},{name:"amount",type:"u64"},{name:"admin_fee",type:"u64"},{name:"relayer_fee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"slot",type:"u64"}]}},{name:"Price",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"price",type:"u64"},{name:"gas_price",type:"u64"}]}},{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"pubkey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"pubkey"}]}}],Ld={address:Gd,metadata:Vd,instructions:Xd,accounts:Pd,errors:Sd,types:kd};var ir={};Fn(ir,{accounts:()=>Jd,address:()=>Md,default:()=>Od,errors:()=>jd,instructions:()=>Hd,metadata:()=>xd,types:()=>zd});var Md="jUK1TcugDebbLdEdxzZqrChtFGbnR8Sigkqdw4QdRSJ",xd={name:"cctp_v2_bridge",version:"0.1.0",spec:"0.1.0",description:"Created with Anchor"},Hd=[{name:"bridge",discriminator:[174,41,120,146,98,218,169,25],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"message_sent_event_data",writable:!0,signer:!0},{name:"lock",writable:!0,pda:{seeds:[{kind:"const",value:[108,111,99,107]},{kind:"account",path:"message_sent_event_data"}]}},{name:"mint",writable:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}},{name:"token_messenger_minter_program"},{name:"message_transmitter_program"},{name:"message_transmitter_account",writable:!0},{name:"token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"remote_token_messenger"},{name:"authority_pda"},{name:"denylist_account",pda:{seeds:[{kind:"const",value:[100,101,110,121,108,105,115,116,95,97,99,99,111,117,110,116]},{kind:"account",path:"user"}],program:{kind:"account",path:"token_messenger_minter_program"}}},{name:"event_authority"},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"BridgeArgs"}}}]},{name:"bridge_with_hook",discriminator:[242,17,63,37,10,179,169,24],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"message_sent_event_data",writable:!0,signer:!0},{name:"lock",writable:!0,pda:{seeds:[{kind:"const",value:[108,111,99,107]},{kind:"account",path:"message_sent_event_data"}]}},{name:"mint",writable:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}},{name:"token_messenger_minter_program"},{name:"message_transmitter_program"},{name:"message_transmitter_account",writable:!0},{name:"token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"remote_token_messenger"},{name:"authority_pda"},{name:"denylist_account",pda:{seeds:[{kind:"const",value:[100,101,110,121,108,105,115,116,95,97,99,99,111,117,110,116]},{kind:"account",path:"user"}],program:{kind:"account",path:"token_messenger_minter_program"}}},{name:"event_authority"},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"BridgeWithHookArgs"}}}]},{name:"initialize",discriminator:[175,175,109,31,13,152,155,237],accounts:[{name:"payer",writable:!0,signer:!0},{name:"admin",writable:!0,signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"system_program",address:"11111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializeArgs"}}}]},{name:"receive_tokens",discriminator:[229,73,222,185,57,227,213,67],accounts:[{name:"payer",writable:!0,signer:!0},{name:"mint",writable:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"recipient",writable:!0},{name:"message_transmitter_program"},{name:"authority_pda"},{name:"message_transmitter_account"},{name:"used_nonce",writable:!0},{name:"token_messenger_minter_program"},{name:"message_transmitter_event_authority"},{name:"token_messenger"},{name:"remote_token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"token_pair"},{name:"fee_recipient_token_account",writable:!0},{name:"recipient_token_account",writable:!0,pda:{seeds:[{kind:"account",path:"recipient"},{kind:"const",value:[6,221,246,225,215,101,161,147,217,203,225,70,206,235,121,172,28,180,133,237,95,91,55,145,58,140,245,133,126,255,0,169]},{kind:"account",path:"mint"}],program:{kind:"const",value:[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{name:"custody_token_account",writable:!0},{name:"token_messenger_event_authority"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"ReceiveTokensArgs"}}}]},{name:"register_chain_bridge",discriminator:[239,66,180,165,175,10,49,233],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"arg",path:"args.mint"}]}},{name:"chain_bridge",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"RegisterChainBridgeArgs"}}}]},{name:"set_admin",discriminator:[251,163,0,52,91,194,187,92],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"new_admin"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[]},{name:"set_admin_fee_share",discriminator:[34,2,1,74,101,120,39,19],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"fee_share_bp",type:"u64"}]},{name:"set_gas_oracle_program_id",discriminator:[172,152,29,206,112,239,205,83],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_max_fee_share",discriminator:[120,202,93,18,32,173,77,155],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"max_fee_share",type:"u64"}]},{name:"set_min_finality_threshold",discriminator:[143,83,132,23,202,153,26,103],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"min_finality_threshold",type:"u32"}]},{name:"set_token_messenger_minter",discriminator:[136,50,92,91,209,211,206,234],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"update_chain_bridge",discriminator:[227,4,133,105,230,88,226,173],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"arg",path:"args.mint"}]}},{name:"chain_bridge",writable:!0}],args:[{name:"args",type:{defined:{name:"UpdateChainBridgeArgs"}}}]},{name:"withdraw_admin_fee",discriminator:[176,135,230,197,163,130,60,252],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"admin_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"withdraw_gas_token",discriminator:[109,117,140,223,117,175,2,139],accounts:[{name:"admin",signer:!0},{name:"recipient",writable:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"amount",type:"u64"}]}],Jd=[{name:"ChainBridge",discriminator:[25,216,147,218,140,42,98,49]},{name:"Config",discriminator:[155,12,170,224,30,250,204,130]},{name:"Lock",discriminator:[8,255,36,202,210,22,57,137]},{name:"Price",discriminator:[50,107,127,61,83,36,39,75]}],jd=[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}],zd=[{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"BridgeWithHookArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"hook_data",type:"bytes"}]}},{name:"ChainBridge",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"},{name:"other_bridge",type:"pubkey"}]}},{name:"Config",type:{kind:"struct",fields:[{name:"mint",type:"pubkey"},{name:"admin",type:"pubkey"},{name:"token_messenger_minter",type:"pubkey"},{name:"message_transmitter",type:"pubkey"},{name:"gas_oracle_program_id",type:"pubkey"},{name:"authority_bump_seed",type:"u8"},{name:"admin_fee_share_bp",type:"u64"},{name:"admin_fee_amount",type:"u64"},{name:"max_fee_share",type:"u64"},{name:"min_finality_threshold",type:"u32"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gas_oracle_program_id",type:"pubkey"},{name:"token_messenger_minter",type:"pubkey"},{name:"message_transmitter",type:"pubkey"},{name:"admin_fee_share_bp",type:"u64"},{name:"max_fee_share",type:"u64"},{name:"min_finality_threshold",type:"u32"}]}},{name:"Lock",type:{kind:"struct",fields:[{name:"sender",type:"pubkey"},{name:"amount",type:"u64"},{name:"admin_fee",type:"u64"},{name:"relayer_fee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"slot",type:"u64"}]}},{name:"Price",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"price",type:"u64"},{name:"gas_price",type:"u64"}]}},{name:"ReceiveTokensArgs",type:{kind:"struct",fields:[{name:"message_id",type:{array:["u8",32]}},{name:"message",type:"bytes"},{name:"attestation",type:"bytes"},{name:"extra_gas_amount",type:"u64"}]}},{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"mint",type:"pubkey"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"},{name:"other_bridge",type:"pubkey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"mint",type:"pubkey"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"},{name:"other_bridge",type:"pubkey"}]}}],Od={address:Md,metadata:xd,instructions:Hd,accounts:Jd,errors:jd,types:zd};import{getAccount as Qd}from"@solana/spl-token";import Ud from"big.js";import{Web3 as ja}from"web3";async function ln(o,a){return await Qd(a.connection,o)}async function za(o,a,i){let r=await a.account.pool.fetch(i),s=r.decimals,d=Ud(r.feeShareBp.toString()).div(1e4).toFixed(),A={aValue:r.a.toString(),dValue:r.d.toString(),totalLpAmount:r.totalLpAmount.toString(),tokenBalance:r.tokenBalance.toString(),vUsdBalance:r.vUsdBalance.toString(),accRewardPerShareP:r.accRewardPerShareP.toString()};if(Bt(o,s).lte(0))throw new ft(`Swap amount ${H(o,s).toFixed()} is too small for the liquidity pool. Minimum required amount is 0.001.`);return ut(o,{decimals:s,feeShare:d},A)}function Oa(o){let a=o.amount,i="0x"+o.recipient.toString("hex"),r=o.sourceChainId,s=o.destinationChainId,d="0x"+o.receiveToken.toString("hex"),A="0x"+o.nonce.toString("hex"),l=1,u="0x"+o.chainBridge.toString("hex"),b=ja.utils.encodePacked({t:"uint256",v:a},{t:"bytes32",v:i},{t:"uint256",v:r},{t:"bytes32",v:d},{t:"uint256",v:A},{t:"uint8",v:l});if(!b)throw new w("message cannot be undefined");let y=ja.utils.keccak256(I.from(b.replace("0x",""),"hex")),C=I.from(y.replace("0x",""),"hex");C[0]=r,C[1]=s;let f=ja.utils.encodePacked({t:"bytes32",v:"0x"+C.toString("hex")},{t:"bytes32",v:u});if(!f)throw new on("messageWithSigner cannot be undefined");let v=ja.utils.keccak256(I.from(f.replace("0x",""),"hex")),R=I.from(v.replace("0x",""),"hex");return R[0]=C[0],R[1]=C[1],R}import{web3 as fo}from"@coral-xyz/anchor";import{PublicKey as Kd,TransactionMessage as Ro}from"@solana/web3.js";async function Bo(o,a,i){try{let r=await Qt(a,o),s=await Qt(i,o),d=Ro.decompile(a.message,{addressLookupTableAccounts:r}),A=Ro.decompile(i.message,{addressLookupTableAccounts:s});if(A.instructions.shift(),d.instructions.push(...A.instructions),r.push(...s),a.message=d.compileToV0Message(r),i.message.header.numRequiredSignatures===2&&a.signatures.length===1){let l=i.signatures[0];if(!l)throw new w("Signature is undefined");a.signatures.push(l)}return a}catch(r){throw r instanceof Error&&r.message?new Ve(`Some error occurred during creation final swap and bridge transaction. ${r.message}`):new Ve("Some error occurred during creation final swap and bridge transaction")}}async function St(o,a,i){let r=await a.getAddressLookupTable(new Kd(i)).then(d=>d.value);if(!r)throw new w("Cannot find allbridgeLookupTableAccount");let s=new fo.TransactionMessage({payerKey:o.feePayer,recentBlockhash:o.recentBlockhash,instructions:o.instructions}).compileToV0Message([r]);return new fo.VersionedTransaction(s)}var or=1e6,Ua=class{constructor(a,i,r){this.solanaRpcUrl=a;this.params=i;this.api=r}solanaRpcUrl;params;api;chainType="SOLANA";async buildRawTransactionSwap(a){let i=Ke(this.chainType,a);return await this.buildSwapTransaction(i,a.sourceToken.poolAddress,a.destinationToken.poolAddress,a.txFeeParams)}async buildSwapTransaction(a,i,r,s){let{fromAccountAddress:d,amount:A,contractAddress:l,fromTokenAddress:u,toTokenAddress:b,toAccountAddress:y,minimumReceiveAmount:C}=a,f=d,v=l,R=u,F=b,N=r,G=y,B=new ge(f),P=dt(this.solanaRpcUrl,B.toString()),V=new Qa({...Pt,address:v},P),S=await Xt(V.programId),M=await nt(V.programId),x=new ge(R),ae=await Tt(x,V.programId),se=new ge(i),Ae=Qe(B,x),ie=new ge(G),ne=new ge(F),ce=await Tt(ne,V.programId),le=new ge(N),Ce=Qe(ie,ne),Ie=[_t.ComputeBudgetProgram.setComputeUnitLimit({units:or})];try{await ln(Ce,P)}catch{let Ye=Ed(ne,ie),He=Dd(B,Ye,ie,ne);Ie.push(He)}let be=await V.methods.swap(new Et(A),new Et(C||0)).accountsPartial({payer:B,config:M,bridgeAuthority:S,user:B,sendBridgeToken:ae,sendMint:x,sendPool:se,sendUserToken:Ae,receiveBridgeToken:ce,receiveMint:ne,receivePool:le,receiveUserToken:Ce}).preInstructions(Ie).transaction(),Fe=P.connection;return be.recentBlockhash=(await Fe.getLatestBlockhash()).blockhash,be.feePayer=B,await gn(be,s,this.solanaRpcUrl),await St(be,Fe,this.params.solanaLookUpTable)}async buildRawTransactionSend(a,i){let r,s;switch(a.messenger){case 1:{let d=await this.prepareSwapAndBridgeData(i);r=await this.buildSwapAndBridgeAllbridgeTransaction(d);break}case 2:{let d=await this.prepareSwapAndBridgeData(i),{transaction:A,messageAccount:l}=await this.buildSwapAndBridgeWormholeTransaction(d);r=A,s=l;break}case 3:{let d=await this.prepareSwapAndBridgeCctpData(i),{transaction:A,messageSentEventDataKeypair:l}=await this.buildSwapAndBridgeCctpTransaction(a.destinationToken.chainSymbol,d);r=A,s=l;break}case 4:{let d=await this.prepareSwapAndBridgeCctpV2Data(a,i),{transaction:A,messageSentEventDataKeypair:l}=await this.buildSwapAndBridgeCctpV2Transaction(a.destinationToken.chainSymbol,d);r=A,s=l;break}case 6:throw new w("Messenger xReserve is not supported yet.");case 5:throw new Xe("Messenger OFT is not supported yet.");default:return oe(a.messenger,"Unhandled Messenger type")}return{tx:r,requiredMessageSigner:s}}getExtraGasInstruction(a,i,r){return _t.SystemProgram.transfer({fromPubkey:i,toPubkey:r,lamports:+a})}async prepareSwapAndBridgeData(a){let{amount:i,contractAddress:r,fromChainId:s,fromAccountAddress:d,fromTokenAddress:A,toChainId:l,toAccountAddress:u,toTokenAddress:b,poolAddress:y,extraGas:C}=a,f=A,v=d,R=l,F=b,N=u,G=r,B=s,P=dt(this.solanaRpcUrl,v),V=new Qa({...Pt,address:G},P),S=Array.from(bt()),M=new ge(y),x=await za(i,V,M),ae=await Ga(S,V.programId),se=await Xt(V.programId),Ae=Qe(new ge(v),new ge(f)),ie=await Tt(new ge(f),V.programId),ne=await Ot(R,V.programId),ce=await Xa(R,I.from(F),V.programId),le=await nt(V.programId),Ce=await V.account.config.fetch(le),Ie=await Ct(R,Ce.gasOracleProgramId),be=await Ct(B,Ce.gasOracleProgramId),Fe=Oa({amount:x,recipient:I.from(N),nonce:I.from(S),receiveToken:I.from(F),destinationChainId:R,sourceChainId:B,chainBridge:(await Xt(V.programId)).toBuffer()}),E={};return E.bridge=V,E.amount=new Et(i),E.vusdAmount=new Et(x),E.nonce=S,E.recipient=Array.from(N),E.receiveToken=Array.from(F),E.poolAccount=M,E.lockAccount=ae,E.bridgeAuthority=se,E.userToken=Ae,E.bridgeTokenAccount=ie,E.chainBridgeAccount=ne,E.otherBridgeTokenAccount=ce,E.userAccount=new ge(v),E.destinationChainId=R,E.mint=new ge(f),E.config=le,E.configAccountInfo=Ce,E.gasPrice=Ie,E.thisGasPrice=be,E.message=Fe,C&&(E.extraGasInstruction=this.getExtraGasInstruction(C,E.userAccount,le)),E}async buildSwapAndBridgeAllbridgeTransaction(a){let{bridge:i,vusdAmount:r,nonce:s,recipient:d,receiveToken:A,poolAccount:l,lockAccount:u,bridgeAuthority:b,userToken:y,bridgeTokenAccount:C,chainBridgeAccount:f,otherBridgeTokenAccount:v,userAccount:R,destinationChainId:F,mint:N,config:G,configAccountInfo:B,gasPrice:P,thisGasPrice:V,message:S,extraGasInstruction:M}=a,x=B.allbridgeMessengerProgramId,ae=await dn(F,x),se=await nt(x),Ae=await Pa(S,x),ie=[];M&&ie.push(M);let ne=await i.methods.swapAndBridge({vusdAmount:r,nonce:s,destinationChainId:F,recipient:d,receiveToken:A}).accountsPartial({payer:R,mint:N,user:R,config:G,lock:u,pool:l,gasPrice:P,thisGasPrice:V,bridgeAuthority:b,userToken:y,bridgeToken:C,chainBridge:f,messenger:x,messengerGasUsage:ae,messengerConfig:se,sentMessageAccount:Ae,otherBridgeToken:v}).preInstructions([_t.ComputeBudgetProgram.setComputeUnitLimit({units:or})]).postInstructions(ie).transaction(),ce=dt(this.solanaRpcUrl,R.toString()).connection;return ne.recentBlockhash=(await ce.getLatestBlockhash()).blockhash,ne.feePayer=R,await St(ne,ce,this.params.solanaLookUpTable)}async buildSwapAndBridgeWormholeTransaction(a){let{bridge:i,vusdAmount:r,nonce:s,recipient:d,receiveToken:A,poolAccount:l,lockAccount:u,bridgeAuthority:b,userToken:y,bridgeTokenAccount:C,chainBridgeAccount:f,otherBridgeTokenAccount:v,userAccount:R,destinationChainId:F,mint:N,config:G,configAccountInfo:B,gasPrice:P,thisGasPrice:V,extraGasInstruction:S}=a,M=this.params.wormholeMessengerProgramId;if(!M)throw new w("Do not use.");let[x]=ge.findProgramAddressSync([I.from("Bridge")],new ge(M)),[ae]=ge.findProgramAddressSync([I.from("fee_collector")],new ge(M)),[se]=ge.findProgramAddressSync([I.from("Sequence"),b.toBuffer()],new ge(M)),Ae=await dn(F,B.wormholeMessengerProgramId),ie=await nt(B.wormholeMessengerProgramId),ne=rr.generate(),ce=dt(this.solanaRpcUrl,R.toString()),le=await ce.connection.getAccountInfo(x);if(le==null)throw new w("Cannot fetch wormhole bridge account info");let Ce=new Et(le.data.slice(16,24),"le").toString(),Ie=_d.transfer({fromPubkey:R,toPubkey:ae,lamports:+Ce}),be=[];S&&be.push(S);let Fe={payer:R,mint:N,user:R,config:G,lock:u,pool:l,gasPrice:P,thisGasPrice:V,bridgeAuthority:b,userToken:y,bridgeToken:C,chainBridge:f,otherBridgeToken:v,messengerGasUsage:Ae,wormholeProgram:M,bridge:x,message:ne.publicKey,wormholeMessenger:B.wormholeMessengerProgramId,sequence:se,feeCollector:ae,wormholeMessengerConfig:ie,clock:_t.SYSVAR_CLOCK_PUBKEY},E=await i.methods.swapAndBridgeWormhole({vusdAmount:r,nonce:s,destinationChainId:F,recipient:d,receiveToken:A}).accounts(Fe).preInstructions([_t.ComputeBudgetProgram.setComputeUnitLimit({units:or}),Ie]).postInstructions(be).signers([ne]).transaction();return E.recentBlockhash=(await ce.connection.getLatestBlockhash()).blockhash,E.feePayer=R,{transaction:await St(E,ce.connection,this.params.solanaLookUpTable),messageAccount:ne}}async prepareSwapAndBridgeCctpData(a){let{contractAddress:i,amount:r,fromAccountAddress:s,fromTokenAddress:d,toChainId:A,toAccountAddress:l,toTokenAddress:u,extraGas:b}=a,y=i;if(!y)throw new We("Such route does not support CCTP protocol");let C=4,f=s,v=u,R=l,F=dt(this.solanaRpcUrl,f),N=new Qa({...ar,address:y},F),G=new ge(d),B=await Sa(G,N.programId),P=new ge(f),V=await N.account.cctpBridge.fetch(B),S={};return S.cctpBridge=N,S.cctpBridgeAccount=B,S.cctpAddressAccount=new ge(y),S.amount=new Et(r),S.recipient=Array.from(R),S.receiveToken=Array.from(v),S.userToken=Qe(P,G),S.bridgeAuthority=await Va(B,N.programId),S.bridgeTokenAccount=await po(G,N.programId),S.chainBridgeAccount=await Ot(A,N.programId),S.userAccount=P,S.destinationChainId=A,S.mint=G,S.gasPrice=await Ct(A,V.gasOracleProgramId),S.thisGasPrice=await Ct(C,V.gasOracleProgramId),S.provider=F,b&&(S.extraGasInstruction=this.getExtraGasInstruction(b,S.userAccount,B)),S}async buildSwapAndBridgeCctpTransaction(a,i){let{cctpBridge:r,cctpBridgeAccount:s,amount:d,recipient:A,receiveToken:l,bridgeAuthority:u,userToken:b,bridgeTokenAccount:y,chainBridgeAccount:C,userAccount:f,destinationChainId:v,mint:R,gasPrice:F,thisGasPrice:N,extraGasInstruction:G,provider:B}=i,P=this.params.cctpParams.cctpDomains[a],V=this.params.cctpParams.cctpTransmitterProgramId,S=this.params.cctpParams.cctpTokenMessengerMinter;if(P==null||!V||!S)throw new w("CCTP is not configured");let M=new ge(V),x=new ge(S),{messageTransmitterAccount:ae,tokenMessenger:se,tokenMessengerEventAuthority:Ae,tokenMinter:ie,localToken:ne,remoteTokenMessengerKey:ce,authorityPda:le}=kn(P,R,M,x),Ce=[];G&&Ce.push(G);let Ie=rr.generate(),be=La(r.programId,Ie.publicKey),Fe=await r.methods.bridge({amount:d,destinationChainId:v,recipient:A,receiveToken:l}).accountsPartial({mint:R,user:f,cctpBridge:s,payer:f,messageSentEventData:Ie.publicKey,lock:be,cctpMessenger:x,messageTransmitterProgram:M,messageTransmitterAccount:ae,tokenMessenger:se,tokenMinter:ie,localToken:ne,remoteTokenMessengerKey:ce,authorityPda:le,eventAuthority:Ae,bridgeToken:y,gasPrice:F,thisGasPrice:N,chainBridge:C,userToken:b,bridgeAuthority:u}).preInstructions([_t.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(Ce).transaction(),E=B.connection;return Fe.recentBlockhash=(await E.getLatestBlockhash()).blockhash,Fe.feePayer=f,{transaction:await St(Fe,E,this.params.solanaLookUpTable),messageSentEventDataKeypair:Ie}}async prepareSwapAndBridgeCctpV2Data(a,i){let{contractAddress:r,amount:s,fromAccountAddress:d,fromTokenAddress:A,toChainId:l,toAccountAddress:u,toTokenAddress:b,extraGas:y}=i,C=r;if(!C)throw new We("The route does not support CCTPv2 protocol");let f=4,v=d,R=b,F=dt(this.solanaRpcUrl,v),N=new Qa({...ir,address:C},F),G=new ge(A),B=ka(G,N.programId),P=new ge(v),V=await N.account.config.fetch(B),S,M;if(a.destinationToken.chainType==="SRB"){let ae=a.destinationToken.cctpV2Address;if(!ae)throw new We("The route does not support CCTPv2 protocol");S=Array.from(new ge(ae).toBytes()),M=sn(a.toAccountAddress)}else S=Array.from(u),M=void 0;let x={};return x.cctpBridge=N,x.amount=new Et(s),x.recipient=S,x.receiveToken=Array.from(R),x.hookData=M,x.userToken=Qe(P,G),x.chainBridgeAccount=await Ot(l,N.programId),x.userAccount=P,x.destinationChainId=l,x.mint=G,x.gasPrice=await Ct(l,V.gasOracleProgramId),x.thisGasPrice=await Ct(f,V.gasOracleProgramId),x.provider=F,y&&(x.extraGasInstruction=this.getExtraGasInstruction(y,x.userAccount,B)),x}async buildSwapAndBridgeCctpV2Transaction(a,i){let{amount:r,cctpBridge:s,chainBridgeAccount:d,destinationChainId:A,extraGasInstruction:l,gasPrice:u,hookData:b,mint:y,provider:C,receiveToken:f,recipient:v,thisGasPrice:R,userAccount:F,userToken:N}=i,G=this.params.cctpParams.cctpDomains[a],B=this.params.cctpParams.cctpV2TransmitterProgramId,P=this.params.cctpParams.cctpV2TokenMessengerMinter;if(G==null||!B||!P)throw new w("CCTPv2 is not configured");let V=new ge(B),S=new ge(P),{messageTransmitterAccount:M,tokenMessenger:x,tokenMessengerEventAuthority:ae,tokenMinter:se,localToken:Ae,remoteTokenMessengerKey:ie,authorityPda:ne}=kn(G,y,V,S),ce=[];l&&ce.push(l);let le=rr.generate(),Ce={amount:r,destinationChainId:A,recipient:v,receiveToken:f},be=await(b?s.methods.bridgeWithHook({...Ce,hookData:b}):s.methods.bridge(Ce)).accounts({mint:y,user:F,messageSentEventData:le.publicKey,tokenMessengerMinterProgram:S,messageTransmitterProgram:V,messageTransmitterAccount:M,tokenMessenger:x,tokenMinter:se,localToken:Ae,remoteTokenMessenger:ie,authorityPda:ne,eventAuthority:ae,gasPrice:u,thisGasPrice:R,chainBridge:d,userToken:N}).preInstructions([_t.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(ce).transaction(),Fe=C.connection;return be.recentBlockhash=(await Fe.getLatestBlockhash()).blockhash,be.feePayer=F,{transaction:await St(be,Fe,this.params.solanaLookUpTable),messageSentEventDataKeypair:le}}};import{NATIVE_MINT as $d}from"@solana/spl-token";import{VersionedTransaction as qd}from"@solana/web3.js";import To,{AxiosError as Yo}from"axios";import{Big as De}from"big.js";var eA=1.1,tA=1.01,Ka=class{constructor(a,i){this.api=a;this.jupiterUrl=i.jupiterUrl.replace(/\/$/,""),this.apiKeyHeader=i.jupiterApiKeyHeader,this.maxAccounts=i.jupiterMaxAccounts}api;jupiterUrl;apiKeyHeader;maxAccounts;async buildJupAndUpdateTxSendParams(a,i){let r=nr(a.txFeeParams?.solana);try{let{tx:s,solTxSendUpdatedParams:d}=await this.processJup(i,a,r,!0);return{jupTx:s,solTxSendParams:{...i,...d}}}catch(s){if(s instanceof ft)throw s;try{let{tx:d,solTxSendUpdatedParams:A}=await this.processJup(i,a,r,!1);return{jupTx:d,solTxSendParams:{...i,...A}}}catch(d){throw d instanceof fe?d:d instanceof Error&&d.message?new Ve(`Some error occurred during creation Jupiter swap transaction. ${d.message}`):new Ve("Some error occurred during creation Jupiter swap transaction")}}}async processJup(a,i,r,s){let{fee:d,extraGas:A,gasFeePaymentMethod:l,sourceNativeTokenPrice:u}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(i.sourceToken,a),b=s?De(d):De(a.fee);if(A&&(s?b=b.plus(A):a.extraGas&&(b=b.plus(a.extraGas))),r?.payTxFeeWithStablecoinSwap)if(s)b=b.plus(3526760);else{if(!u)throw new w("sourceNativeTokenPrice is undefined.");let N=De(3526760).mul(u).div(De(10).pow(Q.getChainDecimalsByType("SOLANA")-i.sourceToken.decimals)).toFixed(0);b=b.plus(N)}s||(b=b.mul(eA));let{tx:y,amountIn:C}=await this.getJupiterSwapTx(i.fromAccountAddress,i.sourceToken.tokenAddress,b.toFixed(0),s),f;if(s){if(!C)throw new Ve("Cannot get inAmount");f=De(a.amount).minus(De(C).mul(tA).toFixed(0,De.roundUp)).toFixed(0)}else f=De(a.amount).minus(b).toFixed(0);if(De(f).lte(0))throw new ft(`Amount not enough to pay fee, ${H(De(f).minus(1).neg(),i.sourceToken.decimals).toFixed()} ${i.sourceToken.symbol} is missing`);return{tx:y,solTxSendUpdatedParams:{amount:f,fee:d,extraGas:A,gasFeePaymentMethod:l}}}async convertStableCoinFeeAndExtraGasToNativeCurrency(a,i){if(i.gasFeePaymentMethod=="stablecoin"){let r=(await this.api.getReceiveTransactionCost({sourceChainId:i.fromChainId,destinationChainId:i.toChainId,messenger:i.messenger,sourceToken:a.tokenAddress})).sourceNativeTokenPrice,s=De(i.fee).div(r).mul(De(10).pow(Q.getChainDecimalsByType("SOLANA")-a.decimals)).toFixed(0),d;return i.extraGas&&(d=De(i.extraGas).div(r).mul(De(10).pow(Q.getChainDecimalsByType("SOLANA")-a.decimals)).toFixed(0)),{fee:s,extraGas:d,gasFeePaymentMethod:"native",sourceNativeTokenPrice:r}}return{fee:i.fee,extraGas:i.extraGas,gasFeePaymentMethod:"native"}}async getJupiterSwapTx(a,i,r,s){let d;try{let C=s?"ExactOut":"ExactIn",f=`${this.jupiterUrl}/quote?inputMint=${i}&outputMint=${$d.toString()}&amount=${r}&swapMode=${C}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(f+=`&maxAccounts=${this.maxAccounts}`),d=await To.get(f,{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(C){throw C instanceof Yo&&C.response&&C.response.data&&C.response.data.error?new Ve(C.response.data.error):new Ve("Cannot get route")}let A;if(s&&d?.data?.inAmount)A=d.data.inAmount;else if(s)throw new Ve("Cannot get inAmount");let l;try{l=await To.post(`${this.jupiterUrl}/swap`,{quoteResponse:d.data,userPublicKey:a,wrapAndUnwrapSol:!0},{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(C){throw C instanceof Yo&&C.response&&C.response.data&&C.response.data.error?new Ve(C.response.data.error):new Ve("Cannot get swap transaction")}let u;if(l?.data?.swapTransaction)u=l.data.swapTransaction;else throw new Ve("Cannot get swap transaction");let b=I.from(u,"base64"),y=qd.deserialize(b);return s?{tx:y,amountIn:A}:{tx:y}}};import{BN as Mn,Program as Fo,web3 as cA}from"@coral-xyz/anchor";import{Keypair as No,PublicKey as At,SystemProgram as gA}from"@solana/web3.js";var sr={};Fn(sr,{accounts:()=>rA,address:()=>nA,default:()=>AA,errors:()=>sA,events:()=>oA,instructions:()=>iA,metadata:()=>aA,types:()=>dA});var nA="DfB5pJSykRUuUT2ViG8V382R6RB5CQ3GTMVFajoyxXn1",aA={name:"payer_with_token",version:"0.1.0",spec:"0.1.0",description:"Created with Anchor"},iA=[{name:"add_fee_token",discriminator:[171,6,150,97,69,55,13,136],accounts:[{name:"initializer",writable:!0,signer:!0},{name:"admin",signer:!0},{name:"fee_token_mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"system_program",address:"11111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"AddFeeTokenArgs"}}}]},{name:"bridge_cctp",discriminator:[35,114,66,117,122,78,225,186],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint",writable:!0},{name:"fee_token_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"user_fee_token_account",writable:!0},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"cctp_bridge"},{name:"bridge_token",writable:!0},{name:"cctp_messenger"},{name:"message_transmitter_program"},{name:"message_transmitter_account",writable:!0},{name:"token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"remote_token_messenger_key"},{name:"authority_pda"},{name:"event_authority"},{name:"message_sent_event_data",writable:!0,signer:!0},{name:"lock",writable:!0},{name:"cctp_bridge_config",writable:!0},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"bridge_authority"},{name:"user_token_account",writable:!0},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"PayerCctpBridgeArgs"}}}]},{name:"bridge_cctp_v2",discriminator:[237,74,221,146,95,161,136,197],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint",writable:!0},{name:"fee_token_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"user_fee_token_account",writable:!0},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"cctp_bridge"},{name:"bridge_token",writable:!0},{name:"token_messenger_minter_program"},{name:"message_transmitter_program"},{name:"message_transmitter_account",writable:!0},{name:"token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"remote_token_messenger"},{name:"authority_pda"},{name:"denylist_account",pda:{seeds:[{kind:"const",value:[100,101,110,121,108,105,115,116,95,97,99,99,111,117,110,116]},{kind:"account",path:"user"}],program:{kind:"account",path:"token_messenger_minter_program"}}},{name:"event_authority"},{name:"message_sent_event_data",writable:!0,signer:!0},{name:"lock",writable:!0},{name:"cctp_bridge_config",writable:!0},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"bridge_authority"},{name:"user_token_account",writable:!0},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"PayerCctpV2BridgeArgs"}}}]},{name:"initialize",discriminator:[175,175,109,31,13,152,155,237],accounts:[{name:"initializer",writable:!0,signer:!0},{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"system_program",address:"11111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializeArgs"}}}]},{name:"remove_fee_token",discriminator:[46,96,240,63,28,173,62,131],accounts:[{name:"admin",writable:!0,signer:!0},{name:"fee_token_mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}],args:[]},{name:"set_admin",discriminator:[251,163,0,52,91,194,187,92],accounts:[{name:"admin",writable:!0,signer:!0},{name:"new_admin"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[]},{name:"set_bridge_program_id",discriminator:[59,191,249,155,146,73,202,139],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_cctp_bridge_program_id",discriminator:[164,36,75,241,35,30,47,159],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_cctp_v2_bridge_program_id",discriminator:[98,190,8,24,135,12,117,249],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_fee_token_price",discriminator:[116,201,189,21,190,10,242,241],accounts:[{name:"price_authority",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_mint"},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}}],args:[{name:"new_price",type:"u64"}]},{name:"set_price_authority",discriminator:[51,241,68,137,206,207,244,107],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_address",type:"pubkey"}]},{name:"swap_and_bridge",discriminator:[204,63,169,171,186,125,86,159],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"fee_token_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"user_fee_token_account",writable:!0},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"bridge"},{name:"bridge_token",writable:!0},{name:"messenger"},{name:"messenger_config",writable:!0},{name:"sent_message_account",writable:!0},{name:"messenger_gas_usage"},{name:"lock",writable:!0},{name:"bridge_config",writable:!0},{name:"other_bridge_token",writable:!0},{name:"pool",writable:!0},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"bridge_authority"},{name:"user_token_account",writable:!0},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"PayerSwapAndBridgeArgs"}}}]},{name:"swap_and_bridge_wormhole",discriminator:[41,91,201,180,150,117,154,65],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"fee_token_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"user_fee_token_account",writable:!0},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"bridge"},{name:"bridge_token",writable:!0},{name:"lock",writable:!0},{name:"bridge_config",writable:!0},{name:"other_bridge_token",writable:!0},{name:"pool",writable:!0},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token_account",writable:!0},{name:"bridge_authority"},{name:"wormhole_messenger"},{name:"wormhole_messenger_config",writable:!0},{name:"wormhole_program"},{name:"wormhole_bridge",writable:!0},{name:"message",writable:!0,signer:!0},{name:"sequence",writable:!0},{name:"fee_collector",writable:!0},{name:"messenger_gas_usage"},{name:"clock",address:"SysvarC1ock11111111111111111111111111111111"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"PayerSwapAndBridgeArgs"}}}]},{name:"upgrade_config",discriminator:[129,185,25,221,96,63,251,97],accounts:[{name:"payer",writable:!0,signer:!0},{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"withdraw_fee_token",discriminator:[131,103,89,216,53,78,255,118],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_mint"},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"admin_fee_token_account",writable:!0},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount",type:"u64"}]},{name:"withdraw_gas_token",discriminator:[109,117,140,223,117,175,2,139],accounts:[{name:"admin",signer:!0},{name:"recipient",writable:!0},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount",type:"u64"}]}],rA=[{name:"ChainBridge",discriminator:[25,216,147,218,140,42,98,49]},{name:"Config",discriminator:[155,12,170,224,30,250,204,130]},{name:"FeeTokenConfig",discriminator:[226,113,31,124,53,31,222,222]}],oA=[{name:"ExtraGasSentEvent",discriminator:[111,21,139,73,113,95,104,52]}],sA=[{code:6e3,name:"PayerFeeSlippage",msg:"Payer fee slippage"},{code:6001,name:"InvalidData",msg:"Invalid data"}],dA=[{name:"AddFeeTokenArgs",type:{kind:"struct",fields:[{name:"price",type:"u64"}]}},{name:"ChainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"}]}},{name:"Config",type:{kind:"struct",fields:[{name:"admin",type:"pubkey"},{name:"authority_bump_seed",type:"u8"},{name:"bridge_program_id",type:"pubkey"},{name:"cctp_bridge_program_id",type:"pubkey"},{name:"price_authority",type:"pubkey"},{name:"cctp_v2_bridge_program_id",type:"pubkey"}]}},{name:"ExtraGasSentEvent",type:{kind:"struct",fields:[{name:"fee_token_mint",type:"pubkey"},{name:"extra_gas_amount_in_fee_token",type:"u64"},{name:"extra_gas_amount_in_sol",type:"u64"},{name:"extra_gas_amount_in_usd",type:"u64"}]}},{name:"FeeTokenConfig",type:{kind:"struct",fields:[{name:"mint",type:"pubkey"},{name:"decimals",type:"u8"},{name:"price",type:"u64"},{name:"bump",type:"u8"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"bridge_program_id",type:"pubkey"},{name:"cctp_bridge_program_id",type:"pubkey"},{name:"cctp_v2_bridge_program_id",type:"pubkey"}]}},{name:"PayerCctpBridgeArgs",type:{kind:"struct",fields:[{name:"max_fee_amount",type:"u64"},{name:"extra_gas_amount_in_fee_token",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"PayerCctpV2BridgeArgs",type:{kind:"struct",fields:[{name:"max_fee_amount",type:"u64"},{name:"extra_gas_amount_in_fee_token",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"hook_data",type:{option:"bytes"}}]}},{name:"PayerSwapAndBridgeArgs",type:{kind:"struct",fields:[{name:"max_fee_amount",type:"u64"},{name:"extra_gas_amount_in_fee_token",type:"u64"},{name:"destination_chain_id",type:"u8"},{name:"recipient",type:{array:["u8",32]}},{name:"recipient_token",type:{array:["u8",32]}},{name:"vusd_amount",type:"u64"},{name:"nonce",type:{array:["u8",32]}}]}}],AA={address:nA,metadata:aA,instructions:iA,accounts:rA,events:oA,errors:sA,types:dA};import{StrKey as Wo}from"@stellar/stellar-sdk";function wo(o){if(!Wo.isValidContract(o))throw new w("Invalid Stellar contract");return I.from(Wo.decodeContract(o))}var lA=1e6,Da=class{constructor(a,i,r){this.solanaRpcUrl=a;this.params=i;this.api=r}solanaRpcUrl;params;api;chainType="SOLANA";async buildRawTransactionSend(a,i){switch(a.messenger){case 1:{let r=await this.prepareSwapAndBridgeAllbridgeData(a,i);return{tx:await this.buildSwapAndBridgeTx(r)}}case 2:{let r=await this.prepareSwapAndBridgeWormholeData(a,i);return await this.buildSwapAndBridgeWormholeTx(r)}case 3:{let r=await this.prepareBridgeCctpData(a,i);return this.buildBridgeCctpTx(r)}case 4:{let r=await this.prepareBridgeCctpData(a,i);return this.buildBridgeCctpV2Tx(r)}case 6:throw new w("Messenger xReserve is not supported yet.");case 5:throw new Xe("Messenger OFT is not supported yet.");default:return oe(a.messenger,"Unhandled Messenger type")}}async prepareSwapAndBridgeBaseData(a,i){let{fromChainId:r,fromAccountAddress:s,fromTokenAddress:d,poolAddress:A,toAccountAddress:l,toTokenAddress:u,toChainId:b,fee:y,extraGas:C="0"}=i,f=new At(s),v=Array.from(l),R=Array.from(u),F=new Mn(y),N=new Mn(C),G=dt(this.solanaRpcUrl,s),B=this.getPayerProgram(a,G),P=new Fo({...Pt,address:a.sourceToken.bridgeAddress},G),V=new At(A),S=await nt(P.programId),M=await P.account.config.fetch(S),x=new At(d),ae=new At(this.getAbrFeeTokenMintAddress(a)),se=Qe(f,x),Ae=Qe(f,ae),ie=await Ct(b,M.gasOracleProgramId),ne=await Ct(r,M.gasOracleProgramId);return{provider:G,payerProgram:B,bridgeProgram:P,userAccount:f,recipient:v,recipientToken:R,recipientChain:b,maxFeeAmount:F,extraGasAmountInFeeToken:N,mintAccount:x,feeTokenMintAccount:ae,userTokenAccount:se,userFeeTokenAccount:Ae,gasPriceAccount:ie,thisGasPriceAccount:ne,poolAccount:V,bridgeConfigAccount:S,bridgeConfigInfo:M}}getComputeUnitLimitInstruction(){return cA.ComputeBudgetProgram.setComputeUnitLimit({units:lA})}getPayerProgram(a,i){let r=a.sourceToken.abrPayer?.payerAddress;if(!r)throw new Zt("Payer with token not supported yet for ABR tokens");return new Fo({...sr,address:r},i)}getAbrFeeTokenMintAddress(a){let i=a.sourceToken.abrPayer?.abrToken.tokenAddress;if(!i)throw new Zt("Payer with token not supported yet for ABR tokens");return i}async prepareSwapAndBridgeCommonData(a,i){let{amount:r,toChainId:s,toTokenAddress:d}=i,{bridgeProgram:A,poolAccount:l,mintAccount:u}=a,b=await za(r,A,l),y=Array.from(bt()),C=await Ga(y,A.programId),f=A.programId,v=await Ot(s,f),R=await Xt(f),F=await Tt(u,f),N=await Xa(s,I.from(d),f);return{...a,vusdAmount:new Mn(b),nonce:y,lockAccount:C,chainBridgeAccount:v,bridgeProgramId:f,bridgeAuthorityAccount:R,bridgeTokenAccount:F,otherBridgeTokenAccount:N}}getWormholeProgramAddresses(a,i){let r=new At(a),[s]=At.findProgramAddressSync([I.from("Bridge")],r),[d]=At.findProgramAddressSync([I.from("Sequence"),i.toBuffer()],r),[A]=At.findProgramAddressSync([I.from("fee_collector")],r);return{wormholeBridgeAccount:s,wormholeSequenceAccount:d,wormholeFeeCollectorAccount:A}}async getWormholeFeeInstruction(a,i,r,s){let d=await a.connection.getAccountInfo(i);if(d==null)throw new w("Cannot fetch wormhole bridge account info");let A=new Mn(d.data.slice(16,24),"le").toString();return gA.transfer({fromPubkey:r,toPubkey:s,lamports:+A})}async prepareSwapAndBridgeAllbridgeData(a,i){let r=await this.prepareSwapAndBridgeBaseData(a,i),s=await this.prepareSwapAndBridgeCommonData(r,i),{recipient:d,recipientToken:A,recipientChain:l,bridgeConfigInfo:u}=r,{vusdAmount:b,nonce:y,bridgeAuthorityAccount:C}=s,{fromChainId:f,toChainId:v}=i,R=Oa({amount:b.toString(),recipient:I.from(d),nonce:I.from(y),receiveToken:I.from(A),destinationChainId:l,sourceChainId:f,chainBridge:C.toBuffer()}),F=u.allbridgeMessengerProgramId,N=await Pa(R,F),G=await nt(F),B=await dn(v,F);return{...s,sentMessageAccount:N,messengerProgramId:F,messengerConfigAccount:G,messengerGasUsageAccount:B}}async prepareSwapAndBridgeWormholeData(a,i){let r=await this.prepareSwapAndBridgeBaseData(a,i),s=await this.prepareSwapAndBridgeCommonData(r,i),{provider:d,userAccount:A,bridgeConfigInfo:l}=r,{bridgeAuthorityAccount:u}=s,{toChainId:b}=i,y=l.wormholeMessengerProgramId,C=await nt(y),f=await dn(b,y),v=this.params.wormholeMessengerProgramId;if(!v)throw new w("Do not use.");let{wormholeBridgeAccount:R,wormholeSequenceAccount:F,wormholeFeeCollectorAccount:N}=this.getWormholeProgramAddresses(v,u),G=No.generate(),B=await this.getWormholeFeeInstruction(d,R,A,N);return{...s,wormholeMessengerAccount:y,wormholeMessengerConfigAccount:C,wormholeProgramId:v,sequenceAccount:F,feeCollectorAccount:N,messengerGasUsageAccount:f,messageAccount:G,wormholeBridgeAccount:R,feeInstruction:B}}async prepareBridgeCctpData(a,i){let r=await this.prepareSwapAndBridgeBaseData(a,i),{mintAccount:s}=r,{amount:d,toChainId:A}=i,l=a.destinationToken.chainSymbol,u=this.params.cctpParams.cctpDomains[l],b,y,C,f,v;if(a.messenger===3)b=1,C=a.sourceToken.cctpAddress,f=this.params.cctpParams.cctpTransmitterProgramId,v=this.params.cctpParams.cctpTokenMessengerMinter;else if(a.messenger===4&&(b=2,C=a.sourceToken.cctpV2Address,f=this.params.cctpParams.cctpV2TransmitterProgramId,v=this.params.cctpParams.cctpV2TokenMessengerMinter,a.destinationToken.chainType==="SRB")){let le=a.destinationToken.cctpV2Address;if(!le)throw new We("Such route does not support CCTP V2 protocol");r.recipient=Array.from(wo(le)),y=sn(a.toAccountAddress)}if(u==null||!f||!v)throw new w(`CCTP ${b} is not configured`);if(!C)throw new We(`Such route does not support CCTP ${b} protocol`);let R=new At(C),F=b===1?await Sa(s,R):ka(s,R),N=await Ot(A,R),G=await Va(F,R),B=await Tt(s,R),P=new At(f),V=new At(v),{messageTransmitterAccount:S,tokenMessenger:M,tokenMessengerEventAuthority:x,tokenMinter:ae,localToken:se,remoteTokenMessengerKey:Ae,authorityPda:ie}=kn(u,s,P,V),ne=No.generate(),ce=La(R,ne.publicKey);return{...r,lockAccount:ce,messageSentEventDataKeypair:ne,amount:new Mn(d),hookData:y,chainBridgeAccount:N,cctpBridgeProgramId:R,cctpBridgeAuthorityAccount:G,cctpBridgeConfigAccount:F,cctpBridgeTokenAccount:B,cctpTokenMessengerMinter:V,cctpTransmitterProgramId:P,messageTransmitterAccount:S,tokenMessenger:M,tokenMessengerEventAuthority:x,tokenMinter:ae,localToken:se,remoteTokenMessengerKey:Ae,authorityPda:ie}}async buildSwapAndBridgeTx(a){let{provider:i,payerProgram:r,userAccount:s,vusdAmount:d,recipient:A,recipientChain:l,recipientToken:u,maxFeeAmount:b,extraGasAmountInFeeToken:y,nonce:C,lockAccount:f,chainBridgeAccount:v,bridgeProgramId:R,bridgeAuthorityAccount:F,bridgeTokenAccount:N,mintAccount:G,feeTokenMintAccount:B,userTokenAccount:P,userFeeTokenAccount:V,gasPriceAccount:S,thisGasPriceAccount:M,sentMessageAccount:x,messengerProgramId:ae,messengerConfigAccount:se,messengerGasUsageAccount:Ae,bridgeConfigAccount:ie,otherBridgeTokenAccount:ne,poolAccount:ce}=a,le=await r.methods.swapAndBridge({vusdAmount:d,recipient:A,recipientToken:u,maxFeeAmount:b,extraGasAmountInFeeToken:y,nonce:C,destinationChainId:l}).accountsPartial({lock:f,chainBridge:v,bridge:R,bridgeAuthority:F,bridgeToken:N,mint:G,feeTokenMint:B,userTokenAccount:P,userFeeTokenAccount:V,gasPrice:S,thisGasPrice:M,sentMessageAccount:x,messenger:ae,messengerConfig:se,messengerGasUsage:Ae,bridgeConfig:ie,otherBridgeToken:ne,pool:ce}).preInstructions([this.getComputeUnitLimitInstruction()]).transaction();return await this.finalizeTransaction(le,i,s)}async buildSwapAndBridgeWormholeTx(a){let{provider:i,payerProgram:r,userAccount:s,vusdAmount:d,recipient:A,recipientChain:l,recipientToken:u,maxFeeAmount:b,extraGasAmountInFeeToken:y,nonce:C,lockAccount:f,chainBridgeAccount:v,bridgeProgramId:R,bridgeAuthorityAccount:F,bridgeTokenAccount:N,mintAccount:G,feeTokenMintAccount:B,userTokenAccount:P,userFeeTokenAccount:V,gasPriceAccount:S,thisGasPriceAccount:M,messengerGasUsageAccount:x,bridgeConfigAccount:ae,otherBridgeTokenAccount:se,poolAccount:Ae,wormholeMessengerAccount:ie,wormholeMessengerConfigAccount:ne,wormholeProgramId:ce,sequenceAccount:le,feeCollectorAccount:Ce,messageAccount:Ie,wormholeBridgeAccount:be,feeInstruction:Fe}=a,E=await r.methods.swapAndBridgeWormhole({vusdAmount:d,recipient:A,recipientToken:u,maxFeeAmount:b,extraGasAmountInFeeToken:y,nonce:C,destinationChainId:l}).accounts({lock:f,chainBridge:v,bridge:R,bridgeAuthority:F,bridgeToken:N,mint:G,feeTokenMint:B,userTokenAccount:P,userFeeTokenAccount:V,gasPrice:S,thisGasPrice:M,messengerGasUsage:x,bridgeConfig:ae,otherBridgeToken:se,pool:Ae,wormholeMessenger:ie,wormholeMessengerConfig:ne,wormholeProgram:ce,sequence:le,feeCollector:Ce,message:Ie.publicKey,wormholeBridge:be}).preInstructions([this.getComputeUnitLimitInstruction(),Fe]).signers([Ie]).transaction();return{tx:await this.finalizeTransaction(E,i,s),requiredMessageSigner:Ie}}async buildBridgeCctpTx(a){let{provider:i,payerProgram:r,amount:s,recipient:d,recipientToken:A,userAccount:l,recipientChain:u,maxFeeAmount:b,extraGasAmountInFeeToken:y,lockAccount:C,mintAccount:f,feeTokenMintAccount:v,userTokenAccount:R,userFeeTokenAccount:F,gasPriceAccount:N,thisGasPriceAccount:G,chainBridgeAccount:B,cctpBridgeProgramId:P,cctpBridgeAuthorityAccount:V,cctpBridgeConfigAccount:S,cctpBridgeTokenAccount:M,cctpTokenMessengerMinter:x,cctpTransmitterProgramId:ae,messageTransmitterAccount:se,tokenMessenger:Ae,tokenMessengerEventAuthority:ie,tokenMinter:ne,localToken:ce,remoteTokenMessengerKey:le,authorityPda:Ce,messageSentEventDataKeypair:Ie}=a,be=await r.methods.bridgeCctp({amount:s,recipient:d,receiveToken:A,destinationChainId:u,maxFeeAmount:b,extraGasAmountInFeeToken:y}).accounts({lock:C,messageSentEventData:Ie.publicKey,mint:f,feeTokenMint:v,userFeeTokenAccount:F,bridgeToken:M,cctpBridge:P,cctpBridgeConfig:S,cctpMessenger:x,messageTransmitterProgram:ae,messageTransmitterAccount:se,tokenMessenger:Ae,tokenMinter:ne,localToken:ce,remoteTokenMessengerKey:le,authorityPda:Ce,eventAuthority:ie,gasPrice:N,thisGasPrice:G,chainBridge:B,bridgeAuthority:V,userTokenAccount:R}).preInstructions([this.getComputeUnitLimitInstruction()]).transaction();return{tx:await this.finalizeTransaction(be,i,l),requiredMessageSigner:Ie}}async buildBridgeCctpV2Tx(a){let{provider:i,payerProgram:r,amount:s,recipient:d,recipientToken:A,hookData:l,userAccount:u,recipientChain:b,maxFeeAmount:y,extraGasAmountInFeeToken:C,lockAccount:f,mintAccount:v,feeTokenMintAccount:R,userTokenAccount:F,userFeeTokenAccount:N,gasPriceAccount:G,thisGasPriceAccount:B,chainBridgeAccount:P,cctpBridgeProgramId:V,cctpBridgeAuthorityAccount:S,cctpBridgeConfigAccount:M,cctpBridgeTokenAccount:x,cctpTokenMessengerMinter:ae,cctpTransmitterProgramId:se,messageTransmitterAccount:Ae,tokenMessenger:ie,tokenMessengerEventAuthority:ne,tokenMinter:ce,localToken:le,remoteTokenMessengerKey:Ce,authorityPda:Ie,messageSentEventDataKeypair:be}=a,Fe=await r.methods.bridgeCctpV2({amount:s,recipient:d,receiveToken:A,destinationChainId:b,maxFeeAmount:y,extraGasAmountInFeeToken:C,hookData:l??null}).accounts({mint:v,feeTokenMint:R,userFeeTokenAccount:N,bridgeToken:x,cctpBridge:V,tokenMessengerMinterProgram:ae,messageTransmitterProgram:se,messageTransmitterAccount:Ae,tokenMessenger:ie,tokenMinter:ce,localToken:le,remoteTokenMessenger:Ce,authorityPda:Ie,eventAuthority:ne,messageSentEventData:be.publicKey,lock:f,cctpBridgeConfig:M,gasPrice:G,thisGasPrice:B,chainBridge:P,bridgeAuthority:S,userTokenAccount:F}).preInstructions([this.getComputeUnitLimitInstruction()]).transaction();return{tx:await this.finalizeTransaction(Fe,i,u),requiredMessageSigner:be}}async finalizeTransaction(a,i,r){let s=i.connection;return a.recentBlockhash=(await s.getLatestBlockhash()).blockhash,a.feePayer=r,await St(a,s,this.params.solanaLookUpTable)}};var Ea=class extends Pe{constructor(i,r,s){super();this.solanaRpcUrl=i;this.params=r;this.api=s;this.connection=new pA(i),this.jupiterService=new Ka(s,r.jupiterParams),this.bridgeTxService=new Ua(i,r,s),this.payerWithTokenService=new Da(i,r,s)}solanaRpcUrl;params;api;chainType="SOLANA";connection;jupiterService;bridgeTxService;payerWithTokenService;async buildRawTransactionSwap(i){return this.bridgeTxService.buildRawTransactionSwap(i)}async buildRawTransactionSend(i){let r=await Oe(this.chainType,i,this.api),s=this.addPoolAddress(i,r),d=i.gasFeePaymentMethod??"native",A,l;switch(d){case"native":{let u=await this.buildTxWithNativePayment(i,s);A=u.tx,l=u.requiredMessageSigner;break}case"stablecoin":{let u=await this.buildTxWithStablePayment(i,s);A=u.tx,l=u.requiredMessageSigner;break}case"abr":{let u=await this.buildTxWithAbrPayment(i,s);A=u.tx,l=u.requiredMessageSigner;break}default:return oe(d,"Unhandled FeePaymentMethod")}return await ho(A,i.txFeeParams,this.solanaRpcUrl),l&&A.sign([l]),A}async buildTxWithNativePayment(i,r){return await this.bridgeTxService.buildRawTransactionSend(i,r)}async buildTxWithStablePayment(i,r){let{jupTx:s,solTxSendParams:d}=await this.jupiterService.buildJupAndUpdateTxSendParams(i,r),{tx:A,requiredMessageSigner:l}=await this.bridgeTxService.buildRawTransactionSend(i,d);if(!s)throw new Ve("Swap tx is absent");return{tx:await Bo(this.connection,s,A),requiredMessageSigner:l}}async buildTxWithAbrPayment(i,r){return this.payerWithTokenService.buildRawTransactionSend(i,r)}send(i){throw new K}addPoolAddress(i,r){return{...r,poolAddress:i.sourceToken.poolAddress}}};import{Address as dr,contract as BX}from"@stellar/stellar-sdk";import{Big as vA}from"big.js";import{contract as n}from"@stellar/stellar-sdk";var uA=n.Spec,mA=n.Client;var xn=class extends mA{constructor(i){super(new uA(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAgAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==","AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD","AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAEAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),i);this.options=i}options;fromJSON={initialize:this.txFromJSON,swap_and_bridge:this.txFromJSON,receive_tokens:this.txFromJSON,swap:this.txFromJSON,stop_swap:this.txFromJSON,start_swap:this.txFromJSON,set_gas_oracle:this.txFromJSON,set_stop_authority:this.txFromJSON,set_rebalancer:this.txFromJSON,set_messenger:this.txFromJSON,set_gas_usage:this.txFromJSON,register_bridge:this.txFromJSON,add_bridge_token:this.txFromJSON,remove_bridge_token:this.txFromJSON,add_pool:this.txFromJSON,withdraw_gas_tokens:this.txFromJSON,withdraw_bridging_fee_in_tokens:this.txFromJSON,has_processed_message:this.txFromJSON,has_received_message:this.txFromJSON,get_pool_address:this.txFromJSON,get_config:this.txFromJSON,get_stop_authority:this.txFromJSON,get_transaction_cost:this.txFromJSON,get_gas_usage:this.txFromJSON,get_admin:this.txFromJSON,get_gas_oracle:this.txFromJSON,get_another_bridge:this.txFromJSON,set_admin:this.txFromJSON,upgrade:this.txFromJSON}};var Ue={};Fn(Ue,{Client:()=>Hn,Errors:()=>CA,contract:()=>IA,networks:()=>yA,rpc:()=>hA});$e(Ue,II);import{Client as Zo,Spec as bA}from"@stellar/stellar-sdk/contract";import*as II from"@stellar/stellar-sdk";import*as IA from"@stellar/stellar-sdk/contract";import*as hA from"@stellar/stellar-sdk/rpc";typeof window<"u"&&(window.Buffer=window.Buffer||I);var yA={testnet:{networkPassphrase:"Test SDF Network ; September 2015",contractId:"CAYUCAP2ORC5PSASKC63MQGMB6X62YXDADCSPDBZNHHHG33GKNZUYROB"}},CA={0:{message:"Unimplemented"},1:{message:"Initialized"},2:{message:"Uninitialized"},3:{message:"Unauthorized"},4:{message:"InvalidArg"},5:{message:"InvalidChainId"},6:{message:"InvalidOtherChainId"},7:{message:"GasUsageNotSet"},8:{message:"BrokenAddress"},9:{message:"NotFound"},10:{message:"TokenInsufficientBalance"},11:{message:"CastFailed"},12:{message:"U256Overflow"},103:{message:"ZeroAmount"},104:{message:"PoolOverflow"},105:{message:"ZeroChanges"},106:{message:"ReservesExhausted"},107:{message:"InsufficientReceivedAmount"},108:{message:"BalanceRatioExceeded"},109:{message:"Forbidden"},203:{message:"UnauthorizedStopAuthority"},204:{message:"SwapProhibited"},205:{message:"AmountTooLowForFee"},206:{message:"BridgeToTheZeroAddress"},207:{message:"EmptyRecipient"},208:{message:"SourceNotRegistered"},209:{message:"WrongDestinationChain"},210:{message:"UnknownAnotherChain"},211:{message:"TokensAlreadySent"},212:{message:"MessageProcessed"},214:{message:"NotEnoughFee"},215:{message:"NoMessage"},216:{message:"NoReceivePool"},217:{message:"NoPool"},218:{message:"UnknownAnotherToken"},300:{message:"WrongByteLength"},301:{message:"HasMessage"},302:{message:"InvalidPrimarySignature"},303:{message:"InvalidSecondarySignature"},400:{message:"NoGasDataForChain"}},Hn=class extends Zo{constructor(i){super(new bA(["AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAACWFkbWluX2ZlZQAAAAAAAAoAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAlyZWNpcGllbnQAAAAAAAPuAAAAIAAAAAAAAAAGc2VuZGVyAAAAAAAT","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAGAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAAAAAAD2V4dHJhX2dhc192YWx1ZQAAAAAKAAAAAAAAAAptZXNzYWdlX2lkAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAAScmVjaXBpZW50X211eGVkX2lkAAAAAAPoAAAABgAAAAAAAAAPc291cmNlX2NoYWluX2lkAAAAAAQ=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAAC0NoYWluQnJpZGdlAAAAAAQAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAGZG9tYWluAAAAAAAEAAAAAAAAAAlnYXNfdXNhZ2UAAAAAAAAKAAAAAAAAAAxvdGhlcl9icmlkZ2UAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABkNvbmZpZwAAAAAACwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAYAAAAAAAAAHmJyaWRnaW5nX2ZlZV9jb252ZXJzaW9uX2ZhY3RvcgAAAAAACgAAAAAAAAAKZ2FzX29yYWNsZQAAAAAAEwAAAAAAAAANbWF4X2ZlZV9zaGFyZQAAAAAAAAsAAAAAAAAAE21lc3NhZ2VfdHJhbnNtaXR0ZXIAAAAAEwAAAAAAAAAWbWluX2ZpbmFsaXR5X3RocmVzaG9sZAAAAAAABAAAAAAAAAAMbmF0aXZlX3Rva2VuAAAAEwAAAAAAAAAOb3V0Ym91bmRfbm9uY2UAAAAAAAoAAAAAAAAAFnRva2VuX21lc3Nlbmdlcl9taW50ZXIAAAAAABMAAAAAAAAACnVzZGNfdG9rZW4AAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAAAAAAAAAAABkNvbmZpZwAAAAAAAQAAAAAAAAALQ2hhaW5CcmlkZ2UAAAAAAQAAAAQAAAABAAAAAAAAAAZEb21haW4AAAAAAAEAAAAE","AAAAAAAAAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAGYnJpZGdlAAAAAAAGAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACAAAAAAAAAAFGRlc3RpbmF0aW9uX2NoYWluX2lkAAAABAAAAAAAAAAKZ2FzX2Ftb3VudAAAAAAACgAAAAAAAAAQZmVlX3Rva2VuX2Ftb3VudAAAAAoAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAAAAAAAAKZ2FzX29yYWNsZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAACgAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAp1c2RjX3Rva2VuAAAAAAATAAAAAAAAABZ0b2tlbl9tZXNzZW5nZXJfbWludGVyAAAAAAATAAAAAAAAABNtZXNzYWdlX3RyYW5zbWl0dGVyAAAAABMAAAAAAAAACmdhc19vcmFjbGUAAAAAABMAAAAAAAAADG5hdGl2ZV90b2tlbgAAABMAAAAAAAAAFm1pbl9maW5hbGl0eV90aHJlc2hvbGQAAAAAAAQAAAAAAAAADW1heF9mZWVfc2hhcmUAAAAAAAALAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAYAAAAAAAAAHmJyaWRnaW5nX2ZlZV9jb252ZXJzaW9uX2ZhY3RvcgAAAAAACgAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAAAAAAAAKdXNkY190b2tlbgAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAMbmF0aXZlX3Rva2VuAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAANbWF4X2ZlZV9zaGFyZQAAAAAAAAAAAAABAAAD6QAAAAsAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAUAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAKbWVzc2FnZV9pZAAAAAAD7gAAACAAAAAAAAAAB21lc3NhZ2UAAAAADgAAAAAAAAALYXR0ZXN0YXRpb24AAAAADgAAAAAAAAAQZXh0cmFfZ2FzX2Ftb3VudAAAAAoAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAACmdhc19vcmFjbGUAAAAAABMAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAAAAAAAQYnJpZGdlX3dpdGhfaG9vawAAAAcAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAPuAAAAIAAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAAAAAAJaG9va19kYXRhAAAAAAAADgAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAAAAAAAAQZ2V0X2NoYWluX2JyaWRnZQAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAH0AAAAAtDaGFpbkJyaWRnZQAAAAAD","AAAAAAAAAAAAAAARc2V0X21heF9mZWVfc2hhcmUAAAAAAAABAAAAAAAAAAV2YWx1ZQAAAAAAAAsAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAAAAAAAQAAA+kAAAAGAAAAAw==","AAAAAAAAAAAAAAASbmF0aXZlX2ZlZV9iYWxhbmNlAAAAAAAAAAAAAQAAA+kAAAALAAAAAw==","AAAAAAAAAAAAAAATbWVzc2FnZV90cmFuc21pdHRlcgAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAYAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAAAAAAATdXBkYXRlX2NoYWluX2JyaWRnZQAAAAAEAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAACWdhc191c2FnZQAAAAAAAAoAAAAAAAAABmRvbWFpbgAAAAAABAAAAAAAAAAMb3RoZXJfYnJpZGdlAAAD7gAAACAAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAVcmVnaXN0ZXJfY2hhaW5fYnJpZGdlAAAAAAAABAAAAAAAAAAIY2hhaW5faWQAAAAEAAAAAAAAAAlnYXNfdXNhZ2UAAAAAAAAKAAAAAAAAAAZkb21haW4AAAAAAAQAAAAAAAAADG90aGVyX2JyaWRnZQAAA+4AAAAgAAAAAQAAA+kAAAACAAAAAw==","AAAAAAAAAAAAAAAWYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAAAAQAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAABMAAAABAAAACw==","AAAAAAAAAAAAAAAWZ2V0X2RvbWFpbl9ieV9jaGFpbl9pZAAAAAAAAQAAAAAAAAAIY2hhaW5faWQAAAAEAAAAAQAAA+kAAAAEAAAAAw==","AAAAAAAAAAAAAAAWbWluX2ZpbmFsaXR5X3RocmVzaG9sZAAAAAAAAAAAAAEAAAPpAAAABAAAAAM=","AAAAAAAAAAAAAAAWdG9rZW5fbWVzc2VuZ2VyX21pbnRlcgAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAXc2V0X21lc3NhZ2VfdHJhbnNtaXR0ZXIAAAAAAQAAAAAAAAATbWVzc2FnZV90cmFuc21pdHRlcgAAAAATAAAAAQAAA+kAAAACAAAAAw==","AAAAAAAAAAAAAAAZc2V0X2ZlZV9jb252ZXJzaW9uX2ZhY3RvcgAAAAAAAAEAAAAAAAAABXZhbHVlAAAAAAAACgAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAAAAAAAAac2V0X21pbl9maW5hbGl0eV90aHJlc2hvbGQAAAAAAAEAAAAAAAAABXZhbHVlAAAAAAAABAAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAAAAAAAAac2V0X3Rva2VuX21lc3Nlbmdlcl9taW50ZXIAAAAAAAEAAAAAAAAAFnRva2VuX21lc3Nlbmdlcl9taW50ZXIAAAAAABMAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAAAAAAAbZ2V0X2JyaWRnaW5nX2Nvc3RfaW5fdG9rZW5zAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAAAAAAAAQAAA+kAAAAKAAAAAw==","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAACAAAAAw==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),i);this.options=i}options;static async deploy(i){return Zo.deploy(null,i)}fromJSON={admin:this.txFromJSON,bridge:this.txFromJSON,upgrade:this.txFromJSON,set_admin:this.txFromJSON,gas_oracle:this.txFromJSON,initialize:this.txFromJSON,usdc_token:this.txFromJSON,native_token:this.txFromJSON,max_fee_share:this.txFromJSON,receive_tokens:this.txFromJSON,set_gas_oracle:this.txFromJSON,bridge_with_hook:this.txFromJSON,get_chain_bridge:this.txFromJSON,set_max_fee_share:this.txFromJSON,admin_fee_share_bp:this.txFromJSON,native_fee_balance:this.txFromJSON,message_transmitter:this.txFromJSON,set_admin_fee_share:this.txFromJSON,update_chain_bridge:this.txFromJSON,withdraw_gas_tokens:this.txFromJSON,get_transaction_cost:this.txFromJSON,register_chain_bridge:this.txFromJSON,bridging_fee_in_tokens:this.txFromJSON,get_domain_by_chain_id:this.txFromJSON,min_finality_threshold:this.txFromJSON,token_messenger_minter:this.txFromJSON,set_message_transmitter:this.txFromJSON,set_fee_conversion_factor:this.txFromJSON,set_min_finality_threshold:this.txFromJSON,set_token_messenger_minter:this.txFromJSON,get_bridging_cost_in_tokens:this.txFromJSON,bridging_fee_conversion_factor:this.txFromJSON,withdraw_bridging_fee_in_tokens:this.txFromJSON}};import{contract as vI,rpc as Vo}from"@stellar/stellar-sdk";var Xo=Vo.Api,Go=100;async function Po(o,a){try{let s=(await new Vo.Server(o).getFeeStats())[a],d=[Number(s.p90)*2,Number(s.mode)].filter(A=>Number.isFinite(A)&&A>0);return Math.ceil(Math.max(...d,Go))}catch{return Go}}function Yt(o){return Po(o,"sorobanInclusionFee")}function So(o){return Po(o,"inclusionFee")}function pn(o){let{simulation:a,options:i}=o;if(!a)throw new Error("Soroban assembled transaction does not have simulation");if(Xo.isSimulationSuccess(a))return a.result==null?void 0:i.parseResultXdr(a.result.retval);throw new Error(a.error)}function un(o){let{simulation:a}=o;if(!a)throw new Error("Soroban assembled transaction does not have simulation");return Xo.isSimulationError(a)}var _a=class extends Pe{constructor(i,r,s){super();this.nodeRpcUrlsConfig=i;this.params=r;this.api=s}nodeRpcUrlsConfig;params;api;chainType="SRB";async buildRawTransactionSend(i){let r=await Oe(this.chainType,i,this.api);return await this.buildRawTransactionSendFromParams(r,i)}async buildRawTransactionSendFromParams(i,r){let{amount:s,contractAddress:d,fromAccountAddress:A,fromTokenAddress:l,toChainId:u,toAccountAddress:b,toTokenAddress:y,fee:C,gasFeePaymentMethod:f,extraGas:v}=i,R=C;v&&(R=vA(R).plus(v).toFixed());let F=await Yt(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB"));if(i.messenger===4){let B=this.getContract(Hn,d,A),P=r?.destinationToken.chainType==="SOLANA"?await An(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL")):b;if(f==="abr")throw new w("SRB CCTPv2 bridge does not support ABR payment method");let V;switch(f){case"native":V={gas_amount:BigInt(R),fee_token_amount:0n};break;case"stablecoin":V={gas_amount:0n,fee_token_amount:BigInt(R)};break;default:return oe(f,"Unhandled FeePaymentMethod")}return(await B.bridge({sender:A,amount:BigInt(s),recipient:I.from(P),destination_chain_id:+u,...V},{fee:F})).toXDR()}let N=this.getContract(xn,d,A),G;switch(f){case"native":G=await N.swap_and_bridge({sender:A,token:dr.contract(I.from(l)).toString(),amount:BigInt(s),recipient:I.from(b),destination_chain_id:+u,receive_token:I.from(y),nonce:yt(),gas_amount:BigInt(R),fee_token_amount:BigInt(0)},{fee:F});break;case"stablecoin":G=await N.swap_and_bridge({sender:A,token:dr.contract(I.from(l)).toString(),amount:BigInt(s),recipient:I.from(b),destination_chain_id:+u,receive_token:I.from(y),nonce:yt(),gas_amount:BigInt(0),fee_token_amount:BigInt(R)},{fee:F});break;case"abr":throw new w("SRB bridge does not support ABR payment method");default:return oe(f,"Unhandled FeePaymentMethod")}return G.toXDR()}async buildRawTransactionSwap(i){let r=Ke(this.chainType,i);return await this.buildRawTransactionSwapFromParams(r)}async buildRawTransactionSwapFromParams(i){let{amount:r,contractAddress:s,fromAccountAddress:d,fromTokenAddress:A,toAccountAddress:l,toTokenAddress:u,minimumReceiveAmount:b}=i,y=this.getContract(xn,s,d),C=await Yt(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB"));return(await y.swap({sender:d,amount:BigInt(r),token:dr.contract(I.from(A)).toBuffer(),receive_token:I.from(u),recipient:l,receive_amount_min:BigInt(b)},{fee:C})).toXDR()}send(i){throw new K}getContract(i,r,s){let d={publicKey:s,contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new i(d)}};import{ClarigenClient as RA,contractFactory as cr}from"@clarigen/core";import{createNetwork as BA}from"@stacks/network";import{makeRandomPrivKey as ko,makeUnsignedContractCall as Lo,parseContractId as TA,PostConditionMode as Mo,privateKeyToPublic as xo}from"@stacks/transactions";var at={bridge:{functions:{assertCanSwap:{name:"assert-can-swap",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertGasOracle:{name:"assert-gas-oracle",access:"private",args:[{name:"gas-oracle-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertMessenger:{name:"assert-messenger",access:"private",args:[{name:"messenger-ref",type:"trait_reference"},{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},convertBridgingFeeInTokensToNative:{name:"convert-bridging-fee-in-tokens-to-native",access:"private",args:[{name:"ft-ref",type:"trait_reference"},{name:"gas-oracle-ref",type:"trait_reference"},{name:"fee-token-amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyStopAuthority:{name:"only-stop-authority",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},receiveAndSwapFromVusd:{name:"receive-and-swap-from-vusd",access:"private",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"recipient",type:"principal"},{name:"vusd-amount",type:"uint128"},{name:"receive-amount-min",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},sendAndSwapToVusd:{name:"send-and-swap-to-vusd",access:"private",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"user",type:"principal"},{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},sendTokens:{name:"send-tokens",access:"private",args:[{name:"messenger-ref",type:"trait_reference"},{name:"gas-oracle-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"destination-chain-id",type:"uint128"},{name:"receive-token",type:{buffer:{length:32}}},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"},{name:"bridging-fee",type:"uint128"}],outputs:{type:{response:{ok:{tuple:[{name:"bridge-tx-cost",type:"uint128"},{name:"message-tx-cost",type:"uint128"}]},error:"uint128"}}}},addBridgeToken:{name:"add-bridge-token",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},addPool:{name:"add-pool",access:"public",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getTransactionCost:{name:"get-transaction-cost",access:"public",args:[{name:"gas-oracle-ref",type:"trait_reference"},{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},init:{name:"init",access:"public",args:[{name:"this-chain-id_",type:"uint128"},{name:"gas-oracle",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},receiveTokens:{name:"receive-tokens",access:"public",args:[{name:"messenger-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:"principal"},{name:"source-chain-id",type:"uint128"},{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"},{name:"receive-amount-min",type:"uint128"},{name:"extra-gas",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},registerBridge:{name:"register-bridge",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"bridge-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeBridge:{name:"remove-bridge",access:"public",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeBridgeToken:{name:"remove-bridge-token",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeMessenger:{name:"remove-messenger",access:"public",args:[{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setGasUsage:{name:"set-gas-usage",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"gas",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setMessenger:{name:"set-messenger",access:"public",args:[{name:"messenger-id",type:"uint128"},{name:"new-messenger",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOwner:{name:"set-owner",access:"public",args:[{name:"new-owner",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setRebalancer:{name:"set-rebalancer",access:"public",args:[{name:"new-rebalancer",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setStopAuthority:{name:"set-stop-authority",access:"public",args:[{name:"new-authority",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startSwap:{name:"start-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopSwap:{name:"stop-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},swap:{name:"swap",access:"public",args:[{name:"amount",type:"uint128"},{name:"send-pool-ref",type:"trait_reference"},{name:"send-ft-ref",type:"trait_reference"},{name:"receive-pool-ref",type:"trait_reference"},{name:"receive-ft-ref",type:"trait_reference"},{name:"recipient",type:"principal"},{name:"receive-amount-min",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},swapAndBridge:{name:"swap-and-bridge",access:"public",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"messenger-ref",type:"trait_reference"},{name:"gas-oracle-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"destination-chain-id",type:"uint128"},{name:"receive-token",type:{buffer:{length:32}}},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"},{name:"fee-native-amount",type:"uint128"},{name:"fee-token-amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawBridgingFeeInTokens:{name:"withdraw-bridging-fee-in-tokens",access:"public",args:[{name:"ft-ref",type:"trait_reference"},{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawGasTokens:{name:"withdraw-gas-tokens",access:"public",args:[{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getGasOracleAddress:{name:"get-gas-oracle-address",access:"read_only",args:[],outputs:{type:"principal"}},getGasUsage:{name:"get-gas-usage",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getMessenger:{name:"get-messenger",access:"read_only",args:[{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:"principal",error:"uint128"}}}},getOtherBridge:{name:"get-other-bridge",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:{buffer:{length:32}},error:"uint128"}}}},getOwner:{name:"get-owner",access:"read_only",args:[],outputs:{type:"principal"}},getProcessedMessageStatus:{name:"get-processed-message-status",access:"read_only",args:[{name:"message-hash",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}},getRebalancer:{name:"get-rebalancer",access:"read_only",args:[],outputs:{type:"principal"}},getSentMessageStatus:{name:"get-sent-message-status",access:"read_only",args:[{name:"message-hash",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}},getStopAuthority:{name:"get-stop-authority",access:"read_only",args:[],outputs:{type:"principal"}},getThisChainId:{name:"get-this-chain-id",access:"read_only",args:[],outputs:{type:"uint128"}},getTokenInfo:{name:"get-token-info",access:"read_only",args:[{name:"token-principal-hash",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:{tuple:[{name:"bridging-fee-conversion-scaling-factor",type:"uint128"},{name:"from-gas-oracle-scaling-factor",type:"uint128"},{name:"pool",type:"principal"},{name:"token",type:"principal"}]},error:"uint128"}}}},isBridgeTokenSupported:{name:"is-bridge-token-supported",access:"read_only",args:[{name:"chain-id_",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}},isSwapEnabled:{name:"is-swap-enabled",access:"read_only",args:[],outputs:{type:"bool"}}},maps:{gasUsageMap:{name:"gas-usage-map",key:"uint128",value:"uint128"},messengers:{name:"messengers",key:"uint128",value:"principal"},otherBridgeTokens:{name:"other-bridge-tokens",key:{tuple:[{name:"chain-id",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}]},value:"bool"},otherBridges:{name:"other-bridges",key:"uint128",value:{buffer:{length:32}}},processedMessages:{name:"processed-messages",key:{buffer:{length:32}},value:"bool"},sentMessages:{name:"sent-messages",key:{buffer:{length:32}},value:"bool"},tokenInfos:{name:"token-infos",key:{buffer:{length:32}},value:{tuple:[{name:"bridging-fee-conversion-scaling-factor",type:"uint128"},{name:"from-gas-oracle-scaling-factor",type:"uint128"},{name:"pool",type:"principal"},{name:"token",type:"principal"}]}}},variables:{chainPrecision:{name:"chain-precision",type:"uint128",access:"constant"},errAlreadyInitialized:{name:"err-already-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errAlreadyProcessed:{name:"err-already-processed",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errAlreadySent:{name:"err-already-sent",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errBridgeSourceNotRegistered:{name:"err-bridge-source-not-registered",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errDepositAmountTooSmall:{name:"err-deposit-amount-too-small",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errGasUsageNotSet:{name:"err-gas-usage-not-set",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errMessengerNotRegistered:{name:"err-messenger-not-registered",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNoMessage:{name:"err-no-message",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotEnoughFee:{name:"err-not-enough-fee",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errSwapProhibited:{name:"err-swap-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errTokenNotSupported:{name:"err-token-not-supported",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongGasOracle:{name:"err-wrong-gas-oracle",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongMessenger:{name:"err-wrong-messenger",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongTokenForPool:{name:"err-wrong-token-for-pool",type:{response:{ok:"none",error:"uint128"}},access:"constant"},oraclePrecision:{name:"oracle-precision",type:"uint128",access:"constant"},canSwap:{name:"can-swap",type:"bool",access:"variable"},gasOraclePrincipal:{name:"gas-oracle-principal",type:{optional:"principal"},access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},rebalancer:{name:"rebalancer",type:"principal",access:"variable"},stopAuthority:{name:"stop-authority",type:"principal",access:"variable"},thisChainId:{name:"this-chain-id",type:{optional:"uint128"},access:"variable"}},constants:{canSwap:!1,chainPrecision:6n,errAlreadyInitialized:{isOk:!1,value:1004n},errAlreadyProcessed:{isOk:!1,value:1010n},errAlreadySent:{isOk:!1,value:1005n},errBridgeSourceNotRegistered:{isOk:!1,value:1009n},errDepositAmountTooSmall:{isOk:!1,value:1001n},errGasUsageNotSet:{isOk:!1,value:1008n},errMessengerNotRegistered:{isOk:!1,value:1014n},errNoMessage:{isOk:!1,value:1011n},errNotEnoughFee:{isOk:!1,value:1007n},errNotInitialized:{isOk:!1,value:1006n},errSwapProhibited:{isOk:!1,value:1012n},errTokenNotSupported:{isOk:!1,value:1002n},errUnauthorized:{isOk:!1,value:1000n},errWrongGasOracle:{isOk:!1,value:1013n},errWrongMessenger:{isOk:!1,value:1015n},errWrongTokenForPool:{isOk:!1,value:1003n},gasOraclePrincipal:null,oraclePrecision:18n,owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",rebalancer:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",stopAuthority:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",thisChainId:null},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"bridge"},ftToken:{functions:{getTokenUri:{name:"get-token-uri",access:"public",args:[],outputs:{type:{response:{ok:{optional:{"string-utf8":{length:19}}},error:"none"}}}},mint:{name:"mint",access:"public",args:[{name:"amount",type:"uint128"},{name:"recipient",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},transfer:{name:"transfer",access:"public",args:[{name:"amount",type:"uint128"},{name:"sender",type:"principal"},{name:"recipient",type:"principal"},{name:"memo",type:{optional:{buffer:{length:34}}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getBalance:{name:"get-balance",access:"read_only",args:[{name:"owner",type:"principal"}],outputs:{type:{response:{ok:"uint128",error:"none"}}}},getDecimals:{name:"get-decimals",access:"read_only",args:[],outputs:{type:{response:{ok:"uint128",error:"none"}}}},getName:{name:"get-name",access:"read_only",args:[],outputs:{type:{response:{ok:{"string-ascii":{length:13}},error:"none"}}}},getSymbol:{name:"get-symbol",access:"read_only",args:[],outputs:{type:{response:{ok:{"string-ascii":{length:7}},error:"none"}}}},getTotalSupply:{name:"get-total-supply",access:"read_only",args:[],outputs:{type:{response:{ok:"uint128",error:"none"}}}}},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[{name:"example-token"}],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"ft-token"},gasOracle:{functions:{setChainData:{name:"set-chain-data",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"new-price",type:"uint128"},{name:"new-gas-price",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setGasPrice:{name:"set-gas-price",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"new-gas-price",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setPrice:{name:"set-price",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"new-price",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},crossRate:{name:"cross-rate",access:"read_only",args:[{name:"other-chain-id",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getChainData:{name:"get-chain-data",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:{tuple:[{name:"gas-price",type:"uint128"},{name:"price",type:"uint128"}]},error:"uint128"}}}},getGasPrice:{name:"get-gas-price",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getPrice:{name:"get-price",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getTransactionGasCostInNativeToken:{name:"get-transaction-gas-cost-in-native-token",access:"read_only",args:[{name:"other-chain-id",type:"uint128"},{name:"gas-amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getTransactionGasCostInUsd:{name:"get-transaction-gas-cost-in-usd",access:"read_only",args:[{name:"other-chain-id",type:"uint128"},{name:"gas-amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}}},maps:{chainData:{name:"chain-data",key:"uint128",value:{tuple:[{name:"gas-price",type:"uint128"},{name:"price",type:"uint128"}]}}},variables:{errNotFound:{name:"err-not-found",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},oracleScalingFactor:{name:"oracle-scaling-factor",type:"uint128",access:"constant"},contractOwner:{name:"contract-owner",type:"principal",access:"variable"},fromOracleToChainScalingFactor:{name:"from-oracle-to-chain-scaling-factor",type:"uint128",access:"variable"},thisChainId:{name:"this-chain-id",type:"uint128",access:"variable"}},constants:{contractOwner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",errNotFound:{isOk:!1,value:4001n},errUnauthorized:{isOk:!1,value:4000n},fromOracleToChainScalingFactor:1000000000000n,oracleScalingFactor:1000000000000000000n,thisChainId:16n},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"gas-oracle"},gasOracleTrait:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"gas-oracle-trait"},messenger:{functions:{assertGasOracle:{name:"assert-gas-oracle",access:"private",args:[{name:"gas-oracle-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},addSecondaryValidator:{name:"add-secondary-validator",access:"public",args:[{name:"val",type:{buffer:{length:33}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getTransactionCost:{name:"get-transaction-cost",access:"public",args:[{name:"gas-oracle-ref",type:"trait_reference"},{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},init:{name:"init",access:"public",args:[{name:"this-chain-id_",type:"uint128"},{name:"gas-oracle",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},receiveMessage:{name:"receive-message",access:"public",args:[{name:"message",type:{buffer:{length:32}}},{name:"signature1",type:{buffer:{length:65}}},{name:"signature2",type:{buffer:{length:65}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeSecondaryValidator:{name:"remove-secondary-validator",access:"public",args:[{name:"val",type:{buffer:{length:33}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},sendMessage:{name:"send-message",access:"public",args:[{name:"gas-oracle-ref",type:"trait_reference"},{name:"message",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},setGasUsage:{name:"set-gas-usage",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"gas",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOtherChainIds:{name:"set-other-chain-ids",access:"public",args:[{name:"value",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setPrimaryValidator:{name:"set-primary-validator",access:"public",args:[{name:"val",type:{buffer:{length:33}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawGasTokens:{name:"withdraw-gas-tokens",access:"public",args:[{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getGasOracle:{name:"get-gas-oracle",access:"read_only",args:[],outputs:{type:{response:{ok:"principal",error:"uint128"}}}},getGasUsage:{name:"get-gas-usage",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getOtherChainIds:{name:"get-other-chain-ids",access:"read_only",args:[],outputs:{type:{response:{ok:{buffer:{length:32}},error:"none"}}}},getSentMessageBlock:{name:"get-sent-message-block",access:"read_only",args:[{name:"message",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getThisChainId:{name:"get-this-chain-id",access:"read_only",args:[],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},isMessageReceived:{name:"is-message-received",access:"read_only",args:[{name:"message",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}}},maps:{gasUsageMap:{name:"gas-usage-map",key:"uint128",value:"uint128"},receivedMessages:{name:"received-messages",key:{buffer:{length:32}},value:"bool"},secondaryValidators:{name:"secondary-validators",key:{buffer:{length:33}},value:"bool"},sentMessagesBlock:{name:"sent-messages-block",key:{buffer:{length:32}},value:"uint128"}},variables:{errAlreadyInitialized:{name:"err-already-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errAlreadySent:{name:"err-already-sent",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errGasUsageNotSet:{name:"err-gas-usage-not-set",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidChainId:{name:"err-invalid-chain-id",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidDestination:{name:"err-invalid-destination",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidPrimary:{name:"err-invalid-primary",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidSecondary:{name:"err-invalid-secondary",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errMessageNotFound:{name:"err-message-not-found",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongBufferLength:{name:"err-wrong-buffer-length",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongGasOracle:{name:"err-wrong-gas-oracle",type:{response:{ok:"none",error:"uint128"}},access:"constant"},gasOraclePrincipal:{name:"gas-oracle-principal",type:{optional:"principal"},access:"variable"},otherChainIds:{name:"other-chain-ids",type:{buffer:{length:32}},access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},primaryValidator:{name:"primary-validator",type:{buffer:{length:33}},access:"variable"},thisChainId:{name:"this-chain-id",type:{optional:"uint128"},access:"variable"}},constants:{errAlreadyInitialized:{isOk:!1,value:3008n},errAlreadySent:{isOk:!1,value:3003n},errGasUsageNotSet:{isOk:!1,value:3010n},errInvalidChainId:{isOk:!1,value:3002n},errInvalidDestination:{isOk:!1,value:3004n},errInvalidPrimary:{isOk:!1,value:3005n},errInvalidSecondary:{isOk:!1,value:3006n},errMessageNotFound:{isOk:!1,value:3001n},errNotInitialized:{isOk:!1,value:3011n},errUnauthorized:{isOk:!1,value:3000n},errWrongBufferLength:{isOk:!1,value:3009n},errWrongGasOracle:{isOk:!1,value:3007n},gasOraclePrincipal:null,otherChainIds:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",primaryValidator:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),thisChainId:null},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"messenger"},messengerTrait:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"messenger-trait"},pool:{functions:{addRewards:{name:"add-rewards",access:"private",args:[{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"none"}}}},assertBalanceReatio:{name:"assert-balance-reatio",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertCanDeposit:{name:"assert-can-deposit",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertCanSwap:{name:"assert-can-swap",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertCanWithdraw:{name:"assert-can-withdraw",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertToken:{name:"assert-token",access:"private",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},depositLp:{name:"deposit-lp",access:"private",args:[{name:"ft-ref",type:"trait_reference"},{name:"to",type:"principal"},{name:"lp-amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},leCube_q:{name:"le-cube?",access:"private",args:[{name:"x",type:"uint128"},{name:"n",type:"uint128"}],outputs:{type:"bool"}},newtonStep:{name:"newton-step",access:"private",args:[{name:"n",type:"uint128"},{name:"x",type:"uint128"}],outputs:{type:"uint128"}},onlyBridge:{name:"only-bridge",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyStopAuthority:{name:"only-stop-authority",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},refine:{name:"refine",access:"private",args:[{name:"n",type:"uint128"},{name:"x",type:"uint128"}],outputs:{type:"uint128"}},withdrawLp:{name:"withdraw-lp",access:"private",args:[{name:"ft-ref",type:"trait_reference"},{name:"from",type:"principal"},{name:"lp-amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},adjustTotalLpAmount:{name:"adjust-total-lp-amount",access:"public",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},claimAdminFee:{name:"claim-admin-fee",access:"public",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},claimRewards:{name:"claim-rewards",access:"public",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},deposit:{name:"deposit",access:"public",args:[{name:"amount",type:"uint128"},{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},init:{name:"init",access:"public",args:[{name:"token",type:"trait_reference"},{name:"bridge-address",type:"principal"},{name:"fee-share-bp-arg",type:"uint128"},{name:"balance-ratio-min-bp-arg",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},serBalanceRetioMinBp:{name:"ser-balance-retio-min-bp",access:"public",args:[{name:"new-balance-ratio-min-bp",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setAdminFeeSahreBp:{name:"set-admin-fee-sahre-bp",access:"public",args:[{name:"new-admin-fee-share-bp",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setBridge:{name:"set-bridge",access:"public",args:[{name:"new-bridge",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setFeeShare:{name:"set-fee-share",access:"public",args:[{name:"fee-share-bp_",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOwner:{name:"set-owner",access:"public",args:[{name:"new-owner",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setStopAuthority:{name:"set-stop-authority",access:"public",args:[{name:"new-stop-authority",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startDeposit:{name:"start-deposit",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startSwap:{name:"start-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startWithdraw:{name:"start-withdraw",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopDeposit:{name:"stop-deposit",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopSwap:{name:"stop-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopWithdraw:{name:"stop-withdraw",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},swapFromVusd:{name:"swap-from-vusd",access:"public",args:[{name:"ft-ref",type:"trait_reference"},{name:"user",type:"principal"},{name:"amount",type:"uint128"},{name:"receive-amount-min",type:"uint128"},{name:"zero-fee",type:"bool"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},swapToVusd:{name:"swap-to-vusd",access:"public",args:[{name:"ft-ref",type:"trait_reference"},{name:"user",type:"principal"},{name:"amount",type:"uint128"},{name:"zero-fee",type:"bool"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},withdraw:{name:"withdraw",access:"public",args:[{name:"amount-lp",type:"uint128"},{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},calcD:{name:"calc-d",access:"read_only",args:[{name:"x",type:"uint128"},{name:"y",type:"uint128"}],outputs:{type:"uint128"}},calcY:{name:"calc-y",access:"read_only",args:[{name:"x",type:"uint128"},{name:"d_",type:"uint128"}],outputs:{type:"uint128"}},cbrt:{name:"cbrt",access:"read_only",args:[{name:"n",type:"uint128"}],outputs:{type:"uint128"}},fromSystemPrecision:{name:"from-system-precision",access:"read_only",args:[{name:"amount",type:"uint128"}],outputs:{type:"uint128"}},getAccRewardPerShareP:{name:"get-acc-reward-per-share-p",access:"read_only",args:[],outputs:{type:"uint128"}},getAdminFeeAmount:{name:"get-admin-fee-amount",access:"read_only",args:[],outputs:{type:"uint128"}},getAdminFeeShareBp:{name:"get-admin-fee-share-bp",access:"read_only",args:[],outputs:{type:"uint128"}},getBalanceRatioMinBp:{name:"get-balance-ratio-min-bp",access:"read_only",args:[],outputs:{type:"uint128"}},getBridge:{name:"get-bridge",access:"read_only",args:[],outputs:{type:{optional:"principal"}}},getCanDeposit:{name:"get-can-deposit",access:"read_only",args:[],outputs:{type:"bool"}},getCanSwap:{name:"get-can-swap",access:"read_only",args:[],outputs:{type:"bool"}},getCanWithdraw:{name:"get-can-withdraw",access:"read_only",args:[],outputs:{type:"bool"}},getD:{name:"get-d",access:"read_only",args:[],outputs:{type:"uint128"}},getFeeShareBp:{name:"get-fee-share-bp",access:"read_only",args:[],outputs:{type:"uint128"}},getLpBalance:{name:"get-lp-balance",access:"read_only",args:[{name:"user",type:"principal"}],outputs:{type:"uint128"}},getLpTotalSupply:{name:"get-lp-total-supply",access:"read_only",args:[],outputs:{type:"uint128"}},getOwner:{name:"get-owner",access:"read_only",args:[],outputs:{type:"principal"}},getReserves:{name:"get-reserves",access:"read_only",args:[],outputs:{type:"uint128"}},getStopAuthority:{name:"get-stop-authority",access:"read_only",args:[],outputs:{type:"principal"}},getTokenAddress:{name:"get-token-address",access:"read_only",args:[],outputs:{type:{response:{ok:"principal",error:"uint128"}}}},getTokenBalance:{name:"get-token-balance",access:"read_only",args:[],outputs:{type:"uint128"}},getUserRewardDebt:{name:"get-user-reward-debt",access:"read_only",args:[{name:"user",type:"principal"}],outputs:{type:"uint128"}},getVusdBalance:{name:"get-vusd-balance",access:"read_only",args:[],outputs:{type:"uint128"}},pendingRewards:{name:"pending-rewards",access:"read_only",args:[{name:"user",type:"principal"}],outputs:{type:{response:{ok:"uint128",error:"none"}}}},toSystemPrecision:{name:"to-system-precision",access:"read_only",args:[{name:"amount",type:"uint128"}],outputs:{type:"uint128"}}},maps:{lpBalances:{name:"lp-balances",key:"principal",value:"uint128"},userRewardDebt:{name:"user-reward-debt",key:"principal",value:"uint128"}},variables:{BP:{name:"BP",type:"uint128",access:"constant"},P:{name:"P",type:"uint128",access:"constant"},a:{name:"a",type:"uint128",access:"constant"},errAlreadyInitialized:{name:"err-already-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errDepositAmountTooSmall:{name:"err-deposit-amount-too-small",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errDepositProhibited:{name:"err-deposit-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errLowTokenBalance:{name:"err-low-token-balance",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errLowVusdBalance:{name:"err-low-vusd-balance",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotEnoughLp:{name:"err-not-enough-lp",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotEnoughReserves:{name:"err-not-enough-reserves",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errPoolBalanceTooBig:{name:"err-pool-balance-too-big",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errSlippage:{name:"err-slippage",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errSwapProhibited:{name:"err-swap-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errTooLarge:{name:"err-too-large",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWithdrawProhibited:{name:"err-withdraw-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongToken:{name:"err-wrong-token",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errZeroChanges:{name:"err-zero-changes",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errZeroDChanges:{name:"err-zero-d-changes",type:{response:{ok:"none",error:"uint128"}},access:"constant"},maxTokenBalance:{name:"max-token-balance",type:"uint128",access:"constant"},systemPrecision:{name:"system-precision",type:"uint128",access:"constant"},accRewardPerShareP:{name:"acc-reward-per-share-p",type:"uint128",access:"variable"},adminFeeAmount:{name:"admin-fee-amount",type:"uint128",access:"variable"},adminFeeShareBp:{name:"admin-fee-share-bp",type:"uint128",access:"variable"},balanceRatioMinBp:{name:"balance-ratio-min-bp",type:"uint128",access:"variable"},bridge:{name:"bridge",type:{optional:"principal"},access:"variable"},canDeposit:{name:"can-deposit",type:"bool",access:"variable"},canSwap:{name:"can-swap",type:"bool",access:"variable"},canWithdraw:{name:"can-withdraw",type:"bool",access:"variable"},d:{name:"d",type:"uint128",access:"variable"},feeShareBp:{name:"fee-share-bp",type:"uint128",access:"variable"},lpTotalSupply:{name:"lp-total-supply",type:"uint128",access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},reserves:{name:"reserves",type:"uint128",access:"variable"},stopAuthority:{name:"stop-authority",type:"principal",access:"variable"},tokenAmountIncrease:{name:"token-amount-increase",type:"uint128",access:"variable"},tokenAmountReduce:{name:"token-amount-reduce",type:"uint128",access:"variable"},tokenBalance:{name:"token-balance",type:"uint128",access:"variable"},tokenPrincipal:{name:"token-principal",type:{optional:"principal"},access:"variable"},vusdBalance:{name:"vusd-balance",type:"uint128",access:"variable"}},constants:{BP:10000n,P:48n,a:20n,accRewardPerShareP:0n,adminFeeAmount:0n,adminFeeShareBp:0n,balanceRatioMinBp:0n,bridge:null,canDeposit:!0,canSwap:!0,canWithdraw:!0,d:0n,errAlreadyInitialized:{isOk:!1,value:2007n},errDepositAmountTooSmall:{isOk:!1,value:2001n},errDepositProhibited:{isOk:!1,value:2013n},errLowTokenBalance:{isOk:!1,value:2012n},errLowVusdBalance:{isOk:!1,value:2011n},errNotEnoughLp:{isOk:!1,value:2010n},errNotEnoughReserves:{isOk:!1,value:2005n},errNotInitialized:{isOk:!1,value:2006n},errPoolBalanceTooBig:{isOk:!1,value:2002n},errSlippage:{isOk:!1,value:2009n},errSwapProhibited:{isOk:!1,value:2015n},errTooLarge:{isOk:!1,value:2016n},errUnauthorized:{isOk:!1,value:2000n},errWithdrawProhibited:{isOk:!1,value:2014n},errWrongToken:{isOk:!1,value:2008n},errZeroChanges:{isOk:!1,value:2003n},errZeroDChanges:{isOk:!1,value:2004n},feeShareBp:0n,lpTotalSupply:0n,maxTokenBalance:1000000000000n,owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",reserves:0n,stopAuthority:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",systemPrecision:3n,tokenAmountIncrease:0n,tokenAmountReduce:0n,tokenBalance:0n,tokenPrincipal:null,vusdBalance:0n},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"pool"},poolTrait:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"pool-trait"},sip010TraitFtStandard:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch21",clarity_version:"Clarity1",contractName:"sip-010-trait-ft-standard"},utils:{functions:{assertNotEmptyBuff32:{name:"assert-not-empty-buff-32",access:"read_only",args:[{name:"b",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},bufferByte:{name:"buffer-byte",access:"read_only",args:[{name:"b",type:{buffer:{length:32}}},{name:"i",type:"uint128"}],outputs:{type:{response:{ok:{buffer:{length:1}},error:"uint128"}}}},bufferByteUint:{name:"buffer-byte-uint",access:"read_only",args:[{name:"b",type:{buffer:{length:32}}},{name:"i",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},hashMessage:{name:"hash-message",access:"read_only",args:[{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"source-chain-id",type:"uint128"},{name:"destination-chain-id",type:"uint128"},{name:"receive-token",type:{buffer:{length:32}}},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:{buffer:{length:32}},error:"uint128"}}}},hashWithSenderAddress:{name:"hash-with-sender-address",access:"read_only",args:[{name:"message",type:{buffer:{length:32}}},{name:"sender",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:{buffer:{length:32}},error:"uint128"}}}},principalHash:{name:"principal-hash",access:"read_only",args:[{name:"value",type:"principal"}],outputs:{type:{buffer:{length:32}}}},principalToBuff32:{name:"principal-to-buff32",access:"read_only",args:[{name:"value",type:"principal"}],outputs:{type:{buffer:{length:32}}}},stringToBuff:{name:"string-to-buff",access:"read_only",args:[{name:"str",type:{"string-ascii":{length:40}}}],outputs:{type:{buffer:{length:45}}}},uintToBuff1:{name:"uint-to-buff-1",access:"read_only",args:[{name:"value",type:"uint128"}],outputs:{type:{buffer:{length:17}}}},uintToBuff32:{name:"uint-to-buff-32",access:"read_only",args:[{name:"value",type:"uint128"}],outputs:{type:{buffer:{length:33}}}}},maps:{},variables:{errEmptyBuffer:{name:"err-empty-buffer",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongBufferLength:{name:"err-wrong-buffer-length",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongMsgLength:{name:"err-wrong-msg-length",type:{response:{ok:"none",error:"uint128"}},access:"constant"},thisChainId:{name:"this-chain-id",type:"uint128",access:"constant"},zeroBytes12:{name:"zero-bytes-12",type:{buffer:{length:12}},access:"constant"},zeroBytes16:{name:"zero-bytes-16",type:{buffer:{length:16}},access:"constant"},zeroBytes32:{name:"zero-bytes-32",type:{buffer:{length:32}},access:"constant"}},constants:{errEmptyBuffer:{isOk:!1,value:5002n},errWrongBufferLength:{isOk:!1,value:5000n},errWrongMsgLength:{isOk:!1,value:5001n},thisChainId:16n,zeroBytes12:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0]),zeroBytes16:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),zeroBytes32:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"utils"},xReserveBridge:{functions:{assertBurn:{name:"assert-burn",access:"private",args:[{name:"burn-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertToken:{name:"assert-token",access:"private",args:[{name:"token-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},bridge:{name:"bridge",access:"public",args:[{name:"token-ref",type:"trait_reference"},{name:"burn-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"destination-chain-id",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeChainDomain:{name:"remove-chain-domain",access:"public",args:[{name:"chain-id-in",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setAdminFee:{name:"set-admin-fee",access:"public",args:[{name:"new-fee-bp",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setBurnPrincipal:{name:"set-burn-principal",access:"public",args:[{name:"new-burn-principal",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setChainDomain:{name:"set-chain-domain",access:"public",args:[{name:"new-chain-id",type:"uint128"},{name:"domain",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOwner:{name:"set-owner",access:"public",args:[{name:"new-owner",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setTokenPrincipal:{name:"set-token-principal",access:"public",args:[{name:"new-token-principal",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawFees:{name:"withdraw-fees",access:"public",args:[{name:"token-ref",type:"trait_reference"},{name:"recipient",type:"principal"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}}},maps:{chainIdToDomain:{name:"chain-id-to-domain",key:"uint128",value:"uint128"}},variables:{BP:{name:"BP",type:"uint128",access:"constant"},errInsufficientAmount:{name:"err-insufficient-amount",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidAmount:{name:"err-invalid-amount",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotFound:{name:"err-not-found",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongBurn:{name:"err-wrong-burn",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongToken:{name:"err-wrong-token",type:{response:{ok:"none",error:"uint128"}},access:"constant"},adminFeeBp:{name:"admin-fee-bp",type:"uint128",access:"variable"},burnPrincipal:{name:"burn-principal",type:{optional:"principal"},access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},tokenPrincipal:{name:"token-principal",type:{optional:"principal"},access:"variable"}},constants:{BP:10000n,adminFeeBp:0n,burnPrincipal:null,errInsufficientAmount:{isOk:!1,value:1001n},errInvalidAmount:{isOk:!1,value:1002n},errNotFound:{isOk:!1,value:1003n},errNotInitialized:{isOk:!1,value:1004n},errUnauthorized:{isOk:!1,value:1000n},errWrongBurn:{isOk:!1,value:1006n},errWrongToken:{isOk:!1,value:1005n},owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",tokenPrincipal:null},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"x-reserve-bridge"}};function Wt(o){if(!o.originTokenAddress)throw new w("STX token must contain 'originTokenAddress'");let[a,i]=o.originTokenAddress.split("::");if(!i)throw new w("STX token must contain 'originTokenAddress' ends with '::<tokenName>'");return i}import{parseContractId as fA}from"@stacks/transactions";function It(o,a,i,r,s){let[d,A]=fA(r);if(!d||!A)throw new Error(`Unable to parse stx token ${r}`);return{type:"ft-postcondition",address:i,condition:a,asset:`${d}.${A}::${s}`,amount:o}}function Ar(o,a,i){return{type:"stx-postcondition",address:i,condition:a,amount:o}}var $a=class extends Pe{constructor(i,r,s){super();this.nodeRpcUrl=i;this.params=r;this.api=s;let d=BA({network:this.params.stxIsTestnet?"testnet":"mainnet",client:{baseUrl:this.nodeRpcUrl},apiKey:this.params.stxHeroApiKey});this.client=new RA(d,this.params.stxHeroApiKey)}nodeRpcUrl;params;api;chainType="STX";client;send(i){throw new K}async buildRawTransactionSend(i){let r=await Oe(this.chainType,i,this.api),{contractAddress:s,messenger:d,toChainId:A,toAccountAddress:l,toTokenAddress:u}=r,b=BigInt(r.amount),y=Wt(i.sourceToken),C=It(b,"lte",i.fromAccountAddress,i.sourceToken.tokenAddress,y),f=Ar(0,"gte",s),v=[C,f];if(d===6){let ie=It(b,"lte",s,i.sourceToken.tokenAddress,y);v.push(ie)}let R=BigInt(r.fee);r.extraGas&&(R=R+BigInt(r.extraGas));let F,N;switch(r.gasFeePaymentMethod){case"native":{F=0n,N=R;let ie=Ar(R,"lte",i.fromAccountAddress);v.push(ie);break}case"stablecoin":{F=R,N=0n;break}case"abr":throw new w("STX bridge does not support ABR payment method");default:return oe(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}let[G]=TA(s),B=d===6?cr(at.xReserveBridge,s).bridge({tokenRef:i.sourceToken.tokenAddress,burnRef:i.sourceToken.xReserve?.protocolAddress??i.sourceToken.tokenAddress,amount:b,recipient:Uint8Array.from(l),destinationChainId:A}):cr(at.bridge,s).swapAndBridge({ftRef:i.sourceToken.tokenAddress,poolRef:i.sourceToken.poolAddress,messengerRef:`${G}.messenger`,gasOracleRef:`${G}.gas-oracle`,amount:b,recipient:Uint8Array.from(l),destinationChainId:A,receiveToken:Uint8Array.from(u),nonce:Uint8Array.from(bt()),messengerId:d,feeNativeAmount:N,feeTokenAmount:F}),{contractAddress:P,contractName:V,functionName:S,functionArgs:M}=B,x=ko(),ae=xo(x),se={contractAddress:P,contractName:V,functionName:S,functionArgs:M,publicKey:ae,validateWithAbi:!0,network:this.client.network,postConditions:v,postConditionMode:Mo.Deny};return(await Lo(se)).serialize()}async buildRawTransactionSwap(i){let r=Ke(this.chainType,i),s=BigInt(r.amount),d=BigInt(r.minimumReceiveAmount),A=i.sourceToken.bridgeAddress,l=cr(at.bridge,A),{contractAddress:u,contractName:b,functionName:y,functionArgs:C}=l.swap({amount:s,sendPoolRef:i.sourceToken.poolAddress,sendFtRef:i.sourceToken.tokenAddress,receivePoolRef:i.destinationToken.poolAddress,receiveFtRef:i.destinationToken.tokenAddress,recipient:i.toAccountAddress,receiveAmountMin:d}),f=ko(),v=xo(f),R=It(s,"lte",i.fromAccountAddress,i.sourceToken.tokenAddress,Wt(i.sourceToken)),F=It(d,"gte",i.destinationToken.poolAddress,i.destinationToken.tokenAddress,Wt(i.destinationToken)),N={contractAddress:u,contractName:b,functionName:y,functionArgs:C,publicKey:v,validateWithAbi:!0,network:this.client.network,postConditions:[R,F],postConditionMode:Mo.Deny};return(await Lo(N)).serialize()}};import{SuiJsonRpcClient as kA}from"@mysten/sui/jsonRpc";import{coinWithBalance as Be,Transaction as fr}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as es}from"@mysten/sui/utils";import{Big as Rr}from"big.js";var qa={},gr=null,pr=null,ei={},lr={};function Ho(o,a){qa[o]=a}function ur(o,a){if(!qa[o]){let i=Object.keys(qa).join(", ")||"(none registered)";throw new Error(`Environment '${o}' not found. Available: ${i}`)}gr=qa[o],pr=o,ei=a??{}}function mn(o,a,i){ei[o]=a,lr[o]=i??a}function mr(){if(!gr)throw new Error("No active environment. Call setActiveEnv() or import the envs module first.");return gr}function YA(o){return o?"supplied environment":`active environment '${pr}'`}function WA(o){return o??mr()}function Ee(o,a){if(a){let s=a.packages[o]||a.dependencies[o];if(!s)throw new Error(`Package '${o}' not found in supplied environment`);return s.publishedAt}if(ei[o])return ei[o];let i=mr(),r=i.packages[o]||i.dependencies[o];if(!r)throw new Error(`Package '${o}' not found in active environment '${pr}'`);return r.publishedAt}function et(o,a,i){if(!i&&lr[o])return lr[o];let r=WA(i),s=r.packages[o]||r.dependencies[o];if(!s)throw new Error(`Package '${o}' not found in ${YA(i)}`);let d=s.typeOrigins[a];if(!d)throw new Error(`Type origin for '${a}' not found in package '${o}'. Available: ${Object.keys(s.typeOrigins).join(", ")||"(none)"}`);return d}function wt(o,a){mn("bridge",o,a)}var Jo={packages:{"wormhole-messenger":{originalId:"0x6ec1db2511d2283fc945d62f6c8e5305ee2538f2168fe91477f68c574d28be1",publishedAt:"0x261feaea07ac7a746068a0c81fbb82d51c0ece2d61058c24c7b572a1869afe37",typeOrigins:{"events::MessageReceivedEvent":"0x6ec1db2511d2283fc945d62f6c8e5305ee2538f2168fe91477f68c574d28be1","events::MessageSentEvent":"0x6ec1db2511d2283fc945d62f6c8e5305ee2538f2168fe91477f68c574d28be1","wormhole_messenger::AdminCap":"0x6ec1db2511d2283fc945d62f6c8e5305ee2538f2168fe91477f68c574d28be1","wormhole_messenger::WormholeMessenger":"0x6ec1db2511d2283fc945d62f6c8e5305ee2538f2168fe91477f68c574d28be1"}},"gas-oracle":{originalId:"0x34ae5595909bdfcd61191f6e5aabf0024250194f738b82df186fdd4fb18aa7ec",publishedAt:"0x2b3067e971857503bcb4c16d8a448c0541495c0ae9d7129e52659ed6724eb0ea",typeOrigins:{"gas_oracle::AdminCap":"0x34ae5595909bdfcd61191f6e5aabf0024250194f738b82df186fdd4fb18aa7ec","gas_oracle::ChainData":"0x34ae5595909bdfcd61191f6e5aabf0024250194f738b82df186fdd4fb18aa7ec","gas_oracle::GasOracle":"0x34ae5595909bdfcd61191f6e5aabf0024250194f738b82df186fdd4fb18aa7ec"}},utils:{originalId:"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4",publishedAt:"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4",typeOrigins:{"bytes32::Bytes32":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4","fee_collector::FeeCollector":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4","message::Message":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4","messenger_protocol::MessengerProtocol":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4","set::Empty":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4","set::Set":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4","version::CurrentVersion":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4"}},messenger:{originalId:"0x73d4d15293c2482646cdfc28c58da0f9eef64c577e9c0d2bbf614c1623346b49",publishedAt:"0x2c7d3497ef1ad32b62b30fb9456ba602c4dc756c07643096a6b4a1f04f72b549",typeOrigins:{"events::MessageReceivedEvent":"0x73d4d15293c2482646cdfc28c58da0f9eef64c577e9c0d2bbf614c1623346b49","events::MessageSentEvent":"0x73d4d15293c2482646cdfc28c58da0f9eef64c577e9c0d2bbf614c1623346b49","messenger::AdminCap":"0x73d4d15293c2482646cdfc28c58da0f9eef64c577e9c0d2bbf614c1623346b49","messenger::Messenger":"0x73d4d15293c2482646cdfc28c58da0f9eef64c577e9c0d2bbf614c1623346b49"}},bridge:{originalId:"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3",publishedAt:"0x55b0e9a5f0deaa21cf0c52eefedff362be1859f10a74415c88801bf8eb5a0597",typeOrigins:{"another_bridge::AnotherBridge":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","bridge::AdminCap":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","bridge::Bridge":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","bridge::FeeCollectorCap":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","bridge::StopSwapCap":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::DepositEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::ReceiveFeeEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::RewardsClaimedEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::SwappedEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::SwappedFromVUsdEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::SwappedToVUsdEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::TokensReceivedEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::TokensSentEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::WithdrawEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","pool::AdminCap":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","pool::Pool":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","pool::StopCap":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","pool_rewards::PoolRewards":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","pool_state::PoolState":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","user_deposit::UserDeposit":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3"}},"cctp-bridge":{originalId:"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5",publishedAt:"0x750cc42da7042399613378a509fbed8563471ca48d961b2edf832bfd1342a1e0",typeOrigins:{"cctp_bridge::AdminCap":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","cctp_bridge::CctpBridge":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","cctp_bridge::FeeCollectorCap":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","events::ReceiveFeeEvent":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","events::RecipientReplaced":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","events::TokensReceivedEvent":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","events::TokensSentEvent":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","message_transmitter_authenticator::MessageTransmitterAuthenticator":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5"}}},dependencies:{std:{originalId:"0x1",publishedAt:"0x1",typeOrigins:{"ascii::Char":"0x1","ascii::String":"0x1","bit_vector::BitVector":"0x1","fixed_point32::FixedPoint32":"0x1","internal::Permit":"0x1","option::Option":"0x1","string::String":"0x1","type_name::TypeName":"0x1","uq32_32::UQ32_32":"0x1","uq64_64::UQ64_64":"0x1"}},sui:{originalId:"0x2",publishedAt:"0x2",typeOrigins:{"accumulator::AccumulatorRoot":"0x2","accumulator::Key":"0x2","accumulator::U128":"0x2","accumulator_metadata::AccumulatorObjectCountKey":"0x2","accumulator_metadata::Metadata":"0x2","accumulator_metadata::MetadataKey":"0x2","accumulator_metadata::Owner":"0x2","accumulator_metadata::OwnerKey":"0x2","accumulator_settlement::EventStreamHead":"0x2","address_alias::AddressAliasState":"0x2","address_alias::AddressAliases":"0x2","address_alias::AliasKey":"0x2","authenticator_state::ActiveJwk":"0x2","authenticator_state::AuthenticatorState":"0x2","authenticator_state::AuthenticatorStateInner":"0x2","authenticator_state::JWK":"0x2","authenticator_state::JwkId":"0x2","bag::Bag":"0x2","balance::Balance":"0x2","balance::Supply":"0x2","bcs::BCS":"0x2","bls12381::G1":"0x2","bls12381::G2":"0x2","bls12381::GT":"0x2","bls12381::Scalar":"0x2","bls12381::UncompressedG1":"0x2","borrow::Borrow":"0x2","borrow::Referent":"0x2","clock::Clock":"0x2","coin::Coin":"0x2","coin::CoinMetadata":"0x2","coin::CurrencyCreated":"0x2","coin::DenyCap":"0x2","coin::DenyCapV2":"0x2","coin::RegulatedCoinMetadata":"0x2","coin::TreasuryCap":"0x2","coin_registry::Borrow":"0x2","coin_registry::CoinRegistry":"0x2","coin_registry::Currency":"0x2","coin_registry::CurrencyInitializer":"0x2","coin_registry::CurrencyKey":"0x2","coin_registry::ExtraField":"0x2","coin_registry::LegacyMetadataKey":"0x2","coin_registry::MetadataCap":"0x2","coin_registry::MetadataCapState":"0x2","coin_registry::RegulatedState":"0x2","coin_registry::SupplyState":"0x2","config::Config":"0x2","config::Setting":"0x2","config::SettingData":"0x2","deny_list::AddressKey":"0x2","deny_list::ConfigKey":"0x2","deny_list::ConfigWriteCap":"0x2","deny_list::DenyList":"0x2","deny_list::GlobalPauseKey":"0x2","deny_list::PerTypeConfigCreated":"0x2","deny_list::PerTypeList":"0x2","derived_object::Claimed":"0x2","derived_object::ClaimedStatus":"0x2","derived_object::DerivedObjectKey":"0x2","display::Display":"0x2","display::DisplayCreated":"0x2","display::VersionUpdated":"0x2","display_registry::Display":"0x2","display_registry::DisplayCap":"0x2","display_registry::DisplayKey":"0x2","display_registry::DisplayRegistry":"0x2","display_registry::SystemMigrationCap":"0x2","dynamic_field::Field":"0x2","dynamic_object_field::Wrapper":"0x2","funds_accumulator::Withdrawal":"0x2","groth16::Curve":"0x2","groth16::PreparedVerifyingKey":"0x2","groth16::ProofPoints":"0x2","groth16::PublicProofInputs":"0x2","group_ops::Element":"0x2","kiosk::Borrow":"0x2","kiosk::Item":"0x2","kiosk::ItemDelisted":"0x2","kiosk::ItemListed":"0x2","kiosk::ItemPurchased":"0x2","kiosk::Kiosk":"0x2","kiosk::KioskOwnerCap":"0x2","kiosk::Listing":"0x2","kiosk::Lock":"0x2","kiosk::PurchaseCap":"0x2","kiosk_extension::Extension":"0x2","kiosk_extension::ExtensionKey":"0x2","linked_table::LinkedTable":"0x2","linked_table::Node":"0x2","nitro_attestation::NitroAttestationDocument":"0x2","nitro_attestation::PCREntry":"0x2","object::ID":"0x2","object::UID":"0x2","object_bag::ObjectBag":"0x2","object_table::ObjectTable":"0x2","package::Publisher":"0x2","package::UpgradeCap":"0x2","package::UpgradeReceipt":"0x2","package::UpgradeTicket":"0x2","party::Party":"0x2","party::Permissions":"0x2","priority_queue::Entry":"0x2","priority_queue::PriorityQueue":"0x2","random::Random":"0x2","random::RandomGenerator":"0x2","random::RandomInner":"0x2","ristretto255::G":"0x2","ristretto255::Scalar":"0x2","sui::SUI":"0x2","table::Table":"0x2","table_vec::TableVec":"0x2","token::ActionRequest":"0x2","token::RuleKey":"0x2","token::Token":"0x2","token::TokenPolicy":"0x2","token::TokenPolicyCap":"0x2","token::TokenPolicyCreated":"0x2","transfer::Receiving":"0x2","transfer_policy::RuleKey":"0x2","transfer_policy::TransferPolicy":"0x2","transfer_policy::TransferPolicyCap":"0x2","transfer_policy::TransferPolicyCreated":"0x2","transfer_policy::TransferPolicyDestroyed":"0x2","transfer_policy::TransferRequest":"0x2","tx_context::TxContext":"0x2","url::Url":"0x2","vec_map::Entry":"0x2","vec_map::VecMap":"0x2","vec_set::VecSet":"0x2","versioned::VersionChangeCap":"0x2","versioned::Versioned":"0x2","zklogin_verified_id::VerifiedID":"0x2","zklogin_verified_issuer::VerifiedIssuer":"0x2"}},"token-messenger-minter":{originalId:"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb",publishedAt:"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb",typeOrigins:{"burn_message::BurnMessage":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","deposit_for_burn::DepositForBurn":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","deposit_for_burn::DepositForBurnTicket":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","deposit_for_burn::DepositForBurnWithCallerTicket":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","deposit_for_burn::ReplaceDepositForBurnTicket":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","handle_receive_message::MintAndWithdraw":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","handle_receive_message::StampReceiptTicketWithBurnMessage":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","initialize::INITIALIZE":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","initialize::InitCap":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","message_transmitter_authenticator::MessageTransmitterAuthenticator":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","migration::MigrationAborted":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","migration::MigrationCompleted":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","migration::MigrationStarted":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","pausable::Pause":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","pausable::Unpause":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","remote_token_messenger::RemoteTokenMessengerAdded":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","remote_token_messenger::RemoteTokenMessengerRemoved":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","role_management::PauserChanged":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","role_management::SetTokenController":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","roles::OwnerRole":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","roles::Roles":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","state::State":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","token_controller::MintCapAdded":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","token_controller::MintCapRemoved":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","token_controller::SetBurnLimitPerMessage":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","token_controller::TokenPairLinked":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","token_controller::TokenPairUnlinked":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb"}},stablecoin:{originalId:"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917",publishedAt:"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917",typeOrigins:{"mint_allowance::MintAllowance":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::BlocklisterChanged":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::BlocklisterKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::MasterMinterChanged":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::MasterMinterKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::MetadataUpdaterChanged":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::MetadataUpdaterKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::OwnerKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::OwnerRole":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::PauserChanged":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::PauserKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::Roles":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","stablecoin::STABLECOIN":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Blocklisted":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Burn":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::ControllerConfigured":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::ControllerRemoved":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::DenyCapKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MetadataUpdated":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MigrationAborted":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MigrationCompleted":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MigrationStarted":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Mint":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MintCap":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MintCapCreated":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MinterAllowanceIncremented":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MinterConfigured":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MinterRemoved":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Pause":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Treasury":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::TreasuryCapKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Unblocklisted":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Unpause":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917"}},"message-transmitter":{originalId:"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5",publishedAt:"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5",typeOrigins:{"attester_manager::AttesterDisabled":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","attester_manager::AttesterEnabled":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","attester_manager::SignatureThresholdUpdated":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","initialize::INITIALIZE":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","initialize::InitCap":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","message::Message":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","message_size::MaxMessageBodySizeUpdated":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","migration::MigrationAborted":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","migration::MigrationCompleted":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","migration::MigrationStarted":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","pausable::Pause":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","pausable::Unpause":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","receive_message::MessageReceived":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","receive_message::Receipt":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","receive_message::ReceiveMessageTicket":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","receive_message::StampReceiptTicket":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","receive_message::StampedReceipt":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","role_management::AttesterManagerUpdated":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","role_management::PauserChanged":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","roles::OwnerRole":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","roles::Roles":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","send_message::MessageSent":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","send_message::ReplaceMessageTicket":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","send_message::SendMessageTicket":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","send_message::SendMessageWithCallerTicket":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","state::State":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5"}},wormhole:{originalId:"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94",publishedAt:"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94",typeOrigins:{"bytes20::Bytes20":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","bytes32::Bytes32":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","consumed_vaas::ConsumedVAAs":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","cursor::Cursor":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","emitter::EmitterCap":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","emitter::EmitterCreated":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","emitter::EmitterDestroyed":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","external_address::ExternalAddress":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","fee_collector::FeeCollector":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","governance_message::DecreeReceipt":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","governance_message::DecreeTicket":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","guardian::Guardian":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","guardian_set::GuardianSet":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","guardian_signature::GuardianSignature":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","migrate::MigrateComplete":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","package_utils::CurrentPackage":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","package_utils::CurrentVersion":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","package_utils::PackageInfo":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","package_utils::PendingPackage":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","publish_message::MessageTicket":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","publish_message::WormholeMessage":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","set::Empty":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","set::Set":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","set_fee::GovernanceWitness":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","set_fee::SetFee":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","setup::DeployerCap":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","state::LatestOnly":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","state::State":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","transfer_fee::GovernanceWitness":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","transfer_fee::TransferFee":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","update_guardian_set::GovernanceWitness":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","update_guardian_set::GuardianSetAdded":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","update_guardian_set::UpdateGuardianSet":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","upgrade_contract::ContractUpgraded":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","upgrade_contract::GovernanceWitness":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","upgrade_contract::UpgradeContract":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","vaa::VAA":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","version_control::V__0_2_0":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","version_control::V__DUMMY":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94"}}}};var jo=!1;jo||(Ho("testnet",Jo),ur("testnet"),jo=!0);import{bcs as _e}from"@mysten/sui/bcs";function wA(o,a=["<",">"]){let[i,r]=a,s=[],d="",A=0;for(let l=0;l<o.length;l++){let u=o[l];if(u===i&&A++,u===r&&A--,A===0&&u===","){s.push(d.trim()),d="";continue}d+=u}return s.push(d.trim()),s}function ue(o){if(typeof o!="string")throw new Error(`Illegal type passed as a name of the type: ${o}`);let[a,i]=["<",">"],r=o.indexOf(a),s=Array.from(o).reverse().indexOf(i);if(r===-1&&s===-1)return{typeName:o,typeArgs:[]};if(r===-1||s===-1)throw new Error(`Unclosed generic in name '${o}'`);let d=o.slice(0,r),A=wA(o.slice(r+1,o.length-s-1),[a,i]);return{typeName:d,typeArgs:A}}function zo(o){return!o||typeof o!="object"||Array.isArray(o)?!1:"GasCoin"in o||"Input"in o||"Result"in o||"NestedResult"in o}function O(o,a){return zo(a)?a:o.object(a)}function it(o,a,i){if(zo(a)){if(typeof a=="function")throw new Error("Transaction plugins are not supported");return O(o,a)}function r(b){let{typeName:y,typeArgs:C}=ue(b);switch(y){case"bool":return _e.Bool;case"u8":return _e.U8;case"u16":return _e.U16;case"u32":return _e.U32;case"u64":return _e.U64;case"u128":return _e.U128;case"u256":return _e.U256;case"address":return _e.Address;case"0x1::string::String":case"0x1::ascii::String":return _e.String;case"0x2::object::ID":return _e.Address;case"0x1::option::Option":return _e.option(r(C[0]));case"vector":return _e.vector(r(C[0]));default:throw new Error(`invalid primitive type ${b}`)}}function s(b){for(let y of b){if(typeof y>"u"||y===null)return!0;if(Array.isArray(y))return s(y)}return!1}function d(b){for(let y of b){if(!Array.isArray(y)){if(y===null)continue;switch(typeof y){case"string":case"number":case"bigint":case"boolean":continue;default:return!1}}return d(y)}return!0}function A(b){for(let y of b){if(!Array.isArray(y))switch(typeof y){case"string":case"number":case"bigint":case"boolean":return!0;default:continue}return A(y)}return!1}let{typeName:l,typeArgs:u}=ue(i);switch(l){case"0x1::option::Option":if(a===null)return o.pure.option("bool",null);if(d([a]))return o.pure(r(i).serialize(a));if(A([a]))throw new Error("mixing primitive and TransactionArgument values is not supported");return o.moveCall({target:"0x1::option::some",typeArguments:[u[0]],arguments:[it(o,a,u[0])]});case"vector":if(!Array.isArray(a))throw new Error("expected an array for vector type");if(a.length===0)return o.pure(_e.vector(_e.Bool).serialize([]));if(s(a))throw new Error("the provided array contains undefined or null values");if(d(a))return o.pure(r(i).serialize(a));if(A(a))throw new Error("mixing primitive and TransactionArgument values is not supported");return o.makeMoveVec({type:u[0],elements:a});default:return o.pure(r(i).serialize(a))}}function FA(o){let a=o.split("0x").join("");for(let i=0;i<a.length;i++)if(a[i]!=="0")return`0x${a.substring(i)}`;return"0x0"}function J(o){let{typeName:a,typeArgs:i}=ue(o);switch(a){case"bool":case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"address":case"signer":return a;case"vector":return`vector<${J(i[0])}>`;default:{let r=a.split("::");r[0]=FA(r[0]);let s=r.join("::");return i.length>0?`${s}<${i.map(d=>J(d)).join(",")}>`:s}}}function re(o,...a){return a.length>0?`${o}<${a.join(", ")}>`:o}function br(o,a,i,r){return o.moveCall({target:`${Ee("bridge",r?.env)}::bridge_interface::swap_and_bridge`,typeArguments:[a],arguments:[O(o,i.bridge),O(o,i.messenger),O(o,i.gasOracle),O(o,i.amount),O(o,i.recipient),it(o,i.destinationChainId,"u8"),O(o,i.receiveToken),it(o,i.nonce,"u256"),O(o,i.feeSuiCoin),O(o,i.feeTokenCoin)]})}function yr(o,a,i,r){return o.moveCall({target:`${Ee("bridge",r?.env)}::bridge_interface::swap_and_bridge_wormhole`,typeArguments:[a],arguments:[O(o,i.bridge),O(o,i.messenger),O(o,i.wormholeState),O(o,i.theClock),O(o,i.gasOracle),O(o,i.amount),O(o,i.recipient),it(o,i.destinationChainId,"u8"),O(o,i.receiveToken),it(o,i.nonce,"u256"),O(o,i.feeSuiCoin),O(o,i.feeTokenCoin)]})}function Oo(o,a,i,r){return o.moveCall({target:`${Ee("bridge",r?.env)}::bridge_interface::swap`,typeArguments:a,arguments:[O(o,i.bridge),O(o,i.coin),it(o,i.receiveAmountMin,"u64")]})}function Qo(o,a,i,r){return o.moveCall({target:`${Ee("bridge",r?.env)}::bridge_interface::deposit`,typeArguments:[a],arguments:[O(o,i.bridge),O(o,i.userDeposit),O(o,i.coin)]})}function Uo(o,a,i,r){return o.moveCall({target:`${Ee("bridge",r?.env)}::bridge_interface::claim_reward`,typeArguments:[a],arguments:[O(o,i.bridge),O(o,i.userDeposit)]})}function Ko(o,a,i,r){return o.moveCall({target:`${Ee("bridge",r?.env)}::bridge_interface::withdraw`,typeArguments:[a],arguments:[O(o,i.bridge),O(o,i.userDeposit),it(o,i.amountLp,"u64")]})}function Do(o,a,i,r){return o.moveCall({target:`${Ee("bridge",r?.env)}::bridge_interface::pool`,typeArguments:[a],arguments:[O(o,i)]})}function Eo(o,a,i){return o.moveCall({target:`${Ee("bridge",i?.env)}::bridge_interface::new_user_deposit`,typeArguments:[a],arguments:[]})}function _o(o,a){mn("cctp-bridge",o,a)}function Cr(o,a,i,r){return o.moveCall({target:`${Ee("cctp-bridge",r?.env)}::cctp_bridge_interface::bridge`,typeArguments:[a],arguments:[O(o,i.cctpBridge),O(o,i.gasOracle),O(o,i.tokenMessengerMinterState),O(o,i.messageTransmitterState),O(o,i.treasury),O(o,i.denyList),O(o,i.amount),O(o,i.feeSuiCoin),O(o,i.feeTokenCoin),it(o,i.destinationChainId,"u8"),O(o,i.recipient),O(o,i.recipientWalletAddress)]})}function $o(o,a){mn("utils",o,a)}import{bcs as gv}from"@mysten/sui/bcs";import{fromBase64 as pv}from"@mysten/sui/utils";import{bcs as Lt}from"@mysten/sui/bcs";import{fromHex as ZA,toHex as GA}from"@mysten/sui/utils";import{bcs as NA}from"@mysten/sui/bcs";var Ir=class o{__VectorClass=!0;static $typeName="vector";static $numTypeParams=1;static $isPhantom=[!1];$typeName="vector";$fullTypeName;$typeArgs;$isPhantom=[!1];elements;constructor(a,i){this.$fullTypeName=re(this.$typeName,...a),this.$typeArgs=a,this.elements=i}static reified(a){return{typeName:o.$typeName,fullTypeName:re(o.$typeName,z(a)),typeArgs:[z(a)],isPhantom:o.$isPhantom,reifiedTypeArgs:[a],fromFields:i=>o.fromFields(a,i),fromFieldsWithTypes:i=>o.fromFieldsWithTypes(a,i),fromBcs:i=>o.fromBcs(a,i),bcs:o.bcs(Jn(a)),fromJSONField:i=>o.fromJSONField(a,i),fromJSON:i=>o.fromJSON(a,i),new:i=>new o([z(a)],i),kind:"VectorClassReified"}}static get r(){return o.reified}static get bcs(){return NA.vector}static fromFields(a,i){return o.reified(a).new(i.map(r=>te(a,r)))}static fromFieldsWithTypes(a,i){return o.reified(a).new(i.map(r=>q(a,r)))}static fromBcs(a,i){return o.fromFields(a,o.bcs(Jn(a)).parse(i))}toJSONField(){return this.elements.map(a=>$t(this.$typeArgs[0],a))}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,elements:this.toJSONField()}}static fromJSONField(a,i){return o.reified(a).new(i.map(r=>ee(a,r)))}static fromJSON(a,i){if(i.$typeName!==o.$typeName)throw new Error("not a vector json object");return o.fromJSONField(a,i.elements)}};function bn(o){return Ir.r(o)}function Re(o){return typeof o=="string"?{phantomType:o,kind:"PhantomReified"}:{get phantomType(){return o.fullTypeName},kind:"PhantomReified"}}var VA=Lt.bytes(32).transform({input:o=>ZA(o),output:o=>GA(o)});function Jn(o){switch(o){case"bool":return Lt.bool();case"u8":return Lt.u8();case"u16":return Lt.u16();case"u32":return Lt.u32();case"u64":return Lt.u64();case"u128":return Lt.u128();case"u256":return Lt.u256();case"address":return VA;default:return o.bcs}}function z(o){switch(o){case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"bool":case"address":return o}switch(o.kind){case"PhantomReified":return o.phantomType;case"StructClassReified":return o.fullTypeName;case"VectorClassReified":return o.fullTypeName;case"EnumClassReified":return o.fullTypeName}throw new Error("unreachable")}function te(o,a){switch(o){case"bool":case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return BigInt(a);case"address":return`0x${a}`}if(o.kind==="VectorClassReified")return o.fromFields(a).elements;switch(o.typeName){case"0x1::string::String":case"0x1::ascii::String":return new TextDecoder().decode(Uint8Array.from(a.bytes)).toString();case"0x2::url::Url":return new TextDecoder().decode(Uint8Array.from(a.url.bytes)).toString();case"0x2::object::ID":return`0x${a.bytes}`;case"0x2::object::UID":return`0x${a.id.bytes}`;case"0x1::type_name::TypeName":return new TextDecoder().decode(Uint8Array.from(a.name.bytes)).toString();case"0x1::option::Option":return a.vec.length===0?null:o.fromFields(a).vec[0];default:return o.fromFields(a)}}function q(o,a){switch(o){case"bool":case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return BigInt(a);case"address":return a}if(o.kind==="VectorClassReified")return o.fromFieldsWithTypes(a).elements;switch(o.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":return a;case"0x2::object::UID":return a.id;case"0x1::type_name::TypeName":return a.fields.name;case"0x2::balance::Balance":return o.fromFields({value:BigInt(a)});case"0x1::option::Option":return a===null?null:q(o.reifiedTypeArgs[0],a);default:return o.fromFieldsWithTypes(a)}}function ct(o,a,i){if(i.length!==a.length)throw new Error(`provided item has mismatching number of type argments ${o} (expected ${i.length}, got ${a.length}))`);for(let r=0;r<a.length;r++)if(J(a[r])!==J(z(i[r])))throw new Error(`provided item has mismatching type argments ${o} (expected ${z(i[r])}, got ${a[r]}))`)}function ht(o,a){let{typeArgs:i}=ue(o.type);ct(o.type,i,a)}function $t(o,a){let{typeName:i,typeArgs:r}=ue(o);switch(i){case"bool":return a;case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return a.toString();case"address":case"signer":return a;case"vector":return a.map(s=>$t(r[0],s));case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":case"0x1::type_name::TypeName":return a;case"0x1::option::Option":return a===null?null:$t(r[0],a);default:return a.toJSONField()}}function ee(o,a){switch(o){case"bool":case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return BigInt(a);case"address":return a}if(o.kind==="VectorClassReified")return o.fromJSONField(a).elements;switch(o.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":case"0x1::type_name::TypeName":return a;case"0x1::option::Option":return a===null?null:ee(o.reifiedTypeArgs[0],a);default:return o.fromJSONField(a)}}import{bcs as hr}from"@mysten/sui/bcs";import{fromBase64 as XA}from"@mysten/sui/utils";function jn(o){return o=J(o),o==="0x1::string::String"}var ti=class o{__StructClass=!0;static $typeName="0x1::string::String";static $numTypeParams=0;static $isPhantom=[];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;bytes;constructor(a,i){this.$fullTypeName=re(o.$typeName,...a),this.$typeArgs=a,this.bytes=i.bytes}static reified(){let a=o.bcs;return{get typeName(){return o.$typeName},get fullTypeName(){return re(o.$typeName)},typeArgs:[],isPhantom:o.$isPhantom,reifiedTypeArgs:[],fromFields:i=>o.fromFields(i),fromFieldsWithTypes:i=>o.fromFieldsWithTypes(i),fromBcs:i=>o.fromFields(a.parse(i)),bcs:a,fromJSONField:i=>o.fromJSONField(i),fromJSON:i=>o.fromJSON(i),fromCoreObject:i=>o.fromCoreObject(i),fromSuiParsedData:i=>o.fromSuiParsedData(i),fromSuiObjectData:i=>o.fromSuiObjectData(i),fetch:async(i,r)=>o.fetch(i,r),new:i=>new o([],i),kind:"StructClassReified"}}static get r(){return o.reified()}static phantom(){return Re(o.reified())}static get p(){return o.phantom()}static instantiateBcs(){return hr.struct("String",{bytes:hr.vector(hr.u8())})}static cachedBcs=null;static get bcs(){return o.cachedBcs||(o.cachedBcs=o.instantiateBcs()),o.cachedBcs}static fromFields(a){return o.reified().new({bytes:te(bn("u8"),a.bytes)})}static fromFieldsWithTypes(a){if(!jn(a.type))throw new Error("not a String type");return o.reified().new({bytes:q(bn("u8"),a.fields.bytes)})}static fromBcs(a){return o.fromFields(o.bcs.parse(a))}toJSONField(){return{bytes:$t("vector<u8>",this.bytes)}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a){return o.reified().new({bytes:ee(bn("u8"),a.bytes)})}static fromJSON(a){if(a.$typeName!==o.$typeName)throw new Error(`not a String json object: expected '${o.$typeName}' but got '${a.$typeName}'`);return o.fromJSONField(a)}static fromCoreObject(a){if(!jn(a.type))throw new Error(`object at ${a.objectId} is not a String object`);return o.fromBcs(a.content)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!jn(a.type))throw new Error(`object at ${a.fields.id} is not a String object`);return o.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!jn(a.bcs.type))throw new Error("object at is not a String object");return o.fromBcs(XA(a.bcs.bcsBytes))}if(a.content)return o.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,i){let{object:r}=await a.core.getObject({objectId:i,include:{content:!0}});if(!jn(r.type))throw new Error(`object at id ${i} is not a String object`);return o.fromBcs(r.content)}};import{bcs as vr}from"@mysten/sui/bcs";import{fromBase64 as qo,fromHex as PA,toHex as SA}from"@mysten/sui/utils";function zn(o){return o=J(o),o==="0x2::object::ID"}var qt=class o{__StructClass=!0;static $typeName="0x2::object::ID";static $numTypeParams=0;static $isPhantom=[];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;bytes;constructor(a,i){this.$fullTypeName=re(o.$typeName,...a),this.$typeArgs=a,this.bytes=i.bytes}static reified(){let a=o.bcs;return{get typeName(){return o.$typeName},get fullTypeName(){return re(o.$typeName)},typeArgs:[],isPhantom:o.$isPhantom,reifiedTypeArgs:[],fromFields:i=>o.fromFields(i),fromFieldsWithTypes:i=>o.fromFieldsWithTypes(i),fromBcs:i=>o.fromFields(a.parse(i)),bcs:a,fromJSONField:i=>o.fromJSONField(i),fromJSON:i=>o.fromJSON(i),fromCoreObject:i=>o.fromCoreObject(i),fromSuiParsedData:i=>o.fromSuiParsedData(i),fromSuiObjectData:i=>o.fromSuiObjectData(i),fetch:async(i,r)=>o.fetch(i,r),new:i=>new o([],i),kind:"StructClassReified"}}static get r(){return o.reified()}static phantom(){return Re(o.reified())}static get p(){return o.phantom()}static instantiateBcs(){return vr.struct("ID",{bytes:vr.bytes(32).transform({input:a=>PA(a),output:a=>SA(a)})})}static cachedBcs=null;static get bcs(){return o.cachedBcs||(o.cachedBcs=o.instantiateBcs()),o.cachedBcs}static fromFields(a){return o.reified().new({bytes:te("address",a.bytes)})}static fromFieldsWithTypes(a){if(!zn(a.type))throw new Error("not a ID type");return o.reified().new({bytes:q("address",a.fields.bytes)})}static fromBcs(a){return o.fromFields(o.bcs.parse(a))}toJSONField(){return{bytes:this.bytes}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a){return o.reified().new({bytes:ee("address",a.bytes)})}static fromJSON(a){if(a.$typeName!==o.$typeName)throw new Error(`not a ID json object: expected '${o.$typeName}' but got '${a.$typeName}'`);return o.fromJSONField(a)}static fromCoreObject(a){if(!zn(a.type))throw new Error(`object at ${a.objectId} is not a ID object`);return o.fromBcs(a.content)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!zn(a.type))throw new Error(`object at ${a.fields.id} is not a ID object`);return o.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!zn(a.bcs.type))throw new Error("object at is not a ID object");return o.fromBcs(qo(a.bcs.bcsBytes))}if(a.content)return o.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,i){let{object:r}=await a.core.getObject({objectId:i,include:{content:!0}});if(!zn(r.type))throw new Error(`object at id ${i} is not a ID object`);return o.fromBcs(r.content)}};function On(o){return o=J(o),o==="0x2::object::UID"}var rt=class o{__StructClass=!0;static $typeName="0x2::object::UID";static $numTypeParams=0;static $isPhantom=[];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;id;constructor(a,i){this.$fullTypeName=re(o.$typeName,...a),this.$typeArgs=a,this.id=i.id}static reified(){let a=o.bcs;return{get typeName(){return o.$typeName},get fullTypeName(){return re(o.$typeName)},typeArgs:[],isPhantom:o.$isPhantom,reifiedTypeArgs:[],fromFields:i=>o.fromFields(i),fromFieldsWithTypes:i=>o.fromFieldsWithTypes(i),fromBcs:i=>o.fromFields(a.parse(i)),bcs:a,fromJSONField:i=>o.fromJSONField(i),fromJSON:i=>o.fromJSON(i),fromCoreObject:i=>o.fromCoreObject(i),fromSuiParsedData:i=>o.fromSuiParsedData(i),fromSuiObjectData:i=>o.fromSuiObjectData(i),fetch:async(i,r)=>o.fetch(i,r),new:i=>new o([],i),kind:"StructClassReified"}}static get r(){return o.reified()}static phantom(){return Re(o.reified())}static get p(){return o.phantom()}static instantiateBcs(){return vr.struct("UID",{id:qt.bcs})}static cachedBcs=null;static get bcs(){return o.cachedBcs||(o.cachedBcs=o.instantiateBcs()),o.cachedBcs}static fromFields(a){return o.reified().new({id:te(qt.reified(),a.id)})}static fromFieldsWithTypes(a){if(!On(a.type))throw new Error("not a UID type");return o.reified().new({id:q(qt.reified(),a.fields.id)})}static fromBcs(a){return o.fromFields(o.bcs.parse(a))}toJSONField(){return{id:this.id}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a){return o.reified().new({id:ee(qt.reified(),a.id)})}static fromJSON(a){if(a.$typeName!==o.$typeName)throw new Error(`not a UID json object: expected '${o.$typeName}' but got '${a.$typeName}'`);return o.fromJSONField(a)}static fromCoreObject(a){if(!On(a.type))throw new Error(`object at ${a.objectId} is not a UID object`);return o.fromBcs(a.content)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!On(a.type))throw new Error(`object at ${a.fields.id} is not a UID object`);return o.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!On(a.bcs.type))throw new Error("object at is not a UID object");return o.fromBcs(qo(a.bcs.bcsBytes))}if(a.content)return o.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,i){let{object:r}=await a.core.getObject({objectId:i,include:{content:!0}});if(!On(r.type))throw new Error(`object at id ${i} is not a UID object`);return o.fromBcs(r.content)}};function gt(o,a,i){return o.moveCall({target:`${Ee("utils",i?.env)}::bytes32::from_hex`,arguments:[it(o,a,`${ti.$typeName}`)]})}async function vt(o,a,i=[]){let r=await o(a),s=i.concat(r.data);return r.hasNextPage&&r.nextCursor?vt(o,r.nextCursor,s):s}var yn=class extends Pe{constructor(i,r,s){super();this.nodeRpcUrlsConfig=i;this.params=r;this.api=s;this.client=new kA({url:i.getNodeRpcUrl(this.chainSymbol),network:r.suiIsTestnet?"testnet":"mainnet"})}nodeRpcUrlsConfig;params;api;chainType="SUI";chainSymbol="SUI";client;send(){throw new w("Method send not implemented.")}async buildRawTransactionSwap(i){let r=i.sourceToken.suiAddresses;if(!r)throw new w("SUI token must contain 'suiAddresses'");wt(r.bridgeAddress,r.bridgeAddressOrigin);let s=Ke(this.chainType,i);return await this.buildRawTransactionSwapFromParams(s,r)}async buildRawTransactionSwapFromParams(i,r){let{amount:s,fromAccountAddress:d,fromTokenAddress:A,toTokenAddress:l,minimumReceiveAmount:u}=i,b=new fr;b.setSender(d);let y={bridge:r.bridgeObjectAddress,coin:Be({balance:BigInt(s),type:A}),receiveAmountMin:BigInt(u)},C=Oo(b,[A,l],y),f=await vt(v=>this.client.getCoins({owner:i.toAccountAddress,coinType:l,cursor:v}));return f.length===0||!f[0]?b.transferObjects([C],i.toAccountAddress):b.mergeCoins(f[0].coinObjectId,[C]),await b.toJSON({client:this.client})}async buildRawTransactionSendFromCustomTx(i,r,s){let d=fr.from(i);return this.buildRawTransactionSendFromTx(s,d,r)}async buildRawTransactionSend(i){return this.buildRawTransactionSendFromTx(i,new fr)}async buildRawTransactionSendFromTx(i,r,s){let d=await Oe(this.chainType,i,this.api),{messenger:A}=d,l=i.sourceToken.suiAddresses;if(!l)throw new w("SUI token must contain 'suiAddresses'");switch(wt(l.bridgeAddress,l.bridgeAddressOrigin),$o(l.utilsAddress),A){case 1:return this.buildRawTransactionAllbridgeSend(d,l,r,s);case 2:return this.buildRawTransactionWormholeSend(d,l,r,s);case 3:case 4:return this.buildRawTransactionCctpSend(i,d,l,r,s);case 6:throw new w("Messenger xReserve is not supported for SUI bridge");case 5:throw new Xe("Messenger OFT is not supported yet.")}}async buildRawTransactionAllbridgeSend(i,r,s,d){let{amount:A,fromAccountAddress:l,fromTokenAddress:u,toChainId:b,toAccountAddress:y,toTokenAddress:C,fee:f,gasFeePaymentMethod:v,extraGas:R}=i,F=f;switch(R&&(F=Rr(F).plus(R).toFixed()),s.setSender(l),v){case"native":{let N=F==="0"?Be({balance:BigInt(F),useGasCoin:!1}):Be({balance:BigInt(F)}),G={bridge:r.bridgeObjectAddress,messenger:r.allbridgeMessengerObjectAddress,amount:d??Be({balance:BigInt(A),type:u}),destinationChainId:b,nonce:yt(),recipient:gt(s,st(y)),receiveToken:gt(s,st(C)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:Be({balance:BigInt(0),type:u}),feeSuiCoin:N};br(s,u,G);break}case"stablecoin":{let N=BigInt(A)-BigInt(F),G,B;if(d){let[V]=s.splitCoins(d,[F]);G=d,B=V}else G=Be({balance:N,type:u}),B=Be({balance:BigInt(F),type:u});let P={bridge:r.bridgeObjectAddress,messenger:r.allbridgeMessengerObjectAddress,amount:G,destinationChainId:b,nonce:yt(),recipient:gt(s,st(y)),receiveToken:gt(s,st(C)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:B,feeSuiCoin:Be({balance:BigInt(0),useGasCoin:!1})};br(s,u,P);break}case"abr":throw new w("SUI bridge does not support ABR payment method");default:return oe(v,"Unhandled FeePaymentMethod")}return await s.toJSON({client:this.client})}async buildRawTransactionWormholeSend(i,r,s,d){let{amount:A,fromAccountAddress:l,fromTokenAddress:u,toChainId:b,toAccountAddress:y,toTokenAddress:C,fee:f,gasFeePaymentMethod:v,extraGas:R}=i,F=f;switch(R&&(F=Rr(F).plus(R).toFixed()),s.setSender(l),v){case"native":{let N=F==="0"?Be({balance:BigInt(F),useGasCoin:!1}):Be({balance:BigInt(F)}),G={bridge:r.bridgeObjectAddress,messenger:r.wormholeMessengerObjectAddress,wormholeState:r.wormholeStateObjectAddress,theClock:es,amount:d??Be({balance:BigInt(A),type:u}),destinationChainId:b,nonce:yt(),recipient:gt(s,st(y)),receiveToken:gt(s,st(C)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:Be({balance:BigInt(0),type:u}),feeSuiCoin:N};yr(s,u,G);break}case"stablecoin":{let N=BigInt(A)-BigInt(F),G,B;if(d){let[V]=s.splitCoins(d,[F]);G=d,B=V}else G=Be({balance:N,type:u}),B=Be({balance:BigInt(F),type:u});let P={bridge:r.bridgeObjectAddress,messenger:r.wormholeMessengerObjectAddress,wormholeState:r.wormholeStateObjectAddress,theClock:es,amount:G,destinationChainId:b,nonce:yt(),recipient:gt(s,st(y)),receiveToken:gt(s,st(C)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:B,feeSuiCoin:Be({balance:BigInt(0),useGasCoin:!1})};yr(s,u,P);break}case"abr":throw new w("SUI bridge does not support ABR payment method");default:return oe(v,"Unhandled FeePaymentMethod")}return await s.toJSON({client:this.client})}async buildRawTransactionCctpSend(i,r,s,d,A){let{amount:l,fromAccountAddress:u,fromTokenAddress:b,toChainId:y,toAccountAddress:C,fee:f,gasFeePaymentMethod:v,extraGas:R}=r;_o(s.cctpAddress,s.cctpAddressOrigin);let F=f;R&&(F=Rr(F).plus(R).toFixed()),d.setSender(u);let N=gt(d,st(C)),G;if(i.destinationToken.chainType==="SOLANA"){let B=await An(this.chainType,i.toAccountAddress,i.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));G=gt(d,st(B))}else G=N;switch(v){case"native":{let B=F==="0"?Be({balance:BigInt(F),useGasCoin:!1}):Be({balance:BigInt(F)}),P={cctpBridge:s.cctpObjectAddress,tokenMessengerMinterState:s.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:s.cctpMessageTransmitterStateObjectAddress,treasury:s.cctpTreasuryObjectAddress,denyList:s.cctpDenyListObjectAddress,amount:A??Be({balance:BigInt(l),type:b}),destinationChainId:y,recipient:G,recipientWalletAddress:N,gasOracle:s.gasOracleObjectAddress,feeTokenCoin:Be({balance:BigInt(0),type:b}),feeSuiCoin:B};Cr(d,b,P);break}case"stablecoin":{let B=BigInt(l)-BigInt(F),P,V;if(A){let[M]=d.splitCoins(A,[F]);P=A,V=M}else P=Be({balance:B,type:b}),V=Be({balance:BigInt(F),type:b});let S={cctpBridge:s.cctpObjectAddress,tokenMessengerMinterState:s.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:s.cctpMessageTransmitterStateObjectAddress,treasury:s.cctpTreasuryObjectAddress,denyList:s.cctpDenyListObjectAddress,amount:P,destinationChainId:y,recipient:G,recipientWalletAddress:N,gasOracle:s.gasOracleObjectAddress,feeTokenCoin:V,feeSuiCoin:Be({balance:BigInt(0),useGasCoin:!1})};Cr(d,b,S);break}case"abr":throw new w("SUI bridge does not support ABR payment method");default:return oe(v,"Unhandled FeePaymentMethod")}return await d.toJSON({client:this.client})}};import{Big as xA}from"big.js";import LA from"bn.js";function ni(o){return"0x"+new LA(o).toString("hex")}function ts(o){return new Promise(a=>setTimeout(()=>a(),o))}async function ai(o,a){let i=await o.trx.sign(a);if(!i.signature)throw new on("Transaction was not signed properly");let s=(await o.trx.sendRawTransaction(i)).transaction.txID;return await MA(o,s),{txId:s}}async function MA(o,a,i=1e4){let r=Date.now();for(;;){if(Date.now()-r>i)throw new Zn("Transaction not found");let s=await o.trx.getUnconfirmedTransactionInfo(a);if(!s?.receipt){await ts(2e3);continue}if(s.receipt.result==="SUCCESS")return s;throw new Zn(`Transaction status is ${s.receipt.result}`)}}var Qn=class extends Pe{constructor(i,r){super();this.tronWeb=i;this.api=r}tronWeb;api;chainType="TRX";async send(i){let r=await Oe(this.chainType,i,this.api),s=await this.buildRawTransactionSendFromParams(i,r);return await ai(this.tronWeb,s)}async buildRawTransactionSwap(i){let r=Ke(this.chainType,i);return await this.buildRawTransactionSwapFromParams(r)}async buildRawTransactionSwapFromParams(i){let{amount:r,contractAddress:s,fromAccountAddress:d,fromTokenAddress:A,toAccountAddress:l,toTokenAddress:u,minimumReceiveAmount:b}=i,y=[{type:"uint256",value:r},{type:"bytes32",value:A},{type:"bytes32",value:u},{type:"address",value:l},{type:"uint256",value:b}];return this.buildRawTransaction(s,"swap(uint256,bytes32,bytes32,address,uint256)",y,"0",d)}async buildRawTransactionSend(i){let r=await Oe(this.chainType,i,this.api);return this.buildRawTransactionSendFromParams(i,r)}async buildRawTransactionSendFromParams(i,r){let{amount:s,contractAddress:d,fromAccountAddress:A,fromTokenAddress:l,toChainId:u,toAccountAddress:b,toTokenAddress:y,messenger:C,fee:f,gasFeePaymentMethod:v,extraGas:R,extraGasDest:F}=r,N=f;R&&(N=xA(N).plus(R).toFixed());let G=yt().toString(),B,P,V;switch(C){case 3:case 4:switch(v){case"native":{B=[{type:"uint256",value:s},{type:"bytes32",value:b},{type:"uint256",value:u},{type:"uint256",value:0}],P=N;break}case"stablecoin":{B=[{type:"uint256",value:s},{type:"bytes32",value:b},{type:"uint256",value:u},{type:"uint256",value:N}],P="0";break}case"abr":throw new w("TRX bridge does not support ABR payment method");default:return oe(v,"Unhandled FeePaymentMethod")}V="bridge(uint256,bytes32,uint256,uint256)";break;case 5:switch(v){case"native":{B=[{type:"address",value:i.sourceToken.tokenAddress},{type:"uint256",value:s},{type:"bytes32",value:b},{type:"uint256",value:u},{type:"uint256",value:0},{type:"uint256",value:F??"0"},{type:"uint256",value:"10"}],P=N;break}case"stablecoin":{B=[{type:"address",value:i.sourceToken.tokenAddress},{type:"uint256",value:s},{type:"bytes32",value:b},{type:"uint256",value:u},{type:"uint256",value:N},{type:"uint256",value:F??"0"},{type:"uint256",value:"10"}],P="0";break}case"abr":throw new w("TRX bridge does not support ABR payment method");default:return oe(v,"Unhandled FeePaymentMethod")}V="bridge(address,uint256,bytes32,uint256,uint256,uint256,uint256)";break;case 6:throw new w("Messenger xReserve is not supported for TRX bridge");case 1:case 2:switch(v){case"native":{B=[{type:"bytes32",value:l},{type:"uint256",value:s},{type:"bytes32",value:b},{type:"uint256",value:u},{type:"bytes32",value:y},{type:"uint256",value:G},{type:"uint8",value:C},{type:"uint256",value:0}],P=N;break}case"stablecoin":{B=[{type:"bytes32",value:l},{type:"uint256",value:s},{type:"bytes32",value:b},{type:"uint256",value:u},{type:"bytes32",value:y},{type:"uint256",value:G},{type:"uint8",value:C},{type:"uint256",value:N}],P="0";break}case"abr":throw new w("TRX bridge does not support ABR payment method");default:return oe(v,"Unhandled FeePaymentMethod")}V="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)";break}return this.buildRawTransaction(d,V,B,P,A)}async buildRawTransaction(i,r,s,d,A){let l=await this.tronWeb.transactionBuilder.triggerSmartContract(i,r,{callValue:+d},s,A);if(!l?.result?.result)throw new w("Unknown error: "+JSON.stringify(l,null,2));return l.transaction}};var ii=class{constructor(a,i,r,s){this.api=a;this.nodeRpcUrlsConfig=i;this.params=r;this.tokenService=s;this.rawTxBuilder=new xa(a,i,r,s)}api;nodeRpcUrlsConfig;params;tokenService;rawTxBuilder;async getAllowance(a,i){let r,s;i?(r=a,s=i):s=a;let d=cn(s.token,s.messenger,s.gasFeePaymentMethod);return await this.tokenService.getAllowance({...s,spender:d},r)}async checkAllowance(a,i){let r,s;i?(r=a,s=i):s=a;let d=cn(s.token,s.messenger,s.gasFeePaymentMethod);return this.tokenService.checkAllowance({...s,spender:d},r)}async approve(a,i){let r=cn(i.token,i.messenger,i.gasFeePaymentMethod);return this.tokenService.approve(a,{...i,spender:r})}async send(a,i){return $(i.amount),D("amount",i.amount,i.sourceToken.decimals),Ha(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).send(i)}};function Ha(o,a,i,r,s){switch(Q.getChainProperty(o).chainType){case"EVM":{if(s)return new Ln(s,a,i);{let d=i.getNodeRpcUrl(o);return new Ln(new JA(d),a,i)}}case"TRX":{if(s)return new Qn(s,a);{let d=i.getNodeRpcUrl(o);return new Qn(new HA({fullHost:d,solidityNode:d,eventServer:d}),a)}}case"SOLANA":return new Ea(i.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:r.wormholeMessengerProgramId,solanaLookUpTable:r.solanaLookUpTable,cctpParams:r.cctpParams,jupiterParams:{jupiterUrl:r.jupiterUrl,jupiterApiKeyHeader:r.jupiterApiKeyHeader,jupiterMaxAccounts:r.jupiterMaxAccounts}},a);case"SRB":return new _a(i,r,a);case"SUI":return new yn(i,r,a);case"ALG":if(s){let d=s,A=ns.fromClients({algod:d});return new Sn(A,a)}else{let d=i.getNodeRpcUrl(o),A=ns.fromConfig({algodConfig:{server:d}});return new Sn(A,a)}case"STX":{let d=i.getNodeRpcUrl(o);return new $a(d,r,a)}}}import{AlgorandClient as gs}from"@algorandfoundation/algokit-utils";import{Big as gc}from"big.js";import lc from"timed-cache";import{TronWeb as pc}from"tronweb";import{FMT_BYTES as uc,FMT_NUMBER as mc,Web3 as bc}from"web3";import{Big as Ft}from"big.js";function as(o,a,i,r,s){let d=j(o,3),A=Ft(d),l=Ft(i),u=Ft(r).plus(s),b,y;if(l.eq(0)||u.eq(0)){let f=A.div(2);b=Ft(r).plus(f),y=Ft(s).plus(f)}else b=Ft(r).plus(A.mul(r).div(u)),y=Ft(s).plus(A.mul(s).div(u));return Ft(qr(a,b.toFixed(),y.toFixed())).minus(l).toFixed()}function is(o){let a=j(o,3);return Ft(a).round().toFixed()}import{assignGroupID as Br,bytesToBigInt as OA,OnApplicationComplete as rs}from"algosdk";import{getArc56ReturnValue as jA}from"@algorandfoundation/algokit-utils/types/app-arc56";import{AppClient as ri}from"@algorandfoundation/algokit-utils/types/app-client";import{AppFactory as rR}from"@algorandfoundation/algokit-utils/types/app-factory";import{encodeAddress as zA}from"algosdk";var oi={name:"Pool",structs:{},methods:[{name:"createApplication",args:[{type:"address",name:"owner"},{type:"address",name:"router"},{type:"uint64",name:"a"},{type:"uint64",name:"asset"},{type:"uint64",name:"feeShareBP"},{type:"uint64",name:"balanceRatioMinBP"}],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}},{name:"optInToApplication",args:[],returns:{type:"void"},actions:{create:[],call:["OptIn"]},readonly:!1,events:[],recommendations:{}},{name:"closeOutOfApplication",args:[{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAC7g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["CloseOut"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"optInAsset",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,desc:"Opt-in the application account to the ASA stored in `this.asset`.\nThis performs an inner axfer of 0 to the app's own address.\nCall once after deploy (or whenever you change the asset).",events:[],recommendations:{}},{name:"deposit",args:[{type:"axfer",name:"assetTransferRef"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAC7g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp","OptIn"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"withdraw",args:[{type:"uint64",name:"amountLp",desc:"The Withdrawn amount"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAC7g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"swapToVUsd",args:[{type:"address",name:"user",desc:"The address of the sender."},{type:"uint64",name:"amount",desc:"The amount of tokens to swap."},{type:"bool",name:"zeroFee",desc:`When true it allows to swap without incurring any fees. It is intended for use with service
|
|
1
|
+
var Jr=Object.defineProperty;var Ss=Object.getOwnPropertyDescriptor;var ks=Object.getOwnPropertyNames;var Ls=Object.prototype.hasOwnProperty;var Fn=(o,a)=>{for(var i in a)Jr(o,i,{get:a[i],enumerable:!0})},Hr=(o,a,i,r)=>{if(a&&typeof a=="object"||typeof a=="function")for(let s of ks(a))!Ls.call(o,s)&&s!==i&&Jr(o,s,{get:()=>a[s],enumerable:!(r=Ss(a,s))||r.enumerable});return o},$e=(o,a,i)=>(Hr(o,a,"default"),i&&Hr(i,a,"default"));var Nn={},jr=!1;function Ms(){if(jr)return Nn;jr=!0,Nn.byteLength=l,Nn.toByteArray=b,Nn.fromByteArray=f;for(var o=[],a=[],i=typeof Uint8Array<"u"?Uint8Array:Array,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,d=r.length;s<d;++s)o[s]=r[s],a[r.charCodeAt(s)]=s;a[45]=62,a[95]=63;function A(v){var T=v.length;if(T%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var F=v.indexOf("=");F===-1&&(F=T);var N=F===T?0:4-F%4;return[F,N]}function l(v){var T=A(v),F=T[0],N=T[1];return(F+N)*3/4-N}function u(v,T,F){return(T+F)*3/4-F}function b(v){var T,F=A(v),N=F[0],G=F[1],R=new i(u(v,N,G)),P=0,V=G>0?N-4:N,S;for(S=0;S<V;S+=4)T=a[v.charCodeAt(S)]<<18|a[v.charCodeAt(S+1)]<<12|a[v.charCodeAt(S+2)]<<6|a[v.charCodeAt(S+3)],R[P++]=T>>16&255,R[P++]=T>>8&255,R[P++]=T&255;return G===2&&(T=a[v.charCodeAt(S)]<<2|a[v.charCodeAt(S+1)]>>4,R[P++]=T&255),G===1&&(T=a[v.charCodeAt(S)]<<10|a[v.charCodeAt(S+1)]<<4|a[v.charCodeAt(S+2)]>>2,R[P++]=T>>8&255,R[P++]=T&255),R}function y(v){return o[v>>18&63]+o[v>>12&63]+o[v>>6&63]+o[v&63]}function C(v,T,F){for(var N,G=[],R=T;R<F;R+=3)N=(v[R]<<16&16711680)+(v[R+1]<<8&65280)+(v[R+2]&255),G.push(y(N));return G.join("")}function f(v){for(var T,F=v.length,N=F%3,G=[],R=16383,P=0,V=F-N;P<V;P+=R)G.push(C(v,P,P+R>V?V:P+R));return N===1?(T=v[F-1],G.push(o[T>>2]+o[T<<4&63]+"==")):N===2&&(T=(v[F-2]<<8)+v[F-1],G.push(o[T>>10]+o[T>>4&63]+o[T<<2&63]+"=")),G.join("")}return Nn}var pa={},zr=!1;function xs(){if(zr)return pa;zr=!0;return pa.read=function(o,a,i,r,s){var d,A,l=s*8-r-1,u=(1<<l)-1,b=u>>1,y=-7,C=i?s-1:0,f=i?-1:1,v=o[a+C];for(C+=f,d=v&(1<<-y)-1,v>>=-y,y+=l;y>0;d=d*256+o[a+C],C+=f,y-=8);for(A=d&(1<<-y)-1,d>>=-y,y+=r;y>0;A=A*256+o[a+C],C+=f,y-=8);if(d===0)d=1-b;else{if(d===u)return A?NaN:(v?-1:1)*(1/0);A=A+Math.pow(2,r),d=d-b}return(v?-1:1)*A*Math.pow(2,d-r)},pa.write=function(o,a,i,r,s,d){var A,l,u,b=d*8-s-1,y=(1<<b)-1,C=y>>1,f=s===23?Math.pow(2,-24)-Math.pow(2,-77):0,v=r?0:d-1,T=r?1:-1,F=a<0||a===0&&1/a<0?1:0;for(a=Math.abs(a),isNaN(a)||a===1/0?(l=isNaN(a)?1:0,A=y):(A=Math.floor(Math.log(a)/Math.LN2),a*(u=Math.pow(2,-A))<1&&(A--,u*=2),A+C>=1?a+=f/u:a+=f*Math.pow(2,1-C),a*u>=2&&(A++,u/=2),A+C>=y?(l=0,A=y):A+C>=1?(l=(a*u-1)*Math.pow(2,s),A=A+C):(l=a*Math.pow(2,C-1)*Math.pow(2,s),A=0));s>=8;o[i+v]=l&255,v+=T,l/=256,s-=8);for(A=A<<s|l,b+=s;b>0;o[i+v]=A&255,v+=T,A/=256,b-=8);o[i+v-T]|=F*128},pa}var Jt={},Or=!1;function Qr(){if(Or)return Jt;Or=!0;let o=Ms(),a=xs(),i=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;Jt.Buffer=A,Jt.SlowBuffer=G,Jt.INSPECT_MAX_BYTES=50;let r=2147483647;Jt.kMaxLength=r,A.TYPED_ARRAY_SUPPORT=s(),!A.TYPED_ARRAY_SUPPORT&&typeof console<"u"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function s(){try{let p=new Uint8Array(1),c={foo:function(){return 42}};return Object.setPrototypeOf(c,Uint8Array.prototype),Object.setPrototypeOf(p,c),p.foo()===42}catch{return!1}}Object.defineProperty(A.prototype,"parent",{enumerable:!0,get:function(){if(A.isBuffer(this))return this.buffer}}),Object.defineProperty(A.prototype,"offset",{enumerable:!0,get:function(){if(A.isBuffer(this))return this.byteOffset}});function d(p){if(p>r)throw new RangeError('The value "'+p+'" is invalid for option "size"');let c=new Uint8Array(p);return Object.setPrototypeOf(c,A.prototype),c}function A(p,c,g){if(typeof p=="number"){if(typeof c=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return y(p)}return l(p,c,g)}A.poolSize=8192;function l(p,c,g){if(typeof p=="string")return C(p,c);if(ArrayBuffer.isView(p))return v(p);if(p==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof p);if(gt(p,ArrayBuffer)||p&>(p.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(gt(p,SharedArrayBuffer)||p&>(p.buffer,SharedArrayBuffer)))return T(p,c,g);if(typeof p=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');let m=p.valueOf&&p.valueOf();if(m!=null&&m!==p)return A.from(m,c,g);let h=F(p);if(h)return h;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof p[Symbol.toPrimitive]=="function")return A.from(p[Symbol.toPrimitive]("string"),c,g);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof p)}A.from=function(p,c,g){return l(p,c,g)},Object.setPrototypeOf(A.prototype,Uint8Array.prototype),Object.setPrototypeOf(A,Uint8Array);function u(p){if(typeof p!="number")throw new TypeError('"size" argument must be of type number');if(p<0)throw new RangeError('The value "'+p+'" is invalid for option "size"')}function b(p,c,g){return u(p),p<=0?d(p):c!==void 0?typeof g=="string"?d(p).fill(c,g):d(p).fill(c):d(p)}A.alloc=function(p,c,g){return b(p,c,g)};function y(p){return u(p),d(p<0?0:N(p)|0)}A.allocUnsafe=function(p){return y(p)},A.allocUnsafeSlow=function(p){return y(p)};function C(p,c){if((typeof c!="string"||c==="")&&(c="utf8"),!A.isEncoding(c))throw new TypeError("Unknown encoding: "+c);let g=R(p,c)|0,m=d(g),h=m.write(p,c);return h!==g&&(m=m.slice(0,h)),m}function f(p){let c=p.length<0?0:N(p.length)|0,g=d(c);for(let m=0;m<c;m+=1)g[m]=p[m]&255;return g}function v(p){if(gt(p,Uint8Array)){let c=new Uint8Array(p);return T(c.buffer,c.byteOffset,c.byteLength)}return f(p)}function T(p,c,g){if(c<0||p.byteLength<c)throw new RangeError('"offset" is outside of buffer bounds');if(p.byteLength<c+(g||0))throw new RangeError('"length" is outside of buffer bounds');let m;return c===void 0&&g===void 0?m=new Uint8Array(p):g===void 0?m=new Uint8Array(p,c):m=new Uint8Array(p,c,g),Object.setPrototypeOf(m,A.prototype),m}function F(p){if(A.isBuffer(p)){let c=N(p.length)|0,g=d(c);return g.length===0||p.copy(g,0,0,c),g}if(p.length!==void 0)return typeof p.length!="number"||Hi(p.length)?d(0):f(p);if(p.type==="Buffer"&&Array.isArray(p.data))return f(p.data)}function N(p){if(p>=r)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+r.toString(16)+" bytes");return p|0}function G(p){return+p!=p&&(p=0),A.alloc(+p)}A.isBuffer=function(c){return c!=null&&c._isBuffer===!0&&c!==A.prototype},A.compare=function(c,g){if(gt(c,Uint8Array)&&(c=A.from(c,c.offset,c.byteLength)),gt(g,Uint8Array)&&(g=A.from(g,g.offset,g.byteLength)),!A.isBuffer(c)||!A.isBuffer(g))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(c===g)return 0;let m=c.length,h=g.length;for(let B=0,Z=Math.min(m,h);B<Z;++B)if(c[B]!==g[B]){m=c[B],h=g[B];break}return m<h?-1:h<m?1:0},A.isEncoding=function(c){switch(String(c).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},A.concat=function(c,g){if(!Array.isArray(c))throw new TypeError('"list" argument must be an Array of Buffers');if(c.length===0)return A.alloc(0);let m;if(g===void 0)for(g=0,m=0;m<c.length;++m)g+=c[m].length;let h=A.allocUnsafe(g),B=0;for(m=0;m<c.length;++m){let Z=c[m];if(gt(Z,Uint8Array))B+Z.length>h.length?(A.isBuffer(Z)||(Z=A.from(Z)),Z.copy(h,B)):Uint8Array.prototype.set.call(h,Z,B);else if(A.isBuffer(Z))Z.copy(h,B);else throw new TypeError('"list" argument must be an Array of Buffers');B+=Z.length}return h};function R(p,c){if(A.isBuffer(p))return p.length;if(ArrayBuffer.isView(p)||gt(p,ArrayBuffer))return p.byteLength;if(typeof p!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof p);let g=p.length,m=arguments.length>2&&arguments[2]===!0;if(!m&&g===0)return 0;let h=!1;for(;;)switch(c){case"ascii":case"latin1":case"binary":return g;case"utf8":case"utf-8":return xi(p).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return g*2;case"hex":return g>>>1;case"base64":return xr(p).length;default:if(h)return m?-1:xi(p).length;c=(""+c).toLowerCase(),h=!0}}A.byteLength=R;function P(p,c,g){let m=!1;if((c===void 0||c<0)&&(c=0),c>this.length||((g===void 0||g>this.length)&&(g=this.length),g<=0)||(g>>>=0,c>>>=0,g<=c))return"";for(p||(p="utf8");;)switch(p){case"hex":return xe(this,c,g);case"utf8":case"utf-8":return ce(this,c,g);case"ascii":return be(this,c,g);case"latin1":case"binary":return Ce(this,c,g);case"base64":return ne(this,c,g);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,c,g);default:if(m)throw new TypeError("Unknown encoding: "+p);p=(p+"").toLowerCase(),m=!0}}A.prototype._isBuffer=!0;function V(p,c,g){let m=p[c];p[c]=p[g],p[g]=m}A.prototype.swap16=function(){let c=this.length;if(c%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let g=0;g<c;g+=2)V(this,g,g+1);return this},A.prototype.swap32=function(){let c=this.length;if(c%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(let g=0;g<c;g+=4)V(this,g,g+3),V(this,g+1,g+2);return this},A.prototype.swap64=function(){let c=this.length;if(c%8!==0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(let g=0;g<c;g+=8)V(this,g,g+7),V(this,g+1,g+6),V(this,g+2,g+5),V(this,g+3,g+4);return this},A.prototype.toString=function(){let c=this.length;return c===0?"":arguments.length===0?ce(this,0,c):P.apply(this,arguments)},A.prototype.toLocaleString=A.prototype.toString,A.prototype.equals=function(c){if(!A.isBuffer(c))throw new TypeError("Argument must be a Buffer");return this===c?!0:A.compare(this,c)===0},A.prototype.inspect=function(){let c="",g=Jt.INSPECT_MAX_BYTES;return c=this.toString("hex",0,g).replace(/(.{2})/g,"$1 ").trim(),this.length>g&&(c+=" ... "),"<Buffer "+c+">"},i&&(A.prototype[i]=A.prototype.inspect),A.prototype.compare=function(c,g,m,h,B){if(gt(c,Uint8Array)&&(c=A.from(c,c.offset,c.byteLength)),!A.isBuffer(c))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof c);if(g===void 0&&(g=0),m===void 0&&(m=c?c.length:0),h===void 0&&(h=0),B===void 0&&(B=this.length),g<0||m>c.length||h<0||B>this.length)throw new RangeError("out of range index");if(h>=B&&g>=m)return 0;if(h>=B)return-1;if(g>=m)return 1;if(g>>>=0,m>>>=0,h>>>=0,B>>>=0,this===c)return 0;let Z=B-h,U=m-g,Ie=Math.min(Z,U),ye=this.slice(h,B),he=c.slice(g,m);for(let le=0;le<Ie;++le)if(ye[le]!==he[le]){Z=ye[le],U=he[le];break}return Z<U?-1:U<Z?1:0};function S(p,c,g,m,h){if(p.length===0)return-1;if(typeof g=="string"?(m=g,g=0):g>2147483647?g=2147483647:g<-2147483648&&(g=-2147483648),g=+g,Hi(g)&&(g=h?0:p.length-1),g<0&&(g=p.length+g),g>=p.length){if(h)return-1;g=p.length-1}else if(g<0)if(h)g=0;else return-1;if(typeof c=="string"&&(c=A.from(c,m)),A.isBuffer(c))return c.length===0?-1:M(p,c,g,m,h);if(typeof c=="number")return c=c&255,typeof Uint8Array.prototype.indexOf=="function"?h?Uint8Array.prototype.indexOf.call(p,c,g):Uint8Array.prototype.lastIndexOf.call(p,c,g):M(p,[c],g,m,h);throw new TypeError("val must be string, number or Buffer")}function M(p,c,g,m,h){let B=1,Z=p.length,U=c.length;if(m!==void 0&&(m=String(m).toLowerCase(),m==="ucs2"||m==="ucs-2"||m==="utf16le"||m==="utf-16le")){if(p.length<2||c.length<2)return-1;B=2,Z/=2,U/=2,g/=2}function Ie(he,le){return B===1?he[le]:he.readUInt16BE(le*B)}let ye;if(h){let he=-1;for(ye=g;ye<Z;ye++)if(Ie(p,ye)===Ie(c,he===-1?0:ye-he)){if(he===-1&&(he=ye),ye-he+1===U)return he*B}else he!==-1&&(ye-=ye-he),he=-1}else for(g+U>Z&&(g=Z-U),ye=g;ye>=0;ye--){let he=!0;for(let le=0;le<U;le++)if(Ie(p,ye+le)!==Ie(c,le)){he=!1;break}if(he)return ye}return-1}A.prototype.includes=function(c,g,m){return this.indexOf(c,g,m)!==-1},A.prototype.indexOf=function(c,g,m){return S(this,c,g,m,!0)},A.prototype.lastIndexOf=function(c,g,m){return S(this,c,g,m,!1)};function x(p,c,g,m){g=Number(g)||0;let h=p.length-g;m?(m=Number(m),m>h&&(m=h)):m=h;let B=c.length;m>B/2&&(m=B/2);let Z;for(Z=0;Z<m;++Z){let U=parseInt(c.substr(Z*2,2),16);if(Hi(U))return Z;p[g+Z]=U}return Z}function oe(p,c,g,m){return la(xi(c,p.length-g),p,g,m)}function se(p,c,g,m){return la(Gs(c),p,g,m)}function Ae(p,c,g,m){return la(xr(c),p,g,m)}function ae(p,c,g,m){return la(Vs(c,p.length-g),p,g,m)}A.prototype.write=function(c,g,m,h){if(g===void 0)h="utf8",m=this.length,g=0;else if(m===void 0&&typeof g=="string")h=g,m=this.length,g=0;else if(isFinite(g))g=g>>>0,isFinite(m)?(m=m>>>0,h===void 0&&(h="utf8")):(h=m,m=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let B=this.length-g;if((m===void 0||m>B)&&(m=B),c.length>0&&(m<0||g<0)||g>this.length)throw new RangeError("Attempt to write outside buffer bounds");h||(h="utf8");let Z=!1;for(;;)switch(h){case"hex":return x(this,c,g,m);case"utf8":case"utf-8":return oe(this,c,g,m);case"ascii":case"latin1":case"binary":return se(this,c,g,m);case"base64":return Ae(this,c,g,m);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ae(this,c,g,m);default:if(Z)throw new TypeError("Unknown encoding: "+h);h=(""+h).toLowerCase(),Z=!0}},A.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function ne(p,c,g){return c===0&&g===p.length?o.fromByteArray(p):o.fromByteArray(p.slice(c,g))}function ce(p,c,g){g=Math.min(p.length,g);let m=[],h=c;for(;h<g;){let B=p[h],Z=null,U=B>239?4:B>223?3:B>191?2:1;if(h+U<=g){let Ie,ye,he,le;switch(U){case 1:B<128&&(Z=B);break;case 2:Ie=p[h+1],(Ie&192)===128&&(le=(B&31)<<6|Ie&63,le>127&&(Z=le));break;case 3:Ie=p[h+1],ye=p[h+2],(Ie&192)===128&&(ye&192)===128&&(le=(B&15)<<12|(Ie&63)<<6|ye&63,le>2047&&(le<55296||le>57343)&&(Z=le));break;case 4:Ie=p[h+1],ye=p[h+2],he=p[h+3],(Ie&192)===128&&(ye&192)===128&&(he&192)===128&&(le=(B&15)<<18|(Ie&63)<<12|(ye&63)<<6|he&63,le>65535&&le<1114112&&(Z=le))}}Z===null?(Z=65533,U=1):Z>65535&&(Z-=65536,m.push(Z>>>10&1023|55296),Z=56320|Z&1023),m.push(Z),h+=U}return Be(m)}let ge=4096;function Be(p){let c=p.length;if(c<=ge)return String.fromCharCode.apply(String,p);let g="",m=0;for(;m<c;)g+=String.fromCharCode.apply(String,p.slice(m,m+=ge));return g}function be(p,c,g){let m="";g=Math.min(p.length,g);for(let h=c;h<g;++h)m+=String.fromCharCode(p[h]&127);return m}function Ce(p,c,g){let m="";g=Math.min(p.length,g);for(let h=c;h<g;++h)m+=String.fromCharCode(p[h]);return m}function xe(p,c,g){let m=p.length;(!c||c<0)&&(c=0),(!g||g<0||g>m)&&(g=m);let h="";for(let B=c;B<g;++B)h+=Xs[p[B]];return h}function E(p,c,g){let m=p.slice(c,g),h="";for(let B=0;B<m.length-1;B+=2)h+=String.fromCharCode(m[B]+m[B+1]*256);return h}A.prototype.slice=function(c,g){let m=this.length;c=~~c,g=g===void 0?m:~~g,c<0?(c+=m,c<0&&(c=0)):c>m&&(c=m),g<0?(g+=m,g<0&&(g=0)):g>m&&(g=m),g<c&&(g=c);let h=this.subarray(c,g);return Object.setPrototypeOf(h,A.prototype),h};function Ye(p,c,g){if(p%1!==0||p<0)throw new RangeError("offset is not uint");if(p+c>g)throw new RangeError("Trying to access beyond buffer length")}A.prototype.readUintLE=A.prototype.readUIntLE=function(c,g,m){c=c>>>0,g=g>>>0,m||Ye(c,g,this.length);let h=this[c],B=1,Z=0;for(;++Z<g&&(B*=256);)h+=this[c+Z]*B;return h},A.prototype.readUintBE=A.prototype.readUIntBE=function(c,g,m){c=c>>>0,g=g>>>0,m||Ye(c,g,this.length);let h=this[c+--g],B=1;for(;g>0&&(B*=256);)h+=this[c+--g]*B;return h},A.prototype.readUint8=A.prototype.readUInt8=function(c,g){return c=c>>>0,g||Ye(c,1,this.length),this[c]},A.prototype.readUint16LE=A.prototype.readUInt16LE=function(c,g){return c=c>>>0,g||Ye(c,2,this.length),this[c]|this[c+1]<<8},A.prototype.readUint16BE=A.prototype.readUInt16BE=function(c,g){return c=c>>>0,g||Ye(c,2,this.length),this[c]<<8|this[c+1]},A.prototype.readUint32LE=A.prototype.readUInt32LE=function(c,g){return c=c>>>0,g||Ye(c,4,this.length),(this[c]|this[c+1]<<8|this[c+2]<<16)+this[c+3]*16777216},A.prototype.readUint32BE=A.prototype.readUInt32BE=function(c,g){return c=c>>>0,g||Ye(c,4,this.length),this[c]*16777216+(this[c+1]<<16|this[c+2]<<8|this[c+3])},A.prototype.readBigUInt64LE=Nt(function(c){c=c>>>0,rn(c,"offset");let g=this[c],m=this[c+7];(g===void 0||m===void 0)&&wn(c,this.length-8);let h=g+this[++c]*2**8+this[++c]*2**16+this[++c]*2**24,B=this[++c]+this[++c]*2**8+this[++c]*2**16+m*2**24;return BigInt(h)+(BigInt(B)<<BigInt(32))}),A.prototype.readBigUInt64BE=Nt(function(c){c=c>>>0,rn(c,"offset");let g=this[c],m=this[c+7];(g===void 0||m===void 0)&&wn(c,this.length-8);let h=g*2**24+this[++c]*2**16+this[++c]*2**8+this[++c],B=this[++c]*2**24+this[++c]*2**16+this[++c]*2**8+m;return(BigInt(h)<<BigInt(32))+BigInt(B)}),A.prototype.readIntLE=function(c,g,m){c=c>>>0,g=g>>>0,m||Ye(c,g,this.length);let h=this[c],B=1,Z=0;for(;++Z<g&&(B*=256);)h+=this[c+Z]*B;return B*=128,h>=B&&(h-=Math.pow(2,8*g)),h},A.prototype.readIntBE=function(c,g,m){c=c>>>0,g=g>>>0,m||Ye(c,g,this.length);let h=g,B=1,Z=this[c+--h];for(;h>0&&(B*=256);)Z+=this[c+--h]*B;return B*=128,Z>=B&&(Z-=Math.pow(2,8*g)),Z},A.prototype.readInt8=function(c,g){return c=c>>>0,g||Ye(c,1,this.length),this[c]&128?(255-this[c]+1)*-1:this[c]},A.prototype.readInt16LE=function(c,g){c=c>>>0,g||Ye(c,2,this.length);let m=this[c]|this[c+1]<<8;return m&32768?m|4294901760:m},A.prototype.readInt16BE=function(c,g){c=c>>>0,g||Ye(c,2,this.length);let m=this[c+1]|this[c]<<8;return m&32768?m|4294901760:m},A.prototype.readInt32LE=function(c,g){return c=c>>>0,g||Ye(c,4,this.length),this[c]|this[c+1]<<8|this[c+2]<<16|this[c+3]<<24},A.prototype.readInt32BE=function(c,g){return c=c>>>0,g||Ye(c,4,this.length),this[c]<<24|this[c+1]<<16|this[c+2]<<8|this[c+3]},A.prototype.readBigInt64LE=Nt(function(c){c=c>>>0,rn(c,"offset");let g=this[c],m=this[c+7];(g===void 0||m===void 0)&&wn(c,this.length-8);let h=this[c+4]+this[c+5]*2**8+this[c+6]*2**16+(m<<24);return(BigInt(h)<<BigInt(32))+BigInt(g+this[++c]*2**8+this[++c]*2**16+this[++c]*2**24)}),A.prototype.readBigInt64BE=Nt(function(c){c=c>>>0,rn(c,"offset");let g=this[c],m=this[c+7];(g===void 0||m===void 0)&&wn(c,this.length-8);let h=(g<<24)+this[++c]*2**16+this[++c]*2**8+this[++c];return(BigInt(h)<<BigInt(32))+BigInt(this[++c]*2**24+this[++c]*2**16+this[++c]*2**8+m)}),A.prototype.readFloatLE=function(c,g){return c=c>>>0,g||Ye(c,4,this.length),a.read(this,c,!0,23,4)},A.prototype.readFloatBE=function(c,g){return c=c>>>0,g||Ye(c,4,this.length),a.read(this,c,!1,23,4)},A.prototype.readDoubleLE=function(c,g){return c=c>>>0,g||Ye(c,8,this.length),a.read(this,c,!0,52,8)},A.prototype.readDoubleBE=function(c,g){return c=c>>>0,g||Ye(c,8,this.length),a.read(this,c,!1,52,8)};function He(p,c,g,m,h,B){if(!A.isBuffer(p))throw new TypeError('"buffer" argument must be a Buffer instance');if(c>h||c<B)throw new RangeError('"value" argument is out of bounds');if(g+m>p.length)throw new RangeError("Index out of range")}A.prototype.writeUintLE=A.prototype.writeUIntLE=function(c,g,m,h){if(c=+c,g=g>>>0,m=m>>>0,!h){let U=Math.pow(2,8*m)-1;He(this,c,g,m,U,0)}let B=1,Z=0;for(this[g]=c&255;++Z<m&&(B*=256);)this[g+Z]=c/B&255;return g+m},A.prototype.writeUintBE=A.prototype.writeUIntBE=function(c,g,m,h){if(c=+c,g=g>>>0,m=m>>>0,!h){let U=Math.pow(2,8*m)-1;He(this,c,g,m,U,0)}let B=m-1,Z=1;for(this[g+B]=c&255;--B>=0&&(Z*=256);)this[g+B]=c/Z&255;return g+m},A.prototype.writeUint8=A.prototype.writeUInt8=function(c,g,m){return c=+c,g=g>>>0,m||He(this,c,g,1,255,0),this[g]=c&255,g+1},A.prototype.writeUint16LE=A.prototype.writeUInt16LE=function(c,g,m){return c=+c,g=g>>>0,m||He(this,c,g,2,65535,0),this[g]=c&255,this[g+1]=c>>>8,g+2},A.prototype.writeUint16BE=A.prototype.writeUInt16BE=function(c,g,m){return c=+c,g=g>>>0,m||He(this,c,g,2,65535,0),this[g]=c>>>8,this[g+1]=c&255,g+2},A.prototype.writeUint32LE=A.prototype.writeUInt32LE=function(c,g,m){return c=+c,g=g>>>0,m||He(this,c,g,4,4294967295,0),this[g+3]=c>>>24,this[g+2]=c>>>16,this[g+1]=c>>>8,this[g]=c&255,g+4},A.prototype.writeUint32BE=A.prototype.writeUInt32BE=function(c,g,m){return c=+c,g=g>>>0,m||He(this,c,g,4,4294967295,0),this[g]=c>>>24,this[g+1]=c>>>16,this[g+2]=c>>>8,this[g+3]=c&255,g+4};function Vr(p,c,g,m,h){Mr(c,m,h,p,g,7);let B=Number(c&BigInt(4294967295));p[g++]=B,B=B>>8,p[g++]=B,B=B>>8,p[g++]=B,B=B>>8,p[g++]=B;let Z=Number(c>>BigInt(32)&BigInt(4294967295));return p[g++]=Z,Z=Z>>8,p[g++]=Z,Z=Z>>8,p[g++]=Z,Z=Z>>8,p[g++]=Z,g}function Xr(p,c,g,m,h){Mr(c,m,h,p,g,7);let B=Number(c&BigInt(4294967295));p[g+7]=B,B=B>>8,p[g+6]=B,B=B>>8,p[g+5]=B,B=B>>8,p[g+4]=B;let Z=Number(c>>BigInt(32)&BigInt(4294967295));return p[g+3]=Z,Z=Z>>8,p[g+2]=Z,Z=Z>>8,p[g+1]=Z,Z=Z>>8,p[g]=Z,g+8}A.prototype.writeBigUInt64LE=Nt(function(c,g=0){return Vr(this,c,g,BigInt(0),BigInt("0xffffffffffffffff"))}),A.prototype.writeBigUInt64BE=Nt(function(c,g=0){return Xr(this,c,g,BigInt(0),BigInt("0xffffffffffffffff"))}),A.prototype.writeIntLE=function(c,g,m,h){if(c=+c,g=g>>>0,!h){let Ie=Math.pow(2,8*m-1);He(this,c,g,m,Ie-1,-Ie)}let B=0,Z=1,U=0;for(this[g]=c&255;++B<m&&(Z*=256);)c<0&&U===0&&this[g+B-1]!==0&&(U=1),this[g+B]=(c/Z>>0)-U&255;return g+m},A.prototype.writeIntBE=function(c,g,m,h){if(c=+c,g=g>>>0,!h){let Ie=Math.pow(2,8*m-1);He(this,c,g,m,Ie-1,-Ie)}let B=m-1,Z=1,U=0;for(this[g+B]=c&255;--B>=0&&(Z*=256);)c<0&&U===0&&this[g+B+1]!==0&&(U=1),this[g+B]=(c/Z>>0)-U&255;return g+m},A.prototype.writeInt8=function(c,g,m){return c=+c,g=g>>>0,m||He(this,c,g,1,127,-128),c<0&&(c=255+c+1),this[g]=c&255,g+1},A.prototype.writeInt16LE=function(c,g,m){return c=+c,g=g>>>0,m||He(this,c,g,2,32767,-32768),this[g]=c&255,this[g+1]=c>>>8,g+2},A.prototype.writeInt16BE=function(c,g,m){return c=+c,g=g>>>0,m||He(this,c,g,2,32767,-32768),this[g]=c>>>8,this[g+1]=c&255,g+2},A.prototype.writeInt32LE=function(c,g,m){return c=+c,g=g>>>0,m||He(this,c,g,4,2147483647,-2147483648),this[g]=c&255,this[g+1]=c>>>8,this[g+2]=c>>>16,this[g+3]=c>>>24,g+4},A.prototype.writeInt32BE=function(c,g,m){return c=+c,g=g>>>0,m||He(this,c,g,4,2147483647,-2147483648),c<0&&(c=4294967295+c+1),this[g]=c>>>24,this[g+1]=c>>>16,this[g+2]=c>>>8,this[g+3]=c&255,g+4},A.prototype.writeBigInt64LE=Nt(function(c,g=0){return Vr(this,c,g,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),A.prototype.writeBigInt64BE=Nt(function(c,g=0){return Xr(this,c,g,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function Pr(p,c,g,m,h,B){if(g+m>p.length)throw new RangeError("Index out of range");if(g<0)throw new RangeError("Index out of range")}function Sr(p,c,g,m,h){return c=+c,g=g>>>0,h||Pr(p,c,g,4),a.write(p,c,g,m,23,4),g+4}A.prototype.writeFloatLE=function(c,g,m){return Sr(this,c,g,!0,m)},A.prototype.writeFloatBE=function(c,g,m){return Sr(this,c,g,!1,m)};function kr(p,c,g,m,h){return c=+c,g=g>>>0,h||Pr(p,c,g,8),a.write(p,c,g,m,52,8),g+8}A.prototype.writeDoubleLE=function(c,g,m){return kr(this,c,g,!0,m)},A.prototype.writeDoubleBE=function(c,g,m){return kr(this,c,g,!1,m)},A.prototype.copy=function(c,g,m,h){if(!A.isBuffer(c))throw new TypeError("argument should be a Buffer");if(m||(m=0),!h&&h!==0&&(h=this.length),g>=c.length&&(g=c.length),g||(g=0),h>0&&h<m&&(h=m),h===m||c.length===0||this.length===0)return 0;if(g<0)throw new RangeError("targetStart out of bounds");if(m<0||m>=this.length)throw new RangeError("Index out of range");if(h<0)throw new RangeError("sourceEnd out of bounds");h>this.length&&(h=this.length),c.length-g<h-m&&(h=c.length-g+m);let B=h-m;return this===c&&typeof Uint8Array.prototype.copyWithin=="function"?this.copyWithin(g,m,h):Uint8Array.prototype.set.call(c,this.subarray(m,h),g),B},A.prototype.fill=function(c,g,m,h){if(typeof c=="string"){if(typeof g=="string"?(h=g,g=0,m=this.length):typeof m=="string"&&(h=m,m=this.length),h!==void 0&&typeof h!="string")throw new TypeError("encoding must be a string");if(typeof h=="string"&&!A.isEncoding(h))throw new TypeError("Unknown encoding: "+h);if(c.length===1){let Z=c.charCodeAt(0);(h==="utf8"&&Z<128||h==="latin1")&&(c=Z)}}else typeof c=="number"?c=c&255:typeof c=="boolean"&&(c=Number(c));if(g<0||this.length<g||this.length<m)throw new RangeError("Out of range index");if(m<=g)return this;g=g>>>0,m=m===void 0?this.length:m>>>0,c||(c=0);let B;if(typeof c=="number")for(B=g;B<m;++B)this[B]=c;else{let Z=A.isBuffer(c)?c:A.from(c,h),U=Z.length;if(U===0)throw new TypeError('The value "'+c+'" is invalid for argument "value"');for(B=0;B<m-g;++B)this[B+g]=Z[B%U]}return this};let an={};function Mi(p,c,g){an[p]=class extends g{constructor(){super(),Object.defineProperty(this,"message",{value:c.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${p}]`,this.stack,delete this.name}get code(){return p}set code(h){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:h,writable:!0})}toString(){return`${this.name} [${p}]: ${this.message}`}}}Mi("ERR_BUFFER_OUT_OF_BOUNDS",function(p){return p?`${p} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"},RangeError),Mi("ERR_INVALID_ARG_TYPE",function(p,c){return`The "${p}" argument must be of type number. Received type ${typeof c}`},TypeError),Mi("ERR_OUT_OF_RANGE",function(p,c,g){let m=`The value of "${p}" is out of range.`,h=g;return Number.isInteger(g)&&Math.abs(g)>2**32?h=Lr(String(g)):typeof g=="bigint"&&(h=String(g),(g>BigInt(2)**BigInt(32)||g<-(BigInt(2)**BigInt(32)))&&(h=Lr(h)),h+="n"),m+=` It must be ${c}. Received ${h}`,m},RangeError);function Lr(p){let c="",g=p.length,m=p[0]==="-"?1:0;for(;g>=m+4;g-=3)c=`_${p.slice(g-3,g)}${c}`;return`${p.slice(0,g)}${c}`}function Fs(p,c,g){rn(c,"offset"),(p[c]===void 0||p[c+g]===void 0)&&wn(c,p.length-(g+1))}function Mr(p,c,g,m,h,B){if(p>g||p<c){let Z=typeof c=="bigint"?"n":"",U;throw c===0||c===BigInt(0)?U=`>= 0${Z} and < 2${Z} ** ${(B+1)*8}${Z}`:U=`>= -(2${Z} ** ${(B+1)*8-1}${Z}) and < 2 ** ${(B+1)*8-1}${Z}`,new an.ERR_OUT_OF_RANGE("value",U,p)}Fs(m,h,B)}function rn(p,c){if(typeof p!="number")throw new an.ERR_INVALID_ARG_TYPE(c,"number",p)}function wn(p,c,g){throw Math.floor(p)!==p?(rn(p,g),new an.ERR_OUT_OF_RANGE("offset","an integer",p)):c<0?new an.ERR_BUFFER_OUT_OF_BOUNDS:new an.ERR_OUT_OF_RANGE("offset",`>= 0 and <= ${c}`,p)}let Ns=/[^+/0-9A-Za-z-_]/g;function Zs(p){if(p=p.split("=")[0],p=p.trim().replace(Ns,""),p.length<2)return"";for(;p.length%4!==0;)p=p+"=";return p}function xi(p,c){c=c||1/0;let g,m=p.length,h=null,B=[];for(let Z=0;Z<m;++Z){if(g=p.charCodeAt(Z),g>55295&&g<57344){if(!h){if(g>56319){(c-=3)>-1&&B.push(239,191,189);continue}else if(Z+1===m){(c-=3)>-1&&B.push(239,191,189);continue}h=g;continue}if(g<56320){(c-=3)>-1&&B.push(239,191,189),h=g;continue}g=(h-55296<<10|g-56320)+65536}else h&&(c-=3)>-1&&B.push(239,191,189);if(h=null,g<128){if((c-=1)<0)break;B.push(g)}else if(g<2048){if((c-=2)<0)break;B.push(g>>6|192,g&63|128)}else if(g<65536){if((c-=3)<0)break;B.push(g>>12|224,g>>6&63|128,g&63|128)}else if(g<1114112){if((c-=4)<0)break;B.push(g>>18|240,g>>12&63|128,g>>6&63|128,g&63|128)}else throw new Error("Invalid code point")}return B}function Gs(p){let c=[];for(let g=0;g<p.length;++g)c.push(p.charCodeAt(g)&255);return c}function Vs(p,c){let g,m,h,B=[];for(let Z=0;Z<p.length&&!((c-=2)<0);++Z)g=p.charCodeAt(Z),m=g>>8,h=g%256,B.push(h),B.push(m);return B}function xr(p){return o.toByteArray(Zs(p))}function la(p,c,g,m){let h;for(h=0;h<m&&!(h+g>=c.length||h>=p.length);++h)c[h+g]=p[h];return h}function gt(p,c){return p instanceof c||p!=null&&p.constructor!=null&&p.constructor.name!=null&&p.constructor.name===c.name}function Hi(p){return p!==p}let Xs=(function(){let p="0123456789abcdef",c=new Array(256);for(let g=0;g<16;++g){let m=g*16;for(let h=0;h<16;++h)c[m+h]=p[g]+p[h]}return c})();function Nt(p){return typeof BigInt>"u"?Ps:p}function Ps(){throw new Error("BigInt not supported")}return Jt}var jt=Qr();jt.Buffer;jt.SlowBuffer;jt.INSPECT_MAX_BYTES;jt.kMaxLength;var I=jt.Buffer,vg=jt.INSPECT_MAX_BYTES,fg=jt.kMaxLength;var ua={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"https://lite-api.jup.ag/swap/v1",wormholeMessengerProgramId:"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",solanaLookUpTable:"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj",sorobanNetworkPassphrase:"Public Global Stellar Network ; September 2015",tronJsonRpc:"https://api.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpV2TransmitterProgramId:"CCTPV2Sm4AdWt5296sk4P66VBZ7bEhcARwFaaS9YPbeC",cctpV2TokenMessengerMinter:"CCTPV2vPZJS2u2BBsUoscuikbYjnpFmbFsvVuJdgUMQe",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7,SUI:8}},cachePoolInfoChainSec:20},Fg={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},Ng={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org",SUI:"https://fullnode.mainnet.sui.io",STX:"https://api.hiro.so"};import{AlgorandClient as ns}from"@algorandfoundation/algokit-utils";import{TronWeb as HA}from"tronweb";import{Web3 as JA}from"web3";var ve=class extends Error{errorCode;constructor(a,i){super(i),this.errorCode=a}},w=class extends ve{constructor(a){super("SdkError",a)}},lt=class extends ve{constructor(a){super("InvalidAmountError",a)}},vt=class extends ve{constructor(a){super("AmountNotEnoughError",a)}},ft=class extends ve{constructor(a){super("InsufficientPoolLiquidityError",a)}},Ge=class extends ve{constructor(a){super("JupiterError",a)}},Zt=class extends ve{constructor(a){super("InvalidGasFeePaymentOptionError",a)}},ma=class extends ve{constructor(a){super("InvalidMessengerOptionError",a)}},K=class extends ve{constructor(a){super("MethodNotSupportedError",a)}},Zn=class extends ve{constructor(a){super("VerifyTxError",a)}},on=class extends ve{constructor(a){super("InvalidTxError",a)}},ba=class extends ve{constructor(a){super("ExtraGasMaxLimitExceededError",a)}},ya=class extends ve{constructor(a,i,r){super("ArgumentInvalidDecimalsError",`Argument '${a}' decimals '${i}' cannot be greater than '${r}'`)}},Gn=class extends ve{constructor(a){super("TimeoutError",a)}},Ca=class extends ve{constructor(a){super("NodeRpcUrlNotInitializedError",`For chain '${a}' Node RPC URL not initialized`)}},We=class extends ve{constructor(a){super("CCTPDoesNotSupportedError",a)}},Ve=class extends ve{constructor(a){super("OFTDoesNotSupportedError",a)}},Ia=class extends ve{constructor(a){super("YieldDoesNotSupportedError",a)}},ha=class extends ve{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},Hs=(R=>(R.SDK_ERROR="SdkError",R.INVALID_AMOUNT_ERROR="InvalidAmountError",R.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",R.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",R.JUPITER_ERROR="JupiterError",R.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",R.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",R.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",R.VERIFY_TX_ERROR="VerifyTxError",R.INVALID_TX_ERROR="InvalidTxError",R.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",R.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",R.TIMEOUT_ERROR="TimeoutError",R.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",R.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",R.OFT_DOES_NOT_SUPPORTED_ERROR="OFTDoesNotSupportedError",R.YIELD_DOES_NOT_SUPPORTED_ERROR="YieldDoesNotSupportedError",R.TX_TOO_LARGE="TxTooLargeError",R))(Hs||{});var qe=(R=>(R.BSC="BSC",R.ETH="ETH",R.BAS="BAS",R.SOL="SOL",R.TRX="TRX",R.POL="POL",R.ARB="ARB",R.CEL="CEL",R.AVA="AVA",R.SRB="SRB",R.STLR="STLR",R.OPT="OPT",R.SUI="SUI",R.SNC="SNC",R.UNI="UNI",R.LIN="LIN",R.ALG="ALG",R.STX="STX",R))(qe||{}),_=(l=>(l.EVM="EVM",l.SOLANA="SOLANA",l.TRX="TRX",l.SRB="SRB",l.SUI="SUI",l.ALG="ALG",l.STX="STX",l))(_||{});var Js={EVM:18,SOLANA:9,TRX:6,SRB:7,SUI:9,ALG:6,STX:6},js={BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SNC:{chainSymbol:"SNC",chainId:"0x92",name:"Sonic",chainType:"EVM"},UNI:{chainSymbol:"UNI",chainId:"0x82",name:"Unichain",chainType:"EVM"},LIN:{chainSymbol:"LIN",chainId:"0xe708",name:"Linea",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"},SUI:{chainSymbol:"SUI",name:"Sui",chainType:"SUI"},ALG:{chainSymbol:"ALG",name:"Algorand",chainType:"ALG"},STX:{chainSymbol:"STX",name:"Stacks",chainType:"STX"}},Q=(()=>{let o={...js};return{addChainsProperties(a){o={...o,...a}},getChainProperty(a){let i=o[a];if(!i)throw new w(`Cannot find chain properties for ${a}`);return i},getChainsProperties(){return o},getChainDecimalsByType(a){return Js[a]}}})();import{Big as Ji}from"big.js";function re(o,a){throw new Error(a??`Unexpected value: ${o}`)}async function Ne(o,a){return await o.getPoolInfoByKey({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress})}function $(o){if(Ji(o).lte(0))throw new lt("Amount must be greater than zero")}function ji(o){if(Ji(o).lt(0))throw new lt("Amount must be greater or equal than zero")}function D(o,a,i){let r=Ji(a).toFixed(),[s,d]=r.split(".");if(d&&d.length>i)throw new ya(o,d.length,i)}async function va(o,a,i){return await Promise.race([o,new Promise((r,s)=>{setTimeout(()=>s(new Gn(a)),i)})])}async function zi(o,a,i,r){if(i<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${i} was received.`);let s=0;for(;;)try{return await va(o(),a,r)}catch{if(++s>=i)throw new Gn(a)}}async function Ur(o,a,i,r=1.5,s=!1){let d=[],A=0,l=await o();if(d.push(l),!a(l))return d;let u=new Date(Date.now()+i*1e3).valueOf(),b=1e3,y=b;for(;Date.now()<u;){let C=d[d.length-1];if(C===void 0||!a(C))break;A++,s&&console.info(`Waiting ${b}ms before trying again (bringing the total wait time to ${y}ms so far, of total ${i*1e3}ms)`),await new Promise(v=>setTimeout(v,b)),b=b*r,new Date(Date.now()+b).valueOf()>u&&(b=u-Date.now(),s&&console.info(`was gonna wait too long; new waitTime: ${b}ms`)),y=b+y;let f=await o(C);d.push(f),s&&a(f)&&console.info(`${A}. Called ${o.name}; ${d.length} prev attempts. Most recent: ${JSON.stringify(d[d.length-1],null,2)}`)}return d}import{SigningAccount as sd}from"@algorandfoundation/algokit-utils/types/account";import{AlgoAmount as dd}from"@algorandfoundation/algokit-utils/types/amount";import Ad,{Address as ro}from"algosdk";import{getArc56ReturnValue as zs}from"@algorandfoundation/algokit-utils/types/app-arc56";import{AppClient as fa}from"@algorandfoundation/algokit-utils/types/app-client";import{AppFactory as wl}from"@algorandfoundation/algokit-utils/types/app-factory";var Ra={name:"Bridge",structs:{},methods:[{name:"createApplication",args:[{type:"address",name:"owner"},{type:"byte",name:"chainId"},{type:"uint64",name:"messenger"},{type:"uint64",name:"gasOracle"}],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}},{name:"optInAsset",args:[{type:"uint64",name:"asset"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"swapAndBridge",args:[{type:"pay",name:"paymentRef"},{type:"axfer",name:"assetTransferRef"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAA+g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"feeFromNative"},{type:"uint64",name:"feeFromStable"},{type:"uint64",name:"feeStableTokenAmount"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]}],recommendations:{}},{name:"swapAndBridgeWithStable",args:[{type:"axfer",name:"assetTransferRef"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"feeTokenAmount"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAA+g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"feeFromNative"},{type:"uint64",name:"feeFromStable"},{type:"uint64",name:"feeStableTokenAmount"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]}],recommendations:{}},{name:"receiveTokens",args:[{type:"pay",name:"paymentRef"},{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"sourceChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"receiveAmountMin"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"TokensReceived",args:[{type:"uint64",name:"receiveAmount"},{type:"address",name:"recipient"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"},{type:"byte[32]",name:"message"}]}],recommendations:{}},{name:"registerBridge",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"bridgeAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"addBridgeToken",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"tokenAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"removeBridgeToken",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"tokenAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"withdrawGasTokens",args:[{type:"uint64",name:"amount"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"withdrawBridgingFeeInTokens",args:[{type:"uint64",name:"asset"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getBridgingCostInTokens",args:[{type:"byte",name:"destinationChainId"},{type:"uint64",name:"asset"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"hashMessage",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"sourceChainId"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"}],returns:{type:"byte[32]"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"isOtherBridgeTokenSupported",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"token"}],returns:{type:"bool"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getTransactionCost",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getReceiveTokensCost",args:[],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getSendTransactionStorageCost",args:[],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"swap",args:[{type:"axfer",name:"assetTransferRef",desc:"The token to be swapped."},{type:"uint64",name:"receiveAsset",desc:"The token to receive in exchange for the swapped token."},{type:"address",name:"recipient",desc:"The address to receive the tokens."},{type:"uint64",name:"receiveAmountMin",desc:"The minimum amount of tokens required to receive during the swap."},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAA+g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"Swapped",args:[{type:"address",name:"sender"},{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"receiveTokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"receivedAmount"}]}],recommendations:{}},{name:"addPool",args:[{type:"uint64",name:"poolId",desc:"The address of the `Pool` contract."},{type:"uint64",name:"asset",desc:"The address of the token in the liquidity pool."}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"removePool",args:[{type:"uint64",name:"tokenId"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"stopSwap",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"startSwap",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setStopAuthority",args:[{type:"address",name:"stopAuthority"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setRebalancer",args:[{type:"address",name:"rebalancer"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getGasUsage",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"setGasUsage",args:[{type:"byte",name:"chainId"},{type:"uint64",name:"gasAmount"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setGasOracle",args:[{type:"uint64",name:"gasOracle"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getTransactionRelayerCost",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"transferOwnership",args:[{type:"address",name:"newOwner"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}}],arcs:[22,28],networks:{},state:{schema:{global:{ints:3,bytes:4},local:{ints:0,bytes:0}},keys:{global:{chainId:{keyType:"AVMString",valueType:"byte",key:"Y2hhaW5JZA=="},messenger:{keyType:"AVMString",valueType:"AVMUint64",key:"bWVzc2VuZ2Vy"},stopAuthority:{keyType:"AVMString",valueType:"address",key:"c3RvcEF1dGhvcml0eQ=="},rebalancer:{keyType:"AVMString",valueType:"address",key:"cmViYWxhbmNlcg=="},canSwap:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuU3dhcA=="},gasOracle:{keyType:"AVMString",valueType:"AVMUint64",key:"Z2FzT3JhY2xl"},owner:{keyType:"AVMString",valueType:"address",key:"b3duZXI="}},local:{},box:{}},maps:{global:{},local:{},box:{processedMessages:{keyType:"byte[32]",valueType:"byte[0]",prefix:"bQ=="},sentMessages:{keyType:"byte[32]",valueType:"byte[0]",prefix:"cw=="},otherBridges:{keyType:"byte",valueType:"byte[32]",prefix:"Yg=="},otherBridgeTokens:{keyType:"AVMBytes",valueType:"byte[0]",prefix:"dA=="},pools:{keyType:"uint64",valueType:"uint64",prefix:"cA=="},fromGasOracleScalingFactor:{keyType:"uint64",valueType:"uint64",prefix:"ZQ=="},bridgingFeeConversionScalingFactor:{keyType:"uint64",valueType:"uint64",prefix:"Zg=="},gasUsage:{keyType:"byte",valueType:"uint64",prefix:"dQ=="}}}},bareActions:{create:[],call:[]},sourceInfo:{approval:{sourceInfo:[{pc:[431],errorMessage:"Asset must go to app"},{pc:[877,1323,2099,2412,2424],errorMessage:"Box must have value"},{pc:[1835],errorMessage:"Bridge: amount too low for fee"},{pc:[1842],errorMessage:"Bridge: bridge to the zero address"},{pc:[911],errorMessage:"Bridge: message processed"},{pc:[961],errorMessage:"Bridge: no message"},{pc:[853,2063],errorMessage:"Bridge: not enough fee"},{pc:[843],errorMessage:"Bridge: source not registered"},{pc:[1950],errorMessage:"Bridge: tokens already sent"},{pc:[1915],errorMessage:"Bridge: unknown chain or token"},{pc:[1902],errorMessage:"Bridge: wrong destination chain"},{pc:[953,1256,1308,1995,2146,2289,2395,2469],errorMessage:"Bytes has valid prefix"},{pc:[447],errorMessage:"CloseTo not allowed"},{pc:[137],errorMessage:"OnCompletion must be NoOp"},{pc:[2484],errorMessage:"Only owner"},{pc:[439],errorMessage:"Rekey not allowed"},{pc:[1665],errorMessage:"Router: is not stopAuthority"},{pc:[2311],errorMessage:"Router: no pool"},{pc:[2221],errorMessage:"Router: no receive pool"},{pc:[832,1502,1825],errorMessage:"Router: swap prohibited"},{pc:[1166],errorMessage:"account opted into asset"},{pc:[2006,2319],errorMessage:"application exists"},{pc:[1599],errorMessage:"asset exists"},{pc:[831,858,920,1127,1174,1225,1267,1501,1663,1824,1896,1964,2108,2113,2236,2346,2430,2482],errorMessage:"check GlobalState exists"},{pc:[1956],errorMessage:"index access is out of bounds"},{pc:[958],errorMessage:"invalid number of bytes for arc4.bool"},{pc:[504,642,658,666,711,727,735,791,807,818,1040,1069,1098,1349,1373,1381,1406,1475,1686,1703,1803],errorMessage:"invalid number of bytes for arc4.static_array<arc4.uint8, 32>"},{pc:[520,529,561,674,743,752,779,826,1118,1148,1213,1261,1313,1340,1466,1483,1492,1571,1580,1643,1746,1768,2e3,2151,2294,2400,2474],errorMessage:"invalid number of bytes for arc4.uint64"},{pc:[512,650,719,799,1032,1061,1090,1205,1357,1365,1398,1434,1720,1738,1785],errorMessage:"invalid number of bytes for arc4.uint8"},{pc:[899,2205],errorMessage:"invalid size"},{pc:[634,703,1458],errorMessage:"transaction type is axfer"},{pc:[623,771],errorMessage:"transaction type is pay"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDggMzIgMTU3MDAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAiY2FuU3dhcCIgIm93bmVyIiAiZ2FzT3JhY2xlIiAicmViYWxhbmNlciIgImNoYWluSWQiICJtZXNzZW5nZXIiICJ0IiAicCIgInN0b3BBdXRob3JpdHkiIDB4MDEgMHgwMCAidSIgMHg0MzQxN2FhMyAweGY3NDc1YjgyIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAzZDU0IDB4MDY4MTAxCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUyCiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGludGNfMSAvLyAwCiAgICBiemVybwogICAgYnl0ZWMgNCAvLyAicmViYWxhbmNlciIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUzCiAgICAvLyBjYW5Td2FwID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7CiAgICBieXRlY18xIC8vICJjYW5Td2FwIgogICAgaW50Y18wIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAzMwogICAgcHVzaGJ5dGVzcyAweDY1ZjcwNTczIDB4M2UzODAyN2MgMHhhNDYwMGFlZCAweGRlNGNhZDRhIDB4NGViYTA3MjEgMHhjNjE3ZWQ3MyAweDU3NTMxNTYwIDB4NjM4MDgyNzggMHgwNjUwN2M2YSAweGY1Zjk2ZWIzIDB4NGIwNjJjYTAgMHhjM2NkZDkyYSAvLyBtZXRob2QgIm9wdEluQXNzZXQodWludDY0KXZvaWQiLCBtZXRob2QgInN3YXBBbmRCcmlkZ2UocGF5LGF4ZmVyLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0sYnl0ZVszMl0sdWludDY0KXZvaWQiLCBtZXRob2QgInN3YXBBbmRCcmlkZ2VXaXRoU3RhYmxlKGF4ZmVyLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0sYnl0ZVszMl0sdWludDY0LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJyZWNlaXZlVG9rZW5zKHBheSx1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlWzMyXSxieXRlWzMyXSx1aW50NjQpdm9pZCIsIG1ldGhvZCAicmVnaXN0ZXJCcmlkZ2UoYnl0ZSxieXRlWzMyXSl2b2lkIiwgbWV0aG9kICJhZGRCcmlkZ2VUb2tlbihieXRlLGJ5dGVbMzJdKXZvaWQiLCBtZXRob2QgInJlbW92ZUJyaWRnZVRva2VuKGJ5dGUsYnl0ZVszMl0pdm9pZCIsIG1ldGhvZCAid2l0aGRyYXdHYXNUb2tlbnModWludDY0KXZvaWQiLCBtZXRob2QgIndpdGhkcmF3QnJpZGdpbmdGZWVJblRva2Vucyh1aW50NjQpdm9pZCIsIG1ldGhvZCAiZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnMoYnl0ZSx1aW50NjQpdWludDY0IiwgbWV0aG9kICJoYXNoTWVzc2FnZSh1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlLGJ5dGVbMzJdLGJ5dGVbMzJdKWJ5dGVbMzJdIiwgbWV0aG9kICJpc090aGVyQnJpZGdlVG9rZW5TdXBwb3J0ZWQoYnl0ZSxieXRlWzMyXSlib29sIgogICAgYnl0ZWMgMTMgLy8gbWV0aG9kICJnZXRUcmFuc2FjdGlvbkNvc3QoYnl0ZSl1aW50NjQiCiAgICBwdXNoYnl0ZXNzIDB4MDdkZjg0MjkgMHg4MGM1YzcwZiAweDQxMzRkMDY4IDB4ZWYxNWY4NTUgMHg2YjFlZTIyMyAweDE4NzBhNDkyIDB4MzU1NzMyNGQgMHgwNGIxNjFmMSAweGQyYjM1N2ViIC8vIG1ldGhvZCAiZ2V0UmVjZWl2ZVRva2Vuc0Nvc3QoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0U2VuZFRyYW5zYWN0aW9uU3RvcmFnZUNvc3QoKXVpbnQ2NCIsIG1ldGhvZCAic3dhcChheGZlcix1aW50NjQsYWRkcmVzcyx1aW50NjQsdWludDY0KXZvaWQiLCBtZXRob2QgImFkZFBvb2wodWludDY0LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJyZW1vdmVQb29sKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJzdG9wU3dhcCgpdm9pZCIsIG1ldGhvZCAic3RhcnRTd2FwKCl2b2lkIiwgbWV0aG9kICJzZXRTdG9wQXV0aG9yaXR5KGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAic2V0UmViYWxhbmNlcihhZGRyZXNzKXZvaWQiCiAgICBieXRlYyAxNCAvLyBtZXRob2QgImdldEdhc1VzYWdlKGJ5dGUpdWludDY0IgogICAgcHVzaGJ5dGVzcyAweDBjYTVhZTdhIDB4Mjc0NzBmMDcgMHhjYmZjNmQwMiAweGUxN2JhZmI0IC8vIG1ldGhvZCAic2V0R2FzVXNhZ2UoYnl0ZSx1aW50NjQpdm9pZCIsIG1ldGhvZCAic2V0R2FzT3JhY2xlKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJnZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0KGJ5dGUpdWludDY0IiwgbWV0aG9kICJ0cmFuc2Zlck93bmVyc2hpcChhZGRyZXNzKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBvcHRJbkFzc2V0IHN3YXBBbmRCcmlkZ2Ugc3dhcEFuZEJyaWRnZVdpdGhTdGFibGUgcmVjZWl2ZVRva2VucyByZWdpc3RlckJyaWRnZSBhZGRCcmlkZ2VUb2tlbiByZW1vdmVCcmlkZ2VUb2tlbiB3aXRoZHJhd0dhc1Rva2VucyB3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnMgZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnMgaGFzaE1lc3NhZ2UgaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkIGdldFRyYW5zYWN0aW9uQ29zdCBtYWluX2dldFJlY2VpdmVUb2tlbnNDb3N0X3JvdXRlQDE4IG1haW5fZ2V0U2VuZFRyYW5zYWN0aW9uU3RvcmFnZUNvc3Rfcm91dGVAMTkgc3dhcCBhZGRQb29sIHJlbW92ZVBvb2wgc3RvcFN3YXAgc3RhcnRTd2FwIHNldFN0b3BBdXRob3JpdHkgc2V0UmViYWxhbmNlciBnZXRHYXNVc2FnZSBzZXRHYXNVc2FnZSBzZXRHYXNPcmFjbGUgZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdCB0cmFuc2Zlck93bmVyc2hpcAogICAgZXJyCgptYWluX2dldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0X3JvdXRlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNTEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWMgMTUgLy8gMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDNkNTQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRSZWNlaXZlVG9rZW5zQ29zdF9yb3V0ZUAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQ0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjIDE1IC8vIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAzZDU0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fY3JlYXRlX05vT3BAMzM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICBwdXNoYnl0ZXMgMHg2NjRjYTQwNCAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKGFkZHJlc3MsYnl0ZSx1aW50NjQsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGVBcHBsaWNhdGlvbgogICAgZXJyCgoKLy8gX3B1eWFfbGliLnV0aWwuZW5zdXJlX2J1ZGdldChyZXF1aXJlZF9idWRnZXQ6IHVpbnQ2NCwgZmVlX3NvdXJjZTogdWludDY0KSAtPiB2b2lkOgplbnN1cmVfYnVkZ2V0OgogICAgcHJvdG8gMiAwCiAgICBmcmFtZV9kaWcgLTIKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgICsKCmVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDE6CiAgICBmcmFtZV9kaWcgMAogICAgZ2xvYmFsIE9wY29kZUJ1ZGdldAogICAgPgogICAgYnogZW5zdXJlX2J1ZGdldF9hZnRlcl93aGlsZUA2CiAgICBpdHhuX2JlZ2luCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgYnl0ZWMgMTYgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCiAgICBieXRlYyAxNiAvLyAweDA2ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQogICAgZnJhbWVfZGlnIC0xCiAgICBzd2l0Y2ggZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8wQDMgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8xQDQKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA1OgogICAgaXR4bl9zdWJtaXQKICAgIGIgZW5zdXJlX2J1ZGdldF93aGlsZV90b3BAMQoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8xQDQ6CiAgICBnbG9iYWwgTWluVHhuRmVlCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgYiBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANQoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8wQDM6CiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDUKCmVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANjoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo6YW1vdW50RnJvbUFzc2V0VHJhbnNmZXIoYXNzZXRUcmFuc2ZlclR4bjogdWludDY0KSAtPiB1aW50NjQ6CmFtb3VudEZyb21Bc3NldFRyYW5zZmVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjIzCiAgICAvLyBleHBvcnQgZnVuY3Rpb24gYW1vdW50RnJvbUFzc2V0VHJhbnNmZXIoYXNzZXRUcmFuc2ZlclR4bjogZ3R4bi5Bc3NldFRyYW5zZmVyVHhuKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI0CiAgICAvLyBhc3NlcnQoYXNzZXRUcmFuc2ZlclR4bi5hc3NldFJlY2VpdmVyID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywgYEFzc2V0IG11c3QgZ28gdG8gYXBwYCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIEFzc2V0IG11c3QgZ28gdG8gYXBwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjcKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLnJla2V5VG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywgYFJla2V5IG5vdCBhbGxvd2VkYCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFJla2V5VG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBSZWtleSBub3QgYWxsb3dlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI4CiAgICAvLyBhc3NlcnQoYXNzZXRUcmFuc2ZlclR4bi5hc3NldENsb3NlVG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywgYENsb3NlVG8gbm90IGFsbG93ZWRgKTsKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQXNzZXRDbG9zZVRvCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gQ2xvc2VUbyBub3QgYWxsb3dlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI5CiAgICAvLyByZXR1cm4gYXNzZXRUcmFuc2ZlclR4bi5hc3NldEFtb3VudDsKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo6YW1vdW50RnJvbVBheW1lbnQocGF5bWVudFR4bjogdWludDY0KSAtPiB1aW50NjQ6CmFtb3VudEZyb21QYXltZW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjMyCiAgICAvLyBleHBvcnQgZnVuY3Rpb24gYW1vdW50RnJvbVBheW1lbnQocGF5bWVudFR4bjogZ3R4bi5QYXltZW50VHhuKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjMzCiAgICAvLyBpZiAocGF5bWVudFR4bi5yZWNlaXZlciAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHJldHVybiAwOwogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgICE9CiAgICBieiBhbW91bnRGcm9tUGF5bWVudF9hZnRlcl9pZl9lbHNlQDIKICAgIGludGNfMSAvLyAwCiAgICByZXRzdWIKCmFtb3VudEZyb21QYXltZW50X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czozNQogICAgLy8gaWYgKHBheW1lbnRUeG4ucmVrZXlUbyAhPT0gR2xvYmFsLnplcm9BZGRyZXNzKSByZXR1cm4gMDsKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgUmVrZXlUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYnogYW1vdW50RnJvbVBheW1lbnRfYWZ0ZXJfaWZfZWxzZUA0CiAgICBpbnRjXzEgLy8gMAogICAgcmV0c3ViCgphbW91bnRGcm9tUGF5bWVudF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MzYKICAgIC8vIGlmIChwYXltZW50VHhuLmNsb3NlUmVtYWluZGVyVG8gIT09IEdsb2JhbC56ZXJvQWRkcmVzcykgcmV0dXJuIDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIENsb3NlUmVtYWluZGVyVG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIGJ6IGFtb3VudEZyb21QYXltZW50X2FmdGVyX2lmX2Vsc2VANgogICAgaW50Y18xIC8vIDAKICAgIHJldHN1YgoKYW1vdW50RnJvbVBheW1lbnRfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjM4CiAgICAvLyByZXR1cm4gcGF5bWVudFR4bi5hbW91bnQ7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFtb3VudAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmNyZWF0ZUFwcGxpY2F0aW9uW3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlQXBwbGljYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY5CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbihvd25lcjogQWRkcmVzcywgY2hhaW5JZDogQnl0ZSwgbWVzc2VuZ2VyOiBBcHBsaWNhdGlvbiwgZ2FzT3JhY2xlOiBBcHBsaWNhdGlvbik6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBieXRlY18yIC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjkKICAgIC8vIHRoaXMub3duZXIudmFsdWUgPSBvd25lcjsKICAgIGRpZyA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTQKICAgIC8vIHRoaXMuZ2FzT3JhY2xlLnZhbHVlID0gZ2FzT3JhY2xlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NDIKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgOSAvLyAic3RvcEF1dGhvcml0eSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTcKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IG93bmVyOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gY2hhaW5JZCA9IEdsb2JhbFN0YXRlPEJ5dGU+KCk7CiAgICBieXRlYyA1IC8vICJjaGFpbklkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3MQogICAgLy8gdGhpcy5jaGFpbklkLnZhbHVlID0gY2hhaW5JZDsKICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNiAvLyAibWVzc2VuZ2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3MgogICAgLy8gdGhpcy5tZXNzZW5nZXIudmFsdWUgPSBtZXNzZW5nZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIGNoYWluSWQ6IEJ5dGUsIG1lc3NlbmdlcjogQXBwbGljYXRpb24sIGdhc09yYWNsZTogQXBwbGljYXRpb24pOiB2b2lkIHsKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uub3B0SW5Bc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdEluQXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc1CiAgICAvLyBvcHRJbkFzc2V0KGFzc2V0OiBBc3NldCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3NgogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc5LTg1CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6ODIKICAgIC8vIGFzc2V0QW1vdW50OiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc5LTg0CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3OS04NQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIGxvZygnQnJpZGdlOiBvcHQtaW4gY29tcGxldGVkJyk7CiAgICBwdXNoYnl0ZXMgIkJyaWRnZTogb3B0LWluIGNvbXBsZXRlZCIKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3NQogICAgLy8gb3B0SW5Bc3NldChhc3NldDogQXNzZXQpOiB2b2lkIHsKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uuc3dhcEFuZEJyaWRnZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnN3YXBBbmRCcmlkZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjkwCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgcHVzaGludCAyIC8vIDIKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgcHVzaGludCA0IC8vIGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMDAKICAgIC8vIHRoaXMuX3N3YXBBbmRCcmlkZ2UoYW1vdW50RnJvbVBheW1lbnQocGF5bWVudFJlZiksIGFzc2V0VHJhbnNmZXJSZWYsIHJlY2lwaWVudCwgZGVzdGluYXRpb25DaGFpbklkLCByZWNlaXZlVG9rZW4sIG5vbmNlLCAwLCBidWRnZXQpOwogICAgdW5jb3ZlciA2CiAgICBjYWxsc3ViIGFtb3VudEZyb21QYXltZW50CiAgICBjb3ZlciA2CiAgICBjb3ZlciA2CiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciA3CiAgICBjYWxsc3ViIF9zd2FwQW5kQnJpZGdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjkwCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLnN3YXBBbmRCcmlkZ2VXaXRoU3RhYmxlW3JvdXRpbmddKCkgLT4gdm9pZDoKc3dhcEFuZEJyaWRnZVdpdGhTdGFibGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEwMwogICAgLy8gQGFiaW1ldGhvZCh7IGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAxMDAwIH0gfSB9KQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExMwogICAgLy8gdGhpcy5fc3dhcEFuZEJyaWRnZSgwLCBhc3NldFRyYW5zZmVyUmVmLCByZWNpcGllbnQsIGRlc3RpbmF0aW9uQ2hhaW5JZCwgcmVjZWl2ZVRva2VuLCBub25jZSwgZmVlVG9rZW5BbW91bnQsIGJ1ZGdldCk7CiAgICBpbnRjXzEgLy8gMAogICAgY292ZXIgNwogICAgY2FsbHN1YiBfc3dhcEFuZEJyaWRnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGJ1ZGdldDogeyBjb25zdGFudDogMTAwMCB9IH0gfSkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVjZWl2ZVRva2Vuc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlY2VpdmVUb2tlbnM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE5MwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBjb3ZlciA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NjQKICAgIC8vIGFzc2VydCh0aGlzLmNhblN3YXAudmFsdWUsICdSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZCcpOwogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTMKICAgIC8vIGNhblN3YXAgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjY0CiAgICAvLyBhc3NlcnQodGhpcy5jYW5Td2FwLnZhbHVlLCAnUm91dGVyOiBzd2FwIHByb2hpYml0ZWQnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBhc3NlcnQgLy8gUm91dGVyOiBzd2FwIHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIG90aGVyQnJpZGdlcyA9IEJveE1hcDxCeXRlLCBTdGF0aWNCeXRlczwzMj4+KHsga2V5UHJlZml4OiAnYicgfSk7CiAgICBwdXNoYnl0ZXMgImIiCiAgICBkaWcgNAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwNAogICAgLy8gYXNzZXJ0KHRoaXMub3RoZXJCcmlkZ2VzKHNvdXJjZUNoYWluSWQpLmV4aXN0cywgJ0JyaWRnZTogc291cmNlIG5vdCByZWdpc3RlcmVkJyk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEJyaWRnZTogc291cmNlIG5vdCByZWdpc3RlcmVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwNgogICAgLy8gY29uc3QgdmFsdWUgPSBhbW91bnRGcm9tUGF5bWVudChwYXltZW50UmVmKTsKICAgIHVuY292ZXIgNwogICAgY2FsbHN1YiBhbW91bnRGcm9tUGF5bWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMDcKICAgIC8vIGFzc2VydCh2YWx1ZSA+PSBzdG9yYWdlRmVlLCAnQnJpZGdlOiBub3QgZW5vdWdoIGZlZScpOwogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM0OAogICAgLy8gcmV0dXJuIDE1NzAwOwogICAgaW50YyA0IC8vIDE1NzAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwNwogICAgLy8gYXNzZXJ0KHZhbHVlID49IHN0b3JhZ2VGZWUsICdCcmlkZ2U6IG5vdCBlbm91Z2ggZmVlJyk7CiAgICA+PQogICAgYXNzZXJ0IC8vIEJyaWRnZTogbm90IGVub3VnaCBmZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjA5CiAgICAvLyBjb25zdCBtZXNzYWdlID0gdGhpcy5oYXNoTWVzc2FnZShhbW91bnQsIHJlY2lwaWVudCwgc291cmNlQ2hhaW5JZCwgdGhpcy5jaGFpbklkLnZhbHVlLCByZWNlaXZlVG9rZW4sIG5vbmNlKTsKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBjaGFpbklkID0gR2xvYmFsU3RhdGU8Qnl0ZT4oKTsKICAgIGJ5dGVjIDUgLy8gImNoYWluSWQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwOQogICAgLy8gY29uc3QgbWVzc2FnZSA9IHRoaXMuaGFzaE1lc3NhZ2UoYW1vdW50LCByZWNpcGllbnQsIHNvdXJjZUNoYWluSWQsIHRoaXMuY2hhaW5JZC52YWx1ZSwgcmVjZWl2ZVRva2VuLCBub25jZSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDgKICAgIGRpZyA4CiAgICB1bmNvdmVyIDgKICAgIHVuY292ZXIgMwogICAgZGlnIDgKICAgIHVuY292ZXIgOAogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaGFzaE1lc3NhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjEwCiAgICAvLyBjb25zdCBtZXNzYWdlV2l0aFNlbmRlciA9IGhhc2hXaXRoU2VuZGVyQWRkcmVzcyhtZXNzYWdlLCB0aGlzLm90aGVyQnJpZGdlcyhzb3VyY2VDaGFpbklkKS52YWx1ZS5ieXRlcyk7CiAgICB1bmNvdmVyIDIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NTIKICAgIC8vIGNvbnN0IGg6IGJ5dGVzID0gb3Aua2VjY2FrMjU2KG9wLmNvbmNhdChtZXNzYWdlLmJ5dGVzLCBzZW5kZXJBZGRyZXNzKSk7CiAgICBkaWcgMQogICAgc3dhcAogICAgY29uY2F0CiAgICBrZWNjYWsyNTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo1NQogICAgLy8gY29uc3QgZmlyc3QyID0gb3Auc3Vic3RyaW5nKG1lc3NhZ2UuYnl0ZXMsIDAsIDIpOwogICAgc3dhcAogICAgc3Vic3RyaW5nIDAgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjU3CiAgICAvLyBjb25zdCBsYXN0MzAgPSBvcC5zdWJzdHJpbmcoaCwgMiwgMzIpOwogICAgc3dhcAogICAgc3Vic3RyaW5nIDIgMzIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo2MAogICAgLy8gcmV0dXJuIG5ldyBTdGF0aWNCeXRlczwzMj4ob3AuY29uY2F0KGZpcnN0MiwgbGFzdDMwKSk7CiAgICBjb25jYXQKICAgIGR1cAogICAgY292ZXIgNgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHNpemUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIHByb2Nlc3NlZE1lc3NhZ2VzID0gQm94TWFwPFN0YXRpY0J5dGVzPDMyPiwgU3RhdGljQnl0ZXM+KHsga2V5UHJlZml4OiAnbScgfSk7CiAgICBwdXNoYnl0ZXMgIm0iCiAgICBkaWcgMQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxMgogICAgLy8gYXNzZXJ0KCF0aGlzLnByb2Nlc3NlZE1lc3NhZ2VzKG1lc3NhZ2VXaXRoU2VuZGVyKS5leGlzdHMsICdCcmlkZ2U6IG1lc3NhZ2UgcHJvY2Vzc2VkJyk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEJyaWRnZTogbWVzc2FnZSBwcm9jZXNzZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjE0CiAgICAvLyB0aGlzLnByb2Nlc3NlZE1lc3NhZ2VzKG1lc3NhZ2VXaXRoU2VuZGVyKS52YWx1ZSA9IG5ldyBTdGF0aWNCeXRlcygpOwogICAgcHVzaGJ5dGVzIDB4CiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxNy0yMjEKICAgIC8vIGFzc2VydChhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLnJlY2VpdmVkTWVzc2FnZXMsCiAgICAvLyAgIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW21lc3NhZ2VXaXRoU2VuZGVyXSwKICAgIC8vIH0pLnJldHVyblZhbHVlLCAnQnJpZGdlOiBubyBtZXNzYWdlJyk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxOQogICAgLy8gYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNiAvLyAibWVzc2VuZ2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxNy0yMjEKICAgIC8vIGFzc2VydChhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLnJlY2VpdmVkTWVzc2FnZXMsCiAgICAvLyAgIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW21lc3NhZ2VXaXRoU2VuZGVyXSwKICAgIC8vIH0pLnJldHVyblZhbHVlLCAnQnJpZGdlOiBubyBtZXNzYWdlJyk7CiAgICBwdXNoYnl0ZXMgMHgzM2UxNDdhYSAvLyBtZXRob2QgInJlY2VpdmVkTWVzc2FnZXMoYnl0ZVszMl0pYm9vbCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5ib29sCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Yml0CiAgICBhc3NlcnQgLy8gQnJpZGdlOiBubyBtZXNzYWdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIyMwogICAgLy8gY29uc3QgdG9rZW5JZDogdWludDY0ID0gb3AuZXh0cmFjdFVpbnQ2NChyZWNlaXZlVG9rZW4uYnl0ZXMsIDI0KTsKICAgIHVuY292ZXIgMgogICAgcHVzaGludCAyNCAvLyAyNAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjI1LTIzMAogICAgLy8gY29uc3QgcmVjZWl2ZUFtb3VudCA9IHRoaXMucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZCgKICAgIC8vICAgQXNzZXQodG9rZW5JZCksCiAgICAvLyAgIHJlY2lwaWVudEFkZHJlc3MsCiAgICAvLyAgIGFtb3VudCwKICAgIC8vICAgcmVjZWl2ZUFtb3VudE1pbiwKICAgIC8vICk7CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICBjYWxsc3ViIHJlY2VpdmVBbmRTd2FwRnJvbVZVc2QKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQ4CiAgICAvLyByZXR1cm4gMTU3MDA7CiAgICBpbnRjIDQgLy8gMTU3MDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjMzCiAgICAvLyBjb25zdCBleHRyYUdhczogdWludDY0ID0gdmFsdWUgLSBzdG9yYWdlRmVlOwogICAgLQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIzNAogICAgLy8gaWYgKGV4dHJhR2FzID4gMCkgewogICAgYnogcmVjZWl2ZVRva2Vuc19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjM1LTIzOAogICAgLy8gaXR4bi5wYXltZW50KHsKICAgIC8vICAgYW1vdW50OiBleHRyYUdhcywKICAgIC8vICAgcmVjZWl2ZXI6IHJlY2lwaWVudEFkZHJlc3MuYnl0ZXMsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIGRpZyA0CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAoKcmVjZWl2ZVRva2Vuc19hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0MC0yNDYKICAgIC8vIGVtaXQ8VG9rZW5zUmVjZWl2ZWQ+KHsKICAgIC8vICAgcmVjZWl2ZUFtb3VudCwKICAgIC8vICAgcmVjaXBpZW50OiByZWNpcGllbnRBZGRyZXNzLAogICAgLy8gICBub25jZSwKICAgIC8vICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICBtZXNzYWdlOiBtZXNzYWdlV2l0aFNlbmRlciwKICAgIC8vIH0pOwogICAgZGlnIDEKICAgIGl0b2IKICAgIGRpZyA1CiAgICBjb25jYXQKICAgIGRpZyA0CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQ0CiAgICAvLyBtZXNzZW5nZXI6IEFMTEJSSURHRV9NRVNTRU5HRVIsCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0MC0yNDYKICAgIC8vIGVtaXQ8VG9rZW5zUmVjZWl2ZWQ+KHsKICAgIC8vICAgcmVjZWl2ZUFtb3VudCwKICAgIC8vICAgcmVjaXBpZW50OiByZWNpcGllbnRBZGRyZXNzLAogICAgLy8gICBub25jZSwKICAgIC8vICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICBtZXNzYWdlOiBtZXNzYWdlV2l0aFNlbmRlciwKICAgIC8vIH0pOwogICAgY29uY2F0CiAgICBkaWcgMwogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHg0NTgzNmFkNiAvLyBtZXRob2QgIlRva2Vuc1JlY2VpdmVkKHVpbnQ2NCxhZGRyZXNzLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0pIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTkzCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVnaXN0ZXJCcmlkZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgpyZWdpc3RlckJyaWRnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQ5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI1MQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY0CiAgICAvLyBvdGhlckJyaWRnZXMgPSBCb3hNYXA8Qnl0ZSwgU3RhdGljQnl0ZXM8MzI+Pih7IGtleVByZWZpeDogJ2InIH0pOwogICAgcHVzaGJ5dGVzICJiIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjUyCiAgICAvLyB0aGlzLm90aGVyQnJpZGdlcyhjaGFpbklkKS52YWx1ZSA9IGJyaWRnZUFkZHJlc3M7CiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0OQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmFkZEJyaWRnZVRva2VuW3JvdXRpbmddKCkgLT4gdm9pZDoKYWRkQnJpZGdlVG9rZW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI1NQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNTcKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNjEKICAgIC8vIHJldHVybiBjaGFpbklkLmJ5dGVzLmNvbmNhdCh0b2tlbi5ieXRlcyk7CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIG90aGVyQnJpZGdlVG9rZW5zID0gQm94TWFwPGJ5dGVzLCBTdGF0aWNCeXRlcz4oeyBrZXlQcmVmaXg6ICd0JyB9KTsKICAgIGJ5dGVjIDcgLy8gInQiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjU4CiAgICAvLyB0aGlzLm90aGVyQnJpZGdlVG9rZW5zKHRoaXMuX2dldE90aGVyQnJpZGdlVG9rZW5zS2V5KGNoYWluSWQsIHRva2VuQWRkcmVzcykpLnZhbHVlID0gbmV3IFN0YXRpY0J5dGVzKCk7CiAgICBwdXNoYnl0ZXMgMHgKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjU1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVtb3ZlQnJpZGdlVG9rZW5bcm91dGluZ10oKSAtPiB2b2lkOgpyZW1vdmVCcmlkZ2VUb2tlbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjYxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI2MwogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM2MQogICAgLy8gcmV0dXJuIGNoYWluSWQuYnl0ZXMuY29uY2F0KHRva2VuLmJ5dGVzKTsKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2NwogICAgLy8gb3RoZXJCcmlkZ2VUb2tlbnMgPSBCb3hNYXA8Ynl0ZXMsIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ3QnIH0pOwogICAgYnl0ZWMgNyAvLyAidCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIHRoaXMub3RoZXJCcmlkZ2VUb2tlbnModGhpcy5fZ2V0T3RoZXJCcmlkZ2VUb2tlbnNLZXkoY2hhaW5JZCwgdG9rZW5BZGRyZXNzKSkuZGVsZXRlKCk7CiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjYxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uud2l0aGRyYXdHYXNUb2tlbnNbcm91dGluZ10oKSAtPiB2b2lkOgp3aXRoZHJhd0dhc1Rva2VuczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY5CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjcwCiAgICAvLyBpdHhuLnBheW1lbnQoeyBhbW91bnQ6IGFtb3VudCwgcmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMgfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjXzIgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzAKICAgIC8vIGl0eG4ucGF5bWVudCh7IGFtb3VudDogYW1vdW50LCByZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcyB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaW50Y18wIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uud2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zW3JvdXRpbmddKCkgLT4gdm9pZDoKd2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzMKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3NQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3NgogICAgLy8gY29uc3QgYXBwQWNjdDogQWNjb3VudCA9IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzOwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGR1cAogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzcKICAgIC8vIGNvbnN0IGJhbGFuY2UgPSBhc3NldC5iYWxhbmNlKGFwcEFjY3QpOwogICAgc3dhcAogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGFjY291bnQgb3B0ZWQgaW50byBhc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzgKICAgIC8vIGlmIChiYWxhbmNlID4gVWludDY0KDApKSB7CiAgICBieiB3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnNfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3OS0yODQKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHNlbmRlcjogYXBwQWNjdCwKICAgIC8vICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgYXNzZXRBbW91bnQ6IGJhbGFuY2UsCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBieXRlY18yIC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBkaWcgMgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzktMjg0CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICBzZW5kZXI6IGFwcEFjY3QsCiAgICAvLyAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBiYWxhbmNlLAogICAgLy8gICBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAoKd2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjczCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRCcmlkZ2luZ0Nvc3RJblRva2VuczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6Mjg4CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyOTMKICAgIC8vIGNvbnN0IGJyaWRnZUdhc0Ftb3VudDogdWludDY0ID0gdGhpcy5nZXRHYXNVc2FnZShkZXN0aW5hdGlvbkNoYWluSWQpOwogICAgZGlnIDEKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0R2FzVXNhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6Mjk0LTI5OAogICAgLy8gY29uc3QgbWVzc2VuZ2VyR2FzQW1vdW50OiB1aW50NjQgPSBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLmdldEdhc1VzYWdlLAogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI5NgogICAgLy8gYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNiAvLyAibWVzc2VuZ2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyOTYKICAgIC8vIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI5NC0yOTgKICAgIC8vIGNvbnN0IG1lc3Nlbmdlckdhc0Ftb3VudDogdWludDY0ID0gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogTWVzc2VuZ2VyLnByb3RvdHlwZS5nZXRHYXNVc2FnZSwKICAgIC8vICAgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgYnl0ZWMgMTQgLy8gbWV0aG9kICJnZXRHYXNVc2FnZShieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgMwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwMC0zMDQKICAgIC8vIHJldHVybiBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBHYXNPcmFjbGUucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uR2FzQ29zdEluVVNELAogICAgLy8gICBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWQsIGJyaWRnZUdhc0Ftb3VudCArIG1lc3Nlbmdlckdhc0Ftb3VudF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjkKICAgIC8vIGdhc09yYWNsZSA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWNfMyAvLyAiZ2FzT3JhY2xlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIGNvdmVyIDIKICAgICsKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzAwLTMwNAogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5VU0QsCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIC8vIH0pLnJldHVyblZhbHVlIC8gdGhpcy5mcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWU7CiAgICBwdXNoYnl0ZXMgMHg3YmY3ZDUwYyAvLyBtZXRob2QgImdldFRyYW5zYWN0aW9uR2FzQ29zdEluVVNEKGJ5dGUsdWludDY0KXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICB1bmNvdmVyIDMKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzA0CiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozNgogICAgLy8gcHJvdGVjdGVkIGZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yID0gQm94TWFwPEFzc2V0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZScgfSk7CiAgICBwdXNoYnl0ZXMgImUiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzA0CiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlOwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzAwLTMwNAogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5VU0QsCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIC8vIH0pLnJldHVyblZhbHVlIC8gdGhpcy5mcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWU7CiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI4OAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmhhc2hNZXNzYWdlW3JvdXRpbmddKCkgLT4gdm9pZDoKaGFzaE1lc3NhZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwNwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaGFzaE1lc3NhZ2UKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkW3JvdXRpbmddKCkgLT4gdm9pZDoKaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMzQKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyByZXR1cm4gY2hhaW5JZC5ieXRlcy5jb25jYXQodG9rZW4uYnl0ZXMpOwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY3CiAgICAvLyBvdGhlckJyaWRnZVRva2VucyA9IEJveE1hcDxieXRlcywgU3RhdGljQnl0ZXM+KHsga2V5UHJlZml4OiAndCcgfSk7CiAgICBieXRlYyA3IC8vICJ0IgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMzNgogICAgLy8gcmV0dXJuIHRoaXMub3RoZXJCcmlkZ2VUb2tlbnModGhpcy5fZ2V0T3RoZXJCcmlkZ2VUb2tlbnNLZXkoY2hhaW5JZCwgdG9rZW4pKS5leGlzdHM7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzM0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjIDExIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5nZXRUcmFuc2FjdGlvbkNvc3Rbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRUcmFuc2FjdGlvbkNvc3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMzOQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQxCiAgICAvLyByZXR1cm4gdGhpcy5nZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0KGNoYWluSWQpICsgdGhpcy5nZXRTZW5kVHJhbnNhY3Rpb25TdG9yYWdlQ29zdCgpOwogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM1NQogICAgLy8gcmV0dXJuIDE1NzAwOwogICAgaW50YyA0IC8vIDE1NzAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM0MQogICAgLy8gcmV0dXJuIHRoaXMuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdChjaGFpbklkKSArIHRoaXMuZ2V0U2VuZFRyYW5zYWN0aW9uU3RvcmFnZUNvc3QoKTsKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzM5CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3dhcFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnN3YXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjgxCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6ODkKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgaW50Y18xIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo2NAogICAgLy8gYXNzZXJ0KHRoaXMuY2FuU3dhcC52YWx1ZSwgJ1JvdXRlcjogc3dhcCBwcm9oaWJpdGVkJyk7CiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MwogICAgLy8gY2FuU3dhcCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOwogICAgYnl0ZWNfMSAvLyAiY2FuU3dhcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NjQKICAgIC8vIGFzc2VydCh0aGlzLmNhblN3YXAudmFsdWUsICdSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGFzc2VydCAvLyBSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo5MQogICAgLy8gY29uc3Qgc2VuZGVyID0gbmV3IEFkZHJlc3MoVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjkyCiAgICAvLyBjb25zdCBhbW91bnQgPSBhbW91bnRGcm9tQXNzZXRUcmFuc2Zlcihhc3NldFRyYW5zZmVyUmVmKTsKICAgIGRpZyA0CiAgICBjYWxsc3ViIGFtb3VudEZyb21Bc3NldFRyYW5zZmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjkzCiAgICAvLyBjb25zdCB2VXNkQW1vdW50ID0gdGhpcy5zZW5kQW5kU3dhcFRvVlVzZChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldCwgc2VuZGVyLCBhbW91bnQpOwogICAgdW5jb3ZlciA1CiAgICBndHhucyBYZmVyQXNzZXQKICAgIGR1cAogICAgZGlnIDMKICAgIGRpZyAzCiAgICBjYWxsc3ViIHNlbmRBbmRTd2FwVG9WVXNkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjk0CiAgICAvLyBjb25zdCByZWNlaXZlZEFtb3VudCA9IHRoaXMucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZChyZWNlaXZlQXNzZXQsIHJlY2lwaWVudCwgdlVzZEFtb3VudCwgcmVjZWl2ZUFtb3VudE1pbik7CiAgICBkaWcgNgogICAgZGlnIDYKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciA2CiAgICBjYWxsc3ViIHJlY2VpdmVBbmRTd2FwRnJvbVZVc2QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6OTUtMTAyCiAgICAvLyBlbWl0PFN3YXBwZWQ+KHsKICAgIC8vICAgc2VuZGVyLAogICAgLy8gICByZWNpcGllbnQsCiAgICAvLyAgIHRva2VuSWQ6IGFzc2V0VHJhbnNmZXJSZWYueGZlckFzc2V0LmlkLAogICAgLy8gICByZWNlaXZlVG9rZW5JZDogcmVjZWl2ZUFzc2V0LmlkLAogICAgLy8gICBhbW91bnQsCiAgICAvLyAgIHJlY2VpdmVkQW1vdW50LAogICAgLy8gfSk7CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDE1NDA0NGIzIC8vIG1ldGhvZCAiU3dhcHBlZChhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjgxCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLmFkZFBvb2xbcm91dGluZ10oKSAtPiB2b2lkOgphZGRQb29sOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTQKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTUKICAgIC8vIHRoaXMucG9vbHMoYXNzZXQpLnZhbHVlID0gcG9vbElkOwogICAgZHVwCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM0CiAgICAvLyBwb29scyA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE1CiAgICAvLyB0aGlzLnBvb2xzKGFzc2V0KS52YWx1ZSA9IHBvb2xJZDsKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTYKICAgIC8vIGNvbnN0IHRva2VuRGVjaW1hbHMgPSBhc3NldC5kZWNpbWFsczsKICAgIHN3YXAKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTcKICAgIC8vIHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgPSAxMCAqKiAoT1JBQ0xFX1BSSUNFX1BSRUNJU0lPTiAtIHRva2VuRGVjaW1hbHMgKyBDSEFJTl9QUkVDSVNJT04pOwogICAgcHVzaGludCA5IC8vIDkKICAgIHN3YXAKICAgIC0KICAgIGR1cAogICAgcHVzaGludCA2IC8vIDYKICAgICsKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozOQogICAgLy8gcHJvdGVjdGVkIGJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IgPSBCb3hNYXA8QXNzZXQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdmJyB9KTsKICAgIHB1c2hieXRlcyAiZiIKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE3CiAgICAvLyB0aGlzLmJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlID0gMTAgKiogKE9SQUNMRV9QUklDRV9QUkVDSVNJT04gLSB0b2tlbkRlY2ltYWxzICsgQ0hBSU5fUFJFQ0lTSU9OKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yKGFzc2V0KS52YWx1ZSA9IDEwICoqIChPUkFDTEVfUFJJQ0VfUFJFQ0lTSU9OIC0gdG9rZW5EZWNpbWFscyk7CiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICBzd2FwCiAgICBleHAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzYKICAgIC8vIHByb3RlY3RlZCBmcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3RvciA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ2UnIH0pOwogICAgcHVzaGJ5dGVzICJlIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yKGFzc2V0KS52YWx1ZSA9IDEwICoqIChPUkFDTEVfUFJJQ0VfUFJFQ0lTSU9OIC0gdG9rZW5EZWNpbWFscyk7CiAgICBzd2FwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjExMgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnJlbW92ZVBvb2xbcm91dGluZ10oKSAtPiB2b2lkOgpyZW1vdmVQb29sOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjEKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjQKICAgIC8vIHRoaXMucG9vbHModG9rZW5JZCkuZGVsZXRlKCk7CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM0CiAgICAvLyBwb29scyA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjQKICAgIC8vIHRoaXMucG9vbHModG9rZW5JZCkuZGVsZXRlKCk7CiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTIxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3RvcFN3YXBbcm91dGluZ10oKSAtPiB2b2lkOgpzdG9wU3dhcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NzEKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUuYnl0ZXMsICdSb3V0ZXI6IGlzIG5vdCBzdG9wQXV0aG9yaXR5Jyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo0MgogICAgLy8gcHJpdmF0ZSBzdG9wQXV0aG9yaXR5ID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBieXRlYyA5IC8vICJzdG9wQXV0aG9yaXR5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo3MQogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZS5ieXRlcywgJ1JvdXRlcjogaXMgbm90IHN0b3BBdXRob3JpdHknKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFJvdXRlcjogaXMgbm90IHN0b3BBdXRob3JpdHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTMKICAgIC8vIGNhblN3YXAgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzMwogICAgLy8gdGhpcy5jYW5Td2FwLnZhbHVlID0gZmFsc2U7CiAgICBpbnRjXzEgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTMwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3RhcnRTd2FwW3JvdXRpbmddKCkgLT4gdm9pZDoKc3RhcnRTd2FwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNDEKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MwogICAgLy8gY2FuU3dhcCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOwogICAgYnl0ZWNfMSAvLyAiY2FuU3dhcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTQyCiAgICAvLyB0aGlzLmNhblN3YXAudmFsdWUgPSB0cnVlOwogICAgaW50Y18wIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzOQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNldFN0b3BBdXRob3JpdHlbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRTdG9wQXV0aG9yaXR5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNDgKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1MAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjQyCiAgICAvLyBwcml2YXRlIHN0b3BBdXRob3JpdHkgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDkgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1MQogICAgLy8gdGhpcy5zdG9wQXV0aG9yaXR5LnZhbHVlID0gc3RvcEF1dGhvcml0eTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE0OAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNldFJlYmFsYW5jZXJbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRSZWJhbGFuY2VyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNTcKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1OQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUyCiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDQgLy8gInJlYmFsYW5jZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE2MAogICAgLy8gdGhpcy5yZWJhbGFuY2VyLnZhbHVlID0gcmViYWxhbmNlcjsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1NwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0R2FzVXNhZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldEdhc1VzYWdlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2Uuc2V0R2FzVXNhZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI0CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTAKICAgIC8vIGdhc1VzYWdlID0gQm94TWFwPEJ5dGUsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICd1JyB9KTsKICAgIGJ5dGVjIDEyIC8vICJ1IgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjUKICAgIC8vIHRoaXMuZ2FzVXNhZ2UoY2hhaW5JZCkudmFsdWUgPSBnYXNBbW91bnQ7CiAgICBzd2FwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjIyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5zZXRHYXNPcmFjbGVbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRHYXNPcmFjbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzAKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzEKICAgIC8vIHRoaXMuZ2FzT3JhY2xlLnZhbHVlID0gZ2FzT3JhY2xlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjgKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3Rbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozNAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjpPd25hYmxlLnRyYW5zZmVyT3duZXJzaGlwW3JvdXRpbmddKCkgLT4gdm9pZDoKdHJhbnNmZXJPd25lcnNoaXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxNgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE4CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBieXRlY18yIC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE5CiAgICAvLyB0aGlzLm93bmVyLnZhbHVlID0gbmV3T3duZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTYKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5fc3dhcEFuZEJyaWRnZShmZWVGcm9tTmF0aXZlOiB1aW50NjQsIGFzc2V0VHJhbnNmZXJSZWY6IHVpbnQ2NCwgcmVjaXBpZW50OiBieXRlcywgZGVzdGluYXRpb25DaGFpbklkOiBieXRlcywgcmVjZWl2ZVRva2VuOiBieXRlcywgbm9uY2U6IGJ5dGVzLCBmZWVUb2tlbkFtb3VudDogdWludDY0LCBidWRnZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKX3N3YXBBbmRCcmlkZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExNi0xMjUKICAgIC8vIHByaXZhdGUgX3N3YXBBbmRCcmlkZ2UoCiAgICAvLyAgIGZlZUZyb21OYXRpdmU6IHVpbnQ2NCwKICAgIC8vICAgYXNzZXRUcmFuc2ZlclJlZjogZ3R4bi5Bc3NldFRyYW5zZmVyVHhuLAogICAgLy8gICByZWNpcGllbnQ6IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgZGVzdGluYXRpb25DaGFpbklkOiBCeXRlLAogICAgLy8gICByZWNlaXZlVG9rZW46IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgbm9uY2U6IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgZmVlVG9rZW5BbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgYnVkZ2V0OiB1aW50NjQsCiAgICAvLyApOiB2b2lkIHsKICAgIHByb3RvIDggMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMjYKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjY0CiAgICAvLyBhc3NlcnQodGhpcy5jYW5Td2FwLnZhbHVlLCAnUm91dGVyOiBzd2FwIHByb2hpYml0ZWQnKTsKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUzCiAgICAvLyBjYW5Td2FwID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7CiAgICBieXRlY18xIC8vICJjYW5Td2FwIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo2NAogICAgLy8gYXNzZXJ0KHRoaXMuY2FuU3dhcC52YWx1ZSwgJ1JvdXRlcjogc3dhcCBwcm9oaWJpdGVkJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYXNzZXJ0IC8vIFJvdXRlcjogc3dhcCBwcm9oaWJpdGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEyOAogICAgLy8gY29uc3QgYW1vdW50ID0gYW1vdW50RnJvbUFzc2V0VHJhbnNmZXIoYXNzZXRUcmFuc2ZlclJlZik7CiAgICBmcmFtZV9kaWcgLTcKICAgIGNhbGxzdWIgYW1vdW50RnJvbUFzc2V0VHJhbnNmZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMjkKICAgIC8vIGFzc2VydChhbW91bnQgPiBmZWVUb2tlbkFtb3VudCwgJ0JyaWRnZTogYW1vdW50IHRvbyBsb3cgZm9yIGZlZScpOwogICAgZnJhbWVfZGlnIC0yCiAgICA+CiAgICBhc3NlcnQgLy8gQnJpZGdlOiBhbW91bnQgdG9vIGxvdyBmb3IgZmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEzMAogICAgLy8gYXNzZXJ0KCFyZWNpcGllbnQuYnl0ZXMuZXF1YWxzKGJ6ZXJvKDMyKSksICdCcmlkZ2U6IGJyaWRnZSB0byB0aGUgemVybyBhZGRyZXNzJyk7CiAgICBpbnRjXzMgLy8gMzIKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTYKICAgID09CiAgICAhCiAgICBhc3NlcnQgLy8gQnJpZGdlOiBicmlkZ2UgdG8gdGhlIHplcm8gYWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzIKICAgIC8vIGNvbnN0IGZlZUZyb21TdGFibGU6IHVpbnQ2NCA9IHRoaXMuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbihhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldCwgZmVlVG9rZW5BbW91bnQpOwogICAgZnJhbWVfZGlnIC03CiAgICBndHhucyBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY1CiAgICAvLyBpZiAoZmVlVG9rZW5BbW91bnQgPT09IDApIHJldHVybiAwOwogICAgZnJhbWVfZGlnIC0yCiAgICBibnogX3N3YXBBbmRCcmlkZ2VfYWZ0ZXJfaWZfZWxzZUAzCiAgICBpbnRjXzEgLy8gMAoKX3N3YXBBbmRCcmlkZ2VfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbkA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzMKICAgIC8vIGNvbnN0IGJyaWRnaW5nRmVlOiB1aW50NjQgPSBmZWVGcm9tTmF0aXZlICsgZmVlRnJvbVN0YWJsZTsKICAgIGZyYW1lX2RpZyAtOAogICAgZGlnIDEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM0CiAgICAvLyBlbWl0PEJyaWRnaW5nRmVlRnJvbVRva2Vucz4oeyBmZWVGcm9tTmF0aXZlLCBmZWVGcm9tU3RhYmxlLCBmZWVTdGFibGVUb2tlbkFtb3VudDogZmVlVG9rZW5BbW91bnQgfSk7CiAgICBmcmFtZV9kaWcgLTgKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MzZiYWZhZGQgLy8gbWV0aG9kICJCcmlkZ2luZ0ZlZUZyb21Ub2tlbnModWludDY0LHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM2CiAgICAvLyBjb25zdCBhbW91bnRBZnRlckZlZTogdWludDY0ID0gYW1vdW50IC0gZmVlVG9rZW5BbW91bnQ7CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEzOAogICAgLy8gY29uc3QgdlVzZEFtb3VudCA9IHRoaXMuc2VuZEFuZFN3YXBUb1ZVc2QoYXNzZXRUcmFuc2ZlclJlZi54ZmVyQXNzZXQsIHNlbmRlciwgYW1vdW50QWZ0ZXJGZWUpOwogICAgZnJhbWVfZGlnIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM3CiAgICAvLyBjb25zdCBzZW5kZXIgPSBuZXcgQWRkcmVzcyhUeG4uc2VuZGVyKTsKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM4CiAgICAvLyBjb25zdCB2VXNkQW1vdW50ID0gdGhpcy5zZW5kQW5kU3dhcFRvVlVzZChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldCwgc2VuZGVyLCBhbW91bnRBZnRlckZlZSk7CiAgICB1bmNvdmVyIDIKICAgIGNhbGxzdWIgc2VuZEFuZFN3YXBUb1ZVc2QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBhc3NlcnQoZGVzdGluYXRpb25DaGFpbklkICE9PSB0aGlzLmNoYWluSWQudmFsdWUsICdCcmlkZ2U6IHdyb25nIGRlc3RpbmF0aW9uIGNoYWluJyk7CiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gY2hhaW5JZCA9IEdsb2JhbFN0YXRlPEJ5dGU+KCk7CiAgICBieXRlYyA1IC8vICJjaGFpbklkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTAKICAgIC8vIGFzc2VydChkZXN0aW5hdGlvbkNoYWluSWQgIT09IHRoaXMuY2hhaW5JZC52YWx1ZSwgJ0JyaWRnZTogd3JvbmcgZGVzdGluYXRpb24gY2hhaW4nKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTUKICAgIGRpZyAxCiAgICAhPQogICAgYXNzZXJ0IC8vIEJyaWRnZTogd3JvbmcgZGVzdGluYXRpb24gY2hhaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyByZXR1cm4gY2hhaW5JZC5ieXRlcy5jb25jYXQodG9rZW4uYnl0ZXMpOwogICAgZnJhbWVfZGlnIC01CiAgICBmcmFtZV9kaWcgLTQKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2NwogICAgLy8gb3RoZXJCcmlkZ2VUb2tlbnMgPSBCb3hNYXA8Ynl0ZXMsIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ3QnIH0pOwogICAgYnl0ZWMgNyAvLyAidCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTEKICAgIC8vIGFzc2VydCh0aGlzLm90aGVyQnJpZGdlVG9rZW5zKHRoaXMuX2dldE90aGVyQnJpZGdlVG9rZW5zS2V5KGRlc3RpbmF0aW9uQ2hhaW5JZCwgcmVjZWl2ZVRva2VuKSkuZXhpc3RzLCAnQnJpZGdlOiB1bmtub3duIGNoYWluIG9yIHRva2VuJyk7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBCcmlkZ2U6IHVua25vd24gY2hhaW4gb3IgdG9rZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTUzCiAgICAvLyBjb25zdCBtZXNzYWdlID0gdGhpcy5oYXNoTWVzc2FnZShhbW91bnQsIHJlY2lwaWVudCwgdGhpcy5jaGFpbklkLnZhbHVlLCBkZXN0aW5hdGlvbkNoYWluSWQsIHJlY2VpdmVUb2tlbiwgbm9uY2UpOwogICAgZGlnIDEKICAgIGZyYW1lX2RpZyAtNgogICAgdW5jb3ZlciAyCiAgICBmcmFtZV9kaWcgLTUKICAgIGZyYW1lX2RpZyAtNAogICAgZnJhbWVfZGlnIC0zCiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5oYXNoTWVzc2FnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZCkgKyB0aGlzLmdldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0KCk7CiAgICBmcmFtZV9kaWcgLTUKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNTUKICAgIC8vIHJldHVybiAxNTcwMDsKICAgIGludGMgNCAvLyAxNTcwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZCkgKyB0aGlzLmdldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0KCk7CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyBzZW50TWVzc2FnZXMgPSBCb3hNYXA8U3RhdGljQnl0ZXM8MzI+LCBTdGF0aWNCeXRlcz4oeyBrZXlQcmVmaXg6ICdzJyB9KTsKICAgIHB1c2hieXRlcyAicyIKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTcyCiAgICAvLyBhc3NlcnQoIXRoaXMuc2VudE1lc3NhZ2VzKG1lc3NhZ2UpLmV4aXN0cywgJ0JyaWRnZTogdG9rZW5zIGFscmVhZHkgc2VudCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBCcmlkZ2U6IHRva2VucyBhbHJlYWR5IHNlbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc0CiAgICAvLyB0aGlzLnNlbnRNZXNzYWdlcyhtZXNzYWdlKS52YWx1ZSA9IG5ldyBTdGF0aWNCeXRlcygpOwogICAgcHVzaGJ5dGVzIDB4CiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE3NgogICAgLy8gY29uc3QgZGVzdGluYXRpb25DaGFpbklkID0gbWVzc2FnZS5hdCgxKTsKICAgIGRpZyAxCiAgICBleHRyYWN0IDEgMSAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc3LTE4MQogICAgLy8gY29uc3QgbWVzc2FnZUNvc3QgPSBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uQ29zdCwKICAgIC8vICAgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBtZXNzZW5nZXIgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjIDYgLy8gIm1lc3NlbmdlciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc5CiAgICAvLyBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNzctMTgxCiAgICAvLyBjb25zdCBtZXNzYWdlQ29zdCA9IGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IE1lc3Nlbmdlci5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25Db3N0LAogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBieXRlYyAxMyAvLyBtZXRob2QgImdldFRyYW5zYWN0aW9uQ29zdChieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxODUKICAgIC8vIHJlY2VpdmVyOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5hZGRyZXNzLAogICAgZGlnIDEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTg3LTE4OQogICAgLy8gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogTWVzc2VuZ2VyLnByb3RvdHlwZS5zZW5kTWVzc2FnZSwgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLCBhcmdzOiBbcGF5bWVudFBhcmFtcywgbWVzc2FnZV0sCiAgICAvLyB9KTsKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGR1cAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTgzLTE4NgogICAgLy8gY29uc3QgcGF5bWVudFBhcmFtcyA9IGl0eG4ucGF5bWVudCh7CiAgICAvLyAgIGFtb3VudDogbWVzc2FnZUNvc3QsCiAgICAvLyAgIHJlY2VpdmVyOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5hZGRyZXNzLAogICAgLy8gfSk7CiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE4Ny0xODkKICAgIC8vIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IE1lc3Nlbmdlci5wcm90b3R5cGUuc2VuZE1lc3NhZ2UsIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwgYXJnczogW3BheW1lbnRQYXJhbXMsIG1lc3NhZ2VdLAogICAgLy8gfSk7CiAgICBpdHhuX25leHQKICAgIHB1c2hieXRlcyAweGQwMmY1N2Y1IC8vIG1ldGhvZCAic2VuZE1lc3NhZ2UocGF5LGJ5dGVbMzJdKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciAzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTYKICAgIC8vIGVtaXQ8UmVjZWl2ZUZlZT4oeyBicmlkZ2VUcmFuc2FjdGlvbkNvc3QsIG1lc3NhZ2VUcmFuc2FjdGlvbkNvc3QgfSk7CiAgICBkaWcgMQogICAgaXRvYgogICAgZGlnIDEKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4NGI1NTQxOWIgLy8gbWV0aG9kICJSZWNlaXZlRmVlKHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTU3CiAgICAvLyBhc3NlcnQoYnJpZGdpbmdGZWUgPj0gYnJpZGdlVHJhbnNhY3Rpb25Db3N0ICsgbWVzc2FnZVRyYW5zYWN0aW9uQ29zdCwgJ0JyaWRnZTogbm90IGVub3VnaCBmZWUnKTsKICAgICsKICAgIHVuY292ZXIgMgogICAgPD0KICAgIGFzc2VydCAvLyBCcmlkZ2U6IG5vdCBlbm91Z2ggZmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE1OC0xNjUKICAgIC8vIGVtaXQ8VG9rZW5zU2VudD4oewogICAgLy8gICAgIGFtb3VudCwKICAgIC8vICAgICByZWNpcGllbnQsCiAgICAvLyAgICAgZGVzdGluYXRpb25DaGFpbklkLAogICAgLy8gICAgIHJlY2VpdmVUb2tlbiwKICAgIC8vICAgICBub25jZSwKICAgIC8vICAgICBtZXNzZW5nZXI6IEFMTEJSSURHRV9NRVNTRU5HRVIsCiAgICAvLyAgIH0sCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTYKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC01CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTMKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNjQKICAgIC8vIG1lc3NlbmdlcjogQUxMQlJJREdFX01FU1NFTkdFUiwKICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTU4LTE2NQogICAgLy8gZW1pdDxUb2tlbnNTZW50Pih7CiAgICAvLyAgICAgYW1vdW50LAogICAgLy8gICAgIHJlY2lwaWVudCwKICAgIC8vICAgICBkZXN0aW5hdGlvbkNoYWluSWQsCiAgICAvLyAgICAgcmVjZWl2ZVRva2VuLAogICAgLy8gICAgIG5vbmNlLAogICAgLy8gICAgIG1lc3NlbmdlcjogQUxMQlJJREdFX01FU1NFTkdFUiwKICAgIC8vICAgfSwKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTgtMTY2CiAgICAvLyBlbWl0PFRva2Vuc1NlbnQ+KHsKICAgIC8vICAgICBhbW91bnQsCiAgICAvLyAgICAgcmVjaXBpZW50LAogICAgLy8gICAgIGRlc3RpbmF0aW9uQ2hhaW5JZCwKICAgIC8vICAgICByZWNlaXZlVG9rZW4sCiAgICAvLyAgICAgbm9uY2UsCiAgICAvLyAgICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICB9LAogICAgLy8gKTsKICAgIHB1c2hieXRlcyAweDIyOWZiYWVjIC8vIG1ldGhvZCAiVG9rZW5zU2VudCh1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlWzMyXSxieXRlWzMyXSxieXRlKSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCl9zd2FwQW5kQnJpZGdlX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY3CiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoewogICAgZnJhbWVfZGlnIDEKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzkKICAgIC8vIHByb3RlY3RlZCBicmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yID0gQm94TWFwPEFzc2V0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZicgfSk7CiAgICBwdXNoYnl0ZXMgImYiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY3CiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoewogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAtMgogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNjctMzcxCiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0UHJpY2UsCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW3RoaXMuY2hhaW5JZC52YWx1ZV0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY5CiAgICAvLyBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY5CiAgICAvLyBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNzAKICAgIC8vIGFyZ3M6IFt0aGlzLmNoYWluSWQudmFsdWVdLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNoYWluSWQgPSBHbG9iYWxTdGF0ZTxCeXRlPigpOwogICAgYnl0ZWMgNSAvLyAiY2hhaW5JZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzcwCiAgICAvLyBhcmdzOiBbdGhpcy5jaGFpbklkLnZhbHVlXSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM2Ny0zNzEKICAgIC8vIGNvbnN0IGZlZTogdWludDY0ID0gdGhpcy5icmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yKGFzc2V0KS52YWx1ZSAqIGZlZVRva2VuQW1vdW50IC8gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogR2FzT3JhY2xlLnByb3RvdHlwZS5nZXRQcmljZSwKICAgIC8vICAgYXBwSWQ6IHRoaXMuZ2FzT3JhY2xlLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbdGhpcy5jaGFpbklkLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgcHVzaGJ5dGVzIDB4MWRiNzBjZGQgLy8gbWV0aG9kICJnZXRQcmljZShieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTMyCiAgICAvLyBjb25zdCBmZWVGcm9tU3RhYmxlOiB1aW50NjQgPSB0aGlzLl9jb252ZXJ0QnJpZGdpbmdGZWVJblRva2Vuc1RvTmF0aXZlVG9rZW4oYXNzZXRUcmFuc2ZlclJlZi54ZmVyQXNzZXQsIGZlZVRva2VuQW1vdW50KTsKICAgIGIgX3N3YXBBbmRCcmlkZ2VfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbkA1CgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmhhc2hNZXNzYWdlKGFtb3VudDogdWludDY0LCByZWNpcGllbnQ6IGJ5dGVzLCBzb3VyY2VDaGFpbklkOiBieXRlcywgZGVzdGluYXRpb25DaGFpbklkOiBieXRlcywgcmVjZWl2ZVRva2VuOiBieXRlcywgbm9uY2U6IGJ5dGVzKSAtPiBieXRlczoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmhhc2hNZXNzYWdlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDctMzE1CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIGhhc2hNZXNzYWdlKAogICAgLy8gICBhbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjaXBpZW50OiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIHNvdXJjZUNoYWluSWQ6IEJ5dGUsCiAgICAvLyAgIGRlc3RpbmF0aW9uQ2hhaW5JZDogQnl0ZSwKICAgIC8vICAgcmVjZWl2ZVRva2VuOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIG5vbmNlOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyApOiBTdGF0aWNCeXRlczwzMj4gewogICAgcHJvdG8gNiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxNgogICAgLy8gY29uc3QgYW1vdW50MzIgPSBiemVybygyNCkuY29uY2F0KG9wLml0b2IoYW1vdW50KSk7CiAgICBwdXNoaW50IDI0IC8vIDI0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC02CiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzE3CiAgICAvLyBjb25zdCBzb3VyY2VDaGFpbklkMzIgPSBiemVybygzMSkuY29uY2F0KHNvdXJjZUNoYWluSWQuYnl0ZXMpOwogICAgcHVzaGludCAzMSAvLyAzMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxOC0zMTkKICAgIC8vIGNvbnN0IHBhY2tlZCA9IGFtb3VudDMyCiAgICAvLyAgIC5jb25jYXQocmVjaXBpZW50LmJ5dGVzKQogICAgc3dhcAogICAgZnJhbWVfZGlnIC01CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzE4LTMyMAogICAgLy8gY29uc3QgcGFja2VkID0gYW1vdW50MzIKICAgIC8vICAgLmNvbmNhdChyZWNpcGllbnQuYnl0ZXMpCiAgICAvLyAgIC5jb25jYXQoc291cmNlQ2hhaW5JZDMyKQogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxOC0zMjEKICAgIC8vIGNvbnN0IHBhY2tlZCA9IGFtb3VudDMyCiAgICAvLyAgIC5jb25jYXQocmVjaXBpZW50LmJ5dGVzKQogICAgLy8gICAuY29uY2F0KHNvdXJjZUNoYWluSWQzMikKICAgIC8vICAgLmNvbmNhdChyZWNlaXZlVG9rZW4uYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTgtMzIyCiAgICAvLyBjb25zdCBwYWNrZWQgPSBhbW91bnQzMgogICAgLy8gICAuY29uY2F0KHJlY2lwaWVudC5ieXRlcykKICAgIC8vICAgLmNvbmNhdChzb3VyY2VDaGFpbklkMzIpCiAgICAvLyAgIC5jb25jYXQocmVjZWl2ZVRva2VuLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KG5vbmNlLmJ5dGVzKQogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzIzCiAgICAvLyAuY29uY2F0KEFMTEJSSURHRV9NRVNTRU5HRVIuYnl0ZXMpOwogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTgtMzIzCiAgICAvLyBjb25zdCBwYWNrZWQgPSBhbW91bnQzMgogICAgLy8gICAuY29uY2F0KHJlY2lwaWVudC5ieXRlcykKICAgIC8vICAgLmNvbmNhdChzb3VyY2VDaGFpbklkMzIpCiAgICAvLyAgIC5jb25jYXQocmVjZWl2ZVRva2VuLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KG5vbmNlLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KEFMTEJSSURHRV9NRVNTRU5HRVIuYnl0ZXMpOwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyNQogICAgLy8gY29uc3QgaGFzaCA9IG9wLmtlY2NhazI1NihwYWNrZWQpOyAvLyAzMiBieXRlcwogICAga2VjY2FrMjU2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyOAogICAgLy8gY29uc3Qgd2l0aFNyYyA9IG9wLnNldEJ5dGUoaGFzaCwgMCwgb3AuYnRvaShzb3VyY2VDaGFpbklkLmJ5dGVzKSk7CiAgICBmcmFtZV9kaWcgLTQKICAgIGJ0b2kKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCiAgICBzZXRieXRlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyOQogICAgLy8gY29uc3Qgd2l0aERzdCA9IG9wLnNldEJ5dGUod2l0aFNyYywgMSwgb3AuYnRvaShkZXN0aW5hdGlvbkNoYWluSWQuYnl0ZXMpKTsKICAgIGZyYW1lX2RpZyAtMwogICAgYnRvaQogICAgaW50Y18wIC8vIDEKICAgIHN3YXAKICAgIHNldGJ5dGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzMxCiAgICAvLyByZXR1cm4gbmV3IFN0YXRpY0J5dGVzPDMyPih3aXRoRHN0KTsKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBzaXplCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZChhc3NldDogdWludDY0LCByZWNpcGllbnQ6IGJ5dGVzLCB2VXNkQW1vdW50OiB1aW50NjQsIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCkgLT4gdWludDY0OgpyZWNlaXZlQW5kU3dhcEZyb21WVXNkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjMtMTY4CiAgICAvLyBwcm90ZWN0ZWQgcmVjZWl2ZUFuZFN3YXBGcm9tVlVzZCgKICAgIC8vICAgYXNzZXQ6IEFzc2V0LAogICAgLy8gICByZWNpcGllbnQ6IEFkZHJlc3MsCiAgICAvLyAgIHZVc2RBbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjZWl2ZUFtb3VudE1pbjogdWludDY0LAogICAgLy8gKTogdWludDY0IHsKICAgIHByb3RvIDQgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjkKICAgIC8vIGFzc2VydCh0aGlzLnBvb2xzKGFzc2V0KS5leGlzdHMsICdSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbCcpOwogICAgZnJhbWVfZGlnIC00CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM0CiAgICAvLyBwb29scyA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjkKICAgIC8vIGFzc2VydCh0aGlzLnBvb2xzKGFzc2V0KS5leGlzdHMsICdSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzAKICAgIC8vIGNvbnN0IHBvb2xJZCA9IHRoaXMucG9vbHMoYXNzZXQpLnZhbHVlOwogICAgYm94X2dldAogICAgcG9wCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE3MS0xNzUKICAgIC8vIHJldHVybiBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBQb29sLnByb3RvdHlwZS5zd2FwRnJvbVZVc2QsCiAgICAvLyAgIGFwcElkOiBwb29sSWQsCiAgICAvLyAgIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzQKICAgIC8vIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MgogICAgLy8gcHJpdmF0ZSByZWJhbGFuY2VyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oeyBpbml0aWFsVmFsdWU6IG5ldyBBZGRyZXNzKGJ6ZXJvKDApKSB9KTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBieXRlYyA0IC8vICJyZWJhbGFuY2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzQKICAgIC8vIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTMKICAgID09CiAgICBieXRlYyAxMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTcxLTE3NQogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IFBvb2wucHJvdG90eXBlLnN3YXBGcm9tVlVzZCwKICAgIC8vICAgYXBwSWQ6IHBvb2xJZCwKICAgIC8vICAgYXJnczogW3JlY2lwaWVudCwgdlVzZEFtb3VudCwgcmVjZWl2ZUFtb3VudE1pbiwgcmVjaXBpZW50ID09PSB0aGlzLnJlYmFsYW5jZXIudmFsdWVdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBwdXNoYnl0ZXMgMHgwZDFiNGMwNiAvLyBtZXRob2QgInN3YXBGcm9tVlVzZChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsYm9vbCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNlbmRBbmRTd2FwVG9WVXNkKGFzc2V0OiB1aW50NjQsIHVzZXI6IGJ5dGVzLCBhbW91bnQ6IHVpbnQ2NCkgLT4gdWludDY0OgpzZW5kQW5kU3dhcFRvVlVzZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTc5CiAgICAvLyBwcm90ZWN0ZWQgc2VuZEFuZFN3YXBUb1ZVc2QoYXNzZXQ6IEFzc2V0LCB1c2VyOiBBZGRyZXNzLCBhbW91bnQ6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTgwCiAgICAvLyBhc3NlcnQodGhpcy5wb29scyhhc3NldCkuZXhpc3RzLCAnUm91dGVyOiBubyBwb29sJyk7CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzQKICAgIC8vIHBvb2xzID0gQm94TWFwPEFzc2V0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAncCcgfSk7CiAgICBieXRlYyA4IC8vICJwIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE4MAogICAgLy8gYXNzZXJ0KHRoaXMucG9vbHMoYXNzZXQpLmV4aXN0cywgJ1JvdXRlcjogbm8gcG9vbCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBSb3V0ZXI6IG5vIHBvb2wKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTgxCiAgICAvLyBjb25zdCBwb29sSWQgPSB0aGlzLnBvb2xzKGFzc2V0KS52YWx1ZTsKICAgIGJveF9nZXQKICAgIHBvcAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODMtMTg4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE4NgogICAgLy8gYXNzZXRSZWNlaXZlcjogQXBwbGljYXRpb24ocG9vbElkKS5hZGRyZXNzLAogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODMtMTg3CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODMtMTg4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxOTAtMTk0CiAgICAvLyByZXR1cm4gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogUG9vbC5wcm90b3R5cGUuc3dhcFRvVlVzZCwKICAgIC8vICAgYXBwSWQ6IHBvb2xJZCwKICAgIC8vICAgYXJnczogW3VzZXIsIGFtb3VudCwgdXNlciA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxOTMKICAgIC8vIGFyZ3M6IFt1c2VyLCBhbW91bnQsIHVzZXIgPT09IHRoaXMucmViYWxhbmNlci52YWx1ZV0sCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUyCiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDQgLy8gInJlYmFsYW5jZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE5MwogICAgLy8gYXJnczogW3VzZXIsIGFtb3VudCwgdXNlciA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgID09CiAgICBieXRlYyAxMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTkwLTE5NAogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IFBvb2wucHJvdG90eXBlLnN3YXBUb1ZVc2QsCiAgICAvLyAgIGFwcElkOiBwb29sSWQsCiAgICAvLyAgIGFyZ3M6IFt1c2VyLCBhbW91bnQsIHVzZXIgPT09IHRoaXMucmViYWxhbmNlci52YWx1ZV0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIHB1c2hieXRlcyAweGQ5NzhhZDE0IC8vIG1ldGhvZCAic3dhcFRvVlVzZChhZGRyZXNzLHVpbnQ2NCxib29sKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRHYXNVc2FnZShjaGFpbklkOiBieXRlcykgLT4gdWludDY0OgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTctMTgKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gZ2V0R2FzVXNhZ2UoY2hhaW5JZDogQnl0ZSk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTAKICAgIC8vIGdhc1VzYWdlID0gQm94TWFwPEJ5dGUsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICd1JyB9KTsKICAgIGJ5dGVjIDEyIC8vICJ1IgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTkKICAgIC8vIHJldHVybiB0aGlzLmdhc1VzYWdlKGNoYWluSWQpLnZhbHVlOwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZDogYnl0ZXMpIC0+IHVpbnQ2NDoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzQtMzUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdChjaGFpbklkOiBCeXRlKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czoxMAogICAgLy8gZ2FzVXNhZ2UgPSBCb3hNYXA8Qnl0ZSwgdWludDY0Pih7IGtleVByZWZpeDogJ3UnIH0pOwogICAgYnl0ZWMgMTIgLy8gInUiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozNgogICAgLy8gY29uc3QgZ2FzQW1vdW50ID0gdGhpcy5nYXNVc2FnZShjaGFpbklkKS52YWx1ZTsKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjM3LTQxCiAgICAvLyByZXR1cm4gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogR2FzT3JhY2xlLnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbkdhc0Nvc3RJbk5hdGl2ZVRva2VuLAogICAgLy8gICBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtjaGFpbklkLCBnYXNBbW91bnRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjM5CiAgICAvLyBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzkKICAgIC8vIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjQwCiAgICAvLyBhcmdzOiBbY2hhaW5JZCwgZ2FzQW1vdW50XSwKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzctNDEKICAgIC8vIHJldHVybiBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBHYXNPcmFjbGUucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uR2FzQ29zdEluTmF0aXZlVG9rZW4sCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2NoYWluSWQsIGdhc0Ftb3VudF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIHB1c2hieXRlcyAweGMyYWZjY2QxIC8vIG1ldGhvZCAiZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5OYXRpdmVUb2tlbihieXRlLHVpbnQ2NCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo6T3duYWJsZS5vbmx5T3duZXIoKSAtPiB2b2lkOgpvbmx5T3duZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsICdPbmx5IG93bmVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjXzIgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTMKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLCAnT25seSBvd25lcicpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gT25seSBvd25lcgogICAgcmV0c3ViCg==",clear:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CyAFAQAIINR6JhEEFR98dQdjYW5Td2FwBW93bmVyCWdhc09yYWNsZQpyZWJhbGFuY2VyB2NoYWluSWQJbWVzc2VuZ2VyAXQBcA1zdG9wQXV0aG9yaXR5AQEBAAF1BENBeqME90dbggwVH3x1AAAAAAAAPVQDBoEBMRhAAAkjrycETGcpImcxGRREMRhBAM2CDARl9wVzBD44AnwEpGAK7QTeTK1KBE66ByEExhftcwRXUxVgBGOAgngEBlB8agT1+W6zBEsGLKAEw83ZKicNggkEB9+EKQSAxccPBEE00GgE7xX4VQRrHuIjBBhwpJIENVcyTQQEsWHxBNKzV+snDoIEBAylrnoEJ0cPBwTL/G0CBOF7r7Q2GgCOGwDZARQBZAGpArACzQLqAwYDJANdA+QEHgRCAAYAAQRXBMsFEwUoBTYFPgVPBWAFcgWQBaEFswAnD7AiQycPsCJDgARmTKQENhoAjgEAiACKAgCL/oEKCIsAMgwNQQAqsYEGshCBBbIZJxCyHicQsh+L/40CAAsABLNC/9syALIBQv/1I7IBQv/viYoBAYv/OBQyChJEi/84IDIDEkSL/zgVMgMSRIv/OBKJigEBi/84BzIKE0EAAiOJi/84IDIDE0EAAiOJi/84CTIDE0EAAiOJi/84CIk2GgFJFSUSRDYaAkkVIhJENhoDSRUkEkQXNhoESRUkEkQXKksEZytMZycJTwNnJwVPAmcnBkxnIkM2GgFJFSQSRBeIB3exMgqyFCOyErIRgQSyECOyAbOAGEJyaWRnZTogb3B0LWluIGNvbXBsZXRlZLAiQzEWgQIJSTgQIhJEMRYiCUk4EIEEEkQ2GgFJFSUSRDYaAkkVIhJENhoDSRUlEkQ2GgRJFSUSRDYaBUkVJBJEF08GiP8cTgZOBiNPB4gEYSJDMRYiCUk4EIEEEkQ2GgFJFSUSRDYaAkkVIhJENhoDSRUlEkQ2GgRJFSUSRDYaBUkVJBJEFzYaBkkVJBJEFyNOB4gEHCJDMRYiCUk4ECISRDYaAUkVJBJEFzYaAklOA0kVJRJENhoDSRUiEkQ2GgRJFSUSRDYaBUlOBkkVJRJENhoGSRUkEkQXIyllRESAAWJLBFBJvUUBRE8HiP50SSEED0QjJwVlREsISwhPCE8DSwhPCIgFA08CvkRLAUxQAkxRAAJMUQIgUElOBkkVJRJEgAFtSwFQSb1FARREgAC/sSMnBmVEgAQz4UeqshqyGLIagQayECOyAbO0PklXBABMVwAEKBJESRUiEkQjU0RPAoEYW08DTwRPBIgEz0whBAlJQQAPsUsEsgdJsggishAjsgGzSwEWSwVQSwRQJwpQSwNQgARFg2rWTFCwIkM2GgFJFSISRDYaAkkVJRJEiAWZgAFiTwJQTL8iQzYaAUkVIhJENhoCSRUlEkSIBXxQJwdMUIAAvyJDNhoBSRUiEkQ2GgJJFSUSRIgFX1AnB0xQvEgiQzYaAUkVJBJEF4gFSrEjKmVEsgeyCCKyECOyAbMiQzYaAUkVJBJEF0mIBSsyCklOAkxwAExJTwJEQQAasSMqZUSyFEmyEksCshFLAbIAgQSyECOyAbMiQzYaAUkVIhJENhoCSRUkEkQXSwGIBJ+xIycGZUQnDrIaSwOyGrIYgQayECOyAbO0PklXBABMVwAEKBJESRUkEkQXsSMrZUROAggWgAR799UMshpPA7IashqyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF0wWgAFlTFC+RBcKFihMULAiQzYaAUkVJBJEFzYaAkkVJRJENhoDSRUiEkQ2GgRJFSISRDYaBUkVJRJENhoGSRUlEkSIAwQoTFCwIkM2GgFJFSISRDYaAkkVJRJEUCcHTFC9RQEnCyNPAlQoTFCwIkM2GgFJFSISRIgD0SEECBYoTFCwIkMxFiIJSTgQgQQSRDYaAUkVJBJEFzYaAkkVJRJENhoDSRUkEkQXNhoESRUkEkQXI4j7kCMpZUREMQBLBIj7v08FOBFJSwNLA4gDB0sGSwZPAk8GiAKiTwNPBFBPAhZQTwMWUE8CFlBMFlCABBVARLNMULAiQzYaAUkVJBJEFzYaAkkVJBJEF4gDfEkWJwhLAVBPAxa/THEBRIEJTAlJgQYIgQpMlIABZksDUEwWv4EKTJSAAWVPAlBMFr8iQzYaAUkVJBJEF4gDPRYnCExQvEgiQzEAIycJZUQSRCkjZyJDiAMjKSJnIkM2GgFJFSUSRIgDEycJTGciQzYaAUkVJRJEiAMCJwRMZyJDNhoBSRUiEkSIAqcWKExQsCJDNhoBSRUiEkQ2GgJJFSQSRBeIAtYnDE8CUEwWvyJDNhoBSRUkEkQXiALAK0xnIkM2GgFJFSISRIgCchYoTFCwIkM2GgFJFSUSRIgCnipMZyJDiggAi/8jiPpNIyllRESL+Yj6fkmL/g1EJa+L+hIURIv5OBGL/kAA7iOL+EsBCIv4Fk8CFlCL/hZQgAQ2uvrdTFCwiwCL/gmLATEATwKIAZUjJwVlRIv7SwETRIv7i/xQJwdMUL1FAURLAYv6TwKL+4v8i/2IAOKL+4gB3yEECIABc0sCUEm9RQEURIAAv0sBVwEBsSMnBmVEJw2yGkyyGkmyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF0sBcghEsbIHSbIIIrIQI7IBtoAE0C9X9bIaTwOyGkyyGIEGshAjsgGzSwEWSwEWUIAES1VBm0xQsAhPAg5EFov6UIv7UIv8UIv9UCcKUIAEIp+67ExQsImLARaAAWZMUL5EF4v+C7EjK2VEIycFZUSABB23DN2yGrIashiBBrIQI7IBs7Q+SVcEAExXAAQoEkRJFSQSRBcKQv7QigYBgRivi/oWUIEfr4v8UEyL+1BMUIv+UIv/UCcKUAKL/BcjTFaL/RciTFZJFSUSRImKBAGL/BYnCExQSb1FAUS+SBexi/4Wi/8WIycEZUSL/RInCyNPAlSABA0bTAayGov9shpPArIaTLIashqyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF4mKAwGL/RYnCExQSb1FAUS+SBexSXIIRLIUi/+yEov9shGBBLIQI7IBs7GL/xYjJwRlRIv+EicLI08CVIAE2XitFLIai/6yGkyyGrIashiBBrIQI7IBs7Q+SVcEAExXAAQoEkRJFSQSRBeJigEBJwyL/1C+RBeJigEBJwyL/1C+RBexIytlREwWgATCr8zRshqL/7IashqyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF4kxACMqZUQSRIk=",clear:"C4EBQw=="},events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"feeFromNative"},{type:"uint64",name:"feeFromStable"},{type:"uint64",name:"feeStableTokenAmount"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]},{name:"TokensReceived",args:[{type:"uint64",name:"receiveAmount"},{type:"address",name:"recipient"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"},{type:"byte[32]",name:"message"}]},{name:"Swapped",args:[{type:"address",name:"sender"},{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"receiveTokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"receivedAmount"}]}],templateVariables:{}};var X=class o{static get create(){return{_resolveByMethod(a){switch(a.method){case"createApplication":case"createApplication(address,byte,uint64,uint64)void":return o.create.createApplication(a)}throw new Error("Unknown ' + verb + ' method")},createApplication(a){return{...a,method:"createApplication(address,byte,uint64,uint64)void",args:Array.isArray(a.args)?a.args:[a.args.owner,a.args.chainId,a.args.messenger,a.args.gasOracle]}}}}static optInAsset(a){return{...a,method:"optInAsset(uint64)void",args:Array.isArray(a.args)?a.args:[a.args.asset]}}static swapAndBridge(a){return{...a,method:"swapAndBridge(pay,axfer,byte[32],byte,byte[32],byte[32],uint64)void",args:Array.isArray(a.args)?a.args:[a.args.paymentRef,a.args.assetTransferRef,a.args.recipient,a.args.destinationChainId,a.args.receiveToken,a.args.nonce,a.args.budget]}}static swapAndBridgeWithStable(a){return{...a,method:"swapAndBridgeWithStable(axfer,byte[32],byte,byte[32],byte[32],uint64,uint64)void",args:Array.isArray(a.args)?a.args:[a.args.assetTransferRef,a.args.recipient,a.args.destinationChainId,a.args.receiveToken,a.args.nonce,a.args.feeTokenAmount,a.args.budget]}}static receiveTokens(a){return{...a,method:"receiveTokens(pay,uint64,byte[32],byte,byte[32],byte[32],uint64)void",args:Array.isArray(a.args)?a.args:[a.args.paymentRef,a.args.amount,a.args.recipient,a.args.sourceChainId,a.args.receiveToken,a.args.nonce,a.args.receiveAmountMin]}}static registerBridge(a){return{...a,method:"registerBridge(byte,byte[32])void",args:Array.isArray(a.args)?a.args:[a.args.chainId,a.args.bridgeAddress]}}static addBridgeToken(a){return{...a,method:"addBridgeToken(byte,byte[32])void",args:Array.isArray(a.args)?a.args:[a.args.chainId,a.args.tokenAddress]}}static removeBridgeToken(a){return{...a,method:"removeBridgeToken(byte,byte[32])void",args:Array.isArray(a.args)?a.args:[a.args.chainId,a.args.tokenAddress]}}static withdrawGasTokens(a){return{...a,method:"withdrawGasTokens(uint64)void",args:Array.isArray(a.args)?a.args:[a.args.amount]}}static withdrawBridgingFeeInTokens(a){return{...a,method:"withdrawBridgingFeeInTokens(uint64)void",args:Array.isArray(a.args)?a.args:[a.args.asset]}}static getBridgingCostInTokens(a){return{...a,method:"getBridgingCostInTokens(byte,uint64)uint64",args:Array.isArray(a.args)?a.args:[a.args.destinationChainId,a.args.asset]}}static hashMessage(a){return{...a,method:"hashMessage(uint64,byte[32],byte,byte,byte[32],byte[32])byte[32]",args:Array.isArray(a.args)?a.args:[a.args.amount,a.args.recipient,a.args.sourceChainId,a.args.destinationChainId,a.args.receiveToken,a.args.nonce]}}static isOtherBridgeTokenSupported(a){return{...a,method:"isOtherBridgeTokenSupported(byte,byte[32])bool",args:Array.isArray(a.args)?a.args:[a.args.chainId,a.args.token]}}static getTransactionCost(a){return{...a,method:"getTransactionCost(byte)uint64",args:Array.isArray(a.args)?a.args:[a.args.chainId]}}static getReceiveTokensCost(a){return{...a,method:"getReceiveTokensCost()uint64",args:Array.isArray(a.args)?a.args:[]}}static getSendTransactionStorageCost(a){return{...a,method:"getSendTransactionStorageCost()uint64",args:Array.isArray(a.args)?a.args:[]}}static swap(a){return{...a,method:"swap(axfer,uint64,address,uint64,uint64)void",args:Array.isArray(a.args)?a.args:[a.args.assetTransferRef,a.args.receiveAsset,a.args.recipient,a.args.receiveAmountMin,a.args.budget]}}static addPool(a){return{...a,method:"addPool(uint64,uint64)void",args:Array.isArray(a.args)?a.args:[a.args.poolId,a.args.asset]}}static removePool(a){return{...a,method:"removePool(uint64)void",args:Array.isArray(a.args)?a.args:[a.args.tokenId]}}static stopSwap(a){return{...a,method:"stopSwap()void",args:Array.isArray(a.args)?a.args:[]}}static startSwap(a){return{...a,method:"startSwap()void",args:Array.isArray(a.args)?a.args:[]}}static setStopAuthority(a){return{...a,method:"setStopAuthority(address)void",args:Array.isArray(a.args)?a.args:[a.args.stopAuthority]}}static setRebalancer(a){return{...a,method:"setRebalancer(address)void",args:Array.isArray(a.args)?a.args:[a.args.rebalancer]}}static getGasUsage(a){return{...a,method:"getGasUsage(byte)uint64",args:Array.isArray(a.args)?a.args:[a.args.chainId]}}static setGasUsage(a){return{...a,method:"setGasUsage(byte,uint64)void",args:Array.isArray(a.args)?a.args:[a.args.chainId,a.args.gasAmount]}}static setGasOracle(a){return{...a,method:"setGasOracle(uint64)void",args:Array.isArray(a.args)?a.args:[a.args.gasOracle]}}static getTransactionRelayerCost(a){return{...a,method:"getTransactionRelayerCost(byte)uint64",args:Array.isArray(a.args)?a.args:[a.args.chainId]}}static transferOwnership(a){return{...a,method:"transferOwnership(address)void",args:Array.isArray(a.args)?a.args:[a.args.newOwner]}}};var Ta=class o{appClient;constructor(a){this.appClient=a instanceof fa?a:new fa({...a,appSpec:Ra})}decodeReturnValue(a,i){return i!==void 0?zs(i,this.appClient.getABIMethod(a),Ra.structs):void 0}static async fromCreatorAndName(a){return new o(await fa.fromCreatorAndName({...a,appSpec:Ra}))}static async fromNetwork(a){return new o(await fa.fromNetwork({...a,appSpec:Ra}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={clearState:a=>this.appClient.params.bare.clearState(a),optInAsset:a=>this.appClient.params.call(X.optInAsset(a)),swapAndBridge:a=>this.appClient.params.call(X.swapAndBridge(a)),swapAndBridgeWithStable:a=>this.appClient.params.call(X.swapAndBridgeWithStable(a)),receiveTokens:a=>this.appClient.params.call(X.receiveTokens(a)),registerBridge:a=>this.appClient.params.call(X.registerBridge(a)),addBridgeToken:a=>this.appClient.params.call(X.addBridgeToken(a)),removeBridgeToken:a=>this.appClient.params.call(X.removeBridgeToken(a)),withdrawGasTokens:a=>this.appClient.params.call(X.withdrawGasTokens(a)),withdrawBridgingFeeInTokens:a=>this.appClient.params.call(X.withdrawBridgingFeeInTokens(a)),getBridgingCostInTokens:a=>this.appClient.params.call(X.getBridgingCostInTokens(a)),hashMessage:a=>this.appClient.params.call(X.hashMessage(a)),isOtherBridgeTokenSupported:a=>this.appClient.params.call(X.isOtherBridgeTokenSupported(a)),getTransactionCost:a=>this.appClient.params.call(X.getTransactionCost(a)),getReceiveTokensCost:(a={args:[]})=>this.appClient.params.call(X.getReceiveTokensCost(a)),getSendTransactionStorageCost:(a={args:[]})=>this.appClient.params.call(X.getSendTransactionStorageCost(a)),swap:a=>this.appClient.params.call(X.swap(a)),addPool:a=>this.appClient.params.call(X.addPool(a)),removePool:a=>this.appClient.params.call(X.removePool(a)),stopSwap:(a={args:[]})=>this.appClient.params.call(X.stopSwap(a)),startSwap:(a={args:[]})=>this.appClient.params.call(X.startSwap(a)),setStopAuthority:a=>this.appClient.params.call(X.setStopAuthority(a)),setRebalancer:a=>this.appClient.params.call(X.setRebalancer(a)),getGasUsage:a=>this.appClient.params.call(X.getGasUsage(a)),setGasUsage:a=>this.appClient.params.call(X.setGasUsage(a)),setGasOracle:a=>this.appClient.params.call(X.setGasOracle(a)),getTransactionRelayerCost:a=>this.appClient.params.call(X.getTransactionRelayerCost(a)),transferOwnership:a=>this.appClient.params.call(X.transferOwnership(a))};createTransaction={clearState:a=>this.appClient.createTransaction.bare.clearState(a),optInAsset:a=>this.appClient.createTransaction.call(X.optInAsset(a)),swapAndBridge:a=>this.appClient.createTransaction.call(X.swapAndBridge(a)),swapAndBridgeWithStable:a=>this.appClient.createTransaction.call(X.swapAndBridgeWithStable(a)),receiveTokens:a=>this.appClient.createTransaction.call(X.receiveTokens(a)),registerBridge:a=>this.appClient.createTransaction.call(X.registerBridge(a)),addBridgeToken:a=>this.appClient.createTransaction.call(X.addBridgeToken(a)),removeBridgeToken:a=>this.appClient.createTransaction.call(X.removeBridgeToken(a)),withdrawGasTokens:a=>this.appClient.createTransaction.call(X.withdrawGasTokens(a)),withdrawBridgingFeeInTokens:a=>this.appClient.createTransaction.call(X.withdrawBridgingFeeInTokens(a)),getBridgingCostInTokens:a=>this.appClient.createTransaction.call(X.getBridgingCostInTokens(a)),hashMessage:a=>this.appClient.createTransaction.call(X.hashMessage(a)),isOtherBridgeTokenSupported:a=>this.appClient.createTransaction.call(X.isOtherBridgeTokenSupported(a)),getTransactionCost:a=>this.appClient.createTransaction.call(X.getTransactionCost(a)),getReceiveTokensCost:(a={args:[]})=>this.appClient.createTransaction.call(X.getReceiveTokensCost(a)),getSendTransactionStorageCost:(a={args:[]})=>this.appClient.createTransaction.call(X.getSendTransactionStorageCost(a)),swap:a=>this.appClient.createTransaction.call(X.swap(a)),addPool:a=>this.appClient.createTransaction.call(X.addPool(a)),removePool:a=>this.appClient.createTransaction.call(X.removePool(a)),stopSwap:(a={args:[]})=>this.appClient.createTransaction.call(X.stopSwap(a)),startSwap:(a={args:[]})=>this.appClient.createTransaction.call(X.startSwap(a)),setStopAuthority:a=>this.appClient.createTransaction.call(X.setStopAuthority(a)),setRebalancer:a=>this.appClient.createTransaction.call(X.setRebalancer(a)),getGasUsage:a=>this.appClient.createTransaction.call(X.getGasUsage(a)),setGasUsage:a=>this.appClient.createTransaction.call(X.setGasUsage(a)),setGasOracle:a=>this.appClient.createTransaction.call(X.setGasOracle(a)),getTransactionRelayerCost:a=>this.appClient.createTransaction.call(X.getTransactionRelayerCost(a)),transferOwnership:a=>this.appClient.createTransaction.call(X.transferOwnership(a))};send={clearState:a=>this.appClient.send.bare.clearState(a),optInAsset:async a=>{let i=await this.appClient.send.call(X.optInAsset(a));return{...i,return:i.return}},swapAndBridge:async a=>{let i=await this.appClient.send.call(X.swapAndBridge(a));return{...i,return:i.return}},swapAndBridgeWithStable:async a=>{let i=await this.appClient.send.call(X.swapAndBridgeWithStable(a));return{...i,return:i.return}},receiveTokens:async a=>{let i=await this.appClient.send.call(X.receiveTokens(a));return{...i,return:i.return}},registerBridge:async a=>{let i=await this.appClient.send.call(X.registerBridge(a));return{...i,return:i.return}},addBridgeToken:async a=>{let i=await this.appClient.send.call(X.addBridgeToken(a));return{...i,return:i.return}},removeBridgeToken:async a=>{let i=await this.appClient.send.call(X.removeBridgeToken(a));return{...i,return:i.return}},withdrawGasTokens:async a=>{let i=await this.appClient.send.call(X.withdrawGasTokens(a));return{...i,return:i.return}},withdrawBridgingFeeInTokens:async a=>{let i=await this.appClient.send.call(X.withdrawBridgingFeeInTokens(a));return{...i,return:i.return}},getBridgingCostInTokens:async a=>{let i=await this.appClient.send.call(X.getBridgingCostInTokens(a));return{...i,return:i.return}},hashMessage:async a=>{let i=await this.appClient.send.call(X.hashMessage(a));return{...i,return:i.return}},isOtherBridgeTokenSupported:async a=>{let i=await this.appClient.send.call(X.isOtherBridgeTokenSupported(a));return{...i,return:i.return}},getTransactionCost:async a=>{let i=await this.appClient.send.call(X.getTransactionCost(a));return{...i,return:i.return}},getReceiveTokensCost:async(a={args:[]})=>{let i=await this.appClient.send.call(X.getReceiveTokensCost(a));return{...i,return:i.return}},getSendTransactionStorageCost:async(a={args:[]})=>{let i=await this.appClient.send.call(X.getSendTransactionStorageCost(a));return{...i,return:i.return}},swap:async a=>{let i=await this.appClient.send.call(X.swap(a));return{...i,return:i.return}},addPool:async a=>{let i=await this.appClient.send.call(X.addPool(a));return{...i,return:i.return}},removePool:async a=>{let i=await this.appClient.send.call(X.removePool(a));return{...i,return:i.return}},stopSwap:async(a={args:[]})=>{let i=await this.appClient.send.call(X.stopSwap(a));return{...i,return:i.return}},startSwap:async(a={args:[]})=>{let i=await this.appClient.send.call(X.startSwap(a));return{...i,return:i.return}},setStopAuthority:async a=>{let i=await this.appClient.send.call(X.setStopAuthority(a));return{...i,return:i.return}},setRebalancer:async a=>{let i=await this.appClient.send.call(X.setRebalancer(a));return{...i,return:i.return}},getGasUsage:async a=>{let i=await this.appClient.send.call(X.getGasUsage(a));return{...i,return:i.return}},setGasUsage:async a=>{let i=await this.appClient.send.call(X.setGasUsage(a));return{...i,return:i.return}},setGasOracle:async a=>{let i=await this.appClient.send.call(X.setGasOracle(a));return{...i,return:i.return}},getTransactionRelayerCost:async a=>{let i=await this.appClient.send.call(X.getTransactionRelayerCost(a));return{...i,return:i.return}},transferOwnership:async a=>{let i=await this.appClient.send.call(X.transferOwnership(a));return{...i,return:i.return}}};clone(a){return new o(this.appClient.clone(a))}async getBridgingCostInTokens(a){return(await this.appClient.send.call(X.getBridgingCostInTokens(a))).return}async hashMessage(a){return(await this.appClient.send.call(X.hashMessage(a))).return}async isOtherBridgeTokenSupported(a){return(await this.appClient.send.call(X.isOtherBridgeTokenSupported(a))).return}async getTransactionCost(a){return(await this.appClient.send.call(X.getTransactionCost(a))).return}async getReceiveTokensCost(a={args:[]}){return(await this.appClient.send.call(X.getReceiveTokensCost(a))).return}async getSendTransactionStorageCost(a={args:[]}){return(await this.appClient.send.call(X.getSendTransactionStorageCost(a))).return}async getGasUsage(a){return(await this.appClient.send.call(X.getGasUsage(a))).return}async getTransactionRelayerCost(a){return(await this.appClient.send.call(X.getTransactionRelayerCost(a))).return}state={global:{getAll:async()=>{let a=await this.appClient.state.global.getAll();return{chainId:a.chainId,messenger:a.messenger,stopAuthority:a.stopAuthority,rebalancer:a.rebalancer,canSwap:a.canSwap,gasOracle:a.gasOracle,owner:a.owner}},chainId:async()=>await this.appClient.state.global.getValue("chainId"),messenger:async()=>await this.appClient.state.global.getValue("messenger"),stopAuthority:async()=>await this.appClient.state.global.getValue("stopAuthority"),rebalancer:async()=>await this.appClient.state.global.getValue("rebalancer"),canSwap:async()=>await this.appClient.state.global.getValue("canSwap"),gasOracle:async()=>await this.appClient.state.global.getValue("gasOracle"),owner:async()=>await this.appClient.state.global.getValue("owner")},box:{getAll:async()=>{let a=await this.appClient.state.box.getAll();return{}},processedMessages:{getMap:async()=>await this.appClient.state.box.getMap("processedMessages"),value:async a=>await this.appClient.state.box.getMapValue("processedMessages",a)},sentMessages:{getMap:async()=>await this.appClient.state.box.getMap("sentMessages"),value:async a=>await this.appClient.state.box.getMapValue("sentMessages",a)},otherBridges:{getMap:async()=>await this.appClient.state.box.getMap("otherBridges"),value:async a=>await this.appClient.state.box.getMapValue("otherBridges",a)},otherBridgeTokens:{getMap:async()=>await this.appClient.state.box.getMap("otherBridgeTokens"),value:async a=>await this.appClient.state.box.getMapValue("otherBridgeTokens",a)},pools:{getMap:async()=>await this.appClient.state.box.getMap("pools"),value:async a=>await this.appClient.state.box.getMapValue("pools",a)},fromGasOracleScalingFactor:{getMap:async()=>await this.appClient.state.box.getMap("fromGasOracleScalingFactor"),value:async a=>await this.appClient.state.box.getMapValue("fromGasOracleScalingFactor",a)},bridgingFeeConversionScalingFactor:{getMap:async()=>await this.appClient.state.box.getMap("bridgingFeeConversionScalingFactor"),value:async a=>await this.appClient.state.box.getMapValue("bridgingFeeConversionScalingFactor",a)},gasUsage:{getMap:async()=>await this.appClient.state.box.getMap("gasUsage"),value:async a=>await this.appClient.state.box.getMapValue("gasUsage",a)}}};newGroup(){let a=this,i=this.algorand.newGroup(),r=Promise.resolve(),s=[];return{optInAsset(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.optInAsset(d))),s.push(void 0),this},swapAndBridge(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.swapAndBridge(d))),s.push(void 0),this},swapAndBridgeWithStable(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.swapAndBridgeWithStable(d))),s.push(void 0),this},receiveTokens(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.receiveTokens(d))),s.push(void 0),this},registerBridge(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.registerBridge(d))),s.push(void 0),this},addBridgeToken(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.addBridgeToken(d))),s.push(void 0),this},removeBridgeToken(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.removeBridgeToken(d))),s.push(void 0),this},withdrawGasTokens(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.withdrawGasTokens(d))),s.push(void 0),this},withdrawBridgingFeeInTokens(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.withdrawBridgingFeeInTokens(d))),s.push(void 0),this},getBridgingCostInTokens(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.getBridgingCostInTokens(d))),s.push(A=>a.decodeReturnValue("getBridgingCostInTokens(byte,uint64)uint64",A)),this},hashMessage(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.hashMessage(d))),s.push(A=>a.decodeReturnValue("hashMessage(uint64,byte[32],byte,byte,byte[32],byte[32])byte[32]",A)),this},isOtherBridgeTokenSupported(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.isOtherBridgeTokenSupported(d))),s.push(A=>a.decodeReturnValue("isOtherBridgeTokenSupported(byte,byte[32])bool",A)),this},getTransactionCost(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.getTransactionCost(d))),s.push(A=>a.decodeReturnValue("getTransactionCost(byte)uint64",A)),this},getReceiveTokensCost(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.getReceiveTokensCost(d))),s.push(A=>a.decodeReturnValue("getReceiveTokensCost()uint64",A)),this},getSendTransactionStorageCost(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.getSendTransactionStorageCost(d))),s.push(A=>a.decodeReturnValue("getSendTransactionStorageCost()uint64",A)),this},swap(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.swap(d))),s.push(void 0),this},addPool(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.addPool(d))),s.push(void 0),this},removePool(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.removePool(d))),s.push(void 0),this},stopSwap(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.stopSwap(d))),s.push(void 0),this},startSwap(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.startSwap(d))),s.push(void 0),this},setStopAuthority(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.setStopAuthority(d))),s.push(void 0),this},setRebalancer(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.setRebalancer(d))),s.push(void 0),this},getGasUsage(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.getGasUsage(d))),s.push(A=>a.decodeReturnValue("getGasUsage(byte)uint64",A)),this},setGasUsage(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.setGasUsage(d))),s.push(void 0),this},setGasOracle(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.setGasOracle(d))),s.push(void 0),this},getTransactionRelayerCost(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.getTransactionRelayerCost(d))),s.push(A=>a.decodeReturnValue("getTransactionRelayerCost(byte)uint64",A)),this},transferOwnership(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.transferOwnership(d))),s.push(void 0),this},clearState(d){return r=r.then(()=>i.addAppCall(a.params.clearState(d))),this},addTransaction(d,A){return r=r.then(()=>i.addTransaction(d,A)),this},async composer(){return await r,i},async simulate(d){await r;let A=await(d?i.simulate(d):i.simulate());return{...A,returns:A.returns?.map((l,u)=>s[u]!==void 0?s[u](l):l.returnValue)}},async send(d){await r;let A=await i.send(d);return{...A,returns:A.returns?.map((l,u)=>s[u]!==void 0?s[u](l):l.returnValue)}}}}};import{getArc56ReturnValue as Os}from"@algorandfoundation/algokit-utils/types/app-arc56";import{AppClient as Ba}from"@algorandfoundation/algokit-utils/types/app-client";import{AppFactory as _l}from"@algorandfoundation/algokit-utils/types/app-factory";var Ya={name:"PaddingUtil",structs:{},methods:[{name:"createApplication",args:[],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}}],arcs:[22,28],networks:{},state:{schema:{global:{ints:0,bytes:0},local:{ints:0,bytes:0}},keys:{global:{},local:{},box:{}},maps:{global:{},local:{},box:{}}},bareActions:{create:[],call:["NoOp"]},sourceInfo:{approval:{sourceInfo:[{pc:[27],errorMessage:"OnCompletion must be NoOp && can only call when creating"},{pc:[37],errorMessage:"OnCompletion must be NoOp && can only call when not creating"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3BhZGRpbmctdXRpbC5jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBQYWRkaW5nVXRpbCBleHRlbmRzIENvbnRyYWN0IGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9wYWRkaW5nQDUKICAgIHB1c2hieXRlcyAweGI4NDQ3YjM2IC8vIG1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2NyZWF0ZUFwcGxpY2F0aW9uX3JvdXRlQDMKICAgIGVycgoKbWFpbl9jcmVhdGVBcHBsaWNhdGlvbl9yb3V0ZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wYWRkaW5nLXV0aWwuY29udHJhY3QuYWxnby50czo2CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbigpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCgptYWluX3BhZGRpbmdANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcGFkZGluZy11dGlsLmNvbnRyYWN0LmFsZ28udHM6OQogICAgLy8gQGJhcmVtZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgTm9PcCAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==",clear:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CzEbQQAZgAS4RHs2NhoAjgEAAQAxGRQxGBQQRIEBQzEZFDEYEESBAUM=",clear:"C4EBQw=="},events:[],templateVariables:{}};var Wa=class o{appClient;constructor(a){this.appClient=a instanceof Ba?a:new Ba({...a,appSpec:Ya})}decodeReturnValue(a,i){return i!==void 0?Os(i,this.appClient.getABIMethod(a),Ya.structs):void 0}static async fromCreatorAndName(a){return new o(await Ba.fromCreatorAndName({...a,appSpec:Ya}))}static async fromNetwork(a){return new o(await Ba.fromNetwork({...a,appSpec:Ya}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={clearState:a=>this.appClient.params.bare.clearState(a),bare:a=>this.appClient.params.bare.call(a)};createTransaction={clearState:a=>this.appClient.createTransaction.bare.clearState(a),bare:a=>this.appClient.createTransaction.bare.call(a)};send={clearState:a=>this.appClient.send.bare.clearState(a),bare:a=>this.appClient.send.bare.call(a)};clone(a){return new o(this.appClient.clone(a))}state={};newGroup(){let a=this,i=this.algorand.newGroup(),r=Promise.resolve(),s=[];return{bare(d){return r=r.then(()=>i.addAppCall(a.params.bare(d))),this},clearState(d){return r=r.then(()=>i.addAppCall(a.params.clearState(d))),this},addTransaction(d,A){return r=r.then(()=>i.addTransaction(d,A)),this},async composer(){return await r,i},async simulate(d){await r;let A=await(d?i.simulate(d):i.simulate());return{...A,returns:A.returns?.map((l,u)=>s[u]!==void 0?s[u](l):l.returnValue)}},async send(d){await r;let A=await i.send(d);return{...A,returns:A.returns?.map((l,u)=>s[u]!==void 0?s[u](l):l.returnValue)}}}}};import{populateAppCallResources as Qs}from"@algorandfoundation/algokit-utils";import Us,{AtomicTransactionComposer as Ks,makeBasicAccountTransactionSigner as Ds}from"algosdk";function Gt(o){return(o*1e3).microAlgos()}async function Oi(o,a,i){let r=new Ks,s=Ds({addr:a,sk:new Uint8Array(64)});o.forEach(l=>{r.addTransaction({txn:l,signer:s})});let A=(await Qs(r,i)).buildGroup().map(l=>l.txn);return Vt(...A)}function Vt(...o){return o.map(i=>Us.encodeUnsignedTransaction(i)).map(i=>I.from(i).toString("hex"))}async function wa(o,a,i){typeof o=="string"&&(o=BigInt(o));let s=(await i.account.getInformation(a)).assets;return s?s.find(({assetId:A})=>A===o)!==void 0:!1}async function Fa(o,a,i){typeof o=="string"&&(o=BigInt(o));let s=(await i.account.getInformation(a)).appsLocalState;return s?s.find(({id:A})=>A===o)!==void 0:!1}var Xe=class{};import{PublicKey as Es}from"@solana/web3.js";import{createAddress as eo,parseContractId as _s}from"@stacks/transactions";import{Address as $s}from"@stellar/stellar-sdk";import qs,{Address as ed}from"algosdk";import{Big as Ze}from"big.js";import ao from"randombytes";import{utils as to}from"tronweb";import{Web3 as td}from"web3";var Qi=(A=>(A.OK="OK",A.INVALID="INVALID",A.FORBIDDEN="FORBIDDEN",A.UNINITIALIZED="UNINITIALIZED",A.CONTRACT_ADDRESS="CONTRACT_ADDRESS",A.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",A))(Qi||{}),Ui=(A=>(A.ALLBRIDGE="allbridge",A.WORMHOLE="wormhole",A.CCTP="cctp",A.CCTP_V2="cctpV2",A.OFT="oft",A.X_RESERVE="xReserve",A))(Ui||{}),Pe=(A=>(A[A.ALLBRIDGE=1]="ALLBRIDGE",A[A.WORMHOLE=2]="WORMHOLE",A[A.CCTP=3]="CCTP",A[A.CCTP_V2=4]="CCTP_V2",A[A.OFT=5]="OFT",A[A.X_RESERVE=6]="X_RESERVE",A))(Pe||{});import{Big as L}from"big.js";import Ki from"bn.js";function Di(o,a){return L(100).minus(L(100).times(a).div(o)).toNumber()}function Rt(o,a){return Se(o,a,3).round(0,L.roundDown)}function ze(o,a){return Se(o,3,a)}function Se(o,a,i){let r=L(i).minus(a).toNumber();return L(o).times(Vn(r))}function Vn(o){return L(10).pow(o)}function j(o,a){return L(o).times(Vn(a))}function H(o,a){let i=L(o);return i.eq(0)?L(0):L(i).div(Vn(a))}function Fe(o){return H(L(o.tokenBalance).minus(o.vUsdBalance).toFixed(),3).div(2).toFixed()}function pt(o,{feeShare:a,decimals:i},r){let s=L(o);if(s.lte(0))return"0";let d=s.times(a),A=s.minus(d),l=Rt(A,i),u=L(r.tokenBalance).plus(l),b=ut(u,r.aValue,r.dValue);return L(r.vUsdBalance).minus(b).round(0,L.roundDown).toFixed()}function Xn(o,{feeShare:a,decimals:i},r){let s=L(o);if(s.lte(0))return L(0).toFixed();let d=s.plus(r.vUsdBalance),A=ut(d,r.aValue,r.dValue),l=ze(L(r.tokenBalance).minus(A),i),u=L(l).times(a);return L(l).minus(u).round(0,L.roundDown).toFixed()}function Kr(o,a){let i=L(o);if(i.lte(0))return a;let r=i.plus(a.vUsdBalance),s=ut(r,a.aValue,a.dValue);return{aValue:a.aValue,dValue:a.dValue,tokenBalance:s.toFixed(0),vUsdBalance:r.toFixed(0)}}function Dr(o,{feeShare:a,decimals:i},r){if(L(o).lte(0))return L(0);let s=L(r.vUsdBalance).minus(o);if(s.lte(0))throw new ft;let d=ut(s,r.aValue,r.dValue),A=L(d).minus(r.tokenBalance),l=ze(A,i),u=L(a).div(L(1).minus(a)),b=L(l).times(u).round(0,L.roundUp);return L(l).plus(b).round(0,L.roundDown)}function Er(o,{feeShare:a,decimals:i},r){if(L(o).lte(0))return L(0);let s=L(a).div(L(1).minus(a)),d=L(o).times(s).round(0,L.roundUp),A=L(o).plus(d),l=Rt(A,i),u=L(r.tokenBalance).minus(l);if(u.lte(0))throw new ft;let b=ut(u,r.aValue,r.dValue);return L(b).minus(r.vUsdBalance).round(0,L.roundDown)}function ut(o,a,i){let r=L(4).times(a).times(L(i).minus(o)).minus(i),s=L(i).pow(3),d=r.pow(2),A=L(o).times(L(o).times(d).plus(L(4).times(a).times(s))).sqrt().round(0,L.roundDown),l=L(8).times(a).times(o),u=r.times(o).plus(A).div(l).round(0,L.roundDown);return u.eq(0)?L(0):u.plus(1)}function _r(o,a,i,r){let s=new Ki(o),d=new Ki(i),A=new Ki(a);return s.mul(d).shrn(r).sub(A).toString()}function $r(o){return L(o).gt(0)?`${Number(L(o).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function qr(o,a,i){let r=L(a).times(i),s=L(a).plus(i),d=L(8).times(o).times(r).times(s),A=r.times(L(16).times(o).minus(4)).div(3),l=d.times(d),u=A.times(A).times(A),b=l.plus(u),y=L(b).sqrt(),C=L(Math.cbrt(+d.plus(y).toFixed())),f=L(Math.cbrt(+d.minus(y).toFixed()));return C.plus(f).toFixed()}function Tt(o,a,i){let r;switch(a){case"EVM":{r=no(o);break}case"SOLANA":{r=new Es(o).toBuffer();break}case"TRX":{r=id(o);break}case"SRB":{r=new $s(o).toBuffer();break}case"SUI":{r=no(o);break}case"ALG":{r=nd(o);break}case"STX":{r=ad(o);break}}switch(i){case"EVM":return"0x"+r.toString("hex");case"SOLANA":return Array.from(r);case"TRX":return r;case"SRB":return r.toJSON().data;case"SUI":return"0x"+r.toString("hex");case"ALG":return r;case"STX":return r}}function ot(o){return o.replace(/^0x/i,"")}function Ei(o){return I.from(o.replace(/^0x/i,""),"hex")}function no(o){let i=Ei(o);return I.concat([I.alloc(32-i.length,0),i],32)}function nd(o){if(qs.isValidAddress(o))return I.from(ed.fromString(o).publicKey);if(/^\d+$/.test(o)){let a=BigInt(o).toString(16);return a=a.padStart(64,"0"),I.from(a,"hex")}throw new w(`Unexpected Alg address: ${o}`)}function ad(o){if(o.includes(".")){let[i,r]=_s(o);if(!i||!r)throw new w(`Unexpected Alg address: ${o}`);let s=I.from(eo(i).hash160,"hex"),d=td.utils.keccak256(I.concat([s,I.from(r)]));return Ei(d)}let a=I.from(eo(o).hash160,"hex");return Na(a,32)}function id(o){let a=Pn(o),i=Ei(a);return Na(i,32)}function Pn(o){let a=to.crypto.decodeBase58Address(o);return a?to.bytes.byteArray2hexStr(a).replace(/^41/,"0x"):""}function Na(o,a){if(o.length>=a)return o;let i=I.alloc(a,0);return o.copy(i,a-o.length),i}function mt(){return ao(32)}function bt(){let o=ao(32).readBigInt64BE();return o<0?o*-1n:o}function Ke(o,a){let i={},r=a.sourceToken;switch(i.amount=j(a.amount,r.decimals).toFixed(),i.contractAddress=r.bridgeAddress,i.fromAccountAddress=a.fromAccountAddress,o){case"SUI":{if(!r.originTokenAddress)throw new w("SUI sourceToken must contain 'originTokenAddress'");i.fromTokenAddress=r.originTokenAddress;break}case"ALG":{i.fromTokenAddress=r.tokenAddress;break}default:i.fromTokenAddress=Tt(r.tokenAddress,o,o)}switch(i.toAccountAddress=a.toAccountAddress,o){case"SUI":{if(!a.destinationToken.originTokenAddress)throw new w("SUI destinationToken must contain 'originTokenAddress'");i.toTokenAddress=a.destinationToken.originTokenAddress;break}case"ALG":{i.toTokenAddress=a.destinationToken.tokenAddress;break}default:i.toTokenAddress=Tt(a.destinationToken.tokenAddress,o,o)}return i.minimumReceiveAmount=a.minimumReceiveAmount?j(a.minimumReceiveAmount,a.destinationToken.decimals).toFixed():"0",i}async function Oe(o,a,i){let r={};r.fromChainId=a.sourceToken.allbridgeChainId,r.fromChainSymbol=a.sourceToken.chainSymbol;let s=Q.getChainProperty(a.destinationToken.chainSymbol).chainType;if(o==="SUI"){if(!a.sourceToken.originTokenAddress)throw new w("SUI token must contain 'originTokenAddress'");r.fromTokenAddress=a.sourceToken.originTokenAddress}else r.fromTokenAddress=a.sourceToken.tokenAddress;if(r.toChainId=a.destinationToken.allbridgeChainId,r.toTokenAddress=a.destinationToken.tokenAddress,r.gasFeePaymentMethod=a.gasFeePaymentMethod??"native",r.gasFeePaymentMethod==="abr"&&!a.sourceToken.abrPayer)throw new w("Source token must contain 'abrPayer' for ABR payment method");let d=a.sourceToken;switch(a.messenger){case 3:if(!d.cctpAddress||!a.destinationToken.cctpAddress)throw new We("Such route does not support CCTP protocol");r.contractAddress=d.cctpAddress;break;case 4:if(!d.cctpV2Address||!a.destinationToken.cctpV2Address)throw new We("Such route does not support CCTP V2 protocol");r.contractAddress=d.cctpV2Address;break;case 5:if(!d.oftBridgeAddress||!a.destinationToken.oftBridgeAddress||d.oftId!==a.destinationToken.oftId)throw new Ve("Such route does not support OFT protocol");r.contractAddress=d.oftBridgeAddress;break;case 6:if(!d.xReserve?.bridgeAddress||!a.destinationToken.xReserve)throw new w("Such route does not support xReserve protocol");r.contractAddress=d.xReserve.bridgeAddress;break;case 1:case 2:r.contractAddress=d.bridgeAddress;break}r.messenger=a.messenger,r.fromAccountAddress=a.fromAccountAddress,r.amount=j(a.amount,d.decimals).toFixed();let{fee:A,feeFormat:l}=a;if(!A){let C=(await _i(a.sourceToken,r.toChainId,r.messenger,i))[r.gasFeePaymentMethod];if(!C)throw new Zt;A=C.int,l="int"}if(l=="float")switch(r.gasFeePaymentMethod){case"native":r.fee=j(A,Q.getChainDecimalsByType(d.chainType)).toFixed(0);break;case"stablecoin":r.fee=j(A,d.decimals).toFixed(0);break;case"abr":if(!d.abrPayer)throw new w("Source token must contain 'abrPayer' for ABR payment method");r.fee=j(A,d.abrPayer.abrToken.decimals).toFixed(0);break;default:return re(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}else r.fee=A;let{extraGas:u,extraGasFormat:b}=a;if(u&&+u>0){let y=await $i(d,a.destinationToken,r.messenger,i),C,f;switch(r.gasFeePaymentMethod){case"native":C=Q.getChainDecimalsByType(d.chainType),f=Ze(y.exchangeRate);break;case"stablecoin":C=d.decimals,f=Ze(y.exchangeRate).div(y.sourceNativeTokenPrice);break;case"abr":if(!d.abrPayer)throw new w("Source token must contain 'abrPayer' for ABR payment method");if(!y.abrExchangeRate)throw new w("Cannot transfer WITH_ABR option");C=d.abrPayer.abrToken.decimals,f=Ze(y.exchangeRate).div(y.abrExchangeRate);break;default:return re(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}switch(b??"int"){case"float":{r.extraGas=j(u,C).toFixed(0);let v=f.mul(u);r.extraGasDest=j(v,Q.getChainDecimalsByType(a.destinationToken.chainType)).toFixed(0,Ze.roundDown);break}case"int":{r.extraGas=u;let v=H(r.extraGas,Q.getChainDecimalsByType(d.chainType)),T=f.mul(v);r.extraGasDest=j(T,Q.getChainDecimalsByType(a.destinationToken.chainType)).toFixed(0,Ze.roundDown);break}}od(r.extraGas,r.gasFeePaymentMethod,y)}switch(["SUI","ALG"].includes(o)||(r.fromTokenAddress=Tt(r.fromTokenAddress,o,o)),r.toAccountAddress=Tt(a.toAccountAddress,s,o),r.toTokenAddress=Tt(r.toTokenAddress,s,o),r.gasFeePaymentMethod){case"native":break;case"stablecoin":rd(r.amount,d.decimals,d.symbol,r.fee,r.extraGas);break;case"abr":{let{abrExchangeRate:y}=await i.getReceiveTransactionCost({sourceChainId:r.fromChainId,destinationChainId:r.toChainId,messenger:r.messenger,sourceToken:a.sourceToken.tokenAddress});r.abrExchangeRate=y;break}default:return re(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}return r}function rd(o,a,i,r,s){let d=Ze(o).minus(r).minus(s??0);if(d.lte(0))throw new vt(`Amount not enough to pay fee, ${H(Ze(d).minus(1).neg(),a).toFixed()} ${i} is missing`)}async function _i(o,a,i,r){let s=await r.getReceiveTransactionCost({sourceChainId:o.allbridgeChainId,destinationChainId:a,messenger:i,sourceToken:o.tokenAddress}),d={native:{int:s.fee,float:H(s.fee,Q.getChainDecimalsByType(o.chainType)).toFixed()},adminFeeShareWithExtras:s.adminFeeShareWithExtras};if(s.sourceNativeTokenPrice){let A=Se(new Ze(s.fee).mul(s.sourceNativeTokenPrice),Q.getChainDecimalsByType(o.chainType),o.decimals).toFixed(0,Ze.roundUp);d.stablecoin={int:A,float:H(A,o.decimals).toFixed()}}if(s.abrExchangeRate&&o.abrPayer&&o.abrPayer.payerAvailability[i]){let A=Se(new Ze(s.fee).mul(s.abrExchangeRate),Q.getChainDecimalsByType(o.chainType),o.abrPayer.abrToken.decimals).toFixed(0,Ze.roundUp);d.abr={int:A,float:H(A,o.abrPayer.abrToken.decimals).toFixed()}}return d}function od(o,a,i){let r=i.extraGasMax[a];if(!r)throw new Zt(`Impossible to pay extra gas by '${a}' payment method`);let s=r.int;if(Ze(o).gt(s))throw new ba(`Extra gas ${o} in int format, exceeded limit ${s} for '${a}' payment method`)}async function $i(o,a,i,r){let s={},d=await r.getReceiveTransactionCost({sourceChainId:o.allbridgeChainId,destinationChainId:a.allbridgeChainId,messenger:i,sourceToken:o.tokenAddress}),A={int:a.txCostAmount.transfer,float:H(a.txCostAmount.transfer,Q.getChainDecimalsByType(a.chainType)).toFixed()},l={int:a.txCostAmount.swap,float:H(a.txCostAmount.swap,Q.getChainDecimalsByType(a.chainType)).toFixed()};if(i===6){let v=()=>({int:"0",float:"0"});return{extraGasMax:{native:v()},destinationChain:{gasAmountMax:v(),swap:l,transfer:A},exchangeRate:d.exchangeRate,sourceNativeTokenPrice:d.sourceNativeTokenPrice}}let u=a.txCostAmount.maxAmount,b=H(u,Q.getChainDecimalsByType(a.chainType)).toFixed(),y=Ze(b).div(d.exchangeRate).toFixed(Q.getChainDecimalsByType(o.chainType),Ze.roundDown),C=j(y,Q.getChainDecimalsByType(o.chainType)).toFixed(0);if(s.native={int:C,float:y},d.sourceNativeTokenPrice){let v=Ze(y).mul(d.sourceNativeTokenPrice).toFixed(o.decimals,Ze.roundDown);s.stablecoin={int:j(v,o.decimals).toFixed(0),float:v}}let f;if(d.abrExchangeRate&&o.abrPayer&&o.abrPayer.payerAvailability[i]){f=!0;let v=Ze(y).mul(d.abrExchangeRate).toFixed(o.abrPayer.abrToken.decimals,Ze.roundDown);s.abr={int:j(v,o.abrPayer.abrToken.decimals).toFixed(0),float:v}}return{extraGasMax:s,destinationChain:{gasAmountMax:{int:u,float:b},swap:l,transfer:A},exchangeRate:d.exchangeRate,abrExchangeRate:f?d.abrExchangeRate:void 0,sourceNativeTokenPrice:d.sourceNativeTokenPrice}}function io(o){return o.sourceToken.chainSymbol!==o.destinationToken.chainSymbol}var Sn=class extends Xe{constructor(i,r){super();this.algorand=i;this.api=r;let s=Ad.generateAccount(),d=new sd(s,s.addr);i.setDefaultSigner(d),i.setDefaultValidityWindow(100)}algorand;api;chainType="ALG";send(i){throw new K}async buildRawTransactionSend(i){let r=await Oe(this.chainType,i,this.api);if(!i.sourceToken.bridgeId)throw new w("ALG sourceToken must contain 'bridgeId'");if(!i.sourceToken.paddingUtilId)throw new w("ALG sourceToken must contain 'paddingUtilId'");let s=BigInt(i.sourceToken.bridgeId),d=this.getBridge(s),A=BigInt(i.sourceToken.paddingUtilId),l=this.getPaddingUtil(A),u=ro.fromString(i.fromAccountAddress),b=BigInt(i.sourceToken.tokenAddress),y=r.toChainId,C=r.toAccountAddress,f=r.toTokenAddress,v=mt(),T=BigInt(r.amount),F=BigInt(r.fee);r.extraGas&&(F=F+BigInt(r.extraGas));let N=this.algorand.newGroup(),G=await this.algorand.createTransaction.assetTransfer({amount:T,assetId:b,receiver:d.appAddress,sender:u});switch(r.gasFeePaymentMethod){case"native":{let S=await this.algorand.createTransaction.payment({amount:dd.MicroAlgo(F),receiver:d.appAddress,sender:u});N.addAppCallMethodCall(await d.params.swapAndBridge({args:{paymentRef:S,assetTransferRef:G,recipient:C,destinationChainId:y,receiveToken:f,nonce:v},sender:u,extraFee:Gt(8)}));break}case"stablecoin":{N.addAppCallMethodCall(await d.params.swapAndBridgeWithStable({args:{assetTransferRef:G,recipient:C,destinationChainId:y,receiveToken:f,nonce:v,feeTokenAmount:F},sender:u,extraFee:Gt(9)}));break}case"abr":throw new w("ALG bridge does not support ABR payment method");default:return re(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}let R=await this.algorand.createTransaction.appCall({appId:l.appId,sender:u,note:"padding1"});N.addTransaction(R);let P=await this.algorand.createTransaction.appCall({appId:l.appId,sender:u,note:"padding2"});N.addTransaction(P);let{transactions:V}=await N.buildTransactions();return Oi(V,u,this.algorand.client.algod)}async buildRawTransactionSwap(i){let r=Ke(this.chainType,i),s=ro.fromString(i.fromAccountAddress),d=i.toAccountAddress,A=BigInt(i.sourceToken.tokenAddress),l=BigInt(i.destinationToken.tokenAddress),u=BigInt(r.minimumReceiveAmount),b=BigInt(r.amount);if(!i.sourceToken.bridgeId)throw new w("ALG sourceToken must contain 'bridgeId'");if(!i.sourceToken.paddingUtilId)throw new w("ALG sourceToken must contain 'paddingUtilId'");let y=BigInt(i.sourceToken.bridgeId),C=this.getBridge(y),f=BigInt(i.sourceToken.paddingUtilId),v=this.getPaddingUtil(f),T=this.algorand.newGroup();i.fromAccountAddress===d&&(await wa(l,d,this.algorand)||T.addAssetOptIn({sender:s,assetId:l}));let F=this.algorand.createTransaction.assetTransfer({assetId:A,amount:b,sender:s,receiver:C.appAddress});T.addAppCallMethodCall(await C.params.swap({args:{assetTransferRef:F,recipient:d,receiveAsset:l,receiveAmountMin:u},sender:s,extraFee:Gt(4)}));let N=await this.algorand.createTransaction.appCall({appId:v.appId,sender:s});T.addTransaction(N);let{transactions:G}=await T.buildTransactions();return Oi(G,s,this.algorand.client.algod)}getBridge(i){return this.algorand.client.getTypedAppClientById(Ta,{appId:i})}getPaddingUtil(i){return this.algorand.client.getTypedAppClientById(Wa,{appId:i})}};import{createAddress as hd}from"@stacks/transactions";import{Big as Ma}from"big.js";var cd={abi:[{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"},{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"},{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"},{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"gas",type:"uint256"}],name:"BridgingFeeFromTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"bridgeTransactionCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"messageTransactionCost",type:"uint256"}],name:"ReceiveFee",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Received",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"sendToken",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"sendAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receiveAmount",type:"uint256"}],name:"Swapped",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{indexed:!1,internalType:"bytes32",name:"message",type:"bytes32"}],name:"TokensReceived",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"addBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract Pool",name:"pool",type:"address"},{internalType:"bytes32",name:"token",type:"bytes32"}],name:"addPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canSwap",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"address",name:"tokenAddress",type:"address"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageGasUsage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"hasReceivedMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"}],name:"hasSentMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"hashMessage",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"otherBridgeTokens",outputs:[{internalType:"bool",name:"isSupported",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"tokenId",type:"bytes32"}],name:"pools",outputs:[{internalType:"contract Pool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"processedMessages",outputs:[{internalType:"uint256",name:"isProcessed",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],name:"registerBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"removeBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"sentMessages",outputs:[{internalType:"uint256",name:"isSent",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"}],name:"setAllbridgeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_rebalancer",type:"address"}],name:"setRebalancer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"}],name:"setWormholeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"swap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"feeTokenAmount",type:"uint256"}],name:"swapAndBridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"withdrawBridgingFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGasTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},oo=cd;var gd={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"cctpMessenger_",type:"address"},{internalType:"address",name:"cctpTransmitter_",type:"address"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedExtraGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"RecipientReplaced",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"},{internalType:"bytes",name:"hookData",type:"bytes"}],name:"bridgeToStellar",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"originalMessage",type:"bytes"},{internalType:"bytes",name:"originalAttestation",type:"bytes"},{internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"changeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint64",name:"nonce",type:"uint64"}],name:"isMessageProcessed",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"cctpBridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"stellarChainId",outputs:[{internalType:"uint64",name:"",type:"uint64"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bytes",name:"message",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},so=gd;var ld={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"uint16",name:"optionType",type:"uint16"}],name:"InvalidOptionType",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"address",name:"tokenAddress",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFeeWithExtraGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"extraGasDestinationToken",type:"uint256"}],name:"OftTokensSent",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"addToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"feeShare",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"},{internalType:"uint256",name:"extraGasInDestinationToken",type:"uint256"},{internalType:"uint256",name:"slippageBP",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"},{internalType:"uint128",name:"extraGasAmount_",type:"uint128"}],name:"extraGasPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getEidByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"oftAddress",outputs:[{internalType:"address",name:"oftAddress",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"eid_",type:"uint32"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"}],name:"relayerFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"removeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"setLzGasLimit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"maxExtraGas_",type:"uint256"}],name:"setMaxExtraGas",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token_",type:"address"}],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount_",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},Ao=ld;var pd={abi:[{inputs:[{internalType:"address",name:"_abrTokenAddress",type:"address"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"abrToken",outputs:[{internalType:"contract IERC20Metadata",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_tokenAddress",type:"address"},{internalType:"address",name:"_bridge",type:"address"}],name:"approveBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"exchangeRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_amount",type:"uint256"}],name:"nativeTokensToAbr",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_id",type:"uint256"},{internalType:"address",name:"_target",type:"address"},{internalType:"string",name:"_signature",type:"string"}],name:"registerTarget",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_newExchangeRate",type:"uint256"}],name:"setExchangeRate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"id",type:"uint256"}],name:"targets",outputs:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes4",name:"selector",type:"bytes4"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_token",type:"address"},{internalType:"uint256",name:"_amount",type:"uint256"},{internalType:"uint256",name:"_abrAmount",type:"uint256"},{internalType:"uint256",name:"_targetId",type:"uint256"},{internalType:"bytes",name:"_params",type:"bytes"}],name:"transferTokensAndCallTarget",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"withdrawTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},co=pd;var ud={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"xReserve_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"maxFee",type:"uint256"}],name:"TokensSent",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[],name:"maxFeeShare",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"maxFeeShare_",type:"uint256"}],name:"setMaxFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},go=ud;import{StrKey as lo}from"@stellar/stellar-sdk";function sn(o){if(!lo.isValidEd25519PublicKey(o)&&!lo.isValidMed25519PublicKey(o))throw new w("Invalid Stellar recipient");let a=I.from(o,"ascii"),i=I.alloc(4+a.length);return i.writeUInt32BE(a.length),a.copy(i,4),i}import*as mo from"@coral-xyz/anchor";import{getAccount as Cd}from"@solana/spl-token";import{PublicKey as uo}from"@solana/web3.js";import*as ke from"@coral-xyz/anchor";import{PublicKey as Je}from"@solana/web3.js";function Qe(o,a){return ke.utils.token.associatedAddress({mint:a,owner:o})}async function nt(o){let[a]=await Je.findProgramAddress([ke.utils.bytes.utf8.encode("config")],o);return a}async function Ga(o,a){let[i]=await Je.findProgramAddress([ke.utils.bytes.utf8.encode("lock"),Uint8Array.from(o)],a);return i}async function yt(o,a){let[i]=await Je.findProgramAddress([ke.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([o])],a);return i}async function Xt(o){let a=await nt(o),[i]=await Je.findProgramAddress([a.toBuffer()],o);return i}async function Va(o,a){let[i]=await Je.findProgramAddress([o.toBuffer()],a);return i}async function Bt(o,a){let[i]=await Je.findProgramAddress([ke.utils.bytes.utf8.encode("token"),o.toBytes()],a);return i}async function Xa(o,a,i){let[r]=await Je.findProgramAddress([ke.utils.bytes.utf8.encode("other_bridge_token"),I.from([o]),a],i);return r}async function Ot(o,a){let[i]=await Je.findProgramAddress([ke.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([o])],a);return i}async function dn(o,a){let[i]=await Je.findProgramAddress([ke.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([o])],a);return i}async function Pa(o,a){let[i]=await Je.findProgramAddress([ke.utils.bytes.utf8.encode("sent_message"),o],a);return i}async function qi(o,a,i){let[r]=await Je.findProgramAddress([ke.utils.bytes.utf8.encode("user_deposit"),a.toBytes(),o.toBytes()],i);return r}async function Sa(o,a){let[i]=await Je.findProgramAddress([ke.utils.bytes.utf8.encode("cctp_bridge"),o.toBytes()],a);return i}function ka(o,a){let[i]=Je.findProgramAddressSync([ke.utils.bytes.utf8.encode("config"),o.toBytes()],a);return i}async function po(o,a){let[i]=await Je.findProgramAddress([ke.utils.bytes.utf8.encode("token"),o.toBytes()],a);return i}function La(o,a){let[i]=Je.findProgramAddressSync([ke.utils.bytes.utf8.encode("lock"),a.toBuffer()],o);return i}function kn(o,a,i,r){let s=zt("message_transmitter",i),d=zt("token_messenger",r),A=zt("__event_authority",r),l=zt("token_minter",r),u=zt("local_token",r,[a]),b=zt("remote_token_messenger",r,[o.toString()]),y=zt("sender_authority",r);return{messageTransmitterAccount:s,tokenMessenger:d,tokenMessengerEventAuthority:A,tokenMinter:l,localToken:u,remoteTokenMessengerKey:b,authorityPda:y}}function zt(o,a,i=[]){let r=[I.from(ke.utils.bytes.utf8.encode(o))];for(let d of i)typeof d=="string"?r.push(I.from(ke.utils.bytes.utf8.encode(d))):Array.isArray(d)?r.push(I.from(Uint8Array.from(d))):I.isBuffer(d)?r.push(I.from(Uint8Array.from(d))):r.push(I.from(Uint8Array.from(d.toBuffer())));return Je.findProgramAddressSync(r,a)[0]}import{AnchorProvider as md}from"@coral-xyz/anchor";import{Connection as bd,PublicKey as yd}from"@solana/web3.js";function st(o,a){let i=new bd(o,"confirmed"),r=new yd(a);return new md(i,{publicKey:r},{preflightCommitment:"confirmed",commitment:"confirmed"})}async function An(o,a,i,r){let s,d=new uo(a),A=new uo(i),l=Qe(d,A),u=st(r,a);mo.setProvider(u);let b=await Cd(u.connection,l);if(b?.owner.equals(d))s=Tt(l.toBase58(),"SOLANA",o);else{let y=await u.connection.getTokenAccountsByOwner(d,{mint:A});if(y.value.length===0&&!b)s=Tt(l.toBase58(),"SOLANA",o);else if(y.value.length>0){let C=y.value[0];if(!C?.pubkey)throw new w("First token account or its public key is undefined");s=Tt(C.pubkey.toBase58(),"SOLANA",o)}else throw new w("Associated account has wrong owner")}return s}var Id={["3:SOLANA"]:6,["4:SOLANA"]:7,["4:SRB"]:1008};function bo(o,a){return Id[`${a}:${o}`]??a}var Ln=class extends Xe{constructor(i,r,s){super();this.web3=i;this.api=r;this.nodeRpcUrlsConfig=s}web3;api;nodeRpcUrlsConfig;chainType="EVM";async send(i){let r=await this.buildRawTransactionSend(i);return this.sendRawTransaction(r)}async buildRawTransactionSwap(i){let r=Ke(this.chainType,i);return await this.buildRawTransactionSwapFromParams(r)}async buildRawTransactionSwapFromParams(i){let{amount:r,contractAddress:s,fromAccountAddress:d,fromTokenAddress:A,toAccountAddress:l,toTokenAddress:u,minimumReceiveAmount:b}=i,C=this.getBridgeContract(s).methods.swap(r,A,u,l,b);return Promise.resolve({from:d,to:s,data:C.encodeABI()})}async buildRawTransactionSend(i){let r=await Oe(this.chainType,i,this.api),{amount:s,contractAddress:d,fromAccountAddress:A,fromTokenAddress:l,toChainId:u,toAccountAddress:b,toTokenAddress:y,messenger:C,fee:f,gasFeePaymentMethod:v,extraGas:T,extraGasDest:F,abrExchangeRate:N}=r,G="0x"+mt().toString("hex"),R,P,V=f;T&&(V=Ma(V).plus(T).toFixed());let S;if(v==="abr"){if(!N)throw new w("Cannot find 'abrExchangeRate' for ABR payment method");if(!i.sourceToken.abrPayer)throw new w("Source token must contain 'abrPayer' for ABR payment method");S=V;let M=Ma(V).div(N);V=Se(M,i.sourceToken.abrPayer.abrToken.decimals,Q.getChainDecimalsByType(i.sourceToken.chainType)).toFixed()}switch(C){case 3:case 4:{let M=await this.buildRawTransactionCctpSend(i,r,V);R=M.sendMethod,P=M.value;break}case 5:{let M=this.buildRawTransactionOftSend(i,r,V,F);R=M.sendMethod,P=M.value;break}case 6:{let M=this.buildRawTransactionXReserveSend(i,r,V,F);R=M.sendMethod,P=M.value;break}case 1:case 2:{let M=this.getBridgeContract(d);switch(v){case"abr":case"native":{R=M.methods.swapAndBridge(l,s,b,u,y,G,C,0),P=V;break}case"stablecoin":{R=M.methods.swapAndBridge(l,s,b,u,y,G,C,V),P="0";break}default:return re(v,"Unhandled FeePaymentMethod")}}break}if(v==="abr"){if(!i.sourceToken.abrPayer)throw new w("Source token must contain 'abrPayer' for ABR payment method");let M=i.sourceToken.abrPayer.payerAddress;if(!S)throw new w("Failed to calculate totalFeeInAbr");let x=this.getAbrPayerContract(M),se="0x"+R.encodeABI().slice(10),Ae=bo(i.destinationToken.chainType,C);return R=x.methods.transferTokensAndCallTarget(i.sourceToken.tokenAddress,s,S,Ae,se),Promise.resolve({from:A,to:M,value:"0",data:R.encodeABI()})}return Promise.resolve({from:A,to:d,value:P,data:R.encodeABI()})}async buildRawTransactionCctpSend(i,r,s){let{amount:d,contractAddress:A,toChainId:l,toAccountAddress:u,gasFeePaymentMethod:b}=r,y=this.getCctpBridgeContract(A),C,f;if(i.destinationToken.chainType==="SOLANA"){let v=await An(this.chainType,i.toAccountAddress,i.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));switch(b){case"abr":case"native":{C=y.methods.bridgeWithWalletAddress(d,v,u,l,0),f=s;break}case"stablecoin":{C=y.methods.bridgeWithWalletAddress(d,v,u,l,s),f="0";break}default:return re(b,"Unhandled FeePaymentMethod")}}else if(i.destinationToken.chainType==="SRB"&&i.messenger===4){if(!i.destinationToken.cctpV2Address)throw new w("Destination token must contain 'cctpV2Address' for CCTP V2");let v="0x"+sn(i.toAccountAddress).toString("hex");switch(b){case"abr":case"native":{C=y.methods.bridgeToStellar(d,0,v),f=s;break}case"stablecoin":{C=y.methods.bridgeToStellar(d,s,v),f="0";break}default:return re(b,"Unhandled FeePaymentMethod")}}else switch(b){case"abr":case"native":{C=y.methods.bridge(d,u,l,0),f=s;break}case"stablecoin":{C=y.methods.bridge(d,u,l,s),f="0";break}default:return re(b,"Unhandled FeePaymentMethod")}return{sendMethod:C,value:f}}buildRawTransactionOftSend(i,r,s,d){let{amount:A,contractAddress:l,toChainId:u,toAccountAddress:b,gasFeePaymentMethod:y}=r,C=this.getOftBridgeContract(l),f,v;switch(y){case"abr":case"native":{f=C.methods.bridge(i.sourceToken.tokenAddress,A,b,u,0,d??"0","10"),v=s;break}case"stablecoin":{f=C.methods.bridge(i.sourceToken.tokenAddress,A,b,u,s,d??"0","10"),v="0";break}default:return re(y,"Unhandled FeePaymentMethod")}return{sendMethod:f,value:v}}buildRawTransactionXReserveSend(i,r,s,d){let{amount:A,contractAddress:l,toChainId:u,toAccountAddress:b,gasFeePaymentMethod:y}=r;if(y!=="native")throw new w("xReserve bridge supports only WITH_NATIVE_CURRENCY payment method");if(Ma(s).gt(0)||d&&Ma(d).gt(0))throw new w("xReserve bridge does not support additional bridge fee or extra gas");let C=b;if(i.destinationToken.chainType=="STX"){let{version:v,hash160:T}=hd(i.toAccountAddress),F=Number(v).toString(16),N=I.from(`${F}${T}`,"hex");C="0x"+Na(N,32).toString("hex")}return{sendMethod:this.getXReserveBridgeContract(l).methods.bridge(A,C,u),value:"0"}}async sendRawTransaction(i){let r=await this.web3.eth.estimateGas(i),s={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:d}=await this.web3.eth.sendTransaction({...i,gas:r,...s});return{txId:d.toString()}}getBridgeContract(i){return new this.web3.eth.Contract(oo.abi,i)}getCctpBridgeContract(i){return new this.web3.eth.Contract(so.abi,i)}getOftBridgeContract(i){return new this.web3.eth.Contract(Ao.abi,i)}getAbrPayerContract(i){return new this.web3.eth.Contract(co.abi,i)}getXReserveBridgeContract(i){return new this.web3.eth.Contract(go.abi,i)}};function cn(o,a,i="native"){if(i==="abr"){if(o.abrPayer)return o.abrPayer.payerAddress;throw new w("Token must contain 'abrPayer' for ABR payment method")}switch(a){case 3:if(o.cctpAddress)return o.cctpAddress;throw new We("Such route does not support CCTP protocol");case 4:if(o.cctpV2Address)return o.cctpV2Address;throw new We("Such route does not support CCTP V2 protocol");case 5:if(o.oftBridgeAddress)return o.oftBridgeAddress;throw new Ve("Such route does not support OFT protocol");case 6:if(o.xReserve?.bridgeAddress)return o.xReserve.bridgeAddress;throw new w("Such route does not support xReserve protocol");case 1:case 2:return o.bridgeAddress}}var xa=class{constructor(a,i,r,s){this.api=a;this.nodeRpcUrlsConfig=i;this.params=r;this.tokenService=s}api;nodeRpcUrlsConfig;params;tokenService;async approve(a,i){let r,s;i?(r=a,s=i):s=a;let d=cn(s.token,s.messenger,s.gasFeePaymentMethod);return this.tokenService.buildRawTransactionApprove({...s,spender:d},r)}async send(a,i){return $(a.amount),D("amount",a.amount,a.sourceToken.decimals),io(a)?Ha(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionSend(a):Ha(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionSwap(a)}};import{Connection as pA}from"@solana/web3.js";import{ComputeBudgetInstruction as Co,ComputeBudgetProgram as Ja,Connection as Io,TransactionMessage as vd}from"@solana/web3.js";import{Big as fd}from"big.js";import{AddressLookupTableAccount as yo}from"@solana/web3.js";async function Qt(o,a){return await Promise.all(o.message.addressTableLookups.map(async i=>new yo({key:i.accountKey,state:yo.deserialize(await a.getAccountInfo(i.accountKey).then(r=>{if(!r)throw new w("Cannot get AccountInfo");return r.data}))})))}var er="AUTO";async function gn(o,a,i){let r=new Io(i,"confirmed"),s=(await r.simulateTransaction(o)).value.unitsConsumed;await vo(o.instructions,s,a,r)}async function ho(o,a,i){let r=new Io(i,"confirmed"),s=await Qt(o,r),d=vd.decompile(o.message,{addressLookupTableAccounts:s});if(o.serialize().length>1232)throw new ha;await vo(d.instructions,769230,a,r),o.message=d.compileToV0Message(s)}async function vo(o,a,i,r){if(a<=0)return;let s=Rd(a,o),A=nr(i?.solana)?.fee;if(!A||A===er){await tr(o,r);return}if("pricePerUnitInMicroLamports"in A){await tr(o,r,A.pricePerUnitInMicroLamports);return}let l=fd(A.extraFeeInLamports).div(s).mul(Vn(6)).toFixed(0);await tr(o,r,l)}function nr(o){return o?typeof o!="object"?{fee:o}:"pricePerUnitInMicroLamports"in o||"extraFeeInLamports"in o?{fee:o}:"fee"in o||"payTxFeeWithStablecoinSwap"in o?o:{}:{}}function Rd(o,a){let i=a.findIndex(d=>d.programId.equals(Ja.programId)&&Co.decodeInstructionType(d)==="SetComputeUnitLimit"),r=Number((o*1.3).toFixed(0)),s=Ja.setComputeUnitLimit({units:r});return i>=0?a[i]=s:a.push(s),r.toString()}async function tr(o,a,i){let r=o.findIndex(A=>A.programId.equals(Ja.programId)&&Co.decodeInstructionType(A)==="SetComputeUnitPrice"),s=BigInt(i||await Td(a)),d=Ja.setComputeUnitPrice({microLamports:s});return r>=0?o[r]=d:o.push(d),s.toString()}async function Td(o){let a=await o.getRecentPrioritizationFees(),i=0;for(let r of a)i+=r.prioritizationFee;return(i/a.length).toFixed(0)}import{BN as Et,Program as Qa,web3 as _t}from"@coral-xyz/anchor";import{createAssociatedTokenAccountInstruction as Dd,getAssociatedTokenAddressSync as Ed}from"@solana/spl-token";import{Keypair as rr,PublicKey as pe,SystemProgram as _d}from"@solana/web3.js";var Pt={};Fn(Pt,{accounts:()=>wd,address:()=>Bd,default:()=>Zd,errors:()=>Fd,instructions:()=>Wd,metadata:()=>Yd,types:()=>Nd});var Bd="EmLt85sXNvqjzZo3C6BCq55ZzSuvSNFomVnf6b1PgY8R",Yd={name:"bridge",version:"0.1.0",spec:"0.1.0",description:"Created with Anchor"},Wd=[{name:"add_other_bridge_token",discriminator:[103,180,1,186,219,156,185,114],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"other_bridge_token",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"_chain_id",type:"u8"},{name:"_token_address",type:{array:["u8",32]}}]},{name:"adjust_total_lp_amount",discriminator:[8,190,6,31,121,124,62,241],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"user_token",writable:!0},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"admin"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}],args:[]},{name:"claim_rewards",discriminator:[4,144,132,71,116,23,151,80],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"user_token",writable:!0},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"user"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"deposit",discriminator:[242,35,198,137,82,225,242,182],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"user_token",writable:!0},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"user"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount",type:"u64"}]},{name:"init_deposit_account",discriminator:[136,79,202,206,211,146,182,158],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"mint"},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"user"}]}},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"initialize",discriminator:[175,175,109,31,13,152,155,237],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializeArgs"}}}]},{name:"initialize_pool",discriminator:[95,180,10,172,84,174,232,40],accounts:[{name:"payer",writable:!0,signer:!0},{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"mint"},{name:"token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializePoolArgs"}}}]},{name:"receive_and_swap",discriminator:[49,243,231,17,38,214,140,225],accounts:[{name:"user",writable:!0},{name:"payer",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"received_message_account"},{name:"unlock",writable:!0,pda:{seeds:[{kind:"const",value:[117,110,108,111,99,107]},{kind:"arg",path:"args.hash"}]}},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"},{name:"messenger_program"}],args:[{name:"args",type:{defined:{name:"UnlockArgs"}}}]},{name:"receive_and_swap_wormhole",discriminator:[53,141,209,156,114,7,54,229],accounts:[{name:"user",writable:!0},{name:"payer",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"received_message_account"},{name:"unlock",writable:!0,pda:{seeds:[{kind:"const",value:[117,110,108,111,99,107]},{kind:"arg",path:"args.hash"}]}},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"},{name:"messenger_program"}],args:[{name:"args",type:{defined:{name:"UnlockArgs"}}}]},{name:"register_chain_bridge",discriminator:[239,66,180,165,175,10,49,233],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"chain_bridge",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"RegisterChainBridgeArgs"}}}]},{name:"remove_other_bridge_token",discriminator:[149,232,199,145,241,219,24,154],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"other_bridge_token",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"_chain_id",type:"u8"},{name:"_token_address",type:{array:["u8",32]}}]},{name:"set_admin",discriminator:[251,163,0,52,91,194,187,92],accounts:[{name:"admin",signer:!0},{name:"new_admin"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[]},{name:"set_allbridge_messenger_program_id",discriminator:[168,21,145,139,97,252,84,77],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_balance_ratio_min",discriminator:[210,171,132,168,93,237,9,201],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0}],args:[{name:"balance_ratio_min_bp",type:"u16"}]},{name:"set_gas_oracle_program_id",discriminator:[172,152,29,206,112,239,205,83],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_pool_admin_fee_share",discriminator:[235,219,45,195,124,82,164,230],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0}],args:[{name:"fee_share_bp",type:"u64"}]},{name:"set_pool_fee_share",discriminator:[151,35,220,215,38,227,226,9],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0}],args:[{name:"fee_share_bp",type:"u64"}]},{name:"set_rebalancer",discriminator:[28,161,168,250,215,4,144,154],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"rebalancer"}],args:[]},{name:"set_stop_authority",discriminator:[238,229,235,32,221,191,227,43],accounts:[{name:"admin",signer:!0},{name:"new_authority"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[]},{name:"set_wormhole_messenger_program_id",discriminator:[215,127,198,117,43,17,36,24],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"start_bridge",discriminator:[213,146,40,152,47,121,85,18],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"action_type",type:{defined:{name:"ActionType"}}}]},{name:"stop_bridge",discriminator:[187,52,235,53,245,59,218,1],accounts:[{name:"stop_authority",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"action_type",type:{defined:{name:"ActionType"}}}]},{name:"swap",discriminator:[248,198,158,145,225,117,135,200],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"send_mint"},{name:"receive_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"send_pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"send_mint"}]}},{name:"receive_pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"receive_mint"}]}},{name:"send_bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"send_mint"}]}},{name:"receive_bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"receive_mint"}]}},{name:"send_user_token",writable:!0},{name:"receive_user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}],args:[{name:"amount",type:"u64"},{name:"receive_amount_min",type:"u64"}]},{name:"swap_and_bridge",discriminator:[204,63,169,171,186,125,86,159],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"lock",writable:!0,pda:{seeds:[{kind:"const",value:[108,111,99,107]},{kind:"arg",path:"args.nonce"}]}},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"other_bridge_token",writable:!0},{name:"messenger"},{name:"messenger_config",writable:!0},{name:"sent_message_account",writable:!0},{name:"messenger_gas_usage"},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"BridgeArgs"}}}]},{name:"swap_and_bridge_wormhole",discriminator:[41,91,201,180,150,117,154,65],accounts:[{name:"user",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"lock",writable:!0,pda:{seeds:[{kind:"const",value:[108,111,99,107]},{kind:"arg",path:"args.nonce"}]}},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"other_bridge_token",writable:!0},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"wormhole_messenger"},{name:"wormhole_messenger_config",writable:!0},{name:"wormhole_program"},{name:"bridge",writable:!0},{name:"message",writable:!0,signer:!0},{name:"sequence",writable:!0},{name:"fee_collector",writable:!0},{name:"messenger_gas_usage"},{name:"clock",address:"SysvarC1ock11111111111111111111111111111111"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"BridgeArgs"}}}]},{name:"update_chain_bridge",discriminator:[227,4,133,105,230,88,226,173],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"chain_bridge",writable:!0}],args:[{name:"args",type:{defined:{name:"UpdateChainBridgeArgs"}}}]},{name:"withdraw",discriminator:[183,18,70,156,148,109,161,34],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"user_token",writable:!0},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"user"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount_lp",type:"u64"}]},{name:"withdraw_admin_fee",discriminator:[176,135,230,197,163,130,60,252],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"admin_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"withdraw_gas_token",discriminator:[109,117,140,223,117,175,2,139],accounts:[{name:"admin",signer:!0},{name:"recipient",writable:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"amount",type:"u64"}]}],wd=[{name:"ChainBridge",discriminator:[25,216,147,218,140,42,98,49]},{name:"Config",discriminator:[155,12,170,224,30,250,204,130]},{name:"Lock",discriminator:[8,255,36,202,210,22,57,137]},{name:"OtherBridgeToken",discriminator:[27,112,167,155,2,141,52,167]},{name:"Pool",discriminator:[241,154,109,4,17,177,109,188]},{name:"Price",discriminator:[50,107,127,61,83,36,39,75]},{name:"Unlock",discriminator:[187,122,21,254,7,157,241,10]},{name:"UserDeposit",discriminator:[69,238,23,217,255,137,185,35]}],Fd=[{code:6e3,name:"AccountAlreadyInitialized",msg:"This account has already been initialized"},{code:6001,name:"AdminAuthorityInvalid",msg:"This instruction requires admin authority"},{code:6002,name:"InvalidSignature",msg:"Provided signature has wrong signer or message"},{code:6003,name:"InvalidHash",msg:"Wrong unlock message hash"},{code:6004,name:"PoolOverflow",msg:"Pool overflow"},{code:6005,name:"ReservesExhausted",msg:"Reserves exhausted"},{code:6006,name:"ZeroAmount",msg:"Zero amount"},{code:6007,name:"ZeroChanges",msg:"Zero changes"},{code:6008,name:"HighVusdAmount",msg:"vUSD amount is too high"},{code:6009,name:"BalanceRatioExceeded",msg:"Balance ratio exceeded"},{code:6010,name:"InsufficientReceivedAmount",msg:"Received insufficient amount"},{code:6011,name:"ForbiddenAction",msg:"ForbiddenAction"},{code:6012,name:"ValueTooHigh",msg:"Value is too high"},{code:6013,name:"EmptyRecipient",msg:"Empty recipient"}],Nd=[{name:"ActionType",type:{kind:"enum",variants:[{name:"Deposit"},{name:"Withdraw"},{name:"Swap"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"vusd_amount",type:"u64"}]}},{name:"ChainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"}]}},{name:"Config",type:{kind:"struct",fields:[{name:"admin",type:"pubkey"},{name:"allbridge_messenger_program_id",type:"pubkey"},{name:"wormhole_messenger_program_id",type:"pubkey"},{name:"gas_oracle_program_id",type:"pubkey"},{name:"rebalancer",type:"pubkey"},{name:"stop_authority",type:"pubkey"},{name:"authority_bump_seed",type:"u8"},{name:"can_swap",type:"bool"},{name:"can_deposit",type:"bool"},{name:"can_withdraw",type:"bool"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"allbridge_messenger_program_id",type:"pubkey"},{name:"wormhole_messenger_program_id",type:"pubkey"},{name:"gas_oracle_program_id",type:"pubkey"}]}},{name:"InitializePoolArgs",type:{kind:"struct",fields:[{name:"a",type:"u64"},{name:"fee_share_bp",type:"u64"},{name:"admin_fee_share_bp",type:"u64"},{name:"balance_ratio_min_bp",type:"u16"}]}},{name:"Lock",type:{kind:"struct",fields:[{name:"sender",type:"pubkey"},{name:"sent_token_address",type:"pubkey"},{name:"amount",type:"u64"},{name:"vusd_amount",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"nonce",type:{array:["u8",32]}},{name:"messenger",type:{defined:{name:"Messenger"}}},{name:"slot",type:"u64"},{name:"fee",type:"u64"}]}},{name:"Messenger",type:{kind:"enum",variants:[{name:"None"},{name:"Allbridge"},{name:"Wormhole"}]}},{name:"OtherBridgeToken",type:{kind:"struct",fields:[]}},{name:"Pool",type:{kind:"struct",fields:[{name:"mint",type:"pubkey"},{name:"a",type:"u64"},{name:"d",type:"u64"},{name:"token_balance",type:"u64"},{name:"v_usd_balance",type:"u64"},{name:"reserves",type:"u64"},{name:"decimals",type:"u8"},{name:"total_lp_amount",type:"u64"},{name:"fee_share_bp",type:"u64"},{name:"admin_fee_share_bp",type:"u64"},{name:"acc_reward_per_share_p",type:"u128"},{name:"admin_fee_amount",type:"u64"},{name:"balance_ratio_min_bp",type:"u16"}]}},{name:"Price",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"price",type:"u64"},{name:"gas_price",type:"u64"}]}},{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_bridge_address",type:{array:["u8",32]}},{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"}]}},{name:"Unlock",type:{kind:"struct",fields:[{name:"hash",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"fee",type:"u64"},{name:"v_usd_amount",type:"u64"},{name:"slot",type:"u64"}]}},{name:"UnlockArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"recipient",type:"pubkey"},{name:"source_chain_id",type:"u8"},{name:"receive_token",type:"pubkey"},{name:"messenger",type:{defined:{name:"Messenger"}}},{name:"hash",type:{array:["u8",32]}},{name:"receive_amount_min",type:"u64"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_bridge_address",type:{array:["u8",32]}},{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"}]}},{name:"UserDeposit",type:{kind:"struct",fields:[{name:"user_address",type:"pubkey"},{name:"mint",type:"pubkey"},{name:"lp_amount",type:"u64"},{name:"reward_debt",type:"u64"}]}}],Zd={address:Bd,metadata:Yd,instructions:Wd,accounts:wd,errors:Fd,types:Nd};var ar={};Fn(ar,{accounts:()=>Pd,address:()=>Gd,default:()=>Ld,errors:()=>Sd,instructions:()=>Xd,metadata:()=>Vd,types:()=>kd});var Gd="XHXBA5WK4PTaLjjVfhPLttXwjeiq18yLdPsBL42YKaY",Vd={name:"cctp_bridge",version:"0.1.0",spec:"0.1.0",description:"Created with Anchor"},Xd=[{name:"bridge",discriminator:[174,41,120,146,98,218,169,25],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"message_sent_event_data",writable:!0,signer:!0},{name:"lock",writable:!0,pda:{seeds:[{kind:"const",value:[108,111,99,107]},{kind:"account",path:"message_sent_event_data"}]}},{name:"mint",writable:!0},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}},{name:"cctp_messenger"},{name:"message_transmitter_program"},{name:"message_transmitter_account",writable:!0},{name:"token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"remote_token_messenger_key"},{name:"authority_pda"},{name:"event_authority"},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"cctp_bridge"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"BridgeArgs"}}}]},{name:"initialize",discriminator:[175,175,109,31,13,152,155,237],accounts:[{name:"payer",writable:!0,signer:!0},{name:"admin",writable:!0,signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"cctp_bridge"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"system_program",address:"11111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializeArgs"}}}]},{name:"register_chain_bridge",discriminator:[239,66,180,165,175,10,49,233],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"cctp_bridge",pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"arg",path:"args.mint"}]}},{name:"chain_bridge",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"RegisterChainBridgeArgs"}}}]},{name:"set_admin",discriminator:[251,163,0,52,91,194,187,92],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"new_admin"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[]},{name:"set_admin_fee_share",discriminator:[34,2,1,74,101,120,39,19],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[{name:"fee_share_bp",type:"u64"}]},{name:"set_cctp_token_messenger_minter",discriminator:[7,23,157,231,197,83,45,203],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_gas_oracle_program_id",discriminator:[172,152,29,206,112,239,205,83],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"update_chain_bridge",discriminator:[227,4,133,105,230,88,226,173],accounts:[{name:"admin",signer:!0},{name:"cctp_bridge",pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"arg",path:"args.mint"}]}},{name:"chain_bridge",writable:!0}],args:[{name:"args",type:{defined:{name:"UpdateChainBridgeArgs"}}}]},{name:"withdraw_admin_fee",discriminator:[176,135,230,197,163,130,60,252],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"admin_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"cctp_bridge"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"withdraw_gas_token",discriminator:[109,117,140,223,117,175,2,139],accounts:[{name:"admin",signer:!0},{name:"recipient",writable:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[{name:"amount",type:"u64"}]}],Pd=[{name:"CctpBridge",discriminator:[164,2,216,77,99,83,161,159]},{name:"ChainBridge",discriminator:[25,216,147,218,140,42,98,49]},{name:"Lock",discriminator:[8,255,36,202,210,22,57,137]},{name:"Price",discriminator:[50,107,127,61,83,36,39,75]}],Sd=[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}],kd=[{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"CctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"pubkey"},{name:"admin",type:"pubkey"},{name:"cctp_token_messenger_minter",type:"pubkey"},{name:"gas_oracle_program_id",type:"pubkey"},{name:"authority_bump_seed",type:"u8"},{name:"admin_fee_share_bp",type:"u64"},{name:"admin_fee_amount",type:"u64"}]}},{name:"ChainBridge",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gas_oracle_program_id",type:"pubkey"},{name:"cctp_token_messenger_minter",type:"pubkey"},{name:"admin_fee_share_bp",type:"u64"}]}},{name:"Lock",type:{kind:"struct",fields:[{name:"sender",type:"pubkey"},{name:"amount",type:"u64"},{name:"admin_fee",type:"u64"},{name:"relayer_fee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"slot",type:"u64"}]}},{name:"Price",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"price",type:"u64"},{name:"gas_price",type:"u64"}]}},{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"pubkey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"pubkey"}]}}],Ld={address:Gd,metadata:Vd,instructions:Xd,accounts:Pd,errors:Sd,types:kd};var ir={};Fn(ir,{accounts:()=>Jd,address:()=>Md,default:()=>Od,errors:()=>jd,instructions:()=>Hd,metadata:()=>xd,types:()=>zd});var Md="9jVyuaD67X2zNPZ6sq1sY1XsqTvRgvEWZ6t99BytTnKJ",xd={name:"cctp_v2_bridge",version:"0.1.0",spec:"0.1.0",description:"Created with Anchor"},Hd=[{name:"bridge",discriminator:[174,41,120,146,98,218,169,25],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"message_sent_event_data",writable:!0,signer:!0},{name:"lock",writable:!0,pda:{seeds:[{kind:"const",value:[108,111,99,107]},{kind:"account",path:"message_sent_event_data"}]}},{name:"mint",writable:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}},{name:"token_messenger_minter_program"},{name:"message_transmitter_program"},{name:"message_transmitter_account",writable:!0},{name:"token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"remote_token_messenger"},{name:"authority_pda"},{name:"denylist_account",pda:{seeds:[{kind:"const",value:[100,101,110,121,108,105,115,116,95,97,99,99,111,117,110,116]},{kind:"account",path:"user"}],program:{kind:"account",path:"token_messenger_minter_program"}}},{name:"event_authority"},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"BridgeArgs"}}}]},{name:"bridge_to_stellar",discriminator:[154,94,190,69,118,64,6,134],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"message_sent_event_data",writable:!0,signer:!0},{name:"lock",writable:!0,pda:{seeds:[{kind:"const",value:[108,111,99,107]},{kind:"account",path:"message_sent_event_data"}]}},{name:"mint",writable:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}},{name:"token_messenger_minter_program"},{name:"message_transmitter_program"},{name:"message_transmitter_account",writable:!0},{name:"token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"remote_token_messenger"},{name:"authority_pda"},{name:"denylist_account",pda:{seeds:[{kind:"const",value:[100,101,110,121,108,105,115,116,95,97,99,99,111,117,110,116]},{kind:"account",path:"user"}],program:{kind:"account",path:"token_messenger_minter_program"}}},{name:"event_authority"},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"BridgeToStellarArgs"}}}]},{name:"close_lock",discriminator:[58,254,183,130,151,238,95,54],accounts:[{name:"admin",signer:!0},{name:"rent_recipient",writable:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}},{name:"lock",writable:!0}],args:[]},{name:"initialize",discriminator:[175,175,109,31,13,152,155,237],accounts:[{name:"payer",writable:!0,signer:!0},{name:"admin",writable:!0,signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"system_program",address:"11111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializeArgs"}}}]},{name:"receive_tokens",discriminator:[229,73,222,185,57,227,213,67],accounts:[{name:"payer",writable:!0,signer:!0},{name:"mint",writable:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"recipient",writable:!0},{name:"message_transmitter_program"},{name:"authority_pda"},{name:"message_transmitter_account"},{name:"used_nonce",writable:!0},{name:"token_messenger_minter_program"},{name:"message_transmitter_event_authority"},{name:"token_messenger"},{name:"remote_token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"token_pair"},{name:"fee_recipient_token_account",writable:!0},{name:"recipient_token_account",writable:!0,pda:{seeds:[{kind:"account",path:"recipient"},{kind:"const",value:[6,221,246,225,215,101,161,147,217,203,225,70,206,235,121,172,28,180,133,237,95,91,55,145,58,140,245,133,126,255,0,169]},{kind:"account",path:"mint"}],program:{kind:"const",value:[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{name:"custody_token_account",writable:!0},{name:"token_messenger_event_authority"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"ReceiveTokensArgs"}}}]},{name:"register_chain_bridge",discriminator:[239,66,180,165,175,10,49,233],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"arg",path:"args.mint"}]}},{name:"chain_bridge",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"RegisterChainBridgeArgs"}}}]},{name:"set_admin",discriminator:[251,163,0,52,91,194,187,92],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"new_admin"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[]},{name:"set_admin_fee_share",discriminator:[34,2,1,74,101,120,39,19],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"fee_share_bp",type:"u64"}]},{name:"set_gas_oracle_program_id",discriminator:[172,152,29,206,112,239,205,83],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_max_fee_share",discriminator:[120,202,93,18,32,173,77,155],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"max_fee_share",type:"u64"}]},{name:"set_min_finality_threshold",discriminator:[143,83,132,23,202,153,26,103],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"min_finality_threshold",type:"u32"}]},{name:"set_stellar_chain_id",discriminator:[101,154,227,68,36,7,223,197],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"stellar_chain_id",type:"u8"}]},{name:"set_token_messenger_minter",discriminator:[136,50,92,91,209,211,206,234],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"update_chain_bridge",discriminator:[227,4,133,105,230,88,226,173],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"arg",path:"args.mint"}]}},{name:"chain_bridge",writable:!0}],args:[{name:"args",type:{defined:{name:"UpdateChainBridgeArgs"}}}]},{name:"withdraw_admin_fee",discriminator:[176,135,230,197,163,130,60,252],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"admin_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"withdraw_gas_token",discriminator:[109,117,140,223,117,175,2,139],accounts:[{name:"admin",signer:!0},{name:"recipient",writable:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"amount",type:"u64"}]}],Jd=[{name:"ChainBridge",discriminator:[25,216,147,218,140,42,98,49]},{name:"Config",discriminator:[155,12,170,224,30,250,204,130]},{name:"Lock",discriminator:[8,255,36,202,210,22,57,137]},{name:"Price",discriminator:[50,107,127,61,83,36,39,75]}],jd=[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"},{code:6001,name:"AmountTooLow",msg:"Amount is too low"},{code:6002,name:"UseBridgeToStellar",msg:"Use bridge_to_stellar for this destination"},{code:6003,name:"StellarChainIdNotSet",msg:"Stellar chain ID is not configured"},{code:6004,name:"StellarBridgeNotRegistered",msg:"Stellar chain bridge address is not registered"}],zd=[{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"BridgeToStellarArgs",type:{kind:"struct",fields:[{name:"amount",type:"u64"},{name:"hook_data",type:"bytes"}]}},{name:"ChainBridge",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"},{name:"other_bridge",type:"pubkey"}]}},{name:"Config",type:{kind:"struct",fields:[{name:"mint",type:"pubkey"},{name:"admin",type:"pubkey"},{name:"token_messenger_minter",type:"pubkey"},{name:"message_transmitter",type:"pubkey"},{name:"gas_oracle_program_id",type:"pubkey"},{name:"authority_bump_seed",type:"u8"},{name:"admin_fee_share_bp",type:"u64"},{name:"admin_fee_amount",type:"u64"},{name:"max_fee_share",type:"u64"},{name:"min_finality_threshold",type:"u32"},{name:"stellar_chain_id",type:"u8"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gas_oracle_program_id",type:"pubkey"},{name:"token_messenger_minter",type:"pubkey"},{name:"message_transmitter",type:"pubkey"},{name:"admin_fee_share_bp",type:"u64"},{name:"max_fee_share",type:"u64"},{name:"min_finality_threshold",type:"u32"}]}},{name:"Lock",type:{kind:"struct",fields:[{name:"sender",type:"pubkey"},{name:"amount",type:"u64"},{name:"admin_fee",type:"u64"},{name:"relayer_fee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"slot",type:"u64"}]}},{name:"Price",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"price",type:"u64"},{name:"gas_price",type:"u64"}]}},{name:"ReceiveTokensArgs",type:{kind:"struct",fields:[{name:"message_id",type:{array:["u8",32]}},{name:"message",type:"bytes"},{name:"attestation",type:"bytes"},{name:"extra_gas_amount",type:"u64"}]}},{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"mint",type:"pubkey"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"},{name:"other_bridge",type:"pubkey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"mint",type:"pubkey"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"},{name:"other_bridge",type:"pubkey"}]}}],Od={address:Md,metadata:xd,instructions:Hd,accounts:Jd,errors:jd,types:zd};import{getAccount as Qd}from"@solana/spl-token";import Ud from"big.js";import{Web3 as ja}from"web3";async function ln(o,a){return await Qd(a.connection,o)}async function za(o,a,i){let r=await a.account.pool.fetch(i),s=r.decimals,d=Ud(r.feeShareBp.toString()).div(1e4).toFixed(),A={aValue:r.a.toString(),dValue:r.d.toString(),totalLpAmount:r.totalLpAmount.toString(),tokenBalance:r.tokenBalance.toString(),vUsdBalance:r.vUsdBalance.toString(),accRewardPerShareP:r.accRewardPerShareP.toString()};if(Rt(o,s).lte(0))throw new vt(`Swap amount ${H(o,s).toFixed()} is too small for the liquidity pool. Minimum required amount is 0.001.`);return pt(o,{decimals:s,feeShare:d},A)}function Oa(o){let a=o.amount,i="0x"+o.recipient.toString("hex"),r=o.sourceChainId,s=o.destinationChainId,d="0x"+o.receiveToken.toString("hex"),A="0x"+o.nonce.toString("hex"),l=1,u="0x"+o.chainBridge.toString("hex"),b=ja.utils.encodePacked({t:"uint256",v:a},{t:"bytes32",v:i},{t:"uint256",v:r},{t:"bytes32",v:d},{t:"uint256",v:A},{t:"uint8",v:l});if(!b)throw new w("message cannot be undefined");let y=ja.utils.keccak256(I.from(b.replace("0x",""),"hex")),C=I.from(y.replace("0x",""),"hex");C[0]=r,C[1]=s;let f=ja.utils.encodePacked({t:"bytes32",v:"0x"+C.toString("hex")},{t:"bytes32",v:u});if(!f)throw new on("messageWithSigner cannot be undefined");let v=ja.utils.keccak256(I.from(f.replace("0x",""),"hex")),T=I.from(v.replace("0x",""),"hex");return T[0]=C[0],T[1]=C[1],T}import{web3 as fo}from"@coral-xyz/anchor";import{PublicKey as Kd,TransactionMessage as Ro}from"@solana/web3.js";async function To(o,a,i){try{let r=await Qt(a,o),s=await Qt(i,o),d=Ro.decompile(a.message,{addressLookupTableAccounts:r}),A=Ro.decompile(i.message,{addressLookupTableAccounts:s});if(A.instructions.shift(),d.instructions.push(...A.instructions),r.push(...s),a.message=d.compileToV0Message(r),i.message.header.numRequiredSignatures===2&&a.signatures.length===1){let l=i.signatures[0];if(!l)throw new w("Signature is undefined");a.signatures.push(l)}return a}catch(r){throw r instanceof Error&&r.message?new Ge(`Some error occurred during creation final swap and bridge transaction. ${r.message}`):new Ge("Some error occurred during creation final swap and bridge transaction")}}async function St(o,a,i){let r=await a.getAddressLookupTable(new Kd(i)).then(d=>d.value);if(!r)throw new w("Cannot find allbridgeLookupTableAccount");let s=new fo.TransactionMessage({payerKey:o.feePayer,recentBlockhash:o.recentBlockhash,instructions:o.instructions}).compileToV0Message([r]);return new fo.VersionedTransaction(s)}var or=1e6,Ua=class{constructor(a,i,r){this.solanaRpcUrl=a;this.params=i;this.api=r}solanaRpcUrl;params;api;chainType="SOLANA";async buildRawTransactionSwap(a){let i=Ke(this.chainType,a);return await this.buildSwapTransaction(i,a.sourceToken.poolAddress,a.destinationToken.poolAddress,a.txFeeParams)}async buildSwapTransaction(a,i,r,s){let{fromAccountAddress:d,amount:A,contractAddress:l,fromTokenAddress:u,toTokenAddress:b,toAccountAddress:y,minimumReceiveAmount:C}=a,f=d,v=l,T=u,F=b,N=r,G=y,R=new pe(f),P=st(this.solanaRpcUrl,R.toString()),V=new Qa({...Pt,address:v},P),S=await Xt(V.programId),M=await nt(V.programId),x=new pe(T),oe=await Bt(x,V.programId),se=new pe(i),Ae=Qe(R,x),ae=new pe(G),ne=new pe(F),ce=await Bt(ne,V.programId),ge=new pe(N),Be=Qe(ae,ne),be=[_t.ComputeBudgetProgram.setComputeUnitLimit({units:or})];try{await ln(Be,P)}catch{let Ye=Ed(ne,ae),He=Dd(R,Ye,ae,ne);be.push(He)}let Ce=await V.methods.swap(new Et(A),new Et(C||0)).accountsPartial({payer:R,config:M,bridgeAuthority:S,user:R,sendBridgeToken:oe,sendMint:x,sendPool:se,sendUserToken:Ae,receiveBridgeToken:ce,receiveMint:ne,receivePool:ge,receiveUserToken:Be}).preInstructions(be).transaction(),xe=P.connection;return Ce.recentBlockhash=(await xe.getLatestBlockhash()).blockhash,Ce.feePayer=R,await gn(Ce,s,this.solanaRpcUrl),await St(Ce,xe,this.params.solanaLookUpTable)}async buildRawTransactionSend(a,i){let r,s;switch(a.messenger){case 1:{let d=await this.prepareSwapAndBridgeData(i);r=await this.buildSwapAndBridgeAllbridgeTransaction(d);break}case 2:{let d=await this.prepareSwapAndBridgeData(i),{transaction:A,messageAccount:l}=await this.buildSwapAndBridgeWormholeTransaction(d);r=A,s=l;break}case 3:{let d=await this.prepareSwapAndBridgeCctpData(i),{transaction:A,messageSentEventDataKeypair:l}=await this.buildSwapAndBridgeCctpTransaction(a.destinationToken.chainSymbol,d);r=A,s=l;break}case 4:{let d=await this.prepareSwapAndBridgeCctpV2Data(a,i),{transaction:A,messageSentEventDataKeypair:l}=await this.buildSwapAndBridgeCctpV2Transaction(a.destinationToken.chainSymbol,d);r=A,s=l;break}case 6:throw new w("Messenger xReserve is not supported yet.");case 5:throw new Ve("Messenger OFT is not supported yet.");default:return re(a.messenger,"Unhandled Messenger type")}return{tx:r,requiredMessageSigner:s}}getExtraGasInstruction(a,i,r){return _t.SystemProgram.transfer({fromPubkey:i,toPubkey:r,lamports:+a})}async prepareSwapAndBridgeData(a){let{amount:i,contractAddress:r,fromChainId:s,fromAccountAddress:d,fromTokenAddress:A,toChainId:l,toAccountAddress:u,toTokenAddress:b,poolAddress:y,extraGas:C}=a,f=A,v=d,T=l,F=b,N=u,G=r,R=s,P=st(this.solanaRpcUrl,v),V=new Qa({...Pt,address:G},P),S=Array.from(mt()),M=new pe(y),x=await za(i,V,M),oe=await Ga(S,V.programId),se=await Xt(V.programId),Ae=Qe(new pe(v),new pe(f)),ae=await Bt(new pe(f),V.programId),ne=await Ot(T,V.programId),ce=await Xa(T,I.from(F),V.programId),ge=await nt(V.programId),Be=await V.account.config.fetch(ge),be=await yt(T,Be.gasOracleProgramId),Ce=await yt(R,Be.gasOracleProgramId),xe=Oa({amount:x,recipient:I.from(N),nonce:I.from(S),receiveToken:I.from(F),destinationChainId:T,sourceChainId:R,chainBridge:(await Xt(V.programId)).toBuffer()}),E={};return E.bridge=V,E.amount=new Et(i),E.vusdAmount=new Et(x),E.nonce=S,E.recipient=Array.from(N),E.receiveToken=Array.from(F),E.poolAccount=M,E.lockAccount=oe,E.bridgeAuthority=se,E.userToken=Ae,E.bridgeTokenAccount=ae,E.chainBridgeAccount=ne,E.otherBridgeTokenAccount=ce,E.userAccount=new pe(v),E.destinationChainId=T,E.mint=new pe(f),E.config=ge,E.configAccountInfo=Be,E.gasPrice=be,E.thisGasPrice=Ce,E.message=xe,C&&(E.extraGasInstruction=this.getExtraGasInstruction(C,E.userAccount,ge)),E}async buildSwapAndBridgeAllbridgeTransaction(a){let{bridge:i,vusdAmount:r,nonce:s,recipient:d,receiveToken:A,poolAccount:l,lockAccount:u,bridgeAuthority:b,userToken:y,bridgeTokenAccount:C,chainBridgeAccount:f,otherBridgeTokenAccount:v,userAccount:T,destinationChainId:F,mint:N,config:G,configAccountInfo:R,gasPrice:P,thisGasPrice:V,message:S,extraGasInstruction:M}=a,x=R.allbridgeMessengerProgramId,oe=await dn(F,x),se=await nt(x),Ae=await Pa(S,x),ae=[];M&&ae.push(M);let ne=await i.methods.swapAndBridge({vusdAmount:r,nonce:s,destinationChainId:F,recipient:d,receiveToken:A}).accountsPartial({payer:T,mint:N,user:T,config:G,lock:u,pool:l,gasPrice:P,thisGasPrice:V,bridgeAuthority:b,userToken:y,bridgeToken:C,chainBridge:f,messenger:x,messengerGasUsage:oe,messengerConfig:se,sentMessageAccount:Ae,otherBridgeToken:v}).preInstructions([_t.ComputeBudgetProgram.setComputeUnitLimit({units:or})]).postInstructions(ae).transaction(),ce=st(this.solanaRpcUrl,T.toString()).connection;return ne.recentBlockhash=(await ce.getLatestBlockhash()).blockhash,ne.feePayer=T,await St(ne,ce,this.params.solanaLookUpTable)}async buildSwapAndBridgeWormholeTransaction(a){let{bridge:i,vusdAmount:r,nonce:s,recipient:d,receiveToken:A,poolAccount:l,lockAccount:u,bridgeAuthority:b,userToken:y,bridgeTokenAccount:C,chainBridgeAccount:f,otherBridgeTokenAccount:v,userAccount:T,destinationChainId:F,mint:N,config:G,configAccountInfo:R,gasPrice:P,thisGasPrice:V,extraGasInstruction:S}=a,M=this.params.wormholeMessengerProgramId;if(!M)throw new w("Do not use.");let[x]=pe.findProgramAddressSync([I.from("Bridge")],new pe(M)),[oe]=pe.findProgramAddressSync([I.from("fee_collector")],new pe(M)),[se]=pe.findProgramAddressSync([I.from("Sequence"),b.toBuffer()],new pe(M)),Ae=await dn(F,R.wormholeMessengerProgramId),ae=await nt(R.wormholeMessengerProgramId),ne=rr.generate(),ce=st(this.solanaRpcUrl,T.toString()),ge=await ce.connection.getAccountInfo(x);if(ge==null)throw new w("Cannot fetch wormhole bridge account info");let Be=new Et(ge.data.slice(16,24),"le").toString(),be=_d.transfer({fromPubkey:T,toPubkey:oe,lamports:+Be}),Ce=[];S&&Ce.push(S);let xe={payer:T,mint:N,user:T,config:G,lock:u,pool:l,gasPrice:P,thisGasPrice:V,bridgeAuthority:b,userToken:y,bridgeToken:C,chainBridge:f,otherBridgeToken:v,messengerGasUsage:Ae,wormholeProgram:M,bridge:x,message:ne.publicKey,wormholeMessenger:R.wormholeMessengerProgramId,sequence:se,feeCollector:oe,wormholeMessengerConfig:ae,clock:_t.SYSVAR_CLOCK_PUBKEY},E=await i.methods.swapAndBridgeWormhole({vusdAmount:r,nonce:s,destinationChainId:F,recipient:d,receiveToken:A}).accounts(xe).preInstructions([_t.ComputeBudgetProgram.setComputeUnitLimit({units:or}),be]).postInstructions(Ce).signers([ne]).transaction();return E.recentBlockhash=(await ce.connection.getLatestBlockhash()).blockhash,E.feePayer=T,{transaction:await St(E,ce.connection,this.params.solanaLookUpTable),messageAccount:ne}}async prepareSwapAndBridgeCctpData(a){let{contractAddress:i,amount:r,fromAccountAddress:s,fromTokenAddress:d,toChainId:A,toAccountAddress:l,toTokenAddress:u,extraGas:b}=a,y=i;if(!y)throw new We("Such route does not support CCTP protocol");let C=4,f=s,v=u,T=l,F=st(this.solanaRpcUrl,f),N=new Qa({...ar,address:y},F),G=new pe(d),R=await Sa(G,N.programId),P=new pe(f),V=await N.account.cctpBridge.fetch(R),S={};return S.cctpBridge=N,S.cctpBridgeAccount=R,S.cctpAddressAccount=new pe(y),S.amount=new Et(r),S.recipient=Array.from(T),S.receiveToken=Array.from(v),S.userToken=Qe(P,G),S.bridgeAuthority=await Va(R,N.programId),S.bridgeTokenAccount=await po(G,N.programId),S.chainBridgeAccount=await Ot(A,N.programId),S.userAccount=P,S.destinationChainId=A,S.mint=G,S.gasPrice=await yt(A,V.gasOracleProgramId),S.thisGasPrice=await yt(C,V.gasOracleProgramId),S.provider=F,b&&(S.extraGasInstruction=this.getExtraGasInstruction(b,S.userAccount,R)),S}async buildSwapAndBridgeCctpTransaction(a,i){let{cctpBridge:r,cctpBridgeAccount:s,amount:d,recipient:A,receiveToken:l,bridgeAuthority:u,userToken:b,bridgeTokenAccount:y,chainBridgeAccount:C,userAccount:f,destinationChainId:v,mint:T,gasPrice:F,thisGasPrice:N,extraGasInstruction:G,provider:R}=i,P=this.params.cctpParams.cctpDomains[a],V=this.params.cctpParams.cctpTransmitterProgramId,S=this.params.cctpParams.cctpTokenMessengerMinter;if(P==null||!V||!S)throw new w("CCTP is not configured");let M=new pe(V),x=new pe(S),{messageTransmitterAccount:oe,tokenMessenger:se,tokenMessengerEventAuthority:Ae,tokenMinter:ae,localToken:ne,remoteTokenMessengerKey:ce,authorityPda:ge}=kn(P,T,M,x),Be=[];G&&Be.push(G);let be=rr.generate(),Ce=La(r.programId,be.publicKey),xe=await r.methods.bridge({amount:d,destinationChainId:v,recipient:A,receiveToken:l}).accountsPartial({mint:T,user:f,cctpBridge:s,payer:f,messageSentEventData:be.publicKey,lock:Ce,cctpMessenger:x,messageTransmitterProgram:M,messageTransmitterAccount:oe,tokenMessenger:se,tokenMinter:ae,localToken:ne,remoteTokenMessengerKey:ce,authorityPda:ge,eventAuthority:Ae,bridgeToken:y,gasPrice:F,thisGasPrice:N,chainBridge:C,userToken:b,bridgeAuthority:u}).preInstructions([_t.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(Be).transaction(),E=R.connection;return xe.recentBlockhash=(await E.getLatestBlockhash()).blockhash,xe.feePayer=f,{transaction:await St(xe,E,this.params.solanaLookUpTable),messageSentEventDataKeypair:be}}async prepareSwapAndBridgeCctpV2Data(a,i){let{contractAddress:r,amount:s,fromAccountAddress:d,fromTokenAddress:A,toChainId:l,toAccountAddress:u,toTokenAddress:b,extraGas:y}=i,C=r;if(!C)throw new We("The route does not support CCTPv2 protocol");let f=4,v=d,T=b,F=st(this.solanaRpcUrl,v),N=new Qa({...ir,address:C},F),G=new pe(A),R=ka(G,N.programId),P=new pe(v),V=await N.account.config.fetch(R),S;if(a.destinationToken.chainType==="SRB"){if(!a.destinationToken.cctpV2Address)throw new We("The route does not support CCTPv2 protocol");if(V.stellarChainId!==+l)throw new w(`CCTPv2 Stellar chain ID mismatch: expected ${l}, received ${V.stellarChainId}`);S=sn(a.toAccountAddress)}else S=void 0;let M=Array.from(u),x={};return x.cctpBridge=N,x.amount=new Et(s),x.recipient=M,x.receiveToken=Array.from(T),x.hookData=S,x.userToken=Qe(P,G),x.chainBridgeAccount=await Ot(l,N.programId),x.userAccount=P,x.destinationChainId=l,x.mint=G,x.gasPrice=await yt(l,V.gasOracleProgramId),x.thisGasPrice=await yt(f,V.gasOracleProgramId),x.provider=F,y&&(x.extraGasInstruction=this.getExtraGasInstruction(y,x.userAccount,R)),x}async buildSwapAndBridgeCctpV2Transaction(a,i){let{amount:r,cctpBridge:s,chainBridgeAccount:d,destinationChainId:A,extraGasInstruction:l,gasPrice:u,hookData:b,mint:y,provider:C,receiveToken:f,recipient:v,thisGasPrice:T,userAccount:F,userToken:N}=i,G=this.params.cctpParams.cctpDomains[a],R=this.params.cctpParams.cctpV2TransmitterProgramId,P=this.params.cctpParams.cctpV2TokenMessengerMinter;if(G==null||!R||!P)throw new w("CCTPv2 is not configured");let V=new pe(R),S=new pe(P),{messageTransmitterAccount:M,tokenMessenger:x,tokenMessengerEventAuthority:oe,tokenMinter:se,localToken:Ae,remoteTokenMessengerKey:ae,authorityPda:ne}=kn(G,y,V,S),ce=[];l&&ce.push(l);let ge=rr.generate(),be=await(b?s.methods.bridgeToStellar({amount:r,hookData:b}):s.methods.bridge({amount:r,destinationChainId:A,recipient:v,receiveToken:f})).accounts({mint:y,user:F,messageSentEventData:ge.publicKey,tokenMessengerMinterProgram:S,messageTransmitterProgram:V,messageTransmitterAccount:M,tokenMessenger:x,tokenMinter:se,localToken:Ae,remoteTokenMessenger:ae,authorityPda:ne,eventAuthority:oe,gasPrice:u,thisGasPrice:T,chainBridge:d,userToken:N}).preInstructions([_t.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(ce).transaction(),Ce=C.connection;return be.recentBlockhash=(await Ce.getLatestBlockhash()).blockhash,be.feePayer=F,{transaction:await St(be,Ce,this.params.solanaLookUpTable),messageSentEventDataKeypair:ge}}};import{NATIVE_MINT as $d}from"@solana/spl-token";import{VersionedTransaction as qd}from"@solana/web3.js";import Bo,{AxiosError as Yo}from"axios";import{Big as De}from"big.js";var eA=1.1,tA=1.01,Ka=class{constructor(a,i){this.api=a;this.jupiterUrl=i.jupiterUrl.replace(/\/$/,""),this.apiKeyHeader=i.jupiterApiKeyHeader,this.maxAccounts=i.jupiterMaxAccounts}api;jupiterUrl;apiKeyHeader;maxAccounts;async buildJupAndUpdateTxSendParams(a,i){let r=nr(a.txFeeParams?.solana);try{let{tx:s,solTxSendUpdatedParams:d}=await this.processJup(i,a,r,!0);return{jupTx:s,solTxSendParams:{...i,...d}}}catch(s){if(s instanceof vt)throw s;try{let{tx:d,solTxSendUpdatedParams:A}=await this.processJup(i,a,r,!1);return{jupTx:d,solTxSendParams:{...i,...A}}}catch(d){throw d instanceof ve?d:d instanceof Error&&d.message?new Ge(`Some error occurred during creation Jupiter swap transaction. ${d.message}`):new Ge("Some error occurred during creation Jupiter swap transaction")}}}async processJup(a,i,r,s){let{fee:d,extraGas:A,gasFeePaymentMethod:l,sourceNativeTokenPrice:u}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(i.sourceToken,a),b=s?De(d):De(a.fee);if(A&&(s?b=b.plus(A):a.extraGas&&(b=b.plus(a.extraGas))),r?.payTxFeeWithStablecoinSwap)if(s)b=b.plus(3526760);else{if(!u)throw new w("sourceNativeTokenPrice is undefined.");let N=De(3526760).mul(u).div(De(10).pow(Q.getChainDecimalsByType("SOLANA")-i.sourceToken.decimals)).toFixed(0);b=b.plus(N)}s||(b=b.mul(eA));let{tx:y,amountIn:C}=await this.getJupiterSwapTx(i.fromAccountAddress,i.sourceToken.tokenAddress,b.toFixed(0),s),f;if(s){if(!C)throw new Ge("Cannot get inAmount");f=De(a.amount).minus(De(C).mul(tA).toFixed(0,De.roundUp)).toFixed(0)}else f=De(a.amount).minus(b).toFixed(0);if(De(f).lte(0))throw new vt(`Amount not enough to pay fee, ${H(De(f).minus(1).neg(),i.sourceToken.decimals).toFixed()} ${i.sourceToken.symbol} is missing`);return{tx:y,solTxSendUpdatedParams:{amount:f,fee:d,extraGas:A,gasFeePaymentMethod:l}}}async convertStableCoinFeeAndExtraGasToNativeCurrency(a,i){if(i.gasFeePaymentMethod=="stablecoin"){let r=(await this.api.getReceiveTransactionCost({sourceChainId:i.fromChainId,destinationChainId:i.toChainId,messenger:i.messenger,sourceToken:a.tokenAddress})).sourceNativeTokenPrice,s=De(i.fee).div(r).mul(De(10).pow(Q.getChainDecimalsByType("SOLANA")-a.decimals)).toFixed(0),d;return i.extraGas&&(d=De(i.extraGas).div(r).mul(De(10).pow(Q.getChainDecimalsByType("SOLANA")-a.decimals)).toFixed(0)),{fee:s,extraGas:d,gasFeePaymentMethod:"native",sourceNativeTokenPrice:r}}return{fee:i.fee,extraGas:i.extraGas,gasFeePaymentMethod:"native"}}async getJupiterSwapTx(a,i,r,s){let d;try{let C=s?"ExactOut":"ExactIn",f=`${this.jupiterUrl}/quote?inputMint=${i}&outputMint=${$d.toString()}&amount=${r}&swapMode=${C}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(f+=`&maxAccounts=${this.maxAccounts}`),d=await Bo.get(f,{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(C){throw C instanceof Yo&&C.response&&C.response.data&&C.response.data.error?new Ge(C.response.data.error):new Ge("Cannot get route")}let A;if(s&&d?.data?.inAmount)A=d.data.inAmount;else if(s)throw new Ge("Cannot get inAmount");let l;try{l=await Bo.post(`${this.jupiterUrl}/swap`,{quoteResponse:d.data,userPublicKey:a,wrapAndUnwrapSol:!0},{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(C){throw C instanceof Yo&&C.response&&C.response.data&&C.response.data.error?new Ge(C.response.data.error):new Ge("Cannot get swap transaction")}let u;if(l?.data?.swapTransaction)u=l.data.swapTransaction;else throw new Ge("Cannot get swap transaction");let b=I.from(u,"base64"),y=qd.deserialize(b);return s?{tx:y,amountIn:A}:{tx:y}}};import{BN as Mn,Program as Fo,web3 as cA}from"@coral-xyz/anchor";import{Keypair as No,PublicKey as dt,SystemProgram as gA}from"@solana/web3.js";var sr={};Fn(sr,{accounts:()=>rA,address:()=>nA,default:()=>AA,errors:()=>sA,events:()=>oA,instructions:()=>iA,metadata:()=>aA,types:()=>dA});var nA="DfB5pJSykRUuUT2ViG8V382R6RB5CQ3GTMVFajoyxXn1",aA={name:"payer_with_token",version:"0.1.0",spec:"0.1.0",description:"Created with Anchor"},iA=[{name:"add_fee_token",discriminator:[171,6,150,97,69,55,13,136],accounts:[{name:"initializer",writable:!0,signer:!0},{name:"admin",signer:!0},{name:"fee_token_mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"system_program",address:"11111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"AddFeeTokenArgs"}}}]},{name:"bridge_cctp",discriminator:[35,114,66,117,122,78,225,186],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint",writable:!0},{name:"fee_token_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"user_fee_token_account",writable:!0},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"cctp_bridge"},{name:"bridge_token",writable:!0},{name:"cctp_messenger"},{name:"message_transmitter_program"},{name:"message_transmitter_account",writable:!0},{name:"token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"remote_token_messenger_key"},{name:"authority_pda"},{name:"event_authority"},{name:"message_sent_event_data",writable:!0,signer:!0},{name:"lock",writable:!0},{name:"cctp_bridge_config",writable:!0},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"bridge_authority"},{name:"user_token_account",writable:!0},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"PayerCctpBridgeArgs"}}}]},{name:"bridge_cctp_v2",discriminator:[237,74,221,146,95,161,136,197],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint",writable:!0},{name:"fee_token_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"user_fee_token_account",writable:!0},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"cctp_bridge"},{name:"bridge_token",writable:!0},{name:"token_messenger_minter_program"},{name:"message_transmitter_program"},{name:"message_transmitter_account",writable:!0},{name:"token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"remote_token_messenger"},{name:"authority_pda"},{name:"denylist_account",pda:{seeds:[{kind:"const",value:[100,101,110,121,108,105,115,116,95,97,99,99,111,117,110,116]},{kind:"account",path:"user"}],program:{kind:"account",path:"token_messenger_minter_program"}}},{name:"event_authority"},{name:"message_sent_event_data",writable:!0,signer:!0},{name:"lock",writable:!0},{name:"cctp_bridge_config",writable:!0},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"bridge_authority"},{name:"user_token_account",writable:!0},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"PayerCctpV2BridgeArgs"}}}]},{name:"initialize",discriminator:[175,175,109,31,13,152,155,237],accounts:[{name:"initializer",writable:!0,signer:!0},{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"system_program",address:"11111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializeArgs"}}}]},{name:"remove_fee_token",discriminator:[46,96,240,63,28,173,62,131],accounts:[{name:"admin",writable:!0,signer:!0},{name:"fee_token_mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}],args:[]},{name:"set_admin",discriminator:[251,163,0,52,91,194,187,92],accounts:[{name:"admin",writable:!0,signer:!0},{name:"new_admin"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[]},{name:"set_bridge_program_id",discriminator:[59,191,249,155,146,73,202,139],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_cctp_bridge_program_id",discriminator:[164,36,75,241,35,30,47,159],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_cctp_v2_bridge_program_id",discriminator:[98,190,8,24,135,12,117,249],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_fee_token_price",discriminator:[116,201,189,21,190,10,242,241],accounts:[{name:"price_authority",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_mint"},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}}],args:[{name:"new_price",type:"u64"}]},{name:"set_price_authority",discriminator:[51,241,68,137,206,207,244,107],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_address",type:"pubkey"}]},{name:"swap_and_bridge",discriminator:[204,63,169,171,186,125,86,159],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"fee_token_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"user_fee_token_account",writable:!0},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"bridge"},{name:"bridge_token",writable:!0},{name:"messenger"},{name:"messenger_config",writable:!0},{name:"sent_message_account",writable:!0},{name:"messenger_gas_usage"},{name:"lock",writable:!0},{name:"bridge_config",writable:!0},{name:"other_bridge_token",writable:!0},{name:"pool",writable:!0},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"bridge_authority"},{name:"user_token_account",writable:!0},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"PayerSwapAndBridgeArgs"}}}]},{name:"swap_and_bridge_wormhole",discriminator:[41,91,201,180,150,117,154,65],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"fee_token_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"user_fee_token_account",writable:!0},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"bridge"},{name:"bridge_token",writable:!0},{name:"lock",writable:!0},{name:"bridge_config",writable:!0},{name:"other_bridge_token",writable:!0},{name:"pool",writable:!0},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token_account",writable:!0},{name:"bridge_authority"},{name:"wormhole_messenger"},{name:"wormhole_messenger_config",writable:!0},{name:"wormhole_program"},{name:"wormhole_bridge",writable:!0},{name:"message",writable:!0,signer:!0},{name:"sequence",writable:!0},{name:"fee_collector",writable:!0},{name:"messenger_gas_usage"},{name:"clock",address:"SysvarC1ock11111111111111111111111111111111"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"PayerSwapAndBridgeArgs"}}}]},{name:"upgrade_config",discriminator:[129,185,25,221,96,63,251,97],accounts:[{name:"payer",writable:!0,signer:!0},{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"withdraw_fee_token",discriminator:[131,103,89,216,53,78,255,118],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_mint"},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"admin_fee_token_account",writable:!0},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount",type:"u64"}]},{name:"withdraw_gas_token",discriminator:[109,117,140,223,117,175,2,139],accounts:[{name:"admin",signer:!0},{name:"recipient",writable:!0},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount",type:"u64"}]}],rA=[{name:"ChainBridge",discriminator:[25,216,147,218,140,42,98,49]},{name:"Config",discriminator:[155,12,170,224,30,250,204,130]},{name:"FeeTokenConfig",discriminator:[226,113,31,124,53,31,222,222]}],oA=[{name:"ExtraGasSentEvent",discriminator:[111,21,139,73,113,95,104,52]}],sA=[{code:6e3,name:"PayerFeeSlippage",msg:"Payer fee slippage"},{code:6001,name:"InvalidData",msg:"Invalid data"}],dA=[{name:"AddFeeTokenArgs",type:{kind:"struct",fields:[{name:"price",type:"u64"}]}},{name:"ChainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"}]}},{name:"Config",type:{kind:"struct",fields:[{name:"admin",type:"pubkey"},{name:"authority_bump_seed",type:"u8"},{name:"bridge_program_id",type:"pubkey"},{name:"cctp_bridge_program_id",type:"pubkey"},{name:"price_authority",type:"pubkey"},{name:"cctp_v2_bridge_program_id",type:"pubkey"}]}},{name:"ExtraGasSentEvent",type:{kind:"struct",fields:[{name:"fee_token_mint",type:"pubkey"},{name:"extra_gas_amount_in_fee_token",type:"u64"},{name:"extra_gas_amount_in_sol",type:"u64"},{name:"extra_gas_amount_in_usd",type:"u64"}]}},{name:"FeeTokenConfig",type:{kind:"struct",fields:[{name:"mint",type:"pubkey"},{name:"decimals",type:"u8"},{name:"price",type:"u64"},{name:"bump",type:"u8"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"bridge_program_id",type:"pubkey"},{name:"cctp_bridge_program_id",type:"pubkey"},{name:"cctp_v2_bridge_program_id",type:"pubkey"}]}},{name:"PayerCctpBridgeArgs",type:{kind:"struct",fields:[{name:"max_fee_amount",type:"u64"},{name:"extra_gas_amount_in_fee_token",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"PayerCctpV2BridgeArgs",type:{kind:"struct",fields:[{name:"max_fee_amount",type:"u64"},{name:"extra_gas_amount_in_fee_token",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"hook_data",type:{option:"bytes"}}]}},{name:"PayerSwapAndBridgeArgs",type:{kind:"struct",fields:[{name:"max_fee_amount",type:"u64"},{name:"extra_gas_amount_in_fee_token",type:"u64"},{name:"destination_chain_id",type:"u8"},{name:"recipient",type:{array:["u8",32]}},{name:"recipient_token",type:{array:["u8",32]}},{name:"vusd_amount",type:"u64"},{name:"nonce",type:{array:["u8",32]}}]}}],AA={address:nA,metadata:aA,instructions:iA,accounts:rA,events:oA,errors:sA,types:dA};import{StrKey as Wo}from"@stellar/stellar-sdk";function wo(o){if(!Wo.isValidContract(o))throw new w("Invalid Stellar contract");return I.from(Wo.decodeContract(o))}var lA=1e6,Da=class{constructor(a,i,r){this.solanaRpcUrl=a;this.params=i;this.api=r}solanaRpcUrl;params;api;chainType="SOLANA";async buildRawTransactionSend(a,i){switch(a.messenger){case 1:{let r=await this.prepareSwapAndBridgeAllbridgeData(a,i);return{tx:await this.buildSwapAndBridgeTx(r)}}case 2:{let r=await this.prepareSwapAndBridgeWormholeData(a,i);return await this.buildSwapAndBridgeWormholeTx(r)}case 3:{let r=await this.prepareBridgeCctpData(a,i);return this.buildBridgeCctpTx(r)}case 4:{let r=await this.prepareBridgeCctpData(a,i);return this.buildBridgeCctpV2Tx(r)}case 6:throw new w("Messenger xReserve is not supported yet.");case 5:throw new Ve("Messenger OFT is not supported yet.");default:return re(a.messenger,"Unhandled Messenger type")}}async prepareSwapAndBridgeBaseData(a,i){let{fromChainId:r,fromAccountAddress:s,fromTokenAddress:d,poolAddress:A,toAccountAddress:l,toTokenAddress:u,toChainId:b,fee:y,extraGas:C="0"}=i,f=new dt(s),v=Array.from(l),T=Array.from(u),F=new Mn(y),N=new Mn(C),G=st(this.solanaRpcUrl,s),R=this.getPayerProgram(a,G),P=new Fo({...Pt,address:a.sourceToken.bridgeAddress},G),V=new dt(A),S=await nt(P.programId),M=await P.account.config.fetch(S),x=new dt(d),oe=new dt(this.getAbrFeeTokenMintAddress(a)),se=Qe(f,x),Ae=Qe(f,oe),ae=await yt(b,M.gasOracleProgramId),ne=await yt(r,M.gasOracleProgramId);return{provider:G,payerProgram:R,bridgeProgram:P,userAccount:f,recipient:v,recipientToken:T,recipientChain:b,maxFeeAmount:F,extraGasAmountInFeeToken:N,mintAccount:x,feeTokenMintAccount:oe,userTokenAccount:se,userFeeTokenAccount:Ae,gasPriceAccount:ae,thisGasPriceAccount:ne,poolAccount:V,bridgeConfigAccount:S,bridgeConfigInfo:M}}getComputeUnitLimitInstruction(){return cA.ComputeBudgetProgram.setComputeUnitLimit({units:lA})}getPayerProgram(a,i){let r=a.sourceToken.abrPayer?.payerAddress;if(!r)throw new Zt("Payer with token not supported yet for ABR tokens");return new Fo({...sr,address:r},i)}getAbrFeeTokenMintAddress(a){let i=a.sourceToken.abrPayer?.abrToken.tokenAddress;if(!i)throw new Zt("Payer with token not supported yet for ABR tokens");return i}async prepareSwapAndBridgeCommonData(a,i){let{amount:r,toChainId:s,toTokenAddress:d}=i,{bridgeProgram:A,poolAccount:l,mintAccount:u}=a,b=await za(r,A,l),y=Array.from(mt()),C=await Ga(y,A.programId),f=A.programId,v=await Ot(s,f),T=await Xt(f),F=await Bt(u,f),N=await Xa(s,I.from(d),f);return{...a,vusdAmount:new Mn(b),nonce:y,lockAccount:C,chainBridgeAccount:v,bridgeProgramId:f,bridgeAuthorityAccount:T,bridgeTokenAccount:F,otherBridgeTokenAccount:N}}getWormholeProgramAddresses(a,i){let r=new dt(a),[s]=dt.findProgramAddressSync([I.from("Bridge")],r),[d]=dt.findProgramAddressSync([I.from("Sequence"),i.toBuffer()],r),[A]=dt.findProgramAddressSync([I.from("fee_collector")],r);return{wormholeBridgeAccount:s,wormholeSequenceAccount:d,wormholeFeeCollectorAccount:A}}async getWormholeFeeInstruction(a,i,r,s){let d=await a.connection.getAccountInfo(i);if(d==null)throw new w("Cannot fetch wormhole bridge account info");let A=new Mn(d.data.slice(16,24),"le").toString();return gA.transfer({fromPubkey:r,toPubkey:s,lamports:+A})}async prepareSwapAndBridgeAllbridgeData(a,i){let r=await this.prepareSwapAndBridgeBaseData(a,i),s=await this.prepareSwapAndBridgeCommonData(r,i),{recipient:d,recipientToken:A,recipientChain:l,bridgeConfigInfo:u}=r,{vusdAmount:b,nonce:y,bridgeAuthorityAccount:C}=s,{fromChainId:f,toChainId:v}=i,T=Oa({amount:b.toString(),recipient:I.from(d),nonce:I.from(y),receiveToken:I.from(A),destinationChainId:l,sourceChainId:f,chainBridge:C.toBuffer()}),F=u.allbridgeMessengerProgramId,N=await Pa(T,F),G=await nt(F),R=await dn(v,F);return{...s,sentMessageAccount:N,messengerProgramId:F,messengerConfigAccount:G,messengerGasUsageAccount:R}}async prepareSwapAndBridgeWormholeData(a,i){let r=await this.prepareSwapAndBridgeBaseData(a,i),s=await this.prepareSwapAndBridgeCommonData(r,i),{provider:d,userAccount:A,bridgeConfigInfo:l}=r,{bridgeAuthorityAccount:u}=s,{toChainId:b}=i,y=l.wormholeMessengerProgramId,C=await nt(y),f=await dn(b,y),v=this.params.wormholeMessengerProgramId;if(!v)throw new w("Do not use.");let{wormholeBridgeAccount:T,wormholeSequenceAccount:F,wormholeFeeCollectorAccount:N}=this.getWormholeProgramAddresses(v,u),G=No.generate(),R=await this.getWormholeFeeInstruction(d,T,A,N);return{...s,wormholeMessengerAccount:y,wormholeMessengerConfigAccount:C,wormholeProgramId:v,sequenceAccount:F,feeCollectorAccount:N,messengerGasUsageAccount:f,messageAccount:G,wormholeBridgeAccount:T,feeInstruction:R}}async prepareBridgeCctpData(a,i){let r=await this.prepareSwapAndBridgeBaseData(a,i),{mintAccount:s}=r,{amount:d,toChainId:A}=i,l=a.destinationToken.chainSymbol,u=this.params.cctpParams.cctpDomains[l],b,y,C,f,v;if(a.messenger===3)b=1,C=a.sourceToken.cctpAddress,f=this.params.cctpParams.cctpTransmitterProgramId,v=this.params.cctpParams.cctpTokenMessengerMinter;else if(a.messenger===4&&(b=2,C=a.sourceToken.cctpV2Address,f=this.params.cctpParams.cctpV2TransmitterProgramId,v=this.params.cctpParams.cctpV2TokenMessengerMinter,a.destinationToken.chainType==="SRB")){let ge=a.destinationToken.cctpV2Address;if(!ge)throw new We("Such route does not support CCTP V2 protocol");r.recipient=Array.from(wo(ge)),y=sn(a.toAccountAddress)}if(u==null||!f||!v)throw new w(`CCTP ${b} is not configured`);if(!C)throw new We(`Such route does not support CCTP ${b} protocol`);let T=new dt(C),F=b===1?await Sa(s,T):ka(s,T),N=await Ot(A,T),G=await Va(F,T),R=await Bt(s,T),P=new dt(f),V=new dt(v),{messageTransmitterAccount:S,tokenMessenger:M,tokenMessengerEventAuthority:x,tokenMinter:oe,localToken:se,remoteTokenMessengerKey:Ae,authorityPda:ae}=kn(u,s,P,V),ne=No.generate(),ce=La(T,ne.publicKey);return{...r,lockAccount:ce,messageSentEventDataKeypair:ne,amount:new Mn(d),hookData:y,chainBridgeAccount:N,cctpBridgeProgramId:T,cctpBridgeAuthorityAccount:G,cctpBridgeConfigAccount:F,cctpBridgeTokenAccount:R,cctpTokenMessengerMinter:V,cctpTransmitterProgramId:P,messageTransmitterAccount:S,tokenMessenger:M,tokenMessengerEventAuthority:x,tokenMinter:oe,localToken:se,remoteTokenMessengerKey:Ae,authorityPda:ae}}async buildSwapAndBridgeTx(a){let{provider:i,payerProgram:r,userAccount:s,vusdAmount:d,recipient:A,recipientChain:l,recipientToken:u,maxFeeAmount:b,extraGasAmountInFeeToken:y,nonce:C,lockAccount:f,chainBridgeAccount:v,bridgeProgramId:T,bridgeAuthorityAccount:F,bridgeTokenAccount:N,mintAccount:G,feeTokenMintAccount:R,userTokenAccount:P,userFeeTokenAccount:V,gasPriceAccount:S,thisGasPriceAccount:M,sentMessageAccount:x,messengerProgramId:oe,messengerConfigAccount:se,messengerGasUsageAccount:Ae,bridgeConfigAccount:ae,otherBridgeTokenAccount:ne,poolAccount:ce}=a,ge=await r.methods.swapAndBridge({vusdAmount:d,recipient:A,recipientToken:u,maxFeeAmount:b,extraGasAmountInFeeToken:y,nonce:C,destinationChainId:l}).accountsPartial({lock:f,chainBridge:v,bridge:T,bridgeAuthority:F,bridgeToken:N,mint:G,feeTokenMint:R,userTokenAccount:P,userFeeTokenAccount:V,gasPrice:S,thisGasPrice:M,sentMessageAccount:x,messenger:oe,messengerConfig:se,messengerGasUsage:Ae,bridgeConfig:ae,otherBridgeToken:ne,pool:ce}).preInstructions([this.getComputeUnitLimitInstruction()]).transaction();return await this.finalizeTransaction(ge,i,s)}async buildSwapAndBridgeWormholeTx(a){let{provider:i,payerProgram:r,userAccount:s,vusdAmount:d,recipient:A,recipientChain:l,recipientToken:u,maxFeeAmount:b,extraGasAmountInFeeToken:y,nonce:C,lockAccount:f,chainBridgeAccount:v,bridgeProgramId:T,bridgeAuthorityAccount:F,bridgeTokenAccount:N,mintAccount:G,feeTokenMintAccount:R,userTokenAccount:P,userFeeTokenAccount:V,gasPriceAccount:S,thisGasPriceAccount:M,messengerGasUsageAccount:x,bridgeConfigAccount:oe,otherBridgeTokenAccount:se,poolAccount:Ae,wormholeMessengerAccount:ae,wormholeMessengerConfigAccount:ne,wormholeProgramId:ce,sequenceAccount:ge,feeCollectorAccount:Be,messageAccount:be,wormholeBridgeAccount:Ce,feeInstruction:xe}=a,E=await r.methods.swapAndBridgeWormhole({vusdAmount:d,recipient:A,recipientToken:u,maxFeeAmount:b,extraGasAmountInFeeToken:y,nonce:C,destinationChainId:l}).accounts({lock:f,chainBridge:v,bridge:T,bridgeAuthority:F,bridgeToken:N,mint:G,feeTokenMint:R,userTokenAccount:P,userFeeTokenAccount:V,gasPrice:S,thisGasPrice:M,messengerGasUsage:x,bridgeConfig:oe,otherBridgeToken:se,pool:Ae,wormholeMessenger:ae,wormholeMessengerConfig:ne,wormholeProgram:ce,sequence:ge,feeCollector:Be,message:be.publicKey,wormholeBridge:Ce}).preInstructions([this.getComputeUnitLimitInstruction(),xe]).signers([be]).transaction();return{tx:await this.finalizeTransaction(E,i,s),requiredMessageSigner:be}}async buildBridgeCctpTx(a){let{provider:i,payerProgram:r,amount:s,recipient:d,recipientToken:A,userAccount:l,recipientChain:u,maxFeeAmount:b,extraGasAmountInFeeToken:y,lockAccount:C,mintAccount:f,feeTokenMintAccount:v,userTokenAccount:T,userFeeTokenAccount:F,gasPriceAccount:N,thisGasPriceAccount:G,chainBridgeAccount:R,cctpBridgeProgramId:P,cctpBridgeAuthorityAccount:V,cctpBridgeConfigAccount:S,cctpBridgeTokenAccount:M,cctpTokenMessengerMinter:x,cctpTransmitterProgramId:oe,messageTransmitterAccount:se,tokenMessenger:Ae,tokenMessengerEventAuthority:ae,tokenMinter:ne,localToken:ce,remoteTokenMessengerKey:ge,authorityPda:Be,messageSentEventDataKeypair:be}=a,Ce=await r.methods.bridgeCctp({amount:s,recipient:d,receiveToken:A,destinationChainId:u,maxFeeAmount:b,extraGasAmountInFeeToken:y}).accounts({lock:C,messageSentEventData:be.publicKey,mint:f,feeTokenMint:v,userFeeTokenAccount:F,bridgeToken:M,cctpBridge:P,cctpBridgeConfig:S,cctpMessenger:x,messageTransmitterProgram:oe,messageTransmitterAccount:se,tokenMessenger:Ae,tokenMinter:ne,localToken:ce,remoteTokenMessengerKey:ge,authorityPda:Be,eventAuthority:ae,gasPrice:N,thisGasPrice:G,chainBridge:R,bridgeAuthority:V,userTokenAccount:T}).preInstructions([this.getComputeUnitLimitInstruction()]).transaction();return{tx:await this.finalizeTransaction(Ce,i,l),requiredMessageSigner:be}}async buildBridgeCctpV2Tx(a){let{provider:i,payerProgram:r,amount:s,recipient:d,recipientToken:A,hookData:l,userAccount:u,recipientChain:b,maxFeeAmount:y,extraGasAmountInFeeToken:C,lockAccount:f,mintAccount:v,feeTokenMintAccount:T,userTokenAccount:F,userFeeTokenAccount:N,gasPriceAccount:G,thisGasPriceAccount:R,chainBridgeAccount:P,cctpBridgeProgramId:V,cctpBridgeAuthorityAccount:S,cctpBridgeConfigAccount:M,cctpBridgeTokenAccount:x,cctpTokenMessengerMinter:oe,cctpTransmitterProgramId:se,messageTransmitterAccount:Ae,tokenMessenger:ae,tokenMessengerEventAuthority:ne,tokenMinter:ce,localToken:ge,remoteTokenMessengerKey:Be,authorityPda:be,messageSentEventDataKeypair:Ce}=a,xe=await r.methods.bridgeCctpV2({amount:s,recipient:d,receiveToken:A,destinationChainId:b,maxFeeAmount:y,extraGasAmountInFeeToken:C,hookData:l??null}).accounts({mint:v,feeTokenMint:T,userFeeTokenAccount:N,bridgeToken:x,cctpBridge:V,tokenMessengerMinterProgram:oe,messageTransmitterProgram:se,messageTransmitterAccount:Ae,tokenMessenger:ae,tokenMinter:ce,localToken:ge,remoteTokenMessenger:Be,authorityPda:be,eventAuthority:ne,messageSentEventData:Ce.publicKey,lock:f,cctpBridgeConfig:M,gasPrice:G,thisGasPrice:R,chainBridge:P,bridgeAuthority:S,userTokenAccount:F}).preInstructions([this.getComputeUnitLimitInstruction()]).transaction();return{tx:await this.finalizeTransaction(xe,i,u),requiredMessageSigner:Ce}}async finalizeTransaction(a,i,r){let s=i.connection;return a.recentBlockhash=(await s.getLatestBlockhash()).blockhash,a.feePayer=r,await St(a,s,this.params.solanaLookUpTable)}};var Ea=class extends Xe{constructor(i,r,s){super();this.solanaRpcUrl=i;this.params=r;this.api=s;this.connection=new pA(i),this.jupiterService=new Ka(s,r.jupiterParams),this.bridgeTxService=new Ua(i,r,s),this.payerWithTokenService=new Da(i,r,s)}solanaRpcUrl;params;api;chainType="SOLANA";connection;jupiterService;bridgeTxService;payerWithTokenService;async buildRawTransactionSwap(i){return this.bridgeTxService.buildRawTransactionSwap(i)}async buildRawTransactionSend(i){let r=await Oe(this.chainType,i,this.api),s=this.addPoolAddress(i,r),d=i.gasFeePaymentMethod??"native",A,l;switch(d){case"native":{let u=await this.buildTxWithNativePayment(i,s);A=u.tx,l=u.requiredMessageSigner;break}case"stablecoin":{let u=await this.buildTxWithStablePayment(i,s);A=u.tx,l=u.requiredMessageSigner;break}case"abr":{let u=await this.buildTxWithAbrPayment(i,s);A=u.tx,l=u.requiredMessageSigner;break}default:return re(d,"Unhandled FeePaymentMethod")}return await ho(A,i.txFeeParams,this.solanaRpcUrl),l&&A.sign([l]),A}async buildTxWithNativePayment(i,r){return await this.bridgeTxService.buildRawTransactionSend(i,r)}async buildTxWithStablePayment(i,r){let{jupTx:s,solTxSendParams:d}=await this.jupiterService.buildJupAndUpdateTxSendParams(i,r),{tx:A,requiredMessageSigner:l}=await this.bridgeTxService.buildRawTransactionSend(i,d);if(!s)throw new Ge("Swap tx is absent");return{tx:await To(this.connection,s,A),requiredMessageSigner:l}}async buildTxWithAbrPayment(i,r){return this.payerWithTokenService.buildRawTransactionSend(i,r)}send(i){throw new K}addPoolAddress(i,r){return{...r,poolAddress:i.sourceToken.poolAddress}}};import{Address as dr,contract as TX}from"@stellar/stellar-sdk";import{Big as vA}from"big.js";import{contract as n}from"@stellar/stellar-sdk";var uA=n.Spec,mA=n.Client;var xn=class extends mA{constructor(i){super(new uA(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAgAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==","AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD","AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAEAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),i);this.options=i}options;fromJSON={initialize:this.txFromJSON,swap_and_bridge:this.txFromJSON,receive_tokens:this.txFromJSON,swap:this.txFromJSON,stop_swap:this.txFromJSON,start_swap:this.txFromJSON,set_gas_oracle:this.txFromJSON,set_stop_authority:this.txFromJSON,set_rebalancer:this.txFromJSON,set_messenger:this.txFromJSON,set_gas_usage:this.txFromJSON,register_bridge:this.txFromJSON,add_bridge_token:this.txFromJSON,remove_bridge_token:this.txFromJSON,add_pool:this.txFromJSON,withdraw_gas_tokens:this.txFromJSON,withdraw_bridging_fee_in_tokens:this.txFromJSON,has_processed_message:this.txFromJSON,has_received_message:this.txFromJSON,get_pool_address:this.txFromJSON,get_config:this.txFromJSON,get_stop_authority:this.txFromJSON,get_transaction_cost:this.txFromJSON,get_gas_usage:this.txFromJSON,get_admin:this.txFromJSON,get_gas_oracle:this.txFromJSON,get_another_bridge:this.txFromJSON,set_admin:this.txFromJSON,upgrade:this.txFromJSON}};var Ue={};Fn(Ue,{Client:()=>Hn,Errors:()=>CA,contract:()=>IA,networks:()=>yA,rpc:()=>hA});$e(Ue,II);import{Client as Zo,Spec as bA}from"@stellar/stellar-sdk/contract";import*as II from"@stellar/stellar-sdk";import*as IA from"@stellar/stellar-sdk/contract";import*as hA from"@stellar/stellar-sdk/rpc";typeof window<"u"&&(window.Buffer=window.Buffer||I);var yA={testnet:{networkPassphrase:"Test SDF Network ; September 2015",contractId:"CAYUCAP2ORC5PSASKC63MQGMB6X62YXDADCSPDBZNHHHG33GKNZUYROB"}},CA={0:{message:"Unimplemented"},1:{message:"Initialized"},2:{message:"Uninitialized"},3:{message:"Unauthorized"},4:{message:"InvalidArg"},5:{message:"InvalidChainId"},6:{message:"InvalidOtherChainId"},7:{message:"GasUsageNotSet"},8:{message:"BrokenAddress"},9:{message:"NotFound"},10:{message:"TokenInsufficientBalance"},11:{message:"CastFailed"},12:{message:"U256Overflow"},103:{message:"ZeroAmount"},104:{message:"PoolOverflow"},105:{message:"ZeroChanges"},106:{message:"ReservesExhausted"},107:{message:"InsufficientReceivedAmount"},108:{message:"BalanceRatioExceeded"},109:{message:"Forbidden"},203:{message:"UnauthorizedStopAuthority"},204:{message:"SwapProhibited"},205:{message:"AmountTooLowForFee"},206:{message:"BridgeToTheZeroAddress"},207:{message:"EmptyRecipient"},208:{message:"SourceNotRegistered"},209:{message:"WrongDestinationChain"},210:{message:"UnknownAnotherChain"},211:{message:"TokensAlreadySent"},212:{message:"MessageProcessed"},214:{message:"NotEnoughFee"},215:{message:"NoMessage"},216:{message:"NoReceivePool"},217:{message:"NoPool"},218:{message:"UnknownAnotherToken"},300:{message:"WrongByteLength"},301:{message:"HasMessage"},302:{message:"InvalidPrimarySignature"},303:{message:"InvalidSecondarySignature"},400:{message:"NoGasDataForChain"}},Hn=class extends Zo{constructor(i){super(new bA(["AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAACWFkbWluX2ZlZQAAAAAAAAoAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAlyZWNpcGllbnQAAAAAAAPuAAAAIAAAAAAAAAAGc2VuZGVyAAAAAAAT","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAGAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAAAAAAD2V4dHJhX2dhc192YWx1ZQAAAAAKAAAAAAAAAAptZXNzYWdlX2lkAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAAScmVjaXBpZW50X211eGVkX2lkAAAAAAPoAAAABgAAAAAAAAAPc291cmNlX2NoYWluX2lkAAAAAAQ=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAAC0NoYWluQnJpZGdlAAAAAAQAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAGZG9tYWluAAAAAAAEAAAAAAAAAAlnYXNfdXNhZ2UAAAAAAAAKAAAAAAAAAAxvdGhlcl9icmlkZ2UAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABkNvbmZpZwAAAAAACwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAYAAAAAAAAAHmJyaWRnaW5nX2ZlZV9jb252ZXJzaW9uX2ZhY3RvcgAAAAAACgAAAAAAAAAKZ2FzX29yYWNsZQAAAAAAEwAAAAAAAAANbWF4X2ZlZV9zaGFyZQAAAAAAAAsAAAAAAAAAE21lc3NhZ2VfdHJhbnNtaXR0ZXIAAAAAEwAAAAAAAAAWbWluX2ZpbmFsaXR5X3RocmVzaG9sZAAAAAAABAAAAAAAAAAMbmF0aXZlX3Rva2VuAAAAEwAAAAAAAAAOb3V0Ym91bmRfbm9uY2UAAAAAAAoAAAAAAAAAFnRva2VuX21lc3Nlbmdlcl9taW50ZXIAAAAAABMAAAAAAAAACnVzZGNfdG9rZW4AAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAAAAAAAAAAABkNvbmZpZwAAAAAAAQAAAAAAAAALQ2hhaW5CcmlkZ2UAAAAAAQAAAAQAAAABAAAAAAAAAAZEb21haW4AAAAAAAEAAAAE","AAAAAAAAAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAGYnJpZGdlAAAAAAAGAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACAAAAAAAAAAFGRlc3RpbmF0aW9uX2NoYWluX2lkAAAABAAAAAAAAAAKZ2FzX2Ftb3VudAAAAAAACgAAAAAAAAAQZmVlX3Rva2VuX2Ftb3VudAAAAAoAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAAAAAAAAKZ2FzX29yYWNsZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAACgAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAp1c2RjX3Rva2VuAAAAAAATAAAAAAAAABZ0b2tlbl9tZXNzZW5nZXJfbWludGVyAAAAAAATAAAAAAAAABNtZXNzYWdlX3RyYW5zbWl0dGVyAAAAABMAAAAAAAAACmdhc19vcmFjbGUAAAAAABMAAAAAAAAADG5hdGl2ZV90b2tlbgAAABMAAAAAAAAAFm1pbl9maW5hbGl0eV90aHJlc2hvbGQAAAAAAAQAAAAAAAAADW1heF9mZWVfc2hhcmUAAAAAAAALAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAYAAAAAAAAAHmJyaWRnaW5nX2ZlZV9jb252ZXJzaW9uX2ZhY3RvcgAAAAAACgAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAAAAAAAAKdXNkY190b2tlbgAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAMbmF0aXZlX3Rva2VuAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAANbWF4X2ZlZV9zaGFyZQAAAAAAAAAAAAABAAAD6QAAAAsAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAUAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAKbWVzc2FnZV9pZAAAAAAD7gAAACAAAAAAAAAAB21lc3NhZ2UAAAAADgAAAAAAAAALYXR0ZXN0YXRpb24AAAAADgAAAAAAAAAQZXh0cmFfZ2FzX2Ftb3VudAAAAAoAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAACmdhc19vcmFjbGUAAAAAABMAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAAAAAAAQZ2V0X2NoYWluX2JyaWRnZQAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAH0AAAAAtDaGFpbkJyaWRnZQAAAAAD","AAAAAAAAAAAAAAARc2V0X21heF9mZWVfc2hhcmUAAAAAAAABAAAAAAAAAAV2YWx1ZQAAAAAAAAsAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAAAAAAAQAAA+kAAAAGAAAAAw==","AAAAAAAAAAAAAAASbmF0aXZlX2ZlZV9iYWxhbmNlAAAAAAAAAAAAAQAAA+kAAAALAAAAAw==","AAAAAAAAAAAAAAATbWVzc2FnZV90cmFuc21pdHRlcgAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAYAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAAAAAAATdXBkYXRlX2NoYWluX2JyaWRnZQAAAAAEAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAACWdhc191c2FnZQAAAAAAAAoAAAAAAAAABmRvbWFpbgAAAAAABAAAAAAAAAAMb3RoZXJfYnJpZGdlAAAD7gAAACAAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAVcmVnaXN0ZXJfY2hhaW5fYnJpZGdlAAAAAAAABAAAAAAAAAAIY2hhaW5faWQAAAAEAAAAAAAAAAlnYXNfdXNhZ2UAAAAAAAAKAAAAAAAAAAZkb21haW4AAAAAAAQAAAAAAAAADG90aGVyX2JyaWRnZQAAA+4AAAAgAAAAAQAAA+kAAAACAAAAAw==","AAAAAAAAAAAAAAAWYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAAAAQAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAABMAAAABAAAACw==","AAAAAAAAAAAAAAAWZ2V0X2RvbWFpbl9ieV9jaGFpbl9pZAAAAAAAAQAAAAAAAAAIY2hhaW5faWQAAAAEAAAAAQAAA+kAAAAEAAAAAw==","AAAAAAAAAAAAAAAWbWluX2ZpbmFsaXR5X3RocmVzaG9sZAAAAAAAAAAAAAEAAAPpAAAABAAAAAM=","AAAAAAAAAAAAAAAWdG9rZW5fbWVzc2VuZ2VyX21pbnRlcgAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAXc2V0X21lc3NhZ2VfdHJhbnNtaXR0ZXIAAAAAAQAAAAAAAAATbWVzc2FnZV90cmFuc21pdHRlcgAAAAATAAAAAQAAA+kAAAACAAAAAw==","AAAAAAAAAAAAAAAZc2V0X2ZlZV9jb252ZXJzaW9uX2ZhY3RvcgAAAAAAAAEAAAAAAAAABXZhbHVlAAAAAAAACgAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAAAAAAAAac2V0X21pbl9maW5hbGl0eV90aHJlc2hvbGQAAAAAAAEAAAAAAAAABXZhbHVlAAAAAAAABAAAAAEAAAPpAAAAAgAAAAM=","AAAAAAAAAAAAAAAac2V0X3Rva2VuX21lc3Nlbmdlcl9taW50ZXIAAAAAAAEAAAAAAAAAFnRva2VuX21lc3Nlbmdlcl9taW50ZXIAAAAAABMAAAABAAAD6QAAAAIAAAAD","AAAAAAAAAAAAAAAbZ2V0X2JyaWRnaW5nX2Nvc3RfaW5fdG9rZW5zAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAAAAAAAAQAAA+kAAAAKAAAAAw==","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAACAAAAAw==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),i);this.options=i}options;static async deploy(i){return Zo.deploy(null,i)}fromJSON={admin:this.txFromJSON,bridge:this.txFromJSON,upgrade:this.txFromJSON,set_admin:this.txFromJSON,gas_oracle:this.txFromJSON,initialize:this.txFromJSON,usdc_token:this.txFromJSON,native_token:this.txFromJSON,max_fee_share:this.txFromJSON,receive_tokens:this.txFromJSON,set_gas_oracle:this.txFromJSON,get_chain_bridge:this.txFromJSON,set_max_fee_share:this.txFromJSON,admin_fee_share_bp:this.txFromJSON,native_fee_balance:this.txFromJSON,message_transmitter:this.txFromJSON,set_admin_fee_share:this.txFromJSON,update_chain_bridge:this.txFromJSON,withdraw_gas_tokens:this.txFromJSON,get_transaction_cost:this.txFromJSON,register_chain_bridge:this.txFromJSON,bridging_fee_in_tokens:this.txFromJSON,get_domain_by_chain_id:this.txFromJSON,min_finality_threshold:this.txFromJSON,token_messenger_minter:this.txFromJSON,set_message_transmitter:this.txFromJSON,set_fee_conversion_factor:this.txFromJSON,set_min_finality_threshold:this.txFromJSON,set_token_messenger_minter:this.txFromJSON,get_bridging_cost_in_tokens:this.txFromJSON,bridging_fee_conversion_factor:this.txFromJSON,withdraw_bridging_fee_in_tokens:this.txFromJSON}};import{contract as vI,rpc as Vo}from"@stellar/stellar-sdk";var Xo=Vo.Api,Go=100;async function Po(o,a){try{let s=(await new Vo.Server(o).getFeeStats())[a],d=[Number(s.p90)*2,Number(s.mode)].filter(A=>Number.isFinite(A)&&A>0);return Math.ceil(Math.max(...d,Go))}catch{return Go}}function Yt(o){return Po(o,"sorobanInclusionFee")}function So(o){return Po(o,"inclusionFee")}function pn(o){let{simulation:a,options:i}=o;if(!a)throw new Error("Soroban assembled transaction does not have simulation");if(Xo.isSimulationSuccess(a))return a.result==null?void 0:i.parseResultXdr(a.result.retval);throw new Error(a.error)}function un(o){let{simulation:a}=o;if(!a)throw new Error("Soroban assembled transaction does not have simulation");return Xo.isSimulationError(a)}var _a=class extends Xe{constructor(i,r,s){super();this.nodeRpcUrlsConfig=i;this.params=r;this.api=s}nodeRpcUrlsConfig;params;api;chainType="SRB";async buildRawTransactionSend(i){let r=await Oe(this.chainType,i,this.api);return await this.buildRawTransactionSendFromParams(r,i)}async buildRawTransactionSendFromParams(i,r){let{amount:s,contractAddress:d,fromAccountAddress:A,fromTokenAddress:l,toChainId:u,toAccountAddress:b,toTokenAddress:y,fee:C,gasFeePaymentMethod:f,extraGas:v}=i,T=C;v&&(T=vA(T).plus(v).toFixed());let F=await Yt(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB"));if(i.messenger===4){let R=this.getContract(Hn,d,A),P=r?.destinationToken.chainType==="SOLANA"?await An(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL")):b;if(f==="abr")throw new w("SRB CCTPv2 bridge does not support ABR payment method");let V;switch(f){case"native":V={gas_amount:BigInt(T),fee_token_amount:0n};break;case"stablecoin":V={gas_amount:0n,fee_token_amount:BigInt(T)};break;default:return re(f,"Unhandled FeePaymentMethod")}return(await R.bridge({sender:A,amount:BigInt(s),recipient:I.from(P),destination_chain_id:+u,...V},{fee:F})).toXDR()}let N=this.getContract(xn,d,A),G;switch(f){case"native":G=await N.swap_and_bridge({sender:A,token:dr.contract(I.from(l)).toString(),amount:BigInt(s),recipient:I.from(b),destination_chain_id:+u,receive_token:I.from(y),nonce:bt(),gas_amount:BigInt(T),fee_token_amount:BigInt(0)},{fee:F});break;case"stablecoin":G=await N.swap_and_bridge({sender:A,token:dr.contract(I.from(l)).toString(),amount:BigInt(s),recipient:I.from(b),destination_chain_id:+u,receive_token:I.from(y),nonce:bt(),gas_amount:BigInt(0),fee_token_amount:BigInt(T)},{fee:F});break;case"abr":throw new w("SRB bridge does not support ABR payment method");default:return re(f,"Unhandled FeePaymentMethod")}return G.toXDR()}async buildRawTransactionSwap(i){let r=Ke(this.chainType,i);return await this.buildRawTransactionSwapFromParams(r)}async buildRawTransactionSwapFromParams(i){let{amount:r,contractAddress:s,fromAccountAddress:d,fromTokenAddress:A,toAccountAddress:l,toTokenAddress:u,minimumReceiveAmount:b}=i,y=this.getContract(xn,s,d),C=await Yt(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB"));return(await y.swap({sender:d,amount:BigInt(r),token:dr.contract(I.from(A)).toBuffer(),receive_token:I.from(u),recipient:l,receive_amount_min:BigInt(b)},{fee:C})).toXDR()}send(i){throw new K}getContract(i,r,s){let d={publicKey:s,contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new i(d)}};import{ClarigenClient as RA,contractFactory as cr}from"@clarigen/core";import{createNetwork as TA}from"@stacks/network";import{makeRandomPrivKey as ko,makeUnsignedContractCall as Lo,parseContractId as BA,PostConditionMode as Mo,privateKeyToPublic as xo}from"@stacks/transactions";var at={bridge:{functions:{assertCanSwap:{name:"assert-can-swap",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertGasOracle:{name:"assert-gas-oracle",access:"private",args:[{name:"gas-oracle-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertMessenger:{name:"assert-messenger",access:"private",args:[{name:"messenger-ref",type:"trait_reference"},{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},convertBridgingFeeInTokensToNative:{name:"convert-bridging-fee-in-tokens-to-native",access:"private",args:[{name:"ft-ref",type:"trait_reference"},{name:"gas-oracle-ref",type:"trait_reference"},{name:"fee-token-amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyStopAuthority:{name:"only-stop-authority",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},receiveAndSwapFromVusd:{name:"receive-and-swap-from-vusd",access:"private",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"recipient",type:"principal"},{name:"vusd-amount",type:"uint128"},{name:"receive-amount-min",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},sendAndSwapToVusd:{name:"send-and-swap-to-vusd",access:"private",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"user",type:"principal"},{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},sendTokens:{name:"send-tokens",access:"private",args:[{name:"messenger-ref",type:"trait_reference"},{name:"gas-oracle-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"destination-chain-id",type:"uint128"},{name:"receive-token",type:{buffer:{length:32}}},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"},{name:"bridging-fee",type:"uint128"}],outputs:{type:{response:{ok:{tuple:[{name:"bridge-tx-cost",type:"uint128"},{name:"message-tx-cost",type:"uint128"}]},error:"uint128"}}}},addBridgeToken:{name:"add-bridge-token",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},addPool:{name:"add-pool",access:"public",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getTransactionCost:{name:"get-transaction-cost",access:"public",args:[{name:"gas-oracle-ref",type:"trait_reference"},{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},init:{name:"init",access:"public",args:[{name:"this-chain-id_",type:"uint128"},{name:"gas-oracle",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},receiveTokens:{name:"receive-tokens",access:"public",args:[{name:"messenger-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:"principal"},{name:"source-chain-id",type:"uint128"},{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"},{name:"receive-amount-min",type:"uint128"},{name:"extra-gas",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},registerBridge:{name:"register-bridge",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"bridge-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeBridge:{name:"remove-bridge",access:"public",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeBridgeToken:{name:"remove-bridge-token",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeMessenger:{name:"remove-messenger",access:"public",args:[{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setGasUsage:{name:"set-gas-usage",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"gas",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setMessenger:{name:"set-messenger",access:"public",args:[{name:"messenger-id",type:"uint128"},{name:"new-messenger",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOwner:{name:"set-owner",access:"public",args:[{name:"new-owner",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setRebalancer:{name:"set-rebalancer",access:"public",args:[{name:"new-rebalancer",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setStopAuthority:{name:"set-stop-authority",access:"public",args:[{name:"new-authority",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startSwap:{name:"start-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopSwap:{name:"stop-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},swap:{name:"swap",access:"public",args:[{name:"amount",type:"uint128"},{name:"send-pool-ref",type:"trait_reference"},{name:"send-ft-ref",type:"trait_reference"},{name:"receive-pool-ref",type:"trait_reference"},{name:"receive-ft-ref",type:"trait_reference"},{name:"recipient",type:"principal"},{name:"receive-amount-min",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},swapAndBridge:{name:"swap-and-bridge",access:"public",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"messenger-ref",type:"trait_reference"},{name:"gas-oracle-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"destination-chain-id",type:"uint128"},{name:"receive-token",type:{buffer:{length:32}}},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"},{name:"fee-native-amount",type:"uint128"},{name:"fee-token-amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawBridgingFeeInTokens:{name:"withdraw-bridging-fee-in-tokens",access:"public",args:[{name:"ft-ref",type:"trait_reference"},{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawGasTokens:{name:"withdraw-gas-tokens",access:"public",args:[{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getGasOracleAddress:{name:"get-gas-oracle-address",access:"read_only",args:[],outputs:{type:"principal"}},getGasUsage:{name:"get-gas-usage",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getMessenger:{name:"get-messenger",access:"read_only",args:[{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:"principal",error:"uint128"}}}},getOtherBridge:{name:"get-other-bridge",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:{buffer:{length:32}},error:"uint128"}}}},getOwner:{name:"get-owner",access:"read_only",args:[],outputs:{type:"principal"}},getProcessedMessageStatus:{name:"get-processed-message-status",access:"read_only",args:[{name:"message-hash",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}},getRebalancer:{name:"get-rebalancer",access:"read_only",args:[],outputs:{type:"principal"}},getSentMessageStatus:{name:"get-sent-message-status",access:"read_only",args:[{name:"message-hash",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}},getStopAuthority:{name:"get-stop-authority",access:"read_only",args:[],outputs:{type:"principal"}},getThisChainId:{name:"get-this-chain-id",access:"read_only",args:[],outputs:{type:"uint128"}},getTokenInfo:{name:"get-token-info",access:"read_only",args:[{name:"token-principal-hash",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:{tuple:[{name:"bridging-fee-conversion-scaling-factor",type:"uint128"},{name:"from-gas-oracle-scaling-factor",type:"uint128"},{name:"pool",type:"principal"},{name:"token",type:"principal"}]},error:"uint128"}}}},isBridgeTokenSupported:{name:"is-bridge-token-supported",access:"read_only",args:[{name:"chain-id_",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}},isSwapEnabled:{name:"is-swap-enabled",access:"read_only",args:[],outputs:{type:"bool"}}},maps:{gasUsageMap:{name:"gas-usage-map",key:"uint128",value:"uint128"},messengers:{name:"messengers",key:"uint128",value:"principal"},otherBridgeTokens:{name:"other-bridge-tokens",key:{tuple:[{name:"chain-id",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}]},value:"bool"},otherBridges:{name:"other-bridges",key:"uint128",value:{buffer:{length:32}}},processedMessages:{name:"processed-messages",key:{buffer:{length:32}},value:"bool"},sentMessages:{name:"sent-messages",key:{buffer:{length:32}},value:"bool"},tokenInfos:{name:"token-infos",key:{buffer:{length:32}},value:{tuple:[{name:"bridging-fee-conversion-scaling-factor",type:"uint128"},{name:"from-gas-oracle-scaling-factor",type:"uint128"},{name:"pool",type:"principal"},{name:"token",type:"principal"}]}}},variables:{chainPrecision:{name:"chain-precision",type:"uint128",access:"constant"},errAlreadyInitialized:{name:"err-already-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errAlreadyProcessed:{name:"err-already-processed",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errAlreadySent:{name:"err-already-sent",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errBridgeSourceNotRegistered:{name:"err-bridge-source-not-registered",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errDepositAmountTooSmall:{name:"err-deposit-amount-too-small",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errGasUsageNotSet:{name:"err-gas-usage-not-set",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errMessengerNotRegistered:{name:"err-messenger-not-registered",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNoMessage:{name:"err-no-message",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotEnoughFee:{name:"err-not-enough-fee",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errSwapProhibited:{name:"err-swap-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errTokenNotSupported:{name:"err-token-not-supported",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongGasOracle:{name:"err-wrong-gas-oracle",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongMessenger:{name:"err-wrong-messenger",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongTokenForPool:{name:"err-wrong-token-for-pool",type:{response:{ok:"none",error:"uint128"}},access:"constant"},oraclePrecision:{name:"oracle-precision",type:"uint128",access:"constant"},canSwap:{name:"can-swap",type:"bool",access:"variable"},gasOraclePrincipal:{name:"gas-oracle-principal",type:{optional:"principal"},access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},rebalancer:{name:"rebalancer",type:"principal",access:"variable"},stopAuthority:{name:"stop-authority",type:"principal",access:"variable"},thisChainId:{name:"this-chain-id",type:{optional:"uint128"},access:"variable"}},constants:{canSwap:!1,chainPrecision:6n,errAlreadyInitialized:{isOk:!1,value:1004n},errAlreadyProcessed:{isOk:!1,value:1010n},errAlreadySent:{isOk:!1,value:1005n},errBridgeSourceNotRegistered:{isOk:!1,value:1009n},errDepositAmountTooSmall:{isOk:!1,value:1001n},errGasUsageNotSet:{isOk:!1,value:1008n},errMessengerNotRegistered:{isOk:!1,value:1014n},errNoMessage:{isOk:!1,value:1011n},errNotEnoughFee:{isOk:!1,value:1007n},errNotInitialized:{isOk:!1,value:1006n},errSwapProhibited:{isOk:!1,value:1012n},errTokenNotSupported:{isOk:!1,value:1002n},errUnauthorized:{isOk:!1,value:1000n},errWrongGasOracle:{isOk:!1,value:1013n},errWrongMessenger:{isOk:!1,value:1015n},errWrongTokenForPool:{isOk:!1,value:1003n},gasOraclePrincipal:null,oraclePrecision:18n,owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",rebalancer:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",stopAuthority:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",thisChainId:null},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"bridge"},ftToken:{functions:{getTokenUri:{name:"get-token-uri",access:"public",args:[],outputs:{type:{response:{ok:{optional:{"string-utf8":{length:19}}},error:"none"}}}},mint:{name:"mint",access:"public",args:[{name:"amount",type:"uint128"},{name:"recipient",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},transfer:{name:"transfer",access:"public",args:[{name:"amount",type:"uint128"},{name:"sender",type:"principal"},{name:"recipient",type:"principal"},{name:"memo",type:{optional:{buffer:{length:34}}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getBalance:{name:"get-balance",access:"read_only",args:[{name:"owner",type:"principal"}],outputs:{type:{response:{ok:"uint128",error:"none"}}}},getDecimals:{name:"get-decimals",access:"read_only",args:[],outputs:{type:{response:{ok:"uint128",error:"none"}}}},getName:{name:"get-name",access:"read_only",args:[],outputs:{type:{response:{ok:{"string-ascii":{length:13}},error:"none"}}}},getSymbol:{name:"get-symbol",access:"read_only",args:[],outputs:{type:{response:{ok:{"string-ascii":{length:7}},error:"none"}}}},getTotalSupply:{name:"get-total-supply",access:"read_only",args:[],outputs:{type:{response:{ok:"uint128",error:"none"}}}}},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[{name:"example-token"}],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"ft-token"},gasOracle:{functions:{setChainData:{name:"set-chain-data",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"new-price",type:"uint128"},{name:"new-gas-price",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setGasPrice:{name:"set-gas-price",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"new-gas-price",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setPrice:{name:"set-price",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"new-price",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},crossRate:{name:"cross-rate",access:"read_only",args:[{name:"other-chain-id",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getChainData:{name:"get-chain-data",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:{tuple:[{name:"gas-price",type:"uint128"},{name:"price",type:"uint128"}]},error:"uint128"}}}},getGasPrice:{name:"get-gas-price",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getPrice:{name:"get-price",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getTransactionGasCostInNativeToken:{name:"get-transaction-gas-cost-in-native-token",access:"read_only",args:[{name:"other-chain-id",type:"uint128"},{name:"gas-amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getTransactionGasCostInUsd:{name:"get-transaction-gas-cost-in-usd",access:"read_only",args:[{name:"other-chain-id",type:"uint128"},{name:"gas-amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}}},maps:{chainData:{name:"chain-data",key:"uint128",value:{tuple:[{name:"gas-price",type:"uint128"},{name:"price",type:"uint128"}]}}},variables:{errNotFound:{name:"err-not-found",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},oracleScalingFactor:{name:"oracle-scaling-factor",type:"uint128",access:"constant"},contractOwner:{name:"contract-owner",type:"principal",access:"variable"},fromOracleToChainScalingFactor:{name:"from-oracle-to-chain-scaling-factor",type:"uint128",access:"variable"},thisChainId:{name:"this-chain-id",type:"uint128",access:"variable"}},constants:{contractOwner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",errNotFound:{isOk:!1,value:4001n},errUnauthorized:{isOk:!1,value:4000n},fromOracleToChainScalingFactor:1000000000000n,oracleScalingFactor:1000000000000000000n,thisChainId:16n},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"gas-oracle"},gasOracleTrait:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"gas-oracle-trait"},messenger:{functions:{assertGasOracle:{name:"assert-gas-oracle",access:"private",args:[{name:"gas-oracle-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},addSecondaryValidator:{name:"add-secondary-validator",access:"public",args:[{name:"val",type:{buffer:{length:33}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getTransactionCost:{name:"get-transaction-cost",access:"public",args:[{name:"gas-oracle-ref",type:"trait_reference"},{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},init:{name:"init",access:"public",args:[{name:"this-chain-id_",type:"uint128"},{name:"gas-oracle",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},receiveMessage:{name:"receive-message",access:"public",args:[{name:"message",type:{buffer:{length:32}}},{name:"signature1",type:{buffer:{length:65}}},{name:"signature2",type:{buffer:{length:65}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeSecondaryValidator:{name:"remove-secondary-validator",access:"public",args:[{name:"val",type:{buffer:{length:33}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},sendMessage:{name:"send-message",access:"public",args:[{name:"gas-oracle-ref",type:"trait_reference"},{name:"message",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},setGasUsage:{name:"set-gas-usage",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"gas",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOtherChainIds:{name:"set-other-chain-ids",access:"public",args:[{name:"value",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setPrimaryValidator:{name:"set-primary-validator",access:"public",args:[{name:"val",type:{buffer:{length:33}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawGasTokens:{name:"withdraw-gas-tokens",access:"public",args:[{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getGasOracle:{name:"get-gas-oracle",access:"read_only",args:[],outputs:{type:{response:{ok:"principal",error:"uint128"}}}},getGasUsage:{name:"get-gas-usage",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getOtherChainIds:{name:"get-other-chain-ids",access:"read_only",args:[],outputs:{type:{response:{ok:{buffer:{length:32}},error:"none"}}}},getSentMessageBlock:{name:"get-sent-message-block",access:"read_only",args:[{name:"message",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getThisChainId:{name:"get-this-chain-id",access:"read_only",args:[],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},isMessageReceived:{name:"is-message-received",access:"read_only",args:[{name:"message",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}}},maps:{gasUsageMap:{name:"gas-usage-map",key:"uint128",value:"uint128"},receivedMessages:{name:"received-messages",key:{buffer:{length:32}},value:"bool"},secondaryValidators:{name:"secondary-validators",key:{buffer:{length:33}},value:"bool"},sentMessagesBlock:{name:"sent-messages-block",key:{buffer:{length:32}},value:"uint128"}},variables:{errAlreadyInitialized:{name:"err-already-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errAlreadySent:{name:"err-already-sent",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errGasUsageNotSet:{name:"err-gas-usage-not-set",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidChainId:{name:"err-invalid-chain-id",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidDestination:{name:"err-invalid-destination",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidPrimary:{name:"err-invalid-primary",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidSecondary:{name:"err-invalid-secondary",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errMessageNotFound:{name:"err-message-not-found",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongBufferLength:{name:"err-wrong-buffer-length",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongGasOracle:{name:"err-wrong-gas-oracle",type:{response:{ok:"none",error:"uint128"}},access:"constant"},gasOraclePrincipal:{name:"gas-oracle-principal",type:{optional:"principal"},access:"variable"},otherChainIds:{name:"other-chain-ids",type:{buffer:{length:32}},access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},primaryValidator:{name:"primary-validator",type:{buffer:{length:33}},access:"variable"},thisChainId:{name:"this-chain-id",type:{optional:"uint128"},access:"variable"}},constants:{errAlreadyInitialized:{isOk:!1,value:3008n},errAlreadySent:{isOk:!1,value:3003n},errGasUsageNotSet:{isOk:!1,value:3010n},errInvalidChainId:{isOk:!1,value:3002n},errInvalidDestination:{isOk:!1,value:3004n},errInvalidPrimary:{isOk:!1,value:3005n},errInvalidSecondary:{isOk:!1,value:3006n},errMessageNotFound:{isOk:!1,value:3001n},errNotInitialized:{isOk:!1,value:3011n},errUnauthorized:{isOk:!1,value:3000n},errWrongBufferLength:{isOk:!1,value:3009n},errWrongGasOracle:{isOk:!1,value:3007n},gasOraclePrincipal:null,otherChainIds:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",primaryValidator:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),thisChainId:null},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"messenger"},messengerTrait:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"messenger-trait"},pool:{functions:{addRewards:{name:"add-rewards",access:"private",args:[{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"none"}}}},assertBalanceReatio:{name:"assert-balance-reatio",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertCanDeposit:{name:"assert-can-deposit",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertCanSwap:{name:"assert-can-swap",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertCanWithdraw:{name:"assert-can-withdraw",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertToken:{name:"assert-token",access:"private",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},depositLp:{name:"deposit-lp",access:"private",args:[{name:"ft-ref",type:"trait_reference"},{name:"to",type:"principal"},{name:"lp-amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},leCube_q:{name:"le-cube?",access:"private",args:[{name:"x",type:"uint128"},{name:"n",type:"uint128"}],outputs:{type:"bool"}},newtonStep:{name:"newton-step",access:"private",args:[{name:"n",type:"uint128"},{name:"x",type:"uint128"}],outputs:{type:"uint128"}},onlyBridge:{name:"only-bridge",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyStopAuthority:{name:"only-stop-authority",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},refine:{name:"refine",access:"private",args:[{name:"n",type:"uint128"},{name:"x",type:"uint128"}],outputs:{type:"uint128"}},withdrawLp:{name:"withdraw-lp",access:"private",args:[{name:"ft-ref",type:"trait_reference"},{name:"from",type:"principal"},{name:"lp-amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},adjustTotalLpAmount:{name:"adjust-total-lp-amount",access:"public",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},claimAdminFee:{name:"claim-admin-fee",access:"public",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},claimRewards:{name:"claim-rewards",access:"public",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},deposit:{name:"deposit",access:"public",args:[{name:"amount",type:"uint128"},{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},init:{name:"init",access:"public",args:[{name:"token",type:"trait_reference"},{name:"bridge-address",type:"principal"},{name:"fee-share-bp-arg",type:"uint128"},{name:"balance-ratio-min-bp-arg",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},serBalanceRetioMinBp:{name:"ser-balance-retio-min-bp",access:"public",args:[{name:"new-balance-ratio-min-bp",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setAdminFeeSahreBp:{name:"set-admin-fee-sahre-bp",access:"public",args:[{name:"new-admin-fee-share-bp",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setBridge:{name:"set-bridge",access:"public",args:[{name:"new-bridge",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setFeeShare:{name:"set-fee-share",access:"public",args:[{name:"fee-share-bp_",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOwner:{name:"set-owner",access:"public",args:[{name:"new-owner",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setStopAuthority:{name:"set-stop-authority",access:"public",args:[{name:"new-stop-authority",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startDeposit:{name:"start-deposit",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startSwap:{name:"start-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startWithdraw:{name:"start-withdraw",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopDeposit:{name:"stop-deposit",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopSwap:{name:"stop-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopWithdraw:{name:"stop-withdraw",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},swapFromVusd:{name:"swap-from-vusd",access:"public",args:[{name:"ft-ref",type:"trait_reference"},{name:"user",type:"principal"},{name:"amount",type:"uint128"},{name:"receive-amount-min",type:"uint128"},{name:"zero-fee",type:"bool"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},swapToVusd:{name:"swap-to-vusd",access:"public",args:[{name:"ft-ref",type:"trait_reference"},{name:"user",type:"principal"},{name:"amount",type:"uint128"},{name:"zero-fee",type:"bool"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},withdraw:{name:"withdraw",access:"public",args:[{name:"amount-lp",type:"uint128"},{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},calcD:{name:"calc-d",access:"read_only",args:[{name:"x",type:"uint128"},{name:"y",type:"uint128"}],outputs:{type:"uint128"}},calcY:{name:"calc-y",access:"read_only",args:[{name:"x",type:"uint128"},{name:"d_",type:"uint128"}],outputs:{type:"uint128"}},cbrt:{name:"cbrt",access:"read_only",args:[{name:"n",type:"uint128"}],outputs:{type:"uint128"}},fromSystemPrecision:{name:"from-system-precision",access:"read_only",args:[{name:"amount",type:"uint128"}],outputs:{type:"uint128"}},getAccRewardPerShareP:{name:"get-acc-reward-per-share-p",access:"read_only",args:[],outputs:{type:"uint128"}},getAdminFeeAmount:{name:"get-admin-fee-amount",access:"read_only",args:[],outputs:{type:"uint128"}},getAdminFeeShareBp:{name:"get-admin-fee-share-bp",access:"read_only",args:[],outputs:{type:"uint128"}},getBalanceRatioMinBp:{name:"get-balance-ratio-min-bp",access:"read_only",args:[],outputs:{type:"uint128"}},getBridge:{name:"get-bridge",access:"read_only",args:[],outputs:{type:{optional:"principal"}}},getCanDeposit:{name:"get-can-deposit",access:"read_only",args:[],outputs:{type:"bool"}},getCanSwap:{name:"get-can-swap",access:"read_only",args:[],outputs:{type:"bool"}},getCanWithdraw:{name:"get-can-withdraw",access:"read_only",args:[],outputs:{type:"bool"}},getD:{name:"get-d",access:"read_only",args:[],outputs:{type:"uint128"}},getFeeShareBp:{name:"get-fee-share-bp",access:"read_only",args:[],outputs:{type:"uint128"}},getLpBalance:{name:"get-lp-balance",access:"read_only",args:[{name:"user",type:"principal"}],outputs:{type:"uint128"}},getLpTotalSupply:{name:"get-lp-total-supply",access:"read_only",args:[],outputs:{type:"uint128"}},getOwner:{name:"get-owner",access:"read_only",args:[],outputs:{type:"principal"}},getReserves:{name:"get-reserves",access:"read_only",args:[],outputs:{type:"uint128"}},getStopAuthority:{name:"get-stop-authority",access:"read_only",args:[],outputs:{type:"principal"}},getTokenAddress:{name:"get-token-address",access:"read_only",args:[],outputs:{type:{response:{ok:"principal",error:"uint128"}}}},getTokenBalance:{name:"get-token-balance",access:"read_only",args:[],outputs:{type:"uint128"}},getUserRewardDebt:{name:"get-user-reward-debt",access:"read_only",args:[{name:"user",type:"principal"}],outputs:{type:"uint128"}},getVusdBalance:{name:"get-vusd-balance",access:"read_only",args:[],outputs:{type:"uint128"}},pendingRewards:{name:"pending-rewards",access:"read_only",args:[{name:"user",type:"principal"}],outputs:{type:{response:{ok:"uint128",error:"none"}}}},toSystemPrecision:{name:"to-system-precision",access:"read_only",args:[{name:"amount",type:"uint128"}],outputs:{type:"uint128"}}},maps:{lpBalances:{name:"lp-balances",key:"principal",value:"uint128"},userRewardDebt:{name:"user-reward-debt",key:"principal",value:"uint128"}},variables:{BP:{name:"BP",type:"uint128",access:"constant"},P:{name:"P",type:"uint128",access:"constant"},a:{name:"a",type:"uint128",access:"constant"},errAlreadyInitialized:{name:"err-already-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errDepositAmountTooSmall:{name:"err-deposit-amount-too-small",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errDepositProhibited:{name:"err-deposit-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errLowTokenBalance:{name:"err-low-token-balance",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errLowVusdBalance:{name:"err-low-vusd-balance",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotEnoughLp:{name:"err-not-enough-lp",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotEnoughReserves:{name:"err-not-enough-reserves",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errPoolBalanceTooBig:{name:"err-pool-balance-too-big",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errSlippage:{name:"err-slippage",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errSwapProhibited:{name:"err-swap-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errTooLarge:{name:"err-too-large",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWithdrawProhibited:{name:"err-withdraw-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongToken:{name:"err-wrong-token",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errZeroChanges:{name:"err-zero-changes",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errZeroDChanges:{name:"err-zero-d-changes",type:{response:{ok:"none",error:"uint128"}},access:"constant"},maxTokenBalance:{name:"max-token-balance",type:"uint128",access:"constant"},systemPrecision:{name:"system-precision",type:"uint128",access:"constant"},accRewardPerShareP:{name:"acc-reward-per-share-p",type:"uint128",access:"variable"},adminFeeAmount:{name:"admin-fee-amount",type:"uint128",access:"variable"},adminFeeShareBp:{name:"admin-fee-share-bp",type:"uint128",access:"variable"},balanceRatioMinBp:{name:"balance-ratio-min-bp",type:"uint128",access:"variable"},bridge:{name:"bridge",type:{optional:"principal"},access:"variable"},canDeposit:{name:"can-deposit",type:"bool",access:"variable"},canSwap:{name:"can-swap",type:"bool",access:"variable"},canWithdraw:{name:"can-withdraw",type:"bool",access:"variable"},d:{name:"d",type:"uint128",access:"variable"},feeShareBp:{name:"fee-share-bp",type:"uint128",access:"variable"},lpTotalSupply:{name:"lp-total-supply",type:"uint128",access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},reserves:{name:"reserves",type:"uint128",access:"variable"},stopAuthority:{name:"stop-authority",type:"principal",access:"variable"},tokenAmountIncrease:{name:"token-amount-increase",type:"uint128",access:"variable"},tokenAmountReduce:{name:"token-amount-reduce",type:"uint128",access:"variable"},tokenBalance:{name:"token-balance",type:"uint128",access:"variable"},tokenPrincipal:{name:"token-principal",type:{optional:"principal"},access:"variable"},vusdBalance:{name:"vusd-balance",type:"uint128",access:"variable"}},constants:{BP:10000n,P:48n,a:20n,accRewardPerShareP:0n,adminFeeAmount:0n,adminFeeShareBp:0n,balanceRatioMinBp:0n,bridge:null,canDeposit:!0,canSwap:!0,canWithdraw:!0,d:0n,errAlreadyInitialized:{isOk:!1,value:2007n},errDepositAmountTooSmall:{isOk:!1,value:2001n},errDepositProhibited:{isOk:!1,value:2013n},errLowTokenBalance:{isOk:!1,value:2012n},errLowVusdBalance:{isOk:!1,value:2011n},errNotEnoughLp:{isOk:!1,value:2010n},errNotEnoughReserves:{isOk:!1,value:2005n},errNotInitialized:{isOk:!1,value:2006n},errPoolBalanceTooBig:{isOk:!1,value:2002n},errSlippage:{isOk:!1,value:2009n},errSwapProhibited:{isOk:!1,value:2015n},errTooLarge:{isOk:!1,value:2016n},errUnauthorized:{isOk:!1,value:2000n},errWithdrawProhibited:{isOk:!1,value:2014n},errWrongToken:{isOk:!1,value:2008n},errZeroChanges:{isOk:!1,value:2003n},errZeroDChanges:{isOk:!1,value:2004n},feeShareBp:0n,lpTotalSupply:0n,maxTokenBalance:1000000000000n,owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",reserves:0n,stopAuthority:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",systemPrecision:3n,tokenAmountIncrease:0n,tokenAmountReduce:0n,tokenBalance:0n,tokenPrincipal:null,vusdBalance:0n},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"pool"},poolTrait:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"pool-trait"},sip010TraitFtStandard:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch21",clarity_version:"Clarity1",contractName:"sip-010-trait-ft-standard"},utils:{functions:{assertNotEmptyBuff32:{name:"assert-not-empty-buff-32",access:"read_only",args:[{name:"b",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},bufferByte:{name:"buffer-byte",access:"read_only",args:[{name:"b",type:{buffer:{length:32}}},{name:"i",type:"uint128"}],outputs:{type:{response:{ok:{buffer:{length:1}},error:"uint128"}}}},bufferByteUint:{name:"buffer-byte-uint",access:"read_only",args:[{name:"b",type:{buffer:{length:32}}},{name:"i",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},hashMessage:{name:"hash-message",access:"read_only",args:[{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"source-chain-id",type:"uint128"},{name:"destination-chain-id",type:"uint128"},{name:"receive-token",type:{buffer:{length:32}}},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:{buffer:{length:32}},error:"uint128"}}}},hashWithSenderAddress:{name:"hash-with-sender-address",access:"read_only",args:[{name:"message",type:{buffer:{length:32}}},{name:"sender",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:{buffer:{length:32}},error:"uint128"}}}},principalHash:{name:"principal-hash",access:"read_only",args:[{name:"value",type:"principal"}],outputs:{type:{buffer:{length:32}}}},principalToBuff32:{name:"principal-to-buff32",access:"read_only",args:[{name:"value",type:"principal"}],outputs:{type:{buffer:{length:32}}}},stringToBuff:{name:"string-to-buff",access:"read_only",args:[{name:"str",type:{"string-ascii":{length:40}}}],outputs:{type:{buffer:{length:45}}}},uintToBuff1:{name:"uint-to-buff-1",access:"read_only",args:[{name:"value",type:"uint128"}],outputs:{type:{buffer:{length:17}}}},uintToBuff32:{name:"uint-to-buff-32",access:"read_only",args:[{name:"value",type:"uint128"}],outputs:{type:{buffer:{length:33}}}}},maps:{},variables:{errEmptyBuffer:{name:"err-empty-buffer",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongBufferLength:{name:"err-wrong-buffer-length",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongMsgLength:{name:"err-wrong-msg-length",type:{response:{ok:"none",error:"uint128"}},access:"constant"},thisChainId:{name:"this-chain-id",type:"uint128",access:"constant"},zeroBytes12:{name:"zero-bytes-12",type:{buffer:{length:12}},access:"constant"},zeroBytes16:{name:"zero-bytes-16",type:{buffer:{length:16}},access:"constant"},zeroBytes32:{name:"zero-bytes-32",type:{buffer:{length:32}},access:"constant"}},constants:{errEmptyBuffer:{isOk:!1,value:5002n},errWrongBufferLength:{isOk:!1,value:5000n},errWrongMsgLength:{isOk:!1,value:5001n},thisChainId:16n,zeroBytes12:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0]),zeroBytes16:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),zeroBytes32:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"utils"},xReserveBridge:{functions:{assertBurn:{name:"assert-burn",access:"private",args:[{name:"burn-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertToken:{name:"assert-token",access:"private",args:[{name:"token-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},bridge:{name:"bridge",access:"public",args:[{name:"token-ref",type:"trait_reference"},{name:"burn-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"destination-chain-id",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeChainDomain:{name:"remove-chain-domain",access:"public",args:[{name:"chain-id-in",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setAdminFee:{name:"set-admin-fee",access:"public",args:[{name:"new-fee-bp",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setBurnPrincipal:{name:"set-burn-principal",access:"public",args:[{name:"new-burn-principal",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setChainDomain:{name:"set-chain-domain",access:"public",args:[{name:"new-chain-id",type:"uint128"},{name:"domain",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOwner:{name:"set-owner",access:"public",args:[{name:"new-owner",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setTokenPrincipal:{name:"set-token-principal",access:"public",args:[{name:"new-token-principal",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawFees:{name:"withdraw-fees",access:"public",args:[{name:"token-ref",type:"trait_reference"},{name:"recipient",type:"principal"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}}},maps:{chainIdToDomain:{name:"chain-id-to-domain",key:"uint128",value:"uint128"}},variables:{BP:{name:"BP",type:"uint128",access:"constant"},errInsufficientAmount:{name:"err-insufficient-amount",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidAmount:{name:"err-invalid-amount",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotFound:{name:"err-not-found",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongBurn:{name:"err-wrong-burn",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongToken:{name:"err-wrong-token",type:{response:{ok:"none",error:"uint128"}},access:"constant"},adminFeeBp:{name:"admin-fee-bp",type:"uint128",access:"variable"},burnPrincipal:{name:"burn-principal",type:{optional:"principal"},access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},tokenPrincipal:{name:"token-principal",type:{optional:"principal"},access:"variable"}},constants:{BP:10000n,adminFeeBp:0n,burnPrincipal:null,errInsufficientAmount:{isOk:!1,value:1001n},errInvalidAmount:{isOk:!1,value:1002n},errNotFound:{isOk:!1,value:1003n},errNotInitialized:{isOk:!1,value:1004n},errUnauthorized:{isOk:!1,value:1000n},errWrongBurn:{isOk:!1,value:1006n},errWrongToken:{isOk:!1,value:1005n},owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",tokenPrincipal:null},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"x-reserve-bridge"}};function Wt(o){if(!o.originTokenAddress)throw new w("STX token must contain 'originTokenAddress'");let[a,i]=o.originTokenAddress.split("::");if(!i)throw new w("STX token must contain 'originTokenAddress' ends with '::<tokenName>'");return i}import{parseContractId as fA}from"@stacks/transactions";function Ct(o,a,i,r,s){let[d,A]=fA(r);if(!d||!A)throw new Error(`Unable to parse stx token ${r}`);return{type:"ft-postcondition",address:i,condition:a,asset:`${d}.${A}::${s}`,amount:o}}function Ar(o,a,i){return{type:"stx-postcondition",address:i,condition:a,amount:o}}var $a=class extends Xe{constructor(i,r,s){super();this.nodeRpcUrl=i;this.params=r;this.api=s;let d=TA({network:this.params.stxIsTestnet?"testnet":"mainnet",client:{baseUrl:this.nodeRpcUrl},apiKey:this.params.stxHeroApiKey});this.client=new RA(d,this.params.stxHeroApiKey)}nodeRpcUrl;params;api;chainType="STX";client;send(i){throw new K}async buildRawTransactionSend(i){let r=await Oe(this.chainType,i,this.api),{contractAddress:s,messenger:d,toChainId:A,toAccountAddress:l,toTokenAddress:u}=r,b=BigInt(r.amount),y=Wt(i.sourceToken),C=Ct(b,"lte",i.fromAccountAddress,i.sourceToken.tokenAddress,y),f=Ar(0,"gte",s),v=[C,f];if(d===6){let ae=Ct(b,"lte",s,i.sourceToken.tokenAddress,y);v.push(ae)}let T=BigInt(r.fee);r.extraGas&&(T=T+BigInt(r.extraGas));let F,N;switch(r.gasFeePaymentMethod){case"native":{F=0n,N=T;let ae=Ar(T,"lte",i.fromAccountAddress);v.push(ae);break}case"stablecoin":{F=T,N=0n;break}case"abr":throw new w("STX bridge does not support ABR payment method");default:return re(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}let[G]=BA(s),R=d===6?cr(at.xReserveBridge,s).bridge({tokenRef:i.sourceToken.tokenAddress,burnRef:i.sourceToken.xReserve?.protocolAddress??i.sourceToken.tokenAddress,amount:b,recipient:Uint8Array.from(l),destinationChainId:A}):cr(at.bridge,s).swapAndBridge({ftRef:i.sourceToken.tokenAddress,poolRef:i.sourceToken.poolAddress,messengerRef:`${G}.messenger`,gasOracleRef:`${G}.gas-oracle`,amount:b,recipient:Uint8Array.from(l),destinationChainId:A,receiveToken:Uint8Array.from(u),nonce:Uint8Array.from(mt()),messengerId:d,feeNativeAmount:N,feeTokenAmount:F}),{contractAddress:P,contractName:V,functionName:S,functionArgs:M}=R,x=ko(),oe=xo(x),se={contractAddress:P,contractName:V,functionName:S,functionArgs:M,publicKey:oe,validateWithAbi:!0,network:this.client.network,postConditions:v,postConditionMode:Mo.Deny};return(await Lo(se)).serialize()}async buildRawTransactionSwap(i){let r=Ke(this.chainType,i),s=BigInt(r.amount),d=BigInt(r.minimumReceiveAmount),A=i.sourceToken.bridgeAddress,l=cr(at.bridge,A),{contractAddress:u,contractName:b,functionName:y,functionArgs:C}=l.swap({amount:s,sendPoolRef:i.sourceToken.poolAddress,sendFtRef:i.sourceToken.tokenAddress,receivePoolRef:i.destinationToken.poolAddress,receiveFtRef:i.destinationToken.tokenAddress,recipient:i.toAccountAddress,receiveAmountMin:d}),f=ko(),v=xo(f),T=Ct(s,"lte",i.fromAccountAddress,i.sourceToken.tokenAddress,Wt(i.sourceToken)),F=Ct(d,"gte",i.destinationToken.poolAddress,i.destinationToken.tokenAddress,Wt(i.destinationToken)),N={contractAddress:u,contractName:b,functionName:y,functionArgs:C,publicKey:v,validateWithAbi:!0,network:this.client.network,postConditions:[T,F],postConditionMode:Mo.Deny};return(await Lo(N)).serialize()}};import{SuiJsonRpcClient as kA}from"@mysten/sui/jsonRpc";import{coinWithBalance as Re,Transaction as fr}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as es}from"@mysten/sui/utils";import{Big as Rr}from"big.js";var qa={},gr=null,pr=null,ei={},lr={};function Ho(o,a){qa[o]=a}function ur(o,a){if(!qa[o]){let i=Object.keys(qa).join(", ")||"(none registered)";throw new Error(`Environment '${o}' not found. Available: ${i}`)}gr=qa[o],pr=o,ei=a??{}}function mn(o,a,i){ei[o]=a,lr[o]=i??a}function mr(){if(!gr)throw new Error("No active environment. Call setActiveEnv() or import the envs module first.");return gr}function YA(o){return o?"supplied environment":`active environment '${pr}'`}function WA(o){return o??mr()}function Ee(o,a){if(a){let s=a.packages[o]||a.dependencies[o];if(!s)throw new Error(`Package '${o}' not found in supplied environment`);return s.publishedAt}if(ei[o])return ei[o];let i=mr(),r=i.packages[o]||i.dependencies[o];if(!r)throw new Error(`Package '${o}' not found in active environment '${pr}'`);return r.publishedAt}function et(o,a,i){if(!i&&lr[o])return lr[o];let r=WA(i),s=r.packages[o]||r.dependencies[o];if(!s)throw new Error(`Package '${o}' not found in ${YA(i)}`);let d=s.typeOrigins[a];if(!d)throw new Error(`Type origin for '${a}' not found in package '${o}'. Available: ${Object.keys(s.typeOrigins).join(", ")||"(none)"}`);return d}function wt(o,a){mn("bridge",o,a)}var Jo={packages:{"wormhole-messenger":{originalId:"0x6ec1db2511d2283fc945d62f6c8e5305ee2538f2168fe91477f68c574d28be1",publishedAt:"0x261feaea07ac7a746068a0c81fbb82d51c0ece2d61058c24c7b572a1869afe37",typeOrigins:{"events::MessageReceivedEvent":"0x6ec1db2511d2283fc945d62f6c8e5305ee2538f2168fe91477f68c574d28be1","events::MessageSentEvent":"0x6ec1db2511d2283fc945d62f6c8e5305ee2538f2168fe91477f68c574d28be1","wormhole_messenger::AdminCap":"0x6ec1db2511d2283fc945d62f6c8e5305ee2538f2168fe91477f68c574d28be1","wormhole_messenger::WormholeMessenger":"0x6ec1db2511d2283fc945d62f6c8e5305ee2538f2168fe91477f68c574d28be1"}},"gas-oracle":{originalId:"0x34ae5595909bdfcd61191f6e5aabf0024250194f738b82df186fdd4fb18aa7ec",publishedAt:"0x2b3067e971857503bcb4c16d8a448c0541495c0ae9d7129e52659ed6724eb0ea",typeOrigins:{"gas_oracle::AdminCap":"0x34ae5595909bdfcd61191f6e5aabf0024250194f738b82df186fdd4fb18aa7ec","gas_oracle::ChainData":"0x34ae5595909bdfcd61191f6e5aabf0024250194f738b82df186fdd4fb18aa7ec","gas_oracle::GasOracle":"0x34ae5595909bdfcd61191f6e5aabf0024250194f738b82df186fdd4fb18aa7ec"}},utils:{originalId:"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4",publishedAt:"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4",typeOrigins:{"bytes32::Bytes32":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4","fee_collector::FeeCollector":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4","message::Message":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4","messenger_protocol::MessengerProtocol":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4","set::Empty":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4","set::Set":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4","version::CurrentVersion":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4"}},messenger:{originalId:"0x73d4d15293c2482646cdfc28c58da0f9eef64c577e9c0d2bbf614c1623346b49",publishedAt:"0x2c7d3497ef1ad32b62b30fb9456ba602c4dc756c07643096a6b4a1f04f72b549",typeOrigins:{"events::MessageReceivedEvent":"0x73d4d15293c2482646cdfc28c58da0f9eef64c577e9c0d2bbf614c1623346b49","events::MessageSentEvent":"0x73d4d15293c2482646cdfc28c58da0f9eef64c577e9c0d2bbf614c1623346b49","messenger::AdminCap":"0x73d4d15293c2482646cdfc28c58da0f9eef64c577e9c0d2bbf614c1623346b49","messenger::Messenger":"0x73d4d15293c2482646cdfc28c58da0f9eef64c577e9c0d2bbf614c1623346b49"}},bridge:{originalId:"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3",publishedAt:"0x55b0e9a5f0deaa21cf0c52eefedff362be1859f10a74415c88801bf8eb5a0597",typeOrigins:{"another_bridge::AnotherBridge":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","bridge::AdminCap":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","bridge::Bridge":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","bridge::FeeCollectorCap":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","bridge::StopSwapCap":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::DepositEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::ReceiveFeeEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::RewardsClaimedEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::SwappedEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::SwappedFromVUsdEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::SwappedToVUsdEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::TokensReceivedEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::TokensSentEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::WithdrawEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","pool::AdminCap":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","pool::Pool":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","pool::StopCap":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","pool_rewards::PoolRewards":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","pool_state::PoolState":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","user_deposit::UserDeposit":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3"}},"cctp-bridge":{originalId:"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5",publishedAt:"0x750cc42da7042399613378a509fbed8563471ca48d961b2edf832bfd1342a1e0",typeOrigins:{"cctp_bridge::AdminCap":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","cctp_bridge::CctpBridge":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","cctp_bridge::FeeCollectorCap":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","events::ReceiveFeeEvent":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","events::RecipientReplaced":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","events::TokensReceivedEvent":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","events::TokensSentEvent":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","message_transmitter_authenticator::MessageTransmitterAuthenticator":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5"}}},dependencies:{std:{originalId:"0x1",publishedAt:"0x1",typeOrigins:{"ascii::Char":"0x1","ascii::String":"0x1","bit_vector::BitVector":"0x1","fixed_point32::FixedPoint32":"0x1","internal::Permit":"0x1","option::Option":"0x1","string::String":"0x1","type_name::TypeName":"0x1","uq32_32::UQ32_32":"0x1","uq64_64::UQ64_64":"0x1"}},sui:{originalId:"0x2",publishedAt:"0x2",typeOrigins:{"accumulator::AccumulatorRoot":"0x2","accumulator::Key":"0x2","accumulator::U128":"0x2","accumulator_metadata::AccumulatorObjectCountKey":"0x2","accumulator_metadata::Metadata":"0x2","accumulator_metadata::MetadataKey":"0x2","accumulator_metadata::Owner":"0x2","accumulator_metadata::OwnerKey":"0x2","accumulator_settlement::EventStreamHead":"0x2","address_alias::AddressAliasState":"0x2","address_alias::AddressAliases":"0x2","address_alias::AliasKey":"0x2","authenticator_state::ActiveJwk":"0x2","authenticator_state::AuthenticatorState":"0x2","authenticator_state::AuthenticatorStateInner":"0x2","authenticator_state::JWK":"0x2","authenticator_state::JwkId":"0x2","bag::Bag":"0x2","balance::Balance":"0x2","balance::Supply":"0x2","bcs::BCS":"0x2","bls12381::G1":"0x2","bls12381::G2":"0x2","bls12381::GT":"0x2","bls12381::Scalar":"0x2","bls12381::UncompressedG1":"0x2","borrow::Borrow":"0x2","borrow::Referent":"0x2","clock::Clock":"0x2","coin::Coin":"0x2","coin::CoinMetadata":"0x2","coin::CurrencyCreated":"0x2","coin::DenyCap":"0x2","coin::DenyCapV2":"0x2","coin::RegulatedCoinMetadata":"0x2","coin::TreasuryCap":"0x2","coin_registry::Borrow":"0x2","coin_registry::CoinRegistry":"0x2","coin_registry::Currency":"0x2","coin_registry::CurrencyInitializer":"0x2","coin_registry::CurrencyKey":"0x2","coin_registry::ExtraField":"0x2","coin_registry::LegacyMetadataKey":"0x2","coin_registry::MetadataCap":"0x2","coin_registry::MetadataCapState":"0x2","coin_registry::RegulatedState":"0x2","coin_registry::SupplyState":"0x2","config::Config":"0x2","config::Setting":"0x2","config::SettingData":"0x2","deny_list::AddressKey":"0x2","deny_list::ConfigKey":"0x2","deny_list::ConfigWriteCap":"0x2","deny_list::DenyList":"0x2","deny_list::GlobalPauseKey":"0x2","deny_list::PerTypeConfigCreated":"0x2","deny_list::PerTypeList":"0x2","derived_object::Claimed":"0x2","derived_object::ClaimedStatus":"0x2","derived_object::DerivedObjectKey":"0x2","display::Display":"0x2","display::DisplayCreated":"0x2","display::VersionUpdated":"0x2","display_registry::Display":"0x2","display_registry::DisplayCap":"0x2","display_registry::DisplayKey":"0x2","display_registry::DisplayRegistry":"0x2","display_registry::SystemMigrationCap":"0x2","dynamic_field::Field":"0x2","dynamic_object_field::Wrapper":"0x2","funds_accumulator::Withdrawal":"0x2","groth16::Curve":"0x2","groth16::PreparedVerifyingKey":"0x2","groth16::ProofPoints":"0x2","groth16::PublicProofInputs":"0x2","group_ops::Element":"0x2","kiosk::Borrow":"0x2","kiosk::Item":"0x2","kiosk::ItemDelisted":"0x2","kiosk::ItemListed":"0x2","kiosk::ItemPurchased":"0x2","kiosk::Kiosk":"0x2","kiosk::KioskOwnerCap":"0x2","kiosk::Listing":"0x2","kiosk::Lock":"0x2","kiosk::PurchaseCap":"0x2","kiosk_extension::Extension":"0x2","kiosk_extension::ExtensionKey":"0x2","linked_table::LinkedTable":"0x2","linked_table::Node":"0x2","nitro_attestation::NitroAttestationDocument":"0x2","nitro_attestation::PCREntry":"0x2","object::ID":"0x2","object::UID":"0x2","object_bag::ObjectBag":"0x2","object_table::ObjectTable":"0x2","package::Publisher":"0x2","package::UpgradeCap":"0x2","package::UpgradeReceipt":"0x2","package::UpgradeTicket":"0x2","party::Party":"0x2","party::Permissions":"0x2","priority_queue::Entry":"0x2","priority_queue::PriorityQueue":"0x2","random::Random":"0x2","random::RandomGenerator":"0x2","random::RandomInner":"0x2","ristretto255::G":"0x2","ristretto255::Scalar":"0x2","sui::SUI":"0x2","table::Table":"0x2","table_vec::TableVec":"0x2","token::ActionRequest":"0x2","token::RuleKey":"0x2","token::Token":"0x2","token::TokenPolicy":"0x2","token::TokenPolicyCap":"0x2","token::TokenPolicyCreated":"0x2","transfer::Receiving":"0x2","transfer_policy::RuleKey":"0x2","transfer_policy::TransferPolicy":"0x2","transfer_policy::TransferPolicyCap":"0x2","transfer_policy::TransferPolicyCreated":"0x2","transfer_policy::TransferPolicyDestroyed":"0x2","transfer_policy::TransferRequest":"0x2","tx_context::TxContext":"0x2","url::Url":"0x2","vec_map::Entry":"0x2","vec_map::VecMap":"0x2","vec_set::VecSet":"0x2","versioned::VersionChangeCap":"0x2","versioned::Versioned":"0x2","zklogin_verified_id::VerifiedID":"0x2","zklogin_verified_issuer::VerifiedIssuer":"0x2"}},"token-messenger-minter":{originalId:"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb",publishedAt:"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb",typeOrigins:{"burn_message::BurnMessage":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","deposit_for_burn::DepositForBurn":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","deposit_for_burn::DepositForBurnTicket":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","deposit_for_burn::DepositForBurnWithCallerTicket":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","deposit_for_burn::ReplaceDepositForBurnTicket":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","handle_receive_message::MintAndWithdraw":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","handle_receive_message::StampReceiptTicketWithBurnMessage":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","initialize::INITIALIZE":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","initialize::InitCap":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","message_transmitter_authenticator::MessageTransmitterAuthenticator":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","migration::MigrationAborted":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","migration::MigrationCompleted":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","migration::MigrationStarted":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","pausable::Pause":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","pausable::Unpause":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","remote_token_messenger::RemoteTokenMessengerAdded":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","remote_token_messenger::RemoteTokenMessengerRemoved":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","role_management::PauserChanged":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","role_management::SetTokenController":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","roles::OwnerRole":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","roles::Roles":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","state::State":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","token_controller::MintCapAdded":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","token_controller::MintCapRemoved":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","token_controller::SetBurnLimitPerMessage":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","token_controller::TokenPairLinked":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","token_controller::TokenPairUnlinked":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb"}},stablecoin:{originalId:"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917",publishedAt:"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917",typeOrigins:{"mint_allowance::MintAllowance":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::BlocklisterChanged":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::BlocklisterKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::MasterMinterChanged":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::MasterMinterKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::MetadataUpdaterChanged":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::MetadataUpdaterKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::OwnerKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::OwnerRole":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::PauserChanged":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::PauserKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::Roles":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","stablecoin::STABLECOIN":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Blocklisted":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Burn":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::ControllerConfigured":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::ControllerRemoved":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::DenyCapKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MetadataUpdated":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MigrationAborted":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MigrationCompleted":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MigrationStarted":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Mint":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MintCap":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MintCapCreated":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MinterAllowanceIncremented":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MinterConfigured":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MinterRemoved":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Pause":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Treasury":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::TreasuryCapKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Unblocklisted":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Unpause":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917"}},"message-transmitter":{originalId:"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5",publishedAt:"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5",typeOrigins:{"attester_manager::AttesterDisabled":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","attester_manager::AttesterEnabled":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","attester_manager::SignatureThresholdUpdated":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","initialize::INITIALIZE":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","initialize::InitCap":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","message::Message":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","message_size::MaxMessageBodySizeUpdated":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","migration::MigrationAborted":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","migration::MigrationCompleted":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","migration::MigrationStarted":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","pausable::Pause":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","pausable::Unpause":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","receive_message::MessageReceived":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","receive_message::Receipt":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","receive_message::ReceiveMessageTicket":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","receive_message::StampReceiptTicket":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","receive_message::StampedReceipt":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","role_management::AttesterManagerUpdated":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","role_management::PauserChanged":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","roles::OwnerRole":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","roles::Roles":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","send_message::MessageSent":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","send_message::ReplaceMessageTicket":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","send_message::SendMessageTicket":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","send_message::SendMessageWithCallerTicket":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","state::State":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5"}},wormhole:{originalId:"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94",publishedAt:"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94",typeOrigins:{"bytes20::Bytes20":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","bytes32::Bytes32":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","consumed_vaas::ConsumedVAAs":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","cursor::Cursor":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","emitter::EmitterCap":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","emitter::EmitterCreated":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","emitter::EmitterDestroyed":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","external_address::ExternalAddress":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","fee_collector::FeeCollector":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","governance_message::DecreeReceipt":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","governance_message::DecreeTicket":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","guardian::Guardian":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","guardian_set::GuardianSet":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","guardian_signature::GuardianSignature":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","migrate::MigrateComplete":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","package_utils::CurrentPackage":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","package_utils::CurrentVersion":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","package_utils::PackageInfo":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","package_utils::PendingPackage":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","publish_message::MessageTicket":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","publish_message::WormholeMessage":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","set::Empty":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","set::Set":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","set_fee::GovernanceWitness":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","set_fee::SetFee":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","setup::DeployerCap":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","state::LatestOnly":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","state::State":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","transfer_fee::GovernanceWitness":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","transfer_fee::TransferFee":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","update_guardian_set::GovernanceWitness":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","update_guardian_set::GuardianSetAdded":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","update_guardian_set::UpdateGuardianSet":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","upgrade_contract::ContractUpgraded":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","upgrade_contract::GovernanceWitness":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","upgrade_contract::UpgradeContract":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","vaa::VAA":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","version_control::V__0_2_0":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","version_control::V__DUMMY":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94"}}}};var jo=!1;jo||(Ho("testnet",Jo),ur("testnet"),jo=!0);import{bcs as _e}from"@mysten/sui/bcs";function wA(o,a=["<",">"]){let[i,r]=a,s=[],d="",A=0;for(let l=0;l<o.length;l++){let u=o[l];if(u===i&&A++,u===r&&A--,A===0&&u===","){s.push(d.trim()),d="";continue}d+=u}return s.push(d.trim()),s}function ue(o){if(typeof o!="string")throw new Error(`Illegal type passed as a name of the type: ${o}`);let[a,i]=["<",">"],r=o.indexOf(a),s=Array.from(o).reverse().indexOf(i);if(r===-1&&s===-1)return{typeName:o,typeArgs:[]};if(r===-1||s===-1)throw new Error(`Unclosed generic in name '${o}'`);let d=o.slice(0,r),A=wA(o.slice(r+1,o.length-s-1),[a,i]);return{typeName:d,typeArgs:A}}function zo(o){return!o||typeof o!="object"||Array.isArray(o)?!1:"GasCoin"in o||"Input"in o||"Result"in o||"NestedResult"in o}function O(o,a){return zo(a)?a:o.object(a)}function it(o,a,i){if(zo(a)){if(typeof a=="function")throw new Error("Transaction plugins are not supported");return O(o,a)}function r(b){let{typeName:y,typeArgs:C}=ue(b);switch(y){case"bool":return _e.Bool;case"u8":return _e.U8;case"u16":return _e.U16;case"u32":return _e.U32;case"u64":return _e.U64;case"u128":return _e.U128;case"u256":return _e.U256;case"address":return _e.Address;case"0x1::string::String":case"0x1::ascii::String":return _e.String;case"0x2::object::ID":return _e.Address;case"0x1::option::Option":return _e.option(r(C[0]));case"vector":return _e.vector(r(C[0]));default:throw new Error(`invalid primitive type ${b}`)}}function s(b){for(let y of b){if(typeof y>"u"||y===null)return!0;if(Array.isArray(y))return s(y)}return!1}function d(b){for(let y of b){if(!Array.isArray(y)){if(y===null)continue;switch(typeof y){case"string":case"number":case"bigint":case"boolean":continue;default:return!1}}return d(y)}return!0}function A(b){for(let y of b){if(!Array.isArray(y))switch(typeof y){case"string":case"number":case"bigint":case"boolean":return!0;default:continue}return A(y)}return!1}let{typeName:l,typeArgs:u}=ue(i);switch(l){case"0x1::option::Option":if(a===null)return o.pure.option("bool",null);if(d([a]))return o.pure(r(i).serialize(a));if(A([a]))throw new Error("mixing primitive and TransactionArgument values is not supported");return o.moveCall({target:"0x1::option::some",typeArguments:[u[0]],arguments:[it(o,a,u[0])]});case"vector":if(!Array.isArray(a))throw new Error("expected an array for vector type");if(a.length===0)return o.pure(_e.vector(_e.Bool).serialize([]));if(s(a))throw new Error("the provided array contains undefined or null values");if(d(a))return o.pure(r(i).serialize(a));if(A(a))throw new Error("mixing primitive and TransactionArgument values is not supported");return o.makeMoveVec({type:u[0],elements:a});default:return o.pure(r(i).serialize(a))}}function FA(o){let a=o.split("0x").join("");for(let i=0;i<a.length;i++)if(a[i]!=="0")return`0x${a.substring(i)}`;return"0x0"}function J(o){let{typeName:a,typeArgs:i}=ue(o);switch(a){case"bool":case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"address":case"signer":return a;case"vector":return`vector<${J(i[0])}>`;default:{let r=a.split("::");r[0]=FA(r[0]);let s=r.join("::");return i.length>0?`${s}<${i.map(d=>J(d)).join(",")}>`:s}}}function ie(o,...a){return a.length>0?`${o}<${a.join(", ")}>`:o}function br(o,a,i,r){return o.moveCall({target:`${Ee("bridge",r?.env)}::bridge_interface::swap_and_bridge`,typeArguments:[a],arguments:[O(o,i.bridge),O(o,i.messenger),O(o,i.gasOracle),O(o,i.amount),O(o,i.recipient),it(o,i.destinationChainId,"u8"),O(o,i.receiveToken),it(o,i.nonce,"u256"),O(o,i.feeSuiCoin),O(o,i.feeTokenCoin)]})}function yr(o,a,i,r){return o.moveCall({target:`${Ee("bridge",r?.env)}::bridge_interface::swap_and_bridge_wormhole`,typeArguments:[a],arguments:[O(o,i.bridge),O(o,i.messenger),O(o,i.wormholeState),O(o,i.theClock),O(o,i.gasOracle),O(o,i.amount),O(o,i.recipient),it(o,i.destinationChainId,"u8"),O(o,i.receiveToken),it(o,i.nonce,"u256"),O(o,i.feeSuiCoin),O(o,i.feeTokenCoin)]})}function Oo(o,a,i,r){return o.moveCall({target:`${Ee("bridge",r?.env)}::bridge_interface::swap`,typeArguments:a,arguments:[O(o,i.bridge),O(o,i.coin),it(o,i.receiveAmountMin,"u64")]})}function Qo(o,a,i,r){return o.moveCall({target:`${Ee("bridge",r?.env)}::bridge_interface::deposit`,typeArguments:[a],arguments:[O(o,i.bridge),O(o,i.userDeposit),O(o,i.coin)]})}function Uo(o,a,i,r){return o.moveCall({target:`${Ee("bridge",r?.env)}::bridge_interface::claim_reward`,typeArguments:[a],arguments:[O(o,i.bridge),O(o,i.userDeposit)]})}function Ko(o,a,i,r){return o.moveCall({target:`${Ee("bridge",r?.env)}::bridge_interface::withdraw`,typeArguments:[a],arguments:[O(o,i.bridge),O(o,i.userDeposit),it(o,i.amountLp,"u64")]})}function Do(o,a,i,r){return o.moveCall({target:`${Ee("bridge",r?.env)}::bridge_interface::pool`,typeArguments:[a],arguments:[O(o,i)]})}function Eo(o,a,i){return o.moveCall({target:`${Ee("bridge",i?.env)}::bridge_interface::new_user_deposit`,typeArguments:[a],arguments:[]})}function _o(o,a){mn("cctp-bridge",o,a)}function Cr(o,a,i,r){return o.moveCall({target:`${Ee("cctp-bridge",r?.env)}::cctp_bridge_interface::bridge`,typeArguments:[a],arguments:[O(o,i.cctpBridge),O(o,i.gasOracle),O(o,i.tokenMessengerMinterState),O(o,i.messageTransmitterState),O(o,i.treasury),O(o,i.denyList),O(o,i.amount),O(o,i.feeSuiCoin),O(o,i.feeTokenCoin),it(o,i.destinationChainId,"u8"),O(o,i.recipient),O(o,i.recipientWalletAddress)]})}function $o(o,a){mn("utils",o,a)}import{bcs as gv}from"@mysten/sui/bcs";import{fromBase64 as pv}from"@mysten/sui/utils";import{bcs as Lt}from"@mysten/sui/bcs";import{fromHex as ZA,toHex as GA}from"@mysten/sui/utils";import{bcs as NA}from"@mysten/sui/bcs";var Ir=class o{__VectorClass=!0;static $typeName="vector";static $numTypeParams=1;static $isPhantom=[!1];$typeName="vector";$fullTypeName;$typeArgs;$isPhantom=[!1];elements;constructor(a,i){this.$fullTypeName=ie(this.$typeName,...a),this.$typeArgs=a,this.elements=i}static reified(a){return{typeName:o.$typeName,fullTypeName:ie(o.$typeName,z(a)),typeArgs:[z(a)],isPhantom:o.$isPhantom,reifiedTypeArgs:[a],fromFields:i=>o.fromFields(a,i),fromFieldsWithTypes:i=>o.fromFieldsWithTypes(a,i),fromBcs:i=>o.fromBcs(a,i),bcs:o.bcs(Jn(a)),fromJSONField:i=>o.fromJSONField(a,i),fromJSON:i=>o.fromJSON(a,i),new:i=>new o([z(a)],i),kind:"VectorClassReified"}}static get r(){return o.reified}static get bcs(){return NA.vector}static fromFields(a,i){return o.reified(a).new(i.map(r=>te(a,r)))}static fromFieldsWithTypes(a,i){return o.reified(a).new(i.map(r=>q(a,r)))}static fromBcs(a,i){return o.fromFields(a,o.bcs(Jn(a)).parse(i))}toJSONField(){return this.elements.map(a=>$t(this.$typeArgs[0],a))}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,elements:this.toJSONField()}}static fromJSONField(a,i){return o.reified(a).new(i.map(r=>ee(a,r)))}static fromJSON(a,i){if(i.$typeName!==o.$typeName)throw new Error("not a vector json object");return o.fromJSONField(a,i.elements)}};function bn(o){return Ir.r(o)}function fe(o){return typeof o=="string"?{phantomType:o,kind:"PhantomReified"}:{get phantomType(){return o.fullTypeName},kind:"PhantomReified"}}var VA=Lt.bytes(32).transform({input:o=>ZA(o),output:o=>GA(o)});function Jn(o){switch(o){case"bool":return Lt.bool();case"u8":return Lt.u8();case"u16":return Lt.u16();case"u32":return Lt.u32();case"u64":return Lt.u64();case"u128":return Lt.u128();case"u256":return Lt.u256();case"address":return VA;default:return o.bcs}}function z(o){switch(o){case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"bool":case"address":return o}switch(o.kind){case"PhantomReified":return o.phantomType;case"StructClassReified":return o.fullTypeName;case"VectorClassReified":return o.fullTypeName;case"EnumClassReified":return o.fullTypeName}throw new Error("unreachable")}function te(o,a){switch(o){case"bool":case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return BigInt(a);case"address":return`0x${a}`}if(o.kind==="VectorClassReified")return o.fromFields(a).elements;switch(o.typeName){case"0x1::string::String":case"0x1::ascii::String":return new TextDecoder().decode(Uint8Array.from(a.bytes)).toString();case"0x2::url::Url":return new TextDecoder().decode(Uint8Array.from(a.url.bytes)).toString();case"0x2::object::ID":return`0x${a.bytes}`;case"0x2::object::UID":return`0x${a.id.bytes}`;case"0x1::type_name::TypeName":return new TextDecoder().decode(Uint8Array.from(a.name.bytes)).toString();case"0x1::option::Option":return a.vec.length===0?null:o.fromFields(a).vec[0];default:return o.fromFields(a)}}function q(o,a){switch(o){case"bool":case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return BigInt(a);case"address":return a}if(o.kind==="VectorClassReified")return o.fromFieldsWithTypes(a).elements;switch(o.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":return a;case"0x2::object::UID":return a.id;case"0x1::type_name::TypeName":return a.fields.name;case"0x2::balance::Balance":return o.fromFields({value:BigInt(a)});case"0x1::option::Option":return a===null?null:q(o.reifiedTypeArgs[0],a);default:return o.fromFieldsWithTypes(a)}}function At(o,a,i){if(i.length!==a.length)throw new Error(`provided item has mismatching number of type argments ${o} (expected ${i.length}, got ${a.length}))`);for(let r=0;r<a.length;r++)if(J(a[r])!==J(z(i[r])))throw new Error(`provided item has mismatching type argments ${o} (expected ${z(i[r])}, got ${a[r]}))`)}function It(o,a){let{typeArgs:i}=ue(o.type);At(o.type,i,a)}function $t(o,a){let{typeName:i,typeArgs:r}=ue(o);switch(i){case"bool":return a;case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return a.toString();case"address":case"signer":return a;case"vector":return a.map(s=>$t(r[0],s));case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":case"0x1::type_name::TypeName":return a;case"0x1::option::Option":return a===null?null:$t(r[0],a);default:return a.toJSONField()}}function ee(o,a){switch(o){case"bool":case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return BigInt(a);case"address":return a}if(o.kind==="VectorClassReified")return o.fromJSONField(a).elements;switch(o.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":case"0x1::type_name::TypeName":return a;case"0x1::option::Option":return a===null?null:ee(o.reifiedTypeArgs[0],a);default:return o.fromJSONField(a)}}import{bcs as hr}from"@mysten/sui/bcs";import{fromBase64 as XA}from"@mysten/sui/utils";function jn(o){return o=J(o),o==="0x1::string::String"}var ti=class o{__StructClass=!0;static $typeName="0x1::string::String";static $numTypeParams=0;static $isPhantom=[];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;bytes;constructor(a,i){this.$fullTypeName=ie(o.$typeName,...a),this.$typeArgs=a,this.bytes=i.bytes}static reified(){let a=o.bcs;return{get typeName(){return o.$typeName},get fullTypeName(){return ie(o.$typeName)},typeArgs:[],isPhantom:o.$isPhantom,reifiedTypeArgs:[],fromFields:i=>o.fromFields(i),fromFieldsWithTypes:i=>o.fromFieldsWithTypes(i),fromBcs:i=>o.fromFields(a.parse(i)),bcs:a,fromJSONField:i=>o.fromJSONField(i),fromJSON:i=>o.fromJSON(i),fromCoreObject:i=>o.fromCoreObject(i),fromSuiParsedData:i=>o.fromSuiParsedData(i),fromSuiObjectData:i=>o.fromSuiObjectData(i),fetch:async(i,r)=>o.fetch(i,r),new:i=>new o([],i),kind:"StructClassReified"}}static get r(){return o.reified()}static phantom(){return fe(o.reified())}static get p(){return o.phantom()}static instantiateBcs(){return hr.struct("String",{bytes:hr.vector(hr.u8())})}static cachedBcs=null;static get bcs(){return o.cachedBcs||(o.cachedBcs=o.instantiateBcs()),o.cachedBcs}static fromFields(a){return o.reified().new({bytes:te(bn("u8"),a.bytes)})}static fromFieldsWithTypes(a){if(!jn(a.type))throw new Error("not a String type");return o.reified().new({bytes:q(bn("u8"),a.fields.bytes)})}static fromBcs(a){return o.fromFields(o.bcs.parse(a))}toJSONField(){return{bytes:$t("vector<u8>",this.bytes)}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a){return o.reified().new({bytes:ee(bn("u8"),a.bytes)})}static fromJSON(a){if(a.$typeName!==o.$typeName)throw new Error(`not a String json object: expected '${o.$typeName}' but got '${a.$typeName}'`);return o.fromJSONField(a)}static fromCoreObject(a){if(!jn(a.type))throw new Error(`object at ${a.objectId} is not a String object`);return o.fromBcs(a.content)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!jn(a.type))throw new Error(`object at ${a.fields.id} is not a String object`);return o.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!jn(a.bcs.type))throw new Error("object at is not a String object");return o.fromBcs(XA(a.bcs.bcsBytes))}if(a.content)return o.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,i){let{object:r}=await a.core.getObject({objectId:i,include:{content:!0}});if(!jn(r.type))throw new Error(`object at id ${i} is not a String object`);return o.fromBcs(r.content)}};import{bcs as vr}from"@mysten/sui/bcs";import{fromBase64 as qo,fromHex as PA,toHex as SA}from"@mysten/sui/utils";function zn(o){return o=J(o),o==="0x2::object::ID"}var qt=class o{__StructClass=!0;static $typeName="0x2::object::ID";static $numTypeParams=0;static $isPhantom=[];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;bytes;constructor(a,i){this.$fullTypeName=ie(o.$typeName,...a),this.$typeArgs=a,this.bytes=i.bytes}static reified(){let a=o.bcs;return{get typeName(){return o.$typeName},get fullTypeName(){return ie(o.$typeName)},typeArgs:[],isPhantom:o.$isPhantom,reifiedTypeArgs:[],fromFields:i=>o.fromFields(i),fromFieldsWithTypes:i=>o.fromFieldsWithTypes(i),fromBcs:i=>o.fromFields(a.parse(i)),bcs:a,fromJSONField:i=>o.fromJSONField(i),fromJSON:i=>o.fromJSON(i),fromCoreObject:i=>o.fromCoreObject(i),fromSuiParsedData:i=>o.fromSuiParsedData(i),fromSuiObjectData:i=>o.fromSuiObjectData(i),fetch:async(i,r)=>o.fetch(i,r),new:i=>new o([],i),kind:"StructClassReified"}}static get r(){return o.reified()}static phantom(){return fe(o.reified())}static get p(){return o.phantom()}static instantiateBcs(){return vr.struct("ID",{bytes:vr.bytes(32).transform({input:a=>PA(a),output:a=>SA(a)})})}static cachedBcs=null;static get bcs(){return o.cachedBcs||(o.cachedBcs=o.instantiateBcs()),o.cachedBcs}static fromFields(a){return o.reified().new({bytes:te("address",a.bytes)})}static fromFieldsWithTypes(a){if(!zn(a.type))throw new Error("not a ID type");return o.reified().new({bytes:q("address",a.fields.bytes)})}static fromBcs(a){return o.fromFields(o.bcs.parse(a))}toJSONField(){return{bytes:this.bytes}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a){return o.reified().new({bytes:ee("address",a.bytes)})}static fromJSON(a){if(a.$typeName!==o.$typeName)throw new Error(`not a ID json object: expected '${o.$typeName}' but got '${a.$typeName}'`);return o.fromJSONField(a)}static fromCoreObject(a){if(!zn(a.type))throw new Error(`object at ${a.objectId} is not a ID object`);return o.fromBcs(a.content)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!zn(a.type))throw new Error(`object at ${a.fields.id} is not a ID object`);return o.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!zn(a.bcs.type))throw new Error("object at is not a ID object");return o.fromBcs(qo(a.bcs.bcsBytes))}if(a.content)return o.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,i){let{object:r}=await a.core.getObject({objectId:i,include:{content:!0}});if(!zn(r.type))throw new Error(`object at id ${i} is not a ID object`);return o.fromBcs(r.content)}};function On(o){return o=J(o),o==="0x2::object::UID"}var rt=class o{__StructClass=!0;static $typeName="0x2::object::UID";static $numTypeParams=0;static $isPhantom=[];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;id;constructor(a,i){this.$fullTypeName=ie(o.$typeName,...a),this.$typeArgs=a,this.id=i.id}static reified(){let a=o.bcs;return{get typeName(){return o.$typeName},get fullTypeName(){return ie(o.$typeName)},typeArgs:[],isPhantom:o.$isPhantom,reifiedTypeArgs:[],fromFields:i=>o.fromFields(i),fromFieldsWithTypes:i=>o.fromFieldsWithTypes(i),fromBcs:i=>o.fromFields(a.parse(i)),bcs:a,fromJSONField:i=>o.fromJSONField(i),fromJSON:i=>o.fromJSON(i),fromCoreObject:i=>o.fromCoreObject(i),fromSuiParsedData:i=>o.fromSuiParsedData(i),fromSuiObjectData:i=>o.fromSuiObjectData(i),fetch:async(i,r)=>o.fetch(i,r),new:i=>new o([],i),kind:"StructClassReified"}}static get r(){return o.reified()}static phantom(){return fe(o.reified())}static get p(){return o.phantom()}static instantiateBcs(){return vr.struct("UID",{id:qt.bcs})}static cachedBcs=null;static get bcs(){return o.cachedBcs||(o.cachedBcs=o.instantiateBcs()),o.cachedBcs}static fromFields(a){return o.reified().new({id:te(qt.reified(),a.id)})}static fromFieldsWithTypes(a){if(!On(a.type))throw new Error("not a UID type");return o.reified().new({id:q(qt.reified(),a.fields.id)})}static fromBcs(a){return o.fromFields(o.bcs.parse(a))}toJSONField(){return{id:this.id}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a){return o.reified().new({id:ee(qt.reified(),a.id)})}static fromJSON(a){if(a.$typeName!==o.$typeName)throw new Error(`not a UID json object: expected '${o.$typeName}' but got '${a.$typeName}'`);return o.fromJSONField(a)}static fromCoreObject(a){if(!On(a.type))throw new Error(`object at ${a.objectId} is not a UID object`);return o.fromBcs(a.content)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!On(a.type))throw new Error(`object at ${a.fields.id} is not a UID object`);return o.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!On(a.bcs.type))throw new Error("object at is not a UID object");return o.fromBcs(qo(a.bcs.bcsBytes))}if(a.content)return o.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,i){let{object:r}=await a.core.getObject({objectId:i,include:{content:!0}});if(!On(r.type))throw new Error(`object at id ${i} is not a UID object`);return o.fromBcs(r.content)}};function ct(o,a,i){return o.moveCall({target:`${Ee("utils",i?.env)}::bytes32::from_hex`,arguments:[it(o,a,`${ti.$typeName}`)]})}async function ht(o,a,i=[]){let r=await o(a),s=i.concat(r.data);return r.hasNextPage&&r.nextCursor?ht(o,r.nextCursor,s):s}var yn=class extends Xe{constructor(i,r,s){super();this.nodeRpcUrlsConfig=i;this.params=r;this.api=s;this.client=new kA({url:i.getNodeRpcUrl(this.chainSymbol),network:r.suiIsTestnet?"testnet":"mainnet"})}nodeRpcUrlsConfig;params;api;chainType="SUI";chainSymbol="SUI";client;send(){throw new w("Method send not implemented.")}async buildRawTransactionSwap(i){let r=i.sourceToken.suiAddresses;if(!r)throw new w("SUI token must contain 'suiAddresses'");wt(r.bridgeAddress,r.bridgeAddressOrigin);let s=Ke(this.chainType,i);return await this.buildRawTransactionSwapFromParams(s,r)}async buildRawTransactionSwapFromParams(i,r){let{amount:s,fromAccountAddress:d,fromTokenAddress:A,toTokenAddress:l,minimumReceiveAmount:u}=i,b=new fr;b.setSender(d);let y={bridge:r.bridgeObjectAddress,coin:Re({balance:BigInt(s),type:A}),receiveAmountMin:BigInt(u)},C=Oo(b,[A,l],y),f=await ht(v=>this.client.getCoins({owner:i.toAccountAddress,coinType:l,cursor:v}));return f.length===0||!f[0]?b.transferObjects([C],i.toAccountAddress):b.mergeCoins(f[0].coinObjectId,[C]),await b.toJSON({client:this.client})}async buildRawTransactionSendFromCustomTx(i,r,s){let d=fr.from(i);return this.buildRawTransactionSendFromTx(s,d,r)}async buildRawTransactionSend(i){return this.buildRawTransactionSendFromTx(i,new fr)}async buildRawTransactionSendFromTx(i,r,s){let d=await Oe(this.chainType,i,this.api),{messenger:A}=d,l=i.sourceToken.suiAddresses;if(!l)throw new w("SUI token must contain 'suiAddresses'");switch(wt(l.bridgeAddress,l.bridgeAddressOrigin),$o(l.utilsAddress),A){case 1:return this.buildRawTransactionAllbridgeSend(d,l,r,s);case 2:return this.buildRawTransactionWormholeSend(d,l,r,s);case 3:case 4:return this.buildRawTransactionCctpSend(i,d,l,r,s);case 6:throw new w("Messenger xReserve is not supported for SUI bridge");case 5:throw new Ve("Messenger OFT is not supported yet.")}}async buildRawTransactionAllbridgeSend(i,r,s,d){let{amount:A,fromAccountAddress:l,fromTokenAddress:u,toChainId:b,toAccountAddress:y,toTokenAddress:C,fee:f,gasFeePaymentMethod:v,extraGas:T}=i,F=f;switch(T&&(F=Rr(F).plus(T).toFixed()),s.setSender(l),v){case"native":{let N=F==="0"?Re({balance:BigInt(F),useGasCoin:!1}):Re({balance:BigInt(F)}),G={bridge:r.bridgeObjectAddress,messenger:r.allbridgeMessengerObjectAddress,amount:d??Re({balance:BigInt(A),type:u}),destinationChainId:b,nonce:bt(),recipient:ct(s,ot(y)),receiveToken:ct(s,ot(C)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:Re({balance:BigInt(0),type:u}),feeSuiCoin:N};br(s,u,G);break}case"stablecoin":{let N=BigInt(A)-BigInt(F),G,R;if(d){let[V]=s.splitCoins(d,[F]);G=d,R=V}else G=Re({balance:N,type:u}),R=Re({balance:BigInt(F),type:u});let P={bridge:r.bridgeObjectAddress,messenger:r.allbridgeMessengerObjectAddress,amount:G,destinationChainId:b,nonce:bt(),recipient:ct(s,ot(y)),receiveToken:ct(s,ot(C)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:R,feeSuiCoin:Re({balance:BigInt(0),useGasCoin:!1})};br(s,u,P);break}case"abr":throw new w("SUI bridge does not support ABR payment method");default:return re(v,"Unhandled FeePaymentMethod")}return await s.toJSON({client:this.client})}async buildRawTransactionWormholeSend(i,r,s,d){let{amount:A,fromAccountAddress:l,fromTokenAddress:u,toChainId:b,toAccountAddress:y,toTokenAddress:C,fee:f,gasFeePaymentMethod:v,extraGas:T}=i,F=f;switch(T&&(F=Rr(F).plus(T).toFixed()),s.setSender(l),v){case"native":{let N=F==="0"?Re({balance:BigInt(F),useGasCoin:!1}):Re({balance:BigInt(F)}),G={bridge:r.bridgeObjectAddress,messenger:r.wormholeMessengerObjectAddress,wormholeState:r.wormholeStateObjectAddress,theClock:es,amount:d??Re({balance:BigInt(A),type:u}),destinationChainId:b,nonce:bt(),recipient:ct(s,ot(y)),receiveToken:ct(s,ot(C)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:Re({balance:BigInt(0),type:u}),feeSuiCoin:N};yr(s,u,G);break}case"stablecoin":{let N=BigInt(A)-BigInt(F),G,R;if(d){let[V]=s.splitCoins(d,[F]);G=d,R=V}else G=Re({balance:N,type:u}),R=Re({balance:BigInt(F),type:u});let P={bridge:r.bridgeObjectAddress,messenger:r.wormholeMessengerObjectAddress,wormholeState:r.wormholeStateObjectAddress,theClock:es,amount:G,destinationChainId:b,nonce:bt(),recipient:ct(s,ot(y)),receiveToken:ct(s,ot(C)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:R,feeSuiCoin:Re({balance:BigInt(0),useGasCoin:!1})};yr(s,u,P);break}case"abr":throw new w("SUI bridge does not support ABR payment method");default:return re(v,"Unhandled FeePaymentMethod")}return await s.toJSON({client:this.client})}async buildRawTransactionCctpSend(i,r,s,d,A){let{amount:l,fromAccountAddress:u,fromTokenAddress:b,toChainId:y,toAccountAddress:C,fee:f,gasFeePaymentMethod:v,extraGas:T}=r;_o(s.cctpAddress,s.cctpAddressOrigin);let F=f;T&&(F=Rr(F).plus(T).toFixed()),d.setSender(u);let N=ct(d,ot(C)),G;if(i.destinationToken.chainType==="SOLANA"){let R=await An(this.chainType,i.toAccountAddress,i.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));G=ct(d,ot(R))}else G=N;switch(v){case"native":{let R=F==="0"?Re({balance:BigInt(F),useGasCoin:!1}):Re({balance:BigInt(F)}),P={cctpBridge:s.cctpObjectAddress,tokenMessengerMinterState:s.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:s.cctpMessageTransmitterStateObjectAddress,treasury:s.cctpTreasuryObjectAddress,denyList:s.cctpDenyListObjectAddress,amount:A??Re({balance:BigInt(l),type:b}),destinationChainId:y,recipient:G,recipientWalletAddress:N,gasOracle:s.gasOracleObjectAddress,feeTokenCoin:Re({balance:BigInt(0),type:b}),feeSuiCoin:R};Cr(d,b,P);break}case"stablecoin":{let R=BigInt(l)-BigInt(F),P,V;if(A){let[M]=d.splitCoins(A,[F]);P=A,V=M}else P=Re({balance:R,type:b}),V=Re({balance:BigInt(F),type:b});let S={cctpBridge:s.cctpObjectAddress,tokenMessengerMinterState:s.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:s.cctpMessageTransmitterStateObjectAddress,treasury:s.cctpTreasuryObjectAddress,denyList:s.cctpDenyListObjectAddress,amount:P,destinationChainId:y,recipient:G,recipientWalletAddress:N,gasOracle:s.gasOracleObjectAddress,feeTokenCoin:V,feeSuiCoin:Re({balance:BigInt(0),useGasCoin:!1})};Cr(d,b,S);break}case"abr":throw new w("SUI bridge does not support ABR payment method");default:return re(v,"Unhandled FeePaymentMethod")}return await d.toJSON({client:this.client})}};import{Big as xA}from"big.js";import LA from"bn.js";function ni(o){return"0x"+new LA(o).toString("hex")}function ts(o){return new Promise(a=>setTimeout(()=>a(),o))}async function ai(o,a){let i=await o.trx.sign(a);if(!i.signature)throw new on("Transaction was not signed properly");let s=(await o.trx.sendRawTransaction(i)).transaction.txID;return await MA(o,s),{txId:s}}async function MA(o,a,i=1e4){let r=Date.now();for(;;){if(Date.now()-r>i)throw new Zn("Transaction not found");let s=await o.trx.getUnconfirmedTransactionInfo(a);if(!s?.receipt){await ts(2e3);continue}if(s.receipt.result==="SUCCESS")return s;throw new Zn(`Transaction status is ${s.receipt.result}`)}}var Qn=class extends Xe{constructor(i,r){super();this.tronWeb=i;this.api=r}tronWeb;api;chainType="TRX";async send(i){let r=await Oe(this.chainType,i,this.api),s=await this.buildRawTransactionSendFromParams(i,r);return await ai(this.tronWeb,s)}async buildRawTransactionSwap(i){let r=Ke(this.chainType,i);return await this.buildRawTransactionSwapFromParams(r)}async buildRawTransactionSwapFromParams(i){let{amount:r,contractAddress:s,fromAccountAddress:d,fromTokenAddress:A,toAccountAddress:l,toTokenAddress:u,minimumReceiveAmount:b}=i,y=[{type:"uint256",value:r},{type:"bytes32",value:A},{type:"bytes32",value:u},{type:"address",value:l},{type:"uint256",value:b}];return this.buildRawTransaction(s,"swap(uint256,bytes32,bytes32,address,uint256)",y,"0",d)}async buildRawTransactionSend(i){let r=await Oe(this.chainType,i,this.api);return this.buildRawTransactionSendFromParams(i,r)}async buildRawTransactionSendFromParams(i,r){let{amount:s,contractAddress:d,fromAccountAddress:A,fromTokenAddress:l,toChainId:u,toAccountAddress:b,toTokenAddress:y,messenger:C,fee:f,gasFeePaymentMethod:v,extraGas:T,extraGasDest:F}=r,N=f;T&&(N=xA(N).plus(T).toFixed());let G=bt().toString(),R,P,V;switch(C){case 3:case 4:switch(v){case"native":{R=[{type:"uint256",value:s},{type:"bytes32",value:b},{type:"uint256",value:u},{type:"uint256",value:0}],P=N;break}case"stablecoin":{R=[{type:"uint256",value:s},{type:"bytes32",value:b},{type:"uint256",value:u},{type:"uint256",value:N}],P="0";break}case"abr":throw new w("TRX bridge does not support ABR payment method");default:return re(v,"Unhandled FeePaymentMethod")}V="bridge(uint256,bytes32,uint256,uint256)";break;case 5:switch(v){case"native":{R=[{type:"address",value:i.sourceToken.tokenAddress},{type:"uint256",value:s},{type:"bytes32",value:b},{type:"uint256",value:u},{type:"uint256",value:0},{type:"uint256",value:F??"0"},{type:"uint256",value:"10"}],P=N;break}case"stablecoin":{R=[{type:"address",value:i.sourceToken.tokenAddress},{type:"uint256",value:s},{type:"bytes32",value:b},{type:"uint256",value:u},{type:"uint256",value:N},{type:"uint256",value:F??"0"},{type:"uint256",value:"10"}],P="0";break}case"abr":throw new w("TRX bridge does not support ABR payment method");default:return re(v,"Unhandled FeePaymentMethod")}V="bridge(address,uint256,bytes32,uint256,uint256,uint256,uint256)";break;case 6:throw new w("Messenger xReserve is not supported for TRX bridge");case 1:case 2:switch(v){case"native":{R=[{type:"bytes32",value:l},{type:"uint256",value:s},{type:"bytes32",value:b},{type:"uint256",value:u},{type:"bytes32",value:y},{type:"uint256",value:G},{type:"uint8",value:C},{type:"uint256",value:0}],P=N;break}case"stablecoin":{R=[{type:"bytes32",value:l},{type:"uint256",value:s},{type:"bytes32",value:b},{type:"uint256",value:u},{type:"bytes32",value:y},{type:"uint256",value:G},{type:"uint8",value:C},{type:"uint256",value:N}],P="0";break}case"abr":throw new w("TRX bridge does not support ABR payment method");default:return re(v,"Unhandled FeePaymentMethod")}V="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)";break}return this.buildRawTransaction(d,V,R,P,A)}async buildRawTransaction(i,r,s,d,A){let l=await this.tronWeb.transactionBuilder.triggerSmartContract(i,r,{callValue:+d},s,A);if(!l?.result?.result)throw new w("Unknown error: "+JSON.stringify(l,null,2));return l.transaction}};var ii=class{constructor(a,i,r,s){this.api=a;this.nodeRpcUrlsConfig=i;this.params=r;this.tokenService=s;this.rawTxBuilder=new xa(a,i,r,s)}api;nodeRpcUrlsConfig;params;tokenService;rawTxBuilder;async getAllowance(a,i){let r,s;i?(r=a,s=i):s=a;let d=cn(s.token,s.messenger,s.gasFeePaymentMethod);return await this.tokenService.getAllowance({...s,spender:d},r)}async checkAllowance(a,i){let r,s;i?(r=a,s=i):s=a;let d=cn(s.token,s.messenger,s.gasFeePaymentMethod);return this.tokenService.checkAllowance({...s,spender:d},r)}async approve(a,i){let r=cn(i.token,i.messenger,i.gasFeePaymentMethod);return this.tokenService.approve(a,{...i,spender:r})}async send(a,i){return $(i.amount),D("amount",i.amount,i.sourceToken.decimals),Ha(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).send(i)}};function Ha(o,a,i,r,s){switch(Q.getChainProperty(o).chainType){case"EVM":{if(s)return new Ln(s,a,i);{let d=i.getNodeRpcUrl(o);return new Ln(new JA(d),a,i)}}case"TRX":{if(s)return new Qn(s,a);{let d=i.getNodeRpcUrl(o);return new Qn(new HA({fullHost:d,solidityNode:d,eventServer:d}),a)}}case"SOLANA":return new Ea(i.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:r.wormholeMessengerProgramId,solanaLookUpTable:r.solanaLookUpTable,cctpParams:r.cctpParams,jupiterParams:{jupiterUrl:r.jupiterUrl,jupiterApiKeyHeader:r.jupiterApiKeyHeader,jupiterMaxAccounts:r.jupiterMaxAccounts}},a);case"SRB":return new _a(i,r,a);case"SUI":return new yn(i,r,a);case"ALG":if(s){let d=s,A=ns.fromClients({algod:d});return new Sn(A,a)}else{let d=i.getNodeRpcUrl(o),A=ns.fromConfig({algodConfig:{server:d}});return new Sn(A,a)}case"STX":{let d=i.getNodeRpcUrl(o);return new $a(d,r,a)}}}import{AlgorandClient as gs}from"@algorandfoundation/algokit-utils";import{Big as gc}from"big.js";import lc from"timed-cache";import{TronWeb as pc}from"tronweb";import{FMT_BYTES as uc,FMT_NUMBER as mc,Web3 as bc}from"web3";import{Big as Ft}from"big.js";function as(o,a,i,r,s){let d=j(o,3),A=Ft(d),l=Ft(i),u=Ft(r).plus(s),b,y;if(l.eq(0)||u.eq(0)){let f=A.div(2);b=Ft(r).plus(f),y=Ft(s).plus(f)}else b=Ft(r).plus(A.mul(r).div(u)),y=Ft(s).plus(A.mul(s).div(u));return Ft(qr(a,b.toFixed(),y.toFixed())).minus(l).toFixed()}function is(o){let a=j(o,3);return Ft(a).round().toFixed()}import{assignGroupID as Tr,bytesToBigInt as OA,OnApplicationComplete as rs}from"algosdk";import{getArc56ReturnValue as jA}from"@algorandfoundation/algokit-utils/types/app-arc56";import{AppClient as ri}from"@algorandfoundation/algokit-utils/types/app-client";import{AppFactory as rR}from"@algorandfoundation/algokit-utils/types/app-factory";import{encodeAddress as zA}from"algosdk";var oi={name:"Pool",structs:{},methods:[{name:"createApplication",args:[{type:"address",name:"owner"},{type:"address",name:"router"},{type:"uint64",name:"a"},{type:"uint64",name:"asset"},{type:"uint64",name:"feeShareBP"},{type:"uint64",name:"balanceRatioMinBP"}],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}},{name:"optInToApplication",args:[],returns:{type:"void"},actions:{create:[],call:["OptIn"]},readonly:!1,events:[],recommendations:{}},{name:"closeOutOfApplication",args:[{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAC7g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["CloseOut"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"optInAsset",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,desc:"Opt-in the application account to the ASA stored in `this.asset`.\nThis performs an inner axfer of 0 to the app's own address.\nCall once after deploy (or whenever you change the asset).",events:[],recommendations:{}},{name:"deposit",args:[{type:"axfer",name:"assetTransferRef"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAC7g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp","OptIn"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"withdraw",args:[{type:"uint64",name:"amountLp",desc:"The Withdrawn amount"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAC7g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"swapToVUsd",args:[{type:"address",name:"user",desc:"The address of the sender."},{type:"uint64",name:"amount",desc:"The amount of tokens to swap."},{type:"bool",name:"zeroFee",desc:`When true it allows to swap without incurring any fees. It is intended for use with service
|
|
2
2
|
accounts.`}],returns:{type:"uint64",desc:"returns the difference between the old and the new value of vUsdBalance"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"SwappedToVUsd",args:[{type:"address",name:"sender"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"vUsdAmount"},{type:"uint64",name:"fee"}]}],recommendations:{}},{name:"swapFromVUsd",args:[{type:"address",name:"user",desc:"The address of the recipient."},{type:"uint64",name:"amount",desc:"The amount of vUSD to swap."},{type:"uint64",name:"receiveAmountMin",desc:`The minimum amount of tokens required to be received during the swap, otherwise the
|
|
3
3
|
transaction reverts.`},{type:"bool",name:"zeroFee",desc:`When true it allows to swap without incurring any fees. It is intended for use with service
|
|
4
4
|
accounts.`}],returns:{type:"uint64",desc:"returns the difference between the old and the new value of vUsdBalance"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"SwappedFromVUsd",args:[{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"vUsdAmount"},{type:"uint64",name:"amount"},{type:"uint64",name:"fee"}]}],recommendations:{}},{name:"setFeeShare",args:[{type:"uint64",name:"feeShareBP"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"adjustTotalLpAmount",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"setBalanceRatioMinBP",args:[{type:"uint64",name:"balanceRatioMinBP"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"stopDeposit",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"startDeposit",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"stopWithdraw",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"startWithdraw",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setStopAuthority",args:[{type:"address",name:"stopAuthority"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setRouter",args:[{type:"address",name:"router"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"claimRewards",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]}],recommendations:{}},{name:"setAdminFeeShare",args:[{type:"uint64",name:"adminFeeShareBP"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"claimAdminFee",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"pendingReward",args:[{type:"address",name:"user"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"transferOwnership",args:[{type:"address",name:"newOwner"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}}],arcs:[22,28],desc:`4AD - D = 4A(x + y) - (D\xB3 / 4xy)
|
|
5
5
|
X - is value of real stable token
|
|
6
|
-
Y - is value of virtual usd`,networks:{},state:{schema:{global:{ints:15,bytes:4},local:{ints:2,bytes:0}},keys:{global:{feeShareBP:{keyType:"AVMString",valueType:"AVMUint64",key:"ZmVlU2hhcmVCUA=="},router:{keyType:"AVMString",valueType:"address",key:"cm91dGVy"},tokenBalance:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5CYWxhbmNl"},vUsdBalance:{keyType:"AVMString",valueType:"AVMUint64",key:"dlVzZEJhbGFuY2U="},balanceRatioMinBP:{keyType:"AVMString",valueType:"AVMUint64",key:"YmFsYW5jZVJhdGlvTWluQlA="},reserves:{keyType:"AVMString",valueType:"AVMUint64",key:"cmVzZXJ2ZXM="},a:{keyType:"AVMString",valueType:"AVMUint64",key:"YQ=="},d:{keyType:"AVMString",valueType:"AVMUint64",key:"ZA=="},tokenAmountReduce:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5BbW91bnRSZWR1Y2U="},tokenAmountIncrease:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5BbW91bnRJbmNyZWFzZQ=="},stopAuthority:{keyType:"AVMString",valueType:"address",key:"c3RvcEF1dGhvcml0eQ=="},canDeposit:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuRGVwb3NpdA=="},canWithdraw:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuV2l0aGRyYXc="},asset:{keyType:"AVMString",valueType:"AVMUint64",key:"YXNzZXQ="},adminFeeShareBP:{keyType:"AVMString",valueType:"AVMUint64",key:"YWRtaW5GZWVTaGFyZUJQ"},totalSupply:{keyType:"AVMString",valueType:"AVMUint64",key:"dG90YWxTdXBwbHk="},accRewardPerShareP:{keyType:"AVMString",valueType:"AVMBytes",key:"YWNjUmV3YXJkUGVyU2hhcmVQ"},adminFeeAmount:{keyType:"AVMString",valueType:"AVMUint64",key:"YWRtaW5GZWVBbW91bnQ="},owner:{keyType:"AVMString",valueType:"address",key:"b3duZXI="}},local:{balance:{keyType:"AVMString",valueType:"AVMUint64",key:"YmFsYW5jZQ=="},userRewardDebt:{keyType:"AVMString",valueType:"AVMUint64",key:"dXNlclJld2FyZERlYnQ="}},box:{}},maps:{global:{},local:{},box:{}}},bareActions:{create:[],call:[]},sourceInfo:{approval:{sourceInfo:[{pc:[2040],errorMessage:'"Pool: withdraw prohibited'},{pc:[984],errorMessage:"Asset must go to app"},{pc:[998],errorMessage:"CloseTo not allowed"},{pc:[548],errorMessage:"OnCompletion must be CloseOut && can only call when not creating"},{pc:[372],errorMessage:"OnCompletion must be NoOp"},{pc:[559],errorMessage:"OnCompletion must be OptIn && can only call when not creating"},{pc:[536],errorMessage:"OnCompletion must be one of NoOp, OptIn && can only call when not creating"},{pc:[3277],errorMessage:"Only owner"},{pc:[955],errorMessage:"Pool: deposit prohibited"},{pc:[1959],errorMessage:"Pool: is not stopAuthority"},{pc:[2024],errorMessage:"Pool: low token balance"},{pc:[2e3],errorMessage:"Pool: low vUSD balance"},{pc:[1949],errorMessage:"Pool: only router"},{pc:[1480,2289],errorMessage:"Pool: reserves"},{pc:[1521],errorMessage:"Pool: slippage"},{pc:[1605,1667],errorMessage:"Pool: too large"},{pc:[1008],errorMessage:"Pool: too little"},{pc:[1100],errorMessage:"Pool: too much"},{pc:[2308],errorMessage:"Pool: zero D changes"},{pc:[2278],errorMessage:"Pool: zero changes"},{pc:[991],errorMessage:"Rekey not allowed"},{pc:[855],errorMessage:"RewardManager: claim rewards before close out"},{pc:[2061],errorMessage:"RewardManager: not enough amount"},{pc:[1851],errorMessage:"RewardManager: too high"},{pc:[850],errorMessage:"RewardManager: withdraw LP before close out"},{pc:[977],errorMessage:"Wrong asset"},{pc:[757],errorMessage:"asset exists"},{pc:[750,865,954,966,975,1013,1028,1038,1057,1067,1081,1091,1106,1144,1243,1274,1285,1294,1304,1312,1329,1426,1449,1471,1496,1526,1549,1623,1634,1767,1804,1869,1877,1882,1947,1957,1971,1981,1998,2022,2039,2045,2069,2122,2154,2206,2210,2248,2275,2283,2304,2313,2349,2358,2506,2511,2519,2627,2635,2676,2684,3037,3065,3073,3091,3111,3125,3186,3220,3275],errorMessage:"check GlobalState exists"},{pc:[832,848,1757,1784,2056,2093,2108,3031,3051,3136,3158,3172],errorMessage:"check LocalState exists"},{pc:[1220,1407],errorMessage:"invalid number of bytes for arc4.bool"},{pc:[669,677,1202,1379,1717,1734,1912,1931],errorMessage:"invalid number of bytes for arc4.static_array<arc4.uint8, 32>"},{pc:[685,694,703,712,820,932,1177,1186,1210,1387,1397,1596,1658,1842],errorMessage:"invalid number of bytes for arc4.uint64"},{pc:[2724],errorMessage:"n must be non-negative"},{pc:[1127,1158,2230,2262],errorMessage:"overflow"},{pc:[924],errorMessage:"transaction type is axfer"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDggMzIgMTAwMDAKICAgIGJ5dGVjYmxvY2sgInRva2VuQmFsYW5jZSIgInZVc2RCYWxhbmNlIiAiYXNzZXQiICJiYWxhbmNlIiAicmVzZXJ2ZXMiICJ1c2VyUmV3YXJkRGVidCIgImQiICJ0b3RhbFN1cHBseSIgImFjY1Jld2FyZFBlclNoYXJlUCIgMHgwMTAwMDAwMDAwMDAwMCAweDAxICJhZG1pbkZlZUFtb3VudCIgImNhbkRlcG9zaXQiICJjYW5XaXRoZHJhdyIgIm93bmVyIiAiZmVlU2hhcmVCUCIgImJhbGFuY2VSYXRpb01pbkJQIiAweDAyICJhZG1pbkZlZVNoYXJlQlAiICJhIiAicm91dGVyIiAic3RvcEF1dGhvcml0eSIgInRva2VuQW1vdW50UmVkdWNlIiAidG9rZW5BbW91bnRJbmNyZWFzZSIgMHgxNTFmN2M3NSAweGJhODE4MDc2IDB4MDMgMHgwNjgxMDEgMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOAogICAgLy8gYWRtaW5GZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogQlAgLyA1IH0pOyAvLyBEZWZhdWx0IGFkbWluIGZlZSBpcyAyMCUKICAgIGJ5dGVjIDE4IC8vICJhZG1pbkZlZVNoYXJlQlAiCiAgICBwdXNoaW50IDIwMDAgLy8gMjAwMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgcHVzaGJ5dGVzIDB4CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzgKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgcHVzaGJ5dGVzcyAweDAxYTNhM2ZmIDB4MDQ1OWI3YWMgMHg5YjRiODIzNCAvLyBtZXRob2QgIm9wdEluVG9BcHBsaWNhdGlvbigpdm9pZCIsIG1ldGhvZCAiY2xvc2VPdXRPZkFwcGxpY2F0aW9uKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJkZXBvc2l0KGF4ZmVyLHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9vcHRJblRvQXBwbGljYXRpb25fcm91dGVANCBtYWluX2Nsb3NlT3V0T2ZBcHBsaWNhdGlvbl9yb3V0ZUA1IG1haW5fZGVwb3NpdF9yb3V0ZUA2CgptYWluX3N3aXRjaF9jYXNlX25leHRANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4CiAgICAvLyBleHBvcnQgY2xhc3MgUG9vbCBleHRlbmRzIFJld2FyZE1hbmFnZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAyOAogICAgcHVzaGJ5dGVzcyAweDc2MTBhNDYwIDB4ZTNhZWIyNWMgMHhkOTc4YWQxNCAweDBkMWI0YzA2IDB4NzViZjlhMjggMHhmNDkzZDdlZCAweDhkNWNiNmRmIDB4ZmUwNGE1Y2UgMHgwMjhlMDg1OSAweDQxZmM5NjZlIDB4YWJmMjAwMTQgMHgwNGIxNjFmMSAweDY2NTkxY2NmIDB4YTVhZTZiZDEgMHhhMDRjNWJjNCAweDM2MWI2MTU5IDB4NTM4ZTkxMjcgMHhlMTdiYWZiNCAvLyBtZXRob2QgIm9wdEluQXNzZXQoKXZvaWQiLCBtZXRob2QgIndpdGhkcmF3KHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAic3dhcFRvVlVzZChhZGRyZXNzLHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic3dhcEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic2V0RmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImFkanVzdFRvdGFsTHBBbW91bnQoKXZvaWQiLCBtZXRob2QgInNldEJhbGFuY2VSYXRpb01pbkJQKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJzdG9wRGVwb3NpdCgpdm9pZCIsIG1ldGhvZCAic3RhcnREZXBvc2l0KCl2b2lkIiwgbWV0aG9kICJzdG9wV2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInN0YXJ0V2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInNldFN0b3BBdXRob3JpdHkoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJzZXRSb3V0ZXIoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJjbGFpbVJld2FyZHMoKXZvaWQiLCBtZXRob2QgInNldEFkbWluRmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImNsYWltQWRtaW5GZWUoKXZvaWQiLCBtZXRob2QgInBlbmRpbmdSZXdhcmQoYWRkcmVzcyl1aW50NjQiLCBtZXRob2QgInRyYW5zZmVyT3duZXJzaGlwKGFkZHJlc3Mpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG9wdEluQXNzZXQgd2l0aGRyYXcgc3dhcFRvVlVzZCBzd2FwRnJvbVZVc2Qgc2V0RmVlU2hhcmUgYWRqdXN0VG90YWxMcEFtb3VudCBzZXRCYWxhbmNlUmF0aW9NaW5CUCBzdG9wRGVwb3NpdCBzdGFydERlcG9zaXQgc3RvcFdpdGhkcmF3IHN0YXJ0V2l0aGRyYXcgc2V0U3RvcEF1dGhvcml0eSBzZXRSb3V0ZXIgY2xhaW1SZXdhcmRzIHNldEFkbWluRmVlU2hhcmUgY2xhaW1BZG1pbkZlZSBwZW5kaW5nUmV3YXJkIHRyYW5zZmVyT3duZXJzaGlwCiAgICBlcnIKCm1haW5fY3JlYXRlX05vT3BAMjg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOAogICAgLy8gZXhwb3J0IGNsYXNzIFBvb2wgZXh0ZW5kcyBSZXdhcmRNYW5hZ2VyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICBwdXNoYnl0ZXMgMHg1MTZkMzQ3YiAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGNyZWF0ZUFwcGxpY2F0aW9uCiAgICBlcnIKCm1haW5fZGVwb3NpdF9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ05vT3AnLCAnT3B0SW4nXSwgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICBpbnRjXzEgLy8gMQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgc2hsCiAgICBwdXNoaW50IDMgLy8gMwogICAgJgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgb25lIG9mIE5vT3AsIE9wdEluICYmIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGIgZGVwb3NpdAoKbWFpbl9jbG9zZU91dE9mQXBwbGljYXRpb25fcm91dGVANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDIgLy8gQ2xvc2VPdXQKICAgID09CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBDbG9zZU91dCAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBiIGNsb3NlT3V0T2ZBcHBsaWNhdGlvbgoKbWFpbl9vcHRJblRvQXBwbGljYXRpb25fcm91dGVANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjczCiAgICAvLyBvcHRJblRvQXBwbGljYXRpb24oKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gT3B0SW4KICAgID09CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBPcHRJbiAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBiIG9wdEluVG9BcHBsaWNhdGlvbgoKCi8vIF9wdXlhX2xpYi51dGlsLmVuc3VyZV9idWRnZXQocmVxdWlyZWRfYnVkZ2V0OiB1aW50NjQsIGZlZV9zb3VyY2U6IHVpbnQ2NCkgLT4gdm9pZDoKZW5zdXJlX2J1ZGdldDoKICAgIHByb3RvIDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICArCgplbnN1cmVfYnVkZ2V0X3doaWxlX3RvcEAxOgogICAgZnJhbWVfZGlnIDAKICAgIGdsb2JhbCBPcGNvZGVCdWRnZXQKICAgID4KICAgIGJ6IGVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANgogICAgaXR4bl9iZWdpbgogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIHB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGJ5dGVjIDI3IC8vIDB4MDY4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQogICAgYnl0ZWMgMjcgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KICAgIGZyYW1lX2RpZyAtMQogICAgc3dpdGNoIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0CgplbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANToKICAgIGl0eG5fc3VibWl0CiAgICBiIGVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDEKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0OgogICAgZ2xvYmFsIE1pblR4bkZlZQogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDUKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzOgogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBiIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA1CgplbnN1cmVfYnVkZ2V0X2FmdGVyX3doaWxlQDY6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6OmJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyh2OiBieXRlcykgLT4gdWludDY0OgpiaWd1aW50VG9VaW50NjRNb2R1bG86CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MTUKICAgIC8vIGV4cG9ydCBmdW5jdGlvbiBiaWd1aW50VG9VaW50NjRNb2R1bG8odjogYmlndWludCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoxNwogICAgLy8gY29uc3QgbGVuID0gb3AubGVuKGIpOwogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjE4CiAgICAvLyBjb25zdCBzdGFydDogdWludDY0ID0gbGVuID4gOCA/IChsZW4gLSA4KSA6IDA7CiAgICBpbnRjXzIgLy8gOAogICAgPgogICAgYnogYmlndWludFRvVWludDY0TW9kdWxvX3Rlcm5hcnlfZmFsc2VAMgogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMiAvLyA4CiAgICAtCgpiaWd1aW50VG9VaW50NjRNb2R1bG9fdGVybmFyeV9tZXJnZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjE5CiAgICAvLyBjb25zdCBsYXN0OCA9IGIuc2xpY2Uoc3RhcnQpOyAgICAgICAgICAgLy8ga2VlcCBsZWFzdC1zaWduaWZpY2FudCA4IGJ5dGVzCiAgICBkdXAKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGNvdmVyIDMKICAgID49CiAgICBkaWcgMgogICAgc3dhcAogICAgc2VsZWN0CiAgICBmcmFtZV9kaWcgLTEKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShsYXN0OCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gdWludDY0CiAgICBidG9pCiAgICBzd2FwCiAgICByZXRzdWIKCmJpZ3VpbnRUb1VpbnQ2NE1vZHVsb190ZXJuYXJ5X2ZhbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MTgKICAgIC8vIGNvbnN0IHN0YXJ0OiB1aW50NjQgPSBsZW4gPiA4ID8gKGxlbiAtIDgpIDogMDsKICAgIGludGNfMCAvLyAwCiAgICBiIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsb190ZXJuYXJ5X21lcmdlQDMKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5jcmVhdGVBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZUFwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIGNyZWF0ZUFwcGxpY2F0aW9uKG93bmVyOiBBZGRyZXNzLCByb3V0ZXI6IEFkZHJlc3MsIGE6IHVpbnQ2NCwgYXNzZXQ6IEFzc2V0LCBmZWVTaGFyZUJQOiB1aW50NjQsIGJhbGFuY2VSYXRpb01pbkJQOiB1aW50NjQpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgYnl0ZWMgMTQgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6OQogICAgLy8gdGhpcy5vd25lci52YWx1ZSA9IG93bmVyOwogICAgZGlnIDYKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozOAogICAgLy8gdGhpcy5hc3NldC52YWx1ZSA9IGFzc2V0OwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTAKICAgIC8vIGEgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxOSAvLyAiYSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyB0aGlzLmEudmFsdWUgPSBhOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDUKICAgIC8vIHJvdXRlciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gaXMgZGVwb3NpdCBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMjAgLy8gInJvdXRlciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjYzCiAgICAvLyB0aGlzLnJvdXRlci52YWx1ZSA9IHJvdXRlcjsKICAgIHVuY292ZXIgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU2CiAgICAvLyBwcml2YXRlIHN0b3BBdXRob3JpdHkgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDIxIC8vICJzdG9wQXV0aG9yaXR5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IG93bmVyOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIGZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxNSAvLyAiZmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY1CiAgICAvLyB0aGlzLmZlZVNoYXJlQlAudmFsdWUgPSBmZWVTaGFyZUJQOwogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUgPSBiYWxhbmNlUmF0aW9NaW5CUDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OAogICAgLy8gY29uc3QgZGVjaW1hbHMgPSB0aGlzLmFzc2V0LnZhbHVlLmRlY2ltYWxzOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjgKICAgIC8vIGNvbnN0IGRlY2ltYWxzID0gdGhpcy5hc3NldC52YWx1ZS5kZWNpbWFsczsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZSA9IGRlY2ltYWxzID4gU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChkZWNpbWFscyAtIFNZU1RFTV9QUkVDSVNJT04pIDogMDsKICAgIHB1c2hpbnQgMyAvLyAzCiAgICA+CiAgICBieiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X2ZhbHNlQDMKICAgIGR1cAogICAgcHVzaGludCAzIC8vIDMKICAgIC0KICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTMKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRSZWR1Y2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAyMiAvLyAidG9rZW5BbW91bnRSZWR1Y2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZSA9IGRlY2ltYWxzID4gU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChkZWNpbWFscyAtIFNZU1RFTV9QUkVDSVNJT04pIDogMDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3MAogICAgLy8gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlID0gZGVjaW1hbHMgPCBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKFNZU1RFTV9QUkVDSVNJT04gLSBkZWNpbWFscykgOiAwOwogICAgZHVwCiAgICBwdXNoaW50IDMgLy8gMwogICAgPAogICAgYnogY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUA2CiAgICBwdXNoaW50IDMgLy8gMwogICAgZGlnIDEKICAgIC0KICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRJbmNyZWFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIzIC8vICJ0b2tlbkFtb3VudEluY3JlYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2MAogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIHJvdXRlcjogQWRkcmVzcywgYTogdWludDY0LCBhc3NldDogQXNzZXQsIGZlZVNoYXJlQlA6IHVpbnQ2NCwgYmFsYW5jZVJhdGlvTWluQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIGludGNfMCAvLyAwCiAgICBiIGNyZWF0ZUFwcGxpY2F0aW9uX3Rlcm5hcnlfbWVyZ2VANwoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWUgPSBkZWNpbWFscyA+IFNZU1RFTV9QUkVDSVNJT04gPyAxMCAqKiAoZGVjaW1hbHMgLSBTWVNURU1fUFJFQ0lTSU9OKSA6IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X21lcmdlQDQKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5vcHRJblRvQXBwbGljYXRpb25bcm91dGluZ10oKSAtPiB2b2lkOgpvcHRJblRvQXBwbGljYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3NAogICAgLy8gc3VwZXIub3B0SW5Ub0FwcGxpY2F0aW9uKFR4bi5zZW5kZXIpOwogICAgdHhuIFNlbmRlcgogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3MwogICAgLy8gb3B0SW5Ub0FwcGxpY2F0aW9uKCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmNsb3NlT3V0T2ZBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsb3NlT3V0T2ZBcHBsaWNhdGlvbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo4NgogICAgLy8gY29uc3Qgc2VuZGVyID0gVHhuLnNlbmRlcjsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIGNvbnN0IGxwQmFsYW5jZTogdWludDY0ID0gdGhpcy5iYWxhbmNlKHNlbmRlcikudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIGNvbnN0IGxwQmFsYW5jZTogdWludDY0ID0gdGhpcy5iYWxhbmNlKHNlbmRlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo5MAogICAgLy8gaWYgKGxwQmFsYW5jZSA+IDApIHsKICAgIGJ6IGNsb3NlT3V0T2ZBcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjkxCiAgICAvLyB0aGlzLndpdGhkcmF3KGxwQmFsYW5jZSwgYnVkZ2V0KTsKICAgIGR1cAogICAgZGlnIDMKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXcKCmNsb3NlT3V0T2ZBcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTEKICAgIC8vIGNvbnN0IGxwQW1vdW50ID0gdGhpcy5iYWxhbmNlKGZyb20pLnZhbHVlOwogICAgZGlnIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1MQogICAgLy8gY29uc3QgbHBBbW91bnQgPSB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1MgogICAgLy8gYXNzZXJ0KGxwQW1vdW50ID09PSAwLCAnUmV3YXJkTWFuYWdlcjogd2l0aGRyYXcgTFAgYmVmb3JlIGNsb3NlIG91dCcpOwogICAgIQogICAgYXNzZXJ0IC8vIFJld2FyZE1hbmFnZXI6IHdpdGhkcmF3IExQIGJlZm9yZSBjbG9zZSBvdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NAogICAgLy8gY29uc3QgcGVuZGluZyA9IHRoaXMucGVuZGluZ1Jld2FyZChmcm9tKTsKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLnBlbmRpbmdSZXdhcmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NQogICAgLy8gYXNzZXJ0KHBlbmRpbmcgPT09IDAsICdSZXdhcmRNYW5hZ2VyOiBjbGFpbSByZXdhcmRzIGJlZm9yZSBjbG9zZSBvdXQnKTsKICAgICEKICAgIGFzc2VydCAvLyBSZXdhcmRNYW5hZ2VyOiBjbGFpbSByZXdhcmRzIGJlZm9yZSBjbG9zZSBvdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wub3B0SW5Bc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdEluQXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTA2LTExMgogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDgKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEwOAogICAgLy8geGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjExMAogICAgLy8gYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDkKICAgIC8vIGFzc2V0QW1vdW50OiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDYtMTExCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIH0pCiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDYtMTEyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTQKICAgIC8vIGxvZygnUG9vbDogb3B0LWluIGNvbXBsZXRlZCcpOwogICAgcHVzaGJ5dGVzICJQb29sOiBvcHQtaW4gY29tcGxldGVkIgogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDIKICAgIC8vIG9wdEluQXNzZXQoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuZGVwb3NpdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmRlcG9zaXQ6CiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cG4gNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ05vT3AnLCAnT3B0SW4nXSwgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNTIKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU1CiAgICAvLyBpZiAoVHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5PcHRJbikgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieiBkZXBvc2l0X2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU2CiAgICAvLyBzdXBlci5vcHRJblRvQXBwbGljYXRpb24oVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5vcHRJblRvQXBwbGljYXRpb24KCmRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTM5CiAgICAvLyBhc3NlcnQodGhpcy5jYW5EZXBvc2l0LnZhbHVlLCAnUG9vbDogZGVwb3NpdCBwcm9oaWJpdGVkJyk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzOQogICAgLy8gYXNzZXJ0KHRoaXMuY2FuRGVwb3NpdC52YWx1ZSwgJ1Bvb2w6IGRlcG9zaXQgcHJvaGliaXRlZCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGFzc2VydCAvLyBQb29sOiBkZXBvc2l0IHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2MQogICAgLy8gY29uc3Qgb2xkRCA9IHRoaXMuZC52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTYxCiAgICAvLyBjb25zdCBvbGREID0gdGhpcy5kLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSA2CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldC5pZCA9PT0gdGhpcy5hc3NldC52YWx1ZS5pZCwgYFdyb25nIGFzc2V0YCk7CiAgICBkaWcgMQogICAgZHVwCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gYXNzZXJ0KGFzc2V0VHJhbnNmZXJSZWYueGZlckFzc2V0LmlkID09PSB0aGlzLmFzc2V0LnZhbHVlLmlkLCBgV3JvbmcgYXNzZXRgKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIGFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjQKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLmFzc2V0UmVjZWl2ZXIgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLCBgQXNzZXQgbXVzdCBnbyB0byBhcHBgKTsKICAgIGR1cAogICAgZ3R4bnMgQXNzZXRSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gQXNzZXQgbXVzdCBnbyB0byBhcHAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoyNwogICAgLy8gYXNzZXJ0KGFzc2V0VHJhbnNmZXJUeG4ucmVrZXlUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLCBgUmVrZXkgbm90IGFsbG93ZWRgKTsKICAgIGR1cAogICAgZ3R4bnMgUmVrZXlUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIFJla2V5IG5vdCBhbGxvd2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjgKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLmFzc2V0Q2xvc2VUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLCBgQ2xvc2VUbyBub3QgYWxsb3dlZGApOwogICAgZHVwCiAgICBndHhucyBBc3NldENsb3NlVG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBDbG9zZVRvIG5vdCBhbGxvd2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjkKICAgIC8vIHJldHVybiBhc3NldFRyYW5zZmVyVHhuLmFzc2V0QW1vdW50OwogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2NQogICAgLy8gY29uc3QgYW1vdW50U1AgPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCk7CiAgICBjYWxsc3ViIHRvU3lzdGVtUHJlY2lzaW9uCiAgICBkdXAKICAgIGJ1cnkgOAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTY2CiAgICAvLyBhc3NlcnQoYW1vdW50U1AgPiAwLCAnUG9vbDogdG9vIGxpdHRsZScpOwogICAgZHVwCiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIGxpdHRsZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTY5CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudFNQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2OQogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRTUDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNjkKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgKz0gYW1vdW50U1A7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTcxCiAgICAvLyBjb25zdCB0b2tlbkJhbGFuY2UgPSB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBidXJ5IDYKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MgogICAgLy8gY29uc3QgdlVzZEJhbGFuY2UgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MgogICAgLy8gY29uc3QgdlVzZEJhbGFuY2UgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSA2CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzQKICAgIC8vIGNvbnN0IG9sZEJhbGFuY2U6IHVpbnQ2NCA9ICh0b2tlbkJhbGFuY2UgKyB2VXNkQmFsYW5jZSk7CiAgICArCiAgICBidXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3NQogICAgLy8gaWYgKG9sZEQgPT09IDAgfHwgb2xkQmFsYW5jZSA9PT0gMCkgewogICAgYnogZGVwb3NpdF9pZl9ib2R5QDUKICAgIGRpZyA0CiAgICBibnogZGVwb3NpdF9lbHNlX2JvZHlANgoKZGVwb3NpdF9pZl9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzcKICAgIC8vIGNvbnN0IGhhbGZBbW91bnQ6IHVpbnQ2NCA9IGFtb3VudFNQID4+IDE7CiAgICBkaWcgNQogICAgaW50Y18xIC8vIDEKICAgIHNocgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBoYWxmQW1vdW50OwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBoYWxmQW1vdW50OwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3OAogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgpkZXBvc2l0X2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NQogICAgLy8gdGhpcy51cGRhdGVEKCk7CiAgICBjYWxsc3ViIHVwZGF0ZUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gdGhpcy5kZXBvc2l0THAoVHhuLnNlbmRlciwgdGhpcy5kLnZhbHVlIC0gb2xkRCk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gdGhpcy5kZXBvc2l0THAoVHhuLnNlbmRlciwgdGhpcy5kLnZhbHVlIC0gb2xkRCk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDUKICAgIC0KICAgIGNhbGxzdWIgZGVwb3NpdExwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODkKICAgIC8vIGFzc2VydCh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSA8IE1BWF9UT0tFTl9CQUxBTkNFLCAnUG9vbDogdG9vIG11Y2gnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4OQogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIDwgTUFYX1RPS0VOX0JBTEFOQ0UsICdQb29sOiB0b28gbXVjaCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHB1c2hpbnQgMTA5OTUxMTYyNzc3NiAvLyAxMDk5NTExNjI3Nzc2CiAgICA8CiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIG11Y2gKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1MAogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogWydOb09wJywgJ09wdEluJ10sIGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAzMDAwIH0gfSB9KQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZGVwb3NpdF9lbHNlX2JvZHlANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4MgogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudFNQKSAqIEJpZ1VpbnQodG9rZW5CYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgyCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBuZXcgVWludDw2ND4oKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh0b2tlbkJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDYKICAgIGl0b2IKICAgIGRpZyA0CiAgICBpdG9iCiAgICBkaWcgMQogICAgYioKICAgIGRpZyA3CiAgICBpdG9iCiAgICBzd2FwCiAgICBkaWcgMQogICAgYi8KICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDgKICAgIGJ6ZXJvCiAgICBzd2FwCiAgICBkaWcgMQogICAgYnwKICAgIGJ0b2kKICAgIHVuY292ZXIgNAogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODIKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRTUCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudFNQKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgzCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlICs9IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRTUCkgKiBCaWdVaW50KHZVc2RCYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyA1CiAgICBpdG9iCiAgICB1bmNvdmVyIDQKICAgIGIqCiAgICB1bmNvdmVyIDMKICAgIGIvCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIHVuY292ZXIgMgogICAgYnwKICAgIGJ0b2kKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4MwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBuZXcgVWludDw2ND4oKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh2VXNkQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIGRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUA3CgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdbcm91dGluZ10oKSAtPiB2b2lkOgp3aXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5NwogICAgLy8gQGFiaW1ldGhvZCh7IGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAzMDAwIH0gfSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhdwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN3YXBUb1ZVc2Rbcm91dGluZ10oKSAtPiB2b2lkOgpzd2FwVG9WVXNkOgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNDUtMjQ5CiAgICAvLyBzd2FwVG9WVXNkKAogICAgLy8gICB1c2VyOiBBZGRyZXNzLAogICAgLy8gICBhbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gdGhpcy5vbmx5Um91dGVyKCk7CiAgICBjYWxsc3ViIG9ubHlSb3V0ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1MgogICAgLy8gbGV0IHJlc3VsdDogdWludDY0ID0gMDsgLy8gMCBieSBkZWZhdWx0CiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjUzCiAgICAvLyBsZXQgZmVlOiB1aW50NjQgPSAwOwogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1NAogICAgLy8gaWYgKGFtb3VudCA+IDApIHsKICAgIGJ6IHN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNTUKICAgIC8vIGlmICghemVyb0ZlZSkgewogICAgZGlnIDIKICAgIGJueiBzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjU2CiAgICAvLyBmZWUgPSAoYW1vdW50ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyBmZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTUgLy8gImZlZVNoYXJlQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNTYKICAgIC8vIGZlZSA9IChhbW91bnQgKiB0aGlzLmZlZVNoYXJlQlAudmFsdWUpIC8gQlA7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDQKICAgICoKICAgIGludGMgNCAvLyAxMDAwMAogICAgLwogICAgYnVyeSAxCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1OAogICAgLy8gY29uc3QgYW1vdW50SW4gPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCAtIGZlZSk7CiAgICBkaWcgMwogICAgZHVwCiAgICBkaWcgMgogICAgLQogICAgY2FsbHN1YiB0b1N5c3RlbVByZWNpc2lvbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjYwCiAgICAvLyBmZWUgPSBhbW91bnQgLSB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50SW4pOwogICAgZHVwCiAgICBjYWxsc3ViIGZyb21TeXN0ZW1QcmVjaXNpb24KICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgLQogICAgYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGFtb3VudEluOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjYzCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBhbW91bnRJbjsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkaWcgMQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGFtb3VudEluOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NAogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRJbjsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgKz0gYW1vdW50SW47CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDQgLy8gInJlc2VydmVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudEluOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NgogICAgLy8gY29uc3QgdlVzZE5ld0Ftb3VudCA9IHRoaXMuZ2V0WSh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjYKICAgIC8vIGNvbnN0IHZVc2ROZXdBbW91bnQgPSB0aGlzLmdldFkodGhpcy50b2tlbkJhbGFuY2UudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGNhbGxzdWIgZ2V0WQogICAgZHVwCiAgICBidXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NwogICAgLy8gaWYgKHRoaXMudlVzZEJhbGFuY2UudmFsdWUgPiB2VXNkTmV3QW1vdW50KSB7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBpZiAodGhpcy52VXNkQmFsYW5jZS52YWx1ZSA+IHZVc2ROZXdBbW91bnQpIHsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA8CiAgICBieiBzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY4CiAgICAvLyByZXN1bHQgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlIC0gdlVzZE5ld0Ftb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjgKICAgIC8vIHJlc3VsdCA9IHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLSB2VXNkTmV3QW1vdW50OwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyA2CiAgICAtCiAgICBidXJ5IDIKCnN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjcwCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlID0gdlVzZE5ld0Ftb3VudDsKICAgIGRpZyA2CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjcxCiAgICAvLyB0aGlzLmFkZFJld2FyZHMoZmVlKTsKICAgIGR1cAogICAgY2FsbHN1YiBhZGRSZXdhcmRzCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gZW1pdDxTd2FwcGVkVG9WVXNkPih7IHNlbmRlcjogdXNlciwgdG9rZW5JZDogdGhpcy5hc3NldC52YWx1ZS5pZCwgYW1vdW50LCB2VXNkQW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gZW1pdDxTd2FwcGVkVG9WVXNkPih7IHNlbmRlcjogdXNlciwgdG9rZW5JZDogdGhpcy5hc3NldC52YWx1ZS5pZCwgYW1vdW50LCB2VXNkQW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBkaWcgNQogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgNAogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgMgogICAgaXRvYgogICAgc3dhcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZGlnIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MmJiYmVjYTMgLy8gbWV0aG9kICJTd2FwcGVkVG9WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIHRoaXMudmFsaWRhdGVCYWxhbmNlUmF0aW8oKTsKICAgIGNhbGxzdWIgdmFsaWRhdGVCYWxhbmNlUmF0aW8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI0NS0yNDkKICAgIC8vIHN3YXBUb1ZVc2QoCiAgICAvLyAgIHVzZXI6IEFkZHJlc3MsCiAgICAvLyAgIGFtb3VudDogdWludDY0LAogICAgLy8gICB6ZXJvRmVlOiBib29sZWFuLAogICAgLy8gKTogdWludDY0IHsKICAgIGJ5dGVjIDI0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3dhcEZyb21WVXNkW3JvdXRpbmddKCkgLT4gdm9pZDoKc3dhcEZyb21WVXNkOgogICAgcHVzaGJ5dGVzICIiCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5MS0yOTYKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgc3dhcAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5NwogICAgLy8gdGhpcy5vbmx5Um91dGVyKCk7CiAgICBjYWxsc3ViIG9ubHlSb3V0ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5OQogICAgLy8gbGV0IHJlc3VsdFNQOiB1aW50NjQgPSAwOyAvLyAwIGJ5IGRlZmF1bHQKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDAKICAgIC8vIGxldCByZXN1bHQ6IHVpbnQ2NCA9IDA7IC8vIDAgYnkgZGVmYXVsdAogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMQogICAgLy8gbGV0IGZlZTogdWludDY0ID0gMDsKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGlmIChhbW91bnQgPiAwKSB7CiAgICBieiBzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDMKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gYW1vdW50OwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBhbW91bnQ7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDYKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBhbW91bnQ7CiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNAogICAgLy8gY29uc3QgbmV3QW1vdW50ID0gdGhpcy5nZXRZKHRoaXMudlVzZEJhbGFuY2UudmFsdWUpOwogICAgY2FsbHN1YiBnZXRZCiAgICBkdXAKICAgIGJ1cnkgMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDUKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSAxMQogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzA2CiAgICAvLyBpZiAodG9rZW5CYWxhbmNlID4gbmV3QW1vdW50KSB7CiAgICA8CiAgICBieiBzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDcKICAgIC8vIHJlc3VsdFNQID0gdG9rZW5CYWxhbmNlIC0gbmV3QW1vdW50OwogICAgZGlnIDcKICAgIGRpZyA5CiAgICAtCiAgICBkdXAKICAgIGJ1cnkgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzA4CiAgICAvLyByZXN1bHQgPSB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24ocmVzdWx0U1ApOwogICAgY2FsbHN1YiBmcm9tU3lzdGVtUHJlY2lzaW9uCiAgICBidXJ5IDIKCnN3YXBGcm9tVlVzZF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTIKICAgIC8vIGFzc2VydChyZXN1bHRTUCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTIKICAgIC8vIGFzc2VydChyZXN1bHRTUCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkaWcgMwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkaWcgMQogICAgPD0KICAgIGFzc2VydCAvLyBQb29sOiByZXNlcnZlcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IHJlc3VsdFNQOwogICAgc3dhcAogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDQgLy8gInJlc2VydmVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IHJlc3VsdFNQOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxNQogICAgLy8gaWYgKCF6ZXJvRmVlKSB7CiAgICBkaWcgMwogICAgYm56IHN3YXBGcm9tVlVzZF9hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxNgogICAgLy8gZmVlID0gKHJlc3VsdCAqIHRoaXMuZmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NAogICAgLy8gZmVlU2hhcmVCUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE1IC8vICJmZWVTaGFyZUJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE2CiAgICAvLyBmZWUgPSAocmVzdWx0ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAyCiAgICAqCiAgICBpbnRjIDQgLy8gMTAwMDAKICAgIC8KICAgIGJ1cnkgMQoKc3dhcEZyb21WVXNkX2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxOQogICAgLy8gcmVzdWx0IC09IGZlZTsKICAgIGR1cDIKICAgIGR1cAogICAgY292ZXIgMgogICAgLQogICAgZHVwCiAgICBidXJ5IDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzIxCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSA9IG5ld0Ftb3VudDsKICAgIGRpZyAxMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gYXNzZXJ0KHJlc3VsdCA+PSByZWNlaXZlQW1vdW50TWluLCAnUG9vbDogc2xpcHBhZ2UnKTsKICAgIGR1cAogICAgZGlnIDcKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogc2xpcHBhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMy0zMjcKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHJlc3VsdCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdXNlci5uYXRpdmUsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyNAogICAgLy8geGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzI0CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDkKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMy0zMjcKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHJlc3VsdCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdXNlci5uYXRpdmUsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMjgKICAgIC8vIHRoaXMuYWRkUmV3YXJkcyhmZWUpOwogICAgY2FsbHN1YiBhZGRSZXdhcmRzCgpzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMwCiAgICAvLyBlbWl0PFN3YXBwZWRGcm9tVlVzZD4oeyByZWNpcGllbnQ6IHVzZXIsIHRva2VuSWQ6IHRoaXMuYXNzZXQudmFsdWUuaWQsIHZVc2RBbW91bnQ6IGFtb3VudCwgYW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzMAogICAgLy8gZW1pdDxTd2FwcGVkRnJvbVZVc2Q+KHsgcmVjaXBpZW50OiB1c2VyLCB0b2tlbklkOiB0aGlzLmFzc2V0LnZhbHVlLmlkLCB2VXNkQW1vdW50OiBhbW91bnQsIGFtb3VudDogcmVzdWx0LCBmZWUgfSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXRvYgogICAgZGlnIDcKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDYKICAgIGl0b2IKICAgIGNvbmNhdAogICAgZGlnIDIKICAgIGl0b2IKICAgIHN3YXAKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGRpZyAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweGQzZjFkNTQyIC8vIG1ldGhvZCAiU3dhcHBlZEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzIKICAgIC8vIHRoaXMudmFsaWRhdGVCYWxhbmNlUmF0aW8oKTsKICAgIGNhbGxzdWIgdmFsaWRhdGVCYWxhbmNlUmF0aW8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5MS0yOTYKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICBieXRlYyAyNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnNldEZlZVNoYXJlW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0RmVlU2hhcmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzkKICAgIC8vIHNldEZlZVNoYXJlKGZlZVNoYXJlQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0MQogICAgLy8gYXNzZXJ0KGZlZVNoYXJlQlAgPD0gQlAsICdQb29sOiB0b28gbGFyZ2UnKTsKICAgIGR1cAogICAgaW50YyA0IC8vIDEwMDAwCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHRvbyBsYXJnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIGZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxNSAvLyAiZmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0MgogICAgLy8gdGhpcy5mZWVTaGFyZUJQLnZhbHVlID0gZmVlU2hhcmVCUDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzkKICAgIC8vIHNldEZlZVNoYXJlKGZlZVNoYXJlQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmFkanVzdFRvdGFsTHBBbW91bnRbcm91dGluZ10oKSAtPiB2b2lkOgphZGp1c3RUb3RhbExwQW1vdW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ2CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0NwogICAgLy8gY29uc3QgZCA9IHRoaXMuZC52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ3CiAgICAvLyBjb25zdCBkID0gdGhpcy5kLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNDgKICAgIC8vIGNvbnN0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ4CiAgICAvLyBjb25zdCB0b3RhbFN1cHBseSA9IHRoaXMudG90YWxTdXBwbHkudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjb3ZlciAzCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTAKICAgIC8vIGlmIChkID4gdG90YWxTdXBwbHkpIHsKICAgID4KICAgIGJ6IGFkanVzdFRvdGFsTHBBbW91bnRfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTEKICAgIC8vIHRoaXMuZGVwb3NpdExwKFR4bi5zZW5kZXIsIGQgLSB0b3RhbFN1cHBseSk7CiAgICB0eG4gU2VuZGVyCiAgICBkaWcgMgogICAgZGlnIDIKICAgIC0KICAgIGNhbGxzdWIgZGVwb3NpdExwCgphZGp1c3RUb3RhbExwQW1vdW50X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0NQogICAgLy8gYWRqdXN0VG90YWxMcEFtb3VudCgpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zZXRCYWxhbmNlUmF0aW9NaW5CUFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldEJhbGFuY2VSYXRpb01pbkJQOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyBzZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTkKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzYwCiAgICAvLyBhc3NlcnQoYmFsYW5jZVJhdGlvTWluQlAgPD0gQlAsICdQb29sOiB0b28gbGFyZ2UnKTsKICAgIGR1cAogICAgaW50YyA0IC8vIDEwMDAwCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHRvbyBsYXJnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlID0gYmFsYW5jZVJhdGlvTWluQlA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyBzZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RvcERlcG9zaXRbcm91dGluZ10oKSAtPiB2b2lkOgpzdG9wRGVwb3NpdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gdGhpcy5vbmx5U3RvcEF1dGhvcml0eSgpOwogICAgY2FsbHN1YiBvbmx5U3RvcEF1dGhvcml0eQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NgogICAgLy8gdGhpcy5jYW5EZXBvc2l0LnZhbHVlID0gZmFsc2U7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NAogICAgLy8gc3RvcERlcG9zaXQoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RhcnREZXBvc2l0W3JvdXRpbmddKCkgLT4gdm9pZDoKc3RhcnREZXBvc2l0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzcwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBjYW5EZXBvc2l0ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgZGVwb3NpdCBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMTIgLy8gImNhbkRlcG9zaXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzEKICAgIC8vIHRoaXMuY2FuRGVwb3NpdC52YWx1ZSA9IHRydWU7CiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2OQogICAgLy8gc3RhcnREZXBvc2l0KCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN0b3BXaXRoZHJhd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnN0b3BXaXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM3NQogICAgLy8gdGhpcy5vbmx5U3RvcEF1dGhvcml0eSgpOwogICAgY2FsbHN1YiBvbmx5U3RvcEF1dGhvcml0eQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzYKICAgIC8vIHRoaXMuY2FuV2l0aGRyYXcudmFsdWUgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzc0CiAgICAvLyBzdG9wV2l0aGRyYXcoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RhcnRXaXRoZHJhd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnN0YXJ0V2l0aGRyYXc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODAKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODEKICAgIC8vIHRoaXMuY2FuV2l0aGRyYXcudmFsdWUgPSB0cnVlOwogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzkKICAgIC8vIHN0YXJ0V2l0aGRyYXcoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc2V0U3RvcEF1dGhvcml0eVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldFN0b3BBdXRob3JpdHk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODQKICAgIC8vIHNldFN0b3BBdXRob3JpdHkoc3RvcEF1dGhvcml0eTogQWRkcmVzcyk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODUKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgMjEgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODYKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IHN0b3BBdXRob3JpdHk7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzg0CiAgICAvLyBzZXRTdG9wQXV0aG9yaXR5KHN0b3BBdXRob3JpdHk6IEFkZHJlc3MpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zZXRSb3V0ZXJbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRSb3V0ZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODkKICAgIC8vIHNldFJvdXRlcihyb3V0ZXI6IEFkZHJlc3MpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzkwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyByb3V0ZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDIwIC8vICJyb3V0ZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOTEKICAgIC8vIHRoaXMucm91dGVyLnZhbHVlID0gcm91dGVyOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4OQogICAgLy8gc2V0Um91dGVyKHJvdXRlcjogQWRkcmVzcyk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5jbGFpbVJld2FyZHNbcm91dGluZ10oKSAtPiB2b2lkOgpjbGFpbVJld2FyZHM6CiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYxCiAgICAvLyBjb25zdCB1c2VyID0gVHhuLnNlbmRlcjsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYyCiAgICAvLyBjb25zdCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UodXNlcikudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYyCiAgICAvLyBjb25zdCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UodXNlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjMKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiBjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjQKICAgIC8vIGNvbnN0IHJld2FyZHMgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oQmlnVWludCh1c2VyTHBBbW91bnQpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgLyBQX1NDQUxFKTsKICAgIGR1cAogICAgaXRvYgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY0CiAgICAvLyBjb25zdCByZXdhcmRzID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlIC8gUF9TQ0FMRSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBkdXAKICAgIGJ1cnkgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY1CiAgICAvLyBjb25zdCBwZW5kaW5nOiB1aW50NjQgPSByZXdhcmRzIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGRpZyAyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjUKICAgIC8vIGNvbnN0IHBlbmRpbmc6IHVpbnQ2NCA9IHJld2FyZHMgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHVzZXIpLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAtCiAgICBkdXAKICAgIGJ1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY2CiAgICAvLyBpZiAocGVuZGluZyA+IDApIHsKICAgIGJ6IGNsYWltUmV3YXJkc19hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo2NwogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZSA9IHJld2FyZHM7CiAgICBkaWcgMQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzQKICAgIC8vIHVzZXJSZXdhcmREZWJ0ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA1IC8vICJ1c2VyUmV3YXJkRGVidCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo2NwogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZSA9IHJld2FyZHM7CiAgICBkaWcgNQogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB1c2VyIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB1c2VyIH0pLnN1Ym1pdCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGRpZyA1CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY5CiAgICAvLyBlbWl0PFJld2FyZHNDbGFpbWVkPih7IHVzZXI6IG5ldyBBZGRyZXNzKHVzZXIpLCBwZW5kaW5nIH0pOwogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlYyAyNSAvLyBtZXRob2QgIlJld2FyZHNDbGFpbWVkKGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCgpjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjU5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIuc2V0QWRtaW5GZWVTaGFyZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldEFkbWluRmVlU2hhcmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NzQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc2CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3NwogICAgLy8gYXNzZXJ0KGFkbWluRmVlU2hhcmVCUCA8PSBCUCwgJ1Jld2FyZE1hbmFnZXI6IHRvbyBoaWdoJyk7CiAgICBkdXAKICAgIGludGMgNCAvLyAxMDAwMAogICAgPD0KICAgIGFzc2VydCAvLyBSZXdhcmRNYW5hZ2VyOiB0b28gaGlnaAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI4CiAgICAvLyBhZG1pbkZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBCUCAvIDUgfSk7IC8vIERlZmF1bHQgYWRtaW4gZmVlIGlzIDIwJQogICAgYnl0ZWMgMTggLy8gImFkbWluRmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3OAogICAgLy8gdGhpcy5hZG1pbkZlZVNoYXJlQlAudmFsdWUgPSBhZG1pbkZlZVNoYXJlQlA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIuY2xhaW1BZG1pbkZlZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsYWltQWRtaW5GZWU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg0CiAgICAvLyBjb25zdCBhZG1pbkZlZUFtb3VudCA9IHRoaXMuYWRtaW5GZWVBbW91bnQudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODQKICAgIC8vIGNvbnN0IGFkbWluRmVlQW1vdW50ID0gdGhpcy5hZG1pbkZlZUFtb3VudC52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg1CiAgICAvLyBpZiAoYWRtaW5GZWVBbW91bnQgPiAwKSB7CiAgICBieiBjbGFpbUFkbWluRmVlX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg2LTkwCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBhZG1pbkZlZUFtb3VudCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg3CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODcKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODkKICAgIC8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo4OQogICAgLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg2LTkwCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBhZG1pbkZlZUFtb3VudCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMQogICAgLy8gYWRtaW5GZWVBbW91bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgMTEgLy8gImFkbWluRmVlQW1vdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjkxCiAgICAvLyB0aGlzLmFkbWluRmVlQW1vdW50LnZhbHVlID0gMDsKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKY2xhaW1BZG1pbkZlZV9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODEKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5wZW5kaW5nUmV3YXJkW3JvdXRpbmddKCkgLT4gdm9pZDoKcGVuZGluZ1Jld2FyZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLnBlbmRpbmdSZXdhcmQKICAgIGl0b2IKICAgIGJ5dGVjIDI0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6Ok93bmFibGUudHJhbnNmZXJPd25lcnNoaXBbcm91dGluZ10oKSAtPiB2b2lkOgp0cmFuc2Zlck93bmVyc2hpcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTgKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE5CiAgICAvLyB0aGlzLm93bmVyLnZhbHVlID0gbmV3T3duZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTYKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLm9ubHlSb3V0ZXIoKSAtPiB2b2lkOgpvbmx5Um91dGVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTE4CiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5yb3V0ZXIudmFsdWUuYnl0ZXMsICdQb29sOiBvbmx5IHJvdXRlcicpOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyByb3V0ZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDIwIC8vICJyb3V0ZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTgKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnJvdXRlci52YWx1ZS5ieXRlcywgJ1Bvb2w6IG9ubHkgcm91dGVyJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBQb29sOiBvbmx5IHJvdXRlcgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wub25seVN0b3BBdXRob3JpdHkoKSAtPiB2b2lkOgpvbmx5U3RvcEF1dGhvcml0eToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEyMgogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZS5ieXRlcywgJ1Bvb2w6IGlzIG5vdCBzdG9wQXV0aG9yaXR5Jyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgMjEgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjIKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUuYnl0ZXMsICdQb29sOiBpcyBub3Qgc3RvcEF1dGhvcml0eScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gUG9vbDogaXMgbm90IHN0b3BBdXRob3JpdHkKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnZhbGlkYXRlQmFsYW5jZVJhdGlvKCkgLT4gdm9pZDoKdmFsaWRhdGVCYWxhbmNlUmF0aW86CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIHByaXZhdGUgdmFsaWRhdGVCYWxhbmNlUmF0aW8oKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEyOQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjkKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMQogICAgLy8gaWYgKHRva2VuQmFsYW5jZSA+IHZVc2RCYWxhbmNlKSB7CiAgICA+CiAgICBieiB2YWxpZGF0ZUJhbGFuY2VSYXRpb19lbHNlX2JvZHlAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTMyCiAgICAvLyBhc3NlcnQoKHZVc2RCYWxhbmNlICogQlApIC8gdG9rZW5CYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdlVTRCBiYWxhbmNlJyk7CiAgICBmcmFtZV9kaWcgMQogICAgaW50YyA0IC8vIDEwMDAwCiAgICAqCiAgICBmcmFtZV9kaWcgMAogICAgLwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBiYWxhbmNlUmF0aW9NaW5CUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE2IC8vICJiYWxhbmNlUmF0aW9NaW5CUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMgogICAgLy8gYXNzZXJ0KCh2VXNkQmFsYW5jZSAqIEJQKSAvIHRva2VuQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHZVU0QgYmFsYW5jZScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogbG93IHZVU0QgYmFsYW5jZQoKdmFsaWRhdGVCYWxhbmNlUmF0aW9fYWZ0ZXJfaWZfZWxzZUA1OgogICAgcmV0c3ViCgp2YWxpZGF0ZUJhbGFuY2VSYXRpb19lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMwogICAgLy8gfSBlbHNlIGlmICh0b2tlbkJhbGFuY2UgPCB2VXNkQmFsYW5jZSkgewogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAxCiAgICA8CiAgICBieiB2YWxpZGF0ZUJhbGFuY2VSYXRpb19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzNAogICAgLy8gYXNzZXJ0KCh0b2tlbkJhbGFuY2UgKiBCUCkgLyB2VXNkQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHRva2VuIGJhbGFuY2UnKTsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjIDQgLy8gMTAwMDAKICAgICoKICAgIGZyYW1lX2RpZyAxCiAgICAvCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTM0CiAgICAvLyBhc3NlcnQoKHRva2VuQmFsYW5jZSAqIEJQKSAvIHZVc2RCYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdG9rZW4gYmFsYW5jZScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogbG93IHRva2VuIGJhbGFuY2UKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLndpdGhkcmF3KGFtb3VudExwOiB1aW50NjQsIGJ1ZGdldDogdWludDY0KSAtPiB2b2lkOgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5Ny0xOTgKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGJ1ZGdldDogeyBjb25zdGFudDogMzAwMCB9IH0gfSkKICAgIC8vIHdpdGhkcmF3KGFtb3VudExwOiB1aW50NjQsIGJ1ZGdldDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5OQogICAgLy8gZW5zdXJlQnVkZ2V0KGJ1ZGdldCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE0MwogICAgLy8gYXNzZXJ0KHRoaXMuY2FuV2l0aGRyYXcudmFsdWUsICciUG9vbDogd2l0aGRyYXcgcHJvaGliaXRlZCcpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBjYW5XaXRoZHJhdyA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOy8vIGlzIHdpdGhkcmF3biBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMTMgLy8gImNhbldpdGhkcmF3IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTQzCiAgICAvLyBhc3NlcnQodGhpcy5jYW5XaXRoZHJhdy52YWx1ZSwgJyJQb29sOiB3aXRoZHJhdyBwcm9oaWJpdGVkJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYXNzZXJ0IC8vICJQb29sOiB3aXRoZHJhdyBwcm9oaWJpdGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDMKICAgIC8vIGNvbnN0IG9sZEQgPSB0aGlzLmQudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIwMwogICAgLy8gY29uc3Qgb2xkRCA9IHRoaXMuZC52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDQKICAgIC8vIHRoaXMud2l0aGRyYXdMcChUeG4uc2VuZGVyLCBhbW91bnRMcCk7CiAgICB0eG4gU2VuZGVyCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzAKICAgIC8vIGxldCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMAogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZShmcm9tKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzEKICAgIC8vIGFzc2VydCh1c2VyTHBBbW91bnQgPj0gbHBBbW91bnQsICdSZXdhcmRNYW5hZ2VyOiBub3QgZW5vdWdoIGFtb3VudCcpOwogICAgZHVwCiAgICBmcmFtZV9kaWcgLTIKICAgID49CiAgICBhc3NlcnQgLy8gUmV3YXJkTWFuYWdlcjogbm90IGVub3VnaCBhbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzIKICAgIC8vIGNvbnN0IGFjY1Jld2FyZFBlclNoYXJlUCA9IHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMgogICAgLy8gY29uc3QgYWNjUmV3YXJkUGVyU2hhcmVQID0gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMwogICAgLy8gbGV0IHBlbmRpbmc6IHVpbnQ2NCA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNAogICAgLy8gaWYgKHVzZXJMcEFtb3VudCA+IDApIHsKICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLndpdGhkcmF3X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNQogICAgLy8gcGVuZGluZyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidChmcm9tKS52YWx1ZTsKICAgIGZyYW1lX2RpZyAyCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMwogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBmcmFtZV9kaWcgMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNQogICAgLy8gcGVuZGluZyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidChmcm9tKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLQogICAgZnJhbWVfYnVyeSA0CgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhd19hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM3CiAgICAvLyB1c2VyTHBBbW91bnQgLT0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM4CiAgICAvLyB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzOAogICAgLy8gdGhpcy5iYWxhbmNlKGZyb20pLnZhbHVlIC09IGxwQW1vdW50OwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIC0KICAgIGRpZyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM4CiAgICAvLyB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzkKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA3IC8vICJ0b3RhbFN1cHBseSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzkKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSAtPSBscEFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpOwogICAgc3dhcAogICAgaXRvYgogICAgZnJhbWVfZGlnIDMKICAgIGIqCiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpOwogICAgc3dhcAogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MQogICAgLy8gaWYgKHBlbmRpbmcgPiAwKSB7CiAgICBmcmFtZV9kaWcgNAogICAgYnogc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQyCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiBmcm9tIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MgogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLCBhc3NldEFtb3VudDogcGVuZGluZywgYXNzZXRSZWNlaXZlcjogZnJvbSB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MwogICAgLy8gZW1pdDxSZXdhcmRzQ2xhaW1lZD4oeyB1c2VyOiBuZXcgQWRkcmVzcyhmcm9tKSwgcGVuZGluZyB9KTsKICAgIGl0b2IKICAgIGNvbmNhdAogICAgYnl0ZWMgMjUgLy8gbWV0aG9kICJSZXdhcmRzQ2xhaW1lZChhZGRyZXNzLHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdfYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0NQogICAgLy8gZW1pdDxXaXRoZHJhdz4oeyBmcm9tOiBuZXcgQWRkcmVzcyhmcm9tKSwgbHBBbW91bnQgfSk7CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAxCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHhkM2FmYTRmMSAvLyBtZXRob2QgIldpdGhkcmF3KGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDkKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjA5CiAgICAvLyBjb25zdCB0b2tlbkJhbGFuY2UgPSB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTIKICAgIC8vIGNvbnN0IG9sZEJhbGFuY2U6IHVpbnQ2NCA9ICh0b2tlbkJhbGFuY2UgKyB2VXNkQmFsYW5jZSk7CiAgICBkdXAyCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIGRpZyAyCiAgICBpdG9iCiAgICBkaWcgNAogICAgYioKICAgIGRpZyAxCiAgICBpdG9iCiAgICBzd2FwCiAgICBkaWcgMQogICAgYi8KICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDgKICAgIGJ6ZXJvCiAgICBzd2FwCiAgICBkaWcgMQogICAgYnwKICAgIGJ0b2kKICAgIHVuY292ZXIgNQogICAgc3dhcAogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudExwKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjE0CiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHZVc2RCYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgdW5jb3ZlciA1CiAgICBiKgogICAgdW5jb3ZlciAzCiAgICBiLwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICBidG9pCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudExwKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICsgdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA8IG9sZEJhbGFuY2UsICdQb29sOiB6ZXJvIGNoYW5nZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICsgdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA8IG9sZEJhbGFuY2UsICdQb29sOiB6ZXJvIGNoYW5nZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICA+CiAgICBhc3NlcnQgLy8gUG9vbDogemVybyBjaGFuZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFzc2VydChhbW91bnRMcCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFzc2VydChhbW91bnRMcCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHJlc2VydmVzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjIKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgLT0gYW1vdW50THA7CiAgICBmcmFtZV9kaWcgLTIKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyMgogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSAtPSBhbW91bnRMcDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjUKICAgIC8vIHRoaXMudXBkYXRlRCgpOwogICAgY2FsbHN1YiB1cGRhdGVECiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjYKICAgIC8vIGFzc2VydCh0aGlzLmQudmFsdWUgPCBvbGRELCAnUG9vbDogemVybyBEIGNoYW5nZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI2CiAgICAvLyBhc3NlcnQodGhpcy5kLnZhbHVlIDwgb2xkRCwgJ1Bvb2w6IHplcm8gRCBjaGFuZ2VzJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGFzc2VydCAvLyBQb29sOiB6ZXJvIEQgY2hhbmdlcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI4LTIzMgogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgLy8gICBhc3NldEFtb3VudDogdGhpcy5mcm9tU3lzdGVtUHJlY2lzaW9uKGFtb3VudExwKSwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI5CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjkKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMzAKICAgIC8vIGFzc2V0QW1vdW50OiB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50THApLAogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIGZyb21TeXN0ZW1QcmVjaXNpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzMQogICAgLy8gYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyOC0yMzIKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHRoaXMuZnJvbVN5c3RlbVByZWNpc2lvbihhbW91bnRMcCksCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5nZXRZKHg6IHVpbnQ2NCkgLT4gdWludDY0OgpnZXRZOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk3CiAgICAvLyBwcml2YXRlIGdldFkoeDogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgaW50Y18wIC8vIDAKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk4CiAgICAvLyBjb25zdCB4XyA9IEJpZ1VpbnQoeCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk5CiAgICAvLyBjb25zdCBkXyA9IEJpZ1VpbnQodGhpcy5kLnZhbHVlKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk5CiAgICAvLyBjb25zdCBkXyA9IEJpZ1VpbnQodGhpcy5kLnZhbHVlKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwMAogICAgLy8gY29uc3QgYTQgPSBCaWdVaW50KHRoaXMuYS52YWx1ZSA8PCAyKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MAogICAgLy8gYSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE5IC8vICJhIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAwCiAgICAvLyBjb25zdCBhNCA9IEJpZ1VpbnQodGhpcy5hLnZhbHVlIDw8IDIpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzaGwKICAgIGl0b2IKICAgIGR1cAogICAgY292ZXIgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAxCiAgICAvLyBjb25zdCBhOCA9IEJpZ1VpbnQoYTQgKiAybik7CiAgICBieXRlYyAxNyAvLyAweDAyCiAgICBiKgogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAzCiAgICAvLyBjb25zdCBkTWludXNYSXNQb3NpdGl2ZSA9IGRfID49IHhfOwogICAgYjw9CiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwNAogICAgLy8gY29uc3QgZE1pbnVzWEFiczogYmlndWludCA9IGRNaW51c1hJc1Bvc2l0aXZlID8gKGRfIC0geF8pIDogKHhfIC0gZF8pOwogICAgYnogZ2V0WV90ZXJuYXJ5X2ZhbHNlQDIKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgYi0KCmdldFlfdGVybmFyeV9tZXJnZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDA2CiAgICAvLyBjb25zdCBhNEJ5RE1pbnVzWEFiczogYmlndWludCA9IGE0ICogZE1pbnVzWEFiczsKICAgIGZyYW1lX2RpZyA0CiAgICBiKgogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MTEKICAgIC8vIGlmIChkTWludXNYSXNQb3NpdGl2ZSkgewogICAgZnJhbWVfZGlnIDYKICAgIGJ6IGdldFlfZWxzZV9ib2R5QDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxMgogICAgLy8gaWYgKGE0QnlETWludXNYQWJzID49IGRfKSB7CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDMKICAgIGI+PQogICAgYnogZ2V0WV9lbHNlX2JvZHlANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEzCiAgICAvLyBwYXJ0MUFicyA9IGE0QnlETWludXNYQWJzIC0gZF87CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDMKICAgIGItCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxNAogICAgLy8gcGFydDFJc1Bvc2l0aXZlID0gdHJ1ZTsKICAgIGludGNfMSAvLyAxCgpnZXRZX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyNQogICAgLy8gY29uc3QgcGFydDI6IGJpZ3VpbnQgPSBCaWdVaW50KHgpICogKGE0ICogZF8gKiBkXyAqIGRfICsgeF8gKiAocGFydDFBYnMgKiBwYXJ0MUFicykpOwogICAgZnJhbWVfZGlnIDQKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGIqCiAgICBkaWcgMQogICAgYioKICAgIGIqCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBiKgogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBiKgogICAgdW5jb3ZlciAyCiAgICBiKwogICAgYioKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyNgogICAgLy8gbGV0IG51bWVyYXRvcjogYmlndWludCA9IHRoaXMuc3FydChwYXJ0Mik7CiAgICBjYWxsc3ViIHNxcnQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyOQogICAgLy8gaWYgKHBhcnQxSXNQb3NpdGl2ZSkgewogICAgYnogZ2V0WV9lbHNlX2JvZHlAMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzMAogICAgLy8gbnVtZXJhdG9yICs9IHhfICogcGFydDFBYnM7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDEKICAgIGIqCiAgICBiKwoKZ2V0WV9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDM2CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKG51bWVyYXRvciAvIChhOCAqIHhfKSArIDFuKTsgLy8gKzEgdG8gb2Zmc2V0IHJvdW5kaW5nIGVycm9ycwogICAgZnJhbWVfZGlnIDUKICAgIGZyYW1lX2RpZyAyCiAgICBiKgogICAgYi8KICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGIrCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldFlfZWxzZV9ib2R5QDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDMyCiAgICAvLyBudW1lcmF0b3IgLT0geF8gKiBwYXJ0MUFiczsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgMQogICAgYioKICAgIGItCiAgICBiIGdldFlfYWZ0ZXJfaWZfZWxzZUAxMgoKZ2V0WV9lbHNlX2JvZHlANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxNgogICAgLy8gcGFydDFBYnMgPSBkXyAtIGE0QnlETWludXNYQWJzOwogICAgZnJhbWVfZGlnIDMKICAgIGZyYW1lX2RpZyAwCiAgICBiLQogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MTcKICAgIC8vIHBhcnQxSXNQb3NpdGl2ZSA9IGZhbHNlOwogICAgaW50Y18wIC8vIDAKICAgIGIgZ2V0WV9hZnRlcl9pZl9lbHNlQDkKCmdldFlfZWxzZV9ib2R5QDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MjAKICAgIC8vIHBhcnQxQWJzID0gYTRCeURNaW51c1hBYnMgKyBkXzsKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgMwogICAgYisKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDIxCiAgICAvLyBwYXJ0MUlzUG9zaXRpdmUgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBiIGdldFlfYWZ0ZXJfaWZfZWxzZUA5CgpnZXRZX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwNAogICAgLy8gY29uc3QgZE1pbnVzWEFiczogYmlndWludCA9IGRNaW51c1hJc1Bvc2l0aXZlID8gKGRfIC0geF8pIDogKHhfIC0gZF8pOwogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2RpZyAzCiAgICBiLQogICAgYiBnZXRZX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnVwZGF0ZUQoKSAtPiB2b2lkOgp1cGRhdGVEOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDM5CiAgICAvLyBwcml2YXRlIHVwZGF0ZUQoKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0MAogICAgLy8gY29uc3QgeCA9IEJpZ1VpbnQodGhpcy50b2tlbkJhbGFuY2UudmFsdWUpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQwCiAgICAvLyBjb25zdCB4ID0gQmlnVWludCh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQxCiAgICAvLyBjb25zdCB5ID0gQmlnVWludCh0aGlzLnZVc2RCYWxhbmNlLnZhbHVlKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDEKICAgIC8vIGNvbnN0IHkgPSBCaWdVaW50KHRoaXMudlVzZEJhbGFuY2UudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0NgogICAgLy8gY29uc3QgeHk6IGJpZ3VpbnQgPSB4ICogeTsKICAgIGR1cDIKICAgIGIqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDcKICAgIC8vIGNvbnN0IGFfID0gQmlnVWludCh0aGlzLmEudmFsdWUpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwCiAgICAvLyBhID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTkgLy8gImEiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDcKICAgIC8vIGNvbnN0IGFfID0gQmlnVWludCh0aGlzLmEudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0OQogICAgLy8gY29uc3QgcDE6IGJpZ3VpbnQgPSBhXyAqIHh5ICogKHggKyB5KTsKICAgIGR1cAogICAgZGlnIDIKICAgIGIqCiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgNAogICAgYisKICAgIGIqCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1MQogICAgLy8gY29uc3QgcDI6IGJpZ3VpbnQgPSAoeHkgKiAoKGFfICogNG4pIC0gMW4pKSAvIDNuOwogICAgcHVzaGJ5dGVzIDB4MDQKICAgIGIqCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiLQogICAgdW5jb3ZlciAyCiAgICBiKgogICAgYnl0ZWMgMjYgLy8gMHgwMwogICAgYi8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1MwogICAgLy8gY29uc3QgcDM6IGJpZ3VpbnQgPSB0aGlzLnNxcnQoKHAxICogcDEpICsgKHAyICogcDIgKiBwMikpOwogICAgZGlnIDEKICAgIGRpZyAyCiAgICBiKgogICAgZGlnIDEKICAgIGRpZyAyCiAgICBiKgogICAgdW5jb3ZlciAyCiAgICBiKgogICAgYisKICAgIGNhbGxzdWIgc3FydAogICAgZHVwCiAgICBjb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTQKICAgIC8vIGxldCBkXyA9IHRoaXMuY2JydChwMSArIHAzKTsKICAgIGR1cDIKICAgIGIrCiAgICBjYWxsc3ViIGNicnQKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1NQogICAgLy8gaWYgKHAzID4gcDEpIHsKICAgIGI8CiAgICBieiB1cGRhdGVEX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTYKICAgIC8vIGRfIC09IHRoaXMuY2JydChwMyAtIHAxKTsKICAgIGZyYW1lX2RpZyAwCiAgICBiLQogICAgY2FsbHN1YiBjYnJ0CiAgICBmcmFtZV9kaWcgMQogICAgc3dhcAogICAgLQogICAgZnJhbWVfYnVyeSAxCgp1cGRhdGVEX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2MAogICAgLy8gdGhpcy5kLnZhbHVlID0gKGRfIDw8IDEpOwogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMSAvLyAxCiAgICBzaGwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxCiAgICAvLyBkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDYgLy8gImQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjAKICAgIC8vIHRoaXMuZC52YWx1ZSA9IChkXyA8PCAxKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCnVwZGF0ZURfZWxzZV9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTgKICAgIC8vIGRfICs9IHRoaXMuY2JydChwMSAtIHAzKTsKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICBiLQogICAgY2FsbHN1YiBjYnJ0CiAgICBmcmFtZV9kaWcgMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIHVwZGF0ZURfYWZ0ZXJfaWZfZWxzZUAzCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wudG9TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpIC0+IHVpbnQ2NDoKdG9TeXN0ZW1QcmVjaXNpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjMKICAgIC8vIHByaXZhdGUgdG9TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjQKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50UmVkdWNlID0gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MwogICAgLy8gcHJpdmF0ZSB0b2tlbkFtb3VudFJlZHVjZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIyIC8vICJ0b2tlbkFtb3VudFJlZHVjZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2NAogICAgLy8gY29uc3QgdG9rZW5BbW91bnRSZWR1Y2UgPSB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjUKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50SW5jcmVhc2UgPSB0aGlzLnRva2VuQW1vdW50SW5jcmVhc2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRJbmNyZWFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIzIC8vICJ0b2tlbkFtb3VudEluY3JlYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY1CiAgICAvLyBjb25zdCB0b2tlbkFtb3VudEluY3JlYXNlID0gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2NwogICAgLy8gaWYgKHRva2VuQW1vdW50UmVkdWNlID4gMCkgewogICAgYnogdG9TeXN0ZW1QcmVjaXNpb25fZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2OAogICAgLy8gcmV0dXJuIGFtb3VudCAvIHRva2VuQW1vdW50UmVkdWNlOwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMAogICAgLwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnRvU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY5CiAgICAvLyB9IGVsc2UgaWYgKHRva2VuQW1vdW50SW5jcmVhc2UgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogdG9TeXN0ZW1QcmVjaXNpb25fYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzAKICAgIC8vIHJldHVybiBhbW91bnQgKiB0b2tlbkFtb3VudEluY3JlYXNlOwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMQogICAgKgogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnRvU3lzdGVtUHJlY2lzaW9uX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3MgogICAgLy8gcmV0dXJuIGFtb3VudDsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5mcm9tU3lzdGVtUHJlY2lzaW9uKGFtb3VudDogdWludDY0KSAtPiB1aW50NjQ6CmZyb21TeXN0ZW1QcmVjaXNpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzUKICAgIC8vIHByaXZhdGUgZnJvbVN5c3RlbVByZWNpc2lvbihhbW91bnQ6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3NgogICAgLy8gY29uc3QgdG9rZW5BbW91bnRSZWR1Y2UgPSB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyBwcml2YXRlIHRva2VuQW1vdW50UmVkdWNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjIgLy8gInRva2VuQW1vdW50UmVkdWNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDc2CiAgICAvLyBjb25zdCB0b2tlbkFtb3VudFJlZHVjZSA9IHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3NwogICAgLy8gY29uc3QgdG9rZW5BbW91bnRJbmNyZWFzZSA9IHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gcHJpdmF0ZSB0b2tlbkFtb3VudEluY3JlYXNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjMgLy8gInRva2VuQW1vdW50SW5jcmVhc2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzcKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50SW5jcmVhc2UgPSB0aGlzLnRva2VuQW1vdW50SW5jcmVhc2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDc5CiAgICAvLyBpZiAodG9rZW5BbW91bnRSZWR1Y2UgPiAwKSB7CiAgICBieiBmcm9tU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODAKICAgIC8vIHJldHVybiBhbW91bnQgKiB0b2tlbkFtb3VudFJlZHVjZTsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDAKICAgICoKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpmcm9tU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgxCiAgICAvLyB9IGVsc2UgaWYgKHRva2VuQW1vdW50SW5jcmVhc2UgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogZnJvbVN5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4MgogICAgLy8gcmV0dXJuIGFtb3VudCAvIHRva2VuQW1vdW50SW5jcmVhc2U7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAxCiAgICAvCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZnJvbVN5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODQKICAgIC8vIHJldHVybiBhbW91bnQ7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3FydChuOiBieXRlcykgLT4gYnl0ZXM6CnNxcnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODcKICAgIC8vIHByaXZhdGUgc3FydChuOiBiaWd1aW50KTogYmlndWludCB7CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4OAogICAgLy8gYXNzZXJ0KG4gPiAwbiwgJ24gbXVzdCBiZSBub24tbmVnYXRpdmUnKTsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4CiAgICBiPgogICAgYXNzZXJ0IC8vIG4gbXVzdCBiZSBub24tbmVnYXRpdmUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4OQogICAgLy8gaWYgKG4gPT09IDBuKSByZXR1cm4gMG47CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweAogICAgYj09CiAgICBieiBzcXJ0X2FmdGVyX2lmX2Vsc2VAMgogICAgcHVzaGJ5dGVzIDB4CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKc3FydF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OTAKICAgIC8vIGlmIChuIDw9IDNuKSByZXR1cm4gMW47CiAgICBmcmFtZV9kaWcgLTEKICAgIGJ5dGVjIDI2IC8vIDB4MDMKICAgIGI8PQogICAgYnogc3FydF9hZnRlcl9pZl9lbHNlQDQKICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpzcXJ0X2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5MwogICAgLy8gY29uc3QgYmwgPSBiaXRMZW5ndGgoQnl0ZXMobikpOwogICAgZnJhbWVfZGlnIC0xCiAgICBiaXRsZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5NAogICAgLy8gbGV0IHdpZGUgPSBleHB3KDIsIChibCArIDEpIC8gMik7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgcHVzaGludCAyIC8vIDIKICAgIC8KICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzd2FwCiAgICBleHB3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OTUKICAgIC8vIGNvbnN0IGhpID0gQmlnVWludCh3aWRlWzBdKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5NgogICAgLy8gY29uc3QgbG8gPSBCaWdVaW50KHdpZGVbMV0pOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDk3CiAgICAvLyBsZXQgeDogYmlndWludCA9IGhpICogU0hJRlQ2NCArIGxvOwogICAgc3dhcAogICAgYnl0ZWMgMjggLy8gMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIGIqCiAgICBiKwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMAogICAgLy8gbGV0IHk6IGJpZ3VpbnQgPSAoeCArIG4gLyB4KSAvIDJuOwogICAgZnJhbWVfZGlnIC0xCiAgICBkaWcgMQogICAgYi8KICAgIGIrCiAgICBieXRlYyAxNyAvLyAweDAyCiAgICBiLwogICAgZnJhbWVfYnVyeSAxCgpzcXJ0X3doaWxlX3RvcEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTAxCiAgICAvLyB3aGlsZSAoeSA8IHgpIHsKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMAogICAgYjwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMS01MDQKICAgIC8vIHdoaWxlICh5IDwgeCkgewogICAgLy8gICB4ID0geTsKICAgIC8vICAgeSA9ICh4ICsgbiAvIHgpIC8gMm47CiAgICAvLyB9CiAgICBieiBzcXJ0X2FmdGVyX3doaWxlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMwogICAgLy8geSA9ICh4ICsgbiAvIHgpIC8gMm47CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGIvCiAgICBkaWcgMQogICAgYisKICAgIGJ5dGVjIDE3IC8vIDB4MDIKICAgIGIvCiAgICBmcmFtZV9idXJ5IDEKICAgIGZyYW1lX2J1cnkgMAogICAgYiBzcXJ0X3doaWxlX3RvcEA1CgpzcXJ0X2FmdGVyX3doaWxlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MDUKICAgIC8vIHJldHVybiB4OwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuY2JydChuOiBieXRlcykgLT4gdWludDY0OgpjYnJ0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTA4CiAgICAvLyBwcml2YXRlIGNicnQobjogYmlndWludCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBkdXBuIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwOQogICAgLy8gaWYgKG4gPT09IDBuKSByZXR1cm4gMDsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4CiAgICBiPT0KICAgIGJ6IGNicnRfYWZ0ZXJfaWZfZWxzZUAyCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmNicnRfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEwCiAgICAvLyBpZiAobiA8IDhuKSByZXR1cm4gMTsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4MDgKICAgIGI8CiAgICBieiBjYnJ0X2FmdGVyX2lmX2Vsc2VANAogICAgaW50Y18xIC8vIDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpjYnJ0X2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxMwogICAgLy8gY29uc3QgYmwgPSBiaXRMZW5ndGgoQnl0ZXMobikpOwogICAgZnJhbWVfZGlnIC0xCiAgICBiaXRsZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxNAogICAgLy8gbGV0IHdpZGUgPSBleHB3KDIsIChibCArIDIpIC8gMyk7CiAgICBwdXNoaW50IDIgLy8gMgogICAgKwogICAgcHVzaGludCAzIC8vIDMKICAgIC8KICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzd2FwCiAgICBleHB3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MTUKICAgIC8vIGNvbnN0IGhpID0gQmlnVWludCh3aWRlWzBdKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxNgogICAgLy8gY29uc3QgbG8gPSBCaWdVaW50KHdpZGVbMV0pOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTE3CiAgICAvLyBsZXQgeDogYmlndWludCA9IGhpICogU0hJRlQ2NCArIGxvOwogICAgc3dhcAogICAgYnl0ZWMgMjggLy8gMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIGIqCiAgICBiKwogICAgZnJhbWVfYnVyeSAxCgpjYnJ0X3doaWxlX3RvcEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTIxCiAgICAvLyBjb25zdCB4MjogYmlndWludCA9IHggKiB4OwogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgYioKICAgIGR1cAogICAgZnJhbWVfYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjIKICAgIC8vIGlmICh4MiA9PT0gMG4pIGJyZWFrOyAvLyBzaG91bGQgbm90IGhhcHBlbiBmb3IgeD4wCiAgICBwdXNoYnl0ZXMgMHgKICAgIGI9PQogICAgYm56IGNicnRfd2hpbGVfdG9wQDE1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjMKICAgIC8vIGNvbnN0IG5leHQ6IGJpZ3VpbnQgPSAoMm4gKiB4ICsgbiAvIHgyKSAvIDNuOwogICAgYnl0ZWMgMTcgLy8gMHgwMgogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgYioKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDMKICAgIGIvCiAgICBiKwogICAgYnl0ZWMgMjYgLy8gMHgwMwogICAgYi8KICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjQKICAgIC8vIGlmIChuZXh0ID09PSB4IHx8IG5leHQgPT09IHggLSAxbikgewogICAgYj09CiAgICBibnogY2JydF9pZl9ib2R5QDEwCiAgICBmcmFtZV9kaWcgMQogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgYi0KICAgIGZyYW1lX2RpZyAwCiAgICBiPT0KICAgIGJ6IGNicnRfYWZ0ZXJfaWZfZWxzZUAxMQoKY2JydF9pZl9ib2R5QDEwOgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2J1cnkgMQoKY2JydF93aGlsZV90b3BAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MzIKICAgIC8vIHdoaWxlICgoeCArIDFuKSAqICh4ICsgMW4pICogKHggKyAxbikgPD0gbikgeCArPSAxbjsKICAgIGZyYW1lX2RpZyAxCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiKwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDIKICAgIGR1cAogICAgZGlnIDEKICAgIGIqCiAgICBiKgogICAgZnJhbWVfZGlnIC0xCiAgICBiPD0KICAgIGJ6IGNicnRfd2hpbGVfdG9wQDE4CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfYnVyeSAxCiAgICBiIGNicnRfd2hpbGVfdG9wQDE1CgpjYnJ0X3doaWxlX3RvcEAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzMwogICAgLy8gd2hpbGUgKHggKiB4ICogeCA+IG4pIHggLT0gMW47CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBkaWcgMQogICAgYioKICAgIGIqCiAgICBmcmFtZV9kaWcgLTEKICAgIGI+CiAgICBieiBjYnJ0X2FmdGVyX3doaWxlQDIwCiAgICBmcmFtZV9kaWcgMQogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgYi0KICAgIGZyYW1lX2J1cnkgMQogICAgYiBjYnJ0X3doaWxlX3RvcEAxOAoKY2JydF9hZnRlcl93aGlsZUAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzNAogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyh4KTsKICAgIGZyYW1lX2RpZyAxCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmNicnRfYWZ0ZXJfaWZfZWxzZUAxMToKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgY2JydF93aGlsZV90b3BANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5vcHRJblRvQXBwbGljYXRpb24odG86IGJ5dGVzKSAtPiB2b2lkOgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQxCiAgICAvLyBwcm90ZWN0ZWQgb3B0SW5Ub0FwcGxpY2F0aW9uKHRvOiBBY2NvdW50KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MgogICAgLy8gaWYgKCF0aGlzLmJhbGFuY2UodG8pLmhhc1ZhbHVlKSB7CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDIKICAgIC8vIGlmICghdGhpcy5iYWxhbmNlKHRvKS5oYXNWYWx1ZSkgewogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBibnogc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MwogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSA9IDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MwogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDUKICAgIC8vIGlmICghdGhpcy51c2VyUmV3YXJkRGVidCh0bykuaGFzVmFsdWUpIHsKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ1CiAgICAvLyBpZiAoIXRoaXMudXNlclJld2FyZERlYnQodG8pLmhhc1ZhbHVlKSB7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGJueiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZSA9IDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDQ6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIucGVuZGluZ1Jld2FyZCh1c2VyOiBieXRlcykgLT4gdWludDY0OgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIucGVuZGluZ1Jld2FyZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NS05NgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwZW5kaW5nUmV3YXJkKHVzZXI6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTcKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NwogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh0aGlzLmJhbGFuY2UodXNlcikudmFsdWUpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUpIC8gUF9TQ0FMRSkgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHVzZXIpLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMwCiAgICAvLyBhY2NSZXdhcmRQZXJTaGFyZVAgPSBHbG9iYWxTdGF0ZTxiaWd1aW50Pih7IGluaXRpYWxWYWx1ZTogMG4gfSk7CiAgICBieXRlYyA4IC8vICJhY2NSZXdhcmRQZXJTaGFyZVAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTcKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBiKgogICAgYnl0ZWMgOSAvLyAweDAxMDAwMDAwMDAwMDAwCiAgICBiLwogICAgY2FsbHN1YiBiaWd1aW50VG9VaW50NjRNb2R1bG8KICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjk3CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHRoaXMuYmFsYW5jZSh1c2VyKS52YWx1ZSkgKiB0aGlzLmFjY1Jld2FyZFBlclNoYXJlUC52YWx1ZSkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQodXNlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC0KICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5hZGRSZXdhcmRzKHJld2FyZEFtb3VudDogdWludDY0KSAtPiB2b2lkOgphZGRSZXdhcmRzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMAogICAgLy8gcHJvdGVjdGVkIGFkZFJld2FyZHMocmV3YXJkQW1vdW50OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMQogICAgLy8gbGV0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMQogICAgLy8gbGV0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMgogICAgLy8gaWYgKHRvdGFsU3VwcGx5ID4gMCkgewogICAgYnogYWRkUmV3YXJkc19hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDMKICAgIC8vIGNvbnN0IGFkbWluRmVlUmV3YXJkczogdWludDY0ID0gKHJld2FyZEFtb3VudCAqIHRoaXMuYWRtaW5GZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOAogICAgLy8gYWRtaW5GZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogQlAgLyA1IH0pOyAvLyBEZWZhdWx0IGFkbWluIGZlZSBpcyAyMCUKICAgIGJ5dGVjIDE4IC8vICJhZG1pbkZlZVNoYXJlQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTAzCiAgICAvLyBjb25zdCBhZG1pbkZlZVJld2FyZHM6IHVpbnQ2NCA9IChyZXdhcmRBbW91bnQgKiB0aGlzLmFkbWluRmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICoKICAgIGludGMgNCAvLyAxMDAwMAogICAgLwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNAogICAgLy8gcmV3YXJkQW1vdW50IC09IGFkbWluRmVlUmV3YXJkczsKICAgIGZyYW1lX2RpZyAtMQogICAgZGlnIDEKICAgIC0KICAgIGZyYW1lX2J1cnkgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDUKICAgIC8vIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlICs9IEJpZ1VpbnQocmV3YXJkQW1vdW50KSAqIFBfU0NBTEUgLyBCaWdVaW50KHRvdGFsU3VwcGx5KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzAKICAgIC8vIGFjY1Jld2FyZFBlclNoYXJlUCA9IEdsb2JhbFN0YXRlPGJpZ3VpbnQ+KHsgaW5pdGlhbFZhbHVlOiAwbiB9KTsKICAgIGJ5dGVjIDggLy8gImFjY1Jld2FyZFBlclNoYXJlUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDUKICAgIC8vIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlICs9IEJpZ1VpbnQocmV3YXJkQW1vdW50KSAqIFBfU0NBTEUgLyBCaWdVaW50KHRvdGFsU3VwcGx5KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYioKICAgIGZyYW1lX2RpZyAwCiAgICBpdG9iCiAgICBiLwogICAgYisKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNQogICAgLy8gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgKz0gQmlnVWludChyZXdhcmRBbW91bnQpICogUF9TQ0FMRSAvIEJpZ1VpbnQodG90YWxTdXBwbHkpOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDYKICAgIC8vIHRoaXMuYWRtaW5GZWVBbW91bnQudmFsdWUgKz0gYWRtaW5GZWVSZXdhcmRzOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMQogICAgLy8gYWRtaW5GZWVBbW91bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgMTEgLy8gImFkbWluRmVlQW1vdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNgogICAgLy8gdGhpcy5hZG1pbkZlZUFtb3VudC52YWx1ZSArPSBhZG1pbkZlZVJld2FyZHM7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTA2CiAgICAvLyB0aGlzLmFkbWluRmVlQW1vdW50LnZhbHVlICs9IGFkbWluRmVlUmV3YXJkczsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgphZGRSZXdhcmRzX2FmdGVyX2lmX2Vsc2VAMjoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5kZXBvc2l0THAodG86IGJ5dGVzLCBscEFtb3VudDogdWludDY0KSAtPiB2b2lkOgpkZXBvc2l0THA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTEwCiAgICAvLyBwcm90ZWN0ZWQgZGVwb3NpdExwKHRvOiBBY2NvdW50LCBscEFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTEKICAgIC8vIGNvbnN0IGFjY1Jld2FyZFBlclNoYXJlUCA9IHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMQogICAgLy8gY29uc3QgYWNjUmV3YXJkUGVyU2hhcmVQID0gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMgogICAgLy8gbGV0IHBlbmRpbmc6IHVpbnQ2NCA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMwogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZSh0bykudmFsdWU7CiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTEzCiAgICAvLyBsZXQgdXNlckxwQW1vdW50ID0gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTQKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiBkZXBvc2l0THBfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE1CiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWU7CiAgICBmcmFtZV9kaWcgMgogICAgaXRvYgogICAgZnJhbWVfZGlnIDAKICAgIGIqCiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE1CiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC0KICAgIGZyYW1lX2J1cnkgMQoKZGVwb3NpdExwX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTcKICAgIC8vIHVzZXJMcEFtb3VudCArPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTgKICAgIC8vIHRoaXMuYmFsYW5jZSh0bykudmFsdWUgKz0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmJhbGFuY2UodG8pLnZhbHVlICs9IGxwQW1vdW50OwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIGZyYW1lX2RpZyAtMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOAogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSArPSBscEFtb3VudDsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSArPSBscEFtb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSArPSBscEFtb3VudDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE5CiAgICAvLyB0aGlzLnRvdGFsU3VwcGx5LnZhbHVlICs9IGxwQW1vdW50OwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMjEKICAgIC8vIHRoaXMudXNlclJld2FyZERlYnQodG8pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVApIC8gUF9TQ0FMRSk7CiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMAogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBmcmFtZV9kaWcgLTIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMQogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWUgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCkgLyBQX1NDQUxFKTsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMgogICAgLy8gaWYgKHBlbmRpbmcgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogZGVwb3NpdExwX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMwogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLCBhc3NldEFtb3VudDogcGVuZGluZywgYXNzZXRSZWNlaXZlcjogdG8gfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTIzCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB0byB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTI0CiAgICAvLyBlbWl0PFJld2FyZHNDbGFpbWVkPih7IHVzZXI6IG5ldyBBZGRyZXNzKHRvKSwgcGVuZGluZyB9KTsKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyAyNSAvLyBtZXRob2QgIlJld2FyZHNDbGFpbWVkKGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCgpkZXBvc2l0THBfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyNgogICAgLy8gZW1pdDxEZXBvc2l0Pih7IHRvOiBuZXcgQWRkcmVzcyh0byksIGxwQW1vdW50IH0pOwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4Y2ZhYjg3MjMgLy8gbWV0aG9kICJEZXBvc2l0KGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo6T3duYWJsZS5vbmx5T3duZXIoKSAtPiB2b2lkOgpvbmx5T3duZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsICdPbmx5IG93bmVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjEzCiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5vd25lci52YWx1ZS5ieXRlcywgJ09ubHkgb3duZXInKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgb3duZXIKICAgIHJldHN1Ygo=",clear:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CyAFAAEIIJBOJh0MdG9rZW5CYWxhbmNlC3ZVc2RCYWxhbmNlBWFzc2V0B2JhbGFuY2UIcmVzZXJ2ZXMOdXNlclJld2FyZERlYnQBZAt0b3RhbFN1cHBseRJhY2NSZXdhcmRQZXJTaGFyZVAHAQAAAAAAAAEBDmFkbWluRmVlQW1vdW50CmNhbkRlcG9zaXQLY2FuV2l0aGRyYXcFb3duZXIKZmVlU2hhcmVCUBFiYWxhbmNlUmF0aW9NaW5CUAECD2FkbWluRmVlU2hhcmVCUAFhBnJvdXRlcg1zdG9wQXV0aG9yaXR5EXRva2VuQW1vdW50UmVkdWNlE3Rva2VuQW1vdW50SW5jcmVhc2UEFR98dQS6gYB2AQMDBoEBCQEAAAAAAAAAADEYQAApJxKB0A9nJwciZycIgABnJwsiZygiZykiZycEImcnBiJnJwwjZycNI2eCAwQBo6P/BARZt6wEm0uCNDYaAI4DALcAqwCdMRkURDEYQQCGghIEdhCkYATjrrJcBNl4rRQEDRtMBgR1v5ooBPST1+0EjVy23wT+BKXOBAKOCFkEQfyWbgSr8gAUBASxYfEEZlkczwSlrmvRBKBMW8QENhthWQRTjpEnBOF7r7Q2GgCOEgFbApMCqgNaBDYETQR0BIsElASdBKYErwTABNEFLAVDBXIFhQCABFFtNHs2GgCOAQCJACMxGZCBAxoxGBBEQgFyMRmBAhIxGBBEQgEFMRkjEjEYEERCAPOKAgCL/oEKCIsAMgwNQQAqsYEGshCBBbIZJxuyHicbsh+L/40CAAsABLNC/9syALIBQv/1IrIBQv/viYoBAYv/FUkkDUEAGIsAJAlJiwBJTgMPSwJMTYv/TE8CUhdMiSJC/+g2GgFJFSUSRDYaAkkVJRJENhoDSRUkEkQXNhoESRUkEkQXNhoFSRUkEkQXNhoGSRUkEkQXJw5LBmcqTwNnJxNPA2cnFE8DZycVTwNnJw9PAmcnEExnIiplRHEBTElPAkSBAw1BACZJgQMJgQpMlCcWTGdJgQMMQQAPgQNLAQmBCkyUJxdMZyNDIkL/9iJC/94xAIgIgCNDNhoBSRUkEkQXMQBJIitjTElPAkRBAAZJSwOIBKBLAUkiK2NEFESICHkURCNDiAlosSIqZUQyCrIUIrISshGBBLIQIrIBs4AWUG9vbDogb3B0LWluIGNvbXBsZXRlZLAjQ4AARwQxFiMJSTgQgQQSRDYaAUkVJBJEFyKI/okxGSMSQQAFMQCIB/UiJwxlREQiJwZlTElOAkUGREsBSTgRIiplRBJESTgUMgoSREk4IDIDEkRJOBUyAxJEOBKIBkxJRQhJRCInBGVECCcETGciKGVMSU4CRQZEIillTElOAkUGRAhFBkEABUsEQAA1SwUjkSIoZURLAQgoTGciKWVECClMZ4gFkTEAIicGZURLBQmIB+4iKGVEgYCAgICAIAxEI0MiKGVESwYWSwQWSwGjSwcWTEsBokkVJA5EJK9MSwGrF08ECChMZyIpZURLBRZPBKNPA6JJFSQORE8CqxcIKUxnQv+eNhoBSRUkEkQXNhoCSRUkEkQXiANDI0OAADYaAUkVJRJENhoCSRUkEkQXSTYaA0kVIxJEIlNMiALKIkwiTEEAXEsCQAANIicPZURLBAshBApFAUsDSUsCCYgFS0mIBXhPAkwJRQIiKGVESwEIKExnIicEZUQIJwRMZyIoZUSIBA5JRQciKWVEDEEACSIpZURLBglFAilLBmdJiAbAIiplRBZLBUxQSwQWUEsCFkxLAVBLAhZQgAQru+yjTFCwiAJXJxhMULAjQ4AASTYaAUkVJRJENhoCSRUkEkQXSTYaA0kVJBJEF0w2GgRJFSMSRCJTTIgCDyJMIkwiTEEAeyIpZURLBggpSwFniAODSUUKIihlTElOAkULRAxBAA1LB0sJCUlFBIgEsEUCIicEZURLA0lOAksBDkRMCScETGdLA0AADSInD2VESwILIQQKRQFKSU4CCUlFBChLC2dJSwcPRLEiKmVESwmyFLIRshKBBLIQIrIBs4gF5CIqZUQWSwdMUEsGFlBLAhZMSwFQSwIWUIAE0/HVQkxQsIgBeycYTFCwI0M2GgFJFSQSRBeIBoRJIQQORCcPTGcjQ4gGdiInBmVMSU8CRCInB2VMSU4CTgNEDUEACjEASwJLAgmIBb0jQzYaAUkVJBJEF4gGRkkhBA5EJxBMZyNDiAESJwwiZyNDiAYvJwwjZyNDiAEAJw0iZyNDiAYdJw0jZyNDNhoBSRUlEkSIBgwnFUxnI0M2GgFJFSUSRIgF+ycUTGcjQ4AASTEASSIrY0xJTwJEQQBISRYiJwhlRKMnCaKI+39JRQRLAiInBWNECUlFBUEAKUsBSScFSwVmsSIqZURLAbIUSwVJTgKyErIRgQSyECKyAbMWUCcZTFCwI0M2GgFJFSQSRBeIBY5JIQQORCcSTGcjQ4gFgCInC2VMSU8CREEAHrEiKmVEIicOZUSyFEsBshKyEYEEshAisgGzJwsiZyNDNhoBSRUlEkSIBFMWJxhMULAjQzYaAUkVJRJEiAU2Jw5MZyNDMQAiJxRlRBJEiTEAIicVZUQSRImKAAAiKGVMSU8CRCIpZUxJTgJOA0QNQQAQiwEhBAuLAAoiJxBlRA9EiYsAiwEMQf/3iwAhBAuLAQoiJxBlRA9EiYoCAIv/Ioj6QCInDWVERCInBmVEMQBJIitjTElPAkRJi/4PRCInCGVMTgJEIkxBABaLAhaLA6MnCaKI+keLASInBWNECYwEiwKL/gmLAUkiK2NEi/4JSwErTwJmIicHZUSL/gknB0xnTBaLA6MnCaKI+hEnBUxmiwRBACSxIiplRIsBSU4CshSLBElOArISshGBBLIQIrIBsxZQJxlMULCL/haLAUsBUIAE06+k8UxQsCIoZUQiKWVESghLAhZLBKNLARZMSwGiSRUkDkQkr0xLAasXTwVMCShMZyIpZURPBBZPBaNPA6JJFSQORE8CqxcJKUsBZyIoZUQIDUQiJwRlRIv+SwEORIv+CScETGeIAMgiJwZlRIsADESxIiplRIv+iAFaMQCyFLISshGBBLIQIrIBs4mKAQEiSYv/FkkiJwZlRBZJTgIiJxNlRIECkBZJTgMnEaNOAqZJQQB0iwOLAqGLBKOMAIsGQQBaiwCLA6dBAEeLAIsDoYwBI4sEiwNJTgKjSwGjo4sBSaOLAklPAqNPAqCjiAEWTEEAFYsCiwGjoIsFiwKjoicKoIj41IwAiYsCiwGjoUL/6IsDiwChjAEiQv+2iwCLA6CMASJC/6uLAosDoUL/iYoAACIoZUQWIillRBZKoyInE2VEFklLAqNPBE8EoKNJTgJOA4ABBKMnCqFPAqMnGqJLAUsCo0sBSwKjTwKjoIgAlElOAkqgiADyTgOkQQAViwChiADmiwFMCYwBiwEjkCcGTGeJiwBMoYgA0IsBCIwBQv/oigEBIicWZUxJTwJEIicXZUxOAkRBAAiL/4sACowAiYsBQQAIi/+LAQuMAImL/4wAiYoBASInFmVMSU8CRCInF2VMTgJEQQAIi/+LAAuMAImLAUEACIv/iwEKjACJi/+MAImKAQEiSYv/gAClRIv/gACoQQAFgACMAImL/ycapkEABScKjACJi/+TIwiBAgqBAkyVTBZMFkwnHKOgSYwAi/9LAaKgJxGijAGLAYsApEEAFYv/iwFJTgKiSwGgJxGijAGMAEL/44mKAQEiRwOL/4AAqEEABCKMAImL/4ABCKRBAAQjjACJi/+TgQIIgQMKgQJMlUwWTBZMJxyjoIwBiwFJo0mMA4AAqEAAJycRiwFJTgKji/+LA6KgJxqiSYwAqEAAC4sBJwqhiwCoQQA9iwCMAYsBJwqgSYwCSUsBo6OL/6ZBAAeLAowBQv/miwFJSwGjo4v/pUEACosBJwqhjAFC/+mLAYj2zYwAiYsAjAFC/4yKAQCL/yIrY0UBQAAFi/8rImaL/yInBWNFAUAABov/JwUiZomKAQGL/yIrY0QWIicIZUSjJwmiiPaJi/8iJwVjRAmJigEAIicHZUxJTwJEQQAwIicSZUSL/wshBAqL/0sBCYz/IicIZUSL/xYnCaOLABaioCcITGciJwtlRAgnC0xniYoCACInCGVEIov+IitjTElPAkRBABaLAhaLAKMnCaKI9h6L/iInBWNECYwBiwKL/wiL/iIrY0SL/wiL/itPAmYiJwdlRIv/CCcHTGcWiwCjJwmiiPXqi/4nBU8CZosBQQAksSIqZUSL/rIUiwFJTgKyErIRgQSyECKyAbMWi/5MUCcZTFCwi/8Wi/5MUIAEz6uHI0xQsIkxACInDmVEEkSJ",clear:"C4EBQw=="},events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]},{name:"SwappedToVUsd",args:[{type:"address",name:"sender"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"vUsdAmount"},{type:"uint64",name:"fee"}]},{name:"SwappedFromVUsd",args:[{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"vUsdAmount"},{type:"uint64",name:"amount"},{type:"uint64",name:"fee"}]}],templateVariables:{}},si=class{constructor(a){this.value=a}value;asByteArray(){return this.value}asString(){return this.value!==void 0?I.from(this.value).toString("utf-8"):void 0}},k=class o{static get create(){return{_resolveByMethod(a){switch(a.method){case"createApplication":case"createApplication(address,address,uint64,uint64,uint64,uint64)void":return o.create.createApplication(a)}throw new Error("Unknown ' + verb + ' method")},createApplication(a){return{...a,method:"createApplication(address,address,uint64,uint64,uint64,uint64)void",args:Array.isArray(a.args)?a.args:[a.args.owner,a.args.router,a.args.a,a.args.asset,a.args.feeShareBp,a.args.balanceRatioMinBp]}}}}static get optIn(){return{optInToApplication(a){return{...a,method:"optInToApplication()void",args:Array.isArray(a.args)?a.args:[]}},deposit(a){return{...a,method:"deposit(axfer,uint64)void",args:Array.isArray(a.args)?a.args:[a.args.assetTransferRef,a.args.budget]}}}}static get closeOut(){return{closeOutOfApplication(a){return{...a,method:"closeOutOfApplication(uint64)void",args:Array.isArray(a.args)?a.args:[a.args.budget]}}}}static optInAsset(a){return{...a,method:"optInAsset()void",args:Array.isArray(a.args)?a.args:[]}}static deposit(a){return{...a,method:"deposit(axfer,uint64)void",args:Array.isArray(a.args)?a.args:[a.args.assetTransferRef,a.args.budget]}}static withdraw(a){return{...a,method:"withdraw(uint64,uint64)void",args:Array.isArray(a.args)?a.args:[a.args.amountLp,a.args.budget]}}static swapToVUsd(a){return{...a,method:"swapToVUsd(address,uint64,bool)uint64",args:Array.isArray(a.args)?a.args:[a.args.user,a.args.amount,a.args.zeroFee]}}static swapFromVUsd(a){return{...a,method:"swapFromVUsd(address,uint64,uint64,bool)uint64",args:Array.isArray(a.args)?a.args:[a.args.user,a.args.amount,a.args.receiveAmountMin,a.args.zeroFee]}}static setFeeShare(a){return{...a,method:"setFeeShare(uint64)void",args:Array.isArray(a.args)?a.args:[a.args.feeShareBp]}}static adjustTotalLpAmount(a){return{...a,method:"adjustTotalLpAmount()void",args:Array.isArray(a.args)?a.args:[]}}static setBalanceRatioMinBp(a){return{...a,method:"setBalanceRatioMinBP(uint64)void",args:Array.isArray(a.args)?a.args:[a.args.balanceRatioMinBp]}}static stopDeposit(a){return{...a,method:"stopDeposit()void",args:Array.isArray(a.args)?a.args:[]}}static startDeposit(a){return{...a,method:"startDeposit()void",args:Array.isArray(a.args)?a.args:[]}}static stopWithdraw(a){return{...a,method:"stopWithdraw()void",args:Array.isArray(a.args)?a.args:[]}}static startWithdraw(a){return{...a,method:"startWithdraw()void",args:Array.isArray(a.args)?a.args:[]}}static setStopAuthority(a){return{...a,method:"setStopAuthority(address)void",args:Array.isArray(a.args)?a.args:[a.args.stopAuthority]}}static setRouter(a){return{...a,method:"setRouter(address)void",args:Array.isArray(a.args)?a.args:[a.args.router]}}static claimRewards(a){return{...a,method:"claimRewards()void",args:Array.isArray(a.args)?a.args:[]}}static setAdminFeeShare(a){return{...a,method:"setAdminFeeShare(uint64)void",args:Array.isArray(a.args)?a.args:[a.args.adminFeeShareBp]}}static claimAdminFee(a){return{...a,method:"claimAdminFee()void",args:Array.isArray(a.args)?a.args:[]}}static pendingReward(a){return{...a,method:"pendingReward(address)uint64",args:Array.isArray(a.args)?a.args:[a.args.user]}}static transferOwnership(a){return{...a,method:"transferOwnership(address)void",args:Array.isArray(a.args)?a.args:[a.args.newOwner]}}};var di=class o{appClient;constructor(a){this.appClient=a instanceof ri?a:new ri({...a,appSpec:oi})}decodeReturnValue(a,i){return i!==void 0?jA(i,this.appClient.getABIMethod(a),oi.structs):void 0}static async fromCreatorAndName(a){return new o(await ri.fromCreatorAndName({...a,appSpec:oi}))}static async fromNetwork(a){return new o(await ri.fromNetwork({...a,appSpec:oi}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={optIn:{optInToApplication:(a={args:[]})=>this.appClient.params.optIn(k.optIn.optInToApplication(a)),deposit:a=>this.appClient.params.optIn(k.optIn.deposit(a))},closeOut:{closeOutOfApplication:(a={args:[void 0]})=>this.appClient.params.closeOut(k.closeOut.closeOutOfApplication(a))},clearState:a=>this.appClient.params.bare.clearState(a),optInAsset:(a={args:[]})=>this.appClient.params.call(k.optInAsset(a)),deposit:a=>this.appClient.params.call(k.deposit(a)),withdraw:a=>this.appClient.params.call(k.withdraw(a)),swapToVUsd:a=>this.appClient.params.call(k.swapToVUsd(a)),swapFromVUsd:a=>this.appClient.params.call(k.swapFromVUsd(a)),setFeeShare:a=>this.appClient.params.call(k.setFeeShare(a)),adjustTotalLpAmount:(a={args:[]})=>this.appClient.params.call(k.adjustTotalLpAmount(a)),setBalanceRatioMinBp:a=>this.appClient.params.call(k.setBalanceRatioMinBp(a)),stopDeposit:(a={args:[]})=>this.appClient.params.call(k.stopDeposit(a)),startDeposit:(a={args:[]})=>this.appClient.params.call(k.startDeposit(a)),stopWithdraw:(a={args:[]})=>this.appClient.params.call(k.stopWithdraw(a)),startWithdraw:(a={args:[]})=>this.appClient.params.call(k.startWithdraw(a)),setStopAuthority:a=>this.appClient.params.call(k.setStopAuthority(a)),setRouter:a=>this.appClient.params.call(k.setRouter(a)),claimRewards:(a={args:[]})=>this.appClient.params.call(k.claimRewards(a)),setAdminFeeShare:a=>this.appClient.params.call(k.setAdminFeeShare(a)),claimAdminFee:(a={args:[]})=>this.appClient.params.call(k.claimAdminFee(a)),pendingReward:a=>this.appClient.params.call(k.pendingReward(a)),transferOwnership:a=>this.appClient.params.call(k.transferOwnership(a))};createTransaction={optIn:{optInToApplication:(a={args:[]})=>this.appClient.createTransaction.optIn(k.optIn.optInToApplication(a)),deposit:a=>this.appClient.createTransaction.optIn(k.optIn.deposit(a))},closeOut:{closeOutOfApplication:(a={args:[void 0]})=>this.appClient.createTransaction.closeOut(k.closeOut.closeOutOfApplication(a))},clearState:a=>this.appClient.createTransaction.bare.clearState(a),optInAsset:(a={args:[]})=>this.appClient.createTransaction.call(k.optInAsset(a)),deposit:a=>this.appClient.createTransaction.call(k.deposit(a)),withdraw:a=>this.appClient.createTransaction.call(k.withdraw(a)),swapToVUsd:a=>this.appClient.createTransaction.call(k.swapToVUsd(a)),swapFromVUsd:a=>this.appClient.createTransaction.call(k.swapFromVUsd(a)),setFeeShare:a=>this.appClient.createTransaction.call(k.setFeeShare(a)),adjustTotalLpAmount:(a={args:[]})=>this.appClient.createTransaction.call(k.adjustTotalLpAmount(a)),setBalanceRatioMinBp:a=>this.appClient.createTransaction.call(k.setBalanceRatioMinBp(a)),stopDeposit:(a={args:[]})=>this.appClient.createTransaction.call(k.stopDeposit(a)),startDeposit:(a={args:[]})=>this.appClient.createTransaction.call(k.startDeposit(a)),stopWithdraw:(a={args:[]})=>this.appClient.createTransaction.call(k.stopWithdraw(a)),startWithdraw:(a={args:[]})=>this.appClient.createTransaction.call(k.startWithdraw(a)),setStopAuthority:a=>this.appClient.createTransaction.call(k.setStopAuthority(a)),setRouter:a=>this.appClient.createTransaction.call(k.setRouter(a)),claimRewards:(a={args:[]})=>this.appClient.createTransaction.call(k.claimRewards(a)),setAdminFeeShare:a=>this.appClient.createTransaction.call(k.setAdminFeeShare(a)),claimAdminFee:(a={args:[]})=>this.appClient.createTransaction.call(k.claimAdminFee(a)),pendingReward:a=>this.appClient.createTransaction.call(k.pendingReward(a)),transferOwnership:a=>this.appClient.createTransaction.call(k.transferOwnership(a))};send={optIn:{optInToApplication:async(a={args:[]})=>{let i=await this.appClient.send.optIn(k.optIn.optInToApplication(a));return{...i,return:i.return}},deposit:async a=>{let i=await this.appClient.send.optIn(k.optIn.deposit(a));return{...i,return:i.return}}},closeOut:{closeOutOfApplication:async(a={args:[void 0]})=>{let i=await this.appClient.send.closeOut(k.closeOut.closeOutOfApplication(a));return{...i,return:i.return}}},clearState:a=>this.appClient.send.bare.clearState(a),optInAsset:async(a={args:[]})=>{let i=await this.appClient.send.call(k.optInAsset(a));return{...i,return:i.return}},deposit:async a=>{let i=await this.appClient.send.call(k.deposit(a));return{...i,return:i.return}},withdraw:async a=>{let i=await this.appClient.send.call(k.withdraw(a));return{...i,return:i.return}},swapToVUsd:async a=>{let i=await this.appClient.send.call(k.swapToVUsd(a));return{...i,return:i.return}},swapFromVUsd:async a=>{let i=await this.appClient.send.call(k.swapFromVUsd(a));return{...i,return:i.return}},setFeeShare:async a=>{let i=await this.appClient.send.call(k.setFeeShare(a));return{...i,return:i.return}},adjustTotalLpAmount:async(a={args:[]})=>{let i=await this.appClient.send.call(k.adjustTotalLpAmount(a));return{...i,return:i.return}},setBalanceRatioMinBp:async a=>{let i=await this.appClient.send.call(k.setBalanceRatioMinBp(a));return{...i,return:i.return}},stopDeposit:async(a={args:[]})=>{let i=await this.appClient.send.call(k.stopDeposit(a));return{...i,return:i.return}},startDeposit:async(a={args:[]})=>{let i=await this.appClient.send.call(k.startDeposit(a));return{...i,return:i.return}},stopWithdraw:async(a={args:[]})=>{let i=await this.appClient.send.call(k.stopWithdraw(a));return{...i,return:i.return}},startWithdraw:async(a={args:[]})=>{let i=await this.appClient.send.call(k.startWithdraw(a));return{...i,return:i.return}},setStopAuthority:async a=>{let i=await this.appClient.send.call(k.setStopAuthority(a));return{...i,return:i.return}},setRouter:async a=>{let i=await this.appClient.send.call(k.setRouter(a));return{...i,return:i.return}},claimRewards:async(a={args:[]})=>{let i=await this.appClient.send.call(k.claimRewards(a));return{...i,return:i.return}},setAdminFeeShare:async a=>{let i=await this.appClient.send.call(k.setAdminFeeShare(a));return{...i,return:i.return}},claimAdminFee:async(a={args:[]})=>{let i=await this.appClient.send.call(k.claimAdminFee(a));return{...i,return:i.return}},pendingReward:async a=>{let i=await this.appClient.send.call(k.pendingReward(a));return{...i,return:i.return}},transferOwnership:async a=>{let i=await this.appClient.send.call(k.transferOwnership(a));return{...i,return:i.return}}};clone(a){return new o(this.appClient.clone(a))}async pendingReward(a){return(await this.appClient.send.call(k.pendingReward(a))).return}state={global:{getAll:async()=>{let a=await this.appClient.state.global.getAll();return{feeShareBp:a.feeShareBP,router:a.router,tokenBalance:a.tokenBalance,vUsdBalance:a.vUsdBalance,balanceRatioMinBp:a.balanceRatioMinBP,reserves:a.reserves,a:a.a,d:a.d,tokenAmountReduce:a.tokenAmountReduce,tokenAmountIncrease:a.tokenAmountIncrease,stopAuthority:a.stopAuthority,canDeposit:a.canDeposit,canWithdraw:a.canWithdraw,asset:a.asset,adminFeeShareBp:a.adminFeeShareBP,totalSupply:a.totalSupply,accRewardPerShareP:new si(a.accRewardPerShareP),adminFeeAmount:a.adminFeeAmount,owner:a.owner}},feeShareBp:async()=>await this.appClient.state.global.getValue("feeShareBP"),router:async()=>await this.appClient.state.global.getValue("router"),tokenBalance:async()=>await this.appClient.state.global.getValue("tokenBalance"),vUsdBalance:async()=>await this.appClient.state.global.getValue("vUsdBalance"),balanceRatioMinBp:async()=>await this.appClient.state.global.getValue("balanceRatioMinBP"),reserves:async()=>await this.appClient.state.global.getValue("reserves"),a:async()=>await this.appClient.state.global.getValue("a"),d:async()=>await this.appClient.state.global.getValue("d"),tokenAmountReduce:async()=>await this.appClient.state.global.getValue("tokenAmountReduce"),tokenAmountIncrease:async()=>await this.appClient.state.global.getValue("tokenAmountIncrease"),stopAuthority:async()=>await this.appClient.state.global.getValue("stopAuthority"),canDeposit:async()=>await this.appClient.state.global.getValue("canDeposit"),canWithdraw:async()=>await this.appClient.state.global.getValue("canWithdraw"),asset:async()=>await this.appClient.state.global.getValue("asset"),adminFeeShareBp:async()=>await this.appClient.state.global.getValue("adminFeeShareBP"),totalSupply:async()=>await this.appClient.state.global.getValue("totalSupply"),accRewardPerShareP:async()=>new si(await this.appClient.state.global.getValue("accRewardPerShareP")),adminFeeAmount:async()=>await this.appClient.state.global.getValue("adminFeeAmount"),owner:async()=>await this.appClient.state.global.getValue("owner")},local:a=>{let i=typeof a=="string"?a:zA(a.publicKey);return{getAll:async()=>{let r=await this.appClient.state.local(i).getAll();return{balance:r.balance,userRewardDebt:r.userRewardDebt}},balance:async()=>await this.appClient.state.local(i).getValue("balance"),userRewardDebt:async()=>await this.appClient.state.local(i).getValue("userRewardDebt")}}};newGroup(){let a=this,i=this.algorand.newGroup(),r=Promise.resolve(),s=[];return{optInAsset(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.optInAsset(d))),s.push(void 0),this},deposit(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.deposit(d))),s.push(void 0),this},withdraw(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.withdraw(d))),s.push(void 0),this},swapToVUsd(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.swapToVUsd(d))),s.push(A=>a.decodeReturnValue("swapToVUsd(address,uint64,bool)uint64",A)),this},swapFromVUsd(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.swapFromVUsd(d))),s.push(A=>a.decodeReturnValue("swapFromVUsd(address,uint64,uint64,bool)uint64",A)),this},setFeeShare(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.setFeeShare(d))),s.push(void 0),this},adjustTotalLpAmount(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.adjustTotalLpAmount(d))),s.push(void 0),this},setBalanceRatioMinBp(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.setBalanceRatioMinBp(d))),s.push(void 0),this},stopDeposit(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.stopDeposit(d))),s.push(void 0),this},startDeposit(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.startDeposit(d))),s.push(void 0),this},stopWithdraw(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.stopWithdraw(d))),s.push(void 0),this},startWithdraw(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.startWithdraw(d))),s.push(void 0),this},setStopAuthority(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.setStopAuthority(d))),s.push(void 0),this},setRouter(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.setRouter(d))),s.push(void 0),this},claimRewards(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.claimRewards(d))),s.push(void 0),this},setAdminFeeShare(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.setAdminFeeShare(d))),s.push(void 0),this},claimAdminFee(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.claimAdminFee(d))),s.push(void 0),this},pendingReward(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.pendingReward(d))),s.push(A=>a.decodeReturnValue("pendingReward(address)uint64",A)),this},transferOwnership(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.transferOwnership(d))),s.push(void 0),this},get optIn(){return{optInToApplication:d=>(r=r.then(async()=>i.addAppCallMethodCall(await a.params.optIn.optInToApplication(d))),s.push(void 0),this),deposit:d=>(r=r.then(async()=>i.addAppCallMethodCall(await a.params.optIn.deposit(d))),s.push(void 0),this)}},get closeOut(){return{closeOutOfApplication:d=>(r=r.then(async()=>i.addAppCallMethodCall(await a.params.closeOut.closeOutOfApplication(d))),s.push(void 0),this)}},clearState(d){return r=r.then(()=>i.addAppCall(a.params.clearState(d))),this},addTransaction(d,A){return r=r.then(()=>i.addTransaction(d,A)),this},async composer(){return await r,i},async simulate(d){await r;let A=await(d?i.simulate(d):i.simulate());return{...A,returns:A.returns?.map((l,u)=>s[u]!==void 0?s[u](l):l.returnValue)}},async send(d){await r;let A=await i.send(d);return{...A,returns:A.returns?.map((l,u)=>s[u]!==void 0?s[u](l):l.returnValue)}}}}};var we=class{lpAmount;rewardDebt;constructor(a){this.lpAmount=a.lpAmount,this.rewardDebt=a.rewardDebt}get userLiquidity(){return H(this.lpAmount,3).toFixed()}earned(a,i){let r=_r(this.lpAmount,this.rewardDebt,a.accRewardPerShareP,a.p);return i?H(r,i).toFixed():r}};var Me=class{};var Un=class extends Me{constructor(i,r){super();this.algorand=i;this.api=r;i.setDefaultValidityWindow(100)}algorand;api;chainType="ALG";P=48;async buildRawTransactionClaimRewards(i){let r=i.accountAddress,s=BigInt(i.token.tokenAddress),d=BigInt(i.token.poolAddress),A=this.getPool(d),l=this.algorand.newGroup();l.addAppCallMethodCall(await A.params.claimRewards({args:[],sender:r,extraFee:Gt(1),assetReferences:[s]}));let{transactions:u}=await l.buildTransactions();return u=Br(u),Vt(...u)}async buildRawTransactionDeposit(i){let r=i.accountAddress,s=BigInt(i.amount),d=BigInt(i.token.tokenAddress),A=BigInt(i.token.poolAddress),l=this.getPool(A),b=await Fa(A,r,this.algorand)?rs.NoOpOC:rs.OptInOC,y=this.algorand.newGroup(),C=await this.algorand.createTransaction.assetTransfer({assetId:d,amount:s,sender:r,receiver:l.appAddress});y.addAppCallMethodCall(await l.params.deposit({args:{assetTransferRef:C},sender:r,onComplete:b,extraFee:Gt(5)}));let{transactions:f}=await y.buildTransactions();return f=Br(f),Vt(...f)}async buildRawTransactionWithdraw(i){let r=i.accountAddress,s=BigInt(i.amount),d=BigInt(i.token.tokenAddress),A=BigInt(i.token.poolAddress),l=this.getPool(A),u=this.algorand.newGroup();u.addAppCallMethodCall(await l.params.withdraw({args:{amountLp:s},sender:r,assetReferences:[d],extraFee:Gt(7)}));let{transactions:b}=await u.buildTransactions();return b=Br(b),Vt(...b)}async getPoolInfoFromChain(i){let s=await this.getPool(BigInt(i.poolAddress)).state.global.getAll(),d=s.a?.toString(),A=s.d?.toString(),l=s.tokenBalance?.toString(),u=s.vUsdBalance?.toString(),b=s.totalSupply?.toString(),y=OA(s.accRewardPerShareP?.asByteArray()??Uint8Array.from([])).toString();if(d&&A&&l&&u&&b&&y){let C=Ne({tokenBalance:l,vUsdBalance:u});return{aValue:d,dValue:A,tokenBalance:l,vUsdBalance:u,totalLpAmount:b,accRewardPerShareP:y,p:this.P,imbalance:C}}throw new w("Unable to pool info from chain")}async getUserBalanceInfo(i,r){let s=BigInt(r.poolAddress),d=this.getPool(s);try{let{balance:A,userRewardDebt:l}=await d.state.local(i).getAll();if(A!==void 0&&l!==void 0)return new we({lpAmount:A.toString(),rewardDebt:l.toString()})}catch{let u=(await this.algorand.account.getInformation(i)).appsLocalState;if(u&&!u.find(({id:y})=>y===s))return new we({lpAmount:"0",rewardDebt:"0"})}throw new w("Unable to get user balance")}getPool(i){return this.algorand.client.getTypedAppClientById(di,{appId:i})}};import{Web3 as Mt}from"web3";var QA={abi:[{inputs:[{internalType:"address",name:"_router",type:"address"},{internalType:"uint256",name:"_a",type:"uint256"},{internalType:"contract ERC20",name:"_token",type:"address"},{internalType:"uint16",name:"_feeShareBP",type:"uint16"},{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"},{internalType:"string",name:"lpName",type:"string"},{internalType:"string",name:"lpSymbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsClaimed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedFromVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedToVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"a",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"accRewardPerShareP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adjustTotalLpAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"adminFeeAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"balanceRatioMinBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canWithdraw",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"claimAdminFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"claimRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"d",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"feeShareBP",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"}],name:"getY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"pendingReward",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reserves",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"router",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_adminFeeShareBP",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"}],name:"setBalanceRatioMinBP",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"_feeShareBP",type:"uint16"}],name:"setFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_router",type:"address"}],name:"setRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapFromVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapToVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract ERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"userRewardDebt",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"vUsdBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountLp",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},Kn=QA;var Dn=class extends Me{constructor(i,r){super();this.web3=i;this.api=r}web3;api;chainType="EVM";P=52;async getUserBalanceInfo(i,r){let s;try{s=await va(this.getUserBalanceInfoByBatch(i,r),`Cannot get UserBalanceInfo for ${r.name} on ${r.chainSymbol}`,5e3)}catch{s=await zi(()=>this.getUserBalanceInfoPerProperty(i,r),`Cannot get UserBalanceInfo for ${r.name} on ${r.chainSymbol}`,5,2e3)}return s}async getPoolInfoFromChain(i){let r;try{r=await va(this.getPoolInfoByBatch(i),`Cannot get PoolInfo for ${i.name} on ${i.chainSymbol}`,5e3)}catch{r=await zi(()=>this.getPoolInfoPerProperty(i),`Cannot get PoolInfo for ${i.name} on ${i.chainSymbol}`,5,2e3)}return r}async getUserBalanceInfoByBatch(i,r){let s=new this.web3.eth.BatchRequest,d=this.getPoolContract(r.poolAddress),A=d.methods.userRewardDebt(i).encodeABI(),l=d.methods.balanceOf(i).encodeABI();s.add({method:"eth_call",params:[{to:r.poolAddress,data:A},"latest"]}),s.add({method:"eth_call",params:[{to:r.poolAddress,data:l},"latest"]});let[u,b]=await s.execute();if(u&&b&&!u.error&&!b.error)return new we({lpAmount:Mt.utils.toBigInt(b.result).toString(),rewardDebt:Mt.utils.toBigInt(u.result).toString()});throw new Error("Batched failed")}async getUserBalanceInfoPerProperty(i,r){let s=(await this.getPoolContract(r.poolAddress).methods.userRewardDebt(i).call()).toString(),d=(await this.getPoolContract(r.poolAddress).methods.balanceOf(i).call()).toString();return new we({lpAmount:d,rewardDebt:s})}async getPoolInfoByBatch(i){let r=new this.web3.eth.BatchRequest,s=this.getPoolContract(i.poolAddress),d=s.methods.a().encodeABI(),A=s.methods.d().encodeABI(),l=s.methods.tokenBalance().encodeABI(),u=s.methods.vUsdBalance().encodeABI(),b=s.methods.totalSupply().encodeABI(),y=s.methods.accRewardPerShareP().encodeABI();r.add({method:"eth_call",params:[{to:i.poolAddress,data:d},"latest"]}),r.add({method:"eth_call",params:[{to:i.poolAddress,data:A},"latest"]}),r.add({method:"eth_call",params:[{to:i.poolAddress,data:l},"latest"]}),r.add({method:"eth_call",params:[{to:i.poolAddress,data:u},"latest"]}),r.add({method:"eth_call",params:[{to:i.poolAddress,data:b},"latest"]}),r.add({method:"eth_call",params:[{to:i.poolAddress,data:y},"latest"]});let[C,f,v,R,F,N]=await r.execute();if(C&&f&&v&&R&&F&&N&&!C.error&&!f.error&&!v.error&&!R.error&&!F.error&&!N.error){let G=Mt.utils.toBigInt(v.result).toString(),B=Mt.utils.toBigInt(R.result).toString(),P=Ne({tokenBalance:G,vUsdBalance:B});return{aValue:Mt.utils.toBigInt(C.result).toString(),dValue:Mt.utils.toBigInt(f.result).toString(),tokenBalance:G,vUsdBalance:B,totalLpAmount:Mt.utils.toBigInt(F.result).toString(),accRewardPerShareP:Mt.utils.toBigInt(N.result).toString(),p:this.P,imbalance:P}}throw new Error("Batched failed")}async getPoolInfoPerProperty(i){let r=this.getPoolContract(i.poolAddress),s=(await r.methods.a().call()).toString(),d=(await r.methods.d().call()).toString(),A=(await r.methods.tokenBalance().call()).toString(),l=(await r.methods.vUsdBalance().call()).toString(),u=(await r.methods.totalSupply().call()).toString(),b=(await r.methods.accRewardPerShareP().call()).toString(),y=Ne({tokenBalance:A,vUsdBalance:l});return{aValue:s,dValue:d,tokenBalance:A,vUsdBalance:l,totalLpAmount:u,accRewardPerShareP:b,p:this.P,imbalance:y}}async buildRawTransactionDeposit(i){return Promise.resolve({...this.buildTxParams(i),data:this.getPoolContract(i.token.poolAddress).methods.deposit(i.amount).encodeABI()})}async buildRawTransactionWithdraw(i){return Promise.resolve({...this.buildTxParams(i),data:this.getPoolContract(i.token.poolAddress).methods.withdraw(i.amount).encodeABI()})}async buildRawTransactionClaimRewards(i){return Promise.resolve({...this.buildTxParams(i),data:this.getPoolContract(i.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(i){return{from:i.accountAddress,to:i.token.poolAddress,value:"0"}}getPoolContract(i){return new this.web3.eth.Contract(Kn.abi,i)}};var Ai=class{constructor(a,i,r,s){this.api=a;this.nodeRpcUrlsConfig=i;this.params=r;this.tokenService=s}api;nodeRpcUrlsConfig;params;tokenService;async approve(a,i){if(i){let r=a,s=i;return this.tokenService.buildRawTransactionApprove({...s,spender:s.token.poolAddress},r)}else{let r=a;return this.tokenService.buildRawTransactionApprove({...r,spender:r.token.poolAddress})}}async deposit(a,i){return $(a.amount),D("amount",a.amount,a.token.decimals),a.amount=j(a.amount,a.token.decimals).toFixed(),Cn(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionDeposit(a)}async withdraw(a,i){return $(a.amount),D("amount",a.amount,a.token.decimals),a.amount=j(a.amount,3).toFixed(),Cn(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionWithdraw(a)}async claimRewards(a,i){return Cn(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionClaimRewards(a)}};import{AnchorProvider as UA,BN as os,Program as KA,web3 as DA}from"@coral-xyz/anchor";import{createAssociatedTokenAccountInstruction as EA}from"@solana/spl-token";import{Connection as _A,PublicKey as xt}from"@solana/web3.js";var ci=class extends Me{constructor(i,r){super();this.solanaRpcUrl=i;this.api=r}solanaRpcUrl;api;chainType="SOLANA";P=48;async getUserBalanceInfo(i,r){let s=this.buildAnchorProvider(i),d=this.getBridge(r.bridgeAddress,s),A=new xt(r.poolAddress),l=await d.account.pool.fetch(A);try{let u=await qi(new xt(i),l.mint,d.programId),{lpAmount:b,rewardDebt:y}=await d.account.userDeposit.fetch(u);return new we({lpAmount:b.toString(),rewardDebt:y.toString()})}catch{return new we({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(i){let r=this.buildAnchorProvider(i.bridgeAddress),s=await this.getBridge(i.bridgeAddress,r).account.pool.fetch(i.poolAddress),d=s.vUsdBalance.toString(),A=s.tokenBalance.toString(),l=Ne({tokenBalance:A,vUsdBalance:d});return{dValue:s.d.toString(),aValue:s.a.toString(),totalLpAmount:s.totalLpAmount.toString(),vUsdBalance:d,tokenBalance:A,accRewardPerShareP:s.accRewardPerShareP.toString(),p:this.P,imbalance:l}}async buildRawTransactionDeposit(i){let{bridge:r,accounts:s,preInstructions:d}=await this.prepareDataForTransaction(i),A=await r.methods.deposit(new os(i.amount)).accounts(s).preInstructions(d).transaction();return A.recentBlockhash=(await this.buildAnchorProvider(i.accountAddress).connection.getLatestBlockhash()).blockhash,A.feePayer=new xt(i.accountAddress),await gn(A,i.txFeeParams,this.solanaRpcUrl),A}async buildRawTransactionWithdraw(i){let{bridge:r,accounts:s,preInstructions:d}=await this.prepareDataForTransaction(i),A=await r.methods.withdraw(new os(i.amount)).accounts(s).preInstructions(d).transaction();return A.recentBlockhash=(await this.buildAnchorProvider(i.accountAddress).connection.getLatestBlockhash()).blockhash,A.feePayer=new xt(i.accountAddress),await gn(A,i.txFeeParams,this.solanaRpcUrl),A}async buildRawTransactionClaimRewards(i){let{bridge:r,accounts:s,preInstructions:d}=await this.prepareDataForTransaction(i),A=await r.methods.claimRewards().accounts(s).preInstructions(d).transaction();return A.recentBlockhash=(await this.buildAnchorProvider(i.accountAddress).connection.getLatestBlockhash()).blockhash,A.feePayer=new xt(i.accountAddress),await gn(A,i.txFeeParams,this.solanaRpcUrl),A}async prepareDataForTransaction(i){let r=this.buildAnchorProvider(i.accountAddress),s=this.getBridge(i.token.bridgeAddress,r),{accounts:d,preInstructions:A}=await this._getLPTransactionData(s,i.token.poolAddress,i.accountAddress,r);return{bridge:s,accounts:d,preInstructions:A}}getBridge(i,r){return new KA({...Pt,address:i},r)}buildAnchorProvider(i){let r=new _A(this.solanaRpcUrl,"confirmed"),s=new xt(i);return new UA(r,{publicKey:s},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(i,r,s,d){let A=new xt(s),l=await nt(i.programId),u=await Xt(i.programId),b=new xt(r),C=(await i.account.pool.fetch(b)).mint,f=Qe(A,C),v=await Tt(C,i.programId),R=await qi(A,C,i.programId),F=[DA.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await ln(f,d)}catch{let B=EA(A,f,A,C);F.push(B)}try{await i.account.userDeposit.fetch(R)}catch{let B=await i.methods.initDepositAccount().accountsPartial({mint:C,user:A,userDeposit:R}).instruction();F.push(B)}return{accounts:{mint:C,user:A,config:l,pool:b,bridgeAuthority:u,userDeposit:R,userToken:f,bridgeToken:v},preInstructions:F}}};import{contract as TX}from"@stellar/stellar-sdk";import{contract as t}from"@stellar/stellar-sdk";var $A=t.Spec,qA=t.Client;var gi=class extends qA{constructor(i){super(new $A(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAQAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAQAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),i);this.options=i}options;fromJSON={initialize:this.txFromJSON,deposit:this.txFromJSON,withdraw:this.txFromJSON,swap_to_v_usd:this.txFromJSON,swap_from_v_usd:this.txFromJSON,claim_rewards:this.txFromJSON,set_fee_share:this.txFromJSON,adjust_total_lp_amount:this.txFromJSON,set_balance_ratio_min_bp:this.txFromJSON,stop_deposit:this.txFromJSON,start_deposit:this.txFromJSON,stop_withdraw:this.txFromJSON,start_withdraw:this.txFromJSON,set_stop_authority:this.txFromJSON,set_bridge:this.txFromJSON,set_admin:this.txFromJSON,set_admin_fee_share:this.txFromJSON,claim_admin_fee:this.txFromJSON,pending_reward:this.txFromJSON,get_pool:this.txFromJSON,get_admin:this.txFromJSON,get_stop_authority:this.txFromJSON,get_bridge:this.txFromJSON,get_user_deposit:this.txFromJSON,upgrade:this.txFromJSON}};var li=class extends Me{constructor(i,r,s){super();this.nodeRpcUrlsConfig=i;this.params=r;this.api=s}nodeRpcUrlsConfig;params;api;chainType="SRB";P=48;async getUserBalanceInfo(i,r){let d=await this.getContract(r.poolAddress).get_user_deposit({user:i});if(un(d))throw new w;let A=pn(d);if(!A)throw new w;let l=A.unwrap();return new we({lpAmount:l.lp_amount.toString(),rewardDebt:l.reward_debt.toString()})}async getPoolInfoFromChain(i){let s=await this.getContract(i.poolAddress).get_pool();if(un(s))throw new w;let d=pn(s);if(!d)throw new w;let A=d.unwrap();return{aValue:A.a.toString(),accRewardPerShareP:A.acc_reward_per_share_p.toString(),dValue:A.d.toString(),tokenBalance:A.token_balance.toString(),p:this.P,totalLpAmount:A.total_lp_amount.toString(),vUsdBalance:A.v_usd_balance.toString(),imbalance:Ne({tokenBalance:A.token_balance.toString(),vUsdBalance:A.v_usd_balance.toString()})}}async buildRawTransactionDeposit(i){let r=this.getContract(i.token.poolAddress,i.accountAddress),s=await Yt(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB"));return(await r.deposit({sender:i.accountAddress,amount:BigInt(i.amount)},{fee:s})).toXDR()}async buildRawTransactionWithdraw(i){let r=this.getContract(i.token.poolAddress,i.accountAddress),s=await Yt(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB"));return(await r.withdraw({sender:i.accountAddress,amount_lp:BigInt(i.amount)},{fee:s})).toXDR()}async buildRawTransactionClaimRewards(i){let r=this.getContract(i.token.poolAddress,i.accountAddress),s=await Yt(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB"));return(await r.claim_rewards({sender:i.accountAddress},{fee:s})).toXDR()}getContract(i,r){let s={publicKey:r,contractId:i,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new gi(s)}};import{ClarigenClient as ec,contractFactory as En}from"@clarigen/core";import{createNetwork as tc}from"@stacks/network";import{makeRandomPrivKey as Tr,makeUnsignedContractCall as Yr,PostConditionMode as Wr,privateKeyToPublic as wr}from"@stacks/transactions";import{Big as nc}from"big.js";var pi=class extends Me{constructor(i,r,s){super();this.nodeRpcUrl=i;this.params=r;this.api=s;let d=tc({network:this.params.stxIsTestnet?"testnet":"mainnet",client:{baseUrl:this.nodeRpcUrl},apiKey:this.params.stxHeroApiKey});this.client=new ec(d,this.params.stxHeroApiKey)}nodeRpcUrl;params;api;chainType="STX";P=48;A="20";client;async getUserBalanceInfo(i,r){let s=En(at.pool,r.poolAddress),d=await this.client.ro(s.getLpBalance({user:i})),A=await this.client.ro(s.getUserRewardDebt({user:i}));return new we({lpAmount:d.toString(),rewardDebt:A.toString()})}async getPoolInfoFromChain(i){let r=En(at.pool,i.poolAddress),[s,d,A,l,u]=await Promise.all([this.client.ro(r.getD()),this.client.ro(r.getTokenBalance()),this.client.ro(r.getVusdBalance()),this.client.ro(r.getLpTotalSupply()),this.client.ro(r.getAccRewardPerShareP())]),b=s.toString(),y=d.toString(),C=A.toString(),f=l.toString(),v=u.toString();if(b&&y&&C&&f&&v){let R=Ne({tokenBalance:y,vUsdBalance:C});return{aValue:this.A,dValue:b,tokenBalance:y,vUsdBalance:C,totalLpAmount:f,accRewardPerShareP:v,p:this.P,imbalance:R}}throw new w("Unable to pool info from chain")}async buildRawTransactionDeposit(i){let r=En(at.pool,i.token.poolAddress),{contractAddress:s,contractName:d,functionName:A,functionArgs:l}=r.deposit({amount:BigInt(i.amount),ftRef:i.token.tokenAddress}),u=Tr(),b=wr(u),y=It(i.amount,"lte",i.accountAddress,i.token.tokenAddress,Wt(i.token)),C=It(0,"gte",i.token.poolAddress,i.token.tokenAddress,Wt(i.token)),f={contractAddress:s,contractName:d,functionName:A,functionArgs:l,publicKey:b,validateWithAbi:!0,network:this.client.network,postConditions:[y,C],postConditionMode:Wr.Deny};return(await Yr(f)).serialize()}async buildRawTransactionWithdraw(i){let r=En(at.pool,i.token.poolAddress),{contractAddress:s,contractName:d,functionName:A,functionArgs:l}=r.withdraw({amountLp:BigInt(i.amount),ftRef:i.token.tokenAddress}),u=Tr(),b=wr(u),y=It(ze(i.amount,i.token.decimals).toFixed(0,nc.roundDown),"gte",i.token.poolAddress,i.token.tokenAddress,Wt(i.token)),C={contractAddress:s,contractName:d,functionName:A,functionArgs:l,publicKey:b,validateWithAbi:!0,network:this.client.network,postConditions:[y],postConditionMode:Wr.Deny};return(await Yr(C)).serialize()}async buildRawTransactionClaimRewards(i){let r=En(at.pool,i.token.poolAddress),{contractAddress:s,contractName:d,functionName:A,functionArgs:l}=r.claimRewards({ftRef:i.token.tokenAddress}),u=Tr(),b=wr(u),y=It(0,"gte",i.token.poolAddress,i.token.tokenAddress,Wt(i.token)),C={contractAddress:s,contractName:d,functionName:A,functionArgs:l,publicKey:b,validateWithAbi:!0,network:this.client.network,postConditions:[y],postConditionMode:Wr.Deny};return(await Yr(C)).serialize()}};import{SuiJsonRpcClient as Ac}from"@mysten/sui/jsonRpc";import{Transaction as yi}from"@mysten/sui/transactions";import{bcs as ea}from"@mysten/sui/bcs";import{fromBase64 as oc}from"@mysten/sui/utils";import{bcs as ss}from"@mysten/sui/bcs";import{fromBase64 as ac}from"@mysten/sui/utils";function _n(o){return o=J(o),o.startsWith("0x2::balance::Balance<")}var je=class o{__StructClass=!0;static $typeName="0x2::balance::Balance";static $numTypeParams=1;static $isPhantom=[!0];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;value;constructor(a,i){this.$fullTypeName=re(o.$typeName,...a),this.$typeArgs=a,this.value=i.value}static reified(a){let i=o.bcs;return{get typeName(){return o.$typeName},get fullTypeName(){return re(o.$typeName,z(a))},get typeArgs(){return[z(a)]},isPhantom:o.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>o.fromFields(a,r),fromFieldsWithTypes:r=>o.fromFieldsWithTypes(a,r),fromBcs:r=>o.fromFields(a,i.parse(r)),bcs:i,fromJSONField:r=>o.fromJSONField(a,r),fromJSON:r=>o.fromJSON(a,r),fromCoreObject:r=>o.fromCoreObject(a,r),fromSuiParsedData:r=>o.fromSuiParsedData(a,r),fromSuiObjectData:r=>o.fromSuiObjectData(a,r),fetch:async(r,s)=>o.fetch(r,a,s),new:r=>new o([z(a)],r),kind:"StructClassReified"}}static get r(){return o.reified}static phantom(a){return Re(o.reified(a))}static get p(){return o.phantom}static instantiateBcs(){return ss.struct("Balance",{value:ss.u64()})}static cachedBcs=null;static get bcs(){return o.cachedBcs||(o.cachedBcs=o.instantiateBcs()),o.cachedBcs}static fromFields(a,i){return o.reified(a).new({value:te("u64",i.value)})}static fromFieldsWithTypes(a,i){if(!_n(i.type))throw new Error("not a Balance type");return ht(i,[a]),o.reified(a).new({value:q("u64",i.fields.value)})}static fromBcs(a,i){return o.fromFields(a,o.bcs.parse(i))}toJSONField(){return{value:this.value.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,i){return o.reified(a).new({value:ee("u64",i.value)})}static fromJSON(a,i){if(i.$typeName!==o.$typeName)throw new Error(`not a Balance json object: expected '${o.$typeName}' but got '${i.$typeName}'`);return ct(re(o.$typeName,z(a)),i.$typeArgs,[a]),o.fromJSONField(a,i)}static fromCoreObject(a,i){if(!_n(i.type))throw new Error(`object at ${i.objectId} is not a Balance object`);let r=ue(i.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let s=0;s<1;s++){let d=J(r[s]),A=J(z([a][s]));if(d!==A)throw new Error(`type argument mismatch at position ${s}: expected '${A}' but got '${d}'`)}return o.fromBcs(a,i.content)}static fromSuiParsedData(a,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!_n(i.type))throw new Error(`object at ${i.fields.id} is not a Balance object`);return o.fromFieldsWithTypes(a,i)}static fromSuiObjectData(a,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!_n(i.bcs.type))throw new Error("object at is not a Balance object");let r=ue(i.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let s=0;s<1;s++){let d=J(r[s]),A=J(z([a][s]));if(d!==A)throw new Error(`type argument mismatch at position ${s}: expected '${A}' but got '${d}'`)}return o.fromBcs(a,ac(i.bcs.bcsBytes))}if(i.content)return o.fromSuiParsedData(a,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,i,r){let{object:s}=await a.core.getObject({objectId:r,include:{content:!0}});if(!_n(s.type))throw new Error(`object at id ${r} is not a Balance object`);let d=ue(s.type).typeArgs;if(d.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${d.length}'`);for(let A=0;A<1;A++){let l=J(d[A]),u=J(z([i][A]));if(l!==u)throw new Error(`type argument mismatch at position ${A}: expected '${u}' but got '${l}'`)}return o.fromBcs(i,s.content)}};import{bcs as ui}from"@mysten/sui/bcs";import{fromBase64 as ic}from"@mysten/sui/utils";function $n(o){return o=J(o),o.startsWith(`${et("bridge","pool_rewards::PoolRewards")}::pool_rewards::PoolRewards<`)}var en=class o{__StructClass=!0;static get $typeName(){return`${et("bridge","pool_rewards::PoolRewards")}::pool_rewards::PoolRewards`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;accRewardPerShareP;adminFeeShareBp;adminFee;rewards;lpSupply;constructor(a,i){this.$fullTypeName=re(o.$typeName,...a),this.$typeArgs=a,this.accRewardPerShareP=i.accRewardPerShareP,this.adminFeeShareBp=i.adminFeeShareBp,this.adminFee=i.adminFee,this.rewards=i.rewards,this.lpSupply=i.lpSupply}static reified(a){let i=o.bcs;return{get typeName(){return o.$typeName},get fullTypeName(){return re(o.$typeName,z(a))},get typeArgs(){return[z(a)]},isPhantom:o.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>o.fromFields(a,r),fromFieldsWithTypes:r=>o.fromFieldsWithTypes(a,r),fromBcs:r=>o.fromFields(a,i.parse(r)),bcs:i,fromJSONField:r=>o.fromJSONField(a,r),fromJSON:r=>o.fromJSON(a,r),fromCoreObject:r=>o.fromCoreObject(a,r),fromSuiParsedData:r=>o.fromSuiParsedData(a,r),fromSuiObjectData:r=>o.fromSuiObjectData(a,r),fetch:async(r,s)=>o.fetch(r,a,s),new:r=>new o([z(a)],r),kind:"StructClassReified"}}static get r(){return o.reified}static phantom(a){return Re(o.reified(a))}static get p(){return o.phantom}static instantiateBcs(){return ui.struct("PoolRewards",{acc_reward_per_share_p:ui.u128(),admin_fee_share_bp:ui.u64(),admin_fee:je.bcs,rewards:je.bcs,lp_supply:ui.u64()})}static cachedBcs=null;static get bcs(){return o.cachedBcs||(o.cachedBcs=o.instantiateBcs()),o.cachedBcs}static fromFields(a,i){return o.reified(a).new({accRewardPerShareP:te("u128",i.acc_reward_per_share_p),adminFeeShareBp:te("u64",i.admin_fee_share_bp),adminFee:te(je.reified(a),i.admin_fee),rewards:te(je.reified(a),i.rewards),lpSupply:te("u64",i.lp_supply)})}static fromFieldsWithTypes(a,i){if(!$n(i.type))throw new Error("not a PoolRewards type");return ht(i,[a]),o.reified(a).new({accRewardPerShareP:q("u128",i.fields.acc_reward_per_share_p),adminFeeShareBp:q("u64",i.fields.admin_fee_share_bp),adminFee:q(je.reified(a),i.fields.admin_fee),rewards:q(je.reified(a),i.fields.rewards),lpSupply:q("u64",i.fields.lp_supply)})}static fromBcs(a,i){return o.fromFields(a,o.bcs.parse(i))}toJSONField(){return{accRewardPerShareP:this.accRewardPerShareP.toString(),adminFeeShareBp:this.adminFeeShareBp.toString(),adminFee:this.adminFee.toJSONField(),rewards:this.rewards.toJSONField(),lpSupply:this.lpSupply.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,i){return o.reified(a).new({accRewardPerShareP:ee("u128",i.accRewardPerShareP),adminFeeShareBp:ee("u64",i.adminFeeShareBp),adminFee:ee(je.reified(a),i.adminFee),rewards:ee(je.reified(a),i.rewards),lpSupply:ee("u64",i.lpSupply)})}static fromJSON(a,i){if(i.$typeName!==o.$typeName)throw new Error(`not a PoolRewards json object: expected '${o.$typeName}' but got '${i.$typeName}'`);return ct(re(o.$typeName,z(a)),i.$typeArgs,[a]),o.fromJSONField(a,i)}static fromCoreObject(a,i){if(!$n(i.type))throw new Error(`object at ${i.objectId} is not a PoolRewards object`);let r=ue(i.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let s=0;s<1;s++){let d=J(r[s]),A=J(z([a][s]));if(d!==A)throw new Error(`type argument mismatch at position ${s}: expected '${A}' but got '${d}'`)}return o.fromBcs(a,i.content)}static fromSuiParsedData(a,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!$n(i.type))throw new Error(`object at ${i.fields.id} is not a PoolRewards object`);return o.fromFieldsWithTypes(a,i)}static fromSuiObjectData(a,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!$n(i.bcs.type))throw new Error("object at is not a PoolRewards object");let r=ue(i.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let s=0;s<1;s++){let d=J(r[s]),A=J(z([a][s]));if(d!==A)throw new Error(`type argument mismatch at position ${s}: expected '${A}' but got '${d}'`)}return o.fromBcs(a,ic(i.bcs.bcsBytes))}if(i.content)return o.fromSuiParsedData(a,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,i,r){let{object:s}=await a.core.getObject({objectId:r,include:{content:!0}});if(!$n(s.type))throw new Error(`object at id ${r} is not a PoolRewards object`);let d=ue(s.type).typeArgs;if(d.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${d.length}'`);for(let A=0;A<1;A++){let l=J(d[A]),u=J(z([i][A]));if(l!==u)throw new Error(`type argument mismatch at position ${A}: expected '${u}' but got '${l}'`)}return o.fromBcs(i,s.content)}};import{bcs as In}from"@mysten/sui/bcs";import{fromBase64 as rc}from"@mysten/sui/utils";function qn(o){return o=J(o),o.startsWith(`${et("bridge","pool_state::PoolState")}::pool_state::PoolState<`)}var tn=class o{__StructClass=!0;static get $typeName(){return`${et("bridge","pool_state::PoolState")}::pool_state::PoolState`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;tokenBalance;vusdBalance;d;a;balanceRatioMinBp;constructor(a,i){this.$fullTypeName=re(o.$typeName,...a),this.$typeArgs=a,this.tokenBalance=i.tokenBalance,this.vusdBalance=i.vusdBalance,this.d=i.d,this.a=i.a,this.balanceRatioMinBp=i.balanceRatioMinBp}static reified(a){let i=o.bcs;return{get typeName(){return o.$typeName},get fullTypeName(){return re(o.$typeName,z(a))},get typeArgs(){return[z(a)]},isPhantom:o.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>o.fromFields(a,r),fromFieldsWithTypes:r=>o.fromFieldsWithTypes(a,r),fromBcs:r=>o.fromFields(a,i.parse(r)),bcs:i,fromJSONField:r=>o.fromJSONField(a,r),fromJSON:r=>o.fromJSON(a,r),fromCoreObject:r=>o.fromCoreObject(a,r),fromSuiParsedData:r=>o.fromSuiParsedData(a,r),fromSuiObjectData:r=>o.fromSuiObjectData(a,r),fetch:async(r,s)=>o.fetch(r,a,s),new:r=>new o([z(a)],r),kind:"StructClassReified"}}static get r(){return o.reified}static phantom(a){return Re(o.reified(a))}static get p(){return o.phantom}static instantiateBcs(){return In.struct("PoolState",{token_balance:In.u64(),vusd_balance:In.u64(),d:In.u64(),a:In.u64(),balance_ratio_min_bp:In.u64()})}static cachedBcs=null;static get bcs(){return o.cachedBcs||(o.cachedBcs=o.instantiateBcs()),o.cachedBcs}static fromFields(a,i){return o.reified(a).new({tokenBalance:te("u64",i.token_balance),vusdBalance:te("u64",i.vusd_balance),d:te("u64",i.d),a:te("u64",i.a),balanceRatioMinBp:te("u64",i.balance_ratio_min_bp)})}static fromFieldsWithTypes(a,i){if(!qn(i.type))throw new Error("not a PoolState type");return ht(i,[a]),o.reified(a).new({tokenBalance:q("u64",i.fields.token_balance),vusdBalance:q("u64",i.fields.vusd_balance),d:q("u64",i.fields.d),a:q("u64",i.fields.a),balanceRatioMinBp:q("u64",i.fields.balance_ratio_min_bp)})}static fromBcs(a,i){return o.fromFields(a,o.bcs.parse(i))}toJSONField(){return{tokenBalance:this.tokenBalance.toString(),vusdBalance:this.vusdBalance.toString(),d:this.d.toString(),a:this.a.toString(),balanceRatioMinBp:this.balanceRatioMinBp.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,i){return o.reified(a).new({tokenBalance:ee("u64",i.tokenBalance),vusdBalance:ee("u64",i.vusdBalance),d:ee("u64",i.d),a:ee("u64",i.a),balanceRatioMinBp:ee("u64",i.balanceRatioMinBp)})}static fromJSON(a,i){if(i.$typeName!==o.$typeName)throw new Error(`not a PoolState json object: expected '${o.$typeName}' but got '${i.$typeName}'`);return ct(re(o.$typeName,z(a)),i.$typeArgs,[a]),o.fromJSONField(a,i)}static fromCoreObject(a,i){if(!qn(i.type))throw new Error(`object at ${i.objectId} is not a PoolState object`);let r=ue(i.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let s=0;s<1;s++){let d=J(r[s]),A=J(z([a][s]));if(d!==A)throw new Error(`type argument mismatch at position ${s}: expected '${A}' but got '${d}'`)}return o.fromBcs(a,i.content)}static fromSuiParsedData(a,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!qn(i.type))throw new Error(`object at ${i.fields.id} is not a PoolState object`);return o.fromFieldsWithTypes(a,i)}static fromSuiObjectData(a,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!qn(i.bcs.type))throw new Error("object at is not a PoolState object");let r=ue(i.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let s=0;s<1;s++){let d=J(r[s]),A=J(z([a][s]));if(d!==A)throw new Error(`type argument mismatch at position ${s}: expected '${A}' but got '${d}'`)}return o.fromBcs(a,rc(i.bcs.bcsBytes))}if(i.content)return o.fromSuiParsedData(a,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,i,r){let{object:s}=await a.core.getObject({objectId:r,include:{content:!0}});if(!qn(s.type))throw new Error(`object at id ${r} is not a PoolState object`);let d=ue(s.type).typeArgs;if(d.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${d.length}'`);for(let A=0;A<1;A++){let l=J(d[A]),u=J(z([i][A]));if(l!==u)throw new Error(`type argument mismatch at position ${A}: expected '${u}' but got '${l}'`)}return o.fromBcs(i,s.content)}};function ta(o){return o=J(o),o.startsWith(`${et("bridge","pool::Pool")}::pool::Pool<`)}var mi=class o{__StructClass=!0;static get $typeName(){return`${et("bridge","pool::Pool")}::pool::Pool`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;id;state;rewards;feeShareBp;canDeposit;canWithdraw;decimals;balance;constructor(a,i){this.$fullTypeName=re(o.$typeName,...a),this.$typeArgs=a,this.id=i.id,this.state=i.state,this.rewards=i.rewards,this.feeShareBp=i.feeShareBp,this.canDeposit=i.canDeposit,this.canWithdraw=i.canWithdraw,this.decimals=i.decimals,this.balance=i.balance}static reified(a){let i=o.bcs;return{get typeName(){return o.$typeName},get fullTypeName(){return re(o.$typeName,z(a))},get typeArgs(){return[z(a)]},isPhantom:o.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>o.fromFields(a,r),fromFieldsWithTypes:r=>o.fromFieldsWithTypes(a,r),fromBcs:r=>o.fromFields(a,i.parse(r)),bcs:i,fromJSONField:r=>o.fromJSONField(a,r),fromJSON:r=>o.fromJSON(a,r),fromCoreObject:r=>o.fromCoreObject(a,r),fromSuiParsedData:r=>o.fromSuiParsedData(a,r),fromSuiObjectData:r=>o.fromSuiObjectData(a,r),fetch:async(r,s)=>o.fetch(r,a,s),new:r=>new o([z(a)],r),kind:"StructClassReified"}}static get r(){return o.reified}static phantom(a){return Re(o.reified(a))}static get p(){return o.phantom}static instantiateBcs(){return ea.struct("Pool",{id:rt.bcs,state:tn.bcs,rewards:en.bcs,fee_share_bp:ea.u64(),can_deposit:ea.bool(),can_withdraw:ea.bool(),decimals:ea.u8(),balance:je.bcs})}static cachedBcs=null;static get bcs(){return o.cachedBcs||(o.cachedBcs=o.instantiateBcs()),o.cachedBcs}static fromFields(a,i){return o.reified(a).new({id:te(rt.reified(),i.id),state:te(tn.reified(a),i.state),rewards:te(en.reified(a),i.rewards),feeShareBp:te("u64",i.fee_share_bp),canDeposit:te("bool",i.can_deposit),canWithdraw:te("bool",i.can_withdraw),decimals:te("u8",i.decimals),balance:te(je.reified(a),i.balance)})}static fromFieldsWithTypes(a,i){if(!ta(i.type))throw new Error("not a Pool type");return ht(i,[a]),o.reified(a).new({id:q(rt.reified(),i.fields.id),state:q(tn.reified(a),i.fields.state),rewards:q(en.reified(a),i.fields.rewards),feeShareBp:q("u64",i.fields.fee_share_bp),canDeposit:q("bool",i.fields.can_deposit),canWithdraw:q("bool",i.fields.can_withdraw),decimals:q("u8",i.fields.decimals),balance:q(je.reified(a),i.fields.balance)})}static fromBcs(a,i){return o.fromFields(a,o.bcs.parse(i))}toJSONField(){return{id:this.id,state:this.state.toJSONField(),rewards:this.rewards.toJSONField(),feeShareBp:this.feeShareBp.toString(),canDeposit:this.canDeposit,canWithdraw:this.canWithdraw,decimals:this.decimals,balance:this.balance.toJSONField()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,i){return o.reified(a).new({id:ee(rt.reified(),i.id),state:ee(tn.reified(a),i.state),rewards:ee(en.reified(a),i.rewards),feeShareBp:ee("u64",i.feeShareBp),canDeposit:ee("bool",i.canDeposit),canWithdraw:ee("bool",i.canWithdraw),decimals:ee("u8",i.decimals),balance:ee(je.reified(a),i.balance)})}static fromJSON(a,i){if(i.$typeName!==o.$typeName)throw new Error(`not a Pool json object: expected '${o.$typeName}' but got '${i.$typeName}'`);return ct(re(o.$typeName,z(a)),i.$typeArgs,[a]),o.fromJSONField(a,i)}static fromCoreObject(a,i){if(!ta(i.type))throw new Error(`object at ${i.objectId} is not a Pool object`);let r=ue(i.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let s=0;s<1;s++){let d=J(r[s]),A=J(z([a][s]));if(d!==A)throw new Error(`type argument mismatch at position ${s}: expected '${A}' but got '${d}'`)}return o.fromBcs(a,i.content)}static fromSuiParsedData(a,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!ta(i.type))throw new Error(`object at ${i.fields.id} is not a Pool object`);return o.fromFieldsWithTypes(a,i)}static fromSuiObjectData(a,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!ta(i.bcs.type))throw new Error("object at is not a Pool object");let r=ue(i.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let s=0;s<1;s++){let d=J(r[s]),A=J(z([a][s]));if(d!==A)throw new Error(`type argument mismatch at position ${s}: expected '${A}' but got '${d}'`)}return o.fromBcs(a,oc(i.bcs.bcsBytes))}if(i.content)return o.fromSuiParsedData(a,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,i,r){let{object:s}=await a.core.getObject({objectId:r,include:{content:!0}});if(!ta(s.type))throw new Error(`object at id ${r} is not a Pool object`);let d=ue(s.type).typeArgs;if(d.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${d.length}'`);for(let A=0;A<1;A++){let l=J(d[A]),u=J(z([i][A]));if(l!==u)throw new Error(`type argument mismatch at position ${A}: expected '${u}' but got '${l}'`)}return o.fromBcs(i,s.content)}};import{bcs as Fr}from"@mysten/sui/bcs";import{fromBase64 as sc}from"@mysten/sui/utils";function na(o){return o=J(o),o.startsWith(`${et("bridge","user_deposit::UserDeposit")}::user_deposit::UserDeposit<`)}var bi=class o{__StructClass=!0;static get $typeName(){return`${et("bridge","user_deposit::UserDeposit")}::user_deposit::UserDeposit`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;id;lpAmount;rewardDebt;constructor(a,i){this.$fullTypeName=re(o.$typeName,...a),this.$typeArgs=a,this.id=i.id,this.lpAmount=i.lpAmount,this.rewardDebt=i.rewardDebt}static reified(a){let i=o.bcs;return{get typeName(){return o.$typeName},get fullTypeName(){return re(o.$typeName,z(a))},get typeArgs(){return[z(a)]},isPhantom:o.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>o.fromFields(a,r),fromFieldsWithTypes:r=>o.fromFieldsWithTypes(a,r),fromBcs:r=>o.fromFields(a,i.parse(r)),bcs:i,fromJSONField:r=>o.fromJSONField(a,r),fromJSON:r=>o.fromJSON(a,r),fromCoreObject:r=>o.fromCoreObject(a,r),fromSuiParsedData:r=>o.fromSuiParsedData(a,r),fromSuiObjectData:r=>o.fromSuiObjectData(a,r),fetch:async(r,s)=>o.fetch(r,a,s),new:r=>new o([z(a)],r),kind:"StructClassReified"}}static get r(){return o.reified}static phantom(a){return Re(o.reified(a))}static get p(){return o.phantom}static instantiateBcs(){return Fr.struct("UserDeposit",{id:rt.bcs,lp_amount:Fr.u64(),reward_debt:Fr.u64()})}static cachedBcs=null;static get bcs(){return o.cachedBcs||(o.cachedBcs=o.instantiateBcs()),o.cachedBcs}static fromFields(a,i){return o.reified(a).new({id:te(rt.reified(),i.id),lpAmount:te("u64",i.lp_amount),rewardDebt:te("u64",i.reward_debt)})}static fromFieldsWithTypes(a,i){if(!na(i.type))throw new Error("not a UserDeposit type");return ht(i,[a]),o.reified(a).new({id:q(rt.reified(),i.fields.id),lpAmount:q("u64",i.fields.lp_amount),rewardDebt:q("u64",i.fields.reward_debt)})}static fromBcs(a,i){return o.fromFields(a,o.bcs.parse(i))}toJSONField(){return{id:this.id,lpAmount:this.lpAmount.toString(),rewardDebt:this.rewardDebt.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,i){return o.reified(a).new({id:ee(rt.reified(),i.id),lpAmount:ee("u64",i.lpAmount),rewardDebt:ee("u64",i.rewardDebt)})}static fromJSON(a,i){if(i.$typeName!==o.$typeName)throw new Error(`not a UserDeposit json object: expected '${o.$typeName}' but got '${i.$typeName}'`);return ct(re(o.$typeName,z(a)),i.$typeArgs,[a]),o.fromJSONField(a,i)}static fromCoreObject(a,i){if(!na(i.type))throw new Error(`object at ${i.objectId} is not a UserDeposit object`);let r=ue(i.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let s=0;s<1;s++){let d=J(r[s]),A=J(z([a][s]));if(d!==A)throw new Error(`type argument mismatch at position ${s}: expected '${A}' but got '${d}'`)}return o.fromBcs(a,i.content)}static fromSuiParsedData(a,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!na(i.type))throw new Error(`object at ${i.fields.id} is not a UserDeposit object`);return o.fromFieldsWithTypes(a,i)}static fromSuiObjectData(a,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!na(i.bcs.type))throw new Error("object at is not a UserDeposit object");let r=ue(i.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let s=0;s<1;s++){let d=J(r[s]),A=J(z([a][s]));if(d!==A)throw new Error(`type argument mismatch at position ${s}: expected '${A}' but got '${d}'`)}return o.fromBcs(a,sc(i.bcs.bcsBytes))}if(i.content)return o.fromSuiParsedData(a,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,i,r){let{object:s}=await a.core.getObject({objectId:r,include:{content:!0}});if(!na(s.type))throw new Error(`object at id ${r} is not a UserDeposit object`);let d=ue(s.type).typeArgs;if(d.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${d.length}'`);for(let A=0;A<1;A++){let l=J(d[A]),u=J(z([i][A]));if(l!==u)throw new Error(`type argument mismatch at position ${A}: expected '${u}' but got '${l}'`)}return o.fromBcs(i,s.content)}};function As(o,a,i){if(a.length===0||!a[0])return[];let r=a[0],s=o.reduce((l,u)=>l+BigInt(u),BigInt(0)),d=BigInt(r.balance),A=[];for(let l of a.slice(1)){if(d>s)return ds(i,r,A,o);d+=BigInt(l.balance),A.push(l)}return d>=s?ds(i,r,A,o):[]}function ds(o,a,i,r){let s=r.map(d=>o.pure.u64(d));return i.length>0&&o.mergeCoins(a.coinObjectId,i.map(d=>d.coinObjectId)),o.splitCoins(a.coinObjectId,s)}var dc="0x0000000000000000000000000000000000000000000000000000000000000000";async function cs(o,a,i){let r=await o.devInspectTransactionBlock({sender:dc,transactionBlock:a});if(r.effects.status.status!=="success")throw new Error(`inspectionResult failed. ${JSON.stringify(r,null,2)}`);let s=r.results?.pop()?.returnValues?.pop();if(!s)throw new Error(`Something with inspectionResult went wrong. ${JSON.stringify(r,null,2)}`);let[d,A]=s;return typeof i=="object"?i.fromBcs(Uint8Array.from(d)).toJSONField():Jn(i).parse(Uint8Array.from(d))}var Ci=class extends Me{constructor(i,r,s){super();this.suiRpcUrl=i;this.params=r;this.api=s;this.client=new Ac({url:i,network:r.suiIsTestnet?"testnet":"mainnet"})}suiRpcUrl;params;api;chainType="SUI";client;async getUserBalanceInfo(i,r){if(!r.originTokenAddress)throw new w("SUI token must contain 'originTokenAddress'");let s=r.suiAddresses;if(!s)throw new w("SUI token must contain 'suiAddresses'");wt(s.bridgeAddress,s.bridgeAddressOrigin);let A=(await this.fetchDeposits(i,r.originTokenAddress)).reduce((l,u)=>{if(u.data)return l.lpAmount+=BigInt(u.data.content.fields.lp_amount),l.rewardDebt+=BigInt(u.data.content.fields.reward_debt),l;throw new w("Deposits fetch failed")},{lpAmount:BigInt(0),rewardDebt:BigInt(0)});return new we({lpAmount:A.lpAmount.toString(),rewardDebt:A.rewardDebt.toString()})}async fetchDeposits(i,r){return await vt(s=>this.client.getOwnedObjects({owner:i,filter:{StructType:bi.phantom(Re(r)).phantomType},options:{showContent:!0},cursor:s}))}async getPoolInfoFromChain(i){let r=i.suiAddresses;if(!r)throw new w("SUI token must contain 'suiAddresses'");if(wt(r.bridgeAddress,r.bridgeAddressOrigin),!i.originTokenAddress)throw new w("SUI token must contain 'originTokenAddress'");let s=48,d=new yi;Do(d,i.originTokenAddress,r.bridgeObjectAddress);let A=await cs(this.client,d,mi.reified(Re(i.originTokenAddress))),l=A.state.tokenBalance,u=A.state.vusdBalance,b=Ne({tokenBalance:l,vUsdBalance:u});return{dValue:A.state.d,aValue:A.state.a,totalLpAmount:A.rewards.lpSupply,vUsdBalance:u,tokenBalance:l,accRewardPerShareP:A.rewards.accRewardPerShareP,p:s,imbalance:b}}async buildRawTransactionDeposit(i){let r=i.token.suiAddresses;if(!r)throw new w("SUI token must contain 'suiAddresses'");if(wt(r.bridgeAddress,r.bridgeAddressOrigin),!i.token.originTokenAddress)throw new w("SUI token must contain 'originTokenAddress'");let s=await vt(C=>this.client.getCoins({owner:i.accountAddress,coinType:i.token.originTokenAddress,cursor:C}));if(s.length===0||!s[0])throw new pt("No coins to deposit");let d=s[0],A=new yi;A.setSender(i.accountAddress);let{depositObj:l,isNewDeposit:u}=await this.getDepositObject(i.accountAddress,i.token.originTokenAddress,A),[b]=As([i.amount],s,A);if(!b)throw new pt("No coins to deposit");if(!i.token.originTokenAddress)throw new w("SUI token must contain 'originTokenAddress'");let y=Qo(A,i.token.originTokenAddress,{bridge:r.bridgeObjectAddress,userDeposit:l,coin:b});return A.mergeCoins(d.coinObjectId,[y]),u&&A.transferObjects([l],i.accountAddress),await A.toJSON({client:this.client})}async getDepositObject(i,r,s){let d=await this.fetchDeposits(i,r);if(d.length===0||!d[0]){let A=Re(r).phantomType;return{depositObj:Eo(s,A),isNewDeposit:!0}}else{if(d[0].data?.objectId)return{depositObj:d[0].data.objectId,isNewDeposit:!1};throw new w("Something went wrong while deposit")}}async buildRawTransactionWithdraw(i){let r=i.token.suiAddresses;if(!r)throw new w("SUI token must contain 'suiAddresses'");if(wt(r.bridgeAddress,r.bridgeAddressOrigin),!i.token.originTokenAddress)throw new w("SUI token must contain 'originTokenAddress'");let s=Re(i.token.originTokenAddress).phantomType,d=new yi;d.setSender(i.accountAddress);let{depositObj:A,isNewDeposit:l}=await this.getDepositObject(i.accountAddress,i.token.originTokenAddress,d);if(l)throw new pt("No deposit found");let u=Ko(d,s,{bridge:r.bridgeObjectAddress,userDeposit:A,amountLp:BigInt(i.amount)}),b=await vt(y=>this.client.getCoins({owner:i.accountAddress,coinType:i.token.originTokenAddress,cursor:y}));if(!u[0]||!u[1])throw new w("No rewards found");return b[0]?d.mergeCoins(b[0].coinObjectId,[u[0],u[1]]):(d.mergeCoins(u[0],[u[1]]),d.transferObjects([u[0]],i.accountAddress)),await d.toJSON({client:this.client})}async buildRawTransactionClaimRewards(i){let r=i.token.suiAddresses;if(!r)throw new w("SUI token must contain 'suiAddresses'");if(wt(r.bridgeAddress,r.bridgeAddressOrigin),!i.token.originTokenAddress)throw new w("SUI token must contain 'originTokenAddress'");let s=Re(i.token.originTokenAddress).phantomType,d=new yi;d.setSender(i.accountAddress);let{depositObj:A,isNewDeposit:l}=await this.getDepositObject(i.accountAddress,i.token.originTokenAddress,d);if(l)throw new pt("No deposit found");let u=Uo(d,s,{bridge:r.bridgeObjectAddress,userDeposit:A}),b=await vt(y=>this.client.getCoins({owner:i.accountAddress,coinType:i.token.originTokenAddress,cursor:y}));return b[0]?d.mergeCoins(b[0].coinObjectId,[u]):d.transferObjects([u],i.accountAddress),await d.toJSON({client:this.client})}};import{Web3 as Ii}from"web3";import{encodeFunctionCall as cc}from"web3-eth-abi";var aa=class extends Me{constructor(i,r,s){super();this.tronWeb=i;this.api=r;this.tronJsonRpc=s}tronWeb;api;tronJsonRpc;chainType="TRX";P=52;async getUserBalanceInfo(i,r){let s;if(this.tronJsonRpc)try{s=await this.getUserBalanceInfoByBatch(this.tronJsonRpc,i,r)}catch{s=await this.getUserBalanceInfoPerProperty(i,r)}else s=await this.getUserBalanceInfoPerProperty(i,r);return s}async getUserBalanceInfoByBatch(i,r,s){let d=Pn(s.poolAddress),A=Pn(r),l=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:d,data:this.getFunctionAbi("userRewardDebt",A)},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:d,data:this.getFunctionAbi("balanceOf",A)},"latest"]}],b=await(await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(l)})).json();if(Array.isArray(b)&&b.length===2){let y=C=>{let f=b.find(v=>v.id===C);if(!f||!f.result)throw new Error(`Missing or invalid result for id ${C}`);return Ii.utils.toBigInt(f.result).toString()};return new we({lpAmount:Ii.utils.toBigInt(y(2)).toString(),rewardDebt:Ii.utils.toBigInt(y(1)).toString()})}throw new Error("Batched HTTP call failed")}async getUserBalanceInfoPerProperty(i,r){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(i);let s=this.getContract(r.poolAddress),d=(await s.methods.userRewardDebt(i).call()).toString(),A=(await s.methods.balanceOf(i).call()).toString();return new we({lpAmount:A,rewardDebt:d})}async getPoolInfoFromChain(i){let r;if(this.tronJsonRpc)try{r=await this.getPoolInfoByBatch(this.tronJsonRpc,i)}catch{r=await this.getPoolInfoPerProperty(i)}else r=await this.getPoolInfoPerProperty(i);return r}async getPoolInfoByBatch(i,r){let s=Pn(r.poolAddress),d=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("a")},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("d")},"latest"]},{jsonrpc:"2.0",id:3,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("tokenBalance")},"latest"]},{jsonrpc:"2.0",id:4,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("vUsdBalance")},"latest"]},{jsonrpc:"2.0",id:5,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("totalSupply")},"latest"]},{jsonrpc:"2.0",id:6,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("accRewardPerShareP")},"latest"]}],l=await(await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)})).json();if(Array.isArray(l)&&l.length===6){let u=f=>{let v=l.find(R=>R.id===f);if(!v||!v.result)throw new Error(`Missing or invalid result for id ${f}`);return Ii.utils.toBigInt(v.result).toString()},b=u(3),y=u(4),C=Ne({tokenBalance:b,vUsdBalance:y});return{aValue:u(1),dValue:u(2),tokenBalance:b,vUsdBalance:y,totalLpAmount:u(5),accRewardPerShareP:u(6),p:this.P,imbalance:C}}throw new Error("Batched pool info call failed")}async getPoolInfoPerProperty(i){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(i.poolAddress);let r=this.getContract(i.poolAddress),[s,d,A,l,u,b]=await Promise.all([r.methods.a().call(),r.methods.d().call(),r.methods.tokenBalance().call(),r.methods.vUsdBalance().call(),r.methods.totalSupply().call(),r.methods.accRewardPerShareP().call()]),y=A.toString(),C=l.toString(),f=Ne({tokenBalance:y,vUsdBalance:C});return{aValue:s.toString(),dValue:d.toString(),tokenBalance:y,vUsdBalance:C,totalLpAmount:u.toString(),accRewardPerShareP:b.toString(),p:this.P,imbalance:f}}buildRawTransactionDeposit(i){let{amount:r,accountAddress:s}=i,d=[{type:"uint256",value:r}];return this.buildRawTransaction(i.token.poolAddress,"deposit(uint256)",d,"0",s)}buildRawTransactionWithdraw(i){let{amount:r,accountAddress:s}=i,d=[{type:"uint256",value:r}];return this.buildRawTransaction(i.token.poolAddress,"withdraw(uint256)",d,"0",s)}buildRawTransactionClaimRewards(i){let{accountAddress:r}=i,s=[];return this.buildRawTransaction(i.token.poolAddress,"claimRewards()",s,"0",r)}async buildRawTransaction(i,r,s,d,A){let l=await this.tronWeb.transactionBuilder.triggerSmartContract(i,r,{callValue:+d},s,A);if(!l?.result?.result)throw new w("Unknown error: "+JSON.stringify(l,null,2));return l.transaction}getContract(i){return this.tronWeb.contract(Kn.abi,i)}getFunctionAbi(i,...r){let s=Kn.abi.find(d=>d.type==="function"&&"name"in d&&d.name===i);if(!s)throw new Error(`${i} method not found in Pool ABI`);return cc(s,r)}};var hi=class{constructor(a,i,r,s){this.api=a;this.nodeRpcUrlsConfig=i;this.params=r;this.tokenService=s;this.rawTxBuilder=new Ai(a,i,this.params,s);let d=r.cachePoolInfoChainSec??20,A=d>0?d*1e3:20*1e3;this.cache=new lc({defaultTtl:A})}api;nodeRpcUrlsConfig;params;tokenService;rawTxBuilder;cache;async getAllowance(a,i){if(i){let r=a,s=i;return await this.tokenService.getAllowance({...s,spender:s.token.poolAddress},r)}else{let r=a;return await this.tokenService.getAllowance({...r,spender:r.token.poolAddress})}}async checkAllowance(a,i){if(i){let r=a,s=i;return this.tokenService.checkAllowance({...s,spender:s.token.poolAddress},r)}else{let r=a;return this.tokenService.checkAllowance({...r,spender:r.token.poolAddress})}}async approve(a,i){return this.tokenService.approve(a,{...i,spender:i.token.poolAddress})}async getAmountToBeDeposited(a,i,r){$(a),D("amount",a,i.decimals);let s=await this.getPoolInfoFromChain(i,r),{vUsdBalance:d,tokenBalance:A,aValue:l,dValue:u}=s,b=as(a,l,u,A,d);return H(b,3).toFixed()}async getAmountToBeWithdrawn(a,i,r,s){$(a),D("amount",a,r.decimals);let d=await this.getPoolInfoFromChain(r,s),A=is(a),l=ze(A,r.decimals),b=(await this.getUserBalanceInfo(i,r,s)).earned(d)||"0",y=gc(l).plus(b).toFixed();return H(y,r.decimals).toFixed()}async getUserBalanceInfo(a,i,r){return Cn(i.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).getUserBalanceInfo(a,i)}async getPoolInfoFromChain(a,i){let r={chainSymbol:a.chainSymbol,poolAddress:a.poolAddress},s=this.cache.get(r);if(s)return s;{let d=await Cn(a.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).getPoolInfoFromChain(a);return this.cache.put(r,d),this.api.cachePut({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress},d),d}}};function Cn(o,a,i,r,s){switch(Q.getChainProperty(o).chainType){case"EVM":{if(s)return new Dn(s,a);{let d=i.getNodeRpcUrl(o),A=new bc(d);return A.defaultReturnFormat={number:mc.STR,bytes:uc.HEX},new Dn(A,a)}}case"TRX":{let d=i.getNodeRpcUrl(o),A=r.tronJsonRpc;if(s)return new aa(s,a,A);{let l=new pc({fullHost:d});return new aa(l,a,A)}}case"SOLANA":{let d=i.getNodeRpcUrl(o);return new ci(d,a)}case"SRB":return new li(i,r,a);case"SUI":return new Ci(i.getNodeRpcUrl(o),r,a);case"ALG":if(s){let d=s,A=gs.fromClients({algod:d});return new Un(A,a)}else{let d=i.getNodeRpcUrl(o),A=gs.fromConfig({algodConfig:{server:d}});return new Un(A,a)}case"STX":{let d=i.getNodeRpcUrl(o);return new pi(d,r,a)}}}import{TronWeb as Ic}from"tronweb";import{FMT_BYTES as hc,FMT_NUMBER as vc,Web3 as fc}from"web3";var yc={abi:[{inputs:[{internalType:"string",name:"tokenName_",type:"string"},{internalType:"string",name:"tokenSymbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"lpAmount",type:"uint256"}],name:"Deposited",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"token",type:"address"}],name:"DepositedRewards",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256[4]",name:"values",type:"uint256[4]"}],name:"MultiTransfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdrawn",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"NUM_TOKENS",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"},{internalType:"uint256",name:"minVirtualAmount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"depositRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"getEstimatedAmountOnDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"getRewardsAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"virtualAmount",type:"uint256"}],name:"getWithdrawProportionAmount",outputs:[{internalType:"uint256[4]",name:"",type:"uint256[4]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"pools",outputs:[{internalType:"contract IPool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"},{internalType:"contract IPool",name:"pool",type:"address"}],name:"setPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subBalanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"subDepositRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"subTotalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subTransfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subTransferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"virtualAmount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"tokens",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"virtualAmount",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},vi=yc;var nn=class{};var ia=class extends nn{constructor(i,r){super();this.web3=i;this.api=r}web3;api;chainType="EVM";async balanceOf(i){let r=(await this.getYieldContract(i.token.yieldAddress).methods.balanceOf(i.owner).call()).toString();return H(r,3).toFixed()}async getEstimatedAmountOnDeposit(i){let r=j(i.amount,i.token.decimals).toFixed(),s=(await this.getYieldContract(i.token.yieldAddress).methods.getEstimatedAmountOnDeposit(r,i.token.yieldId).call()).toString();return H(s,3).toFixed()}async getWithdrawProportionAmount(i){let r=j(i.amount,3).toFixed();return await this.getYieldContract(i.cydToken.yieldAddress).methods.getWithdrawProportionAmount(i.owner,r).call()}async buildRawTransactionDeposit(i){return Promise.resolve({...this.buildTxParams({owner:i.owner,yieldAddress:i.token.yieldAddress}),data:this.getYieldContract(i.token.yieldAddress).methods.deposit(i.amount,i.token.yieldId,i.minVirtualAmount).encodeABI()})}async buildRawTransactionWithdraw(i){return Promise.resolve({...this.buildTxParams({owner:i.owner,yieldAddress:i.token.yieldAddress}),data:this.getYieldContract(i.token.yieldAddress).methods.withdraw(i.amount).encodeABI()})}buildTxParams(i){return{from:i.owner,to:i.yieldAddress,value:"0"}}getYieldContract(i){return new this.web3.eth.Contract(vi.abi,i)}};var fi=class{constructor(a,i,r,s){this.api=a;this.nodeRpcUrlsConfig=i;this.params=r;this.tokenService=s}api;nodeRpcUrlsConfig;params;tokenService;async approve(a,i){return this.tokenService.buildRawTransactionApprove({...a,spender:a.token.yieldAddress},i)}async deposit(a,i){return $(a.amount),D("amount",a.amount,a.token.decimals),$(a.minVirtualAmount),D("minVirtualAmount",a.minVirtualAmount,3),a.amount=j(a.amount,a.token.decimals).toFixed(),a.minVirtualAmount=j(a.minVirtualAmount,3).toFixed(),hn(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,a.owner,i).buildRawTransactionDeposit(a)}async withdraw(a,i){return $(a.amount),D("amount",a.amount,3),a.amount=j(a.amount,3).toFixed(),hn(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,a.owner,i).buildRawTransactionWithdraw(a)}};var ra=class extends nn{constructor(i,r){super();this.tronWeb=i;this.api=r}tronWeb;api;chainType="TRX";async balanceOf(i){let r=(await(await this.getContract(i.token.yieldAddress)).methods.balanceOf(i.owner).call()).toString();return H(r,3).toFixed()}async getEstimatedAmountOnDeposit(i){let r=j(i.amount,i.token.decimals).toFixed(),s=(await(await this.getContract(i.token.yieldAddress)).methods.getEstimatedAmountOnDeposit(r,i.token.yieldId).call()).toString();return H(s,3).toFixed()}async getWithdrawProportionAmount(i){let r=j(i.amount,3).toFixed();return(await(await this.getContract(i.cydToken.yieldAddress)).methods.getWithdrawProportionAmount(i.owner,r).call()).toString().split(",")}async buildRawTransactionDeposit(i){let{amount:r,owner:s,token:d,minVirtualAmount:A}=i,l=[{type:"uint256",value:r},{type:"uint256",value:d.yieldId},{type:"uint256",value:A}];return this.buildRawTransaction(i.token.yieldAddress,"deposit(uint256,uint256,uint256)",l,"0",s)}async buildRawTransactionWithdraw(i){let{amount:r,owner:s}=i,d=[{type:"uint256",value:r}];return this.buildRawTransaction(i.token.yieldAddress,"withdraw(uint256)",d,"0",s)}async buildRawTransaction(i,r,s,d,A){let l=await this.tronWeb.transactionBuilder.triggerSmartContract(i,r,{callValue:+d},s,A);if(!l?.result?.result)throw new w("Unknown error: "+JSON.stringify(l,null,2));return l.transaction}getContract(i){return this.tronWeb.contract(vi.abi,i)}};function Cc(o){if(!Ri(o))throw new Ia("Token does not support Yield")}function Ri(o){return!!o.yieldAddress&&o.yieldId!==void 0}var Bi=class{constructor(a,i,r,s){this.api=a;this.nodeRpcUrlsConfig=i;this.params=r;this.tokenService=s;this.rawTxBuilder=new fi(a,i,r,s)}api;nodeRpcUrlsConfig;params;tokenService;rawTxBuilder;async getCYDTokens(){let a=[],i=await this.api.getChainDetailsMap("pool");return Object.values(i).forEach(r=>{if(r.yieldAddress){let s=r.tokens.find(A=>A.tokenAddress===r.yieldAddress),d=r.tokens.filter(Ri);if(d.length>0){let A=s??{allbridgeChainId:r.allbridgeChainId,apr:"",apr30d:"",apr7d:"",bridgeId:r.bridgeId,paddingUtilId:r.paddingUtilId,bridgeAddress:r.bridgeAddress,chainId:r.chainId,chainName:r.name,chainSymbol:r.chainSymbol,chainType:r.chainType,confirmations:r.confirmations,decimals:3,feeShare:"",lpRate:"",name:"Core Yield",poolAddress:"",symbol:"CYD",tokenAddress:r.yieldAddress,transferTime:{},txCostAmount:{maxAmount:"0",swap:"0",transfer:"0"},yieldAddress:r.yieldAddress};a.push({...A,yieldAddress:r.yieldAddress,tokens:d})}}}),a}async getAllowance(a,i){return await this.tokenService.getAllowance({...a,spender:a.token.yieldAddress},i)}async checkAllowance(a,i){return this.tokenService.checkAllowance({...a,spender:a.token.yieldAddress},i)}async balanceOf(a,i){return hn(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,a.owner,i).balanceOf(a)}async getEstimatedAmountOnDeposit(a,i){return $(a.amount),D("amount",a.amount,a.token.decimals),hn(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,a.token.yieldAddress,i).getEstimatedAmountOnDeposit(a)}async getWithdrawAmounts(a,i){$(a.amount),D("amount",a.amount,3);let r=await hn(a.cydToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,a.owner,i).getWithdrawProportionAmount(a);return a.cydToken.tokens.filter(s=>r[s.yieldId]!==void 0).map(s=>({amount:H(r[s.yieldId],s.decimals).toFixed(),token:s}))}};function hn(o,a,i,r,s){switch(Q.getChainProperty(o).chainType){case"EVM":{if(s)return new ia(s,a);{let d=i.getNodeRpcUrl(o),A=new fc(d);return A.defaultReturnFormat={number:vc.STR,bytes:hc.HEX},new ia(A,a)}}case"TRX":{if(s)return new ra(s,a);{let d=i.getNodeRpcUrl(o),A=new Ic({fullHost:d});return A.setAddress(r),new ra(A,a)}}case"SOLANA":throw new K;case"SRB":throw new K;case"SUI":throw new K;case"ALG":throw new K;case"STX":throw new K}}import{Big as Te}from"big.js";function us(o,a,i){let r=Rc(o,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo),s=Bc(r.amountIncludingCommissionInSystemPrecision,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo);return{swapToVUsdCalcResult:r,swapFromVUsdCalcResult:s}}function ms(o,a,i){let r=Tc(o,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo),s=Yc(r.amountIncludingCommissionInSystemPrecision,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo);return{swapToVUsdCalcResult:r,swapFromVUsdCalcResult:s}}function Rc(o,{feeShare:a,decimals:i},r){let s=Te(o),d=s.times(a),A=s.minus(d);return{bridgeFeeInTokenPrecision:d.round().toFixed(),amountIncludingCommissionInSystemPrecision:ls(Bt(A,i),r),amountExcludingCommissionInSystemPrecision:ls(Bt(s,i),r)}}function ls(o,a){if(o.eq(0))return"0";let i=Te(a.tokenBalance).plus(o),r=mt(i.toFixed(),a.aValue,a.dValue);return Te(a.vUsdBalance).minus(r).round().toFixed()}function Bc(o,{feeShare:a,decimals:i},r){if(Te(o).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let d=Te(o).plus(r.vUsdBalance),A=mt(d,r.aValue,r.dValue),l=ze(Te(r.tokenBalance).minus(A),i),u=Te(l).times(a),b=Te(l).minus(u).round();return{bridgeFeeInTokenPrecision:u.round().toFixed(),amountIncludingCommissionInTokenPrecision:b.toFixed(),amountExcludingCommissionInTokenPrecision:l.toFixed()}}function Tc(o,{feeShare:a,decimals:i},r){let s=Te(a).div(Te(1).minus(a)),d=Te(o).times(s),A=Te(o).plus(d);return{bridgeFeeInTokenPrecision:d.round().toFixed(),amountIncludingCommissionInSystemPrecision:ps(Bt(A,i),r),amountExcludingCommissionInSystemPrecision:ps(Bt(o,i),r)}}function ps(o,a){let i=Te(a.tokenBalance).minus(o),r=mt(i.toFixed(),a.aValue,a.dValue);return Te(r).minus(a.vUsdBalance).round().toFixed()}function Yc(o,{feeShare:a,decimals:i},r){if(Te(o).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let s=Te(r.vUsdBalance).minus(o),d=mt(s.toFixed(),r.aValue,r.dValue),A=Te(d).minus(r.tokenBalance),l=ze(A.toFixed(),i),u=Te(a).div(Te(1).minus(a)),b=Te(l).times(u),y=Te(l).plus(b);return{bridgeFeeInTokenPrecision:b.round().toFixed(),amountIncludingCommissionInTokenPrecision:y.round().toFixed(),amountExcludingCommissionInTokenPrecision:l.toFixed()}}import{Big as Ht}from"big.js";function bs(o,a,i,r,s){let d=ut(o,a,i),A=ze(d,a.decimals),l=Xn(d,r,s),u=Ht(o).times(a.feeShare),b=Ht(l).div(Ht(1).minus(r.feeShare)).minus(l);return{sourceLPSwap:{fee:H(u,a.decimals).neg().round(a.decimals,Ht.roundUp).toFixed(),swap:H(Ht(o).minus(A).minus(u),a.decimals).neg().round(a.decimals,Ht.roundUp).toFixed()},destLPSwap:{fee:H(b,r.decimals).neg().round(r.decimals,Ht.roundUp).toFixed(),swap:H(ze(d,r.decimals).minus(l).minus(b),r.decimals).neg().round(r.decimals,Ht.roundUp).toFixed()}}}import{AlgorandClient as ys}from"@algorandfoundation/algokit-utils";import{ABIMethod as Wc,OnApplicationComplete as wc}from"algosdk";var Ti=class{constructor(a){this.nodeRpcUrlsConfig=a}nodeRpcUrlsConfig;async checkAssetOptIn(a,i,r){let s=this.getAlgorand(r);return wa(a,i,s)}async buildRawTransactionAssetOptIn(a,i,r){let s=this.getAlgorand(r);typeof a=="string"&&(a=BigInt(a));let d=await s.createTransaction.assetOptIn({assetId:a,sender:i});return Vt(d)}async checkAppOptIn(a,i,r){let s=this.getAlgorand(r);return Fa(a,i,s)}async buildRawTransactionAppOptIn(a,i,r){let s=this.getAlgorand(r);typeof a=="string"&&(a=BigInt(a));let d=s.newGroup(),A=s.account.random();d.addAppCallMethodCall({appId:a,method:new Wc({name:"optInToApplication",desc:void 0,args:[],returns:{type:"void",desc:void 0},events:[],readonly:!1}),args:[],sender:i,signer:A,onComplete:wc.OptInOC});let{transactions:l}=await d.buildTransactions();return Vt(...l)}getAlgorand(a){if(a){let i=ys.fromClients({algod:a});return i.setDefaultValidityWindow(100),i}else{let i=this.nodeRpcUrlsConfig.getNodeRpcUrl("ALG"),r=ys.fromConfig({algodConfig:{server:i}});return r.setDefaultValidityWindow(100),r}}};import{AxiosHeaders as Sc,create as kc}from"axios";var Cs="3.33.0";function Is(o){return Object.entries(o).reduce((a,i)=>{let r=i[0],s=i[1],d=Vc(r,s);return d&&(a[r]=d),a},{})}function hs(o){let a={};for(let[i,r]of Object.entries(o)){let s=i;for(let d of r.tokens){let A=vn({chainSymbol:s,poolAddress:d.poolAddress}),l=Ne(d.poolInfo);a[A]={...d.poolInfo,imbalance:l}}}return a}function Fc(o,a){let{name:i,...r}=o,{poolInfo:s,...d}=a;return{...d,...r,chainName:i}}function Nc(o){switch(o){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;case"cctpV2":return 4;case"oft":return 5;case"xReserve":return 6}}function Zc(o){return Object.entries(o).reduce((a,[i,r])=>(a[i]=Gc(r),a),{})}function Gc(o){return Object.entries(o).reduce((a,[i,r])=>{let s=Nc(i);return s&&r!=null&&(a[s]=r),a},{})}function Vc(o,a){let i=Q.getChainsProperties()[o];if(!i)return null;let r={...i,allbridgeChainId:a.chainId,bridgeId:a.bridgeId,paddingUtilId:a.paddingUtilId,bridgeAddress:a.bridgeAddress,oftBridgeAddress:a.oftBridgeAddress,yieldAddress:a.yieldAddress,abrPayer:a.abrPayer?{payerAddress:a.abrPayer.payerAddress,abrToken:{chainSymbol:o,tokenAddress:a.abrPayer.tokenAddress,decimals:a.abrPayer.tokenDecimals},payerAvailability:Xc(a.abrPayer.payerAvailability)}:void 0,transferTime:Zc(a.transferTime),txCostAmount:a.txCostAmount,confirmations:a.confirmations,suiAddresses:a.suiAddresses};return{...r,tokens:a.tokens.map(s=>Fc(r,s))}}function Xc(o){if(!o)return{};let a={};for(let[i,r]of Object.entries(o)){if(!r)continue;let s=Pc[i];s&&(a[s]=!0)}return a}var Pc=Object.fromEntries(Object.entries(Ui).map(([o,a])=>[a,Se[o]]));function vn(o){return o.chainSymbol+"_"+o.poolAddress}function vs(o){let a=[];for(let[i,r]of Object.entries(o)){let s=i;for(let d of r.tokens)a.push({chainSymbol:s,poolAddress:d.poolAddress})}return a}function fs(o){let a={};for(let[i,r]of Object.entries(o)){let s=i;for(let[d,A]of Object.entries(r))A.imbalance=Ne(A),a[vn({chainSymbol:s,poolAddress:d})]=A}return a}var fn=class{api;constructor(a){this.api=kc({baseURL:a.coreApiUrl,headers:{Accept:"application/json",...a.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+Cs},params:a.coreApiQueryParams}),a.coreApiHeadersProvider&&this.api.interceptors.request.use(async i=>{let r=await a.coreApiHeadersProvider?.();if(!r||Object.keys(r).length===0)return i;let s=Sc.from(i.headers);for(let[d,A]of Object.entries(r))!A||s.has(d)||s.set(d,A);return i.headers=s,i})}async getTokenInfo(){let{data:a}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:Is(a),poolInfoMap:hs(a)}}async getPendingInfo(){let{data:a}=await this.api.get("/pending-info");return a}async getGasBalance(a,i){let{data:r}=await this.api.get(`/check/${a}/${i}`);return r}async getTransferStatus(a,i){let{data:r}=await this.api.get(`/chain/${a}/${i}`);return r}async getReceiveTransactionCost(a){if(a.messenger===5&&!a.sourceToken)throw new ma("For OFT sourceToken required");let{data:i}=await this.api.post("/receive-fee",a,{headers:{"Content-Type":"application/json"}});return{exchangeRate:i.exchangeRate,fee:i.fee,sourceNativeTokenPrice:i.sourceNativeTokenPrice,abrExchangeRate:i.abrExchangeRate,adminFeeShareWithExtras:i.adminFeeShareWithExtras}}async getPoolInfoMap(a){let i=a instanceof Array?a:[a],{data:r}=await this.api.post("/pool-info",{pools:i},{headers:{"Content-Type":"application/json"}});return fs(r)}};import Yi from"timed-cache";var Nr=20*1e3,Lc=55*1e3,Rn=class{constructor(a){this.apiClient=a;this.tokenInfoCache=new Yi({defaultTtl:Lc}),this.receivedTransactionCache=new Yi({defaultTtl:Nr}),this.pendingInfoCache=new Yi({defaultTtl:Nr}),this.gasBalanceCache=new Yi({defaultTtl:Nr})}apiClient;tokenInfoCache;pendingInfoCache;gasBalanceCache;receivedTransactionCache;getTokenInfo(){let a="TOKEN_INFO_CACHE_KEY",i=this.tokenInfoCache.get(a);if(i)return i;let r=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(a,r),r}async getGasBalance(a,i){let r=`GAS_BALANCE_${a}_${i}`,s=this.gasBalanceCache.get(r);if(s)return s;let d=this.apiClient.getGasBalance(a,i);return this.gasBalanceCache.put(r,d),d}async getPendingInfo(){let a="PENDING_INFO_CACHE_KEY",i=this.pendingInfoCache.get(a);if(i)return i;let r=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(a,r),r}async getReceiveTransactionCost(a){let i=`RECEIVE_TX_COST_${a.sourceChainId}_${a.destinationChainId}_${a.messenger}${a.sourceToken?"_"+a.sourceToken:""}`,r=this.receivedTransactionCache.get(i);if(r)return r;let s=await this.apiClient.getReceiveTransactionCost(a);return this.receivedTransactionCache.put(i,s),s}async getTransferStatus(a,i){return this.apiClient.getTransferStatus(a,i)}async getPoolInfoMap(a){return this.apiClient.getPoolInfoMap(a)}};var Bn=class{constructor(a){this.apiClient=a}apiClient;async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let a=await this.getChainDetailsMap();return Object.values(a).flatMap(i=>i.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(a,i){return this.apiClient.getGasBalance(a,i)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(a,i){return await this.apiClient.getTransferStatus(a,i)}async getReceiveTransactionCost(a){return await this.apiClient.getReceiveTransactionCost(a)}async getPoolInfoMap(a){return await this.apiClient.getPoolInfoMap(a)}};var Tn=class{constructor(a,i){this.client=a;this.isStaging=i.coreApiQueryParams?.staging==="true"}client;isStaging;async getChainDetailsMap(a){let i=await this.client.getChainDetailsMap(),r={};for(let s in i){let d=i[s];d&&(r[s]={...d,tokens:Rs(d.tokens,a,this.isStaging)})}return r}async tokens(a){return Rs(await this.client.tokens(),a,this.isStaging)}async getPendingInfo(){return this.client.getPendingInfo()}async getGasBalance(a,i){return this.client.getGasBalance(a,i)}async getTransferStatus(a,i){return await this.client.getTransferStatus(a,i)}async getReceiveTransactionCost(a){return await this.client.getReceiveTransactionCost(a)}cachePut(a,i){return this.client.cachePut(a,i)}getPoolInfoByKey(a){return this.client.getPoolInfoByKey(a)}refreshPoolInfo(a){return this.client.refreshPoolInfo(a)}};function Rs(o,a,i){return o.filter(r=>i?!0:r.flags[a]).map(Mc)}function Mc(o){let{flags:a,...i}=o;return i}import xc from"timed-cache";var Hc=55*1e3,Yn=class{constructor(a){this.client=a;this.poolInfoCache=new Zr}client;poolInfoCache;async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(a,i){return this.client.getTransferStatus(a,i)}getReceiveTransactionCost(a){return this.client.getReceiveTransactionCost(a)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(a,i){return this.client.getGasBalance(a,i)}async getPoolInfoByKey(a){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let i=this.poolInfoCache.get(a);if(i)return i;{let r=await this.client.getPoolInfoMap(a);this.poolInfoCache.putAll(r);let s=r[vn(a)];if(s)return s;throw new w("Cannot find pool info for "+a.poolAddress+" on chain "+a.chainSymbol)}}async refreshPoolInfo(a){let i;if(a)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),i=await this.client.getPoolInfoMap(a);else{let r=await this.client.getChainDetailsMapAndPoolInfoMap();i=await this.client.getPoolInfoMap(vs(r.chainDetailsMap))}this.poolInfoCache.putAll(i)}cachePut(a,i){this.poolInfoCache.put(vn(a),i)}},Zr=class{cache;constructor(){this.cache=new xc({defaultTtl:Hc})}putAll(a){for(let[i,r]of Object.entries(a))this.cache.put(i,r)}putAllIfNotExists(a){for(let[i,r]of Object.entries(a))this.cache.get(i)||this.cache.put(i,r)}put(a,i){this.cache.put(a,i)}get(a){let i=vn(a);return this.cache.get(i)}};import{AlgorandClient as Ts}from"@algorandfoundation/algokit-utils";import{Big as eg}from"big.js";import{TronWeb as tg}from"tronweb";import{Web3 as ng}from"web3";import{Big as Bs}from"big.js";var xe=class{async checkAllowance(a){let i=await this.getAllowance(a);return Bs(i).gte(Bs(a.amount))}};var oa=class extends xe{constructor(i,r){super();this.algorand=i;this.api=r;i.setDefaultValidityWindow(100)}algorand;api;chainType="ALG";approve(i){throw new K}buildRawTransactionApprove(i){throw new K}getAllowance(i){throw new K}async getNativeTokenBalance(i){let{account:r}=i;return(await this.algorand.account.getInformation(r)).balance.microAlgo.toString()}async getTokenBalance(i){let{account:r,token:s}=i;try{return(await this.algorand.asset.getAccountInformation(r,BigInt(s.tokenAddress))).balance.toString()}catch(d){if(d instanceof Error)return d.message.includes("account asset info not found"),"0";throw d}}};var Jc={abi:[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}]},Wi=Jc;var jc="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",zc="0xdac17f958d2ee523a2206206994597c13d831ec7",Oc=1e5,sa=class extends xe{constructor(i,r){super();this.web3=i;this.api=r}web3;api;chainType="EVM";getAllowance(i){let r=i.token.tokenAddress,s=i.owner,d=i.spender;return this.getAllowanceByTokenAddress(r,s,d)}getAllowanceByTokenAddress(i,r,s){return this.getERC20Contract(i).methods.allowance(r,s).call()}async getTokenBalance(i){return await this.getERC20Contract(i.token.tokenAddress).methods.balanceOf(i.account).call()}async getNativeTokenBalance(i){return(await this.web3.eth.getBalance(i.account)).toString()}async approve(i){if(this.isUsdt(i.tokenAddress)&&await this.getAllowanceByTokenAddress(i.tokenAddress,i.owner,i.spender)!=="0"){let d=await this.buildRawTransactionApprove({...i,amount:"0"});await this.sendRawTransaction(d,i.chainSymbol)}let r=await this.buildRawTransactionApprove(i);return await this.sendRawTransaction(r,i.chainSymbol)}isUsdt(i){return i.toLowerCase()===zc}buildRawTransactionApprove(i){let{tokenAddress:r,spender:s,owner:d,amount:A}=i,u=this.getERC20Contract(r).methods.approve(s,A==null?jc:ni(A));return Promise.resolve({from:d,to:r,value:"0",data:u.encodeABI()})}async sendRawTransaction(i,r){let s=i,d={maxPriorityFeePerGas:void 0,maxFeePerGas:void 0};r==="POL"?s.gas=Oc:s.gas=await this.web3.eth.estimateGas(i);let{transactionHash:A}=await this.web3.eth.sendTransaction({...s,...d});return{txId:A.toString()}}getERC20Contract(i){return new this.web3.eth.Contract(Wi.abi,i)}};import{AnchorProvider as Qc}from"@coral-xyz/anchor";import{Connection as Uc,PublicKey as wi}from"@solana/web3.js";var Fi=class extends xe{constructor(i,r){super();this.solanaRpcUrl=i;this.api=r}solanaRpcUrl;api;chainType="SOLANA";approve(i){throw new K}buildRawTransactionApprove(i){throw new K}buildAnchorProvider(i){let r=new Uc(this.solanaRpcUrl,"confirmed"),s=new wi(i);return new Qc(r,{publicKey:s},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(i){throw new K}async getTokenBalance(i){let{account:r,token:s}=i;try{let d=Qe(new wi(r),new wi(s.tokenAddress));return(await ln(d,this.buildAnchorProvider(r))).amount.toString()}catch(d){if(d instanceof Error)return d.message.startsWith("Account does not exist"),"0";throw d}}async getNativeTokenBalance(i){return(await this.buildAnchorProvider(i.account).connection.getBalance(new wi(i.account))).toString()}};import{Horizon as QZ,NotFoundError as Kc}from"@stellar/stellar-sdk";var Ni=class extends xe{constructor(i,r,s){super();this.nodeRpcUrlsConfig=i;this.params=r;this.api=s}nodeRpcUrlsConfig;params;api;chainType="SRB";getAllowance(){throw new K}async getTokenBalance(i){if(!i.token.originTokenAddress)throw new w("OriginTokenAddress missing");let[r,s]=i.token.originTokenAddress.split(":"),d=new QZ.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),A;try{A=await d.loadAccount(i.account)}catch(b){if(b instanceof Kc)return"0";throw b}let u=A.balances.find(b=>(b.asset_type==="credit_alphanum4"||b.asset_type==="credit_alphanum12")&&b.asset_code==r&&b.asset_issuer==s);return u?.balance?j(u.balance,Q.getChainDecimalsByType(Q.getChainProperty(i.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(i){let A=(await new QZ.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(i.account)).balances.find(l=>l.asset_type==="native");return A?.balance?j(A.balance,Q.getChainDecimalsByType(Q.getChainProperty(i.chainSymbol).chainType)).toFixed():"0"}approve(){throw new K}buildRawTransactionApprove(){throw new K}};import{ClarigenClient as Dc,contractFactory as Ec}from"@clarigen/core";import{createNetwork as _c}from"@stacks/network";var Zi=class extends xe{constructor(i,r,s){super();this.nodeRpcUrl=i;this.params=r;this.api=s;let d=_c({network:this.params.stxIsTestnet?"testnet":"mainnet",client:{baseUrl:this.nodeRpcUrl},apiKey:this.params.stxHeroApiKey});this.client=new Dc(d,this.params.stxHeroApiKey)}nodeRpcUrl;params;api;chainType="STX";client;async getTokenBalance(i){let r=Ec(at.ftToken,i.token.tokenAddress);return(await this.client.roOk(r.getBalance({owner:i.account}))).toString()}async getNativeTokenBalance(i){let r=`${this.nodeRpcUrl}/extended/v1/address/${i.account}/stx`,s=await fetch(r,{headers:this.params.stxHeroApiKey?{"x-api-key":this.params.stxHeroApiKey}:void 0});if(!s.ok)throw new Error(`Failed to fetch account: ${s.status}`);let A=(await s.json()).balance;return BigInt(A).toString()}getAllowance(i){throw new K}checkAllowance(i){throw new K}approve(i){throw new K}buildRawTransactionApprove(i){throw new K}};import{SuiJsonRpcClient as $c}from"@mysten/sui/jsonRpc";var Gi=class extends xe{constructor(i,r,s){super();this.suiRpcUrl=i;this.params=r;this.api=s;this.suiClient=new $c({url:this.suiRpcUrl,network:r.suiIsTestnet?"testnet":"mainnet"})}suiRpcUrl;params;api;chainType="SUI";suiClient;approve(i){throw new K}buildRawTransactionApprove(i){throw new K}getAllowance(i){throw new K}async getTokenBalance(i){if(!i.token.originTokenAddress)throw new w("SUI token must contain 'originTokenAddress'");return(await this.suiClient.getBalance({owner:i.account,coinType:i.token.originTokenAddress})).totalBalance}async getNativeTokenBalance(i){let r=await vt(s=>this.suiClient.getCoins({owner:i.account,cursor:s}));return r.length===0?"0":r.reduce((s,d)=>s+BigInt(d.balance),BigInt(0)).toString()}};var qc="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",da=class extends xe{constructor(i,r){super();this.tronWeb=i;this.api=r}tronWeb;api;chainType="TRX";async getAllowance(i){let{token:{tokenAddress:r},owner:s}=i;return(await(await this.getContract(r)).methods.allowance(s,i.spender).call()).toString()}async getTokenBalance(i){return(await(await this.getContract(i.token.tokenAddress)).balanceOf(i.account).call()).toString()}async getNativeTokenBalance(i){return(await this.tronWeb.trx.getBalance(i.account)).toString()}async approve(i){let r=await this.buildRawTransactionApprove(i);return await ai(this.tronWeb,r)}async buildRawTransactionApprove(i){let{tokenAddress:r,spender:s,owner:d,amount:A}=i,l=A==null?qc:ni(A),u=[{type:"address",value:s},{type:"uint256",value:l}];return this.buildRawTransaction(r,"approve(address,uint256)",u,"0",d)}getContract(i){return this.tronWeb.contract(Wi.abi,i)}async buildRawTransaction(i,r,s,d,A){let l=await this.tronWeb.transactionBuilder.triggerSmartContract(i,r,{callValue:+d},s,A);if(!l?.result?.result)throw new w("Unknown error: "+JSON.stringify(l,null,2));return l.transaction}};var Wn=class{constructor(a,i,r){this.api=a;this.nodeRpcUrlsConfig=i;this.params=r}api;nodeRpcUrlsConfig;params;async getAllowance(a,i){let r=await this.getChainTokenService(a.token.chainSymbol,a.owner,i).getAllowance(a);return H(r,a.token.decimals).toFixed()}async checkAllowance(a,i){return $(a.amount),D("amount",a.amount,a.token.decimals),this.getChainTokenService(a.token.chainSymbol,a.owner,i).checkAllowance(this.prepareCheckAllowanceParams(a))}async approve(a,i){return i.amount&&(ji(i.amount),D("amount",i.amount,i.token.decimals)),this.getChainTokenService(i.token.chainSymbol,i.owner,a).approve(this.prepareApproveParams(i))}async buildRawTransactionApprove(a,i){return a.amount&&(ji(a.amount),D("amount",a.amount,a.token.decimals)),this.getChainTokenService(a.token.chainSymbol,a.owner,i).buildRawTransactionApprove(this.prepareApproveParams(a))}async getTokenBalance(a,i){let r=await this.getChainTokenService(a.token.chainSymbol,a.account,i).getTokenBalance(a);return a.token.decimals?H(r,a.token.decimals).toFixed():r}async getNativeTokenBalance(a,i){let r=await this.getChainTokenService(a.chainSymbol,a.account,i).getNativeTokenBalance(a);return{int:r,float:H(r,Q.getChainDecimalsByType(Q.getChainProperty(a.chainSymbol).chainType)).toFixed()}}getChainTokenService(a,i,r){switch(Q.getChainProperty(a).chainType){case"EVM":{if(r)return new sa(r,this.api);{let s=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new sa(new ng(s),this.api)}}case"TRX":{if(r)return new da(r,this.api);{let s=this.nodeRpcUrlsConfig.getNodeRpcUrl(a),d=new tg({fullHost:s});return d.setAddress(i),new da(d,this.api)}}case"SOLANA":{let s=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new Fi(s,this.api)}case"SRB":return new Ni(this.nodeRpcUrlsConfig,this.params,this.api);case"SUI":return new Gi(this.nodeRpcUrlsConfig.getNodeRpcUrl(a),this.params,this.api);case"ALG":if(r){let s=r,d=Ts.fromClients({algod:s});return new oa(d,this.api)}else{let s=this.nodeRpcUrlsConfig.getNodeRpcUrl(a),d=Ts.fromConfig({algodConfig:{server:s}});return new oa(d,this.api)}case"STX":{let s=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new Zi(s,this.params,this.api)}}}prepareCheckAllowanceParams(a){return{...a,amount:j(a.amount,a.token.decimals)}}prepareApproveParams(a){return{tokenAddress:a.token.tokenAddress,owner:a.owner,spender:a.spender,chainSymbol:a.token.chainSymbol,amount:a.amount==null?void 0:eg(a.amount).toFixed()}}};var Vi=class{constructor(a,i){this.nodeRpcUrlsConfig=a;this.params=i;let r=new fn(i),s=new Rn(r),d=new Bn(s),A=new Yn(d);this.api=new Tn(A,i),this.tokenService=new Wn(this.api,a,i)}nodeRpcUrlsConfig;params;api;tokenService;buildRawTransactionApprove(a,i){return this.tokenService.buildRawTransactionApprove(a,i)}checkAllowance(a,i){return this.tokenService.checkAllowance(a,i)}getAllowance(a,i){return this.tokenService.getAllowance(a,i)}};import{Connection as ag,PublicKey as ig,TransactionMessage as rg}from"@solana/web3.js";var Xi=class{constructor(a,i){this.nodeRpcUrlsConfig=a;this.params=i}nodeRpcUrlsConfig;params;async addMemoToTx(a,i){if(i.length>28)throw new w("InvalidArgumentException memo cannot be more than 28 characters");let r=new ag(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),s=await Qt(a,r),d=rg.decompile(a.message,{addressLookupTableAccounts:s}),A=d.instructions[d.instructions.length-1];if(!A?.keys)throw new w("Last instruction or its keys are invalid.");A.keys.push({pubkey:new ig(I.from(i)),isSigner:!1,isWritable:!1}),a.message=d.compileToV0Message(s)}};import{Asset as dg,contract as YX,Horizon as Ys,Operation as Ag,Operation as cg,rpc as ca,TimeoutInfinite as gg,TransactionBuilder as Gr,TransactionBuilder as Ws}from"@stellar/stellar-sdk";import{contract as e}from"@stellar/stellar-sdk";var og=e.Spec,sg=e.Client;var Aa=class extends sg{constructor(i){super(new og(["AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB","AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA","AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=","AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==","AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ","AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA","AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==","AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==","AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA=="]),i);this.options=i}options;fromJSON={allowance:this.txFromJSON,authorized:this.txFromJSON,approve:this.txFromJSON,balance:this.txFromJSON,burn:this.txFromJSON,burn_from:this.txFromJSON,clawback:this.txFromJSON,decimals:this.txFromJSON,mint:this.txFromJSON,name:this.txFromJSON,set_admin:this.txFromJSON,admin:this.txFromJSON,set_authorized:this.txFromJSON,symbol:this.txFromJSON,transfer:this.txFromJSON,transfer_from:this.txFromJSON}};var lg=180,Pi=class{constructor(a,i){this.nodeRpcUrlsConfig=a;this.params=i}nodeRpcUrlsConfig;params;async buildChangeTrustLineXdrTx(a){let r=await new Ys.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(a.sender),d=await this.getContract(Aa,a.tokenAddress).name();if(un(d))throw new w;let A=pn(d);if(!A)throw new w;let[l,u]=A.split(":");if(l===void 0||u===void 0)throw new w("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let b=new dg(l,u),y=cg.changeTrust({asset:b,limit:a.limit}),C=await So(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB"));return new Ws(r,{fee:C.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(y).setTimeout(lg).build().toXDR()}async getBalanceLine(a,i){let s=await this.getContract(Aa,i).name();if(un(s))throw new w;let d=pn(s);if(!d)throw new w;let[A,l]=d.split(":"),u=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new Ys.Server(u).loadAccount(a)).balances.find(f=>(f.asset_type==="credit_alphanum4"||f.asset_type==="credit_alphanum12")&&f.asset_code==A&&f.asset_issuer==l)}async submitTransactionStellar(a){let i=new Ys.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),r=Ws.fromXDR(a,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await i.submitTransaction(r)}async simulateAndCheckRestoreTxRequiredSoroban(a,i){let r=this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB"),s=new ca.Server(r),d=await s.getAccount(i),A=Gr.fromXDR(a,this.params.sorobanNetworkPassphrase),l=await s.simulateTransaction(A);if(ca.Api.isSimulationRestore(l)){let u=await Yt(r);return new Gr(d,{fee:(u+ +l.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(l.restorePreamble.transactionData.build()).addOperation(Ag.restoreFootprint({})).setTimeout(gg).build().toXDR()}}async sendTransactionSoroban(a){let i=new ca.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),r=Gr.fromXDR(a,this.params.sorobanNetworkPassphrase);return i.sendTransaction(r)}async confirmTx(a,i=15){let r=new ca.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),s=await Ur(()=>r.getTransaction(a),A=>A.status===ca.Api.GetTransactionStatus.NOT_FOUND,i);if(s.length===0)throw new w("No transaction responses found.");let d=s[s.length-1];if(!d)throw new w("Unexpected error: last response is undefined.");return d}getContract(a,i){let r={contractId:i,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new a(r)}};var Si=class{constructor(a,i,r){this.nodeRpcUrlsConfig=a;this.params=i;this.api=r}nodeRpcUrlsConfig;params;api;_suiBridgeService;async buildSendTxFromCustomTx(a,i,r){return this.suiBridgeService.buildRawTransactionSendFromCustomTx(a,i,r)}get suiBridgeService(){return this._suiBridgeService||(this._suiBridgeService=new yn(this.nodeRpcUrlsConfig,this.params,this.api)),this._suiBridgeService}};var ki=class{constructor(a){this.service=a;this.srb=new Pi(a.nodeRpcUrlsConfig,a.params),this.sol=new Xi(a.nodeRpcUrlsConfig,a.params),this.sui=new Si(a.nodeRpcUrlsConfig,a.params,a.api),this.evm=new Vi(a.nodeRpcUrlsConfig,a.params),this.alg=new Ti(a.nodeRpcUrlsConfig)}service;srb;sol;sui;evm;alg};var tt=(r=>(r.WITH_NATIVE_CURRENCY="native",r.WITH_STABLECOIN="stablecoin",r.WITH_ABR="abr",r))(tt||{}),Za=(i=>(i.INT="int",i.FLOAT="float",i))(Za||{});import{Big as me}from"big.js";var ga=class{constructor(a){this.nodeRpcUrls=a}nodeRpcUrls;getNodeRpcUrl(a){let i=this.nodeRpcUrls[a];if(i!==void 0)return i;throw new Ca(a)}},Li=class{constructor(a,i=ua){this.nodeRpcUrlsConfig=a;Q.addChainsProperties(i.additionalChainsProperties);let r=new fn(i),s=new Rn(r),d=new Bn(s),A=new Yn(d);this.api=new Tn(A,i),this.tokenService=new Wn(this.api,a,i),this.bridge=new ii(this.api,a,i,this.tokenService),this.pool=new hi(this.api,a,i,this.tokenService),this.yield=new Bi(this.api,a,i,this.tokenService),this.params=i}nodeRpcUrlsConfig;api;tokenService;params;bridge;pool;yield;async chainDetailsMap(a){return this.api.getChainDetailsMap(a)}async tokens(a){return this.api.tokens(a)}async tokensByChain(a,i){let s=(await this.api.getChainDetailsMap(i))[a];return s?s.tokens:[]}async getTransferStatus(a,i){return this.api.getTransferStatus(a,i)}async getGasBalance(a,i){return this.api.getGasBalance(a,i)}async checkAddress(){return new Promise(a=>{a({status:"OK",gasBalance:null})})}async getPendingStatusInfo(a,i,r,s){$(a);let d;i=="float"?(D("amount",a,r.decimals),d=j(a,r.decimals).toFixed()):d=a;let A=ut(d,r,await Ze(this.api,r)),l=await Ze(this.api,s),u=this.getAmountFromVUsdFormatted(A,s,l),b,y=await this.api.getPendingInfo();for(let C in y[s.chainSymbol]){let f=y[s.chainSymbol];if(!f)throw new w("Cannot find pending info for "+s.chainSymbol);b=f[C]}if(b){let C=Kr(b.totalSentAmount,l),f=this.getAmountFromVUsdFormatted(A,s,C),v;return me(f.int).gt(u.int)?v={min:u,max:f}:v={min:f,max:u},{pendingTxs:b.pendingTxs,pendingAmount:{int:ke(b.totalSentAmount,3,s.decimals).toFixed(0),float:H(b.totalSentAmount,3).toFixed()},estimatedAmount:v}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:u,max:u}}}async getTokenBalance(a,i){return this.tokenService.getTokenBalance(a,i)}async getNativeTokenBalance(a,i){return this.tokenService.getNativeTokenBalance(a,i)}async calculateFeePercentOnSourceChain(a,i){$(a),D("amountFloat",a,i.decimals);let r=j(a,i.decimals);if(r.eq(0))return 0;let s=ut(r,i,await Ze(this.api,i)),d=ze(s,i.decimals);return Di(r,d)}async calculateFeePercentOnDestinationChain(a,i,r){$(a),D("amountFloat",a,i.decimals);let s=j(a,i.decimals);if(s.eq(0))return 0;let d=ut(s,i,await Ze(this.api,i)),A=Xn(d,r,await Ze(this.api,r)),l=ze(d,r.decimals);return Di(l,A)}async getAmountToBeReceivedAndGasFeeOptions(a,i,r,s){return $(a),D("amountToSendFloat",a,i.decimals),{amountToSendFloat:me(a).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(a,i,r,s),gasFeeOptions:await this.getGasFeeOptions(i,r,s)}}async getAmountToSendAndGasFeeOptions(a,i,r,s){return $(a),D("amountToBeReceivedFloat",a,r.decimals),{amountToSendFloat:await this.getAmountToSend(a,i,r,s),amountToBeReceivedFloat:me(a).toFixed(),gasFeeOptions:await this.getGasFeeOptions(i,r,s)}}async getAmountToBeReceived(a,i,r,s){return this.getAmountToBeReceivedCompute(a,i,r,s,async()=>await Ze(this.api,i),async()=>await Ze(this.api,r))}async getAmountToBeReceivedFromChain(a,i,r,s,d,A){return this.getAmountToBeReceivedCompute(a,i,r,s,async()=>await this.pool.getPoolInfoFromChain(i,d),async()=>await this.pool.getPoolInfoFromChain(r,A))}async getAmountToBeReceivedCompute(a,i,r,s,d,A){switch(s){case 1:case 2:return this.getAmountToBeReceivedComputeWithPools(a,i,r,await d(),await A());case 3:case 4:return this.getAmountToBeReceivedComputeCctp(a,i,r,s);case 6:return this.getAmountToBeReceivedComputeXReserve(a,i,r);case 5:return this.getAmountToBeReceivedComputeOft(a,i,r)}}getAmountToBeReceivedComputeWithPools(a,i,r,s,d){$(a),D("amountToSendFloat",a,i.decimals);let A=j(a,i.decimals),l=ut(A,i,s);return this.getAmountFromVUsdFormatted(l,r,d).float}getAmountToBeReceivedComputeCctp(a,i,r,s){$(a),D("amountToSendFloat",a,i.decimals);let d=j(a,i.decimals);switch(s){case 3:{if(!i.cctpAddress||!r.cctpAddress||!i.cctpFeeShare)throw new We("Such route does not support CCTP protocol");let A=d.mul(me(1).minus(i.cctpFeeShare)).round(0,me.roundUp),l=ke(A,i.decimals,r.decimals).round(0);return H(l,r.decimals).toFixed()}case 4:{if(!i.cctpV2Address||!r.cctpV2Address||!i.cctpV2FeeShare)throw new We("Such route does not support CCTP V2 protocol");let A=d.mul(me(1).minus(i.cctpV2FeeShare)).round(0,me.roundUp),l=ke(A,i.decimals,r.decimals).round(0);return H(l,r.decimals).toFixed()}}}getAmountToBeReceivedComputeXReserve(a,i,r){$(a),D("amountToSendFloat",a,i.decimals);let s=this.getXReserveConfig(i,r),A=j(a,i.decimals).mul(me(1).minus(s.feeShare)).minus(s.feeConst).round(0,me.roundDown);if(A.lte(0)){let u=me(s.feeConst).div(me(1).minus(s.feeShare)),b=H(u,i.decimals);throw new w(`Amount is too low for xReserve route: amount must be greater than ${b.toFixed(2,me.roundUp)} ${i.symbol??""}`.trim())}let l=ke(A,i.decimals,r.decimals).round(0);return H(l,r.decimals).toFixed()}async getAmountToBeReceivedComputeOft(a,i,r){$(a),D("amountToSendFloat",a,i.decimals);let s=j(a,i.decimals);if(!i.oftBridgeAddress||!r.oftBridgeAddress||i.oftId!==r.oftId)throw new Xe("Such route does not support OFT protocol");let{adminFeeShareWithExtras:d}=await this.api.getReceiveTransactionCost({sourceChainId:i.allbridgeChainId,destinationChainId:r.allbridgeChainId,messenger:5,sourceToken:i.tokenAddress});if(!d)throw new Xe("Such route does not support OFT protocol");let A=s.mul(me(1).minus(d)).round(0,me.roundUp),l=ke(A,i.decimals,r.decimals).round(0);return H(l,r.decimals).toFixed()}async getAmountToSend(a,i,r,s){return this.getAmountToSendCompute(a,i,r,s,()=>Ze(this.api,i),()=>Ze(this.api,r))}async getAmountToSendFromChain(a,i,r,s,d,A){return this.getAmountToSendCompute(a,i,r,s,()=>this.pool.getPoolInfoFromChain(i,d),()=>this.pool.getPoolInfoFromChain(r,A))}async getAmountToSendCompute(a,i,r,s,d,A){switch(s){case 1:case 2:return this.getAmountToSendComputeWithPools(a,i,r,await d(),await A());case 3:case 4:return this.getAmountToSendComputeCctp(a,i,r,s);case 6:return this.getAmountToSendComputeXReserve(a,i,r);case 5:return this.getAmountToSendComputeOft(a,i,r)}}getAmountToSendComputeWithPools(a,i,r,s,d){$(a),D("amountToBeReceivedFloat",a,r.decimals);let A=j(a,r.decimals),l=Er(A,r,d),u=Dr(l,i,s);if(me(u).lte(0))throw new Rt;return H(u,i.decimals).toFixed()}getAmountToSendComputeCctp(a,i,r,s){$(a),D("amountToBeReceivedFloat",a,r.decimals);let d=j(a,r.decimals);switch(s){case 3:{if(!i.cctpAddress||!r.cctpAddress||!i.cctpFeeShare)throw new We("Such route does not support CCTP protocol");let A=d.div(me(1).minus(i.cctpFeeShare)).round(0,me.roundDown),l=ke(A,r.decimals,i.decimals).round(0);return H(l,i.decimals).toFixed()}case 4:{if(!i.cctpV2Address||!r.cctpV2Address||!i.cctpV2FeeShare)throw new We("Such route does not support CCTP V2 protocol");let A=d.div(me(1).minus(i.cctpV2FeeShare)).round(0,me.roundDown),l=ke(A,r.decimals,i.decimals).round(0);return H(l,i.decimals).toFixed()}}}getAmountToSendComputeXReserve(a,i,r){$(a),D("amountToBeReceivedFloat",a,r.decimals);let s=this.getXReserveConfig(i,r),d=j(a,r.decimals),l=ke(d,r.decimals,i.decimals).round(0).plus(s.feeConst).div(me(1).minus(s.feeShare)).round(0,me.roundUp);if(l.lte(0))throw new w("Amount is too low for xReserve route");return H(l,i.decimals).toFixed()}getXReserveConfig(a,i){if(!a.xReserve||!i.xReserve)throw new w("Such route does not support xReserve protocol");if(me(a.xReserve.feeShare).gte(1))throw new w("xReserve feeShare must be less than 1");return a.xReserve}async getAmountToSendComputeOft(a,i,r){$(a),D("amountToBeReceivedFloat",a,r.decimals);let s=j(a,r.decimals);if(!i.oftId||!r.oftId||!i.oftBridgeAddress||i.oftId!==r.oftId)throw new Xe("Such route does not support OFT protocol");let{adminFeeShareWithExtras:d}=await this.api.getReceiveTransactionCost({sourceChainId:i.allbridgeChainId,destinationChainId:r.allbridgeChainId,messenger:5,sourceToken:i.tokenAddress});if(!d)throw new Xe("Such route does not support OFT protocol");let A=s.div(me(1).minus(d)).round(0,me.roundDown),l=ke(A,r.decimals,i.decimals).round(0);return H(l,i.decimals).toFixed()}async getGasFeeOptions(a,i,r){return _i(a,i.allbridgeChainId,r,this.api)}getAverageTransferTime(a,i,r){return a.transferTime?.[i.chainSymbol]?.[r]??null}async getPoolInfoByToken(a){return await this.api.getPoolInfoByKey({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress})}async refreshPoolInfo(a){if(a){let r=(a instanceof Array?a:[a]).map(s=>({chainSymbol:s.chainSymbol,poolAddress:s.poolAddress}));return this.api.refreshPoolInfo(r)}return this.api.refreshPoolInfo()}aprInPercents(a){return $r(a)}async getExtraGasMaxLimits(a,i,r){return await $i(a,i,r,this.api)}async getVUsdFromAmount(a,i,r){$(a);let s;i=="float"?(D("amount",a,r.decimals),s=j(a,r.decimals).toFixed()):s=a;let d=ut(s,r,await Ze(this.api,r));return{int:d,float:H(d,3).toFixed()}}async getAmountFromVUsd(a,i){return this.getAmountFromVUsdFormatted(a,i,await Ze(this.api,i))}getAmountFromVUsdFormatted(a,i,r){$(a);let s=Xn(a,i,r);if(me(s).lt(0))throw new Rt;return{int:s,float:H(s,i.decimals).toFixed()}}async swapAndBridgeFeeCalculation(a,i,r){return us(a,{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await Ze(this.api,i)},{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await Ze(this.api,r)})}async swapAndBridgeFeeCalculationReverse(a,i,r){let s=ms(a,{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await Ze(this.api,i)},{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await Ze(this.api,r)}),d=s.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(me(d).lt(0))throw new Rt;return s}async getSendAmountDetails(a,i,r,s){$(a);let d;return i=="float"?(D("amount",a,r.decimals),d=j(a,r.decimals).toFixed()):d=a,bs(d,r,await Ze(this.api,r),s,await Ze(this.api,s))}};function pg(o){return"solanaRpcUrl"in o}var ws=class{params;bridge;pool;yield;utils;service;constructor(a,i=ua){let r;pg(a)?r=new ga({SOL:a.solanaRpcUrl,TRX:a.tronRpcUrl}):r=new ga(a),this.service=new Li(r,i),this.bridge=this.service.bridge,this.pool=this.service.pool,this.yield=this.service.yield,this.utils=new ki(this.service),this.params=i}async chainDetailsMap(a="swap"){return this.service.chainDetailsMap(a)}async tokens(a="swap"){return this.service.tokens(a)}async tokensByChain(a,i="swap"){return this.service.tokensByChain(a,i)}async getTransferStatus(a,i){return this.service.getTransferStatus(a,i)}async getGasBalance(a,i){return this.service.getGasBalance(a,i)}async checkAddress(a,i,r){return await this.service.checkAddress()}async getPendingStatusInfo(a,i,r,s){return this.service.getPendingStatusInfo(a,i,r,s)}async getTokenBalance(a,i){return this.service.getTokenBalance(a,i)}async getNativeTokenBalance(a,i){return this.service.getNativeTokenBalance(a,i)}async calculateFeePercentOnSourceChain(a,i){return this.service.calculateFeePercentOnSourceChain(a,i)}async calculateFeePercentOnDestinationChain(a,i,r){return this.service.calculateFeePercentOnDestinationChain(a,i,r)}async getAmountToBeReceivedAndGasFeeOptions(a,i,r,s){return this.service.getAmountToBeReceivedAndGasFeeOptions(a,i,r,s)}async getAmountToSendAndGasFeeOptions(a,i,r,s){return this.service.getAmountToSendAndGasFeeOptions(a,i,r,s)}async getAmountToBeReceived(a,i,r,s){return this.service.getAmountToBeReceived(a,i,r,s)}async getAmountToBeReceivedFromChain(a,i,r,s,d,A){return this.service.getAmountToBeReceivedFromChain(a,i,r,s,d,A)}getAmountToBeReceivedFromPools(a,i,r,s,d,A){switch(A){case 1:case 2:return this.service.getAmountToBeReceivedComputeWithPools(a,i,r,s,d);case 3:case 4:return this.service.getAmountToBeReceivedComputeCctp(a,i,r,A);case 6:return this.service.getAmountToBeReceivedComputeXReserve(a,i,r)}}async getAmountToSend(a,i,r,s){return this.service.getAmountToSend(a,i,r,s)}async getAmountToSendFromChain(a,i,r,s,d,A){return this.service.getAmountToSendFromChain(a,i,r,s,d,A)}getAmountToSendFromPools(a,i,r,s,d,A){switch(A){case 1:case 2:return this.service.getAmountToSendComputeWithPools(a,i,r,s,d);case 3:case 4:return this.service.getAmountToSendComputeCctp(a,i,r,A);case 6:return this.service.getAmountToSendComputeXReserve(a,i,r)}}async getGasFeeOptions(a,i,r){return this.service.getGasFeeOptions(a,i,r)}getAverageTransferTime(a,i,r){return this.service.getAverageTransferTime(a,i,r)}async getPoolInfoByToken(a){return this.service.getPoolInfoByToken(a)}async refreshPoolInfo(a){return this.service.refreshPoolInfo(a)}aprInPercents(a){return this.service.aprInPercents(a)}async getExtraGasMaxLimits(a,i,r){return this.service.getExtraGasMaxLimits(a,i,r)}async getVUsdFromAmount(a,i,r){return this.service.getVUsdFromAmount(a,i,r)}async getAmountFromVUsd(a,i){return this.service.getAmountFromVUsd(a,i)}async swapAndBridgeFeeCalculation(a,i,r){return this.service.swapAndBridgeFeeCalculation(a,i,r)}async swapAndBridgeFeeCalculationReverse(a,i,r){return this.service.swapAndBridgeFeeCalculationReverse(a,i,r)}async getSendAmountDetails(a,i,r,s){return this.service.getSendAmountDetails(a,i,r,s)}};export{Qi as AddressStatus,ws as AllbridgeCoreSdk,Za as AmountFormat,ft as AmountNotEnoughError,ya as ArgumentInvalidDecimalsError,We as CCTPDoesNotSupportedError,qe as ChainSymbol,_ as ChainType,Hs as ErrorCode,ba as ExtraGasMaxLimitExceededError,tt as FeePaymentMethod,Rt as InsufficientPoolLiquidityError,pt as InvalidAmountError,Zt as InvalidGasFeePaymentOptionError,ma as InvalidMessengerOptionError,on as InvalidTxError,Ve as JupiterError,Se as Messenger,K as MethodNotSupportedError,Ca as NodeRpcUrlNotInitializedError,Xe as OFTDoesNotSupportedError,w as SdkError,fe as SdkRootError,er as SolanaAutoTxFee,Gn as TimeoutError,ha as TxTooLargeError,Zn as VerifyTxError,Ia as YieldDoesNotSupportedError,Cc as assertYieldIsSupported,Ri as isYieldSupported,ua as mainnet,Ng as nodeRpcUrlsDefault,Fg as nodeUrlsDefault};
|
|
6
|
+
Y - is value of virtual usd`,networks:{},state:{schema:{global:{ints:15,bytes:4},local:{ints:2,bytes:0}},keys:{global:{feeShareBP:{keyType:"AVMString",valueType:"AVMUint64",key:"ZmVlU2hhcmVCUA=="},router:{keyType:"AVMString",valueType:"address",key:"cm91dGVy"},tokenBalance:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5CYWxhbmNl"},vUsdBalance:{keyType:"AVMString",valueType:"AVMUint64",key:"dlVzZEJhbGFuY2U="},balanceRatioMinBP:{keyType:"AVMString",valueType:"AVMUint64",key:"YmFsYW5jZVJhdGlvTWluQlA="},reserves:{keyType:"AVMString",valueType:"AVMUint64",key:"cmVzZXJ2ZXM="},a:{keyType:"AVMString",valueType:"AVMUint64",key:"YQ=="},d:{keyType:"AVMString",valueType:"AVMUint64",key:"ZA=="},tokenAmountReduce:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5BbW91bnRSZWR1Y2U="},tokenAmountIncrease:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5BbW91bnRJbmNyZWFzZQ=="},stopAuthority:{keyType:"AVMString",valueType:"address",key:"c3RvcEF1dGhvcml0eQ=="},canDeposit:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuRGVwb3NpdA=="},canWithdraw:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuV2l0aGRyYXc="},asset:{keyType:"AVMString",valueType:"AVMUint64",key:"YXNzZXQ="},adminFeeShareBP:{keyType:"AVMString",valueType:"AVMUint64",key:"YWRtaW5GZWVTaGFyZUJQ"},totalSupply:{keyType:"AVMString",valueType:"AVMUint64",key:"dG90YWxTdXBwbHk="},accRewardPerShareP:{keyType:"AVMString",valueType:"AVMBytes",key:"YWNjUmV3YXJkUGVyU2hhcmVQ"},adminFeeAmount:{keyType:"AVMString",valueType:"AVMUint64",key:"YWRtaW5GZWVBbW91bnQ="},owner:{keyType:"AVMString",valueType:"address",key:"b3duZXI="}},local:{balance:{keyType:"AVMString",valueType:"AVMUint64",key:"YmFsYW5jZQ=="},userRewardDebt:{keyType:"AVMString",valueType:"AVMUint64",key:"dXNlclJld2FyZERlYnQ="}},box:{}},maps:{global:{},local:{},box:{}}},bareActions:{create:[],call:[]},sourceInfo:{approval:{sourceInfo:[{pc:[2040],errorMessage:'"Pool: withdraw prohibited'},{pc:[984],errorMessage:"Asset must go to app"},{pc:[998],errorMessage:"CloseTo not allowed"},{pc:[548],errorMessage:"OnCompletion must be CloseOut && can only call when not creating"},{pc:[372],errorMessage:"OnCompletion must be NoOp"},{pc:[559],errorMessage:"OnCompletion must be OptIn && can only call when not creating"},{pc:[536],errorMessage:"OnCompletion must be one of NoOp, OptIn && can only call when not creating"},{pc:[3277],errorMessage:"Only owner"},{pc:[955],errorMessage:"Pool: deposit prohibited"},{pc:[1959],errorMessage:"Pool: is not stopAuthority"},{pc:[2024],errorMessage:"Pool: low token balance"},{pc:[2e3],errorMessage:"Pool: low vUSD balance"},{pc:[1949],errorMessage:"Pool: only router"},{pc:[1480,2289],errorMessage:"Pool: reserves"},{pc:[1521],errorMessage:"Pool: slippage"},{pc:[1605,1667],errorMessage:"Pool: too large"},{pc:[1008],errorMessage:"Pool: too little"},{pc:[1100],errorMessage:"Pool: too much"},{pc:[2308],errorMessage:"Pool: zero D changes"},{pc:[2278],errorMessage:"Pool: zero changes"},{pc:[991],errorMessage:"Rekey not allowed"},{pc:[855],errorMessage:"RewardManager: claim rewards before close out"},{pc:[2061],errorMessage:"RewardManager: not enough amount"},{pc:[1851],errorMessage:"RewardManager: too high"},{pc:[850],errorMessage:"RewardManager: withdraw LP before close out"},{pc:[977],errorMessage:"Wrong asset"},{pc:[757],errorMessage:"asset exists"},{pc:[750,865,954,966,975,1013,1028,1038,1057,1067,1081,1091,1106,1144,1243,1274,1285,1294,1304,1312,1329,1426,1449,1471,1496,1526,1549,1623,1634,1767,1804,1869,1877,1882,1947,1957,1971,1981,1998,2022,2039,2045,2069,2122,2154,2206,2210,2248,2275,2283,2304,2313,2349,2358,2506,2511,2519,2627,2635,2676,2684,3037,3065,3073,3091,3111,3125,3186,3220,3275],errorMessage:"check GlobalState exists"},{pc:[832,848,1757,1784,2056,2093,2108,3031,3051,3136,3158,3172],errorMessage:"check LocalState exists"},{pc:[1220,1407],errorMessage:"invalid number of bytes for arc4.bool"},{pc:[669,677,1202,1379,1717,1734,1912,1931],errorMessage:"invalid number of bytes for arc4.static_array<arc4.uint8, 32>"},{pc:[685,694,703,712,820,932,1177,1186,1210,1387,1397,1596,1658,1842],errorMessage:"invalid number of bytes for arc4.uint64"},{pc:[2724],errorMessage:"n must be non-negative"},{pc:[1127,1158,2230,2262],errorMessage:"overflow"},{pc:[924],errorMessage:"transaction type is axfer"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDggMzIgMTAwMDAKICAgIGJ5dGVjYmxvY2sgInRva2VuQmFsYW5jZSIgInZVc2RCYWxhbmNlIiAiYXNzZXQiICJiYWxhbmNlIiAicmVzZXJ2ZXMiICJ1c2VyUmV3YXJkRGVidCIgImQiICJ0b3RhbFN1cHBseSIgImFjY1Jld2FyZFBlclNoYXJlUCIgMHgwMTAwMDAwMDAwMDAwMCAweDAxICJhZG1pbkZlZUFtb3VudCIgImNhbkRlcG9zaXQiICJjYW5XaXRoZHJhdyIgIm93bmVyIiAiZmVlU2hhcmVCUCIgImJhbGFuY2VSYXRpb01pbkJQIiAweDAyICJhZG1pbkZlZVNoYXJlQlAiICJhIiAicm91dGVyIiAic3RvcEF1dGhvcml0eSIgInRva2VuQW1vdW50UmVkdWNlIiAidG9rZW5BbW91bnRJbmNyZWFzZSIgMHgxNTFmN2M3NSAweGJhODE4MDc2IDB4MDMgMHgwNjgxMDEgMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOAogICAgLy8gYWRtaW5GZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogQlAgLyA1IH0pOyAvLyBEZWZhdWx0IGFkbWluIGZlZSBpcyAyMCUKICAgIGJ5dGVjIDE4IC8vICJhZG1pbkZlZVNoYXJlQlAiCiAgICBwdXNoaW50IDIwMDAgLy8gMjAwMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgcHVzaGJ5dGVzIDB4CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzgKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgcHVzaGJ5dGVzcyAweDAxYTNhM2ZmIDB4MDQ1OWI3YWMgMHg5YjRiODIzNCAvLyBtZXRob2QgIm9wdEluVG9BcHBsaWNhdGlvbigpdm9pZCIsIG1ldGhvZCAiY2xvc2VPdXRPZkFwcGxpY2F0aW9uKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJkZXBvc2l0KGF4ZmVyLHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9vcHRJblRvQXBwbGljYXRpb25fcm91dGVANCBtYWluX2Nsb3NlT3V0T2ZBcHBsaWNhdGlvbl9yb3V0ZUA1IG1haW5fZGVwb3NpdF9yb3V0ZUA2CgptYWluX3N3aXRjaF9jYXNlX25leHRANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4CiAgICAvLyBleHBvcnQgY2xhc3MgUG9vbCBleHRlbmRzIFJld2FyZE1hbmFnZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAyOAogICAgcHVzaGJ5dGVzcyAweDc2MTBhNDYwIDB4ZTNhZWIyNWMgMHhkOTc4YWQxNCAweDBkMWI0YzA2IDB4NzViZjlhMjggMHhmNDkzZDdlZCAweDhkNWNiNmRmIDB4ZmUwNGE1Y2UgMHgwMjhlMDg1OSAweDQxZmM5NjZlIDB4YWJmMjAwMTQgMHgwNGIxNjFmMSAweDY2NTkxY2NmIDB4YTVhZTZiZDEgMHhhMDRjNWJjNCAweDM2MWI2MTU5IDB4NTM4ZTkxMjcgMHhlMTdiYWZiNCAvLyBtZXRob2QgIm9wdEluQXNzZXQoKXZvaWQiLCBtZXRob2QgIndpdGhkcmF3KHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAic3dhcFRvVlVzZChhZGRyZXNzLHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic3dhcEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic2V0RmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImFkanVzdFRvdGFsTHBBbW91bnQoKXZvaWQiLCBtZXRob2QgInNldEJhbGFuY2VSYXRpb01pbkJQKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJzdG9wRGVwb3NpdCgpdm9pZCIsIG1ldGhvZCAic3RhcnREZXBvc2l0KCl2b2lkIiwgbWV0aG9kICJzdG9wV2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInN0YXJ0V2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInNldFN0b3BBdXRob3JpdHkoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJzZXRSb3V0ZXIoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJjbGFpbVJld2FyZHMoKXZvaWQiLCBtZXRob2QgInNldEFkbWluRmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImNsYWltQWRtaW5GZWUoKXZvaWQiLCBtZXRob2QgInBlbmRpbmdSZXdhcmQoYWRkcmVzcyl1aW50NjQiLCBtZXRob2QgInRyYW5zZmVyT3duZXJzaGlwKGFkZHJlc3Mpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG9wdEluQXNzZXQgd2l0aGRyYXcgc3dhcFRvVlVzZCBzd2FwRnJvbVZVc2Qgc2V0RmVlU2hhcmUgYWRqdXN0VG90YWxMcEFtb3VudCBzZXRCYWxhbmNlUmF0aW9NaW5CUCBzdG9wRGVwb3NpdCBzdGFydERlcG9zaXQgc3RvcFdpdGhkcmF3IHN0YXJ0V2l0aGRyYXcgc2V0U3RvcEF1dGhvcml0eSBzZXRSb3V0ZXIgY2xhaW1SZXdhcmRzIHNldEFkbWluRmVlU2hhcmUgY2xhaW1BZG1pbkZlZSBwZW5kaW5nUmV3YXJkIHRyYW5zZmVyT3duZXJzaGlwCiAgICBlcnIKCm1haW5fY3JlYXRlX05vT3BAMjg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOAogICAgLy8gZXhwb3J0IGNsYXNzIFBvb2wgZXh0ZW5kcyBSZXdhcmRNYW5hZ2VyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICBwdXNoYnl0ZXMgMHg1MTZkMzQ3YiAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGNyZWF0ZUFwcGxpY2F0aW9uCiAgICBlcnIKCm1haW5fZGVwb3NpdF9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ05vT3AnLCAnT3B0SW4nXSwgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICBpbnRjXzEgLy8gMQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgc2hsCiAgICBwdXNoaW50IDMgLy8gMwogICAgJgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgb25lIG9mIE5vT3AsIE9wdEluICYmIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGIgZGVwb3NpdAoKbWFpbl9jbG9zZU91dE9mQXBwbGljYXRpb25fcm91dGVANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDIgLy8gQ2xvc2VPdXQKICAgID09CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBDbG9zZU91dCAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBiIGNsb3NlT3V0T2ZBcHBsaWNhdGlvbgoKbWFpbl9vcHRJblRvQXBwbGljYXRpb25fcm91dGVANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjczCiAgICAvLyBvcHRJblRvQXBwbGljYXRpb24oKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gT3B0SW4KICAgID09CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBPcHRJbiAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBiIG9wdEluVG9BcHBsaWNhdGlvbgoKCi8vIF9wdXlhX2xpYi51dGlsLmVuc3VyZV9idWRnZXQocmVxdWlyZWRfYnVkZ2V0OiB1aW50NjQsIGZlZV9zb3VyY2U6IHVpbnQ2NCkgLT4gdm9pZDoKZW5zdXJlX2J1ZGdldDoKICAgIHByb3RvIDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICArCgplbnN1cmVfYnVkZ2V0X3doaWxlX3RvcEAxOgogICAgZnJhbWVfZGlnIDAKICAgIGdsb2JhbCBPcGNvZGVCdWRnZXQKICAgID4KICAgIGJ6IGVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANgogICAgaXR4bl9iZWdpbgogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIHB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGJ5dGVjIDI3IC8vIDB4MDY4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQogICAgYnl0ZWMgMjcgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KICAgIGZyYW1lX2RpZyAtMQogICAgc3dpdGNoIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0CgplbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANToKICAgIGl0eG5fc3VibWl0CiAgICBiIGVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDEKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0OgogICAgZ2xvYmFsIE1pblR4bkZlZQogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDUKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzOgogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBiIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA1CgplbnN1cmVfYnVkZ2V0X2FmdGVyX3doaWxlQDY6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6OmJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyh2OiBieXRlcykgLT4gdWludDY0OgpiaWd1aW50VG9VaW50NjRNb2R1bG86CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MTUKICAgIC8vIGV4cG9ydCBmdW5jdGlvbiBiaWd1aW50VG9VaW50NjRNb2R1bG8odjogYmlndWludCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoxNwogICAgLy8gY29uc3QgbGVuID0gb3AubGVuKGIpOwogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjE4CiAgICAvLyBjb25zdCBzdGFydDogdWludDY0ID0gbGVuID4gOCA/IChsZW4gLSA4KSA6IDA7CiAgICBpbnRjXzIgLy8gOAogICAgPgogICAgYnogYmlndWludFRvVWludDY0TW9kdWxvX3Rlcm5hcnlfZmFsc2VAMgogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMiAvLyA4CiAgICAtCgpiaWd1aW50VG9VaW50NjRNb2R1bG9fdGVybmFyeV9tZXJnZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjE5CiAgICAvLyBjb25zdCBsYXN0OCA9IGIuc2xpY2Uoc3RhcnQpOyAgICAgICAgICAgLy8ga2VlcCBsZWFzdC1zaWduaWZpY2FudCA4IGJ5dGVzCiAgICBkdXAKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGNvdmVyIDMKICAgID49CiAgICBkaWcgMgogICAgc3dhcAogICAgc2VsZWN0CiAgICBmcmFtZV9kaWcgLTEKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShsYXN0OCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gdWludDY0CiAgICBidG9pCiAgICBzd2FwCiAgICByZXRzdWIKCmJpZ3VpbnRUb1VpbnQ2NE1vZHVsb190ZXJuYXJ5X2ZhbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MTgKICAgIC8vIGNvbnN0IHN0YXJ0OiB1aW50NjQgPSBsZW4gPiA4ID8gKGxlbiAtIDgpIDogMDsKICAgIGludGNfMCAvLyAwCiAgICBiIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsb190ZXJuYXJ5X21lcmdlQDMKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5jcmVhdGVBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZUFwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIGNyZWF0ZUFwcGxpY2F0aW9uKG93bmVyOiBBZGRyZXNzLCByb3V0ZXI6IEFkZHJlc3MsIGE6IHVpbnQ2NCwgYXNzZXQ6IEFzc2V0LCBmZWVTaGFyZUJQOiB1aW50NjQsIGJhbGFuY2VSYXRpb01pbkJQOiB1aW50NjQpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgYnl0ZWMgMTQgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6OQogICAgLy8gdGhpcy5vd25lci52YWx1ZSA9IG93bmVyOwogICAgZGlnIDYKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozOAogICAgLy8gdGhpcy5hc3NldC52YWx1ZSA9IGFzc2V0OwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTAKICAgIC8vIGEgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxOSAvLyAiYSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyB0aGlzLmEudmFsdWUgPSBhOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDUKICAgIC8vIHJvdXRlciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gaXMgZGVwb3NpdCBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMjAgLy8gInJvdXRlciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjYzCiAgICAvLyB0aGlzLnJvdXRlci52YWx1ZSA9IHJvdXRlcjsKICAgIHVuY292ZXIgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU2CiAgICAvLyBwcml2YXRlIHN0b3BBdXRob3JpdHkgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDIxIC8vICJzdG9wQXV0aG9yaXR5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IG93bmVyOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIGZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxNSAvLyAiZmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY1CiAgICAvLyB0aGlzLmZlZVNoYXJlQlAudmFsdWUgPSBmZWVTaGFyZUJQOwogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUgPSBiYWxhbmNlUmF0aW9NaW5CUDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OAogICAgLy8gY29uc3QgZGVjaW1hbHMgPSB0aGlzLmFzc2V0LnZhbHVlLmRlY2ltYWxzOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjgKICAgIC8vIGNvbnN0IGRlY2ltYWxzID0gdGhpcy5hc3NldC52YWx1ZS5kZWNpbWFsczsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZSA9IGRlY2ltYWxzID4gU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChkZWNpbWFscyAtIFNZU1RFTV9QUkVDSVNJT04pIDogMDsKICAgIHB1c2hpbnQgMyAvLyAzCiAgICA+CiAgICBieiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X2ZhbHNlQDMKICAgIGR1cAogICAgcHVzaGludCAzIC8vIDMKICAgIC0KICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTMKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRSZWR1Y2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAyMiAvLyAidG9rZW5BbW91bnRSZWR1Y2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZSA9IGRlY2ltYWxzID4gU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChkZWNpbWFscyAtIFNZU1RFTV9QUkVDSVNJT04pIDogMDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3MAogICAgLy8gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlID0gZGVjaW1hbHMgPCBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKFNZU1RFTV9QUkVDSVNJT04gLSBkZWNpbWFscykgOiAwOwogICAgZHVwCiAgICBwdXNoaW50IDMgLy8gMwogICAgPAogICAgYnogY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUA2CiAgICBwdXNoaW50IDMgLy8gMwogICAgZGlnIDEKICAgIC0KICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRJbmNyZWFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIzIC8vICJ0b2tlbkFtb3VudEluY3JlYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2MAogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIHJvdXRlcjogQWRkcmVzcywgYTogdWludDY0LCBhc3NldDogQXNzZXQsIGZlZVNoYXJlQlA6IHVpbnQ2NCwgYmFsYW5jZVJhdGlvTWluQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIGludGNfMCAvLyAwCiAgICBiIGNyZWF0ZUFwcGxpY2F0aW9uX3Rlcm5hcnlfbWVyZ2VANwoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWUgPSBkZWNpbWFscyA+IFNZU1RFTV9QUkVDSVNJT04gPyAxMCAqKiAoZGVjaW1hbHMgLSBTWVNURU1fUFJFQ0lTSU9OKSA6IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X21lcmdlQDQKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5vcHRJblRvQXBwbGljYXRpb25bcm91dGluZ10oKSAtPiB2b2lkOgpvcHRJblRvQXBwbGljYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3NAogICAgLy8gc3VwZXIub3B0SW5Ub0FwcGxpY2F0aW9uKFR4bi5zZW5kZXIpOwogICAgdHhuIFNlbmRlcgogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3MwogICAgLy8gb3B0SW5Ub0FwcGxpY2F0aW9uKCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmNsb3NlT3V0T2ZBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsb3NlT3V0T2ZBcHBsaWNhdGlvbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo4NgogICAgLy8gY29uc3Qgc2VuZGVyID0gVHhuLnNlbmRlcjsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIGNvbnN0IGxwQmFsYW5jZTogdWludDY0ID0gdGhpcy5iYWxhbmNlKHNlbmRlcikudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIGNvbnN0IGxwQmFsYW5jZTogdWludDY0ID0gdGhpcy5iYWxhbmNlKHNlbmRlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo5MAogICAgLy8gaWYgKGxwQmFsYW5jZSA+IDApIHsKICAgIGJ6IGNsb3NlT3V0T2ZBcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjkxCiAgICAvLyB0aGlzLndpdGhkcmF3KGxwQmFsYW5jZSwgYnVkZ2V0KTsKICAgIGR1cAogICAgZGlnIDMKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXcKCmNsb3NlT3V0T2ZBcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTEKICAgIC8vIGNvbnN0IGxwQW1vdW50ID0gdGhpcy5iYWxhbmNlKGZyb20pLnZhbHVlOwogICAgZGlnIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1MQogICAgLy8gY29uc3QgbHBBbW91bnQgPSB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1MgogICAgLy8gYXNzZXJ0KGxwQW1vdW50ID09PSAwLCAnUmV3YXJkTWFuYWdlcjogd2l0aGRyYXcgTFAgYmVmb3JlIGNsb3NlIG91dCcpOwogICAgIQogICAgYXNzZXJ0IC8vIFJld2FyZE1hbmFnZXI6IHdpdGhkcmF3IExQIGJlZm9yZSBjbG9zZSBvdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NAogICAgLy8gY29uc3QgcGVuZGluZyA9IHRoaXMucGVuZGluZ1Jld2FyZChmcm9tKTsKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLnBlbmRpbmdSZXdhcmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NQogICAgLy8gYXNzZXJ0KHBlbmRpbmcgPT09IDAsICdSZXdhcmRNYW5hZ2VyOiBjbGFpbSByZXdhcmRzIGJlZm9yZSBjbG9zZSBvdXQnKTsKICAgICEKICAgIGFzc2VydCAvLyBSZXdhcmRNYW5hZ2VyOiBjbGFpbSByZXdhcmRzIGJlZm9yZSBjbG9zZSBvdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wub3B0SW5Bc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdEluQXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTA2LTExMgogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDgKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEwOAogICAgLy8geGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjExMAogICAgLy8gYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDkKICAgIC8vIGFzc2V0QW1vdW50OiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDYtMTExCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIH0pCiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDYtMTEyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTQKICAgIC8vIGxvZygnUG9vbDogb3B0LWluIGNvbXBsZXRlZCcpOwogICAgcHVzaGJ5dGVzICJQb29sOiBvcHQtaW4gY29tcGxldGVkIgogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDIKICAgIC8vIG9wdEluQXNzZXQoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuZGVwb3NpdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmRlcG9zaXQ6CiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cG4gNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ05vT3AnLCAnT3B0SW4nXSwgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNTIKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU1CiAgICAvLyBpZiAoVHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5PcHRJbikgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieiBkZXBvc2l0X2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU2CiAgICAvLyBzdXBlci5vcHRJblRvQXBwbGljYXRpb24oVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5vcHRJblRvQXBwbGljYXRpb24KCmRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTM5CiAgICAvLyBhc3NlcnQodGhpcy5jYW5EZXBvc2l0LnZhbHVlLCAnUG9vbDogZGVwb3NpdCBwcm9oaWJpdGVkJyk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzOQogICAgLy8gYXNzZXJ0KHRoaXMuY2FuRGVwb3NpdC52YWx1ZSwgJ1Bvb2w6IGRlcG9zaXQgcHJvaGliaXRlZCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGFzc2VydCAvLyBQb29sOiBkZXBvc2l0IHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2MQogICAgLy8gY29uc3Qgb2xkRCA9IHRoaXMuZC52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTYxCiAgICAvLyBjb25zdCBvbGREID0gdGhpcy5kLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSA2CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldC5pZCA9PT0gdGhpcy5hc3NldC52YWx1ZS5pZCwgYFdyb25nIGFzc2V0YCk7CiAgICBkaWcgMQogICAgZHVwCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gYXNzZXJ0KGFzc2V0VHJhbnNmZXJSZWYueGZlckFzc2V0LmlkID09PSB0aGlzLmFzc2V0LnZhbHVlLmlkLCBgV3JvbmcgYXNzZXRgKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIGFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjQKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLmFzc2V0UmVjZWl2ZXIgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLCBgQXNzZXQgbXVzdCBnbyB0byBhcHBgKTsKICAgIGR1cAogICAgZ3R4bnMgQXNzZXRSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gQXNzZXQgbXVzdCBnbyB0byBhcHAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoyNwogICAgLy8gYXNzZXJ0KGFzc2V0VHJhbnNmZXJUeG4ucmVrZXlUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLCBgUmVrZXkgbm90IGFsbG93ZWRgKTsKICAgIGR1cAogICAgZ3R4bnMgUmVrZXlUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIFJla2V5IG5vdCBhbGxvd2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjgKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLmFzc2V0Q2xvc2VUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLCBgQ2xvc2VUbyBub3QgYWxsb3dlZGApOwogICAgZHVwCiAgICBndHhucyBBc3NldENsb3NlVG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBDbG9zZVRvIG5vdCBhbGxvd2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjkKICAgIC8vIHJldHVybiBhc3NldFRyYW5zZmVyVHhuLmFzc2V0QW1vdW50OwogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2NQogICAgLy8gY29uc3QgYW1vdW50U1AgPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCk7CiAgICBjYWxsc3ViIHRvU3lzdGVtUHJlY2lzaW9uCiAgICBkdXAKICAgIGJ1cnkgOAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTY2CiAgICAvLyBhc3NlcnQoYW1vdW50U1AgPiAwLCAnUG9vbDogdG9vIGxpdHRsZScpOwogICAgZHVwCiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIGxpdHRsZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTY5CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudFNQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2OQogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRTUDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNjkKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgKz0gYW1vdW50U1A7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTcxCiAgICAvLyBjb25zdCB0b2tlbkJhbGFuY2UgPSB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBidXJ5IDYKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MgogICAgLy8gY29uc3QgdlVzZEJhbGFuY2UgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MgogICAgLy8gY29uc3QgdlVzZEJhbGFuY2UgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSA2CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzQKICAgIC8vIGNvbnN0IG9sZEJhbGFuY2U6IHVpbnQ2NCA9ICh0b2tlbkJhbGFuY2UgKyB2VXNkQmFsYW5jZSk7CiAgICArCiAgICBidXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3NQogICAgLy8gaWYgKG9sZEQgPT09IDAgfHwgb2xkQmFsYW5jZSA9PT0gMCkgewogICAgYnogZGVwb3NpdF9pZl9ib2R5QDUKICAgIGRpZyA0CiAgICBibnogZGVwb3NpdF9lbHNlX2JvZHlANgoKZGVwb3NpdF9pZl9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzcKICAgIC8vIGNvbnN0IGhhbGZBbW91bnQ6IHVpbnQ2NCA9IGFtb3VudFNQID4+IDE7CiAgICBkaWcgNQogICAgaW50Y18xIC8vIDEKICAgIHNocgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBoYWxmQW1vdW50OwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBoYWxmQW1vdW50OwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3OAogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgpkZXBvc2l0X2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NQogICAgLy8gdGhpcy51cGRhdGVEKCk7CiAgICBjYWxsc3ViIHVwZGF0ZUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gdGhpcy5kZXBvc2l0THAoVHhuLnNlbmRlciwgdGhpcy5kLnZhbHVlIC0gb2xkRCk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gdGhpcy5kZXBvc2l0THAoVHhuLnNlbmRlciwgdGhpcy5kLnZhbHVlIC0gb2xkRCk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDUKICAgIC0KICAgIGNhbGxzdWIgZGVwb3NpdExwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODkKICAgIC8vIGFzc2VydCh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSA8IE1BWF9UT0tFTl9CQUxBTkNFLCAnUG9vbDogdG9vIG11Y2gnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4OQogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIDwgTUFYX1RPS0VOX0JBTEFOQ0UsICdQb29sOiB0b28gbXVjaCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHB1c2hpbnQgMTA5OTUxMTYyNzc3NiAvLyAxMDk5NTExNjI3Nzc2CiAgICA8CiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIG11Y2gKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1MAogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogWydOb09wJywgJ09wdEluJ10sIGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAzMDAwIH0gfSB9KQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZGVwb3NpdF9lbHNlX2JvZHlANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4MgogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudFNQKSAqIEJpZ1VpbnQodG9rZW5CYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgyCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBuZXcgVWludDw2ND4oKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh0b2tlbkJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDYKICAgIGl0b2IKICAgIGRpZyA0CiAgICBpdG9iCiAgICBkaWcgMQogICAgYioKICAgIGRpZyA3CiAgICBpdG9iCiAgICBzd2FwCiAgICBkaWcgMQogICAgYi8KICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDgKICAgIGJ6ZXJvCiAgICBzd2FwCiAgICBkaWcgMQogICAgYnwKICAgIGJ0b2kKICAgIHVuY292ZXIgNAogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODIKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRTUCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudFNQKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgzCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlICs9IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRTUCkgKiBCaWdVaW50KHZVc2RCYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyA1CiAgICBpdG9iCiAgICB1bmNvdmVyIDQKICAgIGIqCiAgICB1bmNvdmVyIDMKICAgIGIvCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIHVuY292ZXIgMgogICAgYnwKICAgIGJ0b2kKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4MwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBuZXcgVWludDw2ND4oKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh2VXNkQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIGRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUA3CgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdbcm91dGluZ10oKSAtPiB2b2lkOgp3aXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5NwogICAgLy8gQGFiaW1ldGhvZCh7IGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAzMDAwIH0gfSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhdwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN3YXBUb1ZVc2Rbcm91dGluZ10oKSAtPiB2b2lkOgpzd2FwVG9WVXNkOgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNDUtMjQ5CiAgICAvLyBzd2FwVG9WVXNkKAogICAgLy8gICB1c2VyOiBBZGRyZXNzLAogICAgLy8gICBhbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gdGhpcy5vbmx5Um91dGVyKCk7CiAgICBjYWxsc3ViIG9ubHlSb3V0ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1MgogICAgLy8gbGV0IHJlc3VsdDogdWludDY0ID0gMDsgLy8gMCBieSBkZWZhdWx0CiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjUzCiAgICAvLyBsZXQgZmVlOiB1aW50NjQgPSAwOwogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1NAogICAgLy8gaWYgKGFtb3VudCA+IDApIHsKICAgIGJ6IHN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNTUKICAgIC8vIGlmICghemVyb0ZlZSkgewogICAgZGlnIDIKICAgIGJueiBzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjU2CiAgICAvLyBmZWUgPSAoYW1vdW50ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyBmZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTUgLy8gImZlZVNoYXJlQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNTYKICAgIC8vIGZlZSA9IChhbW91bnQgKiB0aGlzLmZlZVNoYXJlQlAudmFsdWUpIC8gQlA7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDQKICAgICoKICAgIGludGMgNCAvLyAxMDAwMAogICAgLwogICAgYnVyeSAxCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1OAogICAgLy8gY29uc3QgYW1vdW50SW4gPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCAtIGZlZSk7CiAgICBkaWcgMwogICAgZHVwCiAgICBkaWcgMgogICAgLQogICAgY2FsbHN1YiB0b1N5c3RlbVByZWNpc2lvbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjYwCiAgICAvLyBmZWUgPSBhbW91bnQgLSB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50SW4pOwogICAgZHVwCiAgICBjYWxsc3ViIGZyb21TeXN0ZW1QcmVjaXNpb24KICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgLQogICAgYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGFtb3VudEluOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjYzCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBhbW91bnRJbjsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkaWcgMQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGFtb3VudEluOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NAogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRJbjsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgKz0gYW1vdW50SW47CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDQgLy8gInJlc2VydmVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudEluOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NgogICAgLy8gY29uc3QgdlVzZE5ld0Ftb3VudCA9IHRoaXMuZ2V0WSh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjYKICAgIC8vIGNvbnN0IHZVc2ROZXdBbW91bnQgPSB0aGlzLmdldFkodGhpcy50b2tlbkJhbGFuY2UudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGNhbGxzdWIgZ2V0WQogICAgZHVwCiAgICBidXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NwogICAgLy8gaWYgKHRoaXMudlVzZEJhbGFuY2UudmFsdWUgPiB2VXNkTmV3QW1vdW50KSB7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBpZiAodGhpcy52VXNkQmFsYW5jZS52YWx1ZSA+IHZVc2ROZXdBbW91bnQpIHsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA8CiAgICBieiBzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY4CiAgICAvLyByZXN1bHQgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlIC0gdlVzZE5ld0Ftb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjgKICAgIC8vIHJlc3VsdCA9IHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLSB2VXNkTmV3QW1vdW50OwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyA2CiAgICAtCiAgICBidXJ5IDIKCnN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjcwCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlID0gdlVzZE5ld0Ftb3VudDsKICAgIGRpZyA2CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjcxCiAgICAvLyB0aGlzLmFkZFJld2FyZHMoZmVlKTsKICAgIGR1cAogICAgY2FsbHN1YiBhZGRSZXdhcmRzCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gZW1pdDxTd2FwcGVkVG9WVXNkPih7IHNlbmRlcjogdXNlciwgdG9rZW5JZDogdGhpcy5hc3NldC52YWx1ZS5pZCwgYW1vdW50LCB2VXNkQW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gZW1pdDxTd2FwcGVkVG9WVXNkPih7IHNlbmRlcjogdXNlciwgdG9rZW5JZDogdGhpcy5hc3NldC52YWx1ZS5pZCwgYW1vdW50LCB2VXNkQW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBkaWcgNQogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgNAogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgMgogICAgaXRvYgogICAgc3dhcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZGlnIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MmJiYmVjYTMgLy8gbWV0aG9kICJTd2FwcGVkVG9WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIHRoaXMudmFsaWRhdGVCYWxhbmNlUmF0aW8oKTsKICAgIGNhbGxzdWIgdmFsaWRhdGVCYWxhbmNlUmF0aW8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI0NS0yNDkKICAgIC8vIHN3YXBUb1ZVc2QoCiAgICAvLyAgIHVzZXI6IEFkZHJlc3MsCiAgICAvLyAgIGFtb3VudDogdWludDY0LAogICAgLy8gICB6ZXJvRmVlOiBib29sZWFuLAogICAgLy8gKTogdWludDY0IHsKICAgIGJ5dGVjIDI0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3dhcEZyb21WVXNkW3JvdXRpbmddKCkgLT4gdm9pZDoKc3dhcEZyb21WVXNkOgogICAgcHVzaGJ5dGVzICIiCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5MS0yOTYKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgc3dhcAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5NwogICAgLy8gdGhpcy5vbmx5Um91dGVyKCk7CiAgICBjYWxsc3ViIG9ubHlSb3V0ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5OQogICAgLy8gbGV0IHJlc3VsdFNQOiB1aW50NjQgPSAwOyAvLyAwIGJ5IGRlZmF1bHQKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDAKICAgIC8vIGxldCByZXN1bHQ6IHVpbnQ2NCA9IDA7IC8vIDAgYnkgZGVmYXVsdAogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMQogICAgLy8gbGV0IGZlZTogdWludDY0ID0gMDsKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGlmIChhbW91bnQgPiAwKSB7CiAgICBieiBzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDMKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gYW1vdW50OwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBhbW91bnQ7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDYKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBhbW91bnQ7CiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNAogICAgLy8gY29uc3QgbmV3QW1vdW50ID0gdGhpcy5nZXRZKHRoaXMudlVzZEJhbGFuY2UudmFsdWUpOwogICAgY2FsbHN1YiBnZXRZCiAgICBkdXAKICAgIGJ1cnkgMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDUKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSAxMQogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzA2CiAgICAvLyBpZiAodG9rZW5CYWxhbmNlID4gbmV3QW1vdW50KSB7CiAgICA8CiAgICBieiBzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDcKICAgIC8vIHJlc3VsdFNQID0gdG9rZW5CYWxhbmNlIC0gbmV3QW1vdW50OwogICAgZGlnIDcKICAgIGRpZyA5CiAgICAtCiAgICBkdXAKICAgIGJ1cnkgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzA4CiAgICAvLyByZXN1bHQgPSB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24ocmVzdWx0U1ApOwogICAgY2FsbHN1YiBmcm9tU3lzdGVtUHJlY2lzaW9uCiAgICBidXJ5IDIKCnN3YXBGcm9tVlVzZF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTIKICAgIC8vIGFzc2VydChyZXN1bHRTUCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTIKICAgIC8vIGFzc2VydChyZXN1bHRTUCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkaWcgMwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkaWcgMQogICAgPD0KICAgIGFzc2VydCAvLyBQb29sOiByZXNlcnZlcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IHJlc3VsdFNQOwogICAgc3dhcAogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDQgLy8gInJlc2VydmVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IHJlc3VsdFNQOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxNQogICAgLy8gaWYgKCF6ZXJvRmVlKSB7CiAgICBkaWcgMwogICAgYm56IHN3YXBGcm9tVlVzZF9hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxNgogICAgLy8gZmVlID0gKHJlc3VsdCAqIHRoaXMuZmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NAogICAgLy8gZmVlU2hhcmVCUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE1IC8vICJmZWVTaGFyZUJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE2CiAgICAvLyBmZWUgPSAocmVzdWx0ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAyCiAgICAqCiAgICBpbnRjIDQgLy8gMTAwMDAKICAgIC8KICAgIGJ1cnkgMQoKc3dhcEZyb21WVXNkX2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxOQogICAgLy8gcmVzdWx0IC09IGZlZTsKICAgIGR1cDIKICAgIGR1cAogICAgY292ZXIgMgogICAgLQogICAgZHVwCiAgICBidXJ5IDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzIxCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSA9IG5ld0Ftb3VudDsKICAgIGRpZyAxMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gYXNzZXJ0KHJlc3VsdCA+PSByZWNlaXZlQW1vdW50TWluLCAnUG9vbDogc2xpcHBhZ2UnKTsKICAgIGR1cAogICAgZGlnIDcKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogc2xpcHBhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMy0zMjcKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHJlc3VsdCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdXNlci5uYXRpdmUsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyNAogICAgLy8geGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzI0CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDkKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMy0zMjcKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHJlc3VsdCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdXNlci5uYXRpdmUsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMjgKICAgIC8vIHRoaXMuYWRkUmV3YXJkcyhmZWUpOwogICAgY2FsbHN1YiBhZGRSZXdhcmRzCgpzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMwCiAgICAvLyBlbWl0PFN3YXBwZWRGcm9tVlVzZD4oeyByZWNpcGllbnQ6IHVzZXIsIHRva2VuSWQ6IHRoaXMuYXNzZXQudmFsdWUuaWQsIHZVc2RBbW91bnQ6IGFtb3VudCwgYW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzMAogICAgLy8gZW1pdDxTd2FwcGVkRnJvbVZVc2Q+KHsgcmVjaXBpZW50OiB1c2VyLCB0b2tlbklkOiB0aGlzLmFzc2V0LnZhbHVlLmlkLCB2VXNkQW1vdW50OiBhbW91bnQsIGFtb3VudDogcmVzdWx0LCBmZWUgfSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXRvYgogICAgZGlnIDcKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDYKICAgIGl0b2IKICAgIGNvbmNhdAogICAgZGlnIDIKICAgIGl0b2IKICAgIHN3YXAKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGRpZyAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweGQzZjFkNTQyIC8vIG1ldGhvZCAiU3dhcHBlZEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzIKICAgIC8vIHRoaXMudmFsaWRhdGVCYWxhbmNlUmF0aW8oKTsKICAgIGNhbGxzdWIgdmFsaWRhdGVCYWxhbmNlUmF0aW8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5MS0yOTYKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICBieXRlYyAyNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnNldEZlZVNoYXJlW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0RmVlU2hhcmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzkKICAgIC8vIHNldEZlZVNoYXJlKGZlZVNoYXJlQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0MQogICAgLy8gYXNzZXJ0KGZlZVNoYXJlQlAgPD0gQlAsICdQb29sOiB0b28gbGFyZ2UnKTsKICAgIGR1cAogICAgaW50YyA0IC8vIDEwMDAwCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHRvbyBsYXJnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIGZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxNSAvLyAiZmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0MgogICAgLy8gdGhpcy5mZWVTaGFyZUJQLnZhbHVlID0gZmVlU2hhcmVCUDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzkKICAgIC8vIHNldEZlZVNoYXJlKGZlZVNoYXJlQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmFkanVzdFRvdGFsTHBBbW91bnRbcm91dGluZ10oKSAtPiB2b2lkOgphZGp1c3RUb3RhbExwQW1vdW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ2CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0NwogICAgLy8gY29uc3QgZCA9IHRoaXMuZC52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ3CiAgICAvLyBjb25zdCBkID0gdGhpcy5kLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNDgKICAgIC8vIGNvbnN0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ4CiAgICAvLyBjb25zdCB0b3RhbFN1cHBseSA9IHRoaXMudG90YWxTdXBwbHkudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjb3ZlciAzCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTAKICAgIC8vIGlmIChkID4gdG90YWxTdXBwbHkpIHsKICAgID4KICAgIGJ6IGFkanVzdFRvdGFsTHBBbW91bnRfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTEKICAgIC8vIHRoaXMuZGVwb3NpdExwKFR4bi5zZW5kZXIsIGQgLSB0b3RhbFN1cHBseSk7CiAgICB0eG4gU2VuZGVyCiAgICBkaWcgMgogICAgZGlnIDIKICAgIC0KICAgIGNhbGxzdWIgZGVwb3NpdExwCgphZGp1c3RUb3RhbExwQW1vdW50X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0NQogICAgLy8gYWRqdXN0VG90YWxMcEFtb3VudCgpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zZXRCYWxhbmNlUmF0aW9NaW5CUFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldEJhbGFuY2VSYXRpb01pbkJQOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyBzZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTkKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzYwCiAgICAvLyBhc3NlcnQoYmFsYW5jZVJhdGlvTWluQlAgPD0gQlAsICdQb29sOiB0b28gbGFyZ2UnKTsKICAgIGR1cAogICAgaW50YyA0IC8vIDEwMDAwCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHRvbyBsYXJnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlID0gYmFsYW5jZVJhdGlvTWluQlA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyBzZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RvcERlcG9zaXRbcm91dGluZ10oKSAtPiB2b2lkOgpzdG9wRGVwb3NpdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gdGhpcy5vbmx5U3RvcEF1dGhvcml0eSgpOwogICAgY2FsbHN1YiBvbmx5U3RvcEF1dGhvcml0eQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NgogICAgLy8gdGhpcy5jYW5EZXBvc2l0LnZhbHVlID0gZmFsc2U7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NAogICAgLy8gc3RvcERlcG9zaXQoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RhcnREZXBvc2l0W3JvdXRpbmddKCkgLT4gdm9pZDoKc3RhcnREZXBvc2l0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzcwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBjYW5EZXBvc2l0ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgZGVwb3NpdCBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMTIgLy8gImNhbkRlcG9zaXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzEKICAgIC8vIHRoaXMuY2FuRGVwb3NpdC52YWx1ZSA9IHRydWU7CiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2OQogICAgLy8gc3RhcnREZXBvc2l0KCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN0b3BXaXRoZHJhd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnN0b3BXaXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM3NQogICAgLy8gdGhpcy5vbmx5U3RvcEF1dGhvcml0eSgpOwogICAgY2FsbHN1YiBvbmx5U3RvcEF1dGhvcml0eQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzYKICAgIC8vIHRoaXMuY2FuV2l0aGRyYXcudmFsdWUgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzc0CiAgICAvLyBzdG9wV2l0aGRyYXcoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RhcnRXaXRoZHJhd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnN0YXJ0V2l0aGRyYXc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODAKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODEKICAgIC8vIHRoaXMuY2FuV2l0aGRyYXcudmFsdWUgPSB0cnVlOwogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzkKICAgIC8vIHN0YXJ0V2l0aGRyYXcoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc2V0U3RvcEF1dGhvcml0eVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldFN0b3BBdXRob3JpdHk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODQKICAgIC8vIHNldFN0b3BBdXRob3JpdHkoc3RvcEF1dGhvcml0eTogQWRkcmVzcyk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODUKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgMjEgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODYKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IHN0b3BBdXRob3JpdHk7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzg0CiAgICAvLyBzZXRTdG9wQXV0aG9yaXR5KHN0b3BBdXRob3JpdHk6IEFkZHJlc3MpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zZXRSb3V0ZXJbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRSb3V0ZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODkKICAgIC8vIHNldFJvdXRlcihyb3V0ZXI6IEFkZHJlc3MpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzkwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyByb3V0ZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDIwIC8vICJyb3V0ZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOTEKICAgIC8vIHRoaXMucm91dGVyLnZhbHVlID0gcm91dGVyOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4OQogICAgLy8gc2V0Um91dGVyKHJvdXRlcjogQWRkcmVzcyk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5jbGFpbVJld2FyZHNbcm91dGluZ10oKSAtPiB2b2lkOgpjbGFpbVJld2FyZHM6CiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYxCiAgICAvLyBjb25zdCB1c2VyID0gVHhuLnNlbmRlcjsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYyCiAgICAvLyBjb25zdCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UodXNlcikudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYyCiAgICAvLyBjb25zdCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UodXNlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjMKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiBjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjQKICAgIC8vIGNvbnN0IHJld2FyZHMgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oQmlnVWludCh1c2VyTHBBbW91bnQpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgLyBQX1NDQUxFKTsKICAgIGR1cAogICAgaXRvYgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY0CiAgICAvLyBjb25zdCByZXdhcmRzID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlIC8gUF9TQ0FMRSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBkdXAKICAgIGJ1cnkgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY1CiAgICAvLyBjb25zdCBwZW5kaW5nOiB1aW50NjQgPSByZXdhcmRzIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGRpZyAyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjUKICAgIC8vIGNvbnN0IHBlbmRpbmc6IHVpbnQ2NCA9IHJld2FyZHMgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHVzZXIpLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAtCiAgICBkdXAKICAgIGJ1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY2CiAgICAvLyBpZiAocGVuZGluZyA+IDApIHsKICAgIGJ6IGNsYWltUmV3YXJkc19hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo2NwogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZSA9IHJld2FyZHM7CiAgICBkaWcgMQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzQKICAgIC8vIHVzZXJSZXdhcmREZWJ0ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA1IC8vICJ1c2VyUmV3YXJkRGVidCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo2NwogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZSA9IHJld2FyZHM7CiAgICBkaWcgNQogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB1c2VyIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB1c2VyIH0pLnN1Ym1pdCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGRpZyA1CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY5CiAgICAvLyBlbWl0PFJld2FyZHNDbGFpbWVkPih7IHVzZXI6IG5ldyBBZGRyZXNzKHVzZXIpLCBwZW5kaW5nIH0pOwogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlYyAyNSAvLyBtZXRob2QgIlJld2FyZHNDbGFpbWVkKGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCgpjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjU5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIuc2V0QWRtaW5GZWVTaGFyZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldEFkbWluRmVlU2hhcmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NzQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc2CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3NwogICAgLy8gYXNzZXJ0KGFkbWluRmVlU2hhcmVCUCA8PSBCUCwgJ1Jld2FyZE1hbmFnZXI6IHRvbyBoaWdoJyk7CiAgICBkdXAKICAgIGludGMgNCAvLyAxMDAwMAogICAgPD0KICAgIGFzc2VydCAvLyBSZXdhcmRNYW5hZ2VyOiB0b28gaGlnaAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI4CiAgICAvLyBhZG1pbkZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBCUCAvIDUgfSk7IC8vIERlZmF1bHQgYWRtaW4gZmVlIGlzIDIwJQogICAgYnl0ZWMgMTggLy8gImFkbWluRmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3OAogICAgLy8gdGhpcy5hZG1pbkZlZVNoYXJlQlAudmFsdWUgPSBhZG1pbkZlZVNoYXJlQlA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIuY2xhaW1BZG1pbkZlZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsYWltQWRtaW5GZWU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg0CiAgICAvLyBjb25zdCBhZG1pbkZlZUFtb3VudCA9IHRoaXMuYWRtaW5GZWVBbW91bnQudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODQKICAgIC8vIGNvbnN0IGFkbWluRmVlQW1vdW50ID0gdGhpcy5hZG1pbkZlZUFtb3VudC52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg1CiAgICAvLyBpZiAoYWRtaW5GZWVBbW91bnQgPiAwKSB7CiAgICBieiBjbGFpbUFkbWluRmVlX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg2LTkwCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBhZG1pbkZlZUFtb3VudCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg3CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODcKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODkKICAgIC8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo4OQogICAgLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg2LTkwCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBhZG1pbkZlZUFtb3VudCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMQogICAgLy8gYWRtaW5GZWVBbW91bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgMTEgLy8gImFkbWluRmVlQW1vdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjkxCiAgICAvLyB0aGlzLmFkbWluRmVlQW1vdW50LnZhbHVlID0gMDsKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKY2xhaW1BZG1pbkZlZV9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODEKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5wZW5kaW5nUmV3YXJkW3JvdXRpbmddKCkgLT4gdm9pZDoKcGVuZGluZ1Jld2FyZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLnBlbmRpbmdSZXdhcmQKICAgIGl0b2IKICAgIGJ5dGVjIDI0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6Ok93bmFibGUudHJhbnNmZXJPd25lcnNoaXBbcm91dGluZ10oKSAtPiB2b2lkOgp0cmFuc2Zlck93bmVyc2hpcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTgKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE5CiAgICAvLyB0aGlzLm93bmVyLnZhbHVlID0gbmV3T3duZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTYKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLm9ubHlSb3V0ZXIoKSAtPiB2b2lkOgpvbmx5Um91dGVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTE4CiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5yb3V0ZXIudmFsdWUuYnl0ZXMsICdQb29sOiBvbmx5IHJvdXRlcicpOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyByb3V0ZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDIwIC8vICJyb3V0ZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTgKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnJvdXRlci52YWx1ZS5ieXRlcywgJ1Bvb2w6IG9ubHkgcm91dGVyJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBQb29sOiBvbmx5IHJvdXRlcgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wub25seVN0b3BBdXRob3JpdHkoKSAtPiB2b2lkOgpvbmx5U3RvcEF1dGhvcml0eToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEyMgogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZS5ieXRlcywgJ1Bvb2w6IGlzIG5vdCBzdG9wQXV0aG9yaXR5Jyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgMjEgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjIKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUuYnl0ZXMsICdQb29sOiBpcyBub3Qgc3RvcEF1dGhvcml0eScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gUG9vbDogaXMgbm90IHN0b3BBdXRob3JpdHkKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnZhbGlkYXRlQmFsYW5jZVJhdGlvKCkgLT4gdm9pZDoKdmFsaWRhdGVCYWxhbmNlUmF0aW86CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIHByaXZhdGUgdmFsaWRhdGVCYWxhbmNlUmF0aW8oKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEyOQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjkKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMQogICAgLy8gaWYgKHRva2VuQmFsYW5jZSA+IHZVc2RCYWxhbmNlKSB7CiAgICA+CiAgICBieiB2YWxpZGF0ZUJhbGFuY2VSYXRpb19lbHNlX2JvZHlAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTMyCiAgICAvLyBhc3NlcnQoKHZVc2RCYWxhbmNlICogQlApIC8gdG9rZW5CYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdlVTRCBiYWxhbmNlJyk7CiAgICBmcmFtZV9kaWcgMQogICAgaW50YyA0IC8vIDEwMDAwCiAgICAqCiAgICBmcmFtZV9kaWcgMAogICAgLwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBiYWxhbmNlUmF0aW9NaW5CUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE2IC8vICJiYWxhbmNlUmF0aW9NaW5CUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMgogICAgLy8gYXNzZXJ0KCh2VXNkQmFsYW5jZSAqIEJQKSAvIHRva2VuQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHZVU0QgYmFsYW5jZScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogbG93IHZVU0QgYmFsYW5jZQoKdmFsaWRhdGVCYWxhbmNlUmF0aW9fYWZ0ZXJfaWZfZWxzZUA1OgogICAgcmV0c3ViCgp2YWxpZGF0ZUJhbGFuY2VSYXRpb19lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMwogICAgLy8gfSBlbHNlIGlmICh0b2tlbkJhbGFuY2UgPCB2VXNkQmFsYW5jZSkgewogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAxCiAgICA8CiAgICBieiB2YWxpZGF0ZUJhbGFuY2VSYXRpb19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzNAogICAgLy8gYXNzZXJ0KCh0b2tlbkJhbGFuY2UgKiBCUCkgLyB2VXNkQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHRva2VuIGJhbGFuY2UnKTsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjIDQgLy8gMTAwMDAKICAgICoKICAgIGZyYW1lX2RpZyAxCiAgICAvCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTM0CiAgICAvLyBhc3NlcnQoKHRva2VuQmFsYW5jZSAqIEJQKSAvIHZVc2RCYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdG9rZW4gYmFsYW5jZScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogbG93IHRva2VuIGJhbGFuY2UKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLndpdGhkcmF3KGFtb3VudExwOiB1aW50NjQsIGJ1ZGdldDogdWludDY0KSAtPiB2b2lkOgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5Ny0xOTgKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGJ1ZGdldDogeyBjb25zdGFudDogMzAwMCB9IH0gfSkKICAgIC8vIHdpdGhkcmF3KGFtb3VudExwOiB1aW50NjQsIGJ1ZGdldDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5OQogICAgLy8gZW5zdXJlQnVkZ2V0KGJ1ZGdldCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE0MwogICAgLy8gYXNzZXJ0KHRoaXMuY2FuV2l0aGRyYXcudmFsdWUsICciUG9vbDogd2l0aGRyYXcgcHJvaGliaXRlZCcpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBjYW5XaXRoZHJhdyA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOy8vIGlzIHdpdGhkcmF3biBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMTMgLy8gImNhbldpdGhkcmF3IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTQzCiAgICAvLyBhc3NlcnQodGhpcy5jYW5XaXRoZHJhdy52YWx1ZSwgJyJQb29sOiB3aXRoZHJhdyBwcm9oaWJpdGVkJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYXNzZXJ0IC8vICJQb29sOiB3aXRoZHJhdyBwcm9oaWJpdGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDMKICAgIC8vIGNvbnN0IG9sZEQgPSB0aGlzLmQudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIwMwogICAgLy8gY29uc3Qgb2xkRCA9IHRoaXMuZC52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDQKICAgIC8vIHRoaXMud2l0aGRyYXdMcChUeG4uc2VuZGVyLCBhbW91bnRMcCk7CiAgICB0eG4gU2VuZGVyCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzAKICAgIC8vIGxldCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMAogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZShmcm9tKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzEKICAgIC8vIGFzc2VydCh1c2VyTHBBbW91bnQgPj0gbHBBbW91bnQsICdSZXdhcmRNYW5hZ2VyOiBub3QgZW5vdWdoIGFtb3VudCcpOwogICAgZHVwCiAgICBmcmFtZV9kaWcgLTIKICAgID49CiAgICBhc3NlcnQgLy8gUmV3YXJkTWFuYWdlcjogbm90IGVub3VnaCBhbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzIKICAgIC8vIGNvbnN0IGFjY1Jld2FyZFBlclNoYXJlUCA9IHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMgogICAgLy8gY29uc3QgYWNjUmV3YXJkUGVyU2hhcmVQID0gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMwogICAgLy8gbGV0IHBlbmRpbmc6IHVpbnQ2NCA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNAogICAgLy8gaWYgKHVzZXJMcEFtb3VudCA+IDApIHsKICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLndpdGhkcmF3X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNQogICAgLy8gcGVuZGluZyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidChmcm9tKS52YWx1ZTsKICAgIGZyYW1lX2RpZyAyCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMwogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBmcmFtZV9kaWcgMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNQogICAgLy8gcGVuZGluZyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidChmcm9tKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLQogICAgZnJhbWVfYnVyeSA0CgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhd19hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM3CiAgICAvLyB1c2VyTHBBbW91bnQgLT0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM4CiAgICAvLyB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzOAogICAgLy8gdGhpcy5iYWxhbmNlKGZyb20pLnZhbHVlIC09IGxwQW1vdW50OwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIC0KICAgIGRpZyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM4CiAgICAvLyB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzkKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA3IC8vICJ0b3RhbFN1cHBseSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzkKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSAtPSBscEFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpOwogICAgc3dhcAogICAgaXRvYgogICAgZnJhbWVfZGlnIDMKICAgIGIqCiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpOwogICAgc3dhcAogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MQogICAgLy8gaWYgKHBlbmRpbmcgPiAwKSB7CiAgICBmcmFtZV9kaWcgNAogICAgYnogc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQyCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiBmcm9tIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MgogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLCBhc3NldEFtb3VudDogcGVuZGluZywgYXNzZXRSZWNlaXZlcjogZnJvbSB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MwogICAgLy8gZW1pdDxSZXdhcmRzQ2xhaW1lZD4oeyB1c2VyOiBuZXcgQWRkcmVzcyhmcm9tKSwgcGVuZGluZyB9KTsKICAgIGl0b2IKICAgIGNvbmNhdAogICAgYnl0ZWMgMjUgLy8gbWV0aG9kICJSZXdhcmRzQ2xhaW1lZChhZGRyZXNzLHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdfYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0NQogICAgLy8gZW1pdDxXaXRoZHJhdz4oeyBmcm9tOiBuZXcgQWRkcmVzcyhmcm9tKSwgbHBBbW91bnQgfSk7CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAxCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHhkM2FmYTRmMSAvLyBtZXRob2QgIldpdGhkcmF3KGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDkKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjA5CiAgICAvLyBjb25zdCB0b2tlbkJhbGFuY2UgPSB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTIKICAgIC8vIGNvbnN0IG9sZEJhbGFuY2U6IHVpbnQ2NCA9ICh0b2tlbkJhbGFuY2UgKyB2VXNkQmFsYW5jZSk7CiAgICBkdXAyCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIGRpZyAyCiAgICBpdG9iCiAgICBkaWcgNAogICAgYioKICAgIGRpZyAxCiAgICBpdG9iCiAgICBzd2FwCiAgICBkaWcgMQogICAgYi8KICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDgKICAgIGJ6ZXJvCiAgICBzd2FwCiAgICBkaWcgMQogICAgYnwKICAgIGJ0b2kKICAgIHVuY292ZXIgNQogICAgc3dhcAogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudExwKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjE0CiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHZVc2RCYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgdW5jb3ZlciA1CiAgICBiKgogICAgdW5jb3ZlciAzCiAgICBiLwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICBidG9pCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudExwKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICsgdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA8IG9sZEJhbGFuY2UsICdQb29sOiB6ZXJvIGNoYW5nZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICsgdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA8IG9sZEJhbGFuY2UsICdQb29sOiB6ZXJvIGNoYW5nZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICA+CiAgICBhc3NlcnQgLy8gUG9vbDogemVybyBjaGFuZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFzc2VydChhbW91bnRMcCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFzc2VydChhbW91bnRMcCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHJlc2VydmVzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjIKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgLT0gYW1vdW50THA7CiAgICBmcmFtZV9kaWcgLTIKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyMgogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSAtPSBhbW91bnRMcDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjUKICAgIC8vIHRoaXMudXBkYXRlRCgpOwogICAgY2FsbHN1YiB1cGRhdGVECiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjYKICAgIC8vIGFzc2VydCh0aGlzLmQudmFsdWUgPCBvbGRELCAnUG9vbDogemVybyBEIGNoYW5nZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI2CiAgICAvLyBhc3NlcnQodGhpcy5kLnZhbHVlIDwgb2xkRCwgJ1Bvb2w6IHplcm8gRCBjaGFuZ2VzJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGFzc2VydCAvLyBQb29sOiB6ZXJvIEQgY2hhbmdlcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI4LTIzMgogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgLy8gICBhc3NldEFtb3VudDogdGhpcy5mcm9tU3lzdGVtUHJlY2lzaW9uKGFtb3VudExwKSwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI5CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjkKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMzAKICAgIC8vIGFzc2V0QW1vdW50OiB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50THApLAogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIGZyb21TeXN0ZW1QcmVjaXNpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzMQogICAgLy8gYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyOC0yMzIKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHRoaXMuZnJvbVN5c3RlbVByZWNpc2lvbihhbW91bnRMcCksCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5nZXRZKHg6IHVpbnQ2NCkgLT4gdWludDY0OgpnZXRZOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk3CiAgICAvLyBwcml2YXRlIGdldFkoeDogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgaW50Y18wIC8vIDAKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk4CiAgICAvLyBjb25zdCB4XyA9IEJpZ1VpbnQoeCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk5CiAgICAvLyBjb25zdCBkXyA9IEJpZ1VpbnQodGhpcy5kLnZhbHVlKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk5CiAgICAvLyBjb25zdCBkXyA9IEJpZ1VpbnQodGhpcy5kLnZhbHVlKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwMAogICAgLy8gY29uc3QgYTQgPSBCaWdVaW50KHRoaXMuYS52YWx1ZSA8PCAyKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MAogICAgLy8gYSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE5IC8vICJhIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAwCiAgICAvLyBjb25zdCBhNCA9IEJpZ1VpbnQodGhpcy5hLnZhbHVlIDw8IDIpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzaGwKICAgIGl0b2IKICAgIGR1cAogICAgY292ZXIgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAxCiAgICAvLyBjb25zdCBhOCA9IEJpZ1VpbnQoYTQgKiAybik7CiAgICBieXRlYyAxNyAvLyAweDAyCiAgICBiKgogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAzCiAgICAvLyBjb25zdCBkTWludXNYSXNQb3NpdGl2ZSA9IGRfID49IHhfOwogICAgYjw9CiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwNAogICAgLy8gY29uc3QgZE1pbnVzWEFiczogYmlndWludCA9IGRNaW51c1hJc1Bvc2l0aXZlID8gKGRfIC0geF8pIDogKHhfIC0gZF8pOwogICAgYnogZ2V0WV90ZXJuYXJ5X2ZhbHNlQDIKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgYi0KCmdldFlfdGVybmFyeV9tZXJnZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDA2CiAgICAvLyBjb25zdCBhNEJ5RE1pbnVzWEFiczogYmlndWludCA9IGE0ICogZE1pbnVzWEFiczsKICAgIGZyYW1lX2RpZyA0CiAgICBiKgogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MTEKICAgIC8vIGlmIChkTWludXNYSXNQb3NpdGl2ZSkgewogICAgZnJhbWVfZGlnIDYKICAgIGJ6IGdldFlfZWxzZV9ib2R5QDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxMgogICAgLy8gaWYgKGE0QnlETWludXNYQWJzID49IGRfKSB7CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDMKICAgIGI+PQogICAgYnogZ2V0WV9lbHNlX2JvZHlANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEzCiAgICAvLyBwYXJ0MUFicyA9IGE0QnlETWludXNYQWJzIC0gZF87CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDMKICAgIGItCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxNAogICAgLy8gcGFydDFJc1Bvc2l0aXZlID0gdHJ1ZTsKICAgIGludGNfMSAvLyAxCgpnZXRZX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyNQogICAgLy8gY29uc3QgcGFydDI6IGJpZ3VpbnQgPSBCaWdVaW50KHgpICogKGE0ICogZF8gKiBkXyAqIGRfICsgeF8gKiAocGFydDFBYnMgKiBwYXJ0MUFicykpOwogICAgZnJhbWVfZGlnIDQKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGIqCiAgICBkaWcgMQogICAgYioKICAgIGIqCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBiKgogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBiKgogICAgdW5jb3ZlciAyCiAgICBiKwogICAgYioKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyNgogICAgLy8gbGV0IG51bWVyYXRvcjogYmlndWludCA9IHRoaXMuc3FydChwYXJ0Mik7CiAgICBjYWxsc3ViIHNxcnQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyOQogICAgLy8gaWYgKHBhcnQxSXNQb3NpdGl2ZSkgewogICAgYnogZ2V0WV9lbHNlX2JvZHlAMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzMAogICAgLy8gbnVtZXJhdG9yICs9IHhfICogcGFydDFBYnM7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDEKICAgIGIqCiAgICBiKwoKZ2V0WV9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDM2CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKG51bWVyYXRvciAvIChhOCAqIHhfKSArIDFuKTsgLy8gKzEgdG8gb2Zmc2V0IHJvdW5kaW5nIGVycm9ycwogICAgZnJhbWVfZGlnIDUKICAgIGZyYW1lX2RpZyAyCiAgICBiKgogICAgYi8KICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGIrCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldFlfZWxzZV9ib2R5QDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDMyCiAgICAvLyBudW1lcmF0b3IgLT0geF8gKiBwYXJ0MUFiczsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgMQogICAgYioKICAgIGItCiAgICBiIGdldFlfYWZ0ZXJfaWZfZWxzZUAxMgoKZ2V0WV9lbHNlX2JvZHlANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxNgogICAgLy8gcGFydDFBYnMgPSBkXyAtIGE0QnlETWludXNYQWJzOwogICAgZnJhbWVfZGlnIDMKICAgIGZyYW1lX2RpZyAwCiAgICBiLQogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MTcKICAgIC8vIHBhcnQxSXNQb3NpdGl2ZSA9IGZhbHNlOwogICAgaW50Y18wIC8vIDAKICAgIGIgZ2V0WV9hZnRlcl9pZl9lbHNlQDkKCmdldFlfZWxzZV9ib2R5QDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MjAKICAgIC8vIHBhcnQxQWJzID0gYTRCeURNaW51c1hBYnMgKyBkXzsKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgMwogICAgYisKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDIxCiAgICAvLyBwYXJ0MUlzUG9zaXRpdmUgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBiIGdldFlfYWZ0ZXJfaWZfZWxzZUA5CgpnZXRZX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwNAogICAgLy8gY29uc3QgZE1pbnVzWEFiczogYmlndWludCA9IGRNaW51c1hJc1Bvc2l0aXZlID8gKGRfIC0geF8pIDogKHhfIC0gZF8pOwogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2RpZyAzCiAgICBiLQogICAgYiBnZXRZX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnVwZGF0ZUQoKSAtPiB2b2lkOgp1cGRhdGVEOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDM5CiAgICAvLyBwcml2YXRlIHVwZGF0ZUQoKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0MAogICAgLy8gY29uc3QgeCA9IEJpZ1VpbnQodGhpcy50b2tlbkJhbGFuY2UudmFsdWUpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQwCiAgICAvLyBjb25zdCB4ID0gQmlnVWludCh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQxCiAgICAvLyBjb25zdCB5ID0gQmlnVWludCh0aGlzLnZVc2RCYWxhbmNlLnZhbHVlKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDEKICAgIC8vIGNvbnN0IHkgPSBCaWdVaW50KHRoaXMudlVzZEJhbGFuY2UudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0NgogICAgLy8gY29uc3QgeHk6IGJpZ3VpbnQgPSB4ICogeTsKICAgIGR1cDIKICAgIGIqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDcKICAgIC8vIGNvbnN0IGFfID0gQmlnVWludCh0aGlzLmEudmFsdWUpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwCiAgICAvLyBhID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTkgLy8gImEiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDcKICAgIC8vIGNvbnN0IGFfID0gQmlnVWludCh0aGlzLmEudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0OQogICAgLy8gY29uc3QgcDE6IGJpZ3VpbnQgPSBhXyAqIHh5ICogKHggKyB5KTsKICAgIGR1cAogICAgZGlnIDIKICAgIGIqCiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgNAogICAgYisKICAgIGIqCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1MQogICAgLy8gY29uc3QgcDI6IGJpZ3VpbnQgPSAoeHkgKiAoKGFfICogNG4pIC0gMW4pKSAvIDNuOwogICAgcHVzaGJ5dGVzIDB4MDQKICAgIGIqCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiLQogICAgdW5jb3ZlciAyCiAgICBiKgogICAgYnl0ZWMgMjYgLy8gMHgwMwogICAgYi8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1MwogICAgLy8gY29uc3QgcDM6IGJpZ3VpbnQgPSB0aGlzLnNxcnQoKHAxICogcDEpICsgKHAyICogcDIgKiBwMikpOwogICAgZGlnIDEKICAgIGRpZyAyCiAgICBiKgogICAgZGlnIDEKICAgIGRpZyAyCiAgICBiKgogICAgdW5jb3ZlciAyCiAgICBiKgogICAgYisKICAgIGNhbGxzdWIgc3FydAogICAgZHVwCiAgICBjb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTQKICAgIC8vIGxldCBkXyA9IHRoaXMuY2JydChwMSArIHAzKTsKICAgIGR1cDIKICAgIGIrCiAgICBjYWxsc3ViIGNicnQKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1NQogICAgLy8gaWYgKHAzID4gcDEpIHsKICAgIGI8CiAgICBieiB1cGRhdGVEX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTYKICAgIC8vIGRfIC09IHRoaXMuY2JydChwMyAtIHAxKTsKICAgIGZyYW1lX2RpZyAwCiAgICBiLQogICAgY2FsbHN1YiBjYnJ0CiAgICBmcmFtZV9kaWcgMQogICAgc3dhcAogICAgLQogICAgZnJhbWVfYnVyeSAxCgp1cGRhdGVEX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2MAogICAgLy8gdGhpcy5kLnZhbHVlID0gKGRfIDw8IDEpOwogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMSAvLyAxCiAgICBzaGwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxCiAgICAvLyBkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDYgLy8gImQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjAKICAgIC8vIHRoaXMuZC52YWx1ZSA9IChkXyA8PCAxKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCnVwZGF0ZURfZWxzZV9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTgKICAgIC8vIGRfICs9IHRoaXMuY2JydChwMSAtIHAzKTsKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICBiLQogICAgY2FsbHN1YiBjYnJ0CiAgICBmcmFtZV9kaWcgMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIHVwZGF0ZURfYWZ0ZXJfaWZfZWxzZUAzCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wudG9TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpIC0+IHVpbnQ2NDoKdG9TeXN0ZW1QcmVjaXNpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjMKICAgIC8vIHByaXZhdGUgdG9TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjQKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50UmVkdWNlID0gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MwogICAgLy8gcHJpdmF0ZSB0b2tlbkFtb3VudFJlZHVjZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIyIC8vICJ0b2tlbkFtb3VudFJlZHVjZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2NAogICAgLy8gY29uc3QgdG9rZW5BbW91bnRSZWR1Y2UgPSB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjUKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50SW5jcmVhc2UgPSB0aGlzLnRva2VuQW1vdW50SW5jcmVhc2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRJbmNyZWFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIzIC8vICJ0b2tlbkFtb3VudEluY3JlYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY1CiAgICAvLyBjb25zdCB0b2tlbkFtb3VudEluY3JlYXNlID0gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2NwogICAgLy8gaWYgKHRva2VuQW1vdW50UmVkdWNlID4gMCkgewogICAgYnogdG9TeXN0ZW1QcmVjaXNpb25fZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2OAogICAgLy8gcmV0dXJuIGFtb3VudCAvIHRva2VuQW1vdW50UmVkdWNlOwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMAogICAgLwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnRvU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY5CiAgICAvLyB9IGVsc2UgaWYgKHRva2VuQW1vdW50SW5jcmVhc2UgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogdG9TeXN0ZW1QcmVjaXNpb25fYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzAKICAgIC8vIHJldHVybiBhbW91bnQgKiB0b2tlbkFtb3VudEluY3JlYXNlOwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMQogICAgKgogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnRvU3lzdGVtUHJlY2lzaW9uX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3MgogICAgLy8gcmV0dXJuIGFtb3VudDsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5mcm9tU3lzdGVtUHJlY2lzaW9uKGFtb3VudDogdWludDY0KSAtPiB1aW50NjQ6CmZyb21TeXN0ZW1QcmVjaXNpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzUKICAgIC8vIHByaXZhdGUgZnJvbVN5c3RlbVByZWNpc2lvbihhbW91bnQ6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3NgogICAgLy8gY29uc3QgdG9rZW5BbW91bnRSZWR1Y2UgPSB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyBwcml2YXRlIHRva2VuQW1vdW50UmVkdWNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjIgLy8gInRva2VuQW1vdW50UmVkdWNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDc2CiAgICAvLyBjb25zdCB0b2tlbkFtb3VudFJlZHVjZSA9IHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3NwogICAgLy8gY29uc3QgdG9rZW5BbW91bnRJbmNyZWFzZSA9IHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gcHJpdmF0ZSB0b2tlbkFtb3VudEluY3JlYXNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjMgLy8gInRva2VuQW1vdW50SW5jcmVhc2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzcKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50SW5jcmVhc2UgPSB0aGlzLnRva2VuQW1vdW50SW5jcmVhc2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDc5CiAgICAvLyBpZiAodG9rZW5BbW91bnRSZWR1Y2UgPiAwKSB7CiAgICBieiBmcm9tU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODAKICAgIC8vIHJldHVybiBhbW91bnQgKiB0b2tlbkFtb3VudFJlZHVjZTsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDAKICAgICoKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpmcm9tU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgxCiAgICAvLyB9IGVsc2UgaWYgKHRva2VuQW1vdW50SW5jcmVhc2UgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogZnJvbVN5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4MgogICAgLy8gcmV0dXJuIGFtb3VudCAvIHRva2VuQW1vdW50SW5jcmVhc2U7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAxCiAgICAvCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZnJvbVN5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODQKICAgIC8vIHJldHVybiBhbW91bnQ7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3FydChuOiBieXRlcykgLT4gYnl0ZXM6CnNxcnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODcKICAgIC8vIHByaXZhdGUgc3FydChuOiBiaWd1aW50KTogYmlndWludCB7CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4OAogICAgLy8gYXNzZXJ0KG4gPiAwbiwgJ24gbXVzdCBiZSBub24tbmVnYXRpdmUnKTsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4CiAgICBiPgogICAgYXNzZXJ0IC8vIG4gbXVzdCBiZSBub24tbmVnYXRpdmUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4OQogICAgLy8gaWYgKG4gPT09IDBuKSByZXR1cm4gMG47CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweAogICAgYj09CiAgICBieiBzcXJ0X2FmdGVyX2lmX2Vsc2VAMgogICAgcHVzaGJ5dGVzIDB4CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKc3FydF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OTAKICAgIC8vIGlmIChuIDw9IDNuKSByZXR1cm4gMW47CiAgICBmcmFtZV9kaWcgLTEKICAgIGJ5dGVjIDI2IC8vIDB4MDMKICAgIGI8PQogICAgYnogc3FydF9hZnRlcl9pZl9lbHNlQDQKICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpzcXJ0X2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5MwogICAgLy8gY29uc3QgYmwgPSBiaXRMZW5ndGgoQnl0ZXMobikpOwogICAgZnJhbWVfZGlnIC0xCiAgICBiaXRsZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5NAogICAgLy8gbGV0IHdpZGUgPSBleHB3KDIsIChibCArIDEpIC8gMik7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgcHVzaGludCAyIC8vIDIKICAgIC8KICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzd2FwCiAgICBleHB3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OTUKICAgIC8vIGNvbnN0IGhpID0gQmlnVWludCh3aWRlWzBdKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5NgogICAgLy8gY29uc3QgbG8gPSBCaWdVaW50KHdpZGVbMV0pOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDk3CiAgICAvLyBsZXQgeDogYmlndWludCA9IGhpICogU0hJRlQ2NCArIGxvOwogICAgc3dhcAogICAgYnl0ZWMgMjggLy8gMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIGIqCiAgICBiKwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMAogICAgLy8gbGV0IHk6IGJpZ3VpbnQgPSAoeCArIG4gLyB4KSAvIDJuOwogICAgZnJhbWVfZGlnIC0xCiAgICBkaWcgMQogICAgYi8KICAgIGIrCiAgICBieXRlYyAxNyAvLyAweDAyCiAgICBiLwogICAgZnJhbWVfYnVyeSAxCgpzcXJ0X3doaWxlX3RvcEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTAxCiAgICAvLyB3aGlsZSAoeSA8IHgpIHsKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMAogICAgYjwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMS01MDQKICAgIC8vIHdoaWxlICh5IDwgeCkgewogICAgLy8gICB4ID0geTsKICAgIC8vICAgeSA9ICh4ICsgbiAvIHgpIC8gMm47CiAgICAvLyB9CiAgICBieiBzcXJ0X2FmdGVyX3doaWxlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMwogICAgLy8geSA9ICh4ICsgbiAvIHgpIC8gMm47CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGIvCiAgICBkaWcgMQogICAgYisKICAgIGJ5dGVjIDE3IC8vIDB4MDIKICAgIGIvCiAgICBmcmFtZV9idXJ5IDEKICAgIGZyYW1lX2J1cnkgMAogICAgYiBzcXJ0X3doaWxlX3RvcEA1CgpzcXJ0X2FmdGVyX3doaWxlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MDUKICAgIC8vIHJldHVybiB4OwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuY2JydChuOiBieXRlcykgLT4gdWludDY0OgpjYnJ0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTA4CiAgICAvLyBwcml2YXRlIGNicnQobjogYmlndWludCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBkdXBuIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwOQogICAgLy8gaWYgKG4gPT09IDBuKSByZXR1cm4gMDsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4CiAgICBiPT0KICAgIGJ6IGNicnRfYWZ0ZXJfaWZfZWxzZUAyCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmNicnRfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEwCiAgICAvLyBpZiAobiA8IDhuKSByZXR1cm4gMTsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4MDgKICAgIGI8CiAgICBieiBjYnJ0X2FmdGVyX2lmX2Vsc2VANAogICAgaW50Y18xIC8vIDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpjYnJ0X2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxMwogICAgLy8gY29uc3QgYmwgPSBiaXRMZW5ndGgoQnl0ZXMobikpOwogICAgZnJhbWVfZGlnIC0xCiAgICBiaXRsZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxNAogICAgLy8gbGV0IHdpZGUgPSBleHB3KDIsIChibCArIDIpIC8gMyk7CiAgICBwdXNoaW50IDIgLy8gMgogICAgKwogICAgcHVzaGludCAzIC8vIDMKICAgIC8KICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzd2FwCiAgICBleHB3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MTUKICAgIC8vIGNvbnN0IGhpID0gQmlnVWludCh3aWRlWzBdKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxNgogICAgLy8gY29uc3QgbG8gPSBCaWdVaW50KHdpZGVbMV0pOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTE3CiAgICAvLyBsZXQgeDogYmlndWludCA9IGhpICogU0hJRlQ2NCArIGxvOwogICAgc3dhcAogICAgYnl0ZWMgMjggLy8gMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIGIqCiAgICBiKwogICAgZnJhbWVfYnVyeSAxCgpjYnJ0X3doaWxlX3RvcEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTIxCiAgICAvLyBjb25zdCB4MjogYmlndWludCA9IHggKiB4OwogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgYioKICAgIGR1cAogICAgZnJhbWVfYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjIKICAgIC8vIGlmICh4MiA9PT0gMG4pIGJyZWFrOyAvLyBzaG91bGQgbm90IGhhcHBlbiBmb3IgeD4wCiAgICBwdXNoYnl0ZXMgMHgKICAgIGI9PQogICAgYm56IGNicnRfd2hpbGVfdG9wQDE1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjMKICAgIC8vIGNvbnN0IG5leHQ6IGJpZ3VpbnQgPSAoMm4gKiB4ICsgbiAvIHgyKSAvIDNuOwogICAgYnl0ZWMgMTcgLy8gMHgwMgogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgYioKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDMKICAgIGIvCiAgICBiKwogICAgYnl0ZWMgMjYgLy8gMHgwMwogICAgYi8KICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjQKICAgIC8vIGlmIChuZXh0ID09PSB4IHx8IG5leHQgPT09IHggLSAxbikgewogICAgYj09CiAgICBibnogY2JydF9pZl9ib2R5QDEwCiAgICBmcmFtZV9kaWcgMQogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgYi0KICAgIGZyYW1lX2RpZyAwCiAgICBiPT0KICAgIGJ6IGNicnRfYWZ0ZXJfaWZfZWxzZUAxMQoKY2JydF9pZl9ib2R5QDEwOgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2J1cnkgMQoKY2JydF93aGlsZV90b3BAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MzIKICAgIC8vIHdoaWxlICgoeCArIDFuKSAqICh4ICsgMW4pICogKHggKyAxbikgPD0gbikgeCArPSAxbjsKICAgIGZyYW1lX2RpZyAxCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiKwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDIKICAgIGR1cAogICAgZGlnIDEKICAgIGIqCiAgICBiKgogICAgZnJhbWVfZGlnIC0xCiAgICBiPD0KICAgIGJ6IGNicnRfd2hpbGVfdG9wQDE4CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfYnVyeSAxCiAgICBiIGNicnRfd2hpbGVfdG9wQDE1CgpjYnJ0X3doaWxlX3RvcEAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzMwogICAgLy8gd2hpbGUgKHggKiB4ICogeCA+IG4pIHggLT0gMW47CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBkaWcgMQogICAgYioKICAgIGIqCiAgICBmcmFtZV9kaWcgLTEKICAgIGI+CiAgICBieiBjYnJ0X2FmdGVyX3doaWxlQDIwCiAgICBmcmFtZV9kaWcgMQogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgYi0KICAgIGZyYW1lX2J1cnkgMQogICAgYiBjYnJ0X3doaWxlX3RvcEAxOAoKY2JydF9hZnRlcl93aGlsZUAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzNAogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyh4KTsKICAgIGZyYW1lX2RpZyAxCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmNicnRfYWZ0ZXJfaWZfZWxzZUAxMToKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgY2JydF93aGlsZV90b3BANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5vcHRJblRvQXBwbGljYXRpb24odG86IGJ5dGVzKSAtPiB2b2lkOgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQxCiAgICAvLyBwcm90ZWN0ZWQgb3B0SW5Ub0FwcGxpY2F0aW9uKHRvOiBBY2NvdW50KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MgogICAgLy8gaWYgKCF0aGlzLmJhbGFuY2UodG8pLmhhc1ZhbHVlKSB7CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDIKICAgIC8vIGlmICghdGhpcy5iYWxhbmNlKHRvKS5oYXNWYWx1ZSkgewogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBibnogc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MwogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSA9IDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MwogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDUKICAgIC8vIGlmICghdGhpcy51c2VyUmV3YXJkRGVidCh0bykuaGFzVmFsdWUpIHsKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ1CiAgICAvLyBpZiAoIXRoaXMudXNlclJld2FyZERlYnQodG8pLmhhc1ZhbHVlKSB7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGJueiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZSA9IDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDQ6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIucGVuZGluZ1Jld2FyZCh1c2VyOiBieXRlcykgLT4gdWludDY0OgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIucGVuZGluZ1Jld2FyZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NS05NgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwZW5kaW5nUmV3YXJkKHVzZXI6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTcKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NwogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh0aGlzLmJhbGFuY2UodXNlcikudmFsdWUpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUpIC8gUF9TQ0FMRSkgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHVzZXIpLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMwCiAgICAvLyBhY2NSZXdhcmRQZXJTaGFyZVAgPSBHbG9iYWxTdGF0ZTxiaWd1aW50Pih7IGluaXRpYWxWYWx1ZTogMG4gfSk7CiAgICBieXRlYyA4IC8vICJhY2NSZXdhcmRQZXJTaGFyZVAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTcKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBiKgogICAgYnl0ZWMgOSAvLyAweDAxMDAwMDAwMDAwMDAwCiAgICBiLwogICAgY2FsbHN1YiBiaWd1aW50VG9VaW50NjRNb2R1bG8KICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjk3CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHRoaXMuYmFsYW5jZSh1c2VyKS52YWx1ZSkgKiB0aGlzLmFjY1Jld2FyZFBlclNoYXJlUC52YWx1ZSkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQodXNlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC0KICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5hZGRSZXdhcmRzKHJld2FyZEFtb3VudDogdWludDY0KSAtPiB2b2lkOgphZGRSZXdhcmRzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMAogICAgLy8gcHJvdGVjdGVkIGFkZFJld2FyZHMocmV3YXJkQW1vdW50OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMQogICAgLy8gbGV0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMQogICAgLy8gbGV0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMgogICAgLy8gaWYgKHRvdGFsU3VwcGx5ID4gMCkgewogICAgYnogYWRkUmV3YXJkc19hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDMKICAgIC8vIGNvbnN0IGFkbWluRmVlUmV3YXJkczogdWludDY0ID0gKHJld2FyZEFtb3VudCAqIHRoaXMuYWRtaW5GZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOAogICAgLy8gYWRtaW5GZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogQlAgLyA1IH0pOyAvLyBEZWZhdWx0IGFkbWluIGZlZSBpcyAyMCUKICAgIGJ5dGVjIDE4IC8vICJhZG1pbkZlZVNoYXJlQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTAzCiAgICAvLyBjb25zdCBhZG1pbkZlZVJld2FyZHM6IHVpbnQ2NCA9IChyZXdhcmRBbW91bnQgKiB0aGlzLmFkbWluRmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICoKICAgIGludGMgNCAvLyAxMDAwMAogICAgLwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNAogICAgLy8gcmV3YXJkQW1vdW50IC09IGFkbWluRmVlUmV3YXJkczsKICAgIGZyYW1lX2RpZyAtMQogICAgZGlnIDEKICAgIC0KICAgIGZyYW1lX2J1cnkgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDUKICAgIC8vIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlICs9IEJpZ1VpbnQocmV3YXJkQW1vdW50KSAqIFBfU0NBTEUgLyBCaWdVaW50KHRvdGFsU3VwcGx5KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzAKICAgIC8vIGFjY1Jld2FyZFBlclNoYXJlUCA9IEdsb2JhbFN0YXRlPGJpZ3VpbnQ+KHsgaW5pdGlhbFZhbHVlOiAwbiB9KTsKICAgIGJ5dGVjIDggLy8gImFjY1Jld2FyZFBlclNoYXJlUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDUKICAgIC8vIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlICs9IEJpZ1VpbnQocmV3YXJkQW1vdW50KSAqIFBfU0NBTEUgLyBCaWdVaW50KHRvdGFsU3VwcGx5KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYioKICAgIGZyYW1lX2RpZyAwCiAgICBpdG9iCiAgICBiLwogICAgYisKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNQogICAgLy8gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgKz0gQmlnVWludChyZXdhcmRBbW91bnQpICogUF9TQ0FMRSAvIEJpZ1VpbnQodG90YWxTdXBwbHkpOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDYKICAgIC8vIHRoaXMuYWRtaW5GZWVBbW91bnQudmFsdWUgKz0gYWRtaW5GZWVSZXdhcmRzOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMQogICAgLy8gYWRtaW5GZWVBbW91bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgMTEgLy8gImFkbWluRmVlQW1vdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNgogICAgLy8gdGhpcy5hZG1pbkZlZUFtb3VudC52YWx1ZSArPSBhZG1pbkZlZVJld2FyZHM7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTA2CiAgICAvLyB0aGlzLmFkbWluRmVlQW1vdW50LnZhbHVlICs9IGFkbWluRmVlUmV3YXJkczsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgphZGRSZXdhcmRzX2FmdGVyX2lmX2Vsc2VAMjoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5kZXBvc2l0THAodG86IGJ5dGVzLCBscEFtb3VudDogdWludDY0KSAtPiB2b2lkOgpkZXBvc2l0THA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTEwCiAgICAvLyBwcm90ZWN0ZWQgZGVwb3NpdExwKHRvOiBBY2NvdW50LCBscEFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTEKICAgIC8vIGNvbnN0IGFjY1Jld2FyZFBlclNoYXJlUCA9IHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMQogICAgLy8gY29uc3QgYWNjUmV3YXJkUGVyU2hhcmVQID0gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMgogICAgLy8gbGV0IHBlbmRpbmc6IHVpbnQ2NCA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMwogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZSh0bykudmFsdWU7CiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTEzCiAgICAvLyBsZXQgdXNlckxwQW1vdW50ID0gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTQKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiBkZXBvc2l0THBfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE1CiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWU7CiAgICBmcmFtZV9kaWcgMgogICAgaXRvYgogICAgZnJhbWVfZGlnIDAKICAgIGIqCiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE1CiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC0KICAgIGZyYW1lX2J1cnkgMQoKZGVwb3NpdExwX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTcKICAgIC8vIHVzZXJMcEFtb3VudCArPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTgKICAgIC8vIHRoaXMuYmFsYW5jZSh0bykudmFsdWUgKz0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmJhbGFuY2UodG8pLnZhbHVlICs9IGxwQW1vdW50OwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIGZyYW1lX2RpZyAtMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOAogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSArPSBscEFtb3VudDsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSArPSBscEFtb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSArPSBscEFtb3VudDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE5CiAgICAvLyB0aGlzLnRvdGFsU3VwcGx5LnZhbHVlICs9IGxwQW1vdW50OwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMjEKICAgIC8vIHRoaXMudXNlclJld2FyZERlYnQodG8pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVApIC8gUF9TQ0FMRSk7CiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMAogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBmcmFtZV9kaWcgLTIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMQogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWUgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCkgLyBQX1NDQUxFKTsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMgogICAgLy8gaWYgKHBlbmRpbmcgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogZGVwb3NpdExwX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMwogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLCBhc3NldEFtb3VudDogcGVuZGluZywgYXNzZXRSZWNlaXZlcjogdG8gfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTIzCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB0byB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTI0CiAgICAvLyBlbWl0PFJld2FyZHNDbGFpbWVkPih7IHVzZXI6IG5ldyBBZGRyZXNzKHRvKSwgcGVuZGluZyB9KTsKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyAyNSAvLyBtZXRob2QgIlJld2FyZHNDbGFpbWVkKGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCgpkZXBvc2l0THBfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyNgogICAgLy8gZW1pdDxEZXBvc2l0Pih7IHRvOiBuZXcgQWRkcmVzcyh0byksIGxwQW1vdW50IH0pOwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4Y2ZhYjg3MjMgLy8gbWV0aG9kICJEZXBvc2l0KGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo6T3duYWJsZS5vbmx5T3duZXIoKSAtPiB2b2lkOgpvbmx5T3duZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsICdPbmx5IG93bmVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjEzCiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5vd25lci52YWx1ZS5ieXRlcywgJ09ubHkgb3duZXInKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgb3duZXIKICAgIHJldHN1Ygo=",clear:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CyAFAAEIIJBOJh0MdG9rZW5CYWxhbmNlC3ZVc2RCYWxhbmNlBWFzc2V0B2JhbGFuY2UIcmVzZXJ2ZXMOdXNlclJld2FyZERlYnQBZAt0b3RhbFN1cHBseRJhY2NSZXdhcmRQZXJTaGFyZVAHAQAAAAAAAAEBDmFkbWluRmVlQW1vdW50CmNhbkRlcG9zaXQLY2FuV2l0aGRyYXcFb3duZXIKZmVlU2hhcmVCUBFiYWxhbmNlUmF0aW9NaW5CUAECD2FkbWluRmVlU2hhcmVCUAFhBnJvdXRlcg1zdG9wQXV0aG9yaXR5EXRva2VuQW1vdW50UmVkdWNlE3Rva2VuQW1vdW50SW5jcmVhc2UEFR98dQS6gYB2AQMDBoEBCQEAAAAAAAAAADEYQAApJxKB0A9nJwciZycIgABnJwsiZygiZykiZycEImcnBiJnJwwjZycNI2eCAwQBo6P/BARZt6wEm0uCNDYaAI4DALcAqwCdMRkURDEYQQCGghIEdhCkYATjrrJcBNl4rRQEDRtMBgR1v5ooBPST1+0EjVy23wT+BKXOBAKOCFkEQfyWbgSr8gAUBASxYfEEZlkczwSlrmvRBKBMW8QENhthWQRTjpEnBOF7r7Q2GgCOEgFbApMCqgNaBDYETQR0BIsElASdBKYErwTABNEFLAVDBXIFhQCABFFtNHs2GgCOAQCJACMxGZCBAxoxGBBEQgFyMRmBAhIxGBBEQgEFMRkjEjEYEERCAPOKAgCL/oEKCIsAMgwNQQAqsYEGshCBBbIZJxuyHicbsh+L/40CAAsABLNC/9syALIBQv/1IrIBQv/viYoBAYv/FUkkDUEAGIsAJAlJiwBJTgMPSwJMTYv/TE8CUhdMiSJC/+g2GgFJFSUSRDYaAkkVJRJENhoDSRUkEkQXNhoESRUkEkQXNhoFSRUkEkQXNhoGSRUkEkQXJw5LBmcqTwNnJxNPA2cnFE8DZycVTwNnJw9PAmcnEExnIiplRHEBTElPAkSBAw1BACZJgQMJgQpMlCcWTGdJgQMMQQAPgQNLAQmBCkyUJxdMZyNDIkL/9iJC/94xAIgIgCNDNhoBSRUkEkQXMQBJIitjTElPAkRBAAZJSwOIBKBLAUkiK2NEFESICHkURCNDiAlosSIqZUQyCrIUIrISshGBBLIQIrIBs4AWUG9vbDogb3B0LWluIGNvbXBsZXRlZLAjQ4AARwQxFiMJSTgQgQQSRDYaAUkVJBJEFyKI/okxGSMSQQAFMQCIB/UiJwxlREQiJwZlTElOAkUGREsBSTgRIiplRBJESTgUMgoSREk4IDIDEkRJOBUyAxJEOBKIBkxJRQhJRCInBGVECCcETGciKGVMSU4CRQZEIillTElOAkUGRAhFBkEABUsEQAA1SwUjkSIoZURLAQgoTGciKWVECClMZ4gFkTEAIicGZURLBQmIB+4iKGVEgYCAgICAIAxEI0MiKGVESwYWSwQWSwGjSwcWTEsBokkVJA5EJK9MSwGrF08ECChMZyIpZURLBRZPBKNPA6JJFSQORE8CqxcIKUxnQv+eNhoBSRUkEkQXNhoCSRUkEkQXiANDI0OAADYaAUkVJRJENhoCSRUkEkQXSTYaA0kVIxJEIlNMiALKIkwiTEEAXEsCQAANIicPZURLBAshBApFAUsDSUsCCYgFS0mIBXhPAkwJRQIiKGVESwEIKExnIicEZUQIJwRMZyIoZUSIBA5JRQciKWVEDEEACSIpZURLBglFAilLBmdJiAbAIiplRBZLBUxQSwQWUEsCFkxLAVBLAhZQgAQru+yjTFCwiAJXJxhMULAjQ4AASTYaAUkVJRJENhoCSRUkEkQXSTYaA0kVJBJEF0w2GgRJFSMSRCJTTIgCDyJMIkwiTEEAeyIpZURLBggpSwFniAODSUUKIihlTElOAkULRAxBAA1LB0sJCUlFBIgEsEUCIicEZURLA0lOAksBDkRMCScETGdLA0AADSInD2VESwILIQQKRQFKSU4CCUlFBChLC2dJSwcPRLEiKmVESwmyFLIRshKBBLIQIrIBs4gF5CIqZUQWSwdMUEsGFlBLAhZMSwFQSwIWUIAE0/HVQkxQsIgBeycYTFCwI0M2GgFJFSQSRBeIBoRJIQQORCcPTGcjQ4gGdiInBmVMSU8CRCInB2VMSU4CTgNEDUEACjEASwJLAgmIBb0jQzYaAUkVJBJEF4gGRkkhBA5EJxBMZyNDiAESJwwiZyNDiAYvJwwjZyNDiAEAJw0iZyNDiAYdJw0jZyNDNhoBSRUlEkSIBgwnFUxnI0M2GgFJFSUSRIgF+ycUTGcjQ4AASTEASSIrY0xJTwJEQQBISRYiJwhlRKMnCaKI+39JRQRLAiInBWNECUlFBUEAKUsBSScFSwVmsSIqZURLAbIUSwVJTgKyErIRgQSyECKyAbMWUCcZTFCwI0M2GgFJFSQSRBeIBY5JIQQORCcSTGcjQ4gFgCInC2VMSU8CREEAHrEiKmVEIicOZUSyFEsBshKyEYEEshAisgGzJwsiZyNDNhoBSRUlEkSIBFMWJxhMULAjQzYaAUkVJRJEiAU2Jw5MZyNDMQAiJxRlRBJEiTEAIicVZUQSRImKAAAiKGVMSU8CRCIpZUxJTgJOA0QNQQAQiwEhBAuLAAoiJxBlRA9EiYsAiwEMQf/3iwAhBAuLAQoiJxBlRA9EiYoCAIv/Ioj6QCInDWVERCInBmVEMQBJIitjTElPAkRJi/4PRCInCGVMTgJEIkxBABaLAhaLA6MnCaKI+keLASInBWNECYwEiwKL/gmLAUkiK2NEi/4JSwErTwJmIicHZUSL/gknB0xnTBaLA6MnCaKI+hEnBUxmiwRBACSxIiplRIsBSU4CshSLBElOArISshGBBLIQIrIBsxZQJxlMULCL/haLAUsBUIAE06+k8UxQsCIoZUQiKWVESghLAhZLBKNLARZMSwGiSRUkDkQkr0xLAasXTwVMCShMZyIpZURPBBZPBaNPA6JJFSQORE8CqxcJKUsBZyIoZUQIDUQiJwRlRIv+SwEORIv+CScETGeIAMgiJwZlRIsADESxIiplRIv+iAFaMQCyFLISshGBBLIQIrIBs4mKAQEiSYv/FkkiJwZlRBZJTgIiJxNlRIECkBZJTgMnEaNOAqZJQQB0iwOLAqGLBKOMAIsGQQBaiwCLA6dBAEeLAIsDoYwBI4sEiwNJTgKjSwGjo4sBSaOLAklPAqNPAqCjiAEWTEEAFYsCiwGjoIsFiwKjoicKoIj41IwAiYsCiwGjoUL/6IsDiwChjAEiQv+2iwCLA6CMASJC/6uLAosDoUL/iYoAACIoZUQWIillRBZKoyInE2VEFklLAqNPBE8EoKNJTgJOA4ABBKMnCqFPAqMnGqJLAUsCo0sBSwKjTwKjoIgAlElOAkqgiADyTgOkQQAViwChiADmiwFMCYwBiwEjkCcGTGeJiwBMoYgA0IsBCIwBQv/oigEBIicWZUxJTwJEIicXZUxOAkRBAAiL/4sACowAiYsBQQAIi/+LAQuMAImL/4wAiYoBASInFmVMSU8CRCInF2VMTgJEQQAIi/+LAAuMAImLAUEACIv/iwEKjACJi/+MAImKAQEiSYv/gAClRIv/gACoQQAFgACMAImL/ycapkEABScKjACJi/+TIwiBAgqBAkyVTBZMFkwnHKOgSYwAi/9LAaKgJxGijAGLAYsApEEAFYv/iwFJTgKiSwGgJxGijAGMAEL/44mKAQEiRwOL/4AAqEEABCKMAImL/4ABCKRBAAQjjACJi/+TgQIIgQMKgQJMlUwWTBZMJxyjoIwBiwFJo0mMA4AAqEAAJycRiwFJTgKji/+LA6KgJxqiSYwAqEAAC4sBJwqhiwCoQQA9iwCMAYsBJwqgSYwCSUsBo6OL/6ZBAAeLAowBQv/miwFJSwGjo4v/pUEACosBJwqhjAFC/+mLAYj2zYwAiYsAjAFC/4yKAQCL/yIrY0UBQAAFi/8rImaL/yInBWNFAUAABov/JwUiZomKAQGL/yIrY0QWIicIZUSjJwmiiPaJi/8iJwVjRAmJigEAIicHZUxJTwJEQQAwIicSZUSL/wshBAqL/0sBCYz/IicIZUSL/xYnCaOLABaioCcITGciJwtlRAgnC0xniYoCACInCGVEIov+IitjTElPAkRBABaLAhaLAKMnCaKI9h6L/iInBWNECYwBiwKL/wiL/iIrY0SL/wiL/itPAmYiJwdlRIv/CCcHTGcWiwCjJwmiiPXqi/4nBU8CZosBQQAksSIqZUSL/rIUiwFJTgKyErIRgQSyECKyAbMWi/5MUCcZTFCwi/8Wi/5MUIAEz6uHI0xQsIkxACInDmVEEkSJ",clear:"C4EBQw=="},events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]},{name:"SwappedToVUsd",args:[{type:"address",name:"sender"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"vUsdAmount"},{type:"uint64",name:"fee"}]},{name:"SwappedFromVUsd",args:[{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"vUsdAmount"},{type:"uint64",name:"amount"},{type:"uint64",name:"fee"}]}],templateVariables:{}},si=class{constructor(a){this.value=a}value;asByteArray(){return this.value}asString(){return this.value!==void 0?I.from(this.value).toString("utf-8"):void 0}},k=class o{static get create(){return{_resolveByMethod(a){switch(a.method){case"createApplication":case"createApplication(address,address,uint64,uint64,uint64,uint64)void":return o.create.createApplication(a)}throw new Error("Unknown ' + verb + ' method")},createApplication(a){return{...a,method:"createApplication(address,address,uint64,uint64,uint64,uint64)void",args:Array.isArray(a.args)?a.args:[a.args.owner,a.args.router,a.args.a,a.args.asset,a.args.feeShareBp,a.args.balanceRatioMinBp]}}}}static get optIn(){return{optInToApplication(a){return{...a,method:"optInToApplication()void",args:Array.isArray(a.args)?a.args:[]}},deposit(a){return{...a,method:"deposit(axfer,uint64)void",args:Array.isArray(a.args)?a.args:[a.args.assetTransferRef,a.args.budget]}}}}static get closeOut(){return{closeOutOfApplication(a){return{...a,method:"closeOutOfApplication(uint64)void",args:Array.isArray(a.args)?a.args:[a.args.budget]}}}}static optInAsset(a){return{...a,method:"optInAsset()void",args:Array.isArray(a.args)?a.args:[]}}static deposit(a){return{...a,method:"deposit(axfer,uint64)void",args:Array.isArray(a.args)?a.args:[a.args.assetTransferRef,a.args.budget]}}static withdraw(a){return{...a,method:"withdraw(uint64,uint64)void",args:Array.isArray(a.args)?a.args:[a.args.amountLp,a.args.budget]}}static swapToVUsd(a){return{...a,method:"swapToVUsd(address,uint64,bool)uint64",args:Array.isArray(a.args)?a.args:[a.args.user,a.args.amount,a.args.zeroFee]}}static swapFromVUsd(a){return{...a,method:"swapFromVUsd(address,uint64,uint64,bool)uint64",args:Array.isArray(a.args)?a.args:[a.args.user,a.args.amount,a.args.receiveAmountMin,a.args.zeroFee]}}static setFeeShare(a){return{...a,method:"setFeeShare(uint64)void",args:Array.isArray(a.args)?a.args:[a.args.feeShareBp]}}static adjustTotalLpAmount(a){return{...a,method:"adjustTotalLpAmount()void",args:Array.isArray(a.args)?a.args:[]}}static setBalanceRatioMinBp(a){return{...a,method:"setBalanceRatioMinBP(uint64)void",args:Array.isArray(a.args)?a.args:[a.args.balanceRatioMinBp]}}static stopDeposit(a){return{...a,method:"stopDeposit()void",args:Array.isArray(a.args)?a.args:[]}}static startDeposit(a){return{...a,method:"startDeposit()void",args:Array.isArray(a.args)?a.args:[]}}static stopWithdraw(a){return{...a,method:"stopWithdraw()void",args:Array.isArray(a.args)?a.args:[]}}static startWithdraw(a){return{...a,method:"startWithdraw()void",args:Array.isArray(a.args)?a.args:[]}}static setStopAuthority(a){return{...a,method:"setStopAuthority(address)void",args:Array.isArray(a.args)?a.args:[a.args.stopAuthority]}}static setRouter(a){return{...a,method:"setRouter(address)void",args:Array.isArray(a.args)?a.args:[a.args.router]}}static claimRewards(a){return{...a,method:"claimRewards()void",args:Array.isArray(a.args)?a.args:[]}}static setAdminFeeShare(a){return{...a,method:"setAdminFeeShare(uint64)void",args:Array.isArray(a.args)?a.args:[a.args.adminFeeShareBp]}}static claimAdminFee(a){return{...a,method:"claimAdminFee()void",args:Array.isArray(a.args)?a.args:[]}}static pendingReward(a){return{...a,method:"pendingReward(address)uint64",args:Array.isArray(a.args)?a.args:[a.args.user]}}static transferOwnership(a){return{...a,method:"transferOwnership(address)void",args:Array.isArray(a.args)?a.args:[a.args.newOwner]}}};var di=class o{appClient;constructor(a){this.appClient=a instanceof ri?a:new ri({...a,appSpec:oi})}decodeReturnValue(a,i){return i!==void 0?jA(i,this.appClient.getABIMethod(a),oi.structs):void 0}static async fromCreatorAndName(a){return new o(await ri.fromCreatorAndName({...a,appSpec:oi}))}static async fromNetwork(a){return new o(await ri.fromNetwork({...a,appSpec:oi}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={optIn:{optInToApplication:(a={args:[]})=>this.appClient.params.optIn(k.optIn.optInToApplication(a)),deposit:a=>this.appClient.params.optIn(k.optIn.deposit(a))},closeOut:{closeOutOfApplication:(a={args:[void 0]})=>this.appClient.params.closeOut(k.closeOut.closeOutOfApplication(a))},clearState:a=>this.appClient.params.bare.clearState(a),optInAsset:(a={args:[]})=>this.appClient.params.call(k.optInAsset(a)),deposit:a=>this.appClient.params.call(k.deposit(a)),withdraw:a=>this.appClient.params.call(k.withdraw(a)),swapToVUsd:a=>this.appClient.params.call(k.swapToVUsd(a)),swapFromVUsd:a=>this.appClient.params.call(k.swapFromVUsd(a)),setFeeShare:a=>this.appClient.params.call(k.setFeeShare(a)),adjustTotalLpAmount:(a={args:[]})=>this.appClient.params.call(k.adjustTotalLpAmount(a)),setBalanceRatioMinBp:a=>this.appClient.params.call(k.setBalanceRatioMinBp(a)),stopDeposit:(a={args:[]})=>this.appClient.params.call(k.stopDeposit(a)),startDeposit:(a={args:[]})=>this.appClient.params.call(k.startDeposit(a)),stopWithdraw:(a={args:[]})=>this.appClient.params.call(k.stopWithdraw(a)),startWithdraw:(a={args:[]})=>this.appClient.params.call(k.startWithdraw(a)),setStopAuthority:a=>this.appClient.params.call(k.setStopAuthority(a)),setRouter:a=>this.appClient.params.call(k.setRouter(a)),claimRewards:(a={args:[]})=>this.appClient.params.call(k.claimRewards(a)),setAdminFeeShare:a=>this.appClient.params.call(k.setAdminFeeShare(a)),claimAdminFee:(a={args:[]})=>this.appClient.params.call(k.claimAdminFee(a)),pendingReward:a=>this.appClient.params.call(k.pendingReward(a)),transferOwnership:a=>this.appClient.params.call(k.transferOwnership(a))};createTransaction={optIn:{optInToApplication:(a={args:[]})=>this.appClient.createTransaction.optIn(k.optIn.optInToApplication(a)),deposit:a=>this.appClient.createTransaction.optIn(k.optIn.deposit(a))},closeOut:{closeOutOfApplication:(a={args:[void 0]})=>this.appClient.createTransaction.closeOut(k.closeOut.closeOutOfApplication(a))},clearState:a=>this.appClient.createTransaction.bare.clearState(a),optInAsset:(a={args:[]})=>this.appClient.createTransaction.call(k.optInAsset(a)),deposit:a=>this.appClient.createTransaction.call(k.deposit(a)),withdraw:a=>this.appClient.createTransaction.call(k.withdraw(a)),swapToVUsd:a=>this.appClient.createTransaction.call(k.swapToVUsd(a)),swapFromVUsd:a=>this.appClient.createTransaction.call(k.swapFromVUsd(a)),setFeeShare:a=>this.appClient.createTransaction.call(k.setFeeShare(a)),adjustTotalLpAmount:(a={args:[]})=>this.appClient.createTransaction.call(k.adjustTotalLpAmount(a)),setBalanceRatioMinBp:a=>this.appClient.createTransaction.call(k.setBalanceRatioMinBp(a)),stopDeposit:(a={args:[]})=>this.appClient.createTransaction.call(k.stopDeposit(a)),startDeposit:(a={args:[]})=>this.appClient.createTransaction.call(k.startDeposit(a)),stopWithdraw:(a={args:[]})=>this.appClient.createTransaction.call(k.stopWithdraw(a)),startWithdraw:(a={args:[]})=>this.appClient.createTransaction.call(k.startWithdraw(a)),setStopAuthority:a=>this.appClient.createTransaction.call(k.setStopAuthority(a)),setRouter:a=>this.appClient.createTransaction.call(k.setRouter(a)),claimRewards:(a={args:[]})=>this.appClient.createTransaction.call(k.claimRewards(a)),setAdminFeeShare:a=>this.appClient.createTransaction.call(k.setAdminFeeShare(a)),claimAdminFee:(a={args:[]})=>this.appClient.createTransaction.call(k.claimAdminFee(a)),pendingReward:a=>this.appClient.createTransaction.call(k.pendingReward(a)),transferOwnership:a=>this.appClient.createTransaction.call(k.transferOwnership(a))};send={optIn:{optInToApplication:async(a={args:[]})=>{let i=await this.appClient.send.optIn(k.optIn.optInToApplication(a));return{...i,return:i.return}},deposit:async a=>{let i=await this.appClient.send.optIn(k.optIn.deposit(a));return{...i,return:i.return}}},closeOut:{closeOutOfApplication:async(a={args:[void 0]})=>{let i=await this.appClient.send.closeOut(k.closeOut.closeOutOfApplication(a));return{...i,return:i.return}}},clearState:a=>this.appClient.send.bare.clearState(a),optInAsset:async(a={args:[]})=>{let i=await this.appClient.send.call(k.optInAsset(a));return{...i,return:i.return}},deposit:async a=>{let i=await this.appClient.send.call(k.deposit(a));return{...i,return:i.return}},withdraw:async a=>{let i=await this.appClient.send.call(k.withdraw(a));return{...i,return:i.return}},swapToVUsd:async a=>{let i=await this.appClient.send.call(k.swapToVUsd(a));return{...i,return:i.return}},swapFromVUsd:async a=>{let i=await this.appClient.send.call(k.swapFromVUsd(a));return{...i,return:i.return}},setFeeShare:async a=>{let i=await this.appClient.send.call(k.setFeeShare(a));return{...i,return:i.return}},adjustTotalLpAmount:async(a={args:[]})=>{let i=await this.appClient.send.call(k.adjustTotalLpAmount(a));return{...i,return:i.return}},setBalanceRatioMinBp:async a=>{let i=await this.appClient.send.call(k.setBalanceRatioMinBp(a));return{...i,return:i.return}},stopDeposit:async(a={args:[]})=>{let i=await this.appClient.send.call(k.stopDeposit(a));return{...i,return:i.return}},startDeposit:async(a={args:[]})=>{let i=await this.appClient.send.call(k.startDeposit(a));return{...i,return:i.return}},stopWithdraw:async(a={args:[]})=>{let i=await this.appClient.send.call(k.stopWithdraw(a));return{...i,return:i.return}},startWithdraw:async(a={args:[]})=>{let i=await this.appClient.send.call(k.startWithdraw(a));return{...i,return:i.return}},setStopAuthority:async a=>{let i=await this.appClient.send.call(k.setStopAuthority(a));return{...i,return:i.return}},setRouter:async a=>{let i=await this.appClient.send.call(k.setRouter(a));return{...i,return:i.return}},claimRewards:async(a={args:[]})=>{let i=await this.appClient.send.call(k.claimRewards(a));return{...i,return:i.return}},setAdminFeeShare:async a=>{let i=await this.appClient.send.call(k.setAdminFeeShare(a));return{...i,return:i.return}},claimAdminFee:async(a={args:[]})=>{let i=await this.appClient.send.call(k.claimAdminFee(a));return{...i,return:i.return}},pendingReward:async a=>{let i=await this.appClient.send.call(k.pendingReward(a));return{...i,return:i.return}},transferOwnership:async a=>{let i=await this.appClient.send.call(k.transferOwnership(a));return{...i,return:i.return}}};clone(a){return new o(this.appClient.clone(a))}async pendingReward(a){return(await this.appClient.send.call(k.pendingReward(a))).return}state={global:{getAll:async()=>{let a=await this.appClient.state.global.getAll();return{feeShareBp:a.feeShareBP,router:a.router,tokenBalance:a.tokenBalance,vUsdBalance:a.vUsdBalance,balanceRatioMinBp:a.balanceRatioMinBP,reserves:a.reserves,a:a.a,d:a.d,tokenAmountReduce:a.tokenAmountReduce,tokenAmountIncrease:a.tokenAmountIncrease,stopAuthority:a.stopAuthority,canDeposit:a.canDeposit,canWithdraw:a.canWithdraw,asset:a.asset,adminFeeShareBp:a.adminFeeShareBP,totalSupply:a.totalSupply,accRewardPerShareP:new si(a.accRewardPerShareP),adminFeeAmount:a.adminFeeAmount,owner:a.owner}},feeShareBp:async()=>await this.appClient.state.global.getValue("feeShareBP"),router:async()=>await this.appClient.state.global.getValue("router"),tokenBalance:async()=>await this.appClient.state.global.getValue("tokenBalance"),vUsdBalance:async()=>await this.appClient.state.global.getValue("vUsdBalance"),balanceRatioMinBp:async()=>await this.appClient.state.global.getValue("balanceRatioMinBP"),reserves:async()=>await this.appClient.state.global.getValue("reserves"),a:async()=>await this.appClient.state.global.getValue("a"),d:async()=>await this.appClient.state.global.getValue("d"),tokenAmountReduce:async()=>await this.appClient.state.global.getValue("tokenAmountReduce"),tokenAmountIncrease:async()=>await this.appClient.state.global.getValue("tokenAmountIncrease"),stopAuthority:async()=>await this.appClient.state.global.getValue("stopAuthority"),canDeposit:async()=>await this.appClient.state.global.getValue("canDeposit"),canWithdraw:async()=>await this.appClient.state.global.getValue("canWithdraw"),asset:async()=>await this.appClient.state.global.getValue("asset"),adminFeeShareBp:async()=>await this.appClient.state.global.getValue("adminFeeShareBP"),totalSupply:async()=>await this.appClient.state.global.getValue("totalSupply"),accRewardPerShareP:async()=>new si(await this.appClient.state.global.getValue("accRewardPerShareP")),adminFeeAmount:async()=>await this.appClient.state.global.getValue("adminFeeAmount"),owner:async()=>await this.appClient.state.global.getValue("owner")},local:a=>{let i=typeof a=="string"?a:zA(a.publicKey);return{getAll:async()=>{let r=await this.appClient.state.local(i).getAll();return{balance:r.balance,userRewardDebt:r.userRewardDebt}},balance:async()=>await this.appClient.state.local(i).getValue("balance"),userRewardDebt:async()=>await this.appClient.state.local(i).getValue("userRewardDebt")}}};newGroup(){let a=this,i=this.algorand.newGroup(),r=Promise.resolve(),s=[];return{optInAsset(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.optInAsset(d))),s.push(void 0),this},deposit(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.deposit(d))),s.push(void 0),this},withdraw(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.withdraw(d))),s.push(void 0),this},swapToVUsd(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.swapToVUsd(d))),s.push(A=>a.decodeReturnValue("swapToVUsd(address,uint64,bool)uint64",A)),this},swapFromVUsd(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.swapFromVUsd(d))),s.push(A=>a.decodeReturnValue("swapFromVUsd(address,uint64,uint64,bool)uint64",A)),this},setFeeShare(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.setFeeShare(d))),s.push(void 0),this},adjustTotalLpAmount(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.adjustTotalLpAmount(d))),s.push(void 0),this},setBalanceRatioMinBp(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.setBalanceRatioMinBp(d))),s.push(void 0),this},stopDeposit(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.stopDeposit(d))),s.push(void 0),this},startDeposit(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.startDeposit(d))),s.push(void 0),this},stopWithdraw(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.stopWithdraw(d))),s.push(void 0),this},startWithdraw(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.startWithdraw(d))),s.push(void 0),this},setStopAuthority(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.setStopAuthority(d))),s.push(void 0),this},setRouter(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.setRouter(d))),s.push(void 0),this},claimRewards(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.claimRewards(d))),s.push(void 0),this},setAdminFeeShare(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.setAdminFeeShare(d))),s.push(void 0),this},claimAdminFee(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.claimAdminFee(d))),s.push(void 0),this},pendingReward(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.pendingReward(d))),s.push(A=>a.decodeReturnValue("pendingReward(address)uint64",A)),this},transferOwnership(d){return r=r.then(async()=>i.addAppCallMethodCall(await a.params.transferOwnership(d))),s.push(void 0),this},get optIn(){return{optInToApplication:d=>(r=r.then(async()=>i.addAppCallMethodCall(await a.params.optIn.optInToApplication(d))),s.push(void 0),this),deposit:d=>(r=r.then(async()=>i.addAppCallMethodCall(await a.params.optIn.deposit(d))),s.push(void 0),this)}},get closeOut(){return{closeOutOfApplication:d=>(r=r.then(async()=>i.addAppCallMethodCall(await a.params.closeOut.closeOutOfApplication(d))),s.push(void 0),this)}},clearState(d){return r=r.then(()=>i.addAppCall(a.params.clearState(d))),this},addTransaction(d,A){return r=r.then(()=>i.addTransaction(d,A)),this},async composer(){return await r,i},async simulate(d){await r;let A=await(d?i.simulate(d):i.simulate());return{...A,returns:A.returns?.map((l,u)=>s[u]!==void 0?s[u](l):l.returnValue)}},async send(d){await r;let A=await i.send(d);return{...A,returns:A.returns?.map((l,u)=>s[u]!==void 0?s[u](l):l.returnValue)}}}}};var we=class{lpAmount;rewardDebt;constructor(a){this.lpAmount=a.lpAmount,this.rewardDebt=a.rewardDebt}get userLiquidity(){return H(this.lpAmount,3).toFixed()}earned(a,i){let r=_r(this.lpAmount,this.rewardDebt,a.accRewardPerShareP,a.p);return i?H(r,i).toFixed():r}};var Le=class{};var Un=class extends Le{constructor(i,r){super();this.algorand=i;this.api=r;i.setDefaultValidityWindow(100)}algorand;api;chainType="ALG";P=48;async buildRawTransactionClaimRewards(i){let r=i.accountAddress,s=BigInt(i.token.tokenAddress),d=BigInt(i.token.poolAddress),A=this.getPool(d),l=this.algorand.newGroup();l.addAppCallMethodCall(await A.params.claimRewards({args:[],sender:r,extraFee:Gt(1),assetReferences:[s]}));let{transactions:u}=await l.buildTransactions();return u=Tr(u),Vt(...u)}async buildRawTransactionDeposit(i){let r=i.accountAddress,s=BigInt(i.amount),d=BigInt(i.token.tokenAddress),A=BigInt(i.token.poolAddress),l=this.getPool(A),b=await Fa(A,r,this.algorand)?rs.NoOpOC:rs.OptInOC,y=this.algorand.newGroup(),C=await this.algorand.createTransaction.assetTransfer({assetId:d,amount:s,sender:r,receiver:l.appAddress});y.addAppCallMethodCall(await l.params.deposit({args:{assetTransferRef:C},sender:r,onComplete:b,extraFee:Gt(5)}));let{transactions:f}=await y.buildTransactions();return f=Tr(f),Vt(...f)}async buildRawTransactionWithdraw(i){let r=i.accountAddress,s=BigInt(i.amount),d=BigInt(i.token.tokenAddress),A=BigInt(i.token.poolAddress),l=this.getPool(A),u=this.algorand.newGroup();u.addAppCallMethodCall(await l.params.withdraw({args:{amountLp:s},sender:r,assetReferences:[d],extraFee:Gt(7)}));let{transactions:b}=await u.buildTransactions();return b=Tr(b),Vt(...b)}async getPoolInfoFromChain(i){let s=await this.getPool(BigInt(i.poolAddress)).state.global.getAll(),d=s.a?.toString(),A=s.d?.toString(),l=s.tokenBalance?.toString(),u=s.vUsdBalance?.toString(),b=s.totalSupply?.toString(),y=OA(s.accRewardPerShareP?.asByteArray()??Uint8Array.from([])).toString();if(d&&A&&l&&u&&b&&y){let C=Fe({tokenBalance:l,vUsdBalance:u});return{aValue:d,dValue:A,tokenBalance:l,vUsdBalance:u,totalLpAmount:b,accRewardPerShareP:y,p:this.P,imbalance:C}}throw new w("Unable to pool info from chain")}async getUserBalanceInfo(i,r){let s=BigInt(r.poolAddress),d=this.getPool(s);try{let{balance:A,userRewardDebt:l}=await d.state.local(i).getAll();if(A!==void 0&&l!==void 0)return new we({lpAmount:A.toString(),rewardDebt:l.toString()})}catch{let u=(await this.algorand.account.getInformation(i)).appsLocalState;if(u&&!u.find(({id:y})=>y===s))return new we({lpAmount:"0",rewardDebt:"0"})}throw new w("Unable to get user balance")}getPool(i){return this.algorand.client.getTypedAppClientById(di,{appId:i})}};import{Web3 as Mt}from"web3";var QA={abi:[{inputs:[{internalType:"address",name:"_router",type:"address"},{internalType:"uint256",name:"_a",type:"uint256"},{internalType:"contract ERC20",name:"_token",type:"address"},{internalType:"uint16",name:"_feeShareBP",type:"uint16"},{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"},{internalType:"string",name:"lpName",type:"string"},{internalType:"string",name:"lpSymbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsClaimed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedFromVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedToVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"a",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"accRewardPerShareP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adjustTotalLpAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"adminFeeAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"balanceRatioMinBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canWithdraw",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"claimAdminFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"claimRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"d",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"feeShareBP",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"}],name:"getY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"pendingReward",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reserves",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"router",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_adminFeeShareBP",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"}],name:"setBalanceRatioMinBP",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"_feeShareBP",type:"uint16"}],name:"setFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_router",type:"address"}],name:"setRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapFromVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapToVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract ERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"userRewardDebt",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"vUsdBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountLp",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},Kn=QA;var Dn=class extends Le{constructor(i,r){super();this.web3=i;this.api=r}web3;api;chainType="EVM";P=52;async getUserBalanceInfo(i,r){let s;try{s=await va(this.getUserBalanceInfoByBatch(i,r),`Cannot get UserBalanceInfo for ${r.name} on ${r.chainSymbol}`,5e3)}catch{s=await zi(()=>this.getUserBalanceInfoPerProperty(i,r),`Cannot get UserBalanceInfo for ${r.name} on ${r.chainSymbol}`,5,2e3)}return s}async getPoolInfoFromChain(i){let r;try{r=await va(this.getPoolInfoByBatch(i),`Cannot get PoolInfo for ${i.name} on ${i.chainSymbol}`,5e3)}catch{r=await zi(()=>this.getPoolInfoPerProperty(i),`Cannot get PoolInfo for ${i.name} on ${i.chainSymbol}`,5,2e3)}return r}async getUserBalanceInfoByBatch(i,r){let s=new this.web3.eth.BatchRequest,d=this.getPoolContract(r.poolAddress),A=d.methods.userRewardDebt(i).encodeABI(),l=d.methods.balanceOf(i).encodeABI();s.add({method:"eth_call",params:[{to:r.poolAddress,data:A},"latest"]}),s.add({method:"eth_call",params:[{to:r.poolAddress,data:l},"latest"]});let[u,b]=await s.execute();if(u&&b&&!u.error&&!b.error)return new we({lpAmount:Mt.utils.toBigInt(b.result).toString(),rewardDebt:Mt.utils.toBigInt(u.result).toString()});throw new Error("Batched failed")}async getUserBalanceInfoPerProperty(i,r){let s=(await this.getPoolContract(r.poolAddress).methods.userRewardDebt(i).call()).toString(),d=(await this.getPoolContract(r.poolAddress).methods.balanceOf(i).call()).toString();return new we({lpAmount:d,rewardDebt:s})}async getPoolInfoByBatch(i){let r=new this.web3.eth.BatchRequest,s=this.getPoolContract(i.poolAddress),d=s.methods.a().encodeABI(),A=s.methods.d().encodeABI(),l=s.methods.tokenBalance().encodeABI(),u=s.methods.vUsdBalance().encodeABI(),b=s.methods.totalSupply().encodeABI(),y=s.methods.accRewardPerShareP().encodeABI();r.add({method:"eth_call",params:[{to:i.poolAddress,data:d},"latest"]}),r.add({method:"eth_call",params:[{to:i.poolAddress,data:A},"latest"]}),r.add({method:"eth_call",params:[{to:i.poolAddress,data:l},"latest"]}),r.add({method:"eth_call",params:[{to:i.poolAddress,data:u},"latest"]}),r.add({method:"eth_call",params:[{to:i.poolAddress,data:b},"latest"]}),r.add({method:"eth_call",params:[{to:i.poolAddress,data:y},"latest"]});let[C,f,v,T,F,N]=await r.execute();if(C&&f&&v&&T&&F&&N&&!C.error&&!f.error&&!v.error&&!T.error&&!F.error&&!N.error){let G=Mt.utils.toBigInt(v.result).toString(),R=Mt.utils.toBigInt(T.result).toString(),P=Fe({tokenBalance:G,vUsdBalance:R});return{aValue:Mt.utils.toBigInt(C.result).toString(),dValue:Mt.utils.toBigInt(f.result).toString(),tokenBalance:G,vUsdBalance:R,totalLpAmount:Mt.utils.toBigInt(F.result).toString(),accRewardPerShareP:Mt.utils.toBigInt(N.result).toString(),p:this.P,imbalance:P}}throw new Error("Batched failed")}async getPoolInfoPerProperty(i){let r=this.getPoolContract(i.poolAddress),s=(await r.methods.a().call()).toString(),d=(await r.methods.d().call()).toString(),A=(await r.methods.tokenBalance().call()).toString(),l=(await r.methods.vUsdBalance().call()).toString(),u=(await r.methods.totalSupply().call()).toString(),b=(await r.methods.accRewardPerShareP().call()).toString(),y=Fe({tokenBalance:A,vUsdBalance:l});return{aValue:s,dValue:d,tokenBalance:A,vUsdBalance:l,totalLpAmount:u,accRewardPerShareP:b,p:this.P,imbalance:y}}async buildRawTransactionDeposit(i){return Promise.resolve({...this.buildTxParams(i),data:this.getPoolContract(i.token.poolAddress).methods.deposit(i.amount).encodeABI()})}async buildRawTransactionWithdraw(i){return Promise.resolve({...this.buildTxParams(i),data:this.getPoolContract(i.token.poolAddress).methods.withdraw(i.amount).encodeABI()})}async buildRawTransactionClaimRewards(i){return Promise.resolve({...this.buildTxParams(i),data:this.getPoolContract(i.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(i){return{from:i.accountAddress,to:i.token.poolAddress,value:"0"}}getPoolContract(i){return new this.web3.eth.Contract(Kn.abi,i)}};var Ai=class{constructor(a,i,r,s){this.api=a;this.nodeRpcUrlsConfig=i;this.params=r;this.tokenService=s}api;nodeRpcUrlsConfig;params;tokenService;async approve(a,i){if(i){let r=a,s=i;return this.tokenService.buildRawTransactionApprove({...s,spender:s.token.poolAddress},r)}else{let r=a;return this.tokenService.buildRawTransactionApprove({...r,spender:r.token.poolAddress})}}async deposit(a,i){return $(a.amount),D("amount",a.amount,a.token.decimals),a.amount=j(a.amount,a.token.decimals).toFixed(),Cn(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionDeposit(a)}async withdraw(a,i){return $(a.amount),D("amount",a.amount,a.token.decimals),a.amount=j(a.amount,3).toFixed(),Cn(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionWithdraw(a)}async claimRewards(a,i){return Cn(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionClaimRewards(a)}};import{AnchorProvider as UA,BN as os,Program as KA,web3 as DA}from"@coral-xyz/anchor";import{createAssociatedTokenAccountInstruction as EA}from"@solana/spl-token";import{Connection as _A,PublicKey as xt}from"@solana/web3.js";var ci=class extends Le{constructor(i,r){super();this.solanaRpcUrl=i;this.api=r}solanaRpcUrl;api;chainType="SOLANA";P=48;async getUserBalanceInfo(i,r){let s=this.buildAnchorProvider(i),d=this.getBridge(r.bridgeAddress,s),A=new xt(r.poolAddress),l=await d.account.pool.fetch(A);try{let u=await qi(new xt(i),l.mint,d.programId),{lpAmount:b,rewardDebt:y}=await d.account.userDeposit.fetch(u);return new we({lpAmount:b.toString(),rewardDebt:y.toString()})}catch{return new we({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(i){let r=this.buildAnchorProvider(i.bridgeAddress),s=await this.getBridge(i.bridgeAddress,r).account.pool.fetch(i.poolAddress),d=s.vUsdBalance.toString(),A=s.tokenBalance.toString(),l=Fe({tokenBalance:A,vUsdBalance:d});return{dValue:s.d.toString(),aValue:s.a.toString(),totalLpAmount:s.totalLpAmount.toString(),vUsdBalance:d,tokenBalance:A,accRewardPerShareP:s.accRewardPerShareP.toString(),p:this.P,imbalance:l}}async buildRawTransactionDeposit(i){let{bridge:r,accounts:s,preInstructions:d}=await this.prepareDataForTransaction(i),A=await r.methods.deposit(new os(i.amount)).accounts(s).preInstructions(d).transaction();return A.recentBlockhash=(await this.buildAnchorProvider(i.accountAddress).connection.getLatestBlockhash()).blockhash,A.feePayer=new xt(i.accountAddress),await gn(A,i.txFeeParams,this.solanaRpcUrl),A}async buildRawTransactionWithdraw(i){let{bridge:r,accounts:s,preInstructions:d}=await this.prepareDataForTransaction(i),A=await r.methods.withdraw(new os(i.amount)).accounts(s).preInstructions(d).transaction();return A.recentBlockhash=(await this.buildAnchorProvider(i.accountAddress).connection.getLatestBlockhash()).blockhash,A.feePayer=new xt(i.accountAddress),await gn(A,i.txFeeParams,this.solanaRpcUrl),A}async buildRawTransactionClaimRewards(i){let{bridge:r,accounts:s,preInstructions:d}=await this.prepareDataForTransaction(i),A=await r.methods.claimRewards().accounts(s).preInstructions(d).transaction();return A.recentBlockhash=(await this.buildAnchorProvider(i.accountAddress).connection.getLatestBlockhash()).blockhash,A.feePayer=new xt(i.accountAddress),await gn(A,i.txFeeParams,this.solanaRpcUrl),A}async prepareDataForTransaction(i){let r=this.buildAnchorProvider(i.accountAddress),s=this.getBridge(i.token.bridgeAddress,r),{accounts:d,preInstructions:A}=await this._getLPTransactionData(s,i.token.poolAddress,i.accountAddress,r);return{bridge:s,accounts:d,preInstructions:A}}getBridge(i,r){return new KA({...Pt,address:i},r)}buildAnchorProvider(i){let r=new _A(this.solanaRpcUrl,"confirmed"),s=new xt(i);return new UA(r,{publicKey:s},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(i,r,s,d){let A=new xt(s),l=await nt(i.programId),u=await Xt(i.programId),b=new xt(r),C=(await i.account.pool.fetch(b)).mint,f=Qe(A,C),v=await Bt(C,i.programId),T=await qi(A,C,i.programId),F=[DA.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await ln(f,d)}catch{let R=EA(A,f,A,C);F.push(R)}try{await i.account.userDeposit.fetch(T)}catch{let R=await i.methods.initDepositAccount().accountsPartial({mint:C,user:A,userDeposit:T}).instruction();F.push(R)}return{accounts:{mint:C,user:A,config:l,pool:b,bridgeAuthority:u,userDeposit:T,userToken:f,bridgeToken:v},preInstructions:F}}};import{contract as BX}from"@stellar/stellar-sdk";import{contract as t}from"@stellar/stellar-sdk";var $A=t.Spec,qA=t.Client;var gi=class extends qA{constructor(i){super(new $A(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAQAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAQAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),i);this.options=i}options;fromJSON={initialize:this.txFromJSON,deposit:this.txFromJSON,withdraw:this.txFromJSON,swap_to_v_usd:this.txFromJSON,swap_from_v_usd:this.txFromJSON,claim_rewards:this.txFromJSON,set_fee_share:this.txFromJSON,adjust_total_lp_amount:this.txFromJSON,set_balance_ratio_min_bp:this.txFromJSON,stop_deposit:this.txFromJSON,start_deposit:this.txFromJSON,stop_withdraw:this.txFromJSON,start_withdraw:this.txFromJSON,set_stop_authority:this.txFromJSON,set_bridge:this.txFromJSON,set_admin:this.txFromJSON,set_admin_fee_share:this.txFromJSON,claim_admin_fee:this.txFromJSON,pending_reward:this.txFromJSON,get_pool:this.txFromJSON,get_admin:this.txFromJSON,get_stop_authority:this.txFromJSON,get_bridge:this.txFromJSON,get_user_deposit:this.txFromJSON,upgrade:this.txFromJSON}};var li=class extends Le{constructor(i,r,s){super();this.nodeRpcUrlsConfig=i;this.params=r;this.api=s}nodeRpcUrlsConfig;params;api;chainType="SRB";P=48;async getUserBalanceInfo(i,r){let d=await this.getContract(r.poolAddress).get_user_deposit({user:i});if(un(d))throw new w;let A=pn(d);if(!A)throw new w;let l=A.unwrap();return new we({lpAmount:l.lp_amount.toString(),rewardDebt:l.reward_debt.toString()})}async getPoolInfoFromChain(i){let s=await this.getContract(i.poolAddress).get_pool();if(un(s))throw new w;let d=pn(s);if(!d)throw new w;let A=d.unwrap();return{aValue:A.a.toString(),accRewardPerShareP:A.acc_reward_per_share_p.toString(),dValue:A.d.toString(),tokenBalance:A.token_balance.toString(),p:this.P,totalLpAmount:A.total_lp_amount.toString(),vUsdBalance:A.v_usd_balance.toString(),imbalance:Fe({tokenBalance:A.token_balance.toString(),vUsdBalance:A.v_usd_balance.toString()})}}async buildRawTransactionDeposit(i){let r=this.getContract(i.token.poolAddress,i.accountAddress),s=await Yt(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB"));return(await r.deposit({sender:i.accountAddress,amount:BigInt(i.amount)},{fee:s})).toXDR()}async buildRawTransactionWithdraw(i){let r=this.getContract(i.token.poolAddress,i.accountAddress),s=await Yt(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB"));return(await r.withdraw({sender:i.accountAddress,amount_lp:BigInt(i.amount)},{fee:s})).toXDR()}async buildRawTransactionClaimRewards(i){let r=this.getContract(i.token.poolAddress,i.accountAddress),s=await Yt(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB"));return(await r.claim_rewards({sender:i.accountAddress},{fee:s})).toXDR()}getContract(i,r){let s={publicKey:r,contractId:i,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new gi(s)}};import{ClarigenClient as ec,contractFactory as En}from"@clarigen/core";import{createNetwork as tc}from"@stacks/network";import{makeRandomPrivKey as Br,makeUnsignedContractCall as Yr,PostConditionMode as Wr,privateKeyToPublic as wr}from"@stacks/transactions";import{Big as nc}from"big.js";var pi=class extends Le{constructor(i,r,s){super();this.nodeRpcUrl=i;this.params=r;this.api=s;let d=tc({network:this.params.stxIsTestnet?"testnet":"mainnet",client:{baseUrl:this.nodeRpcUrl},apiKey:this.params.stxHeroApiKey});this.client=new ec(d,this.params.stxHeroApiKey)}nodeRpcUrl;params;api;chainType="STX";P=48;A="20";client;async getUserBalanceInfo(i,r){let s=En(at.pool,r.poolAddress),d=await this.client.ro(s.getLpBalance({user:i})),A=await this.client.ro(s.getUserRewardDebt({user:i}));return new we({lpAmount:d.toString(),rewardDebt:A.toString()})}async getPoolInfoFromChain(i){let r=En(at.pool,i.poolAddress),[s,d,A,l,u]=await Promise.all([this.client.ro(r.getD()),this.client.ro(r.getTokenBalance()),this.client.ro(r.getVusdBalance()),this.client.ro(r.getLpTotalSupply()),this.client.ro(r.getAccRewardPerShareP())]),b=s.toString(),y=d.toString(),C=A.toString(),f=l.toString(),v=u.toString();if(b&&y&&C&&f&&v){let T=Fe({tokenBalance:y,vUsdBalance:C});return{aValue:this.A,dValue:b,tokenBalance:y,vUsdBalance:C,totalLpAmount:f,accRewardPerShareP:v,p:this.P,imbalance:T}}throw new w("Unable to pool info from chain")}async buildRawTransactionDeposit(i){let r=En(at.pool,i.token.poolAddress),{contractAddress:s,contractName:d,functionName:A,functionArgs:l}=r.deposit({amount:BigInt(i.amount),ftRef:i.token.tokenAddress}),u=Br(),b=wr(u),y=Ct(i.amount,"lte",i.accountAddress,i.token.tokenAddress,Wt(i.token)),C=Ct(0,"gte",i.token.poolAddress,i.token.tokenAddress,Wt(i.token)),f={contractAddress:s,contractName:d,functionName:A,functionArgs:l,publicKey:b,validateWithAbi:!0,network:this.client.network,postConditions:[y,C],postConditionMode:Wr.Deny};return(await Yr(f)).serialize()}async buildRawTransactionWithdraw(i){let r=En(at.pool,i.token.poolAddress),{contractAddress:s,contractName:d,functionName:A,functionArgs:l}=r.withdraw({amountLp:BigInt(i.amount),ftRef:i.token.tokenAddress}),u=Br(),b=wr(u),y=Ct(ze(i.amount,i.token.decimals).toFixed(0,nc.roundDown),"gte",i.token.poolAddress,i.token.tokenAddress,Wt(i.token)),C={contractAddress:s,contractName:d,functionName:A,functionArgs:l,publicKey:b,validateWithAbi:!0,network:this.client.network,postConditions:[y],postConditionMode:Wr.Deny};return(await Yr(C)).serialize()}async buildRawTransactionClaimRewards(i){let r=En(at.pool,i.token.poolAddress),{contractAddress:s,contractName:d,functionName:A,functionArgs:l}=r.claimRewards({ftRef:i.token.tokenAddress}),u=Br(),b=wr(u),y=Ct(0,"gte",i.token.poolAddress,i.token.tokenAddress,Wt(i.token)),C={contractAddress:s,contractName:d,functionName:A,functionArgs:l,publicKey:b,validateWithAbi:!0,network:this.client.network,postConditions:[y],postConditionMode:Wr.Deny};return(await Yr(C)).serialize()}};import{SuiJsonRpcClient as Ac}from"@mysten/sui/jsonRpc";import{Transaction as yi}from"@mysten/sui/transactions";import{bcs as ea}from"@mysten/sui/bcs";import{fromBase64 as oc}from"@mysten/sui/utils";import{bcs as ss}from"@mysten/sui/bcs";import{fromBase64 as ac}from"@mysten/sui/utils";function _n(o){return o=J(o),o.startsWith("0x2::balance::Balance<")}var je=class o{__StructClass=!0;static $typeName="0x2::balance::Balance";static $numTypeParams=1;static $isPhantom=[!0];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;value;constructor(a,i){this.$fullTypeName=ie(o.$typeName,...a),this.$typeArgs=a,this.value=i.value}static reified(a){let i=o.bcs;return{get typeName(){return o.$typeName},get fullTypeName(){return ie(o.$typeName,z(a))},get typeArgs(){return[z(a)]},isPhantom:o.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>o.fromFields(a,r),fromFieldsWithTypes:r=>o.fromFieldsWithTypes(a,r),fromBcs:r=>o.fromFields(a,i.parse(r)),bcs:i,fromJSONField:r=>o.fromJSONField(a,r),fromJSON:r=>o.fromJSON(a,r),fromCoreObject:r=>o.fromCoreObject(a,r),fromSuiParsedData:r=>o.fromSuiParsedData(a,r),fromSuiObjectData:r=>o.fromSuiObjectData(a,r),fetch:async(r,s)=>o.fetch(r,a,s),new:r=>new o([z(a)],r),kind:"StructClassReified"}}static get r(){return o.reified}static phantom(a){return fe(o.reified(a))}static get p(){return o.phantom}static instantiateBcs(){return ss.struct("Balance",{value:ss.u64()})}static cachedBcs=null;static get bcs(){return o.cachedBcs||(o.cachedBcs=o.instantiateBcs()),o.cachedBcs}static fromFields(a,i){return o.reified(a).new({value:te("u64",i.value)})}static fromFieldsWithTypes(a,i){if(!_n(i.type))throw new Error("not a Balance type");return It(i,[a]),o.reified(a).new({value:q("u64",i.fields.value)})}static fromBcs(a,i){return o.fromFields(a,o.bcs.parse(i))}toJSONField(){return{value:this.value.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,i){return o.reified(a).new({value:ee("u64",i.value)})}static fromJSON(a,i){if(i.$typeName!==o.$typeName)throw new Error(`not a Balance json object: expected '${o.$typeName}' but got '${i.$typeName}'`);return At(ie(o.$typeName,z(a)),i.$typeArgs,[a]),o.fromJSONField(a,i)}static fromCoreObject(a,i){if(!_n(i.type))throw new Error(`object at ${i.objectId} is not a Balance object`);let r=ue(i.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let s=0;s<1;s++){let d=J(r[s]),A=J(z([a][s]));if(d!==A)throw new Error(`type argument mismatch at position ${s}: expected '${A}' but got '${d}'`)}return o.fromBcs(a,i.content)}static fromSuiParsedData(a,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!_n(i.type))throw new Error(`object at ${i.fields.id} is not a Balance object`);return o.fromFieldsWithTypes(a,i)}static fromSuiObjectData(a,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!_n(i.bcs.type))throw new Error("object at is not a Balance object");let r=ue(i.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let s=0;s<1;s++){let d=J(r[s]),A=J(z([a][s]));if(d!==A)throw new Error(`type argument mismatch at position ${s}: expected '${A}' but got '${d}'`)}return o.fromBcs(a,ac(i.bcs.bcsBytes))}if(i.content)return o.fromSuiParsedData(a,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,i,r){let{object:s}=await a.core.getObject({objectId:r,include:{content:!0}});if(!_n(s.type))throw new Error(`object at id ${r} is not a Balance object`);let d=ue(s.type).typeArgs;if(d.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${d.length}'`);for(let A=0;A<1;A++){let l=J(d[A]),u=J(z([i][A]));if(l!==u)throw new Error(`type argument mismatch at position ${A}: expected '${u}' but got '${l}'`)}return o.fromBcs(i,s.content)}};import{bcs as ui}from"@mysten/sui/bcs";import{fromBase64 as ic}from"@mysten/sui/utils";function $n(o){return o=J(o),o.startsWith(`${et("bridge","pool_rewards::PoolRewards")}::pool_rewards::PoolRewards<`)}var en=class o{__StructClass=!0;static get $typeName(){return`${et("bridge","pool_rewards::PoolRewards")}::pool_rewards::PoolRewards`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;accRewardPerShareP;adminFeeShareBp;adminFee;rewards;lpSupply;constructor(a,i){this.$fullTypeName=ie(o.$typeName,...a),this.$typeArgs=a,this.accRewardPerShareP=i.accRewardPerShareP,this.adminFeeShareBp=i.adminFeeShareBp,this.adminFee=i.adminFee,this.rewards=i.rewards,this.lpSupply=i.lpSupply}static reified(a){let i=o.bcs;return{get typeName(){return o.$typeName},get fullTypeName(){return ie(o.$typeName,z(a))},get typeArgs(){return[z(a)]},isPhantom:o.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>o.fromFields(a,r),fromFieldsWithTypes:r=>o.fromFieldsWithTypes(a,r),fromBcs:r=>o.fromFields(a,i.parse(r)),bcs:i,fromJSONField:r=>o.fromJSONField(a,r),fromJSON:r=>o.fromJSON(a,r),fromCoreObject:r=>o.fromCoreObject(a,r),fromSuiParsedData:r=>o.fromSuiParsedData(a,r),fromSuiObjectData:r=>o.fromSuiObjectData(a,r),fetch:async(r,s)=>o.fetch(r,a,s),new:r=>new o([z(a)],r),kind:"StructClassReified"}}static get r(){return o.reified}static phantom(a){return fe(o.reified(a))}static get p(){return o.phantom}static instantiateBcs(){return ui.struct("PoolRewards",{acc_reward_per_share_p:ui.u128(),admin_fee_share_bp:ui.u64(),admin_fee:je.bcs,rewards:je.bcs,lp_supply:ui.u64()})}static cachedBcs=null;static get bcs(){return o.cachedBcs||(o.cachedBcs=o.instantiateBcs()),o.cachedBcs}static fromFields(a,i){return o.reified(a).new({accRewardPerShareP:te("u128",i.acc_reward_per_share_p),adminFeeShareBp:te("u64",i.admin_fee_share_bp),adminFee:te(je.reified(a),i.admin_fee),rewards:te(je.reified(a),i.rewards),lpSupply:te("u64",i.lp_supply)})}static fromFieldsWithTypes(a,i){if(!$n(i.type))throw new Error("not a PoolRewards type");return It(i,[a]),o.reified(a).new({accRewardPerShareP:q("u128",i.fields.acc_reward_per_share_p),adminFeeShareBp:q("u64",i.fields.admin_fee_share_bp),adminFee:q(je.reified(a),i.fields.admin_fee),rewards:q(je.reified(a),i.fields.rewards),lpSupply:q("u64",i.fields.lp_supply)})}static fromBcs(a,i){return o.fromFields(a,o.bcs.parse(i))}toJSONField(){return{accRewardPerShareP:this.accRewardPerShareP.toString(),adminFeeShareBp:this.adminFeeShareBp.toString(),adminFee:this.adminFee.toJSONField(),rewards:this.rewards.toJSONField(),lpSupply:this.lpSupply.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,i){return o.reified(a).new({accRewardPerShareP:ee("u128",i.accRewardPerShareP),adminFeeShareBp:ee("u64",i.adminFeeShareBp),adminFee:ee(je.reified(a),i.adminFee),rewards:ee(je.reified(a),i.rewards),lpSupply:ee("u64",i.lpSupply)})}static fromJSON(a,i){if(i.$typeName!==o.$typeName)throw new Error(`not a PoolRewards json object: expected '${o.$typeName}' but got '${i.$typeName}'`);return At(ie(o.$typeName,z(a)),i.$typeArgs,[a]),o.fromJSONField(a,i)}static fromCoreObject(a,i){if(!$n(i.type))throw new Error(`object at ${i.objectId} is not a PoolRewards object`);let r=ue(i.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let s=0;s<1;s++){let d=J(r[s]),A=J(z([a][s]));if(d!==A)throw new Error(`type argument mismatch at position ${s}: expected '${A}' but got '${d}'`)}return o.fromBcs(a,i.content)}static fromSuiParsedData(a,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!$n(i.type))throw new Error(`object at ${i.fields.id} is not a PoolRewards object`);return o.fromFieldsWithTypes(a,i)}static fromSuiObjectData(a,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!$n(i.bcs.type))throw new Error("object at is not a PoolRewards object");let r=ue(i.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let s=0;s<1;s++){let d=J(r[s]),A=J(z([a][s]));if(d!==A)throw new Error(`type argument mismatch at position ${s}: expected '${A}' but got '${d}'`)}return o.fromBcs(a,ic(i.bcs.bcsBytes))}if(i.content)return o.fromSuiParsedData(a,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,i,r){let{object:s}=await a.core.getObject({objectId:r,include:{content:!0}});if(!$n(s.type))throw new Error(`object at id ${r} is not a PoolRewards object`);let d=ue(s.type).typeArgs;if(d.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${d.length}'`);for(let A=0;A<1;A++){let l=J(d[A]),u=J(z([i][A]));if(l!==u)throw new Error(`type argument mismatch at position ${A}: expected '${u}' but got '${l}'`)}return o.fromBcs(i,s.content)}};import{bcs as In}from"@mysten/sui/bcs";import{fromBase64 as rc}from"@mysten/sui/utils";function qn(o){return o=J(o),o.startsWith(`${et("bridge","pool_state::PoolState")}::pool_state::PoolState<`)}var tn=class o{__StructClass=!0;static get $typeName(){return`${et("bridge","pool_state::PoolState")}::pool_state::PoolState`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;tokenBalance;vusdBalance;d;a;balanceRatioMinBp;constructor(a,i){this.$fullTypeName=ie(o.$typeName,...a),this.$typeArgs=a,this.tokenBalance=i.tokenBalance,this.vusdBalance=i.vusdBalance,this.d=i.d,this.a=i.a,this.balanceRatioMinBp=i.balanceRatioMinBp}static reified(a){let i=o.bcs;return{get typeName(){return o.$typeName},get fullTypeName(){return ie(o.$typeName,z(a))},get typeArgs(){return[z(a)]},isPhantom:o.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>o.fromFields(a,r),fromFieldsWithTypes:r=>o.fromFieldsWithTypes(a,r),fromBcs:r=>o.fromFields(a,i.parse(r)),bcs:i,fromJSONField:r=>o.fromJSONField(a,r),fromJSON:r=>o.fromJSON(a,r),fromCoreObject:r=>o.fromCoreObject(a,r),fromSuiParsedData:r=>o.fromSuiParsedData(a,r),fromSuiObjectData:r=>o.fromSuiObjectData(a,r),fetch:async(r,s)=>o.fetch(r,a,s),new:r=>new o([z(a)],r),kind:"StructClassReified"}}static get r(){return o.reified}static phantom(a){return fe(o.reified(a))}static get p(){return o.phantom}static instantiateBcs(){return In.struct("PoolState",{token_balance:In.u64(),vusd_balance:In.u64(),d:In.u64(),a:In.u64(),balance_ratio_min_bp:In.u64()})}static cachedBcs=null;static get bcs(){return o.cachedBcs||(o.cachedBcs=o.instantiateBcs()),o.cachedBcs}static fromFields(a,i){return o.reified(a).new({tokenBalance:te("u64",i.token_balance),vusdBalance:te("u64",i.vusd_balance),d:te("u64",i.d),a:te("u64",i.a),balanceRatioMinBp:te("u64",i.balance_ratio_min_bp)})}static fromFieldsWithTypes(a,i){if(!qn(i.type))throw new Error("not a PoolState type");return It(i,[a]),o.reified(a).new({tokenBalance:q("u64",i.fields.token_balance),vusdBalance:q("u64",i.fields.vusd_balance),d:q("u64",i.fields.d),a:q("u64",i.fields.a),balanceRatioMinBp:q("u64",i.fields.balance_ratio_min_bp)})}static fromBcs(a,i){return o.fromFields(a,o.bcs.parse(i))}toJSONField(){return{tokenBalance:this.tokenBalance.toString(),vusdBalance:this.vusdBalance.toString(),d:this.d.toString(),a:this.a.toString(),balanceRatioMinBp:this.balanceRatioMinBp.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,i){return o.reified(a).new({tokenBalance:ee("u64",i.tokenBalance),vusdBalance:ee("u64",i.vusdBalance),d:ee("u64",i.d),a:ee("u64",i.a),balanceRatioMinBp:ee("u64",i.balanceRatioMinBp)})}static fromJSON(a,i){if(i.$typeName!==o.$typeName)throw new Error(`not a PoolState json object: expected '${o.$typeName}' but got '${i.$typeName}'`);return At(ie(o.$typeName,z(a)),i.$typeArgs,[a]),o.fromJSONField(a,i)}static fromCoreObject(a,i){if(!qn(i.type))throw new Error(`object at ${i.objectId} is not a PoolState object`);let r=ue(i.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let s=0;s<1;s++){let d=J(r[s]),A=J(z([a][s]));if(d!==A)throw new Error(`type argument mismatch at position ${s}: expected '${A}' but got '${d}'`)}return o.fromBcs(a,i.content)}static fromSuiParsedData(a,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!qn(i.type))throw new Error(`object at ${i.fields.id} is not a PoolState object`);return o.fromFieldsWithTypes(a,i)}static fromSuiObjectData(a,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!qn(i.bcs.type))throw new Error("object at is not a PoolState object");let r=ue(i.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let s=0;s<1;s++){let d=J(r[s]),A=J(z([a][s]));if(d!==A)throw new Error(`type argument mismatch at position ${s}: expected '${A}' but got '${d}'`)}return o.fromBcs(a,rc(i.bcs.bcsBytes))}if(i.content)return o.fromSuiParsedData(a,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,i,r){let{object:s}=await a.core.getObject({objectId:r,include:{content:!0}});if(!qn(s.type))throw new Error(`object at id ${r} is not a PoolState object`);let d=ue(s.type).typeArgs;if(d.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${d.length}'`);for(let A=0;A<1;A++){let l=J(d[A]),u=J(z([i][A]));if(l!==u)throw new Error(`type argument mismatch at position ${A}: expected '${u}' but got '${l}'`)}return o.fromBcs(i,s.content)}};function ta(o){return o=J(o),o.startsWith(`${et("bridge","pool::Pool")}::pool::Pool<`)}var mi=class o{__StructClass=!0;static get $typeName(){return`${et("bridge","pool::Pool")}::pool::Pool`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;id;state;rewards;feeShareBp;canDeposit;canWithdraw;decimals;balance;constructor(a,i){this.$fullTypeName=ie(o.$typeName,...a),this.$typeArgs=a,this.id=i.id,this.state=i.state,this.rewards=i.rewards,this.feeShareBp=i.feeShareBp,this.canDeposit=i.canDeposit,this.canWithdraw=i.canWithdraw,this.decimals=i.decimals,this.balance=i.balance}static reified(a){let i=o.bcs;return{get typeName(){return o.$typeName},get fullTypeName(){return ie(o.$typeName,z(a))},get typeArgs(){return[z(a)]},isPhantom:o.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>o.fromFields(a,r),fromFieldsWithTypes:r=>o.fromFieldsWithTypes(a,r),fromBcs:r=>o.fromFields(a,i.parse(r)),bcs:i,fromJSONField:r=>o.fromJSONField(a,r),fromJSON:r=>o.fromJSON(a,r),fromCoreObject:r=>o.fromCoreObject(a,r),fromSuiParsedData:r=>o.fromSuiParsedData(a,r),fromSuiObjectData:r=>o.fromSuiObjectData(a,r),fetch:async(r,s)=>o.fetch(r,a,s),new:r=>new o([z(a)],r),kind:"StructClassReified"}}static get r(){return o.reified}static phantom(a){return fe(o.reified(a))}static get p(){return o.phantom}static instantiateBcs(){return ea.struct("Pool",{id:rt.bcs,state:tn.bcs,rewards:en.bcs,fee_share_bp:ea.u64(),can_deposit:ea.bool(),can_withdraw:ea.bool(),decimals:ea.u8(),balance:je.bcs})}static cachedBcs=null;static get bcs(){return o.cachedBcs||(o.cachedBcs=o.instantiateBcs()),o.cachedBcs}static fromFields(a,i){return o.reified(a).new({id:te(rt.reified(),i.id),state:te(tn.reified(a),i.state),rewards:te(en.reified(a),i.rewards),feeShareBp:te("u64",i.fee_share_bp),canDeposit:te("bool",i.can_deposit),canWithdraw:te("bool",i.can_withdraw),decimals:te("u8",i.decimals),balance:te(je.reified(a),i.balance)})}static fromFieldsWithTypes(a,i){if(!ta(i.type))throw new Error("not a Pool type");return It(i,[a]),o.reified(a).new({id:q(rt.reified(),i.fields.id),state:q(tn.reified(a),i.fields.state),rewards:q(en.reified(a),i.fields.rewards),feeShareBp:q("u64",i.fields.fee_share_bp),canDeposit:q("bool",i.fields.can_deposit),canWithdraw:q("bool",i.fields.can_withdraw),decimals:q("u8",i.fields.decimals),balance:q(je.reified(a),i.fields.balance)})}static fromBcs(a,i){return o.fromFields(a,o.bcs.parse(i))}toJSONField(){return{id:this.id,state:this.state.toJSONField(),rewards:this.rewards.toJSONField(),feeShareBp:this.feeShareBp.toString(),canDeposit:this.canDeposit,canWithdraw:this.canWithdraw,decimals:this.decimals,balance:this.balance.toJSONField()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,i){return o.reified(a).new({id:ee(rt.reified(),i.id),state:ee(tn.reified(a),i.state),rewards:ee(en.reified(a),i.rewards),feeShareBp:ee("u64",i.feeShareBp),canDeposit:ee("bool",i.canDeposit),canWithdraw:ee("bool",i.canWithdraw),decimals:ee("u8",i.decimals),balance:ee(je.reified(a),i.balance)})}static fromJSON(a,i){if(i.$typeName!==o.$typeName)throw new Error(`not a Pool json object: expected '${o.$typeName}' but got '${i.$typeName}'`);return At(ie(o.$typeName,z(a)),i.$typeArgs,[a]),o.fromJSONField(a,i)}static fromCoreObject(a,i){if(!ta(i.type))throw new Error(`object at ${i.objectId} is not a Pool object`);let r=ue(i.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let s=0;s<1;s++){let d=J(r[s]),A=J(z([a][s]));if(d!==A)throw new Error(`type argument mismatch at position ${s}: expected '${A}' but got '${d}'`)}return o.fromBcs(a,i.content)}static fromSuiParsedData(a,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!ta(i.type))throw new Error(`object at ${i.fields.id} is not a Pool object`);return o.fromFieldsWithTypes(a,i)}static fromSuiObjectData(a,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!ta(i.bcs.type))throw new Error("object at is not a Pool object");let r=ue(i.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let s=0;s<1;s++){let d=J(r[s]),A=J(z([a][s]));if(d!==A)throw new Error(`type argument mismatch at position ${s}: expected '${A}' but got '${d}'`)}return o.fromBcs(a,oc(i.bcs.bcsBytes))}if(i.content)return o.fromSuiParsedData(a,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,i,r){let{object:s}=await a.core.getObject({objectId:r,include:{content:!0}});if(!ta(s.type))throw new Error(`object at id ${r} is not a Pool object`);let d=ue(s.type).typeArgs;if(d.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${d.length}'`);for(let A=0;A<1;A++){let l=J(d[A]),u=J(z([i][A]));if(l!==u)throw new Error(`type argument mismatch at position ${A}: expected '${u}' but got '${l}'`)}return o.fromBcs(i,s.content)}};import{bcs as Fr}from"@mysten/sui/bcs";import{fromBase64 as sc}from"@mysten/sui/utils";function na(o){return o=J(o),o.startsWith(`${et("bridge","user_deposit::UserDeposit")}::user_deposit::UserDeposit<`)}var bi=class o{__StructClass=!0;static get $typeName(){return`${et("bridge","user_deposit::UserDeposit")}::user_deposit::UserDeposit`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;id;lpAmount;rewardDebt;constructor(a,i){this.$fullTypeName=ie(o.$typeName,...a),this.$typeArgs=a,this.id=i.id,this.lpAmount=i.lpAmount,this.rewardDebt=i.rewardDebt}static reified(a){let i=o.bcs;return{get typeName(){return o.$typeName},get fullTypeName(){return ie(o.$typeName,z(a))},get typeArgs(){return[z(a)]},isPhantom:o.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>o.fromFields(a,r),fromFieldsWithTypes:r=>o.fromFieldsWithTypes(a,r),fromBcs:r=>o.fromFields(a,i.parse(r)),bcs:i,fromJSONField:r=>o.fromJSONField(a,r),fromJSON:r=>o.fromJSON(a,r),fromCoreObject:r=>o.fromCoreObject(a,r),fromSuiParsedData:r=>o.fromSuiParsedData(a,r),fromSuiObjectData:r=>o.fromSuiObjectData(a,r),fetch:async(r,s)=>o.fetch(r,a,s),new:r=>new o([z(a)],r),kind:"StructClassReified"}}static get r(){return o.reified}static phantom(a){return fe(o.reified(a))}static get p(){return o.phantom}static instantiateBcs(){return Fr.struct("UserDeposit",{id:rt.bcs,lp_amount:Fr.u64(),reward_debt:Fr.u64()})}static cachedBcs=null;static get bcs(){return o.cachedBcs||(o.cachedBcs=o.instantiateBcs()),o.cachedBcs}static fromFields(a,i){return o.reified(a).new({id:te(rt.reified(),i.id),lpAmount:te("u64",i.lp_amount),rewardDebt:te("u64",i.reward_debt)})}static fromFieldsWithTypes(a,i){if(!na(i.type))throw new Error("not a UserDeposit type");return It(i,[a]),o.reified(a).new({id:q(rt.reified(),i.fields.id),lpAmount:q("u64",i.fields.lp_amount),rewardDebt:q("u64",i.fields.reward_debt)})}static fromBcs(a,i){return o.fromFields(a,o.bcs.parse(i))}toJSONField(){return{id:this.id,lpAmount:this.lpAmount.toString(),rewardDebt:this.rewardDebt.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,i){return o.reified(a).new({id:ee(rt.reified(),i.id),lpAmount:ee("u64",i.lpAmount),rewardDebt:ee("u64",i.rewardDebt)})}static fromJSON(a,i){if(i.$typeName!==o.$typeName)throw new Error(`not a UserDeposit json object: expected '${o.$typeName}' but got '${i.$typeName}'`);return At(ie(o.$typeName,z(a)),i.$typeArgs,[a]),o.fromJSONField(a,i)}static fromCoreObject(a,i){if(!na(i.type))throw new Error(`object at ${i.objectId} is not a UserDeposit object`);let r=ue(i.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let s=0;s<1;s++){let d=J(r[s]),A=J(z([a][s]));if(d!==A)throw new Error(`type argument mismatch at position ${s}: expected '${A}' but got '${d}'`)}return o.fromBcs(a,i.content)}static fromSuiParsedData(a,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!na(i.type))throw new Error(`object at ${i.fields.id} is not a UserDeposit object`);return o.fromFieldsWithTypes(a,i)}static fromSuiObjectData(a,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!na(i.bcs.type))throw new Error("object at is not a UserDeposit object");let r=ue(i.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let s=0;s<1;s++){let d=J(r[s]),A=J(z([a][s]));if(d!==A)throw new Error(`type argument mismatch at position ${s}: expected '${A}' but got '${d}'`)}return o.fromBcs(a,sc(i.bcs.bcsBytes))}if(i.content)return o.fromSuiParsedData(a,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,i,r){let{object:s}=await a.core.getObject({objectId:r,include:{content:!0}});if(!na(s.type))throw new Error(`object at id ${r} is not a UserDeposit object`);let d=ue(s.type).typeArgs;if(d.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${d.length}'`);for(let A=0;A<1;A++){let l=J(d[A]),u=J(z([i][A]));if(l!==u)throw new Error(`type argument mismatch at position ${A}: expected '${u}' but got '${l}'`)}return o.fromBcs(i,s.content)}};function As(o,a,i){if(a.length===0||!a[0])return[];let r=a[0],s=o.reduce((l,u)=>l+BigInt(u),BigInt(0)),d=BigInt(r.balance),A=[];for(let l of a.slice(1)){if(d>s)return ds(i,r,A,o);d+=BigInt(l.balance),A.push(l)}return d>=s?ds(i,r,A,o):[]}function ds(o,a,i,r){let s=r.map(d=>o.pure.u64(d));return i.length>0&&o.mergeCoins(a.coinObjectId,i.map(d=>d.coinObjectId)),o.splitCoins(a.coinObjectId,s)}var dc="0x0000000000000000000000000000000000000000000000000000000000000000";async function cs(o,a,i){let r=await o.devInspectTransactionBlock({sender:dc,transactionBlock:a});if(r.effects.status.status!=="success")throw new Error(`inspectionResult failed. ${JSON.stringify(r,null,2)}`);let s=r.results?.pop()?.returnValues?.pop();if(!s)throw new Error(`Something with inspectionResult went wrong. ${JSON.stringify(r,null,2)}`);let[d,A]=s;return typeof i=="object"?i.fromBcs(Uint8Array.from(d)).toJSONField():Jn(i).parse(Uint8Array.from(d))}var Ci=class extends Le{constructor(i,r,s){super();this.suiRpcUrl=i;this.params=r;this.api=s;this.client=new Ac({url:i,network:r.suiIsTestnet?"testnet":"mainnet"})}suiRpcUrl;params;api;chainType="SUI";client;async getUserBalanceInfo(i,r){if(!r.originTokenAddress)throw new w("SUI token must contain 'originTokenAddress'");let s=r.suiAddresses;if(!s)throw new w("SUI token must contain 'suiAddresses'");wt(s.bridgeAddress,s.bridgeAddressOrigin);let A=(await this.fetchDeposits(i,r.originTokenAddress)).reduce((l,u)=>{if(u.data)return l.lpAmount+=BigInt(u.data.content.fields.lp_amount),l.rewardDebt+=BigInt(u.data.content.fields.reward_debt),l;throw new w("Deposits fetch failed")},{lpAmount:BigInt(0),rewardDebt:BigInt(0)});return new we({lpAmount:A.lpAmount.toString(),rewardDebt:A.rewardDebt.toString()})}async fetchDeposits(i,r){return await ht(s=>this.client.getOwnedObjects({owner:i,filter:{StructType:bi.phantom(fe(r)).phantomType},options:{showContent:!0},cursor:s}))}async getPoolInfoFromChain(i){let r=i.suiAddresses;if(!r)throw new w("SUI token must contain 'suiAddresses'");if(wt(r.bridgeAddress,r.bridgeAddressOrigin),!i.originTokenAddress)throw new w("SUI token must contain 'originTokenAddress'");let s=48,d=new yi;Do(d,i.originTokenAddress,r.bridgeObjectAddress);let A=await cs(this.client,d,mi.reified(fe(i.originTokenAddress))),l=A.state.tokenBalance,u=A.state.vusdBalance,b=Fe({tokenBalance:l,vUsdBalance:u});return{dValue:A.state.d,aValue:A.state.a,totalLpAmount:A.rewards.lpSupply,vUsdBalance:u,tokenBalance:l,accRewardPerShareP:A.rewards.accRewardPerShareP,p:s,imbalance:b}}async buildRawTransactionDeposit(i){let r=i.token.suiAddresses;if(!r)throw new w("SUI token must contain 'suiAddresses'");if(wt(r.bridgeAddress,r.bridgeAddressOrigin),!i.token.originTokenAddress)throw new w("SUI token must contain 'originTokenAddress'");let s=await ht(C=>this.client.getCoins({owner:i.accountAddress,coinType:i.token.originTokenAddress,cursor:C}));if(s.length===0||!s[0])throw new lt("No coins to deposit");let d=s[0],A=new yi;A.setSender(i.accountAddress);let{depositObj:l,isNewDeposit:u}=await this.getDepositObject(i.accountAddress,i.token.originTokenAddress,A),[b]=As([i.amount],s,A);if(!b)throw new lt("No coins to deposit");if(!i.token.originTokenAddress)throw new w("SUI token must contain 'originTokenAddress'");let y=Qo(A,i.token.originTokenAddress,{bridge:r.bridgeObjectAddress,userDeposit:l,coin:b});return A.mergeCoins(d.coinObjectId,[y]),u&&A.transferObjects([l],i.accountAddress),await A.toJSON({client:this.client})}async getDepositObject(i,r,s){let d=await this.fetchDeposits(i,r);if(d.length===0||!d[0]){let A=fe(r).phantomType;return{depositObj:Eo(s,A),isNewDeposit:!0}}else{if(d[0].data?.objectId)return{depositObj:d[0].data.objectId,isNewDeposit:!1};throw new w("Something went wrong while deposit")}}async buildRawTransactionWithdraw(i){let r=i.token.suiAddresses;if(!r)throw new w("SUI token must contain 'suiAddresses'");if(wt(r.bridgeAddress,r.bridgeAddressOrigin),!i.token.originTokenAddress)throw new w("SUI token must contain 'originTokenAddress'");let s=fe(i.token.originTokenAddress).phantomType,d=new yi;d.setSender(i.accountAddress);let{depositObj:A,isNewDeposit:l}=await this.getDepositObject(i.accountAddress,i.token.originTokenAddress,d);if(l)throw new lt("No deposit found");let u=Ko(d,s,{bridge:r.bridgeObjectAddress,userDeposit:A,amountLp:BigInt(i.amount)}),b=await ht(y=>this.client.getCoins({owner:i.accountAddress,coinType:i.token.originTokenAddress,cursor:y}));if(!u[0]||!u[1])throw new w("No rewards found");return b[0]?d.mergeCoins(b[0].coinObjectId,[u[0],u[1]]):(d.mergeCoins(u[0],[u[1]]),d.transferObjects([u[0]],i.accountAddress)),await d.toJSON({client:this.client})}async buildRawTransactionClaimRewards(i){let r=i.token.suiAddresses;if(!r)throw new w("SUI token must contain 'suiAddresses'");if(wt(r.bridgeAddress,r.bridgeAddressOrigin),!i.token.originTokenAddress)throw new w("SUI token must contain 'originTokenAddress'");let s=fe(i.token.originTokenAddress).phantomType,d=new yi;d.setSender(i.accountAddress);let{depositObj:A,isNewDeposit:l}=await this.getDepositObject(i.accountAddress,i.token.originTokenAddress,d);if(l)throw new lt("No deposit found");let u=Uo(d,s,{bridge:r.bridgeObjectAddress,userDeposit:A}),b=await ht(y=>this.client.getCoins({owner:i.accountAddress,coinType:i.token.originTokenAddress,cursor:y}));return b[0]?d.mergeCoins(b[0].coinObjectId,[u]):d.transferObjects([u],i.accountAddress),await d.toJSON({client:this.client})}};import{Web3 as Ii}from"web3";import{encodeFunctionCall as cc}from"web3-eth-abi";var aa=class extends Le{constructor(i,r,s){super();this.tronWeb=i;this.api=r;this.tronJsonRpc=s}tronWeb;api;tronJsonRpc;chainType="TRX";P=52;async getUserBalanceInfo(i,r){let s;if(this.tronJsonRpc)try{s=await this.getUserBalanceInfoByBatch(this.tronJsonRpc,i,r)}catch{s=await this.getUserBalanceInfoPerProperty(i,r)}else s=await this.getUserBalanceInfoPerProperty(i,r);return s}async getUserBalanceInfoByBatch(i,r,s){let d=Pn(s.poolAddress),A=Pn(r),l=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:d,data:this.getFunctionAbi("userRewardDebt",A)},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:d,data:this.getFunctionAbi("balanceOf",A)},"latest"]}],b=await(await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(l)})).json();if(Array.isArray(b)&&b.length===2){let y=C=>{let f=b.find(v=>v.id===C);if(!f||!f.result)throw new Error(`Missing or invalid result for id ${C}`);return Ii.utils.toBigInt(f.result).toString()};return new we({lpAmount:Ii.utils.toBigInt(y(2)).toString(),rewardDebt:Ii.utils.toBigInt(y(1)).toString()})}throw new Error("Batched HTTP call failed")}async getUserBalanceInfoPerProperty(i,r){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(i);let s=this.getContract(r.poolAddress),d=(await s.methods.userRewardDebt(i).call()).toString(),A=(await s.methods.balanceOf(i).call()).toString();return new we({lpAmount:A,rewardDebt:d})}async getPoolInfoFromChain(i){let r;if(this.tronJsonRpc)try{r=await this.getPoolInfoByBatch(this.tronJsonRpc,i)}catch{r=await this.getPoolInfoPerProperty(i)}else r=await this.getPoolInfoPerProperty(i);return r}async getPoolInfoByBatch(i,r){let s=Pn(r.poolAddress),d=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("a")},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("d")},"latest"]},{jsonrpc:"2.0",id:3,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("tokenBalance")},"latest"]},{jsonrpc:"2.0",id:4,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("vUsdBalance")},"latest"]},{jsonrpc:"2.0",id:5,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("totalSupply")},"latest"]},{jsonrpc:"2.0",id:6,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("accRewardPerShareP")},"latest"]}],l=await(await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)})).json();if(Array.isArray(l)&&l.length===6){let u=f=>{let v=l.find(T=>T.id===f);if(!v||!v.result)throw new Error(`Missing or invalid result for id ${f}`);return Ii.utils.toBigInt(v.result).toString()},b=u(3),y=u(4),C=Fe({tokenBalance:b,vUsdBalance:y});return{aValue:u(1),dValue:u(2),tokenBalance:b,vUsdBalance:y,totalLpAmount:u(5),accRewardPerShareP:u(6),p:this.P,imbalance:C}}throw new Error("Batched pool info call failed")}async getPoolInfoPerProperty(i){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(i.poolAddress);let r=this.getContract(i.poolAddress),[s,d,A,l,u,b]=await Promise.all([r.methods.a().call(),r.methods.d().call(),r.methods.tokenBalance().call(),r.methods.vUsdBalance().call(),r.methods.totalSupply().call(),r.methods.accRewardPerShareP().call()]),y=A.toString(),C=l.toString(),f=Fe({tokenBalance:y,vUsdBalance:C});return{aValue:s.toString(),dValue:d.toString(),tokenBalance:y,vUsdBalance:C,totalLpAmount:u.toString(),accRewardPerShareP:b.toString(),p:this.P,imbalance:f}}buildRawTransactionDeposit(i){let{amount:r,accountAddress:s}=i,d=[{type:"uint256",value:r}];return this.buildRawTransaction(i.token.poolAddress,"deposit(uint256)",d,"0",s)}buildRawTransactionWithdraw(i){let{amount:r,accountAddress:s}=i,d=[{type:"uint256",value:r}];return this.buildRawTransaction(i.token.poolAddress,"withdraw(uint256)",d,"0",s)}buildRawTransactionClaimRewards(i){let{accountAddress:r}=i,s=[];return this.buildRawTransaction(i.token.poolAddress,"claimRewards()",s,"0",r)}async buildRawTransaction(i,r,s,d,A){let l=await this.tronWeb.transactionBuilder.triggerSmartContract(i,r,{callValue:+d},s,A);if(!l?.result?.result)throw new w("Unknown error: "+JSON.stringify(l,null,2));return l.transaction}getContract(i){return this.tronWeb.contract(Kn.abi,i)}getFunctionAbi(i,...r){let s=Kn.abi.find(d=>d.type==="function"&&"name"in d&&d.name===i);if(!s)throw new Error(`${i} method not found in Pool ABI`);return cc(s,r)}};var hi=class{constructor(a,i,r,s){this.api=a;this.nodeRpcUrlsConfig=i;this.params=r;this.tokenService=s;this.rawTxBuilder=new Ai(a,i,this.params,s);let d=r.cachePoolInfoChainSec??20,A=d>0?d*1e3:20*1e3;this.cache=new lc({defaultTtl:A})}api;nodeRpcUrlsConfig;params;tokenService;rawTxBuilder;cache;async getAllowance(a,i){if(i){let r=a,s=i;return await this.tokenService.getAllowance({...s,spender:s.token.poolAddress},r)}else{let r=a;return await this.tokenService.getAllowance({...r,spender:r.token.poolAddress})}}async checkAllowance(a,i){if(i){let r=a,s=i;return this.tokenService.checkAllowance({...s,spender:s.token.poolAddress},r)}else{let r=a;return this.tokenService.checkAllowance({...r,spender:r.token.poolAddress})}}async approve(a,i){return this.tokenService.approve(a,{...i,spender:i.token.poolAddress})}async getAmountToBeDeposited(a,i,r){$(a),D("amount",a,i.decimals);let s=await this.getPoolInfoFromChain(i,r),{vUsdBalance:d,tokenBalance:A,aValue:l,dValue:u}=s,b=as(a,l,u,A,d);return H(b,3).toFixed()}async getAmountToBeWithdrawn(a,i,r,s){$(a),D("amount",a,r.decimals);let d=await this.getPoolInfoFromChain(r,s),A=is(a),l=ze(A,r.decimals),b=(await this.getUserBalanceInfo(i,r,s)).earned(d)||"0",y=gc(l).plus(b).toFixed();return H(y,r.decimals).toFixed()}async getUserBalanceInfo(a,i,r){return Cn(i.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).getUserBalanceInfo(a,i)}async getPoolInfoFromChain(a,i){let r={chainSymbol:a.chainSymbol,poolAddress:a.poolAddress},s=this.cache.get(r);if(s)return s;{let d=await Cn(a.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).getPoolInfoFromChain(a);return this.cache.put(r,d),this.api.cachePut({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress},d),d}}};function Cn(o,a,i,r,s){switch(Q.getChainProperty(o).chainType){case"EVM":{if(s)return new Dn(s,a);{let d=i.getNodeRpcUrl(o),A=new bc(d);return A.defaultReturnFormat={number:mc.STR,bytes:uc.HEX},new Dn(A,a)}}case"TRX":{let d=i.getNodeRpcUrl(o),A=r.tronJsonRpc;if(s)return new aa(s,a,A);{let l=new pc({fullHost:d});return new aa(l,a,A)}}case"SOLANA":{let d=i.getNodeRpcUrl(o);return new ci(d,a)}case"SRB":return new li(i,r,a);case"SUI":return new Ci(i.getNodeRpcUrl(o),r,a);case"ALG":if(s){let d=s,A=gs.fromClients({algod:d});return new Un(A,a)}else{let d=i.getNodeRpcUrl(o),A=gs.fromConfig({algodConfig:{server:d}});return new Un(A,a)}case"STX":{let d=i.getNodeRpcUrl(o);return new pi(d,r,a)}}}import{TronWeb as Ic}from"tronweb";import{FMT_BYTES as hc,FMT_NUMBER as vc,Web3 as fc}from"web3";var yc={abi:[{inputs:[{internalType:"string",name:"tokenName_",type:"string"},{internalType:"string",name:"tokenSymbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"lpAmount",type:"uint256"}],name:"Deposited",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"token",type:"address"}],name:"DepositedRewards",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256[4]",name:"values",type:"uint256[4]"}],name:"MultiTransfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdrawn",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"NUM_TOKENS",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"},{internalType:"uint256",name:"minVirtualAmount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"depositRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"getEstimatedAmountOnDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"getRewardsAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"virtualAmount",type:"uint256"}],name:"getWithdrawProportionAmount",outputs:[{internalType:"uint256[4]",name:"",type:"uint256[4]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"pools",outputs:[{internalType:"contract IPool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"},{internalType:"contract IPool",name:"pool",type:"address"}],name:"setPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subBalanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"subDepositRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"subTotalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subTransfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subTransferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"virtualAmount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"tokens",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"virtualAmount",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},vi=yc;var nn=class{};var ia=class extends nn{constructor(i,r){super();this.web3=i;this.api=r}web3;api;chainType="EVM";async balanceOf(i){let r=(await this.getYieldContract(i.token.yieldAddress).methods.balanceOf(i.owner).call()).toString();return H(r,3).toFixed()}async getEstimatedAmountOnDeposit(i){let r=j(i.amount,i.token.decimals).toFixed(),s=(await this.getYieldContract(i.token.yieldAddress).methods.getEstimatedAmountOnDeposit(r,i.token.yieldId).call()).toString();return H(s,3).toFixed()}async getWithdrawProportionAmount(i){let r=j(i.amount,3).toFixed();return await this.getYieldContract(i.cydToken.yieldAddress).methods.getWithdrawProportionAmount(i.owner,r).call()}async buildRawTransactionDeposit(i){return Promise.resolve({...this.buildTxParams({owner:i.owner,yieldAddress:i.token.yieldAddress}),data:this.getYieldContract(i.token.yieldAddress).methods.deposit(i.amount,i.token.yieldId,i.minVirtualAmount).encodeABI()})}async buildRawTransactionWithdraw(i){return Promise.resolve({...this.buildTxParams({owner:i.owner,yieldAddress:i.token.yieldAddress}),data:this.getYieldContract(i.token.yieldAddress).methods.withdraw(i.amount).encodeABI()})}buildTxParams(i){return{from:i.owner,to:i.yieldAddress,value:"0"}}getYieldContract(i){return new this.web3.eth.Contract(vi.abi,i)}};var fi=class{constructor(a,i,r,s){this.api=a;this.nodeRpcUrlsConfig=i;this.params=r;this.tokenService=s}api;nodeRpcUrlsConfig;params;tokenService;async approve(a,i){return this.tokenService.buildRawTransactionApprove({...a,spender:a.token.yieldAddress},i)}async deposit(a,i){return $(a.amount),D("amount",a.amount,a.token.decimals),$(a.minVirtualAmount),D("minVirtualAmount",a.minVirtualAmount,3),a.amount=j(a.amount,a.token.decimals).toFixed(),a.minVirtualAmount=j(a.minVirtualAmount,3).toFixed(),hn(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,a.owner,i).buildRawTransactionDeposit(a)}async withdraw(a,i){return $(a.amount),D("amount",a.amount,3),a.amount=j(a.amount,3).toFixed(),hn(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,a.owner,i).buildRawTransactionWithdraw(a)}};var ra=class extends nn{constructor(i,r){super();this.tronWeb=i;this.api=r}tronWeb;api;chainType="TRX";async balanceOf(i){let r=(await(await this.getContract(i.token.yieldAddress)).methods.balanceOf(i.owner).call()).toString();return H(r,3).toFixed()}async getEstimatedAmountOnDeposit(i){let r=j(i.amount,i.token.decimals).toFixed(),s=(await(await this.getContract(i.token.yieldAddress)).methods.getEstimatedAmountOnDeposit(r,i.token.yieldId).call()).toString();return H(s,3).toFixed()}async getWithdrawProportionAmount(i){let r=j(i.amount,3).toFixed();return(await(await this.getContract(i.cydToken.yieldAddress)).methods.getWithdrawProportionAmount(i.owner,r).call()).toString().split(",")}async buildRawTransactionDeposit(i){let{amount:r,owner:s,token:d,minVirtualAmount:A}=i,l=[{type:"uint256",value:r},{type:"uint256",value:d.yieldId},{type:"uint256",value:A}];return this.buildRawTransaction(i.token.yieldAddress,"deposit(uint256,uint256,uint256)",l,"0",s)}async buildRawTransactionWithdraw(i){let{amount:r,owner:s}=i,d=[{type:"uint256",value:r}];return this.buildRawTransaction(i.token.yieldAddress,"withdraw(uint256)",d,"0",s)}async buildRawTransaction(i,r,s,d,A){let l=await this.tronWeb.transactionBuilder.triggerSmartContract(i,r,{callValue:+d},s,A);if(!l?.result?.result)throw new w("Unknown error: "+JSON.stringify(l,null,2));return l.transaction}getContract(i){return this.tronWeb.contract(vi.abi,i)}};function Cc(o){if(!Ri(o))throw new Ia("Token does not support Yield")}function Ri(o){return!!o.yieldAddress&&o.yieldId!==void 0}var Ti=class{constructor(a,i,r,s){this.api=a;this.nodeRpcUrlsConfig=i;this.params=r;this.tokenService=s;this.rawTxBuilder=new fi(a,i,r,s)}api;nodeRpcUrlsConfig;params;tokenService;rawTxBuilder;async getCYDTokens(){let a=[],i=await this.api.getChainDetailsMap("pool");return Object.values(i).forEach(r=>{if(r.yieldAddress){let s=r.tokens.find(A=>A.tokenAddress===r.yieldAddress),d=r.tokens.filter(Ri);if(d.length>0){let A=s??{allbridgeChainId:r.allbridgeChainId,apr:"",apr30d:"",apr7d:"",bridgeId:r.bridgeId,paddingUtilId:r.paddingUtilId,bridgeAddress:r.bridgeAddress,chainId:r.chainId,chainName:r.name,chainSymbol:r.chainSymbol,chainType:r.chainType,confirmations:r.confirmations,decimals:3,feeShare:"",lpRate:"",name:"Core Yield",poolAddress:"",symbol:"CYD",tokenAddress:r.yieldAddress,transferTime:{},txCostAmount:{maxAmount:"0",swap:"0",transfer:"0"},yieldAddress:r.yieldAddress};a.push({...A,yieldAddress:r.yieldAddress,tokens:d})}}}),a}async getAllowance(a,i){return await this.tokenService.getAllowance({...a,spender:a.token.yieldAddress},i)}async checkAllowance(a,i){return this.tokenService.checkAllowance({...a,spender:a.token.yieldAddress},i)}async balanceOf(a,i){return hn(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,a.owner,i).balanceOf(a)}async getEstimatedAmountOnDeposit(a,i){return $(a.amount),D("amount",a.amount,a.token.decimals),hn(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,a.token.yieldAddress,i).getEstimatedAmountOnDeposit(a)}async getWithdrawAmounts(a,i){$(a.amount),D("amount",a.amount,3);let r=await hn(a.cydToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,a.owner,i).getWithdrawProportionAmount(a);return a.cydToken.tokens.filter(s=>r[s.yieldId]!==void 0).map(s=>({amount:H(r[s.yieldId],s.decimals).toFixed(),token:s}))}};function hn(o,a,i,r,s){switch(Q.getChainProperty(o).chainType){case"EVM":{if(s)return new ia(s,a);{let d=i.getNodeRpcUrl(o),A=new fc(d);return A.defaultReturnFormat={number:vc.STR,bytes:hc.HEX},new ia(A,a)}}case"TRX":{if(s)return new ra(s,a);{let d=i.getNodeRpcUrl(o),A=new Ic({fullHost:d});return A.setAddress(r),new ra(A,a)}}case"SOLANA":throw new K;case"SRB":throw new K;case"SUI":throw new K;case"ALG":throw new K;case"STX":throw new K}}import{Big as Te}from"big.js";function us(o,a,i){let r=Rc(o,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo),s=Tc(r.amountIncludingCommissionInSystemPrecision,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo);return{swapToVUsdCalcResult:r,swapFromVUsdCalcResult:s}}function ms(o,a,i){let r=Bc(o,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo),s=Yc(r.amountIncludingCommissionInSystemPrecision,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo);return{swapToVUsdCalcResult:r,swapFromVUsdCalcResult:s}}function Rc(o,{feeShare:a,decimals:i},r){let s=Te(o),d=s.times(a),A=s.minus(d);return{bridgeFeeInTokenPrecision:d.round().toFixed(),amountIncludingCommissionInSystemPrecision:ls(Rt(A,i),r),amountExcludingCommissionInSystemPrecision:ls(Rt(s,i),r)}}function ls(o,a){if(o.eq(0))return"0";let i=Te(a.tokenBalance).plus(o),r=ut(i.toFixed(),a.aValue,a.dValue);return Te(a.vUsdBalance).minus(r).round().toFixed()}function Tc(o,{feeShare:a,decimals:i},r){if(Te(o).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let d=Te(o).plus(r.vUsdBalance),A=ut(d,r.aValue,r.dValue),l=ze(Te(r.tokenBalance).minus(A),i),u=Te(l).times(a),b=Te(l).minus(u).round();return{bridgeFeeInTokenPrecision:u.round().toFixed(),amountIncludingCommissionInTokenPrecision:b.toFixed(),amountExcludingCommissionInTokenPrecision:l.toFixed()}}function Bc(o,{feeShare:a,decimals:i},r){let s=Te(a).div(Te(1).minus(a)),d=Te(o).times(s),A=Te(o).plus(d);return{bridgeFeeInTokenPrecision:d.round().toFixed(),amountIncludingCommissionInSystemPrecision:ps(Rt(A,i),r),amountExcludingCommissionInSystemPrecision:ps(Rt(o,i),r)}}function ps(o,a){let i=Te(a.tokenBalance).minus(o),r=ut(i.toFixed(),a.aValue,a.dValue);return Te(r).minus(a.vUsdBalance).round().toFixed()}function Yc(o,{feeShare:a,decimals:i},r){if(Te(o).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let s=Te(r.vUsdBalance).minus(o),d=ut(s.toFixed(),r.aValue,r.dValue),A=Te(d).minus(r.tokenBalance),l=ze(A.toFixed(),i),u=Te(a).div(Te(1).minus(a)),b=Te(l).times(u),y=Te(l).plus(b);return{bridgeFeeInTokenPrecision:b.round().toFixed(),amountIncludingCommissionInTokenPrecision:y.round().toFixed(),amountExcludingCommissionInTokenPrecision:l.toFixed()}}import{Big as Ht}from"big.js";function bs(o,a,i,r,s){let d=pt(o,a,i),A=ze(d,a.decimals),l=Xn(d,r,s),u=Ht(o).times(a.feeShare),b=Ht(l).div(Ht(1).minus(r.feeShare)).minus(l);return{sourceLPSwap:{fee:H(u,a.decimals).neg().round(a.decimals,Ht.roundUp).toFixed(),swap:H(Ht(o).minus(A).minus(u),a.decimals).neg().round(a.decimals,Ht.roundUp).toFixed()},destLPSwap:{fee:H(b,r.decimals).neg().round(r.decimals,Ht.roundUp).toFixed(),swap:H(ze(d,r.decimals).minus(l).minus(b),r.decimals).neg().round(r.decimals,Ht.roundUp).toFixed()}}}import{AlgorandClient as ys}from"@algorandfoundation/algokit-utils";import{ABIMethod as Wc,OnApplicationComplete as wc}from"algosdk";var Bi=class{constructor(a){this.nodeRpcUrlsConfig=a}nodeRpcUrlsConfig;async checkAssetOptIn(a,i,r){let s=this.getAlgorand(r);return wa(a,i,s)}async buildRawTransactionAssetOptIn(a,i,r){let s=this.getAlgorand(r);typeof a=="string"&&(a=BigInt(a));let d=await s.createTransaction.assetOptIn({assetId:a,sender:i});return Vt(d)}async checkAppOptIn(a,i,r){let s=this.getAlgorand(r);return Fa(a,i,s)}async buildRawTransactionAppOptIn(a,i,r){let s=this.getAlgorand(r);typeof a=="string"&&(a=BigInt(a));let d=s.newGroup(),A=s.account.random();d.addAppCallMethodCall({appId:a,method:new Wc({name:"optInToApplication",desc:void 0,args:[],returns:{type:"void",desc:void 0},events:[],readonly:!1}),args:[],sender:i,signer:A,onComplete:wc.OptInOC});let{transactions:l}=await d.buildTransactions();return Vt(...l)}getAlgorand(a){if(a){let i=ys.fromClients({algod:a});return i.setDefaultValidityWindow(100),i}else{let i=this.nodeRpcUrlsConfig.getNodeRpcUrl("ALG"),r=ys.fromConfig({algodConfig:{server:i}});return r.setDefaultValidityWindow(100),r}}};import{AxiosHeaders as Sc,create as kc}from"axios";var Cs="3.34.0-alpha.1";function Is(o){return Object.entries(o).reduce((a,i)=>{let r=i[0],s=i[1],d=Vc(r,s);return d&&(a[r]=d),a},{})}function hs(o){let a={};for(let[i,r]of Object.entries(o)){let s=i;for(let d of r.tokens){let A=vn({chainSymbol:s,poolAddress:d.poolAddress}),l=Fe(d.poolInfo);a[A]={...d.poolInfo,imbalance:l}}}return a}function Fc(o,a){let{name:i,...r}=o,{poolInfo:s,...d}=a;return{...d,...r,chainName:i}}function Nc(o){switch(o){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;case"cctpV2":return 4;case"oft":return 5;case"xReserve":return 6}}function Zc(o){return Object.entries(o).reduce((a,[i,r])=>(a[i]=Gc(r),a),{})}function Gc(o){return Object.entries(o).reduce((a,[i,r])=>{let s=Nc(i);return s&&r!=null&&(a[s]=r),a},{})}function Vc(o,a){let i=Q.getChainsProperties()[o];if(!i)return null;let r={...i,allbridgeChainId:a.chainId,bridgeId:a.bridgeId,paddingUtilId:a.paddingUtilId,bridgeAddress:a.bridgeAddress,oftBridgeAddress:a.oftBridgeAddress,yieldAddress:a.yieldAddress,abrPayer:a.abrPayer?{payerAddress:a.abrPayer.payerAddress,abrToken:{chainSymbol:o,tokenAddress:a.abrPayer.tokenAddress,decimals:a.abrPayer.tokenDecimals},payerAvailability:Xc(a.abrPayer.payerAvailability)}:void 0,transferTime:Zc(a.transferTime),txCostAmount:a.txCostAmount,confirmations:a.confirmations,suiAddresses:a.suiAddresses};return{...r,tokens:a.tokens.map(s=>Fc(r,s))}}function Xc(o){if(!o)return{};let a={};for(let[i,r]of Object.entries(o)){if(!r)continue;let s=Pc[i];s&&(a[s]=!0)}return a}var Pc=Object.fromEntries(Object.entries(Ui).map(([o,a])=>[a,Pe[o]]));function vn(o){return o.chainSymbol+"_"+o.poolAddress}function vs(o){let a=[];for(let[i,r]of Object.entries(o)){let s=i;for(let d of r.tokens)a.push({chainSymbol:s,poolAddress:d.poolAddress})}return a}function fs(o){let a={};for(let[i,r]of Object.entries(o)){let s=i;for(let[d,A]of Object.entries(r))A.imbalance=Fe(A),a[vn({chainSymbol:s,poolAddress:d})]=A}return a}var fn=class{api;constructor(a){this.api=kc({baseURL:a.coreApiUrl,headers:{Accept:"application/json",...a.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+Cs},params:a.coreApiQueryParams}),a.coreApiHeadersProvider&&this.api.interceptors.request.use(async i=>{let r=await a.coreApiHeadersProvider?.();if(!r||Object.keys(r).length===0)return i;let s=Sc.from(i.headers);for(let[d,A]of Object.entries(r))!A||s.has(d)||s.set(d,A);return i.headers=s,i})}async getTokenInfo(){let{data:a}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:Is(a),poolInfoMap:hs(a)}}async getPendingInfo(){let{data:a}=await this.api.get("/pending-info");return a}async getGasBalance(a,i){let{data:r}=await this.api.get(`/check/${a}/${i}`);return r}async getTransferStatus(a,i){let{data:r}=await this.api.get(`/chain/${a}/${i}`);return r}async getReceiveTransactionCost(a){if(a.messenger===5&&!a.sourceToken)throw new ma("For OFT sourceToken required");let{data:i}=await this.api.post("/receive-fee",a,{headers:{"Content-Type":"application/json"}});return{exchangeRate:i.exchangeRate,fee:i.fee,sourceNativeTokenPrice:i.sourceNativeTokenPrice,abrExchangeRate:i.abrExchangeRate,adminFeeShareWithExtras:i.adminFeeShareWithExtras}}async getPoolInfoMap(a){let i=a instanceof Array?a:[a],{data:r}=await this.api.post("/pool-info",{pools:i},{headers:{"Content-Type":"application/json"}});return fs(r)}};import Yi from"timed-cache";var Nr=20*1e3,Lc=55*1e3,Rn=class{constructor(a){this.apiClient=a;this.tokenInfoCache=new Yi({defaultTtl:Lc}),this.receivedTransactionCache=new Yi({defaultTtl:Nr}),this.pendingInfoCache=new Yi({defaultTtl:Nr}),this.gasBalanceCache=new Yi({defaultTtl:Nr})}apiClient;tokenInfoCache;pendingInfoCache;gasBalanceCache;receivedTransactionCache;getTokenInfo(){let a="TOKEN_INFO_CACHE_KEY",i=this.tokenInfoCache.get(a);if(i)return i;let r=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(a,r),r}async getGasBalance(a,i){let r=`GAS_BALANCE_${a}_${i}`,s=this.gasBalanceCache.get(r);if(s)return s;let d=this.apiClient.getGasBalance(a,i);return this.gasBalanceCache.put(r,d),d}async getPendingInfo(){let a="PENDING_INFO_CACHE_KEY",i=this.pendingInfoCache.get(a);if(i)return i;let r=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(a,r),r}async getReceiveTransactionCost(a){let i=`RECEIVE_TX_COST_${a.sourceChainId}_${a.destinationChainId}_${a.messenger}${a.sourceToken?"_"+a.sourceToken:""}`,r=this.receivedTransactionCache.get(i);if(r)return r;let s=await this.apiClient.getReceiveTransactionCost(a);return this.receivedTransactionCache.put(i,s),s}async getTransferStatus(a,i){return this.apiClient.getTransferStatus(a,i)}async getPoolInfoMap(a){return this.apiClient.getPoolInfoMap(a)}};var Tn=class{constructor(a){this.apiClient=a}apiClient;async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let a=await this.getChainDetailsMap();return Object.values(a).flatMap(i=>i.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(a,i){return this.apiClient.getGasBalance(a,i)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(a,i){return await this.apiClient.getTransferStatus(a,i)}async getReceiveTransactionCost(a){return await this.apiClient.getReceiveTransactionCost(a)}async getPoolInfoMap(a){return await this.apiClient.getPoolInfoMap(a)}};var Bn=class{constructor(a,i){this.client=a;this.isStaging=i.coreApiQueryParams?.staging==="true"}client;isStaging;async getChainDetailsMap(a){let i=await this.client.getChainDetailsMap(),r={};for(let s in i){let d=i[s];d&&(r[s]={...d,tokens:Rs(d.tokens,a,this.isStaging)})}return r}async tokens(a){return Rs(await this.client.tokens(),a,this.isStaging)}async getPendingInfo(){return this.client.getPendingInfo()}async getGasBalance(a,i){return this.client.getGasBalance(a,i)}async getTransferStatus(a,i){return await this.client.getTransferStatus(a,i)}async getReceiveTransactionCost(a){return await this.client.getReceiveTransactionCost(a)}cachePut(a,i){return this.client.cachePut(a,i)}getPoolInfoByKey(a){return this.client.getPoolInfoByKey(a)}refreshPoolInfo(a){return this.client.refreshPoolInfo(a)}};function Rs(o,a,i){return o.filter(r=>i?!0:r.flags[a]).map(Mc)}function Mc(o){let{flags:a,...i}=o;return i}import xc from"timed-cache";var Hc=55*1e3,Yn=class{constructor(a){this.client=a;this.poolInfoCache=new Zr}client;poolInfoCache;async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(a,i){return this.client.getTransferStatus(a,i)}getReceiveTransactionCost(a){return this.client.getReceiveTransactionCost(a)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(a,i){return this.client.getGasBalance(a,i)}async getPoolInfoByKey(a){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let i=this.poolInfoCache.get(a);if(i)return i;{let r=await this.client.getPoolInfoMap(a);this.poolInfoCache.putAll(r);let s=r[vn(a)];if(s)return s;throw new w("Cannot find pool info for "+a.poolAddress+" on chain "+a.chainSymbol)}}async refreshPoolInfo(a){let i;if(a)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),i=await this.client.getPoolInfoMap(a);else{let r=await this.client.getChainDetailsMapAndPoolInfoMap();i=await this.client.getPoolInfoMap(vs(r.chainDetailsMap))}this.poolInfoCache.putAll(i)}cachePut(a,i){this.poolInfoCache.put(vn(a),i)}},Zr=class{cache;constructor(){this.cache=new xc({defaultTtl:Hc})}putAll(a){for(let[i,r]of Object.entries(a))this.cache.put(i,r)}putAllIfNotExists(a){for(let[i,r]of Object.entries(a))this.cache.get(i)||this.cache.put(i,r)}put(a,i){this.cache.put(a,i)}get(a){let i=vn(a);return this.cache.get(i)}};import{AlgorandClient as Bs}from"@algorandfoundation/algokit-utils";import{Big as eg}from"big.js";import{TronWeb as tg}from"tronweb";import{Web3 as ng}from"web3";import{Big as Ts}from"big.js";var Me=class{async checkAllowance(a){let i=await this.getAllowance(a);return Ts(i).gte(Ts(a.amount))}};var oa=class extends Me{constructor(i,r){super();this.algorand=i;this.api=r;i.setDefaultValidityWindow(100)}algorand;api;chainType="ALG";approve(i){throw new K}buildRawTransactionApprove(i){throw new K}getAllowance(i){throw new K}async getNativeTokenBalance(i){let{account:r}=i;return(await this.algorand.account.getInformation(r)).balance.microAlgo.toString()}async getTokenBalance(i){let{account:r,token:s}=i;try{return(await this.algorand.asset.getAccountInformation(r,BigInt(s.tokenAddress))).balance.toString()}catch(d){if(d instanceof Error)return d.message.includes("account asset info not found"),"0";throw d}}};var Jc={abi:[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}]},Wi=Jc;var jc="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",zc="0xdac17f958d2ee523a2206206994597c13d831ec7",Oc=1e5,sa=class extends Me{constructor(i,r){super();this.web3=i;this.api=r}web3;api;chainType="EVM";getAllowance(i){let r=i.token.tokenAddress,s=i.owner,d=i.spender;return this.getAllowanceByTokenAddress(r,s,d)}getAllowanceByTokenAddress(i,r,s){return this.getERC20Contract(i).methods.allowance(r,s).call()}async getTokenBalance(i){return await this.getERC20Contract(i.token.tokenAddress).methods.balanceOf(i.account).call()}async getNativeTokenBalance(i){return(await this.web3.eth.getBalance(i.account)).toString()}async approve(i){if(this.isUsdt(i.tokenAddress)&&await this.getAllowanceByTokenAddress(i.tokenAddress,i.owner,i.spender)!=="0"){let d=await this.buildRawTransactionApprove({...i,amount:"0"});await this.sendRawTransaction(d,i.chainSymbol)}let r=await this.buildRawTransactionApprove(i);return await this.sendRawTransaction(r,i.chainSymbol)}isUsdt(i){return i.toLowerCase()===zc}buildRawTransactionApprove(i){let{tokenAddress:r,spender:s,owner:d,amount:A}=i,u=this.getERC20Contract(r).methods.approve(s,A==null?jc:ni(A));return Promise.resolve({from:d,to:r,value:"0",data:u.encodeABI()})}async sendRawTransaction(i,r){let s=i,d={maxPriorityFeePerGas:void 0,maxFeePerGas:void 0};r==="POL"?s.gas=Oc:s.gas=await this.web3.eth.estimateGas(i);let{transactionHash:A}=await this.web3.eth.sendTransaction({...s,...d});return{txId:A.toString()}}getERC20Contract(i){return new this.web3.eth.Contract(Wi.abi,i)}};import{AnchorProvider as Qc}from"@coral-xyz/anchor";import{Connection as Uc,PublicKey as wi}from"@solana/web3.js";var Fi=class extends Me{constructor(i,r){super();this.solanaRpcUrl=i;this.api=r}solanaRpcUrl;api;chainType="SOLANA";approve(i){throw new K}buildRawTransactionApprove(i){throw new K}buildAnchorProvider(i){let r=new Uc(this.solanaRpcUrl,"confirmed"),s=new wi(i);return new Qc(r,{publicKey:s},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(i){throw new K}async getTokenBalance(i){let{account:r,token:s}=i;try{let d=Qe(new wi(r),new wi(s.tokenAddress));return(await ln(d,this.buildAnchorProvider(r))).amount.toString()}catch(d){if(d instanceof Error)return d.message.startsWith("Account does not exist"),"0";throw d}}async getNativeTokenBalance(i){return(await this.buildAnchorProvider(i.account).connection.getBalance(new wi(i.account))).toString()}};import{Horizon as QZ,NotFoundError as Kc}from"@stellar/stellar-sdk";var Ni=class extends Me{constructor(i,r,s){super();this.nodeRpcUrlsConfig=i;this.params=r;this.api=s}nodeRpcUrlsConfig;params;api;chainType="SRB";getAllowance(){throw new K}async getTokenBalance(i){if(!i.token.originTokenAddress)throw new w("OriginTokenAddress missing");let[r,s]=i.token.originTokenAddress.split(":"),d=new QZ.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),A;try{A=await d.loadAccount(i.account)}catch(b){if(b instanceof Kc)return"0";throw b}let u=A.balances.find(b=>(b.asset_type==="credit_alphanum4"||b.asset_type==="credit_alphanum12")&&b.asset_code==r&&b.asset_issuer==s);return u?.balance?j(u.balance,Q.getChainDecimalsByType(Q.getChainProperty(i.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(i){let A=(await new QZ.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(i.account)).balances.find(l=>l.asset_type==="native");return A?.balance?j(A.balance,Q.getChainDecimalsByType(Q.getChainProperty(i.chainSymbol).chainType)).toFixed():"0"}approve(){throw new K}buildRawTransactionApprove(){throw new K}};import{ClarigenClient as Dc,contractFactory as Ec}from"@clarigen/core";import{createNetwork as _c}from"@stacks/network";var Zi=class extends Me{constructor(i,r,s){super();this.nodeRpcUrl=i;this.params=r;this.api=s;let d=_c({network:this.params.stxIsTestnet?"testnet":"mainnet",client:{baseUrl:this.nodeRpcUrl},apiKey:this.params.stxHeroApiKey});this.client=new Dc(d,this.params.stxHeroApiKey)}nodeRpcUrl;params;api;chainType="STX";client;async getTokenBalance(i){let r=Ec(at.ftToken,i.token.tokenAddress);return(await this.client.roOk(r.getBalance({owner:i.account}))).toString()}async getNativeTokenBalance(i){let r=`${this.nodeRpcUrl}/extended/v1/address/${i.account}/stx`,s=await fetch(r,{headers:this.params.stxHeroApiKey?{"x-api-key":this.params.stxHeroApiKey}:void 0});if(!s.ok)throw new Error(`Failed to fetch account: ${s.status}`);let A=(await s.json()).balance;return BigInt(A).toString()}getAllowance(i){throw new K}checkAllowance(i){throw new K}approve(i){throw new K}buildRawTransactionApprove(i){throw new K}};import{SuiJsonRpcClient as $c}from"@mysten/sui/jsonRpc";var Gi=class extends Me{constructor(i,r,s){super();this.suiRpcUrl=i;this.params=r;this.api=s;this.suiClient=new $c({url:this.suiRpcUrl,network:r.suiIsTestnet?"testnet":"mainnet"})}suiRpcUrl;params;api;chainType="SUI";suiClient;approve(i){throw new K}buildRawTransactionApprove(i){throw new K}getAllowance(i){throw new K}async getTokenBalance(i){if(!i.token.originTokenAddress)throw new w("SUI token must contain 'originTokenAddress'");return(await this.suiClient.getBalance({owner:i.account,coinType:i.token.originTokenAddress})).totalBalance}async getNativeTokenBalance(i){let r=await ht(s=>this.suiClient.getCoins({owner:i.account,cursor:s}));return r.length===0?"0":r.reduce((s,d)=>s+BigInt(d.balance),BigInt(0)).toString()}};var qc="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",da=class extends Me{constructor(i,r){super();this.tronWeb=i;this.api=r}tronWeb;api;chainType="TRX";async getAllowance(i){let{token:{tokenAddress:r},owner:s}=i;return(await(await this.getContract(r)).methods.allowance(s,i.spender).call()).toString()}async getTokenBalance(i){return(await(await this.getContract(i.token.tokenAddress)).balanceOf(i.account).call()).toString()}async getNativeTokenBalance(i){return(await this.tronWeb.trx.getBalance(i.account)).toString()}async approve(i){let r=await this.buildRawTransactionApprove(i);return await ai(this.tronWeb,r)}async buildRawTransactionApprove(i){let{tokenAddress:r,spender:s,owner:d,amount:A}=i,l=A==null?qc:ni(A),u=[{type:"address",value:s},{type:"uint256",value:l}];return this.buildRawTransaction(r,"approve(address,uint256)",u,"0",d)}getContract(i){return this.tronWeb.contract(Wi.abi,i)}async buildRawTransaction(i,r,s,d,A){let l=await this.tronWeb.transactionBuilder.triggerSmartContract(i,r,{callValue:+d},s,A);if(!l?.result?.result)throw new w("Unknown error: "+JSON.stringify(l,null,2));return l.transaction}};var Wn=class{constructor(a,i,r){this.api=a;this.nodeRpcUrlsConfig=i;this.params=r}api;nodeRpcUrlsConfig;params;async getAllowance(a,i){let r=await this.getChainTokenService(a.token.chainSymbol,a.owner,i).getAllowance(a);return H(r,a.token.decimals).toFixed()}async checkAllowance(a,i){return $(a.amount),D("amount",a.amount,a.token.decimals),this.getChainTokenService(a.token.chainSymbol,a.owner,i).checkAllowance(this.prepareCheckAllowanceParams(a))}async approve(a,i){return i.amount&&(ji(i.amount),D("amount",i.amount,i.token.decimals)),this.getChainTokenService(i.token.chainSymbol,i.owner,a).approve(this.prepareApproveParams(i))}async buildRawTransactionApprove(a,i){return a.amount&&(ji(a.amount),D("amount",a.amount,a.token.decimals)),this.getChainTokenService(a.token.chainSymbol,a.owner,i).buildRawTransactionApprove(this.prepareApproveParams(a))}async getTokenBalance(a,i){let r=await this.getChainTokenService(a.token.chainSymbol,a.account,i).getTokenBalance(a);return a.token.decimals?H(r,a.token.decimals).toFixed():r}async getNativeTokenBalance(a,i){let r=await this.getChainTokenService(a.chainSymbol,a.account,i).getNativeTokenBalance(a);return{int:r,float:H(r,Q.getChainDecimalsByType(Q.getChainProperty(a.chainSymbol).chainType)).toFixed()}}getChainTokenService(a,i,r){switch(Q.getChainProperty(a).chainType){case"EVM":{if(r)return new sa(r,this.api);{let s=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new sa(new ng(s),this.api)}}case"TRX":{if(r)return new da(r,this.api);{let s=this.nodeRpcUrlsConfig.getNodeRpcUrl(a),d=new tg({fullHost:s});return d.setAddress(i),new da(d,this.api)}}case"SOLANA":{let s=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new Fi(s,this.api)}case"SRB":return new Ni(this.nodeRpcUrlsConfig,this.params,this.api);case"SUI":return new Gi(this.nodeRpcUrlsConfig.getNodeRpcUrl(a),this.params,this.api);case"ALG":if(r){let s=r,d=Bs.fromClients({algod:s});return new oa(d,this.api)}else{let s=this.nodeRpcUrlsConfig.getNodeRpcUrl(a),d=Bs.fromConfig({algodConfig:{server:s}});return new oa(d,this.api)}case"STX":{let s=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new Zi(s,this.params,this.api)}}}prepareCheckAllowanceParams(a){return{...a,amount:j(a.amount,a.token.decimals)}}prepareApproveParams(a){return{tokenAddress:a.token.tokenAddress,owner:a.owner,spender:a.spender,chainSymbol:a.token.chainSymbol,amount:a.amount==null?void 0:eg(a.amount).toFixed()}}};var Vi=class{constructor(a,i){this.nodeRpcUrlsConfig=a;this.params=i;let r=new fn(i),s=new Rn(r),d=new Tn(s),A=new Yn(d);this.api=new Bn(A,i),this.tokenService=new Wn(this.api,a,i)}nodeRpcUrlsConfig;params;api;tokenService;buildRawTransactionApprove(a,i){return this.tokenService.buildRawTransactionApprove(a,i)}checkAllowance(a,i){return this.tokenService.checkAllowance(a,i)}getAllowance(a,i){return this.tokenService.getAllowance(a,i)}};import{Connection as ag,PublicKey as ig,TransactionMessage as rg}from"@solana/web3.js";var Xi=class{constructor(a,i){this.nodeRpcUrlsConfig=a;this.params=i}nodeRpcUrlsConfig;params;async addMemoToTx(a,i){if(i.length>28)throw new w("InvalidArgumentException memo cannot be more than 28 characters");let r=new ag(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),s=await Qt(a,r),d=rg.decompile(a.message,{addressLookupTableAccounts:s}),A=d.instructions[d.instructions.length-1];if(!A?.keys)throw new w("Last instruction or its keys are invalid.");A.keys.push({pubkey:new ig(I.from(i)),isSigner:!1,isWritable:!1}),a.message=d.compileToV0Message(s)}};import{Asset as dg,contract as YX,Horizon as Ys,Operation as Ag,Operation as cg,rpc as ca,TimeoutInfinite as gg,TransactionBuilder as Gr,TransactionBuilder as Ws}from"@stellar/stellar-sdk";import{contract as e}from"@stellar/stellar-sdk";var og=e.Spec,sg=e.Client;var Aa=class extends sg{constructor(i){super(new og(["AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB","AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA","AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=","AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==","AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ","AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA","AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==","AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==","AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA=="]),i);this.options=i}options;fromJSON={allowance:this.txFromJSON,authorized:this.txFromJSON,approve:this.txFromJSON,balance:this.txFromJSON,burn:this.txFromJSON,burn_from:this.txFromJSON,clawback:this.txFromJSON,decimals:this.txFromJSON,mint:this.txFromJSON,name:this.txFromJSON,set_admin:this.txFromJSON,admin:this.txFromJSON,set_authorized:this.txFromJSON,symbol:this.txFromJSON,transfer:this.txFromJSON,transfer_from:this.txFromJSON}};var lg=180,Pi=class{constructor(a,i){this.nodeRpcUrlsConfig=a;this.params=i}nodeRpcUrlsConfig;params;async buildChangeTrustLineXdrTx(a){let r=await new Ys.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(a.sender),d=await this.getContract(Aa,a.tokenAddress).name();if(un(d))throw new w;let A=pn(d);if(!A)throw new w;let[l,u]=A.split(":");if(l===void 0||u===void 0)throw new w("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let b=new dg(l,u),y=cg.changeTrust({asset:b,limit:a.limit}),C=await So(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB"));return new Ws(r,{fee:C.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(y).setTimeout(lg).build().toXDR()}async getBalanceLine(a,i){let s=await this.getContract(Aa,i).name();if(un(s))throw new w;let d=pn(s);if(!d)throw new w;let[A,l]=d.split(":"),u=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new Ys.Server(u).loadAccount(a)).balances.find(f=>(f.asset_type==="credit_alphanum4"||f.asset_type==="credit_alphanum12")&&f.asset_code==A&&f.asset_issuer==l)}async submitTransactionStellar(a){let i=new Ys.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),r=Ws.fromXDR(a,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await i.submitTransaction(r)}async simulateAndCheckRestoreTxRequiredSoroban(a,i){let r=this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB"),s=new ca.Server(r),d=await s.getAccount(i),A=Gr.fromXDR(a,this.params.sorobanNetworkPassphrase),l=await s.simulateTransaction(A);if(ca.Api.isSimulationRestore(l)){let u=await Yt(r);return new Gr(d,{fee:(u+ +l.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(l.restorePreamble.transactionData.build()).addOperation(Ag.restoreFootprint({})).setTimeout(gg).build().toXDR()}}async sendTransactionSoroban(a){let i=new ca.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),r=Gr.fromXDR(a,this.params.sorobanNetworkPassphrase);return i.sendTransaction(r)}async confirmTx(a,i=15){let r=new ca.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),s=await Ur(()=>r.getTransaction(a),A=>A.status===ca.Api.GetTransactionStatus.NOT_FOUND,i);if(s.length===0)throw new w("No transaction responses found.");let d=s[s.length-1];if(!d)throw new w("Unexpected error: last response is undefined.");return d}getContract(a,i){let r={contractId:i,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new a(r)}};var Si=class{constructor(a,i,r){this.nodeRpcUrlsConfig=a;this.params=i;this.api=r}nodeRpcUrlsConfig;params;api;_suiBridgeService;async buildSendTxFromCustomTx(a,i,r){return this.suiBridgeService.buildRawTransactionSendFromCustomTx(a,i,r)}get suiBridgeService(){return this._suiBridgeService||(this._suiBridgeService=new yn(this.nodeRpcUrlsConfig,this.params,this.api)),this._suiBridgeService}};var ki=class{constructor(a){this.service=a;this.srb=new Pi(a.nodeRpcUrlsConfig,a.params),this.sol=new Xi(a.nodeRpcUrlsConfig,a.params),this.sui=new Si(a.nodeRpcUrlsConfig,a.params,a.api),this.evm=new Vi(a.nodeRpcUrlsConfig,a.params),this.alg=new Bi(a.nodeRpcUrlsConfig)}service;srb;sol;sui;evm;alg};var tt=(r=>(r.WITH_NATIVE_CURRENCY="native",r.WITH_STABLECOIN="stablecoin",r.WITH_ABR="abr",r))(tt||{}),Za=(i=>(i.INT="int",i.FLOAT="float",i))(Za||{});import{Big as me}from"big.js";var ga=class{constructor(a){this.nodeRpcUrls=a}nodeRpcUrls;getNodeRpcUrl(a){let i=this.nodeRpcUrls[a];if(i!==void 0)return i;throw new Ca(a)}},Li=class{constructor(a,i=ua){this.nodeRpcUrlsConfig=a;Q.addChainsProperties(i.additionalChainsProperties);let r=new fn(i),s=new Rn(r),d=new Tn(s),A=new Yn(d);this.api=new Bn(A,i),this.tokenService=new Wn(this.api,a,i),this.bridge=new ii(this.api,a,i,this.tokenService),this.pool=new hi(this.api,a,i,this.tokenService),this.yield=new Ti(this.api,a,i,this.tokenService),this.params=i}nodeRpcUrlsConfig;api;tokenService;params;bridge;pool;yield;async chainDetailsMap(a){return this.api.getChainDetailsMap(a)}async tokens(a){return this.api.tokens(a)}async tokensByChain(a,i){let s=(await this.api.getChainDetailsMap(i))[a];return s?s.tokens:[]}async getTransferStatus(a,i){return this.api.getTransferStatus(a,i)}async getGasBalance(a,i){return this.api.getGasBalance(a,i)}async checkAddress(){return new Promise(a=>{a({status:"OK",gasBalance:null})})}async getPendingStatusInfo(a,i,r,s){$(a);let d;i=="float"?(D("amount",a,r.decimals),d=j(a,r.decimals).toFixed()):d=a;let A=pt(d,r,await Ne(this.api,r)),l=await Ne(this.api,s),u=this.getAmountFromVUsdFormatted(A,s,l),b,y=await this.api.getPendingInfo();for(let C in y[s.chainSymbol]){let f=y[s.chainSymbol];if(!f)throw new w("Cannot find pending info for "+s.chainSymbol);b=f[C]}if(b){let C=Kr(b.totalSentAmount,l),f=this.getAmountFromVUsdFormatted(A,s,C),v;return me(f.int).gt(u.int)?v={min:u,max:f}:v={min:f,max:u},{pendingTxs:b.pendingTxs,pendingAmount:{int:Se(b.totalSentAmount,3,s.decimals).toFixed(0),float:H(b.totalSentAmount,3).toFixed()},estimatedAmount:v}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:u,max:u}}}async getTokenBalance(a,i){return this.tokenService.getTokenBalance(a,i)}async getNativeTokenBalance(a,i){return this.tokenService.getNativeTokenBalance(a,i)}async calculateFeePercentOnSourceChain(a,i){$(a),D("amountFloat",a,i.decimals);let r=j(a,i.decimals);if(r.eq(0))return 0;let s=pt(r,i,await Ne(this.api,i)),d=ze(s,i.decimals);return Di(r,d)}async calculateFeePercentOnDestinationChain(a,i,r){$(a),D("amountFloat",a,i.decimals);let s=j(a,i.decimals);if(s.eq(0))return 0;let d=pt(s,i,await Ne(this.api,i)),A=Xn(d,r,await Ne(this.api,r)),l=ze(d,r.decimals);return Di(l,A)}async getAmountToBeReceivedAndGasFeeOptions(a,i,r,s){return $(a),D("amountToSendFloat",a,i.decimals),{amountToSendFloat:me(a).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(a,i,r,s),gasFeeOptions:await this.getGasFeeOptions(i,r,s)}}async getAmountToSendAndGasFeeOptions(a,i,r,s){return $(a),D("amountToBeReceivedFloat",a,r.decimals),{amountToSendFloat:await this.getAmountToSend(a,i,r,s),amountToBeReceivedFloat:me(a).toFixed(),gasFeeOptions:await this.getGasFeeOptions(i,r,s)}}async getAmountToBeReceived(a,i,r,s){return this.getAmountToBeReceivedCompute(a,i,r,s,async()=>await Ne(this.api,i),async()=>await Ne(this.api,r))}async getAmountToBeReceivedFromChain(a,i,r,s,d,A){return this.getAmountToBeReceivedCompute(a,i,r,s,async()=>await this.pool.getPoolInfoFromChain(i,d),async()=>await this.pool.getPoolInfoFromChain(r,A))}async getAmountToBeReceivedCompute(a,i,r,s,d,A){switch(s){case 1:case 2:return this.getAmountToBeReceivedComputeWithPools(a,i,r,await d(),await A());case 3:case 4:return this.getAmountToBeReceivedComputeCctp(a,i,r,s);case 6:return this.getAmountToBeReceivedComputeXReserve(a,i,r);case 5:return this.getAmountToBeReceivedComputeOft(a,i,r)}}getAmountToBeReceivedComputeWithPools(a,i,r,s,d){$(a),D("amountToSendFloat",a,i.decimals);let A=j(a,i.decimals),l=pt(A,i,s);return this.getAmountFromVUsdFormatted(l,r,d).float}getAmountToBeReceivedComputeCctp(a,i,r,s){$(a),D("amountToSendFloat",a,i.decimals);let d=j(a,i.decimals);switch(s){case 3:{if(!i.cctpAddress||!r.cctpAddress||!i.cctpFeeShare)throw new We("Such route does not support CCTP protocol");let A=d.mul(me(1).minus(i.cctpFeeShare)).round(0,me.roundUp),l=Se(A,i.decimals,r.decimals).round(0);return H(l,r.decimals).toFixed()}case 4:{if(!i.cctpV2Address||!r.cctpV2Address||!i.cctpV2FeeShare)throw new We("Such route does not support CCTP V2 protocol");let A=d.mul(me(1).minus(i.cctpV2FeeShare)).round(0,me.roundUp),l=Se(A,i.decimals,r.decimals).round(0);return H(l,r.decimals).toFixed()}}}getAmountToBeReceivedComputeXReserve(a,i,r){$(a),D("amountToSendFloat",a,i.decimals);let s=this.getXReserveConfig(i,r),A=j(a,i.decimals).mul(me(1).minus(s.feeShare)).minus(s.feeConst).round(0,me.roundDown);if(A.lte(0)){let u=me(s.feeConst).div(me(1).minus(s.feeShare)),b=H(u,i.decimals);throw new w(`Amount is too low for xReserve route: amount must be greater than ${b.toFixed(2,me.roundUp)} ${i.symbol??""}`.trim())}let l=Se(A,i.decimals,r.decimals).round(0);return H(l,r.decimals).toFixed()}async getAmountToBeReceivedComputeOft(a,i,r){$(a),D("amountToSendFloat",a,i.decimals);let s=j(a,i.decimals);if(!i.oftBridgeAddress||!r.oftBridgeAddress||i.oftId!==r.oftId)throw new Ve("Such route does not support OFT protocol");let{adminFeeShareWithExtras:d}=await this.api.getReceiveTransactionCost({sourceChainId:i.allbridgeChainId,destinationChainId:r.allbridgeChainId,messenger:5,sourceToken:i.tokenAddress});if(!d)throw new Ve("Such route does not support OFT protocol");let A=s.mul(me(1).minus(d)).round(0,me.roundUp),l=Se(A,i.decimals,r.decimals).round(0);return H(l,r.decimals).toFixed()}async getAmountToSend(a,i,r,s){return this.getAmountToSendCompute(a,i,r,s,()=>Ne(this.api,i),()=>Ne(this.api,r))}async getAmountToSendFromChain(a,i,r,s,d,A){return this.getAmountToSendCompute(a,i,r,s,()=>this.pool.getPoolInfoFromChain(i,d),()=>this.pool.getPoolInfoFromChain(r,A))}async getAmountToSendCompute(a,i,r,s,d,A){switch(s){case 1:case 2:return this.getAmountToSendComputeWithPools(a,i,r,await d(),await A());case 3:case 4:return this.getAmountToSendComputeCctp(a,i,r,s);case 6:return this.getAmountToSendComputeXReserve(a,i,r);case 5:return this.getAmountToSendComputeOft(a,i,r)}}getAmountToSendComputeWithPools(a,i,r,s,d){$(a),D("amountToBeReceivedFloat",a,r.decimals);let A=j(a,r.decimals),l=Er(A,r,d),u=Dr(l,i,s);if(me(u).lte(0))throw new ft;return H(u,i.decimals).toFixed()}getAmountToSendComputeCctp(a,i,r,s){$(a),D("amountToBeReceivedFloat",a,r.decimals);let d=j(a,r.decimals);switch(s){case 3:{if(!i.cctpAddress||!r.cctpAddress||!i.cctpFeeShare)throw new We("Such route does not support CCTP protocol");let A=d.div(me(1).minus(i.cctpFeeShare)).round(0,me.roundDown),l=Se(A,r.decimals,i.decimals).round(0);return H(l,i.decimals).toFixed()}case 4:{if(!i.cctpV2Address||!r.cctpV2Address||!i.cctpV2FeeShare)throw new We("Such route does not support CCTP V2 protocol");let A=d.div(me(1).minus(i.cctpV2FeeShare)).round(0,me.roundDown),l=Se(A,r.decimals,i.decimals).round(0);return H(l,i.decimals).toFixed()}}}getAmountToSendComputeXReserve(a,i,r){$(a),D("amountToBeReceivedFloat",a,r.decimals);let s=this.getXReserveConfig(i,r),d=j(a,r.decimals),l=Se(d,r.decimals,i.decimals).round(0).plus(s.feeConst).div(me(1).minus(s.feeShare)).round(0,me.roundUp);if(l.lte(0))throw new w("Amount is too low for xReserve route");return H(l,i.decimals).toFixed()}getXReserveConfig(a,i){if(!a.xReserve||!i.xReserve)throw new w("Such route does not support xReserve protocol");if(me(a.xReserve.feeShare).gte(1))throw new w("xReserve feeShare must be less than 1");return a.xReserve}async getAmountToSendComputeOft(a,i,r){$(a),D("amountToBeReceivedFloat",a,r.decimals);let s=j(a,r.decimals);if(!i.oftId||!r.oftId||!i.oftBridgeAddress||i.oftId!==r.oftId)throw new Ve("Such route does not support OFT protocol");let{adminFeeShareWithExtras:d}=await this.api.getReceiveTransactionCost({sourceChainId:i.allbridgeChainId,destinationChainId:r.allbridgeChainId,messenger:5,sourceToken:i.tokenAddress});if(!d)throw new Ve("Such route does not support OFT protocol");let A=s.div(me(1).minus(d)).round(0,me.roundDown),l=Se(A,r.decimals,i.decimals).round(0);return H(l,i.decimals).toFixed()}async getGasFeeOptions(a,i,r){return _i(a,i.allbridgeChainId,r,this.api)}getAverageTransferTime(a,i,r){return a.transferTime?.[i.chainSymbol]?.[r]??null}async getPoolInfoByToken(a){return await this.api.getPoolInfoByKey({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress})}async refreshPoolInfo(a){if(a){let r=(a instanceof Array?a:[a]).map(s=>({chainSymbol:s.chainSymbol,poolAddress:s.poolAddress}));return this.api.refreshPoolInfo(r)}return this.api.refreshPoolInfo()}aprInPercents(a){return $r(a)}async getExtraGasMaxLimits(a,i,r){return await $i(a,i,r,this.api)}async getVUsdFromAmount(a,i,r){$(a);let s;i=="float"?(D("amount",a,r.decimals),s=j(a,r.decimals).toFixed()):s=a;let d=pt(s,r,await Ne(this.api,r));return{int:d,float:H(d,3).toFixed()}}async getAmountFromVUsd(a,i){return this.getAmountFromVUsdFormatted(a,i,await Ne(this.api,i))}getAmountFromVUsdFormatted(a,i,r){$(a);let s=Xn(a,i,r);if(me(s).lt(0))throw new ft;return{int:s,float:H(s,i.decimals).toFixed()}}async swapAndBridgeFeeCalculation(a,i,r){return us(a,{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await Ne(this.api,i)},{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await Ne(this.api,r)})}async swapAndBridgeFeeCalculationReverse(a,i,r){let s=ms(a,{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await Ne(this.api,i)},{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await Ne(this.api,r)}),d=s.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(me(d).lt(0))throw new ft;return s}async getSendAmountDetails(a,i,r,s){$(a);let d;return i=="float"?(D("amount",a,r.decimals),d=j(a,r.decimals).toFixed()):d=a,bs(d,r,await Ne(this.api,r),s,await Ne(this.api,s))}};function pg(o){return"solanaRpcUrl"in o}var ws=class{params;bridge;pool;yield;utils;service;constructor(a,i=ua){let r;pg(a)?r=new ga({SOL:a.solanaRpcUrl,TRX:a.tronRpcUrl}):r=new ga(a),this.service=new Li(r,i),this.bridge=this.service.bridge,this.pool=this.service.pool,this.yield=this.service.yield,this.utils=new ki(this.service),this.params=i}async chainDetailsMap(a="swap"){return this.service.chainDetailsMap(a)}async tokens(a="swap"){return this.service.tokens(a)}async tokensByChain(a,i="swap"){return this.service.tokensByChain(a,i)}async getTransferStatus(a,i){return this.service.getTransferStatus(a,i)}async getGasBalance(a,i){return this.service.getGasBalance(a,i)}async checkAddress(a,i,r){return await this.service.checkAddress()}async getPendingStatusInfo(a,i,r,s){return this.service.getPendingStatusInfo(a,i,r,s)}async getTokenBalance(a,i){return this.service.getTokenBalance(a,i)}async getNativeTokenBalance(a,i){return this.service.getNativeTokenBalance(a,i)}async calculateFeePercentOnSourceChain(a,i){return this.service.calculateFeePercentOnSourceChain(a,i)}async calculateFeePercentOnDestinationChain(a,i,r){return this.service.calculateFeePercentOnDestinationChain(a,i,r)}async getAmountToBeReceivedAndGasFeeOptions(a,i,r,s){return this.service.getAmountToBeReceivedAndGasFeeOptions(a,i,r,s)}async getAmountToSendAndGasFeeOptions(a,i,r,s){return this.service.getAmountToSendAndGasFeeOptions(a,i,r,s)}async getAmountToBeReceived(a,i,r,s){return this.service.getAmountToBeReceived(a,i,r,s)}async getAmountToBeReceivedFromChain(a,i,r,s,d,A){return this.service.getAmountToBeReceivedFromChain(a,i,r,s,d,A)}getAmountToBeReceivedFromPools(a,i,r,s,d,A){switch(A){case 1:case 2:return this.service.getAmountToBeReceivedComputeWithPools(a,i,r,s,d);case 3:case 4:return this.service.getAmountToBeReceivedComputeCctp(a,i,r,A);case 6:return this.service.getAmountToBeReceivedComputeXReserve(a,i,r)}}async getAmountToSend(a,i,r,s){return this.service.getAmountToSend(a,i,r,s)}async getAmountToSendFromChain(a,i,r,s,d,A){return this.service.getAmountToSendFromChain(a,i,r,s,d,A)}getAmountToSendFromPools(a,i,r,s,d,A){switch(A){case 1:case 2:return this.service.getAmountToSendComputeWithPools(a,i,r,s,d);case 3:case 4:return this.service.getAmountToSendComputeCctp(a,i,r,A);case 6:return this.service.getAmountToSendComputeXReserve(a,i,r)}}async getGasFeeOptions(a,i,r){return this.service.getGasFeeOptions(a,i,r)}getAverageTransferTime(a,i,r){return this.service.getAverageTransferTime(a,i,r)}async getPoolInfoByToken(a){return this.service.getPoolInfoByToken(a)}async refreshPoolInfo(a){return this.service.refreshPoolInfo(a)}aprInPercents(a){return this.service.aprInPercents(a)}async getExtraGasMaxLimits(a,i,r){return this.service.getExtraGasMaxLimits(a,i,r)}async getVUsdFromAmount(a,i,r){return this.service.getVUsdFromAmount(a,i,r)}async getAmountFromVUsd(a,i){return this.service.getAmountFromVUsd(a,i)}async swapAndBridgeFeeCalculation(a,i,r){return this.service.swapAndBridgeFeeCalculation(a,i,r)}async swapAndBridgeFeeCalculationReverse(a,i,r){return this.service.swapAndBridgeFeeCalculationReverse(a,i,r)}async getSendAmountDetails(a,i,r,s){return this.service.getSendAmountDetails(a,i,r,s)}};export{Qi as AddressStatus,ws as AllbridgeCoreSdk,Za as AmountFormat,vt as AmountNotEnoughError,ya as ArgumentInvalidDecimalsError,We as CCTPDoesNotSupportedError,qe as ChainSymbol,_ as ChainType,Hs as ErrorCode,ba as ExtraGasMaxLimitExceededError,tt as FeePaymentMethod,ft as InsufficientPoolLiquidityError,lt as InvalidAmountError,Zt as InvalidGasFeePaymentOptionError,ma as InvalidMessengerOptionError,on as InvalidTxError,Ge as JupiterError,Pe as Messenger,K as MethodNotSupportedError,Ca as NodeRpcUrlNotInitializedError,Ve as OFTDoesNotSupportedError,w as SdkError,ve as SdkRootError,er as SolanaAutoTxFee,Gn as TimeoutError,ha as TxTooLargeError,Zn as VerifyTxError,Ia as YieldDoesNotSupportedError,Cc as assertYieldIsSupported,Ri as isYieldSupported,ua as mainnet,Ng as nodeRpcUrlsDefault,Fg as nodeUrlsDefault};
|
|
7
7
|
/*! Bundled license information:
|
|
8
8
|
|
|
9
9
|
@jspm/core/nodelibs/browser/chunk-DtuTasat.js:
|